diff --git a/app/assets/javascripts/mapbox-gl.js b/app/assets/javascripts/mapbox-gl.js index 78db5c8..53117e6 100644 --- a/app/assets/javascripts/mapbox-gl.js +++ b/app/assets/javascripts/mapbox-gl.js @@ -1,4 +1,4 @@ -/* Mapbox GL JS is licensed under the 3-Clause BSD License. Full text of license: https://github.com/mapbox/mapbox-gl-js/blob/v1.10.0/LICENSE.txt */ +/* Mapbox GL JS is licensed under the 3-Clause BSD License. Full text of license: https://github.com/mapbox/mapbox-gl-js/blob/v1.10.1/LICENSE.txt */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : @@ -1296,7 +1296,7 @@ var objectKeys = Object.keys || function (obj) { var name = "mapbox-gl"; var description = "A WebGL interactive maps library"; -var version = "1.10.0"; +var version = "1.10.1"; var main = "dist/mapbox-gl.js"; var style = "dist/mapbox-gl.css"; var license = "SEE LICENSE IN LICENSE.txt"; @@ -5296,6 +5296,8 @@ var filter_operator = { has: { }, "!has": { + }, + within: { } } }; @@ -5349,6 +5351,9 @@ var expression_name = { "index-of": { group: "Lookup" }, + slice: { + group: "Lookup" + }, "case": { group: "Decision" }, @@ -5526,6 +5531,9 @@ var expression_name = { floor: { group: "Math" }, + distance: { + group: "Math" + }, "==": { group: "Decision" }, @@ -5570,9 +5578,6 @@ var expression_name = { }, "resolved-locale": { group: "String" - }, - slice: { - group: "String" } } }; @@ -12726,7 +12731,7 @@ function createFilter(filter ) { if (compiled.result === 'error') { throw new Error(compiled.value.map(function (err) { return ((err.key) + ": " + (err.message)); }).join(', ')); } else { - var needGeometry = Array.isArray(filter) && filter.length !== 0 && filter[0] === 'within'; + var needGeometry = geometryNeeded(filter); return {filter: function (globalProperties , feature , canonical ) { return compiled.value.evaluate(globalProperties, feature, {}, canonical); }, needGeometry: needGeometry}; } @@ -12737,6 +12742,15 @@ function compare(a, b) { return a < b ? -1 : a > b ? 1 : 0; } +function geometryNeeded(filter) { + if (!Array.isArray(filter)) { return false; } + if (filter[0] === 'within') { return true; } + for (var index = 1; index < filter.length; index++) { + if (geometryNeeded(filter[index])) { return true; } + } + return false; +} + function convertFilter(filter ) { if (!filter) { return true; } var op = filter[0]; @@ -12755,6 +12769,7 @@ function convertFilter(filter ) { op === '!in' ? convertNegation(convertInOp(filter[1], filter.slice(2))) : op === 'has' ? convertHasOp(filter[1]) : op === '!has' ? convertNegation(convertHasOp(filter[1])) : + op === 'within' ? filter : true; return converted; } @@ -12902,9 +12917,15 @@ function validateNonExpressionFilter(options) { errors.push(new ValidationError((key + "[1]"), value[1], ("string expected, " + type + " found"))); } break; - + case 'within': + type = getType(value[1]); + if (value.length !== 2) { + errors.push(new ValidationError(key, value, ("filter array for \"" + (value[0]) + "\" operator must have 2 elements"))); + } else if (type !== 'object') { + errors.push(new ValidationError((key + "[1]"), value[1], ("object expected, " + type + " found"))); + } + break; } - return errors; } @@ -15057,12 +15078,12 @@ var Transitioning = function Transitioning(properties ) { this._values = (Object.create(properties.defaultTransitioningPropertyValues) ); }; - Transitioning.prototype.possiblyEvaluate = function possiblyEvaluate (parameters , availableImages ) { + Transitioning.prototype.possiblyEvaluate = function possiblyEvaluate (parameters , canonical , availableImages ) { var result = new PossiblyEvaluated(this._properties); // eslint-disable-line no-use-before-define for (var i = 0, list = Object.keys(this._values); i < list.length; i += 1) { var property = list[i]; - result._values[property] = this._values[property].possiblyEvaluate(parameters, availableImages); + result._values[property] = this._values[property].possiblyEvaluate(parameters, canonical, availableImages); } return result; }; @@ -15126,12 +15147,12 @@ var Layout = function Layout(properties ) { return result; }; - Layout.prototype.possiblyEvaluate = function possiblyEvaluate (parameters , availableImages ) { + Layout.prototype.possiblyEvaluate = function possiblyEvaluate (parameters , canonical , availableImages ) { var result = new PossiblyEvaluated(this._properties); // eslint-disable-line no-use-before-define for (var i = 0, list = Object.keys(this._values); i < list.length; i += 1) { var property = list[i]; - result._values[property] = this._values[property].possiblyEvaluate(parameters, availableImages); + result._values[property] = this._values[property].possiblyEvaluate(parameters, canonical, availableImages); } return result; }; @@ -15522,6 +15543,8 @@ var StyleLayer = /*@__PURE__*/(function (Evented) { } this._transitioningPaint = this._transitionablePaint.untransitioned(); + //$FlowFixMe + this.paint = new PossiblyEvaluated(properties.paint); } } @@ -15629,10 +15652,10 @@ var StyleLayer = /*@__PURE__*/(function (Evented) { } if (this._unevaluatedLayout) { - (this ).layout = this._unevaluatedLayout.possiblyEvaluate(parameters, availableImages); + (this ).layout = this._unevaluatedLayout.possiblyEvaluate(parameters, undefined, availableImages); } - (this ).paint = this._transitioningPaint.possiblyEvaluate(parameters, availableImages); + (this ).paint = this._transitioningPaint.possiblyEvaluate(parameters, undefined, availableImages); }; StyleLayer.prototype.serialize = function serialize () { @@ -37024,7 +37047,7 @@ Tile.prototype.setFeatureState = function setFeatureState (states bucket.update(sourceLayerStates, sourceLayer, this.imageAtlas && this.imageAtlas.patternPositions || {}); var layer = painter && painter.style && painter.style.getLayer(id); - if (layer && layer.paint) { + if (layer) { this.queryPadding = Math.max(this.queryPadding, layer.queryRadius(bucket)); } } @@ -40241,6 +40264,12 @@ Worker.prototype.setReferrer = function setReferrer (mapID , referrer ) { Worker.prototype.setImages = function setImages (mapId , images , callback ) { this.availableImages[mapId] = images; + for (var workerSource in this.workerSources[mapId]) { + var ws = this.workerSources[mapId][workerSource]; + for (var source in ws) { + ws[source].availableImages = images; + } + } callback(); }; @@ -56159,6 +56188,10 @@ MapEventHandler.prototype.touchstart = function touchstart (e ) { return this._firePreventable(new MapTouchEvent(e.type, this._map, e)); }; +MapEventHandler.prototype.touchmove = function touchmove (e ) { + this._map.fire(new MapTouchEvent(e.type, this._map, e)); +}; + MapEventHandler.prototype.touchend = function touchend (e ) { this._map.fire(new MapTouchEvent(e.type, this._map, e)); }; @@ -56199,11 +56232,6 @@ BlockableMapEventHandler.prototype.mousemove = function mousemove (e ) { this._map.fire(new MapMouseEvent(e.type, this._map, e)); }; -BlockableMapEventHandler.prototype.touchmove = function touchmove (e ) { - // touchmove map events should not be fired when interaction handlers (pan, rotate, etc) are active - this._map.fire(new MapTouchEvent(e.type, this._map, e)); -}; - BlockableMapEventHandler.prototype.mousedown = function mousedown () { this._delayContextMenu = true; }; @@ -56390,7 +56418,7 @@ BoxZoomHandler.prototype._fireEvent = function _fireEvent (type , e ) { // -function indexTouches(touches , points ) { +function indexTouches(touches , points ) { performance.assert(touches.length === points.length); var obj = {}; for (var i = 0; i < touches.length; i++) { @@ -56427,9 +56455,9 @@ SingleTapRecognizer.prototype.reset = function reset () { this.aborted = false; }; -SingleTapRecognizer.prototype.touchstart = function touchstart (e , points ) { +SingleTapRecognizer.prototype.touchstart = function touchstart (e , points , mapTouches ) { - if (this.centroid || e.targetTouches.length > this.numTouches) { + if (this.centroid || mapTouches.length > this.numTouches) { this.aborted = true; } if (this.aborted) { @@ -56440,16 +56468,16 @@ SingleTapRecognizer.prototype.touchstart = function touchstart (e , point this.startTime = e.timeStamp; } - if (e.targetTouches.length === this.numTouches) { + if (mapTouches.length === this.numTouches) { this.centroid = getCentroid(points); - this.touches = indexTouches(e.targetTouches, points); + this.touches = indexTouches(mapTouches, points); } }; -SingleTapRecognizer.prototype.touchmove = function touchmove (e , points ) { +SingleTapRecognizer.prototype.touchmove = function touchmove (e , points , mapTouches ) { if (this.aborted || !this.centroid) { return; } - var newTouches = indexTouches(e.targetTouches, points); + var newTouches = indexTouches(mapTouches, points); for (var id in this.touches) { var prevPos = this.touches[id]; var pos = newTouches[id]; @@ -56459,12 +56487,12 @@ SingleTapRecognizer.prototype.touchmove = function touchmove (e , points } }; -SingleTapRecognizer.prototype.touchend = function touchend (e ) { +SingleTapRecognizer.prototype.touchend = function touchend (e , points , mapTouches ) { if (!this.centroid || e.timeStamp - this.startTime > MAX_TOUCH_TIME) { this.aborted = true; } - if (e.targetTouches.length === 0) { + if (mapTouches.length === 0) { var centroid = !this.aborted && this.centroid; this.reset(); if (centroid) { return centroid; } @@ -56484,16 +56512,16 @@ TapRecognizer.prototype.reset = function reset () { this.singleTap.reset(); }; -TapRecognizer.prototype.touchstart = function touchstart (e , points ) { - this.singleTap.touchstart(e, points); +TapRecognizer.prototype.touchstart = function touchstart (e , points , mapTouches ) { + this.singleTap.touchstart(e, points, mapTouches); }; -TapRecognizer.prototype.touchmove = function touchmove (e , points ) { - this.singleTap.touchmove(e, points); +TapRecognizer.prototype.touchmove = function touchmove (e , points , mapTouches ) { + this.singleTap.touchmove(e, points, mapTouches); }; -TapRecognizer.prototype.touchend = function touchend (e ) { - var tap = this.singleTap.touchend(e); +TapRecognizer.prototype.touchend = function touchend (e , points , mapTouches ) { + var tap = this.singleTap.touchend(e, points, mapTouches); if (tap) { var soonEnough = e.timeStamp - this.lastTime < MAX_TAP_INTERVAL; var closeEnough = !this.lastTap || this.lastTap.dist(tap) < MAX_DIST; @@ -56537,21 +56565,21 @@ TapZoomHandler.prototype.reset = function reset () { this._zoomOut.reset(); }; -TapZoomHandler.prototype.touchstart = function touchstart (e , points ) { - this._zoomIn.touchstart(e, points); - this._zoomOut.touchstart(e, points); +TapZoomHandler.prototype.touchstart = function touchstart (e , points , mapTouches ) { + this._zoomIn.touchstart(e, points, mapTouches); + this._zoomOut.touchstart(e, points, mapTouches); }; -TapZoomHandler.prototype.touchmove = function touchmove (e , points ) { - this._zoomIn.touchmove(e, points); - this._zoomOut.touchmove(e, points); +TapZoomHandler.prototype.touchmove = function touchmove (e , points , mapTouches ) { + this._zoomIn.touchmove(e, points, mapTouches); + this._zoomOut.touchmove(e, points, mapTouches); }; -TapZoomHandler.prototype.touchend = function touchend (e ) { +TapZoomHandler.prototype.touchend = function touchend (e , points , mapTouches ) { var this$1 = this; - var zoomInPoint = this._zoomIn.touchend(e); - var zoomOutPoint = this._zoomOut.touchend(e); + var zoomInPoint = this._zoomIn.touchend(e, points, mapTouches); + var zoomOutPoint = this._zoomOut.touchend(e, points, mapTouches); if (zoomInPoint) { this._active = true; @@ -56775,20 +56803,20 @@ TouchPanHandler.prototype.reset = function reset () { this._sum = new performance.Point(0, 0); }; -TouchPanHandler.prototype.touchstart = function touchstart (e , points ) { - return this._calculateTransform(e, points); +TouchPanHandler.prototype.touchstart = function touchstart (e , points , mapTouches ) { + return this._calculateTransform(e, points, mapTouches); }; -TouchPanHandler.prototype.touchmove = function touchmove (e , points ) { +TouchPanHandler.prototype.touchmove = function touchmove (e , points , mapTouches ) { if (!this._active) { return; } e.preventDefault(); - return this._calculateTransform(e, points); + return this._calculateTransform(e, points, mapTouches); }; -TouchPanHandler.prototype.touchend = function touchend (e , points ) { - this._calculateTransform(e, points); +TouchPanHandler.prototype.touchend = function touchend (e , points , mapTouches ) { + this._calculateTransform(e, points, mapTouches); - if (this._active && e.targetTouches.length < this._minTouches) { + if (this._active && mapTouches.length < this._minTouches) { this.reset(); } }; @@ -56797,10 +56825,10 @@ TouchPanHandler.prototype.touchcancel = function touchcancel () { this.reset(); }; -TouchPanHandler.prototype._calculateTransform = function _calculateTransform (e , points ) { - if (e.targetTouches.length > 0) { this._active = true; } +TouchPanHandler.prototype._calculateTransform = function _calculateTransform (e , points , mapTouches ) { + if (mapTouches.length > 0) { this._active = true; } - var touches = indexTouches(e.targetTouches, points); + var touches = indexTouches(mapTouches, points); var touchPointSum = new performance.Point(0, 0); var touchDeltaSum = new performance.Point(0, 0); @@ -56864,19 +56892,21 @@ TwoTouchHandler.prototype.reset = function reset () { TwoTouchHandler.prototype._start = function _start (points ) {}; //eslint-disable-line TwoTouchHandler.prototype._move = function _move (points , pinchAround , e ) { return {}; }; //eslint-disable-line -TwoTouchHandler.prototype.touchstart = function touchstart (e , points ) { - if (this._firstTwoTouches || e.targetTouches.length < 2) { return; } +TwoTouchHandler.prototype.touchstart = function touchstart (e , points , mapTouches ) { + //console.log(e.target, e.targetTouches.length ? e.targetTouches[0].target : null); + //log('touchstart', points, e.target.innerHTML, e.targetTouches.length ? e.targetTouches[0].target.innerHTML: undefined); + if (this._firstTwoTouches || mapTouches.length < 2) { return; } this._firstTwoTouches = [ - e.targetTouches[0].identifier, - e.targetTouches[1].identifier + mapTouches[0].identifier, + mapTouches[1].identifier ]; // implemented by child classes this._start([points[0], points[1]]); }; -TwoTouchHandler.prototype.touchmove = function touchmove (e , points ) { +TwoTouchHandler.prototype.touchmove = function touchmove (e , points , mapTouches ) { if (!this._firstTwoTouches) { return; } e.preventDefault(); @@ -56884,8 +56914,8 @@ TwoTouchHandler.prototype.touchmove = function touchmove (e , points var ref = this._firstTwoTouches; var idA = ref[0]; var idB = ref[1]; - var a = getTouchById(e, points, idA); - var b = getTouchById(e, points, idB); + var a = getTouchById(mapTouches, points, idA); + var b = getTouchById(mapTouches, points, idB); if (!a || !b) { return; } var pinchAround = this._aroundCenter ? null : a.add(b).div(2); @@ -56894,14 +56924,14 @@ TwoTouchHandler.prototype.touchmove = function touchmove (e , points }; -TwoTouchHandler.prototype.touchend = function touchend (e , points ) { +TwoTouchHandler.prototype.touchend = function touchend (e , points , mapTouches ) { if (!this._firstTwoTouches) { return; } var ref = this._firstTwoTouches; var idA = ref[0]; var idB = ref[1]; - var a = getTouchById(e, points, idA); - var b = getTouchById(e, points, idB); + var a = getTouchById(mapTouches, points, idA); + var b = getTouchById(mapTouches, points, idB); if (a && b) { return; } if (this._active) { DOM.suppressClick(); } @@ -56931,9 +56961,9 @@ TwoTouchHandler.prototype.isActive = function isActive () { return this._active; }; -function getTouchById(e , points , identifier ) { - for (var i = 0; i < e.targetTouches.length; i++) { - if (e.targetTouches[i].identifier === identifier) { return points[i]; } +function getTouchById(mapTouches , points , identifier ) { + for (var i = 0; i < mapTouches.length; i++) { + if (mapTouches[i].identifier === identifier) { return points[i]; } } } @@ -57697,7 +57727,7 @@ TapDragZoomHandler.prototype.reset = function reset () { this._tap.reset(); }; -TapDragZoomHandler.prototype.touchstart = function touchstart (e , points ) { +TapDragZoomHandler.prototype.touchstart = function touchstart (e , points , mapTouches ) { if (this._swipePoint) { return; } if (this._tapTime && e.timeStamp - this._tapTime > MAX_TAP_INTERVAL) { @@ -57705,19 +57735,19 @@ TapDragZoomHandler.prototype.touchstart = function touchstart (e , points } if (!this._tapTime) { - this._tap.touchstart(e, points); - } else if (e.targetTouches.length > 0) { + this._tap.touchstart(e, points, mapTouches); + } else if (mapTouches.length > 0) { this._swipePoint = points[0]; - this._swipeTouch = e.targetTouches[0].identifier; + this._swipeTouch = mapTouches[0].identifier; } }; -TapDragZoomHandler.prototype.touchmove = function touchmove (e , points ) { +TapDragZoomHandler.prototype.touchmove = function touchmove (e , points , mapTouches ) { if (!this._tapTime) { - this._tap.touchmove(e, points); + this._tap.touchmove(e, points, mapTouches); } else if (this._swipePoint) { - if (e.targetTouches[0].identifier !== this._swipeTouch) { + if (mapTouches[0].identifier !== this._swipeTouch) { return; } @@ -57734,14 +57764,14 @@ TapDragZoomHandler.prototype.touchmove = function touchmove (e , points } }; -TapDragZoomHandler.prototype.touchend = function touchend (e ) { +TapDragZoomHandler.prototype.touchend = function touchend (e , points , mapTouches ) { if (!this._tapTime) { - var point = this._tap.touchend(e); + var point = this._tap.touchend(e, points, mapTouches); if (point) { this._tapTime = e.timeStamp; } } else if (this._swipePoint) { - if (e.targetTouches.length === 0) { + if (mapTouches.length === 0) { this.reset(); } } @@ -58031,10 +58061,10 @@ var RenderFrameEvent = /*@__PURE__*/(function (Event) { - - - - + + + + @@ -58244,6 +58274,10 @@ var HandlerManager = function HandlerManager(map , options return !!this._eventsInProgress.rotate; }; + HandlerManager.prototype.isMoving = function isMoving$1 () { + return Boolean(isMoving(this._eventsInProgress)) || this.isZooming(); + }; + HandlerManager.prototype._blockedByActive = function _blockedByActive (activeHandlers , allowed , myName ) { for (var name in activeHandlers) { if (name === myName) { continue; } @@ -58258,6 +58292,19 @@ var HandlerManager = function HandlerManager(map , options this.handleEvent(e, ((e.type) + "Window")); }; + HandlerManager.prototype._getMapTouches = function _getMapTouches (touches ) { + var mapTouches = []; + for (var i = 0, list = touches; i < list.length; i += 1) { + var t = list[i]; + + var target = ((t.target ) ); + if (this._el.contains(target)) { + mapTouches.push(t); + } + } + return ((mapTouches ) ); + }; + HandlerManager.prototype.handleEvent = function handleEvent (e , eventName ) { if (e.type === 'blur') { @@ -58279,9 +58326,8 @@ var HandlerManager = function HandlerManager(map , options var eventsInProgress = {}; var activeHandlers = {}; - var points = e ? (e.targetTouches ? - DOM.touchPos(this._el, ((e ) ).targetTouches) : - DOM.mousePos(this._el, ((e ) ))) : null; + var mapTouches = e.touches ? this._getMapTouches(((e ) ).touches) : undefined; + var points = mapTouches ? DOM.touchPos(this._el, mapTouches) : DOM.mousePos(this._el, ((e ) )); for (var i = 0, list = this._handlers; i < list.length; i += 1) { var ref = list[i]; @@ -58297,7 +58343,7 @@ var HandlerManager = function HandlerManager(map , options } else { if ((handler )[eventName || e.type]) { - data = (handler )[eventName || e.type](e, points); + data = (handler )[eventName || e.type](e, points, mapTouches); this.mergeHandlerResult(mergedHandlerResult, eventsInProgress, data, handlerName, inputEvent); if (data && data.needsRenderFrame) { this._triggerRenderFrame(); @@ -58432,18 +58478,24 @@ var HandlerManager = function HandlerManager(map , options var wasMoving = isMoving(this._eventsInProgress); var nowMoving = isMoving(newEventsInProgress); - if (!wasMoving && nowMoving) { - this._fireEvent('movestart', nowMoving.originalEvent); - } + var startEvents = {}; for (var eventName in newEventsInProgress) { var ref = newEventsInProgress[eventName]; var originalEvent = ref.originalEvent; - var isStart = !this._eventsInProgress[eventName]; - this._eventsInProgress[eventName] = newEventsInProgress[eventName]; - if (isStart) { - this._fireEvent((eventName + "start"), originalEvent); + if (!this._eventsInProgress[eventName]) { + startEvents[(eventName + "start")] = originalEvent; } + this._eventsInProgress[eventName] = newEventsInProgress[eventName]; + } + + // fire start events only after this._eventsInProgress has been updated + if (!wasMoving && nowMoving) { + this._fireEvent('movestart', nowMoving.originalEvent); + } + + for (var name in startEvents) { + this._fireEvent(name, startEvents[name]); } if (newEventsInProgress.rotate) { this._bearingChanged = true; } @@ -58458,6 +58510,8 @@ var HandlerManager = function HandlerManager(map , options this._fireEvent(eventName$1, originalEvent$1); } + var endEvents = {}; + var originalEndEvent; for (var eventName$2 in this._eventsInProgress) { var ref$2 = this._eventsInProgress[eventName$2]; @@ -58466,10 +58520,14 @@ var HandlerManager = function HandlerManager(map , options if (!this._handlersById[handlerName].isActive()) { delete this._eventsInProgress[eventName$2]; originalEndEvent = deactivatedHandlers[handlerName] || originalEvent$2; - this._fireEvent((eventName$2 + "end"), originalEndEvent); + endEvents[(eventName$2 + "end")] = originalEndEvent; } } + for (var name$1 in endEvents) { + this._fireEvent(name$1, endEvents[name$1]); + } + var stillMoving = isMoving(this._eventsInProgress); if ((wasMoving || nowMoving) && !stillMoving) { this._updatingCamera = true; @@ -60855,7 +60913,7 @@ var Map = /*@__PURE__*/(function (Camera) { * var isMoving = map.isMoving(); */ Map.prototype.isMoving = function isMoving () { - return this._moving || this.handlers.isActive(); + return this._moving || this.handlers.isMoving(); }; /** @@ -65501,4 +65559,4 @@ return exported; return mapboxgl; }))); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwYm94LWdsLWRldi5qcyIsInNvdXJjZXMiOlsiLi4vbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvYXNzZXJ0L25vZGVfbW9kdWxlcy91dGlsL3N1cHBvcnQvaXNCdWZmZXJCcm93c2VyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2Fzc2VydC9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIsIi4uL25vZGVfbW9kdWxlcy9hc3NlcnQvbm9kZV9tb2R1bGVzL3V0aWwvdXRpbC5qcyIsIi4uL25vZGVfbW9kdWxlcy9hc3NlcnQvYXNzZXJ0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BtYXBib3gvdW5pdGJlemllci9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AbWFwYm94L3BvaW50LWdlb21ldHJ5L2luZGV4LmpzIiwiLi4vc3JjL3V0aWwvYnJvd3Nlci93aW5kb3cuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy91dGlsL2RlZXBfZXF1YWwuanMiLCIuLi9zcmMvdXRpbC91dGlsLmpzIiwiLi4vc3JjL3V0aWwvYnJvd3Nlci5qcyIsIi4uL3NyYy91dGlsL2NvbmZpZy5qcyIsIi4uL3NyYy91dGlsL3dlYnBfc3VwcG9ydGVkLmpzIiwiLi4vc3JjL3V0aWwvc2t1X3Rva2VuLmpzIiwiLi4vc3JjL3V0aWwvbWFwYm94LmpzIiwiLi4vc3JjL3V0aWwvdGlsZV9yZXF1ZXN0X2NhY2hlLmpzIiwiLi4vc3JjL3V0aWwvb2Zmc2NyZWVuX2NhbnZhc19zdXBwb3J0ZWQuanMiLCIuLi9zcmMvdXRpbC9hamF4LmpzIiwiLi4vc3JjL3V0aWwvZXZlbnRlZC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3IuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy92YWxpZGF0ZS92YWxpZGF0ZV9jb25zdGFudHMuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy91dGlsL2V4dGVuZC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3V0aWwvdW5idW5kbGVfanNvbmxpbnQuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL3BhcnNpbmdfZXJyb3IuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL3Njb3BlLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9jc3Njb2xvcnBhcnNlci9jc3Njb2xvcnBhcnNlci5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3V0aWwvY29sb3IuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL2NvbGxhdG9yLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9mb3JtYXR0ZWQuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL3Jlc29sdmVkX2ltYWdlLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi92YWx1ZXMuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL2xpdGVyYWwuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL3J1bnRpbWVfZXJyb3IuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL2Fzc2VydGlvbi5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvZm9ybWF0LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9pbWFnZS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvY29lcmNpb24uanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2V2YWx1YXRpb25fY29udGV4dC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vY29tcG91bmRfZXhwcmVzc2lvbi5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvY29sbGF0b3IuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL3dpdGhpbi5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vaXNfY29uc3RhbnQuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL3Zhci5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vcGFyc2luZ19jb250ZXh0LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9zdG9wcy5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvc3RlcC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3V0aWwvaW50ZXJwb2xhdGUuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy91dGlsL2NvbG9yX3NwYWNlcy5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvaW50ZXJwb2xhdGUuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL2NvYWxlc2NlLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9sZXQuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL2F0LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9pbi5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvaW5kZXhfb2YuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL21hdGNoLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9jYXNlLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9zbGljZS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvY29tcGFyaXNvbi5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvbnVtYmVyX2Zvcm1hdC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvbGVuZ3RoLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9pbmRleC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3V0aWwvcmVzdWx0LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdXRpbC9wcm9wZXJ0aWVzLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdXRpbC9nZXRfdHlwZS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2Z1bmN0aW9uL2luZGV4LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9pbmRleC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlL3ZhbGlkYXRlX29iamVjdC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlL3ZhbGlkYXRlX2FycmF5LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfbnVtYmVyLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfZnVuY3Rpb24uanMiLCIuLi9zcmMvc3R5bGUtc3BlYy92YWxpZGF0ZS92YWxpZGF0ZV9leHByZXNzaW9uLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfYm9vbGVhbi5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlL3ZhbGlkYXRlX2NvbG9yLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfZW51bS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2ZlYXR1cmVfZmlsdGVyL2luZGV4LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfZmlsdGVyLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfcHJvcGVydHkuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy92YWxpZGF0ZS92YWxpZGF0ZV9wYWludF9wcm9wZXJ0eS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlL3ZhbGlkYXRlX2xheW91dF9wcm9wZXJ0eS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlL3ZhbGlkYXRlX2xheWVyLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfc3RyaW5nLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfc291cmNlLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfbGlnaHQuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy92YWxpZGF0ZS92YWxpZGF0ZV9mb3JtYXR0ZWQuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy92YWxpZGF0ZS92YWxpZGF0ZV9pbWFnZS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlL3ZhbGlkYXRlLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfZ2x5cGhzX3VybC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlX3N0eWxlLm1pbi5qcyIsIi4uL3NyYy9zdHlsZS92YWxpZGF0ZV9zdHlsZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9ncmlkLWluZGV4L2dyaWQtaW5kZXguanMiLCIuLi9zcmMvdXRpbC93ZWJfd29ya2VyX3RyYW5zZmVyLmpzIiwiLi4vc3JjL3N0eWxlL3pvb21faGlzdG9yeS5qcyIsIi4uL3NyYy91dGlsL2lzX2NoYXJfaW5fdW5pY29kZV9ibG9jay5qcyIsIi4uL3NyYy91dGlsL3NjcmlwdF9kZXRlY3Rpb24uanMiLCIuLi9zcmMvc291cmNlL3J0bF90ZXh0X3BsdWdpbi5qcyIsIi4uL3NyYy9zdHlsZS9ldmFsdWF0aW9uX3BhcmFtZXRlcnMuanMiLCIuLi9zcmMvc3R5bGUvcHJvcGVydGllcy5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllci5qcyIsIi4uL3NyYy91dGlsL3N0cnVjdF9hcnJheS5qcyIsIi4uL3NyYy9kYXRhL2FycmF5X3R5cGVzLmpzIiwiLi4vc3JjL2RhdGEvYnVja2V0L2NpcmNsZV9hdHRyaWJ1dGVzLmpzIiwiLi4vc3JjL2RhdGEvc2VnbWVudC5qcyIsIi4uL3NyYy9zaGFkZXJzL2VuY29kZV9hdHRyaWJ1dGUuanMiLCIuLi9zcmMvZGF0YS9idWNrZXQvcGF0dGVybl9hdHRyaWJ1dGVzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL211cm11cmhhc2gtanMvbXVybXVyaGFzaDNfZ2MuanMiLCIuLi9ub2RlX21vZHVsZXMvbXVybXVyaGFzaC1qcy9tdXJtdXJoYXNoMl9nYy5qcyIsIi4uL25vZGVfbW9kdWxlcy9tdXJtdXJoYXNoLWpzL2luZGV4LmpzIiwiLi4vc3JjL2RhdGEvZmVhdHVyZV9wb3NpdGlvbl9tYXAuanMiLCIuLi9zcmMvcmVuZGVyL3VuaWZvcm1fYmluZGluZy5qcyIsIi4uL3NyYy9kYXRhL3Byb2dyYW1fY29uZmlndXJhdGlvbi5qcyIsIi4uL3NyYy9kYXRhL2luZGV4X2FycmF5X3R5cGUuanMiLCIuLi9zcmMvZGF0YS9leHRlbnQuanMiLCIuLi9zcmMvZGF0YS9sb2FkX2dlb21ldHJ5LmpzIiwiLi4vc3JjL2RhdGEvYnVja2V0L2NpcmNsZV9idWNrZXQuanMiLCIuLi9zcmMvdXRpbC9pbnRlcnNlY3Rpb25fdGVzdHMuanMiLCIuLi9zcmMvc3R5bGUvcXVlcnlfdXRpbHMuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXIvY2lyY2xlX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMuanMiLCIuLi9ub2RlX21vZHVsZXMvZ2wtbWF0cml4L2VzbS9jb21tb24uanMiLCIuLi9ub2RlX21vZHVsZXMvZ2wtbWF0cml4L2VzbS9tYXQyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dsLW1hdHJpeC9lc20vbWF0MmQuanMiLCIuLi9ub2RlX21vZHVsZXMvZ2wtbWF0cml4L2VzbS9tYXQzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dsLW1hdHJpeC9lc20vbWF0NC5qcyIsIi4uL25vZGVfbW9kdWxlcy9nbC1tYXRyaXgvZXNtL3ZlYzMuanMiLCIuLi9ub2RlX21vZHVsZXMvZ2wtbWF0cml4L2VzbS92ZWM0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dsLW1hdHJpeC9lc20vcXVhdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9nbC1tYXRyaXgvZXNtL3F1YXQyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dsLW1hdHJpeC9lc20vdmVjMi5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllci9jaXJjbGVfc3R5bGVfbGF5ZXIuanMiLCIuLi9zcmMvZGF0YS9idWNrZXQvaGVhdG1hcF9idWNrZXQuanMiLCIuLi9zcmMvdXRpbC9pbWFnZS5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllci9oZWF0bWFwX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMuanMiLCIuLi9zcmMvdXRpbC9jb2xvcl9yYW1wLmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyL2hlYXRtYXBfc3R5bGVfbGF5ZXIuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXIvaGlsbHNoYWRlX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXIvaGlsbHNoYWRlX3N0eWxlX2xheWVyLmpzIiwiLi4vc3JjL2RhdGEvYnVja2V0L2ZpbGxfYXR0cmlidXRlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIi4uL25vZGVfbW9kdWxlcy9xdWlja3NlbGVjdC9pbmRleC5qcyIsIi4uL3NyYy91dGlsL2NsYXNzaWZ5X3JpbmdzLmpzIiwiLi4vc3JjL2RhdGEvYnVja2V0L3BhdHRlcm5fYnVja2V0X2ZlYXR1cmVzLmpzIiwiLi4vc3JjL2RhdGEvYnVja2V0L2ZpbGxfYnVja2V0LmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyL2ZpbGxfc3R5bGVfbGF5ZXJfcHJvcGVydGllcy5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllci9maWxsX3N0eWxlX2xheWVyLmpzIiwiLi4vc3JjL2RhdGEvYnVja2V0L2ZpbGxfZXh0cnVzaW9uX2F0dHJpYnV0ZXMuanMiLCIuLi9ub2RlX21vZHVsZXMvQG1hcGJveC92ZWN0b3ItdGlsZS9saWIvdmVjdG9ydGlsZWZlYXR1cmUuanMiLCIuLi9ub2RlX21vZHVsZXMvQG1hcGJveC92ZWN0b3ItdGlsZS9saWIvdmVjdG9ydGlsZWxheWVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BtYXBib3gvdmVjdG9yLXRpbGUvbGliL3ZlY3RvcnRpbGUuanMiLCIuLi9ub2RlX21vZHVsZXMvQG1hcGJveC92ZWN0b3ItdGlsZS9pbmRleC5qcyIsIi4uL3NyYy9kYXRhL2J1Y2tldC9maWxsX2V4dHJ1c2lvbl9idWNrZXQuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXIvZmlsbF9leHRydXNpb25fc3R5bGVfbGF5ZXJfcHJvcGVydGllcy5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllci9maWxsX2V4dHJ1c2lvbl9zdHlsZV9sYXllci5qcyIsIi4uL3NyYy9kYXRhL2J1Y2tldC9saW5lX2F0dHJpYnV0ZXMuanMiLCIuLi9zcmMvZGF0YS9idWNrZXQvbGluZV9idWNrZXQuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXIvbGluZV9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzLmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyL2xpbmVfc3R5bGVfbGF5ZXIuanMiLCIuLi9zcmMvZGF0YS9idWNrZXQvc3ltYm9sX2F0dHJpYnV0ZXMuanMiLCIuLi9zcmMvc3ltYm9sL3RyYW5zZm9ybV90ZXh0LmpzIiwiLi4vc3JjL3N5bWJvbC9tZXJnZWxpbmVzLmpzIiwiLi4vc3JjL3V0aWwvdmVydGljYWxpemVfcHVuY3R1YXRpb24uanMiLCIuLi9zcmMvc3ltYm9sL29uZV9lbS5qcyIsIi4uL25vZGVfbW9kdWxlcy9pZWVlNzU0L2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3BiZi9pbmRleC5qcyIsIi4uL3NyYy9zdHlsZS9wYXJzZV9nbHlwaF9wYmYuanMiLCIuLi9ub2RlX21vZHVsZXMvcG90cGFjay9pbmRleC5tanMiLCIuLi9zcmMvcmVuZGVyL2ltYWdlX2F0bGFzLmpzIiwiLi4vc3JjL3N5bWJvbC9zaGFwaW5nLmpzIiwiLi4vc3JjL3N5bWJvbC9hbmNob3IuanMiLCIuLi9zcmMvc3ltYm9sL3N5bWJvbF9zaXplLmpzIiwiLi4vc3JjL3N5bWJvbC9jaGVja19tYXhfYW5nbGUuanMiLCIuLi9zcmMvc3ltYm9sL2dldF9hbmNob3JzLmpzIiwiLi4vc3JjL3N5bWJvbC9jbGlwX2xpbmUuanMiLCIuLi9zcmMvc3ltYm9sL3F1YWRzLmpzIiwiLi4vc3JjL3N5bWJvbC9jb2xsaXNpb25fZmVhdHVyZS5qcyIsIi4uL25vZGVfbW9kdWxlcy90aW55cXVldWUvaW5kZXguanMiLCIuLi9zcmMvdXRpbC9maW5kX3BvbGVfb2ZfaW5hY2Nlc3NpYmlsaXR5LmpzIiwiLi4vc3JjL3N5bWJvbC9zeW1ib2xfbGF5b3V0LmpzIiwiLi4vc3JjL2RhdGEvYnVja2V0L3N5bWJvbF9idWNrZXQuanMiLCIuLi9zcmMvdXRpbC9yZXNvbHZlX3Rva2Vucy5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllci9zeW1ib2xfc3R5bGVfbGF5ZXJfcHJvcGVydGllcy5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvZm9ybWF0X3NlY3Rpb25fb3ZlcnJpZGUuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXIvc3ltYm9sX3N0eWxlX2xheWVyLmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyL2JhY2tncm91bmRfc3R5bGVfbGF5ZXJfcHJvcGVydGllcy5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllci9iYWNrZ3JvdW5kX3N0eWxlX2xheWVyLmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyL3Jhc3Rlcl9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzLmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyL3Jhc3Rlcl9zdHlsZV9sYXllci5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllci9jdXN0b21fc3R5bGVfbGF5ZXIuanMiLCIuLi9zcmMvc3R5bGUvY3JlYXRlX3N0eWxlX2xheWVyLmpzIiwiLi4vc3JjL3JlbmRlci90ZXh0dXJlLmpzIiwiLi4vc3JjL3V0aWwvdGhyb3R0bGVkX2ludm9rZXIuanMiLCIuLi9zcmMvdXRpbC9hY3Rvci5qcyIsIi4uL25vZGVfbW9kdWxlcy9AbWFwYm94L3dob290cy1qcy9pbmRleC5tanMiLCIuLi9zcmMvZ2VvL2xuZ19sYXRfYm91bmRzLmpzIiwiLi4vc3JjL2dlby9sbmdfbGF0LmpzIiwiLi4vc3JjL2dlby9tZXJjYXRvcl9jb29yZGluYXRlLmpzIiwiLi4vc3JjL3NvdXJjZS90aWxlX2lkLmpzIiwiLi4vc3JjL2RhdGEvZGVtX2RhdGEuanMiLCIuLi9zcmMvZGF0YS9idWNrZXQuanMiLCIuLi9zcmMvdXRpbC9kaWN0aW9uYXJ5X2NvZGVyLmpzIiwiLi4vc3JjL3V0aWwvdmVjdG9ydGlsZV90b19nZW9qc29uLmpzIiwiLi4vc3JjL3NvdXJjZS9zb3VyY2Vfc3RhdGUuanMiLCIuLi9zcmMvZGF0YS9mZWF0dXJlX2luZGV4LmpzIiwiLi4vc3JjL3NvdXJjZS90aWxlLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdXRpbC9yZWZfcHJvcGVydGllcy5qcyIsIi4uL3NyYy91dGlsL3BlcmZvcm1hbmNlLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZ3JvdXBfYnlfbGF5b3V0LmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyX2luZGV4LmpzIiwiLi4vc3JjL3JlbmRlci9nbHlwaF9hdGxhcy5qcyIsIi4uL3NyYy9zb3VyY2Uvd29ya2VyX3RpbGUuanMiLCIuLi9zcmMvc291cmNlL3ZlY3Rvcl90aWxlX3dvcmtlcl9zb3VyY2UuanMiLCIuLi9zcmMvc291cmNlL3Jhc3Rlcl9kZW1fdGlsZV93b3JrZXJfc291cmNlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BtYXBib3gvZ2VvanNvbi1yZXdpbmQvaW5kZXguanMiLCIuLi9zcmMvc291cmNlL2dlb2pzb25fd3JhcHBlci5qcyIsIi4uL25vZGVfbW9kdWxlcy92dC1wYmYvbGliL2dlb2pzb25fd3JhcHBlci5qcyIsIi4uL25vZGVfbW9kdWxlcy92dC1wYmYvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMva2RidXNoL3NyYy9zb3J0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2tkYnVzaC9zcmMvcmFuZ2UuanMiLCIuLi9ub2RlX21vZHVsZXMva2RidXNoL3NyYy93aXRoaW4uanMiLCIuLi9ub2RlX21vZHVsZXMva2RidXNoL3NyYy9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9zdXBlcmNsdXN0ZXIvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvZ2VvanNvbi12dC9zcmMvc2ltcGxpZnkuanMiLCIuLi9ub2RlX21vZHVsZXMvZ2VvanNvbi12dC9zcmMvZmVhdHVyZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9nZW9qc29uLXZ0L3NyYy9jb252ZXJ0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dlb2pzb24tdnQvc3JjL2NsaXAuanMiLCIuLi9ub2RlX21vZHVsZXMvZ2VvanNvbi12dC9zcmMvd3JhcC5qcyIsIi4uL25vZGVfbW9kdWxlcy9nZW9qc29uLXZ0L3NyYy90cmFuc2Zvcm0uanMiLCIuLi9ub2RlX21vZHVsZXMvZ2VvanNvbi12dC9zcmMvdGlsZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9nZW9qc29uLXZ0L3NyYy9pbmRleC5qcyIsIi4uL3NyYy9zb3VyY2UvZ2VvanNvbl93b3JrZXJfc291cmNlLmpzIiwiLi4vc3JjL3NvdXJjZS93b3JrZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvQG1hcGJveC9tYXBib3gtZ2wtc3VwcG9ydGVkL2luZGV4LmpzIiwiLi4vc3JjL3V0aWwvZG9tLmpzIiwiLi4vc3JjL3N0eWxlL2xvYWRfc3ByaXRlLmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2ltYWdlLmpzIiwiLi4vc3JjL3JlbmRlci9pbWFnZV9tYW5hZ2VyLmpzIiwiLi4vc3JjL3N0eWxlL2xvYWRfZ2x5cGhfcmFuZ2UuanMiLCIuLi9ub2RlX21vZHVsZXMvQG1hcGJveC90aW55LXNkZi9pbmRleC5qcyIsIi4uL3NyYy9yZW5kZXIvZ2x5cGhfbWFuYWdlci5qcyIsIi4uL3NyYy9zdHlsZS9saWdodC5qcyIsIi4uL3NyYy9yZW5kZXIvbGluZV9hdGxhcy5qcyIsIi4uL3NyYy91dGlsL2Rpc3BhdGNoZXIuanMiLCIuLi9zcmMvc291cmNlL2xvYWRfdGlsZWpzb24uanMiLCIuLi9zcmMvc291cmNlL3RpbGVfYm91bmRzLmpzIiwiLi4vc3JjL3NvdXJjZS92ZWN0b3JfdGlsZV9zb3VyY2UuanMiLCIuLi9zcmMvc291cmNlL3Jhc3Rlcl90aWxlX3NvdXJjZS5qcyIsIi4uL3NyYy9zb3VyY2UvcmFzdGVyX2RlbV90aWxlX3NvdXJjZS5qcyIsIi4uL3NyYy9zb3VyY2UvZ2VvanNvbl9zb3VyY2UuanMiLCIuLi9zcmMvZGF0YS9yYXN0ZXJfYm91bmRzX2F0dHJpYnV0ZXMuanMiLCIuLi9zcmMvc291cmNlL2ltYWdlX3NvdXJjZS5qcyIsIi4uL3NyYy9zb3VyY2UvdmlkZW9fc291cmNlLmpzIiwiLi4vc3JjL3NvdXJjZS9jYW52YXNfc291cmNlLmpzIiwiLi4vc3JjL3NvdXJjZS9zb3VyY2UuanMiLCIuLi9zcmMvc291cmNlL3F1ZXJ5X2ZlYXR1cmVzLmpzIiwiLi4vc3JjL3NvdXJjZS90aWxlX2NhY2hlLmpzIiwiLi4vc3JjL2dsL2luZGV4X2J1ZmZlci5qcyIsIi4uL3NyYy9nbC92ZXJ0ZXhfYnVmZmVyLmpzIiwiLi4vc3JjL2dsL3ZhbHVlLmpzIiwiLi4vc3JjL2dsL2ZyYW1lYnVmZmVyLmpzIiwiLi4vc3JjL2dsL2RlcHRoX21vZGUuanMiLCIuLi9zcmMvZ2wvc3RlbmNpbF9tb2RlLmpzIiwiLi4vc3JjL2dsL2NvbG9yX21vZGUuanMiLCIuLi9zcmMvZ2wvY3VsbF9mYWNlX21vZGUuanMiLCIuLi9zcmMvZ2wvY29udGV4dC5qcyIsIi4uL3NyYy9zb3VyY2Uvc291cmNlX2NhY2hlLmpzIiwiLi4vc3JjL3V0aWwvYnJvd3Nlci93ZWJfd29ya2VyLmpzIiwiLi4vc3JjL3V0aWwvd29ya2VyX3Bvb2wuanMiLCIuLi9zcmMvdXRpbC9nbG9iYWxfd29ya2VyX3Bvb2wuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9kZXJlZi5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2VtcHR5LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZGlmZi5qcyIsIi4uL3NyYy9zeW1ib2wvcGF0aF9pbnRlcnBvbGF0b3IuanMiLCIuLi9zcmMvc3ltYm9sL2dyaWRfaW5kZXguanMiLCIuLi9zcmMvc3ltYm9sL3Byb2plY3Rpb24uanMiLCIuLi9zcmMvc3ltYm9sL2NvbGxpc2lvbl9pbmRleC5qcyIsIi4uL3NyYy9zb3VyY2UvcGl4ZWxzX3RvX3RpbGVfdW5pdHMuanMiLCIuLi9zcmMvc3ltYm9sL3BsYWNlbWVudC5qcyIsIi4uL3NyYy9zdHlsZS9wYXVzZWFibGVfcGxhY2VtZW50LmpzIiwiLi4vc3JjL3N5bWJvbC9jcm9zc190aWxlX3N5bWJvbF9pbmRleC5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZS5qcyIsIi4uL3NyYy9kYXRhL3Bvc19hdHRyaWJ1dGVzLmpzIiwiLi4vc3JjL3NoYWRlcnMvc2hhZGVycy5qcyIsIi4uL3NyYy9yZW5kZXIvdmVydGV4X2FycmF5X29iamVjdC5qcyIsIi4uL3NyYy9yZW5kZXIvcHJvZ3JhbS5qcyIsIi4uL3NyYy9yZW5kZXIvcHJvZ3JhbS9wYXR0ZXJuLmpzIiwiLi4vc3JjL3JlbmRlci9wcm9ncmFtL2ZpbGxfZXh0cnVzaW9uX3Byb2dyYW0uanMiLCIuLi9zcmMvcmVuZGVyL3Byb2dyYW0vZmlsbF9wcm9ncmFtLmpzIiwiLi4vc3JjL3JlbmRlci9wcm9ncmFtL2NpcmNsZV9wcm9ncmFtLmpzIiwiLi4vc3JjL3JlbmRlci9wcm9ncmFtL2NvbGxpc2lvbl9wcm9ncmFtLmpzIiwiLi4vc3JjL3JlbmRlci9wcm9ncmFtL2RlYnVnX3Byb2dyYW0uanMiLCIuLi9zcmMvcmVuZGVyL3Byb2dyYW0vY2xpcHBpbmdfbWFza19wcm9ncmFtLmpzIiwiLi4vc3JjL3JlbmRlci9wcm9ncmFtL2hlYXRtYXBfcHJvZ3JhbS5qcyIsIi4uL3NyYy9yZW5kZXIvcHJvZ3JhbS9oaWxsc2hhZGVfcHJvZ3JhbS5qcyIsIi4uL3NyYy9yZW5kZXIvcHJvZ3JhbS9saW5lX3Byb2dyYW0uanMiLCIuLi9zcmMvcmVuZGVyL3Byb2dyYW0vcmFzdGVyX3Byb2dyYW0uanMiLCIuLi9zcmMvcmVuZGVyL3Byb2dyYW0vc3ltYm9sX3Byb2dyYW0uanMiLCIuLi9zcmMvcmVuZGVyL3Byb2dyYW0vYmFja2dyb3VuZF9wcm9ncmFtLmpzIiwiLi4vc3JjL3JlbmRlci9wcm9ncmFtL3Byb2dyYW1fdW5pZm9ybXMuanMiLCIuLi9zcmMvcmVuZGVyL2RyYXdfY29sbGlzaW9uX2RlYnVnLmpzIiwiLi4vc3JjL3JlbmRlci9kcmF3X3N5bWJvbC5qcyIsIi4uL3NyYy9yZW5kZXIvZHJhd19jaXJjbGUuanMiLCIuLi9zcmMvcmVuZGVyL2RyYXdfaGVhdG1hcC5qcyIsIi4uL3NyYy9yZW5kZXIvZHJhd19saW5lLmpzIiwiLi4vc3JjL3JlbmRlci9kcmF3X2ZpbGwuanMiLCIuLi9zcmMvcmVuZGVyL2RyYXdfZmlsbF9leHRydXNpb24uanMiLCIuLi9zcmMvcmVuZGVyL2RyYXdfaGlsbHNoYWRlLmpzIiwiLi4vc3JjL3JlbmRlci9kcmF3X3Jhc3Rlci5qcyIsIi4uL3NyYy9yZW5kZXIvZHJhd19iYWNrZ3JvdW5kLmpzIiwiLi4vc3JjL3JlbmRlci9kcmF3X2RlYnVnLmpzIiwiLi4vc3JjL3JlbmRlci9kcmF3X2N1c3RvbS5qcyIsIi4uL3NyYy9yZW5kZXIvcGFpbnRlci5qcyIsIi4uL3NyYy91dGlsL3ByaW1pdGl2ZXMuanMiLCIuLi9zcmMvZ2VvL2VkZ2VfaW5zZXRzLmpzIiwiLi4vc3JjL2dlby90cmFuc2Zvcm0uanMiLCIuLi9zcmMvdXRpbC90aHJvdHRsZS5qcyIsIi4uL3NyYy91aS9oYXNoLmpzIiwiLi4vc3JjL3VpL2hhbmRsZXJfaW5lcnRpYS5qcyIsIi4uL3NyYy91aS9ldmVudHMuanMiLCIuLi9zcmMvdWkvaGFuZGxlci9tYXBfZXZlbnQuanMiLCIuLi9zcmMvdWkvaGFuZGxlci9ib3hfem9vbS5qcyIsIi4uL3NyYy91aS9oYW5kbGVyL2hhbmRsZXJfdXRpbC5qcyIsIi4uL3NyYy91aS9oYW5kbGVyL3RhcF9yZWNvZ25pemVyLmpzIiwiLi4vc3JjL3VpL2hhbmRsZXIvdGFwX3pvb20uanMiLCIuLi9zcmMvdWkvaGFuZGxlci9tb3VzZS5qcyIsIi4uL3NyYy91aS9oYW5kbGVyL3RvdWNoX3Bhbi5qcyIsIi4uL3NyYy91aS9oYW5kbGVyL3RvdWNoX3pvb21fcm90YXRlLmpzIiwiLi4vc3JjL3VpL2hhbmRsZXIva2V5Ym9hcmQuanMiLCIuLi9zcmMvdWkvaGFuZGxlci9zY3JvbGxfem9vbS5qcyIsIi4uL3NyYy91aS9oYW5kbGVyL3NoaW0vZGJsY2xpY2tfem9vbS5qcyIsIi4uL3NyYy91aS9oYW5kbGVyL2NsaWNrX3pvb20uanMiLCIuLi9zcmMvdWkvaGFuZGxlci90YXBfZHJhZ196b29tLmpzIiwiLi4vc3JjL3VpL2hhbmRsZXIvc2hpbS9kcmFnX3Bhbi5qcyIsIi4uL3NyYy91aS9oYW5kbGVyL3NoaW0vZHJhZ19yb3RhdGUuanMiLCIuLi9zcmMvdWkvaGFuZGxlci9zaGltL3RvdWNoX3pvb21fcm90YXRlLmpzIiwiLi4vc3JjL3VpL2hhbmRsZXJfbWFuYWdlci5qcyIsIi4uL3NyYy91dGlsL2RlYnVnLmpzIiwiLi4vc3JjL3VpL2NhbWVyYS5qcyIsIi4uL3NyYy91aS9jb250cm9sL2F0dHJpYnV0aW9uX2NvbnRyb2wuanMiLCIuLi9zcmMvdWkvY29udHJvbC9sb2dvX2NvbnRyb2wuanMiLCIuLi9zcmMvdXRpbC90YXNrX3F1ZXVlLmpzIiwiLi4vc3JjL3VpL2RlZmF1bHRfbG9jYWxlLmpzIiwiLi4vc3JjL3VpL21hcC5qcyIsIi4uL3NyYy91aS9jb250cm9sL25hdmlnYXRpb25fY29udHJvbC5qcyIsIi4uL3NyYy91dGlsL3NtYXJ0X3dyYXAuanMiLCIuLi9zcmMvdWkvYW5jaG9yLmpzIiwiLi4vc3JjL3VpL21hcmtlci5qcyIsIi4uL3NyYy91aS9jb250cm9sL2dlb2xvY2F0ZV9jb250cm9sLmpzIiwiLi4vc3JjL3VpL2NvbnRyb2wvc2NhbGVfY29udHJvbC5qcyIsIi4uL3NyYy91aS9jb250cm9sL2Z1bGxzY3JlZW5fY29udHJvbC5qcyIsIi4uL3NyYy91aS9wb3B1cC5qcyIsIi4uL3NyYy9pbmRleC5qcyIsIi4uL3JvbGx1cC9tYXBib3hnbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxub2JqZWN0LWFzc2lnblxuKGMpIFNpbmRyZSBTb3JodXNcbkBsaWNlbnNlIE1JVFxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBwcm9wSXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuZnVuY3Rpb24gdG9PYmplY3QodmFsKSB7XG5cdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdCh2YWwpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRVc2VOYXRpdmUoKSB7XG5cdHRyeSB7XG5cdFx0aWYgKCFPYmplY3QuYXNzaWduKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9NDExOFxuXHRcdHZhciB0ZXN0MSA9IG5ldyBTdHJpbmcoJ2FiYycpOyAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXctd3JhcHBlcnNcblx0XHR0ZXN0MVs1XSA9ICdkZSc7XG5cdFx0aWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QxKVswXSA9PT0gJzUnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MiA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xuXHRcdFx0dGVzdDJbJ18nICsgU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSBpO1xuXHRcdH1cblx0XHR2YXIgb3JkZXIyID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDIpLm1hcChmdW5jdGlvbiAobikge1xuXHRcdFx0cmV0dXJuIHRlc3QyW25dO1xuXHRcdH0pO1xuXHRcdGlmIChvcmRlcjIuam9pbignJykgIT09ICcwMTIzNDU2Nzg5Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDMgPSB7fTtcblx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChsZXR0ZXIpIHtcblx0XHRcdHRlc3QzW2xldHRlcl0gPSBsZXR0ZXI7XG5cdFx0fSk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIHRlc3QzKSkuam9pbignJykgIT09XG5cdFx0XHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0Ly8gV2UgZG9uJ3QgZXhwZWN0IGFueSBvZiB0aGUgYWJvdmUgdG8gdGhyb3csIGJ1dCBiZXR0ZXIgdG8gYmUgc2FmZS5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG91bGRVc2VOYXRpdmUoKSA/IE9iamVjdC5hc3NpZ24gOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGZyb20pO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChwcm9wSXNFbnVtZXJhYmxlLmNhbGwoZnJvbSwgc3ltYm9sc1tpXSkpIHtcblx0XHRcdFx0XHR0b1tzeW1ib2xzW2ldXSA9IGZyb21bc3ltYm9sc1tpXV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdG87XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0J1ZmZlcihhcmcpIHtcbiAgcmV0dXJuIGFyZyAmJiB0eXBlb2YgYXJnID09PSAnb2JqZWN0J1xuICAgICYmIHR5cGVvZiBhcmcuY29weSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICYmIHR5cGVvZiBhcmcuZmlsbCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICYmIHR5cGVvZiBhcmcucmVhZFVJbnQ4ID09PSAnZnVuY3Rpb24nO1xufSIsImlmICh0eXBlb2YgT2JqZWN0LmNyZWF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAvLyBpbXBsZW1lbnRhdGlvbiBmcm9tIHN0YW5kYXJkIG5vZGUuanMgJ3V0aWwnIG1vZHVsZVxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgY3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ3Rvci5wcm90b3R5cGUsIHtcbiAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgIHZhbHVlOiBjdG9yLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgIHZhciBUZW1wQ3RvciA9IGZ1bmN0aW9uICgpIHt9XG4gICAgVGVtcEN0b3IucHJvdG90eXBlID0gc3VwZXJDdG9yLnByb3RvdHlwZVxuICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICBjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JcbiAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciBmb3JtYXRSZWdFeHAgPSAvJVtzZGolXS9nO1xuZXhwb3J0cy5mb3JtYXQgPSBmdW5jdGlvbihmKSB7XG4gIGlmICghaXNTdHJpbmcoZikpIHtcbiAgICB2YXIgb2JqZWN0cyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBvYmplY3RzLnB1c2goaW5zcGVjdChhcmd1bWVudHNbaV0pKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdHMuam9pbignICcpO1xuICB9XG5cbiAgdmFyIGkgPSAxO1xuICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgdmFyIGxlbiA9IGFyZ3MubGVuZ3RoO1xuICB2YXIgc3RyID0gU3RyaW5nKGYpLnJlcGxhY2UoZm9ybWF0UmVnRXhwLCBmdW5jdGlvbih4KSB7XG4gICAgaWYgKHggPT09ICclJScpIHJldHVybiAnJSc7XG4gICAgaWYgKGkgPj0gbGVuKSByZXR1cm4geDtcbiAgICBzd2l0Y2ggKHgpIHtcbiAgICAgIGNhc2UgJyVzJzogcmV0dXJuIFN0cmluZyhhcmdzW2krK10pO1xuICAgICAgY2FzZSAnJWQnOiByZXR1cm4gTnVtYmVyKGFyZ3NbaSsrXSk7XG4gICAgICBjYXNlICclaic6XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGFyZ3NbaSsrXSk7XG4gICAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgICByZXR1cm4gJ1tDaXJjdWxhcl0nO1xuICAgICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4geDtcbiAgICB9XG4gIH0pO1xuICBmb3IgKHZhciB4ID0gYXJnc1tpXTsgaSA8IGxlbjsgeCA9IGFyZ3NbKytpXSkge1xuICAgIGlmIChpc051bGwoeCkgfHwgIWlzT2JqZWN0KHgpKSB7XG4gICAgICBzdHIgKz0gJyAnICsgeDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyICs9ICcgJyArIGluc3BlY3QoeCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzdHI7XG59O1xuXG5cbi8vIE1hcmsgdGhhdCBhIG1ldGhvZCBzaG91bGQgbm90IGJlIHVzZWQuXG4vLyBSZXR1cm5zIGEgbW9kaWZpZWQgZnVuY3Rpb24gd2hpY2ggd2FybnMgb25jZSBieSBkZWZhdWx0LlxuLy8gSWYgLS1uby1kZXByZWNhdGlvbiBpcyBzZXQsIHRoZW4gaXQgaXMgYSBuby1vcC5cbmV4cG9ydHMuZGVwcmVjYXRlID0gZnVuY3Rpb24oZm4sIG1zZykge1xuICAvLyBBbGxvdyBmb3IgZGVwcmVjYXRpbmcgdGhpbmdzIGluIHRoZSBwcm9jZXNzIG9mIHN0YXJ0aW5nIHVwLlxuICBpZiAoaXNVbmRlZmluZWQoZ2xvYmFsLnByb2Nlc3MpKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGV4cG9ydHMuZGVwcmVjYXRlKGZuLCBtc2cpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLm5vRGVwcmVjYXRpb24gPT09IHRydWUpIHtcbiAgICByZXR1cm4gZm47XG4gIH1cblxuICB2YXIgd2FybmVkID0gZmFsc2U7XG4gIGZ1bmN0aW9uIGRlcHJlY2F0ZWQoKSB7XG4gICAgaWYgKCF3YXJuZWQpIHtcbiAgICAgIGlmIChwcm9jZXNzLnRocm93RGVwcmVjYXRpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICB9IGVsc2UgaWYgKHByb2Nlc3MudHJhY2VEZXByZWNhdGlvbikge1xuICAgICAgICBjb25zb2xlLnRyYWNlKG1zZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKG1zZyk7XG4gICAgICB9XG4gICAgICB3YXJuZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIHJldHVybiBkZXByZWNhdGVkO1xufTtcblxuXG52YXIgZGVidWdzID0ge307XG52YXIgZGVidWdFbnZpcm9uO1xuZXhwb3J0cy5kZWJ1Z2xvZyA9IGZ1bmN0aW9uKHNldCkge1xuICBpZiAoaXNVbmRlZmluZWQoZGVidWdFbnZpcm9uKSlcbiAgICBkZWJ1Z0Vudmlyb24gPSBwcm9jZXNzLmVudi5OT0RFX0RFQlVHIHx8ICcnO1xuICBzZXQgPSBzZXQudG9VcHBlckNhc2UoKTtcbiAgaWYgKCFkZWJ1Z3Nbc2V0XSkge1xuICAgIGlmIChuZXcgUmVnRXhwKCdcXFxcYicgKyBzZXQgKyAnXFxcXGInLCAnaScpLnRlc3QoZGVidWdFbnZpcm9uKSkge1xuICAgICAgdmFyIHBpZCA9IHByb2Nlc3MucGlkO1xuICAgICAgZGVidWdzW3NldF0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG1zZyA9IGV4cG9ydHMuZm9ybWF0LmFwcGx5KGV4cG9ydHMsIGFyZ3VtZW50cyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJyVzICVkOiAlcycsIHNldCwgcGlkLCBtc2cpO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVidWdzW3NldF0gPSBmdW5jdGlvbigpIHt9O1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGVidWdzW3NldF07XG59O1xuXG5cbi8qKlxuICogRWNob3MgdGhlIHZhbHVlIG9mIGEgdmFsdWUuIFRyeXMgdG8gcHJpbnQgdGhlIHZhbHVlIG91dFxuICogaW4gdGhlIGJlc3Qgd2F5IHBvc3NpYmxlIGdpdmVuIHRoZSBkaWZmZXJlbnQgdHlwZXMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIHByaW50IG91dC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbmFsIG9wdGlvbnMgb2JqZWN0IHRoYXQgYWx0ZXJzIHRoZSBvdXRwdXQuXG4gKi9cbi8qIGxlZ2FjeTogb2JqLCBzaG93SGlkZGVuLCBkZXB0aCwgY29sb3JzKi9cbmZ1bmN0aW9uIGluc3BlY3Qob2JqLCBvcHRzKSB7XG4gIC8vIGRlZmF1bHQgb3B0aW9uc1xuICB2YXIgY3R4ID0ge1xuICAgIHNlZW46IFtdLFxuICAgIHN0eWxpemU6IHN0eWxpemVOb0NvbG9yXG4gIH07XG4gIC8vIGxlZ2FjeS4uLlxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAzKSBjdHguZGVwdGggPSBhcmd1bWVudHNbMl07XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDQpIGN0eC5jb2xvcnMgPSBhcmd1bWVudHNbM107XG4gIGlmIChpc0Jvb2xlYW4ob3B0cykpIHtcbiAgICAvLyBsZWdhY3kuLi5cbiAgICBjdHguc2hvd0hpZGRlbiA9IG9wdHM7XG4gIH0gZWxzZSBpZiAob3B0cykge1xuICAgIC8vIGdvdCBhbiBcIm9wdGlvbnNcIiBvYmplY3RcbiAgICBleHBvcnRzLl9leHRlbmQoY3R4LCBvcHRzKTtcbiAgfVxuICAvLyBzZXQgZGVmYXVsdCBvcHRpb25zXG4gIGlmIChpc1VuZGVmaW5lZChjdHguc2hvd0hpZGRlbikpIGN0eC5zaG93SGlkZGVuID0gZmFsc2U7XG4gIGlmIChpc1VuZGVmaW5lZChjdHguZGVwdGgpKSBjdHguZGVwdGggPSAyO1xuICBpZiAoaXNVbmRlZmluZWQoY3R4LmNvbG9ycykpIGN0eC5jb2xvcnMgPSBmYWxzZTtcbiAgaWYgKGlzVW5kZWZpbmVkKGN0eC5jdXN0b21JbnNwZWN0KSkgY3R4LmN1c3RvbUluc3BlY3QgPSB0cnVlO1xuICBpZiAoY3R4LmNvbG9ycykgY3R4LnN0eWxpemUgPSBzdHlsaXplV2l0aENvbG9yO1xuICByZXR1cm4gZm9ybWF0VmFsdWUoY3R4LCBvYmosIGN0eC5kZXB0aCk7XG59XG5leHBvcnRzLmluc3BlY3QgPSBpbnNwZWN0O1xuXG5cbi8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQU5TSV9lc2NhcGVfY29kZSNncmFwaGljc1xuaW5zcGVjdC5jb2xvcnMgPSB7XG4gICdib2xkJyA6IFsxLCAyMl0sXG4gICdpdGFsaWMnIDogWzMsIDIzXSxcbiAgJ3VuZGVybGluZScgOiBbNCwgMjRdLFxuICAnaW52ZXJzZScgOiBbNywgMjddLFxuICAnd2hpdGUnIDogWzM3LCAzOV0sXG4gICdncmV5JyA6IFs5MCwgMzldLFxuICAnYmxhY2snIDogWzMwLCAzOV0sXG4gICdibHVlJyA6IFszNCwgMzldLFxuICAnY3lhbicgOiBbMzYsIDM5XSxcbiAgJ2dyZWVuJyA6IFszMiwgMzldLFxuICAnbWFnZW50YScgOiBbMzUsIDM5XSxcbiAgJ3JlZCcgOiBbMzEsIDM5XSxcbiAgJ3llbGxvdycgOiBbMzMsIDM5XVxufTtcblxuLy8gRG9uJ3QgdXNlICdibHVlJyBub3QgdmlzaWJsZSBvbiBjbWQuZXhlXG5pbnNwZWN0LnN0eWxlcyA9IHtcbiAgJ3NwZWNpYWwnOiAnY3lhbicsXG4gICdudW1iZXInOiAneWVsbG93JyxcbiAgJ2Jvb2xlYW4nOiAneWVsbG93JyxcbiAgJ3VuZGVmaW5lZCc6ICdncmV5JyxcbiAgJ251bGwnOiAnYm9sZCcsXG4gICdzdHJpbmcnOiAnZ3JlZW4nLFxuICAnZGF0ZSc6ICdtYWdlbnRhJyxcbiAgLy8gXCJuYW1lXCI6IGludGVudGlvbmFsbHkgbm90IHN0eWxpbmdcbiAgJ3JlZ2V4cCc6ICdyZWQnXG59O1xuXG5cbmZ1bmN0aW9uIHN0eWxpemVXaXRoQ29sb3Ioc3RyLCBzdHlsZVR5cGUpIHtcbiAgdmFyIHN0eWxlID0gaW5zcGVjdC5zdHlsZXNbc3R5bGVUeXBlXTtcblxuICBpZiAoc3R5bGUpIHtcbiAgICByZXR1cm4gJ1xcdTAwMWJbJyArIGluc3BlY3QuY29sb3JzW3N0eWxlXVswXSArICdtJyArIHN0ciArXG4gICAgICAgICAgICdcXHUwMDFiWycgKyBpbnNwZWN0LmNvbG9yc1tzdHlsZV1bMV0gKyAnbSc7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIHN0eWxpemVOb0NvbG9yKHN0ciwgc3R5bGVUeXBlKSB7XG4gIHJldHVybiBzdHI7XG59XG5cblxuZnVuY3Rpb24gYXJyYXlUb0hhc2goYXJyYXkpIHtcbiAgdmFyIGhhc2ggPSB7fTtcblxuICBhcnJheS5mb3JFYWNoKGZ1bmN0aW9uKHZhbCwgaWR4KSB7XG4gICAgaGFzaFt2YWxdID0gdHJ1ZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGhhc2g7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0VmFsdWUoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzKSB7XG4gIC8vIFByb3ZpZGUgYSBob29rIGZvciB1c2VyLXNwZWNpZmllZCBpbnNwZWN0IGZ1bmN0aW9ucy5cbiAgLy8gQ2hlY2sgdGhhdCB2YWx1ZSBpcyBhbiBvYmplY3Qgd2l0aCBhbiBpbnNwZWN0IGZ1bmN0aW9uIG9uIGl0XG4gIGlmIChjdHguY3VzdG9tSW5zcGVjdCAmJlxuICAgICAgdmFsdWUgJiZcbiAgICAgIGlzRnVuY3Rpb24odmFsdWUuaW5zcGVjdCkgJiZcbiAgICAgIC8vIEZpbHRlciBvdXQgdGhlIHV0aWwgbW9kdWxlLCBpdCdzIGluc3BlY3QgZnVuY3Rpb24gaXMgc3BlY2lhbFxuICAgICAgdmFsdWUuaW5zcGVjdCAhPT0gZXhwb3J0cy5pbnNwZWN0ICYmXG4gICAgICAvLyBBbHNvIGZpbHRlciBvdXQgYW55IHByb3RvdHlwZSBvYmplY3RzIHVzaW5nIHRoZSBjaXJjdWxhciBjaGVjay5cbiAgICAgICEodmFsdWUuY29uc3RydWN0b3IgJiYgdmFsdWUuY29uc3RydWN0b3IucHJvdG90eXBlID09PSB2YWx1ZSkpIHtcbiAgICB2YXIgcmV0ID0gdmFsdWUuaW5zcGVjdChyZWN1cnNlVGltZXMsIGN0eCk7XG4gICAgaWYgKCFpc1N0cmluZyhyZXQpKSB7XG4gICAgICByZXQgPSBmb3JtYXRWYWx1ZShjdHgsIHJldCwgcmVjdXJzZVRpbWVzKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIC8vIFByaW1pdGl2ZSB0eXBlcyBjYW5ub3QgaGF2ZSBwcm9wZXJ0aWVzXG4gIHZhciBwcmltaXRpdmUgPSBmb3JtYXRQcmltaXRpdmUoY3R4LCB2YWx1ZSk7XG4gIGlmIChwcmltaXRpdmUpIHtcbiAgICByZXR1cm4gcHJpbWl0aXZlO1xuICB9XG5cbiAgLy8gTG9vayB1cCB0aGUga2V5cyBvZiB0aGUgb2JqZWN0LlxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKTtcbiAgdmFyIHZpc2libGVLZXlzID0gYXJyYXlUb0hhc2goa2V5cyk7XG5cbiAgaWYgKGN0eC5zaG93SGlkZGVuKSB7XG4gICAga2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHZhbHVlKTtcbiAgfVxuXG4gIC8vIElFIGRvZXNuJ3QgbWFrZSBlcnJvciBmaWVsZHMgbm9uLWVudW1lcmFibGVcbiAgLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL2R3dzUyc2J0KHY9dnMuOTQpLmFzcHhcbiAgaWYgKGlzRXJyb3IodmFsdWUpXG4gICAgICAmJiAoa2V5cy5pbmRleE9mKCdtZXNzYWdlJykgPj0gMCB8fCBrZXlzLmluZGV4T2YoJ2Rlc2NyaXB0aW9uJykgPj0gMCkpIHtcbiAgICByZXR1cm4gZm9ybWF0RXJyb3IodmFsdWUpO1xuICB9XG5cbiAgLy8gU29tZSB0eXBlIG9mIG9iamVjdCB3aXRob3V0IHByb3BlcnRpZXMgY2FuIGJlIHNob3J0Y3V0dGVkLlxuICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgIHZhciBuYW1lID0gdmFsdWUubmFtZSA/ICc6ICcgKyB2YWx1ZS5uYW1lIDogJyc7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoJ1tGdW5jdGlvbicgKyBuYW1lICsgJ10nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgICBpZiAoaXNSZWdFeHAodmFsdWUpKSB7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSwgJ3JlZ2V4cCcpO1xuICAgIH1cbiAgICBpZiAoaXNEYXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLCAnZGF0ZScpO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBmb3JtYXRFcnJvcih2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGJhc2UgPSAnJywgYXJyYXkgPSBmYWxzZSwgYnJhY2VzID0gWyd7JywgJ30nXTtcblxuICAvLyBNYWtlIEFycmF5IHNheSB0aGF0IHRoZXkgYXJlIEFycmF5XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIGFycmF5ID0gdHJ1ZTtcbiAgICBicmFjZXMgPSBbJ1snLCAnXSddO1xuICB9XG5cbiAgLy8gTWFrZSBmdW5jdGlvbnMgc2F5IHRoYXQgdGhleSBhcmUgZnVuY3Rpb25zXG4gIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgIHZhciBuID0gdmFsdWUubmFtZSA/ICc6ICcgKyB2YWx1ZS5uYW1lIDogJyc7XG4gICAgYmFzZSA9ICcgW0Z1bmN0aW9uJyArIG4gKyAnXSc7XG4gIH1cblxuICAvLyBNYWtlIFJlZ0V4cHMgc2F5IHRoYXQgdGhleSBhcmUgUmVnRXhwc1xuICBpZiAoaXNSZWdFeHAodmFsdWUpKSB7XG4gICAgYmFzZSA9ICcgJyArIFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIH1cblxuICAvLyBNYWtlIGRhdGVzIHdpdGggcHJvcGVydGllcyBmaXJzdCBzYXkgdGhlIGRhdGVcbiAgaWYgKGlzRGF0ZSh2YWx1ZSkpIHtcbiAgICBiYXNlID0gJyAnICsgRGF0ZS5wcm90b3R5cGUudG9VVENTdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIH1cblxuICAvLyBNYWtlIGVycm9yIHdpdGggbWVzc2FnZSBmaXJzdCBzYXkgdGhlIGVycm9yXG4gIGlmIChpc0Vycm9yKHZhbHVlKSkge1xuICAgIGJhc2UgPSAnICcgKyBmb3JtYXRFcnJvcih2YWx1ZSk7XG4gIH1cblxuICBpZiAoa2V5cy5sZW5ndGggPT09IDAgJiYgKCFhcnJheSB8fCB2YWx1ZS5sZW5ndGggPT0gMCkpIHtcbiAgICByZXR1cm4gYnJhY2VzWzBdICsgYmFzZSArIGJyYWNlc1sxXTtcbiAgfVxuXG4gIGlmIChyZWN1cnNlVGltZXMgPCAwKSB7XG4gICAgaWYgKGlzUmVnRXhwKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSksICdyZWdleHAnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKCdbT2JqZWN0XScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9XG5cbiAgY3R4LnNlZW4ucHVzaCh2YWx1ZSk7XG5cbiAgdmFyIG91dHB1dDtcbiAgaWYgKGFycmF5KSB7XG4gICAgb3V0cHV0ID0gZm9ybWF0QXJyYXkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5cyk7XG4gIH0gZWxzZSB7XG4gICAgb3V0cHV0ID0ga2V5cy5tYXAoZnVuY3Rpb24oa2V5KSB7XG4gICAgICByZXR1cm4gZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5LCBhcnJheSk7XG4gICAgfSk7XG4gIH1cblxuICBjdHguc2Vlbi5wb3AoKTtcblxuICByZXR1cm4gcmVkdWNlVG9TaW5nbGVTdHJpbmcob3V0cHV0LCBiYXNlLCBicmFjZXMpO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdFByaW1pdGl2ZShjdHgsIHZhbHVlKSB7XG4gIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpXG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKCd1bmRlZmluZWQnLCAndW5kZWZpbmVkJyk7XG4gIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICB2YXIgc2ltcGxlID0gJ1xcJycgKyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkucmVwbGFjZSgvXlwifFwiJC9nLCAnJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcXCIvZywgJ1wiJykgKyAnXFwnJztcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoc2ltcGxlLCAnc3RyaW5nJyk7XG4gIH1cbiAgaWYgKGlzTnVtYmVyKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJycgKyB2YWx1ZSwgJ251bWJlcicpO1xuICBpZiAoaXNCb29sZWFuKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJycgKyB2YWx1ZSwgJ2Jvb2xlYW4nKTtcbiAgLy8gRm9yIHNvbWUgcmVhc29uIHR5cGVvZiBudWxsIGlzIFwib2JqZWN0XCIsIHNvIHNwZWNpYWwgY2FzZSBoZXJlLlxuICBpZiAoaXNOdWxsKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJ251bGwnLCAnbnVsbCcpO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdEVycm9yKHZhbHVlKSB7XG4gIHJldHVybiAnWycgKyBFcnJvci5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgKyAnXSc7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0QXJyYXkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5cykge1xuICB2YXIgb3V0cHV0ID0gW107XG4gIGZvciAodmFyIGkgPSAwLCBsID0gdmFsdWUubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5KHZhbHVlLCBTdHJpbmcoaSkpKSB7XG4gICAgICBvdXRwdXQucHVzaChmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLFxuICAgICAgICAgIFN0cmluZyhpKSwgdHJ1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXRwdXQucHVzaCgnJyk7XG4gICAgfVxuICB9XG4gIGtleXMuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICBpZiAoIWtleS5tYXRjaCgvXlxcZCskLykpIHtcbiAgICAgIG91dHB1dC5wdXNoKGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsXG4gICAgICAgICAga2V5LCB0cnVlKSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXksIGFycmF5KSB7XG4gIHZhciBuYW1lLCBzdHIsIGRlc2M7XG4gIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHZhbHVlLCBrZXkpIHx8IHsgdmFsdWU6IHZhbHVlW2tleV0gfTtcbiAgaWYgKGRlc2MuZ2V0KSB7XG4gICAgaWYgKGRlc2Muc2V0KSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW0dldHRlci9TZXR0ZXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tHZXR0ZXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGRlc2Muc2V0KSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW1NldHRlcl0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfVxuICBpZiAoIWhhc093blByb3BlcnR5KHZpc2libGVLZXlzLCBrZXkpKSB7XG4gICAgbmFtZSA9ICdbJyArIGtleSArICddJztcbiAgfVxuICBpZiAoIXN0cikge1xuICAgIGlmIChjdHguc2Vlbi5pbmRleE9mKGRlc2MudmFsdWUpIDwgMCkge1xuICAgICAgaWYgKGlzTnVsbChyZWN1cnNlVGltZXMpKSB7XG4gICAgICAgIHN0ciA9IGZvcm1hdFZhbHVlKGN0eCwgZGVzYy52YWx1ZSwgbnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHIgPSBmb3JtYXRWYWx1ZShjdHgsIGRlc2MudmFsdWUsIHJlY3Vyc2VUaW1lcyAtIDEpO1xuICAgICAgfVxuICAgICAgaWYgKHN0ci5pbmRleE9mKCdcXG4nKSA+IC0xKSB7XG4gICAgICAgIGlmIChhcnJheSkge1xuICAgICAgICAgIHN0ciA9IHN0ci5zcGxpdCgnXFxuJykubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgIHJldHVybiAnICAnICsgbGluZTtcbiAgICAgICAgICB9KS5qb2luKCdcXG4nKS5zdWJzdHIoMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RyID0gJ1xcbicgKyBzdHIuc3BsaXQoJ1xcbicpLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gJyAgICcgKyBsaW5lO1xuICAgICAgICAgIH0pLmpvaW4oJ1xcbicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbQ2lyY3VsYXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH1cbiAgaWYgKGlzVW5kZWZpbmVkKG5hbWUpKSB7XG4gICAgaWYgKGFycmF5ICYmIGtleS5tYXRjaCgvXlxcZCskLykpIHtcbiAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuICAgIG5hbWUgPSBKU09OLnN0cmluZ2lmeSgnJyArIGtleSk7XG4gICAgaWYgKG5hbWUubWF0Y2goL15cIihbYS16QS1aX11bYS16QS1aXzAtOV0qKVwiJC8pKSB7XG4gICAgICBuYW1lID0gbmFtZS5zdWJzdHIoMSwgbmFtZS5sZW5ndGggLSAyKTtcbiAgICAgIG5hbWUgPSBjdHguc3R5bGl6ZShuYW1lLCAnbmFtZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIilcbiAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFxcIi9nLCAnXCInKVxuICAgICAgICAgICAgICAgICAucmVwbGFjZSgvKF5cInxcIiQpL2csIFwiJ1wiKTtcbiAgICAgIG5hbWUgPSBjdHguc3R5bGl6ZShuYW1lLCAnc3RyaW5nJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5hbWUgKyAnOiAnICsgc3RyO1xufVxuXG5cbmZ1bmN0aW9uIHJlZHVjZVRvU2luZ2xlU3RyaW5nKG91dHB1dCwgYmFzZSwgYnJhY2VzKSB7XG4gIHZhciBudW1MaW5lc0VzdCA9IDA7XG4gIHZhciBsZW5ndGggPSBvdXRwdXQucmVkdWNlKGZ1bmN0aW9uKHByZXYsIGN1cikge1xuICAgIG51bUxpbmVzRXN0Kys7XG4gICAgaWYgKGN1ci5pbmRleE9mKCdcXG4nKSA+PSAwKSBudW1MaW5lc0VzdCsrO1xuICAgIHJldHVybiBwcmV2ICsgY3VyLnJlcGxhY2UoL1xcdTAwMWJcXFtcXGRcXGQ/bS9nLCAnJykubGVuZ3RoICsgMTtcbiAgfSwgMCk7XG5cbiAgaWYgKGxlbmd0aCA+IDYwKSB7XG4gICAgcmV0dXJuIGJyYWNlc1swXSArXG4gICAgICAgICAgIChiYXNlID09PSAnJyA/ICcnIDogYmFzZSArICdcXG4gJykgK1xuICAgICAgICAgICAnICcgK1xuICAgICAgICAgICBvdXRwdXQuam9pbignLFxcbiAgJykgK1xuICAgICAgICAgICAnICcgK1xuICAgICAgICAgICBicmFjZXNbMV07XG4gIH1cblxuICByZXR1cm4gYnJhY2VzWzBdICsgYmFzZSArICcgJyArIG91dHB1dC5qb2luKCcsICcpICsgJyAnICsgYnJhY2VzWzFdO1xufVxuXG5cbi8vIE5PVEU6IFRoZXNlIHR5cGUgY2hlY2tpbmcgZnVuY3Rpb25zIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIGBpbnN0YW5jZW9mYFxuLy8gYmVjYXVzZSBpdCBpcyBmcmFnaWxlIGFuZCBjYW4gYmUgZWFzaWx5IGZha2VkIHdpdGggYE9iamVjdC5jcmVhdGUoKWAuXG5mdW5jdGlvbiBpc0FycmF5KGFyKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGFyKTtcbn1cbmV4cG9ydHMuaXNBcnJheSA9IGlzQXJyYXk7XG5cbmZ1bmN0aW9uIGlzQm9vbGVhbihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdib29sZWFuJztcbn1cbmV4cG9ydHMuaXNCb29sZWFuID0gaXNCb29sZWFuO1xuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5leHBvcnRzLmlzTnVsbCA9IGlzTnVsbDtcblxuZnVuY3Rpb24gaXNOdWxsT3JVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNOdWxsT3JVbmRlZmluZWQgPSBpc051bGxPclVuZGVmaW5lZDtcblxuZnVuY3Rpb24gaXNOdW1iZXIoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnbnVtYmVyJztcbn1cbmV4cG9ydHMuaXNOdW1iZXIgPSBpc051bWJlcjtcblxuZnVuY3Rpb24gaXNTdHJpbmcoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnc3RyaW5nJztcbn1cbmV4cG9ydHMuaXNTdHJpbmcgPSBpc1N0cmluZztcblxuZnVuY3Rpb24gaXNTeW1ib2woYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnc3ltYm9sJztcbn1cbmV4cG9ydHMuaXNTeW1ib2wgPSBpc1N5bWJvbDtcblxuZnVuY3Rpb24gaXNVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IHZvaWQgMDtcbn1cbmV4cG9ydHMuaXNVbmRlZmluZWQgPSBpc1VuZGVmaW5lZDtcblxuZnVuY3Rpb24gaXNSZWdFeHAocmUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHJlKSAmJiBvYmplY3RUb1N0cmluZyhyZSkgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufVxuZXhwb3J0cy5pc1JlZ0V4cCA9IGlzUmVnRXhwO1xuXG5mdW5jdGlvbiBpc09iamVjdChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnICYmIGFyZyAhPT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNPYmplY3QgPSBpc09iamVjdDtcblxuZnVuY3Rpb24gaXNEYXRlKGQpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KGQpICYmIG9iamVjdFRvU3RyaW5nKGQpID09PSAnW29iamVjdCBEYXRlXSc7XG59XG5leHBvcnRzLmlzRGF0ZSA9IGlzRGF0ZTtcblxuZnVuY3Rpb24gaXNFcnJvcihlKSB7XG4gIHJldHVybiBpc09iamVjdChlKSAmJlxuICAgICAgKG9iamVjdFRvU3RyaW5nKGUpID09PSAnW29iamVjdCBFcnJvcl0nIHx8IGUgaW5zdGFuY2VvZiBFcnJvcik7XG59XG5leHBvcnRzLmlzRXJyb3IgPSBpc0Vycm9yO1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJztcbn1cbmV4cG9ydHMuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG5cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKGFyZykge1xuICByZXR1cm4gYXJnID09PSBudWxsIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnYm9vbGVhbicgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdudW1iZXInIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3N5bWJvbCcgfHwgIC8vIEVTNiBzeW1ib2xcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICd1bmRlZmluZWQnO1xufVxuZXhwb3J0cy5pc1ByaW1pdGl2ZSA9IGlzUHJpbWl0aXZlO1xuXG5leHBvcnRzLmlzQnVmZmVyID0gcmVxdWlyZSgnLi9zdXBwb3J0L2lzQnVmZmVyJyk7XG5cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKG8pIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKTtcbn1cblxuXG5mdW5jdGlvbiBwYWQobikge1xuICByZXR1cm4gbiA8IDEwID8gJzAnICsgbi50b1N0cmluZygxMCkgOiBuLnRvU3RyaW5nKDEwKTtcbn1cblxuXG52YXIgbW9udGhzID0gWydKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsXG4gICAgICAgICAgICAgICdPY3QnLCAnTm92JywgJ0RlYyddO1xuXG4vLyAyNiBGZWIgMTY6MTk6MzRcbmZ1bmN0aW9uIHRpbWVzdGFtcCgpIHtcbiAgdmFyIGQgPSBuZXcgRGF0ZSgpO1xuICB2YXIgdGltZSA9IFtwYWQoZC5nZXRIb3VycygpKSxcbiAgICAgICAgICAgICAgcGFkKGQuZ2V0TWludXRlcygpKSxcbiAgICAgICAgICAgICAgcGFkKGQuZ2V0U2Vjb25kcygpKV0uam9pbignOicpO1xuICByZXR1cm4gW2QuZ2V0RGF0ZSgpLCBtb250aHNbZC5nZXRNb250aCgpXSwgdGltZV0uam9pbignICcpO1xufVxuXG5cbi8vIGxvZyBpcyBqdXN0IGEgdGhpbiB3cmFwcGVyIHRvIGNvbnNvbGUubG9nIHRoYXQgcHJlcGVuZHMgYSB0aW1lc3RhbXBcbmV4cG9ydHMubG9nID0gZnVuY3Rpb24oKSB7XG4gIGNvbnNvbGUubG9nKCclcyAtICVzJywgdGltZXN0YW1wKCksIGV4cG9ydHMuZm9ybWF0LmFwcGx5KGV4cG9ydHMsIGFyZ3VtZW50cykpO1xufTtcblxuXG4vKipcbiAqIEluaGVyaXQgdGhlIHByb3RvdHlwZSBtZXRob2RzIGZyb20gb25lIGNvbnN0cnVjdG9yIGludG8gYW5vdGhlci5cbiAqXG4gKiBUaGUgRnVuY3Rpb24ucHJvdG90eXBlLmluaGVyaXRzIGZyb20gbGFuZy5qcyByZXdyaXR0ZW4gYXMgYSBzdGFuZGFsb25lXG4gKiBmdW5jdGlvbiAobm90IG9uIEZ1bmN0aW9uLnByb3RvdHlwZSkuIE5PVEU6IElmIHRoaXMgZmlsZSBpcyB0byBiZSBsb2FkZWRcbiAqIGR1cmluZyBib290c3RyYXBwaW5nIHRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgcmV3cml0dGVuIHVzaW5nIHNvbWUgbmF0aXZlXG4gKiBmdW5jdGlvbnMgYXMgcHJvdG90eXBlIHNldHVwIHVzaW5nIG5vcm1hbCBKYXZhU2NyaXB0IGRvZXMgbm90IHdvcmsgYXNcbiAqIGV4cGVjdGVkIGR1cmluZyBib290c3RyYXBwaW5nIChzZWUgbWlycm9yLmpzIGluIHIxMTQ5MDMpLlxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGN0b3IgQ29uc3RydWN0b3IgZnVuY3Rpb24gd2hpY2ggbmVlZHMgdG8gaW5oZXJpdCB0aGVcbiAqICAgICBwcm90b3R5cGUuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdXBlckN0b3IgQ29uc3RydWN0b3IgZnVuY3Rpb24gdG8gaW5oZXJpdCBwcm90b3R5cGUgZnJvbS5cbiAqL1xuZXhwb3J0cy5pbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuX2V4dGVuZCA9IGZ1bmN0aW9uKG9yaWdpbiwgYWRkKSB7XG4gIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIGFkZCBpc24ndCBhbiBvYmplY3RcbiAgaWYgKCFhZGQgfHwgIWlzT2JqZWN0KGFkZCkpIHJldHVybiBvcmlnaW47XG5cbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhhZGQpO1xuICB2YXIgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgb3JpZ2luW2tleXNbaV1dID0gYWRkW2tleXNbaV1dO1xuICB9XG4gIHJldHVybiBvcmlnaW47XG59O1xuXG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgb2JqZWN0QXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xuXG4vLyBjb21wYXJlIGFuZCBpc0J1ZmZlciB0YWtlbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL2Jsb2IvNjgwZTllNWU0ODhmMjJhYWMyNzU5OWE1N2RjODQ0YTYzMTU5MjhkZC9pbmRleC5qc1xuLy8gb3JpZ2luYWwgbm90aWNlOlxuXG4vKiFcbiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxmZXJvc3NAZmVyb3NzLm9yZz4gPGh0dHA6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG5mdW5jdGlvbiBjb21wYXJlKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHZhciB4ID0gYS5sZW5ndGg7XG4gIHZhciB5ID0gYi5sZW5ndGg7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IE1hdGgubWluKHgsIHkpOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgeCA9IGFbaV07XG4gICAgICB5ID0gYltpXTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICBpZiAoeSA8IHgpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuICByZXR1cm4gMDtcbn1cbmZ1bmN0aW9uIGlzQnVmZmVyKGIpIHtcbiAgaWYgKGdsb2JhbC5CdWZmZXIgJiYgdHlwZW9mIGdsb2JhbC5CdWZmZXIuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZ2xvYmFsLkJ1ZmZlci5pc0J1ZmZlcihiKTtcbiAgfVxuICByZXR1cm4gISEoYiAhPSBudWxsICYmIGIuX2lzQnVmZmVyKTtcbn1cblxuLy8gYmFzZWQgb24gbm9kZSBhc3NlcnQsIG9yaWdpbmFsIG5vdGljZTpcbi8vIE5COiBUaGUgVVJMIHRvIHRoZSBDb21tb25KUyBzcGVjIGlzIGtlcHQganVzdCBmb3IgdHJhZGl0aW9uLlxuLy8gICAgIG5vZGUtYXNzZXJ0IGhhcyBldm9sdmVkIGEgbG90IHNpbmNlIHRoZW4sIGJvdGggaW4gQVBJIGFuZCBiZWhhdmlvci5cblxuLy8gaHR0cDovL3dpa2kuY29tbW9uanMub3JnL3dpa2kvVW5pdF9UZXN0aW5nLzEuMFxuLy9cbi8vIFRISVMgSVMgTk9UIFRFU1RFRCBOT1IgTElLRUxZIFRPIFdPUksgT1VUU0lERSBWOCFcbi8vXG4vLyBPcmlnaW5hbGx5IGZyb20gbmFyd2hhbC5qcyAoaHR0cDovL25hcndoYWxqcy5vcmcpXG4vLyBDb3B5cmlnaHQgKGMpIDIwMDkgVGhvbWFzIFJvYmluc29uIDwyODBub3J0aC5jb20+XG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgJ1NvZnR3YXJlJyksIHRvXG4vLyBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxuLy8gcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yXG4vLyBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTlxuLy8gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTlxuLy8gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbC8nKTtcbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHBTbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbnZhciBmdW5jdGlvbnNIYXZlTmFtZXMgPSAoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZm9vKCkge30ubmFtZSA9PT0gJ2Zvbyc7XG59KCkpO1xuZnVuY3Rpb24gcFRvU3RyaW5nIChvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopO1xufVxuZnVuY3Rpb24gaXNWaWV3KGFycmJ1Zikge1xuICBpZiAoaXNCdWZmZXIoYXJyYnVmKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodHlwZW9mIGdsb2JhbC5BcnJheUJ1ZmZlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoYXJyYnVmKTtcbiAgfVxuICBpZiAoIWFycmJ1Zikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoYXJyYnVmIGluc3RhbmNlb2YgRGF0YVZpZXcpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoYXJyYnVmLmJ1ZmZlciAmJiBhcnJidWYuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG4vLyAxLiBUaGUgYXNzZXJ0IG1vZHVsZSBwcm92aWRlcyBmdW5jdGlvbnMgdGhhdCB0aHJvd1xuLy8gQXNzZXJ0aW9uRXJyb3IncyB3aGVuIHBhcnRpY3VsYXIgY29uZGl0aW9ucyBhcmUgbm90IG1ldC4gVGhlXG4vLyBhc3NlcnQgbW9kdWxlIG11c3QgY29uZm9ybSB0byB0aGUgZm9sbG93aW5nIGludGVyZmFjZS5cblxudmFyIGFzc2VydCA9IG1vZHVsZS5leHBvcnRzID0gb2s7XG5cbi8vIDIuIFRoZSBBc3NlcnRpb25FcnJvciBpcyBkZWZpbmVkIGluIGFzc2VydC5cbi8vIG5ldyBhc3NlcnQuQXNzZXJ0aW9uRXJyb3IoeyBtZXNzYWdlOiBtZXNzYWdlLFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbDogYWN0dWFsLFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBleHBlY3RlZCB9KVxuXG52YXIgcmVnZXggPSAvXFxzKmZ1bmN0aW9uXFxzKyhbXlxcKFxcc10qKVxccyovO1xuLy8gYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9mdW5jdGlvbi5wcm90b3R5cGUubmFtZS9ibG9iL2FkZWVlZWM4YmZjYzYwNjhiMTg3ZDdkOWZiM2Q1YmIxZDNhMzA4OTkvaW1wbGVtZW50YXRpb24uanNcbmZ1bmN0aW9uIGdldE5hbWUoZnVuYykge1xuICBpZiAoIXV0aWwuaXNGdW5jdGlvbihmdW5jKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoZnVuY3Rpb25zSGF2ZU5hbWVzKSB7XG4gICAgcmV0dXJuIGZ1bmMubmFtZTtcbiAgfVxuICB2YXIgc3RyID0gZnVuYy50b1N0cmluZygpO1xuICB2YXIgbWF0Y2ggPSBzdHIubWF0Y2gocmVnZXgpO1xuICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbMV07XG59XG5hc3NlcnQuQXNzZXJ0aW9uRXJyb3IgPSBmdW5jdGlvbiBBc3NlcnRpb25FcnJvcihvcHRpb25zKSB7XG4gIHRoaXMubmFtZSA9ICdBc3NlcnRpb25FcnJvcic7XG4gIHRoaXMuYWN0dWFsID0gb3B0aW9ucy5hY3R1YWw7XG4gIHRoaXMuZXhwZWN0ZWQgPSBvcHRpb25zLmV4cGVjdGVkO1xuICB0aGlzLm9wZXJhdG9yID0gb3B0aW9ucy5vcGVyYXRvcjtcbiAgaWYgKG9wdGlvbnMubWVzc2FnZSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG9wdGlvbnMubWVzc2FnZTtcbiAgICB0aGlzLmdlbmVyYXRlZE1lc3NhZ2UgPSBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBnZXRNZXNzYWdlKHRoaXMpO1xuICAgIHRoaXMuZ2VuZXJhdGVkTWVzc2FnZSA9IHRydWU7XG4gIH1cbiAgdmFyIHN0YWNrU3RhcnRGdW5jdGlvbiA9IG9wdGlvbnMuc3RhY2tTdGFydEZ1bmN0aW9uIHx8IGZhaWw7XG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHN0YWNrU3RhcnRGdW5jdGlvbik7XG4gIH0gZWxzZSB7XG4gICAgLy8gbm9uIHY4IGJyb3dzZXJzIHNvIHdlIGNhbiBoYXZlIGEgc3RhY2t0cmFjZVxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoKTtcbiAgICBpZiAoZXJyLnN0YWNrKSB7XG4gICAgICB2YXIgb3V0ID0gZXJyLnN0YWNrO1xuXG4gICAgICAvLyB0cnkgdG8gc3RyaXAgdXNlbGVzcyBmcmFtZXNcbiAgICAgIHZhciBmbl9uYW1lID0gZ2V0TmFtZShzdGFja1N0YXJ0RnVuY3Rpb24pO1xuICAgICAgdmFyIGlkeCA9IG91dC5pbmRleE9mKCdcXG4nICsgZm5fbmFtZSk7XG4gICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgLy8gb25jZSB3ZSBoYXZlIGxvY2F0ZWQgdGhlIGZ1bmN0aW9uIGZyYW1lXG4gICAgICAgIC8vIHdlIG5lZWQgdG8gc3RyaXAgb3V0IGV2ZXJ5dGhpbmcgYmVmb3JlIGl0IChhbmQgaXRzIGxpbmUpXG4gICAgICAgIHZhciBuZXh0X2xpbmUgPSBvdXQuaW5kZXhPZignXFxuJywgaWR4ICsgMSk7XG4gICAgICAgIG91dCA9IG91dC5zdWJzdHJpbmcobmV4dF9saW5lICsgMSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc3RhY2sgPSBvdXQ7XG4gICAgfVxuICB9XG59O1xuXG4vLyBhc3NlcnQuQXNzZXJ0aW9uRXJyb3IgaW5zdGFuY2VvZiBFcnJvclxudXRpbC5pbmhlcml0cyhhc3NlcnQuQXNzZXJ0aW9uRXJyb3IsIEVycm9yKTtcblxuZnVuY3Rpb24gdHJ1bmNhdGUocywgbikge1xuICBpZiAodHlwZW9mIHMgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHMubGVuZ3RoIDwgbiA/IHMgOiBzLnNsaWNlKDAsIG4pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzO1xuICB9XG59XG5mdW5jdGlvbiBpbnNwZWN0KHNvbWV0aGluZykge1xuICBpZiAoZnVuY3Rpb25zSGF2ZU5hbWVzIHx8ICF1dGlsLmlzRnVuY3Rpb24oc29tZXRoaW5nKSkge1xuICAgIHJldHVybiB1dGlsLmluc3BlY3Qoc29tZXRoaW5nKTtcbiAgfVxuICB2YXIgcmF3bmFtZSA9IGdldE5hbWUoc29tZXRoaW5nKTtcbiAgdmFyIG5hbWUgPSByYXduYW1lID8gJzogJyArIHJhd25hbWUgOiAnJztcbiAgcmV0dXJuICdbRnVuY3Rpb24nICsgIG5hbWUgKyAnXSc7XG59XG5mdW5jdGlvbiBnZXRNZXNzYWdlKHNlbGYpIHtcbiAgcmV0dXJuIHRydW5jYXRlKGluc3BlY3Qoc2VsZi5hY3R1YWwpLCAxMjgpICsgJyAnICtcbiAgICAgICAgIHNlbGYub3BlcmF0b3IgKyAnICcgK1xuICAgICAgICAgdHJ1bmNhdGUoaW5zcGVjdChzZWxmLmV4cGVjdGVkKSwgMTI4KTtcbn1cblxuLy8gQXQgcHJlc2VudCBvbmx5IHRoZSB0aHJlZSBrZXlzIG1lbnRpb25lZCBhYm92ZSBhcmUgdXNlZCBhbmRcbi8vIHVuZGVyc3Rvb2QgYnkgdGhlIHNwZWMuIEltcGxlbWVudGF0aW9ucyBvciBzdWIgbW9kdWxlcyBjYW4gcGFzc1xuLy8gb3RoZXIga2V5cyB0byB0aGUgQXNzZXJ0aW9uRXJyb3IncyBjb25zdHJ1Y3RvciAtIHRoZXkgd2lsbCBiZVxuLy8gaWdub3JlZC5cblxuLy8gMy4gQWxsIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIG11c3QgdGhyb3cgYW4gQXNzZXJ0aW9uRXJyb3Jcbi8vIHdoZW4gYSBjb3JyZXNwb25kaW5nIGNvbmRpdGlvbiBpcyBub3QgbWV0LCB3aXRoIGEgbWVzc2FnZSB0aGF0XG4vLyBtYXkgYmUgdW5kZWZpbmVkIGlmIG5vdCBwcm92aWRlZC4gIEFsbCBhc3NlcnRpb24gbWV0aG9kcyBwcm92aWRlXG4vLyBib3RoIHRoZSBhY3R1YWwgYW5kIGV4cGVjdGVkIHZhbHVlcyB0byB0aGUgYXNzZXJ0aW9uIGVycm9yIGZvclxuLy8gZGlzcGxheSBwdXJwb3Nlcy5cblxuZnVuY3Rpb24gZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCBvcGVyYXRvciwgc3RhY2tTdGFydEZ1bmN0aW9uKSB7XG4gIHRocm93IG5ldyBhc3NlcnQuQXNzZXJ0aW9uRXJyb3Ioe1xuICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgYWN0dWFsOiBhY3R1YWwsXG4gICAgZXhwZWN0ZWQ6IGV4cGVjdGVkLFxuICAgIG9wZXJhdG9yOiBvcGVyYXRvcixcbiAgICBzdGFja1N0YXJ0RnVuY3Rpb246IHN0YWNrU3RhcnRGdW5jdGlvblxuICB9KTtcbn1cblxuLy8gRVhURU5TSU9OISBhbGxvd3MgZm9yIHdlbGwgYmVoYXZlZCBlcnJvcnMgZGVmaW5lZCBlbHNld2hlcmUuXG5hc3NlcnQuZmFpbCA9IGZhaWw7XG5cbi8vIDQuIFB1cmUgYXNzZXJ0aW9uIHRlc3RzIHdoZXRoZXIgYSB2YWx1ZSBpcyB0cnV0aHksIGFzIGRldGVybWluZWRcbi8vIGJ5ICEhZ3VhcmQuXG4vLyBhc3NlcnQub2soZ3VhcmQsIG1lc3NhZ2Vfb3B0KTtcbi8vIFRoaXMgc3RhdGVtZW50IGlzIGVxdWl2YWxlbnQgdG8gYXNzZXJ0LmVxdWFsKHRydWUsICEhZ3VhcmQsXG4vLyBtZXNzYWdlX29wdCk7LiBUbyB0ZXN0IHN0cmljdGx5IGZvciB0aGUgdmFsdWUgdHJ1ZSwgdXNlXG4vLyBhc3NlcnQuc3RyaWN0RXF1YWwodHJ1ZSwgZ3VhcmQsIG1lc3NhZ2Vfb3B0KTsuXG5cbmZ1bmN0aW9uIG9rKHZhbHVlLCBtZXNzYWdlKSB7XG4gIGlmICghdmFsdWUpIGZhaWwodmFsdWUsIHRydWUsIG1lc3NhZ2UsICc9PScsIGFzc2VydC5vayk7XG59XG5hc3NlcnQub2sgPSBvaztcblxuLy8gNS4gVGhlIGVxdWFsaXR5IGFzc2VydGlvbiB0ZXN0cyBzaGFsbG93LCBjb2VyY2l2ZSBlcXVhbGl0eSB3aXRoXG4vLyA9PS5cbi8vIGFzc2VydC5lcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5lcXVhbCA9IGZ1bmN0aW9uIGVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKGFjdHVhbCAhPSBleHBlY3RlZCkgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnPT0nLCBhc3NlcnQuZXF1YWwpO1xufTtcblxuLy8gNi4gVGhlIG5vbi1lcXVhbGl0eSBhc3NlcnRpb24gdGVzdHMgZm9yIHdoZXRoZXIgdHdvIG9iamVjdHMgYXJlIG5vdCBlcXVhbFxuLy8gd2l0aCAhPSBhc3NlcnQubm90RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZV9vcHQpO1xuXG5hc3NlcnQubm90RXF1YWwgPSBmdW5jdGlvbiBub3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChhY3R1YWwgPT0gZXhwZWN0ZWQpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICchPScsIGFzc2VydC5ub3RFcXVhbCk7XG4gIH1cbn07XG5cbi8vIDcuIFRoZSBlcXVpdmFsZW5jZSBhc3NlcnRpb24gdGVzdHMgYSBkZWVwIGVxdWFsaXR5IHJlbGF0aW9uLlxuLy8gYXNzZXJ0LmRlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5kZWVwRXF1YWwgPSBmdW5jdGlvbiBkZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoIV9kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgZmFsc2UpKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnZGVlcEVxdWFsJywgYXNzZXJ0LmRlZXBFcXVhbCk7XG4gIH1cbn07XG5cbmFzc2VydC5kZWVwU3RyaWN0RXF1YWwgPSBmdW5jdGlvbiBkZWVwU3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoIV9kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgdHJ1ZSkpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICdkZWVwU3RyaWN0RXF1YWwnLCBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gX2RlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBzdHJpY3QsIG1lbW9zKSB7XG4gIC8vIDcuMS4gQWxsIGlkZW50aWNhbCB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGFzIGRldGVybWluZWQgYnkgPT09LlxuICBpZiAoYWN0dWFsID09PSBleHBlY3RlZCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGlzQnVmZmVyKGFjdHVhbCkgJiYgaXNCdWZmZXIoZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuIGNvbXBhcmUoYWN0dWFsLCBleHBlY3RlZCkgPT09IDA7XG5cbiAgLy8gNy4yLiBJZiB0aGUgZXhwZWN0ZWQgdmFsdWUgaXMgYSBEYXRlIG9iamVjdCwgdGhlIGFjdHVhbCB2YWx1ZSBpc1xuICAvLyBlcXVpdmFsZW50IGlmIGl0IGlzIGFsc28gYSBEYXRlIG9iamVjdCB0aGF0IHJlZmVycyB0byB0aGUgc2FtZSB0aW1lLlxuICB9IGVsc2UgaWYgKHV0aWwuaXNEYXRlKGFjdHVhbCkgJiYgdXRpbC5pc0RhdGUoZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuIGFjdHVhbC5nZXRUaW1lKCkgPT09IGV4cGVjdGVkLmdldFRpbWUoKTtcblxuICAvLyA3LjMgSWYgdGhlIGV4cGVjdGVkIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdCwgdGhlIGFjdHVhbCB2YWx1ZSBpc1xuICAvLyBlcXVpdmFsZW50IGlmIGl0IGlzIGFsc28gYSBSZWdFeHAgb2JqZWN0IHdpdGggdGhlIHNhbWUgc291cmNlIGFuZFxuICAvLyBwcm9wZXJ0aWVzIChgZ2xvYmFsYCwgYG11bHRpbGluZWAsIGBsYXN0SW5kZXhgLCBgaWdub3JlQ2FzZWApLlxuICB9IGVsc2UgaWYgKHV0aWwuaXNSZWdFeHAoYWN0dWFsKSAmJiB1dGlsLmlzUmVnRXhwKGV4cGVjdGVkKSkge1xuICAgIHJldHVybiBhY3R1YWwuc291cmNlID09PSBleHBlY3RlZC5zb3VyY2UgJiZcbiAgICAgICAgICAgYWN0dWFsLmdsb2JhbCA9PT0gZXhwZWN0ZWQuZ2xvYmFsICYmXG4gICAgICAgICAgIGFjdHVhbC5tdWx0aWxpbmUgPT09IGV4cGVjdGVkLm11bHRpbGluZSAmJlxuICAgICAgICAgICBhY3R1YWwubGFzdEluZGV4ID09PSBleHBlY3RlZC5sYXN0SW5kZXggJiZcbiAgICAgICAgICAgYWN0dWFsLmlnbm9yZUNhc2UgPT09IGV4cGVjdGVkLmlnbm9yZUNhc2U7XG5cbiAgLy8gNy40LiBPdGhlciBwYWlycyB0aGF0IGRvIG5vdCBib3RoIHBhc3MgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnLFxuICAvLyBlcXVpdmFsZW5jZSBpcyBkZXRlcm1pbmVkIGJ5ID09LlxuICB9IGVsc2UgaWYgKChhY3R1YWwgPT09IG51bGwgfHwgdHlwZW9mIGFjdHVhbCAhPT0gJ29iamVjdCcpICYmXG4gICAgICAgICAgICAgKGV4cGVjdGVkID09PSBudWxsIHx8IHR5cGVvZiBleHBlY3RlZCAhPT0gJ29iamVjdCcpKSB7XG4gICAgcmV0dXJuIHN0cmljdCA/IGFjdHVhbCA9PT0gZXhwZWN0ZWQgOiBhY3R1YWwgPT0gZXhwZWN0ZWQ7XG5cbiAgLy8gSWYgYm90aCB2YWx1ZXMgYXJlIGluc3RhbmNlcyBvZiB0eXBlZCBhcnJheXMsIHdyYXAgdGhlaXIgdW5kZXJseWluZ1xuICAvLyBBcnJheUJ1ZmZlcnMgaW4gYSBCdWZmZXIgZWFjaCB0byBpbmNyZWFzZSBwZXJmb3JtYW5jZVxuICAvLyBUaGlzIG9wdGltaXphdGlvbiByZXF1aXJlcyB0aGUgYXJyYXlzIHRvIGhhdmUgdGhlIHNhbWUgdHlwZSBhcyBjaGVja2VkIGJ5XG4gIC8vIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgKGFrYSBwVG9TdHJpbmcpLiBOZXZlciBwZXJmb3JtIGJpbmFyeVxuICAvLyBjb21wYXJpc29ucyBmb3IgRmxvYXQqQXJyYXlzLCB0aG91Z2gsIHNpbmNlIGUuZy4gKzAgPT09IC0wIGJ1dCB0aGVpclxuICAvLyBiaXQgcGF0dGVybnMgYXJlIG5vdCBpZGVudGljYWwuXG4gIH0gZWxzZSBpZiAoaXNWaWV3KGFjdHVhbCkgJiYgaXNWaWV3KGV4cGVjdGVkKSAmJlxuICAgICAgICAgICAgIHBUb1N0cmluZyhhY3R1YWwpID09PSBwVG9TdHJpbmcoZXhwZWN0ZWQpICYmXG4gICAgICAgICAgICAgIShhY3R1YWwgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkgfHxcbiAgICAgICAgICAgICAgIGFjdHVhbCBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheSkpIHtcbiAgICByZXR1cm4gY29tcGFyZShuZXcgVWludDhBcnJheShhY3R1YWwuYnVmZmVyKSxcbiAgICAgICAgICAgICAgICAgICBuZXcgVWludDhBcnJheShleHBlY3RlZC5idWZmZXIpKSA9PT0gMDtcblxuICAvLyA3LjUgRm9yIGFsbCBvdGhlciBPYmplY3QgcGFpcnMsIGluY2x1ZGluZyBBcnJheSBvYmplY3RzLCBlcXVpdmFsZW5jZSBpc1xuICAvLyBkZXRlcm1pbmVkIGJ5IGhhdmluZyB0aGUgc2FtZSBudW1iZXIgb2Ygb3duZWQgcHJvcGVydGllcyAoYXMgdmVyaWZpZWRcbiAgLy8gd2l0aCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwpLCB0aGUgc2FtZSBzZXQgb2Yga2V5c1xuICAvLyAoYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIG9yZGVyKSwgZXF1aXZhbGVudCB2YWx1ZXMgZm9yIGV2ZXJ5XG4gIC8vIGNvcnJlc3BvbmRpbmcga2V5LCBhbmQgYW4gaWRlbnRpY2FsICdwcm90b3R5cGUnIHByb3BlcnR5LiBOb3RlOiB0aGlzXG4gIC8vIGFjY291bnRzIGZvciBib3RoIG5hbWVkIGFuZCBpbmRleGVkIHByb3BlcnRpZXMgb24gQXJyYXlzLlxuICB9IGVsc2UgaWYgKGlzQnVmZmVyKGFjdHVhbCkgIT09IGlzQnVmZmVyKGV4cGVjdGVkKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICBtZW1vcyA9IG1lbW9zIHx8IHthY3R1YWw6IFtdLCBleHBlY3RlZDogW119O1xuXG4gICAgdmFyIGFjdHVhbEluZGV4ID0gbWVtb3MuYWN0dWFsLmluZGV4T2YoYWN0dWFsKTtcbiAgICBpZiAoYWN0dWFsSW5kZXggIT09IC0xKSB7XG4gICAgICBpZiAoYWN0dWFsSW5kZXggPT09IG1lbW9zLmV4cGVjdGVkLmluZGV4T2YoZXhwZWN0ZWQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIG1lbW9zLmFjdHVhbC5wdXNoKGFjdHVhbCk7XG4gICAgbWVtb3MuZXhwZWN0ZWQucHVzaChleHBlY3RlZCk7XG5cbiAgICByZXR1cm4gb2JqRXF1aXYoYWN0dWFsLCBleHBlY3RlZCwgc3RyaWN0LCBtZW1vcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNBcmd1bWVudHMob2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PSAnW29iamVjdCBBcmd1bWVudHNdJztcbn1cblxuZnVuY3Rpb24gb2JqRXF1aXYoYSwgYiwgc3RyaWN0LCBhY3R1YWxWaXNpdGVkT2JqZWN0cykge1xuICBpZiAoYSA9PT0gbnVsbCB8fCBhID09PSB1bmRlZmluZWQgfHwgYiA9PT0gbnVsbCB8fCBiID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIGZhbHNlO1xuICAvLyBpZiBvbmUgaXMgYSBwcmltaXRpdmUsIHRoZSBvdGhlciBtdXN0IGJlIHNhbWVcbiAgaWYgKHV0aWwuaXNQcmltaXRpdmUoYSkgfHwgdXRpbC5pc1ByaW1pdGl2ZShiKSlcbiAgICByZXR1cm4gYSA9PT0gYjtcbiAgaWYgKHN0cmljdCAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSkgIT09IE9iamVjdC5nZXRQcm90b3R5cGVPZihiKSlcbiAgICByZXR1cm4gZmFsc2U7XG4gIHZhciBhSXNBcmdzID0gaXNBcmd1bWVudHMoYSk7XG4gIHZhciBiSXNBcmdzID0gaXNBcmd1bWVudHMoYik7XG4gIGlmICgoYUlzQXJncyAmJiAhYklzQXJncykgfHwgKCFhSXNBcmdzICYmIGJJc0FyZ3MpKVxuICAgIHJldHVybiBmYWxzZTtcbiAgaWYgKGFJc0FyZ3MpIHtcbiAgICBhID0gcFNsaWNlLmNhbGwoYSk7XG4gICAgYiA9IHBTbGljZS5jYWxsKGIpO1xuICAgIHJldHVybiBfZGVlcEVxdWFsKGEsIGIsIHN0cmljdCk7XG4gIH1cbiAgdmFyIGthID0gb2JqZWN0S2V5cyhhKTtcbiAgdmFyIGtiID0gb2JqZWN0S2V5cyhiKTtcbiAgdmFyIGtleSwgaTtcbiAgLy8gaGF2aW5nIHRoZSBzYW1lIG51bWJlciBvZiBvd25lZCBwcm9wZXJ0aWVzIChrZXlzIGluY29ycG9yYXRlc1xuICAvLyBoYXNPd25Qcm9wZXJ0eSlcbiAgaWYgKGthLmxlbmd0aCAhPT0ga2IubGVuZ3RoKVxuICAgIHJldHVybiBmYWxzZTtcbiAgLy90aGUgc2FtZSBzZXQgb2Yga2V5cyAoYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIG9yZGVyKSxcbiAga2Euc29ydCgpO1xuICBrYi5zb3J0KCk7XG4gIC8vfn5+Y2hlYXAga2V5IHRlc3RcbiAgZm9yIChpID0ga2EubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAoa2FbaV0gIT09IGtiW2ldKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vZXF1aXZhbGVudCB2YWx1ZXMgZm9yIGV2ZXJ5IGNvcnJlc3BvbmRpbmcga2V5LCBhbmRcbiAgLy9+fn5wb3NzaWJseSBleHBlbnNpdmUgZGVlcCB0ZXN0XG4gIGZvciAoaSA9IGthLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAga2V5ID0ga2FbaV07XG4gICAgaWYgKCFfZGVlcEVxdWFsKGFba2V5XSwgYltrZXldLCBzdHJpY3QsIGFjdHVhbFZpc2l0ZWRPYmplY3RzKSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gOC4gVGhlIG5vbi1lcXVpdmFsZW5jZSBhc3NlcnRpb24gdGVzdHMgZm9yIGFueSBkZWVwIGluZXF1YWxpdHkuXG4vLyBhc3NlcnQubm90RGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0Lm5vdERlZXBFcXVhbCA9IGZ1bmN0aW9uIG5vdERlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChfZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIGZhbHNlKSkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJ25vdERlZXBFcXVhbCcsIGFzc2VydC5ub3REZWVwRXF1YWwpO1xuICB9XG59O1xuXG5hc3NlcnQubm90RGVlcFN0cmljdEVxdWFsID0gbm90RGVlcFN0cmljdEVxdWFsO1xuZnVuY3Rpb24gbm90RGVlcFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKF9kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgdHJ1ZSkpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICdub3REZWVwU3RyaWN0RXF1YWwnLCBub3REZWVwU3RyaWN0RXF1YWwpO1xuICB9XG59XG5cblxuLy8gOS4gVGhlIHN0cmljdCBlcXVhbGl0eSBhc3NlcnRpb24gdGVzdHMgc3RyaWN0IGVxdWFsaXR5LCBhcyBkZXRlcm1pbmVkIGJ5ID09PS5cbi8vIGFzc2VydC5zdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5zdHJpY3RFcXVhbCA9IGZ1bmN0aW9uIHN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICc9PT0nLCBhc3NlcnQuc3RyaWN0RXF1YWwpO1xuICB9XG59O1xuXG4vLyAxMC4gVGhlIHN0cmljdCBub24tZXF1YWxpdHkgYXNzZXJ0aW9uIHRlc3RzIGZvciBzdHJpY3QgaW5lcXVhbGl0eSwgYXNcbi8vIGRldGVybWluZWQgYnkgIT09LiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0Lm5vdFN0cmljdEVxdWFsID0gZnVuY3Rpb24gbm90U3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoYWN0dWFsID09PSBleHBlY3RlZCkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJyE9PScsIGFzc2VydC5ub3RTdHJpY3RFcXVhbCk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGV4cGVjdGVkRXhjZXB0aW9uKGFjdHVhbCwgZXhwZWN0ZWQpIHtcbiAgaWYgKCFhY3R1YWwgfHwgIWV4cGVjdGVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChleHBlY3RlZCkgPT0gJ1tvYmplY3QgUmVnRXhwXScpIHtcbiAgICByZXR1cm4gZXhwZWN0ZWQudGVzdChhY3R1YWwpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBpZiAoYWN0dWFsIGluc3RhbmNlb2YgZXhwZWN0ZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIElnbm9yZS4gIFRoZSBpbnN0YW5jZW9mIGNoZWNrIGRvZXNuJ3Qgd29yayBmb3IgYXJyb3cgZnVuY3Rpb25zLlxuICB9XG5cbiAgaWYgKEVycm9yLmlzUHJvdG90eXBlT2YoZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGV4cGVjdGVkLmNhbGwoe30sIGFjdHVhbCkgPT09IHRydWU7XG59XG5cbmZ1bmN0aW9uIF90cnlCbG9jayhibG9jaykge1xuICB2YXIgZXJyb3I7XG4gIHRyeSB7XG4gICAgYmxvY2soKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9yID0gZTtcbiAgfVxuICByZXR1cm4gZXJyb3I7XG59XG5cbmZ1bmN0aW9uIF90aHJvd3Moc2hvdWxkVGhyb3csIGJsb2NrLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICB2YXIgYWN0dWFsO1xuXG4gIGlmICh0eXBlb2YgYmxvY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJsb2NrXCIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIGV4cGVjdGVkID09PSAnc3RyaW5nJykge1xuICAgIG1lc3NhZ2UgPSBleHBlY3RlZDtcbiAgICBleHBlY3RlZCA9IG51bGw7XG4gIH1cblxuICBhY3R1YWwgPSBfdHJ5QmxvY2soYmxvY2spO1xuXG4gIG1lc3NhZ2UgPSAoZXhwZWN0ZWQgJiYgZXhwZWN0ZWQubmFtZSA/ICcgKCcgKyBleHBlY3RlZC5uYW1lICsgJykuJyA6ICcuJykgK1xuICAgICAgICAgICAgKG1lc3NhZ2UgPyAnICcgKyBtZXNzYWdlIDogJy4nKTtcblxuICBpZiAoc2hvdWxkVGhyb3cgJiYgIWFjdHVhbCkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgJ01pc3NpbmcgZXhwZWN0ZWQgZXhjZXB0aW9uJyArIG1lc3NhZ2UpO1xuICB9XG5cbiAgdmFyIHVzZXJQcm92aWRlZE1lc3NhZ2UgPSB0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZyc7XG4gIHZhciBpc1Vud2FudGVkRXhjZXB0aW9uID0gIXNob3VsZFRocm93ICYmIHV0aWwuaXNFcnJvcihhY3R1YWwpO1xuICB2YXIgaXNVbmV4cGVjdGVkRXhjZXB0aW9uID0gIXNob3VsZFRocm93ICYmIGFjdHVhbCAmJiAhZXhwZWN0ZWQ7XG5cbiAgaWYgKChpc1Vud2FudGVkRXhjZXB0aW9uICYmXG4gICAgICB1c2VyUHJvdmlkZWRNZXNzYWdlICYmXG4gICAgICBleHBlY3RlZEV4Y2VwdGlvbihhY3R1YWwsIGV4cGVjdGVkKSkgfHxcbiAgICAgIGlzVW5leHBlY3RlZEV4Y2VwdGlvbikge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgJ0dvdCB1bndhbnRlZCBleGNlcHRpb24nICsgbWVzc2FnZSk7XG4gIH1cblxuICBpZiAoKHNob3VsZFRocm93ICYmIGFjdHVhbCAmJiBleHBlY3RlZCAmJlxuICAgICAgIWV4cGVjdGVkRXhjZXB0aW9uKGFjdHVhbCwgZXhwZWN0ZWQpKSB8fCAoIXNob3VsZFRocm93ICYmIGFjdHVhbCkpIHtcbiAgICB0aHJvdyBhY3R1YWw7XG4gIH1cbn1cblxuLy8gMTEuIEV4cGVjdGVkIHRvIHRocm93IGFuIGVycm9yOlxuLy8gYXNzZXJ0LnRocm93cyhibG9jaywgRXJyb3Jfb3B0LCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC50aHJvd3MgPSBmdW5jdGlvbihibG9jaywgLypvcHRpb25hbCovZXJyb3IsIC8qb3B0aW9uYWwqL21lc3NhZ2UpIHtcbiAgX3Rocm93cyh0cnVlLCBibG9jaywgZXJyb3IsIG1lc3NhZ2UpO1xufTtcblxuLy8gRVhURU5TSU9OISBUaGlzIGlzIGFubm95aW5nIHRvIHdyaXRlIG91dHNpZGUgdGhpcyBtb2R1bGUuXG5hc3NlcnQuZG9lc05vdFRocm93ID0gZnVuY3Rpb24oYmxvY2ssIC8qb3B0aW9uYWwqL2Vycm9yLCAvKm9wdGlvbmFsKi9tZXNzYWdlKSB7XG4gIF90aHJvd3MoZmFsc2UsIGJsb2NrLCBlcnJvciwgbWVzc2FnZSk7XG59O1xuXG5hc3NlcnQuaWZFcnJvciA9IGZ1bmN0aW9uKGVycikgeyBpZiAoZXJyKSB0aHJvdyBlcnI7IH07XG5cbi8vIEV4cG9zZSBhIHN0cmljdCBvbmx5IHZhcmlhbnQgb2YgYXNzZXJ0XG5mdW5jdGlvbiBzdHJpY3QodmFsdWUsIG1lc3NhZ2UpIHtcbiAgaWYgKCF2YWx1ZSkgZmFpbCh2YWx1ZSwgdHJ1ZSwgbWVzc2FnZSwgJz09Jywgc3RyaWN0KTtcbn1cbmFzc2VydC5zdHJpY3QgPSBvYmplY3RBc3NpZ24oc3RyaWN0LCBhc3NlcnQsIHtcbiAgZXF1YWw6IGFzc2VydC5zdHJpY3RFcXVhbCxcbiAgZGVlcEVxdWFsOiBhc3NlcnQuZGVlcFN0cmljdEVxdWFsLFxuICBub3RFcXVhbDogYXNzZXJ0Lm5vdFN0cmljdEVxdWFsLFxuICBub3REZWVwRXF1YWw6IGFzc2VydC5ub3REZWVwU3RyaWN0RXF1YWxcbn0pO1xuYXNzZXJ0LnN0cmljdC5zdHJpY3QgPSBhc3NlcnQuc3RyaWN0O1xuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChoYXNPd24uY2FsbChvYmosIGtleSkpIGtleXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiBrZXlzO1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zXG4gKiBhcmUgbWV0OlxuICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWVxuICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUlxuICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1JcbiAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLFxuICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLFxuICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SXG4gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZXG4gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxuICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqXG4gKiBQb3J0ZWQgZnJvbSBXZWJraXRcbiAqIGh0dHA6Ly9zdm4ud2Via2l0Lm9yZy9yZXBvc2l0b3J5L3dlYmtpdC90cnVuay9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Vbml0QmV6aWVyLmhcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVuaXRCZXppZXI7XG5cbmZ1bmN0aW9uIFVuaXRCZXppZXIocDF4LCBwMXksIHAyeCwgcDJ5KSB7XG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBwb2x5bm9taWFsIGNvZWZmaWNpZW50cywgaW1wbGljaXQgZmlyc3QgYW5kIGxhc3QgY29udHJvbCBwb2ludHMgYXJlICgwLDApIGFuZCAoMSwxKS5cbiAgICB0aGlzLmN4ID0gMy4wICogcDF4O1xuICAgIHRoaXMuYnggPSAzLjAgKiAocDJ4IC0gcDF4KSAtIHRoaXMuY3g7XG4gICAgdGhpcy5heCA9IDEuMCAtIHRoaXMuY3ggLSB0aGlzLmJ4O1xuXG4gICAgdGhpcy5jeSA9IDMuMCAqIHAxeTtcbiAgICB0aGlzLmJ5ID0gMy4wICogKHAyeSAtIHAxeSkgLSB0aGlzLmN5O1xuICAgIHRoaXMuYXkgPSAxLjAgLSB0aGlzLmN5IC0gdGhpcy5ieTtcblxuICAgIHRoaXMucDF4ID0gcDF4O1xuICAgIHRoaXMucDF5ID0gcDJ5O1xuICAgIHRoaXMucDJ4ID0gcDJ4O1xuICAgIHRoaXMucDJ5ID0gcDJ5O1xufVxuXG5Vbml0QmV6aWVyLnByb3RvdHlwZS5zYW1wbGVDdXJ2ZVggPSBmdW5jdGlvbih0KSB7XG4gICAgLy8gYGF4IHReMyArIGJ4IHReMiArIGN4IHQnIGV4cGFuZGVkIHVzaW5nIEhvcm5lcidzIHJ1bGUuXG4gICAgcmV0dXJuICgodGhpcy5heCAqIHQgKyB0aGlzLmJ4KSAqIHQgKyB0aGlzLmN4KSAqIHQ7XG59O1xuXG5Vbml0QmV6aWVyLnByb3RvdHlwZS5zYW1wbGVDdXJ2ZVkgPSBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuICgodGhpcy5heSAqIHQgKyB0aGlzLmJ5KSAqIHQgKyB0aGlzLmN5KSAqIHQ7XG59O1xuXG5Vbml0QmV6aWVyLnByb3RvdHlwZS5zYW1wbGVDdXJ2ZURlcml2YXRpdmVYID0gZnVuY3Rpb24odCkge1xuICAgIHJldHVybiAoMy4wICogdGhpcy5heCAqIHQgKyAyLjAgKiB0aGlzLmJ4KSAqIHQgKyB0aGlzLmN4O1xufTtcblxuVW5pdEJlemllci5wcm90b3R5cGUuc29sdmVDdXJ2ZVggPSBmdW5jdGlvbih4LCBlcHNpbG9uKSB7XG4gICAgaWYgKHR5cGVvZiBlcHNpbG9uID09PSAndW5kZWZpbmVkJykgZXBzaWxvbiA9IDFlLTY7XG5cbiAgICB2YXIgdDAsIHQxLCB0MiwgeDIsIGk7XG5cbiAgICAvLyBGaXJzdCB0cnkgYSBmZXcgaXRlcmF0aW9ucyBvZiBOZXd0b24ncyBtZXRob2QgLS0gbm9ybWFsbHkgdmVyeSBmYXN0LlxuICAgIGZvciAodDIgPSB4LCBpID0gMDsgaSA8IDg7IGkrKykge1xuXG4gICAgICAgIHgyID0gdGhpcy5zYW1wbGVDdXJ2ZVgodDIpIC0geDtcbiAgICAgICAgaWYgKE1hdGguYWJzKHgyKSA8IGVwc2lsb24pIHJldHVybiB0MjtcblxuICAgICAgICB2YXIgZDIgPSB0aGlzLnNhbXBsZUN1cnZlRGVyaXZhdGl2ZVgodDIpO1xuICAgICAgICBpZiAoTWF0aC5hYnMoZDIpIDwgMWUtNikgYnJlYWs7XG5cbiAgICAgICAgdDIgPSB0MiAtIHgyIC8gZDI7XG4gICAgfVxuXG4gICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBiaXNlY3Rpb24gbWV0aG9kIGZvciByZWxpYWJpbGl0eS5cbiAgICB0MCA9IDAuMDtcbiAgICB0MSA9IDEuMDtcbiAgICB0MiA9IHg7XG5cbiAgICBpZiAodDIgPCB0MCkgcmV0dXJuIHQwO1xuICAgIGlmICh0MiA+IHQxKSByZXR1cm4gdDE7XG5cbiAgICB3aGlsZSAodDAgPCB0MSkge1xuXG4gICAgICAgIHgyID0gdGhpcy5zYW1wbGVDdXJ2ZVgodDIpO1xuICAgICAgICBpZiAoTWF0aC5hYnMoeDIgLSB4KSA8IGVwc2lsb24pIHJldHVybiB0MjtcblxuICAgICAgICBpZiAoeCA+IHgyKSB7XG4gICAgICAgICAgICB0MCA9IHQyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdDEgPSB0MjtcbiAgICAgICAgfVxuXG4gICAgICAgIHQyID0gKHQxIC0gdDApICogMC41ICsgdDA7XG4gICAgfVxuXG4gICAgLy8gRmFpbHVyZS5cbiAgICByZXR1cm4gdDI7XG59O1xuXG5Vbml0QmV6aWVyLnByb3RvdHlwZS5zb2x2ZSA9IGZ1bmN0aW9uKHgsIGVwc2lsb24pIHtcbiAgICByZXR1cm4gdGhpcy5zYW1wbGVDdXJ2ZVkodGhpcy5zb2x2ZUN1cnZlWCh4LCBlcHNpbG9uKSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBvaW50O1xuXG4vKipcbiAqIEEgc3RhbmRhbG9uZSBwb2ludCBnZW9tZXRyeSB3aXRoIHVzZWZ1bCBhY2Nlc3NvciwgY29tcGFyaXNvbiwgYW5kXG4gKiBtb2RpZmljYXRpb24gbWV0aG9kcy5cbiAqXG4gKiBAY2xhc3MgUG9pbnRcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IHRoZSB4LWNvb3JkaW5hdGUuIHRoaXMgY291bGQgYmUgbG9uZ2l0dWRlIG9yIHNjcmVlblxuICogcGl4ZWxzLCBvciBhbnkgb3RoZXIgc29ydCBvZiB1bml0LlxuICogQHBhcmFtIHtOdW1iZXJ9IHkgdGhlIHktY29vcmRpbmF0ZS4gdGhpcyBjb3VsZCBiZSBsYXRpdHVkZSBvciBzY3JlZW5cbiAqIHBpeGVscywgb3IgYW55IG90aGVyIHNvcnQgb2YgdW5pdC5cbiAqIEBleGFtcGxlXG4gKiB2YXIgcG9pbnQgPSBuZXcgUG9pbnQoLTc3LCAzOCk7XG4gKi9cbmZ1bmN0aW9uIFBvaW50KHgsIHkpIHtcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG59XG5cblBvaW50LnByb3RvdHlwZSA9IHtcblxuICAgIC8qKlxuICAgICAqIENsb25lIHRoaXMgcG9pbnQsIHJldHVybmluZyBhIG5ldyBwb2ludCB0aGF0IGNhbiBiZSBtb2RpZmllZFxuICAgICAqIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBvbGQgb25lLlxuICAgICAqIEByZXR1cm4ge1BvaW50fSB0aGUgY2xvbmVcbiAgICAgKi9cbiAgICBjbG9uZTogZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgUG9pbnQodGhpcy54LCB0aGlzLnkpOyB9LFxuXG4gICAgLyoqXG4gICAgICogQWRkIHRoaXMgcG9pbnQncyB4ICYgeSBjb29yZGluYXRlcyB0byBhbm90aGVyIHBvaW50LFxuICAgICAqIHlpZWxkaW5nIGEgbmV3IHBvaW50LlxuICAgICAqIEBwYXJhbSB7UG9pbnR9IHAgdGhlIG90aGVyIHBvaW50XG4gICAgICogQHJldHVybiB7UG9pbnR9IG91dHB1dCBwb2ludFxuICAgICAqL1xuICAgIGFkZDogICAgIGZ1bmN0aW9uKHApIHsgcmV0dXJuIHRoaXMuY2xvbmUoKS5fYWRkKHApOyB9LFxuXG4gICAgLyoqXG4gICAgICogU3VidHJhY3QgdGhpcyBwb2ludCdzIHggJiB5IGNvb3JkaW5hdGVzIHRvIGZyb20gcG9pbnQsXG4gICAgICogeWllbGRpbmcgYSBuZXcgcG9pbnQuXG4gICAgICogQHBhcmFtIHtQb2ludH0gcCB0aGUgb3RoZXIgcG9pbnRcbiAgICAgKiBAcmV0dXJuIHtQb2ludH0gb3V0cHV0IHBvaW50XG4gICAgICovXG4gICAgc3ViOiAgICAgZnVuY3Rpb24ocCkgeyByZXR1cm4gdGhpcy5jbG9uZSgpLl9zdWIocCk7IH0sXG5cbiAgICAvKipcbiAgICAgKiBNdWx0aXBseSB0aGlzIHBvaW50J3MgeCAmIHkgY29vcmRpbmF0ZXMgYnkgcG9pbnQsXG4gICAgICogeWllbGRpbmcgYSBuZXcgcG9pbnQuXG4gICAgICogQHBhcmFtIHtQb2ludH0gcCB0aGUgb3RoZXIgcG9pbnRcbiAgICAgKiBAcmV0dXJuIHtQb2ludH0gb3V0cHV0IHBvaW50XG4gICAgICovXG4gICAgbXVsdEJ5UG9pbnQ6ICAgIGZ1bmN0aW9uKHApIHsgcmV0dXJuIHRoaXMuY2xvbmUoKS5fbXVsdEJ5UG9pbnQocCk7IH0sXG5cbiAgICAvKipcbiAgICAgKiBEaXZpZGUgdGhpcyBwb2ludCdzIHggJiB5IGNvb3JkaW5hdGVzIGJ5IHBvaW50LFxuICAgICAqIHlpZWxkaW5nIGEgbmV3IHBvaW50LlxuICAgICAqIEBwYXJhbSB7UG9pbnR9IHAgdGhlIG90aGVyIHBvaW50XG4gICAgICogQHJldHVybiB7UG9pbnR9IG91dHB1dCBwb2ludFxuICAgICAqL1xuICAgIGRpdkJ5UG9pbnQ6ICAgICBmdW5jdGlvbihwKSB7IHJldHVybiB0aGlzLmNsb25lKCkuX2RpdkJ5UG9pbnQocCk7IH0sXG5cbiAgICAvKipcbiAgICAgKiBNdWx0aXBseSB0aGlzIHBvaW50J3MgeCAmIHkgY29vcmRpbmF0ZXMgYnkgYSBmYWN0b3IsXG4gICAgICogeWllbGRpbmcgYSBuZXcgcG9pbnQuXG4gICAgICogQHBhcmFtIHtQb2ludH0gayBmYWN0b3JcbiAgICAgKiBAcmV0dXJuIHtQb2ludH0gb3V0cHV0IHBvaW50XG4gICAgICovXG4gICAgbXVsdDogICAgZnVuY3Rpb24oaykgeyByZXR1cm4gdGhpcy5jbG9uZSgpLl9tdWx0KGspOyB9LFxuXG4gICAgLyoqXG4gICAgICogRGl2aWRlIHRoaXMgcG9pbnQncyB4ICYgeSBjb29yZGluYXRlcyBieSBhIGZhY3RvcixcbiAgICAgKiB5aWVsZGluZyBhIG5ldyBwb2ludC5cbiAgICAgKiBAcGFyYW0ge1BvaW50fSBrIGZhY3RvclxuICAgICAqIEByZXR1cm4ge1BvaW50fSBvdXRwdXQgcG9pbnRcbiAgICAgKi9cbiAgICBkaXY6ICAgICBmdW5jdGlvbihrKSB7IHJldHVybiB0aGlzLmNsb25lKCkuX2RpdihrKTsgfSxcblxuICAgIC8qKlxuICAgICAqIFJvdGF0ZSB0aGlzIHBvaW50IGFyb3VuZCB0aGUgMCwgMCBvcmlnaW4gYnkgYW4gYW5nbGUgYSxcbiAgICAgKiBnaXZlbiBpbiByYWRpYW5zXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IGEgYW5nbGUgdG8gcm90YXRlIGFyb3VuZCwgaW4gcmFkaWFuc1xuICAgICAqIEByZXR1cm4ge1BvaW50fSBvdXRwdXQgcG9pbnRcbiAgICAgKi9cbiAgICByb3RhdGU6ICBmdW5jdGlvbihhKSB7IHJldHVybiB0aGlzLmNsb25lKCkuX3JvdGF0ZShhKTsgfSxcblxuICAgIC8qKlxuICAgICAqIFJvdGF0ZSB0aGlzIHBvaW50IGFyb3VuZCBwIHBvaW50IGJ5IGFuIGFuZ2xlIGEsXG4gICAgICogZ2l2ZW4gaW4gcmFkaWFuc1xuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBhIGFuZ2xlIHRvIHJvdGF0ZSBhcm91bmQsIGluIHJhZGlhbnNcbiAgICAgKiBAcGFyYW0ge1BvaW50fSBwIFBvaW50IHRvIHJvdGF0ZSBhcm91bmRcbiAgICAgKiBAcmV0dXJuIHtQb2ludH0gb3V0cHV0IHBvaW50XG4gICAgICovXG4gICAgcm90YXRlQXJvdW5kOiAgZnVuY3Rpb24oYSxwKSB7IHJldHVybiB0aGlzLmNsb25lKCkuX3JvdGF0ZUFyb3VuZChhLHApOyB9LFxuXG4gICAgLyoqXG4gICAgICogTXVsdGlwbHkgdGhpcyBwb2ludCBieSBhIDR4MSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXhcbiAgICAgKiBAcGFyYW0ge0FycmF5PE51bWJlcj59IG0gdHJhbnNmb3JtYXRpb24gbWF0cml4XG4gICAgICogQHJldHVybiB7UG9pbnR9IG91dHB1dCBwb2ludFxuICAgICAqL1xuICAgIG1hdE11bHQ6IGZ1bmN0aW9uKG0pIHsgcmV0dXJuIHRoaXMuY2xvbmUoKS5fbWF0TXVsdChtKTsgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGlzIHBvaW50IGJ1dCBhcyBhIHVuaXQgdmVjdG9yIGZyb20gMCwgMCwgbWVhbmluZ1xuICAgICAqIHRoYXQgdGhlIGRpc3RhbmNlIGZyb20gdGhlIHJlc3VsdGluZyBwb2ludCB0byB0aGUgMCwgMFxuICAgICAqIGNvb3JkaW5hdGUgd2lsbCBiZSBlcXVhbCB0byAxIGFuZCB0aGUgYW5nbGUgZnJvbSB0aGUgcmVzdWx0aW5nXG4gICAgICogcG9pbnQgdG8gdGhlIDAsIDAgY29vcmRpbmF0ZSB3aWxsIGJlIHRoZSBzYW1lIGFzIGJlZm9yZS5cbiAgICAgKiBAcmV0dXJuIHtQb2ludH0gdW5pdCB2ZWN0b3IgcG9pbnRcbiAgICAgKi9cbiAgICB1bml0OiAgICBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuY2xvbmUoKS5fdW5pdCgpOyB9LFxuXG4gICAgLyoqXG4gICAgICogQ29tcHV0ZSBhIHBlcnBlbmRpY3VsYXIgcG9pbnQsIHdoZXJlIHRoZSBuZXcgeSBjb29yZGluYXRlXG4gICAgICogaXMgdGhlIG9sZCB4IGNvb3JkaW5hdGUgYW5kIHRoZSBuZXcgeCBjb29yZGluYXRlIGlzIHRoZSBvbGQgeVxuICAgICAqIGNvb3JkaW5hdGUgbXVsdGlwbGllZCBieSAtMVxuICAgICAqIEByZXR1cm4ge1BvaW50fSBwZXJwZW5kaWN1bGFyIHBvaW50XG4gICAgICovXG4gICAgcGVycDogICAgZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLmNsb25lKCkuX3BlcnAoKTsgfSxcblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIHZlcnNpb24gb2YgdGhpcyBwb2ludCB3aXRoIHRoZSB4ICYgeSBjb29yZGluYXRlc1xuICAgICAqIHJvdW5kZWQgdG8gaW50ZWdlcnMuXG4gICAgICogQHJldHVybiB7UG9pbnR9IHJvdW5kZWQgcG9pbnRcbiAgICAgKi9cbiAgICByb3VuZDogICBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuY2xvbmUoKS5fcm91bmQoKTsgfSxcblxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgbWFnaXR1ZGUgb2YgdGhpcyBwb2ludDogdGhpcyBpcyB0aGUgRXVjbGlkZWFuXG4gICAgICogZGlzdGFuY2UgZnJvbSB0aGUgMCwgMCBjb29yZGluYXRlIHRvIHRoaXMgcG9pbnQncyB4IGFuZCB5XG4gICAgICogY29vcmRpbmF0ZXMuXG4gICAgICogQHJldHVybiB7TnVtYmVyfSBtYWduaXR1ZGVcbiAgICAgKi9cbiAgICBtYWc6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCAqIHRoaXMueCArIHRoaXMueSAqIHRoaXMueSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEp1ZGdlIHdoZXRoZXIgdGhpcyBwb2ludCBpcyBlcXVhbCB0byBhbm90aGVyIHBvaW50LCByZXR1cm5pbmdcbiAgICAgKiB0cnVlIG9yIGZhbHNlLlxuICAgICAqIEBwYXJhbSB7UG9pbnR9IG90aGVyIHRoZSBvdGhlciBwb2ludFxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IHdoZXRoZXIgdGhlIHBvaW50cyBhcmUgZXF1YWxcbiAgICAgKi9cbiAgICBlcXVhbHM6IGZ1bmN0aW9uKG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnggPT09IG90aGVyLnggJiZcbiAgICAgICAgICAgICAgIHRoaXMueSA9PT0gb3RoZXIueTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBmcm9tIHRoaXMgcG9pbnQgdG8gYW5vdGhlciBwb2ludFxuICAgICAqIEBwYXJhbSB7UG9pbnR9IHAgdGhlIG90aGVyIHBvaW50XG4gICAgICogQHJldHVybiB7TnVtYmVyfSBkaXN0YW5jZVxuICAgICAqL1xuICAgIGRpc3Q6IGZ1bmN0aW9uKHApIHtcbiAgICAgICAgcmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RTcXIocCkpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGZyb20gdGhpcyBwb2ludCB0byBhbm90aGVyIHBvaW50LFxuICAgICAqIHdpdGhvdXQgdGhlIHNxdWFyZSByb290IHN0ZXAuIFVzZWZ1bCBpZiB5b3UncmUgY29tcGFyaW5nXG4gICAgICogcmVsYXRpdmUgZGlzdGFuY2VzLlxuICAgICAqIEBwYXJhbSB7UG9pbnR9IHAgdGhlIG90aGVyIHBvaW50XG4gICAgICogQHJldHVybiB7TnVtYmVyfSBkaXN0YW5jZVxuICAgICAqL1xuICAgIGRpc3RTcXI6IGZ1bmN0aW9uKHApIHtcbiAgICAgICAgdmFyIGR4ID0gcC54IC0gdGhpcy54LFxuICAgICAgICAgICAgZHkgPSBwLnkgLSB0aGlzLnk7XG4gICAgICAgIHJldHVybiBkeCAqIGR4ICsgZHkgKiBkeTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBhbmdsZSBmcm9tIHRoZSAwLCAwIGNvb3JkaW5hdGUgdG8gdGhpcyBwb2ludCwgaW4gcmFkaWFuc1xuICAgICAqIGNvb3JkaW5hdGVzLlxuICAgICAqIEByZXR1cm4ge051bWJlcn0gYW5nbGVcbiAgICAgKi9cbiAgICBhbmdsZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmF0YW4yKHRoaXMueSwgdGhpcy54KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBhbmdsZSBmcm9tIHRoaXMgcG9pbnQgdG8gYW5vdGhlciBwb2ludCwgaW4gcmFkaWFuc1xuICAgICAqIEBwYXJhbSB7UG9pbnR9IGIgdGhlIG90aGVyIHBvaW50XG4gICAgICogQHJldHVybiB7TnVtYmVyfSBhbmdsZVxuICAgICAqL1xuICAgIGFuZ2xlVG86IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguYXRhbjIodGhpcy55IC0gYi55LCB0aGlzLnggLSBiLngpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGFuZ2xlIGJldHdlZW4gdGhpcyBwb2ludCBhbmQgYW5vdGhlciBwb2ludCwgaW4gcmFkaWFuc1xuICAgICAqIEBwYXJhbSB7UG9pbnR9IGIgdGhlIG90aGVyIHBvaW50XG4gICAgICogQHJldHVybiB7TnVtYmVyfSBhbmdsZVxuICAgICAqL1xuICAgIGFuZ2xlV2l0aDogZnVuY3Rpb24oYikge1xuICAgICAgICByZXR1cm4gdGhpcy5hbmdsZVdpdGhTZXAoYi54LCBiLnkpO1xuICAgIH0sXG5cbiAgICAvKlxuICAgICAqIEZpbmQgdGhlIGFuZ2xlIG9mIHRoZSB0d28gdmVjdG9ycywgc29sdmluZyB0aGUgZm9ybXVsYSBmb3JcbiAgICAgKiB0aGUgY3Jvc3MgcHJvZHVjdCBhIHggYiA9IHxhfHxifHNpbijDjsK4KSBmb3Igw47CuC5cbiAgICAgKiBAcGFyYW0ge051bWJlcn0geCB0aGUgeC1jb29yZGluYXRlXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IHkgdGhlIHktY29vcmRpbmF0ZVxuICAgICAqIEByZXR1cm4ge051bWJlcn0gdGhlIGFuZ2xlIGluIHJhZGlhbnNcbiAgICAgKi9cbiAgICBhbmdsZVdpdGhTZXA6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguYXRhbjIoXG4gICAgICAgICAgICB0aGlzLnggKiB5IC0gdGhpcy55ICogeCxcbiAgICAgICAgICAgIHRoaXMueCAqIHggKyB0aGlzLnkgKiB5KTtcbiAgICB9LFxuXG4gICAgX21hdE11bHQ6IGZ1bmN0aW9uKG0pIHtcbiAgICAgICAgdmFyIHggPSBtWzBdICogdGhpcy54ICsgbVsxXSAqIHRoaXMueSxcbiAgICAgICAgICAgIHkgPSBtWzJdICogdGhpcy54ICsgbVszXSAqIHRoaXMueTtcbiAgICAgICAgdGhpcy54ID0geDtcbiAgICAgICAgdGhpcy55ID0geTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIF9hZGQ6IGZ1bmN0aW9uKHApIHtcbiAgICAgICAgdGhpcy54ICs9IHAueDtcbiAgICAgICAgdGhpcy55ICs9IHAueTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIF9zdWI6IGZ1bmN0aW9uKHApIHtcbiAgICAgICAgdGhpcy54IC09IHAueDtcbiAgICAgICAgdGhpcy55IC09IHAueTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIF9tdWx0OiBmdW5jdGlvbihrKSB7XG4gICAgICAgIHRoaXMueCAqPSBrO1xuICAgICAgICB0aGlzLnkgKj0gaztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIF9kaXY6IGZ1bmN0aW9uKGspIHtcbiAgICAgICAgdGhpcy54IC89IGs7XG4gICAgICAgIHRoaXMueSAvPSBrO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgX211bHRCeVBvaW50OiBmdW5jdGlvbihwKSB7XG4gICAgICAgIHRoaXMueCAqPSBwLng7XG4gICAgICAgIHRoaXMueSAqPSBwLnk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICBfZGl2QnlQb2ludDogZnVuY3Rpb24ocCkge1xuICAgICAgICB0aGlzLnggLz0gcC54O1xuICAgICAgICB0aGlzLnkgLz0gcC55O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgX3VuaXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLl9kaXYodGhpcy5tYWcoKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICBfcGVycDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB5ID0gdGhpcy55O1xuICAgICAgICB0aGlzLnkgPSB0aGlzLng7XG4gICAgICAgIHRoaXMueCA9IC15O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgX3JvdGF0ZTogZnVuY3Rpb24oYW5nbGUpIHtcbiAgICAgICAgdmFyIGNvcyA9IE1hdGguY29zKGFuZ2xlKSxcbiAgICAgICAgICAgIHNpbiA9IE1hdGguc2luKGFuZ2xlKSxcbiAgICAgICAgICAgIHggPSBjb3MgKiB0aGlzLnggLSBzaW4gKiB0aGlzLnksXG4gICAgICAgICAgICB5ID0gc2luICogdGhpcy54ICsgY29zICogdGhpcy55O1xuICAgICAgICB0aGlzLnggPSB4O1xuICAgICAgICB0aGlzLnkgPSB5O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgX3JvdGF0ZUFyb3VuZDogZnVuY3Rpb24oYW5nbGUsIHApIHtcbiAgICAgICAgdmFyIGNvcyA9IE1hdGguY29zKGFuZ2xlKSxcbiAgICAgICAgICAgIHNpbiA9IE1hdGguc2luKGFuZ2xlKSxcbiAgICAgICAgICAgIHggPSBwLnggKyBjb3MgKiAodGhpcy54IC0gcC54KSAtIHNpbiAqICh0aGlzLnkgLSBwLnkpLFxuICAgICAgICAgICAgeSA9IHAueSArIHNpbiAqICh0aGlzLnggLSBwLngpICsgY29zICogKHRoaXMueSAtIHAueSk7XG4gICAgICAgIHRoaXMueCA9IHg7XG4gICAgICAgIHRoaXMueSA9IHk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICBfcm91bmQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnggPSBNYXRoLnJvdW5kKHRoaXMueCk7XG4gICAgICAgIHRoaXMueSA9IE1hdGgucm91bmQodGhpcy55KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25zdHJ1Y3QgYSBwb2ludCBmcm9tIGFuIGFycmF5IGlmIG5lY2Vzc2FyeSwgb3RoZXJ3aXNlIGlmIHRoZSBpbnB1dFxuICogaXMgYWxyZWFkeSBhIFBvaW50LCBvciBhbiB1bmtub3duIHR5cGUsIHJldHVybiBpdCB1bmNoYW5nZWRcbiAqIEBwYXJhbSB7QXJyYXk8TnVtYmVyPnxQb2ludHwqfSBhIGFueSBraW5kIG9mIGlucHV0IHZhbHVlXG4gKiBAcmV0dXJuIHtQb2ludH0gY29uc3RydWN0ZWQgcG9pbnQsIG9yIHBhc3NlZC10aHJvdWdoIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqIC8vIHRoaXNcbiAqIHZhciBwb2ludCA9IFBvaW50LmNvbnZlcnQoWzAsIDFdKTtcbiAqIC8vIGlzIGVxdWl2YWxlbnQgdG9cbiAqIHZhciBwb2ludCA9IG5ldyBQb2ludCgwLCAxKTtcbiAqL1xuUG9pbnQuY29udmVydCA9IGZ1bmN0aW9uIChhKSB7XG4gICAgaWYgKGEgaW5zdGFuY2VvZiBQb2ludCkge1xuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQb2ludChhWzBdLCBhWzFdKTtcbiAgICB9XG4gICAgcmV0dXJuIGE7XG59O1xuIiwiLy8gQGZsb3dcbi8qIGVzbGludC1lbnYgYnJvd3NlciAqL1xuaW1wb3J0IHR5cGUge1dpbmRvd30gZnJvbSAnLi4vLi4vdHlwZXMvd2luZG93JztcblxuZXhwb3J0IGRlZmF1bHQgKHNlbGY6IFdpbmRvdyk7XG4iLCIvLyBAZmxvd1xuXG4vKipcbiAqIERlZXBseSBjb21wYXJlcyB0d28gb2JqZWN0IGxpdGVyYWxzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGRlZXBFcXVhbChhOiA/bWl4ZWQsIGI6ID9taXhlZCk6IGJvb2xlYW4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGEpKSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShiKSB8fCBhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIWRlZXBFcXVhbChhW2ldLCBiW2ldKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGEgPT09ICdvYmplY3QnICYmIGEgIT09IG51bGwgJiYgYiAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoISh0eXBlb2YgYiA9PT0gJ29iamVjdCcpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhKTtcbiAgICAgICAgaWYgKGtleXMubGVuZ3RoICE9PSBPYmplY3Qua2V5cyhiKS5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gYSkge1xuICAgICAgICAgICAgaWYgKCFkZWVwRXF1YWwoYVtrZXldLCBiW2tleV0pKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBhID09PSBiO1xufVxuXG5leHBvcnQgZGVmYXVsdCBkZWVwRXF1YWw7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgVW5pdEJlemllciBmcm9tICdAbWFwYm94L3VuaXRiZXppZXInO1xuXG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgd2luZG93IGZyb20gJy4vd2luZG93JztcblxuaW1wb3J0IHR5cGUge0NhbGxiYWNrfSBmcm9tICcuLi90eXBlcy9jYWxsYmFjayc7XG5cbi8qKlxuICogQG1vZHVsZSB1dGlsXG4gKiBAcHJpdmF0ZVxuICovXG5cbi8qKlxuICogR2l2ZW4gYSB2YWx1ZSBgdGAgdGhhdCB2YXJpZXMgYmV0d2VlbiAwIGFuZCAxLCByZXR1cm5cbiAqIGFuIGludGVycG9sYXRpb24gZnVuY3Rpb24gdGhhdCBlYXNlcyBiZXR3ZWVuIDAgYW5kIDEgaW4gYSBwbGVhc2luZ1xuICogY3ViaWMgaW4tb3V0IGZhc2hpb24uXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVhc2VDdWJpY0luT3V0KHQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKHQgPD0gMCkgcmV0dXJuIDA7XG4gICAgaWYgKHQgPj0gMSkgcmV0dXJuIDE7XG4gICAgY29uc3QgdDIgPSB0ICogdCxcbiAgICAgICAgdDMgPSB0MiAqIHQ7XG4gICAgcmV0dXJuIDQgKiAodCA8IDAuNSA/IHQzIDogMyAqICh0IC0gdDIpICsgdDMgLSAwLjc1KTtcbn1cblxuLyoqXG4gKiBHaXZlbiBnaXZlbiAoeCwgeSksICh4MSwgeTEpIGNvbnRyb2wgcG9pbnRzIGZvciBhIGJlemllciBjdXJ2ZSxcbiAqIHJldHVybiBhIGZ1bmN0aW9uIHRoYXQgaW50ZXJwb2xhdGVzIGFsb25nIHRoYXQgY3VydmUuXG4gKlxuICogQHBhcmFtIHAxeCBjb250cm9sIHBvaW50IDEgeCBjb29yZGluYXRlXG4gKiBAcGFyYW0gcDF5IGNvbnRyb2wgcG9pbnQgMSB5IGNvb3JkaW5hdGVcbiAqIEBwYXJhbSBwMnggY29udHJvbCBwb2ludCAyIHggY29vcmRpbmF0ZVxuICogQHBhcmFtIHAyeSBjb250cm9sIHBvaW50IDIgeSBjb29yZGluYXRlXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmV6aWVyKHAxeDogbnVtYmVyLCBwMXk6IG51bWJlciwgcDJ4OiBudW1iZXIsIHAyeTogbnVtYmVyKTogKHQ6IG51bWJlcikgPT4gbnVtYmVyIHtcbiAgICBjb25zdCBiZXppZXIgPSBuZXcgVW5pdEJlemllcihwMXgsIHAxeSwgcDJ4LCBwMnkpO1xuICAgIHJldHVybiBmdW5jdGlvbih0OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIGJlemllci5zb2x2ZSh0KTtcbiAgICB9O1xufVxuXG4vKipcbiAqIEEgZGVmYXVsdCBiZXppZXItY3VydmUgcG93ZXJlZCBlYXNpbmcgZnVuY3Rpb24gd2l0aFxuICogY29udHJvbCBwb2ludHMgKDAuMjUsIDAuMSkgYW5kICgwLjI1LCAxKVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjb25zdCBlYXNlID0gYmV6aWVyKDAuMjUsIDAuMSwgMC4yNSwgMSk7XG5cbi8qKlxuICogY29uc3RyYWluIG4gdG8gdGhlIGdpdmVuIHJhbmdlIHZpYSBtaW4gKyBtYXhcbiAqXG4gKiBAcGFyYW0gbiB2YWx1ZVxuICogQHBhcmFtIG1pbiB0aGUgbWluaW11bSB2YWx1ZSB0byBiZSByZXR1cm5lZFxuICogQHBhcmFtIG1heCB0aGUgbWF4aW11bSB2YWx1ZSB0byBiZSByZXR1cm5lZFxuICogQHJldHVybnMgdGhlIGNsYW1wZWQgdmFsdWVcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGFtcChuOiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgubWluKG1heCwgTWF0aC5tYXgobWluLCBuKSk7XG59XG5cbi8qKlxuICogY29uc3RyYWluIG4gdG8gdGhlIGdpdmVuIHJhbmdlLCBleGNsdWRpbmcgdGhlIG1pbmltdW0sIHZpYSBtb2R1bGFyIGFyaXRobWV0aWNcbiAqXG4gKiBAcGFyYW0gbiB2YWx1ZVxuICogQHBhcmFtIG1pbiB0aGUgbWluaW11bSB2YWx1ZSB0byBiZSByZXR1cm5lZCwgZXhjbHVzaXZlXG4gKiBAcGFyYW0gbWF4IHRoZSBtYXhpbXVtIHZhbHVlIHRvIGJlIHJldHVybmVkLCBpbmNsdXNpdmVcbiAqIEByZXR1cm5zIGNvbnN0cmFpbmVkIG51bWJlclxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdyYXAobjogbnVtYmVyLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGQgPSBtYXggLSBtaW47XG4gICAgY29uc3QgdyA9ICgobiAtIG1pbikgJSBkICsgZCkgJSBkICsgbWluO1xuICAgIHJldHVybiAodyA9PT0gbWluKSA/IG1heCA6IHc7XG59XG5cbi8qXG4gKiBDYWxsIGFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBvbiBhbiBhcnJheSBvZiBhcmd1bWVudHMsXG4gKiBjYWxsaW5nIGBjYWxsYmFja2Agd2l0aCB0aGUgY29tcGxldGVkIHJlc3VsdHMgb2YgYWxsIGNhbGxzLlxuICpcbiAqIEBwYXJhbSBhcnJheSBpbnB1dCB0byBlYWNoIGNhbGwgb2YgdGhlIGFzeW5jIGZ1bmN0aW9uLlxuICogQHBhcmFtIGZuIGFuIGFzeW5jIGZ1bmN0aW9uIHdpdGggc2lnbmF0dXJlIChkYXRhLCBjYWxsYmFjaylcbiAqIEBwYXJhbSBjYWxsYmFjayBhIGNhbGxiYWNrIHJ1biBhZnRlciBhbGwgYXN5bmMgd29yayBpcyBkb25lLlxuICogY2FsbGVkIHdpdGggYW4gYXJyYXksIGNvbnRhaW5pbmcgdGhlIHJlc3VsdHMgb2YgZWFjaCBhc3luYyBjYWxsLlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzeW5jQWxsPEl0ZW0sIFJlc3VsdD4oXG4gICAgYXJyYXk6IEFycmF5PEl0ZW0+LFxuICAgIGZuOiAoaXRlbTogSXRlbSwgZm5DYWxsYmFjazogQ2FsbGJhY2s8UmVzdWx0PikgPT4gdm9pZCxcbiAgICBjYWxsYmFjazogQ2FsbGJhY2s8QXJyYXk8UmVzdWx0Pj5cbikge1xuICAgIGlmICghYXJyYXkubGVuZ3RoKSB7IHJldHVybiBjYWxsYmFjayhudWxsLCBbXSk7IH1cbiAgICBsZXQgcmVtYWluaW5nID0gYXJyYXkubGVuZ3RoO1xuICAgIGNvbnN0IHJlc3VsdHMgPSBuZXcgQXJyYXkoYXJyYXkubGVuZ3RoKTtcbiAgICBsZXQgZXJyb3IgPSBudWxsO1xuICAgIGFycmF5LmZvckVhY2goKGl0ZW0sIGkpID0+IHtcbiAgICAgICAgZm4oaXRlbSwgKGVyciwgcmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSBlcnJvciA9IGVycjtcbiAgICAgICAgICAgIHJlc3VsdHNbaV0gPSAoKHJlc3VsdDogYW55KTogUmVzdWx0KTsgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzIxMjNcbiAgICAgICAgICAgIGlmICgtLXJlbWFpbmluZyA9PT0gMCkgY2FsbGJhY2soZXJyb3IsIHJlc3VsdHMpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuLypcbiAqIFBvbHlmaWxsIGZvciBPYmplY3QudmFsdWVzLiBOb3QgZnVsbHkgc3BlYyBjb21wbGlhbnQsIGJ1dCB3ZSBkb24ndFxuICogbmVlZCBpdCB0byBiZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVzPFQ+KG9iajoge1trZXk6IHN0cmluZ106IFR9KTogQXJyYXk8VD4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGZvciAoY29uc3QgayBpbiBvYmopIHtcbiAgICAgICAgcmVzdWx0LnB1c2gob2JqW2tdKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLypcbiAqIENvbXB1dGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUga2V5cyBpbiBvbmUgb2JqZWN0IGFuZCB0aGUga2V5c1xuICogaW4gYW5vdGhlciBvYmplY3QuXG4gKlxuICogQHJldHVybnMga2V5cyBkaWZmZXJlbmNlXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24ga2V5c0RpZmZlcmVuY2U8UywgVD4ob2JqOiB7W2tleTogc3RyaW5nXTogU30sIG90aGVyOiB7W2tleTogc3RyaW5nXTogVH0pOiBBcnJheTxzdHJpbmc+IHtcbiAgICBjb25zdCBkaWZmZXJlbmNlID0gW107XG4gICAgZm9yIChjb25zdCBpIGluIG9iaikge1xuICAgICAgICBpZiAoIShpIGluIG90aGVyKSkge1xuICAgICAgICAgICAgZGlmZmVyZW5jZS5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkaWZmZXJlbmNlO1xufVxuXG4vKipcbiAqIEdpdmVuIGEgZGVzdGluYXRpb24gb2JqZWN0IGFuZCBvcHRpb25hbGx5IG1hbnkgc291cmNlIG9iamVjdHMsXG4gKiBjb3B5IGFsbCBwcm9wZXJ0aWVzIGZyb20gdGhlIHNvdXJjZSBvYmplY3RzIGludG8gdGhlIGRlc3RpbmF0aW9uLlxuICogVGhlIGxhc3Qgc291cmNlIG9iamVjdCBnaXZlbiBvdmVycmlkZXMgcHJvcGVydGllcyBmcm9tIHByZXZpb3VzXG4gKiBzb3VyY2Ugb2JqZWN0cy5cbiAqXG4gKiBAcGFyYW0gZGVzdCBkZXN0aW5hdGlvbiBvYmplY3RcbiAqIEBwYXJhbSBzb3VyY2VzIHNvdXJjZXMgZnJvbSB3aGljaCBwcm9wZXJ0aWVzIGFyZSBwdWxsZWRcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRlbmQoZGVzdDogT2JqZWN0LCAuLi5zb3VyY2VzOiBBcnJheTw/T2JqZWN0Pik6IE9iamVjdCB7XG4gICAgZm9yIChjb25zdCBzcmMgb2Ygc291cmNlcykge1xuICAgICAgICBmb3IgKGNvbnN0IGsgaW4gc3JjKSB7XG4gICAgICAgICAgICBkZXN0W2tdID0gc3JjW2tdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkZXN0O1xufVxuXG4vKipcbiAqIEdpdmVuIGFuIG9iamVjdCBhbmQgYSBudW1iZXIgb2YgcHJvcGVydGllcyBhcyBzdHJpbmdzLCByZXR1cm4gdmVyc2lvblxuICogb2YgdGhhdCBvYmplY3Qgd2l0aCBvbmx5IHRob3NlIHByb3BlcnRpZXMuXG4gKlxuICogQHBhcmFtIHNyYyB0aGUgb2JqZWN0XG4gKiBAcGFyYW0gcHJvcGVydGllcyBhbiBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBjaG9zZW5cbiAqIHRvIGFwcGVhciBvbiB0aGUgcmVzdWx0aW5nIG9iamVjdC5cbiAqIEByZXR1cm5zIG9iamVjdCB3aXRoIGxpbWl0ZWQgcHJvcGVydGllcy5cbiAqIEBleGFtcGxlXG4gKiB2YXIgZm9vID0geyBuYW1lOiAnQ2hhcmxpZScsIGFnZTogMTAgfTtcbiAqIHZhciBqdXN0TmFtZSA9IHBpY2soZm9vLCBbJ25hbWUnXSk7XG4gKiAvLyBqdXN0TmFtZSA9IHsgbmFtZTogJ0NoYXJsaWUnIH1cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwaWNrKHNyYzogT2JqZWN0LCBwcm9wZXJ0aWVzOiBBcnJheTxzdHJpbmc+KTogT2JqZWN0IHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgayA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgIGlmIChrIGluIHNyYykge1xuICAgICAgICAgICAgcmVzdWx0W2tdID0gc3JjW2tdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmxldCBpZCA9IDE7XG5cbi8qKlxuICogUmV0dXJuIGEgdW5pcXVlIG51bWVyaWMgaWQsIHN0YXJ0aW5nIGF0IDEgYW5kIGluY3JlbWVudGluZyB3aXRoXG4gKiBlYWNoIGNhbGwuXG4gKlxuICogQHJldHVybnMgdW5pcXVlIG51bWVyaWMgaWQuXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5pcXVlSWQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gaWQrKztcbn1cblxuLyoqXG4gKiBSZXR1cm4gYSByYW5kb20gVVVJRCAodjQpLiBUYWtlbiBmcm9tOiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9qZWQvOTgyODgzXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXVpZCgpOiBzdHJpbmcge1xuICAgIGZ1bmN0aW9uIGIoYSkge1xuICAgICAgICByZXR1cm4gYSA/IChhIF4gTWF0aC5yYW5kb20oKSAqIDE2ID4+IGEgLyA0KS50b1N0cmluZygxNikgOlxuICAgICAgICAvLyRGbG93Rml4TWU6IEZsb3cgZG9lc24ndCBsaWtlIHRoZSBpbXBsaWVkIGFycmF5IGxpdGVyYWwgY29udmVyc2lvbiBoZXJlXG4gICAgICAgICAgICAoWzFlN10gKyAtWzFlM10gKyAtNGUzICsgLThlMyArIC0xZTExKS5yZXBsYWNlKC9bMDE4XS9nLCBiKTtcbiAgICB9XG4gICAgcmV0dXJuIGIoKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhIHN0cmluZyB0byBtYXRjaCBVVUlEKHY0KSBvZiB0aGVcbiAqIGZvcm06IHh4eHh4eHh4LXh4eHgtNHh4eC1bODlhYl14eHgteHh4eHh4eHh4eHh4XG4gKiBAcGFyYW0gc3RyIHN0cmluZyB0byB2YWxpZGF0ZS5cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVV1aWQoc3RyOiA/c3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN0ciA/IC9eWzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzRdWzAtOWEtZl17M30tWzg5YWJdWzAtOWEtZl17M30tWzAtOWEtZl17MTJ9JC9pLnRlc3Qoc3RyKSA6IGZhbHNlO1xufVxuXG4vKipcbiAqIEdpdmVuIGFuIGFycmF5IG9mIG1lbWJlciBmdW5jdGlvbiBuYW1lcyBhcyBzdHJpbmdzLCByZXBsYWNlIGFsbCBvZiB0aGVtXG4gKiB3aXRoIGJvdW5kIHZlcnNpb25zIHRoYXQgd2lsbCBhbHdheXMgcmVmZXIgdG8gYGNvbnRleHRgIGFzIGB0aGlzYC4gVGhpc1xuICogaXMgdXNlZnVsIGZvciBjbGFzc2VzIHdoZXJlIG90aGVyd2lzZSBldmVudCBiaW5kaW5ncyB3b3VsZCByZWFzc2lnblxuICogYHRoaXNgIHRvIHRoZSBldmVudGVkIG9iamVjdCBvciBzb21lIG90aGVyIHZhbHVlOiB0aGlzIGxldHMgeW91IGVuc3VyZVxuICogdGhlIGB0aGlzYCB2YWx1ZSBhbHdheXMuXG4gKlxuICogQHBhcmFtIGZucyBsaXN0IG9mIG1lbWJlciBmdW5jdGlvbiBuYW1lc1xuICogQHBhcmFtIGNvbnRleHQgdGhlIGNvbnRleHQgdmFsdWVcbiAqIEBleGFtcGxlXG4gKiBmdW5jdGlvbiBNeUNsYXNzKCkge1xuICogICBiaW5kQWxsKFsnb250aW1lciddLCB0aGlzKTtcbiAqICAgdGhpcy5uYW1lID0gJ1RvbSc7XG4gKiB9XG4gKiBNeUNsYXNzLnByb3RvdHlwZS5vbnRpbWVyID0gZnVuY3Rpb24oKSB7XG4gKiAgIGFsZXJ0KHRoaXMubmFtZSk7XG4gKiB9O1xuICogdmFyIG15Q2xhc3MgPSBuZXcgTXlDbGFzcygpO1xuICogc2V0VGltZW91dChteUNsYXNzLm9udGltZXIsIDEwMCk7XG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmluZEFsbChmbnM6IEFycmF5PHN0cmluZz4sIGNvbnRleHQ6IE9iamVjdCk6IHZvaWQge1xuICAgIGZucy5mb3JFYWNoKChmbikgPT4ge1xuICAgICAgICBpZiAoIWNvbnRleHRbZm5dKSB7IHJldHVybjsgfVxuICAgICAgICBjb250ZXh0W2ZuXSA9IGNvbnRleHRbZm5dLmJpbmQoY29udGV4dCk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgc3RyaW5nIGVuZHMgd2l0aCBhIHBhcnRpY3VsYXIgc3Vic3RyaW5nXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuZHNXaXRoKHN0cmluZzogc3RyaW5nLCBzdWZmaXg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdHJpbmcuaW5kZXhPZihzdWZmaXgsIHN0cmluZy5sZW5ndGggLSBzdWZmaXgubGVuZ3RoKSAhPT0gLTE7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIG9iamVjdCBieSBtYXBwaW5nIGFsbCB0aGUgdmFsdWVzIG9mIGFuIGV4aXN0aW5nIG9iamVjdCB3aGlsZVxuICogcHJlc2VydmluZyB0aGVpciBrZXlzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXBPYmplY3QoaW5wdXQ6IE9iamVjdCwgaXRlcmF0b3I6IEZ1bmN0aW9uLCBjb250ZXh0PzogT2JqZWN0KTogT2JqZWN0IHtcbiAgICBjb25zdCBvdXRwdXQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBpbnB1dCkge1xuICAgICAgICBvdXRwdXRba2V5XSA9IGl0ZXJhdG9yLmNhbGwoY29udGV4dCB8fCB0aGlzLCBpbnB1dFtrZXldLCBrZXksIGlucHV0KTtcbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gb2JqZWN0IGJ5IGZpbHRlcmluZyBvdXQgdmFsdWVzIG9mIGFuIGV4aXN0aW5nIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyT2JqZWN0KGlucHV0OiBPYmplY3QsIGl0ZXJhdG9yOiBGdW5jdGlvbiwgY29udGV4dD86IE9iamVjdCk6IE9iamVjdCB7XG4gICAgY29uc3Qgb3V0cHV0ID0ge307XG4gICAgZm9yIChjb25zdCBrZXkgaW4gaW5wdXQpIHtcbiAgICAgICAgaWYgKGl0ZXJhdG9yLmNhbGwoY29udGV4dCB8fCB0aGlzLCBpbnB1dFtrZXldLCBrZXksIGlucHV0KSkge1xuICAgICAgICAgICAgb3V0cHV0W2tleV0gPSBpbnB1dFtrZXldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG59XG5cbmltcG9ydCBkZWVwRXF1YWwgZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL2RlZXBfZXF1YWwnO1xuZXhwb3J0IHtkZWVwRXF1YWx9O1xuXG4vKipcbiAqIERlZXBseSBjbG9uZXMgdHdvIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb25lPFQ+KGlucHV0OiBUKTogVCB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAgIHJldHVybiBpbnB1dC5tYXAoY2xvbmUpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JyAmJiBpbnB1dCkge1xuICAgICAgICByZXR1cm4gKChtYXBPYmplY3QoaW5wdXQsIGNsb25lKTogYW55KTogVCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0d28gYXJyYXlzIGhhdmUgYXQgbGVhc3Qgb25lIGNvbW1vbiBlbGVtZW50LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcnJheXNJbnRlcnNlY3Q8VD4oYTogQXJyYXk8VD4sIGI6IEFycmF5PFQ+KTogYm9vbGVhbiB7XG4gICAgZm9yIChsZXQgbCA9IDA7IGwgPCBhLmxlbmd0aDsgbCsrKSB7XG4gICAgICAgIGlmIChiLmluZGV4T2YoYVtsXSkgPj0gMCkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBQcmludCBhIHdhcm5pbmcgbWVzc2FnZSB0byB0aGUgY29uc29sZSBhbmQgZW5zdXJlIGR1cGxpY2F0ZSB3YXJuaW5nIG1lc3NhZ2VzXG4gKiBhcmUgbm90IHByaW50ZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3Qgd2Fybk9uY2VIaXN0b3J5OiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn0gPSB7fTtcblxuZXhwb3J0IGZ1bmN0aW9uIHdhcm5PbmNlKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghd2Fybk9uY2VIaXN0b3J5W21lc3NhZ2VdKSB7XG4gICAgICAgIC8vIGNvbnNvbGUgaXNuJ3QgZGVmaW5lZCBpbiBzb21lIFdlYldvcmtlcnMsIHNlZSAjMjU1OFxuICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09IFwidW5kZWZpbmVkXCIpIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbiAgICAgICAgd2Fybk9uY2VIaXN0b3J5W21lc3NhZ2VdID0gdHJ1ZTtcbiAgICB9XG59XG5cbi8qKlxuICogSW5kaWNhdGVzIGlmIHRoZSBwcm92aWRlZCBQb2ludHMgYXJlIGluIGEgY291bnRlciBjbG9ja3dpc2UgKHRydWUpIG9yIGNsb2Nrd2lzZSAoZmFsc2UpIG9yZGVyXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm5zIHRydWUgZm9yIGEgY291bnRlciBjbG9ja3dpc2Ugc2V0IG9mIHBvaW50c1xuICovXG4vLyBodHRwOi8vYnJ5Y2Vib2UuY29tLzIwMDYvMTAvMjMvbGluZS1zZWdtZW50LWludGVyc2VjdGlvbi1hbGdvcml0aG0vXG5leHBvcnQgZnVuY3Rpb24gaXNDb3VudGVyQ2xvY2t3aXNlKGE6IFBvaW50LCBiOiBQb2ludCwgYzogUG9pbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKGMueSAtIGEueSkgKiAoYi54IC0gYS54KSA+IChiLnkgLSBhLnkpICogKGMueCAtIGEueCk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgc2lnbmVkIGFyZWEgZm9yIHRoZSBwb2x5Z29uIHJpbmcuICBQb3N0aXZlIGFyZWFzIGFyZSBleHRlcmlvciByaW5ncyBhbmRcbiAqIGhhdmUgYSBjbG9ja3dpc2Ugd2luZGluZy4gIE5lZ2F0aXZlIGFyZWFzIGFyZSBpbnRlcmlvciByaW5ncyBhbmQgaGF2ZSBhIGNvdW50ZXIgY2xvY2t3aXNlXG4gKiBvcmRlcmluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHJpbmcgRXh0ZXJpb3Igb3IgaW50ZXJpb3IgcmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlU2lnbmVkQXJlYShyaW5nOiBBcnJheTxQb2ludD4pOiBudW1iZXIge1xuICAgIGxldCBzdW0gPSAwO1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSByaW5nLmxlbmd0aCwgaiA9IGxlbiAtIDEsIHAxLCBwMjsgaSA8IGxlbjsgaiA9IGkrKykge1xuICAgICAgICBwMSA9IHJpbmdbaV07XG4gICAgICAgIHAyID0gcmluZ1tqXTtcbiAgICAgICAgc3VtICs9IChwMi54IC0gcDEueCkgKiAocDEueSArIHAyLnkpO1xuICAgIH1cbiAgICByZXR1cm4gc3VtO1xufVxuXG4vKipcbiAqIERldGVjdHMgY2xvc2VkIHBvbHlnb25zLCBmaXJzdCArIGxhc3QgcG9pbnQgYXJlIGVxdWFsXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBwb2ludHMgYXJyYXkgb2YgcG9pbnRzXG4gKiBAcmV0dXJuIHRydWUgaWYgdGhlIHBvaW50cyBhcmUgYSBjbG9zZWQgcG9seWdvblxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDbG9zZWRQb2x5Z29uKHBvaW50czogQXJyYXk8UG9pbnQ+KTogYm9vbGVhbiB7XG4gICAgLy8gSWYgaXQgaXMgMiBwb2ludHMgdGhhdCBhcmUgdGhlIHNhbWUgdGhlbiBpdCBpcyBhIHBvaW50XG4gICAgLy8gSWYgaXQgaXMgMyBwb2ludHMgd2l0aCBzdGFydCBhbmQgZW5kIHRoZSBzYW1lIHRoZW4gaXQgaXMgYSBsaW5lXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCA0KVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBwMSA9IHBvaW50c1swXTtcbiAgICBjb25zdCBwMiA9IHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV07XG5cbiAgICBpZiAoTWF0aC5hYnMocDEueCAtIHAyLngpID4gMCB8fFxuICAgICAgICBNYXRoLmFicyhwMS55IC0gcDIueSkgPiAwKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBwb2x5Z29uIHNpbXBsaWZpY2F0aW9uIGNhbiBwcm9kdWNlIHBvbHlnb25zIHdpdGggemVybyBhcmVhIGFuZCBtb3JlIHRoYW4gMyBwb2ludHNcbiAgICByZXR1cm4gTWF0aC5hYnMoY2FsY3VsYXRlU2lnbmVkQXJlYShwb2ludHMpKSA+IDAuMDE7XG59XG5cbi8qKlxuICogQ29udmVydHMgc3BoZXJpY2FsIGNvb3JkaW5hdGVzIHRvIGNhcnRlc2lhbiBjb29yZGluYXRlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHNwaGVyaWNhbCBTcGhlcmljYWwgY29vcmRpbmF0ZXMsIGluIFtyYWRpYWwsIGF6aW11dGhhbCwgcG9sYXJdXG4gKiBAcmV0dXJuIGNhcnRlc2lhbiBjb29yZGluYXRlcyBpbiBbeCwgeSwgel1cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3BoZXJpY2FsVG9DYXJ0ZXNpYW4oW3IsIGF6aW11dGhhbCwgcG9sYXJdOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pOiB7eDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlcn0ge1xuICAgIC8vIFdlIGFic3RyYWN0IFwibm9ydGhcIi9cInVwXCIgKGNvbXBhc3Mtd2lzZSkgdG8gYmUgMMOCwrAgd2hlbiByZWFsbHkgdGhpcyBpcyA5MMOCwrAgKMOPwoAvMik6XG4gICAgLy8gY29ycmVjdCBmb3IgdGhhdCBoZXJlXG4gICAgYXppbXV0aGFsICs9IDkwO1xuXG4gICAgLy8gQ29udmVydCBhemltdXRoYWwgYW5kIHBvbGFyIGFuZ2xlcyB0byByYWRpYW5zXG4gICAgYXppbXV0aGFsICo9IE1hdGguUEkgLyAxODA7XG4gICAgcG9sYXIgKj0gTWF0aC5QSSAvIDE4MDtcblxuICAgIHJldHVybiB7XG4gICAgICAgIHg6IHIgKiBNYXRoLmNvcyhhemltdXRoYWwpICogTWF0aC5zaW4ocG9sYXIpLFxuICAgICAgICB5OiByICogTWF0aC5zaW4oYXppbXV0aGFsKSAqIE1hdGguc2luKHBvbGFyKSxcbiAgICAgICAgejogciAqIE1hdGguY29zKHBvbGFyKVxuICAgIH07XG59XG5cbi8qIGdsb2JhbCBzZWxmLCBXb3JrZXJHbG9iYWxTY29wZSAqL1xuLyoqXG4gKiAgUmV0dW5zIHRydWUgaWYgdGhlIHdoZW4gcnVuIGluIHRoZSB3ZWItd29ya2VyIGNvbnRleHQuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNXb3JrZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgZGF0YSBmcm9tICdDYWNoZS1Db250cm9sJyBoZWFkZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gY2FjaGVDb250cm9sIFZhbHVlIG9mICdDYWNoZS1Db250cm9sJyBoZWFkZXJcbiAqIEByZXR1cm4gb2JqZWN0IGNvbnRhaW5pbmcgcGFyc2VkIGhlYWRlciBpbmZvLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNhY2hlQ29udHJvbChjYWNoZUNvbnRyb2w6IHN0cmluZyk6IE9iamVjdCB7XG4gICAgLy8gVGFrZW4gZnJvbSBbV3JlY2tdKGh0dHBzOi8vZ2l0aHViLmNvbS9oYXBpanMvd3JlY2spXG4gICAgY29uc3QgcmUgPSAvKD86XnwoPzpcXHMqXFwsXFxzKikpKFteXFx4MDAtXFx4MjBcXChcXCk8PkBcXCw7XFw6XFxcXFwiXFwvXFxbXFxdXFw/XFw9XFx7XFx9XFx4N0ZdKykoPzpcXD0oPzooW15cXHgwMC1cXHgyMFxcKFxcKTw+QFxcLDtcXDpcXFxcXCJcXC9cXFtcXF1cXD9cXD1cXHtcXH1cXHg3Rl0rKXwoPzpcXFwiKCg/OlteXCJcXFxcXXxcXFxcLikqKVxcXCIpKSk/L2c7XG5cbiAgICBjb25zdCBoZWFkZXIgPSB7fTtcbiAgICBjYWNoZUNvbnRyb2wucmVwbGFjZShyZSwgKCQwLCAkMSwgJDIsICQzKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gJDIgfHwgJDM7XG4gICAgICAgIGhlYWRlclskMV0gPSB2YWx1ZSA/IHZhbHVlLnRvTG93ZXJDYXNlKCkgOiB0cnVlO1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfSk7XG5cbiAgICBpZiAoaGVhZGVyWydtYXgtYWdlJ10pIHtcbiAgICAgICAgY29uc3QgbWF4QWdlID0gcGFyc2VJbnQoaGVhZGVyWydtYXgtYWdlJ10sIDEwKTtcbiAgICAgICAgaWYgKGlzTmFOKG1heEFnZSkpIGRlbGV0ZSBoZWFkZXJbJ21heC1hZ2UnXTtcbiAgICAgICAgZWxzZSBoZWFkZXJbJ21heC1hZ2UnXSA9IG1heEFnZTtcbiAgICB9XG5cbiAgICByZXR1cm4gaGVhZGVyO1xufVxuXG5sZXQgX2lzU2FmYXJpID0gbnVsbDtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgd2hlbiBydW4gaW4gV2ViS2l0IGRlcml2ZWQgYnJvd3NlcnMuXG4gKiBUaGlzIGlzIHVzZWQgYXMgYSB3b3JrYXJvdW5kIGZvciBhIG1lbW9yeSBsZWFrIGluIFNhZmFyaSBjYXVzZWQgYnkgdXNpbmcgVHJhbnNmZXJhYmxlIG9iamVjdHMgdG9cbiAqIHRyYW5zZmVyIGRhdGEgYmV0d2VlbiBXZWJXb3JrZXJzIGFuZCB0aGUgbWFpbiB0aHJlYWQuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvODc3MVxuICpcbiAqIFRoaXMgc2hvdWxkIGJlIHJlbW92ZWQgb25jZSB0aGUgdW5kZXJseWluZyBTYWZhcmkgaXNzdWUgaXMgZml4ZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBzY29wZSB7V2luZG93T3JXb3JrZXJHbG9iYWxTY29wZX0gU2luY2UgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJvdGggb24gdGhlIG1haW4gdGhyZWFkIGFuZCBXZWJXb3JrZXIgY29udGV4dCxcbiAqICAgICAgbGV0IHRoZSBjYWxsaW5nIHNjb3BlIHBhc3MgaW4gdGhlIGdsb2JhbCBzY29wZSBvYmplY3QuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2FmYXJpKHNjb3BlOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoX2lzU2FmYXJpID09IG51bGwpIHtcbiAgICAgICAgY29uc3QgdXNlckFnZW50ID0gc2NvcGUubmF2aWdhdG9yID8gc2NvcGUubmF2aWdhdG9yLnVzZXJBZ2VudCA6IG51bGw7XG4gICAgICAgIF9pc1NhZmFyaSA9ICEhc2NvcGUuc2FmYXJpIHx8XG4gICAgICAgICEhKHVzZXJBZ2VudCAmJiAoL1xcYihpUGFkfGlQaG9uZXxpUG9kKVxcYi8udGVzdCh1c2VyQWdlbnQpIHx8ICghIXVzZXJBZ2VudC5tYXRjaCgnU2FmYXJpJykgJiYgIXVzZXJBZ2VudC5tYXRjaCgnQ2hyb21lJykpKSk7XG4gICAgfVxuICAgIHJldHVybiBfaXNTYWZhcmk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdG9yYWdlQXZhaWxhYmxlKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2UgPSB3aW5kb3dbdHlwZV07XG4gICAgICAgIHN0b3JhZ2Uuc2V0SXRlbSgnX21hcGJveF90ZXN0XycsIDEpO1xuICAgICAgICBzdG9yYWdlLnJlbW92ZUl0ZW0oJ19tYXBib3hfdGVzdF8nKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG4vLyBUaGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIGZyb20gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1dpbmRvd0Jhc2U2NC9CYXNlNjRfZW5jb2RpbmdfYW5kX2RlY29kaW5nI1RoZV9Vbmljb2RlX1Byb2JsZW1cbi8vVW5pY29kZSBjb21wbGlhbnQgYmFzZTY0IGVuY29kZXIgZm9yIHN0cmluZ3NcbmV4cG9ydCBmdW5jdGlvbiBiNjRFbmNvZGVVbmljb2RlKHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5idG9hKFxuICAgICAgICBlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC8lKFswLTlBLUZdezJ9KS9nLFxuICAgICAgICAgICAgKG1hdGNoLCBwMSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKE51bWJlcignMHgnICsgcDEpKTsgLy9lc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAgICAgICB9XG4gICAgICAgIClcbiAgICApO1xufVxuXG4vLyBVbmljb2RlIGNvbXBsaWFudCBkZWNvZGVyIGZvciBiYXNlNjQtZW5jb2RlZCBzdHJpbmdzXG5leHBvcnQgZnVuY3Rpb24gYjY0RGVjb2RlVW5pY29kZShzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQod2luZG93LmF0b2Ioc3RyKS5zcGxpdCgnJykubWFwKChjKSA9PiB7XG4gICAgICAgIHJldHVybiAnJScgKyAoJzAwJyArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC0yKTsgLy9lc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgfSkuam9pbignJykpO1xufVxuIiwiLy8gQGZsb3cgc3RyaWN0XG5cbmltcG9ydCB3aW5kb3cgZnJvbSAnLi93aW5kb3cnO1xuaW1wb3J0IHR5cGUge0NhbmNlbGFibGV9IGZyb20gJy4uL3R5cGVzL2NhbmNlbGFibGUnO1xuXG5jb25zdCBub3cgPSB3aW5kb3cucGVyZm9ybWFuY2UgJiYgd2luZG93LnBlcmZvcm1hbmNlLm5vdyA/XG4gICAgd2luZG93LnBlcmZvcm1hbmNlLm5vdy5iaW5kKHdpbmRvdy5wZXJmb3JtYW5jZSkgOlxuICAgIERhdGUubm93LmJpbmQoRGF0ZSk7XG5cbmNvbnN0IHJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcbiAgICB3aW5kb3cubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8XG4gICAgd2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSB8fFxuICAgIHdpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZTtcblxuY29uc3QgY2FuY2VsID0gd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lIHx8XG4gICAgd2luZG93Lm1vekNhbmNlbEFuaW1hdGlvbkZyYW1lIHx8XG4gICAgd2luZG93LndlYmtpdENhbmNlbEFuaW1hdGlvbkZyYW1lIHx8XG4gICAgd2luZG93Lm1zQ2FuY2VsQW5pbWF0aW9uRnJhbWU7XG5cbmxldCBsaW5rRWw7XG5cbmxldCByZWR1Y2VkTW90aW9uUXVlcnk6IE1lZGlhUXVlcnlMaXN0O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IGV4cG9ydGVkID0ge1xuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIGEgZnVuY3Rpb24gdGhhdCBvdXRwdXRzIG1pbGxpc2Vjb25kczogZWl0aGVyIHBlcmZvcm1hbmNlLm5vdygpXG4gICAgICogb3IgYSBmYWxsYmFjayB0byBEYXRlLm5vdygpXG4gICAgICovXG4gICAgbm93LFxuXG4gICAgZnJhbWUoZm46IChwYWludFN0YXJ0VGltZXN0YW1wOiBudW1iZXIpID0+IHZvaWQpOiBDYW5jZWxhYmxlIHtcbiAgICAgICAgY29uc3QgZnJhbWUgPSByYWYoZm4pO1xuICAgICAgICByZXR1cm4ge2NhbmNlbDogKCkgPT4gY2FuY2VsKGZyYW1lKX07XG4gICAgfSxcblxuICAgIGdldEltYWdlRGF0YShpbWc6IENhbnZhc0ltYWdlU291cmNlLCBwYWRkaW5nPzogbnVtYmVyID0gMCk6IEltYWdlRGF0YSB7XG4gICAgICAgIGNvbnN0IGNhbnZhcyA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIGNyZWF0ZSBjYW52YXMgMmQgY29udGV4dCcpO1xuICAgICAgICB9XG4gICAgICAgIGNhbnZhcy53aWR0aCA9IGltZy53aWR0aDtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGltZy5oZWlnaHQ7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKGltZywgMCwgMCwgaW1nLndpZHRoLCBpbWcuaGVpZ2h0KTtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQuZ2V0SW1hZ2VEYXRhKC1wYWRkaW5nLCAtcGFkZGluZywgaW1nLndpZHRoICsgMiAqIHBhZGRpbmcsIGltZy5oZWlnaHQgKyAyICogcGFkZGluZyk7XG4gICAgfSxcblxuICAgIHJlc29sdmVVUkwocGF0aDogc3RyaW5nKSB7XG4gICAgICAgIGlmICghbGlua0VsKSBsaW5rRWwgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICBsaW5rRWwuaHJlZiA9IHBhdGg7XG4gICAgICAgIHJldHVybiBsaW5rRWwuaHJlZjtcbiAgICB9LFxuXG4gICAgaGFyZHdhcmVDb25jdXJyZW5jeTogd2luZG93Lm5hdmlnYXRvci5oYXJkd2FyZUNvbmN1cnJlbmN5IHx8IDQsXG5cbiAgICBnZXQgZGV2aWNlUGl4ZWxSYXRpbygpIHsgcmV0dXJuIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvOyB9LFxuICAgIGdldCBwcmVmZXJzUmVkdWNlZE1vdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF3aW5kb3cubWF0Y2hNZWRpYSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvL0xhemlseSBpbml0aWFsaXplIG1lZGlhIHF1ZXJ5XG4gICAgICAgIGlmIChyZWR1Y2VkTW90aW9uUXVlcnkgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmVkdWNlZE1vdGlvblF1ZXJ5ID0gd2luZG93Lm1hdGNoTWVkaWEoJyhwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlZHVjZWRNb3Rpb25RdWVyeS5tYXRjaGVzO1xuICAgIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBleHBvcnRlZDtcbiIsIi8vIEBmbG93IHN0cmljdFxuXG50eXBlIENvbmZpZyA9IHt8XG4gIEFQSV9VUkw6IHN0cmluZyxcbiAgRVZFTlRTX1VSTDogP3N0cmluZyxcbiAgRkVFREJBQ0tfVVJMOiBzdHJpbmcsXG4gIFJFUVVJUkVfQUNDRVNTX1RPS0VOOiBib29sZWFuLFxuICBBQ0NFU1NfVE9LRU46ID9zdHJpbmcsXG4gIE1BWF9QQVJBTExFTF9JTUFHRV9SRVFVRVNUUzogbnVtYmVyXG58fTtcblxuY29uc3QgY29uZmlnOiBDb25maWcgPSB7XG4gICAgQVBJX1VSTDogJ2h0dHBzOi8vYXBpLm1hcGJveC5jb20nLFxuICAgIGdldCBFVkVOVFNfVVJMKCkge1xuICAgICAgICBpZiAoIXRoaXMuQVBJX1VSTCkgeyByZXR1cm4gbnVsbDsgfVxuICAgICAgICBpZiAodGhpcy5BUElfVVJMLmluZGV4T2YoJ2h0dHBzOi8vYXBpLm1hcGJveC5jbicpID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2h0dHBzOi8vZXZlbnRzLm1hcGJveC5jbi9ldmVudHMvdjInO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuQVBJX1VSTC5pbmRleE9mKCdodHRwczovL2FwaS5tYXBib3guY29tJykgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAnaHR0cHM6Ly9ldmVudHMubWFwYm94LmNvbS9ldmVudHMvdjInO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIEZFRURCQUNLX1VSTDogJ2h0dHBzOi8vYXBwcy5tYXBib3guY29tL2ZlZWRiYWNrJyxcbiAgICBSRVFVSVJFX0FDQ0VTU19UT0tFTjogdHJ1ZSxcbiAgICBBQ0NFU1NfVE9LRU46IG51bGwsXG4gICAgTUFYX1BBUkFMTEVMX0lNQUdFX1JFUVVFU1RTOiAxNlxufTtcblxuZXhwb3J0IGRlZmF1bHQgY29uZmlnO1xuIiwiLy8gQGZsb3cgc3RyaWN0XG5cbmltcG9ydCB3aW5kb3cgZnJvbSAnLi93aW5kb3cnO1xuXG5jb25zdCBleHBvcnRlZCA9IHtcbiAgICBzdXBwb3J0ZWQ6IGZhbHNlLFxuICAgIHRlc3RTdXBwb3J0XG59O1xuXG5leHBvcnQgZGVmYXVsdCBleHBvcnRlZDtcblxubGV0IGdsRm9yVGVzdGluZztcbmxldCB3ZWJwQ2hlY2tDb21wbGV0ZSA9IGZhbHNlO1xubGV0IHdlYnBJbWdUZXN0O1xubGV0IHdlYnBJbWdUZXN0T25sb2FkQ29tcGxldGUgPSBmYWxzZTtcblxuaWYgKHdpbmRvdy5kb2N1bWVudCkge1xuICAgIHdlYnBJbWdUZXN0ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuICAgIHdlYnBJbWdUZXN0Lm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoZ2xGb3JUZXN0aW5nKSB0ZXN0V2VicFRleHR1cmVVcGxvYWQoZ2xGb3JUZXN0aW5nKTtcbiAgICAgICAgZ2xGb3JUZXN0aW5nID0gbnVsbDtcbiAgICAgICAgd2VicEltZ1Rlc3RPbmxvYWRDb21wbGV0ZSA9IHRydWU7XG4gICAgfTtcbiAgICB3ZWJwSW1nVGVzdC5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHdlYnBDaGVja0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgZ2xGb3JUZXN0aW5nID0gbnVsbDtcbiAgICB9O1xuICAgIHdlYnBJbWdUZXN0LnNyYyA9ICdkYXRhOmltYWdlL3dlYnA7YmFzZTY0LFVrbEdSaDRBQUFCWFJVSlFWbEE0VEJFQUFBQXZBUUFBQUFmUS8vNzN2LytCaU9oL0FBQT0nO1xufVxuXG5mdW5jdGlvbiB0ZXN0U3VwcG9ydChnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0KSB7XG4gICAgaWYgKHdlYnBDaGVja0NvbXBsZXRlIHx8ICF3ZWJwSW1nVGVzdCkgcmV0dXJuO1xuXG4gICAgLy8gSFRNTEltYWdlRWxlbWVudC5jb21wbGV0ZSBpcyBzZXQgd2hlbiBhbiBpbWFnZSBpcyBkb25lIGxvYWRpbmcgaXQncyBzb3VyY2VcbiAgICAvLyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIGxvYWQgd2FzIHN1Y2Nlc3NmdWwgb3Igbm90LlxuICAgIC8vIEl0J3MgcG9zc2libGUgZm9yIGFuIGVycm9yIHRvIHNldCBIVE1MSW1hZ2VFbGVtZW50LmNvbXBsZXRlIHRvIHRydWUgd2hpY2ggd291bGQgdHJpZ2dlclxuICAgIC8vIHRlc3RXZWJwVGV4dHVyZVVwbG9hZCBhbmQgbWlzdGFrZW5seSBzZXQgZXhwb3J0ZWQuc3VwcG9ydGVkIHRvIHRydWUgaW4gYnJvd3NlcnMgd2hpY2ggZG9uJ3Qgc3VwcG9ydCB3ZWJwXG4gICAgLy8gVG8gYXZvaWQgdGhpcywgd2Ugc2V0IGEgZmxhZyBpbiB0aGUgaW1hZ2UncyBvbmxvYWQgaGFuZGxlciBhbmQgb25seSBjYWxsIHRlc3RXZWJwVGV4dHVyZVVwbG9hZFxuICAgIC8vIGFmdGVyIGEgc3VjY2Vzc2Z1bCBpbWFnZSBsb2FkIGV2ZW50LlxuICAgIGlmICh3ZWJwSW1nVGVzdE9ubG9hZENvbXBsZXRlKSB7XG4gICAgICAgIHRlc3RXZWJwVGV4dHVyZVVwbG9hZChnbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZ2xGb3JUZXN0aW5nID0gZ2w7XG5cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHRlc3RXZWJwVGV4dHVyZVVwbG9hZChnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0KSB7XG4gICAgLy8gRWRnZSAxOCBzdXBwb3J0cyBXZWJQIGJ1dCBub3QgdXBsb2FkaW5nIGEgV2ViUCBpbWFnZSB0byBhIGdsIHRleHR1cmVcbiAgICAvLyBUZXN0IHN1cHBvcnQgZm9yIHRoaXMgYmVmb3JlIGFsbG93aW5nIFdlYlAgaW1hZ2VzLlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy83NjcxXG4gICAgY29uc3QgdGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcbiAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTtcblxuICAgIHRyeSB7XG4gICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgd2VicEltZ1Rlc3QpO1xuXG4gICAgICAgIC8vIFRoZSBlcnJvciBkb2VzIG5vdCBnZXQgdHJpZ2dlcmVkIGluIEVkZ2UgaWYgdGhlIGNvbnRleHQgaXMgbG9zdFxuICAgICAgICBpZiAoZ2wuaXNDb250ZXh0TG9zdCgpKSByZXR1cm47XG5cbiAgICAgICAgZXhwb3J0ZWQuc3VwcG9ydGVkID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIENhdGNoIFwiVW5zcGVjaWZpZWQgRXJyb3IuXCIgaW4gRWRnZSAxOC5cbiAgICB9XG5cbiAgICBnbC5kZWxldGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgd2VicENoZWNrQ29tcGxldGUgPSB0cnVlO1xufVxuIiwiLy8gQGZsb3dcblxuLyoqKioqIFNUQVJUIFdBUk5JTkcgLSBJRiBZT1UgVVNFIFRISVMgQ09ERSBXSVRIIE1BUEJPWCBNQVBQSU5HIEFQSVMsIFJFTU9WQUwgT1JcbiogTU9ESUZJQ0FUSU9OIE9GIFRIRSBGT0xMT1dJTkcgQ09ERSBWSU9MQVRFUyBUSEUgTUFQQk9YIFRFUk1TIE9GIFNFUlZJQ0UgICoqKioqKlxuKiBUaGUgZm9sbG93aW5nIGNvZGUgaXMgdXNlZCB0byBhY2Nlc3MgTWFwYm94J3MgTWFwcGluZyBBUElzLiBSZW1vdmFsIG9yIG1vZGlmaWNhdGlvblxuKiBvZiB0aGlzIGNvZGUgd2hlbiB1c2VkIHdpdGggTWFwYm94J3MgTWFwcGluZyBBUElzIGNhbiByZXN1bHQgaW4gaGlnaGVyIGZlZXMgYW5kL29yXG4qIHRlcm1pbmF0aW9uIG9mIHlvdXIgYWNjb3VudCB3aXRoIE1hcGJveC5cbipcbiogVW5kZXIgdGhlIE1hcGJveCBUZXJtcyBvZiBTZXJ2aWNlLCB5b3UgbWF5IG5vdCB1c2UgdGhpcyBjb2RlIHRvIGFjY2VzcyBNYXBib3hcbiogTWFwcGluZyBBUElzIG90aGVyIHRoYW4gdGhyb3VnaCBNYXBib3ggU0RLcy5cbipcbiogVGhlIE1hcHBpbmcgQVBJcyBkb2N1bWVudGF0aW9uIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL2RvY3MubWFwYm94LmNvbS9hcGkvbWFwcy8jbWFwc1xuKiBhbmQgdGhlIE1hcGJveCBUZXJtcyBvZiBTZXJ2aWNlIGFyZSBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cubWFwYm94LmNvbS90b3MvXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbnR5cGUgU2t1VG9rZW5PYmplY3QgPSB7fFxuICAgIHRva2VuOiBzdHJpbmcsXG4gICAgdG9rZW5FeHBpcmVzQXQ6IG51bWJlclxufH07XG5cbmNvbnN0IFNLVV9JRCA9ICcwMSc7XG5cbmZ1bmN0aW9uIGNyZWF0ZVNrdVRva2VuKCk6IFNrdVRva2VuT2JqZWN0IHtcbiAgICAvLyBTS1VfSUQgYW5kIFRPS0VOX1ZFUlNJT04gYXJlIHNwZWNpZmllZCBieSBhbiBpbnRlcm5hbCBzY2hlbWEgYW5kIHNob3VsZCBub3QgY2hhbmdlXG4gICAgY29uc3QgVE9LRU5fVkVSU0lPTiA9ICcxJztcbiAgICBjb25zdCBiYXNlNjJjaGFycyA9ICcwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWic7XG4gICAgLy8gc2Vzc2lvblJhbmRvbWl6ZXIgaXMgYSByYW5kb21pemVkIDEwLWRpZ2l0IGJhc2UtNjIgbnVtYmVyXG4gICAgbGV0IHNlc3Npb25SYW5kb21pemVyID0gJyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4gICAgICAgIHNlc3Npb25SYW5kb21pemVyICs9IGJhc2U2MmNoYXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDYyKV07XG4gICAgfVxuICAgIGNvbnN0IGV4cGlyYXRpb24gPSAxMiAqIDYwICogNjAgKiAxMDAwOyAvLyAxMiBob3Vyc1xuICAgIGNvbnN0IHRva2VuID0gW1RPS0VOX1ZFUlNJT04sIFNLVV9JRCwgc2Vzc2lvblJhbmRvbWl6ZXJdLmpvaW4oJycpO1xuICAgIGNvbnN0IHRva2VuRXhwaXJlc0F0ID0gRGF0ZS5ub3coKSArIGV4cGlyYXRpb247XG5cbiAgICByZXR1cm4ge3Rva2VuLCB0b2tlbkV4cGlyZXNBdH07XG59XG5cbmV4cG9ydCB7Y3JlYXRlU2t1VG9rZW4sIFNLVV9JRH07XG5cbi8qKioqKiBFTkQgV0FSTklORyAtIFJFTU9WQUwgT1IgTU9ESUZJQ0FUSU9OIE9GIFRIRVxuUFJFQ0VESU5HIENPREUgVklPTEFURVMgVEhFIE1BUEJPWCBURVJNUyBPRiBTRVJWSUNFICAqKioqKiovXG4iLCIvLyBAZmxvd1xuXG4vKioqKiogU1RBUlQgV0FSTklORyAtIElGIFlPVSBVU0UgVEhJUyBDT0RFIFdJVEggTUFQQk9YIE1BUFBJTkcgQVBJUywgUkVNT1ZBTCBPUlxuKiBNT0RJRklDQVRJT04gT0YgVEhFIEZPTExPV0lORyBDT0RFIFZJT0xBVEVTIFRIRSBNQVBCT1ggVEVSTVMgT0YgU0VSVklDRSAgKioqKioqXG4qIFRoZSBmb2xsb3dpbmcgY29kZSBpcyB1c2VkIHRvIGFjY2VzcyBNYXBib3gncyBNYXBwaW5nIEFQSXMuIFJlbW92YWwgb3IgbW9kaWZpY2F0aW9uXG4qIG9mIHRoaXMgY29kZSB3aGVuIHVzZWQgd2l0aCBNYXBib3gncyBNYXBwaW5nIEFQSXMgY2FuIHJlc3VsdCBpbiBoaWdoZXIgZmVlcyBhbmQvb3JcbiogdGVybWluYXRpb24gb2YgeW91ciBhY2NvdW50IHdpdGggTWFwYm94LlxuKlxuKiBVbmRlciB0aGUgTWFwYm94IFRlcm1zIG9mIFNlcnZpY2UsIHlvdSBtYXkgbm90IHVzZSB0aGlzIGNvZGUgdG8gYWNjZXNzIE1hcGJveFxuKiBNYXBwaW5nIEFQSXMgb3RoZXIgdGhhbiB0aHJvdWdoIE1hcGJveCBTREtzLlxuKlxuKiBUaGUgTWFwcGluZyBBUElzIGRvY3VtZW50YXRpb24gaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vZG9jcy5tYXBib3guY29tL2FwaS9tYXBzLyNtYXBzXG4qIGFuZCB0aGUgTWFwYm94IFRlcm1zIG9mIFNlcnZpY2UgYXJlIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5tYXBib3guY29tL3Rvcy9cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuaW1wb3J0IGNvbmZpZyBmcm9tICcuL2NvbmZpZyc7XG5cbmltcG9ydCBicm93c2VyIGZyb20gJy4vYnJvd3Nlcic7XG5pbXBvcnQgd2luZG93IGZyb20gJy4vd2luZG93JztcbmltcG9ydCB3ZWJwU3VwcG9ydGVkIGZyb20gJy4vd2VicF9zdXBwb3J0ZWQnO1xuaW1wb3J0IHtjcmVhdGVTa3VUb2tlbiwgU0tVX0lEfSBmcm9tICcuL3NrdV90b2tlbic7XG5pbXBvcnQge3ZlcnNpb24gYXMgc2RrVmVyc2lvbn0gZnJvbSAnLi4vLi4vcGFja2FnZS5qc29uJztcbmltcG9ydCB7dXVpZCwgdmFsaWRhdGVVdWlkLCBzdG9yYWdlQXZhaWxhYmxlLCBiNjREZWNvZGVVbmljb2RlLCBiNjRFbmNvZGVVbmljb2RlLCB3YXJuT25jZSwgZXh0ZW5kfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHtwb3N0RGF0YSwgUmVzb3VyY2VUeXBlfSBmcm9tICcuL2FqYXgnO1xuXG5pbXBvcnQgdHlwZSB7UmVxdWVzdFBhcmFtZXRlcnN9IGZyb20gJy4vYWpheCc7XG5pbXBvcnQgdHlwZSB7Q2FuY2VsYWJsZX0gZnJvbSAnLi4vdHlwZXMvY2FuY2VsYWJsZSc7XG5pbXBvcnQgdHlwZSB7VGlsZUpTT059IGZyb20gJy4uL3R5cGVzL3RpbGVqc29uJztcblxudHlwZSBSZXNvdXJjZVR5cGVFbnVtID0gJEtleXM8dHlwZW9mIFJlc291cmNlVHlwZT47XG5leHBvcnQgdHlwZSBSZXF1ZXN0VHJhbnNmb3JtRnVuY3Rpb24gPSAodXJsOiBzdHJpbmcsIHJlc291cmNlVHlwZT86IFJlc291cmNlVHlwZUVudW0pID0+IFJlcXVlc3RQYXJhbWV0ZXJzO1xuXG50eXBlIFVybE9iamVjdCA9IHt8XG4gICAgcHJvdG9jb2w6IHN0cmluZyxcbiAgICBhdXRob3JpdHk6IHN0cmluZyxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgcGFyYW1zOiBBcnJheTxzdHJpbmc+XG58fTtcblxuZXhwb3J0IGNsYXNzIFJlcXVlc3RNYW5hZ2VyIHtcbiAgICBfc2t1VG9rZW46IHN0cmluZztcbiAgICBfc2t1VG9rZW5FeHBpcmVzQXQ6IG51bWJlcjtcbiAgICBfdHJhbnNmb3JtUmVxdWVzdEZuOiA/UmVxdWVzdFRyYW5zZm9ybUZ1bmN0aW9uO1xuICAgIF9jdXN0b21BY2Nlc3NUb2tlbjogP3N0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKHRyYW5zZm9ybVJlcXVlc3RGbj86IFJlcXVlc3RUcmFuc2Zvcm1GdW5jdGlvbiwgY3VzdG9tQWNjZXNzVG9rZW4/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fdHJhbnNmb3JtUmVxdWVzdEZuID0gdHJhbnNmb3JtUmVxdWVzdEZuO1xuICAgICAgICB0aGlzLl9jdXN0b21BY2Nlc3NUb2tlbiA9IGN1c3RvbUFjY2Vzc1Rva2VuO1xuICAgICAgICB0aGlzLl9jcmVhdGVTa3VUb2tlbigpO1xuICAgIH1cblxuICAgIF9jcmVhdGVTa3VUb2tlbigpIHtcbiAgICAgICAgY29uc3Qgc2t1VG9rZW4gPSBjcmVhdGVTa3VUb2tlbigpO1xuICAgICAgICB0aGlzLl9za3VUb2tlbiA9IHNrdVRva2VuLnRva2VuO1xuICAgICAgICB0aGlzLl9za3VUb2tlbkV4cGlyZXNBdCA9IHNrdVRva2VuLnRva2VuRXhwaXJlc0F0O1xuICAgIH1cblxuICAgIF9pc1NrdVRva2VuRXhwaXJlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIERhdGUubm93KCkgPiB0aGlzLl9za3VUb2tlbkV4cGlyZXNBdDtcbiAgICB9XG5cbiAgICB0cmFuc2Zvcm1SZXF1ZXN0KHVybDogc3RyaW5nLCB0eXBlOiBSZXNvdXJjZVR5cGVFbnVtKSB7XG4gICAgICAgIGlmICh0aGlzLl90cmFuc2Zvcm1SZXF1ZXN0Rm4pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc2Zvcm1SZXF1ZXN0Rm4odXJsLCB0eXBlKSB8fCB7dXJsfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7dXJsfTtcbiAgICB9XG5cbiAgICBub3JtYWxpemVTdHlsZVVSTCh1cmw6IHN0cmluZywgYWNjZXNzVG9rZW4/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIWlzTWFwYm94VVJMKHVybCkpIHJldHVybiB1cmw7XG4gICAgICAgIGNvbnN0IHVybE9iamVjdCA9IHBhcnNlVXJsKHVybCk7XG4gICAgICAgIHVybE9iamVjdC5wYXRoID0gYC9zdHlsZXMvdjEke3VybE9iamVjdC5wYXRofWA7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYWtlQVBJVVJMKHVybE9iamVjdCwgdGhpcy5fY3VzdG9tQWNjZXNzVG9rZW4gfHwgYWNjZXNzVG9rZW4pO1xuICAgIH1cblxuICAgIG5vcm1hbGl6ZUdseXBoc1VSTCh1cmw6IHN0cmluZywgYWNjZXNzVG9rZW4/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIWlzTWFwYm94VVJMKHVybCkpIHJldHVybiB1cmw7XG4gICAgICAgIGNvbnN0IHVybE9iamVjdCA9IHBhcnNlVXJsKHVybCk7XG4gICAgICAgIHVybE9iamVjdC5wYXRoID0gYC9mb250cy92MSR7dXJsT2JqZWN0LnBhdGh9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ha2VBUElVUkwodXJsT2JqZWN0LCB0aGlzLl9jdXN0b21BY2Nlc3NUb2tlbiB8fCBhY2Nlc3NUb2tlbik7XG4gICAgfVxuXG4gICAgbm9ybWFsaXplU291cmNlVVJMKHVybDogc3RyaW5nLCBhY2Nlc3NUb2tlbj86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmICghaXNNYXBib3hVUkwodXJsKSkgcmV0dXJuIHVybDtcbiAgICAgICAgY29uc3QgdXJsT2JqZWN0ID0gcGFyc2VVcmwodXJsKTtcbiAgICAgICAgdXJsT2JqZWN0LnBhdGggPSBgL3Y0LyR7dXJsT2JqZWN0LmF1dGhvcml0eX0uanNvbmA7XG4gICAgICAgIC8vIFRpbGVKU09OIHJlcXVlc3RzIG5lZWQgYSBzZWN1cmUgZmxhZyBhcHBlbmRlZCB0byB0aGVpciBVUkxzIHNvXG4gICAgICAgIC8vIHRoYXQgdGhlIHNlcnZlciBrbm93cyB0byBzZW5kIFNTTC1pZmllZCByZXNvdXJjZSByZWZlcmVuY2VzLlxuICAgICAgICB1cmxPYmplY3QucGFyYW1zLnB1c2goJ3NlY3VyZScpO1xuICAgICAgICByZXR1cm4gdGhpcy5fbWFrZUFQSVVSTCh1cmxPYmplY3QsIHRoaXMuX2N1c3RvbUFjY2Vzc1Rva2VuIHx8IGFjY2Vzc1Rva2VuKTtcbiAgICB9XG5cbiAgICBub3JtYWxpemVTcHJpdGVVUkwodXJsOiBzdHJpbmcsIGZvcm1hdDogc3RyaW5nLCBleHRlbnNpb246IHN0cmluZywgYWNjZXNzVG9rZW4/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCB1cmxPYmplY3QgPSBwYXJzZVVybCh1cmwpO1xuICAgICAgICBpZiAoIWlzTWFwYm94VVJMKHVybCkpIHtcbiAgICAgICAgICAgIHVybE9iamVjdC5wYXRoICs9IGAke2Zvcm1hdH0ke2V4dGVuc2lvbn1gO1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdFVybCh1cmxPYmplY3QpO1xuICAgICAgICB9XG4gICAgICAgIHVybE9iamVjdC5wYXRoID0gYC9zdHlsZXMvdjEke3VybE9iamVjdC5wYXRofS9zcHJpdGUke2Zvcm1hdH0ke2V4dGVuc2lvbn1gO1xuICAgICAgICByZXR1cm4gdGhpcy5fbWFrZUFQSVVSTCh1cmxPYmplY3QsIHRoaXMuX2N1c3RvbUFjY2Vzc1Rva2VuIHx8IGFjY2Vzc1Rva2VuKTtcbiAgICB9XG5cbiAgICBub3JtYWxpemVUaWxlVVJMKHRpbGVVUkw6IHN0cmluZywgdGlsZVNpemU/OiA/bnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzU2t1VG9rZW5FeHBpcmVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZVNrdVRva2VuKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGlsZVVSTCAmJiAhaXNNYXBib3hVUkwodGlsZVVSTCkpIHJldHVybiB0aWxlVVJMO1xuXG4gICAgICAgIGNvbnN0IHVybE9iamVjdCA9IHBhcnNlVXJsKHRpbGVVUkwpO1xuICAgICAgICBjb25zdCBpbWFnZUV4dGVuc2lvblJlID0gLyhcXC4ocG5nfGpwZylcXGQqKSg/PSQpLztcbiAgICAgICAgY29uc3QgdGlsZVVSTEFQSVByZWZpeFJlID0gL14uK1xcL3Y0XFwvLztcblxuICAgICAgICAvLyBUaGUgdjQgbWFwYm94IHRpbGUgQVBJIHN1cHBvcnRzIDUxMng1MTIgaW1hZ2UgdGlsZXMgb25seSB3aGVuIEAyeFxuICAgICAgICAvLyBpcyBhcHBlbmRlZCB0byB0aGUgdGlsZSBVUkwuIElmIGB0aWxlU2l6ZTogNTEyYCBpcyBzcGVjaWZpZWQgZm9yXG4gICAgICAgIC8vIGEgTWFwYm94IHJhc3RlciBzb3VyY2UgZm9yY2UgdGhlIEAyeCBzdWZmaXggZXZlbiBpZiBhIG5vbiBoaWRwaSBkZXZpY2UuXG4gICAgICAgIGNvbnN0IHN1ZmZpeCA9IGJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbyA+PSAyIHx8IHRpbGVTaXplID09PSA1MTIgPyAnQDJ4JyA6ICcnO1xuICAgICAgICBjb25zdCBleHRlbnNpb24gPSB3ZWJwU3VwcG9ydGVkLnN1cHBvcnRlZCA/ICcud2VicCcgOiAnJDEnO1xuICAgICAgICB1cmxPYmplY3QucGF0aCA9IHVybE9iamVjdC5wYXRoLnJlcGxhY2UoaW1hZ2VFeHRlbnNpb25SZSwgYCR7c3VmZml4fSR7ZXh0ZW5zaW9ufWApO1xuICAgICAgICB1cmxPYmplY3QucGF0aCA9IHVybE9iamVjdC5wYXRoLnJlcGxhY2UodGlsZVVSTEFQSVByZWZpeFJlLCAnLycpO1xuICAgICAgICB1cmxPYmplY3QucGF0aCA9IGAvdjQke3VybE9iamVjdC5wYXRofWA7XG5cbiAgICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSB0aGlzLl9jdXN0b21BY2Nlc3NUb2tlbiB8fCBnZXRBY2Nlc3NUb2tlbih1cmxPYmplY3QucGFyYW1zKSB8fCBjb25maWcuQUNDRVNTX1RPS0VOO1xuICAgICAgICBpZiAoY29uZmlnLlJFUVVJUkVfQUNDRVNTX1RPS0VOICYmIGFjY2Vzc1Rva2VuICYmIHRoaXMuX3NrdVRva2VuKSB7XG4gICAgICAgICAgICB1cmxPYmplY3QucGFyYW1zLnB1c2goYHNrdT0ke3RoaXMuX3NrdVRva2VufWApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX21ha2VBUElVUkwodXJsT2JqZWN0LCBhY2Nlc3NUb2tlbik7XG4gICAgfVxuXG4gICAgY2Fub25pY2FsaXplVGlsZVVSTCh1cmw6IHN0cmluZywgcmVtb3ZlQWNjZXNzVG9rZW46IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IFwiL3Y0L1wiO1xuICAgICAgICAvLyBtYXRjaGVzIGFueSBmaWxlIGV4dGVuc2lvbiBzcGVjaWZpZWQgYnkgYSBkb3QgYW5kIG9uZSBvciBtb3JlIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzXG4gICAgICAgIGNvbnN0IGV4dGVuc2lvblJlID0gL1xcLltcXHddKyQvO1xuXG4gICAgICAgIGNvbnN0IHVybE9iamVjdCA9IHBhcnNlVXJsKHVybCk7XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGFyZSBkZWFsaW5nIHdpdGggYSB2YWxpZCBNYXBib3ggdGlsZSBVUkwuXG4gICAgICAgIC8vIEhhcyB0byBiZWdpbiB3aXRoIC92NC8sIHdpdGggYSB2YWxpZCBmaWxlbmFtZSArIGV4dGVuc2lvblxuICAgICAgICBpZiAoIXVybE9iamVjdC5wYXRoLm1hdGNoKC8oXlxcL3Y0XFwvKS8pIHx8ICF1cmxPYmplY3QucGF0aC5tYXRjaChleHRlbnNpb25SZSkpIHtcbiAgICAgICAgICAgIC8vIE5vdCBhIHByb3BlciBNYXBib3ggdGlsZSBVUkwuXG4gICAgICAgICAgICByZXR1cm4gdXJsO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlYXNzZW1ibGUgdGhlIGNhbm9uaWNhbCBVUkwgZnJvbSB0aGUgcGFydHMgd2UndmUgcGFyc2VkIGJlZm9yZS5cbiAgICAgICAgbGV0IHJlc3VsdCA9IFwibWFwYm94Oi8vdGlsZXMvXCI7XG4gICAgICAgIHJlc3VsdCArPSAgdXJsT2JqZWN0LnBhdGgucmVwbGFjZSh2ZXJzaW9uLCAnJyk7XG5cbiAgICAgICAgLy8gQXBwZW5kIHRoZSBxdWVyeSBzdHJpbmcsIG1pbnVzIHRoZSBhY2Nlc3MgdG9rZW4gcGFyYW1ldGVyLlxuICAgICAgICBsZXQgcGFyYW1zID0gdXJsT2JqZWN0LnBhcmFtcztcbiAgICAgICAgaWYgKHJlbW92ZUFjY2Vzc1Rva2VuKSB7XG4gICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuZmlsdGVyKHAgPT4gIXAubWF0Y2goL15hY2Nlc3NfdG9rZW49LykpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJhbXMubGVuZ3RoKSByZXN1bHQgKz0gYD8ke3BhcmFtcy5qb2luKCcmJyl9YDtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBjYW5vbmljYWxpemVUaWxlc2V0KHRpbGVKU09OOiBUaWxlSlNPTiwgc291cmNlVVJMPzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHJlbW92ZUFjY2Vzc1Rva2VuID0gc291cmNlVVJMID8gaXNNYXBib3hVUkwoc291cmNlVVJMKSA6IGZhbHNlO1xuICAgICAgICBjb25zdCBjYW5vbmljYWwgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCB1cmwgb2YgdGlsZUpTT04udGlsZXMgfHwgW10pIHtcbiAgICAgICAgICAgIGlmIChpc01hcGJveEhUVFBVUkwodXJsKSkge1xuICAgICAgICAgICAgICAgIGNhbm9uaWNhbC5wdXNoKHRoaXMuY2Fub25pY2FsaXplVGlsZVVSTCh1cmwsIHJlbW92ZUFjY2Vzc1Rva2VuKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbm9uaWNhbC5wdXNoKHVybCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbm9uaWNhbDtcbiAgICB9XG5cbiAgICBfbWFrZUFQSVVSTCh1cmxPYmplY3Q6IFVybE9iamVjdCwgYWNjZXNzVG9rZW46IHN0cmluZyB8IG51bGwgfCB2b2lkKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgaGVscCA9ICdTZWUgaHR0cHM6Ly93d3cubWFwYm94LmNvbS9hcGktZG9jdW1lbnRhdGlvbi8jYWNjZXNzLXRva2Vucy1hbmQtdG9rZW4tc2NvcGVzJztcbiAgICAgICAgY29uc3QgYXBpVXJsT2JqZWN0ID0gcGFyc2VVcmwoY29uZmlnLkFQSV9VUkwpO1xuICAgICAgICB1cmxPYmplY3QucHJvdG9jb2wgPSBhcGlVcmxPYmplY3QucHJvdG9jb2w7XG4gICAgICAgIHVybE9iamVjdC5hdXRob3JpdHkgPSBhcGlVcmxPYmplY3QuYXV0aG9yaXR5O1xuXG4gICAgICAgIGlmIChhcGlVcmxPYmplY3QucGF0aCAhPT0gJy8nKSB7XG4gICAgICAgICAgICB1cmxPYmplY3QucGF0aCA9IGAke2FwaVVybE9iamVjdC5wYXRofSR7dXJsT2JqZWN0LnBhdGh9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY29uZmlnLlJFUVVJUkVfQUNDRVNTX1RPS0VOKSByZXR1cm4gZm9ybWF0VXJsKHVybE9iamVjdCk7XG5cbiAgICAgICAgYWNjZXNzVG9rZW4gPSBhY2Nlc3NUb2tlbiB8fCBjb25maWcuQUNDRVNTX1RPS0VOO1xuICAgICAgICBpZiAoIWFjY2Vzc1Rva2VuKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBbiBBUEkgYWNjZXNzIHRva2VuIGlzIHJlcXVpcmVkIHRvIHVzZSBNYXBib3ggR0wuICR7aGVscH1gKTtcbiAgICAgICAgaWYgKGFjY2Vzc1Rva2VuWzBdID09PSAncycpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVzZSBhIHB1YmxpYyBhY2Nlc3MgdG9rZW4gKHBrLiopIHdpdGggTWFwYm94IEdMLCBub3QgYSBzZWNyZXQgYWNjZXNzIHRva2VuIChzay4qKS4gJHtoZWxwfWApO1xuXG4gICAgICAgIHVybE9iamVjdC5wYXJhbXMgPSB1cmxPYmplY3QucGFyYW1zLmZpbHRlcigoZCkgPT4gZC5pbmRleE9mKCdhY2Nlc3NfdG9rZW4nKSA9PT0gLTEpO1xuICAgICAgICB1cmxPYmplY3QucGFyYW1zLnB1c2goYGFjY2Vzc190b2tlbj0ke2FjY2Vzc1Rva2VufWApO1xuICAgICAgICByZXR1cm4gZm9ybWF0VXJsKHVybE9iamVjdCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpc01hcGJveFVSTCh1cmw6IHN0cmluZykge1xuICAgIHJldHVybiB1cmwuaW5kZXhPZignbWFwYm94OicpID09PSAwO1xufVxuXG5jb25zdCBtYXBib3hIVFRQVVJMUmUgPSAvXigoaHR0cHM/Oik/XFwvXFwvKT8oW15cXC9dK1xcLik/bWFwYm94XFwuYyhufG9tKShcXC98XFw/fCQpL2k7XG5mdW5jdGlvbiBpc01hcGJveEhUVFBVUkwodXJsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbWFwYm94SFRUUFVSTFJlLnRlc3QodXJsKTtcbn1cblxuZnVuY3Rpb24gaGFzQ2FjaGVEZWZlYXRpbmdTa3UodXJsOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdXJsLmluZGV4T2YoJ3NrdT0nKSA+IDAgJiYgaXNNYXBib3hIVFRQVVJMKHVybCk7XG59XG5cbmZ1bmN0aW9uIGdldEFjY2Vzc1Rva2VuKHBhcmFtczogQXJyYXk8c3RyaW5nPik6IHN0cmluZyB8IG51bGwge1xuICAgIGZvciAoY29uc3QgcGFyYW0gb2YgcGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gcGFyYW0ubWF0Y2goL15hY2Nlc3NfdG9rZW49KC4qKSQvKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hbMV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IHVybFJlID0gL14oXFx3Kyk6XFwvXFwvKFteLz9dKikoXFwvW14/XSspP1xcPz8oLispPy87XG5cbmZ1bmN0aW9uIHBhcnNlVXJsKHVybDogc3RyaW5nKTogVXJsT2JqZWN0IHtcbiAgICBjb25zdCBwYXJ0cyA9IHVybC5tYXRjaCh1cmxSZSk7XG4gICAgaWYgKCFwYXJ0cykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBwYXJzZSBVUkwgb2JqZWN0Jyk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHByb3RvY29sOiBwYXJ0c1sxXSxcbiAgICAgICAgYXV0aG9yaXR5OiBwYXJ0c1syXSxcbiAgICAgICAgcGF0aDogcGFydHNbM10gfHwgJy8nLFxuICAgICAgICBwYXJhbXM6IHBhcnRzWzRdID8gcGFydHNbNF0uc3BsaXQoJyYnKSA6IFtdXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VXJsKG9iajogVXJsT2JqZWN0KTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJhbXMgPSBvYmoucGFyYW1zLmxlbmd0aCA/IGA/JHtvYmoucGFyYW1zLmpvaW4oJyYnKX1gIDogJyc7XG4gICAgcmV0dXJuIGAke29iai5wcm90b2NvbH06Ly8ke29iai5hdXRob3JpdHl9JHtvYmoucGF0aH0ke3BhcmFtc31gO1xufVxuXG5leHBvcnQge2lzTWFwYm94VVJMLCBpc01hcGJveEhUVFBVUkwsIGhhc0NhY2hlRGVmZWF0aW5nU2t1fTtcblxuY29uc3QgdGVsZW1FdmVudEtleSA9ICdtYXBib3guZXZlbnREYXRhJztcblxuZnVuY3Rpb24gcGFyc2VBY2Nlc3NUb2tlbihhY2Nlc3NUb2tlbjogP3N0cmluZykge1xuICAgIGlmICghYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcGFydHMgPSBhY2Nlc3NUb2tlbi5zcGxpdCgnLicpO1xuICAgIGlmICghcGFydHMgfHwgcGFydHMubGVuZ3RoICE9PSAzKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGpzb25EYXRhID0gSlNPTi5wYXJzZShiNjREZWNvZGVVbmljb2RlKHBhcnRzWzFdKSk7XG4gICAgICAgIHJldHVybiBqc29uRGF0YTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cblxudHlwZSBUZWxlbWV0cnlFdmVudFR5cGUgPSAnYXBwVXNlclR1cm5zdGlsZScgfCAnbWFwLmxvYWQnO1xuXG5jbGFzcyBUZWxlbWV0cnlFdmVudCB7XG4gICAgZXZlbnREYXRhOiBhbnk7XG4gICAgYW5vbklkOiA/c3RyaW5nO1xuICAgIHF1ZXVlOiBBcnJheTxhbnk+O1xuICAgIHR5cGU6IFRlbGVtZXRyeUV2ZW50VHlwZTtcbiAgICBwZW5kaW5nUmVxdWVzdDogP0NhbmNlbGFibGU7XG4gICAgX2N1c3RvbUFjY2Vzc1Rva2VuOiA/c3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IodHlwZTogVGVsZW1ldHJ5RXZlbnRUeXBlKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMuYW5vbklkID0gbnVsbDtcbiAgICAgICAgdGhpcy5ldmVudERhdGEgPSB7fTtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgICAgICB0aGlzLnBlbmRpbmdSZXF1ZXN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBnZXRTdG9yYWdlS2V5KGRvbWFpbjogP3N0cmluZykge1xuICAgICAgICBjb25zdCB0b2tlbkRhdGEgPSBwYXJzZUFjY2Vzc1Rva2VuKGNvbmZpZy5BQ0NFU1NfVE9LRU4pO1xuICAgICAgICBsZXQgdSA9ICcnO1xuICAgICAgICBpZiAodG9rZW5EYXRhICYmIHRva2VuRGF0YVsndSddKSB7XG4gICAgICAgICAgICB1ID0gYjY0RW5jb2RlVW5pY29kZSh0b2tlbkRhdGFbJ3UnXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1ID0gY29uZmlnLkFDQ0VTU19UT0tFTiB8fCAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZG9tYWluID9cbiAgICAgICAgICAgIGAke3RlbGVtRXZlbnRLZXl9LiR7ZG9tYWlufToke3V9YCA6XG4gICAgICAgICAgICBgJHt0ZWxlbUV2ZW50S2V5fToke3V9YDtcbiAgICB9XG5cbiAgICBmZXRjaEV2ZW50RGF0YSgpIHtcbiAgICAgICAgY29uc3QgaXNMb2NhbFN0b3JhZ2VBdmFpbGFibGUgPSBzdG9yYWdlQXZhaWxhYmxlKCdsb2NhbFN0b3JhZ2UnKTtcbiAgICAgICAgY29uc3Qgc3RvcmFnZUtleSA9IHRoaXMuZ2V0U3RvcmFnZUtleSgpO1xuICAgICAgICBjb25zdCB1dWlkS2V5ID0gdGhpcy5nZXRTdG9yYWdlS2V5KCd1dWlkJyk7XG5cbiAgICAgICAgaWYgKGlzTG9jYWxTdG9yYWdlQXZhaWxhYmxlKSB7XG4gICAgICAgICAgICAvL1JldHJpZXZlIGNhY2hlZCBkYXRhXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oc3RvcmFnZUtleSk7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ldmVudERhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHV1aWQgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0odXVpZEtleSk7XG4gICAgICAgICAgICAgICAgaWYgKHV1aWQpIHRoaXMuYW5vbklkID0gdXVpZDtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB3YXJuT25jZSgnVW5hYmxlIHRvIHJlYWQgZnJvbSBMb2NhbFN0b3JhZ2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNhdmVFdmVudERhdGEoKSB7XG4gICAgICAgIGNvbnN0IGlzTG9jYWxTdG9yYWdlQXZhaWxhYmxlID0gc3RvcmFnZUF2YWlsYWJsZSgnbG9jYWxTdG9yYWdlJyk7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2VLZXkgPSAgdGhpcy5nZXRTdG9yYWdlS2V5KCk7XG4gICAgICAgIGNvbnN0IHV1aWRLZXkgPSB0aGlzLmdldFN0b3JhZ2VLZXkoJ3V1aWQnKTtcbiAgICAgICAgaWYgKGlzTG9jYWxTdG9yYWdlQXZhaWxhYmxlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh1dWlkS2V5LCB0aGlzLmFub25JZCk7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZXZlbnREYXRhKS5sZW5ndGggPj0gMSkge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oc3RvcmFnZUtleSwgSlNPTi5zdHJpbmdpZnkodGhpcy5ldmVudERhdGEpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgd2Fybk9uY2UoJ1VuYWJsZSB0byB3cml0ZSB0byBMb2NhbFN0b3JhZ2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgcHJvY2Vzc1JlcXVlc3RzKF86ID9zdHJpbmcpIHt9XG5cbiAgICAvKlxuICAgICogSWYgYW55IGV2ZW50IGRhdGEgc2hvdWxkIGJlIHBlcnNpc3RlZCBhZnRlciB0aGUgUE9TVCByZXF1ZXN0LCB0aGUgY2FsbGJhY2sgc2hvdWxkIG1vZGlmeSBldmVudERhdGFgXG4gICAgKiB0byB0aGUgdmFsdWVzIHRoYXQgc2hvdWxkIGJlIHNhdmVkLiBGb3IgdGhpcyByZWFzb24sIHRoZSBjYWxsYmFjayBzaG91bGQgYmUgaW52b2tlZCBwcmlvciB0byB0aGUgY2FsbFxuICAgICogdG8gVGVsZW1ldHJ5RXZlbnQjc2F2ZURhdGFcbiAgICAqL1xuICAgIHBvc3RFdmVudCh0aW1lc3RhbXA6IG51bWJlciwgYWRkaXRpb25hbFBheWxvYWQ6IHtbXzogc3RyaW5nXTogYW55fSwgY2FsbGJhY2s6IChlcnI6ID9FcnJvcikgPT4gdm9pZCwgY3VzdG9tQWNjZXNzVG9rZW4/OiA/c3RyaW5nKSB7XG4gICAgICAgIGlmICghY29uZmlnLkVWRU5UU19VUkwpIHJldHVybjtcbiAgICAgICAgY29uc3QgZXZlbnRzVXJsT2JqZWN0OiBVcmxPYmplY3QgPSBwYXJzZVVybChjb25maWcuRVZFTlRTX1VSTCk7XG4gICAgICAgIGV2ZW50c1VybE9iamVjdC5wYXJhbXMucHVzaChgYWNjZXNzX3Rva2VuPSR7Y3VzdG9tQWNjZXNzVG9rZW4gfHwgY29uZmlnLkFDQ0VTU19UT0tFTiB8fCAnJ31gKTtcblxuICAgICAgICBjb25zdCBwYXlsb2FkOiBPYmplY3QgPSB7XG4gICAgICAgICAgICBldmVudDogdGhpcy50eXBlLFxuICAgICAgICAgICAgY3JlYXRlZDogbmV3IERhdGUodGltZXN0YW1wKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgc2RrSWRlbnRpZmllcjogJ21hcGJveC1nbC1qcycsXG4gICAgICAgICAgICBzZGtWZXJzaW9uLFxuICAgICAgICAgICAgc2t1SWQ6IFNLVV9JRCxcbiAgICAgICAgICAgIHVzZXJJZDogdGhpcy5hbm9uSWRcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBmaW5hbFBheWxvYWQgPSBhZGRpdGlvbmFsUGF5bG9hZCA/IGV4dGVuZChwYXlsb2FkLCBhZGRpdGlvbmFsUGF5bG9hZCkgOiBwYXlsb2FkO1xuICAgICAgICBjb25zdCByZXF1ZXN0OiBSZXF1ZXN0UGFyYW1ldGVycyA9IHtcbiAgICAgICAgICAgIHVybDogZm9ybWF0VXJsKGV2ZW50c1VybE9iamVjdCksXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICd0ZXh0L3BsYWluJyAvL1NraXAgdGhlIHByZS1mbGlnaHQgT1BUSU9OUyByZXF1ZXN0XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoW2ZpbmFsUGF5bG9hZF0pXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5wZW5kaW5nUmVxdWVzdCA9IHBvc3REYXRhKHJlcXVlc3QsIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nUmVxdWVzdCA9IG51bGw7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgICAgICB0aGlzLnNhdmVFdmVudERhdGEoKTtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1JlcXVlc3RzKGN1c3RvbUFjY2Vzc1Rva2VuKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcXVldWVSZXF1ZXN0KGV2ZW50OiBudW1iZXIgfCB7aWQ6IG51bWJlciwgdGltZXN0YW1wOiBudW1iZXJ9LCBjdXN0b21BY2Nlc3NUb2tlbj86ID9zdHJpbmcpIHtcbiAgICAgICAgdGhpcy5xdWV1ZS5wdXNoKGV2ZW50KTtcbiAgICAgICAgdGhpcy5wcm9jZXNzUmVxdWVzdHMoY3VzdG9tQWNjZXNzVG9rZW4pO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1hcExvYWRFdmVudCBleHRlbmRzIFRlbGVtZXRyeUV2ZW50IHtcbiAgICArc3VjY2Vzczoge1tfOiBudW1iZXJdOiBib29sZWFufTtcbiAgICBza3VUb2tlbjogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdtYXAubG9hZCcpO1xuICAgICAgICB0aGlzLnN1Y2Nlc3MgPSB7fTtcbiAgICAgICAgdGhpcy5za3VUb2tlbiA9ICcnO1xuICAgIH1cblxuICAgIHBvc3RNYXBMb2FkRXZlbnQodGlsZVVybHM6IEFycmF5PHN0cmluZz4sIG1hcElkOiBudW1iZXIsIHNrdVRva2VuOiBzdHJpbmcsIGN1c3RvbUFjY2Vzc1Rva2VuOiBzdHJpbmcpIHtcbiAgICAgICAgLy9FbmFibGVkIG9ubHkgd2hlbiBNYXBib3ggQWNjZXNzIFRva2VuIGlzIHNldCBhbmQgYSBzb3VyY2UgdXNlc1xuICAgICAgICAvLyBtYXBib3ggdGlsZXMuXG4gICAgICAgIHRoaXMuc2t1VG9rZW4gPSBza3VUb2tlbjtcblxuICAgICAgICBpZiAoY29uZmlnLkVWRU5UU19VUkwgJiZcbiAgICAgICAgICAgIGN1c3RvbUFjY2Vzc1Rva2VuIHx8IGNvbmZpZy5BQ0NFU1NfVE9LRU4gJiZcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkodGlsZVVybHMpICYmXG4gICAgICAgICAgICB0aWxlVXJscy5zb21lKHVybCA9PiBpc01hcGJveFVSTCh1cmwpIHx8IGlzTWFwYm94SFRUUFVSTCh1cmwpKSkge1xuICAgICAgICAgICAgdGhpcy5xdWV1ZVJlcXVlc3Qoe2lkOiBtYXBJZCwgdGltZXN0YW1wOiBEYXRlLm5vdygpfSwgY3VzdG9tQWNjZXNzVG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvY2Vzc1JlcXVlc3RzKGN1c3RvbUFjY2Vzc1Rva2VuPzogP3N0cmluZykge1xuICAgICAgICBpZiAodGhpcy5wZW5kaW5nUmVxdWVzdCB8fCB0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgICAgICBjb25zdCB7aWQsIHRpbWVzdGFtcH0gPSB0aGlzLnF1ZXVlLnNoaWZ0KCk7XG5cbiAgICAgICAgLy8gT25seSBvbmUgbG9hZCBldmVudCBzaG91bGQgZmlyZSBwZXIgbWFwXG4gICAgICAgIGlmIChpZCAmJiB0aGlzLnN1Y2Nlc3NbaWRdKSByZXR1cm47XG5cbiAgICAgICAgaWYgKCF0aGlzLmFub25JZCkge1xuICAgICAgICAgICAgdGhpcy5mZXRjaEV2ZW50RGF0YSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF2YWxpZGF0ZVV1aWQodGhpcy5hbm9uSWQpKSB7XG4gICAgICAgICAgICB0aGlzLmFub25JZCA9IHV1aWQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucG9zdEV2ZW50KHRpbWVzdGFtcCwge3NrdVRva2VuOiB0aGlzLnNrdVRva2VufSwgKGVycikgPT4ge1xuICAgICAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoaWQpIHRoaXMuc3VjY2Vzc1tpZF0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBjdXN0b21BY2Nlc3NUb2tlbik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVHVybnN0aWxlRXZlbnQgZXh0ZW5kcyBUZWxlbWV0cnlFdmVudCB7XG4gICAgY29uc3RydWN0b3IoY3VzdG9tQWNjZXNzVG9rZW4/OiA/c3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKCdhcHBVc2VyVHVybnN0aWxlJyk7XG4gICAgICAgIHRoaXMuX2N1c3RvbUFjY2Vzc1Rva2VuID0gY3VzdG9tQWNjZXNzVG9rZW47XG4gICAgfVxuXG4gICAgcG9zdFR1cm5zdGlsZUV2ZW50KHRpbGVVcmxzOiBBcnJheTxzdHJpbmc+LCBjdXN0b21BY2Nlc3NUb2tlbj86ID9zdHJpbmcpIHtcbiAgICAgICAgLy9FbmFibGVkIG9ubHkgd2hlbiBNYXBib3ggQWNjZXNzIFRva2VuIGlzIHNldCBhbmQgYSBzb3VyY2UgdXNlc1xuICAgICAgICAvLyBtYXBib3ggdGlsZXMuXG4gICAgICAgIGlmIChjb25maWcuRVZFTlRTX1VSTCAmJlxuICAgICAgICAgICAgY29uZmlnLkFDQ0VTU19UT0tFTiAmJlxuICAgICAgICAgICAgQXJyYXkuaXNBcnJheSh0aWxlVXJscykgJiZcbiAgICAgICAgICAgIHRpbGVVcmxzLnNvbWUodXJsID0+IGlzTWFwYm94VVJMKHVybCkgfHwgaXNNYXBib3hIVFRQVVJMKHVybCkpKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXVlUmVxdWVzdChEYXRlLm5vdygpLCBjdXN0b21BY2Nlc3NUb2tlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm9jZXNzUmVxdWVzdHMoY3VzdG9tQWNjZXNzVG9rZW4/OiA/c3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLnBlbmRpbmdSZXF1ZXN0IHx8IHRoaXMucXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuYW5vbklkIHx8ICF0aGlzLmV2ZW50RGF0YS5sYXN0U3VjY2VzcyB8fCAhdGhpcy5ldmVudERhdGEudG9rZW5VKSB7XG4gICAgICAgICAgICAvL1JldHJpZXZlIGNhY2hlZCBkYXRhXG4gICAgICAgICAgICB0aGlzLmZldGNoRXZlbnREYXRhKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0b2tlbkRhdGEgPSBwYXJzZUFjY2Vzc1Rva2VuKGNvbmZpZy5BQ0NFU1NfVE9LRU4pO1xuICAgICAgICBjb25zdCB0b2tlblUgPSB0b2tlbkRhdGEgPyB0b2tlbkRhdGFbJ3UnXSA6IGNvbmZpZy5BQ0NFU1NfVE9LRU47XG4gICAgICAgIC8vUmVzZXQgZXZlbnQgZGF0YSBjYWNoZSBpZiB0aGUgYWNjZXNzIHRva2VuIG93bmVyIGNoYW5nZWQuXG4gICAgICAgIGxldCBkdWVGb3JFdmVudCA9IHRva2VuVSAhPT0gdGhpcy5ldmVudERhdGEudG9rZW5VO1xuXG4gICAgICAgIGlmICghdmFsaWRhdGVVdWlkKHRoaXMuYW5vbklkKSkge1xuICAgICAgICAgICAgdGhpcy5hbm9uSWQgPSB1dWlkKCk7XG4gICAgICAgICAgICBkdWVGb3JFdmVudCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXh0VXBkYXRlID0gdGhpcy5xdWV1ZS5zaGlmdCgpO1xuICAgICAgICAvLyBSZWNvcmQgdHVybnN0aWxlIGV2ZW50IG9uY2UgcGVyIGNhbGVuZGFyIGRheS5cbiAgICAgICAgaWYgKHRoaXMuZXZlbnREYXRhLmxhc3RTdWNjZXNzKSB7XG4gICAgICAgICAgICBjb25zdCBsYXN0VXBkYXRlID0gbmV3IERhdGUodGhpcy5ldmVudERhdGEubGFzdFN1Y2Nlc3MpO1xuICAgICAgICAgICAgY29uc3QgbmV4dERhdGUgPSBuZXcgRGF0ZShuZXh0VXBkYXRlKTtcbiAgICAgICAgICAgIGNvbnN0IGRheXNFbGFwc2VkID0gKG5leHRVcGRhdGUgLSB0aGlzLmV2ZW50RGF0YS5sYXN0U3VjY2VzcykgLyAoMjQgKiA2MCAqIDYwICogMTAwMCk7XG4gICAgICAgICAgICBkdWVGb3JFdmVudCA9IGR1ZUZvckV2ZW50IHx8IGRheXNFbGFwc2VkID49IDEgfHwgZGF5c0VsYXBzZWQgPCAtMSB8fCBsYXN0VXBkYXRlLmdldERhdGUoKSAhPT0gbmV4dERhdGUuZ2V0RGF0ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZHVlRm9yRXZlbnQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkdWVGb3JFdmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1JlcXVlc3RzKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBvc3RFdmVudChuZXh0VXBkYXRlLCB7XCJlbmFibGVkLnRlbGVtZXRyeVwiOiBmYWxzZX0sIChlcnIpID0+IHtcbiAgICAgICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ldmVudERhdGEubGFzdFN1Y2Nlc3MgPSBuZXh0VXBkYXRlO1xuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnREYXRhLnRva2VuVSA9IHRva2VuVTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgY3VzdG9tQWNjZXNzVG9rZW4pO1xuICAgIH1cbn1cblxuY29uc3QgdHVybnN0aWxlRXZlbnRfID0gbmV3IFR1cm5zdGlsZUV2ZW50KCk7XG5leHBvcnQgY29uc3QgcG9zdFR1cm5zdGlsZUV2ZW50ID0gdHVybnN0aWxlRXZlbnRfLnBvc3RUdXJuc3RpbGVFdmVudC5iaW5kKHR1cm5zdGlsZUV2ZW50Xyk7XG5cbmNvbnN0IG1hcExvYWRFdmVudF8gPSBuZXcgTWFwTG9hZEV2ZW50KCk7XG5leHBvcnQgY29uc3QgcG9zdE1hcExvYWRFdmVudCA9IG1hcExvYWRFdmVudF8ucG9zdE1hcExvYWRFdmVudC5iaW5kKG1hcExvYWRFdmVudF8pO1xuXG4vKioqKiogRU5EIFdBUk5JTkcgLSBSRU1PVkFMIE9SIE1PRElGSUNBVElPTiBPRiBUSEVcblBSRUNFRElORyBDT0RFIFZJT0xBVEVTIFRIRSBNQVBCT1ggVEVSTVMgT0YgU0VSVklDRSAgKioqKioqL1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHt3YXJuT25jZSwgcGFyc2VDYWNoZUNvbnRyb2x9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgd2luZG93IGZyb20gJy4vd2luZG93JztcblxuaW1wb3J0IHR5cGUgRGlzcGF0Y2hlciBmcm9tICcuL2Rpc3BhdGNoZXInO1xuXG5jb25zdCBDQUNIRV9OQU1FID0gJ21hcGJveC10aWxlcyc7XG5sZXQgY2FjaGVMaW1pdCA9IDUwMDsgLy8gNTBNQiAvICgxMDBLQi90aWxlKSB+PSA1MDAgdGlsZXNcbmxldCBjYWNoZUNoZWNrVGhyZXNob2xkID0gNTA7XG5cbmNvbnN0IE1JTl9USU1FX1VOVElMX0VYUElSWSA9IDEwMDAgKiA2MCAqIDc7IC8vIDcgbWludXRlcy4gU2tpcCBjYWNoaW5nIHRpbGVzIHdpdGggYSBzaG9ydCBlbm91Z2ggbWF4IGFnZS5cblxuZXhwb3J0IHR5cGUgUmVzcG9uc2VPcHRpb25zID0ge1xuICAgIHN0YXR1czogbnVtYmVyLFxuICAgIHN0YXR1c1RleHQ6IHN0cmluZyxcbiAgICBoZWFkZXJzOiB3aW5kb3cuSGVhZGVyc1xufTtcblxuLy8gV2UncmUgdXNpbmcgYSBnbG9iYWwgc2hhcmVkIGNhY2hlIG9iamVjdC4gTm9ybWFsbHksIHJlcXVlc3RpbmcgYWQtaG9jIENhY2hlIG9iamVjdHMgaXMgZmluZSwgYnV0XG4vLyBTYWZhcmkgaGFzIGEgbWVtb3J5IGxlYWsgaW4gd2hpY2ggaXQgZmFpbHMgdG8gcmVsZWFzZSBtZW1vcnkgd2hlbiByZXF1ZXN0aW5nIGtleXMoKSBmcm9tIGEgQ2FjaGVcbi8vIG9iamVjdC4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM5OTEgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG5sZXQgc2hhcmVkQ2FjaGU6ID9Qcm9taXNlPENhY2hlPjtcblxuZnVuY3Rpb24gY2FjaGVPcGVuKCkge1xuICAgIGlmICh3aW5kb3cuY2FjaGVzICYmICFzaGFyZWRDYWNoZSkge1xuICAgICAgICBzaGFyZWRDYWNoZSA9IHdpbmRvdy5jYWNoZXMub3BlbihDQUNIRV9OQU1FKTtcbiAgICB9XG59XG5cbi8vIFdlJ3JlIG5ldmVyIGNsb3NpbmcgdGhlIGNhY2hlLCBidXQgb3VyIHVuaXQgdGVzdHMgcmVseSBvbiBjaGFuZ2luZyBvdXQgdGhlIGdsb2JhbCB3aW5kb3cuY2FjaGVzXG4vLyBvYmplY3QsIHNvIHdlIGhhdmUgYSBmdW5jdGlvbiBzcGVjaWZpY2FsbHkgZm9yIHVuaXQgdGVzdHMgdGhhdCBhbGxvd3MgcmVzZXR0aW5nIHRoZSBzaGFyZWQgY2FjaGUuXG5leHBvcnQgZnVuY3Rpb24gY2FjaGVDbG9zZSgpIHtcbiAgICBzaGFyZWRDYWNoZSA9IHVuZGVmaW5lZDtcbn1cblxubGV0IHJlc3BvbnNlQ29uc3RydWN0b3JTdXBwb3J0c1JlYWRhYmxlU3RyZWFtO1xuZnVuY3Rpb24gcHJlcGFyZUJvZHkocmVzcG9uc2U6IFJlc3BvbnNlLCBjYWxsYmFjaykge1xuICAgIGlmIChyZXNwb25zZUNvbnN0cnVjdG9yU3VwcG9ydHNSZWFkYWJsZVN0cmVhbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBuZXcgUmVzcG9uc2UobmV3IFJlYWRhYmxlU3RyZWFtKCkpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4gICAgICAgICAgICByZXNwb25zZUNvbnN0cnVjdG9yU3VwcG9ydHNSZWFkYWJsZVN0cmVhbSA9IHRydWU7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIEVkZ2VcbiAgICAgICAgICAgIHJlc3BvbnNlQ29uc3RydWN0b3JTdXBwb3J0c1JlYWRhYmxlU3RyZWFtID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVzcG9uc2VDb25zdHJ1Y3RvclN1cHBvcnRzUmVhZGFibGVTdHJlYW0pIHtcbiAgICAgICAgY2FsbGJhY2socmVzcG9uc2UuYm9keSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmVzcG9uc2UuYmxvYigpLnRoZW4oY2FsbGJhY2spO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhY2hlUHV0KHJlcXVlc3Q6IFJlcXVlc3QsIHJlc3BvbnNlOiBSZXNwb25zZSwgcmVxdWVzdFRpbWU6IG51bWJlcikge1xuICAgIGNhY2hlT3BlbigpO1xuICAgIGlmICghc2hhcmVkQ2FjaGUpIHJldHVybjtcblxuICAgIGNvbnN0IG9wdGlvbnM6IFJlc3BvbnNlT3B0aW9ucyA9IHtcbiAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IG5ldyB3aW5kb3cuSGVhZGVycygpXG4gICAgfTtcbiAgICByZXNwb25zZS5oZWFkZXJzLmZvckVhY2goKHYsIGspID0+IG9wdGlvbnMuaGVhZGVycy5zZXQoaywgdikpO1xuXG4gICAgY29uc3QgY2FjaGVDb250cm9sID0gcGFyc2VDYWNoZUNvbnRyb2wocmVzcG9uc2UuaGVhZGVycy5nZXQoJ0NhY2hlLUNvbnRyb2wnKSB8fCAnJyk7XG4gICAgaWYgKGNhY2hlQ29udHJvbFsnbm8tc3RvcmUnXSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChjYWNoZUNvbnRyb2xbJ21heC1hZ2UnXSkge1xuICAgICAgICBvcHRpb25zLmhlYWRlcnMuc2V0KCdFeHBpcmVzJywgbmV3IERhdGUocmVxdWVzdFRpbWUgKyBjYWNoZUNvbnRyb2xbJ21heC1hZ2UnXSAqIDEwMDApLnRvVVRDU3RyaW5nKCkpO1xuICAgIH1cblxuICAgIGNvbnN0IHRpbWVVbnRpbEV4cGlyeSA9IG5ldyBEYXRlKG9wdGlvbnMuaGVhZGVycy5nZXQoJ0V4cGlyZXMnKSkuZ2V0VGltZSgpIC0gcmVxdWVzdFRpbWU7XG4gICAgaWYgKHRpbWVVbnRpbEV4cGlyeSA8IE1JTl9USU1FX1VOVElMX0VYUElSWSkgcmV0dXJuO1xuXG4gICAgcHJlcGFyZUJvZHkocmVzcG9uc2UsIGJvZHkgPT4ge1xuICAgICAgICBjb25zdCBjbG9uZWRSZXNwb25zZSA9IG5ldyB3aW5kb3cuUmVzcG9uc2UoYm9keSwgb3B0aW9ucyk7XG5cbiAgICAgICAgY2FjaGVPcGVuKCk7XG4gICAgICAgIGlmICghc2hhcmVkQ2FjaGUpIHJldHVybjtcbiAgICAgICAgc2hhcmVkQ2FjaGVcbiAgICAgICAgICAgIC50aGVuKGNhY2hlID0+IGNhY2hlLnB1dChzdHJpcFF1ZXJ5UGFyYW1ldGVycyhyZXF1ZXN0LnVybCksIGNsb25lZFJlc3BvbnNlKSlcbiAgICAgICAgICAgIC5jYXRjaChlID0+IHdhcm5PbmNlKGUubWVzc2FnZSkpO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBzdHJpcFF1ZXJ5UGFyYW1ldGVycyh1cmw6IHN0cmluZykge1xuICAgIGNvbnN0IHN0YXJ0ID0gdXJsLmluZGV4T2YoJz8nKTtcbiAgICByZXR1cm4gc3RhcnQgPCAwID8gdXJsIDogdXJsLnNsaWNlKDAsIHN0YXJ0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhY2hlR2V0KHJlcXVlc3Q6IFJlcXVlc3QsIGNhbGxiYWNrOiAoZXJyb3I6ID9hbnksIHJlc3BvbnNlOiA/UmVzcG9uc2UsIGZyZXNoOiA/Ym9vbGVhbikgPT4gdm9pZCkge1xuICAgIGNhY2hlT3BlbigpO1xuICAgIGlmICghc2hhcmVkQ2FjaGUpIHJldHVybiBjYWxsYmFjayhudWxsKTtcblxuICAgIGNvbnN0IHN0cmlwcGVkVVJMID0gc3RyaXBRdWVyeVBhcmFtZXRlcnMocmVxdWVzdC51cmwpO1xuXG4gICAgc2hhcmVkQ2FjaGVcbiAgICAgICAgLnRoZW4oY2FjaGUgPT4ge1xuICAgICAgICAgICAgLy8gbWFudWFsbHkgc3RyaXAgVVJMIGluc3RlYWQgb2YgYGlnbm9yZVNlYXJjaDogdHJ1ZWAgYmVjYXVzZSBvZiBhIGtub3duXG4gICAgICAgICAgICAvLyBwZXJmb3JtYW5jZSBpc3N1ZSBpbiBDaHJvbWUgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzg0MzFcbiAgICAgICAgICAgIGNhY2hlLm1hdGNoKHN0cmlwcGVkVVJMKVxuICAgICAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZnJlc2ggPSBpc0ZyZXNoKHJlc3BvbnNlKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBSZWluc2VydCBpbnRvIGNhY2hlIHNvIHRoYXQgb3JkZXIgb2Yga2V5cyBpbiB0aGUgY2FjaGUgaXMgdGhlIG9yZGVyIG9mIGFjY2Vzcy5cbiAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBsaW5lIG1ha2VzIHRoZSBjYWNoZSBhIExSVSBpbnN0ZWFkIG9mIGEgRklGTyBjYWNoZS5cbiAgICAgICAgICAgICAgICAgICAgY2FjaGUuZGVsZXRlKHN0cmlwcGVkVVJMKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyZXNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5wdXQoc3RyaXBwZWRVUkwsIHJlc3BvbnNlLmNsb25lKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UsIGZyZXNoKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG5cbn1cblxuZnVuY3Rpb24gaXNGcmVzaChyZXNwb25zZSkge1xuICAgIGlmICghcmVzcG9uc2UpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBleHBpcmVzID0gbmV3IERhdGUocmVzcG9uc2UuaGVhZGVycy5nZXQoJ0V4cGlyZXMnKSB8fCAwKTtcbiAgICBjb25zdCBjYWNoZUNvbnRyb2wgPSBwYXJzZUNhY2hlQ29udHJvbChyZXNwb25zZS5oZWFkZXJzLmdldCgnQ2FjaGUtQ29udHJvbCcpIHx8ICcnKTtcbiAgICByZXR1cm4gZXhwaXJlcyA+IERhdGUubm93KCkgJiYgIWNhY2hlQ29udHJvbFsnbm8tY2FjaGUnXTtcbn1cblxuLy8gYEluZmluaXR5YCB0cmlnZ2VycyBhIGNhY2hlIGNoZWNrIGFmdGVyIHRoZSBmaXJzdCB0aWxlIGlzIGxvYWRlZFxuLy8gc28gdGhhdCBhIGNoZWNrIGlzIHJ1biBhdCBsZWFzdCBvbmNlIG9uIGVhY2ggcGFnZSBsb2FkLlxubGV0IGdsb2JhbEVudHJ5Q291bnRlciA9IEluZmluaXR5O1xuXG4vLyBUaGUgY2FjaGUgY2hlY2sgZ2V0cyBydW4gb24gYSB3b3JrZXIuIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdFxuLy8gcHJvZmlsaW5nIHNvbWV0aW1lcyBzaG93cyB0aGlzIGFzIHRha2luZyB1cCBzaWduaWZpY2FudCB0aW1lIG9uIHRoZVxuLy8gdGhyZWFkIGl0IGdldHMgY2FsbGVkIGZyb20uIEFuZCBzb21ldGltZXMgaXQgZG9lc24ndC4gSXQgKm1heSogYmVcbi8vIGZpbmUgdG8gcnVuIHRoaXMgb24gdGhlIG1haW4gdGhyZWFkIGJ1dCBvdXQgb2YgY2F1dGlvbiB0aGlzIGlzIGJlaW5nXG4vLyBkaXNwYXRjaGVkIG9uIGEgd29ya2VyLiBUaGlzIGNhbiBiZSBpbnZlc3RpZ2F0ZWQgZnVydGhlciBpbiB0aGUgZnV0dXJlLlxuZXhwb3J0IGZ1bmN0aW9uIGNhY2hlRW50cnlQb3NzaWJseUFkZGVkKGRpc3BhdGNoZXI6IERpc3BhdGNoZXIpIHtcbiAgICBnbG9iYWxFbnRyeUNvdW50ZXIrKztcbiAgICBpZiAoZ2xvYmFsRW50cnlDb3VudGVyID4gY2FjaGVDaGVja1RocmVzaG9sZCkge1xuICAgICAgICBkaXNwYXRjaGVyLmdldEFjdG9yKCkuc2VuZCgnZW5mb3JjZUNhY2hlU2l6ZUxpbWl0JywgY2FjaGVMaW1pdCk7XG4gICAgICAgIGdsb2JhbEVudHJ5Q291bnRlciA9IDA7XG4gICAgfVxufVxuXG4vLyBydW5zIG9uIHdvcmtlciwgc2VlIGFib3ZlIGNvbW1lbnRcbmV4cG9ydCBmdW5jdGlvbiBlbmZvcmNlQ2FjaGVTaXplTGltaXQobGltaXQ6IG51bWJlcikge1xuICAgIGNhY2hlT3BlbigpO1xuICAgIGlmICghc2hhcmVkQ2FjaGUpIHJldHVybjtcblxuICAgIHNoYXJlZENhY2hlXG4gICAgICAgIC50aGVuKGNhY2hlID0+IHtcbiAgICAgICAgICAgIGNhY2hlLmtleXMoKS50aGVuKGtleXMgPT4ge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGggLSBsaW1pdDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhY2hlLmRlbGV0ZShrZXlzW2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhclRpbGVDYWNoZShjYWxsYmFjaz86IChlcnI6ID9FcnJvcikgPT4gdm9pZCkge1xuICAgIGNvbnN0IHByb21pc2UgPSB3aW5kb3cuY2FjaGVzLmRlbGV0ZShDQUNIRV9OQU1FKTtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgcHJvbWlzZS5jYXRjaChjYWxsYmFjaykudGhlbigoKSA9PiBjYWxsYmFjaygpKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRDYWNoZUxpbWl0cyhsaW1pdDogbnVtYmVyLCBjaGVja1RocmVzaG9sZDogbnVtYmVyKSB7XG4gICAgY2FjaGVMaW1pdCA9IGxpbWl0O1xuICAgIGNhY2hlQ2hlY2tUaHJlc2hvbGQgPSBjaGVja1RocmVzaG9sZDtcbn1cbiIsIi8vIEBmbG93XG5pbXBvcnQgd2luZG93IGZyb20gJy4vd2luZG93JztcblxubGV0IHN1cHBvcnRzT2Zmc2NyZWVuQ2FudmFzOiA/Ym9vbGVhbjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIGlmIChzdXBwb3J0c09mZnNjcmVlbkNhbnZhcyA9PSBudWxsKSB7XG4gICAgICAgIHN1cHBvcnRzT2Zmc2NyZWVuQ2FudmFzID0gd2luZG93Lk9mZnNjcmVlbkNhbnZhcyAmJlxuICAgICAgICAgICAgbmV3IHdpbmRvdy5PZmZzY3JlZW5DYW52YXMoMSwgMSkuZ2V0Q29udGV4dCgnMmQnKSAmJlxuICAgICAgICAgICAgdHlwZW9mIHdpbmRvdy5jcmVhdGVJbWFnZUJpdG1hcCA9PT0gJ2Z1bmN0aW9uJztcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwcG9ydHNPZmZzY3JlZW5DYW52YXM7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgd2luZG93IGZyb20gJy4vd2luZG93JztcbmltcG9ydCB7ZXh0ZW5kLCB3YXJuT25jZSwgaXNXb3JrZXJ9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQge2lzTWFwYm94SFRUUFVSTCwgaGFzQ2FjaGVEZWZlYXRpbmdTa3V9IGZyb20gJy4vbWFwYm94JztcbmltcG9ydCBjb25maWcgZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHtjYWNoZUdldCwgY2FjaGVQdXR9IGZyb20gJy4vdGlsZV9yZXF1ZXN0X2NhY2hlJztcbmltcG9ydCB3ZWJwU3VwcG9ydGVkIGZyb20gJy4vd2VicF9zdXBwb3J0ZWQnO1xuaW1wb3J0IG9mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCBmcm9tICcuL29mZnNjcmVlbl9jYW52YXNfc3VwcG9ydGVkJztcblxuaW1wb3J0IHR5cGUge0NhbGxiYWNrfSBmcm9tICcuLi90eXBlcy9jYWxsYmFjayc7XG5pbXBvcnQgdHlwZSB7Q2FuY2VsYWJsZX0gZnJvbSAnLi4vdHlwZXMvY2FuY2VsYWJsZSc7XG5cbi8qKlxuICogVGhlIHR5cGUgb2YgYSByZXNvdXJjZS5cbiAqIEBwcml2YXRlXG4gKiBAcmVhZG9ubHlcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmNvbnN0IFJlc291cmNlVHlwZSA9IHtcbiAgICBVbmtub3duOiAnVW5rbm93bicsXG4gICAgU3R5bGU6ICdTdHlsZScsXG4gICAgU291cmNlOiAnU291cmNlJyxcbiAgICBUaWxlOiAnVGlsZScsXG4gICAgR2x5cGhzOiAnR2x5cGhzJyxcbiAgICBTcHJpdGVJbWFnZTogJ1Nwcml0ZUltYWdlJyxcbiAgICBTcHJpdGVKU09OOiAnU3ByaXRlSlNPTicsXG4gICAgSW1hZ2U6ICdJbWFnZSdcbn07XG5leHBvcnQge1Jlc291cmNlVHlwZX07XG5cbmlmICh0eXBlb2YgT2JqZWN0LmZyZWV6ZSA9PSAnZnVuY3Rpb24nKSB7XG4gICAgT2JqZWN0LmZyZWV6ZShSZXNvdXJjZVR5cGUpO1xufVxuXG4vKipcbiAqIEEgYFJlcXVlc3RQYXJhbWV0ZXJzYCBvYmplY3QgdG8gYmUgcmV0dXJuZWQgZnJvbSBNYXAub3B0aW9ucy50cmFuc2Zvcm1SZXF1ZXN0IGNhbGxiYWNrcy5cbiAqIEB0eXBlZGVmIHtPYmplY3R9IFJlcXVlc3RQYXJhbWV0ZXJzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gYmUgcmVxdWVzdGVkLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGhlYWRlcnMgVGhlIGhlYWRlcnMgdG8gYmUgc2VudCB3aXRoIHRoZSByZXF1ZXN0LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IG1ldGhvZCBSZXF1ZXN0IG1ldGhvZCBgJ0dFVCcgfCAnUE9TVCcgfCAnUFVUJ2AuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYm9keSBSZXF1ZXN0IGJvZHkuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdHlwZSBSZXNwb25zZSBib2R5IHR5cGUgdG8gYmUgcmV0dXJuZWQgYCdzdHJpbmcnIHwgJ2pzb24nIHwgJ2FycmF5QnVmZmVyJ2AuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY3JlZGVudGlhbHMgYCdzYW1lLW9yaWdpbid8J2luY2x1ZGUnYCBVc2UgJ2luY2x1ZGUnIHRvIHNlbmQgY29va2llcyB3aXRoIGNyb3NzLW9yaWdpbiByZXF1ZXN0cy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gY29sbGVjdFJlc291cmNlVGltaW5nIElmIHRydWUsIFJlc291cmNlIFRpbWluZyBBUEkgaW5mb3JtYXRpb24gd2lsbCBiZSBjb2xsZWN0ZWQgZm9yIHRoZXNlIHRyYW5zZm9ybWVkIHJlcXVlc3RzIGFuZCByZXR1cm5lZCBpbiBhIHJlc291cmNlVGltaW5nIHByb3BlcnR5IG9mIHJlbGV2YW50IGRhdGEgZXZlbnRzLlxuICogQGV4YW1wbGVcbiAqIC8vIHVzZSB0cmFuc2Zvcm1SZXF1ZXN0IHRvIG1vZGlmeSByZXF1ZXN0cyB0aGF0IGJlZ2luIHdpdGggYGh0dHA6Ly9teUhvc3RgXG4gKiB0cmFuc2Zvcm1SZXF1ZXN0OiBmdW5jdGlvbih1cmwsIHJlc291cmNlVHlwZSkge1xuICogIGlmIChyZXNvdXJjZVR5cGUgPT09ICdTb3VyY2UnICYmIHVybC5pbmRleE9mKCdodHRwOi8vbXlIb3N0JykgPiAtMSkge1xuICogICAgcmV0dXJuIHtcbiAqICAgICAgdXJsOiB1cmwucmVwbGFjZSgnaHR0cCcsICdodHRwcycpLFxuICogICAgICBoZWFkZXJzOiB7ICdteS1jdXN0b20taGVhZGVyJzogdHJ1ZSB9LFxuICogICAgICBjcmVkZW50aWFsczogJ2luY2x1ZGUnICAvLyBJbmNsdWRlIGNvb2tpZXMgZm9yIGNyb3NzLW9yaWdpbiByZXF1ZXN0c1xuICogICAgfVxuICogICB9XG4gKiAgfVxuICpcbiAqL1xuZXhwb3J0IHR5cGUgUmVxdWVzdFBhcmFtZXRlcnMgPSB7XG4gICAgdXJsOiBzdHJpbmcsXG4gICAgaGVhZGVycz86IE9iamVjdCxcbiAgICBtZXRob2Q/OiAnR0VUJyB8ICdQT1NUJyB8ICdQVVQnLFxuICAgIGJvZHk/OiBzdHJpbmcsXG4gICAgdHlwZT86ICdzdHJpbmcnIHwgJ2pzb24nIHwgJ2FycmF5QnVmZmVyJyxcbiAgICBjcmVkZW50aWFscz86ICdzYW1lLW9yaWdpbicgfCAnaW5jbHVkZScsXG4gICAgY29sbGVjdFJlc291cmNlVGltaW5nPzogYm9vbGVhblxufTtcblxuZXhwb3J0IHR5cGUgUmVzcG9uc2VDYWxsYmFjazxUPiA9IChlcnJvcjogP0Vycm9yLCBkYXRhOiA/VCwgY2FjaGVDb250cm9sOiA/c3RyaW5nLCBleHBpcmVzOiA/c3RyaW5nKSA9PiB2b2lkO1xuXG5jbGFzcyBBSkFYRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgc3RhdHVzOiBudW1iZXI7XG4gICAgdXJsOiBzdHJpbmc7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBzdGF0dXM6IG51bWJlciwgdXJsOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gNDAxICYmIGlzTWFwYm94SFRUUFVSTCh1cmwpKSB7XG4gICAgICAgICAgICBtZXNzYWdlICs9ICc6IHlvdSBtYXkgaGF2ZSBwcm92aWRlZCBhbiBpbnZhbGlkIE1hcGJveCBhY2Nlc3MgdG9rZW4uIFNlZSBodHRwczovL3d3dy5tYXBib3guY29tL2FwaS1kb2N1bWVudGF0aW9uLyNhY2Nlc3MtdG9rZW5zLWFuZC10b2tlbi1zY29wZXMnO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcbiAgICAgICAgdGhpcy51cmwgPSB1cmw7XG5cbiAgICAgICAgLy8gd29yayBhcm91bmQgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9SaWNoLUhhcnJpcy9idWJsZS9pc3N1ZXMvNDBcbiAgICAgICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cblxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5uYW1lfTogJHt0aGlzLm1lc3NhZ2V9ICgke3RoaXMuc3RhdHVzfSk6ICR7dGhpcy51cmx9YDtcbiAgICB9XG59XG5cbi8vIEVuc3VyZSB0aGF0IHdlJ3JlIHNlbmRpbmcgdGhlIGNvcnJlY3QgcmVmZXJyZXIgZnJvbSBibG9iIFVSTCB3b3JrZXIgYnVuZGxlcy5cbi8vIEZvciBmaWxlcyBsb2FkZWQgZnJvbSB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0sIGBsb2NhdGlvbi5vcmlnaW5gIHdpbGwgYmUgc2V0XG4vLyB0byB0aGUgc3RyaW5nKCEpIFwibnVsbFwiIChGaXJlZm94KSwgb3IgXCJmaWxlOi8vXCIgKENocm9tZSwgU2FmYXJpLCBFZGdlLCBJRSksXG4vLyBhbmQgd2Ugd2lsbCBzZXQgYW4gZW1wdHkgcmVmZXJyZXIuIE90aGVyd2lzZSwgd2UncmUgdXNpbmcgdGhlIGRvY3VtZW50J3MgVVJMLlxuLyogZ2xvYmFsIHNlbGYgKi9cbmV4cG9ydCBjb25zdCBnZXRSZWZlcnJlciA9IGlzV29ya2VyKCkgP1xuICAgICgpID0+IHNlbGYud29ya2VyICYmIHNlbGYud29ya2VyLnJlZmVycmVyIDpcbiAgICAoKSA9PiAod2luZG93LmxvY2F0aW9uLnByb3RvY29sID09PSAnYmxvYjonID8gd2luZG93LnBhcmVudCA6IHdpbmRvdykubG9jYXRpb24uaHJlZjtcblxuLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIGEgVVJMIGlzIGEgZmlsZTovLyBVUkwuIFRoaXMgaXMgb2J2aW91c2x5IHRoZSBjYXNlIGlmIGl0IGJlZ2luc1xuLy8gd2l0aCBmaWxlOi8vLiBSZWxhdGl2ZSBVUkxzIGFyZSBhbHNvIGZpbGU6Ly8gVVJMcyBpZmYgdGhlIG9yaWdpbmFsIGRvY3VtZW50IHdhcyBsb2FkZWRcbi8vIHZpYSBhIGZpbGU6Ly8gVVJMLlxuY29uc3QgaXNGaWxlVVJMID0gdXJsID0+IC9eZmlsZTovLnRlc3QodXJsKSB8fCAoL15maWxlOi8udGVzdChnZXRSZWZlcnJlcigpKSAmJiAhL15cXHcrOi8udGVzdCh1cmwpKTtcblxuZnVuY3Rpb24gbWFrZUZldGNoUmVxdWVzdChyZXF1ZXN0UGFyYW1ldGVyczogUmVxdWVzdFBhcmFtZXRlcnMsIGNhbGxiYWNrOiBSZXNwb25zZUNhbGxiYWNrPGFueT4pOiBDYW5jZWxhYmxlIHtcbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IHdpbmRvdy5BYm9ydENvbnRyb2xsZXIoKTtcbiAgICBjb25zdCByZXF1ZXN0ID0gbmV3IHdpbmRvdy5SZXF1ZXN0KHJlcXVlc3RQYXJhbWV0ZXJzLnVybCwge1xuICAgICAgICBtZXRob2Q6IHJlcXVlc3RQYXJhbWV0ZXJzLm1ldGhvZCB8fCAnR0VUJyxcbiAgICAgICAgYm9keTogcmVxdWVzdFBhcmFtZXRlcnMuYm9keSxcbiAgICAgICAgY3JlZGVudGlhbHM6IHJlcXVlc3RQYXJhbWV0ZXJzLmNyZWRlbnRpYWxzLFxuICAgICAgICBoZWFkZXJzOiByZXF1ZXN0UGFyYW1ldGVycy5oZWFkZXJzLFxuICAgICAgICByZWZlcnJlcjogZ2V0UmVmZXJyZXIoKSxcbiAgICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbFxuICAgIH0pO1xuICAgIGxldCBjb21wbGV0ZSA9IGZhbHNlO1xuICAgIGxldCBhYm9ydGVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBjYWNoZUlnbm9yaW5nU2VhcmNoID0gaGFzQ2FjaGVEZWZlYXRpbmdTa3UocmVxdWVzdC51cmwpO1xuXG4gICAgaWYgKHJlcXVlc3RQYXJhbWV0ZXJzLnR5cGUgPT09ICdqc29uJykge1xuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KCdBY2NlcHQnLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbGlkYXRlT3JGZXRjaCA9IChlcnIsIGNhY2hlZFJlc3BvbnNlLCByZXNwb25zZUlzRnJlc2gpID0+IHtcbiAgICAgICAgaWYgKGFib3J0ZWQpIHJldHVybjtcblxuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAvLyBEbyBmZXRjaCBpbiBjYXNlIG9mIGNhY2hlIGVycm9yLlxuICAgICAgICAgICAgLy8gSFRUUCBwYWdlcyBpbiBFZGdlIHRyaWdnZXIgYSBzZWN1cml0eSBlcnJvciB0aGF0IGNhbiBiZSBpZ25vcmVkLlxuICAgICAgICAgICAgaWYgKGVyci5tZXNzYWdlICE9PSAnU2VjdXJpdHlFcnJvcicpIHtcbiAgICAgICAgICAgICAgICB3YXJuT25jZShlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNhY2hlZFJlc3BvbnNlICYmIHJlc3BvbnNlSXNGcmVzaCkge1xuICAgICAgICAgICAgcmV0dXJuIGZpbmlzaFJlcXVlc3QoY2FjaGVkUmVzcG9uc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNhY2hlZFJlc3BvbnNlKSB7XG4gICAgICAgICAgICAvLyBXZSBjYW4ndCBkbyByZXZhbGlkYXRpb24gd2l0aCAnSWYtTm9uZS1NYXRjaCcgYmVjYXVzZSB0aGVuIHRoZVxuICAgICAgICAgICAgLy8gcmVxdWVzdCBkb2Vzbid0IGhhdmUgc2ltcGxlIGNvcnMgaGVhZGVycy5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlcXVlc3RUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgICAgICB3aW5kb3cuZmV0Y2gocmVxdWVzdCkudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYWNoZWFibGVSZXNwb25zZSA9IGNhY2hlSWdub3JpbmdTZWFyY2ggPyByZXNwb25zZS5jbG9uZSgpIDogbnVsbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmluaXNoUmVxdWVzdChyZXNwb25zZSwgY2FjaGVhYmxlUmVzcG9uc2UsIHJlcXVlc3RUaW1lKTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobmV3IEFKQVhFcnJvcihyZXNwb25zZS5zdGF0dXNUZXh0LCByZXNwb25zZS5zdGF0dXMsIHJlcXVlc3RQYXJhbWV0ZXJzLnVybCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyb3IuY29kZSA9PT0gMjApIHtcbiAgICAgICAgICAgICAgICAvLyBzaWxlbmNlIGV4cGVjdGVkIEFib3J0RXJyb3JcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZmluaXNoUmVxdWVzdCA9IChyZXNwb25zZSwgY2FjaGVhYmxlUmVzcG9uc2UsIHJlcXVlc3RUaW1lKSA9PiB7XG4gICAgICAgIChcbiAgICAgICAgICAgIHJlcXVlc3RQYXJhbWV0ZXJzLnR5cGUgPT09ICdhcnJheUJ1ZmZlcicgPyByZXNwb25zZS5hcnJheUJ1ZmZlcigpIDpcbiAgICAgICAgICAgIHJlcXVlc3RQYXJhbWV0ZXJzLnR5cGUgPT09ICdqc29uJyA/IHJlc3BvbnNlLmpzb24oKSA6XG4gICAgICAgICAgICByZXNwb25zZS50ZXh0KClcbiAgICAgICAgKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICBpZiAoYWJvcnRlZCkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKGNhY2hlYWJsZVJlc3BvbnNlICYmIHJlcXVlc3RUaW1lKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIHJlc3BvbnNlIG5lZWRzIHRvIGJlIGluc2VydGVkIGludG8gdGhlIGNhY2hlIGFmdGVyIGl0IGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgICAgICAgICAgICAvLyBVbnRpbCBpdCBpcyBmdWxseSBsb2FkZWQgdGhlcmUgaXMgYSBjaGFuY2UgaXQgd2lsbCBiZSBhYm9ydGVkLiBBYm9ydGluZyB3aGlsZVxuICAgICAgICAgICAgICAgIC8vIHJlYWRpbmcgdGhlIGJvZHkgY2FuIGNhdXNlIHRoZSBjYWNoZSBpbnNlcnRpb24gdG8gZXJyb3IuIFdlIGNvdWxkIGNhdGNoIHRoaXMgZXJyb3JcbiAgICAgICAgICAgICAgICAvLyBpbiBtb3N0IGJyb3dzZXJzIGJ1dCBpbiBGaXJlZm94IGl0IHNlZW1zIHRvIHNvbWV0aW1lcyBjcmFzaCB0aGUgdGFiLiBBZGRpbmdcbiAgICAgICAgICAgICAgICAvLyBpdCB0byB0aGUgY2FjaGUgaGVyZSBhdm9pZHMgdGhhdCBlcnJvci5cbiAgICAgICAgICAgICAgICBjYWNoZVB1dChyZXF1ZXN0LCBjYWNoZWFibGVSZXNwb25zZSwgcmVxdWVzdFRpbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tcGxldGUgPSB0cnVlO1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0LCByZXNwb25zZS5oZWFkZXJzLmdldCgnQ2FjaGUtQ29udHJvbCcpLCByZXNwb25zZS5oZWFkZXJzLmdldCgnRXhwaXJlcycpKTtcbiAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIGlmICghYWJvcnRlZCkgY2FsbGJhY2sobmV3IEVycm9yKGVyci5tZXNzYWdlKSk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBpZiAoY2FjaGVJZ25vcmluZ1NlYXJjaCkge1xuICAgICAgICBjYWNoZUdldChyZXF1ZXN0LCB2YWxpZGF0ZU9yRmV0Y2gpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbGlkYXRlT3JGZXRjaChudWxsLCBudWxsKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge2NhbmNlbDogKCkgPT4ge1xuICAgICAgICBhYm9ydGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKCFjb21wbGV0ZSkgY29udHJvbGxlci5hYm9ydCgpO1xuICAgIH19O1xufVxuXG5mdW5jdGlvbiBtYWtlWE1MSHR0cFJlcXVlc3QocmVxdWVzdFBhcmFtZXRlcnM6IFJlcXVlc3RQYXJhbWV0ZXJzLCBjYWxsYmFjazogUmVzcG9uc2VDYWxsYmFjazxhbnk+KTogQ2FuY2VsYWJsZSB7XG4gICAgY29uc3QgeGhyOiBYTUxIdHRwUmVxdWVzdCA9IG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIHhoci5vcGVuKHJlcXVlc3RQYXJhbWV0ZXJzLm1ldGhvZCB8fCAnR0VUJywgcmVxdWVzdFBhcmFtZXRlcnMudXJsLCB0cnVlKTtcbiAgICBpZiAocmVxdWVzdFBhcmFtZXRlcnMudHlwZSA9PT0gJ2FycmF5QnVmZmVyJykge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJztcbiAgICB9XG4gICAgZm9yIChjb25zdCBrIGluIHJlcXVlc3RQYXJhbWV0ZXJzLmhlYWRlcnMpIHtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoaywgcmVxdWVzdFBhcmFtZXRlcnMuaGVhZGVyc1trXSk7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0UGFyYW1ldGVycy50eXBlID09PSAnanNvbicpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICd0ZXh0JztcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0FjY2VwdCcsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgfVxuICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSByZXF1ZXN0UGFyYW1ldGVycy5jcmVkZW50aWFscyA9PT0gJ2luY2x1ZGUnO1xuICAgIHhoci5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoeGhyLnN0YXR1c1RleHQpKTtcbiAgICB9O1xuICAgIHhoci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgIGlmICgoKHhoci5zdGF0dXMgPj0gMjAwICYmIHhoci5zdGF0dXMgPCAzMDApIHx8IHhoci5zdGF0dXMgPT09IDApICYmIHhoci5yZXNwb25zZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbGV0IGRhdGE6IG1peGVkID0geGhyLnJlc3BvbnNlO1xuICAgICAgICAgICAgaWYgKHJlcXVlc3RQYXJhbWV0ZXJzLnR5cGUgPT09ICdqc29uJykge1xuICAgICAgICAgICAgICAgIC8vIFdlJ3JlIG1hbnVhbGx5IHBhcnNpbmcgSlNPTiBoZXJlIHRvIGdldCBiZXR0ZXIgZXJyb3IgbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgZGF0YSwgeGhyLmdldFJlc3BvbnNlSGVhZGVyKCdDYWNoZS1Db250cm9sJyksIHhoci5nZXRSZXNwb25zZUhlYWRlcignRXhwaXJlcycpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBBSkFYRXJyb3IoeGhyLnN0YXR1c1RleHQsIHhoci5zdGF0dXMsIHJlcXVlc3RQYXJhbWV0ZXJzLnVybCkpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB4aHIuc2VuZChyZXF1ZXN0UGFyYW1ldGVycy5ib2R5KTtcbiAgICByZXR1cm4ge2NhbmNlbDogKCkgPT4geGhyLmFib3J0KCl9O1xufVxuXG5leHBvcnQgY29uc3QgbWFrZVJlcXVlc3QgPSBmdW5jdGlvbihyZXF1ZXN0UGFyYW1ldGVyczogUmVxdWVzdFBhcmFtZXRlcnMsIGNhbGxiYWNrOiBSZXNwb25zZUNhbGxiYWNrPGFueT4pOiBDYW5jZWxhYmxlIHtcbiAgICAvLyBXZSdyZSB0cnlpbmcgdG8gdXNlIHRoZSBGZXRjaCBBUEkgaWYgcG9zc2libGUuIEhvd2V2ZXIsIGluIHNvbWUgc2l0dWF0aW9ucyB3ZSBjYW4ndCB1c2UgaXQ6XG4gICAgLy8gLSBJRTExIGRvZXNuJ3Qgc3VwcG9ydCBpdCBhdCBhbGwuIEluIHRoaXMgY2FzZSwgd2UgZGlzcGF0Y2ggdGhlIHJlcXVlc3QgdG8gdGhlIG1haW4gdGhyZWFkIHNvXG4gICAgLy8gICB0aGF0IHdlIGNhbiBnZXQgYW4gYWNjcnVhdGUgcmVmZXJyZXIgaGVhZGVyLlxuICAgIC8vIC0gU2FmYXJpIGV4cG9zZXMgd2luZG93LkFib3J0Q29udHJvbGxlciwgYnV0IGl0IGRvZXNuJ3Qgd29yayBhY3R1YWxseSBhYm9ydCBhbnkgcmVxdWVzdHMgaW5cbiAgICAvLyAgIHNvbWUgdmVyc2lvbnMgKHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0OTgwI2MyKVxuICAgIC8vIC0gUmVxdWVzdHMgZm9yIHJlc291cmNlcyB3aXRoIHRoZSBmaWxlOi8vIFVSSSBzY2hlbWUgZG9uJ3Qgd29yayB3aXRoIHRoZSBGZXRjaCBBUEkgZWl0aGVyLiBJblxuICAgIC8vICAgdGhpcyBjYXNlIHdlIHVuY29uZGl0aW9uYWxseSB1c2UgWEhSIG9uIHRoZSBjdXJyZW50IHRocmVhZCBzaW5jZSByZWZlcnJlcnMgZG9uJ3QgbWF0dGVyLlxuICAgIGlmICghaXNGaWxlVVJMKHJlcXVlc3RQYXJhbWV0ZXJzLnVybCkpIHtcbiAgICAgICAgaWYgKHdpbmRvdy5mZXRjaCAmJiB3aW5kb3cuUmVxdWVzdCAmJiB3aW5kb3cuQWJvcnRDb250cm9sbGVyICYmIHdpbmRvdy5SZXF1ZXN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSgnc2lnbmFsJykpIHtcbiAgICAgICAgICAgIHJldHVybiBtYWtlRmV0Y2hSZXF1ZXN0KHJlcXVlc3RQYXJhbWV0ZXJzLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzV29ya2VyKCkgJiYgc2VsZi53b3JrZXIgJiYgc2VsZi53b3JrZXIuYWN0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXVlT25NYWluVGhyZWFkID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBzZWxmLndvcmtlci5hY3Rvci5zZW5kKCdnZXRSZXNvdXJjZScsIHJlcXVlc3RQYXJhbWV0ZXJzLCBjYWxsYmFjaywgdW5kZWZpbmVkLCBxdWV1ZU9uTWFpblRocmVhZCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1ha2VYTUxIdHRwUmVxdWVzdChyZXF1ZXN0UGFyYW1ldGVycywgY2FsbGJhY2spO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEpTT04gPSBmdW5jdGlvbihyZXF1ZXN0UGFyYW1ldGVyczogUmVxdWVzdFBhcmFtZXRlcnMsIGNhbGxiYWNrOiBSZXNwb25zZUNhbGxiYWNrPE9iamVjdD4pOiBDYW5jZWxhYmxlIHtcbiAgICByZXR1cm4gbWFrZVJlcXVlc3QoZXh0ZW5kKHJlcXVlc3RQYXJhbWV0ZXJzLCB7dHlwZTogJ2pzb24nfSksIGNhbGxiYWNrKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzOiBSZXF1ZXN0UGFyYW1ldGVycywgY2FsbGJhY2s6IFJlc3BvbnNlQ2FsbGJhY2s8QXJyYXlCdWZmZXI+KTogQ2FuY2VsYWJsZSB7XG4gICAgcmV0dXJuIG1ha2VSZXF1ZXN0KGV4dGVuZChyZXF1ZXN0UGFyYW1ldGVycywge3R5cGU6ICdhcnJheUJ1ZmZlcid9KSwgY2FsbGJhY2spO1xufTtcblxuZXhwb3J0IGNvbnN0IHBvc3REYXRhID0gZnVuY3Rpb24ocmVxdWVzdFBhcmFtZXRlcnM6IFJlcXVlc3RQYXJhbWV0ZXJzLCBjYWxsYmFjazogUmVzcG9uc2VDYWxsYmFjazxzdHJpbmc+KTogQ2FuY2VsYWJsZSB7XG4gICAgcmV0dXJuIG1ha2VSZXF1ZXN0KGV4dGVuZChyZXF1ZXN0UGFyYW1ldGVycywge21ldGhvZDogJ1BPU1QnfSksIGNhbGxiYWNrKTtcbn07XG5cbmZ1bmN0aW9uIHNhbWVPcmlnaW4odXJsKSB7XG4gICAgY29uc3QgYTogSFRNTEFuY2hvckVsZW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGEuaHJlZiA9IHVybDtcbiAgICByZXR1cm4gYS5wcm90b2NvbCA9PT0gd2luZG93LmRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sICYmIGEuaG9zdCA9PT0gd2luZG93LmRvY3VtZW50LmxvY2F0aW9uLmhvc3Q7XG59XG5cbmNvbnN0IHRyYW5zcGFyZW50UG5nVXJsID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQkNBWUFBQUFmRmNTSkFBQUFDMGxFUVZRWVYyTmdBQUlBQUFVQUFhclZ5RkVBQUFBQVNVVk9SSzVDWUlJPSc7XG5cbmZ1bmN0aW9uIGFycmF5QnVmZmVyVG9JbWFnZShkYXRhOiBBcnJheUJ1ZmZlciwgY2FsbGJhY2s6IChlcnI6ID9FcnJvciwgaW1hZ2U6ID9IVE1MSW1hZ2VFbGVtZW50KSA9PiB2b2lkLCBjYWNoZUNvbnRyb2w6ID9zdHJpbmcsIGV4cGlyZXM6ID9zdHJpbmcpIHtcbiAgICBjb25zdCBpbWc6IEhUTUxJbWFnZUVsZW1lbnQgPSBuZXcgd2luZG93LkltYWdlKCk7XG4gICAgY29uc3QgVVJMID0gd2luZG93LlVSTDtcbiAgICBpbWcub25sb2FkID0gKCkgPT4ge1xuICAgICAgICBjYWxsYmFjayhudWxsLCBpbWcpO1xuICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGltZy5zcmMpO1xuICAgIH07XG4gICAgaW1nLm9uZXJyb3IgPSAoKSA9PiBjYWxsYmFjayhuZXcgRXJyb3IoJ0NvdWxkIG5vdCBsb2FkIGltYWdlLiBQbGVhc2UgbWFrZSBzdXJlIHRvIHVzZSBhIHN1cHBvcnRlZCBpbWFnZSB0eXBlIHN1Y2ggYXMgUE5HIG9yIEpQRUcuIE5vdGUgdGhhdCBTVkdzIGFyZSBub3Qgc3VwcG9ydGVkLicpKTtcbiAgICBjb25zdCBibG9iOiBCbG9iID0gbmV3IHdpbmRvdy5CbG9iKFtuZXcgVWludDhBcnJheShkYXRhKV0sIHt0eXBlOiAnaW1hZ2UvcG5nJ30pO1xuICAgIChpbWc6IGFueSkuY2FjaGVDb250cm9sID0gY2FjaGVDb250cm9sO1xuICAgIChpbWc6IGFueSkuZXhwaXJlcyA9IGV4cGlyZXM7XG4gICAgaW1nLnNyYyA9IGRhdGEuYnl0ZUxlbmd0aCA/IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYikgOiB0cmFuc3BhcmVudFBuZ1VybDtcbn1cblxuZnVuY3Rpb24gYXJyYXlCdWZmZXJUb0ltYWdlQml0bWFwKGRhdGE6IEFycmF5QnVmZmVyLCBjYWxsYmFjazogKGVycjogP0Vycm9yLCBpbWFnZTogP0ltYWdlQml0bWFwKSA9PiB2b2lkKSB7XG4gICAgY29uc3QgYmxvYjogQmxvYiA9IG5ldyB3aW5kb3cuQmxvYihbbmV3IFVpbnQ4QXJyYXkoZGF0YSldLCB7dHlwZTogJ2ltYWdlL3BuZyd9KTtcbiAgICB3aW5kb3cuY3JlYXRlSW1hZ2VCaXRtYXAoYmxvYikudGhlbigoaW1nQml0bWFwKSA9PiB7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIGltZ0JpdG1hcCk7XG4gICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKGBDb3VsZCBub3QgbG9hZCBpbWFnZSBiZWNhdXNlIG9mICR7ZS5tZXNzYWdlfS4gUGxlYXNlIG1ha2Ugc3VyZSB0byB1c2UgYSBzdXBwb3J0ZWQgaW1hZ2UgdHlwZSBzdWNoIGFzIFBORyBvciBKUEVHLiBOb3RlIHRoYXQgU1ZHcyBhcmUgbm90IHN1cHBvcnRlZC5gKSk7XG4gICAgfSk7XG59XG5cbmxldCBpbWFnZVF1ZXVlLCBudW1JbWFnZVJlcXVlc3RzO1xuZXhwb3J0IGNvbnN0IHJlc2V0SW1hZ2VSZXF1ZXN0UXVldWUgPSAoKSA9PiB7XG4gICAgaW1hZ2VRdWV1ZSA9IFtdO1xuICAgIG51bUltYWdlUmVxdWVzdHMgPSAwO1xufTtcbnJlc2V0SW1hZ2VSZXF1ZXN0UXVldWUoKTtcblxuZXhwb3J0IGNvbnN0IGdldEltYWdlID0gZnVuY3Rpb24ocmVxdWVzdFBhcmFtZXRlcnM6IFJlcXVlc3RQYXJhbWV0ZXJzLCBjYWxsYmFjazogQ2FsbGJhY2s8SFRNTEltYWdlRWxlbWVudCB8IEltYWdlQml0bWFwPik6IENhbmNlbGFibGUge1xuICAgIGlmICh3ZWJwU3VwcG9ydGVkLnN1cHBvcnRlZCkge1xuICAgICAgICBpZiAoIXJlcXVlc3RQYXJhbWV0ZXJzLmhlYWRlcnMpIHtcbiAgICAgICAgICAgIHJlcXVlc3RQYXJhbWV0ZXJzLmhlYWRlcnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICByZXF1ZXN0UGFyYW1ldGVycy5oZWFkZXJzLmFjY2VwdCA9ICdpbWFnZS93ZWJwLCovKic7XG4gICAgfVxuXG4gICAgLy8gbGltaXQgY29uY3VycmVudCBpbWFnZSBsb2FkcyB0byBoZWxwIHdpdGggcmFzdGVyIHNvdXJjZXMgcGVyZm9ybWFuY2Ugb24gYmlnIHNjcmVlbnNcbiAgICBpZiAobnVtSW1hZ2VSZXF1ZXN0cyA+PSBjb25maWcuTUFYX1BBUkFMTEVMX0lNQUdFX1JFUVVFU1RTKSB7XG4gICAgICAgIGNvbnN0IHF1ZXVlZCA9IHtcbiAgICAgICAgICAgIHJlcXVlc3RQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgY2FsbGJhY2ssXG4gICAgICAgICAgICBjYW5jZWxsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgY2FuY2VsKCkgeyB0aGlzLmNhbmNlbGxlZCA9IHRydWU7IH1cbiAgICAgICAgfTtcbiAgICAgICAgaW1hZ2VRdWV1ZS5wdXNoKHF1ZXVlZCk7XG4gICAgICAgIHJldHVybiBxdWV1ZWQ7XG4gICAgfVxuICAgIG51bUltYWdlUmVxdWVzdHMrKztcblxuICAgIGxldCBhZHZhbmNlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGFkdmFuY2VJbWFnZVJlcXVlc3RRdWV1ZSA9ICgpID0+IHtcbiAgICAgICAgaWYgKGFkdmFuY2VkKSByZXR1cm47XG4gICAgICAgIGFkdmFuY2VkID0gdHJ1ZTtcbiAgICAgICAgbnVtSW1hZ2VSZXF1ZXN0cy0tO1xuICAgICAgICBhc3NlcnQobnVtSW1hZ2VSZXF1ZXN0cyA+PSAwKTtcbiAgICAgICAgd2hpbGUgKGltYWdlUXVldWUubGVuZ3RoICYmIG51bUltYWdlUmVxdWVzdHMgPCBjb25maWcuTUFYX1BBUkFMTEVMX0lNQUdFX1JFUVVFU1RTKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSBpbWFnZVF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgICBjb25zdCB7cmVxdWVzdFBhcmFtZXRlcnMsIGNhbGxiYWNrLCBjYW5jZWxsZWR9ID0gcmVxdWVzdDtcbiAgICAgICAgICAgIGlmICghY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5jYW5jZWwgPSBnZXRJbWFnZShyZXF1ZXN0UGFyYW1ldGVycywgY2FsbGJhY2spLmNhbmNlbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvLyByZXF1ZXN0IHRoZSBpbWFnZSB3aXRoIFhIUiB0byB3b3JrIGFyb3VuZCBjYWNoaW5nIGlzc3Vlc1xuICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvMTQ3MFxuICAgIGNvbnN0IHJlcXVlc3QgPSBnZXRBcnJheUJ1ZmZlcihyZXF1ZXN0UGFyYW1ldGVycywgKGVycjogP0Vycm9yLCBkYXRhOiA/QXJyYXlCdWZmZXIsIGNhY2hlQ29udHJvbDogP3N0cmluZywgZXhwaXJlczogP3N0cmluZykgPT4ge1xuXG4gICAgICAgIGFkdmFuY2VJbWFnZVJlcXVlc3RRdWV1ZSgpO1xuXG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YSkge1xuICAgICAgICAgICAgaWYgKG9mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCgpKSB7XG4gICAgICAgICAgICAgICAgYXJyYXlCdWZmZXJUb0ltYWdlQml0bWFwKGRhdGEsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYXJyYXlCdWZmZXJUb0ltYWdlKGRhdGEsIGNhbGxiYWNrLCBjYWNoZUNvbnRyb2wsIGV4cGlyZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBjYW5jZWw6ICgpID0+IHtcbiAgICAgICAgICAgIHJlcXVlc3QuY2FuY2VsKCk7XG4gICAgICAgICAgICBhZHZhbmNlSW1hZ2VSZXF1ZXN0UXVldWUoKTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VmlkZW8gPSBmdW5jdGlvbih1cmxzOiBBcnJheTxzdHJpbmc+LCBjYWxsYmFjazogQ2FsbGJhY2s8SFRNTFZpZGVvRWxlbWVudD4pOiBDYW5jZWxhYmxlIHtcbiAgICBjb25zdCB2aWRlbzogSFRNTFZpZGVvRWxlbWVudCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpO1xuICAgIHZpZGVvLm11dGVkID0gdHJ1ZTtcbiAgICB2aWRlby5vbmxvYWRzdGFydCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBjYWxsYmFjayhudWxsLCB2aWRlbyk7XG4gICAgfTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHVybHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgczogSFRNTFNvdXJjZUVsZW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG4gICAgICAgIGlmICghc2FtZU9yaWdpbih1cmxzW2ldKSkge1xuICAgICAgICAgICAgdmlkZW8uY3Jvc3NPcmlnaW4gPSAnQW5vbnltb3VzJztcbiAgICAgICAgfVxuICAgICAgICBzLnNyYyA9IHVybHNbaV07XG4gICAgICAgIHZpZGVvLmFwcGVuZENoaWxkKHMpO1xuICAgIH1cbiAgICByZXR1cm4ge2NhbmNlbDogKCkgPT4ge319O1xufTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7ZXh0ZW5kfSBmcm9tICcuL3V0aWwnO1xuXG50eXBlIExpc3RlbmVyID0gKE9iamVjdCkgPT4gYW55O1xudHlwZSBMaXN0ZW5lcnMgPSB7W186IHN0cmluZ106IEFycmF5PExpc3RlbmVyPiB9O1xuXG5mdW5jdGlvbiBfYWRkRXZlbnRMaXN0ZW5lcih0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiBMaXN0ZW5lciwgbGlzdGVuZXJMaXN0OiBMaXN0ZW5lcnMpIHtcbiAgICBjb25zdCBsaXN0ZW5lckV4aXN0cyA9IGxpc3RlbmVyTGlzdFt0eXBlXSAmJiBsaXN0ZW5lckxpc3RbdHlwZV0uaW5kZXhPZihsaXN0ZW5lcikgIT09IC0xO1xuICAgIGlmICghbGlzdGVuZXJFeGlzdHMpIHtcbiAgICAgICAgbGlzdGVuZXJMaXN0W3R5cGVdID0gbGlzdGVuZXJMaXN0W3R5cGVdIHx8IFtdO1xuICAgICAgICBsaXN0ZW5lckxpc3RbdHlwZV0ucHVzaChsaXN0ZW5lcik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBfcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiBMaXN0ZW5lciwgbGlzdGVuZXJMaXN0OiBMaXN0ZW5lcnMpIHtcbiAgICBpZiAobGlzdGVuZXJMaXN0ICYmIGxpc3RlbmVyTGlzdFt0eXBlXSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IGxpc3RlbmVyTGlzdFt0eXBlXS5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgbGlzdGVuZXJMaXN0W3R5cGVdLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFdmVudCB7XG4gICAgK3R5cGU6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKHR5cGU6IHN0cmluZywgZGF0YTogT2JqZWN0ID0ge30pIHtcbiAgICAgICAgZXh0ZW5kKHRoaXMsIGRhdGEpO1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIH1cbn1cblxuaW50ZXJmYWNlIEVycm9yTGlrZSB7XG4gICAgbWVzc2FnZTogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgRXJyb3JFdmVudCBleHRlbmRzIEV2ZW50IHtcbiAgICBlcnJvcjogRXJyb3JMaWtlO1xuXG4gICAgY29uc3RydWN0b3IoZXJyb3I6IEVycm9yTGlrZSwgZGF0YTogT2JqZWN0ID0ge30pIHtcbiAgICAgICAgc3VwZXIoJ2Vycm9yJywgZXh0ZW5kKHtlcnJvcn0sIGRhdGEpKTtcbiAgICB9XG59XG5cbi8qKlxuICogTWV0aG9kcyBtaXhlZCBpbiB0byBvdGhlciBjbGFzc2VzIGZvciBldmVudCBjYXBhYmlsaXRpZXMuXG4gKlxuICogQG1peGluIEV2ZW50ZWRcbiAqL1xuZXhwb3J0IGNsYXNzIEV2ZW50ZWQge1xuICAgIF9saXN0ZW5lcnM6IExpc3RlbmVycztcbiAgICBfb25lVGltZUxpc3RlbmVyczogTGlzdGVuZXJzO1xuICAgIF9ldmVudGVkUGFyZW50OiA/RXZlbnRlZDtcbiAgICBfZXZlbnRlZFBhcmVudERhdGE6ID8oT2JqZWN0IHwgKCkgPT4gT2JqZWN0KTtcblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBsaXN0ZW5lciB0byBhIHNwZWNpZmllZCBldmVudCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgVGhlIGV2ZW50IHR5cGUgdG8gYWRkIGEgbGlzdGVuIGZvci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciBUaGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGV2ZW50IGlzIGZpcmVkLlxuICAgICAqICAgVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHRoZSBkYXRhIG9iamVjdCBwYXNzZWQgdG8gYGZpcmVgLFxuICAgICAqICAgZXh0ZW5kZWQgd2l0aCBgdGFyZ2V0YCBhbmQgYHR5cGVgIHByb3BlcnRpZXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gYHRoaXNgXG4gICAgICovXG4gICAgb24odHlwZTogKiwgbGlzdGVuZXI6IExpc3RlbmVyKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2xpc3RlbmVycyA9IHRoaXMuX2xpc3RlbmVycyB8fCB7fTtcbiAgICAgICAgX2FkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIHRoaXMuX2xpc3RlbmVycyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFRoZSBldmVudCB0eXBlIHRvIHJlbW92ZSBsaXN0ZW5lcnMgZm9yLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byByZW1vdmUuXG4gICAgICogQHJldHVybnMge09iamVjdH0gYHRoaXNgXG4gICAgICovXG4gICAgb2ZmKHR5cGU6ICosIGxpc3RlbmVyOiBMaXN0ZW5lcikge1xuICAgICAgICBfcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgdGhpcy5fbGlzdGVuZXJzKTtcbiAgICAgICAgX3JlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIHRoaXMuX29uZVRpbWVMaXN0ZW5lcnMpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBsaXN0ZW5lciB0aGF0IHdpbGwgYmUgY2FsbGVkIG9ubHkgb25jZSB0byBhIHNwZWNpZmllZCBldmVudCB0eXBlLlxuICAgICAqXG4gICAgICogVGhlIGxpc3RlbmVyIHdpbGwgYmUgY2FsbGVkIGZpcnN0IHRpbWUgdGhlIGV2ZW50IGZpcmVzIGFmdGVyIHRoZSBsaXN0ZW5lciBpcyByZWdpc3RlcmVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgVGhlIGV2ZW50IHR5cGUgdG8gbGlzdGVuIGZvci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciBUaGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGV2ZW50IGlzIGZpcmVkIHRoZSBmaXJzdCB0aW1lLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IGB0aGlzYFxuICAgICAqL1xuICAgIG9uY2UodHlwZTogKiwgbGlzdGVuZXI6IExpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMuX29uZVRpbWVMaXN0ZW5lcnMgPSB0aGlzLl9vbmVUaW1lTGlzdGVuZXJzIHx8IHt9O1xuICAgICAgICBfYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgdGhpcy5fb25lVGltZUxpc3RlbmVycyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZmlyZShldmVudDogRXZlbnQsIHByb3BlcnRpZXM/OiBPYmplY3QpIHtcbiAgICAgICAgLy8gQ29tcGF0aWJpbGl0eSB3aXRoICh0eXBlOiBzdHJpbmcsIHByb3BlcnRpZXM6IE9iamVjdCkgc2lnbmF0dXJlIGZyb20gcHJldmlvdXMgdmVyc2lvbnMuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvNjUyMixcbiAgICAgICAgLy8gICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWRyYXcvaXNzdWVzLzc2NlxuICAgICAgICBpZiAodHlwZW9mIGV2ZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZXZlbnQgPSBuZXcgRXZlbnQoZXZlbnQsIHByb3BlcnRpZXMgfHwge30pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdHlwZSA9IGV2ZW50LnR5cGU7XG5cbiAgICAgICAgaWYgKHRoaXMubGlzdGVucyh0eXBlKSkge1xuICAgICAgICAgICAgKGV2ZW50OiBhbnkpLnRhcmdldCA9IHRoaXM7XG5cbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBhZGRpbmcgb3IgcmVtb3ZpbmcgbGlzdGVuZXJzIGluc2lkZSBvdGhlciBsaXN0ZW5lcnMgd29uJ3QgY2F1c2UgYW4gaW5maW5pdGUgbG9vcFxuICAgICAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gdGhpcy5fbGlzdGVuZXJzICYmIHRoaXMuX2xpc3RlbmVyc1t0eXBlXSA/IHRoaXMuX2xpc3RlbmVyc1t0eXBlXS5zbGljZSgpIDogW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIGxpc3RlbmVycykge1xuICAgICAgICAgICAgICAgIGxpc3RlbmVyLmNhbGwodGhpcywgZXZlbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBvbmVUaW1lTGlzdGVuZXJzID0gdGhpcy5fb25lVGltZUxpc3RlbmVycyAmJiB0aGlzLl9vbmVUaW1lTGlzdGVuZXJzW3R5cGVdID8gdGhpcy5fb25lVGltZUxpc3RlbmVyc1t0eXBlXS5zbGljZSgpIDogW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIG9uZVRpbWVMaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgICAgICBfcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgdGhpcy5fb25lVGltZUxpc3RlbmVycyk7XG4gICAgICAgICAgICAgICAgbGlzdGVuZXIuY2FsbCh0aGlzLCBldmVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX2V2ZW50ZWRQYXJlbnQ7XG4gICAgICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICAgICAgZXh0ZW5kKFxuICAgICAgICAgICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHRoaXMuX2V2ZW50ZWRQYXJlbnREYXRhID09PSAnZnVuY3Rpb24nID8gdGhpcy5fZXZlbnRlZFBhcmVudERhdGEoKSA6IHRoaXMuX2V2ZW50ZWRQYXJlbnREYXRhXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBwYXJlbnQuZmlyZShldmVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgLy8gVG8gZW5zdXJlIHRoYXQgbm8gZXJyb3IgZXZlbnRzIGFyZSBkcm9wcGVkLCBwcmludCB0aGVtIHRvIHRoZVxuICAgICAgICAvLyBjb25zb2xlIGlmIHRoZXkgaGF2ZSBubyBsaXN0ZW5lcnMuXG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBFcnJvckV2ZW50KSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGV2ZW50LmVycm9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSB0cnVlIGlmIHRoaXMgaW5zdGFuY2Ugb2YgRXZlbnRlZCBvciBhbnkgZm9yd2FyZGVlZCBpbnN0YW5jZXMgb2YgRXZlbnRlZCBoYXZlIGEgbGlzdGVuZXIgZm9yIHRoZSBzcGVjaWZpZWQgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFRoZSBldmVudCB0eXBlXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgcmVnaXN0ZXJlZCBsaXN0ZW5lciBmb3Igc3BlY2lmaWVkIGV2ZW50IHR5cGUsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBsaXN0ZW5zKHR5cGU6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHRoaXMuX2xpc3RlbmVycyAmJiB0aGlzLl9saXN0ZW5lcnNbdHlwZV0gJiYgdGhpcy5fbGlzdGVuZXJzW3R5cGVdLmxlbmd0aCA+IDApIHx8XG4gICAgICAgICAgICAodGhpcy5fb25lVGltZUxpc3RlbmVycyAmJiB0aGlzLl9vbmVUaW1lTGlzdGVuZXJzW3R5cGVdICYmIHRoaXMuX29uZVRpbWVMaXN0ZW5lcnNbdHlwZV0ubGVuZ3RoID4gMCkgfHxcbiAgICAgICAgICAgICh0aGlzLl9ldmVudGVkUGFyZW50ICYmIHRoaXMuX2V2ZW50ZWRQYXJlbnQubGlzdGVucyh0eXBlKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCdWJibGUgYWxsIGV2ZW50cyBmaXJlZCBieSB0aGlzIGluc3RhbmNlIG9mIEV2ZW50ZWQgdG8gdGhpcyBwYXJlbnQgaW5zdGFuY2Ugb2YgRXZlbnRlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHJldHVybnMge09iamVjdH0gYHRoaXNgXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBzZXRFdmVudGVkUGFyZW50KHBhcmVudDogP0V2ZW50ZWQsIGRhdGE/OiBPYmplY3QgfCAoKSA9PiBPYmplY3QpIHtcbiAgICAgICAgdGhpcy5fZXZlbnRlZFBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgdGhpcy5fZXZlbnRlZFBhcmVudERhdGEgPSBkYXRhO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbi8vIE5vdGU6IERvIG5vdCBpbmhlcml0IGZyb20gRXJyb3IuIEl0IGJyZWFrcyB3aGVuIHRyYW5zcGlsaW5nIHRvIEVTNS5cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmFsaWRhdGlvbkVycm9yIHtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgaWRlbnRpZmllcjogP3N0cmluZztcbiAgICBsaW5lOiA/bnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3Ioa2V5OiA/c3RyaW5nLCB2YWx1ZTogP3sgX19saW5lX186IG51bWJlciB9LCBtZXNzYWdlOiBzdHJpbmcsIGlkZW50aWZpZXI6ID9zdHJpbmcpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gKGtleSA/IGAke2tleX06IGAgOiAnJykgKyBtZXNzYWdlO1xuICAgICAgICBpZiAoaWRlbnRpZmllcikgdGhpcy5pZGVudGlmaWVyID0gaWRlbnRpZmllcjtcblxuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS5fX2xpbmVfXykge1xuICAgICAgICAgICAgdGhpcy5saW5lID0gdmFsdWUuX19saW5lX187XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJcbmltcG9ydCBWYWxpZGF0aW9uRXJyb3IgZnJvbSAnLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvcic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlQ29uc3RhbnRzKG9wdGlvbnMpIHtcbiAgICBjb25zdCBrZXkgPSBvcHRpb25zLmtleTtcbiAgICBjb25zdCBjb25zdGFudHMgPSBvcHRpb25zLnZhbHVlO1xuXG4gICAgaWYgKGNvbnN0YW50cykge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCBjb25zdGFudHMsICdjb25zdGFudHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQgYXMgb2YgdjgnKV07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChvdXRwdXQ6IGFueSwgLi4uaW5wdXRzOiBBcnJheTxhbnk+KSB7XG4gICAgZm9yIChjb25zdCBpbnB1dCBvZiBpbnB1dHMpIHtcbiAgICAgICAgZm9yIChjb25zdCBrIGluIGlucHV0KSB7XG4gICAgICAgICAgICBvdXRwdXRba10gPSBpbnB1dFtrXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xufVxuIiwiLy8gQGZsb3dcblxuLy8gVHVybiBqc29ubGludC1saW5lcy1wcmltaXRpdmVzIG9iamVjdHMgaW50byBwcmltaXRpdmUgb2JqZWN0c1xuZXhwb3J0IGZ1bmN0aW9uIHVuYnVuZGxlKHZhbHVlOiBtaXhlZCkge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE51bWJlciB8fCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZyB8fCB2YWx1ZSBpbnN0YW5jZW9mIEJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlT2YoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVlcFVuYnVuZGxlKHZhbHVlOiBtaXhlZCk6IG1peGVkIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLm1hcChkZWVwVW5idW5kbGUpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBPYmplY3QgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIE51bWJlciB8fCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZyB8fCB2YWx1ZSBpbnN0YW5jZW9mIEJvb2xlYW4pKSB7XG4gICAgICAgIGNvbnN0IHVuYnVuZGxlZFZhbHVlOiB7IFtrZXk6IHN0cmluZ106IG1peGVkIH0gPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgIHVuYnVuZGxlZFZhbHVlW2tleV0gPSBkZWVwVW5idW5kbGUodmFsdWVba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuYnVuZGxlZFZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiB1bmJ1bmRsZSh2YWx1ZSk7XG59XG4iLCIvLyBAZmxvd1xuXG5jbGFzcyBQYXJzaW5nRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgbWVzc2FnZTogc3RyaW5nO1xuICAgIGNvbnN0cnVjdG9yKGtleTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIHRoaXMua2V5ID0ga2V5O1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUGFyc2luZ0Vycm9yO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4vZXhwcmVzc2lvbic7XG5cbi8qKlxuICogVHJhY2tzIGBsZXRgIGJpbmRpbmdzIGR1cmluZyBleHByZXNzaW9uIHBhcnNpbmcuXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTY29wZSB7XG4gICAgcGFyZW50OiA/U2NvcGU7XG4gICAgYmluZGluZ3M6IHtbXzogc3RyaW5nXTogRXhwcmVzc2lvbn07XG4gICAgY29uc3RydWN0b3IocGFyZW50PzogU2NvcGUsIGJpbmRpbmdzOiBBcnJheTxbc3RyaW5nLCBFeHByZXNzaW9uXT4gPSBbXSkge1xuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgdGhpcy5iaW5kaW5ncyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IFtuYW1lLCBleHByZXNzaW9uXSBvZiBiaW5kaW5ncykge1xuICAgICAgICAgICAgdGhpcy5iaW5kaW5nc1tuYW1lXSA9IGV4cHJlc3Npb247XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25jYXQoYmluZGluZ3M6IEFycmF5PFtzdHJpbmcsIEV4cHJlc3Npb25dPikge1xuICAgICAgICByZXR1cm4gbmV3IFNjb3BlKHRoaXMsIGJpbmRpbmdzKTtcbiAgICB9XG5cbiAgICBnZXQobmFtZTogc3RyaW5nKTogRXhwcmVzc2lvbiB7XG4gICAgICAgIGlmICh0aGlzLmJpbmRpbmdzW25hbWVdKSB7IHJldHVybiB0aGlzLmJpbmRpbmdzW25hbWVdOyB9XG4gICAgICAgIGlmICh0aGlzLnBhcmVudCkgeyByZXR1cm4gdGhpcy5wYXJlbnQuZ2V0KG5hbWUpOyB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtuYW1lfSBub3QgZm91bmQgaW4gc2NvcGUuYCk7XG4gICAgfVxuXG4gICAgaGFzKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5iaW5kaW5nc1tuYW1lXSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudCA/IHRoaXMucGFyZW50LmhhcyhuYW1lKSA6IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2NvcGU7XG4iLCIvLyBAZmxvd1xuXG5leHBvcnQgdHlwZSBOdWxsVHlwZVQgPSB7IGtpbmQ6ICdudWxsJyB9O1xuZXhwb3J0IHR5cGUgTnVtYmVyVHlwZVQgPSB7IGtpbmQ6ICdudW1iZXInIH07XG5leHBvcnQgdHlwZSBTdHJpbmdUeXBlVCA9IHsga2luZDogJ3N0cmluZycgfTtcbmV4cG9ydCB0eXBlIEJvb2xlYW5UeXBlVCA9IHsga2luZDogJ2Jvb2xlYW4nIH07XG5leHBvcnQgdHlwZSBDb2xvclR5cGVUID0geyBraW5kOiAnY29sb3InIH07XG5leHBvcnQgdHlwZSBPYmplY3RUeXBlVCA9IHsga2luZDogJ29iamVjdCcgfTtcbmV4cG9ydCB0eXBlIFZhbHVlVHlwZVQgPSB7IGtpbmQ6ICd2YWx1ZScgfTtcbmV4cG9ydCB0eXBlIEVycm9yVHlwZVQgPSB7IGtpbmQ6ICdlcnJvcicgfTtcbmV4cG9ydCB0eXBlIENvbGxhdG9yVHlwZVQgPSB7IGtpbmQ6ICdjb2xsYXRvcicgfTtcbmV4cG9ydCB0eXBlIEZvcm1hdHRlZFR5cGVUID0geyBraW5kOiAnZm9ybWF0dGVkJyB9O1xuZXhwb3J0IHR5cGUgUmVzb2x2ZWRJbWFnZVR5cGVUID0geyBraW5kOiAncmVzb2x2ZWRJbWFnZScgfTtcblxuZXhwb3J0IHR5cGUgRXZhbHVhdGlvbktpbmQgPSAnY29uc3RhbnQnIHwgJ3NvdXJjZScgfCAnY2FtZXJhJyB8ICdjb21wb3NpdGUnO1xuXG5leHBvcnQgdHlwZSBUeXBlID1cbiAgICBOdWxsVHlwZVQgfFxuICAgIE51bWJlclR5cGVUIHxcbiAgICBTdHJpbmdUeXBlVCB8XG4gICAgQm9vbGVhblR5cGVUIHxcbiAgICBDb2xvclR5cGVUIHxcbiAgICBPYmplY3RUeXBlVCB8XG4gICAgVmFsdWVUeXBlVCB8XG4gICAgQXJyYXlUeXBlIHwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgIEVycm9yVHlwZVQgfFxuICAgIENvbGxhdG9yVHlwZVQgfFxuICAgIEZvcm1hdHRlZFR5cGVUIHxcbiAgICBSZXNvbHZlZEltYWdlVHlwZVRcblxuZXhwb3J0IHR5cGUgQXJyYXlUeXBlID0ge1xuICAgIGtpbmQ6ICdhcnJheScsXG4gICAgaXRlbVR5cGU6IFR5cGUsXG4gICAgTjogP251bWJlclxufVxuXG5leHBvcnQgdHlwZSBOYXRpdmVUeXBlID0gJ251bWJlcicgfCAnc3RyaW5nJyB8ICdib29sZWFuJyB8ICdudWxsJyB8ICdhcnJheScgfCAnb2JqZWN0J1xuXG5leHBvcnQgY29uc3QgTnVsbFR5cGUgPSB7a2luZDogJ251bGwnfTtcbmV4cG9ydCBjb25zdCBOdW1iZXJUeXBlID0ge2tpbmQ6ICdudW1iZXInfTtcbmV4cG9ydCBjb25zdCBTdHJpbmdUeXBlID0ge2tpbmQ6ICdzdHJpbmcnfTtcbmV4cG9ydCBjb25zdCBCb29sZWFuVHlwZSA9IHtraW5kOiAnYm9vbGVhbid9O1xuZXhwb3J0IGNvbnN0IENvbG9yVHlwZSA9IHtraW5kOiAnY29sb3InfTtcbmV4cG9ydCBjb25zdCBPYmplY3RUeXBlID0ge2tpbmQ6ICdvYmplY3QnfTtcbmV4cG9ydCBjb25zdCBWYWx1ZVR5cGUgPSB7a2luZDogJ3ZhbHVlJ307XG5leHBvcnQgY29uc3QgRXJyb3JUeXBlID0ge2tpbmQ6ICdlcnJvcid9O1xuZXhwb3J0IGNvbnN0IENvbGxhdG9yVHlwZSA9IHtraW5kOiAnY29sbGF0b3InfTtcbmV4cG9ydCBjb25zdCBGb3JtYXR0ZWRUeXBlID0ge2tpbmQ6ICdmb3JtYXR0ZWQnfTtcbmV4cG9ydCBjb25zdCBSZXNvbHZlZEltYWdlVHlwZSA9IHtraW5kOiAncmVzb2x2ZWRJbWFnZSd9O1xuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXkoaXRlbVR5cGU6IFR5cGUsIE46ID9udW1iZXIpOiBBcnJheVR5cGUge1xuICAgIHJldHVybiB7XG4gICAgICAgIGtpbmQ6ICdhcnJheScsXG4gICAgICAgIGl0ZW1UeXBlLFxuICAgICAgICBOXG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvU3RyaW5nKHR5cGU6IFR5cGUpOiBzdHJpbmcge1xuICAgIGlmICh0eXBlLmtpbmQgPT09ICdhcnJheScpIHtcbiAgICAgICAgY29uc3QgaXRlbVR5cGUgPSB0b1N0cmluZyh0eXBlLml0ZW1UeXBlKTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB0eXBlLk4gPT09ICdudW1iZXInID9cbiAgICAgICAgICAgIGBhcnJheTwke2l0ZW1UeXBlfSwgJHt0eXBlLk59PmAgOlxuICAgICAgICAgICAgdHlwZS5pdGVtVHlwZS5raW5kID09PSAndmFsdWUnID8gJ2FycmF5JyA6IGBhcnJheTwke2l0ZW1UeXBlfT5gO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0eXBlLmtpbmQ7XG4gICAgfVxufVxuXG5jb25zdCB2YWx1ZU1lbWJlclR5cGVzID0gW1xuICAgIE51bGxUeXBlLFxuICAgIE51bWJlclR5cGUsXG4gICAgU3RyaW5nVHlwZSxcbiAgICBCb29sZWFuVHlwZSxcbiAgICBDb2xvclR5cGUsXG4gICAgRm9ybWF0dGVkVHlwZSxcbiAgICBPYmplY3RUeXBlLFxuICAgIGFycmF5KFZhbHVlVHlwZSksXG4gICAgUmVzb2x2ZWRJbWFnZVR5cGVcbl07XG5cbi8qKlxuICogUmV0dXJucyBudWxsIGlmIGB0YCBpcyBhIHN1YnR5cGUgb2YgYGV4cGVjdGVkYDsgb3RoZXJ3aXNlIHJldHVybnMgYW5cbiAqIGVycm9yIG1lc3NhZ2UuXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tTdWJ0eXBlKGV4cGVjdGVkOiBUeXBlLCB0OiBUeXBlKTogP3N0cmluZyB7XG4gICAgaWYgKHQua2luZCA9PT0gJ2Vycm9yJykge1xuICAgICAgICAvLyBFcnJvciBpcyBhIHN1YnR5cGUgb2YgZXZlcnkgdHlwZVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2UgaWYgKGV4cGVjdGVkLmtpbmQgPT09ICdhcnJheScpIHtcbiAgICAgICAgaWYgKHQua2luZCA9PT0gJ2FycmF5JyAmJlxuICAgICAgICAgICAgKCh0Lk4gPT09IDAgJiYgdC5pdGVtVHlwZS5raW5kID09PSAndmFsdWUnKSB8fCAhY2hlY2tTdWJ0eXBlKGV4cGVjdGVkLml0ZW1UeXBlLCB0Lml0ZW1UeXBlKSkgJiZcbiAgICAgICAgICAgICh0eXBlb2YgZXhwZWN0ZWQuTiAhPT0gJ251bWJlcicgfHwgZXhwZWN0ZWQuTiA9PT0gdC5OKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV4cGVjdGVkLmtpbmQgPT09IHQua2luZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2UgaWYgKGV4cGVjdGVkLmtpbmQgPT09ICd2YWx1ZScpIHtcbiAgICAgICAgZm9yIChjb25zdCBtZW1iZXJUeXBlIG9mIHZhbHVlTWVtYmVyVHlwZXMpIHtcbiAgICAgICAgICAgIGlmICghY2hlY2tTdWJ0eXBlKG1lbWJlclR5cGUsIHQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYEV4cGVjdGVkICR7dG9TdHJpbmcoZXhwZWN0ZWQpfSBidXQgZm91bmQgJHt0b1N0cmluZyh0KX0gaW5zdGVhZC5gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFR5cGUocHJvdmlkZWQ6IFR5cGUsIGFsbG93ZWRUeXBlczogQXJyYXk8VHlwZT4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gYWxsb3dlZFR5cGVzLnNvbWUodCA9PiB0LmtpbmQgPT09IHByb3ZpZGVkLmtpbmQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZE5hdGl2ZVR5cGUocHJvdmlkZWQ6IGFueSwgYWxsb3dlZFR5cGVzOiBBcnJheTxOYXRpdmVUeXBlPik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhbGxvd2VkVHlwZXMuc29tZSh0ID0+IHtcbiAgICAgICAgaWYgKHQgPT09ICdudWxsJykge1xuICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVkID09PSBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKHQgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHByb3ZpZGVkKTtcbiAgICAgICAgfSBlbHNlIGlmICh0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVkICYmICFBcnJheS5pc0FycmF5KHByb3ZpZGVkKSAmJiB0eXBlb2YgcHJvdmlkZWQgPT09ICdvYmplY3QnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHQgPT09IHR5cGVvZiBwcm92aWRlZDtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuIiwiLy8gKGMpIERlYW4gTWNOYW1lZSA8ZGVhbkBnbWFpbC5jb20+LCAyMDEyLlxuLy9cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kZWFubS9jc3MtY29sb3ItcGFyc2VyLWpzXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG9cbi8vIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4vLyByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Jcbi8vIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbi8vIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1Ncbi8vIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1jb2xvci9cbnZhciBrQ1NTQ29sb3JUYWJsZSA9IHtcbiAgXCJ0cmFuc3BhcmVudFwiOiBbMCwwLDAsMF0sIFwiYWxpY2VibHVlXCI6IFsyNDAsMjQ4LDI1NSwxXSxcbiAgXCJhbnRpcXVld2hpdGVcIjogWzI1MCwyMzUsMjE1LDFdLCBcImFxdWFcIjogWzAsMjU1LDI1NSwxXSxcbiAgXCJhcXVhbWFyaW5lXCI6IFsxMjcsMjU1LDIxMiwxXSwgXCJhenVyZVwiOiBbMjQwLDI1NSwyNTUsMV0sXG4gIFwiYmVpZ2VcIjogWzI0NSwyNDUsMjIwLDFdLCBcImJpc3F1ZVwiOiBbMjU1LDIyOCwxOTYsMV0sXG4gIFwiYmxhY2tcIjogWzAsMCwwLDFdLCBcImJsYW5jaGVkYWxtb25kXCI6IFsyNTUsMjM1LDIwNSwxXSxcbiAgXCJibHVlXCI6IFswLDAsMjU1LDFdLCBcImJsdWV2aW9sZXRcIjogWzEzOCw0MywyMjYsMV0sXG4gIFwiYnJvd25cIjogWzE2NSw0Miw0MiwxXSwgXCJidXJseXdvb2RcIjogWzIyMiwxODQsMTM1LDFdLFxuICBcImNhZGV0Ymx1ZVwiOiBbOTUsMTU4LDE2MCwxXSwgXCJjaGFydHJldXNlXCI6IFsxMjcsMjU1LDAsMV0sXG4gIFwiY2hvY29sYXRlXCI6IFsyMTAsMTA1LDMwLDFdLCBcImNvcmFsXCI6IFsyNTUsMTI3LDgwLDFdLFxuICBcImNvcm5mbG93ZXJibHVlXCI6IFsxMDAsMTQ5LDIzNywxXSwgXCJjb3Juc2lsa1wiOiBbMjU1LDI0OCwyMjAsMV0sXG4gIFwiY3JpbXNvblwiOiBbMjIwLDIwLDYwLDFdLCBcImN5YW5cIjogWzAsMjU1LDI1NSwxXSxcbiAgXCJkYXJrYmx1ZVwiOiBbMCwwLDEzOSwxXSwgXCJkYXJrY3lhblwiOiBbMCwxMzksMTM5LDFdLFxuICBcImRhcmtnb2xkZW5yb2RcIjogWzE4NCwxMzQsMTEsMV0sIFwiZGFya2dyYXlcIjogWzE2OSwxNjksMTY5LDFdLFxuICBcImRhcmtncmVlblwiOiBbMCwxMDAsMCwxXSwgXCJkYXJrZ3JleVwiOiBbMTY5LDE2OSwxNjksMV0sXG4gIFwiZGFya2toYWtpXCI6IFsxODksMTgzLDEwNywxXSwgXCJkYXJrbWFnZW50YVwiOiBbMTM5LDAsMTM5LDFdLFxuICBcImRhcmtvbGl2ZWdyZWVuXCI6IFs4NSwxMDcsNDcsMV0sIFwiZGFya29yYW5nZVwiOiBbMjU1LDE0MCwwLDFdLFxuICBcImRhcmtvcmNoaWRcIjogWzE1Myw1MCwyMDQsMV0sIFwiZGFya3JlZFwiOiBbMTM5LDAsMCwxXSxcbiAgXCJkYXJrc2FsbW9uXCI6IFsyMzMsMTUwLDEyMiwxXSwgXCJkYXJrc2VhZ3JlZW5cIjogWzE0MywxODgsMTQzLDFdLFxuICBcImRhcmtzbGF0ZWJsdWVcIjogWzcyLDYxLDEzOSwxXSwgXCJkYXJrc2xhdGVncmF5XCI6IFs0Nyw3OSw3OSwxXSxcbiAgXCJkYXJrc2xhdGVncmV5XCI6IFs0Nyw3OSw3OSwxXSwgXCJkYXJrdHVycXVvaXNlXCI6IFswLDIwNiwyMDksMV0sXG4gIFwiZGFya3Zpb2xldFwiOiBbMTQ4LDAsMjExLDFdLCBcImRlZXBwaW5rXCI6IFsyNTUsMjAsMTQ3LDFdLFxuICBcImRlZXBza3libHVlXCI6IFswLDE5MSwyNTUsMV0sIFwiZGltZ3JheVwiOiBbMTA1LDEwNSwxMDUsMV0sXG4gIFwiZGltZ3JleVwiOiBbMTA1LDEwNSwxMDUsMV0sIFwiZG9kZ2VyYmx1ZVwiOiBbMzAsMTQ0LDI1NSwxXSxcbiAgXCJmaXJlYnJpY2tcIjogWzE3OCwzNCwzNCwxXSwgXCJmbG9yYWx3aGl0ZVwiOiBbMjU1LDI1MCwyNDAsMV0sXG4gIFwiZm9yZXN0Z3JlZW5cIjogWzM0LDEzOSwzNCwxXSwgXCJmdWNoc2lhXCI6IFsyNTUsMCwyNTUsMV0sXG4gIFwiZ2FpbnNib3JvXCI6IFsyMjAsMjIwLDIyMCwxXSwgXCJnaG9zdHdoaXRlXCI6IFsyNDgsMjQ4LDI1NSwxXSxcbiAgXCJnb2xkXCI6IFsyNTUsMjE1LDAsMV0sIFwiZ29sZGVucm9kXCI6IFsyMTgsMTY1LDMyLDFdLFxuICBcImdyYXlcIjogWzEyOCwxMjgsMTI4LDFdLCBcImdyZWVuXCI6IFswLDEyOCwwLDFdLFxuICBcImdyZWVueWVsbG93XCI6IFsxNzMsMjU1LDQ3LDFdLCBcImdyZXlcIjogWzEyOCwxMjgsMTI4LDFdLFxuICBcImhvbmV5ZGV3XCI6IFsyNDAsMjU1LDI0MCwxXSwgXCJob3RwaW5rXCI6IFsyNTUsMTA1LDE4MCwxXSxcbiAgXCJpbmRpYW5yZWRcIjogWzIwNSw5Miw5MiwxXSwgXCJpbmRpZ29cIjogWzc1LDAsMTMwLDFdLFxuICBcIml2b3J5XCI6IFsyNTUsMjU1LDI0MCwxXSwgXCJraGFraVwiOiBbMjQwLDIzMCwxNDAsMV0sXG4gIFwibGF2ZW5kZXJcIjogWzIzMCwyMzAsMjUwLDFdLCBcImxhdmVuZGVyYmx1c2hcIjogWzI1NSwyNDAsMjQ1LDFdLFxuICBcImxhd25ncmVlblwiOiBbMTI0LDI1MiwwLDFdLCBcImxlbW9uY2hpZmZvblwiOiBbMjU1LDI1MCwyMDUsMV0sXG4gIFwibGlnaHRibHVlXCI6IFsxNzMsMjE2LDIzMCwxXSwgXCJsaWdodGNvcmFsXCI6IFsyNDAsMTI4LDEyOCwxXSxcbiAgXCJsaWdodGN5YW5cIjogWzIyNCwyNTUsMjU1LDFdLCBcImxpZ2h0Z29sZGVucm9keWVsbG93XCI6IFsyNTAsMjUwLDIxMCwxXSxcbiAgXCJsaWdodGdyYXlcIjogWzIxMSwyMTEsMjExLDFdLCBcImxpZ2h0Z3JlZW5cIjogWzE0NCwyMzgsMTQ0LDFdLFxuICBcImxpZ2h0Z3JleVwiOiBbMjExLDIxMSwyMTEsMV0sIFwibGlnaHRwaW5rXCI6IFsyNTUsMTgyLDE5MywxXSxcbiAgXCJsaWdodHNhbG1vblwiOiBbMjU1LDE2MCwxMjIsMV0sIFwibGlnaHRzZWFncmVlblwiOiBbMzIsMTc4LDE3MCwxXSxcbiAgXCJsaWdodHNreWJsdWVcIjogWzEzNSwyMDYsMjUwLDFdLCBcImxpZ2h0c2xhdGVncmF5XCI6IFsxMTksMTM2LDE1MywxXSxcbiAgXCJsaWdodHNsYXRlZ3JleVwiOiBbMTE5LDEzNiwxNTMsMV0sIFwibGlnaHRzdGVlbGJsdWVcIjogWzE3NiwxOTYsMjIyLDFdLFxuICBcImxpZ2h0eWVsbG93XCI6IFsyNTUsMjU1LDIyNCwxXSwgXCJsaW1lXCI6IFswLDI1NSwwLDFdLFxuICBcImxpbWVncmVlblwiOiBbNTAsMjA1LDUwLDFdLCBcImxpbmVuXCI6IFsyNTAsMjQwLDIzMCwxXSxcbiAgXCJtYWdlbnRhXCI6IFsyNTUsMCwyNTUsMV0sIFwibWFyb29uXCI6IFsxMjgsMCwwLDFdLFxuICBcIm1lZGl1bWFxdWFtYXJpbmVcIjogWzEwMiwyMDUsMTcwLDFdLCBcIm1lZGl1bWJsdWVcIjogWzAsMCwyMDUsMV0sXG4gIFwibWVkaXVtb3JjaGlkXCI6IFsxODYsODUsMjExLDFdLCBcIm1lZGl1bXB1cnBsZVwiOiBbMTQ3LDExMiwyMTksMV0sXG4gIFwibWVkaXVtc2VhZ3JlZW5cIjogWzYwLDE3OSwxMTMsMV0sIFwibWVkaXVtc2xhdGVibHVlXCI6IFsxMjMsMTA0LDIzOCwxXSxcbiAgXCJtZWRpdW1zcHJpbmdncmVlblwiOiBbMCwyNTAsMTU0LDFdLCBcIm1lZGl1bXR1cnF1b2lzZVwiOiBbNzIsMjA5LDIwNCwxXSxcbiAgXCJtZWRpdW12aW9sZXRyZWRcIjogWzE5OSwyMSwxMzMsMV0sIFwibWlkbmlnaHRibHVlXCI6IFsyNSwyNSwxMTIsMV0sXG4gIFwibWludGNyZWFtXCI6IFsyNDUsMjU1LDI1MCwxXSwgXCJtaXN0eXJvc2VcIjogWzI1NSwyMjgsMjI1LDFdLFxuICBcIm1vY2Nhc2luXCI6IFsyNTUsMjI4LDE4MSwxXSwgXCJuYXZham93aGl0ZVwiOiBbMjU1LDIyMiwxNzMsMV0sXG4gIFwibmF2eVwiOiBbMCwwLDEyOCwxXSwgXCJvbGRsYWNlXCI6IFsyNTMsMjQ1LDIzMCwxXSxcbiAgXCJvbGl2ZVwiOiBbMTI4LDEyOCwwLDFdLCBcIm9saXZlZHJhYlwiOiBbMTA3LDE0MiwzNSwxXSxcbiAgXCJvcmFuZ2VcIjogWzI1NSwxNjUsMCwxXSwgXCJvcmFuZ2VyZWRcIjogWzI1NSw2OSwwLDFdLFxuICBcIm9yY2hpZFwiOiBbMjE4LDExMiwyMTQsMV0sIFwicGFsZWdvbGRlbnJvZFwiOiBbMjM4LDIzMiwxNzAsMV0sXG4gIFwicGFsZWdyZWVuXCI6IFsxNTIsMjUxLDE1MiwxXSwgXCJwYWxldHVycXVvaXNlXCI6IFsxNzUsMjM4LDIzOCwxXSxcbiAgXCJwYWxldmlvbGV0cmVkXCI6IFsyMTksMTEyLDE0NywxXSwgXCJwYXBheWF3aGlwXCI6IFsyNTUsMjM5LDIxMywxXSxcbiAgXCJwZWFjaHB1ZmZcIjogWzI1NSwyMTgsMTg1LDFdLCBcInBlcnVcIjogWzIwNSwxMzMsNjMsMV0sXG4gIFwicGlua1wiOiBbMjU1LDE5MiwyMDMsMV0sIFwicGx1bVwiOiBbMjIxLDE2MCwyMjEsMV0sXG4gIFwicG93ZGVyYmx1ZVwiOiBbMTc2LDIyNCwyMzAsMV0sIFwicHVycGxlXCI6IFsxMjgsMCwxMjgsMV0sXG4gIFwicmViZWNjYXB1cnBsZVwiOiBbMTAyLDUxLDE1MywxXSxcbiAgXCJyZWRcIjogWzI1NSwwLDAsMV0sIFwicm9zeWJyb3duXCI6IFsxODgsMTQzLDE0MywxXSxcbiAgXCJyb3lhbGJsdWVcIjogWzY1LDEwNSwyMjUsMV0sIFwic2FkZGxlYnJvd25cIjogWzEzOSw2OSwxOSwxXSxcbiAgXCJzYWxtb25cIjogWzI1MCwxMjgsMTE0LDFdLCBcInNhbmR5YnJvd25cIjogWzI0NCwxNjQsOTYsMV0sXG4gIFwic2VhZ3JlZW5cIjogWzQ2LDEzOSw4NywxXSwgXCJzZWFzaGVsbFwiOiBbMjU1LDI0NSwyMzgsMV0sXG4gIFwic2llbm5hXCI6IFsxNjAsODIsNDUsMV0sIFwic2lsdmVyXCI6IFsxOTIsMTkyLDE5MiwxXSxcbiAgXCJza3libHVlXCI6IFsxMzUsMjA2LDIzNSwxXSwgXCJzbGF0ZWJsdWVcIjogWzEwNiw5MCwyMDUsMV0sXG4gIFwic2xhdGVncmF5XCI6IFsxMTIsMTI4LDE0NCwxXSwgXCJzbGF0ZWdyZXlcIjogWzExMiwxMjgsMTQ0LDFdLFxuICBcInNub3dcIjogWzI1NSwyNTAsMjUwLDFdLCBcInNwcmluZ2dyZWVuXCI6IFswLDI1NSwxMjcsMV0sXG4gIFwic3RlZWxibHVlXCI6IFs3MCwxMzAsMTgwLDFdLCBcInRhblwiOiBbMjEwLDE4MCwxNDAsMV0sXG4gIFwidGVhbFwiOiBbMCwxMjgsMTI4LDFdLCBcInRoaXN0bGVcIjogWzIxNiwxOTEsMjE2LDFdLFxuICBcInRvbWF0b1wiOiBbMjU1LDk5LDcxLDFdLCBcInR1cnF1b2lzZVwiOiBbNjQsMjI0LDIwOCwxXSxcbiAgXCJ2aW9sZXRcIjogWzIzOCwxMzAsMjM4LDFdLCBcIndoZWF0XCI6IFsyNDUsMjIyLDE3OSwxXSxcbiAgXCJ3aGl0ZVwiOiBbMjU1LDI1NSwyNTUsMV0sIFwid2hpdGVzbW9rZVwiOiBbMjQ1LDI0NSwyNDUsMV0sXG4gIFwieWVsbG93XCI6IFsyNTUsMjU1LDAsMV0sIFwieWVsbG93Z3JlZW5cIjogWzE1NCwyMDUsNTAsMV19XG5cbmZ1bmN0aW9uIGNsYW1wX2Nzc19ieXRlKGkpIHsgIC8vIENsYW1wIHRvIGludGVnZXIgMCAuLiAyNTUuXG4gIGkgPSBNYXRoLnJvdW5kKGkpOyAgLy8gU2VlbXMgdG8gYmUgd2hhdCBDaHJvbWUgZG9lcyAodnMgdHJ1bmNhdGlvbikuXG4gIHJldHVybiBpIDwgMCA/IDAgOiBpID4gMjU1ID8gMjU1IDogaTtcbn1cblxuZnVuY3Rpb24gY2xhbXBfY3NzX2Zsb2F0KGYpIHsgIC8vIENsYW1wIHRvIGZsb2F0IDAuMCAuLiAxLjAuXG4gIHJldHVybiBmIDwgMCA/IDAgOiBmID4gMSA/IDEgOiBmO1xufVxuXG5mdW5jdGlvbiBwYXJzZV9jc3NfaW50KHN0cikgeyAgLy8gaW50IG9yIHBlcmNlbnRhZ2UuXG4gIGlmIChzdHJbc3RyLmxlbmd0aCAtIDFdID09PSAnJScpXG4gICAgcmV0dXJuIGNsYW1wX2Nzc19ieXRlKHBhcnNlRmxvYXQoc3RyKSAvIDEwMCAqIDI1NSk7XG4gIHJldHVybiBjbGFtcF9jc3NfYnl0ZShwYXJzZUludChzdHIpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VfY3NzX2Zsb2F0KHN0cikgeyAgLy8gZmxvYXQgb3IgcGVyY2VudGFnZS5cbiAgaWYgKHN0cltzdHIubGVuZ3RoIC0gMV0gPT09ICclJylcbiAgICByZXR1cm4gY2xhbXBfY3NzX2Zsb2F0KHBhcnNlRmxvYXQoc3RyKSAvIDEwMCk7XG4gIHJldHVybiBjbGFtcF9jc3NfZmxvYXQocGFyc2VGbG9hdChzdHIpKTtcbn1cblxuZnVuY3Rpb24gY3NzX2h1ZV90b19yZ2IobTEsIG0yLCBoKSB7XG4gIGlmIChoIDwgMCkgaCArPSAxO1xuICBlbHNlIGlmIChoID4gMSkgaCAtPSAxO1xuXG4gIGlmIChoICogNiA8IDEpIHJldHVybiBtMSArIChtMiAtIG0xKSAqIGggKiA2O1xuICBpZiAoaCAqIDIgPCAxKSByZXR1cm4gbTI7XG4gIGlmIChoICogMyA8IDIpIHJldHVybiBtMSArIChtMiAtIG0xKSAqICgyLzMgLSBoKSAqIDY7XG4gIHJldHVybiBtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VDU1NDb2xvcihjc3Nfc3RyKSB7XG4gIC8vIFJlbW92ZSBhbGwgd2hpdGVzcGFjZSwgbm90IGNvbXBsaWFudCwgYnV0IHNob3VsZCBqdXN0IGJlIG1vcmUgYWNjZXB0aW5nLlxuICB2YXIgc3RyID0gY3NzX3N0ci5yZXBsYWNlKC8gL2csICcnKS50b0xvd2VyQ2FzZSgpO1xuXG4gIC8vIENvbG9yIGtleXdvcmRzIChhbmQgdHJhbnNwYXJlbnQpIGxvb2t1cC5cbiAgaWYgKHN0ciBpbiBrQ1NTQ29sb3JUYWJsZSkgcmV0dXJuIGtDU1NDb2xvclRhYmxlW3N0cl0uc2xpY2UoKTsgIC8vIGR1cC5cblxuICAvLyAjYWJjIGFuZCAjYWJjMTIzIHN5bnRheC5cbiAgaWYgKHN0clswXSA9PT0gJyMnKSB7XG4gICAgaWYgKHN0ci5sZW5ndGggPT09IDQpIHtcbiAgICAgIHZhciBpdiA9IHBhcnNlSW50KHN0ci5zdWJzdHIoMSksIDE2KTsgIC8vIFRPRE8oZGVhbm0pOiBTdHJpY3RlciBwYXJzaW5nLlxuICAgICAgaWYgKCEoaXYgPj0gMCAmJiBpdiA8PSAweGZmZikpIHJldHVybiBudWxsOyAgLy8gQ292ZXJzIE5hTi5cbiAgICAgIHJldHVybiBbKChpdiAmIDB4ZjAwKSA+PiA0KSB8ICgoaXYgJiAweGYwMCkgPj4gOCksXG4gICAgICAgICAgICAgIChpdiAmIDB4ZjApIHwgKChpdiAmIDB4ZjApID4+IDQpLFxuICAgICAgICAgICAgICAoaXYgJiAweGYpIHwgKChpdiAmIDB4ZikgPDwgNCksXG4gICAgICAgICAgICAgIDFdO1xuICAgIH0gZWxzZSBpZiAoc3RyLmxlbmd0aCA9PT0gNykge1xuICAgICAgdmFyIGl2ID0gcGFyc2VJbnQoc3RyLnN1YnN0cigxKSwgMTYpOyAgLy8gVE9ETyhkZWFubSk6IFN0cmljdGVyIHBhcnNpbmcuXG4gICAgICBpZiAoIShpdiA+PSAwICYmIGl2IDw9IDB4ZmZmZmZmKSkgcmV0dXJuIG51bGw7ICAvLyBDb3ZlcnMgTmFOLlxuICAgICAgcmV0dXJuIFsoaXYgJiAweGZmMDAwMCkgPj4gMTYsXG4gICAgICAgICAgICAgIChpdiAmIDB4ZmYwMCkgPj4gOCxcbiAgICAgICAgICAgICAgaXYgJiAweGZmLFxuICAgICAgICAgICAgICAxXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBvcCA9IHN0ci5pbmRleE9mKCcoJyksIGVwID0gc3RyLmluZGV4T2YoJyknKTtcbiAgaWYgKG9wICE9PSAtMSAmJiBlcCArIDEgPT09IHN0ci5sZW5ndGgpIHtcbiAgICB2YXIgZm5hbWUgPSBzdHIuc3Vic3RyKDAsIG9wKTtcbiAgICB2YXIgcGFyYW1zID0gc3RyLnN1YnN0cihvcCsxLCBlcC0ob3ArMSkpLnNwbGl0KCcsJyk7XG4gICAgdmFyIGFscGhhID0gMTsgIC8vIFRvIGFsbG93IGNhc2UgZmFsbHRocm91Z2guXG4gICAgc3dpdGNoIChmbmFtZSkge1xuICAgICAgY2FzZSAncmdiYSc6XG4gICAgICAgIGlmIChwYXJhbXMubGVuZ3RoICE9PSA0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgYWxwaGEgPSBwYXJzZV9jc3NfZmxvYXQocGFyYW1zLnBvcCgpKTtcbiAgICAgICAgLy8gRmFsbCB0aHJvdWdoLlxuICAgICAgY2FzZSAncmdiJzpcbiAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggIT09IDMpIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gW3BhcnNlX2Nzc19pbnQocGFyYW1zWzBdKSxcbiAgICAgICAgICAgICAgICBwYXJzZV9jc3NfaW50KHBhcmFtc1sxXSksXG4gICAgICAgICAgICAgICAgcGFyc2VfY3NzX2ludChwYXJhbXNbMl0pLFxuICAgICAgICAgICAgICAgIGFscGhhXTtcbiAgICAgIGNhc2UgJ2hzbGEnOlxuICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCAhPT0gNCkgcmV0dXJuIG51bGw7XG4gICAgICAgIGFscGhhID0gcGFyc2VfY3NzX2Zsb2F0KHBhcmFtcy5wb3AoKSk7XG4gICAgICAgIC8vIEZhbGwgdGhyb3VnaC5cbiAgICAgIGNhc2UgJ2hzbCc6XG4gICAgICAgIGlmIChwYXJhbXMubGVuZ3RoICE9PSAzKSByZXR1cm4gbnVsbDtcbiAgICAgICAgdmFyIGggPSAoKChwYXJzZUZsb2F0KHBhcmFtc1swXSkgJSAzNjApICsgMzYwKSAlIDM2MCkgLyAzNjA7ICAvLyAwIC4uIDFcbiAgICAgICAgLy8gTk9URShkZWFubSk6IEFjY29yZGluZyB0byB0aGUgQ1NTIHNwZWMgcy9sIHNob3VsZCBvbmx5IGJlXG4gICAgICAgIC8vIHBlcmNlbnRhZ2VzLCBidXQgd2UgZG9uJ3QgYm90aGVyIGFuZCBsZXQgZmxvYXQgb3IgcGVyY2VudGFnZS5cbiAgICAgICAgdmFyIHMgPSBwYXJzZV9jc3NfZmxvYXQocGFyYW1zWzFdKTtcbiAgICAgICAgdmFyIGwgPSBwYXJzZV9jc3NfZmxvYXQocGFyYW1zWzJdKTtcbiAgICAgICAgdmFyIG0yID0gbCA8PSAwLjUgPyBsICogKHMgKyAxKSA6IGwgKyBzIC0gbCAqIHM7XG4gICAgICAgIHZhciBtMSA9IGwgKiAyIC0gbTI7XG4gICAgICAgIHJldHVybiBbY2xhbXBfY3NzX2J5dGUoY3NzX2h1ZV90b19yZ2IobTEsIG0yLCBoKzEvMykgKiAyNTUpLFxuICAgICAgICAgICAgICAgIGNsYW1wX2Nzc19ieXRlKGNzc19odWVfdG9fcmdiKG0xLCBtMiwgaCkgKiAyNTUpLFxuICAgICAgICAgICAgICAgIGNsYW1wX2Nzc19ieXRlKGNzc19odWVfdG9fcmdiKG0xLCBtMiwgaC0xLzMpICogMjU1KSxcbiAgICAgICAgICAgICAgICBhbHBoYV07XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudHJ5IHsgZXhwb3J0cy5wYXJzZUNTU0NvbG9yID0gcGFyc2VDU1NDb2xvciB9IGNhdGNoKGUpIHsgfVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtwYXJzZUNTU0NvbG9yfSBmcm9tICdjc3Njb2xvcnBhcnNlcic7XG5cbi8qKlxuICogQW4gUkdCQSBjb2xvciB2YWx1ZS4gQ3JlYXRlIGluc3RhbmNlcyBmcm9tIGNvbG9yIHN0cmluZ3MgdXNpbmcgdGhlIHN0YXRpY1xuICogbWV0aG9kIGBDb2xvci5wYXJzZWAuIFRoZSBjb25zdHJ1Y3RvciBhY2NlcHRzIFJHQiBjaGFubmVsIHZhbHVlcyBpbiB0aGUgcmFuZ2VcbiAqIGBbMCwgMV1gLCBwcmVtdWx0aXBsaWVkIGJ5IEEuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHIgVGhlIHJlZCBjaGFubmVsLlxuICogQHBhcmFtIHtudW1iZXJ9IGcgVGhlIGdyZWVuIGNoYW5uZWwuXG4gKiBAcGFyYW0ge251bWJlcn0gYiBUaGUgYmx1ZSBjaGFubmVsLlxuICogQHBhcmFtIHtudW1iZXJ9IGEgVGhlIGFscGhhIGNoYW5uZWwuXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBDb2xvciB7XG4gICAgcjogbnVtYmVyO1xuICAgIGc6IG51bWJlcjtcbiAgICBiOiBudW1iZXI7XG4gICAgYTogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IocjogbnVtYmVyLCBnOiBudW1iZXIsIGI6IG51bWJlciwgYTogbnVtYmVyID0gMSkge1xuICAgICAgICB0aGlzLnIgPSByO1xuICAgICAgICB0aGlzLmcgPSBnO1xuICAgICAgICB0aGlzLmIgPSBiO1xuICAgICAgICB0aGlzLmEgPSBhO1xuICAgIH1cblxuICAgIHN0YXRpYyBibGFjazogQ29sb3I7XG4gICAgc3RhdGljIHdoaXRlOiBDb2xvcjtcbiAgICBzdGF0aWMgdHJhbnNwYXJlbnQ6IENvbG9yO1xuICAgIHN0YXRpYyByZWQ6IENvbG9yO1xuXG4gICAgLyoqXG4gICAgICogUGFyc2VzIHZhbGlkIENTUyBjb2xvciBzdHJpbmdzIGFuZCByZXR1cm5zIGEgYENvbG9yYCBpbnN0YW5jZS5cbiAgICAgKiBAcmV0dXJucyBBIGBDb2xvcmAgaW5zdGFuY2UsIG9yIGB1bmRlZmluZWRgIGlmIHRoZSBpbnB1dCBpcyBub3QgYSB2YWxpZCBjb2xvciBzdHJpbmcuXG4gICAgICovXG4gICAgc3RhdGljIHBhcnNlKGlucHV0Pzogc3RyaW5nIHwgQ29sb3IgfCBudWxsKTogQ29sb3IgfCB2b2lkIHtcbiAgICAgICAgaWYgKCFpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIENvbG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJnYmEgPSBwYXJzZUNTU0NvbG9yKGlucHV0KTtcbiAgICAgICAgaWYgKCFyZ2JhKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihcbiAgICAgICAgICAgIHJnYmFbMF0gLyAyNTUgKiByZ2JhWzNdLFxuICAgICAgICAgICAgcmdiYVsxXSAvIDI1NSAqIHJnYmFbM10sXG4gICAgICAgICAgICByZ2JhWzJdIC8gMjU1ICogcmdiYVszXSxcbiAgICAgICAgICAgIHJnYmFbM11cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIFJHQkEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY29sb3IgdmFsdWUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBBbiBSR0JBIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBwdXJwbGUgPSBuZXcgQ29sb3IucGFyc2UoJ3B1cnBsZScpO1xuICAgICAqIHB1cnBsZS50b1N0cmluZzsgLy8gPSBcInJnYmEoMTI4LDAsMTI4LDEpXCJcbiAgICAgKiB2YXIgdHJhbnNsdWNlbnRHcmVlbiA9IG5ldyBDb2xvci5wYXJzZSgncmdiYSgyNiwgMjA3LCAyNiwgLjczKScpO1xuICAgICAqIHRyYW5zbHVjZW50R3JlZW4udG9TdHJpbmcoKTsgLy8gPSBcInJnYmEoMjYsMjA3LDI2LDAuNzMpXCJcbiAgICAgKi9cbiAgICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBbciwgZywgYiwgYV0gPSB0aGlzLnRvQXJyYXkoKTtcbiAgICAgICAgcmV0dXJuIGByZ2JhKCR7TWF0aC5yb3VuZChyKX0sJHtNYXRoLnJvdW5kKGcpfSwke01hdGgucm91bmQoYil9LCR7YX0pYDtcbiAgICB9XG5cbiAgICB0b0FycmF5KCk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdIHtcbiAgICAgICAgY29uc3Qge3IsIGcsIGIsIGF9ID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGEgPT09IDAgPyBbMCwgMCwgMCwgMF0gOiBbXG4gICAgICAgICAgICByICogMjU1IC8gYSxcbiAgICAgICAgICAgIGcgKiAyNTUgLyBhLFxuICAgICAgICAgICAgYiAqIDI1NSAvIGEsXG4gICAgICAgICAgICBhXG4gICAgICAgIF07XG4gICAgfVxufVxuXG5Db2xvci5ibGFjayA9IG5ldyBDb2xvcigwLCAwLCAwLCAxKTtcbkNvbG9yLndoaXRlID0gbmV3IENvbG9yKDEsIDEsIDEsIDEpO1xuQ29sb3IudHJhbnNwYXJlbnQgPSBuZXcgQ29sb3IoMCwgMCwgMCwgMCk7XG5Db2xvci5yZWQgPSBuZXcgQ29sb3IoMSwgMCwgMCwgMSk7XG5cbmV4cG9ydCBkZWZhdWx0IENvbG9yO1xuIiwiLy8gQGZsb3dcblxuLy8gRmxvdyB0eXBlIGRlY2xhcmF0aW9ucyBmb3IgSW50bCBjcmliYmVkIGZyb21cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy8xMjcwXG5cbmRlY2xhcmUgdmFyIEludGw6IHtcbiAgICBDb2xsYXRvcjogQ2xhc3M8SW50bCRDb2xsYXRvcj5cbn07XG5cbmRlY2xhcmUgY2xhc3MgSW50bCRDb2xsYXRvciB7XG4gICAgY29uc3RydWN0b3IgKFxuICAgICAgICBsb2NhbGVzPzogc3RyaW5nIHwgc3RyaW5nW10sXG4gICAgICAgIG9wdGlvbnM/OiBDb2xsYXRvck9wdGlvbnNcbiAgICApOiBJbnRsJENvbGxhdG9yO1xuXG4gICAgc3RhdGljIChcbiAgICAgICAgbG9jYWxlcz86IHN0cmluZyB8IHN0cmluZ1tdLFxuICAgICAgICBvcHRpb25zPzogQ29sbGF0b3JPcHRpb25zXG4gICAgKTogSW50bCRDb2xsYXRvcjtcblxuICAgIGNvbXBhcmUgKGE6IHN0cmluZywgYjogc3RyaW5nKTogbnVtYmVyO1xuXG4gICAgcmVzb2x2ZWRPcHRpb25zKCk6IGFueTtcbn1cblxudHlwZSBDb2xsYXRvck9wdGlvbnMgPSB7XG4gICAgbG9jYWxlTWF0Y2hlcj86ICdsb29rdXAnIHwgJ2Jlc3QgZml0JyxcbiAgICB1c2FnZT86ICdzb3J0JyB8ICdzZWFyY2gnLFxuICAgIHNlbnNpdGl2aXR5PzogJ2Jhc2UnIHwgJ2FjY2VudCcgfCAnY2FzZScgfCAndmFyaWFudCcsXG4gICAgaWdub3JlUHVuY3R1YXRpb24/OiBib29sZWFuLFxuICAgIG51bWVyaWM/OiBib29sZWFuLFxuICAgIGNhc2VGaXJzdD86ICd1cHBlcicgfCAnbG93ZXInIHwgJ2ZhbHNlJ1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb2xsYXRvciB7XG4gICAgbG9jYWxlOiBzdHJpbmcgfCBudWxsO1xuICAgIHNlbnNpdGl2aXR5OiAnYmFzZScgfCAnYWNjZW50JyB8ICdjYXNlJyB8ICd2YXJpYW50JztcbiAgICBjb2xsYXRvcjogSW50bCRDb2xsYXRvcjtcblxuICAgIGNvbnN0cnVjdG9yKGNhc2VTZW5zaXRpdmU6IGJvb2xlYW4sIGRpYWNyaXRpY1NlbnNpdGl2ZTogYm9vbGVhbiwgbG9jYWxlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgICAgIGlmIChjYXNlU2Vuc2l0aXZlKVxuICAgICAgICAgICAgdGhpcy5zZW5zaXRpdml0eSA9IGRpYWNyaXRpY1NlbnNpdGl2ZSA/ICd2YXJpYW50JyA6ICdjYXNlJztcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5zZW5zaXRpdml0eSA9IGRpYWNyaXRpY1NlbnNpdGl2ZSA/ICdhY2NlbnQnIDogJ2Jhc2UnO1xuXG4gICAgICAgIHRoaXMubG9jYWxlID0gbG9jYWxlO1xuICAgICAgICB0aGlzLmNvbGxhdG9yID0gbmV3IEludGwuQ29sbGF0b3IodGhpcy5sb2NhbGUgPyB0aGlzLmxvY2FsZSA6IFtdLFxuICAgICAgICAgICAge3NlbnNpdGl2aXR5OiB0aGlzLnNlbnNpdGl2aXR5LCB1c2FnZTogJ3NlYXJjaCd9KTtcbiAgICB9XG5cbiAgICBjb21wYXJlKGxoczogc3RyaW5nLCByaHM6IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbGxhdG9yLmNvbXBhcmUobGhzLCByaHMpO1xuICAgIH1cblxuICAgIHJlc29sdmVkTG9jYWxlKCk6IHN0cmluZyB7XG4gICAgICAgIC8vIFdlIGNyZWF0ZSBhIENvbGxhdG9yIHdpdGhvdXQgXCJ1c2FnZTogc2VhcmNoXCIgYmVjYXVzZSB3ZSBkb24ndCB3YW50XG4gICAgICAgIC8vIHRoZSBzZWFyY2ggb3B0aW9ucyBlbmNvZGVkIGluIG91ciByZXN1bHQgKGUuZy4gXCJlbi11LWNvLXNlYXJjaFwiKVxuICAgICAgICByZXR1cm4gbmV3IEludGwuQ29sbGF0b3IodGhpcy5sb2NhbGUgPyB0aGlzLmxvY2FsZSA6IFtdKVxuICAgICAgICAgICAgLnJlc29sdmVkT3B0aW9ucygpLmxvY2FsZTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHR5cGUgQ29sb3IgZnJvbSAnLi4vLi4vdXRpbC9jb2xvcic7XG5pbXBvcnQgdHlwZSBSZXNvbHZlZEltYWdlIGZyb20gJy4uL3R5cGVzL3Jlc29sdmVkX2ltYWdlJztcblxuZXhwb3J0IGNsYXNzIEZvcm1hdHRlZFNlY3Rpb24ge1xuICAgIHRleHQ6IHN0cmluZztcbiAgICBpbWFnZTogUmVzb2x2ZWRJbWFnZSB8IG51bGw7XG4gICAgc2NhbGU6IG51bWJlciB8IG51bGw7XG4gICAgZm9udFN0YWNrOiBzdHJpbmcgfCBudWxsO1xuICAgIHRleHRDb2xvcjogQ29sb3IgfCBudWxsO1xuXG4gICAgY29uc3RydWN0b3IodGV4dDogc3RyaW5nLCBpbWFnZTogUmVzb2x2ZWRJbWFnZSB8IG51bGwsIHNjYWxlOiBudW1iZXIgfCBudWxsLCBmb250U3RhY2s6IHN0cmluZyB8IG51bGwsIHRleHRDb2xvcjogQ29sb3IgfCBudWxsKSB7XG4gICAgICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgICAgIHRoaXMuaW1hZ2UgPSBpbWFnZTtcbiAgICAgICAgdGhpcy5zY2FsZSA9IHNjYWxlO1xuICAgICAgICB0aGlzLmZvbnRTdGFjayA9IGZvbnRTdGFjaztcbiAgICAgICAgdGhpcy50ZXh0Q29sb3IgPSB0ZXh0Q29sb3I7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGb3JtYXR0ZWQge1xuICAgIHNlY3Rpb25zOiBBcnJheTxGb3JtYXR0ZWRTZWN0aW9uPjtcblxuICAgIGNvbnN0cnVjdG9yKHNlY3Rpb25zOiBBcnJheTxGb3JtYXR0ZWRTZWN0aW9uPikge1xuICAgICAgICB0aGlzLnNlY3Rpb25zID0gc2VjdGlvbnM7XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21TdHJpbmcodW5mb3JtYXR0ZWQ6IHN0cmluZyk6IEZvcm1hdHRlZCB7XG4gICAgICAgIHJldHVybiBuZXcgRm9ybWF0dGVkKFtuZXcgRm9ybWF0dGVkU2VjdGlvbih1bmZvcm1hdHRlZCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCldKTtcbiAgICB9XG5cbiAgICBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5zZWN0aW9ucy5sZW5ndGggPT09IDApIHJldHVybiB0cnVlO1xuICAgICAgICByZXR1cm4gIXRoaXMuc2VjdGlvbnMuc29tZShzZWN0aW9uID0+IHNlY3Rpb24udGV4dC5sZW5ndGggIT09IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWN0aW9uLmltYWdlICYmIHNlY3Rpb24uaW1hZ2UubmFtZS5sZW5ndGggIT09IDApKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZmFjdG9yeSh0ZXh0OiBGb3JtYXR0ZWQgfCBzdHJpbmcpOiBGb3JtYXR0ZWQge1xuICAgICAgICBpZiAodGV4dCBpbnN0YW5jZW9mIEZvcm1hdHRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gRm9ybWF0dGVkLmZyb21TdHJpbmcodGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5zZWN0aW9ucy5sZW5ndGggPT09IDApIHJldHVybiAnJztcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VjdGlvbnMubWFwKHNlY3Rpb24gPT4gc2VjdGlvbi50ZXh0KS5qb2luKCcnKTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKTogQXJyYXk8bWl4ZWQ+IHtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZDogQXJyYXk8bWl4ZWQ+ID0gW1wiZm9ybWF0XCJdO1xuICAgICAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgdGhpcy5zZWN0aW9ucykge1xuICAgICAgICAgICAgaWYgKHNlY3Rpb24uaW1hZ2UpIHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkLnB1c2goW1wiaW1hZ2VcIiwgc2VjdGlvbi5pbWFnZS5uYW1lXSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXJpYWxpemVkLnB1c2goc2VjdGlvbi50ZXh0KTtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnM6IHsgW2tleTogc3RyaW5nXTogbWl4ZWQgfSA9IHt9O1xuICAgICAgICAgICAgaWYgKHNlY3Rpb24uZm9udFN0YWNrKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc1tcInRleHQtZm9udFwiXSA9IFtcImxpdGVyYWxcIiwgc2VjdGlvbi5mb250U3RhY2suc3BsaXQoJywnKV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VjdGlvbi5zY2FsZSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnNbXCJmb250LXNjYWxlXCJdID0gc2VjdGlvbi5zY2FsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWN0aW9uLnRleHRDb2xvcikge1xuICAgICAgICAgICAgICAgIG9wdGlvbnNbXCJ0ZXh0LWNvbG9yXCJdID0gKFtcInJnYmFcIl06IEFycmF5PG1peGVkPikuY29uY2F0KHNlY3Rpb24udGV4dENvbG9yLnRvQXJyYXkoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXJpYWxpemVkLnB1c2gob3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZWQ7XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuZXhwb3J0IHR5cGUgUmVzb2x2ZWRJbWFnZU9wdGlvbnMgPSB7XG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGF2YWlsYWJsZTogYm9vbGVhblxufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVzb2x2ZWRJbWFnZSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGF2YWlsYWJsZTogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFJlc29sdmVkSW1hZ2VPcHRpb25zKSB7XG4gICAgICAgIHRoaXMubmFtZSA9IG9wdGlvbnMubmFtZTtcbiAgICAgICAgdGhpcy5hdmFpbGFibGUgPSBvcHRpb25zLmF2YWlsYWJsZTtcbiAgICB9XG5cbiAgICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5uYW1lO1xuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tU3RyaW5nKG5hbWU6IHN0cmluZyk6IFJlc29sdmVkSW1hZ2UgfCBudWxsIHtcbiAgICAgICAgaWYgKCFuYW1lKSByZXR1cm4gbnVsbDsgLy8gdHJlYXQgZW1wdHkgdmFsdWVzIGFzIG5vIGltYWdlXG4gICAgICAgIHJldHVybiBuZXcgUmVzb2x2ZWRJbWFnZSh7bmFtZSwgYXZhaWxhYmxlOiBmYWxzZX0pO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpOiBBcnJheTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIFtcImltYWdlXCIsIHRoaXMubmFtZV07XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vdXRpbC9jb2xvcic7XG5pbXBvcnQgQ29sbGF0b3IgZnJvbSAnLi90eXBlcy9jb2xsYXRvcic7XG5pbXBvcnQgRm9ybWF0dGVkIGZyb20gJy4vdHlwZXMvZm9ybWF0dGVkJztcbmltcG9ydCBSZXNvbHZlZEltYWdlIGZyb20gJy4vdHlwZXMvcmVzb2x2ZWRfaW1hZ2UnO1xuaW1wb3J0IHtOdWxsVHlwZSwgTnVtYmVyVHlwZSwgU3RyaW5nVHlwZSwgQm9vbGVhblR5cGUsIENvbG9yVHlwZSwgT2JqZWN0VHlwZSwgVmFsdWVUeXBlLCBDb2xsYXRvclR5cGUsIEZvcm1hdHRlZFR5cGUsIFJlc29sdmVkSW1hZ2VUeXBlLCBhcnJheX0gZnJvbSAnLi90eXBlcyc7XG5cbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUkdCQShyOiBtaXhlZCwgZzogbWl4ZWQsIGI6IG1peGVkLCBhPzogbWl4ZWQpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAoIShcbiAgICAgICAgdHlwZW9mIHIgPT09ICdudW1iZXInICYmIHIgPj0gMCAmJiByIDw9IDI1NSAmJlxuICAgICAgICB0eXBlb2YgZyA9PT0gJ251bWJlcicgJiYgZyA+PSAwICYmIGcgPD0gMjU1ICYmXG4gICAgICAgIHR5cGVvZiBiID09PSAnbnVtYmVyJyAmJiBiID49IDAgJiYgYiA8PSAyNTVcbiAgICApKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdHlwZW9mIGEgPT09ICdudW1iZXInID8gW3IsIGcsIGIsIGFdIDogW3IsIGcsIGJdO1xuICAgICAgICByZXR1cm4gYEludmFsaWQgcmdiYSB2YWx1ZSBbJHt2YWx1ZS5qb2luKCcsICcpfV06ICdyJywgJ2cnLCBhbmQgJ2InIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyNTUuYDtcbiAgICB9XG5cbiAgICBpZiAoIShcbiAgICAgICAgdHlwZW9mIGEgPT09ICd1bmRlZmluZWQnIHx8ICh0eXBlb2YgYSA9PT0gJ251bWJlcicgJiYgYSA+PSAwICYmIGEgPD0gMSlcbiAgICApKSB7XG4gICAgICAgIHJldHVybiBgSW52YWxpZCByZ2JhIHZhbHVlIFske1tyLCBnLCBiLCBhXS5qb2luKCcsICcpfV06ICdhJyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMS5gO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgdHlwZSBWYWx1ZSA9IG51bGwgfCBzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyIHwgQ29sb3IgfCBDb2xsYXRvciB8IEZvcm1hdHRlZCB8IFJlc29sdmVkSW1hZ2UgfCAkUmVhZE9ubHlBcnJheTxWYWx1ZT4gfCB7ICtbc3RyaW5nXTogVmFsdWUgfVxuXG5leHBvcnQgZnVuY3Rpb24gaXNWYWx1ZShtaXhlZDogbWl4ZWQpOiBib29sZWFuIHtcbiAgICBpZiAobWl4ZWQgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbWl4ZWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG1peGVkID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbWl4ZWQgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAobWl4ZWQgaW5zdGFuY2VvZiBDb2xvcikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKG1peGVkIGluc3RhbmNlb2YgQ29sbGF0b3IpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChtaXhlZCBpbnN0YW5jZW9mIEZvcm1hdHRlZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKG1peGVkIGluc3RhbmNlb2YgUmVzb2x2ZWRJbWFnZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkobWl4ZWQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBtaXhlZCkge1xuICAgICAgICAgICAgaWYgKCFpc1ZhbHVlKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG1peGVkID09PSAnb2JqZWN0Jykge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBtaXhlZCkge1xuICAgICAgICAgICAgaWYgKCFpc1ZhbHVlKG1peGVkW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlT2YodmFsdWU6IFZhbHVlKTogVHlwZSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBOdWxsVHlwZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZ1R5cGU7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgICAgICByZXR1cm4gQm9vbGVhblR5cGU7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHJldHVybiBOdW1iZXJUeXBlO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBDb2xvcikge1xuICAgICAgICByZXR1cm4gQ29sb3JUeXBlO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBDb2xsYXRvcikge1xuICAgICAgICByZXR1cm4gQ29sbGF0b3JUeXBlO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBGb3JtYXR0ZWQpIHtcbiAgICAgICAgcmV0dXJuIEZvcm1hdHRlZFR5cGU7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFJlc29sdmVkSW1hZ2UpIHtcbiAgICAgICAgcmV0dXJuIFJlc29sdmVkSW1hZ2VUeXBlO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICBsZXQgaXRlbVR5cGU6IFR5cGUgfCB0eXBlb2YgdW5kZWZpbmVkO1xuXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgdCA9IHR5cGVPZihpdGVtKTtcbiAgICAgICAgICAgIGlmICghaXRlbVR5cGUpIHtcbiAgICAgICAgICAgICAgICBpdGVtVHlwZSA9IHQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW1UeXBlID09PSB0KSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZW1UeXBlID0gVmFsdWVUeXBlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFycmF5KGl0ZW1UeXBlIHx8IFZhbHVlVHlwZSwgbGVuZ3RoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBhc3NlcnQodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jyk7XG4gICAgICAgIHJldHVybiBPYmplY3RUeXBlO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlOiBWYWx1ZSkge1xuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGUgPT09ICdudW1iZXInIHx8IHR5cGUgPT09ICdib29sZWFuJykge1xuICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgQ29sb3IgfHwgdmFsdWUgaW5zdGFuY2VvZiBGb3JtYXR0ZWQgfHwgdmFsdWUgaW5zdGFuY2VvZiBSZXNvbHZlZEltYWdlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgfVxufVxuXG5leHBvcnQge0NvbG9yLCBDb2xsYXRvcn07XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQge2lzVmFsdWUsIHR5cGVPZiwgQ29sb3J9IGZyb20gJy4uL3ZhbHVlcyc7XG5pbXBvcnQgRm9ybWF0dGVkIGZyb20gJy4uL3R5cGVzL2Zvcm1hdHRlZCc7XG5cbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7VmFsdWV9ICBmcm9tICcuLi92YWx1ZXMnO1xuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgUGFyc2luZ0NvbnRleHQgZnJvbSAnLi4vcGFyc2luZ19jb250ZXh0JztcblxuY2xhc3MgTGl0ZXJhbCBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG4gICAgdmFsdWU6IFZhbHVlO1xuXG4gICAgY29uc3RydWN0b3IodHlwZTogVHlwZSwgdmFsdWU6IFZhbHVlKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcGFyc2UoYXJnczogJFJlYWRPbmx5QXJyYXk8bWl4ZWQ+LCBjb250ZXh0OiBQYXJzaW5nQ29udGV4dCkge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggIT09IDIpXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgJ2xpdGVyYWwnIGV4cHJlc3Npb24gcmVxdWlyZXMgZXhhY3RseSBvbmUgYXJndW1lbnQsIGJ1dCBmb3VuZCAke2FyZ3MubGVuZ3RoIC0gMX0gaW5zdGVhZC5gKTtcblxuICAgICAgICBpZiAoIWlzVmFsdWUoYXJnc1sxXSkpXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgaW52YWxpZCB2YWx1ZWApO1xuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gKGFyZ3NbMV06IGFueSk7XG4gICAgICAgIGxldCB0eXBlID0gdHlwZU9mKHZhbHVlKTtcblxuICAgICAgICAvLyBzcGVjaWFsIGNhc2U6IGluZmVyIHRoZSBpdGVtIHR5cGUgaWYgcG9zc2libGUgZm9yIHplcm8tbGVuZ3RoIGFycmF5c1xuICAgICAgICBjb25zdCBleHBlY3RlZCA9IGNvbnRleHQuZXhwZWN0ZWRUeXBlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlLmtpbmQgPT09ICdhcnJheScgJiZcbiAgICAgICAgICAgIHR5cGUuTiA9PT0gMCAmJlxuICAgICAgICAgICAgZXhwZWN0ZWQgJiZcbiAgICAgICAgICAgIGV4cGVjdGVkLmtpbmQgPT09ICdhcnJheScgJiZcbiAgICAgICAgICAgICh0eXBlb2YgZXhwZWN0ZWQuTiAhPT0gJ251bWJlcicgfHwgZXhwZWN0ZWQuTiA9PT0gMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0eXBlID0gZXhwZWN0ZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IExpdGVyYWwodHlwZSwgdmFsdWUpO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICB9XG5cbiAgICBlYWNoQ2hpbGQoKSB7fVxuXG4gICAgb3V0cHV0RGVmaW5lZCgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCk6IEFycmF5PG1peGVkPiB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUua2luZCA9PT0gJ2FycmF5JyB8fCB0aGlzLnR5cGUua2luZCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHJldHVybiBbXCJsaXRlcmFsXCIsIHRoaXMudmFsdWVdO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsdWUgaW5zdGFuY2VvZiBDb2xvcikge1xuICAgICAgICAgICAgLy8gQ29uc3RhbnQtZm9sZGluZyBjYW4gZ2VuZXJhdGUgTGl0ZXJhbCBleHByZXNzaW9ucyB0aGF0IHlvdVxuICAgICAgICAgICAgLy8gY291bGRuJ3QgYWN0dWFsbHkgZ2VuZXJhdGUgd2l0aCBhIFwibGl0ZXJhbFwiIGV4cHJlc3Npb24sXG4gICAgICAgICAgICAvLyBzbyB3ZSBoYXZlIHRvIGltcGxlbWVudCBhbiBlcXVpdmFsZW50IHNlcmlhbGl6YXRpb24gaGVyZVxuICAgICAgICAgICAgcmV0dXJuIFtcInJnYmFcIl0uY29uY2F0KHRoaXMudmFsdWUudG9BcnJheSgpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbHVlIGluc3RhbmNlb2YgRm9ybWF0dGVkKSB7XG4gICAgICAgICAgICAvLyBTYW1lIGFzIENvbG9yXG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZS5zZXJpYWxpemUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFzc2VydCh0aGlzLnZhbHVlID09PSBudWxsIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIHRoaXMudmFsdWUgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIHRoaXMudmFsdWUgPT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIHRoaXMudmFsdWUgPT09ICdib29sZWFuJyk7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMudmFsdWU6IGFueSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpdGVyYWw7XG4iLCIvLyBAZmxvd1xuXG5jbGFzcyBSdW50aW1lRXJyb3Ige1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gJ0V4cHJlc3Npb25FdmFsdWF0aW9uRXJyb3InO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cblxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJ1bnRpbWVFcnJvcjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHtcbiAgICBPYmplY3RUeXBlLFxuICAgIFZhbHVlVHlwZSxcbiAgICBTdHJpbmdUeXBlLFxuICAgIE51bWJlclR5cGUsXG4gICAgQm9vbGVhblR5cGUsXG4gICAgY2hlY2tTdWJ0eXBlLFxuICAgIHRvU3RyaW5nLFxuICAgIGFycmF5XG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBSdW50aW1lRXJyb3IgZnJvbSAnLi4vcnVudGltZV9lcnJvcic7XG5pbXBvcnQge3R5cGVPZn0gZnJvbSAnLi4vdmFsdWVzJztcblxuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgUGFyc2luZ0NvbnRleHQgZnJvbSAnLi4vcGFyc2luZ19jb250ZXh0JztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25Db250ZXh0IGZyb20gJy4uL2V2YWx1YXRpb25fY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5jb25zdCB0eXBlcyA9IHtcbiAgICBzdHJpbmc6IFN0cmluZ1R5cGUsXG4gICAgbnVtYmVyOiBOdW1iZXJUeXBlLFxuICAgIGJvb2xlYW46IEJvb2xlYW5UeXBlLFxuICAgIG9iamVjdDogT2JqZWN0VHlwZVxufTtcblxuY2xhc3MgQXNzZXJ0aW9uIGltcGxlbWVudHMgRXhwcmVzc2lvbiB7XG4gICAgdHlwZTogVHlwZTtcbiAgICBhcmdzOiBBcnJheTxFeHByZXNzaW9uPjtcblxuICAgIGNvbnN0cnVjdG9yKHR5cGU6IFR5cGUsIGFyZ3M6IEFycmF5PEV4cHJlc3Npb24+KSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMuYXJncyA9IGFyZ3M7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpOiA/RXhwcmVzc2lvbiB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDIpXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LmApO1xuXG4gICAgICAgIGxldCBpID0gMTtcbiAgICAgICAgbGV0IHR5cGU7XG5cbiAgICAgICAgY29uc3QgbmFtZTogc3RyaW5nID0gKGFyZ3NbMF06IGFueSk7XG4gICAgICAgIGlmIChuYW1lID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICBsZXQgaXRlbVR5cGU7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHlwZSA9IGFyZ3NbMV07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0eXBlICE9PSAnc3RyaW5nJyB8fCAhKHR5cGUgaW4gdHlwZXMpIHx8IHR5cGUgPT09ICdvYmplY3QnKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcignVGhlIGl0ZW0gdHlwZSBhcmd1bWVudCBvZiBcImFycmF5XCIgbXVzdCBiZSBvbmUgb2Ygc3RyaW5nLCBudW1iZXIsIGJvb2xlYW4nLCAxKTtcbiAgICAgICAgICAgICAgICBpdGVtVHlwZSA9IHR5cGVzW3R5cGVdO1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXRlbVR5cGUgPSBWYWx1ZVR5cGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBOO1xuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgICAgIGlmIChhcmdzWzJdICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgICAgICh0eXBlb2YgYXJnc1syXSAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbMl0gPCAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzJdICE9PSBNYXRoLmZsb29yKGFyZ3NbMl0pKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcignVGhlIGxlbmd0aCBhcmd1bWVudCB0byBcImFycmF5XCIgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgbGl0ZXJhbCcsIDIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBOID0gYXJnc1syXTtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHR5cGUgPSBhcnJheShpdGVtVHlwZSwgTik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhc3NlcnQodHlwZXNbbmFtZV0sIG5hbWUpO1xuICAgICAgICAgICAgdHlwZSA9IHR5cGVzW25hbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyc2VkID0gW107XG4gICAgICAgIGZvciAoOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBjb250ZXh0LnBhcnNlKGFyZ3NbaV0sIGksIFZhbHVlVHlwZSk7XG4gICAgICAgICAgICBpZiAoIWlucHV0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHBhcnNlZC5wdXNoKGlucHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgQXNzZXJ0aW9uKHR5cGUsIHBhcnNlZCk7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoY3R4OiBFdmFsdWF0aW9uQ29udGV4dCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmFyZ3NbaV0uZXZhbHVhdGUoY3R4KTtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gY2hlY2tTdWJ0eXBlKHRoaXMudHlwZSwgdHlwZU9mKHZhbHVlKSk7XG4gICAgICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpID09PSB0aGlzLmFyZ3MubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoYEV4cGVjdGVkIHZhbHVlIHRvIGJlIG9mIHR5cGUgJHt0b1N0cmluZyh0aGlzLnR5cGUpfSwgYnV0IGZvdW5kICR7dG9TdHJpbmcodHlwZU9mKHZhbHVlKSl9IGluc3RlYWQuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhc3NlcnQoZmFsc2UpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBlYWNoQ2hpbGQoZm46IChfOiBFeHByZXNzaW9uKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMuYXJncy5mb3JFYWNoKGZuKTtcbiAgICB9XG5cbiAgICBvdXRwdXREZWZpbmVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hcmdzLmV2ZXJ5KGFyZyA9PiBhcmcub3V0cHV0RGVmaW5lZCgpKTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKTogQXJyYXk8bWl4ZWQ+IHtcbiAgICAgICAgY29uc3QgdHlwZSA9IHRoaXMudHlwZTtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IFt0eXBlLmtpbmRdO1xuICAgICAgICBpZiAodHlwZS5raW5kID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtVHlwZSA9IHR5cGUuaXRlbVR5cGU7XG4gICAgICAgICAgICBpZiAoaXRlbVR5cGUua2luZCA9PT0gJ3N0cmluZycgfHxcbiAgICAgICAgICAgICAgICBpdGVtVHlwZS5raW5kID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgICAgIGl0ZW1UeXBlLmtpbmQgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWQucHVzaChpdGVtVHlwZS5raW5kKTtcbiAgICAgICAgICAgICAgICBjb25zdCBOID0gdHlwZS5OO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgTiA9PT0gJ251bWJlcicgfHwgdGhpcy5hcmdzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplZC5wdXNoKE4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VyaWFsaXplZC5jb25jYXQodGhpcy5hcmdzLm1hcChhcmcgPT4gYXJnLnNlcmlhbGl6ZSgpKSk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBBc3NlcnRpb247XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge051bWJlclR5cGUsIFZhbHVlVHlwZSwgRm9ybWF0dGVkVHlwZSwgYXJyYXksIFN0cmluZ1R5cGUsIENvbG9yVHlwZSwgUmVzb2x2ZWRJbWFnZVR5cGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBGb3JtYXR0ZWQsIHtGb3JtYXR0ZWRTZWN0aW9ufSBmcm9tICcuLi90eXBlcy9mb3JtYXR0ZWQnO1xuaW1wb3J0IHt0b1N0cmluZywgdHlwZU9mfSBmcm9tICcuLi92YWx1ZXMnO1xuXG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uQ29udGV4dCBmcm9tICcuLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgUGFyc2luZ0NvbnRleHQgZnJvbSAnLi4vcGFyc2luZ19jb250ZXh0JztcbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbnR5cGUgRm9ybWF0dGVkU2VjdGlvbkV4cHJlc3Npb24gPSB7XG4gICAgLy8gQ29udGVudCBvZiBhIHNlY3Rpb24gbWF5IGJlIEltYWdlIGV4cHJlc3Npb24gb3Igb3RoZXJcbiAgICAvLyB0eXBlIG9mIGV4cHJlc3Npb24gdGhhdCBpcyBjb2VyY2FibGUgdG8gJ3N0cmluZycuXG4gICAgY29udGVudDogRXhwcmVzc2lvbixcbiAgICBzY2FsZTogRXhwcmVzc2lvbiB8IG51bGw7XG4gICAgZm9udDogRXhwcmVzc2lvbiB8IG51bGw7XG4gICAgdGV4dENvbG9yOiBFeHByZXNzaW9uIHwgbnVsbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRm9ybWF0RXhwcmVzc2lvbiBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG4gICAgc2VjdGlvbnM6IEFycmF5PEZvcm1hdHRlZFNlY3Rpb25FeHByZXNzaW9uPjtcblxuICAgIGNvbnN0cnVjdG9yKHNlY3Rpb25zOiBBcnJheTxGb3JtYXR0ZWRTZWN0aW9uRXhwcmVzc2lvbj4pIHtcbiAgICAgICAgdGhpcy50eXBlID0gRm9ybWF0dGVkVHlwZTtcbiAgICAgICAgdGhpcy5zZWN0aW9ucyA9IHNlY3Rpb25zO1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZShhcmdzOiAkUmVhZE9ubHlBcnJheTxtaXhlZD4sIGNvbnRleHQ6IFBhcnNpbmdDb250ZXh0KTogP0V4cHJlc3Npb24ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlyc3RBcmcgPSBhcmdzWzFdO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZmlyc3RBcmcpICYmIHR5cGVvZiBmaXJzdEFyZyA9PT0gJ29iamVjdCcpICB7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhbiBpbWFnZSBvciB0ZXh0IHNlY3Rpb24uYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZWN0aW9uczogQXJyYXk8Rm9ybWF0dGVkU2VjdGlvbkV4cHJlc3Npb24+ID0gW107XG4gICAgICAgIGxldCBuZXh0VG9rZW5NYXlCZU9iamVjdCA9IGZhbHNlO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBhcmdzLmxlbmd0aCAtIDE7ICsraSkge1xuICAgICAgICAgICAgY29uc3QgYXJnID0gKGFyZ3NbaV06IGFueSk7XG5cbiAgICAgICAgICAgIGlmIChuZXh0VG9rZW5NYXlCZU9iamVjdCAmJiB0eXBlb2YgYXJnID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGFyZykpIHtcbiAgICAgICAgICAgICAgICBuZXh0VG9rZW5NYXlCZU9iamVjdCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgbGV0IHNjYWxlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoYXJnWydmb250LXNjYWxlJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgc2NhbGUgPSBjb250ZXh0LnBhcnNlKGFyZ1snZm9udC1zY2FsZSddLCAxLCBOdW1iZXJUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzY2FsZSkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IGZvbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChhcmdbJ3RleHQtZm9udCddKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQgPSBjb250ZXh0LnBhcnNlKGFyZ1sndGV4dC1mb250J10sIDEsIGFycmF5KFN0cmluZ1R5cGUpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmb250KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgdGV4dENvbG9yID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoYXJnWyd0ZXh0LWNvbG9yJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dENvbG9yID0gY29udGV4dC5wYXJzZShhcmdbJ3RleHQtY29sb3InXSwgMSwgQ29sb3JUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0ZXh0Q29sb3IpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RFeHByZXNzaW9uID0gc2VjdGlvbnNbc2VjdGlvbnMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgbGFzdEV4cHJlc3Npb24uc2NhbGUgPSBzY2FsZTtcbiAgICAgICAgICAgICAgICBsYXN0RXhwcmVzc2lvbi5mb250ID0gZm9udDtcbiAgICAgICAgICAgICAgICBsYXN0RXhwcmVzc2lvbi50ZXh0Q29sb3IgPSB0ZXh0Q29sb3I7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBjb250ZXh0LnBhcnNlKGFyZ3NbaV0sIDEsIFZhbHVlVHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFjb250ZW50KSByZXR1cm4gbnVsbDtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGtpbmQgPSBjb250ZW50LnR5cGUua2luZDtcbiAgICAgICAgICAgICAgICBpZiAoa2luZCAhPT0gJ3N0cmluZycgJiYga2luZCAhPT0gJ3ZhbHVlJyAmJiBraW5kICE9PSAnbnVsbCcgJiYga2luZCAhPT0gJ3Jlc29sdmVkSW1hZ2UnKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRm9ybWF0dGVkIHRleHQgdHlwZSBtdXN0IGJlICdzdHJpbmcnLCAndmFsdWUnLCAnaW1hZ2UnIG9yICdudWxsJy5gKTtcblxuICAgICAgICAgICAgICAgIG5leHRUb2tlbk1heUJlT2JqZWN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBzZWN0aW9ucy5wdXNoKHtjb250ZW50LCBzY2FsZTogbnVsbCwgZm9udDogbnVsbCwgdGV4dENvbG9yOiBudWxsfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IEZvcm1hdEV4cHJlc3Npb24oc2VjdGlvbnMpO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGN0eDogRXZhbHVhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgY29uc3QgZXZhbHVhdGVTZWN0aW9uID0gc2VjdGlvbiA9PiB7XG4gICAgICAgICAgICBjb25zdCBldmFsdWF0ZWRDb250ZW50ID0gc2VjdGlvbi5jb250ZW50LmV2YWx1YXRlKGN0eCk7XG4gICAgICAgICAgICBpZiAodHlwZU9mKGV2YWx1YXRlZENvbnRlbnQpID09PSBSZXNvbHZlZEltYWdlVHlwZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRm9ybWF0dGVkU2VjdGlvbignJywgZXZhbHVhdGVkQ29udGVudCwgbnVsbCwgbnVsbCwgbnVsbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgRm9ybWF0dGVkU2VjdGlvbihcbiAgICAgICAgICAgICAgICAgICAgdG9TdHJpbmcoZXZhbHVhdGVkQ29udGVudCksXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uc2NhbGUgPyBzZWN0aW9uLnNjYWxlLmV2YWx1YXRlKGN0eCkgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLmZvbnQgPyBzZWN0aW9uLmZvbnQuZXZhbHVhdGUoY3R4KS5qb2luKCcsJykgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLnRleHRDb2xvciA/IHNlY3Rpb24udGV4dENvbG9yLmV2YWx1YXRlKGN0eCkgOiBudWxsXG4gICAgICAgICAgICApO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBuZXcgRm9ybWF0dGVkKHRoaXMuc2VjdGlvbnMubWFwKGV2YWx1YXRlU2VjdGlvbikpO1xuICAgIH1cblxuICAgIGVhY2hDaGlsZChmbjogKF86IEV4cHJlc3Npb24pID0+IHZvaWQpIHtcbiAgICAgICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHRoaXMuc2VjdGlvbnMpIHtcbiAgICAgICAgICAgIGZuKHNlY3Rpb24uY29udGVudCk7XG4gICAgICAgICAgICBpZiAoc2VjdGlvbi5zY2FsZSkge1xuICAgICAgICAgICAgICAgIGZuKHNlY3Rpb24uc2NhbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlY3Rpb24uZm9udCkge1xuICAgICAgICAgICAgICAgIGZuKHNlY3Rpb24uZm9udCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VjdGlvbi50ZXh0Q29sb3IpIHtcbiAgICAgICAgICAgICAgICBmbihzZWN0aW9uLnRleHRDb2xvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvdXRwdXREZWZpbmVkKCkge1xuICAgICAgICAvLyBUZWNobmljYWxseSB0aGUgY29tYmluYXRvcmljIHNldCBvZiBhbGwgY2hpbGRyZW5cbiAgICAgICAgLy8gVXN1YWxseSwgdGhpcy50ZXh0IHdpbGwgYmUgdW5kZWZpbmVkIGFueXdheVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkID0gW1wiZm9ybWF0XCJdO1xuICAgICAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgdGhpcy5zZWN0aW9ucykge1xuICAgICAgICAgICAgc2VyaWFsaXplZC5wdXNoKHNlY3Rpb24uY29udGVudC5zZXJpYWxpemUoKSk7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge307XG4gICAgICAgICAgICBpZiAoc2VjdGlvbi5zY2FsZSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnNbJ2ZvbnQtc2NhbGUnXSA9IHNlY3Rpb24uc2NhbGUuc2VyaWFsaXplKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VjdGlvbi5mb250KSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc1sndGV4dC1mb250J10gPSBzZWN0aW9uLmZvbnQuc2VyaWFsaXplKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VjdGlvbi50ZXh0Q29sb3IpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zWyd0ZXh0LWNvbG9yJ10gPSBzZWN0aW9uLnRleHRDb2xvci5zZXJpYWxpemUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlcmlhbGl6ZWQucHVzaChvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VyaWFsaXplZDtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge1Jlc29sdmVkSW1hZ2VUeXBlLCBTdHJpbmdUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgUmVzb2x2ZWRJbWFnZSBmcm9tICcuLi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25Db250ZXh0IGZyb20gJy4uL2V2YWx1YXRpb25fY29udGV4dCc7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW1hZ2VFeHByZXNzaW9uIGltcGxlbWVudHMgRXhwcmVzc2lvbiB7XG4gICAgdHlwZTogVHlwZTtcbiAgICBpbnB1dDogRXhwcmVzc2lvbjtcblxuICAgIGNvbnN0cnVjdG9yKGlucHV0OiBFeHByZXNzaW9uKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IFJlc29sdmVkSW1hZ2VUeXBlO1xuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpOiA/RXhwcmVzc2lvbiB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMikge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIHR3byBhcmd1bWVudHMuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuYW1lID0gY29udGV4dC5wYXJzZShhcmdzWzFdLCAxLCBTdHJpbmdUeXBlKTtcbiAgICAgICAgaWYgKCFuYW1lKSByZXR1cm4gY29udGV4dC5lcnJvcihgTm8gaW1hZ2UgbmFtZSBwcm92aWRlZC5gKTtcblxuICAgICAgICByZXR1cm4gbmV3IEltYWdlRXhwcmVzc2lvbihuYW1lKTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGV2YWx1YXRlZEltYWdlTmFtZSA9IHRoaXMuaW5wdXQuZXZhbHVhdGUoY3R4KTtcblxuICAgICAgICBjb25zdCB2YWx1ZSA9IFJlc29sdmVkSW1hZ2UuZnJvbVN0cmluZyhldmFsdWF0ZWRJbWFnZU5hbWUpO1xuICAgICAgICBpZiAodmFsdWUgJiYgY3R4LmF2YWlsYWJsZUltYWdlcykgdmFsdWUuYXZhaWxhYmxlID0gY3R4LmF2YWlsYWJsZUltYWdlcy5pbmRleE9mKGV2YWx1YXRlZEltYWdlTmFtZSkgPiAtMTtcblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoXzogRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICBmbih0aGlzLmlucHV0KTtcbiAgICB9XG5cbiAgICBvdXRwdXREZWZpbmVkKCkge1xuICAgICAgICAvLyBUaGUgb3V0cHV0IG9mIGltYWdlIGlzIGRldGVybWluZWQgYnkgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGltYWdlcyBpbiB0aGUgZXZhbHVhdGlvbiBjb250ZXh0XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIHJldHVybiBbXCJpbWFnZVwiLCB0aGlzLmlucHV0LnNlcmlhbGl6ZSgpXTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB7Qm9vbGVhblR5cGUsIENvbG9yVHlwZSwgTnVtYmVyVHlwZSwgU3RyaW5nVHlwZSwgVmFsdWVUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge0NvbG9yLCB0b1N0cmluZyBhcyB2YWx1ZVRvU3RyaW5nLCB2YWxpZGF0ZVJHQkF9IGZyb20gJy4uL3ZhbHVlcyc7XG5pbXBvcnQgUnVudGltZUVycm9yIGZyb20gJy4uL3J1bnRpbWVfZXJyb3InO1xuaW1wb3J0IEZvcm1hdHRlZCBmcm9tICcuLi90eXBlcy9mb3JtYXR0ZWQnO1xuaW1wb3J0IEZvcm1hdEV4cHJlc3Npb24gZnJvbSAnLi4vZGVmaW5pdGlvbnMvZm9ybWF0JztcbmltcG9ydCBJbWFnZUV4cHJlc3Npb24gZnJvbSAnLi4vZGVmaW5pdGlvbnMvaW1hZ2UnO1xuaW1wb3J0IFJlc29sdmVkSW1hZ2UgZnJvbSAnLi4vdHlwZXMvcmVzb2x2ZWRfaW1hZ2UnO1xuXG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbmNvbnN0IHR5cGVzID0ge1xuICAgICd0by1ib29sZWFuJzogQm9vbGVhblR5cGUsXG4gICAgJ3RvLWNvbG9yJzogQ29sb3JUeXBlLFxuICAgICd0by1udW1iZXInOiBOdW1iZXJUeXBlLFxuICAgICd0by1zdHJpbmcnOiBTdHJpbmdUeXBlXG59O1xuXG4vKipcbiAqIFNwZWNpYWwgZm9ybSBmb3IgZXJyb3ItY29hbGVzY2luZyBjb2VyY2lvbiBleHByZXNzaW9ucyBcInRvLW51bWJlclwiLFxuICogXCJ0by1jb2xvclwiLiAgU2luY2UgdGhlc2UgY29lcmNpb25zIGNhbiBmYWlsIGF0IHJ1bnRpbWUsIHRoZXkgYWNjZXB0IG11bHRpcGxlXG4gKiBhcmd1bWVudHMsIG9ubHkgZXZhbHVhdGluZyBvbmUgYXQgYSB0aW1lIHVudGlsIG9uZSBzdWNjZWVkcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBDb2VyY2lvbiBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG4gICAgYXJnczogQXJyYXk8RXhwcmVzc2lvbj47XG5cbiAgICBjb25zdHJ1Y3Rvcih0eXBlOiBUeXBlLCBhcmdzOiBBcnJheTxFeHByZXNzaW9uPikge1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgICB0aGlzLmFyZ3MgPSBhcmdzO1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZShhcmdzOiAkUmVhZE9ubHlBcnJheTxtaXhlZD4sIGNvbnRleHQ6IFBhcnNpbmdDb250ZXh0KTogP0V4cHJlc3Npb24ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPCAyKVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC5gKTtcblxuICAgICAgICBjb25zdCBuYW1lOiBzdHJpbmcgPSAoYXJnc1swXTogYW55KTtcbiAgICAgICAgYXNzZXJ0KHR5cGVzW25hbWVdLCBuYW1lKTtcblxuICAgICAgICBpZiAoKG5hbWUgPT09ICd0by1ib29sZWFuJyB8fCBuYW1lID09PSAndG8tc3RyaW5nJykgJiYgYXJncy5sZW5ndGggIT09IDIpXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgb25lIGFyZ3VtZW50LmApO1xuXG4gICAgICAgIGNvbnN0IHR5cGUgPSB0eXBlc1tuYW1lXTtcblxuICAgICAgICBjb25zdCBwYXJzZWQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IGNvbnRleHQucGFyc2UoYXJnc1tpXSwgaSwgVmFsdWVUeXBlKTtcbiAgICAgICAgICAgIGlmICghaW5wdXQpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgcGFyc2VkLnB1c2goaW5wdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBDb2VyY2lvbih0eXBlLCBwYXJzZWQpO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGN0eDogRXZhbHVhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZS5raW5kID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHJldHVybiBCb29sZWFuKHRoaXMuYXJnc1swXS5ldmFsdWF0ZShjdHgpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUua2luZCA9PT0gJ2NvbG9yJykge1xuICAgICAgICAgICAgbGV0IGlucHV0O1xuICAgICAgICAgICAgbGV0IGVycm9yO1xuICAgICAgICAgICAgZm9yIChjb25zdCBhcmcgb2YgdGhpcy5hcmdzKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSBhcmcuZXZhbHVhdGUoY3R4KTtcbiAgICAgICAgICAgICAgICBlcnJvciA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0IGluc3RhbmNlb2YgQ29sb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjID0gY3R4LnBhcnNlQ29sb3IoaW5wdXQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYykgcmV0dXJuIGM7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQubGVuZ3RoIDwgMyB8fCBpbnB1dC5sZW5ndGggPiA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGBJbnZhbGlkIHJiZ2EgdmFsdWUgJHtKU09OLnN0cmluZ2lmeShpbnB1dCl9OiBleHBlY3RlZCBhbiBhcnJheSBjb250YWluaW5nIGVpdGhlciB0aHJlZSBvciBmb3VyIG51bWVyaWMgdmFsdWVzLmA7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IHZhbGlkYXRlUkdCQShpbnB1dFswXSwgaW5wdXRbMV0sIGlucHV0WzJdLCBpbnB1dFszXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcigoaW5wdXRbMF06IGFueSkgLyAyNTUsIChpbnB1dFsxXTogYW55KSAvIDI1NSwgKGlucHV0WzJdOiBhbnkpIC8gMjU1LCAoaW5wdXRbM106IGFueSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihlcnJvciB8fCBgQ291bGQgbm90IHBhcnNlIGNvbG9yIGZyb20gdmFsdWUgJyR7dHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJyA/IGlucHV0IDogU3RyaW5nKEpTT04uc3RyaW5naWZ5KGlucHV0KSl9J2ApO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudHlwZS5raW5kID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYXJnIG9mIHRoaXMuYXJncykge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gYXJnLmV2YWx1YXRlKGN0eCk7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICBjb25zdCBudW0gPSBOdW1iZXIodmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChpc05hTihudW0pKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihgQ291bGQgbm90IGNvbnZlcnQgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9IHRvIG51bWJlci5gKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUua2luZCA9PT0gJ2Zvcm1hdHRlZCcpIHtcbiAgICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIGV4cGxpY2l0ICd0by1mb3JtYXR0ZWQnIGJ1dCB0aGlzIGNvZXJjaW9uIGNhbiBiZSBpbXBsaWNpdGx5XG4gICAgICAgICAgICAvLyBjcmVhdGVkIGJ5IHByb3BlcnRpZXMgdGhhdCBleHBlY3QgdGhlICdmb3JtYXR0ZWQnIHR5cGUuXG4gICAgICAgICAgICByZXR1cm4gRm9ybWF0dGVkLmZyb21TdHJpbmcodmFsdWVUb1N0cmluZyh0aGlzLmFyZ3NbMF0uZXZhbHVhdGUoY3R4KSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudHlwZS5raW5kID09PSAncmVzb2x2ZWRJbWFnZScpIHtcbiAgICAgICAgICAgIHJldHVybiBSZXNvbHZlZEltYWdlLmZyb21TdHJpbmcodmFsdWVUb1N0cmluZyh0aGlzLmFyZ3NbMF0uZXZhbHVhdGUoY3R4KSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlVG9TdHJpbmcodGhpcy5hcmdzWzBdLmV2YWx1YXRlKGN0eCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoXzogRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLmFyZ3MuZm9yRWFjaChmbik7XG4gICAgfVxuXG4gICAgb3V0cHV0RGVmaW5lZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXJncy5ldmVyeShhcmcgPT4gYXJnLm91dHB1dERlZmluZWQoKSk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICBpZiAodGhpcy50eXBlLmtpbmQgPT09ICdmb3JtYXR0ZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZvcm1hdEV4cHJlc3Npb24oW3tjb250ZW50OiB0aGlzLmFyZ3NbMF0sIHNjYWxlOiBudWxsLCBmb250OiBudWxsLCB0ZXh0Q29sb3I6IG51bGx9XSkuc2VyaWFsaXplKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50eXBlLmtpbmQgPT09ICdyZXNvbHZlZEltYWdlJykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbWFnZUV4cHJlc3Npb24odGhpcy5hcmdzWzBdKS5zZXJpYWxpemUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBbYHRvLSR7dGhpcy50eXBlLmtpbmR9YF07XG4gICAgICAgIHRoaXMuZWFjaENoaWxkKGNoaWxkID0+IHsgc2VyaWFsaXplZC5wdXNoKGNoaWxkLnNlcmlhbGl6ZSgpKTsgfSk7XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVkO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29lcmNpb247XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge0NvbG9yfSBmcm9tICcuL3ZhbHVlcyc7XG5pbXBvcnQgdHlwZSB7Rm9ybWF0dGVkU2VjdGlvbn0gZnJvbSAnLi90eXBlcy9mb3JtYXR0ZWQnO1xuaW1wb3J0IHR5cGUge0dsb2JhbFByb3BlcnRpZXMsIEZlYXR1cmUsIEZlYXR1cmVTdGF0ZX0gZnJvbSAnLi9pbmRleCc7XG5pbXBvcnQgdHlwZSB7Q2Fub25pY2FsVGlsZUlEfSBmcm9tICcuLi8uLi9zb3VyY2UvdGlsZV9pZCc7XG5cbmNvbnN0IGdlb21ldHJ5VHlwZXMgPSBbJ1Vua25vd24nLCAnUG9pbnQnLCAnTGluZVN0cmluZycsICdQb2x5Z29uJ107XG5cbmNsYXNzIEV2YWx1YXRpb25Db250ZXh0IHtcbiAgICBnbG9iYWxzOiBHbG9iYWxQcm9wZXJ0aWVzO1xuICAgIGZlYXR1cmU6ID9GZWF0dXJlO1xuICAgIGZlYXR1cmVTdGF0ZTogP0ZlYXR1cmVTdGF0ZTtcbiAgICBmb3JtYXR0ZWRTZWN0aW9uOiA/Rm9ybWF0dGVkU2VjdGlvbjtcbiAgICBhdmFpbGFibGVJbWFnZXM6ID9BcnJheTxzdHJpbmc+O1xuICAgIGNhbm9uaWNhbDogP0Nhbm9uaWNhbFRpbGVJRDtcblxuICAgIF9wYXJzZUNvbG9yQ2FjaGU6IHtbXzogc3RyaW5nXTogP0NvbG9yfTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmdsb2JhbHMgPSAobnVsbDogYW55KTtcbiAgICAgICAgdGhpcy5mZWF0dXJlID0gbnVsbDtcbiAgICAgICAgdGhpcy5mZWF0dXJlU3RhdGUgPSBudWxsO1xuICAgICAgICB0aGlzLmZvcm1hdHRlZFNlY3Rpb24gPSBudWxsO1xuICAgICAgICB0aGlzLl9wYXJzZUNvbG9yQ2FjaGUgPSB7fTtcbiAgICAgICAgdGhpcy5hdmFpbGFibGVJbWFnZXMgPSBudWxsO1xuICAgICAgICB0aGlzLmNhbm9uaWNhbCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZlYXR1cmUgJiYgJ2lkJyBpbiB0aGlzLmZlYXR1cmUgPyB0aGlzLmZlYXR1cmUuaWQgOiBudWxsO1xuICAgIH1cblxuICAgIGdlb21ldHJ5VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmVhdHVyZSA/IHR5cGVvZiB0aGlzLmZlYXR1cmUudHlwZSA9PT0gJ251bWJlcicgPyBnZW9tZXRyeVR5cGVzW3RoaXMuZmVhdHVyZS50eXBlXSA6IHRoaXMuZmVhdHVyZS50eXBlIDogbnVsbDtcbiAgICB9XG5cbiAgICBnZW9tZXRyeSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmVhdHVyZSAmJiAnZ2VvbWV0cnknIGluIHRoaXMuZmVhdHVyZSA/IHRoaXMuZmVhdHVyZS5nZW9tZXRyeSA6IG51bGw7XG4gICAgfVxuXG4gICAgY2Fub25pY2FsSUQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbm9uaWNhbDtcbiAgICB9XG5cbiAgICBwcm9wZXJ0aWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mZWF0dXJlICYmIHRoaXMuZmVhdHVyZS5wcm9wZXJ0aWVzIHx8IHt9O1xuICAgIH1cblxuICAgIHBhcnNlQ29sb3IoaW5wdXQ6IHN0cmluZyk6ID9Db2xvciB7XG4gICAgICAgIGxldCBjYWNoZWQgPSB0aGlzLl9wYXJzZUNvbG9yQ2FjaGVbaW5wdXRdO1xuICAgICAgICBpZiAoIWNhY2hlZCkge1xuICAgICAgICAgICAgY2FjaGVkID0gdGhpcy5fcGFyc2VDb2xvckNhY2hlW2lucHV0XSA9IENvbG9yLnBhcnNlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRXZhbHVhdGlvbkNvbnRleHQ7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge3RvU3RyaW5nfSBmcm9tICcuL3R5cGVzJztcblxuaW1wb3J0IFBhcnNpbmdDb250ZXh0IGZyb20gJy4vcGFyc2luZ19jb250ZXh0JztcbmltcG9ydCBFdmFsdWF0aW9uQ29udGV4dCBmcm9tICcuL2V2YWx1YXRpb25fY29udGV4dCc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9uLCBFeHByZXNzaW9uUmVnaXN0cnl9IGZyb20gJy4vZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSB7VHlwZX0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7VmFsdWV9IGZyb20gJy4vdmFsdWVzJztcblxuZXhwb3J0IHR5cGUgVmFyYXJncyA9IHt8IHR5cGU6IFR5cGUgfH07XG50eXBlIFNpZ25hdHVyZSA9IEFycmF5PFR5cGU+IHwgVmFyYXJncztcbnR5cGUgRXZhbHVhdGUgPSAoRXZhbHVhdGlvbkNvbnRleHQsIEFycmF5PEV4cHJlc3Npb24+KSA9PiBWYWx1ZTtcbnR5cGUgRGVmaW5pdGlvbiA9IFtUeXBlLCBTaWduYXR1cmUsIEV2YWx1YXRlXSB8XG4gICAge3x0eXBlOiBUeXBlLCBvdmVybG9hZHM6IEFycmF5PFtTaWduYXR1cmUsIEV2YWx1YXRlXT58fTtcblxuY2xhc3MgQ29tcG91bmRFeHByZXNzaW9uIGltcGxlbWVudHMgRXhwcmVzc2lvbiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHR5cGU6IFR5cGU7XG4gICAgX2V2YWx1YXRlOiBFdmFsdWF0ZTtcbiAgICBhcmdzOiBBcnJheTxFeHByZXNzaW9uPjtcblxuICAgIHN0YXRpYyBkZWZpbml0aW9uczoge1tfOiBzdHJpbmddOiBEZWZpbml0aW9uIH07XG5cbiAgICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIHR5cGU6IFR5cGUsIGV2YWx1YXRlOiBFdmFsdWF0ZSwgYXJnczogQXJyYXk8RXhwcmVzc2lvbj4pIHtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgdGhpcy5fZXZhbHVhdGUgPSBldmFsdWF0ZTtcbiAgICAgICAgdGhpcy5hcmdzID0gYXJncztcbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ldmFsdWF0ZShjdHgsIHRoaXMuYXJncyk7XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoXzogRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLmFyZ3MuZm9yRWFjaChmbik7XG4gICAgfVxuXG4gICAgb3V0cHV0RGVmaW5lZCgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpOiBBcnJheTxtaXhlZD4ge1xuICAgICAgICByZXR1cm4gW3RoaXMubmFtZV0uY29uY2F0KHRoaXMuYXJncy5tYXAoYXJnID0+IGFyZy5zZXJpYWxpemUoKSkpO1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZShhcmdzOiAkUmVhZE9ubHlBcnJheTxtaXhlZD4sIGNvbnRleHQ6IFBhcnNpbmdDb250ZXh0KTogP0V4cHJlc3Npb24ge1xuICAgICAgICBjb25zdCBvcDogc3RyaW5nID0gKGFyZ3NbMF06IGFueSk7XG4gICAgICAgIGNvbnN0IGRlZmluaXRpb24gPSBDb21wb3VuZEV4cHJlc3Npb24uZGVmaW5pdGlvbnNbb3BdO1xuICAgICAgICBpZiAoIWRlZmluaXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBVbmtub3duIGV4cHJlc3Npb24gXCIke29wfVwiLiBJZiB5b3Ugd2FudGVkIGEgbGl0ZXJhbCBhcnJheSwgdXNlIFtcImxpdGVyYWxcIiwgWy4uLl1dLmAsIDApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTm93IGNoZWNrIGFyZ3VtZW50IHR5cGVzIGFnYWluc3QgZWFjaCBzaWduYXR1cmVcbiAgICAgICAgY29uc3QgdHlwZSA9IEFycmF5LmlzQXJyYXkoZGVmaW5pdGlvbikgP1xuICAgICAgICAgICAgZGVmaW5pdGlvblswXSA6IGRlZmluaXRpb24udHlwZTtcblxuICAgICAgICBjb25zdCBhdmFpbGFibGVPdmVybG9hZHMgPSBBcnJheS5pc0FycmF5KGRlZmluaXRpb24pID9cbiAgICAgICAgICAgIFtbZGVmaW5pdGlvblsxXSwgZGVmaW5pdGlvblsyXV1dIDpcbiAgICAgICAgICAgIGRlZmluaXRpb24ub3ZlcmxvYWRzO1xuXG4gICAgICAgIGNvbnN0IG92ZXJsb2FkcyA9IGF2YWlsYWJsZU92ZXJsb2Fkcy5maWx0ZXIoKFtzaWduYXR1cmVdKSA9PiAoXG4gICAgICAgICAgICAhQXJyYXkuaXNBcnJheShzaWduYXR1cmUpIHx8IC8vIHZhcmFnc1xuICAgICAgICAgICAgc2lnbmF0dXJlLmxlbmd0aCA9PT0gYXJncy5sZW5ndGggLSAxIC8vIGNvcnJlY3QgcGFyYW0gY291bnRcbiAgICAgICAgKSk7XG5cbiAgICAgICAgbGV0IHNpZ25hdHVyZUNvbnRleHQ6IFBhcnNpbmdDb250ZXh0ID0gKG51bGw6IGFueSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBbcGFyYW1zLCBldmFsdWF0ZV0gb2Ygb3ZlcmxvYWRzKSB7XG4gICAgICAgICAgICAvLyBVc2UgYSBmcmVzaCBjb250ZXh0IGZvciBlYWNoIGF0dGVtcHRlZCBzaWduYXR1cmUgc28gdGhhdCwgaWZcbiAgICAgICAgICAgIC8vIHdlIGV2ZW50dWFsbHkgc3VjY2VlZCwgd2UgaGF2ZW4ndCBwb2xsdXRlZCBgY29udGV4dC5lcnJvcnNgLlxuICAgICAgICAgICAgc2lnbmF0dXJlQ29udGV4dCA9IG5ldyBQYXJzaW5nQ29udGV4dChjb250ZXh0LnJlZ2lzdHJ5LCBjb250ZXh0LnBhdGgsIG51bGwsIGNvbnRleHQuc2NvcGUpO1xuXG4gICAgICAgICAgICAvLyBGaXJzdCBwYXJzZSBhbGwgdGhlIGFyZ3MsIHBvdGVudGlhbGx5IGNvZXJjaW5nIHRvIHRoZVxuICAgICAgICAgICAgLy8gdHlwZXMgZXhwZWN0ZWQgYnkgdGhpcyBvdmVybG9hZC5cbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEFyZ3M6IEFycmF5PEV4cHJlc3Npb24+ID0gW107XG4gICAgICAgICAgICBsZXQgYXJnUGFyc2VGYWlsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyZyA9IGFyZ3NbaV07XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWRUeXBlID0gQXJyYXkuaXNBcnJheShwYXJhbXMpID9cbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2kgLSAxXSA6XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy50eXBlO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gc2lnbmF0dXJlQ29udGV4dC5wYXJzZShhcmcsIDEgKyBwYXJzZWRBcmdzLmxlbmd0aCwgZXhwZWN0ZWRUeXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgICAgICAgICAgICBhcmdQYXJzZUZhaWxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwYXJzZWRBcmdzLnB1c2gocGFyc2VkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhcmdQYXJzZUZhaWxlZCkge1xuICAgICAgICAgICAgICAgIC8vIENvdWxkbid0IGNvZXJjZSBhcmdzIG9mIHRoaXMgb3ZlcmxvYWQgdG8gZXhwZWN0ZWQgdHlwZSwgbW92ZVxuICAgICAgICAgICAgICAgIC8vIG9uIHRvIG5leHQgb25lLlxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJhbXMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggIT09IHBhcnNlZEFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZUNvbnRleHQuZXJyb3IoYEV4cGVjdGVkICR7cGFyYW1zLmxlbmd0aH0gYXJndW1lbnRzLCBidXQgZm91bmQgJHtwYXJzZWRBcmdzLmxlbmd0aH0gaW5zdGVhZC5gKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcnNlZEFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IEFycmF5LmlzQXJyYXkocGFyYW1zKSA/IHBhcmFtc1tpXSA6IHBhcmFtcy50eXBlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyZyA9IHBhcnNlZEFyZ3NbaV07XG4gICAgICAgICAgICAgICAgc2lnbmF0dXJlQ29udGV4dC5jb25jYXQoaSArIDEpLmNoZWNrU3VidHlwZShleHBlY3RlZCwgYXJnLnR5cGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2lnbmF0dXJlQ29udGV4dC5lcnJvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb21wb3VuZEV4cHJlc3Npb24ob3AsIHR5cGUsIGV2YWx1YXRlLCBwYXJzZWRBcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGFzc2VydCghc2lnbmF0dXJlQ29udGV4dCB8fCBzaWduYXR1cmVDb250ZXh0LmVycm9ycy5sZW5ndGggPiAwKTtcblxuICAgICAgICBpZiAob3ZlcmxvYWRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgY29udGV4dC5lcnJvcnMucHVzaCguLi5zaWduYXR1cmVDb250ZXh0LmVycm9ycyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IG92ZXJsb2Fkcy5sZW5ndGggPyBvdmVybG9hZHMgOiBhdmFpbGFibGVPdmVybG9hZHM7XG4gICAgICAgICAgICBjb25zdCBzaWduYXR1cmVzID0gZXhwZWN0ZWRcbiAgICAgICAgICAgICAgICAubWFwKChbcGFyYW1zXSkgPT4gc3RyaW5naWZ5U2lnbmF0dXJlKHBhcmFtcykpXG4gICAgICAgICAgICAgICAgLmpvaW4oJyB8ICcpO1xuXG4gICAgICAgICAgICBjb25zdCBhY3R1YWxUeXBlcyA9IFtdO1xuICAgICAgICAgICAgLy8gRm9yIGVycm9yIG1lc3NhZ2UsIHJlLXBhcnNlIGFyZ3VtZW50cyB3aXRob3V0IHRyeWluZyB0b1xuICAgICAgICAgICAgLy8gYXBwbHkgYW55IGNvZXJjaW9uc1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gY29udGV4dC5wYXJzZShhcmdzW2ldLCAxICsgYWN0dWFsVHlwZXMubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgYWN0dWFsVHlwZXMucHVzaCh0b1N0cmluZyhwYXJzZWQudHlwZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgYXJndW1lbnRzIG9mIHR5cGUgJHtzaWduYXR1cmVzfSwgYnV0IGZvdW5kICgke2FjdHVhbFR5cGVzLmpvaW4oJywgJyl9KSBpbnN0ZWFkLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgc3RhdGljIHJlZ2lzdGVyKFxuICAgICAgICByZWdpc3RyeTogRXhwcmVzc2lvblJlZ2lzdHJ5LFxuICAgICAgICBkZWZpbml0aW9uczoge1tfOiBzdHJpbmddOiBEZWZpbml0aW9uIH1cbiAgICApIHtcbiAgICAgICAgYXNzZXJ0KCFDb21wb3VuZEV4cHJlc3Npb24uZGVmaW5pdGlvbnMpO1xuICAgICAgICBDb21wb3VuZEV4cHJlc3Npb24uZGVmaW5pdGlvbnMgPSBkZWZpbml0aW9ucztcbiAgICAgICAgZm9yIChjb25zdCBuYW1lIGluIGRlZmluaXRpb25zKSB7XG4gICAgICAgICAgICByZWdpc3RyeVtuYW1lXSA9IENvbXBvdW5kRXhwcmVzc2lvbjtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5U2lnbmF0dXJlKHNpZ25hdHVyZTogU2lnbmF0dXJlKTogc3RyaW5nIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShzaWduYXR1cmUpKSB7XG4gICAgICAgIHJldHVybiBgKCR7c2lnbmF0dXJlLm1hcCh0b1N0cmluZykuam9pbignLCAnKX0pYDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYCgke3RvU3RyaW5nKHNpZ25hdHVyZS50eXBlKX0uLi4pYDtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbXBvdW5kRXhwcmVzc2lvbjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7U3RyaW5nVHlwZSwgQm9vbGVhblR5cGUsIENvbGxhdG9yVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IENvbGxhdG9yIGZyb20gJy4uL3R5cGVzL2NvbGxhdG9yJztcblxuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb2xsYXRvckV4cHJlc3Npb24gaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuICAgIGNhc2VTZW5zaXRpdmU6IEV4cHJlc3Npb247XG4gICAgZGlhY3JpdGljU2Vuc2l0aXZlOiBFeHByZXNzaW9uO1xuICAgIGxvY2FsZTogRXhwcmVzc2lvbiB8IG51bGw7XG5cbiAgICBjb25zdHJ1Y3RvcihjYXNlU2Vuc2l0aXZlOiBFeHByZXNzaW9uLCBkaWFjcml0aWNTZW5zaXRpdmU6IEV4cHJlc3Npb24sIGxvY2FsZTogRXhwcmVzc2lvbiB8IG51bGwpIHtcbiAgICAgICAgdGhpcy50eXBlID0gQ29sbGF0b3JUeXBlO1xuICAgICAgICB0aGlzLmxvY2FsZSA9IGxvY2FsZTtcbiAgICAgICAgdGhpcy5jYXNlU2Vuc2l0aXZlID0gY2FzZVNlbnNpdGl2ZTtcbiAgICAgICAgdGhpcy5kaWFjcml0aWNTZW5zaXRpdmUgPSBkaWFjcml0aWNTZW5zaXRpdmU7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpOiA/RXhwcmVzc2lvbiB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMilcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBvbmUgYXJndW1lbnQuYCk7XG5cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IChhcmdzWzFdOiBhbnkpO1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShvcHRpb25zKSlcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBDb2xsYXRvciBvcHRpb25zIGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0LmApO1xuXG4gICAgICAgIGNvbnN0IGNhc2VTZW5zaXRpdmUgPSBjb250ZXh0LnBhcnNlKFxuICAgICAgICAgICAgb3B0aW9uc1snY2FzZS1zZW5zaXRpdmUnXSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBvcHRpb25zWydjYXNlLXNlbnNpdGl2ZSddLCAxLCBCb29sZWFuVHlwZSk7XG4gICAgICAgIGlmICghY2FzZVNlbnNpdGl2ZSkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgY29uc3QgZGlhY3JpdGljU2Vuc2l0aXZlID0gY29udGV4dC5wYXJzZShcbiAgICAgICAgICAgIG9wdGlvbnNbJ2RpYWNyaXRpYy1zZW5zaXRpdmUnXSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBvcHRpb25zWydkaWFjcml0aWMtc2Vuc2l0aXZlJ10sIDEsIEJvb2xlYW5UeXBlKTtcbiAgICAgICAgaWYgKCFkaWFjcml0aWNTZW5zaXRpdmUpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGxldCBsb2NhbGUgPSBudWxsO1xuICAgICAgICBpZiAob3B0aW9uc1snbG9jYWxlJ10pIHtcbiAgICAgICAgICAgIGxvY2FsZSA9IGNvbnRleHQucGFyc2Uob3B0aW9uc1snbG9jYWxlJ10sIDEsIFN0cmluZ1R5cGUpO1xuICAgICAgICAgICAgaWYgKCFsb2NhbGUpIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBDb2xsYXRvckV4cHJlc3Npb24oY2FzZVNlbnNpdGl2ZSwgZGlhY3JpdGljU2Vuc2l0aXZlLCBsb2NhbGUpO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGN0eDogRXZhbHVhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xsYXRvcih0aGlzLmNhc2VTZW5zaXRpdmUuZXZhbHVhdGUoY3R4KSwgdGhpcy5kaWFjcml0aWNTZW5zaXRpdmUuZXZhbHVhdGUoY3R4KSwgdGhpcy5sb2NhbGUgPyB0aGlzLmxvY2FsZS5ldmFsdWF0ZShjdHgpIDogbnVsbCk7XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoXzogRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICBmbih0aGlzLmNhc2VTZW5zaXRpdmUpO1xuICAgICAgICBmbih0aGlzLmRpYWNyaXRpY1NlbnNpdGl2ZSk7XG4gICAgICAgIGlmICh0aGlzLmxvY2FsZSkge1xuICAgICAgICAgICAgZm4odGhpcy5sb2NhbGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb3V0cHV0RGVmaW5lZCgpIHtcbiAgICAgICAgLy8gVGVjaG5pY2FsbHkgdGhlIHNldCBvZiBwb3NzaWJsZSBvdXRwdXRzIGlzIHRoZSBjb21iaW5hdG9yaWMgc2V0IG9mIENvbGxhdG9ycyBwcm9kdWNlZFxuICAgICAgICAvLyBieSBhbGwgcG9zc2libGUgb3V0cHV0cyBvZiBsb2NhbGUvY2FzZVNlbnNpdGl2ZS9kaWFjcml0aWNTZW5zaXRpdmVcbiAgICAgICAgLy8gQnV0IGZvciB0aGUgcHJpbWFyeSB1c2Ugb2YgQ29sbGF0b3JzIGluIGNvbXBhcmlzb24gb3BlcmF0b3JzLCB3ZSBpZ25vcmUgdGhlIENvbGxhdG9yJ3NcbiAgICAgICAgLy8gcG9zc2libGUgb3V0cHV0cyBhbnl3YXksIHNvIHdlIGNhbiBnZXQgYXdheSB3aXRoIGxlYXZpbmcgdGhpcyBmYWxzZSBmb3Igbm93LlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge307XG4gICAgICAgIG9wdGlvbnNbJ2Nhc2Utc2Vuc2l0aXZlJ10gPSB0aGlzLmNhc2VTZW5zaXRpdmUuc2VyaWFsaXplKCk7XG4gICAgICAgIG9wdGlvbnNbJ2RpYWNyaXRpYy1zZW5zaXRpdmUnXSA9IHRoaXMuZGlhY3JpdGljU2Vuc2l0aXZlLnNlcmlhbGl6ZSgpO1xuICAgICAgICBpZiAodGhpcy5sb2NhbGUpIHtcbiAgICAgICAgICAgIG9wdGlvbnNbJ2xvY2FsZSddID0gdGhpcy5sb2NhbGUuc2VyaWFsaXplKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcImNvbGxhdG9yXCIsIG9wdGlvbnNdO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7aXNWYWx1ZX0gZnJvbSAnLi4vdmFsdWVzJztcbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge0Jvb2xlYW5UeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtHZW9KU09OLCBHZW9KU09OUG9seWdvbiwgR2VvSlNPTk11bHRpUG9seWdvbn0gZnJvbSAnQG1hcGJveC9nZW9qc29uLXR5cGVzJztcbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB0eXBlIHtDYW5vbmljYWxUaWxlSUR9IGZyb20gJy4uLy4uLy4uL3NvdXJjZS90aWxlX2lkJztcblxudHlwZSBHZW9KU09OUG9seWdvbnMgPXwgR2VvSlNPTlBvbHlnb24gfCBHZW9KU09OTXVsdGlQb2x5Z29uO1xuXG4vLyBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZXG50eXBlIEJCb3ggPSBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbmNvbnN0IEVYVEVOVCA9IDgxOTI7XG5cbmZ1bmN0aW9uIHVwZGF0ZUJCb3goYmJveDogQkJveCwgY29vcmQ6IFBvaW50KSB7XG4gICAgYmJveFswXSA9IE1hdGgubWluKGJib3hbMF0sIGNvb3JkWzBdKTtcbiAgICBiYm94WzFdID0gTWF0aC5taW4oYmJveFsxXSwgY29vcmRbMV0pO1xuICAgIGJib3hbMl0gPSBNYXRoLm1heChiYm94WzJdLCBjb29yZFswXSk7XG4gICAgYmJveFszXSA9IE1hdGgubWF4KGJib3hbM10sIGNvb3JkWzFdKTtcbn1cblxuZnVuY3Rpb24gbWVyY2F0b3JYZnJvbUxuZyhsbmc6IG51bWJlcikge1xuICAgIHJldHVybiAoMTgwICsgbG5nKSAvIDM2MDtcbn1cblxuZnVuY3Rpb24gbWVyY2F0b3JZZnJvbUxhdChsYXQ6IG51bWJlcikge1xuICAgIHJldHVybiAoMTgwIC0gKDE4MCAvIE1hdGguUEkgKiBNYXRoLmxvZyhNYXRoLnRhbihNYXRoLlBJIC8gNCArIGxhdCAqIE1hdGguUEkgLyAzNjApKSkpIC8gMzYwO1xufVxuXG5mdW5jdGlvbiBib3hXaXRoaW5Cb3goYmJveDE6IEJCb3gsIGJib3gyOiBCQm94KSB7XG4gICAgaWYgKGJib3gxWzBdIDw9IGJib3gyWzBdKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGJib3gxWzJdID49IGJib3gyWzJdKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGJib3gxWzFdIDw9IGJib3gyWzFdKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGJib3gxWzNdID49IGJib3gyWzNdKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdldFRpbGVDb29yZGluYXRlcyhwLCBjYW5vbmljYWw6IENhbm9uaWNhbFRpbGVJRCkge1xuICAgIGNvbnN0IHggPSBtZXJjYXRvclhmcm9tTG5nKHBbMF0pO1xuICAgIGNvbnN0IHkgPSBtZXJjYXRvcllmcm9tTGF0KHBbMV0pO1xuICAgIGNvbnN0IHRpbGVzQXRab29tID0gTWF0aC5wb3coMiwgY2Fub25pY2FsLnopO1xuICAgIHJldHVybiBbTWF0aC5yb3VuZCh4ICogdGlsZXNBdFpvb20gKiBFWFRFTlQpLCBNYXRoLnJvdW5kKHkgKiB0aWxlc0F0Wm9vbSAqIEVYVEVOVCldO1xufVxuXG5mdW5jdGlvbiBvbkJvdW5kYXJ5KHAsIHAxLCBwMikge1xuICAgIGNvbnN0IHgxID0gcFswXSAtIHAxWzBdO1xuICAgIGNvbnN0IHkxID0gcFsxXSAtIHAxWzFdO1xuICAgIGNvbnN0IHgyID0gcFswXSAtIHAyWzBdO1xuICAgIGNvbnN0IHkyID0gcFsxXSAtIHAyWzFdO1xuICAgIHJldHVybiAoeDEgKiB5MiAtIHgyICogeTEgPT09IDApICYmICh4MSAqIHgyIDw9IDApICYmICh5MSAqIHkyIDw9IDApO1xufVxuXG5mdW5jdGlvbiByYXlJbnRlcnNlY3QocCwgcDEsIHAyKSB7XG4gICAgcmV0dXJuICgocDFbMV0gPiBwWzFdKSAhPT0gKHAyWzFdID4gcFsxXSkpICYmIChwWzBdIDwgKHAyWzBdIC0gcDFbMF0pICogKHBbMV0gLSBwMVsxXSkgLyAocDJbMV0gLSBwMVsxXSkgKyBwMVswXSk7XG59XG5cbi8vIHJheSBjYXN0aW5nIGFsZ29yaXRobSBmb3IgZGV0ZWN0aW5nIGlmIHBvaW50IGlzIGluIHBvbHlnb25cbmZ1bmN0aW9uIHBvaW50V2l0aGluUG9seWdvbihwb2ludCwgcmluZ3MpIHtcbiAgICBsZXQgaW5zaWRlID0gZmFsc2U7XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHJpbmdzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJpbmcgPSByaW5nc1tpXTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDAsIGxlbjIgPSByaW5nLmxlbmd0aDsgaiA8IGxlbjIgLSAxOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChvbkJvdW5kYXJ5KHBvaW50LCByaW5nW2pdLCByaW5nW2ogKyAxXSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmIChyYXlJbnRlcnNlY3QocG9pbnQsIHJpbmdbal0sIHJpbmdbaiArIDFdKSkgaW5zaWRlID0gIWluc2lkZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaW5zaWRlO1xufVxuXG5mdW5jdGlvbiBwb2ludFdpdGhpblBvbHlnb25zKHBvaW50LCBwb2x5Z29ucykge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9seWdvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHBvaW50V2l0aGluUG9seWdvbihwb2ludCwgcG9seWdvbnNbaV0pKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBwZXJwKHYxLCB2Mikge1xuICAgIHJldHVybiAodjFbMF0gKiB2MlsxXSAtIHYxWzFdICogdjJbMF0pO1xufVxuXG4vLyBjaGVjayBpZiBwMSBhbmQgcDIgYXJlIGluIGRpZmZlcmVudCBzaWRlcyBvZiBsaW5lIHNlZ21lbnQgcTEtPnEyXG5mdW5jdGlvbiAgdHdvU2lkZWQocDEsIHAyLCBxMSwgcTIpIHtcbiAgICAvLyBxMS0+cDEgKHgxLCB5MSksIHExLT5wMiAoeDIsIHkyKSwgcTEtPnEyICh4MywgeTMpXG4gICAgY29uc3QgeDEgPSBwMVswXSAtIHExWzBdO1xuICAgIGNvbnN0IHkxID0gcDFbMV0gLSBxMVsxXTtcbiAgICBjb25zdCB4MiA9IHAyWzBdIC0gcTFbMF07XG4gICAgY29uc3QgeTIgPSBwMlsxXSAtIHExWzFdO1xuICAgIGNvbnN0IHgzID0gcTJbMF0gLSBxMVswXTtcbiAgICBjb25zdCB5MyA9IHEyWzFdIC0gcTFbMV07XG4gICAgY29uc3QgZGV0MSA9ICh4MSAqIHkzIC0geDMgKiB5MSk7XG4gICAgY29uc3QgZGV0MiA9ICAoeDIgKiB5MyAtIHgzICogeTIpO1xuICAgIGlmICgoZGV0MSA+IDAgJiYgZGV0MiA8IDApIHx8IChkZXQxIDwgMCAmJiBkZXQyID4gMCkpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBmYWxzZTtcbn1cbi8vIGEsIGIgYXJlIGVuZCBwb2ludHMgZm9yIGxpbmUgc2VnbWVudDEsIGMgYW5kIGQgYXJlIGVuZCBwb2ludHMgZm9yIGxpbmUgc2VnbWVudDJcbmZ1bmN0aW9uIGxpbmVJbnRlcnNlY3RMaW5lKGEsIGIsIGMsIGQpIHtcbiAgICAvLyBjaGVjayBpZiB0d28gc2VnbWVudHMgYXJlIHBhcmFsbGVsIG9yIG5vdFxuICAgIC8vIHByZWNvbmRpdGlvbiBpcyBlbmQgcG9pbnQgYSwgYiBpcyBpbnNpZGUgcG9seWdvbiwgaWYgbGluZSBhLT5iIGlzXG4gICAgLy8gcGFyYWxsZWwgdG8gcG9seWdvbiBlZGdlIGMtPmQsIHRoZW4gYS0+YiB3b24ndCBpbnRlcnNlY3Qgd2l0aCBjLT5kXG4gICAgY29uc3QgdmVjdG9yUCA9IFtiWzBdIC0gYVswXSwgYlsxXSAtIGFbMV1dO1xuICAgIGNvbnN0IHZlY3RvclEgPSBbZFswXSAtIGNbMF0sIGRbMV0gLSBjWzFdXTtcbiAgICBpZiAocGVycCh2ZWN0b3JRLCB2ZWN0b3JQKSA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gSWYgbGluZXMgYXJlIGludGVyc2VjdGluZyB3aXRoIGVhY2ggb3RoZXIsIHRoZSByZWxhdGl2ZSBsb2NhdGlvbiBzaG91bGQgYmU6XG4gICAgLy8gYSBhbmQgYiBsaWUgaW4gZGlmZmVyZW50IHNpZGVzIG9mIHNlZ21lbnQgYy0+ZFxuICAgIC8vIGMgYW5kIGQgbGllIGluIGRpZmZlcmVudCBzaWRlcyBvZiBzZWdtZW50IGEtPmJcbiAgICBpZiAodHdvU2lkZWQoYSwgYiwgYywgZCkgJiYgdHdvU2lkZWQoYywgZCwgYSwgYikpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbGluZUludGVyc2VjdFBvbHlnb24ocDEsIHAyLCBwb2x5Z29uKSB7XG4gICAgZm9yIChjb25zdCByaW5nIG9mIHBvbHlnb24pIHtcbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGV2ZXJ5IGVkZ2Ugb2YgdGhlIHJpbmdcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCByaW5nLmxlbmd0aCAtIDE7ICsraikge1xuICAgICAgICAgICAgaWYgKGxpbmVJbnRlcnNlY3RMaW5lKHAxLCBwMiwgcmluZ1tqXSwgcmluZ1tqICsgMV0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBsaW5lU3RyaW5nV2l0aGluUG9seWdvbihsaW5lLCBwb2x5Z29uKSB7XG4gICAgLy8gRmlyc3QsIGNoZWNrIGlmIGdlb21ldHJ5IHBvaW50cyBvZiBsaW5lIHNlZ21lbnRzIGFyZSBhbGwgaW5zaWRlIHBvbHlnb25cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKCFwb2ludFdpdGhpblBvbHlnb24obGluZVtpXSwgcG9seWdvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNlY29uZCwgY2hlY2sgaWYgdGhlcmUgaXMgbGluZSBzZWdtZW50IGludGVyc2VjdGluZyBwb2x5Z29uIGVkZ2VcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmUubGVuZ3RoIC0gMTsgKytpKSB7XG4gICAgICAgIGlmIChsaW5lSW50ZXJzZWN0UG9seWdvbihsaW5lW2ldLCBsaW5lW2kgKyAxXSwgcG9seWdvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gbGluZVN0cmluZ1dpdGhpblBvbHlnb25zKGxpbmUsIHBvbHlnb25zKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2x5Z29ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAobGluZVN0cmluZ1dpdGhpblBvbHlnb24obGluZSwgcG9seWdvbnNbaV0pKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRUaWxlUG9seWdvbihjb29yZGluYXRlcywgYmJveCwgY2Fub25pY2FsKSB7XG4gICAgY29uc3QgcG9seWdvbiA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29vcmRpbmF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcmluZyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvb3JkaW5hdGVzW2ldLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCBjb29yZCA9IGdldFRpbGVDb29yZGluYXRlcyhjb29yZGluYXRlc1tpXVtqXSwgY2Fub25pY2FsKTtcbiAgICAgICAgICAgIHVwZGF0ZUJCb3goYmJveCwgY29vcmQpO1xuICAgICAgICAgICAgcmluZy5wdXNoKGNvb3JkKTtcbiAgICAgICAgfVxuICAgICAgICBwb2x5Z29uLnB1c2gocmluZyk7XG4gICAgfVxuICAgIHJldHVybiBwb2x5Z29uO1xufVxuXG5mdW5jdGlvbiBnZXRUaWxlUG9seWdvbnMoY29vcmRpbmF0ZXMsIGJib3gsIGNhbm9uaWNhbCkge1xuICAgIGNvbnN0IHBvbHlnb25zID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29yZGluYXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBwb2x5Z29uID0gZ2V0VGlsZVBvbHlnb24oY29vcmRpbmF0ZXNbaV0sIGJib3gsIGNhbm9uaWNhbCk7XG4gICAgICAgIHBvbHlnb25zLnB1c2gocG9seWdvbik7XG4gICAgfVxuICAgIHJldHVybiBwb2x5Z29ucztcbn1cblxuZnVuY3Rpb24gdXBkYXRlUG9pbnQocCwgYmJveCwgcG9seUJCb3gsIHdvcmxkU2l6ZSkge1xuICAgIGlmIChwWzBdIDwgcG9seUJCb3hbMF0gfHwgcFswXSA+IHBvbHlCQm94WzJdKSB7XG4gICAgICAgIGNvbnN0IGhhbGZXb3JsZFNpemUgPSB3b3JsZFNpemUgKiAwLjU7XG4gICAgICAgIGxldCBzaGlmdCA9IChwWzBdIC0gcG9seUJCb3hbMF0gPiBoYWxmV29ybGRTaXplKSA/IC13b3JsZFNpemUgOiAocG9seUJCb3hbMF0gLSBwWzBdID4gaGFsZldvcmxkU2l6ZSkgPyB3b3JsZFNpemUgOiAwO1xuICAgICAgICBpZiAoc2hpZnQgPT09IDApIHtcbiAgICAgICAgICAgIHNoaWZ0ID0gKHBbMF0gLSBwb2x5QkJveFsyXSA+IGhhbGZXb3JsZFNpemUpID8gLXdvcmxkU2l6ZSA6IChwb2x5QkJveFsyXSAtIHBbMF0gPiBoYWxmV29ybGRTaXplKSA/IHdvcmxkU2l6ZSA6IDA7XG4gICAgICAgIH1cbiAgICAgICAgcFswXSArPSBzaGlmdDtcbiAgICB9XG4gICAgdXBkYXRlQkJveChiYm94LCBwKTtcbn1cblxuZnVuY3Rpb24gcmVzZXRCQm94KGJib3gpIHtcbiAgICBiYm94WzBdID0gYmJveFsxXSA9IEluZmluaXR5O1xuICAgIGJib3hbMl0gPSBiYm94WzNdID0gLUluZmluaXR5O1xufVxuXG5mdW5jdGlvbiBnZXRUaWxlUG9pbnRzKGdlb21ldHJ5LCBwb2ludEJCb3gsIHBvbHlCQm94LCBjYW5vbmljYWwpIHtcbiAgICBjb25zdCB3b3JsZFNpemUgPSBNYXRoLnBvdygyLCBjYW5vbmljYWwueikgKiBFWFRFTlQ7XG4gICAgY29uc3Qgc2hpZnRzID0gW2Nhbm9uaWNhbC54ICogRVhURU5ULCBjYW5vbmljYWwueSAqIEVYVEVOVF07XG4gICAgY29uc3QgdGlsZVBvaW50cyA9IFtdO1xuICAgIGZvciAoY29uc3QgcG9pbnRzIG9mIGdlb21ldHJ5KSB7XG4gICAgICAgIGZvciAoY29uc3QgcG9pbnQgb2YgcG9pbnRzKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gW3BvaW50LnggKyBzaGlmdHNbMF0sIHBvaW50LnkgKyBzaGlmdHNbMV1dO1xuICAgICAgICAgICAgdXBkYXRlUG9pbnQocCwgcG9pbnRCQm94LCBwb2x5QkJveCwgd29ybGRTaXplKTtcbiAgICAgICAgICAgIHRpbGVQb2ludHMucHVzaChwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGlsZVBvaW50cztcbn1cblxuZnVuY3Rpb24gZ2V0VGlsZUxpbmVzKGdlb21ldHJ5LCBsaW5lQkJveCwgcG9seUJCb3gsIGNhbm9uaWNhbCkge1xuICAgIGNvbnN0IHdvcmxkU2l6ZSA9IE1hdGgucG93KDIsIGNhbm9uaWNhbC56KSAqIEVYVEVOVDtcbiAgICBjb25zdCBzaGlmdHMgPSBbY2Fub25pY2FsLnggKiBFWFRFTlQsIGNhbm9uaWNhbC55ICogRVhURU5UXTtcbiAgICBjb25zdCB0aWxlTGluZXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgZ2VvbWV0cnkpIHtcbiAgICAgICAgY29uc3QgdGlsZUxpbmUgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwb2ludCBvZiBsaW5lKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gW3BvaW50LnggKyBzaGlmdHNbMF0sIHBvaW50LnkgKyBzaGlmdHNbMV1dO1xuICAgICAgICAgICAgdXBkYXRlQkJveChsaW5lQkJveCwgcCk7XG4gICAgICAgICAgICB0aWxlTGluZS5wdXNoKHApO1xuICAgICAgICB9XG4gICAgICAgIHRpbGVMaW5lcy5wdXNoKHRpbGVMaW5lKTtcbiAgICB9XG4gICAgaWYgKGxpbmVCQm94WzJdIC0gbGluZUJCb3hbMF0gPD0gd29ybGRTaXplIC8gMikge1xuICAgICAgICByZXNldEJCb3gobGluZUJCb3gpO1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgdGlsZUxpbmVzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHAgb2YgbGluZSkge1xuICAgICAgICAgICAgICAgIHVwZGF0ZVBvaW50KHAsIGxpbmVCQm94LCBwb2x5QkJveCwgd29ybGRTaXplKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGlsZUxpbmVzO1xufVxuXG5mdW5jdGlvbiBwb2ludHNXaXRoaW5Qb2x5Z29ucyhjdHg6IEV2YWx1YXRpb25Db250ZXh0LCBwb2x5Z29uR2VvbWV0cnk6IEdlb0pTT05Qb2x5Z29ucykge1xuICAgIGNvbnN0IHBvaW50QkJveCA9IFtJbmZpbml0eSwgSW5maW5pdHksIC1JbmZpbml0eSwgLUluZmluaXR5XTtcbiAgICBjb25zdCBwb2x5QkJveCA9IFtJbmZpbml0eSwgSW5maW5pdHksIC1JbmZpbml0eSwgLUluZmluaXR5XTtcblxuICAgIGNvbnN0IGNhbm9uaWNhbCA9IGN0eC5jYW5vbmljYWxJRCgpO1xuXG4gICAgaWYgKHBvbHlnb25HZW9tZXRyeS50eXBlID09PSAnUG9seWdvbicpIHtcbiAgICAgICAgY29uc3QgdGlsZVBvbHlnb24gPSBnZXRUaWxlUG9seWdvbihwb2x5Z29uR2VvbWV0cnkuY29vcmRpbmF0ZXMsIHBvbHlCQm94LCBjYW5vbmljYWwpO1xuICAgICAgICBjb25zdCB0aWxlUG9pbnRzID0gZ2V0VGlsZVBvaW50cyhjdHguZ2VvbWV0cnkoKSwgcG9pbnRCQm94LCBwb2x5QkJveCwgY2Fub25pY2FsKTtcbiAgICAgICAgaWYgKCFib3hXaXRoaW5Cb3gocG9pbnRCQm94LCBwb2x5QkJveCkpIHJldHVybiBmYWxzZTtcblxuICAgICAgICBmb3IgKGNvbnN0IHBvaW50IG9mIHRpbGVQb2ludHMpIHtcbiAgICAgICAgICAgIGlmICghcG9pbnRXaXRoaW5Qb2x5Z29uKHBvaW50LCB0aWxlUG9seWdvbikpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocG9seWdvbkdlb21ldHJ5LnR5cGUgPT09ICdNdWx0aVBvbHlnb24nKSB7XG4gICAgICAgIGNvbnN0IHRpbGVQb2x5Z29ucyA9IGdldFRpbGVQb2x5Z29ucyhwb2x5Z29uR2VvbWV0cnkuY29vcmRpbmF0ZXMsIHBvbHlCQm94LCBjYW5vbmljYWwpO1xuICAgICAgICBjb25zdCB0aWxlUG9pbnRzID0gZ2V0VGlsZVBvaW50cyhjdHguZ2VvbWV0cnkoKSwgcG9pbnRCQm94LCBwb2x5QkJveCwgY2Fub25pY2FsKTtcbiAgICAgICAgaWYgKCFib3hXaXRoaW5Cb3gocG9pbnRCQm94LCBwb2x5QkJveCkpIHJldHVybiBmYWxzZTtcblxuICAgICAgICBmb3IgKGNvbnN0IHBvaW50IG9mIHRpbGVQb2ludHMpIHtcbiAgICAgICAgICAgIGlmICghcG9pbnRXaXRoaW5Qb2x5Z29ucyhwb2ludCwgdGlsZVBvbHlnb25zKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGxpbmVzV2l0aGluUG9seWdvbnMoY3R4OiBFdmFsdWF0aW9uQ29udGV4dCwgcG9seWdvbkdlb21ldHJ5OiBHZW9KU09OUG9seWdvbnMpIHtcbiAgICBjb25zdCBsaW5lQkJveCA9IFtJbmZpbml0eSwgSW5maW5pdHksIC1JbmZpbml0eSwgLUluZmluaXR5XTtcbiAgICBjb25zdCBwb2x5QkJveCA9IFtJbmZpbml0eSwgSW5maW5pdHksIC1JbmZpbml0eSwgLUluZmluaXR5XTtcblxuICAgIGNvbnN0IGNhbm9uaWNhbCA9IGN0eC5jYW5vbmljYWxJRCgpO1xuXG4gICAgaWYgKHBvbHlnb25HZW9tZXRyeS50eXBlID09PSAnUG9seWdvbicpIHtcbiAgICAgICAgY29uc3QgdGlsZVBvbHlnb24gPSBnZXRUaWxlUG9seWdvbihwb2x5Z29uR2VvbWV0cnkuY29vcmRpbmF0ZXMsIHBvbHlCQm94LCBjYW5vbmljYWwpO1xuICAgICAgICBjb25zdCB0aWxlTGluZXMgPSBnZXRUaWxlTGluZXMoY3R4Lmdlb21ldHJ5KCksIGxpbmVCQm94LCBwb2x5QkJveCwgY2Fub25pY2FsKTtcbiAgICAgICAgaWYgKCFib3hXaXRoaW5Cb3gobGluZUJCb3gsIHBvbHlCQm94KSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiB0aWxlTGluZXMpIHtcbiAgICAgICAgICAgIGlmICghbGluZVN0cmluZ1dpdGhpblBvbHlnb24obGluZSwgdGlsZVBvbHlnb24pKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHBvbHlnb25HZW9tZXRyeS50eXBlID09PSAnTXVsdGlQb2x5Z29uJykge1xuICAgICAgICBjb25zdCB0aWxlUG9seWdvbnMgPSBnZXRUaWxlUG9seWdvbnMocG9seWdvbkdlb21ldHJ5LmNvb3JkaW5hdGVzLCBwb2x5QkJveCwgY2Fub25pY2FsKTtcbiAgICAgICAgY29uc3QgdGlsZUxpbmVzID0gZ2V0VGlsZUxpbmVzKGN0eC5nZW9tZXRyeSgpLCBsaW5lQkJveCwgcG9seUJCb3gsIGNhbm9uaWNhbCk7XG4gICAgICAgIGlmICghYm94V2l0aGluQm94KGxpbmVCQm94LCBwb2x5QkJveCkpIHJldHVybiBmYWxzZTtcblxuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgdGlsZUxpbmVzKSB7XG4gICAgICAgICAgICBpZiAoIWxpbmVTdHJpbmdXaXRoaW5Qb2x5Z29ucyhsaW5lLCB0aWxlUG9seWdvbnMpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmNsYXNzIFdpdGhpbiBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG4gICAgZ2VvanNvbjogR2VvSlNPTlxuICAgIGdlb21ldHJpZXM6IEdlb0pTT05Qb2x5Z29ucztcblxuICAgIGNvbnN0cnVjdG9yKGdlb2pzb246IEdlb0pTT04sIGdlb21ldHJpZXM6IEdlb0pTT05Qb2x5Z29ucykge1xuICAgICAgICB0aGlzLnR5cGUgPSBCb29sZWFuVHlwZTtcbiAgICAgICAgdGhpcy5nZW9qc29uID0gZ2VvanNvbjtcbiAgICAgICAgdGhpcy5nZW9tZXRyaWVzID0gZ2VvbWV0cmllcztcbiAgICB9XG5cbiAgICBzdGF0aWMgcGFyc2UoYXJnczogJFJlYWRPbmx5QXJyYXk8bWl4ZWQ+LCBjb250ZXh0OiBQYXJzaW5nQ29udGV4dCkge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggIT09IDIpXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgJ3dpdGhpbicgZXhwcmVzc2lvbiByZXF1aXJlcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgYnV0IGZvdW5kICR7YXJncy5sZW5ndGggLSAxfSBpbnN0ZWFkLmApO1xuICAgICAgICBpZiAoaXNWYWx1ZShhcmdzWzFdKSkge1xuICAgICAgICAgICAgY29uc3QgZ2VvanNvbiA9IChhcmdzWzFdOiBPYmplY3QpO1xuICAgICAgICAgICAgaWYgKGdlb2pzb24udHlwZSA9PT0gJ0ZlYXR1cmVDb2xsZWN0aW9uJykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ2VvanNvbi5mZWF0dXJlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0eXBlID0gZ2VvanNvbi5mZWF0dXJlc1tpXS5nZW9tZXRyeS50eXBlO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ1BvbHlnb24nIHx8IHR5cGUgPT09ICdNdWx0aVBvbHlnb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFdpdGhpbihnZW9qc29uLCBnZW9qc29uLmZlYXR1cmVzW2ldLmdlb21ldHJ5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZ2VvanNvbi50eXBlID09PSAnRmVhdHVyZScpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0eXBlID0gZ2VvanNvbi5nZW9tZXRyeS50eXBlO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnUG9seWdvbicgfHwgdHlwZSA9PT0gJ011bHRpUG9seWdvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBXaXRoaW4oZ2VvanNvbiwgZ2VvanNvbi5nZW9tZXRyeSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChnZW9qc29uLnR5cGUgID09PSAnUG9seWdvbicgfHwgZ2VvanNvbi50eXBlID09PSAnTXVsdGlQb2x5Z29uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgV2l0aGluKGdlb2pzb24sIGdlb2pzb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGAnd2l0aGluJyBleHByZXNzaW9uIHJlcXVpcmVzIHZhbGlkIGdlb2pzb24gb2JqZWN0IHRoYXQgY29udGFpbnMgcG9seWdvbiBnZW9tZXRyeSB0eXBlLmApO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGN0eDogRXZhbHVhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgaWYgKGN0eC5nZW9tZXRyeSgpICE9IG51bGwgJiYgY3R4LmNhbm9uaWNhbElEKCkgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKGN0eC5nZW9tZXRyeVR5cGUoKSA9PT0gJ1BvaW50Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBwb2ludHNXaXRoaW5Qb2x5Z29ucyhjdHgsIHRoaXMuZ2VvbWV0cmllcyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGN0eC5nZW9tZXRyeVR5cGUoKSA9PT0gJ0xpbmVTdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxpbmVzV2l0aGluUG9seWdvbnMoY3R4LCB0aGlzLmdlb21ldHJpZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBlYWNoQ2hpbGQoKSB7fVxuXG4gICAgb3V0cHV0RGVmaW5lZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCk6IEFycmF5PG1peGVkPiB7XG4gICAgICAgIHJldHVybiBbXCJ3aXRoaW5cIiwgdGhpcy5nZW9qc29uXTtcbiAgICB9XG5cbn1cblxuZXhwb3J0IGRlZmF1bHQgV2l0aGluO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IENvbXBvdW5kRXhwcmVzc2lvbiBmcm9tICcuL2NvbXBvdW5kX2V4cHJlc3Npb24nO1xuaW1wb3J0IFdpdGhpbiBmcm9tICcuL2RlZmluaXRpb25zL3dpdGhpbic7XG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi9leHByZXNzaW9uLmpzJztcblxuZnVuY3Rpb24gaXNGZWF0dXJlQ29uc3RhbnQoZTogRXhwcmVzc2lvbikge1xuICAgIGlmIChlIGluc3RhbmNlb2YgQ29tcG91bmRFeHByZXNzaW9uKSB7XG4gICAgICAgIGlmIChlLm5hbWUgPT09ICdnZXQnICYmIGUuYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChlLm5hbWUgPT09ICdmZWF0dXJlLXN0YXRlJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKGUubmFtZSA9PT0gJ2hhcycgJiYgZS5hcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgZS5uYW1lID09PSAncHJvcGVydGllcycgfHxcbiAgICAgICAgICAgIGUubmFtZSA9PT0gJ2dlb21ldHJ5LXR5cGUnIHx8XG4gICAgICAgICAgICBlLm5hbWUgPT09ICdpZCdcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAoL15maWx0ZXItLy50ZXN0KGUubmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlIGluc3RhbmNlb2YgV2l0aGluKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0ID0gdHJ1ZTtcbiAgICBlLmVhY2hDaGlsZChhcmcgPT4ge1xuICAgICAgICBpZiAocmVzdWx0ICYmICFpc0ZlYXR1cmVDb25zdGFudChhcmcpKSB7IHJlc3VsdCA9IGZhbHNlOyB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gaXNTdGF0ZUNvbnN0YW50KGU6IEV4cHJlc3Npb24pIHtcbiAgICBpZiAoZSBpbnN0YW5jZW9mIENvbXBvdW5kRXhwcmVzc2lvbikge1xuICAgICAgICBpZiAoZS5uYW1lID09PSAnZmVhdHVyZS1zdGF0ZScpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsZXQgcmVzdWx0ID0gdHJ1ZTtcbiAgICBlLmVhY2hDaGlsZChhcmcgPT4ge1xuICAgICAgICBpZiAocmVzdWx0ICYmICFpc1N0YXRlQ29uc3RhbnQoYXJnKSkgeyByZXN1bHQgPSBmYWxzZTsgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGlzR2xvYmFsUHJvcGVydHlDb25zdGFudChlOiBFeHByZXNzaW9uLCBwcm9wZXJ0aWVzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgaWYgKGUgaW5zdGFuY2VvZiBDb21wb3VuZEV4cHJlc3Npb24gJiYgcHJvcGVydGllcy5pbmRleE9mKGUubmFtZSkgPj0gMCkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICBsZXQgcmVzdWx0ID0gdHJ1ZTtcbiAgICBlLmVhY2hDaGlsZCgoYXJnKSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQgJiYgIWlzR2xvYmFsUHJvcGVydHlDb25zdGFudChhcmcsIHByb3BlcnRpZXMpKSB7IHJlc3VsdCA9IGZhbHNlOyB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IHtpc0ZlYXR1cmVDb25zdGFudCwgaXNHbG9iYWxQcm9wZXJ0eUNvbnN0YW50LCBpc1N0YXRlQ29uc3RhbnR9O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uQ29udGV4dCAgZnJvbSAnLi4vZXZhbHVhdGlvbl9jb250ZXh0JztcblxuY2xhc3MgVmFyIGltcGxlbWVudHMgRXhwcmVzc2lvbiB7XG4gICAgdHlwZTogVHlwZTtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgYm91bmRFeHByZXNzaW9uOiBFeHByZXNzaW9uO1xuXG4gICAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nLCBib3VuZEV4cHJlc3Npb246IEV4cHJlc3Npb24pIHtcbiAgICAgICAgdGhpcy50eXBlID0gYm91bmRFeHByZXNzaW9uLnR5cGU7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuYm91bmRFeHByZXNzaW9uID0gYm91bmRFeHByZXNzaW9uO1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZShhcmdzOiAkUmVhZE9ubHlBcnJheTxtaXhlZD4sIGNvbnRleHQ6IFBhcnNpbmdDb250ZXh0KSB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMiB8fCB0eXBlb2YgYXJnc1sxXSAhPT0gJ3N0cmluZycpXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgJ3ZhcicgZXhwcmVzc2lvbiByZXF1aXJlcyBleGFjdGx5IG9uZSBzdHJpbmcgbGl0ZXJhbCBhcmd1bWVudC5gKTtcblxuICAgICAgICBjb25zdCBuYW1lID0gYXJnc1sxXTtcbiAgICAgICAgaWYgKCFjb250ZXh0LnNjb3BlLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYFVua25vd24gdmFyaWFibGUgXCIke25hbWV9XCIuIE1ha2Ugc3VyZSBcIiR7bmFtZX1cIiBoYXMgYmVlbiBib3VuZCBpbiBhbiBlbmNsb3NpbmcgXCJsZXRcIiBleHByZXNzaW9uIGJlZm9yZSB1c2luZyBpdC5gLCAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgVmFyKG5hbWUsIGNvbnRleHQuc2NvcGUuZ2V0KG5hbWUpKTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJvdW5kRXhwcmVzc2lvbi5ldmFsdWF0ZShjdHgpO1xuICAgIH1cblxuICAgIGVhY2hDaGlsZCgpIHt9XG5cbiAgICBvdXRwdXREZWZpbmVkKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICByZXR1cm4gW1widmFyXCIsIHRoaXMubmFtZV07XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWYXI7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgU2NvcGUgZnJvbSAnLi9zY29wZSc7XG5pbXBvcnQge2NoZWNrU3VidHlwZX0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgUGFyc2luZ0Vycm9yIGZyb20gJy4vcGFyc2luZ19lcnJvcic7XG5pbXBvcnQgTGl0ZXJhbCBmcm9tICcuL2RlZmluaXRpb25zL2xpdGVyYWwnO1xuaW1wb3J0IEFzc2VydGlvbiBmcm9tICcuL2RlZmluaXRpb25zL2Fzc2VydGlvbic7XG5pbXBvcnQgQ29lcmNpb24gZnJvbSAnLi9kZWZpbml0aW9ucy9jb2VyY2lvbic7XG5pbXBvcnQgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuaW1wb3J0IENvbXBvdW5kRXhwcmVzc2lvbiBmcm9tICcuL2NvbXBvdW5kX2V4cHJlc3Npb24nO1xuaW1wb3J0IENvbGxhdG9yRXhwcmVzc2lvbiBmcm9tICcuL2RlZmluaXRpb25zL2NvbGxhdG9yJztcbmltcG9ydCBXaXRoaW4gZnJvbSAnLi9kZWZpbml0aW9ucy93aXRoaW4nO1xuaW1wb3J0IHtpc0dsb2JhbFByb3BlcnR5Q29uc3RhbnQsIGlzRmVhdHVyZUNvbnN0YW50fSBmcm9tICcuL2lzX2NvbnN0YW50JztcbmltcG9ydCBWYXIgZnJvbSAnLi9kZWZpbml0aW9ucy92YXInO1xuXG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbiwgRXhwcmVzc2lvblJlZ2lzdHJ5fSBmcm9tICcuL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIFN0YXRlIGFzc29jaWF0ZWQgcGFyc2luZyBhdCBhIGdpdmVuIHBvaW50IGluIGFuIGV4cHJlc3Npb24gdHJlZS5cbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFBhcnNpbmdDb250ZXh0IHtcbiAgICByZWdpc3RyeTogRXhwcmVzc2lvblJlZ2lzdHJ5O1xuICAgIHBhdGg6IEFycmF5PG51bWJlcj47XG4gICAga2V5OiBzdHJpbmc7XG4gICAgc2NvcGU6IFNjb3BlO1xuICAgIGVycm9yczogQXJyYXk8UGFyc2luZ0Vycm9yPjtcblxuICAgIC8vIFRoZSBleHBlY3RlZCB0eXBlIG9mIHRoaXMgZXhwcmVzc2lvbi4gUHJvdmlkZWQgb25seSB0byBhbGxvdyBFeHByZXNzaW9uXG4gICAgLy8gaW1wbGVtZW50YXRpb25zIHRvIGluZmVyIGFyZ3VtZW50IHR5cGVzOiBFeHByZXNzaW9uI3BhcnNlKCkgbmVlZCBub3RcbiAgICAvLyBjaGVjayB0aGF0IHRoZSBvdXRwdXQgdHlwZSBvZiB0aGUgcGFyc2VkIGV4cHJlc3Npb24gbWF0Y2hlc1xuICAgIC8vIGBleHBlY3RlZFR5cGVgLlxuICAgIGV4cGVjdGVkVHlwZTogP1R5cGU7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcmVnaXN0cnk6IEV4cHJlc3Npb25SZWdpc3RyeSxcbiAgICAgICAgcGF0aDogQXJyYXk8bnVtYmVyPiA9IFtdLFxuICAgICAgICBleHBlY3RlZFR5cGU6ID9UeXBlLFxuICAgICAgICBzY29wZTogU2NvcGUgPSBuZXcgU2NvcGUoKSxcbiAgICAgICAgZXJyb3JzOiBBcnJheTxQYXJzaW5nRXJyb3I+ID0gW11cbiAgICApIHtcbiAgICAgICAgdGhpcy5yZWdpc3RyeSA9IHJlZ2lzdHJ5O1xuICAgICAgICB0aGlzLnBhdGggPSBwYXRoO1xuICAgICAgICB0aGlzLmtleSA9IHBhdGgubWFwKHBhcnQgPT4gYFske3BhcnR9XWApLmpvaW4oJycpO1xuICAgICAgICB0aGlzLnNjb3BlID0gc2NvcGU7XG4gICAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICAgICAgICB0aGlzLmV4cGVjdGVkVHlwZSA9IGV4cGVjdGVkVHlwZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gZXhwciB0aGUgSlNPTiBleHByZXNzaW9uIHRvIHBhcnNlXG4gICAgICogQHBhcmFtIGluZGV4IHRoZSBvcHRpb25hbCBhcmd1bWVudCBpbmRleCBpZiB0aGlzIGV4cHJlc3Npb24gaXMgYW4gYXJndW1lbnQgb2YgYSBwYXJlbnQgZXhwcmVzc2lvbiB0aGF0J3MgYmVpbmcgcGFyc2VkXG4gICAgICogQHBhcmFtIG9wdGlvbnNcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5vbWl0VHlwZUFubm90YXRpb25zIHNldCB0cnVlIHRvIG9taXQgaW5mZXJyZWQgdHlwZSBhbm5vdGF0aW9ucy4gIENhbGxlciBiZXdhcmU6IHdpdGggdGhpcyBvcHRpb24gc2V0LCB0aGUgcGFyc2VkIGV4cHJlc3Npb24ncyB0eXBlIHdpbGwgTk9UIHNhdGlzZnkgYGV4cGVjdGVkVHlwZWAgaWYgaXQgd291bGQgbm9ybWFsbHkgYmUgd3JhcHBlZCBpbiBhbiBpbmZlcnJlZCBhbm5vdGF0aW9uLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcGFyc2UoXG4gICAgICAgIGV4cHI6IG1peGVkLFxuICAgICAgICBpbmRleD86IG51bWJlcixcbiAgICAgICAgZXhwZWN0ZWRUeXBlPzogP1R5cGUsXG4gICAgICAgIGJpbmRpbmdzPzogQXJyYXk8W3N0cmluZywgRXhwcmVzc2lvbl0+LFxuICAgICAgICBvcHRpb25zOiB7dHlwZUFubm90YXRpb24/OiAnYXNzZXJ0JyB8ICdjb2VyY2UnIHwgJ29taXQnfSA9IHt9XG4gICAgKTogP0V4cHJlc3Npb24ge1xuICAgICAgICBpZiAoaW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbmNhdChpbmRleCwgZXhwZWN0ZWRUeXBlLCBiaW5kaW5ncykuX3BhcnNlKGV4cHIsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9wYXJzZShleHByLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBfcGFyc2UoZXhwcjogbWl4ZWQsIG9wdGlvbnM6IHt0eXBlQW5ub3RhdGlvbj86ICdhc3NlcnQnIHwgJ2NvZXJjZScgfCAnb21pdCd9KTogP0V4cHJlc3Npb24ge1xuICAgICAgICBpZiAoZXhwciA9PT0gbnVsbCB8fCB0eXBlb2YgZXhwciA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGV4cHIgPT09ICdib29sZWFuJyB8fCB0eXBlb2YgZXhwciA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGV4cHIgPSBbJ2xpdGVyYWwnLCBleHByXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGFubm90YXRlKHBhcnNlZCwgdHlwZSwgdHlwZUFubm90YXRpb246ICdhc3NlcnQnIHwgJ2NvZXJjZScgfCAnb21pdCcpIHtcbiAgICAgICAgICAgIGlmICh0eXBlQW5ub3RhdGlvbiA9PT0gJ2Fzc2VydCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFzc2VydGlvbih0eXBlLCBbcGFyc2VkXSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVBbm5vdGF0aW9uID09PSAnY29lcmNlJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ29lcmNpb24odHlwZSwgW3BhcnNlZF0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXhwcikpIHtcbiAgICAgICAgICAgIGlmIChleHByLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9yKGBFeHBlY3RlZCBhbiBhcnJheSB3aXRoIGF0IGxlYXN0IG9uZSBlbGVtZW50LiBJZiB5b3Ugd2FudGVkIGEgbGl0ZXJhbCBhcnJheSwgdXNlIFtcImxpdGVyYWxcIiwgW11dLmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBvcCA9IGV4cHJbMF07XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IoYEV4cHJlc3Npb24gbmFtZSBtdXN0IGJlIGEgc3RyaW5nLCBidXQgZm91bmQgJHt0eXBlb2Ygb3B9IGluc3RlYWQuIElmIHlvdSB3YW50ZWQgYSBsaXRlcmFsIGFycmF5LCB1c2UgW1wibGl0ZXJhbFwiLCBbLi4uXV0uYCwgMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IEV4cHIgPSB0aGlzLnJlZ2lzdHJ5W29wXTtcbiAgICAgICAgICAgIGlmIChFeHByKSB7XG4gICAgICAgICAgICAgICAgbGV0IHBhcnNlZCA9IEV4cHIucGFyc2UoZXhwciwgdGhpcyk7XG4gICAgICAgICAgICAgICAgaWYgKCFwYXJzZWQpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZXhwZWN0ZWRUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkID0gdGhpcy5leHBlY3RlZFR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdHVhbCA9IHBhcnNlZC50eXBlO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gd2UgZXhwZWN0IGEgbnVtYmVyLCBzdHJpbmcsIGJvb2xlYW4sIG9yIGFycmF5IGJ1dCBoYXZlIGEgdmFsdWUsIHdyYXAgaXQgaW4gYW4gYXNzZXJ0aW9uLlxuICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIHdlIGV4cGVjdCBhIGNvbG9yIG9yIGZvcm1hdHRlZCBzdHJpbmcsIGJ1dCBoYXZlIGEgc3RyaW5nIG9yIHZhbHVlLCB3cmFwIGl0IGluIGEgY29lcmNpb24uXG4gICAgICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgd2UgZG8gc3RhdGljIHR5cGUtY2hlY2tpbmcuXG4gICAgICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZXNlIGJlaGF2aW9ycyBhcmUgb3ZlcnJpZGFibGUgZm9yOlxuICAgICAgICAgICAgICAgICAgICAvLyAgICogVGhlIFwiY29hbGVzY2VcIiBvcGVyYXRvciwgd2hpY2ggbmVlZHMgdG8gb21pdCB0eXBlIGFubm90YXRpb25zLlxuICAgICAgICAgICAgICAgICAgICAvLyAgICogU3RyaW5nLXZhbHVlZCBwcm9wZXJ0aWVzIChlLmcuIGB0ZXh0LWZpZWxkYCksIHdoZXJlIGNvZXJjaW9uIGlzIG1vcmUgY29udmVuaWVudCB0aGFuIGFzc2VydGlvbi5cbiAgICAgICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAgICAgaWYgKChleHBlY3RlZC5raW5kID09PSAnc3RyaW5nJyB8fCBleHBlY3RlZC5raW5kID09PSAnbnVtYmVyJyB8fCBleHBlY3RlZC5raW5kID09PSAnYm9vbGVhbicgfHwgZXhwZWN0ZWQua2luZCA9PT0gJ29iamVjdCcgfHwgZXhwZWN0ZWQua2luZCA9PT0gJ2FycmF5JykgJiYgYWN0dWFsLmtpbmQgPT09ICd2YWx1ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZCA9IGFubm90YXRlKHBhcnNlZCwgZXhwZWN0ZWQsIG9wdGlvbnMudHlwZUFubm90YXRpb24gfHwgJ2Fzc2VydCcpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChleHBlY3RlZC5raW5kID09PSAnY29sb3InIHx8IGV4cGVjdGVkLmtpbmQgPT09ICdmb3JtYXR0ZWQnIHx8IGV4cGVjdGVkLmtpbmQgPT09ICdyZXNvbHZlZEltYWdlJykgJiYgKGFjdHVhbC5raW5kID09PSAndmFsdWUnIHx8IGFjdHVhbC5raW5kID09PSAnc3RyaW5nJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZCA9IGFubm90YXRlKHBhcnNlZCwgZXhwZWN0ZWQsIG9wdGlvbnMudHlwZUFubm90YXRpb24gfHwgJ2NvZXJjZScpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2hlY2tTdWJ0eXBlKGV4cGVjdGVkLCBhY3R1YWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIElmIGFuIGV4cHJlc3Npb24ncyBhcmd1bWVudHMgYXJlIGFsbCBsaXRlcmFscywgd2UgY2FuIGV2YWx1YXRlXG4gICAgICAgICAgICAgICAgLy8gaXQgaW1tZWRpYXRlbHkgYW5kIHJlcGxhY2UgaXQgd2l0aCBhIGxpdGVyYWwgdmFsdWUgaW4gdGhlXG4gICAgICAgICAgICAgICAgLy8gcGFyc2VkL2NvbXBpbGVkIHJlc3VsdC4gRXhwcmVzc2lvbnMgdGhhdCBleHBlY3QgYW4gaW1hZ2Ugc2hvdWxkXG4gICAgICAgICAgICAgICAgLy8gbm90IGJlIHJlc29sdmVkIGhlcmUgc28gd2UgY2FuIGxhdGVyIGdldCB0aGUgYXZhaWxhYmxlIGltYWdlcy5cbiAgICAgICAgICAgICAgICBpZiAoIShwYXJzZWQgaW5zdGFuY2VvZiBMaXRlcmFsKSAmJiAocGFyc2VkLnR5cGUua2luZCAhPT0gJ3Jlc29sdmVkSW1hZ2UnKSAmJiBpc0NvbnN0YW50KHBhcnNlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWMgPSBuZXcgRXZhbHVhdGlvbkNvbnRleHQoKTtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZCA9IG5ldyBMaXRlcmFsKHBhcnNlZC50eXBlLCBwYXJzZWQuZXZhbHVhdGUoZWMpKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvcihlLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvcihgVW5rbm93biBleHByZXNzaW9uIFwiJHtvcH1cIi4gSWYgeW91IHdhbnRlZCBhIGxpdGVyYWwgYXJyYXksIHVzZSBbXCJsaXRlcmFsXCIsIFsuLi5dXS5gLCAwKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9yKGAndW5kZWZpbmVkJyB2YWx1ZSBpbnZhbGlkLiBVc2UgbnVsbCBpbnN0ZWFkLmApO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHByID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3IoYEJhcmUgb2JqZWN0cyBpbnZhbGlkLiBVc2UgW1wibGl0ZXJhbFwiLCB7Li4ufV0gaW5zdGVhZC5gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9yKGBFeHBlY3RlZCBhbiBhcnJheSwgYnV0IGZvdW5kICR7dHlwZW9mIGV4cHJ9IGluc3RlYWQuYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgY29weSBvZiB0aGlzIGNvbnRleHQgc3VpdGFibGUgZm9yIHBhcnNpbmcgdGhlIHN1YmV4cHJlc3Npb24gYXRcbiAgICAgKiBpbmRleCBgaW5kZXhgLCBvcHRpb25hbGx5IGFwcGVuZGluZyB0byAnbGV0JyBiaW5kaW5nIG1hcC5cbiAgICAgKlxuICAgICAqIE5vdGUgdGhhdCBgZXJyb3JzYCBwcm9wZXJ0eSwgaW50ZW5kZWQgZm9yIGNvbGxlY3RpbmcgZXJyb3JzIHdoaWxlXG4gICAgICogcGFyc2luZywgaXMgY29waWVkIGJ5IHJlZmVyZW5jZSByYXRoZXIgdGhhbiBjbG9uZWQuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBjb25jYXQoaW5kZXg6IG51bWJlciwgZXhwZWN0ZWRUeXBlPzogP1R5cGUsIGJpbmRpbmdzPzogQXJyYXk8W3N0cmluZywgRXhwcmVzc2lvbl0+KSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSB0eXBlb2YgaW5kZXggPT09ICdudW1iZXInID8gdGhpcy5wYXRoLmNvbmNhdChpbmRleCkgOiB0aGlzLnBhdGg7XG4gICAgICAgIGNvbnN0IHNjb3BlID0gYmluZGluZ3MgPyB0aGlzLnNjb3BlLmNvbmNhdChiaW5kaW5ncykgOiB0aGlzLnNjb3BlO1xuICAgICAgICByZXR1cm4gbmV3IFBhcnNpbmdDb250ZXh0KFxuICAgICAgICAgICAgdGhpcy5yZWdpc3RyeSxcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICBleHBlY3RlZFR5cGUgfHwgbnVsbCxcbiAgICAgICAgICAgIHNjb3BlLFxuICAgICAgICAgICAgdGhpcy5lcnJvcnNcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQdXNoIGEgcGFyc2luZyAob3IgdHlwZSBjaGVja2luZykgZXJyb3IgaW50byB0aGUgYHRoaXMuZXJyb3JzYFxuICAgICAqIEBwYXJhbSBlcnJvciBUaGUgbWVzc2FnZVxuICAgICAqIEBwYXJhbSBrZXlzIE9wdGlvbmFsbHkgc3BlY2lmeSB0aGUgc291cmNlIG9mIHRoZSBlcnJvciBhdCBhIGNoaWxkXG4gICAgICogb2YgdGhlIGN1cnJlbnQgZXhwcmVzc2lvbiBhdCBgdGhpcy5rZXlgLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgZXJyb3IoZXJyb3I6IHN0cmluZywgLi4ua2V5czogQXJyYXk8bnVtYmVyPikge1xuICAgICAgICBjb25zdCBrZXkgPSBgJHt0aGlzLmtleX0ke2tleXMubWFwKGsgPT4gYFske2t9XWApLmpvaW4oJycpfWA7XG4gICAgICAgIHRoaXMuZXJyb3JzLnB1c2gobmV3IFBhcnNpbmdFcnJvcihrZXksIGVycm9yKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBudWxsIGlmIGB0YCBpcyBhIHN1YnR5cGUgb2YgYGV4cGVjdGVkYDsgb3RoZXJ3aXNlIHJldHVybnMgYW5cbiAgICAgKiBlcnJvciBtZXNzYWdlIGFuZCBhbHNvIHB1c2hlcyBpdCB0byBgdGhpcy5lcnJvcnNgLlxuICAgICAqL1xuICAgIGNoZWNrU3VidHlwZShleHBlY3RlZDogVHlwZSwgdDogVHlwZSk6ID9zdHJpbmcge1xuICAgICAgICBjb25zdCBlcnJvciA9IGNoZWNrU3VidHlwZShleHBlY3RlZCwgdCk7XG4gICAgICAgIGlmIChlcnJvcikgdGhpcy5lcnJvcihlcnJvcik7XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFBhcnNpbmdDb250ZXh0O1xuXG5mdW5jdGlvbiBpc0NvbnN0YW50KGV4cHJlc3Npb246IEV4cHJlc3Npb24pIHtcbiAgICBpZiAoZXhwcmVzc2lvbiBpbnN0YW5jZW9mIFZhcikge1xuICAgICAgICByZXR1cm4gaXNDb25zdGFudChleHByZXNzaW9uLmJvdW5kRXhwcmVzc2lvbik7XG4gICAgfSBlbHNlIGlmIChleHByZXNzaW9uIGluc3RhbmNlb2YgQ29tcG91bmRFeHByZXNzaW9uICYmIGV4cHJlc3Npb24ubmFtZSA9PT0gJ2Vycm9yJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIGlmIChleHByZXNzaW9uIGluc3RhbmNlb2YgQ29sbGF0b3JFeHByZXNzaW9uKSB7XG4gICAgICAgIC8vIEFsdGhvdWdoIHRoZSByZXN1bHRzIG9mIGEgQ29sbGF0b3IgZXhwcmVzc2lvbiB3aXRoIGZpeGVkIGFyZ3VtZW50c1xuICAgICAgICAvLyBnZW5lcmFsbHkgc2hvdWxkbid0IGNoYW5nZSBiZXR3ZWVuIGV4ZWN1dGlvbnMsIHdlIGNhbid0IHNlcmlhbGl6ZSB0aGVtXG4gICAgICAgIC8vIGFzIGNvbnN0YW50IGV4cHJlc3Npb25zIGJlY2F1c2UgcmVzdWx0cyBjaGFuZ2UgYmFzZWQgb24gZW52aXJvbm1lbnQuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24gaW5zdGFuY2VvZiBXaXRoaW4pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGlzVHlwZUFubm90YXRpb24gPSBleHByZXNzaW9uIGluc3RhbmNlb2YgQ29lcmNpb24gfHxcbiAgICAgICAgZXhwcmVzc2lvbiBpbnN0YW5jZW9mIEFzc2VydGlvbjtcblxuICAgIGxldCBjaGlsZHJlbkNvbnN0YW50ID0gdHJ1ZTtcbiAgICBleHByZXNzaW9uLmVhY2hDaGlsZChjaGlsZCA9PiB7XG4gICAgICAgIC8vIFdlIGNhbiBfYWxtb3N0XyBhc3N1bWUgdGhhdCBpZiBgZXhwcmVzc2lvbnNgIGNoaWxkcmVuIGFyZSBjb25zdGFudCxcbiAgICAgICAgLy8gdGhleSB3b3VsZCBhbHJlYWR5IGhhdmUgYmVlbiBldmFsdWF0ZWQgdG8gTGl0ZXJhbCB2YWx1ZXMgd2hlbiB0aGV5XG4gICAgICAgIC8vIHdlcmUgcGFyc2VkLiAgVHlwZSBhbm5vdGF0aW9ucyBhcmUgdGhlIGV4Y2VwdGlvbiwgYmVjYXVzZSB0aGV5IG1pZ2h0XG4gICAgICAgIC8vIGhhdmUgYmVlbiBpbmZlcnJlZCBhbmQgYWRkZWQgYWZ0ZXIgYSBjaGlsZCB3YXMgcGFyc2VkLlxuXG4gICAgICAgIC8vIFNvIHdlIHJlY3Vyc2UgaW50byBpc0NvbnN0YW50KCkgZm9yIHRoZSBjaGlsZHJlbiBvZiB0eXBlIGFubm90YXRpb25zLFxuICAgICAgICAvLyBidXQgb3RoZXJ3aXNlIHNpbXBseSBjaGVjayB3aGV0aGVyIHRoZXkgYXJlIExpdGVyYWxzLlxuICAgICAgICBpZiAoaXNUeXBlQW5ub3RhdGlvbikge1xuICAgICAgICAgICAgY2hpbGRyZW5Db25zdGFudCA9IGNoaWxkcmVuQ29uc3RhbnQgJiYgaXNDb25zdGFudChjaGlsZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjaGlsZHJlbkNvbnN0YW50ID0gY2hpbGRyZW5Db25zdGFudCAmJiBjaGlsZCBpbnN0YW5jZW9mIExpdGVyYWw7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIWNoaWxkcmVuQ29uc3RhbnQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBpc0ZlYXR1cmVDb25zdGFudChleHByZXNzaW9uKSAmJlxuICAgICAgICBpc0dsb2JhbFByb3BlcnR5Q29uc3RhbnQoZXhwcmVzc2lvbiwgWyd6b29tJywgJ2hlYXRtYXAtZGVuc2l0eScsICdsaW5lLXByb2dyZXNzJywgJ2FjY3VtdWxhdGVkJywgJ2lzLXN1cHBvcnRlZC1zY3JpcHQnXSk7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgUnVudGltZUVycm9yIGZyb20gJy4vcnVudGltZV9lcnJvcic7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuL2V4cHJlc3Npb24nO1xuXG5leHBvcnQgdHlwZSBTdG9wcyA9IEFycmF5PFtudW1iZXIsIEV4cHJlc3Npb25dPjtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBzdG9wIDw9IGlucHV0LCBvciAwIGlmIGl0IGRvZXNuJ3QgZXhpc3QuXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZFN0b3BMZXNzVGhhbk9yRXF1YWxUbyhzdG9wczogQXJyYXk8bnVtYmVyPiwgaW5wdXQ6IG51bWJlcikge1xuICAgIGNvbnN0IGxhc3RJbmRleCA9IHN0b3BzLmxlbmd0aCAtIDE7XG4gICAgbGV0IGxvd2VySW5kZXggPSAwO1xuICAgIGxldCB1cHBlckluZGV4ID0gbGFzdEluZGV4O1xuICAgIGxldCBjdXJyZW50SW5kZXggPSAwO1xuICAgIGxldCBjdXJyZW50VmFsdWUsIG5leHRWYWx1ZTtcblxuICAgIHdoaWxlIChsb3dlckluZGV4IDw9IHVwcGVySW5kZXgpIHtcbiAgICAgICAgY3VycmVudEluZGV4ID0gTWF0aC5mbG9vcigobG93ZXJJbmRleCArIHVwcGVySW5kZXgpIC8gMik7XG4gICAgICAgIGN1cnJlbnRWYWx1ZSA9IHN0b3BzW2N1cnJlbnRJbmRleF07XG4gICAgICAgIG5leHRWYWx1ZSA9IHN0b3BzW2N1cnJlbnRJbmRleCArIDFdO1xuXG4gICAgICAgIGlmIChjdXJyZW50VmFsdWUgPD0gaW5wdXQpIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50SW5kZXggPT09IGxhc3RJbmRleCB8fCBpbnB1dCA8IG5leHRWYWx1ZSkgeyAvLyBTZWFyY2ggY29tcGxldGVcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudEluZGV4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsb3dlckluZGV4ID0gY3VycmVudEluZGV4ICsgMTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50VmFsdWUgPiBpbnB1dCkge1xuICAgICAgICAgICAgdXBwZXJJbmRleCA9IGN1cnJlbnRJbmRleCAtIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKCdJbnB1dCBpcyBub3QgYSBudW1iZXIuJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7TnVtYmVyVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2ZpbmRTdG9wTGVzc1RoYW5PckVxdWFsVG99IGZyb20gJy4uL3N0b3BzJztcblxuaW1wb3J0IHR5cGUge1N0b3BzfSBmcm9tICcuLi9zdG9wcyc7XG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbmNsYXNzIFN0ZXAgaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuXG4gICAgaW5wdXQ6IEV4cHJlc3Npb247XG4gICAgbGFiZWxzOiBBcnJheTxudW1iZXI+O1xuICAgIG91dHB1dHM6IEFycmF5PEV4cHJlc3Npb24+O1xuXG4gICAgY29uc3RydWN0b3IodHlwZTogVHlwZSwgaW5wdXQ6IEV4cHJlc3Npb24sIHN0b3BzOiBTdG9wcykge1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG5cbiAgICAgICAgdGhpcy5sYWJlbHMgPSBbXTtcbiAgICAgICAgdGhpcy5vdXRwdXRzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgW2xhYmVsLCBleHByZXNzaW9uXSBvZiBzdG9wcykge1xuICAgICAgICAgICAgdGhpcy5sYWJlbHMucHVzaChsYWJlbCk7XG4gICAgICAgICAgICB0aGlzLm91dHB1dHMucHVzaChleHByZXNzaW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZShhcmdzOiAkUmVhZE9ubHlBcnJheTxtaXhlZD4sIGNvbnRleHQ6IFBhcnNpbmdDb250ZXh0KSB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCAtIDEgPCA0KSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgYXQgbGVhc3QgNCBhcmd1bWVudHMsIGJ1dCBmb3VuZCBvbmx5ICR7YXJncy5sZW5ndGggLSAxfS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgoYXJncy5sZW5ndGggLSAxKSAlIDIgIT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBhbiBldmVuIG51bWJlciBvZiBhcmd1bWVudHMuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbnB1dCA9IGNvbnRleHQucGFyc2UoYXJnc1sxXSwgMSwgTnVtYmVyVHlwZSk7XG4gICAgICAgIGlmICghaW5wdXQpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNvbnN0IHN0b3BzOiBTdG9wcyA9IFtdO1xuXG4gICAgICAgIGxldCBvdXRwdXRUeXBlOiBUeXBlID0gKG51bGw6IGFueSk7XG4gICAgICAgIGlmIChjb250ZXh0LmV4cGVjdGVkVHlwZSAmJiBjb250ZXh0LmV4cGVjdGVkVHlwZS5raW5kICE9PSAndmFsdWUnKSB7XG4gICAgICAgICAgICBvdXRwdXRUeXBlID0gY29udGV4dC5leHBlY3RlZFR5cGU7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGFyZ3MubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gaSA9PT0gMSA/IC1JbmZpbml0eSA6IGFyZ3NbaV07XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGFyZ3NbaSArIDFdO1xuXG4gICAgICAgICAgICBjb25zdCBsYWJlbEtleSA9IGk7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZUtleSA9IGkgKyAxO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGxhYmVsICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKCdJbnB1dC9vdXRwdXQgcGFpcnMgZm9yIFwic3RlcFwiIGV4cHJlc3Npb25zIG11c3QgYmUgZGVmaW5lZCB1c2luZyBsaXRlcmFsIG51bWVyaWMgdmFsdWVzIChub3QgY29tcHV0ZWQgZXhwcmVzc2lvbnMpIGZvciB0aGUgaW5wdXQgdmFsdWVzLicsIGxhYmVsS2V5KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHN0b3BzLmxlbmd0aCAmJiBzdG9wc1tzdG9wcy5sZW5ndGggLSAxXVswXSA+PSBsYWJlbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKCdJbnB1dC9vdXRwdXQgcGFpcnMgZm9yIFwic3RlcFwiIGV4cHJlc3Npb25zIG11c3QgYmUgYXJyYW5nZWQgd2l0aCBpbnB1dCB2YWx1ZXMgaW4gc3RyaWN0bHkgYXNjZW5kaW5nIG9yZGVyLicsIGxhYmVsS2V5KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gY29udGV4dC5wYXJzZSh2YWx1ZSwgdmFsdWVLZXksIG91dHB1dFR5cGUpO1xuICAgICAgICAgICAgaWYgKCFwYXJzZWQpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgb3V0cHV0VHlwZSA9IG91dHB1dFR5cGUgfHwgcGFyc2VkLnR5cGU7XG4gICAgICAgICAgICBzdG9wcy5wdXNoKFtsYWJlbCwgcGFyc2VkXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFN0ZXAob3V0cHV0VHlwZSwgaW5wdXQsIHN0b3BzKTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGxhYmVscyA9IHRoaXMubGFiZWxzO1xuICAgICAgICBjb25zdCBvdXRwdXRzID0gdGhpcy5vdXRwdXRzO1xuXG4gICAgICAgIGlmIChsYWJlbHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0c1swXS5ldmFsdWF0ZShjdHgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmFsdWUgPSAoKHRoaXMuaW5wdXQuZXZhbHVhdGUoY3R4KTogYW55KTogbnVtYmVyKTtcbiAgICAgICAgaWYgKHZhbHVlIDw9IGxhYmVsc1swXSkge1xuICAgICAgICAgICAgcmV0dXJuIG91dHB1dHNbMF0uZXZhbHVhdGUoY3R4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0b3BDb3VudCA9IGxhYmVscy5sZW5ndGg7XG4gICAgICAgIGlmICh2YWx1ZSA+PSBsYWJlbHNbc3RvcENvdW50IC0gMV0pIHtcbiAgICAgICAgICAgIHJldHVybiBvdXRwdXRzW3N0b3BDb3VudCAtIDFdLmV2YWx1YXRlKGN0eCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbmRleCA9IGZpbmRTdG9wTGVzc1RoYW5PckVxdWFsVG8obGFiZWxzLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBvdXRwdXRzW2luZGV4XS5ldmFsdWF0ZShjdHgpO1xuICAgIH1cblxuICAgIGVhY2hDaGlsZChmbjogKF86IEV4cHJlc3Npb24pID0+IHZvaWQpIHtcbiAgICAgICAgZm4odGhpcy5pbnB1dCk7XG4gICAgICAgIGZvciAoY29uc3QgZXhwcmVzc2lvbiBvZiB0aGlzLm91dHB1dHMpIHtcbiAgICAgICAgICAgIGZuKGV4cHJlc3Npb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb3V0cHV0RGVmaW5lZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3V0cHV0cy5ldmVyeShvdXQgPT4gb3V0Lm91dHB1dERlZmluZWQoKSk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkID0gW1wic3RlcFwiLCB0aGlzLmlucHV0LnNlcmlhbGl6ZSgpXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxhYmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZC5wdXNoKHRoaXMubGFiZWxzW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlcmlhbGl6ZWQucHVzaCh0aGlzLm91dHB1dHNbaV0uc2VyaWFsaXplKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVkO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3RlcDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBDb2xvciBmcm9tICcuL2NvbG9yJztcblxuZXhwb3J0IGZ1bmN0aW9uIG51bWJlcihhOiBudW1iZXIsIGI6IG51bWJlciwgdDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIChhICogKDEgLSB0KSkgKyAoYiAqIHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29sb3IoZnJvbTogQ29sb3IsIHRvOiBDb2xvciwgdDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG5ldyBDb2xvcihcbiAgICAgICAgbnVtYmVyKGZyb20uciwgdG8uciwgdCksXG4gICAgICAgIG51bWJlcihmcm9tLmcsIHRvLmcsIHQpLFxuICAgICAgICBudW1iZXIoZnJvbS5iLCB0by5iLCB0KSxcbiAgICAgICAgbnVtYmVyKGZyb20uYSwgdG8uYSwgdClcbiAgICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXkoZnJvbTogQXJyYXk8bnVtYmVyPiwgdG86IEFycmF5PG51bWJlcj4sIHQ6IG51bWJlcik6IEFycmF5PG51bWJlcj4ge1xuICAgIHJldHVybiBmcm9tLm1hcCgoZCwgaSkgPT4ge1xuICAgICAgICByZXR1cm4gbnVtYmVyKGQsIHRvW2ldLCB0KTtcbiAgICB9KTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBDb2xvciBmcm9tICcuL2NvbG9yJztcblxuaW1wb3J0IHtudW1iZXIgYXMgaW50ZXJwb2xhdGVOdW1iZXJ9IGZyb20gJy4vaW50ZXJwb2xhdGUnO1xuXG50eXBlIExBQkNvbG9yID0ge1xuICAgIGw6IG51bWJlcixcbiAgICBhOiBudW1iZXIsXG4gICAgYjogbnVtYmVyLFxuICAgIGFscGhhOiBudW1iZXJcbn07XG5cbnR5cGUgSENMQ29sb3IgPSB7XG4gICAgaDogbnVtYmVyLFxuICAgIGM6IG51bWJlcixcbiAgICBsOiBudW1iZXIsXG4gICAgYWxwaGE6IG51bWJlclxufTtcblxuLy8gQ29uc3RhbnRzXG5jb25zdCBYbiA9IDAuOTUwNDcwLCAvLyBENjUgc3RhbmRhcmQgcmVmZXJlbnRcbiAgICBZbiA9IDEsXG4gICAgWm4gPSAxLjA4ODgzMCxcbiAgICB0MCA9IDQgLyAyOSxcbiAgICB0MSA9IDYgLyAyOSxcbiAgICB0MiA9IDMgKiB0MSAqIHQxLFxuICAgIHQzID0gdDEgKiB0MSAqIHQxLFxuICAgIGRlZzJyYWQgPSBNYXRoLlBJIC8gMTgwLFxuICAgIHJhZDJkZWcgPSAxODAgLyBNYXRoLlBJO1xuXG4vLyBVdGlsaXRpZXNcbmZ1bmN0aW9uIHh5ejJsYWIodDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHQgPiB0MyA/IE1hdGgucG93KHQsIDEgLyAzKSA6IHQgLyB0MiArIHQwO1xufVxuXG5mdW5jdGlvbiBsYWIyeHl6KHQ6IG51bWJlcikge1xuICAgIHJldHVybiB0ID4gdDEgPyB0ICogdCAqIHQgOiB0MiAqICh0IC0gdDApO1xufVxuXG5mdW5jdGlvbiB4eXoycmdiKHg6IG51bWJlcikge1xuICAgIHJldHVybiAyNTUgKiAoeCA8PSAwLjAwMzEzMDggPyAxMi45MiAqIHggOiAxLjA1NSAqIE1hdGgucG93KHgsIDEgLyAyLjQpIC0gMC4wNTUpO1xufVxuXG5mdW5jdGlvbiByZ2IyeHl6KHg6IG51bWJlcikge1xuICAgIHggLz0gMjU1O1xuICAgIHJldHVybiB4IDw9IDAuMDQwNDUgPyB4IC8gMTIuOTIgOiBNYXRoLnBvdygoeCArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xufVxuXG4vLyBMQUJcbmZ1bmN0aW9uIHJnYlRvTGFiKHJnYkNvbG9yOiBDb2xvcik6IExBQkNvbG9yIHtcbiAgICBjb25zdCBiID0gcmdiMnh5eihyZ2JDb2xvci5yKSxcbiAgICAgICAgYSA9IHJnYjJ4eXoocmdiQ29sb3IuZyksXG4gICAgICAgIGwgPSByZ2IyeHl6KHJnYkNvbG9yLmIpLFxuICAgICAgICB4ID0geHl6MmxhYigoMC40MTI0NTY0ICogYiArIDAuMzU3NTc2MSAqIGEgKyAwLjE4MDQzNzUgKiBsKSAvIFhuKSxcbiAgICAgICAgeSA9IHh5ejJsYWIoKDAuMjEyNjcyOSAqIGIgKyAwLjcxNTE1MjIgKiBhICsgMC4wNzIxNzUwICogbCkgLyBZbiksXG4gICAgICAgIHogPSB4eXoybGFiKCgwLjAxOTMzMzkgKiBiICsgMC4xMTkxOTIwICogYSArIDAuOTUwMzA0MSAqIGwpIC8gWm4pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgbDogMTE2ICogeSAtIDE2LFxuICAgICAgICBhOiA1MDAgKiAoeCAtIHkpLFxuICAgICAgICBiOiAyMDAgKiAoeSAtIHopLFxuICAgICAgICBhbHBoYTogcmdiQ29sb3IuYVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIGxhYlRvUmdiKGxhYkNvbG9yOiBMQUJDb2xvcik6IENvbG9yIHtcbiAgICBsZXQgeSA9IChsYWJDb2xvci5sICsgMTYpIC8gMTE2LFxuICAgICAgICB4ID0gaXNOYU4obGFiQ29sb3IuYSkgPyB5IDogeSArIGxhYkNvbG9yLmEgLyA1MDAsXG4gICAgICAgIHogPSBpc05hTihsYWJDb2xvci5iKSA/IHkgOiB5IC0gbGFiQ29sb3IuYiAvIDIwMDtcbiAgICB5ID0gWW4gKiBsYWIyeHl6KHkpO1xuICAgIHggPSBYbiAqIGxhYjJ4eXooeCk7XG4gICAgeiA9IFpuICogbGFiMnh5eih6KTtcbiAgICByZXR1cm4gbmV3IENvbG9yKFxuICAgICAgICB4eXoycmdiKDMuMjQwNDU0MiAqIHggLSAxLjUzNzEzODUgKiB5IC0gMC40OTg1MzE0ICogeiksIC8vIEQ2NSAtPiBzUkdCXG4gICAgICAgIHh5ejJyZ2IoLTAuOTY5MjY2MCAqIHggKyAxLjg3NjAxMDggKiB5ICsgMC4wNDE1NTYwICogeiksXG4gICAgICAgIHh5ejJyZ2IoMC4wNTU2NDM0ICogeCAtIDAuMjA0MDI1OSAqIHkgKyAxLjA1NzIyNTIgKiB6KSxcbiAgICAgICAgbGFiQ29sb3IuYWxwaGFcbiAgICApO1xufVxuXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZUxhYihmcm9tOiBMQUJDb2xvciwgdG86IExBQkNvbG9yLCB0OiBudW1iZXIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsOiBpbnRlcnBvbGF0ZU51bWJlcihmcm9tLmwsIHRvLmwsIHQpLFxuICAgICAgICBhOiBpbnRlcnBvbGF0ZU51bWJlcihmcm9tLmEsIHRvLmEsIHQpLFxuICAgICAgICBiOiBpbnRlcnBvbGF0ZU51bWJlcihmcm9tLmIsIHRvLmIsIHQpLFxuICAgICAgICBhbHBoYTogaW50ZXJwb2xhdGVOdW1iZXIoZnJvbS5hbHBoYSwgdG8uYWxwaGEsIHQpXG4gICAgfTtcbn1cblxuLy8gSENMXG5mdW5jdGlvbiByZ2JUb0hjbChyZ2JDb2xvcjogQ29sb3IpOiBIQ0xDb2xvciB7XG4gICAgY29uc3Qge2wsIGEsIGJ9ID0gcmdiVG9MYWIocmdiQ29sb3IpO1xuICAgIGNvbnN0IGggPSBNYXRoLmF0YW4yKGIsIGEpICogcmFkMmRlZztcbiAgICByZXR1cm4ge1xuICAgICAgICBoOiBoIDwgMCA/IGggKyAzNjAgOiBoLFxuICAgICAgICBjOiBNYXRoLnNxcnQoYSAqIGEgKyBiICogYiksXG4gICAgICAgIGwsXG4gICAgICAgIGFscGhhOiByZ2JDb2xvci5hXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gaGNsVG9SZ2IoaGNsQ29sb3I6IEhDTENvbG9yKTogQ29sb3Ige1xuICAgIGNvbnN0IGggPSBoY2xDb2xvci5oICogZGVnMnJhZCxcbiAgICAgICAgYyA9IGhjbENvbG9yLmMsXG4gICAgICAgIGwgPSBoY2xDb2xvci5sO1xuICAgIHJldHVybiBsYWJUb1JnYih7XG4gICAgICAgIGwsXG4gICAgICAgIGE6IE1hdGguY29zKGgpICogYyxcbiAgICAgICAgYjogTWF0aC5zaW4oaCkgKiBjLFxuICAgICAgICBhbHBoYTogaGNsQ29sb3IuYWxwaGFcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gaW50ZXJwb2xhdGVIdWUoYTogbnVtYmVyLCBiOiBudW1iZXIsIHQ6IG51bWJlcikge1xuICAgIGNvbnN0IGQgPSBiIC0gYTtcbiAgICByZXR1cm4gYSArIHQgKiAoZCA+IDE4MCB8fCBkIDwgLTE4MCA/IGQgLSAzNjAgKiBNYXRoLnJvdW5kKGQgLyAzNjApIDogZCk7XG59XG5cbmZ1bmN0aW9uIGludGVycG9sYXRlSGNsKGZyb206IEhDTENvbG9yLCB0bzogSENMQ29sb3IsIHQ6IG51bWJlcikge1xuICAgIHJldHVybiB7XG4gICAgICAgIGg6IGludGVycG9sYXRlSHVlKGZyb20uaCwgdG8uaCwgdCksXG4gICAgICAgIGM6IGludGVycG9sYXRlTnVtYmVyKGZyb20uYywgdG8uYywgdCksXG4gICAgICAgIGw6IGludGVycG9sYXRlTnVtYmVyKGZyb20ubCwgdG8ubCwgdCksXG4gICAgICAgIGFscGhhOiBpbnRlcnBvbGF0ZU51bWJlcihmcm9tLmFscGhhLCB0by5hbHBoYSwgdClcbiAgICB9O1xufVxuXG5leHBvcnQgY29uc3QgbGFiID0ge1xuICAgIGZvcndhcmQ6IHJnYlRvTGFiLFxuICAgIHJldmVyc2U6IGxhYlRvUmdiLFxuICAgIGludGVycG9sYXRlOiBpbnRlcnBvbGF0ZUxhYlxufTtcblxuZXhwb3J0IGNvbnN0IGhjbCA9IHtcbiAgICBmb3J3YXJkOiByZ2JUb0hjbCxcbiAgICByZXZlcnNlOiBoY2xUb1JnYixcbiAgICBpbnRlcnBvbGF0ZTogaW50ZXJwb2xhdGVIY2xcbn07XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgVW5pdEJlemllciBmcm9tICdAbWFwYm94L3VuaXRiZXppZXInO1xuXG5pbXBvcnQgKiBhcyBpbnRlcnBvbGF0ZSBmcm9tICcuLi8uLi91dGlsL2ludGVycG9sYXRlJztcbmltcG9ydCB7dG9TdHJpbmcsIE51bWJlclR5cGUsIENvbG9yVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtmaW5kU3RvcExlc3NUaGFuT3JFcXVhbFRvfSBmcm9tICcuLi9zdG9wcyc7XG5pbXBvcnQge2hjbCwgbGFifSBmcm9tICcuLi8uLi91dGlsL2NvbG9yX3NwYWNlcyc7XG5cbmltcG9ydCB0eXBlIHtTdG9wc30gZnJvbSAnLi4vc3RvcHMnO1xuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgUGFyc2luZ0NvbnRleHQgZnJvbSAnLi4vcGFyc2luZ19jb250ZXh0JztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25Db250ZXh0IGZyb20gJy4uL2V2YWx1YXRpb25fY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBJbnRlcnBvbGF0aW9uVHlwZSA9XG4gICAgeyBuYW1lOiAnbGluZWFyJyB9IHxcbiAgICB7IG5hbWU6ICdleHBvbmVudGlhbCcsIGJhc2U6IG51bWJlciB9IHxcbiAgICB7IG5hbWU6ICdjdWJpYy1iZXppZXInLCBjb250cm9sUG9pbnRzOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSB9O1xuXG5jbGFzcyBJbnRlcnBvbGF0ZSBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG5cbiAgICBvcGVyYXRvcjogJ2ludGVycG9sYXRlJyB8ICdpbnRlcnBvbGF0ZS1oY2wnIHwgJ2ludGVycG9sYXRlLWxhYic7XG4gICAgaW50ZXJwb2xhdGlvbjogSW50ZXJwb2xhdGlvblR5cGU7XG4gICAgaW5wdXQ6IEV4cHJlc3Npb247XG4gICAgbGFiZWxzOiBBcnJheTxudW1iZXI+O1xuICAgIG91dHB1dHM6IEFycmF5PEV4cHJlc3Npb24+O1xuXG4gICAgY29uc3RydWN0b3IodHlwZTogVHlwZSwgb3BlcmF0b3I6ICdpbnRlcnBvbGF0ZScgfCAnaW50ZXJwb2xhdGUtaGNsJyB8ICdpbnRlcnBvbGF0ZS1sYWInLCBpbnRlcnBvbGF0aW9uOiBJbnRlcnBvbGF0aW9uVHlwZSwgaW5wdXQ6IEV4cHJlc3Npb24sIHN0b3BzOiBTdG9wcykge1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgICB0aGlzLm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICAgIHRoaXMuaW50ZXJwb2xhdGlvbiA9IGludGVycG9sYXRpb247XG4gICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcblxuICAgICAgICB0aGlzLmxhYmVscyA9IFtdO1xuICAgICAgICB0aGlzLm91dHB1dHMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBbbGFiZWwsIGV4cHJlc3Npb25dIG9mIHN0b3BzKSB7XG4gICAgICAgICAgICB0aGlzLmxhYmVscy5wdXNoKGxhYmVsKTtcbiAgICAgICAgICAgIHRoaXMub3V0cHV0cy5wdXNoKGV4cHJlc3Npb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGludGVycG9sYXRpb25GYWN0b3IoaW50ZXJwb2xhdGlvbjogSW50ZXJwb2xhdGlvblR5cGUsIGlucHV0OiBudW1iZXIsIGxvd2VyOiBudW1iZXIsIHVwcGVyOiBudW1iZXIpIHtcbiAgICAgICAgbGV0IHQgPSAwO1xuICAgICAgICBpZiAoaW50ZXJwb2xhdGlvbi5uYW1lID09PSAnZXhwb25lbnRpYWwnKSB7XG4gICAgICAgICAgICB0ID0gZXhwb25lbnRpYWxJbnRlcnBvbGF0aW9uKGlucHV0LCBpbnRlcnBvbGF0aW9uLmJhc2UsIGxvd2VyLCB1cHBlcik7XG4gICAgICAgIH0gZWxzZSBpZiAoaW50ZXJwb2xhdGlvbi5uYW1lID09PSAnbGluZWFyJykge1xuICAgICAgICAgICAgdCA9IGV4cG9uZW50aWFsSW50ZXJwb2xhdGlvbihpbnB1dCwgMSwgbG93ZXIsIHVwcGVyKTtcbiAgICAgICAgfSBlbHNlIGlmIChpbnRlcnBvbGF0aW9uLm5hbWUgPT09ICdjdWJpYy1iZXppZXInKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gaW50ZXJwb2xhdGlvbi5jb250cm9sUG9pbnRzO1xuICAgICAgICAgICAgY29uc3QgdWIgPSBuZXcgVW5pdEJlemllcihjWzBdLCBjWzFdLCBjWzJdLCBjWzNdKTtcbiAgICAgICAgICAgIHQgPSB1Yi5zb2x2ZShleHBvbmVudGlhbEludGVycG9sYXRpb24oaW5wdXQsIDEsIGxvd2VyLCB1cHBlcikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZShhcmdzOiAkUmVhZE9ubHlBcnJheTxtaXhlZD4sIGNvbnRleHQ6IFBhcnNpbmdDb250ZXh0KSB7XG4gICAgICAgIGxldCBbb3BlcmF0b3IsIGludGVycG9sYXRpb24sIGlucHV0LCAuLi5yZXN0XSA9IGFyZ3M7XG5cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGludGVycG9sYXRpb24pIHx8IGludGVycG9sYXRpb24ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgYW4gaW50ZXJwb2xhdGlvbiB0eXBlIGV4cHJlc3Npb24uYCwgMSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW50ZXJwb2xhdGlvblswXSA9PT0gJ2xpbmVhcicpIHtcbiAgICAgICAgICAgIGludGVycG9sYXRpb24gPSB7bmFtZTogJ2xpbmVhcid9O1xuICAgICAgICB9IGVsc2UgaWYgKGludGVycG9sYXRpb25bMF0gPT09ICdleHBvbmVudGlhbCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGJhc2UgPSBpbnRlcnBvbGF0aW9uWzFdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBiYXNlICE9PSAnbnVtYmVyJylcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwb25lbnRpYWwgaW50ZXJwb2xhdGlvbiByZXF1aXJlcyBhIG51bWVyaWMgYmFzZS5gLCAxLCAxKTtcbiAgICAgICAgICAgIGludGVycG9sYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2V4cG9uZW50aWFsJyxcbiAgICAgICAgICAgICAgICBiYXNlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGludGVycG9sYXRpb25bMF0gPT09ICdjdWJpYy1iZXppZXInKSB7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sUG9pbnRzID0gaW50ZXJwb2xhdGlvbi5zbGljZSgxKTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBjb250cm9sUG9pbnRzLmxlbmd0aCAhPT0gNCB8fFxuICAgICAgICAgICAgICAgIGNvbnRyb2xQb2ludHMuc29tZSh0ID0+IHR5cGVvZiB0ICE9PSAnbnVtYmVyJyB8fCB0IDwgMCB8fCB0ID4gMSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKCdDdWJpYyBiZXppZXIgaW50ZXJwb2xhdGlvbiByZXF1aXJlcyBmb3VyIG51bWVyaWMgYXJndW1lbnRzIHdpdGggdmFsdWVzIGJldHdlZW4gMCBhbmQgMS4nLCAxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW50ZXJwb2xhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnY3ViaWMtYmV6aWVyJyxcbiAgICAgICAgICAgICAgICBjb250cm9sUG9pbnRzOiAoY29udHJvbFBvaW50czogYW55KVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBVbmtub3duIGludGVycG9sYXRpb24gdHlwZSAke1N0cmluZyhpbnRlcnBvbGF0aW9uWzBdKX1gLCAxLCAwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCAtIDEgPCA0KSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgYXQgbGVhc3QgNCBhcmd1bWVudHMsIGJ1dCBmb3VuZCBvbmx5ICR7YXJncy5sZW5ndGggLSAxfS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgoYXJncy5sZW5ndGggLSAxKSAlIDIgIT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBhbiBldmVuIG51bWJlciBvZiBhcmd1bWVudHMuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpbnB1dCA9IGNvbnRleHQucGFyc2UoaW5wdXQsIDIsIE51bWJlclR5cGUpO1xuICAgICAgICBpZiAoIWlucHV0KSByZXR1cm4gbnVsbDtcblxuICAgICAgICBjb25zdCBzdG9wczogU3RvcHMgPSBbXTtcblxuICAgICAgICBsZXQgb3V0cHV0VHlwZTogVHlwZSA9IChudWxsOiBhbnkpO1xuICAgICAgICBpZiAob3BlcmF0b3IgPT09ICdpbnRlcnBvbGF0ZS1oY2wnIHx8IG9wZXJhdG9yID09PSAnaW50ZXJwb2xhdGUtbGFiJykge1xuICAgICAgICAgICAgb3V0cHV0VHlwZSA9IENvbG9yVHlwZTtcbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0LmV4cGVjdGVkVHlwZSAmJiBjb250ZXh0LmV4cGVjdGVkVHlwZS5raW5kICE9PSAndmFsdWUnKSB7XG4gICAgICAgICAgICBvdXRwdXRUeXBlID0gY29udGV4dC5leHBlY3RlZFR5cGU7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3QubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gcmVzdFtpXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcmVzdFtpICsgMV07XG5cbiAgICAgICAgICAgIGNvbnN0IGxhYmVsS2V5ID0gaSArIDM7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZUtleSA9IGkgKyA0O1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGxhYmVsICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKCdJbnB1dC9vdXRwdXQgcGFpcnMgZm9yIFwiaW50ZXJwb2xhdGVcIiBleHByZXNzaW9ucyBtdXN0IGJlIGRlZmluZWQgdXNpbmcgbGl0ZXJhbCBudW1lcmljIHZhbHVlcyAobm90IGNvbXB1dGVkIGV4cHJlc3Npb25zKSBmb3IgdGhlIGlucHV0IHZhbHVlcy4nLCBsYWJlbEtleSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdG9wcy5sZW5ndGggJiYgc3RvcHNbc3RvcHMubGVuZ3RoIC0gMV1bMF0gPj0gbGFiZWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcignSW5wdXQvb3V0cHV0IHBhaXJzIGZvciBcImludGVycG9sYXRlXCIgZXhwcmVzc2lvbnMgbXVzdCBiZSBhcnJhbmdlZCB3aXRoIGlucHV0IHZhbHVlcyBpbiBzdHJpY3RseSBhc2NlbmRpbmcgb3JkZXIuJywgbGFiZWxLZXkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBjb250ZXh0LnBhcnNlKHZhbHVlLCB2YWx1ZUtleSwgb3V0cHV0VHlwZSk7XG4gICAgICAgICAgICBpZiAoIXBhcnNlZCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBvdXRwdXRUeXBlID0gb3V0cHV0VHlwZSB8fCBwYXJzZWQudHlwZTtcbiAgICAgICAgICAgIHN0b3BzLnB1c2goW2xhYmVsLCBwYXJzZWRdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvdXRwdXRUeXBlLmtpbmQgIT09ICdudW1iZXInICYmXG4gICAgICAgICAgICBvdXRwdXRUeXBlLmtpbmQgIT09ICdjb2xvcicgJiZcbiAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgb3V0cHV0VHlwZS5raW5kID09PSAnYXJyYXknICYmXG4gICAgICAgICAgICAgICAgb3V0cHV0VHlwZS5pdGVtVHlwZS5raW5kID09PSAnbnVtYmVyJyAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBvdXRwdXRUeXBlLk4gPT09ICdudW1iZXInXG4gICAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYFR5cGUgJHt0b1N0cmluZyhvdXRwdXRUeXBlKX0gaXMgbm90IGludGVycG9sYXRhYmxlLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBJbnRlcnBvbGF0ZShvdXRwdXRUeXBlLCAob3BlcmF0b3I6IGFueSksIGludGVycG9sYXRpb24sIGlucHV0LCBzdG9wcyk7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoY3R4OiBFdmFsdWF0aW9uQ29udGV4dCkge1xuICAgICAgICBjb25zdCBsYWJlbHMgPSB0aGlzLmxhYmVscztcbiAgICAgICAgY29uc3Qgb3V0cHV0cyA9IHRoaXMub3V0cHV0cztcblxuICAgICAgICBpZiAobGFiZWxzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIG91dHB1dHNbMF0uZXZhbHVhdGUoY3R4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gKCh0aGlzLmlucHV0LmV2YWx1YXRlKGN0eCk6IGFueSk6IG51bWJlcik7XG4gICAgICAgIGlmICh2YWx1ZSA8PSBsYWJlbHNbMF0pIHtcbiAgICAgICAgICAgIHJldHVybiBvdXRwdXRzWzBdLmV2YWx1YXRlKGN0eCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdG9wQ291bnQgPSBsYWJlbHMubGVuZ3RoO1xuICAgICAgICBpZiAodmFsdWUgPj0gbGFiZWxzW3N0b3BDb3VudCAtIDFdKSB7XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0c1tzdG9wQ291bnQgLSAxXS5ldmFsdWF0ZShjdHgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5kZXggPSBmaW5kU3RvcExlc3NUaGFuT3JFcXVhbFRvKGxhYmVscywgdmFsdWUpO1xuICAgICAgICBjb25zdCBsb3dlciA9IGxhYmVsc1tpbmRleF07XG4gICAgICAgIGNvbnN0IHVwcGVyID0gbGFiZWxzW2luZGV4ICsgMV07XG4gICAgICAgIGNvbnN0IHQgPSBJbnRlcnBvbGF0ZS5pbnRlcnBvbGF0aW9uRmFjdG9yKHRoaXMuaW50ZXJwb2xhdGlvbiwgdmFsdWUsIGxvd2VyLCB1cHBlcik7XG5cbiAgICAgICAgY29uc3Qgb3V0cHV0TG93ZXIgPSBvdXRwdXRzW2luZGV4XS5ldmFsdWF0ZShjdHgpO1xuICAgICAgICBjb25zdCBvdXRwdXRVcHBlciA9IG91dHB1dHNbaW5kZXggKyAxXS5ldmFsdWF0ZShjdHgpO1xuXG4gICAgICAgIGlmICh0aGlzLm9wZXJhdG9yID09PSAnaW50ZXJwb2xhdGUnKSB7XG4gICAgICAgICAgICByZXR1cm4gKGludGVycG9sYXRlW3RoaXMudHlwZS5raW5kLnRvTG93ZXJDYXNlKCldOiBhbnkpKG91dHB1dExvd2VyLCBvdXRwdXRVcHBlciwgdCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW1wb3J0L25hbWVzcGFjZVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMub3BlcmF0b3IgPT09ICdpbnRlcnBvbGF0ZS1oY2wnKSB7XG4gICAgICAgICAgICByZXR1cm4gaGNsLnJldmVyc2UoaGNsLmludGVycG9sYXRlKGhjbC5mb3J3YXJkKG91dHB1dExvd2VyKSwgaGNsLmZvcndhcmQob3V0cHV0VXBwZXIpLCB0KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbGFiLnJldmVyc2UobGFiLmludGVycG9sYXRlKGxhYi5mb3J3YXJkKG91dHB1dExvd2VyKSwgbGFiLmZvcndhcmQob3V0cHV0VXBwZXIpLCB0KSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlYWNoQ2hpbGQoZm46IChfOiBFeHByZXNzaW9uKSA9PiB2b2lkKSB7XG4gICAgICAgIGZuKHRoaXMuaW5wdXQpO1xuICAgICAgICBmb3IgKGNvbnN0IGV4cHJlc3Npb24gb2YgdGhpcy5vdXRwdXRzKSB7XG4gICAgICAgICAgICBmbihleHByZXNzaW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG91dHB1dERlZmluZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm91dHB1dHMuZXZlcnkob3V0ID0+IG91dC5vdXRwdXREZWZpbmVkKCkpO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpOiBBcnJheTxtaXhlZD4ge1xuICAgICAgICBsZXQgaW50ZXJwb2xhdGlvbjtcbiAgICAgICAgaWYgKHRoaXMuaW50ZXJwb2xhdGlvbi5uYW1lID09PSAnbGluZWFyJykge1xuICAgICAgICAgICAgaW50ZXJwb2xhdGlvbiA9IFtcImxpbmVhclwiXTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmludGVycG9sYXRpb24ubmFtZSA9PT0gJ2V4cG9uZW50aWFsJykge1xuICAgICAgICAgICAgaWYgICh0aGlzLmludGVycG9sYXRpb24uYmFzZSA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGludGVycG9sYXRpb24gPSBbXCJsaW5lYXJcIl07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGludGVycG9sYXRpb24gPSBbXCJleHBvbmVudGlhbFwiLCB0aGlzLmludGVycG9sYXRpb24uYmFzZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnRlcnBvbGF0aW9uID0gW1wiY3ViaWMtYmV6aWVyXCIgXS5jb25jYXQodGhpcy5pbnRlcnBvbGF0aW9uLmNvbnRyb2xQb2ludHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IFt0aGlzLm9wZXJhdG9yLCBpbnRlcnBvbGF0aW9uLCB0aGlzLmlucHV0LnNlcmlhbGl6ZSgpXTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGFiZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzZXJpYWxpemVkLnB1c2goXG4gICAgICAgICAgICAgICAgdGhpcy5sYWJlbHNbaV0sXG4gICAgICAgICAgICAgICAgdGhpcy5vdXRwdXRzW2ldLnNlcmlhbGl6ZSgpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVkO1xuICAgIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcmF0aW8gdGhhdCBjYW4gYmUgdXNlZCB0byBpbnRlcnBvbGF0ZSBiZXR3ZWVuIGV4cG9uZW50aWFsIGZ1bmN0aW9uXG4gKiBzdG9wcy5cbiAqIEhvdyBpdCB3b3JrczogVHdvIGNvbnNlY3V0aXZlIHN0b3AgdmFsdWVzIGRlZmluZSBhIChzY2FsZWQgYW5kIHNoaWZ0ZWQpIGV4cG9uZW50aWFsIGZ1bmN0aW9uIGBmKHgpID0gYSAqIGJhc2VeeCArIGJgLCB3aGVyZSBgYmFzZWAgaXMgdGhlIHVzZXItc3BlY2lmaWVkIGJhc2UsXG4gKiBhbmQgYGFgIGFuZCBgYmAgYXJlIGNvbnN0YW50cyBhZmZvcmRpbmcgc3VmZmljaWVudCBkZWdyZWVzIG9mIGZyZWVkb20gdG8gZml0XG4gKiB0aGUgZnVuY3Rpb24gdG8gdGhlIGdpdmVuIHN0b3BzLlxuICpcbiAqIEhlcmUncyBhIGJpdCBvZiBhbGdlYnJhIHRoYXQgbGV0cyB1cyBjb21wdXRlIGBmKHgpYCBkaXJlY3RseSBmcm9tIHRoZSBzdG9wXG4gKiB2YWx1ZXMgd2l0aG91dCBleHBsaWNpdGx5IHNvbHZpbmcgZm9yIGBhYCBhbmQgYGJgOlxuICpcbiAqIEZpcnN0IHN0b3AgdmFsdWU6IGBmKHgwKSA9IHkwID0gYSAqIGJhc2VeeDAgKyBiYFxuICogU2Vjb25kIHN0b3AgdmFsdWU6IGBmKHgxKSA9IHkxID0gYSAqIGJhc2VeeDEgKyBiYFxuICogPT4gYHkxIC0geTAgPSBhKGJhc2VeeDEgLSBiYXNlXngwKWBcbiAqID0+IGBhID0gKHkxIC0geTApLyhiYXNlXngxIC0gYmFzZV54MClgXG4gKlxuICogRGVzaXJlZCB2YWx1ZTogYGYoeCkgPSB5ID0gYSAqIGJhc2VeeCArIGJgXG4gKiA9PiBgZih4KSA9IHkwICsgYSAqIChiYXNlXnggLSBiYXNlXngwKWBcbiAqXG4gKiBGcm9tIHRoZSBhYm92ZSwgd2UgY2FuIHJlcGxhY2UgdGhlIGBhYCBpbiBgYSAqIChiYXNlXnggLSBiYXNlXngwKWAgYW5kIGRvIGFcbiAqIGxpdHRsZSBhbGdlYnJhOlxuICogYGBgXG4gKiBhICogKGJhc2VeeCAtIGJhc2VeeDApID0gKHkxIC0geTApLyhiYXNlXngxIC0gYmFzZV54MCkgKiAoYmFzZV54IC0gYmFzZV54MClcbiAqICAgICAgICAgICAgICAgICAgICAgPSAoeTEgLSB5MCkgKiAoYmFzZV54IC0gYmFzZV54MCkgLyAoYmFzZV54MSAtIGJhc2VeeDApXG4gKiBgYGBcbiAqXG4gKiBJZiB3ZSBsZXQgYChiYXNlXnggLSBiYXNlXngwKSAvIChiYXNlXngxIGJhc2VeeDApYCwgdGhlbiB3ZSBoYXZlXG4gKiBgZih4KSA9IHkwICsgKHkxIC0geTApICogcmF0aW9gLiAgSW4gb3RoZXIgd29yZHMsIGByYXRpb2AgbWF5IGJlIHRyZWF0ZWQgYXNcbiAqIGFuIGludGVycG9sYXRpb24gZmFjdG9yIGJldHdlZW4gdGhlIHR3byBzdG9wcycgb3V0cHV0IHZhbHVlcy5cbiAqXG4gKiAoTm90ZTogYSBzbGlnaHRseSBkaWZmZXJlbnQgZm9ybSBmb3IgYHJhdGlvYCxcbiAqIGAoYmFzZV4oeC14MCkgLSAxKSAvIChiYXNlXih4MS14MCkgLSAxKSBgLCBpcyBlcXVpdmFsZW50LCBidXQgcmVxdWlyZXMgZmV3ZXJcbiAqIGV4cGVuc2l2ZSBgTWF0aC5wb3coKWAgb3BlcmF0aW9ucy4pXG4gKlxuICogQHByaXZhdGVcbiovXG5mdW5jdGlvbiBleHBvbmVudGlhbEludGVycG9sYXRpb24oaW5wdXQsIGJhc2UsIGxvd2VyVmFsdWUsIHVwcGVyVmFsdWUpIHtcbiAgICBjb25zdCBkaWZmZXJlbmNlID0gdXBwZXJWYWx1ZSAtIGxvd2VyVmFsdWU7XG4gICAgY29uc3QgcHJvZ3Jlc3MgPSBpbnB1dCAtIGxvd2VyVmFsdWU7XG5cbiAgICBpZiAoZGlmZmVyZW5jZSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9IGVsc2UgaWYgKGJhc2UgPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHByb2dyZXNzIC8gZGlmZmVyZW5jZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gKE1hdGgucG93KGJhc2UsIHByb2dyZXNzKSAtIDEpIC8gKE1hdGgucG93KGJhc2UsIGRpZmZlcmVuY2UpIC0gMSk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbnRlcnBvbGF0ZTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHtjaGVja1N1YnR5cGUsIFZhbHVlVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IFJlc29sdmVkSW1hZ2UgZnJvbSAnLi4vdHlwZXMvcmVzb2x2ZWRfaW1hZ2UnO1xuXG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbmNsYXNzIENvYWxlc2NlIGltcGxlbWVudHMgRXhwcmVzc2lvbiB7XG4gICAgdHlwZTogVHlwZTtcbiAgICBhcmdzOiBBcnJheTxFeHByZXNzaW9uPjtcblxuICAgIGNvbnN0cnVjdG9yKHR5cGU6IFR5cGUsIGFyZ3M6IEFycmF5PEV4cHJlc3Npb24+KSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMuYXJncyA9IGFyZ3M7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoXCJFeHBlY3RlY3RlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBvdXRwdXRUeXBlOiBUeXBlID0gKG51bGw6IGFueSk7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkVHlwZSA9IGNvbnRleHQuZXhwZWN0ZWRUeXBlO1xuICAgICAgICBpZiAoZXhwZWN0ZWRUeXBlICYmIGV4cGVjdGVkVHlwZS5raW5kICE9PSAndmFsdWUnKSB7XG4gICAgICAgICAgICBvdXRwdXRUeXBlID0gZXhwZWN0ZWRUeXBlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcnNlZEFyZ3MgPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGFyZyBvZiBhcmdzLnNsaWNlKDEpKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBjb250ZXh0LnBhcnNlKGFyZywgMSArIHBhcnNlZEFyZ3MubGVuZ3RoLCBvdXRwdXRUeXBlLCB1bmRlZmluZWQsIHt0eXBlQW5ub3RhdGlvbjogJ29taXQnfSk7XG4gICAgICAgICAgICBpZiAoIXBhcnNlZCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBvdXRwdXRUeXBlID0gb3V0cHV0VHlwZSB8fCBwYXJzZWQudHlwZTtcbiAgICAgICAgICAgIHBhcnNlZEFyZ3MucHVzaChwYXJzZWQpO1xuICAgICAgICB9XG4gICAgICAgIGFzc2VydChvdXRwdXRUeXBlKTtcblxuICAgICAgICAvLyBBYm92ZSwgd2UgcGFyc2UgYXJndW1lbnRzIHdpdGhvdXQgaW5mZXJyZWQgdHlwZSBhbm5vdGF0aW9uIHNvIHRoYXRcbiAgICAgICAgLy8gdGhleSBkb24ndCBwcm9kdWNlIGEgcnVudGltZSBlcnJvciBmb3IgYG51bGxgIGlucHV0LCB3aGljaCB3b3VsZFxuICAgICAgICAvLyBwcmVlbXB0IHRoZSBkZXNpcmVkIG51bGwtY29hbGVzY2luZyBiZWhhdmlvci5cbiAgICAgICAgLy8gVGh1cywgaWYgYW55IG9mIG91ciBhcmd1bWVudHMgd291bGQgaGF2ZSBuZWVkZWQgYW4gYW5ub3RhdGlvbiwgd2VcbiAgICAgICAgLy8gbmVlZCB0byB3cmFwIHRoZSBlbmNsb3NpbmcgY29hbGVzY2UgZXhwcmVzc2lvbiB3aXRoIGl0IGluc3RlYWQuXG4gICAgICAgIGNvbnN0IG5lZWRzQW5ub3RhdGlvbiA9IGV4cGVjdGVkVHlwZSAmJlxuICAgICAgICAgICAgcGFyc2VkQXJncy5zb21lKGFyZyA9PiBjaGVja1N1YnR5cGUoZXhwZWN0ZWRUeXBlLCBhcmcudHlwZSkpO1xuXG4gICAgICAgIHJldHVybiBuZWVkc0Fubm90YXRpb24gP1xuICAgICAgICAgICAgbmV3IENvYWxlc2NlKFZhbHVlVHlwZSwgcGFyc2VkQXJncykgOlxuICAgICAgICAgICAgbmV3IENvYWxlc2NlKChvdXRwdXRUeXBlOiBhbnkpLCBwYXJzZWRBcmdzKTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBudWxsO1xuICAgICAgICBsZXQgYXJnQ291bnQgPSAwO1xuICAgICAgICBsZXQgcmVxdWVzdGVkSW1hZ2VOYW1lO1xuICAgICAgICBmb3IgKGNvbnN0IGFyZyBvZiB0aGlzLmFyZ3MpIHtcbiAgICAgICAgICAgIGFyZ0NvdW50Kys7XG4gICAgICAgICAgICByZXN1bHQgPSBhcmcuZXZhbHVhdGUoY3R4KTtcbiAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgZmlyc3QgcmVxdWVzdGVkIGltYWdlIGluIGEgY29hbGVzY2Ugc3RhdGVtZW50XG4gICAgICAgICAgICAvLyBpZiBjb2FsZXNjZSBjYW4ndCBmaW5kIGEgdmFsaWQgaW1hZ2UsIHdlIHJldHVybiB0aGUgZmlyc3QgaW1hZ2UgbmFtZSBzbyBzdHlsZWltYWdlbWlzc2luZyBjYW4gZmlyZVxuICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQgaW5zdGFuY2VvZiBSZXNvbHZlZEltYWdlICYmICFyZXN1bHQuYXZhaWxhYmxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXF1ZXN0ZWRJbWFnZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGVkSW1hZ2VOYW1lID0gcmVzdWx0Lm5hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ0NvdW50ID09PSB0aGlzLmFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlcXVlc3RlZEltYWdlTmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IG51bGwpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoXzogRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLmFyZ3MuZm9yRWFjaChmbik7XG4gICAgfVxuXG4gICAgb3V0cHV0RGVmaW5lZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXJncy5ldmVyeShhcmcgPT4gYXJnLm91dHB1dERlZmluZWQoKSk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkID0gW1wiY29hbGVzY2VcIl07XG4gICAgICAgIHRoaXMuZWFjaENoaWxkKGNoaWxkID0+IHsgc2VyaWFsaXplZC5wdXNoKGNoaWxkLnNlcmlhbGl6ZSgpKTsgfSk7XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVkO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29hbGVzY2U7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgdHlwZSB7VHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgUGFyc2luZ0NvbnRleHQgZnJvbSAnLi4vcGFyc2luZ19jb250ZXh0JztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25Db250ZXh0ICBmcm9tICcuLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuXG5jbGFzcyBMZXQgaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuICAgIGJpbmRpbmdzOiBBcnJheTxbc3RyaW5nLCBFeHByZXNzaW9uXT47XG4gICAgcmVzdWx0OiBFeHByZXNzaW9uO1xuXG4gICAgY29uc3RydWN0b3IoYmluZGluZ3M6IEFycmF5PFtzdHJpbmcsIEV4cHJlc3Npb25dPiwgcmVzdWx0OiBFeHByZXNzaW9uKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHJlc3VsdC50eXBlO1xuICAgICAgICB0aGlzLmJpbmRpbmdzID0gW10uY29uY2F0KGJpbmRpbmdzKTtcbiAgICAgICAgdGhpcy5yZXN1bHQgPSByZXN1bHQ7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoY3R4OiBFdmFsdWF0aW9uQ29udGV4dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXN1bHQuZXZhbHVhdGUoY3R4KTtcbiAgICB9XG5cbiAgICBlYWNoQ2hpbGQoZm46IChfOiBFeHByZXNzaW9uKSA9PiB2b2lkKSB7XG4gICAgICAgIGZvciAoY29uc3QgYmluZGluZyBvZiB0aGlzLmJpbmRpbmdzKSB7XG4gICAgICAgICAgICBmbihiaW5kaW5nWzFdKTtcbiAgICAgICAgfVxuICAgICAgICBmbih0aGlzLnJlc3VsdCk7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgNClcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBhdCBsZWFzdCAzIGFyZ3VtZW50cywgYnV0IGZvdW5kICR7YXJncy5sZW5ndGggLSAxfSBpbnN0ZWFkLmApO1xuXG4gICAgICAgIGNvbnN0IGJpbmRpbmdzOiBBcnJheTxbc3RyaW5nLCBFeHByZXNzaW9uXT4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aCAtIDE7IGkgKz0gMikge1xuICAgICAgICAgICAgY29uc3QgbmFtZSA9IGFyZ3NbaV07XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgc3RyaW5nLCBidXQgZm91bmQgJHt0eXBlb2YgbmFtZX0gaW5zdGVhZC5gLCBpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKC9bXmEtekEtWjAtOV9dLy50ZXN0KG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYFZhcmlhYmxlIG5hbWVzIG11c3QgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIG9yICdfJy5gLCBpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjb250ZXh0LnBhcnNlKGFyZ3NbaSArIDFdLCBpICsgMSk7XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcblxuICAgICAgICAgICAgYmluZGluZ3MucHVzaChbbmFtZSwgdmFsdWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQucGFyc2UoYXJnc1thcmdzLmxlbmd0aCAtIDFdLCBhcmdzLmxlbmd0aCAtIDEsIGNvbnRleHQuZXhwZWN0ZWRUeXBlLCBiaW5kaW5ncyk7XG4gICAgICAgIGlmICghcmVzdWx0KSByZXR1cm4gbnVsbDtcblxuICAgICAgICByZXR1cm4gbmV3IExldChiaW5kaW5ncywgcmVzdWx0KTtcbiAgICB9XG5cbiAgICBvdXRwdXREZWZpbmVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXN1bHQub3V0cHV0RGVmaW5lZCgpO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IFtcImxldFwiXTtcbiAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgZXhwcl0gb2YgdGhpcy5iaW5kaW5ncykge1xuICAgICAgICAgICAgc2VyaWFsaXplZC5wdXNoKG5hbWUsIGV4cHIuc2VyaWFsaXplKCkpO1xuICAgICAgICB9XG4gICAgICAgIHNlcmlhbGl6ZWQucHVzaCh0aGlzLnJlc3VsdC5zZXJpYWxpemUoKSk7XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVkO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGV0O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHthcnJheSwgVmFsdWVUeXBlLCBOdW1iZXJUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCBSdW50aW1lRXJyb3IgZnJvbSAnLi4vcnVudGltZV9lcnJvcic7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uQ29udGV4dCBmcm9tICcuLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1R5cGUsIEFycmF5VHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUge1ZhbHVlfSBmcm9tICcuLi92YWx1ZXMnO1xuXG5jbGFzcyBBdCBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG4gICAgaW5kZXg6IEV4cHJlc3Npb247XG4gICAgaW5wdXQ6IEV4cHJlc3Npb247XG5cbiAgICBjb25zdHJ1Y3Rvcih0eXBlOiBUeXBlLCBpbmRleDogRXhwcmVzc2lvbiwgaW5wdXQ6IEV4cHJlc3Npb24pIHtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgdGhpcy5pbmRleCA9IGluZGV4O1xuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoICE9PSAzKVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIDIgYXJndW1lbnRzLCBidXQgZm91bmQgJHthcmdzLmxlbmd0aCAtIDF9IGluc3RlYWQuYCk7XG5cbiAgICAgICAgY29uc3QgaW5kZXggPSBjb250ZXh0LnBhcnNlKGFyZ3NbMV0sIDEsIE51bWJlclR5cGUpO1xuICAgICAgICBjb25zdCBpbnB1dCA9IGNvbnRleHQucGFyc2UoYXJnc1syXSwgMiwgYXJyYXkoY29udGV4dC5leHBlY3RlZFR5cGUgfHwgVmFsdWVUeXBlKSk7XG5cbiAgICAgICAgaWYgKCFpbmRleCB8fCAhaW5wdXQpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNvbnN0IHQ6IEFycmF5VHlwZSA9IChpbnB1dC50eXBlOiBhbnkpO1xuICAgICAgICByZXR1cm4gbmV3IEF0KHQuaXRlbVR5cGUsIGluZGV4LCBpbnB1dCk7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoY3R4OiBFdmFsdWF0aW9uQ29udGV4dCkge1xuICAgICAgICBjb25zdCBpbmRleCA9ICgodGhpcy5pbmRleC5ldmFsdWF0ZShjdHgpOiBhbnkpOiBudW1iZXIpO1xuICAgICAgICBjb25zdCBhcnJheSA9ICgodGhpcy5pbnB1dC5ldmFsdWF0ZShjdHgpOiBhbnkpOiBBcnJheTxWYWx1ZT4pO1xuXG4gICAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoYEFycmF5IGluZGV4IG91dCBvZiBib3VuZHM6ICR7aW5kZXh9IDwgMC5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbmRleCA+PSBhcnJheS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoYEFycmF5IGluZGV4IG91dCBvZiBib3VuZHM6ICR7aW5kZXh9ID4gJHthcnJheS5sZW5ndGggLSAxfS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbmRleCAhPT0gTWF0aC5mbG9vcihpbmRleCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoYEFycmF5IGluZGV4IG11c3QgYmUgYW4gaW50ZWdlciwgYnV0IGZvdW5kICR7aW5kZXh9IGluc3RlYWQuYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXJyYXlbaW5kZXhdO1xuICAgIH1cblxuICAgIGVhY2hDaGlsZChmbjogKF86IEV4cHJlc3Npb24pID0+IHZvaWQpIHtcbiAgICAgICAgZm4odGhpcy5pbmRleCk7XG4gICAgICAgIGZuKHRoaXMuaW5wdXQpO1xuICAgIH1cblxuICAgIG91dHB1dERlZmluZWQoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIHJldHVybiBbXCJhdFwiLCB0aGlzLmluZGV4LnNlcmlhbGl6ZSgpLCB0aGlzLmlucHV0LnNlcmlhbGl6ZSgpXTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEF0O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtCb29sZWFuVHlwZSwgU3RyaW5nVHlwZSwgVmFsdWVUeXBlLCBOdWxsVHlwZSwgdG9TdHJpbmcsIE51bWJlclR5cGUsIGlzVmFsaWRUeXBlLCBpc1ZhbGlkTmF0aXZlVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IFJ1bnRpbWVFcnJvciBmcm9tICcuLi9ydW50aW1lX2Vycm9yJztcbmltcG9ydCB7dHlwZU9mfSBmcm9tICcuLi92YWx1ZXMnO1xuXG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbmNsYXNzIEluIGltcGxlbWVudHMgRXhwcmVzc2lvbiB7XG4gICAgdHlwZTogVHlwZTtcbiAgICBuZWVkbGU6IEV4cHJlc3Npb247XG4gICAgaGF5c3RhY2s6IEV4cHJlc3Npb247XG5cbiAgICBjb25zdHJ1Y3RvcihuZWVkbGU6IEV4cHJlc3Npb24sIGhheXN0YWNrOiBFeHByZXNzaW9uKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IEJvb2xlYW5UeXBlO1xuICAgICAgICB0aGlzLm5lZWRsZSA9IG5lZWRsZTtcbiAgICAgICAgdGhpcy5oYXlzdGFjayA9IGhheXN0YWNrO1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZShhcmdzOiAkUmVhZE9ubHlBcnJheTxtaXhlZD4sIGNvbnRleHQ6IFBhcnNpbmdDb250ZXh0KSB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMykge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIDIgYXJndW1lbnRzLCBidXQgZm91bmQgJHthcmdzLmxlbmd0aCAtIDF9IGluc3RlYWQuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZWVkbGUgPSBjb250ZXh0LnBhcnNlKGFyZ3NbMV0sIDEsIFZhbHVlVHlwZSk7XG5cbiAgICAgICAgY29uc3QgaGF5c3RhY2sgPSBjb250ZXh0LnBhcnNlKGFyZ3NbMl0sIDIsIFZhbHVlVHlwZSk7XG5cbiAgICAgICAgaWYgKCFuZWVkbGUgfHwgIWhheXN0YWNrKSByZXR1cm4gbnVsbDtcblxuICAgICAgICBpZiAoIWlzVmFsaWRUeXBlKG5lZWRsZS50eXBlLCBbQm9vbGVhblR5cGUsIFN0cmluZ1R5cGUsIE51bWJlclR5cGUsIE51bGxUeXBlLCBWYWx1ZVR5cGVdKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIGZpcnN0IGFyZ3VtZW50IHRvIGJlIG9mIHR5cGUgYm9vbGVhbiwgc3RyaW5nLCBudW1iZXIgb3IgbnVsbCwgYnV0IGZvdW5kICR7dG9TdHJpbmcobmVlZGxlLnR5cGUpfSBpbnN0ZWFkYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IEluKG5lZWRsZSwgaGF5c3RhY2spO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGN0eDogRXZhbHVhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgY29uc3QgbmVlZGxlID0gKHRoaXMubmVlZGxlLmV2YWx1YXRlKGN0eCk6IGFueSk7XG4gICAgICAgIGNvbnN0IGhheXN0YWNrID0gKHRoaXMuaGF5c3RhY2suZXZhbHVhdGUoY3R4KTogYW55KTtcblxuICAgICAgICBpZiAoIWhheXN0YWNrKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgaWYgKCFpc1ZhbGlkTmF0aXZlVHlwZShuZWVkbGUsIFsnYm9vbGVhbicsICdzdHJpbmcnLCAnbnVtYmVyJywgJ251bGwnXSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoYEV4cGVjdGVkIGZpcnN0IGFyZ3VtZW50IHRvIGJlIG9mIHR5cGUgYm9vbGVhbiwgc3RyaW5nLCBudW1iZXIgb3IgbnVsbCwgYnV0IGZvdW5kICR7dG9TdHJpbmcodHlwZU9mKG5lZWRsZSkpfSBpbnN0ZWFkLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc1ZhbGlkTmF0aXZlVHlwZShoYXlzdGFjaywgWydzdHJpbmcnLCAnYXJyYXknXSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoYEV4cGVjdGVkIHNlY29uZCBhcmd1bWVudCB0byBiZSBvZiB0eXBlIGFycmF5IG9yIHN0cmluZywgYnV0IGZvdW5kICR7dG9TdHJpbmcodHlwZU9mKGhheXN0YWNrKSl9IGluc3RlYWQuYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaGF5c3RhY2suaW5kZXhPZihuZWVkbGUpID49IDA7XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoXzogRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICBmbih0aGlzLm5lZWRsZSk7XG4gICAgICAgIGZuKHRoaXMuaGF5c3RhY2spO1xuICAgIH1cblxuICAgIG91dHB1dERlZmluZWQoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgcmV0dXJuIFtcImluXCIsIHRoaXMubmVlZGxlLnNlcmlhbGl6ZSgpLCB0aGlzLmhheXN0YWNrLnNlcmlhbGl6ZSgpXTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEluO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtCb29sZWFuVHlwZSwgU3RyaW5nVHlwZSwgVmFsdWVUeXBlLCBOdWxsVHlwZSwgdG9TdHJpbmcsIE51bWJlclR5cGUsIGlzVmFsaWRUeXBlLCBpc1ZhbGlkTmF0aXZlVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IFJ1bnRpbWVFcnJvciBmcm9tICcuLi9ydW50aW1lX2Vycm9yJztcbmltcG9ydCB7dHlwZU9mfSBmcm9tICcuLi92YWx1ZXMnO1xuXG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbmNsYXNzIEluZGV4T2YgaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuICAgIG5lZWRsZTogRXhwcmVzc2lvbjtcbiAgICBoYXlzdGFjazogRXhwcmVzc2lvbjtcbiAgICBmcm9tSW5kZXg6ID9FeHByZXNzaW9uO1xuXG4gICAgY29uc3RydWN0b3IobmVlZGxlOiBFeHByZXNzaW9uLCBoYXlzdGFjazogRXhwcmVzc2lvbiwgZnJvbUluZGV4PzogRXhwcmVzc2lvbikge1xuICAgICAgICB0aGlzLnR5cGUgPSBOdW1iZXJUeXBlO1xuICAgICAgICB0aGlzLm5lZWRsZSA9IG5lZWRsZTtcbiAgICAgICAgdGhpcy5oYXlzdGFjayA9IGhheXN0YWNrO1xuICAgICAgICB0aGlzLmZyb21JbmRleCA9IGZyb21JbmRleDtcbiAgICB9XG5cbiAgICBzdGF0aWMgcGFyc2UoYXJnczogJFJlYWRPbmx5QXJyYXk8bWl4ZWQ+LCBjb250ZXh0OiBQYXJzaW5nQ29udGV4dCkge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMiB8fCAgYXJncy5sZW5ndGggPj0gNSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIDMgb3IgNCBhcmd1bWVudHMsIGJ1dCBmb3VuZCAke2FyZ3MubGVuZ3RoIC0gMX0gaW5zdGVhZC5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5lZWRsZSA9IGNvbnRleHQucGFyc2UoYXJnc1sxXSwgMSwgVmFsdWVUeXBlKTtcblxuICAgICAgICBjb25zdCBoYXlzdGFjayA9IGNvbnRleHQucGFyc2UoYXJnc1syXSwgMiwgVmFsdWVUeXBlKTtcblxuICAgICAgICBpZiAoIW5lZWRsZSB8fCAhaGF5c3RhY2spIHJldHVybiBudWxsO1xuICAgICAgICBpZiAoIWlzVmFsaWRUeXBlKG5lZWRsZS50eXBlLCBbQm9vbGVhblR5cGUsIFN0cmluZ1R5cGUsIE51bWJlclR5cGUsIE51bGxUeXBlLCBWYWx1ZVR5cGVdKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIGZpcnN0IGFyZ3VtZW50IHRvIGJlIG9mIHR5cGUgYm9vbGVhbiwgc3RyaW5nLCBudW1iZXIgb3IgbnVsbCwgYnV0IGZvdW5kICR7dG9TdHJpbmcobmVlZGxlLnR5cGUpfSBpbnN0ZWFkYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICAgIGNvbnN0IGZyb21JbmRleCA9IGNvbnRleHQucGFyc2UoYXJnc1szXSwgMywgTnVtYmVyVHlwZSk7XG4gICAgICAgICAgICBpZiAoIWZyb21JbmRleCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEluZGV4T2YobmVlZGxlLCBoYXlzdGFjaywgZnJvbUluZGV4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgSW5kZXhPZihuZWVkbGUsIGhheXN0YWNrKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV2YWx1YXRlKGN0eDogRXZhbHVhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgY29uc3QgbmVlZGxlID0gKHRoaXMubmVlZGxlLmV2YWx1YXRlKGN0eCk6IGFueSk7XG4gICAgICAgIGNvbnN0IGhheXN0YWNrID0gKHRoaXMuaGF5c3RhY2suZXZhbHVhdGUoY3R4KTogYW55KTtcblxuICAgICAgICBpZiAoIWlzVmFsaWROYXRpdmVUeXBlKG5lZWRsZSwgWydib29sZWFuJywgJ3N0cmluZycsICdudW1iZXInLCAnbnVsbCddKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihgRXhwZWN0ZWQgZmlyc3QgYXJndW1lbnQgdG8gYmUgb2YgdHlwZSBib29sZWFuLCBzdHJpbmcsIG51bWJlciBvciBudWxsLCBidXQgZm91bmQgJHt0b1N0cmluZyh0eXBlT2YobmVlZGxlKSl9IGluc3RlYWQuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzVmFsaWROYXRpdmVUeXBlKGhheXN0YWNrLCBbJ3N0cmluZycsICdhcnJheSddKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihgRXhwZWN0ZWQgc2Vjb25kIGFyZ3VtZW50IHRvIGJlIG9mIHR5cGUgYXJyYXkgb3Igc3RyaW5nLCBidXQgZm91bmQgJHt0b1N0cmluZyh0eXBlT2YoaGF5c3RhY2spKX0gaW5zdGVhZC5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmZyb21JbmRleCkge1xuICAgICAgICAgICAgY29uc3QgZnJvbUluZGV4ID0gKHRoaXMuZnJvbUluZGV4LmV2YWx1YXRlKGN0eCk6IG51bWJlcik7XG4gICAgICAgICAgICByZXR1cm4gaGF5c3RhY2suaW5kZXhPZihuZWVkbGUsIGZyb21JbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaGF5c3RhY2suaW5kZXhPZihuZWVkbGUpO1xuICAgIH1cblxuICAgIGVhY2hDaGlsZChmbjogKF86IEV4cHJlc3Npb24pID0+IHZvaWQpIHtcbiAgICAgICAgZm4odGhpcy5uZWVkbGUpO1xuICAgICAgICBmbih0aGlzLmhheXN0YWNrKTtcbiAgICAgICAgaWYgKHRoaXMuZnJvbUluZGV4KSB7XG4gICAgICAgICAgICBmbih0aGlzLmZyb21JbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvdXRwdXREZWZpbmVkKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICBpZiAodGhpcy5mcm9tSW5kZXggIT0gbnVsbCAmJiB0aGlzLmZyb21JbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBmcm9tSW5kZXggPSB0aGlzLmZyb21JbmRleC5zZXJpYWxpemUoKTtcbiAgICAgICAgICAgIHJldHVybiBbXCJpbmRleC1vZlwiLCB0aGlzLm5lZWRsZS5zZXJpYWxpemUoKSwgdGhpcy5oYXlzdGFjay5zZXJpYWxpemUoKSwgZnJvbUluZGV4XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1wiaW5kZXgtb2ZcIiwgdGhpcy5uZWVkbGUuc2VyaWFsaXplKCksIHRoaXMuaGF5c3RhY2suc2VyaWFsaXplKCldO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSW5kZXhPZjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHt0eXBlT2Z9IGZyb20gJy4uL3ZhbHVlcyc7XG5pbXBvcnQge1ZhbHVlVHlwZSwgdHlwZSBUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uQ29udGV4dCBmcm9tICcuLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuXG4vLyBNYXAgaW5wdXQgbGFiZWwgdmFsdWVzIHRvIG91dHB1dCBleHByZXNzaW9uIGluZGV4XG50eXBlIENhc2VzID0ge1tudW1iZXIgfCBzdHJpbmddOiBudW1iZXJ9O1xuXG5jbGFzcyBNYXRjaCBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG4gICAgaW5wdXRUeXBlOiBUeXBlO1xuXG4gICAgaW5wdXQ6IEV4cHJlc3Npb247XG4gICAgY2FzZXM6IENhc2VzO1xuICAgIG91dHB1dHM6IEFycmF5PEV4cHJlc3Npb24+O1xuICAgIG90aGVyd2lzZTogRXhwcmVzc2lvbjtcblxuICAgIGNvbnN0cnVjdG9yKGlucHV0VHlwZTogVHlwZSwgb3V0cHV0VHlwZTogVHlwZSwgaW5wdXQ6IEV4cHJlc3Npb24sIGNhc2VzOiBDYXNlcywgb3V0cHV0czogQXJyYXk8RXhwcmVzc2lvbj4sIG90aGVyd2lzZTogRXhwcmVzc2lvbikge1xuICAgICAgICB0aGlzLmlucHV0VHlwZSA9IGlucHV0VHlwZTtcbiAgICAgICAgdGhpcy50eXBlID0gb3V0cHV0VHlwZTtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgICAgICB0aGlzLmNhc2VzID0gY2FzZXM7XG4gICAgICAgIHRoaXMub3V0cHV0cyA9IG91dHB1dHM7XG4gICAgICAgIHRoaXMub3RoZXJ3aXNlID0gb3RoZXJ3aXNlO1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZShhcmdzOiAkUmVhZE9ubHlBcnJheTxtaXhlZD4sIGNvbnRleHQ6IFBhcnNpbmdDb250ZXh0KSB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDUpXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgYXQgbGVhc3QgNCBhcmd1bWVudHMsIGJ1dCBmb3VuZCBvbmx5ICR7YXJncy5sZW5ndGggLSAxfS5gKTtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoICUgMiAhPT0gMSlcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBhbiBldmVuIG51bWJlciBvZiBhcmd1bWVudHMuYCk7XG5cbiAgICAgICAgbGV0IGlucHV0VHlwZTtcbiAgICAgICAgbGV0IG91dHB1dFR5cGU7XG4gICAgICAgIGlmIChjb250ZXh0LmV4cGVjdGVkVHlwZSAmJiBjb250ZXh0LmV4cGVjdGVkVHlwZS5raW5kICE9PSAndmFsdWUnKSB7XG4gICAgICAgICAgICBvdXRwdXRUeXBlID0gY29udGV4dC5leHBlY3RlZFR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2FzZXMgPSB7fTtcbiAgICAgICAgY29uc3Qgb3V0cHV0cyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMjsgaSA8IGFyZ3MubGVuZ3RoIC0gMTsgaSArPSAyKSB7XG4gICAgICAgICAgICBsZXQgbGFiZWxzID0gYXJnc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXJnc1tpICsgMV07XG5cbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShsYWJlbHMpKSB7XG4gICAgICAgICAgICAgICAgbGFiZWxzID0gW2xhYmVsc107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGxhYmVsQ29udGV4dCA9IGNvbnRleHQuY29uY2F0KGkpO1xuICAgICAgICAgICAgaWYgKGxhYmVscy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGFiZWxDb250ZXh0LmVycm9yKCdFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYnJhbmNoIGxhYmVsLicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGxhYmVsIG9mIGxhYmVscykge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbGFiZWwgIT09ICdudW1iZXInICYmIHR5cGVvZiBsYWJlbCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxhYmVsQ29udGV4dC5lcnJvcihgQnJhbmNoIGxhYmVscyBtdXN0IGJlIG51bWJlcnMgb3Igc3RyaW5ncy5gKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsYWJlbCA9PT0gJ251bWJlcicgJiYgTWF0aC5hYnMobGFiZWwpID4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxhYmVsQ29udGV4dC5lcnJvcihgQnJhbmNoIGxhYmVscyBtdXN0IGJlIGludGVnZXJzIG5vIGxhcmdlciB0aGFuICR7TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJ9LmApO1xuXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbGFiZWwgPT09ICdudW1iZXInICYmIE1hdGguZmxvb3IobGFiZWwpICE9PSBsYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGFiZWxDb250ZXh0LmVycm9yKGBOdW1lcmljIGJyYW5jaCBsYWJlbHMgbXVzdCBiZSBpbnRlZ2VyIHZhbHVlcy5gKTtcblxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlucHV0VHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBpbnB1dFR5cGUgPSB0eXBlT2YobGFiZWwpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGFiZWxDb250ZXh0LmNoZWNrU3VidHlwZShpbnB1dFR5cGUsIHR5cGVPZihsYWJlbCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2FzZXNbU3RyaW5nKGxhYmVsKV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsYWJlbENvbnRleHQuZXJyb3IoJ0JyYW5jaCBsYWJlbHMgbXVzdCBiZSB1bmlxdWUuJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2FzZXNbU3RyaW5nKGxhYmVsKV0gPSBvdXRwdXRzLmxlbmd0aDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5wYXJzZSh2YWx1ZSwgaSwgb3V0cHV0VHlwZSk7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBvdXRwdXRUeXBlID0gb3V0cHV0VHlwZSB8fCByZXN1bHQudHlwZTtcbiAgICAgICAgICAgIG91dHB1dHMucHVzaChyZXN1bHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5wdXQgPSBjb250ZXh0LnBhcnNlKGFyZ3NbMV0sIDEsIFZhbHVlVHlwZSk7XG4gICAgICAgIGlmICghaW5wdXQpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNvbnN0IG90aGVyd2lzZSA9IGNvbnRleHQucGFyc2UoYXJnc1thcmdzLmxlbmd0aCAtIDFdLCBhcmdzLmxlbmd0aCAtIDEsIG91dHB1dFR5cGUpO1xuICAgICAgICBpZiAoIW90aGVyd2lzZSkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgYXNzZXJ0KGlucHV0VHlwZSAmJiBvdXRwdXRUeXBlKTtcblxuICAgICAgICBpZiAoaW5wdXQudHlwZS5raW5kICE9PSAndmFsdWUnICYmIGNvbnRleHQuY29uY2F0KDEpLmNoZWNrU3VidHlwZSgoaW5wdXRUeXBlOiBhbnkpLCBpbnB1dC50eXBlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IE1hdGNoKChpbnB1dFR5cGU6IGFueSksIChvdXRwdXRUeXBlOiBhbnkpLCBpbnB1dCwgY2FzZXMsIG91dHB1dHMsIG90aGVyd2lzZSk7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoY3R4OiBFdmFsdWF0aW9uQ29udGV4dCkge1xuICAgICAgICBjb25zdCBpbnB1dCA9ICh0aGlzLmlucHV0LmV2YWx1YXRlKGN0eCk6IGFueSk7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9ICh0eXBlT2YoaW5wdXQpID09PSB0aGlzLmlucHV0VHlwZSAmJiB0aGlzLm91dHB1dHNbdGhpcy5jYXNlc1tpbnB1dF1dKSB8fCB0aGlzLm90aGVyd2lzZTtcbiAgICAgICAgcmV0dXJuIG91dHB1dC5ldmFsdWF0ZShjdHgpO1xuICAgIH1cblxuICAgIGVhY2hDaGlsZChmbjogKF86IEV4cHJlc3Npb24pID0+IHZvaWQpIHtcbiAgICAgICAgZm4odGhpcy5pbnB1dCk7XG4gICAgICAgIHRoaXMub3V0cHV0cy5mb3JFYWNoKGZuKTtcbiAgICAgICAgZm4odGhpcy5vdGhlcndpc2UpO1xuICAgIH1cblxuICAgIG91dHB1dERlZmluZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm91dHB1dHMuZXZlcnkob3V0ID0+IG91dC5vdXRwdXREZWZpbmVkKCkpICYmIHRoaXMub3RoZXJ3aXNlLm91dHB1dERlZmluZWQoKTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKTogQXJyYXk8bWl4ZWQ+IHtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IFtcIm1hdGNoXCIsIHRoaXMuaW5wdXQuc2VyaWFsaXplKCldO1xuXG4gICAgICAgIC8vIFNvcnQgc28gc2VyaWFsaXphdGlvbiBoYXMgYW4gYXJiaXRyYXJ5IGRlZmluZWQgb3JkZXIsIGV2ZW4gdGhvdWdoXG4gICAgICAgIC8vIGJyYW5jaCBvcmRlciBkb2Vzbid0IGFmZmVjdCBldmFsdWF0aW9uXG4gICAgICAgIGNvbnN0IHNvcnRlZExhYmVscyA9IE9iamVjdC5rZXlzKHRoaXMuY2FzZXMpLnNvcnQoKTtcblxuICAgICAgICAvLyBHcm91cCBicmFuY2hlcyBieSB1bmlxdWUgbWF0Y2ggZXhwcmVzc2lvbiB0byBzdXBwb3J0IGNvbmRlbnNlZFxuICAgICAgICAvLyBzZXJpYWxpemF0aW9ucyBvZiB0aGUgZm9ybSBbY2FzZTEsIGNhc2UyLCAuLi5dIC0+IG1hdGNoRXhwcmVzc2lvblxuICAgICAgICBjb25zdCBncm91cGVkQnlPdXRwdXQ6IEFycmF5PFtudW1iZXIsIEFycmF5PG51bWJlciB8IHN0cmluZz5dPiA9IFtdO1xuICAgICAgICBjb25zdCBvdXRwdXRMb29rdXA6IHtbaW5kZXg6IG51bWJlcl06IG51bWJlcn0gPSB7fTsgLy8gbG9va3VwIGluZGV4IGludG8gZ3JvdXBlZEJ5T3V0cHV0IGZvciBhIGdpdmVuIG91dHB1dCBleHByZXNzaW9uXG4gICAgICAgIGZvciAoY29uc3QgbGFiZWwgb2Ygc29ydGVkTGFiZWxzKSB7XG4gICAgICAgICAgICBjb25zdCBvdXRwdXRJbmRleCA9IG91dHB1dExvb2t1cFt0aGlzLmNhc2VzW2xhYmVsXV07XG4gICAgICAgICAgICBpZiAob3V0cHV0SW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIC8vIEZpcnN0IHRpbWUgc2VlaW5nIHRoaXMgb3V0cHV0LCBhZGQgaXQgdG8gdGhlIGVuZCBvZiB0aGUgZ3JvdXBlZCBsaXN0XG4gICAgICAgICAgICAgICAgb3V0cHV0TG9va3VwW3RoaXMuY2FzZXNbbGFiZWxdXSA9IGdyb3VwZWRCeU91dHB1dC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZ3JvdXBlZEJ5T3V0cHV0LnB1c2goW3RoaXMuY2FzZXNbbGFiZWxdLCBbbGFiZWxdXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIHNlZW4gdGhpcyBleHByZXNzaW9uIGJlZm9yZSwgYWRkIHRoZSBsYWJlbCB0byB0aGF0IG91dHB1dCdzIGdyb3VwXG4gICAgICAgICAgICAgICAgZ3JvdXBlZEJ5T3V0cHV0W291dHB1dEluZGV4XVsxXS5wdXNoKGxhYmVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvZXJjZUxhYmVsID0gKGxhYmVsKSA9PiB0aGlzLmlucHV0VHlwZS5raW5kID09PSAnbnVtYmVyJyA/IE51bWJlcihsYWJlbCkgOiBsYWJlbDtcblxuICAgICAgICBmb3IgKGNvbnN0IFtvdXRwdXRJbmRleCwgbGFiZWxzXSBvZiBncm91cGVkQnlPdXRwdXQpIHtcbiAgICAgICAgICAgIGlmIChsYWJlbHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgLy8gT25seSBhIHNpbmdsZSBsYWJlbCBtYXRjaGVzIHRoaXMgb3V0cHV0IGV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkLnB1c2goY29lcmNlTGFiZWwobGFiZWxzWzBdKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEFycmF5IG9mIGxpdGVyYWwgbGFiZWxzIHBvaW50aW5nIHRvIHRoaXMgb3V0cHV0IGV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkLnB1c2gobGFiZWxzLm1hcChjb2VyY2VMYWJlbCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VyaWFsaXplZC5wdXNoKHRoaXMub3V0cHV0c1tvdXRwdXRJbmRleF0uc2VyaWFsaXplKCkpO1xuICAgICAgICB9XG4gICAgICAgIHNlcmlhbGl6ZWQucHVzaCh0aGlzLm90aGVyd2lzZS5zZXJpYWxpemUoKSk7XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVkO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTWF0Y2g7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB7Qm9vbGVhblR5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgUGFyc2luZ0NvbnRleHQgZnJvbSAnLi4vcGFyc2luZ19jb250ZXh0JztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25Db250ZXh0IGZyb20gJy4uL2V2YWx1YXRpb25fY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG50eXBlIEJyYW5jaGVzID0gQXJyYXk8W0V4cHJlc3Npb24sIEV4cHJlc3Npb25dPjtcblxuY2xhc3MgQ2FzZSBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG5cbiAgICBicmFuY2hlczogQnJhbmNoZXM7XG4gICAgb3RoZXJ3aXNlOiBFeHByZXNzaW9uO1xuXG4gICAgY29uc3RydWN0b3IodHlwZTogVHlwZSwgYnJhbmNoZXM6IEJyYW5jaGVzLCBvdGhlcndpc2U6IEV4cHJlc3Npb24pIHtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgdGhpcy5icmFuY2hlcyA9IGJyYW5jaGVzO1xuICAgICAgICB0aGlzLm90aGVyd2lzZSA9IG90aGVyd2lzZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcGFyc2UoYXJnczogJFJlYWRPbmx5QXJyYXk8bWl4ZWQ+LCBjb250ZXh0OiBQYXJzaW5nQ29udGV4dCkge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPCA0KVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIGF0IGxlYXN0IDMgYXJndW1lbnRzLCBidXQgZm91bmQgb25seSAke2FyZ3MubGVuZ3RoIC0gMX0uYCk7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCAlIDIgIT09IDApXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgYW4gb2RkIG51bWJlciBvZiBhcmd1bWVudHMuYCk7XG5cbiAgICAgICAgbGV0IG91dHB1dFR5cGU6ID9UeXBlO1xuICAgICAgICBpZiAoY29udGV4dC5leHBlY3RlZFR5cGUgJiYgY29udGV4dC5leHBlY3RlZFR5cGUua2luZCAhPT0gJ3ZhbHVlJykge1xuICAgICAgICAgICAgb3V0cHV0VHlwZSA9IGNvbnRleHQuZXhwZWN0ZWRUeXBlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnJhbmNoZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aCAtIDE7IGkgKz0gMikge1xuICAgICAgICAgICAgY29uc3QgdGVzdCA9IGNvbnRleHQucGFyc2UoYXJnc1tpXSwgaSwgQm9vbGVhblR5cGUpO1xuICAgICAgICAgICAgaWYgKCF0ZXN0KSByZXR1cm4gbnVsbDtcblxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5wYXJzZShhcmdzW2kgKyAxXSwgaSArIDEsIG91dHB1dFR5cGUpO1xuICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICBicmFuY2hlcy5wdXNoKFt0ZXN0LCByZXN1bHRdKTtcblxuICAgICAgICAgICAgb3V0cHV0VHlwZSA9IG91dHB1dFR5cGUgfHwgcmVzdWx0LnR5cGU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvdGhlcndpc2UgPSBjb250ZXh0LnBhcnNlKGFyZ3NbYXJncy5sZW5ndGggLSAxXSwgYXJncy5sZW5ndGggLSAxLCBvdXRwdXRUeXBlKTtcbiAgICAgICAgaWYgKCFvdGhlcndpc2UpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGFzc2VydChvdXRwdXRUeXBlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDYXNlKChvdXRwdXRUeXBlOiBhbnkpLCBicmFuY2hlcywgb3RoZXJ3aXNlKTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIGZvciAoY29uc3QgW3Rlc3QsIGV4cHJlc3Npb25dIG9mIHRoaXMuYnJhbmNoZXMpIHtcbiAgICAgICAgICAgIGlmICh0ZXN0LmV2YWx1YXRlKGN0eCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXhwcmVzc2lvbi5ldmFsdWF0ZShjdHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm90aGVyd2lzZS5ldmFsdWF0ZShjdHgpO1xuICAgIH1cblxuICAgIGVhY2hDaGlsZChmbjogKF86IEV4cHJlc3Npb24pID0+IHZvaWQpIHtcbiAgICAgICAgZm9yIChjb25zdCBbdGVzdCwgZXhwcmVzc2lvbl0gb2YgdGhpcy5icmFuY2hlcykge1xuICAgICAgICAgICAgZm4odGVzdCk7XG4gICAgICAgICAgICBmbihleHByZXNzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICBmbih0aGlzLm90aGVyd2lzZSk7XG4gICAgfVxuXG4gICAgb3V0cHV0RGVmaW5lZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnJhbmNoZXMuZXZlcnkoKFtfLCBvdXRdKSA9PiBvdXQub3V0cHV0RGVmaW5lZCgpKSAmJiB0aGlzLm90aGVyd2lzZS5vdXRwdXREZWZpbmVkKCk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkID0gW1wiY2FzZVwiXTtcbiAgICAgICAgdGhpcy5lYWNoQ2hpbGQoY2hpbGQgPT4geyBzZXJpYWxpemVkLnB1c2goY2hpbGQuc2VyaWFsaXplKCkpOyB9KTtcbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZWQ7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDYXNlO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtWYWx1ZVR5cGUsIE51bWJlclR5cGUsIFN0cmluZ1R5cGUsIGFycmF5LCB0b1N0cmluZywgaXNWYWxpZFR5cGUsIGlzVmFsaWROYXRpdmVUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgUnVudGltZUVycm9yIGZyb20gJy4uL3J1bnRpbWVfZXJyb3InO1xuaW1wb3J0IHt0eXBlT2Z9IGZyb20gJy4uL3ZhbHVlcyc7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uQ29udGV4dCBmcm9tICcuLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuY2xhc3MgU2xpY2UgaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuICAgIGlucHV0OiBFeHByZXNzaW9uO1xuICAgIGJlZ2luSW5kZXg6IEV4cHJlc3Npb247XG4gICAgZW5kSW5kZXg6ID9FeHByZXNzaW9uO1xuXG4gICAgY29uc3RydWN0b3IodHlwZTogVHlwZSwgaW5wdXQ6IEV4cHJlc3Npb24sIGJlZ2luSW5kZXg6IEV4cHJlc3Npb24sIGVuZEluZGV4PzogRXhwcmVzc2lvbikge1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuYmVnaW5JbmRleCA9IGJlZ2luSW5kZXg7XG4gICAgICAgIHRoaXMuZW5kSW5kZXggPSBlbmRJbmRleDtcblxuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZShhcmdzOiAkUmVhZE9ubHlBcnJheTxtaXhlZD4sIGNvbnRleHQ6IFBhcnNpbmdDb250ZXh0KSB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAyIHx8ICBhcmdzLmxlbmd0aCA+PSA1KSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgMyBvciA0IGFyZ3VtZW50cywgYnV0IGZvdW5kICR7YXJncy5sZW5ndGggLSAxfSBpbnN0ZWFkLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5wdXQgPSBjb250ZXh0LnBhcnNlKGFyZ3NbMV0sIDEsIFZhbHVlVHlwZSk7XG4gICAgICAgIGNvbnN0IGJlZ2luSW5kZXggPSBjb250ZXh0LnBhcnNlKGFyZ3NbMl0sIDIsIE51bWJlclR5cGUpO1xuXG4gICAgICAgIGlmICghaW5wdXQgfHwgIWJlZ2luSW5kZXgpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGlmICghaXNWYWxpZFR5cGUoaW5wdXQudHlwZSwgW2FycmF5KFZhbHVlVHlwZSksIFN0cmluZ1R5cGUsIFZhbHVlVHlwZV0pKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgZmlyc3QgYXJndW1lbnQgdG8gYmUgb2YgdHlwZSBhcnJheSBvciBzdHJpbmcsIGJ1dCBmb3VuZCAke3RvU3RyaW5nKGlucHV0LnR5cGUpfSBpbnN0ZWFkYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZEluZGV4ID0gY29udGV4dC5wYXJzZShhcmdzWzNdLCAzLCBOdW1iZXJUeXBlKTtcbiAgICAgICAgICAgIGlmICghZW5kSW5kZXgpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTbGljZShpbnB1dC50eXBlLCBpbnB1dCwgYmVnaW5JbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTbGljZShpbnB1dC50eXBlLCBpbnB1dCwgYmVnaW5JbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gKHRoaXMuaW5wdXQuZXZhbHVhdGUoY3R4KTogYW55KTtcbiAgICAgICAgY29uc3QgYmVnaW5JbmRleCA9ICh0aGlzLmJlZ2luSW5kZXguZXZhbHVhdGUoY3R4KTogbnVtYmVyKTtcblxuICAgICAgICBpZiAoIWlzVmFsaWROYXRpdmVUeXBlKGlucHV0LCBbJ3N0cmluZycsICdhcnJheSddKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihgRXhwZWN0ZWQgZmlyc3QgYXJndW1lbnQgdG8gYmUgb2YgdHlwZSBhcnJheSBvciBzdHJpbmcsIGJ1dCBmb3VuZCAke3RvU3RyaW5nKHR5cGVPZihpbnB1dCkpfSBpbnN0ZWFkLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZW5kSW5kZXgpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZEluZGV4ID0gKHRoaXMuZW5kSW5kZXguZXZhbHVhdGUoY3R4KTogbnVtYmVyKTtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dC5zbGljZShiZWdpbkluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaW5wdXQuc2xpY2UoYmVnaW5JbmRleCk7XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoXzogRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICBmbih0aGlzLmlucHV0KTtcbiAgICAgICAgZm4odGhpcy5iZWdpbkluZGV4KTtcbiAgICAgICAgaWYgKHRoaXMuZW5kSW5kZXgpIHtcbiAgICAgICAgICAgIGZuKHRoaXMuZW5kSW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb3V0cHV0RGVmaW5lZCgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZW5kSW5kZXggIT0gbnVsbCAmJiB0aGlzLmVuZEluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZEluZGV4ID0gdGhpcy5lbmRJbmRleC5zZXJpYWxpemUoKTtcbiAgICAgICAgICAgIHJldHVybiBbXCJzbGljZVwiLCB0aGlzLmlucHV0LnNlcmlhbGl6ZSgpLCB0aGlzLmJlZ2luSW5kZXguc2VyaWFsaXplKCksIGVuZEluZGV4XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1wic2xpY2VcIiwgdGhpcy5pbnB1dC5zZXJpYWxpemUoKSwgdGhpcy5iZWdpbkluZGV4LnNlcmlhbGl6ZSgpXTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNsaWNlO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHt0b1N0cmluZywgVmFsdWVUeXBlLCBCb29sZWFuVHlwZSwgQ29sbGF0b3JUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgQXNzZXJ0aW9uIGZyb20gJy4vYXNzZXJ0aW9uJztcbmltcG9ydCB7dHlwZU9mfSBmcm9tICcuLi92YWx1ZXMnO1xuaW1wb3J0IFJ1bnRpbWVFcnJvciBmcm9tICcuLi9ydW50aW1lX2Vycm9yJztcblxuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG50eXBlIENvbXBhcmlzb25PcGVyYXRvciA9ICc9PScgfCAnIT0nIHwgJzwnIHwgJz4nIHwgJzw9JyB8ICc+PScgO1xuXG5mdW5jdGlvbiBpc0NvbXBhcmFibGVUeXBlKG9wOiBDb21wYXJpc29uT3BlcmF0b3IsIHR5cGU6IFR5cGUpIHtcbiAgICBpZiAob3AgPT09ICc9PScgfHwgb3AgPT09ICchPScpIHtcbiAgICAgICAgLy8gZXF1YWxpdHkgb3BlcmF0b3JcbiAgICAgICAgcmV0dXJuIHR5cGUua2luZCA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgICAgICAgICB0eXBlLmtpbmQgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICAgICB0eXBlLmtpbmQgPT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICB0eXBlLmtpbmQgPT09ICdudWxsJyB8fFxuICAgICAgICAgICAgdHlwZS5raW5kID09PSAndmFsdWUnO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG9yZGVyaW5nIG9wZXJhdG9yXG4gICAgICAgIHJldHVybiB0eXBlLmtpbmQgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICAgICB0eXBlLmtpbmQgPT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICB0eXBlLmtpbmQgPT09ICd2YWx1ZSc7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBlcShjdHgsIGEsIGIpIHsgcmV0dXJuIGEgPT09IGI7IH1cbmZ1bmN0aW9uIG5lcShjdHgsIGEsIGIpIHsgcmV0dXJuIGEgIT09IGI7IH1cbmZ1bmN0aW9uIGx0KGN0eCwgYSwgYikgeyByZXR1cm4gYSA8IGI7IH1cbmZ1bmN0aW9uIGd0KGN0eCwgYSwgYikgeyByZXR1cm4gYSA+IGI7IH1cbmZ1bmN0aW9uIGx0ZXEoY3R4LCBhLCBiKSB7IHJldHVybiBhIDw9IGI7IH1cbmZ1bmN0aW9uIGd0ZXEoY3R4LCBhLCBiKSB7IHJldHVybiBhID49IGI7IH1cblxuZnVuY3Rpb24gZXFDb2xsYXRlKGN0eCwgYSwgYiwgYykgeyByZXR1cm4gYy5jb21wYXJlKGEsIGIpID09PSAwOyB9XG5mdW5jdGlvbiBuZXFDb2xsYXRlKGN0eCwgYSwgYiwgYykgeyByZXR1cm4gIWVxQ29sbGF0ZShjdHgsIGEsIGIsIGMpOyB9XG5mdW5jdGlvbiBsdENvbGxhdGUoY3R4LCBhLCBiLCBjKSB7IHJldHVybiBjLmNvbXBhcmUoYSwgYikgPCAwOyB9XG5mdW5jdGlvbiBndENvbGxhdGUoY3R4LCBhLCBiLCBjKSB7IHJldHVybiBjLmNvbXBhcmUoYSwgYikgPiAwOyB9XG5mdW5jdGlvbiBsdGVxQ29sbGF0ZShjdHgsIGEsIGIsIGMpIHsgcmV0dXJuIGMuY29tcGFyZShhLCBiKSA8PSAwOyB9XG5mdW5jdGlvbiBndGVxQ29sbGF0ZShjdHgsIGEsIGIsIGMpIHsgcmV0dXJuIGMuY29tcGFyZShhLCBiKSA+PSAwOyB9XG5cbi8qKlxuICogU3BlY2lhbCBmb3JtIGZvciBjb21wYXJpc29uIG9wZXJhdG9ycywgaW1wbGVtZW50aW5nIHRoZSBzaWduYXR1cmVzOlxuICogLSAoVCwgVCwgP0NvbGxhdG9yKSA9PiBib29sZWFuXG4gKiAtIChULCB2YWx1ZSwgP0NvbGxhdG9yKSA9PiBib29sZWFuXG4gKiAtICh2YWx1ZSwgVCwgP0NvbGxhdG9yKSA9PiBib29sZWFuXG4gKlxuICogRm9yIGluZXF1YWxpdGllcywgVCBtdXN0IGJlIGVpdGhlciB2YWx1ZSwgc3RyaW5nLCBvciBudW1iZXIuIEZvciA9PS8hPSwgaXRcbiAqIGNhbiBhbHNvIGJlIGJvb2xlYW4gb3IgbnVsbC5cbiAqXG4gKiBFcXVhbGl0eSBzZW1hbnRpY3MgYXJlIGVxdWl2YWxlbnQgdG8gSmF2YXNjcmlwdCdzIHN0cmljdCBlcXVhbGl0eSAoPT09LyE9PSlcbiAqIC0tIGkuZS4sIHdoZW4gdGhlIGFyZ3VtZW50cycgdHlwZXMgZG9uJ3QgbWF0Y2gsID09IGV2YWx1YXRlcyB0byBmYWxzZSwgIT0gdG9cbiAqIHRydWUuXG4gKlxuICogV2hlbiB0eXBlcyBkb24ndCBtYXRjaCBpbiBhbiBvcmRlcmluZyBjb21wYXJpc29uLCBhIHJ1bnRpbWUgZXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIG1ha2VDb21wYXJpc29uKG9wOiBDb21wYXJpc29uT3BlcmF0b3IsIGNvbXBhcmVCYXNpYywgY29tcGFyZVdpdGhDb2xsYXRvcikge1xuICAgIGNvbnN0IGlzT3JkZXJDb21wYXJpc29uID0gb3AgIT09ICc9PScgJiYgb3AgIT09ICchPSc7XG5cbiAgICByZXR1cm4gY2xhc3MgQ29tcGFyaXNvbiBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgICAgICB0eXBlOiBUeXBlO1xuICAgICAgICBsaHM6IEV4cHJlc3Npb247XG4gICAgICAgIHJoczogRXhwcmVzc2lvbjtcbiAgICAgICAgY29sbGF0b3I6ID9FeHByZXNzaW9uO1xuICAgICAgICBoYXNVbnR5cGVkQXJndW1lbnQ6IGJvb2xlYW47XG5cbiAgICAgICAgY29uc3RydWN0b3IobGhzOiBFeHByZXNzaW9uLCByaHM6IEV4cHJlc3Npb24sIGNvbGxhdG9yOiA/RXhwcmVzc2lvbikge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gQm9vbGVhblR5cGU7XG4gICAgICAgICAgICB0aGlzLmxocyA9IGxocztcbiAgICAgICAgICAgIHRoaXMucmhzID0gcmhzO1xuICAgICAgICAgICAgdGhpcy5jb2xsYXRvciA9IGNvbGxhdG9yO1xuICAgICAgICAgICAgdGhpcy5oYXNVbnR5cGVkQXJndW1lbnQgPSBsaHMudHlwZS5raW5kID09PSAndmFsdWUnIHx8IHJocy50eXBlLmtpbmQgPT09ICd2YWx1ZSc7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0aWMgcGFyc2UoYXJnczogJFJlYWRPbmx5QXJyYXk8bWl4ZWQ+LCBjb250ZXh0OiBQYXJzaW5nQ29udGV4dCk6ID9FeHByZXNzaW9uIHtcbiAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMyAmJiBhcmdzLmxlbmd0aCAhPT0gNClcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgdHdvIG9yIHRocmVlIGFyZ3VtZW50cy5gKTtcblxuICAgICAgICAgICAgY29uc3Qgb3A6IENvbXBhcmlzb25PcGVyYXRvciA9IChhcmdzWzBdOiBhbnkpO1xuXG4gICAgICAgICAgICBsZXQgbGhzID0gY29udGV4dC5wYXJzZShhcmdzWzFdLCAxLCBWYWx1ZVR5cGUpO1xuICAgICAgICAgICAgaWYgKCFsaHMpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgaWYgKCFpc0NvbXBhcmFibGVUeXBlKG9wLCBsaHMudHlwZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5jb25jYXQoMSkuZXJyb3IoYFwiJHtvcH1cIiBjb21wYXJpc29ucyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgdHlwZSAnJHt0b1N0cmluZyhsaHMudHlwZSl9Jy5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCByaHMgPSBjb250ZXh0LnBhcnNlKGFyZ3NbMl0sIDIsIFZhbHVlVHlwZSk7XG4gICAgICAgICAgICBpZiAoIXJocykgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBpZiAoIWlzQ29tcGFyYWJsZVR5cGUob3AsIHJocy50eXBlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNvbmNhdCgyKS5lcnJvcihgXCIke29wfVwiIGNvbXBhcmlzb25zIGFyZSBub3Qgc3VwcG9ydGVkIGZvciB0eXBlICcke3RvU3RyaW5nKHJocy50eXBlKX0nLmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgbGhzLnR5cGUua2luZCAhPT0gcmhzLnR5cGUua2luZCAmJlxuICAgICAgICAgICAgICAgIGxocy50eXBlLmtpbmQgIT09ICd2YWx1ZScgJiZcbiAgICAgICAgICAgICAgICByaHMudHlwZS5raW5kICE9PSAndmFsdWUnXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgQ2Fubm90IGNvbXBhcmUgdHlwZXMgJyR7dG9TdHJpbmcobGhzLnR5cGUpfScgYW5kICcke3RvU3RyaW5nKHJocy50eXBlKX0nLmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXNPcmRlckNvbXBhcmlzb24pIHtcbiAgICAgICAgICAgICAgICAvLyB0eXBpbmcgcnVsZXMgc3BlY2lmaWMgdG8gbGVzcy9ncmVhdGVyIHRoYW4gb3BlcmF0b3JzXG4gICAgICAgICAgICAgICAgaWYgKGxocy50eXBlLmtpbmQgPT09ICd2YWx1ZScgJiYgcmhzLnR5cGUua2luZCAhPT0gJ3ZhbHVlJykge1xuICAgICAgICAgICAgICAgICAgICAvLyAodmFsdWUsIFQpXG4gICAgICAgICAgICAgICAgICAgIGxocyA9IG5ldyBBc3NlcnRpb24ocmhzLnR5cGUsIFtsaHNdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxocy50eXBlLmtpbmQgIT09ICd2YWx1ZScgJiYgcmhzLnR5cGUua2luZCA9PT0gJ3ZhbHVlJykge1xuICAgICAgICAgICAgICAgICAgICAvLyAoVCwgdmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIHJocyA9IG5ldyBBc3NlcnRpb24obGhzLnR5cGUsIFtyaHNdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBjb2xsYXRvciA9IG51bGw7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGxocy50eXBlLmtpbmQgIT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgIHJocy50eXBlLmtpbmQgIT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgIGxocy50eXBlLmtpbmQgIT09ICd2YWx1ZScgJiZcbiAgICAgICAgICAgICAgICAgICAgcmhzLnR5cGUua2luZCAhPT0gJ3ZhbHVlJ1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgQ2Fubm90IHVzZSBjb2xsYXRvciB0byBjb21wYXJlIG5vbi1zdHJpbmcgdHlwZXMuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbGxhdG9yID0gY29udGV4dC5wYXJzZShhcmdzWzNdLCAzLCBDb2xsYXRvclR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICghY29sbGF0b3IpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb24obGhzLCByaHMsIGNvbGxhdG9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2YWx1YXRlKGN0eDogRXZhbHVhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxocyA9IHRoaXMubGhzLmV2YWx1YXRlKGN0eCk7XG4gICAgICAgICAgICBjb25zdCByaHMgPSB0aGlzLnJocy5ldmFsdWF0ZShjdHgpO1xuXG4gICAgICAgICAgICBpZiAoaXNPcmRlckNvbXBhcmlzb24gJiYgdGhpcy5oYXNVbnR5cGVkQXJndW1lbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsdCA9IHR5cGVPZihsaHMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJ0ID0gdHlwZU9mKHJocyk7XG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgdGhhdCB0eXBlIGlzIHN0cmluZyBvciBudW1iZXIsIGFuZCBlcXVhbFxuICAgICAgICAgICAgICAgIGlmIChsdC5raW5kICE9PSBydC5raW5kIHx8ICEobHQua2luZCA9PT0gJ3N0cmluZycgfHwgbHQua2luZCA9PT0gJ251bWJlcicpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoYEV4cGVjdGVkIGFyZ3VtZW50cyBmb3IgXCIke29wfVwiIHRvIGJlIChzdHJpbmcsIHN0cmluZykgb3IgKG51bWJlciwgbnVtYmVyKSwgYnV0IGZvdW5kICgke2x0LmtpbmR9LCAke3J0LmtpbmR9KSBpbnN0ZWFkLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuY29sbGF0b3IgJiYgIWlzT3JkZXJDb21wYXJpc29uICYmIHRoaXMuaGFzVW50eXBlZEFyZ3VtZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbHQgPSB0eXBlT2YobGhzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBydCA9IHR5cGVPZihyaHMpO1xuICAgICAgICAgICAgICAgIGlmIChsdC5raW5kICE9PSAnc3RyaW5nJyB8fCBydC5raW5kICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tcGFyZUJhc2ljKGN0eCwgbGhzLCByaHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sbGF0b3IgP1xuICAgICAgICAgICAgICAgIGNvbXBhcmVXaXRoQ29sbGF0b3IoY3R4LCBsaHMsIHJocywgdGhpcy5jb2xsYXRvci5ldmFsdWF0ZShjdHgpKSA6XG4gICAgICAgICAgICAgICAgY29tcGFyZUJhc2ljKGN0eCwgbGhzLCByaHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgZWFjaENoaWxkKGZuOiAoXzogRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICAgICAgZm4odGhpcy5saHMpO1xuICAgICAgICAgICAgZm4odGhpcy5yaHMpO1xuICAgICAgICAgICAgaWYgKHRoaXMuY29sbGF0b3IpIHtcbiAgICAgICAgICAgICAgICBmbih0aGlzLmNvbGxhdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG91dHB1dERlZmluZWQoKTogYm9vbGVhbiB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBbb3BdO1xuICAgICAgICAgICAgdGhpcy5lYWNoQ2hpbGQoY2hpbGQgPT4geyBzZXJpYWxpemVkLnB1c2goY2hpbGQuc2VyaWFsaXplKCkpOyB9KTtcbiAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVkO1xuICAgICAgICB9XG4gICAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IEVxdWFscyA9IG1ha2VDb21wYXJpc29uKCc9PScsIGVxLCBlcUNvbGxhdGUpO1xuZXhwb3J0IGNvbnN0IE5vdEVxdWFscyA9IG1ha2VDb21wYXJpc29uKCchPScsIG5lcSwgbmVxQ29sbGF0ZSk7XG5leHBvcnQgY29uc3QgTGVzc1RoYW4gPSBtYWtlQ29tcGFyaXNvbignPCcsIGx0LCBsdENvbGxhdGUpO1xuZXhwb3J0IGNvbnN0IEdyZWF0ZXJUaGFuID0gbWFrZUNvbXBhcmlzb24oJz4nLCBndCwgZ3RDb2xsYXRlKTtcbmV4cG9ydCBjb25zdCBMZXNzVGhhbk9yRXF1YWwgPSBtYWtlQ29tcGFyaXNvbignPD0nLCBsdGVxLCBsdGVxQ29sbGF0ZSk7XG5leHBvcnQgY29uc3QgR3JlYXRlclRoYW5PckVxdWFsID0gbWFrZUNvbXBhcmlzb24oJz49JywgZ3RlcSwgZ3RlcUNvbGxhdGUpO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtTdHJpbmdUeXBlLCBOdW1iZXJUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25Db250ZXh0IGZyb20gJy4uL2V2YWx1YXRpb25fY29udGV4dCc7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuZGVjbGFyZSB2YXIgSW50bDoge1xuICAgIE51bWJlckZvcm1hdDogQ2xhc3M8SW50bCROdW1iZXJGb3JtYXQ+XG59O1xuXG5kZWNsYXJlIGNsYXNzIEludGwkTnVtYmVyRm9ybWF0IHtcbiAgICBjb25zdHJ1Y3RvciAoXG4gICAgICAgIGxvY2FsZXM/OiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgICAgICAgb3B0aW9ucz86IE51bWJlckZvcm1hdE9wdGlvbnNcbiAgICApOiBJbnRsJE51bWJlckZvcm1hdDtcblxuICAgIHN0YXRpYyAoXG4gICAgICAgIGxvY2FsZXM/OiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgICAgICAgb3B0aW9ucz86IE51bWJlckZvcm1hdE9wdGlvbnNcbiAgICApOiBJbnRsJE51bWJlckZvcm1hdDtcblxuICAgIGZvcm1hdChhOiBudW1iZXIpOiBzdHJpbmc7XG5cbiAgICByZXNvbHZlZE9wdGlvbnMoKTogYW55O1xufVxuXG50eXBlIE51bWJlckZvcm1hdE9wdGlvbnMgPSB7XG4gICAgc3R5bGU/OiAnZGVjaW1hbCcgfCAnY3VycmVuY3knIHwgJ3BlcmNlbnQnO1xuICAgIGN1cnJlbmN5PzogbnVsbCB8IHN0cmluZztcbiAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM/OiBudWxsIHwgc3RyaW5nO1xuICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0cz86IG51bGwgfCBzdHJpbmc7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOdW1iZXJGb3JtYXQgaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuICAgIG51bWJlcjogRXhwcmVzc2lvbjtcbiAgICBsb2NhbGU6IEV4cHJlc3Npb24gfCBudWxsOyAgIC8vIEJDUCA0NyBsYW5ndWFnZSB0YWdcbiAgICBjdXJyZW5jeTogRXhwcmVzc2lvbiB8IG51bGw7IC8vIElTTyA0MjE3IGN1cnJlbmN5IGNvZGUsIHJlcXVpcmVkIGlmIHN0eWxlPWN1cnJlbmN5XG4gICAgbWluRnJhY3Rpb25EaWdpdHM6IEV4cHJlc3Npb24gfCBudWxsOyAvLyBEZWZhdWx0IDBcbiAgICBtYXhGcmFjdGlvbkRpZ2l0czogRXhwcmVzc2lvbiB8IG51bGw7IC8vIERlZmF1bHQgM1xuXG4gICAgY29uc3RydWN0b3IobnVtYmVyOiBFeHByZXNzaW9uLFxuICAgICAgICAgICAgICAgIGxvY2FsZTogRXhwcmVzc2lvbiB8IG51bGwsXG4gICAgICAgICAgICAgICAgY3VycmVuY3k6IEV4cHJlc3Npb24gfCBudWxsLFxuICAgICAgICAgICAgICAgIG1pbkZyYWN0aW9uRGlnaXRzOiBFeHByZXNzaW9uIHwgbnVsbCxcbiAgICAgICAgICAgICAgICBtYXhGcmFjdGlvbkRpZ2l0czogRXhwcmVzc2lvbiB8IG51bGwpIHtcbiAgICAgICAgdGhpcy50eXBlID0gU3RyaW5nVHlwZTtcbiAgICAgICAgdGhpcy5udW1iZXIgPSBudW1iZXI7XG4gICAgICAgIHRoaXMubG9jYWxlID0gbG9jYWxlO1xuICAgICAgICB0aGlzLmN1cnJlbmN5ID0gY3VycmVuY3k7XG4gICAgICAgIHRoaXMubWluRnJhY3Rpb25EaWdpdHMgPSBtaW5GcmFjdGlvbkRpZ2l0cztcbiAgICAgICAgdGhpcy5tYXhGcmFjdGlvbkRpZ2l0cyA9IG1heEZyYWN0aW9uRGlnaXRzO1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZShhcmdzOiAkUmVhZE9ubHlBcnJheTxtaXhlZD4sIGNvbnRleHQ6IFBhcnNpbmdDb250ZXh0KTogP0V4cHJlc3Npb24ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggIT09IDMpXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgdHdvIGFyZ3VtZW50cy5gKTtcblxuICAgICAgICBjb25zdCBudW1iZXIgPSBjb250ZXh0LnBhcnNlKGFyZ3NbMV0sIDEsIE51bWJlclR5cGUpO1xuICAgICAgICBpZiAoIW51bWJlcikgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IChhcmdzWzJdOiBhbnkpO1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShvcHRpb25zKSlcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBOdW1iZXJGb3JtYXQgb3B0aW9ucyBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdC5gKTtcblxuICAgICAgICBsZXQgbG9jYWxlID0gbnVsbDtcbiAgICAgICAgaWYgKG9wdGlvbnNbJ2xvY2FsZSddKSB7XG4gICAgICAgICAgICBsb2NhbGUgPSBjb250ZXh0LnBhcnNlKG9wdGlvbnNbJ2xvY2FsZSddLCAxLCBTdHJpbmdUeXBlKTtcbiAgICAgICAgICAgIGlmICghbG9jYWxlKSByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjdXJyZW5jeSA9IG51bGw7XG4gICAgICAgIGlmIChvcHRpb25zWydjdXJyZW5jeSddKSB7XG4gICAgICAgICAgICBjdXJyZW5jeSA9IGNvbnRleHQucGFyc2Uob3B0aW9uc1snY3VycmVuY3knXSwgMSwgU3RyaW5nVHlwZSk7XG4gICAgICAgICAgICBpZiAoIWN1cnJlbmN5KSByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBtaW5GcmFjdGlvbkRpZ2l0cyA9IG51bGw7XG4gICAgICAgIGlmIChvcHRpb25zWydtaW4tZnJhY3Rpb24tZGlnaXRzJ10pIHtcbiAgICAgICAgICAgIG1pbkZyYWN0aW9uRGlnaXRzID0gY29udGV4dC5wYXJzZShvcHRpb25zWydtaW4tZnJhY3Rpb24tZGlnaXRzJ10sIDEsIE51bWJlclR5cGUpO1xuICAgICAgICAgICAgaWYgKCFtaW5GcmFjdGlvbkRpZ2l0cykgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbWF4RnJhY3Rpb25EaWdpdHMgPSBudWxsO1xuICAgICAgICBpZiAob3B0aW9uc1snbWF4LWZyYWN0aW9uLWRpZ2l0cyddKSB7XG4gICAgICAgICAgICBtYXhGcmFjdGlvbkRpZ2l0cyA9IGNvbnRleHQucGFyc2Uob3B0aW9uc1snbWF4LWZyYWN0aW9uLWRpZ2l0cyddLCAxLCBOdW1iZXJUeXBlKTtcbiAgICAgICAgICAgIGlmICghbWF4RnJhY3Rpb25EaWdpdHMpIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBOdW1iZXJGb3JtYXQobnVtYmVyLCBsb2NhbGUsIGN1cnJlbmN5LCBtaW5GcmFjdGlvbkRpZ2l0cywgbWF4RnJhY3Rpb25EaWdpdHMpO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGN0eDogRXZhbHVhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnRsLk51bWJlckZvcm1hdCh0aGlzLmxvY2FsZSA/IHRoaXMubG9jYWxlLmV2YWx1YXRlKGN0eCkgOiBbXSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdHlsZTogdGhpcy5jdXJyZW5jeSA/IFwiY3VycmVuY3lcIiA6IFwiZGVjaW1hbFwiLFxuICAgICAgICAgICAgICAgIGN1cnJlbmN5OiB0aGlzLmN1cnJlbmN5ID8gdGhpcy5jdXJyZW5jeS5ldmFsdWF0ZShjdHgpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogdGhpcy5taW5GcmFjdGlvbkRpZ2l0cyA/IHRoaXMubWluRnJhY3Rpb25EaWdpdHMuZXZhbHVhdGUoY3R4KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IHRoaXMubWF4RnJhY3Rpb25EaWdpdHMgPyB0aGlzLm1heEZyYWN0aW9uRGlnaXRzLmV2YWx1YXRlKGN0eCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9KS5mb3JtYXQodGhpcy5udW1iZXIuZXZhbHVhdGUoY3R4KSk7XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoXzogRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICBmbih0aGlzLm51bWJlcik7XG4gICAgICAgIGlmICh0aGlzLmxvY2FsZSkge1xuICAgICAgICAgICAgZm4odGhpcy5sb2NhbGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbmN5KSB7XG4gICAgICAgICAgICBmbih0aGlzLmN1cnJlbmN5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5taW5GcmFjdGlvbkRpZ2l0cykge1xuICAgICAgICAgICAgZm4odGhpcy5taW5GcmFjdGlvbkRpZ2l0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWF4RnJhY3Rpb25EaWdpdHMpIHtcbiAgICAgICAgICAgIGZuKHRoaXMubWF4RnJhY3Rpb25EaWdpdHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb3V0cHV0RGVmaW5lZCgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuICAgICAgICBpZiAodGhpcy5sb2NhbGUpIHtcbiAgICAgICAgICAgIG9wdGlvbnNbJ2xvY2FsZSddID0gdGhpcy5sb2NhbGUuc2VyaWFsaXplKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY3VycmVuY3kpIHtcbiAgICAgICAgICAgIG9wdGlvbnNbJ2N1cnJlbmN5J10gPSB0aGlzLmN1cnJlbmN5LnNlcmlhbGl6ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1pbkZyYWN0aW9uRGlnaXRzKSB7XG4gICAgICAgICAgICBvcHRpb25zWydtaW4tZnJhY3Rpb24tZGlnaXRzJ10gPSB0aGlzLm1pbkZyYWN0aW9uRGlnaXRzLnNlcmlhbGl6ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1heEZyYWN0aW9uRGlnaXRzKSB7XG4gICAgICAgICAgICBvcHRpb25zWydtYXgtZnJhY3Rpb24tZGlnaXRzJ10gPSB0aGlzLm1heEZyYWN0aW9uRGlnaXRzLnNlcmlhbGl6ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXCJudW1iZXItZm9ybWF0XCIsIHRoaXMubnVtYmVyLnNlcmlhbGl6ZSgpLCBvcHRpb25zXTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge051bWJlclR5cGUsIHRvU3RyaW5nfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7dHlwZU9mfSBmcm9tICcuLi92YWx1ZXMnO1xuaW1wb3J0IFJ1bnRpbWVFcnJvciBmcm9tICcuLi9ydW50aW1lX2Vycm9yJztcblxuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgUGFyc2luZ0NvbnRleHQgZnJvbSAnLi4vcGFyc2luZ19jb250ZXh0JztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25Db250ZXh0IGZyb20gJy4uL2V2YWx1YXRpb25fY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5jbGFzcyBMZW5ndGggaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuICAgIGlucHV0OiBFeHByZXNzaW9uO1xuXG4gICAgY29uc3RydWN0b3IoaW5wdXQ6IEV4cHJlc3Npb24pIHtcbiAgICAgICAgdGhpcy50eXBlID0gTnVtYmVyVHlwZTtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZShhcmdzOiAkUmVhZE9ubHlBcnJheTxtaXhlZD4sIGNvbnRleHQ6IFBhcnNpbmdDb250ZXh0KSB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMilcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCAxIGFyZ3VtZW50LCBidXQgZm91bmQgJHthcmdzLmxlbmd0aCAtIDF9IGluc3RlYWQuYCk7XG5cbiAgICAgICAgY29uc3QgaW5wdXQgPSBjb250ZXh0LnBhcnNlKGFyZ3NbMV0sIDEpO1xuICAgICAgICBpZiAoIWlucHV0KSByZXR1cm4gbnVsbDtcblxuICAgICAgICBpZiAoaW5wdXQudHlwZS5raW5kICE9PSAnYXJyYXknICYmIGlucHV0LnR5cGUua2luZCAhPT0gJ3N0cmluZycgJiYgaW5wdXQudHlwZS5raW5kICE9PSAndmFsdWUnKVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIGFyZ3VtZW50IG9mIHR5cGUgc3RyaW5nIG9yIGFycmF5LCBidXQgZm91bmQgJHt0b1N0cmluZyhpbnB1dC50eXBlKX0gaW5zdGVhZC5gKTtcblxuICAgICAgICByZXR1cm4gbmV3IExlbmd0aChpbnB1dCk7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoY3R4OiBFdmFsdWF0aW9uQ29udGV4dCkge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuaW5wdXQuZXZhbHVhdGUoY3R4KTtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dC5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dC5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKGBFeHBlY3RlZCB2YWx1ZSB0byBiZSBvZiB0eXBlIHN0cmluZyBvciBhcnJheSwgYnV0IGZvdW5kICR7dG9TdHJpbmcodHlwZU9mKGlucHV0KSl9IGluc3RlYWQuYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlYWNoQ2hpbGQoZm46IChfOiBFeHByZXNzaW9uKSA9PiB2b2lkKSB7XG4gICAgICAgIGZuKHRoaXMuaW5wdXQpO1xuICAgIH1cblxuICAgIG91dHB1dERlZmluZWQoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBbXCJsZW5ndGhcIl07XG4gICAgICAgIHRoaXMuZWFjaENoaWxkKGNoaWxkID0+IHsgc2VyaWFsaXplZC5wdXNoKGNoaWxkLnNlcmlhbGl6ZSgpKTsgfSk7XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVkO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGVuZ3RoO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtcbiAgICB0eXBlIFR5cGUsXG4gICAgTnVtYmVyVHlwZSxcbiAgICBTdHJpbmdUeXBlLFxuICAgIEJvb2xlYW5UeXBlLFxuICAgIENvbG9yVHlwZSxcbiAgICBPYmplY3RUeXBlLFxuICAgIFZhbHVlVHlwZSxcbiAgICBFcnJvclR5cGUsXG4gICAgQ29sbGF0b3JUeXBlLFxuICAgIGFycmF5LFxuICAgIHRvU3RyaW5nIGFzIHR5cGVUb1N0cmluZ1xufSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7dHlwZU9mLCBDb2xvciwgdmFsaWRhdGVSR0JBLCB0b1N0cmluZyBhcyB2YWx1ZVRvU3RyaW5nfSBmcm9tICcuLi92YWx1ZXMnO1xuaW1wb3J0IENvbXBvdW5kRXhwcmVzc2lvbiBmcm9tICcuLi9jb21wb3VuZF9leHByZXNzaW9uJztcbmltcG9ydCBSdW50aW1lRXJyb3IgZnJvbSAnLi4vcnVudGltZV9lcnJvcic7XG5pbXBvcnQgTGV0IGZyb20gJy4vbGV0JztcbmltcG9ydCBWYXIgZnJvbSAnLi92YXInO1xuaW1wb3J0IExpdGVyYWwgZnJvbSAnLi9saXRlcmFsJztcbmltcG9ydCBBc3NlcnRpb24gZnJvbSAnLi9hc3NlcnRpb24nO1xuaW1wb3J0IENvZXJjaW9uIGZyb20gJy4vY29lcmNpb24nO1xuaW1wb3J0IEF0IGZyb20gJy4vYXQnO1xuaW1wb3J0IEluIGZyb20gJy4vaW4nO1xuaW1wb3J0IEluZGV4T2YgZnJvbSAnLi9pbmRleF9vZic7XG5pbXBvcnQgTWF0Y2ggZnJvbSAnLi9tYXRjaCc7XG5pbXBvcnQgQ2FzZSBmcm9tICcuL2Nhc2UnO1xuaW1wb3J0IFNsaWNlIGZyb20gJy4vc2xpY2UnO1xuaW1wb3J0IFN0ZXAgZnJvbSAnLi9zdGVwJztcbmltcG9ydCBJbnRlcnBvbGF0ZSBmcm9tICcuL2ludGVycG9sYXRlJztcbmltcG9ydCBDb2FsZXNjZSBmcm9tICcuL2NvYWxlc2NlJztcbmltcG9ydCB7XG4gICAgRXF1YWxzLFxuICAgIE5vdEVxdWFscyxcbiAgICBMZXNzVGhhbixcbiAgICBHcmVhdGVyVGhhbixcbiAgICBMZXNzVGhhbk9yRXF1YWwsXG4gICAgR3JlYXRlclRoYW5PckVxdWFsXG59IGZyb20gJy4vY29tcGFyaXNvbic7XG5pbXBvcnQgQ29sbGF0b3JFeHByZXNzaW9uIGZyb20gJy4vY29sbGF0b3InO1xuaW1wb3J0IE51bWJlckZvcm1hdCBmcm9tICcuL251bWJlcl9mb3JtYXQnO1xuaW1wb3J0IEZvcm1hdEV4cHJlc3Npb24gZnJvbSAnLi9mb3JtYXQnO1xuaW1wb3J0IEltYWdlRXhwcmVzc2lvbiBmcm9tICcuL2ltYWdlJztcbmltcG9ydCBMZW5ndGggZnJvbSAnLi9sZW5ndGgnO1xuaW1wb3J0IFdpdGhpbiBmcm9tICcuL3dpdGhpbic7XG5cbmltcG9ydCB0eXBlIHtWYXJhcmdzfSBmcm9tICcuLi9jb21wb3VuZF9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIHtFeHByZXNzaW9uUmVnaXN0cnl9IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuXG5jb25zdCBleHByZXNzaW9uczogRXhwcmVzc2lvblJlZ2lzdHJ5ID0ge1xuICAgIC8vIHNwZWNpYWwgZm9ybXNcbiAgICAnPT0nOiBFcXVhbHMsXG4gICAgJyE9JzogTm90RXF1YWxzLFxuICAgICc+JzogR3JlYXRlclRoYW4sXG4gICAgJzwnOiBMZXNzVGhhbixcbiAgICAnPj0nOiBHcmVhdGVyVGhhbk9yRXF1YWwsXG4gICAgJzw9JzogTGVzc1RoYW5PckVxdWFsLFxuICAgICdhcnJheSc6IEFzc2VydGlvbixcbiAgICAnYXQnOiBBdCxcbiAgICAnYm9vbGVhbic6IEFzc2VydGlvbixcbiAgICAnY2FzZSc6IENhc2UsXG4gICAgJ2NvYWxlc2NlJzogQ29hbGVzY2UsXG4gICAgJ2NvbGxhdG9yJzogQ29sbGF0b3JFeHByZXNzaW9uLFxuICAgICdmb3JtYXQnOiBGb3JtYXRFeHByZXNzaW9uLFxuICAgICdpbWFnZSc6IEltYWdlRXhwcmVzc2lvbixcbiAgICAnaW4nOiBJbixcbiAgICAnaW5kZXgtb2YnOiBJbmRleE9mLFxuICAgICdpbnRlcnBvbGF0ZSc6IEludGVycG9sYXRlLFxuICAgICdpbnRlcnBvbGF0ZS1oY2wnOiBJbnRlcnBvbGF0ZSxcbiAgICAnaW50ZXJwb2xhdGUtbGFiJzogSW50ZXJwb2xhdGUsXG4gICAgJ2xlbmd0aCc6IExlbmd0aCxcbiAgICAnbGV0JzogTGV0LFxuICAgICdsaXRlcmFsJzogTGl0ZXJhbCxcbiAgICAnbWF0Y2gnOiBNYXRjaCxcbiAgICAnbnVtYmVyJzogQXNzZXJ0aW9uLFxuICAgICdudW1iZXItZm9ybWF0JzogTnVtYmVyRm9ybWF0LFxuICAgICdvYmplY3QnOiBBc3NlcnRpb24sXG4gICAgJ3NsaWNlJzogU2xpY2UsXG4gICAgJ3N0ZXAnOiBTdGVwLFxuICAgICdzdHJpbmcnOiBBc3NlcnRpb24sXG4gICAgJ3RvLWJvb2xlYW4nOiBDb2VyY2lvbixcbiAgICAndG8tY29sb3InOiBDb2VyY2lvbixcbiAgICAndG8tbnVtYmVyJzogQ29lcmNpb24sXG4gICAgJ3RvLXN0cmluZyc6IENvZXJjaW9uLFxuICAgICd2YXInOiBWYXIsXG4gICAgJ3dpdGhpbic6IFdpdGhpblxufTtcblxuZnVuY3Rpb24gcmdiYShjdHgsIFtyLCBnLCBiLCBhXSkge1xuICAgIHIgPSByLmV2YWx1YXRlKGN0eCk7XG4gICAgZyA9IGcuZXZhbHVhdGUoY3R4KTtcbiAgICBiID0gYi5ldmFsdWF0ZShjdHgpO1xuICAgIGNvbnN0IGFscGhhID0gYSA/IGEuZXZhbHVhdGUoY3R4KSA6IDE7XG4gICAgY29uc3QgZXJyb3IgPSB2YWxpZGF0ZVJHQkEociwgZywgYiwgYWxwaGEpO1xuICAgIGlmIChlcnJvcikgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihlcnJvcik7XG4gICAgcmV0dXJuIG5ldyBDb2xvcihyIC8gMjU1ICogYWxwaGEsIGcgLyAyNTUgKiBhbHBoYSwgYiAvIDI1NSAqIGFscGhhLCBhbHBoYSk7XG59XG5cbmZ1bmN0aW9uIGhhcyhrZXksIG9iaikge1xuICAgIHJldHVybiBrZXkgaW4gb2JqO1xufVxuXG5mdW5jdGlvbiBnZXQoa2V5LCBvYmopIHtcbiAgICBjb25zdCB2ID0gb2JqW2tleV07XG4gICAgcmV0dXJuIHR5cGVvZiB2ID09PSAndW5kZWZpbmVkJyA/IG51bGwgOiB2O1xufVxuXG5mdW5jdGlvbiBiaW5hcnlTZWFyY2godiwgYSwgaSwgaikge1xuICAgIHdoaWxlIChpIDw9IGopIHtcbiAgICAgICAgY29uc3QgbSA9IChpICsgaikgPj4gMTtcbiAgICAgICAgaWYgKGFbbV0gPT09IHYpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKGFbbV0gPiB2KVxuICAgICAgICAgICAgaiA9IG0gLSAxO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBpID0gbSArIDE7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdmFyYXJncyh0eXBlOiBUeXBlKTogVmFyYXJncyB7XG4gICAgcmV0dXJuIHt0eXBlfTtcbn1cblxuQ29tcG91bmRFeHByZXNzaW9uLnJlZ2lzdGVyKGV4cHJlc3Npb25zLCB7XG4gICAgJ2Vycm9yJzogW1xuICAgICAgICBFcnJvclR5cGUsXG4gICAgICAgIFtTdHJpbmdUeXBlXSxcbiAgICAgICAgKGN0eCwgW3ZdKSA9PiB7IHRocm93IG5ldyBSdW50aW1lRXJyb3Iodi5ldmFsdWF0ZShjdHgpKTsgfVxuICAgIF0sXG4gICAgJ3R5cGVvZic6IFtcbiAgICAgICAgU3RyaW5nVHlwZSxcbiAgICAgICAgW1ZhbHVlVHlwZV0sXG4gICAgICAgIChjdHgsIFt2XSkgPT4gdHlwZVRvU3RyaW5nKHR5cGVPZih2LmV2YWx1YXRlKGN0eCkpKVxuICAgIF0sXG4gICAgJ3RvLXJnYmEnOiBbXG4gICAgICAgIGFycmF5KE51bWJlclR5cGUsIDQpLFxuICAgICAgICBbQ29sb3JUeXBlXSxcbiAgICAgICAgKGN0eCwgW3ZdKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdi5ldmFsdWF0ZShjdHgpLnRvQXJyYXkoKTtcbiAgICAgICAgfVxuICAgIF0sXG4gICAgJ3JnYic6IFtcbiAgICAgICAgQ29sb3JUeXBlLFxuICAgICAgICBbTnVtYmVyVHlwZSwgTnVtYmVyVHlwZSwgTnVtYmVyVHlwZV0sXG4gICAgICAgIHJnYmFcbiAgICBdLFxuICAgICdyZ2JhJzogW1xuICAgICAgICBDb2xvclR5cGUsXG4gICAgICAgIFtOdW1iZXJUeXBlLCBOdW1iZXJUeXBlLCBOdW1iZXJUeXBlLCBOdW1iZXJUeXBlXSxcbiAgICAgICAgcmdiYVxuICAgIF0sXG4gICAgJ2hhcyc6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhblR5cGUsXG4gICAgICAgIG92ZXJsb2FkczogW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFtTdHJpbmdUeXBlXSxcbiAgICAgICAgICAgICAgICAoY3R4LCBba2V5XSkgPT4gaGFzKGtleS5ldmFsdWF0ZShjdHgpLCBjdHgucHJvcGVydGllcygpKVxuICAgICAgICAgICAgXSwgW1xuICAgICAgICAgICAgICAgIFtTdHJpbmdUeXBlLCBPYmplY3RUeXBlXSxcbiAgICAgICAgICAgICAgICAoY3R4LCBba2V5LCBvYmpdKSA9PiBoYXMoa2V5LmV2YWx1YXRlKGN0eCksIG9iai5ldmFsdWF0ZShjdHgpKVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgfSxcbiAgICAnZ2V0Jzoge1xuICAgICAgICB0eXBlOiBWYWx1ZVR5cGUsXG4gICAgICAgIG92ZXJsb2FkczogW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFtTdHJpbmdUeXBlXSxcbiAgICAgICAgICAgICAgICAoY3R4LCBba2V5XSkgPT4gZ2V0KGtleS5ldmFsdWF0ZShjdHgpLCBjdHgucHJvcGVydGllcygpKVxuICAgICAgICAgICAgXSwgW1xuICAgICAgICAgICAgICAgIFtTdHJpbmdUeXBlLCBPYmplY3RUeXBlXSxcbiAgICAgICAgICAgICAgICAoY3R4LCBba2V5LCBvYmpdKSA9PiBnZXQoa2V5LmV2YWx1YXRlKGN0eCksIG9iai5ldmFsdWF0ZShjdHgpKVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgfSxcbiAgICAnZmVhdHVyZS1zdGF0ZSc6IFtcbiAgICAgICAgVmFsdWVUeXBlLFxuICAgICAgICBbU3RyaW5nVHlwZV0sXG4gICAgICAgIChjdHgsIFtrZXldKSA9PiBnZXQoa2V5LmV2YWx1YXRlKGN0eCksIGN0eC5mZWF0dXJlU3RhdGUgfHwge30pXG4gICAgXSxcbiAgICAncHJvcGVydGllcyc6IFtcbiAgICAgICAgT2JqZWN0VHlwZSxcbiAgICAgICAgW10sXG4gICAgICAgIChjdHgpID0+IGN0eC5wcm9wZXJ0aWVzKClcbiAgICBdLFxuICAgICdnZW9tZXRyeS10eXBlJzogW1xuICAgICAgICBTdHJpbmdUeXBlLFxuICAgICAgICBbXSxcbiAgICAgICAgKGN0eCkgPT4gY3R4Lmdlb21ldHJ5VHlwZSgpXG4gICAgXSxcbiAgICAnaWQnOiBbXG4gICAgICAgIFZhbHVlVHlwZSxcbiAgICAgICAgW10sXG4gICAgICAgIChjdHgpID0+IGN0eC5pZCgpXG4gICAgXSxcbiAgICAnem9vbSc6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW10sXG4gICAgICAgIChjdHgpID0+IGN0eC5nbG9iYWxzLnpvb21cbiAgICBdLFxuICAgICdoZWF0bWFwLWRlbnNpdHknOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtdLFxuICAgICAgICAoY3R4KSA9PiBjdHguZ2xvYmFscy5oZWF0bWFwRGVuc2l0eSB8fCAwXG4gICAgXSxcbiAgICAnbGluZS1wcm9ncmVzcyc6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW10sXG4gICAgICAgIChjdHgpID0+IGN0eC5nbG9iYWxzLmxpbmVQcm9ncmVzcyB8fCAwXG4gICAgXSxcbiAgICAnYWNjdW11bGF0ZWQnOiBbXG4gICAgICAgIFZhbHVlVHlwZSxcbiAgICAgICAgW10sXG4gICAgICAgIChjdHgpID0+IGN0eC5nbG9iYWxzLmFjY3VtdWxhdGVkID09PSB1bmRlZmluZWQgPyBudWxsIDogY3R4Lmdsb2JhbHMuYWNjdW11bGF0ZWRcbiAgICBdLFxuICAgICcrJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICB2YXJhcmdzKE51bWJlclR5cGUpLFxuICAgICAgICAoY3R4LCBhcmdzKSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gMDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYXJnIG9mIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gYXJnLmV2YWx1YXRlKGN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgXSxcbiAgICAnKic6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgdmFyYXJncyhOdW1iZXJUeXBlKSxcbiAgICAgICAgKGN0eCwgYXJncykgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IDE7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFyZyBvZiBhcmdzKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICo9IGFyZy5ldmFsdWF0ZShjdHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIF0sXG4gICAgJy0nOiB7XG4gICAgICAgIHR5cGU6IE51bWJlclR5cGUsXG4gICAgICAgIG92ZXJsb2FkczogW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFtOdW1iZXJUeXBlLCBOdW1iZXJUeXBlXSxcbiAgICAgICAgICAgICAgICAoY3R4LCBbYSwgYl0pID0+IGEuZXZhbHVhdGUoY3R4KSAtIGIuZXZhbHVhdGUoY3R4KVxuICAgICAgICAgICAgXSwgW1xuICAgICAgICAgICAgICAgIFtOdW1iZXJUeXBlXSxcbiAgICAgICAgICAgICAgICAoY3R4LCBbYV0pID0+IC1hLmV2YWx1YXRlKGN0eClcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIH0sXG4gICAgJy8nOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtOdW1iZXJUeXBlLCBOdW1iZXJUeXBlXSxcbiAgICAgICAgKGN0eCwgW2EsIGJdKSA9PiBhLmV2YWx1YXRlKGN0eCkgLyBiLmV2YWx1YXRlKGN0eClcbiAgICBdLFxuICAgICclJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbTnVtYmVyVHlwZSwgTnVtYmVyVHlwZV0sXG4gICAgICAgIChjdHgsIFthLCBiXSkgPT4gYS5ldmFsdWF0ZShjdHgpICUgYi5ldmFsdWF0ZShjdHgpXG4gICAgXSxcbiAgICAnbG4yJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbXSxcbiAgICAgICAgKCkgPT4gTWF0aC5MTjJcbiAgICBdLFxuICAgICdwaSc6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW10sXG4gICAgICAgICgpID0+IE1hdGguUElcbiAgICBdLFxuICAgICdlJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbXSxcbiAgICAgICAgKCkgPT4gTWF0aC5FXG4gICAgXSxcbiAgICAnXic6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW051bWJlclR5cGUsIE51bWJlclR5cGVdLFxuICAgICAgICAoY3R4LCBbYiwgZV0pID0+IE1hdGgucG93KGIuZXZhbHVhdGUoY3R4KSwgZS5ldmFsdWF0ZShjdHgpKVxuICAgIF0sXG4gICAgJ3NxcnQnOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtOdW1iZXJUeXBlXSxcbiAgICAgICAgKGN0eCwgW3hdKSA9PiBNYXRoLnNxcnQoeC5ldmFsdWF0ZShjdHgpKVxuICAgIF0sXG4gICAgJ2xvZzEwJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbTnVtYmVyVHlwZV0sXG4gICAgICAgIChjdHgsIFtuXSkgPT4gTWF0aC5sb2cobi5ldmFsdWF0ZShjdHgpKSAvIE1hdGguTE4xMFxuICAgIF0sXG4gICAgJ2xuJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbTnVtYmVyVHlwZV0sXG4gICAgICAgIChjdHgsIFtuXSkgPT4gTWF0aC5sb2cobi5ldmFsdWF0ZShjdHgpKVxuICAgIF0sXG4gICAgJ2xvZzInOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtOdW1iZXJUeXBlXSxcbiAgICAgICAgKGN0eCwgW25dKSA9PiBNYXRoLmxvZyhuLmV2YWx1YXRlKGN0eCkpIC8gTWF0aC5MTjJcbiAgICBdLFxuICAgICdzaW4nOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtOdW1iZXJUeXBlXSxcbiAgICAgICAgKGN0eCwgW25dKSA9PiBNYXRoLnNpbihuLmV2YWx1YXRlKGN0eCkpXG4gICAgXSxcbiAgICAnY29zJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbTnVtYmVyVHlwZV0sXG4gICAgICAgIChjdHgsIFtuXSkgPT4gTWF0aC5jb3Mobi5ldmFsdWF0ZShjdHgpKVxuICAgIF0sXG4gICAgJ3Rhbic6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW051bWJlclR5cGVdLFxuICAgICAgICAoY3R4LCBbbl0pID0+IE1hdGgudGFuKG4uZXZhbHVhdGUoY3R4KSlcbiAgICBdLFxuICAgICdhc2luJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbTnVtYmVyVHlwZV0sXG4gICAgICAgIChjdHgsIFtuXSkgPT4gTWF0aC5hc2luKG4uZXZhbHVhdGUoY3R4KSlcbiAgICBdLFxuICAgICdhY29zJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbTnVtYmVyVHlwZV0sXG4gICAgICAgIChjdHgsIFtuXSkgPT4gTWF0aC5hY29zKG4uZXZhbHVhdGUoY3R4KSlcbiAgICBdLFxuICAgICdhdGFuJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbTnVtYmVyVHlwZV0sXG4gICAgICAgIChjdHgsIFtuXSkgPT4gTWF0aC5hdGFuKG4uZXZhbHVhdGUoY3R4KSlcbiAgICBdLFxuICAgICdtaW4nOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIHZhcmFyZ3MoTnVtYmVyVHlwZSksXG4gICAgICAgIChjdHgsIGFyZ3MpID0+IE1hdGgubWluKC4uLmFyZ3MubWFwKGFyZyA9PiBhcmcuZXZhbHVhdGUoY3R4KSkpXG4gICAgXSxcbiAgICAnbWF4JzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICB2YXJhcmdzKE51bWJlclR5cGUpLFxuICAgICAgICAoY3R4LCBhcmdzKSA9PiBNYXRoLm1heCguLi5hcmdzLm1hcChhcmcgPT4gYXJnLmV2YWx1YXRlKGN0eCkpKVxuICAgIF0sXG4gICAgJ2Ficyc6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW051bWJlclR5cGVdLFxuICAgICAgICAoY3R4LCBbbl0pID0+IE1hdGguYWJzKG4uZXZhbHVhdGUoY3R4KSlcbiAgICBdLFxuICAgICdyb3VuZCc6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW051bWJlclR5cGVdLFxuICAgICAgICAoY3R4LCBbbl0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHYgPSBuLmV2YWx1YXRlKGN0eCk7XG4gICAgICAgICAgICAvLyBKYXZhc2NyaXB0J3MgTWF0aC5yb3VuZCgpIHJvdW5kcyB0b3dhcmRzICtJbmZpbml0eSBmb3IgaGFsZndheVxuICAgICAgICAgICAgLy8gdmFsdWVzLCBldmVuIHdoZW4gdGhleSdyZSBuZWdhdGl2ZS4gSXQncyBtb3JlIGNvbW1vbiB0byByb3VuZFxuICAgICAgICAgICAgLy8gYXdheSBmcm9tIDAgKGUuZy4sIHRoaXMgaXMgd2hhdCBweXRob24gYW5kIEMrKyBkbylcbiAgICAgICAgICAgIHJldHVybiB2IDwgMCA/IC1NYXRoLnJvdW5kKC12KSA6IE1hdGgucm91bmQodik7XG4gICAgICAgIH1cbiAgICBdLFxuICAgICdmbG9vcic6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW051bWJlclR5cGVdLFxuICAgICAgICAoY3R4LCBbbl0pID0+IE1hdGguZmxvb3Iobi5ldmFsdWF0ZShjdHgpKVxuICAgIF0sXG4gICAgJ2NlaWwnOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtOdW1iZXJUeXBlXSxcbiAgICAgICAgKGN0eCwgW25dKSA9PiBNYXRoLmNlaWwobi5ldmFsdWF0ZShjdHgpKVxuICAgIF0sXG4gICAgJ2ZpbHRlci09PSc6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtTdHJpbmdUeXBlLCBWYWx1ZVR5cGVdLFxuICAgICAgICAoY3R4LCBbaywgdl0pID0+IGN0eC5wcm9wZXJ0aWVzKClbKGs6IGFueSkudmFsdWVdID09PSAodjogYW55KS52YWx1ZVxuICAgIF0sXG4gICAgJ2ZpbHRlci1pZC09PSc6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtWYWx1ZVR5cGVdLFxuICAgICAgICAoY3R4LCBbdl0pID0+IGN0eC5pZCgpID09PSAodjogYW55KS52YWx1ZVxuICAgIF0sXG4gICAgJ2ZpbHRlci10eXBlLT09JzogW1xuICAgICAgICBCb29sZWFuVHlwZSxcbiAgICAgICAgW1N0cmluZ1R5cGVdLFxuICAgICAgICAoY3R4LCBbdl0pID0+IGN0eC5nZW9tZXRyeVR5cGUoKSA9PT0gKHY6IGFueSkudmFsdWVcbiAgICBdLFxuICAgICdmaWx0ZXItPCc6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtTdHJpbmdUeXBlLCBWYWx1ZVR5cGVdLFxuICAgICAgICAoY3R4LCBbaywgdl0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSBjdHgucHJvcGVydGllcygpWyhrOiBhbnkpLnZhbHVlXTtcbiAgICAgICAgICAgIGNvbnN0IGIgPSAodjogYW55KS52YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYSA9PT0gdHlwZW9mIGIgJiYgYSA8IGI7XG4gICAgICAgIH1cbiAgICBdLFxuICAgICdmaWx0ZXItaWQtPCc6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtWYWx1ZVR5cGVdLFxuICAgICAgICAoY3R4LCBbdl0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSBjdHguaWQoKTtcbiAgICAgICAgICAgIGNvbnN0IGIgPSAodjogYW55KS52YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYSA9PT0gdHlwZW9mIGIgJiYgYSA8IGI7XG4gICAgICAgIH1cbiAgICBdLFxuICAgICdmaWx0ZXItPic6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtTdHJpbmdUeXBlLCBWYWx1ZVR5cGVdLFxuICAgICAgICAoY3R4LCBbaywgdl0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSBjdHgucHJvcGVydGllcygpWyhrOiBhbnkpLnZhbHVlXTtcbiAgICAgICAgICAgIGNvbnN0IGIgPSAodjogYW55KS52YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYSA9PT0gdHlwZW9mIGIgJiYgYSA+IGI7XG4gICAgICAgIH1cbiAgICBdLFxuICAgICdmaWx0ZXItaWQtPic6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtWYWx1ZVR5cGVdLFxuICAgICAgICAoY3R4LCBbdl0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSBjdHguaWQoKTtcbiAgICAgICAgICAgIGNvbnN0IGIgPSAodjogYW55KS52YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYSA9PT0gdHlwZW9mIGIgJiYgYSA+IGI7XG4gICAgICAgIH1cbiAgICBdLFxuICAgICdmaWx0ZXItPD0nOiBbXG4gICAgICAgIEJvb2xlYW5UeXBlLFxuICAgICAgICBbU3RyaW5nVHlwZSwgVmFsdWVUeXBlXSxcbiAgICAgICAgKGN0eCwgW2ssIHZdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhID0gY3R4LnByb3BlcnRpZXMoKVsoazogYW55KS52YWx1ZV07XG4gICAgICAgICAgICBjb25zdCBiID0gKHY6IGFueSkudmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGEgPT09IHR5cGVvZiBiICYmIGEgPD0gYjtcbiAgICAgICAgfVxuICAgIF0sXG4gICAgJ2ZpbHRlci1pZC08PSc6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtWYWx1ZVR5cGVdLFxuICAgICAgICAoY3R4LCBbdl0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSBjdHguaWQoKTtcbiAgICAgICAgICAgIGNvbnN0IGIgPSAodjogYW55KS52YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYSA9PT0gdHlwZW9mIGIgJiYgYSA8PSBiO1xuICAgICAgICB9XG4gICAgXSxcbiAgICAnZmlsdGVyLT49JzogW1xuICAgICAgICBCb29sZWFuVHlwZSxcbiAgICAgICAgW1N0cmluZ1R5cGUsIFZhbHVlVHlwZV0sXG4gICAgICAgIChjdHgsIFtrLCB2XSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYSA9IGN0eC5wcm9wZXJ0aWVzKClbKGs6IGFueSkudmFsdWVdO1xuICAgICAgICAgICAgY29uc3QgYiA9ICh2OiBhbnkpLnZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBhID09PSB0eXBlb2YgYiAmJiBhID49IGI7XG4gICAgICAgIH1cbiAgICBdLFxuICAgICdmaWx0ZXItaWQtPj0nOiBbXG4gICAgICAgIEJvb2xlYW5UeXBlLFxuICAgICAgICBbVmFsdWVUeXBlXSxcbiAgICAgICAgKGN0eCwgW3ZdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhID0gY3R4LmlkKCk7XG4gICAgICAgICAgICBjb25zdCBiID0gKHY6IGFueSkudmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGEgPT09IHR5cGVvZiBiICYmIGEgPj0gYjtcbiAgICAgICAgfVxuICAgIF0sXG4gICAgJ2ZpbHRlci1oYXMnOiBbXG4gICAgICAgIEJvb2xlYW5UeXBlLFxuICAgICAgICBbVmFsdWVUeXBlXSxcbiAgICAgICAgKGN0eCwgW2tdKSA9PiAoazogYW55KS52YWx1ZSBpbiBjdHgucHJvcGVydGllcygpXG4gICAgXSxcbiAgICAnZmlsdGVyLWhhcy1pZCc6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtdLFxuICAgICAgICAoY3R4KSA9PiAoY3R4LmlkKCkgIT09IG51bGwgJiYgY3R4LmlkKCkgIT09IHVuZGVmaW5lZClcbiAgICBdLFxuICAgICdmaWx0ZXItdHlwZS1pbic6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFthcnJheShTdHJpbmdUeXBlKV0sXG4gICAgICAgIChjdHgsIFt2XSkgPT4gKHY6IGFueSkudmFsdWUuaW5kZXhPZihjdHguZ2VvbWV0cnlUeXBlKCkpID49IDBcbiAgICBdLFxuICAgICdmaWx0ZXItaWQtaW4nOiBbXG4gICAgICAgIEJvb2xlYW5UeXBlLFxuICAgICAgICBbYXJyYXkoVmFsdWVUeXBlKV0sXG4gICAgICAgIChjdHgsIFt2XSkgPT4gKHY6IGFueSkudmFsdWUuaW5kZXhPZihjdHguaWQoKSkgPj0gMFxuICAgIF0sXG4gICAgJ2ZpbHRlci1pbi1zbWFsbCc6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtTdHJpbmdUeXBlLCBhcnJheShWYWx1ZVR5cGUpXSxcbiAgICAgICAgLy8gYXNzdW1lcyB2IGlzIGFuIGFycmF5IGxpdGVyYWxcbiAgICAgICAgKGN0eCwgW2ssIHZdKSA9PiAodjogYW55KS52YWx1ZS5pbmRleE9mKGN0eC5wcm9wZXJ0aWVzKClbKGs6IGFueSkudmFsdWVdKSA+PSAwXG4gICAgXSxcbiAgICAnZmlsdGVyLWluLWxhcmdlJzogW1xuICAgICAgICBCb29sZWFuVHlwZSxcbiAgICAgICAgW1N0cmluZ1R5cGUsIGFycmF5KFZhbHVlVHlwZSldLFxuICAgICAgICAvLyBhc3N1bWVzIHYgaXMgYSBhcnJheSBsaXRlcmFsIHdpdGggdmFsdWVzIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXIgYW5kIG9mIGEgc2luZ2xlIHR5cGVcbiAgICAgICAgKGN0eCwgW2ssIHZdKSA9PiBiaW5hcnlTZWFyY2goY3R4LnByb3BlcnRpZXMoKVsoazogYW55KS52YWx1ZV0sICh2OiBhbnkpLnZhbHVlLCAwLCAodjogYW55KS52YWx1ZS5sZW5ndGggLSAxKVxuICAgIF0sXG4gICAgJ2FsbCc6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhblR5cGUsXG4gICAgICAgIG92ZXJsb2FkczogW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFtCb29sZWFuVHlwZSwgQm9vbGVhblR5cGVdLFxuICAgICAgICAgICAgICAgIChjdHgsIFthLCBiXSkgPT4gYS5ldmFsdWF0ZShjdHgpICYmIGIuZXZhbHVhdGUoY3R4KVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICB2YXJhcmdzKEJvb2xlYW5UeXBlKSxcbiAgICAgICAgICAgICAgICAoY3R4LCBhcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYXJnIG9mIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmV2YWx1YXRlKGN0eCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIH0sXG4gICAgJ2FueSc6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhblR5cGUsXG4gICAgICAgIG92ZXJsb2FkczogW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFtCb29sZWFuVHlwZSwgQm9vbGVhblR5cGVdLFxuICAgICAgICAgICAgICAgIChjdHgsIFthLCBiXSkgPT4gYS5ldmFsdWF0ZShjdHgpIHx8IGIuZXZhbHVhdGUoY3R4KVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICB2YXJhcmdzKEJvb2xlYW5UeXBlKSxcbiAgICAgICAgICAgICAgICAoY3R4LCBhcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYXJnIG9mIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmcuZXZhbHVhdGUoY3R4KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgfSxcbiAgICAnISc6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtCb29sZWFuVHlwZV0sXG4gICAgICAgIChjdHgsIFtiXSkgPT4gIWIuZXZhbHVhdGUoY3R4KVxuICAgIF0sXG4gICAgJ2lzLXN1cHBvcnRlZC1zY3JpcHQnOiBbXG4gICAgICAgIEJvb2xlYW5UeXBlLFxuICAgICAgICBbU3RyaW5nVHlwZV0sXG4gICAgICAgIC8vIEF0IHBhcnNlIHRpbWUgdGhpcyB3aWxsIGFsd2F5cyByZXR1cm4gdHJ1ZSwgc28gd2UgbmVlZCB0byBleGNsdWRlIHRoaXMgZXhwcmVzc2lvbiB3aXRoIGlzR2xvYmFsUHJvcGVydHlDb25zdGFudFxuICAgICAgICAoY3R4LCBbc10pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlzU3VwcG9ydGVkU2NyaXB0ID0gY3R4Lmdsb2JhbHMgJiYgY3R4Lmdsb2JhbHMuaXNTdXBwb3J0ZWRTY3JpcHQ7XG4gICAgICAgICAgICBpZiAoaXNTdXBwb3J0ZWRTY3JpcHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNTdXBwb3J0ZWRTY3JpcHQocy5ldmFsdWF0ZShjdHgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgXSxcbiAgICAndXBjYXNlJzogW1xuICAgICAgICBTdHJpbmdUeXBlLFxuICAgICAgICBbU3RyaW5nVHlwZV0sXG4gICAgICAgIChjdHgsIFtzXSkgPT4gcy5ldmFsdWF0ZShjdHgpLnRvVXBwZXJDYXNlKClcbiAgICBdLFxuICAgICdkb3duY2FzZSc6IFtcbiAgICAgICAgU3RyaW5nVHlwZSxcbiAgICAgICAgW1N0cmluZ1R5cGVdLFxuICAgICAgICAoY3R4LCBbc10pID0+IHMuZXZhbHVhdGUoY3R4KS50b0xvd2VyQ2FzZSgpXG4gICAgXSxcbiAgICAnY29uY2F0JzogW1xuICAgICAgICBTdHJpbmdUeXBlLFxuICAgICAgICB2YXJhcmdzKFZhbHVlVHlwZSksXG4gICAgICAgIChjdHgsIGFyZ3MpID0+IGFyZ3MubWFwKGFyZyA9PiB2YWx1ZVRvU3RyaW5nKGFyZy5ldmFsdWF0ZShjdHgpKSkuam9pbignJylcbiAgICBdLFxuICAgICdyZXNvbHZlZC1sb2NhbGUnOiBbXG4gICAgICAgIFN0cmluZ1R5cGUsXG4gICAgICAgIFtDb2xsYXRvclR5cGVdLFxuICAgICAgICAoY3R4LCBbY29sbGF0b3JdKSA9PiBjb2xsYXRvci5ldmFsdWF0ZShjdHgpLnJlc29sdmVkTG9jYWxlKClcbiAgICBdXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZXhwcmVzc2lvbnM7XG4iLCIvLyBAZmxvd1xuXG4vKipcbiAqIEEgdHlwZSB1c2VkIGZvciByZXR1cm5pbmcgYW5kIHByb3BhZ2F0aW5nIGVycm9ycy4gVGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIHVuaW9uXG4gKiByZXByZXNlbnRzIHN1Y2Nlc3MgYW5kIGNvbnRhaW5zIGEgdmFsdWUsIGFuZCB0aGUgc2Vjb25kIHJlcHJlc2VudHMgYW4gZXJyb3IgYW5kXG4gKiBjb250YWlucyBhbiBlcnJvciB2YWx1ZS5cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCB0eXBlIFJlc3VsdDxULCBFPiA9XG4gICAgfCB7fCByZXN1bHQ6ICdzdWNjZXNzJywgdmFsdWU6IFQgfH1cbiAgICB8IHt8IHJlc3VsdDogJ2Vycm9yJywgdmFsdWU6IEUgfH07XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWNjZXNzPFQsIEU+KHZhbHVlOiBUKTogUmVzdWx0PFQsIEU+IHtcbiAgICByZXR1cm4ge3Jlc3VsdDogJ3N1Y2Nlc3MnLCB2YWx1ZX07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcnJvcjxULCBFPih2YWx1ZTogRSk6IFJlc3VsdDxULCBFPiB7XG4gICAgcmV0dXJuIHtyZXN1bHQ6ICdlcnJvcicsIHZhbHVlfTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB0eXBlIHtTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3J0c1Byb3BlcnR5RXhwcmVzc2lvbihzcGVjOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzcGVjWydwcm9wZXJ0eS10eXBlJ10gPT09ICdkYXRhLWRyaXZlbicgfHwgc3BlY1sncHJvcGVydHktdHlwZSddID09PSAnY3Jvc3MtZmFkZWQtZGF0YS1kcml2ZW4nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9ydHNab29tRXhwcmVzc2lvbihzcGVjOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXNwZWMuZXhwcmVzc2lvbiAmJiBzcGVjLmV4cHJlc3Npb24ucGFyYW1ldGVycy5pbmRleE9mKCd6b29tJykgPiAtMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvcnRzSW50ZXJwb2xhdGlvbihzcGVjOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXNwZWMuZXhwcmVzc2lvbiAmJiBzcGVjLmV4cHJlc3Npb24uaW50ZXJwb2xhdGVkO1xufVxuIiwiLy8gQGZsb3dcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VHlwZSh2YWw6IG1peGVkKTogc3RyaW5nIHtcbiAgICBpZiAodmFsIGluc3RhbmNlb2YgTnVtYmVyKSB7XG4gICAgICAgIHJldHVybiAnbnVtYmVyJztcbiAgICB9IGVsc2UgaWYgKHZhbCBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgICAgICByZXR1cm4gJ3N0cmluZyc7XG4gICAgfSBlbHNlIGlmICh2YWwgaW5zdGFuY2VvZiBCb29sZWFuKSB7XG4gICAgICAgIHJldHVybiAnYm9vbGVhbic7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAgcmV0dXJuICdhcnJheSc7XG4gICAgfSBlbHNlIGlmICh2YWwgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuICdudWxsJztcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbDtcbiAgICB9XG59XG4iLCJcbmltcG9ydCAqIGFzIGNvbG9yU3BhY2VzIGZyb20gJy4uL3V0aWwvY29sb3Jfc3BhY2VzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi91dGlsL2NvbG9yJztcbmltcG9ydCBleHRlbmQgZnJvbSAnLi4vdXRpbC9leHRlbmQnO1xuaW1wb3J0IGdldFR5cGUgZnJvbSAnLi4vdXRpbC9nZXRfdHlwZSc7XG5pbXBvcnQgKiBhcyBpbnRlcnBvbGF0ZSBmcm9tICcuLi91dGlsL2ludGVycG9sYXRlJztcbmltcG9ydCBJbnRlcnBvbGF0ZSBmcm9tICcuLi9leHByZXNzaW9uL2RlZmluaXRpb25zL2ludGVycG9sYXRlJztcbmltcG9ydCBGb3JtYXR0ZWQgZnJvbSAnLi4vZXhwcmVzc2lvbi90eXBlcy9mb3JtYXR0ZWQnO1xuaW1wb3J0IFJlc29sdmVkSW1hZ2UgZnJvbSAnLi4vZXhwcmVzc2lvbi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5pbXBvcnQge3N1cHBvcnRzSW50ZXJwb2xhdGlvbn0gZnJvbSAnLi4vdXRpbC9wcm9wZXJ0aWVzJztcbmltcG9ydCB7ZmluZFN0b3BMZXNzVGhhbk9yRXF1YWxUb30gZnJvbSAnLi4vZXhwcmVzc2lvbi9zdG9wcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBpZGVudGl0eUZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4geDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uKHBhcmFtZXRlcnMsIHByb3BlcnR5U3BlYykge1xuICAgIGNvbnN0IGlzQ29sb3IgPSBwcm9wZXJ0eVNwZWMudHlwZSA9PT0gJ2NvbG9yJztcbiAgICBjb25zdCB6b29tQW5kRmVhdHVyZURlcGVuZGVudCA9IHBhcmFtZXRlcnMuc3RvcHMgJiYgdHlwZW9mIHBhcmFtZXRlcnMuc3RvcHNbMF1bMF0gPT09ICdvYmplY3QnO1xuICAgIGNvbnN0IGZlYXR1cmVEZXBlbmRlbnQgPSB6b29tQW5kRmVhdHVyZURlcGVuZGVudCB8fCBwYXJhbWV0ZXJzLnByb3BlcnR5ICE9PSB1bmRlZmluZWQ7XG4gICAgY29uc3Qgem9vbURlcGVuZGVudCA9IHpvb21BbmRGZWF0dXJlRGVwZW5kZW50IHx8ICFmZWF0dXJlRGVwZW5kZW50O1xuICAgIGNvbnN0IHR5cGUgPSBwYXJhbWV0ZXJzLnR5cGUgfHwgKHN1cHBvcnRzSW50ZXJwb2xhdGlvbihwcm9wZXJ0eVNwZWMpID8gJ2V4cG9uZW50aWFsJyA6ICdpbnRlcnZhbCcpO1xuXG4gICAgaWYgKGlzQ29sb3IpIHtcbiAgICAgICAgcGFyYW1ldGVycyA9IGV4dGVuZCh7fSwgcGFyYW1ldGVycyk7XG5cbiAgICAgICAgaWYgKHBhcmFtZXRlcnMuc3RvcHMpIHtcbiAgICAgICAgICAgIHBhcmFtZXRlcnMuc3RvcHMgPSBwYXJhbWV0ZXJzLnN0b3BzLm1hcCgoc3RvcCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBbc3RvcFswXSwgQ29sb3IucGFyc2Uoc3RvcFsxXSldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyYW1ldGVycy5kZWZhdWx0KSB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHQgPSBDb2xvci5wYXJzZShwYXJhbWV0ZXJzLmRlZmF1bHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0ID0gQ29sb3IucGFyc2UocHJvcGVydHlTcGVjLmRlZmF1bHQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtZXRlcnMuY29sb3JTcGFjZSAmJiBwYXJhbWV0ZXJzLmNvbG9yU3BhY2UgIT09ICdyZ2InICYmICFjb2xvclNwYWNlc1twYXJhbWV0ZXJzLmNvbG9yU3BhY2VdKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW1wb3J0L25hbWVzcGFjZVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gY29sb3Igc3BhY2U6ICR7cGFyYW1ldGVycy5jb2xvclNwYWNlfWApO1xuICAgIH1cblxuICAgIGxldCBpbm5lckZ1bjtcbiAgICBsZXQgaGFzaGVkU3RvcHM7XG4gICAgbGV0IGNhdGVnb3JpY2FsS2V5VHlwZTtcbiAgICBpZiAodHlwZSA9PT0gJ2V4cG9uZW50aWFsJykge1xuICAgICAgICBpbm5lckZ1biA9IGV2YWx1YXRlRXhwb25lbnRpYWxGdW5jdGlvbjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdpbnRlcnZhbCcpIHtcbiAgICAgICAgaW5uZXJGdW4gPSBldmFsdWF0ZUludGVydmFsRnVuY3Rpb247XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnY2F0ZWdvcmljYWwnKSB7XG4gICAgICAgIGlubmVyRnVuID0gZXZhbHVhdGVDYXRlZ29yaWNhbEZ1bmN0aW9uO1xuXG4gICAgICAgIC8vIEZvciBjYXRlZ29yaWNhbCBmdW5jdGlvbnMsIGdlbmVyYXRlIGFuIE9iamVjdCBhcyBhIGhhc2htYXAgb2YgdGhlIHN0b3BzIGZvciBmYXN0IHNlYXJjaGluZ1xuICAgICAgICBoYXNoZWRTdG9wcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIGZvciAoY29uc3Qgc3RvcCBvZiBwYXJhbWV0ZXJzLnN0b3BzKSB7XG4gICAgICAgICAgICBoYXNoZWRTdG9wc1tzdG9wWzBdXSA9IHN0b3BbMV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbmZlciBrZXkgdHlwZSBiYXNlZCBvbiBmaXJzdCBzdG9wIGtleS0tIHVzZWQgdG8gZW5jZm9yY2Ugc3RyaWN0IHR5cGUgY2hlY2tpbmcgbGF0ZXJcbiAgICAgICAgY2F0ZWdvcmljYWxLZXlUeXBlID0gdHlwZW9mIHBhcmFtZXRlcnMuc3RvcHNbMF1bMF07XG5cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdpZGVudGl0eScpIHtcbiAgICAgICAgaW5uZXJGdW4gPSBldmFsdWF0ZUlkZW50aXR5RnVuY3Rpb247XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGZ1bmN0aW9uIHR5cGUgXCIke3R5cGV9XCJgKTtcbiAgICB9XG5cbiAgICBpZiAoem9vbUFuZEZlYXR1cmVEZXBlbmRlbnQpIHtcbiAgICAgICAgY29uc3QgZmVhdHVyZUZ1bmN0aW9ucyA9IHt9O1xuICAgICAgICBjb25zdCB6b29tU3RvcHMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBwYXJhbWV0ZXJzLnN0b3BzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBjb25zdCBzdG9wID0gcGFyYW1ldGVycy5zdG9wc1tzXTtcbiAgICAgICAgICAgIGNvbnN0IHpvb20gPSBzdG9wWzBdLnpvb207XG4gICAgICAgICAgICBpZiAoZmVhdHVyZUZ1bmN0aW9uc1t6b29tXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZmVhdHVyZUZ1bmN0aW9uc1t6b29tXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgem9vbSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogcGFyYW1ldGVycy50eXBlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogcGFyYW1ldGVycy5wcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogcGFyYW1ldGVycy5kZWZhdWx0LFxuICAgICAgICAgICAgICAgICAgICBzdG9wczogW11cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHpvb21TdG9wcy5wdXNoKHpvb20pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmVhdHVyZUZ1bmN0aW9uc1t6b29tXS5zdG9wcy5wdXNoKFtzdG9wWzBdLnZhbHVlLCBzdG9wWzFdXSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmZWF0dXJlRnVuY3Rpb25TdG9wcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHogb2Ygem9vbVN0b3BzKSB7XG4gICAgICAgICAgICBmZWF0dXJlRnVuY3Rpb25TdG9wcy5wdXNoKFtmZWF0dXJlRnVuY3Rpb25zW3pdLnpvb20sIGNyZWF0ZUZ1bmN0aW9uKGZlYXR1cmVGdW5jdGlvbnNbel0sIHByb3BlcnR5U3BlYyldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGludGVycG9sYXRpb25UeXBlID0ge25hbWU6ICdsaW5lYXInfTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtpbmQ6ICdjb21wb3NpdGUnLFxuICAgICAgICAgICAgaW50ZXJwb2xhdGlvblR5cGUsXG4gICAgICAgICAgICBpbnRlcnBvbGF0aW9uRmFjdG9yOiBJbnRlcnBvbGF0ZS5pbnRlcnBvbGF0aW9uRmFjdG9yLmJpbmQodW5kZWZpbmVkLCBpbnRlcnBvbGF0aW9uVHlwZSksXG4gICAgICAgICAgICB6b29tU3RvcHM6IGZlYXR1cmVGdW5jdGlvblN0b3BzLm1hcChzID0+IHNbMF0pLFxuICAgICAgICAgICAgZXZhbHVhdGUoe3pvb219LCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV2YWx1YXRlRXhwb25lbnRpYWxGdW5jdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIHN0b3BzOiBmZWF0dXJlRnVuY3Rpb25TdG9wcyxcbiAgICAgICAgICAgICAgICAgICAgYmFzZTogcGFyYW1ldGVycy5iYXNlXG4gICAgICAgICAgICAgICAgfSwgcHJvcGVydHlTcGVjLCB6b29tKS5ldmFsdWF0ZSh6b29tLCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHpvb21EZXBlbmRlbnQpIHtcbiAgICAgICAgY29uc3QgaW50ZXJwb2xhdGlvblR5cGUgPSB0eXBlID09PSAnZXhwb25lbnRpYWwnID9cbiAgICAgICAgICAgIHtuYW1lOiAnZXhwb25lbnRpYWwnLCBiYXNlOiBwYXJhbWV0ZXJzLmJhc2UgIT09IHVuZGVmaW5lZCA/IHBhcmFtZXRlcnMuYmFzZSA6IDF9IDogbnVsbDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtpbmQ6ICdjYW1lcmEnLFxuICAgICAgICAgICAgaW50ZXJwb2xhdGlvblR5cGUsXG4gICAgICAgICAgICBpbnRlcnBvbGF0aW9uRmFjdG9yOiBJbnRlcnBvbGF0ZS5pbnRlcnBvbGF0aW9uRmFjdG9yLmJpbmQodW5kZWZpbmVkLCBpbnRlcnBvbGF0aW9uVHlwZSksXG4gICAgICAgICAgICB6b29tU3RvcHM6IHBhcmFtZXRlcnMuc3RvcHMubWFwKHMgPT4gc1swXSksXG4gICAgICAgICAgICBldmFsdWF0ZTogKHt6b29tfSkgPT4gaW5uZXJGdW4ocGFyYW1ldGVycywgcHJvcGVydHlTcGVjLCB6b29tLCBoYXNoZWRTdG9wcywgY2F0ZWdvcmljYWxLZXlUeXBlKVxuICAgICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBraW5kOiAnc291cmNlJyxcbiAgICAgICAgICAgIGV2YWx1YXRlKF8sIGZlYXR1cmUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZlYXR1cmUgJiYgZmVhdHVyZS5wcm9wZXJ0aWVzID8gZmVhdHVyZS5wcm9wZXJ0aWVzW3BhcmFtZXRlcnMucHJvcGVydHldIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2FsZXNjZShwYXJhbWV0ZXJzLmRlZmF1bHQsIHByb3BlcnR5U3BlYy5kZWZhdWx0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlubmVyRnVuKHBhcmFtZXRlcnMsIHByb3BlcnR5U3BlYywgdmFsdWUsIGhhc2hlZFN0b3BzLCBjYXRlZ29yaWNhbEtleVR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY29hbGVzY2UoYSwgYiwgYykge1xuICAgIGlmIChhICE9PSB1bmRlZmluZWQpIHJldHVybiBhO1xuICAgIGlmIChiICE9PSB1bmRlZmluZWQpIHJldHVybiBiO1xuICAgIGlmIChjICE9PSB1bmRlZmluZWQpIHJldHVybiBjO1xufVxuXG5mdW5jdGlvbiBldmFsdWF0ZUNhdGVnb3JpY2FsRnVuY3Rpb24ocGFyYW1ldGVycywgcHJvcGVydHlTcGVjLCBpbnB1dCwgaGFzaGVkU3RvcHMsIGtleVR5cGUpIHtcbiAgICBjb25zdCBldmFsdWF0ZWQgPSB0eXBlb2YgaW5wdXQgPT09IGtleVR5cGUgPyBoYXNoZWRTdG9wc1tpbnB1dF0gOiB1bmRlZmluZWQ7IC8vIEVuZm9yY2Ugc3RyaWN0IHR5cGluZyBvbiBpbnB1dFxuICAgIHJldHVybiBjb2FsZXNjZShldmFsdWF0ZWQsIHBhcmFtZXRlcnMuZGVmYXVsdCwgcHJvcGVydHlTcGVjLmRlZmF1bHQpO1xufVxuXG5mdW5jdGlvbiBldmFsdWF0ZUludGVydmFsRnVuY3Rpb24ocGFyYW1ldGVycywgcHJvcGVydHlTcGVjLCBpbnB1dCkge1xuICAgIC8vIEVkZ2UgY2FzZXNcbiAgICBpZiAoZ2V0VHlwZShpbnB1dCkgIT09ICdudW1iZXInKSByZXR1cm4gY29hbGVzY2UocGFyYW1ldGVycy5kZWZhdWx0LCBwcm9wZXJ0eVNwZWMuZGVmYXVsdCk7XG4gICAgY29uc3QgbiA9IHBhcmFtZXRlcnMuc3RvcHMubGVuZ3RoO1xuICAgIGlmIChuID09PSAxKSByZXR1cm4gcGFyYW1ldGVycy5zdG9wc1swXVsxXTtcbiAgICBpZiAoaW5wdXQgPD0gcGFyYW1ldGVycy5zdG9wc1swXVswXSkgcmV0dXJuIHBhcmFtZXRlcnMuc3RvcHNbMF1bMV07XG4gICAgaWYgKGlucHV0ID49IHBhcmFtZXRlcnMuc3RvcHNbbiAtIDFdWzBdKSByZXR1cm4gcGFyYW1ldGVycy5zdG9wc1tuIC0gMV1bMV07XG5cbiAgICBjb25zdCBpbmRleCA9IGZpbmRTdG9wTGVzc1RoYW5PckVxdWFsVG8ocGFyYW1ldGVycy5zdG9wcy5tYXAoKHN0b3ApID0+IHN0b3BbMF0pLCBpbnB1dCk7XG5cbiAgICByZXR1cm4gcGFyYW1ldGVycy5zdG9wc1tpbmRleF1bMV07XG59XG5cbmZ1bmN0aW9uIGV2YWx1YXRlRXhwb25lbnRpYWxGdW5jdGlvbihwYXJhbWV0ZXJzLCBwcm9wZXJ0eVNwZWMsIGlucHV0KSB7XG4gICAgY29uc3QgYmFzZSA9IHBhcmFtZXRlcnMuYmFzZSAhPT0gdW5kZWZpbmVkID8gcGFyYW1ldGVycy5iYXNlIDogMTtcblxuICAgIC8vIEVkZ2UgY2FzZXNcbiAgICBpZiAoZ2V0VHlwZShpbnB1dCkgIT09ICdudW1iZXInKSByZXR1cm4gY29hbGVzY2UocGFyYW1ldGVycy5kZWZhdWx0LCBwcm9wZXJ0eVNwZWMuZGVmYXVsdCk7XG4gICAgY29uc3QgbiA9IHBhcmFtZXRlcnMuc3RvcHMubGVuZ3RoO1xuICAgIGlmIChuID09PSAxKSByZXR1cm4gcGFyYW1ldGVycy5zdG9wc1swXVsxXTtcbiAgICBpZiAoaW5wdXQgPD0gcGFyYW1ldGVycy5zdG9wc1swXVswXSkgcmV0dXJuIHBhcmFtZXRlcnMuc3RvcHNbMF1bMV07XG4gICAgaWYgKGlucHV0ID49IHBhcmFtZXRlcnMuc3RvcHNbbiAtIDFdWzBdKSByZXR1cm4gcGFyYW1ldGVycy5zdG9wc1tuIC0gMV1bMV07XG5cbiAgICBjb25zdCBpbmRleCA9IGZpbmRTdG9wTGVzc1RoYW5PckVxdWFsVG8ocGFyYW1ldGVycy5zdG9wcy5tYXAoKHN0b3ApID0+IHN0b3BbMF0pLCBpbnB1dCk7XG4gICAgY29uc3QgdCA9IGludGVycG9sYXRpb25GYWN0b3IoXG4gICAgICAgIGlucHV0LCBiYXNlLFxuICAgICAgICBwYXJhbWV0ZXJzLnN0b3BzW2luZGV4XVswXSxcbiAgICAgICAgcGFyYW1ldGVycy5zdG9wc1tpbmRleCArIDFdWzBdKTtcblxuICAgIGNvbnN0IG91dHB1dExvd2VyID0gcGFyYW1ldGVycy5zdG9wc1tpbmRleF1bMV07XG4gICAgY29uc3Qgb3V0cHV0VXBwZXIgPSBwYXJhbWV0ZXJzLnN0b3BzW2luZGV4ICsgMV1bMV07XG4gICAgbGV0IGludGVycCA9IGludGVycG9sYXRlW3Byb3BlcnR5U3BlYy50eXBlXSB8fCBpZGVudGl0eUZ1bmN0aW9uOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGltcG9ydC9uYW1lc3BhY2VcblxuICAgIGlmIChwYXJhbWV0ZXJzLmNvbG9yU3BhY2UgJiYgcGFyYW1ldGVycy5jb2xvclNwYWNlICE9PSAncmdiJykge1xuICAgICAgICBjb25zdCBjb2xvcnNwYWNlID0gY29sb3JTcGFjZXNbcGFyYW1ldGVycy5jb2xvclNwYWNlXTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbXBvcnQvbmFtZXNwYWNlXG4gICAgICAgIGludGVycCA9IChhLCBiKSA9PiBjb2xvcnNwYWNlLnJldmVyc2UoY29sb3JzcGFjZS5pbnRlcnBvbGF0ZShjb2xvcnNwYWNlLmZvcndhcmQoYSksIGNvbG9yc3BhY2UuZm9yd2FyZChiKSwgdCkpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3V0cHV0TG93ZXIuZXZhbHVhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGV2YWx1YXRlKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBldmFsdWF0ZWRMb3dlciA9IG91dHB1dExvd2VyLmV2YWx1YXRlLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZXZhbHVhdGVkVXBwZXIgPSBvdXRwdXRVcHBlci5ldmFsdWF0ZS5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgZmlsbC1vdXRsaW5lLWNvbG9yLCB3aGljaCBoYXMgbm8gc3BlYyBkZWZhdWx0LlxuICAgICAgICAgICAgICAgIGlmIChldmFsdWF0ZWRMb3dlciA9PT0gdW5kZWZpbmVkIHx8IGV2YWx1YXRlZFVwcGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGludGVycChldmFsdWF0ZWRMb3dlciwgZXZhbHVhdGVkVXBwZXIsIHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBpbnRlcnAob3V0cHV0TG93ZXIsIG91dHB1dFVwcGVyLCB0KTtcbn1cblxuZnVuY3Rpb24gZXZhbHVhdGVJZGVudGl0eUZ1bmN0aW9uKHBhcmFtZXRlcnMsIHByb3BlcnR5U3BlYywgaW5wdXQpIHtcbiAgICBpZiAocHJvcGVydHlTcGVjLnR5cGUgPT09ICdjb2xvcicpIHtcbiAgICAgICAgaW5wdXQgPSBDb2xvci5wYXJzZShpbnB1dCk7XG4gICAgfSBlbHNlIGlmIChwcm9wZXJ0eVNwZWMudHlwZSA9PT0gJ2Zvcm1hdHRlZCcpIHtcbiAgICAgICAgaW5wdXQgPSBGb3JtYXR0ZWQuZnJvbVN0cmluZyhpbnB1dC50b1N0cmluZygpKTtcbiAgICB9IGVsc2UgaWYgKHByb3BlcnR5U3BlYy50eXBlID09PSAncmVzb2x2ZWRJbWFnZScpIHtcbiAgICAgICAgaW5wdXQgPSBSZXNvbHZlZEltYWdlLmZyb21TdHJpbmcoaW5wdXQudG9TdHJpbmcoKSk7XG4gICAgfSBlbHNlIGlmIChnZXRUeXBlKGlucHV0KSAhPT0gcHJvcGVydHlTcGVjLnR5cGUgJiYgKHByb3BlcnR5U3BlYy50eXBlICE9PSAnZW51bScgfHwgIXByb3BlcnR5U3BlYy52YWx1ZXNbaW5wdXRdKSkge1xuICAgICAgICBpbnB1dCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGNvYWxlc2NlKGlucHV0LCBwYXJhbWV0ZXJzLmRlZmF1bHQsIHByb3BlcnR5U3BlYy5kZWZhdWx0KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcmF0aW8gdGhhdCBjYW4gYmUgdXNlZCB0byBpbnRlcnBvbGF0ZSBiZXR3ZWVuIGV4cG9uZW50aWFsIGZ1bmN0aW9uXG4gKiBzdG9wcy5cbiAqXG4gKiBIb3cgaXQgd29ya3M6XG4gKiBUd28gY29uc2VjdXRpdmUgc3RvcCB2YWx1ZXMgZGVmaW5lIGEgKHNjYWxlZCBhbmQgc2hpZnRlZCkgZXhwb25lbnRpYWxcbiAqIGZ1bmN0aW9uIGBmKHgpID0gYSAqIGJhc2VeeCArIGJgLCB3aGVyZSBgYmFzZWAgaXMgdGhlIHVzZXItc3BlY2lmaWVkIGJhc2UsXG4gKiBhbmQgYGFgIGFuZCBgYmAgYXJlIGNvbnN0YW50cyBhZmZvcmRpbmcgc3VmZmljaWVudCBkZWdyZWVzIG9mIGZyZWVkb20gdG8gZml0XG4gKiB0aGUgZnVuY3Rpb24gdG8gdGhlIGdpdmVuIHN0b3BzLlxuICpcbiAqIEhlcmUncyBhIGJpdCBvZiBhbGdlYnJhIHRoYXQgbGV0cyB1cyBjb21wdXRlIGBmKHgpYCBkaXJlY3RseSBmcm9tIHRoZSBzdG9wXG4gKiB2YWx1ZXMgd2l0aG91dCBleHBsaWNpdGx5IHNvbHZpbmcgZm9yIGBhYCBhbmQgYGJgOlxuICpcbiAqIEZpcnN0IHN0b3AgdmFsdWU6IGBmKHgwKSA9IHkwID0gYSAqIGJhc2VeeDAgKyBiYFxuICogU2Vjb25kIHN0b3AgdmFsdWU6IGBmKHgxKSA9IHkxID0gYSAqIGJhc2VeeDEgKyBiYFxuICogPT4gYHkxIC0geTAgPSBhKGJhc2VeeDEgLSBiYXNlXngwKWBcbiAqID0+IGBhID0gKHkxIC0geTApLyhiYXNlXngxIC0gYmFzZV54MClgXG4gKlxuICogRGVzaXJlZCB2YWx1ZTogYGYoeCkgPSB5ID0gYSAqIGJhc2VeeCArIGJgXG4gKiA9PiBgZih4KSA9IHkwICsgYSAqIChiYXNlXnggLSBiYXNlXngwKWBcbiAqXG4gKiBGcm9tIHRoZSBhYm92ZSwgd2UgY2FuIHJlcGxhY2UgdGhlIGBhYCBpbiBgYSAqIChiYXNlXnggLSBiYXNlXngwKWAgYW5kIGRvIGFcbiAqIGxpdHRsZSBhbGdlYnJhOlxuICogYGBgXG4gKiBhICogKGJhc2VeeCAtIGJhc2VeeDApID0gKHkxIC0geTApLyhiYXNlXngxIC0gYmFzZV54MCkgKiAoYmFzZV54IC0gYmFzZV54MClcbiAqICAgICAgICAgICAgICAgICAgICAgPSAoeTEgLSB5MCkgKiAoYmFzZV54IC0gYmFzZV54MCkgLyAoYmFzZV54MSAtIGJhc2VeeDApXG4gKiBgYGBcbiAqXG4gKiBJZiB3ZSBsZXQgYChiYXNlXnggLSBiYXNlXngwKSAvIChiYXNlXngxIGJhc2VeeDApYCwgdGhlbiB3ZSBoYXZlXG4gKiBgZih4KSA9IHkwICsgKHkxIC0geTApICogcmF0aW9gLiAgSW4gb3RoZXIgd29yZHMsIGByYXRpb2AgbWF5IGJlIHRyZWF0ZWQgYXNcbiAqIGFuIGludGVycG9sYXRpb24gZmFjdG9yIGJldHdlZW4gdGhlIHR3byBzdG9wcycgb3V0cHV0IHZhbHVlcy5cbiAqXG4gKiAoTm90ZTogYSBzbGlnaHRseSBkaWZmZXJlbnQgZm9ybSBmb3IgYHJhdGlvYCxcbiAqIGAoYmFzZV4oeC14MCkgLSAxKSAvIChiYXNlXih4MS14MCkgLSAxKSBgLCBpcyBlcXVpdmFsZW50LCBidXQgcmVxdWlyZXMgZmV3ZXJcbiAqIGV4cGVuc2l2ZSBgTWF0aC5wb3coKWAgb3BlcmF0aW9ucy4pXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW50ZXJwb2xhdGlvbkZhY3RvcihpbnB1dCwgYmFzZSwgbG93ZXJWYWx1ZSwgdXBwZXJWYWx1ZSkge1xuICAgIGNvbnN0IGRpZmZlcmVuY2UgPSB1cHBlclZhbHVlIC0gbG93ZXJWYWx1ZTtcbiAgICBjb25zdCBwcm9ncmVzcyA9IGlucHV0IC0gbG93ZXJWYWx1ZTtcblxuICAgIGlmIChkaWZmZXJlbmNlID09PSAwKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH0gZWxzZSBpZiAoYmFzZSA9PT0gMSkge1xuICAgICAgICByZXR1cm4gcHJvZ3Jlc3MgLyBkaWZmZXJlbmNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoTWF0aC5wb3coYmFzZSwgcHJvZ3Jlc3MpIC0gMSkgLyAoTWF0aC5wb3coYmFzZSwgZGlmZmVyZW5jZSkgLSAxKTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCBleHRlbmQgZnJvbSAnLi4vdXRpbC9leHRlbmQnO1xuaW1wb3J0IFBhcnNpbmdFcnJvciBmcm9tICcuL3BhcnNpbmdfZXJyb3InO1xuaW1wb3J0IFBhcnNpbmdDb250ZXh0IGZyb20gJy4vcGFyc2luZ19jb250ZXh0JztcbmltcG9ydCBFdmFsdWF0aW9uQ29udGV4dCBmcm9tICcuL2V2YWx1YXRpb25fY29udGV4dCc7XG5pbXBvcnQgQ29tcG91bmRFeHByZXNzaW9uIGZyb20gJy4vY29tcG91bmRfZXhwcmVzc2lvbic7XG5pbXBvcnQgU3RlcCBmcm9tICcuL2RlZmluaXRpb25zL3N0ZXAnO1xuaW1wb3J0IEludGVycG9sYXRlIGZyb20gJy4vZGVmaW5pdGlvbnMvaW50ZXJwb2xhdGUnO1xuaW1wb3J0IENvYWxlc2NlIGZyb20gJy4vZGVmaW5pdGlvbnMvY29hbGVzY2UnO1xuaW1wb3J0IExldCBmcm9tICcuL2RlZmluaXRpb25zL2xldCc7XG5pbXBvcnQgZGVmaW5pdGlvbnMgZnJvbSAnLi9kZWZpbml0aW9ucyc7XG5pbXBvcnQgKiBhcyBpc0NvbnN0YW50IGZyb20gJy4vaXNfY29uc3RhbnQnO1xuaW1wb3J0IFJ1bnRpbWVFcnJvciBmcm9tICcuL3J1bnRpbWVfZXJyb3InO1xuaW1wb3J0IHtzdWNjZXNzLCBlcnJvcn0gZnJvbSAnLi4vdXRpbC9yZXN1bHQnO1xuaW1wb3J0IHtzdXBwb3J0c1Byb3BlcnR5RXhwcmVzc2lvbiwgc3VwcG9ydHNab29tRXhwcmVzc2lvbiwgc3VwcG9ydHNJbnRlcnBvbGF0aW9ufSBmcm9tICcuLi91dGlsL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgdHlwZSB7VHlwZSwgRXZhbHVhdGlvbktpbmR9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHR5cGUge1ZhbHVlfSBmcm9tICcuL3ZhbHVlcyc7XG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIHtTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYyc7XG5pbXBvcnQgdHlwZSB7UmVzdWx0fSBmcm9tICcuLi91dGlsL3Jlc3VsdCc7XG5pbXBvcnQgdHlwZSB7SW50ZXJwb2xhdGlvblR5cGV9IGZyb20gJy4vZGVmaW5pdGlvbnMvaW50ZXJwb2xhdGUnO1xuaW1wb3J0IHR5cGUge1Byb3BlcnR5VmFsdWVTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7Rm9ybWF0dGVkU2VjdGlvbn0gZnJvbSAnLi90eXBlcy9mb3JtYXR0ZWQnO1xuaW1wb3J0IHR5cGUgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSB7Q2Fub25pY2FsVGlsZUlEfSBmcm9tICcuLi8uLi9zb3VyY2UvdGlsZV9pZCc7XG5cbmV4cG9ydCB0eXBlIEZlYXR1cmUgPSB7XG4gICAgK3R5cGU6IDEgfCAyIHwgMyB8ICdVbmtub3duJyB8ICdQb2ludCcgfCAnTXVsdGlQb2ludCcgfCAnTGluZVN0cmluZycgfCAnTXVsdGlMaW5lU3RyaW5nJyB8ICdQb2x5Z29uJyB8ICdNdWx0aVBvbHlnb24nLFxuICAgICtpZD86IGFueSxcbiAgICArcHJvcGVydGllczoge1tfOiBzdHJpbmddOiBhbnl9LFxuICAgICtwYXR0ZXJucz86IHtbXzogc3RyaW5nXToge1wibWluXCI6IHN0cmluZywgXCJtaWRcIjogc3RyaW5nLCBcIm1heFwiOiBzdHJpbmd9fSxcbiAgICArZ2VvbWV0cnk/OiBBcnJheTxBcnJheTxQb2ludD4+XG59O1xuXG5leHBvcnQgdHlwZSBGZWF0dXJlU3RhdGUgPSB7W186IHN0cmluZ106IGFueX07XG5cbmV4cG9ydCB0eXBlIEdsb2JhbFByb3BlcnRpZXMgPSAkUmVhZE9ubHk8e1xuICAgIHpvb206IG51bWJlcixcbiAgICBoZWF0bWFwRGVuc2l0eT86IG51bWJlcixcbiAgICBsaW5lUHJvZ3Jlc3M/OiBudW1iZXIsXG4gICAgaXNTdXBwb3J0ZWRTY3JpcHQ/OiAoXzogc3RyaW5nKSA9PiBib29sZWFuLFxuICAgIGFjY3VtdWxhdGVkPzogVmFsdWVcbn0+O1xuXG5leHBvcnQgY2xhc3MgU3R5bGVFeHByZXNzaW9uIHtcbiAgICBleHByZXNzaW9uOiBFeHByZXNzaW9uO1xuXG4gICAgX2V2YWx1YXRvcjogRXZhbHVhdGlvbkNvbnRleHQ7XG4gICAgX2RlZmF1bHRWYWx1ZTogVmFsdWU7XG4gICAgX3dhcm5pbmdIaXN0b3J5OiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn07XG4gICAgX2VudW1WYWx1ZXM6ID97W186IHN0cmluZ106IGFueX07XG5cbiAgICBjb25zdHJ1Y3RvcihleHByZXNzaW9uOiBFeHByZXNzaW9uLCBwcm9wZXJ0eVNwZWM6ID9TdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbikge1xuICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuICAgICAgICB0aGlzLl93YXJuaW5nSGlzdG9yeSA9IHt9O1xuICAgICAgICB0aGlzLl9ldmFsdWF0b3IgPSBuZXcgRXZhbHVhdGlvbkNvbnRleHQoKTtcbiAgICAgICAgdGhpcy5fZGVmYXVsdFZhbHVlID0gcHJvcGVydHlTcGVjID8gZ2V0RGVmYXVsdFZhbHVlKHByb3BlcnR5U3BlYykgOiBudWxsO1xuICAgICAgICB0aGlzLl9lbnVtVmFsdWVzID0gcHJvcGVydHlTcGVjICYmIHByb3BlcnR5U3BlYy50eXBlID09PSAnZW51bScgPyBwcm9wZXJ0eVNwZWMudmFsdWVzIDogbnVsbDtcbiAgICB9XG5cbiAgICBldmFsdWF0ZVdpdGhvdXRFcnJvckhhbmRsaW5nKGdsb2JhbHM6IEdsb2JhbFByb3BlcnRpZXMsIGZlYXR1cmU/OiBGZWF0dXJlLCBmZWF0dXJlU3RhdGU/OiBGZWF0dXJlU3RhdGUsIGNhbm9uaWNhbD86IENhbm9uaWNhbFRpbGVJRCwgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPiwgZm9ybWF0dGVkU2VjdGlvbj86IEZvcm1hdHRlZFNlY3Rpb24pOiBhbnkge1xuICAgICAgICB0aGlzLl9ldmFsdWF0b3IuZ2xvYmFscyA9IGdsb2JhbHM7XG4gICAgICAgIHRoaXMuX2V2YWx1YXRvci5mZWF0dXJlID0gZmVhdHVyZTtcbiAgICAgICAgdGhpcy5fZXZhbHVhdG9yLmZlYXR1cmVTdGF0ZSA9IGZlYXR1cmVTdGF0ZTtcbiAgICAgICAgdGhpcy5fZXZhbHVhdG9yLmNhbm9uaWNhbCA9IGNhbm9uaWNhbDtcbiAgICAgICAgdGhpcy5fZXZhbHVhdG9yLmF2YWlsYWJsZUltYWdlcyA9IGF2YWlsYWJsZUltYWdlcyB8fCBudWxsO1xuICAgICAgICB0aGlzLl9ldmFsdWF0b3IuZm9ybWF0dGVkU2VjdGlvbiA9IGZvcm1hdHRlZFNlY3Rpb247XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZSh0aGlzLl9ldmFsdWF0b3IpO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGdsb2JhbHM6IEdsb2JhbFByb3BlcnRpZXMsIGZlYXR1cmU/OiBGZWF0dXJlLCBmZWF0dXJlU3RhdGU/OiBGZWF0dXJlU3RhdGUsIGNhbm9uaWNhbD86IENhbm9uaWNhbFRpbGVJRCwgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPiwgZm9ybWF0dGVkU2VjdGlvbj86IEZvcm1hdHRlZFNlY3Rpb24pOiBhbnkge1xuICAgICAgICB0aGlzLl9ldmFsdWF0b3IuZ2xvYmFscyA9IGdsb2JhbHM7XG4gICAgICAgIHRoaXMuX2V2YWx1YXRvci5mZWF0dXJlID0gZmVhdHVyZSB8fCBudWxsO1xuICAgICAgICB0aGlzLl9ldmFsdWF0b3IuZmVhdHVyZVN0YXRlID0gZmVhdHVyZVN0YXRlIHx8IG51bGw7XG4gICAgICAgIHRoaXMuX2V2YWx1YXRvci5jYW5vbmljYWwgPSBjYW5vbmljYWw7XG4gICAgICAgIHRoaXMuX2V2YWx1YXRvci5hdmFpbGFibGVJbWFnZXMgPSBhdmFpbGFibGVJbWFnZXMgfHwgbnVsbDtcbiAgICAgICAgdGhpcy5fZXZhbHVhdG9yLmZvcm1hdHRlZFNlY3Rpb24gPSBmb3JtYXR0ZWRTZWN0aW9uIHx8IG51bGw7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZSh0aGlzLl9ldmFsdWF0b3IpO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCB8fCAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicgJiYgdmFsICE9PSB2YWwpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9lbnVtVmFsdWVzICYmICEodmFsIGluIHRoaXMuX2VudW1WYWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihgRXhwZWN0ZWQgdmFsdWUgdG8gYmUgb25lIG9mICR7T2JqZWN0LmtleXModGhpcy5fZW51bVZhbHVlcykubWFwKHYgPT4gSlNPTi5zdHJpbmdpZnkodikpLmpvaW4oJywgJyl9LCBidXQgZm91bmQgJHtKU09OLnN0cmluZ2lmeSh2YWwpfSBpbnN0ZWFkLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl93YXJuaW5nSGlzdG9yeVtlLm1lc3NhZ2VdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2FybmluZ0hpc3RvcnlbZS5tZXNzYWdlXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oZS5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFeHByZXNzaW9uKGV4cHJlc3Npb246IG1peGVkKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZXhwcmVzc2lvbikgJiYgZXhwcmVzc2lvbi5sZW5ndGggPiAwICYmXG4gICAgICAgIHR5cGVvZiBleHByZXNzaW9uWzBdID09PSAnc3RyaW5nJyAmJiBleHByZXNzaW9uWzBdIGluIGRlZmluaXRpb25zO1xufVxuXG4vKipcbiAqIFBhcnNlIGFuZCB0eXBlY2hlY2sgdGhlIGdpdmVuIHN0eWxlIHNwZWMgSlNPTiBleHByZXNzaW9uLiAgSWZcbiAqIG9wdGlvbnMuZGVmYXVsdFZhbHVlIGlzIHByb3ZpZGVkLCB0aGVuIHRoZSByZXN1bHRpbmcgU3R5bGVFeHByZXNzaW9uJ3NcbiAqIGBldmFsdWF0ZSgpYCBtZXRob2Qgd2lsbCBoYW5kbGUgZXJyb3JzIGJ5IGxvZ2dpbmcgYSB3YXJuaW5nIChvbmNlIHBlclxuICogbWVzc2FnZSkgYW5kIHJldHVybmluZyB0aGUgZGVmYXVsdCB2YWx1ZS4gIE90aGVyd2lzZSwgaXQgd2lsbCB0aHJvd1xuICogZXZhbHVhdGlvbiBlcnJvcnMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUV4cHJlc3Npb24oZXhwcmVzc2lvbjogbWl4ZWQsIHByb3BlcnR5U3BlYzogP1N0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uKTogUmVzdWx0PFN0eWxlRXhwcmVzc2lvbiwgQXJyYXk8UGFyc2luZ0Vycm9yPj4ge1xuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBQYXJzaW5nQ29udGV4dChkZWZpbml0aW9ucywgW10sIHByb3BlcnR5U3BlYyA/IGdldEV4cGVjdGVkVHlwZShwcm9wZXJ0eVNwZWMpIDogdW5kZWZpbmVkKTtcblxuICAgIC8vIEZvciBzdHJpbmctdmFsdWVkIHByb3BlcnRpZXMsIGNvZXJjZSB0byBzdHJpbmcgYXQgdGhlIHRvcCBsZXZlbCByYXRoZXIgdGhhbiBhc3NlcnRpbmcuXG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2VyLnBhcnNlKGV4cHJlc3Npb24sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsXG4gICAgICAgIHByb3BlcnR5U3BlYyAmJiBwcm9wZXJ0eVNwZWMudHlwZSA9PT0gJ3N0cmluZycgPyB7dHlwZUFubm90YXRpb246ICdjb2VyY2UnfSA6IHVuZGVmaW5lZCk7XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICBhc3NlcnQocGFyc2VyLmVycm9ycy5sZW5ndGggPiAwKTtcbiAgICAgICAgcmV0dXJuIGVycm9yKHBhcnNlci5lcnJvcnMpO1xuICAgIH1cblxuICAgIHJldHVybiBzdWNjZXNzKG5ldyBTdHlsZUV4cHJlc3Npb24ocGFyc2VkLCBwcm9wZXJ0eVNwZWMpKTtcbn1cblxuZXhwb3J0IGNsYXNzIFpvb21Db25zdGFudEV4cHJlc3Npb248S2luZDogRXZhbHVhdGlvbktpbmQ+IHtcbiAgICBraW5kOiBLaW5kO1xuICAgIGlzU3RhdGVEZXBlbmRlbnQ6IGJvb2xlYW47XG4gICAgX3N0eWxlRXhwcmVzc2lvbjogU3R5bGVFeHByZXNzaW9uO1xuXG4gICAgY29uc3RydWN0b3Ioa2luZDogS2luZCwgZXhwcmVzc2lvbjogU3R5bGVFeHByZXNzaW9uKSB7XG4gICAgICAgIHRoaXMua2luZCA9IGtpbmQ7XG4gICAgICAgIHRoaXMuX3N0eWxlRXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG4gICAgICAgIHRoaXMuaXNTdGF0ZURlcGVuZGVudCA9IGtpbmQgIT09ICgnY29uc3RhbnQnOiBFdmFsdWF0aW9uS2luZCkgJiYgIWlzQ29uc3RhbnQuaXNTdGF0ZUNvbnN0YW50KGV4cHJlc3Npb24uZXhwcmVzc2lvbik7XG4gICAgfVxuXG4gICAgZXZhbHVhdGVXaXRob3V0RXJyb3JIYW5kbGluZyhnbG9iYWxzOiBHbG9iYWxQcm9wZXJ0aWVzLCBmZWF0dXJlPzogRmVhdHVyZSwgZmVhdHVyZVN0YXRlPzogRmVhdHVyZVN0YXRlLCBjYW5vbmljYWw/OiBDYW5vbmljYWxUaWxlSUQsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4sIGZvcm1hdHRlZFNlY3Rpb24/OiBGb3JtYXR0ZWRTZWN0aW9uKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0eWxlRXhwcmVzc2lvbi5ldmFsdWF0ZVdpdGhvdXRFcnJvckhhbmRsaW5nKGdsb2JhbHMsIGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSwgY2Fub25pY2FsLCBhdmFpbGFibGVJbWFnZXMsIGZvcm1hdHRlZFNlY3Rpb24pO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGdsb2JhbHM6IEdsb2JhbFByb3BlcnRpZXMsIGZlYXR1cmU/OiBGZWF0dXJlLCBmZWF0dXJlU3RhdGU/OiBGZWF0dXJlU3RhdGUsIGNhbm9uaWNhbD86IENhbm9uaWNhbFRpbGVJRCwgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPiwgZm9ybWF0dGVkU2VjdGlvbj86IEZvcm1hdHRlZFNlY3Rpb24pOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3R5bGVFeHByZXNzaW9uLmV2YWx1YXRlKGdsb2JhbHMsIGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSwgY2Fub25pY2FsLCBhdmFpbGFibGVJbWFnZXMsIGZvcm1hdHRlZFNlY3Rpb24pO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFpvb21EZXBlbmRlbnRFeHByZXNzaW9uPEtpbmQ6IEV2YWx1YXRpb25LaW5kPiB7XG4gICAga2luZDogS2luZDtcbiAgICB6b29tU3RvcHM6IEFycmF5PG51bWJlcj47XG4gICAgaXNTdGF0ZURlcGVuZGVudDogYm9vbGVhbjtcblxuICAgIF9zdHlsZUV4cHJlc3Npb246IFN0eWxlRXhwcmVzc2lvbjtcbiAgICBpbnRlcnBvbGF0aW9uVHlwZTogP0ludGVycG9sYXRpb25UeXBlO1xuXG4gICAgY29uc3RydWN0b3Ioa2luZDogS2luZCwgZXhwcmVzc2lvbjogU3R5bGVFeHByZXNzaW9uLCB6b29tU3RvcHM6IEFycmF5PG51bWJlcj4sIGludGVycG9sYXRpb25UeXBlPzogSW50ZXJwb2xhdGlvblR5cGUpIHtcbiAgICAgICAgdGhpcy5raW5kID0ga2luZDtcbiAgICAgICAgdGhpcy56b29tU3RvcHMgPSB6b29tU3RvcHM7XG4gICAgICAgIHRoaXMuX3N0eWxlRXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG4gICAgICAgIHRoaXMuaXNTdGF0ZURlcGVuZGVudCA9IGtpbmQgIT09ICgnY2FtZXJhJzogRXZhbHVhdGlvbktpbmQpICYmICFpc0NvbnN0YW50LmlzU3RhdGVDb25zdGFudChleHByZXNzaW9uLmV4cHJlc3Npb24pO1xuICAgICAgICB0aGlzLmludGVycG9sYXRpb25UeXBlID0gaW50ZXJwb2xhdGlvblR5cGU7XG4gICAgfVxuXG4gICAgZXZhbHVhdGVXaXRob3V0RXJyb3JIYW5kbGluZyhnbG9iYWxzOiBHbG9iYWxQcm9wZXJ0aWVzLCBmZWF0dXJlPzogRmVhdHVyZSwgZmVhdHVyZVN0YXRlPzogRmVhdHVyZVN0YXRlLCBjYW5vbmljYWw/OiBDYW5vbmljYWxUaWxlSUQsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4sIGZvcm1hdHRlZFNlY3Rpb24/OiBGb3JtYXR0ZWRTZWN0aW9uKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0eWxlRXhwcmVzc2lvbi5ldmFsdWF0ZVdpdGhvdXRFcnJvckhhbmRsaW5nKGdsb2JhbHMsIGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSwgY2Fub25pY2FsLCBhdmFpbGFibGVJbWFnZXMsIGZvcm1hdHRlZFNlY3Rpb24pO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGdsb2JhbHM6IEdsb2JhbFByb3BlcnRpZXMsIGZlYXR1cmU/OiBGZWF0dXJlLCBmZWF0dXJlU3RhdGU/OiBGZWF0dXJlU3RhdGUsIGNhbm9uaWNhbD86IENhbm9uaWNhbFRpbGVJRCwgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPiwgZm9ybWF0dGVkU2VjdGlvbj86IEZvcm1hdHRlZFNlY3Rpb24pOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3R5bGVFeHByZXNzaW9uLmV2YWx1YXRlKGdsb2JhbHMsIGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSwgY2Fub25pY2FsLCBhdmFpbGFibGVJbWFnZXMsIGZvcm1hdHRlZFNlY3Rpb24pO1xuICAgIH1cblxuICAgIGludGVycG9sYXRpb25GYWN0b3IoaW5wdXQ6IG51bWJlciwgbG93ZXI6IG51bWJlciwgdXBwZXI6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLmludGVycG9sYXRpb25UeXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gSW50ZXJwb2xhdGUuaW50ZXJwb2xhdGlvbkZhY3Rvcih0aGlzLmludGVycG9sYXRpb25UeXBlLCBpbnB1dCwgbG93ZXIsIHVwcGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgdHlwZSBDb25zdGFudEV4cHJlc3Npb24gPSB7XG4gICAga2luZDogJ2NvbnN0YW50JyxcbiAgICArZXZhbHVhdGU6IChnbG9iYWxzOiBHbG9iYWxQcm9wZXJ0aWVzLCBmZWF0dXJlPzogRmVhdHVyZSwgZmVhdHVyZVN0YXRlPzogRmVhdHVyZVN0YXRlLCBjYW5vbmljYWw/OiBDYW5vbmljYWxUaWxlSUQsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4pID0+IGFueSxcbn1cblxuZXhwb3J0IHR5cGUgU291cmNlRXhwcmVzc2lvbiA9IHtcbiAgICBraW5kOiAnc291cmNlJyxcbiAgICBpc1N0YXRlRGVwZW5kZW50OiBib29sZWFuLFxuICAgICtldmFsdWF0ZTogKGdsb2JhbHM6IEdsb2JhbFByb3BlcnRpZXMsIGZlYXR1cmU/OiBGZWF0dXJlLCBmZWF0dXJlU3RhdGU/OiBGZWF0dXJlU3RhdGUsIGNhbm9uaWNhbD86IENhbm9uaWNhbFRpbGVJRCwgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPiwgZm9ybWF0dGVkU2VjdGlvbj86IEZvcm1hdHRlZFNlY3Rpb24pID0+IGFueSxcbn07XG5cbmV4cG9ydCB0eXBlIENhbWVyYUV4cHJlc3Npb24gPSB7XG4gICAga2luZDogJ2NhbWVyYScsXG4gICAgK2V2YWx1YXRlOiAoZ2xvYmFsczogR2xvYmFsUHJvcGVydGllcywgZmVhdHVyZT86IEZlYXR1cmUsIGZlYXR1cmVTdGF0ZT86IEZlYXR1cmVTdGF0ZSwgY2Fub25pY2FsPzogQ2Fub25pY2FsVGlsZUlELCBhdmFpbGFibGVJbWFnZXM/OiBBcnJheTxzdHJpbmc+KSA9PiBhbnksXG4gICAgK2ludGVycG9sYXRpb25GYWN0b3I6IChpbnB1dDogbnVtYmVyLCBsb3dlcjogbnVtYmVyLCB1cHBlcjogbnVtYmVyKSA9PiBudW1iZXIsXG4gICAgem9vbVN0b3BzOiBBcnJheTxudW1iZXI+LFxuICAgIGludGVycG9sYXRpb25UeXBlOiA/SW50ZXJwb2xhdGlvblR5cGVcbn07XG5cbmV4cG9ydCB0eXBlIENvbXBvc2l0ZUV4cHJlc3Npb24gPSB7XG4gICAga2luZDogJ2NvbXBvc2l0ZScsXG4gICAgaXNTdGF0ZURlcGVuZGVudDogYm9vbGVhbixcbiAgICArZXZhbHVhdGU6IChnbG9iYWxzOiBHbG9iYWxQcm9wZXJ0aWVzLCBmZWF0dXJlPzogRmVhdHVyZSwgZmVhdHVyZVN0YXRlPzogRmVhdHVyZVN0YXRlLCBjYW5vbmljYWw/OiBDYW5vbmljYWxUaWxlSUQsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4sIGZvcm1hdHRlZFNlY3Rpb24/OiBGb3JtYXR0ZWRTZWN0aW9uKSA9PiBhbnksXG4gICAgK2ludGVycG9sYXRpb25GYWN0b3I6IChpbnB1dDogbnVtYmVyLCBsb3dlcjogbnVtYmVyLCB1cHBlcjogbnVtYmVyKSA9PiBudW1iZXIsXG4gICAgem9vbVN0b3BzOiBBcnJheTxudW1iZXI+LFxuICAgIGludGVycG9sYXRpb25UeXBlOiA/SW50ZXJwb2xhdGlvblR5cGVcbn07XG5cbmV4cG9ydCB0eXBlIFN0eWxlUHJvcGVydHlFeHByZXNzaW9uID1cbiAgICB8IENvbnN0YW50RXhwcmVzc2lvblxuICAgIHwgU291cmNlRXhwcmVzc2lvblxuICAgIHwgQ2FtZXJhRXhwcmVzc2lvblxuICAgIHwgQ29tcG9zaXRlRXhwcmVzc2lvbjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByb3BlcnR5RXhwcmVzc2lvbihleHByZXNzaW9uOiBtaXhlZCwgcHJvcGVydHlTcGVjOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbik6IFJlc3VsdDxTdHlsZVByb3BlcnR5RXhwcmVzc2lvbiwgQXJyYXk8UGFyc2luZ0Vycm9yPj4ge1xuICAgIGV4cHJlc3Npb24gPSBjcmVhdGVFeHByZXNzaW9uKGV4cHJlc3Npb24sIHByb3BlcnR5U3BlYyk7XG4gICAgaWYgKGV4cHJlc3Npb24ucmVzdWx0ID09PSAnZXJyb3InKSB7XG4gICAgICAgIHJldHVybiBleHByZXNzaW9uO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZCA9IGV4cHJlc3Npb24udmFsdWUuZXhwcmVzc2lvbjtcblxuICAgIGNvbnN0IGlzRmVhdHVyZUNvbnN0YW50ID0gaXNDb25zdGFudC5pc0ZlYXR1cmVDb25zdGFudChwYXJzZWQpO1xuICAgIGlmICghaXNGZWF0dXJlQ29uc3RhbnQgJiYgIXN1cHBvcnRzUHJvcGVydHlFeHByZXNzaW9uKHByb3BlcnR5U3BlYykpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yKFtuZXcgUGFyc2luZ0Vycm9yKCcnLCAnZGF0YSBleHByZXNzaW9ucyBub3Qgc3VwcG9ydGVkJyldKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc1pvb21Db25zdGFudCA9IGlzQ29uc3RhbnQuaXNHbG9iYWxQcm9wZXJ0eUNvbnN0YW50KHBhcnNlZCwgWyd6b29tJ10pO1xuICAgIGlmICghaXNab29tQ29uc3RhbnQgJiYgIXN1cHBvcnRzWm9vbUV4cHJlc3Npb24ocHJvcGVydHlTcGVjKSkge1xuICAgICAgICByZXR1cm4gZXJyb3IoW25ldyBQYXJzaW5nRXJyb3IoJycsICd6b29tIGV4cHJlc3Npb25zIG5vdCBzdXBwb3J0ZWQnKV0pO1xuICAgIH1cblxuICAgIGNvbnN0IHpvb21DdXJ2ZSA9IGZpbmRab29tQ3VydmUocGFyc2VkKTtcbiAgICBpZiAoIXpvb21DdXJ2ZSAmJiAhaXNab29tQ29uc3RhbnQpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yKFtuZXcgUGFyc2luZ0Vycm9yKCcnLCAnXCJ6b29tXCIgZXhwcmVzc2lvbiBtYXkgb25seSBiZSB1c2VkIGFzIGlucHV0IHRvIGEgdG9wLWxldmVsIFwic3RlcFwiIG9yIFwiaW50ZXJwb2xhdGVcIiBleHByZXNzaW9uLicpXSk7XG4gICAgfSBlbHNlIGlmICh6b29tQ3VydmUgaW5zdGFuY2VvZiBQYXJzaW5nRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yKFt6b29tQ3VydmVdKTtcbiAgICB9IGVsc2UgaWYgKHpvb21DdXJ2ZSBpbnN0YW5jZW9mIEludGVycG9sYXRlICYmICFzdXBwb3J0c0ludGVycG9sYXRpb24ocHJvcGVydHlTcGVjKSkge1xuICAgICAgICByZXR1cm4gZXJyb3IoW25ldyBQYXJzaW5nRXJyb3IoJycsICdcImludGVycG9sYXRlXCIgZXhwcmVzc2lvbnMgY2Fubm90IGJlIHVzZWQgd2l0aCB0aGlzIHByb3BlcnR5JyldKTtcbiAgICB9XG5cbiAgICBpZiAoIXpvb21DdXJ2ZSkge1xuICAgICAgICByZXR1cm4gc3VjY2Vzcyhpc0ZlYXR1cmVDb25zdGFudCA/XG4gICAgICAgICAgICAobmV3IFpvb21Db25zdGFudEV4cHJlc3Npb24oJ2NvbnN0YW50JywgZXhwcmVzc2lvbi52YWx1ZSk6IENvbnN0YW50RXhwcmVzc2lvbikgOlxuICAgICAgICAgICAgKG5ldyBab29tQ29uc3RhbnRFeHByZXNzaW9uKCdzb3VyY2UnLCBleHByZXNzaW9uLnZhbHVlKTogU291cmNlRXhwcmVzc2lvbikpO1xuICAgIH1cblxuICAgIGNvbnN0IGludGVycG9sYXRpb25UeXBlID0gem9vbUN1cnZlIGluc3RhbmNlb2YgSW50ZXJwb2xhdGUgPyB6b29tQ3VydmUuaW50ZXJwb2xhdGlvbiA6IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiBzdWNjZXNzKGlzRmVhdHVyZUNvbnN0YW50ID9cbiAgICAgICAgKG5ldyBab29tRGVwZW5kZW50RXhwcmVzc2lvbignY2FtZXJhJywgZXhwcmVzc2lvbi52YWx1ZSwgem9vbUN1cnZlLmxhYmVscywgaW50ZXJwb2xhdGlvblR5cGUpOiBDYW1lcmFFeHByZXNzaW9uKSA6XG4gICAgICAgIChuZXcgWm9vbURlcGVuZGVudEV4cHJlc3Npb24oJ2NvbXBvc2l0ZScsIGV4cHJlc3Npb24udmFsdWUsIHpvb21DdXJ2ZS5sYWJlbHMsIGludGVycG9sYXRpb25UeXBlKTogQ29tcG9zaXRlRXhwcmVzc2lvbikpO1xufVxuXG5pbXBvcnQge2lzRnVuY3Rpb24sIGNyZWF0ZUZ1bmN0aW9ufSBmcm9tICcuLi9mdW5jdGlvbic7XG5pbXBvcnQge0NvbG9yfSBmcm9tICcuL3ZhbHVlcyc7XG5cbi8vIHNlcmlhbGl6YXRpb24gd3JhcHBlciBmb3Igb2xkLXN0eWxlIHN0b3AgZnVuY3Rpb25zIG5vcm1hbGl6ZWQgdG8gdGhlXG4vLyBleHByZXNzaW9uIGludGVyZmFjZVxuZXhwb3J0IGNsYXNzIFN0eWxlUHJvcGVydHlGdW5jdGlvbjxUPiB7XG4gICAgX3BhcmFtZXRlcnM6IFByb3BlcnR5VmFsdWVTcGVjaWZpY2F0aW9uPFQ+O1xuICAgIF9zcGVjaWZpY2F0aW9uOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbjtcblxuICAgIGtpbmQ6IEV2YWx1YXRpb25LaW5kO1xuICAgIGV2YWx1YXRlOiAoZ2xvYmFsczogR2xvYmFsUHJvcGVydGllcywgZmVhdHVyZT86IEZlYXR1cmUpID0+IGFueTtcbiAgICBpbnRlcnBvbGF0aW9uRmFjdG9yOiA/KGlucHV0OiBudW1iZXIsIGxvd2VyOiBudW1iZXIsIHVwcGVyOiBudW1iZXIpID0+IG51bWJlcjtcbiAgICB6b29tU3RvcHM6ID9BcnJheTxudW1iZXI+O1xuXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVyczogUHJvcGVydHlWYWx1ZVNwZWNpZmljYXRpb248VD4sIHNwZWNpZmljYXRpb246IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHRoaXMuX3BhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xuICAgICAgICB0aGlzLl9zcGVjaWZpY2F0aW9uID0gc3BlY2lmaWNhdGlvbjtcbiAgICAgICAgZXh0ZW5kKHRoaXMsIGNyZWF0ZUZ1bmN0aW9uKHRoaXMuX3BhcmFtZXRlcnMsIHRoaXMuX3NwZWNpZmljYXRpb24pKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZGVzZXJpYWxpemUoc2VyaWFsaXplZDoge19wYXJhbWV0ZXJzOiBQcm9wZXJ0eVZhbHVlU3BlY2lmaWNhdGlvbjxUPiwgX3NwZWNpZmljYXRpb246IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9ufSkge1xuICAgICAgICByZXR1cm4gKChuZXcgU3R5bGVQcm9wZXJ0eUZ1bmN0aW9uKHNlcmlhbGl6ZWQuX3BhcmFtZXRlcnMsIHNlcmlhbGl6ZWQuX3NwZWNpZmljYXRpb24pKTogU3R5bGVQcm9wZXJ0eUZ1bmN0aW9uPFQ+KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgc2VyaWFsaXplKGlucHV0OiBTdHlsZVByb3BlcnR5RnVuY3Rpb248VD4pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIF9wYXJhbWV0ZXJzOiBpbnB1dC5fcGFyYW1ldGVycyxcbiAgICAgICAgICAgIF9zcGVjaWZpY2F0aW9uOiBpbnB1dC5fc3BlY2lmaWNhdGlvblxuICAgICAgICB9O1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVByb3BlcnR5RXhwcmVzc2lvbjxUPih2YWx1ZTogUHJvcGVydHlWYWx1ZVNwZWNpZmljYXRpb248VD4sIHNwZWNpZmljYXRpb246IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uKTogU3R5bGVQcm9wZXJ0eUV4cHJlc3Npb24ge1xuICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gKG5ldyBTdHlsZVByb3BlcnR5RnVuY3Rpb24odmFsdWUsIHNwZWNpZmljYXRpb24pOiBhbnkpO1xuXG4gICAgfSBlbHNlIGlmIChpc0V4cHJlc3Npb24odmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSBjcmVhdGVQcm9wZXJ0eUV4cHJlc3Npb24odmFsdWUsIHNwZWNpZmljYXRpb24pO1xuICAgICAgICBpZiAoZXhwcmVzc2lvbi5yZXN1bHQgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgc2hvdWxkIGhhdmUgYmVlbiBjYXVnaHQgaW4gdmFsaWRhdGlvblxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGV4cHJlc3Npb24udmFsdWUubWFwKGVyciA9PiBgJHtlcnIua2V5fTogJHtlcnIubWVzc2FnZX1gKS5qb2luKCcsICcpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXhwcmVzc2lvbi52YWx1ZTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBjb25zdGFudDogYW55ID0gdmFsdWU7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHNwZWNpZmljYXRpb24udHlwZSA9PT0gJ2NvbG9yJykge1xuICAgICAgICAgICAgY29uc3RhbnQgPSBDb2xvci5wYXJzZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtpbmQ6ICdjb25zdGFudCcsXG4gICAgICAgICAgICBldmFsdWF0ZTogKCkgPT4gY29uc3RhbnRcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbi8vIFpvb20tZGVwZW5kZW50IGV4cHJlc3Npb25zIG1heSBvbmx5IHVzZSBbXCJ6b29tXCJdIGFzIHRoZSBpbnB1dCB0byBhIHRvcC1sZXZlbCBcInN0ZXBcIiBvciBcImludGVycG9sYXRlXCJcbi8vIGV4cHJlc3Npb24gKGNvbGxlY3RpdmVseSByZWZlcnJlZCB0byBhcyBhIFwiY3VydmVcIikuIFRoZSBjdXJ2ZSBtYXkgYmUgd3JhcHBlZCBpbiBvbmUgb3IgbW9yZSBcImxldFwiIG9yXG4vLyBcImNvYWxlc2NlXCIgZXhwcmVzc2lvbnMuXG5mdW5jdGlvbiBmaW5kWm9vbUN1cnZlKGV4cHJlc3Npb246IEV4cHJlc3Npb24pOiBTdGVwIHwgSW50ZXJwb2xhdGUgfCBQYXJzaW5nRXJyb3IgfCBudWxsIHtcbiAgICBsZXQgcmVzdWx0ID0gbnVsbDtcbiAgICBpZiAoZXhwcmVzc2lvbiBpbnN0YW5jZW9mIExldCkge1xuICAgICAgICByZXN1bHQgPSBmaW5kWm9vbUN1cnZlKGV4cHJlc3Npb24ucmVzdWx0KTtcblxuICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbiBpbnN0YW5jZW9mIENvYWxlc2NlKSB7XG4gICAgICAgIGZvciAoY29uc3QgYXJnIG9mIGV4cHJlc3Npb24uYXJncykge1xuICAgICAgICAgICAgcmVzdWx0ID0gZmluZFpvb21DdXJ2ZShhcmcpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKChleHByZXNzaW9uIGluc3RhbmNlb2YgU3RlcCB8fCBleHByZXNzaW9uIGluc3RhbmNlb2YgSW50ZXJwb2xhdGUpICYmXG4gICAgICAgIGV4cHJlc3Npb24uaW5wdXQgaW5zdGFuY2VvZiBDb21wb3VuZEV4cHJlc3Npb24gJiZcbiAgICAgICAgZXhwcmVzc2lvbi5pbnB1dC5uYW1lID09PSAnem9vbScpIHtcblxuICAgICAgICByZXN1bHQgPSBleHByZXNzaW9uO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQYXJzaW5nRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBleHByZXNzaW9uLmVhY2hDaGlsZCgoY2hpbGQpID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGRSZXN1bHQgPSBmaW5kWm9vbUN1cnZlKGNoaWxkKTtcbiAgICAgICAgaWYgKGNoaWxkUmVzdWx0IGluc3RhbmNlb2YgUGFyc2luZ0Vycm9yKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBjaGlsZFJlc3VsdDtcbiAgICAgICAgfSBlbHNlIGlmICghcmVzdWx0ICYmIGNoaWxkUmVzdWx0KSB7XG4gICAgICAgICAgICByZXN1bHQgPSBuZXcgUGFyc2luZ0Vycm9yKCcnLCAnXCJ6b29tXCIgZXhwcmVzc2lvbiBtYXkgb25seSBiZSB1c2VkIGFzIGlucHV0IHRvIGEgdG9wLWxldmVsIFwic3RlcFwiIG9yIFwiaW50ZXJwb2xhdGVcIiBleHByZXNzaW9uLicpO1xuICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCAmJiBjaGlsZFJlc3VsdCAmJiByZXN1bHQgIT09IGNoaWxkUmVzdWx0KSB7XG4gICAgICAgICAgICByZXN1bHQgPSBuZXcgUGFyc2luZ0Vycm9yKCcnLCAnT25seSBvbmUgem9vbS1iYXNlZCBcInN0ZXBcIiBvciBcImludGVycG9sYXRlXCIgc3ViZXhwcmVzc2lvbiBtYXkgYmUgdXNlZCBpbiBhbiBleHByZXNzaW9uLicpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5pbXBvcnQge0NvbG9yVHlwZSwgU3RyaW5nVHlwZSwgTnVtYmVyVHlwZSwgQm9vbGVhblR5cGUsIFZhbHVlVHlwZSwgRm9ybWF0dGVkVHlwZSwgUmVzb2x2ZWRJbWFnZVR5cGUsIGFycmF5fSBmcm9tICcuL3R5cGVzJztcblxuZnVuY3Rpb24gZ2V0RXhwZWN0ZWRUeXBlKHNwZWM6IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uKTogVHlwZSB7XG4gICAgY29uc3QgdHlwZXMgPSB7XG4gICAgICAgIGNvbG9yOiBDb2xvclR5cGUsXG4gICAgICAgIHN0cmluZzogU3RyaW5nVHlwZSxcbiAgICAgICAgbnVtYmVyOiBOdW1iZXJUeXBlLFxuICAgICAgICBlbnVtOiBTdHJpbmdUeXBlLFxuICAgICAgICBib29sZWFuOiBCb29sZWFuVHlwZSxcbiAgICAgICAgZm9ybWF0dGVkOiBGb3JtYXR0ZWRUeXBlLFxuICAgICAgICByZXNvbHZlZEltYWdlOiBSZXNvbHZlZEltYWdlVHlwZVxuICAgIH07XG5cbiAgICBpZiAoc3BlYy50eXBlID09PSAnYXJyYXknKSB7XG4gICAgICAgIHJldHVybiBhcnJheSh0eXBlc1tzcGVjLnZhbHVlXSB8fCBWYWx1ZVR5cGUsIHNwZWMubGVuZ3RoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZXNbc3BlYy50eXBlXTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdFZhbHVlKHNwZWM6IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uKTogVmFsdWUge1xuICAgIGlmIChzcGVjLnR5cGUgPT09ICdjb2xvcicgJiYgaXNGdW5jdGlvbihzcGVjLmRlZmF1bHQpKSB7XG4gICAgICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgaGVhdG1hcC1jb2xvcjogaXQgdXNlcyB0aGUgJ2RlZmF1bHQ6JyB0byBkZWZpbmUgYVxuICAgICAgICAvLyBkZWZhdWx0IGNvbG9yIHJhbXAsIGJ1dCBjcmVhdGVFeHByZXNzaW9uIGV4cGVjdHMgYSBzaW1wbGUgdmFsdWUgdG8gZmFsbFxuICAgICAgICAvLyBiYWNrIHRvIGluIGNhc2Ugb2YgcnVudGltZSBlcnJvcnNcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvcigwLCAwLCAwLCAwKTtcbiAgICB9IGVsc2UgaWYgKHNwZWMudHlwZSA9PT0gJ2NvbG9yJykge1xuICAgICAgICByZXR1cm4gQ29sb3IucGFyc2Uoc3BlYy5kZWZhdWx0KSB8fCBudWxsO1xuICAgIH0gZWxzZSBpZiAoc3BlYy5kZWZhdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHNwZWMuZGVmYXVsdDtcbiAgICB9XG59XG4iLCJcbmltcG9ydCBWYWxpZGF0aW9uRXJyb3IgZnJvbSAnLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvcic7XG5pbXBvcnQgZ2V0VHlwZSBmcm9tICcuLi91dGlsL2dldF90eXBlJztcbmltcG9ydCB2YWxpZGF0ZVNwZWMgZnJvbSAnLi92YWxpZGF0ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlT2JqZWN0KG9wdGlvbnMpIHtcbiAgICBjb25zdCBrZXkgPSBvcHRpb25zLmtleTtcbiAgICBjb25zdCBvYmplY3QgPSBvcHRpb25zLnZhbHVlO1xuICAgIGNvbnN0IGVsZW1lbnRTcGVjcyA9IG9wdGlvbnMudmFsdWVTcGVjIHx8IHt9O1xuICAgIGNvbnN0IGVsZW1lbnRWYWxpZGF0b3JzID0gb3B0aW9ucy5vYmplY3RFbGVtZW50VmFsaWRhdG9ycyB8fCB7fTtcbiAgICBjb25zdCBzdHlsZSA9IG9wdGlvbnMuc3R5bGU7XG4gICAgY29uc3Qgc3R5bGVTcGVjID0gb3B0aW9ucy5zdHlsZVNwZWM7XG4gICAgbGV0IGVycm9ycyA9IFtdO1xuXG4gICAgY29uc3QgdHlwZSA9IGdldFR5cGUob2JqZWN0KTtcbiAgICBpZiAodHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgb2JqZWN0LCBgb2JqZWN0IGV4cGVjdGVkLCAke3R5cGV9IGZvdW5kYCldO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgb2JqZWN0S2V5IGluIG9iamVjdCkge1xuICAgICAgICBjb25zdCBlbGVtZW50U3BlY0tleSA9IG9iamVjdEtleS5zcGxpdCgnLicpWzBdOyAvLyB0cmVhdCAncGFpbnQuKicgYXMgJ3BhaW50J1xuICAgICAgICBjb25zdCBlbGVtZW50U3BlYyA9IGVsZW1lbnRTcGVjc1tlbGVtZW50U3BlY0tleV0gfHwgZWxlbWVudFNwZWNzWycqJ107XG5cbiAgICAgICAgbGV0IHZhbGlkYXRlRWxlbWVudDtcbiAgICAgICAgaWYgKGVsZW1lbnRWYWxpZGF0b3JzW2VsZW1lbnRTcGVjS2V5XSkge1xuICAgICAgICAgICAgdmFsaWRhdGVFbGVtZW50ID0gZWxlbWVudFZhbGlkYXRvcnNbZWxlbWVudFNwZWNLZXldO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnRTcGVjc1tlbGVtZW50U3BlY0tleV0pIHtcbiAgICAgICAgICAgIHZhbGlkYXRlRWxlbWVudCA9IHZhbGlkYXRlU3BlYztcbiAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50VmFsaWRhdG9yc1snKiddKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZUVsZW1lbnQgPSBlbGVtZW50VmFsaWRhdG9yc1snKiddO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnRTcGVjc1snKiddKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZUVsZW1lbnQgPSB2YWxpZGF0ZVNwZWM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgb2JqZWN0W29iamVjdEtleV0sIGB1bmtub3duIHByb3BlcnR5IFwiJHtvYmplY3RLZXl9XCJgKSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVycm9ycyA9IGVycm9ycy5jb25jYXQodmFsaWRhdGVFbGVtZW50KHtcbiAgICAgICAgICAgIGtleTogKGtleSA/IGAke2tleX0uYCA6IGtleSkgKyBvYmplY3RLZXksXG4gICAgICAgICAgICB2YWx1ZTogb2JqZWN0W29iamVjdEtleV0sXG4gICAgICAgICAgICB2YWx1ZVNwZWM6IGVsZW1lbnRTcGVjLFxuICAgICAgICAgICAgc3R5bGUsXG4gICAgICAgICAgICBzdHlsZVNwZWMsXG4gICAgICAgICAgICBvYmplY3QsXG4gICAgICAgICAgICBvYmplY3RLZXlcbiAgICAgICAgfSwgb2JqZWN0KSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBlbGVtZW50U3BlY0tleSBpbiBlbGVtZW50U3BlY3MpIHtcbiAgICAgICAgLy8gRG9uJ3QgY2hlY2sgYHJlcXVpcmVkYCB3aGVuIHRoZXJlJ3MgYSBjdXN0b20gdmFsaWRhdG9yIGZvciB0aGF0IHByb3BlcnR5LlxuICAgICAgICBpZiAoZWxlbWVudFZhbGlkYXRvcnNbZWxlbWVudFNwZWNLZXldKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbGVtZW50U3BlY3NbZWxlbWVudFNwZWNLZXldLnJlcXVpcmVkICYmIGVsZW1lbnRTcGVjc1tlbGVtZW50U3BlY0tleV1bJ2RlZmF1bHQnXSA9PT0gdW5kZWZpbmVkICYmIG9iamVjdFtlbGVtZW50U3BlY0tleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIG9iamVjdCwgYG1pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgXCIke2VsZW1lbnRTcGVjS2V5fVwiYCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycztcbn1cbiIsIlxuaW1wb3J0IGdldFR5cGUgZnJvbSAnLi4vdXRpbC9nZXRfdHlwZSc7XG5pbXBvcnQgdmFsaWRhdGUgZnJvbSAnLi92YWxpZGF0ZSc7XG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3InO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWxpZGF0ZUFycmF5KG9wdGlvbnMpIHtcbiAgICBjb25zdCBhcnJheSA9IG9wdGlvbnMudmFsdWU7XG4gICAgY29uc3QgYXJyYXlTcGVjID0gb3B0aW9ucy52YWx1ZVNwZWM7XG4gICAgY29uc3Qgc3R5bGUgPSBvcHRpb25zLnN0eWxlO1xuICAgIGNvbnN0IHN0eWxlU3BlYyA9IG9wdGlvbnMuc3R5bGVTcGVjO1xuICAgIGNvbnN0IGtleSA9IG9wdGlvbnMua2V5O1xuICAgIGNvbnN0IHZhbGlkYXRlQXJyYXlFbGVtZW50ID0gb3B0aW9ucy5hcnJheUVsZW1lbnRWYWxpZGF0b3IgfHwgdmFsaWRhdGU7XG5cbiAgICBpZiAoZ2V0VHlwZShhcnJheSkgIT09ICdhcnJheScpIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgYXJyYXksIGBhcnJheSBleHBlY3RlZCwgJHtnZXRUeXBlKGFycmF5KX0gZm91bmRgKV07XG4gICAgfVxuXG4gICAgaWYgKGFycmF5U3BlYy5sZW5ndGggJiYgYXJyYXkubGVuZ3RoICE9PSBhcnJheVNwZWMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIGFycmF5LCBgYXJyYXkgbGVuZ3RoICR7YXJyYXlTcGVjLmxlbmd0aH0gZXhwZWN0ZWQsIGxlbmd0aCAke2FycmF5Lmxlbmd0aH0gZm91bmRgKV07XG4gICAgfVxuXG4gICAgaWYgKGFycmF5U3BlY1snbWluLWxlbmd0aCddICYmIGFycmF5Lmxlbmd0aCA8IGFycmF5U3BlY1snbWluLWxlbmd0aCddKSB7XG4gICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIGFycmF5LCBgYXJyYXkgbGVuZ3RoIGF0IGxlYXN0ICR7YXJyYXlTcGVjWydtaW4tbGVuZ3RoJ119IGV4cGVjdGVkLCBsZW5ndGggJHthcnJheS5sZW5ndGh9IGZvdW5kYCldO1xuICAgIH1cblxuICAgIGxldCBhcnJheUVsZW1lbnRTcGVjID0ge1xuICAgICAgICBcInR5cGVcIjogYXJyYXlTcGVjLnZhbHVlLFxuICAgICAgICBcInZhbHVlc1wiOiBhcnJheVNwZWMudmFsdWVzXG4gICAgfTtcblxuICAgIGlmIChzdHlsZVNwZWMuJHZlcnNpb24gPCA3KSB7XG4gICAgICAgIGFycmF5RWxlbWVudFNwZWMuZnVuY3Rpb24gPSBhcnJheVNwZWMuZnVuY3Rpb247XG4gICAgfVxuXG4gICAgaWYgKGdldFR5cGUoYXJyYXlTcGVjLnZhbHVlKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgYXJyYXlFbGVtZW50U3BlYyA9IGFycmF5U3BlYy52YWx1ZTtcbiAgICB9XG5cbiAgICBsZXQgZXJyb3JzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0KHZhbGlkYXRlQXJyYXlFbGVtZW50KHtcbiAgICAgICAgICAgIGFycmF5LFxuICAgICAgICAgICAgYXJyYXlJbmRleDogaSxcbiAgICAgICAgICAgIHZhbHVlOiBhcnJheVtpXSxcbiAgICAgICAgICAgIHZhbHVlU3BlYzogYXJyYXlFbGVtZW50U3BlYyxcbiAgICAgICAgICAgIHN0eWxlLFxuICAgICAgICAgICAgc3R5bGVTcGVjLFxuICAgICAgICAgICAga2V5OiBgJHtrZXl9WyR7aX1dYFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIHJldHVybiBlcnJvcnM7XG59XG4iLCJcbmltcG9ydCBnZXRUeXBlIGZyb20gJy4uL3V0aWwvZ2V0X3R5cGUnO1xuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVOdW1iZXIob3B0aW9ucykge1xuICAgIGNvbnN0IGtleSA9IG9wdGlvbnMua2V5O1xuICAgIGNvbnN0IHZhbHVlID0gb3B0aW9ucy52YWx1ZTtcbiAgICBjb25zdCB2YWx1ZVNwZWMgPSBvcHRpb25zLnZhbHVlU3BlYztcbiAgICBsZXQgdHlwZSA9IGdldFR5cGUodmFsdWUpO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmICh0eXBlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSAhPT0gdmFsdWUpIHtcbiAgICAgICAgdHlwZSA9ICdOYU4nO1xuICAgIH1cblxuICAgIGlmICh0eXBlICE9PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgYG51bWJlciBleHBlY3RlZCwgJHt0eXBlfSBmb3VuZGApXTtcbiAgICB9XG5cbiAgICBpZiAoJ21pbmltdW0nIGluIHZhbHVlU3BlYyAmJiB2YWx1ZSA8IHZhbHVlU3BlYy5taW5pbXVtKSB7XG4gICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCBgJHt2YWx1ZX0gaXMgbGVzcyB0aGFuIHRoZSBtaW5pbXVtIHZhbHVlICR7dmFsdWVTcGVjLm1pbmltdW19YCldO1xuICAgIH1cblxuICAgIGlmICgnbWF4aW11bScgaW4gdmFsdWVTcGVjICYmIHZhbHVlID4gdmFsdWVTcGVjLm1heGltdW0pIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsIGAke3ZhbHVlfSBpcyBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gdmFsdWUgJHt2YWx1ZVNwZWMubWF4aW11bX1gKV07XG4gICAgfVxuXG4gICAgcmV0dXJuIFtdO1xufVxuIiwiXG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3InO1xuaW1wb3J0IGdldFR5cGUgZnJvbSAnLi4vdXRpbC9nZXRfdHlwZSc7XG5pbXBvcnQgdmFsaWRhdGUgZnJvbSAnLi92YWxpZGF0ZSc7XG5pbXBvcnQgdmFsaWRhdGVPYmplY3QgZnJvbSAnLi92YWxpZGF0ZV9vYmplY3QnO1xuaW1wb3J0IHZhbGlkYXRlQXJyYXkgZnJvbSAnLi92YWxpZGF0ZV9hcnJheSc7XG5pbXBvcnQgdmFsaWRhdGVOdW1iZXIgZnJvbSAnLi92YWxpZGF0ZV9udW1iZXInO1xuaW1wb3J0IHtpc0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHt1bmJ1bmRsZSwgZGVlcFVuYnVuZGxlfSBmcm9tICcuLi91dGlsL3VuYnVuZGxlX2pzb25saW50JztcbmltcG9ydCB7XG4gICAgc3VwcG9ydHNQcm9wZXJ0eUV4cHJlc3Npb24sXG4gICAgc3VwcG9ydHNab29tRXhwcmVzc2lvbixcbiAgICBzdXBwb3J0c0ludGVycG9sYXRpb25cbn0gZnJvbSAnLi4vdXRpbC9wcm9wZXJ0aWVzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVGdW5jdGlvbihvcHRpb25zKSB7XG4gICAgY29uc3QgZnVuY3Rpb25WYWx1ZVNwZWMgPSBvcHRpb25zLnZhbHVlU3BlYztcbiAgICBjb25zdCBmdW5jdGlvblR5cGUgPSB1bmJ1bmRsZShvcHRpb25zLnZhbHVlLnR5cGUpO1xuICAgIGxldCBzdG9wS2V5VHlwZTtcbiAgICBsZXQgc3RvcERvbWFpblZhbHVlcyA9IHt9O1xuICAgIGxldCBwcmV2aW91c1N0b3BEb21haW5WYWx1ZTtcbiAgICBsZXQgcHJldmlvdXNTdG9wRG9tYWluWm9vbTtcblxuICAgIGNvbnN0IGlzWm9vbUZ1bmN0aW9uID0gZnVuY3Rpb25UeXBlICE9PSAnY2F0ZWdvcmljYWwnICYmIG9wdGlvbnMudmFsdWUucHJvcGVydHkgPT09IHVuZGVmaW5lZDtcbiAgICBjb25zdCBpc1Byb3BlcnR5RnVuY3Rpb24gPSAhaXNab29tRnVuY3Rpb247XG4gICAgY29uc3QgaXNab29tQW5kUHJvcGVydHlGdW5jdGlvbiA9XG4gICAgICAgIGdldFR5cGUob3B0aW9ucy52YWx1ZS5zdG9wcykgPT09ICdhcnJheScgJiZcbiAgICAgICAgZ2V0VHlwZShvcHRpb25zLnZhbHVlLnN0b3BzWzBdKSA9PT0gJ2FycmF5JyAmJlxuICAgICAgICBnZXRUeXBlKG9wdGlvbnMudmFsdWUuc3RvcHNbMF1bMF0pID09PSAnb2JqZWN0JztcblxuICAgIGNvbnN0IGVycm9ycyA9IHZhbGlkYXRlT2JqZWN0KHtcbiAgICAgICAga2V5OiBvcHRpb25zLmtleSxcbiAgICAgICAgdmFsdWU6IG9wdGlvbnMudmFsdWUsXG4gICAgICAgIHZhbHVlU3BlYzogb3B0aW9ucy5zdHlsZVNwZWMuZnVuY3Rpb24sXG4gICAgICAgIHN0eWxlOiBvcHRpb25zLnN0eWxlLFxuICAgICAgICBzdHlsZVNwZWM6IG9wdGlvbnMuc3R5bGVTcGVjLFxuICAgICAgICBvYmplY3RFbGVtZW50VmFsaWRhdG9yczoge1xuICAgICAgICAgICAgc3RvcHM6IHZhbGlkYXRlRnVuY3Rpb25TdG9wcyxcbiAgICAgICAgICAgIGRlZmF1bHQ6IHZhbGlkYXRlRnVuY3Rpb25EZWZhdWx0XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChmdW5jdGlvblR5cGUgPT09ICdpZGVudGl0eScgJiYgaXNab29tRnVuY3Rpb24pIHtcbiAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihvcHRpb25zLmtleSwgb3B0aW9ucy52YWx1ZSwgJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgXCJwcm9wZXJ0eVwiJykpO1xuICAgIH1cblxuICAgIGlmIChmdW5jdGlvblR5cGUgIT09ICdpZGVudGl0eScgJiYgIW9wdGlvbnMudmFsdWUuc3RvcHMpIHtcbiAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihvcHRpb25zLmtleSwgb3B0aW9ucy52YWx1ZSwgJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgXCJzdG9wc1wiJykpO1xuICAgIH1cblxuICAgIGlmIChmdW5jdGlvblR5cGUgPT09ICdleHBvbmVudGlhbCcgJiYgb3B0aW9ucy52YWx1ZVNwZWMuZXhwcmVzc2lvbiAmJiAhc3VwcG9ydHNJbnRlcnBvbGF0aW9uKG9wdGlvbnMudmFsdWVTcGVjKSkge1xuICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCBvcHRpb25zLnZhbHVlLCAnZXhwb25lbnRpYWwgZnVuY3Rpb25zIG5vdCBzdXBwb3J0ZWQnKSk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuc3R5bGVTcGVjLiR2ZXJzaW9uID49IDgpIHtcbiAgICAgICAgaWYgKGlzUHJvcGVydHlGdW5jdGlvbiAmJiAhc3VwcG9ydHNQcm9wZXJ0eUV4cHJlc3Npb24ob3B0aW9ucy52YWx1ZVNwZWMpKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCBvcHRpb25zLnZhbHVlLCAncHJvcGVydHkgZnVuY3Rpb25zIG5vdCBzdXBwb3J0ZWQnKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNab29tRnVuY3Rpb24gJiYgIXN1cHBvcnRzWm9vbUV4cHJlc3Npb24ob3B0aW9ucy52YWx1ZVNwZWMpKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCBvcHRpb25zLnZhbHVlLCAnem9vbSBmdW5jdGlvbnMgbm90IHN1cHBvcnRlZCcpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICgoZnVuY3Rpb25UeXBlID09PSAnY2F0ZWdvcmljYWwnIHx8IGlzWm9vbUFuZFByb3BlcnR5RnVuY3Rpb24pICYmIG9wdGlvbnMudmFsdWUucHJvcGVydHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCBvcHRpb25zLnZhbHVlLCAnXCJwcm9wZXJ0eVwiIHByb3BlcnR5IGlzIHJlcXVpcmVkJykpO1xuICAgIH1cblxuICAgIHJldHVybiBlcnJvcnM7XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUZ1bmN0aW9uU3RvcHMob3B0aW9ucykge1xuICAgICAgICBpZiAoZnVuY3Rpb25UeXBlID09PSAnaWRlbnRpdHknKSB7XG4gICAgICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Iob3B0aW9ucy5rZXksIG9wdGlvbnMudmFsdWUsICdpZGVudGl0eSBmdW5jdGlvbiBtYXkgbm90IGhhdmUgYSBcInN0b3BzXCIgcHJvcGVydHknKV07XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZXJyb3JzID0gW107XG4gICAgICAgIGNvbnN0IHZhbHVlID0gb3B0aW9ucy52YWx1ZTtcblxuICAgICAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0KHZhbGlkYXRlQXJyYXkoe1xuICAgICAgICAgICAga2V5OiBvcHRpb25zLmtleSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgdmFsdWVTcGVjOiBvcHRpb25zLnZhbHVlU3BlYyxcbiAgICAgICAgICAgIHN0eWxlOiBvcHRpb25zLnN0eWxlLFxuICAgICAgICAgICAgc3R5bGVTcGVjOiBvcHRpb25zLnN0eWxlU3BlYyxcbiAgICAgICAgICAgIGFycmF5RWxlbWVudFZhbGlkYXRvcjogdmFsaWRhdGVGdW5jdGlvblN0b3BcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIGlmIChnZXRUeXBlKHZhbHVlKSA9PT0gJ2FycmF5JyAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Iob3B0aW9ucy5rZXksIHZhbHVlLCAnYXJyYXkgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBzdG9wJykpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVycm9ycztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUZ1bmN0aW9uU3RvcChvcHRpb25zKSB7XG4gICAgICAgIGxldCBlcnJvcnMgPSBbXTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuICAgICAgICBjb25zdCBrZXkgPSBvcHRpb25zLmtleTtcblxuICAgICAgICBpZiAoZ2V0VHlwZSh2YWx1ZSkgIT09ICdhcnJheScpIHtcbiAgICAgICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCBgYXJyYXkgZXhwZWN0ZWQsICR7Z2V0VHlwZSh2YWx1ZSl9IGZvdW5kYCldO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCAhPT0gMikge1xuICAgICAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsIGBhcnJheSBsZW5ndGggMiBleHBlY3RlZCwgbGVuZ3RoICR7dmFsdWUubGVuZ3RofSBmb3VuZGApXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1pvb21BbmRQcm9wZXJ0eUZ1bmN0aW9uKSB7XG4gICAgICAgICAgICBpZiAoZ2V0VHlwZSh2YWx1ZVswXSkgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsIGBvYmplY3QgZXhwZWN0ZWQsICR7Z2V0VHlwZSh2YWx1ZVswXSl9IGZvdW5kYCldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlWzBdLnpvb20gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCAnb2JqZWN0IHN0b3Aga2V5IG11c3QgaGF2ZSB6b29tJyldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlWzBdLnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgJ29iamVjdCBzdG9wIGtleSBtdXN0IGhhdmUgdmFsdWUnKV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJldmlvdXNTdG9wRG9tYWluWm9vbSAmJiBwcmV2aW91c1N0b3BEb21haW5ab29tID4gdW5idW5kbGUodmFsdWVbMF0uem9vbSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZVswXS56b29tLCAnc3RvcCB6b29tIHZhbHVlcyBtdXN0IGFwcGVhciBpbiBhc2NlbmRpbmcgb3JkZXInKV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodW5idW5kbGUodmFsdWVbMF0uem9vbSkgIT09IHByZXZpb3VzU3RvcERvbWFpblpvb20pIHtcbiAgICAgICAgICAgICAgICBwcmV2aW91c1N0b3BEb21haW5ab29tID0gdW5idW5kbGUodmFsdWVbMF0uem9vbSk7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNTdG9wRG9tYWluVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgc3RvcERvbWFpblZhbHVlcyA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdCh2YWxpZGF0ZU9iamVjdCh7XG4gICAgICAgICAgICAgICAga2V5OiBgJHtrZXl9WzBdYCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVbMF0sXG4gICAgICAgICAgICAgICAgdmFsdWVTcGVjOiB7em9vbToge319LFxuICAgICAgICAgICAgICAgIHN0eWxlOiBvcHRpb25zLnN0eWxlLFxuICAgICAgICAgICAgICAgIHN0eWxlU3BlYzogb3B0aW9ucy5zdHlsZVNwZWMsXG4gICAgICAgICAgICAgICAgb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6IHt6b29tOiB2YWxpZGF0ZU51bWJlciwgdmFsdWU6IHZhbGlkYXRlU3RvcERvbWFpblZhbHVlfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdCh2YWxpZGF0ZVN0b3BEb21haW5WYWx1ZSh7XG4gICAgICAgICAgICAgICAga2V5OiBgJHtrZXl9WzBdYCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVbMF0sXG4gICAgICAgICAgICAgICAgdmFsdWVTcGVjOiB7fSxcbiAgICAgICAgICAgICAgICBzdHlsZTogb3B0aW9ucy5zdHlsZSxcbiAgICAgICAgICAgICAgICBzdHlsZVNwZWM6IG9wdGlvbnMuc3R5bGVTcGVjXG4gICAgICAgICAgICB9LCB2YWx1ZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRXhwcmVzc2lvbihkZWVwVW5idW5kbGUodmFsdWVbMV0pKSkge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9ycy5jb25jYXQoW25ldyBWYWxpZGF0aW9uRXJyb3IoYCR7a2V5fVsxXWAsIHZhbHVlWzFdLCAnZXhwcmVzc2lvbnMgYXJlIG5vdCBhbGxvd2VkIGluIGZ1bmN0aW9uIHN0b3BzLicpXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXJyb3JzLmNvbmNhdCh2YWxpZGF0ZSh7XG4gICAgICAgICAgICBrZXk6IGAke2tleX1bMV1gLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlWzFdLFxuICAgICAgICAgICAgdmFsdWVTcGVjOiBmdW5jdGlvblZhbHVlU3BlYyxcbiAgICAgICAgICAgIHN0eWxlOiBvcHRpb25zLnN0eWxlLFxuICAgICAgICAgICAgc3R5bGVTcGVjOiBvcHRpb25zLnN0eWxlU3BlY1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGVTdG9wRG9tYWluVmFsdWUob3B0aW9ucywgc3RvcCkge1xuICAgICAgICBjb25zdCB0eXBlID0gZ2V0VHlwZShvcHRpb25zLnZhbHVlKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB1bmJ1bmRsZShvcHRpb25zLnZhbHVlKTtcblxuICAgICAgICBjb25zdCByZXBvcnRWYWx1ZSA9IG9wdGlvbnMudmFsdWUgIT09IG51bGwgPyBvcHRpb25zLnZhbHVlIDogc3RvcDtcblxuICAgICAgICBpZiAoIXN0b3BLZXlUeXBlKSB7XG4gICAgICAgICAgICBzdG9wS2V5VHlwZSA9IHR5cGU7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSAhPT0gc3RvcEtleVR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihvcHRpb25zLmtleSwgcmVwb3J0VmFsdWUsIGAke3R5cGV9IHN0b3AgZG9tYWluIHR5cGUgbXVzdCBtYXRjaCBwcmV2aW91cyBzdG9wIGRvbWFpbiB0eXBlICR7c3RvcEtleVR5cGV9YCldO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGUgIT09ICdudW1iZXInICYmIHR5cGUgIT09ICdzdHJpbmcnICYmIHR5cGUgIT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCByZXBvcnRWYWx1ZSwgJ3N0b3AgZG9tYWluIHZhbHVlIG11c3QgYmUgYSBudW1iZXIsIHN0cmluZywgb3IgYm9vbGVhbicpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlICE9PSAnbnVtYmVyJyAmJiBmdW5jdGlvblR5cGUgIT09ICdjYXRlZ29yaWNhbCcpIHtcbiAgICAgICAgICAgIGxldCBtZXNzYWdlID0gYG51bWJlciBleHBlY3RlZCwgJHt0eXBlfSBmb3VuZGA7XG4gICAgICAgICAgICBpZiAoc3VwcG9ydHNQcm9wZXJ0eUV4cHJlc3Npb24oZnVuY3Rpb25WYWx1ZVNwZWMpICYmIGZ1bmN0aW9uVHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZSArPSAnXFxuSWYgeW91IGludGVuZGVkIHRvIHVzZSBhIGNhdGVnb3JpY2FsIGZ1bmN0aW9uLCBzcGVjaWZ5IGBcInR5cGVcIjogXCJjYXRlZ29yaWNhbFwiYC4nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCByZXBvcnRWYWx1ZSwgbWVzc2FnZSldO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZ1bmN0aW9uVHlwZSA9PT0gJ2NhdGVnb3JpY2FsJyAmJiB0eXBlID09PSAnbnVtYmVyJyAmJiAoIWlzRmluaXRlKHZhbHVlKSB8fCBNYXRoLmZsb29yKHZhbHVlKSAhPT0gdmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Iob3B0aW9ucy5rZXksIHJlcG9ydFZhbHVlLCBgaW50ZWdlciBleHBlY3RlZCwgZm91bmQgJHt2YWx1ZX1gKV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZnVuY3Rpb25UeXBlICE9PSAnY2F0ZWdvcmljYWwnICYmIHR5cGUgPT09ICdudW1iZXInICYmIHByZXZpb3VzU3RvcERvbWFpblZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgPCBwcmV2aW91c1N0b3BEb21haW5WYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCByZXBvcnRWYWx1ZSwgJ3N0b3AgZG9tYWluIHZhbHVlcyBtdXN0IGFwcGVhciBpbiBhc2NlbmRpbmcgb3JkZXInKV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcmV2aW91c1N0b3BEb21haW5WYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZ1bmN0aW9uVHlwZSA9PT0gJ2NhdGVnb3JpY2FsJyAmJiB2YWx1ZSBpbiBzdG9wRG9tYWluVmFsdWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Iob3B0aW9ucy5rZXksIHJlcG9ydFZhbHVlLCAnc3RvcCBkb21haW4gdmFsdWVzIG11c3QgYmUgdW5pcXVlJyldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RvcERvbWFpblZhbHVlc1t2YWx1ZV0gPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlRnVuY3Rpb25EZWZhdWx0KG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHtcbiAgICAgICAgICAgIGtleTogb3B0aW9ucy5rZXksXG4gICAgICAgICAgICB2YWx1ZTogb3B0aW9ucy52YWx1ZSxcbiAgICAgICAgICAgIHZhbHVlU3BlYzogZnVuY3Rpb25WYWx1ZVNwZWMsXG4gICAgICAgICAgICBzdHlsZTogb3B0aW9ucy5zdHlsZSxcbiAgICAgICAgICAgIHN0eWxlU3BlYzogb3B0aW9ucy5zdHlsZVNwZWNcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yJztcblxuaW1wb3J0IHtjcmVhdGVFeHByZXNzaW9uLCBjcmVhdGVQcm9wZXJ0eUV4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHtkZWVwVW5idW5kbGV9IGZyb20gJy4uL3V0aWwvdW5idW5kbGVfanNvbmxpbnQnO1xuaW1wb3J0IHtpc1N0YXRlQ29uc3RhbnQsIGlzR2xvYmFsUHJvcGVydHlDb25zdGFudCwgaXNGZWF0dXJlQ29uc3RhbnR9IGZyb20gJy4uL2V4cHJlc3Npb24vaXNfY29uc3RhbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWxpZGF0ZUV4cHJlc3Npb24ob3B0aW9uczogYW55KTogQXJyYXk8VmFsaWRhdGlvbkVycm9yPiB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IChvcHRpb25zLmV4cHJlc3Npb25Db250ZXh0ID09PSAncHJvcGVydHknID8gY3JlYXRlUHJvcGVydHlFeHByZXNzaW9uIDogY3JlYXRlRXhwcmVzc2lvbikoZGVlcFVuYnVuZGxlKG9wdGlvbnMudmFsdWUpLCBvcHRpb25zLnZhbHVlU3BlYyk7XG4gICAgaWYgKGV4cHJlc3Npb24ucmVzdWx0ID09PSAnZXJyb3InKSB7XG4gICAgICAgIHJldHVybiBleHByZXNzaW9uLnZhbHVlLm1hcCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmFsaWRhdGlvbkVycm9yKGAke29wdGlvbnMua2V5fSR7ZXJyb3Iua2V5fWAsIG9wdGlvbnMudmFsdWUsIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBleHByZXNzaW9uT2JqID0gKGV4cHJlc3Npb24udmFsdWU6IGFueSkuZXhwcmVzc2lvbiB8fCAoZXhwcmVzc2lvbi52YWx1ZTogYW55KS5fc3R5bGVFeHByZXNzaW9uLmV4cHJlc3Npb247XG5cbiAgICBpZiAob3B0aW9ucy5leHByZXNzaW9uQ29udGV4dCA9PT0gJ3Byb3BlcnR5JyAmJiAob3B0aW9ucy5wcm9wZXJ0eUtleSA9PT0gJ3RleHQtZm9udCcpICYmXG4gICAgICAgICFleHByZXNzaW9uT2JqLm91dHB1dERlZmluZWQoKSkge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Iob3B0aW9ucy5rZXksIG9wdGlvbnMudmFsdWUsIGBJbnZhbGlkIGRhdGEgZXhwcmVzc2lvbiBmb3IgXCIke29wdGlvbnMucHJvcGVydHlLZXl9XCIuIE91dHB1dCB2YWx1ZXMgbXVzdCBiZSBjb250YWluZWQgYXMgbGl0ZXJhbHMgd2l0aGluIHRoZSBleHByZXNzaW9uLmApXTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5leHByZXNzaW9uQ29udGV4dCA9PT0gJ3Byb3BlcnR5JyAmJiBvcHRpb25zLnByb3BlcnR5VHlwZSA9PT0gJ2xheW91dCcgJiZcbiAgICAgICAgKCFpc1N0YXRlQ29uc3RhbnQoZXhwcmVzc2lvbk9iaikpKSB7XG4gICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihvcHRpb25zLmtleSwgb3B0aW9ucy52YWx1ZSwgJ1wiZmVhdHVyZS1zdGF0ZVwiIGRhdGEgZXhwcmVzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCBsYXlvdXQgcHJvcGVydGllcy4nKV07XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZXhwcmVzc2lvbkNvbnRleHQgPT09ICdmaWx0ZXInICYmICFpc1N0YXRlQ29uc3RhbnQoZXhwcmVzc2lvbk9iaikpIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCBvcHRpb25zLnZhbHVlLCAnXCJmZWF0dXJlLXN0YXRlXCIgZGF0YSBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIGZpbHRlcnMuJyldO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmV4cHJlc3Npb25Db250ZXh0ICYmIG9wdGlvbnMuZXhwcmVzc2lvbkNvbnRleHQuaW5kZXhPZignY2x1c3RlcicpID09PSAwKSB7XG4gICAgICAgIGlmICghaXNHbG9iYWxQcm9wZXJ0eUNvbnN0YW50KGV4cHJlc3Npb25PYmosIFsnem9vbScsICdmZWF0dXJlLXN0YXRlJ10pKSB7XG4gICAgICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Iob3B0aW9ucy5rZXksIG9wdGlvbnMudmFsdWUsICdcInpvb21cIiBhbmQgXCJmZWF0dXJlLXN0YXRlXCIgZXhwcmVzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCBjbHVzdGVyIHByb3BlcnRpZXMuJyldO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmV4cHJlc3Npb25Db250ZXh0ID09PSAnY2x1c3Rlci1pbml0aWFsJyAmJiAhaXNGZWF0dXJlQ29uc3RhbnQoZXhwcmVzc2lvbk9iaikpIHtcbiAgICAgICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihvcHRpb25zLmtleSwgb3B0aW9ucy52YWx1ZSwgJ0ZlYXR1cmUgZGF0YSBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIGluaXRpYWwgZXhwcmVzc2lvbiBwYXJ0IG9mIGNsdXN0ZXIgcHJvcGVydGllcy4nKV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gW107XG59XG4iLCJcbmltcG9ydCBnZXRUeXBlIGZyb20gJy4uL3V0aWwvZ2V0X3R5cGUnO1xuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVCb29sZWFuKG9wdGlvbnMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnMudmFsdWU7XG4gICAgY29uc3Qga2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgY29uc3QgdHlwZSA9IGdldFR5cGUodmFsdWUpO1xuXG4gICAgaWYgKHR5cGUgIT09ICdib29sZWFuJykge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgYGJvb2xlYW4gZXhwZWN0ZWQsICR7dHlwZX0gZm91bmRgKV07XG4gICAgfVxuXG4gICAgcmV0dXJuIFtdO1xufVxuIiwiXG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3InO1xuaW1wb3J0IGdldFR5cGUgZnJvbSAnLi4vdXRpbC9nZXRfdHlwZSc7XG5pbXBvcnQge3BhcnNlQ1NTQ29sb3J9IGZyb20gJ2Nzc2NvbG9ycGFyc2VyJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVDb2xvcihvcHRpb25zKSB7XG4gICAgY29uc3Qga2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgY29uc3QgdmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuICAgIGNvbnN0IHR5cGUgPSBnZXRUeXBlKHZhbHVlKTtcblxuICAgIGlmICh0eXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgYGNvbG9yIGV4cGVjdGVkLCAke3R5cGV9IGZvdW5kYCldO1xuICAgIH1cblxuICAgIGlmIChwYXJzZUNTU0NvbG9yKHZhbHVlKSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgYGNvbG9yIGV4cGVjdGVkLCBcIiR7dmFsdWV9XCIgZm91bmRgKV07XG4gICAgfVxuXG4gICAgcmV0dXJuIFtdO1xufVxuIiwiXG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3InO1xuaW1wb3J0IHt1bmJ1bmRsZX0gZnJvbSAnLi4vdXRpbC91bmJ1bmRsZV9qc29ubGludCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlRW51bShvcHRpb25zKSB7XG4gICAgY29uc3Qga2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgY29uc3QgdmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuICAgIGNvbnN0IHZhbHVlU3BlYyA9IG9wdGlvbnMudmFsdWVTcGVjO1xuICAgIGNvbnN0IGVycm9ycyA9IFtdO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWVTcGVjLnZhbHVlcykpIHsgLy8gPD12N1xuICAgICAgICBpZiAodmFsdWVTcGVjLnZhbHVlcy5pbmRleE9mKHVuYnVuZGxlKHZhbHVlKSkgPT09IC0xKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsIGBleHBlY3RlZCBvbmUgb2YgWyR7dmFsdWVTcGVjLnZhbHVlcy5qb2luKCcsICcpfV0sICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfSBmb3VuZGApKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7IC8vID49djhcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHZhbHVlU3BlYy52YWx1ZXMpLmluZGV4T2YodW5idW5kbGUodmFsdWUpKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgYGV4cGVjdGVkIG9uZSBvZiBbJHtPYmplY3Qua2V5cyh2YWx1ZVNwZWMudmFsdWVzKS5qb2luKCcsICcpfV0sICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfSBmb3VuZGApKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXJyb3JzO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtjcmVhdGVFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIHtHbG9iYWxQcm9wZXJ0aWVzLCBGZWF0dXJlfSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIHtDYW5vbmljYWxUaWxlSUR9IGZyb20gJy4uLy4uL3NvdXJjZS90aWxlX2lkJztcblxudHlwZSBGaWx0ZXJFeHByZXNzaW9uID0gKGdsb2JhbFByb3BlcnRpZXM6IEdsb2JhbFByb3BlcnRpZXMsIGZlYXR1cmU6IEZlYXR1cmUsIGNhbm9uaWNhbD86IENhbm9uaWNhbFRpbGVJRCkgPT4gYm9vbGVhbjtcbmV4cG9ydCB0eXBlIEZlYXR1cmVGaWx0ZXIgPXtmaWx0ZXI6IEZpbHRlckV4cHJlc3Npb24sIG5lZWRHZW9tZXRyeTogYm9vbGVhbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUZpbHRlcjtcbmV4cG9ydCB7aXNFeHByZXNzaW9uRmlsdGVyfTtcblxuZnVuY3Rpb24gaXNFeHByZXNzaW9uRmlsdGVyKGZpbHRlcjogYW55KSB7XG4gICAgaWYgKGZpbHRlciA9PT0gdHJ1ZSB8fCBmaWx0ZXIgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShmaWx0ZXIpIHx8IGZpbHRlci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBzd2l0Y2ggKGZpbHRlclswXSkge1xuICAgIGNhc2UgJ2hhcyc6XG4gICAgICAgIHJldHVybiBmaWx0ZXIubGVuZ3RoID49IDIgJiYgZmlsdGVyWzFdICE9PSAnJGlkJyAmJiBmaWx0ZXJbMV0gIT09ICckdHlwZSc7XG5cbiAgICBjYXNlICdpbic6XG4gICAgICAgIHJldHVybiBmaWx0ZXIubGVuZ3RoID49IDMgJiYgKHR5cGVvZiBmaWx0ZXJbMV0gIT09ICdzdHJpbmcnIHx8IEFycmF5LmlzQXJyYXkoZmlsdGVyWzJdKSk7XG5cbiAgICBjYXNlICchaW4nOlxuICAgIGNhc2UgJyFoYXMnOlxuICAgIGNhc2UgJ25vbmUnOlxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBjYXNlICc9PSc6XG4gICAgY2FzZSAnIT0nOlxuICAgIGNhc2UgJz4nOlxuICAgIGNhc2UgJz49JzpcbiAgICBjYXNlICc8JzpcbiAgICBjYXNlICc8PSc6XG4gICAgICAgIHJldHVybiBmaWx0ZXIubGVuZ3RoICE9PSAzIHx8IChBcnJheS5pc0FycmF5KGZpbHRlclsxXSkgfHwgQXJyYXkuaXNBcnJheShmaWx0ZXJbMl0pKTtcblxuICAgIGNhc2UgJ2FueSc6XG4gICAgY2FzZSAnYWxsJzpcbiAgICAgICAgZm9yIChjb25zdCBmIG9mIGZpbHRlci5zbGljZSgxKSkge1xuICAgICAgICAgICAgaWYgKCFpc0V4cHJlc3Npb25GaWx0ZXIoZikgJiYgdHlwZW9mIGYgIT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cblxuY29uc3QgZmlsdGVyU3BlYyA9IHtcbiAgICAndHlwZSc6ICdib29sZWFuJyxcbiAgICAnZGVmYXVsdCc6IGZhbHNlLFxuICAgICd0cmFuc2l0aW9uJzogZmFsc2UsXG4gICAgJ3Byb3BlcnR5LXR5cGUnOiAnZGF0YS1kcml2ZW4nLFxuICAgICdleHByZXNzaW9uJzoge1xuICAgICAgICAnaW50ZXJwb2xhdGVkJzogZmFsc2UsXG4gICAgICAgICdwYXJhbWV0ZXJzJzogWyd6b29tJywgJ2ZlYXR1cmUnXVxuICAgIH1cbn07XG5cbi8qKlxuICogR2l2ZW4gYSBmaWx0ZXIgZXhwcmVzc2VkIGFzIG5lc3RlZCBhcnJheXMsIHJldHVybiBhIG5ldyBmdW5jdGlvblxuICogdGhhdCBldmFsdWF0ZXMgd2hldGhlciBhIGdpdmVuIGZlYXR1cmUgKHdpdGggYSAucHJvcGVydGllcyBvciAudGFncyBwcm9wZXJ0eSlcbiAqIHBhc3NlcyBpdHMgdGVzdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gZmlsdGVyIG1hcGJveCBnbCBmaWx0ZXJcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gZmlsdGVyLWV2YWx1YXRpbmcgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRmlsdGVyKGZpbHRlcjogYW55KTogRmVhdHVyZUZpbHRlciB7XG4gICAgaWYgKGZpbHRlciA9PT0gbnVsbCB8fCBmaWx0ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4ge2ZpbHRlcjogKCkgPT4gdHJ1ZSwgbmVlZEdlb21ldHJ5OiBmYWxzZX07XG4gICAgfVxuXG4gICAgaWYgKCFpc0V4cHJlc3Npb25GaWx0ZXIoZmlsdGVyKSkge1xuICAgICAgICBmaWx0ZXIgPSBjb252ZXJ0RmlsdGVyKGZpbHRlcik7XG4gICAgfVxuXG4gICAgY29uc3QgY29tcGlsZWQgPSBjcmVhdGVFeHByZXNzaW9uKGZpbHRlciwgZmlsdGVyU3BlYyk7XG4gICAgaWYgKGNvbXBpbGVkLnJlc3VsdCA9PT0gJ2Vycm9yJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY29tcGlsZWQudmFsdWUubWFwKGVyciA9PiBgJHtlcnIua2V5fTogJHtlcnIubWVzc2FnZX1gKS5qb2luKCcsICcpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBuZWVkR2VvbWV0cnkgPSBBcnJheS5pc0FycmF5KGZpbHRlcikgJiYgZmlsdGVyLmxlbmd0aCAhPT0gMCAmJiBmaWx0ZXJbMF0gPT09ICd3aXRoaW4nO1xuICAgICAgICByZXR1cm4ge2ZpbHRlcjogKGdsb2JhbFByb3BlcnRpZXM6IEdsb2JhbFByb3BlcnRpZXMsIGZlYXR1cmU6IEZlYXR1cmUsIGNhbm9uaWNhbD86IENhbm9uaWNhbFRpbGVJRCkgPT4gY29tcGlsZWQudmFsdWUuZXZhbHVhdGUoZ2xvYmFsUHJvcGVydGllcywgZmVhdHVyZSwge30sIGNhbm9uaWNhbCksXG4gICAgICAgICAgICBuZWVkR2VvbWV0cnl9O1xuICAgIH1cbn1cblxuLy8gQ29tcGFyaXNvbiBmdW5jdGlvbiB0byBzb3J0IG51bWJlcnMgYW5kIHN0cmluZ3NcbmZ1bmN0aW9uIGNvbXBhcmUoYSwgYikge1xuICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDtcbn1cblxuZnVuY3Rpb24gY29udmVydEZpbHRlcihmaWx0ZXI6ID9BcnJheTxhbnk+KTogbWl4ZWQge1xuICAgIGlmICghZmlsdGVyKSByZXR1cm4gdHJ1ZTtcbiAgICBjb25zdCBvcCA9IGZpbHRlclswXTtcbiAgICBpZiAoZmlsdGVyLmxlbmd0aCA8PSAxKSByZXR1cm4gKG9wICE9PSAnYW55Jyk7XG4gICAgY29uc3QgY29udmVydGVkID1cbiAgICAgICAgb3AgPT09ICc9PScgPyBjb252ZXJ0Q29tcGFyaXNvbk9wKGZpbHRlclsxXSwgZmlsdGVyWzJdLCAnPT0nKSA6XG4gICAgICAgIG9wID09PSAnIT0nID8gY29udmVydE5lZ2F0aW9uKGNvbnZlcnRDb21wYXJpc29uT3AoZmlsdGVyWzFdLCBmaWx0ZXJbMl0sICc9PScpKSA6XG4gICAgICAgIG9wID09PSAnPCcgfHxcbiAgICAgICAgb3AgPT09ICc+JyB8fFxuICAgICAgICBvcCA9PT0gJzw9JyB8fFxuICAgICAgICBvcCA9PT0gJz49JyA/IGNvbnZlcnRDb21wYXJpc29uT3AoZmlsdGVyWzFdLCBmaWx0ZXJbMl0sIG9wKSA6XG4gICAgICAgIG9wID09PSAnYW55JyA/IGNvbnZlcnREaXNqdW5jdGlvbk9wKGZpbHRlci5zbGljZSgxKSkgOlxuICAgICAgICBvcCA9PT0gJ2FsbCcgPyBbJ2FsbCddLmNvbmNhdChmaWx0ZXIuc2xpY2UoMSkubWFwKGNvbnZlcnRGaWx0ZXIpKSA6XG4gICAgICAgIG9wID09PSAnbm9uZScgPyBbJ2FsbCddLmNvbmNhdChmaWx0ZXIuc2xpY2UoMSkubWFwKGNvbnZlcnRGaWx0ZXIpLm1hcChjb252ZXJ0TmVnYXRpb24pKSA6XG4gICAgICAgIG9wID09PSAnaW4nID8gY29udmVydEluT3AoZmlsdGVyWzFdLCBmaWx0ZXIuc2xpY2UoMikpIDpcbiAgICAgICAgb3AgPT09ICchaW4nID8gY29udmVydE5lZ2F0aW9uKGNvbnZlcnRJbk9wKGZpbHRlclsxXSwgZmlsdGVyLnNsaWNlKDIpKSkgOlxuICAgICAgICBvcCA9PT0gJ2hhcycgPyBjb252ZXJ0SGFzT3AoZmlsdGVyWzFdKSA6XG4gICAgICAgIG9wID09PSAnIWhhcycgPyBjb252ZXJ0TmVnYXRpb24oY29udmVydEhhc09wKGZpbHRlclsxXSkpIDpcbiAgICAgICAgdHJ1ZTtcbiAgICByZXR1cm4gY29udmVydGVkO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0Q29tcGFyaXNvbk9wKHByb3BlcnR5OiBzdHJpbmcsIHZhbHVlOiBhbnksIG9wOiBzdHJpbmcpIHtcbiAgICBzd2l0Y2ggKHByb3BlcnR5KSB7XG4gICAgY2FzZSAnJHR5cGUnOlxuICAgICAgICByZXR1cm4gW2BmaWx0ZXItdHlwZS0ke29wfWAsIHZhbHVlXTtcbiAgICBjYXNlICckaWQnOlxuICAgICAgICByZXR1cm4gW2BmaWx0ZXItaWQtJHtvcH1gLCB2YWx1ZV07XG4gICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFtgZmlsdGVyLSR7b3B9YCwgcHJvcGVydHksIHZhbHVlXTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnREaXNqdW5jdGlvbk9wKGZpbHRlcnM6IEFycmF5PEFycmF5PGFueT4+KSB7XG4gICAgcmV0dXJuIFsnYW55J10uY29uY2F0KGZpbHRlcnMubWFwKGNvbnZlcnRGaWx0ZXIpKTtcbn1cblxuZnVuY3Rpb24gY29udmVydEluT3AocHJvcGVydHk6IHN0cmluZywgdmFsdWVzOiBBcnJheTxhbnk+KSB7XG4gICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgc3dpdGNoIChwcm9wZXJ0eSkge1xuICAgIGNhc2UgJyR0eXBlJzpcbiAgICAgICAgcmV0dXJuIFtgZmlsdGVyLXR5cGUtaW5gLCBbJ2xpdGVyYWwnLCB2YWx1ZXNdXTtcbiAgICBjYXNlICckaWQnOlxuICAgICAgICByZXR1cm4gW2BmaWx0ZXItaWQtaW5gLCBbJ2xpdGVyYWwnLCB2YWx1ZXNdXTtcbiAgICBkZWZhdWx0OlxuICAgICAgICBpZiAodmFsdWVzLmxlbmd0aCA+IDIwMCAmJiAhdmFsdWVzLnNvbWUodiA9PiB0eXBlb2YgdiAhPT0gdHlwZW9mIHZhbHVlc1swXSkpIHtcbiAgICAgICAgICAgIHJldHVybiBbJ2ZpbHRlci1pbi1sYXJnZScsIHByb3BlcnR5LCBbJ2xpdGVyYWwnLCB2YWx1ZXMuc29ydChjb21wYXJlKV1dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFsnZmlsdGVyLWluLXNtYWxsJywgcHJvcGVydHksIFsnbGl0ZXJhbCcsIHZhbHVlc11dO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjb252ZXJ0SGFzT3AocHJvcGVydHk6IHN0cmluZykge1xuICAgIHN3aXRjaCAocHJvcGVydHkpIHtcbiAgICBjYXNlICckdHlwZSc6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGNhc2UgJyRpZCc6XG4gICAgICAgIHJldHVybiBbYGZpbHRlci1oYXMtaWRgXTtcbiAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gW2BmaWx0ZXItaGFzYCwgcHJvcGVydHldO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY29udmVydE5lZ2F0aW9uKGZpbHRlcjogbWl4ZWQpIHtcbiAgICByZXR1cm4gWychJywgZmlsdGVyXTtcbn1cbiIsIlxuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yJztcbmltcG9ydCB2YWxpZGF0ZUV4cHJlc3Npb24gZnJvbSAnLi92YWxpZGF0ZV9leHByZXNzaW9uJztcbmltcG9ydCB2YWxpZGF0ZUVudW0gZnJvbSAnLi92YWxpZGF0ZV9lbnVtJztcbmltcG9ydCBnZXRUeXBlIGZyb20gJy4uL3V0aWwvZ2V0X3R5cGUnO1xuaW1wb3J0IHt1bmJ1bmRsZSwgZGVlcFVuYnVuZGxlfSBmcm9tICcuLi91dGlsL3VuYnVuZGxlX2pzb25saW50JztcbmltcG9ydCBleHRlbmQgZnJvbSAnLi4vdXRpbC9leHRlbmQnO1xuaW1wb3J0IHtpc0V4cHJlc3Npb25GaWx0ZXJ9IGZyb20gJy4uL2ZlYXR1cmVfZmlsdGVyJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVGaWx0ZXIob3B0aW9ucykge1xuICAgIGlmIChpc0V4cHJlc3Npb25GaWx0ZXIoZGVlcFVuYnVuZGxlKG9wdGlvbnMudmFsdWUpKSkge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGVFeHByZXNzaW9uKGV4dGVuZCh7fSwgb3B0aW9ucywge1xuICAgICAgICAgICAgZXhwcmVzc2lvbkNvbnRleHQ6ICdmaWx0ZXInLFxuICAgICAgICAgICAgdmFsdWVTcGVjOiB7dmFsdWU6ICdib29sZWFuJ31cbiAgICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZU5vbkV4cHJlc3Npb25GaWx0ZXIob3B0aW9ucyk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZU5vbkV4cHJlc3Npb25GaWx0ZXIob3B0aW9ucykge1xuICAgIGNvbnN0IHZhbHVlID0gb3B0aW9ucy52YWx1ZTtcbiAgICBjb25zdCBrZXkgPSBvcHRpb25zLmtleTtcblxuICAgIGlmIChnZXRUeXBlKHZhbHVlKSAhPT0gJ2FycmF5Jykge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgYGFycmF5IGV4cGVjdGVkLCAke2dldFR5cGUodmFsdWUpfSBmb3VuZGApXTtcbiAgICB9XG5cbiAgICBjb25zdCBzdHlsZVNwZWMgPSBvcHRpb25zLnN0eWxlU3BlYztcbiAgICBsZXQgdHlwZTtcblxuICAgIGxldCBlcnJvcnMgPSBbXTtcblxuICAgIGlmICh2YWx1ZS5sZW5ndGggPCAxKSB7XG4gICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCAnZmlsdGVyIGFycmF5IG11c3QgaGF2ZSBhdCBsZWFzdCAxIGVsZW1lbnQnKV07XG4gICAgfVxuXG4gICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdCh2YWxpZGF0ZUVudW0oe1xuICAgICAgICBrZXk6IGAke2tleX1bMF1gLFxuICAgICAgICB2YWx1ZTogdmFsdWVbMF0sXG4gICAgICAgIHZhbHVlU3BlYzogc3R5bGVTcGVjLmZpbHRlcl9vcGVyYXRvcixcbiAgICAgICAgc3R5bGU6IG9wdGlvbnMuc3R5bGUsXG4gICAgICAgIHN0eWxlU3BlYzogb3B0aW9ucy5zdHlsZVNwZWNcbiAgICB9KSk7XG5cbiAgICBzd2l0Y2ggKHVuYnVuZGxlKHZhbHVlWzBdKSkge1xuICAgIGNhc2UgJzwnOlxuICAgIGNhc2UgJzw9JzpcbiAgICBjYXNlICc+JzpcbiAgICBjYXNlICc+PSc6XG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPj0gMiAmJiB1bmJ1bmRsZSh2YWx1ZVsxXSkgPT09ICckdHlwZScpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgYFwiJHR5cGVcIiBjYW5ub3QgYmUgdXNlIHdpdGggb3BlcmF0b3IgXCIke3ZhbHVlWzBdfVwiYCkpO1xuICAgICAgICB9XG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICBjYXNlICc9PSc6XG4gICAgY2FzZSAnIT0nOlxuICAgICAgICBpZiAodmFsdWUubGVuZ3RoICE9PSAzKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsIGBmaWx0ZXIgYXJyYXkgZm9yIG9wZXJhdG9yIFwiJHt2YWx1ZVswXX1cIiBtdXN0IGhhdmUgMyBlbGVtZW50c2ApKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgY2FzZSAnaW4nOlxuICAgIGNhc2UgJyFpbic6XG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPj0gMikge1xuICAgICAgICAgICAgdHlwZSA9IGdldFR5cGUodmFsdWVbMV0pO1xuICAgICAgICAgICAgaWYgKHR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihgJHtrZXl9WzFdYCwgdmFsdWVbMV0sIGBzdHJpbmcgZXhwZWN0ZWQsICR7dHlwZX0gZm91bmRgKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDI7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdHlwZSA9IGdldFR5cGUodmFsdWVbaV0pO1xuICAgICAgICAgICAgaWYgKHVuYnVuZGxlKHZhbHVlWzFdKSA9PT0gJyR0eXBlJykge1xuICAgICAgICAgICAgICAgIGVycm9ycyA9IGVycm9ycy5jb25jYXQodmFsaWRhdGVFbnVtKHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiBgJHtrZXl9WyR7aX1dYCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlW2ldLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZVNwZWM6IHN0eWxlU3BlYy5nZW9tZXRyeV90eXBlLFxuICAgICAgICAgICAgICAgICAgICBzdHlsZTogb3B0aW9ucy5zdHlsZSxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGVTcGVjOiBvcHRpb25zLnN0eWxlU3BlY1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSAhPT0gJ3N0cmluZycgJiYgdHlwZSAhPT0gJ251bWJlcicgJiYgdHlwZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihgJHtrZXl9WyR7aX1dYCwgdmFsdWVbaV0sIGBzdHJpbmcsIG51bWJlciwgb3IgYm9vbGVhbiBleHBlY3RlZCwgJHt0eXBlfSBmb3VuZGApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgIGNhc2UgJ2FueSc6XG4gICAgY2FzZSAnYWxsJzpcbiAgICBjYXNlICdub25lJzpcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdCh2YWxpZGF0ZU5vbkV4cHJlc3Npb25GaWx0ZXIoe1xuICAgICAgICAgICAgICAgIGtleTogYCR7a2V5fVske2l9XWAsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlW2ldLFxuICAgICAgICAgICAgICAgIHN0eWxlOiBvcHRpb25zLnN0eWxlLFxuICAgICAgICAgICAgICAgIHN0eWxlU3BlYzogb3B0aW9ucy5zdHlsZVNwZWNcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgIGNhc2UgJ2hhcyc6XG4gICAgY2FzZSAnIWhhcyc6XG4gICAgICAgIHR5cGUgPSBnZXRUeXBlKHZhbHVlWzFdKTtcbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCAhPT0gMikge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCBgZmlsdGVyIGFycmF5IGZvciBcIiR7dmFsdWVbMF19XCIgb3BlcmF0b3IgbXVzdCBoYXZlIDIgZWxlbWVudHNgKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3IoYCR7a2V5fVsxXWAsIHZhbHVlWzFdLCBgc3RyaW5nIGV4cGVjdGVkLCAke3R5cGV9IGZvdW5kYCkpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycztcbn1cbiIsIlxuaW1wb3J0IHZhbGlkYXRlIGZyb20gJy4vdmFsaWRhdGUnO1xuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yJztcbmltcG9ydCBnZXRUeXBlIGZyb20gJy4uL3V0aWwvZ2V0X3R5cGUnO1xuaW1wb3J0IHtpc0Z1bmN0aW9ufSBmcm9tICcuLi9mdW5jdGlvbic7XG5pbXBvcnQge3VuYnVuZGxlLCBkZWVwVW5idW5kbGV9IGZyb20gJy4uL3V0aWwvdW5idW5kbGVfanNvbmxpbnQnO1xuaW1wb3J0IHtzdXBwb3J0c1Byb3BlcnR5RXhwcmVzc2lvbn0gZnJvbSAnLi4vdXRpbC9wcm9wZXJ0aWVzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0eShvcHRpb25zLCBwcm9wZXJ0eVR5cGUpIHtcbiAgICBjb25zdCBrZXkgPSBvcHRpb25zLmtleTtcbiAgICBjb25zdCBzdHlsZSA9IG9wdGlvbnMuc3R5bGU7XG4gICAgY29uc3Qgc3R5bGVTcGVjID0gb3B0aW9ucy5zdHlsZVNwZWM7XG4gICAgY29uc3QgdmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuICAgIGNvbnN0IHByb3BlcnR5S2V5ID0gb3B0aW9ucy5vYmplY3RLZXk7XG4gICAgY29uc3QgbGF5ZXJTcGVjID0gc3R5bGVTcGVjW2Ake3Byb3BlcnR5VHlwZX1fJHtvcHRpb25zLmxheWVyVHlwZX1gXTtcblxuICAgIGlmICghbGF5ZXJTcGVjKSByZXR1cm4gW107XG5cbiAgICBjb25zdCB0cmFuc2l0aW9uTWF0Y2ggPSBwcm9wZXJ0eUtleS5tYXRjaCgvXiguKiktdHJhbnNpdGlvbiQvKTtcbiAgICBpZiAocHJvcGVydHlUeXBlID09PSAncGFpbnQnICYmIHRyYW5zaXRpb25NYXRjaCAmJiBsYXllclNwZWNbdHJhbnNpdGlvbk1hdGNoWzFdXSAmJiBsYXllclNwZWNbdHJhbnNpdGlvbk1hdGNoWzFdXS50cmFuc2l0aW9uKSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZSh7XG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIHZhbHVlU3BlYzogc3R5bGVTcGVjLnRyYW5zaXRpb24sXG4gICAgICAgICAgICBzdHlsZSxcbiAgICAgICAgICAgIHN0eWxlU3BlY1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZVNwZWMgPSBvcHRpb25zLnZhbHVlU3BlYyB8fCBsYXllclNwZWNbcHJvcGVydHlLZXldO1xuICAgIGlmICghdmFsdWVTcGVjKSB7XG4gICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCBgdW5rbm93biBwcm9wZXJ0eSBcIiR7cHJvcGVydHlLZXl9XCJgKV07XG4gICAgfVxuXG4gICAgbGV0IHRva2VuTWF0Y2g7XG4gICAgaWYgKGdldFR5cGUodmFsdWUpID09PSAnc3RyaW5nJyAmJiBzdXBwb3J0c1Byb3BlcnR5RXhwcmVzc2lvbih2YWx1ZVNwZWMpICYmICF2YWx1ZVNwZWMudG9rZW5zICYmICh0b2tlbk1hdGNoID0gL157KFtefV0rKX0kLy5leGVjKHZhbHVlKSkpIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgICAga2V5LCB2YWx1ZSxcbiAgICAgICAgICAgIGBcIiR7cHJvcGVydHlLZXl9XCIgZG9lcyBub3Qgc3VwcG9ydCBpbnRlcnBvbGF0aW9uIHN5bnRheFxcbmAgK1xuICAgICAgICAgICAgICAgIGBVc2UgYW4gaWRlbnRpdHkgcHJvcGVydHkgZnVuY3Rpb24gaW5zdGVhZDogXFxgeyBcInR5cGVcIjogXCJpZGVudGl0eVwiLCBcInByb3BlcnR5XCI6ICR7SlNPTi5zdHJpbmdpZnkodG9rZW5NYXRjaFsxXSl9IH1cXGAuYCldO1xuICAgIH1cblxuICAgIGNvbnN0IGVycm9ycyA9IFtdO1xuXG4gICAgaWYgKG9wdGlvbnMubGF5ZXJUeXBlID09PSAnc3ltYm9sJykge1xuICAgICAgICBpZiAocHJvcGVydHlLZXkgPT09ICd0ZXh0LWZpZWxkJyAmJiBzdHlsZSAmJiAhc3R5bGUuZ2x5cGhzKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsICd1c2Ugb2YgXCJ0ZXh0LWZpZWxkXCIgcmVxdWlyZXMgYSBzdHlsZSBcImdseXBoc1wiIHByb3BlcnR5JykpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wZXJ0eUtleSA9PT0gJ3RleHQtZm9udCcgJiYgaXNGdW5jdGlvbihkZWVwVW5idW5kbGUodmFsdWUpKSAmJiB1bmJ1bmRsZSh2YWx1ZS50eXBlKSA9PT0gJ2lkZW50aXR5Jykge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCAnXCJ0ZXh0LWZvbnRcIiBkb2VzIG5vdCBzdXBwb3J0IGlkZW50aXR5IGZ1bmN0aW9ucycpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlcnJvcnMuY29uY2F0KHZhbGlkYXRlKHtcbiAgICAgICAga2V5OiBvcHRpb25zLmtleSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHZhbHVlU3BlYyxcbiAgICAgICAgc3R5bGUsXG4gICAgICAgIHN0eWxlU3BlYyxcbiAgICAgICAgZXhwcmVzc2lvbkNvbnRleHQ6ICdwcm9wZXJ0eScsXG4gICAgICAgIHByb3BlcnR5VHlwZSxcbiAgICAgICAgcHJvcGVydHlLZXlcbiAgICB9KSk7XG59XG4iLCJcbmltcG9ydCB2YWxpZGF0ZVByb3BlcnR5IGZyb20gJy4vdmFsaWRhdGVfcHJvcGVydHknO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWxpZGF0ZVBhaW50UHJvcGVydHkob3B0aW9ucykge1xuICAgIHJldHVybiB2YWxpZGF0ZVByb3BlcnR5KG9wdGlvbnMsICdwYWludCcpO1xufVxuIiwiXG5pbXBvcnQgdmFsaWRhdGVQcm9wZXJ0eSBmcm9tICcuL3ZhbGlkYXRlX3Byb3BlcnR5JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVMYXlvdXRQcm9wZXJ0eShvcHRpb25zKSB7XG4gICAgcmV0dXJuIHZhbGlkYXRlUHJvcGVydHkob3B0aW9ucywgJ2xheW91dCcpO1xufVxuIiwiXG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3InO1xuaW1wb3J0IHt1bmJ1bmRsZX0gZnJvbSAnLi4vdXRpbC91bmJ1bmRsZV9qc29ubGludCc7XG5pbXBvcnQgdmFsaWRhdGVPYmplY3QgZnJvbSAnLi92YWxpZGF0ZV9vYmplY3QnO1xuaW1wb3J0IHZhbGlkYXRlRmlsdGVyIGZyb20gJy4vdmFsaWRhdGVfZmlsdGVyJztcbmltcG9ydCB2YWxpZGF0ZVBhaW50UHJvcGVydHkgZnJvbSAnLi92YWxpZGF0ZV9wYWludF9wcm9wZXJ0eSc7XG5pbXBvcnQgdmFsaWRhdGVMYXlvdXRQcm9wZXJ0eSBmcm9tICcuL3ZhbGlkYXRlX2xheW91dF9wcm9wZXJ0eSc7XG5pbXBvcnQgdmFsaWRhdGVTcGVjIGZyb20gJy4vdmFsaWRhdGUnO1xuaW1wb3J0IGV4dGVuZCBmcm9tICcuLi91dGlsL2V4dGVuZCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlTGF5ZXIob3B0aW9ucykge1xuICAgIGxldCBlcnJvcnMgPSBbXTtcblxuICAgIGNvbnN0IGxheWVyID0gb3B0aW9ucy52YWx1ZTtcbiAgICBjb25zdCBrZXkgPSBvcHRpb25zLmtleTtcbiAgICBjb25zdCBzdHlsZSA9IG9wdGlvbnMuc3R5bGU7XG4gICAgY29uc3Qgc3R5bGVTcGVjID0gb3B0aW9ucy5zdHlsZVNwZWM7XG5cbiAgICBpZiAoIWxheWVyLnR5cGUgJiYgIWxheWVyLnJlZikge1xuICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgbGF5ZXIsICdlaXRoZXIgXCJ0eXBlXCIgb3IgXCJyZWZcIiBpcyByZXF1aXJlZCcpKTtcbiAgICB9XG4gICAgbGV0IHR5cGUgPSB1bmJ1bmRsZShsYXllci50eXBlKTtcbiAgICBjb25zdCByZWYgPSB1bmJ1bmRsZShsYXllci5yZWYpO1xuXG4gICAgaWYgKGxheWVyLmlkKSB7XG4gICAgICAgIGNvbnN0IGxheWVySWQgPSB1bmJ1bmRsZShsYXllci5pZCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5hcnJheUluZGV4OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG90aGVyTGF5ZXIgPSBzdHlsZS5sYXllcnNbaV07XG4gICAgICAgICAgICBpZiAodW5idW5kbGUob3RoZXJMYXllci5pZCkgPT09IGxheWVySWQpIHtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgbGF5ZXIuaWQsIGBkdXBsaWNhdGUgbGF5ZXIgaWQgXCIke2xheWVyLmlkfVwiLCBwcmV2aW91c2x5IHVzZWQgYXQgbGluZSAke290aGVyTGF5ZXIuaWQuX19saW5lX199YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCdyZWYnIGluIGxheWVyKSB7XG4gICAgICAgIFsndHlwZScsICdzb3VyY2UnLCAnc291cmNlLWxheWVyJywgJ2ZpbHRlcicsICdsYXlvdXQnXS5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgICAgICBpZiAocCBpbiBsYXllcikge1xuICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCBsYXllcltwXSwgYFwiJHtwfVwiIGlzIHByb2hpYml0ZWQgZm9yIHJlZiBsYXllcnNgKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxldCBwYXJlbnQ7XG5cbiAgICAgICAgc3R5bGUubGF5ZXJzLmZvckVhY2goKGxheWVyKSA9PiB7XG4gICAgICAgICAgICBpZiAodW5idW5kbGUobGF5ZXIuaWQpID09PSByZWYpIHBhcmVudCA9IGxheWVyO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIXBhcmVudCkge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIGxheWVyLnJlZiwgYHJlZiBsYXllciBcIiR7cmVmfVwiIG5vdCBmb3VuZGApKTtcbiAgICAgICAgfSBlbHNlIGlmIChwYXJlbnQucmVmKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgbGF5ZXIucmVmLCAncmVmIGNhbm5vdCByZWZlcmVuY2UgYW5vdGhlciByZWYgbGF5ZXInKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0eXBlID0gdW5idW5kbGUocGFyZW50LnR5cGUpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlICE9PSAnYmFja2dyb3VuZCcpIHtcbiAgICAgICAgaWYgKCFsYXllci5zb3VyY2UpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCBsYXllciwgJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgXCJzb3VyY2VcIicpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IHN0eWxlLnNvdXJjZXMgJiYgc3R5bGUuc291cmNlc1tsYXllci5zb3VyY2VdO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlVHlwZSA9IHNvdXJjZSAmJiB1bmJ1bmRsZShzb3VyY2UudHlwZSk7XG4gICAgICAgICAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCBsYXllci5zb3VyY2UsIGBzb3VyY2UgXCIke2xheWVyLnNvdXJjZX1cIiBub3QgZm91bmRgKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNvdXJjZVR5cGUgPT09ICd2ZWN0b3InICYmIHR5cGUgPT09ICdyYXN0ZXInKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIGxheWVyLnNvdXJjZSwgYGxheWVyIFwiJHtsYXllci5pZH1cIiByZXF1aXJlcyBhIHJhc3RlciBzb3VyY2VgKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNvdXJjZVR5cGUgPT09ICdyYXN0ZXInICYmIHR5cGUgIT09ICdyYXN0ZXInKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIGxheWVyLnNvdXJjZSwgYGxheWVyIFwiJHtsYXllci5pZH1cIiByZXF1aXJlcyBhIHZlY3RvciBzb3VyY2VgKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNvdXJjZVR5cGUgPT09ICd2ZWN0b3InICYmICFsYXllclsnc291cmNlLWxheWVyJ10pIHtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgbGF5ZXIsIGBsYXllciBcIiR7bGF5ZXIuaWR9XCIgbXVzdCBzcGVjaWZ5IGEgXCJzb3VyY2UtbGF5ZXJcImApKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc291cmNlVHlwZSA9PT0gJ3Jhc3Rlci1kZW0nICYmIHR5cGUgIT09ICdoaWxsc2hhZGUnKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIGxheWVyLnNvdXJjZSwgJ3Jhc3Rlci1kZW0gc291cmNlIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBsYXllciB0eXBlIFxcJ2hpbGxzaGFkZVxcJy4nKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdsaW5lJyAmJiBsYXllci5wYWludCAmJiBsYXllci5wYWludFsnbGluZS1ncmFkaWVudCddICYmXG4gICAgICAgICAgICAgICAgICAgICAgIChzb3VyY2VUeXBlICE9PSAnZ2VvanNvbicgfHwgIXNvdXJjZS5saW5lTWV0cmljcykpIHtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgbGF5ZXIsIGBsYXllciBcIiR7bGF5ZXIuaWR9XCIgc3BlY2lmaWVzIGEgbGluZS1ncmFkaWVudCwgd2hpY2ggcmVxdWlyZXMgYSBHZW9KU09OIHNvdXJjZSB3aXRoIFxcYGxpbmVNZXRyaWNzXFxgIGVuYWJsZWQuYCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdCh2YWxpZGF0ZU9iamVjdCh7XG4gICAgICAgIGtleSxcbiAgICAgICAgdmFsdWU6IGxheWVyLFxuICAgICAgICB2YWx1ZVNwZWM6IHN0eWxlU3BlYy5sYXllcixcbiAgICAgICAgc3R5bGU6IG9wdGlvbnMuc3R5bGUsXG4gICAgICAgIHN0eWxlU3BlYzogb3B0aW9ucy5zdHlsZVNwZWMsXG4gICAgICAgIG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOiB7XG4gICAgICAgICAgICAnKicoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gZW5mb3JjZSB0aGUgc3BlYydzIGBcInJlcXVpcmVzXCI6IHRydWVgIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggcmVmcztcbiAgICAgICAgICAgIC8vIHRoZSBhY3R1YWwgcmVxdWlyZW1lbnQgaXMgdmFsaWRhdGVkIGFib3ZlLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzU3NzIuXG4gICAgICAgICAgICB0eXBlKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZVNwZWMoe1xuICAgICAgICAgICAgICAgICAgICBrZXk6IGAke2tleX0udHlwZWAsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBsYXllci50eXBlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZVNwZWM6IHN0eWxlU3BlYy5sYXllci50eXBlLFxuICAgICAgICAgICAgICAgICAgICBzdHlsZTogb3B0aW9ucy5zdHlsZSxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGVTcGVjOiBvcHRpb25zLnN0eWxlU3BlYyxcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0OiBsYXllcixcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0S2V5OiAndHlwZSdcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmaWx0ZXI6IHZhbGlkYXRlRmlsdGVyLFxuICAgICAgICAgICAgbGF5b3V0KG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVPYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICBsYXllcixcbiAgICAgICAgICAgICAgICAgICAga2V5OiBvcHRpb25zLmtleSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG9wdGlvbnMudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiBvcHRpb25zLnN0eWxlLFxuICAgICAgICAgICAgICAgICAgICBzdHlsZVNwZWM6IG9wdGlvbnMuc3R5bGVTcGVjLFxuICAgICAgICAgICAgICAgICAgICBvYmplY3RFbGVtZW50VmFsaWRhdG9yczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJyonKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVMYXlvdXRQcm9wZXJ0eShleHRlbmQoe2xheWVyVHlwZTogdHlwZX0sIG9wdGlvbnMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhaW50KG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVPYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICBsYXllcixcbiAgICAgICAgICAgICAgICAgICAga2V5OiBvcHRpb25zLmtleSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG9wdGlvbnMudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiBvcHRpb25zLnN0eWxlLFxuICAgICAgICAgICAgICAgICAgICBzdHlsZVNwZWM6IG9wdGlvbnMuc3R5bGVTcGVjLFxuICAgICAgICAgICAgICAgICAgICBvYmplY3RFbGVtZW50VmFsaWRhdG9yczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJyonKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVQYWludFByb3BlcnR5KGV4dGVuZCh7bGF5ZXJUeXBlOiB0eXBlfSwgb3B0aW9ucykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KSk7XG5cbiAgICByZXR1cm4gZXJyb3JzO1xufVxuIiwiXG5pbXBvcnQgZ2V0VHlwZSBmcm9tICcuLi91dGlsL2dldF90eXBlJztcbmltcG9ydCBWYWxpZGF0aW9uRXJyb3IgZnJvbSAnLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvcic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlU3RyaW5nKG9wdGlvbnMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnMudmFsdWU7XG4gICAgY29uc3Qga2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgY29uc3QgdHlwZSA9IGdldFR5cGUodmFsdWUpO1xuXG4gICAgaWYgKHR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCBgc3RyaW5nIGV4cGVjdGVkLCAke3R5cGV9IGZvdW5kYCldO1xuICAgIH1cblxuICAgIHJldHVybiBbXTtcbn1cbiIsIlxuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yJztcbmltcG9ydCB7dW5idW5kbGV9IGZyb20gJy4uL3V0aWwvdW5idW5kbGVfanNvbmxpbnQnO1xuaW1wb3J0IHZhbGlkYXRlT2JqZWN0IGZyb20gJy4vdmFsaWRhdGVfb2JqZWN0JztcbmltcG9ydCB2YWxpZGF0ZUVudW0gZnJvbSAnLi92YWxpZGF0ZV9lbnVtJztcbmltcG9ydCB2YWxpZGF0ZUV4cHJlc3Npb24gZnJvbSAnLi92YWxpZGF0ZV9leHByZXNzaW9uJztcbmltcG9ydCB2YWxpZGF0ZVN0cmluZyBmcm9tICcuL3ZhbGlkYXRlX3N0cmluZyc7XG5pbXBvcnQgZ2V0VHlwZSBmcm9tICcuLi91dGlsL2dldF90eXBlJztcblxuY29uc3Qgb2JqZWN0RWxlbWVudFZhbGlkYXRvcnMgPSB7XG4gICAgcHJvbW90ZUlkOiB2YWxpZGF0ZVByb21vdGVJZFxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVTb3VyY2Uob3B0aW9ucykge1xuICAgIGNvbnN0IHZhbHVlID0gb3B0aW9ucy52YWx1ZTtcbiAgICBjb25zdCBrZXkgPSBvcHRpb25zLmtleTtcbiAgICBjb25zdCBzdHlsZVNwZWMgPSBvcHRpb25zLnN0eWxlU3BlYztcbiAgICBjb25zdCBzdHlsZSA9IG9wdGlvbnMuc3R5bGU7XG5cbiAgICBpZiAoIXZhbHVlLnR5cGUpIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsICdcInR5cGVcIiBpcyByZXF1aXJlZCcpXTtcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlID0gdW5idW5kbGUodmFsdWUudHlwZSk7XG4gICAgbGV0IGVycm9ycztcblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ3ZlY3Rvcic6XG4gICAgY2FzZSAncmFzdGVyJzpcbiAgICBjYXNlICdyYXN0ZXItZGVtJzpcbiAgICAgICAgZXJyb3JzID0gdmFsaWRhdGVPYmplY3Qoe1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICB2YWx1ZVNwZWM6IHN0eWxlU3BlY1tgc291cmNlXyR7dHlwZS5yZXBsYWNlKCctJywgJ18nKX1gXSxcbiAgICAgICAgICAgIHN0eWxlOiBvcHRpb25zLnN0eWxlLFxuICAgICAgICAgICAgc3R5bGVTcGVjLFxuICAgICAgICAgICAgb2JqZWN0RWxlbWVudFZhbGlkYXRvcnNcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBlcnJvcnM7XG5cbiAgICBjYXNlICdnZW9qc29uJzpcbiAgICAgICAgZXJyb3JzID0gdmFsaWRhdGVPYmplY3Qoe1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICB2YWx1ZVNwZWM6IHN0eWxlU3BlYy5zb3VyY2VfZ2VvanNvbixcbiAgICAgICAgICAgIHN0eWxlLFxuICAgICAgICAgICAgc3R5bGVTcGVjLFxuICAgICAgICAgICAgb2JqZWN0RWxlbWVudFZhbGlkYXRvcnNcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh2YWx1ZS5jbHVzdGVyKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gdmFsdWUuY2x1c3RlclByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbb3BlcmF0b3IsIG1hcEV4cHJdID0gdmFsdWUuY2x1c3RlclByb3BlcnRpZXNbcHJvcF07XG4gICAgICAgICAgICAgICAgY29uc3QgcmVkdWNlRXhwciA9IHR5cGVvZiBvcGVyYXRvciA9PT0gJ3N0cmluZycgPyBbb3BlcmF0b3IsIFsnYWNjdW11bGF0ZWQnXSwgWydnZXQnLCBwcm9wXV0gOiBvcGVyYXRvcjtcblxuICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKC4uLnZhbGlkYXRlRXhwcmVzc2lvbih7XG4gICAgICAgICAgICAgICAgICAgIGtleTogYCR7a2V5fS4ke3Byb3B9Lm1hcGAsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtYXBFeHByLFxuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uQ29udGV4dDogJ2NsdXN0ZXItbWFwJ1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZUV4cHJlc3Npb24oe1xuICAgICAgICAgICAgICAgICAgICBrZXk6IGAke2tleX0uJHtwcm9wfS5yZWR1Y2VgLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcmVkdWNlRXhwcixcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbkNvbnRleHQ6ICdjbHVzdGVyLXJlZHVjZSdcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVycm9ycztcblxuICAgIGNhc2UgJ3ZpZGVvJzpcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlT2JqZWN0KHtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgdmFsdWVTcGVjOiBzdHlsZVNwZWMuc291cmNlX3ZpZGVvLFxuICAgICAgICAgICAgc3R5bGUsXG4gICAgICAgICAgICBzdHlsZVNwZWNcbiAgICAgICAgfSk7XG5cbiAgICBjYXNlICdpbWFnZSc6XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZU9iamVjdCh7XG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIHZhbHVlU3BlYzogc3R5bGVTcGVjLnNvdXJjZV9pbWFnZSxcbiAgICAgICAgICAgIHN0eWxlLFxuICAgICAgICAgICAgc3R5bGVTcGVjXG4gICAgICAgIH0pO1xuXG4gICAgY2FzZSAnY2FudmFzJzpcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgbnVsbCwgYFBsZWFzZSB1c2UgcnVudGltZSBBUElzIHRvIGFkZCBjYW52YXMgc291cmNlcywgcmF0aGVyIHRoYW4gaW5jbHVkaW5nIHRoZW0gaW4gc3R5bGVzaGVldHMuYCwgJ3NvdXJjZS5jYW52YXMnKV07XG5cbiAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdmFsaWRhdGVFbnVtKHtcbiAgICAgICAgICAgIGtleTogYCR7a2V5fS50eXBlYCxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS50eXBlLFxuICAgICAgICAgICAgdmFsdWVTcGVjOiB7dmFsdWVzOiBbJ3ZlY3RvcicsICdyYXN0ZXInLCAncmFzdGVyLWRlbScsICdnZW9qc29uJywgJ3ZpZGVvJywgJ2ltYWdlJ119LFxuICAgICAgICAgICAgc3R5bGUsXG4gICAgICAgICAgICBzdHlsZVNwZWNcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb21vdGVJZCh7a2V5LCB2YWx1ZX0pIHtcbiAgICBpZiAoZ2V0VHlwZSh2YWx1ZSkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZVN0cmluZyh7a2V5LCB2YWx1ZX0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVycm9ycyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKC4uLnZhbGlkYXRlU3RyaW5nKHtrZXk6IGAke2tleX0uJHtwcm9wfWAsIHZhbHVlOiB2YWx1ZVtwcm9wXX0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXJyb3JzO1xuICAgIH1cbn1cbiIsIlxuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yJztcbmltcG9ydCBnZXRUeXBlIGZyb20gJy4uL3V0aWwvZ2V0X3R5cGUnO1xuaW1wb3J0IHZhbGlkYXRlIGZyb20gJy4vdmFsaWRhdGUnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWxpZGF0ZUxpZ2h0KG9wdGlvbnMpIHtcbiAgICBjb25zdCBsaWdodCA9IG9wdGlvbnMudmFsdWU7XG4gICAgY29uc3Qgc3R5bGVTcGVjID0gb3B0aW9ucy5zdHlsZVNwZWM7XG4gICAgY29uc3QgbGlnaHRTcGVjID0gc3R5bGVTcGVjLmxpZ2h0O1xuICAgIGNvbnN0IHN0eWxlID0gb3B0aW9ucy5zdHlsZTtcblxuICAgIGxldCBlcnJvcnMgPSBbXTtcblxuICAgIGNvbnN0IHJvb3RUeXBlID0gZ2V0VHlwZShsaWdodCk7XG4gICAgaWYgKGxpZ2h0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGVycm9ycztcbiAgICB9IGVsc2UgaWYgKHJvb3RUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0KFtuZXcgVmFsaWRhdGlvbkVycm9yKCdsaWdodCcsIGxpZ2h0LCBgb2JqZWN0IGV4cGVjdGVkLCAke3Jvb3RUeXBlfSBmb3VuZGApXSk7XG4gICAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gbGlnaHQpIHtcbiAgICAgICAgY29uc3QgdHJhbnNpdGlvbk1hdGNoID0ga2V5Lm1hdGNoKC9eKC4qKS10cmFuc2l0aW9uJC8pO1xuXG4gICAgICAgIGlmICh0cmFuc2l0aW9uTWF0Y2ggJiYgbGlnaHRTcGVjW3RyYW5zaXRpb25NYXRjaFsxXV0gJiYgbGlnaHRTcGVjW3RyYW5zaXRpb25NYXRjaFsxXV0udHJhbnNpdGlvbikge1xuICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdCh2YWxpZGF0ZSh7XG4gICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIHZhbHVlOiBsaWdodFtrZXldLFxuICAgICAgICAgICAgICAgIHZhbHVlU3BlYzogc3R5bGVTcGVjLnRyYW5zaXRpb24sXG4gICAgICAgICAgICAgICAgc3R5bGUsXG4gICAgICAgICAgICAgICAgc3R5bGVTcGVjXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSBpZiAobGlnaHRTcGVjW2tleV0pIHtcbiAgICAgICAgICAgIGVycm9ycyA9IGVycm9ycy5jb25jYXQodmFsaWRhdGUoe1xuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbGlnaHRba2V5XSxcbiAgICAgICAgICAgICAgICB2YWx1ZVNwZWM6IGxpZ2h0U3BlY1trZXldLFxuICAgICAgICAgICAgICAgIHN0eWxlLFxuICAgICAgICAgICAgICAgIHN0eWxlU3BlY1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdChbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIGxpZ2h0W2tleV0sIGB1bmtub3duIHByb3BlcnR5IFwiJHtrZXl9XCJgKV0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycztcbn1cbiIsIi8vIEBmbG93XG5pbXBvcnQgdmFsaWRhdGVFeHByZXNzaW9uIGZyb20gJy4vdmFsaWRhdGVfZXhwcmVzc2lvbic7XG5pbXBvcnQgdmFsaWRhdGVTdHJpbmcgZnJvbSAnLi92YWxpZGF0ZV9zdHJpbmcnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWxpZGF0ZUZvcm1hdHRlZChvcHRpb25zOiBhbnkpIHtcbiAgICBpZiAodmFsaWRhdGVTdHJpbmcob3B0aW9ucykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVFeHByZXNzaW9uKG9wdGlvbnMpO1xufVxuIiwiLy8gQGZsb3dcbmltcG9ydCB2YWxpZGF0ZUV4cHJlc3Npb24gZnJvbSAnLi92YWxpZGF0ZV9leHByZXNzaW9uJztcbmltcG9ydCB2YWxpZGF0ZVN0cmluZyBmcm9tICcuL3ZhbGlkYXRlX3N0cmluZyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlSW1hZ2Uob3B0aW9uczogYW55KSB7XG4gICAgaWYgKHZhbGlkYXRlU3RyaW5nKG9wdGlvbnMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlRXhwcmVzc2lvbihvcHRpb25zKTtcbn1cbiIsIlxuaW1wb3J0IGV4dGVuZCBmcm9tICcuLi91dGlsL2V4dGVuZCc7XG5pbXBvcnQge3VuYnVuZGxlLCBkZWVwVW5idW5kbGV9IGZyb20gJy4uL3V0aWwvdW5idW5kbGVfanNvbmxpbnQnO1xuaW1wb3J0IHtpc0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHtpc0Z1bmN0aW9ufSBmcm9tICcuLi9mdW5jdGlvbic7XG5cbmltcG9ydCB2YWxpZGF0ZUZ1bmN0aW9uIGZyb20gJy4vdmFsaWRhdGVfZnVuY3Rpb24nO1xuaW1wb3J0IHZhbGlkYXRlRXhwcmVzc2lvbiBmcm9tICcuL3ZhbGlkYXRlX2V4cHJlc3Npb24nO1xuaW1wb3J0IHZhbGlkYXRlT2JqZWN0IGZyb20gJy4vdmFsaWRhdGVfb2JqZWN0JztcbmltcG9ydCB2YWxpZGF0ZUFycmF5IGZyb20gJy4vdmFsaWRhdGVfYXJyYXknO1xuaW1wb3J0IHZhbGlkYXRlQm9vbGVhbiBmcm9tICcuL3ZhbGlkYXRlX2Jvb2xlYW4nO1xuaW1wb3J0IHZhbGlkYXRlTnVtYmVyIGZyb20gJy4vdmFsaWRhdGVfbnVtYmVyJztcbmltcG9ydCB2YWxpZGF0ZUNvbG9yIGZyb20gJy4vdmFsaWRhdGVfY29sb3InO1xuaW1wb3J0IHZhbGlkYXRlQ29uc3RhbnRzIGZyb20gJy4vdmFsaWRhdGVfY29uc3RhbnRzJztcbmltcG9ydCB2YWxpZGF0ZUVudW0gZnJvbSAnLi92YWxpZGF0ZV9lbnVtJztcbmltcG9ydCB2YWxpZGF0ZUZpbHRlciBmcm9tICcuL3ZhbGlkYXRlX2ZpbHRlcic7XG5pbXBvcnQgdmFsaWRhdGVMYXllciBmcm9tICcuL3ZhbGlkYXRlX2xheWVyJztcbmltcG9ydCB2YWxpZGF0ZVNvdXJjZSBmcm9tICcuL3ZhbGlkYXRlX3NvdXJjZSc7XG5pbXBvcnQgdmFsaWRhdGVMaWdodCBmcm9tICcuL3ZhbGlkYXRlX2xpZ2h0JztcbmltcG9ydCB2YWxpZGF0ZVN0cmluZyBmcm9tICcuL3ZhbGlkYXRlX3N0cmluZyc7XG5pbXBvcnQgdmFsaWRhdGVGb3JtYXR0ZWQgZnJvbSAnLi92YWxpZGF0ZV9mb3JtYXR0ZWQnO1xuaW1wb3J0IHZhbGlkYXRlSW1hZ2UgZnJvbSAnLi92YWxpZGF0ZV9pbWFnZSc7XG5cbmNvbnN0IFZBTElEQVRPUlMgPSB7XG4gICAgJyonKCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfSxcbiAgICAnYXJyYXknOiB2YWxpZGF0ZUFycmF5LFxuICAgICdib29sZWFuJzogdmFsaWRhdGVCb29sZWFuLFxuICAgICdudW1iZXInOiB2YWxpZGF0ZU51bWJlcixcbiAgICAnY29sb3InOiB2YWxpZGF0ZUNvbG9yLFxuICAgICdjb25zdGFudHMnOiB2YWxpZGF0ZUNvbnN0YW50cyxcbiAgICAnZW51bSc6IHZhbGlkYXRlRW51bSxcbiAgICAnZmlsdGVyJzogdmFsaWRhdGVGaWx0ZXIsXG4gICAgJ2Z1bmN0aW9uJzogdmFsaWRhdGVGdW5jdGlvbixcbiAgICAnbGF5ZXInOiB2YWxpZGF0ZUxheWVyLFxuICAgICdvYmplY3QnOiB2YWxpZGF0ZU9iamVjdCxcbiAgICAnc291cmNlJzogdmFsaWRhdGVTb3VyY2UsXG4gICAgJ2xpZ2h0JzogdmFsaWRhdGVMaWdodCxcbiAgICAnc3RyaW5nJzogdmFsaWRhdGVTdHJpbmcsXG4gICAgJ2Zvcm1hdHRlZCc6IHZhbGlkYXRlRm9ybWF0dGVkLFxuICAgICdyZXNvbHZlZEltYWdlJzogdmFsaWRhdGVJbWFnZVxufTtcblxuLy8gTWFpbiByZWN1cnNpdmUgdmFsaWRhdGlvbiBmdW5jdGlvbi4gVHJhY2tzOlxuLy9cbi8vIC0ga2V5OiBzdHJpbmcgcmVwcmVzZW50aW5nIGxvY2F0aW9uIG9mIHZhbGlkYXRpb24gaW4gc3R5bGUgdHJlZS4gVXNlZCBvbmx5XG4vLyAgIGZvciBtb3JlIGluZm9ybWF0aXZlIGVycm9yIHJlcG9ydGluZy5cbi8vIC0gdmFsdWU6IGN1cnJlbnQgdmFsdWUgZnJvbSBzdHlsZSBiZWluZyBldmFsdWF0ZWQuIE1heSBiZSBhbnl0aGluZyBmcm9tIGFcbi8vICAgaGlnaCBsZXZlbCBvYmplY3QgdGhhdCBuZWVkcyB0byBiZSBkZXNjZW5kZWQgaW50byBkZWVwZXIgb3IgYSBzaW1wbGVcbi8vICAgc2NhbGFyIHZhbHVlLlxuLy8gLSB2YWx1ZVNwZWM6IGN1cnJlbnQgc3BlYyBiZWluZyBldmFsdWF0ZWQuIFRyYWNrcyB2YWx1ZS5cbi8vIC0gc3R5bGVTcGVjOiBjdXJyZW50IGZ1bGwgc3BlYyBiZWluZyBldmFsdWF0ZWQuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlKG9wdGlvbnMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnMudmFsdWU7XG4gICAgY29uc3QgdmFsdWVTcGVjID0gb3B0aW9ucy52YWx1ZVNwZWM7XG4gICAgY29uc3Qgc3R5bGVTcGVjID0gb3B0aW9ucy5zdHlsZVNwZWM7XG5cbiAgICBpZiAodmFsdWVTcGVjLmV4cHJlc3Npb24gJiYgaXNGdW5jdGlvbih1bmJ1bmRsZSh2YWx1ZSkpKSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZUZ1bmN0aW9uKG9wdGlvbnMpO1xuXG4gICAgfSBlbHNlIGlmICh2YWx1ZVNwZWMuZXhwcmVzc2lvbiAmJiBpc0V4cHJlc3Npb24oZGVlcFVuYnVuZGxlKHZhbHVlKSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlRXhwcmVzc2lvbihvcHRpb25zKTtcblxuICAgIH0gZWxzZSBpZiAodmFsdWVTcGVjLnR5cGUgJiYgVkFMSURBVE9SU1t2YWx1ZVNwZWMudHlwZV0pIHtcbiAgICAgICAgcmV0dXJuIFZBTElEQVRPUlNbdmFsdWVTcGVjLnR5cGVdKG9wdGlvbnMpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZU9iamVjdChleHRlbmQoe30sIG9wdGlvbnMsIHtcbiAgICAgICAgICAgIHZhbHVlU3BlYzogdmFsdWVTcGVjLnR5cGUgPyBzdHlsZVNwZWNbdmFsdWVTcGVjLnR5cGVdIDogdmFsdWVTcGVjXG4gICAgICAgIH0pKTtcbiAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgIH1cbn1cbiIsIlxuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yJztcbmltcG9ydCB2YWxpZGF0ZVN0cmluZyBmcm9tICcuL3ZhbGlkYXRlX3N0cmluZyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnMudmFsdWU7XG4gICAgY29uc3Qga2V5ID0gb3B0aW9ucy5rZXk7XG5cbiAgICBjb25zdCBlcnJvcnMgPSB2YWxpZGF0ZVN0cmluZyhvcHRpb25zKTtcbiAgICBpZiAoZXJyb3JzLmxlbmd0aCkgcmV0dXJuIGVycm9ycztcblxuICAgIGlmICh2YWx1ZS5pbmRleE9mKCd7Zm9udHN0YWNrfScpID09PSAtMSkge1xuICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsICdcImdseXBoc1wiIHVybCBtdXN0IGluY2x1ZGUgYSBcIntmb250c3RhY2t9XCIgdG9rZW4nKSk7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlLmluZGV4T2YoJ3tyYW5nZX0nKSA9PT0gLTEpIHtcbiAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCAnXCJnbHlwaHNcIiB1cmwgbXVzdCBpbmNsdWRlIGEgXCJ7cmFuZ2V9XCIgdG9rZW4nKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycztcbn1cbiIsIlxuaW1wb3J0IHZhbGlkYXRlQ29uc3RhbnRzIGZyb20gJy4vdmFsaWRhdGUvdmFsaWRhdGVfY29uc3RhbnRzJztcbmltcG9ydCB2YWxpZGF0ZSBmcm9tICcuL3ZhbGlkYXRlL3ZhbGlkYXRlJztcbmltcG9ydCBsYXRlc3RTdHlsZVNwZWMgZnJvbSAnLi9yZWZlcmVuY2UvbGF0ZXN0JztcbmltcG9ydCB2YWxpZGF0ZUdseXBoc1VSTCBmcm9tICcuL3ZhbGlkYXRlL3ZhbGlkYXRlX2dseXBoc191cmwnO1xuXG5pbXBvcnQgdmFsaWRhdGVTb3VyY2UgZnJvbSAnLi92YWxpZGF0ZS92YWxpZGF0ZV9zb3VyY2UnO1xuaW1wb3J0IHZhbGlkYXRlTGlnaHQgZnJvbSAnLi92YWxpZGF0ZS92YWxpZGF0ZV9saWdodCc7XG5pbXBvcnQgdmFsaWRhdGVMYXllciBmcm9tICcuL3ZhbGlkYXRlL3ZhbGlkYXRlX2xheWVyJztcbmltcG9ydCB2YWxpZGF0ZUZpbHRlciBmcm9tICcuL3ZhbGlkYXRlL3ZhbGlkYXRlX2ZpbHRlcic7XG5pbXBvcnQgdmFsaWRhdGVQYWludFByb3BlcnR5IGZyb20gJy4vdmFsaWRhdGUvdmFsaWRhdGVfcGFpbnRfcHJvcGVydHknO1xuaW1wb3J0IHZhbGlkYXRlTGF5b3V0UHJvcGVydHkgZnJvbSAnLi92YWxpZGF0ZS92YWxpZGF0ZV9sYXlvdXRfcHJvcGVydHknO1xuXG4vKipcbiAqIFZhbGlkYXRlIGEgTWFwYm94IEdMIHN0eWxlIGFnYWluc3QgdGhlIHN0eWxlIHNwZWNpZmljYXRpb24uIFRoaXMgZW50cnlwb2ludCxcbiAqIGBtYXBib3gtZ2wtc3R5bGUtc3BlYy9saWIvdmFsaWRhdGVfc3R5bGUubWluYCwgaXMgZGVzaWduZWQgdG8gcHJvZHVjZSBhc1xuICogc21hbGwgYSBicm93c2VyaWZ5IGJ1bmRsZSBhcyBwb3NzaWJsZSBieSBvbWl0dGluZyB1bm5lY2Vzc2FyeSBmdW5jdGlvbmFsaXR5XG4gKiBhbmQgbGVnYWN5IHN0eWxlIHNwZWNpZmljYXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc3R5bGUgVGhlIHN0eWxlIHRvIGJlIHZhbGlkYXRlZC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3R5bGVTcGVjXSBUaGUgc3R5bGUgc3BlY2lmaWNhdGlvbiB0byB2YWxpZGF0ZSBhZ2FpbnN0LlxuICogICAgIElmIG9taXR0ZWQsIHRoZSBsYXRlc3Qgc3R5bGUgc3BlYyBpcyB1c2VkLlxuICogQHJldHVybnMge0FycmF5PFZhbGlkYXRpb25FcnJvcj59XG4gKiBAZXhhbXBsZVxuICogICB2YXIgdmFsaWRhdGUgPSByZXF1aXJlKCdtYXBib3gtZ2wtc3R5bGUtc3BlYy9saWIvdmFsaWRhdGVfc3R5bGUubWluJyk7XG4gKiAgIHZhciBlcnJvcnMgPSB2YWxpZGF0ZShzdHlsZSk7XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlU3R5bGVNaW4oc3R5bGUsIHN0eWxlU3BlYyA9IGxhdGVzdFN0eWxlU3BlYykge1xuXG4gICAgbGV0IGVycm9ycyA9IFtdO1xuXG4gICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdCh2YWxpZGF0ZSh7XG4gICAgICAgIGtleTogJycsXG4gICAgICAgIHZhbHVlOiBzdHlsZSxcbiAgICAgICAgdmFsdWVTcGVjOiBzdHlsZVNwZWMuJHJvb3QsXG4gICAgICAgIHN0eWxlU3BlYyxcbiAgICAgICAgc3R5bGUsXG4gICAgICAgIG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOiB7XG4gICAgICAgICAgICBnbHlwaHM6IHZhbGlkYXRlR2x5cGhzVVJMLFxuICAgICAgICAgICAgJyonKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pKTtcblxuICAgIGlmIChzdHlsZS5jb25zdGFudHMpIHtcbiAgICAgICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdCh2YWxpZGF0ZUNvbnN0YW50cyh7XG4gICAgICAgICAgICBrZXk6ICdjb25zdGFudHMnLFxuICAgICAgICAgICAgdmFsdWU6IHN0eWxlLmNvbnN0YW50cyxcbiAgICAgICAgICAgIHN0eWxlLFxuICAgICAgICAgICAgc3R5bGVTcGVjXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc29ydEVycm9ycyhlcnJvcnMpO1xufVxuXG52YWxpZGF0ZVN0eWxlTWluLnNvdXJjZSA9IHdyYXBDbGVhbkVycm9ycyh2YWxpZGF0ZVNvdXJjZSk7XG52YWxpZGF0ZVN0eWxlTWluLmxpZ2h0ID0gd3JhcENsZWFuRXJyb3JzKHZhbGlkYXRlTGlnaHQpO1xudmFsaWRhdGVTdHlsZU1pbi5sYXllciA9IHdyYXBDbGVhbkVycm9ycyh2YWxpZGF0ZUxheWVyKTtcbnZhbGlkYXRlU3R5bGVNaW4uZmlsdGVyID0gd3JhcENsZWFuRXJyb3JzKHZhbGlkYXRlRmlsdGVyKTtcbnZhbGlkYXRlU3R5bGVNaW4ucGFpbnRQcm9wZXJ0eSA9IHdyYXBDbGVhbkVycm9ycyh2YWxpZGF0ZVBhaW50UHJvcGVydHkpO1xudmFsaWRhdGVTdHlsZU1pbi5sYXlvdXRQcm9wZXJ0eSA9IHdyYXBDbGVhbkVycm9ycyh2YWxpZGF0ZUxheW91dFByb3BlcnR5KTtcblxuZnVuY3Rpb24gc29ydEVycm9ycyhlcnJvcnMpIHtcbiAgICByZXR1cm4gW10uY29uY2F0KGVycm9ycykuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICByZXR1cm4gYS5saW5lIC0gYi5saW5lO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiB3cmFwQ2xlYW5FcnJvcnMoaW5uZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oLi4uYXJncykge1xuICAgICAgICByZXR1cm4gc29ydEVycm9ycyhpbm5lci5hcHBseSh0aGlzLCBhcmdzKSk7XG4gICAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdmFsaWRhdGVTdHlsZU1pbjtcbiIsIi8vIEBmbG93XG5pbXBvcnQgdmFsaWRhdGVTdHlsZU1pbiBmcm9tICcuLi9zdHlsZS1zcGVjL3ZhbGlkYXRlX3N0eWxlLm1pbic7XG5pbXBvcnQge0Vycm9yRXZlbnR9IGZyb20gJy4uL3V0aWwvZXZlbnRlZCc7XG5cbmltcG9ydCB0eXBlIHtFdmVudGVkfSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuXG50eXBlIFZhbGlkYXRpb25FcnJvciA9IHtcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgbGluZTogbnVtYmVyLFxuICAgIGlkZW50aWZpZXI/OiBzdHJpbmdcbn07XG5cbmV4cG9ydCB0eXBlIFZhbGlkYXRvciA9IChPYmplY3QpID0+ICRSZWFkT25seUFycmF5PFZhbGlkYXRpb25FcnJvcj47XG5cbnR5cGUgVmFsaWRhdGVTdHlsZSA9IHtcbiAgICAoT2JqZWN0LCA/T2JqZWN0KTogJFJlYWRPbmx5QXJyYXk8VmFsaWRhdGlvbkVycm9yPixcbiAgICBzb3VyY2U6IFZhbGlkYXRvcixcbiAgICBsYXllcjogVmFsaWRhdG9yLFxuICAgIGxpZ2h0OiBWYWxpZGF0b3IsXG4gICAgZmlsdGVyOiBWYWxpZGF0b3IsXG4gICAgcGFpbnRQcm9wZXJ0eTogVmFsaWRhdG9yLFxuICAgIGxheW91dFByb3BlcnR5OiBWYWxpZGF0b3Jcbn07XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVN0eWxlID0gKHZhbGlkYXRlU3R5bGVNaW46IFZhbGlkYXRlU3R5bGUpO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVTb3VyY2UgPSB2YWxpZGF0ZVN0eWxlLnNvdXJjZTtcbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUxpZ2h0ID0gdmFsaWRhdGVTdHlsZS5saWdodDtcbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUZpbHRlciA9IHZhbGlkYXRlU3R5bGUuZmlsdGVyO1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlUGFpbnRQcm9wZXJ0eSA9IHZhbGlkYXRlU3R5bGUucGFpbnRQcm9wZXJ0eTtcbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUxheW91dFByb3BlcnR5ID0gdmFsaWRhdGVTdHlsZS5sYXlvdXRQcm9wZXJ0eTtcblxuZXhwb3J0IGZ1bmN0aW9uIGVtaXRWYWxpZGF0aW9uRXJyb3JzKGVtaXR0ZXI6IEV2ZW50ZWQsIGVycm9yczogPyRSZWFkT25seUFycmF5PHttZXNzYWdlOiBzdHJpbmcsIGlkZW50aWZpZXI/OiBzdHJpbmd9Pik6IGJvb2xlYW4ge1xuICAgIGxldCBoYXNFcnJvcnMgPSBmYWxzZTtcbiAgICBpZiAoZXJyb3JzICYmIGVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChjb25zdCBlcnJvciBvZiBlcnJvcnMpIHtcbiAgICAgICAgICAgIGVtaXR0ZXIuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoZXJyb3IubWVzc2FnZSkpKTtcbiAgICAgICAgICAgIGhhc0Vycm9ycyA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGhhc0Vycm9ycztcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBHcmlkSW5kZXg7XG5cbnZhciBOVU1fUEFSQU1TID0gMztcblxuZnVuY3Rpb24gR3JpZEluZGV4KGV4dGVudCwgbiwgcGFkZGluZykge1xuICAgIHZhciBjZWxscyA9IHRoaXMuY2VsbHMgPSBbXTtcblxuICAgIGlmIChleHRlbnQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgICB0aGlzLmFycmF5QnVmZmVyID0gZXh0ZW50O1xuICAgICAgICB2YXIgYXJyYXkgPSBuZXcgSW50MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgZXh0ZW50ID0gYXJyYXlbMF07XG4gICAgICAgIG4gPSBhcnJheVsxXTtcbiAgICAgICAgcGFkZGluZyA9IGFycmF5WzJdO1xuXG4gICAgICAgIHRoaXMuZCA9IG4gKyAyICogcGFkZGluZztcbiAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB0aGlzLmQgKiB0aGlzLmQ7IGsrKykge1xuICAgICAgICAgICAgdmFyIHN0YXJ0ID0gYXJyYXlbTlVNX1BBUkFNUyArIGtdO1xuICAgICAgICAgICAgdmFyIGVuZCA9IGFycmF5W05VTV9QQVJBTVMgKyBrICsgMV07XG4gICAgICAgICAgICBjZWxscy5wdXNoKHN0YXJ0ID09PSBlbmQgP1xuICAgICAgICAgICAgICAgICAgICBudWxsIDpcbiAgICAgICAgICAgICAgICAgICAgYXJyYXkuc3ViYXJyYXkoc3RhcnQsIGVuZCkpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBrZXlzT2Zmc2V0ID0gYXJyYXlbTlVNX1BBUkFNUyArIGNlbGxzLmxlbmd0aF07XG4gICAgICAgIHZhciBiYm94ZXNPZmZzZXQgPSBhcnJheVtOVU1fUEFSQU1TICsgY2VsbHMubGVuZ3RoICsgMV07XG4gICAgICAgIHRoaXMua2V5cyA9IGFycmF5LnN1YmFycmF5KGtleXNPZmZzZXQsIGJib3hlc09mZnNldCk7XG4gICAgICAgIHRoaXMuYmJveGVzID0gYXJyYXkuc3ViYXJyYXkoYmJveGVzT2Zmc2V0KTtcblxuICAgICAgICB0aGlzLmluc2VydCA9IHRoaXMuX2luc2VydFJlYWRvbmx5O1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kID0gbiArIDIgKiBwYWRkaW5nO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZCAqIHRoaXMuZDsgaSsrKSB7XG4gICAgICAgICAgICBjZWxscy5wdXNoKFtdKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmtleXMgPSBbXTtcbiAgICAgICAgdGhpcy5iYm94ZXMgPSBbXTtcbiAgICB9XG5cbiAgICB0aGlzLm4gPSBuO1xuICAgIHRoaXMuZXh0ZW50ID0gZXh0ZW50O1xuICAgIHRoaXMucGFkZGluZyA9IHBhZGRpbmc7XG4gICAgdGhpcy5zY2FsZSA9IG4gLyBleHRlbnQ7XG4gICAgdGhpcy51aWQgPSAwO1xuXG4gICAgdmFyIHAgPSAocGFkZGluZyAvIG4pICogZXh0ZW50O1xuICAgIHRoaXMubWluID0gLXA7XG4gICAgdGhpcy5tYXggPSBleHRlbnQgKyBwO1xufVxuXG5cbkdyaWRJbmRleC5wcm90b3R5cGUuaW5zZXJ0ID0gZnVuY3Rpb24oa2V5LCB4MSwgeTEsIHgyLCB5Mikge1xuICAgIHRoaXMuX2ZvckVhY2hDZWxsKHgxLCB5MSwgeDIsIHkyLCB0aGlzLl9pbnNlcnRDZWxsLCB0aGlzLnVpZCsrKTtcbiAgICB0aGlzLmtleXMucHVzaChrZXkpO1xuICAgIHRoaXMuYmJveGVzLnB1c2goeDEpO1xuICAgIHRoaXMuYmJveGVzLnB1c2goeTEpO1xuICAgIHRoaXMuYmJveGVzLnB1c2goeDIpO1xuICAgIHRoaXMuYmJveGVzLnB1c2goeTIpO1xufTtcblxuR3JpZEluZGV4LnByb3RvdHlwZS5faW5zZXJ0UmVhZG9ubHkgPSBmdW5jdGlvbigpIHtcbiAgICB0aHJvdyAnQ2Fubm90IGluc2VydCBpbnRvIGEgR3JpZEluZGV4IGNyZWF0ZWQgZnJvbSBhbiBBcnJheUJ1ZmZlci4nO1xufTtcblxuR3JpZEluZGV4LnByb3RvdHlwZS5faW5zZXJ0Q2VsbCA9IGZ1bmN0aW9uKHgxLCB5MSwgeDIsIHkyLCBjZWxsSW5kZXgsIHVpZCkge1xuICAgIHRoaXMuY2VsbHNbY2VsbEluZGV4XS5wdXNoKHVpZCk7XG59O1xuXG5HcmlkSW5kZXgucHJvdG90eXBlLnF1ZXJ5ID0gZnVuY3Rpb24oeDEsIHkxLCB4MiwgeTIsIGludGVyc2VjdGlvblRlc3QpIHtcbiAgICB2YXIgbWluID0gdGhpcy5taW47XG4gICAgdmFyIG1heCA9IHRoaXMubWF4O1xuICAgIGlmICh4MSA8PSBtaW4gJiYgeTEgPD0gbWluICYmIG1heCA8PSB4MiAmJiBtYXggPD0geTIgJiYgIWludGVyc2VjdGlvblRlc3QpIHtcbiAgICAgICAgLy8gV2UgdXNlIGBBcnJheSNzbGljZWAgYmVjYXVzZSBgdGhpcy5rZXlzYCBtYXkgYmUgYSBgSW50MzJBcnJheWAgYW5kXG4gICAgICAgIC8vIHNvbWUgYnJvd3NlcnMgKFNhZmFyaSBhbmQgSUUpIGRvIG5vdCBzdXBwb3J0IGBUeXBlZEFycmF5I3NsaWNlYFxuICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9UeXBlZEFycmF5L3NsaWNlI0Jyb3dzZXJfY29tcGF0aWJpbGl0eVxuICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5rZXlzKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgICAgdmFyIHNlZW5VaWRzID0ge307XG4gICAgICAgIHRoaXMuX2ZvckVhY2hDZWxsKHgxLCB5MSwgeDIsIHkyLCB0aGlzLl9xdWVyeUNlbGwsIHJlc3VsdCwgc2VlblVpZHMsIGludGVyc2VjdGlvblRlc3QpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn07XG5cbkdyaWRJbmRleC5wcm90b3R5cGUuX3F1ZXJ5Q2VsbCA9IGZ1bmN0aW9uKHgxLCB5MSwgeDIsIHkyLCBjZWxsSW5kZXgsIHJlc3VsdCwgc2VlblVpZHMsIGludGVyc2VjdGlvblRlc3QpIHtcbiAgICB2YXIgY2VsbCA9IHRoaXMuY2VsbHNbY2VsbEluZGV4XTtcbiAgICBpZiAoY2VsbCAhPT0gbnVsbCkge1xuICAgICAgICB2YXIga2V5cyA9IHRoaXMua2V5cztcbiAgICAgICAgdmFyIGJib3hlcyA9IHRoaXMuYmJveGVzO1xuICAgICAgICBmb3IgKHZhciB1ID0gMDsgdSA8IGNlbGwubGVuZ3RoOyB1KyspIHtcbiAgICAgICAgICAgIHZhciB1aWQgPSBjZWxsW3VdO1xuICAgICAgICAgICAgaWYgKHNlZW5VaWRzW3VpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSB1aWQgKiA0O1xuICAgICAgICAgICAgICAgIGlmIChpbnRlcnNlY3Rpb25UZXN0ID9cbiAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0aW9uVGVzdChiYm94ZXNbb2Zmc2V0ICsgMF0sIGJib3hlc1tvZmZzZXQgKyAxXSwgYmJveGVzW29mZnNldCArIDJdLCBiYm94ZXNbb2Zmc2V0ICsgM10pIDpcbiAgICAgICAgICAgICAgICAgICAgKCh4MSA8PSBiYm94ZXNbb2Zmc2V0ICsgMl0pICYmXG4gICAgICAgICAgICAgICAgICAgICh5MSA8PSBiYm94ZXNbb2Zmc2V0ICsgM10pICYmXG4gICAgICAgICAgICAgICAgICAgICh4MiA+PSBiYm94ZXNbb2Zmc2V0ICsgMF0pICYmXG4gICAgICAgICAgICAgICAgICAgICh5MiA+PSBiYm94ZXNbb2Zmc2V0ICsgMV0pKSkge1xuICAgICAgICAgICAgICAgICAgICBzZWVuVWlkc1t1aWRdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goa2V5c1t1aWRdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzZWVuVWlkc1t1aWRdID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuR3JpZEluZGV4LnByb3RvdHlwZS5fZm9yRWFjaENlbGwgPSBmdW5jdGlvbih4MSwgeTEsIHgyLCB5MiwgZm4sIGFyZzEsIGFyZzIsIGludGVyc2VjdGlvblRlc3QpIHtcbiAgICB2YXIgY3gxID0gdGhpcy5fY29udmVydFRvQ2VsbENvb3JkKHgxKTtcbiAgICB2YXIgY3kxID0gdGhpcy5fY29udmVydFRvQ2VsbENvb3JkKHkxKTtcbiAgICB2YXIgY3gyID0gdGhpcy5fY29udmVydFRvQ2VsbENvb3JkKHgyKTtcbiAgICB2YXIgY3kyID0gdGhpcy5fY29udmVydFRvQ2VsbENvb3JkKHkyKTtcbiAgICBmb3IgKHZhciB4ID0gY3gxOyB4IDw9IGN4MjsgeCsrKSB7XG4gICAgICAgIGZvciAodmFyIHkgPSBjeTE7IHkgPD0gY3kyOyB5KyspIHtcbiAgICAgICAgICAgIHZhciBjZWxsSW5kZXggPSB0aGlzLmQgKiB5ICsgeDtcbiAgICAgICAgICAgIGlmIChpbnRlcnNlY3Rpb25UZXN0ICYmICFpbnRlcnNlY3Rpb25UZXN0KFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udmVydEZyb21DZWxsQ29vcmQoeCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb252ZXJ0RnJvbUNlbGxDb29yZCh5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnZlcnRGcm9tQ2VsbENvb3JkKHggKyAxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnZlcnRGcm9tQ2VsbENvb3JkKHkgKyAxKSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKGZuLmNhbGwodGhpcywgeDEsIHkxLCB4MiwgeTIsIGNlbGxJbmRleCwgYXJnMSwgYXJnMiwgaW50ZXJzZWN0aW9uVGVzdCkpIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbkdyaWRJbmRleC5wcm90b3R5cGUuX2NvbnZlcnRGcm9tQ2VsbENvb3JkID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiAoeCAtIHRoaXMucGFkZGluZykgLyB0aGlzLnNjYWxlO1xufTtcblxuR3JpZEluZGV4LnByb3RvdHlwZS5fY29udmVydFRvQ2VsbENvb3JkID0gZnVuY3Rpb24oeCkge1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbih0aGlzLmQgLSAxLCBNYXRoLmZsb29yKHggKiB0aGlzLnNjYWxlKSArIHRoaXMucGFkZGluZykpO1xufTtcblxuR3JpZEluZGV4LnByb3RvdHlwZS50b0FycmF5QnVmZmVyID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuYXJyYXlCdWZmZXIpIHJldHVybiB0aGlzLmFycmF5QnVmZmVyO1xuXG4gICAgdmFyIGNlbGxzID0gdGhpcy5jZWxscztcblxuICAgIHZhciBtZXRhZGF0YUxlbmd0aCA9IE5VTV9QQVJBTVMgKyB0aGlzLmNlbGxzLmxlbmd0aCArIDEgKyAxO1xuICAgIHZhciB0b3RhbENlbGxMZW5ndGggPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jZWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0b3RhbENlbGxMZW5ndGggKz0gdGhpcy5jZWxsc1tpXS5sZW5ndGg7XG4gICAgfVxuXG4gICAgdmFyIGFycmF5ID0gbmV3IEludDMyQXJyYXkobWV0YWRhdGFMZW5ndGggKyB0b3RhbENlbGxMZW5ndGggKyB0aGlzLmtleXMubGVuZ3RoICsgdGhpcy5iYm94ZXMubGVuZ3RoKTtcbiAgICBhcnJheVswXSA9IHRoaXMuZXh0ZW50O1xuICAgIGFycmF5WzFdID0gdGhpcy5uO1xuICAgIGFycmF5WzJdID0gdGhpcy5wYWRkaW5nO1xuXG4gICAgdmFyIG9mZnNldCA9IG1ldGFkYXRhTGVuZ3RoO1xuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgY2VsbHMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgdmFyIGNlbGwgPSBjZWxsc1trXTtcbiAgICAgICAgYXJyYXlbTlVNX1BBUkFNUyArIGtdID0gb2Zmc2V0O1xuICAgICAgICBhcnJheS5zZXQoY2VsbCwgb2Zmc2V0KTtcbiAgICAgICAgb2Zmc2V0ICs9IGNlbGwubGVuZ3RoO1xuICAgIH1cblxuICAgIGFycmF5W05VTV9QQVJBTVMgKyBjZWxscy5sZW5ndGhdID0gb2Zmc2V0O1xuICAgIGFycmF5LnNldCh0aGlzLmtleXMsIG9mZnNldCk7XG4gICAgb2Zmc2V0ICs9IHRoaXMua2V5cy5sZW5ndGg7XG5cbiAgICBhcnJheVtOVU1fUEFSQU1TICsgY2VsbHMubGVuZ3RoICsgMV0gPSBvZmZzZXQ7XG4gICAgYXJyYXkuc2V0KHRoaXMuYmJveGVzLCBvZmZzZXQpO1xuICAgIG9mZnNldCArPSB0aGlzLmJib3hlcy5sZW5ndGg7XG5cbiAgICByZXR1cm4gYXJyYXkuYnVmZmVyO1xufTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IEdyaWQgZnJvbSAnZ3JpZC1pbmRleCc7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL2NvbG9yJztcbmltcG9ydCB7U3R5bGVQcm9wZXJ0eUZ1bmN0aW9uLCBTdHlsZUV4cHJlc3Npb24sIFpvb21EZXBlbmRlbnRFeHByZXNzaW9uLCBab29tQ29uc3RhbnRFeHByZXNzaW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24nO1xuaW1wb3J0IENvbXBvdW5kRXhwcmVzc2lvbiBmcm9tICcuLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vY29tcG91bmRfZXhwcmVzc2lvbic7XG5pbXBvcnQgZXhwcmVzc2lvbnMgZnJvbSAnLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zJztcbmltcG9ydCBSZXNvbHZlZEltYWdlIGZyb20gJy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5pbXBvcnQgd2luZG93IGZyb20gJy4vd2luZG93JztcbmNvbnN0IHtJbWFnZURhdGEsIEltYWdlQml0bWFwfSA9IHdpbmRvdztcblxuaW1wb3J0IHR5cGUge1RyYW5zZmVyYWJsZX0gZnJvbSAnLi4vdHlwZXMvdHJhbnNmZXJhYmxlJztcblxudHlwZSBTZXJpYWxpemVkT2JqZWN0ID0ge1tfOiBzdHJpbmddOiBTZXJpYWxpemVkIH07IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbmV4cG9ydCB0eXBlIFNlcmlhbGl6ZWQgPVxuICAgIHwgbnVsbFxuICAgIHwgdm9pZFxuICAgIHwgYm9vbGVhblxuICAgIHwgbnVtYmVyXG4gICAgfCBzdHJpbmdcbiAgICB8IEJvb2xlYW5cbiAgICB8IE51bWJlclxuICAgIHwgU3RyaW5nXG4gICAgfCBEYXRlXG4gICAgfCBSZWdFeHBcbiAgICB8IEFycmF5QnVmZmVyXG4gICAgfCAkQXJyYXlCdWZmZXJWaWV3XG4gICAgfCBJbWFnZURhdGFcbiAgICB8IEFycmF5PFNlcmlhbGl6ZWQ+XG4gICAgfCBTZXJpYWxpemVkT2JqZWN0O1xuXG50eXBlIFJlZ2lzdHJ5ID0ge1xuICAgIFtfOiBzdHJpbmddOiB7XG4gICAgICAgIGtsYXNzOiBDbGFzczxhbnk+LFxuICAgICAgICBvbWl0OiAkUmVhZE9ubHlBcnJheTxzdHJpbmc+LFxuICAgICAgICBzaGFsbG93OiAkUmVhZE9ubHlBcnJheTxzdHJpbmc+XG4gICAgfVxufTtcblxudHlwZSBSZWdpc3Rlck9wdGlvbnM8VD4gPSB7XG4gICAgb21pdD86ICRSZWFkT25seUFycmF5PCRLZXlzPFQ+PixcbiAgICBzaGFsbG93PzogJFJlYWRPbmx5QXJyYXk8JEtleXM8VD4+XG59XG5cbmNvbnN0IHJlZ2lzdHJ5OiBSZWdpc3RyeSA9IHt9O1xuXG4vKipcbiAqIFJlZ2lzdGVyIHRoZSBnaXZlbiBjbGFzcyBhcyBzZXJpYWxpemFibGUuXG4gKlxuICogQHBhcmFtIG9wdGlvbnNcbiAqIEBwYXJhbSBvcHRpb25zLm9taXQgTGlzdCBvZiBwcm9wZXJ0aWVzIHRvIG9taXQgZnJvbSBzZXJpYWxpemF0aW9uIChlLmcuLCBjYWNoZWQvY29tcHV0ZWQgcHJvcGVydGllcylcbiAqIEBwYXJhbSBvcHRpb25zLnNoYWxsb3cgTGlzdCBvZiBwcm9wZXJ0aWVzIHRoYXQgc2hvdWxkIGJlIHNlcmlhbGl6ZWQgYnkgYSBzaW1wbGUgc2hhbGxvdyBjb3B5LCByYXRoZXIgdGhhbiBieSBhIHJlY3Vyc2l2ZSBjYWxsIHRvIHNlcmlhbGl6ZSgpLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlcjxUOiBhbnk+KG5hbWU6IHN0cmluZywga2xhc3M6IENsYXNzPFQ+LCBvcHRpb25zOiBSZWdpc3Rlck9wdGlvbnM8VD4gPSB7fSkge1xuICAgIGFzc2VydCghcmVnaXN0cnlbbmFtZV0sIGAke25hbWV9IGlzIGFscmVhZHkgcmVnaXN0ZXJlZC5gKTtcbiAgICAoT2JqZWN0LmRlZmluZVByb3BlcnR5OiBhbnkpKGtsYXNzLCAnX2NsYXNzUmVnaXN0cnlLZXknLCB7XG4gICAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgICB3cml0ZWFibGU6IGZhbHNlXG4gICAgfSk7XG4gICAgcmVnaXN0cnlbbmFtZV0gPSB7XG4gICAgICAgIGtsYXNzLFxuICAgICAgICBvbWl0OiBvcHRpb25zLm9taXQgfHwgW10sXG4gICAgICAgIHNoYWxsb3c6IG9wdGlvbnMuc2hhbGxvdyB8fCBbXVxuICAgIH07XG59XG5cbnJlZ2lzdGVyKCdPYmplY3QnLCBPYmplY3QpO1xuXG50eXBlIFNlcmlhbGl6ZWRHcmlkID0geyBidWZmZXI6IEFycmF5QnVmZmVyIH07XG5cbkdyaWQuc2VyaWFsaXplID0gZnVuY3Rpb24gc2VyaWFsaXplKGdyaWQ6IEdyaWQsIHRyYW5zZmVyYWJsZXM/OiBBcnJheTxUcmFuc2ZlcmFibGU+KTogU2VyaWFsaXplZEdyaWQge1xuICAgIGNvbnN0IGJ1ZmZlciA9IGdyaWQudG9BcnJheUJ1ZmZlcigpO1xuICAgIGlmICh0cmFuc2ZlcmFibGVzKSB7XG4gICAgICAgIHRyYW5zZmVyYWJsZXMucHVzaChidWZmZXIpO1xuICAgIH1cbiAgICByZXR1cm4ge2J1ZmZlcn07XG59O1xuXG5HcmlkLmRlc2VyaWFsaXplID0gZnVuY3Rpb24gZGVzZXJpYWxpemUoc2VyaWFsaXplZDogU2VyaWFsaXplZEdyaWQpOiBHcmlkIHtcbiAgICByZXR1cm4gbmV3IEdyaWQoc2VyaWFsaXplZC5idWZmZXIpO1xufTtcbnJlZ2lzdGVyKCdHcmlkJywgR3JpZCk7XG5cbnJlZ2lzdGVyKCdDb2xvcicsIENvbG9yKTtcbnJlZ2lzdGVyKCdFcnJvcicsIEVycm9yKTtcbnJlZ2lzdGVyKCdSZXNvbHZlZEltYWdlJywgUmVzb2x2ZWRJbWFnZSk7XG5cbnJlZ2lzdGVyKCdTdHlsZVByb3BlcnR5RnVuY3Rpb24nLCBTdHlsZVByb3BlcnR5RnVuY3Rpb24pO1xucmVnaXN0ZXIoJ1N0eWxlRXhwcmVzc2lvbicsIFN0eWxlRXhwcmVzc2lvbiwge29taXQ6IFsnX2V2YWx1YXRvciddfSk7XG5cbnJlZ2lzdGVyKCdab29tRGVwZW5kZW50RXhwcmVzc2lvbicsIFpvb21EZXBlbmRlbnRFeHByZXNzaW9uKTtcbnJlZ2lzdGVyKCdab29tQ29uc3RhbnRFeHByZXNzaW9uJywgWm9vbUNvbnN0YW50RXhwcmVzc2lvbik7XG5yZWdpc3RlcignQ29tcG91bmRFeHByZXNzaW9uJywgQ29tcG91bmRFeHByZXNzaW9uLCB7b21pdDogWydfZXZhbHVhdGUnXX0pO1xuZm9yIChjb25zdCBuYW1lIGluIGV4cHJlc3Npb25zKSB7XG4gICAgaWYgKChleHByZXNzaW9uc1tuYW1lXTogYW55KS5fY2xhc3NSZWdpc3RyeUtleSkgY29udGludWU7XG4gICAgcmVnaXN0ZXIoYEV4cHJlc3Npb25fJHtuYW1lfWAsIGV4cHJlc3Npb25zW25hbWVdKTtcbn1cblxuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlcih2YWw6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2YWwgJiYgdHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAodmFsIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHwgKHZhbC5jb25zdHJ1Y3RvciAmJiB2YWwuY29uc3RydWN0b3IubmFtZSA9PT0gJ0FycmF5QnVmZmVyJykpO1xufVxuXG5mdW5jdGlvbiBpc0ltYWdlQml0bWFwKHZhbDogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEltYWdlQml0bWFwICYmXG4gICAgICAgIHZhbCBpbnN0YW5jZW9mIEltYWdlQml0bWFwO1xufVxuXG4vKipcbiAqIFNlcmlhbGl6ZSB0aGUgZ2l2ZW4gb2JqZWN0IGZvciB0cmFuc2ZlciB0byBvciBmcm9tIGEgd2ViIHdvcmtlci5cbiAqXG4gKiBGb3Igbm9uLWJ1aWx0aW4gdHlwZXMsIHJlY3Vyc2l2ZWx5IHNlcmlhbGl6ZSBlYWNoIHByb3BlcnR5IChwb3NzaWJseVxuICogb21pdHRpbmcgY2VydGFpbiBwcm9wZXJ0aWVzIC0gc2VlIHJlZ2lzdGVyKCkpLCBhbmQgcGFja2FnZSB0aGUgcmVzdWx0IGFsb25nXG4gKiB3aXRoIHRoZSBjb25zdHJ1Y3RvcidzIGBuYW1lYCBzbyB0aGF0IHRoZSBhcHByb3ByaWF0ZSBjb25zdHJ1Y3RvciBjYW4gYmVcbiAqIGxvb2tlZCB1cCBpbiBgZGVzZXJpYWxpemUoKWAuXG4gKlxuICogSWYgYSBgdHJhbnNmZXJhYmxlc2AgYXJyYXkgaXMgcHJvdmlkZWQsIGFkZCBhbnkgdHJhbnNmZXJhYmxlIG9iamVjdHMgKGkuZS4sXG4gKiBhbnkgQXJyYXlCdWZmZXJzIG9yIEFycmF5QnVmZmVyIHZpZXdzKSB0byB0aGUgbGlzdC4gKElmIGEgY29weSBpcyBuZWVkZWQsXG4gKiB0aGlzIHNob3VsZCBoYXBwZW4gaW4gdGhlIGNsaWVudCBjb2RlLCBiZWZvcmUgdXNpbmcgc2VyaWFsaXplKCkuKVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemUoaW5wdXQ6IG1peGVkLCB0cmFuc2ZlcmFibGVzOiA/QXJyYXk8VHJhbnNmZXJhYmxlPik6IFNlcmlhbGl6ZWQge1xuICAgIGlmIChpbnB1dCA9PT0gbnVsbCB8fFxuICAgICAgICBpbnB1dCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgIHR5cGVvZiBpbnB1dCA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgICAgIHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJyB8fFxuICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIEJvb2xlYW4gfHxcbiAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBOdW1iZXIgfHxcbiAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBTdHJpbmcgfHxcbiAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICAgIGlucHV0IGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG5cbiAgICBpZiAoaXNBcnJheUJ1ZmZlcihpbnB1dCkgfHwgaXNJbWFnZUJpdG1hcChpbnB1dCkpIHtcbiAgICAgICAgaWYgKHRyYW5zZmVyYWJsZXMpIHtcbiAgICAgICAgICAgIHRyYW5zZmVyYWJsZXMucHVzaCgoKGlucHV0OiBhbnkpOiBBcnJheUJ1ZmZlcikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGlucHV0KSkge1xuICAgICAgICBjb25zdCB2aWV3OiAkQXJyYXlCdWZmZXJWaWV3ID0gKGlucHV0OiBhbnkpO1xuICAgICAgICBpZiAodHJhbnNmZXJhYmxlcykge1xuICAgICAgICAgICAgdHJhbnNmZXJhYmxlcy5wdXNoKHZpZXcuYnVmZmVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmlldztcbiAgICB9XG5cbiAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBJbWFnZURhdGEpIHtcbiAgICAgICAgaWYgKHRyYW5zZmVyYWJsZXMpIHtcbiAgICAgICAgICAgIHRyYW5zZmVyYWJsZXMucHVzaChpbnB1dC5kYXRhLmJ1ZmZlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkOiBBcnJheTxTZXJpYWxpemVkPiA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaW5wdXQpIHtcbiAgICAgICAgICAgIHNlcmlhbGl6ZWQucHVzaChzZXJpYWxpemUoaXRlbSwgdHJhbnNmZXJhYmxlcykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVkO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnN0IGtsYXNzID0gKGlucHV0LmNvbnN0cnVjdG9yOiBhbnkpO1xuICAgICAgICBjb25zdCBuYW1lID0ga2xhc3MuX2NsYXNzUmVnaXN0cnlLZXk7XG4gICAgICAgIGlmICghbmFtZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjYW4ndCBzZXJpYWxpemUgb2JqZWN0IG9mIHVucmVnaXN0ZXJlZCBjbGFzc2ApO1xuICAgICAgICB9XG4gICAgICAgIGFzc2VydChyZWdpc3RyeVtuYW1lXSk7XG5cbiAgICAgICAgY29uc3QgcHJvcGVydGllczogU2VyaWFsaXplZE9iamVjdCA9IGtsYXNzLnNlcmlhbGl6ZSA/XG4gICAgICAgICAgICAvLyAoVGVtcG9yYXJ5IHdvcmthcm91bmQpIGFsbG93IGEgY2xhc3MgdG8gcHJvdmlkZSBzdGF0aWNcbiAgICAgICAgICAgIC8vIGBzZXJpYWxpemUoKWAgYW5kIGBkZXNlcmlhbGl6ZSgpYCBtZXRob2RzIHRvIGJ5cGFzcyB0aGUgZ2VuZXJpY1xuICAgICAgICAgICAgLy8gYXBwcm9hY2guXG4gICAgICAgICAgICAvLyBUaGlzIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGxldHMgdXMgdXNlIHRoZSBnZW5lcmljIHNlcmlhbGl6YXRpb25cbiAgICAgICAgICAgIC8vIGFwcHJvYWNoIGZvciBvYmplY3RzIHdob3NlIG1lbWJlcnMgaW5jbHVkZSBpbnN0YW5jZXMgb2YgZHluYW1pY1xuICAgICAgICAgICAgLy8gU3RydWN0QXJyYXkgdHlwZXMuIE9uY2Ugd2UgcmVmYWN0b3IgU3RydWN0QXJyYXkgdG8gYmUgc3RhdGljLFxuICAgICAgICAgICAgLy8gd2UgY2FuIHJlbW92ZSB0aGlzIGNvbXBsZXhpdHkuXG4gICAgICAgICAgICAoa2xhc3Muc2VyaWFsaXplKGlucHV0LCB0cmFuc2ZlcmFibGVzKTogU2VyaWFsaXplZE9iamVjdCkgOiB7fTtcblxuICAgICAgICBpZiAoIWtsYXNzLnNlcmlhbGl6ZSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gaW5wdXQpIHtcbiAgICAgICAgICAgICAgICAvLyBhbnkgY2FzdCBkdWUgdG8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzUzOTNcbiAgICAgICAgICAgICAgICBpZiAoIShpbnB1dDogYW55KS5oYXNPd25Qcm9wZXJ0eShrZXkpKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBpZiAocmVnaXN0cnlbbmFtZV0ub21pdC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHkgPSAoaW5wdXQ6IGFueSlba2V5XTtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzW2tleV0gPSByZWdpc3RyeVtuYW1lXS5zaGFsbG93LmluZGV4T2Yoa2V5KSA+PSAwID9cbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHkgOlxuICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemUocHJvcGVydHksIHRyYW5zZmVyYWJsZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlucHV0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLm1lc3NhZ2UgPSBpbnB1dC5tZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHN0YXRpY2FsbHkgc2VyaWFsaXplZCBvYmplY3Qgc3Vydml2ZXMgdHJhbnNmZXIgb2YgJG5hbWUgcHJvcGVydHlcbiAgICAgICAgICAgIGFzc2VydCghdHJhbnNmZXJhYmxlcyB8fCBwcm9wZXJ0aWVzICE9PSB0cmFuc2ZlcmFibGVzW3RyYW5zZmVyYWJsZXMubGVuZ3RoIC0gMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BlcnRpZXMuJG5hbWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignJG5hbWUgcHJvcGVydHkgaXMgcmVzZXJ2ZWQgZm9yIHdvcmtlciBzZXJpYWxpemF0aW9uIGxvZ2ljLicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuYW1lICE9PSAnT2JqZWN0Jykge1xuICAgICAgICAgICAgcHJvcGVydGllcy4kbmFtZSA9IG5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcHJvcGVydGllcztcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNhbid0IHNlcmlhbGl6ZSBvYmplY3Qgb2YgdHlwZSAke3R5cGVvZiBpbnB1dH1gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlc2VyaWFsaXplKGlucHV0OiBTZXJpYWxpemVkKTogbWl4ZWQge1xuICAgIGlmIChpbnB1dCA9PT0gbnVsbCB8fFxuICAgICAgICBpbnB1dCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgIHR5cGVvZiBpbnB1dCA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgICAgIHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJyB8fFxuICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIEJvb2xlYW4gfHxcbiAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBOdW1iZXIgfHxcbiAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBTdHJpbmcgfHxcbiAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICAgIGlucHV0IGluc3RhbmNlb2YgUmVnRXhwIHx8XG4gICAgICAgIGlzQXJyYXlCdWZmZXIoaW5wdXQpIHx8XG4gICAgICAgIGlzSW1hZ2VCaXRtYXAoaW5wdXQpIHx8XG4gICAgICAgIEFycmF5QnVmZmVyLmlzVmlldyhpbnB1dCkgfHxcbiAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBJbWFnZURhdGEpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgICAgICByZXR1cm4gaW5wdXQubWFwKGRlc2VyaWFsaXplKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25zdCBuYW1lID0gKGlucHV0OiBhbnkpLiRuYW1lIHx8ICdPYmplY3QnO1xuXG4gICAgICAgIGNvbnN0IHtrbGFzc30gPSByZWdpc3RyeVtuYW1lXTtcbiAgICAgICAgaWYgKCFrbGFzcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjYW4ndCBkZXNlcmlhbGl6ZSB1bnJlZ2lzdGVyZWQgY2xhc3MgJHtuYW1lfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGtsYXNzLmRlc2VyaWFsaXplKSB7XG4gICAgICAgICAgICByZXR1cm4gKGtsYXNzLmRlc2VyaWFsaXplOiB0eXBlb2YgZGVzZXJpYWxpemUpKGlucHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IE9iamVjdC5jcmVhdGUoa2xhc3MucHJvdG90eXBlKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhpbnB1dCkpIHtcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICckbmFtZScpIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSAoaW5wdXQ6IFNlcmlhbGl6ZWRPYmplY3QpW2tleV07XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IHJlZ2lzdHJ5W25hbWVdLnNoYWxsb3cuaW5kZXhPZihrZXkpID49IDAgPyB2YWx1ZSA6IGRlc2VyaWFsaXplKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBjYW4ndCBkZXNlcmlhbGl6ZSBvYmplY3Qgb2YgdHlwZSAke3R5cGVvZiBpbnB1dH1gKTtcbn1cbiIsIi8vIEBmbG93XG5cbmNsYXNzIFpvb21IaXN0b3J5IHtcbiAgICBsYXN0Wm9vbTogbnVtYmVyO1xuICAgIGxhc3RGbG9vclpvb206IG51bWJlcjtcbiAgICBsYXN0SW50ZWdlclpvb206IG51bWJlcjtcbiAgICBsYXN0SW50ZWdlclpvb21UaW1lOiBudW1iZXI7XG4gICAgZmlyc3Q6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5maXJzdCA9IHRydWU7XG4gICAgfVxuXG4gICAgdXBkYXRlKHo6IG51bWJlciwgbm93OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgZmxvb3JaID0gTWF0aC5mbG9vcih6KTtcblxuICAgICAgICBpZiAodGhpcy5maXJzdCkge1xuICAgICAgICAgICAgdGhpcy5maXJzdCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5sYXN0SW50ZWdlclpvb20gPSBmbG9vclo7XG4gICAgICAgICAgICB0aGlzLmxhc3RJbnRlZ2VyWm9vbVRpbWUgPSAwO1xuICAgICAgICAgICAgdGhpcy5sYXN0Wm9vbSA9IHo7XG4gICAgICAgICAgICB0aGlzLmxhc3RGbG9vclpvb20gPSBmbG9vclo7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmxhc3RGbG9vclpvb20gPiBmbG9vclopIHtcbiAgICAgICAgICAgIHRoaXMubGFzdEludGVnZXJab29tID0gZmxvb3JaICsgMTtcbiAgICAgICAgICAgIHRoaXMubGFzdEludGVnZXJab29tVGltZSA9IG5vdztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxhc3RGbG9vclpvb20gPCBmbG9vclopIHtcbiAgICAgICAgICAgIHRoaXMubGFzdEludGVnZXJab29tID0gZmxvb3JaO1xuICAgICAgICAgICAgdGhpcy5sYXN0SW50ZWdlclpvb21UaW1lID0gbm93O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHogIT09IHRoaXMubGFzdFpvb20pIHtcbiAgICAgICAgICAgIHRoaXMubGFzdFpvb20gPSB6O1xuICAgICAgICAgICAgdGhpcy5sYXN0Rmxvb3Jab29tID0gZmxvb3JaO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBab29tSGlzdG9yeTtcbiIsIi8vIEBmbG93XG5cbi8vIFRoZSBmb2xsb3dpbmcgdGFibGUgY29tZXMgZnJvbSA8aHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvMTIuMC4wL3VjZC9CbG9ja3MudHh0Pi5cbi8vIEtlZXAgaXQgc3luY2hyb25pemVkIHdpdGggPGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljL1VDRC9sYXRlc3QvdWNkL0Jsb2Nrcy50eHQ+LlxuXG50eXBlIFVuaWNvZGVCbG9ja0xvb2t1cCA9IHtba2V5OiBzdHJpbmddOiAoY2hhcjogbnVtYmVyKSA9PiBib29sZWFufTtcblxuY29uc3QgdW5pY29kZUJsb2NrTG9va3VwOiBVbmljb2RlQmxvY2tMb29rdXAgPSB7XG4gICAgLy8gJ0Jhc2ljIExhdGluJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwMDAwICYmIGNoYXIgPD0gMHgwMDdGLFxuICAgICdMYXRpbi0xIFN1cHBsZW1lbnQnOiAoY2hhcikgPT4gY2hhciA+PSAweDAwODAgJiYgY2hhciA8PSAweDAwRkYsXG4gICAgLy8gJ0xhdGluIEV4dGVuZGVkLUEnOiAoY2hhcikgPT4gY2hhciA+PSAweDAxMDAgJiYgY2hhciA8PSAweDAxN0YsXG4gICAgLy8gJ0xhdGluIEV4dGVuZGVkLUInOiAoY2hhcikgPT4gY2hhciA+PSAweDAxODAgJiYgY2hhciA8PSAweDAyNEYsXG4gICAgLy8gJ0lQQSBFeHRlbnNpb25zJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwMjUwICYmIGNoYXIgPD0gMHgwMkFGLFxuICAgIC8vICdTcGFjaW5nIE1vZGlmaWVyIExldHRlcnMnOiAoY2hhcikgPT4gY2hhciA+PSAweDAyQjAgJiYgY2hhciA8PSAweDAyRkYsXG4gICAgLy8gJ0NvbWJpbmluZyBEaWFjcml0aWNhbCBNYXJrcyc6IChjaGFyKSA9PiBjaGFyID49IDB4MDMwMCAmJiBjaGFyIDw9IDB4MDM2RixcbiAgICAvLyAnR3JlZWsgYW5kIENvcHRpYyc6IChjaGFyKSA9PiBjaGFyID49IDB4MDM3MCAmJiBjaGFyIDw9IDB4MDNGRixcbiAgICAvLyAnQ3lyaWxsaWMnOiAoY2hhcikgPT4gY2hhciA+PSAweDA0MDAgJiYgY2hhciA8PSAweDA0RkYsXG4gICAgLy8gJ0N5cmlsbGljIFN1cHBsZW1lbnQnOiAoY2hhcikgPT4gY2hhciA+PSAweDA1MDAgJiYgY2hhciA8PSAweDA1MkYsXG4gICAgLy8gJ0FybWVuaWFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwNTMwICYmIGNoYXIgPD0gMHgwNThGLFxuICAgIC8vJ0hlYnJldyc6IChjaGFyKSA9PiBjaGFyID49IDB4MDU5MCAmJiBjaGFyIDw9IDB4MDVGRixcbiAgICAnQXJhYmljJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwNjAwICYmIGNoYXIgPD0gMHgwNkZGLFxuICAgIC8vJ1N5cmlhYyc6IChjaGFyKSA9PiBjaGFyID49IDB4MDcwMCAmJiBjaGFyIDw9IDB4MDc0RixcbiAgICAnQXJhYmljIFN1cHBsZW1lbnQnOiAoY2hhcikgPT4gY2hhciA+PSAweDA3NTAgJiYgY2hhciA8PSAweDA3N0YsXG4gICAgLy8gJ1RoYWFuYSc6IChjaGFyKSA9PiBjaGFyID49IDB4MDc4MCAmJiBjaGFyIDw9IDB4MDdCRixcbiAgICAvLyAnTktvJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwN0MwICYmIGNoYXIgPD0gMHgwN0ZGLFxuICAgIC8vICdTYW1hcml0YW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDA4MDAgJiYgY2hhciA8PSAweDA4M0YsXG4gICAgLy8gJ01hbmRhaWMnOiAoY2hhcikgPT4gY2hhciA+PSAweDA4NDAgJiYgY2hhciA8PSAweDA4NUYsXG4gICAgLy8gJ1N5cmlhYyBTdXBwbGVtZW50JzogKGNoYXIpID0+IGNoYXIgPj0gMHgwODYwICYmIGNoYXIgPD0gMHgwODZGLFxuICAgICdBcmFiaWMgRXh0ZW5kZWQtQSc6IChjaGFyKSA9PiBjaGFyID49IDB4MDhBMCAmJiBjaGFyIDw9IDB4MDhGRixcbiAgICAvLyAnRGV2YW5hZ2FyaSc6IChjaGFyKSA9PiBjaGFyID49IDB4MDkwMCAmJiBjaGFyIDw9IDB4MDk3RixcbiAgICAvLyAnQmVuZ2FsaSc6IChjaGFyKSA9PiBjaGFyID49IDB4MDk4MCAmJiBjaGFyIDw9IDB4MDlGRixcbiAgICAvLyAnR3VybXVraGknOiAoY2hhcikgPT4gY2hhciA+PSAweDBBMDAgJiYgY2hhciA8PSAweDBBN0YsXG4gICAgLy8gJ0d1amFyYXRpJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwQTgwICYmIGNoYXIgPD0gMHgwQUZGLFxuICAgIC8vICdPcml5YSc6IChjaGFyKSA9PiBjaGFyID49IDB4MEIwMCAmJiBjaGFyIDw9IDB4MEI3RixcbiAgICAvLyAnVGFtaWwnOiAoY2hhcikgPT4gY2hhciA+PSAweDBCODAgJiYgY2hhciA8PSAweDBCRkYsXG4gICAgLy8gJ1RlbHVndSc6IChjaGFyKSA9PiBjaGFyID49IDB4MEMwMCAmJiBjaGFyIDw9IDB4MEM3RixcbiAgICAvLyAnS2FubmFkYSc6IChjaGFyKSA9PiBjaGFyID49IDB4MEM4MCAmJiBjaGFyIDw9IDB4MENGRixcbiAgICAvLyAnTWFsYXlhbGFtJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwRDAwICYmIGNoYXIgPD0gMHgwRDdGLFxuICAgIC8vICdTaW5oYWxhJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwRDgwICYmIGNoYXIgPD0gMHgwREZGLFxuICAgIC8vICdUaGFpJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwRTAwICYmIGNoYXIgPD0gMHgwRTdGLFxuICAgIC8vICdMYW8nOiAoY2hhcikgPT4gY2hhciA+PSAweDBFODAgJiYgY2hhciA8PSAweDBFRkYsXG4gICAgLy8gJ1RpYmV0YW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDBGMDAgJiYgY2hhciA8PSAweDBGRkYsXG4gICAgLy8gJ015YW5tYXInOiAoY2hhcikgPT4gY2hhciA+PSAweDEwMDAgJiYgY2hhciA8PSAweDEwOUYsXG4gICAgLy8gJ0dlb3JnaWFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMEEwICYmIGNoYXIgPD0gMHgxMEZGLFxuICAgICdIYW5ndWwgSmFtbyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTEwMCAmJiBjaGFyIDw9IDB4MTFGRixcbiAgICAvLyAnRXRoaW9waWMnOiAoY2hhcikgPT4gY2hhciA+PSAweDEyMDAgJiYgY2hhciA8PSAweDEzN0YsXG4gICAgLy8gJ0V0aGlvcGljIFN1cHBsZW1lbnQnOiAoY2hhcikgPT4gY2hhciA+PSAweDEzODAgJiYgY2hhciA8PSAweDEzOUYsXG4gICAgLy8gJ0NoZXJva2VlJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxM0EwICYmIGNoYXIgPD0gMHgxM0ZGLFxuICAgICdVbmlmaWVkIENhbmFkaWFuIEFib3JpZ2luYWwgU3lsbGFiaWNzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxNDAwICYmIGNoYXIgPD0gMHgxNjdGLFxuICAgIC8vICdPZ2hhbSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTY4MCAmJiBjaGFyIDw9IDB4MTY5RixcbiAgICAvLyAnUnVuaWMnOiAoY2hhcikgPT4gY2hhciA+PSAweDE2QTAgJiYgY2hhciA8PSAweDE2RkYsXG4gICAgLy8gJ1RhZ2Fsb2cnOiAoY2hhcikgPT4gY2hhciA+PSAweDE3MDAgJiYgY2hhciA8PSAweDE3MUYsXG4gICAgLy8gJ0hhbnVub28nOiAoY2hhcikgPT4gY2hhciA+PSAweDE3MjAgJiYgY2hhciA8PSAweDE3M0YsXG4gICAgLy8gJ0J1aGlkJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxNzQwICYmIGNoYXIgPD0gMHgxNzVGLFxuICAgIC8vICdUYWdiYW53YSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTc2MCAmJiBjaGFyIDw9IDB4MTc3RixcbiAgICAnS2htZXInOiAoY2hhcikgPT4gY2hhciA+PSAweDE3ODAgJiYgY2hhciA8PSAweDE3RkYsXG4gICAgLy8gJ01vbmdvbGlhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTgwMCAmJiBjaGFyIDw9IDB4MThBRixcbiAgICAnVW5pZmllZCBDYW5hZGlhbiBBYm9yaWdpbmFsIFN5bGxhYmljcyBFeHRlbmRlZCc6IChjaGFyKSA9PiBjaGFyID49IDB4MThCMCAmJiBjaGFyIDw9IDB4MThGRixcbiAgICAvLyAnTGltYnUnOiAoY2hhcikgPT4gY2hhciA+PSAweDE5MDAgJiYgY2hhciA8PSAweDE5NEYsXG4gICAgLy8gJ1RhaSBMZSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTk1MCAmJiBjaGFyIDw9IDB4MTk3RixcbiAgICAvLyAnTmV3IFRhaSBMdWUnOiAoY2hhcikgPT4gY2hhciA+PSAweDE5ODAgJiYgY2hhciA8PSAweDE5REYsXG4gICAgLy8gJ0tobWVyIFN5bWJvbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDE5RTAgJiYgY2hhciA8PSAweDE5RkYsXG4gICAgLy8gJ0J1Z2luZXNlJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxQTAwICYmIGNoYXIgPD0gMHgxQTFGLFxuICAgIC8vICdUYWkgVGhhbSc6IChjaGFyKSA9PiBjaGFyID49IDB4MUEyMCAmJiBjaGFyIDw9IDB4MUFBRixcbiAgICAvLyAnQ29tYmluaW5nIERpYWNyaXRpY2FsIE1hcmtzIEV4dGVuZGVkJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxQUIwICYmIGNoYXIgPD0gMHgxQUZGLFxuICAgIC8vICdCYWxpbmVzZSc6IChjaGFyKSA9PiBjaGFyID49IDB4MUIwMCAmJiBjaGFyIDw9IDB4MUI3RixcbiAgICAvLyAnU3VuZGFuZXNlJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxQjgwICYmIGNoYXIgPD0gMHgxQkJGLFxuICAgIC8vICdCYXRhayc6IChjaGFyKSA9PiBjaGFyID49IDB4MUJDMCAmJiBjaGFyIDw9IDB4MUJGRixcbiAgICAvLyAnTGVwY2hhJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxQzAwICYmIGNoYXIgPD0gMHgxQzRGLFxuICAgIC8vICdPbCBDaGlraSc6IChjaGFyKSA9PiBjaGFyID49IDB4MUM1MCAmJiBjaGFyIDw9IDB4MUM3RixcbiAgICAvLyAnQ3lyaWxsaWMgRXh0ZW5kZWQtQyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUM4MCAmJiBjaGFyIDw9IDB4MUM4RixcbiAgICAvLyAnR2VvcmdpYW4gRXh0ZW5kZWQnOiAoY2hhcikgPT4gY2hhciA+PSAweDFDOTAgJiYgY2hhciA8PSAweDFDQkYsXG4gICAgLy8gJ1N1bmRhbmVzZSBTdXBwbGVtZW50JzogKGNoYXIpID0+IGNoYXIgPj0gMHgxQ0MwICYmIGNoYXIgPD0gMHgxQ0NGLFxuICAgIC8vICdWZWRpYyBFeHRlbnNpb25zJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxQ0QwICYmIGNoYXIgPD0gMHgxQ0ZGLFxuICAgIC8vICdQaG9uZXRpYyBFeHRlbnNpb25zJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRDAwICYmIGNoYXIgPD0gMHgxRDdGLFxuICAgIC8vICdQaG9uZXRpYyBFeHRlbnNpb25zIFN1cHBsZW1lbnQnOiAoY2hhcikgPT4gY2hhciA+PSAweDFEODAgJiYgY2hhciA8PSAweDFEQkYsXG4gICAgLy8gJ0NvbWJpbmluZyBEaWFjcml0aWNhbCBNYXJrcyBTdXBwbGVtZW50JzogKGNoYXIpID0+IGNoYXIgPj0gMHgxREMwICYmIGNoYXIgPD0gMHgxREZGLFxuICAgIC8vICdMYXRpbiBFeHRlbmRlZCBBZGRpdGlvbmFsJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRTAwICYmIGNoYXIgPD0gMHgxRUZGLFxuICAgIC8vICdHcmVlayBFeHRlbmRlZCc6IChjaGFyKSA9PiBjaGFyID49IDB4MUYwMCAmJiBjaGFyIDw9IDB4MUZGRixcbiAgICAnR2VuZXJhbCBQdW5jdHVhdGlvbic6IChjaGFyKSA9PiBjaGFyID49IDB4MjAwMCAmJiBjaGFyIDw9IDB4MjA2RixcbiAgICAvLyAnU3VwZXJzY3JpcHRzIGFuZCBTdWJzY3JpcHRzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyMDcwICYmIGNoYXIgPD0gMHgyMDlGLFxuICAgIC8vICdDdXJyZW5jeSBTeW1ib2xzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyMEEwICYmIGNoYXIgPD0gMHgyMENGLFxuICAgIC8vICdDb21iaW5pbmcgRGlhY3JpdGljYWwgTWFya3MgZm9yIFN5bWJvbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDIwRDAgJiYgY2hhciA8PSAweDIwRkYsXG4gICAgJ0xldHRlcmxpa2UgU3ltYm9scyc6IChjaGFyKSA9PiBjaGFyID49IDB4MjEwMCAmJiBjaGFyIDw9IDB4MjE0RixcbiAgICAnTnVtYmVyIEZvcm1zJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyMTUwICYmIGNoYXIgPD0gMHgyMThGLFxuICAgIC8vICdBcnJvd3MnOiAoY2hhcikgPT4gY2hhciA+PSAweDIxOTAgJiYgY2hhciA8PSAweDIxRkYsXG4gICAgLy8gJ01hdGhlbWF0aWNhbCBPcGVyYXRvcnMnOiAoY2hhcikgPT4gY2hhciA+PSAweDIyMDAgJiYgY2hhciA8PSAweDIyRkYsXG4gICAgJ01pc2NlbGxhbmVvdXMgVGVjaG5pY2FsJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyMzAwICYmIGNoYXIgPD0gMHgyM0ZGLFxuICAgICdDb250cm9sIFBpY3R1cmVzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyNDAwICYmIGNoYXIgPD0gMHgyNDNGLFxuICAgICdPcHRpY2FsIENoYXJhY3RlciBSZWNvZ25pdGlvbic6IChjaGFyKSA9PiBjaGFyID49IDB4MjQ0MCAmJiBjaGFyIDw9IDB4MjQ1RixcbiAgICAnRW5jbG9zZWQgQWxwaGFudW1lcmljcyc6IChjaGFyKSA9PiBjaGFyID49IDB4MjQ2MCAmJiBjaGFyIDw9IDB4MjRGRixcbiAgICAvLyAnQm94IERyYXdpbmcnOiAoY2hhcikgPT4gY2hhciA+PSAweDI1MDAgJiYgY2hhciA8PSAweDI1N0YsXG4gICAgLy8gJ0Jsb2NrIEVsZW1lbnRzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyNTgwICYmIGNoYXIgPD0gMHgyNTlGLFxuICAgICdHZW9tZXRyaWMgU2hhcGVzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyNUEwICYmIGNoYXIgPD0gMHgyNUZGLFxuICAgICdNaXNjZWxsYW5lb3VzIFN5bWJvbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDI2MDAgJiYgY2hhciA8PSAweDI2RkYsXG4gICAgLy8gJ0RpbmdiYXRzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyNzAwICYmIGNoYXIgPD0gMHgyN0JGLFxuICAgIC8vICdNaXNjZWxsYW5lb3VzIE1hdGhlbWF0aWNhbCBTeW1ib2xzLUEnOiAoY2hhcikgPT4gY2hhciA+PSAweDI3QzAgJiYgY2hhciA8PSAweDI3RUYsXG4gICAgLy8gJ1N1cHBsZW1lbnRhbCBBcnJvd3MtQSc6IChjaGFyKSA9PiBjaGFyID49IDB4MjdGMCAmJiBjaGFyIDw9IDB4MjdGRixcbiAgICAvLyAnQnJhaWxsZSBQYXR0ZXJucyc6IChjaGFyKSA9PiBjaGFyID49IDB4MjgwMCAmJiBjaGFyIDw9IDB4MjhGRixcbiAgICAvLyAnU3VwcGxlbWVudGFsIEFycm93cy1CJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyOTAwICYmIGNoYXIgPD0gMHgyOTdGLFxuICAgIC8vICdNaXNjZWxsYW5lb3VzIE1hdGhlbWF0aWNhbCBTeW1ib2xzLUInOiAoY2hhcikgPT4gY2hhciA+PSAweDI5ODAgJiYgY2hhciA8PSAweDI5RkYsXG4gICAgLy8gJ1N1cHBsZW1lbnRhbCBNYXRoZW1hdGljYWwgT3BlcmF0b3JzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyQTAwICYmIGNoYXIgPD0gMHgyQUZGLFxuICAgICdNaXNjZWxsYW5lb3VzIFN5bWJvbHMgYW5kIEFycm93cyc6IChjaGFyKSA9PiBjaGFyID49IDB4MkIwMCAmJiBjaGFyIDw9IDB4MkJGRixcbiAgICAvLyAnR2xhZ29saXRpYyc6IChjaGFyKSA9PiBjaGFyID49IDB4MkMwMCAmJiBjaGFyIDw9IDB4MkM1RixcbiAgICAvLyAnTGF0aW4gRXh0ZW5kZWQtQyc6IChjaGFyKSA9PiBjaGFyID49IDB4MkM2MCAmJiBjaGFyIDw9IDB4MkM3RixcbiAgICAvLyAnQ29wdGljJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyQzgwICYmIGNoYXIgPD0gMHgyQ0ZGLFxuICAgIC8vICdHZW9yZ2lhbiBTdXBwbGVtZW50JzogKGNoYXIpID0+IGNoYXIgPj0gMHgyRDAwICYmIGNoYXIgPD0gMHgyRDJGLFxuICAgIC8vICdUaWZpbmFnaCc6IChjaGFyKSA9PiBjaGFyID49IDB4MkQzMCAmJiBjaGFyIDw9IDB4MkQ3RixcbiAgICAvLyAnRXRoaW9waWMgRXh0ZW5kZWQnOiAoY2hhcikgPT4gY2hhciA+PSAweDJEODAgJiYgY2hhciA8PSAweDJEREYsXG4gICAgLy8gJ0N5cmlsbGljIEV4dGVuZGVkLUEnOiAoY2hhcikgPT4gY2hhciA+PSAweDJERTAgJiYgY2hhciA8PSAweDJERkYsXG4gICAgLy8gJ1N1cHBsZW1lbnRhbCBQdW5jdHVhdGlvbic6IChjaGFyKSA9PiBjaGFyID49IDB4MkUwMCAmJiBjaGFyIDw9IDB4MkU3RixcbiAgICAnQ0pLIFJhZGljYWxzIFN1cHBsZW1lbnQnOiAoY2hhcikgPT4gY2hhciA+PSAweDJFODAgJiYgY2hhciA8PSAweDJFRkYsXG4gICAgJ0thbmd4aSBSYWRpY2Fscyc6IChjaGFyKSA9PiBjaGFyID49IDB4MkYwMCAmJiBjaGFyIDw9IDB4MkZERixcbiAgICAnSWRlb2dyYXBoaWMgRGVzY3JpcHRpb24gQ2hhcmFjdGVycyc6IChjaGFyKSA9PiBjaGFyID49IDB4MkZGMCAmJiBjaGFyIDw9IDB4MkZGRixcbiAgICAnQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uJzogKGNoYXIpID0+IGNoYXIgPj0gMHgzMDAwICYmIGNoYXIgPD0gMHgzMDNGLFxuICAgICdIaXJhZ2FuYSc6IChjaGFyKSA9PiBjaGFyID49IDB4MzA0MCAmJiBjaGFyIDw9IDB4MzA5RixcbiAgICAnS2F0YWthbmEnOiAoY2hhcikgPT4gY2hhciA+PSAweDMwQTAgJiYgY2hhciA8PSAweDMwRkYsXG4gICAgJ0JvcG9tb2ZvJzogKGNoYXIpID0+IGNoYXIgPj0gMHgzMTAwICYmIGNoYXIgPD0gMHgzMTJGLFxuICAgICdIYW5ndWwgQ29tcGF0aWJpbGl0eSBKYW1vJzogKGNoYXIpID0+IGNoYXIgPj0gMHgzMTMwICYmIGNoYXIgPD0gMHgzMThGLFxuICAgICdLYW5idW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDMxOTAgJiYgY2hhciA8PSAweDMxOUYsXG4gICAgJ0JvcG9tb2ZvIEV4dGVuZGVkJzogKGNoYXIpID0+IGNoYXIgPj0gMHgzMUEwICYmIGNoYXIgPD0gMHgzMUJGLFxuICAgICdDSksgU3Ryb2tlcyc6IChjaGFyKSA9PiBjaGFyID49IDB4MzFDMCAmJiBjaGFyIDw9IDB4MzFFRixcbiAgICAnS2F0YWthbmEgUGhvbmV0aWMgRXh0ZW5zaW9ucyc6IChjaGFyKSA9PiBjaGFyID49IDB4MzFGMCAmJiBjaGFyIDw9IDB4MzFGRixcbiAgICAnRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRocyc6IChjaGFyKSA9PiBjaGFyID49IDB4MzIwMCAmJiBjaGFyIDw9IDB4MzJGRixcbiAgICAnQ0pLIENvbXBhdGliaWxpdHknOiAoY2hhcikgPT4gY2hhciA+PSAweDMzMDAgJiYgY2hhciA8PSAweDMzRkYsXG4gICAgJ0NKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEEnOiAoY2hhcikgPT4gY2hhciA+PSAweDM0MDAgJiYgY2hhciA8PSAweDREQkYsXG4gICAgJ1lpamluZyBIZXhhZ3JhbSBTeW1ib2xzJzogKGNoYXIpID0+IGNoYXIgPj0gMHg0REMwICYmIGNoYXIgPD0gMHg0REZGLFxuICAgICdDSksgVW5pZmllZCBJZGVvZ3JhcGhzJzogKGNoYXIpID0+IGNoYXIgPj0gMHg0RTAwICYmIGNoYXIgPD0gMHg5RkZGLFxuICAgICdZaSBTeWxsYWJsZXMnOiAoY2hhcikgPT4gY2hhciA+PSAweEEwMDAgJiYgY2hhciA8PSAweEE0OEYsXG4gICAgJ1lpIFJhZGljYWxzJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBNDkwICYmIGNoYXIgPD0gMHhBNENGLFxuICAgIC8vICdMaXN1JzogKGNoYXIpID0+IGNoYXIgPj0gMHhBNEQwICYmIGNoYXIgPD0gMHhBNEZGLFxuICAgIC8vICdWYWknOiAoY2hhcikgPT4gY2hhciA+PSAweEE1MDAgJiYgY2hhciA8PSAweEE2M0YsXG4gICAgLy8gJ0N5cmlsbGljIEV4dGVuZGVkLUInOiAoY2hhcikgPT4gY2hhciA+PSAweEE2NDAgJiYgY2hhciA8PSAweEE2OUYsXG4gICAgLy8gJ0JhbXVtJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBNkEwICYmIGNoYXIgPD0gMHhBNkZGLFxuICAgIC8vICdNb2RpZmllciBUb25lIExldHRlcnMnOiAoY2hhcikgPT4gY2hhciA+PSAweEE3MDAgJiYgY2hhciA8PSAweEE3MUYsXG4gICAgLy8gJ0xhdGluIEV4dGVuZGVkLUQnOiAoY2hhcikgPT4gY2hhciA+PSAweEE3MjAgJiYgY2hhciA8PSAweEE3RkYsXG4gICAgLy8gJ1N5bG90aSBOYWdyaSc6IChjaGFyKSA9PiBjaGFyID49IDB4QTgwMCAmJiBjaGFyIDw9IDB4QTgyRixcbiAgICAvLyAnQ29tbW9uIEluZGljIE51bWJlciBGb3Jtcyc6IChjaGFyKSA9PiBjaGFyID49IDB4QTgzMCAmJiBjaGFyIDw9IDB4QTgzRixcbiAgICAvLyAnUGhhZ3MtcGEnOiAoY2hhcikgPT4gY2hhciA+PSAweEE4NDAgJiYgY2hhciA8PSAweEE4N0YsXG4gICAgLy8gJ1NhdXJhc2h0cmEnOiAoY2hhcikgPT4gY2hhciA+PSAweEE4ODAgJiYgY2hhciA8PSAweEE4REYsXG4gICAgLy8gJ0RldmFuYWdhcmkgRXh0ZW5kZWQnOiAoY2hhcikgPT4gY2hhciA+PSAweEE4RTAgJiYgY2hhciA8PSAweEE4RkYsXG4gICAgLy8gJ0theWFoIExpJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBOTAwICYmIGNoYXIgPD0gMHhBOTJGLFxuICAgIC8vICdSZWphbmcnOiAoY2hhcikgPT4gY2hhciA+PSAweEE5MzAgJiYgY2hhciA8PSAweEE5NUYsXG4gICAgJ0hhbmd1bCBKYW1vIEV4dGVuZGVkLUEnOiAoY2hhcikgPT4gY2hhciA+PSAweEE5NjAgJiYgY2hhciA8PSAweEE5N0YsXG4gICAgLy8gJ0phdmFuZXNlJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBOTgwICYmIGNoYXIgPD0gMHhBOURGLFxuICAgIC8vICdNeWFubWFyIEV4dGVuZGVkLUInOiAoY2hhcikgPT4gY2hhciA+PSAweEE5RTAgJiYgY2hhciA8PSAweEE5RkYsXG4gICAgLy8gJ0NoYW0nOiAoY2hhcikgPT4gY2hhciA+PSAweEFBMDAgJiYgY2hhciA8PSAweEFBNUYsXG4gICAgLy8gJ015YW5tYXIgRXh0ZW5kZWQtQSc6IChjaGFyKSA9PiBjaGFyID49IDB4QUE2MCAmJiBjaGFyIDw9IDB4QUE3RixcbiAgICAvLyAnVGFpIFZpZXQnOiAoY2hhcikgPT4gY2hhciA+PSAweEFBODAgJiYgY2hhciA8PSAweEFBREYsXG4gICAgLy8gJ01lZXRlaSBNYXllayBFeHRlbnNpb25zJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBQUUwICYmIGNoYXIgPD0gMHhBQUZGLFxuICAgIC8vICdFdGhpb3BpYyBFeHRlbmRlZC1BJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBQjAwICYmIGNoYXIgPD0gMHhBQjJGLFxuICAgIC8vICdMYXRpbiBFeHRlbmRlZC1FJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBQjMwICYmIGNoYXIgPD0gMHhBQjZGLFxuICAgIC8vICdDaGVyb2tlZSBTdXBwbGVtZW50JzogKGNoYXIpID0+IGNoYXIgPj0gMHhBQjcwICYmIGNoYXIgPD0gMHhBQkJGLFxuICAgIC8vICdNZWV0ZWkgTWF5ZWsnOiAoY2hhcikgPT4gY2hhciA+PSAweEFCQzAgJiYgY2hhciA8PSAweEFCRkYsXG4gICAgJ0hhbmd1bCBTeWxsYWJsZXMnOiAoY2hhcikgPT4gY2hhciA+PSAweEFDMDAgJiYgY2hhciA8PSAweEQ3QUYsXG4gICAgJ0hhbmd1bCBKYW1vIEV4dGVuZGVkLUInOiAoY2hhcikgPT4gY2hhciA+PSAweEQ3QjAgJiYgY2hhciA8PSAweEQ3RkYsXG4gICAgLy8gJ0hpZ2ggU3Vycm9nYXRlcyc6IChjaGFyKSA9PiBjaGFyID49IDB4RDgwMCAmJiBjaGFyIDw9IDB4REI3RixcbiAgICAvLyAnSGlnaCBQcml2YXRlIFVzZSBTdXJyb2dhdGVzJzogKGNoYXIpID0+IGNoYXIgPj0gMHhEQjgwICYmIGNoYXIgPD0gMHhEQkZGLFxuICAgIC8vICdMb3cgU3Vycm9nYXRlcyc6IChjaGFyKSA9PiBjaGFyID49IDB4REMwMCAmJiBjaGFyIDw9IDB4REZGRixcbiAgICAnUHJpdmF0ZSBVc2UgQXJlYSc6IChjaGFyKSA9PiBjaGFyID49IDB4RTAwMCAmJiBjaGFyIDw9IDB4RjhGRixcbiAgICAnQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBocyc6IChjaGFyKSA9PiBjaGFyID49IDB4RjkwMCAmJiBjaGFyIDw9IDB4RkFGRixcbiAgICAvLyAnQWxwaGFiZXRpYyBQcmVzZW50YXRpb24gRm9ybXMnOiAoY2hhcikgPT4gY2hhciA+PSAweEZCMDAgJiYgY2hhciA8PSAweEZCNEYsXG4gICAgJ0FyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQSc6IChjaGFyKSA9PiBjaGFyID49IDB4RkI1MCAmJiBjaGFyIDw9IDB4RkRGRixcbiAgICAvLyAnVmFyaWF0aW9uIFNlbGVjdG9ycyc6IChjaGFyKSA9PiBjaGFyID49IDB4RkUwMCAmJiBjaGFyIDw9IDB4RkUwRixcbiAgICAnVmVydGljYWwgRm9ybXMnOiAoY2hhcikgPT4gY2hhciA+PSAweEZFMTAgJiYgY2hhciA8PSAweEZFMUYsXG4gICAgLy8gJ0NvbWJpbmluZyBIYWxmIE1hcmtzJzogKGNoYXIpID0+IGNoYXIgPj0gMHhGRTIwICYmIGNoYXIgPD0gMHhGRTJGLFxuICAgICdDSksgQ29tcGF0aWJpbGl0eSBGb3Jtcyc6IChjaGFyKSA9PiBjaGFyID49IDB4RkUzMCAmJiBjaGFyIDw9IDB4RkU0RixcbiAgICAnU21hbGwgRm9ybSBWYXJpYW50cyc6IChjaGFyKSA9PiBjaGFyID49IDB4RkU1MCAmJiBjaGFyIDw9IDB4RkU2RixcbiAgICAnQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1CJzogKGNoYXIpID0+IGNoYXIgPj0gMHhGRTcwICYmIGNoYXIgPD0gMHhGRUZGLFxuICAgICdIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3Jtcyc6IChjaGFyKSA9PiBjaGFyID49IDB4RkYwMCAmJiBjaGFyIDw9IDB4RkZFRlxuICAgIC8vICdTcGVjaWFscyc6IChjaGFyKSA9PiBjaGFyID49IDB4RkZGMCAmJiBjaGFyIDw9IDB4RkZGRixcbiAgICAvLyAnTGluZWFyIEIgU3lsbGFiYXJ5JzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDAwMCAmJiBjaGFyIDw9IDB4MTAwN0YsXG4gICAgLy8gJ0xpbmVhciBCIElkZW9ncmFtcyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTAwODAgJiYgY2hhciA8PSAweDEwMEZGLFxuICAgIC8vICdBZWdlYW4gTnVtYmVycyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTAxMDAgJiYgY2hhciA8PSAweDEwMTNGLFxuICAgIC8vICdBbmNpZW50IEdyZWVrIE51bWJlcnMnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwMTQwICYmIGNoYXIgPD0gMHgxMDE4RixcbiAgICAvLyAnQW5jaWVudCBTeW1ib2xzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDE5MCAmJiBjaGFyIDw9IDB4MTAxQ0YsXG4gICAgLy8gJ1BoYWlzdG9zIERpc2MnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwMUQwICYmIGNoYXIgPD0gMHgxMDFGRixcbiAgICAvLyAnTHljaWFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDI4MCAmJiBjaGFyIDw9IDB4MTAyOUYsXG4gICAgLy8gJ0Nhcmlhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTAyQTAgJiYgY2hhciA8PSAweDEwMkRGLFxuICAgIC8vICdDb3B0aWMgRXBhY3QgTnVtYmVycyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTAyRTAgJiYgY2hhciA8PSAweDEwMkZGLFxuICAgIC8vICdPbGQgSXRhbGljJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDMwMCAmJiBjaGFyIDw9IDB4MTAzMkYsXG4gICAgLy8gJ0dvdGhpYyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTAzMzAgJiYgY2hhciA8PSAweDEwMzRGLFxuICAgIC8vICdPbGQgUGVybWljJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDM1MCAmJiBjaGFyIDw9IDB4MTAzN0YsXG4gICAgLy8gJ1VnYXJpdGljJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDM4MCAmJiBjaGFyIDw9IDB4MTAzOUYsXG4gICAgLy8gJ09sZCBQZXJzaWFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDNBMCAmJiBjaGFyIDw9IDB4MTAzREYsXG4gICAgLy8gJ0Rlc2VyZXQnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwNDAwICYmIGNoYXIgPD0gMHgxMDQ0RixcbiAgICAvLyAnU2hhdmlhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTA0NTAgJiYgY2hhciA8PSAweDEwNDdGLFxuICAgIC8vICdPc21hbnlhJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDQ4MCAmJiBjaGFyIDw9IDB4MTA0QUYsXG4gICAgLy8gJ09zYWdlJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDRCMCAmJiBjaGFyIDw9IDB4MTA0RkYsXG4gICAgLy8gJ0VsYmFzYW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDEwNTAwICYmIGNoYXIgPD0gMHgxMDUyRixcbiAgICAvLyAnQ2F1Y2FzaWFuIEFsYmFuaWFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDUzMCAmJiBjaGFyIDw9IDB4MTA1NkYsXG4gICAgLy8gJ0xpbmVhciBBJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDYwMCAmJiBjaGFyIDw9IDB4MTA3N0YsXG4gICAgLy8gJ0N5cHJpb3QgU3lsbGFiYXJ5JzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDgwMCAmJiBjaGFyIDw9IDB4MTA4M0YsXG4gICAgLy8gJ0ltcGVyaWFsIEFyYW1haWMnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwODQwICYmIGNoYXIgPD0gMHgxMDg1RixcbiAgICAvLyAnUGFsbXlyZW5lJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDg2MCAmJiBjaGFyIDw9IDB4MTA4N0YsXG4gICAgLy8gJ05hYmF0YWVhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTA4ODAgJiYgY2hhciA8PSAweDEwOEFGLFxuICAgIC8vICdIYXRyYW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDEwOEUwICYmIGNoYXIgPD0gMHgxMDhGRixcbiAgICAvLyAnUGhvZW5pY2lhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTA5MDAgJiYgY2hhciA8PSAweDEwOTFGLFxuICAgIC8vICdMeWRpYW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDEwOTIwICYmIGNoYXIgPD0gMHgxMDkzRixcbiAgICAvLyAnTWVyb2l0aWMgSGllcm9nbHlwaHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwOTgwICYmIGNoYXIgPD0gMHgxMDk5RixcbiAgICAvLyAnTWVyb2l0aWMgQ3Vyc2l2ZSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTA5QTAgJiYgY2hhciA8PSAweDEwOUZGLFxuICAgIC8vICdLaGFyb3NodGhpJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMEEwMCAmJiBjaGFyIDw9IDB4MTBBNUYsXG4gICAgLy8gJ09sZCBTb3V0aCBBcmFiaWFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMEE2MCAmJiBjaGFyIDw9IDB4MTBBN0YsXG4gICAgLy8gJ09sZCBOb3J0aCBBcmFiaWFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMEE4MCAmJiBjaGFyIDw9IDB4MTBBOUYsXG4gICAgLy8gJ01hbmljaGFlYW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDEwQUMwICYmIGNoYXIgPD0gMHgxMEFGRixcbiAgICAvLyAnQXZlc3Rhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTBCMDAgJiYgY2hhciA8PSAweDEwQjNGLFxuICAgIC8vICdJbnNjcmlwdGlvbmFsIFBhcnRoaWFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMEI0MCAmJiBjaGFyIDw9IDB4MTBCNUYsXG4gICAgLy8gJ0luc2NyaXB0aW9uYWwgUGFobGF2aSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTBCNjAgJiYgY2hhciA8PSAweDEwQjdGLFxuICAgIC8vICdQc2FsdGVyIFBhaGxhdmknOiAoY2hhcikgPT4gY2hhciA+PSAweDEwQjgwICYmIGNoYXIgPD0gMHgxMEJBRixcbiAgICAvLyAnT2xkIFR1cmtpYyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTBDMDAgJiYgY2hhciA8PSAweDEwQzRGLFxuICAgIC8vICdPbGQgSHVuZ2FyaWFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMEM4MCAmJiBjaGFyIDw9IDB4MTBDRkYsXG4gICAgLy8gJ0hhbmlmaSBSb2hpbmd5YSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTBEMDAgJiYgY2hhciA8PSAweDEwRDNGLFxuICAgIC8vICdSdW1pIE51bWVyYWwgU3ltYm9scyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTBFNjAgJiYgY2hhciA8PSAweDEwRTdGLFxuICAgIC8vICdPbGQgU29nZGlhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTBGMDAgJiYgY2hhciA8PSAweDEwRjJGLFxuICAgIC8vICdTb2dkaWFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMEYzMCAmJiBjaGFyIDw9IDB4MTBGNkYsXG4gICAgLy8gJ0VseW1haWMnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwRkUwICYmIGNoYXIgPD0gMHgxMEZGRixcbiAgICAvLyAnQnJhaG1pJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTAwMCAmJiBjaGFyIDw9IDB4MTEwN0YsXG4gICAgLy8gJ0thaXRoaSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTEwODAgJiYgY2hhciA8PSAweDExMENGLFxuICAgIC8vICdTb3JhIFNvbXBlbmcnOiAoY2hhcikgPT4gY2hhciA+PSAweDExMEQwICYmIGNoYXIgPD0gMHgxMTBGRixcbiAgICAvLyAnQ2hha21hJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTEwMCAmJiBjaGFyIDw9IDB4MTExNEYsXG4gICAgLy8gJ01haGFqYW5pJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTE1MCAmJiBjaGFyIDw9IDB4MTExN0YsXG4gICAgLy8gJ1NoYXJhZGEnOiAoY2hhcikgPT4gY2hhciA+PSAweDExMTgwICYmIGNoYXIgPD0gMHgxMTFERixcbiAgICAvLyAnU2luaGFsYSBBcmNoYWljIE51bWJlcnMnOiAoY2hhcikgPT4gY2hhciA+PSAweDExMUUwICYmIGNoYXIgPD0gMHgxMTFGRixcbiAgICAvLyAnS2hvamtpJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTIwMCAmJiBjaGFyIDw9IDB4MTEyNEYsXG4gICAgLy8gJ011bHRhbmknOiAoY2hhcikgPT4gY2hhciA+PSAweDExMjgwICYmIGNoYXIgPD0gMHgxMTJBRixcbiAgICAvLyAnS2h1ZGF3YWRpJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTJCMCAmJiBjaGFyIDw9IDB4MTEyRkYsXG4gICAgLy8gJ0dyYW50aGEnOiAoY2hhcikgPT4gY2hhciA+PSAweDExMzAwICYmIGNoYXIgPD0gMHgxMTM3RixcbiAgICAvLyAnTmV3YSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTE0MDAgJiYgY2hhciA8PSAweDExNDdGLFxuICAgIC8vICdUaXJodXRhJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTQ4MCAmJiBjaGFyIDw9IDB4MTE0REYsXG4gICAgLy8gJ1NpZGRoYW0nOiAoY2hhcikgPT4gY2hhciA+PSAweDExNTgwICYmIGNoYXIgPD0gMHgxMTVGRixcbiAgICAvLyAnTW9kaSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTE2MDAgJiYgY2hhciA8PSAweDExNjVGLFxuICAgIC8vICdNb25nb2xpYW4gU3VwcGxlbWVudCc6IChjaGFyKSA9PiBjaGFyID49IDB4MTE2NjAgJiYgY2hhciA8PSAweDExNjdGLFxuICAgIC8vICdUYWtyaSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTE2ODAgJiYgY2hhciA8PSAweDExNkNGLFxuICAgIC8vICdBaG9tJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTcwMCAmJiBjaGFyIDw9IDB4MTE3M0YsXG4gICAgLy8gJ0RvZ3JhJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTgwMCAmJiBjaGFyIDw9IDB4MTE4NEYsXG4gICAgLy8gJ1dhcmFuZyBDaXRpJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMThBMCAmJiBjaGFyIDw9IDB4MTE4RkYsXG4gICAgLy8gJ05hbmRpbmFnYXJpJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTlBMCAmJiBjaGFyIDw9IDB4MTE5RkYsXG4gICAgLy8gJ1phbmFiYXphciBTcXVhcmUnOiAoY2hhcikgPT4gY2hhciA+PSAweDExQTAwICYmIGNoYXIgPD0gMHgxMUE0RixcbiAgICAvLyAnU295b21ibyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTFBNTAgJiYgY2hhciA8PSAweDExQUFGLFxuICAgIC8vICdQYXUgQ2luIEhhdSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTFBQzAgJiYgY2hhciA8PSAweDExQUZGLFxuICAgIC8vICdCaGFpa3N1a2knOiAoY2hhcikgPT4gY2hhciA+PSAweDExQzAwICYmIGNoYXIgPD0gMHgxMUM2RixcbiAgICAvLyAnTWFyY2hlbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTFDNzAgJiYgY2hhciA8PSAweDExQ0JGLFxuICAgIC8vICdNYXNhcmFtIEdvbmRpJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMUQwMCAmJiBjaGFyIDw9IDB4MTFENUYsXG4gICAgLy8gJ0d1bmphbGEgR29uZGknOiAoY2hhcikgPT4gY2hhciA+PSAweDExRDYwICYmIGNoYXIgPD0gMHgxMURBRixcbiAgICAvLyAnTWFrYXNhcic6IChjaGFyKSA9PiBjaGFyID49IDB4MTFFRTAgJiYgY2hhciA8PSAweDExRUZGLFxuICAgIC8vICdUYW1pbCBTdXBwbGVtZW50JzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMUZDMCAmJiBjaGFyIDw9IDB4MTFGRkYsXG4gICAgLy8gJ0N1bmVpZm9ybSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTIwMDAgJiYgY2hhciA8PSAweDEyM0ZGLFxuICAgIC8vICdDdW5laWZvcm0gTnVtYmVycyBhbmQgUHVuY3R1YXRpb24nOiAoY2hhcikgPT4gY2hhciA+PSAweDEyNDAwICYmIGNoYXIgPD0gMHgxMjQ3RixcbiAgICAvLyAnRWFybHkgRHluYXN0aWMgQ3VuZWlmb3JtJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMjQ4MCAmJiBjaGFyIDw9IDB4MTI1NEYsXG4gICAgLy8gJ0VneXB0aWFuIEhpZXJvZ2x5cGhzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMzAwMCAmJiBjaGFyIDw9IDB4MTM0MkYsXG4gICAgLy8gJ0VneXB0aWFuIEhpZXJvZ2x5cGggRm9ybWF0IENvbnRyb2xzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMzQzMCAmJiBjaGFyIDw9IDB4MTM0M0YsXG4gICAgLy8gJ0FuYXRvbGlhbiBIaWVyb2dseXBocyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTQ0MDAgJiYgY2hhciA8PSAweDE0NjdGLFxuICAgIC8vICdCYW11bSBTdXBwbGVtZW50JzogKGNoYXIpID0+IGNoYXIgPj0gMHgxNjgwMCAmJiBjaGFyIDw9IDB4MTZBM0YsXG4gICAgLy8gJ01ybyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTZBNDAgJiYgY2hhciA8PSAweDE2QTZGLFxuICAgIC8vICdCYXNzYSBWYWgnOiAoY2hhcikgPT4gY2hhciA+PSAweDE2QUQwICYmIGNoYXIgPD0gMHgxNkFGRixcbiAgICAvLyAnUGFoYXdoIEhtb25nJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxNkIwMCAmJiBjaGFyIDw9IDB4MTZCOEYsXG4gICAgLy8gJ01lZGVmYWlkcmluJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxNkU0MCAmJiBjaGFyIDw9IDB4MTZFOUYsXG4gICAgLy8gJ01pYW8nOiAoY2hhcikgPT4gY2hhciA+PSAweDE2RjAwICYmIGNoYXIgPD0gMHgxNkY5RixcbiAgICAvLyAnSWRlb2dyYXBoaWMgU3ltYm9scyBhbmQgUHVuY3R1YXRpb24nOiAoY2hhcikgPT4gY2hhciA+PSAweDE2RkUwICYmIGNoYXIgPD0gMHgxNkZGRixcbiAgICAvLyAnVGFuZ3V0JzogKGNoYXIpID0+IGNoYXIgPj0gMHgxNzAwMCAmJiBjaGFyIDw9IDB4MTg3RkYsXG4gICAgLy8gJ1Rhbmd1dCBDb21wb25lbnRzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxODgwMCAmJiBjaGFyIDw9IDB4MThBRkYsXG4gICAgLy8gJ0thbmEgU3VwcGxlbWVudCc6IChjaGFyKSA9PiBjaGFyID49IDB4MUIwMDAgJiYgY2hhciA8PSAweDFCMEZGLFxuICAgIC8vICdLYW5hIEV4dGVuZGVkLUEnOiAoY2hhcikgPT4gY2hhciA+PSAweDFCMTAwICYmIGNoYXIgPD0gMHgxQjEyRixcbiAgICAvLyAnU21hbGwgS2FuYSBFeHRlbnNpb24nOiAoY2hhcikgPT4gY2hhciA+PSAweDFCMTMwICYmIGNoYXIgPD0gMHgxQjE2RixcbiAgICAvLyAnTnVzaHUnOiAoY2hhcikgPT4gY2hhciA+PSAweDFCMTcwICYmIGNoYXIgPD0gMHgxQjJGRixcbiAgICAvLyAnRHVwbG95YW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDFCQzAwICYmIGNoYXIgPD0gMHgxQkM5RixcbiAgICAvLyAnU2hvcnRoYW5kIEZvcm1hdCBDb250cm9scyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUJDQTAgJiYgY2hhciA8PSAweDFCQ0FGLFxuICAgIC8vICdCeXphbnRpbmUgTXVzaWNhbCBTeW1ib2xzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRDAwMCAmJiBjaGFyIDw9IDB4MUQwRkYsXG4gICAgLy8gJ011c2ljYWwgU3ltYm9scyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUQxMDAgJiYgY2hhciA8PSAweDFEMUZGLFxuICAgIC8vICdBbmNpZW50IEdyZWVrIE11c2ljYWwgTm90YXRpb24nOiAoY2hhcikgPT4gY2hhciA+PSAweDFEMjAwICYmIGNoYXIgPD0gMHgxRDI0RixcbiAgICAvLyAnTWF5YW4gTnVtZXJhbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFEMkUwICYmIGNoYXIgPD0gMHgxRDJGRixcbiAgICAvLyAnVGFpIFh1YW4gSmluZyBTeW1ib2xzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRDMwMCAmJiBjaGFyIDw9IDB4MUQzNUYsXG4gICAgLy8gJ0NvdW50aW5nIFJvZCBOdW1lcmFscyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUQzNjAgJiYgY2hhciA8PSAweDFEMzdGLFxuICAgIC8vICdNYXRoZW1hdGljYWwgQWxwaGFudW1lcmljIFN5bWJvbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFENDAwICYmIGNoYXIgPD0gMHgxRDdGRixcbiAgICAvLyAnU3V0dG9uIFNpZ25Xcml0aW5nJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRDgwMCAmJiBjaGFyIDw9IDB4MURBQUYsXG4gICAgLy8gJ0dsYWdvbGl0aWMgU3VwcGxlbWVudCc6IChjaGFyKSA9PiBjaGFyID49IDB4MUUwMDAgJiYgY2hhciA8PSAweDFFMDJGLFxuICAgIC8vICdOeWlha2VuZyBQdWFjaHVlIEhtb25nJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRTEwMCAmJiBjaGFyIDw9IDB4MUUxNEYsXG4gICAgLy8gJ1dhbmNobyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUUyQzAgJiYgY2hhciA8PSAweDFFMkZGLFxuICAgIC8vICdNZW5kZSBLaWtha3VpJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRTgwMCAmJiBjaGFyIDw9IDB4MUU4REYsXG4gICAgLy8gJ0FkbGFtJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRTkwMCAmJiBjaGFyIDw9IDB4MUU5NUYsXG4gICAgLy8gJ0luZGljIFNpeWFxIE51bWJlcnMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFFQzcwICYmIGNoYXIgPD0gMHgxRUNCRixcbiAgICAvLyAnT3R0b21hbiBTaXlhcSBOdW1iZXJzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRUQwMCAmJiBjaGFyIDw9IDB4MUVENEYsXG4gICAgLy8gJ0FyYWJpYyBNYXRoZW1hdGljYWwgQWxwaGFiZXRpYyBTeW1ib2xzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRUUwMCAmJiBjaGFyIDw9IDB4MUVFRkYsXG4gICAgLy8gJ01haGpvbmcgVGlsZXMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFGMDAwICYmIGNoYXIgPD0gMHgxRjAyRixcbiAgICAvLyAnRG9taW5vIFRpbGVzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRjAzMCAmJiBjaGFyIDw9IDB4MUYwOUYsXG4gICAgLy8gJ1BsYXlpbmcgQ2FyZHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFGMEEwICYmIGNoYXIgPD0gMHgxRjBGRixcbiAgICAvLyAnRW5jbG9zZWQgQWxwaGFudW1lcmljIFN1cHBsZW1lbnQnOiAoY2hhcikgPT4gY2hhciA+PSAweDFGMTAwICYmIGNoYXIgPD0gMHgxRjFGRixcbiAgICAvLyAnRW5jbG9zZWQgSWRlb2dyYXBoaWMgU3VwcGxlbWVudCc6IChjaGFyKSA9PiBjaGFyID49IDB4MUYyMDAgJiYgY2hhciA8PSAweDFGMkZGLFxuICAgIC8vICdNaXNjZWxsYW5lb3VzIFN5bWJvbHMgYW5kIFBpY3RvZ3JhcGhzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRjMwMCAmJiBjaGFyIDw9IDB4MUY1RkYsXG4gICAgLy8gJ0Vtb3RpY29ucyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUY2MDAgJiYgY2hhciA8PSAweDFGNjRGLFxuICAgIC8vICdPcm5hbWVudGFsIERpbmdiYXRzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRjY1MCAmJiBjaGFyIDw9IDB4MUY2N0YsXG4gICAgLy8gJ1RyYW5zcG9ydCBhbmQgTWFwIFN5bWJvbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFGNjgwICYmIGNoYXIgPD0gMHgxRjZGRixcbiAgICAvLyAnQWxjaGVtaWNhbCBTeW1ib2xzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRjcwMCAmJiBjaGFyIDw9IDB4MUY3N0YsXG4gICAgLy8gJ0dlb21ldHJpYyBTaGFwZXMgRXh0ZW5kZWQnOiAoY2hhcikgPT4gY2hhciA+PSAweDFGNzgwICYmIGNoYXIgPD0gMHgxRjdGRixcbiAgICAvLyAnU3VwcGxlbWVudGFsIEFycm93cy1DJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRjgwMCAmJiBjaGFyIDw9IDB4MUY4RkYsXG4gICAgLy8gJ1N1cHBsZW1lbnRhbCBTeW1ib2xzIGFuZCBQaWN0b2dyYXBocyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUY5MDAgJiYgY2hhciA8PSAweDFGOUZGLFxuICAgIC8vICdDaGVzcyBTeW1ib2xzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRkEwMCAmJiBjaGFyIDw9IDB4MUZBNkYsXG4gICAgLy8gJ1N5bWJvbHMgYW5kIFBpY3RvZ3JhcGhzIEV4dGVuZGVkLUEnOiAoY2hhcikgPT4gY2hhciA+PSAweDFGQTcwICYmIGNoYXIgPD0gMHgxRkFGRixcbiAgICAvLyAnQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQic6IChjaGFyKSA9PiBjaGFyID49IDB4MjAwMDAgJiYgY2hhciA8PSAweDJBNkRGLFxuICAgIC8vICdDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBDJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyQTcwMCAmJiBjaGFyIDw9IDB4MkI3M0YsXG4gICAgLy8gJ0NKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEQnOiAoY2hhcikgPT4gY2hhciA+PSAweDJCNzQwICYmIGNoYXIgPD0gMHgyQjgxRixcbiAgICAvLyAnQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gRSc6IChjaGFyKSA9PiBjaGFyID49IDB4MkI4MjAgJiYgY2hhciA8PSAweDJDRUFGLFxuICAgIC8vICdDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBGJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyQ0VCMCAmJiBjaGFyIDw9IDB4MkVCRUYsXG4gICAgLy8gJ0NKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMgU3VwcGxlbWVudCc6IChjaGFyKSA9PiBjaGFyID49IDB4MkY4MDAgJiYgY2hhciA8PSAweDJGQTFGLFxuICAgIC8vICdUYWdzJzogKGNoYXIpID0+IGNoYXIgPj0gMHhFMDAwMCAmJiBjaGFyIDw9IDB4RTAwN0YsXG4gICAgLy8gJ1ZhcmlhdGlvbiBTZWxlY3RvcnMgU3VwcGxlbWVudCc6IChjaGFyKSA9PiBjaGFyID49IDB4RTAxMDAgJiYgY2hhciA8PSAweEUwMUVGLFxuICAgIC8vICdTdXBwbGVtZW50YXJ5IFByaXZhdGUgVXNlIEFyZWEtQSc6IChjaGFyKSA9PiBjaGFyID49IDB4RjAwMDAgJiYgY2hhciA8PSAweEZGRkZGLFxuICAgIC8vICdTdXBwbGVtZW50YXJ5IFByaXZhdGUgVXNlIEFyZWEtQic6IChjaGFyKSA9PiBjaGFyID49IDB4MTAwMDAwICYmIGNoYXIgPD0gMHgxMEZGRkYsXG59O1xuXG5leHBvcnQgZGVmYXVsdCB1bmljb2RlQmxvY2tMb29rdXA7XG4iLCIvLyBAZmxvd1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuZXctY2FwICovXG5cbmltcG9ydCBpc0NoYXIgZnJvbSAnLi9pc19jaGFyX2luX3VuaWNvZGVfYmxvY2snO1xuXG5leHBvcnQgZnVuY3Rpb24gYWxsb3dzSWRlb2dyYXBoaWNCcmVha2luZyhjaGFyczogc3RyaW5nKSB7XG4gICAgZm9yIChjb25zdCBjaGFyIG9mIGNoYXJzKSB7XG4gICAgICAgIGlmICghY2hhckFsbG93c0lkZW9ncmFwaGljQnJlYWtpbmcoY2hhci5jaGFyQ29kZUF0KDApKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbG93c1ZlcnRpY2FsV3JpdGluZ01vZGUoY2hhcnM6IHN0cmluZykge1xuICAgIGZvciAoY29uc3QgY2hhciBvZiBjaGFycykge1xuICAgICAgICBpZiAoY2hhckhhc1VwcmlnaHRWZXJ0aWNhbE9yaWVudGF0aW9uKGNoYXIuY2hhckNvZGVBdCgwKSkpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGxvd3NMZXR0ZXJTcGFjaW5nKGNoYXJzOiBzdHJpbmcpIHtcbiAgICBmb3IgKGNvbnN0IGNoYXIgb2YgY2hhcnMpIHtcbiAgICAgICAgaWYgKCFjaGFyQWxsb3dzTGV0dGVyU3BhY2luZyhjaGFyLmNoYXJDb2RlQXQoMCkpKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hhckFsbG93c0xldHRlclNwYWNpbmcoY2hhcjogbnVtYmVyKSB7XG4gICAgaWYgKGlzQ2hhclsnQXJhYmljJ10oY2hhcikpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoaXNDaGFyWydBcmFiaWMgU3VwcGxlbWVudCddKGNoYXIpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGlzQ2hhclsnQXJhYmljIEV4dGVuZGVkLUEnXShjaGFyKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChpc0NoYXJbJ0FyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQSddKGNoYXIpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGlzQ2hhclsnQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1CJ10oY2hhcikpIHJldHVybiBmYWxzZTtcblxuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hhckFsbG93c0lkZW9ncmFwaGljQnJlYWtpbmcoY2hhcjogbnVtYmVyKSB7XG4gICAgLy8gUmV0dXJuIGVhcmx5IGZvciBjaGFyYWN0ZXJzIG91dHNpZGUgYWxsIGlkZW9ncmFwaGljIHJhbmdlcy5cbiAgICBpZiAoY2hhciA8IDB4MkU4MCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgaWYgKGlzQ2hhclsnQm9wb21vZm8gRXh0ZW5kZWQnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnQm9wb21vZm8nXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBocyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydDSksgQ29tcGF0aWJpbGl0eSddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydDSksgUmFkaWNhbHMgU3VwcGxlbWVudCddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydDSksgU3Ryb2tlcyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydDSksgU3ltYm9scyBhbmQgUHVuY3R1YXRpb24nXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQSddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydDSksgVW5pZmllZCBJZGVvZ3JhcGhzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0VuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnSGFsZndpZHRoIGFuZCBGdWxsd2lkdGggRm9ybXMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnSGlyYWdhbmEnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnSWRlb2dyYXBoaWMgRGVzY3JpcHRpb24gQ2hhcmFjdGVycyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydLYW5neGkgUmFkaWNhbHMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnS2F0YWthbmEgUGhvbmV0aWMgRXh0ZW5zaW9ucyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydLYXRha2FuYSddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydWZXJ0aWNhbCBGb3JtcyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydZaSBSYWRpY2FscyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydZaSBTeWxsYWJsZXMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIFRoZSBmb2xsb3dpbmcgbG9naWMgY29tZXMgZnJvbVxuLy8gPGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLzEyLjAuMC91Y2QvVmVydGljYWxPcmllbnRhdGlvbi50eHQ+LlxuLy8gS2VlcCBpdCBzeW5jaHJvbml6ZWQgd2l0aFxuLy8gPGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljL1VDRC9sYXRlc3QvdWNkL1ZlcnRpY2FsT3JpZW50YXRpb24udHh0Pi5cbi8vIFRoZSBkYXRhIGZpbGUgZGVub3RlcyB3aXRoIMOiwoDCnFXDosKAwp0gb3Igw6LCgMKcVHXDosKAwp0gYW55IGNvZGVwb2ludCB0aGF0IG1heSBiZSBkcmF3blxuLy8gdXByaWdodCBpbiB2ZXJ0aWNhbCB0ZXh0IGJ1dCBkb2VzIG5vdCBkaXN0aW5ndWlzaCBiZXR3ZWVuIHVwcmlnaHQgYW5kXG4vLyDDosKAwpxuZXV0cmFsw6LCgMKdIGNoYXJhY3RlcnMuXG5cbi8vIEJsb2NrcyBpbiB0aGUgVW5pY29kZSBzdXBwbGVtZW50YXJ5IHBsYW5lcyBhcmUgZXhjbHVkZWQgZnJvbSB0aGlzIG1vZHVsZSBkdWVcbi8vIHRvIDxodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC9pc3N1ZXMvMjk+LlxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gVW5pY29kZSBjb2RlcG9pbnQgaWRlbnRpZmllcyBhIGNoYXJhY3RlciB3aXRoXG4gKiB1cHJpZ2h0IG9yaWVudGF0aW9uLlxuICpcbiAqIEEgY2hhcmFjdGVyIGhhcyB1cHJpZ2h0IG9yaWVudGF0aW9uIGlmIGl0IGlzIGRyYXduIHVwcmlnaHQgKHVucm90YXRlZClcbiAqIHdoZXRoZXIgdGhlIGxpbmUgaXMgb3JpZW50ZWQgaG9yaXpvbnRhbGx5IG9yIHZlcnRpY2FsbHksIGV2ZW4gaWYgYm90aFxuICogYWRqYWNlbnQgY2hhcmFjdGVycyBjYW4gYmUgcm90YXRlZC4gRm9yIGV4YW1wbGUsIGEgQ2hpbmVzZSBjaGFyYWN0ZXIgaXNcbiAqIGFsd2F5cyBkcmF3biB1cHJpZ2h0LiBBbiB1cHJpZ2h0bHkgb3JpZW50ZWQgY2hhcmFjdGVyIGNhdXNlcyBhbiBhZGphY2VudFxuICogw6LCgMKcbmV1dHJhbMOiwoDCnSBjaGFyYWN0ZXIgdG8gYmUgZHJhd24gdXByaWdodCBhcyB3ZWxsLlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYXJIYXNVcHJpZ2h0VmVydGljYWxPcmllbnRhdGlvbihjaGFyOiBudW1iZXIpIHtcbiAgICBpZiAoY2hhciA9PT0gMHgwMkVBIC8qIG1vZGlmaWVyIGxldHRlciB5aW4gZGVwYXJ0aW5nIHRvbmUgbWFyayAqLyB8fFxuICAgICAgICBjaGFyID09PSAweDAyRUIgLyogbW9kaWZpZXIgbGV0dGVyIHlhbmcgZGVwYXJ0aW5nIHRvbmUgbWFyayAqLykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gZWFybHkgZm9yIGNoYXJhY3RlcnMgb3V0c2lkZSBhbGwgcmFuZ2VzIHdob3NlIGNoYXJhY3RlcnMgcmVtYWluXG4gICAgLy8gdXByaWdodCBpbiB2ZXJ0aWNhbCB3cml0aW5nIG1vZGUuXG4gICAgaWYgKGNoYXIgPCAweDExMDApIHJldHVybiBmYWxzZTtcblxuICAgIGlmIChpc0NoYXJbJ0JvcG9tb2ZvIEV4dGVuZGVkJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0JvcG9tb2ZvJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0NKSyBDb21wYXRpYmlsaXR5IEZvcm1zJ10oY2hhcikpIHtcbiAgICAgICAgaWYgKCEoKGNoYXIgPj0gMHhGRTQ5IC8qIGRhc2hlZCBvdmVybGluZSAqLyAmJiBjaGFyIDw9IDB4RkU0RikgLyogd2F2eSBsb3cgbGluZSAqLykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc0NoYXJbJ0NKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnQ0pLIENvbXBhdGliaWxpdHknXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnQ0pLIFJhZGljYWxzIFN1cHBsZW1lbnQnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnQ0pLIFN0cm9rZXMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uJ10oY2hhcikpIHtcbiAgICAgICAgaWYgKCEoKGNoYXIgPj0gMHgzMDA4IC8qIGxlZnQgYW5nbGUgYnJhY2tldCAqLyAmJiBjaGFyIDw9IDB4MzAxMSkgLyogcmlnaHQgYmxhY2sgbGVudGljdWxhciBicmFja2V0ICovKSAmJlxuICAgICAgICAgICAgISgoY2hhciA+PSAweDMwMTQgLyogbGVmdCB0b3J0b2lzZSBzaGVsbCBicmFja2V0ICovICYmIGNoYXIgPD0gMHgzMDFGKSAvKiBsb3cgZG91YmxlIHByaW1lIHF1b3RhdGlvbiBtYXJrICovKSAmJlxuICAgICAgICAgICAgY2hhciAhPT0gMHgzMDMwIC8qIHdhdnkgZGFzaCAqLykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzQ2hhclsnQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQSddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydDSksgVW5pZmllZCBJZGVvZ3JhcGhzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0VuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnSGFuZ3VsIENvbXBhdGliaWxpdHkgSmFtbyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydIYW5ndWwgSmFtbyBFeHRlbmRlZC1BJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0hhbmd1bCBKYW1vIEV4dGVuZGVkLUInXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnSGFuZ3VsIEphbW8nXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnSGFuZ3VsIFN5bGxhYmxlcyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydIaXJhZ2FuYSddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydJZGVvZ3JhcGhpYyBEZXNjcmlwdGlvbiBDaGFyYWN0ZXJzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0thbmJ1biddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydLYW5neGkgUmFkaWNhbHMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnS2F0YWthbmEgUGhvbmV0aWMgRXh0ZW5zaW9ucyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydLYXRha2FuYSddKGNoYXIpKSB7XG4gICAgICAgIGlmIChjaGFyICE9PSAweDMwRkMgLyoga2F0YWthbmEtaGlyYWdhbmEgcHJvbG9uZ2VkIHNvdW5kIG1hcmsgKi8pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc0NoYXJbJ0hhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zJ10oY2hhcikpIHtcbiAgICAgICAgaWYgKGNoYXIgIT09IDB4RkYwOCAvKiBmdWxsd2lkdGggbGVmdCBwYXJlbnRoZXNpcyAqLyAmJlxuICAgICAgICAgICAgY2hhciAhPT0gMHhGRjA5IC8qIGZ1bGx3aWR0aCByaWdodCBwYXJlbnRoZXNpcyAqLyAmJlxuICAgICAgICAgICAgY2hhciAhPT0gMHhGRjBEIC8qIGZ1bGx3aWR0aCBoeXBoZW4tbWludXMgKi8gJiZcbiAgICAgICAgICAgICEoKGNoYXIgPj0gMHhGRjFBIC8qIGZ1bGx3aWR0aCBjb2xvbiAqLyAmJiBjaGFyIDw9IDB4RkYxRSkgLyogZnVsbHdpZHRoIGdyZWF0ZXItdGhhbiBzaWduICovKSAmJlxuICAgICAgICAgICAgY2hhciAhPT0gMHhGRjNCIC8qIGZ1bGx3aWR0aCBsZWZ0IHNxdWFyZSBicmFja2V0ICovICYmXG4gICAgICAgICAgICBjaGFyICE9PSAweEZGM0QgLyogZnVsbHdpZHRoIHJpZ2h0IHNxdWFyZSBicmFja2V0ICovICYmXG4gICAgICAgICAgICBjaGFyICE9PSAweEZGM0YgLyogZnVsbHdpZHRoIGxvdyBsaW5lICovICYmXG4gICAgICAgICAgICAhKGNoYXIgPj0gMHhGRjVCIC8qIGZ1bGx3aWR0aCBsZWZ0IGN1cmx5IGJyYWNrZXQgKi8gJiYgY2hhciA8PSAweEZGREYpICYmXG4gICAgICAgICAgICBjaGFyICE9PSAweEZGRTMgLyogZnVsbHdpZHRoIG1hY3JvbiAqLyAmJlxuICAgICAgICAgICAgIShjaGFyID49IDB4RkZFOCAvKiBoYWxmd2lkdGggZm9ybXMgbGlnaHQgdmVydGljYWwgKi8gJiYgY2hhciA8PSAweEZGRUYpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNDaGFyWydTbWFsbCBGb3JtIFZhcmlhbnRzJ10oY2hhcikpIHtcbiAgICAgICAgaWYgKCEoKGNoYXIgPj0gMHhGRTU4IC8qIHNtYWxsIGVtIGRhc2ggKi8gJiYgY2hhciA8PSAweEZFNUUpIC8qIHNtYWxsIHJpZ2h0IHRvcnRvaXNlIHNoZWxsIGJyYWNrZXQgKi8pICYmXG4gICAgICAgICAgICAhKChjaGFyID49IDB4RkU2MyAvKiBzbWFsbCBoeXBoZW4tbWludXMgKi8gJiYgY2hhciA8PSAweEZFNjYpIC8qIHNtYWxsIGVxdWFscyBzaWduICovKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzQ2hhclsnVW5pZmllZCBDYW5hZGlhbiBBYm9yaWdpbmFsIFN5bGxhYmljcyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydVbmlmaWVkIENhbmFkaWFuIEFib3JpZ2luYWwgU3lsbGFiaWNzIEV4dGVuZGVkJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ1ZlcnRpY2FsIEZvcm1zJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ1lpamluZyBIZXhhZ3JhbSBTeW1ib2xzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ1lpIFN5bGxhYmxlcyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydZaSBSYWRpY2FscyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIFVuaWNvZGUgY29kZXBvaW50IGlkZW50aWZpZXMgYSBjaGFyYWN0ZXIgd2l0aFxuICogbmV1dHJhbCBvcmllbnRhdGlvbi5cbiAqXG4gKiBBIGNoYXJhY3RlciBoYXMgbmV1dHJhbCBvcmllbnRhdGlvbiBpZiBpdCBtYXkgYmUgZHJhd24gcm90YXRlZCBvciB1bnJvdGF0ZWRcbiAqIHdoZW4gdGhlIGxpbmUgaXMgb3JpZW50ZWQgdmVydGljYWxseSwgZGVwZW5kaW5nIG9uIHRoZSBvcmllbnRhdGlvbiBvZiB0aGVcbiAqIGFkamFjZW50IGNoYXJhY3RlcnMuIEZvciBleGFtcGxlLCBhbG9uZyBhIHZlcnRpY2xseSBvcmllbnRlZCBsaW5lLCB0aGUgdnVsZ2FyXG4gKiBmcmFjdGlvbiDDgsK9IGlzIGRyYXduIHVwcmlnaHQgYW1vbmcgQ2hpbmVzZSBjaGFyYWN0ZXJzIGJ1dCByb3RhdGVkIGFtb25nIExhdGluXG4gKiBsZXR0ZXJzLiBBIG5ldXRyYWxseSBvcmllbnRlZCBjaGFyYWN0ZXIgZG9lcyBub3QgaW5mbHVlbmNlIHdoZXRoZXIgYW5cbiAqIGFkamFjZW50IGNoYXJhY3RlciBpcyBkcmF3biB1cHJpZ2h0IG9yIHJvdGF0ZWQuXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhckhhc05ldXRyYWxWZXJ0aWNhbE9yaWVudGF0aW9uKGNoYXI6IG51bWJlcikge1xuICAgIGlmIChpc0NoYXJbJ0xhdGluLTEgU3VwcGxlbWVudCddKGNoYXIpKSB7XG4gICAgICAgIGlmIChjaGFyID09PSAweDAwQTcgLyogc2VjdGlvbiBzaWduICovIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDAwQTkgLyogY29weXJpZ2h0IHNpZ24gKi8gfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MDBBRSAvKiByZWdpc3RlcmVkIHNpZ24gKi8gfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MDBCMSAvKiBwbHVzLW1pbnVzIHNpZ24gKi8gfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MDBCQyAvKiB2dWxnYXIgZnJhY3Rpb24gb25lIHF1YXJ0ZXIgKi8gfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MDBCRCAvKiB2dWxnYXIgZnJhY3Rpb24gb25lIGhhbGYgKi8gfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MDBCRSAvKiB2dWxnYXIgZnJhY3Rpb24gdGhyZWUgcXVhcnRlcnMgKi8gfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MDBENyAvKiBtdWx0aXBsaWNhdGlvbiBzaWduICovIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDAwRjcgLyogZGl2aXNpb24gc2lnbiAqLykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzQ2hhclsnR2VuZXJhbCBQdW5jdHVhdGlvbiddKGNoYXIpKSB7XG4gICAgICAgIGlmIChjaGFyID09PSAweDIwMTYgLyogZG91YmxlIHZlcnRpY2FsIGxpbmUgKi8gfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MjAyMCAvKiBkYWdnZXIgKi8gfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MjAyMSAvKiBkb3VibGUgZGFnZ2VyICovIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDIwMzAgLyogcGVyIG1pbGxlIHNpZ24gKi8gfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MjAzMSAvKiBwZXIgdGVuIHRob3VzYW5kIHNpZ24gKi8gfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MjAzQiAvKiByZWZlcmVuY2UgbWFyayAqLyB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgyMDNDIC8qIGRvdWJsZSBleGNsYW1hdGlvbiBtYXJrICovIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDIwNDIgLyogYXN0ZXJpc20gKi8gfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MjA0NyAvKiBkb3VibGUgcXVlc3Rpb24gbWFyayAqLyB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgyMDQ4IC8qIHF1ZXN0aW9uIGV4Y2xhbWF0aW9uIG1hcmsgKi8gfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MjA0OSAvKiBleGNsYW1hdGlvbiBxdWVzdGlvbiBtYXJrICovIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDIwNTEgLyogdHdvIGFzdGVyaXNrcyBhbGlnbmVkIHZlcnRpY2FsbHkgKi8pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc0NoYXJbJ0xldHRlcmxpa2UgU3ltYm9scyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydOdW1iZXIgRm9ybXMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnTWlzY2VsbGFuZW91cyBUZWNobmljYWwnXShjaGFyKSkge1xuICAgICAgICBpZiAoKGNoYXIgPj0gMHgyMzAwIC8qIGRpYW1ldGVyIHNpZ24gKi8gJiYgY2hhciA8PSAweDIzMDcgLyogd2F2eSBsaW5lICovKSB8fFxuICAgICAgICAgICAgKGNoYXIgPj0gMHgyMzBDIC8qIGJvdHRvbSByaWdodCBjcm9wICovICYmIGNoYXIgPD0gMHgyMzFGIC8qIGJvdHRvbSByaWdodCBjb3JuZXIgKi8pIHx8XG4gICAgICAgICAgICAoY2hhciA+PSAweDIzMjQgLyogdXAgYXJyb3doZWFkIGJldHdlZW4gdHdvIGhvcml6b250YWwgYmFycyAqLyAmJiBjaGFyIDw9IDB4MjMyOCAvKiBrZXlib2FyZCAqLykgfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MjMyQiAvKiBlcmFzZSB0byB0aGUgbGVmdCAqLyB8fFxuICAgICAgICAgICAgKGNoYXIgPj0gMHgyMzdEIC8qIHNob3VsZGVyZWQgb3BlbiBib3ggKi8gJiYgY2hhciA8PSAweDIzOUEgLyogY2xlYXIgc2NyZWVuIHN5bWJvbCAqLykgfHxcbiAgICAgICAgICAgIChjaGFyID49IDB4MjNCRSAvKiBkZW50aXN0cnkgc3ltYm9sIGxpZ2h0IHZlcnRpY2FsIGFuZCB0b3AgcmlnaHQgKi8gJiYgY2hhciA8PSAweDIzQ0QgLyogc3F1YXJlIGZvb3QgKi8pIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDIzQ0YgLyogZWplY3Qgc3ltYm9sICovIHx8XG4gICAgICAgICAgICAoY2hhciA+PSAweDIzRDEgLyogbWV0cmljYWwgYnJldmUgKi8gJiYgY2hhciA8PSAweDIzREIgLyogZnVzZSAqLykgfHxcbiAgICAgICAgICAgIChjaGFyID49IDB4MjNFMiAvKiB3aGl0ZSB0cmFwZXppdW0gKi8gJiYgY2hhciA8PSAweDIzRkYpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNDaGFyWydDb250cm9sIFBpY3R1cmVzJ10oY2hhcikgJiYgY2hhciAhPT0gMHgyNDIzIC8qIG9wZW4gYm94ICovKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydPcHRpY2FsIENoYXJhY3RlciBSZWNvZ25pdGlvbiddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydFbmNsb3NlZCBBbHBoYW51bWVyaWNzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0dlb21ldHJpYyBTaGFwZXMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnTWlzY2VsbGFuZW91cyBTeW1ib2xzJ10oY2hhcikpIHtcbiAgICAgICAgaWYgKCEoKGNoYXIgPj0gMHgyNjFBIC8qIGJsYWNrIGxlZnQgcG9pbnRpbmcgaW5kZXggKi8gJiYgY2hhciA8PSAweDI2MUYpIC8qIHdoaXRlIGRvd24gcG9pbnRpbmcgaW5kZXggKi8pKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNDaGFyWydNaXNjZWxsYW5lb3VzIFN5bWJvbHMgYW5kIEFycm93cyddKGNoYXIpKSB7XG4gICAgICAgIGlmICgoY2hhciA+PSAweDJCMTIgLyogc3F1YXJlIHdpdGggdG9wIGhhbGYgYmxhY2sgKi8gJiYgY2hhciA8PSAweDJCMkYgLyogd2hpdGUgdmVydGljYWwgZWxsaXBzZSAqLykgfHxcbiAgICAgICAgICAgIChjaGFyID49IDB4MkI1MCAvKiB3aGl0ZSBtZWRpdW0gc3RhciAqLyAmJiBjaGFyIDw9IDB4MkI1OSAvKiBoZWF2eSBjaXJjbGVkIHNhbHRpcmUgKi8pIHx8XG4gICAgICAgICAgICAoY2hhciA+PSAweDJCQjggLyogdXB3YXJkcyB3aGl0ZSBhcnJvdyBmcm9tIGJhciB3aXRoIGhvcml6b250YWwgYmFyICovICYmIGNoYXIgPD0gMHgyQkVCKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzQ2hhclsnQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0thdGFrYW5hJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ1ByaXZhdGUgVXNlIEFyZWEnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnU21hbGwgRm9ybSBWYXJpYW50cyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3JtcyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcblxuICAgIGlmIChjaGFyID09PSAweDIyMUUgLyogaW5maW5pdHkgKi8gfHxcbiAgICAgICAgY2hhciA9PT0gMHgyMjM0IC8qIHRoZXJlZm9yZSAqLyB8fFxuICAgICAgICBjaGFyID09PSAweDIyMzUgLyogYmVjYXVzZSAqLyB8fFxuICAgICAgICAoY2hhciA+PSAweDI3MDAgLyogYmxhY2sgc2FmZXR5IHNjaXNzb3JzICovICYmIGNoYXIgPD0gMHgyNzY3IC8qIHJvdGF0ZWQgZmxvcmFsIGhlYXJ0IGJ1bGxldCAqLykgfHxcbiAgICAgICAgKGNoYXIgPj0gMHgyNzc2IC8qIGRpbmdiYXQgbmVnYXRpdmUgY2lyY2xlZCBkaWdpdCBvbmUgKi8gJiYgY2hhciA8PSAweDI3OTMgLyogZGluZ2JhdCBuZWdhdGl2ZSBjaXJjbGVkIHNhbnMtc2VyaWYgbnVtYmVyIHRlbiAqLykgfHxcbiAgICAgICAgY2hhciA9PT0gMHhGRkZDIC8qIG9iamVjdCByZXBsYWNlbWVudCBjaGFyYWN0ZXIgKi8gfHxcbiAgICAgICAgY2hhciA9PT0gMHhGRkZEIC8qIHJlcGxhY2VtZW50IGNoYXJhY3RlciAqLykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBVbmljb2RlIGNvZGVwb2ludCBpZGVudGlmaWVzIGEgY2hhcmFjdGVyIHdpdGhcbiAqIHJvdGF0ZWQgb3JpZW50YXRpb24uXG4gKlxuICogQSBjaGFyYWN0ZXIgaGFzIHJvdGF0ZWQgb3JpZW50YXRpb24gaWYgaXQgaXMgZHJhd24gcm90YXRlZCB3aGVuIHRoZSBsaW5lIGlzXG4gKiBvcmllbnRlZCB2ZXJ0aWNhbGx5LCBldmVuIGlmIGJvdGggYWRqYWNlbnQgY2hhcmFjdGVycyBhcmUgdXByaWdodC4gRm9yXG4gKiBleGFtcGxlLCBhIExhdGluIGxldHRlciBpcyBkcmF3biByb3RhdGVkIGFsb25nIGEgdmVydGljYWwgbGluZS4gQSByb3RhdGVkXG4gKiBjaGFyYWN0ZXIgY2F1c2VzIGFuIGFkamFjZW50IMOiwoDCnG5ldXRyYWzDosKAwp0gY2hhcmFjdGVyIHRvIGJlIGRyYXduIHJvdGF0ZWQgYXMgd2VsbC5cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFySGFzUm90YXRlZFZlcnRpY2FsT3JpZW50YXRpb24oY2hhcjogbnVtYmVyKSB7XG4gICAgcmV0dXJuICEoY2hhckhhc1VwcmlnaHRWZXJ0aWNhbE9yaWVudGF0aW9uKGNoYXIpIHx8XG4gICAgICAgICAgICAgY2hhckhhc05ldXRyYWxWZXJ0aWNhbE9yaWVudGF0aW9uKGNoYXIpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoYXJJbkNvbXBsZXhTaGFwaW5nU2NyaXB0KGNoYXI6IG51bWJlcikge1xuICAgIHJldHVybiBpc0NoYXJbJ0FyYWJpYyddKGNoYXIpIHx8XG4gICAgICAgICAgIGlzQ2hhclsnQXJhYmljIFN1cHBsZW1lbnQnXShjaGFyKSB8fFxuICAgICAgICAgICBpc0NoYXJbJ0FyYWJpYyBFeHRlbmRlZC1BJ10oY2hhcikgfHxcbiAgICAgICAgICAgaXNDaGFyWydBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUEnXShjaGFyKSB8fFxuICAgICAgICAgICBpc0NoYXJbJ0FyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQiddKGNoYXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hhckluUlRMU2NyaXB0KGNoYXI6IG51bWJlcikge1xuICAgIC8vIE1haW4gYmxvY2tzIGZvciBIZWJyZXcsIEFyYWJpYywgVGhhYW5hIGFuZCBvdGhlciBSVEwgc2NyaXB0c1xuICAgIHJldHVybiAoY2hhciA+PSAweDA1OTAgJiYgY2hhciA8PSAweDA4RkYpIHx8XG4gICAgICAgIGlzQ2hhclsnQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1BJ10oY2hhcikgfHxcbiAgICAgICAgaXNDaGFyWydBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUInXShjaGFyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoYXJJblN1cHBvcnRlZFNjcmlwdChjaGFyOiBudW1iZXIsIGNhblJlbmRlclJUTDogYm9vbGVhbikge1xuICAgIC8vIFRoaXMgaXMgYSByb3VnaCBoZXVyaXN0aWM6IHdoZXRoZXIgd2UgXCJjYW4gcmVuZGVyXCIgYSBzY3JpcHRcbiAgICAvLyBhY3R1YWxseSBkZXBlbmRzIG9uIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBmb250IGJlaW5nIHVzZWRcbiAgICAvLyBhbmQgd2hldGhlciBkaWZmZXJlbmNlcyBmcm9tIHRoZSBpZGVhbCByZW5kZXJpbmcgYXJlIGNvbnNpZGVyZWRcbiAgICAvLyBzZW1hbnRpY2FsbHkgc2lnbmlmaWNhbnQuXG5cbiAgICAvLyBFdmVuIGluIExhdGluIHNjcmlwdCwgd2UgXCJjYW4ndCByZW5kZXJcIiBjb21iaW5hdGlvbnMgc3VjaCBhcyB0aGUgZmlcbiAgICAvLyBsaWdhdHVyZSwgYnV0IHdlIGRvbid0IGNvbnNpZGVyIHRoYXQgc2VtYW50aWNhbGx5IHNpZ25pZmljYW50LlxuICAgIGlmICghY2FuUmVuZGVyUlRMICYmIGNoYXJJblJUTFNjcmlwdChjaGFyKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICgoY2hhciA+PSAweDA5MDAgJiYgY2hhciA8PSAweDBERkYpIHx8XG4gICAgICAgIC8vIE1haW4gYmxvY2tzIGZvciBJbmRpYyBzY3JpcHRzIGFuZCBTaW5oYWxhXG4gICAgICAgIChjaGFyID49IDB4MEYwMCAmJiBjaGFyIDw9IDB4MTA5RikgfHxcbiAgICAgICAgLy8gTWFpbiBibG9ja3MgZm9yIFRpYmV0YW4gYW5kIE15YW5tYXJcbiAgICAgICAgaXNDaGFyWydLaG1lciddKGNoYXIpKSB7XG4gICAgICAgIC8vIFRoZXNlIGJsb2NrcyBjb3ZlciBjb21tb24gc2NyaXB0cyB0aGF0IHJlcXVpcmVcbiAgICAgICAgLy8gY29tcGxleCB0ZXh0IHNoYXBpbmcsIGJhc2VkIG9uIHVuaWNvZGUgc2NyaXB0IG1ldGFkYXRhOlxuICAgICAgICAvLyBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9zL2NsZHIvdHJ1bmsvY29tbW9uL3Byb3BlcnRpZXMvc2NyaXB0TWV0YWRhdGEudHh0XG4gICAgICAgIC8vIHdoZXJlIFwiV2ViIFJhbmsgPD0gMzJcIiBcIlNoYXBpbmcgUmVxdWlyZWQgPSBZRVNcIlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nQ29udGFpbnNSVExUZXh0KGNoYXJzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBmb3IgKGNvbnN0IGNoYXIgb2YgY2hhcnMpIHtcbiAgICAgICAgaWYgKGNoYXJJblJUTFNjcmlwdChjaGFyLmNoYXJDb2RlQXQoMCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZ0luU3VwcG9ydGVkU2NyaXB0KGNoYXJzOiBzdHJpbmcsIGNhblJlbmRlclJUTDogYm9vbGVhbikge1xuICAgIGZvciAoY29uc3QgY2hhciBvZiBjaGFycykge1xuICAgICAgICBpZiAoIWNoYXJJblN1cHBvcnRlZFNjcmlwdChjaGFyLmNoYXJDb2RlQXQoMCksIGNhblJlbmRlclJUTCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7RXZlbnQsIEV2ZW50ZWR9IGZyb20gJy4uL3V0aWwvZXZlbnRlZCc7XG5pbXBvcnQge2dldEFycmF5QnVmZmVyfSBmcm9tICcuLi91dGlsL2FqYXgnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vdXRpbC9icm93c2VyJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7aXNXb3JrZXJ9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5cbmNvbnN0IHN0YXR1cyA9IHtcbiAgICB1bmF2YWlsYWJsZTogJ3VuYXZhaWxhYmxlJywgLy8gTm90IGxvYWRlZFxuICAgIGRlZmVycmVkOiAnZGVmZXJyZWQnLCAvLyBUaGUgcGx1Z2luIFVSTCBoYXMgYmVlbiBzcGVjaWZpZWQsIGJ1dCBsb2FkaW5nIGhhcyBiZWVuIGRlZmVycmVkXG4gICAgbG9hZGluZzogJ2xvYWRpbmcnLCAvLyByZXF1ZXN0IGluLWZsaWdodFxuICAgIGxvYWRlZDogJ2xvYWRlZCcsXG4gICAgZXJyb3I6ICdlcnJvcidcbn07XG5cbmV4cG9ydCB0eXBlIFBsdWdpblN0YXRlID0ge1xuICAgIHBsdWdpblN0YXR1czogJFZhbHVlczx0eXBlb2Ygc3RhdHVzPjtcbiAgICBwbHVnaW5VUkw6ID9zdHJpbmdcbn07XG5cbnR5cGUgRXJyb3JDYWxsYmFjayA9IChlcnJvcjogP0Vycm9yKSA9PiB2b2lkO1xudHlwZSBQbHVnaW5TdGF0ZVN5bmNDYWxsYmFjayA9IChzdGF0ZTogUGx1Z2luU3RhdGUpID0+IHZvaWQ7XG5sZXQgX2NvbXBsZXRpb25DYWxsYmFjayA9IG51bGw7XG5cbi8vVmFyaWFibGVzIGRlZmluaW5nIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBwbHVnaW5cbmxldCBwbHVnaW5TdGF0dXMgPSBzdGF0dXMudW5hdmFpbGFibGU7XG5sZXQgcGx1Z2luVVJMID0gbnVsbDtcblxuZXhwb3J0IGNvbnN0IHRyaWdnZXJQbHVnaW5Db21wbGV0aW9uRXZlbnQgPSBmdW5jdGlvbihlcnJvcjogP0Vycm9yKSB7XG4gICAgLy8gTmV0d29ya0Vycm9yJ3MgYXJlIG5vdCBjb3JyZWN0bHkgcmVmbGVjdGVkIGJ5IHRoZSBwbHVnaW4gc3RhdHVzIHdoaWNoIHByZXZlbnRzIHJlbG9hZGluZyBwbHVnaW5cbiAgICBpZiAoZXJyb3IgJiYgdHlwZW9mIGVycm9yID09PSAnc3RyaW5nJyAmJiBlcnJvci5pbmRleE9mKCdOZXR3b3JrRXJyb3InKSA+IC0xKSB7XG4gICAgICAgIHBsdWdpblN0YXR1cyA9IHN0YXR1cy5lcnJvcjtcbiAgICB9XG5cbiAgICBpZiAoX2NvbXBsZXRpb25DYWxsYmFjaykge1xuICAgICAgICBfY29tcGxldGlvbkNhbGxiYWNrKGVycm9yKTtcbiAgICB9XG59O1xuXG5mdW5jdGlvbiBzZW5kUGx1Z2luU3RhdGVUb1dvcmtlcigpIHtcbiAgICBldmVudGVkLmZpcmUobmV3IEV2ZW50KCdwbHVnaW5TdGF0ZUNoYW5nZScsIHtwbHVnaW5TdGF0dXMsIHBsdWdpblVSTH0pKTtcbn1cblxuZXhwb3J0IGNvbnN0IGV2ZW50ZWQgPSBuZXcgRXZlbnRlZCgpO1xuXG5leHBvcnQgY29uc3QgZ2V0UlRMVGV4dFBsdWdpblN0YXR1cyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcGx1Z2luU3RhdHVzO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlZ2lzdGVyRm9yUGx1Z2luU3RhdGVDaGFuZ2UgPSBmdW5jdGlvbihjYWxsYmFjazogUGx1Z2luU3RhdGVTeW5jQ2FsbGJhY2spIHtcbiAgICAvLyBEbyBhbiBpbml0aWFsIHN5bmMgb2YgdGhlIHN0YXRlXG4gICAgY2FsbGJhY2soe3BsdWdpblN0YXR1cywgcGx1Z2luVVJMfSk7XG4gICAgLy8gTGlzdGVuIGZvciBhbGwgZnV0dXJlIHN0YXRlIGNoYW5nZXNcbiAgICBldmVudGVkLm9uKCdwbHVnaW5TdGF0ZUNoYW5nZScsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gY2FsbGJhY2s7XG59O1xuXG5leHBvcnQgY29uc3QgY2xlYXJSVExUZXh0UGx1Z2luID0gZnVuY3Rpb24oKSB7XG4gICAgcGx1Z2luU3RhdHVzID0gc3RhdHVzLnVuYXZhaWxhYmxlO1xuICAgIHBsdWdpblVSTCA9IG51bGw7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0UlRMVGV4dFBsdWdpbiA9IGZ1bmN0aW9uKHVybDogc3RyaW5nLCBjYWxsYmFjazogP0Vycm9yQ2FsbGJhY2ssIGRlZmVycmVkOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBpZiAocGx1Z2luU3RhdHVzID09PSBzdGF0dXMuZGVmZXJyZWQgfHwgcGx1Z2luU3RhdHVzID09PSBzdGF0dXMubG9hZGluZyB8fCBwbHVnaW5TdGF0dXMgPT09IHN0YXR1cy5sb2FkZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZXRSVExUZXh0UGx1Z2luIGNhbm5vdCBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuJyk7XG4gICAgfVxuICAgIHBsdWdpblVSTCA9IGJyb3dzZXIucmVzb2x2ZVVSTCh1cmwpO1xuICAgIHBsdWdpblN0YXR1cyA9IHN0YXR1cy5kZWZlcnJlZDtcbiAgICBfY29tcGxldGlvbkNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgc2VuZFBsdWdpblN0YXRlVG9Xb3JrZXIoKTtcblxuICAgIC8vU3RhcnQgZG93bmxvYWRpbmcgdGhlIHBsdWdpbiBpbW1lZGlhdGVseSBpZiBub3QgaW50ZW5kaW5nIHRvIGxhenktbG9hZFxuICAgIGlmICghZGVmZXJyZWQpIHtcbiAgICAgICAgZG93bmxvYWRSVExUZXh0UGx1Z2luKCk7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGRvd25sb2FkUlRMVGV4dFBsdWdpbiA9IGZ1bmN0aW9uKCkge1xuICAgIGlmIChwbHVnaW5TdGF0dXMgIT09IHN0YXR1cy5kZWZlcnJlZCB8fCAhcGx1Z2luVVJMKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncnRsLXRleHQtcGx1Z2luIGNhbm5vdCBiZSBkb3dubG9hZGVkIHVubGVzcyBhIHBsdWdpblVSTCBpcyBzcGVjaWZpZWQnKTtcbiAgICB9XG4gICAgcGx1Z2luU3RhdHVzID0gc3RhdHVzLmxvYWRpbmc7XG4gICAgc2VuZFBsdWdpblN0YXRlVG9Xb3JrZXIoKTtcbiAgICBpZiAocGx1Z2luVVJMKSB7XG4gICAgICAgIGdldEFycmF5QnVmZmVyKHt1cmw6IHBsdWdpblVSTH0sIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdHJpZ2dlclBsdWdpbkNvbXBsZXRpb25FdmVudChlcnJvcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBsdWdpblN0YXR1cyA9IHN0YXR1cy5sb2FkZWQ7XG4gICAgICAgICAgICAgICAgc2VuZFBsdWdpblN0YXRlVG9Xb3JrZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHBsdWdpbjoge1xuICAgIGFwcGx5QXJhYmljU2hhcGluZzogP0Z1bmN0aW9uLFxuICAgIHByb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dDogPyhzdHJpbmcsIEFycmF5PG51bWJlcj4pID0+IEFycmF5PHN0cmluZz4sXG4gICAgcHJvY2Vzc1N0eWxlZEJpZGlyZWN0aW9uYWxUZXh0OiA/KHN0cmluZywgQXJyYXk8bnVtYmVyPiwgQXJyYXk8bnVtYmVyPikgPT4gQXJyYXk8W3N0cmluZywgQXJyYXk8bnVtYmVyPl0+LFxuICAgIGlzTG9hZGVkOiAoKSA9PiBib29sZWFuLFxuICAgIGlzTG9hZGluZzogKCkgPT4gYm9vbGVhbixcbiAgICBzZXRTdGF0ZTogKHN0YXRlOiBQbHVnaW5TdGF0ZSkgPT4gdm9pZCxcbiAgICBpc1BhcnNlZDogKCkgPT4gYm9vbGVhbixcbiAgICBnZXRQbHVnaW5VUkw6ICgpID0+ID9zdHJpbmdcbn0gPSB7XG4gICAgYXBwbHlBcmFiaWNTaGFwaW5nOiBudWxsLFxuICAgIHByb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dDogbnVsbCxcbiAgICBwcm9jZXNzU3R5bGVkQmlkaXJlY3Rpb25hbFRleHQ6IG51bGwsXG4gICAgaXNMb2FkZWQoKSB7XG4gICAgICAgIHJldHVybiBwbHVnaW5TdGF0dXMgPT09IHN0YXR1cy5sb2FkZWQgfHwgLy8gTWFpbiBUaHJlYWQ6IGxvYWRlZCBpZiB0aGUgY29tcGxldGlvbiBjYWxsYmFjayByZXR1cm5lZCBzdWNjZXNzZnVsbHlcbiAgICAgICAgICAgIHBsdWdpbi5hcHBseUFyYWJpY1NoYXBpbmcgIT0gbnVsbDsgLy8gV2ViLXdvcmtlcjogbG9hZGVkIGlmIHRoZSBwbHVnaW4gZnVuY3Rpb25zIGhhdmUgYmVlbiBjb21waWxlZFxuICAgIH0sXG4gICAgaXNMb2FkaW5nKCkgeyAvLyBNYWluIFRocmVhZCBPbmx5OiBxdWVyeSB0aGUgbG9hZGluZyBzdGF0dXMsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmV0dXJuIHRoZSBjb3JyZWN0IHZhbHVlIGluIHRoZSB3b3JrZXIgY29udGV4dC5cbiAgICAgICAgcmV0dXJuIHBsdWdpblN0YXR1cyA9PT0gc3RhdHVzLmxvYWRpbmc7XG4gICAgfSxcbiAgICBzZXRTdGF0ZShzdGF0ZTogUGx1Z2luU3RhdGUpIHsgLy8gV29ya2VyIHRocmVhZCBvbmx5OiB0aGlzIHRlbGxzIHRoZSB3b3JrZXIgdGhyZWFkcyB0aGF0IHRoZSBwbHVnaW4gaXMgYXZhaWxhYmxlIG9uIHRoZSBNYWluIHRocmVhZFxuICAgICAgICBhc3NlcnQoaXNXb3JrZXIoKSwgJ0Nhbm5vdCBzZXQgdGhlIHN0YXRlIG9mIHRoZSBydGwtdGV4dC1wbHVnaW4gd2hlbiBub3QgaW4gdGhlIHdlYi13b3JrZXIgY29udGV4dCcpO1xuXG4gICAgICAgIHBsdWdpblN0YXR1cyA9IHN0YXRlLnBsdWdpblN0YXR1cztcbiAgICAgICAgcGx1Z2luVVJMID0gc3RhdGUucGx1Z2luVVJMO1xuICAgIH0sXG4gICAgaXNQYXJzZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGFzc2VydChpc1dvcmtlcigpLCAncnRsLXRleHQtcGx1Z2luIGlzIG9ubHkgcGFyc2VkIG9uIHRoZSB3b3JrZXItdGhyZWFkcycpO1xuXG4gICAgICAgIHJldHVybiBwbHVnaW4uYXBwbHlBcmFiaWNTaGFwaW5nICE9IG51bGwgJiZcbiAgICAgICAgICAgIHBsdWdpbi5wcm9jZXNzQmlkaXJlY3Rpb25hbFRleHQgIT0gbnVsbCAmJlxuICAgICAgICAgICAgcGx1Z2luLnByb2Nlc3NTdHlsZWRCaWRpcmVjdGlvbmFsVGV4dCAhPSBudWxsO1xuICAgIH0sXG4gICAgZ2V0UGx1Z2luVVJMKCk6ID9zdHJpbmcge1xuICAgICAgICBhc3NlcnQoaXNXb3JrZXIoKSwgJ3J0bC10ZXh0LXBsdWdpbiB1cmwgY2FuIG9ubHkgYmUgcXVlcmllZCBmcm9tIHRoZSB3b3JrZXIgdGhyZWFkcycpO1xuICAgICAgICByZXR1cm4gcGx1Z2luVVJMO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBsYXp5TG9hZFJUTFRleHRQbHVnaW4gPSBmdW5jdGlvbigpIHtcbiAgICBpZiAoIXBsdWdpbi5pc0xvYWRpbmcoKSAmJlxuICAgICAgICAhcGx1Z2luLmlzTG9hZGVkKCkgJiZcbiAgICAgICAgZ2V0UlRMVGV4dFBsdWdpblN0YXR1cygpID09PSAnZGVmZXJyZWQnXG4gICAgKSB7XG4gICAgICAgIGRvd25sb2FkUlRMVGV4dFBsdWdpbigpO1xuICAgIH1cbn07XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgWm9vbUhpc3RvcnkgZnJvbSAnLi96b29tX2hpc3RvcnknO1xuaW1wb3J0IHtpc1N0cmluZ0luU3VwcG9ydGVkU2NyaXB0fSBmcm9tICcuLi91dGlsL3NjcmlwdF9kZXRlY3Rpb24nO1xuaW1wb3J0IHtwbHVnaW4gYXMgcnRsVGV4dFBsdWdpbn0gZnJvbSAnLi4vc291cmNlL3J0bF90ZXh0X3BsdWdpbic7XG5cbmltcG9ydCB0eXBlIHtUcmFuc2l0aW9uU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIENyb3NzZmFkZVBhcmFtZXRlcnMgPSB7XG4gICAgZnJvbVNjYWxlOiBudW1iZXIsXG4gICAgdG9TY2FsZTogbnVtYmVyLFxuICAgIHQ6IG51bWJlclxufTtcblxuY2xhc3MgRXZhbHVhdGlvblBhcmFtZXRlcnMge1xuICAgIHpvb206IG51bWJlcjtcbiAgICBub3c6IG51bWJlcjtcbiAgICBmYWRlRHVyYXRpb246IG51bWJlcjtcbiAgICB6b29tSGlzdG9yeTogWm9vbUhpc3Rvcnk7XG4gICAgdHJhbnNpdGlvbjogVHJhbnNpdGlvblNwZWNpZmljYXRpb247XG5cbiAgICAvLyBcIm9wdGlvbnNcIiBtYXkgYWxzbyBiZSBhbm90aGVyIEV2YWx1YXRpb25QYXJhbWV0ZXJzIHRvIGNvcHksIHNlZSBDcm9zc0ZhZGVkUHJvcGVydHkucG9zc2libHlFdmFsdWF0ZVxuICAgIGNvbnN0cnVjdG9yKHpvb206IG51bWJlciwgb3B0aW9ucz86ICopIHtcbiAgICAgICAgdGhpcy56b29tID0gem9vbTtcblxuICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5ub3cgPSBvcHRpb25zLm5vdztcbiAgICAgICAgICAgIHRoaXMuZmFkZUR1cmF0aW9uID0gb3B0aW9ucy5mYWRlRHVyYXRpb247XG4gICAgICAgICAgICB0aGlzLnpvb21IaXN0b3J5ID0gb3B0aW9ucy56b29tSGlzdG9yeTtcbiAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvbiA9IG9wdGlvbnMudHJhbnNpdGlvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubm93ID0gMDtcbiAgICAgICAgICAgIHRoaXMuZmFkZUR1cmF0aW9uID0gMDtcbiAgICAgICAgICAgIHRoaXMuem9vbUhpc3RvcnkgPSBuZXcgWm9vbUhpc3RvcnkoKTtcbiAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvbiA9IHt9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNTdXBwb3J0ZWRTY3JpcHQoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGlzU3RyaW5nSW5TdXBwb3J0ZWRTY3JpcHQoc3RyLCBydGxUZXh0UGx1Z2luLmlzTG9hZGVkKCkpO1xuICAgIH1cblxuICAgIGNyb3NzRmFkaW5nRmFjdG9yKCkge1xuICAgICAgICBpZiAodGhpcy5mYWRlRHVyYXRpb24gPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgubWluKCh0aGlzLm5vdyAtIHRoaXMuem9vbUhpc3RvcnkubGFzdEludGVnZXJab29tVGltZSkgLyB0aGlzLmZhZGVEdXJhdGlvbiwgMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRDcm9zc2ZhZGVQYXJhbWV0ZXJzKCk6IENyb3NzZmFkZVBhcmFtZXRlcnMge1xuICAgICAgICBjb25zdCB6ID0gdGhpcy56b29tO1xuICAgICAgICBjb25zdCBmcmFjdGlvbiA9IHogLSBNYXRoLmZsb29yKHopO1xuICAgICAgICBjb25zdCB0ID0gdGhpcy5jcm9zc0ZhZGluZ0ZhY3RvcigpO1xuXG4gICAgICAgIHJldHVybiB6ID4gdGhpcy56b29tSGlzdG9yeS5sYXN0SW50ZWdlclpvb20gP1xuICAgICAgICAgICAge2Zyb21TY2FsZTogMiwgdG9TY2FsZTogMSwgdDogZnJhY3Rpb24gKyAoMSAtIGZyYWN0aW9uKSAqIHR9IDpcbiAgICAgICAgICAgIHtmcm9tU2NhbGU6IDAuNSwgdG9TY2FsZTogMSwgdDogMSAtICgxIC0gdCkgKiBmcmFjdGlvbn07XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBFdmFsdWF0aW9uUGFyYW1ldGVycztcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7Y2xvbmUsIGV4dGVuZCwgZWFzZUN1YmljSW5PdXR9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgKiBhcyBpbnRlcnBvbGF0ZSBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvaW50ZXJwb2xhdGUnO1xuaW1wb3J0IHtub3JtYWxpemVQcm9wZXJ0eUV4cHJlc3Npb259IGZyb20gJy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbic7XG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL2NvbG9yJztcbmltcG9ydCB7cmVnaXN0ZXJ9IGZyb20gJy4uL3V0aWwvd2ViX3dvcmtlcl90cmFuc2Zlcic7XG5pbXBvcnQgRXZhbHVhdGlvblBhcmFtZXRlcnMgZnJvbSAnLi9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuXG5pbXBvcnQgdHlwZSB7Q2Fub25pY2FsVGlsZUlEfSBmcm9tICcuLi9zb3VyY2UvdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSB7U3R5bGVQcm9wZXJ0eVNwZWNpZmljYXRpb259IGZyb20gJy4uL3N0eWxlLXNwZWMvc3R5bGUtc3BlYyc7XG5pbXBvcnQgdHlwZSB7XG4gICAgVHJhbnNpdGlvblNwZWNpZmljYXRpb24sXG4gICAgUHJvcGVydHlWYWx1ZVNwZWNpZmljYXRpb25cbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmltcG9ydCB0eXBlIHtcbiAgICBGZWF0dXJlLFxuICAgIEZlYXR1cmVTdGF0ZSxcbiAgICBTdHlsZVByb3BlcnR5RXhwcmVzc2lvbixcbiAgICBTb3VyY2VFeHByZXNzaW9uLFxuICAgIENvbXBvc2l0ZUV4cHJlc3Npb25cbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uJztcblxudHlwZSBUaW1lUG9pbnQgPSBudW1iZXI7XG5cbmV4cG9ydCB0eXBlIENyb3NzRmFkZWQ8VD4gPSB7XG4gICAgdG86IFQsXG4gICAgZnJvbTogVFxufTtcblxuLyoqXG4gKiBJbXBsZW1lbnRzIGEgbnVtYmVyIG9mIGNsYXNzZXMgdGhhdCBkZWZpbmUgc3RhdGUgYW5kIGJlaGF2aW9yIGZvciBwYWludCBhbmQgbGF5b3V0IHByb3BlcnRpZXMsIG1vc3RcbiAqIGltcG9ydGFudGx5IHRoZWlyIHJlc3BlY3RpdmUgZXZhbHVhdGlvbiBjaGFpbnM6XG4gKlxuICogICAgICAgVHJhbnNpdGlvbmFibGUgcGFpbnQgcHJvcGVydHkgdmFsdWVcbiAqICAgICDDosKGwpIgVHJhbnNpdGlvbmluZyBwYWludCBwcm9wZXJ0eSB2YWx1ZVxuICogICAgIMOiwobCkiBQb3NzaWJseSBldmFsdWF0ZWQgcGFpbnQgcHJvcGVydHkgdmFsdWVcbiAqICAgICDDosKGwpIgRnVsbHkgZXZhbHVhdGVkIHBhaW50IHByb3BlcnR5IHZhbHVlXG4gKlxuICogICAgICAgTGF5b3V0IHByb3BlcnR5IHZhbHVlXG4gKiAgICAgw6LChsKSIFBvc3NpYmx5IGV2YWx1YXRlZCBsYXlvdXQgcHJvcGVydHkgdmFsdWVcbiAqICAgICDDosKGwpIgRnVsbHkgZXZhbHVhdGVkIGxheW91dCBwcm9wZXJ0eSB2YWx1ZVxuICpcbiAqIEBtb2R1bGVcbiAqIEBwcml2YXRlXG4gKi9cblxuLyoqXG4gKiAgSW1wbGVtZW50YXRpb25zIG9mIHRoZSBgUHJvcGVydHlgIGludGVyZmFjZTpcbiAqXG4gKiAgKiBIb2xkIG1ldGFkYXRhIGFib3V0IGEgcHJvcGVydHkgdGhhdCdzIGluZGVwZW5kZW50IG9mIGFueSBzcGVjaWZpYyB2YWx1ZTogc3R1ZmYgbGlrZSB0aGUgdHlwZSBvZiB0aGUgdmFsdWUsXG4gKiAgICB0aGUgZGVmYXVsdCB2YWx1ZSwgZXRjLiBUaGlzIGNvbWVzIGZyb20gdGhlIHN0eWxlIHNwZWNpZmljYXRpb24gSlNPTi5cbiAqICAqIERlZmluZSBiZWhhdmlvciB0aGF0IG5lZWRzIHRvIGJlIHBvbHltb3JwaGljIGFjcm9zcyBkaWZmZXJlbnQgcHJvcGVydGllczogXCJwb3NzaWJseSBldmFsdWF0aW5nXCJcbiAqICAgIGFuIGlucHV0IHZhbHVlIChzZWUgYmVsb3cpLCBhbmQgaW50ZXJwb2xhdGluZyBiZXR3ZWVuIHR3byBwb3NzaWJseS1ldmFsdXRlZCB2YWx1ZXMuXG4gKlxuICogIFRoZSB0eXBlIGBUYCBpcyB0aGUgZnVsbHktZXZhbHVhdGVkIHZhbHVlIHR5cGUgKGUuZy4gYG51bWJlcmAsIGBzdHJpbmdgLCBgQ29sb3JgKS5cbiAqICBUaGUgdHlwZSBgUmAgaXMgdGhlIGludGVybWVkaWF0ZSBcInBvc3NpYmx5IGV2YWx1YXRlZFwiIHZhbHVlIHR5cGUuIFNlZSBiZWxvdy5cbiAqXG4gKiAgVGhlcmUgYXJlIHR3byBtYWluIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgaW50ZXJmYWNlIC0tIG9uZSBmb3IgcHJvcGVydGllcyB0aGF0IGFsbG93IGRhdGEtZHJpdmVuIHZhbHVlcyxcbiAqICBhbmQgb25lIGZvciBwcm9wZXJ0aWVzIHRoYXQgZG9uJ3QuIFRoZXJlIGFyZSBhIGZldyBcInNwZWNpYWwgY2FzZVwiIGltcGxlbWVudGF0aW9ucyBhcyB3ZWxsOiBvbmUgZm9yIHByb3BlcnRpZXNcbiAqICB3aGljaCBjcm9zcy1mYWRlIGJldHdlZW4gdHdvIHZhbHVlcyByYXRoZXIgdGhhbiBpbnRlcnBvbGF0aW5nLCBvbmUgZm9yIGBoZWF0bWFwLWNvbG9yYCBhbmQgYGxpbmUtZ3JhZGllbnRgLFxuICogIGFuZCBvbmUgZm9yIGBsaWdodC1wb3NpdGlvbmAuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm9wZXJ0eTxULCBSPiB7XG4gICAgc3BlY2lmaWNhdGlvbjogU3R5bGVQcm9wZXJ0eVNwZWNpZmljYXRpb247XG4gICAgcG9zc2libHlFdmFsdWF0ZSh2YWx1ZTogUHJvcGVydHlWYWx1ZTxULCBSPiwgcGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMsIGNhbm9uaWNhbD86IENhbm9uaWNhbFRpbGVJRCwgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPik6IFI7XG4gICAgaW50ZXJwb2xhdGUoYTogUiwgYjogUiwgdDogbnVtYmVyKTogUjtcbn1cblxuLyoqXG4gKiAgYFByb3BlcnR5VmFsdWVgIHJlcHJlc2VudHMgdGhlIHZhbHVlIHBhcnQgb2YgYSBwcm9wZXJ0eSBrZXktdmFsdWUgdW5pdC4gSXQncyB1c2VkIHRvIHJlcHJlc2VudCBib3RoXG4gKiAgcGFpbnQgYW5kIGxheW91dCBwcm9wZXJ0eSB2YWx1ZXMsIGFuZCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgb3Igbm90IHRoZWlyIHByb3BlcnR5IHN1cHBvcnRzIGRhdGEtZHJpdmVuXG4gKiAgZXhwcmVzc2lvbnMuXG4gKlxuICogIGBQcm9wZXJ0eVZhbHVlYCBzdG9yZXMgdGhlIHJhdyBpbnB1dCB2YWx1ZSBhcyBzZWVuIGluIGEgc3R5bGUgb3IgYSBydW50aW1lIHN0eWxpbmcgQVBJIGNhbGwsIGkuZS4gb25lIG9mIHRoZVxuICogIGZvbGxvd2luZzpcbiAqXG4gKiAgICAqIEEgY29uc3RhbnQgdmFsdWUgb2YgdGhlIHR5cGUgYXBwcm9wcmlhdGUgZm9yIHRoZSBwcm9wZXJ0eVxuICogICAgKiBBIGZ1bmN0aW9uIHdoaWNoIHByb2R1Y2VzIGEgdmFsdWUgb2YgdGhhdCB0eXBlIChidXQgZnVuY3Rpb25zIGFyZSBxdWFzaS1kZXByZWNhdGVkIGluIGZhdm9yIG9mIGV4cHJlc3Npb25zKVxuICogICAgKiBBbiBleHByZXNzaW9uIHdoaWNoIHByb2R1Y2VzIGEgdmFsdWUgb2YgdGhhdCB0eXBlXG4gKiAgICAqIFwidW5kZWZpbmVkXCIvXCJub3QgcHJlc2VudFwiLCBpbiB3aGljaCBjYXNlIHRoZSBwcm9wZXJ0eSBpcyBhc3N1bWVkIHRvIHRha2Ugb24gaXRzIGRlZmF1bHQgdmFsdWUuXG4gKlxuICogIEluIGFkZGl0aW9uIHRvIHN0b3JpbmcgdGhlIG9yaWdpbmFsIGlucHV0IHZhbHVlLCBgUHJvcGVydHlWYWx1ZWAgYWxzbyBzdG9yZXMgYSBub3JtYWxpemVkIHJlcHJlc2VudGF0aW9uLFxuICogIGVmZmVjdGl2ZWx5IHRyZWF0aW5nIGZ1bmN0aW9ucyBhcyBpZiB0aGV5IGFyZSBleHByZXNzaW9ucywgYW5kIGNvbnN0YW50IG9yIGRlZmF1bHQgdmFsdWVzIGFzIGlmIHRoZXkgYXJlXG4gKiAgKGNvbnN0YW50KSBleHByZXNzaW9ucy5cbiAqXG4gKiAgQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIFByb3BlcnR5VmFsdWU8VCwgUj4ge1xuICAgIHByb3BlcnR5OiBQcm9wZXJ0eTxULCBSPjtcbiAgICB2YWx1ZTogUHJvcGVydHlWYWx1ZVNwZWNpZmljYXRpb248VD4gfCB2b2lkO1xuICAgIGV4cHJlc3Npb246IFN0eWxlUHJvcGVydHlFeHByZXNzaW9uO1xuXG4gICAgY29uc3RydWN0b3IocHJvcGVydHk6IFByb3BlcnR5PFQsIFI+LCB2YWx1ZTogUHJvcGVydHlWYWx1ZVNwZWNpZmljYXRpb248VD4gfCB2b2lkKSB7XG4gICAgICAgIHRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBub3JtYWxpemVQcm9wZXJ0eUV4cHJlc3Npb24odmFsdWUgPT09IHVuZGVmaW5lZCA/IHByb3BlcnR5LnNwZWNpZmljYXRpb24uZGVmYXVsdCA6IHZhbHVlLCBwcm9wZXJ0eS5zcGVjaWZpY2F0aW9uKTtcbiAgICB9XG5cbiAgICBpc0RhdGFEcml2ZW4oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4cHJlc3Npb24ua2luZCA9PT0gJ3NvdXJjZScgfHwgdGhpcy5leHByZXNzaW9uLmtpbmQgPT09ICdjb21wb3NpdGUnO1xuICAgIH1cblxuICAgIHBvc3NpYmx5RXZhbHVhdGUocGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMsIGNhbm9uaWNhbD86IENhbm9uaWNhbFRpbGVJRCwgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPik6IFIge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eS5wb3NzaWJseUV2YWx1YXRlKHRoaXMsIHBhcmFtZXRlcnMsIGNhbm9uaWNhbCwgYXZhaWxhYmxlSW1hZ2VzKTtcbiAgICB9XG59XG5cbi8vIC0tLS0tLS0gVHJhbnNpdGlvbmFibGUgLS0tLS0tLVxuXG5leHBvcnQgdHlwZSBUcmFuc2l0aW9uUGFyYW1ldGVycyA9IHtcbiAgICBub3c6IFRpbWVQb2ludCxcbiAgICB0cmFuc2l0aW9uOiBUcmFuc2l0aW9uU3BlY2lmaWNhdGlvblxufTtcblxuLyoqXG4gKiBQYWludCBwcm9wZXJ0aWVzIGFyZSBfdHJhbnNpdGlvbmFibGVfOiB0aGV5IGNhbiBjaGFuZ2UgaW4gYSBmbHVpZCBtYW5uZXIsIGludGVycG9sYXRpbmcgb3IgY3Jvc3MtZmFkaW5nIGJldHdlZW5cbiAqIG9sZCBhbmQgbmV3IHZhbHVlLiBUaGUgZHVyYXRpb24gb2YgdGhlIHRyYW5zaXRpb24sIGFuZCB0aGUgZGVsYXkgYmVmb3JlIGl0IGJlZ2lucywgaXMgY29uZmlndXJhYmxlLlxuICpcbiAqIGBUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWVgIGlzIGEgY29tcG9zaXRpb25hbCBjbGFzcyB0aGF0IHN0b3JlcyBib3RoIHRoZSBwcm9wZXJ0eSB2YWx1ZSBhbmQgdGhhdCB0cmFuc2l0aW9uXG4gKiBjb25maWd1cmF0aW9uLlxuICpcbiAqIEEgYFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZWAgY2FuIGNhbGN1bGF0ZSB0aGUgbmV4dCBzdGVwIGluIHRoZSBldmFsdWF0aW9uIGNoYWluIGZvciBwYWludCBwcm9wZXJ0eSB2YWx1ZXM6XG4gKiBgVHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZTxULCBSPiB7XG4gICAgcHJvcGVydHk6IFByb3BlcnR5PFQsIFI+O1xuICAgIHZhbHVlOiBQcm9wZXJ0eVZhbHVlPFQsIFI+O1xuICAgIHRyYW5zaXRpb246IFRyYW5zaXRpb25TcGVjaWZpY2F0aW9uIHwgdm9pZDtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BlcnR5OiBQcm9wZXJ0eTxULCBSPikge1xuICAgICAgICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7XG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXcgUHJvcGVydHlWYWx1ZShwcm9wZXJ0eSwgdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICB0cmFuc2l0aW9uZWQocGFyYW1ldGVyczogVHJhbnNpdGlvblBhcmFtZXRlcnMsXG4gICAgICAgICAgICAgICAgIHByaW9yOiBUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZTxULCBSPik6IFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlPFQsIFI+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZSh0aGlzLnByb3BlcnR5LCB0aGlzLnZhbHVlLCBwcmlvciwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgICAgICAgZXh0ZW5kKHt9LCBwYXJhbWV0ZXJzLnRyYW5zaXRpb24sIHRoaXMudHJhbnNpdGlvbiksIHBhcmFtZXRlcnMubm93KTtcbiAgICB9XG5cbiAgICB1bnRyYW5zaXRpb25lZCgpOiBUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZTxULCBSPiB7XG4gICAgICAgIHJldHVybiBuZXcgVHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWUodGhpcy5wcm9wZXJ0eSwgdGhpcy52YWx1ZSwgbnVsbCwge30sIDApOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgfVxufVxuXG4vKipcbiAqIEEgaGVscGVyIHR5cGU6IGdpdmVuIGFuIG9iamVjdCB0eXBlIGBQcm9wZXJ0aWVzYCB3aG9zZSB2YWx1ZXMgYXJlIGVhY2ggb2YgdHlwZSBgUHJvcGVydHk8VCwgUj5gLCBpdCBjYWxjdWxhdGVzXG4gKiBhbiBvYmplY3QgdHlwZSB3aXRoIHRoZSBzYW1lIGtleXMgYW5kIHZhbHVlcyBvZiB0eXBlIGBUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWU8VCwgUj5gLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbnR5cGUgVHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlczxQcm9wczogT2JqZWN0PlxuICAgID0gJEV4YWN0PCRPYmpNYXA8UHJvcHMsIDxULCBSPihwOiBQcm9wZXJ0eTxULCBSPikgPT4gVHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlPFQsIFI+Pj5cblxuLyoqXG4gKiBgVHJhbnNpdGlvbmFibGVgIHN0b3JlcyBhIG1hcCBvZiBhbGwgKHByb3BlcnR5IG5hbWUsIGBUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWVgKSBwYWlycyBmb3IgcGFpbnQgcHJvcGVydGllcyBvZiBhXG4gKiBnaXZlbiBsYXllciB0eXBlLiBJdCBjYW4gY2FsY3VsYXRlIHRoZSBgVHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVgcyBmb3IgYWxsIG9mIHRoZW0gYXQgb25jZSwgcHJvZHVjaW5nIGFcbiAqIGBUcmFuc2l0aW9uaW5nYCBpbnN0YW5jZSBmb3IgdGhlIHNhbWUgc2V0IG9mIHByb3BlcnRpZXMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIFRyYW5zaXRpb25hYmxlPFByb3BzOiBPYmplY3Q+IHtcbiAgICBfcHJvcGVydGllczogUHJvcGVydGllczxQcm9wcz47XG4gICAgX3ZhbHVlczogVHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlczxQcm9wcz47XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiBQcm9wZXJ0aWVzPFByb3BzPikge1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgICAgICAgdGhpcy5fdmFsdWVzID0gKE9iamVjdC5jcmVhdGUocHJvcGVydGllcy5kZWZhdWx0VHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlcyk6IGFueSk7XG4gICAgfVxuXG4gICAgZ2V0VmFsdWU8Uzogc3RyaW5nLCBUPihuYW1lOiBTKTogUHJvcGVydHlWYWx1ZVNwZWNpZmljYXRpb248VD4gfCB2b2lkIHtcbiAgICAgICAgcmV0dXJuIGNsb25lKHRoaXMuX3ZhbHVlc1tuYW1lXS52YWx1ZS52YWx1ZSk7XG4gICAgfVxuXG4gICAgc2V0VmFsdWU8Uzogc3RyaW5nLCBUPihuYW1lOiBTLCB2YWx1ZTogUHJvcGVydHlWYWx1ZVNwZWNpZmljYXRpb248VD4gfCB2b2lkKSB7XG4gICAgICAgIGlmICghdGhpcy5fdmFsdWVzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZXNbbmFtZV0gPSBuZXcgVHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlKHRoaXMuX3ZhbHVlc1tuYW1lXS5wcm9wZXJ0eSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGRvIG5vdCBfcmVtb3ZlXyBhbiBvd24gcHJvcGVydHkgaW4gdGhlIGNhc2Ugd2hlcmUgYSB2YWx1ZSBpcyBiZWluZyByZXNldFxuICAgICAgICAvLyB0byB0aGUgZGVmYXVsdDogdGhlIHRyYW5zaXRpb24gbWlnaHQgc3RpbGwgYmUgbm9uLWRlZmF1bHQuXG4gICAgICAgIHRoaXMuX3ZhbHVlc1tuYW1lXS52YWx1ZSA9IG5ldyBQcm9wZXJ0eVZhbHVlKHRoaXMuX3ZhbHVlc1tuYW1lXS5wcm9wZXJ0eSwgdmFsdWUgPT09IG51bGwgPyB1bmRlZmluZWQgOiBjbG9uZSh2YWx1ZSkpO1xuICAgIH1cblxuICAgIGdldFRyYW5zaXRpb248Uzogc3RyaW5nPihuYW1lOiBTKTogVHJhbnNpdGlvblNwZWNpZmljYXRpb24gfCB2b2lkIHtcbiAgICAgICAgcmV0dXJuIGNsb25lKHRoaXMuX3ZhbHVlc1tuYW1lXS50cmFuc2l0aW9uKTtcbiAgICB9XG5cbiAgICBzZXRUcmFuc2l0aW9uPFM6IHN0cmluZz4obmFtZTogUywgdmFsdWU6IFRyYW5zaXRpb25TcGVjaWZpY2F0aW9uIHwgdm9pZCkge1xuICAgICAgICBpZiAoIXRoaXMuX3ZhbHVlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICAgICAgdGhpcy5fdmFsdWVzW25hbWVdID0gbmV3IFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZSh0aGlzLl92YWx1ZXNbbmFtZV0ucHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3ZhbHVlc1tuYW1lXS50cmFuc2l0aW9uID0gY2xvbmUodmFsdWUpIHx8IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogYW55ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgT2JqZWN0LmtleXModGhpcy5fdmFsdWVzKSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFZhbHVlKHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB0cmFuc2l0aW9uID0gdGhpcy5nZXRUcmFuc2l0aW9uKHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRbYCR7cHJvcGVydHl9LXRyYW5zaXRpb25gXSA9IHRyYW5zaXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB0cmFuc2l0aW9uZWQocGFyYW1ldGVyczogVHJhbnNpdGlvblBhcmFtZXRlcnMsIHByaW9yOiBUcmFuc2l0aW9uaW5nPFByb3BzPik6IFRyYW5zaXRpb25pbmc8UHJvcHM+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IFRyYW5zaXRpb25pbmcodGhpcy5fcHJvcGVydGllcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBPYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpKSB7XG4gICAgICAgICAgICByZXN1bHQuX3ZhbHVlc1twcm9wZXJ0eV0gPSB0aGlzLl92YWx1ZXNbcHJvcGVydHldLnRyYW5zaXRpb25lZChwYXJhbWV0ZXJzLCBwcmlvci5fdmFsdWVzW3Byb3BlcnR5XSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB1bnRyYW5zaXRpb25lZCgpOiBUcmFuc2l0aW9uaW5nPFByb3BzPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBUcmFuc2l0aW9uaW5nKHRoaXMuX3Byb3BlcnRpZXMpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgT2JqZWN0LmtleXModGhpcy5fdmFsdWVzKSkge1xuICAgICAgICAgICAgcmVzdWx0Ll92YWx1ZXNbcHJvcGVydHldID0gdGhpcy5fdmFsdWVzW3Byb3BlcnR5XS51bnRyYW5zaXRpb25lZCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG4vLyAtLS0tLS0tIFRyYW5zaXRpb25pbmcgLS0tLS0tLVxuXG4vKipcbiAqIGBUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZWAgaW1wbGVtZW50cyB0aGUgZmlyc3Qgb2YgdHdvIGludGVybWVkaWF0ZSBzdGVwcyBpbiB0aGUgZXZhbHVhdGlvbiBjaGFpbiBvZiBhIHBhaW50XG4gKiBwcm9wZXJ0eSB2YWx1ZS4gSW4gdGhpcyBzdGVwLCB0cmFuc2l0aW9ucyBiZXR3ZWVuIG9sZCBhbmQgbmV3IHZhbHVlcyBhcmUgaGFuZGxlZDogYXMgbG9uZyBhcyB0aGUgdHJhbnNpdGlvbiBpcyBpblxuICogcHJvZ3Jlc3MsIGBUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZWAgbWFpbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBwcmlvciB2YWx1ZSwgYW5kIGludGVycG9sYXRlcyBiZXR3ZWVuIGl0IGFuZFxuICogdGhlIG5ldyB2YWx1ZSBiYXNlZCBvbiB0aGUgY3VycmVudCB0aW1lIGFuZCB0aGUgY29uZmlndXJlZCB0cmFuc2l0aW9uIGR1cmF0aW9uIGFuZCBkZWxheS4gVGhlIHByb2R1Y3QgaXMgdGhlIG5leHRcbiAqIHN0ZXAgaW4gdGhlIGV2YWx1YXRpb24gY2hhaW46IHRoZSBcInBvc3NpYmx5IGV2YWx1YXRlZFwiIHJlc3VsdCB0eXBlIGBSYC4gU2VlIGJlbG93IGZvciBtb3JlIG9uIHRoaXMgY29uY2VwdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZTxULCBSPiB7XG4gICAgcHJvcGVydHk6IFByb3BlcnR5PFQsIFI+O1xuICAgIHZhbHVlOiBQcm9wZXJ0eVZhbHVlPFQsIFI+O1xuICAgIHByaW9yOiA/VHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWU8VCwgUj47XG4gICAgYmVnaW46IFRpbWVQb2ludDtcbiAgICBlbmQ6IFRpbWVQb2ludDtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BlcnR5OiBQcm9wZXJ0eTxULCBSPixcbiAgICAgICAgICAgICAgICB2YWx1ZTogUHJvcGVydHlWYWx1ZTxULCBSPixcbiAgICAgICAgICAgICAgICBwcmlvcjogP1RyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlPFQsIFI+LFxuICAgICAgICAgICAgICAgIHRyYW5zaXRpb246IFRyYW5zaXRpb25TcGVjaWZpY2F0aW9uLFxuICAgICAgICAgICAgICAgIG5vdzogVGltZVBvaW50KSB7XG4gICAgICAgIHRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmJlZ2luID0gbm93ICsgdHJhbnNpdGlvbi5kZWxheSB8fCAwO1xuICAgICAgICB0aGlzLmVuZCA9IHRoaXMuYmVnaW4gKyB0cmFuc2l0aW9uLmR1cmF0aW9uIHx8IDA7XG4gICAgICAgIGlmIChwcm9wZXJ0eS5zcGVjaWZpY2F0aW9uLnRyYW5zaXRpb24gJiYgKHRyYW5zaXRpb24uZGVsYXkgfHwgdHJhbnNpdGlvbi5kdXJhdGlvbikpIHtcbiAgICAgICAgICAgIHRoaXMucHJpb3IgPSBwcmlvcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHBvc3NpYmx5RXZhbHVhdGUocGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMsIGNhbm9uaWNhbDogQ2Fub25pY2FsVGlsZUlELCBhdmFpbGFibGVJbWFnZXM6IEFycmF5PHN0cmluZz4pOiBSIHtcbiAgICAgICAgY29uc3Qgbm93ID0gcGFyYW1ldGVycy5ub3cgfHwgMDtcbiAgICAgICAgY29uc3QgZmluYWxWYWx1ZSA9IHRoaXMudmFsdWUucG9zc2libHlFdmFsdWF0ZShwYXJhbWV0ZXJzLCBjYW5vbmljYWwsIGF2YWlsYWJsZUltYWdlcyk7XG4gICAgICAgIGNvbnN0IHByaW9yID0gdGhpcy5wcmlvcjtcbiAgICAgICAgaWYgKCFwcmlvcikge1xuICAgICAgICAgICAgLy8gTm8gcHJpb3IgdmFsdWUuXG4gICAgICAgICAgICByZXR1cm4gZmluYWxWYWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChub3cgPiB0aGlzLmVuZCkge1xuICAgICAgICAgICAgLy8gVHJhbnNpdGlvbiBmcm9tIHByaW9yIHZhbHVlIGlzIG5vdyBjb21wbGV0ZS5cbiAgICAgICAgICAgIHRoaXMucHJpb3IgPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIGZpbmFsVmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWx1ZS5pc0RhdGFEcml2ZW4oKSkge1xuICAgICAgICAgICAgLy8gVHJhbnNpdGlvbnMgdG8gZGF0YS1kcml2ZW4gcHJvcGVydGllcyBhcmUgbm90IHN1cHBvcnRlZC5cbiAgICAgICAgICAgIC8vIFdlIHNuYXAgaW1tZWRpYXRlbHkgdG8gdGhlIGRhdGEtZHJpdmVuIHZhbHVlIHNvIHRoYXQsIHdoZW4gd2UgcGVyZm9ybSBsYXlvdXQsXG4gICAgICAgICAgICAvLyB3ZSBzZWUgdGhlIGRhdGEtZHJpdmVuIGZ1bmN0aW9uIGFuZCBjYW4gdXNlIGl0IHRvIHBvcHVsYXRlIHZlcnRleCBidWZmZXJzLlxuICAgICAgICAgICAgdGhpcy5wcmlvciA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gZmluYWxWYWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChub3cgPCB0aGlzLmJlZ2luKSB7XG4gICAgICAgICAgICAvLyBUcmFuc2l0aW9uIGhhc24ndCBzdGFydGVkIHlldC5cbiAgICAgICAgICAgIHJldHVybiBwcmlvci5wb3NzaWJseUV2YWx1YXRlKHBhcmFtZXRlcnMsIGNhbm9uaWNhbCwgYXZhaWxhYmxlSW1hZ2VzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEludGVycG9sYXRlIGJldHdlZW4gcmVjdXJzaXZlbHktY2FsY3VsYXRlZCBwcmlvciB2YWx1ZSBhbmQgZmluYWwuXG4gICAgICAgICAgICBjb25zdCB0ID0gKG5vdyAtIHRoaXMuYmVnaW4pIC8gKHRoaXMuZW5kIC0gdGhpcy5iZWdpbik7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eS5pbnRlcnBvbGF0ZShwcmlvci5wb3NzaWJseUV2YWx1YXRlKHBhcmFtZXRlcnMsIGNhbm9uaWNhbCwgYXZhaWxhYmxlSW1hZ2VzKSwgZmluYWxWYWx1ZSwgZWFzZUN1YmljSW5PdXQodCkpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIEEgaGVscGVyIHR5cGU6IGdpdmVuIGFuIG9iamVjdCB0eXBlIGBQcm9wZXJ0aWVzYCB3aG9zZSB2YWx1ZXMgYXJlIGVhY2ggb2YgdHlwZSBgUHJvcGVydHk8VCwgUj5gLCBpdCBjYWxjdWxhdGVzXG4gKiBhbiBvYmplY3QgdHlwZSB3aXRoIHRoZSBzYW1lIGtleXMgYW5kIHZhbHVlcyBvZiB0eXBlIGBUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZTxULCBSPmAuXG4gKlxuICogQHByaXZhdGVcbiAqL1xudHlwZSBUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZXM8UHJvcHM6IE9iamVjdD5cbiAgICA9ICRFeGFjdDwkT2JqTWFwPFByb3BzLCA8VCwgUj4ocDogUHJvcGVydHk8VCwgUj4pID0+IFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlPFQsIFI+Pj5cblxuLyoqXG4gKiBgVHJhbnNpdGlvbmluZ2Agc3RvcmVzIGEgbWFwIG9mIGFsbCAocHJvcGVydHkgbmFtZSwgYFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlYCkgcGFpcnMgZm9yIHBhaW50IHByb3BlcnRpZXMgb2YgYVxuICogZ2l2ZW4gbGF5ZXIgdHlwZS4gSXQgY2FuIGNhbGN1bGF0ZSB0aGUgcG9zc2libHktZXZhbHVhdGVkIHZhbHVlcyBmb3IgYWxsIG9mIHRoZW0gYXQgb25jZSwgcHJvZHVjaW5nIGFcbiAqIGBQb3NzaWJseUV2YWx1YXRlZGAgaW5zdGFuY2UgZm9yIHRoZSBzYW1lIHNldCBvZiBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBUcmFuc2l0aW9uaW5nPFByb3BzOiBPYmplY3Q+IHtcbiAgICBfcHJvcGVydGllczogUHJvcGVydGllczxQcm9wcz47XG4gICAgX3ZhbHVlczogVHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVzPFByb3BzPjtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IFByb3BlcnRpZXM8UHJvcHM+KSB7XG4gICAgICAgIHRoaXMuX3Byb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICAgICAgICB0aGlzLl92YWx1ZXMgPSAoT2JqZWN0LmNyZWF0ZShwcm9wZXJ0aWVzLmRlZmF1bHRUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZXMpOiBhbnkpO1xuICAgIH1cblxuICAgIHBvc3NpYmx5RXZhbHVhdGUocGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4pOiBQb3NzaWJseUV2YWx1YXRlZDxQcm9wcz4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgUG9zc2libHlFdmFsdWF0ZWQodGhpcy5fcHJvcGVydGllcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBPYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpKSB7XG4gICAgICAgICAgICByZXN1bHQuX3ZhbHVlc1twcm9wZXJ0eV0gPSB0aGlzLl92YWx1ZXNbcHJvcGVydHldLnBvc3NpYmx5RXZhbHVhdGUocGFyYW1ldGVycywgYXZhaWxhYmxlSW1hZ2VzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGhhc1RyYW5zaXRpb24oKSB7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgT2JqZWN0LmtleXModGhpcy5fdmFsdWVzKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbHVlc1twcm9wZXJ0eV0ucHJpb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG4vLyAtLS0tLS0tIExheW91dCAtLS0tLS0tXG5cbi8qKlxuICogQSBoZWxwZXIgdHlwZTogZ2l2ZW4gYW4gb2JqZWN0IHR5cGUgYFByb3BlcnRpZXNgIHdob3NlIHZhbHVlcyBhcmUgZWFjaCBvZiB0eXBlIGBQcm9wZXJ0eTxULCBSPmAsIGl0IGNhbGN1bGF0ZXNcbiAqIGFuIG9iamVjdCB0eXBlIHdpdGggdGhlIHNhbWUga2V5cyBhbmQgdmFsdWVzIG9mIHR5cGUgYFByb3BlcnR5VmFsdWU8VCwgUj5gLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbnR5cGUgUHJvcGVydHlWYWx1ZXM8UHJvcHM6IE9iamVjdD5cbiAgICA9ICRFeGFjdDwkT2JqTWFwPFByb3BzLCA8VCwgUj4ocDogUHJvcGVydHk8VCwgUj4pID0+IFByb3BlcnR5VmFsdWU8VCwgUj4+PlxuXG4vKipcbiAqIEJlY2F1c2UgbGF5b3V0IHByb3BlcnRpZXMgYXJlIG5vdCB0cmFuc2l0aW9uYWJsZSwgdGhleSBoYXZlIGEgc2ltcGxlciByZXByZXNlbnRhdGlvbiBhbmQgZXZhbHVhdGlvbiBjaGFpbiB0aGFuXG4gKiBwYWludCBwcm9wZXJ0aWVzOiBgUHJvcGVydHlWYWx1ZWBzIGFyZSBwb3NzaWJseSBldmFsdWF0ZWQsIHByb2R1Y2luZyBwb3NzaWJseSBldmFsdWF0ZWQgdmFsdWVzLCB3aGljaCBhcmUgdGhlblxuICogZnVsbHkgZXZhbHVhdGVkLlxuICpcbiAqIGBMYXlvdXRgIHN0b3JlcyBhIG1hcCBvZiBhbGwgKHByb3BlcnR5IG5hbWUsIGBQcm9wZXJ0eVZhbHVlYCkgcGFpcnMgZm9yIGxheW91dCBwcm9wZXJ0aWVzIG9mIGFcbiAqIGdpdmVuIGxheWVyIHR5cGUuIEl0IGNhbiBjYWxjdWxhdGUgdGhlIHBvc3NpYmx5LWV2YWx1YXRlZCB2YWx1ZXMgZm9yIGFsbCBvZiB0aGVtIGF0IG9uY2UsIHByb2R1Y2luZyBhXG4gKiBgUG9zc2libHlFdmFsdWF0ZWRgIGluc3RhbmNlIGZvciB0aGUgc2FtZSBzZXQgb2YgcHJvcGVydGllcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgTGF5b3V0PFByb3BzOiBPYmplY3Q+IHtcbiAgICBfcHJvcGVydGllczogUHJvcGVydGllczxQcm9wcz47XG4gICAgX3ZhbHVlczogUHJvcGVydHlWYWx1ZXM8UHJvcHM+O1xuXG4gICAgY29uc3RydWN0b3IocHJvcGVydGllczogUHJvcGVydGllczxQcm9wcz4pIHtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gICAgICAgIHRoaXMuX3ZhbHVlcyA9IChPYmplY3QuY3JlYXRlKHByb3BlcnRpZXMuZGVmYXVsdFByb3BlcnR5VmFsdWVzKTogYW55KTtcbiAgICB9XG5cbiAgICBnZXRWYWx1ZTxTOiBzdHJpbmc+KG5hbWU6IFMpIHtcbiAgICAgICAgcmV0dXJuIGNsb25lKHRoaXMuX3ZhbHVlc1tuYW1lXS52YWx1ZSk7XG4gICAgfVxuXG4gICAgc2V0VmFsdWU8Uzogc3RyaW5nPihuYW1lOiBTLCB2YWx1ZTogKikge1xuICAgICAgICB0aGlzLl92YWx1ZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlWYWx1ZSh0aGlzLl92YWx1ZXNbbmFtZV0ucHJvcGVydHksIHZhbHVlID09PSBudWxsID8gdW5kZWZpbmVkIDogY2xvbmUodmFsdWUpKTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogYW55ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgT2JqZWN0LmtleXModGhpcy5fdmFsdWVzKSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFZhbHVlKHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcG9zc2libHlFdmFsdWF0ZShwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycywgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPik6IFBvc3NpYmx5RXZhbHVhdGVkPFByb3BzPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBQb3NzaWJseUV2YWx1YXRlZCh0aGlzLl9wcm9wZXJ0aWVzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIE9iamVjdC5rZXlzKHRoaXMuX3ZhbHVlcykpIHtcbiAgICAgICAgICAgIHJlc3VsdC5fdmFsdWVzW3Byb3BlcnR5XSA9IHRoaXMuX3ZhbHVlc1twcm9wZXJ0eV0ucG9zc2libHlFdmFsdWF0ZShwYXJhbWV0ZXJzLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG4vLyAtLS0tLS0tIFBvc3NpYmx5RXZhbHVhdGVkIC0tLS0tLS1cblxuLyoqXG4gKiBcIlBvc3NpYmx5IGV2YWx1YXRlZCB2YWx1ZVwiIGlzIGFuIGludGVybWVkaWF0ZSBzdGFnZSBpbiB0aGUgZXZhbHVhdGlvbiBjaGFpbiBmb3IgYm90aCBwYWludCBhbmQgbGF5b3V0IHByb3BlcnR5XG4gKiB2YWx1ZXMuIFRoZSBwdXJwb3NlIG9mIHRoaXMgc3RhZ2UgaXMgdG8gb3B0aW1pemUgYXdheSB1bm5lY2Vzc2FyeSByZWNhbGN1bGF0aW9ucyBmb3IgZGF0YS1kcml2ZW4gcHJvcGVydGllcy4gQ29kZVxuICogd2hpY2ggdXNlcyBkYXRhLWRyaXZlbiBwcm9wZXJ0eSB2YWx1ZXMgbXVzdCBhc3N1bWUgdGhhdCB0aGUgdmFsdWUgaXMgZGVwZW5kZW50IG9uIGZlYXR1cmUgZGF0YSwgYW5kIHJlcXVlc3QgdGhhdCBpdFxuICogYmUgZXZhbHVhdGVkIGZvciBlYWNoIGZlYXR1cmUuIEJ1dCB3aGVuIHRoYXQgcHJvcGVydHkgdmFsdWUgaXMgaW4gZmFjdCBhIGNvbnN0YW50IG9yIGNhbWVyYSBmdW5jdGlvbiwgdGhlIGNhbGN1bGF0aW9uXG4gKiB3aWxsIG5vdCBhY3R1YWxseSBkZXBlbmQgb24gdGhlIGZlYXR1cmUsIGFuZCB3ZSBjYW4gYmVuZWZpdCBmcm9tIHJldHVybmluZyB0aGUgcHJpb3IgcmVzdWx0IG9mIGhhdmluZyBkb25lIHRoZVxuICogZXZhbHVhdGlvbiBvbmNlLCBhaGVhZCBvZiB0aW1lLCBpbiBhbiBpbnRlcm1lZGlhdGUgc3RlcCB3aG9zZSBpbnB1dHMgYXJlIGp1c3QgdGhlIHZhbHVlIGFuZCBcImdsb2JhbFwiIHBhcmFtZXRlcnNcbiAqIHN1Y2ggYXMgY3VycmVudCB6b29tIGxldmVsLlxuICpcbiAqIGBQb3NzaWJseUV2YWx1YXRlZFZhbHVlYCByZXByZXNlbnRzIHRoZSB0aHJlZSBwb3NzaWJsZSBvdXRjb21lcyBvZiB0aGlzIHN0ZXA6IGlmIHRoZSBpbnB1dCB2YWx1ZSB3YXMgYSBjb25zdGFudCBvclxuICogY2FtZXJhIGV4cHJlc3Npb24sIHRoZW4gdGhlIFwicG9zc2libHkgZXZhbHVhdGVkXCIgcmVzdWx0IGlzIGEgY29uc3RhbnQgdmFsdWUuIE90aGVyd2lzZSwgdGhlIGlucHV0IHZhbHVlIHdhcyBlaXRoZXJcbiAqIGEgc291cmNlIG9yIGNvbXBvc2l0ZSBleHByZXNzaW9uLCBhbmQgd2UgbXVzdCBkZWZlciBmaW5hbCBldmFsdWF0aW9uIHVudGlsIHN1cHBsaWVkIGEgZmVhdHVyZS4gV2Ugc2VwYXJhdGVcbiAqIHRoZSBzb3VyY2UgYW5kIGNvbXBvc2l0ZSBjYXNlcyBiZWNhdXNlIHRoZXkgYXJlIGhhbmRsZWQgZGlmZmVyZW50bHkgd2hlbiBnZW5lcmF0aW5nIEdMIGF0dHJpYnV0ZXMsIGJ1ZmZlcnMsIGFuZFxuICogdW5pZm9ybXMuXG4gKlxuICogTm90ZSB0aGF0IGBQb3NzaWJseUV2YWx1YXRlZFZhbHVlYCAoYW5kIGBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWVgLCBiZWxvdykgYXJlIF9ub3RfIHVzZWQgZm9yIHByb3BlcnRpZXMgdGhhdFxuICogZG8gbm90IGFsbG93IGRhdGEtZHJpdmVuIHZhbHVlcy4gRm9yIHN1Y2ggcHJvcGVydGllcywgd2Uga25vdyB0aGF0IHRoZSBcInBvc3NpYmx5IGV2YWx1YXRlZFwiIHJlc3VsdCBpcyBhbHdheXMgYSBjb25zdGFudFxuICogc2NhbGFyIHZhbHVlLiBTZWUgYmVsb3cuXG4gKlxuICogQHByaXZhdGVcbiAqL1xudHlwZSBQb3NzaWJseUV2YWx1YXRlZFZhbHVlPFQ+ID1cbiAgICB8IHtraW5kOiAnY29uc3RhbnQnLCB2YWx1ZTogVH1cbiAgICB8IFNvdXJjZUV4cHJlc3Npb25cbiAgICB8IENvbXBvc2l0ZUV4cHJlc3Npb247XG5cbi8qKlxuICogYFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZWAgaXMgdXNlZCBmb3IgZGF0YS1kcml2ZW4gcGFpbnQgYW5kIGxheW91dCBwcm9wZXJ0eSB2YWx1ZXMuIEl0IGhvbGRzIGFcbiAqIGBQb3NzaWJseUV2YWx1YXRlZFZhbHVlYCBhbmQgdGhlIGBHbG9iYWxQcm9wZXJ0aWVzYCB0aGF0IHdlcmUgdXNlZCB0byBnZW5lcmF0ZSBpdC4gWW91J3JlIG5vdCBhbGxvd2VkIHRvIHN1cHBseVxuICogYSBkaWZmZXJlbnQgc2V0IG9mIGBHbG9iYWxQcm9wZXJ0aWVzYCB3aGVuIHBlcmZvcm1pbmcgdGhlIGZpbmFsIGV2YWx1YXRpb24gYmVjYXVzZSB0aGV5IHdvdWxkIGJlIGlnbm9yZWQgaW4gdGhlXG4gKiBjYXNlIHdoZXJlIHRoZSBpbnB1dCB2YWx1ZSB3YXMgYSBjb25zdGFudCBvciBjYW1lcmEgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxUPiB7XG4gICAgcHJvcGVydHk6IERhdGFEcml2ZW5Qcm9wZXJ0eTxUPjtcbiAgICB2YWx1ZTogUG9zc2libHlFdmFsdWF0ZWRWYWx1ZTxUPjtcbiAgICBwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycztcblxuICAgIGNvbnN0cnVjdG9yKHByb3BlcnR5OiBEYXRhRHJpdmVuUHJvcGVydHk8VD4sIHZhbHVlOiBQb3NzaWJseUV2YWx1YXRlZFZhbHVlPFQ+LCBwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycykge1xuICAgICAgICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcbiAgICB9XG5cbiAgICBpc0NvbnN0YW50KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZS5raW5kID09PSAnY29uc3RhbnQnO1xuICAgIH1cblxuICAgIGNvbnN0YW50T3IodmFsdWU6IFQpOiBUIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUua2luZCA9PT0gJ2NvbnN0YW50Jykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUudmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBldmFsdWF0ZShmZWF0dXJlOiBGZWF0dXJlLCBmZWF0dXJlU3RhdGU6IEZlYXR1cmVTdGF0ZSwgY2Fub25pY2FsPzogQ2Fub25pY2FsVGlsZUlELCBhdmFpbGFibGVJbWFnZXM/OiBBcnJheTxzdHJpbmc+KTogVCB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BlcnR5LmV2YWx1YXRlKHRoaXMudmFsdWUsIHRoaXMucGFyYW1ldGVycywgZmVhdHVyZSwgZmVhdHVyZVN0YXRlLCBjYW5vbmljYWwsIGF2YWlsYWJsZUltYWdlcyk7XG4gICAgfVxufVxuXG4vKipcbiAqIEEgaGVscGVyIHR5cGU6IGdpdmVuIGFuIG9iamVjdCB0eXBlIGBQcm9wZXJ0aWVzYCB3aG9zZSB2YWx1ZXMgYXJlIGVhY2ggb2YgdHlwZSBgUHJvcGVydHk8VCwgUj5gLCBpdCBjYWxjdWxhdGVzXG4gKiBhbiBvYmplY3QgdHlwZSB3aXRoIHRoZSBzYW1lIGtleXMsIGFuZCB2YWx1ZXMgb2YgdHlwZSBgUmAuXG4gKlxuICogRm9yIHByb3BlcnRpZXMgdGhhdCBkb24ndCBhbGxvdyBkYXRhLWRyaXZlbiB2YWx1ZXMsIGBSYCBpcyBhIHNjYWxhciB0eXBlIHN1Y2ggYXMgYG51bWJlcmAsIGBzdHJpbmdgLCBvciBgQ29sb3JgLlxuICogRm9yIGRhdGEtZHJpdmVuIHByb3BlcnRpZXMsIGl0IGlzIGBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWVgLiBDcml0aWNhbGx5LCB0aGUgdHlwZSBkZWZpbml0aW9ucyBhcmUgc2V0IHVwXG4gKiBpbiBhIHdheSB0aGF0IGFsbG93cyBmbG93IHRvIGtub3cgd2hpY2ggb2YgdGhlc2UgdHdvIGNhc2VzIGFwcGxpZXMgZm9yIGFueSBnaXZlbiBwcm9wZXJ0eSBuYW1lLCBhbmQgaWYgeW91IGF0dGVtcHRcbiAqIHRvIHVzZSBhIGBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWVgIGFzIGlmIGl0IHdhcyBhIHNjYWxhciwgb3IgdmljZSB2ZXJzYSwgeW91IHdpbGwgZ2V0IGEgdHlwZSBlcnJvci4gKEhvd2V2ZXIsXG4gKiB0aGVyZSdzIGF0IGxlYXN0IG9uZSBjYXNlIGluIHdoaWNoIGZsb3cgZmFpbHMgdG8gcHJvZHVjZSBhIHR5cGUgZXJyb3IgdGhhdCB5b3Ugc2hvdWxkIGJlIGF3YXJlIG9mOiBpbiBhIGNvbnRleHQgc3VjaFxuICogYXMgYGxheWVyLnBhaW50LmdldCgnZm9vLW9wYWNpdHknKSA9PT0gMGAsIGlmIGBmb28tb3BhY2l0eWAgaXMgZGF0YS1kcml2ZW4sIHRoYW4gdGhlIGxlZnQtaGFuZCBzaWRlIGlzIG9mIHR5cGVcbiAqIGBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8bnVtYmVyPmAsIGJ1dCBmbG93IHdpbGwgbm90IGNvbXBsYWluIGFib3V0IGNvbXBhcmluZyB0aGlzIHRvIGEgbnVtYmVyIHVzaW5nIGA9PT1gLlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy8yMzU5LilcbiAqXG4gKiBUaGVyZSdzIGFsc28gYSB0aGlyZCwgc3BlY2lhbCBjYXNlIHBvc3NpYmxpdHkgZm9yIGBSYDogZm9yIGNyb3NzLWZhZGVkIHByb3BlcnRpZXMsIGl0J3MgYD9Dcm9zc0ZhZGVkPFQ+YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG50eXBlIFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZXM8UHJvcHM6IE9iamVjdD5cbiAgICA9ICRFeGFjdDwkT2JqTWFwPFByb3BzLCA8VCwgUj4ocDogUHJvcGVydHk8VCwgUj4pID0+IFI+PlxuXG4vKipcbiAqIGBQb3NzaWJseUV2YWx1YXRlZGAgc3RvcmVzIGEgbWFwIG9mIGFsbCAocHJvcGVydHkgbmFtZSwgYFJgKSBwYWlycyBmb3IgcGFpbnQgb3IgbGF5b3V0IHByb3BlcnRpZXMgb2YgYVxuICogZ2l2ZW4gbGF5ZXIgdHlwZS5cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBQb3NzaWJseUV2YWx1YXRlZDxQcm9wczogT2JqZWN0PiB7XG4gICAgX3Byb3BlcnRpZXM6IFByb3BlcnRpZXM8UHJvcHM+O1xuICAgIF92YWx1ZXM6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZXM8UHJvcHM+O1xuXG4gICAgY29uc3RydWN0b3IocHJvcGVydGllczogUHJvcGVydGllczxQcm9wcz4pIHtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gICAgICAgIHRoaXMuX3ZhbHVlcyA9IChPYmplY3QuY3JlYXRlKHByb3BlcnRpZXMuZGVmYXVsdFBvc3NpYmx5RXZhbHVhdGVkVmFsdWVzKTogYW55KTtcbiAgICB9XG5cbiAgICBnZXQ8Uzogc3RyaW5nPihuYW1lOiBTKTogJEVsZW1lbnRUeXBlPFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZXM8UHJvcHM+LCBTPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZXNbbmFtZV07XG4gICAgfVxufVxuXG4vKipcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIGBQcm9wZXJ0eWAgZm9yIHByb3BlcnRpZXMgdGhhdCBkbyBub3QgcGVybWl0IGRhdGEtZHJpdmVuIChzb3VyY2Ugb3IgY29tcG9zaXRlKSBleHByZXNzaW9ucy5cbiAqIFRoaXMgcmVzdHJpY3Rpb24gYWxsb3dzIHVzIHRvIGRlY2xhcmUgc3RhdGljYWxseSB0aGF0IHRoZSByZXN1bHQgb2YgcG9zc2libHkgZXZhbHVhdGluZyB0aGlzIGtpbmQgb2YgcHJvcGVydHlcbiAqIGlzIGluIGZhY3QgYWx3YXlzIHRoZSBzY2FsYXIgdHlwZSBgVGAsIGFuZCBjYW4gYmUgdXNlZCB3aXRob3V0IGZ1cnRoZXIgZXZhbHVhdGluZyB0aGUgdmFsdWUgb24gYSBwZXItZmVhdHVyZSBiYXNpcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgRGF0YUNvbnN0YW50UHJvcGVydHk8VD4gaW1wbGVtZW50cyBQcm9wZXJ0eTxULCBUPiB7XG4gICAgc3BlY2lmaWNhdGlvbjogU3R5bGVQcm9wZXJ0eVNwZWNpZmljYXRpb247XG5cbiAgICBjb25zdHJ1Y3RvcihzcGVjaWZpY2F0aW9uOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbikge1xuICAgICAgICB0aGlzLnNwZWNpZmljYXRpb24gPSBzcGVjaWZpY2F0aW9uO1xuICAgIH1cblxuICAgIHBvc3NpYmx5RXZhbHVhdGUodmFsdWU6IFByb3BlcnR5VmFsdWU8VCwgVD4sIHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzKTogVCB7XG4gICAgICAgIGFzc2VydCghdmFsdWUuaXNEYXRhRHJpdmVuKCkpO1xuICAgICAgICByZXR1cm4gdmFsdWUuZXhwcmVzc2lvbi5ldmFsdWF0ZShwYXJhbWV0ZXJzKTtcbiAgICB9XG5cbiAgICBpbnRlcnBvbGF0ZShhOiBULCBiOiBULCB0OiBudW1iZXIpOiBUIHtcbiAgICAgICAgY29uc3QgaW50ZXJwOiA/KGE6IFQsIGI6IFQsIHQ6IG51bWJlcikgPT4gVCA9IChpbnRlcnBvbGF0ZTogYW55KVt0aGlzLnNwZWNpZmljYXRpb24udHlwZV07XG4gICAgICAgIGlmIChpbnRlcnApIHtcbiAgICAgICAgICAgIHJldHVybiBpbnRlcnAoYSwgYiwgdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiBgUHJvcGVydHlgIGZvciBwcm9wZXJ0aWVzIHRoYXQgcGVybWl0IGRhdGEtZHJpdmVuIChzb3VyY2Ugb3IgY29tcG9zaXRlKSBleHByZXNzaW9ucy5cbiAqIFRoZSByZXN1bHQgb2YgcG9zc2libHkgZXZhbHVhdGluZyB0aGlzIGtpbmQgb2YgcHJvcGVydHkgaXMgYFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxUPmA7IG9idGFpbmluZ1xuICogYSBzY2FsYXIgdmFsdWUgYFRgIHJlcXVpcmVzIGZ1cnRoZXIgZXZhbHVhdGlvbiBvbiBhIHBlci1mZWF0dXJlIGJhc2lzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhRHJpdmVuUHJvcGVydHk8VD4gaW1wbGVtZW50cyBQcm9wZXJ0eTxULCBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8VD4+IHtcbiAgICBzcGVjaWZpY2F0aW9uOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbjtcbiAgICBvdmVycmlkZXM6ID9PYmplY3Q7XG5cbiAgICBjb25zdHJ1Y3RvcihzcGVjaWZpY2F0aW9uOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbiwgb3ZlcnJpZGVzPzogT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuc3BlY2lmaWNhdGlvbiA9IHNwZWNpZmljYXRpb247XG4gICAgICAgIHRoaXMub3ZlcnJpZGVzID0gb3ZlcnJpZGVzO1xuICAgIH1cblxuICAgIHBvc3NpYmx5RXZhbHVhdGUodmFsdWU6IFByb3BlcnR5VmFsdWU8VCwgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPFQ+PiwgcGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMsIGNhbm9uaWNhbD86IENhbm9uaWNhbFRpbGVJRCwgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPik6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxUPiB7XG4gICAgICAgIGlmICh2YWx1ZS5leHByZXNzaW9uLmtpbmQgPT09ICdjb25zdGFudCcgfHwgdmFsdWUuZXhwcmVzc2lvbi5raW5kID09PSAnY2FtZXJhJykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWUodGhpcywge2tpbmQ6ICdjb25zdGFudCcsIHZhbHVlOiB2YWx1ZS5leHByZXNzaW9uLmV2YWx1YXRlKHBhcmFtZXRlcnMsIChudWxsOiBhbnkpLCB7fSwgY2Fub25pY2FsLCBhdmFpbGFibGVJbWFnZXMpfSwgcGFyYW1ldGVycyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZSh0aGlzLCB2YWx1ZS5leHByZXNzaW9uLCBwYXJhbWV0ZXJzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGludGVycG9sYXRlKGE6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxUPixcbiAgICAgICAgICAgICAgICBiOiBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8VD4sXG4gICAgICAgICAgICAgICAgdDogbnVtYmVyKTogUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPFQ+IHtcbiAgICAgICAgLy8gSWYgZWl0aGVyIHBvc3NpYmx5LWV2YWx1YXRlZCB2YWx1ZSBpcyBub24tY29uc3RhbnQsIGdpdmUgdXA6IHdlIGFyZW4ndCBhYmxlIHRvIGludGVycG9sYXRlIGRhdGEtZHJpdmVuIHZhbHVlcy5cbiAgICAgICAgaWYgKGEudmFsdWUua2luZCAhPT0gJ2NvbnN0YW50JyB8fCBiLnZhbHVlLmtpbmQgIT09ICdjb25zdGFudCcpIHtcbiAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3BlY2lhbCBjYXNlIGhhY2sgc29sZWx5IGZvciBmaWxsLW91dGxpbmUtY29sb3IuIFRoZSB1bmRlZmluZWQgdmFsdWUgaXMgc3Vic2VxdWVudGx5IGhhbmRsZWQgaW5cbiAgICAgICAgLy8gRmlsbFN0eWxlTGF5ZXIjcmVjYWxjdWxhdGUsIHdoaWNoIHNldHMgZmlsbC1vdXRsaW5lLWNvbG9yIHRvIHRoZSBmaWxsLWNvbG9yIHZhbHVlIGlmIHRoZSBmb3JtZXJcbiAgICAgICAgLy8gaXMgYSBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWUgY29udGFpbmluZyBhIGNvbnN0YW50IHVuZGVmaW5lZCB2YWx1ZS4gSW4gYWRkaXRpb24gdG8gdGhlXG4gICAgICAgIC8vIHJldHVybiB2YWx1ZSBoZXJlLCB0aGUgb3RoZXIgc291cmNlIG9mIGEgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlIGNvbnRhaW5pbmcgYSBjb25zdGFudFxuICAgICAgICAvLyB1bmRlZmluZWQgdmFsdWUgaXMgdGhlIFwiZGVmYXVsdCB2YWx1ZVwiIGZvciBmaWxsLW91dGxpbmUtY29sb3IgaGVsZCBpblxuICAgICAgICAvLyBgUHJvcGVydGllcyNkZWZhdWx0UG9zc2libHlFdmFsdWF0ZWRWYWx1ZXNgLCB3aGljaCBzZXJ2ZXMgYXMgdGhlIHByb3RvdHlwZSBvZlxuICAgICAgICAvLyBgUG9zc2libHlFdmFsdWF0ZWQjX3ZhbHVlc2AuXG4gICAgICAgIGlmIChhLnZhbHVlLnZhbHVlID09PSB1bmRlZmluZWQgfHwgYi52YWx1ZS52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZSh0aGlzLCB7a2luZDogJ2NvbnN0YW50JywgdmFsdWU6ICh1bmRlZmluZWQ6IGFueSl9LCBhLnBhcmFtZXRlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW50ZXJwOiA/KGE6IFQsIGI6IFQsIHQ6IG51bWJlcikgPT4gVCA9IChpbnRlcnBvbGF0ZTogYW55KVt0aGlzLnNwZWNpZmljYXRpb24udHlwZV07XG4gICAgICAgIGlmIChpbnRlcnApIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlKHRoaXMsIHtraW5kOiAnY29uc3RhbnQnLCB2YWx1ZTogaW50ZXJwKGEudmFsdWUudmFsdWUsIGIudmFsdWUudmFsdWUsIHQpfSwgYS5wYXJhbWV0ZXJzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXZhbHVhdGUodmFsdWU6IFBvc3NpYmx5RXZhbHVhdGVkVmFsdWU8VD4sIHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzLCBmZWF0dXJlOiBGZWF0dXJlLCBmZWF0dXJlU3RhdGU6IEZlYXR1cmVTdGF0ZSwgY2Fub25pY2FsPzogQ2Fub25pY2FsVGlsZUlELCBhdmFpbGFibGVJbWFnZXM/OiBBcnJheTxzdHJpbmc+KTogVCB7XG4gICAgICAgIGlmICh2YWx1ZS5raW5kID09PSAnY29uc3RhbnQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUuZXZhbHVhdGUocGFyYW1ldGVycywgZmVhdHVyZSwgZmVhdHVyZVN0YXRlLCBjYW5vbmljYWwsIGF2YWlsYWJsZUltYWdlcyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogQW4gaW1wbGVtZW50YXRpb24gb2YgYFByb3BlcnR5YCBmb3IgIGRhdGEgZHJpdmVuIGBsaW5lLXBhdHRlcm5gIHdoaWNoIGFyZSB0cmFuc2l0aW9uZWQgYnkgY3Jvc3MtZmFkaW5nXG4gKiByYXRoZXIgdGhhbiBpbnRlcnBvbGF0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0IGNsYXNzIENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHk8VD4gZXh0ZW5kcyBEYXRhRHJpdmVuUHJvcGVydHk8P0Nyb3NzRmFkZWQ8VD4+IHtcblxuICAgIHBvc3NpYmx5RXZhbHVhdGUodmFsdWU6IFByb3BlcnR5VmFsdWU8P0Nyb3NzRmFkZWQ8VD4sIFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTw/Q3Jvc3NGYWRlZDxUPj4+LCBwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycywgY2Fub25pY2FsPzogQ2Fub25pY2FsVGlsZUlELCBhdmFpbGFibGVJbWFnZXM/OiBBcnJheTxzdHJpbmc+KTogUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPD9Dcm9zc0ZhZGVkPFQ+PiB7XG4gICAgICAgIGlmICh2YWx1ZS52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZSh0aGlzLCB7a2luZDogJ2NvbnN0YW50JywgdmFsdWU6IHVuZGVmaW5lZH0sIHBhcmFtZXRlcnMpO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmV4cHJlc3Npb24ua2luZCA9PT0gJ2NvbnN0YW50Jykge1xuICAgICAgICAgICAgY29uc3QgZXZhbHVhdGVkVmFsdWUgPSB2YWx1ZS5leHByZXNzaW9uLmV2YWx1YXRlKHBhcmFtZXRlcnMsIChudWxsOiBhbnkpLCB7fSwgY2Fub25pY2FsLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICAgICAgY29uc3QgaXNJbWFnZUV4cHJlc3Npb24gPSB2YWx1ZS5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uLnR5cGUgPT09ICdyZXNvbHZlZEltYWdlJztcbiAgICAgICAgICAgIGNvbnN0IGNvbnN0YW50VmFsdWUgPSBpc0ltYWdlRXhwcmVzc2lvbiAmJiB0eXBlb2YgZXZhbHVhdGVkVmFsdWUgIT09ICdzdHJpbmcnID8gZXZhbHVhdGVkVmFsdWUubmFtZSA6IGV2YWx1YXRlZFZhbHVlO1xuICAgICAgICAgICAgY29uc3QgY29uc3RhbnQgPSB0aGlzLl9jYWxjdWxhdGUoY29uc3RhbnRWYWx1ZSwgY29uc3RhbnRWYWx1ZSwgY29uc3RhbnRWYWx1ZSwgcGFyYW1ldGVycyk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZSh0aGlzLCB7a2luZDogJ2NvbnN0YW50JywgdmFsdWU6IGNvbnN0YW50fSwgcGFyYW1ldGVycyk7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUuZXhwcmVzc2lvbi5raW5kID09PSAnY2FtZXJhJykge1xuICAgICAgICAgICAgY29uc3QgY2FtZXJhVmFsID0gdGhpcy5fY2FsY3VsYXRlKFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5leHByZXNzaW9uLmV2YWx1YXRlKHt6b29tOiBwYXJhbWV0ZXJzLnpvb20gLSAxLjB9KSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUuZXhwcmVzc2lvbi5ldmFsdWF0ZSh7em9vbTogcGFyYW1ldGVycy56b29tfSksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLmV4cHJlc3Npb24uZXZhbHVhdGUoe3pvb206IHBhcmFtZXRlcnMuem9vbSArIDEuMH0pLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlKHRoaXMsIHtraW5kOiAnY29uc3RhbnQnLCB2YWx1ZTogY2FtZXJhVmFsfSwgcGFyYW1ldGVycyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBzb3VyY2Ugb3IgY29tcG9zaXRlIGV4cHJlc3Npb25cbiAgICAgICAgICAgIHJldHVybiBuZXcgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlKHRoaXMsIHZhbHVlLmV4cHJlc3Npb24sIHBhcmFtZXRlcnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXZhbHVhdGUodmFsdWU6IFBvc3NpYmx5RXZhbHVhdGVkVmFsdWU8P0Nyb3NzRmFkZWQ8VD4+LCBnbG9iYWxzOiBFdmFsdWF0aW9uUGFyYW1ldGVycywgZmVhdHVyZTogRmVhdHVyZSwgZmVhdHVyZVN0YXRlOiBGZWF0dXJlU3RhdGUsIGNhbm9uaWNhbD86IENhbm9uaWNhbFRpbGVJRCwgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPik6ID9Dcm9zc0ZhZGVkPFQ+IHtcbiAgICAgICAgaWYgKHZhbHVlLmtpbmQgPT09ICdzb3VyY2UnKSB7XG4gICAgICAgICAgICBjb25zdCBjb25zdGFudCA9IHZhbHVlLmV2YWx1YXRlKGdsb2JhbHMsIGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSwgY2Fub25pY2FsLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGN1bGF0ZShjb25zdGFudCwgY29uc3RhbnQsIGNvbnN0YW50LCBnbG9iYWxzKTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5raW5kID09PSAnY29tcG9zaXRlJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGN1bGF0ZShcbiAgICAgICAgICAgICAgICB2YWx1ZS5ldmFsdWF0ZSh7em9vbTogTWF0aC5mbG9vcihnbG9iYWxzLnpvb20pIC0gMS4wfSwgZmVhdHVyZSwgZmVhdHVyZVN0YXRlKSxcbiAgICAgICAgICAgICAgICB2YWx1ZS5ldmFsdWF0ZSh7em9vbTogTWF0aC5mbG9vcihnbG9iYWxzLnpvb20pfSwgZmVhdHVyZSwgZmVhdHVyZVN0YXRlKSxcbiAgICAgICAgICAgICAgICB2YWx1ZS5ldmFsdWF0ZSh7em9vbTogTWF0aC5mbG9vcihnbG9iYWxzLnpvb20pICsgMS4wfSwgZmVhdHVyZSwgZmVhdHVyZVN0YXRlKSxcbiAgICAgICAgICAgICAgICBnbG9iYWxzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9jYWxjdWxhdGUobWluOiBULCBtaWQ6IFQsIG1heDogVCwgcGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMpOiBDcm9zc0ZhZGVkPFQ+IHtcbiAgICAgICAgY29uc3QgeiA9IHBhcmFtZXRlcnMuem9vbTtcbiAgICAgICAgcmV0dXJuIHogPiBwYXJhbWV0ZXJzLnpvb21IaXN0b3J5Lmxhc3RJbnRlZ2VyWm9vbSA/IHtmcm9tOiBtaW4sIHRvOiBtaWR9IDoge2Zyb206IG1heCwgdG86IG1pZH07XG4gICAgfVxuXG4gICAgaW50ZXJwb2xhdGUoYTogUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPD9Dcm9zc0ZhZGVkPFQ+Pik6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTw/Q3Jvc3NGYWRlZDxUPj4ge1xuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG59XG4vKipcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIGBQcm9wZXJ0eWAgZm9yIGAqLXBhdHRlcm5gIGFuZCBgbGluZS1kYXNoYXJyYXlgLCB3aGljaCBhcmUgdHJhbnNpdGlvbmVkIGJ5IGNyb3NzLWZhZGluZ1xuICogcmF0aGVyIHRoYW4gaW50ZXJwb2xhdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgQ3Jvc3NGYWRlZFByb3BlcnR5PFQ+IGltcGxlbWVudHMgUHJvcGVydHk8VCwgP0Nyb3NzRmFkZWQ8VD4+IHtcbiAgICBzcGVjaWZpY2F0aW9uOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKHNwZWNpZmljYXRpb246IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHRoaXMuc3BlY2lmaWNhdGlvbiA9IHNwZWNpZmljYXRpb247XG4gICAgfVxuXG4gICAgcG9zc2libHlFdmFsdWF0ZSh2YWx1ZTogUHJvcGVydHlWYWx1ZTxULCA/Q3Jvc3NGYWRlZDxUPj4sIHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzLCBjYW5vbmljYWw/OiBDYW5vbmljYWxUaWxlSUQsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4pOiA/Q3Jvc3NGYWRlZDxUPiB7XG4gICAgICAgIGlmICh2YWx1ZS52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmV4cHJlc3Npb24ua2luZCA9PT0gJ2NvbnN0YW50Jykge1xuICAgICAgICAgICAgY29uc3QgY29uc3RhbnQgPSB2YWx1ZS5leHByZXNzaW9uLmV2YWx1YXRlKHBhcmFtZXRlcnMsIChudWxsOiBhbnkpLCB7fSwgY2Fub25pY2FsLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGN1bGF0ZShjb25zdGFudCwgY29uc3RhbnQsIGNvbnN0YW50LCBwYXJhbWV0ZXJzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFzc2VydCghdmFsdWUuaXNEYXRhRHJpdmVuKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGN1bGF0ZShcbiAgICAgICAgICAgICAgICB2YWx1ZS5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyhNYXRoLmZsb29yKHBhcmFtZXRlcnMuem9vbSAtIDEuMCksIHBhcmFtZXRlcnMpKSxcbiAgICAgICAgICAgICAgICB2YWx1ZS5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyhNYXRoLmZsb29yKHBhcmFtZXRlcnMuem9vbSksIHBhcmFtZXRlcnMpKSxcbiAgICAgICAgICAgICAgICB2YWx1ZS5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyhNYXRoLmZsb29yKHBhcmFtZXRlcnMuem9vbSArIDEuMCksIHBhcmFtZXRlcnMpKSxcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9jYWxjdWxhdGUobWluOiBULCBtaWQ6IFQsIG1heDogVCwgcGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMpOiA/Q3Jvc3NGYWRlZDxUPiB7XG4gICAgICAgIGNvbnN0IHogPSBwYXJhbWV0ZXJzLnpvb207XG4gICAgICAgIHJldHVybiB6ID4gcGFyYW1ldGVycy56b29tSGlzdG9yeS5sYXN0SW50ZWdlclpvb20gPyB7ZnJvbTogbWluLCB0bzogbWlkfSA6IHtmcm9tOiBtYXgsIHRvOiBtaWR9O1xuICAgIH1cblxuICAgIGludGVycG9sYXRlKGE6ID9Dcm9zc0ZhZGVkPFQ+KTogP0Nyb3NzRmFkZWQ8VD4ge1xuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG59XG5cbi8qKlxuICogQW4gaW1wbGVtZW50YXRpb24gb2YgYFByb3BlcnR5YCBmb3IgYGhlYXRtYXAtY29sb3JgIGFuZCBgbGluZS1ncmFkaWVudGAuIEludGVycG9sYXRpb24gaXMgYSBuby1vcCwgYW5kXG4gKiBldmFsdWF0aW9uIHJldHVybnMgYSBib29sZWFuIHZhbHVlIGluIG9yZGVyIHRvIGluZGljYXRlIGl0cyBwcmVzZW5jZSwgYnV0IHRoZSByZWFsXG4gKiBldmFsdWF0aW9uIGhhcHBlbnMgaW4gU3R5bGVMYXllciBjbGFzc2VzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0IGNsYXNzIENvbG9yUmFtcFByb3BlcnR5IGltcGxlbWVudHMgUHJvcGVydHk8Q29sb3IsIGJvb2xlYW4+IHtcbiAgICBzcGVjaWZpY2F0aW9uOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKHNwZWNpZmljYXRpb246IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHRoaXMuc3BlY2lmaWNhdGlvbiA9IHNwZWNpZmljYXRpb247XG4gICAgfVxuXG4gICAgcG9zc2libHlFdmFsdWF0ZSh2YWx1ZTogUHJvcGVydHlWYWx1ZTxDb2xvciwgYm9vbGVhbj4sIHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzLCBjYW5vbmljYWw/OiBDYW5vbmljYWxUaWxlSUQsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdmFsdWUuZXhwcmVzc2lvbi5ldmFsdWF0ZShwYXJhbWV0ZXJzLCAobnVsbDogYW55KSwge30sIGNhbm9uaWNhbCwgYXZhaWxhYmxlSW1hZ2VzKTtcbiAgICB9XG5cbiAgICBpbnRlcnBvbGF0ZSgpOiBib29sZWFuIHsgcmV0dXJuIGZhbHNlOyB9XG59XG5cbi8qKlxuICogYFByb3BlcnRpZXNgIGhvbGRzIG9iamVjdHMgY29udGFpbmluZyBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIGxheW91dCBvciBwYWludCBwcm9wZXJ0eSBzZXQgb2YgYSBnaXZlblxuICogbGF5ZXIgdHlwZS4gVGhlc2Ugb2JqZWN0cyBhcmUgaW1tdXRhYmxlLCBhbmQgdGhleSBhcmUgdXNlZCBhcyB0aGUgcHJvdG90eXBlcyBmb3IgdGhlIGBfdmFsdWVzYCBtZW1iZXJzIG9mXG4gKiBgVHJhbnNpdGlvbmFibGVgLCBgVHJhbnNpdGlvbmluZ2AsIGBMYXlvdXRgLCBhbmQgYFBvc3NpYmx5RXZhbHVhdGVkYC4gVGhpcyBhbGxvd3MgdGhlc2UgY2xhc3NlcyB0byBhdm9pZFxuICogZG9pbmcgd29yayBpbiB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgYSBwcm9wZXJ0eSBoYXMgbm8gZXhwbGljaXQgdmFsdWUgc2V0IGFuZCBzaG91bGQgYmUgY29uc2lkZXJlZCB0byB0YWtlXG4gKiBvbiB0aGUgZGVmYXVsdCB2YWx1ZTogdXNpbmcgYGZvciAoY29uc3QgcHJvcGVydHkgb2YgT2JqZWN0LmtleXModGhpcy5fdmFsdWVzKSlgLCB0aGV5IGNhbiBpdGVyYXRlIG92ZXJcbiAqIG9ubHkgdGhlIF9vd25fIHByb3BlcnRpZXMgb2YgYF92YWx1ZXNgLCBza2lwcGluZyByZXBlYXRlZCBjYWxjdWxhdGlvbiBvZiB0cmFuc2l0aW9ucyBhbmQgcG9zc2libGUvZmluYWxcbiAqIGV2YWx1YXRpb25zIGZvciBkZWZhdWx0cywgdGhlIHJlc3VsdCBvZiB3aGljaCB3aWxsIGFsd2F5cyBiZSB0aGUgc2FtZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgUHJvcGVydGllczxQcm9wczogT2JqZWN0PiB7XG4gICAgcHJvcGVydGllczogUHJvcHM7XG4gICAgZGVmYXVsdFByb3BlcnR5VmFsdWVzOiBQcm9wZXJ0eVZhbHVlczxQcm9wcz47XG4gICAgZGVmYXVsdFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZXM6IFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZXM8UHJvcHM+O1xuICAgIGRlZmF1bHRUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZXM6IFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlczxQcm9wcz47XG4gICAgZGVmYXVsdFBvc3NpYmx5RXZhbHVhdGVkVmFsdWVzOiBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWVzPFByb3BzPjtcbiAgICBvdmVycmlkYWJsZVByb3BlcnRpZXM6IEFycmF5PHN0cmluZz47XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiBQcm9wcykge1xuICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICAgICAgICB0aGlzLmRlZmF1bHRQcm9wZXJ0eVZhbHVlcyA9ICh7fTogYW55KTtcbiAgICAgICAgdGhpcy5kZWZhdWx0VHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlcyA9ICh7fTogYW55KTtcbiAgICAgICAgdGhpcy5kZWZhdWx0VHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVzID0gKHt9OiBhbnkpO1xuICAgICAgICB0aGlzLmRlZmF1bHRQb3NzaWJseUV2YWx1YXRlZFZhbHVlcyA9ICh7fTogYW55KTtcbiAgICAgICAgdGhpcy5vdmVycmlkYWJsZVByb3BlcnRpZXMgPSAoW106IGFueSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wID0gcHJvcGVydGllc1twcm9wZXJ0eV07XG4gICAgICAgICAgICBpZiAocHJvcC5zcGVjaWZpY2F0aW9uLm92ZXJyaWRhYmxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vdmVycmlkYWJsZVByb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0UHJvcGVydHlWYWx1ZSA9IHRoaXMuZGVmYXVsdFByb3BlcnR5VmFsdWVzW3Byb3BlcnR5XSA9XG4gICAgICAgICAgICAgICAgbmV3IFByb3BlcnR5VmFsdWUocHJvcCwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWUgPSB0aGlzLmRlZmF1bHRUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWVzW3Byb3BlcnR5XSA9XG4gICAgICAgICAgICAgICAgbmV3IFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZShwcm9wKTtcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlc1twcm9wZXJ0eV0gPVxuICAgICAgICAgICAgICAgIGRlZmF1bHRUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWUudW50cmFuc2l0aW9uZWQoKTtcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFBvc3NpYmx5RXZhbHVhdGVkVmFsdWVzW3Byb3BlcnR5XSA9XG4gICAgICAgICAgICAgICAgZGVmYXVsdFByb3BlcnR5VmFsdWUucG9zc2libHlFdmFsdWF0ZSgoe306IGFueSkpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5yZWdpc3RlcignRGF0YURyaXZlblByb3BlcnR5JywgRGF0YURyaXZlblByb3BlcnR5KTtcbnJlZ2lzdGVyKCdEYXRhQ29uc3RhbnRQcm9wZXJ0eScsIERhdGFDb25zdGFudFByb3BlcnR5KTtcbnJlZ2lzdGVyKCdDcm9zc0ZhZGVkRGF0YURyaXZlblByb3BlcnR5JywgQ3Jvc3NGYWRlZERhdGFEcml2ZW5Qcm9wZXJ0eSk7XG5yZWdpc3RlcignQ3Jvc3NGYWRlZFByb3BlcnR5JywgQ3Jvc3NGYWRlZFByb3BlcnR5KTtcbnJlZ2lzdGVyKCdDb2xvclJhbXBQcm9wZXJ0eScsIENvbG9yUmFtcFByb3BlcnR5KTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7ZW5kc1dpdGgsIGZpbHRlck9iamVjdH0gZnJvbSAnLi4vdXRpbC91dGlsJztcblxuaW1wb3J0IHN0eWxlU3BlYyBmcm9tICcuLi9zdHlsZS1zcGVjL3JlZmVyZW5jZS9sYXRlc3QnO1xuaW1wb3J0IHtcbiAgICB2YWxpZGF0ZVN0eWxlLFxuICAgIHZhbGlkYXRlTGF5b3V0UHJvcGVydHksXG4gICAgdmFsaWRhdGVQYWludFByb3BlcnR5LFxuICAgIGVtaXRWYWxpZGF0aW9uRXJyb3JzXG59IGZyb20gJy4vdmFsaWRhdGVfc3R5bGUnO1xuaW1wb3J0IHtFdmVudGVkfSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IHtMYXlvdXQsIFRyYW5zaXRpb25hYmxlLCBUcmFuc2l0aW9uaW5nLCBQcm9wZXJ0aWVzLCBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWV9IGZyb20gJy4vcHJvcGVydGllcyc7XG5pbXBvcnQge3N1cHBvcnRzUHJvcGVydHlFeHByZXNzaW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIHtGZWF0dXJlU3RhdGV9IGZyb20gJy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSB7QnVja2V0fSBmcm9tICcuLi9kYXRhL2J1Y2tldCc7XG5pbXBvcnQgdHlwZSBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB0eXBlIHtGZWF0dXJlRmlsdGVyfSBmcm9tICcuLi9zdHlsZS1zcGVjL2ZlYXR1cmVfZmlsdGVyJztcbmltcG9ydCB0eXBlIHtUcmFuc2l0aW9uUGFyYW1ldGVycywgUHJvcGVydHlWYWx1ZX0gZnJvbSAnLi9wcm9wZXJ0aWVzJztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25QYXJhbWV0ZXJzLCB7Q3Jvc3NmYWRlUGFyYW1ldGVyc30gZnJvbSAnLi9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuaW1wb3J0IHR5cGUgVHJhbnNmb3JtIGZyb20gJy4uL2dlby90cmFuc2Zvcm0nO1xuaW1wb3J0IHR5cGUge1xuICAgIExheWVyU3BlY2lmaWNhdGlvbixcbiAgICBGaWx0ZXJTcGVjaWZpY2F0aW9uXG59IGZyb20gJy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuaW1wb3J0IHR5cGUge0N1c3RvbUxheWVySW50ZXJmYWNlfSBmcm9tICcuL3N0eWxlX2xheWVyL2N1c3RvbV9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vdWkvbWFwJztcbmltcG9ydCB0eXBlIHtTdHlsZVNldHRlck9wdGlvbnN9IGZyb20gJy4vc3R5bGUnO1xuXG5jb25zdCBUUkFOU0lUSU9OX1NVRkZJWCA9ICctdHJhbnNpdGlvbic7XG5cbmNsYXNzIFN0eWxlTGF5ZXIgZXh0ZW5kcyBFdmVudGVkIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIG1ldGFkYXRhOiBtaXhlZDtcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgc291cmNlOiBzdHJpbmc7XG4gICAgc291cmNlTGF5ZXI6ID9zdHJpbmc7XG4gICAgbWluem9vbTogP251bWJlcjtcbiAgICBtYXh6b29tOiA/bnVtYmVyO1xuICAgIGZpbHRlcjogRmlsdGVyU3BlY2lmaWNhdGlvbiB8IHZvaWQ7XG4gICAgdmlzaWJpbGl0eTogJ3Zpc2libGUnIHwgJ25vbmUnIHwgdm9pZDtcbiAgICBfY3Jvc3NmYWRlUGFyYW1ldGVyczogQ3Jvc3NmYWRlUGFyYW1ldGVycztcblxuICAgIF91bmV2YWx1YXRlZExheW91dDogTGF5b3V0PGFueT47XG4gICAgK2xheW91dDogbWl4ZWQ7XG5cbiAgICBfdHJhbnNpdGlvbmFibGVQYWludDogVHJhbnNpdGlvbmFibGU8YW55PjtcbiAgICBfdHJhbnNpdGlvbmluZ1BhaW50OiBUcmFuc2l0aW9uaW5nPGFueT47XG4gICAgK3BhaW50OiBtaXhlZDtcblxuICAgIF9mZWF0dXJlRmlsdGVyOiBGZWF0dXJlRmlsdGVyO1xuXG4gICAgK3F1ZXJ5UmFkaXVzOiAoYnVja2V0OiBCdWNrZXQpID0+IG51bWJlcjtcbiAgICArcXVlcnlJbnRlcnNlY3RzRmVhdHVyZTogKHF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmU6IFZlY3RvclRpbGVGZWF0dXJlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZVN0YXRlOiBGZWF0dXJlU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeTogQXJyYXk8QXJyYXk8UG9pbnQ+PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpvb206IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxzVG9UaWxlVW5pdHM6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsUG9zTWF0cml4OiBGbG9hdDMyQXJyYXkpID0+IGJvb2xlYW4gfCBudW1iZXI7XG5cbiAgICArb25BZGQ6ID8obWFwOiBNYXApID0+IHZvaWQ7XG4gICAgK29uUmVtb3ZlOiA/KG1hcDogTWFwKSA9PiB2b2lkO1xuXG4gICAgY29uc3RydWN0b3IobGF5ZXI6IExheWVyU3BlY2lmaWNhdGlvbiB8IEN1c3RvbUxheWVySW50ZXJmYWNlLCBwcm9wZXJ0aWVzOiAkUmVhZE9ubHk8e2xheW91dD86IFByb3BlcnRpZXM8Kj4sIHBhaW50PzogUHJvcGVydGllczwqPn0+KSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5pZCA9IGxheWVyLmlkO1xuICAgICAgICB0aGlzLnR5cGUgPSBsYXllci50eXBlO1xuICAgICAgICB0aGlzLl9mZWF0dXJlRmlsdGVyID0ge2ZpbHRlcjogKCkgPT4gdHJ1ZSwgbmVlZEdlb21ldHJ5OiBmYWxzZX07XG5cbiAgICAgICAgaWYgKGxheWVyLnR5cGUgPT09ICdjdXN0b20nKSByZXR1cm47XG5cbiAgICAgICAgbGF5ZXIgPSAoKGxheWVyOiBhbnkpOiBMYXllclNwZWNpZmljYXRpb24pO1xuXG4gICAgICAgIHRoaXMubWV0YWRhdGEgPSBsYXllci5tZXRhZGF0YTtcbiAgICAgICAgdGhpcy5taW56b29tID0gbGF5ZXIubWluem9vbTtcbiAgICAgICAgdGhpcy5tYXh6b29tID0gbGF5ZXIubWF4em9vbTtcblxuICAgICAgICBpZiAobGF5ZXIudHlwZSAhPT0gJ2JhY2tncm91bmQnKSB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZSA9IGxheWVyLnNvdXJjZTtcbiAgICAgICAgICAgIHRoaXMuc291cmNlTGF5ZXIgPSBsYXllclsnc291cmNlLWxheWVyJ107XG4gICAgICAgICAgICB0aGlzLmZpbHRlciA9IGxheWVyLmZpbHRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wZXJ0aWVzLmxheW91dCkge1xuICAgICAgICAgICAgdGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQgPSBuZXcgTGF5b3V0KHByb3BlcnRpZXMubGF5b3V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wZXJ0aWVzLnBhaW50KSB7XG4gICAgICAgICAgICB0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50ID0gbmV3IFRyYW5zaXRpb25hYmxlKHByb3BlcnRpZXMucGFpbnQpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIGxheWVyLnBhaW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRQYWludFByb3BlcnR5KHByb3BlcnR5LCBsYXllci5wYWludFtwcm9wZXJ0eV0sIHt2YWxpZGF0ZTogZmFsc2V9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gbGF5ZXIubGF5b3V0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRMYXlvdXRQcm9wZXJ0eShwcm9wZXJ0eSwgbGF5ZXIubGF5b3V0W3Byb3BlcnR5XSwge3ZhbGlkYXRlOiBmYWxzZX0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQgPSB0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50LnVudHJhbnNpdGlvbmVkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRDcm9zc2ZhZGVQYXJhbWV0ZXJzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3Jvc3NmYWRlUGFyYW1ldGVycztcbiAgICB9XG5cbiAgICBnZXRMYXlvdXRQcm9wZXJ0eShuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKG5hbWUgPT09ICd2aXNpYmlsaXR5Jykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmlzaWJpbGl0eTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl91bmV2YWx1YXRlZExheW91dC5nZXRWYWx1ZShuYW1lKTtcbiAgICB9XG5cbiAgICBzZXRMYXlvdXRQcm9wZXJ0eShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksIG9wdGlvbnM6IFN0eWxlU2V0dGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBgbGF5ZXJzLiR7dGhpcy5pZH0ubGF5b3V0LiR7bmFtZX1gO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbGlkYXRlKHZhbGlkYXRlTGF5b3V0UHJvcGVydHksIGtleSwgbmFtZSwgdmFsdWUsIG9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5hbWUgPT09ICd2aXNpYmlsaXR5Jykge1xuICAgICAgICAgICAgdGhpcy52aXNpYmlsaXR5ID0gdmFsdWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl91bmV2YWx1YXRlZExheW91dC5zZXRWYWx1ZShuYW1lLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0UGFpbnRQcm9wZXJ0eShuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKGVuZHNXaXRoKG5hbWUsIFRSQU5TSVRJT05fU1VGRklYKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuZ2V0VHJhbnNpdGlvbihuYW1lLnNsaWNlKDAsIC1UUkFOU0lUSU9OX1NVRkZJWC5sZW5ndGgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50LmdldFZhbHVlKG5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0UGFpbnRQcm9wZXJ0eShuYW1lOiBzdHJpbmcsIHZhbHVlOiBtaXhlZCwgb3B0aW9uczogU3R5bGVTZXR0ZXJPcHRpb25zID0ge30pIHtcbiAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGBsYXllcnMuJHt0aGlzLmlkfS5wYWludC4ke25hbWV9YDtcbiAgICAgICAgICAgIGlmICh0aGlzLl92YWxpZGF0ZSh2YWxpZGF0ZVBhaW50UHJvcGVydHksIGtleSwgbmFtZSwgdmFsdWUsIG9wdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVuZHNXaXRoKG5hbWUsIFRSQU5TSVRJT05fU1VGRklYKSkge1xuICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5zZXRUcmFuc2l0aW9uKG5hbWUuc2xpY2UoMCwgLVRSQU5TSVRJT05fU1VGRklYLmxlbmd0aCksICh2YWx1ZTogYW55KSB8fCB1bmRlZmluZWQpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdHJhbnNpdGlvbmFibGUgPSB0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50Ll92YWx1ZXNbbmFtZV07XG4gICAgICAgICAgICBjb25zdCBpc0Nyb3NzRmFkZWRQcm9wZXJ0eSA9IHRyYW5zaXRpb25hYmxlLnByb3BlcnR5LnNwZWNpZmljYXRpb25bXCJwcm9wZXJ0eS10eXBlXCJdID09PSAnY3Jvc3MtZmFkZWQtZGF0YS1kcml2ZW4nO1xuICAgICAgICAgICAgY29uc3Qgd2FzRGF0YURyaXZlbiA9IHRyYW5zaXRpb25hYmxlLnZhbHVlLmlzRGF0YURyaXZlbigpO1xuICAgICAgICAgICAgY29uc3Qgb2xkVmFsdWUgPSB0cmFuc2l0aW9uYWJsZS52YWx1ZTtcblxuICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5zZXRWYWx1ZShuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVTcGVjaWFsUGFpbnRQcm9wZXJ0eVVwZGF0ZShuYW1lKTtcblxuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50Ll92YWx1ZXNbbmFtZV0udmFsdWU7XG4gICAgICAgICAgICBjb25zdCBpc0RhdGFEcml2ZW4gPSBuZXdWYWx1ZS5pc0RhdGFEcml2ZW4oKTtcblxuICAgICAgICAgICAgLy8gaWYgYSBjcm9zcy1mYWRlZCB2YWx1ZSBpcyBjaGFuZ2VkLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgbmV3IGljb25zIGdldCBhZGRlZCB0byBlYWNoIHRpbGUncyBpY29uQXRsYXNcbiAgICAgICAgICAgIC8vIHNvIGEgY2FsbCB0byBfdXBkYXRlTGF5ZXIgaXMgbmVjZXNzYXJ5LCBhbmQgd2UgcmV0dXJuIHRydWUgZnJvbSB0aGlzIGZ1bmN0aW9uIHNvIGl0IGdldHMgY2FsbGVkIGluXG4gICAgICAgICAgICAvLyBTdHlsZSNzZXRQYWludFByb3BlcnR5XG4gICAgICAgICAgICByZXR1cm4gaXNEYXRhRHJpdmVuIHx8IHdhc0RhdGFEcml2ZW4gfHwgaXNDcm9zc0ZhZGVkUHJvcGVydHkgfHwgdGhpcy5faGFuZGxlT3ZlcnJpZGFibGVQYWludFByb3BlcnR5VXBkYXRlKG5hbWUsIG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfaGFuZGxlU3BlY2lhbFBhaW50UHJvcGVydHlVcGRhdGUoXzogc3RyaW5nKSB7XG4gICAgICAgIC8vIE5vLW9wOyBjYW4gYmUgb3ZlcnJpZGRlbiBieSBkZXJpdmVkIGNsYXNzZXMuXG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgX2hhbmRsZU92ZXJyaWRhYmxlUGFpbnRQcm9wZXJ0eVVwZGF0ZTxULCBSPihuYW1lOiBzdHJpbmcsIG9sZFZhbHVlOiBQcm9wZXJ0eVZhbHVlPFQsIFI+LCBuZXdWYWx1ZTogUHJvcGVydHlWYWx1ZTxULCBSPik6IGJvb2xlYW4ge1xuICAgICAgICAvLyBOby1vcDsgY2FuIGJlIG92ZXJyaWRkZW4gYnkgZGVyaXZlZCBjbGFzc2VzLlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaXNIaWRkZW4oem9vbTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLm1pbnpvb20gJiYgem9vbSA8IHRoaXMubWluem9vbSkgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICh0aGlzLm1heHpvb20gJiYgem9vbSA+PSB0aGlzLm1heHpvb20pIHJldHVybiB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcy52aXNpYmlsaXR5ID09PSAnbm9uZSc7XG4gICAgfVxuXG4gICAgdXBkYXRlVHJhbnNpdGlvbnMocGFyYW1ldGVyczogVHJhbnNpdGlvblBhcmFtZXRlcnMpIHtcbiAgICAgICAgdGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50ID0gdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC50cmFuc2l0aW9uZWQocGFyYW1ldGVycywgdGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50KTtcbiAgICB9XG5cbiAgICBoYXNUcmFuc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50Lmhhc1RyYW5zaXRpb24oKTtcbiAgICB9XG5cbiAgICByZWNhbGN1bGF0ZShwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycywgYXZhaWxhYmxlSW1hZ2VzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIGlmIChwYXJhbWV0ZXJzLmdldENyb3NzZmFkZVBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgIHRoaXMuX2Nyb3NzZmFkZVBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzLmdldENyb3NzZmFkZVBhcmFtZXRlcnMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl91bmV2YWx1YXRlZExheW91dCkge1xuICAgICAgICAgICAgKHRoaXM6IGFueSkubGF5b3V0ID0gdGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQucG9zc2libHlFdmFsdWF0ZShwYXJhbWV0ZXJzLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgKHRoaXM6IGFueSkucGFpbnQgPSB0aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQucG9zc2libHlFdmFsdWF0ZShwYXJhbWV0ZXJzLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgY29uc3Qgb3V0cHV0OiBhbnkgPSB7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLmlkLFxuICAgICAgICAgICAgJ3R5cGUnOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICAnc291cmNlJzogdGhpcy5zb3VyY2UsXG4gICAgICAgICAgICAnc291cmNlLWxheWVyJzogdGhpcy5zb3VyY2VMYXllcixcbiAgICAgICAgICAgICdtZXRhZGF0YSc6IHRoaXMubWV0YWRhdGEsXG4gICAgICAgICAgICAnbWluem9vbSc6IHRoaXMubWluem9vbSxcbiAgICAgICAgICAgICdtYXh6b29tJzogdGhpcy5tYXh6b29tLFxuICAgICAgICAgICAgJ2ZpbHRlcic6IHRoaXMuZmlsdGVyLFxuICAgICAgICAgICAgJ2xheW91dCc6IHRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0ICYmIHRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0LnNlcmlhbGl6ZSgpLFxuICAgICAgICAgICAgJ3BhaW50JzogdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludCAmJiB0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50LnNlcmlhbGl6ZSgpXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMudmlzaWJpbGl0eSkge1xuICAgICAgICAgICAgb3V0cHV0LmxheW91dCA9IG91dHB1dC5sYXlvdXQgfHwge307XG4gICAgICAgICAgICBvdXRwdXQubGF5b3V0LnZpc2liaWxpdHkgPSB0aGlzLnZpc2liaWxpdHk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmlsdGVyT2JqZWN0KG91dHB1dCwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgIShrZXkgPT09ICdsYXlvdXQnICYmICFPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoKSAmJlxuICAgICAgICAgICAgICAgICEoa2V5ID09PSAncGFpbnQnICYmICFPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX3ZhbGlkYXRlKHZhbGlkYXRlOiBGdW5jdGlvbiwga2V5OiBzdHJpbmcsIG5hbWU6IHN0cmluZywgdmFsdWU6IG1peGVkLCBvcHRpb25zOiBTdHlsZVNldHRlck9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnZhbGlkYXRlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbWl0VmFsaWRhdGlvbkVycm9ycyh0aGlzLCB2YWxpZGF0ZS5jYWxsKHZhbGlkYXRlU3R5bGUsIHtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIGxheWVyVHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgb2JqZWN0S2V5OiBuYW1lLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBzdHlsZVNwZWMsXG4gICAgICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvMjQwN1xuICAgICAgICAgICAgc3R5bGU6IHtnbHlwaHM6IHRydWUsIHNwcml0ZTogdHJ1ZX1cbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIGlzM0QoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpc1RpbGVDbGlwcGVkKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaGFzT2Zmc2NyZWVuUGFzcygpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJlc2l6ZSgpIHtcbiAgICAgICAgLy8gbm9vcFxuICAgIH1cblxuICAgIGlzU3RhdGVEZXBlbmRlbnQoKSB7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gKHRoaXM6IGFueSkucGFpbnQuX3ZhbHVlcykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSAodGhpczogYW55KS5wYWludC5nZXQocHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKCEodmFsdWUgaW5zdGFuY2VvZiBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWUpIHx8ICFzdXBwb3J0c1Byb3BlcnR5RXhwcmVzc2lvbih2YWx1ZS5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoKHZhbHVlLnZhbHVlLmtpbmQgPT09ICdzb3VyY2UnIHx8IHZhbHVlLnZhbHVlLmtpbmQgPT09ICdjb21wb3NpdGUnKSAmJlxuICAgICAgICAgICAgICAgIHZhbHVlLnZhbHVlLmlzU3RhdGVEZXBlbmRlbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTdHlsZUxheWVyO1xuIiwiLy8gQGZsb3dcblxuLy8gTm90ZTogYWxsIFwic2l6ZXNcIiBhcmUgbWVhc3VyZWQgaW4gYnl0ZXNcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgdHlwZSB7VHJhbnNmZXJhYmxlfSBmcm9tICcuLi90eXBlcy90cmFuc2ZlcmFibGUnO1xuXG5jb25zdCB2aWV3VHlwZXMgPSB7XG4gICAgJ0ludDgnOiBJbnQ4QXJyYXksXG4gICAgJ1VpbnQ4JzogVWludDhBcnJheSxcbiAgICAnSW50MTYnOiBJbnQxNkFycmF5LFxuICAgICdVaW50MTYnOiBVaW50MTZBcnJheSxcbiAgICAnSW50MzInOiBJbnQzMkFycmF5LFxuICAgICdVaW50MzInOiBVaW50MzJBcnJheSxcbiAgICAnRmxvYXQzMic6IEZsb2F0MzJBcnJheVxufTtcblxuZXhwb3J0IHR5cGUgVmlld1R5cGUgPSAkS2V5czx0eXBlb2Ygdmlld1R5cGVzPjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3Qge1xuICAgIF9wb3MxOiBudW1iZXI7XG4gICAgX3BvczI6IG51bWJlcjtcbiAgICBfcG9zNDogbnVtYmVyO1xuICAgIF9wb3M4OiBudW1iZXI7XG4gICAgK19zdHJ1Y3RBcnJheTogU3RydWN0QXJyYXk7XG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgYXJlIGRlZmluZWQgb24gdGhlIHByb3RvdHlwZSBvZiBzdWIgY2xhc3Nlcy5cbiAgICBzaXplOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0cnVjdEFycmF5fSBzdHJ1Y3RBcnJheSBUaGUgU3RydWN0QXJyYXkgdGhlIHN0cnVjdCBpcyBzdG9yZWQgaW5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBzdHJ1Y3QgaW4gdGhlIFN0cnVjdEFycmF5LlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY29uc3RydWN0b3Ioc3RydWN0QXJyYXk6IFN0cnVjdEFycmF5LCBpbmRleDogbnVtYmVyKSB7XG4gICAgICAgICh0aGlzOiBhbnkpLl9zdHJ1Y3RBcnJheSA9IHN0cnVjdEFycmF5O1xuICAgICAgICB0aGlzLl9wb3MxID0gaW5kZXggKiB0aGlzLnNpemU7XG4gICAgICAgIHRoaXMuX3BvczIgPSB0aGlzLl9wb3MxIC8gMjtcbiAgICAgICAgdGhpcy5fcG9zNCA9IHRoaXMuX3BvczEgLyA0O1xuICAgICAgICB0aGlzLl9wb3M4ID0gdGhpcy5fcG9zMSAvIDg7XG4gICAgfVxufVxuXG5jb25zdCBERUZBVUxUX0NBUEFDSVRZID0gMTI4O1xuY29uc3QgUkVTSVpFX01VTFRJUExJRVIgPSA1O1xuXG5leHBvcnQgdHlwZSBTdHJ1Y3RBcnJheU1lbWJlciA9IHtcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgdHlwZTogVmlld1R5cGUsXG4gICAgY29tcG9uZW50czogbnVtYmVyLFxuICAgIG9mZnNldDogbnVtYmVyXG59O1xuXG5leHBvcnQgdHlwZSBTdHJ1Y3RBcnJheUxheW91dCA9IHtcbiAgICBtZW1iZXJzOiBBcnJheTxTdHJ1Y3RBcnJheU1lbWJlcj4sXG4gICAgc2l6ZTogbnVtYmVyLFxuICAgIGFsaWdubWVudDogP251bWJlclxufVxuXG5leHBvcnQgdHlwZSBTZXJpYWxpemVkU3RydWN0QXJyYXkgPSB7XG4gICAgbGVuZ3RoOiBudW1iZXIsXG4gICAgYXJyYXlCdWZmZXI6IEFycmF5QnVmZmVyXG59O1xuXG4vKipcbiAqIGBTdHJ1Y3RBcnJheWAgcHJvdmlkZXMgYW4gYWJzdHJhY3Rpb24gb3ZlciBgQXJyYXlCdWZmZXJgIGFuZCBgVHlwZWRBcnJheWBcbiAqIG1ha2luZyBpdCBiZWhhdmUgbGlrZSBhbiBhcnJheSBvZiB0eXBlZCBzdHJ1Y3RzLlxuICpcbiAqIENvbmNlcHR1YWxseSwgYSBTdHJ1Y3RBcnJheSBpcyBjb21wcmlzZWQgb2YgZWxlbWVudHMsIGkuZS4sIGluc3RhbmNlcyBvZiBpdHNcbiAqIGFzc29jaWF0ZWQgc3RydWN0IHR5cGUuIEVhY2ggcGFydGljdWxhciBzdHJ1Y3QgdHlwZSwgdG9nZXRoZXIgd2l0aCBhblxuICogYWxpZ25tZW50IHNpemUsIGRldGVybWluZXMgdGhlIG1lbW9yeSBsYXlvdXQgb2YgYSBTdHJ1Y3RBcnJheSB3aG9zZSBlbGVtZW50c1xuICogYXJlIG9mIHRoYXQgdHlwZS4gIFRodXMsIGZvciBlYWNoIHN1Y2ggbGF5b3V0IHRoYXQgd2UgbmVlZCwgd2UgaGF2ZVxuICogYSBjb3Jyc2Vwb25kaW5nIFN0cnVjdEFycmF5TGF5b3V0IGNsYXNzLCBpbmhlcml0aW5nIGZyb20gU3RydWN0QXJyYXkgYW5kXG4gKiBpbXBsZW1lbnRpbmcgYGVtcGxhY2VCYWNrKClgIGFuZCBgX3JlZnJlc2hWaWV3cygpYC5cbiAqXG4gKiBJbiBzb21lIGNhc2VzLCB3aGVyZSB3ZSBuZWVkIHRvIGFjY2VzcyBwYXJ0aWN1bGFyIGVsZW1lbnRzIG9mIGEgU3RydWN0QXJyYXksXG4gKiB3ZSBpbXBsZW1lbnQgYSBtb3JlIHNwZWNpZmljIHN1YmNsYXNzIHRoYXQgaW5oZXJpdHMgZnJvbSBvbmUgb2YgdGhlXG4gKiBTdHJ1Y3RBcnJheUxheW91dHMgYW5kIGFkZHMgYSBgZ2V0KGkpOiBUYCBhY2Nlc3NvciB0aGF0IHJldHVybnMgYSBzdHJ1Y3R1cmVkXG4gKiBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhcmUgcHJveGllcyBpbnRvIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBzcGFjZSBmb3IgdGhlXG4gKiBpLXRoIGVsZW1lbnQuICBUaGlzIGFmZm9yZHMgdGhlIGNvbnZpZW5jZSBvZiB3b3JraW5nIHdpdGggKHNlZW1pbmdseSkgcGxhaW5cbiAqIEphdmFzY3JpcHQgb2JqZWN0cyB3aXRob3V0IHRoZSBvdmVyaGVhZCBvZiBzZXJpYWxpemluZy9kZXNlcmlhbGl6aW5nIHRoZW1cbiAqIGludG8gQXJyYXlCdWZmZXJzIGZvciBlZmZpY2llbnQgd2ViIHdvcmtlciB0cmFuc2Zlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheSB7XG4gICAgY2FwYWNpdHk6IG51bWJlcjtcbiAgICBsZW5ndGg6IG51bWJlcjtcbiAgICBpc1RyYW5zZmVycmVkOiBib29sZWFuO1xuICAgIGFycmF5QnVmZmVyOiBBcnJheUJ1ZmZlcjtcbiAgICB1aW50ODogVWludDhBcnJheTtcblxuICAgIC8vIFRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBhcmUgZGVmaW5lZCBvbiB0aGUgcHJvdG90eXBlLlxuICAgIG1lbWJlcnM6IEFycmF5PFN0cnVjdEFycmF5TWVtYmVyPjtcbiAgICBieXRlc1BlckVsZW1lbnQ6IG51bWJlcjtcbiAgICArZW1wbGFjZUJhY2s6IEZ1bmN0aW9uO1xuICAgICtlbXBsYWNlOiBGdW5jdGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmlzVHJhbnNmZXJyZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jYXBhY2l0eSA9IC0xO1xuICAgICAgICB0aGlzLnJlc2l6ZSgwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXJpYWxpemUgYSBTdHJ1Y3RBcnJheSBpbnN0YW5jZS4gIFNlcmlhbGl6ZXMgYm90aCB0aGUgcmF3IGRhdGEgYW5kIHRoZVxuICAgICAqIG1ldGFkYXRhIG5lZWRlZCB0byByZWNvbnN0cnVjdCB0aGUgU3RydWN0QXJyYXkgYmFzZSBjbGFzcyBkdXJpbmdcbiAgICAgKiBkZXNlcmlhbGl6YXRpb24uXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBzdGF0aWMgc2VyaWFsaXplKGFycmF5OiBTdHJ1Y3RBcnJheSwgdHJhbnNmZXJhYmxlcz86IEFycmF5PFRyYW5zZmVyYWJsZT4pOiBTZXJpYWxpemVkU3RydWN0QXJyYXkge1xuICAgICAgICBhc3NlcnQoIWFycmF5LmlzVHJhbnNmZXJyZWQpO1xuXG4gICAgICAgIGFycmF5Ll90cmltKCk7XG5cbiAgICAgICAgaWYgKHRyYW5zZmVyYWJsZXMpIHtcbiAgICAgICAgICAgIGFycmF5LmlzVHJhbnNmZXJyZWQgPSB0cnVlO1xuICAgICAgICAgICAgdHJhbnNmZXJhYmxlcy5wdXNoKGFycmF5LmFycmF5QnVmZmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsZW5ndGg6IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgICAgIGFycmF5QnVmZmVyOiBhcnJheS5hcnJheUJ1ZmZlcixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZGVzZXJpYWxpemUoaW5wdXQ6IFNlcmlhbGl6ZWRTdHJ1Y3RBcnJheSkge1xuICAgICAgICBjb25zdCBzdHJ1Y3RBcnJheSA9IE9iamVjdC5jcmVhdGUodGhpcy5wcm90b3R5cGUpO1xuICAgICAgICBzdHJ1Y3RBcnJheS5hcnJheUJ1ZmZlciA9IGlucHV0LmFycmF5QnVmZmVyO1xuICAgICAgICBzdHJ1Y3RBcnJheS5sZW5ndGggPSBpbnB1dC5sZW5ndGg7XG4gICAgICAgIHN0cnVjdEFycmF5LmNhcGFjaXR5ID0gaW5wdXQuYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aCAvIHN0cnVjdEFycmF5LmJ5dGVzUGVyRWxlbWVudDtcbiAgICAgICAgc3RydWN0QXJyYXkuX3JlZnJlc2hWaWV3cygpO1xuICAgICAgICByZXR1cm4gc3RydWN0QXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzaXplIHRoZSBhcnJheSB0byBkaXNjYXJkIHVudXNlZCBjYXBhY2l0eS5cbiAgICAgKi9cbiAgICBfdHJpbSgpIHtcbiAgICAgICAgaWYgKHRoaXMubGVuZ3RoICE9PSB0aGlzLmNhcGFjaXR5KSB7XG4gICAgICAgICAgICB0aGlzLmNhcGFjaXR5ID0gdGhpcy5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLmFycmF5QnVmZmVyID0gdGhpcy5hcnJheUJ1ZmZlci5zbGljZSgwLCB0aGlzLmxlbmd0aCAqIHRoaXMuYnl0ZXNQZXJFbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hWaWV3cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzZXRzIHRoZSB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSB0byAwIHdpdGhvdXQgZGUtYWxsb2NhdGluZyBjYXBjYWNpdHkuXG4gICAgICovXG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNpemUgdGhlIGFycmF5LlxuICAgICAqIElmIGBuYCBpcyBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgbGVuZ3RoIHRoZW4gYWRkaXRpb25hbCBlbGVtZW50cyB3aXRoIHVuZGVmaW5lZCB2YWx1ZXMgYXJlIGFkZGVkLlxuICAgICAqIElmIGBuYCBpcyBsZXNzIHRoYW4gdGhlIGN1cnJlbnQgbGVuZ3RoIHRoZW4gdGhlIGFycmF5IHdpbGwgYmUgcmVkdWNlZCB0byB0aGUgZmlyc3QgYG5gIGVsZW1lbnRzLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBuZXcgc2l6ZSBvZiB0aGUgYXJyYXkuXG4gICAgICovXG4gICAgcmVzaXplKG46IG51bWJlcikge1xuICAgICAgICBhc3NlcnQoIXRoaXMuaXNUcmFuc2ZlcnJlZCk7XG4gICAgICAgIHRoaXMucmVzZXJ2ZShuKTtcbiAgICAgICAgdGhpcy5sZW5ndGggPSBuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlIGEgcGxhbm5lZCBpbmNyZWFzZSBpbiBzaXplLCBzbyB0aGF0IGFueSBuZWNlc3NhcnkgYWxsb2NhdGlvbiBtYXlcbiAgICAgKiBiZSBkb25lIG9uY2UsIGFoZWFkIG9mIHRpbWUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIGV4cGVjdGVkIHNpemUgb2YgdGhlIGFycmF5LlxuICAgICAqL1xuICAgIHJlc2VydmUobjogbnVtYmVyKSB7XG4gICAgICAgIGlmIChuID4gdGhpcy5jYXBhY2l0eSkge1xuICAgICAgICAgICAgdGhpcy5jYXBhY2l0eSA9IE1hdGgubWF4KG4sIE1hdGguZmxvb3IodGhpcy5jYXBhY2l0eSAqIFJFU0laRV9NVUxUSVBMSUVSKSwgREVGQVVMVF9DQVBBQ0lUWSk7XG4gICAgICAgICAgICB0aGlzLmFycmF5QnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKHRoaXMuY2FwYWNpdHkgKiB0aGlzLmJ5dGVzUGVyRWxlbWVudCk7XG5cbiAgICAgICAgICAgIGNvbnN0IG9sZFVpbnQ4QXJyYXkgPSB0aGlzLnVpbnQ4O1xuICAgICAgICAgICAgdGhpcy5fcmVmcmVzaFZpZXdzKCk7XG4gICAgICAgICAgICBpZiAob2xkVWludDhBcnJheSkgdGhpcy51aW50OC5zZXQob2xkVWludDhBcnJheSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgVHlwZWRBcnJheSB2aWV3cyBmb3IgdGhlIGN1cnJlbnQgQXJyYXlCdWZmZXIuXG4gICAgICovXG4gICAgX3JlZnJlc2hWaWV3cygpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdfcmVmcmVzaFZpZXdzKCkgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIGNvbmNyZXRlIFN0cnVjdEFycmF5IGxheW91dCcpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBHaXZlbiBhIGxpc3Qgb2YgbWVtYmVyIGZpZWxkcywgY3JlYXRlIGEgZnVsbCBTdHJ1Y3RBcnJheUxheW91dCwgaW5cbiAqIHBhcnRpY3VsYXIgY2FsY3VsYXRpbmcgdGhlIGNvcnJlY3QgYnl0ZSBvZmZzZXQgZm9yIGVhY2ggZmllbGQuICBUaGlzIGRhdGFcbiAqIGlzIHVzZWQgYXQgYnVpbGQgdGltZSB0byBnZW5lcmF0ZSBTdHJ1Y3RBcnJheUxheW91dF8qI2VtcGxhY2VCYWNrKCkgYW5kXG4gKiBvdGhlciBhY2Nlc3NvcnMsIGFuZCBhdCBydW50aW1lIGZvciBiaW5kaW5nIHZlcnRleCBidWZmZXIgYXR0cmlidXRlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjcmVhdGVMYXlvdXQoXG4gICAgbWVtYmVyczogQXJyYXk8eyBuYW1lOiBzdHJpbmcsIHR5cGU6IFZpZXdUeXBlLCArY29tcG9uZW50cz86IG51bWJlciwgfT4sXG4gICAgYWxpZ25tZW50OiBudW1iZXIgPSAxXG4pOiBTdHJ1Y3RBcnJheUxheW91dCB7XG5cbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICBsZXQgbWF4U2l6ZSA9IDA7XG4gICAgY29uc3QgbGF5b3V0TWVtYmVycyA9IG1lbWJlcnMubWFwKChtZW1iZXIpID0+IHtcbiAgICAgICAgYXNzZXJ0KG1lbWJlci5uYW1lLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IHR5cGVTaXplID0gc2l6ZU9mKG1lbWJlci50eXBlKTtcbiAgICAgICAgY29uc3QgbWVtYmVyT2Zmc2V0ID0gb2Zmc2V0ID0gYWxpZ24ob2Zmc2V0LCBNYXRoLm1heChhbGlnbm1lbnQsIHR5cGVTaXplKSk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBtZW1iZXIuY29tcG9uZW50cyB8fCAxO1xuXG4gICAgICAgIG1heFNpemUgPSBNYXRoLm1heChtYXhTaXplLCB0eXBlU2l6ZSk7XG4gICAgICAgIG9mZnNldCArPSB0eXBlU2l6ZSAqIGNvbXBvbmVudHM7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IG1lbWJlci5uYW1lLFxuICAgICAgICAgICAgdHlwZTogbWVtYmVyLnR5cGUsXG4gICAgICAgICAgICBjb21wb25lbnRzLFxuICAgICAgICAgICAgb2Zmc2V0OiBtZW1iZXJPZmZzZXQsXG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjb25zdCBzaXplID0gYWxpZ24ob2Zmc2V0LCBNYXRoLm1heChtYXhTaXplLCBhbGlnbm1lbnQpKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIG1lbWJlcnM6IGxheW91dE1lbWJlcnMsXG4gICAgICAgIHNpemUsXG4gICAgICAgIGFsaWdubWVudFxuICAgIH07XG59XG5cbmZ1bmN0aW9uIHNpemVPZih0eXBlOiBWaWV3VHlwZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHZpZXdUeXBlc1t0eXBlXS5CWVRFU19QRVJfRUxFTUVOVDtcbn1cblxuZnVuY3Rpb24gYWxpZ24ob2Zmc2V0OiBudW1iZXIsIHNpemU6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGguY2VpbChvZmZzZXQgLyBzaXplKSAqIHNpemU7XG59XG5cbmV4cG9ydCB7U3RydWN0QXJyYXksIFN0cnVjdCwgdmlld1R5cGVzLCBjcmVhdGVMYXlvdXR9O1xuIiwiLy8gVGhpcyBmaWxlIGlzIGdlbmVyYXRlZC4gRWRpdCBidWlsZC9nZW5lcmF0ZS1zdHJ1Y3QtYXJyYXlzLmpzLCB0aGVuIHJ1biBgeWFybiBydW4gY29kZWdlbmAuXG4vLyBAZmxvd1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQge1N0cnVjdCwgU3RydWN0QXJyYXl9IGZyb20gJy4uL3V0aWwvc3RydWN0X2FycmF5JztcbmltcG9ydCB7cmVnaXN0ZXJ9IGZyb20gJy4uL3V0aWwvd2ViX3dvcmtlcl90cmFuc2Zlcic7XG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogSW50MTZbMl1cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheUxheW91dDJpNCBleHRlbmRzIFN0cnVjdEFycmF5IHtcbiAgICB1aW50ODogVWludDhBcnJheTtcbiAgICBpbnQxNjogSW50MTZBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy5pbnQxNiA9IG5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIGVtcGxhY2VCYWNrKHYwOiBudW1iZXIsIHYxOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaSA9IHRoaXMubGVuZ3RoO1xuICAgICAgICB0aGlzLnJlc2l6ZShpICsgMSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVtcGxhY2UoaSwgdjAsIHYxKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlciwgdjE6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvMiA9IGkgKiAyO1xuICAgICAgICB0aGlzLmludDE2W28yICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDFdID0gdjE7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQyaTQucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDQ7XG5yZWdpc3RlcignU3RydWN0QXJyYXlMYXlvdXQyaTQnLCBTdHJ1Y3RBcnJheUxheW91dDJpNCk7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogSW50MTZbNF1cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheUxheW91dDRpOCBleHRlbmRzIFN0cnVjdEFycmF5IHtcbiAgICB1aW50ODogVWludDhBcnJheTtcbiAgICBpbnQxNjogSW50MTZBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy5pbnQxNiA9IG5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIGVtcGxhY2VCYWNrKHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIsIHYzOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaSA9IHRoaXMubGVuZ3RoO1xuICAgICAgICB0aGlzLnJlc2l6ZShpICsgMSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVtcGxhY2UoaSwgdjAsIHYxLCB2MiwgdjMpO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG8yID0gaSAqIDQ7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAwXSA9IHYwO1xuICAgICAgICB0aGlzLmludDE2W28yICsgMV0gPSB2MTtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDJdID0gdjI7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAzXSA9IHYzO1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0NGk4LnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSA4O1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0NGk4JywgU3RydWN0QXJyYXlMYXlvdXQ0aTgpO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IEludDE2WzJdXG4gKiBbNF06IEludDE2WzRdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQyaTRpMTIgZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgaW50MTY6IEludDE2QXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMuaW50MTYgPSBuZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyLCB2NDogbnVtYmVyLCB2NTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSwgdjIsIHYzLCB2NCwgdjUpO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyLCB2NDogbnVtYmVyLCB2NTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG8yID0gaSAqIDY7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAwXSA9IHYwO1xuICAgICAgICB0aGlzLmludDE2W28yICsgMV0gPSB2MTtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDJdID0gdjI7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAzXSA9IHYzO1xuICAgICAgICB0aGlzLmludDE2W28yICsgNF0gPSB2NDtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDVdID0gdjU7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQyaTRpMTIucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDEyO1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0Mmk0aTEyJywgU3RydWN0QXJyYXlMYXlvdXQyaTRpMTIpO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IEludDE2WzJdXG4gKiBbNF06IFVpbnQ4WzRdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQyaTR1YjggZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgaW50MTY6IEludDE2QXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMuaW50MTYgPSBuZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyLCB2NDogbnVtYmVyLCB2NTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSwgdjIsIHYzLCB2NCwgdjUpO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyLCB2NDogbnVtYmVyLCB2NTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG8yID0gaSAqIDQ7XG4gICAgICAgIGNvbnN0IG8xID0gaSAqIDg7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAwXSA9IHYwO1xuICAgICAgICB0aGlzLmludDE2W28yICsgMV0gPSB2MTtcbiAgICAgICAgdGhpcy51aW50OFtvMSArIDRdID0gdjI7XG4gICAgICAgIHRoaXMudWludDhbbzEgKyA1XSA9IHYzO1xuICAgICAgICB0aGlzLnVpbnQ4W28xICsgNl0gPSB2NDtcbiAgICAgICAgdGhpcy51aW50OFtvMSArIDddID0gdjU7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQyaTR1YjgucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDg7XG5yZWdpc3RlcignU3RydWN0QXJyYXlMYXlvdXQyaTR1YjgnLCBTdHJ1Y3RBcnJheUxheW91dDJpNHViOCk7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogVWludDE2WzhdXG4gKiBbMTZdOiBVaW50OFsyXVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0OHVpMnViMTggZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgdWludDE2OiBVaW50MTZBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy51aW50MTYgPSBuZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlciwgdjQ6IG51bWJlciwgdjU6IG51bWJlciwgdjY6IG51bWJlciwgdjc6IG51bWJlciwgdjg6IG51bWJlciwgdjk6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCwgdjEsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSk7XG4gICAgfVxuXG4gICAgZW1wbGFjZShpOiBudW1iZXIsIHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIsIHYzOiBudW1iZXIsIHY0OiBudW1iZXIsIHY1OiBudW1iZXIsIHY2OiBudW1iZXIsIHY3OiBudW1iZXIsIHY4OiBudW1iZXIsIHY5OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbzIgPSBpICogOTtcbiAgICAgICAgY29uc3QgbzEgPSBpICogMTg7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAxXSA9IHYxO1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDJdID0gdjI7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgM10gPSB2MztcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyA0XSA9IHY0O1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDVdID0gdjU7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgNl0gPSB2NjtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyA3XSA9IHY3O1xuICAgICAgICB0aGlzLnVpbnQ4W28xICsgMTZdID0gdjg7XG4gICAgICAgIHRoaXMudWludDhbbzEgKyAxN10gPSB2OTtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDh1aTJ1YjE4LnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSAxODtcbnJlZ2lzdGVyKCdTdHJ1Y3RBcnJheUxheW91dDh1aTJ1YjE4JywgU3RydWN0QXJyYXlMYXlvdXQ4dWkydWIxOCk7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogSW50MTZbNF1cbiAqIFs4XTogVWludDE2WzRdXG4gKiBbMTZdOiBJbnQxNls0XVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0NGk0dWk0aTI0IGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIGludDE2OiBJbnQxNkFycmF5O1xuICAgIHVpbnQxNjogVWludDE2QXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMuaW50MTYgPSBuZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy51aW50MTYgPSBuZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlciwgdjQ6IG51bWJlciwgdjU6IG51bWJlciwgdjY6IG51bWJlciwgdjc6IG51bWJlciwgdjg6IG51bWJlciwgdjk6IG51bWJlciwgdjEwOiBudW1iZXIsIHYxMTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSwgdjIsIHYzLCB2NCwgdjUsIHY2LCB2NywgdjgsIHY5LCB2MTAsIHYxMSk7XG4gICAgfVxuXG4gICAgZW1wbGFjZShpOiBudW1iZXIsIHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIsIHYzOiBudW1iZXIsIHY0OiBudW1iZXIsIHY1OiBudW1iZXIsIHY2OiBudW1iZXIsIHY3OiBudW1iZXIsIHY4OiBudW1iZXIsIHY5OiBudW1iZXIsIHYxMDogbnVtYmVyLCB2MTE6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvMiA9IGkgKiAxMjtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDBdID0gdjA7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAxXSA9IHYxO1xuICAgICAgICB0aGlzLmludDE2W28yICsgMl0gPSB2MjtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDNdID0gdjM7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgNF0gPSB2NDtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyA1XSA9IHY1O1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDZdID0gdjY7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgN10gPSB2NztcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDhdID0gdjg7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyA5XSA9IHY5O1xuICAgICAgICB0aGlzLmludDE2W28yICsgMTBdID0gdjEwO1xuICAgICAgICB0aGlzLmludDE2W28yICsgMTFdID0gdjExO1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0NGk0dWk0aTI0LnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSAyNDtcbnJlZ2lzdGVyKCdTdHJ1Y3RBcnJheUxheW91dDRpNHVpNGkyNCcsIFN0cnVjdEFycmF5TGF5b3V0NGk0dWk0aTI0KTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBGbG9hdDMyWzNdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQzZjEyIGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIGZsb2F0MzI6IEZsb2F0MzJBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy5mbG9hdDMyID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSwgdjIpO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG80ID0gaSAqIDM7XG4gICAgICAgIHRoaXMuZmxvYXQzMltvNCArIDBdID0gdjA7XG4gICAgICAgIHRoaXMuZmxvYXQzMltvNCArIDFdID0gdjE7XG4gICAgICAgIHRoaXMuZmxvYXQzMltvNCArIDJdID0gdjI7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQzZjEyLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSAxMjtcbnJlZ2lzdGVyKCdTdHJ1Y3RBcnJheUxheW91dDNmMTInLCBTdHJ1Y3RBcnJheUxheW91dDNmMTIpO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IFVpbnQzMlsxXVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0MXVsNCBleHRlbmRzIFN0cnVjdEFycmF5IHtcbiAgICB1aW50ODogVWludDhBcnJheTtcbiAgICB1aW50MzI6IFVpbnQzMkFycmF5O1xuXG4gICAgX3JlZnJlc2hWaWV3cygpIHtcbiAgICAgICAgdGhpcy51aW50OCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLnVpbnQzMiA9IG5ldyBVaW50MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvNCA9IGkgKiAxO1xuICAgICAgICB0aGlzLnVpbnQzMltvNCArIDBdID0gdjA7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQxdWw0LnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSA0O1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0MXVsNCcsIFN0cnVjdEFycmF5TGF5b3V0MXVsNCk7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogSW50MTZbNl1cbiAqIFsxMl06IFVpbnQzMlsxXVxuICogWzE2XTogVWludDE2WzJdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQ2aTF1bDJ1aTIwIGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIGludDE2OiBJbnQxNkFycmF5O1xuICAgIHVpbnQzMjogVWludDMyQXJyYXk7XG4gICAgdWludDE2OiBVaW50MTZBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy5pbnQxNiA9IG5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLnVpbnQzMiA9IG5ldyBVaW50MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy51aW50MTYgPSBuZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlciwgdjQ6IG51bWJlciwgdjU6IG51bWJlciwgdjY6IG51bWJlciwgdjc6IG51bWJlciwgdjg6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCwgdjEsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4KTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlciwgdjQ6IG51bWJlciwgdjU6IG51bWJlciwgdjY6IG51bWJlciwgdjc6IG51bWJlciwgdjg6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvMiA9IGkgKiAxMDtcbiAgICAgICAgY29uc3QgbzQgPSBpICogNTtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDBdID0gdjA7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAxXSA9IHYxO1xuICAgICAgICB0aGlzLmludDE2W28yICsgMl0gPSB2MjtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDNdID0gdjM7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyA0XSA9IHY0O1xuICAgICAgICB0aGlzLmludDE2W28yICsgNV0gPSB2NTtcbiAgICAgICAgdGhpcy51aW50MzJbbzQgKyAzXSA9IHY2O1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDhdID0gdjc7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgOV0gPSB2ODtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDZpMXVsMnVpMjAucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDIwO1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0NmkxdWwydWkyMCcsIFN0cnVjdEFycmF5TGF5b3V0NmkxdWwydWkyMCk7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogSW50MTZbMl1cbiAqIFs0XTogSW50MTZbMl1cbiAqIFs4XTogSW50MTZbMl1cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheUxheW91dDJpMmkyaTEyIGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIGludDE2OiBJbnQxNkFycmF5O1xuXG4gICAgX3JlZnJlc2hWaWV3cygpIHtcbiAgICAgICAgdGhpcy51aW50OCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLmludDE2ID0gbmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlciwgdjQ6IG51bWJlciwgdjU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCwgdjEsIHYyLCB2MywgdjQsIHY1KTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlciwgdjQ6IG51bWJlciwgdjU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvMiA9IGkgKiA2O1xuICAgICAgICB0aGlzLmludDE2W28yICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDFdID0gdjE7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAyXSA9IHYyO1xuICAgICAgICB0aGlzLmludDE2W28yICsgM10gPSB2MztcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDRdID0gdjQ7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyA1XSA9IHY1O1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0MmkyaTJpMTIucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDEyO1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0MmkyaTJpMTInLCBTdHJ1Y3RBcnJheUxheW91dDJpMmkyaTEyKTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBGbG9hdDMyWzJdXG4gKiBbOF06IEZsb2F0MzJbMV1cbiAqIFsxMl06IEludDE2WzJdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQyZjFmMmkxNiBleHRlbmRzIFN0cnVjdEFycmF5IHtcbiAgICB1aW50ODogVWludDhBcnJheTtcbiAgICBmbG9hdDMyOiBGbG9hdDMyQXJyYXk7XG4gICAgaW50MTY6IEludDE2QXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMuZmxvYXQzMiA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMuaW50MTYgPSBuZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyLCB2NDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSwgdjIsIHYzLCB2NCk7XG4gICAgfVxuXG4gICAgZW1wbGFjZShpOiBudW1iZXIsIHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIsIHYzOiBudW1iZXIsIHY0OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbzQgPSBpICogNDtcbiAgICAgICAgY29uc3QgbzIgPSBpICogODtcbiAgICAgICAgdGhpcy5mbG9hdDMyW280ICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy5mbG9hdDMyW280ICsgMV0gPSB2MTtcbiAgICAgICAgdGhpcy5mbG9hdDMyW280ICsgMl0gPSB2MjtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDZdID0gdjM7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyA3XSA9IHY0O1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0MmYxZjJpMTYucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDE2O1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0MmYxZjJpMTYnLCBTdHJ1Y3RBcnJheUxheW91dDJmMWYyaTE2KTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBVaW50OFsyXVxuICogWzRdOiBGbG9hdDMyWzJdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQydWIyZjEyIGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIGZsb2F0MzI6IEZsb2F0MzJBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy5mbG9hdDMyID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSwgdjIsIHYzKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvMSA9IGkgKiAxMjtcbiAgICAgICAgY29uc3QgbzQgPSBpICogMztcbiAgICAgICAgdGhpcy51aW50OFtvMSArIDBdID0gdjA7XG4gICAgICAgIHRoaXMudWludDhbbzEgKyAxXSA9IHYxO1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyAxXSA9IHYyO1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyAyXSA9IHYzO1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0MnViMmYxMi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50ID0gMTI7XG5yZWdpc3RlcignU3RydWN0QXJyYXlMYXlvdXQydWIyZjEyJywgU3RydWN0QXJyYXlMYXlvdXQydWIyZjEyKTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBVaW50MTZbM11cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheUxheW91dDN1aTYgZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgdWludDE2OiBVaW50MTZBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy51aW50MTYgPSBuZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCwgdjEsIHYyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvMiA9IGkgKiAzO1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDBdID0gdjA7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMV0gPSB2MTtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAyXSA9IHYyO1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0M3VpNi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50ID0gNjtcbnJlZ2lzdGVyKCdTdHJ1Y3RBcnJheUxheW91dDN1aTYnLCBTdHJ1Y3RBcnJheUxheW91dDN1aTYpO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IEludDE2WzJdXG4gKiBbNF06IFVpbnQxNlsyXVxuICogWzhdOiBVaW50MzJbM11cbiAqIFsyMF06IFVpbnQxNlszXVxuICogWzI4XTogRmxvYXQzMlsyXVxuICogWzM2XTogVWludDhbM11cbiAqIFs0MF06IFVpbnQzMlsxXVxuICogWzQ0XTogSW50MTZbMV1cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheUxheW91dDJpMnVpM3VsM3VpMmYzdWIxdWwxaTQ4IGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIGludDE2OiBJbnQxNkFycmF5O1xuICAgIHVpbnQxNjogVWludDE2QXJyYXk7XG4gICAgdWludDMyOiBVaW50MzJBcnJheTtcbiAgICBmbG9hdDMyOiBGbG9hdDMyQXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMuaW50MTYgPSBuZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy51aW50MTYgPSBuZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMudWludDMyID0gbmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLmZsb2F0MzIgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIGVtcGxhY2VCYWNrKHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIsIHYzOiBudW1iZXIsIHY0OiBudW1iZXIsIHY1OiBudW1iZXIsIHY2OiBudW1iZXIsIHY3OiBudW1iZXIsIHY4OiBudW1iZXIsIHY5OiBudW1iZXIsIHYxMDogbnVtYmVyLCB2MTE6IG51bWJlciwgdjEyOiBudW1iZXIsIHYxMzogbnVtYmVyLCB2MTQ6IG51bWJlciwgdjE1OiBudW1iZXIsIHYxNjogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSwgdjIsIHYzLCB2NCwgdjUsIHY2LCB2NywgdjgsIHY5LCB2MTAsIHYxMSwgdjEyLCB2MTMsIHYxNCwgdjE1LCB2MTYpO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyLCB2NDogbnVtYmVyLCB2NTogbnVtYmVyLCB2NjogbnVtYmVyLCB2NzogbnVtYmVyLCB2ODogbnVtYmVyLCB2OTogbnVtYmVyLCB2MTA6IG51bWJlciwgdjExOiBudW1iZXIsIHYxMjogbnVtYmVyLCB2MTM6IG51bWJlciwgdjE0OiBudW1iZXIsIHYxNTogbnVtYmVyLCB2MTY6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvMiA9IGkgKiAyNDtcbiAgICAgICAgY29uc3QgbzQgPSBpICogMTI7XG4gICAgICAgIGNvbnN0IG8xID0gaSAqIDQ4O1xuICAgICAgICB0aGlzLmludDE2W28yICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDFdID0gdjE7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMl0gPSB2MjtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAzXSA9IHYzO1xuICAgICAgICB0aGlzLnVpbnQzMltvNCArIDJdID0gdjQ7XG4gICAgICAgIHRoaXMudWludDMyW280ICsgM10gPSB2NTtcbiAgICAgICAgdGhpcy51aW50MzJbbzQgKyA0XSA9IHY2O1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDEwXSA9IHY3O1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDExXSA9IHY4O1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDEyXSA9IHY5O1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyA3XSA9IHYxMDtcbiAgICAgICAgdGhpcy5mbG9hdDMyW280ICsgOF0gPSB2MTE7XG4gICAgICAgIHRoaXMudWludDhbbzEgKyAzNl0gPSB2MTI7XG4gICAgICAgIHRoaXMudWludDhbbzEgKyAzN10gPSB2MTM7XG4gICAgICAgIHRoaXMudWludDhbbzEgKyAzOF0gPSB2MTQ7XG4gICAgICAgIHRoaXMudWludDMyW280ICsgMTBdID0gdjE1O1xuICAgICAgICB0aGlzLmludDE2W28yICsgMjJdID0gdjE2O1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0MmkydWkzdWwzdWkyZjN1YjF1bDFpNDgucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDQ4O1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0MmkydWkzdWwzdWkyZjN1YjF1bDFpNDgnLCBTdHJ1Y3RBcnJheUxheW91dDJpMnVpM3VsM3VpMmYzdWIxdWwxaTQ4KTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBJbnQxNls4XVxuICogWzE2XTogVWludDE2WzE1XVxuICogWzQ4XTogVWludDMyWzFdXG4gKiBbNTJdOiBGbG9hdDMyWzRdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQ4aTE1dWkxdWw0ZjY4IGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIGludDE2OiBJbnQxNkFycmF5O1xuICAgIHVpbnQxNjogVWludDE2QXJyYXk7XG4gICAgdWludDMyOiBVaW50MzJBcnJheTtcbiAgICBmbG9hdDMyOiBGbG9hdDMyQXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMuaW50MTYgPSBuZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy51aW50MTYgPSBuZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMudWludDMyID0gbmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLmZsb2F0MzIgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIGVtcGxhY2VCYWNrKHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIsIHYzOiBudW1iZXIsIHY0OiBudW1iZXIsIHY1OiBudW1iZXIsIHY2OiBudW1iZXIsIHY3OiBudW1iZXIsIHY4OiBudW1iZXIsIHY5OiBudW1iZXIsIHYxMDogbnVtYmVyLCB2MTE6IG51bWJlciwgdjEyOiBudW1iZXIsIHYxMzogbnVtYmVyLCB2MTQ6IG51bWJlciwgdjE1OiBudW1iZXIsIHYxNjogbnVtYmVyLCB2MTc6IG51bWJlciwgdjE4OiBudW1iZXIsIHYxOTogbnVtYmVyLCB2MjA6IG51bWJlciwgdjIxOiBudW1iZXIsIHYyMjogbnVtYmVyLCB2MjM6IG51bWJlciwgdjI0OiBudW1iZXIsIHYyNTogbnVtYmVyLCB2MjY6IG51bWJlciwgdjI3OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaSA9IHRoaXMubGVuZ3RoO1xuICAgICAgICB0aGlzLnJlc2l6ZShpICsgMSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVtcGxhY2UoaSwgdjAsIHYxLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgdjksIHYxMCwgdjExLCB2MTIsIHYxMywgdjE0LCB2MTUsIHYxNiwgdjE3LCB2MTgsIHYxOSwgdjIwLCB2MjEsIHYyMiwgdjIzLCB2MjQsIHYyNSwgdjI2LCB2MjcpO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyLCB2NDogbnVtYmVyLCB2NTogbnVtYmVyLCB2NjogbnVtYmVyLCB2NzogbnVtYmVyLCB2ODogbnVtYmVyLCB2OTogbnVtYmVyLCB2MTA6IG51bWJlciwgdjExOiBudW1iZXIsIHYxMjogbnVtYmVyLCB2MTM6IG51bWJlciwgdjE0OiBudW1iZXIsIHYxNTogbnVtYmVyLCB2MTY6IG51bWJlciwgdjE3OiBudW1iZXIsIHYxODogbnVtYmVyLCB2MTk6IG51bWJlciwgdjIwOiBudW1iZXIsIHYyMTogbnVtYmVyLCB2MjI6IG51bWJlciwgdjIzOiBudW1iZXIsIHYyNDogbnVtYmVyLCB2MjU6IG51bWJlciwgdjI2OiBudW1iZXIsIHYyNzogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG8yID0gaSAqIDM0O1xuICAgICAgICBjb25zdCBvNCA9IGkgKiAxNztcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDBdID0gdjA7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAxXSA9IHYxO1xuICAgICAgICB0aGlzLmludDE2W28yICsgMl0gPSB2MjtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDNdID0gdjM7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyA0XSA9IHY0O1xuICAgICAgICB0aGlzLmludDE2W28yICsgNV0gPSB2NTtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDZdID0gdjY7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyA3XSA9IHY3O1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDhdID0gdjg7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgOV0gPSB2OTtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAxMF0gPSB2MTA7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMTFdID0gdjExO1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDEyXSA9IHYxMjtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAxM10gPSB2MTM7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMTRdID0gdjE0O1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDE1XSA9IHYxNTtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAxNl0gPSB2MTY7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMTddID0gdjE3O1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDE4XSA9IHYxODtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAxOV0gPSB2MTk7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMjBdID0gdjIwO1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDIxXSA9IHYyMTtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAyMl0gPSB2MjI7XG4gICAgICAgIHRoaXMudWludDMyW280ICsgMTJdID0gdjIzO1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyAxM10gPSB2MjQ7XG4gICAgICAgIHRoaXMuZmxvYXQzMltvNCArIDE0XSA9IHYyNTtcbiAgICAgICAgdGhpcy5mbG9hdDMyW280ICsgMTVdID0gdjI2O1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyAxNl0gPSB2Mjc7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQ4aTE1dWkxdWw0ZjY4LnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSA2ODtcbnJlZ2lzdGVyKCdTdHJ1Y3RBcnJheUxheW91dDhpMTV1aTF1bDRmNjgnLCBTdHJ1Y3RBcnJheUxheW91dDhpMTV1aTF1bDRmNjgpO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IEZsb2F0MzJbMV1cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheUxheW91dDFmNCBleHRlbmRzIFN0cnVjdEFycmF5IHtcbiAgICB1aW50ODogVWludDhBcnJheTtcbiAgICBmbG9hdDMyOiBGbG9hdDMyQXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMuZmxvYXQzMiA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCk7XG4gICAgfVxuXG4gICAgZW1wbGFjZShpOiBudW1iZXIsIHYwOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbzQgPSBpICogMTtcbiAgICAgICAgdGhpcy5mbG9hdDMyW280ICsgMF0gPSB2MDtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDFmNC5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50ID0gNDtcbnJlZ2lzdGVyKCdTdHJ1Y3RBcnJheUxheW91dDFmNCcsIFN0cnVjdEFycmF5TGF5b3V0MWY0KTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBJbnQxNlszXVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0M2k2IGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIGludDE2OiBJbnQxNkFycmF5O1xuXG4gICAgX3JlZnJlc2hWaWV3cygpIHtcbiAgICAgICAgdGhpcy51aW50OCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLmludDE2ID0gbmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCwgdjEsIHYyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvMiA9IGkgKiAzO1xuICAgICAgICB0aGlzLmludDE2W28yICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDFdID0gdjE7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAyXSA9IHYyO1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0M2k2LnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSA2O1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0M2k2JywgU3RydWN0QXJyYXlMYXlvdXQzaTYpO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IFVpbnQzMlsxXVxuICogWzRdOiBVaW50MTZbMl1cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheUxheW91dDF1bDJ1aTggZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgdWludDMyOiBVaW50MzJBcnJheTtcbiAgICB1aW50MTY6IFVpbnQxNkFycmF5O1xuXG4gICAgX3JlZnJlc2hWaWV3cygpIHtcbiAgICAgICAgdGhpcy51aW50OCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLnVpbnQzMiA9IG5ldyBVaW50MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy51aW50MTYgPSBuZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCwgdjEsIHYyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvNCA9IGkgKiAyO1xuICAgICAgICBjb25zdCBvMiA9IGkgKiA0O1xuICAgICAgICB0aGlzLnVpbnQzMltvNCArIDBdID0gdjA7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMl0gPSB2MTtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAzXSA9IHYyO1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0MXVsMnVpOC5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50ID0gODtcbnJlZ2lzdGVyKCdTdHJ1Y3RBcnJheUxheW91dDF1bDJ1aTgnLCBTdHJ1Y3RBcnJheUxheW91dDF1bDJ1aTgpO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IFVpbnQxNlsyXVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0MnVpNCBleHRlbmRzIFN0cnVjdEFycmF5IHtcbiAgICB1aW50ODogVWludDhBcnJheTtcbiAgICB1aW50MTY6IFVpbnQxNkFycmF5O1xuXG4gICAgX3JlZnJlc2hWaWV3cygpIHtcbiAgICAgICAgdGhpcy51aW50OCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLnVpbnQxNiA9IG5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSk7XG4gICAgfVxuXG4gICAgZW1wbGFjZShpOiBudW1iZXIsIHYwOiBudW1iZXIsIHYxOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbzIgPSBpICogMjtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAwXSA9IHYwO1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDFdID0gdjE7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQydWk0LnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSA0O1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0MnVpNCcsIFN0cnVjdEFycmF5TGF5b3V0MnVpNCk7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogVWludDE2WzFdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQxdWkyIGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIHVpbnQxNjogVWludDE2QXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMudWludDE2ID0gbmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIGVtcGxhY2VCYWNrKHYwOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaSA9IHRoaXMubGVuZ3RoO1xuICAgICAgICB0aGlzLnJlc2l6ZShpICsgMSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVtcGxhY2UoaSwgdjApO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG8yID0gaSAqIDE7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMF0gPSB2MDtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDF1aTIucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDI7XG5yZWdpc3RlcignU3RydWN0QXJyYXlMYXlvdXQxdWkyJywgU3RydWN0QXJyYXlMYXlvdXQxdWkyKTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBGbG9hdDMyWzJdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQyZjggZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgZmxvYXQzMjogRmxvYXQzMkFycmF5O1xuXG4gICAgX3JlZnJlc2hWaWV3cygpIHtcbiAgICAgICAgdGhpcy51aW50OCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLmZsb2F0MzIgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIGVtcGxhY2VCYWNrKHYwOiBudW1iZXIsIHYxOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaSA9IHRoaXMubGVuZ3RoO1xuICAgICAgICB0aGlzLnJlc2l6ZShpICsgMSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVtcGxhY2UoaSwgdjAsIHYxKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlciwgdjE6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvNCA9IGkgKiAyO1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyAwXSA9IHYwO1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyAxXSA9IHYxO1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0MmY4LnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSA4O1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0MmY4JywgU3RydWN0QXJyYXlMYXlvdXQyZjgpO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IEZsb2F0MzJbNF1cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheUxheW91dDRmMTYgZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgZmxvYXQzMjogRmxvYXQzMkFycmF5O1xuXG4gICAgX3JlZnJlc2hWaWV3cygpIHtcbiAgICAgICAgdGhpcy51aW50OCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLmZsb2F0MzIgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIGVtcGxhY2VCYWNrKHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIsIHYzOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaSA9IHRoaXMubGVuZ3RoO1xuICAgICAgICB0aGlzLnJlc2l6ZShpICsgMSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVtcGxhY2UoaSwgdjAsIHYxLCB2MiwgdjMpO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG80ID0gaSAqIDQ7XG4gICAgICAgIHRoaXMuZmxvYXQzMltvNCArIDBdID0gdjA7XG4gICAgICAgIHRoaXMuZmxvYXQzMltvNCArIDFdID0gdjE7XG4gICAgICAgIHRoaXMuZmxvYXQzMltvNCArIDJdID0gdjI7XG4gICAgICAgIHRoaXMuZmxvYXQzMltvNCArIDNdID0gdjM7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQ0ZjE2LnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSAxNjtcbnJlZ2lzdGVyKCdTdHJ1Y3RBcnJheUxheW91dDRmMTYnLCBTdHJ1Y3RBcnJheUxheW91dDRmMTYpO1xuXG5jbGFzcyBDb2xsaXNpb25Cb3hTdHJ1Y3QgZXh0ZW5kcyBTdHJ1Y3Qge1xuICAgIF9zdHJ1Y3RBcnJheTogQ29sbGlzaW9uQm94QXJyYXk7XG4gICAgYW5jaG9yUG9pbnRYOiBudW1iZXI7XG4gICAgYW5jaG9yUG9pbnRZOiBudW1iZXI7XG4gICAgeDE6IG51bWJlcjtcbiAgICB5MTogbnVtYmVyO1xuICAgIHgyOiBudW1iZXI7XG4gICAgeTI6IG51bWJlcjtcbiAgICBmZWF0dXJlSW5kZXg6IG51bWJlcjtcbiAgICBzb3VyY2VMYXllckluZGV4OiBudW1iZXI7XG4gICAgYnVja2V0SW5kZXg6IG51bWJlcjtcbiAgICBhbmNob3JQb2ludDogUG9pbnQ7XG4gICAgZ2V0IGFuY2hvclBvaW50WCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAwXTsgfVxuICAgIGdldCBhbmNob3JQb2ludFkoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgMV07IH1cbiAgICBnZXQgeDEoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgMl07IH1cbiAgICBnZXQgeTEoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgM107IH1cbiAgICBnZXQgeDIoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgNF07IH1cbiAgICBnZXQgeTIoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgNV07IH1cbiAgICBnZXQgZmVhdHVyZUluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQgKyAzXTsgfVxuICAgIGdldCBzb3VyY2VMYXllckluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyA4XTsgfVxuICAgIGdldCBidWNrZXRJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgOV07IH1cbiAgICBnZXQgYW5jaG9yUG9pbnQoKSB7IHJldHVybiBuZXcgUG9pbnQodGhpcy5hbmNob3JQb2ludFgsIHRoaXMuYW5jaG9yUG9pbnRZKTsgfVxufVxuXG5Db2xsaXNpb25Cb3hTdHJ1Y3QucHJvdG90eXBlLnNpemUgPSAyMDtcblxuZXhwb3J0IHR5cGUgQ29sbGlzaW9uQm94ID0gQ29sbGlzaW9uQm94U3RydWN0O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBDb2xsaXNpb25Cb3hBcnJheSBleHRlbmRzIFN0cnVjdEFycmF5TGF5b3V0NmkxdWwydWkyMCB7XG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBDb2xsaXNpb25Cb3hTdHJ1Y3QgYXQgdGhlIGdpdmVuIGxvY2F0aW9uIGluIHRoZSBhcnJheS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBlbGVtZW50LlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgZ2V0KGluZGV4OiBudW1iZXIpOiBDb2xsaXNpb25Cb3hTdHJ1Y3Qge1xuICAgICAgICBhc3NlcnQoIXRoaXMuaXNUcmFuc2ZlcnJlZCk7XG4gICAgICAgIHJldHVybiBuZXcgQ29sbGlzaW9uQm94U3RydWN0KHRoaXMsIGluZGV4KTtcbiAgICB9XG59XG5cbnJlZ2lzdGVyKCdDb2xsaXNpb25Cb3hBcnJheScsIENvbGxpc2lvbkJveEFycmF5KTtcblxuY2xhc3MgUGxhY2VkU3ltYm9sU3RydWN0IGV4dGVuZHMgU3RydWN0IHtcbiAgICBfc3RydWN0QXJyYXk6IFBsYWNlZFN5bWJvbEFycmF5O1xuICAgIGFuY2hvclg6IG51bWJlcjtcbiAgICBhbmNob3JZOiBudW1iZXI7XG4gICAgZ2x5cGhTdGFydEluZGV4OiBudW1iZXI7XG4gICAgbnVtR2x5cGhzOiBudW1iZXI7XG4gICAgdmVydGV4U3RhcnRJbmRleDogbnVtYmVyO1xuICAgIGxpbmVTdGFydEluZGV4OiBudW1iZXI7XG4gICAgbGluZUxlbmd0aDogbnVtYmVyO1xuICAgIHNlZ21lbnQ6IG51bWJlcjtcbiAgICBsb3dlclNpemU6IG51bWJlcjtcbiAgICB1cHBlclNpemU6IG51bWJlcjtcbiAgICBsaW5lT2Zmc2V0WDogbnVtYmVyO1xuICAgIGxpbmVPZmZzZXRZOiBudW1iZXI7XG4gICAgd3JpdGluZ01vZGU6IG51bWJlcjtcbiAgICBwbGFjZWRPcmllbnRhdGlvbjogbnVtYmVyO1xuICAgIGhpZGRlbjogbnVtYmVyO1xuICAgIGNyb3NzVGlsZUlEOiBudW1iZXI7XG4gICAgYXNzb2NpYXRlZEljb25JbmRleDogbnVtYmVyO1xuICAgIGdldCBhbmNob3JYKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDBdOyB9XG4gICAgZ2V0IGFuY2hvclkoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgMV07IH1cbiAgICBnZXQgZ2x5cGhTdGFydEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAyXTsgfVxuICAgIGdldCBudW1HbHlwaHMoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDNdOyB9XG4gICAgZ2V0IHZlcnRleFN0YXJ0SW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCArIDJdOyB9XG4gICAgZ2V0IGxpbmVTdGFydEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQgKyAzXTsgfVxuICAgIGdldCBsaW5lTGVuZ3RoKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQgKyA0XTsgfVxuICAgIGdldCBzZWdtZW50KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxMF07IH1cbiAgICBnZXQgbG93ZXJTaXplKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxMV07IH1cbiAgICBnZXQgdXBwZXJTaXplKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxMl07IH1cbiAgICBnZXQgbGluZU9mZnNldFgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5mbG9hdDMyW3RoaXMuX3BvczQgKyA3XTsgfVxuICAgIGdldCBsaW5lT2Zmc2V0WSgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmZsb2F0MzJbdGhpcy5fcG9zNCArIDhdOyB9XG4gICAgZ2V0IHdyaXRpbmdNb2RlKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDhbdGhpcy5fcG9zMSArIDM2XTsgfVxuICAgIGdldCBwbGFjZWRPcmllbnRhdGlvbigpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQ4W3RoaXMuX3BvczEgKyAzN107IH1cbiAgICBzZXQgcGxhY2VkT3JpZW50YXRpb24oeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQ4W3RoaXMuX3BvczEgKyAzN10gPSB4OyB9XG4gICAgZ2V0IGhpZGRlbigpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQ4W3RoaXMuX3BvczEgKyAzOF07IH1cbiAgICBzZXQgaGlkZGVuKHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50OFt0aGlzLl9wb3MxICsgMzhdID0geDsgfVxuICAgIGdldCBjcm9zc1RpbGVJRCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0ICsgMTBdOyB9XG4gICAgc2V0IGNyb3NzVGlsZUlEKHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCArIDEwXSA9IHg7IH1cbiAgICBnZXQgYXNzb2NpYXRlZEljb25JbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAyMl07IH1cbn1cblxuUGxhY2VkU3ltYm9sU3RydWN0LnByb3RvdHlwZS5zaXplID0gNDg7XG5cbmV4cG9ydCB0eXBlIFBsYWNlZFN5bWJvbCA9IFBsYWNlZFN5bWJvbFN0cnVjdDtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgUGxhY2VkU3ltYm9sQXJyYXkgZXh0ZW5kcyBTdHJ1Y3RBcnJheUxheW91dDJpMnVpM3VsM3VpMmYzdWIxdWwxaTQ4IHtcbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIFBsYWNlZFN5bWJvbFN0cnVjdCBhdCB0aGUgZ2l2ZW4gbG9jYXRpb24gaW4gdGhlIGFycmF5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGVsZW1lbnQuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBnZXQoaW5kZXg6IG51bWJlcik6IFBsYWNlZFN5bWJvbFN0cnVjdCB7XG4gICAgICAgIGFzc2VydCghdGhpcy5pc1RyYW5zZmVycmVkKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQbGFjZWRTeW1ib2xTdHJ1Y3QodGhpcywgaW5kZXgpO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ1BsYWNlZFN5bWJvbEFycmF5JywgUGxhY2VkU3ltYm9sQXJyYXkpO1xuXG5jbGFzcyBTeW1ib2xJbnN0YW5jZVN0cnVjdCBleHRlbmRzIFN0cnVjdCB7XG4gICAgX3N0cnVjdEFycmF5OiBTeW1ib2xJbnN0YW5jZUFycmF5O1xuICAgIGFuY2hvclg6IG51bWJlcjtcbiAgICBhbmNob3JZOiBudW1iZXI7XG4gICAgcmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXg6IG51bWJlcjtcbiAgICBjZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXg6IG51bWJlcjtcbiAgICBsZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4OiBudW1iZXI7XG4gICAgdmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXg6IG51bWJlcjtcbiAgICBwbGFjZWRJY29uU3ltYm9sSW5kZXg6IG51bWJlcjtcbiAgICB2ZXJ0aWNhbFBsYWNlZEljb25TeW1ib2xJbmRleDogbnVtYmVyO1xuICAgIGtleTogbnVtYmVyO1xuICAgIHRleHRCb3hTdGFydEluZGV4OiBudW1iZXI7XG4gICAgdGV4dEJveEVuZEluZGV4OiBudW1iZXI7XG4gICAgdmVydGljYWxUZXh0Qm94U3RhcnRJbmRleDogbnVtYmVyO1xuICAgIHZlcnRpY2FsVGV4dEJveEVuZEluZGV4OiBudW1iZXI7XG4gICAgaWNvbkJveFN0YXJ0SW5kZXg6IG51bWJlcjtcbiAgICBpY29uQm94RW5kSW5kZXg6IG51bWJlcjtcbiAgICB2ZXJ0aWNhbEljb25Cb3hTdGFydEluZGV4OiBudW1iZXI7XG4gICAgdmVydGljYWxJY29uQm94RW5kSW5kZXg6IG51bWJlcjtcbiAgICBmZWF0dXJlSW5kZXg6IG51bWJlcjtcbiAgICBudW1Ib3Jpem9udGFsR2x5cGhWZXJ0aWNlczogbnVtYmVyO1xuICAgIG51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlczogbnVtYmVyO1xuICAgIG51bUljb25WZXJ0aWNlczogbnVtYmVyO1xuICAgIG51bVZlcnRpY2FsSWNvblZlcnRpY2VzOiBudW1iZXI7XG4gICAgdXNlUnVudGltZUNvbGxpc2lvbkNpcmNsZXM6IG51bWJlcjtcbiAgICBjcm9zc1RpbGVJRDogbnVtYmVyO1xuICAgIHRleHRCb3hTY2FsZTogbnVtYmVyO1xuICAgIHRleHRPZmZzZXQwOiBudW1iZXI7XG4gICAgdGV4dE9mZnNldDE6IG51bWJlcjtcbiAgICBjb2xsaXNpb25DaXJjbGVEaWFtZXRlcjogbnVtYmVyO1xuICAgIGdldCBhbmNob3JYKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDBdOyB9XG4gICAgZ2V0IGFuY2hvclkoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgMV07IH1cbiAgICBnZXQgcmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgMl07IH1cbiAgICBnZXQgY2VudGVySnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDNdOyB9XG4gICAgZ2V0IGxlZnRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgNF07IH1cbiAgICBnZXQgdmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgNV07IH1cbiAgICBnZXQgcGxhY2VkSWNvblN5bWJvbEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDZdOyB9XG4gICAgZ2V0IHZlcnRpY2FsUGxhY2VkSWNvblN5bWJvbEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDddOyB9XG4gICAgZ2V0IGtleSgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgOF07IH1cbiAgICBnZXQgdGV4dEJveFN0YXJ0SW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDldOyB9XG4gICAgZ2V0IHRleHRCb3hFbmRJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgMTBdOyB9XG4gICAgZ2V0IHZlcnRpY2FsVGV4dEJveFN0YXJ0SW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDExXTsgfVxuICAgIGdldCB2ZXJ0aWNhbFRleHRCb3hFbmRJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgMTJdOyB9XG4gICAgZ2V0IGljb25Cb3hTdGFydEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxM107IH1cbiAgICBnZXQgaWNvbkJveEVuZEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxNF07IH1cbiAgICBnZXQgdmVydGljYWxJY29uQm94U3RhcnRJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgMTVdOyB9XG4gICAgZ2V0IHZlcnRpY2FsSWNvbkJveEVuZEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxNl07IH1cbiAgICBnZXQgZmVhdHVyZUluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxN107IH1cbiAgICBnZXQgbnVtSG9yaXpvbnRhbEdseXBoVmVydGljZXMoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDE4XTsgfVxuICAgIGdldCBudW1WZXJ0aWNhbEdseXBoVmVydGljZXMoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDE5XTsgfVxuICAgIGdldCBudW1JY29uVmVydGljZXMoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDIwXTsgfVxuICAgIGdldCBudW1WZXJ0aWNhbEljb25WZXJ0aWNlcygpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgMjFdOyB9XG4gICAgZ2V0IHVzZVJ1bnRpbWVDb2xsaXNpb25DaXJjbGVzKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAyMl07IH1cbiAgICBnZXQgY3Jvc3NUaWxlSUQoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCArIDEyXTsgfVxuICAgIHNldCBjcm9zc1RpbGVJRCh4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQgKyAxMl0gPSB4OyB9XG4gICAgZ2V0IHRleHRCb3hTY2FsZSgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmZsb2F0MzJbdGhpcy5fcG9zNCArIDEzXTsgfVxuICAgIGdldCB0ZXh0T2Zmc2V0MCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmZsb2F0MzJbdGhpcy5fcG9zNCArIDE0XTsgfVxuICAgIGdldCB0ZXh0T2Zmc2V0MSgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmZsb2F0MzJbdGhpcy5fcG9zNCArIDE1XTsgfVxuICAgIGdldCBjb2xsaXNpb25DaXJjbGVEaWFtZXRlcigpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmZsb2F0MzJbdGhpcy5fcG9zNCArIDE2XTsgfVxufVxuXG5TeW1ib2xJbnN0YW5jZVN0cnVjdC5wcm90b3R5cGUuc2l6ZSA9IDY4O1xuXG5leHBvcnQgdHlwZSBTeW1ib2xJbnN0YW5jZSA9IFN5bWJvbEluc3RhbmNlU3RydWN0O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBTeW1ib2xJbnN0YW5jZUFycmF5IGV4dGVuZHMgU3RydWN0QXJyYXlMYXlvdXQ4aTE1dWkxdWw0ZjY4IHtcbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIFN5bWJvbEluc3RhbmNlU3RydWN0IGF0IHRoZSBnaXZlbiBsb2NhdGlvbiBpbiB0aGUgYXJyYXkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFRoZSBpbmRleCBvZiB0aGUgZWxlbWVudC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGdldChpbmRleDogbnVtYmVyKTogU3ltYm9sSW5zdGFuY2VTdHJ1Y3Qge1xuICAgICAgICBhc3NlcnQoIXRoaXMuaXNUcmFuc2ZlcnJlZCk7XG4gICAgICAgIHJldHVybiBuZXcgU3ltYm9sSW5zdGFuY2VTdHJ1Y3QodGhpcywgaW5kZXgpO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ1N5bWJvbEluc3RhbmNlQXJyYXknLCBTeW1ib2xJbnN0YW5jZUFycmF5KTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgR2x5cGhPZmZzZXRBcnJheSBleHRlbmRzIFN0cnVjdEFycmF5TGF5b3V0MWY0IHtcbiAgICBnZXRvZmZzZXRYKGluZGV4OiBudW1iZXIpIHsgcmV0dXJuIHRoaXMuZmxvYXQzMltpbmRleCAqIDEgKyAwXTsgfVxufVxuXG5yZWdpc3RlcignR2x5cGhPZmZzZXRBcnJheScsIEdseXBoT2Zmc2V0QXJyYXkpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBTeW1ib2xMaW5lVmVydGV4QXJyYXkgZXh0ZW5kcyBTdHJ1Y3RBcnJheUxheW91dDNpNiB7XG4gICAgZ2V0eChpbmRleDogbnVtYmVyKSB7IHJldHVybiB0aGlzLmludDE2W2luZGV4ICogMyArIDBdOyB9XG4gICAgZ2V0eShpbmRleDogbnVtYmVyKSB7IHJldHVybiB0aGlzLmludDE2W2luZGV4ICogMyArIDFdOyB9XG4gICAgZ2V0dGlsZVVuaXREaXN0YW5jZUZyb21BbmNob3IoaW5kZXg6IG51bWJlcikgeyByZXR1cm4gdGhpcy5pbnQxNltpbmRleCAqIDMgKyAyXTsgfVxufVxuXG5yZWdpc3RlcignU3ltYm9sTGluZVZlcnRleEFycmF5JywgU3ltYm9sTGluZVZlcnRleEFycmF5KTtcblxuY2xhc3MgRmVhdHVyZUluZGV4U3RydWN0IGV4dGVuZHMgU3RydWN0IHtcbiAgICBfc3RydWN0QXJyYXk6IEZlYXR1cmVJbmRleEFycmF5O1xuICAgIGZlYXR1cmVJbmRleDogbnVtYmVyO1xuICAgIHNvdXJjZUxheWVySW5kZXg6IG51bWJlcjtcbiAgICBidWNrZXRJbmRleDogbnVtYmVyO1xuICAgIGdldCBmZWF0dXJlSW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCArIDBdOyB9XG4gICAgZ2V0IHNvdXJjZUxheWVySW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDJdOyB9XG4gICAgZ2V0IGJ1Y2tldEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAzXTsgfVxufVxuXG5GZWF0dXJlSW5kZXhTdHJ1Y3QucHJvdG90eXBlLnNpemUgPSA4O1xuXG5leHBvcnQgdHlwZSBGZWF0dXJlSW5kZXggPSBGZWF0dXJlSW5kZXhTdHJ1Y3Q7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIEZlYXR1cmVJbmRleEFycmF5IGV4dGVuZHMgU3RydWN0QXJyYXlMYXlvdXQxdWwydWk4IHtcbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIEZlYXR1cmVJbmRleFN0cnVjdCBhdCB0aGUgZ2l2ZW4gbG9jYXRpb24gaW4gdGhlIGFycmF5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGVsZW1lbnQuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBnZXQoaW5kZXg6IG51bWJlcik6IEZlYXR1cmVJbmRleFN0cnVjdCB7XG4gICAgICAgIGFzc2VydCghdGhpcy5pc1RyYW5zZmVycmVkKTtcbiAgICAgICAgcmV0dXJuIG5ldyBGZWF0dXJlSW5kZXhTdHJ1Y3QodGhpcywgaW5kZXgpO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ0ZlYXR1cmVJbmRleEFycmF5JywgRmVhdHVyZUluZGV4QXJyYXkpO1xuXG5leHBvcnQge1xuICAgIFN0cnVjdEFycmF5TGF5b3V0Mmk0LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0NGk4LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0Mmk0aTEyLFxuICAgIFN0cnVjdEFycmF5TGF5b3V0Mmk0dWI4LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0OHVpMnViMTgsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQ0aTR1aTRpMjQsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQzZjEyLFxuICAgIFN0cnVjdEFycmF5TGF5b3V0MXVsNCxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDZpMXVsMnVpMjAsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQyaTJpMmkxMixcbiAgICBTdHJ1Y3RBcnJheUxheW91dDJmMWYyaTE2LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0MnViMmYxMixcbiAgICBTdHJ1Y3RBcnJheUxheW91dDN1aTYsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQyaTJ1aTN1bDN1aTJmM3ViMXVsMWk0OCxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDhpMTV1aTF1bDRmNjgsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQxZjQsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQzaTYsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQxdWwydWk4LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0MnVpNCxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDF1aTIsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQyZjgsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQ0ZjE2LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0Mmk0IGFzIFBvc0FycmF5LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0NGk4IGFzIFJhc3RlckJvdW5kc0FycmF5LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0Mmk0IGFzIENpcmNsZUxheW91dEFycmF5LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0Mmk0IGFzIEZpbGxMYXlvdXRBcnJheSxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDJpNGkxMiBhcyBGaWxsRXh0cnVzaW9uTGF5b3V0QXJyYXksXG4gICAgU3RydWN0QXJyYXlMYXlvdXQyaTQgYXMgSGVhdG1hcExheW91dEFycmF5LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0Mmk0dWI4IGFzIExpbmVMYXlvdXRBcnJheSxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDh1aTJ1YjE4IGFzIFBhdHRlcm5MYXlvdXRBcnJheSxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDRpNHVpNGkyNCBhcyBTeW1ib2xMYXlvdXRBcnJheSxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDNmMTIgYXMgU3ltYm9sRHluYW1pY0xheW91dEFycmF5LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0MXVsNCBhcyBTeW1ib2xPcGFjaXR5QXJyYXksXG4gICAgU3RydWN0QXJyYXlMYXlvdXQyaTJpMmkxMiBhcyBDb2xsaXNpb25Cb3hMYXlvdXRBcnJheSxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDJmMWYyaTE2IGFzIENvbGxpc2lvbkNpcmNsZUxheW91dEFycmF5LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0MnViMmYxMiBhcyBDb2xsaXNpb25WZXJ0ZXhBcnJheSxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDN1aTYgYXMgUXVhZFRyaWFuZ2xlQXJyYXksXG4gICAgU3RydWN0QXJyYXlMYXlvdXQzdWk2IGFzIFRyaWFuZ2xlSW5kZXhBcnJheSxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDJ1aTQgYXMgTGluZUluZGV4QXJyYXksXG4gICAgU3RydWN0QXJyYXlMYXlvdXQxdWkyIGFzIExpbmVTdHJpcEluZGV4QXJyYXlcbn07XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHtjcmVhdGVMYXlvdXR9IGZyb20gJy4uLy4uL3V0aWwvc3RydWN0X2FycmF5JztcblxuY29uc3QgbGF5b3V0ID0gY3JlYXRlTGF5b3V0KFtcbiAgICB7bmFtZTogJ2FfcG9zJywgY29tcG9uZW50czogMiwgdHlwZTogJ0ludDE2J31cbl0sIDQpO1xuXG5leHBvcnQgZGVmYXVsdCBsYXlvdXQ7XG5leHBvcnQgY29uc3Qge21lbWJlcnMsIHNpemUsIGFsaWdubWVudH0gPSBsYXlvdXQ7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge3dhcm5PbmNlfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuXG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuXG5pbXBvcnQgdHlwZSBWZXJ0ZXhBcnJheU9iamVjdCBmcm9tICcuLi9yZW5kZXIvdmVydGV4X2FycmF5X29iamVjdCc7XG5pbXBvcnQgdHlwZSB7U3RydWN0QXJyYXl9IGZyb20gJy4uL3V0aWwvc3RydWN0X2FycmF5JztcblxuZXhwb3J0IHR5cGUgU2VnbWVudCA9IHtcbiAgICBzb3J0S2V5OiBudW1iZXIgfCB2b2lkLFxuICAgIHZlcnRleE9mZnNldDogbnVtYmVyLFxuICAgIHByaW1pdGl2ZU9mZnNldDogbnVtYmVyLFxuICAgIHZlcnRleExlbmd0aDogbnVtYmVyLFxuICAgIHByaW1pdGl2ZUxlbmd0aDogbnVtYmVyLFxuICAgIHZhb3M6IHtbXzogc3RyaW5nXTogVmVydGV4QXJyYXlPYmplY3R9XG59XG5cbmNsYXNzIFNlZ21lbnRWZWN0b3Ige1xuICAgIHN0YXRpYyBNQVhfVkVSVEVYX0FSUkFZX0xFTkdUSDogbnVtYmVyO1xuICAgIHNlZ21lbnRzOiBBcnJheTxTZWdtZW50PjtcblxuICAgIGNvbnN0cnVjdG9yKHNlZ21lbnRzPzogQXJyYXk8U2VnbWVudD4gPSBbXSkge1xuICAgICAgICB0aGlzLnNlZ21lbnRzID0gc2VnbWVudHM7XG4gICAgfVxuXG4gICAgcHJlcGFyZVNlZ21lbnQobnVtVmVydGljZXM6IG51bWJlciwgbGF5b3V0VmVydGV4QXJyYXk6IFN0cnVjdEFycmF5LCBpbmRleEFycmF5OiBTdHJ1Y3RBcnJheSwgc29ydEtleT86IG51bWJlcik6IFNlZ21lbnQge1xuICAgICAgICBsZXQgc2VnbWVudDogU2VnbWVudCA9IHRoaXMuc2VnbWVudHNbdGhpcy5zZWdtZW50cy5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKG51bVZlcnRpY2VzID4gU2VnbWVudFZlY3Rvci5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSCkgd2Fybk9uY2UoYE1heCB2ZXJ0aWNlcyBwZXIgc2VnbWVudCBpcyAke1NlZ21lbnRWZWN0b3IuTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEh9OiBidWNrZXQgcmVxdWVzdGVkICR7bnVtVmVydGljZXN9YCk7XG4gICAgICAgIGlmICghc2VnbWVudCB8fCBzZWdtZW50LnZlcnRleExlbmd0aCArIG51bVZlcnRpY2VzID4gU2VnbWVudFZlY3Rvci5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSCB8fCBzZWdtZW50LnNvcnRLZXkgIT09IHNvcnRLZXkpIHtcbiAgICAgICAgICAgIHNlZ21lbnQgPSAoe1xuICAgICAgICAgICAgICAgIHZlcnRleE9mZnNldDogbGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLFxuICAgICAgICAgICAgICAgIHByaW1pdGl2ZU9mZnNldDogaW5kZXhBcnJheS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgdmVydGV4TGVuZ3RoOiAwLFxuICAgICAgICAgICAgICAgIHByaW1pdGl2ZUxlbmd0aDogMFxuICAgICAgICAgICAgfTogYW55KTtcbiAgICAgICAgICAgIGlmIChzb3J0S2V5ICE9PSB1bmRlZmluZWQpIHNlZ21lbnQuc29ydEtleSA9IHNvcnRLZXk7XG4gICAgICAgICAgICB0aGlzLnNlZ21lbnRzLnB1c2goc2VnbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlZ21lbnQ7XG4gICAgfVxuXG4gICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWdtZW50cztcbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBmb3IgKGNvbnN0IHNlZ21lbnQgb2YgdGhpcy5zZWdtZW50cykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrIGluIHNlZ21lbnQudmFvcykge1xuICAgICAgICAgICAgICAgIHNlZ21lbnQudmFvc1trXS5kZXN0cm95KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgc2ltcGxlU2VnbWVudCh2ZXJ0ZXhPZmZzZXQ6IG51bWJlciwgcHJpbWl0aXZlT2Zmc2V0OiBudW1iZXIsIHZlcnRleExlbmd0aDogbnVtYmVyLCBwcmltaXRpdmVMZW5ndGg6IG51bWJlcik6IFNlZ21lbnRWZWN0b3Ige1xuICAgICAgICByZXR1cm4gbmV3IFNlZ21lbnRWZWN0b3IoW3tcbiAgICAgICAgICAgIHZlcnRleE9mZnNldCxcbiAgICAgICAgICAgIHByaW1pdGl2ZU9mZnNldCxcbiAgICAgICAgICAgIHZlcnRleExlbmd0aCxcbiAgICAgICAgICAgIHByaW1pdGl2ZUxlbmd0aCxcbiAgICAgICAgICAgIHZhb3M6IHt9LFxuICAgICAgICAgICAgc29ydEtleTogMFxuICAgICAgICB9XSk7XG4gICAgfVxufVxuXG4vKlxuICogVGhlIG1heGltdW0gc2l6ZSBvZiBhIHZlcnRleCBhcnJheS4gVGhpcyBsaW1pdCBpcyBpbXBvc2VkIGJ5IFdlYkdMJ3MgMTYgYml0XG4gKiBhZGRyZXNzaW5nIG9mIHZlcnRleCBidWZmZXJzLlxuICogQHByaXZhdGVcbiAqIEByZWFkb25seVxuICovXG5TZWdtZW50VmVjdG9yLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIID0gTWF0aC5wb3coMiwgMTYpIC0gMTtcblxucmVnaXN0ZXIoJ1NlZ21lbnRWZWN0b3InLCBTZWdtZW50VmVjdG9yKTtcbmV4cG9ydCBkZWZhdWx0IFNlZ21lbnRWZWN0b3I7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2NsYW1wfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuXG4vKipcbiAqIFBhY2tzIHR3byBudW1iZXJzLCBpbnRlcnByZXRlZCBhcyA4LWJpdCB1bnNpZ25lZCBpbnRlZ2VycywgaW50byBhIHNpbmdsZVxuICogZmxvYXQuICBVbnBhY2sgdGhlbSBpbiB0aGUgc2hhZGVyIHVzaW5nIHRoZSBgdW5wYWNrX2Zsb2F0KClgIGZ1bmN0aW9uLFxuICogZGVmaW5lZCBpbiBfcHJlbHVkZS52ZXJ0ZXguZ2xzbFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYWNrVWludDhUb0Zsb2F0KGE6IG51bWJlciwgYjogbnVtYmVyKSB7XG4gICAgLy8gY29lcmNlIGEgYW5kIGIgdG8gOC1iaXQgaW50c1xuICAgIGEgPSBjbGFtcChNYXRoLmZsb29yKGEpLCAwLCAyNTUpO1xuICAgIGIgPSBjbGFtcChNYXRoLmZsb29yKGIpLCAwLCAyNTUpO1xuICAgIHJldHVybiAyNTYgKiBhICsgYjtcbn1cbiIsIi8vIEBmbG93XG5pbXBvcnQge2NyZWF0ZUxheW91dH0gZnJvbSAnLi4vLi4vdXRpbC9zdHJ1Y3RfYXJyYXknO1xuXG5jb25zdCBwYXR0ZXJuQXR0cmlidXRlcyA9IGNyZWF0ZUxheW91dChbXG4gICAgLy8gW3RsLngsIHRsLnksIGJyLngsIGJyLnldXG4gICAge25hbWU6ICdhX3BhdHRlcm5fZnJvbScsIGNvbXBvbmVudHM6IDQsIHR5cGU6ICdVaW50MTYnfSxcbiAgICB7bmFtZTogJ2FfcGF0dGVybl90bycsIGNvbXBvbmVudHM6IDQsIHR5cGU6ICdVaW50MTYnfSxcbiAgICB7bmFtZTogJ2FfcGl4ZWxfcmF0aW9fZnJvbScsIGNvbXBvbmVudHM6IDEsIHR5cGU6ICdVaW50OCd9LFxuICAgIHtuYW1lOiAnYV9waXhlbF9yYXRpb190bycsIGNvbXBvbmVudHM6IDEsIHR5cGU6ICdVaW50OCd9LFxuXSk7XG5cbmV4cG9ydCBkZWZhdWx0IHBhdHRlcm5BdHRyaWJ1dGVzO1xuIiwiLyoqXG4gKiBKUyBJbXBsZW1lbnRhdGlvbiBvZiBNdXJtdXJIYXNoMyAocjEzNikgKGFzIG9mIE1heSAyMCwgMjAxMSlcbiAqIFxuICogQGF1dGhvciA8YSBocmVmPVwibWFpbHRvOmdhcnkuY291cnRAZ21haWwuY29tXCI+R2FyeSBDb3VydDwvYT5cbiAqIEBzZWUgaHR0cDovL2dpdGh1Yi5jb20vZ2FyeWNvdXJ0L211cm11cmhhc2gtanNcbiAqIEBhdXRob3IgPGEgaHJlZj1cIm1haWx0bzphYXBwbGVieUBnbWFpbC5jb21cIj5BdXN0aW4gQXBwbGVieTwvYT5cbiAqIEBzZWUgaHR0cDovL3NpdGVzLmdvb2dsZS5jb20vc2l0ZS9tdXJtdXJoYXNoL1xuICogXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IEFTQ0lJIG9ubHlcbiAqIEBwYXJhbSB7bnVtYmVyfSBzZWVkIFBvc2l0aXZlIGludGVnZXIgb25seVxuICogQHJldHVybiB7bnVtYmVyfSAzMi1iaXQgcG9zaXRpdmUgaW50ZWdlciBoYXNoIFxuICovXG5cbmZ1bmN0aW9uIG11cm11cmhhc2gzXzMyX2djKGtleSwgc2VlZCkge1xuXHR2YXIgcmVtYWluZGVyLCBieXRlcywgaDEsIGgxYiwgYzEsIGMxYiwgYzIsIGMyYiwgazEsIGk7XG5cdFxuXHRyZW1haW5kZXIgPSBrZXkubGVuZ3RoICYgMzsgLy8ga2V5Lmxlbmd0aCAlIDRcblx0Ynl0ZXMgPSBrZXkubGVuZ3RoIC0gcmVtYWluZGVyO1xuXHRoMSA9IHNlZWQ7XG5cdGMxID0gMHhjYzllMmQ1MTtcblx0YzIgPSAweDFiODczNTkzO1xuXHRpID0gMDtcblx0XG5cdHdoaWxlIChpIDwgYnl0ZXMpIHtcblx0ICBcdGsxID0gXG5cdCAgXHQgICgoa2V5LmNoYXJDb2RlQXQoaSkgJiAweGZmKSkgfFxuXHQgIFx0ICAoKGtleS5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCA4KSB8XG5cdCAgXHQgICgoa2V5LmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDE2KSB8XG5cdCAgXHQgICgoa2V5LmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDI0KTtcblx0XHQrK2k7XG5cdFx0XG5cdFx0azEgPSAoKCgoazEgJiAweGZmZmYpICogYzEpICsgKCgoKGsxID4+PiAxNikgKiBjMSkgJiAweGZmZmYpIDw8IDE2KSkpICYgMHhmZmZmZmZmZjtcblx0XHRrMSA9IChrMSA8PCAxNSkgfCAoazEgPj4+IDE3KTtcblx0XHRrMSA9ICgoKChrMSAmIDB4ZmZmZikgKiBjMikgKyAoKCgoazEgPj4+IDE2KSAqIGMyKSAmIDB4ZmZmZikgPDwgMTYpKSkgJiAweGZmZmZmZmZmO1xuXG5cdFx0aDEgXj0gazE7XG4gICAgICAgIGgxID0gKGgxIDw8IDEzKSB8IChoMSA+Pj4gMTkpO1xuXHRcdGgxYiA9ICgoKChoMSAmIDB4ZmZmZikgKiA1KSArICgoKChoMSA+Pj4gMTYpICogNSkgJiAweGZmZmYpIDw8IDE2KSkpICYgMHhmZmZmZmZmZjtcblx0XHRoMSA9ICgoKGgxYiAmIDB4ZmZmZikgKyAweDZiNjQpICsgKCgoKGgxYiA+Pj4gMTYpICsgMHhlNjU0KSAmIDB4ZmZmZikgPDwgMTYpKTtcblx0fVxuXHRcblx0azEgPSAwO1xuXHRcblx0c3dpdGNoIChyZW1haW5kZXIpIHtcblx0XHRjYXNlIDM6IGsxIF49IChrZXkuY2hhckNvZGVBdChpICsgMikgJiAweGZmKSA8PCAxNjtcblx0XHRjYXNlIDI6IGsxIF49IChrZXkuY2hhckNvZGVBdChpICsgMSkgJiAweGZmKSA8PCA4O1xuXHRcdGNhc2UgMTogazEgXj0gKGtleS5jaGFyQ29kZUF0KGkpICYgMHhmZik7XG5cdFx0XG5cdFx0azEgPSAoKChrMSAmIDB4ZmZmZikgKiBjMSkgKyAoKCgoazEgPj4+IDE2KSAqIGMxKSAmIDB4ZmZmZikgPDwgMTYpKSAmIDB4ZmZmZmZmZmY7XG5cdFx0azEgPSAoazEgPDwgMTUpIHwgKGsxID4+PiAxNyk7XG5cdFx0azEgPSAoKChrMSAmIDB4ZmZmZikgKiBjMikgKyAoKCgoazEgPj4+IDE2KSAqIGMyKSAmIDB4ZmZmZikgPDwgMTYpKSAmIDB4ZmZmZmZmZmY7XG5cdFx0aDEgXj0gazE7XG5cdH1cblx0XG5cdGgxIF49IGtleS5sZW5ndGg7XG5cblx0aDEgXj0gaDEgPj4+IDE2O1xuXHRoMSA9ICgoKGgxICYgMHhmZmZmKSAqIDB4ODVlYmNhNmIpICsgKCgoKGgxID4+PiAxNikgKiAweDg1ZWJjYTZiKSAmIDB4ZmZmZikgPDwgMTYpKSAmIDB4ZmZmZmZmZmY7XG5cdGgxIF49IGgxID4+PiAxMztcblx0aDEgPSAoKCgoaDEgJiAweGZmZmYpICogMHhjMmIyYWUzNSkgKyAoKCgoaDEgPj4+IDE2KSAqIDB4YzJiMmFlMzUpICYgMHhmZmZmKSA8PCAxNikpKSAmIDB4ZmZmZmZmZmY7XG5cdGgxIF49IGgxID4+PiAxNjtcblxuXHRyZXR1cm4gaDEgPj4+IDA7XG59XG5cbmlmKHR5cGVvZiBtb2R1bGUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBtdXJtdXJoYXNoM18zMl9nY1xufSIsIi8qKlxuICogSlMgSW1wbGVtZW50YXRpb24gb2YgTXVybXVySGFzaDJcbiAqIFxuICogQGF1dGhvciA8YSBocmVmPVwibWFpbHRvOmdhcnkuY291cnRAZ21haWwuY29tXCI+R2FyeSBDb3VydDwvYT5cbiAqIEBzZWUgaHR0cDovL2dpdGh1Yi5jb20vZ2FyeWNvdXJ0L211cm11cmhhc2gtanNcbiAqIEBhdXRob3IgPGEgaHJlZj1cIm1haWx0bzphYXBwbGVieUBnbWFpbC5jb21cIj5BdXN0aW4gQXBwbGVieTwvYT5cbiAqIEBzZWUgaHR0cDovL3NpdGVzLmdvb2dsZS5jb20vc2l0ZS9tdXJtdXJoYXNoL1xuICogXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIEFTQ0lJIG9ubHlcbiAqIEBwYXJhbSB7bnVtYmVyfSBzZWVkIFBvc2l0aXZlIGludGVnZXIgb25seVxuICogQHJldHVybiB7bnVtYmVyfSAzMi1iaXQgcG9zaXRpdmUgaW50ZWdlciBoYXNoXG4gKi9cblxuZnVuY3Rpb24gbXVybXVyaGFzaDJfMzJfZ2Moc3RyLCBzZWVkKSB7XG4gIHZhclxuICAgIGwgPSBzdHIubGVuZ3RoLFxuICAgIGggPSBzZWVkIF4gbCxcbiAgICBpID0gMCxcbiAgICBrO1xuICBcbiAgd2hpbGUgKGwgPj0gNCkge1xuICBcdGsgPSBcbiAgXHQgICgoc3RyLmNoYXJDb2RlQXQoaSkgJiAweGZmKSkgfFxuICBcdCAgKChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgOCkgfFxuICBcdCAgKChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgMTYpIHxcbiAgXHQgICgoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDI0KTtcbiAgICBcbiAgICBrID0gKCgoayAmIDB4ZmZmZikgKiAweDViZDFlOTk1KSArICgoKChrID4+PiAxNikgKiAweDViZDFlOTk1KSAmIDB4ZmZmZikgPDwgMTYpKTtcbiAgICBrIF49IGsgPj4+IDI0O1xuICAgIGsgPSAoKChrICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUpICsgKCgoKGsgPj4+IDE2KSAqIDB4NWJkMWU5OTUpICYgMHhmZmZmKSA8PCAxNikpO1xuXG5cdGggPSAoKChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUpICsgKCgoKGggPj4+IDE2KSAqIDB4NWJkMWU5OTUpICYgMHhmZmZmKSA8PCAxNikpIF4gaztcblxuICAgIGwgLT0gNDtcbiAgICArK2k7XG4gIH1cbiAgXG4gIHN3aXRjaCAobCkge1xuICBjYXNlIDM6IGggXj0gKHN0ci5jaGFyQ29kZUF0KGkgKyAyKSAmIDB4ZmYpIDw8IDE2O1xuICBjYXNlIDI6IGggXj0gKHN0ci5jaGFyQ29kZUF0KGkgKyAxKSAmIDB4ZmYpIDw8IDg7XG4gIGNhc2UgMTogaCBePSAoc3RyLmNoYXJDb2RlQXQoaSkgJiAweGZmKTtcbiAgICAgICAgICBoID0gKCgoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1KSArICgoKChoID4+PiAxNikgKiAweDViZDFlOTk1KSAmIDB4ZmZmZikgPDwgMTYpKTtcbiAgfVxuXG4gIGggXj0gaCA+Pj4gMTM7XG4gIGggPSAoKChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUpICsgKCgoKGggPj4+IDE2KSAqIDB4NWJkMWU5OTUpICYgMHhmZmZmKSA8PCAxNikpO1xuICBoIF49IGggPj4+IDE1O1xuXG4gIHJldHVybiBoID4+PiAwO1xufVxuXG5pZih0eXBlb2YgbW9kdWxlICE9PSB1bmRlZmluZWQpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBtdXJtdXJoYXNoMl8zMl9nY1xufVxuIiwidmFyIG11cm11cjMgPSByZXF1aXJlKFwiLi9tdXJtdXJoYXNoM19nYy5qc1wiKVxudmFyIG11cm11cjIgPSByZXF1aXJlKFwiLi9tdXJtdXJoYXNoMl9nYy5qc1wiKVxuXG5tb2R1bGUuZXhwb3J0cyA9IG11cm11cjNcbm1vZHVsZS5leHBvcnRzLm11cm11cjMgPSBtdXJtdXIzXG5tb2R1bGUuZXhwb3J0cy5tdXJtdXIyID0gbXVybXVyMlxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IG11cm11cjMgZnJvbSAnbXVybXVyaGFzaC1qcyc7XG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG50eXBlIFNlcmlhbGl6ZWRGZWF0dXJlUG9zaXRpb25NYXAgPSB7XG4gICAgaWRzOiBGbG9hdDY0QXJyYXk7XG4gICAgcG9zaXRpb25zOiBVaW50MzJBcnJheTtcbn07XG5cbnR5cGUgRmVhdHVyZVBvc2l0aW9uID0ge1xuICAgIGluZGV4OiBudW1iZXI7XG4gICAgc3RhcnQ6IG51bWJlcjtcbiAgICBlbmQ6IG51bWJlcjtcbn07XG5cbi8vIEEgdHJhbnNmZXJhYmxlIGRhdGEgc3RydWN0dXJlIHRoYXQgbWFwcyBmZWF0dXJlIGlkcyB0byB0aGVpciBpbmRpY2VzIGFuZCBidWZmZXIgb2Zmc2V0c1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmVhdHVyZVBvc2l0aW9uTWFwIHtcbiAgICBpZHM6IEFycmF5PG51bWJlcj47XG4gICAgcG9zaXRpb25zOiBBcnJheTxudW1iZXI+O1xuICAgIGluZGV4ZWQ6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5pZHMgPSBbXTtcbiAgICAgICAgdGhpcy5wb3NpdGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5pbmRleGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgYWRkKGlkOiBtaXhlZCwgaW5kZXg6IG51bWJlciwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5pZHMucHVzaChnZXROdW1lcmljSWQoaWQpKTtcbiAgICAgICAgdGhpcy5wb3NpdGlvbnMucHVzaChpbmRleCwgc3RhcnQsIGVuZCk7XG4gICAgfVxuXG4gICAgZ2V0UG9zaXRpb25zKGlkOiBtaXhlZCk6IEFycmF5PEZlYXR1cmVQb3NpdGlvbj4ge1xuICAgICAgICBhc3NlcnQodGhpcy5pbmRleGVkKTtcblxuICAgICAgICBjb25zdCBpbnRJZCA9IGdldE51bWVyaWNJZChpZCk7XG5cbiAgICAgICAgLy8gYmluYXJ5IHNlYXJjaCBmb3IgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgaWQgaW4gdGhpcy5pZHM7XG4gICAgICAgIC8vIHJlbGllcyBvbiBpZHMvcG9zaXRpb25zIGJlaW5nIHNvcnRlZCBieSBpZCwgd2hpY2ggaGFwcGVucyBpbiBzZXJpYWxpemF0aW9uXG4gICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgbGV0IGogPSB0aGlzLmlkcy5sZW5ndGggLSAxO1xuICAgICAgICB3aGlsZSAoaSA8IGopIHtcbiAgICAgICAgICAgIGNvbnN0IG0gPSAoaSArIGopID4+IDE7XG4gICAgICAgICAgICBpZiAodGhpcy5pZHNbbV0gPj0gaW50SWQpIHtcbiAgICAgICAgICAgICAgICBqID0gbTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaSA9IG0gKyAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IFtdO1xuICAgICAgICB3aGlsZSAodGhpcy5pZHNbaV0gPT09IGludElkKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucG9zaXRpb25zWzMgKiBpXTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5wb3NpdGlvbnNbMyAqIGkgKyAxXTtcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRoaXMucG9zaXRpb25zWzMgKiBpICsgMl07XG4gICAgICAgICAgICBwb3NpdGlvbnMucHVzaCh7aW5kZXgsIHN0YXJ0LCBlbmR9KTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcG9zaXRpb25zO1xuICAgIH1cblxuICAgIHN0YXRpYyBzZXJpYWxpemUobWFwOiBGZWF0dXJlUG9zaXRpb25NYXAsIHRyYW5zZmVyYWJsZXM6IEFycmF5PEFycmF5QnVmZmVyPik6IFNlcmlhbGl6ZWRGZWF0dXJlUG9zaXRpb25NYXAge1xuICAgICAgICBjb25zdCBpZHMgPSBuZXcgRmxvYXQ2NEFycmF5KG1hcC5pZHMpO1xuICAgICAgICBjb25zdCBwb3NpdGlvbnMgPSBuZXcgVWludDMyQXJyYXkobWFwLnBvc2l0aW9ucyk7XG5cbiAgICAgICAgc29ydChpZHMsIHBvc2l0aW9ucywgMCwgaWRzLmxlbmd0aCAtIDEpO1xuXG4gICAgICAgIGlmICh0cmFuc2ZlcmFibGVzKSB7XG4gICAgICAgICAgICB0cmFuc2ZlcmFibGVzLnB1c2goaWRzLmJ1ZmZlciwgcG9zaXRpb25zLmJ1ZmZlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge2lkcywgcG9zaXRpb25zfTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZGVzZXJpYWxpemUob2JqOiBTZXJpYWxpemVkRmVhdHVyZVBvc2l0aW9uTWFwKTogRmVhdHVyZVBvc2l0aW9uTWFwIHtcbiAgICAgICAgY29uc3QgbWFwID0gbmV3IEZlYXR1cmVQb3NpdGlvbk1hcCgpO1xuICAgICAgICAvLyBhZnRlciB0cmFuc2ZlcnJpbmcsIHdlIG9ubHkgdXNlIHRoZXNlIGFycmF5cyBzdGF0aWNhbGx5IChubyBwdXNoZXMpLFxuICAgICAgICAvLyBzbyBUeXBlZEFycmF5IHZzIEFycmF5IGRpc3RpbmN0aW9uIHRoYXQgZmxvdyBwb2ludHMgb3V0IGRvZXNuJ3QgbWF0dGVyXG4gICAgICAgIG1hcC5pZHMgPSAob2JqLmlkczogYW55KTtcbiAgICAgICAgbWFwLnBvc2l0aW9ucyA9IChvYmoucG9zaXRpb25zOiBhbnkpO1xuICAgICAgICBtYXAuaW5kZXhlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBtYXA7XG4gICAgfVxufVxuXG5jb25zdCBNQVhfU0FGRV9JTlRFR0VSID0gTWF0aC5wb3coMiwgNTMpIC0gMTtcblxuZnVuY3Rpb24gZ2V0TnVtZXJpY0lkKHZhbHVlOiBtaXhlZCkge1xuICAgIGNvbnN0IG51bVZhbHVlID0gK3ZhbHVlO1xuICAgIGlmICghaXNOYU4obnVtVmFsdWUpICYmIG51bVZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVIpIHtcbiAgICAgICAgcmV0dXJuIG51bVZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gbXVybXVyMyhTdHJpbmcodmFsdWUpKTtcbn1cblxuLy8gY3VzdG9tIHF1aWNrc29ydCB0aGF0IHNvcnRzIGlkcywgaW5kaWNlcyBhbmQgb2Zmc2V0cyB0b2dldGhlciAoYnkgaWRzKVxuLy8gdXNlcyBIb2FyZSBwYXJ0aXRpb25pbmcgJiBtYW51YWwgdGFpbCBjYWxsIG9wdGltaXphdGlvbiB0byBhdm9pZCB3b3JzdCBjYXNlIHNjZW5hcmlvc1xuZnVuY3Rpb24gc29ydChpZHMsIHBvc2l0aW9ucywgbGVmdCwgcmlnaHQpIHtcbiAgICB3aGlsZSAobGVmdCA8IHJpZ2h0KSB7XG4gICAgICAgIGNvbnN0IHBpdm90ID0gaWRzWyhsZWZ0ICsgcmlnaHQpID4+IDFdO1xuICAgICAgICBsZXQgaSA9IGxlZnQgLSAxO1xuICAgICAgICBsZXQgaiA9IHJpZ2h0ICsgMTtcblxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgZG8gaSsrOyB3aGlsZSAoaWRzW2ldIDwgcGl2b3QpO1xuICAgICAgICAgICAgZG8gai0tOyB3aGlsZSAoaWRzW2pdID4gcGl2b3QpO1xuICAgICAgICAgICAgaWYgKGkgPj0gaikgYnJlYWs7XG4gICAgICAgICAgICBzd2FwKGlkcywgaSwgaik7XG4gICAgICAgICAgICBzd2FwKHBvc2l0aW9ucywgMyAqIGksIDMgKiBqKTtcbiAgICAgICAgICAgIHN3YXAocG9zaXRpb25zLCAzICogaSArIDEsIDMgKiBqICsgMSk7XG4gICAgICAgICAgICBzd2FwKHBvc2l0aW9ucywgMyAqIGkgKyAyLCAzICogaiArIDIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGogLSBsZWZ0IDwgcmlnaHQgLSBqKSB7XG4gICAgICAgICAgICBzb3J0KGlkcywgcG9zaXRpb25zLCBsZWZ0LCBqKTtcbiAgICAgICAgICAgIGxlZnQgPSBqICsgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNvcnQoaWRzLCBwb3NpdGlvbnMsIGogKyAxLCByaWdodCk7XG4gICAgICAgICAgICByaWdodCA9IGo7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHN3YXAoYXJyLCBpLCBqKSB7XG4gICAgY29uc3QgdG1wID0gYXJyW2ldO1xuICAgIGFycltpXSA9IGFycltqXTtcbiAgICBhcnJbal0gPSB0bXA7XG59XG5cbnJlZ2lzdGVyKCdGZWF0dXJlUG9zaXRpb25NYXAnLCBGZWF0dXJlUG9zaXRpb25NYXApO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IENvbG9yIGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5cbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vZ2wvY29udGV4dCc7XG5cbmV4cG9ydCB0eXBlIFVuaWZvcm1WYWx1ZXM8VXM6IE9iamVjdD5cbiAgICA9ICRFeGFjdDwkT2JqTWFwPFVzLCA8Vj4odTogVW5pZm9ybTxWPikgPT4gVj4+O1xuZXhwb3J0IHR5cGUgVW5pZm9ybUxvY2F0aW9ucyA9IHtbXzogc3RyaW5nXTogV2ViR0xVbmlmb3JtTG9jYXRpb259O1xuXG5jbGFzcyBVbmlmb3JtPFQ+IHtcbiAgICBnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0O1xuICAgIGxvY2F0aW9uOiA/V2ViR0xVbmlmb3JtTG9jYXRpb247XG4gICAgY3VycmVudDogVDtcblxuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uOiBXZWJHTFVuaWZvcm1Mb2NhdGlvbikge1xuICAgICAgICB0aGlzLmdsID0gY29udGV4dC5nbDtcbiAgICAgICAgdGhpcy5sb2NhdGlvbiA9IGxvY2F0aW9uO1xuICAgIH1cblxuICAgICtzZXQ6ICh2OiBUKSA9PiB2b2lkO1xufVxuXG5jbGFzcyBVbmlmb3JtMWkgZXh0ZW5kcyBVbmlmb3JtPG51bWJlcj4ge1xuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uOiBXZWJHTFVuaWZvcm1Mb2NhdGlvbikge1xuICAgICAgICBzdXBlcihjb250ZXh0LCBsb2NhdGlvbik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IDA7XG4gICAgfVxuXG4gICAgc2V0KHY6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50ICE9PSB2KSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICAgICAgdGhpcy5nbC51bmlmb3JtMWkodGhpcy5sb2NhdGlvbiwgdik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIFVuaWZvcm0xZiBleHRlbmRzIFVuaWZvcm08bnVtYmVyPiB7XG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb246IFdlYkdMVW5pZm9ybUxvY2F0aW9uKSB7XG4gICAgICAgIHN1cGVyKGNvbnRleHQsIGxvY2F0aW9uKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gMDtcbiAgICB9XG5cbiAgICBzZXQodjogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnQgIT09IHYpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgICAgICB0aGlzLmdsLnVuaWZvcm0xZih0aGlzLmxvY2F0aW9uLCB2KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgVW5pZm9ybTJmIGV4dGVuZHMgVW5pZm9ybTxbbnVtYmVyLCBudW1iZXJdPiB7XG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb246IFdlYkdMVW5pZm9ybUxvY2F0aW9uKSB7XG4gICAgICAgIHN1cGVyKGNvbnRleHQsIGxvY2F0aW9uKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gWzAsIDBdO1xuICAgIH1cblxuICAgIHNldCh2OiBbbnVtYmVyLCBudW1iZXJdKTogdm9pZCB7XG4gICAgICAgIGlmICh2WzBdICE9PSB0aGlzLmN1cnJlbnRbMF0gfHwgdlsxXSAhPT0gdGhpcy5jdXJyZW50WzFdKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICAgICAgdGhpcy5nbC51bmlmb3JtMmYodGhpcy5sb2NhdGlvbiwgdlswXSwgdlsxXSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIFVuaWZvcm0zZiBleHRlbmRzIFVuaWZvcm08W251bWJlciwgbnVtYmVyLCBudW1iZXJdPiB7XG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb246IFdlYkdMVW5pZm9ybUxvY2F0aW9uKSB7XG4gICAgICAgIHN1cGVyKGNvbnRleHQsIGxvY2F0aW9uKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gWzAsIDAsIDBdO1xuICAgIH1cblxuICAgIHNldCh2OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pOiB2b2lkIHtcbiAgICAgICAgaWYgKHZbMF0gIT09IHRoaXMuY3VycmVudFswXSB8fCB2WzFdICE9PSB0aGlzLmN1cnJlbnRbMV0gfHwgdlsyXSAhPT0gdGhpcy5jdXJyZW50WzJdKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICAgICAgdGhpcy5nbC51bmlmb3JtM2YodGhpcy5sb2NhdGlvbiwgdlswXSwgdlsxXSwgdlsyXSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIFVuaWZvcm00ZiBleHRlbmRzIFVuaWZvcm08W251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0+IHtcbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbjogV2ViR0xVbmlmb3JtTG9jYXRpb24pIHtcbiAgICAgICAgc3VwZXIoY29udGV4dCwgbG9jYXRpb24pO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSBbMCwgMCwgMCwgMF07XG4gICAgfVxuXG4gICAgc2V0KHY6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdKTogdm9pZCB7XG4gICAgICAgIGlmICh2WzBdICE9PSB0aGlzLmN1cnJlbnRbMF0gfHwgdlsxXSAhPT0gdGhpcy5jdXJyZW50WzFdIHx8XG4gICAgICAgICAgICB2WzJdICE9PSB0aGlzLmN1cnJlbnRbMl0gfHwgdlszXSAhPT0gdGhpcy5jdXJyZW50WzNdKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICAgICAgdGhpcy5nbC51bmlmb3JtNGYodGhpcy5sb2NhdGlvbiwgdlswXSwgdlsxXSwgdlsyXSwgdlszXSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIFVuaWZvcm1Db2xvciBleHRlbmRzIFVuaWZvcm08Q29sb3I+IHtcbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbjogV2ViR0xVbmlmb3JtTG9jYXRpb24pIHtcbiAgICAgICAgc3VwZXIoY29udGV4dCwgbG9jYXRpb24pO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSBDb2xvci50cmFuc3BhcmVudDtcbiAgICB9XG5cbiAgICBzZXQodjogQ29sb3IpOiB2b2lkIHtcbiAgICAgICAgaWYgKHYuciAhPT0gdGhpcy5jdXJyZW50LnIgfHwgdi5nICE9PSB0aGlzLmN1cnJlbnQuZyB8fFxuICAgICAgICAgICAgdi5iICE9PSB0aGlzLmN1cnJlbnQuYiB8fCB2LmEgIT09IHRoaXMuY3VycmVudC5hKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICAgICAgdGhpcy5nbC51bmlmb3JtNGYodGhpcy5sb2NhdGlvbiwgdi5yLCB2LmcsIHYuYiwgdi5hKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY29uc3QgZW1wdHlNYXQ0ID0gbmV3IEZsb2F0MzJBcnJheSgxNik7XG5jbGFzcyBVbmlmb3JtTWF0cml4NGYgZXh0ZW5kcyBVbmlmb3JtPEZsb2F0MzJBcnJheT4ge1xuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uOiBXZWJHTFVuaWZvcm1Mb2NhdGlvbikge1xuICAgICAgICBzdXBlcihjb250ZXh0LCBsb2NhdGlvbik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IGVtcHR5TWF0NDtcbiAgICB9XG5cbiAgICBzZXQodjogRmxvYXQzMkFycmF5KTogdm9pZCB7XG4gICAgICAgIC8vIFRoZSB2YXN0IG1ham9yaXR5IG9mIG1hdHJpeCBjb21wYXJpc29ucyB0aGF0IHdpbGwgdHJpcCB0aGlzIHNldFxuICAgICAgICAvLyBoYXBwZW4gYXQgaT0xMiBvciBpPTAsIHNvIHdlIGNoZWNrIHRob3NlIGZpcnN0IHRvIGF2b2lkIGxvdHMgb2ZcbiAgICAgICAgLy8gdW5uZWNlc3NhcnkgaXRlcmF0aW9uOlxuICAgICAgICBpZiAodlsxMl0gIT09IHRoaXMuY3VycmVudFsxMl0gfHwgdlswXSAhPT0gdGhpcy5jdXJyZW50WzBdKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICAgICAgdGhpcy5nbC51bmlmb3JtTWF0cml4NGZ2KHRoaXMubG9jYXRpb24sIGZhbHNlLCB2KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IDE2OyBpKyspIHtcbiAgICAgICAgICAgIGlmICh2W2ldICE9PSB0aGlzLmN1cnJlbnRbaV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICAgICAgICAgIHRoaXMuZ2wudW5pZm9ybU1hdHJpeDRmdih0aGlzLmxvY2F0aW9uLCBmYWxzZSwgdik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCB7XG4gICAgVW5pZm9ybSxcbiAgICBVbmlmb3JtMWksXG4gICAgVW5pZm9ybTFmLFxuICAgIFVuaWZvcm0yZixcbiAgICBVbmlmb3JtM2YsXG4gICAgVW5pZm9ybTRmLFxuICAgIFVuaWZvcm1Db2xvcixcbiAgICBVbmlmb3JtTWF0cml4NGZcbn07XG5cbmV4cG9ydCB0eXBlIFVuaWZvcm1CaW5kaW5ncyA9IHtbXzogc3RyaW5nXTogVW5pZm9ybTxhbnk+fTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7cGFja1VpbnQ4VG9GbG9hdH0gZnJvbSAnLi4vc2hhZGVycy9lbmNvZGVfYXR0cmlidXRlJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuaW1wb3J0IHtzdXBwb3J0c1Byb3BlcnR5RXhwcmVzc2lvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL3Byb3BlcnRpZXMnO1xuaW1wb3J0IHtyZWdpc3Rlcn0gZnJvbSAnLi4vdXRpbC93ZWJfd29ya2VyX3RyYW5zZmVyJztcbmltcG9ydCB7UG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlfSBmcm9tICcuLi9zdHlsZS9wcm9wZXJ0aWVzJztcbmltcG9ydCB7U3RydWN0QXJyYXlMYXlvdXQxZjQsIFN0cnVjdEFycmF5TGF5b3V0MmY4LCBTdHJ1Y3RBcnJheUxheW91dDRmMTYsIFBhdHRlcm5MYXlvdXRBcnJheX0gZnJvbSAnLi9hcnJheV90eXBlcyc7XG5pbXBvcnQge2NsYW1wfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHBhdHRlcm5BdHRyaWJ1dGVzIGZyb20gJy4vYnVja2V0L3BhdHRlcm5fYXR0cmlidXRlcyc7XG5pbXBvcnQgRXZhbHVhdGlvblBhcmFtZXRlcnMgZnJvbSAnLi4vc3R5bGUvZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcbmltcG9ydCBGZWF0dXJlUG9zaXRpb25NYXAgZnJvbSAnLi9mZWF0dXJlX3Bvc2l0aW9uX21hcCc7XG5pbXBvcnQge1xuICAgIFVuaWZvcm0sXG4gICAgVW5pZm9ybTFmLFxuICAgIFVuaWZvcm1Db2xvcixcbiAgICBVbmlmb3JtNGYsXG4gICAgdHlwZSBVbmlmb3JtTG9jYXRpb25zXG59IGZyb20gJy4uL3JlbmRlci91bmlmb3JtX2JpbmRpbmcnO1xuXG5pbXBvcnQgdHlwZSB7Q2Fub25pY2FsVGlsZUlEfSBmcm9tICcuLi9zb3VyY2UvdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1R5cGVkU3R5bGVMYXllcn0gZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXIvdHlwZWRfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUge0Nyb3NzZmFkZVBhcmFtZXRlcnN9IGZyb20gJy4uL3N0eWxlL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5pbXBvcnQgdHlwZSB7U3RydWN0QXJyYXksIFN0cnVjdEFycmF5TWVtYmVyfSBmcm9tICcuLi91dGlsL3N0cnVjdF9hcnJheSc7XG5pbXBvcnQgdHlwZSBWZXJ0ZXhCdWZmZXIgZnJvbSAnLi4vZ2wvdmVydGV4X2J1ZmZlcic7XG5pbXBvcnQgdHlwZSB7SW1hZ2VQb3NpdGlvbn0gZnJvbSAnLi4vcmVuZGVyL2ltYWdlX2F0bGFzJztcbmltcG9ydCB0eXBlIHtcbiAgICBGZWF0dXJlLFxuICAgIEZlYXR1cmVTdGF0ZSxcbiAgICBHbG9iYWxQcm9wZXJ0aWVzLFxuICAgIFNvdXJjZUV4cHJlc3Npb24sXG4gICAgQ29tcG9zaXRlRXhwcmVzc2lvblxufSBmcm9tICcuLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUge1Bvc3NpYmx5RXZhbHVhdGVkfSBmcm9tICcuLi9zdHlsZS9wcm9wZXJ0aWVzJztcbmltcG9ydCB0eXBlIHtGZWF0dXJlU3RhdGVzfSBmcm9tICcuLi9zb3VyY2Uvc291cmNlX3N0YXRlJztcbmltcG9ydCB0eXBlIHtGb3JtYXR0ZWRTZWN0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvZm9ybWF0dGVkJztcblxuZXhwb3J0IHR5cGUgQmluZGVyVW5pZm9ybSA9IHtcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcHJvcGVydHk6IHN0cmluZyxcbiAgICBiaW5kaW5nOiBVbmlmb3JtPGFueT5cbn07XG5cbmZ1bmN0aW9uIHBhY2tDb2xvcihjb2xvcjogQ29sb3IpOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgICByZXR1cm4gW1xuICAgICAgICBwYWNrVWludDhUb0Zsb2F0KDI1NSAqIGNvbG9yLnIsIDI1NSAqIGNvbG9yLmcpLFxuICAgICAgICBwYWNrVWludDhUb0Zsb2F0KDI1NSAqIGNvbG9yLmIsIDI1NSAqIGNvbG9yLmEpXG4gICAgXTtcbn1cblxuLyoqXG4gKiAgYEJpbmRlcmAgaXMgdGhlIGludGVyZmFjZSBkZWZpbml0aW9uIGZvciB0aGUgc3RyYXRlZ2llcyBmb3IgY29uc3RydWN0aW5nLFxuICogIHVwbG9hZGluZywgYW5kIGJpbmRpbmcgcGFpbnQgcHJvcGVydHkgZGF0YSBhcyBHTFNMIGF0dHJpYnV0ZXMuIE1vc3Qgc3R5bGUtXG4gKiAgc3BlYyBwcm9wZXJ0aWVzIGhhdmUgYSAxOjEgcmVsYXRpb25zaGlwIHRvIHNoYWRlciBhdHRyaWJ1dGUvdW5pZm9ybXMsIGJ1dFxuICogIHNvbWUgcmVxdWlyZSBtdWx0bGlwbGUgdmFsdWVzIHBlciBmZWF0dXJlIHRvIGJlIHBhc3NlZCB0byB0aGUgR1BVLCBhbmQgaW5cbiAqICB0aG9zZSBjYXNlcyB3ZSBiaW5kIG11bHRpcGxlIGF0dHJpYnV0ZXMvdW5pZm9ybXMuXG4gKlxuICogIEl0IGhhcyB0aHJlZSBpbXBsZW1lbnRhdGlvbnMsIG9uZSBmb3IgZWFjaCBvZiB0aGUgdGhyZWUgc3RyYXRlZ2llcyB3ZSB1c2U6XG4gKlxuICogICogRm9yIF9jb25zdGFudF8gcHJvcGVydGllcyAtLSB0aG9zZSB3aG9zZSB2YWx1ZSBpcyBhIGNvbnN0YW50LCBvciB0aGUgY29uc3RhbnRcbiAqICAgIHJlc3VsdCBvZiBldmFsdWF0aW5nIGEgY2FtZXJhIGV4cHJlc3Npb24gYXQgYSBwYXJ0aWN1bGFyIGNhbWVyYSBwb3NpdGlvbiAtLSB3ZVxuICogICAgZG9uJ3QgbmVlZCBhIHZlcnRleCBhdHRyaWJ1dGUgYnVmZmVyLCBhbmQgaW5zdGVhZCB1c2UgYSB1bmlmb3JtLlxuICogICogRm9yIGRhdGEgZXhwcmVzc2lvbnMsIHdlIHVzZSBhIHZlcnRleCBidWZmZXIgd2l0aCBhIHNpbmdsZSBhdHRyaWJ1dGUgdmFsdWUsXG4gKiAgICB0aGUgZXZhbHVhdGVkIHJlc3VsdCBvZiB0aGUgc291cmNlIGZ1bmN0aW9uIGZvciB0aGUgZ2l2ZW4gZmVhdHVyZS5cbiAqICAqIEZvciBjb21wb3NpdGUgZXhwcmVzc2lvbnMsIHdlIHVzZSBhIHZlcnRleCBidWZmZXIgd2l0aCB0d28gYXR0cmlidXRlczogbWluIGFuZFxuICogICAgbWF4IHZhbHVlcyBjb3ZlcmluZyB0aGUgcmFuZ2Ugb2Ygem9vbXMgYXQgd2hpY2ggd2UgZXhwZWN0IHRoZSB0aWxlIHRvIGJlXG4gKiAgICBkaXNwbGF5ZWQuIFRoZXNlIHZhbHVlcyBhcmUgY2FsY3VsYXRlZCBieSBldmFsdWF0aW5nIHRoZSBjb21wb3NpdGUgZXhwcmVzc2lvbiBmb3JcbiAqICAgIHRoZSBnaXZlbiBmZWF0dXJlIGF0IHN0cmF0ZWdpY2FsbHkgY2hvc2VuIHpvb20gbGV2ZWxzLiBJbiBhZGRpdGlvbiB0byB0aGlzXG4gKiAgICBhdHRyaWJ1dGUgZGF0YSwgd2UgYWxzbyB1c2UgYSB1bmlmb3JtIHZhbHVlIHdoaWNoIHRoZSBzaGFkZXIgdXNlcyB0byBpbnRlcnBvbGF0ZVxuICogICAgYmV0d2VlbiB0aGUgbWluIGFuZCBtYXggdmFsdWUgYXQgdGhlIGZpbmFsIGRpc3BsYXllZCB6b29tIGxldmVsLiBUaGUgdXNlIG9mIGFcbiAqICAgIHVuaWZvcm0gYWxsb3dzIHVzIHRvIGNoZWFwbHkgdXBkYXRlIHRoZSB2YWx1ZSBvbiBldmVyeSBmcmFtZS5cbiAqXG4gKiAgTm90ZSB0aGF0IHRoZSBzaGFkZXIgc291cmNlIHZhcmllcyBkZXBlbmRpbmcgb24gd2hldGhlciB3ZSdyZSB1c2luZyBhIHVuaWZvcm0gb3JcbiAqICBhdHRyaWJ1dGUuIFdlIGR5bmFtaWNhbGx5IGNvbXBpbGUgc2hhZGVycyBhdCBydW50aW1lIHRvIGFjY29tb2RhdGUgdGhpcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmludGVyZmFjZSBBdHRyaWJ1dGVCaW5kZXIge1xuICAgIHBvcHVsYXRlUGFpbnRBcnJheShsZW5ndGg6IG51bWJlciwgZmVhdHVyZTogRmVhdHVyZSwgaW1hZ2VQb3NpdGlvbnM6IHtbXzogc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0sIGNhbm9uaWNhbD86IENhbm9uaWNhbFRpbGVJRCwgZm9ybWF0dGVkU2VjdGlvbj86IEZvcm1hdHRlZFNlY3Rpb24pOiB2b2lkO1xuICAgIHVwZGF0ZVBhaW50QXJyYXkoc3RhcnQ6IG51bWJlciwgbGVuZ3RoOiBudW1iZXIsIGZlYXR1cmU6IEZlYXR1cmUsIGZlYXR1cmVTdGF0ZTogRmVhdHVyZVN0YXRlLCBpbWFnZVBvc2l0aW9uczoge1tfOiBzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSk6IHZvaWQ7XG4gICAgdXBsb2FkKENvbnRleHQpOiB2b2lkO1xuICAgIGRlc3Ryb3koKTogdm9pZDtcbn1cblxuaW50ZXJmYWNlIFVuaWZvcm1CaW5kZXIge1xuICAgIHVuaWZvcm1OYW1lczogQXJyYXk8c3RyaW5nPjtcbiAgICBzZXRVbmlmb3JtKHVuaWZvcm06IFVuaWZvcm08Kj4sIGdsb2JhbHM6IEdsb2JhbFByb3BlcnRpZXMsIGN1cnJlbnRWYWx1ZTogUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPCo+LCB1bmlmb3JtTmFtZTogc3RyaW5nKTogdm9pZDtcbiAgICBnZXRCaW5kaW5nKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uOiBXZWJHTFVuaWZvcm1Mb2NhdGlvbiwgbmFtZTogc3RyaW5nKTogJFNoYXBlPFVuaWZvcm08Kj4+O1xufVxuXG5jbGFzcyBDb25zdGFudEJpbmRlciBpbXBsZW1lbnRzIFVuaWZvcm1CaW5kZXIge1xuICAgIHZhbHVlOiBtaXhlZDtcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgdW5pZm9ybU5hbWVzOiBBcnJheTxzdHJpbmc+O1xuXG4gICAgY29uc3RydWN0b3IodmFsdWU6IG1peGVkLCBuYW1lczogQXJyYXk8c3RyaW5nPiwgdHlwZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy51bmlmb3JtTmFtZXMgPSBuYW1lcy5tYXAobmFtZSA9PiBgdV8ke25hbWV9YCk7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgfVxuXG4gICAgc2V0VW5pZm9ybSh1bmlmb3JtOiBVbmlmb3JtPCo+LCBnbG9iYWxzOiBHbG9iYWxQcm9wZXJ0aWVzLCBjdXJyZW50VmFsdWU6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxtaXhlZD4pOiB2b2lkIHtcbiAgICAgICAgdW5pZm9ybS5zZXQoY3VycmVudFZhbHVlLmNvbnN0YW50T3IodGhpcy52YWx1ZSkpO1xuICAgIH1cblxuICAgIGdldEJpbmRpbmcoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb246IFdlYkdMVW5pZm9ybUxvY2F0aW9uLCBfOiBzdHJpbmcpOiAkU2hhcGU8VW5pZm9ybTxhbnk+PiB7XG4gICAgICAgIHJldHVybiAodGhpcy50eXBlID09PSAnY29sb3InKSA/XG4gICAgICAgICAgICBuZXcgVW5pZm9ybUNvbG9yKGNvbnRleHQsIGxvY2F0aW9uKSA6XG4gICAgICAgICAgICBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9uKTtcbiAgICB9XG59XG5cbmNsYXNzIENyb3NzRmFkZWRDb25zdGFudEJpbmRlciBpbXBsZW1lbnRzIFVuaWZvcm1CaW5kZXIge1xuICAgIHVuaWZvcm1OYW1lczogQXJyYXk8c3RyaW5nPjtcbiAgICBwYXR0ZXJuRnJvbTogP0FycmF5PG51bWJlcj47XG4gICAgcGF0dGVyblRvOiA/QXJyYXk8bnVtYmVyPjtcbiAgICBwaXhlbFJhdGlvRnJvbTogbnVtYmVyO1xuICAgIHBpeGVsUmF0aW9UbzogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IodmFsdWU6IG1peGVkLCBuYW1lczogQXJyYXk8c3RyaW5nPikge1xuICAgICAgICB0aGlzLnVuaWZvcm1OYW1lcyA9IG5hbWVzLm1hcChuYW1lID0+IGB1XyR7bmFtZX1gKTtcbiAgICAgICAgdGhpcy5wYXR0ZXJuRnJvbSA9IG51bGw7XG4gICAgICAgIHRoaXMucGF0dGVyblRvID0gbnVsbDtcbiAgICAgICAgdGhpcy5waXhlbFJhdGlvRnJvbSA9IDEuMDtcbiAgICAgICAgdGhpcy5waXhlbFJhdGlvVG8gPSAxLjA7XG4gICAgfVxuXG4gICAgc2V0Q29uc3RhbnRQYXR0ZXJuUG9zaXRpb25zKHBvc1RvOiBJbWFnZVBvc2l0aW9uLCBwb3NGcm9tOiBJbWFnZVBvc2l0aW9uKSB7XG4gICAgICAgIHRoaXMucGl4ZWxSYXRpb0Zyb20gPSBwb3NGcm9tLnBpeGVsUmF0aW87XG4gICAgICAgIHRoaXMucGl4ZWxSYXRpb1RvID0gcG9zVG8ucGl4ZWxSYXRpbztcbiAgICAgICAgdGhpcy5wYXR0ZXJuRnJvbSA9IHBvc0Zyb20udGxicjtcbiAgICAgICAgdGhpcy5wYXR0ZXJuVG8gPSBwb3NUby50bGJyO1xuICAgIH1cblxuICAgIHNldFVuaWZvcm0odW5pZm9ybTogVW5pZm9ybTwqPiwgZ2xvYmFsczogR2xvYmFsUHJvcGVydGllcywgY3VycmVudFZhbHVlOiBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8bWl4ZWQ+LCB1bmlmb3JtTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHBvcyA9XG4gICAgICAgICAgICB1bmlmb3JtTmFtZSA9PT0gJ3VfcGF0dGVybl90bycgPyB0aGlzLnBhdHRlcm5UbyA6XG4gICAgICAgICAgICB1bmlmb3JtTmFtZSA9PT0gJ3VfcGF0dGVybl9mcm9tJyA/IHRoaXMucGF0dGVybkZyb20gOlxuICAgICAgICAgICAgdW5pZm9ybU5hbWUgPT09ICd1X3BpeGVsX3JhdGlvX3RvJyA/IHRoaXMucGl4ZWxSYXRpb1RvIDpcbiAgICAgICAgICAgIHVuaWZvcm1OYW1lID09PSAndV9waXhlbF9yYXRpb19mcm9tJyA/IHRoaXMucGl4ZWxSYXRpb0Zyb20gOiBudWxsO1xuICAgICAgICBpZiAocG9zKSB1bmlmb3JtLnNldChwb3MpO1xuICAgIH1cblxuICAgIGdldEJpbmRpbmcoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb246IFdlYkdMVW5pZm9ybUxvY2F0aW9uLCBuYW1lOiBzdHJpbmcpOiAkU2hhcGU8VW5pZm9ybTxhbnk+PiB7XG4gICAgICAgIHJldHVybiBuYW1lLnN1YnN0cigwLCA5KSA9PT0gJ3VfcGF0dGVybicgP1xuICAgICAgICAgICAgbmV3IFVuaWZvcm00Zihjb250ZXh0LCBsb2NhdGlvbikgOlxuICAgICAgICAgICAgbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbik7XG4gICAgfVxufVxuXG5jbGFzcyBTb3VyY2VFeHByZXNzaW9uQmluZGVyIGltcGxlbWVudHMgQXR0cmlidXRlQmluZGVyIHtcbiAgICBleHByZXNzaW9uOiBTb3VyY2VFeHByZXNzaW9uO1xuICAgIHR5cGU6IHN0cmluZztcbiAgICBtYXhWYWx1ZTogbnVtYmVyO1xuXG4gICAgcGFpbnRWZXJ0ZXhBcnJheTogU3RydWN0QXJyYXk7XG4gICAgcGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzOiBBcnJheTxTdHJ1Y3RBcnJheU1lbWJlcj47XG4gICAgcGFpbnRWZXJ0ZXhCdWZmZXI6ID9WZXJ0ZXhCdWZmZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihleHByZXNzaW9uOiBTb3VyY2VFeHByZXNzaW9uLCBuYW1lczogQXJyYXk8c3RyaW5nPiwgdHlwZTogc3RyaW5nLCBQYWludFZlcnRleEFycmF5OiBDbGFzczxTdHJ1Y3RBcnJheT4pIHtcbiAgICAgICAgdGhpcy5leHByZXNzaW9uID0gZXhwcmVzc2lvbjtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgdGhpcy5tYXhWYWx1ZSA9IDA7XG4gICAgICAgIHRoaXMucGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzID0gbmFtZXMubWFwKChuYW1lKSA9PiAoe1xuICAgICAgICAgICAgbmFtZTogYGFfJHtuYW1lfWAsXG4gICAgICAgICAgICB0eXBlOiAnRmxvYXQzMicsXG4gICAgICAgICAgICBjb21wb25lbnRzOiB0eXBlID09PSAnY29sb3InID8gMiA6IDEsXG4gICAgICAgICAgICBvZmZzZXQ6IDBcbiAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLnBhaW50VmVydGV4QXJyYXkgPSBuZXcgUGFpbnRWZXJ0ZXhBcnJheSgpO1xuICAgIH1cblxuICAgIHBvcHVsYXRlUGFpbnRBcnJheShuZXdMZW5ndGg6IG51bWJlciwgZmVhdHVyZTogRmVhdHVyZSwgaW1hZ2VQb3NpdGlvbnM6IHtbXzogc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0sIGNhbm9uaWNhbD86IENhbm9uaWNhbFRpbGVJRCwgZm9ybWF0dGVkU2VjdGlvbj86IEZvcm1hdHRlZFNlY3Rpb24pIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLnBhaW50VmVydGV4QXJyYXkubGVuZ3RoO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgRXZhbHVhdGlvblBhcmFtZXRlcnMoMCksIGZlYXR1cmUsIHt9LCBjYW5vbmljYWwsIFtdLCBmb3JtYXR0ZWRTZWN0aW9uKTtcbiAgICAgICAgdGhpcy5wYWludFZlcnRleEFycmF5LnJlc2l6ZShuZXdMZW5ndGgpO1xuICAgICAgICB0aGlzLl9zZXRQYWludFZhbHVlKHN0YXJ0LCBuZXdMZW5ndGgsIHZhbHVlKTtcbiAgICB9XG5cbiAgICB1cGRhdGVQYWludEFycmF5KHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyLCBmZWF0dXJlOiBGZWF0dXJlLCBmZWF0dXJlU3RhdGU6IEZlYXR1cmVTdGF0ZSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZSh7em9vbTogMH0sIGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSk7XG4gICAgICAgIHRoaXMuX3NldFBhaW50VmFsdWUoc3RhcnQsIGVuZCwgdmFsdWUpO1xuICAgIH1cblxuICAgIF9zZXRQYWludFZhbHVlKHN0YXJ0LCBlbmQsIHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdjb2xvcicpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yID0gcGFja0NvbG9yKHZhbHVlKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYWludFZlcnRleEFycmF5LmVtcGxhY2UoaSwgY29sb3JbMF0sIGNvbG9yWzFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYWludFZlcnRleEFycmF5LmVtcGxhY2UoaSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5tYXhWYWx1ZSA9IE1hdGgubWF4KHRoaXMubWF4VmFsdWUsIE1hdGguYWJzKHZhbHVlKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGxvYWQoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgICBpZiAodGhpcy5wYWludFZlcnRleEFycmF5ICYmIHRoaXMucGFpbnRWZXJ0ZXhBcnJheS5hcnJheUJ1ZmZlcikge1xuICAgICAgICAgICAgaWYgKHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIgJiYgdGhpcy5wYWludFZlcnRleEJ1ZmZlci5idWZmZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhaW50VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEodGhpcy5wYWludFZlcnRleEFycmF5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYWludFZlcnRleEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMucGFpbnRWZXJ0ZXhBcnJheSwgdGhpcy5wYWludFZlcnRleEF0dHJpYnV0ZXMsIHRoaXMuZXhwcmVzc2lvbi5pc1N0YXRlRGVwZW5kZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLnBhaW50VmVydGV4QnVmZmVyKSB7XG4gICAgICAgICAgICB0aGlzLnBhaW50VmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQ29tcG9zaXRlRXhwcmVzc2lvbkJpbmRlciBpbXBsZW1lbnRzIEF0dHJpYnV0ZUJpbmRlciwgVW5pZm9ybUJpbmRlciB7XG4gICAgZXhwcmVzc2lvbjogQ29tcG9zaXRlRXhwcmVzc2lvbjtcbiAgICB1bmlmb3JtTmFtZXM6IEFycmF5PHN0cmluZz47XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIHVzZUludGVnZXJab29tOiBib29sZWFuO1xuICAgIHpvb206IG51bWJlcjtcbiAgICBtYXhWYWx1ZTogbnVtYmVyO1xuXG4gICAgcGFpbnRWZXJ0ZXhBcnJheTogU3RydWN0QXJyYXk7XG4gICAgcGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzOiBBcnJheTxTdHJ1Y3RBcnJheU1lbWJlcj47XG4gICAgcGFpbnRWZXJ0ZXhCdWZmZXI6ID9WZXJ0ZXhCdWZmZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihleHByZXNzaW9uOiBDb21wb3NpdGVFeHByZXNzaW9uLCBuYW1lczogQXJyYXk8c3RyaW5nPiwgdHlwZTogc3RyaW5nLCB1c2VJbnRlZ2VyWm9vbTogYm9vbGVhbiwgem9vbTogbnVtYmVyLCBQYWludFZlcnRleEFycmF5OiBDbGFzczxTdHJ1Y3RBcnJheT4pIHtcbiAgICAgICAgdGhpcy5leHByZXNzaW9uID0gZXhwcmVzc2lvbjtcbiAgICAgICAgdGhpcy51bmlmb3JtTmFtZXMgPSBuYW1lcy5tYXAobmFtZSA9PiBgdV8ke25hbWV9X3RgKTtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgdGhpcy51c2VJbnRlZ2VyWm9vbSA9IHVzZUludGVnZXJab29tO1xuICAgICAgICB0aGlzLnpvb20gPSB6b29tO1xuICAgICAgICB0aGlzLm1heFZhbHVlID0gMDtcbiAgICAgICAgdGhpcy5wYWludFZlcnRleEF0dHJpYnV0ZXMgPSBuYW1lcy5tYXAoKG5hbWUpID0+ICh7XG4gICAgICAgICAgICBuYW1lOiBgYV8ke25hbWV9YCxcbiAgICAgICAgICAgIHR5cGU6ICdGbG9hdDMyJyxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IHR5cGUgPT09ICdjb2xvcicgPyA0IDogMixcbiAgICAgICAgICAgIG9mZnNldDogMFxuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMucGFpbnRWZXJ0ZXhBcnJheSA9IG5ldyBQYWludFZlcnRleEFycmF5KCk7XG4gICAgfVxuXG4gICAgcG9wdWxhdGVQYWludEFycmF5KG5ld0xlbmd0aDogbnVtYmVyLCBmZWF0dXJlOiBGZWF0dXJlLCBpbWFnZVBvc2l0aW9uczoge1tfOiBzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSwgY2Fub25pY2FsPzogQ2Fub25pY2FsVGlsZUlELCBmb3JtYXR0ZWRTZWN0aW9uPzogRm9ybWF0dGVkU2VjdGlvbikge1xuICAgICAgICBjb25zdCBtaW4gPSB0aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKHRoaXMuem9vbSksIGZlYXR1cmUsIHt9LCBjYW5vbmljYWwsIFtdLCBmb3JtYXR0ZWRTZWN0aW9uKTtcbiAgICAgICAgY29uc3QgbWF4ID0gdGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyh0aGlzLnpvb20gKyAxKSwgZmVhdHVyZSwge30sIGNhbm9uaWNhbCwgW10sIGZvcm1hdHRlZFNlY3Rpb24pO1xuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMucGFpbnRWZXJ0ZXhBcnJheS5sZW5ndGg7XG4gICAgICAgIHRoaXMucGFpbnRWZXJ0ZXhBcnJheS5yZXNpemUobmV3TGVuZ3RoKTtcbiAgICAgICAgdGhpcy5fc2V0UGFpbnRWYWx1ZShzdGFydCwgbmV3TGVuZ3RoLCBtaW4sIG1heCk7XG4gICAgfVxuXG4gICAgdXBkYXRlUGFpbnRBcnJheShzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlciwgZmVhdHVyZTogRmVhdHVyZSwgZmVhdHVyZVN0YXRlOiBGZWF0dXJlU3RhdGUpIHtcbiAgICAgICAgY29uc3QgbWluID0gdGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKHt6b29tOiB0aGlzLnpvb219LCBmZWF0dXJlLCBmZWF0dXJlU3RhdGUpO1xuICAgICAgICBjb25zdCBtYXggPSB0aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUoe3pvb206IHRoaXMuem9vbSArIDF9LCBmZWF0dXJlLCBmZWF0dXJlU3RhdGUpO1xuICAgICAgICB0aGlzLl9zZXRQYWludFZhbHVlKHN0YXJ0LCBlbmQsIG1pbiwgbWF4KTtcbiAgICB9XG5cbiAgICBfc2V0UGFpbnRWYWx1ZShzdGFydCwgZW5kLCBtaW4sIG1heCkge1xuICAgICAgICBpZiAodGhpcy50eXBlID09PSAnY29sb3InKSB7XG4gICAgICAgICAgICBjb25zdCBtaW5Db2xvciA9IHBhY2tDb2xvcihtaW4pO1xuICAgICAgICAgICAgY29uc3QgbWF4Q29sb3IgPSBwYWNrQ29sb3IobWF4KTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYWludFZlcnRleEFycmF5LmVtcGxhY2UoaSwgbWluQ29sb3JbMF0sIG1pbkNvbG9yWzFdLCBtYXhDb2xvclswXSwgbWF4Q29sb3JbMV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhaW50VmVydGV4QXJyYXkuZW1wbGFjZShpLCBtaW4sIG1heCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm1heFZhbHVlID0gTWF0aC5tYXgodGhpcy5tYXhWYWx1ZSwgTWF0aC5hYnMobWluKSwgTWF0aC5hYnMobWF4KSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGxvYWQoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgICBpZiAodGhpcy5wYWludFZlcnRleEFycmF5ICYmIHRoaXMucGFpbnRWZXJ0ZXhBcnJheS5hcnJheUJ1ZmZlcikge1xuICAgICAgICAgICAgaWYgKHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIgJiYgdGhpcy5wYWludFZlcnRleEJ1ZmZlci5idWZmZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhaW50VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEodGhpcy5wYWludFZlcnRleEFycmF5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYWludFZlcnRleEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMucGFpbnRWZXJ0ZXhBcnJheSwgdGhpcy5wYWludFZlcnRleEF0dHJpYnV0ZXMsIHRoaXMuZXhwcmVzc2lvbi5pc1N0YXRlRGVwZW5kZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLnBhaW50VmVydGV4QnVmZmVyKSB7XG4gICAgICAgICAgICB0aGlzLnBhaW50VmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldFVuaWZvcm0odW5pZm9ybTogVW5pZm9ybTwqPiwgZ2xvYmFsczogR2xvYmFsUHJvcGVydGllcyk6IHZvaWQge1xuICAgICAgICBjb25zdCBjdXJyZW50Wm9vbSA9IHRoaXMudXNlSW50ZWdlclpvb20gPyBNYXRoLmZsb29yKGdsb2JhbHMuem9vbSkgOiBnbG9iYWxzLnpvb207XG4gICAgICAgIGNvbnN0IGZhY3RvciA9IGNsYW1wKHRoaXMuZXhwcmVzc2lvbi5pbnRlcnBvbGF0aW9uRmFjdG9yKGN1cnJlbnRab29tLCB0aGlzLnpvb20sIHRoaXMuem9vbSArIDEpLCAwLCAxKTtcbiAgICAgICAgdW5pZm9ybS5zZXQoZmFjdG9yKTtcbiAgICB9XG5cbiAgICBnZXRCaW5kaW5nKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uOiBXZWJHTFVuaWZvcm1Mb2NhdGlvbiwgXzogc3RyaW5nKTogVW5pZm9ybTFmIHtcbiAgICAgICAgcmV0dXJuIG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb24pO1xuICAgIH1cbn1cblxuY2xhc3MgQ3Jvc3NGYWRlZENvbXBvc2l0ZUJpbmRlciBpbXBsZW1lbnRzIEF0dHJpYnV0ZUJpbmRlciB7XG4gICAgZXhwcmVzc2lvbjogQ29tcG9zaXRlRXhwcmVzc2lvbjtcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgdXNlSW50ZWdlclpvb206IGJvb2xlYW47XG4gICAgem9vbTogbnVtYmVyO1xuICAgIGxheWVySWQ6IHN0cmluZztcblxuICAgIHpvb21JblBhaW50VmVydGV4QXJyYXk6IFN0cnVjdEFycmF5O1xuICAgIHpvb21PdXRQYWludFZlcnRleEFycmF5OiBTdHJ1Y3RBcnJheTtcbiAgICB6b29tSW5QYWludFZlcnRleEJ1ZmZlcjogP1ZlcnRleEJ1ZmZlcjtcbiAgICB6b29tT3V0UGFpbnRWZXJ0ZXhCdWZmZXI6ID9WZXJ0ZXhCdWZmZXI7XG4gICAgcGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzOiBBcnJheTxTdHJ1Y3RBcnJheU1lbWJlcj47XG5cbiAgICBjb25zdHJ1Y3RvcihleHByZXNzaW9uOiBDb21wb3NpdGVFeHByZXNzaW9uLCB0eXBlOiBzdHJpbmcsIHVzZUludGVnZXJab29tOiBib29sZWFuLCB6b29tOiBudW1iZXIsIFBhaW50VmVydGV4QXJyYXk6IENsYXNzPFN0cnVjdEFycmF5PiwgbGF5ZXJJZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMudXNlSW50ZWdlclpvb20gPSB1c2VJbnRlZ2VyWm9vbTtcbiAgICAgICAgdGhpcy56b29tID0gem9vbTtcbiAgICAgICAgdGhpcy5sYXllcklkID0gbGF5ZXJJZDtcblxuICAgICAgICB0aGlzLnpvb21JblBhaW50VmVydGV4QXJyYXkgPSBuZXcgUGFpbnRWZXJ0ZXhBcnJheSgpO1xuICAgICAgICB0aGlzLnpvb21PdXRQYWludFZlcnRleEFycmF5ID0gbmV3IFBhaW50VmVydGV4QXJyYXkoKTtcbiAgICB9XG5cbiAgICBwb3B1bGF0ZVBhaW50QXJyYXkobGVuZ3RoOiBudW1iZXIsIGZlYXR1cmU6IEZlYXR1cmUsIGltYWdlUG9zaXRpb25zOiB7W186IHN0cmluZ106IEltYWdlUG9zaXRpb259KSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy56b29tSW5QYWludFZlcnRleEFycmF5Lmxlbmd0aDtcbiAgICAgICAgdGhpcy56b29tSW5QYWludFZlcnRleEFycmF5LnJlc2l6ZShsZW5ndGgpO1xuICAgICAgICB0aGlzLnpvb21PdXRQYWludFZlcnRleEFycmF5LnJlc2l6ZShsZW5ndGgpO1xuICAgICAgICB0aGlzLl9zZXRQYWludFZhbHVlcyhzdGFydCwgbGVuZ3RoLCBmZWF0dXJlLnBhdHRlcm5zICYmIGZlYXR1cmUucGF0dGVybnNbdGhpcy5sYXllcklkXSwgaW1hZ2VQb3NpdGlvbnMpO1xuICAgIH1cblxuICAgIHVwZGF0ZVBhaW50QXJyYXkoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIsIGZlYXR1cmU6IEZlYXR1cmUsIGZlYXR1cmVTdGF0ZTogRmVhdHVyZVN0YXRlLCBpbWFnZVBvc2l0aW9uczoge1tfOiBzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSkge1xuICAgICAgICB0aGlzLl9zZXRQYWludFZhbHVlcyhzdGFydCwgZW5kLCBmZWF0dXJlLnBhdHRlcm5zICYmIGZlYXR1cmUucGF0dGVybnNbdGhpcy5sYXllcklkXSwgaW1hZ2VQb3NpdGlvbnMpO1xuICAgIH1cblxuICAgIF9zZXRQYWludFZhbHVlcyhzdGFydCwgZW5kLCBwYXR0ZXJucywgcG9zaXRpb25zKSB7XG4gICAgICAgIGlmICghcG9zaXRpb25zIHx8ICFwYXR0ZXJucykgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHttaW4sIG1pZCwgbWF4fSA9IHBhdHRlcm5zO1xuICAgICAgICBjb25zdCBpbWFnZU1pbiA9IHBvc2l0aW9uc1ttaW5dO1xuICAgICAgICBjb25zdCBpbWFnZU1pZCA9IHBvc2l0aW9uc1ttaWRdO1xuICAgICAgICBjb25zdCBpbWFnZU1heCA9IHBvc2l0aW9uc1ttYXhdO1xuICAgICAgICBpZiAoIWltYWdlTWluIHx8ICFpbWFnZU1pZCB8fCAhaW1hZ2VNYXgpIHJldHVybjtcblxuICAgICAgICAvLyBXZSBwb3B1bGF0ZSB0d28gcGFpbnQgYXJyYXlzIGJlY2F1c2UsIGZvciBjcm9zcy1mYWRlZCBwcm9wZXJ0aWVzLCB3ZSBkb24ndCBrbm93IHdoaWNoIGRpcmVjdGlvblxuICAgICAgICAvLyB3ZSdyZSBjcm9zcy1mYWRpbmcgdG8gYXQgbGF5b3V0IHRpbWUuIEluIG9yZGVyIHRvIGtlZXAgdmVydGV4IGF0dHJpYnV0ZXMgdG8gYSBtaW5pbXVtIGFuZCBub3QgcGFzc1xuICAgICAgICAvLyB1bm5lY2Vzc2FyeSB2ZXJ0ZXggZGF0YSB0byB0aGUgc2hhZGVycywgd2UgZGV0ZXJtaW5lIHdoaWNoIHRvIHVwbG9hZCBhdCBkcmF3IHRpbWUuXG4gICAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLnpvb21JblBhaW50VmVydGV4QXJyYXkuZW1wbGFjZShpLFxuICAgICAgICAgICAgICAgIGltYWdlTWlkLnRsWzBdLCBpbWFnZU1pZC50bFsxXSwgaW1hZ2VNaWQuYnJbMF0sIGltYWdlTWlkLmJyWzFdLFxuICAgICAgICAgICAgICAgIGltYWdlTWluLnRsWzBdLCBpbWFnZU1pbi50bFsxXSwgaW1hZ2VNaW4uYnJbMF0sIGltYWdlTWluLmJyWzFdLFxuICAgICAgICAgICAgICAgIGltYWdlTWlkLnBpeGVsUmF0aW8sXG4gICAgICAgICAgICAgICAgaW1hZ2VNaW4ucGl4ZWxSYXRpbyxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnpvb21PdXRQYWludFZlcnRleEFycmF5LmVtcGxhY2UoaSxcbiAgICAgICAgICAgICAgICBpbWFnZU1pZC50bFswXSwgaW1hZ2VNaWQudGxbMV0sIGltYWdlTWlkLmJyWzBdLCBpbWFnZU1pZC5iclsxXSxcbiAgICAgICAgICAgICAgICBpbWFnZU1heC50bFswXSwgaW1hZ2VNYXgudGxbMV0sIGltYWdlTWF4LmJyWzBdLCBpbWFnZU1heC5iclsxXSxcbiAgICAgICAgICAgICAgICBpbWFnZU1pZC5waXhlbFJhdGlvLFxuICAgICAgICAgICAgICAgIGltYWdlTWF4LnBpeGVsUmF0aW8sXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBsb2FkKGNvbnRleHQ6IENvbnRleHQpIHtcbiAgICAgICAgaWYgKHRoaXMuem9vbUluUGFpbnRWZXJ0ZXhBcnJheSAmJiB0aGlzLnpvb21JblBhaW50VmVydGV4QXJyYXkuYXJyYXlCdWZmZXIgJiYgdGhpcy56b29tT3V0UGFpbnRWZXJ0ZXhBcnJheSAmJiB0aGlzLnpvb21PdXRQYWludFZlcnRleEFycmF5LmFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgICB0aGlzLnpvb21JblBhaW50VmVydGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy56b29tSW5QYWludFZlcnRleEFycmF5LCBwYXR0ZXJuQXR0cmlidXRlcy5tZW1iZXJzLCB0aGlzLmV4cHJlc3Npb24uaXNTdGF0ZURlcGVuZGVudCk7XG4gICAgICAgICAgICB0aGlzLnpvb21PdXRQYWludFZlcnRleEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuem9vbU91dFBhaW50VmVydGV4QXJyYXksIHBhdHRlcm5BdHRyaWJ1dGVzLm1lbWJlcnMsIHRoaXMuZXhwcmVzc2lvbi5pc1N0YXRlRGVwZW5kZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLnpvb21PdXRQYWludFZlcnRleEJ1ZmZlcikgdGhpcy56b29tT3V0UGFpbnRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgICAgICBpZiAodGhpcy56b29tSW5QYWludFZlcnRleEJ1ZmZlcikgdGhpcy56b29tSW5QYWludFZlcnRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgfVxufVxuXG4vKipcbiAqIFByb2dyYW1Db25maWd1cmF0aW9uIGNvbnRhaW5zIHRoZSBsb2dpYyBmb3IgYmluZGluZyBzdHlsZSBsYXllciBwcm9wZXJ0aWVzIGFuZCB0aWxlXG4gKiBsYXllciBmZWF0dXJlIGRhdGEgaW50byBHTCBwcm9ncmFtIHVuaWZvcm1zIGFuZCB2ZXJ0ZXggYXR0cmlidXRlcy5cbiAqXG4gKiBOb24tZGF0YS1kcml2ZW4gcHJvcGVydHkgdmFsdWVzIGFyZSBib3VuZCB0byBzaGFkZXIgdW5pZm9ybXMuIERhdGEtZHJpdmVuIHByb3BlcnR5XG4gKiB2YWx1ZXMgYXJlIGJvdW5kIHRvIHZlcnRleCBhdHRyaWJ1dGVzLiBJbiBvcmRlciB0byBzdXBwb3J0IGEgdW5pZm9ybSBHTFNMIHN5bnRheCBvdmVyXG4gKiBib3RoLCBbTWFwYm94IEdMIFNoYWRlcnNdKGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLXNoYWRlcnMpIGRlZmluZXMgYSBgI3ByYWdtYWBcbiAqIGFic3RyYWN0aW9uLCB3aGljaCBQcm9ncmFtQ29uZmlndXJhdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgaW1wbGVtZW50aW5nLiBBdCBydW50aW1lLFxuICogaXQgZXhhbWluZXMgdGhlIGF0dHJpYnV0ZXMgb2YgYSBwYXJ0aWN1bGFyIGxheWVyLCBjb21iaW5lcyB0aGlzIHdpdGggZml4ZWQga25vd2xlZGdlXG4gKiBhYm91dCBob3cgbGF5ZXJzIG9mIHRoZSBwYXJ0aWN1bGFyIHR5cGUgYXJlIGltcGxlbWVudGVkLCBhbmQgZGV0ZXJtaW5lcyB3aGljaCB1bmlmb3Jtc1xuICogYW5kIHZlcnRleCBhdHRyaWJ1dGVzIHdpbGwgYmUgcmVxdWlyZWQuIEl0IGNhbiB0aGVuIHN1YnN0aXR1dGUgdGhlIGFwcHJvcHJpYXRlIHRleHRcbiAqIGludG8gdGhlIHNoYWRlciBzb3VyY2UgY29kZSwgY3JlYXRlIGFuZCBsaW5rIGEgcHJvZ3JhbSwgYW5kIGJpbmQgdGhlIHVuaWZvcm1zIGFuZFxuICogdmVydGV4IGF0dHJpYnV0ZXMgaW4gcHJlcGFyYXRpb24gZm9yIGRyYXdpbmcuXG4gKlxuICogV2hlbiBhIHZlY3RvciB0aWxlIGlzIHBhcnNlZCwgdGhpcyBzYW1lIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gaXMgdXNlZCB0b1xuICogcG9wdWxhdGUgdGhlIGF0dHJpYnV0ZSBidWZmZXJzIG5lZWRlZCBmb3IgZGF0YS1kcml2ZW4gc3R5bGluZyB1c2luZyB0aGUgem9vbVxuICogbGV2ZWwgYW5kIGZlYXR1cmUgcHJvcGVydHkgZGF0YS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQcm9ncmFtQ29uZmlndXJhdGlvbiB7XG4gICAgYmluZGVyczoge1tfOiBzdHJpbmddOiAoQXR0cmlidXRlQmluZGVyIHwgVW5pZm9ybUJpbmRlcikgfTtcbiAgICBjYWNoZUtleTogc3RyaW5nO1xuICAgIGxheW91dEF0dHJpYnV0ZXM6IEFycmF5PFN0cnVjdEFycmF5TWVtYmVyPjtcblxuICAgIF9idWZmZXJzOiBBcnJheTxWZXJ0ZXhCdWZmZXI+O1xuXG4gICAgY29uc3RydWN0b3IobGF5ZXI6IFR5cGVkU3R5bGVMYXllciwgem9vbTogbnVtYmVyLCBmaWx0ZXJQcm9wZXJ0aWVzOiAoXzogc3RyaW5nKSA9PiBib29sZWFuLCBsYXlvdXRBdHRyaWJ1dGVzOiBBcnJheTxTdHJ1Y3RBcnJheU1lbWJlcj4pIHtcbiAgICAgICAgdGhpcy5iaW5kZXJzID0ge307XG4gICAgICAgIHRoaXMubGF5b3V0QXR0cmlidXRlcyA9IGxheW91dEF0dHJpYnV0ZXM7XG4gICAgICAgIHRoaXMuX2J1ZmZlcnMgPSBbXTtcblxuICAgICAgICBjb25zdCBrZXlzID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBsYXllci5wYWludC5fdmFsdWVzKSB7XG4gICAgICAgICAgICBpZiAoIWZpbHRlclByb3BlcnRpZXMocHJvcGVydHkpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbGF5ZXIucGFpbnQuZ2V0KHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlKSB8fCAhc3VwcG9ydHNQcm9wZXJ0eUV4cHJlc3Npb24odmFsdWUucHJvcGVydHkuc3BlY2lmaWNhdGlvbikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5hbWVzID0gcGFpbnRBdHRyaWJ1dGVOYW1lcyhwcm9wZXJ0eSwgbGF5ZXIudHlwZSk7XG4gICAgICAgICAgICBjb25zdCBleHByZXNzaW9uID0gdmFsdWUudmFsdWU7XG4gICAgICAgICAgICBjb25zdCB0eXBlID0gdmFsdWUucHJvcGVydHkuc3BlY2lmaWNhdGlvbi50eXBlO1xuICAgICAgICAgICAgY29uc3QgdXNlSW50ZWdlclpvb20gPSB2YWx1ZS5wcm9wZXJ0eS51c2VJbnRlZ2VyWm9vbTtcbiAgICAgICAgICAgIGNvbnN0IHByb3BUeXBlID0gdmFsdWUucHJvcGVydHkuc3BlY2lmaWNhdGlvblsncHJvcGVydHktdHlwZSddO1xuICAgICAgICAgICAgY29uc3QgaXNDcm9zc0ZhZGVkID0gcHJvcFR5cGUgPT09ICdjcm9zcy1mYWRlZCcgfHwgcHJvcFR5cGUgPT09ICdjcm9zcy1mYWRlZC1kYXRhLWRyaXZlbic7XG5cbiAgICAgICAgICAgIGlmIChleHByZXNzaW9uLmtpbmQgPT09ICdjb25zdGFudCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJpbmRlcnNbcHJvcGVydHldID0gaXNDcm9zc0ZhZGVkID9cbiAgICAgICAgICAgICAgICAgICAgbmV3IENyb3NzRmFkZWRDb25zdGFudEJpbmRlcihleHByZXNzaW9uLnZhbHVlLCBuYW1lcykgOlxuICAgICAgICAgICAgICAgICAgICBuZXcgQ29uc3RhbnRCaW5kZXIoZXhwcmVzc2lvbi52YWx1ZSwgbmFtZXMsIHR5cGUpO1xuICAgICAgICAgICAgICAgIGtleXMucHVzaChgL3VfJHtwcm9wZXJ0eX1gKTtcblxuICAgICAgICAgICAgfSBlbHNlIGlmIChleHByZXNzaW9uLmtpbmQgPT09ICdzb3VyY2UnIHx8IGlzQ3Jvc3NGYWRlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IFN0cnVjdEFycmF5TGF5b3V0ID0gbGF5b3V0VHlwZShwcm9wZXJ0eSwgdHlwZSwgJ3NvdXJjZScpO1xuICAgICAgICAgICAgICAgIHRoaXMuYmluZGVyc1twcm9wZXJ0eV0gPSBpc0Nyb3NzRmFkZWQgP1xuICAgICAgICAgICAgICAgICAgICBuZXcgQ3Jvc3NGYWRlZENvbXBvc2l0ZUJpbmRlcihleHByZXNzaW9uLCB0eXBlLCB1c2VJbnRlZ2VyWm9vbSwgem9vbSwgU3RydWN0QXJyYXlMYXlvdXQsIGxheWVyLmlkKSA6XG4gICAgICAgICAgICAgICAgICAgIG5ldyBTb3VyY2VFeHByZXNzaW9uQmluZGVyKGV4cHJlc3Npb24sIG5hbWVzLCB0eXBlLCBTdHJ1Y3RBcnJheUxheW91dCk7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGAvYV8ke3Byb3BlcnR5fWApO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IFN0cnVjdEFycmF5TGF5b3V0ID0gbGF5b3V0VHlwZShwcm9wZXJ0eSwgdHlwZSwgJ2NvbXBvc2l0ZScpO1xuICAgICAgICAgICAgICAgIHRoaXMuYmluZGVyc1twcm9wZXJ0eV0gPSBuZXcgQ29tcG9zaXRlRXhwcmVzc2lvbkJpbmRlcihleHByZXNzaW9uLCBuYW1lcywgdHlwZSwgdXNlSW50ZWdlclpvb20sIHpvb20sIFN0cnVjdEFycmF5TGF5b3V0KTtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goYC96XyR7cHJvcGVydHl9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNhY2hlS2V5ID0ga2V5cy5zb3J0KCkuam9pbignJyk7XG4gICAgfVxuXG4gICAgZ2V0TWF4VmFsdWUocHJvcGVydHk6IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGJpbmRlciA9IHRoaXMuYmluZGVyc1twcm9wZXJ0eV07XG4gICAgICAgIHJldHVybiBiaW5kZXIgaW5zdGFuY2VvZiBTb3VyY2VFeHByZXNzaW9uQmluZGVyIHx8IGJpbmRlciBpbnN0YW5jZW9mIENvbXBvc2l0ZUV4cHJlc3Npb25CaW5kZXIgPyBiaW5kZXIubWF4VmFsdWUgOiAwO1xuICAgIH1cblxuICAgIHBvcHVsYXRlUGFpbnRBcnJheXMobmV3TGVuZ3RoOiBudW1iZXIsIGZlYXR1cmU6IEZlYXR1cmUsIGltYWdlUG9zaXRpb25zOiB7W186IHN0cmluZ106IEltYWdlUG9zaXRpb259LCBjYW5vbmljYWw/OiBDYW5vbmljYWxUaWxlSUQsIGZvcm1hdHRlZFNlY3Rpb24/OiBGb3JtYXR0ZWRTZWN0aW9uKSB7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gdGhpcy5iaW5kZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBiaW5kZXIgPSB0aGlzLmJpbmRlcnNbcHJvcGVydHldO1xuICAgICAgICAgICAgaWYgKGJpbmRlciBpbnN0YW5jZW9mIFNvdXJjZUV4cHJlc3Npb25CaW5kZXIgfHwgYmluZGVyIGluc3RhbmNlb2YgQ29tcG9zaXRlRXhwcmVzc2lvbkJpbmRlciB8fCBiaW5kZXIgaW5zdGFuY2VvZiBDcm9zc0ZhZGVkQ29tcG9zaXRlQmluZGVyKVxuICAgICAgICAgICAgICAgIChiaW5kZXI6IEF0dHJpYnV0ZUJpbmRlcikucG9wdWxhdGVQYWludEFycmF5KG5ld0xlbmd0aCwgZmVhdHVyZSwgaW1hZ2VQb3NpdGlvbnMsIGNhbm9uaWNhbCwgZm9ybWF0dGVkU2VjdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0Q29uc3RhbnRQYXR0ZXJuUG9zaXRpb25zKHBvc1RvOiBJbWFnZVBvc2l0aW9uLCBwb3NGcm9tOiBJbWFnZVBvc2l0aW9uKSB7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gdGhpcy5iaW5kZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBiaW5kZXIgPSB0aGlzLmJpbmRlcnNbcHJvcGVydHldO1xuICAgICAgICAgICAgaWYgKGJpbmRlciBpbnN0YW5jZW9mIENyb3NzRmFkZWRDb25zdGFudEJpbmRlcilcbiAgICAgICAgICAgICAgICBiaW5kZXIuc2V0Q29uc3RhbnRQYXR0ZXJuUG9zaXRpb25zKHBvc1RvLCBwb3NGcm9tKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZVBhaW50QXJyYXlzKGZlYXR1cmVTdGF0ZXM6IEZlYXR1cmVTdGF0ZXMsIGZlYXR1cmVNYXA6IEZlYXR1cmVQb3NpdGlvbk1hcCwgdnRMYXllcjogVmVjdG9yVGlsZUxheWVyLCBsYXllcjogVHlwZWRTdHlsZUxheWVyLCBpbWFnZVBvc2l0aW9uczoge1tfOiBzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgZGlydHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiBmZWF0dXJlU3RhdGVzKSB7XG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbnMgPSBmZWF0dXJlTWFwLmdldFBvc2l0aW9ucyhpZCk7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgcG9zIG9mIHBvc2l0aW9ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZlYXR1cmUgPSB2dExheWVyLmZlYXR1cmUocG9zLmluZGV4KTtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gdGhpcy5iaW5kZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJpbmRlciA9IHRoaXMuYmluZGVyc1twcm9wZXJ0eV07XG4gICAgICAgICAgICAgICAgICAgIGlmICgoYmluZGVyIGluc3RhbmNlb2YgU291cmNlRXhwcmVzc2lvbkJpbmRlciB8fCBiaW5kZXIgaW5zdGFuY2VvZiBDb21wb3NpdGVFeHByZXNzaW9uQmluZGVyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgYmluZGVyIGluc3RhbmNlb2YgQ3Jvc3NGYWRlZENvbXBvc2l0ZUJpbmRlcikgJiYgKGJpbmRlcjogYW55KS5leHByZXNzaW9uLmlzU3RhdGVEZXBlbmRlbnQgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vQUhNOiBSZW1vdmUgYWZ0ZXIgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzYyNTVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbGF5ZXIucGFpbnQuZ2V0KHByb3BlcnR5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIChiaW5kZXI6IGFueSkuZXhwcmVzc2lvbiA9IHZhbHVlLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgKGJpbmRlcjogQXR0cmlidXRlQmluZGVyKS51cGRhdGVQYWludEFycmF5KHBvcy5zdGFydCwgcG9zLmVuZCwgZmVhdHVyZSwgZmVhdHVyZVN0YXRlc1tpZF0sIGltYWdlUG9zaXRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGlydHk7XG4gICAgfVxuXG4gICAgZGVmaW5lcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gdGhpcy5iaW5kZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBiaW5kZXIgPSB0aGlzLmJpbmRlcnNbcHJvcGVydHldO1xuICAgICAgICAgICAgaWYgKGJpbmRlciBpbnN0YW5jZW9mIENvbnN0YW50QmluZGVyIHx8IGJpbmRlciBpbnN0YW5jZW9mIENyb3NzRmFkZWRDb25zdGFudEJpbmRlcikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLmJpbmRlci51bmlmb3JtTmFtZXMubWFwKG5hbWUgPT4gYCNkZWZpbmUgSEFTX1VOSUZPUk1fJHtuYW1lfWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGdldFBhaW50VmVydGV4QnVmZmVycygpOiBBcnJheTxWZXJ0ZXhCdWZmZXI+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2J1ZmZlcnM7XG4gICAgfVxuXG4gICAgZ2V0VW5pZm9ybXMoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogQXJyYXk8QmluZGVyVW5pZm9ybT4ge1xuICAgICAgICBjb25zdCB1bmlmb3JtcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIHRoaXMuYmluZGVycykge1xuICAgICAgICAgICAgY29uc3QgYmluZGVyID0gdGhpcy5iaW5kZXJzW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIGlmIChiaW5kZXIgaW5zdGFuY2VvZiBDb25zdGFudEJpbmRlciB8fCBiaW5kZXIgaW5zdGFuY2VvZiBDcm9zc0ZhZGVkQ29uc3RhbnRCaW5kZXIgfHwgYmluZGVyIGluc3RhbmNlb2YgQ29tcG9zaXRlRXhwcmVzc2lvbkJpbmRlcikge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBiaW5kZXIudW5pZm9ybU5hbWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbnNbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJpbmRpbmcgPSBiaW5kZXIuZ2V0QmluZGluZyhjb250ZXh0LCBsb2NhdGlvbnNbbmFtZV0sIG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdW5pZm9ybXMucHVzaCh7bmFtZSwgcHJvcGVydHksIGJpbmRpbmd9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5pZm9ybXM7XG4gICAgfVxuXG4gICAgc2V0VW5pZm9ybXM8UHJvcGVydGllczogT2JqZWN0Pihjb250ZXh0OiBDb250ZXh0LCBiaW5kZXJVbmlmb3JtczogQXJyYXk8QmluZGVyVW5pZm9ybT4sIHByb3BlcnRpZXM6IFBvc3NpYmx5RXZhbHVhdGVkPFByb3BlcnRpZXM+LCBnbG9iYWxzOiBHbG9iYWxQcm9wZXJ0aWVzKSB7XG4gICAgICAgIC8vIFVuaWZvcm0gc3RhdGUgYmluZGluZ3MgYXJlIG93bmVkIGJ5IHRoZSBQcm9ncmFtLCBidXQgd2Ugc2V0IHRoZW1cbiAgICAgICAgLy8gZnJvbSB3aXRoaW4gdGhlIFByb2dyYW1Db25maWd1cmF0b24ncyBiaW5kZXIgbWVtYmVycy5cbiAgICAgICAgZm9yIChjb25zdCB7bmFtZSwgcHJvcGVydHksIGJpbmRpbmd9IG9mIGJpbmRlclVuaWZvcm1zKSB7XG4gICAgICAgICAgICAodGhpcy5iaW5kZXJzW3Byb3BlcnR5XTogYW55KS5zZXRVbmlmb3JtKGJpbmRpbmcsIGdsb2JhbHMsIHByb3BlcnRpZXMuZ2V0KHByb3BlcnR5KSwgbmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVQYWludEJ1ZmZlcnMoY3Jvc3NmYWRlPzogQ3Jvc3NmYWRlUGFyYW1ldGVycykge1xuICAgICAgICB0aGlzLl9idWZmZXJzID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiB0aGlzLmJpbmRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGJpbmRlciA9IHRoaXMuYmluZGVyc1twcm9wZXJ0eV07XG4gICAgICAgICAgICBpZiAoY3Jvc3NmYWRlICYmIGJpbmRlciBpbnN0YW5jZW9mIENyb3NzRmFkZWRDb21wb3NpdGVCaW5kZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXR0ZXJuVmVydGV4QnVmZmVyID0gY3Jvc3NmYWRlLmZyb21TY2FsZSA9PT0gMiA/IGJpbmRlci56b29tSW5QYWludFZlcnRleEJ1ZmZlciA6IGJpbmRlci56b29tT3V0UGFpbnRWZXJ0ZXhCdWZmZXI7XG4gICAgICAgICAgICAgICAgaWYgKHBhdHRlcm5WZXJ0ZXhCdWZmZXIpIHRoaXMuX2J1ZmZlcnMucHVzaChwYXR0ZXJuVmVydGV4QnVmZmVyKTtcblxuICAgICAgICAgICAgfSBlbHNlIGlmICgoYmluZGVyIGluc3RhbmNlb2YgU291cmNlRXhwcmVzc2lvbkJpbmRlciB8fCBiaW5kZXIgaW5zdGFuY2VvZiBDb21wb3NpdGVFeHByZXNzaW9uQmluZGVyKSAmJiBiaW5kZXIucGFpbnRWZXJ0ZXhCdWZmZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9idWZmZXJzLnB1c2goYmluZGVyLnBhaW50VmVydGV4QnVmZmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwbG9hZChjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gdGhpcy5iaW5kZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBiaW5kZXIgPSB0aGlzLmJpbmRlcnNbcHJvcGVydHldO1xuICAgICAgICAgICAgaWYgKGJpbmRlciBpbnN0YW5jZW9mIFNvdXJjZUV4cHJlc3Npb25CaW5kZXIgfHwgYmluZGVyIGluc3RhbmNlb2YgQ29tcG9zaXRlRXhwcmVzc2lvbkJpbmRlciB8fCBiaW5kZXIgaW5zdGFuY2VvZiBDcm9zc0ZhZGVkQ29tcG9zaXRlQmluZGVyKVxuICAgICAgICAgICAgICAgIGJpbmRlci51cGxvYWQoY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVQYWludEJ1ZmZlcnMoKTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIHRoaXMuYmluZGVycykge1xuICAgICAgICAgICAgY29uc3QgYmluZGVyID0gdGhpcy5iaW5kZXJzW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIGlmIChiaW5kZXIgaW5zdGFuY2VvZiBTb3VyY2VFeHByZXNzaW9uQmluZGVyIHx8IGJpbmRlciBpbnN0YW5jZW9mIENvbXBvc2l0ZUV4cHJlc3Npb25CaW5kZXIgfHwgYmluZGVyIGluc3RhbmNlb2YgQ3Jvc3NGYWRlZENvbXBvc2l0ZUJpbmRlcilcbiAgICAgICAgICAgICAgICBiaW5kZXIuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUHJvZ3JhbUNvbmZpZ3VyYXRpb25TZXQ8TGF5ZXI6IFR5cGVkU3R5bGVMYXllcj4ge1xuICAgIHByb2dyYW1Db25maWd1cmF0aW9uczoge1tfOiBzdHJpbmddOiBQcm9ncmFtQ29uZmlndXJhdGlvbn07XG4gICAgbmVlZHNVcGxvYWQ6IGJvb2xlYW47XG4gICAgX2ZlYXR1cmVNYXA6IEZlYXR1cmVQb3NpdGlvbk1hcDtcbiAgICBfYnVmZmVyT2Zmc2V0OiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihsYXlvdXRBdHRyaWJ1dGVzOiBBcnJheTxTdHJ1Y3RBcnJheU1lbWJlcj4sIGxheWVyczogJFJlYWRPbmx5QXJyYXk8TGF5ZXI+LCB6b29tOiBudW1iZXIsIGZpbHRlclByb3BlcnRpZXM6IChfOiBzdHJpbmcpID0+IGJvb2xlYW4gPSAoKSA9PiB0cnVlKSB7XG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zID0ge307XG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9uc1tsYXllci5pZF0gPSBuZXcgUHJvZ3JhbUNvbmZpZ3VyYXRpb24obGF5ZXIsIHpvb20sIGZpbHRlclByb3BlcnRpZXMsIGxheW91dEF0dHJpYnV0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubmVlZHNVcGxvYWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fZmVhdHVyZU1hcCA9IG5ldyBGZWF0dXJlUG9zaXRpb25NYXAoKTtcbiAgICAgICAgdGhpcy5fYnVmZmVyT2Zmc2V0ID0gMDtcbiAgICB9XG5cbiAgICBwb3B1bGF0ZVBhaW50QXJyYXlzKGxlbmd0aDogbnVtYmVyLCBmZWF0dXJlOiBGZWF0dXJlLCBpbmRleDogbnVtYmVyLCBpbWFnZVBvc2l0aW9uczoge1tfOiBzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSwgY2Fub25pY2FsOiBDYW5vbmljYWxUaWxlSUQsIGZvcm1hdHRlZFNlY3Rpb24/OiBGb3JtYXR0ZWRTZWN0aW9uKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9uc1trZXldLnBvcHVsYXRlUGFpbnRBcnJheXMobGVuZ3RoLCBmZWF0dXJlLCBpbWFnZVBvc2l0aW9ucywgY2Fub25pY2FsLCBmb3JtYXR0ZWRTZWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmZWF0dXJlLmlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZlYXR1cmVNYXAuYWRkKGZlYXR1cmUuaWQsIGluZGV4LCB0aGlzLl9idWZmZXJPZmZzZXQsIGxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fYnVmZmVyT2Zmc2V0ID0gbGVuZ3RoO1xuXG4gICAgICAgIHRoaXMubmVlZHNVcGxvYWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHVwZGF0ZVBhaW50QXJyYXlzKGZlYXR1cmVTdGF0ZXM6IEZlYXR1cmVTdGF0ZXMsIHZ0TGF5ZXI6IFZlY3RvclRpbGVMYXllciwgbGF5ZXJzOiAkUmVhZE9ubHlBcnJheTxUeXBlZFN0eWxlTGF5ZXI+LCBpbWFnZVBvc2l0aW9uczoge1tfOiBzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSkge1xuICAgICAgICBmb3IgKGNvbnN0IGxheWVyIG9mIGxheWVycykge1xuICAgICAgICAgICAgdGhpcy5uZWVkc1VwbG9hZCA9IHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zW2xheWVyLmlkXS51cGRhdGVQYWludEFycmF5cyhmZWF0dXJlU3RhdGVzLCB0aGlzLl9mZWF0dXJlTWFwLCB2dExheWVyLCBsYXllciwgaW1hZ2VQb3NpdGlvbnMpIHx8IHRoaXMubmVlZHNVcGxvYWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQobGF5ZXJJZDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9uc1tsYXllcklkXTtcbiAgICB9XG5cbiAgICB1cGxvYWQoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgICBpZiAoIXRoaXMubmVlZHNVcGxvYWQpIHJldHVybjtcbiAgICAgICAgZm9yIChjb25zdCBsYXllcklkIGluIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9uc1tsYXllcklkXS51cGxvYWQoY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uZWVkc1VwbG9hZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJJZCBpbiB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbbGF5ZXJJZF0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBwYWludEF0dHJpYnV0ZU5hbWVzKHByb3BlcnR5LCB0eXBlKSB7XG4gICAgY29uc3QgYXR0cmlidXRlTmFtZUV4Y2VwdGlvbnMgPSB7XG4gICAgICAgICd0ZXh0LW9wYWNpdHknOiBbJ29wYWNpdHknXSxcbiAgICAgICAgJ2ljb24tb3BhY2l0eSc6IFsnb3BhY2l0eSddLFxuICAgICAgICAndGV4dC1jb2xvcic6IFsnZmlsbF9jb2xvciddLFxuICAgICAgICAnaWNvbi1jb2xvcic6IFsnZmlsbF9jb2xvciddLFxuICAgICAgICAndGV4dC1oYWxvLWNvbG9yJzogWydoYWxvX2NvbG9yJ10sXG4gICAgICAgICdpY29uLWhhbG8tY29sb3InOiBbJ2hhbG9fY29sb3InXSxcbiAgICAgICAgJ3RleHQtaGFsby1ibHVyJzogWydoYWxvX2JsdXInXSxcbiAgICAgICAgJ2ljb24taGFsby1ibHVyJzogWydoYWxvX2JsdXInXSxcbiAgICAgICAgJ3RleHQtaGFsby13aWR0aCc6IFsnaGFsb193aWR0aCddLFxuICAgICAgICAnaWNvbi1oYWxvLXdpZHRoJzogWydoYWxvX3dpZHRoJ10sXG4gICAgICAgICdsaW5lLWdhcC13aWR0aCc6IFsnZ2Fwd2lkdGgnXSxcbiAgICAgICAgJ2xpbmUtcGF0dGVybic6IFsncGF0dGVybl90bycsICdwYXR0ZXJuX2Zyb20nLCAncGl4ZWxfcmF0aW9fdG8nLCAncGl4ZWxfcmF0aW9fZnJvbSddLFxuICAgICAgICAnZmlsbC1wYXR0ZXJuJzogWydwYXR0ZXJuX3RvJywgJ3BhdHRlcm5fZnJvbScsICdwaXhlbF9yYXRpb190bycsICdwaXhlbF9yYXRpb19mcm9tJ10sXG4gICAgICAgICdmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuJzogWydwYXR0ZXJuX3RvJywgJ3BhdHRlcm5fZnJvbScsICdwaXhlbF9yYXRpb190bycsICdwaXhlbF9yYXRpb19mcm9tJ10sXG4gICAgfTtcblxuICAgIHJldHVybiBhdHRyaWJ1dGVOYW1lRXhjZXB0aW9uc1twcm9wZXJ0eV0gfHwgW3Byb3BlcnR5LnJlcGxhY2UoYCR7dHlwZX0tYCwgJycpLnJlcGxhY2UoLy0vZywgJ18nKV07XG59XG5cbmZ1bmN0aW9uIGdldExheW91dEV4Y2VwdGlvbihwcm9wZXJ0eSkge1xuICAgIGNvbnN0IHByb3BlcnR5RXhjZXB0aW9ucyA9IHtcbiAgICAgICAgJ2xpbmUtcGF0dGVybic6e1xuICAgICAgICAgICAgJ3NvdXJjZSc6IFBhdHRlcm5MYXlvdXRBcnJheSxcbiAgICAgICAgICAgICdjb21wb3NpdGUnOiBQYXR0ZXJuTGF5b3V0QXJyYXlcbiAgICAgICAgfSxcbiAgICAgICAgJ2ZpbGwtcGF0dGVybic6IHtcbiAgICAgICAgICAgICdzb3VyY2UnOiBQYXR0ZXJuTGF5b3V0QXJyYXksXG4gICAgICAgICAgICAnY29tcG9zaXRlJzogUGF0dGVybkxheW91dEFycmF5XG4gICAgICAgIH0sXG4gICAgICAgICdmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuJzp7XG4gICAgICAgICAgICAnc291cmNlJzogUGF0dGVybkxheW91dEFycmF5LFxuICAgICAgICAgICAgJ2NvbXBvc2l0ZSc6IFBhdHRlcm5MYXlvdXRBcnJheVxuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBwcm9wZXJ0eUV4Y2VwdGlvbnNbcHJvcGVydHldO1xufVxuXG5mdW5jdGlvbiBsYXlvdXRUeXBlKHByb3BlcnR5LCB0eXBlLCBiaW5kZXJUeXBlKSB7XG4gICAgY29uc3QgZGVmYXVsdExheW91dHMgPSB7XG4gICAgICAgICdjb2xvcic6IHtcbiAgICAgICAgICAgICdzb3VyY2UnOiBTdHJ1Y3RBcnJheUxheW91dDJmOCxcbiAgICAgICAgICAgICdjb21wb3NpdGUnOiBTdHJ1Y3RBcnJheUxheW91dDRmMTZcbiAgICAgICAgfSxcbiAgICAgICAgJ251bWJlcic6IHtcbiAgICAgICAgICAgICdzb3VyY2UnOiBTdHJ1Y3RBcnJheUxheW91dDFmNCxcbiAgICAgICAgICAgICdjb21wb3NpdGUnOiBTdHJ1Y3RBcnJheUxheW91dDJmOFxuICAgICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGxheW91dEV4Y2VwdGlvbiA9IGdldExheW91dEV4Y2VwdGlvbihwcm9wZXJ0eSk7XG4gICAgcmV0dXJuICBsYXlvdXRFeGNlcHRpb24gJiYgbGF5b3V0RXhjZXB0aW9uW2JpbmRlclR5cGVdIHx8IGRlZmF1bHRMYXlvdXRzW3R5cGVdW2JpbmRlclR5cGVdO1xufVxuXG5yZWdpc3RlcignQ29uc3RhbnRCaW5kZXInLCBDb25zdGFudEJpbmRlcik7XG5yZWdpc3RlcignQ3Jvc3NGYWRlZENvbnN0YW50QmluZGVyJywgQ3Jvc3NGYWRlZENvbnN0YW50QmluZGVyKTtcbnJlZ2lzdGVyKCdTb3VyY2VFeHByZXNzaW9uQmluZGVyJywgU291cmNlRXhwcmVzc2lvbkJpbmRlcik7XG5yZWdpc3RlcignQ3Jvc3NGYWRlZENvbXBvc2l0ZUJpbmRlcicsIENyb3NzRmFkZWRDb21wb3NpdGVCaW5kZXIpO1xucmVnaXN0ZXIoJ0NvbXBvc2l0ZUV4cHJlc3Npb25CaW5kZXInLCBDb21wb3NpdGVFeHByZXNzaW9uQmluZGVyKTtcbnJlZ2lzdGVyKCdQcm9ncmFtQ29uZmlndXJhdGlvbicsIFByb2dyYW1Db25maWd1cmF0aW9uLCB7b21pdDogWydfYnVmZmVycyddfSk7XG5yZWdpc3RlcignUHJvZ3JhbUNvbmZpZ3VyYXRpb25TZXQnLCBQcm9ncmFtQ29uZmlndXJhdGlvblNldCk7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge1xuICAgIExpbmVJbmRleEFycmF5LFxuICAgIFRyaWFuZ2xlSW5kZXhBcnJheSxcbiAgICBMaW5lU3RyaXBJbmRleEFycmF5XG59IGZyb20gJy4vYXJyYXlfdHlwZXMnO1xuXG4vKipcbiAqIEFuIGluZGV4IGFycmF5IHN0b3JlcyBVaW50MTYgaW5kaWNlcyBvZiB2ZXJ0ZXhlcyBpbiBhIGNvcnJlc3BvbmRpbmcgdmVydGV4IGFycmF5LiBXZSB1c2VcbiAqIHRocmVlIGtpbmRzIG9mIGluZGV4IGFycmF5czogYXJyYXlzIHN0b3JpbmcgZ3JvdXBzIG9mIHRocmVlIGluZGljZXMsIGZvcm1pbmcgdHJpYW5nbGVzO1xuICogYXJyYXlzIHN0b3JpbmcgcGFpcnMgb2YgaW5kaWNlcywgZm9ybWluZyBsaW5lIHNlZ21lbnRzOyBhbmQgYXJyYXlzIHN0b3Jpbmcgc2luZ2xlIGluZGljZXMsXG4gKiBmb3JtaW5nIGEgbGluZSBzdHJpcC5cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCB7TGluZUluZGV4QXJyYXksIFRyaWFuZ2xlSW5kZXhBcnJheSwgTGluZVN0cmlwSW5kZXhBcnJheX07XG4iLCIvLyBAZmxvd1xuXG4vKipcbiAqIFRoZSBtYXhpbXVtIHZhbHVlIG9mIGEgY29vcmRpbmF0ZSBpbiB0aGUgaW50ZXJuYWwgdGlsZSBjb29yZGluYXRlIHN5c3RlbS4gQ29vcmRpbmF0ZXMgb2ZcbiAqIGFsbCBzb3VyY2UgZmVhdHVyZXMgbm9ybWFsaXplZCB0byB0aGlzIGV4dGVudCB1cG9uIGxvYWQuXG4gKlxuICogVGhlIHZhbHVlIGlzIGEgY29uc2VxdWVuY2Ugb2YgdGhlIGZvbGxvd2luZzpcbiAqXG4gKiAqIFZlcnRleCBidWZmZXIgc3RvcmUgcG9zaXRpb25zIGFzIHNpZ25lZCAxNiBiaXQgaW50ZWdlcnMuXG4gKiAqIE9uZSBiaXQgaXMgbG9zdCBmb3Igc2lnbmVkbmVzcyB0byBzdXBwb3J0IHRpbGUgYnVmZmVycy5cbiAqICogT25lIGJpdCBpcyBsb3N0IGJlY2F1c2UgdGhlIGxpbmUgdmVydGV4IGJ1ZmZlciB1c2VkIHRvIHBhY2sgMSBiaXQgb2Ygb3RoZXIgZGF0YSBpbnRvIHRoZSBpbnQuXG4gKiAqIE9uZSBiaXQgaXMgbG9zdCB0byBzdXBwb3J0IGZlYXR1cmVzIGV4dGVuZGluZyBwYXN0IHRoZSBleHRlbnQgb24gdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlIHRpbGUuXG4gKiAqIFRoaXMgbGVhdmVzIHVzIHdpdGggMl4xMyA9IDgxOTJcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHJlYWRvbmx5XG4gKi9cbmV4cG9ydCBkZWZhdWx0IDgxOTI7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge3dhcm5PbmNlLCBjbGFtcH0gZnJvbSAnLi4vdXRpbC91dGlsJztcblxuaW1wb3J0IEVYVEVOVCBmcm9tICcuL2V4dGVudCc7XG5cbmltcG9ydCB0eXBlIFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG4vLyBUaGVzZSBib3VuZHMgZGVmaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHN1cHBvcnRlZCBjb29yZGluYXRlIHZhbHVlcy5cbi8vIFdoaWxlIHZpc2libGUgY29vcmRpbmF0ZXMgYXJlIHdpdGhpbiBbMCwgRVhURU5UXSwgdGlsZXMgbWF5IHRoZW9yZXRpY2FsbHlcbi8vIGNvbnRhaW4gY29yZGluYXRlcyB3aXRoaW4gWy1JbmZpbml0eSwgSW5maW5pdHldLiBPdXIgcmFuZ2UgaXMgbGltaXRlZCBieSB0aGVcbi8vIG51bWJlciBvZiBiaXRzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBjb29yZGluYXRlLlxuZnVuY3Rpb24gY3JlYXRlQm91bmRzKGJpdHMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBtaW46IC0xICogTWF0aC5wb3coMiwgYml0cyAtIDEpLFxuICAgICAgICBtYXg6IE1hdGgucG93KDIsIGJpdHMgLSAxKSAtIDFcbiAgICB9O1xufVxuXG5jb25zdCBib3VuZHMgPSBjcmVhdGVCb3VuZHMoMTUpO1xuXG4vKipcbiAqIExvYWRzIGEgZ2VvbWV0cnkgZnJvbSBhIFZlY3RvclRpbGVGZWF0dXJlIGFuZCBzY2FsZXMgaXQgdG8gdGhlIGNvbW1vbiBleHRlbnRcbiAqIHVzZWQgaW50ZXJuYWxseS5cbiAqIEBwYXJhbSB7VmVjdG9yVGlsZUZlYXR1cmV9IGZlYXR1cmVcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxvYWRHZW9tZXRyeShmZWF0dXJlOiBWZWN0b3JUaWxlRmVhdHVyZSk6IEFycmF5PEFycmF5PFBvaW50Pj4ge1xuICAgIGNvbnN0IHNjYWxlID0gRVhURU5UIC8gZmVhdHVyZS5leHRlbnQ7XG4gICAgY29uc3QgZ2VvbWV0cnkgPSBmZWF0dXJlLmxvYWRHZW9tZXRyeSgpO1xuICAgIGZvciAobGV0IHIgPSAwOyByIDwgZ2VvbWV0cnkubGVuZ3RoOyByKyspIHtcbiAgICAgICAgY29uc3QgcmluZyA9IGdlb21ldHJ5W3JdO1xuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IHJpbmcubGVuZ3RoOyBwKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBvaW50ID0gcmluZ1twXTtcbiAgICAgICAgICAgIC8vIHJvdW5kIGhlcmUgYmVjYXVzZSBtYXBib3gtZ2wtbmF0aXZlIHVzZXMgaW50ZWdlcnMgdG8gcmVwcmVzZW50XG4gICAgICAgICAgICAvLyBwb2ludHMgYW5kIHdlIG5lZWQgdG8gZG8gdGhlIHNhbWUgdG8gYXZvaWQgcmVuZXJpbmcgZGlmZmVyZW5jZXMuXG4gICAgICAgICAgICBwb2ludC54ID0gTWF0aC5yb3VuZChwb2ludC54ICogc2NhbGUpO1xuICAgICAgICAgICAgcG9pbnQueSA9IE1hdGgucm91bmQocG9pbnQueSAqIHNjYWxlKTtcblxuICAgICAgICAgICAgaWYgKHBvaW50LnggPCBib3VuZHMubWluIHx8IHBvaW50LnggPiBib3VuZHMubWF4IHx8IHBvaW50LnkgPCBib3VuZHMubWluIHx8IHBvaW50LnkgPiBib3VuZHMubWF4KSB7XG4gICAgICAgICAgICAgICAgd2Fybk9uY2UoJ0dlb21ldHJ5IGV4Y2VlZHMgYWxsb3dlZCBleHRlbnQsIHJlZHVjZSB5b3VyIHZlY3RvciB0aWxlIGJ1ZmZlciBzaXplJyk7XG4gICAgICAgICAgICAgICAgcG9pbnQueCA9IGNsYW1wKHBvaW50LngsIGJvdW5kcy5taW4sIGJvdW5kcy5tYXgpO1xuICAgICAgICAgICAgICAgIHBvaW50LnkgPSBjbGFtcChwb2ludC55LCBib3VuZHMubWluLCBib3VuZHMubWF4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZ2VvbWV0cnk7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge0NpcmNsZUxheW91dEFycmF5fSBmcm9tICcuLi9hcnJheV90eXBlcyc7XG5cbmltcG9ydCB7bWVtYmVycyBhcyBsYXlvdXRBdHRyaWJ1dGVzfSBmcm9tICcuL2NpcmNsZV9hdHRyaWJ1dGVzJztcbmltcG9ydCBTZWdtZW50VmVjdG9yIGZyb20gJy4uL3NlZ21lbnQnO1xuaW1wb3J0IHtQcm9ncmFtQ29uZmlndXJhdGlvblNldH0gZnJvbSAnLi4vcHJvZ3JhbV9jb25maWd1cmF0aW9uJztcbmltcG9ydCB7VHJpYW5nbGVJbmRleEFycmF5fSBmcm9tICcuLi9pbmRleF9hcnJheV90eXBlJztcbmltcG9ydCBsb2FkR2VvbWV0cnkgZnJvbSAnLi4vbG9hZF9nZW9tZXRyeSc7XG5pbXBvcnQgRVhURU5UIGZyb20gJy4uL2V4dGVudCc7XG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuLi8uLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuaW1wb3J0IEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4uLy4uL3N0eWxlL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5cbmltcG9ydCB0eXBlIHtDYW5vbmljYWxUaWxlSUR9IGZyb20gJy4uLy4uL3NvdXJjZS90aWxlX2lkJztcbmltcG9ydCB0eXBlIHtcbiAgICBCdWNrZXQsXG4gICAgQnVja2V0UGFyYW1ldGVycyxcbiAgICBCdWNrZXRGZWF0dXJlLFxuICAgIEluZGV4ZWRGZWF0dXJlLFxuICAgIFBvcHVsYXRlUGFyYW1ldGVyc1xufSBmcm9tICcuLi9idWNrZXQnO1xuaW1wb3J0IHR5cGUgQ2lyY2xlU3R5bGVMYXllciBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZV9sYXllci9jaXJjbGVfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgSGVhdG1hcFN0eWxlTGF5ZXIgZnJvbSAnLi4vLi4vc3R5bGUvc3R5bGVfbGF5ZXIvaGVhdG1hcF9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uLy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgSW5kZXhCdWZmZXIgZnJvbSAnLi4vLi4vZ2wvaW5kZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIFZlcnRleEJ1ZmZlciBmcm9tICcuLi8uLi9nbC92ZXJ0ZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IHR5cGUge0ZlYXR1cmVTdGF0ZXN9IGZyb20gJy4uLy4uL3NvdXJjZS9zb3VyY2Vfc3RhdGUnO1xuaW1wb3J0IHR5cGUge0ltYWdlUG9zaXRpb259IGZyb20gJy4uLy4uL3JlbmRlci9pbWFnZV9hdGxhcyc7XG5cbmZ1bmN0aW9uIGFkZENpcmNsZVZlcnRleChsYXlvdXRWZXJ0ZXhBcnJheSwgeCwgeSwgZXh0cnVkZVgsIGV4dHJ1ZGVZKSB7XG4gICAgbGF5b3V0VmVydGV4QXJyYXkuZW1wbGFjZUJhY2soXG4gICAgICAgICh4ICogMikgKyAoKGV4dHJ1ZGVYICsgMSkgLyAyKSxcbiAgICAgICAgKHkgKiAyKSArICgoZXh0cnVkZVkgKyAxKSAvIDIpKTtcbn1cblxuLyoqXG4gKiBDaXJjbGVzIGFyZSByZXByZXNlbnRlZCBieSB0d28gdHJpYW5nbGVzLlxuICpcbiAqIEVhY2ggY29ybmVyIGhhcyBhIHBvcyB0aGF0IGlzIHRoZSBjZW50ZXIgb2YgdGhlIGNpcmNsZSBhbmQgYW4gZXh0cnVzaW9uXG4gKiB2ZWN0b3IgdGhhdCBpcyB3aGVyZSBpdCBwb2ludHMuXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBDaXJjbGVCdWNrZXQ8TGF5ZXI6IENpcmNsZVN0eWxlTGF5ZXIgfCBIZWF0bWFwU3R5bGVMYXllcj4gaW1wbGVtZW50cyBCdWNrZXQge1xuICAgIGluZGV4OiBudW1iZXI7XG4gICAgem9vbTogbnVtYmVyO1xuICAgIG92ZXJzY2FsaW5nOiBudW1iZXI7XG4gICAgbGF5ZXJJZHM6IEFycmF5PHN0cmluZz47XG4gICAgbGF5ZXJzOiBBcnJheTxMYXllcj47XG4gICAgc3RhdGVEZXBlbmRlbnRMYXllcnM6IEFycmF5PExheWVyPjtcbiAgICBzdGF0ZURlcGVuZGVudExheWVySWRzOiBBcnJheTxzdHJpbmc+O1xuXG4gICAgbGF5b3V0VmVydGV4QXJyYXk6IENpcmNsZUxheW91dEFycmF5O1xuICAgIGxheW91dFZlcnRleEJ1ZmZlcjogVmVydGV4QnVmZmVyO1xuXG4gICAgaW5kZXhBcnJheTogVHJpYW5nbGVJbmRleEFycmF5O1xuICAgIGluZGV4QnVmZmVyOiBJbmRleEJ1ZmZlcjtcblxuICAgIGhhc1BhdHRlcm46IGJvb2xlYW47XG4gICAgcHJvZ3JhbUNvbmZpZ3VyYXRpb25zOiBQcm9ncmFtQ29uZmlndXJhdGlvblNldDxMYXllcj47XG4gICAgc2VnbWVudHM6IFNlZ21lbnRWZWN0b3I7XG4gICAgdXBsb2FkZWQ6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBCdWNrZXRQYXJhbWV0ZXJzPExheWVyPikge1xuICAgICAgICB0aGlzLnpvb20gPSBvcHRpb25zLnpvb207XG4gICAgICAgIHRoaXMub3ZlcnNjYWxpbmcgPSBvcHRpb25zLm92ZXJzY2FsaW5nO1xuICAgICAgICB0aGlzLmxheWVycyA9IG9wdGlvbnMubGF5ZXJzO1xuICAgICAgICB0aGlzLmxheWVySWRzID0gdGhpcy5sYXllcnMubWFwKGxheWVyID0+IGxheWVyLmlkKTtcbiAgICAgICAgdGhpcy5pbmRleCA9IG9wdGlvbnMuaW5kZXg7XG4gICAgICAgIHRoaXMuaGFzUGF0dGVybiA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMubGF5b3V0VmVydGV4QXJyYXkgPSBuZXcgQ2lyY2xlTGF5b3V0QXJyYXkoKTtcbiAgICAgICAgdGhpcy5pbmRleEFycmF5ID0gbmV3IFRyaWFuZ2xlSW5kZXhBcnJheSgpO1xuICAgICAgICB0aGlzLnNlZ21lbnRzID0gbmV3IFNlZ21lbnRWZWN0b3IoKTtcbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMgPSBuZXcgUHJvZ3JhbUNvbmZpZ3VyYXRpb25TZXQobGF5b3V0QXR0cmlidXRlcywgb3B0aW9ucy5sYXllcnMsIG9wdGlvbnMuem9vbSk7XG4gICAgICAgIHRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcklkcyA9IHRoaXMubGF5ZXJzLmZpbHRlcigobCkgPT4gbC5pc1N0YXRlRGVwZW5kZW50KCkpLm1hcCgobCkgPT4gbC5pZCk7XG4gICAgfVxuXG4gICAgcG9wdWxhdGUoZmVhdHVyZXM6IEFycmF5PEluZGV4ZWRGZWF0dXJlPiwgb3B0aW9uczogUG9wdWxhdGVQYXJhbWV0ZXJzLCBjYW5vbmljYWw6IENhbm9uaWNhbFRpbGVJRCkge1xuICAgICAgICBjb25zdCBzdHlsZUxheWVyID0gdGhpcy5sYXllcnNbMF07XG4gICAgICAgIGNvbnN0IGJ1Y2tldEZlYXR1cmVzID0gW107XG4gICAgICAgIGxldCBjaXJjbGVTb3J0S2V5ID0gbnVsbDtcblxuICAgICAgICAvLyBIZWF0bWFwIGxheWVycyBhcmUgaGFuZGxlZCBpbiB0aGlzIGJ1Y2tldCBhbmQgaGF2ZSBubyBldmFsdWF0ZWQgcHJvcGVydGllcywgc28gd2UgY2hlY2sgb3VyIGFjY2Vzc1xuICAgICAgICBpZiAoc3R5bGVMYXllci50eXBlID09PSAnY2lyY2xlJykge1xuICAgICAgICAgICAgY2lyY2xlU29ydEtleSA9ICgoc3R5bGVMYXllcjogYW55KTogQ2lyY2xlU3R5bGVMYXllcikubGF5b3V0LmdldCgnY2lyY2xlLXNvcnQta2V5Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHtmZWF0dXJlLCBpZCwgaW5kZXgsIHNvdXJjZUxheWVySW5kZXh9IG9mIGZlYXR1cmVzKSB7XG4gICAgICAgICAgICBjb25zdCBuZWVkR2VvbWV0cnkgPSB0aGlzLmxheWVyc1swXS5fZmVhdHVyZUZpbHRlci5uZWVkR2VvbWV0cnk7XG4gICAgICAgICAgICBjb25zdCBldmFsdWF0aW9uRmVhdHVyZSA9IHt0eXBlOiBmZWF0dXJlLnR5cGUsXG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczogZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAgIGdlb21ldHJ5OiBuZWVkR2VvbWV0cnkgPyBsb2FkR2VvbWV0cnkoZmVhdHVyZSkgOiBbXX07XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5sYXllcnNbMF0uX2ZlYXR1cmVGaWx0ZXIuZmlsdGVyKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyh0aGlzLnpvb20pLCBldmFsdWF0aW9uRmVhdHVyZSwgY2Fub25pY2FsKSkgY29udGludWU7XG5cbiAgICAgICAgICAgIGlmICghbmVlZEdlb21ldHJ5KSAgZXZhbHVhdGlvbkZlYXR1cmUuZ2VvbWV0cnkgPSBsb2FkR2VvbWV0cnkoZmVhdHVyZSk7XG4gICAgICAgICAgICBjb25zdCBzb3J0S2V5ID0gY2lyY2xlU29ydEtleSA/XG4gICAgICAgICAgICAgICAgY2lyY2xlU29ydEtleS5ldmFsdWF0ZShldmFsdWF0aW9uRmVhdHVyZSwge30sIGNhbm9uaWNhbCkgOlxuICAgICAgICAgICAgICAgIHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgY29uc3QgYnVja2V0RmVhdHVyZTogQnVja2V0RmVhdHVyZSA9IHtcbiAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBmZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICAgICAgICAgICAgdHlwZTogZmVhdHVyZS50eXBlLFxuICAgICAgICAgICAgICAgIHNvdXJjZUxheWVySW5kZXgsXG4gICAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgICAgZ2VvbWV0cnkgOiBldmFsdWF0aW9uRmVhdHVyZS5nZW9tZXRyeSxcbiAgICAgICAgICAgICAgICBwYXR0ZXJuczoge30sXG4gICAgICAgICAgICAgICAgc29ydEtleVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgYnVja2V0RmVhdHVyZXMucHVzaChidWNrZXRGZWF0dXJlKTtcblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNpcmNsZVNvcnRLZXkpIHtcbiAgICAgICAgICAgIGJ1Y2tldEZlYXR1cmVzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBhLnNvcnRLZXkgaXMgYWx3YXlzIGEgbnVtYmVyIHdoZW4gaW4gdXNlXG4gICAgICAgICAgICAgICAgcmV0dXJuICgoYS5zb3J0S2V5OiBhbnkpOiBudW1iZXIpIC0gKChiLnNvcnRLZXk6IGFueSk6IG51bWJlcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgYnVja2V0RmVhdHVyZSBvZiBidWNrZXRGZWF0dXJlcykge1xuICAgICAgICAgICAgY29uc3Qge2dlb21ldHJ5LCBpbmRleCwgc291cmNlTGF5ZXJJbmRleH0gPSBidWNrZXRGZWF0dXJlO1xuICAgICAgICAgICAgY29uc3QgZmVhdHVyZSA9IGZlYXR1cmVzW2luZGV4XS5mZWF0dXJlO1xuXG4gICAgICAgICAgICB0aGlzLmFkZEZlYXR1cmUoYnVja2V0RmVhdHVyZSwgZ2VvbWV0cnksIGluZGV4LCBjYW5vbmljYWwpO1xuICAgICAgICAgICAgb3B0aW9ucy5mZWF0dXJlSW5kZXguaW5zZXJ0KGZlYXR1cmUsIGdlb21ldHJ5LCBpbmRleCwgc291cmNlTGF5ZXJJbmRleCwgdGhpcy5pbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGUoc3RhdGVzOiBGZWF0dXJlU3RhdGVzLCB2dExheWVyOiBWZWN0b3JUaWxlTGF5ZXIsIGltYWdlUG9zaXRpb25zOiB7W186IHN0cmluZ106IEltYWdlUG9zaXRpb259KSB7XG4gICAgICAgIGlmICghdGhpcy5zdGF0ZURlcGVuZGVudExheWVycy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBkYXRlUGFpbnRBcnJheXMoc3RhdGVzLCB2dExheWVyLCB0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJzLCBpbWFnZVBvc2l0aW9ucyk7XG4gICAgfVxuXG4gICAgaXNFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIHVwbG9hZFBlbmRpbmcoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy51cGxvYWRlZCB8fCB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5uZWVkc1VwbG9hZDtcbiAgICB9XG5cbiAgICB1cGxvYWQoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgICBpZiAoIXRoaXMudXBsb2FkZWQpIHtcbiAgICAgICAgICAgIHRoaXMubGF5b3V0VmVydGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgbGF5b3V0QXR0cmlidXRlcyk7XG4gICAgICAgICAgICB0aGlzLmluZGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwbG9hZChjb250ZXh0KTtcbiAgICAgICAgdGhpcy51cGxvYWRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxheW91dFZlcnRleEJ1ZmZlcikgcmV0dXJuO1xuICAgICAgICB0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuc2VnbWVudHMuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIGFkZEZlYXR1cmUoZmVhdHVyZTogQnVja2V0RmVhdHVyZSwgZ2VvbWV0cnk6IEFycmF5PEFycmF5PFBvaW50Pj4sIGluZGV4OiBudW1iZXIsIGNhbm9uaWNhbDogQ2Fub25pY2FsVGlsZUlEKSB7XG4gICAgICAgIGZvciAoY29uc3QgcmluZyBvZiBnZW9tZXRyeSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwb2ludCBvZiByaW5nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeCA9IHBvaW50Lng7XG4gICAgICAgICAgICAgICAgY29uc3QgeSA9IHBvaW50Lnk7XG5cbiAgICAgICAgICAgICAgICAvLyBEbyBub3QgaW5jbHVkZSBwb2ludHMgdGhhdCBhcmUgb3V0c2lkZSB0aGUgdGlsZSBib3VuZGFyaWVzLlxuICAgICAgICAgICAgICAgIGlmICh4IDwgMCB8fCB4ID49IEVYVEVOVCB8fCB5IDwgMCB8fCB5ID49IEVYVEVOVCkgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICAvLyB0aGlzIGdlb21ldHJ5IHdpbGwgYmUgb2YgdGhlIFBvaW50IHR5cGUsIGFuZCB3ZSdsbCBkZXJpdmVcbiAgICAgICAgICAgICAgICAvLyB0d28gdHJpYW5nbGVzIGZyb20gaXQuXG4gICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAvLyDDosKUwozDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwpBcbiAgICAgICAgICAgICAgICAvLyDDosKUwoIgMyAgICAgMiDDosKUwoJcbiAgICAgICAgICAgICAgICAvLyDDosKUwoIgICAgICAgICDDosKUwoJcbiAgICAgICAgICAgICAgICAvLyDDosKUwoIgMCAgICAgMSDDosKUwoJcbiAgICAgICAgICAgICAgICAvLyDDosKUwpTDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwoDDosKUwphcblxuICAgICAgICAgICAgICAgIGNvbnN0IHNlZ21lbnQgPSB0aGlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KDQsIHRoaXMubGF5b3V0VmVydGV4QXJyYXksIHRoaXMuaW5kZXhBcnJheSwgZmVhdHVyZS5zb3J0S2V5KTtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHNlZ21lbnQudmVydGV4TGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgYWRkQ2lyY2xlVmVydGV4KHRoaXMubGF5b3V0VmVydGV4QXJyYXksIHgsIHksIC0xLCAtMSk7XG4gICAgICAgICAgICAgICAgYWRkQ2lyY2xlVmVydGV4KHRoaXMubGF5b3V0VmVydGV4QXJyYXksIHgsIHksIDEsIC0xKTtcbiAgICAgICAgICAgICAgICBhZGRDaXJjbGVWZXJ0ZXgodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgeCwgeSwgMSwgMSk7XG4gICAgICAgICAgICAgICAgYWRkQ2lyY2xlVmVydGV4KHRoaXMubGF5b3V0VmVydGV4QXJyYXksIHgsIHksIC0xLCAxKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayhpbmRleCwgaW5kZXggKyAxLCBpbmRleCArIDIpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayhpbmRleCwgaW5kZXggKyAzLCBpbmRleCArIDIpO1xuXG4gICAgICAgICAgICAgICAgc2VnbWVudC52ZXJ0ZXhMZW5ndGggKz0gNDtcbiAgICAgICAgICAgICAgICBzZWdtZW50LnByaW1pdGl2ZUxlbmd0aCArPSAyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMucG9wdWxhdGVQYWludEFycmF5cyh0aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCwgZmVhdHVyZSwgaW5kZXgsIHt9LCBjYW5vbmljYWwpO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ0NpcmNsZUJ1Y2tldCcsIENpcmNsZUJ1Y2tldCwge29taXQ6IFsnbGF5ZXJzJ119KTtcblxuZXhwb3J0IGRlZmF1bHQgQ2lyY2xlQnVja2V0O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtpc0NvdW50ZXJDbG9ja3dpc2V9IGZyb20gJy4vdXRpbCc7XG5cbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcblxuZXhwb3J0IHtwb2x5Z29uSW50ZXJzZWN0c0J1ZmZlcmVkUG9pbnQsIHBvbHlnb25JbnRlcnNlY3RzTXVsdGlQb2x5Z29uLCBwb2x5Z29uSW50ZXJzZWN0c0J1ZmZlcmVkTXVsdGlMaW5lLCBwb2x5Z29uSW50ZXJzZWN0c1BvbHlnb24sIGRpc3RUb1NlZ21lbnRTcXVhcmVkLCBwb2x5Z29uSW50ZXJzZWN0c0JveH07XG5cbnR5cGUgTGluZSA9IEFycmF5PFBvaW50PjtcbnR5cGUgTXVsdGlMaW5lID0gQXJyYXk8TGluZT47XG50eXBlIFJpbmcgPSBBcnJheTxQb2ludD47XG50eXBlIFBvbHlnb24gPSBBcnJheTxQb2ludD47XG50eXBlIE11bHRpUG9seWdvbiA9IEFycmF5PFBvbHlnb24+O1xuXG5mdW5jdGlvbiBwb2x5Z29uSW50ZXJzZWN0c1BvbHlnb24ocG9seWdvbkE6IFBvbHlnb24sIHBvbHlnb25COiBQb2x5Z29uKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2x5Z29uQS5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAocG9seWdvbkNvbnRhaW5zUG9pbnQocG9seWdvbkIsIHBvbHlnb25BW2ldKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2x5Z29uQi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAocG9seWdvbkNvbnRhaW5zUG9pbnQocG9seWdvbkEsIHBvbHlnb25CW2ldKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGxpbmVJbnRlcnNlY3RzTGluZShwb2x5Z29uQSwgcG9seWdvbkIpKSByZXR1cm4gdHJ1ZTtcblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gcG9seWdvbkludGVyc2VjdHNCdWZmZXJlZFBvaW50KHBvbHlnb246IFBvbHlnb24sIHBvaW50OiBQb2ludCwgcmFkaXVzOiBudW1iZXIpIHtcbiAgICBpZiAocG9seWdvbkNvbnRhaW5zUG9pbnQocG9seWdvbiwgcG9pbnQpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAocG9pbnRJbnRlcnNlY3RzQnVmZmVyZWRMaW5lKHBvaW50LCBwb2x5Z29uLCByYWRpdXMpKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHBvbHlnb25JbnRlcnNlY3RzTXVsdGlQb2x5Z29uKHBvbHlnb246IFBvbHlnb24sIG11bHRpUG9seWdvbjogTXVsdGlQb2x5Z29uKSB7XG5cbiAgICBpZiAocG9seWdvbi5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIG11bHRpUG9seWdvbkNvbnRhaW5zUG9pbnQobXVsdGlQb2x5Z29uLCBwb2x5Z29uWzBdKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBtID0gMDsgbSA8IG11bHRpUG9seWdvbi5sZW5ndGg7IG0rKykge1xuICAgICAgICBjb25zdCByaW5nID0gbXVsdGlQb2x5Z29uW21dO1xuICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IHJpbmcubGVuZ3RoOyBuKyspIHtcbiAgICAgICAgICAgIGlmIChwb2x5Z29uQ29udGFpbnNQb2ludChwb2x5Z29uLCByaW5nW25dKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvbHlnb24ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKG11bHRpUG9seWdvbkNvbnRhaW5zUG9pbnQobXVsdGlQb2x5Z29uLCBwb2x5Z29uW2ldKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBtdWx0aVBvbHlnb24ubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgaWYgKGxpbmVJbnRlcnNlY3RzTGluZShwb2x5Z29uLCBtdWx0aVBvbHlnb25ba10pKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHBvbHlnb25JbnRlcnNlY3RzQnVmZmVyZWRNdWx0aUxpbmUocG9seWdvbjogUG9seWdvbiwgbXVsdGlMaW5lOiBNdWx0aUxpbmUsIHJhZGl1czogbnVtYmVyKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtdWx0aUxpbmUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgbGluZSA9IG11bHRpTGluZVtpXTtcblxuICAgICAgICBpZiAocG9seWdvbi5sZW5ndGggPj0gMykge1xuICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBsaW5lLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBvbHlnb25Db250YWluc1BvaW50KHBvbHlnb24sIGxpbmVba10pKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaW5lSW50ZXJzZWN0c0J1ZmZlcmVkTGluZShwb2x5Z29uLCBsaW5lLCByYWRpdXMpKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBsaW5lSW50ZXJzZWN0c0J1ZmZlcmVkTGluZShsaW5lQTogTGluZSwgbGluZUI6IExpbmUsIHJhZGl1czogbnVtYmVyKSB7XG5cbiAgICBpZiAobGluZUEubGVuZ3RoID4gMSkge1xuICAgICAgICBpZiAobGluZUludGVyc2VjdHNMaW5lKGxpbmVBLCBsaW5lQikpIHJldHVybiB0cnVlO1xuXG4gICAgICAgIC8vIENoZWNrIHdoZXRoZXIgYW55IHBvaW50IGluIGVpdGhlciBsaW5lIGlzIHdpdGhpbiByYWRpdXMgb2YgdGhlIG90aGVyIGxpbmVcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsaW5lQi5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgaWYgKHBvaW50SW50ZXJzZWN0c0J1ZmZlcmVkTGluZShsaW5lQltqXSwgbGluZUEsIHJhZGl1cykpIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBsaW5lQS5sZW5ndGg7IGsrKykge1xuICAgICAgICBpZiAocG9pbnRJbnRlcnNlY3RzQnVmZmVyZWRMaW5lKGxpbmVBW2tdLCBsaW5lQiwgcmFkaXVzKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBsaW5lSW50ZXJzZWN0c0xpbmUobGluZUE6IExpbmUsIGxpbmVCOiBMaW5lKSB7XG4gICAgaWYgKGxpbmVBLmxlbmd0aCA9PT0gMCB8fCBsaW5lQi5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVBLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICBjb25zdCBhMCA9IGxpbmVBW2ldO1xuICAgICAgICBjb25zdCBhMSA9IGxpbmVBW2kgKyAxXTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsaW5lQi5sZW5ndGggLSAxOyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGIwID0gbGluZUJbal07XG4gICAgICAgICAgICBjb25zdCBiMSA9IGxpbmVCW2ogKyAxXTtcbiAgICAgICAgICAgIGlmIChsaW5lU2VnbWVudEludGVyc2VjdHNMaW5lU2VnbWVudChhMCwgYTEsIGIwLCBiMSkpIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbGluZVNlZ21lbnRJbnRlcnNlY3RzTGluZVNlZ21lbnQoYTA6IFBvaW50LCBhMTogUG9pbnQsIGIwOiBQb2ludCwgYjE6IFBvaW50KSB7XG4gICAgcmV0dXJuIGlzQ291bnRlckNsb2Nrd2lzZShhMCwgYjAsIGIxKSAhPT0gaXNDb3VudGVyQ2xvY2t3aXNlKGExLCBiMCwgYjEpICYmXG4gICAgICAgIGlzQ291bnRlckNsb2Nrd2lzZShhMCwgYTEsIGIwKSAhPT0gaXNDb3VudGVyQ2xvY2t3aXNlKGEwLCBhMSwgYjEpO1xufVxuXG5mdW5jdGlvbiBwb2ludEludGVyc2VjdHNCdWZmZXJlZExpbmUocDogUG9pbnQsIGxpbmU6IExpbmUsIHJhZGl1czogbnVtYmVyKSB7XG4gICAgY29uc3QgcmFkaXVzU3F1YXJlZCA9IHJhZGl1cyAqIHJhZGl1cztcblxuICAgIGlmIChsaW5lLmxlbmd0aCA9PT0gMSkgcmV0dXJuIHAuZGlzdFNxcihsaW5lWzBdKSA8IHJhZGl1c1NxdWFyZWQ7XG5cbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IGxpbmUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gRmluZCBsaW5lIHNlZ21lbnRzIHRoYXQgaGF2ZSBhIGRpc3RhbmNlIDw9IHJhZGl1c14yIHRvIHBcbiAgICAgICAgLy8gSW4gdGhhdCBjYXNlLCB3ZSB0cmVhdCB0aGUgbGluZSBhcyBcImNvbnRhaW5pbmcgcG9pbnQgcFwiLlxuICAgICAgICBjb25zdCB2ID0gbGluZVtpIC0gMV0sIHcgPSBsaW5lW2ldO1xuICAgICAgICBpZiAoZGlzdFRvU2VnbWVudFNxdWFyZWQocCwgdiwgdykgPCByYWRpdXNTcXVhcmVkKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBDb2RlIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTUwMTcyNS8zMzEzNzkuXG5mdW5jdGlvbiBkaXN0VG9TZWdtZW50U3F1YXJlZChwOiBQb2ludCwgdjogUG9pbnQsIHc6IFBvaW50KSB7XG4gICAgY29uc3QgbDIgPSB2LmRpc3RTcXIodyk7XG4gICAgaWYgKGwyID09PSAwKSByZXR1cm4gcC5kaXN0U3FyKHYpO1xuICAgIGNvbnN0IHQgPSAoKHAueCAtIHYueCkgKiAody54IC0gdi54KSArIChwLnkgLSB2LnkpICogKHcueSAtIHYueSkpIC8gbDI7XG4gICAgaWYgKHQgPCAwKSByZXR1cm4gcC5kaXN0U3FyKHYpO1xuICAgIGlmICh0ID4gMSkgcmV0dXJuIHAuZGlzdFNxcih3KTtcbiAgICByZXR1cm4gcC5kaXN0U3FyKHcuc3ViKHYpLl9tdWx0KHQpLl9hZGQodikpO1xufVxuXG4vLyBwb2ludCBpbiBwb2x5Z29uIHJheSBjYXN0aW5nIGFsZ29yaXRobVxuZnVuY3Rpb24gbXVsdGlQb2x5Z29uQ29udGFpbnNQb2ludChyaW5nczogQXJyYXk8UmluZz4sIHA6IFBvaW50KSB7XG4gICAgbGV0IGMgPSBmYWxzZSxcbiAgICAgICAgcmluZywgcDEsIHAyO1xuXG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCByaW5ncy5sZW5ndGg7IGsrKykge1xuICAgICAgICByaW5nID0gcmluZ3Nba107XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBqID0gcmluZy5sZW5ndGggLSAxOyBpIDwgcmluZy5sZW5ndGg7IGogPSBpKyspIHtcbiAgICAgICAgICAgIHAxID0gcmluZ1tpXTtcbiAgICAgICAgICAgIHAyID0gcmluZ1tqXTtcbiAgICAgICAgICAgIGlmICgoKHAxLnkgPiBwLnkpICE9PSAocDIueSA+IHAueSkpICYmIChwLnggPCAocDIueCAtIHAxLngpICogKHAueSAtIHAxLnkpIC8gKHAyLnkgLSBwMS55KSArIHAxLngpKSB7XG4gICAgICAgICAgICAgICAgYyA9ICFjO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjO1xufVxuXG5mdW5jdGlvbiBwb2x5Z29uQ29udGFpbnNQb2ludChyaW5nOiBSaW5nLCBwOiBQb2ludCkge1xuICAgIGxldCBjID0gZmFsc2U7XG4gICAgZm9yIChsZXQgaSA9IDAsIGogPSByaW5nLmxlbmd0aCAtIDE7IGkgPCByaW5nLmxlbmd0aDsgaiA9IGkrKykge1xuICAgICAgICBjb25zdCBwMSA9IHJpbmdbaV07XG4gICAgICAgIGNvbnN0IHAyID0gcmluZ1tqXTtcbiAgICAgICAgaWYgKCgocDEueSA+IHAueSkgIT09IChwMi55ID4gcC55KSkgJiYgKHAueCA8IChwMi54IC0gcDEueCkgKiAocC55IC0gcDEueSkgLyAocDIueSAtIHAxLnkpICsgcDEueCkpIHtcbiAgICAgICAgICAgIGMgPSAhYztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYztcbn1cblxuZnVuY3Rpb24gcG9seWdvbkludGVyc2VjdHNCb3gocmluZzogUmluZywgYm94WDE6IG51bWJlciwgYm94WTE6IG51bWJlciwgYm94WDI6IG51bWJlciwgYm94WTI6IG51bWJlcikge1xuICAgIGZvciAoY29uc3QgcCBvZiByaW5nKSB7XG4gICAgICAgIGlmIChib3hYMSA8PSBwLnggJiZcbiAgICAgICAgICAgIGJveFkxIDw9IHAueSAmJlxuICAgICAgICAgICAgYm94WDIgPj0gcC54ICYmXG4gICAgICAgICAgICBib3hZMiA+PSBwLnkpIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGNvcm5lcnMgPSBbXG4gICAgICAgIG5ldyBQb2ludChib3hYMSwgYm94WTEpLFxuICAgICAgICBuZXcgUG9pbnQoYm94WDEsIGJveFkyKSxcbiAgICAgICAgbmV3IFBvaW50KGJveFgyLCBib3hZMiksXG4gICAgICAgIG5ldyBQb2ludChib3hYMiwgYm94WTEpXTtcblxuICAgIGlmIChyaW5nLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgZm9yIChjb25zdCBjb3JuZXIgb2YgY29ybmVycykge1xuICAgICAgICAgICAgaWYgKHBvbHlnb25Db250YWluc1BvaW50KHJpbmcsIGNvcm5lcikpIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByaW5nLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICBjb25zdCBwMSA9IHJpbmdbaV07XG4gICAgICAgIGNvbnN0IHAyID0gcmluZ1tpICsgMV07XG4gICAgICAgIGlmIChlZGdlSW50ZXJzZWN0c0JveChwMSwgcDIsIGNvcm5lcnMpKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGVkZ2VJbnRlcnNlY3RzQm94KGUxOiBQb2ludCwgZTI6IFBvaW50LCBjb3JuZXJzOiBBcnJheTxQb2ludD4pIHtcbiAgICBjb25zdCB0bCA9IGNvcm5lcnNbMF07XG4gICAgY29uc3QgYnIgPSBjb3JuZXJzWzJdO1xuICAgIC8vIHRoZSBlZGdlIGFuZCBib3ggZG8gbm90IGludGVyc2VjdCBpbiBlaXRoZXIgdGhlIHggb3IgeSBkaW1lbnNpb25zXG4gICAgaWYgKCgoZTEueCA8IHRsLngpICYmIChlMi54IDwgdGwueCkpIHx8XG4gICAgICAgICgoZTEueCA+IGJyLngpICYmIChlMi54ID4gYnIueCkpIHx8XG4gICAgICAgICgoZTEueSA8IHRsLnkpICYmIChlMi55IDwgdGwueSkpIHx8XG4gICAgICAgICgoZTEueSA+IGJyLnkpICYmIChlMi55ID4gYnIueSkpKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBjaGVjayBpZiBhbGwgY29ybmVycyBvZiB0aGUgYm94IGFyZSBvbiB0aGUgc2FtZSBzaWRlIG9mIHRoZSBlZGdlXG4gICAgY29uc3QgZGlyID0gaXNDb3VudGVyQ2xvY2t3aXNlKGUxLCBlMiwgY29ybmVyc1swXSk7XG4gICAgcmV0dXJuIGRpciAhPT0gaXNDb3VudGVyQ2xvY2t3aXNlKGUxLCBlMiwgY29ybmVyc1sxXSkgfHxcbiAgICAgICAgZGlyICE9PSBpc0NvdW50ZXJDbG9ja3dpc2UoZTEsIGUyLCBjb3JuZXJzWzJdKSB8fFxuICAgICAgICBkaXIgIT09IGlzQ291bnRlckNsb2Nrd2lzZShlMSwgZTIsIGNvcm5lcnNbM10pO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG5pbXBvcnQgdHlwZSB7UG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlfSBmcm9tIFwiLi9wcm9wZXJ0aWVzXCI7XG5pbXBvcnQgdHlwZSBTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIENpcmNsZUJ1Y2tldCBmcm9tICcuLi9kYXRhL2J1Y2tldC9jaXJjbGVfYnVja2V0JztcbmltcG9ydCB0eXBlIExpbmVCdWNrZXQgZnJvbSAnLi4vZGF0YS9idWNrZXQvbGluZV9idWNrZXQnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWF4aW11bVBhaW50VmFsdWUocHJvcGVydHk6IHN0cmluZywgbGF5ZXI6IFN0eWxlTGF5ZXIsIGJ1Y2tldDogQ2lyY2xlQnVja2V0PCo+IHwgTGluZUJ1Y2tldCk6IG51bWJlciB7XG4gICAgY29uc3QgdmFsdWUgPSAoKGxheWVyLnBhaW50OiBhbnkpLmdldChwcm9wZXJ0eSk6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxhbnk+KS52YWx1ZTtcbiAgICBpZiAodmFsdWUua2luZCA9PT0gJ2NvbnN0YW50Jykge1xuICAgICAgICByZXR1cm4gdmFsdWUudmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGJ1Y2tldC5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KGxheWVyLmlkKS5nZXRNYXhWYWx1ZShwcm9wZXJ0eSk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNsYXRlRGlzdGFuY2UodHJhbnNsYXRlOiBbbnVtYmVyLCBudW1iZXJdKSB7XG4gICAgcmV0dXJuIE1hdGguc3FydCh0cmFuc2xhdGVbMF0gKiB0cmFuc2xhdGVbMF0gKyB0cmFuc2xhdGVbMV0gKiB0cmFuc2xhdGVbMV0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNsYXRlKHF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50PixcbiAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGU6IFtudW1iZXIsIG51bWJlcl0sXG4gICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlQW5jaG9yOiAndmlld3BvcnQnIHwgJ21hcCcsXG4gICAgICAgICAgICAgICAgICAgYmVhcmluZzogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgIHBpeGVsc1RvVGlsZVVuaXRzOiBudW1iZXIpIHtcbiAgICBpZiAoIXRyYW5zbGF0ZVswXSAmJiAhdHJhbnNsYXRlWzFdKSB7XG4gICAgICAgIHJldHVybiBxdWVyeUdlb21ldHJ5O1xuICAgIH1cbiAgICBjb25zdCBwdCA9IFBvaW50LmNvbnZlcnQodHJhbnNsYXRlKS5fbXVsdChwaXhlbHNUb1RpbGVVbml0cyk7XG5cbiAgICBpZiAodHJhbnNsYXRlQW5jaG9yID09PSBcInZpZXdwb3J0XCIpIHtcbiAgICAgICAgcHQuX3JvdGF0ZSgtYmVhcmluZyk7XG4gICAgfVxuXG4gICAgY29uc3QgdHJhbnNsYXRlZCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcXVlcnlHZW9tZXRyeS5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBwb2ludCA9IHF1ZXJ5R2VvbWV0cnlbaV07XG4gICAgICAgIHRyYW5zbGF0ZWQucHVzaChwb2ludC5zdWIocHQpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRyYW5zbGF0ZWQ7XG59XG4iLCIvLyBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkLiBFZGl0IGJ1aWxkL2dlbmVyYXRlLXN0eWxlLWNvZGUuanMsIHRoZW4gcnVuIGB5YXJuIHJ1biBjb2RlZ2VuYC5cbi8vIEBmbG93XG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG5pbXBvcnQgc3R5bGVTcGVjIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvcmVmZXJlbmNlL2xhdGVzdCc7XG5cbmltcG9ydCB7XG4gICAgUHJvcGVydGllcyxcbiAgICBEYXRhQ29uc3RhbnRQcm9wZXJ0eSxcbiAgICBEYXRhRHJpdmVuUHJvcGVydHksXG4gICAgQ3Jvc3NGYWRlZERhdGFEcml2ZW5Qcm9wZXJ0eSxcbiAgICBDcm9zc0ZhZGVkUHJvcGVydHksXG4gICAgQ29sb3JSYW1wUHJvcGVydHlcbn0gZnJvbSAnLi4vcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIENvbG9yIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5cbmltcG9ydCB0eXBlIEZvcm1hdHRlZCBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvZm9ybWF0dGVkJztcblxuaW1wb3J0IHR5cGUgUmVzb2x2ZWRJbWFnZSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvcmVzb2x2ZWRfaW1hZ2UnO1xuXG5leHBvcnQgdHlwZSBMYXlvdXRQcm9wcyA9IHt8XG4gICAgXCJjaXJjbGUtc29ydC1rZXlcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG58fTtcblxuY29uc3QgbGF5b3V0OiBQcm9wZXJ0aWVzPExheW91dFByb3BzPiA9IG5ldyBQcm9wZXJ0aWVzKHtcbiAgICBcImNpcmNsZS1zb3J0LWtleVwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9jaXJjbGVcIl1bXCJjaXJjbGUtc29ydC1rZXlcIl0pLFxufSk7XG5cbmV4cG9ydCB0eXBlIFBhaW50UHJvcHMgPSB7fFxuICAgIFwiY2lyY2xlLXJhZGl1c1wiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcImNpcmNsZS1jb2xvclwiOiBEYXRhRHJpdmVuUHJvcGVydHk8Q29sb3I+LFxuICAgIFwiY2lyY2xlLWJsdXJcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJjaXJjbGUtb3BhY2l0eVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcImNpcmNsZS10cmFuc2xhdGVcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8W251bWJlciwgbnVtYmVyXT4sXG4gICAgXCJjaXJjbGUtdHJhbnNsYXRlLWFuY2hvclwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxcIm1hcFwiIHwgXCJ2aWV3cG9ydFwiPixcbiAgICBcImNpcmNsZS1waXRjaC1zY2FsZVwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxcIm1hcFwiIHwgXCJ2aWV3cG9ydFwiPixcbiAgICBcImNpcmNsZS1waXRjaC1hbGlnbm1lbnRcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJtYXBcIiB8IFwidmlld3BvcnRcIj4sXG4gICAgXCJjaXJjbGUtc3Ryb2tlLXdpZHRoXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiY2lyY2xlLXN0cm9rZS1jb2xvclwiOiBEYXRhRHJpdmVuUHJvcGVydHk8Q29sb3I+LFxuICAgIFwiY2lyY2xlLXN0cm9rZS1vcGFjaXR5XCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxufH07XG5cbmNvbnN0IHBhaW50OiBQcm9wZXJ0aWVzPFBhaW50UHJvcHM+ID0gbmV3IFByb3BlcnRpZXMoe1xuICAgIFwiY2lyY2xlLXJhZGl1c1wiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2NpcmNsZVwiXVtcImNpcmNsZS1yYWRpdXNcIl0pLFxuICAgIFwiY2lyY2xlLWNvbG9yXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfY2lyY2xlXCJdW1wiY2lyY2xlLWNvbG9yXCJdKSxcbiAgICBcImNpcmNsZS1ibHVyXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfY2lyY2xlXCJdW1wiY2lyY2xlLWJsdXJcIl0pLFxuICAgIFwiY2lyY2xlLW9wYWNpdHlcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9jaXJjbGVcIl1bXCJjaXJjbGUtb3BhY2l0eVwiXSksXG4gICAgXCJjaXJjbGUtdHJhbnNsYXRlXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9jaXJjbGVcIl1bXCJjaXJjbGUtdHJhbnNsYXRlXCJdKSxcbiAgICBcImNpcmNsZS10cmFuc2xhdGUtYW5jaG9yXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9jaXJjbGVcIl1bXCJjaXJjbGUtdHJhbnNsYXRlLWFuY2hvclwiXSksXG4gICAgXCJjaXJjbGUtcGl0Y2gtc2NhbGVcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2NpcmNsZVwiXVtcImNpcmNsZS1waXRjaC1zY2FsZVwiXSksXG4gICAgXCJjaXJjbGUtcGl0Y2gtYWxpZ25tZW50XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9jaXJjbGVcIl1bXCJjaXJjbGUtcGl0Y2gtYWxpZ25tZW50XCJdKSxcbiAgICBcImNpcmNsZS1zdHJva2Utd2lkdGhcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9jaXJjbGVcIl1bXCJjaXJjbGUtc3Ryb2tlLXdpZHRoXCJdKSxcbiAgICBcImNpcmNsZS1zdHJva2UtY29sb3JcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9jaXJjbGVcIl1bXCJjaXJjbGUtc3Ryb2tlLWNvbG9yXCJdKSxcbiAgICBcImNpcmNsZS1zdHJva2Utb3BhY2l0eVwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2NpcmNsZVwiXVtcImNpcmNsZS1zdHJva2Utb3BhY2l0eVwiXSksXG59KTtcblxuLy8gTm90ZTogd2l0aG91dCBhZGRpbmcgdGhlIGV4cGxpY2l0IHR5cGUgYW5ub3RhdGlvbiwgRmxvdyBpbmZlcnMgd2Vha2VyIHR5cGVzXG4vLyBmb3IgdGhlc2Ugb2JqZWN0cyBmcm9tIHRoZWlyIHVzZSBpbiB0aGUgY29uc3RydWN0b3IgdG8gU3R5bGVMYXllciwgYXNcbi8vIHtsYXlvdXQ/OiBQcm9wZXJ0aWVzPC4uLj4sIHBhaW50OiBQcm9wZXJ0aWVzPC4uLj59XG5leHBvcnQgZGVmYXVsdCAoeyBwYWludCwgbGF5b3V0IH06ICRFeGFjdDx7XG4gIHBhaW50OiBQcm9wZXJ0aWVzPFBhaW50UHJvcHM+LCBsYXlvdXQ6IFByb3BlcnRpZXM8TGF5b3V0UHJvcHM+XG59Pik7XG4iLCIvKipcclxuICogQ29tbW9uIHV0aWxpdGllc1xyXG4gKiBAbW9kdWxlIGdsTWF0cml4XHJcbiAqL1xuLy8gQ29uZmlndXJhdGlvbiBDb25zdGFudHNcbmV4cG9ydCB2YXIgRVBTSUxPTiA9IDAuMDAwMDAxO1xuZXhwb3J0IHZhciBBUlJBWV9UWVBFID0gdHlwZW9mIEZsb2F0MzJBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyBGbG9hdDMyQXJyYXkgOiBBcnJheTtcbmV4cG9ydCB2YXIgUkFORE9NID0gTWF0aC5yYW5kb207XG4vKipcclxuICogU2V0cyB0aGUgdHlwZSBvZiBhcnJheSB1c2VkIHdoZW4gY3JlYXRpbmcgbmV3IHZlY3RvcnMgYW5kIG1hdHJpY2VzXHJcbiAqXHJcbiAqIEBwYXJhbSB7VHlwZX0gdHlwZSBBcnJheSB0eXBlLCBzdWNoIGFzIEZsb2F0MzJBcnJheSBvciBBcnJheVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNldE1hdHJpeEFycmF5VHlwZSh0eXBlKSB7XG4gIEFSUkFZX1RZUEUgPSB0eXBlO1xufVxudmFyIGRlZ3JlZSA9IE1hdGguUEkgLyAxODA7XG4vKipcclxuICogQ29udmVydCBEZWdyZWUgVG8gUmFkaWFuXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBhIEFuZ2xlIGluIERlZ3JlZXNcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0b1JhZGlhbihhKSB7XG4gIHJldHVybiBhICogZGVncmVlO1xufVxuLyoqXHJcbiAqIFRlc3RzIHdoZXRoZXIgb3Igbm90IHRoZSBhcmd1bWVudHMgaGF2ZSBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lIHZhbHVlLCB3aXRoaW4gYW4gYWJzb2x1dGVcclxuICogb3IgcmVsYXRpdmUgdG9sZXJhbmNlIG9mIGdsTWF0cml4LkVQU0lMT04gKGFuIGFic29sdXRlIHRvbGVyYW5jZSBpcyB1c2VkIGZvciB2YWx1ZXMgbGVzc1xyXG4gKiB0aGFuIG9yIGVxdWFsIHRvIDEuMCwgYW5kIGEgcmVsYXRpdmUgdG9sZXJhbmNlIGlzIHVzZWQgZm9yIGxhcmdlciB2YWx1ZXMpXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBhIFRoZSBmaXJzdCBudW1iZXIgdG8gdGVzdC5cclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgVGhlIHNlY29uZCBudW1iZXIgdG8gdGVzdC5cclxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIG51bWJlcnMgYXJlIGFwcHJveGltYXRlbHkgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbHMoYSwgYikge1xuICByZXR1cm4gTWF0aC5hYnMoYSAtIGIpIDw9IEVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEpLCBNYXRoLmFicyhiKSk7XG59XG5pZiAoIU1hdGguaHlwb3QpIE1hdGguaHlwb3QgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB5ID0gMCxcbiAgICAgIGkgPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gIHdoaWxlIChpLS0pIHtcbiAgICB5ICs9IGFyZ3VtZW50c1tpXSAqIGFyZ3VtZW50c1tpXTtcbiAgfVxuXG4gIHJldHVybiBNYXRoLnNxcnQoeSk7XG59OyIsImltcG9ydCAqIGFzIGdsTWF0cml4IGZyb20gXCIuL2NvbW1vbi5qc1wiO1xuLyoqXHJcbiAqIDJ4MiBNYXRyaXhcclxuICogQG1vZHVsZSBtYXQyXHJcbiAqL1xuXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBpZGVudGl0eSBtYXQyXHJcbiAqXHJcbiAqIEByZXR1cm5zIHttYXQyfSBhIG5ldyAyeDIgbWF0cml4XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlKCkge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoNCk7XG5cbiAgaWYgKGdsTWF0cml4LkFSUkFZX1RZUEUgIT0gRmxvYXQzMkFycmF5KSB7XG4gICAgb3V0WzFdID0gMDtcbiAgICBvdXRbMl0gPSAwO1xuICB9XG5cbiAgb3V0WzBdID0gMTtcbiAgb3V0WzNdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IG1hdDIgaW5pdGlhbGl6ZWQgd2l0aCB2YWx1ZXMgZnJvbSBhbiBleGlzdGluZyBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBhIG1hdHJpeCB0byBjbG9uZVxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gYSBuZXcgMngyIG1hdHJpeFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNsb25lKGEpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDQpO1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICBvdXRbMl0gPSBhWzJdO1xuICBvdXRbM10gPSBhWzNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSBtYXQyIHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KG91dCwgYSkge1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICBvdXRbMl0gPSBhWzJdO1xuICBvdXRbM10gPSBhWzNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNldCBhIG1hdDIgdG8gdGhlIGlkZW50aXR5IG1hdHJpeFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHkob3V0KSB7XG4gIG91dFswXSA9IDE7XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlIGEgbmV3IG1hdDIgd2l0aCB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMDAgQ29tcG9uZW50IGluIGNvbHVtbiAwLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggMClcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMSBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAxIHBvc2l0aW9uIChpbmRleCAxKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTEwIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDAgcG9zaXRpb24gKGluZGV4IDIpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTEgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggMylcclxuICogQHJldHVybnMge21hdDJ9IG91dCBBIG5ldyAyeDIgbWF0cml4XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVZhbHVlcyhtMDAsIG0wMSwgbTEwLCBtMTEpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDQpO1xuICBvdXRbMF0gPSBtMDA7XG4gIG91dFsxXSA9IG0wMTtcbiAgb3V0WzJdID0gbTEwO1xuICBvdXRbM10gPSBtMTE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgbWF0MiB0byB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMDAgQ29tcG9uZW50IGluIGNvbHVtbiAwLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggMClcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMSBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAxIHBvc2l0aW9uIChpbmRleCAxKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTEwIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDAgcG9zaXRpb24gKGluZGV4IDIpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTEgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggMylcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNldChvdXQsIG0wMCwgbTAxLCBtMTAsIG0xMSkge1xuICBvdXRbMF0gPSBtMDA7XG4gIG91dFsxXSA9IG0wMTtcbiAgb3V0WzJdID0gbTEwO1xuICBvdXRbM10gPSBtMTE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogVHJhbnNwb3NlIHRoZSB2YWx1ZXMgb2YgYSBtYXQyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNwb3NlKG91dCwgYSkge1xuICAvLyBJZiB3ZSBhcmUgdHJhbnNwb3Npbmcgb3Vyc2VsdmVzIHdlIGNhbiBza2lwIGEgZmV3IHN0ZXBzIGJ1dCBoYXZlIHRvIGNhY2hlXG4gIC8vIHNvbWUgdmFsdWVzXG4gIGlmIChvdXQgPT09IGEpIHtcbiAgICB2YXIgYTEgPSBhWzFdO1xuICAgIG91dFsxXSA9IGFbMl07XG4gICAgb3V0WzJdID0gYTE7XG4gIH0gZWxzZSB7XG4gICAgb3V0WzBdID0gYVswXTtcbiAgICBvdXRbMV0gPSBhWzJdO1xuICAgIG91dFsyXSA9IGFbMV07XG4gICAgb3V0WzNdID0gYVszXTtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogSW52ZXJ0cyBhIG1hdDJcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnQob3V0LCBhKSB7XG4gIHZhciBhMCA9IGFbMF0sXG4gICAgICBhMSA9IGFbMV0sXG4gICAgICBhMiA9IGFbMl0sXG4gICAgICBhMyA9IGFbM107IC8vIENhbGN1bGF0ZSB0aGUgZGV0ZXJtaW5hbnRcblxuICB2YXIgZGV0ID0gYTAgKiBhMyAtIGEyICogYTE7XG5cbiAgaWYgKCFkZXQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGRldCA9IDEuMCAvIGRldDtcbiAgb3V0WzBdID0gYTMgKiBkZXQ7XG4gIG91dFsxXSA9IC1hMSAqIGRldDtcbiAgb3V0WzJdID0gLWEyICogZGV0O1xuICBvdXRbM10gPSBhMCAqIGRldDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBhZGp1Z2F0ZSBvZiBhIG1hdDJcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGpvaW50KG91dCwgYSkge1xuICAvLyBDYWNoaW5nIHRoaXMgdmFsdWUgaXMgbmVzc2VjYXJ5IGlmIG91dCA9PSBhXG4gIHZhciBhMCA9IGFbMF07XG4gIG91dFswXSA9IGFbM107XG4gIG91dFsxXSA9IC1hWzFdO1xuICBvdXRbMl0gPSAtYVsyXTtcbiAgb3V0WzNdID0gYTA7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZGV0ZXJtaW5hbnQgb2YgYSBtYXQyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkZXRlcm1pbmFudCBvZiBhXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZGV0ZXJtaW5hbnQoYSkge1xuICByZXR1cm4gYVswXSAqIGFbM10gLSBhWzJdICogYVsxXTtcbn1cbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byBtYXQyJ3NcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5KG91dCwgYSwgYikge1xuICB2YXIgYTAgPSBhWzBdLFxuICAgICAgYTEgPSBhWzFdLFxuICAgICAgYTIgPSBhWzJdLFxuICAgICAgYTMgPSBhWzNdO1xuICB2YXIgYjAgPSBiWzBdLFxuICAgICAgYjEgPSBiWzFdLFxuICAgICAgYjIgPSBiWzJdLFxuICAgICAgYjMgPSBiWzNdO1xuICBvdXRbMF0gPSBhMCAqIGIwICsgYTIgKiBiMTtcbiAgb3V0WzFdID0gYTEgKiBiMCArIGEzICogYjE7XG4gIG91dFsyXSA9IGEwICogYjIgKyBhMiAqIGIzO1xuICBvdXRbM10gPSBhMSAqIGIyICsgYTMgKiBiMztcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGVzIGEgbWF0MiBieSB0aGUgZ2l2ZW4gYW5nbGVcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGUob3V0LCBhLCByYWQpIHtcbiAgdmFyIGEwID0gYVswXSxcbiAgICAgIGExID0gYVsxXSxcbiAgICAgIGEyID0gYVsyXSxcbiAgICAgIGEzID0gYVszXTtcbiAgdmFyIHMgPSBNYXRoLnNpbihyYWQpO1xuICB2YXIgYyA9IE1hdGguY29zKHJhZCk7XG4gIG91dFswXSA9IGEwICogYyArIGEyICogcztcbiAgb3V0WzFdID0gYTEgKiBjICsgYTMgKiBzO1xuICBvdXRbMl0gPSBhMCAqIC1zICsgYTIgKiBjO1xuICBvdXRbM10gPSBhMSAqIC1zICsgYTMgKiBjO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNjYWxlcyB0aGUgbWF0MiBieSB0aGUgZGltZW5zaW9ucyBpbiB0aGUgZ2l2ZW4gdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHt2ZWMyfSB2IHRoZSB2ZWMyIHRvIHNjYWxlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKiovXG5cbmV4cG9ydCBmdW5jdGlvbiBzY2FsZShvdXQsIGEsIHYpIHtcbiAgdmFyIGEwID0gYVswXSxcbiAgICAgIGExID0gYVsxXSxcbiAgICAgIGEyID0gYVsyXSxcbiAgICAgIGEzID0gYVszXTtcbiAgdmFyIHYwID0gdlswXSxcbiAgICAgIHYxID0gdlsxXTtcbiAgb3V0WzBdID0gYTAgKiB2MDtcbiAgb3V0WzFdID0gYTEgKiB2MDtcbiAgb3V0WzJdID0gYTIgKiB2MTtcbiAgb3V0WzNdID0gYTMgKiB2MTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gYSBnaXZlbiBhbmdsZVxyXG4gKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGJ1dCBtdWNoIGZhc3RlciB0aGFuKTpcclxuICpcclxuICogICAgIG1hdDIuaWRlbnRpdHkoZGVzdCk7XHJcbiAqICAgICBtYXQyLnJvdGF0ZShkZXN0LCBkZXN0LCByYWQpO1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCBtYXQyIHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUm90YXRpb24ob3V0LCByYWQpIHtcbiAgdmFyIHMgPSBNYXRoLnNpbihyYWQpO1xuICB2YXIgYyA9IE1hdGguY29zKHJhZCk7XG4gIG91dFswXSA9IGM7XG4gIG91dFsxXSA9IHM7XG4gIG91dFsyXSA9IC1zO1xuICBvdXRbM10gPSBjO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtYXRyaXggZnJvbSBhIHZlY3RvciBzY2FsaW5nXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0Mi5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDIuc2NhbGUoZGVzdCwgZGVzdCwgdmVjKTtcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgbWF0MiByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IHYgU2NhbGluZyB2ZWN0b3JcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21TY2FsaW5nKG91dCwgdikge1xuICBvdXRbMF0gPSB2WzBdO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSB2WzFdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBtYXQyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSBtYXRyaXggdG8gcmVwcmVzZW50IGFzIGEgc3RyaW5nXHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWF0cml4XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyKGEpIHtcbiAgcmV0dXJuIFwibWF0MihcIiArIGFbMF0gKyBcIiwgXCIgKyBhWzFdICsgXCIsIFwiICsgYVsyXSArIFwiLCBcIiArIGFbM10gKyBcIilcIjtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIEZyb2Jlbml1cyBub3JtIG9mIGEgbWF0MlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIG1hdHJpeCB0byBjYWxjdWxhdGUgRnJvYmVuaXVzIG5vcm0gb2ZcclxuICogQHJldHVybnMge051bWJlcn0gRnJvYmVuaXVzIG5vcm1cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9iKGEpIHtcbiAgcmV0dXJuIE1hdGguaHlwb3QoYVswXSwgYVsxXSwgYVsyXSwgYVszXSk7XG59XG4vKipcclxuICogUmV0dXJucyBMLCBEIGFuZCBVIG1hdHJpY2VzIChMb3dlciB0cmlhbmd1bGFyLCBEaWFnb25hbCBhbmQgVXBwZXIgdHJpYW5ndWxhcikgYnkgZmFjdG9yaXppbmcgdGhlIGlucHV0IG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IEwgdGhlIGxvd2VyIHRyaWFuZ3VsYXIgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gRCB0aGUgZGlhZ29uYWwgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gVSB0aGUgdXBwZXIgdHJpYW5ndWxhciBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBpbnB1dCBtYXRyaXggdG8gZmFjdG9yaXplXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gTERVKEwsIEQsIFUsIGEpIHtcbiAgTFsyXSA9IGFbMl0gLyBhWzBdO1xuICBVWzBdID0gYVswXTtcbiAgVVsxXSA9IGFbMV07XG4gIFVbM10gPSBhWzNdIC0gTFsyXSAqIFVbMV07XG4gIHJldHVybiBbTCwgRCwgVV07XG59XG4vKipcclxuICogQWRkcyB0d28gbWF0MidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGQob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKyBiWzBdO1xuICBvdXRbMV0gPSBhWzFdICsgYlsxXTtcbiAgb3V0WzJdID0gYVsyXSArIGJbMl07XG4gIG91dFszXSA9IGFbM10gKyBiWzNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFN1YnRyYWN0cyBtYXRyaXggYiBmcm9tIG1hdHJpeCBhXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJ0cmFjdChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAtIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gLSBiWzFdO1xuICBvdXRbMl0gPSBhWzJdIC0gYlsyXTtcbiAgb3V0WzNdID0gYVszXSAtIGJbM107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgbWF0cmljZXMgaGF2ZSBleGFjdGx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uICh3aGVuIGNvbXBhcmVkIHdpdGggPT09KVxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgVGhlIGZpcnN0IG1hdHJpeC5cclxuICogQHBhcmFtIHttYXQyfSBiIFRoZSBzZWNvbmQgbWF0cml4LlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgbWF0cmljZXMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXhhY3RFcXVhbHMoYSwgYikge1xuICByZXR1cm4gYVswXSA9PT0gYlswXSAmJiBhWzFdID09PSBiWzFdICYmIGFbMl0gPT09IGJbMl0gJiYgYVszXSA9PT0gYlszXTtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBtYXRyaWNlcyBoYXZlIGFwcHJveGltYXRlbHkgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgcG9zaXRpb24uXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSBUaGUgZmlyc3QgbWF0cml4LlxyXG4gKiBAcGFyYW0ge21hdDJ9IGIgVGhlIHNlY29uZCBtYXRyaXguXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSBtYXRyaWNlcyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbHMoYSwgYikge1xuICB2YXIgYTAgPSBhWzBdLFxuICAgICAgYTEgPSBhWzFdLFxuICAgICAgYTIgPSBhWzJdLFxuICAgICAgYTMgPSBhWzNdO1xuICB2YXIgYjAgPSBiWzBdLFxuICAgICAgYjEgPSBiWzFdLFxuICAgICAgYjIgPSBiWzJdLFxuICAgICAgYjMgPSBiWzNdO1xuICByZXR1cm4gTWF0aC5hYnMoYTAgLSBiMCkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTApLCBNYXRoLmFicyhiMCkpICYmIE1hdGguYWJzKGExIC0gYjEpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGExKSwgTWF0aC5hYnMoYjEpKSAmJiBNYXRoLmFicyhhMiAtIGIyKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMiksIE1hdGguYWJzKGIyKSkgJiYgTWF0aC5hYnMoYTMgLSBiMykgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTMpLCBNYXRoLmFicyhiMykpO1xufVxuLyoqXHJcbiAqIE11bHRpcGx5IGVhY2ggZWxlbWVudCBvZiB0aGUgbWF0cml4IGJ5IGEgc2NhbGFyLlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIG1hdHJpeCB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIG1hdHJpeCdzIGVsZW1lbnRzIGJ5XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBseVNjYWxhcihvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAqIGI7XG4gIG91dFsxXSA9IGFbMV0gKiBiO1xuICBvdXRbMl0gPSBhWzJdICogYjtcbiAgb3V0WzNdID0gYVszXSAqIGI7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQWRkcyB0d28gbWF0MidzIGFmdGVyIG11bHRpcGx5aW5nIGVhY2ggZWxlbWVudCBvZiB0aGUgc2Vjb25kIG9wZXJhbmQgYnkgYSBzY2FsYXIgdmFsdWUuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBzY2FsZSB0aGUgYW1vdW50IHRvIHNjYWxlIGIncyBlbGVtZW50cyBieSBiZWZvcmUgYWRkaW5nXHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBseVNjYWxhckFuZEFkZChvdXQsIGEsIGIsIHNjYWxlKSB7XG4gIG91dFswXSA9IGFbMF0gKyBiWzBdICogc2NhbGU7XG4gIG91dFsxXSA9IGFbMV0gKyBiWzFdICogc2NhbGU7XG4gIG91dFsyXSA9IGFbMl0gKyBiWzJdICogc2NhbGU7XG4gIG91dFszXSA9IGFbM10gKyBiWzNdICogc2NhbGU7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBtYXQyLm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbXVsID0gbXVsdGlwbHk7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBtYXQyLnN1YnRyYWN0fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc3ViID0gc3VidHJhY3Q7IiwiaW1wb3J0ICogYXMgZ2xNYXRyaXggZnJvbSBcIi4vY29tbW9uLmpzXCI7XG4vKipcclxuICogMngzIE1hdHJpeFxyXG4gKiBAbW9kdWxlIG1hdDJkXHJcbiAqIEBkZXNjcmlwdGlvblxyXG4gKiBBIG1hdDJkIGNvbnRhaW5zIHNpeCBlbGVtZW50cyBkZWZpbmVkIGFzOlxyXG4gKiA8cHJlPlxyXG4gKiBbYSwgYixcclxuICogIGMsIGQsXHJcbiAqICB0eCwgdHldXHJcbiAqIDwvcHJlPlxyXG4gKiBUaGlzIGlzIGEgc2hvcnQgZm9ybSBmb3IgdGhlIDN4MyBtYXRyaXg6XHJcbiAqIDxwcmU+XHJcbiAqIFthLCBiLCAwLFxyXG4gKiAgYywgZCwgMCxcclxuICogIHR4LCB0eSwgMV1cclxuICogPC9wcmU+XHJcbiAqIFRoZSBsYXN0IGNvbHVtbiBpcyBpZ25vcmVkIHNvIHRoZSBhcnJheSBpcyBzaG9ydGVyIGFuZCBvcGVyYXRpb25zIGFyZSBmYXN0ZXIuXHJcbiAqL1xuXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBpZGVudGl0eSBtYXQyZFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IGEgbmV3IDJ4MyBtYXRyaXhcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSg2KTtcblxuICBpZiAoZ2xNYXRyaXguQVJSQVlfVFlQRSAhPSBGbG9hdDMyQXJyYXkpIHtcbiAgICBvdXRbMV0gPSAwO1xuICAgIG91dFsyXSA9IDA7XG4gICAgb3V0WzRdID0gMDtcbiAgICBvdXRbNV0gPSAwO1xuICB9XG5cbiAgb3V0WzBdID0gMTtcbiAgb3V0WzNdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IG1hdDJkIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgbWF0cml4IHRvIGNsb25lXHJcbiAqIEByZXR1cm5zIHttYXQyZH0gYSBuZXcgMngzIG1hdHJpeFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNsb25lKGEpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDYpO1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICBvdXRbMl0gPSBhWzJdO1xuICBvdXRbM10gPSBhWzNdO1xuICBvdXRbNF0gPSBhWzRdO1xuICBvdXRbNV0gPSBhWzVdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSBtYXQyZCB0byBhbm90aGVyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY29weShvdXQsIGEpIHtcbiAgb3V0WzBdID0gYVswXTtcbiAgb3V0WzFdID0gYVsxXTtcbiAgb3V0WzJdID0gYVsyXTtcbiAgb3V0WzNdID0gYVszXTtcbiAgb3V0WzRdID0gYVs0XTtcbiAgb3V0WzVdID0gYVs1XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTZXQgYSBtYXQyZCB0byB0aGUgaWRlbnRpdHkgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5KG91dCkge1xuICBvdXRbMF0gPSAxO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAxO1xuICBvdXRbNF0gPSAwO1xuICBvdXRbNV0gPSAwO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZSBhIG5ldyBtYXQyZCB3aXRoIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IGEgQ29tcG9uZW50IEEgKGluZGV4IDApXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBiIENvbXBvbmVudCBCIChpbmRleCAxKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYyBDb21wb25lbnQgQyAoaW5kZXggMilcclxuICogQHBhcmFtIHtOdW1iZXJ9IGQgQ29tcG9uZW50IEQgKGluZGV4IDMpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB0eCBDb21wb25lbnQgVFggKGluZGV4IDQpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB0eSBDb21wb25lbnQgVFkgKGluZGV4IDUpXHJcbiAqIEByZXR1cm5zIHttYXQyZH0gQSBuZXcgbWF0MmRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVmFsdWVzKGEsIGIsIGMsIGQsIHR4LCB0eSkge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoNik7XG4gIG91dFswXSA9IGE7XG4gIG91dFsxXSA9IGI7XG4gIG91dFsyXSA9IGM7XG4gIG91dFszXSA9IGQ7XG4gIG91dFs0XSA9IHR4O1xuICBvdXRbNV0gPSB0eTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSBtYXQyZCB0byB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge051bWJlcn0gYSBDb21wb25lbnQgQSAoaW5kZXggMClcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgQ29tcG9uZW50IEIgKGluZGV4IDEpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBjIENvbXBvbmVudCBDIChpbmRleCAyKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gZCBDb21wb25lbnQgRCAoaW5kZXggMylcclxuICogQHBhcmFtIHtOdW1iZXJ9IHR4IENvbXBvbmVudCBUWCAoaW5kZXggNClcclxuICogQHBhcmFtIHtOdW1iZXJ9IHR5IENvbXBvbmVudCBUWSAoaW5kZXggNSlcclxuICogQHJldHVybnMge21hdDJkfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXQob3V0LCBhLCBiLCBjLCBkLCB0eCwgdHkpIHtcbiAgb3V0WzBdID0gYTtcbiAgb3V0WzFdID0gYjtcbiAgb3V0WzJdID0gYztcbiAgb3V0WzNdID0gZDtcbiAgb3V0WzRdID0gdHg7XG4gIG91dFs1XSA9IHR5O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEludmVydHMgYSBtYXQyZFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGludmVydChvdXQsIGEpIHtcbiAgdmFyIGFhID0gYVswXSxcbiAgICAgIGFiID0gYVsxXSxcbiAgICAgIGFjID0gYVsyXSxcbiAgICAgIGFkID0gYVszXTtcbiAgdmFyIGF0eCA9IGFbNF0sXG4gICAgICBhdHkgPSBhWzVdO1xuICB2YXIgZGV0ID0gYWEgKiBhZCAtIGFiICogYWM7XG5cbiAgaWYgKCFkZXQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGRldCA9IDEuMCAvIGRldDtcbiAgb3V0WzBdID0gYWQgKiBkZXQ7XG4gIG91dFsxXSA9IC1hYiAqIGRldDtcbiAgb3V0WzJdID0gLWFjICogZGV0O1xuICBvdXRbM10gPSBhYSAqIGRldDtcbiAgb3V0WzRdID0gKGFjICogYXR5IC0gYWQgKiBhdHgpICogZGV0O1xuICBvdXRbNV0gPSAoYWIgKiBhdHggLSBhYSAqIGF0eSkgKiBkZXQ7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZGV0ZXJtaW5hbnQgb2YgYSBtYXQyZFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRldGVybWluYW50IG9mIGFcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBkZXRlcm1pbmFudChhKSB7XG4gIHJldHVybiBhWzBdICogYVszXSAtIGFbMV0gKiBhWzJdO1xufVxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIG1hdDJkJ3NcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHttYXQyZH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge21hdDJkfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBseShvdXQsIGEsIGIpIHtcbiAgdmFyIGEwID0gYVswXSxcbiAgICAgIGExID0gYVsxXSxcbiAgICAgIGEyID0gYVsyXSxcbiAgICAgIGEzID0gYVszXSxcbiAgICAgIGE0ID0gYVs0XSxcbiAgICAgIGE1ID0gYVs1XTtcbiAgdmFyIGIwID0gYlswXSxcbiAgICAgIGIxID0gYlsxXSxcbiAgICAgIGIyID0gYlsyXSxcbiAgICAgIGIzID0gYlszXSxcbiAgICAgIGI0ID0gYls0XSxcbiAgICAgIGI1ID0gYls1XTtcbiAgb3V0WzBdID0gYTAgKiBiMCArIGEyICogYjE7XG4gIG91dFsxXSA9IGExICogYjAgKyBhMyAqIGIxO1xuICBvdXRbMl0gPSBhMCAqIGIyICsgYTIgKiBiMztcbiAgb3V0WzNdID0gYTEgKiBiMiArIGEzICogYjM7XG4gIG91dFs0XSA9IGEwICogYjQgKyBhMiAqIGI1ICsgYTQ7XG4gIG91dFs1XSA9IGExICogYjQgKyBhMyAqIGI1ICsgYTU7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlcyBhIG1hdDJkIGJ5IHRoZSBnaXZlbiBhbmdsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZShvdXQsIGEsIHJhZCkge1xuICB2YXIgYTAgPSBhWzBdLFxuICAgICAgYTEgPSBhWzFdLFxuICAgICAgYTIgPSBhWzJdLFxuICAgICAgYTMgPSBhWzNdLFxuICAgICAgYTQgPSBhWzRdLFxuICAgICAgYTUgPSBhWzVdO1xuICB2YXIgcyA9IE1hdGguc2luKHJhZCk7XG4gIHZhciBjID0gTWF0aC5jb3MocmFkKTtcbiAgb3V0WzBdID0gYTAgKiBjICsgYTIgKiBzO1xuICBvdXRbMV0gPSBhMSAqIGMgKyBhMyAqIHM7XG4gIG91dFsyXSA9IGEwICogLXMgKyBhMiAqIGM7XG4gIG91dFszXSA9IGExICogLXMgKyBhMyAqIGM7XG4gIG91dFs0XSA9IGE0O1xuICBvdXRbNV0gPSBhNTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTY2FsZXMgdGhlIG1hdDJkIGJ5IHRoZSBkaW1lbnNpb25zIGluIHRoZSBnaXZlbiB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBtYXRyaXggdG8gdHJhbnNsYXRlXHJcbiAqIEBwYXJhbSB7dmVjMn0gdiB0aGUgdmVjMiB0byBzY2FsZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlKG91dCwgYSwgdikge1xuICB2YXIgYTAgPSBhWzBdLFxuICAgICAgYTEgPSBhWzFdLFxuICAgICAgYTIgPSBhWzJdLFxuICAgICAgYTMgPSBhWzNdLFxuICAgICAgYTQgPSBhWzRdLFxuICAgICAgYTUgPSBhWzVdO1xuICB2YXIgdjAgPSB2WzBdLFxuICAgICAgdjEgPSB2WzFdO1xuICBvdXRbMF0gPSBhMCAqIHYwO1xuICBvdXRbMV0gPSBhMSAqIHYwO1xuICBvdXRbMl0gPSBhMiAqIHYxO1xuICBvdXRbM10gPSBhMyAqIHYxO1xuICBvdXRbNF0gPSBhNDtcbiAgb3V0WzVdID0gYTU7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogVHJhbnNsYXRlcyB0aGUgbWF0MmQgYnkgdGhlIGRpbWVuc2lvbnMgaW4gdGhlIGdpdmVuIHZlYzJcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIG1hdHJpeCB0byB0cmFuc2xhdGVcclxuICogQHBhcmFtIHt2ZWMyfSB2IHRoZSB2ZWMyIHRvIHRyYW5zbGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zbGF0ZShvdXQsIGEsIHYpIHtcbiAgdmFyIGEwID0gYVswXSxcbiAgICAgIGExID0gYVsxXSxcbiAgICAgIGEyID0gYVsyXSxcbiAgICAgIGEzID0gYVszXSxcbiAgICAgIGE0ID0gYVs0XSxcbiAgICAgIGE1ID0gYVs1XTtcbiAgdmFyIHYwID0gdlswXSxcbiAgICAgIHYxID0gdlsxXTtcbiAgb3V0WzBdID0gYTA7XG4gIG91dFsxXSA9IGExO1xuICBvdXRbMl0gPSBhMjtcbiAgb3V0WzNdID0gYTM7XG4gIG91dFs0XSA9IGEwICogdjAgKyBhMiAqIHYxICsgYTQ7XG4gIG91dFs1XSA9IGExICogdjAgKyBhMyAqIHYxICsgYTU7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIGEgZ2l2ZW4gYW5nbGVcclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQyZC5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDJkLnJvdGF0ZShkZXN0LCBkZXN0LCByYWQpO1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgbWF0MmQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDJkfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUm90YXRpb24ob3V0LCByYWQpIHtcbiAgdmFyIHMgPSBNYXRoLnNpbihyYWQpLFxuICAgICAgYyA9IE1hdGguY29zKHJhZCk7XG4gIG91dFswXSA9IGM7XG4gIG91dFsxXSA9IHM7XG4gIG91dFsyXSA9IC1zO1xuICBvdXRbM10gPSBjO1xuICBvdXRbNF0gPSAwO1xuICBvdXRbNV0gPSAwO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtYXRyaXggZnJvbSBhIHZlY3RvciBzY2FsaW5nXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0MmQuaWRlbnRpdHkoZGVzdCk7XHJcbiAqICAgICBtYXQyZC5zY2FsZShkZXN0LCBkZXN0LCB2ZWMpO1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgbWF0MmQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHt2ZWMyfSB2IFNjYWxpbmcgdmVjdG9yXHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVNjYWxpbmcob3V0LCB2KSB7XG4gIG91dFswXSA9IHZbMF07XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IHZbMV07XG4gIG91dFs0XSA9IDA7XG4gIG91dFs1XSA9IDA7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIGEgdmVjdG9yIHRyYW5zbGF0aW9uXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0MmQuaWRlbnRpdHkoZGVzdCk7XHJcbiAqICAgICBtYXQyZC50cmFuc2xhdGUoZGVzdCwgZGVzdCwgdmVjKTtcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IG1hdDJkIHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7dmVjMn0gdiBUcmFuc2xhdGlvbiB2ZWN0b3JcclxuICogQHJldHVybnMge21hdDJkfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVHJhbnNsYXRpb24ob3V0LCB2KSB7XG4gIG91dFswXSA9IDE7XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDE7XG4gIG91dFs0XSA9IHZbMF07XG4gIG91dFs1XSA9IHZbMV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIG1hdDJkXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgbWF0cml4IHRvIHJlcHJlc2VudCBhcyBhIHN0cmluZ1xyXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1hdHJpeFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cihhKSB7XG4gIHJldHVybiBcIm1hdDJkKFwiICsgYVswXSArIFwiLCBcIiArIGFbMV0gKyBcIiwgXCIgKyBhWzJdICsgXCIsIFwiICsgYVszXSArIFwiLCBcIiArIGFbNF0gKyBcIiwgXCIgKyBhWzVdICsgXCIpXCI7XG59XG4vKipcclxuICogUmV0dXJucyBGcm9iZW5pdXMgbm9ybSBvZiBhIG1hdDJkXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIG1hdHJpeCB0byBjYWxjdWxhdGUgRnJvYmVuaXVzIG5vcm0gb2ZcclxuICogQHJldHVybnMge051bWJlcn0gRnJvYmVuaXVzIG5vcm1cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9iKGEpIHtcbiAgcmV0dXJuIE1hdGguaHlwb3QoYVswXSwgYVsxXSwgYVsyXSwgYVszXSwgYVs0XSwgYVs1XSwgMSk7XG59XG4vKipcclxuICogQWRkcyB0d28gbWF0MmQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDJkfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSArIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gKyBiWzFdO1xuICBvdXRbMl0gPSBhWzJdICsgYlsyXTtcbiAgb3V0WzNdID0gYVszXSArIGJbM107XG4gIG91dFs0XSA9IGFbNF0gKyBiWzRdO1xuICBvdXRbNV0gPSBhWzVdICsgYls1XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTdWJ0cmFjdHMgbWF0cml4IGIgZnJvbSBtYXRyaXggYVxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDJkfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnRyYWN0KG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdIC0gYlswXTtcbiAgb3V0WzFdID0gYVsxXSAtIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gLSBiWzJdO1xuICBvdXRbM10gPSBhWzNdIC0gYlszXTtcbiAgb3V0WzRdID0gYVs0XSAtIGJbNF07XG4gIG91dFs1XSA9IGFbNV0gLSBiWzVdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE11bHRpcGx5IGVhY2ggZWxlbWVudCBvZiB0aGUgbWF0cml4IGJ5IGEgc2NhbGFyLlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgbWF0cml4IHRvIHNjYWxlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBiIGFtb3VudCB0byBzY2FsZSB0aGUgbWF0cml4J3MgZWxlbWVudHMgYnlcclxuICogQHJldHVybnMge21hdDJkfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBseVNjYWxhcihvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAqIGI7XG4gIG91dFsxXSA9IGFbMV0gKiBiO1xuICBvdXRbMl0gPSBhWzJdICogYjtcbiAgb3V0WzNdID0gYVszXSAqIGI7XG4gIG91dFs0XSA9IGFbNF0gKiBiO1xuICBvdXRbNV0gPSBhWzVdICogYjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBBZGRzIHR3byBtYXQyZCdzIGFmdGVyIG11bHRpcGx5aW5nIGVhY2ggZWxlbWVudCBvZiB0aGUgc2Vjb25kIG9wZXJhbmQgYnkgYSBzY2FsYXIgdmFsdWUuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0MmR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBzY2FsZSB0aGUgYW1vdW50IHRvIHNjYWxlIGIncyBlbGVtZW50cyBieSBiZWZvcmUgYWRkaW5nXHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHlTY2FsYXJBbmRBZGQob3V0LCBhLCBiLCBzY2FsZSkge1xuICBvdXRbMF0gPSBhWzBdICsgYlswXSAqIHNjYWxlO1xuICBvdXRbMV0gPSBhWzFdICsgYlsxXSAqIHNjYWxlO1xuICBvdXRbMl0gPSBhWzJdICsgYlsyXSAqIHNjYWxlO1xuICBvdXRbM10gPSBhWzNdICsgYlszXSAqIHNjYWxlO1xuICBvdXRbNF0gPSBhWzRdICsgYls0XSAqIHNjYWxlO1xuICBvdXRbNV0gPSBhWzVdICsgYls1XSAqIHNjYWxlO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIG1hdHJpY2VzIGhhdmUgZXhhY3RseSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBwb3NpdGlvbiAod2hlbiBjb21wYXJlZCB3aXRoID09PSlcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gYSBUaGUgZmlyc3QgbWF0cml4LlxyXG4gKiBAcGFyYW0ge21hdDJkfSBiIFRoZSBzZWNvbmQgbWF0cml4LlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgbWF0cmljZXMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXhhY3RFcXVhbHMoYSwgYikge1xuICByZXR1cm4gYVswXSA9PT0gYlswXSAmJiBhWzFdID09PSBiWzFdICYmIGFbMl0gPT09IGJbMl0gJiYgYVszXSA9PT0gYlszXSAmJiBhWzRdID09PSBiWzRdICYmIGFbNV0gPT09IGJbNV07XG59XG4vKipcclxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgbWF0cmljZXMgaGF2ZSBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIFRoZSBmaXJzdCBtYXRyaXguXHJcbiAqIEBwYXJhbSB7bWF0MmR9IGIgVGhlIHNlY29uZCBtYXRyaXguXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSBtYXRyaWNlcyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbHMoYSwgYikge1xuICB2YXIgYTAgPSBhWzBdLFxuICAgICAgYTEgPSBhWzFdLFxuICAgICAgYTIgPSBhWzJdLFxuICAgICAgYTMgPSBhWzNdLFxuICAgICAgYTQgPSBhWzRdLFxuICAgICAgYTUgPSBhWzVdO1xuICB2YXIgYjAgPSBiWzBdLFxuICAgICAgYjEgPSBiWzFdLFxuICAgICAgYjIgPSBiWzJdLFxuICAgICAgYjMgPSBiWzNdLFxuICAgICAgYjQgPSBiWzRdLFxuICAgICAgYjUgPSBiWzVdO1xuICByZXR1cm4gTWF0aC5hYnMoYTAgLSBiMCkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTApLCBNYXRoLmFicyhiMCkpICYmIE1hdGguYWJzKGExIC0gYjEpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGExKSwgTWF0aC5hYnMoYjEpKSAmJiBNYXRoLmFicyhhMiAtIGIyKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMiksIE1hdGguYWJzKGIyKSkgJiYgTWF0aC5hYnMoYTMgLSBiMykgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTMpLCBNYXRoLmFicyhiMykpICYmIE1hdGguYWJzKGE0IC0gYjQpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGE0KSwgTWF0aC5hYnMoYjQpKSAmJiBNYXRoLmFicyhhNSAtIGI1KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhNSksIE1hdGguYWJzKGI1KSk7XG59XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBtYXQyZC5tdWx0aXBseX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIG11bCA9IG11bHRpcGx5O1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgbWF0MmQuc3VidHJhY3R9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzdWIgPSBzdWJ0cmFjdDsiLCJpbXBvcnQgKiBhcyBnbE1hdHJpeCBmcm9tIFwiLi9jb21tb24uanNcIjtcbi8qKlxyXG4gKiAzeDMgTWF0cml4XHJcbiAqIEBtb2R1bGUgbWF0M1xyXG4gKi9cblxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgaWRlbnRpdHkgbWF0M1xyXG4gKlxyXG4gKiBAcmV0dXJucyB7bWF0M30gYSBuZXcgM3gzIG1hdHJpeFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDkpO1xuXG4gIGlmIChnbE1hdHJpeC5BUlJBWV9UWVBFICE9IEZsb2F0MzJBcnJheSkge1xuICAgIG91dFsxXSA9IDA7XG4gICAgb3V0WzJdID0gMDtcbiAgICBvdXRbM10gPSAwO1xuICAgIG91dFs1XSA9IDA7XG4gICAgb3V0WzZdID0gMDtcbiAgICBvdXRbN10gPSAwO1xuICB9XG5cbiAgb3V0WzBdID0gMTtcbiAgb3V0WzRdID0gMTtcbiAgb3V0WzhdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDb3BpZXMgdGhlIHVwcGVyLWxlZnQgM3gzIHZhbHVlcyBpbnRvIHRoZSBnaXZlbiBtYXQzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIDN4MyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhICAgdGhlIHNvdXJjZSA0eDQgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tTWF0NChvdXQsIGEpIHtcbiAgb3V0WzBdID0gYVswXTtcbiAgb3V0WzFdID0gYVsxXTtcbiAgb3V0WzJdID0gYVsyXTtcbiAgb3V0WzNdID0gYVs0XTtcbiAgb3V0WzRdID0gYVs1XTtcbiAgb3V0WzVdID0gYVs2XTtcbiAgb3V0WzZdID0gYVs4XTtcbiAgb3V0WzddID0gYVs5XTtcbiAgb3V0WzhdID0gYVsxMF07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBtYXQzIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gYSBtYXRyaXggdG8gY2xvbmVcclxuICogQHJldHVybnMge21hdDN9IGEgbmV3IDN4MyBtYXRyaXhcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZShhKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSg5KTtcbiAgb3V0WzBdID0gYVswXTtcbiAgb3V0WzFdID0gYVsxXTtcbiAgb3V0WzJdID0gYVsyXTtcbiAgb3V0WzNdID0gYVszXTtcbiAgb3V0WzRdID0gYVs0XTtcbiAgb3V0WzVdID0gYVs1XTtcbiAgb3V0WzZdID0gYVs2XTtcbiAgb3V0WzddID0gYVs3XTtcbiAgb3V0WzhdID0gYVs4XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBvbmUgbWF0MyB0byBhbm90aGVyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY29weShvdXQsIGEpIHtcbiAgb3V0WzBdID0gYVswXTtcbiAgb3V0WzFdID0gYVsxXTtcbiAgb3V0WzJdID0gYVsyXTtcbiAgb3V0WzNdID0gYVszXTtcbiAgb3V0WzRdID0gYVs0XTtcbiAgb3V0WzVdID0gYVs1XTtcbiAgb3V0WzZdID0gYVs2XTtcbiAgb3V0WzddID0gYVs3XTtcbiAgb3V0WzhdID0gYVs4XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGUgYSBuZXcgbWF0MyB3aXRoIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMCBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAwIHBvc2l0aW9uIChpbmRleCAwKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTAxIENvbXBvbmVudCBpbiBjb2x1bW4gMCwgcm93IDEgcG9zaXRpb24gKGluZGV4IDEpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMDIgQ29tcG9uZW50IGluIGNvbHVtbiAwLCByb3cgMiBwb3NpdGlvbiAoaW5kZXggMilcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0xMCBDb21wb25lbnQgaW4gY29sdW1uIDEsIHJvdyAwIHBvc2l0aW9uIChpbmRleCAzKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTExIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDEgcG9zaXRpb24gKGluZGV4IDQpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTIgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMiBwb3NpdGlvbiAoaW5kZXggNSlcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0yMCBDb21wb25lbnQgaW4gY29sdW1uIDIsIHJvdyAwIHBvc2l0aW9uIChpbmRleCA2KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTIxIENvbXBvbmVudCBpbiBjb2x1bW4gMiwgcm93IDEgcG9zaXRpb24gKGluZGV4IDcpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMjIgQ29tcG9uZW50IGluIGNvbHVtbiAyLCByb3cgMiBwb3NpdGlvbiAoaW5kZXggOClcclxuICogQHJldHVybnMge21hdDN9IEEgbmV3IG1hdDNcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVmFsdWVzKG0wMCwgbTAxLCBtMDIsIG0xMCwgbTExLCBtMTIsIG0yMCwgbTIxLCBtMjIpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDkpO1xuICBvdXRbMF0gPSBtMDA7XG4gIG91dFsxXSA9IG0wMTtcbiAgb3V0WzJdID0gbTAyO1xuICBvdXRbM10gPSBtMTA7XG4gIG91dFs0XSA9IG0xMTtcbiAgb3V0WzVdID0gbTEyO1xuICBvdXRbNl0gPSBtMjA7XG4gIG91dFs3XSA9IG0yMTtcbiAgb3V0WzhdID0gbTIyO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNldCB0aGUgY29tcG9uZW50cyBvZiBhIG1hdDMgdG8gdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTAwIENvbXBvbmVudCBpbiBjb2x1bW4gMCwgcm93IDAgcG9zaXRpb24gKGluZGV4IDApXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMDEgQ29tcG9uZW50IGluIGNvbHVtbiAwLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggMSlcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMiBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAyIHBvc2l0aW9uIChpbmRleCAyKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTEwIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDAgcG9zaXRpb24gKGluZGV4IDMpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTEgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggNClcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0xMiBDb21wb25lbnQgaW4gY29sdW1uIDEsIHJvdyAyIHBvc2l0aW9uIChpbmRleCA1KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTIwIENvbXBvbmVudCBpbiBjb2x1bW4gMiwgcm93IDAgcG9zaXRpb24gKGluZGV4IDYpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMjEgQ29tcG9uZW50IGluIGNvbHVtbiAyLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggNylcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0yMiBDb21wb25lbnQgaW4gY29sdW1uIDIsIHJvdyAyIHBvc2l0aW9uIChpbmRleCA4KVxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0KG91dCwgbTAwLCBtMDEsIG0wMiwgbTEwLCBtMTEsIG0xMiwgbTIwLCBtMjEsIG0yMikge1xuICBvdXRbMF0gPSBtMDA7XG4gIG91dFsxXSA9IG0wMTtcbiAgb3V0WzJdID0gbTAyO1xuICBvdXRbM10gPSBtMTA7XG4gIG91dFs0XSA9IG0xMTtcbiAgb3V0WzVdID0gbTEyO1xuICBvdXRbNl0gPSBtMjA7XG4gIG91dFs3XSA9IG0yMTtcbiAgb3V0WzhdID0gbTIyO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNldCBhIG1hdDMgdG8gdGhlIGlkZW50aXR5IG1hdHJpeFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHkob3V0KSB7XG4gIG91dFswXSA9IDE7XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IDE7XG4gIG91dFs1XSA9IDA7XG4gIG91dFs2XSA9IDA7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogVHJhbnNwb3NlIHRoZSB2YWx1ZXMgb2YgYSBtYXQzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNwb3NlKG91dCwgYSkge1xuICAvLyBJZiB3ZSBhcmUgdHJhbnNwb3Npbmcgb3Vyc2VsdmVzIHdlIGNhbiBza2lwIGEgZmV3IHN0ZXBzIGJ1dCBoYXZlIHRvIGNhY2hlIHNvbWUgdmFsdWVzXG4gIGlmIChvdXQgPT09IGEpIHtcbiAgICB2YXIgYTAxID0gYVsxXSxcbiAgICAgICAgYTAyID0gYVsyXSxcbiAgICAgICAgYTEyID0gYVs1XTtcbiAgICBvdXRbMV0gPSBhWzNdO1xuICAgIG91dFsyXSA9IGFbNl07XG4gICAgb3V0WzNdID0gYTAxO1xuICAgIG91dFs1XSA9IGFbN107XG4gICAgb3V0WzZdID0gYTAyO1xuICAgIG91dFs3XSA9IGExMjtcbiAgfSBlbHNlIHtcbiAgICBvdXRbMF0gPSBhWzBdO1xuICAgIG91dFsxXSA9IGFbM107XG4gICAgb3V0WzJdID0gYVs2XTtcbiAgICBvdXRbM10gPSBhWzFdO1xuICAgIG91dFs0XSA9IGFbNF07XG4gICAgb3V0WzVdID0gYVs3XTtcbiAgICBvdXRbNl0gPSBhWzJdO1xuICAgIG91dFs3XSA9IGFbNV07XG4gICAgb3V0WzhdID0gYVs4XTtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogSW52ZXJ0cyBhIG1hdDNcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnQob3V0LCBhKSB7XG4gIHZhciBhMDAgPSBhWzBdLFxuICAgICAgYTAxID0gYVsxXSxcbiAgICAgIGEwMiA9IGFbMl07XG4gIHZhciBhMTAgPSBhWzNdLFxuICAgICAgYTExID0gYVs0XSxcbiAgICAgIGExMiA9IGFbNV07XG4gIHZhciBhMjAgPSBhWzZdLFxuICAgICAgYTIxID0gYVs3XSxcbiAgICAgIGEyMiA9IGFbOF07XG4gIHZhciBiMDEgPSBhMjIgKiBhMTEgLSBhMTIgKiBhMjE7XG4gIHZhciBiMTEgPSAtYTIyICogYTEwICsgYTEyICogYTIwO1xuICB2YXIgYjIxID0gYTIxICogYTEwIC0gYTExICogYTIwOyAvLyBDYWxjdWxhdGUgdGhlIGRldGVybWluYW50XG5cbiAgdmFyIGRldCA9IGEwMCAqIGIwMSArIGEwMSAqIGIxMSArIGEwMiAqIGIyMTtcblxuICBpZiAoIWRldCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZGV0ID0gMS4wIC8gZGV0O1xuICBvdXRbMF0gPSBiMDEgKiBkZXQ7XG4gIG91dFsxXSA9ICgtYTIyICogYTAxICsgYTAyICogYTIxKSAqIGRldDtcbiAgb3V0WzJdID0gKGExMiAqIGEwMSAtIGEwMiAqIGExMSkgKiBkZXQ7XG4gIG91dFszXSA9IGIxMSAqIGRldDtcbiAgb3V0WzRdID0gKGEyMiAqIGEwMCAtIGEwMiAqIGEyMCkgKiBkZXQ7XG4gIG91dFs1XSA9ICgtYTEyICogYTAwICsgYTAyICogYTEwKSAqIGRldDtcbiAgb3V0WzZdID0gYjIxICogZGV0O1xuICBvdXRbN10gPSAoLWEyMSAqIGEwMCArIGEwMSAqIGEyMCkgKiBkZXQ7XG4gIG91dFs4XSA9IChhMTEgKiBhMDAgLSBhMDEgKiBhMTApICogZGV0O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGFkanVnYXRlIG9mIGEgbWF0M1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGFkam9pbnQob3V0LCBhKSB7XG4gIHZhciBhMDAgPSBhWzBdLFxuICAgICAgYTAxID0gYVsxXSxcbiAgICAgIGEwMiA9IGFbMl07XG4gIHZhciBhMTAgPSBhWzNdLFxuICAgICAgYTExID0gYVs0XSxcbiAgICAgIGExMiA9IGFbNV07XG4gIHZhciBhMjAgPSBhWzZdLFxuICAgICAgYTIxID0gYVs3XSxcbiAgICAgIGEyMiA9IGFbOF07XG4gIG91dFswXSA9IGExMSAqIGEyMiAtIGExMiAqIGEyMTtcbiAgb3V0WzFdID0gYTAyICogYTIxIC0gYTAxICogYTIyO1xuICBvdXRbMl0gPSBhMDEgKiBhMTIgLSBhMDIgKiBhMTE7XG4gIG91dFszXSA9IGExMiAqIGEyMCAtIGExMCAqIGEyMjtcbiAgb3V0WzRdID0gYTAwICogYTIyIC0gYTAyICogYTIwO1xuICBvdXRbNV0gPSBhMDIgKiBhMTAgLSBhMDAgKiBhMTI7XG4gIG91dFs2XSA9IGExMCAqIGEyMSAtIGExMSAqIGEyMDtcbiAgb3V0WzddID0gYTAxICogYTIwIC0gYTAwICogYTIxO1xuICBvdXRbOF0gPSBhMDAgKiBhMTEgLSBhMDEgKiBhMTA7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZGV0ZXJtaW5hbnQgb2YgYSBtYXQzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkZXRlcm1pbmFudCBvZiBhXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZGV0ZXJtaW5hbnQoYSkge1xuICB2YXIgYTAwID0gYVswXSxcbiAgICAgIGEwMSA9IGFbMV0sXG4gICAgICBhMDIgPSBhWzJdO1xuICB2YXIgYTEwID0gYVszXSxcbiAgICAgIGExMSA9IGFbNF0sXG4gICAgICBhMTIgPSBhWzVdO1xuICB2YXIgYTIwID0gYVs2XSxcbiAgICAgIGEyMSA9IGFbN10sXG4gICAgICBhMjIgPSBhWzhdO1xuICByZXR1cm4gYTAwICogKGEyMiAqIGExMSAtIGExMiAqIGEyMSkgKyBhMDEgKiAoLWEyMiAqIGExMCArIGExMiAqIGEyMCkgKyBhMDIgKiAoYTIxICogYTEwIC0gYTExICogYTIwKTtcbn1cbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byBtYXQzJ3NcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0M30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5KG91dCwgYSwgYikge1xuICB2YXIgYTAwID0gYVswXSxcbiAgICAgIGEwMSA9IGFbMV0sXG4gICAgICBhMDIgPSBhWzJdO1xuICB2YXIgYTEwID0gYVszXSxcbiAgICAgIGExMSA9IGFbNF0sXG4gICAgICBhMTIgPSBhWzVdO1xuICB2YXIgYTIwID0gYVs2XSxcbiAgICAgIGEyMSA9IGFbN10sXG4gICAgICBhMjIgPSBhWzhdO1xuICB2YXIgYjAwID0gYlswXSxcbiAgICAgIGIwMSA9IGJbMV0sXG4gICAgICBiMDIgPSBiWzJdO1xuICB2YXIgYjEwID0gYlszXSxcbiAgICAgIGIxMSA9IGJbNF0sXG4gICAgICBiMTIgPSBiWzVdO1xuICB2YXIgYjIwID0gYls2XSxcbiAgICAgIGIyMSA9IGJbN10sXG4gICAgICBiMjIgPSBiWzhdO1xuICBvdXRbMF0gPSBiMDAgKiBhMDAgKyBiMDEgKiBhMTAgKyBiMDIgKiBhMjA7XG4gIG91dFsxXSA9IGIwMCAqIGEwMSArIGIwMSAqIGExMSArIGIwMiAqIGEyMTtcbiAgb3V0WzJdID0gYjAwICogYTAyICsgYjAxICogYTEyICsgYjAyICogYTIyO1xuICBvdXRbM10gPSBiMTAgKiBhMDAgKyBiMTEgKiBhMTAgKyBiMTIgKiBhMjA7XG4gIG91dFs0XSA9IGIxMCAqIGEwMSArIGIxMSAqIGExMSArIGIxMiAqIGEyMTtcbiAgb3V0WzVdID0gYjEwICogYTAyICsgYjExICogYTEyICsgYjEyICogYTIyO1xuICBvdXRbNl0gPSBiMjAgKiBhMDAgKyBiMjEgKiBhMTAgKyBiMjIgKiBhMjA7XG4gIG91dFs3XSA9IGIyMCAqIGEwMSArIGIyMSAqIGExMSArIGIyMiAqIGEyMTtcbiAgb3V0WzhdID0gYjIwICogYTAyICsgYjIxICogYTEyICsgYjIyICogYTIyO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFRyYW5zbGF0ZSBhIG1hdDMgYnkgdGhlIGdpdmVuIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byB0cmFuc2xhdGVcclxuICogQHBhcmFtIHt2ZWMyfSB2IHZlY3RvciB0byB0cmFuc2xhdGUgYnlcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zbGF0ZShvdXQsIGEsIHYpIHtcbiAgdmFyIGEwMCA9IGFbMF0sXG4gICAgICBhMDEgPSBhWzFdLFxuICAgICAgYTAyID0gYVsyXSxcbiAgICAgIGExMCA9IGFbM10sXG4gICAgICBhMTEgPSBhWzRdLFxuICAgICAgYTEyID0gYVs1XSxcbiAgICAgIGEyMCA9IGFbNl0sXG4gICAgICBhMjEgPSBhWzddLFxuICAgICAgYTIyID0gYVs4XSxcbiAgICAgIHggPSB2WzBdLFxuICAgICAgeSA9IHZbMV07XG4gIG91dFswXSA9IGEwMDtcbiAgb3V0WzFdID0gYTAxO1xuICBvdXRbMl0gPSBhMDI7XG4gIG91dFszXSA9IGExMDtcbiAgb3V0WzRdID0gYTExO1xuICBvdXRbNV0gPSBhMTI7XG4gIG91dFs2XSA9IHggKiBhMDAgKyB5ICogYTEwICsgYTIwO1xuICBvdXRbN10gPSB4ICogYTAxICsgeSAqIGExMSArIGEyMTtcbiAgb3V0WzhdID0geCAqIGEwMiArIHkgKiBhMTIgKyBhMjI7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlcyBhIG1hdDMgYnkgdGhlIGdpdmVuIGFuZ2xlXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlKG91dCwgYSwgcmFkKSB7XG4gIHZhciBhMDAgPSBhWzBdLFxuICAgICAgYTAxID0gYVsxXSxcbiAgICAgIGEwMiA9IGFbMl0sXG4gICAgICBhMTAgPSBhWzNdLFxuICAgICAgYTExID0gYVs0XSxcbiAgICAgIGExMiA9IGFbNV0sXG4gICAgICBhMjAgPSBhWzZdLFxuICAgICAgYTIxID0gYVs3XSxcbiAgICAgIGEyMiA9IGFbOF0sXG4gICAgICBzID0gTWF0aC5zaW4ocmFkKSxcbiAgICAgIGMgPSBNYXRoLmNvcyhyYWQpO1xuICBvdXRbMF0gPSBjICogYTAwICsgcyAqIGExMDtcbiAgb3V0WzFdID0gYyAqIGEwMSArIHMgKiBhMTE7XG4gIG91dFsyXSA9IGMgKiBhMDIgKyBzICogYTEyO1xuICBvdXRbM10gPSBjICogYTEwIC0gcyAqIGEwMDtcbiAgb3V0WzRdID0gYyAqIGExMSAtIHMgKiBhMDE7XG4gIG91dFs1XSA9IGMgKiBhMTIgLSBzICogYTAyO1xuICBvdXRbNl0gPSBhMjA7XG4gIG91dFs3XSA9IGEyMTtcbiAgb3V0WzhdID0gYTIyO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNjYWxlcyB0aGUgbWF0MyBieSB0aGUgZGltZW5zaW9ucyBpbiB0aGUgZ2l2ZW4gdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHt2ZWMyfSB2IHRoZSB2ZWMyIHRvIHNjYWxlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKiovXG5cbmV4cG9ydCBmdW5jdGlvbiBzY2FsZShvdXQsIGEsIHYpIHtcbiAgdmFyIHggPSB2WzBdLFxuICAgICAgeSA9IHZbMV07XG4gIG91dFswXSA9IHggKiBhWzBdO1xuICBvdXRbMV0gPSB4ICogYVsxXTtcbiAgb3V0WzJdID0geCAqIGFbMl07XG4gIG91dFszXSA9IHkgKiBhWzNdO1xuICBvdXRbNF0gPSB5ICogYVs0XTtcbiAgb3V0WzVdID0geSAqIGFbNV07XG4gIG91dFs2XSA9IGFbNl07XG4gIG91dFs3XSA9IGFbN107XG4gIG91dFs4XSA9IGFbOF07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIGEgdmVjdG9yIHRyYW5zbGF0aW9uXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0My5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDMudHJhbnNsYXRlKGRlc3QsIGRlc3QsIHZlYyk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IG1hdDMgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHt2ZWMyfSB2IFRyYW5zbGF0aW9uIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVRyYW5zbGF0aW9uKG91dCwgdikge1xuICBvdXRbMF0gPSAxO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSAxO1xuICBvdXRbNV0gPSAwO1xuICBvdXRbNl0gPSB2WzBdO1xuICBvdXRbN10gPSB2WzFdO1xuICBvdXRbOF0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtYXRyaXggZnJvbSBhIGdpdmVuIGFuZ2xlXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0My5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDMucm90YXRlKGRlc3QsIGRlc3QsIHJhZCk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IG1hdDMgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21Sb3RhdGlvbihvdXQsIHJhZCkge1xuICB2YXIgcyA9IE1hdGguc2luKHJhZCksXG4gICAgICBjID0gTWF0aC5jb3MocmFkKTtcbiAgb3V0WzBdID0gYztcbiAgb3V0WzFdID0gcztcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gLXM7XG4gIG91dFs0XSA9IGM7XG4gIG91dFs1XSA9IDA7XG4gIG91dFs2XSA9IDA7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIGEgdmVjdG9yIHNjYWxpbmdcclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQzLmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0My5zY2FsZShkZXN0LCBkZXN0LCB2ZWMpO1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCBtYXQzIHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7dmVjMn0gdiBTY2FsaW5nIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVNjYWxpbmcob3V0LCB2KSB7XG4gIG91dFswXSA9IHZbMF07XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IHZbMV07XG4gIG91dFs1XSA9IDA7XG4gIG91dFs2XSA9IDA7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ29waWVzIHRoZSB2YWx1ZXMgZnJvbSBhIG1hdDJkIGludG8gYSBtYXQzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIG1hdHJpeCB0byBjb3B5XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICoqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbU1hdDJkKG91dCwgYSkge1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSBhWzJdO1xuICBvdXRbNF0gPSBhWzNdO1xuICBvdXRbNV0gPSAwO1xuICBvdXRbNl0gPSBhWzRdO1xuICBvdXRbN10gPSBhWzVdO1xuICBvdXRbOF0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgYSAzeDMgbWF0cml4IGZyb20gdGhlIGdpdmVuIHF1YXRlcm5pb25cclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgbWF0MyByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3F1YXR9IHEgUXVhdGVybmlvbiB0byBjcmVhdGUgbWF0cml4IGZyb21cclxuICpcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21RdWF0KG91dCwgcSkge1xuICB2YXIgeCA9IHFbMF0sXG4gICAgICB5ID0gcVsxXSxcbiAgICAgIHogPSBxWzJdLFxuICAgICAgdyA9IHFbM107XG4gIHZhciB4MiA9IHggKyB4O1xuICB2YXIgeTIgPSB5ICsgeTtcbiAgdmFyIHoyID0geiArIHo7XG4gIHZhciB4eCA9IHggKiB4MjtcbiAgdmFyIHl4ID0geSAqIHgyO1xuICB2YXIgeXkgPSB5ICogeTI7XG4gIHZhciB6eCA9IHogKiB4MjtcbiAgdmFyIHp5ID0geiAqIHkyO1xuICB2YXIgenogPSB6ICogejI7XG4gIHZhciB3eCA9IHcgKiB4MjtcbiAgdmFyIHd5ID0gdyAqIHkyO1xuICB2YXIgd3ogPSB3ICogejI7XG4gIG91dFswXSA9IDEgLSB5eSAtIHp6O1xuICBvdXRbM10gPSB5eCAtIHd6O1xuICBvdXRbNl0gPSB6eCArIHd5O1xuICBvdXRbMV0gPSB5eCArIHd6O1xuICBvdXRbNF0gPSAxIC0geHggLSB6ejtcbiAgb3V0WzddID0genkgLSB3eDtcbiAgb3V0WzJdID0genggLSB3eTtcbiAgb3V0WzVdID0genkgKyB3eDtcbiAgb3V0WzhdID0gMSAtIHh4IC0geXk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyBhIDN4MyBub3JtYWwgbWF0cml4ICh0cmFuc3Bvc2UgaW52ZXJzZSkgZnJvbSB0aGUgNHg0IG1hdHJpeFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCBtYXQzIHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSBNYXQ0IHRvIGRlcml2ZSB0aGUgbm9ybWFsIG1hdHJpeCBmcm9tXHJcbiAqXHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxGcm9tTWF0NChvdXQsIGEpIHtcbiAgdmFyIGEwMCA9IGFbMF0sXG4gICAgICBhMDEgPSBhWzFdLFxuICAgICAgYTAyID0gYVsyXSxcbiAgICAgIGEwMyA9IGFbM107XG4gIHZhciBhMTAgPSBhWzRdLFxuICAgICAgYTExID0gYVs1XSxcbiAgICAgIGExMiA9IGFbNl0sXG4gICAgICBhMTMgPSBhWzddO1xuICB2YXIgYTIwID0gYVs4XSxcbiAgICAgIGEyMSA9IGFbOV0sXG4gICAgICBhMjIgPSBhWzEwXSxcbiAgICAgIGEyMyA9IGFbMTFdO1xuICB2YXIgYTMwID0gYVsxMl0sXG4gICAgICBhMzEgPSBhWzEzXSxcbiAgICAgIGEzMiA9IGFbMTRdLFxuICAgICAgYTMzID0gYVsxNV07XG4gIHZhciBiMDAgPSBhMDAgKiBhMTEgLSBhMDEgKiBhMTA7XG4gIHZhciBiMDEgPSBhMDAgKiBhMTIgLSBhMDIgKiBhMTA7XG4gIHZhciBiMDIgPSBhMDAgKiBhMTMgLSBhMDMgKiBhMTA7XG4gIHZhciBiMDMgPSBhMDEgKiBhMTIgLSBhMDIgKiBhMTE7XG4gIHZhciBiMDQgPSBhMDEgKiBhMTMgLSBhMDMgKiBhMTE7XG4gIHZhciBiMDUgPSBhMDIgKiBhMTMgLSBhMDMgKiBhMTI7XG4gIHZhciBiMDYgPSBhMjAgKiBhMzEgLSBhMjEgKiBhMzA7XG4gIHZhciBiMDcgPSBhMjAgKiBhMzIgLSBhMjIgKiBhMzA7XG4gIHZhciBiMDggPSBhMjAgKiBhMzMgLSBhMjMgKiBhMzA7XG4gIHZhciBiMDkgPSBhMjEgKiBhMzIgLSBhMjIgKiBhMzE7XG4gIHZhciBiMTAgPSBhMjEgKiBhMzMgLSBhMjMgKiBhMzE7XG4gIHZhciBiMTEgPSBhMjIgKiBhMzMgLSBhMjMgKiBhMzI7IC8vIENhbGN1bGF0ZSB0aGUgZGV0ZXJtaW5hbnRcblxuICB2YXIgZGV0ID0gYjAwICogYjExIC0gYjAxICogYjEwICsgYjAyICogYjA5ICsgYjAzICogYjA4IC0gYjA0ICogYjA3ICsgYjA1ICogYjA2O1xuXG4gIGlmICghZGV0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBkZXQgPSAxLjAgLyBkZXQ7XG4gIG91dFswXSA9IChhMTEgKiBiMTEgLSBhMTIgKiBiMTAgKyBhMTMgKiBiMDkpICogZGV0O1xuICBvdXRbMV0gPSAoYTEyICogYjA4IC0gYTEwICogYjExIC0gYTEzICogYjA3KSAqIGRldDtcbiAgb3V0WzJdID0gKGExMCAqIGIxMCAtIGExMSAqIGIwOCArIGExMyAqIGIwNikgKiBkZXQ7XG4gIG91dFszXSA9IChhMDIgKiBiMTAgLSBhMDEgKiBiMTEgLSBhMDMgKiBiMDkpICogZGV0O1xuICBvdXRbNF0gPSAoYTAwICogYjExIC0gYTAyICogYjA4ICsgYTAzICogYjA3KSAqIGRldDtcbiAgb3V0WzVdID0gKGEwMSAqIGIwOCAtIGEwMCAqIGIxMCAtIGEwMyAqIGIwNikgKiBkZXQ7XG4gIG91dFs2XSA9IChhMzEgKiBiMDUgLSBhMzIgKiBiMDQgKyBhMzMgKiBiMDMpICogZGV0O1xuICBvdXRbN10gPSAoYTMyICogYjAyIC0gYTMwICogYjA1IC0gYTMzICogYjAxKSAqIGRldDtcbiAgb3V0WzhdID0gKGEzMCAqIGIwNCAtIGEzMSAqIGIwMiArIGEzMyAqIGIwMCkgKiBkZXQ7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2VuZXJhdGVzIGEgMkQgcHJvamVjdGlvbiBtYXRyaXggd2l0aCB0aGUgZ2l2ZW4gYm91bmRzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IG1hdDMgZnJ1c3R1bSBtYXRyaXggd2lsbCBiZSB3cml0dGVuIGludG9cclxuICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIFdpZHRoIG9mIHlvdXIgZ2wgY29udGV4dFxyXG4gKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IEhlaWdodCBvZiBnbCBjb250ZXh0XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9qZWN0aW9uKG91dCwgd2lkdGgsIGhlaWdodCkge1xuICBvdXRbMF0gPSAyIC8gd2lkdGg7XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IC0yIC8gaGVpZ2h0O1xuICBvdXRbNV0gPSAwO1xuICBvdXRbNl0gPSAtMTtcbiAgb3V0WzddID0gMTtcbiAgb3V0WzhdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgbWF0M1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IGEgbWF0cml4IHRvIHJlcHJlc2VudCBhcyBhIHN0cmluZ1xyXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1hdHJpeFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cihhKSB7XG4gIHJldHVybiBcIm1hdDMoXCIgKyBhWzBdICsgXCIsIFwiICsgYVsxXSArIFwiLCBcIiArIGFbMl0gKyBcIiwgXCIgKyBhWzNdICsgXCIsIFwiICsgYVs0XSArIFwiLCBcIiArIGFbNV0gKyBcIiwgXCIgKyBhWzZdICsgXCIsIFwiICsgYVs3XSArIFwiLCBcIiArIGFbOF0gKyBcIilcIjtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIEZyb2Jlbml1cyBub3JtIG9mIGEgbWF0M1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byBjYWxjdWxhdGUgRnJvYmVuaXVzIG5vcm0gb2ZcclxuICogQHJldHVybnMge051bWJlcn0gRnJvYmVuaXVzIG5vcm1cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9iKGEpIHtcbiAgcmV0dXJuIE1hdGguaHlwb3QoYVswXSwgYVsxXSwgYVsyXSwgYVszXSwgYVs0XSwgYVs1XSwgYVs2XSwgYVs3XSwgYVs4XSk7XG59XG4vKipcclxuICogQWRkcyB0d28gbWF0MydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGQob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKyBiWzBdO1xuICBvdXRbMV0gPSBhWzFdICsgYlsxXTtcbiAgb3V0WzJdID0gYVsyXSArIGJbMl07XG4gIG91dFszXSA9IGFbM10gKyBiWzNdO1xuICBvdXRbNF0gPSBhWzRdICsgYls0XTtcbiAgb3V0WzVdID0gYVs1XSArIGJbNV07XG4gIG91dFs2XSA9IGFbNl0gKyBiWzZdO1xuICBvdXRbN10gPSBhWzddICsgYls3XTtcbiAgb3V0WzhdID0gYVs4XSArIGJbOF07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU3VidHJhY3RzIG1hdHJpeCBiIGZyb20gbWF0cml4IGFcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0M30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnRyYWN0KG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdIC0gYlswXTtcbiAgb3V0WzFdID0gYVsxXSAtIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gLSBiWzJdO1xuICBvdXRbM10gPSBhWzNdIC0gYlszXTtcbiAgb3V0WzRdID0gYVs0XSAtIGJbNF07XG4gIG91dFs1XSA9IGFbNV0gLSBiWzVdO1xuICBvdXRbNl0gPSBhWzZdIC0gYls2XTtcbiAgb3V0WzddID0gYVs3XSAtIGJbN107XG4gIG91dFs4XSA9IGFbOF0gLSBiWzhdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE11bHRpcGx5IGVhY2ggZWxlbWVudCBvZiB0aGUgbWF0cml4IGJ5IGEgc2NhbGFyLlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIG1hdHJpeCB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIG1hdHJpeCdzIGVsZW1lbnRzIGJ5XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBseVNjYWxhcihvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAqIGI7XG4gIG91dFsxXSA9IGFbMV0gKiBiO1xuICBvdXRbMl0gPSBhWzJdICogYjtcbiAgb3V0WzNdID0gYVszXSAqIGI7XG4gIG91dFs0XSA9IGFbNF0gKiBiO1xuICBvdXRbNV0gPSBhWzVdICogYjtcbiAgb3V0WzZdID0gYVs2XSAqIGI7XG4gIG91dFs3XSA9IGFbN10gKiBiO1xuICBvdXRbOF0gPSBhWzhdICogYjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBBZGRzIHR3byBtYXQzJ3MgYWZ0ZXIgbXVsdGlwbHlpbmcgZWFjaCBlbGVtZW50IG9mIHRoZSBzZWNvbmQgb3BlcmFuZCBieSBhIHNjYWxhciB2YWx1ZS5cclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0M30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHNjYWxlIHRoZSBhbW91bnQgdG8gc2NhbGUgYidzIGVsZW1lbnRzIGJ5IGJlZm9yZSBhZGRpbmdcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5U2NhbGFyQW5kQWRkKG91dCwgYSwgYiwgc2NhbGUpIHtcbiAgb3V0WzBdID0gYVswXSArIGJbMF0gKiBzY2FsZTtcbiAgb3V0WzFdID0gYVsxXSArIGJbMV0gKiBzY2FsZTtcbiAgb3V0WzJdID0gYVsyXSArIGJbMl0gKiBzY2FsZTtcbiAgb3V0WzNdID0gYVszXSArIGJbM10gKiBzY2FsZTtcbiAgb3V0WzRdID0gYVs0XSArIGJbNF0gKiBzY2FsZTtcbiAgb3V0WzVdID0gYVs1XSArIGJbNV0gKiBzY2FsZTtcbiAgb3V0WzZdID0gYVs2XSArIGJbNl0gKiBzY2FsZTtcbiAgb3V0WzddID0gYVs3XSArIGJbN10gKiBzY2FsZTtcbiAgb3V0WzhdID0gYVs4XSArIGJbOF0gKiBzY2FsZTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBtYXRyaWNlcyBoYXZlIGV4YWN0bHkgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgcG9zaXRpb24gKHdoZW4gY29tcGFyZWQgd2l0aCA9PT0pXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gYSBUaGUgZmlyc3QgbWF0cml4LlxyXG4gKiBAcGFyYW0ge21hdDN9IGIgVGhlIHNlY29uZCBtYXRyaXguXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSBtYXRyaWNlcyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBleGFjdEVxdWFscyhhLCBiKSB7XG4gIHJldHVybiBhWzBdID09PSBiWzBdICYmIGFbMV0gPT09IGJbMV0gJiYgYVsyXSA9PT0gYlsyXSAmJiBhWzNdID09PSBiWzNdICYmIGFbNF0gPT09IGJbNF0gJiYgYVs1XSA9PT0gYls1XSAmJiBhWzZdID09PSBiWzZdICYmIGFbN10gPT09IGJbN10gJiYgYVs4XSA9PT0gYls4XTtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBtYXRyaWNlcyBoYXZlIGFwcHJveGltYXRlbHkgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgcG9zaXRpb24uXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gYSBUaGUgZmlyc3QgbWF0cml4LlxyXG4gKiBAcGFyYW0ge21hdDN9IGIgVGhlIHNlY29uZCBtYXRyaXguXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSBtYXRyaWNlcyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbHMoYSwgYikge1xuICB2YXIgYTAgPSBhWzBdLFxuICAgICAgYTEgPSBhWzFdLFxuICAgICAgYTIgPSBhWzJdLFxuICAgICAgYTMgPSBhWzNdLFxuICAgICAgYTQgPSBhWzRdLFxuICAgICAgYTUgPSBhWzVdLFxuICAgICAgYTYgPSBhWzZdLFxuICAgICAgYTcgPSBhWzddLFxuICAgICAgYTggPSBhWzhdO1xuICB2YXIgYjAgPSBiWzBdLFxuICAgICAgYjEgPSBiWzFdLFxuICAgICAgYjIgPSBiWzJdLFxuICAgICAgYjMgPSBiWzNdLFxuICAgICAgYjQgPSBiWzRdLFxuICAgICAgYjUgPSBiWzVdLFxuICAgICAgYjYgPSBiWzZdLFxuICAgICAgYjcgPSBiWzddLFxuICAgICAgYjggPSBiWzhdO1xuICByZXR1cm4gTWF0aC5hYnMoYTAgLSBiMCkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTApLCBNYXRoLmFicyhiMCkpICYmIE1hdGguYWJzKGExIC0gYjEpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGExKSwgTWF0aC5hYnMoYjEpKSAmJiBNYXRoLmFicyhhMiAtIGIyKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMiksIE1hdGguYWJzKGIyKSkgJiYgTWF0aC5hYnMoYTMgLSBiMykgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTMpLCBNYXRoLmFicyhiMykpICYmIE1hdGguYWJzKGE0IC0gYjQpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGE0KSwgTWF0aC5hYnMoYjQpKSAmJiBNYXRoLmFicyhhNSAtIGI1KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhNSksIE1hdGguYWJzKGI1KSkgJiYgTWF0aC5hYnMoYTYgLSBiNikgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTYpLCBNYXRoLmFicyhiNikpICYmIE1hdGguYWJzKGE3IC0gYjcpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGE3KSwgTWF0aC5hYnMoYjcpKSAmJiBNYXRoLmFicyhhOCAtIGI4KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhOCksIE1hdGguYWJzKGI4KSk7XG59XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBtYXQzLm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbXVsID0gbXVsdGlwbHk7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBtYXQzLnN1YnRyYWN0fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc3ViID0gc3VidHJhY3Q7IiwiaW1wb3J0ICogYXMgZ2xNYXRyaXggZnJvbSBcIi4vY29tbW9uLmpzXCI7XG4vKipcclxuICogNHg0IE1hdHJpeDxicj5Gb3JtYXQ6IGNvbHVtbi1tYWpvciwgd2hlbiB0eXBlZCBvdXQgaXQgbG9va3MgbGlrZSByb3ctbWFqb3I8YnI+VGhlIG1hdHJpY2VzIGFyZSBiZWluZyBwb3N0IG11bHRpcGxpZWQuXHJcbiAqIEBtb2R1bGUgbWF0NFxyXG4gKi9cblxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgaWRlbnRpdHkgbWF0NFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7bWF0NH0gYSBuZXcgNHg0IG1hdHJpeFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDE2KTtcblxuICBpZiAoZ2xNYXRyaXguQVJSQVlfVFlQRSAhPSBGbG9hdDMyQXJyYXkpIHtcbiAgICBvdXRbMV0gPSAwO1xuICAgIG91dFsyXSA9IDA7XG4gICAgb3V0WzNdID0gMDtcbiAgICBvdXRbNF0gPSAwO1xuICAgIG91dFs2XSA9IDA7XG4gICAgb3V0WzddID0gMDtcbiAgICBvdXRbOF0gPSAwO1xuICAgIG91dFs5XSA9IDA7XG4gICAgb3V0WzExXSA9IDA7XG4gICAgb3V0WzEyXSA9IDA7XG4gICAgb3V0WzEzXSA9IDA7XG4gICAgb3V0WzE0XSA9IDA7XG4gIH1cblxuICBvdXRbMF0gPSAxO1xuICBvdXRbNV0gPSAxO1xuICBvdXRbMTBdID0gMTtcbiAgb3V0WzE1XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBtYXQ0IGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gYSBtYXRyaXggdG8gY2xvbmVcclxuICogQHJldHVybnMge21hdDR9IGEgbmV3IDR4NCBtYXRyaXhcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZShhKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSgxNik7XG4gIG91dFswXSA9IGFbMF07XG4gIG91dFsxXSA9IGFbMV07XG4gIG91dFsyXSA9IGFbMl07XG4gIG91dFszXSA9IGFbM107XG4gIG91dFs0XSA9IGFbNF07XG4gIG91dFs1XSA9IGFbNV07XG4gIG91dFs2XSA9IGFbNl07XG4gIG91dFs3XSA9IGFbN107XG4gIG91dFs4XSA9IGFbOF07XG4gIG91dFs5XSA9IGFbOV07XG4gIG91dFsxMF0gPSBhWzEwXTtcbiAgb3V0WzExXSA9IGFbMTFdO1xuICBvdXRbMTJdID0gYVsxMl07XG4gIG91dFsxM10gPSBhWzEzXTtcbiAgb3V0WzE0XSA9IGFbMTRdO1xuICBvdXRbMTVdID0gYVsxNV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIG1hdDQgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHkob3V0LCBhKSB7XG4gIG91dFswXSA9IGFbMF07XG4gIG91dFsxXSA9IGFbMV07XG4gIG91dFsyXSA9IGFbMl07XG4gIG91dFszXSA9IGFbM107XG4gIG91dFs0XSA9IGFbNF07XG4gIG91dFs1XSA9IGFbNV07XG4gIG91dFs2XSA9IGFbNl07XG4gIG91dFs3XSA9IGFbN107XG4gIG91dFs4XSA9IGFbOF07XG4gIG91dFs5XSA9IGFbOV07XG4gIG91dFsxMF0gPSBhWzEwXTtcbiAgb3V0WzExXSA9IGFbMTFdO1xuICBvdXRbMTJdID0gYVsxMl07XG4gIG91dFsxM10gPSBhWzEzXTtcbiAgb3V0WzE0XSA9IGFbMTRdO1xuICBvdXRbMTVdID0gYVsxNV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlIGEgbmV3IG1hdDQgd2l0aCB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMDAgQ29tcG9uZW50IGluIGNvbHVtbiAwLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggMClcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMSBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAxIHBvc2l0aW9uIChpbmRleCAxKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTAyIENvbXBvbmVudCBpbiBjb2x1bW4gMCwgcm93IDIgcG9zaXRpb24gKGluZGV4IDIpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMDMgQ29tcG9uZW50IGluIGNvbHVtbiAwLCByb3cgMyBwb3NpdGlvbiAoaW5kZXggMylcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0xMCBDb21wb25lbnQgaW4gY29sdW1uIDEsIHJvdyAwIHBvc2l0aW9uIChpbmRleCA0KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTExIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDEgcG9zaXRpb24gKGluZGV4IDUpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTIgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMiBwb3NpdGlvbiAoaW5kZXggNilcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0xMyBDb21wb25lbnQgaW4gY29sdW1uIDEsIHJvdyAzIHBvc2l0aW9uIChpbmRleCA3KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTIwIENvbXBvbmVudCBpbiBjb2x1bW4gMiwgcm93IDAgcG9zaXRpb24gKGluZGV4IDgpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMjEgQ29tcG9uZW50IGluIGNvbHVtbiAyLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggOSlcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0yMiBDb21wb25lbnQgaW4gY29sdW1uIDIsIHJvdyAyIHBvc2l0aW9uIChpbmRleCAxMClcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0yMyBDb21wb25lbnQgaW4gY29sdW1uIDIsIHJvdyAzIHBvc2l0aW9uIChpbmRleCAxMSlcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0zMCBDb21wb25lbnQgaW4gY29sdW1uIDMsIHJvdyAwIHBvc2l0aW9uIChpbmRleCAxMilcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0zMSBDb21wb25lbnQgaW4gY29sdW1uIDMsIHJvdyAxIHBvc2l0aW9uIChpbmRleCAxMylcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0zMiBDb21wb25lbnQgaW4gY29sdW1uIDMsIHJvdyAyIHBvc2l0aW9uIChpbmRleCAxNClcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0zMyBDb21wb25lbnQgaW4gY29sdW1uIDMsIHJvdyAzIHBvc2l0aW9uIChpbmRleCAxNSlcclxuICogQHJldHVybnMge21hdDR9IEEgbmV3IG1hdDRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVmFsdWVzKG0wMCwgbTAxLCBtMDIsIG0wMywgbTEwLCBtMTEsIG0xMiwgbTEzLCBtMjAsIG0yMSwgbTIyLCBtMjMsIG0zMCwgbTMxLCBtMzIsIG0zMykge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoMTYpO1xuICBvdXRbMF0gPSBtMDA7XG4gIG91dFsxXSA9IG0wMTtcbiAgb3V0WzJdID0gbTAyO1xuICBvdXRbM10gPSBtMDM7XG4gIG91dFs0XSA9IG0xMDtcbiAgb3V0WzVdID0gbTExO1xuICBvdXRbNl0gPSBtMTI7XG4gIG91dFs3XSA9IG0xMztcbiAgb3V0WzhdID0gbTIwO1xuICBvdXRbOV0gPSBtMjE7XG4gIG91dFsxMF0gPSBtMjI7XG4gIG91dFsxMV0gPSBtMjM7XG4gIG91dFsxMl0gPSBtMzA7XG4gIG91dFsxM10gPSBtMzE7XG4gIG91dFsxNF0gPSBtMzI7XG4gIG91dFsxNV0gPSBtMzM7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgbWF0NCB0byB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMDAgQ29tcG9uZW50IGluIGNvbHVtbiAwLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggMClcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMSBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAxIHBvc2l0aW9uIChpbmRleCAxKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTAyIENvbXBvbmVudCBpbiBjb2x1bW4gMCwgcm93IDIgcG9zaXRpb24gKGluZGV4IDIpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMDMgQ29tcG9uZW50IGluIGNvbHVtbiAwLCByb3cgMyBwb3NpdGlvbiAoaW5kZXggMylcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0xMCBDb21wb25lbnQgaW4gY29sdW1uIDEsIHJvdyAwIHBvc2l0aW9uIChpbmRleCA0KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTExIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDEgcG9zaXRpb24gKGluZGV4IDUpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTIgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMiBwb3NpdGlvbiAoaW5kZXggNilcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0xMyBDb21wb25lbnQgaW4gY29sdW1uIDEsIHJvdyAzIHBvc2l0aW9uIChpbmRleCA3KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTIwIENvbXBvbmVudCBpbiBjb2x1bW4gMiwgcm93IDAgcG9zaXRpb24gKGluZGV4IDgpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMjEgQ29tcG9uZW50IGluIGNvbHVtbiAyLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggOSlcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0yMiBDb21wb25lbnQgaW4gY29sdW1uIDIsIHJvdyAyIHBvc2l0aW9uIChpbmRleCAxMClcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0yMyBDb21wb25lbnQgaW4gY29sdW1uIDIsIHJvdyAzIHBvc2l0aW9uIChpbmRleCAxMSlcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0zMCBDb21wb25lbnQgaW4gY29sdW1uIDMsIHJvdyAwIHBvc2l0aW9uIChpbmRleCAxMilcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0zMSBDb21wb25lbnQgaW4gY29sdW1uIDMsIHJvdyAxIHBvc2l0aW9uIChpbmRleCAxMylcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0zMiBDb21wb25lbnQgaW4gY29sdW1uIDMsIHJvdyAyIHBvc2l0aW9uIChpbmRleCAxNClcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0zMyBDb21wb25lbnQgaW4gY29sdW1uIDMsIHJvdyAzIHBvc2l0aW9uIChpbmRleCAxNSlcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNldChvdXQsIG0wMCwgbTAxLCBtMDIsIG0wMywgbTEwLCBtMTEsIG0xMiwgbTEzLCBtMjAsIG0yMSwgbTIyLCBtMjMsIG0zMCwgbTMxLCBtMzIsIG0zMykge1xuICBvdXRbMF0gPSBtMDA7XG4gIG91dFsxXSA9IG0wMTtcbiAgb3V0WzJdID0gbTAyO1xuICBvdXRbM10gPSBtMDM7XG4gIG91dFs0XSA9IG0xMDtcbiAgb3V0WzVdID0gbTExO1xuICBvdXRbNl0gPSBtMTI7XG4gIG91dFs3XSA9IG0xMztcbiAgb3V0WzhdID0gbTIwO1xuICBvdXRbOV0gPSBtMjE7XG4gIG91dFsxMF0gPSBtMjI7XG4gIG91dFsxMV0gPSBtMjM7XG4gIG91dFsxMl0gPSBtMzA7XG4gIG91dFsxM10gPSBtMzE7XG4gIG91dFsxNF0gPSBtMzI7XG4gIG91dFsxNV0gPSBtMzM7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2V0IGEgbWF0NCB0byB0aGUgaWRlbnRpdHkgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eShvdXQpIHtcbiAgb3V0WzBdID0gMTtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gMDtcbiAgb3V0WzVdID0gMTtcbiAgb3V0WzZdID0gMDtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gMDtcbiAgb3V0WzldID0gMDtcbiAgb3V0WzEwXSA9IDE7XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gMDtcbiAgb3V0WzEzXSA9IDA7XG4gIG91dFsxNF0gPSAwO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc3Bvc2UgdGhlIHZhbHVlcyBvZiBhIG1hdDRcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc3Bvc2Uob3V0LCBhKSB7XG4gIC8vIElmIHdlIGFyZSB0cmFuc3Bvc2luZyBvdXJzZWx2ZXMgd2UgY2FuIHNraXAgYSBmZXcgc3RlcHMgYnV0IGhhdmUgdG8gY2FjaGUgc29tZSB2YWx1ZXNcbiAgaWYgKG91dCA9PT0gYSkge1xuICAgIHZhciBhMDEgPSBhWzFdLFxuICAgICAgICBhMDIgPSBhWzJdLFxuICAgICAgICBhMDMgPSBhWzNdO1xuICAgIHZhciBhMTIgPSBhWzZdLFxuICAgICAgICBhMTMgPSBhWzddO1xuICAgIHZhciBhMjMgPSBhWzExXTtcbiAgICBvdXRbMV0gPSBhWzRdO1xuICAgIG91dFsyXSA9IGFbOF07XG4gICAgb3V0WzNdID0gYVsxMl07XG4gICAgb3V0WzRdID0gYTAxO1xuICAgIG91dFs2XSA9IGFbOV07XG4gICAgb3V0WzddID0gYVsxM107XG4gICAgb3V0WzhdID0gYTAyO1xuICAgIG91dFs5XSA9IGExMjtcbiAgICBvdXRbMTFdID0gYVsxNF07XG4gICAgb3V0WzEyXSA9IGEwMztcbiAgICBvdXRbMTNdID0gYTEzO1xuICAgIG91dFsxNF0gPSBhMjM7XG4gIH0gZWxzZSB7XG4gICAgb3V0WzBdID0gYVswXTtcbiAgICBvdXRbMV0gPSBhWzRdO1xuICAgIG91dFsyXSA9IGFbOF07XG4gICAgb3V0WzNdID0gYVsxMl07XG4gICAgb3V0WzRdID0gYVsxXTtcbiAgICBvdXRbNV0gPSBhWzVdO1xuICAgIG91dFs2XSA9IGFbOV07XG4gICAgb3V0WzddID0gYVsxM107XG4gICAgb3V0WzhdID0gYVsyXTtcbiAgICBvdXRbOV0gPSBhWzZdO1xuICAgIG91dFsxMF0gPSBhWzEwXTtcbiAgICBvdXRbMTFdID0gYVsxNF07XG4gICAgb3V0WzEyXSA9IGFbM107XG4gICAgb3V0WzEzXSA9IGFbN107XG4gICAgb3V0WzE0XSA9IGFbMTFdO1xuICAgIG91dFsxNV0gPSBhWzE1XTtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogSW52ZXJ0cyBhIG1hdDRcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnQob3V0LCBhKSB7XG4gIHZhciBhMDAgPSBhWzBdLFxuICAgICAgYTAxID0gYVsxXSxcbiAgICAgIGEwMiA9IGFbMl0sXG4gICAgICBhMDMgPSBhWzNdO1xuICB2YXIgYTEwID0gYVs0XSxcbiAgICAgIGExMSA9IGFbNV0sXG4gICAgICBhMTIgPSBhWzZdLFxuICAgICAgYTEzID0gYVs3XTtcbiAgdmFyIGEyMCA9IGFbOF0sXG4gICAgICBhMjEgPSBhWzldLFxuICAgICAgYTIyID0gYVsxMF0sXG4gICAgICBhMjMgPSBhWzExXTtcbiAgdmFyIGEzMCA9IGFbMTJdLFxuICAgICAgYTMxID0gYVsxM10sXG4gICAgICBhMzIgPSBhWzE0XSxcbiAgICAgIGEzMyA9IGFbMTVdO1xuICB2YXIgYjAwID0gYTAwICogYTExIC0gYTAxICogYTEwO1xuICB2YXIgYjAxID0gYTAwICogYTEyIC0gYTAyICogYTEwO1xuICB2YXIgYjAyID0gYTAwICogYTEzIC0gYTAzICogYTEwO1xuICB2YXIgYjAzID0gYTAxICogYTEyIC0gYTAyICogYTExO1xuICB2YXIgYjA0ID0gYTAxICogYTEzIC0gYTAzICogYTExO1xuICB2YXIgYjA1ID0gYTAyICogYTEzIC0gYTAzICogYTEyO1xuICB2YXIgYjA2ID0gYTIwICogYTMxIC0gYTIxICogYTMwO1xuICB2YXIgYjA3ID0gYTIwICogYTMyIC0gYTIyICogYTMwO1xuICB2YXIgYjA4ID0gYTIwICogYTMzIC0gYTIzICogYTMwO1xuICB2YXIgYjA5ID0gYTIxICogYTMyIC0gYTIyICogYTMxO1xuICB2YXIgYjEwID0gYTIxICogYTMzIC0gYTIzICogYTMxO1xuICB2YXIgYjExID0gYTIyICogYTMzIC0gYTIzICogYTMyOyAvLyBDYWxjdWxhdGUgdGhlIGRldGVybWluYW50XG5cbiAgdmFyIGRldCA9IGIwMCAqIGIxMSAtIGIwMSAqIGIxMCArIGIwMiAqIGIwOSArIGIwMyAqIGIwOCAtIGIwNCAqIGIwNyArIGIwNSAqIGIwNjtcblxuICBpZiAoIWRldCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZGV0ID0gMS4wIC8gZGV0O1xuICBvdXRbMF0gPSAoYTExICogYjExIC0gYTEyICogYjEwICsgYTEzICogYjA5KSAqIGRldDtcbiAgb3V0WzFdID0gKGEwMiAqIGIxMCAtIGEwMSAqIGIxMSAtIGEwMyAqIGIwOSkgKiBkZXQ7XG4gIG91dFsyXSA9IChhMzEgKiBiMDUgLSBhMzIgKiBiMDQgKyBhMzMgKiBiMDMpICogZGV0O1xuICBvdXRbM10gPSAoYTIyICogYjA0IC0gYTIxICogYjA1IC0gYTIzICogYjAzKSAqIGRldDtcbiAgb3V0WzRdID0gKGExMiAqIGIwOCAtIGExMCAqIGIxMSAtIGExMyAqIGIwNykgKiBkZXQ7XG4gIG91dFs1XSA9IChhMDAgKiBiMTEgLSBhMDIgKiBiMDggKyBhMDMgKiBiMDcpICogZGV0O1xuICBvdXRbNl0gPSAoYTMyICogYjAyIC0gYTMwICogYjA1IC0gYTMzICogYjAxKSAqIGRldDtcbiAgb3V0WzddID0gKGEyMCAqIGIwNSAtIGEyMiAqIGIwMiArIGEyMyAqIGIwMSkgKiBkZXQ7XG4gIG91dFs4XSA9IChhMTAgKiBiMTAgLSBhMTEgKiBiMDggKyBhMTMgKiBiMDYpICogZGV0O1xuICBvdXRbOV0gPSAoYTAxICogYjA4IC0gYTAwICogYjEwIC0gYTAzICogYjA2KSAqIGRldDtcbiAgb3V0WzEwXSA9IChhMzAgKiBiMDQgLSBhMzEgKiBiMDIgKyBhMzMgKiBiMDApICogZGV0O1xuICBvdXRbMTFdID0gKGEyMSAqIGIwMiAtIGEyMCAqIGIwNCAtIGEyMyAqIGIwMCkgKiBkZXQ7XG4gIG91dFsxMl0gPSAoYTExICogYjA3IC0gYTEwICogYjA5IC0gYTEyICogYjA2KSAqIGRldDtcbiAgb3V0WzEzXSA9IChhMDAgKiBiMDkgLSBhMDEgKiBiMDcgKyBhMDIgKiBiMDYpICogZGV0O1xuICBvdXRbMTRdID0gKGEzMSAqIGIwMSAtIGEzMCAqIGIwMyAtIGEzMiAqIGIwMCkgKiBkZXQ7XG4gIG91dFsxNV0gPSAoYTIwICogYjAzIC0gYTIxICogYjAxICsgYTIyICogYjAwKSAqIGRldDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBhZGp1Z2F0ZSBvZiBhIG1hdDRcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGpvaW50KG91dCwgYSkge1xuICB2YXIgYTAwID0gYVswXSxcbiAgICAgIGEwMSA9IGFbMV0sXG4gICAgICBhMDIgPSBhWzJdLFxuICAgICAgYTAzID0gYVszXTtcbiAgdmFyIGExMCA9IGFbNF0sXG4gICAgICBhMTEgPSBhWzVdLFxuICAgICAgYTEyID0gYVs2XSxcbiAgICAgIGExMyA9IGFbN107XG4gIHZhciBhMjAgPSBhWzhdLFxuICAgICAgYTIxID0gYVs5XSxcbiAgICAgIGEyMiA9IGFbMTBdLFxuICAgICAgYTIzID0gYVsxMV07XG4gIHZhciBhMzAgPSBhWzEyXSxcbiAgICAgIGEzMSA9IGFbMTNdLFxuICAgICAgYTMyID0gYVsxNF0sXG4gICAgICBhMzMgPSBhWzE1XTtcbiAgb3V0WzBdID0gYTExICogKGEyMiAqIGEzMyAtIGEyMyAqIGEzMikgLSBhMjEgKiAoYTEyICogYTMzIC0gYTEzICogYTMyKSArIGEzMSAqIChhMTIgKiBhMjMgLSBhMTMgKiBhMjIpO1xuICBvdXRbMV0gPSAtKGEwMSAqIChhMjIgKiBhMzMgLSBhMjMgKiBhMzIpIC0gYTIxICogKGEwMiAqIGEzMyAtIGEwMyAqIGEzMikgKyBhMzEgKiAoYTAyICogYTIzIC0gYTAzICogYTIyKSk7XG4gIG91dFsyXSA9IGEwMSAqIChhMTIgKiBhMzMgLSBhMTMgKiBhMzIpIC0gYTExICogKGEwMiAqIGEzMyAtIGEwMyAqIGEzMikgKyBhMzEgKiAoYTAyICogYTEzIC0gYTAzICogYTEyKTtcbiAgb3V0WzNdID0gLShhMDEgKiAoYTEyICogYTIzIC0gYTEzICogYTIyKSAtIGExMSAqIChhMDIgKiBhMjMgLSBhMDMgKiBhMjIpICsgYTIxICogKGEwMiAqIGExMyAtIGEwMyAqIGExMikpO1xuICBvdXRbNF0gPSAtKGExMCAqIChhMjIgKiBhMzMgLSBhMjMgKiBhMzIpIC0gYTIwICogKGExMiAqIGEzMyAtIGExMyAqIGEzMikgKyBhMzAgKiAoYTEyICogYTIzIC0gYTEzICogYTIyKSk7XG4gIG91dFs1XSA9IGEwMCAqIChhMjIgKiBhMzMgLSBhMjMgKiBhMzIpIC0gYTIwICogKGEwMiAqIGEzMyAtIGEwMyAqIGEzMikgKyBhMzAgKiAoYTAyICogYTIzIC0gYTAzICogYTIyKTtcbiAgb3V0WzZdID0gLShhMDAgKiAoYTEyICogYTMzIC0gYTEzICogYTMyKSAtIGExMCAqIChhMDIgKiBhMzMgLSBhMDMgKiBhMzIpICsgYTMwICogKGEwMiAqIGExMyAtIGEwMyAqIGExMikpO1xuICBvdXRbN10gPSBhMDAgKiAoYTEyICogYTIzIC0gYTEzICogYTIyKSAtIGExMCAqIChhMDIgKiBhMjMgLSBhMDMgKiBhMjIpICsgYTIwICogKGEwMiAqIGExMyAtIGEwMyAqIGExMik7XG4gIG91dFs4XSA9IGExMCAqIChhMjEgKiBhMzMgLSBhMjMgKiBhMzEpIC0gYTIwICogKGExMSAqIGEzMyAtIGExMyAqIGEzMSkgKyBhMzAgKiAoYTExICogYTIzIC0gYTEzICogYTIxKTtcbiAgb3V0WzldID0gLShhMDAgKiAoYTIxICogYTMzIC0gYTIzICogYTMxKSAtIGEyMCAqIChhMDEgKiBhMzMgLSBhMDMgKiBhMzEpICsgYTMwICogKGEwMSAqIGEyMyAtIGEwMyAqIGEyMSkpO1xuICBvdXRbMTBdID0gYTAwICogKGExMSAqIGEzMyAtIGExMyAqIGEzMSkgLSBhMTAgKiAoYTAxICogYTMzIC0gYTAzICogYTMxKSArIGEzMCAqIChhMDEgKiBhMTMgLSBhMDMgKiBhMTEpO1xuICBvdXRbMTFdID0gLShhMDAgKiAoYTExICogYTIzIC0gYTEzICogYTIxKSAtIGExMCAqIChhMDEgKiBhMjMgLSBhMDMgKiBhMjEpICsgYTIwICogKGEwMSAqIGExMyAtIGEwMyAqIGExMSkpO1xuICBvdXRbMTJdID0gLShhMTAgKiAoYTIxICogYTMyIC0gYTIyICogYTMxKSAtIGEyMCAqIChhMTEgKiBhMzIgLSBhMTIgKiBhMzEpICsgYTMwICogKGExMSAqIGEyMiAtIGExMiAqIGEyMSkpO1xuICBvdXRbMTNdID0gYTAwICogKGEyMSAqIGEzMiAtIGEyMiAqIGEzMSkgLSBhMjAgKiAoYTAxICogYTMyIC0gYTAyICogYTMxKSArIGEzMCAqIChhMDEgKiBhMjIgLSBhMDIgKiBhMjEpO1xuICBvdXRbMTRdID0gLShhMDAgKiAoYTExICogYTMyIC0gYTEyICogYTMxKSAtIGExMCAqIChhMDEgKiBhMzIgLSBhMDIgKiBhMzEpICsgYTMwICogKGEwMSAqIGExMiAtIGEwMiAqIGExMSkpO1xuICBvdXRbMTVdID0gYTAwICogKGExMSAqIGEyMiAtIGExMiAqIGEyMSkgLSBhMTAgKiAoYTAxICogYTIyIC0gYTAyICogYTIxKSArIGEyMCAqIChhMDEgKiBhMTIgLSBhMDIgKiBhMTEpO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRldGVybWluYW50IG9mIGEgbWF0NFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge051bWJlcn0gZGV0ZXJtaW5hbnQgb2YgYVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGRldGVybWluYW50KGEpIHtcbiAgdmFyIGEwMCA9IGFbMF0sXG4gICAgICBhMDEgPSBhWzFdLFxuICAgICAgYTAyID0gYVsyXSxcbiAgICAgIGEwMyA9IGFbM107XG4gIHZhciBhMTAgPSBhWzRdLFxuICAgICAgYTExID0gYVs1XSxcbiAgICAgIGExMiA9IGFbNl0sXG4gICAgICBhMTMgPSBhWzddO1xuICB2YXIgYTIwID0gYVs4XSxcbiAgICAgIGEyMSA9IGFbOV0sXG4gICAgICBhMjIgPSBhWzEwXSxcbiAgICAgIGEyMyA9IGFbMTFdO1xuICB2YXIgYTMwID0gYVsxMl0sXG4gICAgICBhMzEgPSBhWzEzXSxcbiAgICAgIGEzMiA9IGFbMTRdLFxuICAgICAgYTMzID0gYVsxNV07XG4gIHZhciBiMDAgPSBhMDAgKiBhMTEgLSBhMDEgKiBhMTA7XG4gIHZhciBiMDEgPSBhMDAgKiBhMTIgLSBhMDIgKiBhMTA7XG4gIHZhciBiMDIgPSBhMDAgKiBhMTMgLSBhMDMgKiBhMTA7XG4gIHZhciBiMDMgPSBhMDEgKiBhMTIgLSBhMDIgKiBhMTE7XG4gIHZhciBiMDQgPSBhMDEgKiBhMTMgLSBhMDMgKiBhMTE7XG4gIHZhciBiMDUgPSBhMDIgKiBhMTMgLSBhMDMgKiBhMTI7XG4gIHZhciBiMDYgPSBhMjAgKiBhMzEgLSBhMjEgKiBhMzA7XG4gIHZhciBiMDcgPSBhMjAgKiBhMzIgLSBhMjIgKiBhMzA7XG4gIHZhciBiMDggPSBhMjAgKiBhMzMgLSBhMjMgKiBhMzA7XG4gIHZhciBiMDkgPSBhMjEgKiBhMzIgLSBhMjIgKiBhMzE7XG4gIHZhciBiMTAgPSBhMjEgKiBhMzMgLSBhMjMgKiBhMzE7XG4gIHZhciBiMTEgPSBhMjIgKiBhMzMgLSBhMjMgKiBhMzI7IC8vIENhbGN1bGF0ZSB0aGUgZGV0ZXJtaW5hbnRcblxuICByZXR1cm4gYjAwICogYjExIC0gYjAxICogYjEwICsgYjAyICogYjA5ICsgYjAzICogYjA4IC0gYjA0ICogYjA3ICsgYjA1ICogYjA2O1xufVxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIG1hdDRzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBseShvdXQsIGEsIGIpIHtcbiAgdmFyIGEwMCA9IGFbMF0sXG4gICAgICBhMDEgPSBhWzFdLFxuICAgICAgYTAyID0gYVsyXSxcbiAgICAgIGEwMyA9IGFbM107XG4gIHZhciBhMTAgPSBhWzRdLFxuICAgICAgYTExID0gYVs1XSxcbiAgICAgIGExMiA9IGFbNl0sXG4gICAgICBhMTMgPSBhWzddO1xuICB2YXIgYTIwID0gYVs4XSxcbiAgICAgIGEyMSA9IGFbOV0sXG4gICAgICBhMjIgPSBhWzEwXSxcbiAgICAgIGEyMyA9IGFbMTFdO1xuICB2YXIgYTMwID0gYVsxMl0sXG4gICAgICBhMzEgPSBhWzEzXSxcbiAgICAgIGEzMiA9IGFbMTRdLFxuICAgICAgYTMzID0gYVsxNV07IC8vIENhY2hlIG9ubHkgdGhlIGN1cnJlbnQgbGluZSBvZiB0aGUgc2Vjb25kIG1hdHJpeFxuXG4gIHZhciBiMCA9IGJbMF0sXG4gICAgICBiMSA9IGJbMV0sXG4gICAgICBiMiA9IGJbMl0sXG4gICAgICBiMyA9IGJbM107XG4gIG91dFswXSA9IGIwICogYTAwICsgYjEgKiBhMTAgKyBiMiAqIGEyMCArIGIzICogYTMwO1xuICBvdXRbMV0gPSBiMCAqIGEwMSArIGIxICogYTExICsgYjIgKiBhMjEgKyBiMyAqIGEzMTtcbiAgb3V0WzJdID0gYjAgKiBhMDIgKyBiMSAqIGExMiArIGIyICogYTIyICsgYjMgKiBhMzI7XG4gIG91dFszXSA9IGIwICogYTAzICsgYjEgKiBhMTMgKyBiMiAqIGEyMyArIGIzICogYTMzO1xuICBiMCA9IGJbNF07XG4gIGIxID0gYls1XTtcbiAgYjIgPSBiWzZdO1xuICBiMyA9IGJbN107XG4gIG91dFs0XSA9IGIwICogYTAwICsgYjEgKiBhMTAgKyBiMiAqIGEyMCArIGIzICogYTMwO1xuICBvdXRbNV0gPSBiMCAqIGEwMSArIGIxICogYTExICsgYjIgKiBhMjEgKyBiMyAqIGEzMTtcbiAgb3V0WzZdID0gYjAgKiBhMDIgKyBiMSAqIGExMiArIGIyICogYTIyICsgYjMgKiBhMzI7XG4gIG91dFs3XSA9IGIwICogYTAzICsgYjEgKiBhMTMgKyBiMiAqIGEyMyArIGIzICogYTMzO1xuICBiMCA9IGJbOF07XG4gIGIxID0gYls5XTtcbiAgYjIgPSBiWzEwXTtcbiAgYjMgPSBiWzExXTtcbiAgb3V0WzhdID0gYjAgKiBhMDAgKyBiMSAqIGExMCArIGIyICogYTIwICsgYjMgKiBhMzA7XG4gIG91dFs5XSA9IGIwICogYTAxICsgYjEgKiBhMTEgKyBiMiAqIGEyMSArIGIzICogYTMxO1xuICBvdXRbMTBdID0gYjAgKiBhMDIgKyBiMSAqIGExMiArIGIyICogYTIyICsgYjMgKiBhMzI7XG4gIG91dFsxMV0gPSBiMCAqIGEwMyArIGIxICogYTEzICsgYjIgKiBhMjMgKyBiMyAqIGEzMztcbiAgYjAgPSBiWzEyXTtcbiAgYjEgPSBiWzEzXTtcbiAgYjIgPSBiWzE0XTtcbiAgYjMgPSBiWzE1XTtcbiAgb3V0WzEyXSA9IGIwICogYTAwICsgYjEgKiBhMTAgKyBiMiAqIGEyMCArIGIzICogYTMwO1xuICBvdXRbMTNdID0gYjAgKiBhMDEgKyBiMSAqIGExMSArIGIyICogYTIxICsgYjMgKiBhMzE7XG4gIG91dFsxNF0gPSBiMCAqIGEwMiArIGIxICogYTEyICsgYjIgKiBhMjIgKyBiMyAqIGEzMjtcbiAgb3V0WzE1XSA9IGIwICogYTAzICsgYjEgKiBhMTMgKyBiMiAqIGEyMyArIGIzICogYTMzO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFRyYW5zbGF0ZSBhIG1hdDQgYnkgdGhlIGdpdmVuIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeCB0byB0cmFuc2xhdGVcclxuICogQHBhcmFtIHt2ZWMzfSB2IHZlY3RvciB0byB0cmFuc2xhdGUgYnlcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zbGF0ZShvdXQsIGEsIHYpIHtcbiAgdmFyIHggPSB2WzBdLFxuICAgICAgeSA9IHZbMV0sXG4gICAgICB6ID0gdlsyXTtcbiAgdmFyIGEwMCwgYTAxLCBhMDIsIGEwMztcbiAgdmFyIGExMCwgYTExLCBhMTIsIGExMztcbiAgdmFyIGEyMCwgYTIxLCBhMjIsIGEyMztcblxuICBpZiAoYSA9PT0gb3V0KSB7XG4gICAgb3V0WzEyXSA9IGFbMF0gKiB4ICsgYVs0XSAqIHkgKyBhWzhdICogeiArIGFbMTJdO1xuICAgIG91dFsxM10gPSBhWzFdICogeCArIGFbNV0gKiB5ICsgYVs5XSAqIHogKyBhWzEzXTtcbiAgICBvdXRbMTRdID0gYVsyXSAqIHggKyBhWzZdICogeSArIGFbMTBdICogeiArIGFbMTRdO1xuICAgIG91dFsxNV0gPSBhWzNdICogeCArIGFbN10gKiB5ICsgYVsxMV0gKiB6ICsgYVsxNV07XG4gIH0gZWxzZSB7XG4gICAgYTAwID0gYVswXTtcbiAgICBhMDEgPSBhWzFdO1xuICAgIGEwMiA9IGFbMl07XG4gICAgYTAzID0gYVszXTtcbiAgICBhMTAgPSBhWzRdO1xuICAgIGExMSA9IGFbNV07XG4gICAgYTEyID0gYVs2XTtcbiAgICBhMTMgPSBhWzddO1xuICAgIGEyMCA9IGFbOF07XG4gICAgYTIxID0gYVs5XTtcbiAgICBhMjIgPSBhWzEwXTtcbiAgICBhMjMgPSBhWzExXTtcbiAgICBvdXRbMF0gPSBhMDA7XG4gICAgb3V0WzFdID0gYTAxO1xuICAgIG91dFsyXSA9IGEwMjtcbiAgICBvdXRbM10gPSBhMDM7XG4gICAgb3V0WzRdID0gYTEwO1xuICAgIG91dFs1XSA9IGExMTtcbiAgICBvdXRbNl0gPSBhMTI7XG4gICAgb3V0WzddID0gYTEzO1xuICAgIG91dFs4XSA9IGEyMDtcbiAgICBvdXRbOV0gPSBhMjE7XG4gICAgb3V0WzEwXSA9IGEyMjtcbiAgICBvdXRbMTFdID0gYTIzO1xuICAgIG91dFsxMl0gPSBhMDAgKiB4ICsgYTEwICogeSArIGEyMCAqIHogKyBhWzEyXTtcbiAgICBvdXRbMTNdID0gYTAxICogeCArIGExMSAqIHkgKyBhMjEgKiB6ICsgYVsxM107XG4gICAgb3V0WzE0XSA9IGEwMiAqIHggKyBhMTIgKiB5ICsgYTIyICogeiArIGFbMTRdO1xuICAgIG91dFsxNV0gPSBhMDMgKiB4ICsgYTEzICogeSArIGEyMyAqIHogKyBhWzE1XTtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2NhbGVzIHRoZSBtYXQ0IGJ5IHRoZSBkaW1lbnNpb25zIGluIHRoZSBnaXZlbiB2ZWMzIG5vdCB1c2luZyB2ZWN0b3JpemF0aW9uXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHNjYWxlXHJcbiAqIEBwYXJhbSB7dmVjM30gdiB0aGUgdmVjMyB0byBzY2FsZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICoqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2NhbGUob3V0LCBhLCB2KSB7XG4gIHZhciB4ID0gdlswXSxcbiAgICAgIHkgPSB2WzFdLFxuICAgICAgeiA9IHZbMl07XG4gIG91dFswXSA9IGFbMF0gKiB4O1xuICBvdXRbMV0gPSBhWzFdICogeDtcbiAgb3V0WzJdID0gYVsyXSAqIHg7XG4gIG91dFszXSA9IGFbM10gKiB4O1xuICBvdXRbNF0gPSBhWzRdICogeTtcbiAgb3V0WzVdID0gYVs1XSAqIHk7XG4gIG91dFs2XSA9IGFbNl0gKiB5O1xuICBvdXRbN10gPSBhWzddICogeTtcbiAgb3V0WzhdID0gYVs4XSAqIHo7XG4gIG91dFs5XSA9IGFbOV0gKiB6O1xuICBvdXRbMTBdID0gYVsxMF0gKiB6O1xuICBvdXRbMTFdID0gYVsxMV0gKiB6O1xuICBvdXRbMTJdID0gYVsxMl07XG4gIG91dFsxM10gPSBhWzEzXTtcbiAgb3V0WzE0XSA9IGFbMTRdO1xuICBvdXRbMTVdID0gYVsxNV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlcyBhIG1hdDQgYnkgdGhlIGdpdmVuIGFuZ2xlIGFyb3VuZCB0aGUgZ2l2ZW4gYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHBhcmFtIHt2ZWMzfSBheGlzIHRoZSBheGlzIHRvIHJvdGF0ZSBhcm91bmRcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZShvdXQsIGEsIHJhZCwgYXhpcykge1xuICB2YXIgeCA9IGF4aXNbMF0sXG4gICAgICB5ID0gYXhpc1sxXSxcbiAgICAgIHogPSBheGlzWzJdO1xuICB2YXIgbGVuID0gTWF0aC5oeXBvdCh4LCB5LCB6KTtcbiAgdmFyIHMsIGMsIHQ7XG4gIHZhciBhMDAsIGEwMSwgYTAyLCBhMDM7XG4gIHZhciBhMTAsIGExMSwgYTEyLCBhMTM7XG4gIHZhciBhMjAsIGEyMSwgYTIyLCBhMjM7XG4gIHZhciBiMDAsIGIwMSwgYjAyO1xuICB2YXIgYjEwLCBiMTEsIGIxMjtcbiAgdmFyIGIyMCwgYjIxLCBiMjI7XG5cbiAgaWYgKGxlbiA8IGdsTWF0cml4LkVQU0lMT04pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGxlbiA9IDEgLyBsZW47XG4gIHggKj0gbGVuO1xuICB5ICo9IGxlbjtcbiAgeiAqPSBsZW47XG4gIHMgPSBNYXRoLnNpbihyYWQpO1xuICBjID0gTWF0aC5jb3MocmFkKTtcbiAgdCA9IDEgLSBjO1xuICBhMDAgPSBhWzBdO1xuICBhMDEgPSBhWzFdO1xuICBhMDIgPSBhWzJdO1xuICBhMDMgPSBhWzNdO1xuICBhMTAgPSBhWzRdO1xuICBhMTEgPSBhWzVdO1xuICBhMTIgPSBhWzZdO1xuICBhMTMgPSBhWzddO1xuICBhMjAgPSBhWzhdO1xuICBhMjEgPSBhWzldO1xuICBhMjIgPSBhWzEwXTtcbiAgYTIzID0gYVsxMV07IC8vIENvbnN0cnVjdCB0aGUgZWxlbWVudHMgb2YgdGhlIHJvdGF0aW9uIG1hdHJpeFxuXG4gIGIwMCA9IHggKiB4ICogdCArIGM7XG4gIGIwMSA9IHkgKiB4ICogdCArIHogKiBzO1xuICBiMDIgPSB6ICogeCAqIHQgLSB5ICogcztcbiAgYjEwID0geCAqIHkgKiB0IC0geiAqIHM7XG4gIGIxMSA9IHkgKiB5ICogdCArIGM7XG4gIGIxMiA9IHogKiB5ICogdCArIHggKiBzO1xuICBiMjAgPSB4ICogeiAqIHQgKyB5ICogcztcbiAgYjIxID0geSAqIHogKiB0IC0geCAqIHM7XG4gIGIyMiA9IHogKiB6ICogdCArIGM7IC8vIFBlcmZvcm0gcm90YXRpb24tc3BlY2lmaWMgbWF0cml4IG11bHRpcGxpY2F0aW9uXG5cbiAgb3V0WzBdID0gYTAwICogYjAwICsgYTEwICogYjAxICsgYTIwICogYjAyO1xuICBvdXRbMV0gPSBhMDEgKiBiMDAgKyBhMTEgKiBiMDEgKyBhMjEgKiBiMDI7XG4gIG91dFsyXSA9IGEwMiAqIGIwMCArIGExMiAqIGIwMSArIGEyMiAqIGIwMjtcbiAgb3V0WzNdID0gYTAzICogYjAwICsgYTEzICogYjAxICsgYTIzICogYjAyO1xuICBvdXRbNF0gPSBhMDAgKiBiMTAgKyBhMTAgKiBiMTEgKyBhMjAgKiBiMTI7XG4gIG91dFs1XSA9IGEwMSAqIGIxMCArIGExMSAqIGIxMSArIGEyMSAqIGIxMjtcbiAgb3V0WzZdID0gYTAyICogYjEwICsgYTEyICogYjExICsgYTIyICogYjEyO1xuICBvdXRbN10gPSBhMDMgKiBiMTAgKyBhMTMgKiBiMTEgKyBhMjMgKiBiMTI7XG4gIG91dFs4XSA9IGEwMCAqIGIyMCArIGExMCAqIGIyMSArIGEyMCAqIGIyMjtcbiAgb3V0WzldID0gYTAxICogYjIwICsgYTExICogYjIxICsgYTIxICogYjIyO1xuICBvdXRbMTBdID0gYTAyICogYjIwICsgYTEyICogYjIxICsgYTIyICogYjIyO1xuICBvdXRbMTFdID0gYTAzICogYjIwICsgYTEzICogYjIxICsgYTIzICogYjIyO1xuXG4gIGlmIChhICE9PSBvdXQpIHtcbiAgICAvLyBJZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkaWZmZXIsIGNvcHkgdGhlIHVuY2hhbmdlZCBsYXN0IHJvd1xuICAgIG91dFsxMl0gPSBhWzEyXTtcbiAgICBvdXRbMTNdID0gYVsxM107XG4gICAgb3V0WzE0XSA9IGFbMTRdO1xuICAgIG91dFsxNV0gPSBhWzE1XTtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlcyBhIG1hdHJpeCBieSB0aGUgZ2l2ZW4gYW5nbGUgYXJvdW5kIHRoZSBYIGF4aXNcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGVYKG91dCwgYSwgcmFkKSB7XG4gIHZhciBzID0gTWF0aC5zaW4ocmFkKTtcbiAgdmFyIGMgPSBNYXRoLmNvcyhyYWQpO1xuICB2YXIgYTEwID0gYVs0XTtcbiAgdmFyIGExMSA9IGFbNV07XG4gIHZhciBhMTIgPSBhWzZdO1xuICB2YXIgYTEzID0gYVs3XTtcbiAgdmFyIGEyMCA9IGFbOF07XG4gIHZhciBhMjEgPSBhWzldO1xuICB2YXIgYTIyID0gYVsxMF07XG4gIHZhciBhMjMgPSBhWzExXTtcblxuICBpZiAoYSAhPT0gb3V0KSB7XG4gICAgLy8gSWYgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZGlmZmVyLCBjb3B5IHRoZSB1bmNoYW5nZWQgcm93c1xuICAgIG91dFswXSA9IGFbMF07XG4gICAgb3V0WzFdID0gYVsxXTtcbiAgICBvdXRbMl0gPSBhWzJdO1xuICAgIG91dFszXSA9IGFbM107XG4gICAgb3V0WzEyXSA9IGFbMTJdO1xuICAgIG91dFsxM10gPSBhWzEzXTtcbiAgICBvdXRbMTRdID0gYVsxNF07XG4gICAgb3V0WzE1XSA9IGFbMTVdO1xuICB9IC8vIFBlcmZvcm0gYXhpcy1zcGVjaWZpYyBtYXRyaXggbXVsdGlwbGljYXRpb25cblxuXG4gIG91dFs0XSA9IGExMCAqIGMgKyBhMjAgKiBzO1xuICBvdXRbNV0gPSBhMTEgKiBjICsgYTIxICogcztcbiAgb3V0WzZdID0gYTEyICogYyArIGEyMiAqIHM7XG4gIG91dFs3XSA9IGExMyAqIGMgKyBhMjMgKiBzO1xuICBvdXRbOF0gPSBhMjAgKiBjIC0gYTEwICogcztcbiAgb3V0WzldID0gYTIxICogYyAtIGExMSAqIHM7XG4gIG91dFsxMF0gPSBhMjIgKiBjIC0gYTEyICogcztcbiAgb3V0WzExXSA9IGEyMyAqIGMgLSBhMTMgKiBzO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBtYXRyaXggYnkgdGhlIGdpdmVuIGFuZ2xlIGFyb3VuZCB0aGUgWSBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlWShvdXQsIGEsIHJhZCkge1xuICB2YXIgcyA9IE1hdGguc2luKHJhZCk7XG4gIHZhciBjID0gTWF0aC5jb3MocmFkKTtcbiAgdmFyIGEwMCA9IGFbMF07XG4gIHZhciBhMDEgPSBhWzFdO1xuICB2YXIgYTAyID0gYVsyXTtcbiAgdmFyIGEwMyA9IGFbM107XG4gIHZhciBhMjAgPSBhWzhdO1xuICB2YXIgYTIxID0gYVs5XTtcbiAgdmFyIGEyMiA9IGFbMTBdO1xuICB2YXIgYTIzID0gYVsxMV07XG5cbiAgaWYgKGEgIT09IG91dCkge1xuICAgIC8vIElmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRpZmZlciwgY29weSB0aGUgdW5jaGFuZ2VkIHJvd3NcbiAgICBvdXRbNF0gPSBhWzRdO1xuICAgIG91dFs1XSA9IGFbNV07XG4gICAgb3V0WzZdID0gYVs2XTtcbiAgICBvdXRbN10gPSBhWzddO1xuICAgIG91dFsxMl0gPSBhWzEyXTtcbiAgICBvdXRbMTNdID0gYVsxM107XG4gICAgb3V0WzE0XSA9IGFbMTRdO1xuICAgIG91dFsxNV0gPSBhWzE1XTtcbiAgfSAvLyBQZXJmb3JtIGF4aXMtc3BlY2lmaWMgbWF0cml4IG11bHRpcGxpY2F0aW9uXG5cblxuICBvdXRbMF0gPSBhMDAgKiBjIC0gYTIwICogcztcbiAgb3V0WzFdID0gYTAxICogYyAtIGEyMSAqIHM7XG4gIG91dFsyXSA9IGEwMiAqIGMgLSBhMjIgKiBzO1xuICBvdXRbM10gPSBhMDMgKiBjIC0gYTIzICogcztcbiAgb3V0WzhdID0gYTAwICogcyArIGEyMCAqIGM7XG4gIG91dFs5XSA9IGEwMSAqIHMgKyBhMjEgKiBjO1xuICBvdXRbMTBdID0gYTAyICogcyArIGEyMiAqIGM7XG4gIG91dFsxMV0gPSBhMDMgKiBzICsgYTIzICogYztcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGVzIGEgbWF0cml4IGJ5IHRoZSBnaXZlbiBhbmdsZSBhcm91bmQgdGhlIFogYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZVoob3V0LCBhLCByYWQpIHtcbiAgdmFyIHMgPSBNYXRoLnNpbihyYWQpO1xuICB2YXIgYyA9IE1hdGguY29zKHJhZCk7XG4gIHZhciBhMDAgPSBhWzBdO1xuICB2YXIgYTAxID0gYVsxXTtcbiAgdmFyIGEwMiA9IGFbMl07XG4gIHZhciBhMDMgPSBhWzNdO1xuICB2YXIgYTEwID0gYVs0XTtcbiAgdmFyIGExMSA9IGFbNV07XG4gIHZhciBhMTIgPSBhWzZdO1xuICB2YXIgYTEzID0gYVs3XTtcblxuICBpZiAoYSAhPT0gb3V0KSB7XG4gICAgLy8gSWYgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZGlmZmVyLCBjb3B5IHRoZSB1bmNoYW5nZWQgbGFzdCByb3dcbiAgICBvdXRbOF0gPSBhWzhdO1xuICAgIG91dFs5XSA9IGFbOV07XG4gICAgb3V0WzEwXSA9IGFbMTBdO1xuICAgIG91dFsxMV0gPSBhWzExXTtcbiAgICBvdXRbMTJdID0gYVsxMl07XG4gICAgb3V0WzEzXSA9IGFbMTNdO1xuICAgIG91dFsxNF0gPSBhWzE0XTtcbiAgICBvdXRbMTVdID0gYVsxNV07XG4gIH0gLy8gUGVyZm9ybSBheGlzLXNwZWNpZmljIG1hdHJpeCBtdWx0aXBsaWNhdGlvblxuXG5cbiAgb3V0WzBdID0gYTAwICogYyArIGExMCAqIHM7XG4gIG91dFsxXSA9IGEwMSAqIGMgKyBhMTEgKiBzO1xuICBvdXRbMl0gPSBhMDIgKiBjICsgYTEyICogcztcbiAgb3V0WzNdID0gYTAzICogYyArIGExMyAqIHM7XG4gIG91dFs0XSA9IGExMCAqIGMgLSBhMDAgKiBzO1xuICBvdXRbNV0gPSBhMTEgKiBjIC0gYTAxICogcztcbiAgb3V0WzZdID0gYTEyICogYyAtIGEwMiAqIHM7XG4gIG91dFs3XSA9IGExMyAqIGMgLSBhMDMgKiBzO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtYXRyaXggZnJvbSBhIHZlY3RvciB0cmFuc2xhdGlvblxyXG4gKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGJ1dCBtdWNoIGZhc3RlciB0aGFuKTpcclxuICpcclxuICogICAgIG1hdDQuaWRlbnRpdHkoZGVzdCk7XHJcbiAqICAgICBtYXQ0LnRyYW5zbGF0ZShkZXN0LCBkZXN0LCB2ZWMpO1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7dmVjM30gdiBUcmFuc2xhdGlvbiB2ZWN0b3JcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21UcmFuc2xhdGlvbihvdXQsIHYpIHtcbiAgb3V0WzBdID0gMTtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gMDtcbiAgb3V0WzVdID0gMTtcbiAgb3V0WzZdID0gMDtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gMDtcbiAgb3V0WzldID0gMDtcbiAgb3V0WzEwXSA9IDE7XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gdlswXTtcbiAgb3V0WzEzXSA9IHZbMV07XG4gIG91dFsxNF0gPSB2WzJdO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gYSB2ZWN0b3Igc2NhbGluZ1xyXG4gKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGJ1dCBtdWNoIGZhc3RlciB0aGFuKTpcclxuICpcclxuICogICAgIG1hdDQuaWRlbnRpdHkoZGVzdCk7XHJcbiAqICAgICBtYXQ0LnNjYWxlKGRlc3QsIGRlc3QsIHZlYyk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHt2ZWMzfSB2IFNjYWxpbmcgdmVjdG9yXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tU2NhbGluZyhvdXQsIHYpIHtcbiAgb3V0WzBdID0gdlswXTtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gMDtcbiAgb3V0WzVdID0gdlsxXTtcbiAgb3V0WzZdID0gMDtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gMDtcbiAgb3V0WzldID0gMDtcbiAgb3V0WzEwXSA9IHZbMl07XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gMDtcbiAgb3V0WzEzXSA9IDA7XG4gIG91dFsxNF0gPSAwO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gYSBnaXZlbiBhbmdsZSBhcm91bmQgYSBnaXZlbiBheGlzXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0NC5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDQucm90YXRlKGRlc3QsIGRlc3QsIHJhZCwgYXhpcyk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHBhcmFtIHt2ZWMzfSBheGlzIHRoZSBheGlzIHRvIHJvdGF0ZSBhcm91bmRcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21Sb3RhdGlvbihvdXQsIHJhZCwgYXhpcykge1xuICB2YXIgeCA9IGF4aXNbMF0sXG4gICAgICB5ID0gYXhpc1sxXSxcbiAgICAgIHogPSBheGlzWzJdO1xuICB2YXIgbGVuID0gTWF0aC5oeXBvdCh4LCB5LCB6KTtcbiAgdmFyIHMsIGMsIHQ7XG5cbiAgaWYgKGxlbiA8IGdsTWF0cml4LkVQU0lMT04pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGxlbiA9IDEgLyBsZW47XG4gIHggKj0gbGVuO1xuICB5ICo9IGxlbjtcbiAgeiAqPSBsZW47XG4gIHMgPSBNYXRoLnNpbihyYWQpO1xuICBjID0gTWF0aC5jb3MocmFkKTtcbiAgdCA9IDEgLSBjOyAvLyBQZXJmb3JtIHJvdGF0aW9uLXNwZWNpZmljIG1hdHJpeCBtdWx0aXBsaWNhdGlvblxuXG4gIG91dFswXSA9IHggKiB4ICogdCArIGM7XG4gIG91dFsxXSA9IHkgKiB4ICogdCArIHogKiBzO1xuICBvdXRbMl0gPSB6ICogeCAqIHQgLSB5ICogcztcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0geCAqIHkgKiB0IC0geiAqIHM7XG4gIG91dFs1XSA9IHkgKiB5ICogdCArIGM7XG4gIG91dFs2XSA9IHogKiB5ICogdCArIHggKiBzO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSB4ICogeiAqIHQgKyB5ICogcztcbiAgb3V0WzldID0geSAqIHogKiB0IC0geCAqIHM7XG4gIG91dFsxMF0gPSB6ICogeiAqIHQgKyBjO1xuICBvdXRbMTFdID0gMDtcbiAgb3V0WzEyXSA9IDA7XG4gIG91dFsxM10gPSAwO1xuICBvdXRbMTRdID0gMDtcbiAgb3V0WzE1XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIHRoZSBnaXZlbiBhbmdsZSBhcm91bmQgdGhlIFggYXhpc1xyXG4gKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGJ1dCBtdWNoIGZhc3RlciB0aGFuKTpcclxuICpcclxuICogICAgIG1hdDQuaWRlbnRpdHkoZGVzdCk7XHJcbiAqICAgICBtYXQ0LnJvdGF0ZVgoZGVzdCwgZGVzdCwgcmFkKTtcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVhSb3RhdGlvbihvdXQsIHJhZCkge1xuICB2YXIgcyA9IE1hdGguc2luKHJhZCk7XG4gIHZhciBjID0gTWF0aC5jb3MocmFkKTsgLy8gUGVyZm9ybSBheGlzLXNwZWNpZmljIG1hdHJpeCBtdWx0aXBsaWNhdGlvblxuXG4gIG91dFswXSA9IDE7XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IDA7XG4gIG91dFs1XSA9IGM7XG4gIG91dFs2XSA9IHM7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9IDA7XG4gIG91dFs5XSA9IC1zO1xuICBvdXRbMTBdID0gYztcbiAgb3V0WzExXSA9IDA7XG4gIG91dFsxMl0gPSAwO1xuICBvdXRbMTNdID0gMDtcbiAgb3V0WzE0XSA9IDA7XG4gIG91dFsxNV0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtYXRyaXggZnJvbSB0aGUgZ2l2ZW4gYW5nbGUgYXJvdW5kIHRoZSBZIGF4aXNcclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQ0LmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0NC5yb3RhdGVZKGRlc3QsIGRlc3QsIHJhZCk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21ZUm90YXRpb24ob3V0LCByYWQpIHtcbiAgdmFyIHMgPSBNYXRoLnNpbihyYWQpO1xuICB2YXIgYyA9IE1hdGguY29zKHJhZCk7IC8vIFBlcmZvcm0gYXhpcy1zcGVjaWZpYyBtYXRyaXggbXVsdGlwbGljYXRpb25cblxuICBvdXRbMF0gPSBjO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAtcztcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gMDtcbiAgb3V0WzVdID0gMTtcbiAgb3V0WzZdID0gMDtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gcztcbiAgb3V0WzldID0gMDtcbiAgb3V0WzEwXSA9IGM7XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gMDtcbiAgb3V0WzEzXSA9IDA7XG4gIG91dFsxNF0gPSAwO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gdGhlIGdpdmVuIGFuZ2xlIGFyb3VuZCB0aGUgWiBheGlzXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0NC5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDQucm90YXRlWihkZXN0LCBkZXN0LCByYWQpO1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tWlJvdGF0aW9uKG91dCwgcmFkKSB7XG4gIHZhciBzID0gTWF0aC5zaW4ocmFkKTtcbiAgdmFyIGMgPSBNYXRoLmNvcyhyYWQpOyAvLyBQZXJmb3JtIGF4aXMtc3BlY2lmaWMgbWF0cml4IG11bHRpcGxpY2F0aW9uXG5cbiAgb3V0WzBdID0gYztcbiAgb3V0WzFdID0gcztcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gLXM7XG4gIG91dFs1XSA9IGM7XG4gIG91dFs2XSA9IDA7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9IDA7XG4gIG91dFs5XSA9IDA7XG4gIG91dFsxMF0gPSAxO1xuICBvdXRbMTFdID0gMDtcbiAgb3V0WzEyXSA9IDA7XG4gIG91dFsxM10gPSAwO1xuICBvdXRbMTRdID0gMDtcbiAgb3V0WzE1XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIGEgcXVhdGVybmlvbiByb3RhdGlvbiBhbmQgdmVjdG9yIHRyYW5zbGF0aW9uXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0NC5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDQudHJhbnNsYXRlKGRlc3QsIHZlYyk7XHJcbiAqICAgICBsZXQgcXVhdE1hdCA9IG1hdDQuY3JlYXRlKCk7XHJcbiAqICAgICBxdWF0NC50b01hdDQocXVhdCwgcXVhdE1hdCk7XHJcbiAqICAgICBtYXQ0Lm11bHRpcGx5KGRlc3QsIHF1YXRNYXQpO1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7cXVhdDR9IHEgUm90YXRpb24gcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3ZlYzN9IHYgVHJhbnNsYXRpb24gdmVjdG9yXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUm90YXRpb25UcmFuc2xhdGlvbihvdXQsIHEsIHYpIHtcbiAgLy8gUXVhdGVybmlvbiBtYXRoXG4gIHZhciB4ID0gcVswXSxcbiAgICAgIHkgPSBxWzFdLFxuICAgICAgeiA9IHFbMl0sXG4gICAgICB3ID0gcVszXTtcbiAgdmFyIHgyID0geCArIHg7XG4gIHZhciB5MiA9IHkgKyB5O1xuICB2YXIgejIgPSB6ICsgejtcbiAgdmFyIHh4ID0geCAqIHgyO1xuICB2YXIgeHkgPSB4ICogeTI7XG4gIHZhciB4eiA9IHggKiB6MjtcbiAgdmFyIHl5ID0geSAqIHkyO1xuICB2YXIgeXogPSB5ICogejI7XG4gIHZhciB6eiA9IHogKiB6MjtcbiAgdmFyIHd4ID0gdyAqIHgyO1xuICB2YXIgd3kgPSB3ICogeTI7XG4gIHZhciB3eiA9IHcgKiB6MjtcbiAgb3V0WzBdID0gMSAtICh5eSArIHp6KTtcbiAgb3V0WzFdID0geHkgKyB3ejtcbiAgb3V0WzJdID0geHogLSB3eTtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0geHkgLSB3ejtcbiAgb3V0WzVdID0gMSAtICh4eCArIHp6KTtcbiAgb3V0WzZdID0geXogKyB3eDtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0geHogKyB3eTtcbiAgb3V0WzldID0geXogLSB3eDtcbiAgb3V0WzEwXSA9IDEgLSAoeHggKyB5eSk7XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gdlswXTtcbiAgb3V0WzEzXSA9IHZbMV07XG4gIG91dFsxNF0gPSB2WzJdO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IG1hdDQgZnJvbSBhIGR1YWwgcXVhdC5cclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgTWF0cml4XHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgRHVhbCBRdWF0ZXJuaW9uXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBtYXQ0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVF1YXQyKG91dCwgYSkge1xuICB2YXIgdHJhbnNsYXRpb24gPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSgzKTtcbiAgdmFyIGJ4ID0gLWFbMF0sXG4gICAgICBieSA9IC1hWzFdLFxuICAgICAgYnogPSAtYVsyXSxcbiAgICAgIGJ3ID0gYVszXSxcbiAgICAgIGF4ID0gYVs0XSxcbiAgICAgIGF5ID0gYVs1XSxcbiAgICAgIGF6ID0gYVs2XSxcbiAgICAgIGF3ID0gYVs3XTtcbiAgdmFyIG1hZ25pdHVkZSA9IGJ4ICogYnggKyBieSAqIGJ5ICsgYnogKiBieiArIGJ3ICogYnc7IC8vT25seSBzY2FsZSBpZiBpdCBtYWtlcyBzZW5zZVxuXG4gIGlmIChtYWduaXR1ZGUgPiAwKSB7XG4gICAgdHJhbnNsYXRpb25bMF0gPSAoYXggKiBidyArIGF3ICogYnggKyBheSAqIGJ6IC0gYXogKiBieSkgKiAyIC8gbWFnbml0dWRlO1xuICAgIHRyYW5zbGF0aW9uWzFdID0gKGF5ICogYncgKyBhdyAqIGJ5ICsgYXogKiBieCAtIGF4ICogYnopICogMiAvIG1hZ25pdHVkZTtcbiAgICB0cmFuc2xhdGlvblsyXSA9IChheiAqIGJ3ICsgYXcgKiBieiArIGF4ICogYnkgLSBheSAqIGJ4KSAqIDIgLyBtYWduaXR1ZGU7XG4gIH0gZWxzZSB7XG4gICAgdHJhbnNsYXRpb25bMF0gPSAoYXggKiBidyArIGF3ICogYnggKyBheSAqIGJ6IC0gYXogKiBieSkgKiAyO1xuICAgIHRyYW5zbGF0aW9uWzFdID0gKGF5ICogYncgKyBhdyAqIGJ5ICsgYXogKiBieCAtIGF4ICogYnopICogMjtcbiAgICB0cmFuc2xhdGlvblsyXSA9IChheiAqIGJ3ICsgYXcgKiBieiArIGF4ICogYnkgLSBheSAqIGJ4KSAqIDI7XG4gIH1cblxuICBmcm9tUm90YXRpb25UcmFuc2xhdGlvbihvdXQsIGEsIHRyYW5zbGF0aW9uKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSB0cmFuc2xhdGlvbiB2ZWN0b3IgY29tcG9uZW50IG9mIGEgdHJhbnNmb3JtYXRpb25cclxuICogIG1hdHJpeC4gSWYgYSBtYXRyaXggaXMgYnVpbHQgd2l0aCBmcm9tUm90YXRpb25UcmFuc2xhdGlvbixcclxuICogIHRoZSByZXR1cm5lZCB2ZWN0b3Igd2lsbCBiZSB0aGUgc2FtZSBhcyB0aGUgdHJhbnNsYXRpb24gdmVjdG9yXHJcbiAqICBvcmlnaW5hbGx5IHN1cHBsaWVkLlxyXG4gKiBAcGFyYW0gIHt2ZWMzfSBvdXQgVmVjdG9yIHRvIHJlY2VpdmUgdHJhbnNsYXRpb24gY29tcG9uZW50XHJcbiAqIEBwYXJhbSAge21hdDR9IG1hdCBNYXRyaXggdG8gYmUgZGVjb21wb3NlZCAoaW5wdXQpXHJcbiAqIEByZXR1cm4ge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRyYW5zbGF0aW9uKG91dCwgbWF0KSB7XG4gIG91dFswXSA9IG1hdFsxMl07XG4gIG91dFsxXSA9IG1hdFsxM107XG4gIG91dFsyXSA9IG1hdFsxNF07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyB0aGUgc2NhbGluZyBmYWN0b3IgY29tcG9uZW50IG9mIGEgdHJhbnNmb3JtYXRpb25cclxuICogIG1hdHJpeC4gSWYgYSBtYXRyaXggaXMgYnVpbHQgd2l0aCBmcm9tUm90YXRpb25UcmFuc2xhdGlvblNjYWxlXHJcbiAqICB3aXRoIGEgbm9ybWFsaXplZCBRdWF0ZXJuaW9uIHBhcmFtdGVyLCB0aGUgcmV0dXJuZWQgdmVjdG9yIHdpbGwgYmVcclxuICogIHRoZSBzYW1lIGFzIHRoZSBzY2FsaW5nIHZlY3RvclxyXG4gKiAgb3JpZ2luYWxseSBzdXBwbGllZC5cclxuICogQHBhcmFtICB7dmVjM30gb3V0IFZlY3RvciB0byByZWNlaXZlIHNjYWxpbmcgZmFjdG9yIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0gIHttYXQ0fSBtYXQgTWF0cml4IHRvIGJlIGRlY29tcG9zZWQgKGlucHV0KVxyXG4gKiBAcmV0dXJuIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2FsaW5nKG91dCwgbWF0KSB7XG4gIHZhciBtMTEgPSBtYXRbMF07XG4gIHZhciBtMTIgPSBtYXRbMV07XG4gIHZhciBtMTMgPSBtYXRbMl07XG4gIHZhciBtMjEgPSBtYXRbNF07XG4gIHZhciBtMjIgPSBtYXRbNV07XG4gIHZhciBtMjMgPSBtYXRbNl07XG4gIHZhciBtMzEgPSBtYXRbOF07XG4gIHZhciBtMzIgPSBtYXRbOV07XG4gIHZhciBtMzMgPSBtYXRbMTBdO1xuICBvdXRbMF0gPSBNYXRoLmh5cG90KG0xMSwgbTEyLCBtMTMpO1xuICBvdXRbMV0gPSBNYXRoLmh5cG90KG0yMSwgbTIyLCBtMjMpO1xuICBvdXRbMl0gPSBNYXRoLmh5cG90KG0zMSwgbTMyLCBtMzMpO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgYSBxdWF0ZXJuaW9uIHJlcHJlc2VudGluZyB0aGUgcm90YXRpb25hbCBjb21wb25lbnRcclxuICogIG9mIGEgdHJhbnNmb3JtYXRpb24gbWF0cml4LiBJZiBhIG1hdHJpeCBpcyBidWlsdCB3aXRoXHJcbiAqICBmcm9tUm90YXRpb25UcmFuc2xhdGlvbiwgdGhlIHJldHVybmVkIHF1YXRlcm5pb24gd2lsbCBiZSB0aGVcclxuICogIHNhbWUgYXMgdGhlIHF1YXRlcm5pb24gb3JpZ2luYWxseSBzdXBwbGllZC5cclxuICogQHBhcmFtIHtxdWF0fSBvdXQgUXVhdGVybmlvbiB0byByZWNlaXZlIHRoZSByb3RhdGlvbiBjb21wb25lbnRcclxuICogQHBhcmFtIHttYXQ0fSBtYXQgTWF0cml4IHRvIGJlIGRlY29tcG9zZWQgKGlucHV0KVxyXG4gKiBAcmV0dXJuIHtxdWF0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSb3RhdGlvbihvdXQsIG1hdCkge1xuICB2YXIgc2NhbGluZyA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDMpO1xuICBnZXRTY2FsaW5nKHNjYWxpbmcsIG1hdCk7XG4gIHZhciBpczEgPSAxIC8gc2NhbGluZ1swXTtcbiAgdmFyIGlzMiA9IDEgLyBzY2FsaW5nWzFdO1xuICB2YXIgaXMzID0gMSAvIHNjYWxpbmdbMl07XG4gIHZhciBzbTExID0gbWF0WzBdICogaXMxO1xuICB2YXIgc20xMiA9IG1hdFsxXSAqIGlzMjtcbiAgdmFyIHNtMTMgPSBtYXRbMl0gKiBpczM7XG4gIHZhciBzbTIxID0gbWF0WzRdICogaXMxO1xuICB2YXIgc20yMiA9IG1hdFs1XSAqIGlzMjtcbiAgdmFyIHNtMjMgPSBtYXRbNl0gKiBpczM7XG4gIHZhciBzbTMxID0gbWF0WzhdICogaXMxO1xuICB2YXIgc20zMiA9IG1hdFs5XSAqIGlzMjtcbiAgdmFyIHNtMzMgPSBtYXRbMTBdICogaXMzO1xuICB2YXIgdHJhY2UgPSBzbTExICsgc20yMiArIHNtMzM7XG4gIHZhciBTID0gMDtcblxuICBpZiAodHJhY2UgPiAwKSB7XG4gICAgUyA9IE1hdGguc3FydCh0cmFjZSArIDEuMCkgKiAyO1xuICAgIG91dFszXSA9IDAuMjUgKiBTO1xuICAgIG91dFswXSA9IChzbTIzIC0gc20zMikgLyBTO1xuICAgIG91dFsxXSA9IChzbTMxIC0gc20xMykgLyBTO1xuICAgIG91dFsyXSA9IChzbTEyIC0gc20yMSkgLyBTO1xuICB9IGVsc2UgaWYgKHNtMTEgPiBzbTIyICYmIHNtMTEgPiBzbTMzKSB7XG4gICAgUyA9IE1hdGguc3FydCgxLjAgKyBzbTExIC0gc20yMiAtIHNtMzMpICogMjtcbiAgICBvdXRbM10gPSAoc20yMyAtIHNtMzIpIC8gUztcbiAgICBvdXRbMF0gPSAwLjI1ICogUztcbiAgICBvdXRbMV0gPSAoc20xMiArIHNtMjEpIC8gUztcbiAgICBvdXRbMl0gPSAoc20zMSArIHNtMTMpIC8gUztcbiAgfSBlbHNlIGlmIChzbTIyID4gc20zMykge1xuICAgIFMgPSBNYXRoLnNxcnQoMS4wICsgc20yMiAtIHNtMTEgLSBzbTMzKSAqIDI7XG4gICAgb3V0WzNdID0gKHNtMzEgLSBzbTEzKSAvIFM7XG4gICAgb3V0WzBdID0gKHNtMTIgKyBzbTIxKSAvIFM7XG4gICAgb3V0WzFdID0gMC4yNSAqIFM7XG4gICAgb3V0WzJdID0gKHNtMjMgKyBzbTMyKSAvIFM7XG4gIH0gZWxzZSB7XG4gICAgUyA9IE1hdGguc3FydCgxLjAgKyBzbTMzIC0gc20xMSAtIHNtMjIpICogMjtcbiAgICBvdXRbM10gPSAoc20xMiAtIHNtMjEpIC8gUztcbiAgICBvdXRbMF0gPSAoc20zMSArIHNtMTMpIC8gUztcbiAgICBvdXRbMV0gPSAoc20yMyArIHNtMzIpIC8gUztcbiAgICBvdXRbMl0gPSAwLjI1ICogUztcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIGEgcXVhdGVybmlvbiByb3RhdGlvbiwgdmVjdG9yIHRyYW5zbGF0aW9uIGFuZCB2ZWN0b3Igc2NhbGVcclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQ0LmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0NC50cmFuc2xhdGUoZGVzdCwgdmVjKTtcclxuICogICAgIGxldCBxdWF0TWF0ID0gbWF0NC5jcmVhdGUoKTtcclxuICogICAgIHF1YXQ0LnRvTWF0NChxdWF0LCBxdWF0TWF0KTtcclxuICogICAgIG1hdDQubXVsdGlwbHkoZGVzdCwgcXVhdE1hdCk7XHJcbiAqICAgICBtYXQ0LnNjYWxlKGRlc3QsIHNjYWxlKVxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7cXVhdDR9IHEgUm90YXRpb24gcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3ZlYzN9IHYgVHJhbnNsYXRpb24gdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gcyBTY2FsaW5nIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVJvdGF0aW9uVHJhbnNsYXRpb25TY2FsZShvdXQsIHEsIHYsIHMpIHtcbiAgLy8gUXVhdGVybmlvbiBtYXRoXG4gIHZhciB4ID0gcVswXSxcbiAgICAgIHkgPSBxWzFdLFxuICAgICAgeiA9IHFbMl0sXG4gICAgICB3ID0gcVszXTtcbiAgdmFyIHgyID0geCArIHg7XG4gIHZhciB5MiA9IHkgKyB5O1xuICB2YXIgejIgPSB6ICsgejtcbiAgdmFyIHh4ID0geCAqIHgyO1xuICB2YXIgeHkgPSB4ICogeTI7XG4gIHZhciB4eiA9IHggKiB6MjtcbiAgdmFyIHl5ID0geSAqIHkyO1xuICB2YXIgeXogPSB5ICogejI7XG4gIHZhciB6eiA9IHogKiB6MjtcbiAgdmFyIHd4ID0gdyAqIHgyO1xuICB2YXIgd3kgPSB3ICogeTI7XG4gIHZhciB3eiA9IHcgKiB6MjtcbiAgdmFyIHN4ID0gc1swXTtcbiAgdmFyIHN5ID0gc1sxXTtcbiAgdmFyIHN6ID0gc1syXTtcbiAgb3V0WzBdID0gKDEgLSAoeXkgKyB6eikpICogc3g7XG4gIG91dFsxXSA9ICh4eSArIHd6KSAqIHN4O1xuICBvdXRbMl0gPSAoeHogLSB3eSkgKiBzeDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gKHh5IC0gd3opICogc3k7XG4gIG91dFs1XSA9ICgxIC0gKHh4ICsgenopKSAqIHN5O1xuICBvdXRbNl0gPSAoeXogKyB3eCkgKiBzeTtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gKHh6ICsgd3kpICogc3o7XG4gIG91dFs5XSA9ICh5eiAtIHd4KSAqIHN6O1xuICBvdXRbMTBdID0gKDEgLSAoeHggKyB5eSkpICogc3o7XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gdlswXTtcbiAgb3V0WzEzXSA9IHZbMV07XG4gIG91dFsxNF0gPSB2WzJdO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gYSBxdWF0ZXJuaW9uIHJvdGF0aW9uLCB2ZWN0b3IgdHJhbnNsYXRpb24gYW5kIHZlY3RvciBzY2FsZSwgcm90YXRpbmcgYW5kIHNjYWxpbmcgYXJvdW5kIHRoZSBnaXZlbiBvcmlnaW5cclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQ0LmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0NC50cmFuc2xhdGUoZGVzdCwgdmVjKTtcclxuICogICAgIG1hdDQudHJhbnNsYXRlKGRlc3QsIG9yaWdpbik7XHJcbiAqICAgICBsZXQgcXVhdE1hdCA9IG1hdDQuY3JlYXRlKCk7XHJcbiAqICAgICBxdWF0NC50b01hdDQocXVhdCwgcXVhdE1hdCk7XHJcbiAqICAgICBtYXQ0Lm11bHRpcGx5KGRlc3QsIHF1YXRNYXQpO1xyXG4gKiAgICAgbWF0NC5zY2FsZShkZXN0LCBzY2FsZSlcclxuICogICAgIG1hdDQudHJhbnNsYXRlKGRlc3QsIG5lZ2F0aXZlT3JpZ2luKTtcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3F1YXQ0fSBxIFJvdGF0aW9uIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHt2ZWMzfSB2IFRyYW5zbGF0aW9uIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IHMgU2NhbGluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBvIFRoZSBvcmlnaW4gdmVjdG9yIGFyb3VuZCB3aGljaCB0byBzY2FsZSBhbmQgcm90YXRlXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUm90YXRpb25UcmFuc2xhdGlvblNjYWxlT3JpZ2luKG91dCwgcSwgdiwgcywgbykge1xuICAvLyBRdWF0ZXJuaW9uIG1hdGhcbiAgdmFyIHggPSBxWzBdLFxuICAgICAgeSA9IHFbMV0sXG4gICAgICB6ID0gcVsyXSxcbiAgICAgIHcgPSBxWzNdO1xuICB2YXIgeDIgPSB4ICsgeDtcbiAgdmFyIHkyID0geSArIHk7XG4gIHZhciB6MiA9IHogKyB6O1xuICB2YXIgeHggPSB4ICogeDI7XG4gIHZhciB4eSA9IHggKiB5MjtcbiAgdmFyIHh6ID0geCAqIHoyO1xuICB2YXIgeXkgPSB5ICogeTI7XG4gIHZhciB5eiA9IHkgKiB6MjtcbiAgdmFyIHp6ID0geiAqIHoyO1xuICB2YXIgd3ggPSB3ICogeDI7XG4gIHZhciB3eSA9IHcgKiB5MjtcbiAgdmFyIHd6ID0gdyAqIHoyO1xuICB2YXIgc3ggPSBzWzBdO1xuICB2YXIgc3kgPSBzWzFdO1xuICB2YXIgc3ogPSBzWzJdO1xuICB2YXIgb3ggPSBvWzBdO1xuICB2YXIgb3kgPSBvWzFdO1xuICB2YXIgb3ogPSBvWzJdO1xuICB2YXIgb3V0MCA9ICgxIC0gKHl5ICsgenopKSAqIHN4O1xuICB2YXIgb3V0MSA9ICh4eSArIHd6KSAqIHN4O1xuICB2YXIgb3V0MiA9ICh4eiAtIHd5KSAqIHN4O1xuICB2YXIgb3V0NCA9ICh4eSAtIHd6KSAqIHN5O1xuICB2YXIgb3V0NSA9ICgxIC0gKHh4ICsgenopKSAqIHN5O1xuICB2YXIgb3V0NiA9ICh5eiArIHd4KSAqIHN5O1xuICB2YXIgb3V0OCA9ICh4eiArIHd5KSAqIHN6O1xuICB2YXIgb3V0OSA9ICh5eiAtIHd4KSAqIHN6O1xuICB2YXIgb3V0MTAgPSAoMSAtICh4eCArIHl5KSkgKiBzejtcbiAgb3V0WzBdID0gb3V0MDtcbiAgb3V0WzFdID0gb3V0MTtcbiAgb3V0WzJdID0gb3V0MjtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gb3V0NDtcbiAgb3V0WzVdID0gb3V0NTtcbiAgb3V0WzZdID0gb3V0NjtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gb3V0ODtcbiAgb3V0WzldID0gb3V0OTtcbiAgb3V0WzEwXSA9IG91dDEwO1xuICBvdXRbMTFdID0gMDtcbiAgb3V0WzEyXSA9IHZbMF0gKyBveCAtIChvdXQwICogb3ggKyBvdXQ0ICogb3kgKyBvdXQ4ICogb3opO1xuICBvdXRbMTNdID0gdlsxXSArIG95IC0gKG91dDEgKiBveCArIG91dDUgKiBveSArIG91dDkgKiBveik7XG4gIG91dFsxNF0gPSB2WzJdICsgb3ogLSAob3V0MiAqIG94ICsgb3V0NiAqIG95ICsgb3V0MTAgKiBveik7XG4gIG91dFsxNV0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgYSA0eDQgbWF0cml4IGZyb20gdGhlIGdpdmVuIHF1YXRlcm5pb25cclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3F1YXR9IHEgUXVhdGVybmlvbiB0byBjcmVhdGUgbWF0cml4IGZyb21cclxuICpcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21RdWF0KG91dCwgcSkge1xuICB2YXIgeCA9IHFbMF0sXG4gICAgICB5ID0gcVsxXSxcbiAgICAgIHogPSBxWzJdLFxuICAgICAgdyA9IHFbM107XG4gIHZhciB4MiA9IHggKyB4O1xuICB2YXIgeTIgPSB5ICsgeTtcbiAgdmFyIHoyID0geiArIHo7XG4gIHZhciB4eCA9IHggKiB4MjtcbiAgdmFyIHl4ID0geSAqIHgyO1xuICB2YXIgeXkgPSB5ICogeTI7XG4gIHZhciB6eCA9IHogKiB4MjtcbiAgdmFyIHp5ID0geiAqIHkyO1xuICB2YXIgenogPSB6ICogejI7XG4gIHZhciB3eCA9IHcgKiB4MjtcbiAgdmFyIHd5ID0gdyAqIHkyO1xuICB2YXIgd3ogPSB3ICogejI7XG4gIG91dFswXSA9IDEgLSB5eSAtIHp6O1xuICBvdXRbMV0gPSB5eCArIHd6O1xuICBvdXRbMl0gPSB6eCAtIHd5O1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSB5eCAtIHd6O1xuICBvdXRbNV0gPSAxIC0geHggLSB6ejtcbiAgb3V0WzZdID0genkgKyB3eDtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0genggKyB3eTtcbiAgb3V0WzldID0genkgLSB3eDtcbiAgb3V0WzEwXSA9IDEgLSB4eCAtIHl5O1xuICBvdXRbMTFdID0gMDtcbiAgb3V0WzEyXSA9IDA7XG4gIG91dFsxM10gPSAwO1xuICBvdXRbMTRdID0gMDtcbiAgb3V0WzE1XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2VuZXJhdGVzIGEgZnJ1c3R1bSBtYXRyaXggd2l0aCB0aGUgZ2l2ZW4gYm91bmRzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgZnJ1c3R1bSBtYXRyaXggd2lsbCBiZSB3cml0dGVuIGludG9cclxuICogQHBhcmFtIHtOdW1iZXJ9IGxlZnQgTGVmdCBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmlnaHQgUmlnaHQgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtOdW1iZXJ9IGJvdHRvbSBCb3R0b20gYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtOdW1iZXJ9IHRvcCBUb3AgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtOdW1iZXJ9IG5lYXIgTmVhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge051bWJlcn0gZmFyIEZhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJ1c3R1bShvdXQsIGxlZnQsIHJpZ2h0LCBib3R0b20sIHRvcCwgbmVhciwgZmFyKSB7XG4gIHZhciBybCA9IDEgLyAocmlnaHQgLSBsZWZ0KTtcbiAgdmFyIHRiID0gMSAvICh0b3AgLSBib3R0b20pO1xuICB2YXIgbmYgPSAxIC8gKG5lYXIgLSBmYXIpO1xuICBvdXRbMF0gPSBuZWFyICogMiAqIHJsO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSAwO1xuICBvdXRbNV0gPSBuZWFyICogMiAqIHRiO1xuICBvdXRbNl0gPSAwO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSAocmlnaHQgKyBsZWZ0KSAqIHJsO1xuICBvdXRbOV0gPSAodG9wICsgYm90dG9tKSAqIHRiO1xuICBvdXRbMTBdID0gKGZhciArIG5lYXIpICogbmY7XG4gIG91dFsxMV0gPSAtMTtcbiAgb3V0WzEyXSA9IDA7XG4gIG91dFsxM10gPSAwO1xuICBvdXRbMTRdID0gZmFyICogbmVhciAqIDIgKiBuZjtcbiAgb3V0WzE1XSA9IDA7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2VuZXJhdGVzIGEgcGVyc3BlY3RpdmUgcHJvamVjdGlvbiBtYXRyaXggd2l0aCB0aGUgZ2l2ZW4gYm91bmRzLlxyXG4gKiBQYXNzaW5nIG51bGwvdW5kZWZpbmVkL25vIHZhbHVlIGZvciBmYXIgd2lsbCBnZW5lcmF0ZSBpbmZpbml0ZSBwcm9qZWN0aW9uIG1hdHJpeC5cclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCBmcnVzdHVtIG1hdHJpeCB3aWxsIGJlIHdyaXR0ZW4gaW50b1xyXG4gKiBAcGFyYW0ge251bWJlcn0gZm92eSBWZXJ0aWNhbCBmaWVsZCBvZiB2aWV3IGluIHJhZGlhbnNcclxuICogQHBhcmFtIHtudW1iZXJ9IGFzcGVjdCBBc3BlY3QgcmF0aW8uIHR5cGljYWxseSB2aWV3cG9ydCB3aWR0aC9oZWlnaHRcclxuICogQHBhcmFtIHtudW1iZXJ9IG5lYXIgTmVhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge251bWJlcn0gZmFyIEZhciBib3VuZCBvZiB0aGUgZnJ1c3R1bSwgY2FuIGJlIG51bGwgb3IgSW5maW5pdHlcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHBlcnNwZWN0aXZlKG91dCwgZm92eSwgYXNwZWN0LCBuZWFyLCBmYXIpIHtcbiAgdmFyIGYgPSAxLjAgLyBNYXRoLnRhbihmb3Z5IC8gMiksXG4gICAgICBuZjtcbiAgb3V0WzBdID0gZiAvIGFzcGVjdDtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gMDtcbiAgb3V0WzVdID0gZjtcbiAgb3V0WzZdID0gMDtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gMDtcbiAgb3V0WzldID0gMDtcbiAgb3V0WzExXSA9IC0xO1xuICBvdXRbMTJdID0gMDtcbiAgb3V0WzEzXSA9IDA7XG4gIG91dFsxNV0gPSAwO1xuXG4gIGlmIChmYXIgIT0gbnVsbCAmJiBmYXIgIT09IEluZmluaXR5KSB7XG4gICAgbmYgPSAxIC8gKG5lYXIgLSBmYXIpO1xuICAgIG91dFsxMF0gPSAoZmFyICsgbmVhcikgKiBuZjtcbiAgICBvdXRbMTRdID0gMiAqIGZhciAqIG5lYXIgKiBuZjtcbiAgfSBlbHNlIHtcbiAgICBvdXRbMTBdID0gLTE7XG4gICAgb3V0WzE0XSA9IC0yICogbmVhcjtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2VuZXJhdGVzIGEgcGVyc3BlY3RpdmUgcHJvamVjdGlvbiBtYXRyaXggd2l0aCB0aGUgZ2l2ZW4gZmllbGQgb2Ygdmlldy5cclxuICogVGhpcyBpcyBwcmltYXJpbHkgdXNlZnVsIGZvciBnZW5lcmF0aW5nIHByb2plY3Rpb24gbWF0cmljZXMgdG8gYmUgdXNlZFxyXG4gKiB3aXRoIHRoZSBzdGlsbCBleHBlcmllbWVudGFsIFdlYlZSIEFQSS5cclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCBmcnVzdHVtIG1hdHJpeCB3aWxsIGJlIHdyaXR0ZW4gaW50b1xyXG4gKiBAcGFyYW0ge09iamVjdH0gZm92IE9iamVjdCBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcgdmFsdWVzOiB1cERlZ3JlZXMsIGRvd25EZWdyZWVzLCBsZWZ0RGVncmVlcywgcmlnaHREZWdyZWVzXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBuZWFyIE5lYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtudW1iZXJ9IGZhciBGYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHBlcnNwZWN0aXZlRnJvbUZpZWxkT2ZWaWV3KG91dCwgZm92LCBuZWFyLCBmYXIpIHtcbiAgdmFyIHVwVGFuID0gTWF0aC50YW4oZm92LnVwRGVncmVlcyAqIE1hdGguUEkgLyAxODAuMCk7XG4gIHZhciBkb3duVGFuID0gTWF0aC50YW4oZm92LmRvd25EZWdyZWVzICogTWF0aC5QSSAvIDE4MC4wKTtcbiAgdmFyIGxlZnRUYW4gPSBNYXRoLnRhbihmb3YubGVmdERlZ3JlZXMgKiBNYXRoLlBJIC8gMTgwLjApO1xuICB2YXIgcmlnaHRUYW4gPSBNYXRoLnRhbihmb3YucmlnaHREZWdyZWVzICogTWF0aC5QSSAvIDE4MC4wKTtcbiAgdmFyIHhTY2FsZSA9IDIuMCAvIChsZWZ0VGFuICsgcmlnaHRUYW4pO1xuICB2YXIgeVNjYWxlID0gMi4wIC8gKHVwVGFuICsgZG93blRhbik7XG4gIG91dFswXSA9IHhTY2FsZTtcbiAgb3V0WzFdID0gMC4wO1xuICBvdXRbMl0gPSAwLjA7XG4gIG91dFszXSA9IDAuMDtcbiAgb3V0WzRdID0gMC4wO1xuICBvdXRbNV0gPSB5U2NhbGU7XG4gIG91dFs2XSA9IDAuMDtcbiAgb3V0WzddID0gMC4wO1xuICBvdXRbOF0gPSAtKChsZWZ0VGFuIC0gcmlnaHRUYW4pICogeFNjYWxlICogMC41KTtcbiAgb3V0WzldID0gKHVwVGFuIC0gZG93blRhbikgKiB5U2NhbGUgKiAwLjU7XG4gIG91dFsxMF0gPSBmYXIgLyAobmVhciAtIGZhcik7XG4gIG91dFsxMV0gPSAtMS4wO1xuICBvdXRbMTJdID0gMC4wO1xuICBvdXRbMTNdID0gMC4wO1xuICBvdXRbMTRdID0gZmFyICogbmVhciAvIChuZWFyIC0gZmFyKTtcbiAgb3V0WzE1XSA9IDAuMDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSBvcnRob2dvbmFsIHByb2plY3Rpb24gbWF0cml4IHdpdGggdGhlIGdpdmVuIGJvdW5kc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IGZydXN0dW0gbWF0cml4IHdpbGwgYmUgd3JpdHRlbiBpbnRvXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZWZ0IExlZnQgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtudW1iZXJ9IHJpZ2h0IFJpZ2h0IGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBib3R0b20gQm90dG9tIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB0b3AgVG9wIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBuZWFyIE5lYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtudW1iZXJ9IGZhciBGYXIgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG9ydGhvKG91dCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIpIHtcbiAgdmFyIGxyID0gMSAvIChsZWZ0IC0gcmlnaHQpO1xuICB2YXIgYnQgPSAxIC8gKGJvdHRvbSAtIHRvcCk7XG4gIHZhciBuZiA9IDEgLyAobmVhciAtIGZhcik7XG4gIG91dFswXSA9IC0yICogbHI7XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IDA7XG4gIG91dFs1XSA9IC0yICogYnQ7XG4gIG91dFs2XSA9IDA7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9IDA7XG4gIG91dFs5XSA9IDA7XG4gIG91dFsxMF0gPSAyICogbmY7XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gKGxlZnQgKyByaWdodCkgKiBscjtcbiAgb3V0WzEzXSA9ICh0b3AgKyBib3R0b20pICogYnQ7XG4gIG91dFsxNF0gPSAoZmFyICsgbmVhcikgKiBuZjtcbiAgb3V0WzE1XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2VuZXJhdGVzIGEgbG9vay1hdCBtYXRyaXggd2l0aCB0aGUgZ2l2ZW4gZXllIHBvc2l0aW9uLCBmb2NhbCBwb2ludCwgYW5kIHVwIGF4aXMuXHJcbiAqIElmIHlvdSB3YW50IGEgbWF0cml4IHRoYXQgYWN0dWFsbHkgbWFrZXMgYW4gb2JqZWN0IGxvb2sgYXQgYW5vdGhlciBvYmplY3QsIHlvdSBzaG91bGQgdXNlIHRhcmdldFRvIGluc3RlYWQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgZnJ1c3R1bSBtYXRyaXggd2lsbCBiZSB3cml0dGVuIGludG9cclxuICogQHBhcmFtIHt2ZWMzfSBleWUgUG9zaXRpb24gb2YgdGhlIHZpZXdlclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGNlbnRlciBQb2ludCB0aGUgdmlld2VyIGlzIGxvb2tpbmcgYXRcclxuICogQHBhcmFtIHt2ZWMzfSB1cCB2ZWMzIHBvaW50aW5nIHVwXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBsb29rQXQob3V0LCBleWUsIGNlbnRlciwgdXApIHtcbiAgdmFyIHgwLCB4MSwgeDIsIHkwLCB5MSwgeTIsIHowLCB6MSwgejIsIGxlbjtcbiAgdmFyIGV5ZXggPSBleWVbMF07XG4gIHZhciBleWV5ID0gZXllWzFdO1xuICB2YXIgZXlleiA9IGV5ZVsyXTtcbiAgdmFyIHVweCA9IHVwWzBdO1xuICB2YXIgdXB5ID0gdXBbMV07XG4gIHZhciB1cHogPSB1cFsyXTtcbiAgdmFyIGNlbnRlcnggPSBjZW50ZXJbMF07XG4gIHZhciBjZW50ZXJ5ID0gY2VudGVyWzFdO1xuICB2YXIgY2VudGVyeiA9IGNlbnRlclsyXTtcblxuICBpZiAoTWF0aC5hYnMoZXlleCAtIGNlbnRlcngpIDwgZ2xNYXRyaXguRVBTSUxPTiAmJiBNYXRoLmFicyhleWV5IC0gY2VudGVyeSkgPCBnbE1hdHJpeC5FUFNJTE9OICYmIE1hdGguYWJzKGV5ZXogLSBjZW50ZXJ6KSA8IGdsTWF0cml4LkVQU0lMT04pIHtcbiAgICByZXR1cm4gaWRlbnRpdHkob3V0KTtcbiAgfVxuXG4gIHowID0gZXlleCAtIGNlbnRlcng7XG4gIHoxID0gZXlleSAtIGNlbnRlcnk7XG4gIHoyID0gZXlleiAtIGNlbnRlcno7XG4gIGxlbiA9IDEgLyBNYXRoLmh5cG90KHowLCB6MSwgejIpO1xuICB6MCAqPSBsZW47XG4gIHoxICo9IGxlbjtcbiAgejIgKj0gbGVuO1xuICB4MCA9IHVweSAqIHoyIC0gdXB6ICogejE7XG4gIHgxID0gdXB6ICogejAgLSB1cHggKiB6MjtcbiAgeDIgPSB1cHggKiB6MSAtIHVweSAqIHowO1xuICBsZW4gPSBNYXRoLmh5cG90KHgwLCB4MSwgeDIpO1xuXG4gIGlmICghbGVuKSB7XG4gICAgeDAgPSAwO1xuICAgIHgxID0gMDtcbiAgICB4MiA9IDA7XG4gIH0gZWxzZSB7XG4gICAgbGVuID0gMSAvIGxlbjtcbiAgICB4MCAqPSBsZW47XG4gICAgeDEgKj0gbGVuO1xuICAgIHgyICo9IGxlbjtcbiAgfVxuXG4gIHkwID0gejEgKiB4MiAtIHoyICogeDE7XG4gIHkxID0gejIgKiB4MCAtIHowICogeDI7XG4gIHkyID0gejAgKiB4MSAtIHoxICogeDA7XG4gIGxlbiA9IE1hdGguaHlwb3QoeTAsIHkxLCB5Mik7XG5cbiAgaWYgKCFsZW4pIHtcbiAgICB5MCA9IDA7XG4gICAgeTEgPSAwO1xuICAgIHkyID0gMDtcbiAgfSBlbHNlIHtcbiAgICBsZW4gPSAxIC8gbGVuO1xuICAgIHkwICo9IGxlbjtcbiAgICB5MSAqPSBsZW47XG4gICAgeTIgKj0gbGVuO1xuICB9XG5cbiAgb3V0WzBdID0geDA7XG4gIG91dFsxXSA9IHkwO1xuICBvdXRbMl0gPSB6MDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0geDE7XG4gIG91dFs1XSA9IHkxO1xuICBvdXRbNl0gPSB6MTtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0geDI7XG4gIG91dFs5XSA9IHkyO1xuICBvdXRbMTBdID0gejI7XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gLSh4MCAqIGV5ZXggKyB4MSAqIGV5ZXkgKyB4MiAqIGV5ZXopO1xuICBvdXRbMTNdID0gLSh5MCAqIGV5ZXggKyB5MSAqIGV5ZXkgKyB5MiAqIGV5ZXopO1xuICBvdXRbMTRdID0gLSh6MCAqIGV5ZXggKyB6MSAqIGV5ZXkgKyB6MiAqIGV5ZXopO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSBtYXRyaXggdGhhdCBtYWtlcyBzb21ldGhpbmcgbG9vayBhdCBzb21ldGhpbmcgZWxzZS5cclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCBmcnVzdHVtIG1hdHJpeCB3aWxsIGJlIHdyaXR0ZW4gaW50b1xyXG4gKiBAcGFyYW0ge3ZlYzN9IGV5ZSBQb3NpdGlvbiBvZiB0aGUgdmlld2VyXHJcbiAqIEBwYXJhbSB7dmVjM30gY2VudGVyIFBvaW50IHRoZSB2aWV3ZXIgaXMgbG9va2luZyBhdFxyXG4gKiBAcGFyYW0ge3ZlYzN9IHVwIHZlYzMgcG9pbnRpbmcgdXBcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRhcmdldFRvKG91dCwgZXllLCB0YXJnZXQsIHVwKSB7XG4gIHZhciBleWV4ID0gZXllWzBdLFxuICAgICAgZXlleSA9IGV5ZVsxXSxcbiAgICAgIGV5ZXogPSBleWVbMl0sXG4gICAgICB1cHggPSB1cFswXSxcbiAgICAgIHVweSA9IHVwWzFdLFxuICAgICAgdXB6ID0gdXBbMl07XG4gIHZhciB6MCA9IGV5ZXggLSB0YXJnZXRbMF0sXG4gICAgICB6MSA9IGV5ZXkgLSB0YXJnZXRbMV0sXG4gICAgICB6MiA9IGV5ZXogLSB0YXJnZXRbMl07XG4gIHZhciBsZW4gPSB6MCAqIHowICsgejEgKiB6MSArIHoyICogejI7XG5cbiAgaWYgKGxlbiA+IDApIHtcbiAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KGxlbik7XG4gICAgejAgKj0gbGVuO1xuICAgIHoxICo9IGxlbjtcbiAgICB6MiAqPSBsZW47XG4gIH1cblxuICB2YXIgeDAgPSB1cHkgKiB6MiAtIHVweiAqIHoxLFxuICAgICAgeDEgPSB1cHogKiB6MCAtIHVweCAqIHoyLFxuICAgICAgeDIgPSB1cHggKiB6MSAtIHVweSAqIHowO1xuICBsZW4gPSB4MCAqIHgwICsgeDEgKiB4MSArIHgyICogeDI7XG5cbiAgaWYgKGxlbiA+IDApIHtcbiAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KGxlbik7XG4gICAgeDAgKj0gbGVuO1xuICAgIHgxICo9IGxlbjtcbiAgICB4MiAqPSBsZW47XG4gIH1cblxuICBvdXRbMF0gPSB4MDtcbiAgb3V0WzFdID0geDE7XG4gIG91dFsyXSA9IHgyO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSB6MSAqIHgyIC0gejIgKiB4MTtcbiAgb3V0WzVdID0gejIgKiB4MCAtIHowICogeDI7XG4gIG91dFs2XSA9IHowICogeDEgLSB6MSAqIHgwO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSB6MDtcbiAgb3V0WzldID0gejE7XG4gIG91dFsxMF0gPSB6MjtcbiAgb3V0WzExXSA9IDA7XG4gIG91dFsxMl0gPSBleWV4O1xuICBvdXRbMTNdID0gZXlleTtcbiAgb3V0WzE0XSA9IGV5ZXo7XG4gIG91dFsxNV0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBtYXQ0XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gYSBtYXRyaXggdG8gcmVwcmVzZW50IGFzIGEgc3RyaW5nXHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWF0cml4XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyKGEpIHtcbiAgcmV0dXJuIFwibWF0NChcIiArIGFbMF0gKyBcIiwgXCIgKyBhWzFdICsgXCIsIFwiICsgYVsyXSArIFwiLCBcIiArIGFbM10gKyBcIiwgXCIgKyBhWzRdICsgXCIsIFwiICsgYVs1XSArIFwiLCBcIiArIGFbNl0gKyBcIiwgXCIgKyBhWzddICsgXCIsIFwiICsgYVs4XSArIFwiLCBcIiArIGFbOV0gKyBcIiwgXCIgKyBhWzEwXSArIFwiLCBcIiArIGFbMTFdICsgXCIsIFwiICsgYVsxMl0gKyBcIiwgXCIgKyBhWzEzXSArIFwiLCBcIiArIGFbMTRdICsgXCIsIFwiICsgYVsxNV0gKyBcIilcIjtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIEZyb2Jlbml1cyBub3JtIG9mIGEgbWF0NFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeCB0byBjYWxjdWxhdGUgRnJvYmVuaXVzIG5vcm0gb2ZcclxuICogQHJldHVybnMge051bWJlcn0gRnJvYmVuaXVzIG5vcm1cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9iKGEpIHtcbiAgcmV0dXJuIE1hdGguaHlwb3QoYVswXSwgYVsxXSwgYVsyXSwgYVszXSwgYVs0XSwgYVs1XSwgYVs2XSwgYVs3XSwgYVs4XSwgYVs5XSwgYVsxMF0sIGFbMTFdLCBhWzEyXSwgYVsxM10sIGFbMTRdLCBhWzE1XSk7XG59XG4vKipcclxuICogQWRkcyB0d28gbWF0NCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGQob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKyBiWzBdO1xuICBvdXRbMV0gPSBhWzFdICsgYlsxXTtcbiAgb3V0WzJdID0gYVsyXSArIGJbMl07XG4gIG91dFszXSA9IGFbM10gKyBiWzNdO1xuICBvdXRbNF0gPSBhWzRdICsgYls0XTtcbiAgb3V0WzVdID0gYVs1XSArIGJbNV07XG4gIG91dFs2XSA9IGFbNl0gKyBiWzZdO1xuICBvdXRbN10gPSBhWzddICsgYls3XTtcbiAgb3V0WzhdID0gYVs4XSArIGJbOF07XG4gIG91dFs5XSA9IGFbOV0gKyBiWzldO1xuICBvdXRbMTBdID0gYVsxMF0gKyBiWzEwXTtcbiAgb3V0WzExXSA9IGFbMTFdICsgYlsxMV07XG4gIG91dFsxMl0gPSBhWzEyXSArIGJbMTJdO1xuICBvdXRbMTNdID0gYVsxM10gKyBiWzEzXTtcbiAgb3V0WzE0XSA9IGFbMTRdICsgYlsxNF07XG4gIG91dFsxNV0gPSBhWzE1XSArIGJbMTVdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFN1YnRyYWN0cyBtYXRyaXggYiBmcm9tIG1hdHJpeCBhXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJ0cmFjdChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAtIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gLSBiWzFdO1xuICBvdXRbMl0gPSBhWzJdIC0gYlsyXTtcbiAgb3V0WzNdID0gYVszXSAtIGJbM107XG4gIG91dFs0XSA9IGFbNF0gLSBiWzRdO1xuICBvdXRbNV0gPSBhWzVdIC0gYls1XTtcbiAgb3V0WzZdID0gYVs2XSAtIGJbNl07XG4gIG91dFs3XSA9IGFbN10gLSBiWzddO1xuICBvdXRbOF0gPSBhWzhdIC0gYls4XTtcbiAgb3V0WzldID0gYVs5XSAtIGJbOV07XG4gIG91dFsxMF0gPSBhWzEwXSAtIGJbMTBdO1xuICBvdXRbMTFdID0gYVsxMV0gLSBiWzExXTtcbiAgb3V0WzEyXSA9IGFbMTJdIC0gYlsxMl07XG4gIG91dFsxM10gPSBhWzEzXSAtIGJbMTNdO1xuICBvdXRbMTRdID0gYVsxNF0gLSBiWzE0XTtcbiAgb3V0WzE1XSA9IGFbMTVdIC0gYlsxNV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTXVsdGlwbHkgZWFjaCBlbGVtZW50IG9mIHRoZSBtYXRyaXggYnkgYSBzY2FsYXIuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHNjYWxlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBiIGFtb3VudCB0byBzY2FsZSB0aGUgbWF0cml4J3MgZWxlbWVudHMgYnlcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5U2NhbGFyKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICogYjtcbiAgb3V0WzFdID0gYVsxXSAqIGI7XG4gIG91dFsyXSA9IGFbMl0gKiBiO1xuICBvdXRbM10gPSBhWzNdICogYjtcbiAgb3V0WzRdID0gYVs0XSAqIGI7XG4gIG91dFs1XSA9IGFbNV0gKiBiO1xuICBvdXRbNl0gPSBhWzZdICogYjtcbiAgb3V0WzddID0gYVs3XSAqIGI7XG4gIG91dFs4XSA9IGFbOF0gKiBiO1xuICBvdXRbOV0gPSBhWzldICogYjtcbiAgb3V0WzEwXSA9IGFbMTBdICogYjtcbiAgb3V0WzExXSA9IGFbMTFdICogYjtcbiAgb3V0WzEyXSA9IGFbMTJdICogYjtcbiAgb3V0WzEzXSA9IGFbMTNdICogYjtcbiAgb3V0WzE0XSA9IGFbMTRdICogYjtcbiAgb3V0WzE1XSA9IGFbMTVdICogYjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBBZGRzIHR3byBtYXQ0J3MgYWZ0ZXIgbXVsdGlwbHlpbmcgZWFjaCBlbGVtZW50IG9mIHRoZSBzZWNvbmQgb3BlcmFuZCBieSBhIHNjYWxhciB2YWx1ZS5cclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0NH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHNjYWxlIHRoZSBhbW91bnQgdG8gc2NhbGUgYidzIGVsZW1lbnRzIGJ5IGJlZm9yZSBhZGRpbmdcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5U2NhbGFyQW5kQWRkKG91dCwgYSwgYiwgc2NhbGUpIHtcbiAgb3V0WzBdID0gYVswXSArIGJbMF0gKiBzY2FsZTtcbiAgb3V0WzFdID0gYVsxXSArIGJbMV0gKiBzY2FsZTtcbiAgb3V0WzJdID0gYVsyXSArIGJbMl0gKiBzY2FsZTtcbiAgb3V0WzNdID0gYVszXSArIGJbM10gKiBzY2FsZTtcbiAgb3V0WzRdID0gYVs0XSArIGJbNF0gKiBzY2FsZTtcbiAgb3V0WzVdID0gYVs1XSArIGJbNV0gKiBzY2FsZTtcbiAgb3V0WzZdID0gYVs2XSArIGJbNl0gKiBzY2FsZTtcbiAgb3V0WzddID0gYVs3XSArIGJbN10gKiBzY2FsZTtcbiAgb3V0WzhdID0gYVs4XSArIGJbOF0gKiBzY2FsZTtcbiAgb3V0WzldID0gYVs5XSArIGJbOV0gKiBzY2FsZTtcbiAgb3V0WzEwXSA9IGFbMTBdICsgYlsxMF0gKiBzY2FsZTtcbiAgb3V0WzExXSA9IGFbMTFdICsgYlsxMV0gKiBzY2FsZTtcbiAgb3V0WzEyXSA9IGFbMTJdICsgYlsxMl0gKiBzY2FsZTtcbiAgb3V0WzEzXSA9IGFbMTNdICsgYlsxM10gKiBzY2FsZTtcbiAgb3V0WzE0XSA9IGFbMTRdICsgYlsxNF0gKiBzY2FsZTtcbiAgb3V0WzE1XSA9IGFbMTVdICsgYlsxNV0gKiBzY2FsZTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBtYXRyaWNlcyBoYXZlIGV4YWN0bHkgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgcG9zaXRpb24gKHdoZW4gY29tcGFyZWQgd2l0aCA9PT0pXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gYSBUaGUgZmlyc3QgbWF0cml4LlxyXG4gKiBAcGFyYW0ge21hdDR9IGIgVGhlIHNlY29uZCBtYXRyaXguXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSBtYXRyaWNlcyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBleGFjdEVxdWFscyhhLCBiKSB7XG4gIHJldHVybiBhWzBdID09PSBiWzBdICYmIGFbMV0gPT09IGJbMV0gJiYgYVsyXSA9PT0gYlsyXSAmJiBhWzNdID09PSBiWzNdICYmIGFbNF0gPT09IGJbNF0gJiYgYVs1XSA9PT0gYls1XSAmJiBhWzZdID09PSBiWzZdICYmIGFbN10gPT09IGJbN10gJiYgYVs4XSA9PT0gYls4XSAmJiBhWzldID09PSBiWzldICYmIGFbMTBdID09PSBiWzEwXSAmJiBhWzExXSA9PT0gYlsxMV0gJiYgYVsxMl0gPT09IGJbMTJdICYmIGFbMTNdID09PSBiWzEzXSAmJiBhWzE0XSA9PT0gYlsxNF0gJiYgYVsxNV0gPT09IGJbMTVdO1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIG1hdHJpY2VzIGhhdmUgYXBwcm94aW1hdGVseSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBwb3NpdGlvbi5cclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBhIFRoZSBmaXJzdCBtYXRyaXguXHJcbiAqIEBwYXJhbSB7bWF0NH0gYiBUaGUgc2Vjb25kIG1hdHJpeC5cclxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIG1hdHJpY2VzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFscyhhLCBiKSB7XG4gIHZhciBhMCA9IGFbMF0sXG4gICAgICBhMSA9IGFbMV0sXG4gICAgICBhMiA9IGFbMl0sXG4gICAgICBhMyA9IGFbM107XG4gIHZhciBhNCA9IGFbNF0sXG4gICAgICBhNSA9IGFbNV0sXG4gICAgICBhNiA9IGFbNl0sXG4gICAgICBhNyA9IGFbN107XG4gIHZhciBhOCA9IGFbOF0sXG4gICAgICBhOSA9IGFbOV0sXG4gICAgICBhMTAgPSBhWzEwXSxcbiAgICAgIGExMSA9IGFbMTFdO1xuICB2YXIgYTEyID0gYVsxMl0sXG4gICAgICBhMTMgPSBhWzEzXSxcbiAgICAgIGExNCA9IGFbMTRdLFxuICAgICAgYTE1ID0gYVsxNV07XG4gIHZhciBiMCA9IGJbMF0sXG4gICAgICBiMSA9IGJbMV0sXG4gICAgICBiMiA9IGJbMl0sXG4gICAgICBiMyA9IGJbM107XG4gIHZhciBiNCA9IGJbNF0sXG4gICAgICBiNSA9IGJbNV0sXG4gICAgICBiNiA9IGJbNl0sXG4gICAgICBiNyA9IGJbN107XG4gIHZhciBiOCA9IGJbOF0sXG4gICAgICBiOSA9IGJbOV0sXG4gICAgICBiMTAgPSBiWzEwXSxcbiAgICAgIGIxMSA9IGJbMTFdO1xuICB2YXIgYjEyID0gYlsxMl0sXG4gICAgICBiMTMgPSBiWzEzXSxcbiAgICAgIGIxNCA9IGJbMTRdLFxuICAgICAgYjE1ID0gYlsxNV07XG4gIHJldHVybiBNYXRoLmFicyhhMCAtIGIwKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMCksIE1hdGguYWJzKGIwKSkgJiYgTWF0aC5hYnMoYTEgLSBiMSkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTEpLCBNYXRoLmFicyhiMSkpICYmIE1hdGguYWJzKGEyIC0gYjIpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEyKSwgTWF0aC5hYnMoYjIpKSAmJiBNYXRoLmFicyhhMyAtIGIzKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMyksIE1hdGguYWJzKGIzKSkgJiYgTWF0aC5hYnMoYTQgLSBiNCkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTQpLCBNYXRoLmFicyhiNCkpICYmIE1hdGguYWJzKGE1IC0gYjUpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGE1KSwgTWF0aC5hYnMoYjUpKSAmJiBNYXRoLmFicyhhNiAtIGI2KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhNiksIE1hdGguYWJzKGI2KSkgJiYgTWF0aC5hYnMoYTcgLSBiNykgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTcpLCBNYXRoLmFicyhiNykpICYmIE1hdGguYWJzKGE4IC0gYjgpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGE4KSwgTWF0aC5hYnMoYjgpKSAmJiBNYXRoLmFicyhhOSAtIGI5KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhOSksIE1hdGguYWJzKGI5KSkgJiYgTWF0aC5hYnMoYTEwIC0gYjEwKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMTApLCBNYXRoLmFicyhiMTApKSAmJiBNYXRoLmFicyhhMTEgLSBiMTEpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGExMSksIE1hdGguYWJzKGIxMSkpICYmIE1hdGguYWJzKGExMiAtIGIxMikgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTEyKSwgTWF0aC5hYnMoYjEyKSkgJiYgTWF0aC5hYnMoYTEzIC0gYjEzKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMTMpLCBNYXRoLmFicyhiMTMpKSAmJiBNYXRoLmFicyhhMTQgLSBiMTQpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGExNCksIE1hdGguYWJzKGIxNCkpICYmIE1hdGguYWJzKGExNSAtIGIxNSkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTE1KSwgTWF0aC5hYnMoYjE1KSk7XG59XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBtYXQ0Lm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbXVsID0gbXVsdGlwbHk7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBtYXQ0LnN1YnRyYWN0fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc3ViID0gc3VidHJhY3Q7IiwiaW1wb3J0ICogYXMgZ2xNYXRyaXggZnJvbSBcIi4vY29tbW9uLmpzXCI7XG4vKipcclxuICogMyBEaW1lbnNpb25hbCBWZWN0b3JcclxuICogQG1vZHVsZSB2ZWMzXHJcbiAqL1xuXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldywgZW1wdHkgdmVjM1xyXG4gKlxyXG4gKiBAcmV0dXJucyB7dmVjM30gYSBuZXcgM0QgdmVjdG9yXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlKCkge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoMyk7XG5cbiAgaWYgKGdsTWF0cml4LkFSUkFZX1RZUEUgIT0gRmxvYXQzMkFycmF5KSB7XG4gICAgb3V0WzBdID0gMDtcbiAgICBvdXRbMV0gPSAwO1xuICAgIG91dFsyXSA9IDA7XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgdmVjMyBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdmVjdG9yIHRvIGNsb25lXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBhIG5ldyAzRCB2ZWN0b3JcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZShhKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSgzKTtcbiAgb3V0WzBdID0gYVswXTtcbiAgb3V0WzFdID0gYVsxXTtcbiAgb3V0WzJdID0gYVsyXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBsZW5ndGggb2YgYSB2ZWMzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gY2FsY3VsYXRlIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBsZW5ndGggb2YgYVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGxlbmd0aChhKSB7XG4gIHZhciB4ID0gYVswXTtcbiAgdmFyIHkgPSBhWzFdO1xuICB2YXIgeiA9IGFbMl07XG4gIHJldHVybiBNYXRoLmh5cG90KHgsIHksIHopO1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgdmVjMyBpbml0aWFsaXplZCB3aXRoIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcclxuICogQHJldHVybnMge3ZlYzN9IGEgbmV3IDNEIHZlY3RvclxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21WYWx1ZXMoeCwgeSwgeikge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoMyk7XG4gIG91dFswXSA9IHg7XG4gIG91dFsxXSA9IHk7XG4gIG91dFsyXSA9IHo7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIHZlYzMgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIHNvdXJjZSB2ZWN0b3JcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHkob3V0LCBhKSB7XG4gIG91dFswXSA9IGFbMF07XG4gIG91dFsxXSA9IGFbMV07XG4gIG91dFsyXSA9IGFbMl07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMyB0byB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6IFogY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXQob3V0LCB4LCB5LCB6KSB7XG4gIG91dFswXSA9IHg7XG4gIG91dFsxXSA9IHk7XG4gIG91dFsyXSA9IHo7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQWRkcyB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGQob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKyBiWzBdO1xuICBvdXRbMV0gPSBhWzFdICsgYlsxXTtcbiAgb3V0WzJdID0gYVsyXSArIGJbMl07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU3VidHJhY3RzIHZlY3RvciBiIGZyb20gdmVjdG9yIGFcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnRyYWN0KG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdIC0gYlswXTtcbiAgb3V0WzFdID0gYVsxXSAtIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gLSBiWzJdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHkob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKiBiWzBdO1xuICBvdXRbMV0gPSBhWzFdICogYlsxXTtcbiAgb3V0WzJdID0gYVsyXSAqIGJbMl07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogRGl2aWRlcyB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBkaXZpZGUob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gLyBiWzBdO1xuICBvdXRbMV0gPSBhWzFdIC8gYlsxXTtcbiAgb3V0WzJdID0gYVsyXSAvIGJbMl07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTWF0aC5jZWlsIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjM1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdmVjdG9yIHRvIGNlaWxcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNlaWwob3V0LCBhKSB7XG4gIG91dFswXSA9IE1hdGguY2VpbChhWzBdKTtcbiAgb3V0WzFdID0gTWF0aC5jZWlsKGFbMV0pO1xuICBvdXRbMl0gPSBNYXRoLmNlaWwoYVsyXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTWF0aC5mbG9vciB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBmbG9vclxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZmxvb3Iob3V0LCBhKSB7XG4gIG91dFswXSA9IE1hdGguZmxvb3IoYVswXSk7XG4gIG91dFsxXSA9IE1hdGguZmxvb3IoYVsxXSk7XG4gIG91dFsyXSA9IE1hdGguZmxvb3IoYVsyXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyB0aGUgbWluaW11bSBvZiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtaW4ob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IE1hdGgubWluKGFbMF0sIGJbMF0pO1xuICBvdXRbMV0gPSBNYXRoLm1pbihhWzFdLCBiWzFdKTtcbiAgb3V0WzJdID0gTWF0aC5taW4oYVsyXSwgYlsyXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyB0aGUgbWF4aW11bSBvZiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtYXgob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IE1hdGgubWF4KGFbMF0sIGJbMF0pO1xuICBvdXRbMV0gPSBNYXRoLm1heChhWzFdLCBiWzFdKTtcbiAgb3V0WzJdID0gTWF0aC5tYXgoYVsyXSwgYlsyXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTWF0aC5yb3VuZCB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byByb3VuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm91bmQob3V0LCBhKSB7XG4gIG91dFswXSA9IE1hdGgucm91bmQoYVswXSk7XG4gIG91dFsxXSA9IE1hdGgucm91bmQoYVsxXSk7XG4gIG91dFsyXSA9IE1hdGgucm91bmQoYVsyXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2NhbGVzIGEgdmVjMyBieSBhIHNjYWxhciBudW1iZXJcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSB2ZWN0b3IgdG8gc2NhbGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgYW1vdW50IHRvIHNjYWxlIHRoZSB2ZWN0b3IgYnlcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICogYjtcbiAgb3V0WzFdID0gYVsxXSAqIGI7XG4gIG91dFsyXSA9IGFbMl0gKiBiO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEFkZHMgdHdvIHZlYzMncyBhZnRlciBzY2FsaW5nIHRoZSBzZWNvbmQgb3BlcmFuZCBieSBhIHNjYWxhciB2YWx1ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gc2NhbGUgdGhlIGFtb3VudCB0byBzY2FsZSBiIGJ5IGJlZm9yZSBhZGRpbmdcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlQW5kQWRkKG91dCwgYSwgYiwgc2NhbGUpIHtcbiAgb3V0WzBdID0gYVswXSArIGJbMF0gKiBzY2FsZTtcbiAgb3V0WzFdID0gYVsxXSArIGJbMV0gKiBzY2FsZTtcbiAgb3V0WzJdID0gYVsyXSArIGJbMl0gKiBzY2FsZTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBldWNsaWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRpc3RhbmNlIGJldHdlZW4gYSBhbmQgYlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlKGEsIGIpIHtcbiAgdmFyIHggPSBiWzBdIC0gYVswXTtcbiAgdmFyIHkgPSBiWzFdIC0gYVsxXTtcbiAgdmFyIHogPSBiWzJdIC0gYVsyXTtcbiAgcmV0dXJuIE1hdGguaHlwb3QoeCwgeSwgeik7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBldWNsaWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3F1YXJlZERpc3RhbmNlKGEsIGIpIHtcbiAgdmFyIHggPSBiWzBdIC0gYVswXTtcbiAgdmFyIHkgPSBiWzFdIC0gYVsxXTtcbiAgdmFyIHogPSBiWzJdIC0gYVsyXTtcbiAgcmV0dXJuIHggKiB4ICsgeSAqIHkgKyB6ICogejtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBzcXVhcmVkIGxlbmd0aCBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBjYWxjdWxhdGUgc3F1YXJlZCBsZW5ndGggb2ZcclxuICogQHJldHVybnMge051bWJlcn0gc3F1YXJlZCBsZW5ndGggb2YgYVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNxdWFyZWRMZW5ndGgoYSkge1xuICB2YXIgeCA9IGFbMF07XG4gIHZhciB5ID0gYVsxXTtcbiAgdmFyIHogPSBhWzJdO1xuICByZXR1cm4geCAqIHggKyB5ICogeSArIHogKiB6O1xufVxuLyoqXHJcbiAqIE5lZ2F0ZXMgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gbmVnYXRlXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGUob3V0LCBhKSB7XG4gIG91dFswXSA9IC1hWzBdO1xuICBvdXRbMV0gPSAtYVsxXTtcbiAgb3V0WzJdID0gLWFbMl07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyB0aGUgaW52ZXJzZSBvZiB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBpbnZlcnRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGludmVyc2Uob3V0LCBhKSB7XG4gIG91dFswXSA9IDEuMCAvIGFbMF07XG4gIG91dFsxXSA9IDEuMCAvIGFbMV07XG4gIG91dFsyXSA9IDEuMCAvIGFbMl07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTm9ybWFsaXplIGEgdmVjM1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdmVjdG9yIHRvIG5vcm1hbGl6ZVxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplKG91dCwgYSkge1xuICB2YXIgeCA9IGFbMF07XG4gIHZhciB5ID0gYVsxXTtcbiAgdmFyIHogPSBhWzJdO1xuICB2YXIgbGVuID0geCAqIHggKyB5ICogeSArIHogKiB6O1xuXG4gIGlmIChsZW4gPiAwKSB7XG4gICAgLy9UT0RPOiBldmFsdWF0ZSB1c2Ugb2YgZ2xtX2ludnNxcnQgaGVyZT9cbiAgICBsZW4gPSAxIC8gTWF0aC5zcXJ0KGxlbik7XG4gIH1cblxuICBvdXRbMF0gPSBhWzBdICogbGVuO1xuICBvdXRbMV0gPSBhWzFdICogbGVuO1xuICBvdXRbMl0gPSBhWzJdICogbGVuO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRvdCBwcm9kdWN0IG9mIHR3byB2ZWMzJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gZG90IHByb2R1Y3Qgb2YgYSBhbmQgYlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGRvdChhLCBiKSB7XG4gIHJldHVybiBhWzBdICogYlswXSArIGFbMV0gKiBiWzFdICsgYVsyXSAqIGJbMl07XG59XG4vKipcclxuICogQ29tcHV0ZXMgdGhlIGNyb3NzIHByb2R1Y3Qgb2YgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY3Jvc3Mob3V0LCBhLCBiKSB7XG4gIHZhciBheCA9IGFbMF0sXG4gICAgICBheSA9IGFbMV0sXG4gICAgICBheiA9IGFbMl07XG4gIHZhciBieCA9IGJbMF0sXG4gICAgICBieSA9IGJbMV0sXG4gICAgICBieiA9IGJbMl07XG4gIG91dFswXSA9IGF5ICogYnogLSBheiAqIGJ5O1xuICBvdXRbMV0gPSBheiAqIGJ4IC0gYXggKiBiejtcbiAgb3V0WzJdID0gYXggKiBieSAtIGF5ICogYng7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byB2ZWMzJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQsIGluIHRoZSByYW5nZSBbMC0xXSwgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbGVycChvdXQsIGEsIGIsIHQpIHtcbiAgdmFyIGF4ID0gYVswXTtcbiAgdmFyIGF5ID0gYVsxXTtcbiAgdmFyIGF6ID0gYVsyXTtcbiAgb3V0WzBdID0gYXggKyB0ICogKGJbMF0gLSBheCk7XG4gIG91dFsxXSA9IGF5ICsgdCAqIChiWzFdIC0gYXkpO1xuICBvdXRbMl0gPSBheiArIHQgKiAoYlsyXSAtIGF6KTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBQZXJmb3JtcyBhIGhlcm1pdGUgaW50ZXJwb2xhdGlvbiB3aXRoIHR3byBjb250cm9sIHBvaW50c1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGMgdGhlIHRoaXJkIG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBkIHRoZSBmb3VydGggb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCwgaW4gdGhlIHJhbmdlIFswLTFdLCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBoZXJtaXRlKG91dCwgYSwgYiwgYywgZCwgdCkge1xuICB2YXIgZmFjdG9yVGltZXMyID0gdCAqIHQ7XG4gIHZhciBmYWN0b3IxID0gZmFjdG9yVGltZXMyICogKDIgKiB0IC0gMykgKyAxO1xuICB2YXIgZmFjdG9yMiA9IGZhY3RvclRpbWVzMiAqICh0IC0gMikgKyB0O1xuICB2YXIgZmFjdG9yMyA9IGZhY3RvclRpbWVzMiAqICh0IC0gMSk7XG4gIHZhciBmYWN0b3I0ID0gZmFjdG9yVGltZXMyICogKDMgLSAyICogdCk7XG4gIG91dFswXSA9IGFbMF0gKiBmYWN0b3IxICsgYlswXSAqIGZhY3RvcjIgKyBjWzBdICogZmFjdG9yMyArIGRbMF0gKiBmYWN0b3I0O1xuICBvdXRbMV0gPSBhWzFdICogZmFjdG9yMSArIGJbMV0gKiBmYWN0b3IyICsgY1sxXSAqIGZhY3RvcjMgKyBkWzFdICogZmFjdG9yNDtcbiAgb3V0WzJdID0gYVsyXSAqIGZhY3RvcjEgKyBiWzJdICogZmFjdG9yMiArIGNbMl0gKiBmYWN0b3IzICsgZFsyXSAqIGZhY3RvcjQ7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUGVyZm9ybXMgYSBiZXppZXIgaW50ZXJwb2xhdGlvbiB3aXRoIHR3byBjb250cm9sIHBvaW50c1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGMgdGhlIHRoaXJkIG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBkIHRoZSBmb3VydGggb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCwgaW4gdGhlIHJhbmdlIFswLTFdLCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBiZXppZXIob3V0LCBhLCBiLCBjLCBkLCB0KSB7XG4gIHZhciBpbnZlcnNlRmFjdG9yID0gMSAtIHQ7XG4gIHZhciBpbnZlcnNlRmFjdG9yVGltZXNUd28gPSBpbnZlcnNlRmFjdG9yICogaW52ZXJzZUZhY3RvcjtcbiAgdmFyIGZhY3RvclRpbWVzMiA9IHQgKiB0O1xuICB2YXIgZmFjdG9yMSA9IGludmVyc2VGYWN0b3JUaW1lc1R3byAqIGludmVyc2VGYWN0b3I7XG4gIHZhciBmYWN0b3IyID0gMyAqIHQgKiBpbnZlcnNlRmFjdG9yVGltZXNUd287XG4gIHZhciBmYWN0b3IzID0gMyAqIGZhY3RvclRpbWVzMiAqIGludmVyc2VGYWN0b3I7XG4gIHZhciBmYWN0b3I0ID0gZmFjdG9yVGltZXMyICogdDtcbiAgb3V0WzBdID0gYVswXSAqIGZhY3RvcjEgKyBiWzBdICogZmFjdG9yMiArIGNbMF0gKiBmYWN0b3IzICsgZFswXSAqIGZhY3RvcjQ7XG4gIG91dFsxXSA9IGFbMV0gKiBmYWN0b3IxICsgYlsxXSAqIGZhY3RvcjIgKyBjWzFdICogZmFjdG9yMyArIGRbMV0gKiBmYWN0b3I0O1xuICBvdXRbMl0gPSBhWzJdICogZmFjdG9yMSArIGJbMl0gKiBmYWN0b3IyICsgY1syXSAqIGZhY3RvcjMgKyBkWzJdICogZmFjdG9yNDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSByYW5kb20gdmVjdG9yIHdpdGggdGhlIGdpdmVuIHNjYWxlXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBbc2NhbGVdIExlbmd0aCBvZiB0aGUgcmVzdWx0aW5nIHZlY3Rvci4gSWYgb21taXR0ZWQsIGEgdW5pdCB2ZWN0b3Igd2lsbCBiZSByZXR1cm5lZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcmFuZG9tKG91dCwgc2NhbGUpIHtcbiAgc2NhbGUgPSBzY2FsZSB8fCAxLjA7XG4gIHZhciByID0gZ2xNYXRyaXguUkFORE9NKCkgKiAyLjAgKiBNYXRoLlBJO1xuICB2YXIgeiA9IGdsTWF0cml4LlJBTkRPTSgpICogMi4wIC0gMS4wO1xuICB2YXIgelNjYWxlID0gTWF0aC5zcXJ0KDEuMCAtIHogKiB6KSAqIHNjYWxlO1xuICBvdXRbMF0gPSBNYXRoLmNvcyhyKSAqIHpTY2FsZTtcbiAgb3V0WzFdID0gTWF0aC5zaW4ocikgKiB6U2NhbGU7XG4gIG91dFsyXSA9IHogKiBzY2FsZTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMzIHdpdGggYSBtYXQ0LlxyXG4gKiA0dGggdmVjdG9yIGNvbXBvbmVudCBpcyBpbXBsaWNpdGx5ICcxJ1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cclxuICogQHBhcmFtIHttYXQ0fSBtIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtTWF0NChvdXQsIGEsIG0pIHtcbiAgdmFyIHggPSBhWzBdLFxuICAgICAgeSA9IGFbMV0sXG4gICAgICB6ID0gYVsyXTtcbiAgdmFyIHcgPSBtWzNdICogeCArIG1bN10gKiB5ICsgbVsxMV0gKiB6ICsgbVsxNV07XG4gIHcgPSB3IHx8IDEuMDtcbiAgb3V0WzBdID0gKG1bMF0gKiB4ICsgbVs0XSAqIHkgKyBtWzhdICogeiArIG1bMTJdKSAvIHc7XG4gIG91dFsxXSA9IChtWzFdICogeCArIG1bNV0gKiB5ICsgbVs5XSAqIHogKyBtWzEzXSkgLyB3O1xuICBvdXRbMl0gPSAobVsyXSAqIHggKyBtWzZdICogeSArIG1bMTBdICogeiArIG1bMTRdKSAvIHc7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogVHJhbnNmb3JtcyB0aGUgdmVjMyB3aXRoIGEgbWF0My5cclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSB2ZWN0b3IgdG8gdHJhbnNmb3JtXHJcbiAqIEBwYXJhbSB7bWF0M30gbSB0aGUgM3gzIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtTWF0MyhvdXQsIGEsIG0pIHtcbiAgdmFyIHggPSBhWzBdLFxuICAgICAgeSA9IGFbMV0sXG4gICAgICB6ID0gYVsyXTtcbiAgb3V0WzBdID0geCAqIG1bMF0gKyB5ICogbVszXSArIHogKiBtWzZdO1xuICBvdXRbMV0gPSB4ICogbVsxXSArIHkgKiBtWzRdICsgeiAqIG1bN107XG4gIG91dFsyXSA9IHggKiBtWzJdICsgeSAqIG1bNV0gKyB6ICogbVs4XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMzIHdpdGggYSBxdWF0XHJcbiAqIENhbiBhbHNvIGJlIHVzZWQgZm9yIGR1YWwgcXVhdGVybmlvbnMuIChNdWx0aXBseSBpdCB3aXRoIHRoZSByZWFsIHBhcnQpXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge3F1YXR9IHEgcXVhdGVybmlvbiB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtUXVhdChvdXQsIGEsIHEpIHtcbiAgLy8gYmVuY2htYXJrczogaHR0cHM6Ly9qc3BlcmYuY29tL3F1YXRlcm5pb24tdHJhbnNmb3JtLXZlYzMtaW1wbGVtZW50YXRpb25zLWZpeGVkXG4gIHZhciBxeCA9IHFbMF0sXG4gICAgICBxeSA9IHFbMV0sXG4gICAgICBxeiA9IHFbMl0sXG4gICAgICBxdyA9IHFbM107XG4gIHZhciB4ID0gYVswXSxcbiAgICAgIHkgPSBhWzFdLFxuICAgICAgeiA9IGFbMl07IC8vIHZhciBxdmVjID0gW3F4LCBxeSwgcXpdO1xuICAvLyB2YXIgdXYgPSB2ZWMzLmNyb3NzKFtdLCBxdmVjLCBhKTtcblxuICB2YXIgdXZ4ID0gcXkgKiB6IC0gcXogKiB5LFxuICAgICAgdXZ5ID0gcXogKiB4IC0gcXggKiB6LFxuICAgICAgdXZ6ID0gcXggKiB5IC0gcXkgKiB4OyAvLyB2YXIgdXV2ID0gdmVjMy5jcm9zcyhbXSwgcXZlYywgdXYpO1xuXG4gIHZhciB1dXZ4ID0gcXkgKiB1dnogLSBxeiAqIHV2eSxcbiAgICAgIHV1dnkgPSBxeiAqIHV2eCAtIHF4ICogdXZ6LFxuICAgICAgdXV2eiA9IHF4ICogdXZ5IC0gcXkgKiB1dng7IC8vIHZlYzMuc2NhbGUodXYsIHV2LCAyICogdyk7XG5cbiAgdmFyIHcyID0gcXcgKiAyO1xuICB1dnggKj0gdzI7XG4gIHV2eSAqPSB3MjtcbiAgdXZ6ICo9IHcyOyAvLyB2ZWMzLnNjYWxlKHV1diwgdXV2LCAyKTtcblxuICB1dXZ4ICo9IDI7XG4gIHV1dnkgKj0gMjtcbiAgdXV2eiAqPSAyOyAvLyByZXR1cm4gdmVjMy5hZGQob3V0LCBhLCB2ZWMzLmFkZChvdXQsIHV2LCB1dXYpKTtcblxuICBvdXRbMF0gPSB4ICsgdXZ4ICsgdXV2eDtcbiAgb3V0WzFdID0geSArIHV2eSArIHV1dnk7XG4gIG91dFsyXSA9IHogKyB1dnogKyB1dXZ6O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZSBhIDNEIHZlY3RvciBhcm91bmQgdGhlIHgtYXhpc1xyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCBUaGUgcmVjZWl2aW5nIHZlYzNcclxuICogQHBhcmFtIHt2ZWMzfSBhIFRoZSB2ZWMzIHBvaW50IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgVGhlIG9yaWdpbiBvZiB0aGUgcm90YXRpb25cclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCBUaGUgYW5nbGUgb2Ygcm90YXRpb24gaW4gcmFkaWFuc1xyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlWChvdXQsIGEsIGIsIHJhZCkge1xuICB2YXIgcCA9IFtdLFxuICAgICAgciA9IFtdOyAvL1RyYW5zbGF0ZSBwb2ludCB0byB0aGUgb3JpZ2luXG5cbiAgcFswXSA9IGFbMF0gLSBiWzBdO1xuICBwWzFdID0gYVsxXSAtIGJbMV07XG4gIHBbMl0gPSBhWzJdIC0gYlsyXTsgLy9wZXJmb3JtIHJvdGF0aW9uXG5cbiAgclswXSA9IHBbMF07XG4gIHJbMV0gPSBwWzFdICogTWF0aC5jb3MocmFkKSAtIHBbMl0gKiBNYXRoLnNpbihyYWQpO1xuICByWzJdID0gcFsxXSAqIE1hdGguc2luKHJhZCkgKyBwWzJdICogTWF0aC5jb3MocmFkKTsgLy90cmFuc2xhdGUgdG8gY29ycmVjdCBwb3NpdGlvblxuXG4gIG91dFswXSA9IHJbMF0gKyBiWzBdO1xuICBvdXRbMV0gPSByWzFdICsgYlsxXTtcbiAgb3V0WzJdID0gclsyXSArIGJbMl07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlIGEgM0QgdmVjdG9yIGFyb3VuZCB0aGUgeS1heGlzXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IFRoZSByZWNlaXZpbmcgdmVjM1xyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgVGhlIHZlYzMgcG9pbnQgdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7dmVjM30gYiBUaGUgb3JpZ2luIG9mIHRoZSByb3RhdGlvblxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIFRoZSBhbmdsZSBvZiByb3RhdGlvbiBpbiByYWRpYW5zXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGVZKG91dCwgYSwgYiwgcmFkKSB7XG4gIHZhciBwID0gW10sXG4gICAgICByID0gW107IC8vVHJhbnNsYXRlIHBvaW50IHRvIHRoZSBvcmlnaW5cblxuICBwWzBdID0gYVswXSAtIGJbMF07XG4gIHBbMV0gPSBhWzFdIC0gYlsxXTtcbiAgcFsyXSA9IGFbMl0gLSBiWzJdOyAvL3BlcmZvcm0gcm90YXRpb25cblxuICByWzBdID0gcFsyXSAqIE1hdGguc2luKHJhZCkgKyBwWzBdICogTWF0aC5jb3MocmFkKTtcbiAgclsxXSA9IHBbMV07XG4gIHJbMl0gPSBwWzJdICogTWF0aC5jb3MocmFkKSAtIHBbMF0gKiBNYXRoLnNpbihyYWQpOyAvL3RyYW5zbGF0ZSB0byBjb3JyZWN0IHBvc2l0aW9uXG5cbiAgb3V0WzBdID0gclswXSArIGJbMF07XG4gIG91dFsxXSA9IHJbMV0gKyBiWzFdO1xuICBvdXRbMl0gPSByWzJdICsgYlsyXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGUgYSAzRCB2ZWN0b3IgYXJvdW5kIHRoZSB6LWF4aXNcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgVGhlIHJlY2VpdmluZyB2ZWMzXHJcbiAqIEBwYXJhbSB7dmVjM30gYSBUaGUgdmVjMyBwb2ludCB0byByb3RhdGVcclxuICogQHBhcmFtIHt2ZWMzfSBiIFRoZSBvcmlnaW4gb2YgdGhlIHJvdGF0aW9uXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgVGhlIGFuZ2xlIG9mIHJvdGF0aW9uIGluIHJhZGlhbnNcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZVoob3V0LCBhLCBiLCByYWQpIHtcbiAgdmFyIHAgPSBbXSxcbiAgICAgIHIgPSBbXTsgLy9UcmFuc2xhdGUgcG9pbnQgdG8gdGhlIG9yaWdpblxuXG4gIHBbMF0gPSBhWzBdIC0gYlswXTtcbiAgcFsxXSA9IGFbMV0gLSBiWzFdO1xuICBwWzJdID0gYVsyXSAtIGJbMl07IC8vcGVyZm9ybSByb3RhdGlvblxuXG4gIHJbMF0gPSBwWzBdICogTWF0aC5jb3MocmFkKSAtIHBbMV0gKiBNYXRoLnNpbihyYWQpO1xuICByWzFdID0gcFswXSAqIE1hdGguc2luKHJhZCkgKyBwWzFdICogTWF0aC5jb3MocmFkKTtcbiAgclsyXSA9IHBbMl07IC8vdHJhbnNsYXRlIHRvIGNvcnJlY3QgcG9zaXRpb25cblxuICBvdXRbMF0gPSByWzBdICsgYlswXTtcbiAgb3V0WzFdID0gclsxXSArIGJbMV07XG4gIG91dFsyXSA9IHJbMl0gKyBiWzJdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEdldCB0aGUgYW5nbGUgYmV0d2VlbiB0d28gM0QgdmVjdG9yc1xyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgVGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIFRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgYW5nbGUgaW4gcmFkaWFuc1xyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGFuZ2xlKGEsIGIpIHtcbiAgdmFyIGF4ID0gYVswXSxcbiAgICAgIGF5ID0gYVsxXSxcbiAgICAgIGF6ID0gYVsyXSxcbiAgICAgIGJ4ID0gYlswXSxcbiAgICAgIGJ5ID0gYlsxXSxcbiAgICAgIGJ6ID0gYlsyXSxcbiAgICAgIG1hZzEgPSBNYXRoLnNxcnQoYXggKiBheCArIGF5ICogYXkgKyBheiAqIGF6KSxcbiAgICAgIG1hZzIgPSBNYXRoLnNxcnQoYnggKiBieCArIGJ5ICogYnkgKyBieiAqIGJ6KSxcbiAgICAgIG1hZyA9IG1hZzEgKiBtYWcyLFxuICAgICAgY29zaW5lID0gbWFnICYmIGRvdChhLCBiKSAvIG1hZztcbiAgcmV0dXJuIE1hdGguYWNvcyhNYXRoLm1pbihNYXRoLm1heChjb3NpbmUsIC0xKSwgMSkpO1xufVxuLyoqXHJcbiAqIFNldCB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzMgdG8gemVyb1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gemVybyhvdXQpIHtcbiAgb3V0WzBdID0gMC4wO1xuICBvdXRbMV0gPSAwLjA7XG4gIG91dFsyXSA9IDAuMDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gcmVwcmVzZW50IGFzIGEgc3RyaW5nXHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmVjdG9yXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyKGEpIHtcbiAgcmV0dXJuIFwidmVjMyhcIiArIGFbMF0gKyBcIiwgXCIgKyBhWzFdICsgXCIsIFwiICsgYVsyXSArIFwiKVwiO1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHZlY3RvcnMgaGF2ZSBleGFjdGx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uICh3aGVuIGNvbXBhcmVkIHdpdGggPT09KVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgVGhlIGZpcnN0IHZlY3Rvci5cclxuICogQHBhcmFtIHt2ZWMzfSBiIFRoZSBzZWNvbmQgdmVjdG9yLlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmVjdG9ycyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBleGFjdEVxdWFscyhhLCBiKSB7XG4gIHJldHVybiBhWzBdID09PSBiWzBdICYmIGFbMV0gPT09IGJbMV0gJiYgYVsyXSA9PT0gYlsyXTtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSB2ZWN0b3JzIGhhdmUgYXBwcm94aW1hdGVseSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBwb3NpdGlvbi5cclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBhIFRoZSBmaXJzdCB2ZWN0b3IuXHJcbiAqIEBwYXJhbSB7dmVjM30gYiBUaGUgc2Vjb25kIHZlY3Rvci5cclxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIHZlY3RvcnMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxzKGEsIGIpIHtcbiAgdmFyIGEwID0gYVswXSxcbiAgICAgIGExID0gYVsxXSxcbiAgICAgIGEyID0gYVsyXTtcbiAgdmFyIGIwID0gYlswXSxcbiAgICAgIGIxID0gYlsxXSxcbiAgICAgIGIyID0gYlsyXTtcbiAgcmV0dXJuIE1hdGguYWJzKGEwIC0gYjApIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEwKSwgTWF0aC5hYnMoYjApKSAmJiBNYXRoLmFicyhhMSAtIGIxKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMSksIE1hdGguYWJzKGIxKSkgJiYgTWF0aC5hYnMoYTIgLSBiMikgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTIpLCBNYXRoLmFicyhiMikpO1xufVxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMy5zdWJ0cmFjdH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHN1YiA9IHN1YnRyYWN0O1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMy5tdWx0aXBseX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIG11bCA9IG11bHRpcGx5O1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMy5kaXZpZGV9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBkaXYgPSBkaXZpZGU7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLmRpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgZGlzdCA9IGRpc3RhbmNlO1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMy5zcXVhcmVkRGlzdGFuY2V9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzcXJEaXN0ID0gc3F1YXJlZERpc3RhbmNlO1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMy5sZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBsZW4gPSBsZW5ndGg7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLnNxdWFyZWRMZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzcXJMZW4gPSBzcXVhcmVkTGVuZ3RoO1xuLyoqXHJcbiAqIFBlcmZvcm0gc29tZSBvcGVyYXRpb24gb3ZlciBhbiBhcnJheSBvZiB2ZWMzcy5cclxuICpcclxuICogQHBhcmFtIHtBcnJheX0gYSB0aGUgYXJyYXkgb2YgdmVjdG9ycyB0byBpdGVyYXRlIG92ZXJcclxuICogQHBhcmFtIHtOdW1iZXJ9IHN0cmlkZSBOdW1iZXIgb2YgZWxlbWVudHMgYmV0d2VlbiB0aGUgc3RhcnQgb2YgZWFjaCB2ZWMzLiBJZiAwIGFzc3VtZXMgdGlnaHRseSBwYWNrZWRcclxuICogQHBhcmFtIHtOdW1iZXJ9IG9mZnNldCBOdW1iZXIgb2YgZWxlbWVudHMgdG8gc2tpcCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheVxyXG4gKiBAcGFyYW0ge051bWJlcn0gY291bnQgTnVtYmVyIG9mIHZlYzNzIHRvIGl0ZXJhdGUgb3Zlci4gSWYgMCBpdGVyYXRlcyBvdmVyIGVudGlyZSBhcnJheVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBGdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIHZlY3RvciBpbiB0aGUgYXJyYXlcclxuICogQHBhcmFtIHtPYmplY3R9IFthcmddIGFkZGl0aW9uYWwgYXJndW1lbnQgdG8gcGFzcyB0byBmblxyXG4gKiBAcmV0dXJucyB7QXJyYXl9IGFcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGZvckVhY2ggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB2ZWMgPSBjcmVhdGUoKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChhLCBzdHJpZGUsIG9mZnNldCwgY291bnQsIGZuLCBhcmcpIHtcbiAgICB2YXIgaSwgbDtcblxuICAgIGlmICghc3RyaWRlKSB7XG4gICAgICBzdHJpZGUgPSAzO1xuICAgIH1cblxuICAgIGlmICghb2Zmc2V0KSB7XG4gICAgICBvZmZzZXQgPSAwO1xuICAgIH1cblxuICAgIGlmIChjb3VudCkge1xuICAgICAgbCA9IE1hdGgubWluKGNvdW50ICogc3RyaWRlICsgb2Zmc2V0LCBhLmxlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGwgPSBhLmxlbmd0aDtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSBvZmZzZXQ7IGkgPCBsOyBpICs9IHN0cmlkZSkge1xuICAgICAgdmVjWzBdID0gYVtpXTtcbiAgICAgIHZlY1sxXSA9IGFbaSArIDFdO1xuICAgICAgdmVjWzJdID0gYVtpICsgMl07XG4gICAgICBmbih2ZWMsIHZlYywgYXJnKTtcbiAgICAgIGFbaV0gPSB2ZWNbMF07XG4gICAgICBhW2kgKyAxXSA9IHZlY1sxXTtcbiAgICAgIGFbaSArIDJdID0gdmVjWzJdO1xuICAgIH1cblxuICAgIHJldHVybiBhO1xuICB9O1xufSgpOyIsImltcG9ydCAqIGFzIGdsTWF0cml4IGZyb20gXCIuL2NvbW1vbi5qc1wiO1xuLyoqXHJcbiAqIDQgRGltZW5zaW9uYWwgVmVjdG9yXHJcbiAqIEBtb2R1bGUgdmVjNFxyXG4gKi9cblxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcsIGVtcHR5IHZlYzRcclxuICpcclxuICogQHJldHVybnMge3ZlYzR9IGEgbmV3IDREIHZlY3RvclxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDQpO1xuXG4gIGlmIChnbE1hdHJpeC5BUlJBWV9UWVBFICE9IEZsb2F0MzJBcnJheSkge1xuICAgIG91dFswXSA9IDA7XG4gICAgb3V0WzFdID0gMDtcbiAgICBvdXRbMl0gPSAwO1xuICAgIG91dFszXSA9IDA7XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgdmVjNCBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdmVjdG9yIHRvIGNsb25lXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBhIG5ldyA0RCB2ZWN0b3JcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZShhKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSg0KTtcbiAgb3V0WzBdID0gYVswXTtcbiAgb3V0WzFdID0gYVsxXTtcbiAgb3V0WzJdID0gYVsyXTtcbiAgb3V0WzNdID0gYVszXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IHZlYzQgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6IFogY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB3IFcgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBhIG5ldyA0RCB2ZWN0b3JcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVmFsdWVzKHgsIHksIHosIHcpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDQpO1xuICBvdXRbMF0gPSB4O1xuICBvdXRbMV0gPSB5O1xuICBvdXRbMl0gPSB6O1xuICBvdXRbM10gPSB3O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSB2ZWM0IHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBzb3VyY2UgdmVjdG9yXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KG91dCwgYSkge1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICBvdXRbMl0gPSBhWzJdO1xuICBvdXRbM10gPSBhWzNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNldCB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzQgdG8gdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge051bWJlcn0geCBYIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geSBZIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geiBaIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdyBXIGNvbXBvbmVudFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0KG91dCwgeCwgeSwgeiwgdykge1xuICBvdXRbMF0gPSB4O1xuICBvdXRbMV0gPSB5O1xuICBvdXRbMl0gPSB6O1xuICBvdXRbM10gPSB3O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEFkZHMgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICsgYlswXTtcbiAgb3V0WzFdID0gYVsxXSArIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gKyBiWzJdO1xuICBvdXRbM10gPSBhWzNdICsgYlszXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTdWJ0cmFjdHMgdmVjdG9yIGIgZnJvbSB2ZWN0b3IgYVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3VidHJhY3Qob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gLSBiWzBdO1xuICBvdXRbMV0gPSBhWzFdIC0gYlsxXTtcbiAgb3V0WzJdID0gYVsyXSAtIGJbMl07XG4gIG91dFszXSA9IGFbM10gLSBiWzNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHkob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKiBiWzBdO1xuICBvdXRbMV0gPSBhWzFdICogYlsxXTtcbiAgb3V0WzJdID0gYVsyXSAqIGJbMl07XG4gIG91dFszXSA9IGFbM10gKiBiWzNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIERpdmlkZXMgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZGl2aWRlKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdIC8gYlswXTtcbiAgb3V0WzFdID0gYVsxXSAvIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gLyBiWzJdO1xuICBvdXRbM10gPSBhWzNdIC8gYlszXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBNYXRoLmNlaWwgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWM0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gY2VpbFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY2VpbChvdXQsIGEpIHtcbiAgb3V0WzBdID0gTWF0aC5jZWlsKGFbMF0pO1xuICBvdXRbMV0gPSBNYXRoLmNlaWwoYVsxXSk7XG4gIG91dFsyXSA9IE1hdGguY2VpbChhWzJdKTtcbiAgb3V0WzNdID0gTWF0aC5jZWlsKGFbM10pO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE1hdGguZmxvb3IgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWM0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gZmxvb3JcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZsb29yKG91dCwgYSkge1xuICBvdXRbMF0gPSBNYXRoLmZsb29yKGFbMF0pO1xuICBvdXRbMV0gPSBNYXRoLmZsb29yKGFbMV0pO1xuICBvdXRbMl0gPSBNYXRoLmZsb29yKGFbMl0pO1xuICBvdXRbM10gPSBNYXRoLmZsb29yKGFbM10pO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgdGhlIG1pbmltdW0gb2YgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbWluKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBNYXRoLm1pbihhWzBdLCBiWzBdKTtcbiAgb3V0WzFdID0gTWF0aC5taW4oYVsxXSwgYlsxXSk7XG4gIG91dFsyXSA9IE1hdGgubWluKGFbMl0sIGJbMl0pO1xuICBvdXRbM10gPSBNYXRoLm1pbihhWzNdLCBiWzNdKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBtYXhpbXVtIG9mIHR3byB2ZWM0J3NcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG1heChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gTWF0aC5tYXgoYVswXSwgYlswXSk7XG4gIG91dFsxXSA9IE1hdGgubWF4KGFbMV0sIGJbMV0pO1xuICBvdXRbMl0gPSBNYXRoLm1heChhWzJdLCBiWzJdKTtcbiAgb3V0WzNdID0gTWF0aC5tYXgoYVszXSwgYlszXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTWF0aC5yb3VuZCB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzRcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHZlY3RvciB0byByb3VuZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm91bmQob3V0LCBhKSB7XG4gIG91dFswXSA9IE1hdGgucm91bmQoYVswXSk7XG4gIG91dFsxXSA9IE1hdGgucm91bmQoYVsxXSk7XG4gIG91dFsyXSA9IE1hdGgucm91bmQoYVsyXSk7XG4gIG91dFszXSA9IE1hdGgucm91bmQoYVszXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2NhbGVzIGEgdmVjNCBieSBhIHNjYWxhciBudW1iZXJcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSB2ZWN0b3IgdG8gc2NhbGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgYW1vdW50IHRvIHNjYWxlIHRoZSB2ZWN0b3IgYnlcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICogYjtcbiAgb3V0WzFdID0gYVsxXSAqIGI7XG4gIG91dFsyXSA9IGFbMl0gKiBiO1xuICBvdXRbM10gPSBhWzNdICogYjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBBZGRzIHR3byB2ZWM0J3MgYWZ0ZXIgc2NhbGluZyB0aGUgc2Vjb25kIG9wZXJhbmQgYnkgYSBzY2FsYXIgdmFsdWVcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHNjYWxlIHRoZSBhbW91bnQgdG8gc2NhbGUgYiBieSBiZWZvcmUgYWRkaW5nXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzY2FsZUFuZEFkZChvdXQsIGEsIGIsIHNjYWxlKSB7XG4gIG91dFswXSA9IGFbMF0gKyBiWzBdICogc2NhbGU7XG4gIG91dFsxXSA9IGFbMV0gKyBiWzFdICogc2NhbGU7XG4gIG91dFsyXSA9IGFbMl0gKyBiWzJdICogc2NhbGU7XG4gIG91dFszXSA9IGFbM10gKyBiWzNdICogc2NhbGU7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkaXN0YW5jZSBiZXR3ZWVuIGEgYW5kIGJcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBkaXN0YW5jZShhLCBiKSB7XG4gIHZhciB4ID0gYlswXSAtIGFbMF07XG4gIHZhciB5ID0gYlsxXSAtIGFbMV07XG4gIHZhciB6ID0gYlsyXSAtIGFbMl07XG4gIHZhciB3ID0gYlszXSAtIGFbM107XG4gIHJldHVybiBNYXRoLmh5cG90KHgsIHksIHosIHcpO1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGRpc3RhbmNlIGJldHdlZW4gYSBhbmQgYlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNxdWFyZWREaXN0YW5jZShhLCBiKSB7XG4gIHZhciB4ID0gYlswXSAtIGFbMF07XG4gIHZhciB5ID0gYlsxXSAtIGFbMV07XG4gIHZhciB6ID0gYlsyXSAtIGFbMl07XG4gIHZhciB3ID0gYlszXSAtIGFbM107XG4gIHJldHVybiB4ICogeCArIHkgKiB5ICsgeiAqIHogKyB3ICogdztcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBsZW5ndGggb2YgYSB2ZWM0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gY2FsY3VsYXRlIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBsZW5ndGggb2YgYVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGxlbmd0aChhKSB7XG4gIHZhciB4ID0gYVswXTtcbiAgdmFyIHkgPSBhWzFdO1xuICB2YXIgeiA9IGFbMl07XG4gIHZhciB3ID0gYVszXTtcbiAgcmV0dXJuIE1hdGguaHlwb3QoeCwgeSwgeiwgdyk7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBsZW5ndGggb2YgYSB2ZWM0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gY2FsY3VsYXRlIHNxdWFyZWQgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgbGVuZ3RoIG9mIGFcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzcXVhcmVkTGVuZ3RoKGEpIHtcbiAgdmFyIHggPSBhWzBdO1xuICB2YXIgeSA9IGFbMV07XG4gIHZhciB6ID0gYVsyXTtcbiAgdmFyIHcgPSBhWzNdO1xuICByZXR1cm4geCAqIHggKyB5ICogeSArIHogKiB6ICsgdyAqIHc7XG59XG4vKipcclxuICogTmVnYXRlcyB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzRcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHZlY3RvciB0byBuZWdhdGVcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZShvdXQsIGEpIHtcbiAgb3V0WzBdID0gLWFbMF07XG4gIG91dFsxXSA9IC1hWzFdO1xuICBvdXRbMl0gPSAtYVsyXTtcbiAgb3V0WzNdID0gLWFbM107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyB0aGUgaW52ZXJzZSBvZiB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzRcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHZlY3RvciB0byBpbnZlcnRcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGludmVyc2Uob3V0LCBhKSB7XG4gIG91dFswXSA9IDEuMCAvIGFbMF07XG4gIG91dFsxXSA9IDEuMCAvIGFbMV07XG4gIG91dFsyXSA9IDEuMCAvIGFbMl07XG4gIG91dFszXSA9IDEuMCAvIGFbM107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTm9ybWFsaXplIGEgdmVjNFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdmVjdG9yIHRvIG5vcm1hbGl6ZVxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplKG91dCwgYSkge1xuICB2YXIgeCA9IGFbMF07XG4gIHZhciB5ID0gYVsxXTtcbiAgdmFyIHogPSBhWzJdO1xuICB2YXIgdyA9IGFbM107XG4gIHZhciBsZW4gPSB4ICogeCArIHkgKiB5ICsgeiAqIHogKyB3ICogdztcblxuICBpZiAobGVuID4gMCkge1xuICAgIGxlbiA9IDEgLyBNYXRoLnNxcnQobGVuKTtcbiAgfVxuXG4gIG91dFswXSA9IHggKiBsZW47XG4gIG91dFsxXSA9IHkgKiBsZW47XG4gIG91dFsyXSA9IHogKiBsZW47XG4gIG91dFszXSA9IHcgKiBsZW47XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZG90IHByb2R1Y3Qgb2YgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkb3QgcHJvZHVjdCBvZiBhIGFuZCBiXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZG90KGEsIGIpIHtcbiAgcmV0dXJuIGFbMF0gKiBiWzBdICsgYVsxXSAqIGJbMV0gKyBhWzJdICogYlsyXSArIGFbM10gKiBiWzNdO1xufVxuLyoqXHJcbiAqIFJldHVybnMgdGhlIGNyb3NzLXByb2R1Y3Qgb2YgdGhyZWUgdmVjdG9ycyBpbiBhIDQtZGltZW5zaW9uYWwgc3BhY2VcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSByZXN1bHQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBVIHRoZSBmaXJzdCB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBWIHRoZSBzZWNvbmQgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gVyB0aGUgdGhpcmQgdmVjdG9yXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSByZXN1bHRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjcm9zcyhvdXQsIHUsIHYsIHcpIHtcbiAgdmFyIEEgPSB2WzBdICogd1sxXSAtIHZbMV0gKiB3WzBdLFxuICAgICAgQiA9IHZbMF0gKiB3WzJdIC0gdlsyXSAqIHdbMF0sXG4gICAgICBDID0gdlswXSAqIHdbM10gLSB2WzNdICogd1swXSxcbiAgICAgIEQgPSB2WzFdICogd1syXSAtIHZbMl0gKiB3WzFdLFxuICAgICAgRSA9IHZbMV0gKiB3WzNdIC0gdlszXSAqIHdbMV0sXG4gICAgICBGID0gdlsyXSAqIHdbM10gLSB2WzNdICogd1syXTtcbiAgdmFyIEcgPSB1WzBdO1xuICB2YXIgSCA9IHVbMV07XG4gIHZhciBJID0gdVsyXTtcbiAgdmFyIEogPSB1WzNdO1xuICBvdXRbMF0gPSBIICogRiAtIEkgKiBFICsgSiAqIEQ7XG4gIG91dFsxXSA9IC0oRyAqIEYpICsgSSAqIEMgLSBKICogQjtcbiAgb3V0WzJdID0gRyAqIEUgLSBIICogQyArIEogKiBBO1xuICBvdXRbM10gPSAtKEcgKiBEKSArIEggKiBCIC0gSSAqIEE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byB2ZWM0J3NcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjNH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQsIGluIHRoZSByYW5nZSBbMC0xXSwgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbGVycChvdXQsIGEsIGIsIHQpIHtcbiAgdmFyIGF4ID0gYVswXTtcbiAgdmFyIGF5ID0gYVsxXTtcbiAgdmFyIGF6ID0gYVsyXTtcbiAgdmFyIGF3ID0gYVszXTtcbiAgb3V0WzBdID0gYXggKyB0ICogKGJbMF0gLSBheCk7XG4gIG91dFsxXSA9IGF5ICsgdCAqIChiWzFdIC0gYXkpO1xuICBvdXRbMl0gPSBheiArIHQgKiAoYlsyXSAtIGF6KTtcbiAgb3V0WzNdID0gYXcgKyB0ICogKGJbM10gLSBhdyk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2VuZXJhdGVzIGEgcmFuZG9tIHZlY3RvciB3aXRoIHRoZSBnaXZlbiBzY2FsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge051bWJlcn0gW3NjYWxlXSBMZW5ndGggb2YgdGhlIHJlc3VsdGluZyB2ZWN0b3IuIElmIG9tbWl0dGVkLCBhIHVuaXQgdmVjdG9yIHdpbGwgYmUgcmV0dXJuZWRcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbShvdXQsIHNjYWxlKSB7XG4gIHNjYWxlID0gc2NhbGUgfHwgMS4wOyAvLyBNYXJzYWdsaWEsIEdlb3JnZS4gQ2hvb3NpbmcgYSBQb2ludCBmcm9tIHRoZSBTdXJmYWNlIG9mIGFcbiAgLy8gU3BoZXJlLiBBbm4uIE1hdGguIFN0YXRpc3QuIDQzICgxOTcyKSwgbm8uIDIsIDY0NS0tNjQ2LlxuICAvLyBodHRwOi8vcHJvamVjdGV1Y2xpZC5vcmcvZXVjbGlkLmFvbXMvMTE3NzY5MjY0NDtcblxuICB2YXIgdjEsIHYyLCB2MywgdjQ7XG4gIHZhciBzMSwgczI7XG5cbiAgZG8ge1xuICAgIHYxID0gZ2xNYXRyaXguUkFORE9NKCkgKiAyIC0gMTtcbiAgICB2MiA9IGdsTWF0cml4LlJBTkRPTSgpICogMiAtIDE7XG4gICAgczEgPSB2MSAqIHYxICsgdjIgKiB2MjtcbiAgfSB3aGlsZSAoczEgPj0gMSk7XG5cbiAgZG8ge1xuICAgIHYzID0gZ2xNYXRyaXguUkFORE9NKCkgKiAyIC0gMTtcbiAgICB2NCA9IGdsTWF0cml4LlJBTkRPTSgpICogMiAtIDE7XG4gICAgczIgPSB2MyAqIHYzICsgdjQgKiB2NDtcbiAgfSB3aGlsZSAoczIgPj0gMSk7XG5cbiAgdmFyIGQgPSBNYXRoLnNxcnQoKDEgLSBzMSkgLyBzMik7XG4gIG91dFswXSA9IHNjYWxlICogdjE7XG4gIG91dFsxXSA9IHNjYWxlICogdjI7XG4gIG91dFsyXSA9IHNjYWxlICogdjMgKiBkO1xuICBvdXRbM10gPSBzY2FsZSAqIHY0ICogZDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWM0IHdpdGggYSBtYXQ0LlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cclxuICogQHBhcmFtIHttYXQ0fSBtIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtTWF0NChvdXQsIGEsIG0pIHtcbiAgdmFyIHggPSBhWzBdLFxuICAgICAgeSA9IGFbMV0sXG4gICAgICB6ID0gYVsyXSxcbiAgICAgIHcgPSBhWzNdO1xuICBvdXRbMF0gPSBtWzBdICogeCArIG1bNF0gKiB5ICsgbVs4XSAqIHogKyBtWzEyXSAqIHc7XG4gIG91dFsxXSA9IG1bMV0gKiB4ICsgbVs1XSAqIHkgKyBtWzldICogeiArIG1bMTNdICogdztcbiAgb3V0WzJdID0gbVsyXSAqIHggKyBtWzZdICogeSArIG1bMTBdICogeiArIG1bMTRdICogdztcbiAgb3V0WzNdID0gbVszXSAqIHggKyBtWzddICogeSArIG1bMTFdICogeiArIG1bMTVdICogdztcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWM0IHdpdGggYSBxdWF0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge3F1YXR9IHEgcXVhdGVybmlvbiB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtUXVhdChvdXQsIGEsIHEpIHtcbiAgdmFyIHggPSBhWzBdLFxuICAgICAgeSA9IGFbMV0sXG4gICAgICB6ID0gYVsyXTtcbiAgdmFyIHF4ID0gcVswXSxcbiAgICAgIHF5ID0gcVsxXSxcbiAgICAgIHF6ID0gcVsyXSxcbiAgICAgIHF3ID0gcVszXTsgLy8gY2FsY3VsYXRlIHF1YXQgKiB2ZWNcblxuICB2YXIgaXggPSBxdyAqIHggKyBxeSAqIHogLSBxeiAqIHk7XG4gIHZhciBpeSA9IHF3ICogeSArIHF6ICogeCAtIHF4ICogejtcbiAgdmFyIGl6ID0gcXcgKiB6ICsgcXggKiB5IC0gcXkgKiB4O1xuICB2YXIgaXcgPSAtcXggKiB4IC0gcXkgKiB5IC0gcXogKiB6OyAvLyBjYWxjdWxhdGUgcmVzdWx0ICogaW52ZXJzZSBxdWF0XG5cbiAgb3V0WzBdID0gaXggKiBxdyArIGl3ICogLXF4ICsgaXkgKiAtcXogLSBpeiAqIC1xeTtcbiAgb3V0WzFdID0gaXkgKiBxdyArIGl3ICogLXF5ICsgaXogKiAtcXggLSBpeCAqIC1xejtcbiAgb3V0WzJdID0gaXogKiBxdyArIGl3ICogLXF6ICsgaXggKiAtcXkgLSBpeSAqIC1xeDtcbiAgb3V0WzNdID0gYVszXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWM0IHRvIHplcm9cclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHplcm8ob3V0KSB7XG4gIG91dFswXSA9IDAuMDtcbiAgb3V0WzFdID0gMC4wO1xuICBvdXRbMl0gPSAwLjA7XG4gIG91dFszXSA9IDAuMDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gcmVwcmVzZW50IGFzIGEgc3RyaW5nXHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmVjdG9yXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyKGEpIHtcbiAgcmV0dXJuIFwidmVjNChcIiArIGFbMF0gKyBcIiwgXCIgKyBhWzFdICsgXCIsIFwiICsgYVsyXSArIFwiLCBcIiArIGFbM10gKyBcIilcIjtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSB2ZWN0b3JzIGhhdmUgZXhhY3RseSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBwb3NpdGlvbiAod2hlbiBjb21wYXJlZCB3aXRoID09PSlcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBhIFRoZSBmaXJzdCB2ZWN0b3IuXHJcbiAqIEBwYXJhbSB7dmVjNH0gYiBUaGUgc2Vjb25kIHZlY3Rvci5cclxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIHZlY3RvcnMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXhhY3RFcXVhbHMoYSwgYikge1xuICByZXR1cm4gYVswXSA9PT0gYlswXSAmJiBhWzFdID09PSBiWzFdICYmIGFbMl0gPT09IGJbMl0gJiYgYVszXSA9PT0gYlszXTtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSB2ZWN0b3JzIGhhdmUgYXBwcm94aW1hdGVseSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBwb3NpdGlvbi5cclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBhIFRoZSBmaXJzdCB2ZWN0b3IuXHJcbiAqIEBwYXJhbSB7dmVjNH0gYiBUaGUgc2Vjb25kIHZlY3Rvci5cclxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIHZlY3RvcnMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxzKGEsIGIpIHtcbiAgdmFyIGEwID0gYVswXSxcbiAgICAgIGExID0gYVsxXSxcbiAgICAgIGEyID0gYVsyXSxcbiAgICAgIGEzID0gYVszXTtcbiAgdmFyIGIwID0gYlswXSxcbiAgICAgIGIxID0gYlsxXSxcbiAgICAgIGIyID0gYlsyXSxcbiAgICAgIGIzID0gYlszXTtcbiAgcmV0dXJuIE1hdGguYWJzKGEwIC0gYjApIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEwKSwgTWF0aC5hYnMoYjApKSAmJiBNYXRoLmFicyhhMSAtIGIxKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMSksIE1hdGguYWJzKGIxKSkgJiYgTWF0aC5hYnMoYTIgLSBiMikgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTIpLCBNYXRoLmFicyhiMikpICYmIE1hdGguYWJzKGEzIC0gYjMpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEzKSwgTWF0aC5hYnMoYjMpKTtcbn1cbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuc3VidHJhY3R9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzdWIgPSBzdWJ0cmFjdDtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBtdWwgPSBtdWx0aXBseTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuZGl2aWRlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgZGl2ID0gZGl2aWRlO1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjNC5kaXN0YW5jZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGRpc3QgPSBkaXN0YW5jZTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQuc3F1YXJlZERpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc3FyRGlzdCA9IHNxdWFyZWREaXN0YW5jZTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzQubGVuZ3RofVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbGVuID0gbGVuZ3RoO1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjNC5zcXVhcmVkTGVuZ3RofVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc3FyTGVuID0gc3F1YXJlZExlbmd0aDtcbi8qKlxyXG4gKiBQZXJmb3JtIHNvbWUgb3BlcmF0aW9uIG92ZXIgYW4gYXJyYXkgb2YgdmVjNHMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7QXJyYXl9IGEgdGhlIGFycmF5IG9mIHZlY3RvcnMgdG8gaXRlcmF0ZSBvdmVyXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBzdHJpZGUgTnVtYmVyIG9mIGVsZW1lbnRzIGJldHdlZW4gdGhlIHN0YXJ0IG9mIGVhY2ggdmVjNC4gSWYgMCBhc3N1bWVzIHRpZ2h0bHkgcGFja2VkXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBvZmZzZXQgTnVtYmVyIG9mIGVsZW1lbnRzIHRvIHNraXAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJyYXlcclxuICogQHBhcmFtIHtOdW1iZXJ9IGNvdW50IE51bWJlciBvZiB2ZWM0cyB0byBpdGVyYXRlIG92ZXIuIElmIDAgaXRlcmF0ZXMgb3ZlciBlbnRpcmUgYXJyYXlcclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gRnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCB2ZWN0b3IgaW4gdGhlIGFycmF5XHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbYXJnXSBhZGRpdGlvbmFsIGFyZ3VtZW50IHRvIHBhc3MgdG8gZm5cclxuICogQHJldHVybnMge0FycmF5fSBhXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBmb3JFYWNoID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdmVjID0gY3JlYXRlKCk7XG4gIHJldHVybiBmdW5jdGlvbiAoYSwgc3RyaWRlLCBvZmZzZXQsIGNvdW50LCBmbiwgYXJnKSB7XG4gICAgdmFyIGksIGw7XG5cbiAgICBpZiAoIXN0cmlkZSkge1xuICAgICAgc3RyaWRlID0gNDtcbiAgICB9XG5cbiAgICBpZiAoIW9mZnNldCkge1xuICAgICAgb2Zmc2V0ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoY291bnQpIHtcbiAgICAgIGwgPSBNYXRoLm1pbihjb3VudCAqIHN0cmlkZSArIG9mZnNldCwgYS5sZW5ndGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsID0gYS5sZW5ndGg7XG4gICAgfVxuXG4gICAgZm9yIChpID0gb2Zmc2V0OyBpIDwgbDsgaSArPSBzdHJpZGUpIHtcbiAgICAgIHZlY1swXSA9IGFbaV07XG4gICAgICB2ZWNbMV0gPSBhW2kgKyAxXTtcbiAgICAgIHZlY1syXSA9IGFbaSArIDJdO1xuICAgICAgdmVjWzNdID0gYVtpICsgM107XG4gICAgICBmbih2ZWMsIHZlYywgYXJnKTtcbiAgICAgIGFbaV0gPSB2ZWNbMF07XG4gICAgICBhW2kgKyAxXSA9IHZlY1sxXTtcbiAgICAgIGFbaSArIDJdID0gdmVjWzJdO1xuICAgICAgYVtpICsgM10gPSB2ZWNbM107XG4gICAgfVxuXG4gICAgcmV0dXJuIGE7XG4gIH07XG59KCk7IiwiaW1wb3J0ICogYXMgZ2xNYXRyaXggZnJvbSBcIi4vY29tbW9uLmpzXCI7XG5pbXBvcnQgKiBhcyBtYXQzIGZyb20gXCIuL21hdDMuanNcIjtcbmltcG9ydCAqIGFzIHZlYzMgZnJvbSBcIi4vdmVjMy5qc1wiO1xuaW1wb3J0ICogYXMgdmVjNCBmcm9tIFwiLi92ZWM0LmpzXCI7XG4vKipcclxuICogUXVhdGVybmlvblxyXG4gKiBAbW9kdWxlIHF1YXRcclxuICovXG5cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IGlkZW50aXR5IHF1YXRcclxuICpcclxuICogQHJldHVybnMge3F1YXR9IGEgbmV3IHF1YXRlcm5pb25cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSg0KTtcblxuICBpZiAoZ2xNYXRyaXguQVJSQVlfVFlQRSAhPSBGbG9hdDMyQXJyYXkpIHtcbiAgICBvdXRbMF0gPSAwO1xuICAgIG91dFsxXSA9IDA7XG4gICAgb3V0WzJdID0gMDtcbiAgfVxuXG4gIG91dFszXSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2V0IGEgcXVhdCB0byB0aGUgaWRlbnRpdHkgcXVhdGVybmlvblxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5KG91dCkge1xuICBvdXRbMF0gPSAwO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNldHMgYSBxdWF0IGZyb20gdGhlIGdpdmVuIGFuZ2xlIGFuZCByb3RhdGlvbiBheGlzLFxyXG4gKiB0aGVuIHJldHVybnMgaXQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3ZlYzN9IGF4aXMgdGhlIGF4aXMgYXJvdW5kIHdoaWNoIHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSBpbiByYWRpYW5zXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICoqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0QXhpc0FuZ2xlKG91dCwgYXhpcywgcmFkKSB7XG4gIHJhZCA9IHJhZCAqIDAuNTtcbiAgdmFyIHMgPSBNYXRoLnNpbihyYWQpO1xuICBvdXRbMF0gPSBzICogYXhpc1swXTtcbiAgb3V0WzFdID0gcyAqIGF4aXNbMV07XG4gIG91dFsyXSA9IHMgKiBheGlzWzJdO1xuICBvdXRbM10gPSBNYXRoLmNvcyhyYWQpO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEdldHMgdGhlIHJvdGF0aW9uIGF4aXMgYW5kIGFuZ2xlIGZvciBhIGdpdmVuXHJcbiAqICBxdWF0ZXJuaW9uLiBJZiBhIHF1YXRlcm5pb24gaXMgY3JlYXRlZCB3aXRoXHJcbiAqICBzZXRBeGlzQW5nbGUsIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIHRoZSBzYW1lXHJcbiAqICB2YWx1ZXMgYXMgcHJvdmlkaWVkIGluIHRoZSBvcmlnaW5hbCBwYXJhbWV0ZXIgbGlzdFxyXG4gKiAgT1IgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdmFsdWVzLlxyXG4gKiBFeGFtcGxlOiBUaGUgcXVhdGVybmlvbiBmb3JtZWQgYnkgYXhpcyBbMCwgMCwgMV0gYW5kXHJcbiAqICBhbmdsZSAtOTAgaXMgdGhlIHNhbWUgYXMgdGhlIHF1YXRlcm5pb24gZm9ybWVkIGJ5XHJcbiAqICBbMCwgMCwgMV0gYW5kIDI3MC4gVGhpcyBtZXRob2QgZmF2b3JzIHRoZSBsYXR0ZXIuXHJcbiAqIEBwYXJhbSAge3ZlYzN9IG91dF9heGlzICBWZWN0b3IgcmVjZWl2aW5nIHRoZSBheGlzIG9mIHJvdGF0aW9uXHJcbiAqIEBwYXJhbSAge3F1YXR9IHEgICAgIFF1YXRlcm5pb24gdG8gYmUgZGVjb21wb3NlZFxyXG4gKiBAcmV0dXJuIHtOdW1iZXJ9ICAgICBBbmdsZSwgaW4gcmFkaWFucywgb2YgdGhlIHJvdGF0aW9uXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXhpc0FuZ2xlKG91dF9heGlzLCBxKSB7XG4gIHZhciByYWQgPSBNYXRoLmFjb3MocVszXSkgKiAyLjA7XG4gIHZhciBzID0gTWF0aC5zaW4ocmFkIC8gMi4wKTtcblxuICBpZiAocyA+IGdsTWF0cml4LkVQU0lMT04pIHtcbiAgICBvdXRfYXhpc1swXSA9IHFbMF0gLyBzO1xuICAgIG91dF9heGlzWzFdID0gcVsxXSAvIHM7XG4gICAgb3V0X2F4aXNbMl0gPSBxWzJdIC8gcztcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiBzIGlzIHplcm8sIHJldHVybiBhbnkgYXhpcyAobm8gcm90YXRpb24gLSBheGlzIGRvZXMgbm90IG1hdHRlcilcbiAgICBvdXRfYXhpc1swXSA9IDE7XG4gICAgb3V0X2F4aXNbMV0gPSAwO1xuICAgIG91dF9heGlzWzJdID0gMDtcbiAgfVxuXG4gIHJldHVybiByYWQ7XG59XG4vKipcclxuICogR2V0cyB0aGUgYW5ndWxhciBkaXN0YW5jZSBiZXR3ZWVuIHR3byB1bml0IHF1YXRlcm5pb25zXHJcbiAqXHJcbiAqIEBwYXJhbSAge3F1YXR9IGEgICAgIE9yaWdpbiB1bml0IHF1YXRlcm5pb25cclxuICogQHBhcmFtICB7cXVhdH0gYiAgICAgRGVzdGluYXRpb24gdW5pdCBxdWF0ZXJuaW9uXHJcbiAqIEByZXR1cm4ge051bWJlcn0gICAgIEFuZ2xlLCBpbiByYWRpYW5zLCBiZXR3ZWVuIHRoZSB0d28gcXVhdGVybmlvbnNcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbmdsZShhLCBiKSB7XG4gIHZhciBkb3Rwcm9kdWN0ID0gZG90KGEsIGIpO1xuICByZXR1cm4gTWF0aC5hY29zKDIgKiBkb3Rwcm9kdWN0ICogZG90cHJvZHVjdCAtIDEpO1xufVxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIHF1YXQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7cXVhdH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5KG91dCwgYSwgYikge1xuICB2YXIgYXggPSBhWzBdLFxuICAgICAgYXkgPSBhWzFdLFxuICAgICAgYXogPSBhWzJdLFxuICAgICAgYXcgPSBhWzNdO1xuICB2YXIgYnggPSBiWzBdLFxuICAgICAgYnkgPSBiWzFdLFxuICAgICAgYnogPSBiWzJdLFxuICAgICAgYncgPSBiWzNdO1xuICBvdXRbMF0gPSBheCAqIGJ3ICsgYXcgKiBieCArIGF5ICogYnogLSBheiAqIGJ5O1xuICBvdXRbMV0gPSBheSAqIGJ3ICsgYXcgKiBieSArIGF6ICogYnggLSBheCAqIGJ6O1xuICBvdXRbMl0gPSBheiAqIGJ3ICsgYXcgKiBieiArIGF4ICogYnkgLSBheSAqIGJ4O1xuICBvdXRbM10gPSBhdyAqIGJ3IC0gYXggKiBieCAtIGF5ICogYnkgLSBheiAqIGJ6O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBxdWF0ZXJuaW9uIGJ5IHRoZSBnaXZlbiBhbmdsZSBhYm91dCB0aGUgWCBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHF1YXQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXQgdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByYWQgYW5nbGUgKGluIHJhZGlhbnMpIHRvIHJvdGF0ZVxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlWChvdXQsIGEsIHJhZCkge1xuICByYWQgKj0gMC41O1xuICB2YXIgYXggPSBhWzBdLFxuICAgICAgYXkgPSBhWzFdLFxuICAgICAgYXogPSBhWzJdLFxuICAgICAgYXcgPSBhWzNdO1xuICB2YXIgYnggPSBNYXRoLnNpbihyYWQpLFxuICAgICAgYncgPSBNYXRoLmNvcyhyYWQpO1xuICBvdXRbMF0gPSBheCAqIGJ3ICsgYXcgKiBieDtcbiAgb3V0WzFdID0gYXkgKiBidyArIGF6ICogYng7XG4gIG91dFsyXSA9IGF6ICogYncgLSBheSAqIGJ4O1xuICBvdXRbM10gPSBhdyAqIGJ3IC0gYXggKiBieDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGVzIGEgcXVhdGVybmlvbiBieSB0aGUgZ2l2ZW4gYW5nbGUgYWJvdXQgdGhlIFkgYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCBxdWF0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge251bWJlcn0gcmFkIGFuZ2xlIChpbiByYWRpYW5zKSB0byByb3RhdGVcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZVkob3V0LCBhLCByYWQpIHtcbiAgcmFkICo9IDAuNTtcbiAgdmFyIGF4ID0gYVswXSxcbiAgICAgIGF5ID0gYVsxXSxcbiAgICAgIGF6ID0gYVsyXSxcbiAgICAgIGF3ID0gYVszXTtcbiAgdmFyIGJ5ID0gTWF0aC5zaW4ocmFkKSxcbiAgICAgIGJ3ID0gTWF0aC5jb3MocmFkKTtcbiAgb3V0WzBdID0gYXggKiBidyAtIGF6ICogYnk7XG4gIG91dFsxXSA9IGF5ICogYncgKyBhdyAqIGJ5O1xuICBvdXRbMl0gPSBheiAqIGJ3ICsgYXggKiBieTtcbiAgb3V0WzNdID0gYXcgKiBidyAtIGF5ICogYnk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlcyBhIHF1YXRlcm5pb24gYnkgdGhlIGdpdmVuIGFuZ2xlIGFib3V0IHRoZSBaIGF4aXNcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgcXVhdCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdCB0byByb3RhdGVcclxuICogQHBhcmFtIHtudW1iZXJ9IHJhZCBhbmdsZSAoaW4gcmFkaWFucykgdG8gcm90YXRlXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGVaKG91dCwgYSwgcmFkKSB7XG4gIHJhZCAqPSAwLjU7XG4gIHZhciBheCA9IGFbMF0sXG4gICAgICBheSA9IGFbMV0sXG4gICAgICBheiA9IGFbMl0sXG4gICAgICBhdyA9IGFbM107XG4gIHZhciBieiA9IE1hdGguc2luKHJhZCksXG4gICAgICBidyA9IE1hdGguY29zKHJhZCk7XG4gIG91dFswXSA9IGF4ICogYncgKyBheSAqIGJ6O1xuICBvdXRbMV0gPSBheSAqIGJ3IC0gYXggKiBiejtcbiAgb3V0WzJdID0gYXogKiBidyArIGF3ICogYno7XG4gIG91dFszXSA9IGF3ICogYncgLSBheiAqIGJ6O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIFcgY29tcG9uZW50IG9mIGEgcXVhdCBmcm9tIHRoZSBYLCBZLCBhbmQgWiBjb21wb25lbnRzLlxyXG4gKiBBc3N1bWVzIHRoYXQgcXVhdGVybmlvbiBpcyAxIHVuaXQgaW4gbGVuZ3RoLlxyXG4gKiBBbnkgZXhpc3RpbmcgVyBjb21wb25lbnQgd2lsbCBiZSBpZ25vcmVkLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXQgdG8gY2FsY3VsYXRlIFcgY29tcG9uZW50IG9mXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVXKG91dCwgYSkge1xuICB2YXIgeCA9IGFbMF0sXG4gICAgICB5ID0gYVsxXSxcbiAgICAgIHogPSBhWzJdO1xuICBvdXRbMF0gPSB4O1xuICBvdXRbMV0gPSB5O1xuICBvdXRbMl0gPSB6O1xuICBvdXRbM10gPSBNYXRoLnNxcnQoTWF0aC5hYnMoMS4wIC0geCAqIHggLSB5ICogeSAtIHogKiB6KSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlIHRoZSBleHBvbmVudGlhbCBvZiBhIHVuaXQgcXVhdGVybmlvbi5cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIGNhbGN1bGF0ZSB0aGUgZXhwb25lbnRpYWwgb2ZcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cChvdXQsIGEpIHtcbiAgdmFyIHggPSBhWzBdLFxuICAgICAgeSA9IGFbMV0sXG4gICAgICB6ID0gYVsyXSxcbiAgICAgIHcgPSBhWzNdO1xuICB2YXIgciA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5ICsgeiAqIHopO1xuICB2YXIgZXQgPSBNYXRoLmV4cCh3KTtcbiAgdmFyIHMgPSByID4gMCA/IGV0ICogTWF0aC5zaW4ocikgLyByIDogMDtcbiAgb3V0WzBdID0geCAqIHM7XG4gIG91dFsxXSA9IHkgKiBzO1xuICBvdXRbMl0gPSB6ICogcztcbiAgb3V0WzNdID0gZXQgKiBNYXRoLmNvcyhyKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGUgdGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIGEgdW5pdCBxdWF0ZXJuaW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXQgdG8gY2FsY3VsYXRlIHRoZSBleHBvbmVudGlhbCBvZlxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbG4ob3V0LCBhKSB7XG4gIHZhciB4ID0gYVswXSxcbiAgICAgIHkgPSBhWzFdLFxuICAgICAgeiA9IGFbMl0sXG4gICAgICB3ID0gYVszXTtcbiAgdmFyIHIgPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSArIHogKiB6KTtcbiAgdmFyIHQgPSByID4gMCA/IE1hdGguYXRhbjIociwgdykgLyByIDogMDtcbiAgb3V0WzBdID0geCAqIHQ7XG4gIG91dFsxXSA9IHkgKiB0O1xuICBvdXRbMl0gPSB6ICogdDtcbiAgb3V0WzNdID0gMC41ICogTWF0aC5sb2coeCAqIHggKyB5ICogeSArIHogKiB6ICsgdyAqIHcpO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZSB0aGUgc2NhbGFyIHBvd2VyIG9mIGEgdW5pdCBxdWF0ZXJuaW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXQgdG8gY2FsY3VsYXRlIHRoZSBleHBvbmVudGlhbCBvZlxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIHF1YXRlcm5pb24gYnlcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHBvdyhvdXQsIGEsIGIpIHtcbiAgbG4ob3V0LCBhKTtcbiAgc2NhbGUob3V0LCBvdXQsIGIpO1xuICBleHAob3V0LCBvdXQpO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFBlcmZvcm1zIGEgc3BoZXJpY2FsIGxpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gdHdvIHF1YXRcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3F1YXR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB0IGludGVycG9sYXRpb24gYW1vdW50LCBpbiB0aGUgcmFuZ2UgWzAtMV0sIGJldHdlZW4gdGhlIHR3byBpbnB1dHNcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNsZXJwKG91dCwgYSwgYiwgdCkge1xuICAvLyBiZW5jaG1hcmtzOlxuICAvLyAgICBodHRwOi8vanNwZXJmLmNvbS9xdWF0ZXJuaW9uLXNsZXJwLWltcGxlbWVudGF0aW9uc1xuICB2YXIgYXggPSBhWzBdLFxuICAgICAgYXkgPSBhWzFdLFxuICAgICAgYXogPSBhWzJdLFxuICAgICAgYXcgPSBhWzNdO1xuICB2YXIgYnggPSBiWzBdLFxuICAgICAgYnkgPSBiWzFdLFxuICAgICAgYnogPSBiWzJdLFxuICAgICAgYncgPSBiWzNdO1xuICB2YXIgb21lZ2EsIGNvc29tLCBzaW5vbSwgc2NhbGUwLCBzY2FsZTE7IC8vIGNhbGMgY29zaW5lXG5cbiAgY29zb20gPSBheCAqIGJ4ICsgYXkgKiBieSArIGF6ICogYnogKyBhdyAqIGJ3OyAvLyBhZGp1c3Qgc2lnbnMgKGlmIG5lY2Vzc2FyeSlcblxuICBpZiAoY29zb20gPCAwLjApIHtcbiAgICBjb3NvbSA9IC1jb3NvbTtcbiAgICBieCA9IC1ieDtcbiAgICBieSA9IC1ieTtcbiAgICBieiA9IC1iejtcbiAgICBidyA9IC1idztcbiAgfSAvLyBjYWxjdWxhdGUgY29lZmZpY2llbnRzXG5cblxuICBpZiAoMS4wIC0gY29zb20gPiBnbE1hdHJpeC5FUFNJTE9OKSB7XG4gICAgLy8gc3RhbmRhcmQgY2FzZSAoc2xlcnApXG4gICAgb21lZ2EgPSBNYXRoLmFjb3MoY29zb20pO1xuICAgIHNpbm9tID0gTWF0aC5zaW4ob21lZ2EpO1xuICAgIHNjYWxlMCA9IE1hdGguc2luKCgxLjAgLSB0KSAqIG9tZWdhKSAvIHNpbm9tO1xuICAgIHNjYWxlMSA9IE1hdGguc2luKHQgKiBvbWVnYSkgLyBzaW5vbTtcbiAgfSBlbHNlIHtcbiAgICAvLyBcImZyb21cIiBhbmQgXCJ0b1wiIHF1YXRlcm5pb25zIGFyZSB2ZXJ5IGNsb3NlXG4gICAgLy8gIC4uLiBzbyB3ZSBjYW4gZG8gYSBsaW5lYXIgaW50ZXJwb2xhdGlvblxuICAgIHNjYWxlMCA9IDEuMCAtIHQ7XG4gICAgc2NhbGUxID0gdDtcbiAgfSAvLyBjYWxjdWxhdGUgZmluYWwgdmFsdWVzXG5cblxuICBvdXRbMF0gPSBzY2FsZTAgKiBheCArIHNjYWxlMSAqIGJ4O1xuICBvdXRbMV0gPSBzY2FsZTAgKiBheSArIHNjYWxlMSAqIGJ5O1xuICBvdXRbMl0gPSBzY2FsZTAgKiBheiArIHNjYWxlMSAqIGJ6O1xuICBvdXRbM10gPSBzY2FsZTAgKiBhdyArIHNjYWxlMSAqIGJ3O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIHJhbmRvbSB1bml0IHF1YXRlcm5pb25cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByYW5kb20ob3V0KSB7XG4gIC8vIEltcGxlbWVudGF0aW9uIG9mIGh0dHA6Ly9wbGFubmluZy5jcy51aXVjLmVkdS9ub2RlMTk4Lmh0bWxcbiAgLy8gVE9ETzogQ2FsbGluZyByYW5kb20gMyB0aW1lcyBpcyBwcm9iYWJseSBub3QgdGhlIGZhc3Rlc3Qgc29sdXRpb25cbiAgdmFyIHUxID0gZ2xNYXRyaXguUkFORE9NKCk7XG4gIHZhciB1MiA9IGdsTWF0cml4LlJBTkRPTSgpO1xuICB2YXIgdTMgPSBnbE1hdHJpeC5SQU5ET00oKTtcbiAgdmFyIHNxcnQxTWludXNVMSA9IE1hdGguc3FydCgxIC0gdTEpO1xuICB2YXIgc3FydFUxID0gTWF0aC5zcXJ0KHUxKTtcbiAgb3V0WzBdID0gc3FydDFNaW51c1UxICogTWF0aC5zaW4oMi4wICogTWF0aC5QSSAqIHUyKTtcbiAgb3V0WzFdID0gc3FydDFNaW51c1UxICogTWF0aC5jb3MoMi4wICogTWF0aC5QSSAqIHUyKTtcbiAgb3V0WzJdID0gc3FydFUxICogTWF0aC5zaW4oMi4wICogTWF0aC5QSSAqIHUzKTtcbiAgb3V0WzNdID0gc3FydFUxICogTWF0aC5jb3MoMi4wICogTWF0aC5QSSAqIHUzKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBpbnZlcnNlIG9mIGEgcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXQgdG8gY2FsY3VsYXRlIGludmVyc2Ugb2ZcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGludmVydChvdXQsIGEpIHtcbiAgdmFyIGEwID0gYVswXSxcbiAgICAgIGExID0gYVsxXSxcbiAgICAgIGEyID0gYVsyXSxcbiAgICAgIGEzID0gYVszXTtcbiAgdmFyIGRvdCA9IGEwICogYTAgKyBhMSAqIGExICsgYTIgKiBhMiArIGEzICogYTM7XG4gIHZhciBpbnZEb3QgPSBkb3QgPyAxLjAgLyBkb3QgOiAwOyAvLyBUT0RPOiBXb3VsZCBiZSBmYXN0ZXIgdG8gcmV0dXJuIFswLDAsMCwwXSBpbW1lZGlhdGVseSBpZiBkb3QgPT0gMFxuXG4gIG91dFswXSA9IC1hMCAqIGludkRvdDtcbiAgb3V0WzFdID0gLWExICogaW52RG90O1xuICBvdXRbMl0gPSAtYTIgKiBpbnZEb3Q7XG4gIG91dFszXSA9IGEzICogaW52RG90O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGNvbmp1Z2F0ZSBvZiBhIHF1YXRcclxuICogSWYgdGhlIHF1YXRlcm5pb24gaXMgbm9ybWFsaXplZCwgdGhpcyBmdW5jdGlvbiBpcyBmYXN0ZXIgdGhhbiBxdWF0LmludmVyc2UgYW5kIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdC5cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIGNhbGN1bGF0ZSBjb25qdWdhdGUgb2ZcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmp1Z2F0ZShvdXQsIGEpIHtcbiAgb3V0WzBdID0gLWFbMF07XG4gIG91dFsxXSA9IC1hWzFdO1xuICBvdXRbMl0gPSAtYVsyXTtcbiAgb3V0WzNdID0gYVszXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgcXVhdGVybmlvbiBmcm9tIHRoZSBnaXZlbiAzeDMgcm90YXRpb24gbWF0cml4LlxyXG4gKlxyXG4gKiBOT1RFOiBUaGUgcmVzdWx0YW50IHF1YXRlcm5pb24gaXMgbm90IG5vcm1hbGl6ZWQsIHNvIHlvdSBzaG91bGQgYmUgc3VyZVxyXG4gKiB0byByZW5vcm1hbGl6ZSB0aGUgcXVhdGVybmlvbiB5b3Vyc2VsZiB3aGVyZSBuZWNlc3NhcnkuXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge21hdDN9IG0gcm90YXRpb24gbWF0cml4XHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbU1hdDMob3V0LCBtKSB7XG4gIC8vIEFsZ29yaXRobSBpbiBLZW4gU2hvZW1ha2UncyBhcnRpY2xlIGluIDE5ODcgU0lHR1JBUEggY291cnNlIG5vdGVzXG4gIC8vIGFydGljbGUgXCJRdWF0ZXJuaW9uIENhbGN1bHVzIGFuZCBGYXN0IEFuaW1hdGlvblwiLlxuICB2YXIgZlRyYWNlID0gbVswXSArIG1bNF0gKyBtWzhdO1xuICB2YXIgZlJvb3Q7XG5cbiAgaWYgKGZUcmFjZSA+IDAuMCkge1xuICAgIC8vIHx3fCA+IDEvMiwgbWF5IGFzIHdlbGwgY2hvb3NlIHcgPiAxLzJcbiAgICBmUm9vdCA9IE1hdGguc3FydChmVHJhY2UgKyAxLjApOyAvLyAyd1xuXG4gICAgb3V0WzNdID0gMC41ICogZlJvb3Q7XG4gICAgZlJvb3QgPSAwLjUgLyBmUm9vdDsgLy8gMS8oNHcpXG5cbiAgICBvdXRbMF0gPSAobVs1XSAtIG1bN10pICogZlJvb3Q7XG4gICAgb3V0WzFdID0gKG1bNl0gLSBtWzJdKSAqIGZSb290O1xuICAgIG91dFsyXSA9IChtWzFdIC0gbVszXSkgKiBmUm9vdDtcbiAgfSBlbHNlIHtcbiAgICAvLyB8d3wgPD0gMS8yXG4gICAgdmFyIGkgPSAwO1xuICAgIGlmIChtWzRdID4gbVswXSkgaSA9IDE7XG4gICAgaWYgKG1bOF0gPiBtW2kgKiAzICsgaV0pIGkgPSAyO1xuICAgIHZhciBqID0gKGkgKyAxKSAlIDM7XG4gICAgdmFyIGsgPSAoaSArIDIpICUgMztcbiAgICBmUm9vdCA9IE1hdGguc3FydChtW2kgKiAzICsgaV0gLSBtW2ogKiAzICsgal0gLSBtW2sgKiAzICsga10gKyAxLjApO1xuICAgIG91dFtpXSA9IDAuNSAqIGZSb290O1xuICAgIGZSb290ID0gMC41IC8gZlJvb3Q7XG4gICAgb3V0WzNdID0gKG1baiAqIDMgKyBrXSAtIG1bayAqIDMgKyBqXSkgKiBmUm9vdDtcbiAgICBvdXRbal0gPSAobVtqICogMyArIGldICsgbVtpICogMyArIGpdKSAqIGZSb290O1xuICAgIG91dFtrXSA9IChtW2sgKiAzICsgaV0gKyBtW2kgKiAzICsga10pICogZlJvb3Q7XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBxdWF0ZXJuaW9uIGZyb20gdGhlIGdpdmVuIGV1bGVyIGFuZ2xlIHgsIHksIHouXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3h9IEFuZ2xlIHRvIHJvdGF0ZSBhcm91bmQgWCBheGlzIGluIGRlZ3JlZXMuXHJcbiAqIEBwYXJhbSB7eX0gQW5nbGUgdG8gcm90YXRlIGFyb3VuZCBZIGF4aXMgaW4gZGVncmVlcy5cclxuICogQHBhcmFtIHt6fSBBbmdsZSB0byByb3RhdGUgYXJvdW5kIFogYXhpcyBpbiBkZWdyZWVzLlxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21FdWxlcihvdXQsIHgsIHksIHopIHtcbiAgdmFyIGhhbGZUb1JhZCA9IDAuNSAqIE1hdGguUEkgLyAxODAuMDtcbiAgeCAqPSBoYWxmVG9SYWQ7XG4gIHkgKj0gaGFsZlRvUmFkO1xuICB6ICo9IGhhbGZUb1JhZDtcbiAgdmFyIHN4ID0gTWF0aC5zaW4oeCk7XG4gIHZhciBjeCA9IE1hdGguY29zKHgpO1xuICB2YXIgc3kgPSBNYXRoLnNpbih5KTtcbiAgdmFyIGN5ID0gTWF0aC5jb3MoeSk7XG4gIHZhciBzeiA9IE1hdGguc2luKHopO1xuICB2YXIgY3ogPSBNYXRoLmNvcyh6KTtcbiAgb3V0WzBdID0gc3ggKiBjeSAqIGN6IC0gY3ggKiBzeSAqIHN6O1xuICBvdXRbMV0gPSBjeCAqIHN5ICogY3ogKyBzeCAqIGN5ICogc3o7XG4gIG91dFsyXSA9IGN4ICogY3kgKiBzeiAtIHN4ICogc3kgKiBjejtcbiAgb3V0WzNdID0gY3ggKiBjeSAqIGN6ICsgc3ggKiBzeSAqIHN6O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBxdWF0ZW5pb25cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBhIHZlY3RvciB0byByZXByZXNlbnQgYXMgYSBzdHJpbmdcclxuICogQHJldHVybnMge1N0cmluZ30gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2ZWN0b3JcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzdHIoYSkge1xuICByZXR1cm4gXCJxdWF0KFwiICsgYVswXSArIFwiLCBcIiArIGFbMV0gKyBcIiwgXCIgKyBhWzJdICsgXCIsIFwiICsgYVszXSArIFwiKVwiO1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgcXVhdCBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIHF1YXRlcm5pb25cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXRlcm5pb24gdG8gY2xvbmVcclxuICogQHJldHVybnMge3F1YXR9IGEgbmV3IHF1YXRlcm5pb25cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGNsb25lID0gdmVjNC5jbG9uZTtcbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IHF1YXQgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6IFogY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB3IFcgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHtxdWF0fSBhIG5ldyBxdWF0ZXJuaW9uXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBmcm9tVmFsdWVzID0gdmVjNC5mcm9tVmFsdWVzO1xuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSBxdWF0IHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgc291cmNlIHF1YXRlcm5pb25cclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgY29weSA9IHZlYzQuY29weTtcbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSBxdWF0IHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6IFogY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB3IFcgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHNldCA9IHZlYzQuc2V0O1xuLyoqXHJcbiAqIEFkZHMgdHdvIHF1YXQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7cXVhdH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgYWRkID0gdmVjNC5hZGQ7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBxdWF0Lm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbXVsID0gbXVsdGlwbHk7XG4vKipcclxuICogU2NhbGVzIGEgcXVhdCBieSBhIHNjYWxhciBudW1iZXJcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSB2ZWN0b3IgdG8gc2NhbGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgYW1vdW50IHRvIHNjYWxlIHRoZSB2ZWN0b3IgYnlcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc2NhbGUgPSB2ZWM0LnNjYWxlO1xuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGRvdCBwcm9kdWN0IG9mIHR3byBxdWF0J3NcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7cXVhdH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gZG90IHByb2R1Y3Qgb2YgYSBhbmQgYlxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgZG90ID0gdmVjNC5kb3Q7XG4vKipcclxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byBxdWF0J3NcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3F1YXR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB0IGludGVycG9sYXRpb24gYW1vdW50LCBpbiB0aGUgcmFuZ2UgWzAtMV0sIGJldHdlZW4gdGhlIHR3byBpbnB1dHNcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbGVycCA9IHZlYzQubGVycDtcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBsZW5ndGggb2YgYSBxdWF0XHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB2ZWN0b3IgdG8gY2FsY3VsYXRlIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBsZW5ndGggb2YgYVxyXG4gKi9cblxuZXhwb3J0IHZhciBsZW5ndGggPSB2ZWM0Lmxlbmd0aDtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHF1YXQubGVuZ3RofVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbGVuID0gbGVuZ3RoO1xuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgbGVuZ3RoIG9mIGEgcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBzcXVhcmVkIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGxlbmd0aCBvZiBhXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzcXVhcmVkTGVuZ3RoID0gdmVjNC5zcXVhcmVkTGVuZ3RoO1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgcXVhdC5zcXVhcmVkTGVuZ3RofVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc3FyTGVuID0gc3F1YXJlZExlbmd0aDtcbi8qKlxyXG4gKiBOb3JtYWxpemUgYSBxdWF0XHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdGVybmlvbiB0byBub3JtYWxpemVcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbm9ybWFsaXplID0gdmVjNC5ub3JtYWxpemU7XG4vKipcclxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgcXVhdGVybmlvbnMgaGF2ZSBleGFjdGx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uICh3aGVuIGNvbXBhcmVkIHdpdGggPT09KVxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgVGhlIGZpcnN0IHF1YXRlcm5pb24uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYiBUaGUgc2Vjb25kIHF1YXRlcm5pb24uXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSB2ZWN0b3JzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IHZhciBleGFjdEVxdWFscyA9IHZlYzQuZXhhY3RFcXVhbHM7XG4vKipcclxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgcXVhdGVybmlvbnMgaGF2ZSBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgVGhlIGZpcnN0IHZlY3Rvci5cclxuICogQHBhcmFtIHtxdWF0fSBiIFRoZSBzZWNvbmQgdmVjdG9yLlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmVjdG9ycyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCB2YXIgZXF1YWxzID0gdmVjNC5lcXVhbHM7XG4vKipcclxuICogU2V0cyBhIHF1YXRlcm5pb24gdG8gcmVwcmVzZW50IHRoZSBzaG9ydGVzdCByb3RhdGlvbiBmcm9tIG9uZVxyXG4gKiB2ZWN0b3IgdG8gYW5vdGhlci5cclxuICpcclxuICogQm90aCB2ZWN0b3JzIGFyZSBhc3N1bWVkIHRvIGJlIHVuaXQgbGVuZ3RoLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb24uXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgaW5pdGlhbCB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBkZXN0aW5hdGlvbiB2ZWN0b3JcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cblxuZXhwb3J0IHZhciByb3RhdGlvblRvID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdG1wdmVjMyA9IHZlYzMuY3JlYXRlKCk7XG4gIHZhciB4VW5pdFZlYzMgPSB2ZWMzLmZyb21WYWx1ZXMoMSwgMCwgMCk7XG4gIHZhciB5VW5pdFZlYzMgPSB2ZWMzLmZyb21WYWx1ZXMoMCwgMSwgMCk7XG4gIHJldHVybiBmdW5jdGlvbiAob3V0LCBhLCBiKSB7XG4gICAgdmFyIGRvdCA9IHZlYzMuZG90KGEsIGIpO1xuXG4gICAgaWYgKGRvdCA8IC0wLjk5OTk5OSkge1xuICAgICAgdmVjMy5jcm9zcyh0bXB2ZWMzLCB4VW5pdFZlYzMsIGEpO1xuICAgICAgaWYgKHZlYzMubGVuKHRtcHZlYzMpIDwgMC4wMDAwMDEpIHZlYzMuY3Jvc3ModG1wdmVjMywgeVVuaXRWZWMzLCBhKTtcbiAgICAgIHZlYzMubm9ybWFsaXplKHRtcHZlYzMsIHRtcHZlYzMpO1xuICAgICAgc2V0QXhpc0FuZ2xlKG91dCwgdG1wdmVjMywgTWF0aC5QSSk7XG4gICAgICByZXR1cm4gb3V0O1xuICAgIH0gZWxzZSBpZiAoZG90ID4gMC45OTk5OTkpIHtcbiAgICAgIG91dFswXSA9IDA7XG4gICAgICBvdXRbMV0gPSAwO1xuICAgICAgb3V0WzJdID0gMDtcbiAgICAgIG91dFszXSA9IDE7XG4gICAgICByZXR1cm4gb3V0O1xuICAgIH0gZWxzZSB7XG4gICAgICB2ZWMzLmNyb3NzKHRtcHZlYzMsIGEsIGIpO1xuICAgICAgb3V0WzBdID0gdG1wdmVjM1swXTtcbiAgICAgIG91dFsxXSA9IHRtcHZlYzNbMV07XG4gICAgICBvdXRbMl0gPSB0bXB2ZWMzWzJdO1xuICAgICAgb3V0WzNdID0gMSArIGRvdDtcbiAgICAgIHJldHVybiBub3JtYWxpemUob3V0LCBvdXQpO1xuICAgIH1cbiAgfTtcbn0oKTtcbi8qKlxyXG4gKiBQZXJmb3JtcyBhIHNwaGVyaWNhbCBsaW5lYXIgaW50ZXJwb2xhdGlvbiB3aXRoIHR3byBjb250cm9sIHBvaW50c1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7cXVhdH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtxdWF0fSBjIHRoZSB0aGlyZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7cXVhdH0gZCB0aGUgZm91cnRoIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQsIGluIHRoZSByYW5nZSBbMC0xXSwgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgdmFyIHNxbGVycCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRlbXAxID0gY3JlYXRlKCk7XG4gIHZhciB0ZW1wMiA9IGNyZWF0ZSgpO1xuICByZXR1cm4gZnVuY3Rpb24gKG91dCwgYSwgYiwgYywgZCwgdCkge1xuICAgIHNsZXJwKHRlbXAxLCBhLCBkLCB0KTtcbiAgICBzbGVycCh0ZW1wMiwgYiwgYywgdCk7XG4gICAgc2xlcnAob3V0LCB0ZW1wMSwgdGVtcDIsIDIgKiB0ICogKDEgLSB0KSk7XG4gICAgcmV0dXJuIG91dDtcbiAgfTtcbn0oKTtcbi8qKlxyXG4gKiBTZXRzIHRoZSBzcGVjaWZpZWQgcXVhdGVybmlvbiB3aXRoIHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlblxyXG4gKiBheGVzLiBFYWNoIGF4aXMgaXMgYSB2ZWMzIGFuZCBpcyBleHBlY3RlZCB0byBiZSB1bml0IGxlbmd0aCBhbmRcclxuICogcGVycGVuZGljdWxhciB0byBhbGwgb3RoZXIgc3BlY2lmaWVkIGF4ZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gdmlldyAgdGhlIHZlY3RvciByZXByZXNlbnRpbmcgdGhlIHZpZXdpbmcgZGlyZWN0aW9uXHJcbiAqIEBwYXJhbSB7dmVjM30gcmlnaHQgdGhlIHZlY3RvciByZXByZXNlbnRpbmcgdGhlIGxvY2FsIFwicmlnaHRcIiBkaXJlY3Rpb25cclxuICogQHBhcmFtIHt2ZWMzfSB1cCAgICB0aGUgdmVjdG9yIHJlcHJlc2VudGluZyB0aGUgbG9jYWwgXCJ1cFwiIGRpcmVjdGlvblxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgdmFyIHNldEF4ZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBtYXRyID0gbWF0My5jcmVhdGUoKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChvdXQsIHZpZXcsIHJpZ2h0LCB1cCkge1xuICAgIG1hdHJbMF0gPSByaWdodFswXTtcbiAgICBtYXRyWzNdID0gcmlnaHRbMV07XG4gICAgbWF0cls2XSA9IHJpZ2h0WzJdO1xuICAgIG1hdHJbMV0gPSB1cFswXTtcbiAgICBtYXRyWzRdID0gdXBbMV07XG4gICAgbWF0cls3XSA9IHVwWzJdO1xuICAgIG1hdHJbMl0gPSAtdmlld1swXTtcbiAgICBtYXRyWzVdID0gLXZpZXdbMV07XG4gICAgbWF0cls4XSA9IC12aWV3WzJdO1xuICAgIHJldHVybiBub3JtYWxpemUob3V0LCBmcm9tTWF0MyhvdXQsIG1hdHIpKTtcbiAgfTtcbn0oKTsiLCJpbXBvcnQgKiBhcyBnbE1hdHJpeCBmcm9tIFwiLi9jb21tb24uanNcIjtcbmltcG9ydCAqIGFzIHF1YXQgZnJvbSBcIi4vcXVhdC5qc1wiO1xuaW1wb3J0ICogYXMgbWF0NCBmcm9tIFwiLi9tYXQ0LmpzXCI7XG4vKipcclxuICogRHVhbCBRdWF0ZXJuaW9uPGJyPlxyXG4gKiBGb3JtYXQ6IFtyZWFsLCBkdWFsXTxicj5cclxuICogUXVhdGVybmlvbiBmb3JtYXQ6IFhZWlc8YnI+XHJcbiAqIE1ha2Ugc3VyZSB0byBoYXZlIG5vcm1hbGl6ZWQgZHVhbCBxdWF0ZXJuaW9ucywgb3RoZXJ3aXNlIHRoZSBmdW5jdGlvbnMgbWF5IG5vdCB3b3JrIGFzIGludGVuZGVkLjxicj5cclxuICogQG1vZHVsZSBxdWF0MlxyXG4gKi9cblxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgaWRlbnRpdHkgZHVhbCBxdWF0XHJcbiAqXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gYSBuZXcgZHVhbCBxdWF0ZXJuaW9uIFtyZWFsIC0+IHJvdGF0aW9uLCBkdWFsIC0+IHRyYW5zbGF0aW9uXVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgdmFyIGRxID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoOCk7XG5cbiAgaWYgKGdsTWF0cml4LkFSUkFZX1RZUEUgIT0gRmxvYXQzMkFycmF5KSB7XG4gICAgZHFbMF0gPSAwO1xuICAgIGRxWzFdID0gMDtcbiAgICBkcVsyXSA9IDA7XG4gICAgZHFbNF0gPSAwO1xuICAgIGRxWzVdID0gMDtcbiAgICBkcVs2XSA9IDA7XG4gICAgZHFbN10gPSAwO1xuICB9XG5cbiAgZHFbM10gPSAxO1xuICByZXR1cm4gZHE7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBxdWF0IGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgcXVhdGVybmlvblxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIGR1YWwgcXVhdGVybmlvbiB0byBjbG9uZVxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG5ldyBkdWFsIHF1YXRlcm5pb25cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY2xvbmUoYSkge1xuICB2YXIgZHEgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSg4KTtcbiAgZHFbMF0gPSBhWzBdO1xuICBkcVsxXSA9IGFbMV07XG4gIGRxWzJdID0gYVsyXTtcbiAgZHFbM10gPSBhWzNdO1xuICBkcVs0XSA9IGFbNF07XG4gIGRxWzVdID0gYVs1XTtcbiAgZHFbNl0gPSBhWzZdO1xuICBkcVs3XSA9IGFbN107XG4gIHJldHVybiBkcTtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IGR1YWwgcXVhdCBpbml0aWFsaXplZCB3aXRoIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IHgxIFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5MSBZIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0gejEgWiBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHcxIFcgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4MiBYIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geTIgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHoyIFogY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB3MiBXIGNvbXBvbmVudFxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG5ldyBkdWFsIHF1YXRlcm5pb25cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVZhbHVlcyh4MSwgeTEsIHoxLCB3MSwgeDIsIHkyLCB6MiwgdzIpIHtcbiAgdmFyIGRxID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoOCk7XG4gIGRxWzBdID0geDE7XG4gIGRxWzFdID0geTE7XG4gIGRxWzJdID0gejE7XG4gIGRxWzNdID0gdzE7XG4gIGRxWzRdID0geDI7XG4gIGRxWzVdID0geTI7XG4gIGRxWzZdID0gejI7XG4gIGRxWzddID0gdzI7XG4gIHJldHVybiBkcTtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IGR1YWwgcXVhdCBmcm9tIHRoZSBnaXZlbiB2YWx1ZXMgKHF1YXQgYW5kIHRyYW5zbGF0aW9uKVxyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0geDEgWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkxIFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6MSBaIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdzEgVyBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHgyIFggY29tcG9uZW50ICh0cmFuc2xhdGlvbilcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkyIFkgY29tcG9uZW50ICh0cmFuc2xhdGlvbilcclxuICogQHBhcmFtIHtOdW1iZXJ9IHoyIFogY29tcG9uZW50ICh0cmFuc2xhdGlvbilcclxuICogQHJldHVybnMge3F1YXQyfSBuZXcgZHVhbCBxdWF0ZXJuaW9uXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21Sb3RhdGlvblRyYW5zbGF0aW9uVmFsdWVzKHgxLCB5MSwgejEsIHcxLCB4MiwgeTIsIHoyKSB7XG4gIHZhciBkcSA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDgpO1xuICBkcVswXSA9IHgxO1xuICBkcVsxXSA9IHkxO1xuICBkcVsyXSA9IHoxO1xuICBkcVszXSA9IHcxO1xuICB2YXIgYXggPSB4MiAqIDAuNSxcbiAgICAgIGF5ID0geTIgKiAwLjUsXG4gICAgICBheiA9IHoyICogMC41O1xuICBkcVs0XSA9IGF4ICogdzEgKyBheSAqIHoxIC0gYXogKiB5MTtcbiAgZHFbNV0gPSBheSAqIHcxICsgYXogKiB4MSAtIGF4ICogejE7XG4gIGRxWzZdID0gYXogKiB3MSArIGF4ICogeTEgLSBheSAqIHgxO1xuICBkcVs3XSA9IC1heCAqIHgxIC0gYXkgKiB5MSAtIGF6ICogejE7XG4gIHJldHVybiBkcTtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgZHVhbCBxdWF0IGZyb20gYSBxdWF0ZXJuaW9uIGFuZCBhIHRyYW5zbGF0aW9uXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGR1YWwgcXVhdGVybmlvbiByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3F1YXR9IHEgYSBub3JtYWxpemVkIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHt2ZWMzfSB0IHRyYW5sYXRpb24gdmVjdG9yXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gZHVhbCBxdWF0ZXJuaW9uIHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKG91dCwgcSwgdCkge1xuICB2YXIgYXggPSB0WzBdICogMC41LFxuICAgICAgYXkgPSB0WzFdICogMC41LFxuICAgICAgYXogPSB0WzJdICogMC41LFxuICAgICAgYnggPSBxWzBdLFxuICAgICAgYnkgPSBxWzFdLFxuICAgICAgYnogPSBxWzJdLFxuICAgICAgYncgPSBxWzNdO1xuICBvdXRbMF0gPSBieDtcbiAgb3V0WzFdID0gYnk7XG4gIG91dFsyXSA9IGJ6O1xuICBvdXRbM10gPSBidztcbiAgb3V0WzRdID0gYXggKiBidyArIGF5ICogYnogLSBheiAqIGJ5O1xuICBvdXRbNV0gPSBheSAqIGJ3ICsgYXogKiBieCAtIGF4ICogYno7XG4gIG91dFs2XSA9IGF6ICogYncgKyBheCAqIGJ5IC0gYXkgKiBieDtcbiAgb3V0WzddID0gLWF4ICogYnggLSBheSAqIGJ5IC0gYXogKiBiejtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgZHVhbCBxdWF0IGZyb20gYSB0cmFuc2xhdGlvblxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBkdWFsIHF1YXRlcm5pb24gcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHt2ZWMzfSB0IHRyYW5zbGF0aW9uIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IGR1YWwgcXVhdGVybmlvbiByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVHJhbnNsYXRpb24ob3V0LCB0KSB7XG4gIG91dFswXSA9IDA7XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDE7XG4gIG91dFs0XSA9IHRbMF0gKiAwLjU7XG4gIG91dFs1XSA9IHRbMV0gKiAwLjU7XG4gIG91dFs2XSA9IHRbMl0gKiAwLjU7XG4gIG91dFs3XSA9IDA7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIGR1YWwgcXVhdCBmcm9tIGEgcXVhdGVybmlvblxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBkdWFsIHF1YXRlcm5pb24gcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtxdWF0fSBxIHRoZSBxdWF0ZXJuaW9uXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gZHVhbCBxdWF0ZXJuaW9uIHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21Sb3RhdGlvbihvdXQsIHEpIHtcbiAgb3V0WzBdID0gcVswXTtcbiAgb3V0WzFdID0gcVsxXTtcbiAgb3V0WzJdID0gcVsyXTtcbiAgb3V0WzNdID0gcVszXTtcbiAgb3V0WzRdID0gMDtcbiAgb3V0WzVdID0gMDtcbiAgb3V0WzZdID0gMDtcbiAgb3V0WzddID0gMDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IGR1YWwgcXVhdCBmcm9tIGEgbWF0cml4ICg0eDQpXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IG91dCB0aGUgZHVhbCBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4XHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gZHVhbCBxdWF0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21NYXQ0KG91dCwgYSkge1xuICAvL1RPRE8gT3B0aW1pemUgdGhpc1xuICB2YXIgb3V0ZXIgPSBxdWF0LmNyZWF0ZSgpO1xuICBtYXQ0LmdldFJvdGF0aW9uKG91dGVyLCBhKTtcbiAgdmFyIHQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSgzKTtcbiAgbWF0NC5nZXRUcmFuc2xhdGlvbih0LCBhKTtcbiAgZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24ob3V0LCBvdXRlciwgdCk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIGR1YWwgcXVhdCB0byBhbm90aGVyXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IG91dCB0aGUgcmVjZWl2aW5nIGR1YWwgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIHRoZSBzb3VyY2UgZHVhbCBxdWF0ZXJuaW9uXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHkob3V0LCBhKSB7XG4gIG91dFswXSA9IGFbMF07XG4gIG91dFsxXSA9IGFbMV07XG4gIG91dFsyXSA9IGFbMl07XG4gIG91dFszXSA9IGFbM107XG4gIG91dFs0XSA9IGFbNF07XG4gIG91dFs1XSA9IGFbNV07XG4gIG91dFs2XSA9IGFbNl07XG4gIG91dFs3XSA9IGFbN107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2V0IGEgZHVhbCBxdWF0IHRvIHRoZSBpZGVudGl0eSBkdWFsIHF1YXRlcm5pb25cclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5KG91dCkge1xuICBvdXRbMF0gPSAwO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAxO1xuICBvdXRbNF0gPSAwO1xuICBvdXRbNV0gPSAwO1xuICBvdXRbNl0gPSAwO1xuICBvdXRbN10gPSAwO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNldCB0aGUgY29tcG9uZW50cyBvZiBhIGR1YWwgcXVhdCB0byB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtOdW1iZXJ9IHgxIFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5MSBZIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0gejEgWiBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHcxIFcgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4MiBYIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geTIgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHoyIFogY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB3MiBXIGNvbXBvbmVudFxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXQob3V0LCB4MSwgeTEsIHoxLCB3MSwgeDIsIHkyLCB6MiwgdzIpIHtcbiAgb3V0WzBdID0geDE7XG4gIG91dFsxXSA9IHkxO1xuICBvdXRbMl0gPSB6MTtcbiAgb3V0WzNdID0gdzE7XG4gIG91dFs0XSA9IHgyO1xuICBvdXRbNV0gPSB5MjtcbiAgb3V0WzZdID0gejI7XG4gIG91dFs3XSA9IHcyO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEdldHMgdGhlIHJlYWwgcGFydCBvZiBhIGR1YWwgcXVhdFxyXG4gKiBAcGFyYW0gIHtxdWF0fSBvdXQgcmVhbCBwYXJ0XHJcbiAqIEBwYXJhbSAge3F1YXQyfSBhIER1YWwgUXVhdGVybmlvblxyXG4gKiBAcmV0dXJuIHtxdWF0fSByZWFsIHBhcnRcclxuICovXG5cbmV4cG9ydCB2YXIgZ2V0UmVhbCA9IHF1YXQuY29weTtcbi8qKlxyXG4gKiBHZXRzIHRoZSBkdWFsIHBhcnQgb2YgYSBkdWFsIHF1YXRcclxuICogQHBhcmFtICB7cXVhdH0gb3V0IGR1YWwgcGFydFxyXG4gKiBAcGFyYW0gIHtxdWF0Mn0gYSBEdWFsIFF1YXRlcm5pb25cclxuICogQHJldHVybiB7cXVhdH0gZHVhbCBwYXJ0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RHVhbChvdXQsIGEpIHtcbiAgb3V0WzBdID0gYVs0XTtcbiAgb3V0WzFdID0gYVs1XTtcbiAgb3V0WzJdID0gYVs2XTtcbiAgb3V0WzNdID0gYVs3XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTZXQgdGhlIHJlYWwgY29tcG9uZW50IG9mIGEgZHVhbCBxdWF0IHRvIHRoZSBnaXZlbiBxdWF0ZXJuaW9uXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBxIGEgcXVhdGVybmlvbiByZXByZXNlbnRpbmcgdGhlIHJlYWwgcGFydFxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc2V0UmVhbCA9IHF1YXQuY29weTtcbi8qKlxyXG4gKiBTZXQgdGhlIGR1YWwgY29tcG9uZW50IG9mIGEgZHVhbCBxdWF0IHRvIHRoZSBnaXZlbiBxdWF0ZXJuaW9uXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBxIGEgcXVhdGVybmlvbiByZXByZXNlbnRpbmcgdGhlIGR1YWwgcGFydFxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXREdWFsKG91dCwgcSkge1xuICBvdXRbNF0gPSBxWzBdO1xuICBvdXRbNV0gPSBxWzFdO1xuICBvdXRbNl0gPSBxWzJdO1xuICBvdXRbN10gPSBxWzNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEdldHMgdGhlIHRyYW5zbGF0aW9uIG9mIGEgbm9ybWFsaXplZCBkdWFsIHF1YXRcclxuICogQHBhcmFtICB7dmVjM30gb3V0IHRyYW5zbGF0aW9uXHJcbiAqIEBwYXJhbSAge3F1YXQyfSBhIER1YWwgUXVhdGVybmlvbiB0byBiZSBkZWNvbXBvc2VkXHJcbiAqIEByZXR1cm4ge3ZlYzN9IHRyYW5zbGF0aW9uXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHJhbnNsYXRpb24ob3V0LCBhKSB7XG4gIHZhciBheCA9IGFbNF0sXG4gICAgICBheSA9IGFbNV0sXG4gICAgICBheiA9IGFbNl0sXG4gICAgICBhdyA9IGFbN10sXG4gICAgICBieCA9IC1hWzBdLFxuICAgICAgYnkgPSAtYVsxXSxcbiAgICAgIGJ6ID0gLWFbMl0sXG4gICAgICBidyA9IGFbM107XG4gIG91dFswXSA9IChheCAqIGJ3ICsgYXcgKiBieCArIGF5ICogYnogLSBheiAqIGJ5KSAqIDI7XG4gIG91dFsxXSA9IChheSAqIGJ3ICsgYXcgKiBieSArIGF6ICogYnggLSBheCAqIGJ6KSAqIDI7XG4gIG91dFsyXSA9IChheiAqIGJ3ICsgYXcgKiBieiArIGF4ICogYnkgLSBheSAqIGJ4KSAqIDI7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogVHJhbnNsYXRlcyBhIGR1YWwgcXVhdCBieSB0aGUgZ2l2ZW4gdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IG91dCB0aGUgcmVjZWl2aW5nIGR1YWwgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIHRoZSBkdWFsIHF1YXRlcm5pb24gdG8gdHJhbnNsYXRlXHJcbiAqIEBwYXJhbSB7dmVjM30gdiB2ZWN0b3IgdG8gdHJhbnNsYXRlIGJ5XHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNsYXRlKG91dCwgYSwgdikge1xuICB2YXIgYXgxID0gYVswXSxcbiAgICAgIGF5MSA9IGFbMV0sXG4gICAgICBhejEgPSBhWzJdLFxuICAgICAgYXcxID0gYVszXSxcbiAgICAgIGJ4MSA9IHZbMF0gKiAwLjUsXG4gICAgICBieTEgPSB2WzFdICogMC41LFxuICAgICAgYnoxID0gdlsyXSAqIDAuNSxcbiAgICAgIGF4MiA9IGFbNF0sXG4gICAgICBheTIgPSBhWzVdLFxuICAgICAgYXoyID0gYVs2XSxcbiAgICAgIGF3MiA9IGFbN107XG4gIG91dFswXSA9IGF4MTtcbiAgb3V0WzFdID0gYXkxO1xuICBvdXRbMl0gPSBhejE7XG4gIG91dFszXSA9IGF3MTtcbiAgb3V0WzRdID0gYXcxICogYngxICsgYXkxICogYnoxIC0gYXoxICogYnkxICsgYXgyO1xuICBvdXRbNV0gPSBhdzEgKiBieTEgKyBhejEgKiBieDEgLSBheDEgKiBiejEgKyBheTI7XG4gIG91dFs2XSA9IGF3MSAqIGJ6MSArIGF4MSAqIGJ5MSAtIGF5MSAqIGJ4MSArIGF6MjtcbiAgb3V0WzddID0gLWF4MSAqIGJ4MSAtIGF5MSAqIGJ5MSAtIGF6MSAqIGJ6MSArIGF3MjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGVzIGEgZHVhbCBxdWF0IGFyb3VuZCB0aGUgWCBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IG91dCB0aGUgcmVjZWl2aW5nIGR1YWwgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIHRoZSBkdWFsIHF1YXRlcm5pb24gdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByYWQgaG93IGZhciBzaG91bGQgdGhlIHJvdGF0aW9uIGJlXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlWChvdXQsIGEsIHJhZCkge1xuICB2YXIgYnggPSAtYVswXSxcbiAgICAgIGJ5ID0gLWFbMV0sXG4gICAgICBieiA9IC1hWzJdLFxuICAgICAgYncgPSBhWzNdLFxuICAgICAgYXggPSBhWzRdLFxuICAgICAgYXkgPSBhWzVdLFxuICAgICAgYXogPSBhWzZdLFxuICAgICAgYXcgPSBhWzddLFxuICAgICAgYXgxID0gYXggKiBidyArIGF3ICogYnggKyBheSAqIGJ6IC0gYXogKiBieSxcbiAgICAgIGF5MSA9IGF5ICogYncgKyBhdyAqIGJ5ICsgYXogKiBieCAtIGF4ICogYnosXG4gICAgICBhejEgPSBheiAqIGJ3ICsgYXcgKiBieiArIGF4ICogYnkgLSBheSAqIGJ4LFxuICAgICAgYXcxID0gYXcgKiBidyAtIGF4ICogYnggLSBheSAqIGJ5IC0gYXogKiBiejtcbiAgcXVhdC5yb3RhdGVYKG91dCwgYSwgcmFkKTtcbiAgYnggPSBvdXRbMF07XG4gIGJ5ID0gb3V0WzFdO1xuICBieiA9IG91dFsyXTtcbiAgYncgPSBvdXRbM107XG4gIG91dFs0XSA9IGF4MSAqIGJ3ICsgYXcxICogYnggKyBheTEgKiBieiAtIGF6MSAqIGJ5O1xuICBvdXRbNV0gPSBheTEgKiBidyArIGF3MSAqIGJ5ICsgYXoxICogYnggLSBheDEgKiBiejtcbiAgb3V0WzZdID0gYXoxICogYncgKyBhdzEgKiBieiArIGF4MSAqIGJ5IC0gYXkxICogYng7XG4gIG91dFs3XSA9IGF3MSAqIGJ3IC0gYXgxICogYnggLSBheTEgKiBieSAtIGF6MSAqIGJ6O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBkdWFsIHF1YXQgYXJvdW5kIHRoZSBZIGF4aXNcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgZHVhbCBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgdGhlIGR1YWwgcXVhdGVybmlvbiB0byByb3RhdGVcclxuICogQHBhcmFtIHtudW1iZXJ9IHJhZCBob3cgZmFyIHNob3VsZCB0aGUgcm90YXRpb24gYmVcclxuICogQHJldHVybnMge3F1YXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGVZKG91dCwgYSwgcmFkKSB7XG4gIHZhciBieCA9IC1hWzBdLFxuICAgICAgYnkgPSAtYVsxXSxcbiAgICAgIGJ6ID0gLWFbMl0sXG4gICAgICBidyA9IGFbM10sXG4gICAgICBheCA9IGFbNF0sXG4gICAgICBheSA9IGFbNV0sXG4gICAgICBheiA9IGFbNl0sXG4gICAgICBhdyA9IGFbN10sXG4gICAgICBheDEgPSBheCAqIGJ3ICsgYXcgKiBieCArIGF5ICogYnogLSBheiAqIGJ5LFxuICAgICAgYXkxID0gYXkgKiBidyArIGF3ICogYnkgKyBheiAqIGJ4IC0gYXggKiBieixcbiAgICAgIGF6MSA9IGF6ICogYncgKyBhdyAqIGJ6ICsgYXggKiBieSAtIGF5ICogYngsXG4gICAgICBhdzEgPSBhdyAqIGJ3IC0gYXggKiBieCAtIGF5ICogYnkgLSBheiAqIGJ6O1xuICBxdWF0LnJvdGF0ZVkob3V0LCBhLCByYWQpO1xuICBieCA9IG91dFswXTtcbiAgYnkgPSBvdXRbMV07XG4gIGJ6ID0gb3V0WzJdO1xuICBidyA9IG91dFszXTtcbiAgb3V0WzRdID0gYXgxICogYncgKyBhdzEgKiBieCArIGF5MSAqIGJ6IC0gYXoxICogYnk7XG4gIG91dFs1XSA9IGF5MSAqIGJ3ICsgYXcxICogYnkgKyBhejEgKiBieCAtIGF4MSAqIGJ6O1xuICBvdXRbNl0gPSBhejEgKiBidyArIGF3MSAqIGJ6ICsgYXgxICogYnkgLSBheTEgKiBieDtcbiAgb3V0WzddID0gYXcxICogYncgLSBheDEgKiBieCAtIGF5MSAqIGJ5IC0gYXoxICogYno7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlcyBhIGR1YWwgcXVhdCBhcm91bmQgdGhlIFogYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBvdXQgdGhlIHJlY2VpdmluZyBkdWFsIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0Mn0gYSB0aGUgZHVhbCBxdWF0ZXJuaW9uIHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge251bWJlcn0gcmFkIGhvdyBmYXIgc2hvdWxkIHRoZSByb3RhdGlvbiBiZVxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZVoob3V0LCBhLCByYWQpIHtcbiAgdmFyIGJ4ID0gLWFbMF0sXG4gICAgICBieSA9IC1hWzFdLFxuICAgICAgYnogPSAtYVsyXSxcbiAgICAgIGJ3ID0gYVszXSxcbiAgICAgIGF4ID0gYVs0XSxcbiAgICAgIGF5ID0gYVs1XSxcbiAgICAgIGF6ID0gYVs2XSxcbiAgICAgIGF3ID0gYVs3XSxcbiAgICAgIGF4MSA9IGF4ICogYncgKyBhdyAqIGJ4ICsgYXkgKiBieiAtIGF6ICogYnksXG4gICAgICBheTEgPSBheSAqIGJ3ICsgYXcgKiBieSArIGF6ICogYnggLSBheCAqIGJ6LFxuICAgICAgYXoxID0gYXogKiBidyArIGF3ICogYnogKyBheCAqIGJ5IC0gYXkgKiBieCxcbiAgICAgIGF3MSA9IGF3ICogYncgLSBheCAqIGJ4IC0gYXkgKiBieSAtIGF6ICogYno7XG4gIHF1YXQucm90YXRlWihvdXQsIGEsIHJhZCk7XG4gIGJ4ID0gb3V0WzBdO1xuICBieSA9IG91dFsxXTtcbiAgYnogPSBvdXRbMl07XG4gIGJ3ID0gb3V0WzNdO1xuICBvdXRbNF0gPSBheDEgKiBidyArIGF3MSAqIGJ4ICsgYXkxICogYnogLSBhejEgKiBieTtcbiAgb3V0WzVdID0gYXkxICogYncgKyBhdzEgKiBieSArIGF6MSAqIGJ4IC0gYXgxICogYno7XG4gIG91dFs2XSA9IGF6MSAqIGJ3ICsgYXcxICogYnogKyBheDEgKiBieSAtIGF5MSAqIGJ4O1xuICBvdXRbN10gPSBhdzEgKiBidyAtIGF4MSAqIGJ4IC0gYXkxICogYnkgLSBhejEgKiBiejtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGVzIGEgZHVhbCBxdWF0IGJ5IGEgZ2l2ZW4gcXVhdGVybmlvbiAoYSAqIHEpXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IG91dCB0aGUgcmVjZWl2aW5nIGR1YWwgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIHRoZSBkdWFsIHF1YXRlcm5pb24gdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7cXVhdH0gcSBxdWF0ZXJuaW9uIHRvIHJvdGF0ZSBieVxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZUJ5UXVhdEFwcGVuZChvdXQsIGEsIHEpIHtcbiAgdmFyIHF4ID0gcVswXSxcbiAgICAgIHF5ID0gcVsxXSxcbiAgICAgIHF6ID0gcVsyXSxcbiAgICAgIHF3ID0gcVszXSxcbiAgICAgIGF4ID0gYVswXSxcbiAgICAgIGF5ID0gYVsxXSxcbiAgICAgIGF6ID0gYVsyXSxcbiAgICAgIGF3ID0gYVszXTtcbiAgb3V0WzBdID0gYXggKiBxdyArIGF3ICogcXggKyBheSAqIHF6IC0gYXogKiBxeTtcbiAgb3V0WzFdID0gYXkgKiBxdyArIGF3ICogcXkgKyBheiAqIHF4IC0gYXggKiBxejtcbiAgb3V0WzJdID0gYXogKiBxdyArIGF3ICogcXogKyBheCAqIHF5IC0gYXkgKiBxeDtcbiAgb3V0WzNdID0gYXcgKiBxdyAtIGF4ICogcXggLSBheSAqIHF5IC0gYXogKiBxejtcbiAgYXggPSBhWzRdO1xuICBheSA9IGFbNV07XG4gIGF6ID0gYVs2XTtcbiAgYXcgPSBhWzddO1xuICBvdXRbNF0gPSBheCAqIHF3ICsgYXcgKiBxeCArIGF5ICogcXogLSBheiAqIHF5O1xuICBvdXRbNV0gPSBheSAqIHF3ICsgYXcgKiBxeSArIGF6ICogcXggLSBheCAqIHF6O1xuICBvdXRbNl0gPSBheiAqIHF3ICsgYXcgKiBxeiArIGF4ICogcXkgLSBheSAqIHF4O1xuICBvdXRbN10gPSBhdyAqIHF3IC0gYXggKiBxeCAtIGF5ICogcXkgLSBheiAqIHF6O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBkdWFsIHF1YXQgYnkgYSBnaXZlbiBxdWF0ZXJuaW9uIChxICogYSlcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgZHVhbCBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gcSBxdWF0ZXJuaW9uIHRvIHJvdGF0ZSBieVxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIHRoZSBkdWFsIHF1YXRlcm5pb24gdG8gcm90YXRlXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlQnlRdWF0UHJlcGVuZChvdXQsIHEsIGEpIHtcbiAgdmFyIHF4ID0gcVswXSxcbiAgICAgIHF5ID0gcVsxXSxcbiAgICAgIHF6ID0gcVsyXSxcbiAgICAgIHF3ID0gcVszXSxcbiAgICAgIGJ4ID0gYVswXSxcbiAgICAgIGJ5ID0gYVsxXSxcbiAgICAgIGJ6ID0gYVsyXSxcbiAgICAgIGJ3ID0gYVszXTtcbiAgb3V0WzBdID0gcXggKiBidyArIHF3ICogYnggKyBxeSAqIGJ6IC0gcXogKiBieTtcbiAgb3V0WzFdID0gcXkgKiBidyArIHF3ICogYnkgKyBxeiAqIGJ4IC0gcXggKiBiejtcbiAgb3V0WzJdID0gcXogKiBidyArIHF3ICogYnogKyBxeCAqIGJ5IC0gcXkgKiBieDtcbiAgb3V0WzNdID0gcXcgKiBidyAtIHF4ICogYnggLSBxeSAqIGJ5IC0gcXogKiBiejtcbiAgYnggPSBhWzRdO1xuICBieSA9IGFbNV07XG4gIGJ6ID0gYVs2XTtcbiAgYncgPSBhWzddO1xuICBvdXRbNF0gPSBxeCAqIGJ3ICsgcXcgKiBieCArIHF5ICogYnogLSBxeiAqIGJ5O1xuICBvdXRbNV0gPSBxeSAqIGJ3ICsgcXcgKiBieSArIHF6ICogYnggLSBxeCAqIGJ6O1xuICBvdXRbNl0gPSBxeiAqIGJ3ICsgcXcgKiBieiArIHF4ICogYnkgLSBxeSAqIGJ4O1xuICBvdXRbN10gPSBxdyAqIGJ3IC0gcXggKiBieCAtIHF5ICogYnkgLSBxeiAqIGJ6O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBkdWFsIHF1YXQgYXJvdW5kIGEgZ2l2ZW4gYXhpcy4gRG9lcyB0aGUgbm9ybWFsaXNhdGlvbiBhdXRvbWF0aWNhbGx5XHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IG91dCB0aGUgcmVjZWl2aW5nIGR1YWwgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIHRoZSBkdWFsIHF1YXRlcm5pb24gdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7dmVjM30gYXhpcyB0aGUgYXhpcyB0byByb3RhdGUgYXJvdW5kXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgaG93IGZhciB0aGUgcm90YXRpb24gc2hvdWxkIGJlXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlQXJvdW5kQXhpcyhvdXQsIGEsIGF4aXMsIHJhZCkge1xuICAvL1NwZWNpYWwgY2FzZSBmb3IgcmFkID0gMFxuICBpZiAoTWF0aC5hYnMocmFkKSA8IGdsTWF0cml4LkVQU0lMT04pIHtcbiAgICByZXR1cm4gY29weShvdXQsIGEpO1xuICB9XG5cbiAgdmFyIGF4aXNMZW5ndGggPSBNYXRoLmh5cG90KGF4aXNbMF0sIGF4aXNbMV0sIGF4aXNbMl0pO1xuICByYWQgPSByYWQgKiAwLjU7XG4gIHZhciBzID0gTWF0aC5zaW4ocmFkKTtcbiAgdmFyIGJ4ID0gcyAqIGF4aXNbMF0gLyBheGlzTGVuZ3RoO1xuICB2YXIgYnkgPSBzICogYXhpc1sxXSAvIGF4aXNMZW5ndGg7XG4gIHZhciBieiA9IHMgKiBheGlzWzJdIC8gYXhpc0xlbmd0aDtcbiAgdmFyIGJ3ID0gTWF0aC5jb3MocmFkKTtcbiAgdmFyIGF4MSA9IGFbMF0sXG4gICAgICBheTEgPSBhWzFdLFxuICAgICAgYXoxID0gYVsyXSxcbiAgICAgIGF3MSA9IGFbM107XG4gIG91dFswXSA9IGF4MSAqIGJ3ICsgYXcxICogYnggKyBheTEgKiBieiAtIGF6MSAqIGJ5O1xuICBvdXRbMV0gPSBheTEgKiBidyArIGF3MSAqIGJ5ICsgYXoxICogYnggLSBheDEgKiBiejtcbiAgb3V0WzJdID0gYXoxICogYncgKyBhdzEgKiBieiArIGF4MSAqIGJ5IC0gYXkxICogYng7XG4gIG91dFszXSA9IGF3MSAqIGJ3IC0gYXgxICogYnggLSBheTEgKiBieSAtIGF6MSAqIGJ6O1xuICB2YXIgYXggPSBhWzRdLFxuICAgICAgYXkgPSBhWzVdLFxuICAgICAgYXogPSBhWzZdLFxuICAgICAgYXcgPSBhWzddO1xuICBvdXRbNF0gPSBheCAqIGJ3ICsgYXcgKiBieCArIGF5ICogYnogLSBheiAqIGJ5O1xuICBvdXRbNV0gPSBheSAqIGJ3ICsgYXcgKiBieSArIGF6ICogYnggLSBheCAqIGJ6O1xuICBvdXRbNl0gPSBheiAqIGJ3ICsgYXcgKiBieiArIGF4ICogYnkgLSBheSAqIGJ4O1xuICBvdXRbN10gPSBhdyAqIGJ3IC0gYXggKiBieCAtIGF5ICogYnkgLSBheiAqIGJ6O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEFkZHMgdHdvIGR1YWwgcXVhdCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IG91dCB0aGUgcmVjZWl2aW5nIGR1YWwgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSArIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gKyBiWzFdO1xuICBvdXRbMl0gPSBhWzJdICsgYlsyXTtcbiAgb3V0WzNdID0gYVszXSArIGJbM107XG4gIG91dFs0XSA9IGFbNF0gKyBiWzRdO1xuICBvdXRbNV0gPSBhWzVdICsgYls1XTtcbiAgb3V0WzZdID0gYVs2XSArIGJbNl07XG4gIG91dFs3XSA9IGFbN10gKyBiWzddO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIGR1YWwgcXVhdCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IG91dCB0aGUgcmVjZWl2aW5nIGR1YWwgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHkob3V0LCBhLCBiKSB7XG4gIHZhciBheDAgPSBhWzBdLFxuICAgICAgYXkwID0gYVsxXSxcbiAgICAgIGF6MCA9IGFbMl0sXG4gICAgICBhdzAgPSBhWzNdLFxuICAgICAgYngxID0gYls0XSxcbiAgICAgIGJ5MSA9IGJbNV0sXG4gICAgICBiejEgPSBiWzZdLFxuICAgICAgYncxID0gYls3XSxcbiAgICAgIGF4MSA9IGFbNF0sXG4gICAgICBheTEgPSBhWzVdLFxuICAgICAgYXoxID0gYVs2XSxcbiAgICAgIGF3MSA9IGFbN10sXG4gICAgICBieDAgPSBiWzBdLFxuICAgICAgYnkwID0gYlsxXSxcbiAgICAgIGJ6MCA9IGJbMl0sXG4gICAgICBidzAgPSBiWzNdO1xuICBvdXRbMF0gPSBheDAgKiBidzAgKyBhdzAgKiBieDAgKyBheTAgKiBiejAgLSBhejAgKiBieTA7XG4gIG91dFsxXSA9IGF5MCAqIGJ3MCArIGF3MCAqIGJ5MCArIGF6MCAqIGJ4MCAtIGF4MCAqIGJ6MDtcbiAgb3V0WzJdID0gYXowICogYncwICsgYXcwICogYnowICsgYXgwICogYnkwIC0gYXkwICogYngwO1xuICBvdXRbM10gPSBhdzAgKiBidzAgLSBheDAgKiBieDAgLSBheTAgKiBieTAgLSBhejAgKiBiejA7XG4gIG91dFs0XSA9IGF4MCAqIGJ3MSArIGF3MCAqIGJ4MSArIGF5MCAqIGJ6MSAtIGF6MCAqIGJ5MSArIGF4MSAqIGJ3MCArIGF3MSAqIGJ4MCArIGF5MSAqIGJ6MCAtIGF6MSAqIGJ5MDtcbiAgb3V0WzVdID0gYXkwICogYncxICsgYXcwICogYnkxICsgYXowICogYngxIC0gYXgwICogYnoxICsgYXkxICogYncwICsgYXcxICogYnkwICsgYXoxICogYngwIC0gYXgxICogYnowO1xuICBvdXRbNl0gPSBhejAgKiBidzEgKyBhdzAgKiBiejEgKyBheDAgKiBieTEgLSBheTAgKiBieDEgKyBhejEgKiBidzAgKyBhdzEgKiBiejAgKyBheDEgKiBieTAgLSBheTEgKiBieDA7XG4gIG91dFs3XSA9IGF3MCAqIGJ3MSAtIGF4MCAqIGJ4MSAtIGF5MCAqIGJ5MSAtIGF6MCAqIGJ6MSArIGF3MSAqIGJ3MCAtIGF4MSAqIGJ4MCAtIGF5MSAqIGJ5MCAtIGF6MSAqIGJ6MDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHF1YXQyLm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbXVsID0gbXVsdGlwbHk7XG4vKipcclxuICogU2NhbGVzIGEgZHVhbCBxdWF0IGJ5IGEgc2NhbGFyIG51bWJlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBvdXQgdGhlIHJlY2VpdmluZyBkdWFsIHF1YXRcclxuICogQHBhcmFtIHtxdWF0Mn0gYSB0aGUgZHVhbCBxdWF0IHRvIHNjYWxlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBiIGFtb3VudCB0byBzY2FsZSB0aGUgZHVhbCBxdWF0IGJ5XHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICogYjtcbiAgb3V0WzFdID0gYVsxXSAqIGI7XG4gIG91dFsyXSA9IGFbMl0gKiBiO1xuICBvdXRbM10gPSBhWzNdICogYjtcbiAgb3V0WzRdID0gYVs0XSAqIGI7XG4gIG91dFs1XSA9IGFbNV0gKiBiO1xuICBvdXRbNl0gPSBhWzZdICogYjtcbiAgb3V0WzddID0gYVs3XSAqIGI7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZG90IHByb2R1Y3Qgb2YgdHdvIGR1YWwgcXVhdCdzIChUaGUgZG90IHByb2R1Y3Qgb2YgdGhlIHJlYWwgcGFydHMpXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtxdWF0Mn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gZG90IHByb2R1Y3Qgb2YgYSBhbmQgYlxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgZG90ID0gcXVhdC5kb3Q7XG4vKipcclxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byBkdWFsIHF1YXRzJ3NcclxuICogTk9URTogVGhlIHJlc3VsdGluZyBkdWFsIHF1YXRlcm5pb25zIHdvbid0IGFsd2F5cyBiZSBub3JtYWxpemVkIChUaGUgZXJyb3IgaXMgbW9zdCBub3RpY2VhYmxlIHdoZW4gdCA9IDAuNSlcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgZHVhbCBxdWF0XHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtxdWF0Mn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQsIGluIHRoZSByYW5nZSBbMC0xXSwgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGxlcnAob3V0LCBhLCBiLCB0KSB7XG4gIHZhciBtdCA9IDEgLSB0O1xuICBpZiAoZG90KGEsIGIpIDwgMCkgdCA9IC10O1xuICBvdXRbMF0gPSBhWzBdICogbXQgKyBiWzBdICogdDtcbiAgb3V0WzFdID0gYVsxXSAqIG10ICsgYlsxXSAqIHQ7XG4gIG91dFsyXSA9IGFbMl0gKiBtdCArIGJbMl0gKiB0O1xuICBvdXRbM10gPSBhWzNdICogbXQgKyBiWzNdICogdDtcbiAgb3V0WzRdID0gYVs0XSAqIG10ICsgYls0XSAqIHQ7XG4gIG91dFs1XSA9IGFbNV0gKiBtdCArIGJbNV0gKiB0O1xuICBvdXRbNl0gPSBhWzZdICogbXQgKyBiWzZdICogdDtcbiAgb3V0WzddID0gYVs3XSAqIG10ICsgYls3XSAqIHQ7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgaW52ZXJzZSBvZiBhIGR1YWwgcXVhdC4gSWYgdGhleSBhcmUgbm9ybWFsaXplZCwgY29uanVnYXRlIGlzIGNoZWFwZXJcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgZHVhbCBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgZHVhbCBxdWF0IHRvIGNhbGN1bGF0ZSBpbnZlcnNlIG9mXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJ0KG91dCwgYSkge1xuICB2YXIgc3FsZW4gPSBzcXVhcmVkTGVuZ3RoKGEpO1xuICBvdXRbMF0gPSAtYVswXSAvIHNxbGVuO1xuICBvdXRbMV0gPSAtYVsxXSAvIHNxbGVuO1xuICBvdXRbMl0gPSAtYVsyXSAvIHNxbGVuO1xuICBvdXRbM10gPSBhWzNdIC8gc3FsZW47XG4gIG91dFs0XSA9IC1hWzRdIC8gc3FsZW47XG4gIG91dFs1XSA9IC1hWzVdIC8gc3FsZW47XG4gIG91dFs2XSA9IC1hWzZdIC8gc3FsZW47XG4gIG91dFs3XSA9IGFbN10gLyBzcWxlbjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBjb25qdWdhdGUgb2YgYSBkdWFsIHF1YXRcclxuICogSWYgdGhlIGR1YWwgcXVhdGVybmlvbiBpcyBub3JtYWxpemVkLCB0aGlzIGZ1bmN0aW9uIGlzIGZhc3RlciB0aGFuIHF1YXQyLmludmVyc2UgYW5kIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdC5cclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIHF1YXQgdG8gY2FsY3VsYXRlIGNvbmp1Z2F0ZSBvZlxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmp1Z2F0ZShvdXQsIGEpIHtcbiAgb3V0WzBdID0gLWFbMF07XG4gIG91dFsxXSA9IC1hWzFdO1xuICBvdXRbMl0gPSAtYVsyXTtcbiAgb3V0WzNdID0gYVszXTtcbiAgb3V0WzRdID0gLWFbNF07XG4gIG91dFs1XSA9IC1hWzVdO1xuICBvdXRbNl0gPSAtYVs2XTtcbiAgb3V0WzddID0gYVs3XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBsZW5ndGggb2YgYSBkdWFsIHF1YXRcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gYSBkdWFsIHF1YXQgdG8gY2FsY3VsYXRlIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBsZW5ndGggb2YgYVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbGVuZ3RoID0gcXVhdC5sZW5ndGg7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBxdWF0Mi5sZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBsZW4gPSBsZW5ndGg7XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBsZW5ndGggb2YgYSBkdWFsIHF1YXRcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gYSBkdWFsIHF1YXQgdG8gY2FsY3VsYXRlIHNxdWFyZWQgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgbGVuZ3RoIG9mIGFcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHNxdWFyZWRMZW5ndGggPSBxdWF0LnNxdWFyZWRMZW5ndGg7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBxdWF0Mi5zcXVhcmVkTGVuZ3RofVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc3FyTGVuID0gc3F1YXJlZExlbmd0aDtcbi8qKlxyXG4gKiBOb3JtYWxpemUgYSBkdWFsIHF1YXRcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgZHVhbCBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgZHVhbCBxdWF0ZXJuaW9uIHRvIG5vcm1hbGl6ZVxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemUob3V0LCBhKSB7XG4gIHZhciBtYWduaXR1ZGUgPSBzcXVhcmVkTGVuZ3RoKGEpO1xuXG4gIGlmIChtYWduaXR1ZGUgPiAwKSB7XG4gICAgbWFnbml0dWRlID0gTWF0aC5zcXJ0KG1hZ25pdHVkZSk7XG4gICAgdmFyIGEwID0gYVswXSAvIG1hZ25pdHVkZTtcbiAgICB2YXIgYTEgPSBhWzFdIC8gbWFnbml0dWRlO1xuICAgIHZhciBhMiA9IGFbMl0gLyBtYWduaXR1ZGU7XG4gICAgdmFyIGEzID0gYVszXSAvIG1hZ25pdHVkZTtcbiAgICB2YXIgYjAgPSBhWzRdO1xuICAgIHZhciBiMSA9IGFbNV07XG4gICAgdmFyIGIyID0gYVs2XTtcbiAgICB2YXIgYjMgPSBhWzddO1xuICAgIHZhciBhX2RvdF9iID0gYTAgKiBiMCArIGExICogYjEgKyBhMiAqIGIyICsgYTMgKiBiMztcbiAgICBvdXRbMF0gPSBhMDtcbiAgICBvdXRbMV0gPSBhMTtcbiAgICBvdXRbMl0gPSBhMjtcbiAgICBvdXRbM10gPSBhMztcbiAgICBvdXRbNF0gPSAoYjAgLSBhMCAqIGFfZG90X2IpIC8gbWFnbml0dWRlO1xuICAgIG91dFs1XSA9IChiMSAtIGExICogYV9kb3RfYikgLyBtYWduaXR1ZGU7XG4gICAgb3V0WzZdID0gKGIyIC0gYTIgKiBhX2RvdF9iKSAvIG1hZ25pdHVkZTtcbiAgICBvdXRbN10gPSAoYjMgLSBhMyAqIGFfZG90X2IpIC8gbWFnbml0dWRlO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgZHVhbCBxdWF0ZW5pb25cclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gYSBkdWFsIHF1YXRlcm5pb24gdG8gcmVwcmVzZW50IGFzIGEgc3RyaW5nXHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZHVhbCBxdWF0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyKGEpIHtcbiAgcmV0dXJuIFwicXVhdDIoXCIgKyBhWzBdICsgXCIsIFwiICsgYVsxXSArIFwiLCBcIiArIGFbMl0gKyBcIiwgXCIgKyBhWzNdICsgXCIsIFwiICsgYVs0XSArIFwiLCBcIiArIGFbNV0gKyBcIiwgXCIgKyBhWzZdICsgXCIsIFwiICsgYVs3XSArIFwiKVwiO1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGR1YWwgcXVhdGVybmlvbnMgaGF2ZSBleGFjdGx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uICh3aGVuIGNvbXBhcmVkIHdpdGggPT09KVxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIHRoZSBmaXJzdCBkdWFsIHF1YXRlcm5pb24uXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGIgdGhlIHNlY29uZCBkdWFsIHF1YXRlcm5pb24uXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBkdWFsIHF1YXRlcm5pb25zIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGV4YWN0RXF1YWxzKGEsIGIpIHtcbiAgcmV0dXJuIGFbMF0gPT09IGJbMF0gJiYgYVsxXSA9PT0gYlsxXSAmJiBhWzJdID09PSBiWzJdICYmIGFbM10gPT09IGJbM10gJiYgYVs0XSA9PT0gYls0XSAmJiBhWzVdID09PSBiWzVdICYmIGFbNl0gPT09IGJbNl0gJiYgYVs3XSA9PT0gYls3XTtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBkdWFsIHF1YXRlcm5pb25zIGhhdmUgYXBwcm94aW1hdGVseSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBwb3NpdGlvbi5cclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gYSB0aGUgZmlyc3QgZHVhbCBxdWF0LlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBiIHRoZSBzZWNvbmQgZHVhbCBxdWF0LlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB0aGUgZHVhbCBxdWF0cyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbHMoYSwgYikge1xuICB2YXIgYTAgPSBhWzBdLFxuICAgICAgYTEgPSBhWzFdLFxuICAgICAgYTIgPSBhWzJdLFxuICAgICAgYTMgPSBhWzNdLFxuICAgICAgYTQgPSBhWzRdLFxuICAgICAgYTUgPSBhWzVdLFxuICAgICAgYTYgPSBhWzZdLFxuICAgICAgYTcgPSBhWzddO1xuICB2YXIgYjAgPSBiWzBdLFxuICAgICAgYjEgPSBiWzFdLFxuICAgICAgYjIgPSBiWzJdLFxuICAgICAgYjMgPSBiWzNdLFxuICAgICAgYjQgPSBiWzRdLFxuICAgICAgYjUgPSBiWzVdLFxuICAgICAgYjYgPSBiWzZdLFxuICAgICAgYjcgPSBiWzddO1xuICByZXR1cm4gTWF0aC5hYnMoYTAgLSBiMCkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTApLCBNYXRoLmFicyhiMCkpICYmIE1hdGguYWJzKGExIC0gYjEpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGExKSwgTWF0aC5hYnMoYjEpKSAmJiBNYXRoLmFicyhhMiAtIGIyKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMiksIE1hdGguYWJzKGIyKSkgJiYgTWF0aC5hYnMoYTMgLSBiMykgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTMpLCBNYXRoLmFicyhiMykpICYmIE1hdGguYWJzKGE0IC0gYjQpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGE0KSwgTWF0aC5hYnMoYjQpKSAmJiBNYXRoLmFicyhhNSAtIGI1KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhNSksIE1hdGguYWJzKGI1KSkgJiYgTWF0aC5hYnMoYTYgLSBiNikgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTYpLCBNYXRoLmFicyhiNikpICYmIE1hdGguYWJzKGE3IC0gYjcpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGE3KSwgTWF0aC5hYnMoYjcpKTtcbn0iLCJpbXBvcnQgKiBhcyBnbE1hdHJpeCBmcm9tIFwiLi9jb21tb24uanNcIjtcbi8qKlxyXG4gKiAyIERpbWVuc2lvbmFsIFZlY3RvclxyXG4gKiBAbW9kdWxlIHZlYzJcclxuICovXG5cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3LCBlbXB0eSB2ZWMyXHJcbiAqXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBhIG5ldyAyRCB2ZWN0b3JcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSgyKTtcblxuICBpZiAoZ2xNYXRyaXguQVJSQVlfVFlQRSAhPSBGbG9hdDMyQXJyYXkpIHtcbiAgICBvdXRbMF0gPSAwO1xuICAgIG91dFsxXSA9IDA7XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgdmVjMiBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIGNsb25lXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBhIG5ldyAyRCB2ZWN0b3JcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZShhKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSgyKTtcbiAgb3V0WzBdID0gYVswXTtcbiAgb3V0WzFdID0gYVsxXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IHZlYzIgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBhIG5ldyAyRCB2ZWN0b3JcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVmFsdWVzKHgsIHkpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDIpO1xuICBvdXRbMF0gPSB4O1xuICBvdXRbMV0gPSB5O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSB2ZWMyIHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBzb3VyY2UgdmVjdG9yXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KG91dCwgYSkge1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNldCB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzIgdG8gdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge051bWJlcn0geCBYIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geSBZIGNvbXBvbmVudFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0KG91dCwgeCwgeSkge1xuICBvdXRbMF0gPSB4O1xuICBvdXRbMV0gPSB5O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEFkZHMgdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICsgYlswXTtcbiAgb3V0WzFdID0gYVsxXSArIGJbMV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU3VidHJhY3RzIHZlY3RvciBiIGZyb20gdmVjdG9yIGFcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnRyYWN0KG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdIC0gYlswXTtcbiAgb3V0WzFdID0gYVsxXSAtIGJbMV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTXVsdGlwbGllcyB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBseShvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAqIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gKiBiWzFdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIERpdmlkZXMgdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZGl2aWRlKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdIC8gYlswXTtcbiAgb3V0WzFdID0gYVsxXSAvIGJbMV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTWF0aC5jZWlsIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIGNlaWxcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNlaWwob3V0LCBhKSB7XG4gIG91dFswXSA9IE1hdGguY2VpbChhWzBdKTtcbiAgb3V0WzFdID0gTWF0aC5jZWlsKGFbMV0pO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE1hdGguZmxvb3IgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB2ZWN0b3IgdG8gZmxvb3JcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZsb29yKG91dCwgYSkge1xuICBvdXRbMF0gPSBNYXRoLmZsb29yKGFbMF0pO1xuICBvdXRbMV0gPSBNYXRoLmZsb29yKGFbMV0pO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgdGhlIG1pbmltdW0gb2YgdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbWluKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBNYXRoLm1pbihhWzBdLCBiWzBdKTtcbiAgb3V0WzFdID0gTWF0aC5taW4oYVsxXSwgYlsxXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyB0aGUgbWF4aW11bSBvZiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtYXgob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IE1hdGgubWF4KGFbMF0sIGJbMF0pO1xuICBvdXRbMV0gPSBNYXRoLm1heChhWzFdLCBiWzFdKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBNYXRoLnJvdW5kIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIHJvdW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3VuZChvdXQsIGEpIHtcbiAgb3V0WzBdID0gTWF0aC5yb3VuZChhWzBdKTtcbiAgb3V0WzFdID0gTWF0aC5yb3VuZChhWzFdKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTY2FsZXMgYSB2ZWMyIGJ5IGEgc2NhbGFyIG51bWJlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHZlY3RvciB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIHZlY3RvciBieVxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2NhbGUob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKiBiO1xuICBvdXRbMV0gPSBhWzFdICogYjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBBZGRzIHR3byB2ZWMyJ3MgYWZ0ZXIgc2NhbGluZyB0aGUgc2Vjb25kIG9wZXJhbmQgYnkgYSBzY2FsYXIgdmFsdWVcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHNjYWxlIHRoZSBhbW91bnQgdG8gc2NhbGUgYiBieSBiZWZvcmUgYWRkaW5nXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzY2FsZUFuZEFkZChvdXQsIGEsIGIsIHNjYWxlKSB7XG4gIG91dFswXSA9IGFbMF0gKyBiWzBdICogc2NhbGU7XG4gIG91dFsxXSA9IGFbMV0gKyBiWzFdICogc2NhbGU7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkaXN0YW5jZSBiZXR3ZWVuIGEgYW5kIGJcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBkaXN0YW5jZShhLCBiKSB7XG4gIHZhciB4ID0gYlswXSAtIGFbMF0sXG4gICAgICB5ID0gYlsxXSAtIGFbMV07XG4gIHJldHVybiBNYXRoLmh5cG90KHgsIHkpO1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgZXVjbGlkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGRpc3RhbmNlIGJldHdlZW4gYSBhbmQgYlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNxdWFyZWREaXN0YW5jZShhLCBiKSB7XG4gIHZhciB4ID0gYlswXSAtIGFbMF0sXG4gICAgICB5ID0gYlsxXSAtIGFbMV07XG4gIHJldHVybiB4ICogeCArIHkgKiB5O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGxlbmd0aCBvZiBhIHZlYzJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBhIHZlY3RvciB0byBjYWxjdWxhdGUgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGxlbmd0aCBvZiBhXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbGVuZ3RoKGEpIHtcbiAgdmFyIHggPSBhWzBdLFxuICAgICAgeSA9IGFbMV07XG4gIHJldHVybiBNYXRoLmh5cG90KHgsIHkpO1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgbGVuZ3RoIG9mIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBzcXVhcmVkIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGxlbmd0aCBvZiBhXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3F1YXJlZExlbmd0aChhKSB7XG4gIHZhciB4ID0gYVswXSxcbiAgICAgIHkgPSBhWzFdO1xuICByZXR1cm4geCAqIHggKyB5ICogeTtcbn1cbi8qKlxyXG4gKiBOZWdhdGVzIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIG5lZ2F0ZVxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbmVnYXRlKG91dCwgYSkge1xuICBvdXRbMF0gPSAtYVswXTtcbiAgb3V0WzFdID0gLWFbMV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyB0aGUgaW52ZXJzZSBvZiB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHZlY3RvciB0byBpbnZlcnRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGludmVyc2Uob3V0LCBhKSB7XG4gIG91dFswXSA9IDEuMCAvIGFbMF07XG4gIG91dFsxXSA9IDEuMCAvIGFbMV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTm9ybWFsaXplIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIG5vcm1hbGl6ZVxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplKG91dCwgYSkge1xuICB2YXIgeCA9IGFbMF0sXG4gICAgICB5ID0gYVsxXTtcbiAgdmFyIGxlbiA9IHggKiB4ICsgeSAqIHk7XG5cbiAgaWYgKGxlbiA+IDApIHtcbiAgICAvL1RPRE86IGV2YWx1YXRlIHVzZSBvZiBnbG1faW52c3FydCBoZXJlP1xuICAgIGxlbiA9IDEgLyBNYXRoLnNxcnQobGVuKTtcbiAgfVxuXG4gIG91dFswXSA9IGFbMF0gKiBsZW47XG4gIG91dFsxXSA9IGFbMV0gKiBsZW47XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZG90IHByb2R1Y3Qgb2YgdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkb3QgcHJvZHVjdCBvZiBhIGFuZCBiXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZG90KGEsIGIpIHtcbiAgcmV0dXJuIGFbMF0gKiBiWzBdICsgYVsxXSAqIGJbMV07XG59XG4vKipcclxuICogQ29tcHV0ZXMgdGhlIGNyb3NzIHByb2R1Y3Qgb2YgdHdvIHZlYzInc1xyXG4gKiBOb3RlIHRoYXQgdGhlIGNyb3NzIHByb2R1Y3QgbXVzdCBieSBkZWZpbml0aW9uIHByb2R1Y2UgYSAzRCB2ZWN0b3JcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyb3NzKG91dCwgYSwgYikge1xuICB2YXIgeiA9IGFbMF0gKiBiWzFdIC0gYVsxXSAqIGJbMF07XG4gIG91dFswXSA9IG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IHo7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUGVyZm9ybXMgYSBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byB2ZWMyJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQsIGluIHRoZSByYW5nZSBbMC0xXSwgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbGVycChvdXQsIGEsIGIsIHQpIHtcbiAgdmFyIGF4ID0gYVswXSxcbiAgICAgIGF5ID0gYVsxXTtcbiAgb3V0WzBdID0gYXggKyB0ICogKGJbMF0gLSBheCk7XG4gIG91dFsxXSA9IGF5ICsgdCAqIChiWzFdIC0gYXkpO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIHJhbmRvbSB2ZWN0b3Igd2l0aCB0aGUgZ2l2ZW4gc2NhbGVcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IFtzY2FsZV0gTGVuZ3RoIG9mIHRoZSByZXN1bHRpbmcgdmVjdG9yLiBJZiBvbW1pdHRlZCwgYSB1bml0IHZlY3RvciB3aWxsIGJlIHJldHVybmVkXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByYW5kb20ob3V0LCBzY2FsZSkge1xuICBzY2FsZSA9IHNjYWxlIHx8IDEuMDtcbiAgdmFyIHIgPSBnbE1hdHJpeC5SQU5ET00oKSAqIDIuMCAqIE1hdGguUEk7XG4gIG91dFswXSA9IE1hdGguY29zKHIpICogc2NhbGU7XG4gIG91dFsxXSA9IE1hdGguc2luKHIpICogc2NhbGU7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogVHJhbnNmb3JtcyB0aGUgdmVjMiB3aXRoIGEgbWF0MlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cclxuICogQHBhcmFtIHttYXQyfSBtIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtTWF0MihvdXQsIGEsIG0pIHtcbiAgdmFyIHggPSBhWzBdLFxuICAgICAgeSA9IGFbMV07XG4gIG91dFswXSA9IG1bMF0gKiB4ICsgbVsyXSAqIHk7XG4gIG91dFsxXSA9IG1bMV0gKiB4ICsgbVszXSAqIHk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogVHJhbnNmb3JtcyB0aGUgdmVjMiB3aXRoIGEgbWF0MmRcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSB2ZWN0b3IgdG8gdHJhbnNmb3JtXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1NYXQyZChvdXQsIGEsIG0pIHtcbiAgdmFyIHggPSBhWzBdLFxuICAgICAgeSA9IGFbMV07XG4gIG91dFswXSA9IG1bMF0gKiB4ICsgbVsyXSAqIHkgKyBtWzRdO1xuICBvdXRbMV0gPSBtWzFdICogeCArIG1bM10gKiB5ICsgbVs1XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMyIHdpdGggYSBtYXQzXHJcbiAqIDNyZCB2ZWN0b3IgY29tcG9uZW50IGlzIGltcGxpY2l0bHkgJzEnXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDN9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1NYXQzKG91dCwgYSwgbSkge1xuICB2YXIgeCA9IGFbMF0sXG4gICAgICB5ID0gYVsxXTtcbiAgb3V0WzBdID0gbVswXSAqIHggKyBtWzNdICogeSArIG1bNl07XG4gIG91dFsxXSA9IG1bMV0gKiB4ICsgbVs0XSAqIHkgKyBtWzddO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzIgd2l0aCBhIG1hdDRcclxuICogM3JkIHZlY3RvciBjb21wb25lbnQgaXMgaW1wbGljaXRseSAnMCdcclxuICogNHRoIHZlY3RvciBjb21wb25lbnQgaXMgaW1wbGljaXRseSAnMSdcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSB2ZWN0b3IgdG8gdHJhbnNmb3JtXHJcbiAqIEBwYXJhbSB7bWF0NH0gbSBtYXRyaXggdG8gdHJhbnNmb3JtIHdpdGhcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybU1hdDQob3V0LCBhLCBtKSB7XG4gIHZhciB4ID0gYVswXTtcbiAgdmFyIHkgPSBhWzFdO1xuICBvdXRbMF0gPSBtWzBdICogeCArIG1bNF0gKiB5ICsgbVsxMl07XG4gIG91dFsxXSA9IG1bMV0gKiB4ICsgbVs1XSAqIHkgKyBtWzEzXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGUgYSAyRCB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgVGhlIHJlY2VpdmluZyB2ZWMyXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSBUaGUgdmVjMiBwb2ludCB0byByb3RhdGVcclxuICogQHBhcmFtIHt2ZWMyfSBiIFRoZSBvcmlnaW4gb2YgdGhlIHJvdGF0aW9uXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgVGhlIGFuZ2xlIG9mIHJvdGF0aW9uIGluIHJhZGlhbnNcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZShvdXQsIGEsIGIsIHJhZCkge1xuICAvL1RyYW5zbGF0ZSBwb2ludCB0byB0aGUgb3JpZ2luXG4gIHZhciBwMCA9IGFbMF0gLSBiWzBdLFxuICAgICAgcDEgPSBhWzFdIC0gYlsxXSxcbiAgICAgIHNpbkMgPSBNYXRoLnNpbihyYWQpLFxuICAgICAgY29zQyA9IE1hdGguY29zKHJhZCk7IC8vcGVyZm9ybSByb3RhdGlvbiBhbmQgdHJhbnNsYXRlIHRvIGNvcnJlY3QgcG9zaXRpb25cblxuICBvdXRbMF0gPSBwMCAqIGNvc0MgLSBwMSAqIHNpbkMgKyBiWzBdO1xuICBvdXRbMV0gPSBwMCAqIHNpbkMgKyBwMSAqIGNvc0MgKyBiWzFdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEdldCB0aGUgYW5nbGUgYmV0d2VlbiB0d28gMkQgdmVjdG9yc1xyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgVGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIFRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgYW5nbGUgaW4gcmFkaWFuc1xyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGFuZ2xlKGEsIGIpIHtcbiAgdmFyIHgxID0gYVswXSxcbiAgICAgIHkxID0gYVsxXSxcbiAgICAgIHgyID0gYlswXSxcbiAgICAgIHkyID0gYlsxXSxcbiAgICAgIC8vIG1hZyBpcyB0aGUgcHJvZHVjdCBvZiB0aGUgbWFnbml0dWRlcyBvZiBhIGFuZCBiXG4gIG1hZyA9IE1hdGguc3FydCh4MSAqIHgxICsgeTEgKiB5MSkgKiBNYXRoLnNxcnQoeDIgKiB4MiArIHkyICogeTIpLFxuICAgICAgLy8gbWFnICYmLi4gc2hvcnQgY2lyY3VpdHMgaWYgbWFnID09IDBcbiAgY29zaW5lID0gbWFnICYmICh4MSAqIHgyICsgeTEgKiB5MikgLyBtYWc7IC8vIE1hdGgubWluKE1hdGgubWF4KGNvc2luZSwgLTEpLCAxKSBjbGFtcHMgdGhlIGNvc2luZSBiZXR3ZWVuIC0xIGFuZCAxXG5cbiAgcmV0dXJuIE1hdGguYWNvcyhNYXRoLm1pbihNYXRoLm1heChjb3NpbmUsIC0xKSwgMSkpO1xufVxuLyoqXHJcbiAqIFNldCB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzIgdG8gemVyb1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gemVybyhvdXQpIHtcbiAgb3V0WzBdID0gMC4wO1xuICBvdXRbMV0gPSAwLjA7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIHJlcHJlc2VudCBhcyBhIHN0cmluZ1xyXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZlY3RvclxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cihhKSB7XG4gIHJldHVybiBcInZlYzIoXCIgKyBhWzBdICsgXCIsIFwiICsgYVsxXSArIFwiKVwiO1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHZlY3RvcnMgZXhhY3RseSBoYXZlIHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uICh3aGVuIGNvbXBhcmVkIHdpdGggPT09KVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgVGhlIGZpcnN0IHZlY3Rvci5cclxuICogQHBhcmFtIHt2ZWMyfSBiIFRoZSBzZWNvbmQgdmVjdG9yLlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmVjdG9ycyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBleGFjdEVxdWFscyhhLCBiKSB7XG4gIHJldHVybiBhWzBdID09PSBiWzBdICYmIGFbMV0gPT09IGJbMV07XG59XG4vKipcclxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgdmVjdG9ycyBoYXZlIGFwcHJveGltYXRlbHkgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgcG9zaXRpb24uXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSBUaGUgZmlyc3QgdmVjdG9yLlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgVGhlIHNlY29uZCB2ZWN0b3IuXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSB2ZWN0b3JzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFscyhhLCBiKSB7XG4gIHZhciBhMCA9IGFbMF0sXG4gICAgICBhMSA9IGFbMV07XG4gIHZhciBiMCA9IGJbMF0sXG4gICAgICBiMSA9IGJbMV07XG4gIHJldHVybiBNYXRoLmFicyhhMCAtIGIwKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMCksIE1hdGguYWJzKGIwKSkgJiYgTWF0aC5hYnMoYTEgLSBiMSkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTEpLCBNYXRoLmFicyhiMSkpO1xufVxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMi5sZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBsZW4gPSBsZW5ndGg7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLnN1YnRyYWN0fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc3ViID0gc3VidHJhY3Q7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbXVsID0gbXVsdGlwbHk7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLmRpdmlkZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGRpdiA9IGRpdmlkZTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuZGlzdGFuY2V9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBkaXN0ID0gZGlzdGFuY2U7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLnNxdWFyZWREaXN0YW5jZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHNxckRpc3QgPSBzcXVhcmVkRGlzdGFuY2U7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLnNxdWFyZWRMZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzcXJMZW4gPSBzcXVhcmVkTGVuZ3RoO1xuLyoqXHJcbiAqIFBlcmZvcm0gc29tZSBvcGVyYXRpb24gb3ZlciBhbiBhcnJheSBvZiB2ZWMycy5cclxuICpcclxuICogQHBhcmFtIHtBcnJheX0gYSB0aGUgYXJyYXkgb2YgdmVjdG9ycyB0byBpdGVyYXRlIG92ZXJcclxuICogQHBhcmFtIHtOdW1iZXJ9IHN0cmlkZSBOdW1iZXIgb2YgZWxlbWVudHMgYmV0d2VlbiB0aGUgc3RhcnQgb2YgZWFjaCB2ZWMyLiBJZiAwIGFzc3VtZXMgdGlnaHRseSBwYWNrZWRcclxuICogQHBhcmFtIHtOdW1iZXJ9IG9mZnNldCBOdW1iZXIgb2YgZWxlbWVudHMgdG8gc2tpcCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheVxyXG4gKiBAcGFyYW0ge051bWJlcn0gY291bnQgTnVtYmVyIG9mIHZlYzJzIHRvIGl0ZXJhdGUgb3Zlci4gSWYgMCBpdGVyYXRlcyBvdmVyIGVudGlyZSBhcnJheVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBGdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIHZlY3RvciBpbiB0aGUgYXJyYXlcclxuICogQHBhcmFtIHtPYmplY3R9IFthcmddIGFkZGl0aW9uYWwgYXJndW1lbnQgdG8gcGFzcyB0byBmblxyXG4gKiBAcmV0dXJucyB7QXJyYXl9IGFcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGZvckVhY2ggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB2ZWMgPSBjcmVhdGUoKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChhLCBzdHJpZGUsIG9mZnNldCwgY291bnQsIGZuLCBhcmcpIHtcbiAgICB2YXIgaSwgbDtcblxuICAgIGlmICghc3RyaWRlKSB7XG4gICAgICBzdHJpZGUgPSAyO1xuICAgIH1cblxuICAgIGlmICghb2Zmc2V0KSB7XG4gICAgICBvZmZzZXQgPSAwO1xuICAgIH1cblxuICAgIGlmIChjb3VudCkge1xuICAgICAgbCA9IE1hdGgubWluKGNvdW50ICogc3RyaWRlICsgb2Zmc2V0LCBhLmxlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGwgPSBhLmxlbmd0aDtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSBvZmZzZXQ7IGkgPCBsOyBpICs9IHN0cmlkZSkge1xuICAgICAgdmVjWzBdID0gYVtpXTtcbiAgICAgIHZlY1sxXSA9IGFbaSArIDFdO1xuICAgICAgZm4odmVjLCB2ZWMsIGFyZyk7XG4gICAgICBhW2ldID0gdmVjWzBdO1xuICAgICAgYVtpICsgMV0gPSB2ZWNbMV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGE7XG4gIH07XG59KCk7IiwiLy8gQGZsb3dcblxuaW1wb3J0IFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGVfbGF5ZXInO1xuXG5pbXBvcnQgQ2lyY2xlQnVja2V0IGZyb20gJy4uLy4uL2RhdGEvYnVja2V0L2NpcmNsZV9idWNrZXQnO1xuaW1wb3J0IHtwb2x5Z29uSW50ZXJzZWN0c0J1ZmZlcmVkUG9pbnR9IGZyb20gJy4uLy4uL3V0aWwvaW50ZXJzZWN0aW9uX3Rlc3RzJztcbmltcG9ydCB7Z2V0TWF4aW11bVBhaW50VmFsdWUsIHRyYW5zbGF0ZURpc3RhbmNlLCB0cmFuc2xhdGV9IGZyb20gJy4uL3F1ZXJ5X3V0aWxzJztcbmltcG9ydCBwcm9wZXJ0aWVzIGZyb20gJy4vY2lyY2xlX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuaW1wb3J0IHtUcmFuc2l0aW9uYWJsZSwgVHJhbnNpdGlvbmluZywgTGF5b3V0LCBQb3NzaWJseUV2YWx1YXRlZH0gZnJvbSAnLi4vcHJvcGVydGllcyc7XG5pbXBvcnQge3ZlYzR9IGZyb20gJ2dsLW1hdHJpeCc7XG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbmltcG9ydCB0eXBlIHtGZWF0dXJlU3RhdGV9IGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSBUcmFuc2Zvcm0gZnJvbSAnLi4vLi4vZ2VvL3RyYW5zZm9ybSc7XG5pbXBvcnQgdHlwZSB7QnVja2V0LCBCdWNrZXRQYXJhbWV0ZXJzfSBmcm9tICcuLi8uLi9kYXRhL2J1Y2tldCc7XG5pbXBvcnQgdHlwZSB7TGF5b3V0UHJvcHMsIFBhaW50UHJvcHN9IGZyb20gJy4vY2lyY2xlX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuaW1wb3J0IHR5cGUge0xheWVyU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmNsYXNzIENpcmNsZVN0eWxlTGF5ZXIgZXh0ZW5kcyBTdHlsZUxheWVyIHtcbiAgICBfdW5ldmFsdWF0ZWRMYXlvdXQ6IExheW91dDxMYXlvdXRQcm9wcz47XG4gICAgbGF5b3V0OiBQb3NzaWJseUV2YWx1YXRlZDxMYXlvdXRQcm9wcz47XG5cbiAgICBfdHJhbnNpdGlvbmFibGVQYWludDogVHJhbnNpdGlvbmFibGU8UGFpbnRQcm9wcz47XG4gICAgX3RyYW5zaXRpb25pbmdQYWludDogVHJhbnNpdGlvbmluZzxQYWludFByb3BzPjtcbiAgICBwYWludDogUG9zc2libHlFdmFsdWF0ZWQ8UGFpbnRQcm9wcz47XG5cbiAgICBjb25zdHJ1Y3RvcihsYXllcjogTGF5ZXJTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHN1cGVyKGxheWVyLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICBjcmVhdGVCdWNrZXQocGFyYW1ldGVyczogQnVja2V0UGFyYW1ldGVyczwqPikge1xuICAgICAgICByZXR1cm4gbmV3IENpcmNsZUJ1Y2tldChwYXJhbWV0ZXJzKTtcbiAgICB9XG5cbiAgICBxdWVyeVJhZGl1cyhidWNrZXQ6IEJ1Y2tldCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGNpcmNsZUJ1Y2tldDogQ2lyY2xlQnVja2V0PENpcmNsZVN0eWxlTGF5ZXI+ID0gKGJ1Y2tldDogYW55KTtcbiAgICAgICAgcmV0dXJuIGdldE1heGltdW1QYWludFZhbHVlKCdjaXJjbGUtcmFkaXVzJywgdGhpcywgY2lyY2xlQnVja2V0KSArXG4gICAgICAgICAgICBnZXRNYXhpbXVtUGFpbnRWYWx1ZSgnY2lyY2xlLXN0cm9rZS13aWR0aCcsIHRoaXMsIGNpcmNsZUJ1Y2tldCkgK1xuICAgICAgICAgICAgdHJhbnNsYXRlRGlzdGFuY2UodGhpcy5wYWludC5nZXQoJ2NpcmNsZS10cmFuc2xhdGUnKSk7XG4gICAgfVxuXG4gICAgcXVlcnlJbnRlcnNlY3RzRmVhdHVyZShxdWVyeUdlb21ldHJ5OiBBcnJheTxQb2ludD4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlOiBWZWN0b3JUaWxlRmVhdHVyZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVTdGF0ZTogRmVhdHVyZVN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnk6IEFycmF5PEFycmF5PFBvaW50Pj4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB6b29tOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IFRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsc1RvVGlsZVVuaXRzOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbFBvc01hdHJpeDogRmxvYXQzMkFycmF5KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZWRQb2x5Z29uID0gdHJhbnNsYXRlKHF1ZXJ5R2VvbWV0cnksXG4gICAgICAgICAgICB0aGlzLnBhaW50LmdldCgnY2lyY2xlLXRyYW5zbGF0ZScpLFxuICAgICAgICAgICAgdGhpcy5wYWludC5nZXQoJ2NpcmNsZS10cmFuc2xhdGUtYW5jaG9yJyksXG4gICAgICAgICAgICB0cmFuc2Zvcm0uYW5nbGUsIHBpeGVsc1RvVGlsZVVuaXRzKTtcbiAgICAgICAgY29uc3QgcmFkaXVzID0gdGhpcy5wYWludC5nZXQoJ2NpcmNsZS1yYWRpdXMnKS5ldmFsdWF0ZShmZWF0dXJlLCBmZWF0dXJlU3RhdGUpO1xuICAgICAgICBjb25zdCBzdHJva2UgPSB0aGlzLnBhaW50LmdldCgnY2lyY2xlLXN0cm9rZS13aWR0aCcpLmV2YWx1YXRlKGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSk7XG4gICAgICAgIGNvbnN0IHNpemUgID0gcmFkaXVzICsgc3Ryb2tlO1xuXG4gICAgICAgIC8vIEZvciBwaXRjaC1hbGlnbm1lbnQ6IG1hcCwgY29tcGFyZSBmZWF0dXJlIGdlb21ldHJ5IHRvIHF1ZXJ5IGdlb21ldHJ5IGluIHRoZSBwbGFuZSBvZiB0aGUgdGlsZVxuICAgICAgICAvLyAvLyBPdGhlcndpc2UsIGNvbXBhcmUgZ2VvbWV0cnkgaW4gdGhlIHBsYW5lIG9mIHRoZSB2aWV3cG9ydFxuICAgICAgICAvLyAvLyBBIGNpcmNsZSB3aXRoIGZpeGVkIHNjYWxpbmcgcmVsYXRpdmUgdG8gdGhlIHZpZXdwb3J0IGdldHMgbGFyZ2VyIGluIHRpbGUgc3BhY2UgYXMgaXQgbW92ZXMgaW50byB0aGUgZGlzdGFuY2VcbiAgICAgICAgLy8gLy8gQSBjaXJjbGUgd2l0aCBmaXhlZCBzY2FsaW5nIHJlbGF0aXZlIHRvIHRoZSBtYXAgZ2V0cyBzbWFsbGVyIGluIHZpZXdwb3J0IHNwYWNlIGFzIGl0IG1vdmVzIGludG8gdGhlIGRpc3RhbmNlXG4gICAgICAgIGNvbnN0IGFsaWduV2l0aE1hcCA9IHRoaXMucGFpbnQuZ2V0KCdjaXJjbGUtcGl0Y2gtYWxpZ25tZW50JykgPT09ICdtYXAnO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZFBvbHlnb24gPSBhbGlnbldpdGhNYXAgPyB0cmFuc2xhdGVkUG9seWdvbiA6IHByb2plY3RRdWVyeUdlb21ldHJ5KHRyYW5zbGF0ZWRQb2x5Z29uLCBwaXhlbFBvc01hdHJpeCk7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkU2l6ZSA9IGFsaWduV2l0aE1hcCA/IHNpemUgKiBwaXhlbHNUb1RpbGVVbml0cyA6IHNpemU7XG5cbiAgICAgICAgZm9yIChjb25zdCByaW5nIG9mIGdlb21ldHJ5KSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBvaW50IG9mIHJpbmcpIHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkUG9pbnQgPSBhbGlnbldpdGhNYXAgPyBwb2ludCA6IHByb2plY3RQb2ludChwb2ludCwgcGl4ZWxQb3NNYXRyaXgpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGFkanVzdGVkU2l6ZSA9IHRyYW5zZm9ybWVkU2l6ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9qZWN0ZWRDZW50ZXIgPSB2ZWM0LnRyYW5zZm9ybU1hdDQoW10sIFtwb2ludC54LCBwb2ludC55LCAwLCAxXSwgcGl4ZWxQb3NNYXRyaXgpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhaW50LmdldCgnY2lyY2xlLXBpdGNoLXNjYWxlJykgPT09ICd2aWV3cG9ydCcgJiYgdGhpcy5wYWludC5nZXQoJ2NpcmNsZS1waXRjaC1hbGlnbm1lbnQnKSA9PT0gJ21hcCcpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRqdXN0ZWRTaXplICo9IHByb2plY3RlZENlbnRlclszXSAvIHRyYW5zZm9ybS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wYWludC5nZXQoJ2NpcmNsZS1waXRjaC1zY2FsZScpID09PSAnbWFwJyAmJiB0aGlzLnBhaW50LmdldCgnY2lyY2xlLXBpdGNoLWFsaWdubWVudCcpID09PSAndmlld3BvcnQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkanVzdGVkU2l6ZSAqPSB0cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSAvIHByb2plY3RlZENlbnRlclszXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocG9seWdvbkludGVyc2VjdHNCdWZmZXJlZFBvaW50KHRyYW5zZm9ybWVkUG9seWdvbiwgdHJhbnNmb3JtZWRQb2ludCwgYWRqdXN0ZWRTaXplKSkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBwcm9qZWN0UG9pbnQocDogUG9pbnQsIHBpeGVsUG9zTWF0cml4OiBGbG9hdDMyQXJyYXkpIHtcbiAgICBjb25zdCBwb2ludCA9IHZlYzQudHJhbnNmb3JtTWF0NChbXSwgW3AueCwgcC55LCAwLCAxXSwgcGl4ZWxQb3NNYXRyaXgpO1xuICAgIHJldHVybiBuZXcgUG9pbnQocG9pbnRbMF0gLyBwb2ludFszXSwgcG9pbnRbMV0gLyBwb2ludFszXSk7XG59XG5cbmZ1bmN0aW9uIHByb2plY3RRdWVyeUdlb21ldHJ5KHF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50PiwgcGl4ZWxQb3NNYXRyaXg6IEZsb2F0MzJBcnJheSkge1xuICAgIHJldHVybiBxdWVyeUdlb21ldHJ5Lm1hcCgocCkgPT4ge1xuICAgICAgICByZXR1cm4gcHJvamVjdFBvaW50KHAsIHBpeGVsUG9zTWF0cml4KTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2lyY2xlU3R5bGVMYXllcjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBDaXJjbGVCdWNrZXQgZnJvbSAnLi9jaXJjbGVfYnVja2V0JztcblxuaW1wb3J0IHtyZWdpc3Rlcn0gZnJvbSAnLi4vLi4vdXRpbC93ZWJfd29ya2VyX3RyYW5zZmVyJztcblxuaW1wb3J0IHR5cGUgSGVhdG1hcFN0eWxlTGF5ZXIgZnJvbSAnLi4vLi4vc3R5bGUvc3R5bGVfbGF5ZXIvaGVhdG1hcF9zdHlsZV9sYXllcic7XG5cbmNsYXNzIEhlYXRtYXBCdWNrZXQgZXh0ZW5kcyBDaXJjbGVCdWNrZXQ8SGVhdG1hcFN0eWxlTGF5ZXI+IHtcbiAgICAvLyBOZWVkZWQgZm9yIGZsb3cgdG8gYWNjZXB0IG9taXQ6IFsnbGF5ZXJzJ10gYmVsb3csIGR1ZSB0b1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy80MjYyXG4gICAgbGF5ZXJzOiBBcnJheTxIZWF0bWFwU3R5bGVMYXllcj47XG59XG5cbnJlZ2lzdGVyKCdIZWF0bWFwQnVja2V0JywgSGVhdG1hcEJ1Y2tldCwge29taXQ6IFsnbGF5ZXJzJ119KTtcblxuZXhwb3J0IGRlZmF1bHQgSGVhdG1hcEJ1Y2tldDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHtyZWdpc3Rlcn0gZnJvbSAnLi93ZWJfd29ya2VyX3RyYW5zZmVyJztcblxuZXhwb3J0IHR5cGUgU2l6ZSA9IHtcbiAgICB3aWR0aDogbnVtYmVyLFxuICAgIGhlaWdodDogbnVtYmVyXG59O1xuXG50eXBlIFBvaW50ID0ge1xuICAgIHg6IG51bWJlcixcbiAgICB5OiBudW1iZXJcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZUltYWdlKGltYWdlOiAqLCB7d2lkdGgsIGhlaWdodH06IFNpemUsIGNoYW5uZWxzOiBudW1iZXIsIGRhdGE/OiBVaW50OEFycmF5IHwgVWludDhDbGFtcGVkQXJyYXkpIHtcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgZGF0YSA9IG5ldyBVaW50OEFycmF5KHdpZHRoICogaGVpZ2h0ICogY2hhbm5lbHMpO1xuICAgIH0gZWxzZSBpZiAoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KSB7XG4gICAgICAgIGRhdGEgPSBuZXcgVWludDhBcnJheShkYXRhLmJ1ZmZlcik7XG4gICAgfSBlbHNlIGlmIChkYXRhLmxlbmd0aCAhPT0gd2lkdGggKiBoZWlnaHQgKiBjaGFubmVscykge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignbWlzbWF0Y2hlZCBpbWFnZSBzaXplJyk7XG4gICAgfVxuICAgIGltYWdlLndpZHRoID0gd2lkdGg7XG4gICAgaW1hZ2UuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIGltYWdlLmRhdGEgPSBkYXRhO1xuICAgIHJldHVybiBpbWFnZTtcbn1cblxuZnVuY3Rpb24gcmVzaXplSW1hZ2UoaW1hZ2U6ICosIHt3aWR0aCwgaGVpZ2h0fTogU2l6ZSwgY2hhbm5lbHM6IG51bWJlcikge1xuICAgIGlmICh3aWR0aCA9PT0gaW1hZ2Uud2lkdGggJiYgaGVpZ2h0ID09PSBpbWFnZS5oZWlnaHQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld0ltYWdlID0gY3JlYXRlSW1hZ2Uoe30sIHt3aWR0aCwgaGVpZ2h0fSwgY2hhbm5lbHMpO1xuXG4gICAgY29weUltYWdlKGltYWdlLCBuZXdJbWFnZSwge3g6IDAsIHk6IDB9LCB7eDogMCwgeTogMH0sIHtcbiAgICAgICAgd2lkdGg6IE1hdGgubWluKGltYWdlLndpZHRoLCB3aWR0aCksXG4gICAgICAgIGhlaWdodDogTWF0aC5taW4oaW1hZ2UuaGVpZ2h0LCBoZWlnaHQpXG4gICAgfSwgY2hhbm5lbHMpO1xuXG4gICAgaW1hZ2Uud2lkdGggPSB3aWR0aDtcbiAgICBpbWFnZS5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgaW1hZ2UuZGF0YSA9IG5ld0ltYWdlLmRhdGE7XG59XG5cbmZ1bmN0aW9uIGNvcHlJbWFnZShzcmNJbWc6ICosIGRzdEltZzogKiwgc3JjUHQ6IFBvaW50LCBkc3RQdDogUG9pbnQsIHNpemU6IFNpemUsIGNoYW5uZWxzOiBudW1iZXIpIHtcbiAgICBpZiAoc2l6ZS53aWR0aCA9PT0gMCB8fCBzaXplLmhlaWdodCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZHN0SW1nO1xuICAgIH1cblxuICAgIGlmIChzaXplLndpZHRoID4gc3JjSW1nLndpZHRoIHx8XG4gICAgICAgIHNpemUuaGVpZ2h0ID4gc3JjSW1nLmhlaWdodCB8fFxuICAgICAgICBzcmNQdC54ID4gc3JjSW1nLndpZHRoIC0gc2l6ZS53aWR0aCB8fFxuICAgICAgICBzcmNQdC55ID4gc3JjSW1nLmhlaWdodCAtIHNpemUuaGVpZ2h0KSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdvdXQgb2YgcmFuZ2Ugc291cmNlIGNvb3JkaW5hdGVzIGZvciBpbWFnZSBjb3B5Jyk7XG4gICAgfVxuXG4gICAgaWYgKHNpemUud2lkdGggPiBkc3RJbWcud2lkdGggfHxcbiAgICAgICAgc2l6ZS5oZWlnaHQgPiBkc3RJbWcuaGVpZ2h0IHx8XG4gICAgICAgIGRzdFB0LnggPiBkc3RJbWcud2lkdGggLSBzaXplLndpZHRoIHx8XG4gICAgICAgIGRzdFB0LnkgPiBkc3RJbWcuaGVpZ2h0IC0gc2l6ZS5oZWlnaHQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ291dCBvZiByYW5nZSBkZXN0aW5hdGlvbiBjb29yZGluYXRlcyBmb3IgaW1hZ2UgY29weScpO1xuICAgIH1cblxuICAgIGNvbnN0IHNyY0RhdGEgPSBzcmNJbWcuZGF0YTtcbiAgICBjb25zdCBkc3REYXRhID0gZHN0SW1nLmRhdGE7XG5cbiAgICBhc3NlcnQoc3JjRGF0YSAhPT0gZHN0RGF0YSk7XG5cbiAgICBmb3IgKGxldCB5ID0gMDsgeSA8IHNpemUuaGVpZ2h0OyB5KyspIHtcbiAgICAgICAgY29uc3Qgc3JjT2Zmc2V0ID0gKChzcmNQdC55ICsgeSkgKiBzcmNJbWcud2lkdGggKyBzcmNQdC54KSAqIGNoYW5uZWxzO1xuICAgICAgICBjb25zdCBkc3RPZmZzZXQgPSAoKGRzdFB0LnkgKyB5KSAqIGRzdEltZy53aWR0aCArIGRzdFB0LngpICogY2hhbm5lbHM7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZS53aWR0aCAqIGNoYW5uZWxzOyBpKyspIHtcbiAgICAgICAgICAgIGRzdERhdGFbZHN0T2Zmc2V0ICsgaV0gPSBzcmNEYXRhW3NyY09mZnNldCArIGldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkc3RJbWc7XG59XG5cbmV4cG9ydCBjbGFzcyBBbHBoYUltYWdlIHtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xuICAgIGRhdGE6IFVpbnQ4QXJyYXk7XG5cbiAgICBjb25zdHJ1Y3RvcihzaXplOiBTaXplLCBkYXRhPzogVWludDhBcnJheSB8IFVpbnQ4Q2xhbXBlZEFycmF5KSB7XG4gICAgICAgIGNyZWF0ZUltYWdlKHRoaXMsIHNpemUsIDEsIGRhdGEpO1xuICAgIH1cblxuICAgIHJlc2l6ZShzaXplOiBTaXplKSB7XG4gICAgICAgIHJlc2l6ZUltYWdlKHRoaXMsIHNpemUsIDEpO1xuICAgIH1cblxuICAgIGNsb25lKCkge1xuICAgICAgICByZXR1cm4gbmV3IEFscGhhSW1hZ2Uoe3dpZHRoOiB0aGlzLndpZHRoLCBoZWlnaHQ6IHRoaXMuaGVpZ2h0fSwgbmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhKSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGNvcHkoc3JjSW1nOiBBbHBoYUltYWdlLCBkc3RJbWc6IEFscGhhSW1hZ2UsIHNyY1B0OiBQb2ludCwgZHN0UHQ6IFBvaW50LCBzaXplOiBTaXplKSB7XG4gICAgICAgIGNvcHlJbWFnZShzcmNJbWcsIGRzdEltZywgc3JjUHQsIGRzdFB0LCBzaXplLCAxKTtcbiAgICB9XG59XG5cbi8vIE5vdCBwcmVtdWx0aXBsaWVkLCBiZWNhdXNlIEltYWdlRGF0YSBpcyBub3QgcHJlbXVsdGlwbGllZC5cbi8vIFVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCBtdXN0IGJlIHVzZWQgd2hlbiB1cGxvYWRpbmcgdG8gYSB0ZXh0dXJlLlxuZXhwb3J0IGNsYXNzIFJHQkFJbWFnZSB7XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBoZWlnaHQ6IG51bWJlcjtcblxuICAgIC8vIGRhdGEgbXVzdCBiZSBhIFVpbnQ4QXJyYXkgaW5zdGVhZCBvZiBVaW50OENsYW1wZWRBcnJheSBiZWNhdXNlIHRleEltYWdlMkQgZG9lcyBub3RcbiAgICAvLyBzdXBwb3J0IFVpbnQ4Q2xhbXBlZEFycmF5IGluIGFsbCBicm93c2Vyc1xuICAgIGRhdGE6IFVpbnQ4QXJyYXk7XG5cbiAgICBjb25zdHJ1Y3RvcihzaXplOiBTaXplLCBkYXRhPzogVWludDhBcnJheSB8IFVpbnQ4Q2xhbXBlZEFycmF5KSB7XG4gICAgICAgIGNyZWF0ZUltYWdlKHRoaXMsIHNpemUsIDQsIGRhdGEpO1xuICAgIH1cblxuICAgIHJlc2l6ZShzaXplOiBTaXplKSB7XG4gICAgICAgIHJlc2l6ZUltYWdlKHRoaXMsIHNpemUsIDQpO1xuICAgIH1cblxuICAgIHJlcGxhY2UoZGF0YTogVWludDhBcnJheSB8IFVpbnQ4Q2xhbXBlZEFycmF5LCBjb3B5PzogYm9vbGVhbikge1xuICAgICAgICBpZiAoY29weSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhLnNldChkYXRhKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IG5ldyBVaW50OEFycmF5KGRhdGEuYnVmZmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9uZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSR0JBSW1hZ2Uoe3dpZHRoOiB0aGlzLndpZHRoLCBoZWlnaHQ6IHRoaXMuaGVpZ2h0fSwgbmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhKSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGNvcHkoc3JjSW1nOiBSR0JBSW1hZ2UgfCBJbWFnZURhdGEsIGRzdEltZzogUkdCQUltYWdlLCBzcmNQdDogUG9pbnQsIGRzdFB0OiBQb2ludCwgc2l6ZTogU2l6ZSkge1xuICAgICAgICBjb3B5SW1hZ2Uoc3JjSW1nLCBkc3RJbWcsIHNyY1B0LCBkc3RQdCwgc2l6ZSwgNCk7XG4gICAgfVxufVxuXG5yZWdpc3RlcignQWxwaGFJbWFnZScsIEFscGhhSW1hZ2UpO1xucmVnaXN0ZXIoJ1JHQkFJbWFnZScsIFJHQkFJbWFnZSk7XG4iLCIvLyBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkLiBFZGl0IGJ1aWxkL2dlbmVyYXRlLXN0eWxlLWNvZGUuanMsIHRoZW4gcnVuIGB5YXJuIHJ1biBjb2RlZ2VuYC5cbi8vIEBmbG93XG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG5pbXBvcnQgc3R5bGVTcGVjIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvcmVmZXJlbmNlL2xhdGVzdCc7XG5cbmltcG9ydCB7XG4gICAgUHJvcGVydGllcyxcbiAgICBEYXRhQ29uc3RhbnRQcm9wZXJ0eSxcbiAgICBEYXRhRHJpdmVuUHJvcGVydHksXG4gICAgQ3Jvc3NGYWRlZERhdGFEcml2ZW5Qcm9wZXJ0eSxcbiAgICBDcm9zc0ZhZGVkUHJvcGVydHksXG4gICAgQ29sb3JSYW1wUHJvcGVydHlcbn0gZnJvbSAnLi4vcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIENvbG9yIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5cbmltcG9ydCB0eXBlIEZvcm1hdHRlZCBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvZm9ybWF0dGVkJztcblxuaW1wb3J0IHR5cGUgUmVzb2x2ZWRJbWFnZSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvcmVzb2x2ZWRfaW1hZ2UnO1xuXG5cbmV4cG9ydCB0eXBlIFBhaW50UHJvcHMgPSB7fFxuICAgIFwiaGVhdG1hcC1yYWRpdXNcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJoZWF0bWFwLXdlaWdodFwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcImhlYXRtYXAtaW50ZW5zaXR5XCI6IERhdGFDb25zdGFudFByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJoZWF0bWFwLWNvbG9yXCI6IENvbG9yUmFtcFByb3BlcnR5LFxuICAgIFwiaGVhdG1hcC1vcGFjaXR5XCI6IERhdGFDb25zdGFudFByb3BlcnR5PG51bWJlcj4sXG58fTtcblxuY29uc3QgcGFpbnQ6IFByb3BlcnRpZXM8UGFpbnRQcm9wcz4gPSBuZXcgUHJvcGVydGllcyh7XG4gICAgXCJoZWF0bWFwLXJhZGl1c1wiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2hlYXRtYXBcIl1bXCJoZWF0bWFwLXJhZGl1c1wiXSksXG4gICAgXCJoZWF0bWFwLXdlaWdodFwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2hlYXRtYXBcIl1bXCJoZWF0bWFwLXdlaWdodFwiXSksXG4gICAgXCJoZWF0bWFwLWludGVuc2l0eVwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfaGVhdG1hcFwiXVtcImhlYXRtYXAtaW50ZW5zaXR5XCJdKSxcbiAgICBcImhlYXRtYXAtY29sb3JcIjogbmV3IENvbG9yUmFtcFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2hlYXRtYXBcIl1bXCJoZWF0bWFwLWNvbG9yXCJdKSxcbiAgICBcImhlYXRtYXAtb3BhY2l0eVwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfaGVhdG1hcFwiXVtcImhlYXRtYXAtb3BhY2l0eVwiXSksXG59KTtcblxuLy8gTm90ZTogd2l0aG91dCBhZGRpbmcgdGhlIGV4cGxpY2l0IHR5cGUgYW5ub3RhdGlvbiwgRmxvdyBpbmZlcnMgd2Vha2VyIHR5cGVzXG4vLyBmb3IgdGhlc2Ugb2JqZWN0cyBmcm9tIHRoZWlyIHVzZSBpbiB0aGUgY29uc3RydWN0b3IgdG8gU3R5bGVMYXllciwgYXNcbi8vIHtsYXlvdXQ/OiBQcm9wZXJ0aWVzPC4uLj4sIHBhaW50OiBQcm9wZXJ0aWVzPC4uLj59XG5leHBvcnQgZGVmYXVsdCAoeyBwYWludCB9OiAkRXhhY3Q8e1xuICBwYWludDogUHJvcGVydGllczxQYWludFByb3BzPlxufT4pO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtSR0JBSW1hZ2V9IGZyb20gJy4vaW1hZ2UnO1xuXG5pbXBvcnQgdHlwZSB7U3R5bGVQcm9wZXJ0eUV4cHJlc3Npb259IGZyb20gJy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9pbmRleCc7XG5cbi8qKlxuICogR2l2ZW4gYW4gZXhwcmVzc2lvbiB0aGF0IHNob3VsZCBldmFsdWF0ZSB0byBhIGNvbG9yIHJhbXAsIHJldHVyblxuICogYSAyNTZ4MSBweCBSR0JBIGltYWdlIHJlcHJlc2VudGluZyB0aGF0IHJhbXAgZXhwcmVzc2lvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZW5kZXJDb2xvclJhbXAoZXhwcmVzc2lvbjogU3R5bGVQcm9wZXJ0eUV4cHJlc3Npb24sIGNvbG9yUmFtcEV2YWx1YXRpb25QYXJhbWV0ZXI6IHN0cmluZyk6IFJHQkFJbWFnZSB7XG4gICAgY29uc3QgY29sb3JSYW1wRGF0YSA9IG5ldyBVaW50OEFycmF5KDI1NiAqIDQpO1xuICAgIGNvbnN0IGV2YWx1YXRpb25HbG9iYWxzID0ge307XG4gICAgZm9yIChsZXQgaSA9IDAsIGogPSAwOyBpIDwgMjU2OyBpKyssIGogKz0gNCkge1xuICAgICAgICBldmFsdWF0aW9uR2xvYmFsc1tjb2xvclJhbXBFdmFsdWF0aW9uUGFyYW1ldGVyXSA9IGkgLyAyNTU7XG4gICAgICAgIGNvbnN0IHB4Q29sb3IgPSBleHByZXNzaW9uLmV2YWx1YXRlKChldmFsdWF0aW9uR2xvYmFsczogYW55KSk7XG4gICAgICAgIC8vIHRoZSBjb2xvcnMgYXJlIGJlaW5nIHVucHJlbXVsdGlwbGllZCBiZWNhdXNlIENvbG9yIHVzZXNcbiAgICAgICAgLy8gcHJlbXVsdGlwbGllZCB2YWx1ZXMsIGFuZCB0aGUgVGV4dHVyZSBjbGFzcyBleHBlY3RzIHVucHJlbXVsdGlwbGllZCBvbmVzXG4gICAgICAgIGNvbG9yUmFtcERhdGFbaiArIDBdID0gTWF0aC5mbG9vcihweENvbG9yLnIgKiAyNTUgLyBweENvbG9yLmEpO1xuICAgICAgICBjb2xvclJhbXBEYXRhW2ogKyAxXSA9IE1hdGguZmxvb3IocHhDb2xvci5nICogMjU1IC8gcHhDb2xvci5hKTtcbiAgICAgICAgY29sb3JSYW1wRGF0YVtqICsgMl0gPSBNYXRoLmZsb29yKHB4Q29sb3IuYiAqIDI1NSAvIHB4Q29sb3IuYSk7XG4gICAgICAgIGNvbG9yUmFtcERhdGFbaiArIDNdID0gTWF0aC5mbG9vcihweENvbG9yLmEgKiAyNTUpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUkdCQUltYWdlKHt3aWR0aDogMjU2LCBoZWlnaHQ6IDF9LCBjb2xvclJhbXBEYXRhKTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlX2xheWVyJztcblxuaW1wb3J0IEhlYXRtYXBCdWNrZXQgZnJvbSAnLi4vLi4vZGF0YS9idWNrZXQvaGVhdG1hcF9idWNrZXQnO1xuaW1wb3J0IHtSR0JBSW1hZ2V9IGZyb20gJy4uLy4uL3V0aWwvaW1hZ2UnO1xuaW1wb3J0IHByb3BlcnRpZXMgZnJvbSAnLi9oZWF0bWFwX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuaW1wb3J0IHJlbmRlckNvbG9yUmFtcCBmcm9tICcuLi8uLi91dGlsL2NvbG9yX3JhbXAnO1xuaW1wb3J0IHtUcmFuc2l0aW9uYWJsZSwgVHJhbnNpdGlvbmluZywgUG9zc2libHlFdmFsdWF0ZWR9IGZyb20gJy4uL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgdHlwZSBUZXh0dXJlIGZyb20gJy4uLy4uL3JlbmRlci90ZXh0dXJlJztcbmltcG9ydCB0eXBlIEZyYW1lYnVmZmVyIGZyb20gJy4uLy4uL2dsL2ZyYW1lYnVmZmVyJztcbmltcG9ydCB0eXBlIHtQYWludFByb3BzfSBmcm9tICcuL2hlYXRtYXBfc3R5bGVfbGF5ZXJfcHJvcGVydGllcyc7XG5pbXBvcnQgdHlwZSB7TGF5ZXJTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuY2xhc3MgSGVhdG1hcFN0eWxlTGF5ZXIgZXh0ZW5kcyBTdHlsZUxheWVyIHtcblxuICAgIGhlYXRtYXBGYm86ID9GcmFtZWJ1ZmZlcjtcbiAgICBjb2xvclJhbXA6IFJHQkFJbWFnZTtcbiAgICBjb2xvclJhbXBUZXh0dXJlOiA/VGV4dHVyZTtcblxuICAgIF90cmFuc2l0aW9uYWJsZVBhaW50OiBUcmFuc2l0aW9uYWJsZTxQYWludFByb3BzPjtcbiAgICBfdHJhbnNpdGlvbmluZ1BhaW50OiBUcmFuc2l0aW9uaW5nPFBhaW50UHJvcHM+O1xuICAgIHBhaW50OiBQb3NzaWJseUV2YWx1YXRlZDxQYWludFByb3BzPjtcblxuICAgIGNyZWF0ZUJ1Y2tldChvcHRpb25zOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBIZWF0bWFwQnVja2V0KG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGxheWVyOiBMYXllclNwZWNpZmljYXRpb24pIHtcbiAgICAgICAgc3VwZXIobGF5ZXIsIHByb3BlcnRpZXMpO1xuXG4gICAgICAgIC8vIG1ha2Ugc3VyZSBjb2xvciByYW1wIHRleHR1cmUgaXMgZ2VuZXJhdGVkIGZvciBkZWZhdWx0IGhlYXRtYXAgY29sb3IgdG9vXG4gICAgICAgIHRoaXMuX3VwZGF0ZUNvbG9yUmFtcCgpO1xuICAgIH1cblxuICAgIF9oYW5kbGVTcGVjaWFsUGFpbnRQcm9wZXJ0eVVwZGF0ZShuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKG5hbWUgPT09ICdoZWF0bWFwLWNvbG9yJykge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlQ29sb3JSYW1wKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfdXBkYXRlQ29sb3JSYW1wKCkge1xuICAgICAgICBjb25zdCBleHByZXNzaW9uID0gdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5fdmFsdWVzWydoZWF0bWFwLWNvbG9yJ10udmFsdWUuZXhwcmVzc2lvbjtcbiAgICAgICAgdGhpcy5jb2xvclJhbXAgPSByZW5kZXJDb2xvclJhbXAoZXhwcmVzc2lvbiwgJ2hlYXRtYXBEZW5zaXR5Jyk7XG4gICAgICAgIHRoaXMuY29sb3JSYW1wVGV4dHVyZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmVzaXplKCkge1xuICAgICAgICBpZiAodGhpcy5oZWF0bWFwRmJvKSB7XG4gICAgICAgICAgICB0aGlzLmhlYXRtYXBGYm8uZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5oZWF0bWFwRmJvID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHF1ZXJ5UmFkaXVzKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmUoKTogYm9vbGVhbiAge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaGFzT2Zmc2NyZWVuUGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFpbnQuZ2V0KCdoZWF0bWFwLW9wYWNpdHknKSAhPT0gMCAmJiB0aGlzLnZpc2liaWxpdHkgIT09ICdub25lJztcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEhlYXRtYXBTdHlsZUxheWVyO1xuIiwiLy8gVGhpcyBmaWxlIGlzIGdlbmVyYXRlZC4gRWRpdCBidWlsZC9nZW5lcmF0ZS1zdHlsZS1jb2RlLmpzLCB0aGVuIHJ1biBgeWFybiBydW4gY29kZWdlbmAuXG4vLyBAZmxvd1xuLyogZXNsaW50LWRpc2FibGUgKi9cblxuaW1wb3J0IHN0eWxlU3BlYyBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3JlZmVyZW5jZS9sYXRlc3QnO1xuXG5pbXBvcnQge1xuICAgIFByb3BlcnRpZXMsXG4gICAgRGF0YUNvbnN0YW50UHJvcGVydHksXG4gICAgRGF0YURyaXZlblByb3BlcnR5LFxuICAgIENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHksXG4gICAgQ3Jvc3NGYWRlZFByb3BlcnR5LFxuICAgIENvbG9yUmFtcFByb3BlcnR5XG59IGZyb20gJy4uL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgdHlwZSBDb2xvciBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuXG5pbXBvcnQgdHlwZSBGb3JtYXR0ZWQgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL2Zvcm1hdHRlZCc7XG5cbmltcG9ydCB0eXBlIFJlc29sdmVkSW1hZ2UgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL3Jlc29sdmVkX2ltYWdlJztcblxuXG5leHBvcnQgdHlwZSBQYWludFByb3BzID0ge3xcbiAgICBcImhpbGxzaGFkZS1pbGx1bWluYXRpb24tZGlyZWN0aW9uXCI6IERhdGFDb25zdGFudFByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWFuY2hvclwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxcIm1hcFwiIHwgXCJ2aWV3cG9ydFwiPixcbiAgICBcImhpbGxzaGFkZS1leGFnZ2VyYXRpb25cIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbiAgICBcImhpbGxzaGFkZS1zaGFkb3ctY29sb3JcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8Q29sb3I+LFxuICAgIFwiaGlsbHNoYWRlLWhpZ2hsaWdodC1jb2xvclwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxDb2xvcj4sXG4gICAgXCJoaWxsc2hhZGUtYWNjZW50LWNvbG9yXCI6IERhdGFDb25zdGFudFByb3BlcnR5PENvbG9yPixcbnx9O1xuXG5jb25zdCBwYWludDogUHJvcGVydGllczxQYWludFByb3BzPiA9IG5ldyBQcm9wZXJ0aWVzKHtcbiAgICBcImhpbGxzaGFkZS1pbGx1bWluYXRpb24tZGlyZWN0aW9uXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9oaWxsc2hhZGVcIl1bXCJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWRpcmVjdGlvblwiXSksXG4gICAgXCJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWFuY2hvclwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfaGlsbHNoYWRlXCJdW1wiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1hbmNob3JcIl0pLFxuICAgIFwiaGlsbHNoYWRlLWV4YWdnZXJhdGlvblwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfaGlsbHNoYWRlXCJdW1wiaGlsbHNoYWRlLWV4YWdnZXJhdGlvblwiXSksXG4gICAgXCJoaWxsc2hhZGUtc2hhZG93LWNvbG9yXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9oaWxsc2hhZGVcIl1bXCJoaWxsc2hhZGUtc2hhZG93LWNvbG9yXCJdKSxcbiAgICBcImhpbGxzaGFkZS1oaWdobGlnaHQtY29sb3JcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2hpbGxzaGFkZVwiXVtcImhpbGxzaGFkZS1oaWdobGlnaHQtY29sb3JcIl0pLFxuICAgIFwiaGlsbHNoYWRlLWFjY2VudC1jb2xvclwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfaGlsbHNoYWRlXCJdW1wiaGlsbHNoYWRlLWFjY2VudC1jb2xvclwiXSksXG59KTtcblxuLy8gTm90ZTogd2l0aG91dCBhZGRpbmcgdGhlIGV4cGxpY2l0IHR5cGUgYW5ub3RhdGlvbiwgRmxvdyBpbmZlcnMgd2Vha2VyIHR5cGVzXG4vLyBmb3IgdGhlc2Ugb2JqZWN0cyBmcm9tIHRoZWlyIHVzZSBpbiB0aGUgY29uc3RydWN0b3IgdG8gU3R5bGVMYXllciwgYXNcbi8vIHtsYXlvdXQ/OiBQcm9wZXJ0aWVzPC4uLj4sIHBhaW50OiBQcm9wZXJ0aWVzPC4uLj59XG5leHBvcnQgZGVmYXVsdCAoeyBwYWludCB9OiAkRXhhY3Q8e1xuICBwYWludDogUHJvcGVydGllczxQYWludFByb3BzPlxufT4pO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGVfbGF5ZXInO1xuXG5pbXBvcnQgcHJvcGVydGllcyBmcm9tICcuL2hpbGxzaGFkZV9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzJztcbmltcG9ydCB7VHJhbnNpdGlvbmFibGUsIFRyYW5zaXRpb25pbmcsIFBvc3NpYmx5RXZhbHVhdGVkfSBmcm9tICcuLi9wcm9wZXJ0aWVzJztcblxuaW1wb3J0IHR5cGUge1BhaW50UHJvcHN9IGZyb20gJy4vaGlsbHNoYWRlX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuaW1wb3J0IHR5cGUge0xheWVyU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmNsYXNzIEhpbGxzaGFkZVN0eWxlTGF5ZXIgZXh0ZW5kcyBTdHlsZUxheWVyIHtcbiAgICBfdHJhbnNpdGlvbmFibGVQYWludDogVHJhbnNpdGlvbmFibGU8UGFpbnRQcm9wcz47XG4gICAgX3RyYW5zaXRpb25pbmdQYWludDogVHJhbnNpdGlvbmluZzxQYWludFByb3BzPjtcbiAgICBwYWludDogUG9zc2libHlFdmFsdWF0ZWQ8UGFpbnRQcm9wcz47XG5cbiAgICBjb25zdHJ1Y3RvcihsYXllcjogTGF5ZXJTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHN1cGVyKGxheWVyLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICBoYXNPZmZzY3JlZW5QYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYWludC5nZXQoJ2hpbGxzaGFkZS1leGFnZ2VyYXRpb24nKSAhPT0gMCAmJiB0aGlzLnZpc2liaWxpdHkgIT09ICdub25lJztcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEhpbGxzaGFkZVN0eWxlTGF5ZXI7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHtjcmVhdGVMYXlvdXR9IGZyb20gJy4uLy4uL3V0aWwvc3RydWN0X2FycmF5JztcblxuY29uc3QgbGF5b3V0ID0gY3JlYXRlTGF5b3V0KFtcbiAgICB7bmFtZTogJ2FfcG9zJywgY29tcG9uZW50czogMiwgdHlwZTogJ0ludDE2J31cbl0sIDQpO1xuXG5leHBvcnQgZGVmYXVsdCBsYXlvdXQ7XG5leHBvcnQgY29uc3Qge21lbWJlcnMsIHNpemUsIGFsaWdubWVudH0gPSBsYXlvdXQ7XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZWFyY3V0O1xubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IGVhcmN1dDtcblxuZnVuY3Rpb24gZWFyY3V0KGRhdGEsIGhvbGVJbmRpY2VzLCBkaW0pIHtcblxuICAgIGRpbSA9IGRpbSB8fCAyO1xuXG4gICAgdmFyIGhhc0hvbGVzID0gaG9sZUluZGljZXMgJiYgaG9sZUluZGljZXMubGVuZ3RoLFxuICAgICAgICBvdXRlckxlbiA9IGhhc0hvbGVzID8gaG9sZUluZGljZXNbMF0gKiBkaW0gOiBkYXRhLmxlbmd0aCxcbiAgICAgICAgb3V0ZXJOb2RlID0gbGlua2VkTGlzdChkYXRhLCAwLCBvdXRlckxlbiwgZGltLCB0cnVlKSxcbiAgICAgICAgdHJpYW5nbGVzID0gW107XG5cbiAgICBpZiAoIW91dGVyTm9kZSB8fCBvdXRlck5vZGUubmV4dCA9PT0gb3V0ZXJOb2RlLnByZXYpIHJldHVybiB0cmlhbmdsZXM7XG5cbiAgICB2YXIgbWluWCwgbWluWSwgbWF4WCwgbWF4WSwgeCwgeSwgaW52U2l6ZTtcblxuICAgIGlmIChoYXNIb2xlcykgb3V0ZXJOb2RlID0gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKTtcblxuICAgIC8vIGlmIHRoZSBzaGFwZSBpcyBub3QgdG9vIHNpbXBsZSwgd2UnbGwgdXNlIHotb3JkZXIgY3VydmUgaGFzaCBsYXRlcjsgY2FsY3VsYXRlIHBvbHlnb24gYmJveFxuICAgIGlmIChkYXRhLmxlbmd0aCA+IDgwICogZGltKSB7XG4gICAgICAgIG1pblggPSBtYXhYID0gZGF0YVswXTtcbiAgICAgICAgbWluWSA9IG1heFkgPSBkYXRhWzFdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSBkaW07IGkgPCBvdXRlckxlbjsgaSArPSBkaW0pIHtcbiAgICAgICAgICAgIHggPSBkYXRhW2ldO1xuICAgICAgICAgICAgeSA9IGRhdGFbaSArIDFdO1xuICAgICAgICAgICAgaWYgKHggPCBtaW5YKSBtaW5YID0geDtcbiAgICAgICAgICAgIGlmICh5IDwgbWluWSkgbWluWSA9IHk7XG4gICAgICAgICAgICBpZiAoeCA+IG1heFgpIG1heFggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPiBtYXhZKSBtYXhZID0geTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1pblgsIG1pblkgYW5kIGludlNpemUgYXJlIGxhdGVyIHVzZWQgdG8gdHJhbnNmb3JtIGNvb3JkcyBpbnRvIGludGVnZXJzIGZvciB6LW9yZGVyIGNhbGN1bGF0aW9uXG4gICAgICAgIGludlNpemUgPSBNYXRoLm1heChtYXhYIC0gbWluWCwgbWF4WSAtIG1pblkpO1xuICAgICAgICBpbnZTaXplID0gaW52U2l6ZSAhPT0gMCA/IDEgLyBpbnZTaXplIDogMDtcbiAgICB9XG5cbiAgICBlYXJjdXRMaW5rZWQob3V0ZXJOb2RlLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgaW52U2l6ZSk7XG5cbiAgICByZXR1cm4gdHJpYW5nbGVzO1xufVxuXG4vLyBjcmVhdGUgYSBjaXJjdWxhciBkb3VibHkgbGlua2VkIGxpc3QgZnJvbSBwb2x5Z29uIHBvaW50cyBpbiB0aGUgc3BlY2lmaWVkIHdpbmRpbmcgb3JkZXJcbmZ1bmN0aW9uIGxpbmtlZExpc3QoZGF0YSwgc3RhcnQsIGVuZCwgZGltLCBjbG9ja3dpc2UpIHtcbiAgICB2YXIgaSwgbGFzdDtcblxuICAgIGlmIChjbG9ja3dpc2UgPT09IChzaWduZWRBcmVhKGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSkgPiAwKSkge1xuICAgICAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGkgPSBlbmQgLSBkaW07IGkgPj0gc3RhcnQ7IGkgLT0gZGltKSBsYXN0ID0gaW5zZXJ0Tm9kZShpLCBkYXRhW2ldLCBkYXRhW2kgKyAxXSwgbGFzdCk7XG4gICAgfVxuXG4gICAgaWYgKGxhc3QgJiYgZXF1YWxzKGxhc3QsIGxhc3QubmV4dCkpIHtcbiAgICAgICAgcmVtb3ZlTm9kZShsYXN0KTtcbiAgICAgICAgbGFzdCA9IGxhc3QubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gbGFzdDtcbn1cblxuLy8gZWxpbWluYXRlIGNvbGluZWFyIG9yIGR1cGxpY2F0ZSBwb2ludHNcbmZ1bmN0aW9uIGZpbHRlclBvaW50cyhzdGFydCwgZW5kKSB7XG4gICAgaWYgKCFzdGFydCkgcmV0dXJuIHN0YXJ0O1xuICAgIGlmICghZW5kKSBlbmQgPSBzdGFydDtcblxuICAgIHZhciBwID0gc3RhcnQsXG4gICAgICAgIGFnYWluO1xuICAgIGRvIHtcbiAgICAgICAgYWdhaW4gPSBmYWxzZTtcblxuICAgICAgICBpZiAoIXAuc3RlaW5lciAmJiAoZXF1YWxzKHAsIHAubmV4dCkgfHwgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPT09IDApKSB7XG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcCA9IGVuZCA9IHAucHJldjtcbiAgICAgICAgICAgIGlmIChwID09PSBwLm5leHQpIGJyZWFrO1xuICAgICAgICAgICAgYWdhaW4gPSB0cnVlO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwID0gcC5uZXh0O1xuICAgICAgICB9XG4gICAgfSB3aGlsZSAoYWdhaW4gfHwgcCAhPT0gZW5kKTtcblxuICAgIHJldHVybiBlbmQ7XG59XG5cbi8vIG1haW4gZWFyIHNsaWNpbmcgbG9vcCB3aGljaCB0cmlhbmd1bGF0ZXMgYSBwb2x5Z29uIChnaXZlbiBhcyBhIGxpbmtlZCBsaXN0KVxuZnVuY3Rpb24gZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIGludlNpemUsIHBhc3MpIHtcbiAgICBpZiAoIWVhcikgcmV0dXJuO1xuXG4gICAgLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuICAgIGlmICghcGFzcyAmJiBpbnZTaXplKSBpbmRleEN1cnZlKGVhciwgbWluWCwgbWluWSwgaW52U2l6ZSk7XG5cbiAgICB2YXIgc3RvcCA9IGVhcixcbiAgICAgICAgcHJldiwgbmV4dDtcblxuICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBlYXJzLCBzbGljaW5nIHRoZW0gb25lIGJ5IG9uZVxuICAgIHdoaWxlIChlYXIucHJldiAhPT0gZWFyLm5leHQpIHtcbiAgICAgICAgcHJldiA9IGVhci5wcmV2O1xuICAgICAgICBuZXh0ID0gZWFyLm5leHQ7XG5cbiAgICAgICAgaWYgKGludlNpemUgPyBpc0Vhckhhc2hlZChlYXIsIG1pblgsIG1pblksIGludlNpemUpIDogaXNFYXIoZWFyKSkge1xuICAgICAgICAgICAgLy8gY3V0IG9mZiB0aGUgdHJpYW5nbGVcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHByZXYuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChlYXIuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChuZXh0LmkgLyBkaW0pO1xuXG4gICAgICAgICAgICByZW1vdmVOb2RlKGVhcik7XG5cbiAgICAgICAgICAgIC8vIHNraXBwaW5nIHRoZSBuZXh0IHZlcnRleCBsZWFkcyB0byBsZXNzIHNsaXZlciB0cmlhbmdsZXNcbiAgICAgICAgICAgIGVhciA9IG5leHQubmV4dDtcbiAgICAgICAgICAgIHN0b3AgPSBuZXh0Lm5leHQ7XG5cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgZWFyID0gbmV4dDtcblxuICAgICAgICAvLyBpZiB3ZSBsb29wZWQgdGhyb3VnaCB0aGUgd2hvbGUgcmVtYWluaW5nIHBvbHlnb24gYW5kIGNhbid0IGZpbmQgYW55IG1vcmUgZWFyc1xuICAgICAgICBpZiAoZWFyID09PSBzdG9wKSB7XG4gICAgICAgICAgICAvLyB0cnkgZmlsdGVyaW5nIHBvaW50cyBhbmQgc2xpY2luZyBhZ2FpblxuICAgICAgICAgICAgaWYgKCFwYXNzKSB7XG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGZpbHRlclBvaW50cyhlYXIpLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgaW52U2l6ZSwgMSk7XG5cbiAgICAgICAgICAgIC8vIGlmIHRoaXMgZGlkbid0IHdvcmssIHRyeSBjdXJpbmcgYWxsIHNtYWxsIHNlbGYtaW50ZXJzZWN0aW9ucyBsb2NhbGx5XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhc3MgPT09IDEpIHtcbiAgICAgICAgICAgICAgICBlYXIgPSBjdXJlTG9jYWxJbnRlcnNlY3Rpb25zKGZpbHRlclBvaW50cyhlYXIpLCB0cmlhbmdsZXMsIGRpbSk7XG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGVhciwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIGludlNpemUsIDIpO1xuXG4gICAgICAgICAgICAvLyBhcyBhIGxhc3QgcmVzb3J0LCB0cnkgc3BsaXR0aW5nIHRoZSByZW1haW5pbmcgcG9seWdvbiBpbnRvIHR3b1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXNzID09PSAyKSB7XG4gICAgICAgICAgICAgICAgc3BsaXRFYXJjdXQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgaW52U2l6ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBjaGVjayB3aGV0aGVyIGEgcG9seWdvbiBub2RlIGZvcm1zIGEgdmFsaWQgZWFyIHdpdGggYWRqYWNlbnQgbm9kZXNcbmZ1bmN0aW9uIGlzRWFyKGVhcikge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIG5vdyBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSBvdGhlciBwb2ludHMgaW5zaWRlIHRoZSBwb3RlbnRpYWwgZWFyXG4gICAgdmFyIHAgPSBlYXIubmV4dC5uZXh0O1xuXG4gICAgd2hpbGUgKHAgIT09IGVhci5wcmV2KSB7XG4gICAgICAgIGlmIChwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzRWFySGFzaGVkKGVhciwgbWluWCwgbWluWSwgaW52U2l6ZSkge1xuICAgIHZhciBhID0gZWFyLnByZXYsXG4gICAgICAgIGIgPSBlYXIsXG4gICAgICAgIGMgPSBlYXIubmV4dDtcblxuICAgIGlmIChhcmVhKGEsIGIsIGMpID49IDApIHJldHVybiBmYWxzZTsgLy8gcmVmbGV4LCBjYW4ndCBiZSBhbiBlYXJcblxuICAgIC8vIHRyaWFuZ2xlIGJib3g7IG1pbiAmIG1heCBhcmUgY2FsY3VsYXRlZCBsaWtlIHRoaXMgZm9yIHNwZWVkXG4gICAgdmFyIG1pblRYID0gYS54IDwgYi54ID8gKGEueCA8IGMueCA/IGEueCA6IGMueCkgOiAoYi54IDwgYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWluVFkgPSBhLnkgPCBiLnkgPyAoYS55IDwgYy55ID8gYS55IDogYy55KSA6IChiLnkgPCBjLnkgPyBiLnkgOiBjLnkpLFxuICAgICAgICBtYXhUWCA9IGEueCA+IGIueCA/IChhLnggPiBjLnggPyBhLnggOiBjLngpIDogKGIueCA+IGMueCA/IGIueCA6IGMueCksXG4gICAgICAgIG1heFRZID0gYS55ID4gYi55ID8gKGEueSA+IGMueSA/IGEueSA6IGMueSkgOiAoYi55ID4gYy55ID8gYi55IDogYy55KTtcblxuICAgIC8vIHotb3JkZXIgcmFuZ2UgZm9yIHRoZSBjdXJyZW50IHRyaWFuZ2xlIGJib3g7XG4gICAgdmFyIG1pblogPSB6T3JkZXIobWluVFgsIG1pblRZLCBtaW5YLCBtaW5ZLCBpbnZTaXplKSxcbiAgICAgICAgbWF4WiA9IHpPcmRlcihtYXhUWCwgbWF4VFksIG1pblgsIG1pblksIGludlNpemUpO1xuXG4gICAgdmFyIHAgPSBlYXIucHJldlosXG4gICAgICAgIG4gPSBlYXIubmV4dFo7XG5cbiAgICAvLyBsb29rIGZvciBwb2ludHMgaW5zaWRlIHRoZSB0cmlhbmdsZSBpbiBib3RoIGRpcmVjdGlvbnNcbiAgICB3aGlsZSAocCAmJiBwLnogPj0gbWluWiAmJiBuICYmIG4ueiA8PSBtYXhaKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5wcmV2WjtcblxuICAgICAgICBpZiAobiAhPT0gZWFyLnByZXYgJiYgbiAhPT0gZWFyLm5leHQgJiZcbiAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBuLngsIG4ueSkgJiZcbiAgICAgICAgICAgIGFyZWEobi5wcmV2LCBuLCBuLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgbiA9IG4ubmV4dFo7XG4gICAgfVxuXG4gICAgLy8gbG9vayBmb3IgcmVtYWluaW5nIHBvaW50cyBpbiBkZWNyZWFzaW5nIHotb3JkZXJcbiAgICB3aGlsZSAocCAmJiBwLnogPj0gbWluWikge1xuICAgICAgICBpZiAocCAhPT0gZWFyLnByZXYgJiYgcCAhPT0gZWFyLm5leHQgJiZcbiAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAucHJldlo7XG4gICAgfVxuXG4gICAgLy8gbG9vayBmb3IgcmVtYWluaW5nIHBvaW50cyBpbiBpbmNyZWFzaW5nIHotb3JkZXJcbiAgICB3aGlsZSAobiAmJiBuLnogPD0gbWF4Wikge1xuICAgICAgICBpZiAobiAhPT0gZWFyLnByZXYgJiYgbiAhPT0gZWFyLm5leHQgJiZcbiAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBuLngsIG4ueSkgJiZcbiAgICAgICAgICAgIGFyZWEobi5wcmV2LCBuLCBuLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgbiA9IG4ubmV4dFo7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59XG5cbi8vIGdvIHRocm91Z2ggYWxsIHBvbHlnb24gbm9kZXMgYW5kIGN1cmUgc21hbGwgbG9jYWwgc2VsZi1pbnRlcnNlY3Rpb25zXG5mdW5jdGlvbiBjdXJlTG9jYWxJbnRlcnNlY3Rpb25zKHN0YXJ0LCB0cmlhbmdsZXMsIGRpbSkge1xuICAgIHZhciBwID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICB2YXIgYSA9IHAucHJldixcbiAgICAgICAgICAgIGIgPSBwLm5leHQubmV4dDtcblxuICAgICAgICBpZiAoIWVxdWFscyhhLCBiKSAmJiBpbnRlcnNlY3RzKGEsIHAsIHAubmV4dCwgYikgJiYgbG9jYWxseUluc2lkZShhLCBiKSAmJiBsb2NhbGx5SW5zaWRlKGIsIGEpKSB7XG5cbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKGEuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChwLmkgLyBkaW0pO1xuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYi5pIC8gZGltKTtcblxuICAgICAgICAgICAgLy8gcmVtb3ZlIHR3byBub2RlcyBpbnZvbHZlZFxuICAgICAgICAgICAgcmVtb3ZlTm9kZShwKTtcbiAgICAgICAgICAgIHJlbW92ZU5vZGUocC5uZXh0KTtcblxuICAgICAgICAgICAgcCA9IHN0YXJ0ID0gYjtcbiAgICAgICAgfVxuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHJldHVybiBmaWx0ZXJQb2ludHMocCk7XG59XG5cbi8vIHRyeSBzcGxpdHRpbmcgcG9seWdvbiBpbnRvIHR3byBhbmQgdHJpYW5ndWxhdGUgdGhlbSBpbmRlcGVuZGVudGx5XG5mdW5jdGlvbiBzcGxpdEVhcmN1dChzdGFydCwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIGludlNpemUpIHtcbiAgICAvLyBsb29rIGZvciBhIHZhbGlkIGRpYWdvbmFsIHRoYXQgZGl2aWRlcyB0aGUgcG9seWdvbiBpbnRvIHR3b1xuICAgIHZhciBhID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICB2YXIgYiA9IGEubmV4dC5uZXh0O1xuICAgICAgICB3aGlsZSAoYiAhPT0gYS5wcmV2KSB7XG4gICAgICAgICAgICBpZiAoYS5pICE9PSBiLmkgJiYgaXNWYWxpZERpYWdvbmFsKGEsIGIpKSB7XG4gICAgICAgICAgICAgICAgLy8gc3BsaXQgdGhlIHBvbHlnb24gaW4gdHdvIGJ5IHRoZSBkaWFnb25hbFxuICAgICAgICAgICAgICAgIHZhciBjID0gc3BsaXRQb2x5Z29uKGEsIGIpO1xuXG4gICAgICAgICAgICAgICAgLy8gZmlsdGVyIGNvbGluZWFyIHBvaW50cyBhcm91bmQgdGhlIGN1dHNcbiAgICAgICAgICAgICAgICBhID0gZmlsdGVyUG9pbnRzKGEsIGEubmV4dCk7XG4gICAgICAgICAgICAgICAgYyA9IGZpbHRlclBvaW50cyhjLCBjLm5leHQpO1xuXG4gICAgICAgICAgICAgICAgLy8gcnVuIGVhcmN1dCBvbiBlYWNoIGhhbGZcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoYSwgdHJpYW5nbGVzLCBkaW0sIG1pblgsIG1pblksIGludlNpemUpO1xuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChjLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgaW52U2l6ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYiA9IGIubmV4dDtcbiAgICAgICAgfVxuICAgICAgICBhID0gYS5uZXh0O1xuICAgIH0gd2hpbGUgKGEgIT09IHN0YXJ0KTtcbn1cblxuLy8gbGluayBldmVyeSBob2xlIGludG8gdGhlIG91dGVyIGxvb3AsIHByb2R1Y2luZyBhIHNpbmdsZS1yaW5nIHBvbHlnb24gd2l0aG91dCBob2xlc1xuZnVuY3Rpb24gZWxpbWluYXRlSG9sZXMoZGF0YSwgaG9sZUluZGljZXMsIG91dGVyTm9kZSwgZGltKSB7XG4gICAgdmFyIHF1ZXVlID0gW10sXG4gICAgICAgIGksIGxlbiwgc3RhcnQsIGVuZCwgbGlzdDtcblxuICAgIGZvciAoaSA9IDAsIGxlbiA9IGhvbGVJbmRpY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHN0YXJ0ID0gaG9sZUluZGljZXNbaV0gKiBkaW07XG4gICAgICAgIGVuZCA9IGkgPCBsZW4gLSAxID8gaG9sZUluZGljZXNbaSArIDFdICogZGltIDogZGF0YS5sZW5ndGg7XG4gICAgICAgIGxpc3QgPSBsaW5rZWRMaXN0KGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSwgZmFsc2UpO1xuICAgICAgICBpZiAobGlzdCA9PT0gbGlzdC5uZXh0KSBsaXN0LnN0ZWluZXIgPSB0cnVlO1xuICAgICAgICBxdWV1ZS5wdXNoKGdldExlZnRtb3N0KGxpc3QpKTtcbiAgICB9XG5cbiAgICBxdWV1ZS5zb3J0KGNvbXBhcmVYKTtcblxuICAgIC8vIHByb2Nlc3MgaG9sZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0XG4gICAgZm9yIChpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVsaW1pbmF0ZUhvbGUocXVldWVbaV0sIG91dGVyTm9kZSk7XG4gICAgICAgIG91dGVyTm9kZSA9IGZpbHRlclBvaW50cyhvdXRlck5vZGUsIG91dGVyTm9kZS5uZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0ZXJOb2RlO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlWChhLCBiKSB7XG4gICAgcmV0dXJuIGEueCAtIGIueDtcbn1cblxuLy8gZmluZCBhIGJyaWRnZSBiZXR3ZWVuIHZlcnRpY2VzIHRoYXQgY29ubmVjdHMgaG9sZSB3aXRoIGFuIG91dGVyIHJpbmcgYW5kIGFuZCBsaW5rIGl0XG5mdW5jdGlvbiBlbGltaW5hdGVIb2xlKGhvbGUsIG91dGVyTm9kZSkge1xuICAgIG91dGVyTm9kZSA9IGZpbmRIb2xlQnJpZGdlKGhvbGUsIG91dGVyTm9kZSk7XG4gICAgaWYgKG91dGVyTm9kZSkge1xuICAgICAgICB2YXIgYiA9IHNwbGl0UG9seWdvbihvdXRlck5vZGUsIGhvbGUpO1xuXG4gICAgICAgIC8vIGZpbHRlciBjb2xsaW5lYXIgcG9pbnRzIGFyb3VuZCB0aGUgY3V0c1xuICAgICAgICBmaWx0ZXJQb2ludHMob3V0ZXJOb2RlLCBvdXRlck5vZGUubmV4dCk7XG4gICAgICAgIGZpbHRlclBvaW50cyhiLCBiLm5leHQpO1xuICAgIH1cbn1cblxuLy8gRGF2aWQgRWJlcmx5J3MgYWxnb3JpdGhtIGZvciBmaW5kaW5nIGEgYnJpZGdlIGJldHdlZW4gaG9sZSBhbmQgb3V0ZXIgcG9seWdvblxuZnVuY3Rpb24gZmluZEhvbGVCcmlkZ2UoaG9sZSwgb3V0ZXJOb2RlKSB7XG4gICAgdmFyIHAgPSBvdXRlck5vZGUsXG4gICAgICAgIGh4ID0gaG9sZS54LFxuICAgICAgICBoeSA9IGhvbGUueSxcbiAgICAgICAgcXggPSAtSW5maW5pdHksXG4gICAgICAgIG07XG5cbiAgICAvLyBmaW5kIGEgc2VnbWVudCBpbnRlcnNlY3RlZCBieSBhIHJheSBmcm9tIHRoZSBob2xlJ3MgbGVmdG1vc3QgcG9pbnQgdG8gdGhlIGxlZnQ7XG4gICAgLy8gc2VnbWVudCdzIGVuZHBvaW50IHdpdGggbGVzc2VyIHggd2lsbCBiZSBwb3RlbnRpYWwgY29ubmVjdGlvbiBwb2ludFxuICAgIGRvIHtcbiAgICAgICAgaWYgKGh5IDw9IHAueSAmJiBoeSA+PSBwLm5leHQueSAmJiBwLm5leHQueSAhPT0gcC55KSB7XG4gICAgICAgICAgICB2YXIgeCA9IHAueCArIChoeSAtIHAueSkgKiAocC5uZXh0LnggLSBwLngpIC8gKHAubmV4dC55IC0gcC55KTtcbiAgICAgICAgICAgIGlmICh4IDw9IGh4ICYmIHggPiBxeCkge1xuICAgICAgICAgICAgICAgIHF4ID0geDtcbiAgICAgICAgICAgICAgICBpZiAoeCA9PT0gaHgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGh5ID09PSBwLnkpIHJldHVybiBwO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaHkgPT09IHAubmV4dC55KSByZXR1cm4gcC5uZXh0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtID0gcC54IDwgcC5uZXh0LnggPyBwIDogcC5uZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gb3V0ZXJOb2RlKTtcblxuICAgIGlmICghbSkgcmV0dXJuIG51bGw7XG5cbiAgICBpZiAoaHggPT09IHF4KSByZXR1cm4gbTsgLy8gaG9sZSB0b3VjaGVzIG91dGVyIHNlZ21lbnQ7IHBpY2sgbGVmdG1vc3QgZW5kcG9pbnRcblxuICAgIC8vIGxvb2sgZm9yIHBvaW50cyBpbnNpZGUgdGhlIHRyaWFuZ2xlIG9mIGhvbGUgcG9pbnQsIHNlZ21lbnQgaW50ZXJzZWN0aW9uIGFuZCBlbmRwb2ludDtcbiAgICAvLyBpZiB0aGVyZSBhcmUgbm8gcG9pbnRzIGZvdW5kLCB3ZSBoYXZlIGEgdmFsaWQgY29ubmVjdGlvbjtcbiAgICAvLyBvdGhlcndpc2UgY2hvb3NlIHRoZSBwb2ludCBvZiB0aGUgbWluaW11bSBhbmdsZSB3aXRoIHRoZSByYXkgYXMgY29ubmVjdGlvbiBwb2ludFxuXG4gICAgdmFyIHN0b3AgPSBtLFxuICAgICAgICBteCA9IG0ueCxcbiAgICAgICAgbXkgPSBtLnksXG4gICAgICAgIHRhbk1pbiA9IEluZmluaXR5LFxuICAgICAgICB0YW47XG5cbiAgICBwID0gbTtcblxuICAgIGRvIHtcbiAgICAgICAgaWYgKGh4ID49IHAueCAmJiBwLnggPj0gbXggJiYgaHggIT09IHAueCAmJlxuICAgICAgICAgICAgICAgIHBvaW50SW5UcmlhbmdsZShoeSA8IG15ID8gaHggOiBxeCwgaHksIG14LCBteSwgaHkgPCBteSA/IHF4IDogaHgsIGh5LCBwLngsIHAueSkpIHtcblxuICAgICAgICAgICAgdGFuID0gTWF0aC5hYnMoaHkgLSBwLnkpIC8gKGh4IC0gcC54KTsgLy8gdGFuZ2VudGlhbFxuXG4gICAgICAgICAgICBpZiAobG9jYWxseUluc2lkZShwLCBob2xlKSAmJlxuICAgICAgICAgICAgICAgICh0YW4gPCB0YW5NaW4gfHwgKHRhbiA9PT0gdGFuTWluICYmIChwLnggPiBtLnggfHwgKHAueCA9PT0gbS54ICYmIHNlY3RvckNvbnRhaW5zU2VjdG9yKG0sIHApKSkpKSkge1xuICAgICAgICAgICAgICAgIG0gPSBwO1xuICAgICAgICAgICAgICAgIHRhbk1pbiA9IHRhbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RvcCk7XG5cbiAgICByZXR1cm4gbTtcbn1cblxuLy8gd2hldGhlciBzZWN0b3IgaW4gdmVydGV4IG0gY29udGFpbnMgc2VjdG9yIGluIHZlcnRleCBwIGluIHRoZSBzYW1lIGNvb3JkaW5hdGVzXG5mdW5jdGlvbiBzZWN0b3JDb250YWluc1NlY3RvcihtLCBwKSB7XG4gICAgcmV0dXJuIGFyZWEobS5wcmV2LCBtLCBwLnByZXYpIDwgMCAmJiBhcmVhKHAubmV4dCwgbSwgbS5uZXh0KSA8IDA7XG59XG5cbi8vIGludGVybGluayBwb2x5Z29uIG5vZGVzIGluIHotb3JkZXJcbmZ1bmN0aW9uIGluZGV4Q3VydmUoc3RhcnQsIG1pblgsIG1pblksIGludlNpemUpIHtcbiAgICB2YXIgcCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAueiA9PT0gbnVsbCkgcC56ID0gek9yZGVyKHAueCwgcC55LCBtaW5YLCBtaW5ZLCBpbnZTaXplKTtcbiAgICAgICAgcC5wcmV2WiA9IHAucHJldjtcbiAgICAgICAgcC5uZXh0WiA9IHAubmV4dDtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBzdGFydCk7XG5cbiAgICBwLnByZXZaLm5leHRaID0gbnVsbDtcbiAgICBwLnByZXZaID0gbnVsbDtcblxuICAgIHNvcnRMaW5rZWQocCk7XG59XG5cbi8vIFNpbW9uIFRhdGhhbSdzIGxpbmtlZCBsaXN0IG1lcmdlIHNvcnQgYWxnb3JpdGhtXG4vLyBodHRwOi8vd3d3LmNoaWFyay5ncmVlbmVuZC5vcmcudWsvfnNndGF0aGFtL2FsZ29yaXRobXMvbGlzdHNvcnQuaHRtbFxuZnVuY3Rpb24gc29ydExpbmtlZChsaXN0KSB7XG4gICAgdmFyIGksIHAsIHEsIGUsIHRhaWwsIG51bU1lcmdlcywgcFNpemUsIHFTaXplLFxuICAgICAgICBpblNpemUgPSAxO1xuXG4gICAgZG8ge1xuICAgICAgICBwID0gbGlzdDtcbiAgICAgICAgbGlzdCA9IG51bGw7XG4gICAgICAgIHRhaWwgPSBudWxsO1xuICAgICAgICBudW1NZXJnZXMgPSAwO1xuXG4gICAgICAgIHdoaWxlIChwKSB7XG4gICAgICAgICAgICBudW1NZXJnZXMrKztcbiAgICAgICAgICAgIHEgPSBwO1xuICAgICAgICAgICAgcFNpemUgPSAwO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGluU2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcFNpemUrKztcbiAgICAgICAgICAgICAgICBxID0gcS5uZXh0WjtcbiAgICAgICAgICAgICAgICBpZiAoIXEpIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcVNpemUgPSBpblNpemU7XG5cbiAgICAgICAgICAgIHdoaWxlIChwU2l6ZSA+IDAgfHwgKHFTaXplID4gMCAmJiBxKSkge1xuXG4gICAgICAgICAgICAgICAgaWYgKHBTaXplICE9PSAwICYmIChxU2l6ZSA9PT0gMCB8fCAhcSB8fCBwLnogPD0gcS56KSkge1xuICAgICAgICAgICAgICAgICAgICBlID0gcDtcbiAgICAgICAgICAgICAgICAgICAgcCA9IHAubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHBTaXplLS07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZSA9IHE7XG4gICAgICAgICAgICAgICAgICAgIHEgPSBxLm5leHRaO1xuICAgICAgICAgICAgICAgICAgICBxU2l6ZS0tO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0YWlsKSB0YWlsLm5leHRaID0gZTtcbiAgICAgICAgICAgICAgICBlbHNlIGxpc3QgPSBlO1xuXG4gICAgICAgICAgICAgICAgZS5wcmV2WiA9IHRhaWw7XG4gICAgICAgICAgICAgICAgdGFpbCA9IGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHAgPSBxO1xuICAgICAgICB9XG5cbiAgICAgICAgdGFpbC5uZXh0WiA9IG51bGw7XG4gICAgICAgIGluU2l6ZSAqPSAyO1xuXG4gICAgfSB3aGlsZSAobnVtTWVyZ2VzID4gMSk7XG5cbiAgICByZXR1cm4gbGlzdDtcbn1cblxuLy8gei1vcmRlciBvZiBhIHBvaW50IGdpdmVuIGNvb3JkcyBhbmQgaW52ZXJzZSBvZiB0aGUgbG9uZ2VyIHNpZGUgb2YgZGF0YSBiYm94XG5mdW5jdGlvbiB6T3JkZXIoeCwgeSwgbWluWCwgbWluWSwgaW52U2l6ZSkge1xuICAgIC8vIGNvb3JkcyBhcmUgdHJhbnNmb3JtZWQgaW50byBub24tbmVnYXRpdmUgMTUtYml0IGludGVnZXIgcmFuZ2VcbiAgICB4ID0gMzI3NjcgKiAoeCAtIG1pblgpICogaW52U2l6ZTtcbiAgICB5ID0gMzI3NjcgKiAoeSAtIG1pblkpICogaW52U2l6ZTtcblxuICAgIHggPSAoeCB8ICh4IDw8IDgpKSAmIDB4MDBGRjAwRkY7XG4gICAgeCA9ICh4IHwgKHggPDwgNCkpICYgMHgwRjBGMEYwRjtcbiAgICB4ID0gKHggfCAoeCA8PCAyKSkgJiAweDMzMzMzMzMzO1xuICAgIHggPSAoeCB8ICh4IDw8IDEpKSAmIDB4NTU1NTU1NTU7XG5cbiAgICB5ID0gKHkgfCAoeSA8PCA4KSkgJiAweDAwRkYwMEZGO1xuICAgIHkgPSAoeSB8ICh5IDw8IDQpKSAmIDB4MEYwRjBGMEY7XG4gICAgeSA9ICh5IHwgKHkgPDwgMikpICYgMHgzMzMzMzMzMztcbiAgICB5ID0gKHkgfCAoeSA8PCAxKSkgJiAweDU1NTU1NTU1O1xuXG4gICAgcmV0dXJuIHggfCAoeSA8PCAxKTtcbn1cblxuLy8gZmluZCB0aGUgbGVmdG1vc3Qgbm9kZSBvZiBhIHBvbHlnb24gcmluZ1xuZnVuY3Rpb24gZ2V0TGVmdG1vc3Qoc3RhcnQpIHtcbiAgICB2YXIgcCA9IHN0YXJ0LFxuICAgICAgICBsZWZ0bW9zdCA9IHN0YXJ0O1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAueCA8IGxlZnRtb3N0LnggfHwgKHAueCA9PT0gbGVmdG1vc3QueCAmJiBwLnkgPCBsZWZ0bW9zdC55KSkgbGVmdG1vc3QgPSBwO1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHJldHVybiBsZWZ0bW9zdDtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2ludCBsaWVzIHdpdGhpbiBhIGNvbnZleCB0cmlhbmdsZVxuZnVuY3Rpb24gcG9pbnRJblRyaWFuZ2xlKGF4LCBheSwgYngsIGJ5LCBjeCwgY3ksIHB4LCBweSkge1xuICAgIHJldHVybiAoY3ggLSBweCkgKiAoYXkgLSBweSkgLSAoYXggLSBweCkgKiAoY3kgLSBweSkgPj0gMCAmJlxuICAgICAgICAgICAoYXggLSBweCkgKiAoYnkgLSBweSkgLSAoYnggLSBweCkgKiAoYXkgLSBweSkgPj0gMCAmJlxuICAgICAgICAgICAoYnggLSBweCkgKiAoY3kgLSBweSkgLSAoY3ggLSBweCkgKiAoYnkgLSBweSkgPj0gMDtcbn1cblxuLy8gY2hlY2sgaWYgYSBkaWFnb25hbCBiZXR3ZWVuIHR3byBwb2x5Z29uIG5vZGVzIGlzIHZhbGlkIChsaWVzIGluIHBvbHlnb24gaW50ZXJpb3IpXG5mdW5jdGlvbiBpc1ZhbGlkRGlhZ29uYWwoYSwgYikge1xuICAgIHJldHVybiBhLm5leHQuaSAhPT0gYi5pICYmIGEucHJldi5pICE9PSBiLmkgJiYgIWludGVyc2VjdHNQb2x5Z29uKGEsIGIpICYmIC8vIGRvbmVzJ3QgaW50ZXJzZWN0IG90aGVyIGVkZ2VzXG4gICAgICAgICAgIChsb2NhbGx5SW5zaWRlKGEsIGIpICYmIGxvY2FsbHlJbnNpZGUoYiwgYSkgJiYgbWlkZGxlSW5zaWRlKGEsIGIpICYmIC8vIGxvY2FsbHkgdmlzaWJsZVxuICAgICAgICAgICAgKGFyZWEoYS5wcmV2LCBhLCBiLnByZXYpIHx8IGFyZWEoYSwgYi5wcmV2LCBiKSkgfHwgLy8gZG9lcyBub3QgY3JlYXRlIG9wcG9zaXRlLWZhY2luZyBzZWN0b3JzXG4gICAgICAgICAgICBlcXVhbHMoYSwgYikgJiYgYXJlYShhLnByZXYsIGEsIGEubmV4dCkgPiAwICYmIGFyZWEoYi5wcmV2LCBiLCBiLm5leHQpID4gMCk7IC8vIHNwZWNpYWwgemVyby1sZW5ndGggY2FzZVxufVxuXG4vLyBzaWduZWQgYXJlYSBvZiBhIHRyaWFuZ2xlXG5mdW5jdGlvbiBhcmVhKHAsIHEsIHIpIHtcbiAgICByZXR1cm4gKHEueSAtIHAueSkgKiAoci54IC0gcS54KSAtIChxLnggLSBwLngpICogKHIueSAtIHEueSk7XG59XG5cbi8vIGNoZWNrIGlmIHR3byBwb2ludHMgYXJlIGVxdWFsXG5mdW5jdGlvbiBlcXVhbHMocDEsIHAyKSB7XG4gICAgcmV0dXJuIHAxLnggPT09IHAyLnggJiYgcDEueSA9PT0gcDIueTtcbn1cblxuLy8gY2hlY2sgaWYgdHdvIHNlZ21lbnRzIGludGVyc2VjdFxuZnVuY3Rpb24gaW50ZXJzZWN0cyhwMSwgcTEsIHAyLCBxMikge1xuICAgIHZhciBvMSA9IHNpZ24oYXJlYShwMSwgcTEsIHAyKSk7XG4gICAgdmFyIG8yID0gc2lnbihhcmVhKHAxLCBxMSwgcTIpKTtcbiAgICB2YXIgbzMgPSBzaWduKGFyZWEocDIsIHEyLCBwMSkpO1xuICAgIHZhciBvNCA9IHNpZ24oYXJlYShwMiwgcTIsIHExKSk7XG5cbiAgICBpZiAobzEgIT09IG8yICYmIG8zICE9PSBvNCkgcmV0dXJuIHRydWU7IC8vIGdlbmVyYWwgY2FzZVxuXG4gICAgaWYgKG8xID09PSAwICYmIG9uU2VnbWVudChwMSwgcDIsIHExKSkgcmV0dXJuIHRydWU7IC8vIHAxLCBxMSBhbmQgcDIgYXJlIGNvbGxpbmVhciBhbmQgcDIgbGllcyBvbiBwMXExXG4gICAgaWYgKG8yID09PSAwICYmIG9uU2VnbWVudChwMSwgcTIsIHExKSkgcmV0dXJuIHRydWU7IC8vIHAxLCBxMSBhbmQgcTIgYXJlIGNvbGxpbmVhciBhbmQgcTIgbGllcyBvbiBwMXExXG4gICAgaWYgKG8zID09PSAwICYmIG9uU2VnbWVudChwMiwgcDEsIHEyKSkgcmV0dXJuIHRydWU7IC8vIHAyLCBxMiBhbmQgcDEgYXJlIGNvbGxpbmVhciBhbmQgcDEgbGllcyBvbiBwMnEyXG4gICAgaWYgKG80ID09PSAwICYmIG9uU2VnbWVudChwMiwgcTEsIHEyKSkgcmV0dXJuIHRydWU7IC8vIHAyLCBxMiBhbmQgcTEgYXJlIGNvbGxpbmVhciBhbmQgcTEgbGllcyBvbiBwMnEyXG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIGZvciBjb2xsaW5lYXIgcG9pbnRzIHAsIHEsIHIsIGNoZWNrIGlmIHBvaW50IHEgbGllcyBvbiBzZWdtZW50IHByXG5mdW5jdGlvbiBvblNlZ21lbnQocCwgcSwgcikge1xuICAgIHJldHVybiBxLnggPD0gTWF0aC5tYXgocC54LCByLngpICYmIHEueCA+PSBNYXRoLm1pbihwLngsIHIueCkgJiYgcS55IDw9IE1hdGgubWF4KHAueSwgci55KSAmJiBxLnkgPj0gTWF0aC5taW4ocC55LCByLnkpO1xufVxuXG5mdW5jdGlvbiBzaWduKG51bSkge1xuICAgIHJldHVybiBudW0gPiAwID8gMSA6IG51bSA8IDAgPyAtMSA6IDA7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpbnRlcnNlY3RzIGFueSBwb2x5Z29uIHNlZ21lbnRzXG5mdW5jdGlvbiBpbnRlcnNlY3RzUG9seWdvbihhLCBiKSB7XG4gICAgdmFyIHAgPSBhO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKHAuaSAhPT0gYS5pICYmIHAubmV4dC5pICE9PSBhLmkgJiYgcC5pICE9PSBiLmkgJiYgcC5uZXh0LmkgIT09IGIuaSAmJlxuICAgICAgICAgICAgICAgIGludGVyc2VjdHMocCwgcC5uZXh0LCBhLCBiKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gYSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIGNoZWNrIGlmIGEgcG9seWdvbiBkaWFnb25hbCBpcyBsb2NhbGx5IGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbG9jYWxseUluc2lkZShhLCBiKSB7XG4gICAgcmV0dXJuIGFyZWEoYS5wcmV2LCBhLCBhLm5leHQpIDwgMCA/XG4gICAgICAgIGFyZWEoYSwgYiwgYS5uZXh0KSA+PSAwICYmIGFyZWEoYSwgYS5wcmV2LCBiKSA+PSAwIDpcbiAgICAgICAgYXJlYShhLCBiLCBhLnByZXYpIDwgMCB8fCBhcmVhKGEsIGEubmV4dCwgYikgPCAwO1xufVxuXG4vLyBjaGVjayBpZiB0aGUgbWlkZGxlIHBvaW50IG9mIGEgcG9seWdvbiBkaWFnb25hbCBpcyBpbnNpZGUgdGhlIHBvbHlnb25cbmZ1bmN0aW9uIG1pZGRsZUluc2lkZShhLCBiKSB7XG4gICAgdmFyIHAgPSBhLFxuICAgICAgICBpbnNpZGUgPSBmYWxzZSxcbiAgICAgICAgcHggPSAoYS54ICsgYi54KSAvIDIsXG4gICAgICAgIHB5ID0gKGEueSArIGIueSkgLyAyO1xuICAgIGRvIHtcbiAgICAgICAgaWYgKCgocC55ID4gcHkpICE9PSAocC5uZXh0LnkgPiBweSkpICYmIHAubmV4dC55ICE9PSBwLnkgJiZcbiAgICAgICAgICAgICAgICAocHggPCAocC5uZXh0LnggLSBwLngpICogKHB5IC0gcC55KSAvIChwLm5leHQueSAtIHAueSkgKyBwLngpKVxuICAgICAgICAgICAgaW5zaWRlID0gIWluc2lkZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBhKTtcblxuICAgIHJldHVybiBpbnNpZGU7XG59XG5cbi8vIGxpbmsgdHdvIHBvbHlnb24gdmVydGljZXMgd2l0aCBhIGJyaWRnZTsgaWYgdGhlIHZlcnRpY2VzIGJlbG9uZyB0byB0aGUgc2FtZSByaW5nLCBpdCBzcGxpdHMgcG9seWdvbiBpbnRvIHR3bztcbi8vIGlmIG9uZSBiZWxvbmdzIHRvIHRoZSBvdXRlciByaW5nIGFuZCBhbm90aGVyIHRvIGEgaG9sZSwgaXQgbWVyZ2VzIGl0IGludG8gYSBzaW5nbGUgcmluZ1xuZnVuY3Rpb24gc3BsaXRQb2x5Z29uKGEsIGIpIHtcbiAgICB2YXIgYTIgPSBuZXcgTm9kZShhLmksIGEueCwgYS55KSxcbiAgICAgICAgYjIgPSBuZXcgTm9kZShiLmksIGIueCwgYi55KSxcbiAgICAgICAgYW4gPSBhLm5leHQsXG4gICAgICAgIGJwID0gYi5wcmV2O1xuXG4gICAgYS5uZXh0ID0gYjtcbiAgICBiLnByZXYgPSBhO1xuXG4gICAgYTIubmV4dCA9IGFuO1xuICAgIGFuLnByZXYgPSBhMjtcblxuICAgIGIyLm5leHQgPSBhMjtcbiAgICBhMi5wcmV2ID0gYjI7XG5cbiAgICBicC5uZXh0ID0gYjI7XG4gICAgYjIucHJldiA9IGJwO1xuXG4gICAgcmV0dXJuIGIyO1xufVxuXG4vLyBjcmVhdGUgYSBub2RlIGFuZCBvcHRpb25hbGx5IGxpbmsgaXQgd2l0aCBwcmV2aW91cyBvbmUgKGluIGEgY2lyY3VsYXIgZG91Ymx5IGxpbmtlZCBsaXN0KVxuZnVuY3Rpb24gaW5zZXJ0Tm9kZShpLCB4LCB5LCBsYXN0KSB7XG4gICAgdmFyIHAgPSBuZXcgTm9kZShpLCB4LCB5KTtcblxuICAgIGlmICghbGFzdCkge1xuICAgICAgICBwLnByZXYgPSBwO1xuICAgICAgICBwLm5leHQgPSBwO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgcC5uZXh0ID0gbGFzdC5uZXh0O1xuICAgICAgICBwLnByZXYgPSBsYXN0O1xuICAgICAgICBsYXN0Lm5leHQucHJldiA9IHA7XG4gICAgICAgIGxhc3QubmV4dCA9IHA7XG4gICAgfVxuICAgIHJldHVybiBwO1xufVxuXG5mdW5jdGlvbiByZW1vdmVOb2RlKHApIHtcbiAgICBwLm5leHQucHJldiA9IHAucHJldjtcbiAgICBwLnByZXYubmV4dCA9IHAubmV4dDtcblxuICAgIGlmIChwLnByZXZaKSBwLnByZXZaLm5leHRaID0gcC5uZXh0WjtcbiAgICBpZiAocC5uZXh0WikgcC5uZXh0Wi5wcmV2WiA9IHAucHJldlo7XG59XG5cbmZ1bmN0aW9uIE5vZGUoaSwgeCwgeSkge1xuICAgIC8vIHZlcnRleCBpbmRleCBpbiBjb29yZGluYXRlcyBhcnJheVxuICAgIHRoaXMuaSA9IGk7XG5cbiAgICAvLyB2ZXJ0ZXggY29vcmRpbmF0ZXNcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG5cbiAgICAvLyBwcmV2aW91cyBhbmQgbmV4dCB2ZXJ0ZXggbm9kZXMgaW4gYSBwb2x5Z29uIHJpbmdcbiAgICB0aGlzLnByZXYgPSBudWxsO1xuICAgIHRoaXMubmV4dCA9IG51bGw7XG5cbiAgICAvLyB6LW9yZGVyIGN1cnZlIHZhbHVlXG4gICAgdGhpcy56ID0gbnVsbDtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IG5vZGVzIGluIHotb3JkZXJcbiAgICB0aGlzLnByZXZaID0gbnVsbDtcbiAgICB0aGlzLm5leHRaID0gbnVsbDtcblxuICAgIC8vIGluZGljYXRlcyB3aGV0aGVyIHRoaXMgaXMgYSBzdGVpbmVyIHBvaW50XG4gICAgdGhpcy5zdGVpbmVyID0gZmFsc2U7XG59XG5cbi8vIHJldHVybiBhIHBlcmNlbnRhZ2UgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBwb2x5Z29uIGFyZWEgYW5kIGl0cyB0cmlhbmd1bGF0aW9uIGFyZWE7XG4vLyB1c2VkIHRvIHZlcmlmeSBjb3JyZWN0bmVzcyBvZiB0cmlhbmd1bGF0aW9uXG5lYXJjdXQuZGV2aWF0aW9uID0gZnVuY3Rpb24gKGRhdGEsIGhvbGVJbmRpY2VzLCBkaW0sIHRyaWFuZ2xlcykge1xuICAgIHZhciBoYXNIb2xlcyA9IGhvbGVJbmRpY2VzICYmIGhvbGVJbmRpY2VzLmxlbmd0aDtcbiAgICB2YXIgb3V0ZXJMZW4gPSBoYXNIb2xlcyA/IGhvbGVJbmRpY2VzWzBdICogZGltIDogZGF0YS5sZW5ndGg7XG5cbiAgICB2YXIgcG9seWdvbkFyZWEgPSBNYXRoLmFicyhzaWduZWRBcmVhKGRhdGEsIDAsIG91dGVyTGVuLCBkaW0pKTtcbiAgICBpZiAoaGFzSG9sZXMpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGhvbGVJbmRpY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgc3RhcnQgPSBob2xlSW5kaWNlc1tpXSAqIGRpbTtcbiAgICAgICAgICAgIHZhciBlbmQgPSBpIDwgbGVuIC0gMSA/IGhvbGVJbmRpY2VzW2kgKyAxXSAqIGRpbSA6IGRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgcG9seWdvbkFyZWEgLT0gTWF0aC5hYnMoc2lnbmVkQXJlYShkYXRhLCBzdGFydCwgZW5kLCBkaW0pKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciB0cmlhbmdsZXNBcmVhID0gMDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgdHJpYW5nbGVzLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgICAgIHZhciBhID0gdHJpYW5nbGVzW2ldICogZGltO1xuICAgICAgICB2YXIgYiA9IHRyaWFuZ2xlc1tpICsgMV0gKiBkaW07XG4gICAgICAgIHZhciBjID0gdHJpYW5nbGVzW2kgKyAyXSAqIGRpbTtcbiAgICAgICAgdHJpYW5nbGVzQXJlYSArPSBNYXRoLmFicyhcbiAgICAgICAgICAgIChkYXRhW2FdIC0gZGF0YVtjXSkgKiAoZGF0YVtiICsgMV0gLSBkYXRhW2EgKyAxXSkgLVxuICAgICAgICAgICAgKGRhdGFbYV0gLSBkYXRhW2JdKSAqIChkYXRhW2MgKyAxXSAtIGRhdGFbYSArIDFdKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvbHlnb25BcmVhID09PSAwICYmIHRyaWFuZ2xlc0FyZWEgPT09IDAgPyAwIDpcbiAgICAgICAgTWF0aC5hYnMoKHRyaWFuZ2xlc0FyZWEgLSBwb2x5Z29uQXJlYSkgLyBwb2x5Z29uQXJlYSk7XG59O1xuXG5mdW5jdGlvbiBzaWduZWRBcmVhKGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSkge1xuICAgIHZhciBzdW0gPSAwO1xuICAgIGZvciAodmFyIGkgPSBzdGFydCwgaiA9IGVuZCAtIGRpbTsgaSA8IGVuZDsgaSArPSBkaW0pIHtcbiAgICAgICAgc3VtICs9IChkYXRhW2pdIC0gZGF0YVtpXSkgKiAoZGF0YVtpICsgMV0gKyBkYXRhW2ogKyAxXSk7XG4gICAgICAgIGogPSBpO1xuICAgIH1cbiAgICByZXR1cm4gc3VtO1xufVxuXG4vLyB0dXJuIGEgcG9seWdvbiBpbiBhIG11bHRpLWRpbWVuc2lvbmFsIGFycmF5IGZvcm0gKGUuZy4gYXMgaW4gR2VvSlNPTikgaW50byBhIGZvcm0gRWFyY3V0IGFjY2VwdHNcbmVhcmN1dC5mbGF0dGVuID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICB2YXIgZGltID0gZGF0YVswXVswXS5sZW5ndGgsXG4gICAgICAgIHJlc3VsdCA9IHt2ZXJ0aWNlczogW10sIGhvbGVzOiBbXSwgZGltZW5zaW9uczogZGltfSxcbiAgICAgICAgaG9sZUluZGV4ID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGRhdGFbaV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGZvciAodmFyIGQgPSAwOyBkIDwgZGltOyBkKyspIHJlc3VsdC52ZXJ0aWNlcy5wdXNoKGRhdGFbaV1bal1bZF0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAgICAgaG9sZUluZGV4ICs9IGRhdGFbaSAtIDFdLmxlbmd0aDtcbiAgICAgICAgICAgIHJlc3VsdC5ob2xlcy5wdXNoKGhvbGVJbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHF1aWNrc2VsZWN0KGFyciwgaywgbGVmdCwgcmlnaHQsIGNvbXBhcmUpIHtcbiAgICBxdWlja3NlbGVjdFN0ZXAoYXJyLCBrLCBsZWZ0IHx8IDAsIHJpZ2h0IHx8IChhcnIubGVuZ3RoIC0gMSksIGNvbXBhcmUgfHwgZGVmYXVsdENvbXBhcmUpO1xufVxuXG5mdW5jdGlvbiBxdWlja3NlbGVjdFN0ZXAoYXJyLCBrLCBsZWZ0LCByaWdodCwgY29tcGFyZSkge1xuXG4gICAgd2hpbGUgKHJpZ2h0ID4gbGVmdCkge1xuICAgICAgICBpZiAocmlnaHQgLSBsZWZ0ID4gNjAwKSB7XG4gICAgICAgICAgICB2YXIgbiA9IHJpZ2h0IC0gbGVmdCArIDE7XG4gICAgICAgICAgICB2YXIgbSA9IGsgLSBsZWZ0ICsgMTtcbiAgICAgICAgICAgIHZhciB6ID0gTWF0aC5sb2cobik7XG4gICAgICAgICAgICB2YXIgcyA9IDAuNSAqIE1hdGguZXhwKDIgKiB6IC8gMyk7XG4gICAgICAgICAgICB2YXIgc2QgPSAwLjUgKiBNYXRoLnNxcnQoeiAqIHMgKiAobiAtIHMpIC8gbikgKiAobSAtIG4gLyAyIDwgMCA/IC0xIDogMSk7XG4gICAgICAgICAgICB2YXIgbmV3TGVmdCA9IE1hdGgubWF4KGxlZnQsIE1hdGguZmxvb3IoayAtIG0gKiBzIC8gbiArIHNkKSk7XG4gICAgICAgICAgICB2YXIgbmV3UmlnaHQgPSBNYXRoLm1pbihyaWdodCwgTWF0aC5mbG9vcihrICsgKG4gLSBtKSAqIHMgLyBuICsgc2QpKTtcbiAgICAgICAgICAgIHF1aWNrc2VsZWN0U3RlcChhcnIsIGssIG5ld0xlZnQsIG5ld1JpZ2h0LCBjb21wYXJlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB0ID0gYXJyW2tdO1xuICAgICAgICB2YXIgaSA9IGxlZnQ7XG4gICAgICAgIHZhciBqID0gcmlnaHQ7XG5cbiAgICAgICAgc3dhcChhcnIsIGxlZnQsIGspO1xuICAgICAgICBpZiAoY29tcGFyZShhcnJbcmlnaHRdLCB0KSA+IDApIHN3YXAoYXJyLCBsZWZ0LCByaWdodCk7XG5cbiAgICAgICAgd2hpbGUgKGkgPCBqKSB7XG4gICAgICAgICAgICBzd2FwKGFyciwgaSwgaik7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgICAgICBqLS07XG4gICAgICAgICAgICB3aGlsZSAoY29tcGFyZShhcnJbaV0sIHQpIDwgMCkgaSsrO1xuICAgICAgICAgICAgd2hpbGUgKGNvbXBhcmUoYXJyW2pdLCB0KSA+IDApIGotLTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb21wYXJlKGFycltsZWZ0XSwgdCkgPT09IDApIHN3YXAoYXJyLCBsZWZ0LCBqKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBqKys7XG4gICAgICAgICAgICBzd2FwKGFyciwgaiwgcmlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGogPD0gaykgbGVmdCA9IGogKyAxO1xuICAgICAgICBpZiAoayA8PSBqKSByaWdodCA9IGogLSAxO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gc3dhcChhcnIsIGksIGopIHtcbiAgICB2YXIgdG1wID0gYXJyW2ldO1xuICAgIGFycltpXSA9IGFycltqXTtcbiAgICBhcnJbal0gPSB0bXA7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRDb21wYXJlKGEsIGIpIHtcbiAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgcXVpY2tzZWxlY3QgZnJvbSAncXVpY2tzZWxlY3QnO1xuXG5pbXBvcnQge2NhbGN1bGF0ZVNpZ25lZEFyZWF9IGZyb20gJy4vdXRpbCc7XG5cbmltcG9ydCB0eXBlIFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG4vLyBjbGFzc2lmaWVzIGFuIGFycmF5IG9mIHJpbmdzIGludG8gcG9seWdvbnMgd2l0aCBvdXRlciByaW5ncyBhbmQgaG9sZXNcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNsYXNzaWZ5UmluZ3MocmluZ3M6IEFycmF5PEFycmF5PFBvaW50Pj4sIG1heFJpbmdzOiBudW1iZXIpIHtcbiAgICBjb25zdCBsZW4gPSByaW5ncy5sZW5ndGg7XG5cbiAgICBpZiAobGVuIDw9IDEpIHJldHVybiBbcmluZ3NdO1xuXG4gICAgY29uc3QgcG9seWdvbnMgPSBbXTtcbiAgICBsZXQgcG9seWdvbixcbiAgICAgICAgY2N3O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCBhcmVhID0gY2FsY3VsYXRlU2lnbmVkQXJlYShyaW5nc1tpXSk7XG4gICAgICAgIGlmIChhcmVhID09PSAwKSBjb250aW51ZTtcblxuICAgICAgICAocmluZ3NbaV06IGFueSkuYXJlYSA9IE1hdGguYWJzKGFyZWEpO1xuXG4gICAgICAgIGlmIChjY3cgPT09IHVuZGVmaW5lZCkgY2N3ID0gYXJlYSA8IDA7XG5cbiAgICAgICAgaWYgKGNjdyA9PT0gYXJlYSA8IDApIHtcbiAgICAgICAgICAgIGlmIChwb2x5Z29uKSBwb2x5Z29ucy5wdXNoKHBvbHlnb24pO1xuICAgICAgICAgICAgcG9seWdvbiA9IFtyaW5nc1tpXV07XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIChwb2x5Z29uOiBhbnkpLnB1c2gocmluZ3NbaV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChwb2x5Z29uKSBwb2x5Z29ucy5wdXNoKHBvbHlnb24pO1xuXG4gICAgLy8gRWFyY3V0IHBlcmZvcm1hbmNlIGRlZ3JhZGVzIHdpdGggdGhlICMgb2YgcmluZ3MgaW4gYSBwb2x5Z29uLiBGb3IgdGhpc1xuICAgIC8vIHJlYXNvbiwgd2UgbGltaXQgc3RyaXAgb3V0IGFsbCBidXQgdGhlIGBtYXhSaW5nc2AgbGFyZ2VzdCByaW5ncy5cbiAgICBpZiAobWF4UmluZ3MgPiAxKSB7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcG9seWdvbnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChwb2x5Z29uc1tqXS5sZW5ndGggPD0gbWF4UmluZ3MpIGNvbnRpbnVlO1xuICAgICAgICAgICAgcXVpY2tzZWxlY3QocG9seWdvbnNbal0sIG1heFJpbmdzLCAxLCBwb2x5Z29uc1tqXS5sZW5ndGggLSAxLCBjb21wYXJlQXJlYXMpO1xuICAgICAgICAgICAgcG9seWdvbnNbal0gPSBwb2x5Z29uc1tqXS5zbGljZSgwLCBtYXhSaW5ncyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcG9seWdvbnM7XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVBcmVhcyhhLCBiKSB7XG4gICAgcmV0dXJuIGIuYXJlYSAtIGEuYXJlYTtcbn1cbiIsIi8vIEBmbG93XG5pbXBvcnQgdHlwZSBGaWxsU3R5bGVMYXllciBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZV9sYXllci9maWxsX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIEZpbGxFeHRydXNpb25TdHlsZUxheWVyIGZyb20gJy4uLy4uL3N0eWxlL3N0eWxlX2xheWVyL2ZpbGxfZXh0cnVzaW9uX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIExpbmVTdHlsZUxheWVyIGZyb20gJy4uLy4uL3N0eWxlL3N0eWxlX2xheWVyL2xpbmVfc3R5bGVfbGF5ZXInO1xuXG5pbXBvcnQgdHlwZSB7XG4gICAgQnVja2V0RmVhdHVyZSxcbiAgICBQb3B1bGF0ZVBhcmFtZXRlcnNcbn0gZnJvbSAnLi4vYnVja2V0JztcblxudHlwZSBQYXR0ZXJuU3R5bGVMYXllcnMgPVxuICAgIEFycmF5PExpbmVTdHlsZUxheWVyPiB8XG4gICAgQXJyYXk8RmlsbFN0eWxlTGF5ZXI+IHxcbiAgICBBcnJheTxGaWxsRXh0cnVzaW9uU3R5bGVMYXllcj47XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNQYXR0ZXJuKHR5cGU6IHN0cmluZywgbGF5ZXJzOiBQYXR0ZXJuU3R5bGVMYXllcnMsIG9wdGlvbnM6IFBvcHVsYXRlUGFyYW1ldGVycykge1xuICAgIGNvbnN0IHBhdHRlcm5zID0gb3B0aW9ucy5wYXR0ZXJuRGVwZW5kZW5jaWVzO1xuICAgIGxldCBoYXNQYXR0ZXJuID0gZmFsc2U7XG5cbiAgICBmb3IgKGNvbnN0IGxheWVyIG9mIGxheWVycykge1xuICAgICAgICBjb25zdCBwYXR0ZXJuUHJvcGVydHkgPSBsYXllci5wYWludC5nZXQoYCR7dHlwZX0tcGF0dGVybmApO1xuICAgICAgICBpZiAoIXBhdHRlcm5Qcm9wZXJ0eS5pc0NvbnN0YW50KCkpIHtcbiAgICAgICAgICAgIGhhc1BhdHRlcm4gPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29uc3RhbnRQYXR0ZXJuID0gcGF0dGVyblByb3BlcnR5LmNvbnN0YW50T3IobnVsbCk7XG4gICAgICAgIGlmIChjb25zdGFudFBhdHRlcm4pIHtcbiAgICAgICAgICAgIGhhc1BhdHRlcm4gPSB0cnVlO1xuICAgICAgICAgICAgcGF0dGVybnNbY29uc3RhbnRQYXR0ZXJuLnRvXSA9ICB0cnVlO1xuICAgICAgICAgICAgcGF0dGVybnNbY29uc3RhbnRQYXR0ZXJuLmZyb21dID0gIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGFzUGF0dGVybjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZFBhdHRlcm5EZXBlbmRlbmNpZXModHlwZTogc3RyaW5nLCBsYXllcnM6IFBhdHRlcm5TdHlsZUxheWVycywgcGF0dGVybkZlYXR1cmU6IEJ1Y2tldEZlYXR1cmUsIHpvb206IG51bWJlciwgb3B0aW9uczogUG9wdWxhdGVQYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgcGF0dGVybnMgPSBvcHRpb25zLnBhdHRlcm5EZXBlbmRlbmNpZXM7XG4gICAgZm9yIChjb25zdCBsYXllciBvZiBsYXllcnMpIHtcbiAgICAgICAgY29uc3QgcGF0dGVyblByb3BlcnR5ID0gbGF5ZXIucGFpbnQuZ2V0KGAke3R5cGV9LXBhdHRlcm5gKTtcblxuICAgICAgICBjb25zdCBwYXR0ZXJuUHJvcGVydHlWYWx1ZSA9IHBhdHRlcm5Qcm9wZXJ0eS52YWx1ZTtcbiAgICAgICAgaWYgKHBhdHRlcm5Qcm9wZXJ0eVZhbHVlLmtpbmQgIT09IFwiY29uc3RhbnRcIikge1xuICAgICAgICAgICAgbGV0IG1pbiA9IHBhdHRlcm5Qcm9wZXJ0eVZhbHVlLmV2YWx1YXRlKHt6b29tOiB6b29tIC0gMX0sIHBhdHRlcm5GZWF0dXJlLCB7fSwgb3B0aW9ucy5hdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICAgICAgbGV0IG1pZCA9IHBhdHRlcm5Qcm9wZXJ0eVZhbHVlLmV2YWx1YXRlKHt6b29tfSwgcGF0dGVybkZlYXR1cmUsIHt9LCBvcHRpb25zLmF2YWlsYWJsZUltYWdlcyk7XG4gICAgICAgICAgICBsZXQgbWF4ID0gcGF0dGVyblByb3BlcnR5VmFsdWUuZXZhbHVhdGUoe3pvb206IHpvb20gKyAxfSwgcGF0dGVybkZlYXR1cmUsIHt9LCBvcHRpb25zLmF2YWlsYWJsZUltYWdlcyk7XG4gICAgICAgICAgICBtaW4gPSBtaW4gJiYgbWluLm5hbWUgPyBtaW4ubmFtZSA6IG1pbjtcbiAgICAgICAgICAgIG1pZCA9IG1pZCAmJiBtaWQubmFtZSA/IG1pZC5uYW1lIDogbWlkO1xuICAgICAgICAgICAgbWF4ID0gbWF4ICYmIG1heC5uYW1lID8gbWF4Lm5hbWUgOiBtYXg7XG4gICAgICAgICAgICAvLyBhZGQgdG8gcGF0dGVybkRlcGVuZGVuY2llc1xuICAgICAgICAgICAgcGF0dGVybnNbbWluXSA9IHRydWU7XG4gICAgICAgICAgICBwYXR0ZXJuc1ttaWRdID0gdHJ1ZTtcbiAgICAgICAgICAgIHBhdHRlcm5zW21heF0gPSB0cnVlO1xuXG4gICAgICAgICAgICAvLyBzYXZlIGZvciBsYXlvdXRcbiAgICAgICAgICAgIHBhdHRlcm5GZWF0dXJlLnBhdHRlcm5zW2xheWVyLmlkXSA9IHttaW4sIG1pZCwgbWF4fTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGF0dGVybkZlYXR1cmU7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge0ZpbGxMYXlvdXRBcnJheX0gZnJvbSAnLi4vYXJyYXlfdHlwZXMnO1xuXG5pbXBvcnQge21lbWJlcnMgYXMgbGF5b3V0QXR0cmlidXRlc30gZnJvbSAnLi9maWxsX2F0dHJpYnV0ZXMnO1xuaW1wb3J0IFNlZ21lbnRWZWN0b3IgZnJvbSAnLi4vc2VnbWVudCc7XG5pbXBvcnQge1Byb2dyYW1Db25maWd1cmF0aW9uU2V0fSBmcm9tICcuLi9wcm9ncmFtX2NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtMaW5lSW5kZXhBcnJheSwgVHJpYW5nbGVJbmRleEFycmF5fSBmcm9tICcuLi9pbmRleF9hcnJheV90eXBlJztcbmltcG9ydCBlYXJjdXQgZnJvbSAnZWFyY3V0JztcbmltcG9ydCBjbGFzc2lmeVJpbmdzIGZyb20gJy4uLy4uL3V0aWwvY2xhc3NpZnlfcmluZ3MnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuY29uc3QgRUFSQ1VUX01BWF9SSU5HUyA9IDUwMDtcbmltcG9ydCB7cmVnaXN0ZXJ9IGZyb20gJy4uLy4uL3V0aWwvd2ViX3dvcmtlcl90cmFuc2Zlcic7XG5pbXBvcnQge2hhc1BhdHRlcm4sIGFkZFBhdHRlcm5EZXBlbmRlbmNpZXN9IGZyb20gJy4vcGF0dGVybl9idWNrZXRfZmVhdHVyZXMnO1xuaW1wb3J0IGxvYWRHZW9tZXRyeSBmcm9tICcuLi9sb2FkX2dlb21ldHJ5JztcbmltcG9ydCBFdmFsdWF0aW9uUGFyYW1ldGVycyBmcm9tICcuLi8uLi9zdHlsZS9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuXG5pbXBvcnQgdHlwZSB7Q2Fub25pY2FsVGlsZUlEfSBmcm9tICcuLi8uLi9zb3VyY2UvdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSB7XG4gICAgQnVja2V0LFxuICAgIEJ1Y2tldFBhcmFtZXRlcnMsXG4gICAgQnVja2V0RmVhdHVyZSxcbiAgICBJbmRleGVkRmVhdHVyZSxcbiAgICBQb3B1bGF0ZVBhcmFtZXRlcnNcbn0gZnJvbSAnLi4vYnVja2V0JztcbmltcG9ydCB0eXBlIEZpbGxTdHlsZUxheWVyIGZyb20gJy4uLy4uL3N0eWxlL3N0eWxlX2xheWVyL2ZpbGxfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi8uLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIEluZGV4QnVmZmVyIGZyb20gJy4uLy4uL2dsL2luZGV4X2J1ZmZlcic7XG5pbXBvcnQgdHlwZSBWZXJ0ZXhCdWZmZXIgZnJvbSAnLi4vLi4vZ2wvdmVydGV4X2J1ZmZlcic7XG5pbXBvcnQgdHlwZSBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB0eXBlIHtGZWF0dXJlU3RhdGVzfSBmcm9tICcuLi8uLi9zb3VyY2Uvc291cmNlX3N0YXRlJztcbmltcG9ydCB0eXBlIHtJbWFnZVBvc2l0aW9ufSBmcm9tICcuLi8uLi9yZW5kZXIvaW1hZ2VfYXRsYXMnO1xuXG5jbGFzcyBGaWxsQnVja2V0IGltcGxlbWVudHMgQnVja2V0IHtcbiAgICBpbmRleDogbnVtYmVyO1xuICAgIHpvb206IG51bWJlcjtcbiAgICBvdmVyc2NhbGluZzogbnVtYmVyO1xuICAgIGxheWVyczogQXJyYXk8RmlsbFN0eWxlTGF5ZXI+O1xuICAgIGxheWVySWRzOiBBcnJheTxzdHJpbmc+O1xuICAgIHN0YXRlRGVwZW5kZW50TGF5ZXJzOiBBcnJheTxGaWxsU3R5bGVMYXllcj47XG4gICAgc3RhdGVEZXBlbmRlbnRMYXllcklkczogQXJyYXk8c3RyaW5nPjtcbiAgICBwYXR0ZXJuRmVhdHVyZXM6IEFycmF5PEJ1Y2tldEZlYXR1cmU+O1xuXG4gICAgbGF5b3V0VmVydGV4QXJyYXk6IEZpbGxMYXlvdXRBcnJheTtcbiAgICBsYXlvdXRWZXJ0ZXhCdWZmZXI6IFZlcnRleEJ1ZmZlcjtcblxuICAgIGluZGV4QXJyYXk6IFRyaWFuZ2xlSW5kZXhBcnJheTtcbiAgICBpbmRleEJ1ZmZlcjogSW5kZXhCdWZmZXI7XG5cbiAgICBpbmRleEFycmF5MjogTGluZUluZGV4QXJyYXk7XG4gICAgaW5kZXhCdWZmZXIyOiBJbmRleEJ1ZmZlcjtcblxuICAgIGhhc1BhdHRlcm46IGJvb2xlYW47XG4gICAgcHJvZ3JhbUNvbmZpZ3VyYXRpb25zOiBQcm9ncmFtQ29uZmlndXJhdGlvblNldDxGaWxsU3R5bGVMYXllcj47XG4gICAgc2VnbWVudHM6IFNlZ21lbnRWZWN0b3I7XG4gICAgc2VnbWVudHMyOiBTZWdtZW50VmVjdG9yO1xuICAgIHVwbG9hZGVkOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogQnVja2V0UGFyYW1ldGVyczxGaWxsU3R5bGVMYXllcj4pIHtcbiAgICAgICAgdGhpcy56b29tID0gb3B0aW9ucy56b29tO1xuICAgICAgICB0aGlzLm92ZXJzY2FsaW5nID0gb3B0aW9ucy5vdmVyc2NhbGluZztcbiAgICAgICAgdGhpcy5sYXllcnMgPSBvcHRpb25zLmxheWVycztcbiAgICAgICAgdGhpcy5sYXllcklkcyA9IHRoaXMubGF5ZXJzLm1hcChsYXllciA9PiBsYXllci5pZCk7XG4gICAgICAgIHRoaXMuaW5kZXggPSBvcHRpb25zLmluZGV4O1xuICAgICAgICB0aGlzLmhhc1BhdHRlcm4gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wYXR0ZXJuRmVhdHVyZXMgPSBbXTtcblxuICAgICAgICB0aGlzLmxheW91dFZlcnRleEFycmF5ID0gbmV3IEZpbGxMYXlvdXRBcnJheSgpO1xuICAgICAgICB0aGlzLmluZGV4QXJyYXkgPSBuZXcgVHJpYW5nbGVJbmRleEFycmF5KCk7XG4gICAgICAgIHRoaXMuaW5kZXhBcnJheTIgPSBuZXcgTGluZUluZGV4QXJyYXkoKTtcbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMgPSBuZXcgUHJvZ3JhbUNvbmZpZ3VyYXRpb25TZXQobGF5b3V0QXR0cmlidXRlcywgb3B0aW9ucy5sYXllcnMsIG9wdGlvbnMuem9vbSk7XG4gICAgICAgIHRoaXMuc2VnbWVudHMgPSBuZXcgU2VnbWVudFZlY3RvcigpO1xuICAgICAgICB0aGlzLnNlZ21lbnRzMiA9IG5ldyBTZWdtZW50VmVjdG9yKCk7XG4gICAgICAgIHRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcklkcyA9IHRoaXMubGF5ZXJzLmZpbHRlcigobCkgPT4gbC5pc1N0YXRlRGVwZW5kZW50KCkpLm1hcCgobCkgPT4gbC5pZCk7XG4gICAgfVxuXG4gICAgcG9wdWxhdGUoZmVhdHVyZXM6IEFycmF5PEluZGV4ZWRGZWF0dXJlPiwgb3B0aW9uczogUG9wdWxhdGVQYXJhbWV0ZXJzLCBjYW5vbmljYWw6IENhbm9uaWNhbFRpbGVJRCkge1xuICAgICAgICB0aGlzLmhhc1BhdHRlcm4gPSBoYXNQYXR0ZXJuKCdmaWxsJywgdGhpcy5sYXllcnMsIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBmaWxsU29ydEtleSA9IHRoaXMubGF5ZXJzWzBdLmxheW91dC5nZXQoJ2ZpbGwtc29ydC1rZXknKTtcbiAgICAgICAgY29uc3QgYnVja2V0RmVhdHVyZXMgPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IHtmZWF0dXJlLCBpZCwgaW5kZXgsIHNvdXJjZUxheWVySW5kZXh9IG9mIGZlYXR1cmVzKSB7XG4gICAgICAgICAgICBjb25zdCBuZWVkR2VvbWV0cnkgPSB0aGlzLmxheWVyc1swXS5fZmVhdHVyZUZpbHRlci5uZWVkR2VvbWV0cnk7XG4gICAgICAgICAgICBjb25zdCBldmFsdWF0aW9uRmVhdHVyZSA9IHt0eXBlOiBmZWF0dXJlLnR5cGUsXG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczogZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAgIGdlb21ldHJ5OiBuZWVkR2VvbWV0cnkgPyBsb2FkR2VvbWV0cnkoZmVhdHVyZSkgOiBbXX07XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5sYXllcnNbMF0uX2ZlYXR1cmVGaWx0ZXIuZmlsdGVyKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyh0aGlzLnpvb20pLCBldmFsdWF0aW9uRmVhdHVyZSwgY2Fub25pY2FsKSkgY29udGludWU7XG5cbiAgICAgICAgICAgIGlmICghbmVlZEdlb21ldHJ5KSAgZXZhbHVhdGlvbkZlYXR1cmUuZ2VvbWV0cnkgPSBsb2FkR2VvbWV0cnkoZmVhdHVyZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHNvcnRLZXkgPSBmaWxsU29ydEtleSA/XG4gICAgICAgICAgICAgICAgZmlsbFNvcnRLZXkuZXZhbHVhdGUoZXZhbHVhdGlvbkZlYXR1cmUsIHt9LCBjYW5vbmljYWwsIG9wdGlvbnMuYXZhaWxhYmxlSW1hZ2VzKSA6XG4gICAgICAgICAgICAgICAgdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICBjb25zdCBidWNrZXRGZWF0dXJlOiBCdWNrZXRGZWF0dXJlID0ge1xuICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IGZlYXR1cmUucHJvcGVydGllcyxcbiAgICAgICAgICAgICAgICB0eXBlOiBmZWF0dXJlLnR5cGUsXG4gICAgICAgICAgICAgICAgc291cmNlTGF5ZXJJbmRleCxcbiAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgICBnZW9tZXRyeTogZXZhbHVhdGlvbkZlYXR1cmUuZ2VvbWV0cnksXG4gICAgICAgICAgICAgICAgcGF0dGVybnM6IHt9LFxuICAgICAgICAgICAgICAgIHNvcnRLZXlcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGJ1Y2tldEZlYXR1cmVzLnB1c2goYnVja2V0RmVhdHVyZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsbFNvcnRLZXkpIHtcbiAgICAgICAgICAgIGJ1Y2tldEZlYXR1cmVzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBhLnNvcnRLZXkgaXMgYWx3YXlzIGEgbnVtYmVyIHdoZW4gaW4gdXNlXG4gICAgICAgICAgICAgICAgcmV0dXJuICgoYS5zb3J0S2V5OiBhbnkpOiBudW1iZXIpIC0gKChiLnNvcnRLZXk6IGFueSk6IG51bWJlcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgYnVja2V0RmVhdHVyZSBvZiBidWNrZXRGZWF0dXJlcykge1xuICAgICAgICAgICAgY29uc3Qge2dlb21ldHJ5LCBpbmRleCwgc291cmNlTGF5ZXJJbmRleH0gPSBidWNrZXRGZWF0dXJlO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5oYXNQYXR0ZXJuKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0dGVybkZlYXR1cmUgPSBhZGRQYXR0ZXJuRGVwZW5kZW5jaWVzKCdmaWxsJywgdGhpcy5sYXllcnMsIGJ1Y2tldEZlYXR1cmUsIHRoaXMuem9vbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgLy8gcGF0dGVybiBmZWF0dXJlcyBhcmUgYWRkZWQgb25seSBvbmNlIHRoZSBwYXR0ZXJuIGlzIGxvYWRlZCBpbnRvIHRoZSBpbWFnZSBhdGxhc1xuICAgICAgICAgICAgICAgIC8vIHNvIGFyZSBzdG9yZWQgZHVyaW5nIHBvcHVsYXRlIHVudGlsIGxhdGVyIHVwZGF0ZWQgd2l0aCBwb3NpdGlvbnMgYnkgdGlsZSB3b3JrZXIgaW4gYWRkRmVhdHVyZXNcbiAgICAgICAgICAgICAgICB0aGlzLnBhdHRlcm5GZWF0dXJlcy5wdXNoKHBhdHRlcm5GZWF0dXJlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRGZWF0dXJlKGJ1Y2tldEZlYXR1cmUsIGdlb21ldHJ5LCBpbmRleCwgY2Fub25pY2FsLCB7fSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlc1tpbmRleF0uZmVhdHVyZTtcbiAgICAgICAgICAgIG9wdGlvbnMuZmVhdHVyZUluZGV4Lmluc2VydChmZWF0dXJlLCBnZW9tZXRyeSwgaW5kZXgsIHNvdXJjZUxheWVySW5kZXgsIHRoaXMuaW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlKHN0YXRlczogRmVhdHVyZVN0YXRlcywgdnRMYXllcjogVmVjdG9yVGlsZUxheWVyLCBpbWFnZVBvc2l0aW9uczoge1tfOiBzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSkge1xuICAgICAgICBpZiAoIXRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcnMubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwZGF0ZVBhaW50QXJyYXlzKHN0YXRlcywgdnRMYXllciwgdGhpcy5zdGF0ZURlcGVuZGVudExheWVycywgaW1hZ2VQb3NpdGlvbnMpO1xuICAgIH1cblxuICAgIGFkZEZlYXR1cmVzKG9wdGlvbnM6IFBvcHVsYXRlUGFyYW1ldGVycywgY2Fub25pY2FsOiBDYW5vbmljYWxUaWxlSUQsIGltYWdlUG9zaXRpb25zOiB7W186IHN0cmluZ106IEltYWdlUG9zaXRpb259KSB7XG4gICAgICAgIGZvciAoY29uc3QgZmVhdHVyZSBvZiB0aGlzLnBhdHRlcm5GZWF0dXJlcykge1xuICAgICAgICAgICAgdGhpcy5hZGRGZWF0dXJlKGZlYXR1cmUsIGZlYXR1cmUuZ2VvbWV0cnksIGZlYXR1cmUuaW5kZXgsIGNhbm9uaWNhbCwgaW1hZ2VQb3NpdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIHVwbG9hZFBlbmRpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy51cGxvYWRlZCB8fCB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5uZWVkc1VwbG9hZDtcbiAgICB9XG4gICAgdXBsb2FkKGNvbnRleHQ6IENvbnRleHQpIHtcbiAgICAgICAgaWYgKCF0aGlzLnVwbG9hZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmxheW91dFZlcnRleEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMubGF5b3V0VmVydGV4QXJyYXksIGxheW91dEF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgdGhpcy5pbmRleEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5KTtcbiAgICAgICAgICAgIHRoaXMuaW5kZXhCdWZmZXIyID0gY29udGV4dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXkyKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGxvYWQoY29udGV4dCk7XG4gICAgICAgIHRoaXMudXBsb2FkZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGlmICghdGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIpIHJldHVybjtcbiAgICAgICAgdGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5pbmRleEJ1ZmZlcjIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuc2VnbWVudHMuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLnNlZ21lbnRzMi5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgYWRkRmVhdHVyZShmZWF0dXJlOiBCdWNrZXRGZWF0dXJlLCBnZW9tZXRyeTogQXJyYXk8QXJyYXk8UG9pbnQ+PiwgaW5kZXg6IG51bWJlciwgY2Fub25pY2FsOiBDYW5vbmljYWxUaWxlSUQsIGltYWdlUG9zaXRpb25zOiB7W186IHN0cmluZ106IEltYWdlUG9zaXRpb259KSB7XG4gICAgICAgIGZvciAoY29uc3QgcG9seWdvbiBvZiBjbGFzc2lmeVJpbmdzKGdlb21ldHJ5LCBFQVJDVVRfTUFYX1JJTkdTKSkge1xuICAgICAgICAgICAgbGV0IG51bVZlcnRpY2VzID0gMDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmluZyBvZiBwb2x5Z29uKSB7XG4gICAgICAgICAgICAgICAgbnVtVmVydGljZXMgKz0gcmluZy5sZW5ndGg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHRyaWFuZ2xlU2VnbWVudCA9IHRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQobnVtVmVydGljZXMsIHRoaXMubGF5b3V0VmVydGV4QXJyYXksIHRoaXMuaW5kZXhBcnJheSk7XG4gICAgICAgICAgICBjb25zdCB0cmlhbmdsZUluZGV4ID0gdHJpYW5nbGVTZWdtZW50LnZlcnRleExlbmd0aDtcblxuICAgICAgICAgICAgY29uc3QgZmxhdHRlbmVkID0gW107XG4gICAgICAgICAgICBjb25zdCBob2xlSW5kaWNlcyA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJpbmcgb2YgcG9seWdvbikge1xuICAgICAgICAgICAgICAgIGlmIChyaW5nLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocmluZyAhPT0gcG9seWdvblswXSkge1xuICAgICAgICAgICAgICAgICAgICBob2xlSW5kaWNlcy5wdXNoKGZsYXR0ZW5lZC5sZW5ndGggLyAyKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBsaW5lU2VnbWVudCA9IHRoaXMuc2VnbWVudHMyLnByZXBhcmVTZWdtZW50KHJpbmcubGVuZ3RoLCB0aGlzLmxheW91dFZlcnRleEFycmF5LCB0aGlzLmluZGV4QXJyYXkyKTtcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5lSW5kZXggPSBsaW5lU2VnbWVudC52ZXJ0ZXhMZW5ndGg7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmxheW91dFZlcnRleEFycmF5LmVtcGxhY2VCYWNrKHJpbmdbMF0ueCwgcmluZ1swXS55KTtcbiAgICAgICAgICAgICAgICB0aGlzLmluZGV4QXJyYXkyLmVtcGxhY2VCYWNrKGxpbmVJbmRleCArIHJpbmcubGVuZ3RoIC0gMSwgbGluZUluZGV4KTtcbiAgICAgICAgICAgICAgICBmbGF0dGVuZWQucHVzaChyaW5nWzBdLngpO1xuICAgICAgICAgICAgICAgIGZsYXR0ZW5lZC5wdXNoKHJpbmdbMF0ueSk7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhyaW5nW2ldLngsIHJpbmdbaV0ueSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZXhBcnJheTIuZW1wbGFjZUJhY2sobGluZUluZGV4ICsgaSAtIDEsIGxpbmVJbmRleCArIGkpO1xuICAgICAgICAgICAgICAgICAgICBmbGF0dGVuZWQucHVzaChyaW5nW2ldLngpO1xuICAgICAgICAgICAgICAgICAgICBmbGF0dGVuZWQucHVzaChyaW5nW2ldLnkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxpbmVTZWdtZW50LnZlcnRleExlbmd0aCArPSByaW5nLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBsaW5lU2VnbWVudC5wcmltaXRpdmVMZW5ndGggKz0gcmluZy5sZW5ndGg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGluZGljZXMgPSBlYXJjdXQoZmxhdHRlbmVkLCBob2xlSW5kaWNlcyk7XG4gICAgICAgICAgICBhc3NlcnQoaW5kaWNlcy5sZW5ndGggJSAzID09PSAwKTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmRleEFycmF5LmVtcGxhY2VCYWNrKFxuICAgICAgICAgICAgICAgICAgICB0cmlhbmdsZUluZGV4ICsgaW5kaWNlc1tpXSxcbiAgICAgICAgICAgICAgICAgICAgdHJpYW5nbGVJbmRleCArIGluZGljZXNbaSArIDFdLFxuICAgICAgICAgICAgICAgICAgICB0cmlhbmdsZUluZGV4ICsgaW5kaWNlc1tpICsgMl0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0cmlhbmdsZVNlZ21lbnQudmVydGV4TGVuZ3RoICs9IG51bVZlcnRpY2VzO1xuICAgICAgICAgICAgdHJpYW5nbGVTZWdtZW50LnByaW1pdGl2ZUxlbmd0aCArPSBpbmRpY2VzLmxlbmd0aCAvIDM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMucG9wdWxhdGVQYWludEFycmF5cyh0aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCwgZmVhdHVyZSwgaW5kZXgsIGltYWdlUG9zaXRpb25zLCBjYW5vbmljYWwpO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ0ZpbGxCdWNrZXQnLCBGaWxsQnVja2V0LCB7b21pdDogWydsYXllcnMnLCAncGF0dGVybkZlYXR1cmVzJ119KTtcblxuZXhwb3J0IGRlZmF1bHQgRmlsbEJ1Y2tldDtcbiIsIi8vIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQuIEVkaXQgYnVpbGQvZ2VuZXJhdGUtc3R5bGUtY29kZS5qcywgdGhlbiBydW4gYHlhcm4gcnVuIGNvZGVnZW5gLlxuLy8gQGZsb3dcbi8qIGVzbGludC1kaXNhYmxlICovXG5cbmltcG9ydCBzdHlsZVNwZWMgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9yZWZlcmVuY2UvbGF0ZXN0JztcblxuaW1wb3J0IHtcbiAgICBQcm9wZXJ0aWVzLFxuICAgIERhdGFDb25zdGFudFByb3BlcnR5LFxuICAgIERhdGFEcml2ZW5Qcm9wZXJ0eSxcbiAgICBDcm9zc0ZhZGVkRGF0YURyaXZlblByb3BlcnR5LFxuICAgIENyb3NzRmFkZWRQcm9wZXJ0eSxcbiAgICBDb2xvclJhbXBQcm9wZXJ0eVxufSBmcm9tICcuLi9wcm9wZXJ0aWVzJztcblxuaW1wb3J0IHR5cGUgQ29sb3IgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy91dGlsL2NvbG9yJztcblxuaW1wb3J0IHR5cGUgRm9ybWF0dGVkIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9mb3JtYXR0ZWQnO1xuXG5pbXBvcnQgdHlwZSBSZXNvbHZlZEltYWdlIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5cbmV4cG9ydCB0eXBlIExheW91dFByb3BzID0ge3xcbiAgICBcImZpbGwtc29ydC1rZXlcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG58fTtcblxuY29uc3QgbGF5b3V0OiBQcm9wZXJ0aWVzPExheW91dFByb3BzPiA9IG5ldyBQcm9wZXJ0aWVzKHtcbiAgICBcImZpbGwtc29ydC1rZXlcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfZmlsbFwiXVtcImZpbGwtc29ydC1rZXlcIl0pLFxufSk7XG5cbmV4cG9ydCB0eXBlIFBhaW50UHJvcHMgPSB7fFxuICAgIFwiZmlsbC1hbnRpYWxpYXNcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8Ym9vbGVhbj4sXG4gICAgXCJmaWxsLW9wYWNpdHlcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJmaWxsLWNvbG9yXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxDb2xvcj4sXG4gICAgXCJmaWxsLW91dGxpbmUtY29sb3JcIjogRGF0YURyaXZlblByb3BlcnR5PENvbG9yPixcbiAgICBcImZpbGwtdHJhbnNsYXRlXCI6IERhdGFDb25zdGFudFByb3BlcnR5PFtudW1iZXIsIG51bWJlcl0+LFxuICAgIFwiZmlsbC10cmFuc2xhdGUtYW5jaG9yXCI6IERhdGFDb25zdGFudFByb3BlcnR5PFwibWFwXCIgfCBcInZpZXdwb3J0XCI+LFxuICAgIFwiZmlsbC1wYXR0ZXJuXCI6IENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHk8UmVzb2x2ZWRJbWFnZT4sXG58fTtcblxuY29uc3QgcGFpbnQ6IFByb3BlcnRpZXM8UGFpbnRQcm9wcz4gPSBuZXcgUHJvcGVydGllcyh7XG4gICAgXCJmaWxsLWFudGlhbGlhc1wiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbFwiXVtcImZpbGwtYW50aWFsaWFzXCJdKSxcbiAgICBcImZpbGwtb3BhY2l0eVwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2ZpbGxcIl1bXCJmaWxsLW9wYWNpdHlcIl0pLFxuICAgIFwiZmlsbC1jb2xvclwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2ZpbGxcIl1bXCJmaWxsLWNvbG9yXCJdKSxcbiAgICBcImZpbGwtb3V0bGluZS1jb2xvclwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2ZpbGxcIl1bXCJmaWxsLW91dGxpbmUtY29sb3JcIl0pLFxuICAgIFwiZmlsbC10cmFuc2xhdGVcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2ZpbGxcIl1bXCJmaWxsLXRyYW5zbGF0ZVwiXSksXG4gICAgXCJmaWxsLXRyYW5zbGF0ZS1hbmNob3JcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2ZpbGxcIl1bXCJmaWxsLXRyYW5zbGF0ZS1hbmNob3JcIl0pLFxuICAgIFwiZmlsbC1wYXR0ZXJuXCI6IG5ldyBDcm9zc0ZhZGVkRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2ZpbGxcIl1bXCJmaWxsLXBhdHRlcm5cIl0pLFxufSk7XG5cbi8vIE5vdGU6IHdpdGhvdXQgYWRkaW5nIHRoZSBleHBsaWNpdCB0eXBlIGFubm90YXRpb24sIEZsb3cgaW5mZXJzIHdlYWtlciB0eXBlc1xuLy8gZm9yIHRoZXNlIG9iamVjdHMgZnJvbSB0aGVpciB1c2UgaW4gdGhlIGNvbnN0cnVjdG9yIHRvIFN0eWxlTGF5ZXIsIGFzXG4vLyB7bGF5b3V0PzogUHJvcGVydGllczwuLi4+LCBwYWludDogUHJvcGVydGllczwuLi4+fVxuZXhwb3J0IGRlZmF1bHQgKHsgcGFpbnQsIGxheW91dCB9OiAkRXhhY3Q8e1xuICBwYWludDogUHJvcGVydGllczxQYWludFByb3BzPiwgbGF5b3V0OiBQcm9wZXJ0aWVzPExheW91dFByb3BzPlxufT4pO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGVfbGF5ZXInO1xuXG5pbXBvcnQgRmlsbEJ1Y2tldCBmcm9tICcuLi8uLi9kYXRhL2J1Y2tldC9maWxsX2J1Y2tldCc7XG5pbXBvcnQge3BvbHlnb25JbnRlcnNlY3RzTXVsdGlQb2x5Z29ufSBmcm9tICcuLi8uLi91dGlsL2ludGVyc2VjdGlvbl90ZXN0cyc7XG5pbXBvcnQge3RyYW5zbGF0ZURpc3RhbmNlLCB0cmFuc2xhdGV9IGZyb20gJy4uL3F1ZXJ5X3V0aWxzJztcbmltcG9ydCBwcm9wZXJ0aWVzIGZyb20gJy4vZmlsbF9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzJztcbmltcG9ydCB7VHJhbnNpdGlvbmFibGUsIFRyYW5zaXRpb25pbmcsIExheW91dCwgUG9zc2libHlFdmFsdWF0ZWR9IGZyb20gJy4uL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgdHlwZSB7RmVhdHVyZVN0YXRlfSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUge0J1Y2tldFBhcmFtZXRlcnN9IGZyb20gJy4uLy4uL2RhdGEvYnVja2V0JztcbmltcG9ydCB0eXBlIFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IHR5cGUge0xheW91dFByb3BzLCBQYWludFByb3BzfSBmcm9tICcuL2ZpbGxfc3R5bGVfbGF5ZXJfcHJvcGVydGllcyc7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uUGFyYW1ldGVycyBmcm9tICcuLi9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuaW1wb3J0IHR5cGUgVHJhbnNmb3JtIGZyb20gJy4uLy4uL2dlby90cmFuc2Zvcm0nO1xuaW1wb3J0IHR5cGUge0xheWVyU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmNsYXNzIEZpbGxTdHlsZUxheWVyIGV4dGVuZHMgU3R5bGVMYXllciB7XG4gICAgX3VuZXZhbHVhdGVkTGF5b3V0OiBMYXlvdXQ8TGF5b3V0UHJvcHM+O1xuICAgIGxheW91dDogUG9zc2libHlFdmFsdWF0ZWQ8TGF5b3V0UHJvcHM+O1xuXG4gICAgX3RyYW5zaXRpb25hYmxlUGFpbnQ6IFRyYW5zaXRpb25hYmxlPFBhaW50UHJvcHM+O1xuICAgIF90cmFuc2l0aW9uaW5nUGFpbnQ6IFRyYW5zaXRpb25pbmc8UGFpbnRQcm9wcz47XG4gICAgcGFpbnQ6IFBvc3NpYmx5RXZhbHVhdGVkPFBhaW50UHJvcHM+O1xuXG4gICAgY29uc3RydWN0b3IobGF5ZXI6IExheWVyU3BlY2lmaWNhdGlvbikge1xuICAgICAgICBzdXBlcihsYXllciwgcHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgcmVjYWxjdWxhdGUocGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMsIGF2YWlsYWJsZUltYWdlczogQXJyYXk8c3RyaW5nPikge1xuICAgICAgICBzdXBlci5yZWNhbGN1bGF0ZShwYXJhbWV0ZXJzLCBhdmFpbGFibGVJbWFnZXMpO1xuXG4gICAgICAgIGNvbnN0IG91dGxpbmVDb2xvciA9IHRoaXMucGFpbnQuX3ZhbHVlc1snZmlsbC1vdXRsaW5lLWNvbG9yJ107XG4gICAgICAgIGlmIChvdXRsaW5lQ29sb3IudmFsdWUua2luZCA9PT0gJ2NvbnN0YW50JyAmJiBvdXRsaW5lQ29sb3IudmFsdWUudmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5wYWludC5fdmFsdWVzWydmaWxsLW91dGxpbmUtY29sb3InXSA9IHRoaXMucGFpbnQuX3ZhbHVlc1snZmlsbC1jb2xvciddO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY3JlYXRlQnVja2V0KHBhcmFtZXRlcnM6IEJ1Y2tldFBhcmFtZXRlcnM8Kj4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWxsQnVja2V0KHBhcmFtZXRlcnMpO1xuICAgIH1cblxuICAgIHF1ZXJ5UmFkaXVzKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0cmFuc2xhdGVEaXN0YW5jZSh0aGlzLnBhaW50LmdldCgnZmlsbC10cmFuc2xhdGUnKSk7XG4gICAgfVxuXG4gICAgcXVlcnlJbnRlcnNlY3RzRmVhdHVyZShxdWVyeUdlb21ldHJ5OiBBcnJheTxQb2ludD4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlOiBWZWN0b3JUaWxlRmVhdHVyZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVTdGF0ZTogRmVhdHVyZVN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnk6IEFycmF5PEFycmF5PFBvaW50Pj4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB6b29tOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IFRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsc1RvVGlsZVVuaXRzOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdHJhbnNsYXRlZFBvbHlnb24gPSB0cmFuc2xhdGUocXVlcnlHZW9tZXRyeSxcbiAgICAgICAgICAgIHRoaXMucGFpbnQuZ2V0KCdmaWxsLXRyYW5zbGF0ZScpLFxuICAgICAgICAgICAgdGhpcy5wYWludC5nZXQoJ2ZpbGwtdHJhbnNsYXRlLWFuY2hvcicpLFxuICAgICAgICAgICAgdHJhbnNmb3JtLmFuZ2xlLCBwaXhlbHNUb1RpbGVVbml0cyk7XG4gICAgICAgIHJldHVybiBwb2x5Z29uSW50ZXJzZWN0c011bHRpUG9seWdvbih0cmFuc2xhdGVkUG9seWdvbiwgZ2VvbWV0cnkpO1xuICAgIH1cblxuICAgIGlzVGlsZUNsaXBwZWQoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRmlsbFN0eWxlTGF5ZXI7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHtjcmVhdGVMYXlvdXR9IGZyb20gJy4uLy4uL3V0aWwvc3RydWN0X2FycmF5JztcblxuY29uc3QgbGF5b3V0ID0gY3JlYXRlTGF5b3V0KFtcbiAgICB7bmFtZTogJ2FfcG9zJywgICAgICAgICAgY29tcG9uZW50czogMiwgdHlwZTogJ0ludDE2J30sXG4gICAge25hbWU6ICdhX25vcm1hbF9lZCcsICAgIGNvbXBvbmVudHM6IDQsIHR5cGU6ICdJbnQxNid9LFxuXSwgNCk7XG5cbmV4cG9ydCBkZWZhdWx0IGxheW91dDtcbmV4cG9ydCBjb25zdCB7bWVtYmVycywgc2l6ZSwgYWxpZ25tZW50fSA9IGxheW91dDtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFBvaW50ID0gcmVxdWlyZSgnQG1hcGJveC9wb2ludC1nZW9tZXRyeScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFZlY3RvclRpbGVGZWF0dXJlO1xuXG5mdW5jdGlvbiBWZWN0b3JUaWxlRmVhdHVyZShwYmYsIGVuZCwgZXh0ZW50LCBrZXlzLCB2YWx1ZXMpIHtcbiAgICAvLyBQdWJsaWNcbiAgICB0aGlzLnByb3BlcnRpZXMgPSB7fTtcbiAgICB0aGlzLmV4dGVudCA9IGV4dGVudDtcbiAgICB0aGlzLnR5cGUgPSAwO1xuXG4gICAgLy8gUHJpdmF0ZVxuICAgIHRoaXMuX3BiZiA9IHBiZjtcbiAgICB0aGlzLl9nZW9tZXRyeSA9IC0xO1xuICAgIHRoaXMuX2tleXMgPSBrZXlzO1xuICAgIHRoaXMuX3ZhbHVlcyA9IHZhbHVlcztcblxuICAgIHBiZi5yZWFkRmllbGRzKHJlYWRGZWF0dXJlLCB0aGlzLCBlbmQpO1xufVxuXG5mdW5jdGlvbiByZWFkRmVhdHVyZSh0YWcsIGZlYXR1cmUsIHBiZikge1xuICAgIGlmICh0YWcgPT0gMSkgZmVhdHVyZS5pZCA9IHBiZi5yZWFkVmFyaW50KCk7XG4gICAgZWxzZSBpZiAodGFnID09IDIpIHJlYWRUYWcocGJmLCBmZWF0dXJlKTtcbiAgICBlbHNlIGlmICh0YWcgPT0gMykgZmVhdHVyZS50eXBlID0gcGJmLnJlYWRWYXJpbnQoKTtcbiAgICBlbHNlIGlmICh0YWcgPT0gNCkgZmVhdHVyZS5fZ2VvbWV0cnkgPSBwYmYucG9zO1xufVxuXG5mdW5jdGlvbiByZWFkVGFnKHBiZiwgZmVhdHVyZSkge1xuICAgIHZhciBlbmQgPSBwYmYucmVhZFZhcmludCgpICsgcGJmLnBvcztcblxuICAgIHdoaWxlIChwYmYucG9zIDwgZW5kKSB7XG4gICAgICAgIHZhciBrZXkgPSBmZWF0dXJlLl9rZXlzW3BiZi5yZWFkVmFyaW50KCldLFxuICAgICAgICAgICAgdmFsdWUgPSBmZWF0dXJlLl92YWx1ZXNbcGJmLnJlYWRWYXJpbnQoKV07XG4gICAgICAgIGZlYXR1cmUucHJvcGVydGllc1trZXldID0gdmFsdWU7XG4gICAgfVxufVxuXG5WZWN0b3JUaWxlRmVhdHVyZS50eXBlcyA9IFsnVW5rbm93bicsICdQb2ludCcsICdMaW5lU3RyaW5nJywgJ1BvbHlnb24nXTtcblxuVmVjdG9yVGlsZUZlYXR1cmUucHJvdG90eXBlLmxvYWRHZW9tZXRyeSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBwYmYgPSB0aGlzLl9wYmY7XG4gICAgcGJmLnBvcyA9IHRoaXMuX2dlb21ldHJ5O1xuXG4gICAgdmFyIGVuZCA9IHBiZi5yZWFkVmFyaW50KCkgKyBwYmYucG9zLFxuICAgICAgICBjbWQgPSAxLFxuICAgICAgICBsZW5ndGggPSAwLFxuICAgICAgICB4ID0gMCxcbiAgICAgICAgeSA9IDAsXG4gICAgICAgIGxpbmVzID0gW10sXG4gICAgICAgIGxpbmU7XG5cbiAgICB3aGlsZSAocGJmLnBvcyA8IGVuZCkge1xuICAgICAgICBpZiAobGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICAgIHZhciBjbWRMZW4gPSBwYmYucmVhZFZhcmludCgpO1xuICAgICAgICAgICAgY21kID0gY21kTGVuICYgMHg3O1xuICAgICAgICAgICAgbGVuZ3RoID0gY21kTGVuID4+IDM7XG4gICAgICAgIH1cblxuICAgICAgICBsZW5ndGgtLTtcblxuICAgICAgICBpZiAoY21kID09PSAxIHx8IGNtZCA9PT0gMikge1xuICAgICAgICAgICAgeCArPSBwYmYucmVhZFNWYXJpbnQoKTtcbiAgICAgICAgICAgIHkgKz0gcGJmLnJlYWRTVmFyaW50KCk7XG5cbiAgICAgICAgICAgIGlmIChjbWQgPT09IDEpIHsgLy8gbW92ZVRvXG4gICAgICAgICAgICAgICAgaWYgKGxpbmUpIGxpbmVzLnB1c2gobGluZSk7XG4gICAgICAgICAgICAgICAgbGluZSA9IFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsaW5lLnB1c2gobmV3IFBvaW50KHgsIHkpKTtcblxuICAgICAgICB9IGVsc2UgaWYgKGNtZCA9PT0gNykge1xuXG4gICAgICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcG5pay12ZWN0b3ItdGlsZS9pc3N1ZXMvOTBcbiAgICAgICAgICAgIGlmIChsaW5lKSB7XG4gICAgICAgICAgICAgICAgbGluZS5wdXNoKGxpbmVbMF0uY2xvbmUoKSk7IC8vIGNsb3NlUG9seWdvblxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gY29tbWFuZCAnICsgY21kKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChsaW5lKSBsaW5lcy5wdXNoKGxpbmUpO1xuXG4gICAgcmV0dXJuIGxpbmVzO1xufTtcblxuVmVjdG9yVGlsZUZlYXR1cmUucHJvdG90eXBlLmJib3ggPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcGJmID0gdGhpcy5fcGJmO1xuICAgIHBiZi5wb3MgPSB0aGlzLl9nZW9tZXRyeTtcblxuICAgIHZhciBlbmQgPSBwYmYucmVhZFZhcmludCgpICsgcGJmLnBvcyxcbiAgICAgICAgY21kID0gMSxcbiAgICAgICAgbGVuZ3RoID0gMCxcbiAgICAgICAgeCA9IDAsXG4gICAgICAgIHkgPSAwLFxuICAgICAgICB4MSA9IEluZmluaXR5LFxuICAgICAgICB4MiA9IC1JbmZpbml0eSxcbiAgICAgICAgeTEgPSBJbmZpbml0eSxcbiAgICAgICAgeTIgPSAtSW5maW5pdHk7XG5cbiAgICB3aGlsZSAocGJmLnBvcyA8IGVuZCkge1xuICAgICAgICBpZiAobGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICAgIHZhciBjbWRMZW4gPSBwYmYucmVhZFZhcmludCgpO1xuICAgICAgICAgICAgY21kID0gY21kTGVuICYgMHg3O1xuICAgICAgICAgICAgbGVuZ3RoID0gY21kTGVuID4+IDM7XG4gICAgICAgIH1cblxuICAgICAgICBsZW5ndGgtLTtcblxuICAgICAgICBpZiAoY21kID09PSAxIHx8IGNtZCA9PT0gMikge1xuICAgICAgICAgICAgeCArPSBwYmYucmVhZFNWYXJpbnQoKTtcbiAgICAgICAgICAgIHkgKz0gcGJmLnJlYWRTVmFyaW50KCk7XG4gICAgICAgICAgICBpZiAoeCA8IHgxKSB4MSA9IHg7XG4gICAgICAgICAgICBpZiAoeCA+IHgyKSB4MiA9IHg7XG4gICAgICAgICAgICBpZiAoeSA8IHkxKSB5MSA9IHk7XG4gICAgICAgICAgICBpZiAoeSA+IHkyKSB5MiA9IHk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjbWQgIT09IDcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBjb21tYW5kICcgKyBjbWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFt4MSwgeTEsIHgyLCB5Ml07XG59O1xuXG5WZWN0b3JUaWxlRmVhdHVyZS5wcm90b3R5cGUudG9HZW9KU09OID0gZnVuY3Rpb24oeCwgeSwgeikge1xuICAgIHZhciBzaXplID0gdGhpcy5leHRlbnQgKiBNYXRoLnBvdygyLCB6KSxcbiAgICAgICAgeDAgPSB0aGlzLmV4dGVudCAqIHgsXG4gICAgICAgIHkwID0gdGhpcy5leHRlbnQgKiB5LFxuICAgICAgICBjb29yZHMgPSB0aGlzLmxvYWRHZW9tZXRyeSgpLFxuICAgICAgICB0eXBlID0gVmVjdG9yVGlsZUZlYXR1cmUudHlwZXNbdGhpcy50eXBlXSxcbiAgICAgICAgaSwgajtcblxuICAgIGZ1bmN0aW9uIHByb2plY3QobGluZSkge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxpbmUubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIHZhciBwID0gbGluZVtqXSwgeTIgPSAxODAgLSAocC55ICsgeTApICogMzYwIC8gc2l6ZTtcbiAgICAgICAgICAgIGxpbmVbal0gPSBbXG4gICAgICAgICAgICAgICAgKHAueCArIHgwKSAqIDM2MCAvIHNpemUgLSAxODAsXG4gICAgICAgICAgICAgICAgMzYwIC8gTWF0aC5QSSAqIE1hdGguYXRhbihNYXRoLmV4cCh5MiAqIE1hdGguUEkgLyAxODApKSAtIDkwXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICBjYXNlIDE6XG4gICAgICAgIHZhciBwb2ludHMgPSBbXTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvb3Jkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcG9pbnRzW2ldID0gY29vcmRzW2ldWzBdO1xuICAgICAgICB9XG4gICAgICAgIGNvb3JkcyA9IHBvaW50cztcbiAgICAgICAgcHJvamVjdChjb29yZHMpO1xuICAgICAgICBicmVhaztcblxuICAgIGNhc2UgMjpcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvb3Jkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcHJvamVjdChjb29yZHNbaV0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAzOlxuICAgICAgICBjb29yZHMgPSBjbGFzc2lmeVJpbmdzKGNvb3Jkcyk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb29yZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBjb29yZHNbaV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBwcm9qZWN0KGNvb3Jkc1tpXVtqXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKGNvb3Jkcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgY29vcmRzID0gY29vcmRzWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHR5cGUgPSAnTXVsdGknICsgdHlwZTtcbiAgICB9XG5cbiAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgICB0eXBlOiBcIkZlYXR1cmVcIixcbiAgICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgICBjb29yZGluYXRlczogY29vcmRzXG4gICAgICAgIH0sXG4gICAgICAgIHByb3BlcnRpZXM6IHRoaXMucHJvcGVydGllc1xuICAgIH07XG5cbiAgICBpZiAoJ2lkJyBpbiB0aGlzKSB7XG4gICAgICAgIHJlc3VsdC5pZCA9IHRoaXMuaWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIGNsYXNzaWZpZXMgYW4gYXJyYXkgb2YgcmluZ3MgaW50byBwb2x5Z29ucyB3aXRoIG91dGVyIHJpbmdzIGFuZCBob2xlc1xuXG5mdW5jdGlvbiBjbGFzc2lmeVJpbmdzKHJpbmdzKSB7XG4gICAgdmFyIGxlbiA9IHJpbmdzLmxlbmd0aDtcblxuICAgIGlmIChsZW4gPD0gMSkgcmV0dXJuIFtyaW5nc107XG5cbiAgICB2YXIgcG9seWdvbnMgPSBbXSxcbiAgICAgICAgcG9seWdvbixcbiAgICAgICAgY2N3O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICB2YXIgYXJlYSA9IHNpZ25lZEFyZWEocmluZ3NbaV0pO1xuICAgICAgICBpZiAoYXJlYSA9PT0gMCkgY29udGludWU7XG5cbiAgICAgICAgaWYgKGNjdyA9PT0gdW5kZWZpbmVkKSBjY3cgPSBhcmVhIDwgMDtcblxuICAgICAgICBpZiAoY2N3ID09PSBhcmVhIDwgMCkge1xuICAgICAgICAgICAgaWYgKHBvbHlnb24pIHBvbHlnb25zLnB1c2gocG9seWdvbik7XG4gICAgICAgICAgICBwb2x5Z29uID0gW3JpbmdzW2ldXTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcG9seWdvbi5wdXNoKHJpbmdzW2ldKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocG9seWdvbikgcG9seWdvbnMucHVzaChwb2x5Z29uKTtcblxuICAgIHJldHVybiBwb2x5Z29ucztcbn1cblxuZnVuY3Rpb24gc2lnbmVkQXJlYShyaW5nKSB7XG4gICAgdmFyIHN1bSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHJpbmcubGVuZ3RoLCBqID0gbGVuIC0gMSwgcDEsIHAyOyBpIDwgbGVuOyBqID0gaSsrKSB7XG4gICAgICAgIHAxID0gcmluZ1tpXTtcbiAgICAgICAgcDIgPSByaW5nW2pdO1xuICAgICAgICBzdW0gKz0gKHAyLnggLSBwMS54KSAqIChwMS55ICsgcDIueSk7XG4gICAgfVxuICAgIHJldHVybiBzdW07XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBWZWN0b3JUaWxlRmVhdHVyZSA9IHJlcXVpcmUoJy4vdmVjdG9ydGlsZWZlYXR1cmUuanMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBWZWN0b3JUaWxlTGF5ZXI7XG5cbmZ1bmN0aW9uIFZlY3RvclRpbGVMYXllcihwYmYsIGVuZCkge1xuICAgIC8vIFB1YmxpY1xuICAgIHRoaXMudmVyc2lvbiA9IDE7XG4gICAgdGhpcy5uYW1lID0gbnVsbDtcbiAgICB0aGlzLmV4dGVudCA9IDQwOTY7XG4gICAgdGhpcy5sZW5ndGggPSAwO1xuXG4gICAgLy8gUHJpdmF0ZVxuICAgIHRoaXMuX3BiZiA9IHBiZjtcbiAgICB0aGlzLl9rZXlzID0gW107XG4gICAgdGhpcy5fdmFsdWVzID0gW107XG4gICAgdGhpcy5fZmVhdHVyZXMgPSBbXTtcblxuICAgIHBiZi5yZWFkRmllbGRzKHJlYWRMYXllciwgdGhpcywgZW5kKTtcblxuICAgIHRoaXMubGVuZ3RoID0gdGhpcy5fZmVhdHVyZXMubGVuZ3RoO1xufVxuXG5mdW5jdGlvbiByZWFkTGF5ZXIodGFnLCBsYXllciwgcGJmKSB7XG4gICAgaWYgKHRhZyA9PT0gMTUpIGxheWVyLnZlcnNpb24gPSBwYmYucmVhZFZhcmludCgpO1xuICAgIGVsc2UgaWYgKHRhZyA9PT0gMSkgbGF5ZXIubmFtZSA9IHBiZi5yZWFkU3RyaW5nKCk7XG4gICAgZWxzZSBpZiAodGFnID09PSA1KSBsYXllci5leHRlbnQgPSBwYmYucmVhZFZhcmludCgpO1xuICAgIGVsc2UgaWYgKHRhZyA9PT0gMikgbGF5ZXIuX2ZlYXR1cmVzLnB1c2gocGJmLnBvcyk7XG4gICAgZWxzZSBpZiAodGFnID09PSAzKSBsYXllci5fa2V5cy5wdXNoKHBiZi5yZWFkU3RyaW5nKCkpO1xuICAgIGVsc2UgaWYgKHRhZyA9PT0gNCkgbGF5ZXIuX3ZhbHVlcy5wdXNoKHJlYWRWYWx1ZU1lc3NhZ2UocGJmKSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRWYWx1ZU1lc3NhZ2UocGJmKSB7XG4gICAgdmFyIHZhbHVlID0gbnVsbCxcbiAgICAgICAgZW5kID0gcGJmLnJlYWRWYXJpbnQoKSArIHBiZi5wb3M7XG5cbiAgICB3aGlsZSAocGJmLnBvcyA8IGVuZCkge1xuICAgICAgICB2YXIgdGFnID0gcGJmLnJlYWRWYXJpbnQoKSA+PiAzO1xuXG4gICAgICAgIHZhbHVlID0gdGFnID09PSAxID8gcGJmLnJlYWRTdHJpbmcoKSA6XG4gICAgICAgICAgICB0YWcgPT09IDIgPyBwYmYucmVhZEZsb2F0KCkgOlxuICAgICAgICAgICAgdGFnID09PSAzID8gcGJmLnJlYWREb3VibGUoKSA6XG4gICAgICAgICAgICB0YWcgPT09IDQgPyBwYmYucmVhZFZhcmludDY0KCkgOlxuICAgICAgICAgICAgdGFnID09PSA1ID8gcGJmLnJlYWRWYXJpbnQoKSA6XG4gICAgICAgICAgICB0YWcgPT09IDYgPyBwYmYucmVhZFNWYXJpbnQoKSA6XG4gICAgICAgICAgICB0YWcgPT09IDcgPyBwYmYucmVhZEJvb2xlYW4oKSA6IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xufVxuXG4vLyByZXR1cm4gZmVhdHVyZSBgaWAgZnJvbSB0aGlzIGxheWVyIGFzIGEgYFZlY3RvclRpbGVGZWF0dXJlYFxuVmVjdG9yVGlsZUxheWVyLnByb3RvdHlwZS5mZWF0dXJlID0gZnVuY3Rpb24oaSkge1xuICAgIGlmIChpIDwgMCB8fCBpID49IHRoaXMuX2ZlYXR1cmVzLmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKCdmZWF0dXJlIGluZGV4IG91dCBvZiBib3VuZHMnKTtcblxuICAgIHRoaXMuX3BiZi5wb3MgPSB0aGlzLl9mZWF0dXJlc1tpXTtcblxuICAgIHZhciBlbmQgPSB0aGlzLl9wYmYucmVhZFZhcmludCgpICsgdGhpcy5fcGJmLnBvcztcbiAgICByZXR1cm4gbmV3IFZlY3RvclRpbGVGZWF0dXJlKHRoaXMuX3BiZiwgZW5kLCB0aGlzLmV4dGVudCwgdGhpcy5fa2V5cywgdGhpcy5fdmFsdWVzKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBWZWN0b3JUaWxlTGF5ZXIgPSByZXF1aXJlKCcuL3ZlY3RvcnRpbGVsYXllcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFZlY3RvclRpbGU7XG5cbmZ1bmN0aW9uIFZlY3RvclRpbGUocGJmLCBlbmQpIHtcbiAgICB0aGlzLmxheWVycyA9IHBiZi5yZWFkRmllbGRzKHJlYWRUaWxlLCB7fSwgZW5kKTtcbn1cblxuZnVuY3Rpb24gcmVhZFRpbGUodGFnLCBsYXllcnMsIHBiZikge1xuICAgIGlmICh0YWcgPT09IDMpIHtcbiAgICAgICAgdmFyIGxheWVyID0gbmV3IFZlY3RvclRpbGVMYXllcihwYmYsIHBiZi5yZWFkVmFyaW50KCkgKyBwYmYucG9zKTtcbiAgICAgICAgaWYgKGxheWVyLmxlbmd0aCkgbGF5ZXJzW2xheWVyLm5hbWVdID0gbGF5ZXI7XG4gICAgfVxufVxuXG4iLCJtb2R1bGUuZXhwb3J0cy5WZWN0b3JUaWxlID0gcmVxdWlyZSgnLi9saWIvdmVjdG9ydGlsZS5qcycpO1xubW9kdWxlLmV4cG9ydHMuVmVjdG9yVGlsZUZlYXR1cmUgPSByZXF1aXJlKCcuL2xpYi92ZWN0b3J0aWxlZmVhdHVyZS5qcycpO1xubW9kdWxlLmV4cG9ydHMuVmVjdG9yVGlsZUxheWVyID0gcmVxdWlyZSgnLi9saWIvdmVjdG9ydGlsZWxheWVyLmpzJyk7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge0ZpbGxFeHRydXNpb25MYXlvdXRBcnJheX0gZnJvbSAnLi4vYXJyYXlfdHlwZXMnO1xuXG5pbXBvcnQge21lbWJlcnMgYXMgbGF5b3V0QXR0cmlidXRlc30gZnJvbSAnLi9maWxsX2V4dHJ1c2lvbl9hdHRyaWJ1dGVzJztcbmltcG9ydCBTZWdtZW50VmVjdG9yIGZyb20gJy4uL3NlZ21lbnQnO1xuaW1wb3J0IHtQcm9ncmFtQ29uZmlndXJhdGlvblNldH0gZnJvbSAnLi4vcHJvZ3JhbV9jb25maWd1cmF0aW9uJztcbmltcG9ydCB7VHJpYW5nbGVJbmRleEFycmF5fSBmcm9tICcuLi9pbmRleF9hcnJheV90eXBlJztcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi4vZXh0ZW50JztcbmltcG9ydCBlYXJjdXQgZnJvbSAnZWFyY3V0JztcbmltcG9ydCBtdnQgZnJvbSAnQG1hcGJveC92ZWN0b3ItdGlsZSc7XG5jb25zdCB2ZWN0b3JUaWxlRmVhdHVyZVR5cGVzID0gbXZ0LlZlY3RvclRpbGVGZWF0dXJlLnR5cGVzO1xuaW1wb3J0IGNsYXNzaWZ5UmluZ3MgZnJvbSAnLi4vLi4vdXRpbC9jbGFzc2lmeV9yaW5ncyc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5jb25zdCBFQVJDVVRfTUFYX1JJTkdTID0gNTAwO1xuaW1wb3J0IHtyZWdpc3Rlcn0gZnJvbSAnLi4vLi4vdXRpbC93ZWJfd29ya2VyX3RyYW5zZmVyJztcbmltcG9ydCB7aGFzUGF0dGVybiwgYWRkUGF0dGVybkRlcGVuZGVuY2llc30gZnJvbSAnLi9wYXR0ZXJuX2J1Y2tldF9mZWF0dXJlcyc7XG5pbXBvcnQgbG9hZEdlb21ldHJ5IGZyb20gJy4uL2xvYWRfZ2VvbWV0cnknO1xuaW1wb3J0IEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4uLy4uL3N0eWxlL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5cbmltcG9ydCB0eXBlIHtDYW5vbmljYWxUaWxlSUR9IGZyb20gJy4uLy4uL3NvdXJjZS90aWxlX2lkJztcbmltcG9ydCB0eXBlIHtcbiAgICBCdWNrZXQsXG4gICAgQnVja2V0UGFyYW1ldGVycyxcbiAgICBCdWNrZXRGZWF0dXJlLFxuICAgIEluZGV4ZWRGZWF0dXJlLFxuICAgIFBvcHVsYXRlUGFyYW1ldGVyc1xufSBmcm9tICcuLi9idWNrZXQnO1xuXG5pbXBvcnQgdHlwZSBGaWxsRXh0cnVzaW9uU3R5bGVMYXllciBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZV9sYXllci9maWxsX2V4dHJ1c2lvbl9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uLy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgSW5kZXhCdWZmZXIgZnJvbSAnLi4vLi4vZ2wvaW5kZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIFZlcnRleEJ1ZmZlciBmcm9tICcuLi8uLi9nbC92ZXJ0ZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IHR5cGUge0ZlYXR1cmVTdGF0ZXN9IGZyb20gJy4uLy4uL3NvdXJjZS9zb3VyY2Vfc3RhdGUnO1xuaW1wb3J0IHR5cGUge0ltYWdlUG9zaXRpb259IGZyb20gJy4uLy4uL3JlbmRlci9pbWFnZV9hdGxhcyc7XG5cbmNvbnN0IEZBQ1RPUiA9IE1hdGgucG93KDIsIDEzKTtcblxuZnVuY3Rpb24gYWRkVmVydGV4KHZlcnRleEFycmF5LCB4LCB5LCBueCwgbnksIG56LCB0LCBlKSB7XG4gICAgdmVydGV4QXJyYXkuZW1wbGFjZUJhY2soXG4gICAgICAgIC8vIGFfcG9zXG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIC8vIGFfbm9ybWFsX2VkOiAzLWNvbXBvbmVudCBub3JtYWwgYW5kIDEtY29tcG9uZW50IGVkZ2VkaXN0YW5jZVxuICAgICAgICBNYXRoLmZsb29yKG54ICogRkFDVE9SKSAqIDIgKyB0LFxuICAgICAgICBueSAqIEZBQ1RPUiAqIDIsXG4gICAgICAgIG56ICogRkFDVE9SICogMixcbiAgICAgICAgLy8gZWRnZWRpc3RhbmNlICh1c2VkIGZvciB3cmFwcGluZyBwYXR0ZXJucyBhcm91bmQgZXh0cnVzaW9uIHNpZGVzKVxuICAgICAgICBNYXRoLnJvdW5kKGUpXG4gICAgKTtcbn1cblxuY2xhc3MgRmlsbEV4dHJ1c2lvbkJ1Y2tldCBpbXBsZW1lbnRzIEJ1Y2tldCB7XG4gICAgaW5kZXg6IG51bWJlcjtcbiAgICB6b29tOiBudW1iZXI7XG4gICAgb3ZlcnNjYWxpbmc6IG51bWJlcjtcbiAgICBsYXllcnM6IEFycmF5PEZpbGxFeHRydXNpb25TdHlsZUxheWVyPjtcbiAgICBsYXllcklkczogQXJyYXk8c3RyaW5nPjtcbiAgICBzdGF0ZURlcGVuZGVudExheWVyczogQXJyYXk8RmlsbEV4dHJ1c2lvblN0eWxlTGF5ZXI+O1xuICAgIHN0YXRlRGVwZW5kZW50TGF5ZXJJZHM6IEFycmF5PHN0cmluZz47XG5cbiAgICBsYXlvdXRWZXJ0ZXhBcnJheTogRmlsbEV4dHJ1c2lvbkxheW91dEFycmF5O1xuICAgIGxheW91dFZlcnRleEJ1ZmZlcjogVmVydGV4QnVmZmVyO1xuXG4gICAgaW5kZXhBcnJheTogVHJpYW5nbGVJbmRleEFycmF5O1xuICAgIGluZGV4QnVmZmVyOiBJbmRleEJ1ZmZlcjtcblxuICAgIGhhc1BhdHRlcm46IGJvb2xlYW47XG4gICAgcHJvZ3JhbUNvbmZpZ3VyYXRpb25zOiBQcm9ncmFtQ29uZmlndXJhdGlvblNldDxGaWxsRXh0cnVzaW9uU3R5bGVMYXllcj47XG4gICAgc2VnbWVudHM6IFNlZ21lbnRWZWN0b3I7XG4gICAgdXBsb2FkZWQ6IGJvb2xlYW47XG4gICAgZmVhdHVyZXM6IEFycmF5PEJ1Y2tldEZlYXR1cmU+O1xuXG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogQnVja2V0UGFyYW1ldGVyczxGaWxsRXh0cnVzaW9uU3R5bGVMYXllcj4pIHtcbiAgICAgICAgdGhpcy56b29tID0gb3B0aW9ucy56b29tO1xuICAgICAgICB0aGlzLm92ZXJzY2FsaW5nID0gb3B0aW9ucy5vdmVyc2NhbGluZztcbiAgICAgICAgdGhpcy5sYXllcnMgPSBvcHRpb25zLmxheWVycztcbiAgICAgICAgdGhpcy5sYXllcklkcyA9IHRoaXMubGF5ZXJzLm1hcChsYXllciA9PiBsYXllci5pZCk7XG4gICAgICAgIHRoaXMuaW5kZXggPSBvcHRpb25zLmluZGV4O1xuICAgICAgICB0aGlzLmhhc1BhdHRlcm4gPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmxheW91dFZlcnRleEFycmF5ID0gbmV3IEZpbGxFeHRydXNpb25MYXlvdXRBcnJheSgpO1xuICAgICAgICB0aGlzLmluZGV4QXJyYXkgPSBuZXcgVHJpYW5nbGVJbmRleEFycmF5KCk7XG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zID0gbmV3IFByb2dyYW1Db25maWd1cmF0aW9uU2V0KGxheW91dEF0dHJpYnV0ZXMsIG9wdGlvbnMubGF5ZXJzLCBvcHRpb25zLnpvb20pO1xuICAgICAgICB0aGlzLnNlZ21lbnRzID0gbmV3IFNlZ21lbnRWZWN0b3IoKTtcbiAgICAgICAgdGhpcy5zdGF0ZURlcGVuZGVudExheWVySWRzID0gdGhpcy5sYXllcnMuZmlsdGVyKChsKSA9PiBsLmlzU3RhdGVEZXBlbmRlbnQoKSkubWFwKChsKSA9PiBsLmlkKTtcblxuICAgIH1cblxuICAgIHBvcHVsYXRlKGZlYXR1cmVzOiBBcnJheTxJbmRleGVkRmVhdHVyZT4sIG9wdGlvbnM6IFBvcHVsYXRlUGFyYW1ldGVycywgY2Fub25pY2FsOiBDYW5vbmljYWxUaWxlSUQpIHtcbiAgICAgICAgdGhpcy5mZWF0dXJlcyA9IFtdO1xuICAgICAgICB0aGlzLmhhc1BhdHRlcm4gPSBoYXNQYXR0ZXJuKCdmaWxsLWV4dHJ1c2lvbicsIHRoaXMubGF5ZXJzLCBvcHRpb25zKTtcblxuICAgICAgICBmb3IgKGNvbnN0IHtmZWF0dXJlLCBpZCwgaW5kZXgsIHNvdXJjZUxheWVySW5kZXh9IG9mIGZlYXR1cmVzKSB7XG4gICAgICAgICAgICBjb25zdCBuZWVkR2VvbWV0cnkgPSB0aGlzLmxheWVyc1swXS5fZmVhdHVyZUZpbHRlci5uZWVkR2VvbWV0cnk7XG4gICAgICAgICAgICBjb25zdCBldmFsdWF0aW9uRmVhdHVyZSA9IHt0eXBlOiBmZWF0dXJlLnR5cGUsXG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczogZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAgIGdlb21ldHJ5OiBuZWVkR2VvbWV0cnkgPyBsb2FkR2VvbWV0cnkoZmVhdHVyZSkgOiBbXX07XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5sYXllcnNbMF0uX2ZlYXR1cmVGaWx0ZXIuZmlsdGVyKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyh0aGlzLnpvb20pLCBldmFsdWF0aW9uRmVhdHVyZSwgY2Fub25pY2FsKSkgY29udGludWU7XG5cbiAgICAgICAgICAgIGNvbnN0IHBhdHRlcm5GZWF0dXJlOiBCdWNrZXRGZWF0dXJlID0ge1xuICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgIHNvdXJjZUxheWVySW5kZXgsXG4gICAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgICAgZ2VvbWV0cnk6IG5lZWRHZW9tZXRyeSA/IGV2YWx1YXRpb25GZWF0dXJlLmdlb21ldHJ5IDogbG9hZEdlb21ldHJ5KGZlYXR1cmUpLFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IGZlYXR1cmUucHJvcGVydGllcyxcbiAgICAgICAgICAgICAgICB0eXBlOiBmZWF0dXJlLnR5cGUsXG4gICAgICAgICAgICAgICAgcGF0dGVybnM6IHt9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGZlYXR1cmUuaWQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgcGF0dGVybkZlYXR1cmUuaWQgPSBmZWF0dXJlLmlkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5oYXNQYXR0ZXJuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mZWF0dXJlcy5wdXNoKGFkZFBhdHRlcm5EZXBlbmRlbmNpZXMoJ2ZpbGwtZXh0cnVzaW9uJywgdGhpcy5sYXllcnMsIHBhdHRlcm5GZWF0dXJlLCB0aGlzLnpvb20sIG9wdGlvbnMpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRGZWF0dXJlKHBhdHRlcm5GZWF0dXJlLCBwYXR0ZXJuRmVhdHVyZS5nZW9tZXRyeSwgaW5kZXgsIGNhbm9uaWNhbCwge30pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvcHRpb25zLmZlYXR1cmVJbmRleC5pbnNlcnQoZmVhdHVyZSwgcGF0dGVybkZlYXR1cmUuZ2VvbWV0cnksIGluZGV4LCBzb3VyY2VMYXllckluZGV4LCB0aGlzLmluZGV4LCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFkZEZlYXR1cmVzKG9wdGlvbnM6IFBvcHVsYXRlUGFyYW1ldGVycywgY2Fub25pY2FsOiBDYW5vbmljYWxUaWxlSUQsIGltYWdlUG9zaXRpb25zOiB7W186IHN0cmluZ106IEltYWdlUG9zaXRpb259KSB7XG4gICAgICAgIGZvciAoY29uc3QgZmVhdHVyZSBvZiB0aGlzLmZlYXR1cmVzKSB7XG4gICAgICAgICAgICBjb25zdCB7Z2VvbWV0cnl9ID0gZmVhdHVyZTtcbiAgICAgICAgICAgIHRoaXMuYWRkRmVhdHVyZShmZWF0dXJlLCBnZW9tZXRyeSwgZmVhdHVyZS5pbmRleCwgY2Fub25pY2FsLCBpbWFnZVBvc2l0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGUoc3RhdGVzOiBGZWF0dXJlU3RhdGVzLCB2dExheWVyOiBWZWN0b3JUaWxlTGF5ZXIsIGltYWdlUG9zaXRpb25zOiB7W186IHN0cmluZ106IEltYWdlUG9zaXRpb259KSB7XG4gICAgICAgIGlmICghdGhpcy5zdGF0ZURlcGVuZGVudExheWVycy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBkYXRlUGFpbnRBcnJheXMoc3RhdGVzLCB2dExheWVyLCB0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJzLCBpbWFnZVBvc2l0aW9ucyk7XG4gICAgfVxuXG4gICAgaXNFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIHVwbG9hZFBlbmRpbmcoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy51cGxvYWRlZCB8fCB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5uZWVkc1VwbG9hZDtcbiAgICB9XG5cbiAgICB1cGxvYWQoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgICBpZiAoIXRoaXMudXBsb2FkZWQpIHtcbiAgICAgICAgICAgIHRoaXMubGF5b3V0VmVydGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgbGF5b3V0QXR0cmlidXRlcyk7XG4gICAgICAgICAgICB0aGlzLmluZGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwbG9hZChjb250ZXh0KTtcbiAgICAgICAgdGhpcy51cGxvYWRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxheW91dFZlcnRleEJ1ZmZlcikgcmV0dXJuO1xuICAgICAgICB0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuc2VnbWVudHMuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIGFkZEZlYXR1cmUoZmVhdHVyZTogQnVja2V0RmVhdHVyZSwgZ2VvbWV0cnk6IEFycmF5PEFycmF5PFBvaW50Pj4sIGluZGV4OiBudW1iZXIsIGNhbm9uaWNhbDogQ2Fub25pY2FsVGlsZUlELCBpbWFnZVBvc2l0aW9uczoge1tfOiBzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSkge1xuICAgICAgICBmb3IgKGNvbnN0IHBvbHlnb24gb2YgY2xhc3NpZnlSaW5ncyhnZW9tZXRyeSwgRUFSQ1VUX01BWF9SSU5HUykpIHtcbiAgICAgICAgICAgIGxldCBudW1WZXJ0aWNlcyA9IDA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJpbmcgb2YgcG9seWdvbikge1xuICAgICAgICAgICAgICAgIG51bVZlcnRpY2VzICs9IHJpbmcubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHNlZ21lbnQgPSB0aGlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KDQsIHRoaXMubGF5b3V0VmVydGV4QXJyYXksIHRoaXMuaW5kZXhBcnJheSk7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgcmluZyBvZiBwb2x5Z29uKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChpc0VudGlyZWx5T3V0c2lkZShyaW5nKSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgZWRnZURpc3RhbmNlID0gMDtcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgcmluZy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwMSA9IHJpbmdbcF07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHAgPj0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcDIgPSByaW5nW3AgLSAxXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0JvdW5kYXJ5RWRnZShwMSwgcDIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlZ21lbnQudmVydGV4TGVuZ3RoICsgNCA+IFNlZ21lbnRWZWN0b3IuTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudCA9IHRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoNCwgdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgdGhpcy5pbmRleEFycmF5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwZXJwID0gcDEuc3ViKHAyKS5fcGVycCgpLl91bml0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlzdCA9IHAyLmRpc3QocDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlZGdlRGlzdGFuY2UgKyBkaXN0ID4gMzI3NjgpIGVkZ2VEaXN0YW5jZSA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRWZXJ0ZXgodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgcDEueCwgcDEueSwgcGVycC54LCBwZXJwLnksIDAsIDAsIGVkZ2VEaXN0YW5jZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVmVydGV4KHRoaXMubGF5b3V0VmVydGV4QXJyYXksIHAxLngsIHAxLnksIHBlcnAueCwgcGVycC55LCAwLCAxLCBlZGdlRGlzdGFuY2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRnZURpc3RhbmNlICs9IGRpc3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRWZXJ0ZXgodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgcDIueCwgcDIueSwgcGVycC54LCBwZXJwLnksIDAsIDAsIGVkZ2VEaXN0YW5jZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVmVydGV4KHRoaXMubGF5b3V0VmVydGV4QXJyYXksIHAyLngsIHAyLnksIHBlcnAueCwgcGVycC55LCAwLCAxLCBlZGdlRGlzdGFuY2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm90dG9tUmlnaHQgPSBzZWdtZW50LnZlcnRleExlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIMOiwpTCjMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCkFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIMOiwpTCgiAwICAxIMOiwpTCgiBDb3VudGVyLWNsb2Nrd2lzZSB3aW5kaW5nIG9yZGVyLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIMOiwpTCgiAgICAgIMOiwpTCgiBUcmlhbmdsZSAxOiAwID0+IDIgPT4gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIMOiwpTCgiAyICAzIMOiwpTCgiBUcmlhbmdsZSAyOiAxID0+IDIgPT4gM1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIMOiwpTClMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCmFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayhib3R0b21SaWdodCwgYm90dG9tUmlnaHQgKyAyLCBib3R0b21SaWdodCArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayhib3R0b21SaWdodCArIDEsIGJvdHRvbVJpZ2h0ICsgMiwgYm90dG9tUmlnaHQgKyAzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnQudmVydGV4TGVuZ3RoICs9IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudC5wcmltaXRpdmVMZW5ndGggKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNlZ21lbnQudmVydGV4TGVuZ3RoICsgbnVtVmVydGljZXMgPiBTZWdtZW50VmVjdG9yLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIKSB7XG4gICAgICAgICAgICAgICAgc2VnbWVudCA9IHRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQobnVtVmVydGljZXMsIHRoaXMubGF5b3V0VmVydGV4QXJyYXksIHRoaXMuaW5kZXhBcnJheSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vT25seSB0cmlhbmd1bGF0ZSBhbmQgZHJhdyB0aGUgYXJlYSBvZiB0aGUgZmVhdHVyZSBpZiBpdCBpcyBhIHBvbHlnb25cbiAgICAgICAgICAgIC8vT3RoZXIgZmVhdHVyZSB0eXBlcyAoZS5nLiBMaW5lU3RyaW5nKSBkbyBub3QgaGF2ZSBhcmVhLCBzbyB0cmlhbmd1bGF0aW9uIGlzIHBvaW50bGVzcyAvIHVuZGVmaW5lZFxuICAgICAgICAgICAgaWYgKHZlY3RvclRpbGVGZWF0dXJlVHlwZXNbZmVhdHVyZS50eXBlXSAhPT0gJ1BvbHlnb24nKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBjb25zdCBmbGF0dGVuZWQgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IGhvbGVJbmRpY2VzID0gW107XG4gICAgICAgICAgICBjb25zdCB0cmlhbmdsZUluZGV4ID0gc2VnbWVudC52ZXJ0ZXhMZW5ndGg7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgcmluZyBvZiBwb2x5Z29uKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChyaW5nICE9PSBwb2x5Z29uWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgIGhvbGVJbmRpY2VzLnB1c2goZmxhdHRlbmVkLmxlbmd0aCAvIDIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwID0gcmluZ1tpXTtcblxuICAgICAgICAgICAgICAgICAgICBhZGRWZXJ0ZXgodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgcC54LCBwLnksIDAsIDAsIDEsIDEsIDApO1xuXG4gICAgICAgICAgICAgICAgICAgIGZsYXR0ZW5lZC5wdXNoKHAueCk7XG4gICAgICAgICAgICAgICAgICAgIGZsYXR0ZW5lZC5wdXNoKHAueSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpbmRpY2VzID0gZWFyY3V0KGZsYXR0ZW5lZCwgaG9sZUluZGljZXMpO1xuICAgICAgICAgICAgYXNzZXJ0KGluZGljZXMubGVuZ3RoICUgMyA9PT0gMCk7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgaW5kaWNlcy5sZW5ndGg7IGogKz0gMykge1xuICAgICAgICAgICAgICAgIC8vIENvdW50ZXItY2xvY2t3aXNlIHdpbmRpbmcgb3JkZXIuXG4gICAgICAgICAgICAgICAgdGhpcy5pbmRleEFycmF5LmVtcGxhY2VCYWNrKFxuICAgICAgICAgICAgICAgICAgICB0cmlhbmdsZUluZGV4ICsgaW5kaWNlc1tqXSxcbiAgICAgICAgICAgICAgICAgICAgdHJpYW5nbGVJbmRleCArIGluZGljZXNbaiArIDJdLFxuICAgICAgICAgICAgICAgICAgICB0cmlhbmdsZUluZGV4ICsgaW5kaWNlc1tqICsgMV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZWdtZW50LnByaW1pdGl2ZUxlbmd0aCArPSBpbmRpY2VzLmxlbmd0aCAvIDM7XG4gICAgICAgICAgICBzZWdtZW50LnZlcnRleExlbmd0aCArPSBudW1WZXJ0aWNlcztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnBvcHVsYXRlUGFpbnRBcnJheXModGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGgsIGZlYXR1cmUsIGluZGV4LCBpbWFnZVBvc2l0aW9ucywgY2Fub25pY2FsKTtcbiAgICB9XG59XG5cbnJlZ2lzdGVyKCdGaWxsRXh0cnVzaW9uQnVja2V0JywgRmlsbEV4dHJ1c2lvbkJ1Y2tldCwge29taXQ6IFsnbGF5ZXJzJywgJ2ZlYXR1cmVzJ119KTtcblxuZXhwb3J0IGRlZmF1bHQgRmlsbEV4dHJ1c2lvbkJ1Y2tldDtcblxuZnVuY3Rpb24gaXNCb3VuZGFyeUVkZ2UocDEsIHAyKSB7XG4gICAgcmV0dXJuIChwMS54ID09PSBwMi54ICYmIChwMS54IDwgMCB8fCBwMS54ID4gRVhURU5UKSkgfHxcbiAgICAgICAgKHAxLnkgPT09IHAyLnkgJiYgKHAxLnkgPCAwIHx8IHAxLnkgPiBFWFRFTlQpKTtcbn1cblxuZnVuY3Rpb24gaXNFbnRpcmVseU91dHNpZGUocmluZykge1xuICAgIHJldHVybiByaW5nLmV2ZXJ5KHAgPT4gcC54IDwgMCkgfHxcbiAgICAgICAgcmluZy5ldmVyeShwID0+IHAueCA+IEVYVEVOVCkgfHxcbiAgICAgICAgcmluZy5ldmVyeShwID0+IHAueSA8IDApIHx8XG4gICAgICAgIHJpbmcuZXZlcnkocCA9PiBwLnkgPiBFWFRFTlQpO1xufVxuIiwiLy8gVGhpcyBmaWxlIGlzIGdlbmVyYXRlZC4gRWRpdCBidWlsZC9nZW5lcmF0ZS1zdHlsZS1jb2RlLmpzLCB0aGVuIHJ1biBgeWFybiBydW4gY29kZWdlbmAuXG4vLyBAZmxvd1xuLyogZXNsaW50LWRpc2FibGUgKi9cblxuaW1wb3J0IHN0eWxlU3BlYyBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3JlZmVyZW5jZS9sYXRlc3QnO1xuXG5pbXBvcnQge1xuICAgIFByb3BlcnRpZXMsXG4gICAgRGF0YUNvbnN0YW50UHJvcGVydHksXG4gICAgRGF0YURyaXZlblByb3BlcnR5LFxuICAgIENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHksXG4gICAgQ3Jvc3NGYWRlZFByb3BlcnR5LFxuICAgIENvbG9yUmFtcFByb3BlcnR5XG59IGZyb20gJy4uL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgdHlwZSBDb2xvciBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuXG5pbXBvcnQgdHlwZSBGb3JtYXR0ZWQgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL2Zvcm1hdHRlZCc7XG5cbmltcG9ydCB0eXBlIFJlc29sdmVkSW1hZ2UgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL3Jlc29sdmVkX2ltYWdlJztcblxuXG5leHBvcnQgdHlwZSBQYWludFByb3BzID0ge3xcbiAgICBcImZpbGwtZXh0cnVzaW9uLW9wYWNpdHlcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbiAgICBcImZpbGwtZXh0cnVzaW9uLWNvbG9yXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxDb2xvcj4sXG4gICAgXCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGVcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8W251bWJlciwgbnVtYmVyXT4sXG4gICAgXCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUtYW5jaG9yXCI6IERhdGFDb25zdGFudFByb3BlcnR5PFwibWFwXCIgfCBcInZpZXdwb3J0XCI+LFxuICAgIFwiZmlsbC1leHRydXNpb24tcGF0dGVyblwiOiBDcm9zc0ZhZGVkRGF0YURyaXZlblByb3BlcnR5PFJlc29sdmVkSW1hZ2U+LFxuICAgIFwiZmlsbC1leHRydXNpb24taGVpZ2h0XCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiZmlsbC1leHRydXNpb24tYmFzZVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcImZpbGwtZXh0cnVzaW9uLXZlcnRpY2FsLWdyYWRpZW50XCI6IERhdGFDb25zdGFudFByb3BlcnR5PGJvb2xlYW4+LFxufH07XG5cbmNvbnN0IHBhaW50OiBQcm9wZXJ0aWVzPFBhaW50UHJvcHM+ID0gbmV3IFByb3BlcnRpZXMoe1xuICAgIFwiZmlsbC1leHRydXNpb24tb3BhY2l0eVwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbC1leHRydXNpb25cIl1bXCJmaWxsLWV4dHJ1c2lvbi1vcGFjaXR5XCJdKSxcbiAgICBcImZpbGwtZXh0cnVzaW9uLWNvbG9yXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbC1leHRydXNpb25cIl1bXCJmaWxsLWV4dHJ1c2lvbi1jb2xvclwiXSksXG4gICAgXCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGVcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2ZpbGwtZXh0cnVzaW9uXCJdW1wiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlXCJdKSxcbiAgICBcImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZS1hbmNob3JcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2ZpbGwtZXh0cnVzaW9uXCJdW1wiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlLWFuY2hvclwiXSksXG4gICAgXCJmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuXCI6IG5ldyBDcm9zc0ZhZGVkRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2ZpbGwtZXh0cnVzaW9uXCJdW1wiZmlsbC1leHRydXNpb24tcGF0dGVyblwiXSksXG4gICAgXCJmaWxsLWV4dHJ1c2lvbi1oZWlnaHRcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9maWxsLWV4dHJ1c2lvblwiXVtcImZpbGwtZXh0cnVzaW9uLWhlaWdodFwiXSksXG4gICAgXCJmaWxsLWV4dHJ1c2lvbi1iYXNlXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbC1leHRydXNpb25cIl1bXCJmaWxsLWV4dHJ1c2lvbi1iYXNlXCJdKSxcbiAgICBcImZpbGwtZXh0cnVzaW9uLXZlcnRpY2FsLWdyYWRpZW50XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9maWxsLWV4dHJ1c2lvblwiXVtcImZpbGwtZXh0cnVzaW9uLXZlcnRpY2FsLWdyYWRpZW50XCJdKSxcbn0pO1xuXG4vLyBOb3RlOiB3aXRob3V0IGFkZGluZyB0aGUgZXhwbGljaXQgdHlwZSBhbm5vdGF0aW9uLCBGbG93IGluZmVycyB3ZWFrZXIgdHlwZXNcbi8vIGZvciB0aGVzZSBvYmplY3RzIGZyb20gdGhlaXIgdXNlIGluIHRoZSBjb25zdHJ1Y3RvciB0byBTdHlsZUxheWVyLCBhc1xuLy8ge2xheW91dD86IFByb3BlcnRpZXM8Li4uPiwgcGFpbnQ6IFByb3BlcnRpZXM8Li4uPn1cbmV4cG9ydCBkZWZhdWx0ICh7IHBhaW50IH06ICRFeGFjdDx7XG4gIHBhaW50OiBQcm9wZXJ0aWVzPFBhaW50UHJvcHM+XG59Pik7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZV9sYXllcic7XG5cbmltcG9ydCBGaWxsRXh0cnVzaW9uQnVja2V0IGZyb20gJy4uLy4uL2RhdGEvYnVja2V0L2ZpbGxfZXh0cnVzaW9uX2J1Y2tldCc7XG5pbXBvcnQge3BvbHlnb25JbnRlcnNlY3RzUG9seWdvbiwgcG9seWdvbkludGVyc2VjdHNNdWx0aVBvbHlnb259IGZyb20gJy4uLy4uL3V0aWwvaW50ZXJzZWN0aW9uX3Rlc3RzJztcbmltcG9ydCB7dHJhbnNsYXRlRGlzdGFuY2UsIHRyYW5zbGF0ZX0gZnJvbSAnLi4vcXVlcnlfdXRpbHMnO1xuaW1wb3J0IHByb3BlcnRpZXMgZnJvbSAnLi9maWxsX2V4dHJ1c2lvbl9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzJztcbmltcG9ydCB7VHJhbnNpdGlvbmFibGUsIFRyYW5zaXRpb25pbmcsIFBvc3NpYmx5RXZhbHVhdGVkfSBmcm9tICcuLi9wcm9wZXJ0aWVzJztcbmltcG9ydCB7dmVjNH0gZnJvbSAnZ2wtbWF0cml4JztcbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcblxuaW1wb3J0IHR5cGUge0ZlYXR1cmVTdGF0ZX0gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIHtCdWNrZXRQYXJhbWV0ZXJzfSBmcm9tICcuLi8uLi9kYXRhL2J1Y2tldCc7XG5pbXBvcnQgdHlwZSB7UGFpbnRQcm9wc30gZnJvbSAnLi9maWxsX2V4dHJ1c2lvbl9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzJztcbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi8uLi9nZW8vdHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIHtMYXllclNwZWNpZmljYXRpb259IGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG5jbGFzcyBGaWxsRXh0cnVzaW9uU3R5bGVMYXllciBleHRlbmRzIFN0eWxlTGF5ZXIge1xuICAgIF90cmFuc2l0aW9uYWJsZVBhaW50OiBUcmFuc2l0aW9uYWJsZTxQYWludFByb3BzPjtcbiAgICBfdHJhbnNpdGlvbmluZ1BhaW50OiBUcmFuc2l0aW9uaW5nPFBhaW50UHJvcHM+O1xuICAgIHBhaW50OiBQb3NzaWJseUV2YWx1YXRlZDxQYWludFByb3BzPjtcblxuICAgIGNvbnN0cnVjdG9yKGxheWVyOiBMYXllclNwZWNpZmljYXRpb24pIHtcbiAgICAgICAgc3VwZXIobGF5ZXIsIHByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIGNyZWF0ZUJ1Y2tldChwYXJhbWV0ZXJzOiBCdWNrZXRQYXJhbWV0ZXJzPEZpbGxFeHRydXNpb25TdHlsZUxheWVyPikge1xuICAgICAgICByZXR1cm4gbmV3IEZpbGxFeHRydXNpb25CdWNrZXQocGFyYW1ldGVycyk7XG4gICAgfVxuXG4gICAgcXVlcnlSYWRpdXMoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZURpc3RhbmNlKHRoaXMucGFpbnQuZ2V0KCdmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUnKSk7XG4gICAgfVxuXG4gICAgaXMzRCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcXVlcnlJbnRlcnNlY3RzRmVhdHVyZShxdWVyeUdlb21ldHJ5OiBBcnJheTxQb2ludD4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlOiBWZWN0b3JUaWxlRmVhdHVyZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVTdGF0ZTogRmVhdHVyZVN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnk6IEFycmF5PEFycmF5PFBvaW50Pj4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB6b29tOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IFRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsc1RvVGlsZVVuaXRzOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbFBvc01hdHJpeDogRmxvYXQzMkFycmF5KTogYm9vbGVhbiB8IG51bWJlciB7XG5cbiAgICAgICAgY29uc3QgdHJhbnNsYXRlZFBvbHlnb24gPSB0cmFuc2xhdGUocXVlcnlHZW9tZXRyeSxcbiAgICAgICAgICAgIHRoaXMucGFpbnQuZ2V0KCdmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUnKSxcbiAgICAgICAgICAgIHRoaXMucGFpbnQuZ2V0KCdmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUtYW5jaG9yJyksXG4gICAgICAgICAgICB0cmFuc2Zvcm0uYW5nbGUsIHBpeGVsc1RvVGlsZVVuaXRzKTtcblxuICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLnBhaW50LmdldCgnZmlsbC1leHRydXNpb24taGVpZ2h0JykuZXZhbHVhdGUoZmVhdHVyZSwgZmVhdHVyZVN0YXRlKTtcbiAgICAgICAgY29uc3QgYmFzZSA9IHRoaXMucGFpbnQuZ2V0KCdmaWxsLWV4dHJ1c2lvbi1iYXNlJykuZXZhbHVhdGUoZmVhdHVyZSwgZmVhdHVyZVN0YXRlKTtcblxuICAgICAgICBjb25zdCBwcm9qZWN0ZWRRdWVyeUdlb21ldHJ5ID0gcHJvamVjdFF1ZXJ5R2VvbWV0cnkodHJhbnNsYXRlZFBvbHlnb24sIHBpeGVsUG9zTWF0cml4LCB0cmFuc2Zvcm0sIDApO1xuXG4gICAgICAgIGNvbnN0IHByb2plY3RlZCA9IHByb2plY3RFeHRydXNpb24oZ2VvbWV0cnksIGJhc2UsIGhlaWdodCwgcGl4ZWxQb3NNYXRyaXgpO1xuICAgICAgICBjb25zdCBwcm9qZWN0ZWRCYXNlID0gcHJvamVjdGVkWzBdO1xuICAgICAgICBjb25zdCBwcm9qZWN0ZWRUb3AgPSBwcm9qZWN0ZWRbMV07XG4gICAgICAgIHJldHVybiBjaGVja0ludGVyc2VjdGlvbihwcm9qZWN0ZWRCYXNlLCBwcm9qZWN0ZWRUb3AsIHByb2plY3RlZFF1ZXJ5R2VvbWV0cnkpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZG90KGEsIGIpIHtcbiAgICByZXR1cm4gYS54ICogYi54ICsgYS55ICogYi55O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW50ZXJzZWN0aW9uRGlzdGFuY2UocHJvamVjdGVkUXVlcnlHZW9tZXRyeTogQXJyYXk8UG9pbnQ+LCBwcm9qZWN0ZWRGYWNlOiBBcnJheTxQb2ludD4pIHtcblxuICAgIGlmIChwcm9qZWN0ZWRRdWVyeUdlb21ldHJ5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAvLyBGb3IgcG9pbnQgcXVlcmllcyBjYWxjdWxhdGUgdGhlIHogYXQgd2hpY2ggdGhlIHBvaW50IGludGVyc2VjdHMgdGhlIGZhY2VcbiAgICAgICAgLy8gdXNpbmcgYmFyeWNlbnRyaWMgY29vcmRpbmF0ZXMuXG5cbiAgICAgICAgLy8gRmluZCB0aGUgYmFyeWNlbnRyaWMgY29vcmRpbmF0ZXMgb2YgdGhlIHByb2plY3RlZCBwb2ludCB3aXRoaW4gdGhlIGZpcnN0XG4gICAgICAgIC8vIHRyaWFuZ2xlIG9mIHRoZSBmYWNlLCB1c2luZyBvbmx5IHRoZSB4eSBwbGFuZS4gSXQgZG9lc24ndCBtYXR0ZXIgaWYgdGhlXG4gICAgICAgIC8vIHBvaW50IGlzIG91dHNpZGUgdGhlIGZpcnN0IHRyaWFuZ2xlIGJlY2F1c2UgYWxsIHRoZSB0cmlhbmdsZXMgaW4gdGhlIGZhY2VcbiAgICAgICAgLy8gYXJlIGluIHRoZSBzYW1lIHBsYW5lLlxuICAgICAgICAvL1xuICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHBvaW50cyBhcmUgY29pbmNpZGVudCBhbmQgdXNlIG90aGVyIHBvaW50cyBpZiB0aGV5IGFyZS5cbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICBjb25zdCBhID0gcHJvamVjdGVkRmFjZVtpKytdO1xuICAgICAgICBsZXQgYjtcbiAgICAgICAgd2hpbGUgKCFiIHx8IGEuZXF1YWxzKGIpKSB7XG4gICAgICAgICAgICBiID0gcHJvamVjdGVkRmFjZVtpKytdO1xuICAgICAgICAgICAgaWYgKCFiKSByZXR1cm4gSW5maW5pdHk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBMb29wIHVudGlsIHBvaW50IGBjYCBpcyBub3QgY29saW5lYXIgd2l0aCBwb2ludHMgYGFgIGFuZCBgYmAuXG4gICAgICAgIGZvciAoOyBpIDwgcHJvamVjdGVkRmFjZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgYyA9IHByb2plY3RlZEZhY2VbaV07XG5cbiAgICAgICAgICAgIGNvbnN0IHAgPSBwcm9qZWN0ZWRRdWVyeUdlb21ldHJ5WzBdO1xuXG4gICAgICAgICAgICBjb25zdCBhYiA9IGIuc3ViKGEpO1xuICAgICAgICAgICAgY29uc3QgYWMgPSBjLnN1YihhKTtcbiAgICAgICAgICAgIGNvbnN0IGFwID0gcC5zdWIoYSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGRvdEFCQUIgPSBkb3QoYWIsIGFiKTtcbiAgICAgICAgICAgIGNvbnN0IGRvdEFCQUMgPSBkb3QoYWIsIGFjKTtcbiAgICAgICAgICAgIGNvbnN0IGRvdEFDQUMgPSBkb3QoYWMsIGFjKTtcbiAgICAgICAgICAgIGNvbnN0IGRvdEFQQUIgPSBkb3QoYXAsIGFiKTtcbiAgICAgICAgICAgIGNvbnN0IGRvdEFQQUMgPSBkb3QoYXAsIGFjKTtcbiAgICAgICAgICAgIGNvbnN0IGRlbm9tID0gZG90QUJBQiAqIGRvdEFDQUMgLSBkb3RBQkFDICogZG90QUJBQztcblxuICAgICAgICAgICAgY29uc3QgdiA9IChkb3RBQ0FDICogZG90QVBBQiAtIGRvdEFCQUMgKiBkb3RBUEFDKSAvIGRlbm9tO1xuICAgICAgICAgICAgY29uc3QgdyA9IChkb3RBQkFCICogZG90QVBBQyAtIGRvdEFCQUMgKiBkb3RBUEFCKSAvIGRlbm9tO1xuICAgICAgICAgICAgY29uc3QgdSA9IDEgLSB2IC0gdztcblxuICAgICAgICAgICAgLy8gVXNlIHRoZSBiYXJ5Y2VudHJpYyB3ZWlnaHRpbmcgYWxvbmcgd2l0aCB0aGUgb3JpZ2luYWwgdHJpYW5nbGUgeiBjb29yZGluYXRlcyB0byBnZXQgdGhlIHBvaW50IG9mIGludGVyc2VjdGlvbi5cbiAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlID0gYS56ICogdSArIGIueiAqIHYgKyBjLnogKiB3O1xuXG4gICAgICAgICAgICBpZiAoaXNGaW5pdGUoZGlzdGFuY2UpKSByZXR1cm4gZGlzdGFuY2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gSW5maW5pdHk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGUgY291bnRzIGFzIGNsb3Nlc3QgaXMgbGVzcyBjbGVhciB3aGVuIHRoZSBxdWVyeSBpcyBhIGJveC4gVGhpc1xuICAgICAgICAvLyByZXR1cm5zIHRoZSBkaXN0YW5jZSB0byB0aGUgbmVhcmVzdCBwb2ludCBvbiB0aGUgZmFjZSwgd2hldGhlciBpdCBpc1xuICAgICAgICAvLyB3aXRoaW4gdGhlIHF1ZXJ5IG9yIG5vdC4gSXQgY291bGQgYmUgbW9yZSBjb3JyZWN0IHRvIHJldHVybiB0aGVcbiAgICAgICAgLy8gZGlzdGFuY2UgdG8gdGhlIGNsb3Nlc3QgcG9pbnQgd2l0aGluIHRoZSBxdWVyeSBib3ggYnV0IHRoaXMgd291bGQgYmVcbiAgICAgICAgLy8gbW9yZSBjb21wbGljYXRlZCBhbmQgZXhwZW5zaXZlIHRvIGNhbGN1bGF0ZSB3aXRoIGxpdHRsZSBiZW5lZml0LlxuICAgICAgICBsZXQgY2xvc2VzdERpc3RhbmNlID0gSW5maW5pdHk7XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiBwcm9qZWN0ZWRGYWNlKSB7XG4gICAgICAgICAgICBjbG9zZXN0RGlzdGFuY2UgPSBNYXRoLm1pbihjbG9zZXN0RGlzdGFuY2UsIHAueik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb3Nlc3REaXN0YW5jZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrSW50ZXJzZWN0aW9uKHByb2plY3RlZEJhc2U6IEFycmF5PFBvaW50PiwgcHJvamVjdGVkVG9wOiBBcnJheTxQb2ludD4sIHByb2plY3RlZFF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50Pikge1xuICAgIGxldCBjbG9zZXN0RGlzdGFuY2UgPSBJbmZpbml0eTtcblxuICAgIGlmIChwb2x5Z29uSW50ZXJzZWN0c011bHRpUG9seWdvbihwcm9qZWN0ZWRRdWVyeUdlb21ldHJ5LCBwcm9qZWN0ZWRUb3ApKSB7XG4gICAgICAgIGNsb3Nlc3REaXN0YW5jZSA9IGdldEludGVyc2VjdGlvbkRpc3RhbmNlKHByb2plY3RlZFF1ZXJ5R2VvbWV0cnksIHByb2plY3RlZFRvcFswXSk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgciA9IDA7IHIgPCBwcm9qZWN0ZWRUb3AubGVuZ3RoOyByKyspIHtcbiAgICAgICAgY29uc3QgcmluZ1RvcCA9IHByb2plY3RlZFRvcFtyXTtcbiAgICAgICAgY29uc3QgcmluZ0Jhc2UgPSBwcm9qZWN0ZWRCYXNlW3JdO1xuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IHJpbmdUb3AubGVuZ3RoIC0gMTsgcCsrKSB7XG4gICAgICAgICAgICBjb25zdCB0b3BBID0gcmluZ1RvcFtwXTtcbiAgICAgICAgICAgIGNvbnN0IHRvcEIgPSByaW5nVG9wW3AgKyAxXTtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VBID0gcmluZ0Jhc2VbcF07XG4gICAgICAgICAgICBjb25zdCBiYXNlQiA9IHJpbmdCYXNlW3AgKyAxXTtcbiAgICAgICAgICAgIGNvbnN0IGZhY2UgPSBbdG9wQSwgdG9wQiwgYmFzZUIsIGJhc2VBLCB0b3BBXTtcbiAgICAgICAgICAgIGlmIChwb2x5Z29uSW50ZXJzZWN0c1BvbHlnb24ocHJvamVjdGVkUXVlcnlHZW9tZXRyeSwgZmFjZSkpIHtcbiAgICAgICAgICAgICAgICBjbG9zZXN0RGlzdGFuY2UgPSBNYXRoLm1pbihjbG9zZXN0RGlzdGFuY2UsIGdldEludGVyc2VjdGlvbkRpc3RhbmNlKHByb2plY3RlZFF1ZXJ5R2VvbWV0cnksIGZhY2UpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjbG9zZXN0RGlzdGFuY2UgPT09IEluZmluaXR5ID8gZmFsc2UgOiBjbG9zZXN0RGlzdGFuY2U7XG59XG5cbi8qXG4gKiBQcm9qZWN0IHRoZSBnZW9tZXRyeSB1c2luZyBtYXRyaXggYG1gLiBUaGlzIGlzIGVzc2VudGlhbGx5IGRvaW5nXG4gKiBgdmVjNC50cmFuc2Zvcm1NYXQ0KFtdLCBbcC54LCBwLnksIHosIDFdLCBtKWAgYnV0IHRoZSBtdWx0aXBsaWNhdGlvblxuICogaXMgaW5saW5lZCBzbyB0aGF0IHBhcnRzIG9mIHRoZSBwcm9qZWN0aW9uIHRoYXQgYXJlIHRoZSBzYW1lIGFjcm9zc1xuICogZGlmZmVyZW50IHBvaW50cyBjYW4gb25seSBiZSBkb25lIG9uY2UuIFRoaXMgcHJvZHVjZWQgYSBtZWFzdXJhYmxlXG4gKiBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudC5cbiAqL1xuZnVuY3Rpb24gcHJvamVjdEV4dHJ1c2lvbihnZW9tZXRyeTogQXJyYXk8QXJyYXk8UG9pbnQ+PiwgekJhc2U6IG51bWJlciwgelRvcDogbnVtYmVyLCBtOiBGbG9hdDMyQXJyYXkpIHtcbiAgICBjb25zdCBwcm9qZWN0ZWRCYXNlID0gW107XG4gICAgY29uc3QgcHJvamVjdGVkVG9wID0gW107XG5cbiAgICBjb25zdCBiYXNlWFogPSBtWzhdICogekJhc2U7XG4gICAgY29uc3QgYmFzZVlaID0gbVs5XSAqIHpCYXNlO1xuICAgIGNvbnN0IGJhc2VaWiA9IG1bMTBdICogekJhc2U7XG4gICAgY29uc3QgYmFzZVdaID0gbVsxMV0gKiB6QmFzZTtcbiAgICBjb25zdCB0b3BYWiA9IG1bOF0gKiB6VG9wO1xuICAgIGNvbnN0IHRvcFlaID0gbVs5XSAqIHpUb3A7XG4gICAgY29uc3QgdG9wWlogPSBtWzEwXSAqIHpUb3A7XG4gICAgY29uc3QgdG9wV1ogPSBtWzExXSAqIHpUb3A7XG5cbiAgICBmb3IgKGNvbnN0IHIgb2YgZ2VvbWV0cnkpIHtcbiAgICAgICAgY29uc3QgcmluZ0Jhc2UgPSBbXTtcbiAgICAgICAgY29uc3QgcmluZ1RvcCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2Ygcikge1xuICAgICAgICAgICAgY29uc3QgeCA9IHAueDtcbiAgICAgICAgICAgIGNvbnN0IHkgPSBwLnk7XG5cbiAgICAgICAgICAgIGNvbnN0IHNYID0gbVswXSAqIHggKyBtWzRdICogeSArIG1bMTJdO1xuICAgICAgICAgICAgY29uc3Qgc1kgPSBtWzFdICogeCArIG1bNV0gKiB5ICsgbVsxM107XG4gICAgICAgICAgICBjb25zdCBzWiA9IG1bMl0gKiB4ICsgbVs2XSAqIHkgKyBtWzE0XTtcbiAgICAgICAgICAgIGNvbnN0IHNXID0gbVszXSAqIHggKyBtWzddICogeSArIG1bMTVdO1xuXG4gICAgICAgICAgICBjb25zdCBiYXNlWCA9IHNYICsgYmFzZVhaO1xuICAgICAgICAgICAgY29uc3QgYmFzZVkgPSBzWSArIGJhc2VZWjtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VaID0gc1ogKyBiYXNlWlo7XG4gICAgICAgICAgICBjb25zdCBiYXNlVyA9IHNXICsgYmFzZVdaO1xuXG4gICAgICAgICAgICBjb25zdCB0b3BYID0gc1ggKyB0b3BYWjtcbiAgICAgICAgICAgIGNvbnN0IHRvcFkgPSBzWSArIHRvcFlaO1xuICAgICAgICAgICAgY29uc3QgdG9wWiA9IHNaICsgdG9wWlo7XG4gICAgICAgICAgICBjb25zdCB0b3BXID0gc1cgKyB0b3BXWjtcblxuICAgICAgICAgICAgY29uc3QgYiA9IG5ldyBQb2ludChiYXNlWCAvIGJhc2VXLCBiYXNlWSAvIGJhc2VXKTtcbiAgICAgICAgICAgIGIueiA9IGJhc2VaIC8gYmFzZVc7XG4gICAgICAgICAgICByaW5nQmFzZS5wdXNoKGIpO1xuXG4gICAgICAgICAgICBjb25zdCB0ID0gbmV3IFBvaW50KHRvcFggLyB0b3BXLCB0b3BZIC8gdG9wVyk7XG4gICAgICAgICAgICB0LnogPSB0b3BaIC8gdG9wVztcbiAgICAgICAgICAgIHJpbmdUb3AucHVzaCh0KTtcbiAgICAgICAgfVxuICAgICAgICBwcm9qZWN0ZWRCYXNlLnB1c2gocmluZ0Jhc2UpO1xuICAgICAgICBwcm9qZWN0ZWRUb3AucHVzaChyaW5nVG9wKTtcbiAgICB9XG4gICAgcmV0dXJuIFtwcm9qZWN0ZWRCYXNlLCBwcm9qZWN0ZWRUb3BdO1xufVxuXG5mdW5jdGlvbiBwcm9qZWN0UXVlcnlHZW9tZXRyeShxdWVyeUdlb21ldHJ5OiBBcnJheTxQb2ludD4sIHBpeGVsUG9zTWF0cml4OiBGbG9hdDMyQXJyYXksIHRyYW5zZm9ybTogVHJhbnNmb3JtLCB6OiBudW1iZXIpIHtcbiAgICBjb25zdCBwcm9qZWN0ZWRRdWVyeUdlb21ldHJ5ID0gW107XG4gICAgZm9yIChjb25zdCBwIG9mIHF1ZXJ5R2VvbWV0cnkpIHtcbiAgICAgICAgY29uc3QgdiA9IFtwLngsIHAueSwgeiwgMV07XG4gICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NCh2LCB2LCBwaXhlbFBvc01hdHJpeCk7XG4gICAgICAgIHByb2plY3RlZFF1ZXJ5R2VvbWV0cnkucHVzaChuZXcgUG9pbnQodlswXSAvIHZbM10sIHZbMV0gLyB2WzNdKSk7XG4gICAgfVxuICAgIHJldHVybiBwcm9qZWN0ZWRRdWVyeUdlb21ldHJ5O1xufVxuXG5leHBvcnQgZGVmYXVsdCBGaWxsRXh0cnVzaW9uU3R5bGVMYXllcjtcbiIsIi8vIEBmbG93XG5pbXBvcnQge2NyZWF0ZUxheW91dH0gZnJvbSAnLi4vLi4vdXRpbC9zdHJ1Y3RfYXJyYXknO1xuXG5jb25zdCBsaW5lTGF5b3V0QXR0cmlidXRlcyA9IGNyZWF0ZUxheW91dChbXG4gICAge25hbWU6ICdhX3Bvc19ub3JtYWwnLCBjb21wb25lbnRzOiAyLCB0eXBlOiAnSW50MTYnfSxcbiAgICB7bmFtZTogJ2FfZGF0YScsIGNvbXBvbmVudHM6IDQsIHR5cGU6ICdVaW50OCd9XG5dLCA0KTtcblxuZXhwb3J0IGRlZmF1bHQgbGluZUxheW91dEF0dHJpYnV0ZXM7XG5leHBvcnQgY29uc3Qge21lbWJlcnMsIHNpemUsIGFsaWdubWVudH0gPSBsaW5lTGF5b3V0QXR0cmlidXRlcztcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7TGluZUxheW91dEFycmF5fSBmcm9tICcuLi9hcnJheV90eXBlcyc7XG5cbmltcG9ydCB7bWVtYmVycyBhcyBsYXlvdXRBdHRyaWJ1dGVzfSBmcm9tICcuL2xpbmVfYXR0cmlidXRlcyc7XG5pbXBvcnQgU2VnbWVudFZlY3RvciBmcm9tICcuLi9zZWdtZW50JztcbmltcG9ydCB7UHJvZ3JhbUNvbmZpZ3VyYXRpb25TZXR9IGZyb20gJy4uL3Byb2dyYW1fY29uZmlndXJhdGlvbic7XG5pbXBvcnQge1RyaWFuZ2xlSW5kZXhBcnJheX0gZnJvbSAnLi4vaW5kZXhfYXJyYXlfdHlwZSc7XG5pbXBvcnQgRVhURU5UIGZyb20gJy4uL2V4dGVudCc7XG5pbXBvcnQgbXZ0IGZyb20gJ0BtYXBib3gvdmVjdG9yLXRpbGUnO1xuY29uc3QgdmVjdG9yVGlsZUZlYXR1cmVUeXBlcyA9IG12dC5WZWN0b3JUaWxlRmVhdHVyZS50eXBlcztcbmltcG9ydCB7cmVnaXN0ZXJ9IGZyb20gJy4uLy4uL3V0aWwvd2ViX3dvcmtlcl90cmFuc2Zlcic7XG5pbXBvcnQge2hhc1BhdHRlcm4sIGFkZFBhdHRlcm5EZXBlbmRlbmNpZXN9IGZyb20gJy4vcGF0dGVybl9idWNrZXRfZmVhdHVyZXMnO1xuaW1wb3J0IGxvYWRHZW9tZXRyeSBmcm9tICcuLi9sb2FkX2dlb21ldHJ5JztcbmltcG9ydCBFdmFsdWF0aW9uUGFyYW1ldGVycyBmcm9tICcuLi8uLi9zdHlsZS9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuXG5pbXBvcnQgdHlwZSB7Q2Fub25pY2FsVGlsZUlEfSBmcm9tICcuLi8uLi9zb3VyY2UvdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSB7XG4gICAgQnVja2V0LFxuICAgIEJ1Y2tldFBhcmFtZXRlcnMsXG4gICAgQnVja2V0RmVhdHVyZSxcbiAgICBJbmRleGVkRmVhdHVyZSxcbiAgICBQb3B1bGF0ZVBhcmFtZXRlcnNcbn0gZnJvbSAnLi4vYnVja2V0JztcbmltcG9ydCB0eXBlIExpbmVTdHlsZUxheWVyIGZyb20gJy4uLy4uL3N0eWxlL3N0eWxlX2xheWVyL2xpbmVfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSB7U2VnbWVudH0gZnJvbSAnLi4vc2VnbWVudCc7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uLy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgSW5kZXhCdWZmZXIgZnJvbSAnLi4vLi4vZ2wvaW5kZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIFZlcnRleEJ1ZmZlciBmcm9tICcuLi8uLi9nbC92ZXJ0ZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIHtGZWF0dXJlU3RhdGVzfSBmcm9tICcuLi8uLi9zb3VyY2Uvc291cmNlX3N0YXRlJztcbmltcG9ydCB0eXBlIHtJbWFnZVBvc2l0aW9ufSBmcm9tICcuLi8uLi9yZW5kZXIvaW1hZ2VfYXRsYXMnO1xuXG4vLyBOT1RFIE9OIEVYVFJVREUgU0NBTEU6XG4vLyBzY2FsZSB0aGUgZXh0cnVzaW9uIHZlY3RvciBzbyB0aGF0IHRoZSBub3JtYWwgbGVuZ3RoIGlzIHRoaXMgdmFsdWUuXG4vLyBjb250YWlucyB0aGUgXCJ0ZXh0dXJlXCIgbm9ybWFscyAoLTEuLjEpLiB0aGlzIGlzIGRpc3RpbmN0IGZyb20gdGhlIGV4dHJ1ZGVcbi8vIG5vcm1hbHMgZm9yIGxpbmUgam9pbnMsIGJlY2F1c2UgdGhlIHgtdmFsdWUgcmVtYWlucyAwIGZvciB0aGUgdGV4dHVyZVxuLy8gbm9ybWFsIGFycmF5LCB3aGlsZSB0aGUgZXh0cnVkZSBub3JtYWwgYWN0dWFsbHkgbW92ZXMgdGhlIHZlcnRleCB0byBjcmVhdGVcbi8vIHRoZSBhY3V0ZS9iZXZlbGxlZCBsaW5lIGpvaW4uXG5jb25zdCBFWFRSVURFX1NDQUxFID0gNjM7XG5cbi8qXG4gKiBTaGFycCBjb3JuZXJzIGNhdXNlIGRhc2hlZCBsaW5lcyB0byB0aWx0IGJlY2F1c2UgdGhlIGRpc3RhbmNlIGFsb25nIHRoZSBsaW5lXG4gKiBpcyB0aGUgc2FtZSBhdCBib3RoIHRoZSBpbm5lciBhbmQgb3V0ZXIgY29ybmVycy4gVG8gaW1wcm92ZSB0aGUgYXBwZWFyYW5jZSBvZlxuICogZGFzaGVkIGxpbmVzIHdlIGFkZCBleHRyYSBwb2ludHMgbmVhciBzaGFycCBjb3JuZXJzIHNvIHRoYXQgYSBzbWFsbGVyIHBhcnRcbiAqIG9mIHRoZSBsaW5lIGlzIHRpbHRlZC5cbiAqXG4gKiBDT1NfSEFMRl9TSEFSUF9DT1JORVIgY29udHJvbHMgaG93IHNoYXJwIGEgY29ybmVyIGhhcyB0byBiZSBmb3IgdXMgdG8gYWRkIGFuXG4gKiBleHRyYSB2ZXJ0ZXguIFRoZSBkZWZhdWx0IGlzIDc1IGRlZ3JlZXMuXG4gKlxuICogVGhlIG5ld2x5IGNyZWF0ZWQgdmVydGljZXMgYXJlIHBsYWNlZCBTSEFSUF9DT1JORVJfT0ZGU0VUIHBpeGVscyBmcm9tIHRoZSBjb3JuZXIuXG4gKi9cbmNvbnN0IENPU19IQUxGX1NIQVJQX0NPUk5FUiA9IE1hdGguY29zKDc1IC8gMiAqIChNYXRoLlBJIC8gMTgwKSk7XG5jb25zdCBTSEFSUF9DT1JORVJfT0ZGU0VUID0gMTU7XG5cbi8vIEFuZ2xlIHBlciB0cmlhbmdsZSBmb3IgYXBwcm94aW1hdGluZyByb3VuZCBsaW5lIGpvaW5zLlxuY29uc3QgREVHX1BFUl9UUklBTkdMRSA9IDIwO1xuXG4vLyBUaGUgbnVtYmVyIG9mIGJpdHMgdGhhdCBpcyB1c2VkIHRvIHN0b3JlIHRoZSBsaW5lIGRpc3RhbmNlIGluIHRoZSBidWZmZXIuXG5jb25zdCBMSU5FX0RJU1RBTkNFX0JVRkZFUl9CSVRTID0gMTU7XG5cbi8vIFdlIGRvbid0IGhhdmUgZW5vdWdoIGJpdHMgZm9yIHRoZSBsaW5lIGRpc3RhbmNlIGFzIHdlJ2QgbGlrZSB0byBoYXZlLCBzb1xuLy8gdXNlIHRoaXMgdmFsdWUgdG8gc2NhbGUgdGhlIGxpbmUgZGlzdGFuY2UgKGluIHRpbGUgdW5pdHMpIGRvd24gdG8gYSBzbWFsbGVyXG4vLyB2YWx1ZS4gVGhpcyBsZXRzIHVzIHN0b3JlIGxvbmdlciBkaXN0YW5jZXMgd2hpbGUgc2FjcmlmaWNpbmcgcHJlY2lzaW9uLlxuY29uc3QgTElORV9ESVNUQU5DRV9TQ0FMRSA9IDEgLyAyO1xuXG4vLyBUaGUgbWF4aW11bSBsaW5lIGRpc3RhbmNlLCBpbiB0aWxlIHVuaXRzLCB0aGF0IGZpdHMgaW4gdGhlIGJ1ZmZlci5cbmNvbnN0IE1BWF9MSU5FX0RJU1RBTkNFID0gTWF0aC5wb3coMiwgTElORV9ESVNUQU5DRV9CVUZGRVJfQklUUyAtIDEpIC8gTElORV9ESVNUQU5DRV9TQ0FMRTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBMaW5lQnVja2V0IGltcGxlbWVudHMgQnVja2V0IHtcbiAgICBkaXN0YW5jZTogbnVtYmVyO1xuICAgIHRvdGFsRGlzdGFuY2U6IG51bWJlcjtcbiAgICBzY2FsZWREaXN0YW5jZTogbnVtYmVyO1xuICAgIGNsaXBTdGFydDogbnVtYmVyO1xuICAgIGNsaXBFbmQ6IG51bWJlcjtcblxuICAgIGUxOiBudW1iZXI7XG4gICAgZTI6IG51bWJlcjtcblxuICAgIGluZGV4OiBudW1iZXI7XG4gICAgem9vbTogbnVtYmVyO1xuICAgIG92ZXJzY2FsaW5nOiBudW1iZXI7XG4gICAgbGF5ZXJzOiBBcnJheTxMaW5lU3R5bGVMYXllcj47XG4gICAgbGF5ZXJJZHM6IEFycmF5PHN0cmluZz47XG4gICAgc3RhdGVEZXBlbmRlbnRMYXllcnM6IEFycmF5PGFueT47XG4gICAgc3RhdGVEZXBlbmRlbnRMYXllcklkczogQXJyYXk8c3RyaW5nPjtcbiAgICBwYXR0ZXJuRmVhdHVyZXM6IEFycmF5PEJ1Y2tldEZlYXR1cmU+O1xuXG4gICAgbGF5b3V0VmVydGV4QXJyYXk6IExpbmVMYXlvdXRBcnJheTtcbiAgICBsYXlvdXRWZXJ0ZXhCdWZmZXI6IFZlcnRleEJ1ZmZlcjtcblxuICAgIGluZGV4QXJyYXk6IFRyaWFuZ2xlSW5kZXhBcnJheTtcbiAgICBpbmRleEJ1ZmZlcjogSW5kZXhCdWZmZXI7XG5cbiAgICBoYXNQYXR0ZXJuOiBib29sZWFuO1xuICAgIHByb2dyYW1Db25maWd1cmF0aW9uczogUHJvZ3JhbUNvbmZpZ3VyYXRpb25TZXQ8TGluZVN0eWxlTGF5ZXI+O1xuICAgIHNlZ21lbnRzOiBTZWdtZW50VmVjdG9yO1xuICAgIHVwbG9hZGVkOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogQnVja2V0UGFyYW1ldGVyczxMaW5lU3R5bGVMYXllcj4pIHtcbiAgICAgICAgdGhpcy56b29tID0gb3B0aW9ucy56b29tO1xuICAgICAgICB0aGlzLm92ZXJzY2FsaW5nID0gb3B0aW9ucy5vdmVyc2NhbGluZztcbiAgICAgICAgdGhpcy5sYXllcnMgPSBvcHRpb25zLmxheWVycztcbiAgICAgICAgdGhpcy5sYXllcklkcyA9IHRoaXMubGF5ZXJzLm1hcChsYXllciA9PiBsYXllci5pZCk7XG4gICAgICAgIHRoaXMuaW5kZXggPSBvcHRpb25zLmluZGV4O1xuICAgICAgICB0aGlzLmhhc1BhdHRlcm4gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wYXR0ZXJuRmVhdHVyZXMgPSBbXTtcblxuICAgICAgICB0aGlzLmxheW91dFZlcnRleEFycmF5ID0gbmV3IExpbmVMYXlvdXRBcnJheSgpO1xuICAgICAgICB0aGlzLmluZGV4QXJyYXkgPSBuZXcgVHJpYW5nbGVJbmRleEFycmF5KCk7XG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zID0gbmV3IFByb2dyYW1Db25maWd1cmF0aW9uU2V0KGxheW91dEF0dHJpYnV0ZXMsIG9wdGlvbnMubGF5ZXJzLCBvcHRpb25zLnpvb20pO1xuICAgICAgICB0aGlzLnNlZ21lbnRzID0gbmV3IFNlZ21lbnRWZWN0b3IoKTtcblxuICAgICAgICB0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJJZHMgPSB0aGlzLmxheWVycy5maWx0ZXIoKGwpID0+IGwuaXNTdGF0ZURlcGVuZGVudCgpKS5tYXAoKGwpID0+IGwuaWQpO1xuICAgIH1cblxuICAgIHBvcHVsYXRlKGZlYXR1cmVzOiBBcnJheTxJbmRleGVkRmVhdHVyZT4sIG9wdGlvbnM6IFBvcHVsYXRlUGFyYW1ldGVycywgY2Fub25pY2FsOiBDYW5vbmljYWxUaWxlSUQpIHtcbiAgICAgICAgdGhpcy5oYXNQYXR0ZXJuID0gaGFzUGF0dGVybignbGluZScsIHRoaXMubGF5ZXJzLCBvcHRpb25zKTtcbiAgICAgICAgY29uc3QgbGluZVNvcnRLZXkgPSB0aGlzLmxheWVyc1swXS5sYXlvdXQuZ2V0KCdsaW5lLXNvcnQta2V5Jyk7XG4gICAgICAgIGNvbnN0IGJ1Y2tldEZlYXR1cmVzID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCB7ZmVhdHVyZSwgaWQsIGluZGV4LCBzb3VyY2VMYXllckluZGV4fSBvZiBmZWF0dXJlcykge1xuICAgICAgICAgICAgY29uc3QgbmVlZEdlb21ldHJ5ID0gdGhpcy5sYXllcnNbMF0uX2ZlYXR1cmVGaWx0ZXIubmVlZEdlb21ldHJ5O1xuICAgICAgICAgICAgY29uc3QgZXZhbHVhdGlvbkZlYXR1cmUgPSB7dHlwZTogZmVhdHVyZS50eXBlLFxuICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IGZlYXR1cmUucHJvcGVydGllcyxcbiAgICAgICAgICAgICAgICBnZW9tZXRyeTogbmVlZEdlb21ldHJ5ID8gbG9hZEdlb21ldHJ5KGZlYXR1cmUpIDogW119O1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyLmZpbHRlcihuZXcgRXZhbHVhdGlvblBhcmFtZXRlcnModGhpcy56b29tKSwgZXZhbHVhdGlvbkZlYXR1cmUsIGNhbm9uaWNhbCkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBpZiAoIW5lZWRHZW9tZXRyeSkgIGV2YWx1YXRpb25GZWF0dXJlLmdlb21ldHJ5ID0gbG9hZEdlb21ldHJ5KGZlYXR1cmUpO1xuXG4gICAgICAgICAgICBjb25zdCBzb3J0S2V5ID0gbGluZVNvcnRLZXkgP1xuICAgICAgICAgICAgICAgIGxpbmVTb3J0S2V5LmV2YWx1YXRlKGV2YWx1YXRpb25GZWF0dXJlLCB7fSwgY2Fub25pY2FsKSA6XG4gICAgICAgICAgICAgICAgdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICBjb25zdCBidWNrZXRGZWF0dXJlOiBCdWNrZXRGZWF0dXJlID0ge1xuICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IGZlYXR1cmUucHJvcGVydGllcyxcbiAgICAgICAgICAgICAgICB0eXBlOiBmZWF0dXJlLnR5cGUsXG4gICAgICAgICAgICAgICAgc291cmNlTGF5ZXJJbmRleCxcbiAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgICBnZW9tZXRyeTogZXZhbHVhdGlvbkZlYXR1cmUuZ2VvbWV0cnksXG4gICAgICAgICAgICAgICAgcGF0dGVybnM6IHt9LFxuICAgICAgICAgICAgICAgIHNvcnRLZXlcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGJ1Y2tldEZlYXR1cmVzLnB1c2goYnVja2V0RmVhdHVyZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGluZVNvcnRLZXkpIHtcbiAgICAgICAgICAgIGJ1Y2tldEZlYXR1cmVzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBhLnNvcnRLZXkgaXMgYWx3YXlzIGEgbnVtYmVyIHdoZW4gaW4gdXNlXG4gICAgICAgICAgICAgICAgcmV0dXJuICgoYS5zb3J0S2V5OiBhbnkpOiBudW1iZXIpIC0gKChiLnNvcnRLZXk6IGFueSk6IG51bWJlcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgYnVja2V0RmVhdHVyZSBvZiBidWNrZXRGZWF0dXJlcykge1xuICAgICAgICAgICAgY29uc3Qge2dlb21ldHJ5LCBpbmRleCwgc291cmNlTGF5ZXJJbmRleH0gPSBidWNrZXRGZWF0dXJlO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5oYXNQYXR0ZXJuKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0dGVybkJ1Y2tldEZlYXR1cmUgPSBhZGRQYXR0ZXJuRGVwZW5kZW5jaWVzKCdsaW5lJywgdGhpcy5sYXllcnMsIGJ1Y2tldEZlYXR1cmUsIHRoaXMuem9vbSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgLy8gcGF0dGVybiBmZWF0dXJlcyBhcmUgYWRkZWQgb25seSBvbmNlIHRoZSBwYXR0ZXJuIGlzIGxvYWRlZCBpbnRvIHRoZSBpbWFnZSBhdGxhc1xuICAgICAgICAgICAgICAgIC8vIHNvIGFyZSBzdG9yZWQgZHVyaW5nIHBvcHVsYXRlIHVudGlsIGxhdGVyIHVwZGF0ZWQgd2l0aCBwb3NpdGlvbnMgYnkgdGlsZSB3b3JrZXIgaW4gYWRkRmVhdHVyZXNcbiAgICAgICAgICAgICAgICB0aGlzLnBhdHRlcm5GZWF0dXJlcy5wdXNoKHBhdHRlcm5CdWNrZXRGZWF0dXJlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRGZWF0dXJlKGJ1Y2tldEZlYXR1cmUsIGdlb21ldHJ5LCBpbmRleCwgY2Fub25pY2FsLCB7fSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlc1tpbmRleF0uZmVhdHVyZTtcbiAgICAgICAgICAgIG9wdGlvbnMuZmVhdHVyZUluZGV4Lmluc2VydChmZWF0dXJlLCBnZW9tZXRyeSwgaW5kZXgsIHNvdXJjZUxheWVySW5kZXgsIHRoaXMuaW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlKHN0YXRlczogRmVhdHVyZVN0YXRlcywgdnRMYXllcjogVmVjdG9yVGlsZUxheWVyLCBpbWFnZVBvc2l0aW9uczoge1tfOiBzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSkge1xuICAgICAgICBpZiAoIXRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcnMubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwZGF0ZVBhaW50QXJyYXlzKHN0YXRlcywgdnRMYXllciwgdGhpcy5zdGF0ZURlcGVuZGVudExheWVycywgaW1hZ2VQb3NpdGlvbnMpO1xuICAgIH1cblxuICAgIGFkZEZlYXR1cmVzKG9wdGlvbnM6IFBvcHVsYXRlUGFyYW1ldGVycywgY2Fub25pY2FsOiBDYW5vbmljYWxUaWxlSUQsIGltYWdlUG9zaXRpb25zOiB7W186IHN0cmluZ106IEltYWdlUG9zaXRpb259KSB7XG4gICAgICAgIGZvciAoY29uc3QgZmVhdHVyZSBvZiB0aGlzLnBhdHRlcm5GZWF0dXJlcykge1xuICAgICAgICAgICAgdGhpcy5hZGRGZWF0dXJlKGZlYXR1cmUsIGZlYXR1cmUuZ2VvbWV0cnksIGZlYXR1cmUuaW5kZXgsIGNhbm9uaWNhbCwgaW1hZ2VQb3NpdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIHVwbG9hZFBlbmRpbmcoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy51cGxvYWRlZCB8fCB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5uZWVkc1VwbG9hZDtcbiAgICB9XG5cbiAgICB1cGxvYWQoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgICBpZiAoIXRoaXMudXBsb2FkZWQpIHtcbiAgICAgICAgICAgIHRoaXMubGF5b3V0VmVydGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgbGF5b3V0QXR0cmlidXRlcyk7XG4gICAgICAgICAgICB0aGlzLmluZGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwbG9hZChjb250ZXh0KTtcbiAgICAgICAgdGhpcy51cGxvYWRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxheW91dFZlcnRleEJ1ZmZlcikgcmV0dXJuO1xuICAgICAgICB0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuc2VnbWVudHMuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIGFkZEZlYXR1cmUoZmVhdHVyZTogQnVja2V0RmVhdHVyZSwgZ2VvbWV0cnk6IEFycmF5PEFycmF5PFBvaW50Pj4sIGluZGV4OiBudW1iZXIsIGNhbm9uaWNhbDogQ2Fub25pY2FsVGlsZUlELCBpbWFnZVBvc2l0aW9uczoge1tfOiBzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSkge1xuICAgICAgICBjb25zdCBsYXlvdXQgPSB0aGlzLmxheWVyc1swXS5sYXlvdXQ7XG4gICAgICAgIGNvbnN0IGpvaW4gPSBsYXlvdXQuZ2V0KCdsaW5lLWpvaW4nKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSk7XG4gICAgICAgIGNvbnN0IGNhcCA9IGxheW91dC5nZXQoJ2xpbmUtY2FwJyk7XG4gICAgICAgIGNvbnN0IG1pdGVyTGltaXQgPSBsYXlvdXQuZ2V0KCdsaW5lLW1pdGVyLWxpbWl0Jyk7XG4gICAgICAgIGNvbnN0IHJvdW5kTGltaXQgPSBsYXlvdXQuZ2V0KCdsaW5lLXJvdW5kLWxpbWl0Jyk7XG5cbiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGdlb21ldHJ5KSB7XG4gICAgICAgICAgICB0aGlzLmFkZExpbmUobGluZSwgZmVhdHVyZSwgam9pbiwgY2FwLCBtaXRlckxpbWl0LCByb3VuZExpbWl0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnBvcHVsYXRlUGFpbnRBcnJheXModGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGgsIGZlYXR1cmUsIGluZGV4LCBpbWFnZVBvc2l0aW9ucywgY2Fub25pY2FsKTtcbiAgICB9XG5cbiAgICBhZGRMaW5lKHZlcnRpY2VzOiBBcnJheTxQb2ludD4sIGZlYXR1cmU6IEJ1Y2tldEZlYXR1cmUsIGpvaW46IHN0cmluZywgY2FwOiBzdHJpbmcsIG1pdGVyTGltaXQ6IG51bWJlciwgcm91bmRMaW1pdDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuZGlzdGFuY2UgPSAwO1xuICAgICAgICB0aGlzLnNjYWxlZERpc3RhbmNlID0gMDtcbiAgICAgICAgdGhpcy50b3RhbERpc3RhbmNlID0gMDtcblxuICAgICAgICBpZiAoISFmZWF0dXJlLnByb3BlcnRpZXMgJiZcbiAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSgnbWFwYm94X2NsaXBfc3RhcnQnKSAmJlxuICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KCdtYXBib3hfY2xpcF9lbmQnKSkge1xuXG4gICAgICAgICAgICB0aGlzLmNsaXBTdGFydCA9ICtmZWF0dXJlLnByb3BlcnRpZXNbJ21hcGJveF9jbGlwX3N0YXJ0J107XG4gICAgICAgICAgICB0aGlzLmNsaXBFbmQgPSArZmVhdHVyZS5wcm9wZXJ0aWVzWydtYXBib3hfY2xpcF9lbmQnXTtcblxuICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSB0b3RhbCBkaXN0YW5jZSwgaW4gdGlsZSB1bml0cywgb2YgdGhpcyB0aWxlZCBsaW5lIGZlYXR1cmVcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmVydGljZXMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b3RhbERpc3RhbmNlICs9IHZlcnRpY2VzW2ldLmRpc3QodmVydGljZXNbaSArIDFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2NhbGVkRGlzdGFuY2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzUG9seWdvbiA9IHZlY3RvclRpbGVGZWF0dXJlVHlwZXNbZmVhdHVyZS50eXBlXSA9PT0gJ1BvbHlnb24nO1xuXG4gICAgICAgIC8vIElmIHRoZSBsaW5lIGhhcyBkdXBsaWNhdGUgdmVydGljZXMgYXQgdGhlIGVuZHMsIGFkanVzdCBzdGFydC9sZW5ndGggdG8gcmVtb3ZlIHRoZW0uXG4gICAgICAgIGxldCBsZW4gPSB2ZXJ0aWNlcy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChsZW4gPj0gMiAmJiB2ZXJ0aWNlc1tsZW4gLSAxXS5lcXVhbHModmVydGljZXNbbGVuIC0gMl0pKSB7XG4gICAgICAgICAgICBsZW4tLTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZmlyc3QgPSAwO1xuICAgICAgICB3aGlsZSAoZmlyc3QgPCBsZW4gLSAxICYmIHZlcnRpY2VzW2ZpcnN0XS5lcXVhbHModmVydGljZXNbZmlyc3QgKyAxXSkpIHtcbiAgICAgICAgICAgIGZpcnN0Kys7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZ25vcmUgaW52YWxpZCBnZW9tZXRyeS5cbiAgICAgICAgaWYgKGxlbiA8IChpc1BvbHlnb24gPyAzIDogMikpIHJldHVybjtcblxuICAgICAgICBpZiAoam9pbiA9PT0gJ2JldmVsJykgbWl0ZXJMaW1pdCA9IDEuMDU7XG5cbiAgICAgICAgY29uc3Qgc2hhcnBDb3JuZXJPZmZzZXQgPSB0aGlzLm92ZXJzY2FsaW5nIDw9IDE2ID9cbiAgICAgICAgICAgIFNIQVJQX0NPUk5FUl9PRkZTRVQgKiBFWFRFTlQgLyAoNTEyICogdGhpcy5vdmVyc2NhbGluZykgOlxuICAgICAgICAgICAgMDtcblxuICAgICAgICAvLyB3ZSBjb3VsZCBiZSBtb3JlIHByZWNpc2UsIGJ1dCBpdCB3b3VsZCBvbmx5IHNhdmUgYSBuZWdsaWdpYmxlIGFtb3VudCBvZiBzcGFjZVxuICAgICAgICBjb25zdCBzZWdtZW50ID0gdGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudChsZW4gKiAxMCwgdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgdGhpcy5pbmRleEFycmF5KTtcblxuICAgICAgICBsZXQgY3VycmVudFZlcnRleDtcbiAgICAgICAgbGV0IHByZXZWZXJ0ZXggPSAoKHVuZGVmaW5lZDogYW55KTogUG9pbnQpO1xuICAgICAgICBsZXQgbmV4dFZlcnRleCA9ICgodW5kZWZpbmVkOiBhbnkpOiBQb2ludCk7XG4gICAgICAgIGxldCBwcmV2Tm9ybWFsID0gKCh1bmRlZmluZWQ6IGFueSk6IFBvaW50KTtcbiAgICAgICAgbGV0IG5leHROb3JtYWwgPSAoKHVuZGVmaW5lZDogYW55KTogUG9pbnQpO1xuXG4gICAgICAgIC8vIHRoZSBsYXN0IHR3byB2ZXJ0aWNlcyBhZGRlZFxuICAgICAgICB0aGlzLmUxID0gdGhpcy5lMiA9IC0xO1xuXG4gICAgICAgIGlmIChpc1BvbHlnb24pIHtcbiAgICAgICAgICAgIGN1cnJlbnRWZXJ0ZXggPSB2ZXJ0aWNlc1tsZW4gLSAyXTtcbiAgICAgICAgICAgIG5leHROb3JtYWwgPSB2ZXJ0aWNlc1tmaXJzdF0uc3ViKGN1cnJlbnRWZXJ0ZXgpLl91bml0KCkuX3BlcnAoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSBmaXJzdDsgaSA8IGxlbjsgaSsrKSB7XG5cbiAgICAgICAgICAgIG5leHRWZXJ0ZXggPSBpID09PSBsZW4gLSAxID9cbiAgICAgICAgICAgICAgICAoaXNQb2x5Z29uID8gdmVydGljZXNbZmlyc3QgKyAxXSA6ICh1bmRlZmluZWQ6IGFueSkpIDogLy8gaWYgaXQncyBhIHBvbHlnb24sIHRyZWF0IHRoZSBsYXN0IHZlcnRleCBsaWtlIHRoZSBmaXJzdFxuICAgICAgICAgICAgICAgIHZlcnRpY2VzW2kgKyAxXTsgLy8ganVzdCB0aGUgbmV4dCB2ZXJ0ZXhcblxuICAgICAgICAgICAgLy8gaWYgdHdvIGNvbnNlY3V0aXZlIHZlcnRpY2VzIGV4aXN0LCBza2lwIHRoZSBjdXJyZW50IG9uZVxuICAgICAgICAgICAgaWYgKG5leHRWZXJ0ZXggJiYgdmVydGljZXNbaV0uZXF1YWxzKG5leHRWZXJ0ZXgpKSBjb250aW51ZTtcblxuICAgICAgICAgICAgaWYgKG5leHROb3JtYWwpIHByZXZOb3JtYWwgPSBuZXh0Tm9ybWFsO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRWZXJ0ZXgpIHByZXZWZXJ0ZXggPSBjdXJyZW50VmVydGV4O1xuXG4gICAgICAgICAgICBjdXJyZW50VmVydGV4ID0gdmVydGljZXNbaV07XG5cbiAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgbm9ybWFsIHRvd2FyZHMgdGhlIG5leHQgdmVydGV4IGluIHRoaXMgbGluZS4gSW4gY2FzZVxuICAgICAgICAgICAgLy8gdGhlcmUgaXMgbm8gbmV4dCB2ZXJ0ZXgsIHByZXRlbmQgdGhhdCB0aGUgbGluZSBpcyBjb250aW51aW5nIHN0cmFpZ2h0LFxuICAgICAgICAgICAgLy8gbWVhbmluZyB0aGF0IHdlIGFyZSBqdXN0IHVzaW5nIHRoZSBwcmV2aW91cyBub3JtYWwuXG4gICAgICAgICAgICBuZXh0Tm9ybWFsID0gbmV4dFZlcnRleCA/IG5leHRWZXJ0ZXguc3ViKGN1cnJlbnRWZXJ0ZXgpLl91bml0KCkuX3BlcnAoKSA6IHByZXZOb3JtYWw7XG5cbiAgICAgICAgICAgIC8vIElmIHdlIHN0aWxsIGRvbid0IGhhdmUgYSBwcmV2aW91cyBub3JtYWwsIHRoaXMgaXMgdGhlIGJlZ2lubmluZyBvZiBhXG4gICAgICAgICAgICAvLyBub24tY2xvc2VkIGxpbmUsIHNvIHdlJ3JlIGRvaW5nIGEgc3RyYWlnaHQgXCJqb2luXCIuXG4gICAgICAgICAgICBwcmV2Tm9ybWFsID0gcHJldk5vcm1hbCB8fCBuZXh0Tm9ybWFsO1xuXG4gICAgICAgICAgICAvLyBEZXRlcm1pbmUgdGhlIG5vcm1hbCBvZiB0aGUgam9pbiBleHRydXNpb24uIEl0IGlzIHRoZSBhbmdsZSBiaXNlY3RvclxuICAgICAgICAgICAgLy8gb2YgdGhlIHNlZ21lbnRzIGJldHdlZW4gdGhlIHByZXZpb3VzIGxpbmUgYW5kIHRoZSBuZXh0IGxpbmUuXG4gICAgICAgICAgICAvLyBJbiB0aGUgY2FzZSBvZiAxODDDgsKwIGFuZ2xlcywgdGhlIHByZXYgYW5kIG5leHQgbm9ybWFscyBjYW5jZWwgZWFjaCBvdGhlciBvdXQ6XG4gICAgICAgICAgICAvLyBwcmV2Tm9ybWFsICsgbmV4dE5vcm1hbCA9ICgwLCAwKSwgaXRzIG1hZ25pdHVkZSBpcyAwLCBzbyB0aGUgdW5pdCB2ZWN0b3Igd291bGQgYmVcbiAgICAgICAgICAgIC8vIHVuZGVmaW5lZC4gSW4gdGhhdCBjYXNlLCB3ZSdyZSBrZWVwaW5nIHRoZSBqb2luTm9ybWFsIGF0ICgwLCAwKSwgc28gdGhhdCB0aGUgY29zSGFsZkFuZ2xlXG4gICAgICAgICAgICAvLyBiZWxvdyB3aWxsIGFsc28gYmVjb21lIDAgYW5kIG1pdGVyTGVuZ3RoIHdpbGwgYmVjb21lIEluZmluaXR5LlxuICAgICAgICAgICAgbGV0IGpvaW5Ob3JtYWwgPSBwcmV2Tm9ybWFsLmFkZChuZXh0Tm9ybWFsKTtcbiAgICAgICAgICAgIGlmIChqb2luTm9ybWFsLnggIT09IDAgfHwgam9pbk5vcm1hbC55ICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgam9pbk5vcm1hbC5fdW5pdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyogIGpvaW5Ob3JtYWwgICAgIHByZXZOb3JtYWxcbiAgICAgICAgICAgICAqICAgICAgICAgICAgIMOiwobCliAgICAgIMOiwobCkVxuICAgICAgICAgICAgICogICAgICAgICAgICAgICAgLl9fX19fX19fLiBwcmV2VmVydGV4XG4gICAgICAgICAgICAgKiAgICAgICAgICAgICAgICB8XG4gICAgICAgICAgICAgKiBuZXh0Tm9ybWFsICDDosKGwpAgIHwgIGN1cnJlbnRWZXJ0ZXhcbiAgICAgICAgICAgICAqICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAqICAgICBuZXh0VmVydGV4ICFcbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKi9cblxuICAgICAgICAgICAgLy8gY2FsY3VsYXRlIGNvc2luZXMgb2YgdGhlIGFuZ2xlIChhbmQgaXRzIGhhbGYpIHVzaW5nIGRvdCBwcm9kdWN0XG4gICAgICAgICAgICBjb25zdCBjb3NBbmdsZSA9IHByZXZOb3JtYWwueCAqIG5leHROb3JtYWwueCArIHByZXZOb3JtYWwueSAqIG5leHROb3JtYWwueTtcbiAgICAgICAgICAgIGNvbnN0IGNvc0hhbGZBbmdsZSA9IGpvaW5Ob3JtYWwueCAqIG5leHROb3JtYWwueCArIGpvaW5Ob3JtYWwueSAqIG5leHROb3JtYWwueTtcblxuICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBsZW5ndGggb2YgdGhlIG1pdGVyICh0aGUgcmF0aW8gb2YgdGhlIG1pdGVyIHRvIHRoZSB3aWR0aClcbiAgICAgICAgICAgIC8vIGFzIHRoZSBpbnZlcnNlIG9mIGNvc2luZSBvZiB0aGUgYW5nbGUgYmV0d2VlbiBuZXh0IGFuZCBqb2luIG5vcm1hbHNcbiAgICAgICAgICAgIGNvbnN0IG1pdGVyTGVuZ3RoID0gY29zSGFsZkFuZ2xlICE9PSAwID8gMSAvIGNvc0hhbGZBbmdsZSA6IEluZmluaXR5O1xuXG4gICAgICAgICAgICAvLyBhcHByb3hpbWF0ZSBhbmdsZSBmcm9tIGNvc2luZVxuICAgICAgICAgICAgY29uc3QgYXBwcm94QW5nbGUgPSAyICogTWF0aC5zcXJ0KDIgLSAyICogY29zSGFsZkFuZ2xlKTtcblxuICAgICAgICAgICAgY29uc3QgaXNTaGFycENvcm5lciA9IGNvc0hhbGZBbmdsZSA8IENPU19IQUxGX1NIQVJQX0NPUk5FUiAmJiBwcmV2VmVydGV4ICYmIG5leHRWZXJ0ZXg7XG4gICAgICAgICAgICBjb25zdCBsaW5lVHVybnNMZWZ0ID0gcHJldk5vcm1hbC54ICogbmV4dE5vcm1hbC55IC0gcHJldk5vcm1hbC55ICogbmV4dE5vcm1hbC54ID4gMDtcblxuICAgICAgICAgICAgaWYgKGlzU2hhcnBDb3JuZXIgJiYgaSA+IGZpcnN0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldlNlZ21lbnRMZW5ndGggPSBjdXJyZW50VmVydGV4LmRpc3QocHJldlZlcnRleCk7XG4gICAgICAgICAgICAgICAgaWYgKHByZXZTZWdtZW50TGVuZ3RoID4gMiAqIHNoYXJwQ29ybmVyT2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ByZXZWZXJ0ZXggPSBjdXJyZW50VmVydGV4LnN1YihjdXJyZW50VmVydGV4LnN1YihwcmV2VmVydGV4KS5fbXVsdChzaGFycENvcm5lck9mZnNldCAvIHByZXZTZWdtZW50TGVuZ3RoKS5fcm91bmQoKSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRGlzdGFuY2UocHJldlZlcnRleCwgbmV3UHJldlZlcnRleCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ3VycmVudFZlcnRleChuZXdQcmV2VmVydGV4LCBwcmV2Tm9ybWFsLCAwLCAwLCBzZWdtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgcHJldlZlcnRleCA9IG5ld1ByZXZWZXJ0ZXg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBUaGUgam9pbiBpZiBhIG1pZGRsZSB2ZXJ0ZXgsIG90aGVyd2lzZSB0aGUgY2FwLlxuICAgICAgICAgICAgY29uc3QgbWlkZGxlVmVydGV4ID0gcHJldlZlcnRleCAmJiBuZXh0VmVydGV4O1xuICAgICAgICAgICAgbGV0IGN1cnJlbnRKb2luID0gbWlkZGxlVmVydGV4ID8gam9pbiA6IGlzUG9seWdvbiA/ICdidXR0JyA6IGNhcDtcblxuICAgICAgICAgICAgaWYgKG1pZGRsZVZlcnRleCAmJiBjdXJyZW50Sm9pbiA9PT0gJ3JvdW5kJykge1xuICAgICAgICAgICAgICAgIGlmIChtaXRlckxlbmd0aCA8IHJvdW5kTGltaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEpvaW4gPSAnbWl0ZXInO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWl0ZXJMZW5ndGggPD0gMikge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Sm9pbiA9ICdmYWtlcm91bmQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGN1cnJlbnRKb2luID09PSAnbWl0ZXInICYmIG1pdGVyTGVuZ3RoID4gbWl0ZXJMaW1pdCkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRKb2luID0gJ2JldmVsJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGN1cnJlbnRKb2luID09PSAnYmV2ZWwnKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIG1heGltdW0gZXh0cnVkZSBsZW5ndGggaXMgMTI4IC8gNjMgPSAyIHRpbWVzIHRoZSB3aWR0aCBvZiB0aGUgbGluZVxuICAgICAgICAgICAgICAgIC8vIHNvIGlmIG1pdGVyTGVuZ3RoID49IDIgd2UgbmVlZCB0byBkcmF3IGEgZGlmZmVyZW50IHR5cGUgb2YgYmV2ZWwgaGVyZS5cbiAgICAgICAgICAgICAgICBpZiAobWl0ZXJMZW5ndGggPiAyKSBjdXJyZW50Sm9pbiA9ICdmbGlwYmV2ZWwnO1xuXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIG1pdGVyTGVuZ3RoIGlzIHJlYWxseSBzbWFsbCBhbmQgdGhlIGxpbmUgYmV2ZWwgd291bGRuJ3QgYmUgdmlzaWJsZSxcbiAgICAgICAgICAgICAgICAvLyBqdXN0IGRyYXcgYSBtaXRlciBqb2luIHRvIHNhdmUgYSB0cmlhbmdsZS5cbiAgICAgICAgICAgICAgICBpZiAobWl0ZXJMZW5ndGggPCBtaXRlckxpbWl0KSBjdXJyZW50Sm9pbiA9ICdtaXRlcic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBob3cgZmFyIGFsb25nIHRoZSBsaW5lIHRoZSBjdXJyZW50VmVydGV4IGlzXG4gICAgICAgICAgICBpZiAocHJldlZlcnRleCkgdGhpcy51cGRhdGVEaXN0YW5jZShwcmV2VmVydGV4LCBjdXJyZW50VmVydGV4KTtcblxuICAgICAgICAgICAgaWYgKGN1cnJlbnRKb2luID09PSAnbWl0ZXInKSB7XG5cbiAgICAgICAgICAgICAgICBqb2luTm9ybWFsLl9tdWx0KG1pdGVyTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoY3VycmVudFZlcnRleCwgam9pbk5vcm1hbCwgMCwgMCwgc2VnbWVudCk7XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudEpvaW4gPT09ICdmbGlwYmV2ZWwnKSB7XG4gICAgICAgICAgICAgICAgLy8gbWl0ZXIgaXMgdG9vIGJpZywgZmxpcCB0aGUgZGlyZWN0aW9uIHRvIG1ha2UgYSBiZXZlbGVkIGpvaW5cblxuICAgICAgICAgICAgICAgIGlmIChtaXRlckxlbmd0aCA+IDEwMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBBbG1vc3QgcGFyYWxsZWwgbGluZXNcbiAgICAgICAgICAgICAgICAgICAgam9pbk5vcm1hbCA9IG5leHROb3JtYWwubXVsdCgtMSk7XG5cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBiZXZlbExlbmd0aCA9IG1pdGVyTGVuZ3RoICogcHJldk5vcm1hbC5hZGQobmV4dE5vcm1hbCkubWFnKCkgLyBwcmV2Tm9ybWFsLnN1YihuZXh0Tm9ybWFsKS5tYWcoKTtcbiAgICAgICAgICAgICAgICAgICAgam9pbk5vcm1hbC5fcGVycCgpLl9tdWx0KGJldmVsTGVuZ3RoICogKGxpbmVUdXJuc0xlZnQgPyAtMSA6IDEpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRDdXJyZW50VmVydGV4KGN1cnJlbnRWZXJ0ZXgsIGpvaW5Ob3JtYWwsIDAsIDAsIHNlZ21lbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkQ3VycmVudFZlcnRleChjdXJyZW50VmVydGV4LCBqb2luTm9ybWFsLm11bHQoLTEpLCAwLCAwLCBzZWdtZW50KTtcblxuICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50Sm9pbiA9PT0gJ2JldmVsJyB8fCBjdXJyZW50Sm9pbiA9PT0gJ2Zha2Vyb3VuZCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPSAtTWF0aC5zcXJ0KG1pdGVyTGVuZ3RoICogbWl0ZXJMZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXRBID0gbGluZVR1cm5zTGVmdCA/IG9mZnNldCA6IDA7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0QiA9IGxpbmVUdXJuc0xlZnQgPyAwIDogb2Zmc2V0O1xuXG4gICAgICAgICAgICAgICAgLy8gQ2xvc2UgcHJldmlvdXMgc2VnbWVudCB3aXRoIGEgYmV2ZWxcbiAgICAgICAgICAgICAgICBpZiAocHJldlZlcnRleCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoY3VycmVudFZlcnRleCwgcHJldk5vcm1hbCwgb2Zmc2V0QSwgb2Zmc2V0Qiwgc2VnbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRKb2luID09PSAnZmFrZXJvdW5kJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgam9pbiBhbmdsZSBpcyBzaGFycCBlbm91Z2ggdGhhdCBhIHJvdW5kIGpvaW4gd291bGQgYmUgdmlzaWJsZS5cbiAgICAgICAgICAgICAgICAgICAgLy8gQmV2ZWwgam9pbnMgZmlsbCB0aGUgZ2FwIGJldHdlZW4gc2VnbWVudHMgd2l0aCBhIHNpbmdsZSBwaWUgc2xpY2UgdHJpYW5nbGUuXG4gICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIHJvdW5kIGpvaW4gYnkgYWRkaW5nIG11bHRpcGxlIHBpZSBzbGljZXMuIFRoZSBqb2luIGlzbid0IGFjdHVhbGx5IHJvdW5kLCBidXRcbiAgICAgICAgICAgICAgICAgICAgLy8gaXQgbG9va3MgbGlrZSBpdCBpcyBhdCB0aGUgc2l6ZXMgd2UgcmVuZGVyIGxpbmVzIGF0LlxuXG4gICAgICAgICAgICAgICAgICAgIC8vIHBpY2sgdGhlIG51bWJlciBvZiB0cmlhbmdsZXMgZm9yIGFwcHJveGltYXRpbmcgcm91bmQgam9pbiBieSBiYXNlZCBvbiB0aGUgYW5nbGUgYmV0d2VlbiBub3JtYWxzXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG4gPSBNYXRoLnJvdW5kKChhcHByb3hBbmdsZSAqIDE4MCAvIE1hdGguUEkpIC8gREVHX1BFUl9UUklBTkdMRSk7XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgbSA9IDE7IG0gPCBuOyBtKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0ID0gbSAvIG47XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodCAhPT0gMC41KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXBwcm94aW1hdGUgc3BoZXJpY2FsIGludGVycG9sYXRpb24gaHR0cHM6Ly9vYnNlcnZhYmxlaHEuY29tL0Btb3VybmVyL2FwcHJveGltYXRpbmctZ2VvbWV0cmljLXNsZXJwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdDIgPSB0IC0gMC41O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEEgPSAxLjA5MDQgKyBjb3NBbmdsZSAqICgtMy4yNDUyICsgY29zQW5nbGUgKiAoMy41NTY0NSAtIGNvc0FuZ2xlICogMS40MzUxOSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEIgPSAwLjg0ODAxMyArIGNvc0FuZ2xlICogKC0xLjA2MDIxICsgY29zQW5nbGUgKiAwLjIxNTYzOCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IHQgKyB0ICogdDIgKiAodCAtIDEpICogKEEgKiB0MiAqIHQyICsgQik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleHRydWRlID0gbmV4dE5vcm1hbC5zdWIocHJldk5vcm1hbCkuX211bHQodCkuX2FkZChwcmV2Tm9ybWFsKS5fdW5pdCgpLl9tdWx0KGxpbmVUdXJuc0xlZnQgPyAtMSA6IDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRIYWxmVmVydGV4KGN1cnJlbnRWZXJ0ZXgsIGV4dHJ1ZGUueCwgZXh0cnVkZS55LCBmYWxzZSwgbGluZVR1cm5zTGVmdCwgMCwgc2VnbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobmV4dFZlcnRleCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBTdGFydCBuZXh0IHNlZ21lbnRcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDdXJyZW50VmVydGV4KGN1cnJlbnRWZXJ0ZXgsIG5leHROb3JtYWwsIC1vZmZzZXRBLCAtb2Zmc2V0Qiwgc2VnbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRKb2luID09PSAnYnV0dCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoY3VycmVudFZlcnRleCwgam9pbk5vcm1hbCwgMCwgMCwgc2VnbWVudCk7IC8vIGJ1dHQgY2FwXG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudEpvaW4gPT09ICdzcXVhcmUnKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gcHJldlZlcnRleCA/IDEgOiAtMTsgLy8gY2xvc2luZyBvciBzdGFydGluZyBzcXVhcmUgY2FwXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRDdXJyZW50VmVydGV4KGN1cnJlbnRWZXJ0ZXgsIGpvaW5Ob3JtYWwsIG9mZnNldCwgb2Zmc2V0LCBzZWdtZW50KTtcblxuICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50Sm9pbiA9PT0gJ3JvdW5kJykge1xuXG4gICAgICAgICAgICAgICAgaWYgKHByZXZWZXJ0ZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2xvc2UgcHJldmlvdXMgc2VnbWVudCB3aXRoIGJ1dHRcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDdXJyZW50VmVydGV4KGN1cnJlbnRWZXJ0ZXgsIHByZXZOb3JtYWwsIDAsIDAsIHNlZ21lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIEFkZCByb3VuZCBjYXAgb3IgbGluZWpvaW4gYXQgZW5kIG9mIHNlZ21lbnRcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDdXJyZW50VmVydGV4KGN1cnJlbnRWZXJ0ZXgsIHByZXZOb3JtYWwsIDEsIDEsIHNlZ21lbnQsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobmV4dFZlcnRleCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBBZGQgcm91bmQgY2FwIGJlZm9yZSBmaXJzdCBzZWdtZW50XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ3VycmVudFZlcnRleChjdXJyZW50VmVydGV4LCBuZXh0Tm9ybWFsLCAtMSwgLTEsIHNlZ21lbnQsIHRydWUpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIFN0YXJ0IG5leHQgc2VnbWVudCB3aXRoIGEgYnV0dFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoY3VycmVudFZlcnRleCwgbmV4dE5vcm1hbCwgMCwgMCwgc2VnbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXNTaGFycENvcm5lciAmJiBpIDwgbGVuIC0gMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRTZWdtZW50TGVuZ3RoID0gY3VycmVudFZlcnRleC5kaXN0KG5leHRWZXJ0ZXgpO1xuICAgICAgICAgICAgICAgIGlmIChuZXh0U2VnbWVudExlbmd0aCA+IDIgKiBzaGFycENvcm5lck9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdDdXJyZW50VmVydGV4ID0gY3VycmVudFZlcnRleC5hZGQobmV4dFZlcnRleC5zdWIoY3VycmVudFZlcnRleCkuX211bHQoc2hhcnBDb3JuZXJPZmZzZXQgLyBuZXh0U2VnbWVudExlbmd0aCkuX3JvdW5kKCkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZURpc3RhbmNlKGN1cnJlbnRWZXJ0ZXgsIG5ld0N1cnJlbnRWZXJ0ZXgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgobmV3Q3VycmVudFZlcnRleCwgbmV4dE5vcm1hbCwgMCwgMCwgc2VnbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRWZXJ0ZXggPSBuZXdDdXJyZW50VmVydGV4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCB0d28gdmVydGljZXMgdG8gdGhlIGJ1ZmZlcnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcCB0aGUgbGluZSB2ZXJ0ZXggdG8gYWRkIGJ1ZmZlciB2ZXJ0aWNlcyBmb3JcbiAgICAgKiBAcGFyYW0gbm9ybWFsIHZlcnRleCBub3JtYWxcbiAgICAgKiBAcGFyYW0gZW5kTGVmdCBleHRydWRlIHRvIHNoaWZ0IHRoZSBsZWZ0IHZlcnRleCBhbG9uZyB0aGUgbGluZVxuICAgICAqIEBwYXJhbSBlbmRSaWdodCBleHRydWRlIHRvIHNoaWZ0IHRoZSBsZWZ0IHZlcnRleCBhbG9uZyB0aGUgbGluZVxuICAgICAqIEBwYXJhbSBzZWdtZW50IHRoZSBzZWdtZW50IG9iamVjdCB0byBhZGQgdGhlIHZlcnRleCB0b1xuICAgICAqIEBwYXJhbSByb3VuZCB3aGV0aGVyIHRoaXMgaXMgYSByb3VuZCBjYXBcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGFkZEN1cnJlbnRWZXJ0ZXgocDogUG9pbnQsIG5vcm1hbDogUG9pbnQsIGVuZExlZnQ6IG51bWJlciwgZW5kUmlnaHQ6IG51bWJlciwgc2VnbWVudDogU2VnbWVudCwgcm91bmQ6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgICAvLyBsZWZ0IGFuZCByaWdodCBleHRydWRlIHZlY3RvcnMsIHBlcnBlbmRpY3VsYXJseSBzaGlmdGVkIGJ5IGVuZExlZnQvZW5kUmlnaHRcbiAgICAgICAgY29uc3QgbGVmdFggPSBub3JtYWwueCArIG5vcm1hbC55ICogZW5kTGVmdDtcbiAgICAgICAgY29uc3QgbGVmdFkgPSBub3JtYWwueSAtIG5vcm1hbC54ICogZW5kTGVmdDtcbiAgICAgICAgY29uc3QgcmlnaHRYID0gLW5vcm1hbC54ICsgbm9ybWFsLnkgKiBlbmRSaWdodDtcbiAgICAgICAgY29uc3QgcmlnaHRZID0gLW5vcm1hbC55IC0gbm9ybWFsLnggKiBlbmRSaWdodDtcblxuICAgICAgICB0aGlzLmFkZEhhbGZWZXJ0ZXgocCwgbGVmdFgsIGxlZnRZLCByb3VuZCwgZmFsc2UsIGVuZExlZnQsIHNlZ21lbnQpO1xuICAgICAgICB0aGlzLmFkZEhhbGZWZXJ0ZXgocCwgcmlnaHRYLCByaWdodFksIHJvdW5kLCB0cnVlLCAtZW5kUmlnaHQsIHNlZ21lbnQpO1xuXG4gICAgICAgIC8vIFRoZXJlIGlzIGEgbWF4aW11bSBcImRpc3RhbmNlIGFsb25nIHRoZSBsaW5lXCIgdGhhdCB3ZSBjYW4gc3RvcmUgaW4gdGhlIGJ1ZmZlcnMuXG4gICAgICAgIC8vIFdoZW4gd2UgZ2V0IGNsb3NlIHRvIHRoZSBkaXN0YW5jZSwgcmVzZXQgaXQgdG8gemVybyBhbmQgYWRkIHRoZSB2ZXJ0ZXggYWdhaW4gd2l0aFxuICAgICAgICAvLyBhIGRpc3RhbmNlIG9mIHplcm8uIFRoZSBtYXggZGlzdGFuY2UgaXMgZGV0ZXJtaW5lZCBieSB0aGUgbnVtYmVyIG9mIGJpdHMgd2UgYWxsb2NhdGVcbiAgICAgICAgLy8gdG8gYGxpbmVzb2ZhcmAuXG4gICAgICAgIGlmICh0aGlzLmRpc3RhbmNlID4gTUFYX0xJTkVfRElTVEFOQ0UgLyAyICYmIHRoaXMudG90YWxEaXN0YW5jZSA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5kaXN0YW5jZSA9IDA7XG4gICAgICAgICAgICB0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgocCwgbm9ybWFsLCBlbmRMZWZ0LCBlbmRSaWdodCwgc2VnbWVudCwgcm91bmQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkSGFsZlZlcnRleCh7eCwgeX06IFBvaW50LCBleHRydWRlWDogbnVtYmVyLCBleHRydWRlWTogbnVtYmVyLCByb3VuZDogYm9vbGVhbiwgdXA6IGJvb2xlYW4sIGRpcjogbnVtYmVyLCBzZWdtZW50OiBTZWdtZW50KSB7XG4gICAgICAgIC8vIHNjYWxlIGRvd24gc28gdGhhdCB3ZSBjYW4gc3RvcmUgbG9uZ2VyIGRpc3RhbmNlcyB3aGlsZSBzYWNyaWZpY2luZyBwcmVjaXNpb24uXG4gICAgICAgIGNvbnN0IGxpbmVzb2ZhciA9IHRoaXMuc2NhbGVkRGlzdGFuY2UgKiBMSU5FX0RJU1RBTkNFX1NDQUxFO1xuXG4gICAgICAgIHRoaXMubGF5b3V0VmVydGV4QXJyYXkuZW1wbGFjZUJhY2soXG4gICAgICAgICAgICAvLyBhX3Bvc19ub3JtYWxcbiAgICAgICAgICAgIC8vIEVuY29kZSByb3VuZC91cCB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0c1xuICAgICAgICAgICAgKHggPDwgMSkgKyAocm91bmQgPyAxIDogMCksXG4gICAgICAgICAgICAoeSA8PCAxKSArICh1cCA/IDEgOiAwKSxcbiAgICAgICAgICAgIC8vIGFfZGF0YVxuICAgICAgICAgICAgLy8gYWRkIDEyOCB0byBzdG9yZSBhIGJ5dGUgaW4gYW4gdW5zaWduZWQgYnl0ZVxuICAgICAgICAgICAgTWF0aC5yb3VuZChFWFRSVURFX1NDQUxFICogZXh0cnVkZVgpICsgMTI4LFxuICAgICAgICAgICAgTWF0aC5yb3VuZChFWFRSVURFX1NDQUxFICogZXh0cnVkZVkpICsgMTI4LFxuICAgICAgICAgICAgLy8gRW5jb2RlIHRoZSAtMS8wLzEgZGlyZWN0aW9uIHZhbHVlIGludG8gdGhlIGZpcnN0IHR3byBiaXRzIG9mIC56IG9mIGFfZGF0YS5cbiAgICAgICAgICAgIC8vIENvbWJpbmUgaXQgd2l0aCB0aGUgbG93ZXIgNiBiaXRzIG9mIGBsaW5lc29mYXJgIChzaGlmdGVkIGJ5IDIgYml0ZXMgdG8gbWFrZVxuICAgICAgICAgICAgLy8gcm9vbSBmb3IgdGhlIGRpcmVjdGlvbiB2YWx1ZSkuIFRoZSB1cHBlciA4IGJpdHMgb2YgYGxpbmVzb2ZhcmAgYXJlIHBsYWNlZCBpblxuICAgICAgICAgICAgLy8gdGhlIGB3YCBjb21wb25lbnQuXG4gICAgICAgICAgICAoKGRpciA9PT0gMCA/IDAgOiAoZGlyIDwgMCA/IC0xIDogMSkpICsgMSkgfCAoKGxpbmVzb2ZhciAmIDB4M0YpIDw8IDIpLFxuICAgICAgICAgICAgbGluZXNvZmFyID4+IDYpO1xuXG4gICAgICAgIGNvbnN0IGUgPSBzZWdtZW50LnZlcnRleExlbmd0aCsrO1xuICAgICAgICBpZiAodGhpcy5lMSA+PSAwICYmIHRoaXMuZTIgPj0gMCkge1xuICAgICAgICAgICAgdGhpcy5pbmRleEFycmF5LmVtcGxhY2VCYWNrKHRoaXMuZTEsIHRoaXMuZTIsIGUpO1xuICAgICAgICAgICAgc2VnbWVudC5wcmltaXRpdmVMZW5ndGgrKztcbiAgICAgICAgfVxuICAgICAgICBpZiAodXApIHtcbiAgICAgICAgICAgIHRoaXMuZTIgPSBlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lMSA9IGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVTY2FsZWREaXN0YW5jZSgpIHtcbiAgICAgICAgLy8gS25vd2luZyB0aGUgcmF0aW8gb2YgdGhlIGZ1bGwgbGluZXN0cmluZyBjb3ZlcmVkIGJ5IHRoaXMgdGlsZWQgZmVhdHVyZSwgYXMgd2VsbFxuICAgICAgICAvLyBhcyB0aGUgdG90YWwgZGlzdGFuY2UgKGluIHRpbGUgdW5pdHMpIG9mIHRoaXMgdGlsZWQgZmVhdHVyZSwgYW5kIHRoZSBkaXN0YW5jZVxuICAgICAgICAvLyAoaW4gdGlsZSB1bml0cykgb2YgdGhlIGN1cnJlbnQgdmVydGV4LCB3ZSBjYW4gZGV0ZXJtaW5lIHRoZSByZWxhdGl2ZSBkaXN0YW5jZVxuICAgICAgICAvLyBvZiB0aGlzIHZlcnRleCBhbG9uZyB0aGUgZnVsbCBsaW5lc3RyaW5nIGZlYXR1cmUgYW5kIHNjYWxlIGl0IHRvIFswLCAyXjE1KVxuICAgICAgICB0aGlzLnNjYWxlZERpc3RhbmNlID0gdGhpcy50b3RhbERpc3RhbmNlID4gMCA/XG4gICAgICAgICAgICAodGhpcy5jbGlwU3RhcnQgKyAodGhpcy5jbGlwRW5kIC0gdGhpcy5jbGlwU3RhcnQpICogdGhpcy5kaXN0YW5jZSAvIHRoaXMudG90YWxEaXN0YW5jZSkgICogKE1BWF9MSU5FX0RJU1RBTkNFIC0gMSkgOlxuICAgICAgICAgICAgdGhpcy5kaXN0YW5jZTtcbiAgICB9XG5cbiAgICB1cGRhdGVEaXN0YW5jZShwcmV2OiBQb2ludCwgbmV4dDogUG9pbnQpIHtcbiAgICAgICAgdGhpcy5kaXN0YW5jZSArPSBwcmV2LmRpc3QobmV4dCk7XG4gICAgICAgIHRoaXMudXBkYXRlU2NhbGVkRGlzdGFuY2UoKTtcbiAgICB9XG59XG5cbnJlZ2lzdGVyKCdMaW5lQnVja2V0JywgTGluZUJ1Y2tldCwge29taXQ6IFsnbGF5ZXJzJywgJ3BhdHRlcm5GZWF0dXJlcyddfSk7XG5cbmV4cG9ydCBkZWZhdWx0IExpbmVCdWNrZXQ7XG4iLCIvLyBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkLiBFZGl0IGJ1aWxkL2dlbmVyYXRlLXN0eWxlLWNvZGUuanMsIHRoZW4gcnVuIGB5YXJuIHJ1biBjb2RlZ2VuYC5cbi8vIEBmbG93XG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG5pbXBvcnQgc3R5bGVTcGVjIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvcmVmZXJlbmNlL2xhdGVzdCc7XG5cbmltcG9ydCB7XG4gICAgUHJvcGVydGllcyxcbiAgICBEYXRhQ29uc3RhbnRQcm9wZXJ0eSxcbiAgICBEYXRhRHJpdmVuUHJvcGVydHksXG4gICAgQ3Jvc3NGYWRlZERhdGFEcml2ZW5Qcm9wZXJ0eSxcbiAgICBDcm9zc0ZhZGVkUHJvcGVydHksXG4gICAgQ29sb3JSYW1wUHJvcGVydHlcbn0gZnJvbSAnLi4vcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIENvbG9yIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5cbmltcG9ydCB0eXBlIEZvcm1hdHRlZCBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvZm9ybWF0dGVkJztcblxuaW1wb3J0IHR5cGUgUmVzb2x2ZWRJbWFnZSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvcmVzb2x2ZWRfaW1hZ2UnO1xuXG5leHBvcnQgdHlwZSBMYXlvdXRQcm9wcyA9IHt8XG4gICAgXCJsaW5lLWNhcFwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxcImJ1dHRcIiB8IFwicm91bmRcIiB8IFwic3F1YXJlXCI+LFxuICAgIFwibGluZS1qb2luXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxcImJldmVsXCIgfCBcInJvdW5kXCIgfCBcIm1pdGVyXCI+LFxuICAgIFwibGluZS1taXRlci1saW1pdFwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwibGluZS1yb3VuZC1saW1pdFwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwibGluZS1zb3J0LWtleVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbnx9O1xuXG5jb25zdCBsYXlvdXQ6IFByb3BlcnRpZXM8TGF5b3V0UHJvcHM+ID0gbmV3IFByb3BlcnRpZXMoe1xuICAgIFwibGluZS1jYXBcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9saW5lXCJdW1wibGluZS1jYXBcIl0pLFxuICAgIFwibGluZS1qb2luXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X2xpbmVcIl1bXCJsaW5lLWpvaW5cIl0pLFxuICAgIFwibGluZS1taXRlci1saW1pdFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X2xpbmVcIl1bXCJsaW5lLW1pdGVyLWxpbWl0XCJdKSxcbiAgICBcImxpbmUtcm91bmQtbGltaXRcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9saW5lXCJdW1wibGluZS1yb3VuZC1saW1pdFwiXSksXG4gICAgXCJsaW5lLXNvcnQta2V5XCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X2xpbmVcIl1bXCJsaW5lLXNvcnQta2V5XCJdKSxcbn0pO1xuXG5leHBvcnQgdHlwZSBQYWludFByb3BzID0ge3xcbiAgICBcImxpbmUtb3BhY2l0eVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcImxpbmUtY29sb3JcIjogRGF0YURyaXZlblByb3BlcnR5PENvbG9yPixcbiAgICBcImxpbmUtdHJhbnNsYXRlXCI6IERhdGFDb25zdGFudFByb3BlcnR5PFtudW1iZXIsIG51bWJlcl0+LFxuICAgIFwibGluZS10cmFuc2xhdGUtYW5jaG9yXCI6IERhdGFDb25zdGFudFByb3BlcnR5PFwibWFwXCIgfCBcInZpZXdwb3J0XCI+LFxuICAgIFwibGluZS13aWR0aFwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcImxpbmUtZ2FwLXdpZHRoXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwibGluZS1vZmZzZXRcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJsaW5lLWJsdXJcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJsaW5lLWRhc2hhcnJheVwiOiBDcm9zc0ZhZGVkUHJvcGVydHk8QXJyYXk8bnVtYmVyPj4sXG4gICAgXCJsaW5lLXBhdHRlcm5cIjogQ3Jvc3NGYWRlZERhdGFEcml2ZW5Qcm9wZXJ0eTxSZXNvbHZlZEltYWdlPixcbiAgICBcImxpbmUtZ3JhZGllbnRcIjogQ29sb3JSYW1wUHJvcGVydHksXG58fTtcblxuY29uc3QgcGFpbnQ6IFByb3BlcnRpZXM8UGFpbnRQcm9wcz4gPSBuZXcgUHJvcGVydGllcyh7XG4gICAgXCJsaW5lLW9wYWNpdHlcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9saW5lXCJdW1wibGluZS1vcGFjaXR5XCJdKSxcbiAgICBcImxpbmUtY29sb3JcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9saW5lXCJdW1wibGluZS1jb2xvclwiXSksXG4gICAgXCJsaW5lLXRyYW5zbGF0ZVwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfbGluZVwiXVtcImxpbmUtdHJhbnNsYXRlXCJdKSxcbiAgICBcImxpbmUtdHJhbnNsYXRlLWFuY2hvclwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfbGluZVwiXVtcImxpbmUtdHJhbnNsYXRlLWFuY2hvclwiXSksXG4gICAgXCJsaW5lLXdpZHRoXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfbGluZVwiXVtcImxpbmUtd2lkdGhcIl0pLFxuICAgIFwibGluZS1nYXAtd2lkdGhcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9saW5lXCJdW1wibGluZS1nYXAtd2lkdGhcIl0pLFxuICAgIFwibGluZS1vZmZzZXRcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9saW5lXCJdW1wibGluZS1vZmZzZXRcIl0pLFxuICAgIFwibGluZS1ibHVyXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfbGluZVwiXVtcImxpbmUtYmx1clwiXSksXG4gICAgXCJsaW5lLWRhc2hhcnJheVwiOiBuZXcgQ3Jvc3NGYWRlZFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2xpbmVcIl1bXCJsaW5lLWRhc2hhcnJheVwiXSksXG4gICAgXCJsaW5lLXBhdHRlcm5cIjogbmV3IENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfbGluZVwiXVtcImxpbmUtcGF0dGVyblwiXSksXG4gICAgXCJsaW5lLWdyYWRpZW50XCI6IG5ldyBDb2xvclJhbXBQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9saW5lXCJdW1wibGluZS1ncmFkaWVudFwiXSksXG59KTtcblxuLy8gTm90ZTogd2l0aG91dCBhZGRpbmcgdGhlIGV4cGxpY2l0IHR5cGUgYW5ub3RhdGlvbiwgRmxvdyBpbmZlcnMgd2Vha2VyIHR5cGVzXG4vLyBmb3IgdGhlc2Ugb2JqZWN0cyBmcm9tIHRoZWlyIHVzZSBpbiB0aGUgY29uc3RydWN0b3IgdG8gU3R5bGVMYXllciwgYXNcbi8vIHtsYXlvdXQ/OiBQcm9wZXJ0aWVzPC4uLj4sIHBhaW50OiBQcm9wZXJ0aWVzPC4uLj59XG5leHBvcnQgZGVmYXVsdCAoeyBwYWludCwgbGF5b3V0IH06ICRFeGFjdDx7XG4gIHBhaW50OiBQcm9wZXJ0aWVzPFBhaW50UHJvcHM+LCBsYXlvdXQ6IFByb3BlcnRpZXM8TGF5b3V0UHJvcHM+XG59Pik7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbmltcG9ydCBTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlX2xheWVyJztcbmltcG9ydCBMaW5lQnVja2V0IGZyb20gJy4uLy4uL2RhdGEvYnVja2V0L2xpbmVfYnVja2V0JztcbmltcG9ydCB7UkdCQUltYWdlfSBmcm9tICcuLi8uLi91dGlsL2ltYWdlJztcbmltcG9ydCB7cG9seWdvbkludGVyc2VjdHNCdWZmZXJlZE11bHRpTGluZX0gZnJvbSAnLi4vLi4vdXRpbC9pbnRlcnNlY3Rpb25fdGVzdHMnO1xuaW1wb3J0IHtnZXRNYXhpbXVtUGFpbnRWYWx1ZSwgdHJhbnNsYXRlRGlzdGFuY2UsIHRyYW5zbGF0ZX0gZnJvbSAnLi4vcXVlcnlfdXRpbHMnO1xuaW1wb3J0IHByb3BlcnRpZXMgZnJvbSAnLi9saW5lX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuaW1wb3J0IHtleHRlbmR9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgRXZhbHVhdGlvblBhcmFtZXRlcnMgZnJvbSAnLi4vZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcbmltcG9ydCByZW5kZXJDb2xvclJhbXAgZnJvbSAnLi4vLi4vdXRpbC9jb2xvcl9yYW1wJztcbmltcG9ydCB7VHJhbnNpdGlvbmFibGUsIFRyYW5zaXRpb25pbmcsIExheW91dCwgUG9zc2libHlFdmFsdWF0ZWQsIERhdGFEcml2ZW5Qcm9wZXJ0eX0gZnJvbSAnLi4vcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIHtGZWF0dXJlU3RhdGV9IGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSB7QnVja2V0LCBCdWNrZXRQYXJhbWV0ZXJzfSBmcm9tICcuLi8uLi9kYXRhL2J1Y2tldCc7XG5pbXBvcnQgdHlwZSB7TGF5b3V0UHJvcHMsIFBhaW50UHJvcHN9IGZyb20gJy4vbGluZV9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzJztcbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi8uLi9nZW8vdHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIFRleHR1cmUgZnJvbSAnLi4vLi4vcmVuZGVyL3RleHR1cmUnO1xuaW1wb3J0IHR5cGUge0xheWVyU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmNsYXNzIExpbmVGbG9vcndpZHRoUHJvcGVydHkgZXh0ZW5kcyBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPiB7XG4gICAgdXNlSW50ZWdlclpvb206IHRydWU7XG5cbiAgICBwb3NzaWJseUV2YWx1YXRlKHZhbHVlLCBwYXJhbWV0ZXJzKSB7XG4gICAgICAgIHBhcmFtZXRlcnMgPSBuZXcgRXZhbHVhdGlvblBhcmFtZXRlcnMoTWF0aC5mbG9vcihwYXJhbWV0ZXJzLnpvb20pLCB7XG4gICAgICAgICAgICBub3c6IHBhcmFtZXRlcnMubm93LFxuICAgICAgICAgICAgZmFkZUR1cmF0aW9uOiBwYXJhbWV0ZXJzLmZhZGVEdXJhdGlvbixcbiAgICAgICAgICAgIHpvb21IaXN0b3J5OiBwYXJhbWV0ZXJzLnpvb21IaXN0b3J5LFxuICAgICAgICAgICAgdHJhbnNpdGlvbjogcGFyYW1ldGVycy50cmFuc2l0aW9uXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc3VwZXIucG9zc2libHlFdmFsdWF0ZSh2YWx1ZSwgcGFyYW1ldGVycyk7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUodmFsdWUsIGdsb2JhbHMsIGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSkge1xuICAgICAgICBnbG9iYWxzID0gZXh0ZW5kKHt9LCBnbG9iYWxzLCB7em9vbTogTWF0aC5mbG9vcihnbG9iYWxzLnpvb20pfSk7XG4gICAgICAgIHJldHVybiBzdXBlci5ldmFsdWF0ZSh2YWx1ZSwgZ2xvYmFscywgZmVhdHVyZSwgZmVhdHVyZVN0YXRlKTtcbiAgICB9XG59XG5cbmNvbnN0IGxpbmVGbG9vcndpZHRoUHJvcGVydHkgPSBuZXcgTGluZUZsb29yd2lkdGhQcm9wZXJ0eShwcm9wZXJ0aWVzLnBhaW50LnByb3BlcnRpZXNbJ2xpbmUtd2lkdGgnXS5zcGVjaWZpY2F0aW9uKTtcbmxpbmVGbG9vcndpZHRoUHJvcGVydHkudXNlSW50ZWdlclpvb20gPSB0cnVlO1xuXG5jbGFzcyBMaW5lU3R5bGVMYXllciBleHRlbmRzIFN0eWxlTGF5ZXIge1xuICAgIF91bmV2YWx1YXRlZExheW91dDogTGF5b3V0PExheW91dFByb3BzPjtcbiAgICBsYXlvdXQ6IFBvc3NpYmx5RXZhbHVhdGVkPExheW91dFByb3BzPjtcblxuICAgIGdyYWRpZW50OiA/UkdCQUltYWdlO1xuICAgIGdyYWRpZW50VGV4dHVyZTogP1RleHR1cmU7XG5cbiAgICBfdHJhbnNpdGlvbmFibGVQYWludDogVHJhbnNpdGlvbmFibGU8UGFpbnRQcm9wcz47XG4gICAgX3RyYW5zaXRpb25pbmdQYWludDogVHJhbnNpdGlvbmluZzxQYWludFByb3BzPjtcbiAgICBwYWludDogUG9zc2libHlFdmFsdWF0ZWQ8UGFpbnRQcm9wcz47XG5cbiAgICBjb25zdHJ1Y3RvcihsYXllcjogTGF5ZXJTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHN1cGVyKGxheWVyLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICBfaGFuZGxlU3BlY2lhbFBhaW50UHJvcGVydHlVcGRhdGUobmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGlmIChuYW1lID09PSAnbGluZS1ncmFkaWVudCcpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUdyYWRpZW50KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfdXBkYXRlR3JhZGllbnQoKSB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSB0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50Ll92YWx1ZXNbJ2xpbmUtZ3JhZGllbnQnXS52YWx1ZS5leHByZXNzaW9uO1xuICAgICAgICB0aGlzLmdyYWRpZW50ID0gcmVuZGVyQ29sb3JSYW1wKGV4cHJlc3Npb24sICdsaW5lUHJvZ3Jlc3MnKTtcbiAgICAgICAgdGhpcy5ncmFkaWVudFRleHR1cmUgPSBudWxsO1xuICAgIH1cblxuICAgIHJlY2FsY3VsYXRlKHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzLCBhdmFpbGFibGVJbWFnZXM6IEFycmF5PHN0cmluZz4pIHtcbiAgICAgICAgc3VwZXIucmVjYWxjdWxhdGUocGFyYW1ldGVycywgYXZhaWxhYmxlSW1hZ2VzKTtcblxuICAgICAgICAodGhpcy5wYWludC5fdmFsdWVzOiBhbnkpWydsaW5lLWZsb29yd2lkdGgnXSA9XG4gICAgICAgICAgICBsaW5lRmxvb3J3aWR0aFByb3BlcnR5LnBvc3NpYmx5RXZhbHVhdGUodGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50Ll92YWx1ZXNbJ2xpbmUtd2lkdGgnXS52YWx1ZSwgcGFyYW1ldGVycyk7XG4gICAgfVxuXG4gICAgY3JlYXRlQnVja2V0KHBhcmFtZXRlcnM6IEJ1Y2tldFBhcmFtZXRlcnM8Kj4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMaW5lQnVja2V0KHBhcmFtZXRlcnMpO1xuICAgIH1cblxuICAgIHF1ZXJ5UmFkaXVzKGJ1Y2tldDogQnVja2V0KTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgbGluZUJ1Y2tldDogTGluZUJ1Y2tldCA9IChidWNrZXQ6IGFueSk7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gZ2V0TGluZVdpZHRoKFxuICAgICAgICAgICAgZ2V0TWF4aW11bVBhaW50VmFsdWUoJ2xpbmUtd2lkdGgnLCB0aGlzLCBsaW5lQnVja2V0KSxcbiAgICAgICAgICAgIGdldE1heGltdW1QYWludFZhbHVlKCdsaW5lLWdhcC13aWR0aCcsIHRoaXMsIGxpbmVCdWNrZXQpKTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gZ2V0TWF4aW11bVBhaW50VmFsdWUoJ2xpbmUtb2Zmc2V0JywgdGhpcywgbGluZUJ1Y2tldCk7XG4gICAgICAgIHJldHVybiB3aWR0aCAvIDIgKyBNYXRoLmFicyhvZmZzZXQpICsgdHJhbnNsYXRlRGlzdGFuY2UodGhpcy5wYWludC5nZXQoJ2xpbmUtdHJhbnNsYXRlJykpO1xuICAgIH1cblxuICAgIHF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmUocXVlcnlHZW9tZXRyeTogQXJyYXk8UG9pbnQ+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZTogVmVjdG9yVGlsZUZlYXR1cmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlU3RhdGU6IEZlYXR1cmVTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5OiBBcnJheTxBcnJheTxQb2ludD4+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgem9vbTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBUcmFuc2Zvcm0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbHNUb1RpbGVVbml0czogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZWRQb2x5Z29uID0gdHJhbnNsYXRlKHF1ZXJ5R2VvbWV0cnksXG4gICAgICAgICAgICB0aGlzLnBhaW50LmdldCgnbGluZS10cmFuc2xhdGUnKSxcbiAgICAgICAgICAgIHRoaXMucGFpbnQuZ2V0KCdsaW5lLXRyYW5zbGF0ZS1hbmNob3InKSxcbiAgICAgICAgICAgIHRyYW5zZm9ybS5hbmdsZSwgcGl4ZWxzVG9UaWxlVW5pdHMpO1xuICAgICAgICBjb25zdCBoYWxmV2lkdGggPSBwaXhlbHNUb1RpbGVVbml0cyAvIDIgKiBnZXRMaW5lV2lkdGgoXG4gICAgICAgICAgICB0aGlzLnBhaW50LmdldCgnbGluZS13aWR0aCcpLmV2YWx1YXRlKGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSksXG4gICAgICAgICAgICB0aGlzLnBhaW50LmdldCgnbGluZS1nYXAtd2lkdGgnKS5ldmFsdWF0ZShmZWF0dXJlLCBmZWF0dXJlU3RhdGUpKTtcbiAgICAgICAgY29uc3QgbGluZU9mZnNldCA9IHRoaXMucGFpbnQuZ2V0KCdsaW5lLW9mZnNldCcpLmV2YWx1YXRlKGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSk7XG4gICAgICAgIGlmIChsaW5lT2Zmc2V0KSB7XG4gICAgICAgICAgICBnZW9tZXRyeSA9IG9mZnNldExpbmUoZ2VvbWV0cnksIGxpbmVPZmZzZXQgKiBwaXhlbHNUb1RpbGVVbml0cyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcG9seWdvbkludGVyc2VjdHNCdWZmZXJlZE11bHRpTGluZSh0cmFuc2xhdGVkUG9seWdvbiwgZ2VvbWV0cnksIGhhbGZXaWR0aCk7XG4gICAgfVxuXG4gICAgaXNUaWxlQ2xpcHBlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMaW5lU3R5bGVMYXllcjtcblxuZnVuY3Rpb24gZ2V0TGluZVdpZHRoKGxpbmVXaWR0aCwgbGluZUdhcFdpZHRoKSB7XG4gICAgaWYgKGxpbmVHYXBXaWR0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIGxpbmVHYXBXaWR0aCArIDIgKiBsaW5lV2lkdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGxpbmVXaWR0aDtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG9mZnNldExpbmUocmluZ3MsIG9mZnNldCkge1xuICAgIGNvbnN0IG5ld1JpbmdzID0gW107XG4gICAgY29uc3QgemVybyA9IG5ldyBQb2ludCgwLCAwKTtcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IHJpbmdzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIGNvbnN0IHJpbmcgPSByaW5nc1trXTtcbiAgICAgICAgY29uc3QgbmV3UmluZyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSByaW5nW2kgLSAxXTtcbiAgICAgICAgICAgIGNvbnN0IGIgPSByaW5nW2ldO1xuICAgICAgICAgICAgY29uc3QgYyA9IHJpbmdbaSArIDFdO1xuICAgICAgICAgICAgY29uc3QgYVRvQiA9IGkgPT09IDAgPyB6ZXJvIDogYi5zdWIoYSkuX3VuaXQoKS5fcGVycCgpO1xuICAgICAgICAgICAgY29uc3QgYlRvQyA9IGkgPT09IHJpbmcubGVuZ3RoIC0gMSA/IHplcm8gOiBjLnN1YihiKS5fdW5pdCgpLl9wZXJwKCk7XG4gICAgICAgICAgICBjb25zdCBleHRydWRlID0gYVRvQi5fYWRkKGJUb0MpLl91bml0KCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNvc0hhbGZBbmdsZSA9IGV4dHJ1ZGUueCAqIGJUb0MueCArIGV4dHJ1ZGUueSAqIGJUb0MueTtcbiAgICAgICAgICAgIGV4dHJ1ZGUuX211bHQoMSAvIGNvc0hhbGZBbmdsZSk7XG5cbiAgICAgICAgICAgIG5ld1JpbmcucHVzaChleHRydWRlLl9tdWx0KG9mZnNldCkuX2FkZChiKSk7XG4gICAgICAgIH1cbiAgICAgICAgbmV3UmluZ3MucHVzaChuZXdSaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld1JpbmdzO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtjcmVhdGVMYXlvdXR9IGZyb20gJy4uLy4uL3V0aWwvc3RydWN0X2FycmF5JztcblxuZXhwb3J0IGNvbnN0IHN5bWJvbExheW91dEF0dHJpYnV0ZXMgPSBjcmVhdGVMYXlvdXQoW1xuICAgIHtuYW1lOiAnYV9wb3Nfb2Zmc2V0JywgIGNvbXBvbmVudHM6IDQsIHR5cGU6ICdJbnQxNid9LFxuICAgIHtuYW1lOiAnYV9kYXRhJywgICAgICAgIGNvbXBvbmVudHM6IDQsIHR5cGU6ICdVaW50MTYnfSxcbiAgICB7bmFtZTogJ2FfcGl4ZWxvZmZzZXQnLCAgICAgICAgY29tcG9uZW50czogNCwgdHlwZTogJ0ludDE2J31cbl0sIDQpO1xuXG5leHBvcnQgY29uc3QgZHluYW1pY0xheW91dEF0dHJpYnV0ZXMgPSBjcmVhdGVMYXlvdXQoW1xuICAgIHtuYW1lOiAnYV9wcm9qZWN0ZWRfcG9zJywgY29tcG9uZW50czogMywgdHlwZTogJ0Zsb2F0MzInfVxuXSwgNCk7XG5cbmV4cG9ydCBjb25zdCBwbGFjZW1lbnRPcGFjaXR5QXR0cmlidXRlcyA9IGNyZWF0ZUxheW91dChbXG4gICAge25hbWU6ICdhX2ZhZGVfb3BhY2l0eScsIGNvbXBvbmVudHM6IDEsIHR5cGU6ICdVaW50MzInfVxuXSwgNCk7XG5cbmV4cG9ydCBjb25zdCBjb2xsaXNpb25WZXJ0ZXhBdHRyaWJ1dGVzID0gY3JlYXRlTGF5b3V0KFtcbiAgICB7bmFtZTogJ2FfcGxhY2VkJywgY29tcG9uZW50czogMiwgdHlwZTogJ1VpbnQ4J30sXG4gICAge25hbWU6ICdhX3NoaWZ0JywgY29tcG9uZW50czogMiwgdHlwZTogJ0Zsb2F0MzInfVxuXSk7XG5cbmV4cG9ydCBjb25zdCBjb2xsaXNpb25Cb3ggPSBjcmVhdGVMYXlvdXQoW1xuICAgIC8vIHRoZSBib3ggaXMgY2VudGVyZWQgYXJvdW5kIHRoZSBhbmNob3IgcG9pbnRcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ2FuY2hvclBvaW50WCd9LFxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAnYW5jaG9yUG9pbnRZJ30sXG5cbiAgICAvLyBkaXN0YW5jZXMgdG8gdGhlIGVkZ2VzIGZyb20gdGhlIGFuY2hvclxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAneDEnfSxcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ3kxJ30sXG4gICAge3R5cGU6ICdJbnQxNicsIG5hbWU6ICd4Mid9LFxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAneTInfSxcblxuICAgIC8vIHRoZSBpbmRleCBvZiB0aGUgZmVhdHVyZSBpbiB0aGUgb3JpZ2luYWwgdmVjdG9ydGlsZVxuICAgIHt0eXBlOiAnVWludDMyJywgbmFtZTogJ2ZlYXR1cmVJbmRleCd9LFxuICAgIC8vIHRoZSBzb3VyY2UgbGF5ZXIgdGhlIGZlYXR1cmUgYXBwZWFycyBpblxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ3NvdXJjZUxheWVySW5kZXgnfSxcbiAgICAvLyB0aGUgYnVja2V0IHRoZSBmZWF0dXJlIGFwcGVhcnMgaW5cbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICdidWNrZXRJbmRleCd9LFxuXSk7XG5cbmV4cG9ydCBjb25zdCBjb2xsaXNpb25Cb3hMYXlvdXQgPSBjcmVhdGVMYXlvdXQoWyAvLyB1c2VkIHRvIHJlbmRlciBjb2xsaXNpb24gYm94ZXMgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlc1xuICAgIHtuYW1lOiAnYV9wb3MnLCAgICAgICAgY29tcG9uZW50czogMiwgdHlwZTogJ0ludDE2J30sXG4gICAge25hbWU6ICdhX2FuY2hvcl9wb3MnLCBjb21wb25lbnRzOiAyLCB0eXBlOiAnSW50MTYnfSxcbiAgICB7bmFtZTogJ2FfZXh0cnVkZScsICAgIGNvbXBvbmVudHM6IDIsIHR5cGU6ICdJbnQxNid9XG5dLCA0KTtcblxuZXhwb3J0IGNvbnN0IGNvbGxpc2lvbkNpcmNsZUxheW91dCA9IGNyZWF0ZUxheW91dChbIC8vIHVzZWQgdG8gcmVuZGVyIGNvbGxpc2lvbiBjaXJjbGVzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXNcbiAgICB7bmFtZTogJ2FfcG9zJywgICAgICAgIGNvbXBvbmVudHM6IDIsIHR5cGU6ICdGbG9hdDMyJ30sXG4gICAge25hbWU6ICdhX3JhZGl1cycsICAgICBjb21wb25lbnRzOiAxLCB0eXBlOiAnRmxvYXQzMid9LFxuICAgIHtuYW1lOiAnYV9mbGFncycsICAgICAgY29tcG9uZW50czogMiwgdHlwZTogJ0ludDE2J31cbl0sIDQpO1xuXG5leHBvcnQgY29uc3QgcXVhZFRyaWFuZ2xlID0gY3JlYXRlTGF5b3V0KFtcbiAgICB7bmFtZTogJ3RyaWFuZ2xlJywgY29tcG9uZW50czogMywgdHlwZTogJ1VpbnQxNid9LFxuXSk7XG5cbmV4cG9ydCBjb25zdCBwbGFjZW1lbnQgPSBjcmVhdGVMYXlvdXQoW1xuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAnYW5jaG9yWCd9LFxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAnYW5jaG9yWSd9LFxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ2dseXBoU3RhcnRJbmRleCd9LFxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ251bUdseXBocyd9LFxuICAgIHt0eXBlOiAnVWludDMyJywgbmFtZTogJ3ZlcnRleFN0YXJ0SW5kZXgnfSxcbiAgICB7dHlwZTogJ1VpbnQzMicsIG5hbWU6ICdsaW5lU3RhcnRJbmRleCd9LFxuICAgIHt0eXBlOiAnVWludDMyJywgbmFtZTogJ2xpbmVMZW5ndGgnfSxcbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICdzZWdtZW50J30sXG4gICAge3R5cGU6ICdVaW50MTYnLCBuYW1lOiAnbG93ZXJTaXplJ30sXG4gICAge3R5cGU6ICdVaW50MTYnLCBuYW1lOiAndXBwZXJTaXplJ30sXG4gICAge3R5cGU6ICdGbG9hdDMyJywgbmFtZTogJ2xpbmVPZmZzZXRYJ30sXG4gICAge3R5cGU6ICdGbG9hdDMyJywgbmFtZTogJ2xpbmVPZmZzZXRZJ30sXG4gICAge3R5cGU6ICdVaW50OCcsIG5hbWU6ICd3cml0aW5nTW9kZSd9LFxuICAgIHt0eXBlOiAnVWludDgnLCBuYW1lOiAncGxhY2VkT3JpZW50YXRpb24nfSxcbiAgICB7dHlwZTogJ1VpbnQ4JywgbmFtZTogJ2hpZGRlbid9LFxuICAgIHt0eXBlOiAnVWludDMyJywgbmFtZTogJ2Nyb3NzVGlsZUlEJ30sXG4gICAge3R5cGU6ICdJbnQxNicsIG5hbWU6ICdhc3NvY2lhdGVkSWNvbkluZGV4J31cbl0pO1xuXG5leHBvcnQgY29uc3Qgc3ltYm9sSW5zdGFuY2UgPSBjcmVhdGVMYXlvdXQoW1xuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAnYW5jaG9yWCd9LFxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAnYW5jaG9yWSd9LFxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAncmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgnfSxcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ2NlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleCd9LFxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAnbGVmdEp1c3RpZmllZFRleHRTeW1ib2xJbmRleCd9LFxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAndmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXgnfSxcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ3BsYWNlZEljb25TeW1ib2xJbmRleCd9LFxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAndmVydGljYWxQbGFjZWRJY29uU3ltYm9sSW5kZXgnfSxcbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICdrZXknfSxcbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICd0ZXh0Qm94U3RhcnRJbmRleCd9LFxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ3RleHRCb3hFbmRJbmRleCd9LFxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ3ZlcnRpY2FsVGV4dEJveFN0YXJ0SW5kZXgnfSxcbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICd2ZXJ0aWNhbFRleHRCb3hFbmRJbmRleCd9LFxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ2ljb25Cb3hTdGFydEluZGV4J30sXG4gICAge3R5cGU6ICdVaW50MTYnLCBuYW1lOiAnaWNvbkJveEVuZEluZGV4J30sXG4gICAge3R5cGU6ICdVaW50MTYnLCBuYW1lOiAndmVydGljYWxJY29uQm94U3RhcnRJbmRleCd9LFxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ3ZlcnRpY2FsSWNvbkJveEVuZEluZGV4J30sXG4gICAge3R5cGU6ICdVaW50MTYnLCBuYW1lOiAnZmVhdHVyZUluZGV4J30sXG4gICAge3R5cGU6ICdVaW50MTYnLCBuYW1lOiAnbnVtSG9yaXpvbnRhbEdseXBoVmVydGljZXMnfSxcbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICdudW1WZXJ0aWNhbEdseXBoVmVydGljZXMnfSxcbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICdudW1JY29uVmVydGljZXMnfSxcbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICdudW1WZXJ0aWNhbEljb25WZXJ0aWNlcyd9LFxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ3VzZVJ1bnRpbWVDb2xsaXNpb25DaXJjbGVzJ30sXG4gICAge3R5cGU6ICdVaW50MzInLCBuYW1lOiAnY3Jvc3NUaWxlSUQnfSxcbiAgICB7dHlwZTogJ0Zsb2F0MzInLCBuYW1lOiAndGV4dEJveFNjYWxlJ30sXG4gICAge3R5cGU6ICdGbG9hdDMyJywgY29tcG9uZW50czogMiwgbmFtZTogJ3RleHRPZmZzZXQnfSxcbiAgICB7dHlwZTogJ0Zsb2F0MzInLCBuYW1lOiAnY29sbGlzaW9uQ2lyY2xlRGlhbWV0ZXInfSxcbl0pO1xuXG5leHBvcnQgY29uc3QgZ2x5cGhPZmZzZXQgPSBjcmVhdGVMYXlvdXQoW1xuICAgIHt0eXBlOiAnRmxvYXQzMicsIG5hbWU6ICdvZmZzZXRYJ31cbl0pO1xuXG5leHBvcnQgY29uc3QgbGluZVZlcnRleCA9IGNyZWF0ZUxheW91dChbXG4gICAge3R5cGU6ICdJbnQxNicsIG5hbWU6ICd4J30sXG4gICAge3R5cGU6ICdJbnQxNicsIG5hbWU6ICd5J30sXG4gICAge3R5cGU6ICdJbnQxNicsIG5hbWU6ICd0aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvcid9XG5dKTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7cGx1Z2luIGFzIHJ0bFRleHRQbHVnaW59IGZyb20gJy4uL3NvdXJjZS9ydGxfdGV4dF9wbHVnaW4nO1xuXG5pbXBvcnQgdHlwZSBTeW1ib2xTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyL3N5bWJvbF9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSB7RmVhdHVyZX0gZnJvbSAnLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uJztcbmltcG9ydCBGb3JtYXR0ZWQgZnJvbSAnLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL2Zvcm1hdHRlZCc7XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVRleHQodGV4dDogc3RyaW5nLCBsYXllcjogU3ltYm9sU3R5bGVMYXllciwgZmVhdHVyZTogRmVhdHVyZSkge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IGxheWVyLmxheW91dC5nZXQoJ3RleHQtdHJhbnNmb3JtJykuZXZhbHVhdGUoZmVhdHVyZSwge30pO1xuICAgIGlmICh0cmFuc2Zvcm0gPT09ICd1cHBlcmNhc2UnKSB7XG4gICAgICAgIHRleHQgPSB0ZXh0LnRvTG9jYWxlVXBwZXJDYXNlKCk7XG4gICAgfSBlbHNlIGlmICh0cmFuc2Zvcm0gPT09ICdsb3dlcmNhc2UnKSB7XG4gICAgICAgIHRleHQgPSB0ZXh0LnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgaWYgKHJ0bFRleHRQbHVnaW4uYXBwbHlBcmFiaWNTaGFwaW5nKSB7XG4gICAgICAgIHRleHQgPSBydGxUZXh0UGx1Z2luLmFwcGx5QXJhYmljU2hhcGluZyh0ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odGV4dDogRm9ybWF0dGVkLCBsYXllcjogU3ltYm9sU3R5bGVMYXllciwgZmVhdHVyZTogRmVhdHVyZSk6IEZvcm1hdHRlZCB7XG4gICAgdGV4dC5zZWN0aW9ucy5mb3JFYWNoKHNlY3Rpb24gPT4ge1xuICAgICAgICBzZWN0aW9uLnRleHQgPSB0cmFuc2Zvcm1UZXh0KHNlY3Rpb24udGV4dCwgbGF5ZXIsIGZlYXR1cmUpO1xuICAgIH0pO1xuICAgIHJldHVybiB0ZXh0O1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHR5cGUge1N5bWJvbEZlYXR1cmV9IGZyb20gJy4uL2RhdGEvYnVja2V0L3N5bWJvbF9idWNrZXQnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoZmVhdHVyZXM6IEFycmF5PFN5bWJvbEZlYXR1cmU+KTogQXJyYXk8U3ltYm9sRmVhdHVyZT4ge1xuICAgIGNvbnN0IGxlZnRJbmRleDoge1tfOiBzdHJpbmddOiBudW1iZXJ9ID0ge307XG4gICAgY29uc3QgcmlnaHRJbmRleDoge1tfOiBzdHJpbmddOiBudW1iZXJ9ID0ge307XG4gICAgY29uc3QgbWVyZ2VkRmVhdHVyZXMgPSBbXTtcbiAgICBsZXQgbWVyZ2VkSW5kZXggPSAwO1xuXG4gICAgZnVuY3Rpb24gYWRkKGspIHtcbiAgICAgICAgbWVyZ2VkRmVhdHVyZXMucHVzaChmZWF0dXJlc1trXSk7XG4gICAgICAgIG1lcmdlZEluZGV4Kys7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWVyZ2VGcm9tUmlnaHQobGVmdEtleTogc3RyaW5nLCByaWdodEtleTogc3RyaW5nLCBnZW9tKSB7XG4gICAgICAgIGNvbnN0IGkgPSByaWdodEluZGV4W2xlZnRLZXldO1xuICAgICAgICBkZWxldGUgcmlnaHRJbmRleFtsZWZ0S2V5XTtcbiAgICAgICAgcmlnaHRJbmRleFtyaWdodEtleV0gPSBpO1xuXG4gICAgICAgIG1lcmdlZEZlYXR1cmVzW2ldLmdlb21ldHJ5WzBdLnBvcCgpO1xuICAgICAgICBtZXJnZWRGZWF0dXJlc1tpXS5nZW9tZXRyeVswXSA9IG1lcmdlZEZlYXR1cmVzW2ldLmdlb21ldHJ5WzBdLmNvbmNhdChnZW9tWzBdKTtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWVyZ2VGcm9tTGVmdChsZWZ0S2V5OiBzdHJpbmcsIHJpZ2h0S2V5OiBzdHJpbmcsIGdlb20pIHtcbiAgICAgICAgY29uc3QgaSA9IGxlZnRJbmRleFtyaWdodEtleV07XG4gICAgICAgIGRlbGV0ZSBsZWZ0SW5kZXhbcmlnaHRLZXldO1xuICAgICAgICBsZWZ0SW5kZXhbbGVmdEtleV0gPSBpO1xuXG4gICAgICAgIG1lcmdlZEZlYXR1cmVzW2ldLmdlb21ldHJ5WzBdLnNoaWZ0KCk7XG4gICAgICAgIG1lcmdlZEZlYXR1cmVzW2ldLmdlb21ldHJ5WzBdID0gZ2VvbVswXS5jb25jYXQobWVyZ2VkRmVhdHVyZXNbaV0uZ2VvbWV0cnlbMF0pO1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRLZXkodGV4dCwgZ2VvbSwgb25SaWdodCkge1xuICAgICAgICBjb25zdCBwb2ludCA9IG9uUmlnaHQgPyBnZW9tWzBdW2dlb21bMF0ubGVuZ3RoIC0gMV0gOiBnZW9tWzBdWzBdO1xuICAgICAgICByZXR1cm4gYCR7dGV4dH06JHtwb2ludC54fToke3BvaW50Lnl9YDtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBrID0gMDsgayA8IGZlYXR1cmVzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlc1trXTtcbiAgICAgICAgY29uc3QgZ2VvbSA9IGZlYXR1cmUuZ2VvbWV0cnk7XG4gICAgICAgIGNvbnN0IHRleHQgPSBmZWF0dXJlLnRleHQgPyBmZWF0dXJlLnRleHQudG9TdHJpbmcoKSA6IG51bGw7XG5cbiAgICAgICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgICAgICBhZGQoayk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxlZnRLZXkgPSBnZXRLZXkodGV4dCwgZ2VvbSksXG4gICAgICAgICAgICByaWdodEtleSA9IGdldEtleSh0ZXh0LCBnZW9tLCB0cnVlKTtcblxuICAgICAgICBpZiAoKGxlZnRLZXkgaW4gcmlnaHRJbmRleCkgJiYgKHJpZ2h0S2V5IGluIGxlZnRJbmRleCkgJiYgKHJpZ2h0SW5kZXhbbGVmdEtleV0gIT09IGxlZnRJbmRleFtyaWdodEtleV0pKSB7XG4gICAgICAgICAgICAvLyBmb3VuZCBsaW5lcyB3aXRoIHRoZSBzYW1lIHRleHQgYWRqYWNlbnQgdG8gYm90aCBlbmRzIG9mIHRoZSBjdXJyZW50IGxpbmUsIG1lcmdlIGFsbCB0aHJlZVxuICAgICAgICAgICAgY29uc3QgaiA9IG1lcmdlRnJvbUxlZnQobGVmdEtleSwgcmlnaHRLZXksIGdlb20pO1xuICAgICAgICAgICAgY29uc3QgaSA9IG1lcmdlRnJvbVJpZ2h0KGxlZnRLZXksIHJpZ2h0S2V5LCBtZXJnZWRGZWF0dXJlc1tqXS5nZW9tZXRyeSk7XG5cbiAgICAgICAgICAgIGRlbGV0ZSBsZWZ0SW5kZXhbbGVmdEtleV07XG4gICAgICAgICAgICBkZWxldGUgcmlnaHRJbmRleFtyaWdodEtleV07XG5cbiAgICAgICAgICAgIHJpZ2h0SW5kZXhbZ2V0S2V5KHRleHQsIG1lcmdlZEZlYXR1cmVzW2ldLmdlb21ldHJ5LCB0cnVlKV0gPSBpO1xuICAgICAgICAgICAgbWVyZ2VkRmVhdHVyZXNbal0uZ2VvbWV0cnkgPSAobnVsbDogYW55KTtcblxuICAgICAgICB9IGVsc2UgaWYgKGxlZnRLZXkgaW4gcmlnaHRJbmRleCkge1xuICAgICAgICAgICAgLy8gZm91bmQgbWVyZ2VhYmxlIGxpbmUgYWRqYWNlbnQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50IGxpbmUsIG1lcmdlXG4gICAgICAgICAgICBtZXJnZUZyb21SaWdodChsZWZ0S2V5LCByaWdodEtleSwgZ2VvbSk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChyaWdodEtleSBpbiBsZWZ0SW5kZXgpIHtcbiAgICAgICAgICAgIC8vIGZvdW5kIG1lcmdlYWJsZSBsaW5lIGFkamFjZW50IHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgbGluZSwgbWVyZ2VcbiAgICAgICAgICAgIG1lcmdlRnJvbUxlZnQobGVmdEtleSwgcmlnaHRLZXksIGdlb20pO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBubyBhZGphY2VudCBsaW5lcywgYWRkIGFzIGEgbmV3IGl0ZW1cbiAgICAgICAgICAgIGFkZChrKTtcbiAgICAgICAgICAgIGxlZnRJbmRleFtsZWZ0S2V5XSA9IG1lcmdlZEluZGV4IC0gMTtcbiAgICAgICAgICAgIHJpZ2h0SW5kZXhbcmlnaHRLZXldID0gbWVyZ2VkSW5kZXggLSAxO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlZEZlYXR1cmVzLmZpbHRlcigoZikgPT4gZi5nZW9tZXRyeSk7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge1xuICAgIGNoYXJIYXNSb3RhdGVkVmVydGljYWxPcmllbnRhdGlvbixcbn0gZnJvbSAnLi9zY3JpcHRfZGV0ZWN0aW9uJztcblxuZXhwb3J0IGNvbnN0IHZlcnRpY2FsaXplZENoYXJhY3Rlck1hcCA9IHtcbiAgICAnISc6ICfDr8K4wpUnLFxuICAgICcjJzogJ8OvwrzCgycsXG4gICAgJyQnOiAnw6/CvMKEJyxcbiAgICAnJSc6ICfDr8K8woUnLFxuICAgICcmJzogJ8OvwrzChicsXG4gICAgJygnOiAnw6/CuMK1JyxcbiAgICAnKSc6ICfDr8K4wrYnLFxuICAgICcqJzogJ8OvwrzCiicsXG4gICAgJysnOiAnw6/CvMKLJyxcbiAgICAnLCc6ICfDr8K4wpAnLFxuICAgICctJzogJ8OvwrjCsicsXG4gICAgJy4nOiAnw6PCg8K7JyxcbiAgICAnLyc6ICfDr8K8wo8nLFxuICAgICc6JzogJ8OvwrjCkycsXG4gICAgJzsnOiAnw6/CuMKUJyxcbiAgICAnPCc6ICfDr8K4wr8nLFxuICAgICc9JzogJ8OvwrzCnScsXG4gICAgJz4nOiAnw6/CucKAJyxcbiAgICAnPyc6ICfDr8K4wpYnLFxuICAgICdAJzogJ8OvwrzCoCcsXG4gICAgJ1snOiAnw6/CucKHJyxcbiAgICAnXFxcXCc6ICfDr8K8wrwnLFxuICAgICddJzogJ8OvwrnCiCcsXG4gICAgJ14nOiAnw6/CvMK+JyxcbiAgICAnXyc6ICfDr8K4wrMnLFxuICAgICdgJzogJ8Ovwr3CgCcsXG4gICAgJ3snOiAnw6/CuMK3JyxcbiAgICAnfCc6ICfDosKAwpUnLFxuICAgICd9JzogJ8OvwrjCuCcsXG4gICAgJ34nOiAnw6/CvcKeJyxcbiAgICAnw4LCoic6ICfDr8K/wqAnLFxuICAgICfDgsKjJzogJ8Ovwr/CoScsXG4gICAgJ8OCwqUnOiAnw6/Cv8KlJyxcbiAgICAnw4LCpic6ICfDr8K/wqQnLFxuICAgICfDgsKsJzogJ8Ovwr/CoicsXG4gICAgJ8OCwq8nOiAnw6/Cv8KjJyxcbiAgICAnw6LCgMKTJzogJ8OvwrjCsicsXG4gICAgJ8OiwoDClCc6ICfDr8K4wrEnLFxuICAgICfDosKAwpgnOiAnw6/CucKDJyxcbiAgICAnw6LCgMKZJzogJ8OvwrnChCcsXG4gICAgJ8OiwoDCnCc6ICfDr8K5woEnLFxuICAgICfDosKAwp0nOiAnw6/CucKCJyxcbiAgICAnw6LCgMKmJzogJ8OvwrjCmScsXG4gICAgJ8OiwoDCpyc6ICfDo8KDwrsnLFxuICAgICfDosKCwqknOiAnw6/Cv8KmJyxcbiAgICAnw6PCgMKBJzogJ8OvwrjCkScsXG4gICAgJ8OjwoDCgic6ICfDr8K4wpInLFxuICAgICfDo8KAwognOiAnw6/CuMK/JyxcbiAgICAnw6PCgMKJJzogJ8OvwrnCgCcsXG4gICAgJ8OjwoDCiic6ICfDr8K4wr0nLFxuICAgICfDo8KAwosnOiAnw6/CuMK+JyxcbiAgICAnw6PCgMKMJzogJ8OvwrnCgScsXG4gICAgJ8OjwoDCjSc6ICfDr8K5woInLFxuICAgICfDo8KAwo4nOiAnw6/CucKDJyxcbiAgICAnw6PCgMKPJzogJ8OvwrnChCcsXG4gICAgJ8OjwoDCkCc6ICfDr8K4wrsnLFxuICAgICfDo8KAwpEnOiAnw6/CuMK8JyxcbiAgICAnw6PCgMKUJzogJ8OvwrjCuScsXG4gICAgJ8OjwoDClSc6ICfDr8K4wronLFxuICAgICfDo8KAwpYnOiAnw6/CuMKXJyxcbiAgICAnw6PCgMKXJzogJ8OvwrjCmCcsXG4gICAgJ8OvwrzCgSc6ICfDr8K4wpUnLFxuICAgICfDr8K8wognOiAnw6/CuMK1JyxcbiAgICAnw6/CvMKJJzogJ8OvwrjCticsXG4gICAgJ8OvwrzCjCc6ICfDr8K4wpAnLFxuICAgICfDr8K8wo0nOiAnw6/CuMKyJyxcbiAgICAnw6/CvMKOJzogJ8OjwoPCuycsXG4gICAgJ8OvwrzCmic6ICfDr8K4wpMnLFxuICAgICfDr8K8wpsnOiAnw6/CuMKUJyxcbiAgICAnw6/CvMKcJzogJ8OvwrjCvycsXG4gICAgJ8OvwrzCnic6ICfDr8K5woAnLFxuICAgICfDr8K8wp8nOiAnw6/CuMKWJyxcbiAgICAnw6/CvMK7JzogJ8OvwrnChycsXG4gICAgJ8OvwrzCvSc6ICfDr8K5wognLFxuICAgICfDr8K8wr8nOiAnw6/CuMKzJyxcbiAgICAnw6/CvcKbJzogJ8OvwrjCtycsXG4gICAgJ8Ovwr3CnCc6ICfDosKAwpUnLFxuICAgICfDr8K9wp0nOiAnw6/CuMK4JyxcbiAgICAnw6/CvcKfJzogJ8OvwrjCtScsXG4gICAgJ8Ovwr3CoCc6ICfDr8K4wrYnLFxuICAgICfDr8K9wqEnOiAnw6/CuMKSJyxcbiAgICAnw6/CvcKiJzogJ8OvwrnCgScsXG4gICAgJ8Ovwr3Coyc6ICfDr8K5woInXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2ZXJ0aWNhbGl6ZVB1bmN0dWF0aW9uKGlucHV0OiBzdHJpbmcpIHtcbiAgICBsZXQgb3V0cHV0ID0gJyc7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG5leHRDaGFyQ29kZSA9IGlucHV0LmNoYXJDb2RlQXQoaSArIDEpIHx8IG51bGw7XG4gICAgICAgIGNvbnN0IHByZXZDaGFyQ29kZSA9IGlucHV0LmNoYXJDb2RlQXQoaSAtIDEpIHx8IG51bGw7XG5cbiAgICAgICAgY29uc3QgY2FuUmVwbGFjZVB1bmN0dWF0aW9uID0gKFxuICAgICAgICAgICAgKCFuZXh0Q2hhckNvZGUgfHwgIWNoYXJIYXNSb3RhdGVkVmVydGljYWxPcmllbnRhdGlvbihuZXh0Q2hhckNvZGUpIHx8IHZlcnRpY2FsaXplZENoYXJhY3Rlck1hcFtpbnB1dFtpICsgMV1dKSAmJlxuICAgICAgICAgICAgKCFwcmV2Q2hhckNvZGUgfHwgIWNoYXJIYXNSb3RhdGVkVmVydGljYWxPcmllbnRhdGlvbihwcmV2Q2hhckNvZGUpIHx8IHZlcnRpY2FsaXplZENoYXJhY3Rlck1hcFtpbnB1dFtpIC0gMV1dKVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChjYW5SZXBsYWNlUHVuY3R1YXRpb24gJiYgdmVydGljYWxpemVkQ2hhcmFjdGVyTWFwW2lucHV0W2ldXSkge1xuICAgICAgICAgICAgb3V0cHV0ICs9IHZlcnRpY2FsaXplZENoYXJhY3Rlck1hcFtpbnB1dFtpXV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvdXRwdXQgKz0gaW5wdXRbaV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb3V0cHV0O1xufVxuXG4iLCIvLyBAZmxvd1xuLy8gT05FX0VNIGNvbnN0YW50IHVzZWQgdG8gZ28gYmV0d2VlbiBcImVtXCIgdW5pdHMgdXNlZCBpbiBzdHlsZSBzcGVjIGFuZCBcInBvaW50c1wiIHVzZWQgaW50ZXJuYWxseSBmb3IgbGF5b3V0XG5cbmV4cG9ydCBkZWZhdWx0IDI0O1xuIiwiZXhwb3J0cy5yZWFkID0gZnVuY3Rpb24gKGJ1ZmZlciwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG1cbiAgdmFyIGVMZW4gPSAobkJ5dGVzICogOCkgLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIG5CaXRzID0gLTdcbiAgdmFyIGkgPSBpc0xFID8gKG5CeXRlcyAtIDEpIDogMFxuICB2YXIgZCA9IGlzTEUgPyAtMSA6IDFcbiAgdmFyIHMgPSBidWZmZXJbb2Zmc2V0ICsgaV1cblxuICBpICs9IGRcblxuICBlID0gcyAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBzID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBlTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IGUgPSAoZSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBtID0gZSAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBlID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBtTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSAobSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBpZiAoZSA9PT0gMCkge1xuICAgIGUgPSAxIC0gZUJpYXNcbiAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG0gPyBOYU4gOiAoKHMgPyAtMSA6IDEpICogSW5maW5pdHkpXG4gIH0gZWxzZSB7XG4gICAgbSA9IG0gKyBNYXRoLnBvdygyLCBtTGVuKVxuICAgIGUgPSBlIC0gZUJpYXNcbiAgfVxuICByZXR1cm4gKHMgPyAtMSA6IDEpICogbSAqIE1hdGgucG93KDIsIGUgLSBtTGVuKVxufVxuXG5leHBvcnRzLndyaXRlID0gZnVuY3Rpb24gKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtLCBjXG4gIHZhciBlTGVuID0gKG5CeXRlcyAqIDgpIC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBydCA9IChtTGVuID09PSAyMyA/IE1hdGgucG93KDIsIC0yNCkgLSBNYXRoLnBvdygyLCAtNzcpIDogMClcbiAgdmFyIGkgPSBpc0xFID8gMCA6IChuQnl0ZXMgLSAxKVxuICB2YXIgZCA9IGlzTEUgPyAxIDogLTFcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgKHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDApID8gMSA6IDBcblxuICB2YWx1ZSA9IE1hdGguYWJzKHZhbHVlKVxuXG4gIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgbSA9IGlzTmFOKHZhbHVlKSA/IDEgOiAwXG4gICAgZSA9IGVNYXhcbiAgfSBlbHNlIHtcbiAgICBlID0gTWF0aC5mbG9vcihNYXRoLmxvZyh2YWx1ZSkgLyBNYXRoLkxOMilcbiAgICBpZiAodmFsdWUgKiAoYyA9IE1hdGgucG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS1cbiAgICAgIGMgKj0gMlxuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIHZhbHVlICs9IHJ0IC8gY1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIE1hdGgucG93KDIsIDEgLSBlQmlhcylcbiAgICB9XG4gICAgaWYgKHZhbHVlICogYyA+PSAyKSB7XG4gICAgICBlKytcbiAgICAgIGMgLz0gMlxuICAgIH1cblxuICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkge1xuICAgICAgbSA9IDBcbiAgICAgIGUgPSBlTWF4XG4gICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgbSA9ICgodmFsdWUgKiBjKSAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSBlICsgZUJpYXNcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogTWF0aC5wb3coMiwgZUJpYXMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gMFxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IG0gJiAweGZmLCBpICs9IGQsIG0gLz0gMjU2LCBtTGVuIC09IDgpIHt9XG5cbiAgZSA9IChlIDw8IG1MZW4pIHwgbVxuICBlTGVuICs9IG1MZW5cbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBlICYgMHhmZiwgaSArPSBkLCBlIC89IDI1NiwgZUxlbiAtPSA4KSB7fVxuXG4gIGJ1ZmZlcltvZmZzZXQgKyBpIC0gZF0gfD0gcyAqIDEyOFxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBiZjtcblxudmFyIGllZWU3NTQgPSByZXF1aXJlKCdpZWVlNzU0Jyk7XG5cbmZ1bmN0aW9uIFBiZihidWYpIHtcbiAgICB0aGlzLmJ1ZiA9IEFycmF5QnVmZmVyLmlzVmlldyAmJiBBcnJheUJ1ZmZlci5pc1ZpZXcoYnVmKSA/IGJ1ZiA6IG5ldyBVaW50OEFycmF5KGJ1ZiB8fCAwKTtcbiAgICB0aGlzLnBvcyA9IDA7XG4gICAgdGhpcy50eXBlID0gMDtcbiAgICB0aGlzLmxlbmd0aCA9IHRoaXMuYnVmLmxlbmd0aDtcbn1cblxuUGJmLlZhcmludCAgPSAwOyAvLyB2YXJpbnQ6IGludDMyLCBpbnQ2NCwgdWludDMyLCB1aW50NjQsIHNpbnQzMiwgc2ludDY0LCBib29sLCBlbnVtXG5QYmYuRml4ZWQ2NCA9IDE7IC8vIDY0LWJpdDogZG91YmxlLCBmaXhlZDY0LCBzZml4ZWQ2NFxuUGJmLkJ5dGVzICAgPSAyOyAvLyBsZW5ndGgtZGVsaW1pdGVkOiBzdHJpbmcsIGJ5dGVzLCBlbWJlZGRlZCBtZXNzYWdlcywgcGFja2VkIHJlcGVhdGVkIGZpZWxkc1xuUGJmLkZpeGVkMzIgPSA1OyAvLyAzMi1iaXQ6IGZsb2F0LCBmaXhlZDMyLCBzZml4ZWQzMlxuXG52YXIgU0hJRlRfTEVGVF8zMiA9ICgxIDw8IDE2KSAqICgxIDw8IDE2KSxcbiAgICBTSElGVF9SSUdIVF8zMiA9IDEgLyBTSElGVF9MRUZUXzMyO1xuXG4vLyBUaHJlc2hvbGQgY2hvc2VuIGJhc2VkIG9uIGJvdGggYmVuY2htYXJraW5nIGFuZCBrbm93bGVkZ2UgYWJvdXQgYnJvd3NlciBzdHJpbmdcbi8vIGRhdGEgc3RydWN0dXJlcyAod2hpY2ggY3VycmVudGx5IHN3aXRjaCBzdHJ1Y3R1cmUgdHlwZXMgYXQgMTIgYnl0ZXMgb3IgbW9yZSlcbnZhciBURVhUX0RFQ09ERVJfTUlOX0xFTkdUSCA9IDEyO1xudmFyIHV0ZjhUZXh0RGVjb2RlciA9IHR5cGVvZiBUZXh0RGVjb2RlciA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogbmV3IFRleHREZWNvZGVyKCd1dGY4Jyk7XG5cblBiZi5wcm90b3R5cGUgPSB7XG5cbiAgICBkZXN0cm95OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5idWYgPSBudWxsO1xuICAgIH0sXG5cbiAgICAvLyA9PT0gUkVBRElORyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gICAgcmVhZEZpZWxkczogZnVuY3Rpb24ocmVhZEZpZWxkLCByZXN1bHQsIGVuZCkge1xuICAgICAgICBlbmQgPSBlbmQgfHwgdGhpcy5sZW5ndGg7XG5cbiAgICAgICAgd2hpbGUgKHRoaXMucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICB2YXIgdmFsID0gdGhpcy5yZWFkVmFyaW50KCksXG4gICAgICAgICAgICAgICAgdGFnID0gdmFsID4+IDMsXG4gICAgICAgICAgICAgICAgc3RhcnRQb3MgPSB0aGlzLnBvcztcblxuICAgICAgICAgICAgdGhpcy50eXBlID0gdmFsICYgMHg3O1xuICAgICAgICAgICAgcmVhZEZpZWxkKHRhZywgcmVzdWx0LCB0aGlzKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMucG9zID09PSBzdGFydFBvcykgdGhpcy5za2lwKHZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgcmVhZE1lc3NhZ2U6IGZ1bmN0aW9uKHJlYWRGaWVsZCwgcmVzdWx0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRGaWVsZHMocmVhZEZpZWxkLCByZXN1bHQsIHRoaXMucmVhZFZhcmludCgpICsgdGhpcy5wb3MpO1xuICAgIH0sXG5cbiAgICByZWFkRml4ZWQzMjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB2YWwgPSByZWFkVUludDMyKHRoaXMuYnVmLCB0aGlzLnBvcyk7XG4gICAgICAgIHRoaXMucG9zICs9IDQ7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfSxcblxuICAgIHJlYWRTRml4ZWQzMjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB2YWwgPSByZWFkSW50MzIodGhpcy5idWYsIHRoaXMucG9zKTtcbiAgICAgICAgdGhpcy5wb3MgKz0gNDtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9LFxuXG4gICAgLy8gNjQtYml0IGludCBoYW5kbGluZyBpcyBiYXNlZCBvbiBnaXRodWIuY29tL2Rwdy9ub2RlLWJ1ZmZlci1tb3JlLWludHMgKE1JVC1saWNlbnNlZClcblxuICAgIHJlYWRGaXhlZDY0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHZhbCA9IHJlYWRVSW50MzIodGhpcy5idWYsIHRoaXMucG9zKSArIHJlYWRVSW50MzIodGhpcy5idWYsIHRoaXMucG9zICsgNCkgKiBTSElGVF9MRUZUXzMyO1xuICAgICAgICB0aGlzLnBvcyArPSA4O1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH0sXG5cbiAgICByZWFkU0ZpeGVkNjQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgdmFsID0gcmVhZFVJbnQzMih0aGlzLmJ1ZiwgdGhpcy5wb3MpICsgcmVhZEludDMyKHRoaXMuYnVmLCB0aGlzLnBvcyArIDQpICogU0hJRlRfTEVGVF8zMjtcbiAgICAgICAgdGhpcy5wb3MgKz0gODtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9LFxuXG4gICAgcmVhZEZsb2F0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHZhbCA9IGllZWU3NTQucmVhZCh0aGlzLmJ1ZiwgdGhpcy5wb3MsIHRydWUsIDIzLCA0KTtcbiAgICAgICAgdGhpcy5wb3MgKz0gNDtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9LFxuXG4gICAgcmVhZERvdWJsZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB2YWwgPSBpZWVlNzU0LnJlYWQodGhpcy5idWYsIHRoaXMucG9zLCB0cnVlLCA1MiwgOCk7XG4gICAgICAgIHRoaXMucG9zICs9IDg7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfSxcblxuICAgIHJlYWRWYXJpbnQ6IGZ1bmN0aW9uKGlzU2lnbmVkKSB7XG4gICAgICAgIHZhciBidWYgPSB0aGlzLmJ1ZixcbiAgICAgICAgICAgIHZhbCwgYjtcblxuICAgICAgICBiID0gYnVmW3RoaXMucG9zKytdOyB2YWwgID0gIGIgJiAweDdmOyAgICAgICAgaWYgKGIgPCAweDgwKSByZXR1cm4gdmFsO1xuICAgICAgICBiID0gYnVmW3RoaXMucG9zKytdOyB2YWwgfD0gKGIgJiAweDdmKSA8PCA3OyAgaWYgKGIgPCAweDgwKSByZXR1cm4gdmFsO1xuICAgICAgICBiID0gYnVmW3RoaXMucG9zKytdOyB2YWwgfD0gKGIgJiAweDdmKSA8PCAxNDsgaWYgKGIgPCAweDgwKSByZXR1cm4gdmFsO1xuICAgICAgICBiID0gYnVmW3RoaXMucG9zKytdOyB2YWwgfD0gKGIgJiAweDdmKSA8PCAyMTsgaWYgKGIgPCAweDgwKSByZXR1cm4gdmFsO1xuICAgICAgICBiID0gYnVmW3RoaXMucG9zXTsgICB2YWwgfD0gKGIgJiAweDBmKSA8PCAyODtcblxuICAgICAgICByZXR1cm4gcmVhZFZhcmludFJlbWFpbmRlcih2YWwsIGlzU2lnbmVkLCB0aGlzKTtcbiAgICB9LFxuXG4gICAgcmVhZFZhcmludDY0OiBmdW5jdGlvbigpIHsgLy8gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB2Mi4wLjFcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZFZhcmludCh0cnVlKTtcbiAgICB9LFxuXG4gICAgcmVhZFNWYXJpbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgbnVtID0gdGhpcy5yZWFkVmFyaW50KCk7XG4gICAgICAgIHJldHVybiBudW0gJSAyID09PSAxID8gKG51bSArIDEpIC8gLTIgOiBudW0gLyAyOyAvLyB6aWd6YWcgZW5jb2RpbmdcbiAgICB9LFxuXG4gICAgcmVhZEJvb2xlYW46IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gQm9vbGVhbih0aGlzLnJlYWRWYXJpbnQoKSk7XG4gICAgfSxcblxuICAgIHJlYWRTdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZW5kID0gdGhpcy5yZWFkVmFyaW50KCkgKyB0aGlzLnBvcztcbiAgICAgICAgdmFyIHBvcyA9IHRoaXMucG9zO1xuICAgICAgICB0aGlzLnBvcyA9IGVuZDtcblxuICAgICAgICBpZiAoZW5kIC0gcG9zID49IFRFWFRfREVDT0RFUl9NSU5fTEVOR1RIICYmIHV0ZjhUZXh0RGVjb2Rlcikge1xuICAgICAgICAgICAgLy8gbG9uZ2VyIHN0cmluZ3MgYXJlIGZhc3Qgd2l0aCB0aGUgYnVpbHQtaW4gYnJvd3NlciBUZXh0RGVjb2RlciBBUElcbiAgICAgICAgICAgIHJldHVybiByZWFkVXRmOFRleHREZWNvZGVyKHRoaXMuYnVmLCBwb3MsIGVuZCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2hvcnQgc3RyaW5ncyBhcmUgZmFzdCB3aXRoIG91ciBjdXN0b20gaW1wbGVtZW50YXRpb25cbiAgICAgICAgcmV0dXJuIHJlYWRVdGY4KHRoaXMuYnVmLCBwb3MsIGVuZCk7XG4gICAgfSxcblxuICAgIHJlYWRCeXRlczogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBlbmQgPSB0aGlzLnJlYWRWYXJpbnQoKSArIHRoaXMucG9zLFxuICAgICAgICAgICAgYnVmZmVyID0gdGhpcy5idWYuc3ViYXJyYXkodGhpcy5wb3MsIGVuZCk7XG4gICAgICAgIHRoaXMucG9zID0gZW5kO1xuICAgICAgICByZXR1cm4gYnVmZmVyO1xuICAgIH0sXG5cbiAgICAvLyB2ZXJib3NlIGZvciBwZXJmb3JtYW5jZSByZWFzb25zOyBkb2Vzbid0IGFmZmVjdCBnemlwcGVkIHNpemVcblxuICAgIHJlYWRQYWNrZWRWYXJpbnQ6IGZ1bmN0aW9uKGFyciwgaXNTaWduZWQpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSAhPT0gUGJmLkJ5dGVzKSByZXR1cm4gYXJyLnB1c2godGhpcy5yZWFkVmFyaW50KGlzU2lnbmVkKSk7XG4gICAgICAgIHZhciBlbmQgPSByZWFkUGFja2VkRW5kKHRoaXMpO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHdoaWxlICh0aGlzLnBvcyA8IGVuZCkgYXJyLnB1c2godGhpcy5yZWFkVmFyaW50KGlzU2lnbmVkKSk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfSxcbiAgICByZWFkUGFja2VkU1ZhcmludDogZnVuY3Rpb24oYXJyKSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgIT09IFBiZi5CeXRlcykgcmV0dXJuIGFyci5wdXNoKHRoaXMucmVhZFNWYXJpbnQoKSk7XG4gICAgICAgIHZhciBlbmQgPSByZWFkUGFja2VkRW5kKHRoaXMpO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHdoaWxlICh0aGlzLnBvcyA8IGVuZCkgYXJyLnB1c2godGhpcy5yZWFkU1ZhcmludCgpKTtcbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9LFxuICAgIHJlYWRQYWNrZWRCb29sZWFuOiBmdW5jdGlvbihhcnIpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSAhPT0gUGJmLkJ5dGVzKSByZXR1cm4gYXJyLnB1c2godGhpcy5yZWFkQm9vbGVhbigpKTtcbiAgICAgICAgdmFyIGVuZCA9IHJlYWRQYWNrZWRFbmQodGhpcyk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgd2hpbGUgKHRoaXMucG9zIDwgZW5kKSBhcnIucHVzaCh0aGlzLnJlYWRCb29sZWFuKCkpO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH0sXG4gICAgcmVhZFBhY2tlZEZsb2F0OiBmdW5jdGlvbihhcnIpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSAhPT0gUGJmLkJ5dGVzKSByZXR1cm4gYXJyLnB1c2godGhpcy5yZWFkRmxvYXQoKSk7XG4gICAgICAgIHZhciBlbmQgPSByZWFkUGFja2VkRW5kKHRoaXMpO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHdoaWxlICh0aGlzLnBvcyA8IGVuZCkgYXJyLnB1c2godGhpcy5yZWFkRmxvYXQoKSk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfSxcbiAgICByZWFkUGFja2VkRG91YmxlOiBmdW5jdGlvbihhcnIpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSAhPT0gUGJmLkJ5dGVzKSByZXR1cm4gYXJyLnB1c2godGhpcy5yZWFkRG91YmxlKCkpO1xuICAgICAgICB2YXIgZW5kID0gcmVhZFBhY2tlZEVuZCh0aGlzKTtcbiAgICAgICAgYXJyID0gYXJyIHx8IFtdO1xuICAgICAgICB3aGlsZSAodGhpcy5wb3MgPCBlbmQpIGFyci5wdXNoKHRoaXMucmVhZERvdWJsZSgpKTtcbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9LFxuICAgIHJlYWRQYWNrZWRGaXhlZDMyOiBmdW5jdGlvbihhcnIpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSAhPT0gUGJmLkJ5dGVzKSByZXR1cm4gYXJyLnB1c2godGhpcy5yZWFkRml4ZWQzMigpKTtcbiAgICAgICAgdmFyIGVuZCA9IHJlYWRQYWNrZWRFbmQodGhpcyk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgd2hpbGUgKHRoaXMucG9zIDwgZW5kKSBhcnIucHVzaCh0aGlzLnJlYWRGaXhlZDMyKCkpO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH0sXG4gICAgcmVhZFBhY2tlZFNGaXhlZDMyOiBmdW5jdGlvbihhcnIpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSAhPT0gUGJmLkJ5dGVzKSByZXR1cm4gYXJyLnB1c2godGhpcy5yZWFkU0ZpeGVkMzIoKSk7XG4gICAgICAgIHZhciBlbmQgPSByZWFkUGFja2VkRW5kKHRoaXMpO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHdoaWxlICh0aGlzLnBvcyA8IGVuZCkgYXJyLnB1c2godGhpcy5yZWFkU0ZpeGVkMzIoKSk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfSxcbiAgICByZWFkUGFja2VkRml4ZWQ2NDogZnVuY3Rpb24oYXJyKSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgIT09IFBiZi5CeXRlcykgcmV0dXJuIGFyci5wdXNoKHRoaXMucmVhZEZpeGVkNjQoKSk7XG4gICAgICAgIHZhciBlbmQgPSByZWFkUGFja2VkRW5kKHRoaXMpO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHdoaWxlICh0aGlzLnBvcyA8IGVuZCkgYXJyLnB1c2godGhpcy5yZWFkRml4ZWQ2NCgpKTtcbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9LFxuICAgIHJlYWRQYWNrZWRTRml4ZWQ2NDogZnVuY3Rpb24oYXJyKSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgIT09IFBiZi5CeXRlcykgcmV0dXJuIGFyci5wdXNoKHRoaXMucmVhZFNGaXhlZDY0KCkpO1xuICAgICAgICB2YXIgZW5kID0gcmVhZFBhY2tlZEVuZCh0aGlzKTtcbiAgICAgICAgYXJyID0gYXJyIHx8IFtdO1xuICAgICAgICB3aGlsZSAodGhpcy5wb3MgPCBlbmQpIGFyci5wdXNoKHRoaXMucmVhZFNGaXhlZDY0KCkpO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH0sXG5cbiAgICBza2lwOiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgdmFyIHR5cGUgPSB2YWwgJiAweDc7XG4gICAgICAgIGlmICh0eXBlID09PSBQYmYuVmFyaW50KSB3aGlsZSAodGhpcy5idWZbdGhpcy5wb3MrK10gPiAweDdmKSB7fVxuICAgICAgICBlbHNlIGlmICh0eXBlID09PSBQYmYuQnl0ZXMpIHRoaXMucG9zID0gdGhpcy5yZWFkVmFyaW50KCkgKyB0aGlzLnBvcztcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gUGJmLkZpeGVkMzIpIHRoaXMucG9zICs9IDQ7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IFBiZi5GaXhlZDY0KSB0aGlzLnBvcyArPSA4O1xuICAgICAgICBlbHNlIHRocm93IG5ldyBFcnJvcignVW5pbXBsZW1lbnRlZCB0eXBlOiAnICsgdHlwZSk7XG4gICAgfSxcblxuICAgIC8vID09PSBXUklUSU5HID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgICB3cml0ZVRhZzogZnVuY3Rpb24odGFnLCB0eXBlKSB7XG4gICAgICAgIHRoaXMud3JpdGVWYXJpbnQoKHRhZyA8PCAzKSB8IHR5cGUpO1xuICAgIH0sXG5cbiAgICByZWFsbG9jOiBmdW5jdGlvbihtaW4pIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoIHx8IDE2O1xuXG4gICAgICAgIHdoaWxlIChsZW5ndGggPCB0aGlzLnBvcyArIG1pbikgbGVuZ3RoICo9IDI7XG5cbiAgICAgICAgaWYgKGxlbmd0aCAhPT0gdGhpcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHZhciBidWYgPSBuZXcgVWludDhBcnJheShsZW5ndGgpO1xuICAgICAgICAgICAgYnVmLnNldCh0aGlzLmJ1Zik7XG4gICAgICAgICAgICB0aGlzLmJ1ZiA9IGJ1ZjtcbiAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIGZpbmlzaDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5wb3M7XG4gICAgICAgIHRoaXMucG9zID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVmLnN1YmFycmF5KDAsIHRoaXMubGVuZ3RoKTtcbiAgICB9LFxuXG4gICAgd3JpdGVGaXhlZDMyOiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgdGhpcy5yZWFsbG9jKDQpO1xuICAgICAgICB3cml0ZUludDMyKHRoaXMuYnVmLCB2YWwsIHRoaXMucG9zKTtcbiAgICAgICAgdGhpcy5wb3MgKz0gNDtcbiAgICB9LFxuXG4gICAgd3JpdGVTRml4ZWQzMjogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgIHRoaXMucmVhbGxvYyg0KTtcbiAgICAgICAgd3JpdGVJbnQzMih0aGlzLmJ1ZiwgdmFsLCB0aGlzLnBvcyk7XG4gICAgICAgIHRoaXMucG9zICs9IDQ7XG4gICAgfSxcblxuICAgIHdyaXRlRml4ZWQ2NDogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgIHRoaXMucmVhbGxvYyg4KTtcbiAgICAgICAgd3JpdGVJbnQzMih0aGlzLmJ1ZiwgdmFsICYgLTEsIHRoaXMucG9zKTtcbiAgICAgICAgd3JpdGVJbnQzMih0aGlzLmJ1ZiwgTWF0aC5mbG9vcih2YWwgKiBTSElGVF9SSUdIVF8zMiksIHRoaXMucG9zICsgNCk7XG4gICAgICAgIHRoaXMucG9zICs9IDg7XG4gICAgfSxcblxuICAgIHdyaXRlU0ZpeGVkNjQ6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICB0aGlzLnJlYWxsb2MoOCk7XG4gICAgICAgIHdyaXRlSW50MzIodGhpcy5idWYsIHZhbCAmIC0xLCB0aGlzLnBvcyk7XG4gICAgICAgIHdyaXRlSW50MzIodGhpcy5idWYsIE1hdGguZmxvb3IodmFsICogU0hJRlRfUklHSFRfMzIpLCB0aGlzLnBvcyArIDQpO1xuICAgICAgICB0aGlzLnBvcyArPSA4O1xuICAgIH0sXG5cbiAgICB3cml0ZVZhcmludDogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgIHZhbCA9ICt2YWwgfHwgMDtcblxuICAgICAgICBpZiAodmFsID4gMHhmZmZmZmZmIHx8IHZhbCA8IDApIHtcbiAgICAgICAgICAgIHdyaXRlQmlnVmFyaW50KHZhbCwgdGhpcyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlYWxsb2MoNCk7XG5cbiAgICAgICAgdGhpcy5idWZbdGhpcy5wb3MrK10gPSAgICAgICAgICAgdmFsICYgMHg3ZiAgfCAodmFsID4gMHg3ZiA/IDB4ODAgOiAwKTsgaWYgKHZhbCA8PSAweDdmKSByZXR1cm47XG4gICAgICAgIHRoaXMuYnVmW3RoaXMucG9zKytdID0gKCh2YWwgPj4+PSA3KSAmIDB4N2YpIHwgKHZhbCA+IDB4N2YgPyAweDgwIDogMCk7IGlmICh2YWwgPD0gMHg3ZikgcmV0dXJuO1xuICAgICAgICB0aGlzLmJ1Zlt0aGlzLnBvcysrXSA9ICgodmFsID4+Pj0gNykgJiAweDdmKSB8ICh2YWwgPiAweDdmID8gMHg4MCA6IDApOyBpZiAodmFsIDw9IDB4N2YpIHJldHVybjtcbiAgICAgICAgdGhpcy5idWZbdGhpcy5wb3MrK10gPSAgICh2YWwgPj4+IDcpICYgMHg3ZjtcbiAgICB9LFxuXG4gICAgd3JpdGVTVmFyaW50OiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgdGhpcy53cml0ZVZhcmludCh2YWwgPCAwID8gLXZhbCAqIDIgLSAxIDogdmFsICogMik7XG4gICAgfSxcblxuICAgIHdyaXRlQm9vbGVhbjogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgIHRoaXMud3JpdGVWYXJpbnQoQm9vbGVhbih2YWwpKTtcbiAgICB9LFxuXG4gICAgd3JpdGVTdHJpbmc6IGZ1bmN0aW9uKHN0cikge1xuICAgICAgICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgICAgICAgdGhpcy5yZWFsbG9jKHN0ci5sZW5ndGggKiA0KTtcblxuICAgICAgICB0aGlzLnBvcysrOyAvLyByZXNlcnZlIDEgYnl0ZSBmb3Igc2hvcnQgc3RyaW5nIGxlbmd0aFxuXG4gICAgICAgIHZhciBzdGFydFBvcyA9IHRoaXMucG9zO1xuICAgICAgICAvLyB3cml0ZSB0aGUgc3RyaW5nIGRpcmVjdGx5IHRvIHRoZSBidWZmZXIgYW5kIHNlZSBob3cgbXVjaCB3YXMgd3JpdHRlblxuICAgICAgICB0aGlzLnBvcyA9IHdyaXRlVXRmOCh0aGlzLmJ1Ziwgc3RyLCB0aGlzLnBvcyk7XG4gICAgICAgIHZhciBsZW4gPSB0aGlzLnBvcyAtIHN0YXJ0UG9zO1xuXG4gICAgICAgIGlmIChsZW4gPj0gMHg4MCkgbWFrZVJvb21Gb3JFeHRyYUxlbmd0aChzdGFydFBvcywgbGVuLCB0aGlzKTtcblxuICAgICAgICAvLyBmaW5hbGx5LCB3cml0ZSB0aGUgbWVzc2FnZSBsZW5ndGggaW4gdGhlIHJlc2VydmVkIHBsYWNlIGFuZCByZXN0b3JlIHRoZSBwb3NpdGlvblxuICAgICAgICB0aGlzLnBvcyA9IHN0YXJ0UG9zIC0gMTtcbiAgICAgICAgdGhpcy53cml0ZVZhcmludChsZW4pO1xuICAgICAgICB0aGlzLnBvcyArPSBsZW47XG4gICAgfSxcblxuICAgIHdyaXRlRmxvYXQ6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICB0aGlzLnJlYWxsb2MoNCk7XG4gICAgICAgIGllZWU3NTQud3JpdGUodGhpcy5idWYsIHZhbCwgdGhpcy5wb3MsIHRydWUsIDIzLCA0KTtcbiAgICAgICAgdGhpcy5wb3MgKz0gNDtcbiAgICB9LFxuXG4gICAgd3JpdGVEb3VibGU6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICB0aGlzLnJlYWxsb2MoOCk7XG4gICAgICAgIGllZWU3NTQud3JpdGUodGhpcy5idWYsIHZhbCwgdGhpcy5wb3MsIHRydWUsIDUyLCA4KTtcbiAgICAgICAgdGhpcy5wb3MgKz0gODtcbiAgICB9LFxuXG4gICAgd3JpdGVCeXRlczogZnVuY3Rpb24oYnVmZmVyKSB7XG4gICAgICAgIHZhciBsZW4gPSBidWZmZXIubGVuZ3RoO1xuICAgICAgICB0aGlzLndyaXRlVmFyaW50KGxlbik7XG4gICAgICAgIHRoaXMucmVhbGxvYyhsZW4pO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB0aGlzLmJ1Zlt0aGlzLnBvcysrXSA9IGJ1ZmZlcltpXTtcbiAgICB9LFxuXG4gICAgd3JpdGVSYXdNZXNzYWdlOiBmdW5jdGlvbihmbiwgb2JqKSB7XG4gICAgICAgIHRoaXMucG9zKys7IC8vIHJlc2VydmUgMSBieXRlIGZvciBzaG9ydCBtZXNzYWdlIGxlbmd0aFxuXG4gICAgICAgIC8vIHdyaXRlIHRoZSBtZXNzYWdlIGRpcmVjdGx5IHRvIHRoZSBidWZmZXIgYW5kIHNlZSBob3cgbXVjaCB3YXMgd3JpdHRlblxuICAgICAgICB2YXIgc3RhcnRQb3MgPSB0aGlzLnBvcztcbiAgICAgICAgZm4ob2JqLCB0aGlzKTtcbiAgICAgICAgdmFyIGxlbiA9IHRoaXMucG9zIC0gc3RhcnRQb3M7XG5cbiAgICAgICAgaWYgKGxlbiA+PSAweDgwKSBtYWtlUm9vbUZvckV4dHJhTGVuZ3RoKHN0YXJ0UG9zLCBsZW4sIHRoaXMpO1xuXG4gICAgICAgIC8vIGZpbmFsbHksIHdyaXRlIHRoZSBtZXNzYWdlIGxlbmd0aCBpbiB0aGUgcmVzZXJ2ZWQgcGxhY2UgYW5kIHJlc3RvcmUgdGhlIHBvc2l0aW9uXG4gICAgICAgIHRoaXMucG9zID0gc3RhcnRQb3MgLSAxO1xuICAgICAgICB0aGlzLndyaXRlVmFyaW50KGxlbik7XG4gICAgICAgIHRoaXMucG9zICs9IGxlbjtcbiAgICB9LFxuXG4gICAgd3JpdGVNZXNzYWdlOiBmdW5jdGlvbih0YWcsIGZuLCBvYmopIHtcbiAgICAgICAgdGhpcy53cml0ZVRhZyh0YWcsIFBiZi5CeXRlcyk7XG4gICAgICAgIHRoaXMud3JpdGVSYXdNZXNzYWdlKGZuLCBvYmopO1xuICAgIH0sXG5cbiAgICB3cml0ZVBhY2tlZFZhcmludDogICBmdW5jdGlvbih0YWcsIGFycikgeyBpZiAoYXJyLmxlbmd0aCkgdGhpcy53cml0ZU1lc3NhZ2UodGFnLCB3cml0ZVBhY2tlZFZhcmludCwgYXJyKTsgICB9LFxuICAgIHdyaXRlUGFja2VkU1ZhcmludDogIGZ1bmN0aW9uKHRhZywgYXJyKSB7IGlmIChhcnIubGVuZ3RoKSB0aGlzLndyaXRlTWVzc2FnZSh0YWcsIHdyaXRlUGFja2VkU1ZhcmludCwgYXJyKTsgIH0sXG4gICAgd3JpdGVQYWNrZWRCb29sZWFuOiAgZnVuY3Rpb24odGFnLCBhcnIpIHsgaWYgKGFyci5sZW5ndGgpIHRoaXMud3JpdGVNZXNzYWdlKHRhZywgd3JpdGVQYWNrZWRCb29sZWFuLCBhcnIpOyAgfSxcbiAgICB3cml0ZVBhY2tlZEZsb2F0OiAgICBmdW5jdGlvbih0YWcsIGFycikgeyBpZiAoYXJyLmxlbmd0aCkgdGhpcy53cml0ZU1lc3NhZ2UodGFnLCB3cml0ZVBhY2tlZEZsb2F0LCBhcnIpOyAgICB9LFxuICAgIHdyaXRlUGFja2VkRG91YmxlOiAgIGZ1bmN0aW9uKHRhZywgYXJyKSB7IGlmIChhcnIubGVuZ3RoKSB0aGlzLndyaXRlTWVzc2FnZSh0YWcsIHdyaXRlUGFja2VkRG91YmxlLCBhcnIpOyAgIH0sXG4gICAgd3JpdGVQYWNrZWRGaXhlZDMyOiAgZnVuY3Rpb24odGFnLCBhcnIpIHsgaWYgKGFyci5sZW5ndGgpIHRoaXMud3JpdGVNZXNzYWdlKHRhZywgd3JpdGVQYWNrZWRGaXhlZDMyLCBhcnIpOyAgfSxcbiAgICB3cml0ZVBhY2tlZFNGaXhlZDMyOiBmdW5jdGlvbih0YWcsIGFycikgeyBpZiAoYXJyLmxlbmd0aCkgdGhpcy53cml0ZU1lc3NhZ2UodGFnLCB3cml0ZVBhY2tlZFNGaXhlZDMyLCBhcnIpOyB9LFxuICAgIHdyaXRlUGFja2VkRml4ZWQ2NDogIGZ1bmN0aW9uKHRhZywgYXJyKSB7IGlmIChhcnIubGVuZ3RoKSB0aGlzLndyaXRlTWVzc2FnZSh0YWcsIHdyaXRlUGFja2VkRml4ZWQ2NCwgYXJyKTsgIH0sXG4gICAgd3JpdGVQYWNrZWRTRml4ZWQ2NDogZnVuY3Rpb24odGFnLCBhcnIpIHsgaWYgKGFyci5sZW5ndGgpIHRoaXMud3JpdGVNZXNzYWdlKHRhZywgd3JpdGVQYWNrZWRTRml4ZWQ2NCwgYXJyKTsgfSxcblxuICAgIHdyaXRlQnl0ZXNGaWVsZDogZnVuY3Rpb24odGFnLCBidWZmZXIpIHtcbiAgICAgICAgdGhpcy53cml0ZVRhZyh0YWcsIFBiZi5CeXRlcyk7XG4gICAgICAgIHRoaXMud3JpdGVCeXRlcyhidWZmZXIpO1xuICAgIH0sXG4gICAgd3JpdGVGaXhlZDMyRmllbGQ6IGZ1bmN0aW9uKHRhZywgdmFsKSB7XG4gICAgICAgIHRoaXMud3JpdGVUYWcodGFnLCBQYmYuRml4ZWQzMik7XG4gICAgICAgIHRoaXMud3JpdGVGaXhlZDMyKHZhbCk7XG4gICAgfSxcbiAgICB3cml0ZVNGaXhlZDMyRmllbGQ6IGZ1bmN0aW9uKHRhZywgdmFsKSB7XG4gICAgICAgIHRoaXMud3JpdGVUYWcodGFnLCBQYmYuRml4ZWQzMik7XG4gICAgICAgIHRoaXMud3JpdGVTRml4ZWQzMih2YWwpO1xuICAgIH0sXG4gICAgd3JpdGVGaXhlZDY0RmllbGQ6IGZ1bmN0aW9uKHRhZywgdmFsKSB7XG4gICAgICAgIHRoaXMud3JpdGVUYWcodGFnLCBQYmYuRml4ZWQ2NCk7XG4gICAgICAgIHRoaXMud3JpdGVGaXhlZDY0KHZhbCk7XG4gICAgfSxcbiAgICB3cml0ZVNGaXhlZDY0RmllbGQ6IGZ1bmN0aW9uKHRhZywgdmFsKSB7XG4gICAgICAgIHRoaXMud3JpdGVUYWcodGFnLCBQYmYuRml4ZWQ2NCk7XG4gICAgICAgIHRoaXMud3JpdGVTRml4ZWQ2NCh2YWwpO1xuICAgIH0sXG4gICAgd3JpdGVWYXJpbnRGaWVsZDogZnVuY3Rpb24odGFnLCB2YWwpIHtcbiAgICAgICAgdGhpcy53cml0ZVRhZyh0YWcsIFBiZi5WYXJpbnQpO1xuICAgICAgICB0aGlzLndyaXRlVmFyaW50KHZhbCk7XG4gICAgfSxcbiAgICB3cml0ZVNWYXJpbnRGaWVsZDogZnVuY3Rpb24odGFnLCB2YWwpIHtcbiAgICAgICAgdGhpcy53cml0ZVRhZyh0YWcsIFBiZi5WYXJpbnQpO1xuICAgICAgICB0aGlzLndyaXRlU1ZhcmludCh2YWwpO1xuICAgIH0sXG4gICAgd3JpdGVTdHJpbmdGaWVsZDogZnVuY3Rpb24odGFnLCBzdHIpIHtcbiAgICAgICAgdGhpcy53cml0ZVRhZyh0YWcsIFBiZi5CeXRlcyk7XG4gICAgICAgIHRoaXMud3JpdGVTdHJpbmcoc3RyKTtcbiAgICB9LFxuICAgIHdyaXRlRmxvYXRGaWVsZDogZnVuY3Rpb24odGFnLCB2YWwpIHtcbiAgICAgICAgdGhpcy53cml0ZVRhZyh0YWcsIFBiZi5GaXhlZDMyKTtcbiAgICAgICAgdGhpcy53cml0ZUZsb2F0KHZhbCk7XG4gICAgfSxcbiAgICB3cml0ZURvdWJsZUZpZWxkOiBmdW5jdGlvbih0YWcsIHZhbCkge1xuICAgICAgICB0aGlzLndyaXRlVGFnKHRhZywgUGJmLkZpeGVkNjQpO1xuICAgICAgICB0aGlzLndyaXRlRG91YmxlKHZhbCk7XG4gICAgfSxcbiAgICB3cml0ZUJvb2xlYW5GaWVsZDogZnVuY3Rpb24odGFnLCB2YWwpIHtcbiAgICAgICAgdGhpcy53cml0ZVZhcmludEZpZWxkKHRhZywgQm9vbGVhbih2YWwpKTtcbiAgICB9XG59O1xuXG5mdW5jdGlvbiByZWFkVmFyaW50UmVtYWluZGVyKGwsIHMsIHApIHtcbiAgICB2YXIgYnVmID0gcC5idWYsXG4gICAgICAgIGgsIGI7XG5cbiAgICBiID0gYnVmW3AucG9zKytdOyBoICA9IChiICYgMHg3MCkgPj4gNDsgIGlmIChiIDwgMHg4MCkgcmV0dXJuIHRvTnVtKGwsIGgsIHMpO1xuICAgIGIgPSBidWZbcC5wb3MrK107IGggfD0gKGIgJiAweDdmKSA8PCAzOyAgaWYgKGIgPCAweDgwKSByZXR1cm4gdG9OdW0obCwgaCwgcyk7XG4gICAgYiA9IGJ1ZltwLnBvcysrXTsgaCB8PSAoYiAmIDB4N2YpIDw8IDEwOyBpZiAoYiA8IDB4ODApIHJldHVybiB0b051bShsLCBoLCBzKTtcbiAgICBiID0gYnVmW3AucG9zKytdOyBoIHw9IChiICYgMHg3ZikgPDwgMTc7IGlmIChiIDwgMHg4MCkgcmV0dXJuIHRvTnVtKGwsIGgsIHMpO1xuICAgIGIgPSBidWZbcC5wb3MrK107IGggfD0gKGIgJiAweDdmKSA8PCAyNDsgaWYgKGIgPCAweDgwKSByZXR1cm4gdG9OdW0obCwgaCwgcyk7XG4gICAgYiA9IGJ1ZltwLnBvcysrXTsgaCB8PSAoYiAmIDB4MDEpIDw8IDMxOyBpZiAoYiA8IDB4ODApIHJldHVybiB0b051bShsLCBoLCBzKTtcblxuICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdmFyaW50IG5vdCBtb3JlIHRoYW4gMTAgYnl0ZXMnKTtcbn1cblxuZnVuY3Rpb24gcmVhZFBhY2tlZEVuZChwYmYpIHtcbiAgICByZXR1cm4gcGJmLnR5cGUgPT09IFBiZi5CeXRlcyA/XG4gICAgICAgIHBiZi5yZWFkVmFyaW50KCkgKyBwYmYucG9zIDogcGJmLnBvcyArIDE7XG59XG5cbmZ1bmN0aW9uIHRvTnVtKGxvdywgaGlnaCwgaXNTaWduZWQpIHtcbiAgICBpZiAoaXNTaWduZWQpIHtcbiAgICAgICAgcmV0dXJuIGhpZ2ggKiAweDEwMDAwMDAwMCArIChsb3cgPj4+IDApO1xuICAgIH1cblxuICAgIHJldHVybiAoKGhpZ2ggPj4+IDApICogMHgxMDAwMDAwMDApICsgKGxvdyA+Pj4gMCk7XG59XG5cbmZ1bmN0aW9uIHdyaXRlQmlnVmFyaW50KHZhbCwgcGJmKSB7XG4gICAgdmFyIGxvdywgaGlnaDtcblxuICAgIGlmICh2YWwgPj0gMCkge1xuICAgICAgICBsb3cgID0gKHZhbCAlIDB4MTAwMDAwMDAwKSB8IDA7XG4gICAgICAgIGhpZ2ggPSAodmFsIC8gMHgxMDAwMDAwMDApIHwgMDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBsb3cgID0gfigtdmFsICUgMHgxMDAwMDAwMDApO1xuICAgICAgICBoaWdoID0gfigtdmFsIC8gMHgxMDAwMDAwMDApO1xuXG4gICAgICAgIGlmIChsb3cgXiAweGZmZmZmZmZmKSB7XG4gICAgICAgICAgICBsb3cgPSAobG93ICsgMSkgfCAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG93ID0gMDtcbiAgICAgICAgICAgIGhpZ2ggPSAoaGlnaCArIDEpIHwgMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWwgPj0gMHgxMDAwMDAwMDAwMDAwMDAwMCB8fCB2YWwgPCAtMHgxMDAwMDAwMDAwMDAwMDAwMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dpdmVuIHZhcmludCBkb2VzblxcJ3QgZml0IGludG8gMTAgYnl0ZXMnKTtcbiAgICB9XG5cbiAgICBwYmYucmVhbGxvYygxMCk7XG5cbiAgICB3cml0ZUJpZ1ZhcmludExvdyhsb3csIGhpZ2gsIHBiZik7XG4gICAgd3JpdGVCaWdWYXJpbnRIaWdoKGhpZ2gsIHBiZik7XG59XG5cbmZ1bmN0aW9uIHdyaXRlQmlnVmFyaW50TG93KGxvdywgaGlnaCwgcGJmKSB7XG4gICAgcGJmLmJ1ZltwYmYucG9zKytdID0gbG93ICYgMHg3ZiB8IDB4ODA7IGxvdyA+Pj49IDc7XG4gICAgcGJmLmJ1ZltwYmYucG9zKytdID0gbG93ICYgMHg3ZiB8IDB4ODA7IGxvdyA+Pj49IDc7XG4gICAgcGJmLmJ1ZltwYmYucG9zKytdID0gbG93ICYgMHg3ZiB8IDB4ODA7IGxvdyA+Pj49IDc7XG4gICAgcGJmLmJ1ZltwYmYucG9zKytdID0gbG93ICYgMHg3ZiB8IDB4ODA7IGxvdyA+Pj49IDc7XG4gICAgcGJmLmJ1ZltwYmYucG9zXSAgID0gbG93ICYgMHg3Zjtcbn1cblxuZnVuY3Rpb24gd3JpdGVCaWdWYXJpbnRIaWdoKGhpZ2gsIHBiZikge1xuICAgIHZhciBsc2IgPSAoaGlnaCAmIDB4MDcpIDw8IDQ7XG5cbiAgICBwYmYuYnVmW3BiZi5wb3MrK10gfD0gbHNiICAgICAgICAgfCAoKGhpZ2ggPj4+PSAzKSA/IDB4ODAgOiAwKTsgaWYgKCFoaWdoKSByZXR1cm47XG4gICAgcGJmLmJ1ZltwYmYucG9zKytdICA9IGhpZ2ggJiAweDdmIHwgKChoaWdoID4+Pj0gNykgPyAweDgwIDogMCk7IGlmICghaGlnaCkgcmV0dXJuO1xuICAgIHBiZi5idWZbcGJmLnBvcysrXSAgPSBoaWdoICYgMHg3ZiB8ICgoaGlnaCA+Pj49IDcpID8gMHg4MCA6IDApOyBpZiAoIWhpZ2gpIHJldHVybjtcbiAgICBwYmYuYnVmW3BiZi5wb3MrK10gID0gaGlnaCAmIDB4N2YgfCAoKGhpZ2ggPj4+PSA3KSA/IDB4ODAgOiAwKTsgaWYgKCFoaWdoKSByZXR1cm47XG4gICAgcGJmLmJ1ZltwYmYucG9zKytdICA9IGhpZ2ggJiAweDdmIHwgKChoaWdoID4+Pj0gNykgPyAweDgwIDogMCk7IGlmICghaGlnaCkgcmV0dXJuO1xuICAgIHBiZi5idWZbcGJmLnBvcysrXSAgPSBoaWdoICYgMHg3Zjtcbn1cblxuZnVuY3Rpb24gbWFrZVJvb21Gb3JFeHRyYUxlbmd0aChzdGFydFBvcywgbGVuLCBwYmYpIHtcbiAgICB2YXIgZXh0cmFMZW4gPVxuICAgICAgICBsZW4gPD0gMHgzZmZmID8gMSA6XG4gICAgICAgIGxlbiA8PSAweDFmZmZmZiA/IDIgOlxuICAgICAgICBsZW4gPD0gMHhmZmZmZmZmID8gMyA6IE1hdGguZmxvb3IoTWF0aC5sb2cobGVuKSAvIChNYXRoLkxOMiAqIDcpKTtcblxuICAgIC8vIGlmIDEgYnl0ZSBpc24ndCBlbm91Z2ggZm9yIGVuY29kaW5nIG1lc3NhZ2UgbGVuZ3RoLCBzaGlmdCB0aGUgZGF0YSB0byB0aGUgcmlnaHRcbiAgICBwYmYucmVhbGxvYyhleHRyYUxlbik7XG4gICAgZm9yICh2YXIgaSA9IHBiZi5wb3MgLSAxOyBpID49IHN0YXJ0UG9zOyBpLS0pIHBiZi5idWZbaSArIGV4dHJhTGVuXSA9IHBiZi5idWZbaV07XG59XG5cbmZ1bmN0aW9uIHdyaXRlUGFja2VkVmFyaW50KGFyciwgcGJmKSAgIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZVZhcmludChhcnJbaV0pOyAgIH1cbmZ1bmN0aW9uIHdyaXRlUGFja2VkU1ZhcmludChhcnIsIHBiZikgIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZVNWYXJpbnQoYXJyW2ldKTsgIH1cbmZ1bmN0aW9uIHdyaXRlUGFja2VkRmxvYXQoYXJyLCBwYmYpICAgIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZUZsb2F0KGFycltpXSk7ICAgIH1cbmZ1bmN0aW9uIHdyaXRlUGFja2VkRG91YmxlKGFyciwgcGJmKSAgIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZURvdWJsZShhcnJbaV0pOyAgIH1cbmZ1bmN0aW9uIHdyaXRlUGFja2VkQm9vbGVhbihhcnIsIHBiZikgIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZUJvb2xlYW4oYXJyW2ldKTsgIH1cbmZ1bmN0aW9uIHdyaXRlUGFja2VkRml4ZWQzMihhcnIsIHBiZikgIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZUZpeGVkMzIoYXJyW2ldKTsgIH1cbmZ1bmN0aW9uIHdyaXRlUGFja2VkU0ZpeGVkMzIoYXJyLCBwYmYpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZVNGaXhlZDMyKGFycltpXSk7IH1cbmZ1bmN0aW9uIHdyaXRlUGFja2VkRml4ZWQ2NChhcnIsIHBiZikgIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZUZpeGVkNjQoYXJyW2ldKTsgIH1cbmZ1bmN0aW9uIHdyaXRlUGFja2VkU0ZpeGVkNjQoYXJyLCBwYmYpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHBiZi53cml0ZVNGaXhlZDY0KGFycltpXSk7IH1cblxuLy8gQnVmZmVyIGNvZGUgYmVsb3cgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlciwgTUlULWxpY2Vuc2VkXG5cbmZ1bmN0aW9uIHJlYWRVSW50MzIoYnVmLCBwb3MpIHtcbiAgICByZXR1cm4gKChidWZbcG9zXSkgfFxuICAgICAgICAoYnVmW3BvcyArIDFdIDw8IDgpIHxcbiAgICAgICAgKGJ1Zltwb3MgKyAyXSA8PCAxNikpICtcbiAgICAgICAgKGJ1Zltwb3MgKyAzXSAqIDB4MTAwMDAwMCk7XG59XG5cbmZ1bmN0aW9uIHdyaXRlSW50MzIoYnVmLCB2YWwsIHBvcykge1xuICAgIGJ1Zltwb3NdID0gdmFsO1xuICAgIGJ1Zltwb3MgKyAxXSA9ICh2YWwgPj4+IDgpO1xuICAgIGJ1Zltwb3MgKyAyXSA9ICh2YWwgPj4+IDE2KTtcbiAgICBidWZbcG9zICsgM10gPSAodmFsID4+PiAyNCk7XG59XG5cbmZ1bmN0aW9uIHJlYWRJbnQzMihidWYsIHBvcykge1xuICAgIHJldHVybiAoKGJ1Zltwb3NdKSB8XG4gICAgICAgIChidWZbcG9zICsgMV0gPDwgOCkgfFxuICAgICAgICAoYnVmW3BvcyArIDJdIDw8IDE2KSkgK1xuICAgICAgICAoYnVmW3BvcyArIDNdIDw8IDI0KTtcbn1cblxuZnVuY3Rpb24gcmVhZFV0ZjgoYnVmLCBwb3MsIGVuZCkge1xuICAgIHZhciBzdHIgPSAnJztcbiAgICB2YXIgaSA9IHBvcztcblxuICAgIHdoaWxlIChpIDwgZW5kKSB7XG4gICAgICAgIHZhciBiMCA9IGJ1ZltpXTtcbiAgICAgICAgdmFyIGMgPSBudWxsOyAvLyBjb2RlcG9pbnRcbiAgICAgICAgdmFyIGJ5dGVzUGVyU2VxdWVuY2UgPVxuICAgICAgICAgICAgYjAgPiAweEVGID8gNCA6XG4gICAgICAgICAgICBiMCA+IDB4REYgPyAzIDpcbiAgICAgICAgICAgIGIwID4gMHhCRiA/IDIgOiAxO1xuXG4gICAgICAgIGlmIChpICsgYnl0ZXNQZXJTZXF1ZW5jZSA+IGVuZCkgYnJlYWs7XG5cbiAgICAgICAgdmFyIGIxLCBiMiwgYjM7XG5cbiAgICAgICAgaWYgKGJ5dGVzUGVyU2VxdWVuY2UgPT09IDEpIHtcbiAgICAgICAgICAgIGlmIChiMCA8IDB4ODApIHtcbiAgICAgICAgICAgICAgICBjID0gYjA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoYnl0ZXNQZXJTZXF1ZW5jZSA9PT0gMikge1xuICAgICAgICAgICAgYjEgPSBidWZbaSArIDFdO1xuICAgICAgICAgICAgaWYgKChiMSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICAgICAgYyA9IChiMCAmIDB4MUYpIDw8IDB4NiB8IChiMSAmIDB4M0YpO1xuICAgICAgICAgICAgICAgIGlmIChjIDw9IDB4N0YpIHtcbiAgICAgICAgICAgICAgICAgICAgYyA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGJ5dGVzUGVyU2VxdWVuY2UgPT09IDMpIHtcbiAgICAgICAgICAgIGIxID0gYnVmW2kgKyAxXTtcbiAgICAgICAgICAgIGIyID0gYnVmW2kgKyAyXTtcbiAgICAgICAgICAgIGlmICgoYjEgJiAweEMwKSA9PT0gMHg4MCAmJiAoYjIgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgICAgIGMgPSAoYjAgJiAweEYpIDw8IDB4QyB8IChiMSAmIDB4M0YpIDw8IDB4NiB8IChiMiAmIDB4M0YpO1xuICAgICAgICAgICAgICAgIGlmIChjIDw9IDB4N0ZGIHx8IChjID49IDB4RDgwMCAmJiBjIDw9IDB4REZGRikpIHtcbiAgICAgICAgICAgICAgICAgICAgYyA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGJ5dGVzUGVyU2VxdWVuY2UgPT09IDQpIHtcbiAgICAgICAgICAgIGIxID0gYnVmW2kgKyAxXTtcbiAgICAgICAgICAgIGIyID0gYnVmW2kgKyAyXTtcbiAgICAgICAgICAgIGIzID0gYnVmW2kgKyAzXTtcbiAgICAgICAgICAgIGlmICgoYjEgJiAweEMwKSA9PT0gMHg4MCAmJiAoYjIgJiAweEMwKSA9PT0gMHg4MCAmJiAoYjMgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgICAgIGMgPSAoYjAgJiAweEYpIDw8IDB4MTIgfCAoYjEgJiAweDNGKSA8PCAweEMgfCAoYjIgJiAweDNGKSA8PCAweDYgfCAoYjMgJiAweDNGKTtcbiAgICAgICAgICAgICAgICBpZiAoYyA8PSAweEZGRkYgfHwgYyA+PSAweDExMDAwMCkge1xuICAgICAgICAgICAgICAgICAgICBjID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgYyA9IDB4RkZGRDtcbiAgICAgICAgICAgIGJ5dGVzUGVyU2VxdWVuY2UgPSAxO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoYyA+IDB4RkZGRikge1xuICAgICAgICAgICAgYyAtPSAweDEwMDAwO1xuICAgICAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYyA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMCk7XG4gICAgICAgICAgICBjID0gMHhEQzAwIHwgYyAmIDB4M0ZGO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYyk7XG4gICAgICAgIGkgKz0gYnl0ZXNQZXJTZXF1ZW5jZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyO1xufVxuXG5mdW5jdGlvbiByZWFkVXRmOFRleHREZWNvZGVyKGJ1ZiwgcG9zLCBlbmQpIHtcbiAgICByZXR1cm4gdXRmOFRleHREZWNvZGVyLmRlY29kZShidWYuc3ViYXJyYXkocG9zLCBlbmQpKTtcbn1cblxuZnVuY3Rpb24gd3JpdGVVdGY4KGJ1Ziwgc3RyLCBwb3MpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgYywgbGVhZDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgICAgICBjID0gc3RyLmNoYXJDb2RlQXQoaSk7IC8vIGNvZGUgcG9pbnRcblxuICAgICAgICBpZiAoYyA+IDB4RDdGRiAmJiBjIDwgMHhFMDAwKSB7XG4gICAgICAgICAgICBpZiAobGVhZCkge1xuICAgICAgICAgICAgICAgIGlmIChjIDwgMHhEQzAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1Zltwb3MrK10gPSAweEVGO1xuICAgICAgICAgICAgICAgICAgICBidWZbcG9zKytdID0gMHhCRjtcbiAgICAgICAgICAgICAgICAgICAgYnVmW3BvcysrXSA9IDB4QkQ7XG4gICAgICAgICAgICAgICAgICAgIGxlYWQgPSBjO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjID0gbGVhZCAtIDB4RDgwMCA8PCAxMCB8IGMgLSAweERDMDAgfCAweDEwMDAwO1xuICAgICAgICAgICAgICAgICAgICBsZWFkID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChjID4gMHhEQkZGIHx8IChpICsgMSA9PT0gc3RyLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYnVmW3BvcysrXSA9IDB4RUY7XG4gICAgICAgICAgICAgICAgICAgIGJ1Zltwb3MrK10gPSAweEJGO1xuICAgICAgICAgICAgICAgICAgICBidWZbcG9zKytdID0gMHhCRDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsZWFkID0gYztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobGVhZCkge1xuICAgICAgICAgICAgYnVmW3BvcysrXSA9IDB4RUY7XG4gICAgICAgICAgICBidWZbcG9zKytdID0gMHhCRjtcbiAgICAgICAgICAgIGJ1Zltwb3MrK10gPSAweEJEO1xuICAgICAgICAgICAgbGVhZCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYyA8IDB4ODApIHtcbiAgICAgICAgICAgIGJ1Zltwb3MrK10gPSBjO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGMgPCAweDgwMCkge1xuICAgICAgICAgICAgICAgIGJ1Zltwb3MrK10gPSBjID4+IDB4NiB8IDB4QzA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChjIDwgMHgxMDAwMCkge1xuICAgICAgICAgICAgICAgICAgICBidWZbcG9zKytdID0gYyA+PiAweEMgfCAweEUwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1Zltwb3MrK10gPSBjID4+IDB4MTIgfCAweEYwO1xuICAgICAgICAgICAgICAgICAgICBidWZbcG9zKytdID0gYyA+PiAweEMgJiAweDNGIHwgMHg4MDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnVmW3BvcysrXSA9IGMgPj4gMHg2ICYgMHgzRiB8IDB4ODA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidWZbcG9zKytdID0gYyAmIDB4M0YgfCAweDgwO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwb3M7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge0FscGhhSW1hZ2V9IGZyb20gJy4uL3V0aWwvaW1hZ2UnO1xuXG5pbXBvcnQgUHJvdG9idWYgZnJvbSAncGJmJztcbmNvbnN0IGJvcmRlciA9IDM7XG5cbmltcG9ydCB0eXBlIHtTdHlsZUdseXBofSBmcm9tICcuL3N0eWxlX2dseXBoJztcblxuZnVuY3Rpb24gcmVhZEZvbnRzdGFja3ModGFnOiBudW1iZXIsIGdseXBoczogQXJyYXk8U3R5bGVHbHlwaD4sIHBiZjogUHJvdG9idWYpIHtcbiAgICBpZiAodGFnID09PSAxKSB7XG4gICAgICAgIHBiZi5yZWFkTWVzc2FnZShyZWFkRm9udHN0YWNrLCBnbHlwaHMpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcmVhZEZvbnRzdGFjayh0YWc6IG51bWJlciwgZ2x5cGhzOiBBcnJheTxTdHlsZUdseXBoPiwgcGJmOiBQcm90b2J1Zikge1xuICAgIGlmICh0YWcgPT09IDMpIHtcbiAgICAgICAgY29uc3Qge2lkLCBiaXRtYXAsIHdpZHRoLCBoZWlnaHQsIGxlZnQsIHRvcCwgYWR2YW5jZX0gPSBwYmYucmVhZE1lc3NhZ2UocmVhZEdseXBoLCB7fSk7XG4gICAgICAgIGdseXBocy5wdXNoKHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgYml0bWFwOiBuZXcgQWxwaGFJbWFnZSh7XG4gICAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoICsgMiAqIGJvcmRlcixcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCArIDIgKiBib3JkZXJcbiAgICAgICAgICAgIH0sIGJpdG1hcCksXG4gICAgICAgICAgICBtZXRyaWNzOiB7d2lkdGgsIGhlaWdodCwgbGVmdCwgdG9wLCBhZHZhbmNlfVxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRHbHlwaCh0YWc6IG51bWJlciwgZ2x5cGg6IE9iamVjdCwgcGJmOiBQcm90b2J1Zikge1xuICAgIGlmICh0YWcgPT09IDEpIGdseXBoLmlkID0gcGJmLnJlYWRWYXJpbnQoKTtcbiAgICBlbHNlIGlmICh0YWcgPT09IDIpIGdseXBoLmJpdG1hcCA9IHBiZi5yZWFkQnl0ZXMoKTtcbiAgICBlbHNlIGlmICh0YWcgPT09IDMpIGdseXBoLndpZHRoID0gcGJmLnJlYWRWYXJpbnQoKTtcbiAgICBlbHNlIGlmICh0YWcgPT09IDQpIGdseXBoLmhlaWdodCA9IHBiZi5yZWFkVmFyaW50KCk7XG4gICAgZWxzZSBpZiAodGFnID09PSA1KSBnbHlwaC5sZWZ0ID0gcGJmLnJlYWRTVmFyaW50KCk7XG4gICAgZWxzZSBpZiAodGFnID09PSA2KSBnbHlwaC50b3AgPSBwYmYucmVhZFNWYXJpbnQoKTtcbiAgICBlbHNlIGlmICh0YWcgPT09IDcpIGdseXBoLmFkdmFuY2UgPSBwYmYucmVhZFZhcmludCgpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoZGF0YTogQXJyYXlCdWZmZXIgfCBVaW50OEFycmF5KTogQXJyYXk8U3R5bGVHbHlwaD4ge1xuICAgIHJldHVybiBuZXcgUHJvdG9idWYoZGF0YSkucmVhZEZpZWxkcyhyZWFkRm9udHN0YWNrcywgW10pO1xufVxuXG5leHBvcnQgY29uc3QgR0xZUEhfUEJGX0JPUkRFUiA9IGJvcmRlcjtcbiIsIlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcG90cGFjayhib3hlcykge1xuXG4gICAgLy8gY2FsY3VsYXRlIHRvdGFsIGJveCBhcmVhIGFuZCBtYXhpbXVtIGJveCB3aWR0aFxuICAgIGxldCBhcmVhID0gMDtcbiAgICBsZXQgbWF4V2lkdGggPSAwO1xuXG4gICAgZm9yIChjb25zdCBib3ggb2YgYm94ZXMpIHtcbiAgICAgICAgYXJlYSArPSBib3gudyAqIGJveC5oO1xuICAgICAgICBtYXhXaWR0aCA9IE1hdGgubWF4KG1heFdpZHRoLCBib3gudyk7XG4gICAgfVxuXG4gICAgLy8gc29ydCB0aGUgYm94ZXMgZm9yIGluc2VydGlvbiBieSBoZWlnaHQsIGRlc2NlbmRpbmdcbiAgICBib3hlcy5zb3J0KChhLCBiKSA9PiBiLmggLSBhLmgpO1xuXG4gICAgLy8gYWltIGZvciBhIHNxdWFyaXNoIHJlc3VsdGluZyBjb250YWluZXIsXG4gICAgLy8gc2xpZ2h0bHkgYWRqdXN0ZWQgZm9yIHN1Yi0xMDAlIHNwYWNlIHV0aWxpemF0aW9uXG4gICAgY29uc3Qgc3RhcnRXaWR0aCA9IE1hdGgubWF4KE1hdGguY2VpbChNYXRoLnNxcnQoYXJlYSAvIDAuOTUpKSwgbWF4V2lkdGgpO1xuXG4gICAgLy8gc3RhcnQgd2l0aCBhIHNpbmdsZSBlbXB0eSBzcGFjZSwgdW5ib3VuZGVkIGF0IHRoZSBib3R0b21cbiAgICBjb25zdCBzcGFjZXMgPSBbe3g6IDAsIHk6IDAsIHc6IHN0YXJ0V2lkdGgsIGg6IEluZmluaXR5fV07XG5cbiAgICBsZXQgd2lkdGggPSAwO1xuICAgIGxldCBoZWlnaHQgPSAwO1xuXG4gICAgZm9yIChjb25zdCBib3ggb2YgYm94ZXMpIHtcbiAgICAgICAgLy8gbG9vayB0aHJvdWdoIHNwYWNlcyBiYWNrd2FyZHMgc28gdGhhdCB3ZSBjaGVjayBzbWFsbGVyIHNwYWNlcyBmaXJzdFxuICAgICAgICBmb3IgKGxldCBpID0gc3BhY2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBzcGFjZSA9IHNwYWNlc1tpXTtcblxuICAgICAgICAgICAgLy8gbG9vayBmb3IgZW1wdHkgc3BhY2VzIHRoYXQgY2FuIGFjY29tbW9kYXRlIHRoZSBjdXJyZW50IGJveFxuICAgICAgICAgICAgaWYgKGJveC53ID4gc3BhY2UudyB8fCBib3guaCA+IHNwYWNlLmgpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAvLyBmb3VuZCB0aGUgc3BhY2U7IGFkZCB0aGUgYm94IHRvIGl0cyB0b3AtbGVmdCBjb3JuZXJcbiAgICAgICAgICAgIC8vIHwtLS0tLS0tfC0tLS0tLS18XG4gICAgICAgICAgICAvLyB8ICBib3ggIHwgICAgICAgfFxuICAgICAgICAgICAgLy8gfF9fX19fX198ICAgICAgIHxcbiAgICAgICAgICAgIC8vIHwgICAgICAgICBzcGFjZSB8XG4gICAgICAgICAgICAvLyB8X19fX19fX19fX19fX19ffFxuICAgICAgICAgICAgYm94LnggPSBzcGFjZS54O1xuICAgICAgICAgICAgYm94LnkgPSBzcGFjZS55O1xuXG4gICAgICAgICAgICBoZWlnaHQgPSBNYXRoLm1heChoZWlnaHQsIGJveC55ICsgYm94LmgpO1xuICAgICAgICAgICAgd2lkdGggPSBNYXRoLm1heCh3aWR0aCwgYm94LnggKyBib3gudyk7XG5cbiAgICAgICAgICAgIGlmIChib3gudyA9PT0gc3BhY2UudyAmJiBib3guaCA9PT0gc3BhY2UuaCkge1xuICAgICAgICAgICAgICAgIC8vIHNwYWNlIG1hdGNoZXMgdGhlIGJveCBleGFjdGx5OyByZW1vdmUgaXRcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0ID0gc3BhY2VzLnBvcCgpO1xuICAgICAgICAgICAgICAgIGlmIChpIDwgc3BhY2VzLmxlbmd0aCkgc3BhY2VzW2ldID0gbGFzdDtcblxuICAgICAgICAgICAgfSBlbHNlIGlmIChib3guaCA9PT0gc3BhY2UuaCkge1xuICAgICAgICAgICAgICAgIC8vIHNwYWNlIG1hdGNoZXMgdGhlIGJveCBoZWlnaHQ7IHVwZGF0ZSBpdCBhY2NvcmRpbmdseVxuICAgICAgICAgICAgICAgIC8vIHwtLS0tLS0tfC0tLS0tLS0tLS0tLS0tLXxcbiAgICAgICAgICAgICAgICAvLyB8ICBib3ggIHwgdXBkYXRlZCBzcGFjZSB8XG4gICAgICAgICAgICAgICAgLy8gfF9fX19fX198X19fX19fX19fX19fX19ffFxuICAgICAgICAgICAgICAgIHNwYWNlLnggKz0gYm94Lnc7XG4gICAgICAgICAgICAgICAgc3BhY2UudyAtPSBib3gudztcblxuICAgICAgICAgICAgfSBlbHNlIGlmIChib3gudyA9PT0gc3BhY2Uudykge1xuICAgICAgICAgICAgICAgIC8vIHNwYWNlIG1hdGNoZXMgdGhlIGJveCB3aWR0aDsgdXBkYXRlIGl0IGFjY29yZGluZ2x5XG4gICAgICAgICAgICAgICAgLy8gfC0tLS0tLS0tLS0tLS0tLXxcbiAgICAgICAgICAgICAgICAvLyB8ICAgICAgYm94ICAgICAgfFxuICAgICAgICAgICAgICAgIC8vIHxfX19fX19fX19fX19fX198XG4gICAgICAgICAgICAgICAgLy8gfCB1cGRhdGVkIHNwYWNlIHxcbiAgICAgICAgICAgICAgICAvLyB8X19fX19fX19fX19fX19ffFxuICAgICAgICAgICAgICAgIHNwYWNlLnkgKz0gYm94Lmg7XG4gICAgICAgICAgICAgICAgc3BhY2UuaCAtPSBib3guaDtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2UgdGhlIGJveCBzcGxpdHMgdGhlIHNwYWNlIGludG8gdHdvIHNwYWNlc1xuICAgICAgICAgICAgICAgIC8vIHwtLS0tLS0tfC0tLS0tLS0tLS0tfFxuICAgICAgICAgICAgICAgIC8vIHwgIGJveCAgfCBuZXcgc3BhY2UgfFxuICAgICAgICAgICAgICAgIC8vIHxfX19fX19ffF9fX19fX19fX19ffFxuICAgICAgICAgICAgICAgIC8vIHwgdXBkYXRlZCBzcGFjZSAgICAgfFxuICAgICAgICAgICAgICAgIC8vIHxfX19fX19fX19fX19fX19fX19ffFxuICAgICAgICAgICAgICAgIHNwYWNlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgeDogc3BhY2UueCArIGJveC53LFxuICAgICAgICAgICAgICAgICAgICB5OiBzcGFjZS55LFxuICAgICAgICAgICAgICAgICAgICB3OiBzcGFjZS53IC0gYm94LncsXG4gICAgICAgICAgICAgICAgICAgIGg6IGJveC5oXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc3BhY2UueSArPSBib3guaDtcbiAgICAgICAgICAgICAgICBzcGFjZS5oIC09IGJveC5oO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB3OiB3aWR0aCwgLy8gY29udGFpbmVyIHdpZHRoXG4gICAgICAgIGg6IGhlaWdodCwgLy8gY29udGFpbmVyIGhlaWdodFxuICAgICAgICBmaWxsOiAoYXJlYSAvICh3aWR0aCAqIGhlaWdodCkpIHx8IDAgLy8gc3BhY2UgdXRpbGl6YXRpb25cbiAgICB9O1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtSR0JBSW1hZ2V9IGZyb20gJy4uL3V0aWwvaW1hZ2UnO1xuaW1wb3J0IHtyZWdpc3Rlcn0gZnJvbSAnLi4vdXRpbC93ZWJfd29ya2VyX3RyYW5zZmVyJztcbmltcG9ydCBwb3RwYWNrIGZyb20gJ3BvdHBhY2snO1xuXG5pbXBvcnQgdHlwZSB7U3R5bGVJbWFnZX0gZnJvbSAnLi4vc3R5bGUvc3R5bGVfaW1hZ2UnO1xuaW1wb3J0IHR5cGUgSW1hZ2VNYW5hZ2VyIGZyb20gJy4vaW1hZ2VfbWFuYWdlcic7XG5pbXBvcnQgdHlwZSBUZXh0dXJlIGZyb20gJy4vdGV4dHVyZSc7XG5cbmNvbnN0IElNQUdFX1BBRERJTkc6IG51bWJlciA9IDE7XG5leHBvcnQge0lNQUdFX1BBRERJTkd9O1xuXG50eXBlIFJlY3QgPSB7XG4gICAgeDogbnVtYmVyLFxuICAgIHk6IG51bWJlcixcbiAgICB3OiBudW1iZXIsXG4gICAgaDogbnVtYmVyXG59O1xuXG5leHBvcnQgY2xhc3MgSW1hZ2VQb3NpdGlvbiB7XG4gICAgcGFkZGVkUmVjdDogUmVjdDtcbiAgICBwaXhlbFJhdGlvOiBudW1iZXI7XG4gICAgdmVyc2lvbjogbnVtYmVyO1xuICAgIHN0cmV0Y2hZOiA/QXJyYXk8W251bWJlciwgbnVtYmVyXT47XG4gICAgc3RyZXRjaFg6ID9BcnJheTxbbnVtYmVyLCBudW1iZXJdPjtcbiAgICBjb250ZW50OiA/W251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG5cbiAgICBjb25zdHJ1Y3RvcihwYWRkZWRSZWN0OiBSZWN0LCB7cGl4ZWxSYXRpbywgdmVyc2lvbiwgc3RyZXRjaFgsIHN0cmV0Y2hZLCBjb250ZW50fTogU3R5bGVJbWFnZSkge1xuICAgICAgICB0aGlzLnBhZGRlZFJlY3QgPSBwYWRkZWRSZWN0O1xuICAgICAgICB0aGlzLnBpeGVsUmF0aW8gPSBwaXhlbFJhdGlvO1xuICAgICAgICB0aGlzLnN0cmV0Y2hYID0gc3RyZXRjaFg7XG4gICAgICAgIHRoaXMuc3RyZXRjaFkgPSBzdHJldGNoWTtcbiAgICAgICAgdGhpcy5jb250ZW50ID0gY29udGVudDtcbiAgICAgICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICB9XG5cbiAgICBnZXQgdGwoKTogW251bWJlciwgbnVtYmVyXSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB0aGlzLnBhZGRlZFJlY3QueCArIElNQUdFX1BBRERJTkcsXG4gICAgICAgICAgICB0aGlzLnBhZGRlZFJlY3QueSArIElNQUdFX1BBRERJTkdcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBnZXQgYnIoKTogW251bWJlciwgbnVtYmVyXSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB0aGlzLnBhZGRlZFJlY3QueCArIHRoaXMucGFkZGVkUmVjdC53IC0gSU1BR0VfUEFERElORyxcbiAgICAgICAgICAgIHRoaXMucGFkZGVkUmVjdC55ICsgdGhpcy5wYWRkZWRSZWN0LmggLSBJTUFHRV9QQURESU5HXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgZ2V0IHRsYnIoKTogQXJyYXk8bnVtYmVyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRsLmNvbmNhdCh0aGlzLmJyKTtcbiAgICB9XG5cbiAgICBnZXQgZGlzcGxheVNpemUoKTogW251bWJlciwgbnVtYmVyXSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAodGhpcy5wYWRkZWRSZWN0LncgLSBJTUFHRV9QQURESU5HICogMikgLyB0aGlzLnBpeGVsUmF0aW8sXG4gICAgICAgICAgICAodGhpcy5wYWRkZWRSZWN0LmggLSBJTUFHRV9QQURESU5HICogMikgLyB0aGlzLnBpeGVsUmF0aW9cbiAgICAgICAgXTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEltYWdlQXRsYXMge1xuICAgIGltYWdlOiBSR0JBSW1hZ2U7XG4gICAgaWNvblBvc2l0aW9uczoge1tfOiBzdHJpbmddOiBJbWFnZVBvc2l0aW9ufTtcbiAgICBwYXR0ZXJuUG9zaXRpb25zOiB7W186IHN0cmluZ106IEltYWdlUG9zaXRpb259O1xuICAgIGhhdmVSZW5kZXJDYWxsYmFja3M6IEFycmF5PHN0cmluZz47XG4gICAgdXBsb2FkZWQ6ID9ib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoaWNvbnM6IHtbXzogc3RyaW5nXTogU3R5bGVJbWFnZX0sIHBhdHRlcm5zOiB7W186IHN0cmluZ106IFN0eWxlSW1hZ2V9KSB7XG4gICAgICAgIGNvbnN0IGljb25Qb3NpdGlvbnMgPSB7fSwgcGF0dGVyblBvc2l0aW9ucyA9IHt9O1xuICAgICAgICB0aGlzLmhhdmVSZW5kZXJDYWxsYmFja3MgPSBbXTtcblxuICAgICAgICBjb25zdCBiaW5zID0gW107XG5cbiAgICAgICAgdGhpcy5hZGRJbWFnZXMoaWNvbnMsIGljb25Qb3NpdGlvbnMsIGJpbnMpO1xuICAgICAgICB0aGlzLmFkZEltYWdlcyhwYXR0ZXJucywgcGF0dGVyblBvc2l0aW9ucywgYmlucyk7XG5cbiAgICAgICAgY29uc3Qge3csIGh9ID0gcG90cGFjayhiaW5zKTtcbiAgICAgICAgY29uc3QgaW1hZ2UgPSBuZXcgUkdCQUltYWdlKHt3aWR0aDogdyB8fCAxLCBoZWlnaHQ6IGggfHwgMX0pO1xuXG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gaWNvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNyYyA9IGljb25zW2lkXTtcbiAgICAgICAgICAgIGNvbnN0IGJpbiA9IGljb25Qb3NpdGlvbnNbaWRdLnBhZGRlZFJlY3Q7XG4gICAgICAgICAgICBSR0JBSW1hZ2UuY29weShzcmMuZGF0YSwgaW1hZ2UsIHt4OiAwLCB5OiAwfSwge3g6IGJpbi54ICsgSU1BR0VfUEFERElORywgeTogYmluLnkgKyBJTUFHRV9QQURESU5HfSwgc3JjLmRhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiBwYXR0ZXJucykge1xuICAgICAgICAgICAgY29uc3Qgc3JjID0gcGF0dGVybnNbaWRdO1xuICAgICAgICAgICAgY29uc3QgYmluID0gcGF0dGVyblBvc2l0aW9uc1tpZF0ucGFkZGVkUmVjdDtcbiAgICAgICAgICAgIGNvbnN0IHggPSBiaW4ueCArIElNQUdFX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgeSA9IGJpbi55ICsgSU1BR0VfUEFERElORyxcbiAgICAgICAgICAgICAgICB3ID0gc3JjLmRhdGEud2lkdGgsXG4gICAgICAgICAgICAgICAgaCA9IHNyYy5kYXRhLmhlaWdodDtcblxuICAgICAgICAgICAgUkdCQUltYWdlLmNvcHkoc3JjLmRhdGEsIGltYWdlLCB7eDogMCwgeTogMH0sIHt4LCB5fSwgc3JjLmRhdGEpO1xuICAgICAgICAgICAgLy8gQWRkIDEgcGl4ZWwgd3JhcHBlZCBwYWRkaW5nIG9uIGVhY2ggc2lkZSBvZiB0aGUgaW1hZ2UuXG4gICAgICAgICAgICBSR0JBSW1hZ2UuY29weShzcmMuZGF0YSwgaW1hZ2UsIHt4OiAwLCB5OiBoIC0gMX0sIHt4LCB5OiB5IC0gMX0sIHt3aWR0aDogdywgaGVpZ2h0OiAxfSk7IC8vIFRcbiAgICAgICAgICAgIFJHQkFJbWFnZS5jb3B5KHNyYy5kYXRhLCBpbWFnZSwge3g6IDAsIHk6ICAgICAwfSwge3gsIHk6IHkgKyBofSwge3dpZHRoOiB3LCBoZWlnaHQ6IDF9KTsgLy8gQlxuICAgICAgICAgICAgUkdCQUltYWdlLmNvcHkoc3JjLmRhdGEsIGltYWdlLCB7eDogdyAtIDEsIHk6IDB9LCB7eDogeCAtIDEsIHl9LCB7d2lkdGg6IDEsIGhlaWdodDogaH0pOyAvLyBMXG4gICAgICAgICAgICBSR0JBSW1hZ2UuY29weShzcmMuZGF0YSwgaW1hZ2UsIHt4OiAwLCAgICAgeTogMH0sIHt4OiB4ICsgdywgeX0sIHt3aWR0aDogMSwgaGVpZ2h0OiBofSk7IC8vIFJcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW1hZ2UgPSBpbWFnZTtcbiAgICAgICAgdGhpcy5pY29uUG9zaXRpb25zID0gaWNvblBvc2l0aW9ucztcbiAgICAgICAgdGhpcy5wYXR0ZXJuUG9zaXRpb25zID0gcGF0dGVyblBvc2l0aW9ucztcbiAgICB9XG5cbiAgICBhZGRJbWFnZXMoaW1hZ2VzOiB7W186IHN0cmluZ106IFN0eWxlSW1hZ2V9LCBwb3NpdGlvbnM6IHtbXzogc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0sIGJpbnM6IEFycmF5PFJlY3Q+KSB7XG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gaW1hZ2VzKSB7XG4gICAgICAgICAgICBjb25zdCBzcmMgPSBpbWFnZXNbaWRdO1xuICAgICAgICAgICAgY29uc3QgYmluID0ge1xuICAgICAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICAgICAgeTogMCxcbiAgICAgICAgICAgICAgICB3OiBzcmMuZGF0YS53aWR0aCArIDIgKiBJTUFHRV9QQURESU5HLFxuICAgICAgICAgICAgICAgIGg6IHNyYy5kYXRhLmhlaWdodCArIDIgKiBJTUFHRV9QQURESU5HLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJpbnMucHVzaChiaW4pO1xuICAgICAgICAgICAgcG9zaXRpb25zW2lkXSA9IG5ldyBJbWFnZVBvc2l0aW9uKGJpbiwgc3JjKTtcblxuICAgICAgICAgICAgaWYgKHNyYy5oYXNSZW5kZXJDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHRoaXMuaGF2ZVJlbmRlckNhbGxiYWNrcy5wdXNoKGlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHBhdGNoVXBkYXRlZEltYWdlcyhpbWFnZU1hbmFnZXI6IEltYWdlTWFuYWdlciwgdGV4dHVyZTogVGV4dHVyZSkge1xuICAgICAgICBpbWFnZU1hbmFnZXIuZGlzcGF0Y2hSZW5kZXJDYWxsYmFja3ModGhpcy5oYXZlUmVuZGVyQ2FsbGJhY2tzKTtcbiAgICAgICAgZm9yIChjb25zdCBuYW1lIGluIGltYWdlTWFuYWdlci51cGRhdGVkSW1hZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLnBhdGNoVXBkYXRlZEltYWdlKHRoaXMuaWNvblBvc2l0aW9uc1tuYW1lXSwgaW1hZ2VNYW5hZ2VyLmdldEltYWdlKG5hbWUpLCB0ZXh0dXJlKTtcbiAgICAgICAgICAgIHRoaXMucGF0Y2hVcGRhdGVkSW1hZ2UodGhpcy5wYXR0ZXJuUG9zaXRpb25zW25hbWVdLCBpbWFnZU1hbmFnZXIuZ2V0SW1hZ2UobmFtZSksIHRleHR1cmUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcGF0Y2hVcGRhdGVkSW1hZ2UocG9zaXRpb246ID9JbWFnZVBvc2l0aW9uLCBpbWFnZTogP1N0eWxlSW1hZ2UsIHRleHR1cmU6IFRleHR1cmUpIHtcbiAgICAgICAgaWYgKCFwb3NpdGlvbiB8fCAhaW1hZ2UpIHJldHVybjtcblxuICAgICAgICBpZiAocG9zaXRpb24udmVyc2lvbiA9PT0gaW1hZ2UudmVyc2lvbikgcmV0dXJuO1xuXG4gICAgICAgIHBvc2l0aW9uLnZlcnNpb24gPSBpbWFnZS52ZXJzaW9uO1xuICAgICAgICBjb25zdCBbeCwgeV0gPSBwb3NpdGlvbi50bDtcbiAgICAgICAgdGV4dHVyZS51cGRhdGUoaW1hZ2UuZGF0YSwgdW5kZWZpbmVkLCB7eCwgeX0pO1xuICAgIH1cblxufVxuXG5yZWdpc3RlcignSW1hZ2VQb3NpdGlvbicsIEltYWdlUG9zaXRpb24pO1xucmVnaXN0ZXIoJ0ltYWdlQXRsYXMnLCBJbWFnZUF0bGFzKTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7XG4gICAgY2hhckhhc1VwcmlnaHRWZXJ0aWNhbE9yaWVudGF0aW9uLFxuICAgIGNoYXJBbGxvd3NJZGVvZ3JhcGhpY0JyZWFraW5nLFxuICAgIGNoYXJJbkNvbXBsZXhTaGFwaW5nU2NyaXB0XG59IGZyb20gJy4uL3V0aWwvc2NyaXB0X2RldGVjdGlvbic7XG5pbXBvcnQgdmVydGljYWxpemVQdW5jdHVhdGlvbiBmcm9tICcuLi91dGlsL3ZlcnRpY2FsaXplX3B1bmN0dWF0aW9uJztcbmltcG9ydCB7cGx1Z2luIGFzIHJ0bFRleHRQbHVnaW59IGZyb20gJy4uL3NvdXJjZS9ydGxfdGV4dF9wbHVnaW4nO1xuaW1wb3J0IE9ORV9FTSBmcm9tICcuL29uZV9lbSc7XG5pbXBvcnQge3dhcm5PbmNlfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuXG5pbXBvcnQgdHlwZSB7U3R5bGVHbHlwaCwgR2x5cGhNZXRyaWNzfSBmcm9tICcuLi9zdHlsZS9zdHlsZV9nbHlwaCc7XG5pbXBvcnQge0dMWVBIX1BCRl9CT1JERVJ9IGZyb20gJy4uL3N0eWxlL3BhcnNlX2dseXBoX3BiZic7XG5pbXBvcnQgdHlwZSB7SW1hZ2VQb3NpdGlvbn0gZnJvbSAnLi4vcmVuZGVyL2ltYWdlX2F0bGFzJztcbmltcG9ydCB7SU1BR0VfUEFERElOR30gZnJvbSAnLi4vcmVuZGVyL2ltYWdlX2F0bGFzJztcbmltcG9ydCB0eXBlIHtSZWN0LCBHbHlwaFBvc2l0aW9ufSBmcm9tICcuLi9yZW5kZXIvZ2x5cGhfYXRsYXMnO1xuaW1wb3J0IEZvcm1hdHRlZCwge0Zvcm1hdHRlZFNlY3Rpb259IGZyb20gJy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9mb3JtYXR0ZWQnO1xuXG5jb25zdCBXcml0aW5nTW9kZSA9IHtcbiAgICBob3Jpem9udGFsOiAxLFxuICAgIHZlcnRpY2FsOiAyLFxuICAgIGhvcml6b250YWxPbmx5OiAzXG59O1xuXG5jb25zdCBTSEFQSU5HX0RFRkFVTFRfT0ZGU0VUID0gLTE3O1xuZXhwb3J0IHtzaGFwZVRleHQsIHNoYXBlSWNvbiwgZml0SWNvblRvVGV4dCwgZ2V0QW5jaG9yQWxpZ25tZW50LCBXcml0aW5nTW9kZSwgU0hBUElOR19ERUZBVUxUX09GRlNFVH07XG5cbi8vIFRoZSBwb3NpdGlvbiBvZiBhIGdseXBoIHJlbGF0aXZlIHRvIHRoZSB0ZXh0J3MgYW5jaG9yIHBvaW50LlxuZXhwb3J0IHR5cGUgUG9zaXRpb25lZEdseXBoID0ge1xuICAgIGdseXBoOiBudW1iZXIsXG4gICAgaW1hZ2VOYW1lOiBzdHJpbmcgfCBudWxsLFxuICAgIHg6IG51bWJlcixcbiAgICB5OiBudW1iZXIsXG4gICAgdmVydGljYWw6IGJvb2xlYW4sXG4gICAgc2NhbGU6IG51bWJlcixcbiAgICBmb250U3RhY2s6IHN0cmluZyxcbiAgICBzZWN0aW9uSW5kZXg6IG51bWJlcixcbiAgICBtZXRyaWNzOiBHbHlwaE1ldHJpY3MsXG4gICAgcmVjdDogUmVjdCB8IG51bGxcbn07XG5cbmV4cG9ydCB0eXBlIFBvc2l0aW9uZWRMaW5lID0ge1xuICAgIHBvc2l0aW9uZWRHbHlwaHM6IEFycmF5PFBvc2l0aW9uZWRHbHlwaD4sXG4gICAgbGluZU9mZnNldDogbnVtYmVyXG59O1xuXG4vLyBBIGNvbGxlY3Rpb24gb2YgcG9zaXRpb25lZCBnbHlwaHMgYW5kIHNvbWUgbWV0YWRhdGFcbmV4cG9ydCB0eXBlIFNoYXBpbmcgPSB7XG4gICAgcG9zaXRpb25lZExpbmVzOiBBcnJheTxQb3NpdGlvbmVkTGluZT4sXG4gICAgdG9wOiBudW1iZXIsXG4gICAgYm90dG9tOiBudW1iZXIsXG4gICAgbGVmdDogbnVtYmVyLFxuICAgIHJpZ2h0OiBudW1iZXIsXG4gICAgd3JpdGluZ01vZGU6IDEgfCAyLFxuICAgIHRleHQ6IHN0cmluZyxcbiAgICBpY29uc0luVGV4dDogYm9vbGVhbixcbiAgICB2ZXJ0aWNhbGl6YWJsZTogYm9vbGVhblxufTtcblxuZnVuY3Rpb24gaXNFbXB0eShwb3NpdGlvbmVkTGluZXM6IEFycmF5PFBvc2l0aW9uZWRMaW5lPikge1xuICAgIGZvciAoY29uc3QgbGluZSBvZiBwb3NpdGlvbmVkTGluZXMpIHtcbiAgICAgICAgaWYgKGxpbmUucG9zaXRpb25lZEdseXBocy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IHR5cGUgU3ltYm9sQW5jaG9yID0gJ2NlbnRlcicgfCAnbGVmdCcgfCAncmlnaHQnIHwgJ3RvcCcgfCAnYm90dG9tJyB8ICd0b3AtbGVmdCcgfCAndG9wLXJpZ2h0JyB8ICdib3R0b20tbGVmdCcgfCAnYm90dG9tLXJpZ2h0JztcbmV4cG9ydCB0eXBlIFRleHRKdXN0aWZ5ID0gJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnO1xuXG4vLyBNYXggbnVtYmVyIG9mIGltYWdlcyBpbiBsYWJlbCBpcyA2NDAxIFUrRTAwMMOiwoDCk1UrRjhGRiB0aGF0IGNvdmVyc1xuLy8gQmFzaWMgTXVsdGlsaW5ndWFsIFBsYW5lIFVuaWNvZGUgUHJpdmF0ZSBVc2UgQXJlYSAoUFVBKS5cbmNvbnN0IFBVQWJlZ2luID0gMHhFMDAwO1xuY29uc3QgUFVBZW5kID0gMHhGOEZGO1xuXG5jbGFzcyBTZWN0aW9uT3B0aW9ucyB7XG4gICAgLy8gVGV4dCBvcHRpb25zXG4gICAgc2NhbGU6IG51bWJlcjtcbiAgICBmb250U3RhY2s6IHN0cmluZztcbiAgICAvLyBJbWFnZSBvcHRpb25zXG4gICAgaW1hZ2VOYW1lOiBzdHJpbmcgfCBudWxsO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuc2NhbGUgPSAxLjA7XG4gICAgICAgIHRoaXMuZm9udFN0YWNrID0gXCJcIjtcbiAgICAgICAgdGhpcy5pbWFnZU5hbWUgPSBudWxsO1xuICAgIH1cblxuICAgIHN0YXRpYyBmb3JUZXh0KHNjYWxlOiBudW1iZXIgfCBudWxsLCBmb250U3RhY2s6IHN0cmluZykge1xuICAgICAgICBjb25zdCB0ZXh0T3B0aW9ucyA9IG5ldyBTZWN0aW9uT3B0aW9ucygpO1xuICAgICAgICB0ZXh0T3B0aW9ucy5zY2FsZSA9IHNjYWxlIHx8IDE7XG4gICAgICAgIHRleHRPcHRpb25zLmZvbnRTdGFjayA9IGZvbnRTdGFjaztcbiAgICAgICAgcmV0dXJuIHRleHRPcHRpb25zO1xuICAgIH1cblxuICAgIHN0YXRpYyBmb3JJbWFnZShpbWFnZU5hbWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBpbWFnZU9wdGlvbnMgPSBuZXcgU2VjdGlvbk9wdGlvbnMoKTtcbiAgICAgICAgaW1hZ2VPcHRpb25zLmltYWdlTmFtZSA9IGltYWdlTmFtZTtcbiAgICAgICAgcmV0dXJuIGltYWdlT3B0aW9ucztcbiAgICB9XG5cbn1cblxuY2xhc3MgVGFnZ2VkU3RyaW5nIHtcbiAgICB0ZXh0OiBzdHJpbmc7XG4gICAgc2VjdGlvbkluZGV4OiBBcnJheTxudW1iZXI+IC8vIG1hcHMgZWFjaCBjaGFyYWN0ZXIgaW4gJ3RleHQnIHRvIGl0cyBjb3JyZXNwb25kaW5nIGVudHJ5IGluICdzZWN0aW9ucydcbiAgICBzZWN0aW9uczogQXJyYXk8U2VjdGlvbk9wdGlvbnM+XG4gICAgaW1hZ2VTZWN0aW9uSUQ6IG51bWJlciB8IG51bGw7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy50ZXh0ID0gXCJcIjtcbiAgICAgICAgdGhpcy5zZWN0aW9uSW5kZXggPSBbXTtcbiAgICAgICAgdGhpcy5zZWN0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLmltYWdlU2VjdGlvbklEID0gbnVsbDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbUZlYXR1cmUodGV4dDogRm9ybWF0dGVkLCBkZWZhdWx0Rm9udFN0YWNrOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IFRhZ2dlZFN0cmluZygpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQuc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb24gPSB0ZXh0LnNlY3Rpb25zW2ldO1xuICAgICAgICAgICAgaWYgKCFzZWN0aW9uLmltYWdlKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmFkZFRleHRTZWN0aW9uKHNlY3Rpb24sIGRlZmF1bHRGb250U3RhY2spO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuYWRkSW1hZ2VTZWN0aW9uKHNlY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgbGVuZ3RoKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHQubGVuZ3RoO1xuICAgIH1cblxuICAgIGdldFNlY3Rpb24oaW5kZXg6IG51bWJlcik6IFNlY3Rpb25PcHRpb25zIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VjdGlvbnNbdGhpcy5zZWN0aW9uSW5kZXhbaW5kZXhdXTtcbiAgICB9XG5cbiAgICBnZXRTZWN0aW9uSW5kZXgoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlY3Rpb25JbmRleFtpbmRleF07XG4gICAgfVxuXG4gICAgZ2V0Q2hhckNvZGUoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHQuY2hhckNvZGVBdChpbmRleCk7XG4gICAgfVxuXG4gICAgdmVydGljYWxpemVQdW5jdHVhdGlvbigpIHtcbiAgICAgICAgdGhpcy50ZXh0ID0gdmVydGljYWxpemVQdW5jdHVhdGlvbih0aGlzLnRleHQpO1xuICAgIH1cblxuICAgIHRyaW0oKSB7XG4gICAgICAgIGxldCBiZWdpbm5pbmdXaGl0ZXNwYWNlID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7XG4gICAgICAgICAgICBpIDwgdGhpcy50ZXh0Lmxlbmd0aCAmJiB3aGl0ZXNwYWNlW3RoaXMudGV4dC5jaGFyQ29kZUF0KGkpXTtcbiAgICAgICAgICAgIGkrKykge1xuICAgICAgICAgICAgYmVnaW5uaW5nV2hpdGVzcGFjZSsrO1xuICAgICAgICB9XG4gICAgICAgIGxldCB0cmFpbGluZ1doaXRlc3BhY2UgPSB0aGlzLnRleHQubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy50ZXh0Lmxlbmd0aCAtIDE7XG4gICAgICAgICAgICBpID49IDAgJiYgaSA+PSBiZWdpbm5pbmdXaGl0ZXNwYWNlICYmIHdoaXRlc3BhY2VbdGhpcy50ZXh0LmNoYXJDb2RlQXQoaSldO1xuICAgICAgICAgICAgaS0tKSB7XG4gICAgICAgICAgICB0cmFpbGluZ1doaXRlc3BhY2UtLTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRleHQgPSB0aGlzLnRleHQuc3Vic3RyaW5nKGJlZ2lubmluZ1doaXRlc3BhY2UsIHRyYWlsaW5nV2hpdGVzcGFjZSk7XG4gICAgICAgIHRoaXMuc2VjdGlvbkluZGV4ID0gdGhpcy5zZWN0aW9uSW5kZXguc2xpY2UoYmVnaW5uaW5nV2hpdGVzcGFjZSwgdHJhaWxpbmdXaGl0ZXNwYWNlKTtcbiAgICB9XG5cbiAgICBzdWJzdHJpbmcoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBUYWdnZWRTdHJpbmcge1xuICAgICAgICBjb25zdCBzdWJzdHJpbmcgPSBuZXcgVGFnZ2VkU3RyaW5nKCk7XG4gICAgICAgIHN1YnN0cmluZy50ZXh0ID0gdGhpcy50ZXh0LnN1YnN0cmluZyhzdGFydCwgZW5kKTtcbiAgICAgICAgc3Vic3RyaW5nLnNlY3Rpb25JbmRleCA9IHRoaXMuc2VjdGlvbkluZGV4LnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAgICAgICBzdWJzdHJpbmcuc2VjdGlvbnMgPSB0aGlzLnNlY3Rpb25zO1xuICAgICAgICByZXR1cm4gc3Vic3RyaW5nO1xuICAgIH1cblxuICAgIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHQ7XG4gICAgfVxuXG4gICAgZ2V0TWF4U2NhbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlY3Rpb25JbmRleC5yZWR1Y2UoKG1heCwgaW5kZXgpID0+IE1hdGgubWF4KG1heCwgdGhpcy5zZWN0aW9uc1tpbmRleF0uc2NhbGUpLCAwKTtcbiAgICB9XG5cbiAgICBhZGRUZXh0U2VjdGlvbihzZWN0aW9uOiBGb3JtYXR0ZWRTZWN0aW9uLCBkZWZhdWx0Rm9udFN0YWNrOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy50ZXh0ICs9IHNlY3Rpb24udGV4dDtcbiAgICAgICAgdGhpcy5zZWN0aW9ucy5wdXNoKFNlY3Rpb25PcHRpb25zLmZvclRleHQoc2VjdGlvbi5zY2FsZSwgc2VjdGlvbi5mb250U3RhY2sgfHwgZGVmYXVsdEZvbnRTdGFjaykpO1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VjdGlvbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWN0aW9uLnRleHQubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHRoaXMuc2VjdGlvbkluZGV4LnB1c2goaW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkSW1hZ2VTZWN0aW9uKHNlY3Rpb246IEZvcm1hdHRlZFNlY3Rpb24pIHtcbiAgICAgICAgY29uc3QgaW1hZ2VOYW1lID0gc2VjdGlvbi5pbWFnZSA/IHNlY3Rpb24uaW1hZ2UubmFtZSA6ICcnO1xuICAgICAgICBpZiAoaW1hZ2VOYW1lLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgd2Fybk9uY2UoYENhbid0IGFkZCBGb3JtYXR0ZWRTZWN0aW9uIHdpdGggYW4gZW1wdHkgaW1hZ2UuYCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXh0SW1hZ2VTZWN0aW9uQ2hhckNvZGUgPSB0aGlzLmdldE5leHRJbWFnZVNlY3Rpb25DaGFyQ29kZSgpO1xuICAgICAgICBpZiAoIW5leHRJbWFnZVNlY3Rpb25DaGFyQ29kZSkge1xuICAgICAgICAgICAgd2Fybk9uY2UoYFJlYWNoZWQgbWF4aW11bSBudW1iZXIgb2YgaW1hZ2VzICR7UFVBZW5kIC0gUFVBYmVnaW4gKyAyfWApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50ZXh0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUobmV4dEltYWdlU2VjdGlvbkNoYXJDb2RlKTtcbiAgICAgICAgdGhpcy5zZWN0aW9ucy5wdXNoKFNlY3Rpb25PcHRpb25zLmZvckltYWdlKGltYWdlTmFtZSkpO1xuICAgICAgICB0aGlzLnNlY3Rpb25JbmRleC5wdXNoKHRoaXMuc2VjdGlvbnMubGVuZ3RoIC0gMSk7XG4gICAgfVxuXG4gICAgZ2V0TmV4dEltYWdlU2VjdGlvbkNoYXJDb2RlKCk6IG51bWJlciB8IG51bGwge1xuICAgICAgICBpZiAoIXRoaXMuaW1hZ2VTZWN0aW9uSUQpIHtcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VTZWN0aW9uSUQgPSBQVUFiZWdpbjtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmltYWdlU2VjdGlvbklEO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VTZWN0aW9uSUQgPj0gUFVBZW5kKSByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuICsrdGhpcy5pbWFnZVNlY3Rpb25JRDtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGJyZWFrTGluZXMoaW5wdXQ6IFRhZ2dlZFN0cmluZywgbGluZUJyZWFrUG9pbnRzOiBBcnJheTxudW1iZXI+KTogQXJyYXk8VGFnZ2VkU3RyaW5nPiB7XG4gICAgY29uc3QgbGluZXMgPSBbXTtcbiAgICBjb25zdCB0ZXh0ID0gaW5wdXQudGV4dDtcbiAgICBsZXQgc3RhcnQgPSAwO1xuICAgIGZvciAoY29uc3QgbGluZUJyZWFrIG9mIGxpbmVCcmVha1BvaW50cykge1xuICAgICAgICBsaW5lcy5wdXNoKGlucHV0LnN1YnN0cmluZyhzdGFydCwgbGluZUJyZWFrKSk7XG4gICAgICAgIHN0YXJ0ID0gbGluZUJyZWFrO1xuICAgIH1cblxuICAgIGlmIChzdGFydCA8IHRleHQubGVuZ3RoKSB7XG4gICAgICAgIGxpbmVzLnB1c2goaW5wdXQuc3Vic3RyaW5nKHN0YXJ0LCB0ZXh0Lmxlbmd0aCkpO1xuICAgIH1cbiAgICByZXR1cm4gbGluZXM7XG59XG5cbmZ1bmN0aW9uIHNoYXBlVGV4dCh0ZXh0OiBGb3JtYXR0ZWQsXG4gICAgICAgICAgICAgICAgICAgZ2x5cGhNYXA6IHtbXzogc3RyaW5nXToge1tfOiBudW1iZXJdOiA/U3R5bGVHbHlwaH19LFxuICAgICAgICAgICAgICAgICAgIGdseXBoUG9zaXRpb25zOiB7W186IHN0cmluZ106IHtbXzogbnVtYmVyXTogR2x5cGhQb3NpdGlvbn19LFxuICAgICAgICAgICAgICAgICAgIGltYWdlUG9zaXRpb25zOiB7W186IHN0cmluZ106IEltYWdlUG9zaXRpb259LFxuICAgICAgICAgICAgICAgICAgIGRlZmF1bHRGb250U3RhY2s6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQ6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICB0ZXh0QW5jaG9yOiBTeW1ib2xBbmNob3IsXG4gICAgICAgICAgICAgICAgICAgdGV4dEp1c3RpZnk6IFRleHRKdXN0aWZ5LFxuICAgICAgICAgICAgICAgICAgIHNwYWNpbmc6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGU6IFtudW1iZXIsIG51bWJlcl0sXG4gICAgICAgICAgICAgICAgICAgd3JpdGluZ01vZGU6IDEgfCAyLFxuICAgICAgICAgICAgICAgICAgIGFsbG93VmVydGljYWxQbGFjZW1lbnQ6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgc3ltYm9sUGxhY2VtZW50OiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgbGF5b3V0VGV4dFNpemU6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXh0U2l6ZVRoaXNab29tOiBudW1iZXIpOiBTaGFwaW5nIHwgZmFsc2Uge1xuICAgIGNvbnN0IGxvZ2ljYWxJbnB1dCA9IFRhZ2dlZFN0cmluZy5mcm9tRmVhdHVyZSh0ZXh0LCBkZWZhdWx0Rm9udFN0YWNrKTtcblxuICAgIGlmICh3cml0aW5nTW9kZSA9PT0gV3JpdGluZ01vZGUudmVydGljYWwpIHtcbiAgICAgICAgbG9naWNhbElucHV0LnZlcnRpY2FsaXplUHVuY3R1YXRpb24oKTtcbiAgICB9XG5cbiAgICBsZXQgbGluZXM6IEFycmF5PFRhZ2dlZFN0cmluZz47XG5cbiAgICBjb25zdCB7cHJvY2Vzc0JpZGlyZWN0aW9uYWxUZXh0LCBwcm9jZXNzU3R5bGVkQmlkaXJlY3Rpb25hbFRleHR9ID0gcnRsVGV4dFBsdWdpbjtcbiAgICBpZiAocHJvY2Vzc0JpZGlyZWN0aW9uYWxUZXh0ICYmIGxvZ2ljYWxJbnB1dC5zZWN0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgLy8gQmlkaSBkb2Vzbid0IGhhdmUgdG8gYmUgc3R5bGUtYXdhcmVcbiAgICAgICAgbGluZXMgPSBbXTtcbiAgICAgICAgY29uc3QgdW50YWdnZWRMaW5lcyA9XG4gICAgICAgICAgICBwcm9jZXNzQmlkaXJlY3Rpb25hbFRleHQobG9naWNhbElucHV0LnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lTGluZUJyZWFrcyhsb2dpY2FsSW5wdXQsIHNwYWNpbmcsIG1heFdpZHRoLCBnbHlwaE1hcCwgaW1hZ2VQb3NpdGlvbnMsIHN5bWJvbFBsYWNlbWVudCwgbGF5b3V0VGV4dFNpemUpKTtcbiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIHVudGFnZ2VkTGluZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhZ2dlZExpbmUgPSBuZXcgVGFnZ2VkU3RyaW5nKCk7XG4gICAgICAgICAgICB0YWdnZWRMaW5lLnRleHQgPSBsaW5lO1xuICAgICAgICAgICAgdGFnZ2VkTGluZS5zZWN0aW9ucyA9IGxvZ2ljYWxJbnB1dC5zZWN0aW9ucztcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHRhZ2dlZExpbmUuc2VjdGlvbkluZGV4LnB1c2goMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsaW5lcy5wdXNoKHRhZ2dlZExpbmUpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9jZXNzU3R5bGVkQmlkaXJlY3Rpb25hbFRleHQpIHtcbiAgICAgICAgLy8gTmVlZCB2ZXJzaW9uIG9mIG1hcGJveC1nbC1ydGwtdGV4dCB3aXRoIHN0eWxlIHN1cHBvcnQgZm9yIGNvbWJpbmluZyBSVEwgdGV4dFxuICAgICAgICAvLyB3aXRoIGZvcm1hdHRpbmdcbiAgICAgICAgbGluZXMgPSBbXTtcbiAgICAgICAgY29uc3QgcHJvY2Vzc2VkTGluZXMgPVxuICAgICAgICAgICAgcHJvY2Vzc1N0eWxlZEJpZGlyZWN0aW9uYWxUZXh0KGxvZ2ljYWxJbnB1dC50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxJbnB1dC5zZWN0aW9uSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lTGluZUJyZWFrcyhsb2dpY2FsSW5wdXQsIHNwYWNpbmcsIG1heFdpZHRoLCBnbHlwaE1hcCwgaW1hZ2VQb3NpdGlvbnMsIHN5bWJvbFBsYWNlbWVudCwgbGF5b3V0VGV4dFNpemUpKTtcbiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIHByb2Nlc3NlZExpbmVzKSB7XG4gICAgICAgICAgICBjb25zdCB0YWdnZWRMaW5lID0gbmV3IFRhZ2dlZFN0cmluZygpO1xuICAgICAgICAgICAgdGFnZ2VkTGluZS50ZXh0ID0gbGluZVswXTtcbiAgICAgICAgICAgIHRhZ2dlZExpbmUuc2VjdGlvbkluZGV4ID0gbGluZVsxXTtcbiAgICAgICAgICAgIHRhZ2dlZExpbmUuc2VjdGlvbnMgPSBsb2dpY2FsSW5wdXQuc2VjdGlvbnM7XG4gICAgICAgICAgICBsaW5lcy5wdXNoKHRhZ2dlZExpbmUpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGluZXMgPSBicmVha0xpbmVzKGxvZ2ljYWxJbnB1dCwgZGV0ZXJtaW5lTGluZUJyZWFrcyhsb2dpY2FsSW5wdXQsIHNwYWNpbmcsIG1heFdpZHRoLCBnbHlwaE1hcCwgaW1hZ2VQb3NpdGlvbnMsIHN5bWJvbFBsYWNlbWVudCwgbGF5b3V0VGV4dFNpemUpKTtcbiAgICB9XG5cbiAgICBjb25zdCBwb3NpdGlvbmVkTGluZXMgPSBbXTtcbiAgICBjb25zdCBzaGFwaW5nID0ge1xuICAgICAgICBwb3NpdGlvbmVkTGluZXMsXG4gICAgICAgIHRleHQ6IGxvZ2ljYWxJbnB1dC50b1N0cmluZygpLFxuICAgICAgICB0b3A6IHRyYW5zbGF0ZVsxXSxcbiAgICAgICAgYm90dG9tOiB0cmFuc2xhdGVbMV0sXG4gICAgICAgIGxlZnQ6IHRyYW5zbGF0ZVswXSxcbiAgICAgICAgcmlnaHQ6IHRyYW5zbGF0ZVswXSxcbiAgICAgICAgd3JpdGluZ01vZGUsXG4gICAgICAgIGljb25zSW5UZXh0OiBmYWxzZSxcbiAgICAgICAgdmVydGljYWxpemFibGU6IGZhbHNlXG4gICAgfTtcblxuICAgIHNoYXBlTGluZXMoc2hhcGluZywgZ2x5cGhNYXAsIGdseXBoUG9zaXRpb25zLCBpbWFnZVBvc2l0aW9ucywgbGluZXMsIGxpbmVIZWlnaHQsIHRleHRBbmNob3IsIHRleHRKdXN0aWZ5LCB3cml0aW5nTW9kZSwgc3BhY2luZywgYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCwgbGF5b3V0VGV4dFNpemVUaGlzWm9vbSk7XG4gICAgaWYgKGlzRW1wdHkocG9zaXRpb25lZExpbmVzKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgcmV0dXJuIHNoYXBpbmc7XG59XG5cbi8vIHVzaW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgZHVlIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy8zODBcbi8qIGVzbGludCBuby11c2VsZXNzLWNvbXB1dGVkLWtleTogMCAqL1xuXG5jb25zdCB3aGl0ZXNwYWNlOiB7W186IG51bWJlcl06IGJvb2xlYW59ID0ge1xuICAgIFsweDA5XTogdHJ1ZSwgLy8gdGFiXG4gICAgWzB4MGFdOiB0cnVlLCAvLyBuZXdsaW5lXG4gICAgWzB4MGJdOiB0cnVlLCAvLyB2ZXJ0aWNhbCB0YWJcbiAgICBbMHgwY106IHRydWUsIC8vIGZvcm0gZmVlZFxuICAgIFsweDBkXTogdHJ1ZSwgLy8gY2FycmlhZ2UgcmV0dXJuXG4gICAgWzB4MjBdOiB0cnVlLCAvLyBzcGFjZVxufTtcblxuY29uc3QgYnJlYWthYmxlOiB7W186IG51bWJlcl06IGJvb2xlYW59ID0ge1xuICAgIFsweDBhXTogICB0cnVlLCAvLyBuZXdsaW5lXG4gICAgWzB4MjBdOiAgIHRydWUsIC8vIHNwYWNlXG4gICAgWzB4MjZdOiAgIHRydWUsIC8vIGFtcGVyc2FuZFxuICAgIFsweDI4XTogICB0cnVlLCAvLyBsZWZ0IHBhcmVudGhlc2lzXG4gICAgWzB4MjldOiAgIHRydWUsIC8vIHJpZ2h0IHBhcmVudGhlc2lzXG4gICAgWzB4MmJdOiAgIHRydWUsIC8vIHBsdXMgc2lnblxuICAgIFsweDJkXTogICB0cnVlLCAvLyBoeXBoZW4tbWludXNcbiAgICBbMHgyZl06ICAgdHJ1ZSwgLy8gc29saWR1c1xuICAgIFsweGFkXTogICB0cnVlLCAvLyBzb2Z0IGh5cGhlblxuICAgIFsweGI3XTogICB0cnVlLCAvLyBtaWRkbGUgZG90XG4gICAgWzB4MjAwYl06IHRydWUsIC8vIHplcm8td2lkdGggc3BhY2VcbiAgICBbMHgyMDEwXTogdHJ1ZSwgLy8gaHlwaGVuXG4gICAgWzB4MjAxM106IHRydWUsIC8vIGVuIGRhc2hcbiAgICBbMHgyMDI3XTogdHJ1ZSAgLy8gaW50ZXJwdW5jdFxuICAgIC8vIE1hbnkgb3RoZXIgY2hhcmFjdGVycyBtYXkgYmUgcmVhc29uYWJsZSBicmVha3BvaW50c1xuICAgIC8vIENvbnNpZGVyIFwibmV1dHJhbCBvcmllbnRhdGlvblwiIGNoYXJhY3RlcnMgYXQgc2NyaXB0RGV0ZWN0aW9uLmNoYXJIYXNOZXV0cmFsVmVydGljYWxPcmllbnRhdGlvblxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvMzY1OFxufTtcblxuZnVuY3Rpb24gZ2V0R2x5cGhBZHZhbmNlKGNvZGVQb2ludDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246IFNlY3Rpb25PcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoTWFwOiB7W186IHN0cmluZ106IHtbXzogbnVtYmVyXTogP1N0eWxlR2x5cGh9fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZVBvc2l0aW9uczoge1tfOiBzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSxcbiAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjaW5nOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0VGV4dFNpemU6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKCFzZWN0aW9uLmltYWdlTmFtZSkge1xuICAgICAgICBjb25zdCBwb3NpdGlvbnMgPSBnbHlwaE1hcFtzZWN0aW9uLmZvbnRTdGFja107XG4gICAgICAgIGNvbnN0IGdseXBoID0gcG9zaXRpb25zICYmIHBvc2l0aW9uc1tjb2RlUG9pbnRdO1xuICAgICAgICBpZiAoIWdseXBoKSByZXR1cm4gMDtcbiAgICAgICAgcmV0dXJuIGdseXBoLm1ldHJpY3MuYWR2YW5jZSAqIHNlY3Rpb24uc2NhbGUgKyBzcGFjaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGltYWdlUG9zaXRpb24gPSBpbWFnZVBvc2l0aW9uc1tzZWN0aW9uLmltYWdlTmFtZV07XG4gICAgICAgIGlmICghaW1hZ2VQb3NpdGlvbikgcmV0dXJuIDA7XG4gICAgICAgIHJldHVybiBpbWFnZVBvc2l0aW9uLmRpc3BsYXlTaXplWzBdICogc2VjdGlvbi5zY2FsZSAqIE9ORV9FTSAvIGxheW91dFRleHRTaXplICsgc3BhY2luZztcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRldGVybWluZUF2ZXJhZ2VMaW5lV2lkdGgobG9naWNhbElucHV0OiBUYWdnZWRTdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNpbmc6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhNYXA6IHtbXzogc3RyaW5nXToge1tfOiBudW1iZXJdOiA/U3R5bGVHbHlwaH19LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZVBvc2l0aW9uczoge1tfOiBzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0VGV4dFNpemU6IG51bWJlcikge1xuICAgIGxldCB0b3RhbFdpZHRoID0gMDtcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsb2dpY2FsSW5wdXQubGVuZ3RoKCk7IGluZGV4KyspIHtcbiAgICAgICAgY29uc3Qgc2VjdGlvbiA9IGxvZ2ljYWxJbnB1dC5nZXRTZWN0aW9uKGluZGV4KTtcbiAgICAgICAgdG90YWxXaWR0aCArPSBnZXRHbHlwaEFkdmFuY2UobG9naWNhbElucHV0LmdldENoYXJDb2RlKGluZGV4KSwgc2VjdGlvbiwgZ2x5cGhNYXAsIGltYWdlUG9zaXRpb25zLCBzcGFjaW5nLCBsYXlvdXRUZXh0U2l6ZSk7XG4gICAgfVxuXG4gICAgY29uc3QgbGluZUNvdW50ID0gTWF0aC5tYXgoMSwgTWF0aC5jZWlsKHRvdGFsV2lkdGggLyBtYXhXaWR0aCkpO1xuICAgIHJldHVybiB0b3RhbFdpZHRoIC8gbGluZUNvdW50O1xufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVCYWRuZXNzKGxpbmVXaWR0aDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRXaWR0aDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwZW5hbHR5OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzTGFzdEJyZWFrOiBib29sZWFuKSB7XG4gICAgY29uc3QgcmFnZ2VkbmVzcyA9IE1hdGgucG93KGxpbmVXaWR0aCAtIHRhcmdldFdpZHRoLCAyKTtcbiAgICBpZiAoaXNMYXN0QnJlYWspIHtcbiAgICAgICAgLy8gRmF2b3IgZmluYWxzIGxpbmVzIHNob3J0ZXIgdGhhbiBhdmVyYWdlIG92ZXIgbG9uZ2VyIHRoYW4gYXZlcmFnZVxuICAgICAgICBpZiAobGluZVdpZHRoIDwgdGFyZ2V0V2lkdGgpIHtcbiAgICAgICAgICAgIHJldHVybiByYWdnZWRuZXNzIC8gMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByYWdnZWRuZXNzICogMjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByYWdnZWRuZXNzICsgTWF0aC5hYnMocGVuYWx0eSkgKiBwZW5hbHR5O1xufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVQZW5hbHR5KGNvZGVQb2ludDogbnVtYmVyLCBuZXh0Q29kZVBvaW50OiBudW1iZXIsIHBlbmFsaXphYmxlSWRlb2dyYXBoaWNCcmVhazogYm9vbGVhbikge1xuICAgIGxldCBwZW5hbHR5ID0gMDtcbiAgICAvLyBGb3JjZSBicmVhayBvbiBuZXdsaW5lXG4gICAgaWYgKGNvZGVQb2ludCA9PT0gMHgwYSkge1xuICAgICAgICBwZW5hbHR5IC09IDEwMDAwO1xuICAgIH1cbiAgICAvLyBQZW5hbGl6ZSBicmVha3MgYmV0d2VlbiBjaGFyYWN0ZXJzIHRoYXQgYWxsb3cgaWRlb2dyYXBoaWMgYnJlYWtpbmcgYmVjYXVzZVxuICAgIC8vIHRoZXkgYXJlIGxlc3MgcHJlZmVyYWJsZSB0aGFuIGJyZWFrcyBhdCBzcGFjZXMgKG9yIHplcm8gd2lkdGggc3BhY2VzKS5cbiAgICBpZiAocGVuYWxpemFibGVJZGVvZ3JhcGhpY0JyZWFrKSB7XG4gICAgICAgIHBlbmFsdHkgKz0gMTUwO1xuICAgIH1cblxuICAgIC8vIFBlbmFsaXplIG9wZW4gcGFyZW50aGVzaXMgYXQgZW5kIG9mIGxpbmVcbiAgICBpZiAoY29kZVBvaW50ID09PSAweDI4IHx8IGNvZGVQb2ludCA9PT0gMHhmZjA4KSB7XG4gICAgICAgIHBlbmFsdHkgKz0gNTA7XG4gICAgfVxuXG4gICAgLy8gUGVuYWxpemUgY2xvc2UgcGFyZW50aGVzaXMgYXQgYmVnaW5uaW5nIG9mIGxpbmVcbiAgICBpZiAobmV4dENvZGVQb2ludCA9PT0gMHgyOSB8fCBuZXh0Q29kZVBvaW50ID09PSAweGZmMDkpIHtcbiAgICAgICAgcGVuYWx0eSArPSA1MDtcbiAgICB9XG4gICAgcmV0dXJuIHBlbmFsdHk7XG59XG5cbnR5cGUgQnJlYWsgPSB7XG4gICAgaW5kZXg6IG51bWJlcixcbiAgICB4OiBudW1iZXIsXG4gICAgcHJpb3JCcmVhazogP0JyZWFrLFxuICAgIGJhZG5lc3M6IG51bWJlclxufTtcblxuZnVuY3Rpb24gZXZhbHVhdGVCcmVhayhicmVha0luZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgIGJyZWFrWDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRXaWR0aDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICBwb3RlbnRpYWxCcmVha3M6IEFycmF5PEJyZWFrPixcbiAgICAgICAgICAgICAgICAgICAgICAgcGVuYWx0eTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICBpc0xhc3RCcmVhazogYm9vbGVhbik6IEJyZWFrIHtcbiAgICAvLyBXZSBjb3VsZCBza2lwIGV2YWx1YXRpbmcgYnJlYWtzIHdoZXJlIHRoZSBsaW5lIGxlbmd0aCAoYnJlYWtYIC0gcHJpb3JCcmVhay54KSA+IG1heFdpZHRoXG4gICAgLy8gIC4uLmJ1dCBpbiBmYWN0IHdlIGFsbG93IGxpbmVzIGxvbmdlciB0aGFuIG1heFdpZHRoIChpZiB0aGVyZSdzIG5vIGJyZWFrIHBvaW50cylcbiAgICAvLyAgLi4uYW5kIHdoZW4gdGFyZ2V0V2lkdGggYW5kIG1heFdpZHRoIGFyZSBjbG9zZSwgc3RyaWN0bHkgZW5mb3JjaW5nIG1heFdpZHRoIGNhbiBnaXZlXG4gICAgLy8gICAgIG1vcmUgbG9wc2lkZWQgcmVzdWx0cy5cblxuICAgIGxldCBiZXN0UHJpb3JCcmVhazogP0JyZWFrID0gbnVsbDtcbiAgICBsZXQgYmVzdEJyZWFrQmFkbmVzcyA9IGNhbGN1bGF0ZUJhZG5lc3MoYnJlYWtYLCB0YXJnZXRXaWR0aCwgcGVuYWx0eSwgaXNMYXN0QnJlYWspO1xuXG4gICAgZm9yIChjb25zdCBwb3RlbnRpYWxCcmVhayBvZiBwb3RlbnRpYWxCcmVha3MpIHtcbiAgICAgICAgY29uc3QgbGluZVdpZHRoID0gYnJlYWtYIC0gcG90ZW50aWFsQnJlYWsueDtcbiAgICAgICAgY29uc3QgYnJlYWtCYWRuZXNzID1cbiAgICAgICAgICAgIGNhbGN1bGF0ZUJhZG5lc3MobGluZVdpZHRoLCB0YXJnZXRXaWR0aCwgcGVuYWx0eSwgaXNMYXN0QnJlYWspICsgcG90ZW50aWFsQnJlYWsuYmFkbmVzcztcbiAgICAgICAgaWYgKGJyZWFrQmFkbmVzcyA8PSBiZXN0QnJlYWtCYWRuZXNzKSB7XG4gICAgICAgICAgICBiZXN0UHJpb3JCcmVhayA9IHBvdGVudGlhbEJyZWFrO1xuICAgICAgICAgICAgYmVzdEJyZWFrQmFkbmVzcyA9IGJyZWFrQmFkbmVzcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIGluZGV4OiBicmVha0luZGV4LFxuICAgICAgICB4OiBicmVha1gsXG4gICAgICAgIHByaW9yQnJlYWs6IGJlc3RQcmlvckJyZWFrLFxuICAgICAgICBiYWRuZXNzOiBiZXN0QnJlYWtCYWRuZXNzXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gbGVhc3RCYWRCcmVha3MobGFzdExpbmVCcmVhazogP0JyZWFrKTogQXJyYXk8bnVtYmVyPiB7XG4gICAgaWYgKCFsYXN0TGluZUJyZWFrKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIGxlYXN0QmFkQnJlYWtzKGxhc3RMaW5lQnJlYWsucHJpb3JCcmVhaykuY29uY2F0KGxhc3RMaW5lQnJlYWsuaW5kZXgpO1xufVxuXG5mdW5jdGlvbiBkZXRlcm1pbmVMaW5lQnJlYWtzKGxvZ2ljYWxJbnB1dDogVGFnZ2VkU3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjaW5nOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoTWFwOiB7W186IHN0cmluZ106IHtbXzogbnVtYmVyXTogP1N0eWxlR2x5cGh9fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VQb3NpdGlvbnM6IHtbXzogc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbFBsYWNlbWVudDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXh0U2l6ZTogbnVtYmVyKTogQXJyYXk8bnVtYmVyPiB7XG4gICAgaWYgKHN5bWJvbFBsYWNlbWVudCAhPT0gJ3BvaW50JylcbiAgICAgICAgcmV0dXJuIFtdO1xuXG4gICAgaWYgKCFsb2dpY2FsSW5wdXQpXG4gICAgICAgIHJldHVybiBbXTtcblxuICAgIGNvbnN0IHBvdGVudGlhbExpbmVCcmVha3MgPSBbXTtcbiAgICBjb25zdCB0YXJnZXRXaWR0aCA9IGRldGVybWluZUF2ZXJhZ2VMaW5lV2lkdGgobG9naWNhbElucHV0LCBzcGFjaW5nLCBtYXhXaWR0aCwgZ2x5cGhNYXAsIGltYWdlUG9zaXRpb25zLCBsYXlvdXRUZXh0U2l6ZSk7XG5cbiAgICBjb25zdCBoYXNTZXJ2ZXJTdWdnZXN0ZWRCcmVha3BvaW50cyA9IGxvZ2ljYWxJbnB1dC50ZXh0LmluZGV4T2YoXCJcXHUyMDBiXCIpID49IDA7XG5cbiAgICBsZXQgY3VycmVudFggPSAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsb2dpY2FsSW5wdXQubGVuZ3RoKCk7IGkrKykge1xuICAgICAgICBjb25zdCBzZWN0aW9uID0gbG9naWNhbElucHV0LmdldFNlY3Rpb24oaSk7XG4gICAgICAgIGNvbnN0IGNvZGVQb2ludCA9IGxvZ2ljYWxJbnB1dC5nZXRDaGFyQ29kZShpKTtcbiAgICAgICAgaWYgKCF3aGl0ZXNwYWNlW2NvZGVQb2ludF0pIGN1cnJlbnRYICs9IGdldEdseXBoQWR2YW5jZShjb2RlUG9pbnQsIHNlY3Rpb24sIGdseXBoTWFwLCBpbWFnZVBvc2l0aW9ucywgc3BhY2luZywgbGF5b3V0VGV4dFNpemUpO1xuXG4gICAgICAgIC8vIElkZW9ncmFwaGljIGNoYXJhY3RlcnMsIHNwYWNlcywgYW5kIHdvcmQtYnJlYWtpbmcgcHVuY3R1YXRpb24gdGhhdCBvZnRlbiBhcHBlYXIgd2l0aG91dFxuICAgICAgICAvLyBzdXJyb3VuZGluZyBzcGFjZXMuXG4gICAgICAgIGlmICgoaSA8IGxvZ2ljYWxJbnB1dC5sZW5ndGgoKSAtIDEpKSB7XG4gICAgICAgICAgICBjb25zdCBpZGVvZ3JhcGhpY0JyZWFrID0gY2hhckFsbG93c0lkZW9ncmFwaGljQnJlYWtpbmcoY29kZVBvaW50KTtcbiAgICAgICAgICAgIGlmIChicmVha2FibGVbY29kZVBvaW50XSB8fCBpZGVvZ3JhcGhpY0JyZWFrIHx8IHNlY3Rpb24uaW1hZ2VOYW1lKSB7XG5cbiAgICAgICAgICAgICAgICBwb3RlbnRpYWxMaW5lQnJlYWtzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIGV2YWx1YXRlQnJlYWsoXG4gICAgICAgICAgICAgICAgICAgICAgICBpICsgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRYLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0V2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3RlbnRpYWxMaW5lQnJlYWtzLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsY3VsYXRlUGVuYWx0eShjb2RlUG9pbnQsIGxvZ2ljYWxJbnB1dC5nZXRDaGFyQ29kZShpICsgMSksIGlkZW9ncmFwaGljQnJlYWsgJiYgaGFzU2VydmVyU3VnZ2VzdGVkQnJlYWtwb2ludHMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBsZWFzdEJhZEJyZWFrcyhcbiAgICAgICAgZXZhbHVhdGVCcmVhayhcbiAgICAgICAgICAgIGxvZ2ljYWxJbnB1dC5sZW5ndGgoKSxcbiAgICAgICAgICAgIGN1cnJlbnRYLFxuICAgICAgICAgICAgdGFyZ2V0V2lkdGgsXG4gICAgICAgICAgICBwb3RlbnRpYWxMaW5lQnJlYWtzLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIHRydWUpKTtcbn1cblxuZnVuY3Rpb24gZ2V0QW5jaG9yQWxpZ25tZW50KGFuY2hvcjogU3ltYm9sQW5jaG9yKSB7XG4gICAgbGV0IGhvcml6b250YWxBbGlnbiA9IDAuNSwgdmVydGljYWxBbGlnbiA9IDAuNTtcblxuICAgIHN3aXRjaCAoYW5jaG9yKSB7XG4gICAgY2FzZSAncmlnaHQnOlxuICAgIGNhc2UgJ3RvcC1yaWdodCc6XG4gICAgY2FzZSAnYm90dG9tLXJpZ2h0JzpcbiAgICAgICAgaG9yaXpvbnRhbEFsaWduID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgY2FzZSAnbGVmdCc6XG4gICAgY2FzZSAndG9wLWxlZnQnOlxuICAgIGNhc2UgJ2JvdHRvbS1sZWZ0JzpcbiAgICAgICAgaG9yaXpvbnRhbEFsaWduID0gMDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgc3dpdGNoIChhbmNob3IpIHtcbiAgICBjYXNlICdib3R0b20nOlxuICAgIGNhc2UgJ2JvdHRvbS1yaWdodCc6XG4gICAgY2FzZSAnYm90dG9tLWxlZnQnOlxuICAgICAgICB2ZXJ0aWNhbEFsaWduID0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgY2FzZSAndG9wJzpcbiAgICBjYXNlICd0b3AtcmlnaHQnOlxuICAgIGNhc2UgJ3RvcC1sZWZ0JzpcbiAgICAgICAgdmVydGljYWxBbGlnbiA9IDA7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiB7aG9yaXpvbnRhbEFsaWduLCB2ZXJ0aWNhbEFsaWdufTtcbn1cblxuZnVuY3Rpb24gc2hhcGVMaW5lcyhzaGFwaW5nOiBTaGFwaW5nLFxuICAgICAgICAgICAgICAgICAgICBnbHlwaE1hcDoge1tfOiBzdHJpbmddOiB7W186IG51bWJlcl06ID9TdHlsZUdseXBofX0sXG4gICAgICAgICAgICAgICAgICAgIGdseXBoUG9zaXRpb25zOiB7W186IHN0cmluZ106IHtbXzogbnVtYmVyXTogR2x5cGhQb3NpdGlvbn19LFxuICAgICAgICAgICAgICAgICAgICBpbWFnZVBvc2l0aW9uczoge1tfOiBzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSxcbiAgICAgICAgICAgICAgICAgICAgbGluZXM6IEFycmF5PFRhZ2dlZFN0cmluZz4sXG4gICAgICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQ6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgdGV4dEFuY2hvcjogU3ltYm9sQW5jaG9yLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0SnVzdGlmeTogVGV4dEp1c3RpZnksXG4gICAgICAgICAgICAgICAgICAgIHdyaXRpbmdNb2RlOiAxIHwgMixcbiAgICAgICAgICAgICAgICAgICAgc3BhY2luZzogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd1ZlcnRpY2FsUGxhY2VtZW50OiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXh0U2l6ZVRoaXNab29tOiBudW1iZXIpIHtcblxuICAgIGxldCB4ID0gMDtcbiAgICBsZXQgeSA9IFNIQVBJTkdfREVGQVVMVF9PRkZTRVQ7XG5cbiAgICBsZXQgbWF4TGluZUxlbmd0aCA9IDA7XG4gICAgbGV0IG1heExpbmVIZWlnaHQgPSAwO1xuXG4gICAgY29uc3QganVzdGlmeSA9XG4gICAgICAgIHRleHRKdXN0aWZ5ID09PSAncmlnaHQnID8gMSA6XG4gICAgICAgIHRleHRKdXN0aWZ5ID09PSAnbGVmdCcgPyAwIDogMC41O1xuXG4gICAgbGV0IGxpbmVJbmRleCA9IDA7XG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICAgIGxpbmUudHJpbSgpO1xuXG4gICAgICAgIGNvbnN0IGxpbmVNYXhTY2FsZSA9IGxpbmUuZ2V0TWF4U2NhbGUoKTtcbiAgICAgICAgY29uc3QgbWF4TGluZU9mZnNldCA9IChsaW5lTWF4U2NhbGUgLSAxKSAqIE9ORV9FTTtcbiAgICAgICAgY29uc3QgcG9zaXRpb25lZExpbmUgPSB7cG9zaXRpb25lZEdseXBoczogW10sIGxpbmVPZmZzZXQ6IDB9O1xuICAgICAgICBzaGFwaW5nLnBvc2l0aW9uZWRMaW5lc1tsaW5lSW5kZXhdID0gcG9zaXRpb25lZExpbmU7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uZWRHbHlwaHMgPSBwb3NpdGlvbmVkTGluZS5wb3NpdGlvbmVkR2x5cGhzO1xuICAgICAgICBsZXQgbGluZU9mZnNldCA9IDAuMDtcblxuICAgICAgICBpZiAoIWxpbmUubGVuZ3RoKCkpIHtcbiAgICAgICAgICAgIHkgKz0gbGluZUhlaWdodDsgLy8gU3RpbGwgbmVlZCBhIGxpbmUgZmVlZCBhZnRlciBlbXB0eSBsaW5lXG4gICAgICAgICAgICArK2xpbmVJbmRleDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lLmxlbmd0aCgpOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb24gPSBsaW5lLmdldFNlY3Rpb24oaSk7XG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uSW5kZXggPSBsaW5lLmdldFNlY3Rpb25JbmRleChpKTtcbiAgICAgICAgICAgIGNvbnN0IGNvZGVQb2ludCA9IGxpbmUuZ2V0Q2hhckNvZGUoaSk7XG4gICAgICAgICAgICBsZXQgYmFzZWxpbmVPZmZzZXQgPSAwLjA7XG4gICAgICAgICAgICBsZXQgbWV0cmljcyA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcmVjdCA9IG51bGw7XG4gICAgICAgICAgICBsZXQgaW1hZ2VOYW1lID0gbnVsbDtcbiAgICAgICAgICAgIGxldCB2ZXJ0aWNhbEFkdmFuY2UgPSBPTkVfRU07XG4gICAgICAgICAgICBjb25zdCB2ZXJ0aWNhbCA9ICEod3JpdGluZ01vZGUgPT09IFdyaXRpbmdNb2RlLmhvcml6b250YWwgfHxcbiAgICAgICAgICAgICAgICAvLyBEb24ndCB2ZXJ0aWNhbGl6ZSBnbHlwaHMgdGhhdCBoYXZlIG5vIHVwcmlnaHQgb3JpZW50YXRpb24gaWYgdmVydGljYWwgcGxhY2VtZW50IGlzIGRpc2FibGVkLlxuICAgICAgICAgICAgICAgICghYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCAmJiAhY2hhckhhc1VwcmlnaHRWZXJ0aWNhbE9yaWVudGF0aW9uKGNvZGVQb2ludCkpIHx8XG4gICAgICAgICAgICAgICAgLy8gSWYgdmVydGljYWwgcGxhY2VtZW50IGlzIGVuYWJsZWQsIGRvbid0IHZlcnRpY2FsaXplIGdseXBocyB0aGF0XG4gICAgICAgICAgICAgICAgLy8gYXJlIGZyb20gY29tcGxleCB0ZXh0IGxheW91dCBzY3JpcHQsIG9yIHdoaXRlc3BhY2VzLlxuICAgICAgICAgICAgICAgIChhbGxvd1ZlcnRpY2FsUGxhY2VtZW50ICYmICh3aGl0ZXNwYWNlW2NvZGVQb2ludF0gfHwgY2hhckluQ29tcGxleFNoYXBpbmdTY3JpcHQoY29kZVBvaW50KSkpKTtcblxuICAgICAgICAgICAgaWYgKCFzZWN0aW9uLmltYWdlTmFtZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IGdseXBoUG9zaXRpb25zW3NlY3Rpb24uZm9udFN0YWNrXTtcbiAgICAgICAgICAgICAgICBjb25zdCBnbHlwaFBvc2l0aW9uID0gcG9zaXRpb25zICYmIHBvc2l0aW9uc1tjb2RlUG9pbnRdO1xuICAgICAgICAgICAgICAgIGlmIChnbHlwaFBvc2l0aW9uICYmIGdseXBoUG9zaXRpb24ucmVjdCkge1xuICAgICAgICAgICAgICAgICAgICByZWN0ID0gZ2x5cGhQb3NpdGlvbi5yZWN0O1xuICAgICAgICAgICAgICAgICAgICBtZXRyaWNzID0gZ2x5cGhQb3NpdGlvbi5tZXRyaWNzO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdseXBocyA9IGdseXBoTWFwW3NlY3Rpb24uZm9udFN0YWNrXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2x5cGggPSBnbHlwaHMgJiYgZ2x5cGhzW2NvZGVQb2ludF07XG4gICAgICAgICAgICAgICAgICAgIGlmICghZ2x5cGgpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBtZXRyaWNzID0gZ2x5cGgubWV0cmljcztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBrbm93IHRoZSBiYXNlbGluZSwgYnV0IHNpbmNlIHdlJ3JlIGxheWluZyBvdXRcbiAgICAgICAgICAgICAgICAvLyBhdCAyNCBwb2ludHMsIHdlIGNhbiBjYWxjdWxhdGUgaG93IG11Y2ggaXQgd2lsbCBtb3ZlIHdoZW5cbiAgICAgICAgICAgICAgICAvLyB3ZSBzY2FsZSB1cCBvciBkb3duLlxuICAgICAgICAgICAgICAgIGJhc2VsaW5lT2Zmc2V0ID0gKGxpbmVNYXhTY2FsZSAtIHNlY3Rpb24uc2NhbGUpICogT05FX0VNO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbWFnZVBvc2l0aW9uID0gaW1hZ2VQb3NpdGlvbnNbc2VjdGlvbi5pbWFnZU5hbWVdO1xuICAgICAgICAgICAgICAgIGlmICghaW1hZ2VQb3NpdGlvbikgY29udGludWU7XG4gICAgICAgICAgICAgICAgaW1hZ2VOYW1lID0gc2VjdGlvbi5pbWFnZU5hbWU7XG4gICAgICAgICAgICAgICAgc2hhcGluZy5pY29uc0luVGV4dCA9IHNoYXBpbmcuaWNvbnNJblRleHQgfHwgdHJ1ZTtcbiAgICAgICAgICAgICAgICByZWN0ID0gaW1hZ2VQb3NpdGlvbi5wYWRkZWRSZWN0O1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpemUgPSBpbWFnZVBvc2l0aW9uLmRpc3BsYXlTaXplO1xuICAgICAgICAgICAgICAgIC8vIElmIG5lZWRlZCwgYWxsb3cgdG8gc2V0IHNjYWxlIGZhY3RvciBmb3IgYW4gaW1hZ2UgdXNpbmdcbiAgICAgICAgICAgICAgICAvLyBhbGlhcyBcImltYWdlLXNjYWxlXCIgdGhhdCBjb3VsZCBiZSBhbGlhcyBmb3IgXCJmb250LXNjYWxlXCJcbiAgICAgICAgICAgICAgICAvLyB3aGVuIEZvcm1hdHRlZFNlY3Rpb24gaXMgYW4gaW1hZ2Ugc2VjdGlvbi5cbiAgICAgICAgICAgICAgICBzZWN0aW9uLnNjYWxlID0gc2VjdGlvbi5zY2FsZSAqIE9ORV9FTSAvIGxheW91dFRleHRTaXplVGhpc1pvb207XG5cbiAgICAgICAgICAgICAgICBtZXRyaWNzID0ge3dpZHRoOiBzaXplWzBdLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHNpemVbMV0sXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IElNQUdFX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgICAgIHRvcDogLUdMWVBIX1BCRl9CT1JERVIsXG4gICAgICAgICAgICAgICAgICAgIGFkdmFuY2U6IHZlcnRpY2FsID8gc2l6ZVsxXSA6IHNpemVbMF19O1xuXG4gICAgICAgICAgICAgICAgLy8gRGlmZmVyZW5jZSBiZXR3ZWVuIG9uZSBFTSBhbmQgYW4gaW1hZ2Ugc2l6ZS5cbiAgICAgICAgICAgICAgICAvLyBBbGlnbnMgYm90dG9tIG9mIGFuIGltYWdlIHRvIGEgYmFzZWxpbmUgbGV2ZWwuXG4gICAgICAgICAgICAgICAgY29uc3QgaW1hZ2VPZmZzZXQgPSBPTkVfRU0gLSBzaXplWzFdICogc2VjdGlvbi5zY2FsZTtcbiAgICAgICAgICAgICAgICBiYXNlbGluZU9mZnNldCA9IG1heExpbmVPZmZzZXQgKyBpbWFnZU9mZnNldDtcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbEFkdmFuY2UgPSBtZXRyaWNzLmFkdmFuY2U7XG5cbiAgICAgICAgICAgICAgICAvLyBEaWZmZXJlbmNlIGJldHdlZW4gaGVpZ2h0IG9mIGFuIGltYWdlIGFuZCBvbmUgRU0gYXQgbWF4IGxpbmUgc2NhbGUuXG4gICAgICAgICAgICAgICAgLy8gUHVzaGVzIGN1cnJlbnQgbGluZSBkb3duIGlmIGFuIGltYWdlIHNpemUgaXMgb3ZlciAxIEVNIGF0IG1heCBsaW5lIHNjYWxlLlxuICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IHZlcnRpY2FsID8gc2l6ZVswXSAqIHNlY3Rpb24uc2NhbGUgLSBPTkVfRU0gKiBsaW5lTWF4U2NhbGUgOlxuICAgICAgICAgICAgICAgICAgICBzaXplWzFdICogc2VjdGlvbi5zY2FsZSAtIE9ORV9FTSAqIGxpbmVNYXhTY2FsZTtcbiAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ID4gMCAmJiBvZmZzZXQgPiBsaW5lT2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGxpbmVPZmZzZXQgPSBvZmZzZXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXZlcnRpY2FsKSB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb25lZEdseXBocy5wdXNoKHtnbHlwaDogY29kZVBvaW50LCBpbWFnZU5hbWUsIHgsIHk6IHkgKyBiYXNlbGluZU9mZnNldCwgdmVydGljYWwsIHNjYWxlOiBzZWN0aW9uLnNjYWxlLCBmb250U3RhY2s6IHNlY3Rpb24uZm9udFN0YWNrLCBzZWN0aW9uSW5kZXgsIG1ldHJpY3MsIHJlY3R9KTtcbiAgICAgICAgICAgICAgICB4ICs9IG1ldHJpY3MuYWR2YW5jZSAqIHNlY3Rpb24uc2NhbGUgKyBzcGFjaW5nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzaGFwaW5nLnZlcnRpY2FsaXphYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbmVkR2x5cGhzLnB1c2goe2dseXBoOiBjb2RlUG9pbnQsIGltYWdlTmFtZSwgeCwgeTogeSArIGJhc2VsaW5lT2Zmc2V0LCB2ZXJ0aWNhbCwgc2NhbGU6IHNlY3Rpb24uc2NhbGUsIGZvbnRTdGFjazogc2VjdGlvbi5mb250U3RhY2ssIHNlY3Rpb25JbmRleCwgbWV0cmljcywgcmVjdH0pO1xuICAgICAgICAgICAgICAgIHggKz0gdmVydGljYWxBZHZhbmNlICogc2VjdGlvbi5zY2FsZSArIHNwYWNpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPbmx5IGp1c3RpZnkgaWYgd2UgcGxhY2VkIGF0IGxlYXN0IG9uZSBnbHlwaFxuICAgICAgICBpZiAocG9zaXRpb25lZEdseXBocy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVMZW5ndGggPSB4IC0gc3BhY2luZztcbiAgICAgICAgICAgIG1heExpbmVMZW5ndGggPSBNYXRoLm1heChsaW5lTGVuZ3RoLCBtYXhMaW5lTGVuZ3RoKTtcbiAgICAgICAgICAgIGp1c3RpZnlMaW5lKHBvc2l0aW9uZWRHbHlwaHMsIDAsIHBvc2l0aW9uZWRHbHlwaHMubGVuZ3RoIC0gMSwganVzdGlmeSwgbGluZU9mZnNldCk7XG4gICAgICAgIH1cblxuICAgICAgICB4ID0gMDtcbiAgICAgICAgY29uc3QgY3VycmVudExpbmVIZWlnaHQgPSBsaW5lSGVpZ2h0ICogbGluZU1heFNjYWxlICsgbGluZU9mZnNldDtcbiAgICAgICAgcG9zaXRpb25lZExpbmUubGluZU9mZnNldCA9IE1hdGgubWF4KGxpbmVPZmZzZXQsIG1heExpbmVPZmZzZXQpO1xuICAgICAgICB5ICs9IGN1cnJlbnRMaW5lSGVpZ2h0O1xuICAgICAgICBtYXhMaW5lSGVpZ2h0ID0gTWF0aC5tYXgoY3VycmVudExpbmVIZWlnaHQsIG1heExpbmVIZWlnaHQpO1xuICAgICAgICArK2xpbmVJbmRleDtcbiAgICB9XG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIGJvdW5kaW5nIGJveCBhbmQganVzdGlmeSAvIGFsaWduIHRleHQgYmxvY2suXG4gICAgY29uc3QgaGVpZ2h0ID0geSAtIFNIQVBJTkdfREVGQVVMVF9PRkZTRVQ7XG4gICAgY29uc3Qge2hvcml6b250YWxBbGlnbiwgdmVydGljYWxBbGlnbn0gPSBnZXRBbmNob3JBbGlnbm1lbnQodGV4dEFuY2hvcik7XG4gICAgYWxpZ24oc2hhcGluZy5wb3NpdGlvbmVkTGluZXMsIGp1c3RpZnksIGhvcml6b250YWxBbGlnbiwgdmVydGljYWxBbGlnbiwgbWF4TGluZUxlbmd0aCwgbWF4TGluZUhlaWdodCwgbGluZUhlaWdodCwgaGVpZ2h0LCBsaW5lcy5sZW5ndGgpO1xuXG4gICAgc2hhcGluZy50b3AgKz0gLXZlcnRpY2FsQWxpZ24gKiBoZWlnaHQ7XG4gICAgc2hhcGluZy5ib3R0b20gPSBzaGFwaW5nLnRvcCArIGhlaWdodDtcbiAgICBzaGFwaW5nLmxlZnQgKz0gLWhvcml6b250YWxBbGlnbiAqIG1heExpbmVMZW5ndGg7XG4gICAgc2hhcGluZy5yaWdodCA9IHNoYXBpbmcubGVmdCArIG1heExpbmVMZW5ndGg7XG59XG5cbi8vIGp1c3RpZnkgcmlnaHQgPSAxLCBsZWZ0ID0gMCwgY2VudGVyID0gMC41XG5mdW5jdGlvbiBqdXN0aWZ5TGluZShwb3NpdGlvbmVkR2x5cGhzOiBBcnJheTxQb3NpdGlvbmVkR2x5cGg+LFxuICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgIGVuZDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAganVzdGlmeTogMSB8IDAgfCAwLjUsXG4gICAgICAgICAgICAgICAgICAgICBsaW5lT2Zmc2V0OiBudW1iZXIpIHtcbiAgICBpZiAoIWp1c3RpZnkgJiYgIWxpbmVPZmZzZXQpXG4gICAgICAgIHJldHVybjtcblxuICAgIGNvbnN0IGxhc3RQb3NpdGlvbmVkR2x5cGggPSBwb3NpdGlvbmVkR2x5cGhzW2VuZF07XG4gICAgY29uc3QgbGFzdEFkdmFuY2UgPSBsYXN0UG9zaXRpb25lZEdseXBoLm1ldHJpY3MuYWR2YW5jZSAqIGxhc3RQb3NpdGlvbmVkR2x5cGguc2NhbGU7XG4gICAgY29uc3QgbGluZUluZGVudCA9IChwb3NpdGlvbmVkR2x5cGhzW2VuZF0ueCArIGxhc3RBZHZhbmNlKSAqIGp1c3RpZnk7XG5cbiAgICBmb3IgKGxldCBqID0gc3RhcnQ7IGogPD0gZW5kOyBqKyspIHtcbiAgICAgICAgcG9zaXRpb25lZEdseXBoc1tqXS54IC09IGxpbmVJbmRlbnQ7XG4gICAgICAgIHBvc2l0aW9uZWRHbHlwaHNbal0ueSArPSBsaW5lT2Zmc2V0O1xuICAgIH1cbn1cblxuZnVuY3Rpb24gYWxpZ24ocG9zaXRpb25lZExpbmVzOiBBcnJheTxQb3NpdGlvbmVkTGluZT4sXG4gICAgICAgICAgICAgICBqdXN0aWZ5OiBudW1iZXIsXG4gICAgICAgICAgICAgICBob3Jpem9udGFsQWxpZ246IG51bWJlcixcbiAgICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ246IG51bWJlcixcbiAgICAgICAgICAgICAgIG1heExpbmVMZW5ndGg6IG51bWJlcixcbiAgICAgICAgICAgICAgIG1heExpbmVIZWlnaHQ6IG51bWJlcixcbiAgICAgICAgICAgICAgIGxpbmVIZWlnaHQ6IG51bWJlcixcbiAgICAgICAgICAgICAgIGJsb2NrSGVpZ2h0OiBudW1iZXIsXG4gICAgICAgICAgICAgICBsaW5lQ291bnQ6IG51bWJlcikge1xuICAgIGNvbnN0IHNoaWZ0WCA9IChqdXN0aWZ5IC0gaG9yaXpvbnRhbEFsaWduKSAqIG1heExpbmVMZW5ndGg7XG4gICAgbGV0IHNoaWZ0WSA9IDA7XG5cbiAgICBpZiAobWF4TGluZUhlaWdodCAhPT0gbGluZUhlaWdodCkge1xuICAgICAgICBzaGlmdFkgPSAtYmxvY2tIZWlnaHQgKiB2ZXJ0aWNhbEFsaWduIC0gU0hBUElOR19ERUZBVUxUX09GRlNFVDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBzaGlmdFkgPSAoLXZlcnRpY2FsQWxpZ24gKiBsaW5lQ291bnQgKyAwLjUpICogbGluZUhlaWdodDtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgcG9zaXRpb25lZExpbmVzKSB7XG4gICAgICAgIGZvciAoY29uc3QgcG9zaXRpb25lZEdseXBoIG9mIGxpbmUucG9zaXRpb25lZEdseXBocykge1xuICAgICAgICAgICAgcG9zaXRpb25lZEdseXBoLnggKz0gc2hpZnRYO1xuICAgICAgICAgICAgcG9zaXRpb25lZEdseXBoLnkgKz0gc2hpZnRZO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgdHlwZSBQb3NpdGlvbmVkSWNvbiA9IHtcbiAgICBpbWFnZTogSW1hZ2VQb3NpdGlvbixcbiAgICB0b3A6IG51bWJlcixcbiAgICBib3R0b206IG51bWJlcixcbiAgICBsZWZ0OiBudW1iZXIsXG4gICAgcmlnaHQ6IG51bWJlcixcbiAgICBjb2xsaXNpb25QYWRkaW5nPzogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl1cbn07XG5cbmZ1bmN0aW9uIHNoYXBlSWNvbihpbWFnZTogSW1hZ2VQb3NpdGlvbiwgaWNvbk9mZnNldDogW251bWJlciwgbnVtYmVyXSwgaWNvbkFuY2hvcjogU3ltYm9sQW5jaG9yKTogUG9zaXRpb25lZEljb24ge1xuICAgIGNvbnN0IHtob3Jpem9udGFsQWxpZ24sIHZlcnRpY2FsQWxpZ259ID0gZ2V0QW5jaG9yQWxpZ25tZW50KGljb25BbmNob3IpO1xuICAgIGNvbnN0IGR4ID0gaWNvbk9mZnNldFswXTtcbiAgICBjb25zdCBkeSA9IGljb25PZmZzZXRbMV07XG4gICAgY29uc3QgeDEgPSBkeCAtIGltYWdlLmRpc3BsYXlTaXplWzBdICogaG9yaXpvbnRhbEFsaWduO1xuICAgIGNvbnN0IHgyID0geDEgKyBpbWFnZS5kaXNwbGF5U2l6ZVswXTtcbiAgICBjb25zdCB5MSA9IGR5IC0gaW1hZ2UuZGlzcGxheVNpemVbMV0gKiB2ZXJ0aWNhbEFsaWduO1xuICAgIGNvbnN0IHkyID0geTEgKyBpbWFnZS5kaXNwbGF5U2l6ZVsxXTtcbiAgICByZXR1cm4ge2ltYWdlLCB0b3A6IHkxLCBib3R0b206IHkyLCBsZWZ0OiB4MSwgcmlnaHQ6IHgyfTtcbn1cblxuZnVuY3Rpb24gZml0SWNvblRvVGV4dChzaGFwZWRJY29uOiBQb3NpdGlvbmVkSWNvbiwgc2hhcGVkVGV4dDogU2hhcGluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgdGV4dEZpdDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBbIG51bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlciBdLFxuICAgICAgICAgICAgICAgICAgICAgICBpY29uT2Zmc2V0OiBbIG51bWJlciwgbnVtYmVyIF0sIGZvbnRTY2FsZTogbnVtYmVyKTogUG9zaXRpb25lZEljb24ge1xuICAgIGFzc2VydCh0ZXh0Rml0ICE9PSAnbm9uZScpO1xuICAgIGFzc2VydChBcnJheS5pc0FycmF5KHBhZGRpbmcpICYmIHBhZGRpbmcubGVuZ3RoID09PSA0KTtcbiAgICBhc3NlcnQoQXJyYXkuaXNBcnJheShpY29uT2Zmc2V0KSAmJiBpY29uT2Zmc2V0Lmxlbmd0aCA9PT0gMik7XG5cbiAgICBjb25zdCBpbWFnZSA9IHNoYXBlZEljb24uaW1hZ2U7XG5cbiAgICBsZXQgY29sbGlzaW9uUGFkZGluZztcbiAgICBpZiAoaW1hZ2UuY29udGVudCkge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gaW1hZ2UuY29udGVudDtcbiAgICAgICAgY29uc3QgcGl4ZWxSYXRpbyA9IGltYWdlLnBpeGVsUmF0aW8gfHwgMTtcbiAgICAgICAgY29sbGlzaW9uUGFkZGluZyA9IFtcbiAgICAgICAgICAgIGNvbnRlbnRbMF0gLyBwaXhlbFJhdGlvLFxuICAgICAgICAgICAgY29udGVudFsxXSAvIHBpeGVsUmF0aW8sXG4gICAgICAgICAgICBpbWFnZS5kaXNwbGF5U2l6ZVswXSAtIGNvbnRlbnRbMl0gLyBwaXhlbFJhdGlvLFxuICAgICAgICAgICAgaW1hZ2UuZGlzcGxheVNpemVbMV0gLSBjb250ZW50WzNdIC8gcGl4ZWxSYXRpb1xuICAgICAgICBdO1xuICAgIH1cblxuICAgIC8vIFdlIGRvbid0IHJlc3BlY3QgdGhlIGljb24tYW5jaG9yLCBiZWNhdXNlIGljb24tdGV4dC1maXQgaXMgc2V0LiBJbnN0ZWFkLFxuICAgIC8vIHRoZSBpY29uIHdpbGwgYmUgY2VudGVyZWQgb24gdGhlIHRleHQsIHRoZW4gc3RyZXRjaGVkIGluIHRoZSBnaXZlblxuICAgIC8vIGRpbWVuc2lvbnMuXG5cbiAgICBjb25zdCB0ZXh0TGVmdCA9IHNoYXBlZFRleHQubGVmdCAqIGZvbnRTY2FsZTtcbiAgICBjb25zdCB0ZXh0UmlnaHQgPSBzaGFwZWRUZXh0LnJpZ2h0ICogZm9udFNjYWxlO1xuXG4gICAgbGV0IHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdDtcbiAgICBpZiAodGV4dEZpdCA9PT0gJ3dpZHRoJyB8fCB0ZXh0Rml0ID09PSAnYm90aCcpIHtcbiAgICAgICAgLy8gU3RyZXRjaGVkIGhvcml6b250YWxseSB0byB0aGUgdGV4dCB3aWR0aFxuICAgICAgICBsZWZ0ID0gaWNvbk9mZnNldFswXSArIHRleHRMZWZ0IC0gcGFkZGluZ1szXTtcbiAgICAgICAgcmlnaHQgPSBpY29uT2Zmc2V0WzBdICsgdGV4dFJpZ2h0ICsgcGFkZGluZ1sxXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDZW50ZXJlZCBvbiB0aGUgdGV4dFxuICAgICAgICBsZWZ0ID0gaWNvbk9mZnNldFswXSArICh0ZXh0TGVmdCArIHRleHRSaWdodCAtIGltYWdlLmRpc3BsYXlTaXplWzBdKSAvIDI7XG4gICAgICAgIHJpZ2h0ID0gbGVmdCArIGltYWdlLmRpc3BsYXlTaXplWzBdO1xuICAgIH1cblxuICAgIGNvbnN0IHRleHRUb3AgPSBzaGFwZWRUZXh0LnRvcCAqIGZvbnRTY2FsZTtcbiAgICBjb25zdCB0ZXh0Qm90dG9tID0gc2hhcGVkVGV4dC5ib3R0b20gKiBmb250U2NhbGU7XG4gICAgaWYgKHRleHRGaXQgPT09ICdoZWlnaHQnIHx8IHRleHRGaXQgPT09ICdib3RoJykge1xuICAgICAgICAvLyBTdHJldGNoZWQgdmVydGljYWxseSB0byB0aGUgdGV4dCBoZWlnaHRcbiAgICAgICAgdG9wID0gaWNvbk9mZnNldFsxXSArIHRleHRUb3AgLSBwYWRkaW5nWzBdO1xuICAgICAgICBib3R0b20gPSBpY29uT2Zmc2V0WzFdICsgdGV4dEJvdHRvbSArIHBhZGRpbmdbMl07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ2VudGVyZWQgb24gdGhlIHRleHRcbiAgICAgICAgdG9wID0gaWNvbk9mZnNldFsxXSArICh0ZXh0VG9wICsgdGV4dEJvdHRvbSAtIGltYWdlLmRpc3BsYXlTaXplWzFdKSAvIDI7XG4gICAgICAgIGJvdHRvbSA9IHRvcCArIGltYWdlLmRpc3BsYXlTaXplWzFdO1xuICAgIH1cblxuICAgIHJldHVybiB7aW1hZ2UsIHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCwgY29sbGlzaW9uUGFkZGluZ307XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbmltcG9ydCB7cmVnaXN0ZXJ9IGZyb20gJy4uL3V0aWwvd2ViX3dvcmtlcl90cmFuc2Zlcic7XG5cbmNsYXNzIEFuY2hvciBleHRlbmRzIFBvaW50IHtcbiAgICBhbmdsZTogYW55O1xuICAgIHNlZ21lbnQ6IG51bWJlciB8IHZvaWQ7XG5cbiAgICBjb25zdHJ1Y3Rvcih4OiBudW1iZXIsIHk6IG51bWJlciwgYW5nbGU6IG51bWJlciwgc2VnbWVudD86IG51bWJlcikge1xuICAgICAgICBzdXBlcih4LCB5KTtcbiAgICAgICAgdGhpcy5hbmdsZSA9IGFuZ2xlO1xuICAgICAgICBpZiAoc2VnbWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnNlZ21lbnQgPSBzZWdtZW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvbmUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQW5jaG9yKHRoaXMueCwgdGhpcy55LCB0aGlzLmFuZ2xlLCB0aGlzLnNlZ21lbnQpO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ0FuY2hvcicsIEFuY2hvcik7XG5cbmV4cG9ydCBkZWZhdWx0IEFuY2hvcjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7bnVtYmVyIGFzIGludGVycG9sYXRlfSBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvaW50ZXJwb2xhdGUnO1xuaW1wb3J0IEludGVycG9sYXRlIGZyb20gJy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9pbnRlcnBvbGF0ZSc7XG5pbXBvcnQge2NsYW1wfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4uL3N0eWxlL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5cbmltcG9ydCB0eXBlIHtQcm9wZXJ0eVZhbHVlLCBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWV9IGZyb20gJy4uL3N0eWxlL3Byb3BlcnRpZXMnO1xuaW1wb3J0IHR5cGUge0ludGVycG9sYXRpb25UeXBlfSBmcm9tICcuLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvaW50ZXJwb2xhdGUnO1xuXG5jb25zdCBTSVpFX1BBQ0tfRkFDVE9SID0gMTI4O1xuXG5leHBvcnQge2dldFNpemVEYXRhLCBldmFsdWF0ZVNpemVGb3JGZWF0dXJlLCBldmFsdWF0ZVNpemVGb3Jab29tLCBTSVpFX1BBQ0tfRkFDVE9SfTtcblxuZXhwb3J0IHR5cGUgU2l6ZURhdGEgPSB7XG4gICAga2luZDogJ2NvbnN0YW50JyxcbiAgICBsYXlvdXRTaXplOiBudW1iZXJcbn0gfCB7XG4gICAga2luZDogJ3NvdXJjZSdcbn0gfCB7XG4gICAga2luZDogJ2NhbWVyYScsXG4gICAgbWluWm9vbTogbnVtYmVyLFxuICAgIG1heFpvb206IG51bWJlcixcbiAgICBtaW5TaXplOiBudW1iZXIsXG4gICAgbWF4U2l6ZTogbnVtYmVyLFxuICAgIGludGVycG9sYXRpb25UeXBlOiA/SW50ZXJwb2xhdGlvblR5cGVcbn0gfCB7XG4gICAga2luZDogJ2NvbXBvc2l0ZScsXG4gICAgbWluWm9vbTogbnVtYmVyLFxuICAgIG1heFpvb206IG51bWJlcixcbiAgICBpbnRlcnBvbGF0aW9uVHlwZTogP0ludGVycG9sYXRpb25UeXBlXG59O1xuXG4vLyBGb3Ige3RleHQsaWNvbn0tc2l6ZSwgZ2V0IHRoZSBidWNrZXQtbGV2ZWwgZGF0YSB0aGF0IHdpbGwgYmUgbmVlZGVkIGJ5XG4vLyB0aGUgcGFpbnRlciB0byBzZXQgc3ltYm9sLXNpemUtcmVsYXRlZCB1bmlmb3Jtc1xuZnVuY3Rpb24gZ2V0U2l6ZURhdGEodGlsZVpvb206IG51bWJlciwgdmFsdWU6IFByb3BlcnR5VmFsdWU8bnVtYmVyLCBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8bnVtYmVyPj4pOiBTaXplRGF0YSB7XG4gICAgY29uc3Qge2V4cHJlc3Npb259ID0gdmFsdWU7XG5cbiAgICBpZiAoZXhwcmVzc2lvbi5raW5kID09PSAnY29uc3RhbnQnKSB7XG4gICAgICAgIGNvbnN0IGxheW91dFNpemUgPSBleHByZXNzaW9uLmV2YWx1YXRlKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyh0aWxlWm9vbSArIDEpKTtcbiAgICAgICAgcmV0dXJuIHtraW5kOiAnY29uc3RhbnQnLCBsYXlvdXRTaXplfTtcblxuICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbi5raW5kID09PSAnc291cmNlJykge1xuICAgICAgICByZXR1cm4ge2tpbmQ6ICdzb3VyY2UnfTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHt6b29tU3RvcHMsIGludGVycG9sYXRpb25UeXBlfSA9IGV4cHJlc3Npb247XG5cbiAgICAgICAgLy8gY2FsY3VsYXRlIGNvdmVyaW5nIHpvb20gc3RvcHMgZm9yIHpvb20tZGVwZW5kZW50IHZhbHVlc1xuICAgICAgICBsZXQgbG93ZXIgPSAwO1xuICAgICAgICB3aGlsZSAobG93ZXIgPCB6b29tU3RvcHMubGVuZ3RoICYmIHpvb21TdG9wc1tsb3dlcl0gPD0gdGlsZVpvb20pIGxvd2VyKys7XG4gICAgICAgIGxvd2VyID0gTWF0aC5tYXgoMCwgbG93ZXIgLSAxKTtcbiAgICAgICAgbGV0IHVwcGVyID0gbG93ZXI7XG4gICAgICAgIHdoaWxlICh1cHBlciA8IHpvb21TdG9wcy5sZW5ndGggJiYgem9vbVN0b3BzW3VwcGVyXSA8IHRpbGVab29tICsgMSkgdXBwZXIrKztcbiAgICAgICAgdXBwZXIgPSBNYXRoLm1pbih6b29tU3RvcHMubGVuZ3RoIC0gMSwgdXBwZXIpO1xuXG4gICAgICAgIGNvbnN0IG1pblpvb20gPSB6b29tU3RvcHNbbG93ZXJdO1xuICAgICAgICBjb25zdCBtYXhab29tID0gem9vbVN0b3BzW3VwcGVyXTtcblxuICAgICAgICAvLyBXZSdkIGxpa2UgdG8gYmUgYWJsZSB0byB1c2UgQ2FtZXJhRXhwcmVzc2lvbiBvciBDb21wb3NpdGVFeHByZXNzaW9uIGluIHRoZXNlXG4gICAgICAgIC8vIHJldHVybiB0eXBlcyByYXRoZXIgdGhhbiBFeHByZXNzaW9uU3BlY2lmaWNhdGlvbiwgYnV0IHRoZSBmb3JtZXIgYXJlIG5vdFxuICAgICAgICAvLyB0cmFuc2ZlcnJhYmxlIGFjcm9zcyBXZWIgV29ya2VyIGJvdW5kYXJpZXMuXG4gICAgICAgIGlmIChleHByZXNzaW9uLmtpbmQgPT09ICdjb21wb3NpdGUnKSB7XG4gICAgICAgICAgICByZXR1cm4ge2tpbmQ6ICdjb21wb3NpdGUnLCBtaW5ab29tLCBtYXhab29tLCBpbnRlcnBvbGF0aW9uVHlwZX07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBmb3IgY2FtZXJhIGZ1bmN0aW9ucywgYWxzbyBzYXZlIG9mZiB0aGUgZnVuY3Rpb24gdmFsdWVzXG4gICAgICAgIC8vIGV2YWx1YXRlZCBhdCB0aGUgY292ZXJpbmcgem9vbSBsZXZlbHNcbiAgICAgICAgY29uc3QgbWluU2l6ZSA9IGV4cHJlc3Npb24uZXZhbHVhdGUobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKG1pblpvb20pKTtcbiAgICAgICAgY29uc3QgbWF4U2l6ZSA9IGV4cHJlc3Npb24uZXZhbHVhdGUobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKG1heFpvb20pKTtcblxuICAgICAgICByZXR1cm4ge2tpbmQ6ICdjYW1lcmEnLCBtaW5ab29tLCBtYXhab29tLCBtaW5TaXplLCBtYXhTaXplLCBpbnRlcnBvbGF0aW9uVHlwZX07XG4gICAgfVxufVxuXG5mdW5jdGlvbiBldmFsdWF0ZVNpemVGb3JGZWF0dXJlKHNpemVEYXRhOiBTaXplRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3VTaXplLCB1U2l6ZVR9OiB7IHVTaXplOiBudW1iZXIsIHVTaXplVDogbnVtYmVyIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtsb3dlclNpemUsIHVwcGVyU2l6ZX06IHsgbG93ZXJTaXplOiBudW1iZXIsIHVwcGVyU2l6ZTogbnVtYmVyfSkge1xuICAgIGlmIChzaXplRGF0YS5raW5kID09PSAnc291cmNlJykge1xuICAgICAgICByZXR1cm4gbG93ZXJTaXplIC8gU0laRV9QQUNLX0ZBQ1RPUjtcbiAgICB9IGVsc2UgaWYgKHNpemVEYXRhLmtpbmQgPT09ICdjb21wb3NpdGUnKSB7XG4gICAgICAgIHJldHVybiBpbnRlcnBvbGF0ZShsb3dlclNpemUgLyBTSVpFX1BBQ0tfRkFDVE9SLCB1cHBlclNpemUgLyBTSVpFX1BBQ0tfRkFDVE9SLCB1U2l6ZVQpO1xuICAgIH1cbiAgICByZXR1cm4gdVNpemU7XG59XG5cbmZ1bmN0aW9uIGV2YWx1YXRlU2l6ZUZvclpvb20oc2l6ZURhdGE6IFNpemVEYXRhLCB6b29tOiBudW1iZXIpIHtcbiAgICBsZXQgdVNpemVUID0gMDtcbiAgICBsZXQgdVNpemUgPSAwO1xuXG4gICAgaWYgKHNpemVEYXRhLmtpbmQgPT09ICdjb25zdGFudCcpIHtcbiAgICAgICAgdVNpemUgPSBzaXplRGF0YS5sYXlvdXRTaXplO1xuXG4gICAgfSBlbHNlIGlmIChzaXplRGF0YS5raW5kICE9PSAnc291cmNlJykge1xuICAgICAgICBjb25zdCB7aW50ZXJwb2xhdGlvblR5cGUsIG1pblpvb20sIG1heFpvb219ID0gc2l6ZURhdGE7XG5cbiAgICAgICAgLy8gRXZlbiB0aG91Z2ggd2UgY291bGQgZ2V0IHRoZSBleGFjdCB2YWx1ZSBvZiB0aGUgY2FtZXJhIGZ1bmN0aW9uXG4gICAgICAgIC8vIGF0IHogPSB0ci56b29tLCB3ZSBpbnRlbnRpb25hbGx5IGRvIG5vdDogaW5zdGVhZCwgd2UgaW50ZXJwb2xhdGVcbiAgICAgICAgLy8gYmV0d2VlbiB0aGUgY2FtZXJhIGZ1bmN0aW9uIHZhbHVlcyBhdCBhIHBhaXIgb2Ygem9vbSBzdG9wcyBjb3ZlcmluZ1xuICAgICAgICAvLyBbdGlsZVpvb20sIHRpbGVab29tICsgMV0gaW4gb3JkZXIgdG8gYmUgY29uc2lzdGVudCB3aXRoIHRoaXNcbiAgICAgICAgLy8gcmVzdHJpY3Rpb24gb24gY29tcG9zaXRlIGZ1bmN0aW9uc1xuICAgICAgICBjb25zdCB0ID0gIWludGVycG9sYXRpb25UeXBlID8gMCA6IGNsYW1wKFxuICAgICAgICAgICAgSW50ZXJwb2xhdGUuaW50ZXJwb2xhdGlvbkZhY3RvcihpbnRlcnBvbGF0aW9uVHlwZSwgem9vbSwgbWluWm9vbSwgbWF4Wm9vbSksIDAsIDEpO1xuXG4gICAgICAgIGlmIChzaXplRGF0YS5raW5kID09PSAnY2FtZXJhJykge1xuICAgICAgICAgICAgdVNpemUgPSBpbnRlcnBvbGF0ZShzaXplRGF0YS5taW5TaXplLCBzaXplRGF0YS5tYXhTaXplLCB0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVTaXplVCA9IHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge3VTaXplVCwgdVNpemV9O1xufVxuIiwiLy8gQGZsb3dcblxuZXhwb3J0IGRlZmF1bHQgY2hlY2tNYXhBbmdsZTtcblxuaW1wb3J0IHR5cGUgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSBBbmNob3IgZnJvbSAnLi9hbmNob3InO1xuXG4vKipcbiAqIExhYmVscyBwbGFjZWQgYXJvdW5kIHJlYWxseSBzaGFycCBhbmdsZXMgYXJlbid0IHJlYWRhYmxlLiBDaGVjayBpZiBhbnlcbiAqIHBhcnQgb2YgdGhlIHBvdGVudGlhbCBsYWJlbCBoYXMgYSBjb21iaW5lZCBhbmdsZSB0aGF0IGlzIHRvbyBiaWcuXG4gKlxuICogQHBhcmFtIGxpbmVcbiAqIEBwYXJhbSBhbmNob3IgVGhlIHBvaW50IG9uIHRoZSBsaW5lIGFyb3VuZCB3aGljaCB0aGUgbGFiZWwgaXMgYW5jaG9yZWQuXG4gKiBAcGFyYW0gbGFiZWxMZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgbGFiZWwgaW4gZ2VvbWV0cnkgdW5pdHMuXG4gKiBAcGFyYW0gd2luZG93U2l6ZSBUaGUgY2hlY2sgZmFpbHMgaWYgdGhlIGNvbWJpbmVkIGFuZ2xlcyB3aXRoaW4gYSBwYXJ0IG9mIHRoZSBsaW5lIHRoYXQgaXMgYHdpbmRvd1NpemVgIGxvbmcgaXMgdG9vIGJpZy5cbiAqIEBwYXJhbSBtYXhBbmdsZSBUaGUgbWF4aW11bSBjb21iaW5lZCBhbmdsZSB0aGF0IGFueSB3aW5kb3cgYWxvbmcgdGhlIGxhYmVsIGlzIGFsbG93ZWQgdG8gaGF2ZS5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gd2hldGhlciB0aGUgbGFiZWwgc2hvdWxkIGJlIHBsYWNlZFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2hlY2tNYXhBbmdsZShsaW5lOiBBcnJheTxQb2ludD4sIGFuY2hvcjogQW5jaG9yLCBsYWJlbExlbmd0aDogbnVtYmVyLCB3aW5kb3dTaXplOiBudW1iZXIsIG1heEFuZ2xlOiBudW1iZXIpIHtcblxuICAgIC8vIGhvcml6b250YWwgbGFiZWxzIGFsd2F5cyBwYXNzXG4gICAgaWYgKGFuY2hvci5zZWdtZW50ID09PSB1bmRlZmluZWQpIHJldHVybiB0cnVlO1xuXG4gICAgbGV0IHAgPSBhbmNob3I7XG4gICAgbGV0IGluZGV4ID0gYW5jaG9yLnNlZ21lbnQgKyAxO1xuICAgIGxldCBhbmNob3JEaXN0YW5jZSA9IDA7XG5cbiAgICAvLyBtb3ZlIGJhY2t3YXJkcyBhbG9uZyB0aGUgbGluZSB0byB0aGUgZmlyc3Qgc2VnbWVudCB0aGUgbGFiZWwgYXBwZWFycyBvblxuICAgIHdoaWxlIChhbmNob3JEaXN0YW5jZSA+IC1sYWJlbExlbmd0aCAvIDIpIHtcbiAgICAgICAgaW5kZXgtLTtcblxuICAgICAgICAvLyB0aGVyZSBpc24ndCBlbm91Z2ggcm9vbSBmb3IgdGhlIGxhYmVsIGFmdGVyIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmVcbiAgICAgICAgaWYgKGluZGV4IDwgMCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGFuY2hvckRpc3RhbmNlIC09IGxpbmVbaW5kZXhdLmRpc3QocCk7XG4gICAgICAgIHAgPSBsaW5lW2luZGV4XTtcbiAgICB9XG5cbiAgICBhbmNob3JEaXN0YW5jZSArPSBsaW5lW2luZGV4XS5kaXN0KGxpbmVbaW5kZXggKyAxXSk7XG4gICAgaW5kZXgrKztcblxuICAgIC8vIHN0b3JlIHJlY2VudCBjb3JuZXJzIGFuZCB0aGVpciB0b3RhbCBhbmdsZSBkaWZmZXJlbmNlXG4gICAgY29uc3QgcmVjZW50Q29ybmVycyA9IFtdO1xuICAgIGxldCByZWNlbnRBbmdsZURlbHRhID0gMDtcblxuICAgIC8vIG1vdmUgZm9yd2FyZHMgYnkgdGhlIGxlbmd0aCBvZiB0aGUgbGFiZWwgYW5kIGNoZWNrIGFuZ2xlcyBhbG9uZyB0aGUgd2F5XG4gICAgd2hpbGUgKGFuY2hvckRpc3RhbmNlIDwgbGFiZWxMZW5ndGggLyAyKSB7XG4gICAgICAgIGNvbnN0IHByZXYgPSBsaW5lW2luZGV4IC0gMV07XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSBsaW5lW2luZGV4XTtcbiAgICAgICAgY29uc3QgbmV4dCA9IGxpbmVbaW5kZXggKyAxXTtcblxuICAgICAgICAvLyB0aGVyZSBpc24ndCBlbm91Z2ggcm9vbSBmb3IgdGhlIGxhYmVsIGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBsaW5lXG4gICAgICAgIGlmICghbmV4dCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGxldCBhbmdsZURlbHRhID0gcHJldi5hbmdsZVRvKGN1cnJlbnQpIC0gY3VycmVudC5hbmdsZVRvKG5leHQpO1xuICAgICAgICAvLyByZXN0cmljdCBhbmdsZSB0byAtcGkuLnBpIHJhbmdlXG4gICAgICAgIGFuZ2xlRGVsdGEgPSBNYXRoLmFicygoKGFuZ2xlRGVsdGEgKyAzICogTWF0aC5QSSkgJSAoTWF0aC5QSSAqIDIpKSAtIE1hdGguUEkpO1xuXG4gICAgICAgIHJlY2VudENvcm5lcnMucHVzaCh7XG4gICAgICAgICAgICBkaXN0YW5jZTogYW5jaG9yRGlzdGFuY2UsXG4gICAgICAgICAgICBhbmdsZURlbHRhXG4gICAgICAgIH0pO1xuICAgICAgICByZWNlbnRBbmdsZURlbHRhICs9IGFuZ2xlRGVsdGE7XG5cbiAgICAgICAgLy8gcmVtb3ZlIGNvcm5lcnMgdGhhdCBhcmUgZmFyIGVub3VnaCBhd2F5IGZyb20gdGhlIGxpc3Qgb2YgcmVjZW50IGFuY2hvcnNcbiAgICAgICAgd2hpbGUgKGFuY2hvckRpc3RhbmNlIC0gcmVjZW50Q29ybmVyc1swXS5kaXN0YW5jZSA+IHdpbmRvd1NpemUpIHtcbiAgICAgICAgICAgIHJlY2VudEFuZ2xlRGVsdGEgLT0gcmVjZW50Q29ybmVycy5zaGlmdCgpLmFuZ2xlRGVsdGE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0aGUgc3VtIG9mIGFuZ2xlcyB3aXRoaW4gdGhlIHdpbmRvdyBhcmVhIGV4Y2VlZHMgdGhlIG1heGltdW0gYWxsb3dlZCB2YWx1ZS4gY2hlY2sgZmFpbHMuXG4gICAgICAgIGlmIChyZWNlbnRBbmdsZURlbHRhID4gbWF4QW5nbGUpIHJldHVybiBmYWxzZTtcblxuICAgICAgICBpbmRleCsrO1xuICAgICAgICBhbmNob3JEaXN0YW5jZSArPSBjdXJyZW50LmRpc3QobmV4dCk7XG4gICAgfVxuXG4gICAgLy8gbm8gcGFydCBvZiB0aGUgbGluZSBoYWQgYW4gYW5nbGUgZ3JlYXRlciB0aGFuIHRoZSBtYXhpbXVtIGFsbG93ZWQuIGNoZWNrIHBhc3Nlcy5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7bnVtYmVyIGFzIGludGVycG9sYXRlfSBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvaW50ZXJwb2xhdGUnO1xuXG5pbXBvcnQgQW5jaG9yIGZyb20gJy4uL3N5bWJvbC9hbmNob3InO1xuaW1wb3J0IGNoZWNrTWF4QW5nbGUgZnJvbSAnLi9jaGVja19tYXhfYW5nbGUnO1xuXG5pbXBvcnQgdHlwZSBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB0eXBlIHtTaGFwaW5nLCBQb3NpdGlvbmVkSWNvbn0gZnJvbSAnLi9zaGFwaW5nJztcblxuZXhwb3J0IHtnZXRBbmNob3JzLCBnZXRDZW50ZXJBbmNob3J9O1xuXG5mdW5jdGlvbiBnZXRMaW5lTGVuZ3RoKGxpbmU6IEFycmF5PFBvaW50Pik6IG51bWJlciB7XG4gICAgbGV0IGxpbmVMZW5ndGggPSAwO1xuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgbGluZS5sZW5ndGggLSAxOyBrKyspIHtcbiAgICAgICAgbGluZUxlbmd0aCArPSBsaW5lW2tdLmRpc3QobGluZVtrICsgMV0pO1xuICAgIH1cbiAgICByZXR1cm4gbGluZUxlbmd0aDtcbn1cblxuZnVuY3Rpb24gZ2V0QW5nbGVXaW5kb3dTaXplKHNoYXBlZFRleHQ6ID9TaGFwaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoU2l6ZTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJveFNjYWxlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBzaGFwZWRUZXh0ID9cbiAgICAgICAgMyAvIDUgKiBnbHlwaFNpemUgKiBib3hTY2FsZSA6XG4gICAgICAgIDA7XG59XG5cbmZ1bmN0aW9uIGdldFNoYXBlZExhYmVsTGVuZ3RoKHNoYXBlZFRleHQ6ID9TaGFwaW5nLCBzaGFwZWRJY29uOiA/UG9zaXRpb25lZEljb24pOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLm1heChcbiAgICAgICAgc2hhcGVkVGV4dCA/IHNoYXBlZFRleHQucmlnaHQgLSBzaGFwZWRUZXh0LmxlZnQgOiAwLFxuICAgICAgICBzaGFwZWRJY29uID8gc2hhcGVkSWNvbi5yaWdodCAtIHNoYXBlZEljb24ubGVmdCA6IDApO1xufVxuXG5mdW5jdGlvbiBnZXRDZW50ZXJBbmNob3IobGluZTogQXJyYXk8UG9pbnQ+LFxuICAgICAgICAgICAgICAgICAgICAgICAgIG1heEFuZ2xlOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGVkVGV4dDogP1NoYXBpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGVkSWNvbjogP1Bvc2l0aW9uZWRJY29uLFxuICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoU2l6ZTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgIGJveFNjYWxlOiBudW1iZXIpIHtcbiAgICBjb25zdCBhbmdsZVdpbmRvd1NpemUgPSBnZXRBbmdsZVdpbmRvd1NpemUoc2hhcGVkVGV4dCwgZ2x5cGhTaXplLCBib3hTY2FsZSk7XG4gICAgY29uc3QgbGFiZWxMZW5ndGggPSBnZXRTaGFwZWRMYWJlbExlbmd0aChzaGFwZWRUZXh0LCBzaGFwZWRJY29uKSAqIGJveFNjYWxlO1xuXG4gICAgbGV0IHByZXZEaXN0YW5jZSA9IDA7XG4gICAgY29uc3QgY2VudGVyRGlzdGFuY2UgPSBnZXRMaW5lTGVuZ3RoKGxpbmUpIC8gMjtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZS5sZW5ndGggLSAxOyBpKyspIHtcblxuICAgICAgICBjb25zdCBhID0gbGluZVtpXSxcbiAgICAgICAgICAgIGIgPSBsaW5lW2kgKyAxXTtcblxuICAgICAgICBjb25zdCBzZWdtZW50RGlzdGFuY2UgPSBhLmRpc3QoYik7XG5cbiAgICAgICAgaWYgKHByZXZEaXN0YW5jZSArIHNlZ21lbnREaXN0YW5jZSA+IGNlbnRlckRpc3RhbmNlKSB7XG4gICAgICAgICAgICAvLyBUaGUgY2VudGVyIGlzIG9uIHRoaXMgc2VnbWVudFxuICAgICAgICAgICAgY29uc3QgdCA9IChjZW50ZXJEaXN0YW5jZSAtIHByZXZEaXN0YW5jZSkgLyBzZWdtZW50RGlzdGFuY2UsXG4gICAgICAgICAgICAgICAgeCA9IGludGVycG9sYXRlKGEueCwgYi54LCB0KSxcbiAgICAgICAgICAgICAgICB5ID0gaW50ZXJwb2xhdGUoYS55LCBiLnksIHQpO1xuXG4gICAgICAgICAgICBjb25zdCBhbmNob3IgPSBuZXcgQW5jaG9yKHgsIHksIGIuYW5nbGVUbyhhKSwgaSk7XG4gICAgICAgICAgICBhbmNob3IuX3JvdW5kKCk7XG4gICAgICAgICAgICBpZiAoIWFuZ2xlV2luZG93U2l6ZSB8fCBjaGVja01heEFuZ2xlKGxpbmUsIGFuY2hvciwgbGFiZWxMZW5ndGgsIGFuZ2xlV2luZG93U2l6ZSwgbWF4QW5nbGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFuY2hvcjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJldkRpc3RhbmNlICs9IHNlZ21lbnREaXN0YW5jZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGdldEFuY2hvcnMobGluZTogQXJyYXk8UG9pbnQ+LFxuICAgICAgICAgICAgICAgICAgICBzcGFjaW5nOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgIG1heEFuZ2xlOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgIHNoYXBlZFRleHQ6ID9TaGFwaW5nLFxuICAgICAgICAgICAgICAgICAgICBzaGFwZWRJY29uOiA/UG9zaXRpb25lZEljb24sXG4gICAgICAgICAgICAgICAgICAgIGdseXBoU2l6ZTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICBib3hTY2FsZTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICBvdmVyc2NhbGluZzogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICB0aWxlRXh0ZW50OiBudW1iZXIpIHtcblxuICAgIC8vIFJlc2FtcGxlIGEgbGluZSB0byBnZXQgYW5jaG9yIHBvaW50cyBmb3IgbGFiZWxzIGFuZCBjaGVjayB0aGF0IGVhY2hcbiAgICAvLyBwb3RlbnRpYWwgbGFiZWwgcGFzc2VzIHRleHQtbWF4LWFuZ2xlIGNoZWNrIGFuZCBoYXMgZW5vdWdoIGZyb29tIHRvIGZpdFxuICAgIC8vIG9uIHRoZSBsaW5lLlxuXG4gICAgY29uc3QgYW5nbGVXaW5kb3dTaXplID0gZ2V0QW5nbGVXaW5kb3dTaXplKHNoYXBlZFRleHQsIGdseXBoU2l6ZSwgYm94U2NhbGUpO1xuICAgIGNvbnN0IHNoYXBlZExhYmVsTGVuZ3RoID0gZ2V0U2hhcGVkTGFiZWxMZW5ndGgoc2hhcGVkVGV4dCwgc2hhcGVkSWNvbik7XG4gICAgY29uc3QgbGFiZWxMZW5ndGggPSBzaGFwZWRMYWJlbExlbmd0aCAqIGJveFNjYWxlO1xuXG4gICAgLy8gSXMgdGhlIGxpbmUgY29udGludWVkIGZyb20gb3V0c2lkZSB0aGUgdGlsZSBib3VuZGFyeT9cbiAgICBjb25zdCBpc0xpbmVDb250aW51ZWQgPSBsaW5lWzBdLnggPT09IDAgfHwgbGluZVswXS54ID09PSB0aWxlRXh0ZW50IHx8IGxpbmVbMF0ueSA9PT0gMCB8fCBsaW5lWzBdLnkgPT09IHRpbGVFeHRlbnQ7XG5cbiAgICAvLyBJcyB0aGUgbGFiZWwgbG9uZywgcmVsYXRpdmUgdG8gdGhlIHNwYWNpbmc/XG4gICAgLy8gSWYgc28sIGFkanVzdCB0aGUgc3BhY2luZyBzbyB0aGVyZSBpcyBhbHdheXMgYSBtaW5pbXVtIHNwYWNlIG9mIGBzcGFjaW5nIC8gNGAgYmV0d2VlbiBsYWJlbCBlZGdlcy5cbiAgICBpZiAoc3BhY2luZyAtIGxhYmVsTGVuZ3RoIDwgc3BhY2luZyAvIDQpIHtcbiAgICAgICAgc3BhY2luZyA9IGxhYmVsTGVuZ3RoICsgc3BhY2luZyAvIDQ7XG4gICAgfVxuXG4gICAgLy8gT2Zmc2V0IHRoZSBmaXJzdCBhbmNob3IgYnk6XG4gICAgLy8gRWl0aGVyIGhhbGYgdGhlIGxhYmVsIGxlbmd0aCBwbHVzIGEgZml4ZWQgZXh0cmEgb2Zmc2V0IGlmIHRoZSBsaW5lIGlzIG5vdCBjb250aW51ZWRcbiAgICAvLyBPciBoYWxmIHRoZSBzcGFjaW5nIGlmIHRoZSBsaW5lIGlzIGNvbnRpbnVlZC5cblxuICAgIC8vIEZvciBub24tY29udGludWVkIGxpbmVzLCBhZGQgYSBiaXQgb2YgZml4ZWQgZXh0cmEgb2Zmc2V0IHRvIGF2b2lkIGNvbGxpc2lvbnMgYXQgVCBpbnRlcnNlY3Rpb25zLlxuICAgIGNvbnN0IGZpeGVkRXh0cmFPZmZzZXQgPSBnbHlwaFNpemUgKiAyO1xuXG4gICAgY29uc3Qgb2Zmc2V0ID0gIWlzTGluZUNvbnRpbnVlZCA/XG4gICAgICAgICgoc2hhcGVkTGFiZWxMZW5ndGggLyAyICsgZml4ZWRFeHRyYU9mZnNldCkgKiBib3hTY2FsZSAqIG92ZXJzY2FsaW5nKSAlIHNwYWNpbmcgOlxuICAgICAgICAoc3BhY2luZyAvIDIgKiBvdmVyc2NhbGluZykgJSBzcGFjaW5nO1xuXG4gICAgcmV0dXJuIHJlc2FtcGxlKGxpbmUsIG9mZnNldCwgc3BhY2luZywgYW5nbGVXaW5kb3dTaXplLCBtYXhBbmdsZSwgbGFiZWxMZW5ndGgsIGlzTGluZUNvbnRpbnVlZCwgZmFsc2UsIHRpbGVFeHRlbnQpO1xufVxuXG5mdW5jdGlvbiByZXNhbXBsZShsaW5lLCBvZmZzZXQsIHNwYWNpbmcsIGFuZ2xlV2luZG93U2l6ZSwgbWF4QW5nbGUsIGxhYmVsTGVuZ3RoLCBpc0xpbmVDb250aW51ZWQsIHBsYWNlQXRNaWRkbGUsIHRpbGVFeHRlbnQpIHtcblxuICAgIGNvbnN0IGhhbGZMYWJlbExlbmd0aCA9IGxhYmVsTGVuZ3RoIC8gMjtcbiAgICBjb25zdCBsaW5lTGVuZ3RoID0gZ2V0TGluZUxlbmd0aChsaW5lKTtcblxuICAgIGxldCBkaXN0YW5jZSA9IDAsXG4gICAgICAgIG1hcmtlZERpc3RhbmNlID0gb2Zmc2V0IC0gc3BhY2luZztcblxuICAgIGxldCBhbmNob3JzID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmUubGVuZ3RoIC0gMTsgaSsrKSB7XG5cbiAgICAgICAgY29uc3QgYSA9IGxpbmVbaV0sXG4gICAgICAgICAgICBiID0gbGluZVtpICsgMV07XG5cbiAgICAgICAgY29uc3Qgc2VnbWVudERpc3QgPSBhLmRpc3QoYiksXG4gICAgICAgICAgICBhbmdsZSA9IGIuYW5nbGVUbyhhKTtcblxuICAgICAgICB3aGlsZSAobWFya2VkRGlzdGFuY2UgKyBzcGFjaW5nIDwgZGlzdGFuY2UgKyBzZWdtZW50RGlzdCkge1xuICAgICAgICAgICAgbWFya2VkRGlzdGFuY2UgKz0gc3BhY2luZztcblxuICAgICAgICAgICAgY29uc3QgdCA9IChtYXJrZWREaXN0YW5jZSAtIGRpc3RhbmNlKSAvIHNlZ21lbnREaXN0LFxuICAgICAgICAgICAgICAgIHggPSBpbnRlcnBvbGF0ZShhLngsIGIueCwgdCksXG4gICAgICAgICAgICAgICAgeSA9IGludGVycG9sYXRlKGEueSwgYi55LCB0KTtcblxuICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgcG9pbnQgaXMgd2l0aGluIHRoZSB0aWxlIGJvdW5kYXJpZXMgYW5kIHRoYXRcbiAgICAgICAgICAgIC8vIHRoZSBsYWJlbCB3b3VsZCBmaXQgYmVmb3JlIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0aGUgbGluZVxuICAgICAgICAgICAgLy8gaWYgcGxhY2VkIGF0IHRoaXMgcG9pbnQuXG4gICAgICAgICAgICBpZiAoeCA+PSAwICYmIHggPCB0aWxlRXh0ZW50ICYmIHkgPj0gMCAmJiB5IDwgdGlsZUV4dGVudCAmJlxuICAgICAgICAgICAgICAgICAgICBtYXJrZWREaXN0YW5jZSAtIGhhbGZMYWJlbExlbmd0aCA+PSAwICYmXG4gICAgICAgICAgICAgICAgICAgIG1hcmtlZERpc3RhbmNlICsgaGFsZkxhYmVsTGVuZ3RoIDw9IGxpbmVMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhbmNob3IgPSBuZXcgQW5jaG9yKHgsIHksIGFuZ2xlLCBpKTtcbiAgICAgICAgICAgICAgICBhbmNob3IuX3JvdW5kKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWFuZ2xlV2luZG93U2l6ZSB8fCBjaGVja01heEFuZ2xlKGxpbmUsIGFuY2hvciwgbGFiZWxMZW5ndGgsIGFuZ2xlV2luZG93U2l6ZSwgbWF4QW5nbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFuY2hvcnMucHVzaChhbmNob3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGRpc3RhbmNlICs9IHNlZ21lbnREaXN0O1xuICAgIH1cblxuICAgIGlmICghcGxhY2VBdE1pZGRsZSAmJiAhYW5jaG9ycy5sZW5ndGggJiYgIWlzTGluZUNvbnRpbnVlZCkge1xuICAgICAgICAvLyBUaGUgZmlyc3QgYXR0ZW1wdCBhdCBmaW5kaW5nIGFuY2hvcnMgYXQgd2hpY2ggbGFiZWxzIGNhbiBiZSBwbGFjZWQgZmFpbGVkLlxuICAgICAgICAvLyBUcnkgYWdhaW4sIGJ1dCB0aGlzIHRpbWUganVzdCB0cnkgcGxhY2luZyBvbmUgYW5jaG9yIGF0IHRoZSBtaWRkbGUgb2YgdGhlIGxpbmUuXG4gICAgICAgIC8vIFRoaXMgaGFzIHRoZSBtb3N0IGVmZmVjdCBmb3Igc2hvcnQgbGluZXMgaW4gb3ZlcnNjYWxlZCB0aWxlcywgc2luY2UgdGhlXG4gICAgICAgIC8vIGluaXRpYWwgb2Zmc2V0IHVzZWQgaW4gb3ZlcnNjYWxlZCB0aWxlcyBpcyBjYWxjdWxhdGVkIHRvIGFsaWduIGxhYmVscyB3aXRoIHBvc2l0aW9ucyBpblxuICAgICAgICAvLyBwYXJlbnQgdGlsZXMgaW5zdGVhZCBvZiBwbGFjaW5nIHRoZSBsYWJlbCBhcyBjbG9zZSB0byB0aGUgYmVnaW5uaW5nIGFzIHBvc3NpYmxlLlxuICAgICAgICBhbmNob3JzID0gcmVzYW1wbGUobGluZSwgZGlzdGFuY2UgLyAyLCBzcGFjaW5nLCBhbmdsZVdpbmRvd1NpemUsIG1heEFuZ2xlLCBsYWJlbExlbmd0aCwgaXNMaW5lQ29udGludWVkLCB0cnVlLCB0aWxlRXh0ZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYW5jaG9ycztcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcblxuZXhwb3J0IGRlZmF1bHQgY2xpcExpbmU7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcGFydCBvZiBhIG11bHRpbGluZSB0aGF0IGludGVyc2VjdHMgd2l0aCB0aGUgcHJvdmlkZWQgcmVjdGFuZ3VsYXIgYm94LlxuICpcbiAqIEBwYXJhbSBsaW5lc1xuICogQHBhcmFtIHgxIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIGJveFxuICogQHBhcmFtIHkxIHRoZSB0b3AgZWRnZSBvZiB0aGUgYm94XG4gKiBAcGFyYW0geDIgdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlIGJveFxuICogQHBhcmFtIHkyIHRoZSBib3R0b20gZWRnZSBvZiB0aGUgYm94XG4gKiBAcmV0dXJucyBsaW5lc1xuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2xpcExpbmUobGluZXM6IEFycmF5PEFycmF5PFBvaW50Pj4sIHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIpOiBBcnJheTxBcnJheTxQb2ludD4+IHtcbiAgICBjb25zdCBjbGlwcGVkTGluZXMgPSBbXTtcblxuICAgIGZvciAobGV0IGwgPSAwOyBsIDwgbGluZXMubGVuZ3RoOyBsKyspIHtcbiAgICAgICAgY29uc3QgbGluZSA9IGxpbmVzW2xdO1xuICAgICAgICBsZXQgY2xpcHBlZExpbmU7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgbGV0IHAwID0gbGluZVtpXTtcbiAgICAgICAgICAgIGxldCBwMSA9IGxpbmVbaSArIDFdO1xuXG4gICAgICAgICAgICBpZiAocDAueCA8IHgxICYmIHAxLnggPCB4MSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwMC54IDwgeDEpIHtcbiAgICAgICAgICAgICAgICBwMCA9IG5ldyBQb2ludCh4MSwgcDAueSArIChwMS55IC0gcDAueSkgKiAoKHgxIC0gcDAueCkgLyAocDEueCAtIHAwLngpKSkuX3JvdW5kKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHAxLnggPCB4MSkge1xuICAgICAgICAgICAgICAgIHAxID0gbmV3IFBvaW50KHgxLCBwMC55ICsgKHAxLnkgLSBwMC55KSAqICgoeDEgLSBwMC54KSAvIChwMS54IC0gcDAueCkpKS5fcm91bmQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHAwLnkgPCB5MSAmJiBwMS55IDwgeTEpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocDAueSA8IHkxKSB7XG4gICAgICAgICAgICAgICAgcDAgPSBuZXcgUG9pbnQocDAueCArIChwMS54IC0gcDAueCkgKiAoKHkxIC0gcDAueSkgLyAocDEueSAtIHAwLnkpKSwgeTEpLl9yb3VuZCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwMS55IDwgeTEpIHtcbiAgICAgICAgICAgICAgICBwMSA9IG5ldyBQb2ludChwMC54ICsgKHAxLnggLSBwMC54KSAqICgoeTEgLSBwMC55KSAvIChwMS55IC0gcDAueSkpLCB5MSkuX3JvdW5kKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwMC54ID49IHgyICYmIHAxLnggPj0geDIpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocDAueCA+PSB4Mikge1xuICAgICAgICAgICAgICAgIHAwID0gbmV3IFBvaW50KHgyLCBwMC55ICsgKHAxLnkgLSBwMC55KSAqICgoeDIgLSBwMC54KSAvIChwMS54IC0gcDAueCkpKS5fcm91bmQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocDEueCA+PSB4Mikge1xuICAgICAgICAgICAgICAgIHAxID0gbmV3IFBvaW50KHgyLCBwMC55ICsgKHAxLnkgLSBwMC55KSAqICgoeDIgLSBwMC54KSAvIChwMS54IC0gcDAueCkpKS5fcm91bmQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHAwLnkgPj0geTIgJiYgcDEueSA+PSB5Mikge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwMC55ID49IHkyKSB7XG4gICAgICAgICAgICAgICAgcDAgPSBuZXcgUG9pbnQocDAueCArIChwMS54IC0gcDAueCkgKiAoKHkyIC0gcDAueSkgLyAocDEueSAtIHAwLnkpKSwgeTIpLl9yb3VuZCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwMS55ID49IHkyKSB7XG4gICAgICAgICAgICAgICAgcDEgPSBuZXcgUG9pbnQocDAueCArIChwMS54IC0gcDAueCkgKiAoKHkyIC0gcDAueSkgLyAocDEueSAtIHAwLnkpKSwgeTIpLl9yb3VuZCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWNsaXBwZWRMaW5lIHx8ICFwMC5lcXVhbHMoY2xpcHBlZExpbmVbY2xpcHBlZExpbmUubGVuZ3RoIC0gMV0pKSB7XG4gICAgICAgICAgICAgICAgY2xpcHBlZExpbmUgPSBbcDBdO1xuICAgICAgICAgICAgICAgIGNsaXBwZWRMaW5lcy5wdXNoKGNsaXBwZWRMaW5lKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2xpcHBlZExpbmUucHVzaChwMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2xpcHBlZExpbmVzO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG5pbXBvcnQge0dMWVBIX1BCRl9CT1JERVJ9IGZyb20gJy4uL3N0eWxlL3BhcnNlX2dseXBoX3BiZic7XG5cbmltcG9ydCB0eXBlIEFuY2hvciBmcm9tICcuL2FuY2hvcic7XG5pbXBvcnQgdHlwZSB7UG9zaXRpb25lZEljb24sIFNoYXBpbmd9IGZyb20gJy4vc2hhcGluZyc7XG5pbXBvcnQge1NIQVBJTkdfREVGQVVMVF9PRkZTRVR9IGZyb20gJy4vc2hhcGluZyc7XG5pbXBvcnQge0lNQUdFX1BBRERJTkd9IGZyb20gJy4uL3JlbmRlci9pbWFnZV9hdGxhcyc7XG5pbXBvcnQgdHlwZSBTeW1ib2xTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyL3N5bWJvbF9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSB7RmVhdHVyZX0gZnJvbSAnLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIHtTdHlsZUltYWdlfSBmcm9tICcuLi9zdHlsZS9zdHlsZV9pbWFnZSc7XG5pbXBvcnQgT05FX0VNIGZyb20gJy4vb25lX2VtJztcblxuLyoqXG4gKiBBIHRleHR1cmVkIHF1YWQgZm9yIHJlbmRlcmluZyBhIHNpbmdsZSBpY29uIG9yIGdseXBoLlxuICpcbiAqIFRoZSB6b29tIHJhbmdlIHRoZSBnbHlwaCBjYW4gYmUgc2hvd24gaXMgZGVmaW5lZCBieSBtaW5TY2FsZSBhbmQgbWF4U2NhbGUuXG4gKlxuICogQHBhcmFtIHRsIFRoZSBvZmZzZXQgb2YgdGhlIHRvcCBsZWZ0IGNvcm5lciBmcm9tIHRoZSBhbmNob3IuXG4gKiBAcGFyYW0gdHIgVGhlIG9mZnNldCBvZiB0aGUgdG9wIHJpZ2h0IGNvcm5lciBmcm9tIHRoZSBhbmNob3IuXG4gKiBAcGFyYW0gYmwgVGhlIG9mZnNldCBvZiB0aGUgYm90dG9tIGxlZnQgY29ybmVyIGZyb20gdGhlIGFuY2hvci5cbiAqIEBwYXJhbSBiciBUaGUgb2Zmc2V0IG9mIHRoZSBib3R0b20gcmlnaHQgY29ybmVyIGZyb20gdGhlIGFuY2hvci5cbiAqIEBwYXJhbSB0ZXggVGhlIHRleHR1cmUgY29vcmRpbmF0ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IHR5cGUgU3ltYm9sUXVhZCA9IHtcbiAgICB0bDogUG9pbnQsXG4gICAgdHI6IFBvaW50LFxuICAgIGJsOiBQb2ludCxcbiAgICBicjogUG9pbnQsXG4gICAgdGV4OiB7XG4gICAgICAgIHg6IG51bWJlcixcbiAgICAgICAgeTogbnVtYmVyLFxuICAgICAgICB3OiBudW1iZXIsXG4gICAgICAgIGg6IG51bWJlclxuICAgIH0sXG4gICAgcGl4ZWxPZmZzZXRUTDogUG9pbnQsXG4gICAgcGl4ZWxPZmZzZXRCUjogUG9pbnQsXG4gICAgd3JpdGluZ01vZGU6IGFueSB8IHZvaWQsXG4gICAgZ2x5cGhPZmZzZXQ6IFtudW1iZXIsIG51bWJlcl0sXG4gICAgc2VjdGlvbkluZGV4OiBudW1iZXIsXG4gICAgaXNTREY6IGJvb2xlYW4sXG4gICAgbWluRm9udFNjYWxlWDogbnVtYmVyLFxuICAgIG1pbkZvbnRTY2FsZVk6IG51bWJlclxufTtcblxuLy8gSWYgeW91IGhhdmUgYSAxMHB4IGljb24gdGhhdCBpc24ndCBwZXJmZWN0bHkgYWxpZ25lZCB0byB0aGUgcGl4ZWwgZ3JpZCBpdCB3aWxsIGNvdmVyIDExIGFjdHVhbFxuLy8gcGl4ZWxzLiBUaGUgcXVhZCBuZWVkcyB0byBiZSBwYWRkZWQgdG8gYWNjb3VudCBmb3IgdGhpcywgb3RoZXJ3aXNlIHRoZXknbGwgbG9vayBzbGlnaHRseSBjbGlwcGVkXG4vLyBvbiBvbmUgZWRnZSBpbiBzb21lIGNhc2VzLlxuY29uc3QgYm9yZGVyID0gSU1BR0VfUEFERElORztcblxuLyoqXG4gKiBDcmVhdGUgdGhlIHF1YWRzIHVzZWQgZm9yIHJlbmRlcmluZyBhbiBpY29uLlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEljb25RdWFkcyhcbiAgICAgICAgICAgICAgICAgICAgICBzaGFwZWRJY29uOiBQb3NpdGlvbmVkSWNvbixcbiAgICAgICAgICAgICAgICAgICAgICBpY29uUm90YXRlOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgaXNTREZJY29uOiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgICAgIGhhc0ljb25UZXh0Rml0OiBib29sZWFuKTogQXJyYXk8U3ltYm9sUXVhZD4ge1xuICAgIGNvbnN0IHF1YWRzID0gW107XG5cbiAgICBjb25zdCBpbWFnZSA9IHNoYXBlZEljb24uaW1hZ2U7XG4gICAgY29uc3QgcGl4ZWxSYXRpbyA9IGltYWdlLnBpeGVsUmF0aW87XG4gICAgY29uc3QgaW1hZ2VXaWR0aCA9IGltYWdlLnBhZGRlZFJlY3QudyAtIDIgKiBib3JkZXI7XG4gICAgY29uc3QgaW1hZ2VIZWlnaHQgPSBpbWFnZS5wYWRkZWRSZWN0LmggLSAyICogYm9yZGVyO1xuXG4gICAgY29uc3QgaWNvbldpZHRoID0gc2hhcGVkSWNvbi5yaWdodCAtIHNoYXBlZEljb24ubGVmdDtcbiAgICBjb25zdCBpY29uSGVpZ2h0ID0gc2hhcGVkSWNvbi5ib3R0b20gLSBzaGFwZWRJY29uLnRvcDtcblxuICAgIGNvbnN0IHN0cmV0Y2hYID0gaW1hZ2Uuc3RyZXRjaFggfHwgW1swLCBpbWFnZVdpZHRoXV07XG4gICAgY29uc3Qgc3RyZXRjaFkgPSBpbWFnZS5zdHJldGNoWSB8fCBbWzAsIGltYWdlSGVpZ2h0XV07XG5cbiAgICBjb25zdCByZWR1Y2VSYW5nZXMgPSAoc3VtLCByYW5nZSkgPT4gc3VtICsgcmFuZ2VbMV0gLSByYW5nZVswXTtcbiAgICBjb25zdCBzdHJldGNoV2lkdGggPSBzdHJldGNoWC5yZWR1Y2UocmVkdWNlUmFuZ2VzLCAwKTtcbiAgICBjb25zdCBzdHJldGNoSGVpZ2h0ID0gc3RyZXRjaFkucmVkdWNlKHJlZHVjZVJhbmdlcywgMCk7XG4gICAgY29uc3QgZml4ZWRXaWR0aCA9IGltYWdlV2lkdGggLSBzdHJldGNoV2lkdGg7XG4gICAgY29uc3QgZml4ZWRIZWlnaHQgPSBpbWFnZUhlaWdodCAtIHN0cmV0Y2hIZWlnaHQ7XG5cbiAgICBsZXQgc3RyZXRjaE9mZnNldFggPSAwO1xuICAgIGxldCBzdHJldGNoQ29udGVudFdpZHRoID0gc3RyZXRjaFdpZHRoO1xuICAgIGxldCBzdHJldGNoT2Zmc2V0WSA9IDA7XG4gICAgbGV0IHN0cmV0Y2hDb250ZW50SGVpZ2h0ID0gc3RyZXRjaEhlaWdodDtcbiAgICBsZXQgZml4ZWRPZmZzZXRYID0gMDtcbiAgICBsZXQgZml4ZWRDb250ZW50V2lkdGggPSBmaXhlZFdpZHRoO1xuICAgIGxldCBmaXhlZE9mZnNldFkgPSAwO1xuICAgIGxldCBmaXhlZENvbnRlbnRIZWlnaHQgPSBmaXhlZEhlaWdodDtcblxuICAgIGlmIChpbWFnZS5jb250ZW50ICYmIGhhc0ljb25UZXh0Rml0KSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBpbWFnZS5jb250ZW50O1xuICAgICAgICBzdHJldGNoT2Zmc2V0WCA9IHN1bVdpdGhpblJhbmdlKHN0cmV0Y2hYLCAwLCBjb250ZW50WzBdKTtcbiAgICAgICAgc3RyZXRjaE9mZnNldFkgPSBzdW1XaXRoaW5SYW5nZShzdHJldGNoWSwgMCwgY29udGVudFsxXSk7XG4gICAgICAgIHN0cmV0Y2hDb250ZW50V2lkdGggPSBzdW1XaXRoaW5SYW5nZShzdHJldGNoWCwgY29udGVudFswXSwgY29udGVudFsyXSk7XG4gICAgICAgIHN0cmV0Y2hDb250ZW50SGVpZ2h0ID0gc3VtV2l0aGluUmFuZ2Uoc3RyZXRjaFksIGNvbnRlbnRbMV0sIGNvbnRlbnRbM10pO1xuICAgICAgICBmaXhlZE9mZnNldFggPSBjb250ZW50WzBdIC0gc3RyZXRjaE9mZnNldFg7XG4gICAgICAgIGZpeGVkT2Zmc2V0WSA9IGNvbnRlbnRbMV0gLSBzdHJldGNoT2Zmc2V0WTtcbiAgICAgICAgZml4ZWRDb250ZW50V2lkdGggPSBjb250ZW50WzJdIC0gY29udGVudFswXSAtIHN0cmV0Y2hDb250ZW50V2lkdGg7XG4gICAgICAgIGZpeGVkQ29udGVudEhlaWdodCA9IGNvbnRlbnRbM10gLSBjb250ZW50WzFdIC0gc3RyZXRjaENvbnRlbnRIZWlnaHQ7XG4gICAgfVxuXG4gICAgY29uc3QgbWFrZUJveCA9IChsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pID0+IHtcblxuICAgICAgICBjb25zdCBsZWZ0RW0gPSBnZXRFbU9mZnNldChsZWZ0LnN0cmV0Y2ggLSBzdHJldGNoT2Zmc2V0WCwgc3RyZXRjaENvbnRlbnRXaWR0aCwgaWNvbldpZHRoLCBzaGFwZWRJY29uLmxlZnQpO1xuICAgICAgICBjb25zdCBsZWZ0UHggPSBnZXRQeE9mZnNldChsZWZ0LmZpeGVkIC0gZml4ZWRPZmZzZXRYLCBmaXhlZENvbnRlbnRXaWR0aCwgbGVmdC5zdHJldGNoLCBzdHJldGNoV2lkdGgpO1xuXG4gICAgICAgIGNvbnN0IHRvcEVtID0gZ2V0RW1PZmZzZXQodG9wLnN0cmV0Y2ggLSBzdHJldGNoT2Zmc2V0WSwgc3RyZXRjaENvbnRlbnRIZWlnaHQsIGljb25IZWlnaHQsIHNoYXBlZEljb24udG9wKTtcbiAgICAgICAgY29uc3QgdG9wUHggPSBnZXRQeE9mZnNldCh0b3AuZml4ZWQgLSBmaXhlZE9mZnNldFksIGZpeGVkQ29udGVudEhlaWdodCwgdG9wLnN0cmV0Y2gsIHN0cmV0Y2hIZWlnaHQpO1xuXG4gICAgICAgIGNvbnN0IHJpZ2h0RW0gPSBnZXRFbU9mZnNldChyaWdodC5zdHJldGNoIC0gc3RyZXRjaE9mZnNldFgsIHN0cmV0Y2hDb250ZW50V2lkdGgsIGljb25XaWR0aCwgc2hhcGVkSWNvbi5sZWZ0KTtcbiAgICAgICAgY29uc3QgcmlnaHRQeCA9IGdldFB4T2Zmc2V0KHJpZ2h0LmZpeGVkIC0gZml4ZWRPZmZzZXRYLCBmaXhlZENvbnRlbnRXaWR0aCwgcmlnaHQuc3RyZXRjaCwgc3RyZXRjaFdpZHRoKTtcblxuICAgICAgICBjb25zdCBib3R0b21FbSA9IGdldEVtT2Zmc2V0KGJvdHRvbS5zdHJldGNoIC0gc3RyZXRjaE9mZnNldFksIHN0cmV0Y2hDb250ZW50SGVpZ2h0LCBpY29uSGVpZ2h0LCBzaGFwZWRJY29uLnRvcCk7XG4gICAgICAgIGNvbnN0IGJvdHRvbVB4ID0gZ2V0UHhPZmZzZXQoYm90dG9tLmZpeGVkIC0gZml4ZWRPZmZzZXRZLCBmaXhlZENvbnRlbnRIZWlnaHQsIGJvdHRvbS5zdHJldGNoLCBzdHJldGNoSGVpZ2h0KTtcblxuICAgICAgICBjb25zdCB0bCA9IG5ldyBQb2ludChsZWZ0RW0sIHRvcEVtKTtcbiAgICAgICAgY29uc3QgdHIgPSBuZXcgUG9pbnQocmlnaHRFbSwgdG9wRW0pO1xuICAgICAgICBjb25zdCBiciA9IG5ldyBQb2ludChyaWdodEVtLCBib3R0b21FbSk7XG4gICAgICAgIGNvbnN0IGJsID0gbmV3IFBvaW50KGxlZnRFbSwgYm90dG9tRW0pO1xuICAgICAgICBjb25zdCBwaXhlbE9mZnNldFRMID0gbmV3IFBvaW50KGxlZnRQeCAvIHBpeGVsUmF0aW8sIHRvcFB4IC8gcGl4ZWxSYXRpbyk7XG4gICAgICAgIGNvbnN0IHBpeGVsT2Zmc2V0QlIgPSBuZXcgUG9pbnQocmlnaHRQeCAvIHBpeGVsUmF0aW8sIGJvdHRvbVB4IC8gcGl4ZWxSYXRpbyk7XG5cbiAgICAgICAgY29uc3QgYW5nbGUgPSBpY29uUm90YXRlICogTWF0aC5QSSAvIDE4MDtcblxuICAgICAgICBpZiAoYW5nbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHNpbiA9IE1hdGguc2luKGFuZ2xlKSxcbiAgICAgICAgICAgICAgICBjb3MgPSBNYXRoLmNvcyhhbmdsZSksXG4gICAgICAgICAgICAgICAgbWF0cml4ID0gW2NvcywgLXNpbiwgc2luLCBjb3NdO1xuXG4gICAgICAgICAgICB0bC5fbWF0TXVsdChtYXRyaXgpO1xuICAgICAgICAgICAgdHIuX21hdE11bHQobWF0cml4KTtcbiAgICAgICAgICAgIGJsLl9tYXRNdWx0KG1hdHJpeCk7XG4gICAgICAgICAgICBici5fbWF0TXVsdChtYXRyaXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeDEgPSBsZWZ0LnN0cmV0Y2ggKyBsZWZ0LmZpeGVkO1xuICAgICAgICBjb25zdCB4MiA9IHJpZ2h0LnN0cmV0Y2ggKyByaWdodC5maXhlZDtcbiAgICAgICAgY29uc3QgeTEgPSB0b3Auc3RyZXRjaCArIHRvcC5maXhlZDtcbiAgICAgICAgY29uc3QgeTIgPSBib3R0b20uc3RyZXRjaCArIGJvdHRvbS5maXhlZDtcblxuICAgICAgICBjb25zdCBzdWJSZWN0ID0ge1xuICAgICAgICAgICAgeDogaW1hZ2UucGFkZGVkUmVjdC54ICsgYm9yZGVyICsgeDEsXG4gICAgICAgICAgICB5OiBpbWFnZS5wYWRkZWRSZWN0LnkgKyBib3JkZXIgKyB5MSxcbiAgICAgICAgICAgIHc6IHgyIC0geDEsXG4gICAgICAgICAgICBoOiB5MiAtIHkxXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgbWluRm9udFNjYWxlWCA9IGZpeGVkQ29udGVudFdpZHRoIC8gcGl4ZWxSYXRpbyAvIGljb25XaWR0aDtcbiAgICAgICAgY29uc3QgbWluRm9udFNjYWxlWSA9IGZpeGVkQ29udGVudEhlaWdodCAvIHBpeGVsUmF0aW8gLyBpY29uSGVpZ2h0O1xuXG4gICAgICAgIC8vIEljb24gcXVhZCBpcyBwYWRkZWQsIHNvIHRleHR1cmUgY29vcmRpbmF0ZXMgYWxzbyBuZWVkIHRvIGJlIHBhZGRlZC5cbiAgICAgICAgcmV0dXJuIHt0bCwgdHIsIGJsLCBiciwgdGV4OiBzdWJSZWN0LCB3cml0aW5nTW9kZTogdW5kZWZpbmVkLCBnbHlwaE9mZnNldDogWzAsIDBdLCBzZWN0aW9uSW5kZXg6IDAsIHBpeGVsT2Zmc2V0VEwsIHBpeGVsT2Zmc2V0QlIsIG1pbkZvbnRTY2FsZVgsIG1pbkZvbnRTY2FsZVksIGlzU0RGOiBpc1NERkljb259O1xuICAgIH07XG5cbiAgICBpZiAoIWhhc0ljb25UZXh0Rml0IHx8ICghaW1hZ2Uuc3RyZXRjaFggJiYgIWltYWdlLnN0cmV0Y2hZKSkge1xuICAgICAgICBxdWFkcy5wdXNoKG1ha2VCb3goXG4gICAgICAgICAgICB7Zml4ZWQ6IDAsIHN0cmV0Y2g6IC0xfSxcbiAgICAgICAgICAgIHtmaXhlZDogMCwgc3RyZXRjaDogLTF9LFxuICAgICAgICAgICAge2ZpeGVkOiAwLCBzdHJldGNoOiBpbWFnZVdpZHRoICsgMX0sXG4gICAgICAgICAgICB7Zml4ZWQ6IDAsIHN0cmV0Y2g6IGltYWdlSGVpZ2h0ICsgMX0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB4Q3V0cyA9IHN0cmV0Y2hab25lc1RvQ3V0cyhzdHJldGNoWCwgZml4ZWRXaWR0aCwgc3RyZXRjaFdpZHRoKTtcbiAgICAgICAgY29uc3QgeUN1dHMgPSBzdHJldGNoWm9uZXNUb0N1dHMoc3RyZXRjaFksIGZpeGVkSGVpZ2h0LCBzdHJldGNoSGVpZ2h0KTtcblxuICAgICAgICBmb3IgKGxldCB4aSA9IDA7IHhpIDwgeEN1dHMubGVuZ3RoIC0gMTsgeGkrKykge1xuICAgICAgICAgICAgY29uc3QgeDEgPSB4Q3V0c1t4aV07XG4gICAgICAgICAgICBjb25zdCB4MiA9IHhDdXRzW3hpICsgMV07XG4gICAgICAgICAgICBmb3IgKGxldCB5aSA9IDA7IHlpIDwgeUN1dHMubGVuZ3RoIC0gMTsgeWkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHkxID0geUN1dHNbeWldO1xuICAgICAgICAgICAgICAgIGNvbnN0IHkyID0geUN1dHNbeWkgKyAxXTtcbiAgICAgICAgICAgICAgICBxdWFkcy5wdXNoKG1ha2VCb3goeDEsIHkxLCB4MiwgeTIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBxdWFkcztcbn1cblxuZnVuY3Rpb24gc3VtV2l0aGluUmFuZ2UocmFuZ2VzLCBtaW4sIG1heCkge1xuICAgIGxldCBzdW0gPSAwO1xuICAgIGZvciAoY29uc3QgcmFuZ2Ugb2YgcmFuZ2VzKSB7XG4gICAgICAgIHN1bSArPSBNYXRoLm1heChtaW4sIE1hdGgubWluKG1heCwgcmFuZ2VbMV0pKSAtIE1hdGgubWF4KG1pbiwgTWF0aC5taW4obWF4LCByYW5nZVswXSkpO1xuICAgIH1cbiAgICByZXR1cm4gc3VtO1xufVxuXG5mdW5jdGlvbiBzdHJldGNoWm9uZXNUb0N1dHMoc3RyZXRjaFpvbmVzLCBmaXhlZFNpemUsIHN0cmV0Y2hTaXplKSB7XG4gICAgY29uc3QgY3V0cyA9IFt7Zml4ZWQ6IC1ib3JkZXIsIHN0cmV0Y2g6IDB9XTtcblxuICAgIGZvciAoY29uc3QgW2MxLCBjMl0gb2Ygc3RyZXRjaFpvbmVzKSB7XG4gICAgICAgIGNvbnN0IGxhc3QgPSBjdXRzW2N1dHMubGVuZ3RoIC0gMV07XG4gICAgICAgIGN1dHMucHVzaCh7XG4gICAgICAgICAgICBmaXhlZDogYzEgLSBsYXN0LnN0cmV0Y2gsXG4gICAgICAgICAgICBzdHJldGNoOiBsYXN0LnN0cmV0Y2hcbiAgICAgICAgfSk7XG4gICAgICAgIGN1dHMucHVzaCh7XG4gICAgICAgICAgICBmaXhlZDogYzEgLSBsYXN0LnN0cmV0Y2gsXG4gICAgICAgICAgICBzdHJldGNoOiBsYXN0LnN0cmV0Y2ggKyAoYzIgLSBjMSlcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGN1dHMucHVzaCh7XG4gICAgICAgIGZpeGVkOiBmaXhlZFNpemUgKyBib3JkZXIsXG4gICAgICAgIHN0cmV0Y2g6IHN0cmV0Y2hTaXplXG4gICAgfSk7XG4gICAgcmV0dXJuIGN1dHM7XG59XG5cbmZ1bmN0aW9uIGdldEVtT2Zmc2V0KHN0cmV0Y2hPZmZzZXQsIHN0cmV0Y2hTaXplLCBpY29uU2l6ZSwgaWNvbk9mZnNldCkge1xuICAgIHJldHVybiBzdHJldGNoT2Zmc2V0IC8gc3RyZXRjaFNpemUgKiBpY29uU2l6ZSArIGljb25PZmZzZXQ7XG59XG5cbmZ1bmN0aW9uIGdldFB4T2Zmc2V0KGZpeGVkT2Zmc2V0LCBmaXhlZFNpemUsIHN0cmV0Y2hPZmZzZXQsIHN0cmV0Y2hTaXplKSB7XG4gICAgcmV0dXJuIGZpeGVkT2Zmc2V0IC0gZml4ZWRTaXplICogc3RyZXRjaE9mZnNldCAvIHN0cmV0Y2hTaXplO1xufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgcXVhZHMgdXNlZCBmb3IgcmVuZGVyaW5nIGEgdGV4dCBsYWJlbC5cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRHbHlwaFF1YWRzKGFuY2hvcjogQW5jaG9yLFxuICAgICAgICAgICAgICAgICAgICAgICBzaGFwaW5nOiBTaGFwaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICB0ZXh0T2Zmc2V0OiBbbnVtYmVyLCBudW1iZXJdLFxuICAgICAgICAgICAgICAgICAgICAgICBsYXllcjogU3ltYm9sU3R5bGVMYXllcixcbiAgICAgICAgICAgICAgICAgICAgICAgYWxvbmdMaW5lOiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlOiBGZWF0dXJlLFxuICAgICAgICAgICAgICAgICAgICAgICBpbWFnZU1hcDoge1tfOiBzdHJpbmddOiBTdHlsZUltYWdlfSxcbiAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dWZXJ0aWNhbFBsYWNlbWVudDogYm9vbGVhbik6IEFycmF5PFN5bWJvbFF1YWQ+IHtcblxuICAgIGNvbnN0IHRleHRSb3RhdGUgPSBsYXllci5sYXlvdXQuZ2V0KCd0ZXh0LXJvdGF0ZScpLmV2YWx1YXRlKGZlYXR1cmUsIHt9KSAqIE1hdGguUEkgLyAxODA7XG4gICAgY29uc3QgcXVhZHMgPSBbXTtcblxuICAgIGZvciAoY29uc3QgbGluZSBvZiBzaGFwaW5nLnBvc2l0aW9uZWRMaW5lcykge1xuICAgICAgICBmb3IgKGNvbnN0IHBvc2l0aW9uZWRHbHlwaCBvZiBsaW5lLnBvc2l0aW9uZWRHbHlwaHMpIHtcbiAgICAgICAgICAgIGlmICghcG9zaXRpb25lZEdseXBoLnJlY3QpIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc3QgdGV4dHVyZVJlY3QgPSBwb3NpdGlvbmVkR2x5cGgucmVjdCB8fCB7fTtcblxuICAgICAgICAgICAgLy8gVGhlIHJlY3RzIGhhdmUgYW4gYWRkaXRpb25hbCBidWZmZXIgdGhhdCBpcyBub3QgaW5jbHVkZWQgaW4gdGhlaXIgc2l6ZS5cbiAgICAgICAgICAgIGNvbnN0IGdseXBoUGFkZGluZyA9IDEuMDtcbiAgICAgICAgICAgIGxldCByZWN0QnVmZmVyID0gR0xZUEhfUEJGX0JPUkRFUiArIGdseXBoUGFkZGluZztcbiAgICAgICAgICAgIGxldCBpc1NERiA9IHRydWU7XG4gICAgICAgICAgICBsZXQgcGl4ZWxSYXRpbyA9IDEuMDtcbiAgICAgICAgICAgIGxldCBsaW5lT2Zmc2V0ID0gMC4wO1xuXG4gICAgICAgICAgICBjb25zdCByb3RhdGVWZXJ0aWNhbEdseXBoID0gKGFsb25nTGluZSB8fCBhbGxvd1ZlcnRpY2FsUGxhY2VtZW50KSAmJiBwb3NpdGlvbmVkR2x5cGgudmVydGljYWw7XG4gICAgICAgICAgICBjb25zdCBoYWxmQWR2YW5jZSA9IHBvc2l0aW9uZWRHbHlwaC5tZXRyaWNzLmFkdmFuY2UgKiBwb3NpdGlvbmVkR2x5cGguc2NhbGUgLyAyO1xuXG4gICAgICAgICAgICAvLyBBbGlnbiBpbWFnZXMgYW5kIHNjYWxlZCBnbHlwaHMgaW4gdGhlIG1pZGRsZSBvZiBhIHZlcnRpY2FsIGxpbmUuXG4gICAgICAgICAgICBpZiAoYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCAmJiBzaGFwaW5nLnZlcnRpY2FsaXphYmxlKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NhbGVkR2x5cGhPZmZzZXQgPSAocG9zaXRpb25lZEdseXBoLnNjYWxlIC0gMSkgKiBPTkVfRU07XG4gICAgICAgICAgICAgICAgY29uc3QgaW1hZ2VPZmZzZXQgPSAoT05FX0VNIC0gcG9zaXRpb25lZEdseXBoLm1ldHJpY3Mud2lkdGggKiBwb3NpdGlvbmVkR2x5cGguc2NhbGUpIC8gMjtcbiAgICAgICAgICAgICAgICBsaW5lT2Zmc2V0ID0gbGluZS5saW5lT2Zmc2V0IC8gMiAtIChwb3NpdGlvbmVkR2x5cGguaW1hZ2VOYW1lID8gLWltYWdlT2Zmc2V0IDogc2NhbGVkR2x5cGhPZmZzZXQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocG9zaXRpb25lZEdseXBoLmltYWdlTmFtZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlID0gaW1hZ2VNYXBbcG9zaXRpb25lZEdseXBoLmltYWdlTmFtZV07XG4gICAgICAgICAgICAgICAgaXNTREYgPSBpbWFnZS5zZGY7XG4gICAgICAgICAgICAgICAgcGl4ZWxSYXRpbyA9IGltYWdlLnBpeGVsUmF0aW87XG4gICAgICAgICAgICAgICAgcmVjdEJ1ZmZlciA9IElNQUdFX1BBRERJTkcgLyBwaXhlbFJhdGlvO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBnbHlwaE9mZnNldCA9IGFsb25nTGluZSA/XG4gICAgICAgICAgICAgICAgW3Bvc2l0aW9uZWRHbHlwaC54ICsgaGFsZkFkdmFuY2UsIHBvc2l0aW9uZWRHbHlwaC55XSA6XG4gICAgICAgICAgICAgICAgWzAsIDBdO1xuXG4gICAgICAgICAgICBsZXQgYnVpbHRJbk9mZnNldCA9IGFsb25nTGluZSA/XG4gICAgICAgICAgICAgICAgWzAsIDBdIDpcbiAgICAgICAgICAgICAgICBbcG9zaXRpb25lZEdseXBoLnggKyBoYWxmQWR2YW5jZSArIHRleHRPZmZzZXRbMF0sIHBvc2l0aW9uZWRHbHlwaC55ICsgdGV4dE9mZnNldFsxXSAtIGxpbmVPZmZzZXRdO1xuXG4gICAgICAgICAgICBsZXQgdmVydGljYWxpemVkTGFiZWxPZmZzZXQgPSBbMCwgMF07XG4gICAgICAgICAgICBpZiAocm90YXRlVmVydGljYWxHbHlwaCkge1xuICAgICAgICAgICAgICAgIC8vIFZlcnRpY2FsIFBPSSBsYWJlbHMgdGhhdCBhcmUgcm90YXRlZCA5MGRlZyBDVyBhbmQgd2hvc2UgZ2x5cGhzIG11c3QgcHJlc2VydmUgdXByaWdodCBvcmllbnRhdGlvblxuICAgICAgICAgICAgICAgIC8vIG5lZWQgdG8gYmUgcm90YXRlZCA5MGRlZyBDQ1cuIEFmdGVyIGEgcXVhZCBpcyByb3RhdGVkLCBpdCBpcyB0cmFuc2xhdGVkIHRvIHRoZSBvcmlnaW5hbCBidWlsdC1pbiBvZmZzZXQuXG4gICAgICAgICAgICAgICAgdmVydGljYWxpemVkTGFiZWxPZmZzZXQgPSBidWlsdEluT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGJ1aWx0SW5PZmZzZXQgPSBbMCwgMF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHgxID0gKHBvc2l0aW9uZWRHbHlwaC5tZXRyaWNzLmxlZnQgLSByZWN0QnVmZmVyKSAqIHBvc2l0aW9uZWRHbHlwaC5zY2FsZSAtIGhhbGZBZHZhbmNlICsgYnVpbHRJbk9mZnNldFswXTtcbiAgICAgICAgICAgIGNvbnN0IHkxID0gKC1wb3NpdGlvbmVkR2x5cGgubWV0cmljcy50b3AgLSByZWN0QnVmZmVyKSAqIHBvc2l0aW9uZWRHbHlwaC5zY2FsZSArIGJ1aWx0SW5PZmZzZXRbMV07XG4gICAgICAgICAgICBjb25zdCB4MiA9IHgxICsgdGV4dHVyZVJlY3QudyAqIHBvc2l0aW9uZWRHbHlwaC5zY2FsZSAvIHBpeGVsUmF0aW87XG4gICAgICAgICAgICBjb25zdCB5MiA9IHkxICsgdGV4dHVyZVJlY3QuaCAqIHBvc2l0aW9uZWRHbHlwaC5zY2FsZSAvIHBpeGVsUmF0aW87XG5cbiAgICAgICAgICAgIGNvbnN0IHRsID0gbmV3IFBvaW50KHgxLCB5MSk7XG4gICAgICAgICAgICBjb25zdCB0ciA9IG5ldyBQb2ludCh4MiwgeTEpO1xuICAgICAgICAgICAgY29uc3QgYmwgPSBuZXcgUG9pbnQoeDEsIHkyKTtcbiAgICAgICAgICAgIGNvbnN0IGJyID0gbmV3IFBvaW50KHgyLCB5Mik7XG5cbiAgICAgICAgICAgIGlmIChyb3RhdGVWZXJ0aWNhbEdseXBoKSB7XG4gICAgICAgICAgICAgICAgLy8gVmVydGljYWwtc3VwcG9ydGluZyBnbHlwaHMgYXJlIGxhaWQgb3V0IGluIDI0eDI0IHBvaW50IGJveGVzICgxIHNxdWFyZSBlbSlcbiAgICAgICAgICAgICAgICAvLyBJbiBob3Jpem9udGFsIG9yaWVudGF0aW9uLCB0aGUgeSB2YWx1ZXMgZm9yIGdseXBocyBhcmUgYmVsb3cgdGhlIG1pZGxpbmVcbiAgICAgICAgICAgICAgICAvLyBhbmQgd2UgdXNlIGEgXCJ5T2Zmc2V0XCIgb2YgLTE3IHRvIHB1bGwgdGhlbSB1cCB0byB0aGUgbWlkZGxlLlxuICAgICAgICAgICAgICAgIC8vIEJ5IHJvdGF0aW5nIGNvdW50ZXItY2xvY2t3aXNlIGFyb3VuZCB0aGUgcG9pbnQgYXQgdGhlIGNlbnRlciBvZiB0aGUgbGVmdFxuICAgICAgICAgICAgICAgIC8vIGVkZ2Ugb2YgYSAyNHgyNCBsYXlvdXQgYm94IGNlbnRlcmVkIGJlbG93IHRoZSBtaWRsaW5lLCB3ZSBhbGlnbiB0aGUgY2VudGVyXG4gICAgICAgICAgICAgICAgLy8gb2YgdGhlIGdseXBocyB3aXRoIHRoZSBob3Jpem9udGFsIG1pZGxpbmUsIHNvIHRoZSB5T2Zmc2V0IGlzIG5vIGxvbmdlclxuICAgICAgICAgICAgICAgIC8vIG5lY2Vzc2FyeSwgYnV0IHdlIGFsc28gcHVsbCB0aGUgZ2x5cGggdG8gdGhlIGxlZnQgYWxvbmcgdGhlIHggYXhpcy5cbiAgICAgICAgICAgICAgICAvLyBUaGUgeSBjb29yZGluYXRlIGluY2x1ZGVzIGJhc2VsaW5lIHlPZmZzZXQsIHRodXMgbmVlZHMgdG8gYmUgYWNjb3VudGVkXG4gICAgICAgICAgICAgICAgLy8gZm9yIHdoZW4gZ2x5cGggaXMgcm90YXRlZCBhbmQgdHJhbnNsYXRlZC5cbiAgICAgICAgICAgICAgICBjb25zdCBjZW50ZXIgPSBuZXcgUG9pbnQoLWhhbGZBZHZhbmNlLCBoYWxmQWR2YW5jZSAtIFNIQVBJTkdfREVGQVVMVF9PRkZTRVQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZlcnRpY2FsUm90YXRpb24gPSAtTWF0aC5QSSAvIDI7XG5cbiAgICAgICAgICAgICAgICAvLyB4SGFsZldpZHRoT2Zmc2V0Q29ycmVjdGlvbiBpcyBhIGRpZmZlcmVuY2UgYmV0d2VlbiBmdWxsLXdpZHRoIGFuZCBoYWxmLXdpZHRoXG4gICAgICAgICAgICAgICAgLy8gYWR2YW5jZSwgc2hvdWxkIGJlIDAgZm9yIGZ1bGwtd2lkdGggZ2x5cGhzIGFuZCB3aWxsIHB1bGwgdXAgaGFsZi13aWR0aCBnbHlwaHMuXG4gICAgICAgICAgICAgICAgY29uc3QgeEhhbGZXaWR0aE9mZnNldENvcnJlY3Rpb24gPSBPTkVfRU0gLyAyIC0gaGFsZkFkdmFuY2U7XG4gICAgICAgICAgICAgICAgY29uc3QgeUltYWdlT2Zmc2V0Q29ycmVjdGlvbiA9IHBvc2l0aW9uZWRHbHlwaC5pbWFnZU5hbWUgPyB4SGFsZldpZHRoT2Zmc2V0Q29ycmVjdGlvbiA6IDAuMDtcbiAgICAgICAgICAgICAgICBjb25zdCBoYWxmV2lkdGhPZmZzZXRDb3JyZWN0aW9uID0gbmV3IFBvaW50KDUgLSBTSEFQSU5HX0RFRkFVTFRfT0ZGU0VUIC0geEhhbGZXaWR0aE9mZnNldENvcnJlY3Rpb24sIC15SW1hZ2VPZmZzZXRDb3JyZWN0aW9uKTtcbiAgICAgICAgICAgICAgICBjb25zdCB2ZXJ0aWNhbE9mZnNldENvcnJlY3Rpb24gPSBuZXcgUG9pbnQoLi4udmVydGljYWxpemVkTGFiZWxPZmZzZXQpO1xuICAgICAgICAgICAgICAgIHRsLl9yb3RhdGVBcm91bmQodmVydGljYWxSb3RhdGlvbiwgY2VudGVyKS5fYWRkKGhhbGZXaWR0aE9mZnNldENvcnJlY3Rpb24pLl9hZGQodmVydGljYWxPZmZzZXRDb3JyZWN0aW9uKTtcbiAgICAgICAgICAgICAgICB0ci5fcm90YXRlQXJvdW5kKHZlcnRpY2FsUm90YXRpb24sIGNlbnRlcikuX2FkZChoYWxmV2lkdGhPZmZzZXRDb3JyZWN0aW9uKS5fYWRkKHZlcnRpY2FsT2Zmc2V0Q29ycmVjdGlvbik7XG4gICAgICAgICAgICAgICAgYmwuX3JvdGF0ZUFyb3VuZCh2ZXJ0aWNhbFJvdGF0aW9uLCBjZW50ZXIpLl9hZGQoaGFsZldpZHRoT2Zmc2V0Q29ycmVjdGlvbikuX2FkZCh2ZXJ0aWNhbE9mZnNldENvcnJlY3Rpb24pO1xuICAgICAgICAgICAgICAgIGJyLl9yb3RhdGVBcm91bmQodmVydGljYWxSb3RhdGlvbiwgY2VudGVyKS5fYWRkKGhhbGZXaWR0aE9mZnNldENvcnJlY3Rpb24pLl9hZGQodmVydGljYWxPZmZzZXRDb3JyZWN0aW9uKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRleHRSb3RhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzaW4gPSBNYXRoLnNpbih0ZXh0Um90YXRlKSxcbiAgICAgICAgICAgICAgICAgICAgY29zID0gTWF0aC5jb3ModGV4dFJvdGF0ZSksXG4gICAgICAgICAgICAgICAgICAgIG1hdHJpeCA9IFtjb3MsIC1zaW4sIHNpbiwgY29zXTtcblxuICAgICAgICAgICAgICAgIHRsLl9tYXRNdWx0KG1hdHJpeCk7XG4gICAgICAgICAgICAgICAgdHIuX21hdE11bHQobWF0cml4KTtcbiAgICAgICAgICAgICAgICBibC5fbWF0TXVsdChtYXRyaXgpO1xuICAgICAgICAgICAgICAgIGJyLl9tYXRNdWx0KG1hdHJpeCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHBpeGVsT2Zmc2V0VEwgPSBuZXcgUG9pbnQoMCwgMCk7XG4gICAgICAgICAgICBjb25zdCBwaXhlbE9mZnNldEJSID0gbmV3IFBvaW50KDAsIDApO1xuICAgICAgICAgICAgY29uc3QgbWluRm9udFNjYWxlWCA9IDA7XG4gICAgICAgICAgICBjb25zdCBtaW5Gb250U2NhbGVZID0gMDtcbiAgICAgICAgICAgIHF1YWRzLnB1c2goe3RsLCB0ciwgYmwsIGJyLCB0ZXg6IHRleHR1cmVSZWN0LCB3cml0aW5nTW9kZTogc2hhcGluZy53cml0aW5nTW9kZSwgZ2x5cGhPZmZzZXQsIHNlY3Rpb25JbmRleDogcG9zaXRpb25lZEdseXBoLnNlY3Rpb25JbmRleCwgaXNTREYsIHBpeGVsT2Zmc2V0VEwsIHBpeGVsT2Zmc2V0QlIsIG1pbkZvbnRTY2FsZVgsIG1pbkZvbnRTY2FsZVl9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBxdWFkcztcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB0eXBlIHtDb2xsaXNpb25Cb3hBcnJheX0gZnJvbSAnLi4vZGF0YS9hcnJheV90eXBlcyc7XG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSBBbmNob3IgZnJvbSAnLi9hbmNob3InO1xuXG4vKipcbiAqIEEgQ29sbGlzaW9uRmVhdHVyZSByZXByZXNlbnRzIHRoZSBhcmVhIG9mIHRoZSB0aWxlIGNvdmVyZWQgYnkgYSBzaW5nbGUgbGFiZWwuXG4gKiBJdCBpcyB1c2VkIHdpdGggQ29sbGlzaW9uSW5kZXggdG8gY2hlY2sgaWYgdGhlIGxhYmVsIG92ZXJsYXBzIHdpdGggYW55XG4gKiBwcmV2aW91cyBsYWJlbHMuIEEgQ29sbGlzaW9uRmVhdHVyZSBpcyBtb3N0bHkganVzdCBhIHNldCBvZiBDb2xsaXNpb25Cb3hcbiAqIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgQ29sbGlzaW9uRmVhdHVyZSB7XG4gICAgYm94U3RhcnRJbmRleDogbnVtYmVyO1xuICAgIGJveEVuZEluZGV4OiBudW1iZXI7XG4gICAgY2lyY2xlRGlhbWV0ZXI6ID9udW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBDb2xsaXNpb25GZWF0dXJlLCBhZGRpbmcgaXRzIGNvbGxpc2lvbiBib3ggZGF0YSB0byB0aGUgZ2l2ZW4gY29sbGlzaW9uQm94QXJyYXkgaW4gdGhlIHByb2Nlc3MuXG4gICAgICogRm9yIGxpbmUgYWxpZ25lZCBsYWJlbHMgYSBjb2xsaXNpb24gY2lyY2xlIGRpYW1ldGVyIGlzIGNvbXB1dGVkIGluc3RlYWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYW5jaG9yIFRoZSBwb2ludCBhbG9uZyB0aGUgbGluZSBhcm91bmQgd2hpY2ggdGhlIGxhYmVsIGlzIGFuY2hvcmVkLlxuICAgICAqIEBwYXJhbSBzaGFwZWQgVGhlIHRleHQgb3IgaWNvbiBzaGFwaW5nIHJlc3VsdHMuXG4gICAgICogQHBhcmFtIGJveFNjYWxlIEEgbWFnaWMgbnVtYmVyIHVzZWQgdG8gY29udmVydCBmcm9tIGdseXBoIG1ldHJpY3MgdW5pdHMgdG8gZ2VvbWV0cnkgdW5pdHMuXG4gICAgICogQHBhcmFtIHBhZGRpbmcgVGhlIGFtb3VudCBvZiBwYWRkaW5nIHRvIGFkZCBhcm91bmQgdGhlIGxhYmVsIGVkZ2VzLlxuICAgICAqIEBwYXJhbSBhbGlnbkxpbmUgV2hldGhlciB0aGUgbGFiZWwgaXMgYWxpZ25lZCB3aXRoIHRoZSBsaW5lIG9yIHRoZSB2aWV3cG9ydC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGNvbGxpc2lvbkJveEFycmF5OiBDb2xsaXNpb25Cb3hBcnJheSxcbiAgICAgICAgICAgICAgICBhbmNob3I6IEFuY2hvcixcbiAgICAgICAgICAgICAgICBmZWF0dXJlSW5kZXg6IG51bWJlcixcbiAgICAgICAgICAgICAgICBzb3VyY2VMYXllckluZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgYnVja2V0SW5kZXg6IG51bWJlcixcbiAgICAgICAgICAgICAgICBzaGFwZWQ6IE9iamVjdCxcbiAgICAgICAgICAgICAgICBib3hTY2FsZTogbnVtYmVyLFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IG51bWJlcixcbiAgICAgICAgICAgICAgICBhbGlnbkxpbmU6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgcm90YXRlOiBudW1iZXIpIHtcblxuICAgICAgICB0aGlzLmJveFN0YXJ0SW5kZXggPSBjb2xsaXNpb25Cb3hBcnJheS5sZW5ndGg7XG5cbiAgICAgICAgaWYgKGFsaWduTGluZSkge1xuICAgICAgICAgICAgLy8gQ29tcHV0ZSBoZWlnaHQgb2YgdGhlIHNoYXBlIGluIGdseXBoIG1ldHJpY3MgYW5kIGFwcGx5IGNvbGxpc2lvbiBwYWRkaW5nLlxuICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRoZSBwaXhlbCBiYXNlZCAndGV4dC1wYWRkaW5nJyBpcyBhcHBsaWVkIGF0IHJ1bnRpbWVcbiAgICAgICAgICAgIGxldCB0b3AgPSBzaGFwZWQudG9wO1xuICAgICAgICAgICAgbGV0IGJvdHRvbSA9IHNoYXBlZC5ib3R0b207XG4gICAgICAgICAgICBjb25zdCBjb2xsaXNpb25QYWRkaW5nID0gc2hhcGVkLmNvbGxpc2lvblBhZGRpbmc7XG5cbiAgICAgICAgICAgIGlmIChjb2xsaXNpb25QYWRkaW5nKSB7XG4gICAgICAgICAgICAgICAgdG9wIC09IGNvbGxpc2lvblBhZGRpbmdbMV07XG4gICAgICAgICAgICAgICAgYm90dG9tICs9IGNvbGxpc2lvblBhZGRpbmdbM107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBoZWlnaHQgPSBib3R0b20gLSB0b3A7XG5cbiAgICAgICAgICAgIGlmIChoZWlnaHQgPiAwKSB7XG4gICAgICAgICAgICAgICAgLy8gc2V0IG1pbmltdW0gYm94IGhlaWdodCB0byBhdm9pZCB2ZXJ5IG1hbnkgc21hbGwgbGFiZWxzXG4gICAgICAgICAgICAgICAgaGVpZ2h0ID0gTWF0aC5tYXgoMTAsIGhlaWdodCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jaXJjbGVEaWFtZXRlciA9IGhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCB5MSA9IHNoYXBlZC50b3AgKiBib3hTY2FsZSAtIHBhZGRpbmc7XG4gICAgICAgICAgICBsZXQgeTIgPSBzaGFwZWQuYm90dG9tICogYm94U2NhbGUgKyBwYWRkaW5nO1xuICAgICAgICAgICAgbGV0IHgxID0gc2hhcGVkLmxlZnQgKiBib3hTY2FsZSAtIHBhZGRpbmc7XG4gICAgICAgICAgICBsZXQgeDIgPSBzaGFwZWQucmlnaHQgKiBib3hTY2FsZSArIHBhZGRpbmc7XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbGxpc2lvblBhZGRpbmcgPSBzaGFwZWQuY29sbGlzaW9uUGFkZGluZztcbiAgICAgICAgICAgIGlmIChjb2xsaXNpb25QYWRkaW5nKSB7XG4gICAgICAgICAgICAgICAgeDEgLT0gY29sbGlzaW9uUGFkZGluZ1swXSAqIGJveFNjYWxlO1xuICAgICAgICAgICAgICAgIHkxIC09IGNvbGxpc2lvblBhZGRpbmdbMV0gKiBib3hTY2FsZTtcbiAgICAgICAgICAgICAgICB4MiArPSBjb2xsaXNpb25QYWRkaW5nWzJdICogYm94U2NhbGU7XG4gICAgICAgICAgICAgICAgeTIgKz0gY29sbGlzaW9uUGFkZGluZ1szXSAqIGJveFNjYWxlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocm90YXRlKSB7XG4gICAgICAgICAgICAgICAgLy8gQWNjb3VudCBmb3IgKi1yb3RhdGUgaW4gcG9pbnQgY29sbGlzaW9uIGJveGVzXG4gICAgICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy82MDc1XG4gICAgICAgICAgICAgICAgLy8gRG9lc24ndCBhY2NvdW50IGZvciBpY29uLXRleHQtZml0XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0bCA9IG5ldyBQb2ludCh4MSwgeTEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyID0gbmV3IFBvaW50KHgyLCB5MSk7XG4gICAgICAgICAgICAgICAgY29uc3QgYmwgPSBuZXcgUG9pbnQoeDEsIHkyKTtcbiAgICAgICAgICAgICAgICBjb25zdCBiciA9IG5ldyBQb2ludCh4MiwgeTIpO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgcm90YXRlUmFkaWFucyA9IHJvdGF0ZSAqIE1hdGguUEkgLyAxODA7XG5cbiAgICAgICAgICAgICAgICB0bC5fcm90YXRlKHJvdGF0ZVJhZGlhbnMpO1xuICAgICAgICAgICAgICAgIHRyLl9yb3RhdGUocm90YXRlUmFkaWFucyk7XG4gICAgICAgICAgICAgICAgYmwuX3JvdGF0ZShyb3RhdGVSYWRpYW5zKTtcbiAgICAgICAgICAgICAgICBici5fcm90YXRlKHJvdGF0ZVJhZGlhbnMpO1xuXG4gICAgICAgICAgICAgICAgLy8gQ29sbGlzaW9uIGZlYXR1cmVzIHJlcXVpcmUgYW4gXCJvbi1heGlzXCIgZ2VvbWV0cnksXG4gICAgICAgICAgICAgICAgLy8gc28gdGFrZSB0aGUgZW52ZWxvcGUgb2YgdGhlIHJvdGF0ZWQgZ2VvbWV0cnlcbiAgICAgICAgICAgICAgICAvLyAobWF5IGJlIHF1aXRlIGxhcmdlIGZvciB3aWRlIGxhYmVscyByb3RhdGVkIDQ1IGRlZ3JlZXMpXG4gICAgICAgICAgICAgICAgeDEgPSBNYXRoLm1pbih0bC54LCB0ci54LCBibC54LCBici54KTtcbiAgICAgICAgICAgICAgICB4MiA9IE1hdGgubWF4KHRsLngsIHRyLngsIGJsLngsIGJyLngpO1xuICAgICAgICAgICAgICAgIHkxID0gTWF0aC5taW4odGwueSwgdHIueSwgYmwueSwgYnIueSk7XG4gICAgICAgICAgICAgICAgeTIgPSBNYXRoLm1heCh0bC55LCB0ci55LCBibC55LCBici55KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbGxpc2lvbkJveEFycmF5LmVtcGxhY2VCYWNrKGFuY2hvci54LCBhbmNob3IueSwgeDEsIHkxLCB4MiwgeTIsIGZlYXR1cmVJbmRleCwgc291cmNlTGF5ZXJJbmRleCwgYnVja2V0SW5kZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ib3hFbmRJbmRleCA9IGNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aDtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbGxpc2lvbkZlYXR1cmU7XG4iLCJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRpbnlRdWV1ZSB7XG4gICAgY29uc3RydWN0b3IoZGF0YSA9IFtdLCBjb21wYXJlID0gZGVmYXVsdENvbXBhcmUpIHtcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICAgICAgdGhpcy5sZW5ndGggPSB0aGlzLmRhdGEubGVuZ3RoO1xuICAgICAgICB0aGlzLmNvbXBhcmUgPSBjb21wYXJlO1xuXG4gICAgICAgIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAodGhpcy5sZW5ndGggPj4gMSkgLSAxOyBpID49IDA7IGktLSkgdGhpcy5fZG93bihpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1c2goaXRlbSkge1xuICAgICAgICB0aGlzLmRhdGEucHVzaChpdGVtKTtcbiAgICAgICAgdGhpcy5sZW5ndGgrKztcbiAgICAgICAgdGhpcy5fdXAodGhpcy5sZW5ndGggLSAxKTtcbiAgICB9XG5cbiAgICBwb3AoKSB7XG4gICAgICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgICBjb25zdCB0b3AgPSB0aGlzLmRhdGFbMF07XG4gICAgICAgIGNvbnN0IGJvdHRvbSA9IHRoaXMuZGF0YS5wb3AoKTtcbiAgICAgICAgdGhpcy5sZW5ndGgtLTtcblxuICAgICAgICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFbMF0gPSBib3R0b207XG4gICAgICAgICAgICB0aGlzLl9kb3duKDApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRvcDtcbiAgICB9XG5cbiAgICBwZWVrKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhWzBdO1xuICAgIH1cblxuICAgIF91cChwb3MpIHtcbiAgICAgICAgY29uc3Qge2RhdGEsIGNvbXBhcmV9ID0gdGhpcztcbiAgICAgICAgY29uc3QgaXRlbSA9IGRhdGFbcG9zXTtcblxuICAgICAgICB3aGlsZSAocG9zID4gMCkge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gKHBvcyAtIDEpID4+IDE7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gZGF0YVtwYXJlbnRdO1xuICAgICAgICAgICAgaWYgKGNvbXBhcmUoaXRlbSwgY3VycmVudCkgPj0gMCkgYnJlYWs7XG4gICAgICAgICAgICBkYXRhW3Bvc10gPSBjdXJyZW50O1xuICAgICAgICAgICAgcG9zID0gcGFyZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YVtwb3NdID0gaXRlbTtcbiAgICB9XG5cbiAgICBfZG93bihwb3MpIHtcbiAgICAgICAgY29uc3Qge2RhdGEsIGNvbXBhcmV9ID0gdGhpcztcbiAgICAgICAgY29uc3QgaGFsZkxlbmd0aCA9IHRoaXMubGVuZ3RoID4+IDE7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBkYXRhW3Bvc107XG5cbiAgICAgICAgd2hpbGUgKHBvcyA8IGhhbGZMZW5ndGgpIHtcbiAgICAgICAgICAgIGxldCBsZWZ0ID0gKHBvcyA8PCAxKSArIDE7XG4gICAgICAgICAgICBsZXQgYmVzdCA9IGRhdGFbbGVmdF07XG4gICAgICAgICAgICBjb25zdCByaWdodCA9IGxlZnQgKyAxO1xuXG4gICAgICAgICAgICBpZiAocmlnaHQgPCB0aGlzLmxlbmd0aCAmJiBjb21wYXJlKGRhdGFbcmlnaHRdLCBiZXN0KSA8IDApIHtcbiAgICAgICAgICAgICAgICBsZWZ0ID0gcmlnaHQ7XG4gICAgICAgICAgICAgICAgYmVzdCA9IGRhdGFbcmlnaHRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbXBhcmUoYmVzdCwgaXRlbSkgPj0gMCkgYnJlYWs7XG5cbiAgICAgICAgICAgIGRhdGFbcG9zXSA9IGJlc3Q7XG4gICAgICAgICAgICBwb3MgPSBsZWZ0O1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YVtwb3NdID0gaXRlbTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRDb21wYXJlKGEsIGIpIHtcbiAgICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDA7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgUXVldWUgZnJvbSAndGlueXF1ZXVlJztcblxuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IHtkaXN0VG9TZWdtZW50U3F1YXJlZH0gZnJvbSAnLi9pbnRlcnNlY3Rpb25fdGVzdHMnO1xuXG4vKipcbiAqIEZpbmRzIGFuIGFwcHJveGltYXRpb24gb2YgYSBwb2x5Z29uJ3MgUG9sZSBPZiBJbmFjY2Vzc2liaWxpeSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Qb2xlX29mX2luYWNjZXNzaWJpbGl0eVxuICogVGhpcyBpcyBhIGNvcHkgb2YgaHR0cDovL2dpdGh1Yi5jb20vbWFwYm94L3BvbHlsYWJlbCBhZGFwdGVkIHRvIHVzZSBQb2ludHNcbiAqXG4gKiBAcGFyYW0gcG9seWdvblJpbmdzIGZpcnN0IGl0ZW0gaW4gYXJyYXkgaXMgdGhlIG91dGVyIHJpbmcgZm9sbG93ZWQgb3B0aW9uYWxseSBieSB0aGUgbGlzdCBvZiBob2xlcywgc2hvdWxkIGJlIGFuIGVsZW1lbnQgb2YgdGhlIHJlc3VsdCBvZiB1dGlsL2NsYXNzaWZ5X3JpbmdzXG4gKiBAcGFyYW0gcHJlY2lzaW9uIFNwZWNpZmllZCBpbiBpbnB1dCBjb29yZGluYXRlIHVuaXRzLiBJZiAwIHJldHVybnMgYWZ0ZXIgZmlyc3QgcnVuLCBpZiA+IDAgcmVwZWF0ZWRseSBuYXJyb3dzIHRoZSBzZWFyY2ggc3BhY2UgdW50aWwgdGhlIHJhZGl1cyBvZiB0aGUgYXJlYSBzZWFyY2hlZCBmb3IgdGhlIGJlc3QgcG9sZSBpcyBsZXNzIHRoYW4gcHJlY2lzaW9uXG4gKiBAcGFyYW0gZGVidWcgUHJpbnQgc29tZSBzdGF0aXN0aWNzIHRvIHRoZSBjb25zb2xlIGR1cmluZyBleGVjdXRpb25cbiAqIEByZXR1cm5zIFBvbGUgb2YgSW5hY2Nlc3NpYmlsaXkuXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAocG9seWdvblJpbmdzOiBBcnJheTxBcnJheTxQb2ludD4+LCBwcmVjaXNpb24/OiBudW1iZXIgPSAxLCBkZWJ1Zz86IGJvb2xlYW4gPSBmYWxzZSk6IFBvaW50IHtcbiAgICAvLyBmaW5kIHRoZSBib3VuZGluZyBib3ggb2YgdGhlIG91dGVyIHJpbmdcbiAgICBsZXQgbWluWCA9IEluZmluaXR5LCBtaW5ZID0gSW5maW5pdHksIG1heFggPSAtSW5maW5pdHksIG1heFkgPSAtSW5maW5pdHk7XG4gICAgY29uc3Qgb3V0ZXJSaW5nID0gcG9seWdvblJpbmdzWzBdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3V0ZXJSaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHAgPSBvdXRlclJpbmdbaV07XG4gICAgICAgIGlmICghaSB8fCBwLnggPCBtaW5YKSBtaW5YID0gcC54O1xuICAgICAgICBpZiAoIWkgfHwgcC55IDwgbWluWSkgbWluWSA9IHAueTtcbiAgICAgICAgaWYgKCFpIHx8IHAueCA+IG1heFgpIG1heFggPSBwLng7XG4gICAgICAgIGlmICghaSB8fCBwLnkgPiBtYXhZKSBtYXhZID0gcC55O1xuICAgIH1cblxuICAgIGNvbnN0IHdpZHRoID0gbWF4WCAtIG1pblg7XG4gICAgY29uc3QgaGVpZ2h0ID0gbWF4WSAtIG1pblk7XG4gICAgY29uc3QgY2VsbFNpemUgPSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KTtcbiAgICBsZXQgaCA9IGNlbGxTaXplIC8gMjtcblxuICAgIC8vIGEgcHJpb3JpdHkgcXVldWUgb2YgY2VsbHMgaW4gb3JkZXIgb2YgdGhlaXIgXCJwb3RlbnRpYWxcIiAobWF4IGRpc3RhbmNlIHRvIHBvbHlnb24pXG4gICAgY29uc3QgY2VsbFF1ZXVlID0gbmV3IFF1ZXVlKFtdLCBjb21wYXJlTWF4KTtcblxuICAgIGlmIChjZWxsU2l6ZSA9PT0gMCkgcmV0dXJuIG5ldyBQb2ludChtaW5YLCBtaW5ZKTtcblxuICAgIC8vIGNvdmVyIHBvbHlnb24gd2l0aCBpbml0aWFsIGNlbGxzXG4gICAgZm9yIChsZXQgeCA9IG1pblg7IHggPCBtYXhYOyB4ICs9IGNlbGxTaXplKSB7XG4gICAgICAgIGZvciAobGV0IHkgPSBtaW5ZOyB5IDwgbWF4WTsgeSArPSBjZWxsU2l6ZSkge1xuICAgICAgICAgICAgY2VsbFF1ZXVlLnB1c2gobmV3IENlbGwoeCArIGgsIHkgKyBoLCBoLCBwb2x5Z29uUmluZ3MpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRha2UgY2VudHJvaWQgYXMgdGhlIGZpcnN0IGJlc3QgZ3Vlc3NcbiAgICBsZXQgYmVzdENlbGwgPSBnZXRDZW50cm9pZENlbGwocG9seWdvblJpbmdzKTtcbiAgICBsZXQgbnVtUHJvYmVzID0gY2VsbFF1ZXVlLmxlbmd0aDtcblxuICAgIHdoaWxlIChjZWxsUXVldWUubGVuZ3RoKSB7XG4gICAgICAgIC8vIHBpY2sgdGhlIG1vc3QgcHJvbWlzaW5nIGNlbGwgZnJvbSB0aGUgcXVldWVcbiAgICAgICAgY29uc3QgY2VsbCA9IGNlbGxRdWV1ZS5wb3AoKTtcblxuICAgICAgICAvLyB1cGRhdGUgdGhlIGJlc3QgY2VsbCBpZiB3ZSBmb3VuZCBhIGJldHRlciBvbmVcbiAgICAgICAgaWYgKGNlbGwuZCA+IGJlc3RDZWxsLmQgfHwgIWJlc3RDZWxsLmQpIHtcbiAgICAgICAgICAgIGJlc3RDZWxsID0gY2VsbDtcbiAgICAgICAgICAgIGlmIChkZWJ1ZykgY29uc29sZS5sb2coJ2ZvdW5kIGJlc3QgJWQgYWZ0ZXIgJWQgcHJvYmVzJywgTWF0aC5yb3VuZCgxZTQgKiBjZWxsLmQpIC8gMWU0LCBudW1Qcm9iZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZG8gbm90IGRyaWxsIGRvd24gZnVydGhlciBpZiB0aGVyZSdzIG5vIGNoYW5jZSBvZiBhIGJldHRlciBzb2x1dGlvblxuICAgICAgICBpZiAoY2VsbC5tYXggLSBiZXN0Q2VsbC5kIDw9IHByZWNpc2lvbikgY29udGludWU7XG5cbiAgICAgICAgLy8gc3BsaXQgdGhlIGNlbGwgaW50byBmb3VyIGNlbGxzXG4gICAgICAgIGggPSBjZWxsLmggLyAyO1xuICAgICAgICBjZWxsUXVldWUucHVzaChuZXcgQ2VsbChjZWxsLnAueCAtIGgsIGNlbGwucC55IC0gaCwgaCwgcG9seWdvblJpbmdzKSk7XG4gICAgICAgIGNlbGxRdWV1ZS5wdXNoKG5ldyBDZWxsKGNlbGwucC54ICsgaCwgY2VsbC5wLnkgLSBoLCBoLCBwb2x5Z29uUmluZ3MpKTtcbiAgICAgICAgY2VsbFF1ZXVlLnB1c2gobmV3IENlbGwoY2VsbC5wLnggLSBoLCBjZWxsLnAueSArIGgsIGgsIHBvbHlnb25SaW5ncykpO1xuICAgICAgICBjZWxsUXVldWUucHVzaChuZXcgQ2VsbChjZWxsLnAueCArIGgsIGNlbGwucC55ICsgaCwgaCwgcG9seWdvblJpbmdzKSk7XG4gICAgICAgIG51bVByb2JlcyArPSA0O1xuICAgIH1cblxuICAgIGlmIChkZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmxvZyhgbnVtIHByb2JlczogJHtudW1Qcm9iZXN9YCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBiZXN0IGRpc3RhbmNlOiAke2Jlc3RDZWxsLmR9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJlc3RDZWxsLnA7XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVNYXgoYSwgYikge1xuICAgIHJldHVybiBiLm1heCAtIGEubWF4O1xufVxuXG5mdW5jdGlvbiBDZWxsKHgsIHksIGgsIHBvbHlnb24pIHtcbiAgICB0aGlzLnAgPSBuZXcgUG9pbnQoeCwgeSk7XG4gICAgdGhpcy5oID0gaDsgLy8gaGFsZiB0aGUgY2VsbCBzaXplXG4gICAgdGhpcy5kID0gcG9pbnRUb1BvbHlnb25EaXN0KHRoaXMucCwgcG9seWdvbik7IC8vIGRpc3RhbmNlIGZyb20gY2VsbCBjZW50ZXIgdG8gcG9seWdvblxuICAgIHRoaXMubWF4ID0gdGhpcy5kICsgdGhpcy5oICogTWF0aC5TUVJUMjsgLy8gbWF4IGRpc3RhbmNlIHRvIHBvbHlnb24gd2l0aGluIGEgY2VsbFxufVxuXG4vLyBzaWduZWQgZGlzdGFuY2UgZnJvbSBwb2ludCB0byBwb2x5Z29uIG91dGxpbmUgKG5lZ2F0aXZlIGlmIHBvaW50IGlzIG91dHNpZGUpXG5mdW5jdGlvbiBwb2ludFRvUG9seWdvbkRpc3QocCwgcG9seWdvbikge1xuICAgIGxldCBpbnNpZGUgPSBmYWxzZTtcbiAgICBsZXQgbWluRGlzdFNxID0gSW5maW5pdHk7XG5cbiAgICBmb3IgKGxldCBrID0gMDsgayA8IHBvbHlnb24ubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgY29uc3QgcmluZyA9IHBvbHlnb25ba107XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHJpbmcubGVuZ3RoLCBqID0gbGVuIC0gMTsgaSA8IGxlbjsgaiA9IGkrKykge1xuICAgICAgICAgICAgY29uc3QgYSA9IHJpbmdbaV07XG4gICAgICAgICAgICBjb25zdCBiID0gcmluZ1tqXTtcblxuICAgICAgICAgICAgaWYgKChhLnkgPiBwLnkgIT09IGIueSA+IHAueSkgJiZcbiAgICAgICAgICAgICAgICAocC54IDwgKGIueCAtIGEueCkgKiAocC55IC0gYS55KSAvIChiLnkgLSBhLnkpICsgYS54KSkgaW5zaWRlID0gIWluc2lkZTtcblxuICAgICAgICAgICAgbWluRGlzdFNxID0gTWF0aC5taW4obWluRGlzdFNxLCBkaXN0VG9TZWdtZW50U3F1YXJlZChwLCBhLCBiKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKGluc2lkZSA/IDEgOiAtMSkgKiBNYXRoLnNxcnQobWluRGlzdFNxKTtcbn1cblxuLy8gZ2V0IHBvbHlnb24gY2VudHJvaWRcbmZ1bmN0aW9uIGdldENlbnRyb2lkQ2VsbChwb2x5Z29uKSB7XG4gICAgbGV0IGFyZWEgPSAwO1xuICAgIGxldCB4ID0gMDtcbiAgICBsZXQgeSA9IDA7XG4gICAgY29uc3QgcG9pbnRzID0gcG9seWdvblswXTtcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gcG9pbnRzLmxlbmd0aCwgaiA9IGxlbiAtIDE7IGkgPCBsZW47IGogPSBpKyspIHtcbiAgICAgICAgY29uc3QgYSA9IHBvaW50c1tpXTtcbiAgICAgICAgY29uc3QgYiA9IHBvaW50c1tqXTtcbiAgICAgICAgY29uc3QgZiA9IGEueCAqIGIueSAtIGIueCAqIGEueTtcbiAgICAgICAgeCArPSAoYS54ICsgYi54KSAqIGY7XG4gICAgICAgIHkgKz0gKGEueSArIGIueSkgKiBmO1xuICAgICAgICBhcmVhICs9IGYgKiAzO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IENlbGwoeCAvIGFyZWEsIHkgLyBhcmVhLCAwLCBwb2x5Z29uKTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBBbmNob3IgZnJvbSAnLi9hbmNob3InO1xuXG5pbXBvcnQge2dldEFuY2hvcnMsIGdldENlbnRlckFuY2hvcn0gZnJvbSAnLi9nZXRfYW5jaG9ycyc7XG5pbXBvcnQgY2xpcExpbmUgZnJvbSAnLi9jbGlwX2xpbmUnO1xuaW1wb3J0IHtzaGFwZVRleHQsIHNoYXBlSWNvbiwgV3JpdGluZ01vZGUsIGZpdEljb25Ub1RleHR9IGZyb20gJy4vc2hhcGluZyc7XG5pbXBvcnQge2dldEdseXBoUXVhZHMsIGdldEljb25RdWFkc30gZnJvbSAnLi9xdWFkcyc7XG5pbXBvcnQgQ29sbGlzaW9uRmVhdHVyZSBmcm9tICcuL2NvbGxpc2lvbl9mZWF0dXJlJztcbmltcG9ydCB7d2Fybk9uY2V9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQge1xuICAgIGFsbG93c1ZlcnRpY2FsV3JpdGluZ01vZGUsXG4gICAgYWxsb3dzTGV0dGVyU3BhY2luZ1xufSBmcm9tICcuLi91dGlsL3NjcmlwdF9kZXRlY3Rpb24nO1xuaW1wb3J0IGZpbmRQb2xlT2ZJbmFjY2Vzc2liaWxpdHkgZnJvbSAnLi4vdXRpbC9maW5kX3BvbGVfb2ZfaW5hY2Nlc3NpYmlsaXR5JztcbmltcG9ydCBjbGFzc2lmeVJpbmdzIGZyb20gJy4uL3V0aWwvY2xhc3NpZnlfcmluZ3MnO1xuaW1wb3J0IEVYVEVOVCBmcm9tICcuLi9kYXRhL2V4dGVudCc7XG5pbXBvcnQgU3ltYm9sQnVja2V0IGZyb20gJy4uL2RhdGEvYnVja2V0L3N5bWJvbF9idWNrZXQnO1xuaW1wb3J0IEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4uL3N0eWxlL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5pbXBvcnQge1NJWkVfUEFDS19GQUNUT1J9IGZyb20gJy4vc3ltYm9sX3NpemUnO1xuaW1wb3J0IE9ORV9FTSBmcm9tICcuL29uZV9lbSc7XG5pbXBvcnQgdHlwZSB7Q2Fub25pY2FsVGlsZUlEfSBmcm9tICcuLi9zb3VyY2UvdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSB7U2hhcGluZywgUG9zaXRpb25lZEljb24sIFRleHRKdXN0aWZ5fSBmcm9tICcuL3NoYXBpbmcnO1xuaW1wb3J0IHR5cGUge0NvbGxpc2lvbkJveEFycmF5fSBmcm9tICcuLi9kYXRhL2FycmF5X3R5cGVzJztcbmltcG9ydCB0eXBlIHtTeW1ib2xGZWF0dXJlfSBmcm9tICcuLi9kYXRhL2J1Y2tldC9zeW1ib2xfYnVja2V0JztcbmltcG9ydCB0eXBlIHtTdHlsZUltYWdlfSBmcm9tICcuLi9zdHlsZS9zdHlsZV9pbWFnZSc7XG5pbXBvcnQgdHlwZSB7U3R5bGVHbHlwaH0gZnJvbSAnLi4vc3R5bGUvc3R5bGVfZ2x5cGgnO1xuaW1wb3J0IHR5cGUgU3ltYm9sU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllci9zeW1ib2xfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUge0ltYWdlUG9zaXRpb259IGZyb20gJy4uL3JlbmRlci9pbWFnZV9hdGxhcyc7XG5pbXBvcnQgdHlwZSB7R2x5cGhQb3NpdGlvbn0gZnJvbSAnLi4vcmVuZGVyL2dseXBoX2F0bGFzJztcbmltcG9ydCB0eXBlIHtQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWV9IGZyb20gJy4uL3N0eWxlL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgbXVybXVyMyBmcm9tICdtdXJtdXJoYXNoLWpzJztcblxuLy8gVGhlIHN5bWJvbCBsYXlvdXQgcHJvY2VzcyBuZWVkcyBgdGV4dC1zaXplYCBldmFsdWF0ZWQgYXQgdXAgdG8gZml2ZSBkaWZmZXJlbnQgem9vbSBsZXZlbHMsIGFuZFxuLy8gYGljb24tc2l6ZWAgYXQgdXAgdG8gdGhyZWU6XG4vL1xuLy8gICAxLiBgdGV4dC1zaXplYCBhdCB0aGUgem9vbSBsZXZlbCBvZiB0aGUgYnVja2V0LiBVc2VkIHRvIGNhbGN1bGF0ZSBhIHBlci1mZWF0dXJlIHNpemUgZm9yIHNvdXJjZSBgdGV4dC1zaXplYFxuLy8gICAgICAgZXhwcmVzc2lvbnMsIGFuZCB0byBjYWxjdWxhdGUgdGhlIGJveCBkaW1lbnNpb25zIGZvciBpY29uLXRleHQtZml0LlxuLy8gICAyLiBgaWNvbi1zaXplYCBhdCB0aGUgem9vbSBsZXZlbCBvZiB0aGUgYnVja2V0LiBVc2VkIHRvIGNhbGN1bGF0ZSBhIHBlci1mZWF0dXJlIHNpemUgZm9yIHNvdXJjZSBgaWNvbi1zaXplYFxuLy8gICAgICAgZXhwcmVzc2lvbnMuXG4vLyAgIDMuIGB0ZXh0LXNpemVgIGFuZCBgaWNvbi1zaXplYCBhdCB0aGUgem9vbSBsZXZlbCBvZiB0aGUgYnVja2V0LCBwbHVzIG9uZS4gVXNlZCB0byBjYWxjdWxhdGUgY29sbGlzaW9uIGJveGVzLlxuLy8gICA0LiBgdGV4dC1zaXplYCBhdCB6b29tIGxldmVsIDE4LiBVc2VkIGZvciBzb21ldGhpbmcgbGluZS1zeW1ib2wtcGxhY2VtZW50LXJlbGF0ZWQuXG4vLyAgIDUuICBGb3IgY29tcG9zaXRlIGAqLXNpemVgIGV4cHJlc3Npb25zOiB0d28gem9vbSBsZXZlbHMgb2YgY3VydmUgc3RvcHMgdGhhdCBcImNvdmVyXCIgdGhlIHpvb20gbGV2ZWwgb2YgdGhlXG4vLyAgICAgICBidWNrZXQuIFRoZXNlIGdvIGludG8gYSB2ZXJ0ZXggYnVmZmVyIGFuZCBhcmUgdXNlZCBieSB0aGUgc2hhZGVyIHRvIGludGVycG9sYXRlIHRoZSBzaXplIGF0IHJlbmRlciB0aW1lLlxuLy9cbi8vICgxKSBhbmQgKDIpIGFyZSBzdG9yZWQgaW4gYGJ1Y2tldC5sYXllcnNbMF0ubGF5b3V0YC4gVGhlIHJlbWFpbmRlciBhcmUgYmVsb3cuXG4vL1xudHlwZSBTaXplcyA9IHtcbiAgICBsYXlvdXRUZXh0U2l6ZTogUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPG51bWJlcj4sIC8vICgzKVxuICAgIGxheW91dEljb25TaXplOiBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8bnVtYmVyPiwgLy8gKDMpXG4gICAgdGV4dE1heFNpemU6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxudW1iZXI+LCAgICAvLyAoNClcbiAgICBjb21wb3NpdGVUZXh0U2l6ZXM6IFtQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8bnVtYmVyPiwgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPG51bWJlcj5dLCAvLyAoNSlcbiAgICBjb21wb3NpdGVJY29uU2l6ZXM6IFtQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8bnVtYmVyPiwgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPG51bWJlcj5dLCAvLyAoNSlcbn07XG5cbmV4cG9ydCB0eXBlIFRleHRBbmNob3IgPSAnY2VudGVyJyB8ICdsZWZ0JyB8ICdyaWdodCcgfCAndG9wJyB8ICdib3R0b20nIHwgJ3RvcC1sZWZ0JyB8ICd0b3AtcmlnaHQnIHwgJ2JvdHRvbS1sZWZ0JyB8ICdib3R0b20tcmlnaHQnO1xuXG4vLyBUaGUgcmFkaWFsIG9mZnNldCBpcyB0byB0aGUgZWRnZSBvZiB0aGUgdGV4dCBib3hcbi8vIEluIHRoZSBob3Jpem9udGFsIGRpcmVjdGlvbiwgdGhlIGVkZ2Ugb2YgdGhlIHRleHQgYm94IGlzIHdoZXJlIGdseXBocyBzdGFydFxuLy8gQnV0IGluIHRoZSB2ZXJ0aWNhbCBkaXJlY3Rpb24sIHRoZSBnbHlwaHMgYXBwZWFyIHRvIFwic3RhcnRcIiBhdCB0aGUgYmFzZWxpbmVcbi8vIFdlIGRvbid0IGFjdHVhbGx5IGxvYWQgYmFzZWxpbmUgZGF0YSwgYnV0IHdlIGFzc3VtZSBhbiBvZmZzZXQgb2YgT05FX0VNIC0gMTdcbi8vIChzZWUgXCJ5T2Zmc2V0XCIgaW4gc2hhcGluZy5qcylcbmNvbnN0IGJhc2VsaW5lT2Zmc2V0ID0gNztcbmNvbnN0IElOVkFMSURfVEVYVF9PRkZTRVQgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG5cbmV4cG9ydCBmdW5jdGlvbiBldmFsdWF0ZVZhcmlhYmxlT2Zmc2V0KGFuY2hvcjogVGV4dEFuY2hvciwgb2Zmc2V0OiBbbnVtYmVyLCBudW1iZXJdKSB7XG5cbiAgICBmdW5jdGlvbiBmcm9tUmFkaWFsT2Zmc2V0KGFuY2hvcjogVGV4dEFuY2hvciwgcmFkaWFsT2Zmc2V0OiBudW1iZXIpIHtcbiAgICAgICAgbGV0IHggPSAwLCB5ID0gMDtcbiAgICAgICAgaWYgKHJhZGlhbE9mZnNldCA8IDApIHJhZGlhbE9mZnNldCA9IDA7IC8vIElnbm9yZSBuZWdhdGl2ZSBvZmZzZXQuXG4gICAgICAgIC8vIHNvbHZlIGZvciByIHdoZXJlIHJeMiArIHJeMiA9IHJhZGlhbE9mZnNldF4yXG4gICAgICAgIGNvbnN0IGh5cG90ZW51c2UgPSByYWRpYWxPZmZzZXQgLyBNYXRoLnNxcnQoMik7XG4gICAgICAgIHN3aXRjaCAoYW5jaG9yKSB7XG4gICAgICAgIGNhc2UgJ3RvcC1yaWdodCc6XG4gICAgICAgIGNhc2UgJ3RvcC1sZWZ0JzpcbiAgICAgICAgICAgIHkgPSBoeXBvdGVudXNlIC0gYmFzZWxpbmVPZmZzZXQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYm90dG9tLXJpZ2h0JzpcbiAgICAgICAgY2FzZSAnYm90dG9tLWxlZnQnOlxuICAgICAgICAgICAgeSA9IC1oeXBvdGVudXNlICsgYmFzZWxpbmVPZmZzZXQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgICAgIHkgPSAtcmFkaWFsT2Zmc2V0ICsgYmFzZWxpbmVPZmZzZXQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgICAgIHkgPSByYWRpYWxPZmZzZXQgLSBiYXNlbGluZU9mZnNldDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoIChhbmNob3IpIHtcbiAgICAgICAgY2FzZSAndG9wLXJpZ2h0JzpcbiAgICAgICAgY2FzZSAnYm90dG9tLXJpZ2h0JzpcbiAgICAgICAgICAgIHggPSAtaHlwb3RlbnVzZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd0b3AtbGVmdCc6XG4gICAgICAgIGNhc2UgJ2JvdHRvbS1sZWZ0JzpcbiAgICAgICAgICAgIHggPSBoeXBvdGVudXNlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICAgICAgeCA9IHJhZGlhbE9mZnNldDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgICB4ID0gLXJhZGlhbE9mZnNldDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFt4LCB5XTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmcm9tVGV4dE9mZnNldChhbmNob3I6IFRleHRBbmNob3IsIG9mZnNldFg6IG51bWJlciwgb2Zmc2V0WTogbnVtYmVyKSB7XG4gICAgICAgIGxldCB4ID0gMCwgeSA9IDA7XG4gICAgICAgIC8vIFVzZSBhYnNvbHV0ZSBvZmZzZXQgdmFsdWVzLlxuICAgICAgICBvZmZzZXRYID0gTWF0aC5hYnMob2Zmc2V0WCk7XG4gICAgICAgIG9mZnNldFkgPSBNYXRoLmFicyhvZmZzZXRZKTtcblxuICAgICAgICBzd2l0Y2ggKGFuY2hvcikge1xuICAgICAgICBjYXNlICd0b3AtcmlnaHQnOlxuICAgICAgICBjYXNlICd0b3AtbGVmdCc6XG4gICAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgICAgICB5ID0gb2Zmc2V0WSAtIGJhc2VsaW5lT2Zmc2V0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2JvdHRvbS1yaWdodCc6XG4gICAgICAgIGNhc2UgJ2JvdHRvbS1sZWZ0JzpcbiAgICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgICAgIHkgPSAtb2Zmc2V0WSArIGJhc2VsaW5lT2Zmc2V0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKGFuY2hvcikge1xuICAgICAgICBjYXNlICd0b3AtcmlnaHQnOlxuICAgICAgICBjYXNlICdib3R0b20tcmlnaHQnOlxuICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgICB4ID0gLW9mZnNldFg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndG9wLWxlZnQnOlxuICAgICAgICBjYXNlICdib3R0b20tbGVmdCc6XG4gICAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICAgICAgeCA9IG9mZnNldFg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbeCwgeV07XG4gICAgfVxuXG4gICAgcmV0dXJuIChvZmZzZXRbMV0gIT09IElOVkFMSURfVEVYVF9PRkZTRVQpID8gZnJvbVRleHRPZmZzZXQoYW5jaG9yLCBvZmZzZXRbMF0sIG9mZnNldFsxXSkgOiBmcm9tUmFkaWFsT2Zmc2V0KGFuY2hvciwgb2Zmc2V0WzBdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBlcmZvcm1TeW1ib2xMYXlvdXQoYnVja2V0OiBTeW1ib2xCdWNrZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoTWFwOiB7W186IHN0cmluZ106IHtbbnVtYmVyXTogP1N0eWxlR2x5cGh9fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhQb3NpdGlvbnM6IHtbXzogc3RyaW5nXToge1tudW1iZXJdOiBHbHlwaFBvc2l0aW9ufX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlTWFwOiB7W186IHN0cmluZ106IFN0eWxlSW1hZ2V9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZVBvc2l0aW9uczoge1tfOiBzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0NvbGxpc2lvbkJveGVzOiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5vbmljYWw6IENhbm9uaWNhbFRpbGVJRCkge1xuICAgIGJ1Y2tldC5jcmVhdGVBcnJheXMoKTtcblxuICAgIGNvbnN0IHRpbGVTaXplID0gNTEyICogYnVja2V0Lm92ZXJzY2FsaW5nO1xuICAgIGJ1Y2tldC50aWxlUGl4ZWxSYXRpbyA9IEVYVEVOVCAvIHRpbGVTaXplO1xuICAgIGJ1Y2tldC5jb21wYXJlVGV4dCA9IHt9O1xuICAgIGJ1Y2tldC5pY29uc05lZWRMaW5lYXIgPSBmYWxzZTtcblxuICAgIGNvbnN0IGxheW91dCA9IGJ1Y2tldC5sYXllcnNbMF0ubGF5b3V0O1xuICAgIGNvbnN0IHVuZXZhbHVhdGVkTGF5b3V0VmFsdWVzID0gYnVja2V0LmxheWVyc1swXS5fdW5ldmFsdWF0ZWRMYXlvdXQuX3ZhbHVlcztcblxuICAgIGNvbnN0IHNpemVzID0ge307XG5cbiAgICBpZiAoYnVja2V0LnRleHRTaXplRGF0YS5raW5kID09PSAnY29tcG9zaXRlJykge1xuICAgICAgICBjb25zdCB7bWluWm9vbSwgbWF4Wm9vbX0gPSBidWNrZXQudGV4dFNpemVEYXRhO1xuICAgICAgICBzaXplcy5jb21wb3NpdGVUZXh0U2l6ZXMgPSBbXG4gICAgICAgICAgICB1bmV2YWx1YXRlZExheW91dFZhbHVlc1sndGV4dC1zaXplJ10ucG9zc2libHlFdmFsdWF0ZShuZXcgRXZhbHVhdGlvblBhcmFtZXRlcnMobWluWm9vbSksIGNhbm9uaWNhbCksXG4gICAgICAgICAgICB1bmV2YWx1YXRlZExheW91dFZhbHVlc1sndGV4dC1zaXplJ10ucG9zc2libHlFdmFsdWF0ZShuZXcgRXZhbHVhdGlvblBhcmFtZXRlcnMobWF4Wm9vbSksIGNhbm9uaWNhbClcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBpZiAoYnVja2V0Lmljb25TaXplRGF0YS5raW5kID09PSAnY29tcG9zaXRlJykge1xuICAgICAgICBjb25zdCB7bWluWm9vbSwgbWF4Wm9vbX0gPSBidWNrZXQuaWNvblNpemVEYXRhO1xuICAgICAgICBzaXplcy5jb21wb3NpdGVJY29uU2l6ZXMgPSBbXG4gICAgICAgICAgICB1bmV2YWx1YXRlZExheW91dFZhbHVlc1snaWNvbi1zaXplJ10ucG9zc2libHlFdmFsdWF0ZShuZXcgRXZhbHVhdGlvblBhcmFtZXRlcnMobWluWm9vbSksIGNhbm9uaWNhbCksXG4gICAgICAgICAgICB1bmV2YWx1YXRlZExheW91dFZhbHVlc1snaWNvbi1zaXplJ10ucG9zc2libHlFdmFsdWF0ZShuZXcgRXZhbHVhdGlvblBhcmFtZXRlcnMobWF4Wm9vbSksIGNhbm9uaWNhbClcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBzaXplcy5sYXlvdXRUZXh0U2l6ZSA9IHVuZXZhbHVhdGVkTGF5b3V0VmFsdWVzWyd0ZXh0LXNpemUnXS5wb3NzaWJseUV2YWx1YXRlKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyhidWNrZXQuem9vbSArIDEpLCBjYW5vbmljYWwpO1xuICAgIHNpemVzLmxheW91dEljb25TaXplID0gdW5ldmFsdWF0ZWRMYXlvdXRWYWx1ZXNbJ2ljb24tc2l6ZSddLnBvc3NpYmx5RXZhbHVhdGUobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKGJ1Y2tldC56b29tICsgMSksIGNhbm9uaWNhbCk7XG4gICAgc2l6ZXMudGV4dE1heFNpemUgPSB1bmV2YWx1YXRlZExheW91dFZhbHVlc1sndGV4dC1zaXplJ10ucG9zc2libHlFdmFsdWF0ZShuZXcgRXZhbHVhdGlvblBhcmFtZXRlcnMoMTgpKTtcblxuICAgIGNvbnN0IGxpbmVIZWlnaHQgPSBsYXlvdXQuZ2V0KCd0ZXh0LWxpbmUtaGVpZ2h0JykgKiBPTkVfRU07XG4gICAgY29uc3QgdGV4dEFsb25nTGluZSA9IGxheW91dC5nZXQoJ3RleHQtcm90YXRpb24tYWxpZ25tZW50JykgPT09ICdtYXAnICYmIGxheW91dC5nZXQoJ3N5bWJvbC1wbGFjZW1lbnQnKSAhPT0gJ3BvaW50JztcbiAgICBjb25zdCBrZWVwVXByaWdodCA9IGxheW91dC5nZXQoJ3RleHQta2VlcC11cHJpZ2h0Jyk7XG4gICAgY29uc3QgdGV4dFNpemUgPSBsYXlvdXQuZ2V0KCd0ZXh0LXNpemUnKTtcblxuICAgIGZvciAoY29uc3QgZmVhdHVyZSBvZiBidWNrZXQuZmVhdHVyZXMpIHtcbiAgICAgICAgY29uc3QgZm9udHN0YWNrID0gbGF5b3V0LmdldCgndGV4dC1mb250JykuZXZhbHVhdGUoZmVhdHVyZSwge30sIGNhbm9uaWNhbCkuam9pbignLCcpO1xuICAgICAgICBjb25zdCBsYXlvdXRUZXh0U2l6ZVRoaXNab29tID0gdGV4dFNpemUuZXZhbHVhdGUoZmVhdHVyZSwge30sIGNhbm9uaWNhbCk7XG4gICAgICAgIGNvbnN0IGxheW91dFRleHRTaXplID0gc2l6ZXMubGF5b3V0VGV4dFNpemUuZXZhbHVhdGUoZmVhdHVyZSwge30sIGNhbm9uaWNhbCk7XG4gICAgICAgIGNvbnN0IGxheW91dEljb25TaXplID0gc2l6ZXMubGF5b3V0SWNvblNpemUuZXZhbHVhdGUoZmVhdHVyZSwge30sIGNhbm9uaWNhbCk7XG5cbiAgICAgICAgY29uc3Qgc2hhcGVkVGV4dE9yaWVudGF0aW9ucyA9IHtcbiAgICAgICAgICAgIGhvcml6b250YWw6IHt9LFxuICAgICAgICAgICAgdmVydGljYWw6IHVuZGVmaW5lZFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB0ZXh0ID0gZmVhdHVyZS50ZXh0O1xuICAgICAgICBsZXQgdGV4dE9mZnNldDogW251bWJlciwgbnVtYmVyXSA9IFswLCAwXTtcbiAgICAgICAgaWYgKHRleHQpIHtcbiAgICAgICAgICAgIGNvbnN0IHVuZm9ybWF0dGVkVGV4dCA9IHRleHQudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGNvbnN0IHNwYWNpbmcgPSBsYXlvdXQuZ2V0KCd0ZXh0LWxldHRlci1zcGFjaW5nJykuZXZhbHVhdGUoZmVhdHVyZSwge30sIGNhbm9uaWNhbCkgKiBPTkVfRU07XG4gICAgICAgICAgICBjb25zdCBzcGFjaW5nSWZBbGxvd2VkID0gYWxsb3dzTGV0dGVyU3BhY2luZyh1bmZvcm1hdHRlZFRleHQpID8gc3BhY2luZyA6IDA7XG5cbiAgICAgICAgICAgIGNvbnN0IHRleHRBbmNob3IgPSBsYXlvdXQuZ2V0KCd0ZXh0LWFuY2hvcicpLmV2YWx1YXRlKGZlYXR1cmUsIHt9LCBjYW5vbmljYWwpO1xuICAgICAgICAgICAgY29uc3QgdmFyaWFibGVUZXh0QW5jaG9yID0gbGF5b3V0LmdldCgndGV4dC12YXJpYWJsZS1hbmNob3InKTtcblxuICAgICAgICAgICAgaWYgKCF2YXJpYWJsZVRleHRBbmNob3IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByYWRpYWxPZmZzZXQgPSBsYXlvdXQuZ2V0KCd0ZXh0LXJhZGlhbC1vZmZzZXQnKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSwgY2Fub25pY2FsKTtcbiAgICAgICAgICAgICAgICAvLyBMYXllcnMgd2l0aCB2YXJpYWJsZSBhbmNob3JzIHVzZSB0aGUgYHRleHQtcmFkaWFsLW9mZnNldGAgcHJvcGVydHkgYW5kIHRoZSBbeCwgeV0gb2Zmc2V0IHZlY3RvclxuICAgICAgICAgICAgICAgIC8vIGlzIGNhbGN1bGF0ZWQgYXQgcGxhY2VtZW50IHRpbWUgaW5zdGVhZCBvZiBsYXlvdXQgdGltZVxuICAgICAgICAgICAgICAgIGlmIChyYWRpYWxPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHN0eWxlIHNwZWMgc2F5cyBkb24ndCB1c2UgYHRleHQtb2Zmc2V0YCBhbmQgYHRleHQtcmFkaWFsLW9mZnNldGAgdG9nZXRoZXJcbiAgICAgICAgICAgICAgICAgICAgLy8gYnV0IGRvZXNuJ3QgYWN0dWFsbHkgc3BlY2lmeSB3aGF0IGhhcHBlbnMgaWYgeW91IHVzZSBib3RoLiBXZSBnbyB3aXRoIHRoZSByYWRpYWwgb2Zmc2V0LlxuICAgICAgICAgICAgICAgICAgICB0ZXh0T2Zmc2V0ID0gZXZhbHVhdGVWYXJpYWJsZU9mZnNldCh0ZXh0QW5jaG9yLCBbcmFkaWFsT2Zmc2V0ICogT05FX0VNLCBJTlZBTElEX1RFWFRfT0ZGU0VUXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dE9mZnNldCA9IChsYXlvdXQuZ2V0KCd0ZXh0LW9mZnNldCcpLmV2YWx1YXRlKGZlYXR1cmUsIHt9LCBjYW5vbmljYWwpLm1hcCh0ID0+IHQgKiBPTkVfRU0pOiBhbnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHRleHRKdXN0aWZ5ID0gdGV4dEFsb25nTGluZSA/XG4gICAgICAgICAgICAgICAgXCJjZW50ZXJcIiA6XG4gICAgICAgICAgICAgICAgbGF5b3V0LmdldCgndGV4dC1qdXN0aWZ5JykuZXZhbHVhdGUoZmVhdHVyZSwge30sIGNhbm9uaWNhbCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHN5bWJvbFBsYWNlbWVudCA9IGxheW91dC5nZXQoJ3N5bWJvbC1wbGFjZW1lbnQnKTtcbiAgICAgICAgICAgIGNvbnN0IG1heFdpZHRoID0gc3ltYm9sUGxhY2VtZW50ID09PSAncG9pbnQnID9cbiAgICAgICAgICAgICAgICBsYXlvdXQuZ2V0KCd0ZXh0LW1heC13aWR0aCcpLmV2YWx1YXRlKGZlYXR1cmUsIHt9LCBjYW5vbmljYWwpICogT05FX0VNIDpcbiAgICAgICAgICAgICAgICAwO1xuXG4gICAgICAgICAgICBjb25zdCBhZGRWZXJ0aWNhbFNoYXBpbmdGb3JQb2ludExhYmVsSWZOZWVkZWQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGJ1Y2tldC5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50ICYmIGFsbG93c1ZlcnRpY2FsV3JpdGluZ01vZGUodW5mb3JtYXR0ZWRUZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBWZXJ0aWNhbCBQT0kgbGFiZWwgcGxhY2VtZW50IGlzIG1lYW50IHRvIGJlIHVzZWQgZm9yIHNjcmlwdHMgdGhhdCBzdXBwb3J0IHZlcnRpY2FsXG4gICAgICAgICAgICAgICAgICAgIC8vIHdyaXRpbmcgbW9kZSwgdGh1cywgZGVmYXVsdCBsZWZ0IGp1c3RpZmljYXRpb24gaXMgdXNlZC4gSWYgTGF0aW5cbiAgICAgICAgICAgICAgICAgICAgLy8gc2NyaXB0cyB3b3VsZCBuZWVkIHRvIGJlIHN1cHBvcnRlZCwgdGhpcyBzaG91bGQgdGFrZSBpbnRvIGFjY291bnQgb3RoZXIganVzdGlmaWNhdGlvbnMuXG4gICAgICAgICAgICAgICAgICAgIHNoYXBlZFRleHRPcmllbnRhdGlvbnMudmVydGljYWwgPSBzaGFwZVRleHQodGV4dCwgZ2x5cGhNYXAsIGdseXBoUG9zaXRpb25zLCBpbWFnZVBvc2l0aW9ucywgZm9udHN0YWNrLCBtYXhXaWR0aCwgbGluZUhlaWdodCwgdGV4dEFuY2hvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGVmdCcsIHNwYWNpbmdJZkFsbG93ZWQsIHRleHRPZmZzZXQsIFdyaXRpbmdNb2RlLnZlcnRpY2FsLCB0cnVlLCBzeW1ib2xQbGFjZW1lbnQsIGxheW91dFRleHRTaXplLCBsYXlvdXRUZXh0U2l6ZVRoaXNab29tKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAvLyBJZiB0aGlzIGxheWVyIHVzZXMgdGV4dC12YXJpYWJsZS1hbmNob3IsIGdlbmVyYXRlIHNoYXBpbmdzIGZvciBhbGwganVzdGlmaWNhdGlvbiBwb3NzaWJpbGl0aWVzLlxuICAgICAgICAgICAgaWYgKCF0ZXh0QWxvbmdMaW5lICYmIHZhcmlhYmxlVGV4dEFuY2hvcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGp1c3RpZmljYXRpb25zID0gdGV4dEp1c3RpZnkgPT09IFwiYXV0b1wiID9cbiAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVUZXh0QW5jaG9yLm1hcChhID0+IGdldEFuY2hvckp1c3RpZmljYXRpb24oYSkpIDpcbiAgICAgICAgICAgICAgICAgICAgW3RleHRKdXN0aWZ5XTtcblxuICAgICAgICAgICAgICAgIGxldCBzaW5nbGVMaW5lID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBqdXN0aWZpY2F0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBqdXN0aWZpY2F0aW9uOiBUZXh0SnVzdGlmeSA9IGp1c3RpZmljYXRpb25zW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2hhcGVkVGV4dE9yaWVudGF0aW9ucy5ob3Jpem9udGFsW2p1c3RpZmljYXRpb25dKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpbmdsZUxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBzaGFwaW5nIGZvciB0aGUgZmlyc3QganVzdGlmaWNhdGlvbiB3YXMgb25seSBhIHNpbmdsZSBsaW5lLCB3ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FuIHJlLXVzZSBpdCBmb3IgdGhlIG90aGVyIGp1c3RpZmljYXRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFwZWRUZXh0T3JpZW50YXRpb25zLmhvcml6b250YWxbanVzdGlmaWNhdGlvbl0gPSBzaGFwZWRUZXh0T3JpZW50YXRpb25zLmhvcml6b250YWxbMF07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB1c2luZyB0ZXh0LXZhcmlhYmxlLWFuY2hvciBmb3IgdGhlIGxheWVyLCB3ZSB1c2UgYSBjZW50ZXIgYW5jaG9yIGZvciBhbGwgc2hhcGluZ3MgYW5kIGFwcGx5XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgb2Zmc2V0cyBmb3IgdGhlIGFuY2hvciBpbiB0aGUgcGxhY2VtZW50IHN0ZXAuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaGFwaW5nID0gc2hhcGVUZXh0KHRleHQsIGdseXBoTWFwLCBnbHlwaFBvc2l0aW9ucywgaW1hZ2VQb3NpdGlvbnMsIGZvbnRzdGFjaywgbWF4V2lkdGgsIGxpbmVIZWlnaHQsICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdXN0aWZpY2F0aW9uLCBzcGFjaW5nSWZBbGxvd2VkLCB0ZXh0T2Zmc2V0LCBXcml0aW5nTW9kZS5ob3Jpem9udGFsLCBmYWxzZSwgc3ltYm9sUGxhY2VtZW50LCBsYXlvdXRUZXh0U2l6ZSwgbGF5b3V0VGV4dFNpemVUaGlzWm9vbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hhcGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlZFRleHRPcmllbnRhdGlvbnMuaG9yaXpvbnRhbFtqdXN0aWZpY2F0aW9uXSA9IHNoYXBpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luZ2xlTGluZSA9IHNoYXBpbmcucG9zaXRpb25lZExpbmVzLmxlbmd0aCA9PT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGFkZFZlcnRpY2FsU2hhcGluZ0ZvclBvaW50TGFiZWxJZk5lZWRlZCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGV4dEp1c3RpZnkgPT09IFwiYXV0b1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHRKdXN0aWZ5ID0gZ2V0QW5jaG9ySnVzdGlmaWNhdGlvbih0ZXh0QW5jaG9yKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBIb3Jpem9udGFsIHBvaW50IG9yIGxpbmUgbGFiZWwuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2hhcGluZyA9IHNoYXBlVGV4dCh0ZXh0LCBnbHlwaE1hcCwgZ2x5cGhQb3NpdGlvbnMsIGltYWdlUG9zaXRpb25zLCBmb250c3RhY2ssIG1heFdpZHRoLCBsaW5lSGVpZ2h0LCB0ZXh0QW5jaG9yLCB0ZXh0SnVzdGlmeSwgc3BhY2luZ0lmQWxsb3dlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRPZmZzZXQsIFdyaXRpbmdNb2RlLmhvcml6b250YWwsIGZhbHNlLCBzeW1ib2xQbGFjZW1lbnQsIGxheW91dFRleHRTaXplLCBsYXlvdXRUZXh0U2l6ZVRoaXNab29tKTtcbiAgICAgICAgICAgICAgICBpZiAoc2hhcGluZykgc2hhcGVkVGV4dE9yaWVudGF0aW9ucy5ob3Jpem9udGFsW3RleHRKdXN0aWZ5XSA9IHNoYXBpbmc7XG5cbiAgICAgICAgICAgICAgICAvLyBWZXJ0aWNhbCBwb2ludCBsYWJlbCAoaWYgYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCBpcyBlbmFibGVkKS5cbiAgICAgICAgICAgICAgICBhZGRWZXJ0aWNhbFNoYXBpbmdGb3JQb2ludExhYmVsSWZOZWVkZWQoKTtcblxuICAgICAgICAgICAgICAgIC8vIFZlcnRpY2FsaXplZCBsaW5lIGxhYmVsLlxuICAgICAgICAgICAgICAgIGlmIChhbGxvd3NWZXJ0aWNhbFdyaXRpbmdNb2RlKHVuZm9ybWF0dGVkVGV4dCkgJiYgdGV4dEFsb25nTGluZSAmJiBrZWVwVXByaWdodCkge1xuICAgICAgICAgICAgICAgICAgICBzaGFwZWRUZXh0T3JpZW50YXRpb25zLnZlcnRpY2FsID0gc2hhcGVUZXh0KHRleHQsIGdseXBoTWFwLCBnbHlwaFBvc2l0aW9ucywgaW1hZ2VQb3NpdGlvbnMsIGZvbnRzdGFjaywgbWF4V2lkdGgsIGxpbmVIZWlnaHQsIHRleHRBbmNob3IsIHRleHRKdXN0aWZ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNpbmdJZkFsbG93ZWQsIHRleHRPZmZzZXQsIFdyaXRpbmdNb2RlLnZlcnRpY2FsLCBmYWxzZSwgc3ltYm9sUGxhY2VtZW50LCBsYXlvdXRUZXh0U2l6ZSwgbGF5b3V0VGV4dFNpemVUaGlzWm9vbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHNoYXBlZEljb247XG4gICAgICAgIGxldCBpc1NERkljb24gPSBmYWxzZTtcbiAgICAgICAgaWYgKGZlYXR1cmUuaWNvbiAmJiBmZWF0dXJlLmljb24ubmFtZSkge1xuICAgICAgICAgICAgY29uc3QgaW1hZ2UgPSBpbWFnZU1hcFtmZWF0dXJlLmljb24ubmFtZV07XG4gICAgICAgICAgICBpZiAoaW1hZ2UpIHtcbiAgICAgICAgICAgICAgICBzaGFwZWRJY29uID0gc2hhcGVJY29uKFxuICAgICAgICAgICAgICAgICAgICBpbWFnZVBvc2l0aW9uc1tmZWF0dXJlLmljb24ubmFtZV0sXG4gICAgICAgICAgICAgICAgICAgIGxheW91dC5nZXQoJ2ljb24tb2Zmc2V0JykuZXZhbHVhdGUoZmVhdHVyZSwge30sIGNhbm9uaWNhbCksXG4gICAgICAgICAgICAgICAgICAgIGxheW91dC5nZXQoJ2ljb24tYW5jaG9yJykuZXZhbHVhdGUoZmVhdHVyZSwge30sIGNhbm9uaWNhbCkpO1xuICAgICAgICAgICAgICAgIGlzU0RGSWNvbiA9IGltYWdlLnNkZjtcbiAgICAgICAgICAgICAgICBpZiAoYnVja2V0LnNkZkljb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgYnVja2V0LnNkZkljb25zID0gaW1hZ2Uuc2RmO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYnVja2V0LnNkZkljb25zICE9PSBpbWFnZS5zZGYpIHtcbiAgICAgICAgICAgICAgICAgICAgd2Fybk9uY2UoJ1N0eWxlIHNoZWV0IHdhcm5pbmc6IENhbm5vdCBtaXggU0RGIGFuZCBub24tU0RGIGljb25zIGluIG9uZSBidWZmZXInKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGltYWdlLnBpeGVsUmF0aW8gIT09IGJ1Y2tldC5waXhlbFJhdGlvKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1Y2tldC5pY29uc05lZWRMaW5lYXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGF5b3V0LmdldCgnaWNvbi1yb3RhdGUnKS5jb25zdGFudE9yKDEpICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1Y2tldC5pY29uc05lZWRMaW5lYXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNoYXBlZFRleHQgPSBnZXREZWZhdWx0SG9yaXpvbnRhbFNoYXBpbmcoc2hhcGVkVGV4dE9yaWVudGF0aW9ucy5ob3Jpem9udGFsKSB8fCBzaGFwZWRUZXh0T3JpZW50YXRpb25zLnZlcnRpY2FsO1xuICAgICAgICBidWNrZXQuaWNvbnNJblRleHQgPSBzaGFwZWRUZXh0ID8gc2hhcGVkVGV4dC5pY29uc0luVGV4dCA6IGZhbHNlO1xuICAgICAgICBpZiAoc2hhcGVkVGV4dCB8fCBzaGFwZWRJY29uKSB7XG4gICAgICAgICAgICBhZGRGZWF0dXJlKGJ1Y2tldCwgZmVhdHVyZSwgc2hhcGVkVGV4dE9yaWVudGF0aW9ucywgc2hhcGVkSWNvbiwgaW1hZ2VNYXAsIHNpemVzLCBsYXlvdXRUZXh0U2l6ZSwgbGF5b3V0SWNvblNpemUsIHRleHRPZmZzZXQsIGlzU0RGSWNvbiwgY2Fub25pY2FsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaG93Q29sbGlzaW9uQm94ZXMpIHtcbiAgICAgICAgYnVja2V0LmdlbmVyYXRlQ29sbGlzaW9uRGVidWdCdWZmZXJzKCk7XG4gICAgfVxufVxuXG4vLyBDaG9vc2UgdGhlIGp1c3RpZmljYXRpb24gdGhhdCBtYXRjaGVzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIFRleHRBbmNob3JcbmV4cG9ydCBmdW5jdGlvbiBnZXRBbmNob3JKdXN0aWZpY2F0aW9uKGFuY2hvcjogVGV4dEFuY2hvcik6IFRleHRKdXN0aWZ5ICB7XG4gICAgc3dpdGNoIChhbmNob3IpIHtcbiAgICBjYXNlICdyaWdodCc6XG4gICAgY2FzZSAndG9wLXJpZ2h0JzpcbiAgICBjYXNlICdib3R0b20tcmlnaHQnOlxuICAgICAgICByZXR1cm4gJ3JpZ2h0JztcbiAgICBjYXNlICdsZWZ0JzpcbiAgICBjYXNlICd0b3AtbGVmdCc6XG4gICAgY2FzZSAnYm90dG9tLWxlZnQnOlxuICAgICAgICByZXR1cm4gJ2xlZnQnO1xuICAgIH1cbiAgICByZXR1cm4gJ2NlbnRlcic7XG59XG5cbi8qKlxuICogR2l2ZW4gYSBmZWF0dXJlIGFuZCBpdHMgc2hhcGVkIHRleHQgYW5kIGljb24gZGF0YSwgYWRkIGEgJ3N5bWJvbFxuICogaW5zdGFuY2UnIGZvciBlYWNoIF9wb3NzaWJsZV8gcGxhY2VtZW50IG9mIHRoZSBzeW1ib2wgZmVhdHVyZS5cbiAqIChBdCByZW5kZXIgdGltZVBsYWNlU3ltYm9scyNwbGFjZSgpIHNlbGVjdHMgd2hpY2ggb2YgdGhlc2UgaW5zdGFuY2VzIHRvXG4gKiBzaG93IG9yIGhpZGUgYmFzZWQgb24gY29sbGlzaW9ucyB3aXRoIHN5bWJvbHMgaW4gb3RoZXIgbGF5ZXJzLilcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGFkZEZlYXR1cmUoYnVja2V0OiBTeW1ib2xCdWNrZXQsXG4gICAgICAgICAgICAgICAgICAgIGZlYXR1cmU6IFN5bWJvbEZlYXR1cmUsXG4gICAgICAgICAgICAgICAgICAgIHNoYXBlZFRleHRPcmllbnRhdGlvbnM6IGFueSxcbiAgICAgICAgICAgICAgICAgICAgc2hhcGVkSWNvbjogUG9zaXRpb25lZEljb24gfCB2b2lkLFxuICAgICAgICAgICAgICAgICAgICBpbWFnZU1hcDoge1tfOiBzdHJpbmddOiBTdHlsZUltYWdlfSxcbiAgICAgICAgICAgICAgICAgICAgc2l6ZXM6IFNpemVzLFxuICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXh0U2l6ZTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICBsYXlvdXRJY29uU2l6ZTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0T2Zmc2V0OiBbbnVtYmVyLCBudW1iZXJdLFxuICAgICAgICAgICAgICAgICAgICBpc1NERkljb246IGJvb2xlYW4sIGNhbm9uaWNhbDogQ2Fub25pY2FsVGlsZUlEKSB7XG4gICAgLy8gVG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgbGFiZWxzIHRoYXQganVtcCBhcm91bmQgd2hlbiB6b29taW5nIHdlIG5lZWRcbiAgICAvLyB0byB1c2UgYSB0ZXh0LXNpemUgdmFsdWUgdGhhdCBpcyB0aGUgc2FtZSBmb3IgYWxsIHpvb20gbGV2ZWxzLlxuICAgIC8vIGJ1Y2tldCBjYWxjdWxhdGVzIHRleHQtc2l6ZSBhdCBhIGhpZ2ggem9vbSBsZXZlbCBzbyB0aGF0IGFsbCB0aWxlcyBjYW5cbiAgICAvLyB1c2UgdGhlIHNhbWUgdmFsdWUgd2hlbiBjYWxjdWxhdGluZyBhbmNob3IgcG9zaXRpb25zLlxuICAgIGxldCB0ZXh0TWF4U2l6ZSA9IHNpemVzLnRleHRNYXhTaXplLmV2YWx1YXRlKGZlYXR1cmUsIHt9KTtcbiAgICBpZiAodGV4dE1heFNpemUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0ZXh0TWF4U2l6ZSA9IGxheW91dFRleHRTaXplO1xuICAgIH1cbiAgICBjb25zdCBsYXlvdXQgPSBidWNrZXQubGF5ZXJzWzBdLmxheW91dDtcbiAgICBjb25zdCBpY29uT2Zmc2V0ID0gbGF5b3V0LmdldCgnaWNvbi1vZmZzZXQnKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSwgY2Fub25pY2FsKTtcbiAgICBjb25zdCBkZWZhdWx0SG9yaXpvbnRhbFNoYXBpbmcgPSBnZXREZWZhdWx0SG9yaXpvbnRhbFNoYXBpbmcoc2hhcGVkVGV4dE9yaWVudGF0aW9ucy5ob3Jpem9udGFsKTtcbiAgICBjb25zdCBnbHlwaFNpemUgPSAyNCxcbiAgICAgICAgZm9udFNjYWxlID0gbGF5b3V0VGV4dFNpemUgLyBnbHlwaFNpemUsXG4gICAgICAgIHRleHRCb3hTY2FsZSA9IGJ1Y2tldC50aWxlUGl4ZWxSYXRpbyAqIGZvbnRTY2FsZSxcbiAgICAgICAgdGV4dE1heEJveFNjYWxlID0gYnVja2V0LnRpbGVQaXhlbFJhdGlvICogdGV4dE1heFNpemUgLyBnbHlwaFNpemUsXG4gICAgICAgIGljb25Cb3hTY2FsZSA9IGJ1Y2tldC50aWxlUGl4ZWxSYXRpbyAqIGxheW91dEljb25TaXplLFxuICAgICAgICBzeW1ib2xNaW5EaXN0YW5jZSA9IGJ1Y2tldC50aWxlUGl4ZWxSYXRpbyAqIGxheW91dC5nZXQoJ3N5bWJvbC1zcGFjaW5nJyksXG4gICAgICAgIHRleHRQYWRkaW5nID0gbGF5b3V0LmdldCgndGV4dC1wYWRkaW5nJykgKiBidWNrZXQudGlsZVBpeGVsUmF0aW8sXG4gICAgICAgIGljb25QYWRkaW5nID0gbGF5b3V0LmdldCgnaWNvbi1wYWRkaW5nJykgKiBidWNrZXQudGlsZVBpeGVsUmF0aW8sXG4gICAgICAgIHRleHRNYXhBbmdsZSA9IGxheW91dC5nZXQoJ3RleHQtbWF4LWFuZ2xlJykgLyAxODAgKiBNYXRoLlBJLFxuICAgICAgICB0ZXh0QWxvbmdMaW5lID0gbGF5b3V0LmdldCgndGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQnKSA9PT0gJ21hcCcgJiYgbGF5b3V0LmdldCgnc3ltYm9sLXBsYWNlbWVudCcpICE9PSAncG9pbnQnLFxuICAgICAgICBpY29uQWxvbmdMaW5lID0gbGF5b3V0LmdldCgnaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQnKSA9PT0gJ21hcCcgJiYgbGF5b3V0LmdldCgnc3ltYm9sLXBsYWNlbWVudCcpICE9PSAncG9pbnQnLFxuICAgICAgICBzeW1ib2xQbGFjZW1lbnQgPSBsYXlvdXQuZ2V0KCdzeW1ib2wtcGxhY2VtZW50JyksXG4gICAgICAgIHRleHRSZXBlYXREaXN0YW5jZSA9IHN5bWJvbE1pbkRpc3RhbmNlIC8gMjtcblxuICAgIGNvbnN0IGljb25UZXh0Rml0ID0gbGF5b3V0LmdldCgnaWNvbi10ZXh0LWZpdCcpO1xuICAgIGxldCB2ZXJ0aWNhbGx5U2hhcGVkSWNvbjtcbiAgICAvLyBBZGp1c3Qgc2hhcGVkIGljb24gc2l6ZSB3aGVuIGljb24tdGV4dC1maXQgaXMgdXNlZC5cbiAgICBpZiAoc2hhcGVkSWNvbiAmJiBpY29uVGV4dEZpdCAhPT0gJ25vbmUnKSB7XG4gICAgICAgIGlmIChidWNrZXQuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCAmJiBzaGFwZWRUZXh0T3JpZW50YXRpb25zLnZlcnRpY2FsKSB7XG4gICAgICAgICAgICB2ZXJ0aWNhbGx5U2hhcGVkSWNvbiA9IGZpdEljb25Ub1RleHQoc2hhcGVkSWNvbiwgc2hhcGVkVGV4dE9yaWVudGF0aW9ucy52ZXJ0aWNhbCwgaWNvblRleHRGaXQsXG4gICAgICAgICAgICAgICAgbGF5b3V0LmdldCgnaWNvbi10ZXh0LWZpdC1wYWRkaW5nJyksIGljb25PZmZzZXQsIGZvbnRTY2FsZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlZmF1bHRIb3Jpem9udGFsU2hhcGluZykge1xuICAgICAgICAgICAgc2hhcGVkSWNvbiA9IGZpdEljb25Ub1RleHQoc2hhcGVkSWNvbiwgZGVmYXVsdEhvcml6b250YWxTaGFwaW5nLCBpY29uVGV4dEZpdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dC5nZXQoJ2ljb24tdGV4dC1maXQtcGFkZGluZycpLCBpY29uT2Zmc2V0LCBmb250U2NhbGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYWRkU3ltYm9sQXRBbmNob3IgPSAobGluZSwgYW5jaG9yKSA9PiB7XG4gICAgICAgIGlmIChhbmNob3IueCA8IDAgfHwgYW5jaG9yLnggPj0gRVhURU5UIHx8IGFuY2hvci55IDwgMCB8fCBhbmNob3IueSA+PSBFWFRFTlQpIHtcbiAgICAgICAgICAgIC8vIFN5bWJvbCBsYXllcnMgYXJlIGRyYXduIGFjcm9zcyB0aWxlIGJvdW5kYXJpZXMsIFdlIGZpbHRlciBvdXQgc3ltYm9sc1xuICAgICAgICAgICAgLy8gb3V0c2lkZSBvdXIgdGlsZSBib3VuZGFyaWVzICh3aGljaCBtYXkgYmUgaW5jbHVkZWQgaW4gdmVjdG9yIHRpbGUgYnVmZmVycylcbiAgICAgICAgICAgIC8vIHRvIHByZXZlbnQgZG91YmxlLWRyYXdpbmcgc3ltYm9scy5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGFkZFN5bWJvbChidWNrZXQsIGFuY2hvciwgbGluZSwgc2hhcGVkVGV4dE9yaWVudGF0aW9ucywgc2hhcGVkSWNvbiwgaW1hZ2VNYXAsIHZlcnRpY2FsbHlTaGFwZWRJY29uLCBidWNrZXQubGF5ZXJzWzBdLFxuICAgICAgICAgICAgYnVja2V0LmNvbGxpc2lvbkJveEFycmF5LCBmZWF0dXJlLmluZGV4LCBmZWF0dXJlLnNvdXJjZUxheWVySW5kZXgsIGJ1Y2tldC5pbmRleCxcbiAgICAgICAgICAgIHRleHRCb3hTY2FsZSwgdGV4dFBhZGRpbmcsIHRleHRBbG9uZ0xpbmUsIHRleHRPZmZzZXQsXG4gICAgICAgICAgICBpY29uQm94U2NhbGUsIGljb25QYWRkaW5nLCBpY29uQWxvbmdMaW5lLCBpY29uT2Zmc2V0LFxuICAgICAgICAgICAgZmVhdHVyZSwgc2l6ZXMsIGlzU0RGSWNvbiwgY2Fub25pY2FsLCBsYXlvdXRUZXh0U2l6ZSk7XG4gICAgfTtcblxuICAgIGlmIChzeW1ib2xQbGFjZW1lbnQgPT09ICdsaW5lJykge1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgY2xpcExpbmUoZmVhdHVyZS5nZW9tZXRyeSwgMCwgMCwgRVhURU5ULCBFWFRFTlQpKSB7XG4gICAgICAgICAgICBjb25zdCBhbmNob3JzID0gZ2V0QW5jaG9ycyhcbiAgICAgICAgICAgICAgICBsaW5lLFxuICAgICAgICAgICAgICAgIHN5bWJvbE1pbkRpc3RhbmNlLFxuICAgICAgICAgICAgICAgIHRleHRNYXhBbmdsZSxcbiAgICAgICAgICAgICAgICBzaGFwZWRUZXh0T3JpZW50YXRpb25zLnZlcnRpY2FsIHx8IGRlZmF1bHRIb3Jpem9udGFsU2hhcGluZyxcbiAgICAgICAgICAgICAgICBzaGFwZWRJY29uLFxuICAgICAgICAgICAgICAgIGdseXBoU2l6ZSxcbiAgICAgICAgICAgICAgICB0ZXh0TWF4Qm94U2NhbGUsXG4gICAgICAgICAgICAgICAgYnVja2V0Lm92ZXJzY2FsaW5nLFxuICAgICAgICAgICAgICAgIEVYVEVOVFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYW5jaG9yIG9mIGFuY2hvcnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzaGFwZWRUZXh0ID0gZGVmYXVsdEhvcml6b250YWxTaGFwaW5nO1xuICAgICAgICAgICAgICAgIGlmICghc2hhcGVkVGV4dCB8fCAhYW5jaG9ySXNUb29DbG9zZShidWNrZXQsIHNoYXBlZFRleHQudGV4dCwgdGV4dFJlcGVhdERpc3RhbmNlLCBhbmNob3IpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZFN5bWJvbEF0QW5jaG9yKGxpbmUsIGFuY2hvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChzeW1ib2xQbGFjZW1lbnQgPT09ICdsaW5lLWNlbnRlcicpIHtcbiAgICAgICAgLy8gTm8gY2xpcHBpbmcsIG11bHRpcGxlIGxpbmVzIHBlciBmZWF0dXJlIGFyZSBhbGxvd2VkXG4gICAgICAgIC8vIFwibGluZXNcIiB3aXRoIG9ubHkgb25lIHBvaW50IGFyZSBpZ25vcmVkIGFzIGluIGNsaXBMaW5lc1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgZmVhdHVyZS5nZW9tZXRyeSkge1xuICAgICAgICAgICAgaWYgKGxpbmUubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFuY2hvciA9IGdldENlbnRlckFuY2hvcihcbiAgICAgICAgICAgICAgICAgICAgbGluZSxcbiAgICAgICAgICAgICAgICAgICAgdGV4dE1heEFuZ2xlLFxuICAgICAgICAgICAgICAgICAgICBzaGFwZWRUZXh0T3JpZW50YXRpb25zLnZlcnRpY2FsIHx8IGRlZmF1bHRIb3Jpem9udGFsU2hhcGluZyxcbiAgICAgICAgICAgICAgICAgICAgc2hhcGVkSWNvbixcbiAgICAgICAgICAgICAgICAgICAgZ2x5cGhTaXplLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0TWF4Qm94U2NhbGUpO1xuICAgICAgICAgICAgICAgIGlmIChhbmNob3IpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkU3ltYm9sQXRBbmNob3IobGluZSwgYW5jaG9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGZlYXR1cmUudHlwZSA9PT0gJ1BvbHlnb24nKSB7XG4gICAgICAgIGZvciAoY29uc3QgcG9seWdvbiBvZiBjbGFzc2lmeVJpbmdzKGZlYXR1cmUuZ2VvbWV0cnksIDApKSB7XG4gICAgICAgICAgICAvLyAxNiBoZXJlIHJlcHJlc2VudHMgMiBwaXhlbHNcbiAgICAgICAgICAgIGNvbnN0IHBvaSA9IGZpbmRQb2xlT2ZJbmFjY2Vzc2liaWxpdHkocG9seWdvbiwgMTYpO1xuICAgICAgICAgICAgYWRkU3ltYm9sQXRBbmNob3IocG9seWdvblswXSwgbmV3IEFuY2hvcihwb2kueCwgcG9pLnksIDApKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZmVhdHVyZS50eXBlID09PSAnTGluZVN0cmluZycpIHtcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzM4MDhcbiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGZlYXR1cmUuZ2VvbWV0cnkpIHtcbiAgICAgICAgICAgIGFkZFN5bWJvbEF0QW5jaG9yKGxpbmUsIG5ldyBBbmNob3IobGluZVswXS54LCBsaW5lWzBdLnksIDApKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZmVhdHVyZS50eXBlID09PSAnUG9pbnQnKSB7XG4gICAgICAgIGZvciAoY29uc3QgcG9pbnRzIG9mIGZlYXR1cmUuZ2VvbWV0cnkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcG9pbnQgb2YgcG9pbnRzKSB7XG4gICAgICAgICAgICAgICAgYWRkU3ltYm9sQXRBbmNob3IoW3BvaW50XSwgbmV3IEFuY2hvcihwb2ludC54LCBwb2ludC55LCAwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNvbnN0IE1BWF9HTFlQSF9JQ09OX1NJWkUgPSAyNTU7XG5jb25zdCBNQVhfUEFDS0VEX1NJWkUgPSBNQVhfR0xZUEhfSUNPTl9TSVpFICogU0laRV9QQUNLX0ZBQ1RPUjtcbmV4cG9ydCB7TUFYX1BBQ0tFRF9TSVpFfTtcblxuZnVuY3Rpb24gYWRkVGV4dFZlcnRpY2VzKGJ1Y2tldDogU3ltYm9sQnVja2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvcjogUG9pbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGVkVGV4dDogU2hhcGluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZU1hcDoge1tfOiBzdHJpbmddOiBTdHlsZUltYWdlfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcjogU3ltYm9sU3R5bGVMYXllcixcbiAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxvbmdMaW5lOiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmU6IFN5bWJvbEZlYXR1cmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgdGV4dE9mZnNldDogW251bWJlciwgbnVtYmVyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lQXJyYXk6IHtsaW5lU3RhcnRJbmRleDogbnVtYmVyLCBsaW5lTGVuZ3RoOiBudW1iZXJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRpbmdNb2RlOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50VHlwZXM6IEFycmF5PCd2ZXJ0aWNhbCcgfCAnY2VudGVyJyB8ICdsZWZ0JyB8ICdyaWdodCc+LFxuICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlZFRleHRTeW1ib2xJbmRpY2VzOiB7W186IHN0cmluZ106IG51bWJlcn0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VkSWNvbkluZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZXM6IFNpemVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgIGNhbm9uaWNhbDogQ2Fub25pY2FsVGlsZUlEKSB7XG4gICAgY29uc3QgZ2x5cGhRdWFkcyA9IGdldEdseXBoUXVhZHMoYW5jaG9yLCBzaGFwZWRUZXh0LCB0ZXh0T2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLCB0ZXh0QWxvbmdMaW5lLCBmZWF0dXJlLCBpbWFnZU1hcCwgYnVja2V0LmFsbG93VmVydGljYWxQbGFjZW1lbnQpO1xuXG4gICAgY29uc3Qgc2l6ZURhdGEgPSBidWNrZXQudGV4dFNpemVEYXRhO1xuICAgIGxldCB0ZXh0U2l6ZURhdGEgPSBudWxsO1xuXG4gICAgaWYgKHNpemVEYXRhLmtpbmQgPT09ICdzb3VyY2UnKSB7XG4gICAgICAgIHRleHRTaXplRGF0YSA9IFtcbiAgICAgICAgICAgIFNJWkVfUEFDS19GQUNUT1IgKiBsYXllci5sYXlvdXQuZ2V0KCd0ZXh0LXNpemUnKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSlcbiAgICAgICAgXTtcbiAgICAgICAgaWYgKHRleHRTaXplRGF0YVswXSA+IE1BWF9QQUNLRURfU0laRSkge1xuICAgICAgICAgICAgd2Fybk9uY2UoYCR7YnVja2V0LmxheWVySWRzWzBdfTogVmFsdWUgZm9yIFwidGV4dC1zaXplXCIgaXMgPj0gJHtNQVhfR0xZUEhfSUNPTl9TSVpFfS4gUmVkdWNlIHlvdXIgXCJ0ZXh0LXNpemVcIi5gKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc2l6ZURhdGEua2luZCA9PT0gJ2NvbXBvc2l0ZScpIHtcbiAgICAgICAgdGV4dFNpemVEYXRhID0gW1xuICAgICAgICAgICAgU0laRV9QQUNLX0ZBQ1RPUiAqIHNpemVzLmNvbXBvc2l0ZVRleHRTaXplc1swXS5ldmFsdWF0ZShmZWF0dXJlLCB7fSwgY2Fub25pY2FsKSxcbiAgICAgICAgICAgIFNJWkVfUEFDS19GQUNUT1IgKiBzaXplcy5jb21wb3NpdGVUZXh0U2l6ZXNbMV0uZXZhbHVhdGUoZmVhdHVyZSwge30sIGNhbm9uaWNhbClcbiAgICAgICAgXTtcbiAgICAgICAgaWYgKHRleHRTaXplRGF0YVswXSA+IE1BWF9QQUNLRURfU0laRSB8fCB0ZXh0U2l6ZURhdGFbMV0gPiBNQVhfUEFDS0VEX1NJWkUpIHtcbiAgICAgICAgICAgIHdhcm5PbmNlKGAke2J1Y2tldC5sYXllcklkc1swXX06IFZhbHVlIGZvciBcInRleHQtc2l6ZVwiIGlzID49ICR7TUFYX0dMWVBIX0lDT05fU0laRX0uIFJlZHVjZSB5b3VyIFwidGV4dC1zaXplXCIuYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBidWNrZXQuYWRkU3ltYm9scyhcbiAgICAgICAgYnVja2V0LnRleHQsXG4gICAgICAgIGdseXBoUXVhZHMsXG4gICAgICAgIHRleHRTaXplRGF0YSxcbiAgICAgICAgdGV4dE9mZnNldCxcbiAgICAgICAgdGV4dEFsb25nTGluZSxcbiAgICAgICAgZmVhdHVyZSxcbiAgICAgICAgd3JpdGluZ01vZGUsXG4gICAgICAgIGFuY2hvcixcbiAgICAgICAgbGluZUFycmF5LmxpbmVTdGFydEluZGV4LFxuICAgICAgICBsaW5lQXJyYXkubGluZUxlbmd0aCxcbiAgICAgICAgcGxhY2VkSWNvbkluZGV4LFxuICAgICAgICBjYW5vbmljYWwpO1xuXG4gICAgLy8gVGhlIHBsYWNlZFN5bWJvbEFycmF5IGlzIHVzZWQgYXQgcmVuZGVyIHRpbWUgaW4gZHJhd1RpbGVTeW1ib2xzXG4gICAgLy8gVGhlc2UgaW5kaWNlcyBhbGxvdyBhY2Nlc3MgdG8gdGhlIGFycmF5IGF0IGNvbGxpc2lvbiBkZXRlY3Rpb24gdGltZVxuICAgIGZvciAoY29uc3QgcGxhY2VtZW50VHlwZSBvZiBwbGFjZW1lbnRUeXBlcykge1xuICAgICAgICBwbGFjZWRUZXh0U3ltYm9sSW5kaWNlc1twbGFjZW1lbnRUeXBlXSA9IGJ1Y2tldC50ZXh0LnBsYWNlZFN5bWJvbEFycmF5Lmxlbmd0aCAtIDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdseXBoUXVhZHMubGVuZ3RoICogNDtcbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdEhvcml6b250YWxTaGFwaW5nKGhvcml6b250YWxTaGFwaW5nOiB7W186IFRleHRKdXN0aWZ5XTogU2hhcGluZ30pOiBTaGFwaW5nIHwgbnVsbCB7XG4gICAgLy8gV2UgZG9uJ3QgY2FyZSB3aGljaCBzaGFwaW5nIHdlIGdldCBiZWNhdXNlIHRoaXMgaXMgdXNlZCBmb3IgY29sbGlzaW9uIHB1cnBvc2VzXG4gICAgLy8gYW5kIGFsbCB0aGUganVzdGlmaWNhdGlvbnMgaGF2ZSB0aGUgc2FtZSBjb2xsaXNpb24gYm94XG4gICAgZm9yIChjb25zdCBqdXN0aWZpY2F0aW9uOiBhbnkgaW4gaG9yaXpvbnRhbFNoYXBpbmcpIHtcbiAgICAgICAgcmV0dXJuIGhvcml6b250YWxTaGFwaW5nW2p1c3RpZmljYXRpb25dO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBBZGQgYSBzaW5nbGUgbGFiZWwgJiBpY29uIHBsYWNlbWVudC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhZGRTeW1ib2woYnVja2V0OiBTeW1ib2xCdWNrZXQsXG4gICAgICAgICAgICAgICAgICAgYW5jaG9yOiBBbmNob3IsXG4gICAgICAgICAgICAgICAgICAgbGluZTogQXJyYXk8UG9pbnQ+LFxuICAgICAgICAgICAgICAgICAgIHNoYXBlZFRleHRPcmllbnRhdGlvbnM6IGFueSxcbiAgICAgICAgICAgICAgICAgICBzaGFwZWRJY29uOiBQb3NpdGlvbmVkSWNvbiB8IHZvaWQsXG4gICAgICAgICAgICAgICAgICAgaW1hZ2VNYXA6IHtbXzogc3RyaW5nXTogU3R5bGVJbWFnZX0sXG4gICAgICAgICAgICAgICAgICAgdmVydGljYWxseVNoYXBlZEljb246IFBvc2l0aW9uZWRJY29uIHwgdm9pZCxcbiAgICAgICAgICAgICAgICAgICBsYXllcjogU3ltYm9sU3R5bGVMYXllcixcbiAgICAgICAgICAgICAgICAgICBjb2xsaXNpb25Cb3hBcnJheTogQ29sbGlzaW9uQm94QXJyYXksXG4gICAgICAgICAgICAgICAgICAgZmVhdHVyZUluZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgc291cmNlTGF5ZXJJbmRleDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgIGJ1Y2tldEluZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgdGV4dEJveFNjYWxlOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgdGV4dFBhZGRpbmc6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICB0ZXh0QWxvbmdMaW5lOiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgIHRleHRPZmZzZXQ6IFtudW1iZXIsIG51bWJlcl0sXG4gICAgICAgICAgICAgICAgICAgaWNvbkJveFNjYWxlOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgaWNvblBhZGRpbmc6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICBpY29uQWxvbmdMaW5lOiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgIGljb25PZmZzZXQ6IFtudW1iZXIsIG51bWJlcl0sXG4gICAgICAgICAgICAgICAgICAgZmVhdHVyZTogU3ltYm9sRmVhdHVyZSxcbiAgICAgICAgICAgICAgICAgICBzaXplczogU2l6ZXMsXG4gICAgICAgICAgICAgICAgICAgaXNTREZJY29uOiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgIGNhbm9uaWNhbDogQ2Fub25pY2FsVGlsZUlELFxuICAgICAgICAgICAgICAgICAgIGxheW91dFRleHRTaXplOiBudW1iZXIpIHtcbiAgICBjb25zdCBsaW5lQXJyYXkgPSBidWNrZXQuYWRkVG9MaW5lVmVydGV4QXJyYXkoYW5jaG9yLCBsaW5lKTtcblxuICAgIGxldCB0ZXh0Q29sbGlzaW9uRmVhdHVyZSwgaWNvbkNvbGxpc2lvbkZlYXR1cmUsIHZlcnRpY2FsVGV4dENvbGxpc2lvbkZlYXR1cmUsIHZlcnRpY2FsSWNvbkNvbGxpc2lvbkZlYXR1cmU7XG5cbiAgICBsZXQgbnVtSWNvblZlcnRpY2VzID0gMDtcbiAgICBsZXQgbnVtVmVydGljYWxJY29uVmVydGljZXMgPSAwO1xuICAgIGxldCBudW1Ib3Jpem9udGFsR2x5cGhWZXJ0aWNlcyA9IDA7XG4gICAgbGV0IG51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcyA9IDA7XG4gICAgbGV0IHBsYWNlZEljb25TeW1ib2xJbmRleCA9IC0xO1xuICAgIGxldCB2ZXJ0aWNhbFBsYWNlZEljb25TeW1ib2xJbmRleCA9IC0xO1xuICAgIGNvbnN0IHBsYWNlZFRleHRTeW1ib2xJbmRpY2VzID0ge307XG4gICAgbGV0IGtleSA9IG11cm11cjMoJycpO1xuXG4gICAgbGV0IHRleHRPZmZzZXQwID0gMDtcbiAgICBsZXQgdGV4dE9mZnNldDEgPSAwO1xuICAgIGlmIChsYXllci5fdW5ldmFsdWF0ZWRMYXlvdXQuZ2V0VmFsdWUoJ3RleHQtcmFkaWFsLW9mZnNldCcpID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgW3RleHRPZmZzZXQwLCB0ZXh0T2Zmc2V0MV0gPSAobGF5ZXIubGF5b3V0LmdldCgndGV4dC1vZmZzZXQnKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSwgY2Fub25pY2FsKS5tYXAodCA9PiB0ICogT05FX0VNKTogYW55KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0ZXh0T2Zmc2V0MCA9IGxheWVyLmxheW91dC5nZXQoJ3RleHQtcmFkaWFsLW9mZnNldCcpLmV2YWx1YXRlKGZlYXR1cmUsIHt9LCBjYW5vbmljYWwpICogT05FX0VNO1xuICAgICAgICB0ZXh0T2Zmc2V0MSA9IElOVkFMSURfVEVYVF9PRkZTRVQ7XG4gICAgfVxuXG4gICAgaWYgKGJ1Y2tldC5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50ICYmIHNoYXBlZFRleHRPcmllbnRhdGlvbnMudmVydGljYWwpIHtcbiAgICAgICAgY29uc3QgdGV4dFJvdGF0aW9uID0gbGF5ZXIubGF5b3V0LmdldCgndGV4dC1yb3RhdGUnKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSwgY2Fub25pY2FsKTtcbiAgICAgICAgY29uc3QgdmVydGljYWxUZXh0Um90YXRpb24gPSB0ZXh0Um90YXRpb24gKyA5MC4wO1xuICAgICAgICBjb25zdCB2ZXJ0aWNhbFNoYXBpbmcgPSBzaGFwZWRUZXh0T3JpZW50YXRpb25zLnZlcnRpY2FsO1xuICAgICAgICB2ZXJ0aWNhbFRleHRDb2xsaXNpb25GZWF0dXJlID0gbmV3IENvbGxpc2lvbkZlYXR1cmUoY29sbGlzaW9uQm94QXJyYXksIGFuY2hvciwgZmVhdHVyZUluZGV4LCBzb3VyY2VMYXllckluZGV4LCBidWNrZXRJbmRleCwgdmVydGljYWxTaGFwaW5nLCB0ZXh0Qm94U2NhbGUsIHRleHRQYWRkaW5nLCB0ZXh0QWxvbmdMaW5lLCB2ZXJ0aWNhbFRleHRSb3RhdGlvbik7XG5cbiAgICAgICAgaWYgKHZlcnRpY2FsbHlTaGFwZWRJY29uKSB7XG4gICAgICAgICAgICB2ZXJ0aWNhbEljb25Db2xsaXNpb25GZWF0dXJlID0gbmV3IENvbGxpc2lvbkZlYXR1cmUoY29sbGlzaW9uQm94QXJyYXksIGFuY2hvciwgZmVhdHVyZUluZGV4LCBzb3VyY2VMYXllckluZGV4LCBidWNrZXRJbmRleCwgdmVydGljYWxseVNoYXBlZEljb24sIGljb25Cb3hTY2FsZSwgaWNvblBhZGRpbmcsIHRleHRBbG9uZ0xpbmUsIHZlcnRpY2FsVGV4dFJvdGF0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vUGxhY2UgaWNvbiBmaXJzdCwgc28gdGV4dCBjYW4gaGF2ZSBhIHJlZmVyZW5jZSB0byBpdHMgaW5kZXggaW4gdGhlIHBsYWNlZCBzeW1ib2wgYXJyYXkuXG4gICAgLy9UZXh0IHN5bWJvbHMgY2FuIGxhemlseSBzaGlmdCBhdCByZW5kZXItdGltZSBiZWNhdXNlIG9mIHZhcmlhYmxlIGFuY2hvciBwbGFjZW1lbnQuXG4gICAgLy9JZiB0aGUgc3R5bGUgc3BlY2lmaWVzIGFuIGBpY29uLXRleHQtZml0YCB0aGVuIHRoZSBpY29uIHdvdWxkIGhhdmUgdG8gc2hpZnQgYWxvbmcgd2l0aCBpdC5cbiAgICAvLyBGb3IgbW9yZSBpbmZvIGNoZWNrIGB1cGRhdGVWYXJpYWJsZUFuY2hvcnNgIGluIGBkcmF3X3N5bWJvbC5qc2AgLlxuICAgIGlmIChzaGFwZWRJY29uKSB7XG4gICAgICAgIGNvbnN0IGljb25Sb3RhdGUgPSBsYXllci5sYXlvdXQuZ2V0KCdpY29uLXJvdGF0ZScpLmV2YWx1YXRlKGZlYXR1cmUsIHt9KTtcbiAgICAgICAgY29uc3QgaGFzSWNvblRleHRGaXQgPSBsYXllci5sYXlvdXQuZ2V0KCdpY29uLXRleHQtZml0JykgIT09ICdub25lJztcbiAgICAgICAgY29uc3QgaWNvblF1YWRzID0gZ2V0SWNvblF1YWRzKHNoYXBlZEljb24sIGljb25Sb3RhdGUsIGlzU0RGSWNvbiwgaGFzSWNvblRleHRGaXQpO1xuICAgICAgICBjb25zdCB2ZXJ0aWNhbEljb25RdWFkcyA9IHZlcnRpY2FsbHlTaGFwZWRJY29uID8gZ2V0SWNvblF1YWRzKHZlcnRpY2FsbHlTaGFwZWRJY29uLCBpY29uUm90YXRlLCBpc1NERkljb24sIGhhc0ljb25UZXh0Rml0KSA6IHVuZGVmaW5lZDtcbiAgICAgICAgaWNvbkNvbGxpc2lvbkZlYXR1cmUgPSBuZXcgQ29sbGlzaW9uRmVhdHVyZShjb2xsaXNpb25Cb3hBcnJheSwgYW5jaG9yLCBmZWF0dXJlSW5kZXgsIHNvdXJjZUxheWVySW5kZXgsIGJ1Y2tldEluZGV4LCBzaGFwZWRJY29uLCBpY29uQm94U2NhbGUsIGljb25QYWRkaW5nLCAvKmFsaWduIGJveGVzIHRvIGxpbmUqL2ZhbHNlLCBpY29uUm90YXRlKTtcblxuICAgICAgICBudW1JY29uVmVydGljZXMgPSBpY29uUXVhZHMubGVuZ3RoICogNDtcblxuICAgICAgICBjb25zdCBzaXplRGF0YSA9IGJ1Y2tldC5pY29uU2l6ZURhdGE7XG4gICAgICAgIGxldCBpY29uU2l6ZURhdGEgPSBudWxsO1xuXG4gICAgICAgIGlmIChzaXplRGF0YS5raW5kID09PSAnc291cmNlJykge1xuICAgICAgICAgICAgaWNvblNpemVEYXRhID0gW1xuICAgICAgICAgICAgICAgIFNJWkVfUEFDS19GQUNUT1IgKiBsYXllci5sYXlvdXQuZ2V0KCdpY29uLXNpemUnKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSlcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBpZiAoaWNvblNpemVEYXRhWzBdID4gTUFYX1BBQ0tFRF9TSVpFKSB7XG4gICAgICAgICAgICAgICAgd2Fybk9uY2UoYCR7YnVja2V0LmxheWVySWRzWzBdfTogVmFsdWUgZm9yIFwiaWNvbi1zaXplXCIgaXMgPj0gJHtNQVhfR0xZUEhfSUNPTl9TSVpFfS4gUmVkdWNlIHlvdXIgXCJpY29uLXNpemVcIi5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChzaXplRGF0YS5raW5kID09PSAnY29tcG9zaXRlJykge1xuICAgICAgICAgICAgaWNvblNpemVEYXRhID0gW1xuICAgICAgICAgICAgICAgIFNJWkVfUEFDS19GQUNUT1IgKiBzaXplcy5jb21wb3NpdGVJY29uU2l6ZXNbMF0uZXZhbHVhdGUoZmVhdHVyZSwge30sIGNhbm9uaWNhbCksXG4gICAgICAgICAgICAgICAgU0laRV9QQUNLX0ZBQ1RPUiAqIHNpemVzLmNvbXBvc2l0ZUljb25TaXplc1sxXS5ldmFsdWF0ZShmZWF0dXJlLCB7fSwgY2Fub25pY2FsKVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGlmIChpY29uU2l6ZURhdGFbMF0gPiBNQVhfUEFDS0VEX1NJWkUgfHwgaWNvblNpemVEYXRhWzFdID4gTUFYX1BBQ0tFRF9TSVpFKSB7XG4gICAgICAgICAgICAgICAgd2Fybk9uY2UoYCR7YnVja2V0LmxheWVySWRzWzBdfTogVmFsdWUgZm9yIFwiaWNvbi1zaXplXCIgaXMgPj0gJHtNQVhfR0xZUEhfSUNPTl9TSVpFfS4gUmVkdWNlIHlvdXIgXCJpY29uLXNpemVcIi5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJ1Y2tldC5hZGRTeW1ib2xzKFxuICAgICAgICAgICAgYnVja2V0Lmljb24sXG4gICAgICAgICAgICBpY29uUXVhZHMsXG4gICAgICAgICAgICBpY29uU2l6ZURhdGEsXG4gICAgICAgICAgICBpY29uT2Zmc2V0LFxuICAgICAgICAgICAgaWNvbkFsb25nTGluZSxcbiAgICAgICAgICAgIGZlYXR1cmUsXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgIGFuY2hvcixcbiAgICAgICAgICAgIGxpbmVBcnJheS5saW5lU3RhcnRJbmRleCxcbiAgICAgICAgICAgIGxpbmVBcnJheS5saW5lTGVuZ3RoLFxuICAgICAgICAgICAgLy8gVGhlIGljb24gaXRzZWxmIGRvZXMgbm90IGhhdmUgYW4gYXNzb2NpYXRlZCBzeW1ib2wgc2luY2UgdGhlIHRleHQgaXNudCBwbGFjZWQgeWV0XG4gICAgICAgICAgICAtMSwgY2Fub25pY2FsKTtcblxuICAgICAgICBwbGFjZWRJY29uU3ltYm9sSW5kZXggPSBidWNrZXQuaWNvbi5wbGFjZWRTeW1ib2xBcnJheS5sZW5ndGggLSAxO1xuXG4gICAgICAgIGlmICh2ZXJ0aWNhbEljb25RdWFkcykge1xuICAgICAgICAgICAgbnVtVmVydGljYWxJY29uVmVydGljZXMgPSB2ZXJ0aWNhbEljb25RdWFkcy5sZW5ndGggKiA0O1xuXG4gICAgICAgICAgICBidWNrZXQuYWRkU3ltYm9scyhcbiAgICAgICAgICAgICAgICBidWNrZXQuaWNvbixcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbEljb25RdWFkcyxcbiAgICAgICAgICAgICAgICBpY29uU2l6ZURhdGEsXG4gICAgICAgICAgICAgICAgaWNvbk9mZnNldCxcbiAgICAgICAgICAgICAgICBpY29uQWxvbmdMaW5lLFxuICAgICAgICAgICAgICAgIGZlYXR1cmUsXG4gICAgICAgICAgICAgICAgV3JpdGluZ01vZGUudmVydGljYWwsXG4gICAgICAgICAgICAgICAgYW5jaG9yLFxuICAgICAgICAgICAgICAgIGxpbmVBcnJheS5saW5lU3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICBsaW5lQXJyYXkubGluZUxlbmd0aCxcbiAgICAgICAgICAgICAgICAvLyBUaGUgaWNvbiBpdHNlbGYgZG9lcyBub3QgaGF2ZSBhbiBhc3NvY2lhdGVkIHN5bWJvbCBzaW5jZSB0aGUgdGV4dCBpc250IHBsYWNlZCB5ZXRcbiAgICAgICAgICAgICAgICAtMSwgY2Fub25pY2FsKTtcblxuICAgICAgICAgICAgdmVydGljYWxQbGFjZWRJY29uU3ltYm9sSW5kZXggPSBidWNrZXQuaWNvbi5wbGFjZWRTeW1ib2xBcnJheS5sZW5ndGggLSAxO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBqdXN0aWZpY2F0aW9uOiBhbnkgaW4gc2hhcGVkVGV4dE9yaWVudGF0aW9ucy5ob3Jpem9udGFsKSB7XG4gICAgICAgIGNvbnN0IHNoYXBpbmcgPSBzaGFwZWRUZXh0T3JpZW50YXRpb25zLmhvcml6b250YWxbanVzdGlmaWNhdGlvbl07XG5cbiAgICAgICAgaWYgKCF0ZXh0Q29sbGlzaW9uRmVhdHVyZSkge1xuICAgICAgICAgICAga2V5ID0gbXVybXVyMyhzaGFwaW5nLnRleHQpO1xuICAgICAgICAgICAgY29uc3QgdGV4dFJvdGF0ZSA9IGxheWVyLmxheW91dC5nZXQoJ3RleHQtcm90YXRlJykuZXZhbHVhdGUoZmVhdHVyZSwge30sIGNhbm9uaWNhbCk7XG4gICAgICAgICAgICAvLyBBcyBhIGNvbGxpc2lvbiBhcHByb3hpbWF0aW9uLCB3ZSBjYW4gdXNlIGVpdGhlciB0aGUgdmVydGljYWwgb3IgYW55IG9mIHRoZSBob3Jpem9udGFsIHZlcnNpb25zIG9mIHRoZSBmZWF0dXJlXG4gICAgICAgICAgICAvLyBXZSdyZSBjb3VudGluZyBvbiBhbGwgdmVyc2lvbnMgaGF2aW5nIHNpbWlsYXIgZGltZW5zaW9uc1xuICAgICAgICAgICAgdGV4dENvbGxpc2lvbkZlYXR1cmUgPSBuZXcgQ29sbGlzaW9uRmVhdHVyZShjb2xsaXNpb25Cb3hBcnJheSwgYW5jaG9yLCBmZWF0dXJlSW5kZXgsIHNvdXJjZUxheWVySW5kZXgsIGJ1Y2tldEluZGV4LCBzaGFwaW5nLCB0ZXh0Qm94U2NhbGUsIHRleHRQYWRkaW5nLCB0ZXh0QWxvbmdMaW5lLCB0ZXh0Um90YXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNpbmdsZUxpbmUgPSBzaGFwaW5nLnBvc2l0aW9uZWRMaW5lcy5sZW5ndGggPT09IDE7XG4gICAgICAgIG51bUhvcml6b250YWxHbHlwaFZlcnRpY2VzICs9IGFkZFRleHRWZXJ0aWNlcyhcbiAgICAgICAgICAgIGJ1Y2tldCwgYW5jaG9yLCBzaGFwaW5nLCBpbWFnZU1hcCwgbGF5ZXIsIHRleHRBbG9uZ0xpbmUsIGZlYXR1cmUsIHRleHRPZmZzZXQsIGxpbmVBcnJheSxcbiAgICAgICAgICAgIHNoYXBlZFRleHRPcmllbnRhdGlvbnMudmVydGljYWwgPyBXcml0aW5nTW9kZS5ob3Jpem9udGFsIDogV3JpdGluZ01vZGUuaG9yaXpvbnRhbE9ubHksXG4gICAgICAgICAgICBzaW5nbGVMaW5lID8gKE9iamVjdC5rZXlzKHNoYXBlZFRleHRPcmllbnRhdGlvbnMuaG9yaXpvbnRhbCk6IGFueSkgOiBbanVzdGlmaWNhdGlvbl0sXG4gICAgICAgICAgICBwbGFjZWRUZXh0U3ltYm9sSW5kaWNlcywgcGxhY2VkSWNvblN5bWJvbEluZGV4LCBzaXplcywgY2Fub25pY2FsKTtcblxuICAgICAgICBpZiAoc2luZ2xlTGluZSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2hhcGVkVGV4dE9yaWVudGF0aW9ucy52ZXJ0aWNhbCkge1xuICAgICAgICBudW1WZXJ0aWNhbEdseXBoVmVydGljZXMgKz0gYWRkVGV4dFZlcnRpY2VzKFxuICAgICAgICAgICAgYnVja2V0LCBhbmNob3IsIHNoYXBlZFRleHRPcmllbnRhdGlvbnMudmVydGljYWwsIGltYWdlTWFwLCBsYXllciwgdGV4dEFsb25nTGluZSwgZmVhdHVyZSxcbiAgICAgICAgICAgIHRleHRPZmZzZXQsIGxpbmVBcnJheSwgV3JpdGluZ01vZGUudmVydGljYWwsIFsndmVydGljYWwnXSwgcGxhY2VkVGV4dFN5bWJvbEluZGljZXMsIHZlcnRpY2FsUGxhY2VkSWNvblN5bWJvbEluZGV4LCBzaXplcywgY2Fub25pY2FsKTtcbiAgICB9XG5cbiAgICBjb25zdCB0ZXh0Qm94U3RhcnRJbmRleCA9IHRleHRDb2xsaXNpb25GZWF0dXJlID8gdGV4dENvbGxpc2lvbkZlYXR1cmUuYm94U3RhcnRJbmRleCA6IGJ1Y2tldC5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGg7XG4gICAgY29uc3QgdGV4dEJveEVuZEluZGV4ID0gdGV4dENvbGxpc2lvbkZlYXR1cmUgPyB0ZXh0Q29sbGlzaW9uRmVhdHVyZS5ib3hFbmRJbmRleCA6IGJ1Y2tldC5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGg7XG5cbiAgICBjb25zdCB2ZXJ0aWNhbFRleHRCb3hTdGFydEluZGV4ID0gdmVydGljYWxUZXh0Q29sbGlzaW9uRmVhdHVyZSA/IHZlcnRpY2FsVGV4dENvbGxpc2lvbkZlYXR1cmUuYm94U3RhcnRJbmRleCA6IGJ1Y2tldC5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGg7XG4gICAgY29uc3QgdmVydGljYWxUZXh0Qm94RW5kSW5kZXggPSB2ZXJ0aWNhbFRleHRDb2xsaXNpb25GZWF0dXJlID8gdmVydGljYWxUZXh0Q29sbGlzaW9uRmVhdHVyZS5ib3hFbmRJbmRleCA6IGJ1Y2tldC5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGg7XG5cbiAgICBjb25zdCBpY29uQm94U3RhcnRJbmRleCA9IGljb25Db2xsaXNpb25GZWF0dXJlID8gaWNvbkNvbGxpc2lvbkZlYXR1cmUuYm94U3RhcnRJbmRleCA6IGJ1Y2tldC5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGg7XG4gICAgY29uc3QgaWNvbkJveEVuZEluZGV4ID0gaWNvbkNvbGxpc2lvbkZlYXR1cmUgPyBpY29uQ29sbGlzaW9uRmVhdHVyZS5ib3hFbmRJbmRleCA6IGJ1Y2tldC5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGg7XG5cbiAgICBjb25zdCB2ZXJ0aWNhbEljb25Cb3hTdGFydEluZGV4ID0gdmVydGljYWxJY29uQ29sbGlzaW9uRmVhdHVyZSA/IHZlcnRpY2FsSWNvbkNvbGxpc2lvbkZlYXR1cmUuYm94U3RhcnRJbmRleCA6IGJ1Y2tldC5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGg7XG4gICAgY29uc3QgdmVydGljYWxJY29uQm94RW5kSW5kZXggPSB2ZXJ0aWNhbEljb25Db2xsaXNpb25GZWF0dXJlID8gdmVydGljYWxJY29uQ29sbGlzaW9uRmVhdHVyZS5ib3hFbmRJbmRleCA6IGJ1Y2tldC5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGg7XG5cbiAgICAvLyBDaGVjayBpZiBydW50aW1lIGNvbGxpc2lvbiBjaXJjbGVzIHNob3VsZCBiZSB1c2VkIGZvciBhbnkgb2YgdGhlIGNvbGxpc2lvbiBmZWF0dXJlcy5cbiAgICAvLyBJdCBpcyBlbm91Z2ggdG8gY2hvb3NlIHRoZSB0YWxsZXN0IGZlYXR1cmUgc2hhcGUgYXMgY2lyY2xlcyBhcmUgYWx3YXlzIHBsYWNlZCBvbiBhIGxpbmUuXG4gICAgLy8gQWxsIG1lYXN1cmVtZW50cyBhcmUgaW4gZ2x5cGggbWV0cmljcyBhbmQgbGF0ZXIgY29udmVydGVkIGludG8gcGl4ZWxzIHVzaW5nIHByb3BlciBmb250IHNpemUgXCJsYXlvdXRUZXh0U2l6ZVwiXG4gICAgbGV0IGNvbGxpc2lvbkNpcmNsZURpYW1ldGVyID0gLTE7XG5cbiAgICBjb25zdCBnZXRDb2xsaXNpb25DaXJjbGVIZWlnaHQgPSAoZmVhdHVyZTogP0NvbGxpc2lvbkZlYXR1cmUsIHByZXZIZWlnaHQ6IG51bWJlcik6IG51bWJlciA9PiB7XG4gICAgICAgIGlmIChmZWF0dXJlICYmIGZlYXR1cmUuY2lyY2xlRGlhbWV0ZXIpXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgoZmVhdHVyZS5jaXJjbGVEaWFtZXRlciwgcHJldkhlaWdodCk7XG4gICAgICAgIHJldHVybiBwcmV2SGVpZ2h0O1xuICAgIH07XG5cbiAgICBjb2xsaXNpb25DaXJjbGVEaWFtZXRlciA9IGdldENvbGxpc2lvbkNpcmNsZUhlaWdodCh0ZXh0Q29sbGlzaW9uRmVhdHVyZSwgY29sbGlzaW9uQ2lyY2xlRGlhbWV0ZXIpO1xuICAgIGNvbGxpc2lvbkNpcmNsZURpYW1ldGVyID0gZ2V0Q29sbGlzaW9uQ2lyY2xlSGVpZ2h0KHZlcnRpY2FsVGV4dENvbGxpc2lvbkZlYXR1cmUsIGNvbGxpc2lvbkNpcmNsZURpYW1ldGVyKTtcbiAgICBjb2xsaXNpb25DaXJjbGVEaWFtZXRlciA9IGdldENvbGxpc2lvbkNpcmNsZUhlaWdodChpY29uQ29sbGlzaW9uRmVhdHVyZSwgY29sbGlzaW9uQ2lyY2xlRGlhbWV0ZXIpO1xuICAgIGNvbGxpc2lvbkNpcmNsZURpYW1ldGVyID0gZ2V0Q29sbGlzaW9uQ2lyY2xlSGVpZ2h0KHZlcnRpY2FsSWNvbkNvbGxpc2lvbkZlYXR1cmUsIGNvbGxpc2lvbkNpcmNsZURpYW1ldGVyKTtcbiAgICBjb25zdCB1c2VSdW50aW1lQ29sbGlzaW9uQ2lyY2xlcyA9IChjb2xsaXNpb25DaXJjbGVEaWFtZXRlciA+IC0xKSA/IDEgOiAwO1xuXG4gICAgLy8gQ29udmVydCBjaXJjbGUgY29sbGlzaW9uIGhlaWdodCBpbnRvIHBpeGVsc1xuICAgIGlmICh1c2VSdW50aW1lQ29sbGlzaW9uQ2lyY2xlcylcbiAgICAgICAgY29sbGlzaW9uQ2lyY2xlRGlhbWV0ZXIgKj0gbGF5b3V0VGV4dFNpemUgLyBPTkVfRU07XG5cbiAgICBpZiAoYnVja2V0LmdseXBoT2Zmc2V0QXJyYXkubGVuZ3RoID49IFN5bWJvbEJ1Y2tldC5NQVhfR0xZUEhTKSB3YXJuT25jZShcbiAgICAgICAgXCJUb28gbWFueSBnbHlwaHMgYmVpbmcgcmVuZGVyZWQgaW4gYSB0aWxlLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzI5MDdcIlxuICAgICk7XG5cbiAgICBpZiAoZmVhdHVyZS5zb3J0S2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYnVja2V0LmFkZFRvU29ydEtleVJhbmdlcyhidWNrZXQuc3ltYm9sSW5zdGFuY2VzLmxlbmd0aCwgZmVhdHVyZS5zb3J0S2V5KTtcbiAgICB9XG5cbiAgICBidWNrZXQuc3ltYm9sSW5zdGFuY2VzLmVtcGxhY2VCYWNrKFxuICAgICAgICBhbmNob3IueCxcbiAgICAgICAgYW5jaG9yLnksXG4gICAgICAgIHBsYWNlZFRleHRTeW1ib2xJbmRpY2VzLnJpZ2h0ID49IDAgPyBwbGFjZWRUZXh0U3ltYm9sSW5kaWNlcy5yaWdodCA6IC0xLFxuICAgICAgICBwbGFjZWRUZXh0U3ltYm9sSW5kaWNlcy5jZW50ZXIgPj0gMCA/IHBsYWNlZFRleHRTeW1ib2xJbmRpY2VzLmNlbnRlciA6IC0xLFxuICAgICAgICBwbGFjZWRUZXh0U3ltYm9sSW5kaWNlcy5sZWZ0ID49IDAgPyBwbGFjZWRUZXh0U3ltYm9sSW5kaWNlcy5sZWZ0IDogLTEsXG4gICAgICAgIHBsYWNlZFRleHRTeW1ib2xJbmRpY2VzLnZlcnRpY2FsIHx8IC0xLFxuICAgICAgICBwbGFjZWRJY29uU3ltYm9sSW5kZXgsXG4gICAgICAgIHZlcnRpY2FsUGxhY2VkSWNvblN5bWJvbEluZGV4LFxuICAgICAgICBrZXksXG4gICAgICAgIHRleHRCb3hTdGFydEluZGV4LFxuICAgICAgICB0ZXh0Qm94RW5kSW5kZXgsXG4gICAgICAgIHZlcnRpY2FsVGV4dEJveFN0YXJ0SW5kZXgsXG4gICAgICAgIHZlcnRpY2FsVGV4dEJveEVuZEluZGV4LFxuICAgICAgICBpY29uQm94U3RhcnRJbmRleCxcbiAgICAgICAgaWNvbkJveEVuZEluZGV4LFxuICAgICAgICB2ZXJ0aWNhbEljb25Cb3hTdGFydEluZGV4LFxuICAgICAgICB2ZXJ0aWNhbEljb25Cb3hFbmRJbmRleCxcbiAgICAgICAgZmVhdHVyZUluZGV4LFxuICAgICAgICBudW1Ib3Jpem9udGFsR2x5cGhWZXJ0aWNlcyxcbiAgICAgICAgbnVtVmVydGljYWxHbHlwaFZlcnRpY2VzLFxuICAgICAgICBudW1JY29uVmVydGljZXMsXG4gICAgICAgIG51bVZlcnRpY2FsSWNvblZlcnRpY2VzLFxuICAgICAgICB1c2VSdW50aW1lQ29sbGlzaW9uQ2lyY2xlcyxcbiAgICAgICAgMCxcbiAgICAgICAgdGV4dEJveFNjYWxlLFxuICAgICAgICB0ZXh0T2Zmc2V0MCxcbiAgICAgICAgdGV4dE9mZnNldDEsXG4gICAgICAgIGNvbGxpc2lvbkNpcmNsZURpYW1ldGVyKTtcbn1cblxuZnVuY3Rpb24gYW5jaG9ySXNUb29DbG9zZShidWNrZXQ6IGFueSwgdGV4dDogc3RyaW5nLCByZXBlYXREaXN0YW5jZTogbnVtYmVyLCBhbmNob3I6IFBvaW50KSB7XG4gICAgY29uc3QgY29tcGFyZVRleHQgPSBidWNrZXQuY29tcGFyZVRleHQ7XG4gICAgaWYgKCEodGV4dCBpbiBjb21wYXJlVGV4dCkpIHtcbiAgICAgICAgY29tcGFyZVRleHRbdGV4dF0gPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBvdGhlckFuY2hvcnMgPSBjb21wYXJlVGV4dFt0ZXh0XTtcbiAgICAgICAgZm9yIChsZXQgayA9IG90aGVyQW5jaG9ycy5sZW5ndGggLSAxOyBrID49IDA7IGstLSkge1xuICAgICAgICAgICAgaWYgKGFuY2hvci5kaXN0KG90aGVyQW5jaG9yc1trXSkgPCByZXBlYXREaXN0YW5jZSkge1xuICAgICAgICAgICAgICAgIC8vIElmIGl0J3Mgd2l0aGluIHJlcGVhdERpc3RhbmNlIG9mIG9uZSBhbmNob3IsIHN0b3AgbG9va2luZ1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIElmIGFuY2hvciBpcyBub3Qgd2l0aGluIHJlcGVhdERpc3RhbmNlIG9mIGFueSBvdGhlciBhbmNob3IsIGFkZCB0byBhcnJheVxuICAgIGNvbXBhcmVUZXh0W3RleHRdLnB1c2goYW5jaG9yKTtcbiAgICByZXR1cm4gZmFsc2U7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge3N5bWJvbExheW91dEF0dHJpYnV0ZXMsXG4gICAgY29sbGlzaW9uVmVydGV4QXR0cmlidXRlcyxcbiAgICBjb2xsaXNpb25Cb3hMYXlvdXQsXG4gICAgZHluYW1pY0xheW91dEF0dHJpYnV0ZXNcbn0gZnJvbSAnLi9zeW1ib2xfYXR0cmlidXRlcyc7XG5cbmltcG9ydCB7U3ltYm9sTGF5b3V0QXJyYXksXG4gICAgU3ltYm9sRHluYW1pY0xheW91dEFycmF5LFxuICAgIFN5bWJvbE9wYWNpdHlBcnJheSxcbiAgICBDb2xsaXNpb25Cb3hMYXlvdXRBcnJheSxcbiAgICBDb2xsaXNpb25WZXJ0ZXhBcnJheSxcbiAgICBQbGFjZWRTeW1ib2xBcnJheSxcbiAgICBTeW1ib2xJbnN0YW5jZUFycmF5LFxuICAgIEdseXBoT2Zmc2V0QXJyYXksXG4gICAgU3ltYm9sTGluZVZlcnRleEFycmF5XG59IGZyb20gJy4uL2FycmF5X3R5cGVzJztcblxuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IFNlZ21lbnRWZWN0b3IgZnJvbSAnLi4vc2VnbWVudCc7XG5pbXBvcnQge1Byb2dyYW1Db25maWd1cmF0aW9uU2V0fSBmcm9tICcuLi9wcm9ncmFtX2NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtUcmlhbmdsZUluZGV4QXJyYXksIExpbmVJbmRleEFycmF5fSBmcm9tICcuLi9pbmRleF9hcnJheV90eXBlJztcbmltcG9ydCB0cmFuc2Zvcm1UZXh0IGZyb20gJy4uLy4uL3N5bWJvbC90cmFuc2Zvcm1fdGV4dCc7XG5pbXBvcnQgbWVyZ2VMaW5lcyBmcm9tICcuLi8uLi9zeW1ib2wvbWVyZ2VsaW5lcyc7XG5pbXBvcnQge2FsbG93c1ZlcnRpY2FsV3JpdGluZ01vZGUsIHN0cmluZ0NvbnRhaW5zUlRMVGV4dH0gZnJvbSAnLi4vLi4vdXRpbC9zY3JpcHRfZGV0ZWN0aW9uJztcbmltcG9ydCB7V3JpdGluZ01vZGV9IGZyb20gJy4uLy4uL3N5bWJvbC9zaGFwaW5nJztcbmltcG9ydCBsb2FkR2VvbWV0cnkgZnJvbSAnLi4vbG9hZF9nZW9tZXRyeSc7XG5pbXBvcnQgbXZ0IGZyb20gJ0BtYXBib3gvdmVjdG9yLXRpbGUnO1xuY29uc3QgdmVjdG9yVGlsZUZlYXR1cmVUeXBlcyA9IG12dC5WZWN0b3JUaWxlRmVhdHVyZS50eXBlcztcbmltcG9ydCB7dmVydGljYWxpemVkQ2hhcmFjdGVyTWFwfSBmcm9tICcuLi8uLi91dGlsL3ZlcnRpY2FsaXplX3B1bmN0dWF0aW9uJztcbmltcG9ydCBBbmNob3IgZnJvbSAnLi4vLi4vc3ltYm9sL2FuY2hvcic7XG5pbXBvcnQge2dldFNpemVEYXRhfSBmcm9tICcuLi8uLi9zeW1ib2wvc3ltYm9sX3NpemUnO1xuaW1wb3J0IHtNQVhfUEFDS0VEX1NJWkV9IGZyb20gJy4uLy4uL3N5bWJvbC9zeW1ib2xfbGF5b3V0JztcbmltcG9ydCB7cmVnaXN0ZXJ9IGZyb20gJy4uLy4uL3V0aWwvd2ViX3dvcmtlcl90cmFuc2Zlcic7XG5pbXBvcnQgRXZhbHVhdGlvblBhcmFtZXRlcnMgZnJvbSAnLi4vLi4vc3R5bGUvZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcbmltcG9ydCBGb3JtYXR0ZWQgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL2Zvcm1hdHRlZCc7XG5pbXBvcnQgUmVzb2x2ZWRJbWFnZSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvcmVzb2x2ZWRfaW1hZ2UnO1xuaW1wb3J0IHtwbHVnaW4gYXMgZ2xvYmFsUlRMVGV4dFBsdWdpbiwgZ2V0UlRMVGV4dFBsdWdpblN0YXR1c30gZnJvbSAnLi4vLi4vc291cmNlL3J0bF90ZXh0X3BsdWdpbic7XG5pbXBvcnQge21hdDR9IGZyb20gJ2dsLW1hdHJpeCc7XG5cbmltcG9ydCB0eXBlIHtDYW5vbmljYWxUaWxlSUR9IGZyb20gJy4uLy4uL3NvdXJjZS90aWxlX2lkJztcbmltcG9ydCB0eXBlIHtcbiAgICBCdWNrZXQsXG4gICAgQnVja2V0UGFyYW1ldGVycyxcbiAgICBJbmRleGVkRmVhdHVyZSxcbiAgICBQb3B1bGF0ZVBhcmFtZXRlcnNcbn0gZnJvbSAnLi4vYnVja2V0JztcbmltcG9ydCB0eXBlIHtDb2xsaXNpb25Cb3hBcnJheSwgQ29sbGlzaW9uQm94LCBTeW1ib2xJbnN0YW5jZX0gZnJvbSAnLi4vYXJyYXlfdHlwZXMnO1xuaW1wb3J0IHR5cGUge1N0cnVjdEFycmF5LCBTdHJ1Y3RBcnJheU1lbWJlcn0gZnJvbSAnLi4vLi4vdXRpbC9zdHJ1Y3RfYXJyYXknO1xuaW1wb3J0IFN5bWJvbFN0eWxlTGF5ZXIgZnJvbSAnLi4vLi4vc3R5bGUvc3R5bGVfbGF5ZXIvc3ltYm9sX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSBJbmRleEJ1ZmZlciBmcm9tICcuLi8uLi9nbC9pbmRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUgVmVydGV4QnVmZmVyIGZyb20gJy4uLy4uL2dsL3ZlcnRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUge1N5bWJvbFF1YWR9IGZyb20gJy4uLy4uL3N5bWJvbC9xdWFkcyc7XG5pbXBvcnQgdHlwZSB7U2l6ZURhdGF9IGZyb20gJy4uLy4uL3N5bWJvbC9zeW1ib2xfc2l6ZSc7XG5pbXBvcnQgdHlwZSB7RmVhdHVyZVN0YXRlc30gZnJvbSAnLi4vLi4vc291cmNlL3NvdXJjZV9zdGF0ZSc7XG5pbXBvcnQgdHlwZSB7SW1hZ2VQb3NpdGlvbn0gZnJvbSAnLi4vLi4vcmVuZGVyL2ltYWdlX2F0bGFzJztcblxuZXhwb3J0IHR5cGUgU2luZ2xlQ29sbGlzaW9uQm94ID0ge1xuICAgIHgxOiBudW1iZXI7XG4gICAgeTE6IG51bWJlcjtcbiAgICB4MjogbnVtYmVyO1xuICAgIHkyOiBudW1iZXI7XG4gICAgYW5jaG9yUG9pbnRYOiBudW1iZXI7XG4gICAgYW5jaG9yUG9pbnRZOiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBDb2xsaXNpb25BcnJheXMgPSB7XG4gICAgdGV4dEJveD86IFNpbmdsZUNvbGxpc2lvbkJveDtcbiAgICB2ZXJ0aWNhbFRleHRCb3g/OiBTaW5nbGVDb2xsaXNpb25Cb3g7XG4gICAgaWNvbkJveD86IFNpbmdsZUNvbGxpc2lvbkJveDtcbiAgICB2ZXJ0aWNhbEljb25Cb3g/OiBTaW5nbGVDb2xsaXNpb25Cb3g7XG4gICAgdGV4dEZlYXR1cmVJbmRleD86IG51bWJlcjtcbiAgICB2ZXJ0aWNhbFRleHRGZWF0dXJlSW5kZXg/OiBudW1iZXI7XG4gICAgaWNvbkZlYXR1cmVJbmRleD86IG51bWJlcjtcbiAgICB2ZXJ0aWNhbEljb25GZWF0dXJlSW5kZXg/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBTeW1ib2xGZWF0dXJlID0ge3xcbiAgICBzb3J0S2V5OiBudW1iZXIgfCB2b2lkLFxuICAgIHRleHQ6IEZvcm1hdHRlZCB8IHZvaWQsXG4gICAgaWNvbjogP1Jlc29sdmVkSW1hZ2UsXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBzb3VyY2VMYXllckluZGV4OiBudW1iZXIsXG4gICAgZ2VvbWV0cnk6IEFycmF5PEFycmF5PFBvaW50Pj4sXG4gICAgcHJvcGVydGllczogT2JqZWN0LFxuICAgIHR5cGU6ICdQb2ludCcgfCAnTGluZVN0cmluZycgfCAnUG9seWdvbicsXG4gICAgaWQ/OiBhbnlcbnx9O1xuXG5leHBvcnQgdHlwZSBTb3J0S2V5UmFuZ2UgPSB7XG4gICAgc29ydEtleTogbnVtYmVyLFxuICAgIHN5bWJvbEluc3RhbmNlU3RhcnQ6IG51bWJlcixcbiAgICBzeW1ib2xJbnN0YW5jZUVuZDogbnVtYmVyXG59O1xuXG4vLyBPcGFjaXR5IGFycmF5cyBhcmUgZnJlcXVlbnRseSB1cGRhdGVkIGJ1dCBkb24ndCBjb250YWluIGEgbG90IG9mIGluZm9ybWF0aW9uLCBzbyB3ZSBwYWNrIHRoZW1cbi8vIHRpZ2h0LiBFYWNoIFVpbnQzMiBpcyBhY3R1YWxseSBmb3VyIGR1cGxpY2F0ZSBVaW50OHMgZm9yIHRoZSBmb3VyIGNvcm5lcnMgb2YgYSBnbHlwaFxuLy8gNyBiaXRzIGFyZSBmb3IgdGhlIGN1cnJlbnQgb3BhY2l0eSwgYW5kIHRoZSBsb3dlc3QgYml0IGlzIHRoZSB0YXJnZXQgb3BhY2l0eVxuXG4vLyBhY3R1YWxseSBkZWZpbmVkIGluIHN5bWJvbF9hdHRyaWJ1dGVzLmpzXG4vLyBjb25zdCBwbGFjZW1lbnRPcGFjaXR5QXR0cmlidXRlcyA9IFtcbi8vICAgICB7IG5hbWU6ICdhX2ZhZGVfb3BhY2l0eScsIGNvbXBvbmVudHM6IDEsIHR5cGU6ICdVaW50MzInIH1cbi8vIF07XG5jb25zdCBzaGFkZXJPcGFjaXR5QXR0cmlidXRlcyA9IFtcbiAgICB7bmFtZTogJ2FfZmFkZV9vcGFjaXR5JywgY29tcG9uZW50czogMSwgdHlwZTogJ1VpbnQ4Jywgb2Zmc2V0OiAwfVxuXTtcblxuZnVuY3Rpb24gYWRkVmVydGV4KGFycmF5LCBhbmNob3JYLCBhbmNob3JZLCBveCwgb3ksIHR4LCB0eSwgc2l6ZVZlcnRleCwgaXNTREY6IGJvb2xlYW4sIHBpeGVsT2Zmc2V0WCwgcGl4ZWxPZmZzZXRZLCBtaW5Gb250U2NhbGVYLCBtaW5Gb250U2NhbGVZKSB7XG4gICAgY29uc3QgYVNpemVYID0gc2l6ZVZlcnRleCA/IE1hdGgubWluKE1BWF9QQUNLRURfU0laRSwgTWF0aC5yb3VuZChzaXplVmVydGV4WzBdKSkgOiAwO1xuICAgIGNvbnN0IGFTaXplWSA9IHNpemVWZXJ0ZXggPyBNYXRoLm1pbihNQVhfUEFDS0VEX1NJWkUsIE1hdGgucm91bmQoc2l6ZVZlcnRleFsxXSkpIDogMDtcbiAgICBhcnJheS5lbXBsYWNlQmFjayhcbiAgICAgICAgLy8gYV9wb3Nfb2Zmc2V0XG4gICAgICAgIGFuY2hvclgsXG4gICAgICAgIGFuY2hvclksXG4gICAgICAgIE1hdGgucm91bmQob3ggKiAzMiksXG4gICAgICAgIE1hdGgucm91bmQob3kgKiAzMiksXG5cbiAgICAgICAgLy8gYV9kYXRhXG4gICAgICAgIHR4LCAvLyB4IGNvb3JkaW5hdGUgb2Ygc3ltYm9sIG9uIGdseXBoIGF0bGFzIHRleHR1cmVcbiAgICAgICAgdHksIC8vIHkgY29vcmRpbmF0ZSBvZiBzeW1ib2wgb24gZ2x5cGggYXRsYXMgdGV4dHVyZVxuICAgICAgICAoYVNpemVYIDw8IDEpICsgKGlzU0RGID8gMSA6IDApLFxuICAgICAgICBhU2l6ZVksXG4gICAgICAgIHBpeGVsT2Zmc2V0WCAqIDE2LFxuICAgICAgICBwaXhlbE9mZnNldFkgKiAxNixcbiAgICAgICAgbWluRm9udFNjYWxlWCAqIDI1NixcbiAgICAgICAgbWluRm9udFNjYWxlWSAqIDI1NlxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGFkZER5bmFtaWNBdHRyaWJ1dGVzKGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheTogU3RydWN0QXJyYXksIHA6IFBvaW50LCBhbmdsZTogbnVtYmVyKSB7XG4gICAgZHluYW1pY0xheW91dFZlcnRleEFycmF5LmVtcGxhY2VCYWNrKHAueCwgcC55LCBhbmdsZSk7XG4gICAgZHluYW1pY0xheW91dFZlcnRleEFycmF5LmVtcGxhY2VCYWNrKHAueCwgcC55LCBhbmdsZSk7XG4gICAgZHluYW1pY0xheW91dFZlcnRleEFycmF5LmVtcGxhY2VCYWNrKHAueCwgcC55LCBhbmdsZSk7XG4gICAgZHluYW1pY0xheW91dFZlcnRleEFycmF5LmVtcGxhY2VCYWNrKHAueCwgcC55LCBhbmdsZSk7XG59XG5cbmZ1bmN0aW9uIGNvbnRhaW5zUlRMVGV4dChmb3JtYXR0ZWRUZXh0OiBGb3JtYXR0ZWQpOiBib29sZWFuIHtcbiAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgZm9ybWF0dGVkVGV4dC5zZWN0aW9ucykge1xuICAgICAgICBpZiAoc3RyaW5nQ29udGFpbnNSVExUZXh0KHNlY3Rpb24udGV4dCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGNsYXNzIFN5bWJvbEJ1ZmZlcnMge1xuICAgIGxheW91dFZlcnRleEFycmF5OiBTeW1ib2xMYXlvdXRBcnJheTtcbiAgICBsYXlvdXRWZXJ0ZXhCdWZmZXI6IFZlcnRleEJ1ZmZlcjtcblxuICAgIGluZGV4QXJyYXk6IFRyaWFuZ2xlSW5kZXhBcnJheTtcbiAgICBpbmRleEJ1ZmZlcjogSW5kZXhCdWZmZXI7XG5cbiAgICBwcm9ncmFtQ29uZmlndXJhdGlvbnM6IFByb2dyYW1Db25maWd1cmF0aW9uU2V0PFN5bWJvbFN0eWxlTGF5ZXI+O1xuICAgIHNlZ21lbnRzOiBTZWdtZW50VmVjdG9yO1xuXG4gICAgZHluYW1pY0xheW91dFZlcnRleEFycmF5OiBTeW1ib2xEeW5hbWljTGF5b3V0QXJyYXk7XG4gICAgZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlcjogVmVydGV4QnVmZmVyO1xuXG4gICAgb3BhY2l0eVZlcnRleEFycmF5OiBTeW1ib2xPcGFjaXR5QXJyYXk7XG4gICAgb3BhY2l0eVZlcnRleEJ1ZmZlcjogVmVydGV4QnVmZmVyO1xuXG4gICAgY29sbGlzaW9uVmVydGV4QXJyYXk6IENvbGxpc2lvblZlcnRleEFycmF5O1xuICAgIGNvbGxpc2lvblZlcnRleEJ1ZmZlcjogVmVydGV4QnVmZmVyO1xuXG4gICAgcGxhY2VkU3ltYm9sQXJyYXk6IFBsYWNlZFN5bWJvbEFycmF5O1xuXG4gICAgY29uc3RydWN0b3IocHJvZ3JhbUNvbmZpZ3VyYXRpb25zOiBQcm9ncmFtQ29uZmlndXJhdGlvblNldDxTeW1ib2xTdHlsZUxheWVyPikge1xuICAgICAgICB0aGlzLmxheW91dFZlcnRleEFycmF5ID0gbmV3IFN5bWJvbExheW91dEFycmF5KCk7XG4gICAgICAgIHRoaXMuaW5kZXhBcnJheSA9IG5ldyBUcmlhbmdsZUluZGV4QXJyYXkoKTtcbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMgPSBwcm9ncmFtQ29uZmlndXJhdGlvbnM7XG4gICAgICAgIHRoaXMuc2VnbWVudHMgPSBuZXcgU2VnbWVudFZlY3RvcigpO1xuICAgICAgICB0aGlzLmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSA9IG5ldyBTeW1ib2xEeW5hbWljTGF5b3V0QXJyYXkoKTtcbiAgICAgICAgdGhpcy5vcGFjaXR5VmVydGV4QXJyYXkgPSBuZXcgU3ltYm9sT3BhY2l0eUFycmF5KCk7XG4gICAgICAgIHRoaXMucGxhY2VkU3ltYm9sQXJyYXkgPSBuZXcgUGxhY2VkU3ltYm9sQXJyYXkoKTtcbiAgICB9XG5cbiAgICBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICAgIHRoaXMuaW5kZXhBcnJheS5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY0xheW91dFZlcnRleEFycmF5Lmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgICAgdGhpcy5vcGFjaXR5VmVydGV4QXJyYXkubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIHVwbG9hZChjb250ZXh0OiBDb250ZXh0LCBkeW5hbWljSW5kZXhCdWZmZXI6IGJvb2xlYW4sIHVwbG9hZD86IGJvb2xlYW4sIHVwZGF0ZT86IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXBsb2FkKSB7XG4gICAgICAgICAgICB0aGlzLmxheW91dFZlcnRleEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMubGF5b3V0VmVydGV4QXJyYXksIHN5bWJvbExheW91dEF0dHJpYnV0ZXMubWVtYmVycyk7XG4gICAgICAgICAgICB0aGlzLmluZGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXksIGR5bmFtaWNJbmRleEJ1ZmZlcik7XG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSwgZHluYW1pY0xheW91dEF0dHJpYnV0ZXMubWVtYmVycywgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLm9wYWNpdHlWZXJ0ZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLm9wYWNpdHlWZXJ0ZXhBcnJheSwgc2hhZGVyT3BhY2l0eUF0dHJpYnV0ZXMsIHRydWUpO1xuICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHBlcmZvcm1hbmNlIGhhY2sgc28gdGhhdCB3ZSBjYW4gd3JpdGUgdG8gb3BhY2l0eVZlcnRleEFycmF5IHdpdGggdWludDMyc1xuICAgICAgICAgICAgLy8gZXZlbiB0aG91Z2ggdGhlIHNoYWRlcnMgcmVhZCB1aW50OHNcbiAgICAgICAgICAgIHRoaXMub3BhY2l0eVZlcnRleEJ1ZmZlci5pdGVtU2l6ZSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVwbG9hZCB8fCB1cGRhdGUpIHtcbiAgICAgICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwbG9hZChjb250ZXh0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGlmICghdGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIpIHJldHVybjtcbiAgICAgICAgdGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLnNlZ21lbnRzLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5vcGFjaXR5VmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICB9XG59XG5cbnJlZ2lzdGVyKCdTeW1ib2xCdWZmZXJzJywgU3ltYm9sQnVmZmVycyk7XG5cbmNsYXNzIENvbGxpc2lvbkJ1ZmZlcnMge1xuICAgIGxheW91dFZlcnRleEFycmF5OiBTdHJ1Y3RBcnJheTtcbiAgICBsYXlvdXRBdHRyaWJ1dGVzOiBBcnJheTxTdHJ1Y3RBcnJheU1lbWJlcj47XG4gICAgbGF5b3V0VmVydGV4QnVmZmVyOiBWZXJ0ZXhCdWZmZXI7XG5cbiAgICBpbmRleEFycmF5OiBUcmlhbmdsZUluZGV4QXJyYXkgfCBMaW5lSW5kZXhBcnJheTtcbiAgICBpbmRleEJ1ZmZlcjogSW5kZXhCdWZmZXI7XG5cbiAgICBzZWdtZW50czogU2VnbWVudFZlY3RvcjtcblxuICAgIGNvbGxpc2lvblZlcnRleEFycmF5OiBDb2xsaXNpb25WZXJ0ZXhBcnJheTtcbiAgICBjb2xsaXNpb25WZXJ0ZXhCdWZmZXI6IFZlcnRleEJ1ZmZlcjtcblxuICAgIGNvbnN0cnVjdG9yKExheW91dEFycmF5OiBDbGFzczxTdHJ1Y3RBcnJheT4sXG4gICAgICAgICAgICAgICAgbGF5b3V0QXR0cmlidXRlczogQXJyYXk8U3RydWN0QXJyYXlNZW1iZXI+LFxuICAgICAgICAgICAgICAgIEluZGV4QXJyYXk6IENsYXNzPFRyaWFuZ2xlSW5kZXhBcnJheSB8IExpbmVJbmRleEFycmF5Pikge1xuICAgICAgICB0aGlzLmxheW91dFZlcnRleEFycmF5ID0gbmV3IExheW91dEFycmF5KCk7XG4gICAgICAgIHRoaXMubGF5b3V0QXR0cmlidXRlcyA9IGxheW91dEF0dHJpYnV0ZXM7XG4gICAgICAgIHRoaXMuaW5kZXhBcnJheSA9IG5ldyBJbmRleEFycmF5KCk7XG4gICAgICAgIHRoaXMuc2VnbWVudHMgPSBuZXcgU2VnbWVudFZlY3RvcigpO1xuICAgICAgICB0aGlzLmNvbGxpc2lvblZlcnRleEFycmF5ID0gbmV3IENvbGxpc2lvblZlcnRleEFycmF5KCk7XG4gICAgfVxuXG4gICAgdXBsb2FkKGNvbnRleHQ6IENvbnRleHQpIHtcbiAgICAgICAgdGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmxheW91dFZlcnRleEFycmF5LCB0aGlzLmxheW91dEF0dHJpYnV0ZXMpO1xuICAgICAgICB0aGlzLmluZGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXkpO1xuICAgICAgICB0aGlzLmNvbGxpc2lvblZlcnRleEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuY29sbGlzaW9uVmVydGV4QXJyYXksIGNvbGxpc2lvblZlcnRleEF0dHJpYnV0ZXMubWVtYmVycywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxheW91dFZlcnRleEJ1ZmZlcikgcmV0dXJuO1xuICAgICAgICB0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLnNlZ21lbnRzLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5jb2xsaXNpb25WZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ0NvbGxpc2lvbkJ1ZmZlcnMnLCBDb2xsaXNpb25CdWZmZXJzKTtcblxuLyoqXG4gKiBVbmxpa2Ugb3RoZXIgYnVja2V0cywgd2hpY2ggc2ltcGx5IGltcGxlbWVudCAjYWRkRmVhdHVyZSB3aXRoIHR5cGUtc3BlY2lmaWNcbiAqIGxvZ2ljIGZvciAoZXNzZW50aWFsbHkpIHRyaWFuZ3VsYXRpbmcgZmVhdHVyZSBnZW9tZXRyaWVzLCBTeW1ib2xCdWNrZXRcbiAqIHJlcXVpcmVzIHNwZWNpYWxpemVkIGJlaGF2aW9yOlxuICpcbiAqIDEuIFdvcmtlclRpbGUjcGFyc2UoKSwgdGhlIGxvZ2ljYWwgb3duZXIgb2YgdGhlIGJ1Y2tldCBjcmVhdGlvbiBwcm9jZXNzLFxuICogICAgY2FsbHMgU3ltYm9sQnVja2V0I3BvcHVsYXRlKCksIHdoaWNoIHJlc29sdmVzIHRleHQgYW5kIGljb24gdG9rZW5zIG9uXG4gKiAgICBlYWNoIGZlYXR1cmUsIGFkZHMgZWFjaCBnbHlwaHMgYW5kIHN5bWJvbHMgbmVlZGVkIHRvIHRoZSBwYXNzZWQtaW5cbiAqICAgIGNvbGxlY3Rpb25zIG9wdGlvbnMuZ2x5cGhEZXBlbmRlbmNpZXMgYW5kIG9wdGlvbnMuaWNvbkRlcGVuZGVuY2llcywgYW5kXG4gKiAgICBzdG9yZXMgdGhlIGZlYXR1cmUgZGF0YSBmb3IgdXNlIGluIHN1YnNlcXVlbnQgc3RlcCAodGhpcy5mZWF0dXJlcykuXG4gKlxuICogMi4gV29ya2VyVGlsZSBhc3luY2hyb25vdXNseSByZXF1ZXN0cyBmcm9tIHRoZSBtYWluIHRocmVhZCBhbGwgb2YgdGhlIGdseXBoc1xuICogICAgYW5kIGljb25zIG5lZWRlZCAoYnkgdGhpcyBidWNrZXQgYW5kIGFueSBvdGhlcnMpLiBXaGVuIGdseXBocyBhbmQgaWNvbnNcbiAqICAgIGhhdmUgYmVlbiByZWNlaXZlZCwgdGhlIFdvcmtlclRpbGUgY3JlYXRlcyBhIENvbGxpc2lvbkluZGV4IGFuZCBpbnZva2VzOlxuICpcbiAqIDMuIHBlcmZvcm1TeW1ib2xMYXlvdXQoYnVja2V0LCBzdGFja3MsIGljb25zKSBwZXJmb3JtIHRleHRzIHNoYXBpbmcgYW5kXG4gKiAgICBsYXlvdXQgb24gYSBTeW1ib2wgQnVja2V0LiBUaGlzIHN0ZXAgcG9wdWxhdGVzOlxuICogICAgICBgdGhpcy5zeW1ib2xJbnN0YW5jZXNgOiBtZXRhZGF0YSBvbiBnZW5lcmF0ZWQgc3ltYm9sc1xuICogICAgICBgdGhpcy5jb2xsaXNpb25Cb3hBcnJheWA6IGNvbGxpc2lvbiBkYXRhIGZvciB1c2UgYnkgZm9yZWdyb3VuZFxuICogICAgICBgdGhpcy50ZXh0YDogU3ltYm9sQnVmZmVycyBmb3IgdGV4dCBzeW1ib2xzXG4gKiAgICAgIGB0aGlzLmljb25zYDogU3ltYm9sQnVmZmVycyBmb3IgaWNvbnNcbiAqICAgICAgYHRoaXMuaWNvbkNvbGxpc2lvbkJveGA6IERlYnVnIFN5bWJvbEJ1ZmZlcnMgZm9yIGljb24gY29sbGlzaW9uIGJveGVzXG4gKiAgICAgIGB0aGlzLnRleHRDb2xsaXNpb25Cb3hgOiBEZWJ1ZyBTeW1ib2xCdWZmZXJzIGZvciB0ZXh0IGNvbGxpc2lvbiBib3hlc1xuICogICAgVGhlIHJlc3VsdHMgYXJlIHNlbnQgdG8gdGhlIGZvcmVncm91bmQgZm9yIHJlbmRlcmluZ1xuICpcbiAqIDQuIHBlcmZvcm1TeW1ib2xQbGFjZW1lbnQoYnVja2V0LCBjb2xsaXNpb25JbmRleCkgaXMgcnVuIG9uIHRoZSBmb3JlZ3JvdW5kLFxuICogICAgYW5kIHVzZXMgdGhlIENvbGxpc2lvbkluZGV4IGFsb25nIHdpdGggY3VycmVudCBjYW1lcmEgc2V0dGluZ3MgdG8gZGV0ZXJtaW5lXG4gKiAgICB3aGljaCBzeW1ib2xzIGNhbiBhY3R1YWxseSBzaG93IG9uIHRoZSBtYXAuIENvbGxpZGVkIHN5bWJvbHMgYXJlIGhpZGRlblxuICogICAgdXNpbmcgYSBkeW5hbWljIFwiT3BhY2l0eVZlcnRleEFycmF5XCIuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3ltYm9sQnVja2V0IGltcGxlbWVudHMgQnVja2V0IHtcbiAgICBzdGF0aWMgTUFYX0dMWVBIUzogbnVtYmVyO1xuICAgIHN0YXRpYyBhZGREeW5hbWljQXR0cmlidXRlczogdHlwZW9mIGFkZER5bmFtaWNBdHRyaWJ1dGVzO1xuXG4gICAgY29sbGlzaW9uQm94QXJyYXk6IENvbGxpc2lvbkJveEFycmF5O1xuICAgIHpvb206IG51bWJlcjtcbiAgICBvdmVyc2NhbGluZzogbnVtYmVyO1xuICAgIGxheWVyczogQXJyYXk8U3ltYm9sU3R5bGVMYXllcj47XG4gICAgbGF5ZXJJZHM6IEFycmF5PHN0cmluZz47XG4gICAgc3RhdGVEZXBlbmRlbnRMYXllcnM6IEFycmF5PFN5bWJvbFN0eWxlTGF5ZXI+O1xuICAgIHN0YXRlRGVwZW5kZW50TGF5ZXJJZHM6IEFycmF5PHN0cmluZz47XG5cbiAgICBpbmRleDogbnVtYmVyO1xuICAgIHNkZkljb25zOiBib29sZWFuO1xuICAgIGljb25zSW5UZXh0OiBib29sZWFuO1xuICAgIGljb25zTmVlZExpbmVhcjogYm9vbGVhbjtcbiAgICBidWNrZXRJbnN0YW5jZUlkOiBudW1iZXI7XG4gICAganVzdFJlbG9hZGVkOiBib29sZWFuO1xuICAgIGhhc1BhdHRlcm46IGJvb2xlYW47XG5cbiAgICB0ZXh0U2l6ZURhdGE6IFNpemVEYXRhO1xuICAgIGljb25TaXplRGF0YTogU2l6ZURhdGE7XG5cbiAgICBnbHlwaE9mZnNldEFycmF5OiBHbHlwaE9mZnNldEFycmF5O1xuICAgIGxpbmVWZXJ0ZXhBcnJheTogU3ltYm9sTGluZVZlcnRleEFycmF5O1xuICAgIGZlYXR1cmVzOiBBcnJheTxTeW1ib2xGZWF0dXJlPjtcbiAgICBzeW1ib2xJbnN0YW5jZXM6IFN5bWJvbEluc3RhbmNlQXJyYXk7XG4gICAgY29sbGlzaW9uQXJyYXlzOiBBcnJheTxDb2xsaXNpb25BcnJheXM+O1xuICAgIHNvcnRLZXlSYW5nZXM6IEFycmF5PFNvcnRLZXlSYW5nZT47XG4gICAgcGl4ZWxSYXRpbzogbnVtYmVyO1xuICAgIHRpbGVQaXhlbFJhdGlvOiBudW1iZXI7XG4gICAgY29tcGFyZVRleHQ6IHtbXzogc3RyaW5nXTogQXJyYXk8UG9pbnQ+fTtcbiAgICBmYWRlU3RhcnRUaW1lOiBudW1iZXI7XG4gICAgc29ydEZlYXR1cmVzQnlLZXk6IGJvb2xlYW47XG4gICAgc29ydEZlYXR1cmVzQnlZOiBib29sZWFuO1xuICAgIHNvcnRlZEFuZ2xlOiBudW1iZXI7XG4gICAgZmVhdHVyZVNvcnRPcmRlcjogQXJyYXk8bnVtYmVyPjtcblxuICAgIGNvbGxpc2lvbkNpcmNsZUFycmF5OiBBcnJheTxudW1iZXI+O1xuICAgIHBsYWNlbWVudEludlByb2pNYXRyaXg6IG1hdDQ7XG4gICAgcGxhY2VtZW50Vmlld3BvcnRNYXRyaXg6IG1hdDQ7XG5cbiAgICB0ZXh0OiBTeW1ib2xCdWZmZXJzO1xuICAgIGljb246IFN5bWJvbEJ1ZmZlcnM7XG4gICAgdGV4dENvbGxpc2lvbkJveDogQ29sbGlzaW9uQnVmZmVycztcbiAgICBpY29uQ29sbGlzaW9uQm94OiBDb2xsaXNpb25CdWZmZXJzO1xuICAgIHVwbG9hZGVkOiBib29sZWFuO1xuICAgIHNvdXJjZUxheWVySW5kZXg6IG51bWJlcjtcbiAgICBzb3VyY2VJRDogc3RyaW5nO1xuICAgIHN5bWJvbEluc3RhbmNlSW5kZXhlczogQXJyYXk8bnVtYmVyPjtcbiAgICB3cml0aW5nTW9kZXM6IEFycmF5PG51bWJlcj47XG4gICAgYWxsb3dWZXJ0aWNhbFBsYWNlbWVudDogYm9vbGVhbjtcbiAgICBoYXNSVExUZXh0OiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogQnVja2V0UGFyYW1ldGVyczxTeW1ib2xTdHlsZUxheWVyPikge1xuICAgICAgICB0aGlzLmNvbGxpc2lvbkJveEFycmF5ID0gb3B0aW9ucy5jb2xsaXNpb25Cb3hBcnJheTtcbiAgICAgICAgdGhpcy56b29tID0gb3B0aW9ucy56b29tO1xuICAgICAgICB0aGlzLm92ZXJzY2FsaW5nID0gb3B0aW9ucy5vdmVyc2NhbGluZztcbiAgICAgICAgdGhpcy5sYXllcnMgPSBvcHRpb25zLmxheWVycztcbiAgICAgICAgdGhpcy5sYXllcklkcyA9IHRoaXMubGF5ZXJzLm1hcChsYXllciA9PiBsYXllci5pZCk7XG4gICAgICAgIHRoaXMuaW5kZXggPSBvcHRpb25zLmluZGV4O1xuICAgICAgICB0aGlzLnBpeGVsUmF0aW8gPSBvcHRpb25zLnBpeGVsUmF0aW87XG4gICAgICAgIHRoaXMuc291cmNlTGF5ZXJJbmRleCA9IG9wdGlvbnMuc291cmNlTGF5ZXJJbmRleDtcbiAgICAgICAgdGhpcy5oYXNQYXR0ZXJuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaGFzUlRMVGV4dCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNvcnRLZXlSYW5nZXMgPSBbXTtcblxuICAgICAgICB0aGlzLmNvbGxpc2lvbkNpcmNsZUFycmF5ID0gW107XG4gICAgICAgIHRoaXMucGxhY2VtZW50SW52UHJvak1hdHJpeCA9IG1hdDQuaWRlbnRpdHkoW10pO1xuICAgICAgICB0aGlzLnBsYWNlbWVudFZpZXdwb3J0TWF0cml4ID0gbWF0NC5pZGVudGl0eShbXSk7XG5cbiAgICAgICAgY29uc3QgbGF5ZXIgPSB0aGlzLmxheWVyc1swXTtcbiAgICAgICAgY29uc3QgdW5ldmFsdWF0ZWRMYXlvdXRWYWx1ZXMgPSBsYXllci5fdW5ldmFsdWF0ZWRMYXlvdXQuX3ZhbHVlcztcblxuICAgICAgICB0aGlzLnRleHRTaXplRGF0YSA9IGdldFNpemVEYXRhKHRoaXMuem9vbSwgdW5ldmFsdWF0ZWRMYXlvdXRWYWx1ZXNbJ3RleHQtc2l6ZSddKTtcbiAgICAgICAgdGhpcy5pY29uU2l6ZURhdGEgPSBnZXRTaXplRGF0YSh0aGlzLnpvb20sIHVuZXZhbHVhdGVkTGF5b3V0VmFsdWVzWydpY29uLXNpemUnXSk7XG5cbiAgICAgICAgY29uc3QgbGF5b3V0ID0gdGhpcy5sYXllcnNbMF0ubGF5b3V0O1xuICAgICAgICBjb25zdCBzb3J0S2V5ID0gbGF5b3V0LmdldCgnc3ltYm9sLXNvcnQta2V5Jyk7XG4gICAgICAgIGNvbnN0IHpPcmRlciA9IGxheW91dC5nZXQoJ3N5bWJvbC16LW9yZGVyJyk7XG4gICAgICAgIHRoaXMuc29ydEZlYXR1cmVzQnlLZXkgPSB6T3JkZXIgIT09ICd2aWV3cG9ydC15JyAmJiBzb3J0S2V5LmNvbnN0YW50T3IoMSkgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3Qgek9yZGVyQnlWaWV3cG9ydFkgPSB6T3JkZXIgPT09ICd2aWV3cG9ydC15JyB8fCAoek9yZGVyID09PSAnYXV0bycgJiYgIXRoaXMuc29ydEZlYXR1cmVzQnlLZXkpO1xuICAgICAgICB0aGlzLnNvcnRGZWF0dXJlc0J5WSA9IHpPcmRlckJ5Vmlld3BvcnRZICYmIChsYXlvdXQuZ2V0KCd0ZXh0LWFsbG93LW92ZXJsYXAnKSB8fCBsYXlvdXQuZ2V0KCdpY29uLWFsbG93LW92ZXJsYXAnKSB8fFxuICAgICAgICAgICAgbGF5b3V0LmdldCgndGV4dC1pZ25vcmUtcGxhY2VtZW50JykgfHwgbGF5b3V0LmdldCgnaWNvbi1pZ25vcmUtcGxhY2VtZW50JykpO1xuXG4gICAgICAgIGlmIChsYXlvdXQuZ2V0KCdzeW1ib2wtcGxhY2VtZW50JykgPT09ICdwb2ludCcpIHtcbiAgICAgICAgICAgIHRoaXMud3JpdGluZ01vZGVzID0gbGF5b3V0LmdldCgndGV4dC13cml0aW5nLW1vZGUnKS5tYXAod20gPT4gV3JpdGluZ01vZGVbd21dKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcklkcyA9IHRoaXMubGF5ZXJzLmZpbHRlcigobCkgPT4gbC5pc1N0YXRlRGVwZW5kZW50KCkpLm1hcCgobCkgPT4gbC5pZCk7XG5cbiAgICAgICAgdGhpcy5zb3VyY2VJRCA9IG9wdGlvbnMuc291cmNlSUQ7XG4gICAgfVxuXG4gICAgY3JlYXRlQXJyYXlzKCkge1xuICAgICAgICB0aGlzLnRleHQgPSBuZXcgU3ltYm9sQnVmZmVycyhuZXcgUHJvZ3JhbUNvbmZpZ3VyYXRpb25TZXQoc3ltYm9sTGF5b3V0QXR0cmlidXRlcy5tZW1iZXJzLCB0aGlzLmxheWVycywgdGhpcy56b29tLCBwcm9wZXJ0eSA9PiAvXnRleHQvLnRlc3QocHJvcGVydHkpKSk7XG4gICAgICAgIHRoaXMuaWNvbiA9IG5ldyBTeW1ib2xCdWZmZXJzKG5ldyBQcm9ncmFtQ29uZmlndXJhdGlvblNldChzeW1ib2xMYXlvdXRBdHRyaWJ1dGVzLm1lbWJlcnMsIHRoaXMubGF5ZXJzLCB0aGlzLnpvb20sIHByb3BlcnR5ID0+IC9eaWNvbi8udGVzdChwcm9wZXJ0eSkpKTtcblxuICAgICAgICB0aGlzLmdseXBoT2Zmc2V0QXJyYXkgPSBuZXcgR2x5cGhPZmZzZXRBcnJheSgpO1xuICAgICAgICB0aGlzLmxpbmVWZXJ0ZXhBcnJheSA9IG5ldyBTeW1ib2xMaW5lVmVydGV4QXJyYXkoKTtcbiAgICAgICAgdGhpcy5zeW1ib2xJbnN0YW5jZXMgPSBuZXcgU3ltYm9sSW5zdGFuY2VBcnJheSgpO1xuICAgIH1cblxuICAgIGNhbGN1bGF0ZUdseXBoRGVwZW5kZW5jaWVzKHRleHQ6IHN0cmluZywgc3RhY2s6IHtbXzogbnVtYmVyXTogYm9vbGVhbn0sIHRleHRBbG9uZ0xpbmU6IGJvb2xlYW4sIGFsbG93VmVydGljYWxQbGFjZW1lbnQ6IGJvb2xlYW4sIGRvZXNBbGxvd1ZlcnRpY2FsV3JpdGluZ01vZGU6IGJvb2xlYW4pIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzdGFja1t0ZXh0LmNoYXJDb2RlQXQoaSldID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICgodGV4dEFsb25nTGluZSB8fCBhbGxvd1ZlcnRpY2FsUGxhY2VtZW50KSAmJiBkb2VzQWxsb3dWZXJ0aWNhbFdyaXRpbmdNb2RlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmVydGljYWxDaGFyID0gdmVydGljYWxpemVkQ2hhcmFjdGVyTWFwW3RleHQuY2hhckF0KGkpXTtcbiAgICAgICAgICAgICAgICBpZiAodmVydGljYWxDaGFyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YWNrW3ZlcnRpY2FsQ2hhci5jaGFyQ29kZUF0KDApXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcG9wdWxhdGUoZmVhdHVyZXM6IEFycmF5PEluZGV4ZWRGZWF0dXJlPiwgb3B0aW9uczogUG9wdWxhdGVQYXJhbWV0ZXJzLCBjYW5vbmljYWw6IENhbm9uaWNhbFRpbGVJRCkge1xuICAgICAgICBjb25zdCBsYXllciA9IHRoaXMubGF5ZXJzWzBdO1xuICAgICAgICBjb25zdCBsYXlvdXQgPSBsYXllci5sYXlvdXQ7XG5cbiAgICAgICAgY29uc3QgdGV4dEZvbnQgPSBsYXlvdXQuZ2V0KCd0ZXh0LWZvbnQnKTtcbiAgICAgICAgY29uc3QgdGV4dEZpZWxkID0gbGF5b3V0LmdldCgndGV4dC1maWVsZCcpO1xuICAgICAgICBjb25zdCBpY29uSW1hZ2UgPSBsYXlvdXQuZ2V0KCdpY29uLWltYWdlJyk7XG4gICAgICAgIGNvbnN0IGhhc1RleHQgPVxuICAgICAgICAgICAgKHRleHRGaWVsZC52YWx1ZS5raW5kICE9PSAnY29uc3RhbnQnIHx8XG4gICAgICAgICAgICAgICAgKHRleHRGaWVsZC52YWx1ZS52YWx1ZSBpbnN0YW5jZW9mIEZvcm1hdHRlZCAmJiAhdGV4dEZpZWxkLnZhbHVlLnZhbHVlLmlzRW1wdHkoKSkgfHxcbiAgICAgICAgICAgICAgICB0ZXh0RmllbGQudmFsdWUudmFsdWUudG9TdHJpbmcoKS5sZW5ndGggPiAwKSAmJlxuICAgICAgICAgICAgKHRleHRGb250LnZhbHVlLmtpbmQgIT09ICdjb25zdGFudCcgfHwgdGV4dEZvbnQudmFsdWUudmFsdWUubGVuZ3RoID4gMCk7XG4gICAgICAgIC8vIHdlIHNob3VsZCBhbHdheXMgcmVzb2x2ZSB0aGUgaWNvbi1pbWFnZSB2YWx1ZSBpZiB0aGUgcHJvcGVydHkgd2FzIGRlZmluZWQgaW4gdGhlIHN0eWxlXG4gICAgICAgIC8vIHRoaXMgYWxsb3dzIHVzIHRvIGZpcmUgdGhlIHN0eWxlaW1hZ2VtaXNzaW5nIGV2ZW50IGlmIGltYWdlIGV2YWx1YXRpb24gcmV0dXJucyBudWxsXG4gICAgICAgIC8vIHRoZSBvbmx5IHdheSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIG51bGwgcmV0dXJuZWQgZnJvbSBhIGNvYWxlc2NlIHN0YXRlbWVudCB3aXRoIG5vIHZhbGlkIGltYWdlc1xuICAgICAgICAvLyBhbmQgbnVsbCByZXR1cm5lZCBiZWNhdXNlIGljb24taW1hZ2Ugd2Fzbid0IGRlZmluZWQgaXMgdG8gY2hlY2sgd2hldGhlciBvciBub3QgaWNvbkltYWdlLnBhcmFtZXRlcnMgaXMgYW4gZW1wdHkgb2JqZWN0XG4gICAgICAgIGNvbnN0IGhhc0ljb24gPSBpY29uSW1hZ2UudmFsdWUua2luZCAhPT0gJ2NvbnN0YW50JyB8fCAhIWljb25JbWFnZS52YWx1ZS52YWx1ZSB8fCBPYmplY3Qua2V5cyhpY29uSW1hZ2UucGFyYW1ldGVycykubGVuZ3RoID4gMDtcbiAgICAgICAgY29uc3Qgc3ltYm9sU29ydEtleSA9IGxheW91dC5nZXQoJ3N5bWJvbC1zb3J0LWtleScpO1xuXG4gICAgICAgIHRoaXMuZmVhdHVyZXMgPSBbXTtcblxuICAgICAgICBpZiAoIWhhc1RleHQgJiYgIWhhc0ljb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGljb25zID0gb3B0aW9ucy5pY29uRGVwZW5kZW5jaWVzO1xuICAgICAgICBjb25zdCBzdGFja3MgPSBvcHRpb25zLmdseXBoRGVwZW5kZW5jaWVzO1xuICAgICAgICBjb25zdCBhdmFpbGFibGVJbWFnZXMgPSBvcHRpb25zLmF2YWlsYWJsZUltYWdlcztcbiAgICAgICAgY29uc3QgZ2xvYmFsUHJvcGVydGllcyA9IG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyh0aGlzLnpvb20pO1xuXG4gICAgICAgIGZvciAoY29uc3Qge2ZlYXR1cmUsIGlkLCBpbmRleCwgc291cmNlTGF5ZXJJbmRleH0gb2YgZmVhdHVyZXMpIHtcblxuICAgICAgICAgICAgY29uc3QgbmVlZEdlb21ldHJ5ID0gbGF5ZXIuX2ZlYXR1cmVGaWx0ZXIubmVlZEdlb21ldHJ5O1xuICAgICAgICAgICAgY29uc3QgZXZhbHVhdGlvbkZlYXR1cmUgPSB7dHlwZTogZmVhdHVyZS50eXBlLFxuICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IGZlYXR1cmUucHJvcGVydGllcyxcbiAgICAgICAgICAgICAgICBnZW9tZXRyeTogbmVlZEdlb21ldHJ5ID8gbG9hZEdlb21ldHJ5KGZlYXR1cmUpIDogW119O1xuXG4gICAgICAgICAgICBpZiAoIWxheWVyLl9mZWF0dXJlRmlsdGVyLmZpbHRlcihnbG9iYWxQcm9wZXJ0aWVzLCBldmFsdWF0aW9uRmVhdHVyZSwgY2Fub25pY2FsKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIW5lZWRHZW9tZXRyeSkgIGV2YWx1YXRpb25GZWF0dXJlLmdlb21ldHJ5ID0gbG9hZEdlb21ldHJ5KGZlYXR1cmUpO1xuXG4gICAgICAgICAgICBsZXQgdGV4dDogRm9ybWF0dGVkIHwgdm9pZDtcbiAgICAgICAgICAgIGlmIChoYXNUZXh0KSB7XG4gICAgICAgICAgICAgICAgLy8gRXhwcmVzc2lvbiBldmFsdWF0aW9uIHdpbGwgYXV0b21hdGljYWxseSBjb2VyY2UgdG8gRm9ybWF0dGVkXG4gICAgICAgICAgICAgICAgLy8gYnV0IHBsYWluIHN0cmluZyB0b2tlbiBldmFsdWF0aW9uIHNraXBzIHRoYXQgcGF0aHdheSBzbyBkbyB0aGVcbiAgICAgICAgICAgICAgICAvLyBjb252ZXJzaW9uIGhlcmUuXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRUb2tlbnMgPSBsYXllci5nZXRWYWx1ZUFuZFJlc29sdmVUb2tlbnMoJ3RleHQtZmllbGQnLCBldmFsdWF0aW9uRmVhdHVyZSwgY2Fub25pY2FsLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZFRleHQgPSBGb3JtYXR0ZWQuZmFjdG9yeShyZXNvbHZlZFRva2Vucyk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5zUlRMVGV4dChmb3JtYXR0ZWRUZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc1JUTFRleHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICF0aGlzLmhhc1JUTFRleHQgfHwgLy8gbm9uLXJ0bCB0ZXh0IHNvIGNhbiBwcm9jZWVkIHNhZmVseVxuICAgICAgICAgICAgICAgICAgICBnZXRSVExUZXh0UGx1Z2luU3RhdHVzKCkgPT09ICd1bmF2YWlsYWJsZScgfHwgLy8gV2UgZG9uJ3QgaW50ZW5kIHRvIGxhenktbG9hZCB0aGUgcnRsIHRleHQgcGx1Z2luLCBzbyBwcm9jZWVkIHdpdGggaW5jb3JyZWN0IHNoYXBpbmdcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNSVExUZXh0ICYmIGdsb2JhbFJUTFRleHRQbHVnaW4uaXNQYXJzZWQoKSAvLyBVc2UgdGhlIHJ0bFRleHQgcGx1Z2luIHRvIHNoYXBlIHRleHRcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHRyYW5zZm9ybVRleHQoZm9ybWF0dGVkVGV4dCwgbGF5ZXIsIGV2YWx1YXRpb25GZWF0dXJlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBpY29uOiA/UmVzb2x2ZWRJbWFnZTtcbiAgICAgICAgICAgIGlmIChoYXNJY29uKSB7XG4gICAgICAgICAgICAgICAgLy8gRXhwcmVzc2lvbiBldmFsdWF0aW9uIHdpbGwgYXV0b21hdGljYWxseSBjb2VyY2UgdG8gSW1hZ2VcbiAgICAgICAgICAgICAgICAvLyBidXQgcGxhaW4gc3RyaW5nIHRva2VuIGV2YWx1YXRpb24gc2tpcHMgdGhhdCBwYXRod2F5IHNvIGRvIHRoZVxuICAgICAgICAgICAgICAgIC8vIGNvbnZlcnNpb24gaGVyZS5cbiAgICAgICAgICAgICAgICBjb25zdCByZXNvbHZlZFRva2VucyA9IGxheWVyLmdldFZhbHVlQW5kUmVzb2x2ZVRva2VucygnaWNvbi1pbWFnZScsIGV2YWx1YXRpb25GZWF0dXJlLCBjYW5vbmljYWwsIGF2YWlsYWJsZUltYWdlcyk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc29sdmVkVG9rZW5zIGluc3RhbmNlb2YgUmVzb2x2ZWRJbWFnZSkge1xuICAgICAgICAgICAgICAgICAgICBpY29uID0gcmVzb2x2ZWRUb2tlbnM7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWNvbiA9IFJlc29sdmVkSW1hZ2UuZnJvbVN0cmluZyhyZXNvbHZlZFRva2Vucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXRleHQgJiYgIWljb24pIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNvcnRLZXkgPSB0aGlzLnNvcnRGZWF0dXJlc0J5S2V5ID9cbiAgICAgICAgICAgICAgICBzeW1ib2xTb3J0S2V5LmV2YWx1YXRlKGV2YWx1YXRpb25GZWF0dXJlLCB7fSwgY2Fub25pY2FsKSA6XG4gICAgICAgICAgICAgICAgdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICBjb25zdCBzeW1ib2xGZWF0dXJlOiBTeW1ib2xGZWF0dXJlID0ge1xuICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICAgICAgaWNvbixcbiAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgICBzb3VyY2VMYXllckluZGV4LFxuICAgICAgICAgICAgICAgIGdlb21ldHJ5OiBsb2FkR2VvbWV0cnkoZmVhdHVyZSksXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczogZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAgIHR5cGU6IHZlY3RvclRpbGVGZWF0dXJlVHlwZXNbZmVhdHVyZS50eXBlXSxcbiAgICAgICAgICAgICAgICBzb3J0S2V5XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5mZWF0dXJlcy5wdXNoKHN5bWJvbEZlYXR1cmUpO1xuXG4gICAgICAgICAgICBpZiAoaWNvbikge1xuICAgICAgICAgICAgICAgIGljb25zW2ljb24ubmFtZV0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGV4dCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvbnRTdGFjayA9IHRleHRGb250LmV2YWx1YXRlKGV2YWx1YXRpb25GZWF0dXJlLCB7fSwgY2Fub25pY2FsKS5qb2luKCcsJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGV4dEFsb25nTGluZSA9IGxheW91dC5nZXQoJ3RleHQtcm90YXRpb24tYWxpZ25tZW50JykgPT09ICdtYXAnICYmIGxheW91dC5nZXQoJ3N5bWJvbC1wbGFjZW1lbnQnKSAhPT0gJ3BvaW50JztcbiAgICAgICAgICAgICAgICB0aGlzLmFsbG93VmVydGljYWxQbGFjZW1lbnQgPSB0aGlzLndyaXRpbmdNb2RlcyAmJiB0aGlzLndyaXRpbmdNb2Rlcy5pbmRleE9mKFdyaXRpbmdNb2RlLnZlcnRpY2FsKSA+PSAwO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiB0ZXh0LnNlY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghc2VjdGlvbi5pbWFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG9lc0FsbG93VmVydGljYWxXcml0aW5nTW9kZSA9IGFsbG93c1ZlcnRpY2FsV3JpdGluZ01vZGUodGV4dC50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25Gb250ID0gc2VjdGlvbi5mb250U3RhY2sgfHwgZm9udFN0YWNrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VjdGlvblN0YWNrID0gc3RhY2tzW3NlY3Rpb25Gb250XSA9IHN0YWNrc1tzZWN0aW9uRm9udF0gfHwge307XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUdseXBoRGVwZW5kZW5jaWVzKHNlY3Rpb24udGV4dCwgc2VjdGlvblN0YWNrLCB0ZXh0QWxvbmdMaW5lLCB0aGlzLmFsbG93VmVydGljYWxQbGFjZW1lbnQsIGRvZXNBbGxvd1ZlcnRpY2FsV3JpdGluZ01vZGUpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHNlY3Rpb24gaW1hZ2UgdG8gdGhlIGxpc3Qgb2YgZGVwZW5kZW5jaWVzLlxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbnNbc2VjdGlvbi5pbWFnZS5uYW1lXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGF5b3V0LmdldCgnc3ltYm9sLXBsYWNlbWVudCcpID09PSAnbGluZScpIHtcbiAgICAgICAgICAgIC8vIE1lcmdlIGFkamFjZW50IGxpbmVzIHdpdGggdGhlIHNhbWUgdGV4dCB0byBpbXByb3ZlIGxhYmVsbGluZy5cbiAgICAgICAgICAgIC8vIEl0J3MgYmV0dGVyIHRvIHBsYWNlIGxhYmVscyBvbiBvbmUgbG9uZyBsaW5lIHRoYW4gb24gbWFueSBzaG9ydCBzZWdtZW50cy5cbiAgICAgICAgICAgIHRoaXMuZmVhdHVyZXMgPSBtZXJnZUxpbmVzKHRoaXMuZmVhdHVyZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc29ydEZlYXR1cmVzQnlLZXkpIHtcbiAgICAgICAgICAgIHRoaXMuZmVhdHVyZXMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGEuc29ydEtleSBpcyBhbHdheXMgYSBudW1iZXIgd2hlbiBzb3J0RmVhdHVyZXNCeUtleSBpcyB0cnVlXG4gICAgICAgICAgICAgICAgcmV0dXJuICgoYS5zb3J0S2V5OiBhbnkpOiBudW1iZXIpIC0gKChiLnNvcnRLZXk6IGFueSk6IG51bWJlcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZShzdGF0ZXM6IEZlYXR1cmVTdGF0ZXMsIHZ0TGF5ZXI6IFZlY3RvclRpbGVMYXllciwgaW1hZ2VQb3NpdGlvbnM6IHtbXzogc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0pIHtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJzLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICB0aGlzLnRleHQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwZGF0ZVBhaW50QXJyYXlzKHN0YXRlcywgdnRMYXllciwgdGhpcy5sYXllcnMsIGltYWdlUG9zaXRpb25zKTtcbiAgICAgICAgdGhpcy5pY29uLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGRhdGVQYWludEFycmF5cyhzdGF0ZXMsIHZ0TGF5ZXIsIHRoaXMubGF5ZXJzLCBpbWFnZVBvc2l0aW9ucyk7XG4gICAgfVxuXG4gICAgaXNFbXB0eSgpIHtcbiAgICAgICAgLy8gV2hlbiB0aGUgYnVja2V0IGVuY291bnRlcnMgb25seSBydGwtdGV4dCBidXQgdGhlIHBsdWdpbiBpc250IGxvYWRlZCwgbm8gc3ltYm9sIGluc3RhbmNlcyB3aWxsIGJlIGNyZWF0ZWQuXG4gICAgICAgIC8vIEluIG9yZGVyIGZvciB0aGUgYnVja2V0IHRvIGJlIHNlcmlhbGl6ZWQsIGFuZCBub3QgZGlzY2FyZGVkIGFzIGFuIGVtcHR5IGJ1Y2tldCBib3RoIGNoZWNrcyBhcmUgbmVjZXNzYXJ5LlxuICAgICAgICByZXR1cm4gdGhpcy5zeW1ib2xJbnN0YW5jZXMubGVuZ3RoID09PSAwICYmICF0aGlzLmhhc1JUTFRleHQ7XG4gICAgfVxuXG4gICAgdXBsb2FkUGVuZGluZygpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnVwbG9hZGVkIHx8IHRoaXMudGV4dC5wcm9ncmFtQ29uZmlndXJhdGlvbnMubmVlZHNVcGxvYWQgfHwgdGhpcy5pY29uLnByb2dyYW1Db25maWd1cmF0aW9ucy5uZWVkc1VwbG9hZDtcbiAgICB9XG5cbiAgICB1cGxvYWQoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgICBpZiAoIXRoaXMudXBsb2FkZWQgJiYgdGhpcy5oYXNEZWJ1Z0RhdGEoKSkge1xuICAgICAgICAgICAgdGhpcy50ZXh0Q29sbGlzaW9uQm94LnVwbG9hZChjb250ZXh0KTtcbiAgICAgICAgICAgIHRoaXMuaWNvbkNvbGxpc2lvbkJveC51cGxvYWQoY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50ZXh0LnVwbG9hZChjb250ZXh0LCB0aGlzLnNvcnRGZWF0dXJlc0J5WSwgIXRoaXMudXBsb2FkZWQsIHRoaXMudGV4dC5wcm9ncmFtQ29uZmlndXJhdGlvbnMubmVlZHNVcGxvYWQpO1xuICAgICAgICB0aGlzLmljb24udXBsb2FkKGNvbnRleHQsIHRoaXMuc29ydEZlYXR1cmVzQnlZLCAhdGhpcy51cGxvYWRlZCwgdGhpcy5pY29uLnByb2dyYW1Db25maWd1cmF0aW9ucy5uZWVkc1VwbG9hZCk7XG4gICAgICAgIHRoaXMudXBsb2FkZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGRlc3Ryb3lEZWJ1Z0RhdGEoKSB7XG4gICAgICAgIHRoaXMudGV4dENvbGxpc2lvbkJveC5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuaWNvbkNvbGxpc2lvbkJveC5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy50ZXh0LmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5pY29uLmRlc3Ryb3koKTtcblxuICAgICAgICBpZiAodGhpcy5oYXNEZWJ1Z0RhdGEoKSkge1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95RGVidWdEYXRhKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRUb0xpbmVWZXJ0ZXhBcnJheShhbmNob3I6IEFuY2hvciwgbGluZTogYW55KSB7XG4gICAgICAgIGNvbnN0IGxpbmVTdGFydEluZGV4ID0gdGhpcy5saW5lVmVydGV4QXJyYXkubGVuZ3RoO1xuICAgICAgICBpZiAoYW5jaG9yLnNlZ21lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbGV0IHN1bUZvcndhcmRMZW5ndGggPSBhbmNob3IuZGlzdChsaW5lW2FuY2hvci5zZWdtZW50ICsgMV0pO1xuICAgICAgICAgICAgbGV0IHN1bUJhY2t3YXJkTGVuZ3RoID0gYW5jaG9yLmRpc3QobGluZVthbmNob3Iuc2VnbWVudF0pO1xuICAgICAgICAgICAgY29uc3QgdmVydGljZXMgPSB7fTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBhbmNob3Iuc2VnbWVudCArIDE7IGkgPCBsaW5lLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmVydGljZXNbaV0gPSB7eDogbGluZVtpXS54LCB5OiBsaW5lW2ldLnksIHRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yOiBzdW1Gb3J3YXJkTGVuZ3RofTtcbiAgICAgICAgICAgICAgICBpZiAoaSA8IGxpbmUubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBzdW1Gb3J3YXJkTGVuZ3RoICs9IGxpbmVbaSArIDFdLmRpc3QobGluZVtpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGFuY2hvci5zZWdtZW50IHx8IDA7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgdmVydGljZXNbaV0gPSB7eDogbGluZVtpXS54LCB5OiBsaW5lW2ldLnksIHRpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yOiBzdW1CYWNrd2FyZExlbmd0aH07XG4gICAgICAgICAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1bUJhY2t3YXJkTGVuZ3RoICs9IGxpbmVbaSAtIDFdLmRpc3QobGluZVtpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmVydGV4ID0gdmVydGljZXNbaV07XG4gICAgICAgICAgICAgICAgdGhpcy5saW5lVmVydGV4QXJyYXkuZW1wbGFjZUJhY2sodmVydGV4LngsIHZlcnRleC55LCB2ZXJ0ZXgudGlsZVVuaXREaXN0YW5jZUZyb21BbmNob3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsaW5lU3RhcnRJbmRleCxcbiAgICAgICAgICAgIGxpbmVMZW5ndGg6IHRoaXMubGluZVZlcnRleEFycmF5Lmxlbmd0aCAtIGxpbmVTdGFydEluZGV4XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYWRkU3ltYm9scyhhcnJheXM6IFN5bWJvbEJ1ZmZlcnMsXG4gICAgICAgICAgICAgICBxdWFkczogQXJyYXk8U3ltYm9sUXVhZD4sXG4gICAgICAgICAgICAgICBzaXplVmVydGV4OiBhbnksXG4gICAgICAgICAgICAgICBsaW5lT2Zmc2V0OiBbbnVtYmVyLCBudW1iZXJdLFxuICAgICAgICAgICAgICAgYWxvbmdMaW5lOiBib29sZWFuLFxuICAgICAgICAgICAgICAgZmVhdHVyZTogU3ltYm9sRmVhdHVyZSxcbiAgICAgICAgICAgICAgIHdyaXRpbmdNb2RlOiBhbnksXG4gICAgICAgICAgICAgICBsYWJlbEFuY2hvcjogQW5jaG9yLFxuICAgICAgICAgICAgICAgbGluZVN0YXJ0SW5kZXg6IG51bWJlcixcbiAgICAgICAgICAgICAgIGxpbmVMZW5ndGg6IG51bWJlcixcbiAgICAgICAgICAgICAgIGFzc29jaWF0ZWRJY29uSW5kZXg6IG51bWJlcixcbiAgICAgICAgICAgICAgIGNhbm9uaWNhbDogQ2Fub25pY2FsVGlsZUlEKSB7XG4gICAgICAgIGNvbnN0IGluZGV4QXJyYXkgPSBhcnJheXMuaW5kZXhBcnJheTtcbiAgICAgICAgY29uc3QgbGF5b3V0VmVydGV4QXJyYXkgPSBhcnJheXMubGF5b3V0VmVydGV4QXJyYXk7XG5cbiAgICAgICAgY29uc3Qgc2VnbWVudCA9IGFycmF5cy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCg0ICogcXVhZHMubGVuZ3RoLCBsYXlvdXRWZXJ0ZXhBcnJheSwgaW5kZXhBcnJheSwgZmVhdHVyZS5zb3J0S2V5KTtcbiAgICAgICAgY29uc3QgZ2x5cGhPZmZzZXRBcnJheVN0YXJ0ID0gdGhpcy5nbHlwaE9mZnNldEFycmF5Lmxlbmd0aDtcbiAgICAgICAgY29uc3QgdmVydGV4U3RhcnRJbmRleCA9IHNlZ21lbnQudmVydGV4TGVuZ3RoO1xuXG4gICAgICAgIGNvbnN0IGFuZ2xlID0gKHRoaXMuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCAmJiB3cml0aW5nTW9kZSA9PT0gV3JpdGluZ01vZGUudmVydGljYWwpID8gTWF0aC5QSSAvIDIgOiAwO1xuXG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gZmVhdHVyZS50ZXh0ICYmIGZlYXR1cmUudGV4dC5zZWN0aW9ucztcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHF1YWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB7dGwsIHRyLCBibCwgYnIsIHRleCwgcGl4ZWxPZmZzZXRUTCwgcGl4ZWxPZmZzZXRCUiwgbWluRm9udFNjYWxlWCwgbWluRm9udFNjYWxlWSwgZ2x5cGhPZmZzZXQsIGlzU0RGLCBzZWN0aW9uSW5kZXh9ID0gcXVhZHNbaV07XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHNlZ21lbnQudmVydGV4TGVuZ3RoO1xuXG4gICAgICAgICAgICBjb25zdCB5ID0gZ2x5cGhPZmZzZXRbMV07XG4gICAgICAgICAgICBhZGRWZXJ0ZXgobGF5b3V0VmVydGV4QXJyYXksIGxhYmVsQW5jaG9yLngsIGxhYmVsQW5jaG9yLnksIHRsLngsIHkgKyB0bC55LCB0ZXgueCwgdGV4LnksIHNpemVWZXJ0ZXgsIGlzU0RGLCBwaXhlbE9mZnNldFRMLngsIHBpeGVsT2Zmc2V0VEwueSwgbWluRm9udFNjYWxlWCwgbWluRm9udFNjYWxlWSk7XG4gICAgICAgICAgICBhZGRWZXJ0ZXgobGF5b3V0VmVydGV4QXJyYXksIGxhYmVsQW5jaG9yLngsIGxhYmVsQW5jaG9yLnksIHRyLngsIHkgKyB0ci55LCB0ZXgueCArIHRleC53LCB0ZXgueSwgc2l6ZVZlcnRleCwgaXNTREYsIHBpeGVsT2Zmc2V0QlIueCwgcGl4ZWxPZmZzZXRUTC55LCBtaW5Gb250U2NhbGVYLCBtaW5Gb250U2NhbGVZKTtcbiAgICAgICAgICAgIGFkZFZlcnRleChsYXlvdXRWZXJ0ZXhBcnJheSwgbGFiZWxBbmNob3IueCwgbGFiZWxBbmNob3IueSwgYmwueCwgeSArIGJsLnksIHRleC54LCB0ZXgueSArIHRleC5oLCBzaXplVmVydGV4LCBpc1NERiwgcGl4ZWxPZmZzZXRUTC54LCBwaXhlbE9mZnNldEJSLnksIG1pbkZvbnRTY2FsZVgsIG1pbkZvbnRTY2FsZVkpO1xuICAgICAgICAgICAgYWRkVmVydGV4KGxheW91dFZlcnRleEFycmF5LCBsYWJlbEFuY2hvci54LCBsYWJlbEFuY2hvci55LCBici54LCB5ICsgYnIueSwgdGV4LnggKyB0ZXgudywgdGV4LnkgKyB0ZXguaCwgc2l6ZVZlcnRleCwgaXNTREYsIHBpeGVsT2Zmc2V0QlIueCwgcGl4ZWxPZmZzZXRCUi55LCBtaW5Gb250U2NhbGVYLCBtaW5Gb250U2NhbGVZKTtcblxuICAgICAgICAgICAgYWRkRHluYW1pY0F0dHJpYnV0ZXMoYXJyYXlzLmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSwgbGFiZWxBbmNob3IsIGFuZ2xlKTtcblxuICAgICAgICAgICAgaW5kZXhBcnJheS5lbXBsYWNlQmFjayhpbmRleCwgaW5kZXggKyAxLCBpbmRleCArIDIpO1xuICAgICAgICAgICAgaW5kZXhBcnJheS5lbXBsYWNlQmFjayhpbmRleCArIDEsIGluZGV4ICsgMiwgaW5kZXggKyAzKTtcblxuICAgICAgICAgICAgc2VnbWVudC52ZXJ0ZXhMZW5ndGggKz0gNDtcbiAgICAgICAgICAgIHNlZ21lbnQucHJpbWl0aXZlTGVuZ3RoICs9IDI7XG5cbiAgICAgICAgICAgIHRoaXMuZ2x5cGhPZmZzZXRBcnJheS5lbXBsYWNlQmFjayhnbHlwaE9mZnNldFswXSk7XG5cbiAgICAgICAgICAgIGlmIChpID09PSBxdWFkcy5sZW5ndGggLSAxIHx8IHNlY3Rpb25JbmRleCAhPT0gcXVhZHNbaSArIDFdLnNlY3Rpb25JbmRleCkge1xuICAgICAgICAgICAgICAgIGFycmF5cy5wcm9ncmFtQ29uZmlndXJhdGlvbnMucG9wdWxhdGVQYWludEFycmF5cyhsYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGgsIGZlYXR1cmUsIGZlYXR1cmUuaW5kZXgsIHt9LCBjYW5vbmljYWwsIHNlY3Rpb25zICYmIHNlY3Rpb25zW3NlY3Rpb25JbmRleF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYXJyYXlzLnBsYWNlZFN5bWJvbEFycmF5LmVtcGxhY2VCYWNrKGxhYmVsQW5jaG9yLngsIGxhYmVsQW5jaG9yLnksXG4gICAgICAgICAgICBnbHlwaE9mZnNldEFycmF5U3RhcnQsIHRoaXMuZ2x5cGhPZmZzZXRBcnJheS5sZW5ndGggLSBnbHlwaE9mZnNldEFycmF5U3RhcnQsIHZlcnRleFN0YXJ0SW5kZXgsXG4gICAgICAgICAgICBsaW5lU3RhcnRJbmRleCwgbGluZUxlbmd0aCwgKGxhYmVsQW5jaG9yLnNlZ21lbnQ6IGFueSksXG4gICAgICAgICAgICBzaXplVmVydGV4ID8gc2l6ZVZlcnRleFswXSA6IDAsIHNpemVWZXJ0ZXggPyBzaXplVmVydGV4WzFdIDogMCxcbiAgICAgICAgICAgIGxpbmVPZmZzZXRbMF0sIGxpbmVPZmZzZXRbMV0sXG4gICAgICAgICAgICB3cml0aW5nTW9kZSxcbiAgICAgICAgICAgIC8vIHBsYWNlZE9yaWVudGF0aW9uIGlzIG51bGwgaW5pdGlhbGx5OyB3aWxsIGJlIHVwZGF0ZWQgdG8gaG9yaXpvbnRhbCgxKS92ZXJ0aWNhbCgyKSBpZiBwbGFjZWRcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAoZmFsc2U6IGFueSksXG4gICAgICAgICAgICAvLyBUaGUgY3Jvc3NUaWxlSUQgaXMgb25seSBmaWxsZWQvdXNlZCBvbiB0aGUgZm9yZWdyb3VuZCBmb3IgZHluYW1pYyB0ZXh0IGFuY2hvcnNcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICBhc3NvY2lhdGVkSWNvbkluZGV4XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgX2FkZENvbGxpc2lvbkRlYnVnVmVydGV4KGxheW91dFZlcnRleEFycmF5OiBTdHJ1Y3RBcnJheSwgY29sbGlzaW9uVmVydGV4QXJyYXk6IFN0cnVjdEFycmF5LCBwb2ludDogUG9pbnQsIGFuY2hvclg6IG51bWJlciwgYW5jaG9yWTogbnVtYmVyLCBleHRydWRlOiBQb2ludCkge1xuICAgICAgICBjb2xsaXNpb25WZXJ0ZXhBcnJheS5lbXBsYWNlQmFjaygwLCAwKTtcbiAgICAgICAgcmV0dXJuIGxheW91dFZlcnRleEFycmF5LmVtcGxhY2VCYWNrKFxuICAgICAgICAgICAgLy8gcG9zXG4gICAgICAgICAgICBwb2ludC54LFxuICAgICAgICAgICAgcG9pbnQueSxcbiAgICAgICAgICAgIC8vIGFfYW5jaG9yX3Bvc1xuICAgICAgICAgICAgYW5jaG9yWCxcbiAgICAgICAgICAgIGFuY2hvclksXG4gICAgICAgICAgICAvLyBleHRydWRlXG4gICAgICAgICAgICBNYXRoLnJvdW5kKGV4dHJ1ZGUueCksXG4gICAgICAgICAgICBNYXRoLnJvdW5kKGV4dHJ1ZGUueSkpO1xuICAgIH1cblxuICAgIGFkZENvbGxpc2lvbkRlYnVnVmVydGljZXMoeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlciwgYXJyYXlzOiBDb2xsaXNpb25CdWZmZXJzLCBib3hBbmNob3JQb2ludDogUG9pbnQsIHN5bWJvbEluc3RhbmNlOiBTeW1ib2xJbnN0YW5jZSkge1xuICAgICAgICBjb25zdCBzZWdtZW50ID0gYXJyYXlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KDQsIGFycmF5cy5sYXlvdXRWZXJ0ZXhBcnJheSwgYXJyYXlzLmluZGV4QXJyYXkpO1xuICAgICAgICBjb25zdCBpbmRleCA9IHNlZ21lbnQudmVydGV4TGVuZ3RoO1xuXG4gICAgICAgIGNvbnN0IGxheW91dFZlcnRleEFycmF5ID0gYXJyYXlzLmxheW91dFZlcnRleEFycmF5O1xuICAgICAgICBjb25zdCBjb2xsaXNpb25WZXJ0ZXhBcnJheSA9IGFycmF5cy5jb2xsaXNpb25WZXJ0ZXhBcnJheTtcblxuICAgICAgICBjb25zdCBhbmNob3JYID0gc3ltYm9sSW5zdGFuY2UuYW5jaG9yWDtcbiAgICAgICAgY29uc3QgYW5jaG9yWSA9IHN5bWJvbEluc3RhbmNlLmFuY2hvclk7XG5cbiAgICAgICAgdGhpcy5fYWRkQ29sbGlzaW9uRGVidWdWZXJ0ZXgobGF5b3V0VmVydGV4QXJyYXksIGNvbGxpc2lvblZlcnRleEFycmF5LCBib3hBbmNob3JQb2ludCwgYW5jaG9yWCwgYW5jaG9yWSwgbmV3IFBvaW50KHgxLCB5MSkpO1xuICAgICAgICB0aGlzLl9hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRleChsYXlvdXRWZXJ0ZXhBcnJheSwgY29sbGlzaW9uVmVydGV4QXJyYXksIGJveEFuY2hvclBvaW50LCBhbmNob3JYLCBhbmNob3JZLCBuZXcgUG9pbnQoeDIsIHkxKSk7XG4gICAgICAgIHRoaXMuX2FkZENvbGxpc2lvbkRlYnVnVmVydGV4KGxheW91dFZlcnRleEFycmF5LCBjb2xsaXNpb25WZXJ0ZXhBcnJheSwgYm94QW5jaG9yUG9pbnQsIGFuY2hvclgsIGFuY2hvclksIG5ldyBQb2ludCh4MiwgeTIpKTtcbiAgICAgICAgdGhpcy5fYWRkQ29sbGlzaW9uRGVidWdWZXJ0ZXgobGF5b3V0VmVydGV4QXJyYXksIGNvbGxpc2lvblZlcnRleEFycmF5LCBib3hBbmNob3JQb2ludCwgYW5jaG9yWCwgYW5jaG9yWSwgbmV3IFBvaW50KHgxLCB5MikpO1xuXG4gICAgICAgIHNlZ21lbnQudmVydGV4TGVuZ3RoICs9IDQ7XG5cbiAgICAgICAgY29uc3QgaW5kZXhBcnJheTogTGluZUluZGV4QXJyYXkgPSAoYXJyYXlzLmluZGV4QXJyYXk6IGFueSk7XG4gICAgICAgIGluZGV4QXJyYXkuZW1wbGFjZUJhY2soaW5kZXgsIGluZGV4ICsgMSk7XG4gICAgICAgIGluZGV4QXJyYXkuZW1wbGFjZUJhY2soaW5kZXggKyAxLCBpbmRleCArIDIpO1xuICAgICAgICBpbmRleEFycmF5LmVtcGxhY2VCYWNrKGluZGV4ICsgMiwgaW5kZXggKyAzKTtcbiAgICAgICAgaW5kZXhBcnJheS5lbXBsYWNlQmFjayhpbmRleCArIDMsIGluZGV4KTtcblxuICAgICAgICBzZWdtZW50LnByaW1pdGl2ZUxlbmd0aCArPSA0O1xuICAgIH1cblxuICAgIGFkZERlYnVnQ29sbGlzaW9uQm94ZXMoc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyLCBzeW1ib2xJbnN0YW5jZTogU3ltYm9sSW5zdGFuY2UsIGlzVGV4dDogYm9vbGVhbikge1xuICAgICAgICBmb3IgKGxldCBiID0gc3RhcnRJbmRleDsgYiA8IGVuZEluZGV4OyBiKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGJveDogQ29sbGlzaW9uQm94ID0gKHRoaXMuY29sbGlzaW9uQm94QXJyYXkuZ2V0KGIpOiBhbnkpO1xuICAgICAgICAgICAgY29uc3QgeDEgPSBib3gueDE7XG4gICAgICAgICAgICBjb25zdCB5MSA9IGJveC55MTtcbiAgICAgICAgICAgIGNvbnN0IHgyID0gYm94LngyO1xuICAgICAgICAgICAgY29uc3QgeTIgPSBib3gueTI7XG5cbiAgICAgICAgICAgIHRoaXMuYWRkQ29sbGlzaW9uRGVidWdWZXJ0aWNlcyh4MSwgeTEsIHgyLCB5MixcbiAgICAgICAgICAgICAgICBpc1RleHQgPyB0aGlzLnRleHRDb2xsaXNpb25Cb3ggOiB0aGlzLmljb25Db2xsaXNpb25Cb3gsXG4gICAgICAgICAgICAgICAgYm94LmFuY2hvclBvaW50LCBzeW1ib2xJbnN0YW5jZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZW5lcmF0ZUNvbGxpc2lvbkRlYnVnQnVmZmVycygpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzRGVidWdEYXRhKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveURlYnVnRGF0YSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50ZXh0Q29sbGlzaW9uQm94ID0gbmV3IENvbGxpc2lvbkJ1ZmZlcnMoQ29sbGlzaW9uQm94TGF5b3V0QXJyYXksIGNvbGxpc2lvbkJveExheW91dC5tZW1iZXJzLCBMaW5lSW5kZXhBcnJheSk7XG4gICAgICAgIHRoaXMuaWNvbkNvbGxpc2lvbkJveCA9IG5ldyBDb2xsaXNpb25CdWZmZXJzKENvbGxpc2lvbkJveExheW91dEFycmF5LCBjb2xsaXNpb25Cb3hMYXlvdXQubWVtYmVycywgTGluZUluZGV4QXJyYXkpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zeW1ib2xJbnN0YW5jZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHN5bWJvbEluc3RhbmNlID0gdGhpcy5zeW1ib2xJbnN0YW5jZXMuZ2V0KGkpO1xuICAgICAgICAgICAgdGhpcy5hZGREZWJ1Z0NvbGxpc2lvbkJveGVzKHN5bWJvbEluc3RhbmNlLnRleHRCb3hTdGFydEluZGV4LCBzeW1ib2xJbnN0YW5jZS50ZXh0Qm94RW5kSW5kZXgsIHN5bWJvbEluc3RhbmNlLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuYWRkRGVidWdDb2xsaXNpb25Cb3hlcyhzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbFRleHRCb3hTdGFydEluZGV4LCBzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbFRleHRCb3hFbmRJbmRleCwgc3ltYm9sSW5zdGFuY2UsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5hZGREZWJ1Z0NvbGxpc2lvbkJveGVzKHN5bWJvbEluc3RhbmNlLmljb25Cb3hTdGFydEluZGV4LCBzeW1ib2xJbnN0YW5jZS5pY29uQm94RW5kSW5kZXgsIHN5bWJvbEluc3RhbmNlLCBmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLmFkZERlYnVnQ29sbGlzaW9uQm94ZXMoc3ltYm9sSW5zdGFuY2UudmVydGljYWxJY29uQm94U3RhcnRJbmRleCwgc3ltYm9sSW5zdGFuY2UudmVydGljYWxJY29uQm94RW5kSW5kZXgsIHN5bWJvbEluc3RhbmNlLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGVzZSBmbGF0IGFycmF5cyBhcmUgbWVhbnQgdG8gYmUgcXVpY2tlciB0byBpdGVyYXRlIG92ZXIgdGhhbiB0aGUgc291cmNlXG4gICAgLy8gQ29sbGlzaW9uQm94QXJyYXlcbiAgICBfZGVzZXJpYWxpemVDb2xsaXNpb25Cb3hlc0ZvclN5bWJvbChjb2xsaXNpb25Cb3hBcnJheTogQ29sbGlzaW9uQm94QXJyYXksXG4gICAgICAgIHRleHRTdGFydEluZGV4OiBudW1iZXIsIHRleHRFbmRJbmRleDogbnVtYmVyLFxuICAgICAgICB2ZXJ0aWNhbFRleHRTdGFydEluZGV4OiBudW1iZXIsIHZlcnRpY2FsVGV4dEVuZEluZGV4OiBudW1iZXIsXG4gICAgICAgIGljb25TdGFydEluZGV4OiBudW1iZXIsIGljb25FbmRJbmRleDogbnVtYmVyLFxuICAgICAgICB2ZXJ0aWNhbEljb25TdGFydEluZGV4OiBudW1iZXIsIHZlcnRpY2FsSWNvbkVuZEluZGV4OiBudW1iZXIpOiBDb2xsaXNpb25BcnJheXMge1xuXG4gICAgICAgIGNvbnN0IGNvbGxpc2lvbkFycmF5cyA9IHt9O1xuICAgICAgICBmb3IgKGxldCBrID0gdGV4dFN0YXJ0SW5kZXg7IGsgPCB0ZXh0RW5kSW5kZXg7IGsrKykge1xuICAgICAgICAgICAgY29uc3QgYm94OiBDb2xsaXNpb25Cb3ggPSAoY29sbGlzaW9uQm94QXJyYXkuZ2V0KGspOiBhbnkpO1xuICAgICAgICAgICAgY29sbGlzaW9uQXJyYXlzLnRleHRCb3ggPSB7eDE6IGJveC54MSwgeTE6IGJveC55MSwgeDI6IGJveC54MiwgeTI6IGJveC55MiwgYW5jaG9yUG9pbnRYOiBib3guYW5jaG9yUG9pbnRYLCBhbmNob3JQb2ludFk6IGJveC5hbmNob3JQb2ludFl9O1xuICAgICAgICAgICAgY29sbGlzaW9uQXJyYXlzLnRleHRGZWF0dXJlSW5kZXggPSBib3guZmVhdHVyZUluZGV4O1xuICAgICAgICAgICAgYnJlYWs7IC8vIE9ubHkgb25lIGJveCBhbGxvd2VkIHBlciBpbnN0YW5jZVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGsgPSB2ZXJ0aWNhbFRleHRTdGFydEluZGV4OyBrIDwgdmVydGljYWxUZXh0RW5kSW5kZXg7IGsrKykge1xuICAgICAgICAgICAgY29uc3QgYm94OiBDb2xsaXNpb25Cb3ggPSAoY29sbGlzaW9uQm94QXJyYXkuZ2V0KGspOiBhbnkpO1xuICAgICAgICAgICAgY29sbGlzaW9uQXJyYXlzLnZlcnRpY2FsVGV4dEJveCA9IHt4MTogYm94LngxLCB5MTogYm94LnkxLCB4MjogYm94LngyLCB5MjogYm94LnkyLCBhbmNob3JQb2ludFg6IGJveC5hbmNob3JQb2ludFgsIGFuY2hvclBvaW50WTogYm94LmFuY2hvclBvaW50WX07XG4gICAgICAgICAgICBjb2xsaXNpb25BcnJheXMudmVydGljYWxUZXh0RmVhdHVyZUluZGV4ID0gYm94LmZlYXR1cmVJbmRleDtcbiAgICAgICAgICAgIGJyZWFrOyAvLyBPbmx5IG9uZSBib3ggYWxsb3dlZCBwZXIgaW5zdGFuY2VcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBrID0gaWNvblN0YXJ0SW5kZXg7IGsgPCBpY29uRW5kSW5kZXg7IGsrKykge1xuICAgICAgICAgICAgLy8gQW4gaWNvbiBjYW4gb25seSBoYXZlIG9uZSBib3ggbm93LCBzbyB0aGlzIGluZGV4aW5nIGlzIGEgYml0IHZlc3RpZ2lhbC4uLlxuICAgICAgICAgICAgY29uc3QgYm94OiBDb2xsaXNpb25Cb3ggPSAoY29sbGlzaW9uQm94QXJyYXkuZ2V0KGspOiBhbnkpO1xuICAgICAgICAgICAgY29sbGlzaW9uQXJyYXlzLmljb25Cb3ggPSB7eDE6IGJveC54MSwgeTE6IGJveC55MSwgeDI6IGJveC54MiwgeTI6IGJveC55MiwgYW5jaG9yUG9pbnRYOiBib3guYW5jaG9yUG9pbnRYLCBhbmNob3JQb2ludFk6IGJveC5hbmNob3JQb2ludFl9O1xuICAgICAgICAgICAgY29sbGlzaW9uQXJyYXlzLmljb25GZWF0dXJlSW5kZXggPSBib3guZmVhdHVyZUluZGV4O1xuICAgICAgICAgICAgYnJlYWs7IC8vIE9ubHkgb25lIGJveCBhbGxvd2VkIHBlciBpbnN0YW5jZVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGsgPSB2ZXJ0aWNhbEljb25TdGFydEluZGV4OyBrIDwgdmVydGljYWxJY29uRW5kSW5kZXg7IGsrKykge1xuICAgICAgICAgICAgLy8gQW4gaWNvbiBjYW4gb25seSBoYXZlIG9uZSBib3ggbm93LCBzbyB0aGlzIGluZGV4aW5nIGlzIGEgYml0IHZlc3RpZ2lhbC4uLlxuICAgICAgICAgICAgY29uc3QgYm94OiBDb2xsaXNpb25Cb3ggPSAoY29sbGlzaW9uQm94QXJyYXkuZ2V0KGspOiBhbnkpO1xuICAgICAgICAgICAgY29sbGlzaW9uQXJyYXlzLnZlcnRpY2FsSWNvbkJveCA9IHt4MTogYm94LngxLCB5MTogYm94LnkxLCB4MjogYm94LngyLCB5MjogYm94LnkyLCBhbmNob3JQb2ludFg6IGJveC5hbmNob3JQb2ludFgsIGFuY2hvclBvaW50WTogYm94LmFuY2hvclBvaW50WX07XG4gICAgICAgICAgICBjb2xsaXNpb25BcnJheXMudmVydGljYWxJY29uRmVhdHVyZUluZGV4ID0gYm94LmZlYXR1cmVJbmRleDtcbiAgICAgICAgICAgIGJyZWFrOyAvLyBPbmx5IG9uZSBib3ggYWxsb3dlZCBwZXIgaW5zdGFuY2VcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29sbGlzaW9uQXJyYXlzO1xuICAgIH1cblxuICAgIGRlc2VyaWFsaXplQ29sbGlzaW9uQm94ZXMoY29sbGlzaW9uQm94QXJyYXk6IENvbGxpc2lvbkJveEFycmF5KSB7XG4gICAgICAgIHRoaXMuY29sbGlzaW9uQXJyYXlzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zeW1ib2xJbnN0YW5jZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHN5bWJvbEluc3RhbmNlID0gdGhpcy5zeW1ib2xJbnN0YW5jZXMuZ2V0KGkpO1xuICAgICAgICAgICAgdGhpcy5jb2xsaXNpb25BcnJheXMucHVzaCh0aGlzLl9kZXNlcmlhbGl6ZUNvbGxpc2lvbkJveGVzRm9yU3ltYm9sKFxuICAgICAgICAgICAgICAgIGNvbGxpc2lvbkJveEFycmF5LFxuICAgICAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLnRleHRCb3hTdGFydEluZGV4LFxuICAgICAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLnRleHRCb3hFbmRJbmRleCxcbiAgICAgICAgICAgICAgICBzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbFRleHRCb3hTdGFydEluZGV4LFxuICAgICAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsVGV4dEJveEVuZEluZGV4LFxuICAgICAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLmljb25Cb3hTdGFydEluZGV4LFxuICAgICAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLmljb25Cb3hFbmRJbmRleCxcbiAgICAgICAgICAgICAgICBzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbEljb25Cb3hTdGFydEluZGV4LFxuICAgICAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsSWNvbkJveEVuZEluZGV4XG4gICAgICAgICAgICApKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhc1RleHREYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0LnNlZ21lbnRzLmdldCgpLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgaGFzSWNvbkRhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmljb24uc2VnbWVudHMuZ2V0KCkubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBoYXNEZWJ1Z0RhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHRDb2xsaXNpb25Cb3ggJiYgdGhpcy5pY29uQ29sbGlzaW9uQm94O1xuICAgIH1cblxuICAgIGhhc1RleHRDb2xsaXNpb25Cb3hEYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNEZWJ1Z0RhdGEoKSAmJiB0aGlzLnRleHRDb2xsaXNpb25Cb3guc2VnbWVudHMuZ2V0KCkubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBoYXNJY29uQ29sbGlzaW9uQm94RGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzRGVidWdEYXRhKCkgJiYgdGhpcy5pY29uQ29sbGlzaW9uQm94LnNlZ21lbnRzLmdldCgpLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgYWRkSW5kaWNlc0ZvclBsYWNlZFN5bWJvbChpY29uT3JUZXh0OiBTeW1ib2xCdWZmZXJzLCBwbGFjZWRTeW1ib2xJbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHBsYWNlZFN5bWJvbCA9IGljb25PclRleHQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KHBsYWNlZFN5bWJvbEluZGV4KTtcblxuICAgICAgICBjb25zdCBlbmRJbmRleCA9IHBsYWNlZFN5bWJvbC52ZXJ0ZXhTdGFydEluZGV4ICsgcGxhY2VkU3ltYm9sLm51bUdseXBocyAqIDQ7XG4gICAgICAgIGZvciAobGV0IHZlcnRleEluZGV4ID0gcGxhY2VkU3ltYm9sLnZlcnRleFN0YXJ0SW5kZXg7IHZlcnRleEluZGV4IDwgZW5kSW5kZXg7IHZlcnRleEluZGV4ICs9IDQpIHtcbiAgICAgICAgICAgIGljb25PclRleHQuaW5kZXhBcnJheS5lbXBsYWNlQmFjayh2ZXJ0ZXhJbmRleCwgdmVydGV4SW5kZXggKyAxLCB2ZXJ0ZXhJbmRleCArIDIpO1xuICAgICAgICAgICAgaWNvbk9yVGV4dC5pbmRleEFycmF5LmVtcGxhY2VCYWNrKHZlcnRleEluZGV4ICsgMSwgdmVydGV4SW5kZXggKyAyLCB2ZXJ0ZXhJbmRleCArIDMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0U29ydGVkU3ltYm9sSW5kZXhlcyhhbmdsZTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLnNvcnRlZEFuZ2xlID09PSBhbmdsZSAmJiB0aGlzLnN5bWJvbEluc3RhbmNlSW5kZXhlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zeW1ib2xJbnN0YW5jZUluZGV4ZXM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2luID0gTWF0aC5zaW4oYW5nbGUpO1xuICAgICAgICBjb25zdCBjb3MgPSBNYXRoLmNvcyhhbmdsZSk7XG4gICAgICAgIGNvbnN0IHJvdGF0ZWRZcyA9IFtdO1xuICAgICAgICBjb25zdCBmZWF0dXJlSW5kZXhlcyA9IFtdO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc3ltYm9sSW5zdGFuY2VzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChpKTtcbiAgICAgICAgICAgIGNvbnN0IHN5bWJvbEluc3RhbmNlID0gdGhpcy5zeW1ib2xJbnN0YW5jZXMuZ2V0KGkpO1xuICAgICAgICAgICAgcm90YXRlZFlzLnB1c2goTWF0aC5yb3VuZChzaW4gKiBzeW1ib2xJbnN0YW5jZS5hbmNob3JYICsgY29zICogc3ltYm9sSW5zdGFuY2UuYW5jaG9yWSkgfCAwKTtcbiAgICAgICAgICAgIGZlYXR1cmVJbmRleGVzLnB1c2goc3ltYm9sSW5zdGFuY2UuZmVhdHVyZUluZGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdC5zb3J0KChhSW5kZXgsIGJJbmRleCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChyb3RhdGVkWXNbYUluZGV4XSAtIHJvdGF0ZWRZc1tiSW5kZXhdKSB8fFxuICAgICAgICAgICAgICAgICAgIChmZWF0dXJlSW5kZXhlc1tiSW5kZXhdIC0gZmVhdHVyZUluZGV4ZXNbYUluZGV4XSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgYWRkVG9Tb3J0S2V5UmFuZ2VzKHN5bWJvbEluc3RhbmNlSW5kZXg6IG51bWJlciwgc29ydEtleTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGxhc3QgPSB0aGlzLnNvcnRLZXlSYW5nZXNbdGhpcy5zb3J0S2V5UmFuZ2VzLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAobGFzdCAmJiBsYXN0LnNvcnRLZXkgPT09IHNvcnRLZXkpIHtcbiAgICAgICAgICAgIGxhc3Quc3ltYm9sSW5zdGFuY2VFbmQgPSBzeW1ib2xJbnN0YW5jZUluZGV4ICsgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc29ydEtleVJhbmdlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBzb3J0S2V5LFxuICAgICAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlU3RhcnQ6IHN5bWJvbEluc3RhbmNlSW5kZXgsXG4gICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2VFbmQ6IHN5bWJvbEluc3RhbmNlSW5kZXggKyAxXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNvcnRGZWF0dXJlcyhhbmdsZTogbnVtYmVyKSB7XG4gICAgICAgIGlmICghdGhpcy5zb3J0RmVhdHVyZXNCeVkpIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMuc29ydGVkQW5nbGUgPT09IGFuZ2xlKSByZXR1cm47XG5cbiAgICAgICAgLy8gVGhlIGN1cnJlbnQgYXBwcm9hY2ggdG8gc29ydGluZyBkb2Vzbid0IHNvcnQgYWNyb3NzIHNlZ21lbnRzIHNvIGRvbid0IHRyeS5cbiAgICAgICAgLy8gU29ydGluZyB3aXRoaW4gc2VnbWVudHMgc2VwYXJhdGVseSBzZWVtZWQgbm90IHRvIGJlIHdvcnRoIHRoZSBjb21wbGV4aXR5LlxuICAgICAgICBpZiAodGhpcy50ZXh0LnNlZ21lbnRzLmdldCgpLmxlbmd0aCA+IDEgfHwgdGhpcy5pY29uLnNlZ21lbnRzLmdldCgpLmxlbmd0aCA+IDEpIHJldHVybjtcblxuICAgICAgICAvLyBJZiB0aGUgc3ltYm9scyBhcmUgYWxsb3dlZCB0byBvdmVybGFwIHNvcnQgdGhlbSBieSB0aGVpciB2ZXJ0aWNhbCBzY3JlZW4gcG9zaXRpb24uXG4gICAgICAgIC8vIFRoZSBpbmRleCBhcnJheSBidWZmZXIgaXMgcmV3cml0dGVuIHRvIHJlZmVyZW5jZSB0aGUgKHVuY2hhbmdlZCkgdmVydGljZXMgaW4gdGhlXG4gICAgICAgIC8vIHNvcnRlZCBvcmRlci5cblxuICAgICAgICAvLyBUbyBhdm9pZCBzb3J0aW5nIHRoZSBhY3R1YWwgc3ltYm9sSW5zdGFuY2UgYXJyYXkgd2Ugc29ydCBhbiBhcnJheSBvZiBpbmRleGVzLlxuICAgICAgICB0aGlzLnN5bWJvbEluc3RhbmNlSW5kZXhlcyA9IHRoaXMuZ2V0U29ydGVkU3ltYm9sSW5kZXhlcyhhbmdsZSk7XG4gICAgICAgIHRoaXMuc29ydGVkQW5nbGUgPSBhbmdsZTtcblxuICAgICAgICB0aGlzLnRleHQuaW5kZXhBcnJheS5jbGVhcigpO1xuICAgICAgICB0aGlzLmljb24uaW5kZXhBcnJheS5jbGVhcigpO1xuXG4gICAgICAgIHRoaXMuZmVhdHVyZVNvcnRPcmRlciA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3QgaSBvZiB0aGlzLnN5bWJvbEluc3RhbmNlSW5kZXhlcykge1xuICAgICAgICAgICAgY29uc3Qgc3ltYm9sSW5zdGFuY2UgPSB0aGlzLnN5bWJvbEluc3RhbmNlcy5nZXQoaSk7XG4gICAgICAgICAgICB0aGlzLmZlYXR1cmVTb3J0T3JkZXIucHVzaChzeW1ib2xJbnN0YW5jZS5mZWF0dXJlSW5kZXgpO1xuXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UucmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsXG4gICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UuY2VudGVySnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LFxuICAgICAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLmxlZnRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXhcbiAgICAgICAgICAgIF0uZm9yRWFjaCgoaW5kZXgsIGksIGFycmF5KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gT25seSBhZGQgYSBnaXZlbiBpbmRleCB0aGUgZmlyc3QgdGltZSBpdCBzaG93cyB1cCxcbiAgICAgICAgICAgICAgICAvLyB0byBhdm9pZCBkdXBsaWNhdGUgb3BhY2l0eSBlbnRyaWVzIHdoZW4gbXVsdGlwbGUganVzdGlmaWNhdGlvbnNcbiAgICAgICAgICAgICAgICAvLyBzaGFyZSB0aGUgc2FtZSBnbHlwaHMuXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IDAgJiYgYXJyYXkuaW5kZXhPZihpbmRleCkgPT09IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRJbmRpY2VzRm9yUGxhY2VkU3ltYm9sKHRoaXMudGV4dCwgaW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoc3ltYm9sSW5zdGFuY2UudmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkSW5kaWNlc0ZvclBsYWNlZFN5bWJvbCh0aGlzLnRleHQsIHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHN5bWJvbEluc3RhbmNlLnBsYWNlZEljb25TeW1ib2xJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRJbmRpY2VzRm9yUGxhY2VkU3ltYm9sKHRoaXMuaWNvbiwgc3ltYm9sSW5zdGFuY2UucGxhY2VkSWNvblN5bWJvbEluZGV4KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsUGxhY2VkSWNvblN5bWJvbEluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEluZGljZXNGb3JQbGFjZWRTeW1ib2wodGhpcy5pY29uLCBzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbFBsYWNlZEljb25TeW1ib2xJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50ZXh0LmluZGV4QnVmZmVyKSB0aGlzLnRleHQuaW5kZXhCdWZmZXIudXBkYXRlRGF0YSh0aGlzLnRleHQuaW5kZXhBcnJheSk7XG4gICAgICAgIGlmICh0aGlzLmljb24uaW5kZXhCdWZmZXIpIHRoaXMuaWNvbi5pbmRleEJ1ZmZlci51cGRhdGVEYXRhKHRoaXMuaWNvbi5pbmRleEFycmF5KTtcbiAgICB9XG59XG5cbnJlZ2lzdGVyKCdTeW1ib2xCdWNrZXQnLCBTeW1ib2xCdWNrZXQsIHtcbiAgICBvbWl0OiBbJ2xheWVycycsICdjb2xsaXNpb25Cb3hBcnJheScsICdmZWF0dXJlcycsICdjb21wYXJlVGV4dCddXG59KTtcblxuLy8gdGhpcyBjb25zdGFudCBpcyBiYXNlZCBvbiB0aGUgc2l6ZSBvZiBTdHJ1Y3RBcnJheSBpbmRleGVzIHVzZWQgaW4gYSBzeW1ib2xcbi8vIGJ1Y2tldC0tbmFtZWx5LCBnbHlwaE9mZnNldEFycmF5U3RhcnRcbi8vIGVnIHRoZSBtYXggdmFsaWQgVUludDE2IGlzIDY1LDUzNVxuLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy8yOTA3IGZvciBtb3RpdmF0aW9uXG4vLyBsaW5lU3RhcnRJbmRleCBhbmQgdGV4dEJveFN0YXJ0SW5kZXggY291bGQgcG90ZW50aWFsbHkgYmUgY29uY2VybnNcbi8vIGJ1dCB3ZSBleHBlY3QgdGhlcmUgdG8gYmUgbWFueSBmZXdlciBib3hlcy9saW5lcyB0aGFuIGdseXBoc1xuU3ltYm9sQnVja2V0Lk1BWF9HTFlQSFMgPSA2NTUzNTtcblxuU3ltYm9sQnVja2V0LmFkZER5bmFtaWNBdHRyaWJ1dGVzID0gYWRkRHluYW1pY0F0dHJpYnV0ZXM7XG5cbmV4cG9ydCBkZWZhdWx0IFN5bWJvbEJ1Y2tldDtcbmV4cG9ydCB7YWRkRHluYW1pY0F0dHJpYnV0ZXN9O1xuIiwiLy8gQGZsb3dcbmV4cG9ydCBkZWZhdWx0IHJlc29sdmVUb2tlbnM7XG5cbi8qKlxuICogUmVwbGFjZSB0b2tlbnMgaW4gYSBzdHJpbmcgdGVtcGxhdGUgd2l0aCB2YWx1ZXMgaW4gYW4gb2JqZWN0XG4gKlxuICogQHBhcmFtIHByb3BlcnRpZXMgYSBrZXkvdmFsdWUgcmVsYXRpb25zaGlwIGJldHdlZW4gdG9rZW5zIGFuZCByZXBsYWNlbWVudHNcbiAqIEBwYXJhbSB0ZXh0IHRoZSB0ZW1wbGF0ZSBzdHJpbmdcbiAqIEByZXR1cm5zIHRoZSB0ZW1wbGF0ZSB3aXRoIHRva2VucyByZXBsYWNlZFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVRva2Vucyhwcm9wZXJ0aWVzOiB7K1tzdHJpbmddOiBtaXhlZH0sIHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRleHQucmVwbGFjZSgveyhbXnt9XSspfS9nLCAobWF0Y2gsIGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHJldHVybiBrZXkgaW4gcHJvcGVydGllcyA/IFN0cmluZyhwcm9wZXJ0aWVzW2tleV0pIDogJyc7XG4gICAgfSk7XG59XG4iLCIvLyBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkLiBFZGl0IGJ1aWxkL2dlbmVyYXRlLXN0eWxlLWNvZGUuanMsIHRoZW4gcnVuIGB5YXJuIHJ1biBjb2RlZ2VuYC5cbi8vIEBmbG93XG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG5pbXBvcnQgc3R5bGVTcGVjIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvcmVmZXJlbmNlL2xhdGVzdCc7XG5cbmltcG9ydCB7XG4gICAgUHJvcGVydGllcyxcbiAgICBEYXRhQ29uc3RhbnRQcm9wZXJ0eSxcbiAgICBEYXRhRHJpdmVuUHJvcGVydHksXG4gICAgQ3Jvc3NGYWRlZERhdGFEcml2ZW5Qcm9wZXJ0eSxcbiAgICBDcm9zc0ZhZGVkUHJvcGVydHksXG4gICAgQ29sb3JSYW1wUHJvcGVydHlcbn0gZnJvbSAnLi4vcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIENvbG9yIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5cbmltcG9ydCB0eXBlIEZvcm1hdHRlZCBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvZm9ybWF0dGVkJztcblxuaW1wb3J0IHR5cGUgUmVzb2x2ZWRJbWFnZSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvcmVzb2x2ZWRfaW1hZ2UnO1xuXG5pbXBvcnQge1xuICAgIENvbG9yVHlwZVxufSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBMYXlvdXRQcm9wcyA9IHt8XG4gICAgXCJzeW1ib2wtcGxhY2VtZW50XCI6IERhdGFDb25zdGFudFByb3BlcnR5PFwicG9pbnRcIiB8IFwibGluZVwiIHwgXCJsaW5lLWNlbnRlclwiPixcbiAgICBcInN5bWJvbC1zcGFjaW5nXCI6IERhdGFDb25zdGFudFByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJzeW1ib2wtYXZvaWQtZWRnZXNcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8Ym9vbGVhbj4sXG4gICAgXCJzeW1ib2wtc29ydC1rZXlcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJzeW1ib2wtei1vcmRlclwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxcImF1dG9cIiB8IFwidmlld3BvcnQteVwiIHwgXCJzb3VyY2VcIj4sXG4gICAgXCJpY29uLWFsbG93LW92ZXJsYXBcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8Ym9vbGVhbj4sXG4gICAgXCJpY29uLWlnbm9yZS1wbGFjZW1lbnRcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8Ym9vbGVhbj4sXG4gICAgXCJpY29uLW9wdGlvbmFsXCI6IERhdGFDb25zdGFudFByb3BlcnR5PGJvb2xlYW4+LFxuICAgIFwiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnRcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJtYXBcIiB8IFwidmlld3BvcnRcIiB8IFwiYXV0b1wiPixcbiAgICBcImljb24tc2l6ZVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcImljb24tdGV4dC1maXRcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJub25lXCIgfCBcIndpZHRoXCIgfCBcImhlaWdodFwiIHwgXCJib3RoXCI+LFxuICAgIFwiaWNvbi10ZXh0LWZpdC1wYWRkaW5nXCI6IERhdGFDb25zdGFudFByb3BlcnR5PFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdPixcbiAgICBcImljb24taW1hZ2VcIjogRGF0YURyaXZlblByb3BlcnR5PFJlc29sdmVkSW1hZ2U+LFxuICAgIFwiaWNvbi1yb3RhdGVcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJpY29uLXBhZGRpbmdcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbiAgICBcImljb24ta2VlcC11cHJpZ2h0XCI6IERhdGFDb25zdGFudFByb3BlcnR5PGJvb2xlYW4+LFxuICAgIFwiaWNvbi1vZmZzZXRcIjogRGF0YURyaXZlblByb3BlcnR5PFtudW1iZXIsIG51bWJlcl0+LFxuICAgIFwiaWNvbi1hbmNob3JcIjogRGF0YURyaXZlblByb3BlcnR5PFwiY2VudGVyXCIgfCBcImxlZnRcIiB8IFwicmlnaHRcIiB8IFwidG9wXCIgfCBcImJvdHRvbVwiIHwgXCJ0b3AtbGVmdFwiIHwgXCJ0b3AtcmlnaHRcIiB8IFwiYm90dG9tLWxlZnRcIiB8IFwiYm90dG9tLXJpZ2h0XCI+LFxuICAgIFwiaWNvbi1waXRjaC1hbGlnbm1lbnRcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJtYXBcIiB8IFwidmlld3BvcnRcIiB8IFwiYXV0b1wiPixcbiAgICBcInRleHQtcGl0Y2gtYWxpZ25tZW50XCI6IERhdGFDb25zdGFudFByb3BlcnR5PFwibWFwXCIgfCBcInZpZXdwb3J0XCIgfCBcImF1dG9cIj4sXG4gICAgXCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudFwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxcIm1hcFwiIHwgXCJ2aWV3cG9ydFwiIHwgXCJhdXRvXCI+LFxuICAgIFwidGV4dC1maWVsZFwiOiBEYXRhRHJpdmVuUHJvcGVydHk8Rm9ybWF0dGVkPixcbiAgICBcInRleHQtZm9udFwiOiBEYXRhRHJpdmVuUHJvcGVydHk8QXJyYXk8c3RyaW5nPj4sXG4gICAgXCJ0ZXh0LXNpemVcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJ0ZXh0LW1heC13aWR0aFwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcInRleHQtbGluZS1oZWlnaHRcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbiAgICBcInRleHQtbGV0dGVyLXNwYWNpbmdcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJ0ZXh0LWp1c3RpZnlcIjogRGF0YURyaXZlblByb3BlcnR5PFwiYXV0b1wiIHwgXCJsZWZ0XCIgfCBcImNlbnRlclwiIHwgXCJyaWdodFwiPixcbiAgICBcInRleHQtcmFkaWFsLW9mZnNldFwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcInRleHQtdmFyaWFibGUtYW5jaG9yXCI6IERhdGFDb25zdGFudFByb3BlcnR5PEFycmF5PFwiY2VudGVyXCIgfCBcImxlZnRcIiB8IFwicmlnaHRcIiB8IFwidG9wXCIgfCBcImJvdHRvbVwiIHwgXCJ0b3AtbGVmdFwiIHwgXCJ0b3AtcmlnaHRcIiB8IFwiYm90dG9tLWxlZnRcIiB8IFwiYm90dG9tLXJpZ2h0XCI+PixcbiAgICBcInRleHQtYW5jaG9yXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxcImNlbnRlclwiIHwgXCJsZWZ0XCIgfCBcInJpZ2h0XCIgfCBcInRvcFwiIHwgXCJib3R0b21cIiB8IFwidG9wLWxlZnRcIiB8IFwidG9wLXJpZ2h0XCIgfCBcImJvdHRvbS1sZWZ0XCIgfCBcImJvdHRvbS1yaWdodFwiPixcbiAgICBcInRleHQtbWF4LWFuZ2xlXCI6IERhdGFDb25zdGFudFByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJ0ZXh0LXdyaXRpbmctbW9kZVwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxBcnJheTxcImhvcml6b250YWxcIiB8IFwidmVydGljYWxcIj4+LFxuICAgIFwidGV4dC1yb3RhdGVcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJ0ZXh0LXBhZGRpbmdcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbiAgICBcInRleHQta2VlcC11cHJpZ2h0XCI6IERhdGFDb25zdGFudFByb3BlcnR5PGJvb2xlYW4+LFxuICAgIFwidGV4dC10cmFuc2Zvcm1cIjogRGF0YURyaXZlblByb3BlcnR5PFwibm9uZVwiIHwgXCJ1cHBlcmNhc2VcIiB8IFwibG93ZXJjYXNlXCI+LFxuICAgIFwidGV4dC1vZmZzZXRcIjogRGF0YURyaXZlblByb3BlcnR5PFtudW1iZXIsIG51bWJlcl0+LFxuICAgIFwidGV4dC1hbGxvdy1vdmVybGFwXCI6IERhdGFDb25zdGFudFByb3BlcnR5PGJvb2xlYW4+LFxuICAgIFwidGV4dC1pZ25vcmUtcGxhY2VtZW50XCI6IERhdGFDb25zdGFudFByb3BlcnR5PGJvb2xlYW4+LFxuICAgIFwidGV4dC1vcHRpb25hbFwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxib29sZWFuPixcbnx9O1xuXG5jb25zdCBsYXlvdXQ6IFByb3BlcnRpZXM8TGF5b3V0UHJvcHM+ID0gbmV3IFByb3BlcnRpZXMoe1xuICAgIFwic3ltYm9sLXBsYWNlbWVudFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInN5bWJvbC1wbGFjZW1lbnRcIl0pLFxuICAgIFwic3ltYm9sLXNwYWNpbmdcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJzeW1ib2wtc3BhY2luZ1wiXSksXG4gICAgXCJzeW1ib2wtYXZvaWQtZWRnZXNcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJzeW1ib2wtYXZvaWQtZWRnZXNcIl0pLFxuICAgIFwic3ltYm9sLXNvcnQta2V5XCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInN5bWJvbC1zb3J0LWtleVwiXSksXG4gICAgXCJzeW1ib2wtei1vcmRlclwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInN5bWJvbC16LW9yZGVyXCJdKSxcbiAgICBcImljb24tYWxsb3ctb3ZlcmxhcFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcImljb24tYWxsb3ctb3ZlcmxhcFwiXSksXG4gICAgXCJpY29uLWlnbm9yZS1wbGFjZW1lbnRcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJpY29uLWlnbm9yZS1wbGFjZW1lbnRcIl0pLFxuICAgIFwiaWNvbi1vcHRpb25hbFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcImljb24tb3B0aW9uYWxcIl0pLFxuICAgIFwiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnRcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJpY29uLXJvdGF0aW9uLWFsaWdubWVudFwiXSksXG4gICAgXCJpY29uLXNpemVcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1wiaWNvbi1zaXplXCJdKSxcbiAgICBcImljb24tdGV4dC1maXRcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJpY29uLXRleHQtZml0XCJdKSxcbiAgICBcImljb24tdGV4dC1maXQtcGFkZGluZ1wiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcImljb24tdGV4dC1maXQtcGFkZGluZ1wiXSksXG4gICAgXCJpY29uLWltYWdlXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcImljb24taW1hZ2VcIl0pLFxuICAgIFwiaWNvbi1yb3RhdGVcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1wiaWNvbi1yb3RhdGVcIl0pLFxuICAgIFwiaWNvbi1wYWRkaW5nXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1wiaWNvbi1wYWRkaW5nXCJdKSxcbiAgICBcImljb24ta2VlcC11cHJpZ2h0XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1wiaWNvbi1rZWVwLXVwcmlnaHRcIl0pLFxuICAgIFwiaWNvbi1vZmZzZXRcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1wiaWNvbi1vZmZzZXRcIl0pLFxuICAgIFwiaWNvbi1hbmNob3JcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1wiaWNvbi1hbmNob3JcIl0pLFxuICAgIFwiaWNvbi1waXRjaC1hbGlnbm1lbnRcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJpY29uLXBpdGNoLWFsaWdubWVudFwiXSksXG4gICAgXCJ0ZXh0LXBpdGNoLWFsaWdubWVudFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtcGl0Y2gtYWxpZ25tZW50XCJdKSxcbiAgICBcInRleHQtcm90YXRpb24tYWxpZ25tZW50XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1yb3RhdGlvbi1hbGlnbm1lbnRcIl0pLFxuICAgIFwidGV4dC1maWVsZFwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJ0ZXh0LWZpZWxkXCJdKSxcbiAgICBcInRleHQtZm9udFwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJ0ZXh0LWZvbnRcIl0pLFxuICAgIFwidGV4dC1zaXplXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtc2l6ZVwiXSksXG4gICAgXCJ0ZXh0LW1heC13aWR0aFwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJ0ZXh0LW1heC13aWR0aFwiXSksXG4gICAgXCJ0ZXh0LWxpbmUtaGVpZ2h0XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1saW5lLWhlaWdodFwiXSksXG4gICAgXCJ0ZXh0LWxldHRlci1zcGFjaW5nXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtbGV0dGVyLXNwYWNpbmdcIl0pLFxuICAgIFwidGV4dC1qdXN0aWZ5XCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtanVzdGlmeVwiXSksXG4gICAgXCJ0ZXh0LXJhZGlhbC1vZmZzZXRcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1yYWRpYWwtb2Zmc2V0XCJdKSxcbiAgICBcInRleHQtdmFyaWFibGUtYW5jaG9yXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC12YXJpYWJsZS1hbmNob3JcIl0pLFxuICAgIFwidGV4dC1hbmNob3JcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1hbmNob3JcIl0pLFxuICAgIFwidGV4dC1tYXgtYW5nbGVcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJ0ZXh0LW1heC1hbmdsZVwiXSksXG4gICAgXCJ0ZXh0LXdyaXRpbmctbW9kZVwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtd3JpdGluZy1tb2RlXCJdKSxcbiAgICBcInRleHQtcm90YXRlXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtcm90YXRlXCJdKSxcbiAgICBcInRleHQtcGFkZGluZ1wiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtcGFkZGluZ1wiXSksXG4gICAgXCJ0ZXh0LWtlZXAtdXByaWdodFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQta2VlcC11cHJpZ2h0XCJdKSxcbiAgICBcInRleHQtdHJhbnNmb3JtXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtdHJhbnNmb3JtXCJdKSxcbiAgICBcInRleHQtb2Zmc2V0XCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtb2Zmc2V0XCJdKSxcbiAgICBcInRleHQtYWxsb3ctb3ZlcmxhcFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtYWxsb3ctb3ZlcmxhcFwiXSksXG4gICAgXCJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnRcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnRcIl0pLFxuICAgIFwidGV4dC1vcHRpb25hbFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtb3B0aW9uYWxcIl0pLFxufSk7XG5cbmV4cG9ydCB0eXBlIFBhaW50UHJvcHMgPSB7fFxuICAgIFwiaWNvbi1vcGFjaXR5XCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiaWNvbi1jb2xvclwiOiBEYXRhRHJpdmVuUHJvcGVydHk8Q29sb3I+LFxuICAgIFwiaWNvbi1oYWxvLWNvbG9yXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxDb2xvcj4sXG4gICAgXCJpY29uLWhhbG8td2lkdGhcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJpY29uLWhhbG8tYmx1clwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcImljb24tdHJhbnNsYXRlXCI6IERhdGFDb25zdGFudFByb3BlcnR5PFtudW1iZXIsIG51bWJlcl0+LFxuICAgIFwiaWNvbi10cmFuc2xhdGUtYW5jaG9yXCI6IERhdGFDb25zdGFudFByb3BlcnR5PFwibWFwXCIgfCBcInZpZXdwb3J0XCI+LFxuICAgIFwidGV4dC1vcGFjaXR5XCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwidGV4dC1jb2xvclwiOiBEYXRhRHJpdmVuUHJvcGVydHk8Q29sb3I+LFxuICAgIFwidGV4dC1oYWxvLWNvbG9yXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxDb2xvcj4sXG4gICAgXCJ0ZXh0LWhhbG8td2lkdGhcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJ0ZXh0LWhhbG8tYmx1clwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcInRleHQtdHJhbnNsYXRlXCI6IERhdGFDb25zdGFudFByb3BlcnR5PFtudW1iZXIsIG51bWJlcl0+LFxuICAgIFwidGV4dC10cmFuc2xhdGUtYW5jaG9yXCI6IERhdGFDb25zdGFudFByb3BlcnR5PFwibWFwXCIgfCBcInZpZXdwb3J0XCI+LFxufH07XG5cbmNvbnN0IHBhaW50OiBQcm9wZXJ0aWVzPFBhaW50UHJvcHM+ID0gbmV3IFByb3BlcnRpZXMoe1xuICAgIFwiaWNvbi1vcGFjaXR5XCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfc3ltYm9sXCJdW1wiaWNvbi1vcGFjaXR5XCJdKSxcbiAgICBcImljb24tY29sb3JcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9zeW1ib2xcIl1bXCJpY29uLWNvbG9yXCJdKSxcbiAgICBcImljb24taGFsby1jb2xvclwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3N5bWJvbFwiXVtcImljb24taGFsby1jb2xvclwiXSksXG4gICAgXCJpY29uLWhhbG8td2lkdGhcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9zeW1ib2xcIl1bXCJpY29uLWhhbG8td2lkdGhcIl0pLFxuICAgIFwiaWNvbi1oYWxvLWJsdXJcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9zeW1ib2xcIl1bXCJpY29uLWhhbG8tYmx1clwiXSksXG4gICAgXCJpY29uLXRyYW5zbGF0ZVwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfc3ltYm9sXCJdW1wiaWNvbi10cmFuc2xhdGVcIl0pLFxuICAgIFwiaWNvbi10cmFuc2xhdGUtYW5jaG9yXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9zeW1ib2xcIl1bXCJpY29uLXRyYW5zbGF0ZS1hbmNob3JcIl0pLFxuICAgIFwidGV4dC1vcGFjaXR5XCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfc3ltYm9sXCJdW1widGV4dC1vcGFjaXR5XCJdKSxcbiAgICBcInRleHQtY29sb3JcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9zeW1ib2xcIl1bXCJ0ZXh0LWNvbG9yXCJdLCB7IHJ1bnRpbWVUeXBlOiBDb2xvclR5cGUsIGdldE92ZXJyaWRlOiAobykgPT4gby50ZXh0Q29sb3IsIGhhc092ZXJyaWRlOiAobykgPT4gISFvLnRleHRDb2xvciB9KSxcbiAgICBcInRleHQtaGFsby1jb2xvclwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3N5bWJvbFwiXVtcInRleHQtaGFsby1jb2xvclwiXSksXG4gICAgXCJ0ZXh0LWhhbG8td2lkdGhcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9zeW1ib2xcIl1bXCJ0ZXh0LWhhbG8td2lkdGhcIl0pLFxuICAgIFwidGV4dC1oYWxvLWJsdXJcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9zeW1ib2xcIl1bXCJ0ZXh0LWhhbG8tYmx1clwiXSksXG4gICAgXCJ0ZXh0LXRyYW5zbGF0ZVwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfc3ltYm9sXCJdW1widGV4dC10cmFuc2xhdGVcIl0pLFxuICAgIFwidGV4dC10cmFuc2xhdGUtYW5jaG9yXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9zeW1ib2xcIl1bXCJ0ZXh0LXRyYW5zbGF0ZS1hbmNob3JcIl0pLFxufSk7XG5cbi8vIE5vdGU6IHdpdGhvdXQgYWRkaW5nIHRoZSBleHBsaWNpdCB0eXBlIGFubm90YXRpb24sIEZsb3cgaW5mZXJzIHdlYWtlciB0eXBlc1xuLy8gZm9yIHRoZXNlIG9iamVjdHMgZnJvbSB0aGVpciB1c2UgaW4gdGhlIGNvbnN0cnVjdG9yIHRvIFN0eWxlTGF5ZXIsIGFzXG4vLyB7bGF5b3V0PzogUHJvcGVydGllczwuLi4+LCBwYWludDogUHJvcGVydGllczwuLi4+fVxuZXhwb3J0IGRlZmF1bHQgKHsgcGFpbnQsIGxheW91dCB9OiAkRXhhY3Q8e1xuICBwYWludDogUHJvcGVydGllczxQYWludFByb3BzPiwgbGF5b3V0OiBQcm9wZXJ0aWVzPExheW91dFByb3BzPlxufT4pO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7Wm9vbUNvbnN0YW50RXhwcmVzc2lvbn0gZnJvbSAnLi4vLi4vZXhwcmVzc2lvbic7XG5pbXBvcnQge051bGxUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge1Bvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZX0gZnJvbSAnLi4vLi4vLi4vc3R5bGUvcHJvcGVydGllcyc7XG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuLi8uLi8uLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGb3JtYXRTZWN0aW9uT3ZlcnJpZGU8VD4gaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuICAgIGRlZmF1bHRWYWx1ZTogUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPFQ+O1xuXG4gICAgY29uc3RydWN0b3IoZGVmYXVsdFZhbHVlOiBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8VD4pIHtcbiAgICAgICAgYXNzZXJ0KGRlZmF1bHRWYWx1ZS5wcm9wZXJ0eS5vdmVycmlkZXMgIT09IHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMudHlwZSA9IGRlZmF1bHRWYWx1ZS5wcm9wZXJ0eS5vdmVycmlkZXMgPyBkZWZhdWx0VmFsdWUucHJvcGVydHkub3ZlcnJpZGVzLnJ1bnRpbWVUeXBlIDogTnVsbFR5cGU7XG4gICAgICAgIHRoaXMuZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGN0eDogRXZhbHVhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgaWYgKGN0eC5mb3JtYXR0ZWRTZWN0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBvdmVycmlkZXMgPSB0aGlzLmRlZmF1bHRWYWx1ZS5wcm9wZXJ0eS5vdmVycmlkZXM7XG4gICAgICAgICAgICBpZiAob3ZlcnJpZGVzICYmIG92ZXJyaWRlcy5oYXNPdmVycmlkZShjdHguZm9ybWF0dGVkU2VjdGlvbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3ZlcnJpZGVzLmdldE92ZXJyaWRlKGN0eC5mb3JtYXR0ZWRTZWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjdHguZmVhdHVyZSAmJiBjdHguZmVhdHVyZVN0YXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0VmFsdWUuZXZhbHVhdGUoY3R4LmZlYXR1cmUsIGN0eC5mZWF0dXJlU3RhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFZhbHVlLnByb3BlcnR5LnNwZWNpZmljYXRpb24uZGVmYXVsdDtcbiAgICB9XG5cbiAgICBlYWNoQ2hpbGQoZm46IChfOiBFeHByZXNzaW9uKSA9PiB2b2lkKSB7XG4gICAgICAgIGlmICghdGhpcy5kZWZhdWx0VmFsdWUuaXNDb25zdGFudCgpKSB7XG4gICAgICAgICAgICBjb25zdCBleHByOiBab29tQ29uc3RhbnRFeHByZXNzaW9uPCdzb3VyY2UnPiA9ICgodGhpcy5kZWZhdWx0VmFsdWUudmFsdWUpOiBhbnkpO1xuICAgICAgICAgICAgZm4oZXhwci5fc3R5bGVFeHByZXNzaW9uLmV4cHJlc3Npb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2Fubm90IGJlIHN0YXRpY2FsbHkgZXZhbHVhdGVkLCBhcyB0aGUgb3V0cHV0IGRlcGVuZHMgb24gdGhlIGV2YWx1YXRpb24gY29udGV4dC5cbiAgICBvdXRwdXREZWZpbmVkKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG5cbnJlZ2lzdGVyKCdGb3JtYXRTZWN0aW9uT3ZlcnJpZGUnLCBGb3JtYXRTZWN0aW9uT3ZlcnJpZGUsIHtvbWl0OiBbJ2RlZmF1bHRWYWx1ZSddfSk7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZV9sYXllcic7XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBTeW1ib2xCdWNrZXQgZnJvbSAnLi4vLi4vZGF0YS9idWNrZXQvc3ltYm9sX2J1Y2tldCc7XG5pbXBvcnQgcmVzb2x2ZVRva2VucyBmcm9tICcuLi8uLi91dGlsL3Jlc29sdmVfdG9rZW5zJztcbmltcG9ydCBwcm9wZXJ0aWVzIGZyb20gJy4vc3ltYm9sX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQge1xuICAgIFRyYW5zaXRpb25hYmxlLFxuICAgIFRyYW5zaXRpb25pbmcsXG4gICAgTGF5b3V0LFxuICAgIFBvc3NpYmx5RXZhbHVhdGVkLFxuICAgIFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZSxcbiAgICBQcm9wZXJ0eVZhbHVlXG59IGZyb20gJy4uL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQge1xuICAgIGlzRXhwcmVzc2lvbixcbiAgICBTdHlsZUV4cHJlc3Npb24sXG4gICAgWm9vbUNvbnN0YW50RXhwcmVzc2lvbixcbiAgICBab29tRGVwZW5kZW50RXhwcmVzc2lvblxufSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24nO1xuXG5pbXBvcnQgdHlwZSB7QnVja2V0UGFyYW1ldGVyc30gZnJvbSAnLi4vLi4vZGF0YS9idWNrZXQnO1xuaW1wb3J0IHR5cGUge0xheW91dFByb3BzLCBQYWludFByb3BzfSBmcm9tICcuL3N5bWJvbF9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzJztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4uL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5pbXBvcnQgdHlwZSB7TGF5ZXJTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3R5cGVzJztcbmltcG9ydCB0eXBlIHtGZWF0dXJlLCBTb3VyY2VFeHByZXNzaW9uLCBDb21wb3NpdGVFeHByZXNzaW9ufSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIHtDYW5vbmljYWxUaWxlSUR9IGZyb20gJy4uLy4uL3NvdXJjZS90aWxlX2lkJztcbmltcG9ydCB7Rm9ybWF0dGVkVHlwZX0gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzJztcbmltcG9ydCB7dHlwZU9mfSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdmFsdWVzJztcbmltcG9ydCBGb3JtYXR0ZWQgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL2Zvcm1hdHRlZCc7XG5pbXBvcnQgRm9ybWF0U2VjdGlvbk92ZXJyaWRlIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9mb3JtYXRfc2VjdGlvbl9vdmVycmlkZSc7XG5pbXBvcnQgRm9ybWF0RXhwcmVzc2lvbiBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvZm9ybWF0JztcbmltcG9ydCBMaXRlcmFsIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9saXRlcmFsJztcblxuY2xhc3MgU3ltYm9sU3R5bGVMYXllciBleHRlbmRzIFN0eWxlTGF5ZXIge1xuICAgIF91bmV2YWx1YXRlZExheW91dDogTGF5b3V0PExheW91dFByb3BzPjtcbiAgICBsYXlvdXQ6IFBvc3NpYmx5RXZhbHVhdGVkPExheW91dFByb3BzPjtcblxuICAgIF90cmFuc2l0aW9uYWJsZVBhaW50OiBUcmFuc2l0aW9uYWJsZTxQYWludFByb3BzPjtcbiAgICBfdHJhbnNpdGlvbmluZ1BhaW50OiBUcmFuc2l0aW9uaW5nPFBhaW50UHJvcHM+O1xuICAgIHBhaW50OiBQb3NzaWJseUV2YWx1YXRlZDxQYWludFByb3BzPjtcblxuICAgIGNvbnN0cnVjdG9yKGxheWVyOiBMYXllclNwZWNpZmljYXRpb24pIHtcbiAgICAgICAgc3VwZXIobGF5ZXIsIHByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIHJlY2FsY3VsYXRlKHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzLCBhdmFpbGFibGVJbWFnZXM6IEFycmF5PHN0cmluZz4pIHtcbiAgICAgICAgc3VwZXIucmVjYWxjdWxhdGUocGFyYW1ldGVycywgYXZhaWxhYmxlSW1hZ2VzKTtcblxuICAgICAgICBpZiAodGhpcy5sYXlvdXQuZ2V0KCdpY29uLXJvdGF0aW9uLWFsaWdubWVudCcpID09PSAnYXV0bycpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmxheW91dC5nZXQoJ3N5bWJvbC1wbGFjZW1lbnQnKSAhPT0gJ3BvaW50Jykge1xuICAgICAgICAgICAgICAgIHRoaXMubGF5b3V0Ll92YWx1ZXNbJ2ljb24tcm90YXRpb24tYWxpZ25tZW50J10gPSAnbWFwJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXlvdXQuX3ZhbHVlc1snaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQnXSA9ICd2aWV3cG9ydCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5sYXlvdXQuZ2V0KCd0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCcpID09PSAnYXV0bycpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmxheW91dC5nZXQoJ3N5bWJvbC1wbGFjZW1lbnQnKSAhPT0gJ3BvaW50Jykge1xuICAgICAgICAgICAgICAgIHRoaXMubGF5b3V0Ll92YWx1ZXNbJ3RleHQtcm90YXRpb24tYWxpZ25tZW50J10gPSAnbWFwJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXlvdXQuX3ZhbHVlc1sndGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQnXSA9ICd2aWV3cG9ydCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB1bnNwZWNpZmllZCwgYCotcGl0Y2gtYWxpZ25tZW50YCBpbmhlcml0cyBgKi1yb3RhdGlvbi1hbGlnbm1lbnRgXG4gICAgICAgIGlmICh0aGlzLmxheW91dC5nZXQoJ3RleHQtcGl0Y2gtYWxpZ25tZW50JykgPT09ICdhdXRvJykge1xuICAgICAgICAgICAgdGhpcy5sYXlvdXQuX3ZhbHVlc1sndGV4dC1waXRjaC1hbGlnbm1lbnQnXSA9IHRoaXMubGF5b3V0LmdldCgndGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5sYXlvdXQuZ2V0KCdpY29uLXBpdGNoLWFsaWdubWVudCcpID09PSAnYXV0bycpIHtcbiAgICAgICAgICAgIHRoaXMubGF5b3V0Ll92YWx1ZXNbJ2ljb24tcGl0Y2gtYWxpZ25tZW50J10gPSB0aGlzLmxheW91dC5nZXQoJ2ljb24tcm90YXRpb24tYWxpZ25tZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5sYXlvdXQuZ2V0KCdzeW1ib2wtcGxhY2VtZW50JykgPT09ICdwb2ludCcpIHtcbiAgICAgICAgICAgIGNvbnN0IHdyaXRpbmdNb2RlcyA9IHRoaXMubGF5b3V0LmdldCgndGV4dC13cml0aW5nLW1vZGUnKTtcbiAgICAgICAgICAgIGlmICh3cml0aW5nTW9kZXMpIHtcbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgZHVwbGljYXRlcywgcHJlc2VydmluZyBvcmRlclxuICAgICAgICAgICAgICAgIGNvbnN0IGRlZHVwZWQgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG0gb2Ygd3JpdGluZ01vZGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWR1cGVkLmluZGV4T2YobSkgPCAwKSBkZWR1cGVkLnB1c2gobSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMubGF5b3V0Ll92YWx1ZXNbJ3RleHQtd3JpdGluZy1tb2RlJ10gPSBkZWR1cGVkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxheW91dC5fdmFsdWVzWyd0ZXh0LXdyaXRpbmctbW9kZSddID0gWydob3Jpem9udGFsJ107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zZXRQYWludE92ZXJyaWRlcygpO1xuICAgIH1cblxuICAgIGdldFZhbHVlQW5kUmVzb2x2ZVRva2VucyhuYW1lOiAqLCBmZWF0dXJlOiBGZWF0dXJlLCBjYW5vbmljYWw6IENhbm9uaWNhbFRpbGVJRCwgYXZhaWxhYmxlSW1hZ2VzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5sYXlvdXQuZ2V0KG5hbWUpLmV2YWx1YXRlKGZlYXR1cmUsIHt9LCBjYW5vbmljYWwsIGF2YWlsYWJsZUltYWdlcyk7XG4gICAgICAgIGNvbnN0IHVuZXZhbHVhdGVkID0gdGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQuX3ZhbHVlc1tuYW1lXTtcbiAgICAgICAgaWYgKCF1bmV2YWx1YXRlZC5pc0RhdGFEcml2ZW4oKSAmJiAhaXNFeHByZXNzaW9uKHVuZXZhbHVhdGVkLnZhbHVlKSAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVUb2tlbnMoZmVhdHVyZS5wcm9wZXJ0aWVzLCB2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgY3JlYXRlQnVja2V0KHBhcmFtZXRlcnM6IEJ1Y2tldFBhcmFtZXRlcnM8Kj4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTeW1ib2xCdWNrZXQocGFyYW1ldGVycyk7XG4gICAgfVxuXG4gICAgcXVlcnlSYWRpdXMoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcXVlcnlJbnRlcnNlY3RzRmVhdHVyZSgpOiBib29sZWFuIHtcbiAgICAgICAgYXNzZXJ0KGZhbHNlKTsgLy8gU2hvdWxkIHRha2UgYSBkaWZmZXJlbnQgcGF0aCBpbiBGZWF0dXJlSW5kZXhcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIF9zZXRQYWludE92ZXJyaWRlcygpIHtcbiAgICAgICAgZm9yIChjb25zdCBvdmVycmlkYWJsZSBvZiBwcm9wZXJ0aWVzLnBhaW50Lm92ZXJyaWRhYmxlUHJvcGVydGllcykge1xuICAgICAgICAgICAgaWYgKCFTeW1ib2xTdHlsZUxheWVyLmhhc1BhaW50T3ZlcnJpZGUodGhpcy5sYXlvdXQsIG92ZXJyaWRhYmxlKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgb3ZlcnJpZGVuID0gdGhpcy5wYWludC5nZXQob3ZlcnJpZGFibGUpO1xuICAgICAgICAgICAgY29uc3Qgb3ZlcnJpZGUgPSBuZXcgRm9ybWF0U2VjdGlvbk92ZXJyaWRlKG92ZXJyaWRlbik7XG4gICAgICAgICAgICBjb25zdCBzdHlsZUV4cHJlc3Npb24gPSBuZXcgU3R5bGVFeHByZXNzaW9uKG92ZXJyaWRlLCBvdmVycmlkZW4ucHJvcGVydHkuc3BlY2lmaWNhdGlvbik7XG4gICAgICAgICAgICBsZXQgZXhwcmVzc2lvbiA9IG51bGw7XG4gICAgICAgICAgICBpZiAob3ZlcnJpZGVuLnZhbHVlLmtpbmQgPT09ICdjb25zdGFudCcgfHwgb3ZlcnJpZGVuLnZhbHVlLmtpbmQgPT09ICdzb3VyY2UnKSB7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbiA9IChuZXcgWm9vbUNvbnN0YW50RXhwcmVzc2lvbignc291cmNlJywgc3R5bGVFeHByZXNzaW9uKTogU291cmNlRXhwcmVzc2lvbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb24gPSAobmV3IFpvb21EZXBlbmRlbnRFeHByZXNzaW9uKCdjb21wb3NpdGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlRXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVycmlkZW4udmFsdWUuem9vbVN0b3BzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlbi52YWx1ZS5faW50ZXJwb2xhdGlvblR5cGUpOiBDb21wb3NpdGVFeHByZXNzaW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGFpbnQuX3ZhbHVlc1tvdmVycmlkYWJsZV0gPSBuZXcgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlKG92ZXJyaWRlbi5wcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVycmlkZW4ucGFyYW1ldGVycyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfaGFuZGxlT3ZlcnJpZGFibGVQYWludFByb3BlcnR5VXBkYXRlPFQsIFI+KG5hbWU6IHN0cmluZywgb2xkVmFsdWU6IFByb3BlcnR5VmFsdWU8VCwgUj4sIG5ld1ZhbHVlOiBQcm9wZXJ0eVZhbHVlPFQsIFI+KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5sYXlvdXQgfHwgb2xkVmFsdWUuaXNEYXRhRHJpdmVuKCkgfHwgbmV3VmFsdWUuaXNEYXRhRHJpdmVuKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3ltYm9sU3R5bGVMYXllci5oYXNQYWludE92ZXJyaWRlKHRoaXMubGF5b3V0LCBuYW1lKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgaGFzUGFpbnRPdmVycmlkZShsYXlvdXQ6IFBvc3NpYmx5RXZhbHVhdGVkPExheW91dFByb3BzPiwgcHJvcGVydHlOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdGV4dEZpZWxkID0gbGF5b3V0LmdldCgndGV4dC1maWVsZCcpO1xuICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IHByb3BlcnRpZXMucGFpbnQucHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuICAgICAgICBsZXQgaGFzT3ZlcnJpZGVzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgY2hlY2tTZWN0aW9ucyA9IChzZWN0aW9ucykgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHNlY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5Lm92ZXJyaWRlcyAmJiBwcm9wZXJ0eS5vdmVycmlkZXMuaGFzT3ZlcnJpZGUoc2VjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzT3ZlcnJpZGVzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodGV4dEZpZWxkLnZhbHVlLmtpbmQgPT09ICdjb25zdGFudCcgJiYgdGV4dEZpZWxkLnZhbHVlLnZhbHVlIGluc3RhbmNlb2YgRm9ybWF0dGVkKSB7XG4gICAgICAgICAgICBjaGVja1NlY3Rpb25zKHRleHRGaWVsZC52YWx1ZS52YWx1ZS5zZWN0aW9ucyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGV4dEZpZWxkLnZhbHVlLmtpbmQgPT09ICdzb3VyY2UnKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGNoZWNrRXhwcmVzc2lvbiA9IChleHByZXNzaW9uOiBFeHByZXNzaW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc092ZXJyaWRlcykgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24gaW5zdGFuY2VvZiBMaXRlcmFsICYmIHR5cGVPZihleHByZXNzaW9uLnZhbHVlKSA9PT0gRm9ybWF0dGVkVHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQ6IEZvcm1hdHRlZCA9ICgoZXhwcmVzc2lvbi52YWx1ZSk6IGFueSk7XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrU2VjdGlvbnMoZm9ybWF0dGVkLnNlY3Rpb25zKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24gaW5zdGFuY2VvZiBGb3JtYXRFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrU2VjdGlvbnMoZXhwcmVzc2lvbi5zZWN0aW9ucyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbi5lYWNoQ2hpbGQoY2hlY2tFeHByZXNzaW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBleHByOiBab29tQ29uc3RhbnRFeHByZXNzaW9uPCdzb3VyY2UnPiA9ICgodGV4dEZpZWxkLnZhbHVlKTogYW55KTtcbiAgICAgICAgICAgIGlmIChleHByLl9zdHlsZUV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgICAgICBjaGVja0V4cHJlc3Npb24oZXhwci5fc3R5bGVFeHByZXNzaW9uLmV4cHJlc3Npb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGhhc092ZXJyaWRlcztcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFN5bWJvbFN0eWxlTGF5ZXI7XG4iLCIvLyBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkLiBFZGl0IGJ1aWxkL2dlbmVyYXRlLXN0eWxlLWNvZGUuanMsIHRoZW4gcnVuIGB5YXJuIHJ1biBjb2RlZ2VuYC5cbi8vIEBmbG93XG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG5pbXBvcnQgc3R5bGVTcGVjIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvcmVmZXJlbmNlL2xhdGVzdCc7XG5cbmltcG9ydCB7XG4gICAgUHJvcGVydGllcyxcbiAgICBEYXRhQ29uc3RhbnRQcm9wZXJ0eSxcbiAgICBEYXRhRHJpdmVuUHJvcGVydHksXG4gICAgQ3Jvc3NGYWRlZERhdGFEcml2ZW5Qcm9wZXJ0eSxcbiAgICBDcm9zc0ZhZGVkUHJvcGVydHksXG4gICAgQ29sb3JSYW1wUHJvcGVydHlcbn0gZnJvbSAnLi4vcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIENvbG9yIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5cbmltcG9ydCB0eXBlIEZvcm1hdHRlZCBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvZm9ybWF0dGVkJztcblxuaW1wb3J0IHR5cGUgUmVzb2x2ZWRJbWFnZSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvcmVzb2x2ZWRfaW1hZ2UnO1xuXG5cbmV4cG9ydCB0eXBlIFBhaW50UHJvcHMgPSB7fFxuICAgIFwiYmFja2dyb3VuZC1jb2xvclwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxDb2xvcj4sXG4gICAgXCJiYWNrZ3JvdW5kLXBhdHRlcm5cIjogQ3Jvc3NGYWRlZFByb3BlcnR5PFJlc29sdmVkSW1hZ2U+LFxuICAgIFwiYmFja2dyb3VuZC1vcGFjaXR5XCI6IERhdGFDb25zdGFudFByb3BlcnR5PG51bWJlcj4sXG58fTtcblxuY29uc3QgcGFpbnQ6IFByb3BlcnRpZXM8UGFpbnRQcm9wcz4gPSBuZXcgUHJvcGVydGllcyh7XG4gICAgXCJiYWNrZ3JvdW5kLWNvbG9yXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9iYWNrZ3JvdW5kXCJdW1wiYmFja2dyb3VuZC1jb2xvclwiXSksXG4gICAgXCJiYWNrZ3JvdW5kLXBhdHRlcm5cIjogbmV3IENyb3NzRmFkZWRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9iYWNrZ3JvdW5kXCJdW1wiYmFja2dyb3VuZC1wYXR0ZXJuXCJdKSxcbiAgICBcImJhY2tncm91bmQtb3BhY2l0eVwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfYmFja2dyb3VuZFwiXVtcImJhY2tncm91bmQtb3BhY2l0eVwiXSksXG59KTtcblxuLy8gTm90ZTogd2l0aG91dCBhZGRpbmcgdGhlIGV4cGxpY2l0IHR5cGUgYW5ub3RhdGlvbiwgRmxvdyBpbmZlcnMgd2Vha2VyIHR5cGVzXG4vLyBmb3IgdGhlc2Ugb2JqZWN0cyBmcm9tIHRoZWlyIHVzZSBpbiB0aGUgY29uc3RydWN0b3IgdG8gU3R5bGVMYXllciwgYXNcbi8vIHtsYXlvdXQ/OiBQcm9wZXJ0aWVzPC4uLj4sIHBhaW50OiBQcm9wZXJ0aWVzPC4uLj59XG5leHBvcnQgZGVmYXVsdCAoeyBwYWludCB9OiAkRXhhY3Q8e1xuICBwYWludDogUHJvcGVydGllczxQYWludFByb3BzPlxufT4pO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGVfbGF5ZXInO1xuXG5pbXBvcnQgcHJvcGVydGllcyBmcm9tICcuL2JhY2tncm91bmRfc3R5bGVfbGF5ZXJfcHJvcGVydGllcyc7XG5pbXBvcnQge1RyYW5zaXRpb25hYmxlLCBUcmFuc2l0aW9uaW5nLCBQb3NzaWJseUV2YWx1YXRlZH0gZnJvbSAnLi4vcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIHtQYWludFByb3BzfSBmcm9tICcuL2JhY2tncm91bmRfc3R5bGVfbGF5ZXJfcHJvcGVydGllcyc7XG5pbXBvcnQgdHlwZSB7TGF5ZXJTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuY2xhc3MgQmFja2dyb3VuZFN0eWxlTGF5ZXIgZXh0ZW5kcyBTdHlsZUxheWVyIHtcbiAgICBfdHJhbnNpdGlvbmFibGVQYWludDogVHJhbnNpdGlvbmFibGU8UGFpbnRQcm9wcz47XG4gICAgX3RyYW5zaXRpb25pbmdQYWludDogVHJhbnNpdGlvbmluZzxQYWludFByb3BzPjtcbiAgICBwYWludDogUG9zc2libHlFdmFsdWF0ZWQ8UGFpbnRQcm9wcz47XG5cbiAgICBjb25zdHJ1Y3RvcihsYXllcjogTGF5ZXJTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHN1cGVyKGxheWVyLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJhY2tncm91bmRTdHlsZUxheWVyO1xuIiwiLy8gVGhpcyBmaWxlIGlzIGdlbmVyYXRlZC4gRWRpdCBidWlsZC9nZW5lcmF0ZS1zdHlsZS1jb2RlLmpzLCB0aGVuIHJ1biBgeWFybiBydW4gY29kZWdlbmAuXG4vLyBAZmxvd1xuLyogZXNsaW50LWRpc2FibGUgKi9cblxuaW1wb3J0IHN0eWxlU3BlYyBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3JlZmVyZW5jZS9sYXRlc3QnO1xuXG5pbXBvcnQge1xuICAgIFByb3BlcnRpZXMsXG4gICAgRGF0YUNvbnN0YW50UHJvcGVydHksXG4gICAgRGF0YURyaXZlblByb3BlcnR5LFxuICAgIENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHksXG4gICAgQ3Jvc3NGYWRlZFByb3BlcnR5LFxuICAgIENvbG9yUmFtcFByb3BlcnR5XG59IGZyb20gJy4uL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgdHlwZSBDb2xvciBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuXG5pbXBvcnQgdHlwZSBGb3JtYXR0ZWQgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL2Zvcm1hdHRlZCc7XG5cbmltcG9ydCB0eXBlIFJlc29sdmVkSW1hZ2UgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL3Jlc29sdmVkX2ltYWdlJztcblxuXG5leHBvcnQgdHlwZSBQYWludFByb3BzID0ge3xcbiAgICBcInJhc3Rlci1vcGFjaXR5XCI6IERhdGFDb25zdGFudFByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJyYXN0ZXItaHVlLXJvdGF0ZVwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwicmFzdGVyLWJyaWdodG5lc3MtbWluXCI6IERhdGFDb25zdGFudFByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJyYXN0ZXItYnJpZ2h0bmVzcy1tYXhcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbiAgICBcInJhc3Rlci1zYXR1cmF0aW9uXCI6IERhdGFDb25zdGFudFByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJyYXN0ZXItY29udHJhc3RcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbiAgICBcInJhc3Rlci1yZXNhbXBsaW5nXCI6IERhdGFDb25zdGFudFByb3BlcnR5PFwibGluZWFyXCIgfCBcIm5lYXJlc3RcIj4sXG4gICAgXCJyYXN0ZXItZmFkZS1kdXJhdGlvblwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxufH07XG5cbmNvbnN0IHBhaW50OiBQcm9wZXJ0aWVzPFBhaW50UHJvcHM+ID0gbmV3IFByb3BlcnRpZXMoe1xuICAgIFwicmFzdGVyLW9wYWNpdHlcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3Jhc3RlclwiXVtcInJhc3Rlci1vcGFjaXR5XCJdKSxcbiAgICBcInJhc3Rlci1odWUtcm90YXRlXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9yYXN0ZXJcIl1bXCJyYXN0ZXItaHVlLXJvdGF0ZVwiXSksXG4gICAgXCJyYXN0ZXItYnJpZ2h0bmVzcy1taW5cIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3Jhc3RlclwiXVtcInJhc3Rlci1icmlnaHRuZXNzLW1pblwiXSksXG4gICAgXCJyYXN0ZXItYnJpZ2h0bmVzcy1tYXhcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3Jhc3RlclwiXVtcInJhc3Rlci1icmlnaHRuZXNzLW1heFwiXSksXG4gICAgXCJyYXN0ZXItc2F0dXJhdGlvblwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfcmFzdGVyXCJdW1wicmFzdGVyLXNhdHVyYXRpb25cIl0pLFxuICAgIFwicmFzdGVyLWNvbnRyYXN0XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9yYXN0ZXJcIl1bXCJyYXN0ZXItY29udHJhc3RcIl0pLFxuICAgIFwicmFzdGVyLXJlc2FtcGxpbmdcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3Jhc3RlclwiXVtcInJhc3Rlci1yZXNhbXBsaW5nXCJdKSxcbiAgICBcInJhc3Rlci1mYWRlLWR1cmF0aW9uXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9yYXN0ZXJcIl1bXCJyYXN0ZXItZmFkZS1kdXJhdGlvblwiXSksXG59KTtcblxuLy8gTm90ZTogd2l0aG91dCBhZGRpbmcgdGhlIGV4cGxpY2l0IHR5cGUgYW5ub3RhdGlvbiwgRmxvdyBpbmZlcnMgd2Vha2VyIHR5cGVzXG4vLyBmb3IgdGhlc2Ugb2JqZWN0cyBmcm9tIHRoZWlyIHVzZSBpbiB0aGUgY29uc3RydWN0b3IgdG8gU3R5bGVMYXllciwgYXNcbi8vIHtsYXlvdXQ/OiBQcm9wZXJ0aWVzPC4uLj4sIHBhaW50OiBQcm9wZXJ0aWVzPC4uLj59XG5leHBvcnQgZGVmYXVsdCAoeyBwYWludCB9OiAkRXhhY3Q8e1xuICBwYWludDogUHJvcGVydGllczxQYWludFByb3BzPlxufT4pO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGVfbGF5ZXInO1xuXG5pbXBvcnQgcHJvcGVydGllcyBmcm9tICcuL3Jhc3Rlcl9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzJztcbmltcG9ydCB7VHJhbnNpdGlvbmFibGUsIFRyYW5zaXRpb25pbmcsIFBvc3NpYmx5RXZhbHVhdGVkfSBmcm9tICcuLi9wcm9wZXJ0aWVzJztcblxuaW1wb3J0IHR5cGUge1BhaW50UHJvcHN9IGZyb20gJy4vcmFzdGVyX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuaW1wb3J0IHR5cGUge0xheWVyU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmNsYXNzIFJhc3RlclN0eWxlTGF5ZXIgZXh0ZW5kcyBTdHlsZUxheWVyIHtcbiAgICBfdHJhbnNpdGlvbmFibGVQYWludDogVHJhbnNpdGlvbmFibGU8UGFpbnRQcm9wcz47XG4gICAgX3RyYW5zaXRpb25pbmdQYWludDogVHJhbnNpdGlvbmluZzxQYWludFByb3BzPjtcbiAgICBwYWludDogUG9zc2libHlFdmFsdWF0ZWQ8UGFpbnRQcm9wcz47XG5cbiAgICBjb25zdHJ1Y3RvcihsYXllcjogTGF5ZXJTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHN1cGVyKGxheWVyLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJhc3RlclN0eWxlTGF5ZXI7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vLi4vdWkvbWFwJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxudHlwZSBDdXN0b21SZW5kZXJNZXRob2QgPSAoZ2w6IFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgbWF0cml4OiBBcnJheTxudW1iZXI+KSA9PiB2b2lkO1xuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgY3VzdG9tIHN0eWxlIGxheWVycy4gVGhpcyBpcyBhIHNwZWNpZmljYXRpb24gZm9yXG4gKiBpbXBsZW1lbnRlcnMgdG8gbW9kZWw6IGl0IGlzIG5vdCBhbiBleHBvcnRlZCBtZXRob2Qgb3IgY2xhc3MuXG4gKlxuICogQ3VzdG9tIGxheWVycyBhbGxvdyBhIHVzZXIgdG8gcmVuZGVyIGRpcmVjdGx5IGludG8gdGhlIG1hcCdzIEdMIGNvbnRleHQgdXNpbmcgdGhlIG1hcCdzIGNhbWVyYS5cbiAqIFRoZXNlIGxheWVycyBjYW4gYmUgYWRkZWQgYmV0d2VlbiBhbnkgcmVndWxhciBsYXllcnMgdXNpbmcge0BsaW5rIE1hcCNhZGRMYXllcn0uXG4gKlxuICogQ3VzdG9tIGxheWVycyBtdXN0IGhhdmUgYSB1bmlxdWUgYGlkYCBhbmQgbXVzdCBoYXZlIHRoZSBgdHlwZWAgb2YgYFwiY3VzdG9tXCJgLlxuICogVGhleSBtdXN0IGltcGxlbWVudCBgcmVuZGVyYCBhbmQgbWF5IGltcGxlbWVudCBgcHJlcmVuZGVyYCwgYG9uQWRkYCBhbmQgYG9uUmVtb3ZlYC5cbiAqIFRoZXkgY2FuIHRyaWdnZXIgcmVuZGVyaW5nIHVzaW5nIHtAbGluayBNYXAjdHJpZ2dlclJlcGFpbnR9XG4gKiBhbmQgdGhleSBzaG91bGQgYXBwcm9wcmlhdGVseSBoYW5kbGUge0BsaW5rIE1hcC5ldmVudDp3ZWJnbGNvbnRleHRsb3N0fSBhbmRcbiAqIHtAbGluayBNYXAuZXZlbnQ6d2ViZ2xjb250ZXh0cmVzdG9yZWR9LlxuICpcbiAqIFRoZSBgcmVuZGVyaW5nTW9kZWAgcHJvcGVydHkgY29udHJvbHMgd2hldGhlciB0aGUgbGF5ZXIgaXMgdHJlYXRlZCBhcyBhIGBcIjJkXCJgIG9yIGBcIjNkXCJgIG1hcCBsYXllci4gVXNlOlxuICogLSBgXCJyZW5kZXJpbmdNb2RlXCI6IFwiM2RcImAgdG8gdXNlIHRoZSBkZXB0aCBidWZmZXIgYW5kIHNoYXJlIGl0IHdpdGggb3RoZXIgbGF5ZXJzXG4gKiAtIGBcInJlbmRlcmluZ01vZGVcIjogXCIyZFwiYCB0byBhZGQgYSBsYXllciB3aXRoIG5vIGRlcHRoLiBJZiB5b3UgbmVlZCB0byB1c2UgdGhlIGRlcHRoIGJ1ZmZlciBmb3IgYSBgXCIyZFwiYCBsYXllciB5b3UgbXVzdCB1c2UgYW4gb2Zmc2NyZWVuXG4gKiAgIGZyYW1lYnVmZmVyIGFuZCB7QGxpbmsgQ3VzdG9tTGF5ZXJJbnRlcmZhY2UjcHJlcmVuZGVyfVxuICpcbiAqIEBpbnRlcmZhY2UgQ3VzdG9tTGF5ZXJJbnRlcmZhY2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZCBBIHVuaXF1ZSBsYXllciBpZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlIFRoZSBsYXllcidzIHR5cGUuIE11c3QgYmUgYFwiY3VzdG9tXCJgLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHJlbmRlcmluZ01vZGUgRWl0aGVyIGBcIjJkXCJgIG9yIGBcIjNkXCJgLiBEZWZhdWx0cyB0byBgXCIyZFwiYC5cbiAqIEBleGFtcGxlXG4gKiAvLyBDdXN0b20gbGF5ZXIgaW1wbGVtZW50ZWQgYXMgRVM2IGNsYXNzXG4gKiBjbGFzcyBOdWxsSXNsYW5kTGF5ZXIge1xuICogICAgIGNvbnN0cnVjdG9yKCkge1xuICogICAgICAgICB0aGlzLmlkID0gJ251bGwtaXNsYW5kJztcbiAqICAgICAgICAgdGhpcy50eXBlID0gJ2N1c3RvbSc7XG4gKiAgICAgICAgIHRoaXMucmVuZGVyaW5nTW9kZSA9ICcyZCc7XG4gKiAgICAgfVxuICpcbiAqICAgICBvbkFkZChtYXAsIGdsKSB7XG4gKiAgICAgICAgIGNvbnN0IHZlcnRleFNvdXJjZSA9IGBcbiAqICAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xuICogICAgICAgICB2b2lkIG1haW4oKSB7XG4gKiAgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogdmVjNCgwLjUsIDAuNSwgMC4wLCAxLjApO1xuICogICAgICAgICAgICAgZ2xfUG9pbnRTaXplID0gMjAuMDtcbiAqICAgICAgICAgfWA7XG4gKlxuICogICAgICAgICBjb25zdCBmcmFnbWVudFNvdXJjZSA9IGBcbiAqICAgICAgICAgdm9pZCBtYWluKCkge1xuICogICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjAsIDAuMCwgMC4wLCAxLjApO1xuICogICAgICAgICB9YDtcbiAqXG4gKiAgICAgICAgIGNvbnN0IHZlcnRleFNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlcihnbC5WRVJURVhfU0hBREVSKTtcbiAqICAgICAgICAgZ2wuc2hhZGVyU291cmNlKHZlcnRleFNoYWRlciwgdmVydGV4U291cmNlKTtcbiAqICAgICAgICAgZ2wuY29tcGlsZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpO1xuICogICAgICAgICBjb25zdCBmcmFnbWVudFNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlcihnbC5GUkFHTUVOVF9TSEFERVIpO1xuICogICAgICAgICBnbC5zaGFkZXJTb3VyY2UoZnJhZ21lbnRTaGFkZXIsIGZyYWdtZW50U291cmNlKTtcbiAqICAgICAgICAgZ2wuY29tcGlsZVNoYWRlcihmcmFnbWVudFNoYWRlcik7XG4gKlxuICogICAgICAgICB0aGlzLnByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7XG4gKiAgICAgICAgIGdsLmF0dGFjaFNoYWRlcih0aGlzLnByb2dyYW0sIHZlcnRleFNoYWRlcik7XG4gKiAgICAgICAgIGdsLmF0dGFjaFNoYWRlcih0aGlzLnByb2dyYW0sIGZyYWdtZW50U2hhZGVyKTtcbiAqICAgICAgICAgZ2wubGlua1Byb2dyYW0odGhpcy5wcm9ncmFtKTtcbiAqICAgICB9XG4gKlxuICogICAgIHJlbmRlcihnbCwgbWF0cml4KSB7XG4gKiAgICAgICAgIGdsLnVzZVByb2dyYW0odGhpcy5wcm9ncmFtKTtcbiAqICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDRmdihnbC5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5wcm9ncmFtLCBcInVfbWF0cml4XCIpLCBmYWxzZSwgbWF0cml4KTtcbiAqICAgICAgICAgZ2wuZHJhd0FycmF5cyhnbC5QT0lOVFMsIDAsIDEpO1xuICogICAgIH1cbiAqIH1cbiAqXG4gKiBtYXAub24oJ2xvYWQnLCBmdW5jdGlvbigpIHtcbiAqICAgICBtYXAuYWRkTGF5ZXIobmV3IE51bGxJc2xhbmRMYXllcigpKTtcbiAqIH0pO1xuICovXG5cbi8qKlxuICogT3B0aW9uYWwgbWV0aG9kIGNhbGxlZCB3aGVuIHRoZSBsYXllciBoYXMgYmVlbiBhZGRlZCB0byB0aGUgTWFwIHdpdGgge0BsaW5rIE1hcCNhZGRMYXllcn0uIFRoaXNcbiAqIGdpdmVzIHRoZSBsYXllciBhIGNoYW5jZSB0byBpbml0aWFsaXplIGdsIHJlc291cmNlcyBhbmQgcmVnaXN0ZXIgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIEN1c3RvbUxheWVySW50ZXJmYWNlXG4gKiBAaW5zdGFuY2VcbiAqIEBuYW1lIG9uQWRkXG4gKiBAcGFyYW0ge01hcH0gbWFwIFRoZSBNYXAgdGhpcyBjdXN0b20gbGF5ZXIgd2FzIGp1c3QgYWRkZWQgdG8uXG4gKiBAcGFyYW0ge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIGdsIGNvbnRleHQgZm9yIHRoZSBtYXAuXG4gKi9cblxuLyoqXG4gKiBPcHRpb25hbCBtZXRob2QgY2FsbGVkIHdoZW4gdGhlIGxheWVyIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgTWFwIHdpdGgge0BsaW5rIE1hcCNyZW1vdmVMYXllcn0uIFRoaXNcbiAqIGdpdmVzIHRoZSBsYXllciBhIGNoYW5jZSB0byBjbGVhbiB1cCBnbCByZXNvdXJjZXMgYW5kIGV2ZW50IGxpc3RlbmVycy5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBDdXN0b21MYXllckludGVyZmFjZVxuICogQGluc3RhbmNlXG4gKiBAbmFtZSBvblJlbW92ZVxuICogQHBhcmFtIHtNYXB9IG1hcCBUaGUgTWFwIHRoaXMgY3VzdG9tIGxheWVyIHdhcyBqdXN0IGFkZGVkIHRvLlxuICogQHBhcmFtIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBnbCBjb250ZXh0IGZvciB0aGUgbWFwLlxuICovXG5cbi8qKlxuICogT3B0aW9uYWwgbWV0aG9kIGNhbGxlZCBkdXJpbmcgYSByZW5kZXIgZnJhbWUgdG8gYWxsb3cgYSBsYXllciB0byBwcmVwYXJlIHJlc291cmNlcyBvciByZW5kZXIgaW50byBhIHRleHR1cmUuXG4gKlxuICogVGhlIGxheWVyIGNhbm5vdCBtYWtlIGFueSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgY3VycmVudCBHTCBzdGF0ZSBhbmQgbXVzdCBiaW5kIGEgZnJhbWVidWZmZXIgYmVmb3JlIHJlbmRlcmluZy5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBDdXN0b21MYXllckludGVyZmFjZVxuICogQGluc3RhbmNlXG4gKiBAbmFtZSBwcmVyZW5kZXJcbiAqIEBwYXJhbSB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgbWFwJ3MgZ2wgY29udGV4dC5cbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gbWF0cml4IFRoZSBtYXAncyBjYW1lcmEgbWF0cml4LiBJdCBwcm9qZWN0cyBzcGhlcmljYWwgbWVyY2F0b3JcbiAqIGNvb3JkaW5hdGVzIHRvIGdsIGNvb3JkaW5hdGVzLiBUaGUgbWVyY2F0b3IgY29vcmRpbmF0ZSBgWzAsIDBdYCByZXByZXNlbnRzIHRoZVxuICogdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBtZXJjYXRvciB3b3JsZCBhbmQgYFsxLCAxXWAgcmVwcmVzZW50cyB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lci4gV2hlblxuICogdGhlIGByZW5kZXJpbmdNb2RlYCBpcyBgXCIzZFwiYCwgdGhlIHogY29vcmRpbmF0ZSBpcyBjb25mb3JtYWwuIEEgYm94IHdpdGggaWRlbnRpY2FsIHgsIHksIGFuZCB6XG4gKiBsZW5ndGhzIGluIG1lcmNhdG9yIHVuaXRzIHdvdWxkIGJlIHJlbmRlcmVkIGFzIGEgY3ViZS4ge0BsaW5rIE1lcmNhdG9yQ29vcmRpbmF0ZX0uZnJvbUxhdExuZ1xuICogY2FuIGJlIHVzZWQgdG8gcHJvamVjdCBhIGBMbmdMYXRgIHRvIGEgbWVyY2F0b3IgY29vcmRpbmF0ZS5cbiAqL1xuXG4vKipcbiAqIENhbGxlZCBkdXJpbmcgYSByZW5kZXIgZnJhbWUgYWxsb3dpbmcgdGhlIGxheWVyIHRvIGRyYXcgaW50byB0aGUgR0wgY29udGV4dC5cbiAqXG4gKiBUaGUgbGF5ZXIgY2FuIGFzc3VtZSBibGVuZGluZyBhbmQgZGVwdGggc3RhdGUgaXMgc2V0IHRvIGFsbG93IHRoZSBsYXllciB0byBwcm9wZXJseVxuICogYmxlbmQgYW5kIGNsaXAgb3RoZXIgbGF5ZXJzLiBUaGUgbGF5ZXIgY2Fubm90IG1ha2UgYW55IG90aGVyIGFzc3VtcHRpb25zIGFib3V0IHRoZVxuICogY3VycmVudCBHTCBzdGF0ZS5cbiAqXG4gKiBJZiB0aGUgbGF5ZXIgbmVlZHMgdG8gcmVuZGVyIHRvIGEgdGV4dHVyZSwgaXQgc2hvdWxkIGltcGxlbWVudCB0aGUgYHByZXJlbmRlcmAgbWV0aG9kXG4gKiB0byBkbyB0aGlzIGFuZCBvbmx5IHVzZSB0aGUgYHJlbmRlcmAgbWV0aG9kIGZvciBkcmF3aW5nIGRpcmVjdGx5IGludG8gdGhlIG1haW4gZnJhbWVidWZmZXIuXG4gKlxuICogVGhlIGJsZW5kIGZ1bmN0aW9uIGlzIHNldCB0byBgZ2wuYmxlbmRGdW5jKGdsLk9ORSwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQSlgLiBUaGlzIGV4cGVjdHNcbiAqIGNvbG9ycyB0byBiZSBwcm92aWRlZCBpbiBwcmVtdWx0aXBsaWVkIGFscGhhIGZvcm0gd2hlcmUgdGhlIGByYCwgYGdgIGFuZCBgYmAgdmFsdWVzIGFyZSBhbHJlYWR5XG4gKiBtdWx0aXBsaWVkIGJ5IHRoZSBgYWAgdmFsdWUuIElmIHlvdSBhcmUgdW5hYmxlIHRvIHByb3ZpZGUgY29sb3JzIGluIHByZW11bHRpcGxpZWQgZm9ybSB5b3VcbiAqIG1heSB3YW50IHRvIGNoYW5nZSB0aGUgYmxlbmQgZnVuY3Rpb24gdG9cbiAqIGBnbC5ibGVuZEZ1bmNTZXBhcmF0ZShnbC5TUkNfQUxQSEEsIGdsLk9ORV9NSU5VU19TUkNfQUxQSEEsIGdsLk9ORSwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQSlgLlxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIEN1c3RvbUxheWVySW50ZXJmYWNlXG4gKiBAaW5zdGFuY2VcbiAqIEBuYW1lIHJlbmRlclxuICogQHBhcmFtIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBtYXAncyBnbCBjb250ZXh0LlxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBtYXRyaXggVGhlIG1hcCdzIGNhbWVyYSBtYXRyaXguIEl0IHByb2plY3RzIHNwaGVyaWNhbCBtZXJjYXRvclxuICogY29vcmRpbmF0ZXMgdG8gZ2wgY29vcmRpbmF0ZXMuIFRoZSBzcGhlcmljYWwgbWVyY2F0b3IgY29vcmRpbmF0ZSBgWzAsIDBdYCByZXByZXNlbnRzIHRoZVxuICogdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBtZXJjYXRvciB3b3JsZCBhbmQgYFsxLCAxXWAgcmVwcmVzZW50cyB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lci4gV2hlblxuICogdGhlIGByZW5kZXJpbmdNb2RlYCBpcyBgXCIzZFwiYCwgdGhlIHogY29vcmRpbmF0ZSBpcyBjb25mb3JtYWwuIEEgYm94IHdpdGggaWRlbnRpY2FsIHgsIHksIGFuZCB6XG4gKiBsZW5ndGhzIGluIG1lcmNhdG9yIHVuaXRzIHdvdWxkIGJlIHJlbmRlcmVkIGFzIGEgY3ViZS4ge0BsaW5rIE1lcmNhdG9yQ29vcmRpbmF0ZX0uZnJvbUxhdExuZ1xuICogY2FuIGJlIHVzZWQgdG8gcHJvamVjdCBhIGBMbmdMYXRgIHRvIGEgbWVyY2F0b3IgY29vcmRpbmF0ZS5cbiAqL1xuZXhwb3J0IHR5cGUgQ3VzdG9tTGF5ZXJJbnRlcmZhY2UgPSB7XG4gICAgaWQ6IHN0cmluZyxcbiAgICB0eXBlOiBcImN1c3RvbVwiLFxuICAgIHJlbmRlcmluZ01vZGU6IFwiMmRcIiB8IFwiM2RcIixcbiAgICByZW5kZXI6IEN1c3RvbVJlbmRlck1ldGhvZCxcbiAgICBwcmVyZW5kZXI6ID9DdXN0b21SZW5kZXJNZXRob2QsXG4gICAgb25BZGQ6ID8obWFwOiBNYXAsIGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQpID0+IHZvaWQsXG4gICAgb25SZW1vdmU6ID8obWFwOiBNYXAsIGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQpID0+IHZvaWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQ3VzdG9tU3R5bGVMYXllcihsYXllck9iamVjdDogQ3VzdG9tTGF5ZXJJbnRlcmZhY2UpIHtcbiAgICBjb25zdCBlcnJvcnMgPSBbXTtcbiAgICBjb25zdCBpZCA9IGxheWVyT2JqZWN0LmlkO1xuXG4gICAgaWYgKGlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goe1xuICAgICAgICAgICAgbWVzc2FnZTogYGxheWVycy4ke2lkfTogbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSBcImlkXCJgXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChsYXllck9iamVjdC5yZW5kZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlcnJvcnMucHVzaCh7XG4gICAgICAgICAgICBtZXNzYWdlOiBgbGF5ZXJzLiR7aWR9OiBtaXNzaW5nIHJlcXVpcmVkIG1ldGhvZCBcInJlbmRlclwiYFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAobGF5ZXJPYmplY3QucmVuZGVyaW5nTW9kZSAmJlxuICAgICAgICBsYXllck9iamVjdC5yZW5kZXJpbmdNb2RlICE9PSAnMmQnICYmXG4gICAgICAgIGxheWVyT2JqZWN0LnJlbmRlcmluZ01vZGUgIT09ICczZCcpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goe1xuICAgICAgICAgICAgbWVzc2FnZTogYGxheWVycy4ke2lkfTogcHJvcGVydHkgXCJyZW5kZXJpbmdNb2RlXCIgbXVzdCBiZSBlaXRoZXIgXCIyZFwiIG9yIFwiM2RcImBcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycztcbn1cblxuY2xhc3MgQ3VzdG9tU3R5bGVMYXllciBleHRlbmRzIFN0eWxlTGF5ZXIge1xuXG4gICAgaW1wbGVtZW50YXRpb246IEN1c3RvbUxheWVySW50ZXJmYWNlO1xuXG4gICAgY29uc3RydWN0b3IoaW1wbGVtZW50YXRpb246IEN1c3RvbUxheWVySW50ZXJmYWNlKSB7XG4gICAgICAgIHN1cGVyKGltcGxlbWVudGF0aW9uLCB7fSk7XG4gICAgICAgIHRoaXMuaW1wbGVtZW50YXRpb24gPSBpbXBsZW1lbnRhdGlvbjtcbiAgICB9XG5cbiAgICBpczNEKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbXBsZW1lbnRhdGlvbi5yZW5kZXJpbmdNb2RlID09PSAnM2QnO1xuICAgIH1cblxuICAgIGhhc09mZnNjcmVlblBhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmltcGxlbWVudGF0aW9uLnByZXJlbmRlciAhPT0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJlY2FsY3VsYXRlKCkge31cbiAgICB1cGRhdGVUcmFuc2l0aW9ucygpIHt9XG4gICAgaGFzVHJhbnNpdGlvbigpIHt9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIGFzc2VydChmYWxzZSwgXCJDdXN0b20gbGF5ZXJzIGNhbm5vdCBiZSBzZXJpYWxpemVkXCIpO1xuICAgIH1cblxuICAgIG9uQWRkKG1hcDogTWFwKSB7XG4gICAgICAgIGlmICh0aGlzLmltcGxlbWVudGF0aW9uLm9uQWRkKSB7XG4gICAgICAgICAgICB0aGlzLmltcGxlbWVudGF0aW9uLm9uQWRkKG1hcCwgbWFwLnBhaW50ZXIuY29udGV4dC5nbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblJlbW92ZShtYXA6IE1hcCkge1xuICAgICAgICBpZiAodGhpcy5pbXBsZW1lbnRhdGlvbi5vblJlbW92ZSkge1xuICAgICAgICAgICAgdGhpcy5pbXBsZW1lbnRhdGlvbi5vblJlbW92ZShtYXAsIG1hcC5wYWludGVyLmNvbnRleHQuZ2wpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDdXN0b21TdHlsZUxheWVyO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGNpcmNsZSBmcm9tICcuL3N0eWxlX2xheWVyL2NpcmNsZV9zdHlsZV9sYXllcic7XG5pbXBvcnQgaGVhdG1hcCBmcm9tICcuL3N0eWxlX2xheWVyL2hlYXRtYXBfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IGhpbGxzaGFkZSBmcm9tICcuL3N0eWxlX2xheWVyL2hpbGxzaGFkZV9zdHlsZV9sYXllcic7XG5pbXBvcnQgZmlsbCBmcm9tICcuL3N0eWxlX2xheWVyL2ZpbGxfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IGZpbGxFeHRydXNpb24gZnJvbSAnLi9zdHlsZV9sYXllci9maWxsX2V4dHJ1c2lvbl9zdHlsZV9sYXllcic7XG5pbXBvcnQgbGluZSBmcm9tICcuL3N0eWxlX2xheWVyL2xpbmVfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHN5bWJvbCBmcm9tICcuL3N0eWxlX2xheWVyL3N5bWJvbF9zdHlsZV9sYXllcic7XG5pbXBvcnQgYmFja2dyb3VuZCBmcm9tICcuL3N0eWxlX2xheWVyL2JhY2tncm91bmRfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHJhc3RlciBmcm9tICcuL3N0eWxlX2xheWVyL3Jhc3Rlcl9zdHlsZV9sYXllcic7XG5pbXBvcnQgQ3VzdG9tU3R5bGVMYXllciBmcm9tICcuL3N0eWxlX2xheWVyL2N1c3RvbV9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSB7Q3VzdG9tTGF5ZXJJbnRlcmZhY2V9IGZyb20gJy4vc3R5bGVfbGF5ZXIvY3VzdG9tX3N0eWxlX2xheWVyJztcblxuaW1wb3J0IHR5cGUge0xheWVyU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmNvbnN0IHN1YmNsYXNzZXMgPSB7XG4gICAgY2lyY2xlLFxuICAgIGhlYXRtYXAsXG4gICAgaGlsbHNoYWRlLFxuICAgIGZpbGwsXG4gICAgJ2ZpbGwtZXh0cnVzaW9uJzogZmlsbEV4dHJ1c2lvbixcbiAgICBsaW5lLFxuICAgIHN5bWJvbCxcbiAgICBiYWNrZ3JvdW5kLFxuICAgIHJhc3RlclxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlU3R5bGVMYXllcihsYXllcjogTGF5ZXJTcGVjaWZpY2F0aW9uIHwgQ3VzdG9tTGF5ZXJJbnRlcmZhY2UpIHtcbiAgICBpZiAobGF5ZXIudHlwZSA9PT0gJ2N1c3RvbScpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDdXN0b21TdHlsZUxheWVyKGxheWVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IHN1YmNsYXNzZXNbbGF5ZXIudHlwZV0obGF5ZXIpO1xuICAgIH1cbn1cblxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHdpbmRvdyBmcm9tICcuLi91dGlsL3dpbmRvdyc7XG5jb25zdCB7SFRNTEltYWdlRWxlbWVudCwgSFRNTENhbnZhc0VsZW1lbnQsIEhUTUxWaWRlb0VsZW1lbnQsIEltYWdlRGF0YSwgSW1hZ2VCaXRtYXB9ID0gd2luZG93O1xuXG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1JHQkFJbWFnZSwgQWxwaGFJbWFnZX0gZnJvbSAnLi4vdXRpbC9pbWFnZSc7XG5cbmV4cG9ydCB0eXBlIFRleHR1cmVGb3JtYXQgPVxuICAgIHwgJFByb3BlcnR5VHlwZTxXZWJHTFJlbmRlcmluZ0NvbnRleHQsICdSR0JBJz5cbiAgICB8ICRQcm9wZXJ0eVR5cGU8V2ViR0xSZW5kZXJpbmdDb250ZXh0LCAnQUxQSEEnPjtcbmV4cG9ydCB0eXBlIFRleHR1cmVGaWx0ZXIgPVxuICAgIHwgJFByb3BlcnR5VHlwZTxXZWJHTFJlbmRlcmluZ0NvbnRleHQsICdMSU5FQVInPlxuICAgIHwgJFByb3BlcnR5VHlwZTxXZWJHTFJlbmRlcmluZ0NvbnRleHQsICdMSU5FQVJfTUlQTUFQX05FQVJFU1QnPlxuICAgIHwgJFByb3BlcnR5VHlwZTxXZWJHTFJlbmRlcmluZ0NvbnRleHQsICdORUFSRVNUJz47XG5leHBvcnQgdHlwZSBUZXh0dXJlV3JhcCA9XG4gICAgfCAkUHJvcGVydHlUeXBlPFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgJ1JFUEVBVCc+XG4gICAgfCAkUHJvcGVydHlUeXBlPFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgJ0NMQU1QX1RPX0VER0UnPlxuICAgIHwgJFByb3BlcnR5VHlwZTxXZWJHTFJlbmRlcmluZ0NvbnRleHQsICdNSVJST1JFRF9SRVBFQVQnPjtcblxudHlwZSBFbXB0eUltYWdlID0ge1xuICAgIHdpZHRoOiBudW1iZXIsXG4gICAgaGVpZ2h0OiBudW1iZXIsXG4gICAgZGF0YTogbnVsbFxufVxuXG5leHBvcnQgdHlwZSBUZXh0dXJlSW1hZ2UgPVxuICAgIHwgUkdCQUltYWdlXG4gICAgfCBBbHBoYUltYWdlXG4gICAgfCBIVE1MSW1hZ2VFbGVtZW50XG4gICAgfCBIVE1MQ2FudmFzRWxlbWVudFxuICAgIHwgSFRNTFZpZGVvRWxlbWVudFxuICAgIHwgSW1hZ2VEYXRhXG4gICAgfCBFbXB0eUltYWdlXG4gICAgfCBJbWFnZUJpdG1hcDtcblxuY2xhc3MgVGV4dHVyZSB7XG4gICAgY29udGV4dDogQ29udGV4dDtcbiAgICBzaXplOiBbbnVtYmVyLCBudW1iZXJdO1xuICAgIHRleHR1cmU6IFdlYkdMVGV4dHVyZTtcbiAgICBmb3JtYXQ6IFRleHR1cmVGb3JtYXQ7XG4gICAgZmlsdGVyOiA/VGV4dHVyZUZpbHRlcjtcbiAgICB3cmFwOiA/VGV4dHVyZVdyYXA7XG4gICAgdXNlTWlwbWFwOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCwgaW1hZ2U6IFRleHR1cmVJbWFnZSwgZm9ybWF0OiBUZXh0dXJlRm9ybWF0LCBvcHRpb25zOiA/eyBwcmVtdWx0aXBseT86IGJvb2xlYW4sIHVzZU1pcG1hcD86IGJvb2xlYW4gfSkge1xuICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICB0aGlzLmZvcm1hdCA9IGZvcm1hdDtcbiAgICAgICAgdGhpcy50ZXh0dXJlID0gY29udGV4dC5nbC5jcmVhdGVUZXh0dXJlKCk7XG4gICAgICAgIHRoaXMudXBkYXRlKGltYWdlLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICB1cGRhdGUoaW1hZ2U6IFRleHR1cmVJbWFnZSwgb3B0aW9uczogP3twcmVtdWx0aXBseT86IGJvb2xlYW4sIHVzZU1pcG1hcD86IGJvb2xlYW59LCBwb3NpdGlvbj86IHsgeDogbnVtYmVyLCB5OiBudW1iZXIgfSkge1xuICAgICAgICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSBpbWFnZTtcbiAgICAgICAgY29uc3QgcmVzaXplID0gKCF0aGlzLnNpemUgfHwgdGhpcy5zaXplWzBdICE9PSB3aWR0aCB8fCB0aGlzLnNpemVbMV0gIT09IGhlaWdodCkgJiYgIXBvc2l0aW9uO1xuICAgICAgICBjb25zdCB7Y29udGV4dH0gPSB0aGlzO1xuICAgICAgICBjb25zdCB7Z2x9ID0gY29udGV4dDtcblxuICAgICAgICB0aGlzLnVzZU1pcG1hcCA9IEJvb2xlYW4ob3B0aW9ucyAmJiBvcHRpb25zLnVzZU1pcG1hcCk7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZSk7XG5cbiAgICAgICAgY29udGV4dC5waXhlbFN0b3JlVW5wYWNrRmxpcFkuc2V0KGZhbHNlKTtcbiAgICAgICAgY29udGV4dC5waXhlbFN0b3JlVW5wYWNrLnNldCgxKTtcbiAgICAgICAgY29udGV4dC5waXhlbFN0b3JlVW5wYWNrUHJlbXVsdGlwbHlBbHBoYS5zZXQodGhpcy5mb3JtYXQgPT09IGdsLlJHQkEgJiYgKCFvcHRpb25zIHx8IG9wdGlvbnMucHJlbXVsdGlwbHkgIT09IGZhbHNlKSk7XG5cbiAgICAgICAgaWYgKHJlc2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5zaXplID0gW3dpZHRoLCBoZWlnaHRdO1xuXG4gICAgICAgICAgICBpZiAoaW1hZ2UgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50IHx8IGltYWdlIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQgfHwgaW1hZ2UgaW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50IHx8IGltYWdlIGluc3RhbmNlb2YgSW1hZ2VEYXRhIHx8IChJbWFnZUJpdG1hcCAmJiBpbWFnZSBpbnN0YW5jZW9mIEltYWdlQml0bWFwKSkge1xuICAgICAgICAgICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgdGhpcy5mb3JtYXQsIHRoaXMuZm9ybWF0LCBnbC5VTlNJR05FRF9CWVRFLCBpbWFnZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgdGhpcy5mb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIHRoaXMuZm9ybWF0LCBnbC5VTlNJR05FRF9CWVRFLCBpbWFnZS5kYXRhKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qge3gsIHl9ID0gcG9zaXRpb24gfHwge3g6IDAsIHk6IDB9O1xuICAgICAgICAgICAgaWYgKGltYWdlIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudCB8fCBpbWFnZSBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50IHx8IGltYWdlIGluc3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudCB8fCBpbWFnZSBpbnN0YW5jZW9mIEltYWdlRGF0YSB8fCAoSW1hZ2VCaXRtYXAgJiYgaW1hZ2UgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCkpIHtcbiAgICAgICAgICAgICAgICBnbC50ZXhTdWJJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIHgsIHksIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGltYWdlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2wudGV4U3ViSW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBpbWFnZS5kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnVzZU1pcG1hcCAmJiB0aGlzLmlzU2l6ZVBvd2VyT2ZUd28oKSkge1xuICAgICAgICAgICAgZ2wuZ2VuZXJhdGVNaXBtYXAoZ2wuVEVYVFVSRV8yRCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBiaW5kKGZpbHRlcjogVGV4dHVyZUZpbHRlciwgd3JhcDogVGV4dHVyZVdyYXAsIG1pbkZpbHRlcjogP1RleHR1cmVGaWx0ZXIpIHtcbiAgICAgICAgY29uc3Qge2NvbnRleHR9ID0gdGhpcztcbiAgICAgICAgY29uc3Qge2dsfSA9IGNvbnRleHQ7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRoaXMudGV4dHVyZSk7XG5cbiAgICAgICAgaWYgKG1pbkZpbHRlciA9PT0gZ2wuTElORUFSX01JUE1BUF9ORUFSRVNUICYmICF0aGlzLmlzU2l6ZVBvd2VyT2ZUd28oKSkge1xuICAgICAgICAgICAgbWluRmlsdGVyID0gZ2wuTElORUFSO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbHRlciAhPT0gdGhpcy5maWx0ZXIpIHtcbiAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBmaWx0ZXIpO1xuICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIG1pbkZpbHRlciB8fCBmaWx0ZXIpO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXIgPSBmaWx0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAod3JhcCAhPT0gdGhpcy53cmFwKSB7XG4gICAgICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9TLCB3cmFwKTtcbiAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIHdyYXApO1xuICAgICAgICAgICAgdGhpcy53cmFwID0gd3JhcDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzU2l6ZVBvd2VyT2ZUd28oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNpemVbMF0gPT09IHRoaXMuc2l6ZVsxXSAmJiAoTWF0aC5sb2codGhpcy5zaXplWzBdKSAvIE1hdGguTE4yKSAlIDEgPT09IDA7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgY29uc3Qge2dsfSA9IHRoaXMuY29udGV4dDtcbiAgICAgICAgZ2wuZGVsZXRlVGV4dHVyZSh0aGlzLnRleHR1cmUpO1xuICAgICAgICB0aGlzLnRleHR1cmUgPSAobnVsbDogYW55KTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRleHR1cmU7XG4iLCIvLyBAZmxvd1xuXG4vKipcbiAqIEludm9rZXMgdGhlIHdyYXBwZWQgZnVuY3Rpb24gaW4gYSBub24tYmxvY2tpbmcgd2F5IHdoZW4gdHJpZ2dlcigpIGlzIGNhbGxlZC4gSW52b2NhdGlvbiByZXF1ZXN0c1xuICogYXJlIGlnbm9yZWQgdW50aWwgdGhlIGZ1bmN0aW9uIHdhcyBhY3R1YWxseSBpbnZva2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFRocm90dGxlZEludm9rZXIge1xuICAgIF9jaGFubmVsOiBNZXNzYWdlQ2hhbm5lbDtcbiAgICBfdHJpZ2dlcmVkOiBib29sZWFuO1xuICAgIF9jYWxsYmFjazogRnVuY3Rpb25cblxuICAgIGNvbnN0cnVjdG9yKGNhbGxiYWNrOiBGdW5jdGlvbikge1xuICAgICAgICB0aGlzLl9jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICB0aGlzLl90cmlnZ2VyZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKHR5cGVvZiBNZXNzYWdlQ2hhbm5lbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWwucG9ydDIub25tZXNzYWdlID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdHJpZ2dlcigpIHtcbiAgICAgICAgaWYgKCF0aGlzLl90cmlnZ2VyZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJlZCA9IHRydWU7XG4gICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWwucG9ydDEucG9zdE1lc3NhZ2UodHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZSgpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuX2NoYW5uZWw7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrID0gKCkgPT4ge307XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBUaHJvdHRsZWRJbnZva2VyO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtiaW5kQWxsLCBpc1dvcmtlciwgaXNTYWZhcml9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgd2luZG93IGZyb20gJy4vd2luZG93JztcbmltcG9ydCB7c2VyaWFsaXplLCBkZXNlcmlhbGl6ZX0gZnJvbSAnLi93ZWJfd29ya2VyX3RyYW5zZmVyJztcbmltcG9ydCBUaHJvdHRsZWRJbnZva2VyIGZyb20gJy4vdGhyb3R0bGVkX2ludm9rZXInO1xuXG5pbXBvcnQgdHlwZSB7VHJhbnNmZXJhYmxlfSBmcm9tICcuLi90eXBlcy90cmFuc2ZlcmFibGUnO1xuaW1wb3J0IHR5cGUge0NhbmNlbGFibGV9IGZyb20gJy4uL3R5cGVzL2NhbmNlbGFibGUnO1xuXG4vKipcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBbQWN0b3IgZGVzaWduIHBhdHRlcm5dKGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQWN0b3JfbW9kZWwpXG4gKiB0aGF0IG1haW50YWlucyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYXN5bmNocm9ub3VzIHRhc2tzIGFuZCB0aGUgb2JqZWN0c1xuICogdGhhdCBzcGluIHRoZW0gb2ZmIC0gaW4gdGhpcyBjYXNlLCB0YXNrcyBsaWtlIHBhcnNpbmcgcGFydHMgb2Ygc3R5bGVzLFxuICogb3duZWQgYnkgdGhlIHN0eWxlc1xuICpcbiAqIEBwYXJhbSB7V2ViV29ya2VyfSB0YXJnZXRcbiAqIEBwYXJhbSB7V2ViV29ya2VyfSBwYXJlbnRcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gbWFwSWQgQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIE1hcCBpbnN0YW5jZSB1c2luZyB0aGlzIEFjdG9yLlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgQWN0b3Ige1xuICAgIHRhcmdldDogYW55O1xuICAgIHBhcmVudDogYW55O1xuICAgIG1hcElkOiA/bnVtYmVyO1xuICAgIGNhbGxiYWNrczogeyBudW1iZXI6IGFueSB9O1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB0YXNrczogeyBudW1iZXI6IGFueSB9O1xuICAgIHRhc2tRdWV1ZTogQXJyYXk8bnVtYmVyPjtcbiAgICBjYW5jZWxDYWxsYmFja3M6IHsgbnVtYmVyOiBDYW5jZWxhYmxlIH07XG4gICAgaW52b2tlcjogVGhyb3R0bGVkSW52b2tlcjtcbiAgICBnbG9iYWxTY29wZTogYW55O1xuXG4gICAgY29uc3RydWN0b3IodGFyZ2V0OiBhbnksIHBhcmVudDogYW55LCBtYXBJZDogP251bWJlcikge1xuICAgICAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHRoaXMubWFwSWQgPSBtYXBJZDtcbiAgICAgICAgdGhpcy5jYWxsYmFja3MgPSB7fTtcbiAgICAgICAgdGhpcy50YXNrcyA9IHt9O1xuICAgICAgICB0aGlzLnRhc2tRdWV1ZSA9IFtdO1xuICAgICAgICB0aGlzLmNhbmNlbENhbGxiYWNrcyA9IHt9O1xuICAgICAgICBiaW5kQWxsKFsncmVjZWl2ZScsICdwcm9jZXNzJ10sIHRoaXMpO1xuICAgICAgICB0aGlzLmludm9rZXIgPSBuZXcgVGhyb3R0bGVkSW52b2tlcih0aGlzLnByb2Nlc3MpO1xuICAgICAgICB0aGlzLnRhcmdldC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgdGhpcy5yZWNlaXZlLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuZ2xvYmFsU2NvcGUgPSBpc1dvcmtlcigpID8gdGFyZ2V0IDogd2luZG93O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbmRzIGEgbWVzc2FnZSBmcm9tIGEgbWFpbi10aHJlYWQgbWFwIHRvIGEgV29ya2VyIG9yIGZyb20gYSBXb3JrZXIgYmFjayB0b1xuICAgICAqIGEgbWFpbi10aHJlYWQgbWFwIGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHR5cGUgVGhlIG5hbWUgb2YgdGhlIHRhcmdldCBtZXRob2QgdG8gaW52b2tlIG9yICdbc291cmNlLXR5cGVdLltzb3VyY2UtbmFtZV0ubmFtZScgZm9yIGEgbWV0aG9kIG9uIGEgV29ya2VyU291cmNlLlxuICAgICAqIEBwYXJhbSB0YXJnZXRNYXBJZCBBIHBhcnRpY3VsYXIgbWFwSWQgdG8gd2hpY2ggdG8gc2VuZCB0aGlzIG1lc3NhZ2UuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBzZW5kKHR5cGU6IHN0cmluZywgZGF0YTogbWl4ZWQsIGNhbGxiYWNrOiA/RnVuY3Rpb24sIHRhcmdldE1hcElkOiA/c3RyaW5nLCBtdXN0UXVldWU6IGJvb2xlYW4gPSBmYWxzZSk6ID9DYW5jZWxhYmxlIHtcbiAgICAgICAgLy8gV2UncmUgdXNpbmcgYSBzdHJpbmcgSUQgaW5zdGVhZCBvZiBudW1iZXJzIGJlY2F1c2UgdGhleSBhcmUgYmVpbmcgdXNlZCBhcyBvYmplY3Qga2V5c1xuICAgICAgICAvLyBhbnl3YXksIGFuZCB0aHVzIHN0cmluZ2lmaWVkIGltcGxpY2l0bHkuIFdlIHVzZSByYW5kb20gSURzIGJlY2F1c2UgYW4gYWN0b3IgbWF5IHJlY2VpdmVcbiAgICAgICAgLy8gbWVzc2FnZSBmcm9tIG11bHRpcGxlIG90aGVyIGFjdG9ycyB3aGljaCBjb3VsZCBydW4gaW4gZGlmZmVyZW50IGV4ZWN1dGlvbiBjb250ZXh0LiBBXG4gICAgICAgIC8vIGxpbmVhcmx5IGluY3JlYXNpbmcgSUQgY291bGQgcHJvZHVjZSBjb2xsaXNpb25zLlxuICAgICAgICBjb25zdCBpZCA9IE1hdGgucm91bmQoKE1hdGgucmFuZG9tKCkgKiAxZTE4KSkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygwLCAxMCk7XG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFja3NbaWRdID0gY2FsbGJhY2s7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYnVmZmVyczogP0FycmF5PFRyYW5zZmVyYWJsZT4gPSBpc1NhZmFyaSh0aGlzLmdsb2JhbFNjb3BlKSA/IHVuZGVmaW5lZCA6IFtdO1xuICAgICAgICB0aGlzLnRhcmdldC5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBoYXNDYWxsYmFjazogISFjYWxsYmFjayxcbiAgICAgICAgICAgIHRhcmdldE1hcElkLFxuICAgICAgICAgICAgbXVzdFF1ZXVlLFxuICAgICAgICAgICAgc291cmNlTWFwSWQ6IHRoaXMubWFwSWQsXG4gICAgICAgICAgICBkYXRhOiBzZXJpYWxpemUoZGF0YSwgYnVmZmVycylcbiAgICAgICAgfSwgYnVmZmVycyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjYW5jZWw6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBjYWxsYmFjayB0byBudWxsIHNvIHRoYXQgaXQgbmV2ZXIgZmlyZXMgYWZ0ZXIgdGhlIHJlcXVlc3QgaXMgYWJvcnRlZC5cbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuY2FsbGJhY2tzW2lkXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy50YXJnZXQucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJzxjYW5jZWw+JyxcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TWFwSWQsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZU1hcElkOiB0aGlzLm1hcElkXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcmVjZWl2ZShtZXNzYWdlOiBPYmplY3QpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IG1lc3NhZ2UuZGF0YSxcbiAgICAgICAgICAgIGlkID0gZGF0YS5pZDtcblxuICAgICAgICBpZiAoIWlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YS50YXJnZXRNYXBJZCAmJiB0aGlzLm1hcElkICE9PSBkYXRhLnRhcmdldE1hcElkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSAnPGNhbmNlbD4nKSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIG9yaWdpbmFsIHJlcXVlc3QgZnJvbSB0aGUgcXVldWUuIFRoaXMgaXMgb25seSBwb3NzaWJsZSBpZiBpdFxuICAgICAgICAgICAgLy8gaGFzbid0IGJlZW4ga2lja2VkIG9mZiB5ZXQuIFRoZSBpZCB3aWxsIHJlbWFpbiBpbiB0aGUgcXVldWUsIGJ1dCBiZWNhdXNlXG4gICAgICAgICAgICAvLyB0aGVyZSBpcyBubyBhc3NvY2lhdGVkIHRhc2ssIGl0IHdpbGwgYmUgZHJvcHBlZCBvbmNlIGl0J3MgdGltZSB0byBleGVjdXRlIGl0LlxuICAgICAgICAgICAgZGVsZXRlIHRoaXMudGFza3NbaWRdO1xuICAgICAgICAgICAgY29uc3QgY2FuY2VsID0gdGhpcy5jYW5jZWxDYWxsYmFja3NbaWRdO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuY2FuY2VsQ2FsbGJhY2tzW2lkXTtcbiAgICAgICAgICAgIGlmIChjYW5jZWwpIHtcbiAgICAgICAgICAgICAgICBjYW5jZWwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpc1dvcmtlcigpIHx8IGRhdGEubXVzdFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgLy8gSW4gd29ya2Vycywgc3RvcmUgdGhlIHRhc2tzIHRoYXQgd2UgbmVlZCB0byBwcm9jZXNzIGJlZm9yZSBhY3R1YWxseSBwcm9jZXNzaW5nIHRoZW0uIFRoaXNcbiAgICAgICAgICAgICAgICAvLyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB3ZSB3YW50IHRvIGtlZXAgcmVjZWl2aW5nIG1lc3NhZ2VzLCBhbmQgaW4gcGFydGljdWxhcixcbiAgICAgICAgICAgICAgICAvLyA8Y2FuY2VsPiBtZXNzYWdlcy4gU29tZSB0YXNrcyBtYXkgdGFrZSBhIHdoaWxlIGluIHRoZSB3b3JrZXIgdGhyZWFkLCBzbyBiZWZvcmVcbiAgICAgICAgICAgICAgICAvLyBleGVjdXRpbmcgdGhlIG5leHQgdGFzayBpbiBvdXIgcXVldWUsIHBvc3RNZXNzYWdlIHByZWVtcHRzIHRoaXMgYW5kIDxjYW5jZWw+XG4gICAgICAgICAgICAgICAgLy8gbWVzc2FnZXMgY2FuIGJlIHByb2Nlc3NlZC4gV2UncmUgdXNpbmcgYSBNZXNzYWdlQ2hhbm5lbCBvYmplY3QgdG8gZ2V0IHRocm90dGxlIHRoZVxuICAgICAgICAgICAgICAgIC8vIHByb2Nlc3MoKSBmbG93IHRvIG9uZSBhdCBhIHRpbWUuXG4gICAgICAgICAgICAgICAgdGhpcy50YXNrc1tpZF0gPSBkYXRhO1xuICAgICAgICAgICAgICAgIHRoaXMudGFza1F1ZXVlLnB1c2goaWQpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlci50cmlnZ2VyKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEluIHRoZSBtYWluIHRocmVhZCwgcHJvY2VzcyBtZXNzYWdlcyBpbW1lZGlhdGVseSBzbyB0aGF0IG90aGVyIHdvcmsgZG9lcyBub3Qgc2xpcCBpblxuICAgICAgICAgICAgICAgIC8vIGJldHdlZW4gZ2V0dGluZyBwYXJ0aWFsIGRhdGEgYmFjayBmcm9tIHdvcmtlcnMuXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzVGFzayhpZCwgZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm9jZXNzKCkge1xuICAgICAgICBpZiAoIXRoaXMudGFza1F1ZXVlLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy50YXNrUXVldWUuc2hpZnQoKTtcbiAgICAgICAgY29uc3QgdGFzayA9IHRoaXMudGFza3NbaWRdO1xuICAgICAgICBkZWxldGUgdGhpcy50YXNrc1tpZF07XG4gICAgICAgIC8vIFNjaGVkdWxlIGFub3RoZXIgcHJvY2VzcyBjYWxsIGlmIHdlIGtub3cgdGhlcmUncyBtb3JlIHRvIHByb2Nlc3MgX2JlZm9yZV8gaW52b2tpbmcgdGhlXG4gICAgICAgIC8vIGN1cnJlbnQgdGFzay4gVGhpcyBpcyBuZWNlc3Nhcnkgc28gdGhhdCBwcm9jZXNzaW5nIGNvbnRpbnVlcyBldmVuIGlmIHRoZSBjdXJyZW50IHRhc2tcbiAgICAgICAgLy8gZG9lc24ndCBleGVjdXRlIHN1Y2Nlc3NmdWxseS5cbiAgICAgICAgaWYgKHRoaXMudGFza1F1ZXVlLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5pbnZva2VyLnRyaWdnZXIoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRhc2spIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSB0YXNrIElEIGRvZXNuJ3QgaGF2ZSBhc3NvY2lhdGVkIHRhc2sgZGF0YSBhbnltb3JlLCBpdCB3YXMgY2FuY2VsZWQuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByb2Nlc3NUYXNrKGlkLCB0YXNrKTtcbiAgICB9XG5cbiAgICBwcm9jZXNzVGFzayhpZDogbnVtYmVyLCB0YXNrOiBhbnkpIHtcbiAgICAgICAgaWYgKHRhc2sudHlwZSA9PT0gJzxyZXNwb25zZT4nKSB7XG4gICAgICAgICAgICAvLyBUaGUgZG9uZSgpIGZ1bmN0aW9uIGluIHRoZSBjb3VudGVycGFydCBoYXMgYmVlbiBjYWxsZWQsIGFuZCB3ZSBhcmUgbm93XG4gICAgICAgICAgICAvLyBmaXJpbmcgdGhlIGNhbGxiYWNrIGluIHRoZSBvcmlnaW5hdGluZyBhY3RvciwgaWYgdGhlcmUgaXMgb25lLlxuICAgICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSB0aGlzLmNhbGxiYWNrc1tpZF07XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5jYWxsYmFja3NbaWRdO1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2UgZ2V0IGEgcmVzcG9uc2UsIGJ1dCBkb24ndCBoYXZlIGEgY2FsbGJhY2ssIHRoZSByZXF1ZXN0IHdhcyBjYW5jZWxlZC5cbiAgICAgICAgICAgICAgICBpZiAodGFzay5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhkZXNlcmlhbGl6ZSh0YXNrLmVycm9yKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgZGVzZXJpYWxpemUodGFzay5kYXRhKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGNvbXBsZXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgYnVmZmVyczogP0FycmF5PFRyYW5zZmVyYWJsZT4gPSBpc1NhZmFyaSh0aGlzLmdsb2JhbFNjb3BlKSA/IHVuZGVmaW5lZCA6IFtdO1xuICAgICAgICAgICAgY29uc3QgZG9uZSA9IHRhc2suaGFzQ2FsbGJhY2sgPyAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgY29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5jYW5jZWxDYWxsYmFja3NbaWRdO1xuICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0LnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICc8cmVzcG9uc2U+JyxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlTWFwSWQ6IHRoaXMubWFwSWQsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnIgPyBzZXJpYWxpemUoZXJyKSA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHNlcmlhbGl6ZShkYXRhLCBidWZmZXJzKVxuICAgICAgICAgICAgICAgIH0sIGJ1ZmZlcnMpO1xuICAgICAgICAgICAgfSA6IChfKSA9PiB7XG4gICAgICAgICAgICAgICAgY29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxldCBjYWxsYmFjayA9IG51bGw7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXMgPSAoZGVzZXJpYWxpemUodGFzay5kYXRhKTogYW55KTtcbiAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudFt0YXNrLnR5cGVdKSB7XG4gICAgICAgICAgICAgICAgLy8gdGFzay50eXBlID09ICdsb2FkVGlsZScsICdyZW1vdmVUaWxlJywgZXRjLlxuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gdGhpcy5wYXJlbnRbdGFzay50eXBlXSh0YXNrLnNvdXJjZU1hcElkLCBwYXJhbXMsIGRvbmUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBhcmVudC5nZXRXb3JrZXJTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAvLyB0YXNrLnR5cGUgPT0gc291cmNldHlwZS5tZXRob2RcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gdGFzay50eXBlLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NvcGUgPSAodGhpcy5wYXJlbnQ6IGFueSkuZ2V0V29ya2VyU291cmNlKHRhc2suc291cmNlTWFwSWQsIGtleXNbMF0sIHBhcmFtcy5zb3VyY2UpO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gc2NvcGVba2V5c1sxXV0ocGFyYW1zLCBkb25lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gTm8gZnVuY3Rpb24gd2FzIGZvdW5kLlxuICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBmdW5jdGlvbiAke3Rhc2sudHlwZX1gKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghY29tcGxldGVkICYmIGNhbGxiYWNrICYmIGNhbGxiYWNrLmNhbmNlbCkge1xuICAgICAgICAgICAgICAgIC8vIEFsbG93cyBjYW5jZWxpbmcgdGhlIHRhc2sgYXMgbG9uZyBhcyBpdCBoYXNuJ3QgYmVlbiBjb21wbGV0ZWQgeWV0LlxuICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsQ2FsbGJhY2tzW2lkXSA9IGNhbGxiYWNrLmNhbmNlbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZSgpIHtcbiAgICAgICAgdGhpcy5pbnZva2VyLnJlbW92ZSgpO1xuICAgICAgICB0aGlzLnRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgdGhpcy5yZWNlaXZlLCBmYWxzZSk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBBY3RvcjtcbiIsImV4cG9ydCB7IGdldFVSTCwgZ2V0VGlsZUJCb3gsIGdldE1lcmNDb29yZHMgfTtcblxuXG4vKipcbiAqIGdldFVSTFxuICpcbiAqIEBwYXJhbSAgICB7U3RyaW5nfSAgYmFzZVVybCAgQmFzZSB1cmwgb2YgdGhlIFdNUyBzZXJ2ZXJcbiAqIEBwYXJhbSAgICB7U3RyaW5nfSAgbGF5ZXIgICAgTGF5ZXIgbmFtZVxuICogQHBhcmFtICAgIHtOdW1iZXJ9ICB4ICAgICAgICBUaWxlIGNvb3JkaW5hdGUgeFxuICogQHBhcmFtICAgIHtOdW1iZXJ9ICB5ICAgICAgICBUaWxlIGNvb3JkaW5hdGUgeVxuICogQHBhcmFtICAgIHtOdW1iZXJ9ICB6ICAgICAgICBUaWxlIHpvb21cbiAqIEBwYXJhbSAgICB7T2JqZWN0fSAgW29wdGlvbnNdXG4gKiBAcGFyYW0gICAge1N0cmluZ30gIFtvcHRpb25zLmZvcm1hdD0naW1hZ2UvcG5nJ11cbiAqIEBwYXJhbSAgICB7U3RyaW5nfSAgW29wdGlvbnMuc2VydmljZT0nV01TJ11cbiAqIEBwYXJhbSAgICB7U3RyaW5nfSAgW29wdGlvbnMudmVyc2lvbj0nMS4xLjEnXVxuICogQHBhcmFtICAgIHtTdHJpbmd9ICBbb3B0aW9ucy5yZXF1ZXN0PSdHZXRNYXAnXVxuICogQHBhcmFtICAgIHtTdHJpbmd9ICBbb3B0aW9ucy5zcnM9J0VQU0c6Mzg1NyddXG4gKiBAcGFyYW0gICAge051bWJlcn0gIFtvcHRpb25zLndpZHRoPScyNTYnXVxuICogQHBhcmFtICAgIHtOdW1iZXJ9ICBbb3B0aW9ucy5oZWlnaHQ9JzI1NiddXG4gKiBAcmV0dXJucyAge1N0cmluZ30gIHVybFxuICogQGV4YW1wbGVcbiAqIHZhciBiYXNlVXJsID0gJ2h0dHA6Ly9nZW9kYXRhLnN0YXRlLm5qLnVzL2ltYWdlcnl3bXMvTmF0dXJhbDIwMTUnO1xuICogdmFyIGxheWVyID0gJ05hdHVyYWwyMDE1JztcbiAqIHZhciB1cmwgPSB3aG9vdHMuZ2V0VVJMKGJhc2VVcmwsIGxheWVyLCAxNTQzMDgsIDE5NzE2NywgMTkpO1xuICovXG5mdW5jdGlvbiBnZXRVUkwoYmFzZVVybCwgbGF5ZXIsIHgsIHksIHosIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIHZhciB1cmwgPSBiYXNlVXJsICsgJz8nICsgW1xuICAgICAgICAnYmJveD0nICAgICsgZ2V0VGlsZUJCb3goeCwgeSwgeiksXG4gICAgICAgICdmb3JtYXQ9JyAgKyAob3B0aW9ucy5mb3JtYXQgfHwgJ2ltYWdlL3BuZycpLFxuICAgICAgICAnc2VydmljZT0nICsgKG9wdGlvbnMuc2VydmljZSB8fCAnV01TJyksXG4gICAgICAgICd2ZXJzaW9uPScgKyAob3B0aW9ucy52ZXJzaW9uIHx8ICcxLjEuMScpLFxuICAgICAgICAncmVxdWVzdD0nICsgKG9wdGlvbnMucmVxdWVzdCB8fCAnR2V0TWFwJyksXG4gICAgICAgICdzcnM9JyAgICAgKyAob3B0aW9ucy5zcnMgfHwgJ0VQU0c6Mzg1NycpLFxuICAgICAgICAnd2lkdGg9JyAgICsgKG9wdGlvbnMud2lkdGggfHwgMjU2KSxcbiAgICAgICAgJ2hlaWdodD0nICArIChvcHRpb25zLmhlaWdodCB8fCAyNTYpLFxuICAgICAgICAnbGF5ZXJzPScgICsgbGF5ZXJcbiAgICBdLmpvaW4oJyYnKTtcblxuICAgIHJldHVybiB1cmw7XG59XG5cblxuLyoqXG4gKiBnZXRUaWxlQkJveFxuICpcbiAqIEBwYXJhbSAgICB7TnVtYmVyfSAgeCAgVGlsZSBjb29yZGluYXRlIHhcbiAqIEBwYXJhbSAgICB7TnVtYmVyfSAgeSAgVGlsZSBjb29yZGluYXRlIHlcbiAqIEBwYXJhbSAgICB7TnVtYmVyfSAgeiAgVGlsZSB6b29tXG4gKiBAcmV0dXJucyAge1N0cmluZ30gIFN0cmluZyBvZiB0aGUgYm91bmRpbmcgYm94XG4gKi9cbmZ1bmN0aW9uIGdldFRpbGVCQm94KHgsIHksIHopIHtcbiAgICAvLyBmb3IgR29vZ2xlL09TTSB0aWxlIHNjaGVtZSB3ZSBuZWVkIHRvIGFsdGVyIHRoZSB5XG4gICAgeSA9IChNYXRoLnBvdygyLCB6KSAtIHkgLSAxKTtcblxuICAgIHZhciBtaW4gPSBnZXRNZXJjQ29vcmRzKHggKiAyNTYsIHkgKiAyNTYsIHopLFxuICAgICAgICBtYXggPSBnZXRNZXJjQ29vcmRzKCh4ICsgMSkgKiAyNTYsICh5ICsgMSkgKiAyNTYsIHopO1xuXG4gICAgcmV0dXJuIG1pblswXSArICcsJyArIG1pblsxXSArICcsJyArIG1heFswXSArICcsJyArIG1heFsxXTtcbn1cblxuXG4vKipcbiAqIGdldE1lcmNDb29yZHNcbiAqXG4gKiBAcGFyYW0gICAge051bWJlcn0gIHggIFBpeGVsIGNvb3JkaW5hdGUgeFxuICogQHBhcmFtICAgIHtOdW1iZXJ9ICB5ICBQaXhlbCBjb29yZGluYXRlIHlcbiAqIEBwYXJhbSAgICB7TnVtYmVyfSAgeiAgVGlsZSB6b29tXG4gKiBAcmV0dXJucyAge0FycmF5fSAgIFt4LCB5XVxuICovXG5mdW5jdGlvbiBnZXRNZXJjQ29vcmRzKHgsIHksIHopIHtcbiAgICB2YXIgcmVzb2x1dGlvbiA9ICgyICogTWF0aC5QSSAqIDYzNzgxMzcgLyAyNTYpIC8gTWF0aC5wb3coMiwgeiksXG4gICAgICAgIG1lcmNfeCA9ICh4ICogcmVzb2x1dGlvbiAtIDIgKiBNYXRoLlBJICAqIDYzNzgxMzcgLyAyLjApLFxuICAgICAgICBtZXJjX3kgPSAoeSAqIHJlc29sdXRpb24gLSAyICogTWF0aC5QSSAgKiA2Mzc4MTM3IC8gMi4wKTtcblxuICAgIHJldHVybiBbbWVyY194LCBtZXJjX3ldO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IExuZ0xhdCBmcm9tICcuL2xuZ19sYXQnO1xuXG5pbXBvcnQgdHlwZSB7TG5nTGF0TGlrZX0gZnJvbSAnLi9sbmdfbGF0JztcblxuLyoqXG4gKiBBIGBMbmdMYXRCb3VuZHNgIG9iamVjdCByZXByZXNlbnRzIGEgZ2VvZ3JhcGhpY2FsIGJvdW5kaW5nIGJveCxcbiAqIGRlZmluZWQgYnkgaXRzIHNvdXRod2VzdCBhbmQgbm9ydGhlYXN0IHBvaW50cyBpbiBsb25naXR1ZGUgYW5kIGxhdGl0dWRlLlxuICpcbiAqIElmIG5vIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQgdG8gdGhlIGNvbnN0cnVjdG9yLCBhIGBudWxsYCBib3VuZGluZyBib3ggaXMgY3JlYXRlZC5cbiAqXG4gKiBOb3RlIHRoYXQgYW55IE1hcGJveCBHTCBtZXRob2QgdGhhdCBhY2NlcHRzIGEgYExuZ0xhdEJvdW5kc2Agb2JqZWN0IGFzIGFuIGFyZ3VtZW50IG9yIG9wdGlvblxuICogY2FuIGFsc28gYWNjZXB0IGFuIGBBcnJheWAgb2YgdHdvIHtAbGluayBMbmdMYXRMaWtlfSBjb25zdHJ1Y3RzIGFuZCB3aWxsIHBlcmZvcm0gYW4gaW1wbGljaXQgY29udmVyc2lvbi5cbiAqIFRoaXMgZmxleGlibGUgdHlwZSBpcyBkb2N1bWVudGVkIGFzIHtAbGluayBMbmdMYXRCb3VuZHNMaWtlfS5cbiAqXG4gKiBAcGFyYW0ge0xuZ0xhdExpa2V9IFtzd10gVGhlIHNvdXRod2VzdCBjb3JuZXIgb2YgdGhlIGJvdW5kaW5nIGJveC5cbiAqIEBwYXJhbSB7TG5nTGF0TGlrZX0gW25lXSBUaGUgbm9ydGhlYXN0IGNvcm5lciBvZiB0aGUgYm91bmRpbmcgYm94LlxuICogQGV4YW1wbGVcbiAqIHZhciBzdyA9IG5ldyBtYXBib3hnbC5MbmdMYXQoLTczLjk4NzYsIDQwLjc2NjEpO1xuICogdmFyIG5lID0gbmV3IG1hcGJveGdsLkxuZ0xhdCgtNzMuOTM5NywgNDAuODAwMik7XG4gKiB2YXIgbGxiID0gbmV3IG1hcGJveGdsLkxuZ0xhdEJvdW5kcyhzdywgbmUpO1xuICovXG5jbGFzcyBMbmdMYXRCb3VuZHMge1xuICAgIF9uZTogTG5nTGF0O1xuICAgIF9zdzogTG5nTGF0O1xuXG4gICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBpcyB0b28gZmxleGlibGUgdG8gdHlwZS4gSXQgc2hvdWxkIG5vdCBiZSBzbyBmbGV4aWJsZS5cbiAgICBjb25zdHJ1Y3RvcihzdzogYW55LCBuZTogYW55KSB7XG4gICAgICAgIGlmICghc3cpIHtcbiAgICAgICAgICAgIC8vIG5vb3BcbiAgICAgICAgfSBlbHNlIGlmIChuZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRTb3V0aFdlc3Qoc3cpLnNldE5vcnRoRWFzdChuZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3cubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgICB0aGlzLnNldFNvdXRoV2VzdChbc3dbMF0sIHN3WzFdXSkuc2V0Tm9ydGhFYXN0KFtzd1syXSwgc3dbM11dKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U291dGhXZXN0KHN3WzBdKS5zZXROb3J0aEVhc3Qoc3dbMV0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBub3J0aGVhc3QgY29ybmVyIG9mIHRoZSBib3VuZGluZyBib3hcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7TG5nTGF0TGlrZX0gbmUgYSB7QGxpbmsgTG5nTGF0TGlrZX0gb2JqZWN0IGRlc2NyaWJpbmcgdGhlIG5vcnRoZWFzdCBjb3JuZXIgb2YgdGhlIGJvdW5kaW5nIGJveC5cbiAgICAgKiBAcmV0dXJucyB7TG5nTGF0Qm91bmRzfSBgdGhpc2BcbiAgICAgKi9cbiAgICBzZXROb3J0aEVhc3QobmU6IExuZ0xhdExpa2UpIHtcbiAgICAgICAgdGhpcy5fbmUgPSBuZSBpbnN0YW5jZW9mIExuZ0xhdCA/IG5ldyBMbmdMYXQobmUubG5nLCBuZS5sYXQpIDogTG5nTGF0LmNvbnZlcnQobmUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIHNvdXRod2VzdCBjb3JuZXIgb2YgdGhlIGJvdW5kaW5nIGJveFxuICAgICAqXG4gICAgICogQHBhcmFtIHtMbmdMYXRMaWtlfSBzdyBhIHtAbGluayBMbmdMYXRMaWtlfSBvYmplY3QgZGVzY3JpYmluZyB0aGUgc291dGh3ZXN0IGNvcm5lciBvZiB0aGUgYm91bmRpbmcgYm94LlxuICAgICAqIEByZXR1cm5zIHtMbmdMYXRCb3VuZHN9IGB0aGlzYFxuICAgICAqL1xuICAgIHNldFNvdXRoV2VzdChzdzogTG5nTGF0TGlrZSkge1xuICAgICAgICB0aGlzLl9zdyA9IHN3IGluc3RhbmNlb2YgTG5nTGF0ID8gbmV3IExuZ0xhdChzdy5sbmcsIHN3LmxhdCkgOiBMbmdMYXQuY29udmVydChzdyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4dGVuZCB0aGUgYm91bmRzIHRvIGluY2x1ZGUgYSBnaXZlbiBMbmdMYXRMaWtlIG9yIExuZ0xhdEJvdW5kc0xpa2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0xuZ0xhdExpa2V8TG5nTGF0Qm91bmRzTGlrZX0gb2JqIG9iamVjdCB0byBleHRlbmQgdG9cbiAgICAgKiBAcmV0dXJucyB7TG5nTGF0Qm91bmRzfSBgdGhpc2BcbiAgICAgKi9cbiAgICBleHRlbmQob2JqOiBMbmdMYXRMaWtlIHwgTG5nTGF0Qm91bmRzTGlrZSkge1xuICAgICAgICBjb25zdCBzdyA9IHRoaXMuX3N3LFxuICAgICAgICAgICAgbmUgPSB0aGlzLl9uZTtcbiAgICAgICAgbGV0IHN3MiwgbmUyO1xuXG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBMbmdMYXQpIHtcbiAgICAgICAgICAgIHN3MiA9IG9iajtcbiAgICAgICAgICAgIG5lMiA9IG9iajtcblxuICAgICAgICB9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIExuZ0xhdEJvdW5kcykge1xuICAgICAgICAgICAgc3cyID0gb2JqLl9zdztcbiAgICAgICAgICAgIG5lMiA9IG9iai5fbmU7XG5cbiAgICAgICAgICAgIGlmICghc3cyIHx8ICFuZTIpIHJldHVybiB0aGlzO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9iai5sZW5ndGggPT09IDQgfHwgb2JqLmV2ZXJ5KEFycmF5LmlzQXJyYXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxuZ0xhdEJvdW5kc09iaiA9ICgob2JqOiBhbnkpOiBMbmdMYXRCb3VuZHNMaWtlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXh0ZW5kKExuZ0xhdEJvdW5kcy5jb252ZXJ0KGxuZ0xhdEJvdW5kc09iaikpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxuZ0xhdE9iaiA9ICgob2JqOiBhbnkpOiBMbmdMYXRMaWtlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXh0ZW5kKExuZ0xhdC5jb252ZXJ0KGxuZ0xhdE9iaikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzdyAmJiAhbmUpIHtcbiAgICAgICAgICAgIHRoaXMuX3N3ID0gbmV3IExuZ0xhdChzdzIubG5nLCBzdzIubGF0KTtcbiAgICAgICAgICAgIHRoaXMuX25lID0gbmV3IExuZ0xhdChuZTIubG5nLCBuZTIubGF0KTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3cubG5nID0gTWF0aC5taW4oc3cyLmxuZywgc3cubG5nKTtcbiAgICAgICAgICAgIHN3LmxhdCA9IE1hdGgubWluKHN3Mi5sYXQsIHN3LmxhdCk7XG4gICAgICAgICAgICBuZS5sbmcgPSBNYXRoLm1heChuZTIubG5nLCBuZS5sbmcpO1xuICAgICAgICAgICAgbmUubGF0ID0gTWF0aC5tYXgobmUyLmxhdCwgbmUubGF0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGdlb2dyYXBoaWNhbCBjb29yZGluYXRlIGVxdWlkaXN0YW50IGZyb20gdGhlIGJvdW5kaW5nIGJveCdzIGNvcm5lcnMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7TG5nTGF0fSBUaGUgYm91bmRpbmcgYm94J3MgY2VudGVyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIGxsYiA9IG5ldyBtYXBib3hnbC5MbmdMYXRCb3VuZHMoWy03My45ODc2LCA0MC43NjYxXSwgWy03My45Mzk3LCA0MC44MDAyXSk7XG4gICAgICogbGxiLmdldENlbnRlcigpOyAvLyA9IExuZ0xhdCB7bG5nOiAtNzMuOTYzNjUsIGxhdDogNDAuNzgzMTV9XG4gICAgICovXG4gICAgZ2V0Q2VudGVyKCk6IExuZ0xhdCB7XG4gICAgICAgIHJldHVybiBuZXcgTG5nTGF0KCh0aGlzLl9zdy5sbmcgKyB0aGlzLl9uZS5sbmcpIC8gMiwgKHRoaXMuX3N3LmxhdCArIHRoaXMuX25lLmxhdCkgLyAyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBzb3V0aHdlc3QgY29ybmVyIG9mIHRoZSBib3VuZGluZyBib3guXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7TG5nTGF0fSBUaGUgc291dGh3ZXN0IGNvcm5lciBvZiB0aGUgYm91bmRpbmcgYm94LlxuICAgICAqL1xuICAgIGdldFNvdXRoV2VzdCgpOiBMbmdMYXQgeyByZXR1cm4gdGhpcy5fc3c7IH1cblxuICAgIC8qKlxuICAgICogUmV0dXJucyB0aGUgbm9ydGhlYXN0IGNvcm5lciBvZiB0aGUgYm91bmRpbmcgYm94LlxuICAgICpcbiAgICAqIEByZXR1cm5zIHtMbmdMYXR9IFRoZSBub3J0aGVhc3QgY29ybmVyIG9mIHRoZSBib3VuZGluZyBib3guXG4gICAgICovXG4gICAgZ2V0Tm9ydGhFYXN0KCk6IExuZ0xhdCB7IHJldHVybiB0aGlzLl9uZTsgfVxuXG4gICAgLyoqXG4gICAgKiBSZXR1cm5zIHRoZSBub3J0aHdlc3QgY29ybmVyIG9mIHRoZSBib3VuZGluZyBib3guXG4gICAgKlxuICAgICogQHJldHVybnMge0xuZ0xhdH0gVGhlIG5vcnRod2VzdCBjb3JuZXIgb2YgdGhlIGJvdW5kaW5nIGJveC5cbiAgICAgKi9cbiAgICBnZXROb3J0aFdlc3QoKTogTG5nTGF0IHsgcmV0dXJuIG5ldyBMbmdMYXQodGhpcy5nZXRXZXN0KCksIHRoaXMuZ2V0Tm9ydGgoKSk7IH1cblxuICAgIC8qKlxuICAgICogUmV0dXJucyB0aGUgc291dGhlYXN0IGNvcm5lciBvZiB0aGUgYm91bmRpbmcgYm94LlxuICAgICpcbiAgICAqIEByZXR1cm5zIHtMbmdMYXR9IFRoZSBzb3V0aGVhc3QgY29ybmVyIG9mIHRoZSBib3VuZGluZyBib3guXG4gICAgICovXG4gICAgZ2V0U291dGhFYXN0KCk6IExuZ0xhdCB7IHJldHVybiBuZXcgTG5nTGF0KHRoaXMuZ2V0RWFzdCgpLCB0aGlzLmdldFNvdXRoKCkpOyB9XG5cbiAgICAvKipcbiAgICAqIFJldHVybnMgdGhlIHdlc3QgZWRnZSBvZiB0aGUgYm91bmRpbmcgYm94LlxuICAgICpcbiAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSB3ZXN0IGVkZ2Ugb2YgdGhlIGJvdW5kaW5nIGJveC5cbiAgICAgKi9cbiAgICBnZXRXZXN0KCk6IG51bWJlciB7IHJldHVybiB0aGlzLl9zdy5sbmc7IH1cblxuICAgIC8qKlxuICAgICogUmV0dXJucyB0aGUgc291dGggZWRnZSBvZiB0aGUgYm91bmRpbmcgYm94LlxuICAgICpcbiAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBzb3V0aCBlZGdlIG9mIHRoZSBib3VuZGluZyBib3guXG4gICAgICovXG4gICAgZ2V0U291dGgoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuX3N3LmxhdDsgfVxuXG4gICAgLyoqXG4gICAgKiBSZXR1cm5zIHRoZSBlYXN0IGVkZ2Ugb2YgdGhlIGJvdW5kaW5nIGJveC5cbiAgICAqXG4gICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgZWFzdCBlZGdlIG9mIHRoZSBib3VuZGluZyBib3guXG4gICAgICovXG4gICAgZ2V0RWFzdCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5fbmUubG5nOyB9XG5cbiAgICAvKipcbiAgICAqIFJldHVybnMgdGhlIG5vcnRoIGVkZ2Ugb2YgdGhlIGJvdW5kaW5nIGJveC5cbiAgICAqXG4gICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgbm9ydGggZWRnZSBvZiB0aGUgYm91bmRpbmcgYm94LlxuICAgICAqL1xuICAgIGdldE5vcnRoKCk6IG51bWJlciB7IHJldHVybiB0aGlzLl9uZS5sYXQ7IH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGJvdW5kaW5nIGJveCByZXByZXNlbnRlZCBhcyBhbiBhcnJheS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtBcnJheTxBcnJheTxudW1iZXI+Pn0gVGhlIGJvdW5kaW5nIGJveCByZXByZXNlbnRlZCBhcyBhbiBhcnJheSwgY29uc2lzdGluZyBvZiB0aGVcbiAgICAgKiAgIHNvdXRod2VzdCBhbmQgbm9ydGhlYXN0IGNvb3JkaW5hdGVzIG9mIHRoZSBib3VuZGluZyByZXByZXNlbnRlZCBhcyBhcnJheXMgb2YgbnVtYmVycy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBsbGIgPSBuZXcgbWFwYm94Z2wuTG5nTGF0Qm91bmRzKFstNzMuOTg3NiwgNDAuNzY2MV0sIFstNzMuOTM5NywgNDAuODAwMl0pO1xuICAgICAqIGxsYi50b0FycmF5KCk7IC8vID0gW1stNzMuOTg3NiwgNDAuNzY2MV0sIFstNzMuOTM5NywgNDAuODAwMl1dXG4gICAgICovXG4gICAgdG9BcnJheSgpIHtcbiAgICAgICAgcmV0dXJuIFt0aGlzLl9zdy50b0FycmF5KCksIHRoaXMuX25lLnRvQXJyYXkoKV07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBib3VuZGluZyBib3ggcmVwcmVzZW50ZWQgYXMgYSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgYm91bmRpbmcgYm94IHJlcHJlc2VudHMgYXMgYSBzdHJpbmcgb2YgdGhlIGZvcm1hdFxuICAgICAqICAgYCdMbmdMYXRCb3VuZHMoTG5nTGF0KGxuZywgbGF0KSwgTG5nTGF0KGxuZywgbGF0KSknYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBsbGIgPSBuZXcgbWFwYm94Z2wuTG5nTGF0Qm91bmRzKFstNzMuOTg3NiwgNDAuNzY2MV0sIFstNzMuOTM5NywgNDAuODAwMl0pO1xuICAgICAqIGxsYi50b1N0cmluZygpOyAvLyA9IFwiTG5nTGF0Qm91bmRzKExuZ0xhdCgtNzMuOTg3NiwgNDAuNzY2MSksIExuZ0xhdCgtNzMuOTM5NywgNDAuODAwMikpXCJcbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIGBMbmdMYXRCb3VuZHMoJHt0aGlzLl9zdy50b1N0cmluZygpfSwgJHt0aGlzLl9uZS50b1N0cmluZygpfSlgO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIHRoZSBib3VuZGluZyBib3ggaXMgYW4gZW1wdHkvYG51bGxgLXR5cGUgYm94LlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgYm91bmRzIGhhdmUgYmVlbiBkZWZpbmVkLCBvdGhlcndpc2UgZmFsc2UuXG4gICAgICovXG4gICAgaXNFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuICEodGhpcy5fc3cgJiYgdGhpcy5fbmUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogQ2hlY2sgaWYgdGhlIHBvaW50IGlzIHdpdGhpbiB0aGUgYm91bmRpbmcgYm94LlxuICAgICpcbiAgICAqIEBwYXJhbSB7TG5nTGF0TGlrZX0gbG5nbGF0IGdlb2dyYXBoaWMgcG9pbnQgdG8gY2hlY2sgYWdhaW5zdC5cbiAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBwb2ludCBpcyB3aXRoaW4gdGhlIGJvdW5kaW5nIGJveC5cbiAgICAqIEBleGFtcGxlXG4gICAgKiB2YXIgbGxiID0gbmV3IG1hcGJveGdsLkxuZ0xhdEJvdW5kcyhcbiAgICAqICAgbmV3IG1hcGJveGdsLkxuZ0xhdCgtNzMuOTg3NiwgNDAuNzY2MSksXG4gICAgKiAgIG5ldyBtYXBib3hnbC5MbmdMYXQoLTczLjkzOTcsIDQwLjgwMDIpXG4gICAgKiApO1xuICAgICpcbiAgICAqIHZhciBsbCA9IG5ldyBtYXBib3hnbC5MbmdMYXQoLTczLjk1NjcsIDQwLjc3ODkpO1xuICAgICpcbiAgICAqIGNvbnNvbGUubG9nKGxsYi5jb250YWlucyhsbCkpOyAvLyA9IHRydWVcbiAgICAqL1xuICAgIGNvbnRhaW5zKGxuZ2xhdDogTG5nTGF0TGlrZSkge1xuICAgICAgICBjb25zdCB7bG5nLCBsYXR9ID0gTG5nTGF0LmNvbnZlcnQobG5nbGF0KTtcblxuICAgICAgICBjb25zdCBjb250YWluc0xhdGl0dWRlID0gdGhpcy5fc3cubGF0IDw9IGxhdCAmJiBsYXQgPD0gdGhpcy5fbmUubGF0O1xuICAgICAgICBsZXQgY29udGFpbnNMb25naXR1ZGUgPSB0aGlzLl9zdy5sbmcgPD0gbG5nICYmIGxuZyA8PSB0aGlzLl9uZS5sbmc7XG4gICAgICAgIGlmICh0aGlzLl9zdy5sbmcgPiB0aGlzLl9uZS5sbmcpIHsgLy8gd3JhcHBlZCBjb29yZGluYXRlc1xuICAgICAgICAgICAgY29udGFpbnNMb25naXR1ZGUgPSB0aGlzLl9zdy5sbmcgPj0gbG5nICYmIGxuZyA+PSB0aGlzLl9uZS5sbmc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGFpbnNMYXRpdHVkZSAmJiBjb250YWluc0xvbmdpdHVkZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhbiBhcnJheSB0byBhIGBMbmdMYXRCb3VuZHNgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIElmIGEgYExuZ0xhdEJvdW5kc2Agb2JqZWN0IGlzIHBhc3NlZCBpbiwgdGhlIGZ1bmN0aW9uIHJldHVybnMgaXQgdW5jaGFuZ2VkLlxuICAgICAqXG4gICAgICogSW50ZXJuYWxseSwgdGhlIGZ1bmN0aW9uIGNhbGxzIGBMbmdMYXQjY29udmVydGAgdG8gY29udmVydCBhcnJheXMgdG8gYExuZ0xhdGAgdmFsdWVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtMbmdMYXRCb3VuZHNMaWtlfSBpbnB1dCBBbiBhcnJheSBvZiB0d28gY29vcmRpbmF0ZXMgdG8gY29udmVydCwgb3IgYSBgTG5nTGF0Qm91bmRzYCBvYmplY3QgdG8gcmV0dXJuLlxuICAgICAqIEByZXR1cm5zIHtMbmdMYXRCb3VuZHN9IEEgbmV3IGBMbmdMYXRCb3VuZHNgIG9iamVjdCwgaWYgYSBjb252ZXJzaW9uIG9jY3VycmVkLCBvciB0aGUgb3JpZ2luYWwgYExuZ0xhdEJvdW5kc2Agb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIGFyciA9IFtbLTczLjk4NzYsIDQwLjc2NjFdLCBbLTczLjkzOTcsIDQwLjgwMDJdXTtcbiAgICAgKiB2YXIgbGxiID0gbWFwYm94Z2wuTG5nTGF0Qm91bmRzLmNvbnZlcnQoYXJyKTtcbiAgICAgKiBsbGI7ICAgLy8gPSBMbmdMYXRCb3VuZHMge19zdzogTG5nTGF0IHtsbmc6IC03My45ODc2LCBsYXQ6IDQwLjc2NjF9LCBfbmU6IExuZ0xhdCB7bG5nOiAtNzMuOTM5NywgbGF0OiA0MC44MDAyfX1cbiAgICAgKi9cbiAgICBzdGF0aWMgY29udmVydChpbnB1dDogTG5nTGF0Qm91bmRzTGlrZSk6IExuZ0xhdEJvdW5kcyB7XG4gICAgICAgIGlmICghaW5wdXQgfHwgaW5wdXQgaW5zdGFuY2VvZiBMbmdMYXRCb3VuZHMpIHJldHVybiBpbnB1dDtcbiAgICAgICAgcmV0dXJuIG5ldyBMbmdMYXRCb3VuZHMoaW5wdXQpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBBIHtAbGluayBMbmdMYXRCb3VuZHN9IG9iamVjdCwgYW4gYXJyYXkgb2Yge0BsaW5rIExuZ0xhdExpa2V9IG9iamVjdHMgaW4gW3N3LCBuZV0gb3JkZXIsXG4gKiBvciBhbiBhcnJheSBvZiBudW1iZXJzIGluIFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIG9yZGVyLlxuICpcbiAqIEB0eXBlZGVmIHtMbmdMYXRCb3VuZHMgfCBbTG5nTGF0TGlrZSwgTG5nTGF0TGlrZV0gfCBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXX0gTG5nTGF0Qm91bmRzTGlrZVxuICogQGV4YW1wbGVcbiAqIHZhciB2MSA9IG5ldyBtYXBib3hnbC5MbmdMYXRCb3VuZHMoXG4gKiAgIG5ldyBtYXBib3hnbC5MbmdMYXQoLTczLjk4NzYsIDQwLjc2NjEpLFxuICogICBuZXcgbWFwYm94Z2wuTG5nTGF0KC03My45Mzk3LCA0MC44MDAyKVxuICogKTtcbiAqIHZhciB2MiA9IG5ldyBtYXBib3hnbC5MbmdMYXRCb3VuZHMoWy03My45ODc2LCA0MC43NjYxXSwgWy03My45Mzk3LCA0MC44MDAyXSlcbiAqIHZhciB2MyA9IFtbLTczLjk4NzYsIDQwLjc2NjFdLCBbLTczLjkzOTcsIDQwLjgwMDJdXTtcbiAqL1xuZXhwb3J0IHR5cGUgTG5nTGF0Qm91bmRzTGlrZSA9IExuZ0xhdEJvdW5kcyB8IFtMbmdMYXRMaWtlLCBMbmdMYXRMaWtlXSB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuXG5leHBvcnQgZGVmYXVsdCBMbmdMYXRCb3VuZHM7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge3dyYXB9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgTG5nTGF0Qm91bmRzIGZyb20gJy4vbG5nX2xhdF9ib3VuZHMnO1xuXG4vKlxuKiBBcHByb3hpbWF0ZSByYWRpdXMgb2YgdGhlIGVhcnRoIGluIG1ldGVycy5cbiogVXNlcyB0aGUgV0dTLTg0IGFwcHJveGltYXRpb24uIFRoZSByYWRpdXMgYXQgdGhlIGVxdWF0b3IgaXMgfjYzNzgxMzcgYW5kIGF0IHRoZSBwb2xlcyBpcyB+NjM1Njc1Mi4gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvV29ybGRfR2VvZGV0aWNfU3lzdGVtI1dHUzg0XG4qIDYzNzEwMDguOCBpcyBvbmUgcHVibGlzaGVkIFwiYXZlcmFnZSByYWRpdXNcIiBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRWFydGhfcmFkaXVzI01lYW5fcmFkaXVzLCBvciBmdHA6Ly9hdGhlbmEuZnN2LmN2dXQuY3ovWkZHL2dyczgwLU1vcml0ei5wZGYgcC40XG4qL1xuZXhwb3J0IGNvbnN0IGVhcnRoUmFkaXVzID0gNjM3MTAwOC44O1xuXG4vKipcbiAqIEEgYExuZ0xhdGAgb2JqZWN0IHJlcHJlc2VudHMgYSBnaXZlbiBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIGNvb3JkaW5hdGUsIG1lYXN1cmVkIGluIGRlZ3JlZXMuXG4gKiBUaGVzZSBjb29yZGluYXRlcyBhcmUgYmFzZWQgb24gdGhlIFtXR1M4NCAoRVBTRzo0MzI2KSBzdGFuZGFyZF0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvV29ybGRfR2VvZGV0aWNfU3lzdGVtI1dHUzg0KS5cbiAqXG4gKiBNYXBib3ggR0wgdXNlcyBsb25naXR1ZGUsIGxhdGl0dWRlIGNvb3JkaW5hdGUgb3JkZXIgKGFzIG9wcG9zZWQgdG8gbGF0aXR1ZGUsIGxvbmdpdHVkZSkgdG8gbWF0Y2ggdGhlXG4gKiBbR2VvSlNPTiBzcGVjaWZpY2F0aW9uXShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzk0NikuXG4gKlxuICogTm90ZSB0aGF0IGFueSBNYXBib3ggR0wgbWV0aG9kIHRoYXQgYWNjZXB0cyBhIGBMbmdMYXRgIG9iamVjdCBhcyBhbiBhcmd1bWVudCBvciBvcHRpb25cbiAqIGNhbiBhbHNvIGFjY2VwdCBhbiBgQXJyYXlgIG9mIHR3byBudW1iZXJzIGFuZCB3aWxsIHBlcmZvcm0gYW4gaW1wbGljaXQgY29udmVyc2lvbi5cbiAqIFRoaXMgZmxleGlibGUgdHlwZSBpcyBkb2N1bWVudGVkIGFzIHtAbGluayBMbmdMYXRMaWtlfS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gbG5nIExvbmdpdHVkZSwgbWVhc3VyZWQgaW4gZGVncmVlcy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBsYXQgTGF0aXR1ZGUsIG1lYXN1cmVkIGluIGRlZ3JlZXMuXG4gKiBAZXhhbXBsZVxuICogdmFyIGxsID0gbmV3IG1hcGJveGdsLkxuZ0xhdCgtMTIzLjk3NDksIDQwLjc3MzYpO1xuICogbGwubG5nOyAvLyA9IC0xMjMuOTc0OVxuICogQHNlZSBbR2V0IGNvb3JkaW5hdGVzIG9mIHRoZSBtb3VzZSBwb2ludGVyXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL21vdXNlLXBvc2l0aW9uLylcbiAqIEBzZWUgW0Rpc3BsYXkgYSBwb3B1cF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9wb3B1cC8pXG4gKiBAc2VlIFtIaWdobGlnaHQgZmVhdHVyZXMgd2l0aGluIGEgYm91bmRpbmcgYm94XShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3VzaW5nLWJveC1xdWVyeXJlbmRlcmVkZmVhdHVyZXMvKVxuICogQHNlZSBbQ3JlYXRlIGEgdGltZWxpbmUgYW5pbWF0aW9uXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3RpbWVsaW5lLWFuaW1hdGlvbi8pXG4gKi9cbmNsYXNzIExuZ0xhdCB7XG4gICAgbG5nOiBudW1iZXI7XG4gICAgbGF0OiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3Rvcihsbmc6IG51bWJlciwgbGF0OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKGlzTmFOKGxuZykgfHwgaXNOYU4obGF0KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIExuZ0xhdCBvYmplY3Q6ICgke2xuZ30sICR7bGF0fSlgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxuZyA9ICtsbmc7XG4gICAgICAgIHRoaXMubGF0ID0gK2xhdDtcbiAgICAgICAgaWYgKHRoaXMubGF0ID4gOTAgfHwgdGhpcy5sYXQgPCAtOTApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBMbmdMYXQgbGF0aXR1ZGUgdmFsdWU6IG11c3QgYmUgYmV0d2VlbiAtOTAgYW5kIDkwJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IGBMbmdMYXRgIG9iamVjdCB3aG9zZSBsb25naXR1ZGUgaXMgd3JhcHBlZCB0byB0aGUgcmFuZ2UgKC0xODAsIDE4MCkuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7TG5nTGF0fSBUaGUgd3JhcHBlZCBgTG5nTGF0YCBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgbGwgPSBuZXcgbWFwYm94Z2wuTG5nTGF0KDI4Ni4wMjUxLCA0MC43NzM2KTtcbiAgICAgKiB2YXIgd3JhcHBlZCA9IGxsLndyYXAoKTtcbiAgICAgKiB3cmFwcGVkLmxuZzsgLy8gPSAtNzMuOTc0OVxuICAgICAqL1xuICAgIHdyYXAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgTG5nTGF0KHdyYXAodGhpcy5sbmcsIC0xODAsIDE4MCksIHRoaXMubGF0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjb29yZGluYXRlcyByZXByZXNlbnRlZCBhcyBhbiBhcnJheSBvZiB0d28gbnVtYmVycy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtBcnJheTxudW1iZXI+fSBUaGUgY29vcmRpbmF0ZXMgcmVwcmVzZXRlZCBhcyBhbiBhcnJheSBvZiBsb25naXR1ZGUgYW5kIGxhdGl0dWRlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIGxsID0gbmV3IG1hcGJveGdsLkxuZ0xhdCgtNzMuOTc0OSwgNDAuNzczNik7XG4gICAgICogbGwudG9BcnJheSgpOyAvLyA9IFstNzMuOTc0OSwgNDAuNzczNl1cbiAgICAgKi9cbiAgICB0b0FycmF5KCkge1xuICAgICAgICByZXR1cm4gW3RoaXMubG5nLCB0aGlzLmxhdF07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY29vcmRpbmF0ZXMgcmVwcmVzZW50IGFzIGEgc3RyaW5nLlxuICAgICAqXG4gICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvb3JkaW5hdGVzIHJlcHJlc2VudGVkIGFzIGEgc3RyaW5nIG9mIHRoZSBmb3JtYXQgYCdMbmdMYXQobG5nLCBsYXQpJ2AuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgbGwgPSBuZXcgbWFwYm94Z2wuTG5nTGF0KC03My45NzQ5LCA0MC43NzM2KTtcbiAgICAgKiBsbC50b1N0cmluZygpOyAvLyA9IFwiTG5nTGF0KC03My45NzQ5LCA0MC43NzM2KVwiXG4gICAgICovXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBgTG5nTGF0KCR7dGhpcy5sbmd9LCAke3RoaXMubGF0fSlgO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGFwcHJveGltYXRlIGRpc3RhbmNlIGJldHdlZW4gYSBwYWlyIG9mIGNvb3JkaW5hdGVzIGluIG1ldGVyc1xuICAgICAqIFVzZXMgdGhlIEhhdmVyc2luZSBGb3JtdWxhIChmcm9tIFIuVy4gU2lubm90dCwgXCJWaXJ0dWVzIG9mIHRoZSBIYXZlcnNpbmVcIiwgU2t5IGFuZCBUZWxlc2NvcGUsIHZvbC4gNjgsIG5vLiAyLCAxOTg0LCBwLiAxNTkpXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0xuZ0xhdH0gbG5nTGF0IGNvb3JkaW5hdGVzIHRvIGNvbXB1dGUgdGhlIGRpc3RhbmNlIHRvXG4gICAgICogQHJldHVybnMge251bWJlcn0gRGlzdGFuY2UgaW4gbWV0ZXJzIGJldHdlZW4gdGhlIHR3byBjb29yZGluYXRlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBuZXdfeW9yayA9IG5ldyBtYXBib3hnbC5MbmdMYXQoLTc0LjAwNjAsIDQwLjcxMjgpO1xuICAgICAqIHZhciBsb3NfYW5nZWxlcyA9IG5ldyBtYXBib3hnbC5MbmdMYXQoLTExOC4yNDM3LCAzNC4wNTIyKTtcbiAgICAgKiBuZXdfeW9yay5kaXN0YW5jZVRvKGxvc19hbmdlbGVzKTsgLy8gPSAzOTM1NzUxLjY5MDg5Mzk4NywgXCJ0cnVlIGRpc3RhbmNlXCIgdXNpbmcgYSBub24tc3BoZXJpY2FsIGFwcHJveGltYXRpb24gaXMgfjM5NjZrbVxuICAgICAqL1xuICAgIGRpc3RhbmNlVG8obG5nTGF0OiBMbmdMYXQpIHtcbiAgICAgICAgY29uc3QgcmFkID0gTWF0aC5QSSAvIDE4MDtcbiAgICAgICAgY29uc3QgbGF0MSA9IHRoaXMubGF0ICogcmFkO1xuICAgICAgICBjb25zdCBsYXQyID0gbG5nTGF0LmxhdCAqIHJhZDtcbiAgICAgICAgY29uc3QgYSA9IE1hdGguc2luKGxhdDEpICogTWF0aC5zaW4obGF0MikgKyBNYXRoLmNvcyhsYXQxKSAqIE1hdGguY29zKGxhdDIpICogTWF0aC5jb3MoKGxuZ0xhdC5sbmcgLSB0aGlzLmxuZykgKiByYWQpO1xuXG4gICAgICAgIGNvbnN0IG1heE1ldGVycyA9IGVhcnRoUmFkaXVzICogTWF0aC5hY29zKE1hdGgubWluKGEsIDEpKTtcbiAgICAgICAgcmV0dXJuIG1heE1ldGVycztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgYExuZ0xhdEJvdW5kc2AgZnJvbSB0aGUgY29vcmRpbmF0ZXMgZXh0ZW5kZWQgYnkgYSBnaXZlbiBgcmFkaXVzYC4gVGhlIHJldHVybmVkIGBMbmdMYXRCb3VuZHNgIGNvbXBsZXRlbHkgY29udGFpbnMgdGhlIGByYWRpdXNgLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtyYWRpdXM9MF0gRGlzdGFuY2UgaW4gbWV0ZXJzIGZyb20gdGhlIGNvb3JkaW5hdGVzIHRvIGV4dGVuZCB0aGUgYm91bmRzLlxuICAgICAqIEByZXR1cm5zIHtMbmdMYXRCb3VuZHN9IEEgbmV3IGBMbmdMYXRCb3VuZHNgIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGNvb3JkaW5hdGVzIGV4dGVuZGVkIGJ5IHRoZSBgcmFkaXVzYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBsbCA9IG5ldyBtYXBib3hnbC5MbmdMYXQoLTczLjk3NDksIDQwLjc3MzYpO1xuICAgICAqIGxsLnRvQm91bmRzKDEwMCkudG9BcnJheSgpOyAvLyA9IFtbLTczLjk3NTAxODYyMTQxMzI4LCA0MC43NzM1MTAxNjg0NzIyOV0sIFstNzMuOTc0NzgxMzc4NTg2NzMsIDQwLjc3MzY4OTgzMTUyNzcxXV1cbiAgICAgKi9cbiAgICB0b0JvdW5kcyhyYWRpdXM/OiBudW1iZXIgPSAwKSB7XG4gICAgICAgIGNvbnN0IGVhcnRoQ2lyY3VtZmVyZW5jZUluTWV0ZXJzQXRFcXVhdG9yID0gNDAwNzUwMTc7XG4gICAgICAgIGNvbnN0IGxhdEFjY3VyYWN5ID0gMzYwICogcmFkaXVzIC8gZWFydGhDaXJjdW1mZXJlbmNlSW5NZXRlcnNBdEVxdWF0b3IsXG4gICAgICAgICAgICBsbmdBY2N1cmFjeSA9IGxhdEFjY3VyYWN5IC8gTWF0aC5jb3MoKE1hdGguUEkgLyAxODApICogdGhpcy5sYXQpO1xuXG4gICAgICAgIHJldHVybiBuZXcgTG5nTGF0Qm91bmRzKG5ldyBMbmdMYXQodGhpcy5sbmcgLSBsbmdBY2N1cmFjeSwgdGhpcy5sYXQgLSBsYXRBY2N1cmFjeSksXG4gICAgICAgICAgICBuZXcgTG5nTGF0KHRoaXMubG5nICsgbG5nQWNjdXJhY3ksIHRoaXMubGF0ICsgbGF0QWNjdXJhY3kpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhbiBhcnJheSBvZiB0d28gbnVtYmVycyBvciBhbiBvYmplY3Qgd2l0aCBgbG5nYCBhbmQgYGxhdGAgb3IgYGxvbmAgYW5kIGBsYXRgIHByb3BlcnRpZXNcbiAgICAgKiB0byBhIGBMbmdMYXRgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIElmIGEgYExuZ0xhdGAgb2JqZWN0IGlzIHBhc3NlZCBpbiwgdGhlIGZ1bmN0aW9uIHJldHVybnMgaXQgdW5jaGFuZ2VkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtMbmdMYXRMaWtlfSBpbnB1dCBBbiBhcnJheSBvZiB0d28gbnVtYmVycyBvciBvYmplY3QgdG8gY29udmVydCwgb3IgYSBgTG5nTGF0YCBvYmplY3QgdG8gcmV0dXJuLlxuICAgICAqIEByZXR1cm5zIHtMbmdMYXR9IEEgbmV3IGBMbmdMYXRgIG9iamVjdCwgaWYgYSBjb252ZXJzaW9uIG9jY3VycmVkLCBvciB0aGUgb3JpZ2luYWwgYExuZ0xhdGAgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIGFyciA9IFstNzMuOTc0OSwgNDAuNzczNl07XG4gICAgICogdmFyIGxsID0gbWFwYm94Z2wuTG5nTGF0LmNvbnZlcnQoYXJyKTtcbiAgICAgKiBsbDsgICAvLyA9IExuZ0xhdCB7bG5nOiAtNzMuOTc0OSwgbGF0OiA0MC43NzM2fVxuICAgICAqL1xuICAgIHN0YXRpYyBjb252ZXJ0KGlucHV0OiBMbmdMYXRMaWtlKTogTG5nTGF0IHtcbiAgICAgICAgaWYgKGlucHV0IGluc3RhbmNlb2YgTG5nTGF0KSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpICYmIChpbnB1dC5sZW5ndGggPT09IDIgfHwgaW5wdXQubGVuZ3RoID09PSAzKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBMbmdMYXQoTnVtYmVyKGlucHV0WzBdKSwgTnVtYmVyKGlucHV0WzFdKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGlucHV0KSAmJiB0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnICYmIGlucHV0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IExuZ0xhdChcbiAgICAgICAgICAgICAgICAvLyBmbG93IGNhbid0IHJlZmluZSB0aGlzIHRvIGhhdmUgb25lIG9mIGxuZyBvciBsYXQsIHNvIHdlIGhhdmUgdG8gY2FzdCB0byBhbnlcbiAgICAgICAgICAgICAgICBOdW1iZXIoJ2xuZycgaW4gaW5wdXQgPyAoaW5wdXQ6IGFueSkubG5nIDogKGlucHV0OiBhbnkpLmxvbiksXG4gICAgICAgICAgICAgICAgTnVtYmVyKGlucHV0LmxhdClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYExuZ0xhdExpa2VgIGFyZ3VtZW50IG11c3QgYmUgc3BlY2lmaWVkIGFzIGEgTG5nTGF0IGluc3RhbmNlLCBhbiBvYmplY3Qge2xuZzogPGxuZz4sIGxhdDogPGxhdD59LCBhbiBvYmplY3Qge2xvbjogPGxuZz4sIGxhdDogPGxhdD59LCBvciBhbiBhcnJheSBvZiBbPGxuZz4sIDxsYXQ+XVwiKTtcbiAgICB9XG59XG5cbi8qKlxuICogQSB7QGxpbmsgTG5nTGF0fSBvYmplY3QsIGFuIGFycmF5IG9mIHR3byBudW1iZXJzIHJlcHJlc2VudGluZyBsb25naXR1ZGUgYW5kIGxhdGl0dWRlLFxuICogb3IgYW4gb2JqZWN0IHdpdGggYGxuZ2AgYW5kIGBsYXRgIG9yIGBsb25gIGFuZCBgbGF0YCBwcm9wZXJ0aWVzLlxuICpcbiAqIEB0eXBlZGVmIHtMbmdMYXQgfCB7bG5nOiBudW1iZXIsIGxhdDogbnVtYmVyfSB8IHtsb246IG51bWJlciwgbGF0OiBudW1iZXJ9IHwgW251bWJlciwgbnVtYmVyXX0gTG5nTGF0TGlrZVxuICogQGV4YW1wbGVcbiAqIHZhciB2MSA9IG5ldyBtYXBib3hnbC5MbmdMYXQoLTEyMi40MjA2NzksIDM3Ljc3MjUzNyk7XG4gKiB2YXIgdjIgPSBbLTEyMi40MjA2NzksIDM3Ljc3MjUzN107XG4gKiB2YXIgdjMgPSB7bG9uOiAtMTIyLjQyMDY3OSwgbGF0OiAzNy43NzI1Mzd9O1xuICovXG5leHBvcnQgdHlwZSBMbmdMYXRMaWtlID0gTG5nTGF0IHwge2xuZzogbnVtYmVyLCBsYXQ6IG51bWJlcn0gfCB7bG9uOiBudW1iZXIsIGxhdDogbnVtYmVyfSB8IFtudW1iZXIsIG51bWJlcl07XG5cbmV4cG9ydCBkZWZhdWx0IExuZ0xhdDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBMbmdMYXQsIHtlYXJ0aFJhZGl1c30gZnJvbSAnLi4vZ2VvL2xuZ19sYXQnO1xuaW1wb3J0IHR5cGUge0xuZ0xhdExpa2V9IGZyb20gJy4uL2dlby9sbmdfbGF0JztcblxuLypcbiAqIFRoZSBhdmVyYWdlIGNpcmN1bWZlcmVuY2Ugb2YgdGhlIHdvcmxkIGluIG1ldGVycy5cbiAqL1xuY29uc3QgZWFydGhDaXJjdW1mcmVuY2UgPSAyICogTWF0aC5QSSAqIGVhcnRoUmFkaXVzOyAvLyBtZXRlcnNcblxuLypcbiAqIFRoZSBjaXJjdW1mZXJlbmNlIGF0IGEgbGluZSBvZiBsYXRpdHVkZSBpbiBtZXRlcnMuXG4gKi9cbmZ1bmN0aW9uIGNpcmN1bWZlcmVuY2VBdExhdGl0dWRlKGxhdGl0dWRlOiBudW1iZXIpIHtcbiAgICByZXR1cm4gZWFydGhDaXJjdW1mcmVuY2UgKiBNYXRoLmNvcyhsYXRpdHVkZSAqIE1hdGguUEkgLyAxODApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyY2F0b3JYZnJvbUxuZyhsbmc6IG51bWJlcikge1xuICAgIHJldHVybiAoMTgwICsgbG5nKSAvIDM2MDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmNhdG9yWWZyb21MYXQobGF0OiBudW1iZXIpIHtcbiAgICByZXR1cm4gKDE4MCAtICgxODAgLyBNYXRoLlBJICogTWF0aC5sb2coTWF0aC50YW4oTWF0aC5QSSAvIDQgKyBsYXQgKiBNYXRoLlBJIC8gMzYwKSkpKSAvIDM2MDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmNhdG9yWmZyb21BbHRpdHVkZShhbHRpdHVkZTogbnVtYmVyLCBsYXQ6IG51bWJlcikge1xuICAgIHJldHVybiBhbHRpdHVkZSAvIGNpcmN1bWZlcmVuY2VBdExhdGl0dWRlKGxhdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsbmdGcm9tTWVyY2F0b3JYKHg6IG51bWJlcikge1xuICAgIHJldHVybiB4ICogMzYwIC0gMTgwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGF0RnJvbU1lcmNhdG9yWSh5OiBudW1iZXIpIHtcbiAgICBjb25zdCB5MiA9IDE4MCAtIHkgKiAzNjA7XG4gICAgcmV0dXJuIDM2MCAvIE1hdGguUEkgKiBNYXRoLmF0YW4oTWF0aC5leHAoeTIgKiBNYXRoLlBJIC8gMTgwKSkgLSA5MDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsdGl0dWRlRnJvbU1lcmNhdG9yWih6OiBudW1iZXIsIHk6IG51bWJlcikge1xuICAgIHJldHVybiB6ICogY2lyY3VtZmVyZW5jZUF0TGF0aXR1ZGUobGF0RnJvbU1lcmNhdG9yWSh5KSk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIHRoZSBNZXJjYXRvciBzY2FsZSBmYWN0b3IgZm9yIGEgZ2l2ZW4gbGF0aXR1ZGUsIHNlZVxuICogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTWVyY2F0b3JfcHJvamVjdGlvbiNTY2FsZV9mYWN0b3JcbiAqXG4gKiBBdCB0aGUgZXF1YXRvciB0aGUgc2NhbGUgZmFjdG9yIHdpbGwgYmUgMSwgd2hpY2ggaW5jcmVhc2VzIGF0IGhpZ2hlciBsYXRpdHVkZXMuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGxhdCBMYXRpdHVkZVxuICogQHJldHVybnMge251bWJlcn0gc2NhbGUgZmFjdG9yXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyY2F0b3JTY2FsZShsYXQ6IG51bWJlcikge1xuICAgIHJldHVybiAxIC8gTWF0aC5jb3MobGF0ICogTWF0aC5QSSAvIDE4MCk7XG59XG5cbi8qKlxuICogQSBgTWVyY2F0b3JDb29yZGluYXRlYCBvYmplY3QgcmVwcmVzZW50cyBhIHByb2plY3RlZCB0aHJlZSBkaW1lbnNpb25hbCBwb3NpdGlvbi5cbiAqXG4gKiBgTWVyY2F0b3JDb29yZGluYXRlYCB1c2VzIHRoZSB3ZWIgbWVyY2F0b3IgcHJvamVjdGlvbiAoW0VQU0c6Mzg1N10oaHR0cHM6Ly9lcHNnLmlvLzM4NTcpKSB3aXRoIHNsaWdodGx5IGRpZmZlcmVudCB1bml0czpcbiAqIC0gdGhlIHNpemUgb2YgMSB1bml0IGlzIHRoZSB3aWR0aCBvZiB0aGUgcHJvamVjdGVkIHdvcmxkIGluc3RlYWQgb2YgdGhlIFwibWVyY2F0b3IgbWV0ZXJcIlxuICogLSB0aGUgb3JpZ2luIG9mIHRoZSBjb29yZGluYXRlIHNwYWNlIGlzIGF0IHRoZSBub3J0aC13ZXN0IGNvcm5lciBpbnN0ZWFkIG9mIHRoZSBtaWRkbGVcbiAqXG4gKiBGb3IgZXhhbXBsZSwgYE1lcmNhdG9yQ29vcmRpbmF0ZSgwLCAwLCAwKWAgaXMgdGhlIG5vcnRoLXdlc3QgY29ybmVyIG9mIHRoZSBtZXJjYXRvciB3b3JsZCBhbmRcbiAqIGBNZXJjYXRvckNvb3JkaW5hdGUoMSwgMSwgMClgIGlzIHRoZSBzb3V0aC1lYXN0IGNvcm5lci4gSWYgeW91IGFyZSBmYW1pbGlhciB3aXRoXG4gKiBbdmVjdG9yIHRpbGVzXShodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L3ZlY3Rvci10aWxlLXNwZWMpIGl0IG1heSBiZSBoZWxwZnVsIHRvIHRoaW5rXG4gKiBvZiB0aGUgY29vcmRpbmF0ZSBzcGFjZSBhcyB0aGUgYDAvMC8wYCB0aWxlIHdpdGggYW4gZXh0ZW50IG9mIGAxYC5cbiAqXG4gKiBUaGUgYHpgIGRpbWVuc2lvbiBvZiBgTWVyY2F0b3JDb29yZGluYXRlYCBpcyBjb25mb3JtYWwuIEEgY3ViZSBpbiB0aGUgbWVyY2F0b3IgY29vcmRpbmF0ZSBzcGFjZSB3b3VsZCBiZSByZW5kZXJlZCBhcyBhIGN1YmUuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHggVGhlIHggY29tcG9uZW50IG9mIHRoZSBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSB5IFRoZSB5IGNvbXBvbmVudCBvZiB0aGUgcG9zaXRpb24uXG4gKiBAcGFyYW0ge251bWJlcn0geiBUaGUgeiBjb21wb25lbnQgb2YgdGhlIHBvc2l0aW9uLlxuICogQGV4YW1wbGVcbiAqIHZhciBudWxsSXNsYW5kID0gbmV3IG1hcGJveGdsLk1lcmNhdG9yQ29vcmRpbmF0ZSgwLjUsIDAuNSwgMCk7XG4gKlxuICogQHNlZSBbQWRkIGEgY3VzdG9tIHN0eWxlIGxheWVyXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2N1c3RvbS1zdHlsZS1sYXllci8pXG4gKi9cbmNsYXNzIE1lcmNhdG9yQ29vcmRpbmF0ZSB7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbiAgICB6OiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3Rvcih4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyID0gMCkge1xuICAgICAgICB0aGlzLnggPSAreDtcbiAgICAgICAgdGhpcy55ID0gK3k7XG4gICAgICAgIHRoaXMueiA9ICt6O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb2plY3QgYSBgTG5nTGF0YCB0byBhIGBNZXJjYXRvckNvb3JkaW5hdGVgLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtMbmdMYXRMaWtlfSBsbmdMYXRMaWtlIFRoZSBsb2NhdGlvbiB0byBwcm9qZWN0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBhbHRpdHVkZSBUaGUgYWx0aXR1ZGUgaW4gbWV0ZXJzIG9mIHRoZSBwb3NpdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7TWVyY2F0b3JDb29yZGluYXRlfSBUaGUgcHJvamVjdGVkIG1lcmNhdG9yIGNvb3JkaW5hdGUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgY29vcmQgPSBtYXBib3hnbC5NZXJjYXRvckNvb3JkaW5hdGUuZnJvbUxuZ0xhdCh7IGxuZzogMCwgbGF0OiAwfSwgMCk7XG4gICAgICogY29vcmQ7IC8vIE1lcmNhdG9yQ29vcmRpbmF0ZSgwLjUsIDAuNSwgMClcbiAgICAgKi9cbiAgICBzdGF0aWMgZnJvbUxuZ0xhdChsbmdMYXRMaWtlOiBMbmdMYXRMaWtlLCBhbHRpdHVkZTogbnVtYmVyID0gMCkge1xuICAgICAgICBjb25zdCBsbmdMYXQgPSBMbmdMYXQuY29udmVydChsbmdMYXRMaWtlKTtcblxuICAgICAgICByZXR1cm4gbmV3IE1lcmNhdG9yQ29vcmRpbmF0ZShcbiAgICAgICAgICAgICAgICBtZXJjYXRvclhmcm9tTG5nKGxuZ0xhdC5sbmcpLFxuICAgICAgICAgICAgICAgIG1lcmNhdG9yWWZyb21MYXQobG5nTGF0LmxhdCksXG4gICAgICAgICAgICAgICAgbWVyY2F0b3JaZnJvbUFsdGl0dWRlKGFsdGl0dWRlLCBsbmdMYXQubGF0KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYExuZ0xhdGAgZm9yIHRoZSBjb29yZGluYXRlLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0xuZ0xhdH0gVGhlIGBMbmdMYXRgIG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBjb29yZCA9IG5ldyBtYXBib3hnbC5NZXJjYXRvckNvb3JkaW5hdGUoMC41LCAwLjUsIDApO1xuICAgICAqIHZhciBsYXRMbmcgPSBjb29yZC50b0xuZ0xhdCgpOyAvLyBMbmdMYXQoMCwgMClcbiAgICAgKi9cbiAgICB0b0xuZ0xhdCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMbmdMYXQoXG4gICAgICAgICAgICAgICAgbG5nRnJvbU1lcmNhdG9yWCh0aGlzLngpLFxuICAgICAgICAgICAgICAgIGxhdEZyb21NZXJjYXRvclkodGhpcy55KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYWx0aXR1ZGUgaW4gbWV0ZXJzIG9mIHRoZSBjb29yZGluYXRlLlxuICAgICAqXG4gICAgICogQHJldHVybnMge251bWJlcn0gVGhlIGFsdGl0dWRlIGluIG1ldGVycy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBjb29yZCA9IG5ldyBtYXBib3hnbC5NZXJjYXRvckNvb3JkaW5hdGUoMCwgMCwgMC4wMik7XG4gICAgICogY29vcmQudG9BbHRpdHVkZSgpOyAvLyA2OTE0LjI4MTk1NjI5NTMzOVxuICAgICAqL1xuICAgIHRvQWx0aXR1ZGUoKSB7XG4gICAgICAgIHJldHVybiBhbHRpdHVkZUZyb21NZXJjYXRvcloodGhpcy56LCB0aGlzLnkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGRpc3RhbmNlIG9mIDEgbWV0ZXIgaW4gYE1lcmNhdG9yQ29vcmRpbmF0ZWAgdW5pdHMgYXQgdGhpcyBsYXRpdHVkZS5cbiAgICAgKlxuICAgICAqIEZvciBjb29yZGluYXRlcyBpbiByZWFsIHdvcmxkIHVuaXRzIHVzaW5nIG1ldGVycywgdGhpcyBuYXR1cmFsbHkgcHJvdmlkZXMgdGhlIHNjYWxlXG4gICAgICogdG8gdHJhbnNmb3JtIGludG8gYE1lcmNhdG9yQ29vcmRpbmF0ZWBzLlxuICAgICAqXG4gICAgICogQHJldHVybnMge251bWJlcn0gRGlzdGFuY2Ugb2YgMSBtZXRlciBpbiBgTWVyY2F0b3JDb29yZGluYXRlYCB1bml0cy5cbiAgICAgKi9cbiAgICBtZXRlckluTWVyY2F0b3JDb29yZGluYXRlVW5pdHMoKSB7XG4gICAgICAgIC8vIDEgbWV0ZXIgLyBjaXJjdW1mZXJlbmNlIGF0IGVxdWF0b3IgaW4gbWV0ZXJzICogTWVyY2F0b3IgcHJvamVjdGlvbiBzY2FsZSBmYWN0b3IgYXQgdGhpcyBsYXRpdHVkZVxuICAgICAgICByZXR1cm4gMSAvIGVhcnRoQ2lyY3VtZnJlbmNlICogbWVyY2F0b3JTY2FsZShsYXRGcm9tTWVyY2F0b3JZKHRoaXMueSkpO1xuICAgIH1cblxufVxuXG5leHBvcnQgZGVmYXVsdCBNZXJjYXRvckNvb3JkaW5hdGU7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2dldFRpbGVCQm94fSBmcm9tICdAbWFwYm94L3dob290cy1qcyc7XG5pbXBvcnQgRVhURU5UIGZyb20gJy4uL2RhdGEvZXh0ZW50JztcbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCBNZXJjYXRvckNvb3JkaW5hdGUgZnJvbSAnLi4vZ2VvL21lcmNhdG9yX2Nvb3JkaW5hdGUnO1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuXG5leHBvcnQgY2xhc3MgQ2Fub25pY2FsVGlsZUlEIHtcbiAgICB6OiBudW1iZXI7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbiAgICBrZXk6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKHo6IG51bWJlciwgeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcbiAgICAgICAgYXNzZXJ0KHogPj0gMCAmJiB6IDw9IDI1KTtcbiAgICAgICAgYXNzZXJ0KHggPj0gMCAmJiB4IDwgTWF0aC5wb3coMiwgeikpO1xuICAgICAgICBhc3NlcnQoeSA+PSAwICYmIHkgPCBNYXRoLnBvdygyLCB6KSk7XG4gICAgICAgIHRoaXMueiA9IHo7XG4gICAgICAgIHRoaXMueCA9IHg7XG4gICAgICAgIHRoaXMueSA9IHk7XG4gICAgICAgIHRoaXMua2V5ID0gY2FsY3VsYXRlS2V5KDAsIHosIHosIHgsIHkpO1xuICAgIH1cblxuICAgIGVxdWFscyhpZDogQ2Fub25pY2FsVGlsZUlEKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnogPT09IGlkLnogJiYgdGhpcy54ID09PSBpZC54ICYmIHRoaXMueSA9PT0gaWQueTtcbiAgICB9XG5cbiAgICAvLyBnaXZlbiBhIGxpc3Qgb2YgdXJscywgY2hvb3NlIGEgdXJsIHRlbXBsYXRlIGFuZCByZXR1cm4gYSB0aWxlIFVSTFxuICAgIHVybCh1cmxzOiBBcnJheTxzdHJpbmc+LCBzY2hlbWU6ID9zdHJpbmcpIHtcbiAgICAgICAgY29uc3QgYmJveCA9IGdldFRpbGVCQm94KHRoaXMueCwgdGhpcy55LCB0aGlzLnopO1xuICAgICAgICBjb25zdCBxdWFka2V5ID0gZ2V0UXVhZGtleSh0aGlzLnosIHRoaXMueCwgdGhpcy55KTtcblxuICAgICAgICByZXR1cm4gdXJsc1sodGhpcy54ICsgdGhpcy55KSAlIHVybHMubGVuZ3RoXVxuICAgICAgICAgICAgLnJlcGxhY2UoJ3twcmVmaXh9JywgKHRoaXMueCAlIDE2KS50b1N0cmluZygxNikgKyAodGhpcy55ICUgMTYpLnRvU3RyaW5nKDE2KSlcbiAgICAgICAgICAgIC5yZXBsYWNlKCd7en0nLCBTdHJpbmcodGhpcy56KSlcbiAgICAgICAgICAgIC5yZXBsYWNlKCd7eH0nLCBTdHJpbmcodGhpcy54KSlcbiAgICAgICAgICAgIC5yZXBsYWNlKCd7eX0nLCBTdHJpbmcoc2NoZW1lID09PSAndG1zJyA/IChNYXRoLnBvdygyLCB0aGlzLnopIC0gdGhpcy55IC0gMSkgOiB0aGlzLnkpKVxuICAgICAgICAgICAgLnJlcGxhY2UoJ3txdWFka2V5fScsIHF1YWRrZXkpXG4gICAgICAgICAgICAucmVwbGFjZSgne2Jib3gtZXBzZy0zODU3fScsIGJib3gpO1xuICAgIH1cblxuICAgIGdldFRpbGVQb2ludChjb29yZDogTWVyY2F0b3JDb29yZGluYXRlKSB7XG4gICAgICAgIGNvbnN0IHRpbGVzQXRab29tID0gTWF0aC5wb3coMiwgdGhpcy56KTtcbiAgICAgICAgcmV0dXJuIG5ldyBQb2ludChcbiAgICAgICAgICAgIChjb29yZC54ICogdGlsZXNBdFpvb20gLSB0aGlzLngpICogRVhURU5ULFxuICAgICAgICAgICAgKGNvb3JkLnkgKiB0aWxlc0F0Wm9vbSAtIHRoaXMueSkgKiBFWFRFTlQpO1xuICAgIH1cblxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy56fS8ke3RoaXMueH0vJHt0aGlzLnl9YDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbndyYXBwZWRUaWxlSUQge1xuICAgIHdyYXA6IG51bWJlcjtcbiAgICBjYW5vbmljYWw6IENhbm9uaWNhbFRpbGVJRDtcbiAgICBrZXk6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKHdyYXA6IG51bWJlciwgY2Fub25pY2FsOiBDYW5vbmljYWxUaWxlSUQpIHtcbiAgICAgICAgdGhpcy53cmFwID0gd3JhcDtcbiAgICAgICAgdGhpcy5jYW5vbmljYWwgPSBjYW5vbmljYWw7XG4gICAgICAgIHRoaXMua2V5ID0gY2FsY3VsYXRlS2V5KHdyYXAsIGNhbm9uaWNhbC56LCBjYW5vbmljYWwueiwgY2Fub25pY2FsLngsIGNhbm9uaWNhbC55KTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPdmVyc2NhbGVkVGlsZUlEIHtcbiAgICBvdmVyc2NhbGVkWjogbnVtYmVyO1xuICAgIHdyYXA6IG51bWJlcjtcbiAgICBjYW5vbmljYWw6IENhbm9uaWNhbFRpbGVJRDtcbiAgICBrZXk6IHN0cmluZztcbiAgICBwb3NNYXRyaXg6IEZsb2F0MzJBcnJheTtcblxuICAgIGNvbnN0cnVjdG9yKG92ZXJzY2FsZWRaOiBudW1iZXIsIHdyYXA6IG51bWJlciwgejogbnVtYmVyLCB4OiBudW1iZXIsIHk6IG51bWJlcikge1xuICAgICAgICBhc3NlcnQob3ZlcnNjYWxlZFogPj0geik7XG4gICAgICAgIHRoaXMub3ZlcnNjYWxlZFogPSBvdmVyc2NhbGVkWjtcbiAgICAgICAgdGhpcy53cmFwID0gd3JhcDtcbiAgICAgICAgdGhpcy5jYW5vbmljYWwgPSBuZXcgQ2Fub25pY2FsVGlsZUlEKHosICt4LCAreSk7XG4gICAgICAgIHRoaXMua2V5ID0gY2FsY3VsYXRlS2V5KHdyYXAsIG92ZXJzY2FsZWRaLCB6LCB4LCB5KTtcbiAgICB9XG5cbiAgICBlcXVhbHMoaWQ6IE92ZXJzY2FsZWRUaWxlSUQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3ZlcnNjYWxlZFogPT09IGlkLm92ZXJzY2FsZWRaICYmIHRoaXMud3JhcCA9PT0gaWQud3JhcCAmJiB0aGlzLmNhbm9uaWNhbC5lcXVhbHMoaWQuY2Fub25pY2FsKTtcbiAgICB9XG5cbiAgICBzY2FsZWRUbyh0YXJnZXRaOiBudW1iZXIpIHtcbiAgICAgICAgYXNzZXJ0KHRhcmdldFogPD0gdGhpcy5vdmVyc2NhbGVkWik7XG4gICAgICAgIGNvbnN0IHpEaWZmZXJlbmNlID0gdGhpcy5jYW5vbmljYWwueiAtIHRhcmdldFo7XG4gICAgICAgIGlmICh0YXJnZXRaID4gdGhpcy5jYW5vbmljYWwueikge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBPdmVyc2NhbGVkVGlsZUlEKHRhcmdldFosIHRoaXMud3JhcCwgdGhpcy5jYW5vbmljYWwueiwgdGhpcy5jYW5vbmljYWwueCwgdGhpcy5jYW5vbmljYWwueSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE92ZXJzY2FsZWRUaWxlSUQodGFyZ2V0WiwgdGhpcy53cmFwLCB0YXJnZXRaLCB0aGlzLmNhbm9uaWNhbC54ID4+IHpEaWZmZXJlbmNlLCB0aGlzLmNhbm9uaWNhbC55ID4+IHpEaWZmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qXG4gICAgICogY2FsY3VsYXRlU2NhbGVkS2V5IGlzIGFuIG9wdGltaXphdGlvbjpcbiAgICAgKiB3aGVuIHdpdGhXcmFwID09IHRydWUsIGltcGxlbWVudHMgdGhlIHNhbWUgYXMgdGhpcy5zY2FsZWRUbyh6KS5rZXksXG4gICAgICogd2hlbiB3aXRoV3JhcCA9PSBmYWxzZSwgaW1wbGVtZW50cyB0aGUgc2FtZSBhcyB0aGlzLnNjYWxlZFRvKHopLndyYXBwZWQoKS5rZXkuXG4gICAgICovXG4gICAgY2FsY3VsYXRlU2NhbGVkS2V5KHRhcmdldFo6IG51bWJlciwgd2l0aFdyYXA6IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgICAgICBhc3NlcnQodGFyZ2V0WiA8PSB0aGlzLm92ZXJzY2FsZWRaKTtcbiAgICAgICAgY29uc3QgekRpZmZlcmVuY2UgPSB0aGlzLmNhbm9uaWNhbC56IC0gdGFyZ2V0WjtcbiAgICAgICAgaWYgKHRhcmdldFogPiB0aGlzLmNhbm9uaWNhbC56KSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsY3VsYXRlS2V5KHRoaXMud3JhcCAqICt3aXRoV3JhcCwgdGFyZ2V0WiwgdGhpcy5jYW5vbmljYWwueiwgdGhpcy5jYW5vbmljYWwueCwgdGhpcy5jYW5vbmljYWwueSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsY3VsYXRlS2V5KHRoaXMud3JhcCAqICt3aXRoV3JhcCwgdGFyZ2V0WiwgdGFyZ2V0WiwgdGhpcy5jYW5vbmljYWwueCA+PiB6RGlmZmVyZW5jZSwgdGhpcy5jYW5vbmljYWwueSA+PiB6RGlmZmVyZW5jZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc0NoaWxkT2YocGFyZW50OiBPdmVyc2NhbGVkVGlsZUlEKSB7XG4gICAgICAgIGlmIChwYXJlbnQud3JhcCAhPT0gdGhpcy53cmFwKSB7XG4gICAgICAgICAgICAvLyBXZSBjYW4ndCBiZSBhIGNoaWxkIGlmIHdlJ3JlIGluIGEgZGlmZmVyZW50IHdvcmxkIGNvcHlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB6RGlmZmVyZW5jZSA9IHRoaXMuY2Fub25pY2FsLnogLSBwYXJlbnQuY2Fub25pY2FsLno7XG4gICAgICAgIC8vIFdlJ3JlIGZpcnN0IHRlc3RpbmcgZm9yIHogPT0gMCwgdG8gYXZvaWQgYSAzMiBiaXQgc2hpZnQsIHdoaWNoIGlzIHVuZGVmaW5lZC5cbiAgICAgICAgcmV0dXJuIHBhcmVudC5vdmVyc2NhbGVkWiA9PT0gMCB8fCAoXG4gICAgICAgICAgICBwYXJlbnQub3ZlcnNjYWxlZFogPCB0aGlzLm92ZXJzY2FsZWRaICYmXG4gICAgICAgICAgICAgICAgcGFyZW50LmNhbm9uaWNhbC54ID09PSAodGhpcy5jYW5vbmljYWwueCA+PiB6RGlmZmVyZW5jZSkgJiZcbiAgICAgICAgICAgICAgICBwYXJlbnQuY2Fub25pY2FsLnkgPT09ICh0aGlzLmNhbm9uaWNhbC55ID4+IHpEaWZmZXJlbmNlKSk7XG4gICAgfVxuXG4gICAgY2hpbGRyZW4oc291cmNlTWF4Wm9vbTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLm92ZXJzY2FsZWRaID49IHNvdXJjZU1heFpvb20pIHtcbiAgICAgICAgICAgIC8vIHJldHVybiBhIHNpbmdsZSB0aWxlIGNvb3JkIHJlcHJlc2VudGluZyBhIGFuIG92ZXJzY2FsZWQgdGlsZVxuICAgICAgICAgICAgcmV0dXJuIFtuZXcgT3ZlcnNjYWxlZFRpbGVJRCh0aGlzLm92ZXJzY2FsZWRaICsgMSwgdGhpcy53cmFwLCB0aGlzLmNhbm9uaWNhbC56LCB0aGlzLmNhbm9uaWNhbC54LCB0aGlzLmNhbm9uaWNhbC55KV07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB6ID0gdGhpcy5jYW5vbmljYWwueiArIDE7XG4gICAgICAgIGNvbnN0IHggPSB0aGlzLmNhbm9uaWNhbC54ICogMjtcbiAgICAgICAgY29uc3QgeSA9IHRoaXMuY2Fub25pY2FsLnkgKiAyO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IE92ZXJzY2FsZWRUaWxlSUQoeiwgdGhpcy53cmFwLCB6LCB4LCB5KSxcbiAgICAgICAgICAgIG5ldyBPdmVyc2NhbGVkVGlsZUlEKHosIHRoaXMud3JhcCwgeiwgeCArIDEsIHkpLFxuICAgICAgICAgICAgbmV3IE92ZXJzY2FsZWRUaWxlSUQoeiwgdGhpcy53cmFwLCB6LCB4LCB5ICsgMSksXG4gICAgICAgICAgICBuZXcgT3ZlcnNjYWxlZFRpbGVJRCh6LCB0aGlzLndyYXAsIHosIHggKyAxLCB5ICsgMSlcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBpc0xlc3NUaGFuKHJoczogT3ZlcnNjYWxlZFRpbGVJRCkge1xuICAgICAgICBpZiAodGhpcy53cmFwIDwgcmhzLndyYXApIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAodGhpcy53cmFwID4gcmhzLndyYXApIHJldHVybiBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy5vdmVyc2NhbGVkWiA8IHJocy5vdmVyc2NhbGVkWikgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICh0aGlzLm92ZXJzY2FsZWRaID4gcmhzLm92ZXJzY2FsZWRaKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMuY2Fub25pY2FsLnggPCByaHMuY2Fub25pY2FsLngpIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAodGhpcy5jYW5vbmljYWwueCA+IHJocy5jYW5vbmljYWwueCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGlmICh0aGlzLmNhbm9uaWNhbC55IDwgcmhzLmNhbm9uaWNhbC55KSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHdyYXBwZWQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgT3ZlcnNjYWxlZFRpbGVJRCh0aGlzLm92ZXJzY2FsZWRaLCAwLCB0aGlzLmNhbm9uaWNhbC56LCB0aGlzLmNhbm9uaWNhbC54LCB0aGlzLmNhbm9uaWNhbC55KTtcbiAgICB9XG5cbiAgICB1bndyYXBUbyh3cmFwOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPdmVyc2NhbGVkVGlsZUlEKHRoaXMub3ZlcnNjYWxlZFosIHdyYXAsIHRoaXMuY2Fub25pY2FsLnosIHRoaXMuY2Fub25pY2FsLngsIHRoaXMuY2Fub25pY2FsLnkpO1xuICAgIH1cblxuICAgIG92ZXJzY2FsZUZhY3RvcigpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgucG93KDIsIHRoaXMub3ZlcnNjYWxlZFogLSB0aGlzLmNhbm9uaWNhbC56KTtcbiAgICB9XG5cbiAgICB0b1Vud3JhcHBlZCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBVbndyYXBwZWRUaWxlSUQodGhpcy53cmFwLCB0aGlzLmNhbm9uaWNhbCk7XG4gICAgfVxuXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLm92ZXJzY2FsZWRafS8ke3RoaXMuY2Fub25pY2FsLnh9LyR7dGhpcy5jYW5vbmljYWwueX1gO1xuICAgIH1cblxuICAgIGdldFRpbGVQb2ludChjb29yZDogTWVyY2F0b3JDb29yZGluYXRlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbm9uaWNhbC5nZXRUaWxlUG9pbnQobmV3IE1lcmNhdG9yQ29vcmRpbmF0ZShjb29yZC54IC0gdGhpcy53cmFwLCBjb29yZC55KSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVLZXkod3JhcDogbnVtYmVyLCBvdmVyc2NhbGVkWjogbnVtYmVyLCB6OiBudW1iZXIsIHg6IG51bWJlciwgeTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICB3cmFwICo9IDI7XG4gICAgaWYgKHdyYXAgPCAwKSB3cmFwID0gd3JhcCAqIC0xIC0gMTtcbiAgICBjb25zdCBkaW0gPSAxIDw8IHo7XG4gICAgcmV0dXJuIChkaW0gKiBkaW0gKiB3cmFwICsgZGltICogeSArIHgpLnRvU3RyaW5nKDM2KSArIHoudG9TdHJpbmcoMzYpICsgb3ZlcnNjYWxlZFoudG9TdHJpbmcoMzYpO1xufVxuXG5mdW5jdGlvbiBnZXRRdWFka2V5KHosIHgsIHkpIHtcbiAgICBsZXQgcXVhZGtleSA9ICcnLCBtYXNrO1xuICAgIGZvciAobGV0IGkgPSB6OyBpID4gMDsgaS0tKSB7XG4gICAgICAgIG1hc2sgPSAxIDw8IChpIC0gMSk7XG4gICAgICAgIHF1YWRrZXkgKz0gKCh4ICYgbWFzayA/IDEgOiAwKSArICh5ICYgbWFzayA/IDIgOiAwKSk7XG4gICAgfVxuICAgIHJldHVybiBxdWFka2V5O1xufVxuXG5yZWdpc3RlcignQ2Fub25pY2FsVGlsZUlEJywgQ2Fub25pY2FsVGlsZUlEKTtcbnJlZ2lzdGVyKCdPdmVyc2NhbGVkVGlsZUlEJywgT3ZlcnNjYWxlZFRpbGVJRCwge29taXQ6IFsncG9zTWF0cml4J119KTtcbiIsIi8vIEBmbG93XG5pbXBvcnQge1JHQkFJbWFnZX0gZnJvbSAnLi4vdXRpbC9pbWFnZSc7XG5cbmltcG9ydCB7d2Fybk9uY2V9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuXG4vLyBERU1EYXRhIGlzIGEgZGF0YSBzdHJ1Y3R1cmUgZm9yIGRlY29kaW5nLCBiYWNrZmlsbGluZywgYW5kIHN0b3JpbmcgZWxldmF0aW9uIGRhdGEgZm9yIHByb2Nlc3NpbmcgaW4gdGhlIGhpbGxzaGFkZSBzaGFkZXJzXG4vLyBkYXRhIGNhbiBiZSBwb3B1bGF0ZWQgZWl0aGVyIGZyb20gYSBwbmdyYXcgaW1hZ2UgdGlsZSBvciBmcm9tIHNlcmxpYXplZCBkYXRhIHNlbnQgYmFjayBmcm9tIGEgd29ya2VyLiBXaGVuIGRhdGEgaXMgaW5pdGlhbGx5XG4vLyBsb2FkZWQgZnJvbSBhIGltYWdlIHRpbGUsIHdlIGRlY29kZSB0aGUgcGl4ZWwgdmFsdWVzIHVzaW5nIHRoZSBhcHByb3ByaWF0ZSBkZWNvZGluZyBmb3JtdWxhLCBidXQgd2Ugc3RvcmUgdGhlXG4vLyBlbGV2YXRpb24gZGF0YSBhcyBhbiBJbnQzMiB2YWx1ZS4gd2UgYWRkIDY1NTM2ICgyXjE2KSB0byBlbGltaW5hdGUgbmVnYXRpdmUgdmFsdWVzIGFuZCBlbmFibGUgdGhlIHVzZSBvZlxuLy8gaW50ZWdlciBvdmVyZmxvdyB3aGVuIGNyZWF0aW5nIHRoZSB0ZXh0dXJlIHVzZWQgaW4gdGhlIGhpbGxzaGFkZVByZXBhcmUgc3RlcC5cblxuLy8gREVNRGF0YSBhbHNvIGhhbmRsZXMgdGhlIGJhY2tmaWxsaW5nIG9mIGRhdGEgZnJvbSBhIHRpbGUncyBuZWlnaGJvcmluZyB0aWxlcy4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB3ZSB1c2UgYSBwaXhlbCdzIDhcbi8vIHN1cnJvdW5kaW5nIHBpeGVsIHZhbHVlcyB0byBjb21wdXRlIHRoZSBzbG9wZSBhdCB0aGF0IHBpeGVsLCBhbmQgd2UgY2Fubm90IGFjY3VyYXRlbHkgY2FsY3VsYXRlIHRoZSBzbG9wZSBhdCBwaXhlbHMgb24gYVxuLy8gdGlsZSdzIGVkZ2Ugd2l0aG91dCBiYWNrZmlsbGluZyBmcm9tIG5laWdoYm9yaW5nIHRpbGVzLlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBERU1EYXRhIHtcbiAgICB1aWQ6IHN0cmluZztcbiAgICBkYXRhOiBVaW50MzJBcnJheTtcbiAgICBzdHJpZGU6IG51bWJlcjtcbiAgICBkaW06IG51bWJlcjtcbiAgICBlbmNvZGluZzogXCJtYXBib3hcIiB8IFwidGVycmFyaXVtXCI7XG5cbiAgICAvLyBSR0JBSW1hZ2UgZGF0YSBoYXMgdW5pZm9ybSAxcHggcGFkZGluZyBvbiBhbGwgc2lkZXM6IHNxdWFyZSB0aWxlIGVkZ2Ugc2l6ZSBkZWZpbmVzIHN0cmlkZVxuICAgIC8vIGFuZCBkaW0gaXMgY2FsY3VsYXRlZCBhcyBzdHJpZGUgLSAyLlxuICAgIGNvbnN0cnVjdG9yKHVpZDogc3RyaW5nLCBkYXRhOiBSR0JBSW1hZ2UsIGVuY29kaW5nOiBcIm1hcGJveFwiIHwgXCJ0ZXJyYXJpdW1cIikge1xuICAgICAgICB0aGlzLnVpZCA9IHVpZDtcbiAgICAgICAgaWYgKGRhdGEuaGVpZ2h0ICE9PSBkYXRhLndpZHRoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignREVNIHRpbGVzIG11c3QgYmUgc3F1YXJlJyk7XG4gICAgICAgIGlmIChlbmNvZGluZyAmJiBlbmNvZGluZyAhPT0gXCJtYXBib3hcIiAmJiBlbmNvZGluZyAhPT0gXCJ0ZXJyYXJpdW1cIikgcmV0dXJuIHdhcm5PbmNlKFxuICAgICAgICAgICAgYFwiJHtlbmNvZGluZ31cIiBpcyBub3QgYSB2YWxpZCBlbmNvZGluZyB0eXBlLiBWYWxpZCB0eXBlcyBpbmNsdWRlIFwibWFwYm94XCIgYW5kIFwidGVycmFyaXVtXCIuYFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnN0cmlkZSA9IGRhdGEuaGVpZ2h0O1xuICAgICAgICBjb25zdCBkaW0gPSB0aGlzLmRpbSA9IGRhdGEuaGVpZ2h0IC0gMjtcbiAgICAgICAgdGhpcy5kYXRhID0gbmV3IFVpbnQzMkFycmF5KGRhdGEuZGF0YS5idWZmZXIpO1xuICAgICAgICB0aGlzLmVuY29kaW5nID0gZW5jb2RpbmcgfHwgJ21hcGJveCc7XG5cbiAgICAgICAgLy8gaW4gb3JkZXIgdG8gYXZvaWQgZmxhc2hpbmcgc2VhbXMgYmV0d2VlbiB0aWxlcywgaGVyZSB3ZSBhcmUgaW5pdGlhbGx5IHBvcHVsYXRpbmcgYSAxcHggYm9yZGVyIG9mIHBpeGVscyBhcm91bmQgdGhlIGltYWdlXG4gICAgICAgIC8vIHdpdGggdGhlIGRhdGEgb2YgdGhlIG5lYXJlc3QgcGl4ZWwgZnJvbSB0aGUgaW1hZ2UuIHRoaXMgZGF0YSBpcyBldmVudHVhbGx5IHJlcGxhY2VkIHdoZW4gdGhlIHRpbGUncyBuZWlnaGJvcmluZ1xuICAgICAgICAvLyB0aWxlcyBhcmUgbG9hZGVkIGFuZCB0aGUgYWNjdXJhdGUgZGF0YSBjYW4gYmUgYmFja2ZpbGxlZCB1c2luZyBERU1EYXRhI2JhY2tmaWxsQm9yZGVyXG4gICAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgZGltOyB4KyspIHtcbiAgICAgICAgICAgIC8vIGxlZnQgdmVydGljYWwgYm9yZGVyXG4gICAgICAgICAgICB0aGlzLmRhdGFbdGhpcy5faWR4KC0xLCB4KV0gPSB0aGlzLmRhdGFbdGhpcy5faWR4KDAsIHgpXTtcbiAgICAgICAgICAgIC8vIHJpZ2h0IHZlcnRpY2FsIGJvcmRlclxuICAgICAgICAgICAgdGhpcy5kYXRhW3RoaXMuX2lkeChkaW0sIHgpXSA9IHRoaXMuZGF0YVt0aGlzLl9pZHgoZGltIC0gMSwgeCldO1xuICAgICAgICAgICAgLy8gbGVmdCBob3Jpem9udGFsIGJvcmRlclxuICAgICAgICAgICAgdGhpcy5kYXRhW3RoaXMuX2lkeCh4LCAtMSldID0gdGhpcy5kYXRhW3RoaXMuX2lkeCh4LCAwKV07XG4gICAgICAgICAgICAvLyByaWdodCBob3Jpem9udGFsIGJvcmRlclxuICAgICAgICAgICAgdGhpcy5kYXRhW3RoaXMuX2lkeCh4LCBkaW0pXSA9IHRoaXMuZGF0YVt0aGlzLl9pZHgoeCwgZGltIC0gMSldO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvcm5lcnNcbiAgICAgICAgdGhpcy5kYXRhW3RoaXMuX2lkeCgtMSwgLTEpXSA9IHRoaXMuZGF0YVt0aGlzLl9pZHgoMCwgMCldO1xuICAgICAgICB0aGlzLmRhdGFbdGhpcy5faWR4KGRpbSwgLTEpXSA9IHRoaXMuZGF0YVt0aGlzLl9pZHgoZGltIC0gMSwgMCldO1xuICAgICAgICB0aGlzLmRhdGFbdGhpcy5faWR4KC0xLCBkaW0pXSA9IHRoaXMuZGF0YVt0aGlzLl9pZHgoMCwgZGltIC0gMSldO1xuICAgICAgICB0aGlzLmRhdGFbdGhpcy5faWR4KGRpbSwgZGltKV0gPSB0aGlzLmRhdGFbdGhpcy5faWR4KGRpbSAtIDEsIGRpbSAtIDEpXTtcbiAgICB9XG5cbiAgICBnZXQoeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgcGl4ZWxzID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhLmJ1ZmZlcik7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5faWR4KHgsIHkpICogNDtcbiAgICAgICAgY29uc3QgdW5wYWNrID0gdGhpcy5lbmNvZGluZyA9PT0gXCJ0ZXJyYXJpdW1cIiA/IHRoaXMuX3VucGFja1RlcnJhcml1bSA6IHRoaXMuX3VucGFja01hcGJveDtcbiAgICAgICAgcmV0dXJuIHVucGFjayhwaXhlbHNbaW5kZXhdLCBwaXhlbHNbaW5kZXggKyAxXSwgcGl4ZWxzW2luZGV4ICsgMl0pO1xuICAgIH1cblxuICAgIGdldFVucGFja1ZlY3RvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RpbmcgPT09IFwidGVycmFyaXVtXCIgPyBbMjU2LjAsIDEuMCwgMS4wIC8gMjU2LjAsIDMyNzY4LjBdIDogWzY1NTMuNiwgMjUuNiwgMC4xLCAxMDAwMC4wXTtcbiAgICB9XG5cbiAgICBfaWR4KHg6IG51bWJlciwgeTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh4IDwgLTEgfHwgeCA+PSB0aGlzLmRpbSArIDEgfHwgIHkgPCAtMSB8fCB5ID49IHRoaXMuZGltICsgMSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ291dCBvZiByYW5nZSBzb3VyY2UgY29vcmRpbmF0ZXMgZm9yIERFTSBkYXRhJyk7XG4gICAgICAgIHJldHVybiAoeSArIDEpICogdGhpcy5zdHJpZGUgKyAoeCArIDEpO1xuICAgIH1cblxuICAgIF91bnBhY2tNYXBib3gocjogbnVtYmVyLCBnOiBudW1iZXIsIGI6IG51bWJlcikge1xuICAgICAgICAvLyB1bnBhY2tpbmcgZm9ybXVsYSBmb3IgbWFwYm94LnRlcnJhaW4tcmdiOlxuICAgICAgICAvLyBodHRwczovL3d3dy5tYXBib3guY29tL2hlbHAvYWNjZXNzLWVsZXZhdGlvbi1kYXRhLyNtYXBib3gtdGVycmFpbi1yZ2JcbiAgICAgICAgcmV0dXJuICgociAqIDI1NiAqIDI1NiArIGcgKiAyNTYuMCArIGIpIC8gMTAuMCAtIDEwMDAwLjApO1xuICAgIH1cblxuICAgIF91bnBhY2tUZXJyYXJpdW0ocjogbnVtYmVyLCBnOiBudW1iZXIsIGI6IG51bWJlcikge1xuICAgICAgICAvLyB1bnBhY2tpbmcgZm9ybXVsYSBmb3IgbWFwemVuIHRlcnJhcml1bTpcbiAgICAgICAgLy8gaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9wdWJsaWMtZGF0YXNldHMvdGVycmFpbi9cbiAgICAgICAgcmV0dXJuICgociAqIDI1NiArIGcgKyBiIC8gMjU2KSAtIDMyNzY4LjApO1xuICAgIH1cblxuICAgIGdldFBpeGVscygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSR0JBSW1hZ2Uoe3dpZHRoOiB0aGlzLnN0cmlkZSwgaGVpZ2h0OiB0aGlzLnN0cmlkZX0sIG5ldyBVaW50OEFycmF5KHRoaXMuZGF0YS5idWZmZXIpKTtcbiAgICB9XG5cbiAgICBiYWNrZmlsbEJvcmRlcihib3JkZXJUaWxlOiBERU1EYXRhLCBkeDogbnVtYmVyLCBkeTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLmRpbSAhPT0gYm9yZGVyVGlsZS5kaW0pIHRocm93IG5ldyBFcnJvcignZGVtIGRpbWVuc2lvbiBtaXNtYXRjaCcpO1xuXG4gICAgICAgIGxldCB4TWluID0gZHggKiB0aGlzLmRpbSxcbiAgICAgICAgICAgIHhNYXggPSBkeCAqIHRoaXMuZGltICsgdGhpcy5kaW0sXG4gICAgICAgICAgICB5TWluID0gZHkgKiB0aGlzLmRpbSxcbiAgICAgICAgICAgIHlNYXggPSBkeSAqIHRoaXMuZGltICsgdGhpcy5kaW07XG5cbiAgICAgICAgc3dpdGNoIChkeCkge1xuICAgICAgICBjYXNlIC0xOlxuICAgICAgICAgICAgeE1pbiA9IHhNYXggLSAxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHhNYXggPSB4TWluICsgMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoIChkeSkge1xuICAgICAgICBjYXNlIC0xOlxuICAgICAgICAgICAgeU1pbiA9IHlNYXggLSAxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHlNYXggPSB5TWluICsgMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3ggPSAtZHggKiB0aGlzLmRpbTtcbiAgICAgICAgY29uc3Qgb3kgPSAtZHkgKiB0aGlzLmRpbTtcbiAgICAgICAgZm9yIChsZXQgeSA9IHlNaW47IHkgPCB5TWF4OyB5KyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IHggPSB4TWluOyB4IDwgeE1heDsgeCsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhW3RoaXMuX2lkeCh4LCB5KV0gPSBib3JkZXJUaWxlLmRhdGFbdGhpcy5faWR4KHggKyBveCwgeSArIG95KV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbnJlZ2lzdGVyKCdERU1EYXRhJywgREVNRGF0YSk7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgdHlwZSB7Q29sbGlzaW9uQm94QXJyYXl9IGZyb20gJy4vYXJyYXlfdHlwZXMnO1xuaW1wb3J0IHR5cGUgU3R5bGUgZnJvbSAnLi4vc3R5bGUvc3R5bGUnO1xuaW1wb3J0IHR5cGUge1R5cGVkU3R5bGVMYXllcn0gZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXIvdHlwZWRfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgRmVhdHVyZUluZGV4IGZyb20gJy4vZmVhdHVyZV9pbmRleCc7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge0ZlYXR1cmVTdGF0ZXN9IGZyb20gJy4uL3NvdXJjZS9zb3VyY2Vfc3RhdGUnO1xuaW1wb3J0IHR5cGUge0ltYWdlUG9zaXRpb259IGZyb20gJy4uL3JlbmRlci9pbWFnZV9hdGxhcyc7XG5pbXBvcnQgdHlwZSB7Q2Fub25pY2FsVGlsZUlEfSBmcm9tICcuLi9zb3VyY2UvdGlsZV9pZCc7XG5cbmV4cG9ydCB0eXBlIEJ1Y2tldFBhcmFtZXRlcnM8TGF5ZXI6IFR5cGVkU3R5bGVMYXllcj4gPSB7XG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBsYXllcnM6IEFycmF5PExheWVyPixcbiAgICB6b29tOiBudW1iZXIsXG4gICAgcGl4ZWxSYXRpbzogbnVtYmVyLFxuICAgIG92ZXJzY2FsaW5nOiBudW1iZXIsXG4gICAgY29sbGlzaW9uQm94QXJyYXk6IENvbGxpc2lvbkJveEFycmF5LFxuICAgIHNvdXJjZUxheWVySW5kZXg6IG51bWJlcixcbiAgICBzb3VyY2VJRDogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIFBvcHVsYXRlUGFyYW1ldGVycyA9IHtcbiAgICBmZWF0dXJlSW5kZXg6IEZlYXR1cmVJbmRleCxcbiAgICBpY29uRGVwZW5kZW5jaWVzOiB7fSxcbiAgICBwYXR0ZXJuRGVwZW5kZW5jaWVzOiB7fSxcbiAgICBnbHlwaERlcGVuZGVuY2llczoge30sXG4gICAgYXZhaWxhYmxlSW1hZ2VzOiBBcnJheTxzdHJpbmc+XG59XG5cbmV4cG9ydCB0eXBlIEluZGV4ZWRGZWF0dXJlID0ge1xuICAgIGZlYXR1cmU6IFZlY3RvclRpbGVGZWF0dXJlLFxuICAgIGlkOiBudW1iZXIgfCBzdHJpbmcsXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBzb3VyY2VMYXllckluZGV4OiBudW1iZXIsXG59XG5cbmV4cG9ydCB0eXBlIEJ1Y2tldEZlYXR1cmUgPSB7fFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgc291cmNlTGF5ZXJJbmRleDogbnVtYmVyLFxuICAgIGdlb21ldHJ5OiBBcnJheTxBcnJheTxQb2ludD4+LFxuICAgIHByb3BlcnRpZXM6IE9iamVjdCxcbiAgICB0eXBlOiAxIHwgMiB8IDMsXG4gICAgaWQ/OiBhbnksXG4gICAgK3BhdHRlcm5zOiB7W186IHN0cmluZ106IHtcIm1pblwiOiBzdHJpbmcsIFwibWlkXCI6IHN0cmluZywgXCJtYXhcIjogc3RyaW5nfX0sXG4gICAgc29ydEtleT86IG51bWJlclxufH07XG5cbi8qKlxuICogVGhlIGBCdWNrZXRgIGludGVyZmFjZSBpcyB0aGUgc2luZ2xlIHBvaW50IG9mIGtub3dsZWRnZSBhYm91dCB0dXJuaW5nIHZlY3RvclxuICogdGlsZXMgaW50byBXZWJHTCBidWZmZXJzLlxuICpcbiAqIGBCdWNrZXRgIGlzIGFuIGFic3RyYWN0IGludGVyZmFjZS4gQW4gaW1wbGVtZW50YXRpb24gZXhpc3RzIGZvciBlYWNoIHN0eWxlIGxheWVyIHR5cGUuXG4gKiBDcmVhdGUgYSBidWNrZXQgdmlhIHRoZSBgU3R5bGVMYXllciNjcmVhdGVCdWNrZXRgIG1ldGhvZC5cbiAqXG4gKiBUaGUgY29uY3JldGUgYnVja2V0IHR5cGVzLCB1c2luZyBsYXlvdXQgb3B0aW9ucyBmcm9tIHRoZSBzdHlsZSBsYXllcixcbiAqIHRyYW5zZm9ybSBmZWF0dXJlIGdlb21ldHJpZXMgaW50byB2ZXJ0ZXggYW5kIGluZGV4IGRhdGEgZm9yIHVzZSBieSB0aGVcbiAqIHZlcnRleCBzaGFkZXIuICBUaGV5IGFsc28gKHZpYSBgUHJvZ3JhbUNvbmZpZ3VyYXRpb25gKSB1c2UgZmVhdHVyZVxuICogcHJvcGVydGllcyBhbmQgdGhlIHpvb20gbGV2ZWwgdG8gcG9wdWxhdGUgdGhlIGF0dHJpYnV0ZXMgbmVlZGVkIGZvclxuICogZGF0YS1kcml2ZW4gc3R5bGluZy5cbiAqXG4gKiBCdWNrZXRzIGFyZSBkZXNpZ25lZCB0byBiZSBidWlsdCBvbiBhIHdvcmtlciB0aHJlYWQgYW5kIHRoZW4gc2VyaWFsaXplZCBhbmRcbiAqIHRyYW5zZmVycmVkIGJhY2sgdG8gdGhlIG1haW4gdGhyZWFkIGZvciByZW5kZXJpbmcuICBPbiB0aGUgd29ya2VyIHNpZGUsIGFcbiAqIGJ1Y2tldCdzIHZlcnRleCwgaW5kZXgsIGFuZCBhdHRyaWJ1dGUgZGF0YSBpcyBzdG9yZWQgaW4gYGJ1Y2tldC5hcnJheXM6XG4gKiBBcnJheUdyb3VwYC4gIFdoZW4gYSBidWNrZXQncyBkYXRhIGlzIHNlcmlhbGl6ZWQgYW5kIHNlbnQgYmFjayB0byB0aGUgbWFpblxuICogdGhyZWFkLCBpcyBnZXRzIGRlc2VyaWFsaXplZCAodXNpbmcgYG5ldyBCdWNrZXQoc2VyaWFsaXplZEJ1Y2tldERhdGEpYCwgd2l0aFxuICogdGhlIGFycmF5IGRhdGEgbm93IHN0b3JlZCBpbiBgYnVja2V0LmJ1ZmZlcnM6IEJ1ZmZlckdyb3VwYC4gIEJ1ZmZlckdyb3Vwc1xuICogaG9sZCB0aGUgc2FtZSBkYXRhIGFzIEFycmF5R3JvdXBzLCBidXQgYXJlIHR1bmVkIGZvciBjb25zdW1wdGlvbiBieSBXZWJHTC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1Y2tldCB7XG4gICAgbGF5ZXJJZHM6IEFycmF5PHN0cmluZz47XG4gICAgaGFzUGF0dGVybjogYm9vbGVhbjtcbiAgICArbGF5ZXJzOiBBcnJheTxhbnk+O1xuICAgICtzdGF0ZURlcGVuZGVudExheWVyczogQXJyYXk8YW55PjtcbiAgICArc3RhdGVEZXBlbmRlbnRMYXllcklkczogQXJyYXk8c3RyaW5nPjtcbiAgICBwb3B1bGF0ZShmZWF0dXJlczogQXJyYXk8SW5kZXhlZEZlYXR1cmU+LCBvcHRpb25zOiBQb3B1bGF0ZVBhcmFtZXRlcnMsIGNhbm9uaWNhbDogQ2Fub25pY2FsVGlsZUlEKTogdm9pZDtcbiAgICB1cGRhdGUoc3RhdGVzOiBGZWF0dXJlU3RhdGVzLCB2dExheWVyOiBWZWN0b3JUaWxlTGF5ZXIsIGltYWdlUG9zaXRpb25zOiB7W186IHN0cmluZ106IEltYWdlUG9zaXRpb259KTogdm9pZDtcbiAgICBpc0VtcHR5KCk6IGJvb2xlYW47XG5cbiAgICB1cGxvYWQoY29udGV4dDogQ29udGV4dCk6IHZvaWQ7XG4gICAgdXBsb2FkUGVuZGluZygpOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogUmVsZWFzZSB0aGUgV2ViR0wgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYnVmZmVycy4gTm90ZSB0aGF0IGJlY2F1c2VcbiAgICAgKiBidWNrZXRzIGFyZSBzaGFyZWQgYmV0d2VlbiBsYXllcnMgaGF2aW5nIHRoZSBzYW1lIGxheW91dCBwcm9wZXJ0aWVzLCB0aGV5XG4gICAgICogbXVzdCBiZSBkZXN0cm95ZWQgaW4gZ3JvdXBzIChhbGwgYnVja2V0cyBmb3IgYSB0aWxlLCBvciBhbGwgc3ltYm9sIGJ1Y2tldHMpLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBkZXN0cm95KCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXNlcmlhbGl6ZShpbnB1dDogQXJyYXk8QnVja2V0Piwgc3R5bGU6IFN0eWxlKToge1tfOiBzdHJpbmddOiBCdWNrZXR9IHtcbiAgICBjb25zdCBvdXRwdXQgPSB7fTtcblxuICAgIC8vIEd1YXJkIGFnYWluc3QgdGhlIGNhc2Ugd2hlcmUgdGhlIG1hcCdzIHN0eWxlIGhhcyBiZWVuIHNldCB0byBudWxsIHdoaWxlXG4gICAgLy8gdGhpcyBidWNrZXQgaGFzIGJlZW4gcGFyc2luZy5cbiAgICBpZiAoIXN0eWxlKSByZXR1cm4gb3V0cHV0O1xuXG4gICAgZm9yIChjb25zdCBidWNrZXQgb2YgaW5wdXQpIHtcbiAgICAgICAgY29uc3QgbGF5ZXJzID0gYnVja2V0LmxheWVySWRzXG4gICAgICAgICAgICAubWFwKChpZCkgPT4gc3R5bGUuZ2V0TGF5ZXIoaWQpKVxuICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKTtcblxuICAgICAgICBpZiAobGF5ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBsb29rIHVwIFN0eWxlTGF5ZXIgb2JqZWN0cyBmcm9tIGxheWVyIGlkcyAoc2luY2Ugd2UgZG9uJ3RcbiAgICAgICAgLy8gd2FudCB0byB3YXN0ZSB0aW1lIHNlcmlhbGl6aW5nL2NvcHlpbmcgdGhlbSBmcm9tIHRoZSB3b3JrZXIpXG4gICAgICAgIChidWNrZXQ6IGFueSkubGF5ZXJzID0gbGF5ZXJzO1xuICAgICAgICBpZiAoKGJ1Y2tldDogYW55KS5zdGF0ZURlcGVuZGVudExheWVySWRzKSB7XG4gICAgICAgICAgICAoYnVja2V0OiBhbnkpLnN0YXRlRGVwZW5kZW50TGF5ZXJzID0gKGJ1Y2tldDogYW55KS5zdGF0ZURlcGVuZGVudExheWVySWRzLm1hcCgobElkKSA9PiBsYXllcnMuZmlsdGVyKChsKSA9PiBsLmlkID09PSBsSWQpWzBdKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGxheWVyIG9mIGxheWVycykge1xuICAgICAgICAgICAgb3V0cHV0W2xheWVyLmlkXSA9IGJ1Y2tldDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvdXRwdXQ7XG59XG4iLCIvLyBAZmxvdyBzdHJpY3RcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5jbGFzcyBEaWN0aW9uYXJ5Q29kZXIge1xuICAgIF9zdHJpbmdUb051bWJlcjoge1tfOiBzdHJpbmddOiBudW1iZXIgfTtcbiAgICBfbnVtYmVyVG9TdHJpbmc6IEFycmF5PHN0cmluZz47XG5cbiAgICBjb25zdHJ1Y3RvcihzdHJpbmdzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIHRoaXMuX3N0cmluZ1RvTnVtYmVyID0ge307XG4gICAgICAgIHRoaXMuX251bWJlclRvU3RyaW5nID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyaW5ncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgc3RyaW5nID0gc3RyaW5nc1tpXTtcbiAgICAgICAgICAgIHRoaXMuX3N0cmluZ1RvTnVtYmVyW3N0cmluZ10gPSBpO1xuICAgICAgICAgICAgdGhpcy5fbnVtYmVyVG9TdHJpbmdbaV0gPSBzdHJpbmc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlbmNvZGUoc3RyaW5nOiBzdHJpbmcpIHtcbiAgICAgICAgYXNzZXJ0KHN0cmluZyBpbiB0aGlzLl9zdHJpbmdUb051bWJlcik7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdHJpbmdUb051bWJlcltzdHJpbmddO1xuICAgIH1cblxuICAgIGRlY29kZShuOiBudW1iZXIpIHtcbiAgICAgICAgYXNzZXJ0KG4gPCB0aGlzLl9udW1iZXJUb1N0cmluZy5sZW5ndGgpO1xuICAgICAgICByZXR1cm4gdGhpcy5fbnVtYmVyVG9TdHJpbmdbbl07XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEaWN0aW9uYXJ5Q29kZXI7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHR5cGUge0dlb0pTT05HZW9tZXRyeX0gZnJvbSAnQG1hcGJveC9nZW9qc29uLXR5cGVzJztcblxuY2xhc3MgRmVhdHVyZSB7XG4gICAgdHlwZTogJ0ZlYXR1cmUnO1xuICAgIF9nZW9tZXRyeTogP0dlb0pTT05HZW9tZXRyeTtcbiAgICBwcm9wZXJ0aWVzOiB7fTtcbiAgICBpZDogbnVtYmVyIHwgc3RyaW5nIHwgdm9pZDtcblxuICAgIF92ZWN0b3JUaWxlRmVhdHVyZTogVmVjdG9yVGlsZUZlYXR1cmU7XG5cbiAgICBjb25zdHJ1Y3Rvcih2ZWN0b3JUaWxlRmVhdHVyZTogVmVjdG9yVGlsZUZlYXR1cmUsIHo6IG51bWJlciwgeDogbnVtYmVyLCB5OiBudW1iZXIsIGlkOiBzdHJpbmcgfCBudW1iZXIgfCB2b2lkKSB7XG4gICAgICAgIHRoaXMudHlwZSA9ICdGZWF0dXJlJztcblxuICAgICAgICB0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZSA9IHZlY3RvclRpbGVGZWF0dXJlO1xuICAgICAgICAodmVjdG9yVGlsZUZlYXR1cmU6IGFueSkuX3ogPSB6O1xuICAgICAgICAodmVjdG9yVGlsZUZlYXR1cmU6IGFueSkuX3ggPSB4O1xuICAgICAgICAodmVjdG9yVGlsZUZlYXR1cmU6IGFueSkuX3kgPSB5O1xuXG4gICAgICAgIHRoaXMucHJvcGVydGllcyA9IHZlY3RvclRpbGVGZWF0dXJlLnByb3BlcnRpZXM7XG4gICAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICB9XG5cbiAgICBnZXQgZ2VvbWV0cnkoKTogP0dlb0pTT05HZW9tZXRyeSB7XG4gICAgICAgIGlmICh0aGlzLl9nZW9tZXRyeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLl9nZW9tZXRyeSA9IHRoaXMuX3ZlY3RvclRpbGVGZWF0dXJlLnRvR2VvSlNPTihcbiAgICAgICAgICAgICAgICAodGhpcy5fdmVjdG9yVGlsZUZlYXR1cmU6IGFueSkuX3gsXG4gICAgICAgICAgICAgICAgKHRoaXMuX3ZlY3RvclRpbGVGZWF0dXJlOiBhbnkpLl95LFxuICAgICAgICAgICAgICAgICh0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZTogYW55KS5feikuZ2VvbWV0cnk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2dlb21ldHJ5O1xuICAgIH1cblxuICAgIHNldCBnZW9tZXRyeShnOiA/R2VvSlNPTkdlb21ldHJ5KSB7XG4gICAgICAgIHRoaXMuX2dlb21ldHJ5ID0gZztcbiAgICB9XG5cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICAgICAgICBnZW9tZXRyeTogdGhpcy5nZW9tZXRyeVxuICAgICAgICB9O1xuICAgICAgICBmb3IgKGNvbnN0IGkgaW4gdGhpcykge1xuICAgICAgICAgICAgaWYgKGkgPT09ICdfZ2VvbWV0cnknIHx8IGkgPT09ICdfdmVjdG9yVGlsZUZlYXR1cmUnKSBjb250aW51ZTtcbiAgICAgICAgICAgIGpzb25baV0gPSAodGhpczogYW55KVtpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ganNvbjtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZlYXR1cmU7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2V4dGVuZH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCBUaWxlIGZyb20gJy4vdGlsZSc7XG5pbXBvcnQgdHlwZSB7RmVhdHVyZVN0YXRlfSBmcm9tICcuLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24nO1xuXG5leHBvcnQgdHlwZSBGZWF0dXJlU3RhdGVzID0ge1tmZWF0dXJlX2lkOiBzdHJpbmddOiBGZWF0dXJlU3RhdGV9O1xuZXhwb3J0IHR5cGUgTGF5ZXJGZWF0dXJlU3RhdGVzID0ge1tsYXllcjogc3RyaW5nXTogRmVhdHVyZVN0YXRlc307XG5cbi8qKlxuICogU291cmNlRmVhdHVyZVN0YXRlIG1hbmFnZXMgdGhlIHN0YXRlIGFuZCBwZW5kaW5nIGNoYW5nZXNcbiAqIHRvIGZlYXR1cmVzIGluIGEgc291cmNlLCBzZXBhcmF0ZWQgYnkgc291cmNlIGxheWVyLlxuICogc3RhdGVDaGFuZ2VzIGFuZCBkZWxldGVkU3RhdGVzIGJhdGNoIGFsbCBjaGFuZ2VzIHRvIHRoZSB0aWxlICh1cGRhdGVzIGFuZCByZW1vdmVzLCByZXNwZWN0aXZlbHkpXG4gKiBiZXR3ZWVuIGNvYWxlc2NlKCkgZXZlbnRzLiBhZGRGZWF0dXJlU3RhdGUoKSBhbmQgcmVtb3ZlRmVhdHVyZVN0YXRlKCkgYWxzbyB1cGRhdGUgdGhlaXIgY291bnRlcnBhcnQnc1xuICogbGlzdCBvZiBjaGFuZ2VzLCBzdWNoIHRoYXQgY29hbGVzY2UoKSBjYW4gYXBwbHkgdGhlIHByb3BlciBzdGF0ZSBjaGFuZ2VzIHdoaWxlIGFnbm9zdGljIHRvIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zLlxuICogSW4gZGVsZXRlZFN0YXRlcywgYWxsIG51bGwncyBkZW5vdGUgY29tcGxldGUgcmVtb3ZhbCBvZiBzdGF0ZSBhdCB0aGF0IHNjb3BlXG4gKiBAcHJpdmF0ZVxuKi9cbmNsYXNzIFNvdXJjZUZlYXR1cmVTdGF0ZSB7XG4gICAgc3RhdGU6IExheWVyRmVhdHVyZVN0YXRlcztcbiAgICBzdGF0ZUNoYW5nZXM6IExheWVyRmVhdHVyZVN0YXRlcztcbiAgICBkZWxldGVkU3RhdGVzOiB7fTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnN0YXRlID0ge307XG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzID0ge307XG4gICAgICAgIHRoaXMuZGVsZXRlZFN0YXRlcyA9IHt9O1xuICAgIH1cblxuICAgIHVwZGF0ZVN0YXRlKHNvdXJjZUxheWVyOiBzdHJpbmcsIGZlYXR1cmVJZDogbnVtYmVyIHwgc3RyaW5nLCBuZXdTdGF0ZTogT2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IGZlYXR1cmUgPSBTdHJpbmcoZmVhdHVyZUlkKTtcbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXNbc291cmNlTGF5ZXJdID0gdGhpcy5zdGF0ZUNoYW5nZXNbc291cmNlTGF5ZXJdIHx8IHt9O1xuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlc1tzb3VyY2VMYXllcl1bZmVhdHVyZV0gPSB0aGlzLnN0YXRlQ2hhbmdlc1tzb3VyY2VMYXllcl1bZmVhdHVyZV0gfHwge307XG4gICAgICAgIGV4dGVuZCh0aGlzLnN0YXRlQ2hhbmdlc1tzb3VyY2VMYXllcl1bZmVhdHVyZV0sIG5ld1N0YXRlKTtcblxuICAgICAgICBpZiAodGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXSA9IHt9O1xuICAgICAgICAgICAgZm9yIChjb25zdCBmdCBpbiB0aGlzLnN0YXRlW3NvdXJjZUxheWVyXSkge1xuICAgICAgICAgICAgICAgIGlmIChmdCAhPT0gZmVhdHVyZSkgdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXVtmdF0gPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZmVhdHVyZURlbGV0aW9uUXVldWVkID0gdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXSAmJiB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVdID09PSBudWxsO1xuICAgICAgICAgICAgaWYgKGZlYXR1cmVEZWxldGlvblF1ZXVlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl1bZmVhdHVyZV0gPSB7fTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gdGhpcy5zdGF0ZVtzb3VyY2VMYXllcl1bZmVhdHVyZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXdTdGF0ZVtwcm9wXSkgdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXVtmZWF0dXJlXVtwcm9wXSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBuZXdTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWxldGlvbkluUXVldWUgPSB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdICYmIHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl1bZmVhdHVyZV0gJiYgdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXVtmZWF0dXJlXVtrZXldID09PSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGVsZXRpb25JblF1ZXVlKSBkZWxldGUgdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXVtmZWF0dXJlXVtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZUZlYXR1cmVTdGF0ZShzb3VyY2VMYXllcjogc3RyaW5nLCBmZWF0dXJlSWQ/OiBudW1iZXIgfCBzdHJpbmcsIGtleT86IHN0cmluZykge1xuICAgICAgICBjb25zdCBzb3VyY2VMYXllckRlbGV0ZWQgPSB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdID09PSBudWxsO1xuICAgICAgICBpZiAoc291cmNlTGF5ZXJEZWxldGVkKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgZmVhdHVyZSA9IFN0cmluZyhmZWF0dXJlSWQpO1xuXG4gICAgICAgIHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl0gPSB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdIHx8IHt9O1xuXG4gICAgICAgIGlmIChrZXkgJiYgZmVhdHVyZUlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVdICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXVtmZWF0dXJlXSA9IHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl1bZmVhdHVyZV0gfHwge307XG4gICAgICAgICAgICAgICAgdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXVtmZWF0dXJlXVtrZXldID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmZWF0dXJlSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgdXBkYXRlSW5RdWV1ZSA9IHRoaXMuc3RhdGVDaGFuZ2VzW3NvdXJjZUxheWVyXSAmJiB0aGlzLnN0YXRlQ2hhbmdlc1tzb3VyY2VMYXllcl1bZmVhdHVyZV07XG4gICAgICAgICAgICBpZiAodXBkYXRlSW5RdWV1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl1bZmVhdHVyZV0gPSB7fTtcbiAgICAgICAgICAgICAgICBmb3IgKGtleSBpbiB0aGlzLnN0YXRlQ2hhbmdlc1tzb3VyY2VMYXllcl1bZmVhdHVyZV0pIHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl1bZmVhdHVyZV1ba2V5XSA9IG51bGw7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXVtmZWF0dXJlXSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgZ2V0U3RhdGUoc291cmNlTGF5ZXI6IHN0cmluZywgZmVhdHVyZUlkOiBudW1iZXIgfCBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZmVhdHVyZSA9IFN0cmluZyhmZWF0dXJlSWQpO1xuICAgICAgICBjb25zdCBiYXNlID0gdGhpcy5zdGF0ZVtzb3VyY2VMYXllcl0gfHwge307XG4gICAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLnN0YXRlQ2hhbmdlc1tzb3VyY2VMYXllcl0gfHwge307XG5cbiAgICAgICAgY29uc3QgcmVjb25jaWxlZFN0YXRlID0gZXh0ZW5kKHt9LCBiYXNlW2ZlYXR1cmVdLCBjaGFuZ2VzW2ZlYXR1cmVdKTtcblxuICAgICAgICAvL3JldHVybiBlbXB0eSBvYmplY3QgaWYgdGhlIHdob2xlIHNvdXJjZSBsYXllciBpcyBhd2FpdGluZyBkZWxldGlvblxuICAgICAgICBpZiAodGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXSA9PT0gbnVsbCkgcmV0dXJuIHt9O1xuICAgICAgICBlbHNlIGlmICh0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdKSB7XG4gICAgICAgICAgICBjb25zdCBmZWF0dXJlRGVsZXRpb25zID0gdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXVtmZWF0dXJlSWRdO1xuICAgICAgICAgICAgaWYgKGZlYXR1cmVEZWxldGlvbnMgPT09IG51bGwpIHJldHVybiB7fTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBmZWF0dXJlRGVsZXRpb25zKSBkZWxldGUgcmVjb25jaWxlZFN0YXRlW3Byb3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZWNvbmNpbGVkU3RhdGU7XG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZVRpbGVTdGF0ZSh0aWxlOiBUaWxlLCBwYWludGVyOiBhbnkpIHtcbiAgICAgICAgdGlsZS5zZXRGZWF0dXJlU3RhdGUodGhpcy5zdGF0ZSwgcGFpbnRlcik7XG4gICAgfVxuXG4gICAgY29hbGVzY2VDaGFuZ2VzKHRpbGVzOiB7W186IGFueV06IFRpbGV9LCBwYWludGVyOiBhbnkpIHtcbiAgICAgICAgLy90cmFjayBjaGFuZ2VzIHdpdGggZnVsbCBzdGF0ZSBvYmplY3RzLCBidXQgb25seSBmb3IgZmVhdHVyZXMgdGhhdCBnb3QgbW9kaWZpZWRcbiAgICAgICAgY29uc3QgZmVhdHVyZXNDaGFuZ2VkOiBMYXllckZlYXR1cmVTdGF0ZXMgPSB7fTtcblxuICAgICAgICBmb3IgKGNvbnN0IHNvdXJjZUxheWVyIGluIHRoaXMuc3RhdGVDaGFuZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlW3NvdXJjZUxheWVyXSAgPSB0aGlzLnN0YXRlW3NvdXJjZUxheWVyXSB8fCB7fTtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyU3RhdGVzID0ge307XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZlYXR1cmUgaW4gdGhpcy5zdGF0ZUNoYW5nZXNbc291cmNlTGF5ZXJdKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXRlW3NvdXJjZUxheWVyXVtmZWF0dXJlXSkgdGhpcy5zdGF0ZVtzb3VyY2VMYXllcl1bZmVhdHVyZV0gPSB7fTtcbiAgICAgICAgICAgICAgICBleHRlbmQodGhpcy5zdGF0ZVtzb3VyY2VMYXllcl1bZmVhdHVyZV0sIHRoaXMuc3RhdGVDaGFuZ2VzW3NvdXJjZUxheWVyXVtmZWF0dXJlXSk7XG4gICAgICAgICAgICAgICAgbGF5ZXJTdGF0ZXNbZmVhdHVyZV0gPSB0aGlzLnN0YXRlW3NvdXJjZUxheWVyXVtmZWF0dXJlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZlYXR1cmVzQ2hhbmdlZFtzb3VyY2VMYXllcl0gPSBsYXllclN0YXRlcztcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3Qgc291cmNlTGF5ZXIgaW4gdGhpcy5kZWxldGVkU3RhdGVzKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlW3NvdXJjZUxheWVyXSAgPSB0aGlzLnN0YXRlW3NvdXJjZUxheWVyXSB8fCB7fTtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyU3RhdGVzID0ge307XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmdCBpbiB0aGlzLnN0YXRlW3NvdXJjZUxheWVyXSkge1xuICAgICAgICAgICAgICAgICAgICBsYXllclN0YXRlc1tmdF0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZVtzb3VyY2VMYXllcl1bZnRdID0ge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZlYXR1cmUgaW4gdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWxldGVXaG9sZUZlYXR1cmVTdGF0ZSA9IHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl1bZmVhdHVyZV0gPT09IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWxldGVXaG9sZUZlYXR1cmVTdGF0ZSkgdGhpcy5zdGF0ZVtzb3VyY2VMYXllcl1bZmVhdHVyZV0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnN0YXRlW3NvdXJjZUxheWVyXVtmZWF0dXJlXVtrZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGxheWVyU3RhdGVzW2ZlYXR1cmVdID0gdGhpcy5zdGF0ZVtzb3VyY2VMYXllcl1bZmVhdHVyZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmZWF0dXJlc0NoYW5nZWRbc291cmNlTGF5ZXJdID0gZmVhdHVyZXNDaGFuZ2VkW3NvdXJjZUxheWVyXSB8fCB7fTtcbiAgICAgICAgICAgIGV4dGVuZChmZWF0dXJlc0NoYW5nZWRbc291cmNlTGF5ZXJdLCBsYXllclN0YXRlcyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcyA9IHt9O1xuICAgICAgICB0aGlzLmRlbGV0ZWRTdGF0ZXMgPSB7fTtcblxuICAgICAgICBpZiAoT2JqZWN0LmtleXMoZmVhdHVyZXNDaGFuZ2VkKS5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCB0aWxlID0gdGlsZXNbaWRdO1xuICAgICAgICAgICAgdGlsZS5zZXRGZWF0dXJlU3RhdGUoZmVhdHVyZXNDaGFuZ2VkLCBwYWludGVyKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU291cmNlRmVhdHVyZVN0YXRlO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG5pbXBvcnQgbG9hZEdlb21ldHJ5IGZyb20gJy4vbG9hZF9nZW9tZXRyeSc7XG5pbXBvcnQgRVhURU5UIGZyb20gJy4vZXh0ZW50JztcbmltcG9ydCBmZWF0dXJlRmlsdGVyIGZyb20gJy4uL3N0eWxlLXNwZWMvZmVhdHVyZV9maWx0ZXInO1xuaW1wb3J0IEdyaWQgZnJvbSAnZ3JpZC1pbmRleCc7XG5pbXBvcnQgRGljdGlvbmFyeUNvZGVyIGZyb20gJy4uL3V0aWwvZGljdGlvbmFyeV9jb2Rlcic7XG5pbXBvcnQgdnQgZnJvbSAnQG1hcGJveC92ZWN0b3ItdGlsZSc7XG5pbXBvcnQgUHJvdG9idWYgZnJvbSAncGJmJztcbmltcG9ydCBHZW9KU09ORmVhdHVyZSBmcm9tICcuLi91dGlsL3ZlY3RvcnRpbGVfdG9fZ2VvanNvbic7XG5pbXBvcnQge2FycmF5c0ludGVyc2VjdCwgbWFwT2JqZWN0fSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuLi9zb3VyY2UvdGlsZV9pZCc7XG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuaW1wb3J0IEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4uL3N0eWxlL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5pbXBvcnQgU291cmNlRmVhdHVyZVN0YXRlIGZyb20gJy4uL3NvdXJjZS9zb3VyY2Vfc3RhdGUnO1xuaW1wb3J0IHtwb2x5Z29uSW50ZXJzZWN0c0JveH0gZnJvbSAnLi4vdXRpbC9pbnRlcnNlY3Rpb25fdGVzdHMnO1xuaW1wb3J0IHtQb3NzaWJseUV2YWx1YXRlZH0gZnJvbSAnLi4vc3R5bGUvcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUge0ZlYXR1cmVGaWx0ZXJ9IGZyb20gJy4uL3N0eWxlLXNwZWMvZmVhdHVyZV9maWx0ZXInO1xuaW1wb3J0IHR5cGUgVHJhbnNmb3JtIGZyb20gJy4uL2dlby90cmFuc2Zvcm0nO1xuaW1wb3J0IHR5cGUge0ZpbHRlclNwZWNpZmljYXRpb24sIFByb21vdGVJZFNwZWNpZmljYXRpb259IGZyb20gJy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG5pbXBvcnQge0ZlYXR1cmVJbmRleEFycmF5fSBmcm9tICcuL2FycmF5X3R5cGVzJztcblxudHlwZSBRdWVyeVBhcmFtZXRlcnMgPSB7XG4gICAgc2NhbGU6IG51bWJlcixcbiAgICBwaXhlbFBvc01hdHJpeDogRmxvYXQzMkFycmF5LFxuICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtLFxuICAgIHRpbGVTaXplOiBudW1iZXIsXG4gICAgcXVlcnlHZW9tZXRyeTogQXJyYXk8UG9pbnQ+LFxuICAgIGNhbWVyYVF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50PixcbiAgICBxdWVyeVBhZGRpbmc6IG51bWJlcixcbiAgICBwYXJhbXM6IHtcbiAgICAgICAgZmlsdGVyOiBGaWx0ZXJTcGVjaWZpY2F0aW9uLFxuICAgICAgICBsYXllcnM6IEFycmF5PHN0cmluZz4sXG4gICAgICAgIGF2YWlsYWJsZUltYWdlczogQXJyYXk8c3RyaW5nPlxuICAgIH1cbn1cblxuY2xhc3MgRmVhdHVyZUluZGV4IHtcbiAgICB0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQ7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbiAgICB6OiBudW1iZXI7XG4gICAgZ3JpZDogR3JpZDtcbiAgICBncmlkM0Q6IEdyaWQ7XG4gICAgZmVhdHVyZUluZGV4QXJyYXk6IEZlYXR1cmVJbmRleEFycmF5O1xuICAgIHByb21vdGVJZDogP1Byb21vdGVJZFNwZWNpZmljYXRpb247XG5cbiAgICByYXdUaWxlRGF0YTogQXJyYXlCdWZmZXI7XG4gICAgYnVja2V0TGF5ZXJJRHM6IEFycmF5PEFycmF5PHN0cmluZz4+O1xuXG4gICAgdnRMYXllcnM6IHtbXzogc3RyaW5nXTogVmVjdG9yVGlsZUxheWVyfTtcbiAgICBzb3VyY2VMYXllckNvZGVyOiBEaWN0aW9uYXJ5Q29kZXI7XG5cbiAgICBjb25zdHJ1Y3Rvcih0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQsIHByb21vdGVJZD86ID9Qcm9tb3RlSWRTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHRoaXMudGlsZUlEID0gdGlsZUlEO1xuICAgICAgICB0aGlzLnggPSB0aWxlSUQuY2Fub25pY2FsLng7XG4gICAgICAgIHRoaXMueSA9IHRpbGVJRC5jYW5vbmljYWwueTtcbiAgICAgICAgdGhpcy56ID0gdGlsZUlELmNhbm9uaWNhbC56O1xuICAgICAgICB0aGlzLmdyaWQgPSBuZXcgR3JpZChFWFRFTlQsIDE2LCAwKTtcbiAgICAgICAgdGhpcy5ncmlkM0QgPSBuZXcgR3JpZChFWFRFTlQsIDE2LCAwKTtcbiAgICAgICAgdGhpcy5mZWF0dXJlSW5kZXhBcnJheSA9IG5ldyBGZWF0dXJlSW5kZXhBcnJheSgpO1xuICAgICAgICB0aGlzLnByb21vdGVJZCA9IHByb21vdGVJZDtcbiAgICB9XG5cbiAgICBpbnNlcnQoZmVhdHVyZTogVmVjdG9yVGlsZUZlYXR1cmUsIGdlb21ldHJ5OiBBcnJheTxBcnJheTxQb2ludD4+LCBmZWF0dXJlSW5kZXg6IG51bWJlciwgc291cmNlTGF5ZXJJbmRleDogbnVtYmVyLCBidWNrZXRJbmRleDogbnVtYmVyLCBpczNEPzogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmZlYXR1cmVJbmRleEFycmF5Lmxlbmd0aDtcbiAgICAgICAgdGhpcy5mZWF0dXJlSW5kZXhBcnJheS5lbXBsYWNlQmFjayhmZWF0dXJlSW5kZXgsIHNvdXJjZUxheWVySW5kZXgsIGJ1Y2tldEluZGV4KTtcblxuICAgICAgICBjb25zdCBncmlkID0gaXMzRCA/IHRoaXMuZ3JpZDNEIDogdGhpcy5ncmlkO1xuXG4gICAgICAgIGZvciAobGV0IHIgPSAwOyByIDwgZ2VvbWV0cnkubGVuZ3RoOyByKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJpbmcgPSBnZW9tZXRyeVtyXTtcblxuICAgICAgICAgICAgY29uc3QgYmJveCA9IFtJbmZpbml0eSwgSW5maW5pdHksIC1JbmZpbml0eSwgLUluZmluaXR5XTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSByaW5nW2ldO1xuICAgICAgICAgICAgICAgIGJib3hbMF0gPSBNYXRoLm1pbihiYm94WzBdLCBwLngpO1xuICAgICAgICAgICAgICAgIGJib3hbMV0gPSBNYXRoLm1pbihiYm94WzFdLCBwLnkpO1xuICAgICAgICAgICAgICAgIGJib3hbMl0gPSBNYXRoLm1heChiYm94WzJdLCBwLngpO1xuICAgICAgICAgICAgICAgIGJib3hbM10gPSBNYXRoLm1heChiYm94WzNdLCBwLnkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYmJveFswXSA8IEVYVEVOVCAmJlxuICAgICAgICAgICAgICAgIGJib3hbMV0gPCBFWFRFTlQgJiZcbiAgICAgICAgICAgICAgICBiYm94WzJdID49IDAgJiZcbiAgICAgICAgICAgICAgICBiYm94WzNdID49IDApIHtcbiAgICAgICAgICAgICAgICBncmlkLmluc2VydChrZXksIGJib3hbMF0sIGJib3hbMV0sIGJib3hbMl0sIGJib3hbM10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbG9hZFZUTGF5ZXJzKCk6IHtbXzogc3RyaW5nXTogVmVjdG9yVGlsZUxheWVyfSB7XG4gICAgICAgIGlmICghdGhpcy52dExheWVycykge1xuICAgICAgICAgICAgdGhpcy52dExheWVycyA9IG5ldyB2dC5WZWN0b3JUaWxlKG5ldyBQcm90b2J1Zih0aGlzLnJhd1RpbGVEYXRhKSkubGF5ZXJzO1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VMYXllckNvZGVyID0gbmV3IERpY3Rpb25hcnlDb2Rlcih0aGlzLnZ0TGF5ZXJzID8gT2JqZWN0LmtleXModGhpcy52dExheWVycykuc29ydCgpIDogWydfZ2VvanNvblRpbGVMYXllciddKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy52dExheWVycztcbiAgICB9XG5cbiAgICAvLyBGaW5kcyBub24tc3ltYm9sIGZlYXR1cmVzIGluIHRoaXMgdGlsZSBhdCBhIHBhcnRpY3VsYXIgcG9zaXRpb24uXG4gICAgcXVlcnkoYXJnczogUXVlcnlQYXJhbWV0ZXJzLCBzdHlsZUxheWVyczoge1tfOiBzdHJpbmddOiBTdHlsZUxheWVyfSwgc2VyaWFsaXplZExheWVyczoge1tfOiBzdHJpbmddOiBPYmplY3R9LCBzb3VyY2VGZWF0dXJlU3RhdGU6IFNvdXJjZUZlYXR1cmVTdGF0ZSk6IHtbXzogc3RyaW5nXTogQXJyYXk8eyBmZWF0dXJlSW5kZXg6IG51bWJlciwgZmVhdHVyZTogR2VvSlNPTkZlYXR1cmUgfT59IHtcbiAgICAgICAgdGhpcy5sb2FkVlRMYXllcnMoKTtcblxuICAgICAgICBjb25zdCBwYXJhbXMgPSBhcmdzLnBhcmFtcyB8fCB7fSxcbiAgICAgICAgICAgIHBpeGVsc1RvVGlsZVVuaXRzID0gRVhURU5UIC8gYXJncy50aWxlU2l6ZSAvIGFyZ3Muc2NhbGUsXG4gICAgICAgICAgICBmaWx0ZXIgPSBmZWF0dXJlRmlsdGVyKHBhcmFtcy5maWx0ZXIpO1xuXG4gICAgICAgIGNvbnN0IHF1ZXJ5R2VvbWV0cnkgPSBhcmdzLnF1ZXJ5R2VvbWV0cnk7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFkZGluZyA9IGFyZ3MucXVlcnlQYWRkaW5nICogcGl4ZWxzVG9UaWxlVW5pdHM7XG5cbiAgICAgICAgY29uc3QgYm91bmRzID0gZ2V0Qm91bmRzKHF1ZXJ5R2VvbWV0cnkpO1xuICAgICAgICBjb25zdCBtYXRjaGluZyA9IHRoaXMuZ3JpZC5xdWVyeShib3VuZHMubWluWCAtIHF1ZXJ5UGFkZGluZywgYm91bmRzLm1pblkgLSBxdWVyeVBhZGRpbmcsIGJvdW5kcy5tYXhYICsgcXVlcnlQYWRkaW5nLCBib3VuZHMubWF4WSArIHF1ZXJ5UGFkZGluZyk7XG5cbiAgICAgICAgY29uc3QgY2FtZXJhQm91bmRzID0gZ2V0Qm91bmRzKGFyZ3MuY2FtZXJhUXVlcnlHZW9tZXRyeSk7XG4gICAgICAgIGNvbnN0IG1hdGNoaW5nM0QgPSB0aGlzLmdyaWQzRC5xdWVyeShcbiAgICAgICAgICAgICAgICBjYW1lcmFCb3VuZHMubWluWCAtIHF1ZXJ5UGFkZGluZywgY2FtZXJhQm91bmRzLm1pblkgLSBxdWVyeVBhZGRpbmcsIGNhbWVyYUJvdW5kcy5tYXhYICsgcXVlcnlQYWRkaW5nLCBjYW1lcmFCb3VuZHMubWF4WSArIHF1ZXJ5UGFkZGluZyxcbiAgICAgICAgICAgICAgICAoYngxLCBieTEsIGJ4MiwgYnkyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwb2x5Z29uSW50ZXJzZWN0c0JveChhcmdzLmNhbWVyYVF1ZXJ5R2VvbWV0cnksIGJ4MSAtIHF1ZXJ5UGFkZGluZywgYnkxIC0gcXVlcnlQYWRkaW5nLCBieDIgKyBxdWVyeVBhZGRpbmcsIGJ5MiArIHF1ZXJ5UGFkZGluZyk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgbWF0Y2hpbmczRCkge1xuICAgICAgICAgICAgbWF0Y2hpbmcucHVzaChrZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgbWF0Y2hpbmcuc29ydCh0b3BEb3duRmVhdHVyZUNvbXBhcmF0b3IpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgICBsZXQgcHJldmlvdXNJbmRleDtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBtYXRjaGluZy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBtYXRjaGluZ1trXTtcblxuICAgICAgICAgICAgLy8gZG9uJ3QgY2hlY2sgdGhlIHNhbWUgZmVhdHVyZSBtb3JlIHRoYW4gb25jZVxuICAgICAgICAgICAgaWYgKGluZGV4ID09PSBwcmV2aW91c0luZGV4KSBjb250aW51ZTtcbiAgICAgICAgICAgIHByZXZpb3VzSW5kZXggPSBpbmRleDtcblxuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSB0aGlzLmZlYXR1cmVJbmRleEFycmF5LmdldChpbmRleCk7XG4gICAgICAgICAgICBsZXQgZmVhdHVyZUdlb21ldHJ5ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMubG9hZE1hdGNoaW5nRmVhdHVyZShcbiAgICAgICAgICAgICAgICByZXN1bHQsXG4gICAgICAgICAgICAgICAgbWF0Y2guYnVja2V0SW5kZXgsXG4gICAgICAgICAgICAgICAgbWF0Y2guc291cmNlTGF5ZXJJbmRleCxcbiAgICAgICAgICAgICAgICBtYXRjaC5mZWF0dXJlSW5kZXgsXG4gICAgICAgICAgICAgICAgZmlsdGVyLFxuICAgICAgICAgICAgICAgIHBhcmFtcy5sYXllcnMsXG4gICAgICAgICAgICAgICAgcGFyYW1zLmF2YWlsYWJsZUltYWdlcyxcbiAgICAgICAgICAgICAgICBzdHlsZUxheWVycyxcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTGF5ZXJzLFxuICAgICAgICAgICAgICAgIHNvdXJjZUZlYXR1cmVTdGF0ZSxcbiAgICAgICAgICAgICAgICAoZmVhdHVyZTogVmVjdG9yVGlsZUZlYXR1cmUsIHN0eWxlTGF5ZXI6IFN0eWxlTGF5ZXIsIGZlYXR1cmVTdGF0ZTogT2JqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZmVhdHVyZUdlb21ldHJ5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlR2VvbWV0cnkgPSBsb2FkR2VvbWV0cnkoZmVhdHVyZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3R5bGVMYXllci5xdWVyeUludGVyc2VjdHNGZWF0dXJlKHF1ZXJ5R2VvbWV0cnksIGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSwgZmVhdHVyZUdlb21ldHJ5LCB0aGlzLnosIGFyZ3MudHJhbnNmb3JtLCBwaXhlbHNUb1RpbGVVbml0cywgYXJncy5waXhlbFBvc01hdHJpeCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgbG9hZE1hdGNoaW5nRmVhdHVyZShcbiAgICAgICAgcmVzdWx0OiB7W186IHN0cmluZ106IEFycmF5PHsgZmVhdHVyZUluZGV4OiBudW1iZXIsIGZlYXR1cmU6IEdlb0pTT05GZWF0dXJlIH0+fSxcbiAgICAgICAgYnVja2V0SW5kZXg6IG51bWJlcixcbiAgICAgICAgc291cmNlTGF5ZXJJbmRleDogbnVtYmVyLFxuICAgICAgICBmZWF0dXJlSW5kZXg6IG51bWJlcixcbiAgICAgICAgZmlsdGVyOiBGZWF0dXJlRmlsdGVyLFxuICAgICAgICBmaWx0ZXJMYXllcklEczogQXJyYXk8c3RyaW5nPixcbiAgICAgICAgYXZhaWxhYmxlSW1hZ2VzOiBBcnJheTxzdHJpbmc+LFxuICAgICAgICBzdHlsZUxheWVyczoge1tfOiBzdHJpbmddOiBTdHlsZUxheWVyfSxcbiAgICAgICAgc2VyaWFsaXplZExheWVyczoge1tfOiBzdHJpbmddOiBPYmplY3R9LFxuICAgICAgICBzb3VyY2VGZWF0dXJlU3RhdGU/OiBTb3VyY2VGZWF0dXJlU3RhdGUsXG4gICAgICAgIGludGVyc2VjdGlvblRlc3Q/OiAoZmVhdHVyZTogVmVjdG9yVGlsZUZlYXR1cmUsIHN0eWxlTGF5ZXI6IFN0eWxlTGF5ZXIsIGZlYXR1cmVTdGF0ZTogT2JqZWN0LCBpZDogc3RyaW5nIHwgbnVtYmVyIHwgdm9pZCkgPT4gYm9vbGVhbiB8IG51bWJlcikge1xuXG4gICAgICAgIGNvbnN0IGxheWVySURzID0gdGhpcy5idWNrZXRMYXllcklEc1tidWNrZXRJbmRleF07XG4gICAgICAgIGlmIChmaWx0ZXJMYXllcklEcyAmJiAhYXJyYXlzSW50ZXJzZWN0KGZpbHRlckxheWVySURzLCBsYXllcklEcykpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3Qgc291cmNlTGF5ZXJOYW1lID0gdGhpcy5zb3VyY2VMYXllckNvZGVyLmRlY29kZShzb3VyY2VMYXllckluZGV4KTtcbiAgICAgICAgY29uc3Qgc291cmNlTGF5ZXIgPSB0aGlzLnZ0TGF5ZXJzW3NvdXJjZUxheWVyTmFtZV07XG4gICAgICAgIGNvbnN0IGZlYXR1cmUgPSBzb3VyY2VMYXllci5mZWF0dXJlKGZlYXR1cmVJbmRleCk7XG5cbiAgICAgICAgaWYgKCFmaWx0ZXIuZmlsdGVyKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyh0aGlzLnRpbGVJRC5vdmVyc2NhbGVkWiksIGZlYXR1cmUpKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy5nZXRJZChmZWF0dXJlLCBzb3VyY2VMYXllck5hbWUpO1xuXG4gICAgICAgIGZvciAobGV0IGwgPSAwOyBsIDwgbGF5ZXJJRHMubGVuZ3RoOyBsKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVySUQgPSBsYXllcklEc1tsXTtcblxuICAgICAgICAgICAgaWYgKGZpbHRlckxheWVySURzICYmIGZpbHRlckxheWVySURzLmluZGV4T2YobGF5ZXJJRCkgPCAwKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHN0eWxlTGF5ZXIgPSBzdHlsZUxheWVyc1tsYXllcklEXTtcblxuICAgICAgICAgICAgaWYgKCFzdHlsZUxheWVyKSBjb250aW51ZTtcblxuICAgICAgICAgICAgbGV0IGZlYXR1cmVTdGF0ZSA9IHt9O1xuICAgICAgICAgICAgaWYgKGlkICE9PSB1bmRlZmluZWQgJiYgc291cmNlRmVhdHVyZVN0YXRlKSB7XG4gICAgICAgICAgICAgICAgLy8gYGZlYXR1cmUtc3RhdGVgIGV4cHJlc3Npb24gZXZhbHVhdGlvbiByZXF1aXJlcyBmZWF0dXJlIHN0YXRlIHRvIGJlIGF2YWlsYWJsZVxuICAgICAgICAgICAgICAgIGZlYXR1cmVTdGF0ZSA9IHNvdXJjZUZlYXR1cmVTdGF0ZS5nZXRTdGF0ZShzdHlsZUxheWVyLnNvdXJjZUxheWVyIHx8ICdfZ2VvanNvblRpbGVMYXllcicsIGlkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc2VyaWFsaXplZExheWVyID0gc2VyaWFsaXplZExheWVyc1tsYXllcklEXTtcblxuICAgICAgICAgICAgc2VyaWFsaXplZExheWVyLnBhaW50ID0gZXZhbHVhdGVQcm9wZXJ0aWVzKHNlcmlhbGl6ZWRMYXllci5wYWludCwgc3R5bGVMYXllci5wYWludCwgZmVhdHVyZSwgZmVhdHVyZVN0YXRlLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICAgICAgc2VyaWFsaXplZExheWVyLmxheW91dCA9IGV2YWx1YXRlUHJvcGVydGllcyhzZXJpYWxpemVkTGF5ZXIubGF5b3V0LCBzdHlsZUxheWVyLmxheW91dCwgZmVhdHVyZSwgZmVhdHVyZVN0YXRlLCBhdmFpbGFibGVJbWFnZXMpO1xuXG4gICAgICAgICAgICBjb25zdCBpbnRlcnNlY3Rpb25aID0gIWludGVyc2VjdGlvblRlc3QgfHwgaW50ZXJzZWN0aW9uVGVzdChmZWF0dXJlLCBzdHlsZUxheWVyLCBmZWF0dXJlU3RhdGUpO1xuICAgICAgICAgICAgaWYgKCFpbnRlcnNlY3Rpb25aKSB7XG4gICAgICAgICAgICAgICAgLy8gT25seSBhcHBsaWVkIGZvciBub24tc3ltYm9sIGZlYXR1cmVzXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGdlb2pzb25GZWF0dXJlID0gbmV3IEdlb0pTT05GZWF0dXJlKGZlYXR1cmUsIHRoaXMueiwgdGhpcy54LCB0aGlzLnksIGlkKTtcbiAgICAgICAgICAgIChnZW9qc29uRmVhdHVyZTogYW55KS5sYXllciA9IHNlcmlhbGl6ZWRMYXllcjtcbiAgICAgICAgICAgIGxldCBsYXllclJlc3VsdCA9IHJlc3VsdFtsYXllcklEXTtcbiAgICAgICAgICAgIGlmIChsYXllclJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgbGF5ZXJSZXN1bHQgPSByZXN1bHRbbGF5ZXJJRF0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxheWVyUmVzdWx0LnB1c2goe2ZlYXR1cmVJbmRleCwgZmVhdHVyZTogZ2VvanNvbkZlYXR1cmUsIGludGVyc2VjdGlvblp9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEdpdmVuIGEgc2V0IG9mIHN5bWJvbCBpbmRleGVzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gbG9va2VkIHVwLFxuICAgIC8vIHJldHVybiBhIG1hdGNoaW5nIHNldCBvZiBHZW9KU09ORmVhdHVyZXNcbiAgICBsb29rdXBTeW1ib2xGZWF0dXJlcyhzeW1ib2xGZWF0dXJlSW5kZXhlczogQXJyYXk8bnVtYmVyPixcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVkTGF5ZXJzOiB7W3N0cmluZ106IFN0eWxlTGF5ZXJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldEluZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlTGF5ZXJJbmRleDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclNwZWM6IEZpbHRlclNwZWNpZmljYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyTGF5ZXJJRHM6IEFycmF5PHN0cmluZz4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlSW1hZ2VzOiBBcnJheTxzdHJpbmc+LFxuICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlTGF5ZXJzOiB7W186IHN0cmluZ106IFN0eWxlTGF5ZXJ9KSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgICB0aGlzLmxvYWRWVExheWVycygpO1xuXG4gICAgICAgIGNvbnN0IGZpbHRlciA9IGZlYXR1cmVGaWx0ZXIoZmlsdGVyU3BlYyk7XG5cbiAgICAgICAgZm9yIChjb25zdCBzeW1ib2xGZWF0dXJlSW5kZXggb2Ygc3ltYm9sRmVhdHVyZUluZGV4ZXMpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZE1hdGNoaW5nRmVhdHVyZShcbiAgICAgICAgICAgICAgICByZXN1bHQsXG4gICAgICAgICAgICAgICAgYnVja2V0SW5kZXgsXG4gICAgICAgICAgICAgICAgc291cmNlTGF5ZXJJbmRleCxcbiAgICAgICAgICAgICAgICBzeW1ib2xGZWF0dXJlSW5kZXgsXG4gICAgICAgICAgICAgICAgZmlsdGVyLFxuICAgICAgICAgICAgICAgIGZpbHRlckxheWVySURzLFxuICAgICAgICAgICAgICAgIGF2YWlsYWJsZUltYWdlcyxcbiAgICAgICAgICAgICAgICBzdHlsZUxheWVycyxcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkTGF5ZXJzXG4gICAgICAgICAgICApO1xuXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBoYXNMYXllcihpZDogc3RyaW5nKSB7XG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJJRHMgb2YgdGhpcy5idWNrZXRMYXllcklEcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBsYXllcklEIG9mIGxheWVySURzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlkID09PSBsYXllcklEKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXRJZChmZWF0dXJlOiBWZWN0b3JUaWxlRmVhdHVyZSwgc291cmNlTGF5ZXJJZDogc3RyaW5nKTogc3RyaW5nIHwgbnVtYmVyIHwgdm9pZCB7XG4gICAgICAgIGxldCBpZCA9IGZlYXR1cmUuaWQ7XG4gICAgICAgIGlmICh0aGlzLnByb21vdGVJZCkge1xuICAgICAgICAgICAgY29uc3QgcHJvcE5hbWUgPSB0eXBlb2YgdGhpcy5wcm9tb3RlSWQgPT09ICdzdHJpbmcnID8gdGhpcy5wcm9tb3RlSWQgOiB0aGlzLnByb21vdGVJZFtzb3VyY2VMYXllcklkXTtcbiAgICAgICAgICAgIGlkID0gZmVhdHVyZS5wcm9wZXJ0aWVzW3Byb3BOYW1lXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaWQgPT09ICdib29sZWFuJykgaWQgPSAgTnVtYmVyKGlkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaWQ7XG4gICAgfVxufVxuXG5yZWdpc3RlcihcbiAgICAnRmVhdHVyZUluZGV4JyxcbiAgICBGZWF0dXJlSW5kZXgsXG4gICAge29taXQ6IFsncmF3VGlsZURhdGEnLCAnc291cmNlTGF5ZXJDb2RlciddfVxuKTtcblxuZXhwb3J0IGRlZmF1bHQgRmVhdHVyZUluZGV4O1xuXG5mdW5jdGlvbiBldmFsdWF0ZVByb3BlcnRpZXMoc2VyaWFsaXplZFByb3BlcnRpZXMsIHN0eWxlTGF5ZXJQcm9wZXJ0aWVzLCBmZWF0dXJlLCBmZWF0dXJlU3RhdGUsIGF2YWlsYWJsZUltYWdlcykge1xuICAgIHJldHVybiBtYXBPYmplY3Qoc2VyaWFsaXplZFByb3BlcnRpZXMsIChwcm9wZXJ0eSwga2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IHByb3AgPSBzdHlsZUxheWVyUHJvcGVydGllcyBpbnN0YW5jZW9mIFBvc3NpYmx5RXZhbHVhdGVkID8gc3R5bGVMYXllclByb3BlcnRpZXMuZ2V0KGtleSkgOiBudWxsO1xuICAgICAgICByZXR1cm4gcHJvcCAmJiBwcm9wLmV2YWx1YXRlID8gcHJvcC5ldmFsdWF0ZShmZWF0dXJlLCBmZWF0dXJlU3RhdGUsIGF2YWlsYWJsZUltYWdlcykgOiBwcm9wO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRCb3VuZHMoZ2VvbWV0cnk6IEFycmF5PFBvaW50Pikge1xuICAgIGxldCBtaW5YID0gSW5maW5pdHk7XG4gICAgbGV0IG1pblkgPSBJbmZpbml0eTtcbiAgICBsZXQgbWF4WCA9IC1JbmZpbml0eTtcbiAgICBsZXQgbWF4WSA9IC1JbmZpbml0eTtcbiAgICBmb3IgKGNvbnN0IHAgb2YgZ2VvbWV0cnkpIHtcbiAgICAgICAgbWluWCA9IE1hdGgubWluKG1pblgsIHAueCk7XG4gICAgICAgIG1pblkgPSBNYXRoLm1pbihtaW5ZLCBwLnkpO1xuICAgICAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgcC54KTtcbiAgICAgICAgbWF4WSA9IE1hdGgubWF4KG1heFksIHAueSk7XG4gICAgfVxuICAgIHJldHVybiB7bWluWCwgbWluWSwgbWF4WCwgbWF4WX07XG59XG5cbmZ1bmN0aW9uIHRvcERvd25GZWF0dXJlQ29tcGFyYXRvcihhLCBiKSB7XG4gICAgcmV0dXJuIGIgLSBhO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHt1bmlxdWVJZCwgcGFyc2VDYWNoZUNvbnRyb2x9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQge2Rlc2VyaWFsaXplIGFzIGRlc2VyaWFsaXplQnVja2V0fSBmcm9tICcuLi9kYXRhL2J1Y2tldCc7XG5pbXBvcnQgRmVhdHVyZUluZGV4IGZyb20gJy4uL2RhdGEvZmVhdHVyZV9pbmRleCc7XG5pbXBvcnQgR2VvSlNPTkZlYXR1cmUgZnJvbSAnLi4vdXRpbC92ZWN0b3J0aWxlX3RvX2dlb2pzb24nO1xuaW1wb3J0IGZlYXR1cmVGaWx0ZXIgZnJvbSAnLi4vc3R5bGUtc3BlYy9mZWF0dXJlX2ZpbHRlcic7XG5pbXBvcnQgU3ltYm9sQnVja2V0IGZyb20gJy4uL2RhdGEvYnVja2V0L3N5bWJvbF9idWNrZXQnO1xuaW1wb3J0IHtDb2xsaXNpb25Cb3hBcnJheX0gZnJvbSAnLi4vZGF0YS9hcnJheV90eXBlcyc7XG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9yZW5kZXIvdGV4dHVyZSc7XG5pbXBvcnQgYnJvd3NlciBmcm9tICcuLi91dGlsL2Jyb3dzZXInO1xuaW1wb3J0IEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4uL3N0eWxlL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5pbXBvcnQgU291cmNlRmVhdHVyZVN0YXRlIGZyb20gJy4uL3NvdXJjZS9zb3VyY2Vfc3RhdGUnO1xuaW1wb3J0IHtsYXp5TG9hZFJUTFRleHRQbHVnaW59IGZyb20gJy4vcnRsX3RleHRfcGx1Z2luJztcblxuY29uc3QgQ0xPQ0tfU0tFV19SRVRSWV9USU1FT1VUID0gMzAwMDA7XG5cbmltcG9ydCB0eXBlIHtCdWNrZXR9IGZyb20gJy4uL2RhdGEvYnVja2V0JztcbmltcG9ydCB0eXBlIFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUge1dvcmtlclRpbGVSZXN1bHR9IGZyb20gJy4vd29ya2VyX3NvdXJjZSc7XG5pbXBvcnQgdHlwZSBBY3RvciBmcm9tICcuLi91dGlsL2FjdG9yJztcbmltcG9ydCB0eXBlIERFTURhdGEgZnJvbSAnLi4vZGF0YS9kZW1fZGF0YSc7XG5pbXBvcnQgdHlwZSB7QWxwaGFJbWFnZX0gZnJvbSAnLi4vdXRpbC9pbWFnZSc7XG5pbXBvcnQgdHlwZSBJbWFnZUF0bGFzIGZyb20gJy4uL3JlbmRlci9pbWFnZV9hdGxhcyc7XG5pbXBvcnQgdHlwZSBJbWFnZU1hbmFnZXIgZnJvbSAnLi4vcmVuZGVyL2ltYWdlX21hbmFnZXInO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuL3RpbGVfaWQnO1xuaW1wb3J0IHR5cGUgRnJhbWVidWZmZXIgZnJvbSAnLi4vZ2wvZnJhbWVidWZmZXInO1xuaW1wb3J0IHR5cGUgVHJhbnNmb3JtIGZyb20gJy4uL2dlby90cmFuc2Zvcm0nO1xuaW1wb3J0IHR5cGUge0xheWVyRmVhdHVyZVN0YXRlc30gZnJvbSAnLi9zb3VyY2Vfc3RhdGUnO1xuaW1wb3J0IHR5cGUge0NhbmNlbGFibGV9IGZyb20gJy4uL3R5cGVzL2NhbmNlbGFibGUnO1xuaW1wb3J0IHR5cGUge0ZpbHRlclNwZWNpZmljYXRpb259IGZyb20gJy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBUaWxlU3RhdGUgPVxuICAgIHwgJ2xvYWRpbmcnICAgLy8gVGlsZSBkYXRhIGlzIGluIHRoZSBwcm9jZXNzIG9mIGxvYWRpbmcuXG4gICAgfCAnbG9hZGVkJyAgICAvLyBUaWxlIGRhdGEgaGFzIGJlZW4gbG9hZGVkLiBUaWxlIGNhbiBiZSByZW5kZXJlZC5cbiAgICB8ICdyZWxvYWRpbmcnIC8vIFRpbGUgZGF0YSBoYXMgYmVlbiBsb2FkZWQgYW5kIGlzIGJlaW5nIHVwZGF0ZWQuIFRpbGUgY2FuIGJlIHJlbmRlcmVkLlxuICAgIHwgJ3VubG9hZGVkJyAgLy8gVGlsZSBkYXRhIGhhcyBiZWVuIGRlbGV0ZWQuXG4gICAgfCAnZXJyb3JlZCcgICAvLyBUaWxlIGRhdGEgd2FzIG5vdCBsb2FkZWQgYmVjYXVzZSBvZiBhbiBlcnJvci5cbiAgICB8ICdleHBpcmVkJzsgIC8qIFRpbGUgZGF0YSB3YXMgcHJldmlvdXNseSBsb2FkZWQsIGJ1dCBoYXMgZXhwaXJlZCBwZXIgaXRzXG4gICAgICAgICAgICAgICAgICAgKiBIVFRQIGhlYWRlcnMgYW5kIGlzIGluIHRoZSBwcm9jZXNzIG9mIHJlZnJlc2hpbmcuICovXG5cbi8qKlxuICogQSB0aWxlIG9iamVjdCBpcyB0aGUgY29tYmluYXRpb24gb2YgYSBDb29yZGluYXRlLCB3aGljaCBkZWZpbmVzXG4gKiBpdHMgcGxhY2UsIGFzIHdlbGwgYXMgYSB1bmlxdWUgSUQgYW5kIGRhdGEgdHJhY2tpbmcgZm9yIGl0cyBjb250ZW50XG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgVGlsZSB7XG4gICAgdGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEO1xuICAgIHVpZDogbnVtYmVyO1xuICAgIHVzZXM6IG51bWJlcjtcbiAgICB0aWxlU2l6ZTogbnVtYmVyO1xuICAgIGJ1Y2tldHM6IHtbXzogc3RyaW5nXTogQnVja2V0fTtcbiAgICBsYXRlc3RGZWF0dXJlSW5kZXg6ID9GZWF0dXJlSW5kZXg7XG4gICAgbGF0ZXN0UmF3VGlsZURhdGE6ID9BcnJheUJ1ZmZlcjtcbiAgICBpbWFnZUF0bGFzOiA/SW1hZ2VBdGxhcztcbiAgICBpbWFnZUF0bGFzVGV4dHVyZTogVGV4dHVyZTtcbiAgICBnbHlwaEF0bGFzSW1hZ2U6ID9BbHBoYUltYWdlO1xuICAgIGdseXBoQXRsYXNUZXh0dXJlOiBUZXh0dXJlO1xuICAgIGV4cGlyYXRpb25UaW1lOiBhbnk7XG4gICAgZXhwaXJlZFJlcXVlc3RDb3VudDogbnVtYmVyO1xuICAgIHN0YXRlOiBUaWxlU3RhdGU7XG4gICAgdGltZUFkZGVkOiBhbnk7XG4gICAgZmFkZUVuZFRpbWU6IGFueTtcbiAgICBjb2xsaXNpb25Cb3hBcnJheTogP0NvbGxpc2lvbkJveEFycmF5O1xuICAgIHJlZG9XaGVuRG9uZTogYm9vbGVhbjtcbiAgICBzaG93Q29sbGlzaW9uQm94ZXM6IGJvb2xlYW47XG4gICAgcGxhY2VtZW50U291cmNlOiBhbnk7XG4gICAgYWN0b3I6ID9BY3RvcjtcbiAgICB2dExheWVyczoge1tfOiBzdHJpbmddOiBWZWN0b3JUaWxlTGF5ZXJ9O1xuXG4gICAgbmVpZ2hib3JpbmdUaWxlczogP09iamVjdDtcbiAgICBkZW06ID9ERU1EYXRhO1xuICAgIGFib3J0ZWQ6ID9ib29sZWFuO1xuICAgIG5lZWRzSGlsbHNoYWRlUHJlcGFyZTogP2Jvb2xlYW47XG4gICAgcmVxdWVzdDogP0NhbmNlbGFibGU7XG4gICAgdGV4dHVyZTogYW55O1xuICAgIGZibzogP0ZyYW1lYnVmZmVyO1xuICAgIGRlbVRleHR1cmU6ID9UZXh0dXJlO1xuICAgIHJlZnJlc2hlZFVwb25FeHBpcmF0aW9uOiBib29sZWFuO1xuICAgIHJlbG9hZENhbGxiYWNrOiBhbnk7XG4gICAgcmVzb3VyY2VUaW1pbmc6ID9BcnJheTxQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nPjtcbiAgICBxdWVyeVBhZGRpbmc6IG51bWJlcjtcblxuICAgIHN5bWJvbEZhZGVIb2xkVW50aWw6ID9udW1iZXI7XG4gICAgaGFzU3ltYm9sQnVja2V0czogYm9vbGVhbjtcbiAgICBoYXNSVExUZXh0OiBib29sZWFuO1xuICAgIGRlcGVuZGVuY2llczogT2JqZWN0O1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtPdmVyc2NhbGVkVGlsZUlEfSB0aWxlSURcbiAgICAgKiBAcGFyYW0gc2l6ZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IodGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlELCBzaXplOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy50aWxlSUQgPSB0aWxlSUQ7XG4gICAgICAgIHRoaXMudWlkID0gdW5pcXVlSWQoKTtcbiAgICAgICAgdGhpcy51c2VzID0gMDtcbiAgICAgICAgdGhpcy50aWxlU2l6ZSA9IHNpemU7XG4gICAgICAgIHRoaXMuYnVja2V0cyA9IHt9O1xuICAgICAgICB0aGlzLmV4cGlyYXRpb25UaW1lID0gbnVsbDtcbiAgICAgICAgdGhpcy5xdWVyeVBhZGRpbmcgPSAwO1xuICAgICAgICB0aGlzLmhhc1N5bWJvbEJ1Y2tldHMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5oYXNSVExUZXh0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZGVwZW5kZW5jaWVzID0ge307XG5cbiAgICAgICAgLy8gQ291bnRzIHRoZSBudW1iZXIgb2YgdGltZXMgYSByZXNwb25zZSB3YXMgYWxyZWFkeSBleHBpcmVkIHdoZW5cbiAgICAgICAgLy8gcmVjZWl2ZWQuIFdlJ3JlIHVzaW5nIHRoaXMgdG8gYWRkIGEgZGVsYXkgd2hlbiBtYWtpbmcgYSBuZXcgcmVxdWVzdFxuICAgICAgICAvLyBzbyB3ZSBkb24ndCBoYXZlIHRvIGtlZXAgcmV0cnlpbmcgaW1tZWRpYXRlbHkgaW4gY2FzZSBvZiBhIHNlcnZlclxuICAgICAgICAvLyBzZXJ2aW5nIGV4cGlyZWQgdGlsZXMuXG4gICAgICAgIHRoaXMuZXhwaXJlZFJlcXVlc3RDb3VudCA9IDA7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9ICdsb2FkaW5nJztcbiAgICB9XG5cbiAgICByZWdpc3RlckZhZGVEdXJhdGlvbihkdXJhdGlvbjogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGZhZGVFbmRUaW1lID0gZHVyYXRpb24gKyB0aGlzLnRpbWVBZGRlZDtcbiAgICAgICAgaWYgKGZhZGVFbmRUaW1lIDwgYnJvd3Nlci5ub3coKSkgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5mYWRlRW5kVGltZSAmJiBmYWRlRW5kVGltZSA8IHRoaXMuZmFkZUVuZFRpbWUpIHJldHVybjtcblxuICAgICAgICB0aGlzLmZhZGVFbmRUaW1lID0gZmFkZUVuZFRpbWU7XG4gICAgfVxuXG4gICAgd2FzUmVxdWVzdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZSA9PT0gJ2Vycm9yZWQnIHx8IHRoaXMuc3RhdGUgPT09ICdsb2FkZWQnIHx8IHRoaXMuc3RhdGUgPT09ICdyZWxvYWRpbmcnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdpdmVuIGEgZGF0YSBvYmplY3Qgd2l0aCBhICdidWZmZXJzJyBwcm9wZXJ0eSwgbG9hZCBpdCBpbnRvXG4gICAgICogdGhpcyB0aWxlJ3MgZWxlbWVudEdyb3VwcyBhbmQgYnVmZmVycyBwcm9wZXJ0aWVzIGFuZCBzZXQgbG9hZGVkXG4gICAgICogdG8gdHJ1ZS4gSWYgdGhlIGRhdGEgaXMgbnVsbCwgbGlrZSBpbiB0aGUgY2FzZSBvZiBhbiBlbXB0eVxuICAgICAqIEdlb0pTT04gdGlsZSwgbm8tb3AgYnV0IHN0aWxsIHNldCBsb2FkZWQgdG8gdHJ1ZS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YVxuICAgICAqIEBwYXJhbSBwYWludGVyXG4gICAgICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGxvYWRWZWN0b3JEYXRhKGRhdGE6IFdvcmtlclRpbGVSZXN1bHQsIHBhaW50ZXI6IGFueSwganVzdFJlbG9hZGVkOiA/Ym9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5oYXNEYXRhKCkpIHtcbiAgICAgICAgICAgIHRoaXMudW5sb2FkVmVjdG9yRGF0YSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9ICdsb2FkZWQnO1xuXG4gICAgICAgIC8vIGVtcHR5IEdlb0pTT04gdGlsZVxuICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuY29sbGlzaW9uQm94QXJyYXkgPSBuZXcgQ29sbGlzaW9uQm94QXJyYXkoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkYXRhLmZlYXR1cmVJbmRleCkge1xuICAgICAgICAgICAgdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXggPSBkYXRhLmZlYXR1cmVJbmRleDtcbiAgICAgICAgICAgIGlmIChkYXRhLnJhd1RpbGVEYXRhKSB7XG4gICAgICAgICAgICAgICAgLy8gT25seSB2ZWN0b3IgdGlsZXMgaGF2ZSByYXdUaWxlRGF0YSwgYW5kIHRoZXkgd29uJ3QgdXBkYXRlIGl0IGZvclxuICAgICAgICAgICAgICAgIC8vICdyZWxvYWRUaWxlJ1xuICAgICAgICAgICAgICAgIHRoaXMubGF0ZXN0UmF3VGlsZURhdGEgPSBkYXRhLnJhd1RpbGVEYXRhO1xuICAgICAgICAgICAgICAgIHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4LnJhd1RpbGVEYXRhID0gZGF0YS5yYXdUaWxlRGF0YTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5sYXRlc3RSYXdUaWxlRGF0YSkge1xuICAgICAgICAgICAgICAgIC8vIElmIHJhd1RpbGVEYXRhIGhhc24ndCB1cGRhdGVkLCBob2xkIG9udG8gYSBwb2ludGVyIHRvIHRoZSBsYXN0XG4gICAgICAgICAgICAgICAgLy8gb25lIHdlIHJlY2VpdmVkXG4gICAgICAgICAgICAgICAgdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucmF3VGlsZURhdGEgPSB0aGlzLmxhdGVzdFJhd1RpbGVEYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29sbGlzaW9uQm94QXJyYXkgPSBkYXRhLmNvbGxpc2lvbkJveEFycmF5O1xuICAgICAgICB0aGlzLmJ1Y2tldHMgPSBkZXNlcmlhbGl6ZUJ1Y2tldChkYXRhLmJ1Y2tldHMsIHBhaW50ZXIuc3R5bGUpO1xuXG4gICAgICAgIHRoaXMuaGFzU3ltYm9sQnVja2V0cyA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuYnVja2V0cykge1xuICAgICAgICAgICAgY29uc3QgYnVja2V0ID0gdGhpcy5idWNrZXRzW2lkXTtcbiAgICAgICAgICAgIGlmIChidWNrZXQgaW5zdGFuY2VvZiBTeW1ib2xCdWNrZXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc1N5bWJvbEJ1Y2tldHMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChqdXN0UmVsb2FkZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgYnVja2V0Lmp1c3RSZWxvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5oYXNSVExUZXh0ID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmhhc1N5bWJvbEJ1Y2tldHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5idWNrZXRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYnVja2V0ID0gdGhpcy5idWNrZXRzW2lkXTtcbiAgICAgICAgICAgICAgICBpZiAoYnVja2V0IGluc3RhbmNlb2YgU3ltYm9sQnVja2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChidWNrZXQuaGFzUlRMVGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNSVExUZXh0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhenlMb2FkUlRMVGV4dFBsdWdpbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnF1ZXJ5UGFkZGluZyA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5idWNrZXRzKSB7XG4gICAgICAgICAgICBjb25zdCBidWNrZXQgPSB0aGlzLmJ1Y2tldHNbaWRdO1xuICAgICAgICAgICAgdGhpcy5xdWVyeVBhZGRpbmcgPSBNYXRoLm1heCh0aGlzLnF1ZXJ5UGFkZGluZywgcGFpbnRlci5zdHlsZS5nZXRMYXllcihpZCkucXVlcnlSYWRpdXMoYnVja2V0KSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YS5pbWFnZUF0bGFzKSB7XG4gICAgICAgICAgICB0aGlzLmltYWdlQXRsYXMgPSBkYXRhLmltYWdlQXRsYXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGEuZ2x5cGhBdGxhc0ltYWdlKSB7XG4gICAgICAgICAgICB0aGlzLmdseXBoQXRsYXNJbWFnZSA9IGRhdGEuZ2x5cGhBdGxhc0ltYWdlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVsZWFzZSBhbnkgZGF0YSBvciBXZWJHTCByZXNvdXJjZXMgcmVmZXJlbmNlZCBieSB0aGlzIHRpbGUuXG4gICAgICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHVubG9hZFZlY3RvckRhdGEoKSB7XG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5idWNrZXRzKSB7XG4gICAgICAgICAgICB0aGlzLmJ1Y2tldHNbaWRdLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJ1Y2tldHMgPSB7fTtcblxuICAgICAgICBpZiAodGhpcy5pbWFnZUF0bGFzVGV4dHVyZSkge1xuICAgICAgICAgICAgdGhpcy5pbWFnZUF0bGFzVGV4dHVyZS5kZXN0cm95KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pbWFnZUF0bGFzKSB7XG4gICAgICAgICAgICB0aGlzLmltYWdlQXRsYXMgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZ2x5cGhBdGxhc1RleHR1cmUpIHtcbiAgICAgICAgICAgIHRoaXMuZ2x5cGhBdGxhc1RleHR1cmUuZGVzdHJveSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXggPSBudWxsO1xuICAgICAgICB0aGlzLnN0YXRlID0gJ3VubG9hZGVkJztcbiAgICB9XG5cbiAgICBnZXRCdWNrZXQobGF5ZXI6IFN0eWxlTGF5ZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVja2V0c1tsYXllci5pZF07XG4gICAgfVxuXG4gICAgdXBsb2FkKGNvbnRleHQ6IENvbnRleHQpIHtcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLmJ1Y2tldHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGJ1Y2tldCA9IHRoaXMuYnVja2V0c1tpZF07XG4gICAgICAgICAgICBpZiAoYnVja2V0LnVwbG9hZFBlbmRpbmcoKSkge1xuICAgICAgICAgICAgICAgIGJ1Y2tldC51cGxvYWQoY29udGV4dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgICAgIGlmICh0aGlzLmltYWdlQXRsYXMgJiYgIXRoaXMuaW1hZ2VBdGxhcy51cGxvYWRlZCkge1xuICAgICAgICAgICAgdGhpcy5pbWFnZUF0bGFzVGV4dHVyZSA9IG5ldyBUZXh0dXJlKGNvbnRleHQsIHRoaXMuaW1hZ2VBdGxhcy5pbWFnZSwgZ2wuUkdCQSk7XG4gICAgICAgICAgICB0aGlzLmltYWdlQXRsYXMudXBsb2FkZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZ2x5cGhBdGxhc0ltYWdlKSB7XG4gICAgICAgICAgICB0aGlzLmdseXBoQXRsYXNUZXh0dXJlID0gbmV3IFRleHR1cmUoY29udGV4dCwgdGhpcy5nbHlwaEF0bGFzSW1hZ2UsIGdsLkFMUEhBKTtcbiAgICAgICAgICAgIHRoaXMuZ2x5cGhBdGxhc0ltYWdlID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByZXBhcmUoaW1hZ2VNYW5hZ2VyOiBJbWFnZU1hbmFnZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VBdGxhcykge1xuICAgICAgICAgICAgdGhpcy5pbWFnZUF0bGFzLnBhdGNoVXBkYXRlZEltYWdlcyhpbWFnZU1hbmFnZXIsIHRoaXMuaW1hZ2VBdGxhc1RleHR1cmUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gUXVlcmllcyBub24tc3ltYm9sIGZlYXR1cmVzIHJlbmRlcmVkIGZvciB0aGlzIHRpbGUuXG4gICAgLy8gU3ltYm9sIGZlYXR1cmVzIGFyZSBxdWVyaWVkIGdsb2JhbGx5XG4gICAgcXVlcnlSZW5kZXJlZEZlYXR1cmVzKGxheWVyczoge1tfOiBzdHJpbmddOiBTdHlsZUxheWVyfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplZExheWVyczoge1tzdHJpbmddOiBPYmplY3R9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VGZWF0dXJlU3RhdGU6IFNvdXJjZUZlYXR1cmVTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlHZW9tZXRyeTogQXJyYXk8UG9pbnQ+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjYW1lcmFRdWVyeUdlb21ldHJ5OiBBcnJheTxQb2ludD4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogeyBmaWx0ZXI6IEZpbHRlclNwZWNpZmljYXRpb24sIGxheWVyczogQXJyYXk8c3RyaW5nPiwgYXZhaWxhYmxlSW1hZ2VzOiBBcnJheTxzdHJpbmc+IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhQaXRjaFNjYWxlRmFjdG9yOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsUG9zTWF0cml4OiBGbG9hdDMyQXJyYXkpOiB7W186IHN0cmluZ106IEFycmF5PHsgZmVhdHVyZUluZGV4OiBudW1iZXIsIGZlYXR1cmU6IEdlb0pTT05GZWF0dXJlIH0+fSB7XG4gICAgICAgIGlmICghdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXggfHwgIXRoaXMubGF0ZXN0RmVhdHVyZUluZGV4LnJhd1RpbGVEYXRhKVxuICAgICAgICAgICAgcmV0dXJuIHt9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5xdWVyeSh7XG4gICAgICAgICAgICBxdWVyeUdlb21ldHJ5LFxuICAgICAgICAgICAgY2FtZXJhUXVlcnlHZW9tZXRyeSxcbiAgICAgICAgICAgIHNjYWxlLFxuICAgICAgICAgICAgdGlsZVNpemU6IHRoaXMudGlsZVNpemUsXG4gICAgICAgICAgICBwaXhlbFBvc01hdHJpeCxcbiAgICAgICAgICAgIHRyYW5zZm9ybSxcbiAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgIHF1ZXJ5UGFkZGluZzogdGhpcy5xdWVyeVBhZGRpbmcgKiBtYXhQaXRjaFNjYWxlRmFjdG9yXG4gICAgICAgIH0sIGxheWVycywgc2VyaWFsaXplZExheWVycywgc291cmNlRmVhdHVyZVN0YXRlKTtcbiAgICB9XG5cbiAgICBxdWVyeVNvdXJjZUZlYXR1cmVzKHJlc3VsdDogQXJyYXk8R2VvSlNPTkZlYXR1cmU+LCBwYXJhbXM6IGFueSkge1xuICAgICAgICBjb25zdCBmZWF0dXJlSW5kZXggPSB0aGlzLmxhdGVzdEZlYXR1cmVJbmRleDtcbiAgICAgICAgaWYgKCFmZWF0dXJlSW5kZXggfHwgIWZlYXR1cmVJbmRleC5yYXdUaWxlRGF0YSkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHZ0TGF5ZXJzID0gZmVhdHVyZUluZGV4LmxvYWRWVExheWVycygpO1xuXG4gICAgICAgIGNvbnN0IHNvdXJjZUxheWVyID0gcGFyYW1zID8gcGFyYW1zLnNvdXJjZUxheWVyIDogJyc7XG4gICAgICAgIGNvbnN0IGxheWVyID0gdnRMYXllcnMuX2dlb2pzb25UaWxlTGF5ZXIgfHwgdnRMYXllcnNbc291cmNlTGF5ZXJdO1xuXG4gICAgICAgIGlmICghbGF5ZXIpIHJldHVybjtcblxuICAgICAgICBjb25zdCBmaWx0ZXIgPSBmZWF0dXJlRmlsdGVyKHBhcmFtcyAmJiBwYXJhbXMuZmlsdGVyKTtcbiAgICAgICAgY29uc3Qge3osIHgsIHl9ID0gdGhpcy50aWxlSUQuY2Fub25pY2FsO1xuICAgICAgICBjb25zdCBjb29yZCA9IHt6LCB4LCB5fTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxheWVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBmZWF0dXJlID0gbGF5ZXIuZmVhdHVyZShpKTtcbiAgICAgICAgICAgIGlmIChmaWx0ZXIuZmlsdGVyKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyh0aGlzLnRpbGVJRC5vdmVyc2NhbGVkWiksIGZlYXR1cmUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaWQgPSBmZWF0dXJlSW5kZXguZ2V0SWQoZmVhdHVyZSwgc291cmNlTGF5ZXIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdlb2pzb25GZWF0dXJlID0gbmV3IEdlb0pTT05GZWF0dXJlKGZlYXR1cmUsIHosIHgsIHksIGlkKTtcbiAgICAgICAgICAgICAgICAoZ2VvanNvbkZlYXR1cmU6IGFueSkudGlsZSA9IGNvb3JkO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGdlb2pzb25GZWF0dXJlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhc0RhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlID09PSAnbG9hZGVkJyB8fCB0aGlzLnN0YXRlID09PSAncmVsb2FkaW5nJyB8fCB0aGlzLnN0YXRlID09PSAnZXhwaXJlZCc7XG4gICAgfVxuXG4gICAgcGF0dGVybnNMb2FkZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmltYWdlQXRsYXMgJiYgISFPYmplY3Qua2V5cyh0aGlzLmltYWdlQXRsYXMucGF0dGVyblBvc2l0aW9ucykubGVuZ3RoO1xuICAgIH1cblxuICAgIHNldEV4cGlyeURhdGEoZGF0YTogYW55KSB7XG4gICAgICAgIGNvbnN0IHByaW9yID0gdGhpcy5leHBpcmF0aW9uVGltZTtcblxuICAgICAgICBpZiAoZGF0YS5jYWNoZUNvbnRyb2wpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZENDID0gcGFyc2VDYWNoZUNvbnRyb2woZGF0YS5jYWNoZUNvbnRyb2wpO1xuICAgICAgICAgICAgaWYgKHBhcnNlZENDWydtYXgtYWdlJ10pIHRoaXMuZXhwaXJhdGlvblRpbWUgPSBEYXRlLm5vdygpICsgcGFyc2VkQ0NbJ21heC1hZ2UnXSAqIDEwMDA7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YS5leHBpcmVzKSB7XG4gICAgICAgICAgICB0aGlzLmV4cGlyYXRpb25UaW1lID0gbmV3IERhdGUoZGF0YS5leHBpcmVzKS5nZXRUaW1lKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5leHBpcmF0aW9uVGltZSkge1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIGxldCBpc0V4cGlyZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZXhwaXJhdGlvblRpbWUgPiBub3cpIHtcbiAgICAgICAgICAgICAgICBpc0V4cGlyZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXByaW9yKSB7XG4gICAgICAgICAgICAgICAgaXNFeHBpcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5leHBpcmF0aW9uVGltZSA8IHByaW9yKSB7XG4gICAgICAgICAgICAgICAgLy8gRXhwaXJpbmcgZGF0ZSBpcyBnb2luZyBiYWNrd2FyZHM6XG4gICAgICAgICAgICAgICAgLy8gZmFsbCBiYWNrIHRvIGV4cG9uZW50aWFsIGJhY2tvZmZcbiAgICAgICAgICAgICAgICBpc0V4cGlyZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlbHRhID0gdGhpcy5leHBpcmF0aW9uVGltZSAtIHByaW9yO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFkZWx0YSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBTZXJ2ZXIgaXMgc2VydmluZyB0aGUgc2FtZSBleHBpcmVkIHJlc291cmNlIG92ZXIgYW5kIG92ZXI6IGZhbGxcbiAgICAgICAgICAgICAgICAgICAgLy8gYmFjayB0byBleHBvbmVudGlhbCBiYWNrb2ZmLlxuICAgICAgICAgICAgICAgICAgICBpc0V4cGlyZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQXNzdW1lIHRoYXQgZWl0aGVyIHRoZSBjbGllbnQgb3IgdGhlIHNlcnZlciBjbG9jayBpcyB3cm9uZyBhbmRcbiAgICAgICAgICAgICAgICAgICAgLy8gdHJ5IHRvIGludGVycG9sYXRlIGEgdmFsaWQgZXhwaXJhdGlvbiBkYXRlIChmcm9tIHRoZSBjbGllbnQgUE9WKVxuICAgICAgICAgICAgICAgICAgICAvLyBvYnNlcnZpbmcgYSBtaW5pbXVtIHRpbWVvdXQuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwaXJhdGlvblRpbWUgPSBub3cgKyBNYXRoLm1heChkZWx0YSwgQ0xPQ0tfU0tFV19SRVRSWV9USU1FT1VUKTtcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlzRXhwaXJlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXhwaXJlZFJlcXVlc3RDb3VudCsrO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAnZXhwaXJlZCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZXhwaXJlZFJlcXVlc3RDb3VudCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRFeHBpcnlUaW1lb3V0KCkge1xuICAgICAgICBpZiAodGhpcy5leHBpcmF0aW9uVGltZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZXhwaXJlZFJlcXVlc3RDb3VudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAxMDAwICogKDEgPDwgTWF0aC5taW4odGhpcy5leHBpcmVkUmVxdWVzdENvdW50IC0gMSwgMzEpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gTWF4IHZhbHVlIGZvciBgc2V0VGltZW91dGAgaW1wbGVtZW50YXRpb25zIGlzIGEgMzIgYml0IGludGVnZXI7IGNhcCB0aGlzIGFjY29yZGluZ2x5XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWluKHRoaXMuZXhwaXJhdGlvblRpbWUgLSBuZXcgRGF0ZSgpLmdldFRpbWUoKSwgTWF0aC5wb3coMiwgMzEpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRGZWF0dXJlU3RhdGUoc3RhdGVzOiBMYXllckZlYXR1cmVTdGF0ZXMsIHBhaW50ZXI6IGFueSkge1xuICAgICAgICBpZiAoIXRoaXMubGF0ZXN0RmVhdHVyZUluZGV4IHx8XG4gICAgICAgICAgICAhdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucmF3VGlsZURhdGEgfHxcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHN0YXRlcykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2dExheWVycyA9IHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4LmxvYWRWVExheWVycygpO1xuXG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5idWNrZXRzKSB7XG4gICAgICAgICAgICBpZiAoIXBhaW50ZXIuc3R5bGUuaGFzTGF5ZXIoaWQpKSBjb250aW51ZTtcblxuICAgICAgICAgICAgY29uc3QgYnVja2V0ID0gdGhpcy5idWNrZXRzW2lkXTtcbiAgICAgICAgICAgIC8vIEJ1Y2tldHMgYXJlIGdyb3VwZWQgYnkgY29tbW9uIHNvdXJjZS1sYXllclxuICAgICAgICAgICAgY29uc3Qgc291cmNlTGF5ZXJJZCA9IGJ1Y2tldC5sYXllcnNbMF1bJ3NvdXJjZUxheWVyJ10gfHwgJ19nZW9qc29uVGlsZUxheWVyJztcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUxheWVyID0gdnRMYXllcnNbc291cmNlTGF5ZXJJZF07XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VMYXllclN0YXRlcyA9IHN0YXRlc1tzb3VyY2VMYXllcklkXTtcbiAgICAgICAgICAgIGlmICghc291cmNlTGF5ZXIgfHwgIXNvdXJjZUxheWVyU3RhdGVzIHx8IE9iamVjdC5rZXlzKHNvdXJjZUxheWVyU3RhdGVzKS5sZW5ndGggPT09IDApIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBidWNrZXQudXBkYXRlKHNvdXJjZUxheWVyU3RhdGVzLCBzb3VyY2VMYXllciwgdGhpcy5pbWFnZUF0bGFzICYmIHRoaXMuaW1hZ2VBdGxhcy5wYXR0ZXJuUG9zaXRpb25zIHx8IHt9KTtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gcGFpbnRlciAmJiBwYWludGVyLnN0eWxlICYmIHBhaW50ZXIuc3R5bGUuZ2V0TGF5ZXIoaWQpO1xuICAgICAgICAgICAgaWYgKGxheWVyICYmIGxheWVyLnBhaW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeVBhZGRpbmcgPSBNYXRoLm1heCh0aGlzLnF1ZXJ5UGFkZGluZywgbGF5ZXIucXVlcnlSYWRpdXMoYnVja2V0KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBob2xkaW5nRm9yRmFkZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sRmFkZUhvbGRVbnRpbCAhPT0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHN5bWJvbEZhZGVGaW5pc2hlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnN5bWJvbEZhZGVIb2xkVW50aWwgfHwgdGhpcy5zeW1ib2xGYWRlSG9sZFVudGlsIDwgYnJvd3Nlci5ub3coKTtcbiAgICB9XG5cbiAgICBjbGVhckZhZGVIb2xkKCkge1xuICAgICAgICB0aGlzLnN5bWJvbEZhZGVIb2xkVW50aWwgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgc2V0SG9sZER1cmF0aW9uKGR1cmF0aW9uOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zeW1ib2xGYWRlSG9sZFVudGlsID0gYnJvd3Nlci5ub3coKSArIGR1cmF0aW9uO1xuICAgIH1cblxuICAgIHNldERlcGVuZGVuY2llcyhuYW1lc3BhY2U6IHN0cmluZywgZGVwZW5kZW5jaWVzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgZGVwIG9mIGRlcGVuZGVuY2llcykge1xuICAgICAgICAgICAgaW5kZXhbZGVwXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZXBlbmRlbmNpZXNbbmFtZXNwYWNlXSA9IGluZGV4O1xuICAgIH1cblxuICAgIGhhc0RlcGVuZGVuY3kobmFtZXNwYWNlczogQXJyYXk8c3RyaW5nPiwga2V5czogQXJyYXk8c3RyaW5nPikge1xuICAgICAgICBmb3IgKGNvbnN0IG5hbWVzcGFjZSBvZiBuYW1lc3BhY2VzKSB7XG4gICAgICAgICAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSB0aGlzLmRlcGVuZGVuY2llc1tuYW1lc3BhY2VdO1xuICAgICAgICAgICAgaWYgKGRlcGVuZGVuY2llcykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlcGVuZGVuY2llc1trZXldKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBUaWxlO1xuIiwiXG5leHBvcnQgZGVmYXVsdCBbJ3R5cGUnLCAnc291cmNlJywgJ3NvdXJjZS1sYXllcicsICdtaW56b29tJywgJ21heHpvb20nLCAnZmlsdGVyJywgJ2xheW91dCddO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHdpbmRvdyBmcm9tICcuLi91dGlsL3dpbmRvdyc7XG5pbXBvcnQgdHlwZSB7UmVxdWVzdFBhcmFtZXRlcnN9IGZyb20gJy4uL3V0aWwvYWpheCc7XG5cbmNvbnN0IHBlcmZvcm1hbmNlID0gd2luZG93LnBlcmZvcm1hbmNlO1xuXG5leHBvcnQgdHlwZSBQZXJmb3JtYW5jZU1ldHJpY3MgPSB7XG4gICAgbG9hZFRpbWU6IG51bWJlcixcbiAgICBmdWxsTG9hZFRpbWU6IG51bWJlcixcbiAgICBmcHM6IG51bWJlcixcbiAgICBwZXJjZW50RHJvcHBlZEZyYW1lczogbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCBQZXJmb3JtYW5jZU1hcmtlcnMgPSB7XG4gICAgY3JlYXRlOiAnY3JlYXRlJyxcbiAgICBsb2FkOiAnbG9hZCcsXG4gICAgZnVsbExvYWQ6ICdmdWxsTG9hZCdcbn07XG5cbmxldCBsYXN0RnJhbWVUaW1lID0gbnVsbDtcbmxldCBmcmFtZVRpbWVzID0gW107XG5cbmNvbnN0IG1pbkZyYW1lcmF0ZVRhcmdldCA9IDMwO1xuY29uc3QgZnJhbWVUaW1lVGFyZ2V0ID0gMTAwMCAvIG1pbkZyYW1lcmF0ZVRhcmdldDtcblxuZXhwb3J0IGNvbnN0IFBlcmZvcm1hbmNlVXRpbHMgPSB7XG4gICAgbWFyayhtYXJrZXI6ICRLZXlzPHR5cGVvZiBQZXJmb3JtYW5jZU1hcmtlcnM+KSB7XG4gICAgICAgIHBlcmZvcm1hbmNlLm1hcmsobWFya2VyKTtcbiAgICB9LFxuICAgIGZyYW1lKHRpbWVzdGFtcDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGN1cnJUaW1lc3RhbXAgPSB0aW1lc3RhbXA7XG4gICAgICAgIGlmIChsYXN0RnJhbWVUaW1lICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGZyYW1lVGltZSA9IGN1cnJUaW1lc3RhbXAgLSBsYXN0RnJhbWVUaW1lO1xuICAgICAgICAgICAgZnJhbWVUaW1lcy5wdXNoKGZyYW1lVGltZSk7XG4gICAgICAgIH1cbiAgICAgICAgbGFzdEZyYW1lVGltZSA9IGN1cnJUaW1lc3RhbXA7XG4gICAgfSxcbiAgICBjbGVhck1ldHJpY3MoKSB7XG4gICAgICAgIGxhc3RGcmFtZVRpbWUgPSBudWxsO1xuICAgICAgICBmcmFtZVRpbWVzID0gW107XG4gICAgICAgIHBlcmZvcm1hbmNlLmNsZWFyTWVhc3VyZXMoJ2xvYWRUaW1lJyk7XG4gICAgICAgIHBlcmZvcm1hbmNlLmNsZWFyTWVhc3VyZXMoJ2Z1bGxMb2FkVGltZScpO1xuXG4gICAgICAgIGZvciAoY29uc3QgbWFya2VyIGluIFBlcmZvcm1hbmNlTWFya2Vycykge1xuICAgICAgICAgICAgcGVyZm9ybWFuY2UuY2xlYXJNYXJrcyhQZXJmb3JtYW5jZU1hcmtlcnNbbWFya2VyXSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGdldFBlcmZvcm1hbmNlTWV0cmljcygpOiBQZXJmb3JtYW5jZU1ldHJpY3Mge1xuICAgICAgICBjb25zdCBsb2FkVGltZSA9IHBlcmZvcm1hbmNlLm1lYXN1cmUoJ2xvYWRUaW1lJywgUGVyZm9ybWFuY2VNYXJrZXJzLmNyZWF0ZSwgUGVyZm9ybWFuY2VNYXJrZXJzLmxvYWQpLmR1cmF0aW9uO1xuICAgICAgICBjb25zdCBmdWxsTG9hZFRpbWUgPSBwZXJmb3JtYW5jZS5tZWFzdXJlKCdmdWxsTG9hZFRpbWUnLCBQZXJmb3JtYW5jZU1hcmtlcnMuY3JlYXRlLCBQZXJmb3JtYW5jZU1hcmtlcnMuZnVsbExvYWQpLmR1cmF0aW9uO1xuICAgICAgICBjb25zdCB0b3RhbEZyYW1lcyA9IGZyYW1lVGltZXMubGVuZ3RoO1xuXG4gICAgICAgIGNvbnN0IGF2Z0ZyYW1lVGltZSA9IGZyYW1lVGltZXMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgY3VyciwgMCkgLyB0b3RhbEZyYW1lcyAvIDEwMDA7XG4gICAgICAgIGNvbnN0IGZwcyA9IDEgLyBhdmdGcmFtZVRpbWU7XG5cbiAgICAgICAgLy8gY291bnQgZnJhbWVzIHRoYXQgbWlzc2VkIG91ciBmcmFtZXJhdGUgdGFyZ2V0XG4gICAgICAgIGNvbnN0IGRyb3BwZWRGcmFtZXMgPSBmcmFtZVRpbWVzXG4gICAgICAgICAgICAuZmlsdGVyKChmcmFtZVRpbWUpID0+IGZyYW1lVGltZSA+IGZyYW1lVGltZVRhcmdldClcbiAgICAgICAgICAgIC5yZWR1Y2UoKGFjYywgY3VycikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2MgKyAoY3VyciAtICBmcmFtZVRpbWVUYXJnZXQpIC8gZnJhbWVUaW1lVGFyZ2V0O1xuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgIGNvbnN0IHBlcmNlbnREcm9wcGVkRnJhbWVzID0gKGRyb3BwZWRGcmFtZXMgLyAodG90YWxGcmFtZXMgKyBkcm9wcGVkRnJhbWVzKSkgKiAxMDA7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxvYWRUaW1lLFxuICAgICAgICAgICAgZnVsbExvYWRUaW1lLFxuICAgICAgICAgICAgZnBzLFxuICAgICAgICAgICAgcGVyY2VudERyb3BwZWRGcmFtZXNcbiAgICAgICAgfTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFNhZmUgd3JhcHBlciBmb3IgdGhlIHBlcmZvcm1hbmNlIHJlc291cmNlIHRpbWluZyBBUEkgaW4gd2ViIHdvcmtlcnMgd2l0aCBncmFjZWZ1bCBkZWdyYWRhdGlvblxuICpcbiAqIEBwYXJhbSB7UmVxdWVzdFBhcmFtZXRlcnN9IHJlcXVlc3RcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXF1ZXN0UGVyZm9ybWFuY2Uge1xuICAgIF9tYXJrczoge3N0YXJ0OiBzdHJpbmcsIGVuZDogc3RyaW5nLCBtZWFzdXJlOiBzdHJpbmd9O1xuXG4gICAgY29uc3RydWN0b3IgKHJlcXVlc3Q6IFJlcXVlc3RQYXJhbWV0ZXJzKSB7XG4gICAgICAgIHRoaXMuX21hcmtzID0ge1xuICAgICAgICAgICAgc3RhcnQ6IFtyZXF1ZXN0LnVybCwgJ3N0YXJ0J10uam9pbignIycpLFxuICAgICAgICAgICAgZW5kOiBbcmVxdWVzdC51cmwsICdlbmQnXS5qb2luKCcjJyksXG4gICAgICAgICAgICBtZWFzdXJlOiByZXF1ZXN0LnVybC50b1N0cmluZygpXG4gICAgICAgIH07XG5cbiAgICAgICAgcGVyZm9ybWFuY2UubWFyayh0aGlzLl9tYXJrcy5zdGFydCk7XG4gICAgfVxuXG4gICAgZmluaXNoKCkge1xuICAgICAgICBwZXJmb3JtYW5jZS5tYXJrKHRoaXMuX21hcmtzLmVuZCk7XG4gICAgICAgIGxldCByZXNvdXJjZVRpbWluZ0RhdGEgPSBwZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlOYW1lKHRoaXMuX21hcmtzLm1lYXN1cmUpO1xuXG4gICAgICAgIC8vIGZhbGxiYWNrIGlmIHdlYiB3b3JrZXIgaW1wbGVtZW50YXRpb24gb2YgcGVyZi5nZXRFbnRyaWVzQnlOYW1lIHJldHVybnMgZW1wdHlcbiAgICAgICAgaWYgKHJlc291cmNlVGltaW5nRGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHBlcmZvcm1hbmNlLm1lYXN1cmUodGhpcy5fbWFya3MubWVhc3VyZSwgdGhpcy5fbWFya3Muc3RhcnQsIHRoaXMuX21hcmtzLmVuZCk7XG4gICAgICAgICAgICByZXNvdXJjZVRpbWluZ0RhdGEgPSBwZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlOYW1lKHRoaXMuX21hcmtzLm1lYXN1cmUpO1xuXG4gICAgICAgICAgICAvLyBjbGVhbnVwXG4gICAgICAgICAgICBwZXJmb3JtYW5jZS5jbGVhck1hcmtzKHRoaXMuX21hcmtzLnN0YXJ0KTtcbiAgICAgICAgICAgIHBlcmZvcm1hbmNlLmNsZWFyTWFya3ModGhpcy5fbWFya3MuZW5kKTtcbiAgICAgICAgICAgIHBlcmZvcm1hbmNlLmNsZWFyTWVhc3VyZXModGhpcy5fbWFya3MubWVhc3VyZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzb3VyY2VUaW1pbmdEYXRhO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgcGVyZm9ybWFuY2U7XG4iLCJcbmltcG9ydCByZWZQcm9wZXJ0aWVzIGZyb20gJy4vdXRpbC9yZWZfcHJvcGVydGllcyc7XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeShvYmopIHtcbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIG9iajtcbiAgICBpZiAodHlwZSA9PT0gJ251bWJlcicgfHwgdHlwZSA9PT0gJ2Jvb2xlYW4nIHx8IHR5cGUgPT09ICdzdHJpbmcnIHx8IG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbClcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaik7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgIGxldCBzdHIgPSAnWyc7XG4gICAgICAgIGZvciAoY29uc3QgdmFsIG9mIG9iaikge1xuICAgICAgICAgICAgc3RyICs9IGAke3N0cmluZ2lmeSh2YWwpfSxgO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJHtzdHJ9XWA7XG4gICAgfVxuXG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaikuc29ydCgpO1xuXG4gICAgbGV0IHN0ciA9ICd7JztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgc3RyICs9IGAke0pTT04uc3RyaW5naWZ5KGtleXNbaV0pfToke3N0cmluZ2lmeShvYmpba2V5c1tpXV0pfSxgO1xuICAgIH1cbiAgICByZXR1cm4gYCR7c3RyfX1gO1xufVxuXG5mdW5jdGlvbiBnZXRLZXkobGF5ZXIpIHtcbiAgICBsZXQga2V5ID0gJyc7XG4gICAgZm9yIChjb25zdCBrIG9mIHJlZlByb3BlcnRpZXMpIHtcbiAgICAgICAga2V5ICs9IGAvJHtzdHJpbmdpZnkobGF5ZXJba10pfWA7XG4gICAgfVxuICAgIHJldHVybiBrZXk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGdyb3VwQnlMYXlvdXQ7XG5cbi8qKlxuICogR2l2ZW4gYW4gYXJyYXkgb2YgbGF5ZXJzLCByZXR1cm4gYW4gYXJyYXkgb2YgYXJyYXlzIG9mIGxheWVycyB3aGVyZSBhbGxcbiAqIGxheWVycyBpbiBlYWNoIGdyb3VwIGhhdmUgaWRlbnRpY2FsIGxheW91dC1hZmZlY3RpbmcgcHJvcGVydGllcy4gVGhlc2VcbiAqIGFyZSB0aGUgcHJvcGVydGllcyB0aGF0IHdlcmUgZm9ybWVybHkgdXNlZCBieSBleHBsaWNpdCBgcmVmYCBtZWNoYW5pc21cbiAqIGZvciBsYXllcnM6ICd0eXBlJywgJ3NvdXJjZScsICdzb3VyY2UtbGF5ZXInLCAnbWluem9vbScsICdtYXh6b29tJyxcbiAqICdmaWx0ZXInLCBhbmQgJ2xheW91dCcuXG4gKlxuICogVGhlIGlucHV0IGlzIG5vdCBtb2RpZmllZC4gVGhlIG91dHB1dCBsYXllcnMgYXJlIHJlZmVyZW5jZXMgdG8gdGhlXG4gKiBpbnB1dCBsYXllcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXk8TGF5ZXI+fSBsYXllcnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbY2FjaGVkS2V5c10gLSBhbiBvYmplY3QgdG8ga2VlcCBhbHJlYWR5IGNhbGN1bGF0ZWQga2V5cy5cbiAqIEByZXR1cm5zIHtBcnJheTxBcnJheTxMYXllcj4+fVxuICovXG5mdW5jdGlvbiBncm91cEJ5TGF5b3V0KGxheWVycywgY2FjaGVkS2V5cykge1xuICAgIGNvbnN0IGdyb3VwcyA9IHt9O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsYXllcnMubGVuZ3RoOyBpKyspIHtcblxuICAgICAgICBjb25zdCBrID0gKGNhY2hlZEtleXMgJiYgY2FjaGVkS2V5c1tsYXllcnNbaV0uaWRdKSB8fCBnZXRLZXkobGF5ZXJzW2ldKTtcbiAgICAgICAgLy8gdXBkYXRlIHRoZSBjYWNoZSBpZiB0aGVyZSBpcyBvbmVcbiAgICAgICAgaWYgKGNhY2hlZEtleXMpXG4gICAgICAgICAgICBjYWNoZWRLZXlzW2xheWVyc1tpXS5pZF0gPSBrO1xuXG4gICAgICAgIGxldCBncm91cCA9IGdyb3Vwc1trXTtcbiAgICAgICAgaWYgKCFncm91cCkge1xuICAgICAgICAgICAgZ3JvdXAgPSBncm91cHNba10gPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBncm91cC5wdXNoKGxheWVyc1tpXSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGsgaW4gZ3JvdXBzKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGdyb3Vwc1trXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBTdHlsZUxheWVyIGZyb20gJy4vc3R5bGVfbGF5ZXInO1xuaW1wb3J0IGNyZWF0ZVN0eWxlTGF5ZXIgZnJvbSAnLi9jcmVhdGVfc3R5bGVfbGF5ZXInO1xuXG5pbXBvcnQge3ZhbHVlc30gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCBmZWF0dXJlRmlsdGVyIGZyb20gJy4uL3N0eWxlLXNwZWMvZmVhdHVyZV9maWx0ZXInO1xuaW1wb3J0IGdyb3VwQnlMYXlvdXQgZnJvbSAnLi4vc3R5bGUtc3BlYy9ncm91cF9ieV9sYXlvdXQnO1xuXG5pbXBvcnQgdHlwZSB7VHlwZWRTdHlsZUxheWVyfSBmcm9tICcuL3N0eWxlX2xheWVyL3R5cGVkX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIHtMYXllclNwZWNpZmljYXRpb259IGZyb20gJy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBMYXllckNvbmZpZ3MgPSB7W186IHN0cmluZ106IExheWVyU3BlY2lmaWNhdGlvbiB9O1xuZXhwb3J0IHR5cGUgRmFtaWx5PExheWVyOiBUeXBlZFN0eWxlTGF5ZXI+ID0gQXJyYXk8TGF5ZXI+O1xuXG5jbGFzcyBTdHlsZUxheWVySW5kZXgge1xuICAgIGZhbWlsaWVzQnlTb3VyY2U6IHsgW3NvdXJjZTogc3RyaW5nXTogeyBbc291cmNlTGF5ZXI6IHN0cmluZ106IEFycmF5PEZhbWlseTwqPj4gfSB9O1xuICAgIGtleUNhY2hlOiB7IFtzb3VyY2U6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gICAgX2xheWVyQ29uZmlnczogTGF5ZXJDb25maWdzO1xuICAgIF9sYXllcnM6IHtbXzogc3RyaW5nXTogU3R5bGVMYXllciB9O1xuXG4gICAgY29uc3RydWN0b3IobGF5ZXJDb25maWdzOiA/QXJyYXk8TGF5ZXJTcGVjaWZpY2F0aW9uPikge1xuICAgICAgICB0aGlzLmtleUNhY2hlID0ge307XG4gICAgICAgIGlmIChsYXllckNvbmZpZ3MpIHtcbiAgICAgICAgICAgIHRoaXMucmVwbGFjZShsYXllckNvbmZpZ3MpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVwbGFjZShsYXllckNvbmZpZ3M6IEFycmF5PExheWVyU3BlY2lmaWNhdGlvbj4pIHtcbiAgICAgICAgdGhpcy5fbGF5ZXJDb25maWdzID0ge307XG4gICAgICAgIHRoaXMuX2xheWVycyA9IHt9O1xuICAgICAgICB0aGlzLnVwZGF0ZShsYXllckNvbmZpZ3MsIFtdKTtcbiAgICB9XG5cbiAgICB1cGRhdGUobGF5ZXJDb25maWdzOiBBcnJheTxMYXllclNwZWNpZmljYXRpb24+LCByZW1vdmVkSWRzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJDb25maWcgb2YgbGF5ZXJDb25maWdzKSB7XG4gICAgICAgICAgICB0aGlzLl9sYXllckNvbmZpZ3NbbGF5ZXJDb25maWcuaWRdID0gbGF5ZXJDb25maWc7XG5cbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJzW2xheWVyQ29uZmlnLmlkXSA9IGNyZWF0ZVN0eWxlTGF5ZXIobGF5ZXJDb25maWcpO1xuICAgICAgICAgICAgbGF5ZXIuX2ZlYXR1cmVGaWx0ZXIgPSBmZWF0dXJlRmlsdGVyKGxheWVyLmZpbHRlcik7XG4gICAgICAgICAgICBpZiAodGhpcy5rZXlDYWNoZVtsYXllckNvbmZpZy5pZF0pXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMua2V5Q2FjaGVbbGF5ZXJDb25maWcuaWRdO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgaWQgb2YgcmVtb3ZlZElkcykge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMua2V5Q2FjaGVbaWRdO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2xheWVyQ29uZmlnc1tpZF07XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fbGF5ZXJzW2lkXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmFtaWxpZXNCeVNvdXJjZSA9IHt9O1xuXG4gICAgICAgIGNvbnN0IGdyb3VwcyA9IGdyb3VwQnlMYXlvdXQodmFsdWVzKHRoaXMuX2xheWVyQ29uZmlncyksIHRoaXMua2V5Q2FjaGUpO1xuXG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJDb25maWdzIG9mIGdyb3Vwcykge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXJzID0gbGF5ZXJDb25maWdzLm1hcCgobGF5ZXJDb25maWcpID0+IHRoaXMuX2xheWVyc1tsYXllckNvbmZpZy5pZF0pO1xuXG4gICAgICAgICAgICBjb25zdCBsYXllciA9IGxheWVyc1swXTtcbiAgICAgICAgICAgIGlmIChsYXllci52aXNpYmlsaXR5ID09PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc291cmNlSWQgPSBsYXllci5zb3VyY2UgfHwgJyc7XG4gICAgICAgICAgICBsZXQgc291cmNlR3JvdXAgPSB0aGlzLmZhbWlsaWVzQnlTb3VyY2Vbc291cmNlSWRdO1xuICAgICAgICAgICAgaWYgKCFzb3VyY2VHcm91cCkge1xuICAgICAgICAgICAgICAgIHNvdXJjZUdyb3VwID0gdGhpcy5mYW1pbGllc0J5U291cmNlW3NvdXJjZUlkXSA9IHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzb3VyY2VMYXllcklkID0gbGF5ZXIuc291cmNlTGF5ZXIgfHwgJ19nZW9qc29uVGlsZUxheWVyJztcbiAgICAgICAgICAgIGxldCBzb3VyY2VMYXllckZhbWlsaWVzID0gc291cmNlR3JvdXBbc291cmNlTGF5ZXJJZF07XG4gICAgICAgICAgICBpZiAoIXNvdXJjZUxheWVyRmFtaWxpZXMpIHtcbiAgICAgICAgICAgICAgICBzb3VyY2VMYXllckZhbWlsaWVzID0gc291cmNlR3JvdXBbc291cmNlTGF5ZXJJZF0gPSBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc291cmNlTGF5ZXJGYW1pbGllcy5wdXNoKGxheWVycyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFN0eWxlTGF5ZXJJbmRleDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7QWxwaGFJbWFnZX0gZnJvbSAnLi4vdXRpbC9pbWFnZSc7XG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuaW1wb3J0IHBvdHBhY2sgZnJvbSAncG90cGFjayc7XG5cbmltcG9ydCB0eXBlIHtHbHlwaE1ldHJpY3MsIFN0eWxlR2x5cGh9IGZyb20gJy4uL3N0eWxlL3N0eWxlX2dseXBoJztcblxuY29uc3QgcGFkZGluZyA9IDE7XG5cbmV4cG9ydCB0eXBlIFJlY3QgPSB7XG4gICAgeDogbnVtYmVyLFxuICAgIHk6IG51bWJlcixcbiAgICB3OiBudW1iZXIsXG4gICAgaDogbnVtYmVyXG59O1xuXG5leHBvcnQgdHlwZSBHbHlwaFBvc2l0aW9uID0ge1xuICAgIHJlY3Q6IFJlY3QsXG4gICAgbWV0cmljczogR2x5cGhNZXRyaWNzXG59O1xuXG5leHBvcnQgdHlwZSBHbHlwaFBvc2l0aW9ucyA9IHtbXzogc3RyaW5nXToge1tfOiBudW1iZXJdOiBHbHlwaFBvc2l0aW9uIH0gfVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHbHlwaEF0bGFzIHtcbiAgICBpbWFnZTogQWxwaGFJbWFnZTtcbiAgICBwb3NpdGlvbnM6IEdseXBoUG9zaXRpb25zO1xuXG4gICAgY29uc3RydWN0b3Ioc3RhY2tzOiB7W186IHN0cmluZ106IHtbXzogbnVtYmVyXTogP1N0eWxlR2x5cGggfSB9KSB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IHt9O1xuICAgICAgICBjb25zdCBiaW5zID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBzdGFjayBpbiBzdGFja3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGdseXBocyA9IHN0YWNrc1tzdGFja107XG4gICAgICAgICAgICBjb25zdCBzdGFja1Bvc2l0aW9ucyA9IHBvc2l0aW9uc1tzdGFja10gPSB7fTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBpZCBpbiBnbHlwaHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzcmMgPSBnbHlwaHNbK2lkXTtcbiAgICAgICAgICAgICAgICBpZiAoIXNyYyB8fCBzcmMuYml0bWFwLndpZHRoID09PSAwIHx8IHNyYy5iaXRtYXAuaGVpZ2h0ID09PSAwKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGJpbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgICAgICAgICAgeTogMCxcbiAgICAgICAgICAgICAgICAgICAgdzogc3JjLmJpdG1hcC53aWR0aCArIDIgKiBwYWRkaW5nLFxuICAgICAgICAgICAgICAgICAgICBoOiBzcmMuYml0bWFwLmhlaWdodCArIDIgKiBwYWRkaW5nXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBiaW5zLnB1c2goYmluKTtcbiAgICAgICAgICAgICAgICBzdGFja1Bvc2l0aW9uc1tpZF0gPSB7cmVjdDogYmluLCBtZXRyaWNzOiBzcmMubWV0cmljc307XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7dywgaH0gPSBwb3RwYWNrKGJpbnMpO1xuICAgICAgICBjb25zdCBpbWFnZSA9IG5ldyBBbHBoYUltYWdlKHt3aWR0aDogdyB8fCAxLCBoZWlnaHQ6IGggfHwgMX0pO1xuXG4gICAgICAgIGZvciAoY29uc3Qgc3RhY2sgaW4gc3RhY2tzKSB7XG4gICAgICAgICAgICBjb25zdCBnbHlwaHMgPSBzdGFja3Nbc3RhY2tdO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkIGluIGdseXBocykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNyYyA9IGdseXBoc1sraWRdO1xuICAgICAgICAgICAgICAgIGlmICghc3JjIHx8IHNyYy5iaXRtYXAud2lkdGggPT09IDAgfHwgc3JjLmJpdG1hcC5oZWlnaHQgPT09IDApIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJpbiA9IHBvc2l0aW9uc1tzdGFja11baWRdLnJlY3Q7XG4gICAgICAgICAgICAgICAgQWxwaGFJbWFnZS5jb3B5KHNyYy5iaXRtYXAsIGltYWdlLCB7eDogMCwgeTogMH0sIHt4OiBiaW4ueCArIHBhZGRpbmcsIHk6IGJpbi55ICsgcGFkZGluZ30sIHNyYy5iaXRtYXApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbWFnZSA9IGltYWdlO1xuICAgICAgICB0aGlzLnBvc2l0aW9ucyA9IHBvc2l0aW9ucztcbiAgICB9XG59XG5cbnJlZ2lzdGVyKCdHbHlwaEF0bGFzJywgR2x5cGhBdGxhcyk7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgRmVhdHVyZUluZGV4IGZyb20gJy4uL2RhdGEvZmVhdHVyZV9pbmRleCc7XG5cbmltcG9ydCB7cGVyZm9ybVN5bWJvbExheW91dH0gZnJvbSAnLi4vc3ltYm9sL3N5bWJvbF9sYXlvdXQnO1xuaW1wb3J0IHtDb2xsaXNpb25Cb3hBcnJheX0gZnJvbSAnLi4vZGF0YS9hcnJheV90eXBlcyc7XG5pbXBvcnQgRGljdGlvbmFyeUNvZGVyIGZyb20gJy4uL3V0aWwvZGljdGlvbmFyeV9jb2Rlcic7XG5pbXBvcnQgU3ltYm9sQnVja2V0IGZyb20gJy4uL2RhdGEvYnVja2V0L3N5bWJvbF9idWNrZXQnO1xuaW1wb3J0IExpbmVCdWNrZXQgZnJvbSAnLi4vZGF0YS9idWNrZXQvbGluZV9idWNrZXQnO1xuaW1wb3J0IEZpbGxCdWNrZXQgZnJvbSAnLi4vZGF0YS9idWNrZXQvZmlsbF9idWNrZXQnO1xuaW1wb3J0IEZpbGxFeHRydXNpb25CdWNrZXQgZnJvbSAnLi4vZGF0YS9idWNrZXQvZmlsbF9leHRydXNpb25fYnVja2V0JztcbmltcG9ydCB7d2Fybk9uY2UsIG1hcE9iamVjdCwgdmFsdWVzfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IEltYWdlQXRsYXMgZnJvbSAnLi4vcmVuZGVyL2ltYWdlX2F0bGFzJztcbmltcG9ydCBHbHlwaEF0bGFzIGZyb20gJy4uL3JlbmRlci9nbHlwaF9hdGxhcyc7XG5pbXBvcnQgRXZhbHVhdGlvblBhcmFtZXRlcnMgZnJvbSAnLi4vc3R5bGUvZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcbmltcG9ydCB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi90aWxlX2lkJztcblxuaW1wb3J0IHR5cGUge0J1Y2tldH0gZnJvbSAnLi4vZGF0YS9idWNrZXQnO1xuaW1wb3J0IHR5cGUgQWN0b3IgZnJvbSAnLi4vdXRpbC9hY3Rvcic7XG5pbXBvcnQgdHlwZSBTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIFN0eWxlTGF5ZXJJbmRleCBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllcl9pbmRleCc7XG5pbXBvcnQgdHlwZSB7U3R5bGVJbWFnZX0gZnJvbSAnLi4vc3R5bGUvc3R5bGVfaW1hZ2UnO1xuaW1wb3J0IHR5cGUge1N0eWxlR2x5cGh9IGZyb20gJy4uL3N0eWxlL3N0eWxlX2dseXBoJztcbmltcG9ydCB0eXBlIHtcbiAgICBXb3JrZXJUaWxlUGFyYW1ldGVycyxcbiAgICBXb3JrZXJUaWxlQ2FsbGJhY2ssXG59IGZyb20gJy4uL3NvdXJjZS93b3JrZXJfc291cmNlJztcbmltcG9ydCB0eXBlIHtQcm9tb3RlSWRTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuY2xhc3MgV29ya2VyVGlsZSB7XG4gICAgdGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEO1xuICAgIHVpZDogc3RyaW5nO1xuICAgIHpvb206IG51bWJlcjtcbiAgICBwaXhlbFJhdGlvOiBudW1iZXI7XG4gICAgdGlsZVNpemU6IG51bWJlcjtcbiAgICBzb3VyY2U6IHN0cmluZztcbiAgICBwcm9tb3RlSWQ6ID9Qcm9tb3RlSWRTcGVjaWZpY2F0aW9uO1xuICAgIG92ZXJzY2FsaW5nOiBudW1iZXI7XG4gICAgc2hvd0NvbGxpc2lvbkJveGVzOiBib29sZWFuO1xuICAgIGNvbGxlY3RSZXNvdXJjZVRpbWluZzogYm9vbGVhbjtcbiAgICByZXR1cm5EZXBlbmRlbmNpZXM6IGJvb2xlYW47XG5cbiAgICBzdGF0dXM6ICdwYXJzaW5nJyB8ICdkb25lJztcbiAgICBkYXRhOiBWZWN0b3JUaWxlO1xuICAgIGNvbGxpc2lvbkJveEFycmF5OiBDb2xsaXNpb25Cb3hBcnJheTtcblxuICAgIGFib3J0OiA/KCkgPT4gdm9pZDtcbiAgICByZWxvYWRDYWxsYmFjazogV29ya2VyVGlsZUNhbGxiYWNrO1xuICAgIHZlY3RvclRpbGU6IFZlY3RvclRpbGU7XG5cbiAgICBjb25zdHJ1Y3RvcihwYXJhbXM6IFdvcmtlclRpbGVQYXJhbWV0ZXJzKSB7XG4gICAgICAgIHRoaXMudGlsZUlEID0gbmV3IE92ZXJzY2FsZWRUaWxlSUQocGFyYW1zLnRpbGVJRC5vdmVyc2NhbGVkWiwgcGFyYW1zLnRpbGVJRC53cmFwLCBwYXJhbXMudGlsZUlELmNhbm9uaWNhbC56LCBwYXJhbXMudGlsZUlELmNhbm9uaWNhbC54LCBwYXJhbXMudGlsZUlELmNhbm9uaWNhbC55KTtcbiAgICAgICAgdGhpcy51aWQgPSBwYXJhbXMudWlkO1xuICAgICAgICB0aGlzLnpvb20gPSBwYXJhbXMuem9vbTtcbiAgICAgICAgdGhpcy5waXhlbFJhdGlvID0gcGFyYW1zLnBpeGVsUmF0aW87XG4gICAgICAgIHRoaXMudGlsZVNpemUgPSBwYXJhbXMudGlsZVNpemU7XG4gICAgICAgIHRoaXMuc291cmNlID0gcGFyYW1zLnNvdXJjZTtcbiAgICAgICAgdGhpcy5vdmVyc2NhbGluZyA9IHRoaXMudGlsZUlELm92ZXJzY2FsZUZhY3RvcigpO1xuICAgICAgICB0aGlzLnNob3dDb2xsaXNpb25Cb3hlcyA9IHBhcmFtcy5zaG93Q29sbGlzaW9uQm94ZXM7XG4gICAgICAgIHRoaXMuY29sbGVjdFJlc291cmNlVGltaW5nID0gISFwYXJhbXMuY29sbGVjdFJlc291cmNlVGltaW5nO1xuICAgICAgICB0aGlzLnJldHVybkRlcGVuZGVuY2llcyA9ICEhcGFyYW1zLnJldHVybkRlcGVuZGVuY2llcztcbiAgICAgICAgdGhpcy5wcm9tb3RlSWQgPSBwYXJhbXMucHJvbW90ZUlkO1xuICAgIH1cblxuICAgIHBhcnNlKGRhdGE6IFZlY3RvclRpbGUsIGxheWVySW5kZXg6IFN0eWxlTGF5ZXJJbmRleCwgYXZhaWxhYmxlSW1hZ2VzOiBBcnJheTxzdHJpbmc+LCBhY3RvcjogQWN0b3IsIGNhbGxiYWNrOiBXb3JrZXJUaWxlQ2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSAncGFyc2luZyc7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XG5cbiAgICAgICAgdGhpcy5jb2xsaXNpb25Cb3hBcnJheSA9IG5ldyBDb2xsaXNpb25Cb3hBcnJheSgpO1xuICAgICAgICBjb25zdCBzb3VyY2VMYXllckNvZGVyID0gbmV3IERpY3Rpb25hcnlDb2RlcihPYmplY3Qua2V5cyhkYXRhLmxheWVycykuc29ydCgpKTtcblxuICAgICAgICBjb25zdCBmZWF0dXJlSW5kZXggPSBuZXcgRmVhdHVyZUluZGV4KHRoaXMudGlsZUlELCB0aGlzLnByb21vdGVJZCk7XG4gICAgICAgIGZlYXR1cmVJbmRleC5idWNrZXRMYXllcklEcyA9IFtdO1xuXG4gICAgICAgIGNvbnN0IGJ1Y2tldHM6IHtbXzogc3RyaW5nXTogQnVja2V0fSA9IHt9O1xuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBmZWF0dXJlSW5kZXgsXG4gICAgICAgICAgICBpY29uRGVwZW5kZW5jaWVzOiB7fSxcbiAgICAgICAgICAgIHBhdHRlcm5EZXBlbmRlbmNpZXM6IHt9LFxuICAgICAgICAgICAgZ2x5cGhEZXBlbmRlbmNpZXM6IHt9LFxuICAgICAgICAgICAgYXZhaWxhYmxlSW1hZ2VzXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgbGF5ZXJGYW1pbGllcyA9IGxheWVySW5kZXguZmFtaWxpZXNCeVNvdXJjZVt0aGlzLnNvdXJjZV07XG4gICAgICAgIGZvciAoY29uc3Qgc291cmNlTGF5ZXJJZCBpbiBsYXllckZhbWlsaWVzKSB7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VMYXllciA9IGRhdGEubGF5ZXJzW3NvdXJjZUxheWVySWRdO1xuICAgICAgICAgICAgaWYgKCFzb3VyY2VMYXllcikge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc291cmNlTGF5ZXIudmVyc2lvbiA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHdhcm5PbmNlKGBWZWN0b3IgdGlsZSBzb3VyY2UgXCIke3RoaXMuc291cmNlfVwiIGxheWVyIFwiJHtzb3VyY2VMYXllcklkfVwiIGAgK1xuICAgICAgICAgICAgICAgICAgICBgZG9lcyBub3QgdXNlIHZlY3RvciB0aWxlIHNwZWMgdjIgYW5kIHRoZXJlZm9yZSBtYXkgaGF2ZSBzb21lIHJlbmRlcmluZyBlcnJvcnMuYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUxheWVySW5kZXggPSBzb3VyY2VMYXllckNvZGVyLmVuY29kZShzb3VyY2VMYXllcklkKTtcbiAgICAgICAgICAgIGNvbnN0IGZlYXR1cmVzID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgc291cmNlTGF5ZXIubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmVhdHVyZSA9IHNvdXJjZUxheWVyLmZlYXR1cmUoaW5kZXgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gZmVhdHVyZUluZGV4LmdldElkKGZlYXR1cmUsIHNvdXJjZUxheWVySWQpO1xuICAgICAgICAgICAgICAgIGZlYXR1cmVzLnB1c2goe2ZlYXR1cmUsIGlkLCBpbmRleCwgc291cmNlTGF5ZXJJbmRleH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZhbWlseSBvZiBsYXllckZhbWlsaWVzW3NvdXJjZUxheWVySWRdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSBmYW1pbHlbMF07XG5cbiAgICAgICAgICAgICAgICBhc3NlcnQobGF5ZXIuc291cmNlID09PSB0aGlzLnNvdXJjZSk7XG4gICAgICAgICAgICAgICAgaWYgKGxheWVyLm1pbnpvb20gJiYgdGhpcy56b29tIDwgTWF0aC5mbG9vcihsYXllci5taW56b29tKSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgaWYgKGxheWVyLm1heHpvb20gJiYgdGhpcy56b29tID49IGxheWVyLm1heHpvb20pIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGlmIChsYXllci52aXNpYmlsaXR5ID09PSAnbm9uZScpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgcmVjYWxjdWxhdGVMYXllcnMoZmFtaWx5LCB0aGlzLnpvb20sIGF2YWlsYWJsZUltYWdlcyk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBidWNrZXQgPSBidWNrZXRzW2xheWVyLmlkXSA9IGxheWVyLmNyZWF0ZUJ1Y2tldCh7XG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiBmZWF0dXJlSW5kZXguYnVja2V0TGF5ZXJJRHMubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICBsYXllcnM6IGZhbWlseSxcbiAgICAgICAgICAgICAgICAgICAgem9vbTogdGhpcy56b29tLFxuICAgICAgICAgICAgICAgICAgICBwaXhlbFJhdGlvOiB0aGlzLnBpeGVsUmF0aW8sXG4gICAgICAgICAgICAgICAgICAgIG92ZXJzY2FsaW5nOiB0aGlzLm92ZXJzY2FsaW5nLFxuICAgICAgICAgICAgICAgICAgICBjb2xsaXNpb25Cb3hBcnJheTogdGhpcy5jb2xsaXNpb25Cb3hBcnJheSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlTGF5ZXJJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlSUQ6IHRoaXMuc291cmNlXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBidWNrZXQucG9wdWxhdGUoZmVhdHVyZXMsIG9wdGlvbnMsIHRoaXMudGlsZUlELmNhbm9uaWNhbCk7XG4gICAgICAgICAgICAgICAgZmVhdHVyZUluZGV4LmJ1Y2tldExheWVySURzLnB1c2goZmFtaWx5Lm1hcCgobCkgPT4gbC5pZCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGVycm9yOiA/RXJyb3I7XG4gICAgICAgIGxldCBnbHlwaE1hcDogP3tbXzogc3RyaW5nXToge1tfOiBudW1iZXJdOiA/U3R5bGVHbHlwaH19O1xuICAgICAgICBsZXQgaWNvbk1hcDogP3tbXzogc3RyaW5nXTogU3R5bGVJbWFnZX07XG4gICAgICAgIGxldCBwYXR0ZXJuTWFwOiA/e1tfOiBzdHJpbmddOiBTdHlsZUltYWdlfTtcblxuICAgICAgICBjb25zdCBzdGFja3MgPSBtYXBPYmplY3Qob3B0aW9ucy5nbHlwaERlcGVuZGVuY2llcywgKGdseXBocykgPT4gT2JqZWN0LmtleXMoZ2x5cGhzKS5tYXAoTnVtYmVyKSk7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhzdGFja3MpLmxlbmd0aCkge1xuICAgICAgICAgICAgYWN0b3Iuc2VuZCgnZ2V0R2x5cGhzJywge3VpZDogdGhpcy51aWQsIHN0YWNrc30sIChlcnIsIHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgICAgIGdseXBoTWFwID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICBtYXliZVByZXBhcmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdseXBoTWFwID0ge307XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpY29ucyA9IE9iamVjdC5rZXlzKG9wdGlvbnMuaWNvbkRlcGVuZGVuY2llcyk7XG4gICAgICAgIGlmIChpY29ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFjdG9yLnNlbmQoJ2dldEltYWdlcycsIHtpY29ucywgc291cmNlOiB0aGlzLnNvdXJjZSwgdGlsZUlEOiB0aGlzLnRpbGVJRCwgdHlwZTogJ2ljb25zJ30sIChlcnIsIHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgICAgIGljb25NYXAgPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIG1heWJlUHJlcGFyZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWNvbk1hcCA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGF0dGVybnMgPSBPYmplY3Qua2V5cyhvcHRpb25zLnBhdHRlcm5EZXBlbmRlbmNpZXMpO1xuICAgICAgICBpZiAocGF0dGVybnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBhY3Rvci5zZW5kKCdnZXRJbWFnZXMnLCB7aWNvbnM6IHBhdHRlcm5zLCBzb3VyY2U6IHRoaXMuc291cmNlLCB0aWxlSUQ6IHRoaXMudGlsZUlELCB0eXBlOiAncGF0dGVybnMnfSwgKGVyciwgcmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICAgICAgcGF0dGVybk1hcCA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgbWF5YmVQcmVwYXJlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXR0ZXJuTWFwID0ge307XG4gICAgICAgIH1cblxuICAgICAgICBtYXliZVByZXBhcmUuY2FsbCh0aGlzKTtcblxuICAgICAgICBmdW5jdGlvbiBtYXliZVByZXBhcmUoKSB7XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChnbHlwaE1hcCAmJiBpY29uTWFwICYmIHBhdHRlcm5NYXApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBnbHlwaEF0bGFzID0gbmV3IEdseXBoQXRsYXMoZ2x5cGhNYXApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlQXRsYXMgPSBuZXcgSW1hZ2VBdGxhcyhpY29uTWFwLCBwYXR0ZXJuTWFwKTtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGJ1Y2tldHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYnVja2V0ID0gYnVja2V0c1trZXldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYnVja2V0IGluc3RhbmNlb2YgU3ltYm9sQnVja2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWNhbGN1bGF0ZUxheWVycyhidWNrZXQubGF5ZXJzLCB0aGlzLnpvb20sIGF2YWlsYWJsZUltYWdlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZXJmb3JtU3ltYm9sTGF5b3V0KGJ1Y2tldCwgZ2x5cGhNYXAsIGdseXBoQXRsYXMucG9zaXRpb25zLCBpY29uTWFwLCBpbWFnZUF0bGFzLmljb25Qb3NpdGlvbnMsIHRoaXMuc2hvd0NvbGxpc2lvbkJveGVzLCB0aGlzLnRpbGVJRC5jYW5vbmljYWwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJ1Y2tldC5oYXNQYXR0ZXJuICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoYnVja2V0IGluc3RhbmNlb2YgTGluZUJ1Y2tldCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldCBpbnN0YW5jZW9mIEZpbGxCdWNrZXQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICBidWNrZXQgaW5zdGFuY2VvZiBGaWxsRXh0cnVzaW9uQnVja2V0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVjYWxjdWxhdGVMYXllcnMoYnVja2V0LmxheWVycywgdGhpcy56b29tLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnVja2V0LmFkZEZlYXR1cmVzKG9wdGlvbnMsIHRoaXMudGlsZUlELmNhbm9uaWNhbCwgaW1hZ2VBdGxhcy5wYXR0ZXJuUG9zaXRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gJ2RvbmUnO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHtcbiAgICAgICAgICAgICAgICAgICAgYnVja2V0czogdmFsdWVzKGJ1Y2tldHMpLmZpbHRlcihiID0+ICFiLmlzRW1wdHkoKSksXG4gICAgICAgICAgICAgICAgICAgIGZlYXR1cmVJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgY29sbGlzaW9uQm94QXJyYXk6IHRoaXMuY29sbGlzaW9uQm94QXJyYXksXG4gICAgICAgICAgICAgICAgICAgIGdseXBoQXRsYXNJbWFnZTogZ2x5cGhBdGxhcy5pbWFnZSxcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2VBdGxhcyxcbiAgICAgICAgICAgICAgICAgICAgLy8gT25seSB1c2VkIGZvciBiZW5jaG1hcmtpbmc6XG4gICAgICAgICAgICAgICAgICAgIGdseXBoTWFwOiB0aGlzLnJldHVybkRlcGVuZGVuY2llcyA/IGdseXBoTWFwIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgaWNvbk1hcDogdGhpcy5yZXR1cm5EZXBlbmRlbmNpZXMgPyBpY29uTWFwIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZ2x5cGhQb3NpdGlvbnM6IHRoaXMucmV0dXJuRGVwZW5kZW5jaWVzID8gZ2x5cGhBdGxhcy5wb3NpdGlvbnMgOiBudWxsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlY2FsY3VsYXRlTGF5ZXJzKGxheWVyczogJFJlYWRPbmx5QXJyYXk8U3R5bGVMYXllcj4sIHpvb206IG51bWJlciwgYXZhaWxhYmxlSW1hZ2VzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgLy8gTGF5ZXJzIGFyZSBzaGFyZWQgYW5kIG1heSBoYXZlIGJlZW4gdXNlZCBieSBhIFdvcmtlclRpbGUgd2l0aCBhIGRpZmZlcmVudCB6b29tLlxuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBuZXcgRXZhbHVhdGlvblBhcmFtZXRlcnMoem9vbSk7XG4gICAgZm9yIChjb25zdCBsYXllciBvZiBsYXllcnMpIHtcbiAgICAgICAgbGF5ZXIucmVjYWxjdWxhdGUocGFyYW1ldGVycywgYXZhaWxhYmxlSW1hZ2VzKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFdvcmtlclRpbGU7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2dldEFycmF5QnVmZmVyfSBmcm9tICcuLi91dGlsL2FqYXgnO1xuXG5pbXBvcnQgdnQgZnJvbSAnQG1hcGJveC92ZWN0b3ItdGlsZSc7XG5pbXBvcnQgUHJvdG9idWYgZnJvbSAncGJmJztcbmltcG9ydCBXb3JrZXJUaWxlIGZyb20gJy4vd29ya2VyX3RpbGUnO1xuaW1wb3J0IHtleHRlbmR9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQge1JlcXVlc3RQZXJmb3JtYW5jZX0gZnJvbSAnLi4vdXRpbC9wZXJmb3JtYW5jZSc7XG5cbmltcG9ydCB0eXBlIHtcbiAgICBXb3JrZXJTb3VyY2UsXG4gICAgV29ya2VyVGlsZVBhcmFtZXRlcnMsXG4gICAgV29ya2VyVGlsZUNhbGxiYWNrLFxuICAgIFRpbGVQYXJhbWV0ZXJzXG59IGZyb20gJy4uL3NvdXJjZS93b3JrZXJfc291cmNlJztcblxuaW1wb3J0IHR5cGUgQWN0b3IgZnJvbSAnLi4vdXRpbC9hY3Rvcic7XG5pbXBvcnQgdHlwZSBTdHlsZUxheWVySW5kZXggZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXJfaW5kZXgnO1xuaW1wb3J0IHR5cGUge0NhbGxiYWNrfSBmcm9tICcuLi90eXBlcy9jYWxsYmFjayc7XG5cbmV4cG9ydCB0eXBlIExvYWRWZWN0b3JUaWxlUmVzdWx0ID0ge1xuICAgIHZlY3RvclRpbGU6IFZlY3RvclRpbGU7XG4gICAgcmF3RGF0YTogQXJyYXlCdWZmZXI7XG4gICAgZXhwaXJlcz86IGFueTtcbiAgICBjYWNoZUNvbnRyb2w/OiBhbnk7XG4gICAgcmVzb3VyY2VUaW1pbmc/OiBBcnJheTxQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nPjtcbn07XG5cbi8qKlxuICogQGNhbGxiYWNrIExvYWRWZWN0b3JEYXRhQ2FsbGJhY2tcbiAqIEBwYXJhbSBlcnJvclxuICogQHBhcmFtIHZlY3RvclRpbGVcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCB0eXBlIExvYWRWZWN0b3JEYXRhQ2FsbGJhY2sgPSBDYWxsYmFjazw/TG9hZFZlY3RvclRpbGVSZXN1bHQ+O1xuXG5leHBvcnQgdHlwZSBBYm9ydFZlY3RvckRhdGEgPSAoKSA9PiB2b2lkO1xuZXhwb3J0IHR5cGUgTG9hZFZlY3RvckRhdGEgPSAocGFyYW1zOiBXb3JrZXJUaWxlUGFyYW1ldGVycywgY2FsbGJhY2s6IExvYWRWZWN0b3JEYXRhQ2FsbGJhY2spID0+ID9BYm9ydFZlY3RvckRhdGE7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gbG9hZFZlY3RvclRpbGUocGFyYW1zOiBXb3JrZXJUaWxlUGFyYW1ldGVycywgY2FsbGJhY2s6IExvYWRWZWN0b3JEYXRhQ2FsbGJhY2spIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gZ2V0QXJyYXlCdWZmZXIocGFyYW1zLnJlcXVlc3QsIChlcnI6ID9FcnJvciwgZGF0YTogP0FycmF5QnVmZmVyLCBjYWNoZUNvbnRyb2w6ID9zdHJpbmcsIGV4cGlyZXM6ID9zdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCB7XG4gICAgICAgICAgICAgICAgdmVjdG9yVGlsZTogbmV3IHZ0LlZlY3RvclRpbGUobmV3IFByb3RvYnVmKGRhdGEpKSxcbiAgICAgICAgICAgICAgICByYXdEYXRhOiBkYXRhLFxuICAgICAgICAgICAgICAgIGNhY2hlQ29udHJvbCxcbiAgICAgICAgICAgICAgICBleHBpcmVzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHJlcXVlc3QuY2FuY2VsKCk7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgfTtcbn1cblxuLyoqXG4gKiBUaGUge0BsaW5rIFdvcmtlclNvdXJjZX0gaW1wbGVtZW50YXRpb24gdGhhdCBzdXBwb3J0cyB7QGxpbmsgVmVjdG9yVGlsZVNvdXJjZX0uXG4gKiBUaGlzIGNsYXNzIGlzIGRlc2lnbmVkIHRvIGJlIGVhc2lseSByZXVzZWQgdG8gc3VwcG9ydCBjdXN0b20gc291cmNlIHR5cGVzXG4gKiBmb3IgZGF0YSBmb3JtYXRzIHRoYXQgY2FuIGJlIHBhcnNlZC9jb252ZXJ0ZWQgaW50byBhbiBpbi1tZW1vcnkgVmVjdG9yVGlsZVxuICogcmVwcmVzZW50YXRpb24uICBUbyBkbyBzbywgY3JlYXRlIGl0IHdpdGhcbiAqIGBuZXcgVmVjdG9yVGlsZVdvcmtlclNvdXJjZShhY3Rvciwgc3R5bGVMYXllcnMsIGN1c3RvbUxvYWRWZWN0b3JEYXRhRnVuY3Rpb24pYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBWZWN0b3JUaWxlV29ya2VyU291cmNlIGltcGxlbWVudHMgV29ya2VyU291cmNlIHtcbiAgICBhY3RvcjogQWN0b3I7XG4gICAgbGF5ZXJJbmRleDogU3R5bGVMYXllckluZGV4O1xuICAgIGF2YWlsYWJsZUltYWdlczogQXJyYXk8c3RyaW5nPjtcbiAgICBsb2FkVmVjdG9yRGF0YTogTG9hZFZlY3RvckRhdGE7XG4gICAgbG9hZGluZzoge1tfOiBzdHJpbmddOiBXb3JrZXJUaWxlIH07XG4gICAgbG9hZGVkOiB7W186IHN0cmluZ106IFdvcmtlclRpbGUgfTtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBbbG9hZFZlY3RvckRhdGFdIE9wdGlvbmFsIG1ldGhvZCBmb3IgY3VzdG9tIGxvYWRpbmcgb2YgYSBWZWN0b3JUaWxlXG4gICAgICogb2JqZWN0IGJhc2VkIG9uIHBhcmFtZXRlcnMgcGFzc2VkIGZyb20gdGhlIG1haW4tdGhyZWFkIFNvdXJjZS4gU2VlXG4gICAgICoge0BsaW5rIFZlY3RvclRpbGVXb3JrZXJTb3VyY2UjbG9hZFRpbGV9LiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBzaW1wbHlcbiAgICAgKiBsb2FkcyB0aGUgcGJmIGF0IGBwYXJhbXMudXJsYC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGFjdG9yOiBBY3RvciwgbGF5ZXJJbmRleDogU3R5bGVMYXllckluZGV4LCBhdmFpbGFibGVJbWFnZXM6IEFycmF5PHN0cmluZz4sIGxvYWRWZWN0b3JEYXRhOiA/TG9hZFZlY3RvckRhdGEpIHtcbiAgICAgICAgdGhpcy5hY3RvciA9IGFjdG9yO1xuICAgICAgICB0aGlzLmxheWVySW5kZXggPSBsYXllckluZGV4O1xuICAgICAgICB0aGlzLmF2YWlsYWJsZUltYWdlcyA9IGF2YWlsYWJsZUltYWdlcztcbiAgICAgICAgdGhpcy5sb2FkVmVjdG9yRGF0YSA9IGxvYWRWZWN0b3JEYXRhIHx8IGxvYWRWZWN0b3JUaWxlO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSB7fTtcbiAgICAgICAgdGhpcy5sb2FkZWQgPSB7fTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbXBsZW1lbnRzIHtAbGluayBXb3JrZXJTb3VyY2UjbG9hZFRpbGV9LiBEZWxlZ2F0ZXMgdG9cbiAgICAgKiB7QGxpbmsgVmVjdG9yVGlsZVdvcmtlclNvdXJjZSNsb2FkVmVjdG9yRGF0YX0gKHdoaWNoIGJ5IGRlZmF1bHQgZXhwZWN0c1xuICAgICAqIGEgYHBhcmFtcy51cmxgIHByb3BlcnR5KSBmb3IgZmV0Y2hpbmcgYW5kIHByb2R1Y2luZyBhIFZlY3RvclRpbGUgb2JqZWN0LlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgbG9hZFRpbGUocGFyYW1zOiBXb3JrZXJUaWxlUGFyYW1ldGVycywgY2FsbGJhY2s6IFdvcmtlclRpbGVDYWxsYmFjaykge1xuICAgICAgICBjb25zdCB1aWQgPSBwYXJhbXMudWlkO1xuXG4gICAgICAgIGlmICghdGhpcy5sb2FkaW5nKVxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0ge307XG5cbiAgICAgICAgY29uc3QgcGVyZiA9IChwYXJhbXMgJiYgcGFyYW1zLnJlcXVlc3QgJiYgcGFyYW1zLnJlcXVlc3QuY29sbGVjdFJlc291cmNlVGltaW5nKSA/XG4gICAgICAgICAgICBuZXcgUmVxdWVzdFBlcmZvcm1hbmNlKHBhcmFtcy5yZXF1ZXN0KSA6IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHdvcmtlclRpbGUgPSB0aGlzLmxvYWRpbmdbdWlkXSA9IG5ldyBXb3JrZXJUaWxlKHBhcmFtcyk7XG4gICAgICAgIHdvcmtlclRpbGUuYWJvcnQgPSB0aGlzLmxvYWRWZWN0b3JEYXRhKHBhcmFtcywgKGVyciwgcmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmxvYWRpbmdbdWlkXTtcblxuICAgICAgICAgICAgaWYgKGVyciB8fCAhcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICB3b3JrZXJUaWxlLnN0YXR1cyA9ICdkb25lJztcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRlZFt1aWRdID0gd29ya2VyVGlsZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmF3VGlsZURhdGEgPSByZXNwb25zZS5yYXdEYXRhO1xuICAgICAgICAgICAgY29uc3QgY2FjaGVDb250cm9sID0ge307XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuZXhwaXJlcykgY2FjaGVDb250cm9sLmV4cGlyZXMgPSByZXNwb25zZS5leHBpcmVzO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmNhY2hlQ29udHJvbCkgY2FjaGVDb250cm9sLmNhY2hlQ29udHJvbCA9IHJlc3BvbnNlLmNhY2hlQ29udHJvbDtcblxuICAgICAgICAgICAgY29uc3QgcmVzb3VyY2VUaW1pbmcgPSB7fTtcbiAgICAgICAgICAgIGlmIChwZXJmKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzb3VyY2VUaW1pbmdEYXRhID0gcGVyZi5maW5pc2goKTtcbiAgICAgICAgICAgICAgICAvLyBpdCdzIG5lY2Vzc2FyeSB0byBldmFsIHRoZSByZXN1bHQgb2YgZ2V0RW50cmllc0J5TmFtZSgpIGhlcmUgdmlhIHBhcnNlL3N0cmluZ2lmeVxuICAgICAgICAgICAgICAgIC8vIGxhdGUgZXZhbHVhdGlvbiBpbiB0aGUgbWFpbiB0aHJlYWQgY2F1c2VzIFR5cGVFcnJvcjogaWxsZWdhbCBpbnZvY2F0aW9uXG4gICAgICAgICAgICAgICAgaWYgKHJlc291cmNlVGltaW5nRGF0YSlcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VUaW1pbmcucmVzb3VyY2VUaW1pbmcgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHJlc291cmNlVGltaW5nRGF0YSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3b3JrZXJUaWxlLnZlY3RvclRpbGUgPSByZXNwb25zZS52ZWN0b3JUaWxlO1xuICAgICAgICAgICAgd29ya2VyVGlsZS5wYXJzZShyZXNwb25zZS52ZWN0b3JUaWxlLCB0aGlzLmxheWVySW5kZXgsIHRoaXMuYXZhaWxhYmxlSW1hZ2VzLCB0aGlzLmFjdG9yLCAoZXJyLCByZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyIHx8ICFyZXN1bHQpIHJldHVybiBjYWxsYmFjayhlcnIpO1xuXG4gICAgICAgICAgICAgICAgLy8gVHJhbnNmZXJyaW5nIGEgY29weSBvZiByYXdUaWxlRGF0YSBiZWNhdXNlIHRoZSB3b3JrZXIgbmVlZHMgdG8gcmV0YWluIGl0cyBjb3B5LlxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIGV4dGVuZCh7cmF3VGlsZURhdGE6IHJhd1RpbGVEYXRhLnNsaWNlKDApfSwgcmVzdWx0LCBjYWNoZUNvbnRyb2wsIHJlc291cmNlVGltaW5nKSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5sb2FkZWQgPSB0aGlzLmxvYWRlZCB8fCB7fTtcbiAgICAgICAgICAgIHRoaXMubG9hZGVkW3VpZF0gPSB3b3JrZXJUaWxlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbXBsZW1lbnRzIHtAbGluayBXb3JrZXJTb3VyY2UjcmVsb2FkVGlsZX0uXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICByZWxvYWRUaWxlKHBhcmFtczogV29ya2VyVGlsZVBhcmFtZXRlcnMsIGNhbGxiYWNrOiBXb3JrZXJUaWxlQ2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgbG9hZGVkID0gdGhpcy5sb2FkZWQsXG4gICAgICAgICAgICB1aWQgPSBwYXJhbXMudWlkLFxuICAgICAgICAgICAgdnRTb3VyY2UgPSB0aGlzO1xuICAgICAgICBpZiAobG9hZGVkICYmIGxvYWRlZFt1aWRdKSB7XG4gICAgICAgICAgICBjb25zdCB3b3JrZXJUaWxlID0gbG9hZGVkW3VpZF07XG4gICAgICAgICAgICB3b3JrZXJUaWxlLnNob3dDb2xsaXNpb25Cb3hlcyA9IHBhcmFtcy5zaG93Q29sbGlzaW9uQm94ZXM7XG5cbiAgICAgICAgICAgIGNvbnN0IGRvbmUgPSAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVsb2FkQ2FsbGJhY2sgPSB3b3JrZXJUaWxlLnJlbG9hZENhbGxiYWNrO1xuICAgICAgICAgICAgICAgIGlmIChyZWxvYWRDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgd29ya2VyVGlsZS5yZWxvYWRDYWxsYmFjaztcbiAgICAgICAgICAgICAgICAgICAgd29ya2VyVGlsZS5wYXJzZSh3b3JrZXJUaWxlLnZlY3RvclRpbGUsIHZ0U291cmNlLmxheWVySW5kZXgsIHRoaXMuYXZhaWxhYmxlSW1hZ2VzLCB2dFNvdXJjZS5hY3RvciwgcmVsb2FkQ2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIsIGRhdGEpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKHdvcmtlclRpbGUuc3RhdHVzID09PSAncGFyc2luZycpIHtcbiAgICAgICAgICAgICAgICB3b3JrZXJUaWxlLnJlbG9hZENhbGxiYWNrID0gZG9uZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAod29ya2VyVGlsZS5zdGF0dXMgPT09ICdkb25lJykge1xuICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlIHdhcyBubyB2ZWN0b3IgdGlsZSBkYXRhIG9uIHRoZSBpbml0aWFsIGxvYWQsIGRvbid0IHRyeSBhbmQgcmUtcGFyc2UgdGlsZVxuICAgICAgICAgICAgICAgIGlmICh3b3JrZXJUaWxlLnZlY3RvclRpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgd29ya2VyVGlsZS5wYXJzZSh3b3JrZXJUaWxlLnZlY3RvclRpbGUsIHRoaXMubGF5ZXJJbmRleCwgdGhpcy5hdmFpbGFibGVJbWFnZXMsIHRoaXMuYWN0b3IsIGRvbmUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbXBsZW1lbnRzIHtAbGluayBXb3JrZXJTb3VyY2UjYWJvcnRUaWxlfS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXJhbXNcbiAgICAgKiBAcGFyYW0gcGFyYW1zLnVpZCBUaGUgVUlEIGZvciB0aGlzIHRpbGUuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBhYm9ydFRpbGUocGFyYW1zOiBUaWxlUGFyYW1ldGVycywgY2FsbGJhY2s6IFdvcmtlclRpbGVDYWxsYmFjaykge1xuICAgICAgICBjb25zdCBsb2FkaW5nID0gdGhpcy5sb2FkaW5nLFxuICAgICAgICAgICAgdWlkID0gcGFyYW1zLnVpZDtcbiAgICAgICAgaWYgKGxvYWRpbmcgJiYgbG9hZGluZ1t1aWRdICYmIGxvYWRpbmdbdWlkXS5hYm9ydCkge1xuICAgICAgICAgICAgbG9hZGluZ1t1aWRdLmFib3J0KCk7XG4gICAgICAgICAgICBkZWxldGUgbG9hZGluZ1t1aWRdO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW1wbGVtZW50cyB7QGxpbmsgV29ya2VyU291cmNlI3JlbW92ZVRpbGV9LlxuICAgICAqXG4gICAgICogQHBhcmFtIHBhcmFtc1xuICAgICAqIEBwYXJhbSBwYXJhbXMudWlkIFRoZSBVSUQgZm9yIHRoaXMgdGlsZS5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHJlbW92ZVRpbGUocGFyYW1zOiBUaWxlUGFyYW1ldGVycywgY2FsbGJhY2s6IFdvcmtlclRpbGVDYWxsYmFjaykge1xuICAgICAgICBjb25zdCBsb2FkZWQgPSB0aGlzLmxvYWRlZCxcbiAgICAgICAgICAgIHVpZCA9IHBhcmFtcy51aWQ7XG4gICAgICAgIGlmIChsb2FkZWQgJiYgbG9hZGVkW3VpZF0pIHtcbiAgICAgICAgICAgIGRlbGV0ZSBsb2FkZWRbdWlkXTtcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjaygpO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVmVjdG9yVGlsZVdvcmtlclNvdXJjZTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBERU1EYXRhIGZyb20gJy4uL2RhdGEvZGVtX2RhdGEnO1xuaW1wb3J0IHtSR0JBSW1hZ2V9IGZyb20gJy4uL3V0aWwvaW1hZ2UnO1xuaW1wb3J0IHdpbmRvdyBmcm9tICcuLi91dGlsL3dpbmRvdyc7XG5cbmltcG9ydCB0eXBlIEFjdG9yIGZyb20gJy4uL3V0aWwvYWN0b3InO1xuaW1wb3J0IHR5cGUge1xuICAgIFdvcmtlckRFTVRpbGVQYXJhbWV0ZXJzLFxuICAgIFdvcmtlckRFTVRpbGVDYWxsYmFjayxcbiAgICBUaWxlUGFyYW1ldGVyc1xufSBmcm9tICcuL3dvcmtlcl9zb3VyY2UnO1xuY29uc3Qge0ltYWdlQml0bWFwfSA9IHdpbmRvdztcblxuY2xhc3MgUmFzdGVyREVNVGlsZVdvcmtlclNvdXJjZSB7XG4gICAgYWN0b3I6IEFjdG9yO1xuICAgIGxvYWRlZDoge1tfOiBzdHJpbmddOiBERU1EYXRhfTtcbiAgICBvZmZzY3JlZW5DYW52YXM6IE9mZnNjcmVlbkNhbnZhcztcbiAgICBvZmZzY3JlZW5DYW52YXNDb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5sb2FkZWQgPSB7fTtcbiAgICB9XG5cbiAgICBsb2FkVGlsZShwYXJhbXM6IFdvcmtlckRFTVRpbGVQYXJhbWV0ZXJzLCBjYWxsYmFjazogV29ya2VyREVNVGlsZUNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IHt1aWQsIGVuY29kaW5nLCByYXdJbWFnZURhdGF9ID0gcGFyYW1zO1xuICAgICAgICAvLyBNYWluIHRocmVhZCB3aWxsIHRyYW5zZmVyIEltYWdlQml0bWFwIGlmIG9mZnNjcmVlbiBkZWNvZGUgd2l0aCBPZmZzY3JlZW5DYW52YXMgaXMgc3VwcG9ydGVkLCBlbHNlIGl0IHdpbGwgdHJhbnNmZXIgYW4gYWxyZWFkeSBkZWNvZGVkIGltYWdlLlxuICAgICAgICBjb25zdCBpbWFnZVBpeGVscyA9IChJbWFnZUJpdG1hcCAmJiByYXdJbWFnZURhdGEgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCkgPyB0aGlzLmdldEltYWdlRGF0YShyYXdJbWFnZURhdGEpIDogcmF3SW1hZ2VEYXRhO1xuICAgICAgICBjb25zdCBkZW0gPSBuZXcgREVNRGF0YSh1aWQsIGltYWdlUGl4ZWxzLCBlbmNvZGluZyk7XG4gICAgICAgIHRoaXMubG9hZGVkID0gdGhpcy5sb2FkZWQgfHwge307XG4gICAgICAgIHRoaXMubG9hZGVkW3VpZF0gPSBkZW07XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIGRlbSk7XG4gICAgfVxuXG4gICAgZ2V0SW1hZ2VEYXRhKGltZ0JpdG1hcDogSW1hZ2VCaXRtYXApOiBSR0JBSW1hZ2Uge1xuICAgICAgICAvLyBMYXppbHkgaW5pdGlhbGl6ZSBPZmZzY3JlZW5DYW52YXNcbiAgICAgICAgaWYgKCF0aGlzLm9mZnNjcmVlbkNhbnZhcyB8fCAhdGhpcy5vZmZzY3JlZW5DYW52YXNDb250ZXh0KSB7XG4gICAgICAgICAgICAvLyBEZW0gdGlsZXMgYXJlIHR5cGljYWxseSAyNTZ4MjU2XG4gICAgICAgICAgICB0aGlzLm9mZnNjcmVlbkNhbnZhcyA9IG5ldyBPZmZzY3JlZW5DYW52YXMoaW1nQml0bWFwLndpZHRoLCBpbWdCaXRtYXAuaGVpZ2h0KTtcbiAgICAgICAgICAgIHRoaXMub2Zmc2NyZWVuQ2FudmFzQ29udGV4dCA9IHRoaXMub2Zmc2NyZWVuQ2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9mZnNjcmVlbkNhbnZhcy53aWR0aCA9IGltZ0JpdG1hcC53aWR0aDtcbiAgICAgICAgdGhpcy5vZmZzY3JlZW5DYW52YXMuaGVpZ2h0ID0gaW1nQml0bWFwLmhlaWdodDtcblxuICAgICAgICB0aGlzLm9mZnNjcmVlbkNhbnZhc0NvbnRleHQuZHJhd0ltYWdlKGltZ0JpdG1hcCwgMCwgMCwgaW1nQml0bWFwLndpZHRoLCBpbWdCaXRtYXAuaGVpZ2h0KTtcbiAgICAgICAgLy8gSW5zZXJ0IGFuIGFkZGl0aW9uYWwgMXB4IHBhZGRpbmcgYXJvdW5kIHRoZSBpbWFnZSB0byBhbGxvdyBiYWNrZmlsbGluZyBmb3IgbmVpZ2hib3JpbmcgZGF0YS5cbiAgICAgICAgY29uc3QgaW1nRGF0YSA9IHRoaXMub2Zmc2NyZWVuQ2FudmFzQ29udGV4dC5nZXRJbWFnZURhdGEoLTEsIC0xLCBpbWdCaXRtYXAud2lkdGggKyAyLCBpbWdCaXRtYXAuaGVpZ2h0ICsgMik7XG4gICAgICAgIHRoaXMub2Zmc2NyZWVuQ2FudmFzQ29udGV4dC5jbGVhclJlY3QoMCwgMCwgdGhpcy5vZmZzY3JlZW5DYW52YXMud2lkdGgsIHRoaXMub2Zmc2NyZWVuQ2FudmFzLmhlaWdodCk7XG4gICAgICAgIHJldHVybiBuZXcgUkdCQUltYWdlKHt3aWR0aDogaW1nRGF0YS53aWR0aCwgaGVpZ2h0OiBpbWdEYXRhLmhlaWdodH0sIGltZ0RhdGEuZGF0YSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlVGlsZShwYXJhbXM6IFRpbGVQYXJhbWV0ZXJzKSB7XG4gICAgICAgIGNvbnN0IGxvYWRlZCA9IHRoaXMubG9hZGVkLFxuICAgICAgICAgICAgdWlkID0gcGFyYW1zLnVpZDtcbiAgICAgICAgaWYgKGxvYWRlZCAmJiBsb2FkZWRbdWlkXSkge1xuICAgICAgICAgICAgZGVsZXRlIGxvYWRlZFt1aWRdO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBSYXN0ZXJERU1UaWxlV29ya2VyU291cmNlO1xuIiwiXG5tb2R1bGUuZXhwb3J0cyA9IHJld2luZDtcblxuZnVuY3Rpb24gcmV3aW5kKGdqLCBvdXRlcikge1xuICAgIHZhciB0eXBlID0gZ2ogJiYgZ2oudHlwZSwgaTtcblxuICAgIGlmICh0eXBlID09PSAnRmVhdHVyZUNvbGxlY3Rpb24nKSB7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBnai5mZWF0dXJlcy5sZW5ndGg7IGkrKykgcmV3aW5kKGdqLmZlYXR1cmVzW2ldLCBvdXRlcik7XG5cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdHZW9tZXRyeUNvbGxlY3Rpb24nKSB7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBnai5nZW9tZXRyaWVzLmxlbmd0aDsgaSsrKSByZXdpbmQoZ2ouZ2VvbWV0cmllc1tpXSwgb3V0ZXIpO1xuXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnRmVhdHVyZScpIHtcbiAgICAgICAgcmV3aW5kKGdqLmdlb21ldHJ5LCBvdXRlcik7XG5cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdQb2x5Z29uJykge1xuICAgICAgICByZXdpbmRSaW5ncyhnai5jb29yZGluYXRlcywgb3V0ZXIpO1xuXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnTXVsdGlQb2x5Z29uJykge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZ2ouY29vcmRpbmF0ZXMubGVuZ3RoOyBpKyspIHJld2luZFJpbmdzKGdqLmNvb3JkaW5hdGVzW2ldLCBvdXRlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdqO1xufVxuXG5mdW5jdGlvbiByZXdpbmRSaW5ncyhyaW5ncywgb3V0ZXIpIHtcbiAgICBpZiAocmluZ3MubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICByZXdpbmRSaW5nKHJpbmdzWzBdLCBvdXRlcik7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCByaW5ncy5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXdpbmRSaW5nKHJpbmdzW2ldLCAhb3V0ZXIpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcmV3aW5kUmluZyhyaW5nLCBkaXIpIHtcbiAgICB2YXIgYXJlYSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHJpbmcubGVuZ3RoLCBqID0gbGVuIC0gMTsgaSA8IGxlbjsgaiA9IGkrKykge1xuICAgICAgICBhcmVhICs9IChyaW5nW2ldWzBdIC0gcmluZ1tqXVswXSkgKiAocmluZ1tqXVsxXSArIHJpbmdbaV1bMV0pO1xuICAgIH1cbiAgICBpZiAoYXJlYSA+PSAwICE9PSAhIWRpcikgcmluZy5yZXZlcnNlKCk7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbmltcG9ydCBtdnQgZnJvbSAnQG1hcGJveC92ZWN0b3ItdGlsZSc7XG5jb25zdCB0b0dlb0pTT04gPSBtdnQuVmVjdG9yVGlsZUZlYXR1cmUucHJvdG90eXBlLnRvR2VvSlNPTjtcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi4vZGF0YS9leHRlbnQnO1xuXG4vLyBUaGUgZmVhdHVyZSB0eXBlIHVzZWQgYnkgZ2VvanNvbi12dCBhbmQgc3VwZXJjbHVzdGVyLiBTaG91bGQgYmUgZXh0cmFjdGVkIHRvXG4vLyBnbG9iYWwgdHlwZSBhbmQgdXNlZCBpbiBtb2R1bGUgZGVmaW5pdGlvbnMgZm9yIHRob3NlIHR3byBtb2R1bGVzLlxudHlwZSBGZWF0dXJlID0ge1xuICAgIHR5cGU6IDEsXG4gICAgaWQ6IG1peGVkLFxuICAgIHRhZ3M6IHtbXzogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbn0sXG4gICAgZ2VvbWV0cnk6IEFycmF5PFtudW1iZXIsIG51bWJlcl0+LFxufSB8IHtcbiAgICB0eXBlOiAyIHwgMyxcbiAgICBpZDogbWl4ZWQsXG4gICAgdGFnczoge1tfOiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFufSxcbiAgICBnZW9tZXRyeTogQXJyYXk8QXJyYXk8W251bWJlciwgbnVtYmVyXT4+LFxufVxuXG5jbGFzcyBGZWF0dXJlV3JhcHBlciBpbXBsZW1lbnRzIFZlY3RvclRpbGVGZWF0dXJlIHtcbiAgICBfZmVhdHVyZTogRmVhdHVyZTtcblxuICAgIGV4dGVudDogbnVtYmVyO1xuICAgIHR5cGU6IDEgfCAyIHwgMztcbiAgICBpZDogbnVtYmVyO1xuICAgIHByb3BlcnRpZXM6IHtbXzogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbn07XG5cbiAgICBjb25zdHJ1Y3RvcihmZWF0dXJlOiBGZWF0dXJlKSB7XG4gICAgICAgIHRoaXMuX2ZlYXR1cmUgPSBmZWF0dXJlO1xuXG4gICAgICAgIHRoaXMuZXh0ZW50ID0gRVhURU5UO1xuICAgICAgICB0aGlzLnR5cGUgPSBmZWF0dXJlLnR5cGU7XG4gICAgICAgIHRoaXMucHJvcGVydGllcyA9IGZlYXR1cmUudGFncztcblxuICAgICAgICAvLyBJZiB0aGUgZmVhdHVyZSBoYXMgYSB0b3AtbGV2ZWwgYGlkYCBwcm9wZXJ0eSwgY29weSBpdCBvdmVyLCBidXQgb25seVxuICAgICAgICAvLyBpZiBpdCBjYW4gYmUgY29lcmNlZCB0byBhbiBpbnRlZ2VyLCBiZWNhdXNlIHRoaXMgd3JhcHBlciBpcyB1c2VkIGZvclxuICAgICAgICAvLyBzZXJpYWxpemluZyBnZW9qc29uIGZlYXR1cmUgZGF0YSBpbnRvIHZlY3RvciB0aWxlIFBCRiBkYXRhLCBhbmQgdGhlXG4gICAgICAgIC8vIHZlY3RvciB0aWxlIHNwZWMgb25seSBzdXBwb3J0cyBpbnRlZ2VyIHZhbHVlcyBmb3IgZmVhdHVyZSBpZHMgLS1cbiAgICAgICAgLy8gYWxsb3dpbmcgbm9uLWludGVnZXIgdmFsdWVzIGhlcmUgcmVzdWx0cyBpbiBhIG5vbi1jb21wbGlhbnQgUEJGXG4gICAgICAgIC8vIHRoYXQgY2F1c2VzIGFuIGV4Y2VwdGlvbiB3aGVuIGl0IGlzIHBhcnNlZCB3aXRoIHZlY3Rvci10aWxlLWpzXG4gICAgICAgIGlmICgnaWQnIGluIGZlYXR1cmUgJiYgIWlzTmFOKGZlYXR1cmUuaWQpKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gcGFyc2VJbnQoZmVhdHVyZS5pZCwgMTApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbG9hZEdlb21ldHJ5KCkge1xuICAgICAgICBpZiAodGhpcy5fZmVhdHVyZS50eXBlID09PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBnZW9tZXRyeSA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBwb2ludCBvZiB0aGlzLl9mZWF0dXJlLmdlb21ldHJ5KSB7XG4gICAgICAgICAgICAgICAgZ2VvbWV0cnkucHVzaChbbmV3IFBvaW50KHBvaW50WzBdLCBwb2ludFsxXSldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBnZW9tZXRyeTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGdlb21ldHJ5ID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJpbmcgb2YgdGhpcy5fZmVhdHVyZS5nZW9tZXRyeSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1JpbmcgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBvaW50IG9mIHJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3UmluZy5wdXNoKG5ldyBQb2ludChwb2ludFswXSwgcG9pbnRbMV0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZ2VvbWV0cnkucHVzaChuZXdSaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBnZW9tZXRyeTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRvR2VvSlNPTih4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0b0dlb0pTT04uY2FsbCh0aGlzLCB4LCB5LCB6KTtcbiAgICB9XG59XG5cbmNsYXNzIEdlb0pTT05XcmFwcGVyIGltcGxlbWVudHMgVmVjdG9yVGlsZSwgVmVjdG9yVGlsZUxheWVyIHtcbiAgICBsYXllcnM6IHtbXzogc3RyaW5nXTogVmVjdG9yVGlsZUxheWVyfTtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZXh0ZW50OiBudW1iZXI7XG4gICAgbGVuZ3RoOiBudW1iZXI7XG4gICAgX2ZlYXR1cmVzOiBBcnJheTxGZWF0dXJlPjtcblxuICAgIGNvbnN0cnVjdG9yKGZlYXR1cmVzOiBBcnJheTxGZWF0dXJlPikge1xuICAgICAgICB0aGlzLmxheWVycyA9IHsnX2dlb2pzb25UaWxlTGF5ZXInOiB0aGlzfTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ19nZW9qc29uVGlsZUxheWVyJztcbiAgICAgICAgdGhpcy5leHRlbnQgPSBFWFRFTlQ7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gZmVhdHVyZXMubGVuZ3RoO1xuICAgICAgICB0aGlzLl9mZWF0dXJlcyA9IGZlYXR1cmVzO1xuICAgIH1cblxuICAgIGZlYXR1cmUoaTogbnVtYmVyKTogVmVjdG9yVGlsZUZlYXR1cmUge1xuICAgICAgICByZXR1cm4gbmV3IEZlYXR1cmVXcmFwcGVyKHRoaXMuX2ZlYXR1cmVzW2ldKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEdlb0pTT05XcmFwcGVyO1xuIiwiJ3VzZSBzdHJpY3QnXG5cbnZhciBQb2ludCA9IHJlcXVpcmUoJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknKVxudmFyIFZlY3RvclRpbGVGZWF0dXJlID0gcmVxdWlyZSgnQG1hcGJveC92ZWN0b3ItdGlsZScpLlZlY3RvclRpbGVGZWF0dXJlXG5cbm1vZHVsZS5leHBvcnRzID0gR2VvSlNPTldyYXBwZXJcblxuLy8gY29uZm9ybSB0byB2ZWN0b3J0aWxlIGFwaVxuZnVuY3Rpb24gR2VvSlNPTldyYXBwZXIgKGZlYXR1cmVzLCBvcHRpb25zKSB7XG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge31cbiAgdGhpcy5mZWF0dXJlcyA9IGZlYXR1cmVzXG4gIHRoaXMubGVuZ3RoID0gZmVhdHVyZXMubGVuZ3RoXG59XG5cbkdlb0pTT05XcmFwcGVyLnByb3RvdHlwZS5mZWF0dXJlID0gZnVuY3Rpb24gKGkpIHtcbiAgcmV0dXJuIG5ldyBGZWF0dXJlV3JhcHBlcih0aGlzLmZlYXR1cmVzW2ldLCB0aGlzLm9wdGlvbnMuZXh0ZW50KVxufVxuXG5mdW5jdGlvbiBGZWF0dXJlV3JhcHBlciAoZmVhdHVyZSwgZXh0ZW50KSB7XG4gIHRoaXMuaWQgPSB0eXBlb2YgZmVhdHVyZS5pZCA9PT0gJ251bWJlcicgPyBmZWF0dXJlLmlkIDogdW5kZWZpbmVkXG4gIHRoaXMudHlwZSA9IGZlYXR1cmUudHlwZVxuICB0aGlzLnJhd0dlb21ldHJ5ID0gZmVhdHVyZS50eXBlID09PSAxID8gW2ZlYXR1cmUuZ2VvbWV0cnldIDogZmVhdHVyZS5nZW9tZXRyeVxuICB0aGlzLnByb3BlcnRpZXMgPSBmZWF0dXJlLnRhZ3NcbiAgdGhpcy5leHRlbnQgPSBleHRlbnQgfHwgNDA5NlxufVxuXG5GZWF0dXJlV3JhcHBlci5wcm90b3R5cGUubG9hZEdlb21ldHJ5ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgcmluZ3MgPSB0aGlzLnJhd0dlb21ldHJ5XG4gIHRoaXMuZ2VvbWV0cnkgPSBbXVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmluZ3MubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcmluZyA9IHJpbmdzW2ldXG4gICAgdmFyIG5ld1JpbmcgPSBbXVxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgcmluZy5sZW5ndGg7IGorKykge1xuICAgICAgbmV3UmluZy5wdXNoKG5ldyBQb2ludChyaW5nW2pdWzBdLCByaW5nW2pdWzFdKSlcbiAgICB9XG4gICAgdGhpcy5nZW9tZXRyeS5wdXNoKG5ld1JpbmcpXG4gIH1cbiAgcmV0dXJuIHRoaXMuZ2VvbWV0cnlcbn1cblxuRmVhdHVyZVdyYXBwZXIucHJvdG90eXBlLmJib3ggPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghdGhpcy5nZW9tZXRyeSkgdGhpcy5sb2FkR2VvbWV0cnkoKVxuXG4gIHZhciByaW5ncyA9IHRoaXMuZ2VvbWV0cnlcbiAgdmFyIHgxID0gSW5maW5pdHlcbiAgdmFyIHgyID0gLUluZmluaXR5XG4gIHZhciB5MSA9IEluZmluaXR5XG4gIHZhciB5MiA9IC1JbmZpbml0eVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmluZ3MubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcmluZyA9IHJpbmdzW2ldXG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHJpbmcubGVuZ3RoOyBqKyspIHtcbiAgICAgIHZhciBjb29yZCA9IHJpbmdbal1cblxuICAgICAgeDEgPSBNYXRoLm1pbih4MSwgY29vcmQueClcbiAgICAgIHgyID0gTWF0aC5tYXgoeDIsIGNvb3JkLngpXG4gICAgICB5MSA9IE1hdGgubWluKHkxLCBjb29yZC55KVxuICAgICAgeTIgPSBNYXRoLm1heCh5MiwgY29vcmQueSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gW3gxLCB5MSwgeDIsIHkyXVxufVxuXG5GZWF0dXJlV3JhcHBlci5wcm90b3R5cGUudG9HZW9KU09OID0gVmVjdG9yVGlsZUZlYXR1cmUucHJvdG90eXBlLnRvR2VvSlNPTlxuIiwidmFyIFBiZiA9IHJlcXVpcmUoJ3BiZicpXG52YXIgR2VvSlNPTldyYXBwZXIgPSByZXF1aXJlKCcuL2xpYi9nZW9qc29uX3dyYXBwZXInKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZyb21WZWN0b3JUaWxlSnNcbm1vZHVsZS5leHBvcnRzLmZyb21WZWN0b3JUaWxlSnMgPSBmcm9tVmVjdG9yVGlsZUpzXG5tb2R1bGUuZXhwb3J0cy5mcm9tR2VvanNvblZ0ID0gZnJvbUdlb2pzb25WdFxubW9kdWxlLmV4cG9ydHMuR2VvSlNPTldyYXBwZXIgPSBHZW9KU09OV3JhcHBlclxuXG4vKipcbiAqIFNlcmlhbGl6ZSBhIHZlY3Rvci10aWxlLWpzLWNyZWF0ZWQgdGlsZSB0byBwYmZcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdGlsZVxuICogQHJldHVybiB7QnVmZmVyfSB1bmNvbXByZXNzZWQsIHBiZi1zZXJpYWxpemVkIHRpbGUgZGF0YVxuICovXG5mdW5jdGlvbiBmcm9tVmVjdG9yVGlsZUpzICh0aWxlKSB7XG4gIHZhciBvdXQgPSBuZXcgUGJmKClcbiAgd3JpdGVUaWxlKHRpbGUsIG91dClcbiAgcmV0dXJuIG91dC5maW5pc2goKVxufVxuXG4vKipcbiAqIFNlcmlhbGl6ZWQgYSBnZW9qc29uLXZ0LWNyZWF0ZWQgdGlsZSB0byBwYmYuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGxheWVycyAtIEFuIG9iamVjdCBtYXBwaW5nIGxheWVyIG5hbWVzIHRvIGdlb2pzb24tdnQtY3JlYXRlZCB2ZWN0b3IgdGlsZSBvYmplY3RzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIC0gQW4gb2JqZWN0IHNwZWNpZnlpbmcgdGhlIHZlY3Rvci10aWxlIHNwZWNpZmljYXRpb24gdmVyc2lvbiBhbmQgZXh0ZW50IHRoYXQgd2VyZSB1c2VkIHRvIGNyZWF0ZSBgbGF5ZXJzYC5cbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy52ZXJzaW9uPTFdIC0gVmVyc2lvbiBvZiB2ZWN0b3ItdGlsZSBzcGVjIHVzZWRcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5leHRlbnQ9NDA5Nl0gLSBFeHRlbnQgb2YgdGhlIHZlY3RvciB0aWxlXG4gKiBAcmV0dXJuIHtCdWZmZXJ9IHVuY29tcHJlc3NlZCwgcGJmLXNlcmlhbGl6ZWQgdGlsZSBkYXRhXG4gKi9cbmZ1bmN0aW9uIGZyb21HZW9qc29uVnQgKGxheWVycywgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuICB2YXIgbCA9IHt9XG4gIGZvciAodmFyIGsgaW4gbGF5ZXJzKSB7XG4gICAgbFtrXSA9IG5ldyBHZW9KU09OV3JhcHBlcihsYXllcnNba10uZmVhdHVyZXMsIG9wdGlvbnMpXG4gICAgbFtrXS5uYW1lID0ga1xuICAgIGxba10udmVyc2lvbiA9IG9wdGlvbnMudmVyc2lvblxuICAgIGxba10uZXh0ZW50ID0gb3B0aW9ucy5leHRlbnRcbiAgfVxuICByZXR1cm4gZnJvbVZlY3RvclRpbGVKcyh7bGF5ZXJzOiBsfSlcbn1cblxuZnVuY3Rpb24gd3JpdGVUaWxlICh0aWxlLCBwYmYpIHtcbiAgZm9yICh2YXIga2V5IGluIHRpbGUubGF5ZXJzKSB7XG4gICAgcGJmLndyaXRlTWVzc2FnZSgzLCB3cml0ZUxheWVyLCB0aWxlLmxheWVyc1trZXldKVxuICB9XG59XG5cbmZ1bmN0aW9uIHdyaXRlTGF5ZXIgKGxheWVyLCBwYmYpIHtcbiAgcGJmLndyaXRlVmFyaW50RmllbGQoMTUsIGxheWVyLnZlcnNpb24gfHwgMSlcbiAgcGJmLndyaXRlU3RyaW5nRmllbGQoMSwgbGF5ZXIubmFtZSB8fCAnJylcbiAgcGJmLndyaXRlVmFyaW50RmllbGQoNSwgbGF5ZXIuZXh0ZW50IHx8IDQwOTYpXG5cbiAgdmFyIGlcbiAgdmFyIGNvbnRleHQgPSB7XG4gICAga2V5czogW10sXG4gICAgdmFsdWVzOiBbXSxcbiAgICBrZXljYWNoZToge30sXG4gICAgdmFsdWVjYWNoZToge31cbiAgfVxuXG4gIGZvciAoaSA9IDA7IGkgPCBsYXllci5sZW5ndGg7IGkrKykge1xuICAgIGNvbnRleHQuZmVhdHVyZSA9IGxheWVyLmZlYXR1cmUoaSlcbiAgICBwYmYud3JpdGVNZXNzYWdlKDIsIHdyaXRlRmVhdHVyZSwgY29udGV4dClcbiAgfVxuXG4gIHZhciBrZXlzID0gY29udGV4dC5rZXlzXG4gIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgcGJmLndyaXRlU3RyaW5nRmllbGQoMywga2V5c1tpXSlcbiAgfVxuXG4gIHZhciB2YWx1ZXMgPSBjb250ZXh0LnZhbHVlc1xuICBmb3IgKGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgcGJmLndyaXRlTWVzc2FnZSg0LCB3cml0ZVZhbHVlLCB2YWx1ZXNbaV0pXG4gIH1cbn1cblxuZnVuY3Rpb24gd3JpdGVGZWF0dXJlIChjb250ZXh0LCBwYmYpIHtcbiAgdmFyIGZlYXR1cmUgPSBjb250ZXh0LmZlYXR1cmVcblxuICBpZiAoZmVhdHVyZS5pZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcGJmLndyaXRlVmFyaW50RmllbGQoMSwgZmVhdHVyZS5pZClcbiAgfVxuXG4gIHBiZi53cml0ZU1lc3NhZ2UoMiwgd3JpdGVQcm9wZXJ0aWVzLCBjb250ZXh0KVxuICBwYmYud3JpdGVWYXJpbnRGaWVsZCgzLCBmZWF0dXJlLnR5cGUpXG4gIHBiZi53cml0ZU1lc3NhZ2UoNCwgd3JpdGVHZW9tZXRyeSwgZmVhdHVyZSlcbn1cblxuZnVuY3Rpb24gd3JpdGVQcm9wZXJ0aWVzIChjb250ZXh0LCBwYmYpIHtcbiAgdmFyIGZlYXR1cmUgPSBjb250ZXh0LmZlYXR1cmVcbiAgdmFyIGtleXMgPSBjb250ZXh0LmtleXNcbiAgdmFyIHZhbHVlcyA9IGNvbnRleHQudmFsdWVzXG4gIHZhciBrZXljYWNoZSA9IGNvbnRleHQua2V5Y2FjaGVcbiAgdmFyIHZhbHVlY2FjaGUgPSBjb250ZXh0LnZhbHVlY2FjaGVcblxuICBmb3IgKHZhciBrZXkgaW4gZmVhdHVyZS5wcm9wZXJ0aWVzKSB7XG4gICAgdmFyIGtleUluZGV4ID0ga2V5Y2FjaGVba2V5XVxuICAgIGlmICh0eXBlb2Yga2V5SW5kZXggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBrZXlzLnB1c2goa2V5KVxuICAgICAga2V5SW5kZXggPSBrZXlzLmxlbmd0aCAtIDFcbiAgICAgIGtleWNhY2hlW2tleV0gPSBrZXlJbmRleFxuICAgIH1cbiAgICBwYmYud3JpdGVWYXJpbnQoa2V5SW5kZXgpXG5cbiAgICB2YXIgdmFsdWUgPSBmZWF0dXJlLnByb3BlcnRpZXNba2V5XVxuICAgIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlXG4gICAgaWYgKHR5cGUgIT09ICdzdHJpbmcnICYmIHR5cGUgIT09ICdib29sZWFuJyAmJiB0eXBlICE9PSAnbnVtYmVyJykge1xuICAgICAgdmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSlcbiAgICB9XG4gICAgdmFyIHZhbHVlS2V5ID0gdHlwZSArICc6JyArIHZhbHVlXG4gICAgdmFyIHZhbHVlSW5kZXggPSB2YWx1ZWNhY2hlW3ZhbHVlS2V5XVxuICAgIGlmICh0eXBlb2YgdmFsdWVJbmRleCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKVxuICAgICAgdmFsdWVJbmRleCA9IHZhbHVlcy5sZW5ndGggLSAxXG4gICAgICB2YWx1ZWNhY2hlW3ZhbHVlS2V5XSA9IHZhbHVlSW5kZXhcbiAgICB9XG4gICAgcGJmLndyaXRlVmFyaW50KHZhbHVlSW5kZXgpXG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWFuZCAoY21kLCBsZW5ndGgpIHtcbiAgcmV0dXJuIChsZW5ndGggPDwgMykgKyAoY21kICYgMHg3KVxufVxuXG5mdW5jdGlvbiB6aWd6YWcgKG51bSkge1xuICByZXR1cm4gKG51bSA8PCAxKSBeIChudW0gPj4gMzEpXG59XG5cbmZ1bmN0aW9uIHdyaXRlR2VvbWV0cnkgKGZlYXR1cmUsIHBiZikge1xuICB2YXIgZ2VvbWV0cnkgPSBmZWF0dXJlLmxvYWRHZW9tZXRyeSgpXG4gIHZhciB0eXBlID0gZmVhdHVyZS50eXBlXG4gIHZhciB4ID0gMFxuICB2YXIgeSA9IDBcbiAgdmFyIHJpbmdzID0gZ2VvbWV0cnkubGVuZ3RoXG4gIGZvciAodmFyIHIgPSAwOyByIDwgcmluZ3M7IHIrKykge1xuICAgIHZhciByaW5nID0gZ2VvbWV0cnlbcl1cbiAgICB2YXIgY291bnQgPSAxXG4gICAgaWYgKHR5cGUgPT09IDEpIHtcbiAgICAgIGNvdW50ID0gcmluZy5sZW5ndGhcbiAgICB9XG4gICAgcGJmLndyaXRlVmFyaW50KGNvbW1hbmQoMSwgY291bnQpKSAvLyBtb3ZldG9cbiAgICAvLyBkbyBub3Qgd3JpdGUgcG9seWdvbiBjbG9zaW5nIHBhdGggYXMgbGluZXRvXG4gICAgdmFyIGxpbmVDb3VudCA9IHR5cGUgPT09IDMgPyByaW5nLmxlbmd0aCAtIDEgOiByaW5nLmxlbmd0aFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZUNvdW50OyBpKyspIHtcbiAgICAgIGlmIChpID09PSAxICYmIHR5cGUgIT09IDEpIHtcbiAgICAgICAgcGJmLndyaXRlVmFyaW50KGNvbW1hbmQoMiwgbGluZUNvdW50IC0gMSkpIC8vIGxpbmV0b1xuICAgICAgfVxuICAgICAgdmFyIGR4ID0gcmluZ1tpXS54IC0geFxuICAgICAgdmFyIGR5ID0gcmluZ1tpXS55IC0geVxuICAgICAgcGJmLndyaXRlVmFyaW50KHppZ3phZyhkeCkpXG4gICAgICBwYmYud3JpdGVWYXJpbnQoemlnemFnKGR5KSlcbiAgICAgIHggKz0gZHhcbiAgICAgIHkgKz0gZHlcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09IDMpIHtcbiAgICAgIHBiZi53cml0ZVZhcmludChjb21tYW5kKDcsIDEpKSAvLyBjbG9zZXBhdGhcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gd3JpdGVWYWx1ZSAodmFsdWUsIHBiZikge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZVxuICBpZiAodHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICBwYmYud3JpdGVTdHJpbmdGaWVsZCgxLCB2YWx1ZSlcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICBwYmYud3JpdGVCb29sZWFuRmllbGQoNywgdmFsdWUpXG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAodmFsdWUgJSAxICE9PSAwKSB7XG4gICAgICBwYmYud3JpdGVEb3VibGVGaWVsZCgzLCB2YWx1ZSlcbiAgICB9IGVsc2UgaWYgKHZhbHVlIDwgMCkge1xuICAgICAgcGJmLndyaXRlU1ZhcmludEZpZWxkKDYsIHZhbHVlKVxuICAgIH0gZWxzZSB7XG4gICAgICBwYmYud3JpdGVWYXJpbnRGaWVsZCg1LCB2YWx1ZSlcbiAgICB9XG4gIH1cbn1cbiIsIlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc29ydEtEKGlkcywgY29vcmRzLCBub2RlU2l6ZSwgbGVmdCwgcmlnaHQsIGRlcHRoKSB7XG4gICAgaWYgKHJpZ2h0IC0gbGVmdCA8PSBub2RlU2l6ZSkgcmV0dXJuO1xuXG4gICAgY29uc3QgbSA9IChsZWZ0ICsgcmlnaHQpID4+IDE7XG5cbiAgICBzZWxlY3QoaWRzLCBjb29yZHMsIG0sIGxlZnQsIHJpZ2h0LCBkZXB0aCAlIDIpO1xuXG4gICAgc29ydEtEKGlkcywgY29vcmRzLCBub2RlU2l6ZSwgbGVmdCwgbSAtIDEsIGRlcHRoICsgMSk7XG4gICAgc29ydEtEKGlkcywgY29vcmRzLCBub2RlU2l6ZSwgbSArIDEsIHJpZ2h0LCBkZXB0aCArIDEpO1xufVxuXG5mdW5jdGlvbiBzZWxlY3QoaWRzLCBjb29yZHMsIGssIGxlZnQsIHJpZ2h0LCBpbmMpIHtcblxuICAgIHdoaWxlIChyaWdodCA+IGxlZnQpIHtcbiAgICAgICAgaWYgKHJpZ2h0IC0gbGVmdCA+IDYwMCkge1xuICAgICAgICAgICAgY29uc3QgbiA9IHJpZ2h0IC0gbGVmdCArIDE7XG4gICAgICAgICAgICBjb25zdCBtID0gayAtIGxlZnQgKyAxO1xuICAgICAgICAgICAgY29uc3QgeiA9IE1hdGgubG9nKG4pO1xuICAgICAgICAgICAgY29uc3QgcyA9IDAuNSAqIE1hdGguZXhwKDIgKiB6IC8gMyk7XG4gICAgICAgICAgICBjb25zdCBzZCA9IDAuNSAqIE1hdGguc3FydCh6ICogcyAqIChuIC0gcykgLyBuKSAqIChtIC0gbiAvIDIgPCAwID8gLTEgOiAxKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0xlZnQgPSBNYXRoLm1heChsZWZ0LCBNYXRoLmZsb29yKGsgLSBtICogcyAvIG4gKyBzZCkpO1xuICAgICAgICAgICAgY29uc3QgbmV3UmlnaHQgPSBNYXRoLm1pbihyaWdodCwgTWF0aC5mbG9vcihrICsgKG4gLSBtKSAqIHMgLyBuICsgc2QpKTtcbiAgICAgICAgICAgIHNlbGVjdChpZHMsIGNvb3JkcywgaywgbmV3TGVmdCwgbmV3UmlnaHQsIGluYyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0ID0gY29vcmRzWzIgKiBrICsgaW5jXTtcbiAgICAgICAgbGV0IGkgPSBsZWZ0O1xuICAgICAgICBsZXQgaiA9IHJpZ2h0O1xuXG4gICAgICAgIHN3YXBJdGVtKGlkcywgY29vcmRzLCBsZWZ0LCBrKTtcbiAgICAgICAgaWYgKGNvb3Jkc1syICogcmlnaHQgKyBpbmNdID4gdCkgc3dhcEl0ZW0oaWRzLCBjb29yZHMsIGxlZnQsIHJpZ2h0KTtcblxuICAgICAgICB3aGlsZSAoaSA8IGopIHtcbiAgICAgICAgICAgIHN3YXBJdGVtKGlkcywgY29vcmRzLCBpLCBqKTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIGotLTtcbiAgICAgICAgICAgIHdoaWxlIChjb29yZHNbMiAqIGkgKyBpbmNdIDwgdCkgaSsrO1xuICAgICAgICAgICAgd2hpbGUgKGNvb3Jkc1syICogaiArIGluY10gPiB0KSBqLS07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29vcmRzWzIgKiBsZWZ0ICsgaW5jXSA9PT0gdCkgc3dhcEl0ZW0oaWRzLCBjb29yZHMsIGxlZnQsIGopO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGorKztcbiAgICAgICAgICAgIHN3YXBJdGVtKGlkcywgY29vcmRzLCBqLCByaWdodCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaiA8PSBrKSBsZWZ0ID0gaiArIDE7XG4gICAgICAgIGlmIChrIDw9IGopIHJpZ2h0ID0gaiAtIDE7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBzd2FwSXRlbShpZHMsIGNvb3JkcywgaSwgaikge1xuICAgIHN3YXAoaWRzLCBpLCBqKTtcbiAgICBzd2FwKGNvb3JkcywgMiAqIGksIDIgKiBqKTtcbiAgICBzd2FwKGNvb3JkcywgMiAqIGkgKyAxLCAyICogaiArIDEpO1xufVxuXG5mdW5jdGlvbiBzd2FwKGFyciwgaSwgaikge1xuICAgIGNvbnN0IHRtcCA9IGFycltpXTtcbiAgICBhcnJbaV0gPSBhcnJbal07XG4gICAgYXJyW2pdID0gdG1wO1xufVxuIiwiXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByYW5nZShpZHMsIGNvb3JkcywgbWluWCwgbWluWSwgbWF4WCwgbWF4WSwgbm9kZVNpemUpIHtcbiAgICBjb25zdCBzdGFjayA9IFswLCBpZHMubGVuZ3RoIC0gMSwgMF07XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgbGV0IHgsIHk7XG5cbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGF4aXMgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgY29uc3QgcmlnaHQgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgY29uc3QgbGVmdCA9IHN0YWNrLnBvcCgpO1xuXG4gICAgICAgIGlmIChyaWdodCAtIGxlZnQgPD0gbm9kZVNpemUpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyBpKyspIHtcbiAgICAgICAgICAgICAgICB4ID0gY29vcmRzWzIgKiBpXTtcbiAgICAgICAgICAgICAgICB5ID0gY29vcmRzWzIgKiBpICsgMV07XG4gICAgICAgICAgICAgICAgaWYgKHggPj0gbWluWCAmJiB4IDw9IG1heFggJiYgeSA+PSBtaW5ZICYmIHkgPD0gbWF4WSkgcmVzdWx0LnB1c2goaWRzW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbSA9IE1hdGguZmxvb3IoKGxlZnQgKyByaWdodCkgLyAyKTtcblxuICAgICAgICB4ID0gY29vcmRzWzIgKiBtXTtcbiAgICAgICAgeSA9IGNvb3Jkc1syICogbSArIDFdO1xuXG4gICAgICAgIGlmICh4ID49IG1pblggJiYgeCA8PSBtYXhYICYmIHkgPj0gbWluWSAmJiB5IDw9IG1heFkpIHJlc3VsdC5wdXNoKGlkc1ttXSk7XG5cbiAgICAgICAgY29uc3QgbmV4dEF4aXMgPSAoYXhpcyArIDEpICUgMjtcblxuICAgICAgICBpZiAoYXhpcyA9PT0gMCA/IG1pblggPD0geCA6IG1pblkgPD0geSkge1xuICAgICAgICAgICAgc3RhY2sucHVzaChsZWZ0KTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gobSAtIDEpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChuZXh0QXhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGF4aXMgPT09IDAgPyBtYXhYID49IHggOiBtYXhZID49IHkpIHtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gobSArIDEpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChyaWdodCk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKG5leHRBeGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59XG4iLCJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHdpdGhpbihpZHMsIGNvb3JkcywgcXgsIHF5LCByLCBub2RlU2l6ZSkge1xuICAgIGNvbnN0IHN0YWNrID0gWzAsIGlkcy5sZW5ndGggLSAxLCAwXTtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBjb25zdCByMiA9IHIgKiByO1xuXG4gICAgd2hpbGUgKHN0YWNrLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBheGlzID0gc3RhY2sucG9wKCk7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gc3RhY2sucG9wKCk7XG4gICAgICAgIGNvbnN0IGxlZnQgPSBzdGFjay5wb3AoKTtcblxuICAgICAgICBpZiAocmlnaHQgLSBsZWZ0IDw9IG5vZGVTaXplKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gbGVmdDsgaSA8PSByaWdodDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNxRGlzdChjb29yZHNbMiAqIGldLCBjb29yZHNbMiAqIGkgKyAxXSwgcXgsIHF5KSA8PSByMikgcmVzdWx0LnB1c2goaWRzW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbSA9IE1hdGguZmxvb3IoKGxlZnQgKyByaWdodCkgLyAyKTtcblxuICAgICAgICBjb25zdCB4ID0gY29vcmRzWzIgKiBtXTtcbiAgICAgICAgY29uc3QgeSA9IGNvb3Jkc1syICogbSArIDFdO1xuXG4gICAgICAgIGlmIChzcURpc3QoeCwgeSwgcXgsIHF5KSA8PSByMikgcmVzdWx0LnB1c2goaWRzW21dKTtcblxuICAgICAgICBjb25zdCBuZXh0QXhpcyA9IChheGlzICsgMSkgJSAyO1xuXG4gICAgICAgIGlmIChheGlzID09PSAwID8gcXggLSByIDw9IHggOiBxeSAtIHIgPD0geSkge1xuICAgICAgICAgICAgc3RhY2sucHVzaChsZWZ0KTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gobSAtIDEpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChuZXh0QXhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGF4aXMgPT09IDAgPyBxeCArIHIgPj0geCA6IHF5ICsgciA+PSB5KSB7XG4gICAgICAgICAgICBzdGFjay5wdXNoKG0gKyAxKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gocmlnaHQpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChuZXh0QXhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBzcURpc3QoYXgsIGF5LCBieCwgYnkpIHtcbiAgICBjb25zdCBkeCA9IGF4IC0gYng7XG4gICAgY29uc3QgZHkgPSBheSAtIGJ5O1xuICAgIHJldHVybiBkeCAqIGR4ICsgZHkgKiBkeTtcbn1cbiIsIlxuaW1wb3J0IHNvcnQgZnJvbSAnLi9zb3J0JztcbmltcG9ydCByYW5nZSBmcm9tICcuL3JhbmdlJztcbmltcG9ydCB3aXRoaW4gZnJvbSAnLi93aXRoaW4nO1xuXG5jb25zdCBkZWZhdWx0R2V0WCA9IHAgPT4gcFswXTtcbmNvbnN0IGRlZmF1bHRHZXRZID0gcCA9PiBwWzFdO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBLREJ1c2gge1xuICAgIGNvbnN0cnVjdG9yKHBvaW50cywgZ2V0WCA9IGRlZmF1bHRHZXRYLCBnZXRZID0gZGVmYXVsdEdldFksIG5vZGVTaXplID0gNjQsIEFycmF5VHlwZSA9IEZsb2F0NjRBcnJheSkge1xuICAgICAgICB0aGlzLm5vZGVTaXplID0gbm9kZVNpemU7XG4gICAgICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXG4gICAgICAgIGNvbnN0IEluZGV4QXJyYXlUeXBlID0gcG9pbnRzLmxlbmd0aCA8IDY1NTM2ID8gVWludDE2QXJyYXkgOiBVaW50MzJBcnJheTtcblxuICAgICAgICBjb25zdCBpZHMgPSB0aGlzLmlkcyA9IG5ldyBJbmRleEFycmF5VHlwZShwb2ludHMubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgY29vcmRzID0gdGhpcy5jb29yZHMgPSBuZXcgQXJyYXlUeXBlKHBvaW50cy5sZW5ndGggKiAyKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWRzW2ldID0gaTtcbiAgICAgICAgICAgIGNvb3Jkc1syICogaV0gPSBnZXRYKHBvaW50c1tpXSk7XG4gICAgICAgICAgICBjb29yZHNbMiAqIGkgKyAxXSA9IGdldFkocG9pbnRzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNvcnQoaWRzLCBjb29yZHMsIG5vZGVTaXplLCAwLCBpZHMubGVuZ3RoIC0gMSwgMCk7XG4gICAgfVxuXG4gICAgcmFuZ2UobWluWCwgbWluWSwgbWF4WCwgbWF4WSkge1xuICAgICAgICByZXR1cm4gcmFuZ2UodGhpcy5pZHMsIHRoaXMuY29vcmRzLCBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZLCB0aGlzLm5vZGVTaXplKTtcbiAgICB9XG5cbiAgICB3aXRoaW4oeCwgeSwgcikge1xuICAgICAgICByZXR1cm4gd2l0aGluKHRoaXMuaWRzLCB0aGlzLmNvb3JkcywgeCwgeSwgciwgdGhpcy5ub2RlU2l6ZSk7XG4gICAgfVxufVxuIiwiXG5pbXBvcnQgS0RCdXNoIGZyb20gJ2tkYnVzaCc7XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAgIG1pblpvb206IDAsICAgLy8gbWluIHpvb20gdG8gZ2VuZXJhdGUgY2x1c3RlcnMgb25cbiAgICBtYXhab29tOiAxNiwgIC8vIG1heCB6b29tIGxldmVsIHRvIGNsdXN0ZXIgdGhlIHBvaW50cyBvblxuICAgIHJhZGl1czogNDAsICAgLy8gY2x1c3RlciByYWRpdXMgaW4gcGl4ZWxzXG4gICAgZXh0ZW50OiA1MTIsICAvLyB0aWxlIGV4dGVudCAocmFkaXVzIGlzIGNhbGN1bGF0ZWQgcmVsYXRpdmUgdG8gaXQpXG4gICAgbm9kZVNpemU6IDY0LCAvLyBzaXplIG9mIHRoZSBLRC10cmVlIGxlYWYgbm9kZSwgYWZmZWN0cyBwZXJmb3JtYW5jZVxuICAgIGxvZzogZmFsc2UsICAgLy8gd2hldGhlciB0byBsb2cgdGltaW5nIGluZm9cblxuICAgIC8vIHdoZXRoZXIgdG8gZ2VuZXJhdGUgbnVtZXJpYyBpZHMgZm9yIGlucHV0IGZlYXR1cmVzIHRoYXQgZG9uJ3QgaGF2ZSB0aGVtXG4gICAgZ2VuZXJhdGVJZDogZmFsc2UsXG5cbiAgICAvLyBhIHJlZHVjZSBmdW5jdGlvbiBmb3IgY2FsY3VsYXRpbmcgY3VzdG9tIGNsdXN0ZXIgcHJvcGVydGllc1xuICAgIHJlZHVjZTogbnVsbCwgLy8gKGFjY3VtdWxhdGVkLCBwcm9wcykgPT4geyBhY2N1bXVsYXRlZC5zdW0gKz0gcHJvcHMuc3VtOyB9XG5cbiAgICAvLyBwcm9wZXJ0aWVzIHRvIHVzZSBmb3IgaW5kaXZpZHVhbCBwb2ludHMgd2hlbiBydW5uaW5nIHRoZSByZWR1Y2VyXG4gICAgbWFwOiBwcm9wcyA9PiBwcm9wcyAvLyBwcm9wcyA9PiAoe3N1bTogcHJvcHMubXlfdmFsdWV9KVxufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3VwZXJjbHVzdGVyIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IGV4dGVuZChPYmplY3QuY3JlYXRlKGRlZmF1bHRPcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMudHJlZXMgPSBuZXcgQXJyYXkodGhpcy5vcHRpb25zLm1heFpvb20gKyAxKTtcbiAgICB9XG5cbiAgICBsb2FkKHBvaW50cykge1xuICAgICAgICBjb25zdCB7bG9nLCBtaW5ab29tLCBtYXhab29tLCBub2RlU2l6ZX0gPSB0aGlzLm9wdGlvbnM7XG5cbiAgICAgICAgaWYgKGxvZykgY29uc29sZS50aW1lKCd0b3RhbCB0aW1lJyk7XG5cbiAgICAgICAgY29uc3QgdGltZXJJZCA9IGBwcmVwYXJlICR7ICBwb2ludHMubGVuZ3RoICB9IHBvaW50c2A7XG4gICAgICAgIGlmIChsb2cpIGNvbnNvbGUudGltZSh0aW1lcklkKTtcblxuICAgICAgICB0aGlzLnBvaW50cyA9IHBvaW50cztcblxuICAgICAgICAvLyBnZW5lcmF0ZSBhIGNsdXN0ZXIgb2JqZWN0IGZvciBlYWNoIHBvaW50IGFuZCBpbmRleCBpbnB1dCBwb2ludHMgaW50byBhIEtELXRyZWVcbiAgICAgICAgbGV0IGNsdXN0ZXJzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIXBvaW50c1tpXS5nZW9tZXRyeSkgY29udGludWU7XG4gICAgICAgICAgICBjbHVzdGVycy5wdXNoKGNyZWF0ZVBvaW50Q2x1c3Rlcihwb2ludHNbaV0sIGkpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRyZWVzW21heFpvb20gKyAxXSA9IG5ldyBLREJ1c2goY2x1c3RlcnMsIGdldFgsIGdldFksIG5vZGVTaXplLCBGbG9hdDMyQXJyYXkpO1xuXG4gICAgICAgIGlmIChsb2cpIGNvbnNvbGUudGltZUVuZCh0aW1lcklkKTtcblxuICAgICAgICAvLyBjbHVzdGVyIHBvaW50cyBvbiBtYXggem9vbSwgdGhlbiBjbHVzdGVyIHRoZSByZXN1bHRzIG9uIHByZXZpb3VzIHpvb20sIGV0Yy47XG4gICAgICAgIC8vIHJlc3VsdHMgaW4gYSBjbHVzdGVyIGhpZXJhcmNoeSBhY3Jvc3Mgem9vbSBsZXZlbHNcbiAgICAgICAgZm9yIChsZXQgeiA9IG1heFpvb207IHogPj0gbWluWm9vbTsgei0tKSB7XG4gICAgICAgICAgICBjb25zdCBub3cgPSArRGF0ZS5ub3coKTtcblxuICAgICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IHNldCBvZiBjbHVzdGVycyBmb3IgdGhlIHpvb20gYW5kIGluZGV4IHRoZW0gd2l0aCBhIEtELXRyZWVcbiAgICAgICAgICAgIGNsdXN0ZXJzID0gdGhpcy5fY2x1c3RlcihjbHVzdGVycywgeik7XG4gICAgICAgICAgICB0aGlzLnRyZWVzW3pdID0gbmV3IEtEQnVzaChjbHVzdGVycywgZ2V0WCwgZ2V0WSwgbm9kZVNpemUsIEZsb2F0MzJBcnJheSk7XG5cbiAgICAgICAgICAgIGlmIChsb2cpIGNvbnNvbGUubG9nKCd6JWQ6ICVkIGNsdXN0ZXJzIGluICVkbXMnLCB6LCBjbHVzdGVycy5sZW5ndGgsICtEYXRlLm5vdygpIC0gbm93KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsb2cpIGNvbnNvbGUudGltZUVuZCgndG90YWwgdGltZScpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGdldENsdXN0ZXJzKGJib3gsIHpvb20pIHtcbiAgICAgICAgbGV0IG1pbkxuZyA9ICgoYmJveFswXSArIDE4MCkgJSAzNjAgKyAzNjApICUgMzYwIC0gMTgwO1xuICAgICAgICBjb25zdCBtaW5MYXQgPSBNYXRoLm1heCgtOTAsIE1hdGgubWluKDkwLCBiYm94WzFdKSk7XG4gICAgICAgIGxldCBtYXhMbmcgPSBiYm94WzJdID09PSAxODAgPyAxODAgOiAoKGJib3hbMl0gKyAxODApICUgMzYwICsgMzYwKSAlIDM2MCAtIDE4MDtcbiAgICAgICAgY29uc3QgbWF4TGF0ID0gTWF0aC5tYXgoLTkwLCBNYXRoLm1pbig5MCwgYmJveFszXSkpO1xuXG4gICAgICAgIGlmIChiYm94WzJdIC0gYmJveFswXSA+PSAzNjApIHtcbiAgICAgICAgICAgIG1pbkxuZyA9IC0xODA7XG4gICAgICAgICAgICBtYXhMbmcgPSAxODA7XG4gICAgICAgIH0gZWxzZSBpZiAobWluTG5nID4gbWF4TG5nKSB7XG4gICAgICAgICAgICBjb25zdCBlYXN0ZXJuSGVtID0gdGhpcy5nZXRDbHVzdGVycyhbbWluTG5nLCBtaW5MYXQsIDE4MCwgbWF4TGF0XSwgem9vbSk7XG4gICAgICAgICAgICBjb25zdCB3ZXN0ZXJuSGVtID0gdGhpcy5nZXRDbHVzdGVycyhbLTE4MCwgbWluTGF0LCBtYXhMbmcsIG1heExhdF0sIHpvb20pO1xuICAgICAgICAgICAgcmV0dXJuIGVhc3Rlcm5IZW0uY29uY2F0KHdlc3Rlcm5IZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdHJlZSA9IHRoaXMudHJlZXNbdGhpcy5fbGltaXRab29tKHpvb20pXTtcbiAgICAgICAgY29uc3QgaWRzID0gdHJlZS5yYW5nZShsbmdYKG1pbkxuZyksIGxhdFkobWF4TGF0KSwgbG5nWChtYXhMbmcpLCBsYXRZKG1pbkxhdCkpO1xuICAgICAgICBjb25zdCBjbHVzdGVycyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIGlkcykge1xuICAgICAgICAgICAgY29uc3QgYyA9IHRyZWUucG9pbnRzW2lkXTtcbiAgICAgICAgICAgIGNsdXN0ZXJzLnB1c2goYy5udW1Qb2ludHMgPyBnZXRDbHVzdGVySlNPTihjKSA6IHRoaXMucG9pbnRzW2MuaW5kZXhdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2x1c3RlcnM7XG4gICAgfVxuXG4gICAgZ2V0Q2hpbGRyZW4oY2x1c3RlcklkKSB7XG4gICAgICAgIGNvbnN0IG9yaWdpbklkID0gdGhpcy5fZ2V0T3JpZ2luSWQoY2x1c3RlcklkKTtcbiAgICAgICAgY29uc3Qgb3JpZ2luWm9vbSA9IHRoaXMuX2dldE9yaWdpblpvb20oY2x1c3RlcklkKTtcbiAgICAgICAgY29uc3QgZXJyb3JNc2cgPSAnTm8gY2x1c3RlciB3aXRoIHRoZSBzcGVjaWZpZWQgaWQuJztcblxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMudHJlZXNbb3JpZ2luWm9vbV07XG4gICAgICAgIGlmICghaW5kZXgpIHRocm93IG5ldyBFcnJvcihlcnJvck1zZyk7XG5cbiAgICAgICAgY29uc3Qgb3JpZ2luID0gaW5kZXgucG9pbnRzW29yaWdpbklkXTtcbiAgICAgICAgaWYgKCFvcmlnaW4pIHRocm93IG5ldyBFcnJvcihlcnJvck1zZyk7XG5cbiAgICAgICAgY29uc3QgciA9IHRoaXMub3B0aW9ucy5yYWRpdXMgLyAodGhpcy5vcHRpb25zLmV4dGVudCAqIE1hdGgucG93KDIsIG9yaWdpblpvb20gLSAxKSk7XG4gICAgICAgIGNvbnN0IGlkcyA9IGluZGV4LndpdGhpbihvcmlnaW4ueCwgb3JpZ2luLnksIHIpO1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIGlkcykge1xuICAgICAgICAgICAgY29uc3QgYyA9IGluZGV4LnBvaW50c1tpZF07XG4gICAgICAgICAgICBpZiAoYy5wYXJlbnRJZCA9PT0gY2x1c3RlcklkKSB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChjLm51bVBvaW50cyA/IGdldENsdXN0ZXJKU09OKGMpIDogdGhpcy5wb2ludHNbYy5pbmRleF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKGVycm9yTXNnKTtcblxuICAgICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgfVxuXG4gICAgZ2V0TGVhdmVzKGNsdXN0ZXJJZCwgbGltaXQsIG9mZnNldCkge1xuICAgICAgICBsaW1pdCA9IGxpbWl0IHx8IDEwO1xuICAgICAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuICAgICAgICBjb25zdCBsZWF2ZXMgPSBbXTtcbiAgICAgICAgdGhpcy5fYXBwZW5kTGVhdmVzKGxlYXZlcywgY2x1c3RlcklkLCBsaW1pdCwgb2Zmc2V0LCAwKTtcblxuICAgICAgICByZXR1cm4gbGVhdmVzO1xuICAgIH1cblxuICAgIGdldFRpbGUoeiwgeCwgeSkge1xuICAgICAgICBjb25zdCB0cmVlID0gdGhpcy50cmVlc1t0aGlzLl9saW1pdFpvb20oeildO1xuICAgICAgICBjb25zdCB6MiA9IE1hdGgucG93KDIsIHopO1xuICAgICAgICBjb25zdCB7ZXh0ZW50LCByYWRpdXN9ID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBjb25zdCBwID0gcmFkaXVzIC8gZXh0ZW50O1xuICAgICAgICBjb25zdCB0b3AgPSAoeSAtIHApIC8gejI7XG4gICAgICAgIGNvbnN0IGJvdHRvbSA9ICh5ICsgMSArIHApIC8gejI7XG5cbiAgICAgICAgY29uc3QgdGlsZSA9IHtcbiAgICAgICAgICAgIGZlYXR1cmVzOiBbXVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuX2FkZFRpbGVGZWF0dXJlcyhcbiAgICAgICAgICAgIHRyZWUucmFuZ2UoKHggLSBwKSAvIHoyLCB0b3AsICh4ICsgMSArIHApIC8gejIsIGJvdHRvbSksXG4gICAgICAgICAgICB0cmVlLnBvaW50cywgeCwgeSwgejIsIHRpbGUpO1xuXG4gICAgICAgIGlmICh4ID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl9hZGRUaWxlRmVhdHVyZXMoXG4gICAgICAgICAgICAgICAgdHJlZS5yYW5nZSgxIC0gcCAvIHoyLCB0b3AsIDEsIGJvdHRvbSksXG4gICAgICAgICAgICAgICAgdHJlZS5wb2ludHMsIHoyLCB5LCB6MiwgdGlsZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHggPT09IHoyIC0gMSkge1xuICAgICAgICAgICAgdGhpcy5fYWRkVGlsZUZlYXR1cmVzKFxuICAgICAgICAgICAgICAgIHRyZWUucmFuZ2UoMCwgdG9wLCBwIC8gejIsIGJvdHRvbSksXG4gICAgICAgICAgICAgICAgdHJlZS5wb2ludHMsIC0xLCB5LCB6MiwgdGlsZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGlsZS5mZWF0dXJlcy5sZW5ndGggPyB0aWxlIDogbnVsbDtcbiAgICB9XG5cbiAgICBnZXRDbHVzdGVyRXhwYW5zaW9uWm9vbShjbHVzdGVySWQpIHtcbiAgICAgICAgbGV0IGV4cGFuc2lvblpvb20gPSB0aGlzLl9nZXRPcmlnaW5ab29tKGNsdXN0ZXJJZCkgLSAxO1xuICAgICAgICB3aGlsZSAoZXhwYW5zaW9uWm9vbSA8PSB0aGlzLm9wdGlvbnMubWF4Wm9vbSkge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmdldENoaWxkcmVuKGNsdXN0ZXJJZCk7XG4gICAgICAgICAgICBleHBhbnNpb25ab29tKys7XG4gICAgICAgICAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoICE9PSAxKSBicmVhaztcbiAgICAgICAgICAgIGNsdXN0ZXJJZCA9IGNoaWxkcmVuWzBdLnByb3BlcnRpZXMuY2x1c3Rlcl9pZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXhwYW5zaW9uWm9vbTtcbiAgICB9XG5cbiAgICBfYXBwZW5kTGVhdmVzKHJlc3VsdCwgY2x1c3RlcklkLCBsaW1pdCwgb2Zmc2V0LCBza2lwcGVkKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5nZXRDaGlsZHJlbihjbHVzdGVySWQpO1xuXG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0gY2hpbGQucHJvcGVydGllcztcblxuICAgICAgICAgICAgaWYgKHByb3BzICYmIHByb3BzLmNsdXN0ZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2tpcHBlZCArIHByb3BzLnBvaW50X2NvdW50IDw9IG9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBza2lwIHRoZSB3aG9sZSBjbHVzdGVyXG4gICAgICAgICAgICAgICAgICAgIHNraXBwZWQgKz0gcHJvcHMucG9pbnRfY291bnQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZW50ZXIgdGhlIGNsdXN0ZXJcbiAgICAgICAgICAgICAgICAgICAgc2tpcHBlZCA9IHRoaXMuX2FwcGVuZExlYXZlcyhyZXN1bHQsIHByb3BzLmNsdXN0ZXJfaWQsIGxpbWl0LCBvZmZzZXQsIHNraXBwZWQpO1xuICAgICAgICAgICAgICAgICAgICAvLyBleGl0IHRoZSBjbHVzdGVyXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChza2lwcGVkIDwgb2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgLy8gc2tpcCBhIHNpbmdsZSBwb2ludFxuICAgICAgICAgICAgICAgIHNraXBwZWQrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gYWRkIGEgc2luZ2xlIHBvaW50XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPT09IGxpbWl0KSBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBza2lwcGVkO1xuICAgIH1cblxuICAgIF9hZGRUaWxlRmVhdHVyZXMoaWRzLCBwb2ludHMsIHgsIHksIHoyLCB0aWxlKSB7XG4gICAgICAgIGZvciAoY29uc3QgaSBvZiBpZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBwb2ludHNbaV07XG4gICAgICAgICAgICBjb25zdCBpc0NsdXN0ZXIgPSBjLm51bVBvaW50cztcbiAgICAgICAgICAgIGNvbnN0IGYgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogMSxcbiAgICAgICAgICAgICAgICBnZW9tZXRyeTogW1tcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5yb3VuZCh0aGlzLm9wdGlvbnMuZXh0ZW50ICogKGMueCAqIHoyIC0geCkpLFxuICAgICAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKHRoaXMub3B0aW9ucy5leHRlbnQgKiAoYy55ICogejIgLSB5KSlcbiAgICAgICAgICAgICAgICBdXSxcbiAgICAgICAgICAgICAgICB0YWdzOiBpc0NsdXN0ZXIgPyBnZXRDbHVzdGVyUHJvcGVydGllcyhjKSA6IHRoaXMucG9pbnRzW2MuaW5kZXhdLnByb3BlcnRpZXNcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIC8vIGFzc2lnbiBpZFxuICAgICAgICAgICAgbGV0IGlkO1xuICAgICAgICAgICAgaWYgKGlzQ2x1c3Rlcikge1xuICAgICAgICAgICAgICAgIGlkID0gYy5pZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLmdlbmVyYXRlSWQpIHtcbiAgICAgICAgICAgICAgICAvLyBvcHRpb25hbGx5IGdlbmVyYXRlIGlkXG4gICAgICAgICAgICAgICAgaWQgPSBjLmluZGV4O1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBvaW50c1tjLmluZGV4XS5pZCkge1xuICAgICAgICAgICAgICAgIC8vIGtlZXAgaWQgaWYgYWxyZWFkeSBhc3NpZ25lZFxuICAgICAgICAgICAgICAgIGlkID0gdGhpcy5wb2ludHNbYy5pbmRleF0uaWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkKSBmLmlkID0gaWQ7XG5cbiAgICAgICAgICAgIHRpbGUuZmVhdHVyZXMucHVzaChmKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9saW1pdFpvb20oeikge1xuICAgICAgICByZXR1cm4gTWF0aC5tYXgodGhpcy5vcHRpb25zLm1pblpvb20sIE1hdGgubWluKHosIHRoaXMub3B0aW9ucy5tYXhab29tICsgMSkpO1xuICAgIH1cblxuICAgIF9jbHVzdGVyKHBvaW50cywgem9vbSkge1xuICAgICAgICBjb25zdCBjbHVzdGVycyA9IFtdO1xuICAgICAgICBjb25zdCB7cmFkaXVzLCBleHRlbnQsIHJlZHVjZX0gPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHIgPSByYWRpdXMgLyAoZXh0ZW50ICogTWF0aC5wb3coMiwgem9vbSkpO1xuXG4gICAgICAgIC8vIGxvb3AgdGhyb3VnaCBlYWNoIHBvaW50XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gcG9pbnRzW2ldO1xuICAgICAgICAgICAgLy8gaWYgd2UndmUgYWxyZWFkeSB2aXNpdGVkIHRoZSBwb2ludCBhdCB0aGlzIHpvb20gbGV2ZWwsIHNraXAgaXRcbiAgICAgICAgICAgIGlmIChwLnpvb20gPD0gem9vbSkgY29udGludWU7XG4gICAgICAgICAgICBwLnpvb20gPSB6b29tO1xuXG4gICAgICAgICAgICAvLyBmaW5kIGFsbCBuZWFyYnkgcG9pbnRzXG4gICAgICAgICAgICBjb25zdCB0cmVlID0gdGhpcy50cmVlc1t6b29tICsgMV07XG4gICAgICAgICAgICBjb25zdCBuZWlnaGJvcklkcyA9IHRyZWUud2l0aGluKHAueCwgcC55LCByKTtcblxuICAgICAgICAgICAgbGV0IG51bVBvaW50cyA9IHAubnVtUG9pbnRzIHx8IDE7XG4gICAgICAgICAgICBsZXQgd3ggPSBwLnggKiBudW1Qb2ludHM7XG4gICAgICAgICAgICBsZXQgd3kgPSBwLnkgKiBudW1Qb2ludHM7XG5cbiAgICAgICAgICAgIGxldCBjbHVzdGVyUHJvcGVydGllcyA9IHJlZHVjZSAmJiBudW1Qb2ludHMgPiAxID8gdGhpcy5fbWFwKHAsIHRydWUpIDogbnVsbDtcblxuICAgICAgICAgICAgLy8gZW5jb2RlIGJvdGggem9vbSBhbmQgcG9pbnQgaW5kZXggb24gd2hpY2ggdGhlIGNsdXN0ZXIgb3JpZ2luYXRlZCAtLSBvZmZzZXQgYnkgdG90YWwgbGVuZ3RoIG9mIGZlYXR1cmVzXG4gICAgICAgICAgICBjb25zdCBpZCA9IChpIDw8IDUpICsgKHpvb20gKyAxKSArIHRoaXMucG9pbnRzLmxlbmd0aDtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBuZWlnaGJvcklkIG9mIG5laWdoYm9ySWRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYiA9IHRyZWUucG9pbnRzW25laWdoYm9ySWRdO1xuICAgICAgICAgICAgICAgIC8vIGZpbHRlciBvdXQgbmVpZ2hib3JzIHRoYXQgYXJlIGFscmVhZHkgcHJvY2Vzc2VkXG4gICAgICAgICAgICAgICAgaWYgKGIuem9vbSA8PSB6b29tKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBiLnpvb20gPSB6b29tOyAvLyBzYXZlIHRoZSB6b29tIChzbyBpdCBkb2Vzbid0IGdldCBwcm9jZXNzZWQgdHdpY2UpXG5cbiAgICAgICAgICAgICAgICBjb25zdCBudW1Qb2ludHMyID0gYi5udW1Qb2ludHMgfHwgMTtcbiAgICAgICAgICAgICAgICB3eCArPSBiLnggKiBudW1Qb2ludHMyOyAvLyBhY2N1bXVsYXRlIGNvb3JkaW5hdGVzIGZvciBjYWxjdWxhdGluZyB3ZWlnaHRlZCBjZW50ZXJcbiAgICAgICAgICAgICAgICB3eSArPSBiLnkgKiBudW1Qb2ludHMyO1xuXG4gICAgICAgICAgICAgICAgbnVtUG9pbnRzICs9IG51bVBvaW50czI7XG4gICAgICAgICAgICAgICAgYi5wYXJlbnRJZCA9IGlkO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlZHVjZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNsdXN0ZXJQcm9wZXJ0aWVzKSBjbHVzdGVyUHJvcGVydGllcyA9IHRoaXMuX21hcChwLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgcmVkdWNlKGNsdXN0ZXJQcm9wZXJ0aWVzLCB0aGlzLl9tYXAoYikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG51bVBvaW50cyA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGNsdXN0ZXJzLnB1c2gocCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHAucGFyZW50SWQgPSBpZDtcbiAgICAgICAgICAgICAgICBjbHVzdGVycy5wdXNoKGNyZWF0ZUNsdXN0ZXIod3ggLyBudW1Qb2ludHMsIHd5IC8gbnVtUG9pbnRzLCBpZCwgbnVtUG9pbnRzLCBjbHVzdGVyUHJvcGVydGllcykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNsdXN0ZXJzO1xuICAgIH1cblxuICAgIC8vIGdldCBpbmRleCBvZiB0aGUgcG9pbnQgZnJvbSB3aGljaCB0aGUgY2x1c3RlciBvcmlnaW5hdGVkXG4gICAgX2dldE9yaWdpbklkKGNsdXN0ZXJJZCkge1xuICAgICAgICByZXR1cm4gKGNsdXN0ZXJJZCAtIHRoaXMucG9pbnRzLmxlbmd0aCkgPj4gNTtcbiAgICB9XG5cbiAgICAvLyBnZXQgem9vbSBvZiB0aGUgcG9pbnQgZnJvbSB3aGljaCB0aGUgY2x1c3RlciBvcmlnaW5hdGVkXG4gICAgX2dldE9yaWdpblpvb20oY2x1c3RlcklkKSB7XG4gICAgICAgIHJldHVybiAoY2x1c3RlcklkIC0gdGhpcy5wb2ludHMubGVuZ3RoKSAlIDMyO1xuICAgIH1cblxuICAgIF9tYXAocG9pbnQsIGNsb25lKSB7XG4gICAgICAgIGlmIChwb2ludC5udW1Qb2ludHMpIHtcbiAgICAgICAgICAgIHJldHVybiBjbG9uZSA/IGV4dGVuZCh7fSwgcG9pbnQucHJvcGVydGllcykgOiBwb2ludC5wcm9wZXJ0aWVzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsID0gdGhpcy5wb2ludHNbcG9pbnQuaW5kZXhdLnByb3BlcnRpZXM7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMub3B0aW9ucy5tYXAob3JpZ2luYWwpO1xuICAgICAgICByZXR1cm4gY2xvbmUgJiYgcmVzdWx0ID09PSBvcmlnaW5hbCA/IGV4dGVuZCh7fSwgcmVzdWx0KSA6IHJlc3VsdDtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNsdXN0ZXIoeCwgeSwgaWQsIG51bVBvaW50cywgcHJvcGVydGllcykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHgsIC8vIHdlaWdodGVkIGNsdXN0ZXIgY2VudGVyXG4gICAgICAgIHksXG4gICAgICAgIHpvb206IEluZmluaXR5LCAvLyB0aGUgbGFzdCB6b29tIHRoZSBjbHVzdGVyIHdhcyBwcm9jZXNzZWQgYXRcbiAgICAgICAgaWQsIC8vIGVuY29kZXMgaW5kZXggb2YgdGhlIGZpcnN0IGNoaWxkIG9mIHRoZSBjbHVzdGVyIGFuZCBpdHMgem9vbSBsZXZlbFxuICAgICAgICBwYXJlbnRJZDogLTEsIC8vIHBhcmVudCBjbHVzdGVyIGlkXG4gICAgICAgIG51bVBvaW50cyxcbiAgICAgICAgcHJvcGVydGllc1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVBvaW50Q2x1c3RlcihwLCBpZCkge1xuICAgIGNvbnN0IFt4LCB5XSA9IHAuZ2VvbWV0cnkuY29vcmRpbmF0ZXM7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeDogbG5nWCh4KSwgLy8gcHJvamVjdGVkIHBvaW50IGNvb3JkaW5hdGVzXG4gICAgICAgIHk6IGxhdFkoeSksXG4gICAgICAgIHpvb206IEluZmluaXR5LCAvLyB0aGUgbGFzdCB6b29tIHRoZSBwb2ludCB3YXMgcHJvY2Vzc2VkIGF0XG4gICAgICAgIGluZGV4OiBpZCwgLy8gaW5kZXggb2YgdGhlIHNvdXJjZSBmZWF0dXJlIGluIHRoZSBvcmlnaW5hbCBpbnB1dCBhcnJheSxcbiAgICAgICAgcGFyZW50SWQ6IC0xIC8vIHBhcmVudCBjbHVzdGVyIGlkXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0Q2x1c3RlckpTT04oY2x1c3Rlcikge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdGZWF0dXJlJyxcbiAgICAgICAgaWQ6IGNsdXN0ZXIuaWQsXG4gICAgICAgIHByb3BlcnRpZXM6IGdldENsdXN0ZXJQcm9wZXJ0aWVzKGNsdXN0ZXIpLFxuICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgICAgIGNvb3JkaW5hdGVzOiBbeExuZyhjbHVzdGVyLngpLCB5TGF0KGNsdXN0ZXIueSldXG4gICAgICAgIH1cbiAgICB9O1xufVxuXG5mdW5jdGlvbiBnZXRDbHVzdGVyUHJvcGVydGllcyhjbHVzdGVyKSB7XG4gICAgY29uc3QgY291bnQgPSBjbHVzdGVyLm51bVBvaW50cztcbiAgICBjb25zdCBhYmJyZXYgPVxuICAgICAgICBjb3VudCA+PSAxMDAwMCA/IGAke01hdGgucm91bmQoY291bnQgLyAxMDAwKSAgfWtgIDpcbiAgICAgICAgY291bnQgPj0gMTAwMCA/IGAke01hdGgucm91bmQoY291bnQgLyAxMDApIC8gMTAgIH1rYCA6IGNvdW50O1xuICAgIHJldHVybiBleHRlbmQoZXh0ZW5kKHt9LCBjbHVzdGVyLnByb3BlcnRpZXMpLCB7XG4gICAgICAgIGNsdXN0ZXI6IHRydWUsXG4gICAgICAgIGNsdXN0ZXJfaWQ6IGNsdXN0ZXIuaWQsXG4gICAgICAgIHBvaW50X2NvdW50OiBjb3VudCxcbiAgICAgICAgcG9pbnRfY291bnRfYWJicmV2aWF0ZWQ6IGFiYnJldlxuICAgIH0pO1xufVxuXG4vLyBsb25naXR1ZGUvbGF0aXR1ZGUgdG8gc3BoZXJpY2FsIG1lcmNhdG9yIGluIFswLi4xXSByYW5nZVxuZnVuY3Rpb24gbG5nWChsbmcpIHtcbiAgICByZXR1cm4gbG5nIC8gMzYwICsgMC41O1xufVxuZnVuY3Rpb24gbGF0WShsYXQpIHtcbiAgICBjb25zdCBzaW4gPSBNYXRoLnNpbihsYXQgKiBNYXRoLlBJIC8gMTgwKTtcbiAgICBjb25zdCB5ID0gKDAuNSAtIDAuMjUgKiBNYXRoLmxvZygoMSArIHNpbikgLyAoMSAtIHNpbikpIC8gTWF0aC5QSSk7XG4gICAgcmV0dXJuIHkgPCAwID8gMCA6IHkgPiAxID8gMSA6IHk7XG59XG5cbi8vIHNwaGVyaWNhbCBtZXJjYXRvciB0byBsb25naXR1ZGUvbGF0aXR1ZGVcbmZ1bmN0aW9uIHhMbmcoeCkge1xuICAgIHJldHVybiAoeCAtIDAuNSkgKiAzNjA7XG59XG5mdW5jdGlvbiB5TGF0KHkpIHtcbiAgICBjb25zdCB5MiA9ICgxODAgLSB5ICogMzYwKSAqIE1hdGguUEkgLyAxODA7XG4gICAgcmV0dXJuIDM2MCAqIE1hdGguYXRhbihNYXRoLmV4cCh5MikpIC8gTWF0aC5QSSAtIDkwO1xufVxuXG5mdW5jdGlvbiBleHRlbmQoZGVzdCwgc3JjKSB7XG4gICAgZm9yIChjb25zdCBpZCBpbiBzcmMpIGRlc3RbaWRdID0gc3JjW2lkXTtcbiAgICByZXR1cm4gZGVzdDtcbn1cblxuZnVuY3Rpb24gZ2V0WChwKSB7XG4gICAgcmV0dXJuIHAueDtcbn1cbmZ1bmN0aW9uIGdldFkocCkge1xuICAgIHJldHVybiBwLnk7XG59XG4iLCJcbi8vIGNhbGN1bGF0ZSBzaW1wbGlmaWNhdGlvbiBkYXRhIHVzaW5nIG9wdGltaXplZCBEb3VnbGFzLVBldWNrZXIgYWxnb3JpdGhtXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNpbXBsaWZ5KGNvb3JkcywgZmlyc3QsIGxhc3QsIHNxVG9sZXJhbmNlKSB7XG4gICAgdmFyIG1heFNxRGlzdCA9IHNxVG9sZXJhbmNlO1xuICAgIHZhciBtaWQgPSAobGFzdCAtIGZpcnN0KSA+PiAxO1xuICAgIHZhciBtaW5Qb3NUb01pZCA9IGxhc3QgLSBmaXJzdDtcbiAgICB2YXIgaW5kZXg7XG5cbiAgICB2YXIgYXggPSBjb29yZHNbZmlyc3RdO1xuICAgIHZhciBheSA9IGNvb3Jkc1tmaXJzdCArIDFdO1xuICAgIHZhciBieCA9IGNvb3Jkc1tsYXN0XTtcbiAgICB2YXIgYnkgPSBjb29yZHNbbGFzdCArIDFdO1xuXG4gICAgZm9yICh2YXIgaSA9IGZpcnN0ICsgMzsgaSA8IGxhc3Q7IGkgKz0gMykge1xuICAgICAgICB2YXIgZCA9IGdldFNxU2VnRGlzdChjb29yZHNbaV0sIGNvb3Jkc1tpICsgMV0sIGF4LCBheSwgYngsIGJ5KTtcblxuICAgICAgICBpZiAoZCA+IG1heFNxRGlzdCkge1xuICAgICAgICAgICAgaW5kZXggPSBpO1xuICAgICAgICAgICAgbWF4U3FEaXN0ID0gZDtcblxuICAgICAgICB9IGVsc2UgaWYgKGQgPT09IG1heFNxRGlzdCkge1xuICAgICAgICAgICAgLy8gYSB3b3JrYXJvdW5kIHRvIGVuc3VyZSB3ZSBjaG9vc2UgYSBwaXZvdCBjbG9zZSB0byB0aGUgbWlkZGxlIG9mIHRoZSBsaXN0LFxuICAgICAgICAgICAgLy8gcmVkdWNpbmcgcmVjdXJzaW9uIGRlcHRoLCBmb3IgY2VydGFpbiBkZWdlbmVyYXRlIGlucHV0c1xuICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9nZW9qc29uLXZ0L2lzc3Vlcy8xMDRcbiAgICAgICAgICAgIHZhciBwb3NUb01pZCA9IE1hdGguYWJzKGkgLSBtaWQpO1xuICAgICAgICAgICAgaWYgKHBvc1RvTWlkIDwgbWluUG9zVG9NaWQpIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgbWluUG9zVG9NaWQgPSBwb3NUb01pZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtYXhTcURpc3QgPiBzcVRvbGVyYW5jZSkge1xuICAgICAgICBpZiAoaW5kZXggLSBmaXJzdCA+IDMpIHNpbXBsaWZ5KGNvb3JkcywgZmlyc3QsIGluZGV4LCBzcVRvbGVyYW5jZSk7XG4gICAgICAgIGNvb3Jkc1tpbmRleCArIDJdID0gbWF4U3FEaXN0O1xuICAgICAgICBpZiAobGFzdCAtIGluZGV4ID4gMykgc2ltcGxpZnkoY29vcmRzLCBpbmRleCwgbGFzdCwgc3FUb2xlcmFuY2UpO1xuICAgIH1cbn1cblxuLy8gc3F1YXJlIGRpc3RhbmNlIGZyb20gYSBwb2ludCB0byBhIHNlZ21lbnRcbmZ1bmN0aW9uIGdldFNxU2VnRGlzdChweCwgcHksIHgsIHksIGJ4LCBieSkge1xuXG4gICAgdmFyIGR4ID0gYnggLSB4O1xuICAgIHZhciBkeSA9IGJ5IC0geTtcblxuICAgIGlmIChkeCAhPT0gMCB8fCBkeSAhPT0gMCkge1xuXG4gICAgICAgIHZhciB0ID0gKChweCAtIHgpICogZHggKyAocHkgLSB5KSAqIGR5KSAvIChkeCAqIGR4ICsgZHkgKiBkeSk7XG5cbiAgICAgICAgaWYgKHQgPiAxKSB7XG4gICAgICAgICAgICB4ID0gYng7XG4gICAgICAgICAgICB5ID0gYnk7XG5cbiAgICAgICAgfSBlbHNlIGlmICh0ID4gMCkge1xuICAgICAgICAgICAgeCArPSBkeCAqIHQ7XG4gICAgICAgICAgICB5ICs9IGR5ICogdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGR4ID0gcHggLSB4O1xuICAgIGR5ID0gcHkgLSB5O1xuXG4gICAgcmV0dXJuIGR4ICogZHggKyBkeSAqIGR5O1xufVxuIiwiXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVGZWF0dXJlKGlkLCB0eXBlLCBnZW9tLCB0YWdzKSB7XG4gICAgdmFyIGZlYXR1cmUgPSB7XG4gICAgICAgIGlkOiB0eXBlb2YgaWQgPT09ICd1bmRlZmluZWQnID8gbnVsbCA6IGlkLFxuICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICBnZW9tZXRyeTogZ2VvbSxcbiAgICAgICAgdGFnczogdGFncyxcbiAgICAgICAgbWluWDogSW5maW5pdHksXG4gICAgICAgIG1pblk6IEluZmluaXR5LFxuICAgICAgICBtYXhYOiAtSW5maW5pdHksXG4gICAgICAgIG1heFk6IC1JbmZpbml0eVxuICAgIH07XG4gICAgY2FsY0JCb3goZmVhdHVyZSk7XG4gICAgcmV0dXJuIGZlYXR1cmU7XG59XG5cbmZ1bmN0aW9uIGNhbGNCQm94KGZlYXR1cmUpIHtcbiAgICB2YXIgZ2VvbSA9IGZlYXR1cmUuZ2VvbWV0cnk7XG4gICAgdmFyIHR5cGUgPSBmZWF0dXJlLnR5cGU7XG5cbiAgICBpZiAodHlwZSA9PT0gJ1BvaW50JyB8fCB0eXBlID09PSAnTXVsdGlQb2ludCcgfHwgdHlwZSA9PT0gJ0xpbmVTdHJpbmcnKSB7XG4gICAgICAgIGNhbGNMaW5lQkJveChmZWF0dXJlLCBnZW9tKTtcblxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ1BvbHlnb24nIHx8IHR5cGUgPT09ICdNdWx0aUxpbmVTdHJpbmcnKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ2VvbS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY2FsY0xpbmVCQm94KGZlYXR1cmUsIGdlb21baV0pO1xuICAgICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdNdWx0aVBvbHlnb24nKSB7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBnZW9tLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGdlb21baV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjYWxjTGluZUJCb3goZmVhdHVyZSwgZ2VvbVtpXVtqXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNhbGNMaW5lQkJveChmZWF0dXJlLCBnZW9tKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBnZW9tLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgICAgIGZlYXR1cmUubWluWCA9IE1hdGgubWluKGZlYXR1cmUubWluWCwgZ2VvbVtpXSk7XG4gICAgICAgIGZlYXR1cmUubWluWSA9IE1hdGgubWluKGZlYXR1cmUubWluWSwgZ2VvbVtpICsgMV0pO1xuICAgICAgICBmZWF0dXJlLm1heFggPSBNYXRoLm1heChmZWF0dXJlLm1heFgsIGdlb21baV0pO1xuICAgICAgICBmZWF0dXJlLm1heFkgPSBNYXRoLm1heChmZWF0dXJlLm1heFksIGdlb21baSArIDFdKTtcbiAgICB9XG59XG4iLCJcbmltcG9ydCBzaW1wbGlmeSBmcm9tICcuL3NpbXBsaWZ5JztcbmltcG9ydCBjcmVhdGVGZWF0dXJlIGZyb20gJy4vZmVhdHVyZSc7XG5cbi8vIGNvbnZlcnRzIEdlb0pTT04gZmVhdHVyZSBpbnRvIGFuIGludGVybWVkaWF0ZSBwcm9qZWN0ZWQgSlNPTiB2ZWN0b3IgZm9ybWF0IHdpdGggc2ltcGxpZmljYXRpb24gZGF0YVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb252ZXJ0KGRhdGEsIG9wdGlvbnMpIHtcbiAgICB2YXIgZmVhdHVyZXMgPSBbXTtcbiAgICBpZiAoZGF0YS50eXBlID09PSAnRmVhdHVyZUNvbGxlY3Rpb24nKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5mZWF0dXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29udmVydEZlYXR1cmUoZmVhdHVyZXMsIGRhdGEuZmVhdHVyZXNbaV0sIG9wdGlvbnMsIGkpO1xuICAgICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gJ0ZlYXR1cmUnKSB7XG4gICAgICAgIGNvbnZlcnRGZWF0dXJlKGZlYXR1cmVzLCBkYXRhLCBvcHRpb25zKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHNpbmdsZSBnZW9tZXRyeSBvciBhIGdlb21ldHJ5IGNvbGxlY3Rpb25cbiAgICAgICAgY29udmVydEZlYXR1cmUoZmVhdHVyZXMsIHtnZW9tZXRyeTogZGF0YX0sIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiBmZWF0dXJlcztcbn1cblxuZnVuY3Rpb24gY29udmVydEZlYXR1cmUoZmVhdHVyZXMsIGdlb2pzb24sIG9wdGlvbnMsIGluZGV4KSB7XG4gICAgaWYgKCFnZW9qc29uLmdlb21ldHJ5KSByZXR1cm47XG5cbiAgICB2YXIgY29vcmRzID0gZ2VvanNvbi5nZW9tZXRyeS5jb29yZGluYXRlcztcbiAgICB2YXIgdHlwZSA9IGdlb2pzb24uZ2VvbWV0cnkudHlwZTtcbiAgICB2YXIgdG9sZXJhbmNlID0gTWF0aC5wb3cob3B0aW9ucy50b2xlcmFuY2UgLyAoKDEgPDwgb3B0aW9ucy5tYXhab29tKSAqIG9wdGlvbnMuZXh0ZW50KSwgMik7XG4gICAgdmFyIGdlb21ldHJ5ID0gW107XG4gICAgdmFyIGlkID0gZ2VvanNvbi5pZDtcbiAgICBpZiAob3B0aW9ucy5wcm9tb3RlSWQpIHtcbiAgICAgICAgaWQgPSBnZW9qc29uLnByb3BlcnRpZXNbb3B0aW9ucy5wcm9tb3RlSWRdO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5nZW5lcmF0ZUlkKSB7XG4gICAgICAgIGlkID0gaW5kZXggfHwgMDtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09ICdQb2ludCcpIHtcbiAgICAgICAgY29udmVydFBvaW50KGNvb3JkcywgZ2VvbWV0cnkpO1xuXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnTXVsdGlQb2ludCcpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb29yZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnZlcnRQb2ludChjb29yZHNbaV0sIGdlb21ldHJ5KTtcbiAgICAgICAgfVxuXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnTGluZVN0cmluZycpIHtcbiAgICAgICAgY29udmVydExpbmUoY29vcmRzLCBnZW9tZXRyeSwgdG9sZXJhbmNlLCBmYWxzZSk7XG5cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdNdWx0aUxpbmVTdHJpbmcnKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmxpbmVNZXRyaWNzKSB7XG4gICAgICAgICAgICAvLyBleHBsb2RlIGludG8gbGluZXN0cmluZ3MgdG8gYmUgYWJsZSB0byB0cmFjayBtZXRyaWNzXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29vcmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZ2VvbWV0cnkgPSBbXTtcbiAgICAgICAgICAgICAgICBjb252ZXJ0TGluZShjb29yZHNbaV0sIGdlb21ldHJ5LCB0b2xlcmFuY2UsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBmZWF0dXJlcy5wdXNoKGNyZWF0ZUZlYXR1cmUoaWQsICdMaW5lU3RyaW5nJywgZ2VvbWV0cnksIGdlb2pzb24ucHJvcGVydGllcykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udmVydExpbmVzKGNvb3JkcywgZ2VvbWV0cnksIHRvbGVyYW5jZSwgZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdQb2x5Z29uJykge1xuICAgICAgICBjb252ZXJ0TGluZXMoY29vcmRzLCBnZW9tZXRyeSwgdG9sZXJhbmNlLCB0cnVlKTtcblxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ011bHRpUG9seWdvbicpIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvb3Jkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHBvbHlnb24gPSBbXTtcbiAgICAgICAgICAgIGNvbnZlcnRMaW5lcyhjb29yZHNbaV0sIHBvbHlnb24sIHRvbGVyYW5jZSwgdHJ1ZSk7XG4gICAgICAgICAgICBnZW9tZXRyeS5wdXNoKHBvbHlnb24pO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnR2VvbWV0cnlDb2xsZWN0aW9uJykge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZ2VvanNvbi5nZW9tZXRyeS5nZW9tZXRyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb252ZXJ0RmVhdHVyZShmZWF0dXJlcywge1xuICAgICAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgICAgICBnZW9tZXRyeTogZ2VvanNvbi5nZW9tZXRyeS5nZW9tZXRyaWVzW2ldLFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IGdlb2pzb24ucHJvcGVydGllc1xuICAgICAgICAgICAgfSwgb3B0aW9ucywgaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IGRhdGEgaXMgbm90IGEgdmFsaWQgR2VvSlNPTiBvYmplY3QuJyk7XG4gICAgfVxuXG4gICAgZmVhdHVyZXMucHVzaChjcmVhdGVGZWF0dXJlKGlkLCB0eXBlLCBnZW9tZXRyeSwgZ2VvanNvbi5wcm9wZXJ0aWVzKSk7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRQb2ludChjb29yZHMsIG91dCkge1xuICAgIG91dC5wdXNoKHByb2plY3RYKGNvb3Jkc1swXSkpO1xuICAgIG91dC5wdXNoKHByb2plY3RZKGNvb3Jkc1sxXSkpO1xuICAgIG91dC5wdXNoKDApO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0TGluZShyaW5nLCBvdXQsIHRvbGVyYW5jZSwgaXNQb2x5Z29uKSB7XG4gICAgdmFyIHgwLCB5MDtcbiAgICB2YXIgc2l6ZSA9IDA7XG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHJpbmcubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIHggPSBwcm9qZWN0WChyaW5nW2pdWzBdKTtcbiAgICAgICAgdmFyIHkgPSBwcm9qZWN0WShyaW5nW2pdWzFdKTtcblxuICAgICAgICBvdXQucHVzaCh4KTtcbiAgICAgICAgb3V0LnB1c2goeSk7XG4gICAgICAgIG91dC5wdXNoKDApO1xuXG4gICAgICAgIGlmIChqID4gMCkge1xuICAgICAgICAgICAgaWYgKGlzUG9seWdvbikge1xuICAgICAgICAgICAgICAgIHNpemUgKz0gKHgwICogeSAtIHggKiB5MCkgLyAyOyAvLyBhcmVhXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNpemUgKz0gTWF0aC5zcXJ0KE1hdGgucG93KHggLSB4MCwgMikgKyBNYXRoLnBvdyh5IC0geTAsIDIpKTsgLy8gbGVuZ3RoXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgeDAgPSB4O1xuICAgICAgICB5MCA9IHk7XG4gICAgfVxuXG4gICAgdmFyIGxhc3QgPSBvdXQubGVuZ3RoIC0gMztcbiAgICBvdXRbMl0gPSAxO1xuICAgIHNpbXBsaWZ5KG91dCwgMCwgbGFzdCwgdG9sZXJhbmNlKTtcbiAgICBvdXRbbGFzdCArIDJdID0gMTtcblxuICAgIG91dC5zaXplID0gTWF0aC5hYnMoc2l6ZSk7XG4gICAgb3V0LnN0YXJ0ID0gMDtcbiAgICBvdXQuZW5kID0gb3V0LnNpemU7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRMaW5lcyhyaW5ncywgb3V0LCB0b2xlcmFuY2UsIGlzUG9seWdvbikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmluZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGdlb20gPSBbXTtcbiAgICAgICAgY29udmVydExpbmUocmluZ3NbaV0sIGdlb20sIHRvbGVyYW5jZSwgaXNQb2x5Z29uKTtcbiAgICAgICAgb3V0LnB1c2goZ2VvbSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBwcm9qZWN0WCh4KSB7XG4gICAgcmV0dXJuIHggLyAzNjAgKyAwLjU7XG59XG5cbmZ1bmN0aW9uIHByb2plY3RZKHkpIHtcbiAgICB2YXIgc2luID0gTWF0aC5zaW4oeSAqIE1hdGguUEkgLyAxODApO1xuICAgIHZhciB5MiA9IDAuNSAtIDAuMjUgKiBNYXRoLmxvZygoMSArIHNpbikgLyAoMSAtIHNpbikpIC8gTWF0aC5QSTtcbiAgICByZXR1cm4geTIgPCAwID8gMCA6IHkyID4gMSA/IDEgOiB5Mjtcbn1cbiIsIlxuaW1wb3J0IGNyZWF0ZUZlYXR1cmUgZnJvbSAnLi9mZWF0dXJlJztcblxuLyogY2xpcCBmZWF0dXJlcyBiZXR3ZWVuIHR3byBheGlzLXBhcmFsbGVsIGxpbmVzOlxuICogICAgIHwgICAgICAgIHxcbiAqICBfX198X19fICAgICB8ICAgICAvXG4gKiAvICAgfCAgIFxcX19fX3xfX19fL1xuICogICAgIHwgICAgICAgIHxcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjbGlwKGZlYXR1cmVzLCBzY2FsZSwgazEsIGsyLCBheGlzLCBtaW5BbGwsIG1heEFsbCwgb3B0aW9ucykge1xuXG4gICAgazEgLz0gc2NhbGU7XG4gICAgazIgLz0gc2NhbGU7XG5cbiAgICBpZiAobWluQWxsID49IGsxICYmIG1heEFsbCA8IGsyKSByZXR1cm4gZmVhdHVyZXM7IC8vIHRyaXZpYWwgYWNjZXB0XG4gICAgZWxzZSBpZiAobWF4QWxsIDwgazEgfHwgbWluQWxsID49IGsyKSByZXR1cm4gbnVsbDsgLy8gdHJpdmlhbCByZWplY3RcblxuICAgIHZhciBjbGlwcGVkID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZlYXR1cmVzLmxlbmd0aDsgaSsrKSB7XG5cbiAgICAgICAgdmFyIGZlYXR1cmUgPSBmZWF0dXJlc1tpXTtcbiAgICAgICAgdmFyIGdlb21ldHJ5ID0gZmVhdHVyZS5nZW9tZXRyeTtcbiAgICAgICAgdmFyIHR5cGUgPSBmZWF0dXJlLnR5cGU7XG5cbiAgICAgICAgdmFyIG1pbiA9IGF4aXMgPT09IDAgPyBmZWF0dXJlLm1pblggOiBmZWF0dXJlLm1pblk7XG4gICAgICAgIHZhciBtYXggPSBheGlzID09PSAwID8gZmVhdHVyZS5tYXhYIDogZmVhdHVyZS5tYXhZO1xuXG4gICAgICAgIGlmIChtaW4gPj0gazEgJiYgbWF4IDwgazIpIHsgLy8gdHJpdmlhbCBhY2NlcHRcbiAgICAgICAgICAgIGNsaXBwZWQucHVzaChmZWF0dXJlKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2UgaWYgKG1heCA8IGsxIHx8IG1pbiA+PSBrMikgeyAvLyB0cml2aWFsIHJlamVjdFxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbmV3R2VvbWV0cnkgPSBbXTtcblxuICAgICAgICBpZiAodHlwZSA9PT0gJ1BvaW50JyB8fCB0eXBlID09PSAnTXVsdGlQb2ludCcpIHtcbiAgICAgICAgICAgIGNsaXBQb2ludHMoZ2VvbWV0cnksIG5ld0dlb21ldHJ5LCBrMSwgazIsIGF4aXMpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ0xpbmVTdHJpbmcnKSB7XG4gICAgICAgICAgICBjbGlwTGluZShnZW9tZXRyeSwgbmV3R2VvbWV0cnksIGsxLCBrMiwgYXhpcywgZmFsc2UsIG9wdGlvbnMubGluZU1ldHJpY3MpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ011bHRpTGluZVN0cmluZycpIHtcbiAgICAgICAgICAgIGNsaXBMaW5lcyhnZW9tZXRyeSwgbmV3R2VvbWV0cnksIGsxLCBrMiwgYXhpcywgZmFsc2UpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ1BvbHlnb24nKSB7XG4gICAgICAgICAgICBjbGlwTGluZXMoZ2VvbWV0cnksIG5ld0dlb21ldHJ5LCBrMSwgazIsIGF4aXMsIHRydWUpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ011bHRpUG9seWdvbicpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZ2VvbWV0cnkubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgcG9seWdvbiA9IFtdO1xuICAgICAgICAgICAgICAgIGNsaXBMaW5lcyhnZW9tZXRyeVtqXSwgcG9seWdvbiwgazEsIGsyLCBheGlzLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBpZiAocG9seWdvbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3R2VvbWV0cnkucHVzaChwb2x5Z29uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV3R2VvbWV0cnkubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5saW5lTWV0cmljcyAmJiB0eXBlID09PSAnTGluZVN0cmluZycpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbmV3R2VvbWV0cnkubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY2xpcHBlZC5wdXNoKGNyZWF0ZUZlYXR1cmUoZmVhdHVyZS5pZCwgdHlwZSwgbmV3R2VvbWV0cnlbal0sIGZlYXR1cmUudGFncykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdMaW5lU3RyaW5nJyB8fCB0eXBlID09PSAnTXVsdGlMaW5lU3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlmIChuZXdHZW9tZXRyeS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICdMaW5lU3RyaW5nJztcbiAgICAgICAgICAgICAgICAgICAgbmV3R2VvbWV0cnkgPSBuZXdHZW9tZXRyeVswXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0eXBlID0gJ011bHRpTGluZVN0cmluZyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdQb2ludCcgfHwgdHlwZSA9PT0gJ011bHRpUG9pbnQnKSB7XG4gICAgICAgICAgICAgICAgdHlwZSA9IG5ld0dlb21ldHJ5Lmxlbmd0aCA9PT0gMyA/ICdQb2ludCcgOiAnTXVsdGlQb2ludCc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNsaXBwZWQucHVzaChjcmVhdGVGZWF0dXJlKGZlYXR1cmUuaWQsIHR5cGUsIG5ld0dlb21ldHJ5LCBmZWF0dXJlLnRhZ3MpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjbGlwcGVkLmxlbmd0aCA/IGNsaXBwZWQgOiBudWxsO1xufVxuXG5mdW5jdGlvbiBjbGlwUG9pbnRzKGdlb20sIG5ld0dlb20sIGsxLCBrMiwgYXhpcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ2VvbS5sZW5ndGg7IGkgKz0gMykge1xuICAgICAgICB2YXIgYSA9IGdlb21baSArIGF4aXNdO1xuXG4gICAgICAgIGlmIChhID49IGsxICYmIGEgPD0gazIpIHtcbiAgICAgICAgICAgIG5ld0dlb20ucHVzaChnZW9tW2ldKTtcbiAgICAgICAgICAgIG5ld0dlb20ucHVzaChnZW9tW2kgKyAxXSk7XG4gICAgICAgICAgICBuZXdHZW9tLnB1c2goZ2VvbVtpICsgMl0pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjbGlwTGluZShnZW9tLCBuZXdHZW9tLCBrMSwgazIsIGF4aXMsIGlzUG9seWdvbiwgdHJhY2tNZXRyaWNzKSB7XG5cbiAgICB2YXIgc2xpY2UgPSBuZXdTbGljZShnZW9tKTtcbiAgICB2YXIgaW50ZXJzZWN0ID0gYXhpcyA9PT0gMCA/IGludGVyc2VjdFggOiBpbnRlcnNlY3RZO1xuICAgIHZhciBsZW4gPSBnZW9tLnN0YXJ0O1xuICAgIHZhciBzZWdMZW4sIHQ7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdlb20ubGVuZ3RoIC0gMzsgaSArPSAzKSB7XG4gICAgICAgIHZhciBheCA9IGdlb21baV07XG4gICAgICAgIHZhciBheSA9IGdlb21baSArIDFdO1xuICAgICAgICB2YXIgYXogPSBnZW9tW2kgKyAyXTtcbiAgICAgICAgdmFyIGJ4ID0gZ2VvbVtpICsgM107XG4gICAgICAgIHZhciBieSA9IGdlb21baSArIDRdO1xuICAgICAgICB2YXIgYSA9IGF4aXMgPT09IDAgPyBheCA6IGF5O1xuICAgICAgICB2YXIgYiA9IGF4aXMgPT09IDAgPyBieCA6IGJ5O1xuICAgICAgICB2YXIgZXhpdGVkID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRyYWNrTWV0cmljcykgc2VnTGVuID0gTWF0aC5zcXJ0KE1hdGgucG93KGF4IC0gYngsIDIpICsgTWF0aC5wb3coYXkgLSBieSwgMikpO1xuXG4gICAgICAgIGlmIChhIDwgazEpIHtcbiAgICAgICAgICAgIC8vIC0tLXwtLT4gIHwgKGxpbmUgZW50ZXJzIHRoZSBjbGlwIHJlZ2lvbiBmcm9tIHRoZSBsZWZ0KVxuICAgICAgICAgICAgaWYgKGIgPiBrMSkge1xuICAgICAgICAgICAgICAgIHQgPSBpbnRlcnNlY3Qoc2xpY2UsIGF4LCBheSwgYngsIGJ5LCBrMSk7XG4gICAgICAgICAgICAgICAgaWYgKHRyYWNrTWV0cmljcykgc2xpY2Uuc3RhcnQgPSBsZW4gKyBzZWdMZW4gKiB0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGEgPiBrMikge1xuICAgICAgICAgICAgLy8gfCAgPC0tfC0tLSAobGluZSBlbnRlcnMgdGhlIGNsaXAgcmVnaW9uIGZyb20gdGhlIHJpZ2h0KVxuICAgICAgICAgICAgaWYgKGIgPCBrMikge1xuICAgICAgICAgICAgICAgIHQgPSBpbnRlcnNlY3Qoc2xpY2UsIGF4LCBheSwgYngsIGJ5LCBrMik7XG4gICAgICAgICAgICAgICAgaWYgKHRyYWNrTWV0cmljcykgc2xpY2Uuc3RhcnQgPSBsZW4gKyBzZWdMZW4gKiB0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWRkUG9pbnQoc2xpY2UsIGF4LCBheSwgYXopO1xuICAgICAgICB9XG4gICAgICAgIGlmIChiIDwgazEgJiYgYSA+PSBrMSkge1xuICAgICAgICAgICAgLy8gPC0tfC0tLSAgfCBvciA8LS18LS0tLS18LS0tIChsaW5lIGV4aXRzIHRoZSBjbGlwIHJlZ2lvbiBvbiB0aGUgbGVmdClcbiAgICAgICAgICAgIHQgPSBpbnRlcnNlY3Qoc2xpY2UsIGF4LCBheSwgYngsIGJ5LCBrMSk7XG4gICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChiID4gazIgJiYgYSA8PSBrMikge1xuICAgICAgICAgICAgLy8gfCAgLS0tfC0tPiBvciAtLS18LS0tLS18LS0+IChsaW5lIGV4aXRzIHRoZSBjbGlwIHJlZ2lvbiBvbiB0aGUgcmlnaHQpXG4gICAgICAgICAgICB0ID0gaW50ZXJzZWN0KHNsaWNlLCBheCwgYXksIGJ4LCBieSwgazIpO1xuICAgICAgICAgICAgZXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNQb2x5Z29uICYmIGV4aXRlZCkge1xuICAgICAgICAgICAgaWYgKHRyYWNrTWV0cmljcykgc2xpY2UuZW5kID0gbGVuICsgc2VnTGVuICogdDtcbiAgICAgICAgICAgIG5ld0dlb20ucHVzaChzbGljZSk7XG4gICAgICAgICAgICBzbGljZSA9IG5ld1NsaWNlKGdlb20pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRyYWNrTWV0cmljcykgbGVuICs9IHNlZ0xlbjtcbiAgICB9XG5cbiAgICAvLyBhZGQgdGhlIGxhc3QgcG9pbnRcbiAgICB2YXIgbGFzdCA9IGdlb20ubGVuZ3RoIC0gMztcbiAgICBheCA9IGdlb21bbGFzdF07XG4gICAgYXkgPSBnZW9tW2xhc3QgKyAxXTtcbiAgICBheiA9IGdlb21bbGFzdCArIDJdO1xuICAgIGEgPSBheGlzID09PSAwID8gYXggOiBheTtcbiAgICBpZiAoYSA+PSBrMSAmJiBhIDw9IGsyKSBhZGRQb2ludChzbGljZSwgYXgsIGF5LCBheik7XG5cbiAgICAvLyBjbG9zZSB0aGUgcG9seWdvbiBpZiBpdHMgZW5kcG9pbnRzIGFyZSBub3QgdGhlIHNhbWUgYWZ0ZXIgY2xpcHBpbmdcbiAgICBsYXN0ID0gc2xpY2UubGVuZ3RoIC0gMztcbiAgICBpZiAoaXNQb2x5Z29uICYmIGxhc3QgPj0gMyAmJiAoc2xpY2VbbGFzdF0gIT09IHNsaWNlWzBdIHx8IHNsaWNlW2xhc3QgKyAxXSAhPT0gc2xpY2VbMV0pKSB7XG4gICAgICAgIGFkZFBvaW50KHNsaWNlLCBzbGljZVswXSwgc2xpY2VbMV0sIHNsaWNlWzJdKTtcbiAgICB9XG5cbiAgICAvLyBhZGQgdGhlIGZpbmFsIHNsaWNlXG4gICAgaWYgKHNsaWNlLmxlbmd0aCkge1xuICAgICAgICBuZXdHZW9tLnB1c2goc2xpY2UpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbmV3U2xpY2UobGluZSkge1xuICAgIHZhciBzbGljZSA9IFtdO1xuICAgIHNsaWNlLnNpemUgPSBsaW5lLnNpemU7XG4gICAgc2xpY2Uuc3RhcnQgPSBsaW5lLnN0YXJ0O1xuICAgIHNsaWNlLmVuZCA9IGxpbmUuZW5kO1xuICAgIHJldHVybiBzbGljZTtcbn1cblxuZnVuY3Rpb24gY2xpcExpbmVzKGdlb20sIG5ld0dlb20sIGsxLCBrMiwgYXhpcywgaXNQb2x5Z29uKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBnZW9tLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNsaXBMaW5lKGdlb21baV0sIG5ld0dlb20sIGsxLCBrMiwgYXhpcywgaXNQb2x5Z29uLCBmYWxzZSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBhZGRQb2ludChvdXQsIHgsIHksIHopIHtcbiAgICBvdXQucHVzaCh4KTtcbiAgICBvdXQucHVzaCh5KTtcbiAgICBvdXQucHVzaCh6KTtcbn1cblxuZnVuY3Rpb24gaW50ZXJzZWN0WChvdXQsIGF4LCBheSwgYngsIGJ5LCB4KSB7XG4gICAgdmFyIHQgPSAoeCAtIGF4KSAvIChieCAtIGF4KTtcbiAgICBvdXQucHVzaCh4KTtcbiAgICBvdXQucHVzaChheSArIChieSAtIGF5KSAqIHQpO1xuICAgIG91dC5wdXNoKDEpO1xuICAgIHJldHVybiB0O1xufVxuXG5mdW5jdGlvbiBpbnRlcnNlY3RZKG91dCwgYXgsIGF5LCBieCwgYnksIHkpIHtcbiAgICB2YXIgdCA9ICh5IC0gYXkpIC8gKGJ5IC0gYXkpO1xuICAgIG91dC5wdXNoKGF4ICsgKGJ4IC0gYXgpICogdCk7XG4gICAgb3V0LnB1c2goeSk7XG4gICAgb3V0LnB1c2goMSk7XG4gICAgcmV0dXJuIHQ7XG59XG4iLCJcbmltcG9ydCBjbGlwIGZyb20gJy4vY2xpcCc7XG5pbXBvcnQgY3JlYXRlRmVhdHVyZSBmcm9tICcuL2ZlYXR1cmUnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB3cmFwKGZlYXR1cmVzLCBvcHRpb25zKSB7XG4gICAgdmFyIGJ1ZmZlciA9IG9wdGlvbnMuYnVmZmVyIC8gb3B0aW9ucy5leHRlbnQ7XG4gICAgdmFyIG1lcmdlZCA9IGZlYXR1cmVzO1xuICAgIHZhciBsZWZ0ICA9IGNsaXAoZmVhdHVyZXMsIDEsIC0xIC0gYnVmZmVyLCBidWZmZXIsICAgICAwLCAtMSwgMiwgb3B0aW9ucyk7IC8vIGxlZnQgd29ybGQgY29weVxuICAgIHZhciByaWdodCA9IGNsaXAoZmVhdHVyZXMsIDEsICAxIC0gYnVmZmVyLCAyICsgYnVmZmVyLCAwLCAtMSwgMiwgb3B0aW9ucyk7IC8vIHJpZ2h0IHdvcmxkIGNvcHlcblxuICAgIGlmIChsZWZ0IHx8IHJpZ2h0KSB7XG4gICAgICAgIG1lcmdlZCA9IGNsaXAoZmVhdHVyZXMsIDEsIC1idWZmZXIsIDEgKyBidWZmZXIsIDAsIC0xLCAyLCBvcHRpb25zKSB8fCBbXTsgLy8gY2VudGVyIHdvcmxkIGNvcHlcblxuICAgICAgICBpZiAobGVmdCkgbWVyZ2VkID0gc2hpZnRGZWF0dXJlQ29vcmRzKGxlZnQsIDEpLmNvbmNhdChtZXJnZWQpOyAvLyBtZXJnZSBsZWZ0IGludG8gY2VudGVyXG4gICAgICAgIGlmIChyaWdodCkgbWVyZ2VkID0gbWVyZ2VkLmNvbmNhdChzaGlmdEZlYXR1cmVDb29yZHMocmlnaHQsIC0xKSk7IC8vIG1lcmdlIHJpZ2h0IGludG8gY2VudGVyXG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlZDtcbn1cblxuZnVuY3Rpb24gc2hpZnRGZWF0dXJlQ29vcmRzKGZlYXR1cmVzLCBvZmZzZXQpIHtcbiAgICB2YXIgbmV3RmVhdHVyZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGZlYXR1cmUgPSBmZWF0dXJlc1tpXSxcbiAgICAgICAgICAgIHR5cGUgPSBmZWF0dXJlLnR5cGU7XG5cbiAgICAgICAgdmFyIG5ld0dlb21ldHJ5O1xuXG4gICAgICAgIGlmICh0eXBlID09PSAnUG9pbnQnIHx8IHR5cGUgPT09ICdNdWx0aVBvaW50JyB8fCB0eXBlID09PSAnTGluZVN0cmluZycpIHtcbiAgICAgICAgICAgIG5ld0dlb21ldHJ5ID0gc2hpZnRDb29yZHMoZmVhdHVyZS5nZW9tZXRyeSwgb2Zmc2V0KTtcblxuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdNdWx0aUxpbmVTdHJpbmcnIHx8IHR5cGUgPT09ICdQb2x5Z29uJykge1xuICAgICAgICAgICAgbmV3R2VvbWV0cnkgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZmVhdHVyZS5nZW9tZXRyeS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIG5ld0dlb21ldHJ5LnB1c2goc2hpZnRDb29yZHMoZmVhdHVyZS5nZW9tZXRyeVtqXSwgb2Zmc2V0KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ011bHRpUG9seWdvbicpIHtcbiAgICAgICAgICAgIG5ld0dlb21ldHJ5ID0gW107XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgZmVhdHVyZS5nZW9tZXRyeS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIHZhciBuZXdQb2x5Z29uID0gW107XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBmZWF0dXJlLmdlb21ldHJ5W2pdLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1BvbHlnb24ucHVzaChzaGlmdENvb3JkcyhmZWF0dXJlLmdlb21ldHJ5W2pdW2tdLCBvZmZzZXQpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbmV3R2VvbWV0cnkucHVzaChuZXdQb2x5Z29uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG5ld0ZlYXR1cmVzLnB1c2goY3JlYXRlRmVhdHVyZShmZWF0dXJlLmlkLCB0eXBlLCBuZXdHZW9tZXRyeSwgZmVhdHVyZS50YWdzKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0ZlYXR1cmVzO1xufVxuXG5mdW5jdGlvbiBzaGlmdENvb3Jkcyhwb2ludHMsIG9mZnNldCkge1xuICAgIHZhciBuZXdQb2ludHMgPSBbXTtcbiAgICBuZXdQb2ludHMuc2l6ZSA9IHBvaW50cy5zaXplO1xuXG4gICAgaWYgKHBvaW50cy5zdGFydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5ld1BvaW50cy5zdGFydCA9IHBvaW50cy5zdGFydDtcbiAgICAgICAgbmV3UG9pbnRzLmVuZCA9IHBvaW50cy5lbmQ7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpICs9IDMpIHtcbiAgICAgICAgbmV3UG9pbnRzLnB1c2gocG9pbnRzW2ldICsgb2Zmc2V0LCBwb2ludHNbaSArIDFdLCBwb2ludHNbaSArIDJdKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld1BvaW50cztcbn1cbiIsIlxuLy8gVHJhbnNmb3JtcyB0aGUgY29vcmRpbmF0ZXMgb2YgZWFjaCBmZWF0dXJlIGluIHRoZSBnaXZlbiB0aWxlIGZyb21cbi8vIG1lcmNhdG9yLXByb2plY3RlZCBzcGFjZSBpbnRvIChleHRlbnQgeCBleHRlbnQpIHRpbGUgc3BhY2UuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cmFuc2Zvcm1UaWxlKHRpbGUsIGV4dGVudCkge1xuICAgIGlmICh0aWxlLnRyYW5zZm9ybWVkKSByZXR1cm4gdGlsZTtcblxuICAgIHZhciB6MiA9IDEgPDwgdGlsZS56LFxuICAgICAgICB0eCA9IHRpbGUueCxcbiAgICAgICAgdHkgPSB0aWxlLnksXG4gICAgICAgIGksIGosIGs7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGlsZS5mZWF0dXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZmVhdHVyZSA9IHRpbGUuZmVhdHVyZXNbaV0sXG4gICAgICAgICAgICBnZW9tID0gZmVhdHVyZS5nZW9tZXRyeSxcbiAgICAgICAgICAgIHR5cGUgPSBmZWF0dXJlLnR5cGU7XG5cbiAgICAgICAgZmVhdHVyZS5nZW9tZXRyeSA9IFtdO1xuXG4gICAgICAgIGlmICh0eXBlID09PSAxKSB7XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgZ2VvbS5sZW5ndGg7IGogKz0gMikge1xuICAgICAgICAgICAgICAgIGZlYXR1cmUuZ2VvbWV0cnkucHVzaCh0cmFuc2Zvcm1Qb2ludChnZW9tW2pdLCBnZW9tW2ogKyAxXSwgZXh0ZW50LCB6MiwgdHgsIHR5KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgZ2VvbS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIHZhciByaW5nID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IGdlb21bal0ubGVuZ3RoOyBrICs9IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmluZy5wdXNoKHRyYW5zZm9ybVBvaW50KGdlb21bal1ba10sIGdlb21bal1bayArIDFdLCBleHRlbnQsIHoyLCB0eCwgdHkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmVhdHVyZS5nZW9tZXRyeS5wdXNoKHJpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGlsZS50cmFuc2Zvcm1lZCA9IHRydWU7XG5cbiAgICByZXR1cm4gdGlsZTtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtUG9pbnQoeCwgeSwgZXh0ZW50LCB6MiwgdHgsIHR5KSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgTWF0aC5yb3VuZChleHRlbnQgKiAoeCAqIHoyIC0gdHgpKSxcbiAgICAgICAgTWF0aC5yb3VuZChleHRlbnQgKiAoeSAqIHoyIC0gdHkpKV07XG59XG4iLCJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVRpbGUoZmVhdHVyZXMsIHosIHR4LCB0eSwgb3B0aW9ucykge1xuICAgIHZhciB0b2xlcmFuY2UgPSB6ID09PSBvcHRpb25zLm1heFpvb20gPyAwIDogb3B0aW9ucy50b2xlcmFuY2UgLyAoKDEgPDwgeikgKiBvcHRpb25zLmV4dGVudCk7XG4gICAgdmFyIHRpbGUgPSB7XG4gICAgICAgIGZlYXR1cmVzOiBbXSxcbiAgICAgICAgbnVtUG9pbnRzOiAwLFxuICAgICAgICBudW1TaW1wbGlmaWVkOiAwLFxuICAgICAgICBudW1GZWF0dXJlczogMCxcbiAgICAgICAgc291cmNlOiBudWxsLFxuICAgICAgICB4OiB0eCxcbiAgICAgICAgeTogdHksXG4gICAgICAgIHo6IHosXG4gICAgICAgIHRyYW5zZm9ybWVkOiBmYWxzZSxcbiAgICAgICAgbWluWDogMixcbiAgICAgICAgbWluWTogMSxcbiAgICAgICAgbWF4WDogLTEsXG4gICAgICAgIG1heFk6IDBcbiAgICB9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGlsZS5udW1GZWF0dXJlcysrO1xuICAgICAgICBhZGRGZWF0dXJlKHRpbGUsIGZlYXR1cmVzW2ldLCB0b2xlcmFuY2UsIG9wdGlvbnMpO1xuXG4gICAgICAgIHZhciBtaW5YID0gZmVhdHVyZXNbaV0ubWluWDtcbiAgICAgICAgdmFyIG1pblkgPSBmZWF0dXJlc1tpXS5taW5ZO1xuICAgICAgICB2YXIgbWF4WCA9IGZlYXR1cmVzW2ldLm1heFg7XG4gICAgICAgIHZhciBtYXhZID0gZmVhdHVyZXNbaV0ubWF4WTtcblxuICAgICAgICBpZiAobWluWCA8IHRpbGUubWluWCkgdGlsZS5taW5YID0gbWluWDtcbiAgICAgICAgaWYgKG1pblkgPCB0aWxlLm1pblkpIHRpbGUubWluWSA9IG1pblk7XG4gICAgICAgIGlmIChtYXhYID4gdGlsZS5tYXhYKSB0aWxlLm1heFggPSBtYXhYO1xuICAgICAgICBpZiAobWF4WSA+IHRpbGUubWF4WSkgdGlsZS5tYXhZID0gbWF4WTtcbiAgICB9XG4gICAgcmV0dXJuIHRpbGU7XG59XG5cbmZ1bmN0aW9uIGFkZEZlYXR1cmUodGlsZSwgZmVhdHVyZSwgdG9sZXJhbmNlLCBvcHRpb25zKSB7XG5cbiAgICB2YXIgZ2VvbSA9IGZlYXR1cmUuZ2VvbWV0cnksXG4gICAgICAgIHR5cGUgPSBmZWF0dXJlLnR5cGUsXG4gICAgICAgIHNpbXBsaWZpZWQgPSBbXTtcblxuICAgIGlmICh0eXBlID09PSAnUG9pbnQnIHx8IHR5cGUgPT09ICdNdWx0aVBvaW50Jykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdlb20ubGVuZ3RoOyBpICs9IDMpIHtcbiAgICAgICAgICAgIHNpbXBsaWZpZWQucHVzaChnZW9tW2ldKTtcbiAgICAgICAgICAgIHNpbXBsaWZpZWQucHVzaChnZW9tW2kgKyAxXSk7XG4gICAgICAgICAgICB0aWxlLm51bVBvaW50cysrO1xuICAgICAgICAgICAgdGlsZS5udW1TaW1wbGlmaWVkKys7XG4gICAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ0xpbmVTdHJpbmcnKSB7XG4gICAgICAgIGFkZExpbmUoc2ltcGxpZmllZCwgZ2VvbSwgdGlsZSwgdG9sZXJhbmNlLCBmYWxzZSwgZmFsc2UpO1xuXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnTXVsdGlMaW5lU3RyaW5nJyB8fCB0eXBlID09PSAnUG9seWdvbicpIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGdlb20ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFkZExpbmUoc2ltcGxpZmllZCwgZ2VvbVtpXSwgdGlsZSwgdG9sZXJhbmNlLCB0eXBlID09PSAnUG9seWdvbicsIGkgPT09IDApO1xuICAgICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdNdWx0aVBvbHlnb24nKSB7XG5cbiAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBnZW9tLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICB2YXIgcG9seWdvbiA9IGdlb21ba107XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcG9seWdvbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGFkZExpbmUoc2ltcGxpZmllZCwgcG9seWdvbltpXSwgdGlsZSwgdG9sZXJhbmNlLCB0cnVlLCBpID09PSAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaW1wbGlmaWVkLmxlbmd0aCkge1xuICAgICAgICB2YXIgdGFncyA9IGZlYXR1cmUudGFncyB8fCBudWxsO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ0xpbmVTdHJpbmcnICYmIG9wdGlvbnMubGluZU1ldHJpY3MpIHtcbiAgICAgICAgICAgIHRhZ3MgPSB7fTtcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBmZWF0dXJlLnRhZ3MpIHRhZ3Nba2V5XSA9IGZlYXR1cmUudGFnc1trZXldO1xuICAgICAgICAgICAgdGFnc1snbWFwYm94X2NsaXBfc3RhcnQnXSA9IGdlb20uc3RhcnQgLyBnZW9tLnNpemU7XG4gICAgICAgICAgICB0YWdzWydtYXBib3hfY2xpcF9lbmQnXSA9IGdlb20uZW5kIC8gZ2VvbS5zaXplO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0aWxlRmVhdHVyZSA9IHtcbiAgICAgICAgICAgIGdlb21ldHJ5OiBzaW1wbGlmaWVkLFxuICAgICAgICAgICAgdHlwZTogdHlwZSA9PT0gJ1BvbHlnb24nIHx8IHR5cGUgPT09ICdNdWx0aVBvbHlnb24nID8gMyA6XG4gICAgICAgICAgICAgICAgdHlwZSA9PT0gJ0xpbmVTdHJpbmcnIHx8IHR5cGUgPT09ICdNdWx0aUxpbmVTdHJpbmcnID8gMiA6IDEsXG4gICAgICAgICAgICB0YWdzOiB0YWdzXG4gICAgICAgIH07XG4gICAgICAgIGlmIChmZWF0dXJlLmlkICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0aWxlRmVhdHVyZS5pZCA9IGZlYXR1cmUuaWQ7XG4gICAgICAgIH1cbiAgICAgICAgdGlsZS5mZWF0dXJlcy5wdXNoKHRpbGVGZWF0dXJlKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGFkZExpbmUocmVzdWx0LCBnZW9tLCB0aWxlLCB0b2xlcmFuY2UsIGlzUG9seWdvbiwgaXNPdXRlcikge1xuICAgIHZhciBzcVRvbGVyYW5jZSA9IHRvbGVyYW5jZSAqIHRvbGVyYW5jZTtcblxuICAgIGlmICh0b2xlcmFuY2UgPiAwICYmIChnZW9tLnNpemUgPCAoaXNQb2x5Z29uID8gc3FUb2xlcmFuY2UgOiB0b2xlcmFuY2UpKSkge1xuICAgICAgICB0aWxlLm51bVBvaW50cyArPSBnZW9tLmxlbmd0aCAvIDM7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcmluZyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBnZW9tLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgICAgIGlmICh0b2xlcmFuY2UgPT09IDAgfHwgZ2VvbVtpICsgMl0gPiBzcVRvbGVyYW5jZSkge1xuICAgICAgICAgICAgdGlsZS5udW1TaW1wbGlmaWVkKys7XG4gICAgICAgICAgICByaW5nLnB1c2goZ2VvbVtpXSk7XG4gICAgICAgICAgICByaW5nLnB1c2goZ2VvbVtpICsgMV0pO1xuICAgICAgICB9XG4gICAgICAgIHRpbGUubnVtUG9pbnRzKys7XG4gICAgfVxuXG4gICAgaWYgKGlzUG9seWdvbikgcmV3aW5kKHJpbmcsIGlzT3V0ZXIpO1xuXG4gICAgcmVzdWx0LnB1c2gocmluZyk7XG59XG5cbmZ1bmN0aW9uIHJld2luZChyaW5nLCBjbG9ja3dpc2UpIHtcbiAgICB2YXIgYXJlYSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHJpbmcubGVuZ3RoLCBqID0gbGVuIC0gMjsgaSA8IGxlbjsgaiA9IGksIGkgKz0gMikge1xuICAgICAgICBhcmVhICs9IChyaW5nW2ldIC0gcmluZ1tqXSkgKiAocmluZ1tpICsgMV0gKyByaW5nW2ogKyAxXSk7XG4gICAgfVxuICAgIGlmIChhcmVhID4gMCA9PT0gY2xvY2t3aXNlKSB7XG4gICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHJpbmcubGVuZ3RoOyBpIDwgbGVuIC8gMjsgaSArPSAyKSB7XG4gICAgICAgICAgICB2YXIgeCA9IHJpbmdbaV07XG4gICAgICAgICAgICB2YXIgeSA9IHJpbmdbaSArIDFdO1xuICAgICAgICAgICAgcmluZ1tpXSA9IHJpbmdbbGVuIC0gMiAtIGldO1xuICAgICAgICAgICAgcmluZ1tpICsgMV0gPSByaW5nW2xlbiAtIDEgLSBpXTtcbiAgICAgICAgICAgIHJpbmdbbGVuIC0gMiAtIGldID0geDtcbiAgICAgICAgICAgIHJpbmdbbGVuIC0gMSAtIGldID0geTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIlxuaW1wb3J0IGNvbnZlcnQgZnJvbSAnLi9jb252ZXJ0JzsgICAgIC8vIEdlb0pTT04gY29udmVyc2lvbiBhbmQgcHJlcHJvY2Vzc2luZ1xuaW1wb3J0IGNsaXAgZnJvbSAnLi9jbGlwJzsgICAgICAgICAgIC8vIHN0cmlwZSBjbGlwcGluZyBhbGdvcml0aG1cbmltcG9ydCB3cmFwIGZyb20gJy4vd3JhcCc7ICAgICAgICAgICAvLyBkYXRlIGxpbmUgcHJvY2Vzc2luZ1xuaW1wb3J0IHRyYW5zZm9ybSBmcm9tICcuL3RyYW5zZm9ybSc7IC8vIGNvb3JkaW5hdGUgdHJhbnNmb3JtYXRpb25cbmltcG9ydCBjcmVhdGVUaWxlIGZyb20gJy4vdGlsZSc7ICAgICAvLyBmaW5hbCBzaW1wbGlmaWVkIHRpbGUgZ2VuZXJhdGlvblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZW9qc29udnQoZGF0YSwgb3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgR2VvSlNPTlZUKGRhdGEsIG9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBHZW9KU09OVlQoZGF0YSwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMgPSBleHRlbmQoT2JqZWN0LmNyZWF0ZSh0aGlzLm9wdGlvbnMpLCBvcHRpb25zKTtcblxuICAgIHZhciBkZWJ1ZyA9IG9wdGlvbnMuZGVidWc7XG5cbiAgICBpZiAoZGVidWcpIGNvbnNvbGUudGltZSgncHJlcHJvY2VzcyBkYXRhJyk7XG5cbiAgICBpZiAob3B0aW9ucy5tYXhab29tIDwgMCB8fCBvcHRpb25zLm1heFpvb20gPiAyNCkgdGhyb3cgbmV3IEVycm9yKCdtYXhab29tIHNob3VsZCBiZSBpbiB0aGUgMC0yNCByYW5nZScpO1xuICAgIGlmIChvcHRpb25zLnByb21vdGVJZCAmJiBvcHRpb25zLmdlbmVyYXRlSWQpIHRocm93IG5ldyBFcnJvcigncHJvbW90ZUlkIGFuZCBnZW5lcmF0ZUlkIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyLicpO1xuXG4gICAgdmFyIGZlYXR1cmVzID0gY29udmVydChkYXRhLCBvcHRpb25zKTtcblxuICAgIHRoaXMudGlsZXMgPSB7fTtcbiAgICB0aGlzLnRpbGVDb29yZHMgPSBbXTtcblxuICAgIGlmIChkZWJ1Zykge1xuICAgICAgICBjb25zb2xlLnRpbWVFbmQoJ3ByZXByb2Nlc3MgZGF0YScpO1xuICAgICAgICBjb25zb2xlLmxvZygnaW5kZXg6IG1heFpvb206ICVkLCBtYXhQb2ludHM6ICVkJywgb3B0aW9ucy5pbmRleE1heFpvb20sIG9wdGlvbnMuaW5kZXhNYXhQb2ludHMpO1xuICAgICAgICBjb25zb2xlLnRpbWUoJ2dlbmVyYXRlIHRpbGVzJyk7XG4gICAgICAgIHRoaXMuc3RhdHMgPSB7fTtcbiAgICAgICAgdGhpcy50b3RhbCA9IDA7XG4gICAgfVxuXG4gICAgZmVhdHVyZXMgPSB3cmFwKGZlYXR1cmVzLCBvcHRpb25zKTtcblxuICAgIC8vIHN0YXJ0IHNsaWNpbmcgZnJvbSB0aGUgdG9wIHRpbGUgZG93blxuICAgIGlmIChmZWF0dXJlcy5sZW5ndGgpIHRoaXMuc3BsaXRUaWxlKGZlYXR1cmVzLCAwLCAwLCAwKTtcblxuICAgIGlmIChkZWJ1Zykge1xuICAgICAgICBpZiAoZmVhdHVyZXMubGVuZ3RoKSBjb25zb2xlLmxvZygnZmVhdHVyZXM6ICVkLCBwb2ludHM6ICVkJywgdGhpcy50aWxlc1swXS5udW1GZWF0dXJlcywgdGhpcy50aWxlc1swXS5udW1Qb2ludHMpO1xuICAgICAgICBjb25zb2xlLnRpbWVFbmQoJ2dlbmVyYXRlIHRpbGVzJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKCd0aWxlcyBnZW5lcmF0ZWQ6JywgdGhpcy50b3RhbCwgSlNPTi5zdHJpbmdpZnkodGhpcy5zdGF0cykpO1xuICAgIH1cbn1cblxuR2VvSlNPTlZULnByb3RvdHlwZS5vcHRpb25zID0ge1xuICAgIG1heFpvb206IDE0LCAgICAgICAgICAgIC8vIG1heCB6b29tIHRvIHByZXNlcnZlIGRldGFpbCBvblxuICAgIGluZGV4TWF4Wm9vbTogNSwgICAgICAgIC8vIG1heCB6b29tIGluIHRoZSB0aWxlIGluZGV4XG4gICAgaW5kZXhNYXhQb2ludHM6IDEwMDAwMCwgLy8gbWF4IG51bWJlciBvZiBwb2ludHMgcGVyIHRpbGUgaW4gdGhlIHRpbGUgaW5kZXhcbiAgICB0b2xlcmFuY2U6IDMsICAgICAgICAgICAvLyBzaW1wbGlmaWNhdGlvbiB0b2xlcmFuY2UgKGhpZ2hlciBtZWFucyBzaW1wbGVyKVxuICAgIGV4dGVudDogNDA5NiwgICAgICAgICAgIC8vIHRpbGUgZXh0ZW50XG4gICAgYnVmZmVyOiA2NCwgICAgICAgICAgICAgLy8gdGlsZSBidWZmZXIgb24gZWFjaCBzaWRlXG4gICAgbGluZU1ldHJpY3M6IGZhbHNlLCAgICAgLy8gd2hldGhlciB0byBjYWxjdWxhdGUgbGluZSBtZXRyaWNzXG4gICAgcHJvbW90ZUlkOiBudWxsLCAgICAgICAgLy8gbmFtZSBvZiBhIGZlYXR1cmUgcHJvcGVydHkgdG8gYmUgcHJvbW90ZWQgdG8gZmVhdHVyZS5pZFxuICAgIGdlbmVyYXRlSWQ6IGZhbHNlLCAgICAgIC8vIHdoZXRoZXIgdG8gZ2VuZXJhdGUgZmVhdHVyZSBpZHMuIENhbm5vdCBiZSB1c2VkIHdpdGggcHJvbW90ZUlkXG4gICAgZGVidWc6IDAgICAgICAgICAgICAgICAgLy8gbG9nZ2luZyBsZXZlbCAoMCwgMSBvciAyKVxufTtcblxuR2VvSlNPTlZULnByb3RvdHlwZS5zcGxpdFRpbGUgPSBmdW5jdGlvbiAoZmVhdHVyZXMsIHosIHgsIHksIGN6LCBjeCwgY3kpIHtcblxuICAgIHZhciBzdGFjayA9IFtmZWF0dXJlcywgeiwgeCwgeV0sXG4gICAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsXG4gICAgICAgIGRlYnVnID0gb3B0aW9ucy5kZWJ1ZztcblxuICAgIC8vIGF2b2lkIHJlY3Vyc2lvbiBieSB1c2luZyBhIHByb2Nlc3NpbmcgcXVldWVcbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoKSB7XG4gICAgICAgIHkgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgeCA9IHN0YWNrLnBvcCgpO1xuICAgICAgICB6ID0gc3RhY2sucG9wKCk7XG4gICAgICAgIGZlYXR1cmVzID0gc3RhY2sucG9wKCk7XG5cbiAgICAgICAgdmFyIHoyID0gMSA8PCB6LFxuICAgICAgICAgICAgaWQgPSB0b0lEKHosIHgsIHkpLFxuICAgICAgICAgICAgdGlsZSA9IHRoaXMudGlsZXNbaWRdO1xuXG4gICAgICAgIGlmICghdGlsZSkge1xuICAgICAgICAgICAgaWYgKGRlYnVnID4gMSkgY29uc29sZS50aW1lKCdjcmVhdGlvbicpO1xuXG4gICAgICAgICAgICB0aWxlID0gdGhpcy50aWxlc1tpZF0gPSBjcmVhdGVUaWxlKGZlYXR1cmVzLCB6LCB4LCB5LCBvcHRpb25zKTtcbiAgICAgICAgICAgIHRoaXMudGlsZUNvb3Jkcy5wdXNoKHt6OiB6LCB4OiB4LCB5OiB5fSk7XG5cbiAgICAgICAgICAgIGlmIChkZWJ1Zykge1xuICAgICAgICAgICAgICAgIGlmIChkZWJ1ZyA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3RpbGUgeiVkLSVkLSVkIChmZWF0dXJlczogJWQsIHBvaW50czogJWQsIHNpbXBsaWZpZWQ6ICVkKScsXG4gICAgICAgICAgICAgICAgICAgICAgICB6LCB4LCB5LCB0aWxlLm51bUZlYXR1cmVzLCB0aWxlLm51bVBvaW50cywgdGlsZS5udW1TaW1wbGlmaWVkKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS50aW1lRW5kKCdjcmVhdGlvbicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIga2V5ID0gJ3onICsgejtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRzW2tleV0gPSAodGhpcy5zdGF0c1trZXldIHx8IDApICsgMTtcbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzYXZlIHJlZmVyZW5jZSB0byBvcmlnaW5hbCBnZW9tZXRyeSBpbiB0aWxlIHNvIHRoYXQgd2UgY2FuIGRyaWxsIGRvd24gbGF0ZXIgaWYgd2Ugc3RvcCBub3dcbiAgICAgICAgdGlsZS5zb3VyY2UgPSBmZWF0dXJlcztcblxuICAgICAgICAvLyBpZiBpdCdzIHRoZSBmaXJzdC1wYXNzIHRpbGluZ1xuICAgICAgICBpZiAoIWN6KSB7XG4gICAgICAgICAgICAvLyBzdG9wIHRpbGluZyBpZiB3ZSByZWFjaGVkIG1heCB6b29tLCBvciBpZiB0aGUgdGlsZSBpcyB0b28gc2ltcGxlXG4gICAgICAgICAgICBpZiAoeiA9PT0gb3B0aW9ucy5pbmRleE1heFpvb20gfHwgdGlsZS5udW1Qb2ludHMgPD0gb3B0aW9ucy5pbmRleE1heFBvaW50cykgY29udGludWU7XG5cbiAgICAgICAgLy8gaWYgYSBkcmlsbGRvd24gdG8gYSBzcGVjaWZpYyB0aWxlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBzdG9wIHRpbGluZyBpZiB3ZSByZWFjaGVkIGJhc2Ugem9vbSBvciBvdXIgdGFyZ2V0IHRpbGUgem9vbVxuICAgICAgICAgICAgaWYgKHogPT09IG9wdGlvbnMubWF4Wm9vbSB8fCB6ID09PSBjeikgY29udGludWU7XG5cbiAgICAgICAgICAgIC8vIHN0b3AgdGlsaW5nIGlmIGl0J3Mgbm90IGFuIGFuY2VzdG9yIG9mIHRoZSB0YXJnZXQgdGlsZVxuICAgICAgICAgICAgdmFyIG0gPSAxIDw8IChjeiAtIHopO1xuICAgICAgICAgICAgaWYgKHggIT09IE1hdGguZmxvb3IoY3ggLyBtKSB8fCB5ICE9PSBNYXRoLmZsb29yKGN5IC8gbSkpIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgd2Ugc2xpY2UgZnVydGhlciBkb3duLCBubyBuZWVkIHRvIGtlZXAgc291cmNlIGdlb21ldHJ5XG4gICAgICAgIHRpbGUuc291cmNlID0gbnVsbDtcblxuICAgICAgICBpZiAoZmVhdHVyZXMubGVuZ3RoID09PSAwKSBjb250aW51ZTtcblxuICAgICAgICBpZiAoZGVidWcgPiAxKSBjb25zb2xlLnRpbWUoJ2NsaXBwaW5nJyk7XG5cbiAgICAgICAgLy8gdmFsdWVzIHdlJ2xsIHVzZSBmb3IgY2xpcHBpbmdcbiAgICAgICAgdmFyIGsxID0gMC41ICogb3B0aW9ucy5idWZmZXIgLyBvcHRpb25zLmV4dGVudCxcbiAgICAgICAgICAgIGsyID0gMC41IC0gazEsXG4gICAgICAgICAgICBrMyA9IDAuNSArIGsxLFxuICAgICAgICAgICAgazQgPSAxICsgazEsXG4gICAgICAgICAgICB0bCwgYmwsIHRyLCBiciwgbGVmdCwgcmlnaHQ7XG5cbiAgICAgICAgdGwgPSBibCA9IHRyID0gYnIgPSBudWxsO1xuXG4gICAgICAgIGxlZnQgID0gY2xpcChmZWF0dXJlcywgejIsIHggLSBrMSwgeCArIGszLCAwLCB0aWxlLm1pblgsIHRpbGUubWF4WCwgb3B0aW9ucyk7XG4gICAgICAgIHJpZ2h0ID0gY2xpcChmZWF0dXJlcywgejIsIHggKyBrMiwgeCArIGs0LCAwLCB0aWxlLm1pblgsIHRpbGUubWF4WCwgb3B0aW9ucyk7XG4gICAgICAgIGZlYXR1cmVzID0gbnVsbDtcblxuICAgICAgICBpZiAobGVmdCkge1xuICAgICAgICAgICAgdGwgPSBjbGlwKGxlZnQsIHoyLCB5IC0gazEsIHkgKyBrMywgMSwgdGlsZS5taW5ZLCB0aWxlLm1heFksIG9wdGlvbnMpO1xuICAgICAgICAgICAgYmwgPSBjbGlwKGxlZnQsIHoyLCB5ICsgazIsIHkgKyBrNCwgMSwgdGlsZS5taW5ZLCB0aWxlLm1heFksIG9wdGlvbnMpO1xuICAgICAgICAgICAgbGVmdCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmlnaHQpIHtcbiAgICAgICAgICAgIHRyID0gY2xpcChyaWdodCwgejIsIHkgLSBrMSwgeSArIGszLCAxLCB0aWxlLm1pblksIHRpbGUubWF4WSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBiciA9IGNsaXAocmlnaHQsIHoyLCB5ICsgazIsIHkgKyBrNCwgMSwgdGlsZS5taW5ZLCB0aWxlLm1heFksIG9wdGlvbnMpO1xuICAgICAgICAgICAgcmlnaHQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlYnVnID4gMSkgY29uc29sZS50aW1lRW5kKCdjbGlwcGluZycpO1xuXG4gICAgICAgIHN0YWNrLnB1c2godGwgfHwgW10sIHogKyAxLCB4ICogMiwgICAgIHkgKiAyKTtcbiAgICAgICAgc3RhY2sucHVzaChibCB8fCBbXSwgeiArIDEsIHggKiAyLCAgICAgeSAqIDIgKyAxKTtcbiAgICAgICAgc3RhY2sucHVzaCh0ciB8fCBbXSwgeiArIDEsIHggKiAyICsgMSwgeSAqIDIpO1xuICAgICAgICBzdGFjay5wdXNoKGJyIHx8IFtdLCB6ICsgMSwgeCAqIDIgKyAxLCB5ICogMiArIDEpO1xuICAgIH1cbn07XG5cbkdlb0pTT05WVC5wcm90b3R5cGUuZ2V0VGlsZSA9IGZ1bmN0aW9uICh6LCB4LCB5KSB7XG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsXG4gICAgICAgIGV4dGVudCA9IG9wdGlvbnMuZXh0ZW50LFxuICAgICAgICBkZWJ1ZyA9IG9wdGlvbnMuZGVidWc7XG5cbiAgICBpZiAoeiA8IDAgfHwgeiA+IDI0KSByZXR1cm4gbnVsbDtcblxuICAgIHZhciB6MiA9IDEgPDwgejtcbiAgICB4ID0gKCh4ICUgejIpICsgejIpICUgejI7IC8vIHdyYXAgdGlsZSB4IGNvb3JkaW5hdGVcblxuICAgIHZhciBpZCA9IHRvSUQoeiwgeCwgeSk7XG4gICAgaWYgKHRoaXMudGlsZXNbaWRdKSByZXR1cm4gdHJhbnNmb3JtKHRoaXMudGlsZXNbaWRdLCBleHRlbnQpO1xuXG4gICAgaWYgKGRlYnVnID4gMSkgY29uc29sZS5sb2coJ2RyaWxsaW5nIGRvd24gdG8geiVkLSVkLSVkJywgeiwgeCwgeSk7XG5cbiAgICB2YXIgejAgPSB6LFxuICAgICAgICB4MCA9IHgsXG4gICAgICAgIHkwID0geSxcbiAgICAgICAgcGFyZW50O1xuXG4gICAgd2hpbGUgKCFwYXJlbnQgJiYgejAgPiAwKSB7XG4gICAgICAgIHowLS07XG4gICAgICAgIHgwID0gTWF0aC5mbG9vcih4MCAvIDIpO1xuICAgICAgICB5MCA9IE1hdGguZmxvb3IoeTAgLyAyKTtcbiAgICAgICAgcGFyZW50ID0gdGhpcy50aWxlc1t0b0lEKHowLCB4MCwgeTApXTtcbiAgICB9XG5cbiAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LnNvdXJjZSkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyBpZiB3ZSBmb3VuZCBhIHBhcmVudCB0aWxlIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsIGdlb21ldHJ5LCB3ZSBjYW4gZHJpbGwgZG93biBmcm9tIGl0XG4gICAgaWYgKGRlYnVnID4gMSkgY29uc29sZS5sb2coJ2ZvdW5kIHBhcmVudCB0aWxlIHolZC0lZC0lZCcsIHowLCB4MCwgeTApO1xuXG4gICAgaWYgKGRlYnVnID4gMSkgY29uc29sZS50aW1lKCdkcmlsbGluZyBkb3duJyk7XG4gICAgdGhpcy5zcGxpdFRpbGUocGFyZW50LnNvdXJjZSwgejAsIHgwLCB5MCwgeiwgeCwgeSk7XG4gICAgaWYgKGRlYnVnID4gMSkgY29uc29sZS50aW1lRW5kKCdkcmlsbGluZyBkb3duJyk7XG5cbiAgICByZXR1cm4gdGhpcy50aWxlc1tpZF0gPyB0cmFuc2Zvcm0odGhpcy50aWxlc1tpZF0sIGV4dGVudCkgOiBudWxsO1xufTtcblxuZnVuY3Rpb24gdG9JRCh6LCB4LCB5KSB7XG4gICAgcmV0dXJuICgoKDEgPDwgeikgKiB5ICsgeCkgKiAzMikgKyB6O1xufVxuXG5mdW5jdGlvbiBleHRlbmQoZGVzdCwgc3JjKSB7XG4gICAgZm9yICh2YXIgaSBpbiBzcmMpIGRlc3RbaV0gPSBzcmNbaV07XG4gICAgcmV0dXJuIGRlc3Q7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2dldEpTT059IGZyb20gJy4uL3V0aWwvYWpheCc7XG5cbmltcG9ydCB7UmVxdWVzdFBlcmZvcm1hbmNlfSBmcm9tICcuLi91dGlsL3BlcmZvcm1hbmNlJztcbmltcG9ydCByZXdpbmQgZnJvbSAnQG1hcGJveC9nZW9qc29uLXJld2luZCc7XG5pbXBvcnQgR2VvSlNPTldyYXBwZXIgZnJvbSAnLi9nZW9qc29uX3dyYXBwZXInO1xuaW1wb3J0IHZ0cGJmIGZyb20gJ3Z0LXBiZic7XG5pbXBvcnQgU3VwZXJjbHVzdGVyIGZyb20gJ3N1cGVyY2x1c3Rlcic7XG5pbXBvcnQgZ2VvanNvbnZ0IGZyb20gJ2dlb2pzb24tdnQnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IFZlY3RvclRpbGVXb3JrZXJTb3VyY2UgZnJvbSAnLi92ZWN0b3JfdGlsZV93b3JrZXJfc291cmNlJztcbmltcG9ydCB7Y3JlYXRlRXhwcmVzc2lvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uJztcblxuaW1wb3J0IHR5cGUge1xuICAgIFdvcmtlclRpbGVQYXJhbWV0ZXJzLFxuICAgIFdvcmtlclRpbGVDYWxsYmFjayxcbn0gZnJvbSAnLi4vc291cmNlL3dvcmtlcl9zb3VyY2UnO1xuXG5pbXBvcnQgdHlwZSBBY3RvciBmcm9tICcuLi91dGlsL2FjdG9yJztcbmltcG9ydCB0eXBlIFN0eWxlTGF5ZXJJbmRleCBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllcl9pbmRleCc7XG5cbmltcG9ydCB0eXBlIHtMb2FkVmVjdG9yRGF0YUNhbGxiYWNrfSBmcm9tICcuL3ZlY3Rvcl90aWxlX3dvcmtlcl9zb3VyY2UnO1xuaW1wb3J0IHR5cGUge1JlcXVlc3RQYXJhbWV0ZXJzLCBSZXNwb25zZUNhbGxiYWNrfSBmcm9tICcuLi91dGlsL2FqYXgnO1xuaW1wb3J0IHR5cGUge0NhbGxiYWNrfSBmcm9tICcuLi90eXBlcy9jYWxsYmFjayc7XG5pbXBvcnQgdHlwZSB7R2VvSlNPTkZlYXR1cmV9IGZyb20gJ0BtYXBib3gvZ2VvanNvbi10eXBlcyc7XG5cbmV4cG9ydCB0eXBlIExvYWRHZW9KU09OUGFyYW1ldGVycyA9IHtcbiAgICByZXF1ZXN0PzogUmVxdWVzdFBhcmFtZXRlcnMsXG4gICAgZGF0YT86IHN0cmluZyxcbiAgICBzb3VyY2U6IHN0cmluZyxcbiAgICBjbHVzdGVyOiBib29sZWFuLFxuICAgIHN1cGVyY2x1c3Rlck9wdGlvbnM/OiBPYmplY3QsXG4gICAgZ2VvanNvblZ0T3B0aW9ucz86IE9iamVjdCxcbiAgICBjbHVzdGVyUHJvcGVydGllcz86IE9iamVjdFxufTtcblxuZXhwb3J0IHR5cGUgTG9hZEdlb0pTT04gPSAocGFyYW1zOiBMb2FkR2VvSlNPTlBhcmFtZXRlcnMsIGNhbGxiYWNrOiBSZXNwb25zZUNhbGxiYWNrPE9iamVjdD4pID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VvSlNPTkluZGV4IHtcbiAgICBnZXRUaWxlKHo6IG51bWJlciwgeDogbnVtYmVyLCB5OiBudW1iZXIpOiBPYmplY3Q7XG5cbiAgICAvLyBzdXBlcmNsdXN0ZXIgbWV0aG9kc1xuICAgIGdldENsdXN0ZXJFeHBhbnNpb25ab29tKGNsdXN0ZXJJZDogbnVtYmVyKTogbnVtYmVyO1xuICAgIGdldENoaWxkcmVuKGNsdXN0ZXJJZDogbnVtYmVyKTogQXJyYXk8R2VvSlNPTkZlYXR1cmU+O1xuICAgIGdldExlYXZlcyhjbHVzdGVySWQ6IG51bWJlciwgbGltaXQ6IG51bWJlciwgb2Zmc2V0OiBudW1iZXIpOiBBcnJheTxHZW9KU09ORmVhdHVyZT47XG59XG5cbmZ1bmN0aW9uIGxvYWRHZW9KU09OVGlsZShwYXJhbXM6IFdvcmtlclRpbGVQYXJhbWV0ZXJzLCBjYWxsYmFjazogTG9hZFZlY3RvckRhdGFDYWxsYmFjaykge1xuICAgIGNvbnN0IGNhbm9uaWNhbCA9IHBhcmFtcy50aWxlSUQuY2Fub25pY2FsO1xuXG4gICAgaWYgKCF0aGlzLl9nZW9KU09OSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIG51bGwpOyAgLy8gd2UgY291bGRuJ3QgbG9hZCB0aGUgZmlsZVxuICAgIH1cblxuICAgIGNvbnN0IGdlb0pTT05UaWxlID0gdGhpcy5fZ2VvSlNPTkluZGV4LmdldFRpbGUoY2Fub25pY2FsLnosIGNhbm9uaWNhbC54LCBjYW5vbmljYWwueSk7XG4gICAgaWYgKCFnZW9KU09OVGlsZSkge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgbnVsbCk7IC8vIG5vdGhpbmcgaW4gdGhlIGdpdmVuIHRpbGVcbiAgICB9XG5cbiAgICBjb25zdCBnZW9qc29uV3JhcHBlciA9IG5ldyBHZW9KU09OV3JhcHBlcihnZW9KU09OVGlsZS5mZWF0dXJlcyk7XG5cbiAgICAvLyBFbmNvZGUgdGhlIGdlb2pzb24tdnQgdGlsZSBpbnRvIGJpbmFyeSB2ZWN0b3IgdGlsZSBmb3JtLiAgVGhpc1xuICAgIC8vIGlzIGEgY29udmVuaWVuY2UgdGhhdCBhbGxvd3MgYEZlYXR1cmVJbmRleGAgdG8gb3BlcmF0ZSB0aGUgc2FtZSB3YXlcbiAgICAvLyBhY3Jvc3MgYFZlY3RvclRpbGVTb3VyY2VgIGFuZCBgR2VvSlNPTlNvdXJjZWAgZGF0YS5cbiAgICBsZXQgcGJmID0gdnRwYmYoZ2VvanNvbldyYXBwZXIpO1xuICAgIGlmIChwYmYuYnl0ZU9mZnNldCAhPT0gMCB8fCBwYmYuYnl0ZUxlbmd0aCAhPT0gcGJmLmJ1ZmZlci5ieXRlTGVuZ3RoKSB7XG4gICAgICAgIC8vIENvbXBhdGliaWxpdHkgd2l0aCBub2RlIEJ1ZmZlciAoaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9wYmYvaXNzdWVzLzM1KVxuICAgICAgICBwYmYgPSBuZXcgVWludDhBcnJheShwYmYpO1xuICAgIH1cblxuICAgIGNhbGxiYWNrKG51bGwsIHtcbiAgICAgICAgdmVjdG9yVGlsZTogZ2VvanNvbldyYXBwZXIsXG4gICAgICAgIHJhd0RhdGE6IHBiZi5idWZmZXJcbiAgICB9KTtcbn1cblxuZXhwb3J0IHR5cGUgU291cmNlU3RhdGUgPVxuICAgIHwgJ0lkbGUnICAgICAgICAgICAgLy8gU291cmNlIGVtcHR5IG9yIGRhdGEgbG9hZGVkXG4gICAgfCAnQ29hbGVzY2luZycgICAgICAvLyBEYXRhIGZpbmlzaGVkIGxvYWRpbmcsIGJ1dCBkaXNjYXJkICdsb2FkRGF0YScgbWVzc2FnZXMgdW50aWwgcmVjZWl2aW5nICdjb2FsZXNjZWQnXG4gICAgfCAnTmVlZHNMb2FkRGF0YSc7ICAvLyAnbG9hZERhdGEnIHJlY2VpdmVkIHdoaWxlIGNvYWxlc2NpbmcsIHRyaWdnZXIgb25lIG1vcmUgJ2xvYWREYXRhJyBvbiByZWNlaXZpbmcgJ2NvYWxlc2NlZCdcblxuLyoqXG4gKiBUaGUge0BsaW5rIFdvcmtlclNvdXJjZX0gaW1wbGVtZW50YXRpb24gdGhhdCBzdXBwb3J0cyB7QGxpbmsgR2VvSlNPTlNvdXJjZX0uXG4gKiBUaGlzIGNsYXNzIGlzIGRlc2lnbmVkIHRvIGJlIGVhc2lseSByZXVzZWQgdG8gc3VwcG9ydCBjdXN0b20gc291cmNlIHR5cGVzXG4gKiBmb3IgZGF0YSBmb3JtYXRzIHRoYXQgY2FuIGJlIHBhcnNlZC9jb252ZXJ0ZWQgaW50byBhbiBpbi1tZW1vcnkgR2VvSlNPTlxuICogcmVwcmVzZW50YXRpb24uICBUbyBkbyBzbywgY3JlYXRlIGl0IHdpdGhcbiAqIGBuZXcgR2VvSlNPTldvcmtlclNvdXJjZShhY3RvciwgbGF5ZXJJbmRleCwgY3VzdG9tTG9hZEdlb0pTT05GdW5jdGlvbilgLlxuICogRm9yIGEgZnVsbCBleGFtcGxlLCBzZWUgW21hcGJveC1nbC10b3BvanNvbl0oaHR0cHM6Ly9naXRodWIuY29tL2RldmVsb3BtZW50c2VlZC9tYXBib3gtZ2wtdG9wb2pzb24pLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIEdlb0pTT05Xb3JrZXJTb3VyY2UgZXh0ZW5kcyBWZWN0b3JUaWxlV29ya2VyU291cmNlIHtcbiAgICBsb2FkR2VvSlNPTjogTG9hZEdlb0pTT047XG4gICAgX3N0YXRlOiBTb3VyY2VTdGF0ZTtcbiAgICBfcGVuZGluZ0NhbGxiYWNrOiBDYWxsYmFjazx7XG4gICAgICAgIHJlc291cmNlVGltaW5nPzoge1tfOiBzdHJpbmddOiBBcnJheTxQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nPn0sXG4gICAgICAgIGFiYW5kb25lZD86IGJvb2xlYW4gfT47XG4gICAgX3BlbmRpbmdMb2FkRGF0YVBhcmFtczogTG9hZEdlb0pTT05QYXJhbWV0ZXJzO1xuICAgIF9nZW9KU09OSW5kZXg6IEdlb0pTT05JbmRleFxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIFtsb2FkR2VvSlNPTl0gT3B0aW9uYWwgbWV0aG9kIGZvciBjdXN0b20gbG9hZGluZy9wYXJzaW5nIG9mXG4gICAgICogR2VvSlNPTiBiYXNlZCBvbiBwYXJhbWV0ZXJzIHBhc3NlZCBmcm9tIHRoZSBtYWluLXRocmVhZCBTb3VyY2UuXG4gICAgICogU2VlIHtAbGluayBHZW9KU09OV29ya2VyU291cmNlI2xvYWRHZW9KU09OfS5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGFjdG9yOiBBY3RvciwgbGF5ZXJJbmRleDogU3R5bGVMYXllckluZGV4LCBhdmFpbGFibGVJbWFnZXM6IEFycmF5PHN0cmluZz4sIGxvYWRHZW9KU09OOiA/TG9hZEdlb0pTT04pIHtcbiAgICAgICAgc3VwZXIoYWN0b3IsIGxheWVySW5kZXgsIGF2YWlsYWJsZUltYWdlcywgbG9hZEdlb0pTT05UaWxlKTtcbiAgICAgICAgaWYgKGxvYWRHZW9KU09OKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRHZW9KU09OID0gbG9hZEdlb0pTT047XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGZXRjaGVzIChpZiBhcHByb3ByaWF0ZSksIHBhcnNlcywgYW5kIGluZGV4IGdlb2pzb24gZGF0YSBpbnRvIHRpbGVzLiBUaGlzXG4gICAgICogcHJlcGFyYXRvcnkgbWV0aG9kIG11c3QgYmUgY2FsbGVkIGJlZm9yZSB7QGxpbmsgR2VvSlNPTldvcmtlclNvdXJjZSNsb2FkVGlsZX1cbiAgICAgKiBjYW4gY29ycmVjdGx5IHNlcnZlIHVwIHRpbGVzLlxuICAgICAqXG4gICAgICogRGVmZXJzIHRvIHtAbGluayBHZW9KU09OV29ya2VyU291cmNlI2xvYWRHZW9KU09OfSBmb3IgdGhlIGZldGNoaW5nL3BhcnNpbmcsXG4gICAgICogZXhwZWN0aW5nIGBjYWxsYmFjayhlcnJvciwgZGF0YSlgIHRvIGJlIGNhbGxlZCB3aXRoIGVpdGhlciBhbiBlcnJvciBvciBhXG4gICAgICogcGFyc2VkIEdlb0pTT04gb2JqZWN0LlxuICAgICAqXG4gICAgICogV2hlbiBgbG9hZERhdGFgIHJlcXVlc3RzIGNvbWUgaW4gZmFzdGVyIHRoYW4gdGhleSBjYW4gYmUgcHJvY2Vzc2VkLFxuICAgICAqIHRoZXkgYXJlIGNvYWxlc2NlZCBpbnRvIGEgc2luZ2xlIHJlcXVlc3QgdXNpbmcgdGhlIGxhdGVzdCBkYXRhLlxuICAgICAqIFNlZSB7QGxpbmsgR2VvSlNPTldvcmtlclNvdXJjZSNjb2FsZXNjZX1cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYXJhbXNcbiAgICAgKiBAcGFyYW0gY2FsbGJhY2tcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGxvYWREYXRhKHBhcmFtczogTG9hZEdlb0pTT05QYXJhbWV0ZXJzLCBjYWxsYmFjazogQ2FsbGJhY2s8e1xuICAgICAgICByZXNvdXJjZVRpbWluZz86IHtbXzogc3RyaW5nXTogQXJyYXk8UGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZz59LFxuICAgICAgICBhYmFuZG9uZWQ/OiBib29sZWFuIH0+KSB7XG4gICAgICAgIGlmICh0aGlzLl9wZW5kaW5nQ2FsbGJhY2spIHtcbiAgICAgICAgICAgIC8vIFRlbGwgdGhlIGZvcmVncm91bmQgdGhlIHByZXZpb3VzIGNhbGwgaGFzIGJlZW4gYWJhbmRvbmVkXG4gICAgICAgICAgICB0aGlzLl9wZW5kaW5nQ2FsbGJhY2sobnVsbCwge2FiYW5kb25lZDogdHJ1ZX0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3BlbmRpbmdDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICB0aGlzLl9wZW5kaW5nTG9hZERhdGFQYXJhbXMgPSBwYXJhbXM7XG5cbiAgICAgICAgaWYgKHRoaXMuX3N0YXRlICYmXG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSAhPT0gJ0lkbGUnKSB7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdOZWVkc0xvYWREYXRhJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gJ0NvYWxlc2NpbmcnO1xuICAgICAgICAgICAgdGhpcy5fbG9hZERhdGEoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEludGVybmFsIGltcGxlbWVudGF0aW9uOiBjYWxsZWQgZGlyZWN0bHkgYnkgYGxvYWREYXRhYFxuICAgICAqIG9yIGJ5IGBjb2FsZXNjZWAgdXNpbmcgc3RvcmVkIHBhcmFtZXRlcnMuXG4gICAgICovXG4gICAgX2xvYWREYXRhKCkge1xuICAgICAgICBpZiAoIXRoaXMuX3BlbmRpbmdDYWxsYmFjayB8fCAhdGhpcy5fcGVuZGluZ0xvYWREYXRhUGFyYW1zKSB7XG4gICAgICAgICAgICBhc3NlcnQoZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNhbGxiYWNrID0gdGhpcy5fcGVuZGluZ0NhbGxiYWNrO1xuICAgICAgICBjb25zdCBwYXJhbXMgPSB0aGlzLl9wZW5kaW5nTG9hZERhdGFQYXJhbXM7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9wZW5kaW5nQ2FsbGJhY2s7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9wZW5kaW5nTG9hZERhdGFQYXJhbXM7XG5cbiAgICAgICAgY29uc3QgcGVyZiA9IChwYXJhbXMgJiYgcGFyYW1zLnJlcXVlc3QgJiYgcGFyYW1zLnJlcXVlc3QuY29sbGVjdFJlc291cmNlVGltaW5nKSA/XG4gICAgICAgICAgICBuZXcgUmVxdWVzdFBlcmZvcm1hbmNlKHBhcmFtcy5yZXF1ZXN0KSA6IGZhbHNlO1xuXG4gICAgICAgIHRoaXMubG9hZEdlb0pTT04ocGFyYW1zLCAoZXJyOiA/RXJyb3IsIGRhdGE6ID9PYmplY3QpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIgfHwgIWRhdGEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG5ldyBFcnJvcihgSW5wdXQgZGF0YSBnaXZlbiB0byAnJHtwYXJhbXMuc291cmNlfScgaXMgbm90IGEgdmFsaWQgR2VvSlNPTiBvYmplY3QuYCkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXdpbmQoZGF0YSwgdHJ1ZSk7XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZW9KU09OSW5kZXggPSBwYXJhbXMuY2x1c3RlciA/XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3VwZXJjbHVzdGVyKGdldFN1cGVyY2x1c3Rlck9wdGlvbnMocGFyYW1zKSkubG9hZChkYXRhLmZlYXR1cmVzKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICBnZW9qc29udnQoZGF0YSwgcGFyYW1zLmdlb2pzb25WdE9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRlZCA9IHt9O1xuXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgICAgICAgICAgaWYgKHBlcmYpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzb3VyY2VUaW1pbmdEYXRhID0gcGVyZi5maW5pc2goKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gaXQncyBuZWNlc3NhcnkgdG8gZXZhbCB0aGUgcmVzdWx0IG9mIGdldEVudHJpZXNCeU5hbWUoKSBoZXJlIHZpYSBwYXJzZS9zdHJpbmdpZnlcbiAgICAgICAgICAgICAgICAgICAgLy8gbGF0ZSBldmFsdWF0aW9uIGluIHRoZSBtYWluIHRocmVhZCBjYXVzZXMgVHlwZUVycm9yOiBpbGxlZ2FsIGludm9jYXRpb25cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc291cmNlVGltaW5nRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnJlc291cmNlVGltaW5nID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucmVzb3VyY2VUaW1pbmdbcGFyYW1zLnNvdXJjZV0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHJlc291cmNlVGltaW5nRGF0YSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoaWxlIHByb2Nlc3NpbmcgYGxvYWREYXRhYCwgd2UgY29hbGVzY2UgYWxsIGZ1cnRoZXJcbiAgICAgKiBgbG9hZERhdGFgIG1lc3NhZ2VzIGludG8gYSBzaW5nbGUgY2FsbCB0byBfbG9hZERhdGFcbiAgICAgKiB0aGF0IHdpbGwgaGFwcGVuIG9uY2Ugd2UndmUgZmluaXNoZWQgcHJvY2Vzc2luZyB0aGVcbiAgICAgKiBmaXJzdCBtZXNzYWdlLiB7QGxpbmsgR2VvSlNPTlNvdXJjZSNfdXBkYXRlV29ya2VyRGF0YX1cbiAgICAgKiBpcyByZXNwb25zaWJsZSBmb3Igc2VuZGluZyB1cyB0aGUgYGNvYWxlc2NlYCBtZXNzYWdlXG4gICAgICogYXQgdGhlIHRpbWUgaXQgcmVjZWl2ZXMgYSByZXNwb25zZSBmcm9tIGBsb2FkRGF0YWBcbiAgICAgKlxuICAgICAqICAgICAgICAgIFN0YXRlOiBJZGxlXG4gICAgICogICAgICAgICAgw6LChsKRICAgICAgICAgIHxcbiAgICAgKiAgICAgJ2NvYWxlc2NlJyAgICdsb2FkRGF0YSdcbiAgICAgKiAgICAgICAgICB8ICAgICAodHJpZ2dlcnMgbG9hZClcbiAgICAgKiAgICAgICAgICB8ICAgICAgICAgIMOiwobCk1xuICAgICAqICAgICAgICBTdGF0ZTogQ29hbGVzY2luZ1xuICAgICAqICAgICAgICAgIMOiwobCkSAgICAgICAgICB8XG4gICAgICogICAodHJpZ2dlcnMgbG9hZCkgICB8XG4gICAgICogICAgICdjb2FsZXNjZScgICAnbG9hZERhdGEnXG4gICAgICogICAgICAgICAgfCAgICAgICAgICDDosKGwpNcbiAgICAgKiAgICAgICAgU3RhdGU6IE5lZWRzTG9hZERhdGFcbiAgICAgKi9cbiAgICBjb2FsZXNjZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3N0YXRlID09PSAnQ29hbGVzY2luZycpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gJ0lkbGUnO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3N0YXRlID09PSAnTmVlZHNMb2FkRGF0YScpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gJ0NvYWxlc2NpbmcnO1xuICAgICAgICAgICAgdGhpcy5fbG9hZERhdGEoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICogSW1wbGVtZW50cyB7QGxpbmsgV29ya2VyU291cmNlI3JlbG9hZFRpbGV9LlxuICAgICpcbiAgICAqIElmIHRoZSB0aWxlIGlzIGxvYWRlZCwgdXNlcyB0aGUgaW1wbGVtZW50YXRpb24gaW4gVmVjdG9yVGlsZVdvcmtlclNvdXJjZS5cbiAgICAqIE90aGVyd2lzZSwgc3VjaCBhcyBhZnRlciBhIHNldERhdGEoKSBjYWxsLCB3ZSBsb2FkIHRoZSB0aWxlIGZyZXNoLlxuICAgICpcbiAgICAqIEBwYXJhbSBwYXJhbXNcbiAgICAqIEBwYXJhbSBwYXJhbXMudWlkIFRoZSBVSUQgZm9yIHRoaXMgdGlsZS5cbiAgICAqIEBwcml2YXRlXG4gICAgKi9cbiAgICByZWxvYWRUaWxlKHBhcmFtczogV29ya2VyVGlsZVBhcmFtZXRlcnMsIGNhbGxiYWNrOiBXb3JrZXJUaWxlQ2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgbG9hZGVkID0gdGhpcy5sb2FkZWQsXG4gICAgICAgICAgICB1aWQgPSBwYXJhbXMudWlkO1xuXG4gICAgICAgIGlmIChsb2FkZWQgJiYgbG9hZGVkW3VpZF0pIHtcbiAgICAgICAgICAgIHJldHVybiBzdXBlci5yZWxvYWRUaWxlKHBhcmFtcywgY2FsbGJhY2spO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZFRpbGUocGFyYW1zLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGZXRjaCBhbmQgcGFyc2UgR2VvSlNPTiBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIHBhcmFtcy4gIENhbGxzIGBjYWxsYmFja2BcbiAgICAgKiB3aXRoIGAoZXJyLCBkYXRhKWAsIHdoZXJlIGBkYXRhYCBpcyBhIHBhcnNlZCBHZW9KU09OIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEdlb0pTT04gaXMgbG9hZGVkIGFuZCBwYXJzZWQgZnJvbSBgcGFyYW1zLnVybGAgaWYgaXQgZXhpc3RzLCBvciBlbHNlXG4gICAgICogZXhwZWN0ZWQgYXMgYSBsaXRlcmFsIChzdHJpbmcgb3Igb2JqZWN0KSBgcGFyYW1zLmRhdGFgLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBhcmFtc1xuICAgICAqIEBwYXJhbSBbcGFyYW1zLnVybF0gQSBVUkwgdG8gdGhlIHJlbW90ZSBHZW9KU09OIGRhdGEuXG4gICAgICogQHBhcmFtIFtwYXJhbXMuZGF0YV0gTGl0ZXJhbCBHZW9KU09OIGRhdGEuIE11c3QgYmUgcHJvdmlkZWQgaWYgYHBhcmFtcy51cmxgIGlzIG5vdC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGxvYWRHZW9KU09OKHBhcmFtczogTG9hZEdlb0pTT05QYXJhbWV0ZXJzLCBjYWxsYmFjazogUmVzcG9uc2VDYWxsYmFjazxPYmplY3Q+KSB7XG4gICAgICAgIC8vIEJlY2F1c2Ugb2Ygc2FtZSBvcmlnaW4gaXNzdWVzLCB1cmxzIG11c3QgZWl0aGVyIGluY2x1ZGUgYW4gZXhwbGljaXRcbiAgICAgICAgLy8gb3JpZ2luIG9yIGFic29sdXRlIHBhdGguXG4gICAgICAgIC8vIGllOiAvZm9vL2Jhci5qc29uIG9yIGh0dHA6Ly9leGFtcGxlLmNvbS9iYXIuanNvblxuICAgICAgICAvLyBidXQgbm90IC4uL2Zvby9iYXIuanNvblxuICAgICAgICBpZiAocGFyYW1zLnJlcXVlc3QpIHtcbiAgICAgICAgICAgIGdldEpTT04ocGFyYW1zLnJlcXVlc3QsIGNhbGxiYWNrKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcGFyYW1zLmRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCBKU09OLnBhcnNlKHBhcmFtcy5kYXRhKSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG5ldyBFcnJvcihgSW5wdXQgZGF0YSBnaXZlbiB0byAnJHtwYXJhbXMuc291cmNlfScgaXMgbm90IGEgdmFsaWQgR2VvSlNPTiBvYmplY3QuYCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG5ldyBFcnJvcihgSW5wdXQgZGF0YSBnaXZlbiB0byAnJHtwYXJhbXMuc291cmNlfScgaXMgbm90IGEgdmFsaWQgR2VvSlNPTiBvYmplY3QuYCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVtb3ZlU291cmNlKHBhcmFtczoge3NvdXJjZTogc3RyaW5nfSwgY2FsbGJhY2s6IENhbGxiYWNrPG1peGVkPikge1xuICAgICAgICBpZiAodGhpcy5fcGVuZGluZ0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBEb24ndCBsZWFrIGNhbGxiYWNrc1xuICAgICAgICAgICAgdGhpcy5fcGVuZGluZ0NhbGxiYWNrKG51bGwsIHthYmFuZG9uZWQ6IHRydWV9KTtcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjaygpO1xuICAgIH1cblxuICAgIGdldENsdXN0ZXJFeHBhbnNpb25ab29tKHBhcmFtczoge2NsdXN0ZXJJZDogbnVtYmVyfSwgY2FsbGJhY2s6IENhbGxiYWNrPG51bWJlcj4pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHRoaXMuX2dlb0pTT05JbmRleC5nZXRDbHVzdGVyRXhwYW5zaW9uWm9vbShwYXJhbXMuY2x1c3RlcklkKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0Q2x1c3RlckNoaWxkcmVuKHBhcmFtczoge2NsdXN0ZXJJZDogbnVtYmVyfSwgY2FsbGJhY2s6IENhbGxiYWNrPEFycmF5PEdlb0pTT05GZWF0dXJlPj4pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHRoaXMuX2dlb0pTT05JbmRleC5nZXRDaGlsZHJlbihwYXJhbXMuY2x1c3RlcklkKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0Q2x1c3RlckxlYXZlcyhwYXJhbXM6IHtjbHVzdGVySWQ6IG51bWJlciwgbGltaXQ6IG51bWJlciwgb2Zmc2V0OiBudW1iZXJ9LCBjYWxsYmFjazogQ2FsbGJhY2s8QXJyYXk8R2VvSlNPTkZlYXR1cmU+Pikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgdGhpcy5fZ2VvSlNPTkluZGV4LmdldExlYXZlcyhwYXJhbXMuY2x1c3RlcklkLCBwYXJhbXMubGltaXQsIHBhcmFtcy5vZmZzZXQpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY2FsbGJhY2soZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGdldFN1cGVyY2x1c3Rlck9wdGlvbnMoe3N1cGVyY2x1c3Rlck9wdGlvbnMsIGNsdXN0ZXJQcm9wZXJ0aWVzfSkge1xuICAgIGlmICghY2x1c3RlclByb3BlcnRpZXMgfHwgIXN1cGVyY2x1c3Rlck9wdGlvbnMpIHJldHVybiBzdXBlcmNsdXN0ZXJPcHRpb25zO1xuXG4gICAgY29uc3QgbWFwRXhwcmVzc2lvbnMgPSB7fTtcbiAgICBjb25zdCByZWR1Y2VFeHByZXNzaW9ucyA9IHt9O1xuICAgIGNvbnN0IGdsb2JhbHMgPSB7YWNjdW11bGF0ZWQ6IG51bGwsIHpvb206IDB9O1xuICAgIGNvbnN0IGZlYXR1cmUgPSB7cHJvcGVydGllczogbnVsbH07XG4gICAgY29uc3QgcHJvcGVydHlOYW1lcyA9IE9iamVjdC5rZXlzKGNsdXN0ZXJQcm9wZXJ0aWVzKTtcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIHByb3BlcnR5TmFtZXMpIHtcbiAgICAgICAgY29uc3QgW29wZXJhdG9yLCBtYXBFeHByZXNzaW9uXSA9IGNsdXN0ZXJQcm9wZXJ0aWVzW2tleV07XG5cbiAgICAgICAgY29uc3QgbWFwRXhwcmVzc2lvblBhcnNlZCA9IGNyZWF0ZUV4cHJlc3Npb24obWFwRXhwcmVzc2lvbik7XG4gICAgICAgIGNvbnN0IHJlZHVjZUV4cHJlc3Npb25QYXJzZWQgPSBjcmVhdGVFeHByZXNzaW9uKFxuICAgICAgICAgICAgdHlwZW9mIG9wZXJhdG9yID09PSAnc3RyaW5nJyA/IFtvcGVyYXRvciwgWydhY2N1bXVsYXRlZCddLCBbJ2dldCcsIGtleV1dIDogb3BlcmF0b3IpO1xuXG4gICAgICAgIGFzc2VydChtYXBFeHByZXNzaW9uUGFyc2VkLnJlc3VsdCA9PT0gJ3N1Y2Nlc3MnKTtcbiAgICAgICAgYXNzZXJ0KHJlZHVjZUV4cHJlc3Npb25QYXJzZWQucmVzdWx0ID09PSAnc3VjY2VzcycpO1xuXG4gICAgICAgIG1hcEV4cHJlc3Npb25zW2tleV0gPSBtYXBFeHByZXNzaW9uUGFyc2VkLnZhbHVlO1xuICAgICAgICByZWR1Y2VFeHByZXNzaW9uc1trZXldID0gcmVkdWNlRXhwcmVzc2lvblBhcnNlZC52YWx1ZTtcbiAgICB9XG5cbiAgICBzdXBlcmNsdXN0ZXJPcHRpb25zLm1hcCA9IChwb2ludFByb3BlcnRpZXMpID0+IHtcbiAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzID0gcG9pbnRQcm9wZXJ0aWVzO1xuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0ge307XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHByb3BlcnR5TmFtZXMpIHtcbiAgICAgICAgICAgIHByb3BlcnRpZXNba2V5XSA9IG1hcEV4cHJlc3Npb25zW2tleV0uZXZhbHVhdGUoZ2xvYmFscywgZmVhdHVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gICAgfTtcbiAgICBzdXBlcmNsdXN0ZXJPcHRpb25zLnJlZHVjZSA9IChhY2N1bXVsYXRlZCwgY2x1c3RlclByb3BlcnRpZXMpID0+IHtcbiAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzID0gY2x1c3RlclByb3BlcnRpZXM7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHByb3BlcnR5TmFtZXMpIHtcbiAgICAgICAgICAgIGdsb2JhbHMuYWNjdW11bGF0ZWQgPSBhY2N1bXVsYXRlZFtrZXldO1xuICAgICAgICAgICAgYWNjdW11bGF0ZWRba2V5XSA9IHJlZHVjZUV4cHJlc3Npb25zW2tleV0uZXZhbHVhdGUoZ2xvYmFscywgZmVhdHVyZSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIHN1cGVyY2x1c3Rlck9wdGlvbnM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEdlb0pTT05Xb3JrZXJTb3VyY2U7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgQWN0b3IgZnJvbSAnLi4vdXRpbC9hY3Rvcic7XG5cbmltcG9ydCBTdHlsZUxheWVySW5kZXggZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXJfaW5kZXgnO1xuaW1wb3J0IFZlY3RvclRpbGVXb3JrZXJTb3VyY2UgZnJvbSAnLi92ZWN0b3JfdGlsZV93b3JrZXJfc291cmNlJztcbmltcG9ydCBSYXN0ZXJERU1UaWxlV29ya2VyU291cmNlIGZyb20gJy4vcmFzdGVyX2RlbV90aWxlX3dvcmtlcl9zb3VyY2UnO1xuaW1wb3J0IEdlb0pTT05Xb3JrZXJTb3VyY2UgZnJvbSAnLi9nZW9qc29uX3dvcmtlcl9zb3VyY2UnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHtwbHVnaW4gYXMgZ2xvYmFsUlRMVGV4dFBsdWdpbn0gZnJvbSAnLi9ydGxfdGV4dF9wbHVnaW4nO1xuaW1wb3J0IHtlbmZvcmNlQ2FjaGVTaXplTGltaXR9IGZyb20gJy4uL3V0aWwvdGlsZV9yZXF1ZXN0X2NhY2hlJztcblxuaW1wb3J0IHR5cGUge1xuICAgIFdvcmtlclNvdXJjZSxcbiAgICBXb3JrZXJUaWxlUGFyYW1ldGVycyxcbiAgICBXb3JrZXJERU1UaWxlUGFyYW1ldGVycyxcbiAgICBXb3JrZXJUaWxlQ2FsbGJhY2ssXG4gICAgV29ya2VyREVNVGlsZUNhbGxiYWNrLFxuICAgIFRpbGVQYXJhbWV0ZXJzXG59IGZyb20gJy4uL3NvdXJjZS93b3JrZXJfc291cmNlJztcblxuaW1wb3J0IHR5cGUge1dvcmtlckdsb2JhbFNjb3BlSW50ZXJmYWNlfSBmcm9tICcuLi91dGlsL3dlYl93b3JrZXInO1xuaW1wb3J0IHR5cGUge0NhbGxiYWNrfSBmcm9tICcuLi90eXBlcy9jYWxsYmFjayc7XG5pbXBvcnQgdHlwZSB7TGF5ZXJTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcbmltcG9ydCB0eXBlIHtQbHVnaW5TdGF0ZX0gZnJvbSAnLi9ydGxfdGV4dF9wbHVnaW4nO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdvcmtlciB7XG4gICAgc2VsZjogV29ya2VyR2xvYmFsU2NvcGVJbnRlcmZhY2U7XG4gICAgYWN0b3I6IEFjdG9yO1xuICAgIGxheWVySW5kZXhlczoge1tfOiBzdHJpbmddOiBTdHlsZUxheWVySW5kZXggfTtcbiAgICBhdmFpbGFibGVJbWFnZXM6IHtbXzogc3RyaW5nXTogQXJyYXk8c3RyaW5nPiB9O1xuICAgIHdvcmtlclNvdXJjZVR5cGVzOiB7W186IHN0cmluZ106IENsYXNzPFdvcmtlclNvdXJjZT4gfTtcbiAgICB3b3JrZXJTb3VyY2VzOiB7W186IHN0cmluZ106IHtbXzogc3RyaW5nXToge1tfOiBzdHJpbmddOiBXb3JrZXJTb3VyY2UgfSB9IH07XG4gICAgZGVtV29ya2VyU291cmNlczoge1tfOiBzdHJpbmddOiB7W186IHN0cmluZ106IFJhc3RlckRFTVRpbGVXb3JrZXJTb3VyY2UgfSB9O1xuICAgIHJlZmVycmVyOiA/c3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3Ioc2VsZjogV29ya2VyR2xvYmFsU2NvcGVJbnRlcmZhY2UpIHtcbiAgICAgICAgdGhpcy5zZWxmID0gc2VsZjtcbiAgICAgICAgdGhpcy5hY3RvciA9IG5ldyBBY3RvcihzZWxmLCB0aGlzKTtcblxuICAgICAgICB0aGlzLmxheWVySW5kZXhlcyA9IHt9O1xuICAgICAgICB0aGlzLmF2YWlsYWJsZUltYWdlcyA9IHt9O1xuXG4gICAgICAgIHRoaXMud29ya2VyU291cmNlVHlwZXMgPSB7XG4gICAgICAgICAgICB2ZWN0b3I6IFZlY3RvclRpbGVXb3JrZXJTb3VyY2UsXG4gICAgICAgICAgICBnZW9qc29uOiBHZW9KU09OV29ya2VyU291cmNlXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gW21hcElkXVtzb3VyY2VUeXBlXVtzb3VyY2VOYW1lXSA9PiB3b3JrZXIgc291cmNlIGluc3RhbmNlXG4gICAgICAgIHRoaXMud29ya2VyU291cmNlcyA9IHt9O1xuICAgICAgICB0aGlzLmRlbVdvcmtlclNvdXJjZXMgPSB7fTtcblxuICAgICAgICB0aGlzLnNlbGYucmVnaXN0ZXJXb3JrZXJTb3VyY2UgPSAobmFtZTogc3RyaW5nLCBXb3JrZXJTb3VyY2U6IENsYXNzPFdvcmtlclNvdXJjZT4pID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLndvcmtlclNvdXJjZVR5cGVzW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBXb3JrZXIgc291cmNlIHdpdGggbmFtZSBcIiR7bmFtZX1cIiBhbHJlYWR5IHJlZ2lzdGVyZWQuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLndvcmtlclNvdXJjZVR5cGVzW25hbWVdID0gV29ya2VyU291cmNlO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFRoaXMgaXMgaW52b2tlZCBieSB0aGUgUlRMIHRleHQgcGx1Z2luIHdoZW4gdGhlIGRvd25sb2FkIHZpYSB0aGUgYGltcG9ydFNjcmlwdHNgIGNhbGwgaGFzIGZpbmlzaGVkLCBhbmQgdGhlIGNvZGUgaGFzIGJlZW4gcGFyc2VkLlxuICAgICAgICB0aGlzLnNlbGYucmVnaXN0ZXJSVExUZXh0UGx1Z2luID0gKHJ0bFRleHRQbHVnaW46IHthcHBseUFyYWJpY1NoYXBpbmc6IEZ1bmN0aW9uLCBwcm9jZXNzQmlkaXJlY3Rpb25hbFRleHQ6IEZ1bmN0aW9uLCBwcm9jZXNzU3R5bGVkQmlkaXJlY3Rpb25hbFRleHQ/OiBGdW5jdGlvbn0pID0+IHtcbiAgICAgICAgICAgIGlmIChnbG9iYWxSVExUZXh0UGx1Z2luLmlzUGFyc2VkKCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JUTCB0ZXh0IHBsdWdpbiBhbHJlYWR5IHJlZ2lzdGVyZWQuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBnbG9iYWxSVExUZXh0UGx1Z2luWydhcHBseUFyYWJpY1NoYXBpbmcnXSA9IHJ0bFRleHRQbHVnaW4uYXBwbHlBcmFiaWNTaGFwaW5nO1xuICAgICAgICAgICAgZ2xvYmFsUlRMVGV4dFBsdWdpblsncHJvY2Vzc0JpZGlyZWN0aW9uYWxUZXh0J10gPSBydGxUZXh0UGx1Z2luLnByb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dDtcbiAgICAgICAgICAgIGdsb2JhbFJUTFRleHRQbHVnaW5bJ3Byb2Nlc3NTdHlsZWRCaWRpcmVjdGlvbmFsVGV4dCddID0gcnRsVGV4dFBsdWdpbi5wcm9jZXNzU3R5bGVkQmlkaXJlY3Rpb25hbFRleHQ7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgc2V0UmVmZXJyZXIobWFwSUQ6IHN0cmluZywgcmVmZXJyZXI6IHN0cmluZykge1xuICAgICAgICB0aGlzLnJlZmVycmVyID0gcmVmZXJyZXI7XG4gICAgfVxuXG4gICAgc2V0SW1hZ2VzKG1hcElkOiBzdHJpbmcsIGltYWdlczogQXJyYXk8c3RyaW5nPiwgY2FsbGJhY2s6IFdvcmtlclRpbGVDYWxsYmFjaykge1xuICAgICAgICB0aGlzLmF2YWlsYWJsZUltYWdlc1ttYXBJZF0gPSBpbWFnZXM7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgc2V0TGF5ZXJzKG1hcElkOiBzdHJpbmcsIGxheWVyczogQXJyYXk8TGF5ZXJTcGVjaWZpY2F0aW9uPiwgY2FsbGJhY2s6IFdvcmtlclRpbGVDYWxsYmFjaykge1xuICAgICAgICB0aGlzLmdldExheWVySW5kZXgobWFwSWQpLnJlcGxhY2UobGF5ZXJzKTtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG5cbiAgICB1cGRhdGVMYXllcnMobWFwSWQ6IHN0cmluZywgcGFyYW1zOiB7bGF5ZXJzOiBBcnJheTxMYXllclNwZWNpZmljYXRpb24+LCByZW1vdmVkSWRzOiBBcnJheTxzdHJpbmc+fSwgY2FsbGJhY2s6IFdvcmtlclRpbGVDYWxsYmFjaykge1xuICAgICAgICB0aGlzLmdldExheWVySW5kZXgobWFwSWQpLnVwZGF0ZShwYXJhbXMubGF5ZXJzLCBwYXJhbXMucmVtb3ZlZElkcyk7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgbG9hZFRpbGUobWFwSWQ6IHN0cmluZywgcGFyYW1zOiBXb3JrZXJUaWxlUGFyYW1ldGVycyAmIHt0eXBlOiBzdHJpbmd9LCBjYWxsYmFjazogV29ya2VyVGlsZUNhbGxiYWNrKSB7XG4gICAgICAgIGFzc2VydChwYXJhbXMudHlwZSk7XG4gICAgICAgIHRoaXMuZ2V0V29ya2VyU291cmNlKG1hcElkLCBwYXJhbXMudHlwZSwgcGFyYW1zLnNvdXJjZSkubG9hZFRpbGUocGFyYW1zLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgbG9hZERFTVRpbGUobWFwSWQ6IHN0cmluZywgcGFyYW1zOiBXb3JrZXJERU1UaWxlUGFyYW1ldGVycywgY2FsbGJhY2s6IFdvcmtlckRFTVRpbGVDYWxsYmFjaykge1xuICAgICAgICB0aGlzLmdldERFTVdvcmtlclNvdXJjZShtYXBJZCwgcGFyYW1zLnNvdXJjZSkubG9hZFRpbGUocGFyYW1zLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcmVsb2FkVGlsZShtYXBJZDogc3RyaW5nLCBwYXJhbXM6IFdvcmtlclRpbGVQYXJhbWV0ZXJzICYge3R5cGU6IHN0cmluZ30sIGNhbGxiYWNrOiBXb3JrZXJUaWxlQ2FsbGJhY2spIHtcbiAgICAgICAgYXNzZXJ0KHBhcmFtcy50eXBlKTtcbiAgICAgICAgdGhpcy5nZXRXb3JrZXJTb3VyY2UobWFwSWQsIHBhcmFtcy50eXBlLCBwYXJhbXMuc291cmNlKS5yZWxvYWRUaWxlKHBhcmFtcywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIGFib3J0VGlsZShtYXBJZDogc3RyaW5nLCBwYXJhbXM6IFRpbGVQYXJhbWV0ZXJzICYge3R5cGU6IHN0cmluZ30sIGNhbGxiYWNrOiBXb3JrZXJUaWxlQ2FsbGJhY2spIHtcbiAgICAgICAgYXNzZXJ0KHBhcmFtcy50eXBlKTtcbiAgICAgICAgdGhpcy5nZXRXb3JrZXJTb3VyY2UobWFwSWQsIHBhcmFtcy50eXBlLCBwYXJhbXMuc291cmNlKS5hYm9ydFRpbGUocGFyYW1zLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcmVtb3ZlVGlsZShtYXBJZDogc3RyaW5nLCBwYXJhbXM6IFRpbGVQYXJhbWV0ZXJzICYge3R5cGU6IHN0cmluZ30sIGNhbGxiYWNrOiBXb3JrZXJUaWxlQ2FsbGJhY2spIHtcbiAgICAgICAgYXNzZXJ0KHBhcmFtcy50eXBlKTtcbiAgICAgICAgdGhpcy5nZXRXb3JrZXJTb3VyY2UobWFwSWQsIHBhcmFtcy50eXBlLCBwYXJhbXMuc291cmNlKS5yZW1vdmVUaWxlKHBhcmFtcywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHJlbW92ZURFTVRpbGUobWFwSWQ6IHN0cmluZywgcGFyYW1zOiBUaWxlUGFyYW1ldGVycykge1xuICAgICAgICB0aGlzLmdldERFTVdvcmtlclNvdXJjZShtYXBJZCwgcGFyYW1zLnNvdXJjZSkucmVtb3ZlVGlsZShwYXJhbXMpO1xuICAgIH1cblxuICAgIHJlbW92ZVNvdXJjZShtYXBJZDogc3RyaW5nLCBwYXJhbXM6IHtzb3VyY2U6IHN0cmluZ30gJiB7dHlwZTogc3RyaW5nfSwgY2FsbGJhY2s6IFdvcmtlclRpbGVDYWxsYmFjaykge1xuICAgICAgICBhc3NlcnQocGFyYW1zLnR5cGUpO1xuICAgICAgICBhc3NlcnQocGFyYW1zLnNvdXJjZSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLndvcmtlclNvdXJjZXNbbWFwSWRdIHx8XG4gICAgICAgICAgICAhdGhpcy53b3JrZXJTb3VyY2VzW21hcElkXVtwYXJhbXMudHlwZV0gfHxcbiAgICAgICAgICAgICF0aGlzLndvcmtlclNvdXJjZXNbbWFwSWRdW3BhcmFtcy50eXBlXVtwYXJhbXMuc291cmNlXSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgd29ya2VyID0gdGhpcy53b3JrZXJTb3VyY2VzW21hcElkXVtwYXJhbXMudHlwZV1bcGFyYW1zLnNvdXJjZV07XG4gICAgICAgIGRlbGV0ZSB0aGlzLndvcmtlclNvdXJjZXNbbWFwSWRdW3BhcmFtcy50eXBlXVtwYXJhbXMuc291cmNlXTtcblxuICAgICAgICBpZiAod29ya2VyLnJlbW92ZVNvdXJjZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB3b3JrZXIucmVtb3ZlU291cmNlKHBhcmFtcywgY2FsbGJhY2spO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvYWQgYSB7QGxpbmsgV29ya2VyU291cmNlfSBzY3JpcHQgYXQgcGFyYW1zLnVybC4gIFRoZSBzY3JpcHQgaXMgcnVuXG4gICAgICogKHVzaW5nIGltcG9ydFNjcmlwdHMpIHdpdGggYHJlZ2lzdGVyV29ya2VyU291cmNlYCBpbiBzY29wZSwgd2hpY2ggaXMgYVxuICAgICAqIGZ1bmN0aW9uIHRha2luZyBgKG5hbWUsIHdvcmtlclNvdXJjZU9iamVjdClgLlxuICAgICAqICBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGxvYWRXb3JrZXJTb3VyY2UobWFwOiBzdHJpbmcsIHBhcmFtczogeyB1cmw6IHN0cmluZyB9LCBjYWxsYmFjazogQ2FsbGJhY2s8dm9pZD4pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZi5pbXBvcnRTY3JpcHRzKHBhcmFtcy51cmwpO1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY2FsbGJhY2soZS50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN5bmNSVExQbHVnaW5TdGF0ZShtYXA6IHN0cmluZywgc3RhdGU6IFBsdWdpblN0YXRlLCBjYWxsYmFjazogQ2FsbGJhY2s8Ym9vbGVhbj4pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGdsb2JhbFJUTFRleHRQbHVnaW4uc2V0U3RhdGUoc3RhdGUpO1xuICAgICAgICAgICAgY29uc3QgcGx1Z2luVVJMID0gZ2xvYmFsUlRMVGV4dFBsdWdpbi5nZXRQbHVnaW5VUkwoKTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBnbG9iYWxSVExUZXh0UGx1Z2luLmlzTG9hZGVkKCkgJiZcbiAgICAgICAgICAgICAgICAhZ2xvYmFsUlRMVGV4dFBsdWdpbi5pc1BhcnNlZCgpICYmXG4gICAgICAgICAgICAgICAgcGx1Z2luVVJMICE9IG51bGwgLy8gTm90IHBvc3NpYmxlIHdoZW4gYGlzTG9hZGVkYCBpcyB0cnVlLCBidXQga2VlcHMgZmxvdyBoYXBweVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxmLmltcG9ydFNjcmlwdHMocGx1Z2luVVJMKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21wbGV0ZSA9IGdsb2JhbFJUTFRleHRQbHVnaW4uaXNQYXJzZWQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IGNvbXBsZXRlID8gdW5kZWZpbmVkIDogbmV3IEVycm9yKGBSVEwgVGV4dCBQbHVnaW4gZmFpbGVkIHRvIGltcG9ydCBzY3JpcHRzIGZyb20gJHtwbHVnaW5VUkx9YCk7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IsIGNvbXBsZXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY2FsbGJhY2soZS50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEF2YWlsYWJsZUltYWdlcyhtYXBJZDogc3RyaW5nKSB7XG4gICAgICAgIGxldCBhdmFpbGFibGVJbWFnZXMgPSB0aGlzLmF2YWlsYWJsZUltYWdlc1ttYXBJZF07XG5cbiAgICAgICAgaWYgKCFhdmFpbGFibGVJbWFnZXMpIHtcbiAgICAgICAgICAgIGF2YWlsYWJsZUltYWdlcyA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGF2YWlsYWJsZUltYWdlcztcbiAgICB9XG5cbiAgICBnZXRMYXllckluZGV4KG1hcElkOiBzdHJpbmcpIHtcbiAgICAgICAgbGV0IGxheWVySW5kZXhlcyA9IHRoaXMubGF5ZXJJbmRleGVzW21hcElkXTtcbiAgICAgICAgaWYgKCFsYXllckluZGV4ZXMpIHtcbiAgICAgICAgICAgIGxheWVySW5kZXhlcyA9IHRoaXMubGF5ZXJJbmRleGVzW21hcElkXSA9IG5ldyBTdHlsZUxheWVySW5kZXgoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGF5ZXJJbmRleGVzO1xuICAgIH1cblxuICAgIGdldFdvcmtlclNvdXJjZShtYXBJZDogc3RyaW5nLCB0eXBlOiBzdHJpbmcsIHNvdXJjZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICghdGhpcy53b3JrZXJTb3VyY2VzW21hcElkXSlcbiAgICAgICAgICAgIHRoaXMud29ya2VyU291cmNlc1ttYXBJZF0gPSB7fTtcbiAgICAgICAgaWYgKCF0aGlzLndvcmtlclNvdXJjZXNbbWFwSWRdW3R5cGVdKVxuICAgICAgICAgICAgdGhpcy53b3JrZXJTb3VyY2VzW21hcElkXVt0eXBlXSA9IHt9O1xuXG4gICAgICAgIGlmICghdGhpcy53b3JrZXJTb3VyY2VzW21hcElkXVt0eXBlXVtzb3VyY2VdKSB7XG4gICAgICAgICAgICAvLyB1c2UgYSB3cmFwcGVkIGFjdG9yIHNvIHRoYXQgd2UgY2FuIGF0dGFjaCBhIHRhcmdldCBtYXBJZCBwYXJhbVxuICAgICAgICAgICAgLy8gdG8gYW55IG1lc3NhZ2VzIGludm9rZWQgYnkgdGhlIFdvcmtlclNvdXJjZVxuICAgICAgICAgICAgY29uc3QgYWN0b3IgPSB7XG4gICAgICAgICAgICAgICAgc2VuZDogKHR5cGUsIGRhdGEsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0b3Iuc2VuZCh0eXBlLCBkYXRhLCBjYWxsYmFjaywgbWFwSWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLndvcmtlclNvdXJjZXNbbWFwSWRdW3R5cGVdW3NvdXJjZV0gPSBuZXcgKHRoaXMud29ya2VyU291cmNlVHlwZXNbdHlwZV06IGFueSkoKGFjdG9yOiBhbnkpLCB0aGlzLmdldExheWVySW5kZXgobWFwSWQpLCB0aGlzLmdldEF2YWlsYWJsZUltYWdlcyhtYXBJZCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMud29ya2VyU291cmNlc1ttYXBJZF1bdHlwZV1bc291cmNlXTtcbiAgICB9XG5cbiAgICBnZXRERU1Xb3JrZXJTb3VyY2UobWFwSWQ6IHN0cmluZywgc291cmNlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRlbVdvcmtlclNvdXJjZXNbbWFwSWRdKVxuICAgICAgICAgICAgdGhpcy5kZW1Xb3JrZXJTb3VyY2VzW21hcElkXSA9IHt9O1xuXG4gICAgICAgIGlmICghdGhpcy5kZW1Xb3JrZXJTb3VyY2VzW21hcElkXVtzb3VyY2VdKSB7XG4gICAgICAgICAgICB0aGlzLmRlbVdvcmtlclNvdXJjZXNbbWFwSWRdW3NvdXJjZV0gPSBuZXcgUmFzdGVyREVNVGlsZVdvcmtlclNvdXJjZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVtV29ya2VyU291cmNlc1ttYXBJZF1bc291cmNlXTtcbiAgICB9XG5cbiAgICBlbmZvcmNlQ2FjaGVTaXplTGltaXQobWFwSWQ6IHN0cmluZywgbGltaXQ6IG51bWJlcikge1xuICAgICAgICBlbmZvcmNlQ2FjaGVTaXplTGltaXQobGltaXQpO1xuICAgIH1cbn1cblxuLyogZ2xvYmFsIHNlbGYsIFdvcmtlckdsb2JhbFNjb3BlICovXG5pZiAodHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSkge1xuICAgIHNlbGYud29ya2VyID0gbmV3IFdvcmtlcihzZWxmKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBpc1N1cHBvcnRlZDtcbn0gZWxzZSBpZiAod2luZG93KSB7XG4gICAgd2luZG93Lm1hcGJveGdsID0gd2luZG93Lm1hcGJveGdsIHx8IHt9O1xuICAgIHdpbmRvdy5tYXBib3hnbC5zdXBwb3J0ZWQgPSBpc1N1cHBvcnRlZDtcbiAgICB3aW5kb3cubWFwYm94Z2wubm90U3VwcG9ydGVkUmVhc29uID0gbm90U3VwcG9ydGVkUmVhc29uO1xufVxuXG4vKipcbiAqIFRlc3Qgd2hldGhlciB0aGUgY3VycmVudCBicm93c2VyIHN1cHBvcnRzIE1hcGJveCBHTCBKU1xuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdD1mYWxzZV0gUmV0dXJuIGBmYWxzZWBcbiAqICAgaWYgdGhlIHBlcmZvcm1hbmNlIG9mIE1hcGJveCBHTCBKUyB3b3VsZCBiZSBkcmFtYXRpY2FsbHkgd29yc2UgdGhhblxuICogICBleHBlY3RlZCAoaS5lLiBhIHNvZnR3YXJlIHJlbmRlcmVyIGlzIHdvdWxkIGJlIHVzZWQpXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1N1cHBvcnRlZChvcHRpb25zKSB7XG4gICAgcmV0dXJuICFub3RTdXBwb3J0ZWRSZWFzb24ob3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIG5vdFN1cHBvcnRlZFJlYXNvbihvcHRpb25zKSB7XG4gICAgaWYgKCFpc0Jyb3dzZXIoKSkgcmV0dXJuICdub3QgYSBicm93c2VyJztcbiAgICBpZiAoIWlzQXJyYXlTdXBwb3J0ZWQoKSkgcmV0dXJuICdpbnN1ZmZpY2VudCBBcnJheSBzdXBwb3J0JztcbiAgICBpZiAoIWlzRnVuY3Rpb25TdXBwb3J0ZWQoKSkgcmV0dXJuICdpbnN1ZmZpY2llbnQgRnVuY3Rpb24gc3VwcG9ydCc7XG4gICAgaWYgKCFpc09iamVjdFN1cHBvcnRlZCgpKSByZXR1cm4gJ2luc3VmZmljaWVudCBPYmplY3Qgc3VwcG9ydCc7XG4gICAgaWYgKCFpc0pTT05TdXBwb3J0ZWQoKSkgcmV0dXJuICdpbnN1ZmZpY2llbnQgSlNPTiBzdXBwb3J0JztcbiAgICBpZiAoIWlzV29ya2VyU3VwcG9ydGVkKCkpIHJldHVybiAnaW5zdWZmaWNpZW50IHdvcmtlciBzdXBwb3J0JztcbiAgICBpZiAoIWlzVWludDhDbGFtcGVkQXJyYXlTdXBwb3J0ZWQoKSkgcmV0dXJuICdpbnN1ZmZpY2llbnQgVWludDhDbGFtcGVkQXJyYXkgc3VwcG9ydCc7XG4gICAgaWYgKCFpc0FycmF5QnVmZmVyU3VwcG9ydGVkKCkpIHJldHVybiAnaW5zdWZmaWNpZW50IEFycmF5QnVmZmVyIHN1cHBvcnQnO1xuICAgIGlmICghaXNDYW52YXNHZXRJbWFnZURhdGFTdXBwb3J0ZWQoKSkgcmV0dXJuICdpbnN1ZmZpY2llbnQgQ2FudmFzL2dldEltYWdlRGF0YSBzdXBwb3J0JztcbiAgICBpZiAoIWlzV2ViR0xTdXBwb3J0ZWRDYWNoZWQob3B0aW9ucyAmJiBvcHRpb25zLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQpKSByZXR1cm4gJ2luc3VmZmljaWVudCBXZWJHTCBzdXBwb3J0Jztcbn1cblxuZnVuY3Rpb24gaXNCcm93c2VyKCkge1xuICAgIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xufVxuXG5mdW5jdGlvbiBpc0FycmF5U3VwcG9ydGVkKCkge1xuICAgIHJldHVybiAoXG4gICAgICAgIEFycmF5LnByb3RvdHlwZSAmJlxuICAgICAgICBBcnJheS5wcm90b3R5cGUuZXZlcnkgJiZcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLmZpbHRlciAmJlxuICAgICAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaCAmJlxuICAgICAgICBBcnJheS5wcm90b3R5cGUuaW5kZXhPZiAmJlxuICAgICAgICBBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YgJiZcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLm1hcCAmJlxuICAgICAgICBBcnJheS5wcm90b3R5cGUuc29tZSAmJlxuICAgICAgICBBcnJheS5wcm90b3R5cGUucmVkdWNlICYmXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodCAmJlxuICAgICAgICBBcnJheS5pc0FycmF5XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gaXNGdW5jdGlvblN1cHBvcnRlZCgpIHtcbiAgICByZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlICYmIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO1xufVxuXG5mdW5jdGlvbiBpc09iamVjdFN1cHBvcnRlZCgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgICBPYmplY3Qua2V5cyAmJlxuICAgICAgICBPYmplY3QuY3JlYXRlICYmXG4gICAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZiAmJlxuICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyAmJlxuICAgICAgICBPYmplY3QuaXNTZWFsZWQgJiZcbiAgICAgICAgT2JqZWN0LmlzRnJvemVuICYmXG4gICAgICAgIE9iamVjdC5pc0V4dGVuc2libGUgJiZcbiAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJlxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiZcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgJiZcbiAgICAgICAgT2JqZWN0LnNlYWwgJiZcbiAgICAgICAgT2JqZWN0LmZyZWV6ZSAmJlxuICAgICAgICBPYmplY3QucHJldmVudEV4dGVuc2lvbnNcbiAgICApO1xufVxuXG5mdW5jdGlvbiBpc0pTT05TdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuICdKU09OJyBpbiB3aW5kb3cgJiYgJ3BhcnNlJyBpbiBKU09OICYmICdzdHJpbmdpZnknIGluIEpTT047XG59XG5cbmZ1bmN0aW9uIGlzV29ya2VyU3VwcG9ydGVkKCkge1xuICAgIGlmICghKCdXb3JrZXInIGluIHdpbmRvdyAmJiAnQmxvYicgaW4gd2luZG93ICYmICdVUkwnIGluIHdpbmRvdykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBibG9iID0gbmV3IEJsb2IoWycnXSwgeyB0eXBlOiAndGV4dC9qYXZhc2NyaXB0JyB9KTtcbiAgICB2YXIgd29ya2VyVVJMID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICB2YXIgc3VwcG9ydGVkO1xuICAgIHZhciB3b3JrZXI7XG5cbiAgICB0cnkge1xuICAgICAgICB3b3JrZXIgPSBuZXcgV29ya2VyKHdvcmtlclVSTCk7XG4gICAgICAgIHN1cHBvcnRlZCA9IHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBzdXBwb3J0ZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAod29ya2VyKSB7XG4gICAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICB9XG4gICAgVVJMLnJldm9rZU9iamVjdFVSTCh3b3JrZXJVUkwpO1xuXG4gICAgcmV0dXJuIHN1cHBvcnRlZDtcbn1cblxuLy8gSUUxMSBvbmx5IHN1cHBvcnRzIGBVaW50OENsYW1wZWRBcnJheWAgYXMgb2YgdmVyc2lvblxuLy8gW0tCMjkyOTQzN10oaHR0cHM6Ly9zdXBwb3J0Lm1pY3Jvc29mdC5jb20vZW4tdXMva2IvMjkyOTQzNylcbmZ1bmN0aW9uIGlzVWludDhDbGFtcGVkQXJyYXlTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuICdVaW50OENsYW1wZWRBcnJheScgaW4gd2luZG93O1xufVxuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1zdXBwb3J0ZWQvaXNzdWVzLzE5XG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyU3VwcG9ydGVkKCkge1xuICAgIHJldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXc7XG59XG5cbi8vIFNvbWUgYnJvd3NlcnMgb3IgYnJvd3NlciBleHRlbnNpb25zIGJsb2NrIGFjY2VzcyB0byBjYW52YXMgZGF0YSB0byBwcmV2ZW50IGZpbmdlcnByaW50aW5nLlxuLy8gTWFwYm94IEdMIHVzZXMgdGhpcyBBUEkgdG8gbG9hZCBzcHJpdGVzIGFuZCBpbWFnZXMgaW4gZ2VuZXJhbC5cbmZ1bmN0aW9uIGlzQ2FudmFzR2V0SW1hZ2VEYXRhU3VwcG9ydGVkKCkge1xuICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgIGNhbnZhcy53aWR0aCA9IGNhbnZhcy5oZWlnaHQgPSAxO1xuICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBpbWFnZURhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCAxLCAxKTtcbiAgICByZXR1cm4gaW1hZ2VEYXRhICYmIGltYWdlRGF0YS53aWR0aCA9PT0gY2FudmFzLndpZHRoO1xufVxuXG52YXIgaXNXZWJHTFN1cHBvcnRlZENhY2hlID0ge307XG5mdW5jdGlvbiBpc1dlYkdMU3VwcG9ydGVkQ2FjaGVkKGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQpIHtcblxuICAgIGlmIChpc1dlYkdMU3VwcG9ydGVkQ2FjaGVbZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpc1dlYkdMU3VwcG9ydGVkQ2FjaGVbZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdF0gPSBpc1dlYkdMU3VwcG9ydGVkKGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQpO1xuICAgIH1cblxuICAgIHJldHVybiBpc1dlYkdMU3VwcG9ydGVkQ2FjaGVbZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdF07XG59XG5cbmlzU3VwcG9ydGVkLndlYkdMQ29udGV4dEF0dHJpYnV0ZXMgPSB7XG4gICAgYW50aWFsaWFzOiBmYWxzZSxcbiAgICBhbHBoYTogdHJ1ZSxcbiAgICBzdGVuY2lsOiB0cnVlLFxuICAgIGRlcHRoOiB0cnVlXG59O1xuXG5mdW5jdGlvbiBnZXRXZWJHTENvbnRleHQoZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCkge1xuICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIHZhciBhdHRyaWJ1dGVzID0gT2JqZWN0LmNyZWF0ZShpc1N1cHBvcnRlZC53ZWJHTENvbnRleHRBdHRyaWJ1dGVzKTtcbiAgICBhdHRyaWJ1dGVzLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQgPSBmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0O1xuXG4gICAgaWYgKGNhbnZhcy5wcm9iYWJseVN1cHBvcnRzQ29udGV4dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgY2FudmFzLnByb2JhYmx5U3VwcG9ydHNDb250ZXh0KCd3ZWJnbCcsIGF0dHJpYnV0ZXMpIHx8XG4gICAgICAgICAgICBjYW52YXMucHJvYmFibHlTdXBwb3J0c0NvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIGF0dHJpYnV0ZXMpXG4gICAgICAgICk7XG5cbiAgICB9IGVsc2UgaWYgKGNhbnZhcy5zdXBwb3J0c0NvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGNhbnZhcy5zdXBwb3J0c0NvbnRleHQoJ3dlYmdsJywgYXR0cmlidXRlcykgfHxcbiAgICAgICAgICAgIGNhbnZhcy5zdXBwb3J0c0NvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIGF0dHJpYnV0ZXMpXG4gICAgICAgICk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgYXR0cmlidXRlcykgfHxcbiAgICAgICAgICAgIGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnLCBhdHRyaWJ1dGVzKVxuICAgICAgICApO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNXZWJHTFN1cHBvcnRlZChmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0KSB7XG4gICAgY29uc3QgZ2wgPSBnZXRXZWJHTENvbnRleHQoZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCk7XG4gICAgaWYgKCFnbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVHJ5IGNvbXBpbGluZyBhIHNoYWRlciBhbmQgZ2V0IGl0cyBjb21waWxlIHN0YXR1cy4gU29tZSBicm93c2VycyBsaWtlIEJyYXZlIGJsb2NrIHRoaXMgQVBJXG4gICAgLy8gdG8gcHJldmVudCBmaW5nZXJwcmludGluZy4gVW5mb3J0dW5hdGVseSwgdGhpcyBhbHNvIG1lYW5zIHRoYXQgTWFwYm94IEdMIHdvbid0IHdvcmsuXG4gICAgY29uc3Qgc2hhZGVyID0gZ2wuY3JlYXRlU2hhZGVyKGdsLlZFUlRFWF9TSEFERVIpO1xuICAgIGlmICghc2hhZGVyIHx8IGdsLmlzQ29udGV4dExvc3QoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGdsLnNoYWRlclNvdXJjZShzaGFkZXIsICd2b2lkIG1haW4oKSB7fScpO1xuICAgIGdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcbiAgICByZXR1cm4gZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgZ2wuQ09NUElMRV9TVEFUVVMpID09PSB0cnVlO1xufVxuIiwiLy8gQGZsb3cgc3RyaWN0XG5cbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcblxuaW1wb3J0IHdpbmRvdyBmcm9tICcuL3dpbmRvdyc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmNvbnN0IERPTSA9IHt9O1xuZXhwb3J0IGRlZmF1bHQgRE9NO1xuXG5ET00uY3JlYXRlID0gZnVuY3Rpb24gKHRhZ05hbWU6IHN0cmluZywgY2xhc3NOYW1lOiA/c3RyaW5nLCBjb250YWluZXI/OiBIVE1MRWxlbWVudCkge1xuICAgIGNvbnN0IGVsID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gICAgaWYgKGNsYXNzTmFtZSAhPT0gdW5kZWZpbmVkKSBlbC5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gICAgaWYgKGNvbnRhaW5lcikgY29udGFpbmVyLmFwcGVuZENoaWxkKGVsKTtcbiAgICByZXR1cm4gZWw7XG59O1xuXG5ET00uY3JlYXRlTlMgPSBmdW5jdGlvbiAobmFtZXNwYWNlVVJJOiBzdHJpbmcsIHRhZ05hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGVsID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhuYW1lc3BhY2VVUkksIHRhZ05hbWUpO1xuICAgIHJldHVybiBlbDtcbn07XG5cbmNvbnN0IGRvY1N0eWxlID0gd2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZTtcblxuZnVuY3Rpb24gdGVzdFByb3AocHJvcHMpIHtcbiAgICBpZiAoIWRvY1N0eWxlKSByZXR1cm4gcHJvcHNbMF07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAocHJvcHNbaV0gaW4gZG9jU3R5bGUpIHtcbiAgICAgICAgICAgIHJldHVybiBwcm9wc1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJvcHNbMF07XG59XG5cbmNvbnN0IHNlbGVjdFByb3AgPSB0ZXN0UHJvcChbJ3VzZXJTZWxlY3QnLCAnTW96VXNlclNlbGVjdCcsICdXZWJraXRVc2VyU2VsZWN0JywgJ21zVXNlclNlbGVjdCddKTtcbmxldCB1c2VyU2VsZWN0O1xuXG5ET00uZGlzYWJsZURyYWcgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGRvY1N0eWxlICYmIHNlbGVjdFByb3ApIHtcbiAgICAgICAgdXNlclNlbGVjdCA9IGRvY1N0eWxlW3NlbGVjdFByb3BdO1xuICAgICAgICBkb2NTdHlsZVtzZWxlY3RQcm9wXSA9ICdub25lJztcbiAgICB9XG59O1xuXG5ET00uZW5hYmxlRHJhZyA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZG9jU3R5bGUgJiYgc2VsZWN0UHJvcCkge1xuICAgICAgICBkb2NTdHlsZVtzZWxlY3RQcm9wXSA9IHVzZXJTZWxlY3Q7XG4gICAgfVxufTtcblxuY29uc3QgdHJhbnNmb3JtUHJvcCA9IHRlc3RQcm9wKFsndHJhbnNmb3JtJywgJ1dlYmtpdFRyYW5zZm9ybSddKTtcblxuRE9NLnNldFRyYW5zZm9ybSA9IGZ1bmN0aW9uKGVsOiBIVE1MRWxlbWVudCwgdmFsdWU6IHN0cmluZykge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy83NzU0XG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIGVsLnN0eWxlW3RyYW5zZm9ybVByb3BdID0gdmFsdWU7XG59O1xuXG4vLyBGZWF0dXJlIGRldGVjdGlvbiBmb3Ige3Bhc3NpdmU6IGZhbHNlfSBzdXBwb3J0IGluIGFkZC9yZW1vdmVFdmVudExpc3RlbmVyLlxubGV0IHBhc3NpdmVTdXBwb3J0ZWQgPSBmYWxzZTtcblxudHJ5IHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvMjg1XG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIGNvbnN0IG9wdGlvbnMgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIFwicGFzc2l2ZVwiLCB7XG4gICAgICAgIGdldCgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgICAgICAgcGFzc2l2ZVN1cHBvcnRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInRlc3RcIiwgb3B0aW9ucywgb3B0aW9ucyk7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0ZXN0XCIsIG9wdGlvbnMsIG9wdGlvbnMpO1xufSBjYXRjaCAoZXJyKSB7XG4gICAgcGFzc2l2ZVN1cHBvcnRlZCA9IGZhbHNlO1xufVxuXG5ET00uYWRkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKHRhcmdldDogKiwgdHlwZTogKiwgY2FsbGJhY2s6ICosIG9wdGlvbnM6IHtwYXNzaXZlPzogYm9vbGVhbiwgY2FwdHVyZT86IGJvb2xlYW59ID0ge30pIHtcbiAgICBpZiAoJ3Bhc3NpdmUnIGluIG9wdGlvbnMgJiYgcGFzc2l2ZVN1cHBvcnRlZCkge1xuICAgICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBjYWxsYmFjaywgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgY2FsbGJhY2ssIG9wdGlvbnMuY2FwdHVyZSk7XG4gICAgfVxufTtcblxuRE9NLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbih0YXJnZXQ6ICosIHR5cGU6ICosIGNhbGxiYWNrOiAqLCBvcHRpb25zOiB7cGFzc2l2ZT86IGJvb2xlYW4sIGNhcHR1cmU/OiBib29sZWFufSA9IHt9KSB7XG4gICAgaWYgKCdwYXNzaXZlJyBpbiBvcHRpb25zICYmIHBhc3NpdmVTdXBwb3J0ZWQpIHtcbiAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgY2FsbGJhY2ssIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGNhbGxiYWNrLCBvcHRpb25zLmNhcHR1cmUpO1xuICAgIH1cbn07XG5cbi8vIFN1cHByZXNzIHRoZSBuZXh0IGNsaWNrLCBidXQgb25seSBpZiBpdCdzIGltbWVkaWF0ZS5cbmNvbnN0IHN1cHByZXNzQ2xpY2s6IE1vdXNlRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIChlKSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc3VwcHJlc3NDbGljaywgdHJ1ZSk7XG59O1xuXG5ET00uc3VwcHJlc3NDbGljayA9IGZ1bmN0aW9uKCkge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHN1cHByZXNzQ2xpY2ssIHRydWUpO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc3VwcHJlc3NDbGljaywgdHJ1ZSk7XG4gICAgfSwgMCk7XG59O1xuXG5ET00ubW91c2VQb3MgPSBmdW5jdGlvbiAoZWw6IEhUTUxFbGVtZW50LCBlOiBNb3VzZUV2ZW50IHwgd2luZG93LlRvdWNoRXZlbnQgfCBUb3VjaCkge1xuICAgIGNvbnN0IHJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICByZXR1cm4gbmV3IFBvaW50KFxuICAgICAgICBlLmNsaWVudFggLSByZWN0LmxlZnQgLSBlbC5jbGllbnRMZWZ0LFxuICAgICAgICBlLmNsaWVudFkgLSByZWN0LnRvcCAtIGVsLmNsaWVudFRvcFxuICAgICk7XG59O1xuXG5ET00udG91Y2hQb3MgPSBmdW5jdGlvbiAoZWw6IEhUTUxFbGVtZW50LCB0b3VjaGVzOiBUb3VjaExpc3QpIHtcbiAgICBjb25zdCByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICAgIHBvaW50cyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG91Y2hlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBwb2ludHMucHVzaChuZXcgUG9pbnQoXG4gICAgICAgICAgICB0b3VjaGVzW2ldLmNsaWVudFggLSByZWN0LmxlZnQgLSBlbC5jbGllbnRMZWZ0LFxuICAgICAgICAgICAgdG91Y2hlc1tpXS5jbGllbnRZIC0gcmVjdC50b3AgLSBlbC5jbGllbnRUb3BcbiAgICAgICAgKSk7XG4gICAgfVxuICAgIHJldHVybiBwb2ludHM7XG59O1xuXG5ET00ubW91c2VCdXR0b24gPSBmdW5jdGlvbiAoZTogTW91c2VFdmVudCkge1xuICAgIGFzc2VydChlLnR5cGUgPT09ICdtb3VzZWRvd24nIHx8IGUudHlwZSA9PT0gJ21vdXNldXAnKTtcbiAgICBpZiAodHlwZW9mIHdpbmRvdy5JbnN0YWxsVHJpZ2dlciAhPT0gJ3VuZGVmaW5lZCcgJiYgZS5idXR0b24gPT09IDIgJiYgZS5jdHJsS2V5ICYmXG4gICAgICAgIHdpbmRvdy5uYXZpZ2F0b3IucGxhdGZvcm0udG9VcHBlckNhc2UoKS5pbmRleE9mKCdNQUMnKSA+PSAwKSB7XG4gICAgICAgIC8vIEZpeCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzMxMzE6XG4gICAgICAgIC8vIEZpcmVmb3ggKGRldGVjdGVkIGJ5IEluc3RhbGxUcmlnZ2VyKSBvbiBNYWMgZGV0ZXJtaW5lcyBlLmJ1dHRvbiA9IDIgd2hlblxuICAgICAgICAvLyB1c2luZyBDb250cm9sICsgbGVmdCBjbGlja1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgcmV0dXJuIGUuYnV0dG9uO1xufTtcblxuRE9NLnJlbW92ZSA9IGZ1bmN0aW9uKG5vZGU6IEhUTUxFbGVtZW50KSB7XG4gICAgaWYgKG5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7XG4gICAgfVxufTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7Z2V0SlNPTiwgZ2V0SW1hZ2UsIFJlc291cmNlVHlwZX0gZnJvbSAnLi4vdXRpbC9hamF4JztcblxuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vdXRpbC9icm93c2VyJztcbmltcG9ydCB7UkdCQUltYWdlfSBmcm9tICcuLi91dGlsL2ltYWdlJztcblxuaW1wb3J0IHR5cGUge1N0eWxlSW1hZ2V9IGZyb20gJy4vc3R5bGVfaW1hZ2UnO1xuaW1wb3J0IHR5cGUge1JlcXVlc3RNYW5hZ2VyfSBmcm9tICcuLi91dGlsL21hcGJveCc7XG5pbXBvcnQgdHlwZSB7Q2FsbGJhY2t9IGZyb20gJy4uL3R5cGVzL2NhbGxiYWNrJztcbmltcG9ydCB0eXBlIHtDYW5jZWxhYmxlfSBmcm9tICcuLi90eXBlcy9jYW5jZWxhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYmFzZVVSTDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0TWFuYWdlcjogUmVxdWVzdE1hbmFnZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBDYWxsYmFjazx7W186IHN0cmluZ106IFN0eWxlSW1hZ2V9Pik6IENhbmNlbGFibGUge1xuICAgIGxldCBqc29uOiBhbnksIGltYWdlLCBlcnJvcjtcbiAgICBjb25zdCBmb3JtYXQgPSBicm93c2VyLmRldmljZVBpeGVsUmF0aW8gPiAxID8gJ0AyeCcgOiAnJztcblxuICAgIGxldCBqc29uUmVxdWVzdCA9IGdldEpTT04ocmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdChyZXF1ZXN0TWFuYWdlci5ub3JtYWxpemVTcHJpdGVVUkwoYmFzZVVSTCwgZm9ybWF0LCAnLmpzb24nKSwgUmVzb3VyY2VUeXBlLlNwcml0ZUpTT04pLCAoZXJyOiA/RXJyb3IsIGRhdGE6ID9PYmplY3QpID0+IHtcbiAgICAgICAganNvblJlcXVlc3QgPSBudWxsO1xuICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICBlcnJvciA9IGVycjtcbiAgICAgICAgICAgIGpzb24gPSBkYXRhO1xuICAgICAgICAgICAgbWF5YmVDb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBsZXQgaW1hZ2VSZXF1ZXN0ID0gZ2V0SW1hZ2UocmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdChyZXF1ZXN0TWFuYWdlci5ub3JtYWxpemVTcHJpdGVVUkwoYmFzZVVSTCwgZm9ybWF0LCAnLnBuZycpLCBSZXNvdXJjZVR5cGUuU3ByaXRlSW1hZ2UpLCAoZXJyLCBpbWcpID0+IHtcbiAgICAgICAgaW1hZ2VSZXF1ZXN0ID0gbnVsbDtcbiAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICBpbWFnZSA9IGltZztcbiAgICAgICAgICAgIG1heWJlQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gbWF5YmVDb21wbGV0ZSgpIHtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgIH0gZWxzZSBpZiAoanNvbiAmJiBpbWFnZSkge1xuICAgICAgICAgICAgY29uc3QgaW1hZ2VEYXRhID0gYnJvd3Nlci5nZXRJbWFnZURhdGEoaW1hZ2UpO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgaW4ganNvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0LCB4LCB5LCBzZGYsIHBpeGVsUmF0aW8sIHN0cmV0Y2hYLCBzdHJldGNoWSwgY29udGVudH0gPSBqc29uW2lkXTtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gbmV3IFJHQkFJbWFnZSh7d2lkdGgsIGhlaWdodH0pO1xuICAgICAgICAgICAgICAgIFJHQkFJbWFnZS5jb3B5KGltYWdlRGF0YSwgZGF0YSwge3gsIHl9LCB7eDogMCwgeTogMH0sIHt3aWR0aCwgaGVpZ2h0fSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2lkXSA9IHtkYXRhLCBwaXhlbFJhdGlvLCBzZGYsIHN0cmV0Y2hYLCBzdHJldGNoWSwgY29udGVudH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBjYW5jZWwoKSB7XG4gICAgICAgICAgICBpZiAoanNvblJlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICBqc29uUmVxdWVzdC5jYW5jZWwoKTtcbiAgICAgICAgICAgICAgICBqc29uUmVxdWVzdCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW1hZ2VSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgaW1hZ2VSZXF1ZXN0LmNhbmNlbCgpO1xuICAgICAgICAgICAgICAgIGltYWdlUmVxdWVzdCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtSR0JBSW1hZ2V9IGZyb20gJy4uL3V0aWwvaW1hZ2UnO1xuXG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vdWkvbWFwJztcblxuZXhwb3J0IHR5cGUgU3R5bGVJbWFnZURhdGEgPSB7XG4gICAgZGF0YTogUkdCQUltYWdlLFxuICAgIHZlcnNpb246IG51bWJlcixcbiAgICBoYXNSZW5kZXJDYWxsYmFjaz86IGJvb2xlYW4sXG4gICAgdXNlckltYWdlPzogU3R5bGVJbWFnZUludGVyZmFjZVxufTtcblxuZXhwb3J0IHR5cGUgU3R5bGVJbWFnZU1ldGFkYXRhID0ge1xuICAgIHBpeGVsUmF0aW86IG51bWJlcixcbiAgICBzZGY6IGJvb2xlYW4sXG4gICAgc3RyZXRjaFg/OiBBcnJheTxbbnVtYmVyLCBudW1iZXJdPixcbiAgICBzdHJldGNoWT86IEFycmF5PFtudW1iZXIsIG51bWJlcl0+LFxuICAgIGNvbnRlbnQ/OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXVxufTtcblxuZXhwb3J0IHR5cGUgU3R5bGVJbWFnZSA9IFN0eWxlSW1hZ2VEYXRhICYgU3R5bGVJbWFnZU1ldGFkYXRhO1xuXG5leHBvcnQgdHlwZSBTdHlsZUltYWdlSW50ZXJmYWNlID0ge1xuICAgIHdpZHRoOiBudW1iZXIsXG4gICAgaGVpZ2h0OiBudW1iZXIsXG4gICAgZGF0YTogVWludDhBcnJheSB8IFVpbnQ4Q2xhbXBlZEFycmF5LFxuICAgIHJlbmRlcj86ICgpID0+IHZvaWQsXG4gICAgb25BZGQ/OiAobWFwOiBNYXAsIGlkOiBzdHJpbmcpID0+IHZvaWQsXG4gICAgb25SZW1vdmU/OiAoKSA9PiB2b2lkXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyU3R5bGVJbWFnZShpbWFnZTogU3R5bGVJbWFnZSkge1xuICAgIGNvbnN0IHt1c2VySW1hZ2V9ID0gaW1hZ2U7XG4gICAgaWYgKHVzZXJJbWFnZSAmJiB1c2VySW1hZ2UucmVuZGVyKSB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWQgPSB1c2VySW1hZ2UucmVuZGVyKCk7XG4gICAgICAgIGlmICh1cGRhdGVkKSB7XG4gICAgICAgICAgICBpbWFnZS5kYXRhLnJlcGxhY2UobmV3IFVpbnQ4QXJyYXkodXNlckltYWdlLmRhdGEuYnVmZmVyKSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBkeW5hbWljYWxseSBnZW5lcmF0ZWQgc3R5bGUgaW1hZ2VzLiBUaGlzIGlzIGEgc3BlY2lmaWNhdGlvbiBmb3JcbiAqIGltcGxlbWVudGVycyB0byBtb2RlbDogaXQgaXMgbm90IGFuIGV4cG9ydGVkIG1ldGhvZCBvciBjbGFzcy5cbiAqXG4gKiBJbWFnZXMgaW1wbGVtZW50aW5nIHRoaXMgaW50ZXJmYWNlIGNhbiBiZSByZWRyYXduIGZvciBldmVyeSBmcmFtZS4gVGhleSBjYW4gYmUgdXNlZCB0byBhbmltYXRlXG4gKiBpY29ucyBhbmQgcGF0dGVybnMgb3IgbWFrZSB0aGVtIHJlc3BvbmQgdG8gdXNlciBpbnB1dC4gU3R5bGUgaW1hZ2VzIGNhbiBpbXBsZW1lbnQgYVxuICoge0BsaW5rIFN0eWxlSW1hZ2VJbnRlcmZhY2UjcmVuZGVyfSBtZXRob2QuIFRoZSBtZXRob2QgaXMgY2FsbGVkIGV2ZXJ5IGZyYW1lIGFuZFxuICogY2FuIGJlIHVzZWQgdG8gdXBkYXRlIHRoZSBpbWFnZS5cbiAqXG4gKiBAaW50ZXJmYWNlIFN0eWxlSW1hZ2VJbnRlcmZhY2VcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB3aWR0aFxuICogQHByb3BlcnR5IHtudW1iZXJ9IGhlaWdodFxuICogQHByb3BlcnR5IHtVaW50OEFycmF5IHwgVWludDhDbGFtcGVkQXJyYXl9IGRhdGFcbiAqXG4gKiBAc2VlIFtBZGQgYW4gYW5pbWF0ZWQgaWNvbiB0byB0aGUgbWFwLl0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvYWRkLWltYWdlLWFuaW1hdGVkLylcbiAqXG4gKiBAZXhhbXBsZVxuICogdmFyIGZsYXNoaW5nU3F1YXJlID0ge1xuICogICAgIHdpZHRoOiA2NCxcbiAqICAgICBoZWlnaHQ6IDY0LFxuICogICAgIGRhdGE6IG5ldyBVaW50OEFycmF5KDY0ICogNjQgKiA0KSxcbiAqXG4gKiAgICAgb25BZGQ6IGZ1bmN0aW9uKG1hcCkge1xuICogICAgICAgICB0aGlzLm1hcCA9IG1hcDtcbiAqICAgICB9LFxuICpcbiAqICAgICByZW5kZXI6IGZ1bmN0aW9uKCkge1xuICogICAgICAgICAvLyBrZWVwIHJlcGFpbnRpbmcgd2hpbGUgdGhlIGljb24gaXMgb24gdGhlIG1hcFxuICogICAgICAgICB0aGlzLm1hcC50cmlnZ2VyUmVwYWludCgpO1xuICpcbiAqICAgICAgICAgLy8gYWx0ZXJuYXRlIGJldHdlZW4gYmxhY2sgYW5kIHdoaXRlIGJhc2VkIG9uIHRoZSB0aW1lXG4gKiAgICAgICAgIHZhciB2YWx1ZSA9IE1hdGgucm91bmQoRGF0ZS5ub3coKSAvIDEwMDApICUgMiA9PT0gMCAgPyAyNTUgOiAwO1xuICpcbiAqICAgICAgICAgLy8gY2hlY2sgaWYgaW1hZ2UgbmVlZHMgdG8gYmUgY2hhbmdlZFxuICogICAgICAgICBpZiAodmFsdWUgIT09IHRoaXMucHJldmlvdXNWYWx1ZSkge1xuICogICAgICAgICAgICAgdGhpcy5wcmV2aW91c1ZhbHVlID0gdmFsdWU7XG4gKlxuICogICAgICAgICAgICAgdmFyIGJ5dGVzUGVyUGl4ZWwgPSA0O1xuICogICAgICAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCB0aGlzLndpZHRoOyB4KyspIHtcbiAqICAgICAgICAgICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IHRoaXMuaGVpZ2h0OyB5KyspIHtcbiAqICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9ICh5ICogdGhpcy53aWR0aCArIHgpICogYnl0ZXNQZXJQaXhlbDtcbiAqICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhW29mZnNldCArIDBdID0gdmFsdWU7XG4gKiAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtvZmZzZXQgKyAxXSA9IHZhbHVlO1xuICogICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFbb2Zmc2V0ICsgMl0gPSB2YWx1ZTtcbiAqICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhW29mZnNldCArIDNdID0gMjU1O1xuICogICAgICAgICAgICAgICAgIH1cbiAqICAgICAgICAgICAgIH1cbiAqXG4gKiAgICAgICAgICAgICAvLyByZXR1cm4gdHJ1ZSB0byBpbmRpY2F0ZSB0aGF0IHRoZSBpbWFnZSBjaGFuZ2VkXG4gKiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAqICAgICAgICAgfVxuICogICAgIH1cbiAqICB9XG4gKlxuICogIG1hcC5hZGRJbWFnZSgnZmxhc2hpbmdfc3F1YXJlJywgZmxhc2hpbmdTcXVhcmUpO1xuICovXG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uY2UgYmVmb3JlIGV2ZXJ5IGZyYW1lIHdoZXJlIHRoZSBpY29uIHdpbGwgYmUgdXNlZC5cbiAqIFRoZSBtZXRob2QgY2FuIG9wdGlvbmFsbHkgdXBkYXRlIHRoZSBpbWFnZSdzIGBkYXRhYCBtZW1iZXIgd2l0aCBhIG5ldyBpbWFnZS5cbiAqXG4gKiBJZiB0aGUgbWV0aG9kIHVwZGF0ZXMgdGhlIGltYWdlIGl0IG11c3QgcmV0dXJuIGB0cnVlYCB0byBjb21taXQgdGhlIGNoYW5nZS5cbiAqIElmIHRoZSBtZXRob2QgcmV0dXJucyBgZmFsc2VgIG9yIG5vdGhpbmcgdGhlIGltYWdlIGlzIGFzc3VtZWQgdG8gbm90IGhhdmUgY2hhbmdlZC5cbiAqXG4gKiBJZiB1cGRhdGVzIGFyZSBpbmZyZXF1ZW50IGl0IG1heWJlIGVhc2llciB0byB1c2Uge0BsaW5rIE1hcCN1cGRhdGVJbWFnZX0gdG8gdXBkYXRlXG4gKiB0aGUgaW1hZ2UgaW5zdGVhZCBvZiBpbXBsZW1lbnRpbmcgdGhpcyBtZXRob2QuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgU3R5bGVJbWFnZUludGVyZmFjZVxuICogQGluc3RhbmNlXG4gKiBAbmFtZSByZW5kZXJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGlzIG1ldGhvZCB1cGRhdGVkIHRoZSBpbWFnZS4gYGZhbHNlYCBpZiB0aGUgaW1hZ2Ugd2FzIG5vdCBjaGFuZ2VkLlxuICovXG5cbi8qKlxuICogT3B0aW9uYWwgbWV0aG9kIGNhbGxlZCB3aGVuIHRoZSBsYXllciBoYXMgYmVlbiBhZGRlZCB0byB0aGUgTWFwIHdpdGgge0BsaW5rIE1hcCNhZGRJbWFnZX0uXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgU3R5bGVJbWFnZUludGVyZmFjZVxuICogQGluc3RhbmNlXG4gKiBAbmFtZSBvbkFkZFxuICogQHBhcmFtIHtNYXB9IG1hcCBUaGUgTWFwIHRoaXMgY3VzdG9tIGxheWVyIHdhcyBqdXN0IGFkZGVkIHRvLlxuICovXG5cbi8qKlxuICogT3B0aW9uYWwgbWV0aG9kIGNhbGxlZCB3aGVuIHRoZSBpY29uIGlzIHJlbW92ZWQgZnJvbSB0aGUgbWFwIHdpdGgge0BsaW5rIE1hcCNyZW1vdmVJbWFnZX0uXG4gKiBUaGlzIGdpdmVzIHRoZSBpbWFnZSBhIGNoYW5jZSB0byBjbGVhbiB1cCByZXNvdXJjZXMgYW5kIGV2ZW50IGxpc3RlbmVycy5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBTdHlsZUltYWdlSW50ZXJmYWNlXG4gKiBAaW5zdGFuY2VcbiAqIEBuYW1lIG9uUmVtb3ZlXG4gKi9cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBwb3RwYWNrIGZyb20gJ3BvdHBhY2snO1xuXG5pbXBvcnQge0V2ZW50LCBFcnJvckV2ZW50LCBFdmVudGVkfSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IHtSR0JBSW1hZ2V9IGZyb20gJy4uL3V0aWwvaW1hZ2UnO1xuaW1wb3J0IHtJbWFnZVBvc2l0aW9ufSBmcm9tICcuL2ltYWdlX2F0bGFzJztcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4vdGV4dHVyZSc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQge3JlbmRlclN0eWxlSW1hZ2V9IGZyb20gJy4uL3N0eWxlL3N0eWxlX2ltYWdlJztcbmltcG9ydCB7d2Fybk9uY2V9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5cbmltcG9ydCB0eXBlIHtTdHlsZUltYWdlfSBmcm9tICcuLi9zdHlsZS9zdHlsZV9pbWFnZSc7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge0Jpbn0gZnJvbSAncG90cGFjayc7XG5pbXBvcnQgdHlwZSB7Q2FsbGJhY2t9IGZyb20gJy4uL3R5cGVzL2NhbGxiYWNrJztcblxudHlwZSBQYXR0ZXJuID0ge1xuICAgIGJpbjogQmluLFxuICAgIHBvc2l0aW9uOiBJbWFnZVBvc2l0aW9uXG59O1xuXG4vLyBXaGVuIGNvcGllZCBpbnRvIHRoZSBhdGxhcyB0ZXh0dXJlLCBpbWFnZSBkYXRhIGlzIHBhZGRlZCBieSBvbmUgcGl4ZWwgb24gZWFjaCBzaWRlLiBJY29uXG4vLyBpbWFnZXMgYXJlIHBhZGRlZCB3aXRoIGZ1bGx5IHRyYW5zcGFyZW50IHBpeGVscywgd2hpbGUgcGF0dGVybiBpbWFnZXMgYXJlIHBhZGRlZCB3aXRoIGFcbi8vIGNvcHkgb2YgdGhlIGltYWdlIGRhdGEgd3JhcHBlZCBmcm9tIHRoZSBvcHBvc2l0ZSBzaWRlLiBJbiBib3RoIGNhc2VzLCB0aGlzIGVuc3VyZXMgdGhlXG4vLyBjb3JyZWN0IGJlaGF2aW9yIG9mIEdMX0xJTkVBUiB0ZXh0dXJlIHNhbXBsaW5nIG1vZGUuXG5jb25zdCBwYWRkaW5nID0gMTtcblxuLypcbiAgICBJbWFnZU1hbmFnZXIgZG9lcyB0aHJlZSB0aGluZ3M6XG5cbiAgICAgICAgMS4gVHJhY2tzIHJlcXVlc3RzIGZvciBpY29uIGltYWdlcyBmcm9tIHRpbGUgd29ya2VycyBhbmQgc2VuZHMgcmVzcG9uc2VzIHdoZW4gdGhlIHJlcXVlc3RzIGFyZSBmdWxmaWxsZWQuXG4gICAgICAgIDIuIEJ1aWxkcyBhIHRleHR1cmUgYXRsYXMgZm9yIHBhdHRlcm4gaW1hZ2VzLlxuICAgICAgICAzLiBSZXJlbmRlcnMgcmVuZGVyYWJsZSBpbWFnZXMgb25jZSBwZXIgZnJhbWVcblxuICAgIFRoZXNlIGFyZSBkaXNwYXJhdGUgcmVzcG9uc2liaWxpdGllcyBhbmQgc2hvdWxkIGV2ZW50dWFsbHkgYmUgaGFuZGxlZCBieSBkaWZmZXJlbnQgY2xhc3Nlcy4gV2hlbiB3ZSBpbXBsZW1lbnRcbiAgICBkYXRhLWRyaXZlbiBzdXBwb3J0IGZvciBgKi1wYXR0ZXJuYCwgd2UnbGwgbGlrZWx5IHVzZSBwZXItYnVja2V0IHBhdHRlcm4gYXRsYXNlcywgYW5kIHRoYXQgd291bGQgYmUgYSBnb29kIHRpbWVcbiAgICB0byByZWZhY3RvciB0aGlzLlxuKi9cbmNsYXNzIEltYWdlTWFuYWdlciBleHRlbmRzIEV2ZW50ZWQge1xuICAgIGltYWdlczoge1tfOiBzdHJpbmddOiBTdHlsZUltYWdlfTtcbiAgICB1cGRhdGVkSW1hZ2VzOiB7W186IHN0cmluZ106IGJvb2xlYW59O1xuICAgIGNhbGxiYWNrRGlzcGF0Y2hlZFRoaXNGcmFtZToge1tfOiBzdHJpbmddOiBib29sZWFufTtcbiAgICBsb2FkZWQ6IGJvb2xlYW47XG4gICAgcmVxdWVzdG9yczogQXJyYXk8e2lkczogQXJyYXk8c3RyaW5nPiwgY2FsbGJhY2s6IENhbGxiYWNrPHtbXzogc3RyaW5nXTogU3R5bGVJbWFnZX0+fT47XG5cbiAgICBwYXR0ZXJuczoge1tfOiBzdHJpbmddOiBQYXR0ZXJufTtcbiAgICBhdGxhc0ltYWdlOiBSR0JBSW1hZ2U7XG4gICAgYXRsYXNUZXh0dXJlOiA/VGV4dHVyZTtcbiAgICBkaXJ0eTogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmltYWdlcyA9IHt9O1xuICAgICAgICB0aGlzLnVwZGF0ZWRJbWFnZXMgPSB7fTtcbiAgICAgICAgdGhpcy5jYWxsYmFja0Rpc3BhdGNoZWRUaGlzRnJhbWUgPSB7fTtcbiAgICAgICAgdGhpcy5sb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0b3JzID0gW107XG5cbiAgICAgICAgdGhpcy5wYXR0ZXJucyA9IHt9O1xuICAgICAgICB0aGlzLmF0bGFzSW1hZ2UgPSBuZXcgUkdCQUltYWdlKHt3aWR0aDogMSwgaGVpZ2h0OiAxfSk7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIH1cblxuICAgIGlzTG9hZGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2FkZWQ7XG4gICAgfVxuXG4gICAgc2V0TG9hZGVkKGxvYWRlZDogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5sb2FkZWQgPT09IGxvYWRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sb2FkZWQgPSBsb2FkZWQ7XG5cbiAgICAgICAgaWYgKGxvYWRlZCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCB7aWRzLCBjYWxsYmFja30gb2YgdGhpcy5yZXF1ZXN0b3JzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZ5KGlkcywgY2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZXF1ZXN0b3JzID0gW107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRJbWFnZShpZDogc3RyaW5nKTogP1N0eWxlSW1hZ2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5pbWFnZXNbaWRdO1xuICAgIH1cblxuICAgIGFkZEltYWdlKGlkOiBzdHJpbmcsIGltYWdlOiBTdHlsZUltYWdlKSB7XG4gICAgICAgIGFzc2VydCghdGhpcy5pbWFnZXNbaWRdKTtcbiAgICAgICAgaWYgKHRoaXMuX3ZhbGlkYXRlKGlkLCBpbWFnZSkpIHtcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VzW2lkXSA9IGltYWdlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3ZhbGlkYXRlKGlkOiBzdHJpbmcsIGltYWdlOiBTdHlsZUltYWdlKSB7XG4gICAgICAgIGxldCB2YWxpZCA9IHRydWU7XG4gICAgICAgIGlmICghdGhpcy5fdmFsaWRhdGVTdHJldGNoKGltYWdlLnN0cmV0Y2hYLCBpbWFnZS5kYXRhICYmIGltYWdlLmRhdGEud2lkdGgpKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBJbWFnZSBcIiR7aWR9XCIgaGFzIGludmFsaWQgXCJzdHJldGNoWFwiIHZhbHVlYCkpKTtcbiAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl92YWxpZGF0ZVN0cmV0Y2goaW1hZ2Uuc3RyZXRjaFksIGltYWdlLmRhdGEgJiYgaW1hZ2UuZGF0YS5oZWlnaHQpKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBJbWFnZSBcIiR7aWR9XCIgaGFzIGludmFsaWQgXCJzdHJldGNoWVwiIHZhbHVlYCkpKTtcbiAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl92YWxpZGF0ZUNvbnRlbnQoaW1hZ2UuY29udGVudCwgaW1hZ2UpKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBJbWFnZSBcIiR7aWR9XCIgaGFzIGludmFsaWQgXCJjb250ZW50XCIgdmFsdWVgKSkpO1xuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsaWQ7XG4gICAgfVxuXG4gICAgX3ZhbGlkYXRlU3RyZXRjaChzdHJldGNoOiA/QXJyYXk8W251bWJlciwgbnVtYmVyXT4gfCB2b2lkLCBzaXplOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKCFzdHJldGNoKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgbGV0IGxhc3QgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IHBhcnQgb2Ygc3RyZXRjaCkge1xuICAgICAgICAgICAgaWYgKHBhcnRbMF0gPCBsYXN0IHx8IHBhcnRbMV0gPCBwYXJ0WzBdIHx8IHNpemUgPCBwYXJ0WzFdKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBsYXN0ID0gcGFydFsxXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBfdmFsaWRhdGVDb250ZW50KGNvbnRlbnQ6ID9bbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSB8IHZvaWQsIGltYWdlOiBTdHlsZUltYWdlKSB7XG4gICAgICAgIGlmICghY29udGVudCkgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmIChjb250ZW50Lmxlbmd0aCAhPT0gNCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoY29udGVudFswXSA8IDAgfHwgaW1hZ2UuZGF0YS53aWR0aCA8IGNvbnRlbnRbMF0pIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGNvbnRlbnRbMV0gPCAwIHx8IGltYWdlLmRhdGEuaGVpZ2h0IDwgY29udGVudFsxXSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoY29udGVudFsyXSA8IDAgfHwgaW1hZ2UuZGF0YS53aWR0aCA8IGNvbnRlbnRbMl0pIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGNvbnRlbnRbM10gPCAwIHx8IGltYWdlLmRhdGEuaGVpZ2h0IDwgY29udGVudFszXSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoY29udGVudFsyXSA8IGNvbnRlbnRbMF0pIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGNvbnRlbnRbM10gPCBjb250ZW50WzFdKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHVwZGF0ZUltYWdlKGlkOiBzdHJpbmcsIGltYWdlOiBTdHlsZUltYWdlKSB7XG4gICAgICAgIGNvbnN0IG9sZEltYWdlID0gdGhpcy5pbWFnZXNbaWRdO1xuICAgICAgICBhc3NlcnQob2xkSW1hZ2UpO1xuICAgICAgICBhc3NlcnQob2xkSW1hZ2UuZGF0YS53aWR0aCA9PT0gaW1hZ2UuZGF0YS53aWR0aCk7XG4gICAgICAgIGFzc2VydChvbGRJbWFnZS5kYXRhLmhlaWdodCA9PT0gaW1hZ2UuZGF0YS5oZWlnaHQpO1xuICAgICAgICBpbWFnZS52ZXJzaW9uID0gb2xkSW1hZ2UudmVyc2lvbiArIDE7XG4gICAgICAgIHRoaXMuaW1hZ2VzW2lkXSA9IGltYWdlO1xuICAgICAgICB0aGlzLnVwZGF0ZWRJbWFnZXNbaWRdID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZW1vdmVJbWFnZShpZDogc3RyaW5nKSB7XG4gICAgICAgIGFzc2VydCh0aGlzLmltYWdlc1tpZF0pO1xuICAgICAgICBjb25zdCBpbWFnZSA9IHRoaXMuaW1hZ2VzW2lkXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuaW1hZ2VzW2lkXTtcbiAgICAgICAgZGVsZXRlIHRoaXMucGF0dGVybnNbaWRdO1xuXG4gICAgICAgIGlmIChpbWFnZS51c2VySW1hZ2UgJiYgaW1hZ2UudXNlckltYWdlLm9uUmVtb3ZlKSB7XG4gICAgICAgICAgICBpbWFnZS51c2VySW1hZ2Uub25SZW1vdmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxpc3RJbWFnZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmltYWdlcyk7XG4gICAgfVxuXG4gICAgZ2V0SW1hZ2VzKGlkczogQXJyYXk8c3RyaW5nPiwgY2FsbGJhY2s6IENhbGxiYWNrPHtbXzogc3RyaW5nXTogU3R5bGVJbWFnZX0+KSB7XG4gICAgICAgIC8vIElmIHRoZSBzcHJpdGUgaGFzIGJlZW4gbG9hZGVkLCBvciBpZiBhbGwgdGhlIGljb24gZGVwZW5kZW5jaWVzIGFyZSBhbHJlYWR5IHByZXNlbnRcbiAgICAgICAgLy8gKGkuZS4gaWYgdGhleSd2ZSBiZWVuIGFkZGVkIHZpYSBydW50aW1lIHN0eWxpbmcpLCB0aGVuIG5vdGlmeSB0aGUgcmVxdWVzdG9yIGltbWVkaWF0ZWx5LlxuICAgICAgICAvLyBPdGhlcndpc2UsIGRlbGF5IG5vdGlmaWNhdGlvbiB1bnRpbCB0aGUgc3ByaXRlIGlzIGxvYWRlZC4gQXQgdGhhdCBwb2ludCwgaWYgYW55IG9mIHRoZVxuICAgICAgICAvLyBkZXBlbmRlbmNpZXMgYXJlIHN0aWxsIHVuYXZhaWxhYmxlLCB3ZSdsbCBqdXN0IGFzc3VtZSB0aGV5IGFyZSBwZXJtYW5lbnRseSBtaXNzaW5nLlxuICAgICAgICBsZXQgaGFzQWxsRGVwZW5kZW5jaWVzID0gdHJ1ZTtcbiAgICAgICAgaWYgKCF0aGlzLmlzTG9hZGVkKCkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgb2YgaWRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmltYWdlc1tpZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzQWxsRGVwZW5kZW5jaWVzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzTG9hZGVkKCkgfHwgaGFzQWxsRGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZnkoaWRzLCBjYWxsYmFjayk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlcXVlc3RvcnMucHVzaCh7aWRzLCBjYWxsYmFja30pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX25vdGlmeShpZHM6IEFycmF5PHN0cmluZz4sIGNhbGxiYWNrOiBDYWxsYmFjazx7W186IHN0cmluZ106IFN0eWxlSW1hZ2V9Pikge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IHt9O1xuXG4gICAgICAgIGZvciAoY29uc3QgaWQgb2YgaWRzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaW1hZ2VzW2lkXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3N0eWxlaW1hZ2VtaXNzaW5nJywge2lkfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaW1hZ2UgPSB0aGlzLmltYWdlc1tpZF07XG4gICAgICAgICAgICBpZiAoaW1hZ2UpIHtcbiAgICAgICAgICAgICAgICAvLyBDbG9uZSB0aGUgaW1hZ2Ugc28gdGhhdCBvdXIgb3duIGNvcHkgb2YgaXRzIEFycmF5QnVmZmVyIGRvZXNuJ3QgZ2V0IHRyYW5zZmVycmVkLlxuICAgICAgICAgICAgICAgIHJlc3BvbnNlW2lkXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogaW1hZ2UuZGF0YS5jbG9uZSgpLFxuICAgICAgICAgICAgICAgICAgICBwaXhlbFJhdGlvOiBpbWFnZS5waXhlbFJhdGlvLFxuICAgICAgICAgICAgICAgICAgICBzZGY6IGltYWdlLnNkZixcbiAgICAgICAgICAgICAgICAgICAgdmVyc2lvbjogaW1hZ2UudmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgc3RyZXRjaFg6IGltYWdlLnN0cmV0Y2hYLFxuICAgICAgICAgICAgICAgICAgICBzdHJldGNoWTogaW1hZ2Uuc3RyZXRjaFksXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGltYWdlLmNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgIGhhc1JlbmRlckNhbGxiYWNrOiBCb29sZWFuKGltYWdlLnVzZXJJbWFnZSAmJiBpbWFnZS51c2VySW1hZ2UucmVuZGVyKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHdhcm5PbmNlKGBJbWFnZSBcIiR7aWR9XCIgY291bGQgbm90IGJlIGxvYWRlZC4gUGxlYXNlIG1ha2Ugc3VyZSB5b3UgaGF2ZSBhZGRlZCB0aGUgaW1hZ2Ugd2l0aCBtYXAuYWRkSW1hZ2UoKSBvciBhIFwic3ByaXRlXCIgcHJvcGVydHkgaW4geW91ciBzdHlsZS4gWW91IGNhbiBwcm92aWRlIG1pc3NpbmcgaW1hZ2VzIGJ5IGxpc3RlbmluZyBmb3IgdGhlIFwic3R5bGVpbWFnZW1pc3NpbmdcIiBtYXAgZXZlbnQuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZSk7XG4gICAgfVxuXG4gICAgLy8gUGF0dGVybiBzdHVmZlxuXG4gICAgZ2V0UGl4ZWxTaXplKCkge1xuICAgICAgICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSB0aGlzLmF0bGFzSW1hZ2U7XG4gICAgICAgIHJldHVybiB7d2lkdGgsIGhlaWdodH07XG4gICAgfVxuXG4gICAgZ2V0UGF0dGVybihpZDogc3RyaW5nKTogP0ltYWdlUG9zaXRpb24ge1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gdGhpcy5wYXR0ZXJuc1tpZF07XG5cbiAgICAgICAgY29uc3QgaW1hZ2UgPSB0aGlzLmdldEltYWdlKGlkKTtcbiAgICAgICAgaWYgKCFpbWFnZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGF0dGVybiAmJiBwYXR0ZXJuLnBvc2l0aW9uLnZlcnNpb24gPT09IGltYWdlLnZlcnNpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBwYXR0ZXJuLnBvc2l0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFwYXR0ZXJuKSB7XG4gICAgICAgICAgICBjb25zdCB3ID0gaW1hZ2UuZGF0YS53aWR0aCArIHBhZGRpbmcgKiAyO1xuICAgICAgICAgICAgY29uc3QgaCA9IGltYWdlLmRhdGEuaGVpZ2h0ICsgcGFkZGluZyAqIDI7XG4gICAgICAgICAgICBjb25zdCBiaW4gPSB7dywgaCwgeDogMCwgeTogMH07XG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IG5ldyBJbWFnZVBvc2l0aW9uKGJpbiwgaW1hZ2UpO1xuICAgICAgICAgICAgdGhpcy5wYXR0ZXJuc1tpZF0gPSB7YmluLCBwb3NpdGlvbn07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXR0ZXJuLnBvc2l0aW9uLnZlcnNpb24gPSBpbWFnZS52ZXJzaW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdXBkYXRlUGF0dGVybkF0bGFzKCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucGF0dGVybnNbaWRdLnBvc2l0aW9uO1xuICAgIH1cblxuICAgIGJpbmQoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgICAgIGlmICghdGhpcy5hdGxhc1RleHR1cmUpIHtcbiAgICAgICAgICAgIHRoaXMuYXRsYXNUZXh0dXJlID0gbmV3IFRleHR1cmUoY29udGV4dCwgdGhpcy5hdGxhc0ltYWdlLCBnbC5SR0JBKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRpcnR5KSB7XG4gICAgICAgICAgICB0aGlzLmF0bGFzVGV4dHVyZS51cGRhdGUodGhpcy5hdGxhc0ltYWdlKTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYXRsYXNUZXh0dXJlLmJpbmQoZ2wuTElORUFSLCBnbC5DTEFNUF9UT19FREdFKTtcbiAgICB9XG5cbiAgICBfdXBkYXRlUGF0dGVybkF0bGFzKCkge1xuICAgICAgICBjb25zdCBiaW5zID0gW107XG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5wYXR0ZXJucykge1xuICAgICAgICAgICAgYmlucy5wdXNoKHRoaXMucGF0dGVybnNbaWRdLmJpbik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7dywgaH0gPSBwb3RwYWNrKGJpbnMpO1xuXG4gICAgICAgIGNvbnN0IGRzdCA9IHRoaXMuYXRsYXNJbWFnZTtcbiAgICAgICAgZHN0LnJlc2l6ZSh7d2lkdGg6IHcgfHwgMSwgaGVpZ2h0OiBoIHx8IDF9KTtcblxuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMucGF0dGVybnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHtiaW59ID0gdGhpcy5wYXR0ZXJuc1tpZF07XG4gICAgICAgICAgICBjb25zdCB4ID0gYmluLnggKyBwYWRkaW5nO1xuICAgICAgICAgICAgY29uc3QgeSA9IGJpbi55ICsgcGFkZGluZztcbiAgICAgICAgICAgIGNvbnN0IHNyYyA9IHRoaXMuaW1hZ2VzW2lkXS5kYXRhO1xuICAgICAgICAgICAgY29uc3QgdyA9IHNyYy53aWR0aDtcbiAgICAgICAgICAgIGNvbnN0IGggPSBzcmMuaGVpZ2h0O1xuXG4gICAgICAgICAgICBSR0JBSW1hZ2UuY29weShzcmMsIGRzdCwge3g6IDAsIHk6IDB9LCB7eCwgeX0sIHt3aWR0aDogdywgaGVpZ2h0OiBofSk7XG5cbiAgICAgICAgICAgIC8vIEFkZCAxIHBpeGVsIHdyYXBwZWQgcGFkZGluZyBvbiBlYWNoIHNpZGUgb2YgdGhlIGltYWdlLlxuICAgICAgICAgICAgUkdCQUltYWdlLmNvcHkoc3JjLCBkc3QsIHt4OiAwLCB5OiBoIC0gMX0sIHt4LCB5OiB5IC0gMX0sIHt3aWR0aDogdywgaGVpZ2h0OiAxfSk7IC8vIFRcbiAgICAgICAgICAgIFJHQkFJbWFnZS5jb3B5KHNyYywgZHN0LCB7eDogMCwgeTogICAgIDB9LCB7eCwgeTogeSArIGh9LCB7d2lkdGg6IHcsIGhlaWdodDogMX0pOyAvLyBCXG4gICAgICAgICAgICBSR0JBSW1hZ2UuY29weShzcmMsIGRzdCwge3g6IHcgLSAxLCB5OiAwfSwge3g6IHggLSAxLCB5fSwge3dpZHRoOiAxLCBoZWlnaHQ6IGh9KTsgLy8gTFxuICAgICAgICAgICAgUkdCQUltYWdlLmNvcHkoc3JjLCBkc3QsIHt4OiAwLCAgICAgeTogMH0sIHt4OiB4ICsgdywgeX0sIHt3aWR0aDogMSwgaGVpZ2h0OiBofSk7IC8vIFJcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIH1cblxuICAgIGJlZ2luRnJhbWUoKSB7XG4gICAgICAgIHRoaXMuY2FsbGJhY2tEaXNwYXRjaGVkVGhpc0ZyYW1lID0ge307XG4gICAgfVxuXG4gICAgZGlzcGF0Y2hSZW5kZXJDYWxsYmFja3MoaWRzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIGZvciAoY29uc3QgaWQgb2YgaWRzKSB7XG5cbiAgICAgICAgICAgIC8vIHRoZSBjYWxsYmFjayBmb3IgdGhlIGltYWdlIHdhcyBhbHJlYWR5IGRpc3BhdGNoZWQgZm9yIGEgZGlmZmVyZW50IGZyYW1lXG4gICAgICAgICAgICBpZiAodGhpcy5jYWxsYmFja0Rpc3BhdGNoZWRUaGlzRnJhbWVbaWRdKSBjb250aW51ZTtcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tEaXNwYXRjaGVkVGhpc0ZyYW1lW2lkXSA9IHRydWU7XG5cbiAgICAgICAgICAgIGNvbnN0IGltYWdlID0gdGhpcy5pbWFnZXNbaWRdO1xuICAgICAgICAgICAgYXNzZXJ0KGltYWdlKTtcblxuICAgICAgICAgICAgY29uc3QgdXBkYXRlZCA9IHJlbmRlclN0eWxlSW1hZ2UoaW1hZ2UpO1xuICAgICAgICAgICAgaWYgKHVwZGF0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUltYWdlKGlkLCBpbWFnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEltYWdlTWFuYWdlcjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7Z2V0QXJyYXlCdWZmZXIsIFJlc291cmNlVHlwZX0gZnJvbSAnLi4vdXRpbC9hamF4JztcblxuaW1wb3J0IHBhcnNlR2x5cGhQQkYgZnJvbSAnLi9wYXJzZV9nbHlwaF9wYmYnO1xuXG5pbXBvcnQgdHlwZSB7U3R5bGVHbHlwaH0gZnJvbSAnLi9zdHlsZV9nbHlwaCc7XG5pbXBvcnQgdHlwZSB7UmVxdWVzdE1hbmFnZXJ9IGZyb20gJy4uL3V0aWwvbWFwYm94JztcbmltcG9ydCB0eXBlIHtDYWxsYmFja30gZnJvbSAnLi4vdHlwZXMvY2FsbGJhY2snO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoZm9udHN0YWNrOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsVGVtcGxhdGU6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RNYW5hZ2VyOiBSZXF1ZXN0TWFuYWdlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBDYWxsYmFjazx7W186IG51bWJlcl06IFN0eWxlR2x5cGggfCBudWxsfT4pIHtcbiAgICBjb25zdCBiZWdpbiA9IHJhbmdlICogMjU2O1xuICAgIGNvbnN0IGVuZCA9IGJlZ2luICsgMjU1O1xuXG4gICAgY29uc3QgcmVxdWVzdCA9IHJlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QoXG4gICAgICAgIHJlcXVlc3RNYW5hZ2VyLm5vcm1hbGl6ZUdseXBoc1VSTCh1cmxUZW1wbGF0ZSlcbiAgICAgICAgICAgIC5yZXBsYWNlKCd7Zm9udHN0YWNrfScsIGZvbnRzdGFjaylcbiAgICAgICAgICAgIC5yZXBsYWNlKCd7cmFuZ2V9JywgYCR7YmVnaW59LSR7ZW5kfWApLFxuICAgICAgICBSZXNvdXJjZVR5cGUuR2x5cGhzKTtcblxuICAgIGdldEFycmF5QnVmZmVyKHJlcXVlc3QsIChlcnI6ID9FcnJvciwgZGF0YTogP0FycmF5QnVmZmVyKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YSkge1xuICAgICAgICAgICAgY29uc3QgZ2x5cGhzID0ge307XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgZ2x5cGggb2YgcGFyc2VHbHlwaFBCRihkYXRhKSkge1xuICAgICAgICAgICAgICAgIGdseXBoc1tnbHlwaC5pZF0gPSBnbHlwaDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgZ2x5cGhzKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFRpbnlTREY7XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gVGlueVNERjtcblxudmFyIElORiA9IDFlMjA7XG5cbmZ1bmN0aW9uIFRpbnlTREYoZm9udFNpemUsIGJ1ZmZlciwgcmFkaXVzLCBjdXRvZmYsIGZvbnRGYW1pbHksIGZvbnRXZWlnaHQpIHtcbiAgICB0aGlzLmZvbnRTaXplID0gZm9udFNpemUgfHwgMjQ7XG4gICAgdGhpcy5idWZmZXIgPSBidWZmZXIgPT09IHVuZGVmaW5lZCA/IDMgOiBidWZmZXI7XG4gICAgdGhpcy5jdXRvZmYgPSBjdXRvZmYgfHwgMC4yNTtcbiAgICB0aGlzLmZvbnRGYW1pbHkgPSBmb250RmFtaWx5IHx8ICdzYW5zLXNlcmlmJztcbiAgICB0aGlzLmZvbnRXZWlnaHQgPSBmb250V2VpZ2h0IHx8ICdub3JtYWwnO1xuICAgIHRoaXMucmFkaXVzID0gcmFkaXVzIHx8IDg7XG4gICAgdmFyIHNpemUgPSB0aGlzLnNpemUgPSB0aGlzLmZvbnRTaXplICsgdGhpcy5idWZmZXIgKiAyO1xuXG4gICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuY2FudmFzLmhlaWdodCA9IHNpemU7XG5cbiAgICB0aGlzLmN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgdGhpcy5jdHguZm9udCA9IHRoaXMuZm9udFdlaWdodCArICcgJyArIHRoaXMuZm9udFNpemUgKyAncHggJyArIHRoaXMuZm9udEZhbWlseTtcbiAgICB0aGlzLmN0eC50ZXh0QmFzZWxpbmUgPSAnbWlkZGxlJztcbiAgICB0aGlzLmN0eC5maWxsU3R5bGUgPSAnYmxhY2snO1xuXG4gICAgLy8gdGVtcG9yYXJ5IGFycmF5cyBmb3IgdGhlIGRpc3RhbmNlIHRyYW5zZm9ybVxuICAgIHRoaXMuZ3JpZE91dGVyID0gbmV3IEZsb2F0NjRBcnJheShzaXplICogc2l6ZSk7XG4gICAgdGhpcy5ncmlkSW5uZXIgPSBuZXcgRmxvYXQ2NEFycmF5KHNpemUgKiBzaXplKTtcbiAgICB0aGlzLmYgPSBuZXcgRmxvYXQ2NEFycmF5KHNpemUpO1xuICAgIHRoaXMuZCA9IG5ldyBGbG9hdDY0QXJyYXkoc2l6ZSk7XG4gICAgdGhpcy56ID0gbmV3IEZsb2F0NjRBcnJheShzaXplICsgMSk7XG4gICAgdGhpcy52ID0gbmV3IEludDE2QXJyYXkoc2l6ZSk7XG5cbiAgICAvLyBoYWNrIGFyb3VuZCBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD03Mzc4NTJcbiAgICB0aGlzLm1pZGRsZSA9IE1hdGgucm91bmQoKHNpemUgLyAyKSAqIChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0dlY2tvLycpID49IDAgPyAxLjIgOiAxKSk7XG59XG5cblRpbnlTREYucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbiAoY2hhcikge1xuICAgIHRoaXMuY3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLnNpemUsIHRoaXMuc2l6ZSk7XG4gICAgdGhpcy5jdHguZmlsbFRleHQoY2hhciwgdGhpcy5idWZmZXIsIHRoaXMubWlkZGxlKTtcblxuICAgIHZhciBpbWdEYXRhID0gdGhpcy5jdHguZ2V0SW1hZ2VEYXRhKDAsIDAsIHRoaXMuc2l6ZSwgdGhpcy5zaXplKTtcbiAgICB2YXIgYWxwaGFDaGFubmVsID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHRoaXMuc2l6ZSAqIHRoaXMuc2l6ZSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc2l6ZSAqIHRoaXMuc2l6ZTsgaSsrKSB7XG4gICAgICAgIHZhciBhID0gaW1nRGF0YS5kYXRhW2kgKiA0ICsgM10gLyAyNTU7IC8vIGFscGhhIHZhbHVlXG4gICAgICAgIHRoaXMuZ3JpZE91dGVyW2ldID0gYSA9PT0gMSA/IDAgOiBhID09PSAwID8gSU5GIDogTWF0aC5wb3coTWF0aC5tYXgoMCwgMC41IC0gYSksIDIpO1xuICAgICAgICB0aGlzLmdyaWRJbm5lcltpXSA9IGEgPT09IDEgPyBJTkYgOiBhID09PSAwID8gMCA6IE1hdGgucG93KE1hdGgubWF4KDAsIGEgLSAwLjUpLCAyKTtcbiAgICB9XG5cbiAgICBlZHQodGhpcy5ncmlkT3V0ZXIsIHRoaXMuc2l6ZSwgdGhpcy5zaXplLCB0aGlzLmYsIHRoaXMuZCwgdGhpcy52LCB0aGlzLnopO1xuICAgIGVkdCh0aGlzLmdyaWRJbm5lciwgdGhpcy5zaXplLCB0aGlzLnNpemUsIHRoaXMuZiwgdGhpcy5kLCB0aGlzLnYsIHRoaXMueik7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5zaXplICogdGhpcy5zaXplOyBpKyspIHtcbiAgICAgICAgdmFyIGQgPSB0aGlzLmdyaWRPdXRlcltpXSAtIHRoaXMuZ3JpZElubmVyW2ldO1xuICAgICAgICBhbHBoYUNoYW5uZWxbaV0gPSBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQoMjU1IC0gMjU1ICogKGQgLyB0aGlzLnJhZGl1cyArIHRoaXMuY3V0b2ZmKSkpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWxwaGFDaGFubmVsO1xufTtcblxuLy8gMkQgRXVjbGlkZWFuIGRpc3RhbmNlIHRyYW5zZm9ybSBieSBGZWx6ZW5zendhbGIgJiBIdXR0ZW5sb2NoZXIgaHR0cHM6Ly9jcy5icm93bi5lZHUvfnBmZi9wYXBlcnMvZHQtZmluYWwucGRmXG5mdW5jdGlvbiBlZHQoZGF0YSwgd2lkdGgsIGhlaWdodCwgZiwgZCwgdiwgeikge1xuICAgIGZvciAodmFyIHggPSAwOyB4IDwgd2lkdGg7IHgrKykge1xuICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7XG4gICAgICAgICAgICBmW3ldID0gZGF0YVt5ICogd2lkdGggKyB4XTtcbiAgICAgICAgfVxuICAgICAgICBlZHQxZChmLCBkLCB2LCB6LCBoZWlnaHQpO1xuICAgICAgICBmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHtcbiAgICAgICAgICAgIGRhdGFbeSAqIHdpZHRoICsgeF0gPSBkW3ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAoeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykge1xuICAgICAgICBmb3IgKHggPSAwOyB4IDwgd2lkdGg7IHgrKykge1xuICAgICAgICAgICAgZlt4XSA9IGRhdGFbeSAqIHdpZHRoICsgeF07XG4gICAgICAgIH1cbiAgICAgICAgZWR0MWQoZiwgZCwgdiwgeiwgd2lkdGgpO1xuICAgICAgICBmb3IgKHggPSAwOyB4IDwgd2lkdGg7IHgrKykge1xuICAgICAgICAgICAgZGF0YVt5ICogd2lkdGggKyB4XSA9IE1hdGguc3FydChkW3hdKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gMUQgc3F1YXJlZCBkaXN0YW5jZSB0cmFuc2Zvcm1cbmZ1bmN0aW9uIGVkdDFkKGYsIGQsIHYsIHosIG4pIHtcbiAgICB2WzBdID0gMDtcbiAgICB6WzBdID0gLUlORjtcbiAgICB6WzFdID0gK0lORjtcblxuICAgIGZvciAodmFyIHEgPSAxLCBrID0gMDsgcSA8IG47IHErKykge1xuICAgICAgICB2YXIgcyA9ICgoZltxXSArIHEgKiBxKSAtIChmW3Zba11dICsgdltrXSAqIHZba10pKSAvICgyICogcSAtIDIgKiB2W2tdKTtcbiAgICAgICAgd2hpbGUgKHMgPD0geltrXSkge1xuICAgICAgICAgICAgay0tO1xuICAgICAgICAgICAgcyA9ICgoZltxXSArIHEgKiBxKSAtIChmW3Zba11dICsgdltrXSAqIHZba10pKSAvICgyICogcSAtIDIgKiB2W2tdKTtcbiAgICAgICAgfVxuICAgICAgICBrKys7XG4gICAgICAgIHZba10gPSBxO1xuICAgICAgICB6W2tdID0gcztcbiAgICAgICAgeltrICsgMV0gPSArSU5GO1xuICAgIH1cblxuICAgIGZvciAocSA9IDAsIGsgPSAwOyBxIDwgbjsgcSsrKSB7XG4gICAgICAgIHdoaWxlICh6W2sgKyAxXSA8IHEpIGsrKztcbiAgICAgICAgZFtxXSA9IChxIC0gdltrXSkgKiAocSAtIHZba10pICsgZlt2W2tdXTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgbG9hZEdseXBoUmFuZ2UgZnJvbSAnLi4vc3R5bGUvbG9hZF9nbHlwaF9yYW5nZSc7XG5cbmltcG9ydCBUaW55U0RGIGZyb20gJ0BtYXBib3gvdGlueS1zZGYnO1xuaW1wb3J0IGlzQ2hhciBmcm9tICcuLi91dGlsL2lzX2NoYXJfaW5fdW5pY29kZV9ibG9jayc7XG5pbXBvcnQge2FzeW5jQWxsfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHtBbHBoYUltYWdlfSBmcm9tICcuLi91dGlsL2ltYWdlJztcblxuaW1wb3J0IHR5cGUge1N0eWxlR2x5cGh9IGZyb20gJy4uL3N0eWxlL3N0eWxlX2dseXBoJztcbmltcG9ydCB0eXBlIHtSZXF1ZXN0TWFuYWdlcn0gZnJvbSAnLi4vdXRpbC9tYXBib3gnO1xuaW1wb3J0IHR5cGUge0NhbGxiYWNrfSBmcm9tICcuLi90eXBlcy9jYWxsYmFjayc7XG5cbnR5cGUgRW50cnkgPSB7XG4gICAgLy8gbnVsbCBtZWFucyB3ZSd2ZSByZXF1ZXN0ZWQgdGhlIHJhbmdlLCBidXQgdGhlIGdseXBoIHdhc24ndCBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0LlxuICAgIGdseXBoczoge1tpZDogbnVtYmVyXTogU3R5bGVHbHlwaCB8IG51bGx9LFxuICAgIHJlcXVlc3RzOiB7W3JhbmdlOiBudW1iZXJdOiBBcnJheTxDYWxsYmFjazx7W186IG51bWJlcl06IFN0eWxlR2x5cGggfCBudWxsfT4+fSxcbiAgICByYW5nZXM6IHtbcmFuZ2U6IG51bWJlcl06IGJvb2xlYW4gfCBudWxsfSxcbiAgICB0aW55U0RGPzogVGlueVNERlxufTtcblxuY2xhc3MgR2x5cGhNYW5hZ2VyIHtcbiAgICByZXF1ZXN0TWFuYWdlcjogUmVxdWVzdE1hbmFnZXI7XG4gICAgbG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5OiA/c3RyaW5nO1xuICAgIGVudHJpZXM6IHtbXzogc3RyaW5nXTogRW50cnl9O1xuICAgIHVybDogP3N0cmluZztcblxuICAgIC8vIGV4cG9zZWQgYXMgc3RhdGljcyB0byBlbmFibGUgc3R1YmJpbmcgaW4gdW5pdCB0ZXN0c1xuICAgIHN0YXRpYyBsb2FkR2x5cGhSYW5nZTogdHlwZW9mIGxvYWRHbHlwaFJhbmdlO1xuICAgIHN0YXRpYyBUaW55U0RGOiBDbGFzczxUaW55U0RGPjtcblxuICAgIGNvbnN0cnVjdG9yKHJlcXVlc3RNYW5hZ2VyOiBSZXF1ZXN0TWFuYWdlciwgbG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5OiA/c3RyaW5nKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdE1hbmFnZXIgPSByZXF1ZXN0TWFuYWdlcjtcbiAgICAgICAgdGhpcy5sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHkgPSBsb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk7XG4gICAgICAgIHRoaXMuZW50cmllcyA9IHt9O1xuICAgIH1cblxuICAgIHNldFVSTCh1cmw6ID9zdHJpbmcpIHtcbiAgICAgICAgdGhpcy51cmwgPSB1cmw7XG4gICAgfVxuXG4gICAgZ2V0R2x5cGhzKGdseXBoczoge1tzdGFjazogc3RyaW5nXTogQXJyYXk8bnVtYmVyPn0sIGNhbGxiYWNrOiBDYWxsYmFjazx7W3N0YWNrOiBzdHJpbmddOiB7W2lkOiBudW1iZXJdOiA/U3R5bGVHbHlwaH19Pikge1xuICAgICAgICBjb25zdCBhbGwgPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IHN0YWNrIGluIGdseXBocykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBpZCBvZiBnbHlwaHNbc3RhY2tdKSB7XG4gICAgICAgICAgICAgICAgYWxsLnB1c2goe3N0YWNrLCBpZH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYXN5bmNBbGwoYWxsLCAoe3N0YWNrLCBpZH0sIGNhbGxiYWNrOiBDYWxsYmFjazx7c3RhY2s6IHN0cmluZywgaWQ6IG51bWJlciwgZ2x5cGg6ID9TdHlsZUdseXBofT4pID0+IHtcbiAgICAgICAgICAgIGxldCBlbnRyeSA9IHRoaXMuZW50cmllc1tzdGFja107XG4gICAgICAgICAgICBpZiAoIWVudHJ5KSB7XG4gICAgICAgICAgICAgICAgZW50cnkgPSB0aGlzLmVudHJpZXNbc3RhY2tdID0ge1xuICAgICAgICAgICAgICAgICAgICBnbHlwaHM6IHt9LFxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0czoge30sXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlczoge31cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgZ2x5cGggPSBlbnRyeS5nbHlwaHNbaWRdO1xuICAgICAgICAgICAgaWYgKGdseXBoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB7c3RhY2ssIGlkLCBnbHlwaH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2x5cGggPSB0aGlzLl90aW55U0RGKGVudHJ5LCBzdGFjaywgaWQpO1xuICAgICAgICAgICAgaWYgKGdseXBoKSB7XG4gICAgICAgICAgICAgICAgZW50cnkuZ2x5cGhzW2lkXSA9IGdseXBoO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHtzdGFjaywgaWQsIGdseXBofSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IE1hdGguZmxvb3IoaWQgLyAyNTYpO1xuICAgICAgICAgICAgaWYgKHJhbmdlICogMjU2ID4gNjU1MzUpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoJ2dseXBocyA+IDY1NTM1IG5vdCBzdXBwb3J0ZWQnKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZW50cnkucmFuZ2VzW3JhbmdlXSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHtzdGFjaywgaWQsIGdseXBofSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgcmVxdWVzdHMgPSBlbnRyeS5yZXF1ZXN0c1tyYW5nZV07XG4gICAgICAgICAgICBpZiAoIXJlcXVlc3RzKSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdHMgPSBlbnRyeS5yZXF1ZXN0c1tyYW5nZV0gPSBbXTtcbiAgICAgICAgICAgICAgICBHbHlwaE1hbmFnZXIubG9hZEdseXBoUmFuZ2Uoc3RhY2ssIHJhbmdlLCAodGhpcy51cmw6IGFueSksIHRoaXMucmVxdWVzdE1hbmFnZXIsXG4gICAgICAgICAgICAgICAgICAgIChlcnIsIHJlc3BvbnNlOiA/e1tfOiBudW1iZXJdOiBTdHlsZUdseXBoIHwgbnVsbH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaWQgaW4gcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9kb2VzQ2hhclN1cHBvcnRMb2NhbEdseXBoKCtpZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LmdseXBoc1sraWRdID0gcmVzcG9uc2VbK2lkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5yYW5nZXNbcmFuZ2VdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY2Igb2YgcmVxdWVzdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYihlcnIsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBlbnRyeS5yZXF1ZXN0c1tyYW5nZV07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXF1ZXN0cy5wdXNoKChlcnIsIHJlc3VsdDogP3tbXzogbnVtYmVyXTogU3R5bGVHbHlwaCB8IG51bGx9KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHtzdGFjaywgaWQsIGdseXBoOiByZXN1bHRbaWRdIHx8IG51bGx9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgKGVyciwgZ2x5cGhzOiA/QXJyYXk8e3N0YWNrOiBzdHJpbmcsIGlkOiBudW1iZXIsIGdseXBoOiA/U3R5bGVHbHlwaH0+KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZ2x5cGhzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHtzdGFjaywgaWQsIGdseXBofSBvZiBnbHlwaHMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2xvbmUgdGhlIGdseXBoIHNvIHRoYXQgb3VyIG93biBjb3B5IG9mIGl0cyBBcnJheUJ1ZmZlciBkb2Vzbid0IGdldCB0cmFuc2ZlcnJlZC5cbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdFtzdGFja10gfHwgKHJlc3VsdFtzdGFja10gPSB7fSkpW2lkXSA9IGdseXBoICYmIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBnbHlwaC5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcDogZ2x5cGguYml0bWFwLmNsb25lKCksXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRyaWNzOiBnbHlwaC5tZXRyaWNzXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX2RvZXNDaGFyU3VwcG9ydExvY2FsR2x5cGgoaWQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuZXctY2FwICovXG4gICAgICAgIHJldHVybiAhIXRoaXMubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5ICYmXG4gICAgICAgICAgICAoaXNDaGFyWydDSksgVW5pZmllZCBJZGVvZ3JhcGhzJ10oaWQpIHx8XG4gICAgICAgICAgICAgICAgaXNDaGFyWydIYW5ndWwgU3lsbGFibGVzJ10oaWQpIHx8XG4gICAgICAgICAgICAgICAgaXNDaGFyWydIaXJhZ2FuYSddKGlkKSB8fFxuICAgICAgICAgICAgICAgIGlzQ2hhclsnS2F0YWthbmEnXShpZCkpO1xuICAgICAgICAvKiBlc2xpbnQtZW5hYmxlIG5ldy1jYXAgKi9cbiAgICB9XG5cbiAgICBfdGlueVNERihlbnRyeTogRW50cnksIHN0YWNrOiBzdHJpbmcsIGlkOiBudW1iZXIpOiA/U3R5bGVHbHlwaCB7XG4gICAgICAgIGNvbnN0IGZhbWlseSA9IHRoaXMubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5O1xuICAgICAgICBpZiAoIWZhbWlseSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9kb2VzQ2hhclN1cHBvcnRMb2NhbEdseXBoKGlkKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHRpbnlTREYgPSBlbnRyeS50aW55U0RGO1xuICAgICAgICBpZiAoIXRpbnlTREYpIHtcbiAgICAgICAgICAgIGxldCBmb250V2VpZ2h0ID0gJzQwMCc7XG4gICAgICAgICAgICBpZiAoL2JvbGQvaS50ZXN0KHN0YWNrKSkge1xuICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQgPSAnOTAwJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoL21lZGl1bS9pLnRlc3Qoc3RhY2spKSB7XG4gICAgICAgICAgICAgICAgZm9udFdlaWdodCA9ICc1MDAnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgvbGlnaHQvaS50ZXN0KHN0YWNrKSkge1xuICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQgPSAnMjAwJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRpbnlTREYgPSBlbnRyeS50aW55U0RGID0gbmV3IEdseXBoTWFuYWdlci5UaW55U0RGKDI0LCAzLCA4LCAuMjUsIGZhbWlseSwgZm9udFdlaWdodCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICBiaXRtYXA6IG5ldyBBbHBoYUltYWdlKHt3aWR0aDogMzAsIGhlaWdodDogMzB9LCB0aW55U0RGLmRyYXcoU3RyaW5nLmZyb21DaGFyQ29kZShpZCkpKSxcbiAgICAgICAgICAgIG1ldHJpY3M6IHtcbiAgICAgICAgICAgICAgICB3aWR0aDogMjQsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAyNCxcbiAgICAgICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgICAgIHRvcDogLTgsXG4gICAgICAgICAgICAgICAgYWR2YW5jZTogMjRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG59XG5cbkdseXBoTWFuYWdlci5sb2FkR2x5cGhSYW5nZSA9IGxvYWRHbHlwaFJhbmdlO1xuR2x5cGhNYW5hZ2VyLlRpbnlTREYgPSBUaW55U0RGO1xuXG5leHBvcnQgZGVmYXVsdCBHbHlwaE1hbmFnZXI7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgc3R5bGVTcGVjIGZyb20gJy4uL3N0eWxlLXNwZWMvcmVmZXJlbmNlL2xhdGVzdCc7XG5cbmltcG9ydCB7ZW5kc1dpdGgsIGV4dGVuZCwgc3BoZXJpY2FsVG9DYXJ0ZXNpYW59IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQge0V2ZW50ZWR9IGZyb20gJy4uL3V0aWwvZXZlbnRlZCc7XG5pbXBvcnQge1xuICAgIHZhbGlkYXRlU3R5bGUsXG4gICAgdmFsaWRhdGVMaWdodCxcbiAgICBlbWl0VmFsaWRhdGlvbkVycm9yc1xufSBmcm9tICcuL3ZhbGlkYXRlX3N0eWxlJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuaW1wb3J0IHtudW1iZXIgYXMgaW50ZXJwb2xhdGV9IGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9pbnRlcnBvbGF0ZSc7XG5cbmltcG9ydCB0eXBlIHtTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy9zdHlsZS1zcGVjJztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4vZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcbmltcG9ydCB0eXBlIHtTdHlsZVNldHRlck9wdGlvbnN9IGZyb20gJy4uL3N0eWxlL3N0eWxlJztcbmltcG9ydCB7UHJvcGVydGllcywgVHJhbnNpdGlvbmFibGUsIFRyYW5zaXRpb25pbmcsIFBvc3NpYmx5RXZhbHVhdGVkLCBEYXRhQ29uc3RhbnRQcm9wZXJ0eX0gZnJvbSAnLi9wcm9wZXJ0aWVzJztcblxuaW1wb3J0IHR5cGUge1xuICAgIFByb3BlcnR5LFxuICAgIFByb3BlcnR5VmFsdWUsXG4gICAgVHJhbnNpdGlvblBhcmFtZXRlcnNcbn0gZnJvbSAnLi9wcm9wZXJ0aWVzJztcblxuaW1wb3J0IHR5cGUge0xpZ2h0U3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbnR5cGUgTGlnaHRQb3NpdGlvbiA9IHtcbiAgICB4OiBudW1iZXIsXG4gICAgeTogbnVtYmVyLFxuICAgIHo6IG51bWJlclxufTtcblxuY2xhc3MgTGlnaHRQb3NpdGlvblByb3BlcnR5IGltcGxlbWVudHMgUHJvcGVydHk8W251bWJlciwgbnVtYmVyLCBudW1iZXJdLCBMaWdodFBvc2l0aW9uPiB7XG4gICAgc3BlY2lmaWNhdGlvbjogU3R5bGVQcm9wZXJ0eVNwZWNpZmljYXRpb247XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5zcGVjaWZpY2F0aW9uID0gc3R5bGVTcGVjLmxpZ2h0LnBvc2l0aW9uO1xuICAgIH1cblxuICAgIHBvc3NpYmx5RXZhbHVhdGUodmFsdWU6IFByb3BlcnR5VmFsdWU8W251bWJlciwgbnVtYmVyLCBudW1iZXJdLCBMaWdodFBvc2l0aW9uPiwgcGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMpOiBMaWdodFBvc2l0aW9uIHtcbiAgICAgICAgcmV0dXJuIHNwaGVyaWNhbFRvQ2FydGVzaWFuKHZhbHVlLmV4cHJlc3Npb24uZXZhbHVhdGUocGFyYW1ldGVycykpO1xuICAgIH1cblxuICAgIGludGVycG9sYXRlKGE6IExpZ2h0UG9zaXRpb24sIGI6IExpZ2h0UG9zaXRpb24sIHQ6IG51bWJlcik6IExpZ2h0UG9zaXRpb24ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogaW50ZXJwb2xhdGUoYS54LCBiLngsIHQpLFxuICAgICAgICAgICAgeTogaW50ZXJwb2xhdGUoYS55LCBiLnksIHQpLFxuICAgICAgICAgICAgejogaW50ZXJwb2xhdGUoYS56LCBiLnosIHQpLFxuICAgICAgICB9O1xuICAgIH1cbn1cblxudHlwZSBQcm9wcyA9IHt8XG4gICAgXCJhbmNob3JcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJtYXBcIiB8IFwidmlld3BvcnRcIj4sXG4gICAgXCJwb3NpdGlvblwiOiBMaWdodFBvc2l0aW9uUHJvcGVydHksXG4gICAgXCJjb2xvclwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxDb2xvcj4sXG4gICAgXCJpbnRlbnNpdHlcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbnx9O1xuXG5jb25zdCBwcm9wZXJ0aWVzOiBQcm9wZXJ0aWVzPFByb3BzPiA9IG5ldyBQcm9wZXJ0aWVzKHtcbiAgICBcImFuY2hvclwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjLmxpZ2h0LmFuY2hvciksXG4gICAgXCJwb3NpdGlvblwiOiBuZXcgTGlnaHRQb3NpdGlvblByb3BlcnR5KCksXG4gICAgXCJjb2xvclwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjLmxpZ2h0LmNvbG9yKSxcbiAgICBcImludGVuc2l0eVwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjLmxpZ2h0LmludGVuc2l0eSksXG59KTtcblxuY29uc3QgVFJBTlNJVElPTl9TVUZGSVggPSAnLXRyYW5zaXRpb24nO1xuXG4vKlxuICogUmVwcmVzZW50cyB0aGUgbGlnaHQgdXNlZCB0byBsaWdodCBleHRydWRlZCBmZWF0dXJlcy5cbiAqL1xuY2xhc3MgTGlnaHQgZXh0ZW5kcyBFdmVudGVkIHtcbiAgICBfdHJhbnNpdGlvbmFibGU6IFRyYW5zaXRpb25hYmxlPFByb3BzPjtcbiAgICBfdHJhbnNpdGlvbmluZzogVHJhbnNpdGlvbmluZzxQcm9wcz47XG4gICAgcHJvcGVydGllczogUG9zc2libHlFdmFsdWF0ZWQ8UHJvcHM+O1xuXG4gICAgY29uc3RydWN0b3IobGlnaHRPcHRpb25zPzogTGlnaHRTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX3RyYW5zaXRpb25hYmxlID0gbmV3IFRyYW5zaXRpb25hYmxlKHByb3BlcnRpZXMpO1xuICAgICAgICB0aGlzLnNldExpZ2h0KGxpZ2h0T3B0aW9ucyk7XG4gICAgICAgIHRoaXMuX3RyYW5zaXRpb25pbmcgPSB0aGlzLl90cmFuc2l0aW9uYWJsZS51bnRyYW5zaXRpb25lZCgpO1xuICAgIH1cblxuICAgIGdldExpZ2h0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNpdGlvbmFibGUuc2VyaWFsaXplKCk7XG4gICAgfVxuXG4gICAgc2V0TGlnaHQobGlnaHQ/OiBMaWdodFNwZWNpZmljYXRpb24sIG9wdGlvbnM6IFN0eWxlU2V0dGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICh0aGlzLl92YWxpZGF0ZSh2YWxpZGF0ZUxpZ2h0LCBsaWdodCwgb3B0aW9ucykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBpbiBsaWdodCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBsaWdodFtuYW1lXTtcbiAgICAgICAgICAgIGlmIChlbmRzV2l0aChuYW1lLCBUUkFOU0lUSU9OX1NVRkZJWCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2l0aW9uYWJsZS5zZXRUcmFuc2l0aW9uKG5hbWUuc2xpY2UoMCwgLVRSQU5TSVRJT05fU1VGRklYLmxlbmd0aCksIHZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvbmFibGUuc2V0VmFsdWUobmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlVHJhbnNpdGlvbnMocGFyYW1ldGVyczogVHJhbnNpdGlvblBhcmFtZXRlcnMpIHtcbiAgICAgICAgdGhpcy5fdHJhbnNpdGlvbmluZyA9IHRoaXMuX3RyYW5zaXRpb25hYmxlLnRyYW5zaXRpb25lZChwYXJhbWV0ZXJzLCB0aGlzLl90cmFuc2l0aW9uaW5nKTtcbiAgICB9XG5cbiAgICBoYXNUcmFuc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNpdGlvbmluZy5oYXNUcmFuc2l0aW9uKCk7XG4gICAgfVxuXG4gICAgcmVjYWxjdWxhdGUocGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMpIHtcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gdGhpcy5fdHJhbnNpdGlvbmluZy5wb3NzaWJseUV2YWx1YXRlKHBhcmFtZXRlcnMpO1xuICAgIH1cblxuICAgIF92YWxpZGF0ZSh2YWxpZGF0ZTogRnVuY3Rpb24sIHZhbHVlOiBtaXhlZCwgb3B0aW9ucz86IHt2YWxpZGF0ZT86IGJvb2xlYW59KSB7XG4gICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMudmFsaWRhdGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZW1pdFZhbGlkYXRpb25FcnJvcnModGhpcywgdmFsaWRhdGUuY2FsbCh2YWxpZGF0ZVN0eWxlLCBleHRlbmQoe1xuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvMjQwN1xuICAgICAgICAgICAgc3R5bGU6IHtnbHlwaHM6IHRydWUsIHNwcml0ZTogdHJ1ZX0sXG4gICAgICAgICAgICBzdHlsZVNwZWNcbiAgICAgICAgfSkpKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpZ2h0O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHt3YXJuT25jZX0gZnJvbSAnLi4vdXRpbC91dGlsJztcblxuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi9nbC9jb250ZXh0JztcblxuLyoqXG4gKiBBIExpbmVBdGxhcyBsZXRzIHVzIHJldXNlIHJlbmRlcmVkIGRhc2hlZCBsaW5lc1xuICogYnkgd3JpdGluZyBtYW55IG9mIHRoZW0gdG8gYSB0ZXh0dXJlIGFuZCB0aGVuIGZldGNoaW5nIHRoZWlyIHBvc2l0aW9uc1xuICogdXNpbmcgLmdldERhc2guXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoXG4gKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0XG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBMaW5lQXRsYXMge1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgaGVpZ2h0OiBudW1iZXI7XG4gICAgbmV4dFJvdzogbnVtYmVyO1xuICAgIGJ5dGVzOiBudW1iZXI7XG4gICAgZGF0YTogVWludDhBcnJheTtcbiAgICBkYXNoRW50cnk6IHtbXzogc3RyaW5nXTogYW55fTtcbiAgICBkaXJ0eTogYm9vbGVhbjtcbiAgICB0ZXh0dXJlOiBXZWJHTFRleHR1cmU7XG5cbiAgICBjb25zdHJ1Y3Rvcih3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICB0aGlzLm5leHRSb3cgPSAwO1xuXG4gICAgICAgIHRoaXMuZGF0YSA9IG5ldyBVaW50OEFycmF5KHRoaXMud2lkdGggKiB0aGlzLmhlaWdodCk7XG5cbiAgICAgICAgdGhpcy5kYXNoRW50cnkgPSB7fTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgb3IgY3JlYXRlIGEgZGFzaCBsaW5lIHBhdHRlcm4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IGRhc2hhcnJheVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gcm91bmQgd2hldGhlciB0byBhZGQgY2lyY2xlIGNhcHMgaW4gYmV0d2VlbiBkYXNoIHNlZ21lbnRzXG4gICAgICogQHJldHVybnMge09iamVjdH0gcG9zaXRpb24gb2YgZGFzaCB0ZXh0dXJlIGluIHsgeSwgaGVpZ2h0LCB3aWR0aCB9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBnZXREYXNoKGRhc2hhcnJheTogQXJyYXk8bnVtYmVyPiwgcm91bmQ6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3Qga2V5ID0gZGFzaGFycmF5LmpvaW4oXCIsXCIpICsgU3RyaW5nKHJvdW5kKTtcblxuICAgICAgICBpZiAoIXRoaXMuZGFzaEVudHJ5W2tleV0pIHtcbiAgICAgICAgICAgIHRoaXMuZGFzaEVudHJ5W2tleV0gPSB0aGlzLmFkZERhc2goZGFzaGFycmF5LCByb3VuZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGFzaEVudHJ5W2tleV07XG4gICAgfVxuXG4gICAgZ2V0RGFzaFJhbmdlcyhkYXNoYXJyYXk6IEFycmF5PG51bWJlcj4sIGxpbmVBdGxhc1dpZHRoOiBudW1iZXIsIHN0cmV0Y2g6IG51bWJlcikge1xuICAgICAgICAvLyBJZiBkYXNoYXJyYXkgaGFzIGFuIG9kZCBsZW5ndGgsIGJvdGggdGhlIGZpcnN0IGFuZCBsYXN0IHBhcnRzXG4gICAgICAgIC8vIGFyZSBkYXNoZXMgYW5kIHNob3VsZCBiZSBqb2luZWQgc2VhbWxlc3NseS5cbiAgICAgICAgY29uc3Qgb2RkRGFzaEFycmF5ID0gZGFzaGFycmF5Lmxlbmd0aCAlIDIgPT09IDE7XG5cbiAgICAgICAgY29uc3QgcmFuZ2VzID0gW107XG5cbiAgICAgICAgbGV0IGxlZnQgPSBvZGREYXNoQXJyYXkgPyAtZGFzaGFycmF5W2Rhc2hhcnJheS5sZW5ndGggLSAxXSAqIHN0cmV0Y2ggOiAwO1xuICAgICAgICBsZXQgcmlnaHQgPSBkYXNoYXJyYXlbMF0gKiBzdHJldGNoO1xuICAgICAgICBsZXQgaXNEYXNoID0gdHJ1ZTtcblxuICAgICAgICByYW5nZXMucHVzaCh7bGVmdCwgcmlnaHQsIGlzRGFzaCwgemVyb0xlbmd0aDogZGFzaGFycmF5WzBdID09PSAwfSk7XG5cbiAgICAgICAgbGV0IGN1cnJlbnREYXNoTGVuZ3RoID0gZGFzaGFycmF5WzBdO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGRhc2hhcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaXNEYXNoID0gIWlzRGFzaDtcblxuICAgICAgICAgICAgY29uc3QgZGFzaExlbmd0aCA9IGRhc2hhcnJheVtpXTtcbiAgICAgICAgICAgIGxlZnQgPSBjdXJyZW50RGFzaExlbmd0aCAqIHN0cmV0Y2g7XG4gICAgICAgICAgICBjdXJyZW50RGFzaExlbmd0aCArPSBkYXNoTGVuZ3RoO1xuICAgICAgICAgICAgcmlnaHQgPSBjdXJyZW50RGFzaExlbmd0aCAqIHN0cmV0Y2g7XG5cbiAgICAgICAgICAgIHJhbmdlcy5wdXNoKHtsZWZ0LCByaWdodCwgaXNEYXNoLCB6ZXJvTGVuZ3RoOiBkYXNoTGVuZ3RoID09PSAwfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmFuZ2VzO1xuICAgIH1cblxuICAgIGFkZFJvdW5kRGFzaChyYW5nZXM6IE9iamVjdCwgc3RyZXRjaDogbnVtYmVyLCBuOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaGFsZlN0cmV0Y2ggPSBzdHJldGNoIC8gMjtcblxuICAgICAgICBmb3IgKGxldCB5ID0gLW47IHkgPD0gbjsgeSsrKSB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLm5leHRSb3cgKyBuICsgeTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy53aWR0aCAqIHJvdztcbiAgICAgICAgICAgIGxldCBjdXJySW5kZXggPSAwO1xuICAgICAgICAgICAgbGV0IHJhbmdlID0gcmFuZ2VzW2N1cnJJbmRleF07XG5cbiAgICAgICAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgdGhpcy53aWR0aDsgeCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHggLyByYW5nZS5yaWdodCA+IDEpIHsgcmFuZ2UgPSByYW5nZXNbKytjdXJySW5kZXhdOyB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBkaXN0TGVmdCA9IE1hdGguYWJzKHggLSByYW5nZS5sZWZ0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXN0UmlnaHQgPSBNYXRoLmFicyh4IC0gcmFuZ2UucmlnaHQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1pbkRpc3QgPSBNYXRoLm1pbihkaXN0TGVmdCwgZGlzdFJpZ2h0KTtcbiAgICAgICAgICAgICAgICBsZXQgc2lnbmVkRGlzdGFuY2U7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBkaXN0TWlkZGxlID0gIHkgLyBuICogKGhhbGZTdHJldGNoICsgMSk7XG4gICAgICAgICAgICAgICAgaWYgKHJhbmdlLmlzRGFzaCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXN0RWRnZSA9IGhhbGZTdHJldGNoIC0gTWF0aC5hYnMoZGlzdE1pZGRsZSk7XG4gICAgICAgICAgICAgICAgICAgIHNpZ25lZERpc3RhbmNlID0gTWF0aC5zcXJ0KG1pbkRpc3QgKiBtaW5EaXN0ICsgZGlzdEVkZ2UgKiBkaXN0RWRnZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2lnbmVkRGlzdGFuY2UgPSBoYWxmU3RyZXRjaCAtIE1hdGguc3FydChtaW5EaXN0ICogbWluRGlzdCArIGRpc3RNaWRkbGUgKiBkaXN0TWlkZGxlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFbaW5kZXggKyB4XSA9IE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgc2lnbmVkRGlzdGFuY2UgKyAxMjgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFkZFJlZ3VsYXJEYXNoKHJhbmdlczogT2JqZWN0KSB7XG5cbiAgICAgICAgLy8gQ29sbGFwc2UgYW55IHplcm8tbGVuZ3RoIHJhbmdlXG4gICAgICAgIC8vIENvbGxhcHNlIG5laWdoYm91cmluZyBzYW1lLXR5cGUgcGFydHMgaW50byBhIHNpbmdsZSBwYXJ0XG4gICAgICAgIGZvciAobGV0IGkgPSByYW5nZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnQgPSByYW5nZXNbaV07XG4gICAgICAgICAgICBjb25zdCBuZXh0ID0gcmFuZ2VzW2kgKyAxXTtcbiAgICAgICAgICAgIGlmIChwYXJ0Lnplcm9MZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByYW5nZXMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChuZXh0ICYmIG5leHQuaXNEYXNoID09PSBwYXJ0LmlzRGFzaCkge1xuICAgICAgICAgICAgICAgIG5leHQubGVmdCA9IHBhcnQubGVmdDtcbiAgICAgICAgICAgICAgICByYW5nZXMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29tYmluZSB0aGUgZmlyc3QgYW5kIGxhc3QgcGFydHMgaWYgcG9zc2libGVcbiAgICAgICAgY29uc3QgZmlyc3QgPSByYW5nZXNbMF07XG4gICAgICAgIGNvbnN0IGxhc3QgPSByYW5nZXNbcmFuZ2VzLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAoZmlyc3QuaXNEYXNoID09PSBsYXN0LmlzRGFzaCkge1xuICAgICAgICAgICAgZmlyc3QubGVmdCA9IGxhc3QubGVmdCAtIHRoaXMud2lkdGg7XG4gICAgICAgICAgICBsYXN0LnJpZ2h0ID0gZmlyc3QucmlnaHQgKyB0aGlzLndpZHRoO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLndpZHRoICogdGhpcy5uZXh0Um93O1xuICAgICAgICBsZXQgY3VyckluZGV4ID0gMDtcbiAgICAgICAgbGV0IHJhbmdlID0gcmFuZ2VzW2N1cnJJbmRleF07XG5cbiAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCB0aGlzLndpZHRoOyB4KyspIHtcbiAgICAgICAgICAgIGlmICh4IC8gcmFuZ2UucmlnaHQgPiAxKSB7XG4gICAgICAgICAgICAgICAgcmFuZ2UgPSByYW5nZXNbKytjdXJySW5kZXhdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBkaXN0TGVmdCA9IE1hdGguYWJzKHggLSByYW5nZS5sZWZ0KTtcbiAgICAgICAgICAgIGNvbnN0IGRpc3RSaWdodCA9IE1hdGguYWJzKHggLSByYW5nZS5yaWdodCk7XG5cbiAgICAgICAgICAgIGNvbnN0IG1pbkRpc3QgPSBNYXRoLm1pbihkaXN0TGVmdCwgZGlzdFJpZ2h0KTtcbiAgICAgICAgICAgIGNvbnN0IHNpZ25lZERpc3RhbmNlID0gcmFuZ2UuaXNEYXNoID8gbWluRGlzdCA6IC1taW5EaXN0O1xuXG4gICAgICAgICAgICB0aGlzLmRhdGFbaW5kZXggKyB4XSA9IE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgc2lnbmVkRGlzdGFuY2UgKyAxMjgpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFkZERhc2goZGFzaGFycmF5OiBBcnJheTxudW1iZXI+LCByb3VuZDogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBuID0gcm91bmQgPyA3IDogMDtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gMiAqIG4gKyAxO1xuXG4gICAgICAgIGlmICh0aGlzLm5leHRSb3cgKyBoZWlnaHQgPiB0aGlzLmhlaWdodCkge1xuICAgICAgICAgICAgd2Fybk9uY2UoJ0xpbmVBdGxhcyBvdXQgb2Ygc3BhY2UnKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxlbmd0aCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGFzaGFycmF5Lmxlbmd0aDsgaSsrKSB7IGxlbmd0aCArPSBkYXNoYXJyYXlbaV07IH1cblxuICAgICAgICBpZiAobGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBzdHJldGNoID0gdGhpcy53aWR0aCAvIGxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlcyA9IHRoaXMuZ2V0RGFzaFJhbmdlcyhkYXNoYXJyYXksIHRoaXMud2lkdGgsIHN0cmV0Y2gpO1xuXG4gICAgICAgICAgICBpZiAocm91bmQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFJvdW5kRGFzaChyYW5nZXMsIHN0cmV0Y2gsIG4pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFJlZ3VsYXJEYXNoKHJhbmdlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXNoRW50cnkgPSB7XG4gICAgICAgICAgICB5OiAodGhpcy5uZXh0Um93ICsgbiArIDAuNSkgLyB0aGlzLmhlaWdodCxcbiAgICAgICAgICAgIGhlaWdodDogMiAqIG4gLyB0aGlzLmhlaWdodCxcbiAgICAgICAgICAgIHdpZHRoOiBsZW5ndGhcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLm5leHRSb3cgKz0gaGVpZ2h0O1xuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gZGFzaEVudHJ5O1xuICAgIH1cblxuICAgIGJpbmQoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgICAgIGlmICghdGhpcy50ZXh0dXJlKSB7XG4gICAgICAgICAgICB0aGlzLnRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0aGlzLnRleHR1cmUpO1xuICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuUkVQRUFUKTtcbiAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLlJFUEVBVCk7XG4gICAgICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZ2wuTElORUFSKTtcbiAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBnbC5MSU5FQVIpO1xuICAgICAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5BTFBIQSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIDAsIGdsLkFMUEhBLCBnbC5VTlNJR05FRF9CWVRFLCB0aGlzLmRhdGEpO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0aGlzLnRleHR1cmUpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5kaXJ0eSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBnbC50ZXhTdWJJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIDAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCBnbC5BTFBIQSwgZ2wuVU5TSUdORURfQllURSwgdGhpcy5kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGluZUF0bGFzO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHt1bmlxdWVJZCwgYXN5bmNBbGx9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgQWN0b3IgZnJvbSAnLi9hY3Rvcic7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB0eXBlIFdvcmtlclBvb2wgZnJvbSAnLi93b3JrZXJfcG9vbCc7XG5cbi8qKlxuICogUmVzcG9uc2libGUgZm9yIHNlbmRpbmcgbWVzc2FnZXMgZnJvbSBhIHtAbGluayBTb3VyY2V9IHRvIGFuIGFzc29jaWF0ZWRcbiAqIHtAbGluayBXb3JrZXJTb3VyY2V9LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIERpc3BhdGNoZXIge1xuICAgIHdvcmtlclBvb2w6IFdvcmtlclBvb2w7XG4gICAgYWN0b3JzOiBBcnJheTxBY3Rvcj47XG4gICAgY3VycmVudEFjdG9yOiBudW1iZXI7XG4gICAgaWQ6IG51bWJlcjtcblxuICAgIC8vIGV4cG9zZWQgdG8gYWxsb3cgc3R1YmJpbmcgaW4gdW5pdCB0ZXN0c1xuICAgIHN0YXRpYyBBY3RvcjogQ2xhc3M8QWN0b3I+O1xuXG4gICAgY29uc3RydWN0b3Iod29ya2VyUG9vbDogV29ya2VyUG9vbCwgcGFyZW50OiBhbnkpIHtcbiAgICAgICAgdGhpcy53b3JrZXJQb29sID0gd29ya2VyUG9vbDtcbiAgICAgICAgdGhpcy5hY3RvcnMgPSBbXTtcbiAgICAgICAgdGhpcy5jdXJyZW50QWN0b3IgPSAwO1xuICAgICAgICB0aGlzLmlkID0gdW5pcXVlSWQoKTtcbiAgICAgICAgY29uc3Qgd29ya2VycyA9IHRoaXMud29ya2VyUG9vbC5hY3F1aXJlKHRoaXMuaWQpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHdvcmtlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHdvcmtlciA9IHdvcmtlcnNbaV07XG4gICAgICAgICAgICBjb25zdCBhY3RvciA9IG5ldyBEaXNwYXRjaGVyLkFjdG9yKHdvcmtlciwgcGFyZW50LCB0aGlzLmlkKTtcbiAgICAgICAgICAgIGFjdG9yLm5hbWUgPSBgV29ya2VyICR7aX1gO1xuICAgICAgICAgICAgdGhpcy5hY3RvcnMucHVzaChhY3Rvcik7XG4gICAgICAgIH1cbiAgICAgICAgYXNzZXJ0KHRoaXMuYWN0b3JzLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnJvYWRjYXN0IGEgbWVzc2FnZSB0byBhbGwgV29ya2Vycy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGJyb2FkY2FzdCh0eXBlOiBzdHJpbmcsIGRhdGE6IG1peGVkLCBjYj86IEZ1bmN0aW9uKSB7XG4gICAgICAgIGFzc2VydCh0aGlzLmFjdG9ycy5sZW5ndGgpO1xuICAgICAgICBjYiA9IGNiIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBhc3luY0FsbCh0aGlzLmFjdG9ycywgKGFjdG9yLCBkb25lKSA9PiB7XG4gICAgICAgICAgICBhY3Rvci5zZW5kKHR5cGUsIGRhdGEsIGRvbmUpO1xuICAgICAgICB9LCBjYik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWNxdWlyZXMgYW4gYWN0b3IgdG8gZGlzcGF0Y2ggbWVzc2FnZXMgdG8uIFRoZSBhY3RvcnMgYXJlIGRpc3RyaWJ1dGVkIGluIHJvdW5kLXJvYmluIGZhc2hpb24uXG4gICAgICogQHJldHVybnMgQW4gYWN0b3Igb2JqZWN0IGJhY2tlZCBieSBhIHdlYiB3b3JrZXIgZm9yIHByb2Nlc3NpbmcgbWVzc2FnZXMuXG4gICAgICovXG4gICAgZ2V0QWN0b3IoKTogQWN0b3Ige1xuICAgICAgICBhc3NlcnQodGhpcy5hY3RvcnMubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5jdXJyZW50QWN0b3IgPSAodGhpcy5jdXJyZW50QWN0b3IgKyAxKSAlIHRoaXMuYWN0b3JzLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0b3JzW3RoaXMuY3VycmVudEFjdG9yXTtcbiAgICB9XG5cbiAgICByZW1vdmUoKSB7XG4gICAgICAgIHRoaXMuYWN0b3JzLmZvckVhY2goKGFjdG9yKSA9PiB7IGFjdG9yLnJlbW92ZSgpOyB9KTtcbiAgICAgICAgdGhpcy5hY3RvcnMgPSBbXTtcbiAgICAgICAgdGhpcy53b3JrZXJQb29sLnJlbGVhc2UodGhpcy5pZCk7XG4gICAgfVxufVxuXG5EaXNwYXRjaGVyLkFjdG9yID0gQWN0b3I7XG5cbmV4cG9ydCBkZWZhdWx0IERpc3BhdGNoZXI7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge3BpY2ssIGV4dGVuZH0gZnJvbSAnLi4vdXRpbC91dGlsJztcblxuaW1wb3J0IHtnZXRKU09OLCBSZXNvdXJjZVR5cGV9IGZyb20gJy4uL3V0aWwvYWpheCc7XG5pbXBvcnQgYnJvd3NlciBmcm9tICcuLi91dGlsL2Jyb3dzZXInO1xuXG5pbXBvcnQgdHlwZSB7UmVxdWVzdE1hbmFnZXJ9IGZyb20gJy4uL3V0aWwvbWFwYm94JztcbmltcG9ydCB0eXBlIHtDYWxsYmFja30gZnJvbSAnLi4vdHlwZXMvY2FsbGJhY2snO1xuaW1wb3J0IHR5cGUge1RpbGVKU09OfSBmcm9tICcuLi90eXBlcy90aWxlanNvbic7XG5pbXBvcnQgdHlwZSB7Q2FuY2VsYWJsZX0gZnJvbSAnLi4vdHlwZXMvY2FuY2VsYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG9wdGlvbnM6IGFueSwgcmVxdWVzdE1hbmFnZXI6IFJlcXVlc3RNYW5hZ2VyLCBjYWxsYmFjazogQ2FsbGJhY2s8VGlsZUpTT04+KTogQ2FuY2VsYWJsZSB7XG4gICAgY29uc3QgbG9hZGVkID0gZnVuY3Rpb24oZXJyOiA/RXJyb3IsIHRpbGVKU09OOiA/T2JqZWN0KSB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9IGVsc2UgaWYgKHRpbGVKU09OKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQ6IGFueSA9IHBpY2soXG4gICAgICAgICAgICAgICAgLy8gZXhwbGljaXQgc291cmNlIG9wdGlvbnMgdGFrZSBwcmVjZWRlbmNlIG92ZXIgVGlsZUpTT05cbiAgICAgICAgICAgICAgICBleHRlbmQodGlsZUpTT04sIG9wdGlvbnMpLFxuICAgICAgICAgICAgICAgIFsndGlsZXMnLCAnbWluem9vbScsICdtYXh6b29tJywgJ2F0dHJpYnV0aW9uJywgJ21hcGJveF9sb2dvJywgJ2JvdW5kcycsICdzY2hlbWUnLCAndGlsZVNpemUnLCAnZW5jb2RpbmcnXVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKHRpbGVKU09OLnZlY3Rvcl9sYXllcnMpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQudmVjdG9yTGF5ZXJzID0gdGlsZUpTT04udmVjdG9yX2xheWVycztcbiAgICAgICAgICAgICAgICByZXN1bHQudmVjdG9yTGF5ZXJJZHMgPSByZXN1bHQudmVjdG9yTGF5ZXJzLm1hcCgobGF5ZXIpID0+IHsgcmV0dXJuIGxheWVyLmlkOyB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzdWx0LnRpbGVzID0gcmVxdWVzdE1hbmFnZXIuY2Fub25pY2FsaXplVGlsZXNldChyZXN1bHQsIG9wdGlvbnMudXJsKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKG9wdGlvbnMudXJsKSB7XG4gICAgICAgIHJldHVybiBnZXRKU09OKHJlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QocmVxdWVzdE1hbmFnZXIubm9ybWFsaXplU291cmNlVVJMKG9wdGlvbnMudXJsKSwgUmVzb3VyY2VUeXBlLlNvdXJjZSksIGxvYWRlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGJyb3dzZXIuZnJhbWUoKCkgPT4gbG9hZGVkKG51bGwsIG9wdGlvbnMpKTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgTG5nTGF0Qm91bmRzIGZyb20gJy4uL2dlby9sbmdfbGF0X2JvdW5kcyc7XG5pbXBvcnQge21lcmNhdG9yWGZyb21MbmcsIG1lcmNhdG9yWWZyb21MYXR9IGZyb20gJy4uL2dlby9tZXJjYXRvcl9jb29yZGluYXRlJztcblxuaW1wb3J0IHR5cGUge0Nhbm9uaWNhbFRpbGVJRH0gZnJvbSAnLi90aWxlX2lkJztcblxuY2xhc3MgVGlsZUJvdW5kcyB7XG4gICAgYm91bmRzOiBMbmdMYXRCb3VuZHM7XG4gICAgbWluem9vbTogbnVtYmVyO1xuICAgIG1heHpvb206IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKGJvdW5kczogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIG1pbnpvb206ID9udW1iZXIsIG1heHpvb206ID9udW1iZXIpIHtcbiAgICAgICAgdGhpcy5ib3VuZHMgPSBMbmdMYXRCb3VuZHMuY29udmVydCh0aGlzLnZhbGlkYXRlQm91bmRzKGJvdW5kcykpO1xuICAgICAgICB0aGlzLm1pbnpvb20gPSBtaW56b29tIHx8IDA7XG4gICAgICAgIHRoaXMubWF4em9vbSA9IG1heHpvb20gfHwgMjQ7XG4gICAgfVxuXG4gICAgdmFsaWRhdGVCb3VuZHMoYm91bmRzOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSkge1xuICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIGJvdW5kcyBwcm9wZXJ0eSBjb250YWlucyB2YWxpZCBsb25naXR1ZGUgYW5kIGxhdGl0dWRlc1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYm91bmRzKSB8fCBib3VuZHMubGVuZ3RoICE9PSA0KSByZXR1cm4gWy0xODAsIC05MCwgMTgwLCA5MF07XG4gICAgICAgIHJldHVybiBbTWF0aC5tYXgoLTE4MCwgYm91bmRzWzBdKSwgTWF0aC5tYXgoLTkwLCBib3VuZHNbMV0pLCBNYXRoLm1pbigxODAsIGJvdW5kc1syXSksIE1hdGgubWluKDkwLCBib3VuZHNbM10pXTtcbiAgICB9XG5cbiAgICBjb250YWlucyh0aWxlSUQ6IENhbm9uaWNhbFRpbGVJRCkge1xuICAgICAgICBjb25zdCB3b3JsZFNpemUgPSBNYXRoLnBvdygyLCB0aWxlSUQueik7XG4gICAgICAgIGNvbnN0IGxldmVsID0ge1xuICAgICAgICAgICAgbWluWDogTWF0aC5mbG9vcihtZXJjYXRvclhmcm9tTG5nKHRoaXMuYm91bmRzLmdldFdlc3QoKSkgKiB3b3JsZFNpemUpLFxuICAgICAgICAgICAgbWluWTogTWF0aC5mbG9vcihtZXJjYXRvcllmcm9tTGF0KHRoaXMuYm91bmRzLmdldE5vcnRoKCkpICogd29ybGRTaXplKSxcbiAgICAgICAgICAgIG1heFg6IE1hdGguY2VpbChtZXJjYXRvclhmcm9tTG5nKHRoaXMuYm91bmRzLmdldEVhc3QoKSkgKiB3b3JsZFNpemUpLFxuICAgICAgICAgICAgbWF4WTogTWF0aC5jZWlsKG1lcmNhdG9yWWZyb21MYXQodGhpcy5ib3VuZHMuZ2V0U291dGgoKSkgKiB3b3JsZFNpemUpXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGhpdCA9IHRpbGVJRC54ID49IGxldmVsLm1pblggJiYgdGlsZUlELnggPCBsZXZlbC5tYXhYICYmIHRpbGVJRC55ID49IGxldmVsLm1pblkgJiYgdGlsZUlELnkgPCBsZXZlbC5tYXhZO1xuICAgICAgICByZXR1cm4gaGl0O1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVGlsZUJvdW5kcztcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7RXZlbnQsIEVycm9yRXZlbnQsIEV2ZW50ZWR9IGZyb20gJy4uL3V0aWwvZXZlbnRlZCc7XG5cbmltcG9ydCB7ZXh0ZW5kLCBwaWNrfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IGxvYWRUaWxlSlNPTiBmcm9tICcuL2xvYWRfdGlsZWpzb24nO1xuaW1wb3J0IHtwb3N0VHVybnN0aWxlRXZlbnQsIHBvc3RNYXBMb2FkRXZlbnR9IGZyb20gJy4uL3V0aWwvbWFwYm94JztcbmltcG9ydCBUaWxlQm91bmRzIGZyb20gJy4vdGlsZV9ib3VuZHMnO1xuaW1wb3J0IHtSZXNvdXJjZVR5cGV9IGZyb20gJy4uL3V0aWwvYWpheCc7XG5pbXBvcnQgYnJvd3NlciBmcm9tICcuLi91dGlsL2Jyb3dzZXInO1xuaW1wb3J0IHtjYWNoZUVudHJ5UG9zc2libHlBZGRlZH0gZnJvbSAnLi4vdXRpbC90aWxlX3JlcXVlc3RfY2FjaGUnO1xuXG5pbXBvcnQgdHlwZSB7U291cmNlfSBmcm9tICcuL3NvdXJjZSc7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi90aWxlX2lkJztcbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi91aS9tYXAnO1xuaW1wb3J0IHR5cGUgRGlzcGF0Y2hlciBmcm9tICcuLi91dGlsL2Rpc3BhdGNoZXInO1xuaW1wb3J0IHR5cGUgVGlsZSBmcm9tICcuL3RpbGUnO1xuaW1wb3J0IHR5cGUge0NhbGxiYWNrfSBmcm9tICcuLi90eXBlcy9jYWxsYmFjayc7XG5pbXBvcnQgdHlwZSB7Q2FuY2VsYWJsZX0gZnJvbSAnLi4vdHlwZXMvY2FuY2VsYWJsZSc7XG5pbXBvcnQgdHlwZSB7VmVjdG9yU291cmNlU3BlY2lmaWNhdGlvbiwgUHJvbW90ZUlkU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmNsYXNzIFZlY3RvclRpbGVTb3VyY2UgZXh0ZW5kcyBFdmVudGVkIGltcGxlbWVudHMgU291cmNlIHtcbiAgICB0eXBlOiAndmVjdG9yJztcbiAgICBpZDogc3RyaW5nO1xuICAgIG1pbnpvb206IG51bWJlcjtcbiAgICBtYXh6b29tOiBudW1iZXI7XG4gICAgdXJsOiBzdHJpbmc7XG4gICAgc2NoZW1lOiBzdHJpbmc7XG4gICAgdGlsZVNpemU6IG51bWJlcjtcbiAgICBwcm9tb3RlSWQ6ID9Qcm9tb3RlSWRTcGVjaWZpY2F0aW9uO1xuXG4gICAgX29wdGlvbnM6IFZlY3RvclNvdXJjZVNwZWNpZmljYXRpb247XG4gICAgX2NvbGxlY3RSZXNvdXJjZVRpbWluZzogYm9vbGVhbjtcbiAgICBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyO1xuICAgIG1hcDogTWFwO1xuICAgIGJvdW5kczogP1tudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICAgIHRpbGVzOiBBcnJheTxzdHJpbmc+O1xuICAgIHRpbGVCb3VuZHM6IFRpbGVCb3VuZHM7XG4gICAgcmVwYXJzZU92ZXJzY2FsZWQ6IGJvb2xlYW47XG4gICAgaXNUaWxlQ2xpcHBlZDogYm9vbGVhbjtcbiAgICBfdGlsZUpTT05SZXF1ZXN0OiA/Q2FuY2VsYWJsZTtcbiAgICBfbG9hZGVkOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoaWQ6IHN0cmluZywgb3B0aW9uczogVmVjdG9yU291cmNlU3BlY2lmaWNhdGlvbiAmIHtjb2xsZWN0UmVzb3VyY2VUaW1pbmc6IGJvb2xlYW59LCBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyLCBldmVudGVkUGFyZW50OiBFdmVudGVkKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICAgICAgdGhpcy5kaXNwYXRjaGVyID0gZGlzcGF0Y2hlcjtcblxuICAgICAgICB0aGlzLnR5cGUgPSAndmVjdG9yJztcbiAgICAgICAgdGhpcy5taW56b29tID0gMDtcbiAgICAgICAgdGhpcy5tYXh6b29tID0gMjI7XG4gICAgICAgIHRoaXMuc2NoZW1lID0gJ3h5eic7XG4gICAgICAgIHRoaXMudGlsZVNpemUgPSA1MTI7XG4gICAgICAgIHRoaXMucmVwYXJzZU92ZXJzY2FsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmlzVGlsZUNsaXBwZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9sb2FkZWQgPSBmYWxzZTtcblxuICAgICAgICBleHRlbmQodGhpcywgcGljayhvcHRpb25zLCBbJ3VybCcsICdzY2hlbWUnLCAndGlsZVNpemUnLCAncHJvbW90ZUlkJ10pKTtcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IGV4dGVuZCh7dHlwZTogJ3ZlY3Rvcid9LCBvcHRpb25zKTtcblxuICAgICAgICB0aGlzLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmcgPSBvcHRpb25zLmNvbGxlY3RSZXNvdXJjZVRpbWluZztcblxuICAgICAgICBpZiAodGhpcy50aWxlU2l6ZSAhPT0gNTEyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3ZlY3RvciB0aWxlIHNvdXJjZXMgbXVzdCBoYXZlIGEgdGlsZVNpemUgb2YgNTEyJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldEV2ZW50ZWRQYXJlbnQoZXZlbnRlZFBhcmVudCk7XG4gICAgfVxuXG4gICAgbG9hZCgpIHtcbiAgICAgICAgdGhpcy5fbG9hZGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGFsb2FkaW5nJywge2RhdGFUeXBlOiAnc291cmNlJ30pKTtcbiAgICAgICAgdGhpcy5fdGlsZUpTT05SZXF1ZXN0ID0gbG9hZFRpbGVKU09OKHRoaXMuX29wdGlvbnMsIHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlciwgKGVyciwgdGlsZUpTT04pID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3RpbGVKU09OUmVxdWVzdCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9sb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChlcnIpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGlsZUpTT04pIHtcbiAgICAgICAgICAgICAgICBleHRlbmQodGhpcywgdGlsZUpTT04pO1xuICAgICAgICAgICAgICAgIGlmICh0aWxlSlNPTi5ib3VuZHMpIHRoaXMudGlsZUJvdW5kcyA9IG5ldyBUaWxlQm91bmRzKHRpbGVKU09OLmJvdW5kcywgdGhpcy5taW56b29tLCB0aGlzLm1heHpvb20pO1xuICAgICAgICAgICAgICAgIHBvc3RUdXJuc3RpbGVFdmVudCh0aWxlSlNPTi50aWxlcywgdGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLl9jdXN0b21BY2Nlc3NUb2tlbik7XG4gICAgICAgICAgICAgICAgcG9zdE1hcExvYWRFdmVudCh0aWxlSlNPTi50aWxlcywgdGhpcy5tYXAuX2dldE1hcElkKCksIHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci5fc2t1VG9rZW4sIHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci5fY3VzdG9tQWNjZXNzVG9rZW4pO1xuXG4gICAgICAgICAgICAgICAgLy8gYGNvbnRlbnRgIGlzIGluY2x1ZGVkIGhlcmUgdG8gcHJldmVudCBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIGBTdHlsZSNfdXBkYXRlU291cmNlc2AgaXMgY2FsbGVkXG4gICAgICAgICAgICAgICAgLy8gYmVmb3JlIHRoZSBUaWxlSlNPTiBhcnJpdmVzLiB0aGlzIG1ha2VzIHN1cmUgdGhlIHRpbGVzIG5lZWRlZCBhcmUgbG9hZGVkIG9uY2UgVGlsZUpTT04gYXJyaXZlc1xuICAgICAgICAgICAgICAgIC8vIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvcHVsbC80MzQ3I2Rpc2N1c3Npb25fcjEwNDQxODA4OFxuICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGEnLCB7ZGF0YVR5cGU6ICdzb3VyY2UnLCBzb3VyY2VEYXRhVHlwZTogJ21ldGFkYXRhJ30pKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhJywge2RhdGFUeXBlOiAnc291cmNlJywgc291cmNlRGF0YVR5cGU6ICdjb250ZW50J30pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbG9hZGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGVkO1xuICAgIH1cblxuICAgIGhhc1RpbGUodGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy50aWxlQm91bmRzIHx8IHRoaXMudGlsZUJvdW5kcy5jb250YWlucyh0aWxlSUQuY2Fub25pY2FsKTtcbiAgICB9XG5cbiAgICBvbkFkZChtYXA6IE1hcCkge1xuICAgICAgICB0aGlzLm1hcCA9IG1hcDtcbiAgICAgICAgdGhpcy5sb2FkKCk7XG4gICAgfVxuXG4gICAgb25SZW1vdmUoKSB7XG4gICAgICAgIGlmICh0aGlzLl90aWxlSlNPTlJlcXVlc3QpIHtcbiAgICAgICAgICAgIHRoaXMuX3RpbGVKU09OUmVxdWVzdC5jYW5jZWwoKTtcbiAgICAgICAgICAgIHRoaXMuX3RpbGVKU09OUmVxdWVzdCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIHJldHVybiBleHRlbmQoe30sIHRoaXMuX29wdGlvbnMpO1xuICAgIH1cblxuICAgIGxvYWRUaWxlKHRpbGU6IFRpbGUsIGNhbGxiYWNrOiBDYWxsYmFjazx2b2lkPikge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIubm9ybWFsaXplVGlsZVVSTCh0aWxlLnRpbGVJRC5jYW5vbmljYWwudXJsKHRoaXMudGlsZXMsIHRoaXMuc2NoZW1lKSk7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgIHJlcXVlc3Q6IHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KHVybCwgUmVzb3VyY2VUeXBlLlRpbGUpLFxuICAgICAgICAgICAgdWlkOiB0aWxlLnVpZCxcbiAgICAgICAgICAgIHRpbGVJRDogdGlsZS50aWxlSUQsXG4gICAgICAgICAgICB6b29tOiB0aWxlLnRpbGVJRC5vdmVyc2NhbGVkWixcbiAgICAgICAgICAgIHRpbGVTaXplOiB0aGlzLnRpbGVTaXplICogdGlsZS50aWxlSUQub3ZlcnNjYWxlRmFjdG9yKCksXG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICBzb3VyY2U6IHRoaXMuaWQsXG4gICAgICAgICAgICBwaXhlbFJhdGlvOiBicm93c2VyLmRldmljZVBpeGVsUmF0aW8sXG4gICAgICAgICAgICBzaG93Q29sbGlzaW9uQm94ZXM6IHRoaXMubWFwLnNob3dDb2xsaXNpb25Cb3hlcyxcbiAgICAgICAgICAgIHByb21vdGVJZDogdGhpcy5wcm9tb3RlSWRcbiAgICAgICAgfTtcbiAgICAgICAgcGFyYW1zLnJlcXVlc3QuY29sbGVjdFJlc291cmNlVGltaW5nID0gdGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nO1xuXG4gICAgICAgIGlmICghdGlsZS5hY3RvciB8fCB0aWxlLnN0YXRlID09PSAnZXhwaXJlZCcpIHtcbiAgICAgICAgICAgIHRpbGUuYWN0b3IgPSB0aGlzLmRpc3BhdGNoZXIuZ2V0QWN0b3IoKTtcbiAgICAgICAgICAgIHRpbGUucmVxdWVzdCA9IHRpbGUuYWN0b3Iuc2VuZCgnbG9hZFRpbGUnLCBwYXJhbXMsIGRvbmUuYmluZCh0aGlzKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGlsZS5zdGF0ZSA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgICAgICAgICAvLyBzY2hlZHVsZSB0aWxlIHJlbG9hZGluZyBhZnRlciBpdCBoYXMgYmVlbiBsb2FkZWRcbiAgICAgICAgICAgIHRpbGUucmVsb2FkQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRpbGUucmVxdWVzdCA9IHRpbGUuYWN0b3Iuc2VuZCgncmVsb2FkVGlsZScsIHBhcmFtcywgZG9uZS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGRvbmUoZXJyLCBkYXRhKSB7XG4gICAgICAgICAgICBkZWxldGUgdGlsZS5yZXF1ZXN0O1xuXG4gICAgICAgICAgICBpZiAodGlsZS5hYm9ydGVkKVxuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICAgICAgaWYgKGVyciAmJiBlcnIuc3RhdHVzICE9PSA0MDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5yZXNvdXJjZVRpbWluZylcbiAgICAgICAgICAgICAgICB0aWxlLnJlc291cmNlVGltaW5nID0gZGF0YS5yZXNvdXJjZVRpbWluZztcblxuICAgICAgICAgICAgaWYgKHRoaXMubWFwLl9yZWZyZXNoRXhwaXJlZFRpbGVzICYmIGRhdGEpIHRpbGUuc2V0RXhwaXJ5RGF0YShkYXRhKTtcbiAgICAgICAgICAgIHRpbGUubG9hZFZlY3RvckRhdGEoZGF0YSwgdGhpcy5tYXAucGFpbnRlcik7XG5cbiAgICAgICAgICAgIGNhY2hlRW50cnlQb3NzaWJseUFkZGVkKHRoaXMuZGlzcGF0Y2hlcik7XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuXG4gICAgICAgICAgICBpZiAodGlsZS5yZWxvYWRDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZFRpbGUodGlsZSwgdGlsZS5yZWxvYWRDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgdGlsZS5yZWxvYWRDYWxsYmFjayA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhYm9ydFRpbGUodGlsZTogVGlsZSkge1xuICAgICAgICBpZiAodGlsZS5yZXF1ZXN0KSB7XG4gICAgICAgICAgICB0aWxlLnJlcXVlc3QuY2FuY2VsKCk7XG4gICAgICAgICAgICBkZWxldGUgdGlsZS5yZXF1ZXN0O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aWxlLmFjdG9yKSB7XG4gICAgICAgICAgICB0aWxlLmFjdG9yLnNlbmQoJ2Fib3J0VGlsZScsIHt1aWQ6IHRpbGUudWlkLCB0eXBlOiB0aGlzLnR5cGUsIHNvdXJjZTogdGhpcy5pZH0sIHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1bmxvYWRUaWxlKHRpbGU6IFRpbGUpIHtcbiAgICAgICAgdGlsZS51bmxvYWRWZWN0b3JEYXRhKCk7XG4gICAgICAgIGlmICh0aWxlLmFjdG9yKSB7XG4gICAgICAgICAgICB0aWxlLmFjdG9yLnNlbmQoJ3JlbW92ZVRpbGUnLCB7dWlkOiB0aWxlLnVpZCwgdHlwZTogdGhpcy50eXBlLCBzb3VyY2U6IHRoaXMuaWR9LCB1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFzVHJhbnNpdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVmVjdG9yVGlsZVNvdXJjZTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7ZXh0ZW5kLCBwaWNrfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuXG5pbXBvcnQge2dldEltYWdlLCBSZXNvdXJjZVR5cGV9IGZyb20gJy4uL3V0aWwvYWpheCc7XG5pbXBvcnQge0V2ZW50LCBFcnJvckV2ZW50LCBFdmVudGVkfSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IGxvYWRUaWxlSlNPTiBmcm9tICcuL2xvYWRfdGlsZWpzb24nO1xuaW1wb3J0IHtwb3N0VHVybnN0aWxlRXZlbnQsIHBvc3RNYXBMb2FkRXZlbnR9IGZyb20gJy4uL3V0aWwvbWFwYm94JztcbmltcG9ydCBUaWxlQm91bmRzIGZyb20gJy4vdGlsZV9ib3VuZHMnO1xuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi4vcmVuZGVyL3RleHR1cmUnO1xuXG5pbXBvcnQge2NhY2hlRW50cnlQb3NzaWJseUFkZGVkfSBmcm9tICcuLi91dGlsL3RpbGVfcmVxdWVzdF9jYWNoZSc7XG5cbmltcG9ydCB0eXBlIHtTb3VyY2V9IGZyb20gJy4vc291cmNlJztcbmltcG9ydCB0eXBlIHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuL3RpbGVfaWQnO1xuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL3VpL21hcCc7XG5pbXBvcnQgdHlwZSBEaXNwYXRjaGVyIGZyb20gJy4uL3V0aWwvZGlzcGF0Y2hlcic7XG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4vdGlsZSc7XG5pbXBvcnQgdHlwZSB7Q2FsbGJhY2t9IGZyb20gJy4uL3R5cGVzL2NhbGxiYWNrJztcbmltcG9ydCB0eXBlIHtDYW5jZWxhYmxlfSBmcm9tICcuLi90eXBlcy9jYW5jZWxhYmxlJztcbmltcG9ydCB0eXBlIHtcbiAgICBSYXN0ZXJTb3VyY2VTcGVjaWZpY2F0aW9uLFxuICAgIFJhc3RlckRFTVNvdXJjZVNwZWNpZmljYXRpb25cbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmNsYXNzIFJhc3RlclRpbGVTb3VyY2UgZXh0ZW5kcyBFdmVudGVkIGltcGxlbWVudHMgU291cmNlIHtcbiAgICB0eXBlOiAncmFzdGVyJyB8ICdyYXN0ZXItZGVtJztcbiAgICBpZDogc3RyaW5nO1xuICAgIG1pbnpvb206IG51bWJlcjtcbiAgICBtYXh6b29tOiBudW1iZXI7XG4gICAgdXJsOiBzdHJpbmc7XG4gICAgc2NoZW1lOiBzdHJpbmc7XG4gICAgdGlsZVNpemU6IG51bWJlcjtcblxuICAgIGJvdW5kczogP1tudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICAgIHRpbGVCb3VuZHM6IFRpbGVCb3VuZHM7XG4gICAgcm91bmRab29tOiBib29sZWFuO1xuICAgIGRpc3BhdGNoZXI6IERpc3BhdGNoZXI7XG4gICAgbWFwOiBNYXA7XG4gICAgdGlsZXM6IEFycmF5PHN0cmluZz47XG5cbiAgICBfbG9hZGVkOiBib29sZWFuO1xuICAgIF9vcHRpb25zOiBSYXN0ZXJTb3VyY2VTcGVjaWZpY2F0aW9uIHwgUmFzdGVyREVNU291cmNlU3BlY2lmaWNhdGlvbjtcbiAgICBfdGlsZUpTT05SZXF1ZXN0OiA/Q2FuY2VsYWJsZTtcblxuICAgIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIG9wdGlvbnM6IFJhc3RlclNvdXJjZVNwZWNpZmljYXRpb24gfCBSYXN0ZXJERU1Tb3VyY2VTcGVjaWZpY2F0aW9uLCBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyLCBldmVudGVkUGFyZW50OiBFdmVudGVkKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICAgICAgdGhpcy5kaXNwYXRjaGVyID0gZGlzcGF0Y2hlcjtcbiAgICAgICAgdGhpcy5zZXRFdmVudGVkUGFyZW50KGV2ZW50ZWRQYXJlbnQpO1xuXG4gICAgICAgIHRoaXMudHlwZSA9ICdyYXN0ZXInO1xuICAgICAgICB0aGlzLm1pbnpvb20gPSAwO1xuICAgICAgICB0aGlzLm1heHpvb20gPSAyMjtcbiAgICAgICAgdGhpcy5yb3VuZFpvb20gPSB0cnVlO1xuICAgICAgICB0aGlzLnNjaGVtZSA9ICd4eXonO1xuICAgICAgICB0aGlzLnRpbGVTaXplID0gNTEyO1xuICAgICAgICB0aGlzLl9sb2FkZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLl9vcHRpb25zID0gZXh0ZW5kKHt0eXBlOiAncmFzdGVyJ30sIG9wdGlvbnMpO1xuICAgICAgICBleHRlbmQodGhpcywgcGljayhvcHRpb25zLCBbJ3VybCcsICdzY2hlbWUnLCAndGlsZVNpemUnXSkpO1xuICAgIH1cblxuICAgIGxvYWQoKSB7XG4gICAgICAgIHRoaXMuX2xvYWRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhbG9hZGluZycsIHtkYXRhVHlwZTogJ3NvdXJjZSd9KSk7XG4gICAgICAgIHRoaXMuX3RpbGVKU09OUmVxdWVzdCA9IGxvYWRUaWxlSlNPTih0aGlzLl9vcHRpb25zLCB0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIsIChlcnIsIHRpbGVKU09OKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl90aWxlSlNPTlJlcXVlc3QgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fbG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQoZXJyKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRpbGVKU09OKSB7XG4gICAgICAgICAgICAgICAgZXh0ZW5kKHRoaXMsIHRpbGVKU09OKTtcbiAgICAgICAgICAgICAgICBpZiAodGlsZUpTT04uYm91bmRzKSB0aGlzLnRpbGVCb3VuZHMgPSBuZXcgVGlsZUJvdW5kcyh0aWxlSlNPTi5ib3VuZHMsIHRoaXMubWluem9vbSwgdGhpcy5tYXh6b29tKTtcblxuICAgICAgICAgICAgICAgIHBvc3RUdXJuc3RpbGVFdmVudCh0aWxlSlNPTi50aWxlcyk7XG4gICAgICAgICAgICAgICAgcG9zdE1hcExvYWRFdmVudCh0aWxlSlNPTi50aWxlcywgdGhpcy5tYXAuX2dldE1hcElkKCksIHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci5fc2t1VG9rZW4pO1xuXG4gICAgICAgICAgICAgICAgLy8gYGNvbnRlbnRgIGlzIGluY2x1ZGVkIGhlcmUgdG8gcHJldmVudCBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIGBTdHlsZSNfdXBkYXRlU291cmNlc2AgaXMgY2FsbGVkXG4gICAgICAgICAgICAgICAgLy8gYmVmb3JlIHRoZSBUaWxlSlNPTiBhcnJpdmVzLiB0aGlzIG1ha2VzIHN1cmUgdGhlIHRpbGVzIG5lZWRlZCBhcmUgbG9hZGVkIG9uY2UgVGlsZUpTT04gYXJyaXZlc1xuICAgICAgICAgICAgICAgIC8vIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvcHVsbC80MzQ3I2Rpc2N1c3Npb25fcjEwNDQxODA4OFxuICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGEnLCB7ZGF0YVR5cGU6ICdzb3VyY2UnLCBzb3VyY2VEYXRhVHlwZTogJ21ldGFkYXRhJ30pKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhJywge2RhdGFUeXBlOiAnc291cmNlJywgc291cmNlRGF0YVR5cGU6ICdjb250ZW50J30pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbG9hZGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGVkO1xuICAgIH1cblxuICAgIG9uQWRkKG1hcDogTWFwKSB7XG4gICAgICAgIHRoaXMubWFwID0gbWFwO1xuICAgICAgICB0aGlzLmxvYWQoKTtcbiAgICB9XG5cbiAgICBvblJlbW92ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3RpbGVKU09OUmVxdWVzdCkge1xuICAgICAgICAgICAgdGhpcy5fdGlsZUpTT05SZXF1ZXN0LmNhbmNlbCgpO1xuICAgICAgICAgICAgdGhpcy5fdGlsZUpTT05SZXF1ZXN0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgcmV0dXJuIGV4dGVuZCh7fSwgdGhpcy5fb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaGFzVGlsZSh0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnRpbGVCb3VuZHMgfHwgdGhpcy50aWxlQm91bmRzLmNvbnRhaW5zKHRpbGVJRC5jYW5vbmljYWwpO1xuICAgIH1cblxuICAgIGxvYWRUaWxlKHRpbGU6IFRpbGUsIGNhbGxiYWNrOiBDYWxsYmFjazx2b2lkPikge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIubm9ybWFsaXplVGlsZVVSTCh0aWxlLnRpbGVJRC5jYW5vbmljYWwudXJsKHRoaXMudGlsZXMsIHRoaXMuc2NoZW1lKSwgdGhpcy50aWxlU2l6ZSk7XG4gICAgICAgIHRpbGUucmVxdWVzdCA9IGdldEltYWdlKHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KHVybCwgUmVzb3VyY2VUeXBlLlRpbGUpLCAoZXJyLCBpbWcpID0+IHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aWxlLnJlcXVlc3Q7XG5cbiAgICAgICAgICAgIGlmICh0aWxlLmFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aWxlLnN0YXRlID0gJ3VubG9hZGVkJztcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdGlsZS5zdGF0ZSA9ICdlcnJvcmVkJztcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpbWcpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXAuX3JlZnJlc2hFeHBpcmVkVGlsZXMpIHRpbGUuc2V0RXhwaXJ5RGF0YShpbWcpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSAoaW1nOiBhbnkpLmNhY2hlQ29udHJvbDtcbiAgICAgICAgICAgICAgICBkZWxldGUgKGltZzogYW55KS5leHBpcmVzO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMubWFwLnBhaW50ZXIuY29udGV4dDtcbiAgICAgICAgICAgICAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgICAgICAgICAgICAgdGlsZS50ZXh0dXJlID0gdGhpcy5tYXAucGFpbnRlci5nZXRUaWxlVGV4dHVyZShpbWcud2lkdGgpO1xuICAgICAgICAgICAgICAgIGlmICh0aWxlLnRleHR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGlsZS50ZXh0dXJlLnVwZGF0ZShpbWcsIHt1c2VNaXBtYXA6IHRydWV9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aWxlLnRleHR1cmUgPSBuZXcgVGV4dHVyZShjb250ZXh0LCBpbWcsIGdsLlJHQkEsIHt1c2VNaXBtYXA6IHRydWV9KTtcbiAgICAgICAgICAgICAgICAgICAgdGlsZS50ZXh0dXJlLmJpbmQoZ2wuTElORUFSLCBnbC5DTEFNUF9UT19FREdFLCBnbC5MSU5FQVJfTUlQTUFQX05FQVJFU1QpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyZihnbC5URVhUVVJFXzJELCBjb250ZXh0LmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCwgY29udGV4dC5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWNNYXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGlsZS5zdGF0ZSA9ICdsb2FkZWQnO1xuXG4gICAgICAgICAgICAgICAgY2FjaGVFbnRyeVBvc3NpYmx5QWRkZWQodGhpcy5kaXNwYXRjaGVyKTtcblxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhYm9ydFRpbGUodGlsZTogVGlsZSwgY2FsbGJhY2s6IENhbGxiYWNrPHZvaWQ+KSB7XG4gICAgICAgIGlmICh0aWxlLnJlcXVlc3QpIHtcbiAgICAgICAgICAgIHRpbGUucmVxdWVzdC5jYW5jZWwoKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aWxlLnJlcXVlc3Q7XG4gICAgICAgIH1cbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG5cbiAgICB1bmxvYWRUaWxlKHRpbGU6IFRpbGUsIGNhbGxiYWNrOiBDYWxsYmFjazx2b2lkPikge1xuICAgICAgICBpZiAodGlsZS50ZXh0dXJlKSB0aGlzLm1hcC5wYWludGVyLnNhdmVUaWxlVGV4dHVyZSh0aWxlLnRleHR1cmUpO1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgIH1cblxuICAgIGhhc1RyYW5zaXRpb24oKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJhc3RlclRpbGVTb3VyY2U7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2dldEltYWdlLCBSZXNvdXJjZVR5cGV9IGZyb20gJy4uL3V0aWwvYWpheCc7XG5pbXBvcnQge2V4dGVuZH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7RXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCBicm93c2VyIGZyb20gJy4uL3V0aWwvYnJvd3Nlcic7XG5pbXBvcnQgd2luZG93IGZyb20gJy4uL3V0aWwvd2luZG93JztcbmltcG9ydCBvZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQgZnJvbSAnLi4vdXRpbC9vZmZzY3JlZW5fY2FudmFzX3N1cHBvcnRlZCc7XG5pbXBvcnQge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4vdGlsZV9pZCc7XG5pbXBvcnQgUmFzdGVyVGlsZVNvdXJjZSBmcm9tICcuL3Jhc3Rlcl90aWxlX3NvdXJjZSc7XG4vLyBlbnN1cmUgREVNRGF0YSBpcyByZWdpc3RlcmVkIGZvciB3b3JrZXIgdHJhbnNmZXIgb24gbWFpbiB0aHJlYWQ6XG5pbXBvcnQgJy4uL2RhdGEvZGVtX2RhdGEnO1xuXG5pbXBvcnQgdHlwZSB7U291cmNlfSBmcm9tICcuL3NvdXJjZSc7XG5pbXBvcnQgdHlwZSBEaXNwYXRjaGVyIGZyb20gJy4uL3V0aWwvZGlzcGF0Y2hlcic7XG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4vdGlsZSc7XG5pbXBvcnQgdHlwZSB7Q2FsbGJhY2t9IGZyb20gJy4uL3R5cGVzL2NhbGxiYWNrJztcbmltcG9ydCB0eXBlIHtSYXN0ZXJERU1Tb3VyY2VTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuY2xhc3MgUmFzdGVyREVNVGlsZVNvdXJjZSBleHRlbmRzIFJhc3RlclRpbGVTb3VyY2UgaW1wbGVtZW50cyBTb3VyY2Uge1xuICAgIGVuY29kaW5nOiBcIm1hcGJveFwiIHwgXCJ0ZXJyYXJpdW1cIjtcblxuICAgIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIG9wdGlvbnM6IFJhc3RlckRFTVNvdXJjZVNwZWNpZmljYXRpb24sIGRpc3BhdGNoZXI6IERpc3BhdGNoZXIsIGV2ZW50ZWRQYXJlbnQ6IEV2ZW50ZWQpIHtcbiAgICAgICAgc3VwZXIoaWQsIG9wdGlvbnMsIGRpc3BhdGNoZXIsIGV2ZW50ZWRQYXJlbnQpO1xuICAgICAgICB0aGlzLnR5cGUgPSAncmFzdGVyLWRlbSc7XG4gICAgICAgIHRoaXMubWF4em9vbSA9IDIyO1xuICAgICAgICB0aGlzLl9vcHRpb25zID0gZXh0ZW5kKHt0eXBlOiAncmFzdGVyLWRlbSd9LCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5lbmNvZGluZyA9IG9wdGlvbnMuZW5jb2RpbmcgfHwgXCJtYXBib3hcIjtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAncmFzdGVyLWRlbScsXG4gICAgICAgICAgICB1cmw6IHRoaXMudXJsLFxuICAgICAgICAgICAgdGlsZVNpemU6IHRoaXMudGlsZVNpemUsXG4gICAgICAgICAgICB0aWxlczogdGhpcy50aWxlcyxcbiAgICAgICAgICAgIGJvdW5kczogdGhpcy5ib3VuZHMsXG4gICAgICAgICAgICBlbmNvZGluZzogdGhpcy5lbmNvZGluZ1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGxvYWRUaWxlKHRpbGU6IFRpbGUsIGNhbGxiYWNrOiBDYWxsYmFjazx2b2lkPikge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIubm9ybWFsaXplVGlsZVVSTCh0aWxlLnRpbGVJRC5jYW5vbmljYWwudXJsKHRoaXMudGlsZXMsIHRoaXMuc2NoZW1lKSwgdGhpcy50aWxlU2l6ZSk7XG4gICAgICAgIHRpbGUucmVxdWVzdCA9IGdldEltYWdlKHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KHVybCwgUmVzb3VyY2VUeXBlLlRpbGUpLCBpbWFnZUxvYWRlZC5iaW5kKHRoaXMpKTtcblxuICAgICAgICB0aWxlLm5laWdoYm9yaW5nVGlsZXMgPSB0aGlzLl9nZXROZWlnaGJvcmluZ1RpbGVzKHRpbGUudGlsZUlEKTtcbiAgICAgICAgZnVuY3Rpb24gaW1hZ2VMb2FkZWQoZXJyLCBpbWcpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aWxlLnJlcXVlc3Q7XG4gICAgICAgICAgICBpZiAodGlsZS5hYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgdGlsZS5zdGF0ZSA9ICd1bmxvYWRlZCc7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHRpbGUuc3RhdGUgPSAnZXJyb3JlZCc7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW1nKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWFwLl9yZWZyZXNoRXhwaXJlZFRpbGVzKSB0aWxlLnNldEV4cGlyeURhdGEoaW1nKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgKGltZzogYW55KS5jYWNoZUNvbnRyb2w7XG4gICAgICAgICAgICAgICAgZGVsZXRlIChpbWc6IGFueSkuZXhwaXJlcztcbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2ZlciA9IHdpbmRvdy5JbWFnZUJpdG1hcCAmJiBpbWcgaW5zdGFuY2VvZiB3aW5kb3cuSW1hZ2VCaXRtYXAgJiYgb2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmF3SW1hZ2VEYXRhID0gdHJhbnNmZXIgPyBpbWcgOiBicm93c2VyLmdldEltYWdlRGF0YShpbWcsIDEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgdWlkOiB0aWxlLnVpZCxcbiAgICAgICAgICAgICAgICAgICAgY29vcmQ6IHRpbGUudGlsZUlELFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IHRoaXMuaWQsXG4gICAgICAgICAgICAgICAgICAgIHJhd0ltYWdlRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IHRoaXMuZW5jb2RpbmdcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0aWxlLmFjdG9yIHx8IHRpbGUuc3RhdGUgPT09ICdleHBpcmVkJykge1xuICAgICAgICAgICAgICAgICAgICB0aWxlLmFjdG9yID0gdGhpcy5kaXNwYXRjaGVyLmdldEFjdG9yKCk7XG4gICAgICAgICAgICAgICAgICAgIHRpbGUuYWN0b3Iuc2VuZCgnbG9hZERFTVRpbGUnLCBwYXJhbXMsIGRvbmUuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZG9uZShlcnIsIGRlbSkge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHRpbGUuc3RhdGUgPSAnZXJyb3JlZCc7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRlbSkge1xuICAgICAgICAgICAgICAgIHRpbGUuZGVtID0gZGVtO1xuICAgICAgICAgICAgICAgIHRpbGUubmVlZHNIaWxsc2hhZGVQcmVwYXJlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aWxlLnN0YXRlID0gJ2xvYWRlZCc7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfZ2V0TmVpZ2hib3JpbmdUaWxlcyh0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQpIHtcbiAgICAgICAgY29uc3QgY2Fub25pY2FsID0gdGlsZUlELmNhbm9uaWNhbDtcbiAgICAgICAgY29uc3QgZGltID0gTWF0aC5wb3coMiwgY2Fub25pY2FsLnopO1xuXG4gICAgICAgIGNvbnN0IHB4ID0gKGNhbm9uaWNhbC54IC0gMSArIGRpbSkgJSBkaW07XG4gICAgICAgIGNvbnN0IHB4dyA9IGNhbm9uaWNhbC54ID09PSAwID8gdGlsZUlELndyYXAgLSAxIDogdGlsZUlELndyYXA7XG4gICAgICAgIGNvbnN0IG54ID0gKGNhbm9uaWNhbC54ICsgMSArIGRpbSkgJSBkaW07XG4gICAgICAgIGNvbnN0IG54dyA9IGNhbm9uaWNhbC54ICsgMSA9PT0gZGltID8gdGlsZUlELndyYXAgKyAxIDogdGlsZUlELndyYXA7XG5cbiAgICAgICAgY29uc3QgbmVpZ2hib3JpbmdUaWxlcyA9IHt9O1xuICAgICAgICAvLyBhZGQgYWRqYWNlbnQgdGlsZXNcbiAgICAgICAgbmVpZ2hib3JpbmdUaWxlc1tuZXcgT3ZlcnNjYWxlZFRpbGVJRCh0aWxlSUQub3ZlcnNjYWxlZFosIHB4dywgY2Fub25pY2FsLnosIHB4LCBjYW5vbmljYWwueSkua2V5XSA9IHtiYWNrZmlsbGVkOiBmYWxzZX07XG4gICAgICAgIG5laWdoYm9yaW5nVGlsZXNbbmV3IE92ZXJzY2FsZWRUaWxlSUQodGlsZUlELm92ZXJzY2FsZWRaLCBueHcsIGNhbm9uaWNhbC56LCBueCwgY2Fub25pY2FsLnkpLmtleV0gPSB7YmFja2ZpbGxlZDogZmFsc2V9O1xuXG4gICAgICAgIC8vIEFkZCB1cHBlciBuZWlnaGJvcmluZ1RpbGVzXG4gICAgICAgIGlmIChjYW5vbmljYWwueSA+IDApIHtcbiAgICAgICAgICAgIG5laWdoYm9yaW5nVGlsZXNbbmV3IE92ZXJzY2FsZWRUaWxlSUQodGlsZUlELm92ZXJzY2FsZWRaLCBweHcsIGNhbm9uaWNhbC56LCBweCwgY2Fub25pY2FsLnkgLSAxKS5rZXldID0ge2JhY2tmaWxsZWQ6IGZhbHNlfTtcbiAgICAgICAgICAgIG5laWdoYm9yaW5nVGlsZXNbbmV3IE92ZXJzY2FsZWRUaWxlSUQodGlsZUlELm92ZXJzY2FsZWRaLCB0aWxlSUQud3JhcCwgY2Fub25pY2FsLnosIGNhbm9uaWNhbC54LCBjYW5vbmljYWwueSAtIDEpLmtleV0gPSB7YmFja2ZpbGxlZDogZmFsc2V9O1xuICAgICAgICAgICAgbmVpZ2hib3JpbmdUaWxlc1tuZXcgT3ZlcnNjYWxlZFRpbGVJRCh0aWxlSUQub3ZlcnNjYWxlZFosIG54dywgY2Fub25pY2FsLnosIG54LCBjYW5vbmljYWwueSAtIDEpLmtleV0gPSB7YmFja2ZpbGxlZDogZmFsc2V9O1xuICAgICAgICB9XG4gICAgICAgIC8vIEFkZCBsb3dlciBuZWlnaGJvcmluZ1RpbGVzXG4gICAgICAgIGlmIChjYW5vbmljYWwueSArIDEgPCBkaW0pIHtcbiAgICAgICAgICAgIG5laWdoYm9yaW5nVGlsZXNbbmV3IE92ZXJzY2FsZWRUaWxlSUQodGlsZUlELm92ZXJzY2FsZWRaLCBweHcsIGNhbm9uaWNhbC56LCBweCwgY2Fub25pY2FsLnkgKyAxKS5rZXldID0ge2JhY2tmaWxsZWQ6IGZhbHNlfTtcbiAgICAgICAgICAgIG5laWdoYm9yaW5nVGlsZXNbbmV3IE92ZXJzY2FsZWRUaWxlSUQodGlsZUlELm92ZXJzY2FsZWRaLCB0aWxlSUQud3JhcCwgY2Fub25pY2FsLnosIGNhbm9uaWNhbC54LCBjYW5vbmljYWwueSArIDEpLmtleV0gPSB7YmFja2ZpbGxlZDogZmFsc2V9O1xuICAgICAgICAgICAgbmVpZ2hib3JpbmdUaWxlc1tuZXcgT3ZlcnNjYWxlZFRpbGVJRCh0aWxlSUQub3ZlcnNjYWxlZFosIG54dywgY2Fub25pY2FsLnosIG54LCBjYW5vbmljYWwueSArIDEpLmtleV0gPSB7YmFja2ZpbGxlZDogZmFsc2V9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5laWdoYm9yaW5nVGlsZXM7XG4gICAgfVxuXG4gICAgdW5sb2FkVGlsZSh0aWxlOiBUaWxlKSB7XG4gICAgICAgIGlmICh0aWxlLmRlbVRleHR1cmUpIHRoaXMubWFwLnBhaW50ZXIuc2F2ZVRpbGVUZXh0dXJlKHRpbGUuZGVtVGV4dHVyZSk7XG4gICAgICAgIGlmICh0aWxlLmZibykge1xuICAgICAgICAgICAgdGlsZS5mYm8uZGVzdHJveSgpO1xuICAgICAgICAgICAgZGVsZXRlIHRpbGUuZmJvO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aWxlLmRlbSkgZGVsZXRlIHRpbGUuZGVtO1xuICAgICAgICBkZWxldGUgdGlsZS5uZWlnaGJvcmluZ1RpbGVzO1xuXG4gICAgICAgIHRpbGUuc3RhdGUgPSAndW5sb2FkZWQnO1xuICAgICAgICBpZiAodGlsZS5hY3Rvcikge1xuICAgICAgICAgICAgdGlsZS5hY3Rvci5zZW5kKCdyZW1vdmVERU1UaWxlJywge3VpZDogdGlsZS51aWQsIHNvdXJjZTogdGhpcy5pZH0pO1xuICAgICAgICB9XG4gICAgfVxuXG59XG5cbmV4cG9ydCBkZWZhdWx0IFJhc3RlckRFTVRpbGVTb3VyY2U7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge0V2ZW50LCBFcnJvckV2ZW50LCBFdmVudGVkfSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuXG5pbXBvcnQge2V4dGVuZH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi4vZGF0YS9leHRlbnQnO1xuaW1wb3J0IHtSZXNvdXJjZVR5cGV9IGZyb20gJy4uL3V0aWwvYWpheCc7XG5pbXBvcnQgYnJvd3NlciBmcm9tICcuLi91dGlsL2Jyb3dzZXInO1xuXG5pbXBvcnQgdHlwZSB7U291cmNlfSBmcm9tICcuL3NvdXJjZSc7XG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vdWkvbWFwJztcbmltcG9ydCB0eXBlIERpc3BhdGNoZXIgZnJvbSAnLi4vdXRpbC9kaXNwYXRjaGVyJztcbmltcG9ydCB0eXBlIFRpbGUgZnJvbSAnLi90aWxlJztcbmltcG9ydCB0eXBlIEFjdG9yIGZyb20gJy4uL3V0aWwvYWN0b3InO1xuaW1wb3J0IHR5cGUge0NhbGxiYWNrfSBmcm9tICcuLi90eXBlcy9jYWxsYmFjayc7XG5pbXBvcnQgdHlwZSB7R2VvSlNPTiwgR2VvSlNPTkZlYXR1cmV9IGZyb20gJ0BtYXBib3gvZ2VvanNvbi10eXBlcyc7XG5pbXBvcnQgdHlwZSB7R2VvSlNPTlNvdXJjZVNwZWNpZmljYXRpb24sIFByb21vdGVJZFNwZWNpZmljYXRpb259IGZyb20gJy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG4vKipcbiAqIEEgc291cmNlIGNvbnRhaW5pbmcgR2VvSlNPTi5cbiAqIChTZWUgdGhlIFtTdHlsZSBTcGVjaWZpY2F0aW9uXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1zdHlsZS1zcGVjLyNzb3VyY2VzLWdlb2pzb24pIGZvciBkZXRhaWxlZCBkb2N1bWVudGF0aW9uIG9mIG9wdGlvbnMuKVxuICpcbiAqIEBleGFtcGxlXG4gKiBtYXAuYWRkU291cmNlKCdzb21lIGlkJywge1xuICogICAgIHR5cGU6ICdnZW9qc29uJyxcbiAqICAgICBkYXRhOiAnaHR0cHM6Ly9kMmFkNmI0dXI3eXZwcS5jbG91ZGZyb250Lm5ldC9uYXR1cmFsZWFydGgtMy4zLjAvbmVfMTBtX3BvcnRzLmdlb2pzb24nXG4gKiB9KTtcbiAqXG4gKiBAZXhhbXBsZVxuICogbWFwLmFkZFNvdXJjZSgnc29tZSBpZCcsIHtcbiAqICAgIHR5cGU6ICdnZW9qc29uJyxcbiAqICAgIGRhdGE6IHtcbiAqICAgICAgICBcInR5cGVcIjogXCJGZWF0dXJlQ29sbGVjdGlvblwiLFxuICogICAgICAgIFwiZmVhdHVyZXNcIjogW3tcbiAqICAgICAgICAgICAgXCJ0eXBlXCI6IFwiRmVhdHVyZVwiLFxuICogICAgICAgICAgICBcInByb3BlcnRpZXNcIjoge30sXG4gKiAgICAgICAgICAgIFwiZ2VvbWV0cnlcIjoge1xuICogICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiUG9pbnRcIixcbiAqICAgICAgICAgICAgICAgIFwiY29vcmRpbmF0ZXNcIjogW1xuICogICAgICAgICAgICAgICAgICAgIC03Ni41MzA2MzI5NzI3MTcyOSxcbiAqICAgICAgICAgICAgICAgICAgICAzOS4xODE3NDA3Nzk5NDEwOFxuICogICAgICAgICAgICAgICAgXVxuICogICAgICAgICAgICB9XG4gKiAgICAgICAgfV1cbiAqICAgIH1cbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiBtYXAuZ2V0U291cmNlKCdzb21lIGlkJykuc2V0RGF0YSh7XG4gKiAgIFwidHlwZVwiOiBcIkZlYXR1cmVDb2xsZWN0aW9uXCIsXG4gKiAgIFwiZmVhdHVyZXNcIjogW3tcbiAqICAgICAgIFwidHlwZVwiOiBcIkZlYXR1cmVcIixcbiAqICAgICAgIFwicHJvcGVydGllc1wiOiB7IFwibmFtZVwiOiBcIk51bGwgSXNsYW5kXCIgfSxcbiAqICAgICAgIFwiZ2VvbWV0cnlcIjoge1xuICogICAgICAgICAgIFwidHlwZVwiOiBcIlBvaW50XCIsXG4gKiAgICAgICAgICAgXCJjb29yZGluYXRlc1wiOiBbIDAsIDAgXVxuICogICAgICAgfVxuICogICB9XVxuICogfSk7XG4gKiBAc2VlIFtEcmF3IEdlb0pTT04gcG9pbnRzXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2dlb2pzb24tbWFya2Vycy8pXG4gKiBAc2VlIFtBZGQgYSBHZW9KU09OIGxpbmVdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZ2VvanNvbi1saW5lLylcbiAqIEBzZWUgW0NyZWF0ZSBhIGhlYXRtYXAgZnJvbSBwb2ludHNdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvaGVhdG1hcC8pXG4gKiBAc2VlIFtDcmVhdGUgYW5kIHN0eWxlIGNsdXN0ZXJzXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2NsdXN0ZXIvKVxuICovXG5jbGFzcyBHZW9KU09OU291cmNlIGV4dGVuZHMgRXZlbnRlZCBpbXBsZW1lbnRzIFNvdXJjZSB7XG4gICAgdHlwZTogJ2dlb2pzb24nO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbWluem9vbTogbnVtYmVyO1xuICAgIG1heHpvb206IG51bWJlcjtcbiAgICB0aWxlU2l6ZTogbnVtYmVyO1xuICAgIGF0dHJpYnV0aW9uOiBzdHJpbmc7XG4gICAgcHJvbW90ZUlkOiA/UHJvbW90ZUlkU3BlY2lmaWNhdGlvbjtcblxuICAgIGlzVGlsZUNsaXBwZWQ6IGJvb2xlYW47XG4gICAgcmVwYXJzZU92ZXJzY2FsZWQ6IGJvb2xlYW47XG4gICAgX2RhdGE6IEdlb0pTT04gfCBzdHJpbmc7XG4gICAgX29wdGlvbnM6IGFueTtcbiAgICB3b3JrZXJPcHRpb25zOiBhbnk7XG4gICAgbWFwOiBNYXA7XG4gICAgYWN0b3I6IEFjdG9yO1xuICAgIF9sb2FkZWQ6IGJvb2xlYW47XG4gICAgX2NvbGxlY3RSZXNvdXJjZVRpbWluZzogYm9vbGVhbjtcbiAgICBfcmVzb3VyY2VUaW1pbmc6IEFycmF5PFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmc+O1xuICAgIF9yZW1vdmVkOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihpZDogc3RyaW5nLCBvcHRpb25zOiBHZW9KU09OU291cmNlU3BlY2lmaWNhdGlvbiAmIHt3b3JrZXJPcHRpb25zPzogYW55LCBjb2xsZWN0UmVzb3VyY2VUaW1pbmc6IGJvb2xlYW59LCBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyLCBldmVudGVkUGFyZW50OiBFdmVudGVkKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5pZCA9IGlkO1xuXG4gICAgICAgIC8vIGB0eXBlYCBpcyBhIHByb3BlcnR5IHJhdGhlciB0aGFuIGEgY29uc3RhbnQgdG8gbWFrZSBpdCBlYXN5IGZvciAzcmRcbiAgICAgICAgLy8gcGFydGllcyB0byB1c2UgR2VvSlNPTlNvdXJjZSB0byBidWlsZCB0aGVpciBvd24gc291cmNlIHR5cGVzLlxuICAgICAgICB0aGlzLnR5cGUgPSAnZ2VvanNvbic7XG5cbiAgICAgICAgdGhpcy5taW56b29tID0gMDtcbiAgICAgICAgdGhpcy5tYXh6b29tID0gMTg7XG4gICAgICAgIHRoaXMudGlsZVNpemUgPSA1MTI7XG4gICAgICAgIHRoaXMuaXNUaWxlQ2xpcHBlZCA9IHRydWU7XG4gICAgICAgIHRoaXMucmVwYXJzZU92ZXJzY2FsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9yZW1vdmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2xvYWRlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuYWN0b3IgPSBkaXNwYXRjaGVyLmdldEFjdG9yKCk7XG4gICAgICAgIHRoaXMuc2V0RXZlbnRlZFBhcmVudChldmVudGVkUGFyZW50KTtcblxuICAgICAgICB0aGlzLl9kYXRhID0gKG9wdGlvbnMuZGF0YTogYW55KTtcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IGV4dGVuZCh7fSwgb3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nID0gb3B0aW9ucy5jb2xsZWN0UmVzb3VyY2VUaW1pbmc7XG4gICAgICAgIHRoaXMuX3Jlc291cmNlVGltaW5nID0gW107XG5cbiAgICAgICAgaWYgKG9wdGlvbnMubWF4em9vbSAhPT0gdW5kZWZpbmVkKSB0aGlzLm1heHpvb20gPSBvcHRpb25zLm1heHpvb207XG4gICAgICAgIGlmIChvcHRpb25zLnR5cGUpIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcbiAgICAgICAgaWYgKG9wdGlvbnMuYXR0cmlidXRpb24pIHRoaXMuYXR0cmlidXRpb24gPSBvcHRpb25zLmF0dHJpYnV0aW9uO1xuICAgICAgICB0aGlzLnByb21vdGVJZCA9IG9wdGlvbnMucHJvbW90ZUlkO1xuXG4gICAgICAgIGNvbnN0IHNjYWxlID0gRVhURU5UIC8gdGhpcy50aWxlU2l6ZTtcblxuICAgICAgICAvLyBzZW50IHRvIHRoZSB3b3JrZXIsIGFsb25nIHdpdGggYHVybDogLi4uYCBvciBgZGF0YTogbGl0ZXJhbCBnZW9qc29uYCxcbiAgICAgICAgLy8gc28gdGhhdCBpdCBjYW4gbG9hZC9wYXJzZS9pbmRleCB0aGUgZ2VvanNvbiBkYXRhXG4gICAgICAgIC8vIGV4dGVuZGluZyB3aXRoIGBvcHRpb25zLndvcmtlck9wdGlvbnNgIGhlbHBzIHRvIG1ha2UgaXQgZWFzeSBmb3JcbiAgICAgICAgLy8gdGhpcmQtcGFydHkgc291cmNlcyB0byBoYWNrL3JldXNlIEdlb0pTT05Tb3VyY2UuXG4gICAgICAgIHRoaXMud29ya2VyT3B0aW9ucyA9IGV4dGVuZCh7XG4gICAgICAgICAgICBzb3VyY2U6IHRoaXMuaWQsXG4gICAgICAgICAgICBjbHVzdGVyOiBvcHRpb25zLmNsdXN0ZXIgfHwgZmFsc2UsXG4gICAgICAgICAgICBnZW9qc29uVnRPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgYnVmZmVyOiAob3B0aW9ucy5idWZmZXIgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYnVmZmVyIDogMTI4KSAqIHNjYWxlLFxuICAgICAgICAgICAgICAgIHRvbGVyYW5jZTogKG9wdGlvbnMudG9sZXJhbmNlICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLnRvbGVyYW5jZSA6IDAuMzc1KSAqIHNjYWxlLFxuICAgICAgICAgICAgICAgIGV4dGVudDogRVhURU5ULFxuICAgICAgICAgICAgICAgIG1heFpvb206IHRoaXMubWF4em9vbSxcbiAgICAgICAgICAgICAgICBsaW5lTWV0cmljczogb3B0aW9ucy5saW5lTWV0cmljcyB8fCBmYWxzZSxcbiAgICAgICAgICAgICAgICBnZW5lcmF0ZUlkOiBvcHRpb25zLmdlbmVyYXRlSWQgfHwgZmFsc2VcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdXBlcmNsdXN0ZXJPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgbWF4Wm9vbTogb3B0aW9ucy5jbHVzdGVyTWF4Wm9vbSAhPT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgICAgICAgICAgTWF0aC5taW4ob3B0aW9ucy5jbHVzdGVyTWF4Wm9vbSwgdGhpcy5tYXh6b29tIC0gMSkgOlxuICAgICAgICAgICAgICAgICAgICAodGhpcy5tYXh6b29tIC0gMSksXG4gICAgICAgICAgICAgICAgZXh0ZW50OiBFWFRFTlQsXG4gICAgICAgICAgICAgICAgcmFkaXVzOiAob3B0aW9ucy5jbHVzdGVyUmFkaXVzIHx8IDUwKSAqIHNjYWxlLFxuICAgICAgICAgICAgICAgIGxvZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgZ2VuZXJhdGVJZDogb3B0aW9ucy5nZW5lcmF0ZUlkIHx8IGZhbHNlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2x1c3RlclByb3BlcnRpZXM6IG9wdGlvbnMuY2x1c3RlclByb3BlcnRpZXNcbiAgICAgICAgfSwgb3B0aW9ucy53b3JrZXJPcHRpb25zKTtcbiAgICB9XG5cbiAgICBsb2FkKCkge1xuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhbG9hZGluZycsIHtkYXRhVHlwZTogJ3NvdXJjZSd9KSk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVdvcmtlckRhdGEoKGVycikgPT4ge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChlcnIpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGRhdGE6IE9iamVjdCA9IHtkYXRhVHlwZTogJ3NvdXJjZScsIHNvdXJjZURhdGFUeXBlOiAnbWV0YWRhdGEnfTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmcgJiYgdGhpcy5fcmVzb3VyY2VUaW1pbmcgJiYgKHRoaXMuX3Jlc291cmNlVGltaW5nLmxlbmd0aCA+IDApKSB7XG4gICAgICAgICAgICAgICAgZGF0YS5yZXNvdXJjZVRpbWluZyA9IHRoaXMuX3Jlc291cmNlVGltaW5nO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Jlc291cmNlVGltaW5nID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGFsdGhvdWdoIEdlb0pTT04gc291cmNlcyBjb250YWluIG5vIG1ldGFkYXRhLCB3ZSBmaXJlIHRoaXMgZXZlbnQgdG8gbGV0IHRoZSBTb3VyY2VDYWNoZVxuICAgICAgICAgICAgLy8ga25vdyBpdHMgb2sgdG8gc3RhcnQgcmVxdWVzdGluZyB0aWxlcy5cbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGEnLCBkYXRhKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uQWRkKG1hcDogTWFwKSB7XG4gICAgICAgIHRoaXMubWFwID0gbWFwO1xuICAgICAgICB0aGlzLmxvYWQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBHZW9KU09OIGRhdGEgYW5kIHJlLXJlbmRlcnMgdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fHN0cmluZ30gZGF0YSBBIEdlb0pTT04gZGF0YSBvYmplY3Qgb3IgYSBVUkwgdG8gb25lLiBUaGUgbGF0dGVyIGlzIHByZWZlcmFibGUgaW4gdGhlIGNhc2Ugb2YgbGFyZ2UgR2VvSlNPTiBmaWxlcy5cbiAgICAgKiBAcmV0dXJucyB7R2VvSlNPTlNvdXJjZX0gdGhpc1xuICAgICAqL1xuICAgIHNldERhdGEoZGF0YTogR2VvSlNPTiB8IHN0cmluZykge1xuICAgICAgICB0aGlzLl9kYXRhID0gZGF0YTtcbiAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZGF0YWxvYWRpbmcnLCB7ZGF0YVR5cGU6ICdzb3VyY2UnfSkpO1xuICAgICAgICB0aGlzLl91cGRhdGVXb3JrZXJEYXRhKChlcnIpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQoZXJyKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBkYXRhOiBPYmplY3QgPSB7ZGF0YVR5cGU6ICdzb3VyY2UnLCBzb3VyY2VEYXRhVHlwZTogJ2NvbnRlbnQnfTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmcgJiYgdGhpcy5fcmVzb3VyY2VUaW1pbmcgJiYgKHRoaXMuX3Jlc291cmNlVGltaW5nLmxlbmd0aCA+IDApKSB7XG4gICAgICAgICAgICAgICAgZGF0YS5yZXNvdXJjZVRpbWluZyA9IHRoaXMuX3Jlc291cmNlVGltaW5nO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Jlc291cmNlVGltaW5nID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhJywgZGF0YSkpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGb3IgY2x1c3RlcmVkIHNvdXJjZXMsIGZldGNoZXMgdGhlIHpvb20gYXQgd2hpY2ggdGhlIGdpdmVuIGNsdXN0ZXIgZXhwYW5kcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjbHVzdGVySWQgVGhlIHZhbHVlIG9mIHRoZSBjbHVzdGVyJ3MgYGNsdXN0ZXJfaWRgIHByb3BlcnR5LlxuICAgICAqIEBwYXJhbSBjYWxsYmFjayBBIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSB6b29tIHZhbHVlIGlzIHJldHJpZXZlZCAoYChlcnJvciwgem9vbSkgPT4geyAuLi4gfWApLlxuICAgICAqIEByZXR1cm5zIHtHZW9KU09OU291cmNlfSB0aGlzXG4gICAgICovXG4gICAgZ2V0Q2x1c3RlckV4cGFuc2lvblpvb20oY2x1c3RlcklkOiBudW1iZXIsIGNhbGxiYWNrOiBDYWxsYmFjazxudW1iZXI+KSB7XG4gICAgICAgIHRoaXMuYWN0b3Iuc2VuZCgnZ2VvanNvbi5nZXRDbHVzdGVyRXhwYW5zaW9uWm9vbScsIHtjbHVzdGVySWQsIHNvdXJjZTogdGhpcy5pZH0sIGNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9yIGNsdXN0ZXJlZCBzb3VyY2VzLCBmZXRjaGVzIHRoZSBjaGlsZHJlbiBvZiB0aGUgZ2l2ZW4gY2x1c3RlciBvbiB0aGUgbmV4dCB6b29tIGxldmVsIChhcyBhbiBhcnJheSBvZiBHZW9KU09OIGZlYXR1cmVzKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjbHVzdGVySWQgVGhlIHZhbHVlIG9mIHRoZSBjbHVzdGVyJ3MgYGNsdXN0ZXJfaWRgIHByb3BlcnR5LlxuICAgICAqIEBwYXJhbSBjYWxsYmFjayBBIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBmZWF0dXJlcyBhcmUgcmV0cmlldmVkIChgKGVycm9yLCBmZWF0dXJlcykgPT4geyAuLi4gfWApLlxuICAgICAqIEByZXR1cm5zIHtHZW9KU09OU291cmNlfSB0aGlzXG4gICAgICovXG4gICAgZ2V0Q2x1c3RlckNoaWxkcmVuKGNsdXN0ZXJJZDogbnVtYmVyLCBjYWxsYmFjazogQ2FsbGJhY2s8QXJyYXk8R2VvSlNPTkZlYXR1cmU+Pikge1xuICAgICAgICB0aGlzLmFjdG9yLnNlbmQoJ2dlb2pzb24uZ2V0Q2x1c3RlckNoaWxkcmVuJywge2NsdXN0ZXJJZCwgc291cmNlOiB0aGlzLmlkfSwgY2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGb3IgY2x1c3RlcmVkIHNvdXJjZXMsIGZldGNoZXMgdGhlIG9yaWdpbmFsIHBvaW50cyB0aGF0IGJlbG9uZyB0byB0aGUgY2x1c3RlciAoYXMgYW4gYXJyYXkgb2YgR2VvSlNPTiBmZWF0dXJlcykuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2x1c3RlcklkIFRoZSB2YWx1ZSBvZiB0aGUgY2x1c3RlcidzIGBjbHVzdGVyX2lkYCBwcm9wZXJ0eS5cbiAgICAgKiBAcGFyYW0gbGltaXQgVGhlIG1heGltdW0gbnVtYmVyIG9mIGZlYXR1cmVzIHRvIHJldHVybi5cbiAgICAgKiBAcGFyYW0gb2Zmc2V0IFRoZSBudW1iZXIgb2YgZmVhdHVyZXMgdG8gc2tpcCAoZS5nLiBmb3IgcGFnaW5hdGlvbikuXG4gICAgICogQHBhcmFtIGNhbGxiYWNrIEEgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGZlYXR1cmVzIGFyZSByZXRyaWV2ZWQgKGAoZXJyb3IsIGZlYXR1cmVzKSA9PiB7IC4uLiB9YCkuXG4gICAgICogQHJldHVybnMge0dlb0pTT05Tb3VyY2V9IHRoaXNcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIFJldHJpZXZlIGNsdXN0ZXIgbGVhdmVzIG9uIGNsaWNrXG4gICAgICogbWFwLm9uKCdjbGljaycsICdjbHVzdGVycycsIGZ1bmN0aW9uKGUpIHtcbiAgICAgKiAgIHZhciBmZWF0dXJlcyA9IG1hcC5xdWVyeVJlbmRlcmVkRmVhdHVyZXMoZS5wb2ludCwge1xuICAgICAqICAgICBsYXllcnM6IFsnY2x1c3RlcnMnXVxuICAgICAqICAgfSk7XG4gICAgICpcbiAgICAgKiAgIHZhciBjbHVzdGVySWQgPSBmZWF0dXJlc1swXS5wcm9wZXJ0aWVzLmNsdXN0ZXJfaWQ7XG4gICAgICogICB2YXIgcG9pbnRDb3VudCA9IGZlYXR1cmVzWzBdLnByb3BlcnRpZXMucG9pbnRfY291bnQ7XG4gICAgICogICB2YXIgY2x1c3RlclNvdXJjZSA9IG1hcC5nZXRTb3VyY2UoJ2NsdXN0ZXJzJyk7XG4gICAgICpcbiAgICAgKiAgIGNsdXN0ZXJTb3VyY2UuZ2V0Q2x1c3RlckxlYXZlcyhjbHVzdGVySWQsIHBvaW50Q291bnQsIDAsIGZ1bmN0aW9uKGVycm9yLCBmZWF0dXJlcykge1xuICAgICAqICAgICAvLyBQcmludCBjbHVzdGVyIGxlYXZlcyBpbiB0aGUgY29uc29sZVxuICAgICAqICAgICBjb25zb2xlLmxvZygnQ2x1c3RlciBsZWF2ZXM6JywgZXJyb3IsIGZlYXR1cmVzKTtcbiAgICAgKiAgIH0pXG4gICAgICogfSk7XG4gICAgICovXG4gICAgZ2V0Q2x1c3RlckxlYXZlcyhjbHVzdGVySWQ6IG51bWJlciwgbGltaXQ6IG51bWJlciwgb2Zmc2V0OiBudW1iZXIsIGNhbGxiYWNrOiBDYWxsYmFjazxBcnJheTxHZW9KU09ORmVhdHVyZT4+KSB7XG4gICAgICAgIHRoaXMuYWN0b3Iuc2VuZCgnZ2VvanNvbi5nZXRDbHVzdGVyTGVhdmVzJywge1xuICAgICAgICAgICAgc291cmNlOiB0aGlzLmlkLFxuICAgICAgICAgICAgY2x1c3RlcklkLFxuICAgICAgICAgICAgbGltaXQsXG4gICAgICAgICAgICBvZmZzZXRcbiAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIFJlc3BvbnNpYmxlIGZvciBpbnZva2luZyBXb3JrZXJTb3VyY2UncyBnZW9qc29uLmxvYWREYXRhIHRhcmdldCwgd2hpY2hcbiAgICAgKiBoYW5kbGVzIGxvYWRpbmcgdGhlIGdlb2pzb24gZGF0YSBhbmQgcHJlcGFyaW5nIHRvIHNlcnZlIGl0IHVwIGFzIHRpbGVzLFxuICAgICAqIHVzaW5nIGdlb2pzb24tdnQgb3Igc3VwZXJjbHVzdGVyIGFzIGFwcHJvcHJpYXRlLlxuICAgICAqL1xuICAgIF91cGRhdGVXb3JrZXJEYXRhKGNhbGxiYWNrOiBDYWxsYmFjazx2b2lkPikge1xuICAgICAgICB0aGlzLl9sb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGV4dGVuZCh7fSwgdGhpcy53b3JrZXJPcHRpb25zKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuX2RhdGE7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIG9wdGlvbnMucmVxdWVzdCA9IHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KGJyb3dzZXIucmVzb2x2ZVVSTChkYXRhKSwgUmVzb3VyY2VUeXBlLlNvdXJjZSk7XG4gICAgICAgICAgICBvcHRpb25zLnJlcXVlc3QuY29sbGVjdFJlc291cmNlVGltaW5nID0gdGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3B0aW9ucy5kYXRhID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0YXJnZXQge3RoaXMudHlwZX0ubG9hZERhdGEgcmF0aGVyIHRoYW4gbGl0ZXJhbGx5IGdlb2pzb24ubG9hZERhdGEsXG4gICAgICAgIC8vIHNvIHRoYXQgb3RoZXIgZ2VvanNvbi1saWtlIHNvdXJjZSB0eXBlcyBjYW4gZWFzaWx5IHJldXNlIHRoaXNcbiAgICAgICAgLy8gaW1wbGVtZW50YXRpb25cbiAgICAgICAgdGhpcy5hY3Rvci5zZW5kKGAke3RoaXMudHlwZX0ubG9hZERhdGFgLCBvcHRpb25zLCAoZXJyLCByZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9yZW1vdmVkIHx8IChyZXN1bHQgJiYgcmVzdWx0LmFiYW5kb25lZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2xvYWRlZCA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LnJlc291cmNlVGltaW5nICYmIHJlc3VsdC5yZXNvdXJjZVRpbWluZ1t0aGlzLmlkXSlcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXNvdXJjZVRpbWluZyA9IHJlc3VsdC5yZXNvdXJjZVRpbWluZ1t0aGlzLmlkXS5zbGljZSgwKTtcbiAgICAgICAgICAgIC8vIEFueSBgbG9hZERhdGFgIGNhbGxzIHRoYXQgcGlsZWQgdXAgd2hpbGUgd2Ugd2VyZSBwcm9jZXNzaW5nXG4gICAgICAgICAgICAvLyB0aGlzIG9uZSB3aWxsIGdldCBjb2FsZXNjZWQgaW50byBhIHNpbmdsZSBjYWxsIHdoZW4gdGhpc1xuICAgICAgICAgICAgLy8gJ2NvYWxlc2NlJyBtZXNzYWdlIGlzIHByb2Nlc3NlZC5cbiAgICAgICAgICAgIC8vIFdlIHdvdWxkIHNlbGYtc2VuZCBmcm9tIHRoZSB3b3JrZXIgaWYgd2UgaGFkIGFjY2VzcyB0byBpdHNcbiAgICAgICAgICAgIC8vIG1lc3NhZ2UgcXVldWUuIFdhaXRpbmcgaW5zdGVhZCBmb3IgdGhlICdjb2FsZXNjZScgdG8gcm91bmQtdHJpcFxuICAgICAgICAgICAgLy8gdGhyb3VnaCB0aGUgZm9yZWdyb3VuZCBqdXN0IG1lYW5zIHdlJ3JlIHRocm90dGxpbmcgdGhlIHdvcmtlclxuICAgICAgICAgICAgLy8gdG8gcnVuIGF0IGEgbGl0dGxlIGxlc3MgdGhhbiBmdWxsLXRocm90dGxlLlxuICAgICAgICAgICAgdGhpcy5hY3Rvci5zZW5kKGAke3RoaXMudHlwZX0uY29hbGVzY2VgLCB7c291cmNlOiBvcHRpb25zLnNvdXJjZX0sIG51bGwpO1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbG9hZGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGVkO1xuICAgIH1cblxuICAgIGxvYWRUaWxlKHRpbGU6IFRpbGUsIGNhbGxiYWNrOiBDYWxsYmFjazx2b2lkPikge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gIXRpbGUuYWN0b3IgPyAnbG9hZFRpbGUnIDogJ3JlbG9hZFRpbGUnO1xuICAgICAgICB0aWxlLmFjdG9yID0gdGhpcy5hY3RvcjtcbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgdWlkOiB0aWxlLnVpZCxcbiAgICAgICAgICAgIHRpbGVJRDogdGlsZS50aWxlSUQsXG4gICAgICAgICAgICB6b29tOiB0aWxlLnRpbGVJRC5vdmVyc2NhbGVkWixcbiAgICAgICAgICAgIG1heFpvb206IHRoaXMubWF4em9vbSxcbiAgICAgICAgICAgIHRpbGVTaXplOiB0aGlzLnRpbGVTaXplLFxuICAgICAgICAgICAgc291cmNlOiB0aGlzLmlkLFxuICAgICAgICAgICAgcGl4ZWxSYXRpbzogYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLFxuICAgICAgICAgICAgc2hvd0NvbGxpc2lvbkJveGVzOiB0aGlzLm1hcC5zaG93Q29sbGlzaW9uQm94ZXMsXG4gICAgICAgICAgICBwcm9tb3RlSWQ6IHRoaXMucHJvbW90ZUlkXG4gICAgICAgIH07XG5cbiAgICAgICAgdGlsZS5yZXF1ZXN0ID0gdGhpcy5hY3Rvci5zZW5kKG1lc3NhZ2UsIHBhcmFtcywgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICAgICAgZGVsZXRlIHRpbGUucmVxdWVzdDtcbiAgICAgICAgICAgIHRpbGUudW5sb2FkVmVjdG9yRGF0YSgpO1xuXG4gICAgICAgICAgICBpZiAodGlsZS5hYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRpbGUubG9hZFZlY3RvckRhdGEoZGF0YSwgdGhpcy5tYXAucGFpbnRlciwgbWVzc2FnZSA9PT0gJ3JlbG9hZFRpbGUnKTtcblxuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhYm9ydFRpbGUodGlsZTogVGlsZSkge1xuICAgICAgICBpZiAodGlsZS5yZXF1ZXN0KSB7XG4gICAgICAgICAgICB0aWxlLnJlcXVlc3QuY2FuY2VsKCk7XG4gICAgICAgICAgICBkZWxldGUgdGlsZS5yZXF1ZXN0O1xuICAgICAgICB9XG4gICAgICAgIHRpbGUuYWJvcnRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgdW5sb2FkVGlsZSh0aWxlOiBUaWxlKSB7XG4gICAgICAgIHRpbGUudW5sb2FkVmVjdG9yRGF0YSgpO1xuICAgICAgICB0aGlzLmFjdG9yLnNlbmQoJ3JlbW92ZVRpbGUnLCB7dWlkOiB0aWxlLnVpZCwgdHlwZTogdGhpcy50eXBlLCBzb3VyY2U6IHRoaXMuaWR9KTtcbiAgICB9XG5cbiAgICBvblJlbW92ZSgpIHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuYWN0b3Iuc2VuZCgncmVtb3ZlU291cmNlJywge3R5cGU6IHRoaXMudHlwZSwgc291cmNlOiB0aGlzLmlkfSk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICByZXR1cm4gZXh0ZW5kKHt9LCB0aGlzLl9vcHRpb25zLCB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICBkYXRhOiB0aGlzLl9kYXRhXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGhhc1RyYW5zaXRpb24oKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEdlb0pTT05Tb3VyY2U7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHtjcmVhdGVMYXlvdXR9IGZyb20gJy4uL3V0aWwvc3RydWN0X2FycmF5JztcblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlTGF5b3V0KFtcbiAgICB7bmFtZTogJ2FfcG9zJywgdHlwZTogJ0ludDE2JywgY29tcG9uZW50czogMn0sXG4gICAge25hbWU6ICdhX3RleHR1cmVfcG9zJywgdHlwZTogJ0ludDE2JywgY29tcG9uZW50czogMn1cbl0pO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtDYW5vbmljYWxUaWxlSUR9IGZyb20gJy4vdGlsZV9pZCc7XG5pbXBvcnQge0V2ZW50LCBFcnJvckV2ZW50LCBFdmVudGVkfSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IHtnZXRJbWFnZSwgUmVzb3VyY2VUeXBlfSBmcm9tICcuLi91dGlsL2FqYXgnO1xuaW1wb3J0IEVYVEVOVCBmcm9tICcuLi9kYXRhL2V4dGVudCc7XG5pbXBvcnQge1Jhc3RlckJvdW5kc0FycmF5fSBmcm9tICcuLi9kYXRhL2FycmF5X3R5cGVzJztcbmltcG9ydCByYXN0ZXJCb3VuZHNBdHRyaWJ1dGVzIGZyb20gJy4uL2RhdGEvcmFzdGVyX2JvdW5kc19hdHRyaWJ1dGVzJztcbmltcG9ydCBTZWdtZW50VmVjdG9yIGZyb20gJy4uL2RhdGEvc2VnbWVudCc7XG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9yZW5kZXIvdGV4dHVyZSc7XG5pbXBvcnQgTWVyY2F0b3JDb29yZGluYXRlIGZyb20gJy4uL2dlby9tZXJjYXRvcl9jb29yZGluYXRlJztcblxuaW1wb3J0IHR5cGUge1NvdXJjZX0gZnJvbSAnLi9zb3VyY2UnO1xuaW1wb3J0IHR5cGUge0NhbnZhc1NvdXJjZVNwZWNpZmljYXRpb259IGZyb20gJy4vY2FudmFzX3NvdXJjZSc7XG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vdWkvbWFwJztcbmltcG9ydCB0eXBlIERpc3BhdGNoZXIgZnJvbSAnLi4vdXRpbC9kaXNwYXRjaGVyJztcbmltcG9ydCB0eXBlIFRpbGUgZnJvbSAnLi90aWxlJztcbmltcG9ydCB0eXBlIHtDYWxsYmFja30gZnJvbSAnLi4vdHlwZXMvY2FsbGJhY2snO1xuaW1wb3J0IHR5cGUgVmVydGV4QnVmZmVyIGZyb20gJy4uL2dsL3ZlcnRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUge1xuICAgIEltYWdlU291cmNlU3BlY2lmaWNhdGlvbixcbiAgICBWaWRlb1NvdXJjZVNwZWNpZmljYXRpb25cbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbnR5cGUgQ29vcmRpbmF0ZXMgPSBbW251bWJlciwgbnVtYmVyXSwgW251bWJlciwgbnVtYmVyXSwgW251bWJlciwgbnVtYmVyXSwgW251bWJlciwgbnVtYmVyXV07XG5cbi8qKlxuICogQSBkYXRhIHNvdXJjZSBjb250YWluaW5nIGFuIGltYWdlLlxuICogKFNlZSB0aGUgW1N0eWxlIFNwZWNpZmljYXRpb25dKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLXN0eWxlLXNwZWMvI3NvdXJjZXMtaW1hZ2UpIGZvciBkZXRhaWxlZCBkb2N1bWVudGF0aW9uIG9mIG9wdGlvbnMuKVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBhZGQgdG8gbWFwXG4gKiBtYXAuYWRkU291cmNlKCdzb21lIGlkJywge1xuICogICAgdHlwZTogJ2ltYWdlJyxcbiAqICAgIHVybDogJ2h0dHBzOi8vd3d3Lm1hcGJveC5jb20vaW1hZ2VzL2Zvby5wbmcnLFxuICogICAgY29vcmRpbmF0ZXM6IFtcbiAqICAgICAgICBbLTc2LjU0LCAzOS4xOF0sXG4gKiAgICAgICAgWy03Ni41MiwgMzkuMThdLFxuICogICAgICAgIFstNzYuNTIsIDM5LjE3XSxcbiAqICAgICAgICBbLTc2LjU0LCAzOS4xN11cbiAqICAgIF1cbiAqIH0pO1xuICpcbiAqIC8vIHVwZGF0ZSBjb29yZGluYXRlc1xuICogdmFyIG15U291cmNlID0gbWFwLmdldFNvdXJjZSgnc29tZSBpZCcpO1xuICogbXlTb3VyY2Uuc2V0Q29vcmRpbmF0ZXMoW1xuICogICAgIFstNzYuNTQzMzU3MzcyMjgzOTQsIDM5LjE4NTc5OTA3MjI5NzQ4XSxcbiAqICAgICBbLTc2LjUyODAzNjU5NDM5MDg3LCAzOS4xODM4MzY0ODQ3NTg3XSxcbiAqICAgICBbLTc2LjUyOTUzODYzMTQzOTIsIDM5LjE3NjgzMzkyNTA3NjA2XSxcbiAqICAgICBbLTc2LjU0NTIwMjczMjA4NjE4LCAzOS4xNzg3NjM0NDEwNjY0Ml1cbiAqIF0pO1xuICpcbiAqIC8vIHVwZGF0ZSB1cmwgYW5kIGNvb3JkaW5hdGVzIHNpbXVsdGFuZW91c2x5XG4gKiBteVNvdXJjZS51cGRhdGVJbWFnZSh7XG4gKiAgICB1cmw6ICdodHRwczovL3d3dy5tYXBib3guY29tL2ltYWdlcy9iYXIucG5nJyxcbiAqICAgIGNvb3JkaW5hdGVzOiBbXG4gKiAgICAgICAgWy03Ni41NDMzNTczNzIyODM5NCwgMzkuMTg1Nzk5MDcyMjk3NDhdLFxuICogICAgICAgIFstNzYuNTI4MDM2NTk0MzkwODcsIDM5LjE4MzgzNjQ4NDc1ODddLFxuICogICAgICAgIFstNzYuNTI5NTM4NjMxNDM5MiwgMzkuMTc2ODMzOTI1MDc2MDZdLFxuICogICAgICAgIFstNzYuNTQ1MjAyNzMyMDg2MTgsIDM5LjE3ODc2MzQ0MTA2NjQyXVxuICogICAgXVxuICogfSlcbiAqXG4gKiBtYXAucmVtb3ZlU291cmNlKCdzb21lIGlkJyk7ICAvLyByZW1vdmVcbiAqIEBzZWUgW0FkZCBhbiBpbWFnZV0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9pbWFnZS1vbi1hLW1hcC8pXG4gKi9cbmNsYXNzIEltYWdlU291cmNlIGV4dGVuZHMgRXZlbnRlZCBpbXBsZW1lbnRzIFNvdXJjZSB7XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbWluem9vbTogbnVtYmVyO1xuICAgIG1heHpvb206IG51bWJlcjtcbiAgICB0aWxlU2l6ZTogbnVtYmVyO1xuICAgIHVybDogc3RyaW5nO1xuXG4gICAgY29vcmRpbmF0ZXM6IENvb3JkaW5hdGVzO1xuICAgIHRpbGVzOiB7W186IHN0cmluZ106IFRpbGV9O1xuICAgIG9wdGlvbnM6IGFueTtcbiAgICBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyO1xuICAgIG1hcDogTWFwO1xuICAgIHRleHR1cmU6IFRleHR1cmUgfCBudWxsO1xuICAgIGltYWdlOiBIVE1MSW1hZ2VFbGVtZW50IHwgSW1hZ2VCaXRtYXA7XG4gICAgdGlsZUlEOiBDYW5vbmljYWxUaWxlSUQ7XG4gICAgX2JvdW5kc0FycmF5OiBSYXN0ZXJCb3VuZHNBcnJheTtcbiAgICBib3VuZHNCdWZmZXI6IFZlcnRleEJ1ZmZlcjtcbiAgICBib3VuZHNTZWdtZW50czogU2VnbWVudFZlY3RvcjtcbiAgICBfbG9hZGVkOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihpZDogc3RyaW5nLCBvcHRpb25zOiBJbWFnZVNvdXJjZVNwZWNpZmljYXRpb24gfCBWaWRlb1NvdXJjZVNwZWNpZmljYXRpb24gfCBDYW52YXNTb3VyY2VTcGVjaWZpY2F0aW9uLCBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyLCBldmVudGVkUGFyZW50OiBFdmVudGVkKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICAgICAgdGhpcy5kaXNwYXRjaGVyID0gZGlzcGF0Y2hlcjtcbiAgICAgICAgdGhpcy5jb29yZGluYXRlcyA9IG9wdGlvbnMuY29vcmRpbmF0ZXM7XG5cbiAgICAgICAgdGhpcy50eXBlID0gJ2ltYWdlJztcbiAgICAgICAgdGhpcy5taW56b29tID0gMDtcbiAgICAgICAgdGhpcy5tYXh6b29tID0gMjI7XG4gICAgICAgIHRoaXMudGlsZVNpemUgPSA1MTI7XG4gICAgICAgIHRoaXMudGlsZXMgPSB7fTtcbiAgICAgICAgdGhpcy5fbG9hZGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5zZXRFdmVudGVkUGFyZW50KGV2ZW50ZWRQYXJlbnQpO1xuXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfVxuXG4gICAgbG9hZChuZXdDb29yZGluYXRlcz86IENvb3JkaW5hdGVzLCBzdWNjZXNzQ2FsbGJhY2s/OiAoKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMuX2xvYWRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhbG9hZGluZycsIHtkYXRhVHlwZTogJ3NvdXJjZSd9KSk7XG5cbiAgICAgICAgdGhpcy51cmwgPSB0aGlzLm9wdGlvbnMudXJsO1xuXG4gICAgICAgIGdldEltYWdlKHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KHRoaXMudXJsLCBSZXNvdXJjZVR5cGUuSW1hZ2UpLCAoZXJyLCBpbWFnZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQoZXJyKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGltYWdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbWFnZSA9IGltYWdlO1xuICAgICAgICAgICAgICAgIGlmIChuZXdDb29yZGluYXRlcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvb3JkaW5hdGVzID0gbmV3Q29vcmRpbmF0ZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbmlzaExvYWRpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbG9hZGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIGltYWdlIFVSTCBhbmQsIG9wdGlvbmFsbHksIHRoZSBjb29yZGluYXRlcy4gVG8gYXZvaWQgaGF2aW5nIHRoZSBpbWFnZSBmbGFzaCBhZnRlciBjaGFuZ2luZyxcbiAgICAgKiBzZXQgdGhlIGByYXN0ZXItZmFkZS1kdXJhdGlvbmAgcGFpbnQgcHJvcGVydHkgb24gdGhlIHJhc3RlciBsYXllciB0byAwLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgT3B0aW9ucyBvYmplY3QuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnVybF0gUmVxdWlyZWQgaW1hZ2UgVVJMLlxuICAgICAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8bnVtYmVyPj59IFtvcHRpb25zLmNvb3JkaW5hdGVzXSBGb3VyIGdlb2dyYXBoaWNhbCBjb29yZGluYXRlcyxcbiAgICAgKiAgIHJlcHJlc2VudGVkIGFzIGFycmF5cyBvZiBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIG51bWJlcnMsIHdoaWNoIGRlZmluZSB0aGUgY29ybmVycyBvZiB0aGUgaW1hZ2UuXG4gICAgICogICBUaGUgY29vcmRpbmF0ZXMgc3RhcnQgYXQgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgaW1hZ2UgYW5kIHByb2NlZWQgaW4gY2xvY2t3aXNlIG9yZGVyLlxuICAgICAqICAgVGhleSBkbyBub3QgaGF2ZSB0byByZXByZXNlbnQgYSByZWN0YW5nbGUuXG4gICAgICogQHJldHVybnMge0ltYWdlU291cmNlfSB0aGlzXG4gICAgICovXG4gICAgdXBkYXRlSW1hZ2Uob3B0aW9uczoge3VybDogc3RyaW5nLCBjb29yZGluYXRlcz86IENvb3JkaW5hdGVzfSkge1xuICAgICAgICBpZiAoIXRoaXMuaW1hZ2UgfHwgIW9wdGlvbnMudXJsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9wdGlvbnMudXJsID0gb3B0aW9ucy51cmw7XG4gICAgICAgIHRoaXMubG9hZChvcHRpb25zLmNvb3JkaW5hdGVzLCAoKSA9PiB7IHRoaXMudGV4dHVyZSA9IG51bGw7IH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBfZmluaXNoTG9hZGluZygpIHtcbiAgICAgICAgaWYgKHRoaXMubWFwKSB7XG4gICAgICAgICAgICB0aGlzLnNldENvb3JkaW5hdGVzKHRoaXMuY29vcmRpbmF0ZXMpO1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZGF0YScsIHtkYXRhVHlwZTogJ3NvdXJjZScsIHNvdXJjZURhdGFUeXBlOiAnbWV0YWRhdGEnfSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25BZGQobWFwOiBNYXApIHtcbiAgICAgICAgdGhpcy5tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMubG9hZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGltYWdlJ3MgY29vcmRpbmF0ZXMgYW5kIHJlLXJlbmRlcnMgdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8bnVtYmVyPj59IGNvb3JkaW5hdGVzIEZvdXIgZ2VvZ3JhcGhpY2FsIGNvb3JkaW5hdGVzLFxuICAgICAqICAgcmVwcmVzZW50ZWQgYXMgYXJyYXlzIG9mIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUgbnVtYmVycywgd2hpY2ggZGVmaW5lIHRoZSBjb3JuZXJzIG9mIHRoZSBpbWFnZS5cbiAgICAgKiAgIFRoZSBjb29yZGluYXRlcyBzdGFydCBhdCB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBpbWFnZSBhbmQgcHJvY2VlZCBpbiBjbG9ja3dpc2Ugb3JkZXIuXG4gICAgICogICBUaGV5IGRvIG5vdCBoYXZlIHRvIHJlcHJlc2VudCBhIHJlY3RhbmdsZS5cbiAgICAgKiBAcmV0dXJucyB7SW1hZ2VTb3VyY2V9IHRoaXNcbiAgICAgKi9cbiAgICBzZXRDb29yZGluYXRlcyhjb29yZGluYXRlczogQ29vcmRpbmF0ZXMpIHtcbiAgICAgICAgdGhpcy5jb29yZGluYXRlcyA9IGNvb3JkaW5hdGVzO1xuXG4gICAgICAgIC8vIENhbGN1bGF0ZSB3aGljaCBtZXJjYXRvciB0aWxlIGlzIHN1aXRhYmxlIGZvciByZW5kZXJpbmcgdGhlIHZpZGVvIGluXG4gICAgICAgIC8vIGFuZCBjcmVhdGUgYSBidWZmZXIgd2l0aCB0aGUgY29ybmVyIGNvb3JkaW5hdGVzLiBUaGVzZSBjb29yZGluYXRlc1xuICAgICAgICAvLyBtYXkgYmUgb3V0c2lkZSB0aGUgdGlsZSwgYmVjYXVzZSByYXN0ZXIgdGlsZXMgYXJlbid0IGNsaXBwZWQgd2hlbiByZW5kZXJpbmcuXG5cbiAgICAgICAgLy8gdHJhbnNmb3JtIHRoZSBnZW8gY29vcmRpbmF0ZXMgaW50byAoem9vbSAwKSB0aWxlIHNwYWNlIGNvb3JkaW5hdGVzXG4gICAgICAgIGNvbnN0IGNvcm5lckNvb3JkcyA9IGNvb3JkaW5hdGVzLm1hcChNZXJjYXRvckNvb3JkaW5hdGUuZnJvbUxuZ0xhdCk7XG5cbiAgICAgICAgLy8gQ29tcHV0ZSB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHRpbGUgd2UnbGwgdXNlIHRvIGhvbGQgdGhpcyBpbWFnZSdzXG4gICAgICAgIC8vIHJlbmRlciBkYXRhXG4gICAgICAgIHRoaXMudGlsZUlEID0gZ2V0Q29vcmRpbmF0ZXNDZW50ZXJUaWxlSUQoY29ybmVyQ29vcmRzKTtcblxuICAgICAgICAvLyBDb25zdHJhaW4gbWluL21heCB6b29tIHRvIG91ciB0aWxlJ3Mgem9vbSBsZXZlbCBpbiBvcmRlciB0byBmb3JjZVxuICAgICAgICAvLyBTb3VyY2VDYWNoZSB0byByZXF1ZXN0IHRoaXMgdGlsZSAobm8gbWF0dGVyIHdoYXQgdGhlIG1hcCdzIHpvb21cbiAgICAgICAgLy8gbGV2ZWwpXG4gICAgICAgIHRoaXMubWluem9vbSA9IHRoaXMubWF4em9vbSA9IHRoaXMudGlsZUlELno7XG5cbiAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSBjb3JuZXIgY29vcmRpbmF0ZXMgaW50byB0aGUgY29vcmRpbmF0ZSBzcGFjZSBvZiBvdXJcbiAgICAgICAgLy8gdGlsZS5cbiAgICAgICAgY29uc3QgdGlsZUNvb3JkcyA9IGNvcm5lckNvb3Jkcy5tYXAoKGNvb3JkKSA9PiB0aGlzLnRpbGVJRC5nZXRUaWxlUG9pbnQoY29vcmQpLl9yb3VuZCgpKTtcblxuICAgICAgICB0aGlzLl9ib3VuZHNBcnJheSA9IG5ldyBSYXN0ZXJCb3VuZHNBcnJheSgpO1xuICAgICAgICB0aGlzLl9ib3VuZHNBcnJheS5lbXBsYWNlQmFjayh0aWxlQ29vcmRzWzBdLngsIHRpbGVDb29yZHNbMF0ueSwgMCwgMCk7XG4gICAgICAgIHRoaXMuX2JvdW5kc0FycmF5LmVtcGxhY2VCYWNrKHRpbGVDb29yZHNbMV0ueCwgdGlsZUNvb3Jkc1sxXS55LCBFWFRFTlQsIDApO1xuICAgICAgICB0aGlzLl9ib3VuZHNBcnJheS5lbXBsYWNlQmFjayh0aWxlQ29vcmRzWzNdLngsIHRpbGVDb29yZHNbM10ueSwgMCwgRVhURU5UKTtcbiAgICAgICAgdGhpcy5fYm91bmRzQXJyYXkuZW1wbGFjZUJhY2sodGlsZUNvb3Jkc1syXS54LCB0aWxlQ29vcmRzWzJdLnksIEVYVEVOVCwgRVhURU5UKTtcblxuICAgICAgICBpZiAodGhpcy5ib3VuZHNCdWZmZXIpIHtcbiAgICAgICAgICAgIHRoaXMuYm91bmRzQnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmJvdW5kc0J1ZmZlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGEnLCB7ZGF0YVR5cGU6J3NvdXJjZScsIHNvdXJjZURhdGFUeXBlOiAnY29udGVudCd9KSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHByZXBhcmUoKSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLnRpbGVzKS5sZW5ndGggPT09IDAgfHwgIXRoaXMuaW1hZ2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLm1hcC5wYWludGVyLmNvbnRleHQ7XG4gICAgICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcblxuICAgICAgICBpZiAoIXRoaXMuYm91bmRzQnVmZmVyKSB7XG4gICAgICAgICAgICB0aGlzLmJvdW5kc0J1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuX2JvdW5kc0FycmF5LCByYXN0ZXJCb3VuZHNBdHRyaWJ1dGVzLm1lbWJlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmJvdW5kc1NlZ21lbnRzKSB7XG4gICAgICAgICAgICB0aGlzLmJvdW5kc1NlZ21lbnRzID0gU2VnbWVudFZlY3Rvci5zaW1wbGVTZWdtZW50KDAsIDAsIDQsIDIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnRleHR1cmUpIHtcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZSA9IG5ldyBUZXh0dXJlKGNvbnRleHQsIHRoaXMuaW1hZ2UsIGdsLlJHQkEpO1xuICAgICAgICAgICAgdGhpcy50ZXh0dXJlLmJpbmQoZ2wuTElORUFSLCBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgdyBpbiB0aGlzLnRpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCB0aWxlID0gdGhpcy50aWxlc1t3XTtcbiAgICAgICAgICAgIGlmICh0aWxlLnN0YXRlICE9PSAnbG9hZGVkJykge1xuICAgICAgICAgICAgICAgIHRpbGUuc3RhdGUgPSAnbG9hZGVkJztcbiAgICAgICAgICAgICAgICB0aWxlLnRleHR1cmUgPSB0aGlzLnRleHR1cmU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsb2FkVGlsZSh0aWxlOiBUaWxlLCBjYWxsYmFjazogQ2FsbGJhY2s8dm9pZD4pIHtcbiAgICAgICAgLy8gV2UgaGF2ZSBhIHNpbmdsZSB0aWxlIC0tIHdob29zZSBjb29yZGluYXRlcyBhcmUgdGhpcy50aWxlSUQgLS0gdGhhdFxuICAgICAgICAvLyBjb3ZlcnMgdGhlIGltYWdlIHdlIHdhbnQgdG8gcmVuZGVyLiAgSWYgdGhhdCdzIHRoZSBvbmUgYmVpbmdcbiAgICAgICAgLy8gcmVxdWVzdGVkLCBzZXQgaXQgdXAgd2l0aCB0aGUgaW1hZ2U7IG90aGVyd2lzZSwgbWFyayB0aGUgdGlsZSBhc1xuICAgICAgICAvLyBgZXJyb3JlZGAgdG8gaW5kaWNhdGUgdGhhdCB3ZSBoYXZlIG5vIGRhdGEgZm9yIGl0LlxuICAgICAgICAvLyBJZiB0aGUgd29ybGQgd3JhcHMsIHdlIG1heSBoYXZlIG11bHRpcGxlIFwid3JhcHBlZFwiIGNvcGllcyBvZiB0aGVcbiAgICAgICAgLy8gc2luZ2xlIHRpbGUuXG4gICAgICAgIGlmICh0aGlzLnRpbGVJRCAmJiB0aGlzLnRpbGVJRC5lcXVhbHModGlsZS50aWxlSUQuY2Fub25pY2FsKSkge1xuICAgICAgICAgICAgdGhpcy50aWxlc1tTdHJpbmcodGlsZS50aWxlSUQud3JhcCldID0gdGlsZTtcbiAgICAgICAgICAgIHRpbGUuYnVja2V0cyA9IHt9O1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aWxlLnN0YXRlID0gJ2Vycm9yZWQnO1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKTogT2JqZWN0IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdpbWFnZScsXG4gICAgICAgICAgICB1cmw6IHRoaXMub3B0aW9ucy51cmwsXG4gICAgICAgICAgICBjb29yZGluYXRlczogdGhpcy5jb29yZGluYXRlc1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGhhc1RyYW5zaXRpb24oKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbi8qKlxuICogR2l2ZW4gYSBsaXN0IG9mIGNvb3JkaW5hdGVzLCBnZXQgdGhlaXIgY2VudGVyIGFzIGEgY29vcmRpbmF0ZS5cbiAqXG4gKiBAcmV0dXJucyBjZW50ZXJwb2ludFxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvb3JkaW5hdGVzQ2VudGVyVGlsZUlEKGNvb3JkczogQXJyYXk8TWVyY2F0b3JDb29yZGluYXRlPikge1xuICAgIGxldCBtaW5YID0gSW5maW5pdHk7XG4gICAgbGV0IG1pblkgPSBJbmZpbml0eTtcbiAgICBsZXQgbWF4WCA9IC1JbmZpbml0eTtcbiAgICBsZXQgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgIGZvciAoY29uc3QgY29vcmQgb2YgY29vcmRzKSB7XG4gICAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCBjb29yZC54KTtcbiAgICAgICAgbWluWSA9IE1hdGgubWluKG1pblksIGNvb3JkLnkpO1xuICAgICAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgY29vcmQueCk7XG4gICAgICAgIG1heFkgPSBNYXRoLm1heChtYXhZLCBjb29yZC55KTtcbiAgICB9XG5cbiAgICBjb25zdCBkeCA9IG1heFggLSBtaW5YO1xuICAgIGNvbnN0IGR5ID0gbWF4WSAtIG1pblk7XG4gICAgY29uc3QgZE1heCA9IE1hdGgubWF4KGR4LCBkeSk7XG4gICAgY29uc3Qgem9vbSA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3IoLU1hdGgubG9nKGRNYXgpIC8gTWF0aC5MTjIpKTtcbiAgICBjb25zdCB0aWxlc0F0Wm9vbSA9IE1hdGgucG93KDIsIHpvb20pO1xuXG4gICAgcmV0dXJuIG5ldyBDYW5vbmljYWxUaWxlSUQoXG4gICAgICAgICAgICB6b29tLFxuICAgICAgICAgICAgTWF0aC5mbG9vcigobWluWCArIG1heFgpIC8gMiAqIHRpbGVzQXRab29tKSxcbiAgICAgICAgICAgIE1hdGguZmxvb3IoKG1pblkgKyBtYXhZKSAvIDIgKiB0aWxlc0F0Wm9vbSkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBJbWFnZVNvdXJjZTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7Z2V0VmlkZW8sIFJlc291cmNlVHlwZX0gZnJvbSAnLi4vdXRpbC9hamF4JztcblxuaW1wb3J0IEltYWdlU291cmNlIGZyb20gJy4vaW1hZ2Vfc291cmNlJztcbmltcG9ydCByYXN0ZXJCb3VuZHNBdHRyaWJ1dGVzIGZyb20gJy4uL2RhdGEvcmFzdGVyX2JvdW5kc19hdHRyaWJ1dGVzJztcbmltcG9ydCBTZWdtZW50VmVjdG9yIGZyb20gJy4uL2RhdGEvc2VnbWVudCc7XG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9yZW5kZXIvdGV4dHVyZSc7XG5pbXBvcnQge0Vycm9yRXZlbnR9IGZyb20gJy4uL3V0aWwvZXZlbnRlZCc7XG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4uL3N0eWxlLXNwZWMvZXJyb3IvdmFsaWRhdGlvbl9lcnJvcic7XG5cbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi91aS9tYXAnO1xuaW1wb3J0IHR5cGUgRGlzcGF0Y2hlciBmcm9tICcuLi91dGlsL2Rpc3BhdGNoZXInO1xuaW1wb3J0IHR5cGUge0V2ZW50ZWR9IGZyb20gJy4uL3V0aWwvZXZlbnRlZCc7XG5pbXBvcnQgdHlwZSB7VmlkZW9Tb3VyY2VTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuLyoqXG4gKiBBIGRhdGEgc291cmNlIGNvbnRhaW5pbmcgdmlkZW8uXG4gKiAoU2VlIHRoZSBbU3R5bGUgU3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtc3R5bGUtc3BlYy8jc291cmNlcy12aWRlbykgZm9yIGRldGFpbGVkIGRvY3VtZW50YXRpb24gb2Ygb3B0aW9ucy4pXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIGFkZCB0byBtYXBcbiAqIG1hcC5hZGRTb3VyY2UoJ3NvbWUgaWQnLCB7XG4gKiAgICB0eXBlOiAndmlkZW8nLFxuICogICAgdXJsOiBbXG4gKiAgICAgICAgJ2h0dHBzOi8vd3d3Lm1hcGJveC5jb20vYmxvZy9hc3NldHMvYmFsdGltb3JlLXNtb2tlLm1wNCcsXG4gKiAgICAgICAgJ2h0dHBzOi8vd3d3Lm1hcGJveC5jb20vYmxvZy9hc3NldHMvYmFsdGltb3JlLXNtb2tlLndlYm0nXG4gKiAgICBdLFxuICogICAgY29vcmRpbmF0ZXM6IFtcbiAqICAgICAgICBbLTc2LjU0LCAzOS4xOF0sXG4gKiAgICAgICAgWy03Ni41MiwgMzkuMThdLFxuICogICAgICAgIFstNzYuNTIsIDM5LjE3XSxcbiAqICAgICAgICBbLTc2LjU0LCAzOS4xN11cbiAqICAgIF1cbiAqIH0pO1xuICpcbiAqIC8vIHVwZGF0ZVxuICogdmFyIG15U291cmNlID0gbWFwLmdldFNvdXJjZSgnc29tZSBpZCcpO1xuICogbXlTb3VyY2Uuc2V0Q29vcmRpbmF0ZXMoW1xuICogICAgIFstNzYuNTQzMzU3MzcyMjgzOTQsIDM5LjE4NTc5OTA3MjI5NzQ4XSxcbiAqICAgICBbLTc2LjUyODAzNjU5NDM5MDg3LCAzOS4xODM4MzY0ODQ3NTg3XSxcbiAqICAgICBbLTc2LjUyOTUzODYzMTQzOTIsIDM5LjE3NjgzMzkyNTA3NjA2XSxcbiAqICAgICBbLTc2LjU0NTIwMjczMjA4NjE4LCAzOS4xNzg3NjM0NDEwNjY0Ml1cbiAqIF0pO1xuICpcbiAqIG1hcC5yZW1vdmVTb3VyY2UoJ3NvbWUgaWQnKTsgIC8vIHJlbW92ZVxuICogQHNlZSBbQWRkIGEgdmlkZW9dKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvdmlkZW8tb24tYS1tYXAvKVxuICovXG5jbGFzcyBWaWRlb1NvdXJjZSBleHRlbmRzIEltYWdlU291cmNlIHtcbiAgICBvcHRpb25zOiBWaWRlb1NvdXJjZVNwZWNpZmljYXRpb247XG4gICAgdXJsczogQXJyYXk8c3RyaW5nPjtcbiAgICB2aWRlbzogSFRNTFZpZGVvRWxlbWVudDtcbiAgICByb3VuZFpvb206IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIG9wdGlvbnM6IFZpZGVvU291cmNlU3BlY2lmaWNhdGlvbiwgZGlzcGF0Y2hlcjogRGlzcGF0Y2hlciwgZXZlbnRlZFBhcmVudDogRXZlbnRlZCkge1xuICAgICAgICBzdXBlcihpZCwgb3B0aW9ucywgZGlzcGF0Y2hlciwgZXZlbnRlZFBhcmVudCk7XG4gICAgICAgIHRoaXMucm91bmRab29tID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50eXBlID0gJ3ZpZGVvJztcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB9XG5cbiAgICBsb2FkKCkge1xuICAgICAgICB0aGlzLl9sb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuICAgICAgICB0aGlzLnVybHMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCB1cmwgb2Ygb3B0aW9ucy51cmxzKSB7XG4gICAgICAgICAgICB0aGlzLnVybHMucHVzaCh0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdCh1cmwsIFJlc291cmNlVHlwZS5Tb3VyY2UpLnVybCk7XG4gICAgICAgIH1cblxuICAgICAgICBnZXRWaWRlbyh0aGlzLnVybHMsIChlcnIsIHZpZGVvKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChlcnIpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmlkZW8pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZpZGVvID0gdmlkZW87XG4gICAgICAgICAgICAgICAgdGhpcy52aWRlby5sb29wID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHJlcGFpbnRpbmcgd2hlbiB2aWRlbyBzdGFydHMgcGxheWluZy4gaGFzVHJhbnNpdGlvbigpIHdpbGwgdGhlbiByZXR1cm5cbiAgICAgICAgICAgICAgICAvLyB0cnVlIHRvIHRyaWdnZXIgYWRkaXRpb25hbCBmcmFtZXMgYXMgbG9uZyBhcyB0aGUgdmlkZW9zIGNvbnRpbnVlcyBwbGF5aW5nLlxuICAgICAgICAgICAgICAgIHRoaXMudmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGxheWluZycsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXAudHJpZ2dlclJlcGFpbnQoKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hcCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZGVvLnBsYXkoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9maW5pc2hMb2FkaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhdXNlcyB0aGUgdmlkZW8uXG4gICAgICovXG4gICAgcGF1c2UoKSB7XG4gICAgICAgIGlmICh0aGlzLnZpZGVvKSB7XG4gICAgICAgICAgICB0aGlzLnZpZGVvLnBhdXNlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQbGF5cyB0aGUgdmlkZW8uXG4gICAgICovXG4gICAgcGxheSgpIHtcbiAgICAgICAgaWYgKHRoaXMudmlkZW8pIHtcbiAgICAgICAgICAgIHRoaXMudmlkZW8ucGxheSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBwbGF5YmFjayB0byBhIHRpbWVzdGFtcCwgaW4gc2Vjb25kcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHNlZWsoc2Vjb25kczogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLnZpZGVvKSB7XG4gICAgICAgICAgICBjb25zdCBzZWVrYWJsZVJhbmdlID0gdGhpcy52aWRlby5zZWVrYWJsZTtcbiAgICAgICAgICAgIGlmIChzZWNvbmRzIDwgc2Vla2FibGVSYW5nZS5zdGFydCgwKSB8fCBzZWNvbmRzID4gc2Vla2FibGVSYW5nZS5lbmQoMCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IFZhbGlkYXRpb25FcnJvcihgc291cmNlcy4ke3RoaXMuaWR9YCwgbnVsbCwgYFBsYXliYWNrIGZvciB0aGlzIHZpZGVvIGNhbiBiZSBzZXQgb25seSBiZXR3ZWVuIHRoZSAke3NlZWthYmxlUmFuZ2Uuc3RhcnQoMCl9IGFuZCAke3NlZWthYmxlUmFuZ2UuZW5kKDApfS1zZWNvbmQgbWFyay5gKSkpO1xuICAgICAgICAgICAgfSBlbHNlIHRoaXMudmlkZW8uY3VycmVudFRpbWUgPSBzZWNvbmRzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgSFRNTCBgdmlkZW9gIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7SFRNTFZpZGVvRWxlbWVudH0gVGhlIEhUTUwgYHZpZGVvYCBlbGVtZW50LlxuICAgICAqL1xuICAgIGdldFZpZGVvKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52aWRlbztcbiAgICB9XG5cbiAgICBvbkFkZChtYXA6IE1hcCkge1xuICAgICAgICBpZiAodGhpcy5tYXApIHJldHVybjtcbiAgICAgICAgdGhpcy5tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMubG9hZCgpO1xuICAgICAgICBpZiAodGhpcy52aWRlbykge1xuICAgICAgICAgICAgdGhpcy52aWRlby5wbGF5KCk7XG4gICAgICAgICAgICB0aGlzLnNldENvb3JkaW5hdGVzKHRoaXMuY29vcmRpbmF0ZXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdmlkZW8ncyBjb29yZGluYXRlcyBhbmQgcmUtcmVuZGVycyB0aGUgbWFwLlxuICAgICAqXG4gICAgICogQG1ldGhvZCBzZXRDb29yZGluYXRlc1xuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBtZW1iZXJvZiBWaWRlb1NvdXJjZVxuICAgICAqIEByZXR1cm5zIHtWaWRlb1NvdXJjZX0gdGhpc1xuICAgICAqL1xuICAgIC8vIHNldENvb3JkaW5hdGVzIGluaGVyaXRlZCBmcm9tIEltYWdlU291cmNlXG5cbiAgICBwcmVwYXJlKCkge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy50aWxlcykubGVuZ3RoID09PSAwIHx8IHRoaXMudmlkZW8ucmVhZHlTdGF0ZSA8IDIpIHtcbiAgICAgICAgICAgIHJldHVybjsgLy8gbm90IGVub3VnaCBkYXRhIGZvciBjdXJyZW50IHBvc2l0aW9uXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5tYXAucGFpbnRlci5jb250ZXh0O1xuICAgICAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG5cbiAgICAgICAgaWYgKCF0aGlzLmJvdW5kc0J1ZmZlcikge1xuICAgICAgICAgICAgdGhpcy5ib3VuZHNCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLl9ib3VuZHNBcnJheSwgcmFzdGVyQm91bmRzQXR0cmlidXRlcy5tZW1iZXJzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5ib3VuZHNTZWdtZW50cykge1xuICAgICAgICAgICAgdGhpcy5ib3VuZHNTZWdtZW50cyA9IFNlZ21lbnRWZWN0b3Iuc2ltcGxlU2VnbWVudCgwLCAwLCA0LCAyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy50ZXh0dXJlKSB7XG4gICAgICAgICAgICB0aGlzLnRleHR1cmUgPSBuZXcgVGV4dHVyZShjb250ZXh0LCB0aGlzLnZpZGVvLCBnbC5SR0JBKTtcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZS5iaW5kKGdsLkxJTkVBUiwgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMudmlkZW8ucGF1c2VkKSB7XG4gICAgICAgICAgICB0aGlzLnRleHR1cmUuYmluZChnbC5MSU5FQVIsIGdsLkNMQU1QX1RPX0VER0UpO1xuICAgICAgICAgICAgZ2wudGV4U3ViSW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCAwLCAwLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB0aGlzLnZpZGVvKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgdyBpbiB0aGlzLnRpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCB0aWxlID0gdGhpcy50aWxlc1t3XTtcbiAgICAgICAgICAgIGlmICh0aWxlLnN0YXRlICE9PSAnbG9hZGVkJykge1xuICAgICAgICAgICAgICAgIHRpbGUuc3RhdGUgPSAnbG9hZGVkJztcbiAgICAgICAgICAgICAgICB0aWxlLnRleHR1cmUgPSB0aGlzLnRleHR1cmU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAndmlkZW8nLFxuICAgICAgICAgICAgdXJsczogdGhpcy51cmxzLFxuICAgICAgICAgICAgY29vcmRpbmF0ZXM6IHRoaXMuY29vcmRpbmF0ZXNcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBoYXNUcmFuc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52aWRlbyAmJiAhdGhpcy52aWRlby5wYXVzZWQ7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWaWRlb1NvdXJjZTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBJbWFnZVNvdXJjZSBmcm9tICcuL2ltYWdlX3NvdXJjZSc7XG5cbmltcG9ydCB3aW5kb3cgZnJvbSAnLi4vdXRpbC93aW5kb3cnO1xuaW1wb3J0IHJhc3RlckJvdW5kc0F0dHJpYnV0ZXMgZnJvbSAnLi4vZGF0YS9yYXN0ZXJfYm91bmRzX2F0dHJpYnV0ZXMnO1xuaW1wb3J0IFNlZ21lbnRWZWN0b3IgZnJvbSAnLi4vZGF0YS9zZWdtZW50JztcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4uL3JlbmRlci90ZXh0dXJlJztcbmltcG9ydCB7RXJyb3JFdmVudH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCBWYWxpZGF0aW9uRXJyb3IgZnJvbSAnLi4vc3R5bGUtc3BlYy9lcnJvci92YWxpZGF0aW9uX2Vycm9yJztcblxuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL3VpL21hcCc7XG5pbXBvcnQgdHlwZSBEaXNwYXRjaGVyIGZyb20gJy4uL3V0aWwvZGlzcGF0Y2hlcic7XG5pbXBvcnQgdHlwZSB7RXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcblxuZXhwb3J0IHR5cGUgQ2FudmFzU291cmNlU3BlY2lmaWNhdGlvbiA9IHt8XG4gICAgXCJ0eXBlXCI6IFwiY2FudmFzXCIsXG4gICAgXCJjb29yZGluYXRlc1wiOiBbW251bWJlciwgbnVtYmVyXSwgW251bWJlciwgbnVtYmVyXSwgW251bWJlciwgbnVtYmVyXSwgW251bWJlciwgbnVtYmVyXV0sXG4gICAgXCJhbmltYXRlXCI/OiBib29sZWFuLFxuICAgIFwiY2FudmFzXCI6IHN0cmluZyB8IEhUTUxDYW52YXNFbGVtZW50XG58fTtcblxuLyoqXG4gKiBPcHRpb25zIHRvIGFkZCBhIGNhbnZhcyBzb3VyY2UgdHlwZSB0byB0aGUgbWFwLlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENhbnZhc1NvdXJjZU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlIFNvdXJjZSB0eXBlLiBNdXN0IGJlIGBcImNhbnZhc1wiYC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfEhUTUxDYW52YXNFbGVtZW50fSBjYW52YXMgQ2FudmFzIHNvdXJjZSBmcm9tIHdoaWNoIHRvIHJlYWQgcGl4ZWxzLiBDYW4gYmUgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBJRCBvZiB0aGUgY2FudmFzIGVsZW1lbnQsIG9yIHRoZSBgSFRNTENhbnZhc0VsZW1lbnRgIGl0c2VsZi5cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8QXJyYXk8bnVtYmVyPj59IGNvb3JkaW5hdGVzIEZvdXIgZ2VvZ3JhcGhpY2FsIGNvb3JkaW5hdGVzIGRlbm90aW5nIHdoZXJlIHRvIHBsYWNlIHRoZSBjb3JuZXJzIG9mIHRoZSBjYW52YXMsIHNwZWNpZmllZCBpbiBgW2xvbmdpdHVkZSwgbGF0aXR1ZGVdYCBwYWlycy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2FuaW1hdGU9dHJ1ZV0gV2hldGhlciB0aGUgY2FudmFzIHNvdXJjZSBpcyBhbmltYXRlZC4gSWYgdGhlIGNhbnZhcyBpcyBzdGF0aWMgKGkuZS4gcGl4ZWxzIGRvIG5vdCBuZWVkIHRvIGJlIHJlLXJlYWQgb24gZXZlcnkgZnJhbWUpLCBgYW5pbWF0ZWAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuXG4gKi9cblxuLyoqXG4gKiBBIGRhdGEgc291cmNlIGNvbnRhaW5pbmcgdGhlIGNvbnRlbnRzIG9mIGFuIEhUTUwgY2FudmFzLiBTZWUge0BsaW5rIENhbnZhc1NvdXJjZU9wdGlvbnN9IGZvciBkZXRhaWxlZCBkb2N1bWVudGF0aW9uIG9mIG9wdGlvbnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIGFkZCB0byBtYXBcbiAqIG1hcC5hZGRTb3VyY2UoJ3NvbWUgaWQnLCB7XG4gKiAgICB0eXBlOiAnY2FudmFzJyxcbiAqICAgIGNhbnZhczogJ2lkT2ZNeUhUTUxDYW52YXMnLFxuICogICAgYW5pbWF0ZTogdHJ1ZSxcbiAqICAgIGNvb3JkaW5hdGVzOiBbXG4gKiAgICAgICAgWy03Ni41NCwgMzkuMThdLFxuICogICAgICAgIFstNzYuNTIsIDM5LjE4XSxcbiAqICAgICAgICBbLTc2LjUyLCAzOS4xN10sXG4gKiAgICAgICAgWy03Ni41NCwgMzkuMTddXG4gKiAgICBdXG4gKiB9KTtcbiAqXG4gKiAvLyB1cGRhdGVcbiAqIHZhciBteVNvdXJjZSA9IG1hcC5nZXRTb3VyY2UoJ3NvbWUgaWQnKTtcbiAqIG15U291cmNlLnNldENvb3JkaW5hdGVzKFtcbiAqICAgICBbLTc2LjU0MzM1NzM3MjI4Mzk0LCAzOS4xODU3OTkwNzIyOTc0OF0sXG4gKiAgICAgWy03Ni41MjgwMzY1OTQzOTA4NywgMzkuMTgzODM2NDg0NzU4N10sXG4gKiAgICAgWy03Ni41Mjk1Mzg2MzE0MzkyLCAzOS4xNzY4MzM5MjUwNzYwNl0sXG4gKiAgICAgWy03Ni41NDUyMDI3MzIwODYxOCwgMzkuMTc4NzYzNDQxMDY2NDJdXG4gKiBdKTtcbiAqXG4gKiBtYXAucmVtb3ZlU291cmNlKCdzb21lIGlkJyk7ICAvLyByZW1vdmVcbiAqL1xuY2xhc3MgQ2FudmFzU291cmNlIGV4dGVuZHMgSW1hZ2VTb3VyY2Uge1xuICAgIG9wdGlvbnM6IENhbnZhc1NvdXJjZVNwZWNpZmljYXRpb247XG4gICAgYW5pbWF0ZTogYm9vbGVhbjtcbiAgICBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50O1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgaGVpZ2h0OiBudW1iZXI7XG4gICAgcGxheTogKCkgPT4gdm9pZDtcbiAgICBwYXVzZTogKCkgPT4gdm9pZDtcbiAgICBfcGxheWluZzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoaWQ6IHN0cmluZywgb3B0aW9uczogQ2FudmFzU291cmNlU3BlY2lmaWNhdGlvbiwgZGlzcGF0Y2hlcjogRGlzcGF0Y2hlciwgZXZlbnRlZFBhcmVudDogRXZlbnRlZCkge1xuICAgICAgICBzdXBlcihpZCwgb3B0aW9ucywgZGlzcGF0Y2hlciwgZXZlbnRlZFBhcmVudCk7XG5cbiAgICAgICAgLy8gV2UgYnVpbGQgaW4gc29tZSB2YWxpZGF0aW9uIGhlcmUsIHNpbmNlIGNhbnZhcyBzb3VyY2VzIGFyZW4ndCBpbmNsdWRlZCBpbiB0aGUgc3R5bGUgc3BlYzpcbiAgICAgICAgaWYgKCFvcHRpb25zLmNvb3JkaW5hdGVzKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IFZhbGlkYXRpb25FcnJvcihgc291cmNlcy4ke2lkfWAsIG51bGwsICdtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5IFwiY29vcmRpbmF0ZXNcIicpKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkob3B0aW9ucy5jb29yZGluYXRlcykgfHwgb3B0aW9ucy5jb29yZGluYXRlcy5sZW5ndGggIT09IDQgfHxcbiAgICAgICAgICAgICAgICBvcHRpb25zLmNvb3JkaW5hdGVzLnNvbWUoYyA9PiAhQXJyYXkuaXNBcnJheShjKSB8fCBjLmxlbmd0aCAhPT0gMiB8fCBjLnNvbWUobCA9PiB0eXBlb2YgbCAhPT0gJ251bWJlcicpKSkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBWYWxpZGF0aW9uRXJyb3IoYHNvdXJjZXMuJHtpZH1gLCBudWxsLCAnXCJjb29yZGluYXRlc1wiIHByb3BlcnR5IG11c3QgYmUgYW4gYXJyYXkgb2YgNCBsb25naXR1ZGUvbGF0aXR1ZGUgYXJyYXkgcGFpcnMnKSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuYW5pbWF0ZSAmJiB0eXBlb2Ygb3B0aW9ucy5hbmltYXRlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgVmFsaWRhdGlvbkVycm9yKGBzb3VyY2VzLiR7aWR9YCwgbnVsbCwgJ29wdGlvbmFsIFwiYW5pbWF0ZVwiIHByb3BlcnR5IG11c3QgYmUgYSBib29sZWFuIHZhbHVlJykpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghb3B0aW9ucy5jYW52YXMpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgVmFsaWRhdGlvbkVycm9yKGBzb3VyY2VzLiR7aWR9YCwgbnVsbCwgJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgXCJjYW52YXNcIicpKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMuY2FudmFzICE9PSAnc3RyaW5nJyAmJiAhKG9wdGlvbnMuY2FudmFzIGluc3RhbmNlb2Ygd2luZG93LkhUTUxDYW52YXNFbGVtZW50KSkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBWYWxpZGF0aW9uRXJyb3IoYHNvdXJjZXMuJHtpZH1gLCBudWxsLCAnXCJjYW52YXNcIiBtdXN0IGJlIGVpdGhlciBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIElEIG9mIHRoZSBjYW52YXMgZWxlbWVudCBmcm9tIHdoaWNoIHRvIHJlYWQsIG9yIGFuIEhUTUxDYW52YXNFbGVtZW50IGluc3RhbmNlJykpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIHRoaXMuYW5pbWF0ZSA9IG9wdGlvbnMuYW5pbWF0ZSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5hbmltYXRlIDogdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzIGFuaW1hdGlvbi4gVGhlIGltYWdlIHdpbGwgYmUgY29waWVkIGZyb20gdGhlIGNhbnZhcyB0byB0aGUgbWFwIG9uIGVhY2ggZnJhbWUuXG4gICAgICogQG1ldGhvZCBwbGF5XG4gICAgICogQGluc3RhbmNlXG4gICAgICogQG1lbWJlcm9mIENhbnZhc1NvdXJjZVxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMgYW5pbWF0aW9uLiBUaGUgbWFwIHdpbGwgZGlzcGxheSBhIHN0YXRpYyBjb3B5IG9mIHRoZSBjYW52YXMgaW1hZ2UuXG4gICAgICogQG1ldGhvZCBwYXVzZVxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBtZW1iZXJvZiBDYW52YXNTb3VyY2VcbiAgICAgKi9cblxuICAgIGxvYWQoKSB7XG4gICAgICAgIHRoaXMuX2xvYWRlZCA9IHRydWU7XG4gICAgICAgIGlmICghdGhpcy5jYW52YXMpIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzID0gKHRoaXMub3B0aW9ucy5jYW52YXMgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTENhbnZhc0VsZW1lbnQpID9cbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuY2FudmFzIDpcbiAgICAgICAgICAgICAgICB3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5vcHRpb25zLmNhbnZhcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoO1xuICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodDtcblxuICAgICAgICBpZiAodGhpcy5faGFzSW52YWxpZERpbWVuc2lvbnMoKSkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcignQ2FudmFzIGRpbWVuc2lvbnMgY2Fubm90IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB6ZXJvLicpKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBsYXkgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHRoaXMuX3BsYXlpbmcgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5tYXAudHJpZ2dlclJlcGFpbnQoKTtcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnBhdXNlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fcGxheWluZykge1xuICAgICAgICAgICAgICAgIHRoaXMucHJlcGFyZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3BsYXlpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLl9maW5pc2hMb2FkaW5nKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgSFRNTCBgY2FudmFzYCBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHJldHVybnMge0hUTUxDYW52YXNFbGVtZW50fSBUaGUgSFRNTCBgY2FudmFzYCBlbGVtZW50LlxuICAgICAqL1xuICAgIGdldENhbnZhcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzO1xuICAgIH1cblxuICAgIG9uQWRkKG1hcDogTWFwKSB7XG4gICAgICAgIHRoaXMubWFwID0gbWFwO1xuICAgICAgICB0aGlzLmxvYWQoKTtcbiAgICAgICAgaWYgKHRoaXMuY2FudmFzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hbmltYXRlKSB0aGlzLnBsYXkoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUmVtb3ZlKCkge1xuICAgICAgICB0aGlzLnBhdXNlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY2FudmFzJ3MgY29vcmRpbmF0ZXMgYW5kIHJlLXJlbmRlcnMgdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIEBtZXRob2Qgc2V0Q29vcmRpbmF0ZXNcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAbWVtYmVyb2YgQ2FudmFzU291cmNlXG4gICAgICogQHBhcmFtIHtBcnJheTxBcnJheTxudW1iZXI+Pn0gY29vcmRpbmF0ZXMgRm91ciBnZW9ncmFwaGljYWwgY29vcmRpbmF0ZXMsXG4gICAgICogICByZXByZXNlbnRlZCBhcyBhcnJheXMgb2YgbG9uZ2l0dWRlIGFuZCBsYXRpdHVkZSBudW1iZXJzLCB3aGljaCBkZWZpbmUgdGhlIGNvcm5lcnMgb2YgdGhlIGNhbnZhcy5cbiAgICAgKiAgIFRoZSBjb29yZGluYXRlcyBzdGFydCBhdCB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBjYW52YXMgYW5kIHByb2NlZWQgaW4gY2xvY2t3aXNlIG9yZGVyLlxuICAgICAqICAgVGhleSBkbyBub3QgaGF2ZSB0byByZXByZXNlbnQgYSByZWN0YW5nbGUuXG4gICAgICogQHJldHVybnMge0NhbnZhc1NvdXJjZX0gdGhpc1xuICAgICAqL1xuICAgIC8vIHNldENvb3JkaW5hdGVzIGluaGVyaXRlZCBmcm9tIEltYWdlU291cmNlXG5cbiAgICBwcmVwYXJlKCkge1xuICAgICAgICBsZXQgcmVzaXplID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmNhbnZhcy53aWR0aCAhPT0gdGhpcy53aWR0aCkge1xuICAgICAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoO1xuICAgICAgICAgICAgcmVzaXplID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jYW52YXMuaGVpZ2h0ICE9PSB0aGlzLmhlaWdodCkge1xuICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLmNhbnZhcy5oZWlnaHQ7XG4gICAgICAgICAgICByZXNpemUgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2hhc0ludmFsaWREaW1lbnNpb25zKCkpIHJldHVybjtcblxuICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy50aWxlcykubGVuZ3RoID09PSAwKSByZXR1cm47IC8vIG5vdCBlbm91Z2ggZGF0YSBmb3IgY3VycmVudCBwb3NpdGlvblxuXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLm1hcC5wYWludGVyLmNvbnRleHQ7XG4gICAgICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcblxuICAgICAgICBpZiAoIXRoaXMuYm91bmRzQnVmZmVyKSB7XG4gICAgICAgICAgICB0aGlzLmJvdW5kc0J1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuX2JvdW5kc0FycmF5LCByYXN0ZXJCb3VuZHNBdHRyaWJ1dGVzLm1lbWJlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmJvdW5kc1NlZ21lbnRzKSB7XG4gICAgICAgICAgICB0aGlzLmJvdW5kc1NlZ21lbnRzID0gU2VnbWVudFZlY3Rvci5zaW1wbGVTZWdtZW50KDAsIDAsIDQsIDIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnRleHR1cmUpIHtcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZSA9IG5ldyBUZXh0dXJlKGNvbnRleHQsIHRoaXMuY2FudmFzLCBnbC5SR0JBLCB7cHJlbXVsdGlwbHk6IHRydWV9KTtcbiAgICAgICAgfSBlbHNlIGlmIChyZXNpemUgfHwgdGhpcy5fcGxheWluZykge1xuICAgICAgICAgICAgdGhpcy50ZXh0dXJlLnVwZGF0ZSh0aGlzLmNhbnZhcywge3ByZW11bHRpcGx5OiB0cnVlfSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHcgaW4gdGhpcy50aWxlcykge1xuICAgICAgICAgICAgY29uc3QgdGlsZSA9IHRoaXMudGlsZXNbd107XG4gICAgICAgICAgICBpZiAodGlsZS5zdGF0ZSAhPT0gJ2xvYWRlZCcpIHtcbiAgICAgICAgICAgICAgICB0aWxlLnN0YXRlID0gJ2xvYWRlZCc7XG4gICAgICAgICAgICAgICAgdGlsZS50ZXh0dXJlID0gdGhpcy50ZXh0dXJlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCk6IE9iamVjdCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnY2FudmFzJyxcbiAgICAgICAgICAgIGNvb3JkaW5hdGVzOiB0aGlzLmNvb3JkaW5hdGVzXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgaGFzVHJhbnNpdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXlpbmc7XG4gICAgfVxuXG4gICAgX2hhc0ludmFsaWREaW1lbnNpb25zKCkge1xuICAgICAgICBmb3IgKGNvbnN0IHggb2YgW3RoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHRdKSB7XG4gICAgICAgICAgICBpZiAoaXNOYU4oeCkgfHwgeCA8PSAwKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDYW52YXNTb3VyY2U7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2JpbmRBbGx9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5cbmltcG9ydCB0eXBlIERpc3BhdGNoZXIgZnJvbSAnLi4vdXRpbC9kaXNwYXRjaGVyJztcbmltcG9ydCB0eXBlIHtFdmVudCwgRXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi91aS9tYXAnO1xuaW1wb3J0IHR5cGUgVGlsZSBmcm9tICcuL3RpbGUnO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4vdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSB7Q2FsbGJhY2t9IGZyb20gJy4uL3R5cGVzL2NhbGxiYWNrJztcbmltcG9ydCB7Q2Fub25pY2FsVGlsZUlEfSBmcm9tICcuL3RpbGVfaWQnO1xuXG4vKipcbiAqIFRoZSBgU291cmNlYCBpbnRlcmZhY2UgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIHNvdXJjZSB0eXBlLCBpbmNsdWRpbmcgXCJjb3JlXCIgdHlwZXMgKGB2ZWN0b3JgLCBgcmFzdGVyYCxcbiAqIGB2aWRlb2AsIGV0Yy4pIGFuZCBhbGwgY3VzdG9tLCB0aGlyZC1wYXJ0eSB0eXBlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBpZCBUaGUgaWQgZm9yIHRoZSBzb3VyY2UuIE11c3Qgbm90IGJlIHVzZWQgYnkgYW55IGV4aXN0aW5nIHNvdXJjZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIFNvdXJjZSBvcHRpb25zLCBzcGVjaWZpYyB0byB0aGUgc291cmNlIHR5cGUgKGV4Y2VwdCBmb3IgYG9wdGlvbnMudHlwZWAsIHdoaWNoIGlzIGFsd2F5c1xuICogcmVxdWlyZWQpLlxuICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMudHlwZSBUaGUgc291cmNlIHR5cGUsIG1hdGNoaW5nIHRoZSB2YWx1ZSBvZiBgbmFtZWAgdXNlZCBpbiB7QGxpbmsgU3R5bGUjYWRkU291cmNlVHlwZX0uXG4gKiBAcGFyYW0ge0Rpc3BhdGNoZXJ9IGRpc3BhdGNoZXIgQSB7QGxpbmsgRGlzcGF0Y2hlcn0gaW5zdGFuY2UsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHNlbmQgbWVzc2FnZXMgdG8gdGhlIHdvcmtlcnMuXG4gKlxuICogQGZpcmVzIGRhdGEgd2l0aCBge2RhdGFUeXBlOiAnc291cmNlJywgc291cmNlRGF0YVR5cGU6ICdtZXRhZGF0YSd9YCB0byBpbmRpY2F0ZSB0aGF0IGFueSBuZWNlc3NhcnkgbWV0YWRhdGFcbiAqIGhhcyBiZWVuIGxvYWRlZCBzbyB0aGF0IGl0J3Mgb2theSB0byBjYWxsIGBsb2FkVGlsZWA7IGFuZCB3aXRoIGB7ZGF0YVR5cGU6ICdzb3VyY2UnLCBzb3VyY2VEYXRhVHlwZTogJ2NvbnRlbnQnfWBcbiAqIHRvIGluZGljYXRlIHRoYXQgdGhlIHNvdXJjZSBkYXRhIGhhcyBjaGFuZ2VkLCBzbyB0aGF0IGFueSBjdXJyZW50IGNhY2hlcyBzaG91bGQgYmUgZmx1c2hlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZCBUaGUgaWQgZm9yIHRoZSBzb3VyY2UuICBNdXN0IG1hdGNoIHRoZSBpZCBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IG1pbnpvb21cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBtYXh6b29tXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzVGlsZUNsaXBwZWQgYGZhbHNlYCBpZiB0aWxlcyBjYW4gYmUgZHJhd24gb3V0c2lkZSB0aGVpciBib3VuZGFyaWVzLCBgdHJ1ZWAgaWYgdGhleSBjYW5ub3QuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlcGFyc2VPdmVyc2NhbGVkIGB0cnVlYCBpZiB0aWxlcyBzaG91bGQgYmUgc2VudCBiYWNrIHRvIHRoZSB3b3JrZXIgZm9yIGVhY2ggb3Zlcnpvb21lZCB6b29tXG4gKiBsZXZlbCwgYGZhbHNlYCBpZiBub3QuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJvdW5kWm9vbSBgdHJ1ZWAgaWYgem9vbSBsZXZlbHMgYXJlIHJvdW5kZWQgdG8gdGhlIG5lYXJlc3QgaW50ZWdlciBpbiB0aGUgc291cmNlIGRhdGEsIGBmYWxzZWBcbiAqIGlmIHRoZXkgYXJlIGZsb29yLWVkIHRvIHRoZSBuZWFyZXN0IGludGVnZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU291cmNlIHtcbiAgICArdHlwZTogc3RyaW5nO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbWluem9vbTogbnVtYmVyLFxuICAgIG1heHpvb206IG51bWJlcixcbiAgICB0aWxlU2l6ZTogbnVtYmVyLFxuICAgIGF0dHJpYnV0aW9uPzogc3RyaW5nLFxuXG4gICAgcm91bmRab29tPzogYm9vbGVhbixcbiAgICBpc1RpbGVDbGlwcGVkPzogYm9vbGVhbixcbiAgICBtYXBib3hfbG9nbz86IGJvb2xlYW4sXG4gICAgdGlsZUlEPzogQ2Fub25pY2FsVGlsZUlEO1xuICAgIHJlcGFyc2VPdmVyc2NhbGVkPzogYm9vbGVhbixcbiAgICB2ZWN0b3JMYXllcklkcz86IEFycmF5PHN0cmluZz4sXG5cbiAgICBoYXNUcmFuc2l0aW9uKCk6IGJvb2xlYW47XG4gICAgbG9hZGVkKCk6IGJvb2xlYW47XG5cbiAgICBmaXJlKGV2ZW50OiBFdmVudCk6IG1peGVkO1xuXG4gICAgK29uQWRkPzogKG1hcDogTWFwKSA9PiB2b2lkO1xuICAgICtvblJlbW92ZT86IChtYXA6IE1hcCkgPT4gdm9pZDtcblxuICAgIGxvYWRUaWxlKHRpbGU6IFRpbGUsIGNhbGxiYWNrOiBDYWxsYmFjazx2b2lkPik6IHZvaWQ7XG4gICAgK2hhc1RpbGU/OiAodGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEKSA9PiBib29sZWFuO1xuICAgICthYm9ydFRpbGU/OiAodGlsZTogVGlsZSwgY2FsbGJhY2s6IENhbGxiYWNrPHZvaWQ+KSA9PiB2b2lkO1xuICAgICt1bmxvYWRUaWxlPzogKHRpbGU6IFRpbGUsIGNhbGxiYWNrOiBDYWxsYmFjazx2b2lkPikgPT4gdm9pZDtcblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIEEgcGxhaW4gKHN0cmluZ2lmaWFibGUpIEpTIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHNvdXJjZS5cbiAgICAgKiBDcmVhdGluZyBhIHNvdXJjZSB1c2luZyB0aGUgcmV0dXJuZWQgb2JqZWN0IGFzIHRoZSBgb3B0aW9uc2Agc2hvdWxkIHJlc3VsdCBpbiBhIFNvdXJjZSB0aGF0IGlzXG4gICAgICogZXF1aXZhbGVudCB0byB0aGlzIG9uZS5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHNlcmlhbGl6ZSgpOiBPYmplY3Q7XG5cbiAgICArcHJlcGFyZT86ICgpID0+IHZvaWQ7XG59XG5cbnR5cGUgU291cmNlU3RhdGljcyA9IHtcbiAgICAvKlxuICAgICAqIEFuIG9wdGlvbmFsIFVSTCB0byBhIHNjcmlwdCB3aGljaCwgd2hlbiBydW4gYnkgYSBXb3JrZXIsIHJlZ2lzdGVycyBhIHtAbGluayBXb3JrZXJTb3VyY2V9XG4gICAgICogaW1wbGVtZW50YXRpb24gZm9yIHRoaXMgU291cmNlIHR5cGUgYnkgY2FsbGluZyBgc2VsZi5yZWdpc3RlcldvcmtlclNvdXJjZSh3b3JrZXJTb3VyY2U6IFdvcmtlclNvdXJjZSlgLlxuICAgICAqL1xuICAgIHdvcmtlclNvdXJjZVVSTD86IFVSTDtcbn07XG5cbmV4cG9ydCB0eXBlIFNvdXJjZUNsYXNzID0gQ2xhc3M8U291cmNlPiAmIFNvdXJjZVN0YXRpY3M7XG5cbmltcG9ydCB2ZWN0b3IgZnJvbSAnLi4vc291cmNlL3ZlY3Rvcl90aWxlX3NvdXJjZSc7XG5pbXBvcnQgcmFzdGVyIGZyb20gJy4uL3NvdXJjZS9yYXN0ZXJfdGlsZV9zb3VyY2UnO1xuaW1wb3J0IHJhc3RlckRlbSBmcm9tICcuLi9zb3VyY2UvcmFzdGVyX2RlbV90aWxlX3NvdXJjZSc7XG5pbXBvcnQgZ2VvanNvbiBmcm9tICcuLi9zb3VyY2UvZ2VvanNvbl9zb3VyY2UnO1xuaW1wb3J0IHZpZGVvIGZyb20gJy4uL3NvdXJjZS92aWRlb19zb3VyY2UnO1xuaW1wb3J0IGltYWdlIGZyb20gJy4uL3NvdXJjZS9pbWFnZV9zb3VyY2UnO1xuaW1wb3J0IGNhbnZhcyBmcm9tICcuLi9zb3VyY2UvY2FudmFzX3NvdXJjZSc7XG5cbmltcG9ydCB0eXBlIHtTb3VyY2VTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuY29uc3Qgc291cmNlVHlwZXMgPSB7XG4gICAgdmVjdG9yLFxuICAgIHJhc3RlcixcbiAgICAncmFzdGVyLWRlbSc6IHJhc3RlckRlbSxcbiAgICBnZW9qc29uLFxuICAgIHZpZGVvLFxuICAgIGltYWdlLFxuICAgIGNhbnZhc1xufTtcblxuLypcbiAqIENyZWF0ZXMgYSB0aWxlZCBkYXRhIHNvdXJjZSBpbnN0YW5jZSBnaXZlbiBhbiBvcHRpb25zIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gaWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgQSBzb3VyY2UgZGVmaW5pdGlvbiBvYmplY3QgY29tcGxpYW50IHdpdGhcbiAqIFtgbWFwYm94LWdsLXN0eWxlLXNwZWNgXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1zdHlsZS1zcGVjLyNzb3VyY2VzKSBvciwgZm9yIGEgdGhpcmQtcGFydHkgc291cmNlIHR5cGUsXG4gICogd2l0aCB0aGF0IHR5cGUncyByZXF1aXJlbWVudHMuXG4gKiBAcGFyYW0ge0Rpc3BhdGNoZXJ9IGRpc3BhdGNoZXJcbiAqIEByZXR1cm5zIHtTb3VyY2V9XG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGUgPSBmdW5jdGlvbihpZDogc3RyaW5nLCBzcGVjaWZpY2F0aW9uOiBTb3VyY2VTcGVjaWZpY2F0aW9uLCBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyLCBldmVudGVkUGFyZW50OiBFdmVudGVkKSB7XG4gICAgY29uc3Qgc291cmNlID0gbmV3IHNvdXJjZVR5cGVzW3NwZWNpZmljYXRpb24udHlwZV0oaWQsIChzcGVjaWZpY2F0aW9uOiBhbnkpLCBkaXNwYXRjaGVyLCBldmVudGVkUGFyZW50KTtcblxuICAgIGlmIChzb3VyY2UuaWQgIT09IGlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgU291cmNlIGlkIHRvIGJlICR7aWR9IGluc3RlYWQgb2YgJHtzb3VyY2UuaWR9YCk7XG4gICAgfVxuXG4gICAgYmluZEFsbChbJ2xvYWQnLCAnYWJvcnQnLCAndW5sb2FkJywgJ3NlcmlhbGl6ZScsICdwcmVwYXJlJ10sIHNvdXJjZSk7XG4gICAgcmV0dXJuIHNvdXJjZTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUeXBlID0gZnVuY3Rpb24gKG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBzb3VyY2VUeXBlc1tuYW1lXTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRUeXBlID0gZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgdHlwZTogQ2xhc3M8U291cmNlPikge1xuICAgIHNvdXJjZVR5cGVzW25hbWVdID0gdHlwZTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0b3Ige1xuICAgIHNlbmQodHlwZTogc3RyaW5nLCBkYXRhOiBPYmplY3QsIGNhbGxiYWNrOiBDYWxsYmFjazxhbnk+KTogdm9pZDtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB0eXBlIFNvdXJjZUNhY2hlIGZyb20gJy4vc291cmNlX2NhY2hlJztcbmltcG9ydCB0eXBlIFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgQ29sbGlzaW9uSW5kZXggZnJvbSAnLi4vc3ltYm9sL2NvbGxpc2lvbl9pbmRleCc7XG5pbXBvcnQgdHlwZSBUcmFuc2Zvcm0gZnJvbSAnLi4vZ2VvL3RyYW5zZm9ybSc7XG5pbXBvcnQgdHlwZSB7UmV0YWluZWRRdWVyeURhdGF9IGZyb20gJy4uL3N5bWJvbC9wbGFjZW1lbnQnO1xuaW1wb3J0IHR5cGUge0ZpbHRlclNwZWNpZmljYXRpb259IGZyb20gJy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHttYXQ0fSBmcm9tICdnbC1tYXRyaXgnO1xuXG4vKlxuICogUmV0dXJucyBhIG1hdHJpeCB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgZnJvbSB0aWxlIGNvb3JkaW5hdGVzIHRvIHZpZXdwb3J0IHBpeGVsIGNvb3JkaW5hdGVzLlxuICovXG5mdW5jdGlvbiBnZXRQaXhlbFBvc01hdHJpeCh0cmFuc2Zvcm0sIHRpbGVJRCkge1xuICAgIGNvbnN0IHQgPSBtYXQ0LmlkZW50aXR5KFtdKTtcbiAgICBtYXQ0LnRyYW5zbGF0ZSh0LCB0LCBbMSwgMSwgMF0pO1xuICAgIG1hdDQuc2NhbGUodCwgdCwgW3RyYW5zZm9ybS53aWR0aCAqIDAuNSwgdHJhbnNmb3JtLmhlaWdodCAqIDAuNSwgMV0pO1xuICAgIHJldHVybiBtYXQ0Lm11bHRpcGx5KHQsIHQsIHRyYW5zZm9ybS5jYWxjdWxhdGVQb3NNYXRyaXgodGlsZUlELnRvVW53cmFwcGVkKCkpKTtcbn1cblxuZnVuY3Rpb24gcXVlcnlJbmNsdWRlczNETGF5ZXIobGF5ZXJzPzogQXJyYXk8c3RyaW5nPiwgc3R5bGVMYXllcnM6IHtbXzogc3RyaW5nXTogU3R5bGVMYXllcn0sIHNvdXJjZUlEOiBzdHJpbmcpIHtcbiAgICBpZiAobGF5ZXJzKSB7XG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJJRCBvZiBsYXllcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gc3R5bGVMYXllcnNbbGF5ZXJJRF07XG4gICAgICAgICAgICBpZiAobGF5ZXIgJiYgbGF5ZXIuc291cmNlID09PSBzb3VyY2VJRCAmJiBsYXllci50eXBlID09PSAnZmlsbC1leHRydXNpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzdHlsZUxheWVycykge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSBzdHlsZUxheWVyc1trZXldO1xuICAgICAgICAgICAgaWYgKGxheWVyLnNvdXJjZSA9PT0gc291cmNlSUQgJiYgbGF5ZXIudHlwZSA9PT0gJ2ZpbGwtZXh0cnVzaW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhzb3VyY2VDYWNoZTogU291cmNlQ2FjaGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVMYXllcnM6IHtbXzogc3RyaW5nXTogU3R5bGVMYXllcn0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplZExheWVyczoge1tfOiBzdHJpbmddOiBPYmplY3R9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHsgZmlsdGVyOiBGaWx0ZXJTcGVjaWZpY2F0aW9uLCBsYXllcnM6IEFycmF5PHN0cmluZz4sIGF2YWlsYWJsZUltYWdlczogQXJyYXk8c3RyaW5nPiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtKSB7XG5cbiAgICBjb25zdCBoYXMzRExheWVyID0gcXVlcnlJbmNsdWRlczNETGF5ZXIocGFyYW1zICYmIHBhcmFtcy5sYXllcnMsIHN0eWxlTGF5ZXJzLCBzb3VyY2VDYWNoZS5pZCk7XG4gICAgY29uc3QgbWF4UGl0Y2hTY2FsZUZhY3RvciA9IHRyYW5zZm9ybS5tYXhQaXRjaFNjYWxlRmFjdG9yKCk7XG4gICAgY29uc3QgdGlsZXNJbiA9IHNvdXJjZUNhY2hlLnRpbGVzSW4ocXVlcnlHZW9tZXRyeSwgbWF4UGl0Y2hTY2FsZUZhY3RvciwgaGFzM0RMYXllcik7XG5cbiAgICB0aWxlc0luLnNvcnQoc29ydFRpbGVzSW4pO1xuICAgIGNvbnN0IHJlbmRlcmVkRmVhdHVyZUxheWVycyA9IFtdO1xuICAgIGZvciAoY29uc3QgdGlsZUluIG9mIHRpbGVzSW4pIHtcbiAgICAgICAgcmVuZGVyZWRGZWF0dXJlTGF5ZXJzLnB1c2goe1xuICAgICAgICAgICAgd3JhcHBlZFRpbGVJRDogdGlsZUluLnRpbGVJRC53cmFwcGVkKCkua2V5LFxuICAgICAgICAgICAgcXVlcnlSZXN1bHRzOiB0aWxlSW4udGlsZS5xdWVyeVJlbmRlcmVkRmVhdHVyZXMoXG4gICAgICAgICAgICAgICAgc3R5bGVMYXllcnMsXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZExheWVycyxcbiAgICAgICAgICAgICAgICBzb3VyY2VDYWNoZS5fc3RhdGUsXG4gICAgICAgICAgICAgICAgdGlsZUluLnF1ZXJ5R2VvbWV0cnksXG4gICAgICAgICAgICAgICAgdGlsZUluLmNhbWVyYVF1ZXJ5R2VvbWV0cnksXG4gICAgICAgICAgICAgICAgdGlsZUluLnNjYWxlLFxuICAgICAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm0sXG4gICAgICAgICAgICAgICAgbWF4UGl0Y2hTY2FsZUZhY3RvcixcbiAgICAgICAgICAgICAgICBnZXRQaXhlbFBvc01hdHJpeChzb3VyY2VDYWNoZS50cmFuc2Zvcm0sIHRpbGVJbi50aWxlSUQpKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBtZXJnZVJlbmRlcmVkRmVhdHVyZUxheWVycyhyZW5kZXJlZEZlYXR1cmVMYXllcnMpO1xuXG4gICAgLy8gTWVyZ2Ugc3RhdGUgZnJvbSBTb3VyY2VDYWNoZSBpbnRvIHRoZSByZXN1bHRzXG4gICAgZm9yIChjb25zdCBsYXllcklEIGluIHJlc3VsdCkge1xuICAgICAgICByZXN1bHRbbGF5ZXJJRF0uZm9yRWFjaCgoZmVhdHVyZVdyYXBwZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlV3JhcHBlci5mZWF0dXJlO1xuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSBzb3VyY2VDYWNoZS5nZXRGZWF0dXJlU3RhdGUoZmVhdHVyZS5sYXllclsnc291cmNlLWxheWVyJ10sIGZlYXR1cmUuaWQpO1xuICAgICAgICAgICAgZmVhdHVyZS5zb3VyY2UgPSBmZWF0dXJlLmxheWVyLnNvdXJjZTtcbiAgICAgICAgICAgIGlmIChmZWF0dXJlLmxheWVyWydzb3VyY2UtbGF5ZXInXSkge1xuICAgICAgICAgICAgICAgIGZlYXR1cmUuc291cmNlTGF5ZXIgPSBmZWF0dXJlLmxheWVyWydzb3VyY2UtbGF5ZXInXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZlYXR1cmUuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeVJlbmRlcmVkU3ltYm9scyhzdHlsZUxheWVyczoge1tfOiBzdHJpbmddOiBTdHlsZUxheWVyfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVkTGF5ZXJzOiB7W186IHN0cmluZ106IFN0eWxlTGF5ZXJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUNhY2hlczoge1tfOiBzdHJpbmddOiBTb3VyY2VDYWNoZX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlHZW9tZXRyeTogQXJyYXk8UG9pbnQ+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogeyBmaWx0ZXI6IEZpbHRlclNwZWNpZmljYXRpb24sIGxheWVyczogQXJyYXk8c3RyaW5nPiwgYXZhaWxhYmxlSW1hZ2VzOiBBcnJheTxzdHJpbmc+IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGlzaW9uSW5kZXg6IENvbGxpc2lvbkluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldGFpbmVkUXVlcnlEYXRhOiB7W186IG51bWJlcl06IFJldGFpbmVkUXVlcnlEYXRhfSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGNvbnN0IHJlbmRlcmVkU3ltYm9scyA9IGNvbGxpc2lvbkluZGV4LnF1ZXJ5UmVuZGVyZWRTeW1ib2xzKHF1ZXJ5R2VvbWV0cnkpO1xuICAgIGNvbnN0IGJ1Y2tldFF1ZXJ5RGF0YSA9IFtdO1xuICAgIGZvciAoY29uc3QgYnVja2V0SW5zdGFuY2VJZCBvZiBPYmplY3Qua2V5cyhyZW5kZXJlZFN5bWJvbHMpLm1hcChOdW1iZXIpKSB7XG4gICAgICAgIGJ1Y2tldFF1ZXJ5RGF0YS5wdXNoKHJldGFpbmVkUXVlcnlEYXRhW2J1Y2tldEluc3RhbmNlSWRdKTtcbiAgICB9XG4gICAgYnVja2V0UXVlcnlEYXRhLnNvcnQoc29ydFRpbGVzSW4pO1xuXG4gICAgZm9yIChjb25zdCBxdWVyeURhdGEgb2YgYnVja2V0UXVlcnlEYXRhKSB7XG4gICAgICAgIGNvbnN0IGJ1Y2tldFN5bWJvbHMgPSBxdWVyeURhdGEuZmVhdHVyZUluZGV4Lmxvb2t1cFN5bWJvbEZlYXR1cmVzKFxuICAgICAgICAgICAgICAgIHJlbmRlcmVkU3ltYm9sc1txdWVyeURhdGEuYnVja2V0SW5zdGFuY2VJZF0sXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZExheWVycyxcbiAgICAgICAgICAgICAgICBxdWVyeURhdGEuYnVja2V0SW5kZXgsXG4gICAgICAgICAgICAgICAgcXVlcnlEYXRhLnNvdXJjZUxheWVySW5kZXgsXG4gICAgICAgICAgICAgICAgcGFyYW1zLmZpbHRlcixcbiAgICAgICAgICAgICAgICBwYXJhbXMubGF5ZXJzLFxuICAgICAgICAgICAgICAgIHBhcmFtcy5hdmFpbGFibGVJbWFnZXMsXG4gICAgICAgICAgICAgICAgc3R5bGVMYXllcnMpO1xuXG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJJRCBpbiBidWNrZXRTeW1ib2xzKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHRGZWF0dXJlcyA9IHJlc3VsdFtsYXllcklEXSA9IHJlc3VsdFtsYXllcklEXSB8fCBbXTtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyU3ltYm9scyA9IGJ1Y2tldFN5bWJvbHNbbGF5ZXJJRF07XG4gICAgICAgICAgICBsYXllclN5bWJvbHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIE1hdGNoIHRvcERvd25GZWF0dXJlQ29tcGFyYXRvciBmcm9tIEZlYXR1cmVJbmRleCwgYnV0IHVzaW5nXG4gICAgICAgICAgICAgICAgLy8gbW9zdCByZWNlbnQgc29ydGluZyBvZiBmZWF0dXJlcyBmcm9tIGJ1Y2tldC5zb3J0RmVhdHVyZXNcbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlU29ydE9yZGVyID0gcXVlcnlEYXRhLmZlYXR1cmVTb3J0T3JkZXI7XG4gICAgICAgICAgICAgICAgaWYgKGZlYXR1cmVTb3J0T3JkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcXVlcnlSZW5kZXJlZFN5bWJvbHMgZG9jdW1lbnRhdGlvbiBzYXlzIHdlJ2xsIHJldHVybiBmZWF0dXJlcyBpblxuICAgICAgICAgICAgICAgICAgICAvLyBcInRvcC10by1ib3R0b21cIiByZW5kZXJpbmcgb3JkZXIgKGFrYSBsYXN0LXRvLWZpcnN0KS5cbiAgICAgICAgICAgICAgICAgICAgLy8gQWN0dWFsbHkgdGhlcmUgY2FuIGJlIG11bHRpcGxlIHN5bWJvbCBpbnN0YW5jZXMgcGVyIGZlYXR1cmUsIHNvXG4gICAgICAgICAgICAgICAgICAgIC8vIHdlIHNvcnQgZWFjaCBmZWF0dXJlIGJhc2VkIG9uIHRoZSBmaXJzdCBtYXRjaGluZyBzeW1ib2wgaW5zdGFuY2UuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNvcnRlZEEgPSBmZWF0dXJlU29ydE9yZGVyLmluZGV4T2YoYS5mZWF0dXJlSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzb3J0ZWRCID0gZmVhdHVyZVNvcnRPcmRlci5pbmRleE9mKGIuZmVhdHVyZUluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHNvcnRlZEEgPj0gMCk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChzb3J0ZWRCID49IDApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc29ydGVkQiAtIHNvcnRlZEE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQnVja2V0IGhhc24ndCBiZWVuIHJlLXNvcnRlZCBiYXNlZCBvbiBhbmdsZSwgc28gdXNlIHRoZVxuICAgICAgICAgICAgICAgICAgICAvLyByZXZlcnNlIG9mIHRoZSBvcmRlciB0aGUgZmVhdHVyZXMgYXBwZWFyZWQgaW4gdGhlIGRhdGEuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBiLmZlYXR1cmVJbmRleCAtIGEuZmVhdHVyZUluZGV4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9yIChjb25zdCBzeW1ib2xGZWF0dXJlIG9mIGxheWVyU3ltYm9scykge1xuICAgICAgICAgICAgICAgIHJlc3VsdEZlYXR1cmVzLnB1c2goc3ltYm9sRmVhdHVyZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNZXJnZSBzdGF0ZSBmcm9tIFNvdXJjZUNhY2hlIGludG8gdGhlIHJlc3VsdHNcbiAgICBmb3IgKGNvbnN0IGxheWVyTmFtZSBpbiByZXN1bHQpIHtcbiAgICAgICAgcmVzdWx0W2xheWVyTmFtZV0uZm9yRWFjaCgoZmVhdHVyZVdyYXBwZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlV3JhcHBlci5mZWF0dXJlO1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSBzdHlsZUxheWVyc1tsYXllck5hbWVdO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlQ2FjaGUgPSBzb3VyY2VDYWNoZXNbbGF5ZXIuc291cmNlXTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gc291cmNlQ2FjaGUuZ2V0RmVhdHVyZVN0YXRlKGZlYXR1cmUubGF5ZXJbJ3NvdXJjZS1sYXllciddLCBmZWF0dXJlLmlkKTtcbiAgICAgICAgICAgIGZlYXR1cmUuc291cmNlID0gZmVhdHVyZS5sYXllci5zb3VyY2U7XG4gICAgICAgICAgICBpZiAoZmVhdHVyZS5sYXllclsnc291cmNlLWxheWVyJ10pIHtcbiAgICAgICAgICAgICAgICBmZWF0dXJlLnNvdXJjZUxheWVyID0gZmVhdHVyZS5sYXllclsnc291cmNlLWxheWVyJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmZWF0dXJlLnN0YXRlID0gc3RhdGU7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlTb3VyY2VGZWF0dXJlcyhzb3VyY2VDYWNoZTogU291cmNlQ2FjaGUsIHBhcmFtczogYW55KSB7XG4gICAgY29uc3QgdGlsZXMgPSBzb3VyY2VDYWNoZS5nZXRSZW5kZXJhYmxlSWRzKCkubWFwKChpZCkgPT4ge1xuICAgICAgICByZXR1cm4gc291cmNlQ2FjaGUuZ2V0VGlsZUJ5SUQoaWQpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgICBjb25zdCBkYXRhVGlsZXMgPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHRpbGUgPSB0aWxlc1tpXTtcbiAgICAgICAgY29uc3QgZGF0YUlEID0gdGlsZS50aWxlSUQuY2Fub25pY2FsLmtleTtcbiAgICAgICAgaWYgKCFkYXRhVGlsZXNbZGF0YUlEXSkge1xuICAgICAgICAgICAgZGF0YVRpbGVzW2RhdGFJRF0gPSB0cnVlO1xuICAgICAgICAgICAgdGlsZS5xdWVyeVNvdXJjZUZlYXR1cmVzKHJlc3VsdCwgcGFyYW1zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHNvcnRUaWxlc0luKGEsIGIpIHtcbiAgICBjb25zdCBpZEEgPSBhLnRpbGVJRDtcbiAgICBjb25zdCBpZEIgPSBiLnRpbGVJRDtcbiAgICByZXR1cm4gKGlkQS5vdmVyc2NhbGVkWiAtIGlkQi5vdmVyc2NhbGVkWikgfHwgKGlkQS5jYW5vbmljYWwueSAtIGlkQi5jYW5vbmljYWwueSkgfHwgKGlkQS53cmFwIC0gaWRCLndyYXApIHx8IChpZEEuY2Fub25pY2FsLnggLSBpZEIuY2Fub25pY2FsLngpO1xufVxuXG5mdW5jdGlvbiBtZXJnZVJlbmRlcmVkRmVhdHVyZUxheWVycyh0aWxlcykge1xuICAgIC8vIE1lcmdlIHJlc3VsdHMgZnJvbSBhbGwgdGlsZXMsIGJ1dCBpZiB0d28gdGlsZXMgc2hhcmUgdGhlIHNhbWVcbiAgICAvLyB3cmFwcGVkIElELCBkb24ndCBkdXBsaWNhdGUgZmVhdHVyZXMgYmV0d2VlbiB0aGUgdHdvIHRpbGVzXG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgY29uc3Qgd3JhcHBlZElETGF5ZXJNYXAgPSB7fTtcbiAgICBmb3IgKGNvbnN0IHRpbGUgb2YgdGlsZXMpIHtcbiAgICAgICAgY29uc3QgcXVlcnlSZXN1bHRzID0gdGlsZS5xdWVyeVJlc3VsdHM7XG4gICAgICAgIGNvbnN0IHdyYXBwZWRJRCA9IHRpbGUud3JhcHBlZFRpbGVJRDtcbiAgICAgICAgY29uc3Qgd3JhcHBlZElETGF5ZXJzID0gd3JhcHBlZElETGF5ZXJNYXBbd3JhcHBlZElEXSA9IHdyYXBwZWRJRExheWVyTWFwW3dyYXBwZWRJRF0gfHwge307XG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJJRCBpbiBxdWVyeVJlc3VsdHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbGVGZWF0dXJlcyA9IHF1ZXJ5UmVzdWx0c1tsYXllcklEXTtcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZWRJREZlYXR1cmVzID0gd3JhcHBlZElETGF5ZXJzW2xheWVySURdID0gd3JhcHBlZElETGF5ZXJzW2xheWVySURdIHx8IHt9O1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0RmVhdHVyZXMgPSByZXN1bHRbbGF5ZXJJRF0gPSByZXN1bHRbbGF5ZXJJRF0gfHwgW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHRpbGVGZWF0dXJlIG9mIHRpbGVGZWF0dXJlcykge1xuICAgICAgICAgICAgICAgIGlmICghd3JhcHBlZElERmVhdHVyZXNbdGlsZUZlYXR1cmUuZmVhdHVyZUluZGV4XSkge1xuICAgICAgICAgICAgICAgICAgICB3cmFwcGVkSURGZWF0dXJlc1t0aWxlRmVhdHVyZS5mZWF0dXJlSW5kZXhdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0RmVhdHVyZXMucHVzaCh0aWxlRmVhdHVyZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4vdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4vdGlsZSc7XG5cbi8qKlxuICogQSBbbGVhc3QtcmVjZW50bHktdXNlZCBjYWNoZV0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DYWNoZV9hbGdvcml0aG1zKVxuICogd2l0aCBoYXNoIGxvb2t1cCBtYWRlIHBvc3NpYmxlIGJ5IGtlZXBpbmcgYSBsaXN0IG9mIGtleXMgaW4gcGFyYWxsZWwgdG9cbiAqIGFuIGFycmF5IG9mIGRpY3Rpb25hcnkgb2YgdmFsdWVzXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgVGlsZUNhY2hlIHtcbiAgICBtYXg6IG51bWJlcjtcbiAgICBkYXRhOiB7W2tleTogc3RyaW5nXTogQXJyYXk8eyB2YWx1ZTogVGlsZSwgdGltZW91dDogP1RpbWVvdXRJRH0+fTtcbiAgICBvcmRlcjogQXJyYXk8c3RyaW5nPjtcbiAgICBvblJlbW92ZTogKGVsZW1lbnQ6IFRpbGUpID0+IHZvaWQ7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG1heCBudW1iZXIgb2YgcGVybWl0dGVkIHZhbHVlc1xuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IG9uUmVtb3ZlIGNhbGxiYWNrIGNhbGxlZCB3aXRoIGl0ZW1zIHdoZW4gdGhleSBleHBpcmVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihtYXg6IG51bWJlciwgb25SZW1vdmU6IChlbGVtZW50OiBUaWxlKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMubWF4ID0gbWF4O1xuICAgICAgICB0aGlzLm9uUmVtb3ZlID0gb25SZW1vdmU7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhciB0aGUgY2FjaGVcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtUaWxlQ2FjaGV9IHRoaXMgY2FjaGVcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHJlc2V0KCkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmVtb3ZlZERhdGEgb2YgdGhpcy5kYXRhW2tleV0pIHtcbiAgICAgICAgICAgICAgICBpZiAocmVtb3ZlZERhdGEudGltZW91dCkgY2xlYXJUaW1lb3V0KHJlbW92ZWREYXRhLnRpbWVvdXQpO1xuICAgICAgICAgICAgICAgIHRoaXMub25SZW1vdmUocmVtb3ZlZERhdGEudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kYXRhID0ge307XG4gICAgICAgIHRoaXMub3JkZXIgPSBbXTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgYSBrZXksIHZhbHVlIGNvbWJpbmF0aW9uIHRvIHRoZSBjYWNoZSwgdHJpbW1pbmcgaXRzIHNpemUgaWYgdGhpcyBwdXNoZXNcbiAgICAgKiBpdCBvdmVyIG1heCBsZW5ndGguXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge092ZXJzY2FsZWRUaWxlSUR9IHRpbGVJRCBsb29rdXAga2V5IGZvciB0aGUgaXRlbVxuICAgICAqIEBwYXJhbSB7Kn0gZGF0YSBhbnkgdmFsdWVcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtUaWxlQ2FjaGV9IHRoaXMgY2FjaGVcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGFkZCh0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQsIGRhdGE6IFRpbGUsIGV4cGlyeVRpbWVvdXQ6IG51bWJlciB8IHZvaWQpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGlsZUlELndyYXBwZWQoKS5rZXk7XG4gICAgICAgIGlmICh0aGlzLmRhdGFba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFba2V5XSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YVdyYXBwZXIgPSB7XG4gICAgICAgICAgICB2YWx1ZTogZGF0YSxcbiAgICAgICAgICAgIHRpbWVvdXQ6IHVuZGVmaW5lZFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChleHBpcnlUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRhdGFXcmFwcGVyLnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZSh0aWxlSUQsIGRhdGFXcmFwcGVyKTtcbiAgICAgICAgICAgIH0sIGV4cGlyeVRpbWVvdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kYXRhW2tleV0ucHVzaChkYXRhV3JhcHBlcik7XG4gICAgICAgIHRoaXMub3JkZXIucHVzaChrZXkpO1xuXG4gICAgICAgIGlmICh0aGlzLm9yZGVyLmxlbmd0aCA+IHRoaXMubWF4KSB7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVkRGF0YSA9IHRoaXMuX2dldEFuZFJlbW92ZUJ5S2V5KHRoaXMub3JkZXJbMF0pO1xuICAgICAgICAgICAgaWYgKHJlbW92ZWREYXRhKSB0aGlzLm9uUmVtb3ZlKHJlbW92ZWREYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERldGVybWluZSB3aGV0aGVyIHRoZSB2YWx1ZSBhdHRhY2hlZCB0byBga2V5YCBpcyBwcmVzZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge092ZXJzY2FsZWRUaWxlSUR9IHRpbGVJRCB0aGUga2V5IHRvIGJlIGxvb2tlZC11cFxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSB3aGV0aGVyIHRoZSBjYWNoZSBoYXMgdGhpcyB2YWx1ZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgaGFzKHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGlsZUlELndyYXBwZWQoKS5rZXkgaW4gdGhpcy5kYXRhO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgdmFsdWUgYXR0YWNoZWQgdG8gYSBzcGVjaWZpYyBrZXkgYW5kIHJlbW92ZSBkYXRhIGZyb20gY2FjaGUuXG4gICAgICogSWYgdGhlIGtleSBpcyBub3QgZm91bmQsIHJldHVybnMgYG51bGxgXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge092ZXJzY2FsZWRUaWxlSUR9IHRpbGVJRCB0aGUga2V5IHRvIGxvb2sgdXBcbiAgICAgKiBAcmV0dXJucyB7Kn0gdGhlIGRhdGEsIG9yIG51bGwgaWYgaXQgaXNuJ3QgZm91bmRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGdldEFuZFJlbW92ZSh0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQpOiA/VGlsZSB7XG4gICAgICAgIGlmICghdGhpcy5oYXModGlsZUlEKSkgeyByZXR1cm4gbnVsbDsgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0QW5kUmVtb3ZlQnlLZXkodGlsZUlELndyYXBwZWQoKS5rZXkpO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogR2V0IGFuZCByZW1vdmUgdGhlIHZhbHVlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkuXG4gICAgICovXG4gICAgX2dldEFuZFJlbW92ZUJ5S2V5KGtleTogc3RyaW5nKTogP1RpbGUge1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhW2tleV0uc2hpZnQoKTtcbiAgICAgICAgaWYgKGRhdGEudGltZW91dCkgY2xlYXJUaW1lb3V0KGRhdGEudGltZW91dCk7XG5cbiAgICAgICAgaWYgKHRoaXMuZGF0YVtrZXldLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuZGF0YVtrZXldO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3JkZXIuc3BsaWNlKHRoaXMub3JkZXIuaW5kZXhPZihrZXkpLCAxKTtcblxuICAgICAgICByZXR1cm4gZGF0YS52YWx1ZTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIEdldCB0aGUgdmFsdWUgd2l0aCB0aGUgc3BlY2lmaWVkICh3cmFwcGVkIHRpbGUpIGtleS5cbiAgICAgKi9cbiAgICBnZXRCeUtleShrZXk6IHN0cmluZyk6ID9UaWxlIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YVtrZXldO1xuICAgICAgICByZXR1cm4gZGF0YSA/IGRhdGFbMF0udmFsdWUgOiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgdmFsdWUgYXR0YWNoZWQgdG8gYSBzcGVjaWZpYyBrZXkgd2l0aG91dCByZW1vdmluZyBkYXRhXG4gICAgICogZnJvbSB0aGUgY2FjaGUuIElmIHRoZSBrZXkgaXMgbm90IGZvdW5kLCByZXR1cm5zIGBudWxsYFxuICAgICAqXG4gICAgICogQHBhcmFtIHtPdmVyc2NhbGVkVGlsZUlEfSB0aWxlSUQgdGhlIGtleSB0byBsb29rIHVwXG4gICAgICogQHJldHVybnMgeyp9IHRoZSBkYXRhLCBvciBudWxsIGlmIGl0IGlzbid0IGZvdW5kXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBnZXQodGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEKTogP1RpbGUge1xuICAgICAgICBpZiAoIXRoaXMuaGFzKHRpbGVJRCkpIHsgcmV0dXJuIG51bGw7IH1cblxuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhW3RpbGVJRC53cmFwcGVkKCkua2V5XVswXTtcbiAgICAgICAgcmV0dXJuIGRhdGEudmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGEga2V5L3ZhbHVlIGNvbWJpbmF0aW9uIGZyb20gdGhlIGNhY2hlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtPdmVyc2NhbGVkVGlsZUlEfSB0aWxlSUQgdGhlIGtleSBmb3IgdGhlIHBhaXIgdG8gZGVsZXRlXG4gICAgICogQHBhcmFtIHtUaWxlfSB2YWx1ZSBJZiBhIHZhbHVlIGlzIHByb3ZpZGVkLCByZW1vdmUgdGhhdCBleGFjdCB2ZXJzaW9uIG9mIHRoZSB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyB7VGlsZUNhY2hlfSB0aGlzIGNhY2hlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICByZW1vdmUodGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlELCB2YWx1ZTogP3sgdmFsdWU6IFRpbGUsIHRpbWVvdXQ6ID9UaW1lb3V0SUR9KSB7XG4gICAgICAgIGlmICghdGhpcy5oYXModGlsZUlEKSkgeyByZXR1cm4gdGhpczsgfVxuICAgICAgICBjb25zdCBrZXkgPSB0aWxlSUQud3JhcHBlZCgpLmtleTtcblxuICAgICAgICBjb25zdCBkYXRhSW5kZXggPSB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gMCA6IHRoaXMuZGF0YVtrZXldLmluZGV4T2YodmFsdWUpO1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhW2tleV1bZGF0YUluZGV4XTtcbiAgICAgICAgdGhpcy5kYXRhW2tleV0uc3BsaWNlKGRhdGFJbmRleCwgMSk7XG4gICAgICAgIGlmIChkYXRhLnRpbWVvdXQpIGNsZWFyVGltZW91dChkYXRhLnRpbWVvdXQpO1xuICAgICAgICBpZiAodGhpcy5kYXRhW2tleV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5kYXRhW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vblJlbW92ZShkYXRhLnZhbHVlKTtcbiAgICAgICAgdGhpcy5vcmRlci5zcGxpY2UodGhpcy5vcmRlci5pbmRleE9mKGtleSksIDEpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoYW5nZSB0aGUgbWF4IHNpemUgb2YgdGhlIGNhY2hlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG1heCB0aGUgbWF4IHNpemUgb2YgdGhlIGNhY2hlXG4gICAgICogQHJldHVybnMge1RpbGVDYWNoZX0gdGhpcyBjYWNoZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgc2V0TWF4U2l6ZShtYXg6IG51bWJlcik6IFRpbGVDYWNoZSB7XG4gICAgICAgIHRoaXMubWF4ID0gbWF4O1xuXG4gICAgICAgIHdoaWxlICh0aGlzLm9yZGVyLmxlbmd0aCA+IHRoaXMubWF4KSB7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVkRGF0YSA9IHRoaXMuX2dldEFuZFJlbW92ZUJ5S2V5KHRoaXMub3JkZXJbMF0pO1xuICAgICAgICAgICAgaWYgKHJlbW92ZWREYXRhKSB0aGlzLm9uUmVtb3ZlKHJlbW92ZWREYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBlbnRyaWVzIHRoYXQgZG8gbm90IHBhc3MgYSBmaWx0ZXIgZnVuY3Rpb24uIFVzZWQgZm9yIHJlbW92aW5nXG4gICAgICogc3RhbGUgdGlsZXMgZnJvbSB0aGUgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBmaWx0ZXJGbiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHRpbGUgaXMgZmlsdGVyZWQuIElmIHRoZSBzdXBwbGllZCBmdW5jdGlvbiByZXR1cm5zIGZhbHNlLCB0aGUgdGlsZSB3aWxsIGJlIGZpbHRlcmVkIG91dC5cbiAgICAgKi9cbiAgICBmaWx0ZXIoZmlsdGVyRm46ICh0aWxlOiBUaWxlKSA9PiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IHJlbW92ZWQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZGF0YVtrZXldKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFmaWx0ZXJGbihlbnRyeS52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZC5wdXNoKGVudHJ5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCByIG9mIHJlbW92ZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlKHIudmFsdWUudGlsZUlELCByKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVGlsZUNhY2hlO1xuIiwiLy8gQGZsb3dcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHR5cGUge1N0cnVjdEFycmF5fSBmcm9tICcuLi91dGlsL3N0cnVjdF9hcnJheSc7XG5pbXBvcnQgdHlwZSB7VHJpYW5nbGVJbmRleEFycmF5LCBMaW5lSW5kZXhBcnJheSwgTGluZVN0cmlwSW5kZXhBcnJheX0gZnJvbSAnLi4vZGF0YS9pbmRleF9hcnJheV90eXBlJztcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vZ2wvY29udGV4dCc7XG5cbmNsYXNzIEluZGV4QnVmZmVyIHtcbiAgICBjb250ZXh0OiBDb250ZXh0O1xuICAgIGJ1ZmZlcjogV2ViR0xCdWZmZXI7XG4gICAgZHluYW1pY0RyYXc6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCBhcnJheTogVHJpYW5nbGVJbmRleEFycmF5IHwgTGluZUluZGV4QXJyYXkgfCBMaW5lU3RyaXBJbmRleEFycmF5LCBkeW5hbWljRHJhdz86IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuICAgICAgICB0aGlzLmJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgICAgICB0aGlzLmR5bmFtaWNEcmF3ID0gQm9vbGVhbihkeW5hbWljRHJhdyk7XG5cbiAgICAgICAgLy8gVGhlIGJvdW5kIGluZGV4IGJ1ZmZlciBpcyBwYXJ0IG9mIHZlcnRleCBhcnJheSBvYmplY3Qgc3RhdGUuIFdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gbW9kaWZ5IHdoYXRldmVyIFZBTyBoYXBwZW5zIHRvIGJlIGN1cnJlbnRseSBib3VuZCwgc28gbWFrZSBzdXJlIHRoZSBkZWZhdWx0XG4gICAgICAgIC8vIHZlcnRleCBhcnJheSBwcm92aWRlZCBieSB0aGUgY29udGV4dCBpcyBib3VuZCBpbnN0ZWFkLlxuICAgICAgICB0aGlzLmNvbnRleHQudW5iaW5kVkFPKCk7XG5cbiAgICAgICAgY29udGV4dC5iaW5kRWxlbWVudEJ1ZmZlci5zZXQodGhpcy5idWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBhcnJheS5hcnJheUJ1ZmZlciwgdGhpcy5keW5hbWljRHJhdyA/IGdsLkRZTkFNSUNfRFJBVyA6IGdsLlNUQVRJQ19EUkFXKTtcblxuICAgICAgICBpZiAoIXRoaXMuZHluYW1pY0RyYXcpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBhcnJheS5hcnJheUJ1ZmZlcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGJpbmQoKSB7XG4gICAgICAgIHRoaXMuY29udGV4dC5iaW5kRWxlbWVudEJ1ZmZlci5zZXQodGhpcy5idWZmZXIpO1xuICAgIH1cblxuICAgIHVwZGF0ZURhdGEoYXJyYXk6IFN0cnVjdEFycmF5KSB7XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5jb250ZXh0LmdsO1xuICAgICAgICBhc3NlcnQodGhpcy5keW5hbWljRHJhdyk7XG4gICAgICAgIC8vIFRoZSByaWdodCBWQU8gd2lsbCBnZXQgdGhpcyBidWZmZXIgcmUtYm91bmQgbGF0ZXIgaW4gVmVydGV4QXJyYXlPYmplY3QjYmluZFxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzU2MjBcbiAgICAgICAgdGhpcy5jb250ZXh0LnVuYmluZFZBTygpO1xuICAgICAgICB0aGlzLmJpbmQoKTtcbiAgICAgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgMCwgYXJyYXkuYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5jb250ZXh0LmdsO1xuICAgICAgICBpZiAodGhpcy5idWZmZXIpIHtcbiAgICAgICAgICAgIGdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmJ1ZmZlcik7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5idWZmZXI7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEluZGV4QnVmZmVyO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgdHlwZSB7XG4gICAgU3RydWN0QXJyYXksXG4gICAgU3RydWN0QXJyYXlNZW1iZXJcbn0gZnJvbSAnLi4vdXRpbC9zdHJ1Y3RfYXJyYXknO1xuXG5pbXBvcnQgdHlwZSBQcm9ncmFtIGZyb20gJy4uL3JlbmRlci9wcm9ncmFtJztcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vZ2wvY29udGV4dCc7XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ30gQXR0cmlidXRlVHlwZVxuICogQHByaXZhdGVcbiAqIEByZWFkb25seVxuICovXG5jb25zdCBBdHRyaWJ1dGVUeXBlID0ge1xuICAgIEludDg6ICAgJ0JZVEUnLFxuICAgIFVpbnQ4OiAgJ1VOU0lHTkVEX0JZVEUnLFxuICAgIEludDE2OiAgJ1NIT1JUJyxcbiAgICBVaW50MTY6ICdVTlNJR05FRF9TSE9SVCcsXG4gICAgSW50MzI6ICAnSU5UJyxcbiAgICBVaW50MzI6ICdVTlNJR05FRF9JTlQnLFxuICAgIEZsb2F0MzI6ICdGTE9BVCdcbn07XG5cbi8qKlxuICogVGhlIGBWZXJ0ZXhCdWZmZXJgIGNsYXNzIHR1cm5zIGEgYFN0cnVjdEFycmF5YCBpbnRvIGEgV2ViR0wgYnVmZmVyLiBFYWNoIG1lbWJlciBvZiB0aGUgU3RydWN0QXJyYXknc1xuICogU3RydWN0IHR5cGUgaXMgY29udmVydGVkIHRvIGEgV2ViR0wgYXRyaWJ1dGUuXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBWZXJ0ZXhCdWZmZXIge1xuICAgIGxlbmd0aDogbnVtYmVyO1xuICAgIGF0dHJpYnV0ZXM6ICRSZWFkT25seUFycmF5PFN0cnVjdEFycmF5TWVtYmVyPjtcbiAgICBpdGVtU2l6ZTogbnVtYmVyO1xuICAgIGR5bmFtaWNEcmF3OiA/Ym9vbGVhbjtcbiAgICBjb250ZXh0OiBDb250ZXh0O1xuICAgIGJ1ZmZlcjogV2ViR0xCdWZmZXI7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gZHluYW1pY0RyYXcgV2hldGhlciB0aGlzIGJ1ZmZlciB3aWxsIGJlIHJlcGVhdGVkbHkgdXBkYXRlZC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQsIGFycmF5OiBTdHJ1Y3RBcnJheSwgYXR0cmlidXRlczogJFJlYWRPbmx5QXJyYXk8U3RydWN0QXJyYXlNZW1iZXI+LCBkeW5hbWljRHJhdz86IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5sZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7XG4gICAgICAgIHRoaXMuaXRlbVNpemUgPSBhcnJheS5ieXRlc1BlckVsZW1lbnQ7XG4gICAgICAgIHRoaXMuZHluYW1pY0RyYXcgPSBkeW5hbWljRHJhdztcblxuICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgICAgIHRoaXMuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgICAgIGNvbnRleHQuYmluZFZlcnRleEJ1ZmZlci5zZXQodGhpcy5idWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgYXJyYXkuYXJyYXlCdWZmZXIsIHRoaXMuZHluYW1pY0RyYXcgPyBnbC5EWU5BTUlDX0RSQVcgOiBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmR5bmFtaWNEcmF3KSB7XG4gICAgICAgICAgICBkZWxldGUgYXJyYXkuYXJyYXlCdWZmZXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBiaW5kKCkge1xuICAgICAgICB0aGlzLmNvbnRleHQuYmluZFZlcnRleEJ1ZmZlci5zZXQodGhpcy5idWZmZXIpO1xuICAgIH1cblxuICAgIHVwZGF0ZURhdGEoYXJyYXk6IFN0cnVjdEFycmF5KSB7XG4gICAgICAgIGFzc2VydChhcnJheS5sZW5ndGggPT09IHRoaXMubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmNvbnRleHQuZ2w7XG4gICAgICAgIHRoaXMuYmluZCgpO1xuICAgICAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgYXJyYXkuYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIGVuYWJsZUF0dHJpYnV0ZXMoZ2w6IFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgcHJvZ3JhbTogUHJvZ3JhbTwqPikge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuYXR0cmlidXRlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgY29uc3QgbWVtYmVyID0gdGhpcy5hdHRyaWJ1dGVzW2pdO1xuICAgICAgICAgICAgY29uc3QgYXR0cmliSW5kZXg6IG51bWJlciB8IHZvaWQgPSBwcm9ncmFtLmF0dHJpYnV0ZXNbbWVtYmVyLm5hbWVdO1xuICAgICAgICAgICAgaWYgKGF0dHJpYkluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShhdHRyaWJJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGF0dHJpYnV0ZSBwb2ludGVycyBpbiBhIFdlYkdMIGNvbnRleHRcbiAgICAgKiBAcGFyYW0gZ2wgVGhlIFdlYkdMIGNvbnRleHRcbiAgICAgKiBAcGFyYW0gcHJvZ3JhbSBUaGUgYWN0aXZlIFdlYkdMIHByb2dyYW1cbiAgICAgKiBAcGFyYW0gdmVydGV4T2Zmc2V0IEluZGV4IG9mIHRoZSBzdGFydGluZyB2ZXJ0ZXggb2YgdGhlIHNlZ21lbnRcbiAgICAgKi9cbiAgICBzZXRWZXJ0ZXhBdHRyaWJQb2ludGVycyhnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0LCBwcm9ncmFtOiBQcm9ncmFtPCo+LCB2ZXJ0ZXhPZmZzZXQ6ID9udW1iZXIpIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmF0dHJpYnV0ZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG1lbWJlciA9IHRoaXMuYXR0cmlidXRlc1tqXTtcbiAgICAgICAgICAgIGNvbnN0IGF0dHJpYkluZGV4OiBudW1iZXIgfCB2b2lkID0gcHJvZ3JhbS5hdHRyaWJ1dGVzW21lbWJlci5uYW1lXTtcblxuICAgICAgICAgICAgaWYgKGF0dHJpYkluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKFxuICAgICAgICAgICAgICAgICAgICBhdHRyaWJJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgbWVtYmVyLmNvbXBvbmVudHMsXG4gICAgICAgICAgICAgICAgICAgIChnbDogYW55KVtBdHRyaWJ1dGVUeXBlW21lbWJlci50eXBlXV0sXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1TaXplLFxuICAgICAgICAgICAgICAgICAgICBtZW1iZXIub2Zmc2V0ICsgKHRoaXMuaXRlbVNpemUgKiAodmVydGV4T2Zmc2V0IHx8IDApKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXN0cm95IHRoZSBHTCBidWZmZXIgYm91bmQgdG8gdGhlIGdpdmVuIFdlYkdMIGNvbnRleHRcbiAgICAgKi9cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuY29udGV4dC5nbDtcbiAgICAgICAgaWYgKHRoaXMuYnVmZmVyKSB7XG4gICAgICAgICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy5idWZmZXIpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuYnVmZmVyO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWZXJ0ZXhCdWZmZXI7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL2NvbG9yJztcblxuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1xuICAgIEJsZW5kRnVuY1R5cGUsXG4gICAgQmxlbmRFcXVhdGlvblR5cGUsXG4gICAgQ29sb3JNYXNrVHlwZSxcbiAgICBEZXB0aFJhbmdlVHlwZSxcbiAgICBEZXB0aE1hc2tUeXBlLFxuICAgIFN0ZW5jaWxGdW5jVHlwZSxcbiAgICBTdGVuY2lsT3BUeXBlLFxuICAgIERlcHRoRnVuY1R5cGUsXG4gICAgVGV4dHVyZVVuaXRUeXBlLFxuICAgIFZpZXdwb3J0VHlwZSxcbiAgICBDdWxsRmFjZU1vZGVUeXBlLFxuICAgIEZyb250RmFjZVR5cGUsXG59IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZhbHVlPFQ+IHtcbiAgICBjdXJyZW50OiBUO1xuICAgIGRlZmF1bHQ6IFQ7XG4gICAgZGlydHk6IGJvb2xlYW47XG4gICAgZ2V0KCk6IFQ7XG4gICAgc2V0RGVmYXVsdCgpOiB2b2lkO1xuICAgIHNldCh2YWx1ZTogVCk6IHZvaWQ7XG59XG5cbmNsYXNzIEJhc2VWYWx1ZTxUPiBpbXBsZW1lbnRzIFZhbHVlPFQ+IHtcbiAgICBnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0O1xuICAgIGN1cnJlbnQ6IFQ7XG4gICAgZGVmYXVsdDogVDtcbiAgICBkaXJ0eTogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQpIHtcbiAgICAgICAgdGhpcy5nbCA9IGNvbnRleHQuZ2w7XG4gICAgICAgIHRoaXMuZGVmYXVsdCA9IHRoaXMuZ2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLmRlZmF1bHQ7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXQoKTogVCB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnQ7XG4gICAgfVxuICAgIHNldCh2YWx1ZTogVCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAgIC8vIG92ZXJyaWRkZW4gaW4gY2hpbGQgY2xhc3NlcztcbiAgICB9XG5cbiAgICBnZXREZWZhdWx0KCk6IFQge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0OyAvLyBvdmVycmlkZW4gaW4gY2hpbGQgY2xhc3Nlc1xuICAgIH1cbiAgICBzZXREZWZhdWx0KCkge1xuICAgICAgICB0aGlzLnNldCh0aGlzLmRlZmF1bHQpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENsZWFyQ29sb3IgZXh0ZW5kcyBCYXNlVmFsdWU8Q29sb3I+IHtcbiAgICBnZXREZWZhdWx0KCk6IENvbG9yIHtcbiAgICAgICAgcmV0dXJuIENvbG9yLnRyYW5zcGFyZW50O1xuICAgIH1cbiAgICBzZXQodjogQ29sb3IpIHtcbiAgICAgICAgY29uc3QgYyA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgaWYgKHYuciA9PT0gYy5yICYmIHYuZyA9PT0gYy5nICYmIHYuYiA9PT0gYy5iICYmIHYuYSA9PT0gYy5hICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuZ2wuY2xlYXJDb2xvcih2LnIsIHYuZywgdi5iLCB2LmEpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2xlYXJEZXB0aCBleHRlbmRzIEJhc2VWYWx1ZTxudW1iZXI+IHtcbiAgICBnZXREZWZhdWx0KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBzZXQodjogbnVtYmVyKSB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5nbC5jbGVhckRlcHRoKHYpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2xlYXJTdGVuY2lsIGV4dGVuZHMgQmFzZVZhbHVlPG51bWJlcj4ge1xuICAgIGdldERlZmF1bHQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIHNldCh2OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmdsLmNsZWFyU3RlbmNpbCh2KTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbG9yTWFzayBleHRlbmRzIEJhc2VWYWx1ZTxDb2xvck1hc2tUeXBlPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBDb2xvck1hc2tUeXBlIHtcbiAgICAgICAgcmV0dXJuIFt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlXTtcbiAgICB9XG4gICAgc2V0KHY6IENvbG9yTWFza1R5cGUpIHtcbiAgICAgICAgY29uc3QgYyA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgaWYgKHZbMF0gPT09IGNbMF0gJiYgdlsxXSA9PT0gY1sxXSAmJiB2WzJdID09PSBjWzJdICYmIHZbM10gPT09IGNbM10gJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5nbC5jb2xvck1hc2sodlswXSwgdlsxXSwgdlsyXSwgdlszXSk7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEZXB0aE1hc2sgZXh0ZW5kcyBCYXNlVmFsdWU8RGVwdGhNYXNrVHlwZT4ge1xuICAgIGdldERlZmF1bHQoKTogRGVwdGhNYXNrVHlwZSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBzZXQodjogRGVwdGhNYXNrVHlwZSk6IHZvaWQge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuZ2wuZGVwdGhNYXNrKHYpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3RlbmNpbE1hc2sgZXh0ZW5kcyBCYXNlVmFsdWU8bnVtYmVyPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gMHhGRjtcbiAgICB9XG4gICAgc2V0KHY6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuZ2wuc3RlbmNpbE1hc2sodik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdGVuY2lsRnVuYyBleHRlbmRzIEJhc2VWYWx1ZTxTdGVuY2lsRnVuY1R5cGU+IHtcbiAgICBnZXREZWZhdWx0KCk6IFN0ZW5jaWxGdW5jVHlwZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmdW5jOiB0aGlzLmdsLkFMV0FZUyxcbiAgICAgICAgICAgIHJlZjogMCxcbiAgICAgICAgICAgIG1hc2s6IDB4RkZcbiAgICAgICAgfTtcbiAgICB9XG4gICAgc2V0KHY6IFN0ZW5jaWxGdW5jVHlwZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBjID0gdGhpcy5jdXJyZW50O1xuICAgICAgICBpZiAodi5mdW5jID09PSBjLmZ1bmMgJiYgdi5yZWYgPT09IGMucmVmICYmIHYubWFzayA9PT0gYy5tYXNrICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuZ2wuc3RlbmNpbEZ1bmModi5mdW5jLCB2LnJlZiwgdi5tYXNrKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN0ZW5jaWxPcCBleHRlbmRzIEJhc2VWYWx1ZTxTdGVuY2lsT3BUeXBlPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBTdGVuY2lsT3BUeXBlIHtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmdsO1xuICAgICAgICByZXR1cm4gW2dsLktFRVAsIGdsLktFRVAsIGdsLktFRVBdO1xuICAgIH1cbiAgICBzZXQodjogU3RlbmNpbE9wVHlwZSkge1xuICAgICAgICBjb25zdCBjID0gdGhpcy5jdXJyZW50O1xuICAgICAgICBpZiAodlswXSA9PT0gY1swXSAmJiB2WzFdID09PSBjWzFdICYmIHZbMl0gPT09IGNbMl0gJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5nbC5zdGVuY2lsT3AodlswXSwgdlsxXSwgdlsyXSk7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdGVuY2lsVGVzdCBleHRlbmRzIEJhc2VWYWx1ZTxib29sZWFuPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBzZXQodjogYm9vbGVhbikge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEZXB0aFJhbmdlIGV4dGVuZHMgQmFzZVZhbHVlPERlcHRoUmFuZ2VUeXBlPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBEZXB0aFJhbmdlVHlwZSB7XG4gICAgICAgIHJldHVybiBbMCwgMV07XG4gICAgfVxuICAgIHNldCh2OiBEZXB0aFJhbmdlVHlwZSkge1xuICAgICAgICBjb25zdCBjID0gdGhpcy5jdXJyZW50O1xuICAgICAgICBpZiAodlswXSA9PT0gY1swXSAmJiB2WzFdID09PSBjWzFdICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuZ2wuZGVwdGhSYW5nZSh2WzBdLCB2WzFdKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERlcHRoVGVzdCBleHRlbmRzIEJhc2VWYWx1ZTxib29sZWFuPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBzZXQodjogYm9vbGVhbikge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgIGdsLmVuYWJsZShnbC5ERVBUSF9URVNUKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdsLmRpc2FibGUoZ2wuREVQVEhfVEVTVCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERlcHRoRnVuYyBleHRlbmRzIEJhc2VWYWx1ZTxEZXB0aEZ1bmNUeXBlPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBEZXB0aEZ1bmNUeXBlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2wuTEVTUztcbiAgICB9XG4gICAgc2V0KHY6IERlcHRoRnVuY1R5cGUpIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmdsLmRlcHRoRnVuYyh2KTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJsZW5kIGV4dGVuZHMgQmFzZVZhbHVlPGJvb2xlYW4+IHtcbiAgICBnZXREZWZhdWx0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHNldCh2OiBib29sZWFuKSB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmdsO1xuICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgZ2wuZW5hYmxlKGdsLkJMRU5EKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdsLmRpc2FibGUoZ2wuQkxFTkQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCbGVuZEZ1bmMgZXh0ZW5kcyBCYXNlVmFsdWU8QmxlbmRGdW5jVHlwZT4ge1xuICAgIGdldERlZmF1bHQoKTogQmxlbmRGdW5jVHlwZSB7XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgcmV0dXJuIFtnbC5PTkUsIGdsLlpFUk9dO1xuICAgIH1cbiAgICBzZXQodjogQmxlbmRGdW5jVHlwZSkge1xuICAgICAgICBjb25zdCBjID0gdGhpcy5jdXJyZW50O1xuICAgICAgICBpZiAodlswXSA9PT0gY1swXSAmJiB2WzFdID09PSBjWzFdICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuZ2wuYmxlbmRGdW5jKHZbMF0sIHZbMV0pO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmxlbmRDb2xvciBleHRlbmRzIEJhc2VWYWx1ZTxDb2xvcj4ge1xuICAgIGdldERlZmF1bHQoKTogQ29sb3Ige1xuICAgICAgICByZXR1cm4gQ29sb3IudHJhbnNwYXJlbnQ7XG4gICAgfVxuICAgIHNldCh2OiBDb2xvcikge1xuICAgICAgICBjb25zdCBjID0gdGhpcy5jdXJyZW50O1xuICAgICAgICBpZiAodi5yID09PSBjLnIgJiYgdi5nID09PSBjLmcgJiYgdi5iID09PSBjLmIgJiYgdi5hID09PSBjLmEgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5nbC5ibGVuZENvbG9yKHYuciwgdi5nLCB2LmIsIHYuYSk7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCbGVuZEVxdWF0aW9uIGV4dGVuZHMgQmFzZVZhbHVlPEJsZW5kRXF1YXRpb25UeXBlPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBCbGVuZEVxdWF0aW9uVHlwZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdsLkZVTkNfQUREO1xuICAgIH1cbiAgICBzZXQodjogQmxlbmRFcXVhdGlvblR5cGUpIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmdsLmJsZW5kRXF1YXRpb24odik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDdWxsRmFjZSBleHRlbmRzIEJhc2VWYWx1ZTxib29sZWFuPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBzZXQodjogYm9vbGVhbikge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgIGdsLmVuYWJsZShnbC5DVUxMX0ZBQ0UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2wuZGlzYWJsZShnbC5DVUxMX0ZBQ0UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDdWxsRmFjZVNpZGUgZXh0ZW5kcyBCYXNlVmFsdWU8Q3VsbEZhY2VNb2RlVHlwZT4ge1xuICAgIGdldERlZmF1bHQoKTogQ3VsbEZhY2VNb2RlVHlwZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdsLkJBQ0s7XG4gICAgfVxuICAgIHNldCh2OiBDdWxsRmFjZU1vZGVUeXBlKSB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5nbC5jdWxsRmFjZSh2KTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEZyb250RmFjZSBleHRlbmRzIEJhc2VWYWx1ZTxGcm9udEZhY2VUeXBlPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBGcm9udEZhY2VUeXBlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2wuQ0NXO1xuICAgIH1cbiAgICBzZXQodjogRnJvbnRGYWNlVHlwZSkge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuZ2wuZnJvbnRGYWNlKHYpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUHJvZ3JhbSBleHRlbmRzIEJhc2VWYWx1ZTw/V2ViR0xQcm9ncmFtPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBXZWJHTFByb2dyYW0ge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgc2V0KHY6ID9XZWJHTFByb2dyYW0pIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmdsLnVzZVByb2dyYW0odik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBY3RpdmVUZXh0dXJlVW5pdCBleHRlbmRzIEJhc2VWYWx1ZTxUZXh0dXJlVW5pdFR5cGU+IHtcbiAgICBnZXREZWZhdWx0KCk6IFRleHR1cmVVbml0VHlwZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdsLlRFWFRVUkUwO1xuICAgIH1cbiAgICBzZXQodjogVGV4dHVyZVVuaXRUeXBlKSB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5nbC5hY3RpdmVUZXh0dXJlKHYpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVmlld3BvcnQgZXh0ZW5kcyBCYXNlVmFsdWU8Vmlld3BvcnRUeXBlPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBWaWV3cG9ydFR5cGUge1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuZ2w7XG4gICAgICAgIHJldHVybiBbMCwgMCwgZ2wuZHJhd2luZ0J1ZmZlcldpZHRoLCBnbC5kcmF3aW5nQnVmZmVySGVpZ2h0XTtcbiAgICB9XG4gICAgc2V0KHY6IFZpZXdwb3J0VHlwZSkge1xuICAgICAgICBjb25zdCBjID0gdGhpcy5jdXJyZW50O1xuICAgICAgICBpZiAodlswXSA9PT0gY1swXSAmJiB2WzFdID09PSBjWzFdICYmIHZbMl0gPT09IGNbMl0gJiYgdlszXSA9PT0gY1szXSAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmdsLnZpZXdwb3J0KHZbMF0sIHZbMV0sIHZbMl0sIHZbM10pO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmluZEZyYW1lYnVmZmVyIGV4dGVuZHMgQmFzZVZhbHVlPD9XZWJHTEZyYW1lYnVmZmVyPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBXZWJHTEZyYW1lYnVmZmVyIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHNldCh2OiA/V2ViR0xGcmFtZWJ1ZmZlcikge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB2KTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJpbmRSZW5kZXJidWZmZXIgZXh0ZW5kcyBCYXNlVmFsdWU8P1dlYkdMUmVuZGVyYnVmZmVyPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBXZWJHTFJlbmRlcmJ1ZmZlciB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBzZXQodjogP1dlYkdMUmVuZGVyYnVmZmVyKSB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmdsO1xuICAgICAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCaW5kVGV4dHVyZSBleHRlbmRzIEJhc2VWYWx1ZTw/V2ViR0xUZXh0dXJlPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBXZWJHTFRleHR1cmUge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgc2V0KHY6ID9XZWJHTFRleHR1cmUpIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuZ2w7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHYpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmluZFZlcnRleEJ1ZmZlciBleHRlbmRzIEJhc2VWYWx1ZTw/V2ViR0xCdWZmZXI+IHtcbiAgICBnZXREZWZhdWx0KCk6IFdlYkdMQnVmZmVyIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHNldCh2OiA/V2ViR0xCdWZmZXIpIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuZ2w7XG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB2KTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJpbmRFbGVtZW50QnVmZmVyIGV4dGVuZHMgQmFzZVZhbHVlPD9XZWJHTEJ1ZmZlcj4ge1xuICAgIGdldERlZmF1bHQoKTogV2ViR0xCdWZmZXIge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgc2V0KHY6ID9XZWJHTEJ1ZmZlcikge1xuICAgICAgICAvLyBBbHdheXMgcmViaW5kXG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCaW5kVmVydGV4QXJyYXlPRVMgZXh0ZW5kcyBCYXNlVmFsdWU8YW55PiB7XG4gICAgdmFvOiBhbnk7XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgIHN1cGVyKGNvbnRleHQpO1xuICAgICAgICB0aGlzLnZhbyA9IGNvbnRleHQuZXh0VmVydGV4QXJyYXlPYmplY3Q7XG4gICAgfVxuICAgIGdldERlZmF1bHQoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHNldCh2OiBhbnkpIHtcbiAgICAgICAgaWYgKCF0aGlzLnZhbyB8fCB2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy52YW8uYmluZFZlcnRleEFycmF5T0VTKHYpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGl4ZWxTdG9yZVVucGFjayBleHRlbmRzIEJhc2VWYWx1ZTxudW1iZXI+IHtcbiAgICBnZXREZWZhdWx0KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiA0O1xuICAgIH1cbiAgICBzZXQodjogbnVtYmVyKSB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmdsO1xuICAgICAgICBnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfQUxJR05NRU5ULCB2KTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhIGV4dGVuZHMgQmFzZVZhbHVlPGJvb2xlYW4+IHtcbiAgICBnZXREZWZhdWx0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHNldCh2OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmdsO1xuICAgICAgICBnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsICh2OiBhbnkpKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBpeGVsU3RvcmVVbnBhY2tGbGlwWSBleHRlbmRzIEJhc2VWYWx1ZTxib29sZWFuPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBzZXQodjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX0ZMSVBfWV9XRUJHTCwgKHY6IGFueSkpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5jbGFzcyBGcmFtZWJ1ZmZlckF0dGFjaG1lbnQ8VD4gZXh0ZW5kcyBCYXNlVmFsdWU8P1Q+IHtcbiAgICBwYXJlbnQ6IFdlYkdMRnJhbWVidWZmZXI7XG4gICAgY29udGV4dDogQ29udGV4dDtcblxuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQsIHBhcmVudDogV2ViR0xGcmFtZWJ1ZmZlcikge1xuICAgICAgICBzdXBlcihjb250ZXh0KTtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgfVxuICAgIGdldERlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbG9yQXR0YWNobWVudCBleHRlbmRzIEZyYW1lYnVmZmVyQXR0YWNobWVudDxXZWJHTFRleHR1cmU+IHtcbiAgICBzZXREaXJ0eSgpIHtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgfVxuICAgIHNldCh2OiA/V2ViR0xUZXh0dXJlKTogdm9pZCB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5jb250ZXh0LmJpbmRGcmFtZWJ1ZmZlci5zZXQodGhpcy5wYXJlbnQpO1xuICAgICAgICAvLyBub3RlOiBpdCdzIHBvc3NpYmxlIHRvIGF0dGFjaCBhIHJlbmRlcmJ1ZmZlciB0byB0aGUgY29sb3JcbiAgICAgICAgLy8gYXR0YWNobWVudCBwb2ludCwgYnV0IHRodXMgZmFyIE1CR0wgb25seSB1c2VzIHRleHR1cmVzIGZvciBjb2xvclxuICAgICAgICBjb25zdCBnbCA9IHRoaXMuZ2w7XG4gICAgICAgIGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV8yRCwgdiwgMCk7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEZXB0aEF0dGFjaG1lbnQgZXh0ZW5kcyBGcmFtZWJ1ZmZlckF0dGFjaG1lbnQ8V2ViR0xSZW5kZXJidWZmZXI+IHtcbiAgICBzZXQodjogP1dlYkdMUmVuZGVyYnVmZmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5jb250ZXh0LmJpbmRGcmFtZWJ1ZmZlci5zZXQodGhpcy5wYXJlbnQpO1xuICAgICAgICAvLyBub3RlOiBpdCdzIHBvc3NpYmxlIHRvIGF0dGFjaCBhIHRleHR1cmUgdG8gdGhlIGRlcHRoIGF0dGFjaG1lbnRcbiAgICAgICAgLy8gcG9pbnQsIGJ1dCB0aHVzIGZhciBNQkdMIG9ubHkgdXNlcyByZW5kZXJidWZmZXJzIGZvciBkZXB0aFxuICAgICAgICBjb25zdCBnbCA9IHRoaXMuZ2w7XG4gICAgICAgIGdsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBnbC5ERVBUSF9BVFRBQ0hNRU5ULCBnbC5SRU5ERVJCVUZGRVIsIHYpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcbmltcG9ydCB7Q29sb3JBdHRhY2htZW50LCBEZXB0aEF0dGFjaG1lbnR9IGZyb20gJy4vdmFsdWUnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4vY29udGV4dCc7XG5cbmNsYXNzIEZyYW1lYnVmZmVyIHtcbiAgICBjb250ZXh0OiBDb250ZXh0O1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgaGVpZ2h0OiBudW1iZXI7XG4gICAgZnJhbWVidWZmZXI6IFdlYkdMRnJhbWVidWZmZXI7XG4gICAgY29sb3JBdHRhY2htZW50OiBDb2xvckF0dGFjaG1lbnQ7XG4gICAgZGVwdGhBdHRhY2htZW50OiBEZXB0aEF0dGFjaG1lbnQ7XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgaGFzRGVwdGg6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuICAgICAgICBjb25zdCBmYm8gPSB0aGlzLmZyYW1lYnVmZmVyID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTtcblxuICAgICAgICB0aGlzLmNvbG9yQXR0YWNobWVudCA9IG5ldyBDb2xvckF0dGFjaG1lbnQoY29udGV4dCwgZmJvKTtcbiAgICAgICAgaWYgKGhhc0RlcHRoKSB7XG4gICAgICAgICAgICB0aGlzLmRlcHRoQXR0YWNobWVudCA9IG5ldyBEZXB0aEF0dGFjaG1lbnQoY29udGV4dCwgZmJvKTtcbiAgICAgICAgfVxuICAgICAgICBhc3NlcnQoZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgPT09IGdsLkZSQU1FQlVGRkVSX0NPTVBMRVRFKTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuY29udGV4dC5nbDtcblxuICAgICAgICBjb25zdCB0ZXh0dXJlID0gdGhpcy5jb2xvckF0dGFjaG1lbnQuZ2V0KCk7XG4gICAgICAgIGlmICh0ZXh0dXJlKSBnbC5kZWxldGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgICAgIGlmICh0aGlzLmRlcHRoQXR0YWNobWVudCkge1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyYnVmZmVyID0gdGhpcy5kZXB0aEF0dGFjaG1lbnQuZ2V0KCk7XG4gICAgICAgICAgICBpZiAocmVuZGVyYnVmZmVyKSBnbC5kZWxldGVSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZUZyYW1lYnVmZmVyKHRoaXMuZnJhbWVidWZmZXIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRnJhbWVidWZmZXI7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHR5cGUge0RlcHRoRnVuY1R5cGUsIERlcHRoTWFza1R5cGUsIERlcHRoUmFuZ2VUeXBlfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgQUxXQVlTID0gMHgwMjA3O1xuXG5jbGFzcyBEZXB0aE1vZGUge1xuICAgIGZ1bmM6IERlcHRoRnVuY1R5cGU7XG4gICAgbWFzazogRGVwdGhNYXNrVHlwZTtcbiAgICByYW5nZTogRGVwdGhSYW5nZVR5cGU7XG5cbiAgICAvLyBEZXB0aE1hc2sgZW51bXNcbiAgICBzdGF0aWMgUmVhZE9ubHk6IGJvb2xlYW47XG4gICAgc3RhdGljIFJlYWRXcml0ZTogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKGRlcHRoRnVuYzogRGVwdGhGdW5jVHlwZSwgZGVwdGhNYXNrOiBEZXB0aE1hc2tUeXBlLCBkZXB0aFJhbmdlOiBEZXB0aFJhbmdlVHlwZSkge1xuICAgICAgICB0aGlzLmZ1bmMgPSBkZXB0aEZ1bmM7XG4gICAgICAgIHRoaXMubWFzayA9IGRlcHRoTWFzaztcbiAgICAgICAgdGhpcy5yYW5nZSA9IGRlcHRoUmFuZ2U7XG4gICAgfVxuXG4gICAgc3RhdGljIGRpc2FibGVkOiAkUmVhZE9ubHk8RGVwdGhNb2RlPjtcbn1cblxuRGVwdGhNb2RlLlJlYWRPbmx5ID0gZmFsc2U7XG5EZXB0aE1vZGUuUmVhZFdyaXRlID0gdHJ1ZTtcblxuRGVwdGhNb2RlLmRpc2FibGVkID0gbmV3IERlcHRoTW9kZShBTFdBWVMsIERlcHRoTW9kZS5SZWFkT25seSwgWzAsIDFdKTtcblxuZXhwb3J0IGRlZmF1bHQgRGVwdGhNb2RlO1xuIiwiLy8gQGZsb3dcbmltcG9ydCB0eXBlIHtTdGVuY2lsT3BDb25zdGFudCwgU3RlbmNpbFRlc3R9IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBBTFdBWVMgPSAweDAyMDc7XG5jb25zdCBLRUVQID0gMHgxRTAwO1xuXG5jbGFzcyBTdGVuY2lsTW9kZSB7XG4gICAgdGVzdDogU3RlbmNpbFRlc3Q7XG4gICAgcmVmOiBudW1iZXI7XG4gICAgbWFzazogbnVtYmVyO1xuICAgIGZhaWw6IFN0ZW5jaWxPcENvbnN0YW50O1xuICAgIGRlcHRoRmFpbDogU3RlbmNpbE9wQ29uc3RhbnQ7XG4gICAgcGFzczogU3RlbmNpbE9wQ29uc3RhbnQ7XG5cbiAgICBjb25zdHJ1Y3Rvcih0ZXN0OiBTdGVuY2lsVGVzdCwgcmVmOiBudW1iZXIsIG1hc2s6IG51bWJlciwgZmFpbDogU3RlbmNpbE9wQ29uc3RhbnQsXG4gICAgICAgIGRlcHRoRmFpbDogU3RlbmNpbE9wQ29uc3RhbnQsIHBhc3M6IFN0ZW5jaWxPcENvbnN0YW50KSB7XG4gICAgICAgIHRoaXMudGVzdCA9IHRlc3Q7XG4gICAgICAgIHRoaXMucmVmID0gcmVmO1xuICAgICAgICB0aGlzLm1hc2sgPSBtYXNrO1xuICAgICAgICB0aGlzLmZhaWwgPSBmYWlsO1xuICAgICAgICB0aGlzLmRlcHRoRmFpbCA9IGRlcHRoRmFpbDtcbiAgICAgICAgdGhpcy5wYXNzID0gcGFzcztcbiAgICB9XG5cbiAgICBzdGF0aWMgZGlzYWJsZWQ6ICRSZWFkT25seTxTdGVuY2lsTW9kZT47XG59XG5cblN0ZW5jaWxNb2RlLmRpc2FibGVkID0gbmV3IFN0ZW5jaWxNb2RlKHtmdW5jOiBBTFdBWVMsIG1hc2s6IDB9LCAwLCAwLCBLRUVQLCBLRUVQLCBLRUVQKTtcblxuZXhwb3J0IGRlZmF1bHQgU3RlbmNpbE1vZGU7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IENvbG9yIGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5cbmltcG9ydCB0eXBlIHtCbGVuZEZ1bmNUeXBlLCBDb2xvck1hc2tUeXBlfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgWkVSTyA9IDB4MDAwMDtcbmNvbnN0IE9ORSA9IDB4MDAwMTtcbmNvbnN0IE9ORV9NSU5VU19TUkNfQUxQSEEgPSAweDAzMDM7XG5cbmNsYXNzIENvbG9yTW9kZSB7XG4gICAgYmxlbmRGdW5jdGlvbjogQmxlbmRGdW5jVHlwZTtcbiAgICBibGVuZENvbG9yOiBDb2xvcjtcbiAgICBtYXNrOiBDb2xvck1hc2tUeXBlO1xuXG4gICAgY29uc3RydWN0b3IoYmxlbmRGdW5jdGlvbjogQmxlbmRGdW5jVHlwZSwgYmxlbmRDb2xvcjogQ29sb3IsIG1hc2s6IENvbG9yTWFza1R5cGUpIHtcbiAgICAgICAgdGhpcy5ibGVuZEZ1bmN0aW9uID0gYmxlbmRGdW5jdGlvbjtcbiAgICAgICAgdGhpcy5ibGVuZENvbG9yID0gYmxlbmRDb2xvcjtcbiAgICAgICAgdGhpcy5tYXNrID0gbWFzaztcbiAgICB9XG5cbiAgICBzdGF0aWMgUmVwbGFjZTogQmxlbmRGdW5jVHlwZTtcblxuICAgIHN0YXRpYyBkaXNhYmxlZDogJFJlYWRPbmx5PENvbG9yTW9kZT47XG4gICAgc3RhdGljIHVuYmxlbmRlZDogJFJlYWRPbmx5PENvbG9yTW9kZT47XG4gICAgc3RhdGljIGFscGhhQmxlbmRlZDogJFJlYWRPbmx5PENvbG9yTW9kZT47XG59XG5cbkNvbG9yTW9kZS5SZXBsYWNlID0gW09ORSwgWkVST107XG5cbkNvbG9yTW9kZS5kaXNhYmxlZCA9IG5ldyBDb2xvck1vZGUoQ29sb3JNb2RlLlJlcGxhY2UsIENvbG9yLnRyYW5zcGFyZW50LCBbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdKTtcbkNvbG9yTW9kZS51bmJsZW5kZWQgPSBuZXcgQ29sb3JNb2RlKENvbG9yTW9kZS5SZXBsYWNlLCBDb2xvci50cmFuc3BhcmVudCwgW3RydWUsIHRydWUsIHRydWUsIHRydWVdKTtcbkNvbG9yTW9kZS5hbHBoYUJsZW5kZWQgPSBuZXcgQ29sb3JNb2RlKFtPTkUsIE9ORV9NSU5VU19TUkNfQUxQSEFdLCBDb2xvci50cmFuc3BhcmVudCwgW3RydWUsIHRydWUsIHRydWUsIHRydWVdKTtcblxuZXhwb3J0IGRlZmF1bHQgQ29sb3JNb2RlO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHR5cGUge0N1bGxGYWNlTW9kZVR5cGUsIEZyb250RmFjZVR5cGV9IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBCQUNLID0gMHgwNDA1O1xuY29uc3QgQ0NXID0gMHgwOTAxO1xuXG5jbGFzcyBDdWxsRmFjZU1vZGUge1xuICAgIGVuYWJsZTogYm9vbGVhbjtcbiAgICBtb2RlOiBDdWxsRmFjZU1vZGVUeXBlO1xuICAgIGZyb250RmFjZTogRnJvbnRGYWNlVHlwZTtcblxuICAgIGNvbnN0cnVjdG9yKGVuYWJsZTogYm9vbGVhbiwgbW9kZTogQ3VsbEZhY2VNb2RlVHlwZSwgZnJvbnRGYWNlOiBGcm9udEZhY2VUeXBlKSB7XG4gICAgICAgIHRoaXMuZW5hYmxlID0gZW5hYmxlO1xuICAgICAgICB0aGlzLm1vZGUgPSBtb2RlO1xuICAgICAgICB0aGlzLmZyb250RmFjZSA9IGZyb250RmFjZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZGlzYWJsZWQ6ICRSZWFkT25seTxDdWxsRmFjZU1vZGU+O1xuICAgIHN0YXRpYyBiYWNrQ0NXOiAkUmVhZE9ubHk8Q3VsbEZhY2VNb2RlPjtcbn1cblxuQ3VsbEZhY2VNb2RlLmRpc2FibGVkID0gbmV3IEN1bGxGYWNlTW9kZShmYWxzZSwgQkFDSywgQ0NXKTtcbkN1bGxGYWNlTW9kZS5iYWNrQ0NXID0gbmV3IEN1bGxGYWNlTW9kZSh0cnVlLCBCQUNLLCBDQ1cpO1xuXG5leHBvcnQgZGVmYXVsdCBDdWxsRmFjZU1vZGU7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IEluZGV4QnVmZmVyIGZyb20gJy4vaW5kZXhfYnVmZmVyJztcblxuaW1wb3J0IFZlcnRleEJ1ZmZlciBmcm9tICcuL3ZlcnRleF9idWZmZXInO1xuaW1wb3J0IEZyYW1lYnVmZmVyIGZyb20gJy4vZnJhbWVidWZmZXInO1xuaW1wb3J0IERlcHRoTW9kZSBmcm9tICcuL2RlcHRoX21vZGUnO1xuaW1wb3J0IFN0ZW5jaWxNb2RlIGZyb20gJy4vc3RlbmNpbF9tb2RlJztcbmltcG9ydCBDb2xvck1vZGUgZnJvbSAnLi9jb2xvcl9tb2RlJztcbmltcG9ydCBDdWxsRmFjZU1vZGUgZnJvbSAnLi9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQge2RlZXBFcXVhbH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7Q2xlYXJDb2xvciwgQ2xlYXJEZXB0aCwgQ2xlYXJTdGVuY2lsLCBDb2xvck1hc2ssIERlcHRoTWFzaywgU3RlbmNpbE1hc2ssIFN0ZW5jaWxGdW5jLCBTdGVuY2lsT3AsIFN0ZW5jaWxUZXN0LCBEZXB0aFJhbmdlLCBEZXB0aFRlc3QsIERlcHRoRnVuYywgQmxlbmQsIEJsZW5kRnVuYywgQmxlbmRDb2xvciwgQmxlbmRFcXVhdGlvbiwgQ3VsbEZhY2UsIEN1bGxGYWNlU2lkZSwgRnJvbnRGYWNlLCBQcm9ncmFtLCBBY3RpdmVUZXh0dXJlVW5pdCwgVmlld3BvcnQsIEJpbmRGcmFtZWJ1ZmZlciwgQmluZFJlbmRlcmJ1ZmZlciwgQmluZFRleHR1cmUsIEJpbmRWZXJ0ZXhCdWZmZXIsIEJpbmRFbGVtZW50QnVmZmVyLCBCaW5kVmVydGV4QXJyYXlPRVMsIFBpeGVsU3RvcmVVbnBhY2ssIFBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhLCBQaXhlbFN0b3JlVW5wYWNrRmxpcFl9IGZyb20gJy4vdmFsdWUnO1xuXG5pbXBvcnQgdHlwZSB7VHJpYW5nbGVJbmRleEFycmF5LCBMaW5lSW5kZXhBcnJheSwgTGluZVN0cmlwSW5kZXhBcnJheX0gZnJvbSAnLi4vZGF0YS9pbmRleF9hcnJheV90eXBlJztcbmltcG9ydCB0eXBlIHtcbiAgICBTdHJ1Y3RBcnJheSxcbiAgICBTdHJ1Y3RBcnJheU1lbWJlclxufSBmcm9tICcuLi91dGlsL3N0cnVjdF9hcnJheSc7XG5pbXBvcnQgdHlwZSBDb2xvciBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuXG50eXBlIENsZWFyQXJncyA9IHtcbiAgICBjb2xvcj86IENvbG9yLFxuICAgIGRlcHRoPzogbnVtYmVyLFxuICAgIHN0ZW5jaWw/OiBudW1iZXJcbn07XG5cbmNsYXNzIENvbnRleHQge1xuICAgIGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ7XG4gICAgZXh0VmVydGV4QXJyYXlPYmplY3Q6IGFueTtcbiAgICBjdXJyZW50TnVtQXR0cmlidXRlczogP251bWJlcjtcblxuICAgIGNsZWFyQ29sb3I6IENsZWFyQ29sb3I7XG4gICAgY2xlYXJEZXB0aDogQ2xlYXJEZXB0aDtcbiAgICBjbGVhclN0ZW5jaWw6IENsZWFyU3RlbmNpbDtcbiAgICBjb2xvck1hc2s6IENvbG9yTWFzaztcbiAgICBkZXB0aE1hc2s6IERlcHRoTWFzaztcbiAgICBzdGVuY2lsTWFzazogU3RlbmNpbE1hc2s7XG4gICAgc3RlbmNpbEZ1bmM6IFN0ZW5jaWxGdW5jO1xuICAgIHN0ZW5jaWxPcDogU3RlbmNpbE9wO1xuICAgIHN0ZW5jaWxUZXN0OiBTdGVuY2lsVGVzdDtcbiAgICBkZXB0aFJhbmdlOiBEZXB0aFJhbmdlO1xuICAgIGRlcHRoVGVzdDogRGVwdGhUZXN0O1xuICAgIGRlcHRoRnVuYzogRGVwdGhGdW5jO1xuICAgIGJsZW5kOiBCbGVuZDtcbiAgICBibGVuZEZ1bmM6IEJsZW5kRnVuYztcbiAgICBibGVuZENvbG9yOiBCbGVuZENvbG9yO1xuICAgIGJsZW5kRXF1YXRpb246IEJsZW5kRXF1YXRpb247XG4gICAgY3VsbEZhY2U6IEN1bGxGYWNlO1xuICAgIGN1bGxGYWNlU2lkZTogQ3VsbEZhY2VTaWRlO1xuICAgIGZyb250RmFjZTogRnJvbnRGYWNlO1xuICAgIHByb2dyYW06IFByb2dyYW07XG4gICAgYWN0aXZlVGV4dHVyZTogQWN0aXZlVGV4dHVyZVVuaXQ7XG4gICAgdmlld3BvcnQ6IFZpZXdwb3J0O1xuICAgIGJpbmRGcmFtZWJ1ZmZlcjogQmluZEZyYW1lYnVmZmVyO1xuICAgIGJpbmRSZW5kZXJidWZmZXI6IEJpbmRSZW5kZXJidWZmZXI7XG4gICAgYmluZFRleHR1cmU6IEJpbmRUZXh0dXJlO1xuICAgIGJpbmRWZXJ0ZXhCdWZmZXI6IEJpbmRWZXJ0ZXhCdWZmZXI7XG4gICAgYmluZEVsZW1lbnRCdWZmZXI6IEJpbmRFbGVtZW50QnVmZmVyO1xuICAgIGJpbmRWZXJ0ZXhBcnJheU9FUzogQmluZFZlcnRleEFycmF5T0VTO1xuICAgIHBpeGVsU3RvcmVVbnBhY2s6IFBpeGVsU3RvcmVVbnBhY2s7XG4gICAgcGl4ZWxTdG9yZVVucGFja1ByZW11bHRpcGx5QWxwaGE6IFBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhO1xuICAgIHBpeGVsU3RvcmVVbnBhY2tGbGlwWTogUGl4ZWxTdG9yZVVucGFja0ZsaXBZO1xuXG4gICAgZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljOiBhbnk7XG4gICAgZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljTWF4OiBhbnk7XG4gICAgZXh0VGV4dHVyZUhhbGZGbG9hdDogYW55O1xuICAgIGV4dFJlbmRlclRvVGV4dHVyZUhhbGZGbG9hdDogYW55O1xuICAgIGV4dFRpbWVyUXVlcnk6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQpIHtcbiAgICAgICAgdGhpcy5nbCA9IGdsO1xuICAgICAgICB0aGlzLmV4dFZlcnRleEFycmF5T2JqZWN0ID0gdGhpcy5nbC5nZXRFeHRlbnNpb24oJ09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Jyk7XG5cbiAgICAgICAgdGhpcy5jbGVhckNvbG9yID0gbmV3IENsZWFyQ29sb3IodGhpcyk7XG4gICAgICAgIHRoaXMuY2xlYXJEZXB0aCA9IG5ldyBDbGVhckRlcHRoKHRoaXMpO1xuICAgICAgICB0aGlzLmNsZWFyU3RlbmNpbCA9IG5ldyBDbGVhclN0ZW5jaWwodGhpcyk7XG4gICAgICAgIHRoaXMuY29sb3JNYXNrID0gbmV3IENvbG9yTWFzayh0aGlzKTtcbiAgICAgICAgdGhpcy5kZXB0aE1hc2sgPSBuZXcgRGVwdGhNYXNrKHRoaXMpO1xuICAgICAgICB0aGlzLnN0ZW5jaWxNYXNrID0gbmV3IFN0ZW5jaWxNYXNrKHRoaXMpO1xuICAgICAgICB0aGlzLnN0ZW5jaWxGdW5jID0gbmV3IFN0ZW5jaWxGdW5jKHRoaXMpO1xuICAgICAgICB0aGlzLnN0ZW5jaWxPcCA9IG5ldyBTdGVuY2lsT3AodGhpcyk7XG4gICAgICAgIHRoaXMuc3RlbmNpbFRlc3QgPSBuZXcgU3RlbmNpbFRlc3QodGhpcyk7XG4gICAgICAgIHRoaXMuZGVwdGhSYW5nZSA9IG5ldyBEZXB0aFJhbmdlKHRoaXMpO1xuICAgICAgICB0aGlzLmRlcHRoVGVzdCA9IG5ldyBEZXB0aFRlc3QodGhpcyk7XG4gICAgICAgIHRoaXMuZGVwdGhGdW5jID0gbmV3IERlcHRoRnVuYyh0aGlzKTtcbiAgICAgICAgdGhpcy5ibGVuZCA9IG5ldyBCbGVuZCh0aGlzKTtcbiAgICAgICAgdGhpcy5ibGVuZEZ1bmMgPSBuZXcgQmxlbmRGdW5jKHRoaXMpO1xuICAgICAgICB0aGlzLmJsZW5kQ29sb3IgPSBuZXcgQmxlbmRDb2xvcih0aGlzKTtcbiAgICAgICAgdGhpcy5ibGVuZEVxdWF0aW9uID0gbmV3IEJsZW5kRXF1YXRpb24odGhpcyk7XG4gICAgICAgIHRoaXMuY3VsbEZhY2UgPSBuZXcgQ3VsbEZhY2UodGhpcyk7XG4gICAgICAgIHRoaXMuY3VsbEZhY2VTaWRlID0gbmV3IEN1bGxGYWNlU2lkZSh0aGlzKTtcbiAgICAgICAgdGhpcy5mcm9udEZhY2UgPSBuZXcgRnJvbnRGYWNlKHRoaXMpO1xuICAgICAgICB0aGlzLnByb2dyYW0gPSBuZXcgUHJvZ3JhbSh0aGlzKTtcbiAgICAgICAgdGhpcy5hY3RpdmVUZXh0dXJlID0gbmV3IEFjdGl2ZVRleHR1cmVVbml0KHRoaXMpO1xuICAgICAgICB0aGlzLnZpZXdwb3J0ID0gbmV3IFZpZXdwb3J0KHRoaXMpO1xuICAgICAgICB0aGlzLmJpbmRGcmFtZWJ1ZmZlciA9IG5ldyBCaW5kRnJhbWVidWZmZXIodGhpcyk7XG4gICAgICAgIHRoaXMuYmluZFJlbmRlcmJ1ZmZlciA9IG5ldyBCaW5kUmVuZGVyYnVmZmVyKHRoaXMpO1xuICAgICAgICB0aGlzLmJpbmRUZXh0dXJlID0gbmV3IEJpbmRUZXh0dXJlKHRoaXMpO1xuICAgICAgICB0aGlzLmJpbmRWZXJ0ZXhCdWZmZXIgPSBuZXcgQmluZFZlcnRleEJ1ZmZlcih0aGlzKTtcbiAgICAgICAgdGhpcy5iaW5kRWxlbWVudEJ1ZmZlciA9IG5ldyBCaW5kRWxlbWVudEJ1ZmZlcih0aGlzKTtcbiAgICAgICAgdGhpcy5iaW5kVmVydGV4QXJyYXlPRVMgPSB0aGlzLmV4dFZlcnRleEFycmF5T2JqZWN0ICYmIG5ldyBCaW5kVmVydGV4QXJyYXlPRVModGhpcyk7XG4gICAgICAgIHRoaXMucGl4ZWxTdG9yZVVucGFjayA9IG5ldyBQaXhlbFN0b3JlVW5wYWNrKHRoaXMpO1xuICAgICAgICB0aGlzLnBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhID0gbmV3IFBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhKHRoaXMpO1xuICAgICAgICB0aGlzLnBpeGVsU3RvcmVVbnBhY2tGbGlwWSA9IG5ldyBQaXhlbFN0b3JlVW5wYWNrRmxpcFkodGhpcyk7XG5cbiAgICAgICAgdGhpcy5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMgPSAoXG4gICAgICAgICAgICBnbC5nZXRFeHRlbnNpb24oJ0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYycpIHx8XG4gICAgICAgICAgICBnbC5nZXRFeHRlbnNpb24oJ01PWl9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMnKSB8fFxuICAgICAgICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJLSVRfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJylcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRoaXMuZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKSB7XG4gICAgICAgICAgICB0aGlzLmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpY01heCA9IGdsLmdldFBhcmFtZXRlcih0aGlzLmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5NQVhfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5leHRUZXh0dXJlSGFsZkZsb2F0ID0gZ2wuZ2V0RXh0ZW5zaW9uKCdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Jyk7XG4gICAgICAgIGlmICh0aGlzLmV4dFRleHR1cmVIYWxmRmxvYXQpIHtcbiAgICAgICAgICAgIGdsLmdldEV4dGVuc2lvbignT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXInKTtcbiAgICAgICAgICAgIHRoaXMuZXh0UmVuZGVyVG9UZXh0dXJlSGFsZkZsb2F0ID0gZ2wuZ2V0RXh0ZW5zaW9uKCdFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZXh0VGltZXJRdWVyeSA9IGdsLmdldEV4dGVuc2lvbignRVhUX2Rpc2pvaW50X3RpbWVyX3F1ZXJ5Jyk7XG4gICAgfVxuXG4gICAgc2V0RGVmYXVsdCgpIHtcbiAgICAgICAgdGhpcy51bmJpbmRWQU8oKTtcblxuICAgICAgICB0aGlzLmNsZWFyQ29sb3Iuc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmNsZWFyRGVwdGguc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmNsZWFyU3RlbmNpbC5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuY29sb3JNYXNrLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5kZXB0aE1hc2suc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnN0ZW5jaWxNYXNrLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5zdGVuY2lsRnVuYy5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuc3RlbmNpbE9wLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5zdGVuY2lsVGVzdC5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuZGVwdGhSYW5nZS5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuZGVwdGhUZXN0LnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5kZXB0aEZ1bmMuc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmJsZW5kLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5ibGVuZEZ1bmMuc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmJsZW5kQ29sb3Iuc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmJsZW5kRXF1YXRpb24uc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmN1bGxGYWNlLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5jdWxsRmFjZVNpZGUuc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmZyb250RmFjZS5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMucHJvZ3JhbS5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuYWN0aXZlVGV4dHVyZS5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuYmluZEZyYW1lYnVmZmVyLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5waXhlbFN0b3JlVW5wYWNrLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5waXhlbFN0b3JlVW5wYWNrUHJlbXVsdGlwbHlBbHBoYS5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMucGl4ZWxTdG9yZVVucGFja0ZsaXBZLnNldERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBzZXREaXJ0eSgpIHtcbiAgICAgICAgdGhpcy5jbGVhckNvbG9yLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jbGVhckRlcHRoLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jbGVhclN0ZW5jaWwuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmNvbG9yTWFzay5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuZGVwdGhNYXNrLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdGVuY2lsTWFzay5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RlbmNpbEZ1bmMuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0ZW5jaWxPcC5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RlbmNpbFRlc3QuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmRlcHRoUmFuZ2UuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmRlcHRoVGVzdC5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuZGVwdGhGdW5jLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5ibGVuZC5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuYmxlbmRGdW5jLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5ibGVuZENvbG9yLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5ibGVuZEVxdWF0aW9uLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jdWxsRmFjZS5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuY3VsbEZhY2VTaWRlLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5mcm9udEZhY2UuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLnByb2dyYW0uZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmFjdGl2ZVRleHR1cmUuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLnZpZXdwb3J0LmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5iaW5kRnJhbWVidWZmZXIuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmJpbmRSZW5kZXJidWZmZXIuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmJpbmRUZXh0dXJlLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5iaW5kVmVydGV4QnVmZmVyLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5iaW5kRWxlbWVudEJ1ZmZlci5kaXJ0eSA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLmV4dFZlcnRleEFycmF5T2JqZWN0KSB7XG4gICAgICAgICAgICB0aGlzLmJpbmRWZXJ0ZXhBcnJheU9FUy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5waXhlbFN0b3JlVW5wYWNrLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5waXhlbFN0b3JlVW5wYWNrUHJlbXVsdGlwbHlBbHBoYS5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMucGl4ZWxTdG9yZVVucGFja0ZsaXBZLmRpcnR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjcmVhdGVJbmRleEJ1ZmZlcihhcnJheTogVHJpYW5nbGVJbmRleEFycmF5IHwgTGluZUluZGV4QXJyYXkgfCBMaW5lU3RyaXBJbmRleEFycmF5LCBkeW5hbWljRHJhdz86IGJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJbmRleEJ1ZmZlcih0aGlzLCBhcnJheSwgZHluYW1pY0RyYXcpO1xuICAgIH1cblxuICAgIGNyZWF0ZVZlcnRleEJ1ZmZlcihhcnJheTogU3RydWN0QXJyYXksIGF0dHJpYnV0ZXM6ICRSZWFkT25seUFycmF5PFN0cnVjdEFycmF5TWVtYmVyPiwgZHluYW1pY0RyYXc/OiBib29sZWFuKSB7XG4gICAgICAgIHJldHVybiBuZXcgVmVydGV4QnVmZmVyKHRoaXMsIGFycmF5LCBhdHRyaWJ1dGVzLCBkeW5hbWljRHJhdyk7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyYnVmZmVyKHN0b3JhZ2VGb3JtYXQ6IG51bWJlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmdsO1xuXG4gICAgICAgIGNvbnN0IHJibyA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO1xuICAgICAgICB0aGlzLmJpbmRSZW5kZXJidWZmZXIuc2V0KHJibyk7XG4gICAgICAgIGdsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wuUkVOREVSQlVGRkVSLCBzdG9yYWdlRm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5iaW5kUmVuZGVyYnVmZmVyLnNldChudWxsKTtcblxuICAgICAgICByZXR1cm4gcmJvO1xuICAgIH1cblxuICAgIGNyZWF0ZUZyYW1lYnVmZmVyKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBoYXNEZXB0aDogYm9vbGVhbikge1xuICAgICAgICByZXR1cm4gbmV3IEZyYW1lYnVmZmVyKHRoaXMsIHdpZHRoLCBoZWlnaHQsIGhhc0RlcHRoKTtcbiAgICB9XG5cbiAgICBjbGVhcih7Y29sb3IsIGRlcHRofTogQ2xlYXJBcmdzKSB7XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgbGV0IG1hc2sgPSAwO1xuXG4gICAgICAgIGlmIChjb2xvcikge1xuICAgICAgICAgICAgbWFzayB8PSBnbC5DT0xPUl9CVUZGRVJfQklUO1xuICAgICAgICAgICAgdGhpcy5jbGVhckNvbG9yLnNldChjb2xvcik7XG4gICAgICAgICAgICB0aGlzLmNvbG9yTWFzay5zZXQoW3RydWUsIHRydWUsIHRydWUsIHRydWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgZGVwdGggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBtYXNrIHw9IGdsLkRFUFRIX0JVRkZFUl9CSVQ7XG5cbiAgICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIHBsYXRmb3JtcyB3aGVyZSBjbGVhckRlcHRoIGRvZXNuJ3Qgc2VlbSB0byB3b3JrXG4gICAgICAgICAgICAvLyB3aXRob3V0IHJlc2V0aW5nIHRoZSBkZXB0aFJhbmdlLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzM0MzdcbiAgICAgICAgICAgIHRoaXMuZGVwdGhSYW5nZS5zZXQoWzAsIDFdKTtcblxuICAgICAgICAgICAgdGhpcy5jbGVhckRlcHRoLnNldChkZXB0aCk7XG4gICAgICAgICAgICB0aGlzLmRlcHRoTWFzay5zZXQodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZWUgbm90ZSBpbiBQYWludGVyI2NsZWFyU3RlbmNpbDogaW1wbGVtZW50IHRoaXMgdGhlIGVhc3kgd2F5IG9uY2UgR1BVIGJ1Zy93b3JrYXJvdW5kIGlzIGZpeGVkIHVwc3RyZWFtXG4gICAgICAgIC8vIGlmICh0eXBlb2Ygc3RlbmNpbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgLy8gICAgIG1hc2sgfD0gZ2wuU1RFTkNJTF9CVUZGRVJfQklUO1xuICAgICAgICAvLyAgICAgdGhpcy5jbGVhclN0ZW5jaWwuc2V0KHN0ZW5jaWwpO1xuICAgICAgICAvLyAgICAgdGhpcy5zdGVuY2lsTWFzay5zZXQoMHhGRik7XG4gICAgICAgIC8vIH1cblxuICAgICAgICBnbC5jbGVhcihtYXNrKTtcbiAgICB9XG5cbiAgICBzZXRDdWxsRmFjZShjdWxsRmFjZU1vZGU6ICRSZWFkT25seTxDdWxsRmFjZU1vZGU+KSB7XG4gICAgICAgIGlmIChjdWxsRmFjZU1vZGUuZW5hYmxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhpcy5jdWxsRmFjZS5zZXQoZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdWxsRmFjZS5zZXQodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmN1bGxGYWNlU2lkZS5zZXQoY3VsbEZhY2VNb2RlLm1vZGUpO1xuICAgICAgICAgICAgdGhpcy5mcm9udEZhY2Uuc2V0KGN1bGxGYWNlTW9kZS5mcm9udEZhY2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0RGVwdGhNb2RlKGRlcHRoTW9kZTogJFJlYWRPbmx5PERlcHRoTW9kZT4pIHtcbiAgICAgICAgaWYgKGRlcHRoTW9kZS5mdW5jID09PSB0aGlzLmdsLkFMV0FZUyAmJiAhZGVwdGhNb2RlLm1hc2spIHtcbiAgICAgICAgICAgIHRoaXMuZGVwdGhUZXN0LnNldChmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlcHRoVGVzdC5zZXQodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmRlcHRoRnVuYy5zZXQoZGVwdGhNb2RlLmZ1bmMpO1xuICAgICAgICAgICAgdGhpcy5kZXB0aE1hc2suc2V0KGRlcHRoTW9kZS5tYXNrKTtcbiAgICAgICAgICAgIHRoaXMuZGVwdGhSYW5nZS5zZXQoZGVwdGhNb2RlLnJhbmdlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldFN0ZW5jaWxNb2RlKHN0ZW5jaWxNb2RlOiAkUmVhZE9ubHk8U3RlbmNpbE1vZGU+KSB7XG4gICAgICAgIGlmIChzdGVuY2lsTW9kZS50ZXN0LmZ1bmMgPT09IHRoaXMuZ2wuQUxXQVlTICYmICFzdGVuY2lsTW9kZS5tYXNrKSB7XG4gICAgICAgICAgICB0aGlzLnN0ZW5jaWxUZXN0LnNldChmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0ZW5jaWxUZXN0LnNldCh0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuc3RlbmNpbE1hc2suc2V0KHN0ZW5jaWxNb2RlLm1hc2spO1xuICAgICAgICAgICAgdGhpcy5zdGVuY2lsT3Auc2V0KFtzdGVuY2lsTW9kZS5mYWlsLCBzdGVuY2lsTW9kZS5kZXB0aEZhaWwsIHN0ZW5jaWxNb2RlLnBhc3NdKTtcbiAgICAgICAgICAgIHRoaXMuc3RlbmNpbEZ1bmMuc2V0KHtcbiAgICAgICAgICAgICAgICBmdW5jOiBzdGVuY2lsTW9kZS50ZXN0LmZ1bmMsXG4gICAgICAgICAgICAgICAgcmVmOiBzdGVuY2lsTW9kZS5yZWYsXG4gICAgICAgICAgICAgICAgbWFzazogc3RlbmNpbE1vZGUudGVzdC5tYXNrXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldENvbG9yTW9kZShjb2xvck1vZGU6ICRSZWFkT25seTxDb2xvck1vZGU+KSB7XG4gICAgICAgIGlmIChkZWVwRXF1YWwoY29sb3JNb2RlLmJsZW5kRnVuY3Rpb24sIENvbG9yTW9kZS5SZXBsYWNlKSkge1xuICAgICAgICAgICAgdGhpcy5ibGVuZC5zZXQoZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ibGVuZC5zZXQodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmJsZW5kRnVuYy5zZXQoY29sb3JNb2RlLmJsZW5kRnVuY3Rpb24pO1xuICAgICAgICAgICAgdGhpcy5ibGVuZENvbG9yLnNldChjb2xvck1vZGUuYmxlbmRDb2xvcik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbG9yTWFzay5zZXQoY29sb3JNb2RlLm1hc2spO1xuICAgIH1cblxuICAgIHVuYmluZFZBTygpIHtcbiAgICAgICAgLy8gVW5iaW5kaW5nIHRoZSBWQU8gcHJldmVudHMgb3RoZXIgdGhpbmdzIChjdXN0b20gbGF5ZXJzLCBuZXcgYnVmZmVyIGNyZWF0aW9uKSBmcm9tXG4gICAgICAgIC8vIHVuaW50ZW50aW9uYWxseSBjaGFuZ2luZyB0aGUgc3RhdGUgb2YgdGhlIGxhc3QgVkFPIHVzZWQuXG4gICAgICAgIGlmICh0aGlzLmV4dFZlcnRleEFycmF5T2JqZWN0KSB7XG4gICAgICAgICAgICB0aGlzLmJpbmRWZXJ0ZXhBcnJheU9FUy5zZXQobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbnRleHQ7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2NyZWF0ZSBhcyBjcmVhdGVTb3VyY2V9IGZyb20gJy4vc291cmNlJztcblxuaW1wb3J0IFRpbGUgZnJvbSAnLi90aWxlJztcbmltcG9ydCB7RXZlbnQsIEVycm9yRXZlbnQsIEV2ZW50ZWR9IGZyb20gJy4uL3V0aWwvZXZlbnRlZCc7XG5pbXBvcnQgVGlsZUNhY2hlIGZyb20gJy4vdGlsZV9jYWNoZSc7XG5pbXBvcnQgTWVyY2F0b3JDb29yZGluYXRlIGZyb20gJy4uL2dlby9tZXJjYXRvcl9jb29yZGluYXRlJztcbmltcG9ydCB7a2V5c0RpZmZlcmVuY2UsIHZhbHVlc30gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi4vZGF0YS9leHRlbnQnO1xuaW1wb3J0IENvbnRleHQgZnJvbSAnLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgYnJvd3NlciBmcm9tICcuLi91dGlsL2Jyb3dzZXInO1xuaW1wb3J0IHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuL3RpbGVfaWQnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IFNvdXJjZUZlYXR1cmVTdGF0ZSBmcm9tICcuL3NvdXJjZV9zdGF0ZSc7XG5cbmltcG9ydCB0eXBlIHtTb3VyY2V9IGZyb20gJy4vc291cmNlJztcbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi91aS9tYXAnO1xuaW1wb3J0IHR5cGUgU3R5bGUgZnJvbSAnLi4vc3R5bGUvc3R5bGUnO1xuaW1wb3J0IHR5cGUgRGlzcGF0Y2hlciBmcm9tICcuLi91dGlsL2Rpc3BhdGNoZXInO1xuaW1wb3J0IHR5cGUgVHJhbnNmb3JtIGZyb20gJy4uL2dlby90cmFuc2Zvcm0nO1xuaW1wb3J0IHR5cGUge1RpbGVTdGF0ZX0gZnJvbSAnLi90aWxlJztcbmltcG9ydCB0eXBlIHtDYWxsYmFja30gZnJvbSAnLi4vdHlwZXMvY2FsbGJhY2snO1xuaW1wb3J0IHR5cGUge1NvdXJjZVNwZWNpZmljYXRpb259IGZyb20gJy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG4vKipcbiAqIGBTb3VyY2VDYWNoZWAgaXMgcmVzcG9uc2libGUgZm9yXG4gKlxuICogIC0gY3JlYXRpbmcgYW4gaW5zdGFuY2Ugb2YgYFNvdXJjZWBcbiAqICAtIGZvcndhcmRpbmcgZXZlbnRzIGZyb20gYFNvdXJjZWBcbiAqICAtIGNhY2hpbmcgdGlsZXMgbG9hZGVkIGZyb20gYW4gaW5zdGFuY2Ugb2YgYFNvdXJjZWBcbiAqICAtIGxvYWRpbmcgdGhlIHRpbGVzIG5lZWRlZCB0byByZW5kZXIgYSBnaXZlbiB2aWV3cG9ydFxuICogIC0gdW5sb2FkaW5nIHRoZSBjYWNoZWQgdGlsZXMgbm90IG5lZWRlZCB0byByZW5kZXIgYSBnaXZlbiB2aWV3cG9ydFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFNvdXJjZUNhY2hlIGV4dGVuZHMgRXZlbnRlZCB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyO1xuICAgIG1hcDogTWFwO1xuICAgIHN0eWxlOiBTdHlsZTtcblxuICAgIF9zb3VyY2U6IFNvdXJjZTtcbiAgICBfc291cmNlTG9hZGVkOiBib29sZWFuO1xuICAgIF9zb3VyY2VFcnJvcmVkOiBib29sZWFuO1xuICAgIF90aWxlczoge1tfOiBzdHJpbmddOiBUaWxlfTtcbiAgICBfcHJldkxuZzogbnVtYmVyIHwgdm9pZDtcbiAgICBfY2FjaGU6IFRpbGVDYWNoZTtcbiAgICBfdGltZXJzOiB7W186IGFueV06IFRpbWVvdXRJRH07XG4gICAgX2NhY2hlVGltZXJzOiB7W186IGFueV06IFRpbWVvdXRJRH07XG4gICAgX21heFRpbGVDYWNoZVNpemU6ID9udW1iZXI7XG4gICAgX3BhdXNlZDogYm9vbGVhbjtcbiAgICBfc2hvdWxkUmVsb2FkT25SZXN1bWU6IGJvb2xlYW47XG4gICAgX2NvdmVyZWRUaWxlczoge1tfOiBzdHJpbmddOiBib29sZWFufTtcbiAgICB0cmFuc2Zvcm06IFRyYW5zZm9ybTtcbiAgICBfaXNJZFJlbmRlcmFibGU6IChpZDogc3RyaW5nLCBzeW1ib2xMYXllcj86IGJvb2xlYW4pID0+IGJvb2xlYW47XG4gICAgdXNlZDogYm9vbGVhbjtcbiAgICBfc3RhdGU6IFNvdXJjZUZlYXR1cmVTdGF0ZTtcbiAgICBfbG9hZGVkUGFyZW50VGlsZXM6IHtbXzogc3RyaW5nXTogP1RpbGV9O1xuXG4gICAgc3RhdGljIG1heFVuZGVyem9vbWluZzogbnVtYmVyO1xuICAgIHN0YXRpYyBtYXhPdmVyem9vbWluZzogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IoaWQ6IHN0cmluZywgb3B0aW9uczogU291cmNlU3BlY2lmaWNhdGlvbiwgZGlzcGF0Y2hlcjogRGlzcGF0Y2hlcikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmlkID0gaWQ7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlciA9IGRpc3BhdGNoZXI7XG5cbiAgICAgICAgdGhpcy5vbignZGF0YScsIChlKSA9PiB7XG4gICAgICAgICAgICAvLyB0aGlzLl9zb3VyY2VMb2FkZWQgc2lnbmlmaWVzIHRoYXQgdGhlIFRpbGVKU09OIGlzIGxvYWRlZCBpZiBhcHBsaWNhYmxlLlxuICAgICAgICAgICAgLy8gaWYgdGhlIHNvdXJjZSB0eXBlIGRvZXMgbm90IGNvbWUgd2l0aCBhIFRpbGVKU09OLCB0aGUgZmxhZyBzaWduaWZpZXMgdGhlXG4gICAgICAgICAgICAvLyBzb3VyY2UgZGF0YSBoYXMgbG9hZGVkIChpLmUgZ2VvanNvbiBoYXMgYmVlbiB0aWxlZCBvbiB0aGUgd29ya2VyIGFuZCBpcyByZWFkeSlcbiAgICAgICAgICAgIGlmIChlLmRhdGFUeXBlID09PSAnc291cmNlJyAmJiBlLnNvdXJjZURhdGFUeXBlID09PSAnbWV0YWRhdGEnKSB0aGlzLl9zb3VyY2VMb2FkZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAvLyBmb3Igc291cmNlcyB3aXRoIG11dGFibGUgZGF0YSwgdGhpcyBldmVudCBmaXJlcyB3aGVuIHRoZSB1bmRlcmx5aW5nIGRhdGFcbiAgICAgICAgICAgIC8vIHRvIGEgc291cmNlIGlzIGNoYW5nZWQuIChpLmUuIEdlb0pTT05Tb3VyY2Ujc2V0RGF0YSBhbmQgSW1hZ2VTb3VyY2Ujc2VyQ29vcmRpbmF0ZXMpXG4gICAgICAgICAgICBpZiAodGhpcy5fc291cmNlTG9hZGVkICYmICF0aGlzLl9wYXVzZWQgJiYgZS5kYXRhVHlwZSA9PT0gXCJzb3VyY2VcIiAmJiBlLnNvdXJjZURhdGFUeXBlID09PSAnY29udGVudCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRyYW5zZm9ybSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLnRyYW5zZm9ybSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm9uKCdlcnJvcicsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZUVycm9yZWQgPSB0cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9zb3VyY2UgPSBjcmVhdGVTb3VyY2UoaWQsIG9wdGlvbnMsIGRpc3BhdGNoZXIsIHRoaXMpO1xuXG4gICAgICAgIHRoaXMuX3RpbGVzID0ge307XG4gICAgICAgIHRoaXMuX2NhY2hlID0gbmV3IFRpbGVDYWNoZSgwLCB0aGlzLl91bmxvYWRUaWxlLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLl90aW1lcnMgPSB7fTtcbiAgICAgICAgdGhpcy5fY2FjaGVUaW1lcnMgPSB7fTtcbiAgICAgICAgdGhpcy5fbWF4VGlsZUNhY2hlU2l6ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuX2xvYWRlZFBhcmVudFRpbGVzID0ge307XG5cbiAgICAgICAgdGhpcy5fY292ZXJlZFRpbGVzID0ge307XG4gICAgICAgIHRoaXMuX3N0YXRlID0gbmV3IFNvdXJjZUZlYXR1cmVTdGF0ZSgpO1xuICAgIH1cblxuICAgIG9uQWRkKG1hcDogTWFwKSB7XG4gICAgICAgIHRoaXMubWFwID0gbWFwO1xuICAgICAgICB0aGlzLl9tYXhUaWxlQ2FjaGVTaXplID0gbWFwID8gbWFwLl9tYXhUaWxlQ2FjaGVTaXplIDogbnVsbDtcbiAgICAgICAgaWYgKHRoaXMuX3NvdXJjZSAmJiB0aGlzLl9zb3VyY2Uub25BZGQpIHtcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5vbkFkZChtYXApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25SZW1vdmUobWFwOiBNYXApIHtcbiAgICAgICAgaWYgKHRoaXMuX3NvdXJjZSAmJiB0aGlzLl9zb3VyY2Uub25SZW1vdmUpIHtcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5vblJlbW92ZShtYXApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRydWUgaWYgbm8gdGlsZSBkYXRhIGlzIHBlbmRpbmcsIHRpbGVzIHdpbGwgbm90IGNoYW5nZSB1bmxlc3NcbiAgICAgKiBhbiBhZGRpdGlvbmFsIEFQSSBjYWxsIGlzIHJlY2VpdmVkLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgbG9hZGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5fc291cmNlRXJyb3JlZCkgeyByZXR1cm4gdHJ1ZTsgfVxuICAgICAgICBpZiAoIXRoaXMuX3NvdXJjZUxvYWRlZCkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgICAgaWYgKCF0aGlzLl9zb3VyY2UubG9hZGVkKCkpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICAgIGZvciAoY29uc3QgdCBpbiB0aGlzLl90aWxlcykge1xuICAgICAgICAgICAgY29uc3QgdGlsZSA9IHRoaXMuX3RpbGVzW3RdO1xuICAgICAgICAgICAgaWYgKHRpbGUuc3RhdGUgIT09ICdsb2FkZWQnICYmIHRpbGUuc3RhdGUgIT09ICdlcnJvcmVkJylcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZ2V0U291cmNlKCk6IFNvdXJjZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2U7XG4gICAgfVxuXG4gICAgcGF1c2UoKSB7XG4gICAgICAgIHRoaXMuX3BhdXNlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcmVzdW1lKCkge1xuICAgICAgICBpZiAoIXRoaXMuX3BhdXNlZCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBzaG91bGRSZWxvYWQgPSB0aGlzLl9zaG91bGRSZWxvYWRPblJlc3VtZTtcbiAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3Nob3VsZFJlbG9hZE9uUmVzdW1lID0gZmFsc2U7XG4gICAgICAgIGlmIChzaG91bGRSZWxvYWQpIHRoaXMucmVsb2FkKCk7XG4gICAgICAgIGlmICh0aGlzLnRyYW5zZm9ybSkgdGhpcy51cGRhdGUodGhpcy50cmFuc2Zvcm0pO1xuICAgIH1cblxuICAgIF9sb2FkVGlsZSh0aWxlOiBUaWxlLCBjYWxsYmFjazogQ2FsbGJhY2s8dm9pZD4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZS5sb2FkVGlsZSh0aWxlLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgX3VubG9hZFRpbGUodGlsZTogVGlsZSkge1xuICAgICAgICBpZiAodGhpcy5fc291cmNlLnVubG9hZFRpbGUpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlLnVubG9hZFRpbGUodGlsZSwgKCkgPT4ge30pO1xuICAgIH1cblxuICAgIF9hYm9ydFRpbGUodGlsZTogVGlsZSkge1xuICAgICAgICBpZiAodGhpcy5fc291cmNlLmFib3J0VGlsZSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2UuYWJvcnRUaWxlKHRpbGUsICgpID0+IHt9KTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2Uuc2VyaWFsaXplKCk7XG4gICAgfVxuXG4gICAgcHJlcGFyZShjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgIGlmICAodGhpcy5fc291cmNlLnByZXBhcmUpIHtcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5wcmVwYXJlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zdGF0ZS5jb2FsZXNjZUNoYW5nZXModGhpcy5fdGlsZXMsIHRoaXMubWFwID8gdGhpcy5tYXAucGFpbnRlciA6IG51bGwpO1xuICAgICAgICBmb3IgKGNvbnN0IGkgaW4gdGhpcy5fdGlsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbGUgPSB0aGlzLl90aWxlc1tpXTtcbiAgICAgICAgICAgIHRpbGUudXBsb2FkKGNvbnRleHQpO1xuICAgICAgICAgICAgdGlsZS5wcmVwYXJlKHRoaXMubWFwLnN0eWxlLmltYWdlTWFuYWdlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYWxsIHRpbGUgaWRzIG9yZGVyZWQgd2l0aCB6LW9yZGVyLCBhbmQgY2FzdCB0byBudW1iZXJzXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBnZXRJZHMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiAodmFsdWVzKHRoaXMuX3RpbGVzKTogYW55KS5tYXAoKHRpbGU6IFRpbGUpID0+IHRpbGUudGlsZUlEKS5zb3J0KGNvbXBhcmVUaWxlSWQpLm1hcChpZCA9PiBpZC5rZXkpO1xuICAgIH1cblxuICAgIGdldFJlbmRlcmFibGVJZHMoc3ltYm9sTGF5ZXI/OiBib29sZWFuKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IHJlbmRlcmFibGVzOiBBcnJheTxUaWxlPiA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuX3RpbGVzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5faXNJZFJlbmRlcmFibGUoaWQsIHN5bWJvbExheWVyKSkgcmVuZGVyYWJsZXMucHVzaCh0aGlzLl90aWxlc1tpZF0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzeW1ib2xMYXllcikge1xuICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmFibGVzLnNvcnQoKGFfOiBUaWxlLCBiXzogVGlsZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGEgPSBhXy50aWxlSUQ7XG4gICAgICAgICAgICAgICAgY29uc3QgYiA9IGJfLnRpbGVJRDtcbiAgICAgICAgICAgICAgICBjb25zdCByb3RhdGVkQSA9IChuZXcgUG9pbnQoYS5jYW5vbmljYWwueCwgYS5jYW5vbmljYWwueSkpLl9yb3RhdGUodGhpcy50cmFuc2Zvcm0uYW5nbGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvdGF0ZWRCID0gKG5ldyBQb2ludChiLmNhbm9uaWNhbC54LCBiLmNhbm9uaWNhbC55KSkuX3JvdGF0ZSh0aGlzLnRyYW5zZm9ybS5hbmdsZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEub3ZlcnNjYWxlZFogLSBiLm92ZXJzY2FsZWRaIHx8IHJvdGF0ZWRCLnkgLSByb3RhdGVkQS55IHx8IHJvdGF0ZWRCLnggLSByb3RhdGVkQS54O1xuICAgICAgICAgICAgfSkubWFwKHRpbGUgPT4gdGlsZS50aWxlSUQua2V5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVuZGVyYWJsZXMubWFwKHRpbGUgPT4gdGlsZS50aWxlSUQpLnNvcnQoY29tcGFyZVRpbGVJZCkubWFwKGlkID0+IGlkLmtleSk7XG4gICAgfVxuXG4gICAgaGFzUmVuZGVyYWJsZVBhcmVudCh0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQpIHtcbiAgICAgICAgY29uc3QgcGFyZW50VGlsZSA9IHRoaXMuZmluZExvYWRlZFBhcmVudCh0aWxlSUQsIDApO1xuICAgICAgICBpZiAocGFyZW50VGlsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzSWRSZW5kZXJhYmxlKHBhcmVudFRpbGUudGlsZUlELmtleSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIF9pc0lkUmVuZGVyYWJsZShpZDogc3RyaW5nLCBzeW1ib2xMYXllcj86IGJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RpbGVzW2lkXSAmJiB0aGlzLl90aWxlc1tpZF0uaGFzRGF0YSgpICYmXG4gICAgICAgICAgICAhdGhpcy5fY292ZXJlZFRpbGVzW2lkXSAmJiAoc3ltYm9sTGF5ZXIgfHwgIXRoaXMuX3RpbGVzW2lkXS5ob2xkaW5nRm9yRmFkZSgpKTtcbiAgICB9XG5cbiAgICByZWxvYWQoKSB7XG4gICAgICAgIGlmICh0aGlzLl9wYXVzZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3Nob3VsZFJlbG9hZE9uUmVzdW1lID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NhY2hlLnJlc2V0KCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBpIGluIHRoaXMuX3RpbGVzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGlsZXNbaV0uc3RhdGUgIT09IFwiZXJyb3JlZFwiKSB0aGlzLl9yZWxvYWRUaWxlKGksICdyZWxvYWRpbmcnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9yZWxvYWRUaWxlKGlkOiBzdHJpbmcsIHN0YXRlOiBUaWxlU3RhdGUpIHtcbiAgICAgICAgY29uc3QgdGlsZSA9IHRoaXMuX3RpbGVzW2lkXTtcblxuICAgICAgICAvLyB0aGlzIHBvdGVudGlhbGx5IGRvZXMgbm90IGFkZHJlc3MgYWxsIHVuZGVybHlpbmdcbiAgICAgICAgLy8gaXNzdWVzIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy80MjUyXG4gICAgICAgIC8vIC0gaGFyZCB0byB0ZWxsIHdpdGhvdXQgcmVwcm8gc3RlcHNcbiAgICAgICAgaWYgKCF0aWxlKSByZXR1cm47XG5cbiAgICAgICAgLy8gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBcImxvYWRpbmdcIiB0aWxlcyBhbmQgXCJyZWxvYWRpbmdcIiBvciBcImV4cGlyZWRcIlxuICAgICAgICAvLyB0aWxlcyBpcyB0aGF0IFwicmVsb2FkaW5nXCIvXCJleHBpcmVkXCIgdGlsZXMgYXJlIFwicmVuZGVyYWJsZVwiLlxuICAgICAgICAvLyBUaGVyZWZvcmUsIGEgXCJsb2FkaW5nXCIgdGlsZSBjYW5ub3QgYmVjb21lIGEgXCJyZWxvYWRpbmdcIiB0aWxlIHdpdGhvdXRcbiAgICAgICAgLy8gZmlyc3QgYmVjb21pbmcgYSBcImxvYWRlZFwiIHRpbGUuXG4gICAgICAgIGlmICh0aWxlLnN0YXRlICE9PSAnbG9hZGluZycpIHtcbiAgICAgICAgICAgIHRpbGUuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvYWRUaWxlKHRpbGUsIHRoaXMuX3RpbGVMb2FkZWQuYmluZCh0aGlzLCB0aWxlLCBpZCwgc3RhdGUpKTtcbiAgICB9XG5cbiAgICBfdGlsZUxvYWRlZCh0aWxlOiBUaWxlLCBpZDogc3RyaW5nLCBwcmV2aW91c1N0YXRlOiBUaWxlU3RhdGUsIGVycjogP0Vycm9yKSB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHRpbGUuc3RhdGUgPSAnZXJyb3JlZCc7XG4gICAgICAgICAgICBpZiAoKGVycjogYW55KS5zdGF0dXMgIT09IDQwNCkgdGhpcy5fc291cmNlLmZpcmUobmV3IEVycm9yRXZlbnQoZXJyLCB7dGlsZX0pKTtcbiAgICAgICAgICAgIC8vIGNvbnRpbnVlIHRvIHRyeSBsb2FkaW5nIHBhcmVudC9jaGlsZHJlbiB0aWxlcyBpZiBhIHRpbGUgZG9lc24ndCBleGlzdCAoNDA0KVxuICAgICAgICAgICAgZWxzZSB0aGlzLnVwZGF0ZSh0aGlzLnRyYW5zZm9ybSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aWxlLnRpbWVBZGRlZCA9IGJyb3dzZXIubm93KCk7XG4gICAgICAgIGlmIChwcmV2aW91c1N0YXRlID09PSAnZXhwaXJlZCcpIHRpbGUucmVmcmVzaGVkVXBvbkV4cGlyYXRpb24gPSB0cnVlO1xuICAgICAgICB0aGlzLl9zZXRUaWxlUmVsb2FkVGltZXIoaWQsIHRpbGUpO1xuICAgICAgICBpZiAodGhpcy5nZXRTb3VyY2UoKS50eXBlID09PSAncmFzdGVyLWRlbScgJiYgdGlsZS5kZW0pIHRoaXMuX2JhY2tmaWxsREVNKHRpbGUpO1xuICAgICAgICB0aGlzLl9zdGF0ZS5pbml0aWFsaXplVGlsZVN0YXRlKHRpbGUsIHRoaXMubWFwID8gdGhpcy5tYXAucGFpbnRlciA6IG51bGwpO1xuXG4gICAgICAgIHRoaXMuX3NvdXJjZS5maXJlKG5ldyBFdmVudCgnZGF0YScsIHtkYXRhVHlwZTogJ3NvdXJjZScsIHRpbGUsIGNvb3JkOiB0aWxlLnRpbGVJRH0pKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEZvciByYXN0ZXIgdGVycmFpbiBzb3VyY2UsIGJhY2tmaWxsIERFTSB0byBlbGltaW5hdGUgdmlzaWJsZSB0aWxlIGJvdW5kYXJpZXNcbiAgICAqIEBwcml2YXRlXG4gICAgKi9cbiAgICBfYmFja2ZpbGxERU0odGlsZTogVGlsZSkge1xuICAgICAgICBjb25zdCByZW5kZXJhYmxlcyA9IHRoaXMuZ2V0UmVuZGVyYWJsZUlkcygpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlcmFibGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBib3JkZXJJZCA9IHJlbmRlcmFibGVzW2ldO1xuICAgICAgICAgICAgaWYgKHRpbGUubmVpZ2hib3JpbmdUaWxlcyAmJiB0aWxlLm5laWdoYm9yaW5nVGlsZXNbYm9yZGVySWRdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYm9yZGVyVGlsZSA9IHRoaXMuZ2V0VGlsZUJ5SUQoYm9yZGVySWQpO1xuICAgICAgICAgICAgICAgIGZpbGxCb3JkZXIodGlsZSwgYm9yZGVyVGlsZSk7XG4gICAgICAgICAgICAgICAgZmlsbEJvcmRlcihib3JkZXJUaWxlLCB0aWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGZpbGxCb3JkZXIodGlsZSwgYm9yZGVyVGlsZSkge1xuICAgICAgICAgICAgdGlsZS5uZWVkc0hpbGxzaGFkZVByZXBhcmUgPSB0cnVlO1xuICAgICAgICAgICAgbGV0IGR4ID0gYm9yZGVyVGlsZS50aWxlSUQuY2Fub25pY2FsLnggLSB0aWxlLnRpbGVJRC5jYW5vbmljYWwueDtcbiAgICAgICAgICAgIGNvbnN0IGR5ID0gYm9yZGVyVGlsZS50aWxlSUQuY2Fub25pY2FsLnkgLSB0aWxlLnRpbGVJRC5jYW5vbmljYWwueTtcbiAgICAgICAgICAgIGNvbnN0IGRpbSA9IE1hdGgucG93KDIsIHRpbGUudGlsZUlELmNhbm9uaWNhbC56KTtcbiAgICAgICAgICAgIGNvbnN0IGJvcmRlcklkID0gYm9yZGVyVGlsZS50aWxlSUQua2V5O1xuICAgICAgICAgICAgaWYgKGR4ID09PSAwICYmIGR5ID09PSAwKSByZXR1cm47XG5cbiAgICAgICAgICAgIGlmIChNYXRoLmFicyhkeSkgPiAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGR4KSA+IDEpIHtcbiAgICAgICAgICAgICAgICAvLyBBZGp1c3QgdGhlIGRlbHRhIGNvb3JkaW5hdGUgZm9yIHdvcmxkIHdyYXBhcm91bmQuXG4gICAgICAgICAgICAgICAgaWYgKE1hdGguYWJzKGR4ICsgZGltKSA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBkeCArPSBkaW07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChNYXRoLmFicyhkeCAtIGRpbSkgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZHggLT0gZGltO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghYm9yZGVyVGlsZS5kZW0gfHwgIXRpbGUuZGVtKSByZXR1cm47XG4gICAgICAgICAgICB0aWxlLmRlbS5iYWNrZmlsbEJvcmRlcihib3JkZXJUaWxlLmRlbSwgZHgsIGR5KTtcbiAgICAgICAgICAgIGlmICh0aWxlLm5laWdoYm9yaW5nVGlsZXMgJiYgdGlsZS5uZWlnaGJvcmluZ1RpbGVzW2JvcmRlcklkXSlcbiAgICAgICAgICAgICAgICB0aWxlLm5laWdoYm9yaW5nVGlsZXNbYm9yZGVySWRdLmJhY2tmaWxsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCBhIHNwZWNpZmljIHRpbGUgYnkgVGlsZUlEXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBnZXRUaWxlKHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCk6IFRpbGUge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUaWxlQnlJRCh0aWxlSUQua2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgYSBzcGVjaWZpYyB0aWxlIGJ5IGlkXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBnZXRUaWxlQnlJRChpZDogc3RyaW5nKTogVGlsZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90aWxlc1tpZF07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9yIGEgZ2l2ZW4gc2V0IG9mIHRpbGVzLCByZXRhaW4gY2hpbGRyZW4gdGhhdCBhcmUgbG9hZGVkIGFuZCBoYXZlIGEgem9vbVxuICAgICAqIGJldHdlZW4gYHpvb21gIChleGNsdXNpdmUpIGFuZCBgbWF4Q292ZXJpbmdab29tYCAoaW5jbHVzaXZlKVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX3JldGFpbkxvYWRlZENoaWxkcmVuKFxuICAgICAgICBpZGVhbFRpbGVzOiB7W186IGFueV06IE92ZXJzY2FsZWRUaWxlSUR9LFxuICAgICAgICB6b29tOiBudW1iZXIsXG4gICAgICAgIG1heENvdmVyaW5nWm9vbTogbnVtYmVyLFxuICAgICAgICByZXRhaW46IHtbXzogYW55XTogT3ZlcnNjYWxlZFRpbGVJRH1cbiAgICApIHtcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLl90aWxlcykge1xuICAgICAgICAgICAgbGV0IHRpbGUgPSB0aGlzLl90aWxlc1tpZF07XG5cbiAgICAgICAgICAgIC8vIG9ubHkgY29uc2lkZXIgcmVuZGVyYWJsZSB0aWxlcyB1cCB0byBtYXhDb3ZlcmluZ1pvb21cbiAgICAgICAgICAgIGlmIChyZXRhaW5baWRdIHx8XG4gICAgICAgICAgICAgICAgIXRpbGUuaGFzRGF0YSgpIHx8XG4gICAgICAgICAgICAgICAgdGlsZS50aWxlSUQub3ZlcnNjYWxlZFogPD0gem9vbSB8fFxuICAgICAgICAgICAgICAgIHRpbGUudGlsZUlELm92ZXJzY2FsZWRaID4gbWF4Q292ZXJpbmdab29tXG4gICAgICAgICAgICApIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAvLyBsb29wIHRocm91Z2ggcGFyZW50cyBhbmQgcmV0YWluIHRoZSB0b3Btb3N0IGxvYWRlZCBvbmUgaWYgZm91bmRcbiAgICAgICAgICAgIGxldCB0b3Btb3N0TG9hZGVkSUQgPSB0aWxlLnRpbGVJRDtcbiAgICAgICAgICAgIHdoaWxlICh0aWxlICYmIHRpbGUudGlsZUlELm92ZXJzY2FsZWRaID4gem9vbSArIDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJRCA9IHRpbGUudGlsZUlELnNjYWxlZFRvKHRpbGUudGlsZUlELm92ZXJzY2FsZWRaIC0gMSk7XG5cbiAgICAgICAgICAgICAgICB0aWxlID0gdGhpcy5fdGlsZXNbcGFyZW50SUQua2V5XTtcblxuICAgICAgICAgICAgICAgIGlmICh0aWxlICYmIHRpbGUuaGFzRGF0YSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvcG1vc3RMb2FkZWRJRCA9IHBhcmVudElEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGFuY2VzdG9ycyBvZiB0aGUgdG9wbW9zdCBsb2FkZWQgY2hpbGQgdG8gc2VlIGlmIHRoZXJlJ3Mgb25lIHRoYXQgbmVlZGVkIGl0XG4gICAgICAgICAgICBsZXQgdGlsZUlEID0gdG9wbW9zdExvYWRlZElEO1xuICAgICAgICAgICAgd2hpbGUgKHRpbGVJRC5vdmVyc2NhbGVkWiA+IHpvb20pIHtcbiAgICAgICAgICAgICAgICB0aWxlSUQgPSB0aWxlSUQuc2NhbGVkVG8odGlsZUlELm92ZXJzY2FsZWRaIC0gMSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoaWRlYWxUaWxlc1t0aWxlSUQua2V5XSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBmb3VuZCBhIHBhcmVudCB0aGF0IG5lZWRlZCBhIGxvYWRlZCBjaGlsZDsgcmV0YWluIHRoYXQgY2hpbGRcbiAgICAgICAgICAgICAgICAgICAgcmV0YWluW3RvcG1vc3RMb2FkZWRJRC5rZXldID0gdG9wbW9zdExvYWRlZElEO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kIGEgbG9hZGVkIHBhcmVudCBvZiB0aGUgZ2l2ZW4gdGlsZSAodXAgdG8gbWluQ292ZXJpbmdab29tKVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgZmluZExvYWRlZFBhcmVudCh0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQsIG1pbkNvdmVyaW5nWm9vbTogbnVtYmVyKTogP1RpbGUge1xuICAgICAgICBpZiAodGlsZUlELmtleSBpbiB0aGlzLl9sb2FkZWRQYXJlbnRUaWxlcykge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5fbG9hZGVkUGFyZW50VGlsZXNbdGlsZUlELmtleV07XG4gICAgICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC50aWxlSUQub3ZlcnNjYWxlZFogPj0gbWluQ292ZXJpbmdab29tKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgeiA9IHRpbGVJRC5vdmVyc2NhbGVkWiAtIDE7IHogPj0gbWluQ292ZXJpbmdab29tOyB6LS0pIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudFRpbGVJRCA9IHRpbGVJRC5zY2FsZWRUbyh6KTtcbiAgICAgICAgICAgIGNvbnN0IHRpbGUgPSB0aGlzLl9nZXRMb2FkZWRUaWxlKHBhcmVudFRpbGVJRCk7XG4gICAgICAgICAgICBpZiAodGlsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2dldExvYWRlZFRpbGUodGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEKTogP1RpbGUge1xuICAgICAgICBjb25zdCB0aWxlID0gdGhpcy5fdGlsZXNbdGlsZUlELmtleV07XG4gICAgICAgIGlmICh0aWxlICYmIHRpbGUuaGFzRGF0YSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGlsZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaWxlQ2FjaGUgaWdub3JlcyB3cmFwIGluIGxvb2t1cC5cbiAgICAgICAgY29uc3QgY2FjaGVkVGlsZSA9IHRoaXMuX2NhY2hlLmdldEJ5S2V5KHRpbGVJRC53cmFwcGVkKCkua2V5KTtcbiAgICAgICAgcmV0dXJuIGNhY2hlZFRpbGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzaXplcyB0aGUgdGlsZSBjYWNoZSBiYXNlZCBvbiB0aGUgY3VycmVudCB2aWV3cG9ydCdzIHNpemVcbiAgICAgKiBvciB0aGUgbWF4VGlsZUNhY2hlU2l6ZSBvcHRpb24gcGFzc2VkIGR1cmluZyBtYXAgY3JlYXRpb25cbiAgICAgKlxuICAgICAqIExhcmdlciB2aWV3cG9ydHMgdXNlIG1vcmUgdGlsZXMgYW5kIG5lZWQgbGFyZ2VyIGNhY2hlcy4gTGFyZ2VyIHZpZXdwb3J0c1xuICAgICAqIGFyZSBtb3JlIGxpa2VseSB0byBiZSBmb3VuZCBvbiBkZXZpY2VzIHdpdGggbW9yZSBtZW1vcnkgYW5kIG9uIHBhZ2VzIHdoZXJlXG4gICAgICogdGhlIG1hcCBpcyBtb3JlIGltcG9ydGFudC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHVwZGF0ZUNhY2hlU2l6ZSh0cmFuc2Zvcm06IFRyYW5zZm9ybSkge1xuICAgICAgICBjb25zdCB3aWR0aEluVGlsZXMgPSBNYXRoLmNlaWwodHJhbnNmb3JtLndpZHRoIC8gdGhpcy5fc291cmNlLnRpbGVTaXplKSArIDE7XG4gICAgICAgIGNvbnN0IGhlaWdodEluVGlsZXMgPSBNYXRoLmNlaWwodHJhbnNmb3JtLmhlaWdodCAvIHRoaXMuX3NvdXJjZS50aWxlU2l6ZSkgKyAxO1xuICAgICAgICBjb25zdCBhcHByb3hUaWxlc0luVmlldyA9IHdpZHRoSW5UaWxlcyAqIGhlaWdodEluVGlsZXM7XG4gICAgICAgIGNvbnN0IGNvbW1vblpvb21SYW5nZSA9IDU7XG5cbiAgICAgICAgY29uc3Qgdmlld0RlcGVuZGVudE1heFNpemUgPSBNYXRoLmZsb29yKGFwcHJveFRpbGVzSW5WaWV3ICogY29tbW9uWm9vbVJhbmdlKTtcbiAgICAgICAgY29uc3QgbWF4U2l6ZSA9IHR5cGVvZiB0aGlzLl9tYXhUaWxlQ2FjaGVTaXplID09PSAnbnVtYmVyJyA/IE1hdGgubWluKHRoaXMuX21heFRpbGVDYWNoZVNpemUsIHZpZXdEZXBlbmRlbnRNYXhTaXplKSA6IHZpZXdEZXBlbmRlbnRNYXhTaXplO1xuXG4gICAgICAgIHRoaXMuX2NhY2hlLnNldE1heFNpemUobWF4U2l6ZSk7XG4gICAgfVxuXG4gICAgaGFuZGxlV3JhcEp1bXAobG5nOiBudW1iZXIpIHtcbiAgICAgICAgLy8gT24gdG9wIG9mIHRoZSByZWd1bGFyIHoveC95IHZhbHVlcywgVGlsZUlEcyBoYXZlIGEgYHdyYXBgIHZhbHVlIHRoYXQgc3BlY2lmeVxuICAgICAgICAvLyB3aGljaCBjcHB5IG9mIHRoZSB3b3JsZCB0aGUgdGlsZSBiZWxvbmdzIHRvLiBGb3IgZXhhbXBsZSwgYXQgYGxuZzogMTBgIHlvdVxuICAgICAgICAvLyBtaWdodCByZW5kZXIgei94L3kvMCB3aGlsZSBhdCBgbG5nOiAzNzBgIHlvdSB3b3VsZCByZW5kZXIgei94L3kvMS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gV2hlbiBsbmcgdmFsdWVzIGdldCB3cmFwcGVkIChnb2luZyBmcm9tIGBsbmc6IDM3MGAgdG8gYGxvbmc6IDEwYCkgeW91IGV4cGVjdFxuICAgICAgICAvLyB0byBzZWUgdGhlIHNhbWUgdGhpbmcgb24gdGhlIHNjcmVlbiAoMzcwIGRlZ3JlZXMgYW5kIDEwIGRlZ3JlZXMgaXMgdGhlIHNhbWVcbiAgICAgICAgLy8gcGxhY2UgaW4gdGhlIHdvcmxkKSBidXQgYWxsIHRoZSBUaWxlSURzIHdpbGwgaGF2ZSBkaWZmZXJlbnQgd3JhcCB2YWx1ZXMuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEluIG9yZGVyIHRvIG1ha2UgdGhpcyB0cmFuc2l0aW9uIHNlYW1sZXNzLCB3ZSBjYWxjdWxhdGUgdGhlIHJvdW5kZWQgZGlmZmVyZW5jZSBvZlxuICAgICAgICAvLyBcIndvcmxkc1wiIGJldHdlZW4gdGhlIGxhc3QgZnJhbWUgYW5kIHRoZSBjdXJyZW50IGZyYW1lLiBJZiB0aGUgbWFwIHBhbm5lZCBieVxuICAgICAgICAvLyBhIHdvcmxkLCB0aGVuIHdlIGNhbiBhc3NpZ24gYWxsIHRoZSB0aWxlcyBuZXcgVGlsZUlEcyB3aXRoIHVwZGF0ZWQgd3JhcCB2YWx1ZXMuXG4gICAgICAgIC8vIEZvciBleGFtcGxlLCBhc3NpZ24gei94L3kvMSBhIG5ldyBpZDogei94L3kvMC4gSXQgaXMgdGhlIHNhbWUgdGlsZSwganVzdCByZW5kZXJlZFxuICAgICAgICAvLyBpbiBhIGRpZmZlcmVudCBwb3NpdGlvbi5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gVGhpcyBlbmFibGVzIHVzIHRvIHJldXNlIHRoZSB0aWxlcyBhdCBtb3JlIGlkZWFsIGxvY2F0aW9ucyBhbmQgcHJldmVudCBmbGlja2VyaW5nLlxuICAgICAgICBjb25zdCBwcmV2TG5nID0gdGhpcy5fcHJldkxuZyA9PT0gdW5kZWZpbmVkID8gbG5nIDogdGhpcy5fcHJldkxuZztcbiAgICAgICAgY29uc3QgbG5nRGlmZmVyZW5jZSA9IGxuZyAtIHByZXZMbmc7XG4gICAgICAgIGNvbnN0IHdvcmxkRGlmZmVyZW5jZSA9IGxuZ0RpZmZlcmVuY2UgLyAzNjA7XG4gICAgICAgIGNvbnN0IHdyYXBEZWx0YSA9IE1hdGgucm91bmQod29ybGREaWZmZXJlbmNlKTtcbiAgICAgICAgdGhpcy5fcHJldkxuZyA9IGxuZztcblxuICAgICAgICBpZiAod3JhcERlbHRhKSB7XG4gICAgICAgICAgICBjb25zdCB0aWxlczoge1tfOiBzdHJpbmddOiBUaWxlfSA9IHt9O1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5fdGlsZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aWxlID0gdGhpcy5fdGlsZXNba2V5XTtcbiAgICAgICAgICAgICAgICB0aWxlLnRpbGVJRCA9IHRpbGUudGlsZUlELnVud3JhcFRvKHRpbGUudGlsZUlELndyYXAgKyB3cmFwRGVsdGEpO1xuICAgICAgICAgICAgICAgIHRpbGVzW3RpbGUudGlsZUlELmtleV0gPSB0aWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdGlsZXMgPSB0aWxlcztcblxuICAgICAgICAgICAgLy8gUmVzZXQgdGlsZSByZWxvYWQgdGltZXJzXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuX3RpbWVycykge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lcnNbaWRdKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fdGltZXJzW2lkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5fdGlsZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aWxlID0gdGhpcy5fdGlsZXNbaWRdO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldFRpbGVSZWxvYWRUaW1lcihpZCwgdGlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRpbGVzIHRoYXQgYXJlIG91dHNpZGUgdGhlIHZpZXdwb3J0IGFuZCBhZGRzIG5ldyB0aWxlcyB0aGF0XG4gICAgICogYXJlIGluc2lkZSB0aGUgdmlld3BvcnQuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB1cGRhdGUodHJhbnNmb3JtOiBUcmFuc2Zvcm0pIHtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG4gICAgICAgIGlmICghdGhpcy5fc291cmNlTG9hZGVkIHx8IHRoaXMuX3BhdXNlZCkgeyByZXR1cm47IH1cblxuICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlU2l6ZSh0cmFuc2Zvcm0pO1xuICAgICAgICB0aGlzLmhhbmRsZVdyYXBKdW1wKHRoaXMudHJhbnNmb3JtLmNlbnRlci5sbmcpO1xuXG4gICAgICAgIC8vIENvdmVyZWQgaXMgYSBsaXN0IG9mIHJldGFpbmVkIHRpbGVzIHdobydzIGFyZWFzIGFyZSBmdWxseSBjb3ZlcmVkIGJ5IG90aGVyLFxuICAgICAgICAvLyBiZXR0ZXIsIHJldGFpbmVkIHRpbGVzLiBUaGV5IGFyZSBub3QgZHJhd24gc2VwYXJhdGVseS5cbiAgICAgICAgdGhpcy5fY292ZXJlZFRpbGVzID0ge307XG5cbiAgICAgICAgbGV0IGlkZWFsVGlsZUlEcztcbiAgICAgICAgaWYgKCF0aGlzLnVzZWQpIHtcbiAgICAgICAgICAgIGlkZWFsVGlsZUlEcyA9IFtdO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3NvdXJjZS50aWxlSUQpIHtcbiAgICAgICAgICAgIGlkZWFsVGlsZUlEcyA9IHRyYW5zZm9ybS5nZXRWaXNpYmxlVW53cmFwcGVkQ29vcmRpbmF0ZXModGhpcy5fc291cmNlLnRpbGVJRClcbiAgICAgICAgICAgICAgICAubWFwKCh1bndyYXBwZWQpID0+IG5ldyBPdmVyc2NhbGVkVGlsZUlEKHVud3JhcHBlZC5jYW5vbmljYWwueiwgdW53cmFwcGVkLndyYXAsIHVud3JhcHBlZC5jYW5vbmljYWwueiwgdW53cmFwcGVkLmNhbm9uaWNhbC54LCB1bndyYXBwZWQuY2Fub25pY2FsLnkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlkZWFsVGlsZUlEcyA9IHRyYW5zZm9ybS5jb3ZlcmluZ1RpbGVzKHtcbiAgICAgICAgICAgICAgICB0aWxlU2l6ZTogdGhpcy5fc291cmNlLnRpbGVTaXplLFxuICAgICAgICAgICAgICAgIG1pbnpvb206IHRoaXMuX3NvdXJjZS5taW56b29tLFxuICAgICAgICAgICAgICAgIG1heHpvb206IHRoaXMuX3NvdXJjZS5tYXh6b29tLFxuICAgICAgICAgICAgICAgIHJvdW5kWm9vbTogdGhpcy5fc291cmNlLnJvdW5kWm9vbSxcbiAgICAgICAgICAgICAgICByZXBhcnNlT3ZlcnNjYWxlZDogdGhpcy5fc291cmNlLnJlcGFyc2VPdmVyc2NhbGVkXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZS5oYXNUaWxlKSB7XG4gICAgICAgICAgICAgICAgaWRlYWxUaWxlSURzID0gaWRlYWxUaWxlSURzLmZpbHRlcigoY29vcmQpID0+ICh0aGlzLl9zb3VyY2UuaGFzVGlsZTogYW55KShjb29yZCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBvdmVyem9vbWluZy91bmRlcnpvb21pbmcgYW1vdW50cy5cbiAgICAgICAgY29uc3Qgem9vbSA9IHRyYW5zZm9ybS5jb3ZlcmluZ1pvb21MZXZlbCh0aGlzLl9zb3VyY2UpO1xuICAgICAgICBjb25zdCBtaW5Db3ZlcmluZ1pvb20gPSBNYXRoLm1heCh6b29tIC0gU291cmNlQ2FjaGUubWF4T3Zlcnpvb21pbmcsIHRoaXMuX3NvdXJjZS5taW56b29tKTtcbiAgICAgICAgY29uc3QgbWF4Q292ZXJpbmdab29tID0gTWF0aC5tYXgoem9vbSArIFNvdXJjZUNhY2hlLm1heFVuZGVyem9vbWluZywgIHRoaXMuX3NvdXJjZS5taW56b29tKTtcblxuICAgICAgICAvLyBSZXRhaW4gaXMgYSBsaXN0IG9mIHRpbGVzIHRoYXQgd2Ugc2hvdWxkbid0IGRlbGV0ZSwgZXZlbiBpZiB0aGV5IGFyZSBub3RcbiAgICAgICAgLy8gdGhlIG1vc3QgaWRlYWwgdGlsZSBmb3IgdGhlIGN1cnJlbnQgdmlld3BvcnQuIFRoaXMgbWF5IGluY2x1ZGUgdGlsZXMgbGlrZVxuICAgICAgICAvLyBwYXJlbnQgb3IgY2hpbGQgdGlsZXMgdGhhdCBhcmUgKmFscmVhZHkqIGxvYWRlZC5cbiAgICAgICAgY29uc3QgcmV0YWluID0gdGhpcy5fdXBkYXRlUmV0YWluZWRUaWxlcyhpZGVhbFRpbGVJRHMsIHpvb20pO1xuXG4gICAgICAgIGlmIChpc1Jhc3RlclR5cGUodGhpcy5fc291cmNlLnR5cGUpKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRzRm9yRmFkaW5nOiB7W186IHN0cmluZ106IE92ZXJzY2FsZWRUaWxlSUR9ID0ge307XG4gICAgICAgICAgICBjb25zdCBmYWRpbmdUaWxlcyA9IHt9O1xuICAgICAgICAgICAgY29uc3QgaWRzID0gT2JqZWN0LmtleXMocmV0YWluKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgb2YgaWRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGlsZUlEID0gcmV0YWluW2lkXTtcbiAgICAgICAgICAgICAgICBhc3NlcnQodGlsZUlELmtleSA9PT0gaWQpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdGlsZSA9IHRoaXMuX3RpbGVzW2lkXTtcbiAgICAgICAgICAgICAgICBpZiAoIXRpbGUgfHwgdGlsZS5mYWRlRW5kVGltZSAmJiB0aWxlLmZhZGVFbmRUaW1lIDw9IGJyb3dzZXIubm93KCkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlIHRpbGUgaXMgbG9hZGVkIGJ1dCBzdGlsbCBmYWRpbmcgaW4sIGZpbmQgcGFyZW50cyB0byBjcm9zcy1mYWRlIHdpdGggaXRcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRUaWxlID0gdGhpcy5maW5kTG9hZGVkUGFyZW50KHRpbGVJRCwgbWluQ292ZXJpbmdab29tKTtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50VGlsZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGRUaWxlKHBhcmVudFRpbGUudGlsZUlEKTtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50c0ZvckZhZGluZ1twYXJlbnRUaWxlLnRpbGVJRC5rZXldID0gcGFyZW50VGlsZS50aWxlSUQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZmFkaW5nVGlsZXNbaWRdID0gdGlsZUlEO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBmb3IgdGlsZXMgdGhhdCBhcmUgc3RpbGwgZmFkaW5nIGluLCBhbHNvIGZpbmQgY2hpbGRyZW4gdG8gY3Jvc3MtZmFkZSB3aXRoXG4gICAgICAgICAgICB0aGlzLl9yZXRhaW5Mb2FkZWRDaGlsZHJlbihmYWRpbmdUaWxlcywgem9vbSwgbWF4Q292ZXJpbmdab29tLCByZXRhaW4pO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHBhcmVudHNGb3JGYWRpbmcpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXJldGFpbltpZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgYSB0aWxlIGlzIG9ubHkgbmVlZGVkIGZvciBmYWRpbmcsIG1hcmsgaXQgYXMgY292ZXJlZCBzbyB0aGF0IGl0IGlzbid0IHJlbmRlcmVkIG9uIGl0J3Mgb3duLlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb3ZlcmVkVGlsZXNbaWRdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0YWluW2lkXSA9IHBhcmVudHNGb3JGYWRpbmdbaWRdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgcmV0YWluZWRJZCBpbiByZXRhaW4pIHtcbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSByZXRhaW5lZCB0aWxlcyBhbHdheXMgY2xlYXIgYW55IGV4aXN0aW5nIGZhZGUgaG9sZHNcbiAgICAgICAgICAgIC8vIHNvIHRoYXQgaWYgdGhleSdyZSByZW1vdmVkIGFnYWluIHRoZWlyIGZhZGUgdGltZXIgc3RhcnRzIGZyZXNoLlxuICAgICAgICAgICAgdGhpcy5fdGlsZXNbcmV0YWluZWRJZF0uY2xlYXJGYWRlSG9sZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVtb3ZlIHRoZSB0aWxlcyB3ZSBkb24ndCBuZWVkIGFueW1vcmUuXG4gICAgICAgIGNvbnN0IHJlbW92ZSA9IGtleXNEaWZmZXJlbmNlKHRoaXMuX3RpbGVzLCByZXRhaW4pO1xuICAgICAgICBmb3IgKGNvbnN0IHRpbGVJRCBvZiByZW1vdmUpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbGUgPSB0aGlzLl90aWxlc1t0aWxlSURdO1xuICAgICAgICAgICAgaWYgKHRpbGUuaGFzU3ltYm9sQnVja2V0cyAmJiAhdGlsZS5ob2xkaW5nRm9yRmFkZSgpKSB7XG4gICAgICAgICAgICAgICAgdGlsZS5zZXRIb2xkRHVyYXRpb24odGhpcy5tYXAuX2ZhZGVEdXJhdGlvbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aWxlLmhhc1N5bWJvbEJ1Y2tldHMgfHwgdGlsZS5zeW1ib2xGYWRlRmluaXNoZWQoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZVRpbGUodGlsZUlEKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbnN0cnVjdCBhIGNhY2hlIG9mIGxvYWRlZCBwYXJlbnRzXG4gICAgICAgIHRoaXMuX3VwZGF0ZUxvYWRlZFBhcmVudFRpbGVDYWNoZSgpO1xuICAgIH1cblxuICAgIHJlbGVhc2VTeW1ib2xGYWRlVGlsZXMoKSB7XG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5fdGlsZXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90aWxlc1tpZF0uaG9sZGluZ0ZvckZhZGUoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZVRpbGUoaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3VwZGF0ZVJldGFpbmVkVGlsZXMoaWRlYWxUaWxlSURzOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPiwgem9vbTogbnVtYmVyKToge1tfOiBzdHJpbmddOiBPdmVyc2NhbGVkVGlsZUlEfSB7XG4gICAgICAgIGNvbnN0IHJldGFpbjoge1tfOiBzdHJpbmddOiBPdmVyc2NhbGVkVGlsZUlEfSA9IHt9O1xuICAgICAgICBjb25zdCBjaGVja2VkOiB7W186IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9O1xuICAgICAgICBjb25zdCBtaW5Db3ZlcmluZ1pvb20gPSBNYXRoLm1heCh6b29tIC0gU291cmNlQ2FjaGUubWF4T3Zlcnpvb21pbmcsIHRoaXMuX3NvdXJjZS5taW56b29tKTtcbiAgICAgICAgY29uc3QgbWF4Q292ZXJpbmdab29tID0gTWF0aC5tYXgoem9vbSArIFNvdXJjZUNhY2hlLm1heFVuZGVyem9vbWluZywgIHRoaXMuX3NvdXJjZS5taW56b29tKTtcblxuICAgICAgICBjb25zdCBtaXNzaW5nVGlsZXMgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCB0aWxlSUQgb2YgaWRlYWxUaWxlSURzKSB7XG4gICAgICAgICAgICBjb25zdCB0aWxlID0gdGhpcy5fYWRkVGlsZSh0aWxlSUQpO1xuXG4gICAgICAgICAgICAvLyByZXRhaW4gdGhlIHRpbGUgZXZlbiBpZiBpdCdzIG5vdCBsb2FkZWQgYmVjYXVzZSBpdCdzIGFuIGlkZWFsIHRpbGUuXG4gICAgICAgICAgICByZXRhaW5bdGlsZUlELmtleV0gPSB0aWxlSUQ7XG5cbiAgICAgICAgICAgIGlmICh0aWxlLmhhc0RhdGEoKSkgY29udGludWU7XG5cbiAgICAgICAgICAgIGlmICh6b29tIDwgdGhpcy5fc291cmNlLm1heHpvb20pIHtcbiAgICAgICAgICAgICAgICAvLyBzYXZlIG1pc3NpbmcgdGlsZXMgdGhhdCBwb3RlbnRpYWxseSBoYXZlIGxvYWRlZCBjaGlsZHJlblxuICAgICAgICAgICAgICAgIG1pc3NpbmdUaWxlc1t0aWxlSUQua2V5XSA9IHRpbGVJRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJldGFpbiBhbnkgbG9hZGVkIGNoaWxkcmVuIG9mIGlkZWFsIHRpbGVzIHVwIHRvIG1heENvdmVyaW5nWm9vbVxuICAgICAgICB0aGlzLl9yZXRhaW5Mb2FkZWRDaGlsZHJlbihtaXNzaW5nVGlsZXMsIHpvb20sIG1heENvdmVyaW5nWm9vbSwgcmV0YWluKTtcblxuICAgICAgICBmb3IgKGNvbnN0IHRpbGVJRCBvZiBpZGVhbFRpbGVJRHMpIHtcbiAgICAgICAgICAgIGxldCB0aWxlID0gdGhpcy5fdGlsZXNbdGlsZUlELmtleV07XG5cbiAgICAgICAgICAgIGlmICh0aWxlLmhhc0RhdGEoKSkgY29udGludWU7XG5cbiAgICAgICAgICAgIC8vIFRoZSB0aWxlIHdlIHJlcXVpcmUgaXMgbm90IHlldCBsb2FkZWQgb3IgZG9lcyBub3QgZXhpc3Q7XG4gICAgICAgICAgICAvLyBBdHRlbXB0IHRvIGZpbmQgY2hpbGRyZW4gdGhhdCBmdWxseSBjb3ZlciBpdC5cblxuICAgICAgICAgICAgaWYgKHpvb20gKyAxID4gdGhpcy5fc291cmNlLm1heHpvb20pIHtcbiAgICAgICAgICAgICAgICAvLyBXZSdyZSBsb29raW5nIGZvciBhbiBvdmVyem9vbWVkIGNoaWxkIHRpbGUuXG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRDb29yZCA9IHRpbGVJRC5jaGlsZHJlbih0aGlzLl9zb3VyY2UubWF4em9vbSlbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRUaWxlID0gdGhpcy5nZXRUaWxlKGNoaWxkQ29vcmQpO1xuICAgICAgICAgICAgICAgIGlmICghIWNoaWxkVGlsZSAmJiBjaGlsZFRpbGUuaGFzRGF0YSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldGFpbltjaGlsZENvb3JkLmtleV0gPSBjaGlsZENvb3JkO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gdGlsZSBpcyBjb3ZlcmVkIGJ5IG92ZXJ6b29tZWQgY2hpbGRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIGFsbCA0IGltbWVkaWF0ZSBjaGlsZHJlbiBhcmUgbG9hZGVkIChpLmUuIHRoZSBtaXNzaW5nIGlkZWFsIHRpbGUgaXMgY292ZXJlZClcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRpbGVJRC5jaGlsZHJlbih0aGlzLl9zb3VyY2UubWF4em9vbSk7XG5cbiAgICAgICAgICAgICAgICBpZiAocmV0YWluW2NoaWxkcmVuWzBdLmtleV0gJiZcbiAgICAgICAgICAgICAgICAgICAgcmV0YWluW2NoaWxkcmVuWzFdLmtleV0gJiZcbiAgICAgICAgICAgICAgICAgICAgcmV0YWluW2NoaWxkcmVuWzJdLmtleV0gJiZcbiAgICAgICAgICAgICAgICAgICAgcmV0YWluW2NoaWxkcmVuWzNdLmtleV0pIGNvbnRpbnVlOyAvLyB0aWxlIGlzIGNvdmVyZWQgYnkgY2hpbGRyZW5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gV2UgY291bGRuJ3QgZmluZCBjaGlsZCB0aWxlcyB0aGF0IGVudGlyZWx5IGNvdmVyIHRoZSBpZGVhbCB0aWxlOyBsb29rIGZvciBwYXJlbnRzIG5vdy5cblxuICAgICAgICAgICAgLy8gQXMgd2UgYXNjZW5kIHVwIHRoZSB0aWxlIHB5cmFtaWQgb2YgdGhlIGlkZWFsIHRpbGUsIHdlIGNoZWNrIHdoZXRoZXIgdGhlIHBhcmVudFxuICAgICAgICAgICAgLy8gdGlsZSBoYXMgYmVlbiBwcmV2aW91c2x5IHJlcXVlc3RlZCAoYW5kIGVycm9yZWQgYmVjYXVzZSB3ZSBvbmx5IGxvb3Agb3ZlciB0aWxlcyB3aXRoIG5vIGRhdGEpXG4gICAgICAgICAgICAvLyBpbiBvcmRlciB0byBkZXRlcm1pbmUgaWYgd2UgbmVlZCB0byByZXF1ZXN0IGl0cyBwYXJlbnQuXG4gICAgICAgICAgICBsZXQgcGFyZW50V2FzUmVxdWVzdGVkID0gdGlsZS53YXNSZXF1ZXN0ZWQoKTtcblxuICAgICAgICAgICAgZm9yIChsZXQgb3ZlcnNjYWxlZFogPSB0aWxlSUQub3ZlcnNjYWxlZFogLSAxOyBvdmVyc2NhbGVkWiA+PSBtaW5Db3ZlcmluZ1pvb207IC0tb3ZlcnNjYWxlZFopIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHRpbGVJRC5zY2FsZWRUbyhvdmVyc2NhbGVkWik7XG5cbiAgICAgICAgICAgICAgICAvLyBCcmVhayBwYXJlbnQgdGlsZSBhc2NlbnQgaWYgdGhpcyByb3V0ZSBoYXMgYmVlbiBwcmV2aW91c2x5IGNoZWNrZWQgYnkgYW5vdGhlciBjaGlsZC5cbiAgICAgICAgICAgICAgICBpZiAoY2hlY2tlZFtwYXJlbnRJZC5rZXldKSBicmVhaztcbiAgICAgICAgICAgICAgICBjaGVja2VkW3BhcmVudElkLmtleV0gPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgdGlsZSA9IHRoaXMuZ2V0VGlsZShwYXJlbnRJZCk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aWxlICYmIHBhcmVudFdhc1JlcXVlc3RlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aWxlID0gdGhpcy5fYWRkVGlsZShwYXJlbnRJZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldGFpbltwYXJlbnRJZC5rZXldID0gcGFyZW50SWQ7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNhdmUgdGhlIGN1cnJlbnQgdmFsdWVzLCBzaW5jZSB0aGV5J3JlIHRoZSBwYXJlbnQgb2YgdGhlIG5leHQgaXRlcmF0aW9uXG4gICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBwYXJlbnQgdGlsZSBhc2NlbnQgbG9vcC5cbiAgICAgICAgICAgICAgICAgICAgcGFyZW50V2FzUmVxdWVzdGVkID0gdGlsZS53YXNSZXF1ZXN0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRpbGUuaGFzRGF0YSgpKSBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmV0YWluO1xuICAgIH1cblxuICAgIF91cGRhdGVMb2FkZWRQYXJlbnRUaWxlQ2FjaGUoKSB7XG4gICAgICAgIHRoaXMuX2xvYWRlZFBhcmVudFRpbGVzID0ge307XG5cbiAgICAgICAgZm9yIChjb25zdCB0aWxlS2V5IGluIHRoaXMuX3RpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gW107XG4gICAgICAgICAgICBsZXQgcGFyZW50VGlsZTogP1RpbGU7XG4gICAgICAgICAgICBsZXQgY3VycmVudElkID0gdGhpcy5fdGlsZXNbdGlsZUtleV0udGlsZUlEO1xuXG4gICAgICAgICAgICAvLyBGaW5kIHRoZSBjbG9zZXN0IGxvYWRlZCBhbmNlc3RvciBieSB0cmF2ZXJzaW5nIHRoZSB0aWxlIHRyZWUgdG93YXJkcyB0aGUgcm9vdCBhbmRcbiAgICAgICAgICAgIC8vIGNhY2hpbmcgcmVzdWx0cyBhbG9uZyB0aGUgd2F5XG4gICAgICAgICAgICB3aGlsZSAoY3VycmVudElkLm92ZXJzY2FsZWRaID4gMCkge1xuXG4gICAgICAgICAgICAgICAgLy8gRG8gd2UgaGF2ZSBhIGNhY2hlZCByZXN1bHQgZnJvbSBwcmV2aW91cyB0cmF2ZXJzYWxzP1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50SWQua2V5IGluIHRoaXMuX2xvYWRlZFBhcmVudFRpbGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFRpbGUgPSB0aGlzLl9sb2FkZWRQYXJlbnRUaWxlc1tjdXJyZW50SWQua2V5XTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcGF0aC5wdXNoKGN1cnJlbnRJZC5rZXkpO1xuXG4gICAgICAgICAgICAgICAgLy8gSXMgdGhlIHBhcmVudCBsb2FkZWQ/XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50SWQgPSBjdXJyZW50SWQuc2NhbGVkVG8oY3VycmVudElkLm92ZXJzY2FsZWRaIC0gMSk7XG4gICAgICAgICAgICAgICAgcGFyZW50VGlsZSA9IHRoaXMuX2dldExvYWRlZFRpbGUocGFyZW50SWQpO1xuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRUaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGN1cnJlbnRJZCA9IHBhcmVudElkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDYWNoZSB0aGUgcmVzdWx0IG9mIHRoaXMgdHJhdmVyc2FsIHRvIGFsbCBuZXdseSB2aXNpdGVkIHRpbGVzXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBwYXRoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9hZGVkUGFyZW50VGlsZXNba2V5XSA9IHBhcmVudFRpbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgYSB0aWxlLCBnaXZlbiBpdHMgY29vcmRpbmF0ZSwgdG8gdGhlIHB5cmFtaWQuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfYWRkVGlsZSh0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQpOiBUaWxlIHtcbiAgICAgICAgbGV0IHRpbGUgPSB0aGlzLl90aWxlc1t0aWxlSUQua2V5XTtcbiAgICAgICAgaWYgKHRpbGUpXG4gICAgICAgICAgICByZXR1cm4gdGlsZTtcblxuICAgICAgICB0aWxlID0gdGhpcy5fY2FjaGUuZ2V0QW5kUmVtb3ZlKHRpbGVJRCk7XG4gICAgICAgIGlmICh0aWxlKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRUaWxlUmVsb2FkVGltZXIodGlsZUlELmtleSwgdGlsZSk7XG4gICAgICAgICAgICAvLyBzZXQgdGhlIHRpbGVJRCBiZWNhdXNlIHRoZSBjYWNoZWQgdGlsZSBjb3VsZCBoYXZlIGhhZCBhIGRpZmZlcmVudCB3cmFwIHZhbHVlXG4gICAgICAgICAgICB0aWxlLnRpbGVJRCA9IHRpbGVJRDtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlLmluaXRpYWxpemVUaWxlU3RhdGUodGlsZSwgdGhpcy5tYXAgPyB0aGlzLm1hcC5wYWludGVyIDogbnVsbCk7XG4gICAgICAgICAgICBpZiAodGhpcy5fY2FjaGVUaW1lcnNbdGlsZUlELmtleV0pIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fY2FjaGVUaW1lcnNbdGlsZUlELmtleV0pO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jYWNoZVRpbWVyc1t0aWxlSUQua2V5XTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRUaWxlUmVsb2FkVGltZXIodGlsZUlELmtleSwgdGlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjYWNoZWQgPSBCb29sZWFuKHRpbGUpO1xuICAgICAgICBpZiAoIWNhY2hlZCkge1xuICAgICAgICAgICAgdGlsZSA9IG5ldyBUaWxlKHRpbGVJRCwgdGhpcy5fc291cmNlLnRpbGVTaXplICogdGlsZUlELm92ZXJzY2FsZUZhY3RvcigpKTtcbiAgICAgICAgICAgIHRoaXMuX2xvYWRUaWxlKHRpbGUsIHRoaXMuX3RpbGVMb2FkZWQuYmluZCh0aGlzLCB0aWxlLCB0aWxlSUQua2V5LCB0aWxlLnN0YXRlKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbXBvc3NpYmxlLCBidXQgc2lsZW5jZSBmbG93LlxuICAgICAgICBpZiAoIXRpbGUpIHJldHVybiAobnVsbDogYW55KTtcblxuICAgICAgICB0aWxlLnVzZXMrKztcbiAgICAgICAgdGhpcy5fdGlsZXNbdGlsZUlELmtleV0gPSB0aWxlO1xuICAgICAgICBpZiAoIWNhY2hlZCkgdGhpcy5fc291cmNlLmZpcmUobmV3IEV2ZW50KCdkYXRhbG9hZGluZycsIHt0aWxlLCBjb29yZDogdGlsZS50aWxlSUQsIGRhdGFUeXBlOiAnc291cmNlJ30pKTtcblxuICAgICAgICByZXR1cm4gdGlsZTtcbiAgICB9XG5cbiAgICBfc2V0VGlsZVJlbG9hZFRpbWVyKGlkOiBzdHJpbmcsIHRpbGU6IFRpbGUpIHtcbiAgICAgICAgaWYgKGlkIGluIHRoaXMuX3RpbWVycykge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyc1tpZF0pO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3RpbWVyc1tpZF07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBleHBpcnlUaW1lb3V0ID0gdGlsZS5nZXRFeHBpcnlUaW1lb3V0KCk7XG4gICAgICAgIGlmIChleHBpcnlUaW1lb3V0KSB7XG4gICAgICAgICAgICB0aGlzLl90aW1lcnNbaWRdID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVsb2FkVGlsZShpZCwgJ2V4cGlyZWQnKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fdGltZXJzW2lkXTtcbiAgICAgICAgICAgIH0sIGV4cGlyeVRpbWVvdXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGEgdGlsZSwgZ2l2ZW4gaXRzIGlkLCBmcm9tIHRoZSBweXJhbWlkXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfcmVtb3ZlVGlsZShpZDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHRpbGUgPSB0aGlzLl90aWxlc1tpZF07XG4gICAgICAgIGlmICghdGlsZSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICB0aWxlLnVzZXMtLTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3RpbGVzW2lkXTtcbiAgICAgICAgaWYgKHRoaXMuX3RpbWVyc1tpZF0pIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lcnNbaWRdKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl90aW1lcnNbaWRdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRpbGUudXNlcyA+IDApXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgaWYgKHRpbGUuaGFzRGF0YSgpICYmIHRpbGUuc3RhdGUgIT09ICdyZWxvYWRpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLl9jYWNoZS5hZGQodGlsZS50aWxlSUQsIHRpbGUsIHRpbGUuZ2V0RXhwaXJ5VGltZW91dCgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRpbGUuYWJvcnRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9hYm9ydFRpbGUodGlsZSk7XG4gICAgICAgICAgICB0aGlzLl91bmxvYWRUaWxlKHRpbGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFsbCB0aWxlcyBmcm9tIHRoaXMgcHlyYW1pZFxuICAgICAqL1xuICAgIGNsZWFyVGlsZXMoKSB7XG4gICAgICAgIHRoaXMuX3Nob3VsZFJlbG9hZE9uUmVzdW1lID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5fdGlsZXMpXG4gICAgICAgICAgICB0aGlzLl9yZW1vdmVUaWxlKGlkKTtcblxuICAgICAgICB0aGlzLl9jYWNoZS5yZXNldCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlYXJjaCB0aHJvdWdoIG91ciBjdXJyZW50IHRpbGVzIGFuZCBhdHRlbXB0IHRvIGZpbmQgdGhlIHRpbGVzIHRoYXRcbiAgICAgKiBjb3ZlciB0aGUgZ2l2ZW4gYm91bmRzLlxuICAgICAqIEBwYXJhbSBwb2ludFF1ZXJ5R2VvbWV0cnkgY29vcmRpbmF0ZXMgb2YgdGhlIGNvcm5lcnMgb2YgYm91bmRpbmcgcmVjdGFuZ2xlXG4gICAgICogQHJldHVybnMge0FycmF5PE9iamVjdD59IHJlc3VsdCBpdGVtcyBoYXZlIHt0aWxlLCBtaW5YLCBtYXhYLCBtaW5ZLCBtYXhZfSwgd2hlcmUgbWluL21heCBib3VuZGluZyB2YWx1ZXMgYXJlIHRoZSBnaXZlbiBib3VuZHMgdHJhbnNmb3JtZWQgaW4gaW50byB0aGUgY29vcmRpbmF0ZSBzcGFjZSBvZiB0aGlzIHRpbGUuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aWxlc0luKHBvaW50UXVlcnlHZW9tZXRyeTogQXJyYXk8UG9pbnQ+LCBtYXhQaXRjaFNjYWxlRmFjdG9yOiBudW1iZXIsIGhhczNETGF5ZXI6IGJvb2xlYW4pIHtcblxuICAgICAgICBjb25zdCB0aWxlUmVzdWx0cyA9IFtdO1xuXG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IHRoaXMudHJhbnNmb3JtO1xuICAgICAgICBpZiAoIXRyYW5zZm9ybSkgcmV0dXJuIHRpbGVSZXN1bHRzO1xuXG4gICAgICAgIGNvbnN0IGNhbWVyYVBvaW50UXVlcnlHZW9tZXRyeSA9IGhhczNETGF5ZXIgP1xuICAgICAgICAgICAgdHJhbnNmb3JtLmdldENhbWVyYVF1ZXJ5R2VvbWV0cnkocG9pbnRRdWVyeUdlb21ldHJ5KSA6XG4gICAgICAgICAgICBwb2ludFF1ZXJ5R2VvbWV0cnk7XG5cbiAgICAgICAgY29uc3QgcXVlcnlHZW9tZXRyeSA9IHBvaW50UXVlcnlHZW9tZXRyeS5tYXAoKHApID0+IHRyYW5zZm9ybS5wb2ludENvb3JkaW5hdGUocCkpO1xuICAgICAgICBjb25zdCBjYW1lcmFRdWVyeUdlb21ldHJ5ID0gY2FtZXJhUG9pbnRRdWVyeUdlb21ldHJ5Lm1hcCgocCkgPT4gdHJhbnNmb3JtLnBvaW50Q29vcmRpbmF0ZShwKSk7XG5cbiAgICAgICAgY29uc3QgaWRzID0gdGhpcy5nZXRJZHMoKTtcblxuICAgICAgICBsZXQgbWluWCA9IEluZmluaXR5O1xuICAgICAgICBsZXQgbWluWSA9IEluZmluaXR5O1xuICAgICAgICBsZXQgbWF4WCA9IC1JbmZpbml0eTtcbiAgICAgICAgbGV0IG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICAgICAgZm9yIChjb25zdCBwIG9mIGNhbWVyYVF1ZXJ5R2VvbWV0cnkpIHtcbiAgICAgICAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCBwLngpO1xuICAgICAgICAgICAgbWluWSA9IE1hdGgubWluKG1pblksIHAueSk7XG4gICAgICAgICAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgcC54KTtcbiAgICAgICAgICAgIG1heFkgPSBNYXRoLm1heChtYXhZLCBwLnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbGUgPSB0aGlzLl90aWxlc1tpZHNbaV1dO1xuICAgICAgICAgICAgaWYgKHRpbGUuaG9sZGluZ0ZvckZhZGUoKSkge1xuICAgICAgICAgICAgICAgIC8vIFRpbGVzIGhlbGQgZm9yIGZhZGluZyBhcmUgY292ZXJlZCBieSB0aWxlcyB0aGF0IGFyZSBjbG9zZXIgdG8gaWRlYWxcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRpbGVJRCA9IHRpbGUudGlsZUlEO1xuICAgICAgICAgICAgY29uc3Qgc2NhbGUgPSBNYXRoLnBvdygyLCB0cmFuc2Zvcm0uem9vbSAtIHRpbGUudGlsZUlELm92ZXJzY2FsZWRaKTtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFkZGluZyA9IG1heFBpdGNoU2NhbGVGYWN0b3IgKiB0aWxlLnF1ZXJ5UGFkZGluZyAqIEVYVEVOVCAvIHRpbGUudGlsZVNpemUgLyBzY2FsZTtcblxuICAgICAgICAgICAgY29uc3QgdGlsZVNwYWNlQm91bmRzID0gW1xuICAgICAgICAgICAgICAgIHRpbGVJRC5nZXRUaWxlUG9pbnQobmV3IE1lcmNhdG9yQ29vcmRpbmF0ZShtaW5YLCBtaW5ZKSksXG4gICAgICAgICAgICAgICAgdGlsZUlELmdldFRpbGVQb2ludChuZXcgTWVyY2F0b3JDb29yZGluYXRlKG1heFgsIG1heFkpKVxuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgaWYgKHRpbGVTcGFjZUJvdW5kc1swXS54IC0gcXVlcnlQYWRkaW5nIDwgRVhURU5UICYmIHRpbGVTcGFjZUJvdW5kc1swXS55IC0gcXVlcnlQYWRkaW5nIDwgRVhURU5UICYmXG4gICAgICAgICAgICAgICAgdGlsZVNwYWNlQm91bmRzWzFdLnggKyBxdWVyeVBhZGRpbmcgPj0gMCAmJiB0aWxlU3BhY2VCb3VuZHNbMV0ueSArIHF1ZXJ5UGFkZGluZyA+PSAwKSB7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0aWxlU3BhY2VRdWVyeUdlb21ldHJ5OiBBcnJheTxQb2ludD4gPSBxdWVyeUdlb21ldHJ5Lm1hcCgoYykgPT4gdGlsZUlELmdldFRpbGVQb2ludChjKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGlsZVNwYWNlQ2FtZXJhUXVlcnlHZW9tZXRyeSA9IGNhbWVyYVF1ZXJ5R2VvbWV0cnkubWFwKChjKSA9PiB0aWxlSUQuZ2V0VGlsZVBvaW50KGMpKTtcblxuICAgICAgICAgICAgICAgIHRpbGVSZXN1bHRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICB0aWxlLFxuICAgICAgICAgICAgICAgICAgICB0aWxlSUQsXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5R2VvbWV0cnk6IHRpbGVTcGFjZVF1ZXJ5R2VvbWV0cnksXG4gICAgICAgICAgICAgICAgICAgIGNhbWVyYVF1ZXJ5R2VvbWV0cnk6IHRpbGVTcGFjZUNhbWVyYVF1ZXJ5R2VvbWV0cnksXG4gICAgICAgICAgICAgICAgICAgIHNjYWxlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGlsZVJlc3VsdHM7XG4gICAgfVxuXG4gICAgZ2V0VmlzaWJsZUNvb3JkaW5hdGVzKHN5bWJvbExheWVyPzogYm9vbGVhbik6IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+IHtcbiAgICAgICAgY29uc3QgY29vcmRzID0gdGhpcy5nZXRSZW5kZXJhYmxlSWRzKHN5bWJvbExheWVyKS5tYXAoKGlkKSA9PiB0aGlzLl90aWxlc1tpZF0udGlsZUlEKTtcbiAgICAgICAgZm9yIChjb25zdCBjb29yZCBvZiBjb29yZHMpIHtcbiAgICAgICAgICAgIGNvb3JkLnBvc01hdHJpeCA9IHRoaXMudHJhbnNmb3JtLmNhbGN1bGF0ZVBvc01hdHJpeChjb29yZC50b1Vud3JhcHBlZCgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29vcmRzO1xuICAgIH1cblxuICAgIGhhc1RyYW5zaXRpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLl9zb3VyY2UuaGFzVHJhbnNpdGlvbigpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1Jhc3RlclR5cGUodGhpcy5fc291cmNlLnR5cGUpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuX3RpbGVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGlsZSA9IHRoaXMuX3RpbGVzW2lkXTtcbiAgICAgICAgICAgICAgICBpZiAodGlsZS5mYWRlRW5kVGltZSAhPT0gdW5kZWZpbmVkICYmIHRpbGUuZmFkZUVuZFRpbWUgPj0gYnJvd3Nlci5ub3coKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSB2YWx1ZSBvZiBhIHBhcnRpY3VsYXIgc3RhdGUgZm9yIGEgZmVhdHVyZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgc2V0RmVhdHVyZVN0YXRlKHNvdXJjZUxheWVyPzogc3RyaW5nLCBmZWF0dXJlSWQ6IG51bWJlciB8IHN0cmluZywgc3RhdGU6IE9iamVjdCkge1xuICAgICAgICBzb3VyY2VMYXllciA9IHNvdXJjZUxheWVyIHx8ICdfZ2VvanNvblRpbGVMYXllcic7XG4gICAgICAgIHRoaXMuX3N0YXRlLnVwZGF0ZVN0YXRlKHNvdXJjZUxheWVyLCBmZWF0dXJlSWQsIHN0YXRlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNldHMgdGhlIHZhbHVlIG9mIGEgcGFydGljdWxhciBzdGF0ZSBrZXkgZm9yIGEgZmVhdHVyZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcmVtb3ZlRmVhdHVyZVN0YXRlKHNvdXJjZUxheWVyPzogc3RyaW5nLCBmZWF0dXJlSWQ/OiBudW1iZXIgfCBzdHJpbmcsIGtleT86IHN0cmluZykge1xuICAgICAgICBzb3VyY2VMYXllciA9IHNvdXJjZUxheWVyIHx8ICdfZ2VvanNvblRpbGVMYXllcic7XG4gICAgICAgIHRoaXMuX3N0YXRlLnJlbW92ZUZlYXR1cmVTdGF0ZShzb3VyY2VMYXllciwgZmVhdHVyZUlkLCBrZXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgZW50aXJlIHN0YXRlIG9iamVjdCBmb3IgYSBmZWF0dXJlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBnZXRGZWF0dXJlU3RhdGUoc291cmNlTGF5ZXI/OiBzdHJpbmcsIGZlYXR1cmVJZDogbnVtYmVyIHwgc3RyaW5nKSB7XG4gICAgICAgIHNvdXJjZUxheWVyID0gc291cmNlTGF5ZXIgfHwgJ19nZW9qc29uVGlsZUxheWVyJztcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlLmdldFN0YXRlKHNvdXJjZUxheWVyLCBmZWF0dXJlSWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHNldCBvZiBrZXlzIHRoYXQgdGhlIHRpbGUgZGVwZW5kcyBvbi4gVGhpcyBhbGxvd3MgdGlsZXMgdG9cbiAgICAgKiBiZSByZWxvYWRlZCB3aGVuIHRoZWlyIGRlcGVuZGVuY2llcyBjaGFuZ2UuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBzZXREZXBlbmRlbmNpZXModGlsZUtleTogc3RyaW5nLCBuYW1lc3BhY2U6IHN0cmluZywgZGVwZW5kZW5jaWVzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIGNvbnN0IHRpbGUgPSB0aGlzLl90aWxlc1t0aWxlS2V5XTtcbiAgICAgICAgaWYgKHRpbGUpIHtcbiAgICAgICAgICAgIHRpbGUuc2V0RGVwZW5kZW5jaWVzKG5hbWVzcGFjZSwgZGVwZW5kZW5jaWVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbG9hZHMgYWxsIHRpbGVzIHRoYXQgZGVwZW5kIG9uIHRoZSBnaXZlbiBrZXlzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcmVsb2FkVGlsZXNGb3JEZXBlbmRlbmNpZXMobmFtZXNwYWNlczogQXJyYXk8c3RyaW5nPiwga2V5czogQXJyYXk8c3RyaW5nPikge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuX3RpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCB0aWxlID0gdGhpcy5fdGlsZXNbaWRdO1xuICAgICAgICAgICAgaWYgKHRpbGUuaGFzRGVwZW5kZW5jeShuYW1lc3BhY2VzLCBrZXlzKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbG9hZFRpbGUoaWQsICdyZWxvYWRpbmcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jYWNoZS5maWx0ZXIodGlsZSA9PiAhdGlsZS5oYXNEZXBlbmRlbmN5KG5hbWVzcGFjZXMsIGtleXMpKTtcbiAgICB9XG59XG5cblNvdXJjZUNhY2hlLm1heE92ZXJ6b29taW5nID0gMTA7XG5Tb3VyY2VDYWNoZS5tYXhVbmRlcnpvb21pbmcgPSAzO1xuXG5mdW5jdGlvbiBjb21wYXJlVGlsZUlkKGE6IE92ZXJzY2FsZWRUaWxlSUQsIGI6IE92ZXJzY2FsZWRUaWxlSUQpOiBudW1iZXIge1xuICAgIC8vIERpZmZlcmVudCBjb3BpZXMgb2YgdGhlIHdvcmxkIGFyZSBzb3J0ZWQgYmFzZWQgb24gdGhlaXIgZGlzdGFuY2UgdG8gdGhlIGNlbnRlci5cbiAgICAvLyBXcmFwIHZhbHVlcyBhcmUgY29udmVydGVkIHRvIHVuc2lnbmVkIGRpc3RhbmNlcyBieSByZXNlcnZpbmcgb2RkIG51bWJlciBmb3IgY29waWVzXG4gICAgLy8gd2l0aCBuZWdhdGl2ZSB3cmFwIGFuZCBldmVuIG51bWJlcnMgZm9yIGNvcGllcyB3aXRoIHBvc2l0aXZlIHdyYXAuXG4gICAgY29uc3QgYVdyYXAgPSBNYXRoLmFicyhhLndyYXAgKiAyKSAtICsoYS53cmFwIDwgMCk7XG4gICAgY29uc3QgYldyYXAgPSBNYXRoLmFicyhiLndyYXAgKiAyKSAtICsoYi53cmFwIDwgMCk7XG4gICAgcmV0dXJuIGEub3ZlcnNjYWxlZFogLSBiLm92ZXJzY2FsZWRaIHx8IGJXcmFwIC0gYVdyYXAgfHwgYi5jYW5vbmljYWwueSAtIGEuY2Fub25pY2FsLnkgfHwgYi5jYW5vbmljYWwueCAtIGEuY2Fub25pY2FsLng7XG59XG5cbmZ1bmN0aW9uIGlzUmFzdGVyVHlwZSh0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgPT09ICdyYXN0ZXInIHx8IHR5cGUgPT09ICdpbWFnZScgfHwgdHlwZSA9PT0gJ3ZpZGVvJztcbn1cblxuZXhwb3J0IGRlZmF1bHQgU291cmNlQ2FjaGU7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgd2luZG93IGZyb20gJy4uL3dpbmRvdyc7XG5pbXBvcnQgbWFwYm94Z2wgZnJvbSAnLi4vLi4vJztcblxuaW1wb3J0IHR5cGUge1dvcmtlckludGVyZmFjZX0gZnJvbSAnLi4vd2ViX3dvcmtlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpOiBXb3JrZXJJbnRlcmZhY2Uge1xuICAgIHJldHVybiAobmV3IHdpbmRvdy5Xb3JrZXIobWFwYm94Z2wud29ya2VyVXJsKTogYW55KTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBXZWJXb3JrZXIgZnJvbSAnLi93ZWJfd29ya2VyJztcbmltcG9ydCB0eXBlIHtXb3JrZXJJbnRlcmZhY2V9IGZyb20gJy4vd2ViX3dvcmtlcic7XG5pbXBvcnQgYnJvd3NlciBmcm9tICcuL2Jyb3dzZXInO1xuXG5leHBvcnQgY29uc3QgUFJFTE9BRF9QT09MX0lEID0gJ21hcGJveGdsX3ByZWxvYWRlZF93b3JrZXJfcG9vbCc7XG5cbi8qKlxuICogQ29uc3RydWN0cyBhIHdvcmtlciBwb29sLlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV29ya2VyUG9vbCB7XG4gICAgc3RhdGljIHdvcmtlckNvdW50OiBudW1iZXI7XG5cbiAgICBhY3RpdmU6IHtbXzogbnVtYmVyIHwgc3RyaW5nXTogYm9vbGVhbn07XG4gICAgd29ya2VyczogQXJyYXk8V29ya2VySW50ZXJmYWNlPjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IHt9O1xuICAgIH1cblxuICAgIGFjcXVpcmUobWFwSWQ6IG51bWJlciB8IHN0cmluZyk6IEFycmF5PFdvcmtlckludGVyZmFjZT4ge1xuICAgICAgICBpZiAoIXRoaXMud29ya2Vycykge1xuICAgICAgICAgICAgLy8gTGF6aWx5IGxvb2sgdXAgdGhlIHZhbHVlIG9mIG1hcGJveGdsLndvcmtlckNvdW50IHNvIHRoYXRcbiAgICAgICAgICAgIC8vIGNsaWVudCBjb2RlIGhhcyBoYWQgYSBjaGFuY2UgdG8gc2V0IGl0LlxuICAgICAgICAgICAgdGhpcy53b3JrZXJzID0gW107XG4gICAgICAgICAgICB3aGlsZSAodGhpcy53b3JrZXJzLmxlbmd0aCA8IFdvcmtlclBvb2wud29ya2VyQ291bnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLndvcmtlcnMucHVzaChuZXcgV2ViV29ya2VyKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hY3RpdmVbbWFwSWRdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMud29ya2Vycy5zbGljZSgpO1xuICAgIH1cblxuICAgIHJlbGVhc2UobWFwSWQ6IG51bWJlciB8IHN0cmluZykge1xuICAgICAgICBkZWxldGUgdGhpcy5hY3RpdmVbbWFwSWRdO1xuICAgICAgICBpZiAodGhpcy5udW1BY3RpdmUoKSA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy53b3JrZXJzLmZvckVhY2goKHcpID0+IHtcbiAgICAgICAgICAgICAgICB3LnRlcm1pbmF0ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLndvcmtlcnMgPSAobnVsbDogYW55KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzUHJlbG9hZGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmFjdGl2ZVtQUkVMT0FEX1BPT0xfSURdO1xuICAgIH1cblxuICAgIG51bUFjdGl2ZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5hY3RpdmUpLmxlbmd0aDtcbiAgICB9XG59XG5cbmNvbnN0IGF2YWlsYWJsZUxvZ2ljYWxQcm9jZXNzb3JzID0gTWF0aC5mbG9vcihicm93c2VyLmhhcmR3YXJlQ29uY3VycmVuY3kgLyAyKTtcbldvcmtlclBvb2wud29ya2VyQ291bnQgPSBNYXRoLm1heChNYXRoLm1pbihhdmFpbGFibGVMb2dpY2FsUHJvY2Vzc29ycywgNiksIDEpO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFdvcmtlclBvb2wsIHtQUkVMT0FEX1BPT0xfSUR9IGZyb20gJy4vd29ya2VyX3Bvb2wnO1xuXG5sZXQgZ2xvYmFsV29ya2VyUG9vbDtcblxuLyoqXG4gKiBDcmVhdGVzIChpZiBuZWNlc3NhcnkpIGFuZCByZXR1cm5zIHRoZSBzaW5nbGUsIGdsb2JhbCBXb3JrZXJQb29sIGluc3RhbmNlXG4gKiB0byBiZSBzaGFyZWQgYWNyb3NzIGVhY2ggTWFwXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRHbG9iYWxXb3JrZXJQb29sICgpIHtcbiAgICBpZiAoIWdsb2JhbFdvcmtlclBvb2wpIHtcbiAgICAgICAgZ2xvYmFsV29ya2VyUG9vbCA9IG5ldyBXb3JrZXJQb29sKCk7XG4gICAgfVxuICAgIHJldHVybiBnbG9iYWxXb3JrZXJQb29sO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJld2FybSgpIHtcbiAgICBjb25zdCB3b3JrZXJQb29sID0gZ2V0R2xvYmFsV29ya2VyUG9vbCgpO1xuICAgIHdvcmtlclBvb2wuYWNxdWlyZShQUkVMT0FEX1BPT0xfSUQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJQcmV3YXJtZWRSZXNvdXJjZXMoKSB7XG4gICAgY29uc3QgcG9vbCA9IGdsb2JhbFdvcmtlclBvb2w7XG4gICAgaWYgKHBvb2wpIHtcbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBwb29sIG9ubHkgaWYgYWxsIG1hcHMgdGhhdCByZWZlcmVuY2VkIHRoZSBwcmVsb2FkZWQgZ2xvYmFsIHdvcmtlciBwb29sIGhhdmUgYmVlbiByZW1vdmVkLlxuICAgICAgICBpZiAocG9vbC5pc1ByZWxvYWRlZCgpICYmIHBvb2wubnVtQWN0aXZlKCkgPT09IDEpIHtcbiAgICAgICAgICAgIHBvb2wucmVsZWFzZShQUkVMT0FEX1BPT0xfSUQpO1xuICAgICAgICAgICAgZ2xvYmFsV29ya2VyUG9vbCA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0NvdWxkIG5vdCBjbGVhciBXZWJXb3JrZXJzIHNpbmNlIHRoZXJlIGFyZSBhY3RpdmUgTWFwIGluc3RhbmNlcyB0aGF0IHN0aWxsIHJlZmVyZW5jZSBpdC4gVGhlIHByZS13YXJtZWQgV2ViV29ya2VyIHBvb2wgY2FuIG9ubHkgYmUgY2xlYXJlZCB3aGVuIGFsbCBtYXAgaW5zdGFuY2VzIGhhdmUgYmVlbiByZW1vdmVkIHdpdGggbWFwLnJlbW92ZSgpJyk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJcbmltcG9ydCByZWZQcm9wZXJ0aWVzIGZyb20gJy4vdXRpbC9yZWZfcHJvcGVydGllcyc7XG5cbmZ1bmN0aW9uIGRlcmVmKGxheWVyLCBwYXJlbnQpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcblxuICAgIGZvciAoY29uc3QgayBpbiBsYXllcikge1xuICAgICAgICBpZiAoayAhPT0gJ3JlZicpIHtcbiAgICAgICAgICAgIHJlc3VsdFtrXSA9IGxheWVyW2tdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVmUHJvcGVydGllcy5mb3JFYWNoKChrKSA9PiB7XG4gICAgICAgIGlmIChrIGluIHBhcmVudCkge1xuICAgICAgICAgICAgcmVzdWx0W2tdID0gcGFyZW50W2tdO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBkZXJlZkxheWVycztcblxuLyoqXG4gKiBHaXZlbiBhbiBhcnJheSBvZiBsYXllcnMsIHNvbWUgb2Ygd2hpY2ggbWF5IGNvbnRhaW4gYHJlZmAgcHJvcGVydGllc1xuICogd2hvc2UgdmFsdWUgaXMgdGhlIGBpZGAgb2YgYW5vdGhlciBwcm9wZXJ0eSwgcmV0dXJuIGEgbmV3IGFycmF5IHdoZXJlXG4gKiBzdWNoIGxheWVycyBoYXZlIGJlZW4gYXVnbWVudGVkIHdpdGggdGhlICd0eXBlJywgJ3NvdXJjZScsIGV0Yy4gcHJvcGVydGllc1xuICogZnJvbSB0aGUgcGFyZW50IGxheWVyLCBhbmQgdGhlIGByZWZgIHByb3BlcnR5IGhhcyBiZWVuIHJlbW92ZWQuXG4gKlxuICogVGhlIGlucHV0IGlzIG5vdCBtb2RpZmllZC4gVGhlIG91dHB1dCBtYXkgY29udGFpbiByZWZlcmVuY2VzIHRvIHBvcnRpb25zXG4gKiBvZiB0aGUgaW5wdXQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXk8TGF5ZXI+fSBsYXllcnNcbiAqIEByZXR1cm5zIHtBcnJheTxMYXllcj59XG4gKi9cbmZ1bmN0aW9uIGRlcmVmTGF5ZXJzKGxheWVycykge1xuICAgIGxheWVycyA9IGxheWVycy5zbGljZSgpO1xuXG4gICAgY29uc3QgbWFwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxheWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBtYXBbbGF5ZXJzW2ldLmlkXSA9IGxheWVyc1tpXTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxheWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoJ3JlZicgaW4gbGF5ZXJzW2ldKSB7XG4gICAgICAgICAgICBsYXllcnNbaV0gPSBkZXJlZihsYXllcnNbaV0sIG1hcFtsYXllcnNbaV0ucmVmXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGF5ZXJzO1xufVxuIiwiaW1wb3J0IGxhdGVzdCBmcm9tICcuL3JlZmVyZW5jZS9sYXRlc3QnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBlbXB0eVN0eWxlKCkge1xuICAgIGNvbnN0IHN0eWxlID0ge307XG5cbiAgICBjb25zdCB2ZXJzaW9uID0gbGF0ZXN0WyckdmVyc2lvbiddO1xuICAgIGZvciAoY29uc3Qgc3R5bGVLZXkgaW4gbGF0ZXN0Wyckcm9vdCddKSB7XG4gICAgICAgIGNvbnN0IHNwZWMgPSBsYXRlc3RbJyRyb290J11bc3R5bGVLZXldO1xuXG4gICAgICAgIGlmIChzcGVjLnJlcXVpcmVkKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgaWYgKHN0eWxlS2V5ID09PSAndmVyc2lvbicpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZlcnNpb247XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChzcGVjLnR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBbXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBzdHlsZVtzdHlsZUtleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdHlsZTtcbn1cbiIsIlxuaW1wb3J0IGlzRXF1YWwgZnJvbSAnLi91dGlsL2RlZXBfZXF1YWwnO1xuXG5jb25zdCBvcGVyYXRpb25zID0ge1xuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRTdHlsZScsIGFyZ3M6IFtzdHlsZXNoZWV0XSB9XG4gICAgICovXG4gICAgc2V0U3R5bGU6ICdzZXRTdHlsZScsXG5cbiAgICAvKlxuICAgICAqIHsgY29tbWFuZDogJ2FkZExheWVyJywgYXJnczogW2xheWVyLCAnYmVmb3JlTGF5ZXJJZCddIH1cbiAgICAgKi9cbiAgICBhZGRMYXllcjogJ2FkZExheWVyJyxcblxuICAgIC8qXG4gICAgICogeyBjb21tYW5kOiAncmVtb3ZlTGF5ZXInLCBhcmdzOiBbJ2xheWVySWQnXSB9XG4gICAgICovXG4gICAgcmVtb3ZlTGF5ZXI6ICdyZW1vdmVMYXllcicsXG5cbiAgICAvKlxuICAgICAqIHsgY29tbWFuZDogJ3NldFBhaW50UHJvcGVydHknLCBhcmdzOiBbJ2xheWVySWQnLCAncHJvcCcsIHZhbHVlXSB9XG4gICAgICovXG4gICAgc2V0UGFpbnRQcm9wZXJ0eTogJ3NldFBhaW50UHJvcGVydHknLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRMYXlvdXRQcm9wZXJ0eScsIGFyZ3M6IFsnbGF5ZXJJZCcsICdwcm9wJywgdmFsdWVdIH1cbiAgICAgKi9cbiAgICBzZXRMYXlvdXRQcm9wZXJ0eTogJ3NldExheW91dFByb3BlcnR5JyxcblxuICAgIC8qXG4gICAgICogeyBjb21tYW5kOiAnc2V0RmlsdGVyJywgYXJnczogWydsYXllcklkJywgZmlsdGVyXSB9XG4gICAgICovXG4gICAgc2V0RmlsdGVyOiAnc2V0RmlsdGVyJyxcblxuICAgIC8qXG4gICAgICogeyBjb21tYW5kOiAnYWRkU291cmNlJywgYXJnczogWydzb3VyY2VJZCcsIHNvdXJjZV0gfVxuICAgICAqL1xuICAgIGFkZFNvdXJjZTogJ2FkZFNvdXJjZScsXG5cbiAgICAvKlxuICAgICAqIHsgY29tbWFuZDogJ3JlbW92ZVNvdXJjZScsIGFyZ3M6IFsnc291cmNlSWQnXSB9XG4gICAgICovXG4gICAgcmVtb3ZlU291cmNlOiAncmVtb3ZlU291cmNlJyxcblxuICAgIC8qXG4gICAgICogeyBjb21tYW5kOiAnc2V0R2VvSlNPTlNvdXJjZURhdGEnLCBhcmdzOiBbJ3NvdXJjZUlkJywgZGF0YV0gfVxuICAgICAqL1xuICAgIHNldEdlb0pTT05Tb3VyY2VEYXRhOiAnc2V0R2VvSlNPTlNvdXJjZURhdGEnLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRMYXllclpvb21SYW5nZScsIGFyZ3M6IFsnbGF5ZXJJZCcsIDAsIDIyXSB9XG4gICAgICovXG4gICAgc2V0TGF5ZXJab29tUmFuZ2U6ICdzZXRMYXllclpvb21SYW5nZScsXG5cbiAgICAvKlxuICAgICAqIHsgY29tbWFuZDogJ3NldExheWVyUHJvcGVydHknLCBhcmdzOiBbJ2xheWVySWQnLCAncHJvcCcsIHZhbHVlXSB9XG4gICAgICovXG4gICAgc2V0TGF5ZXJQcm9wZXJ0eTogJ3NldExheWVyUHJvcGVydHknLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRDZW50ZXInLCBhcmdzOiBbW2xvbiwgbGF0XV0gfVxuICAgICAqL1xuICAgIHNldENlbnRlcjogJ3NldENlbnRlcicsXG5cbiAgICAvKlxuICAgICAqIHsgY29tbWFuZDogJ3NldFpvb20nLCBhcmdzOiBbem9vbV0gfVxuICAgICAqL1xuICAgIHNldFpvb206ICdzZXRab29tJyxcblxuICAgIC8qXG4gICAgICogeyBjb21tYW5kOiAnc2V0QmVhcmluZycsIGFyZ3M6IFtiZWFyaW5nXSB9XG4gICAgICovXG4gICAgc2V0QmVhcmluZzogJ3NldEJlYXJpbmcnLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRQaXRjaCcsIGFyZ3M6IFtwaXRjaF0gfVxuICAgICAqL1xuICAgIHNldFBpdGNoOiAnc2V0UGl0Y2gnLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRTcHJpdGUnLCBhcmdzOiBbJ3Nwcml0ZVVybCddIH1cbiAgICAgKi9cbiAgICBzZXRTcHJpdGU6ICdzZXRTcHJpdGUnLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRHbHlwaHMnLCBhcmdzOiBbJ2dseXBoc1VybCddIH1cbiAgICAgKi9cbiAgICBzZXRHbHlwaHM6ICdzZXRHbHlwaHMnLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRUcmFuc2l0aW9uJywgYXJnczogW3RyYW5zaXRpb25dIH1cbiAgICAgKi9cbiAgICBzZXRUcmFuc2l0aW9uOiAnc2V0VHJhbnNpdGlvbicsXG5cbiAgICAvKlxuICAgICAqIHsgY29tbWFuZDogJ3NldExpZ2h0aW5nJywgYXJnczogW2xpZ2h0UHJvcGVydGllc10gfVxuICAgICAqL1xuICAgIHNldExpZ2h0OiAnc2V0TGlnaHQnXG5cbn07XG5cbmZ1bmN0aW9uIGFkZFNvdXJjZShzb3VyY2VJZCwgYWZ0ZXIsIGNvbW1hbmRzKSB7XG4gICAgY29tbWFuZHMucHVzaCh7Y29tbWFuZDogb3BlcmF0aW9ucy5hZGRTb3VyY2UsIGFyZ3M6IFtzb3VyY2VJZCwgYWZ0ZXJbc291cmNlSWRdXX0pO1xufVxuXG5mdW5jdGlvbiByZW1vdmVTb3VyY2Uoc291cmNlSWQsIGNvbW1hbmRzLCBzb3VyY2VzUmVtb3ZlZCkge1xuICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMucmVtb3ZlU291cmNlLCBhcmdzOiBbc291cmNlSWRdfSk7XG4gICAgc291cmNlc1JlbW92ZWRbc291cmNlSWRdID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU291cmNlKHNvdXJjZUlkLCBhZnRlciwgY29tbWFuZHMsIHNvdXJjZXNSZW1vdmVkKSB7XG4gICAgcmVtb3ZlU291cmNlKHNvdXJjZUlkLCBjb21tYW5kcywgc291cmNlc1JlbW92ZWQpO1xuICAgIGFkZFNvdXJjZShzb3VyY2VJZCwgYWZ0ZXIsIGNvbW1hbmRzKTtcbn1cblxuZnVuY3Rpb24gY2FuVXBkYXRlR2VvSlNPTihiZWZvcmUsIGFmdGVyLCBzb3VyY2VJZCkge1xuICAgIGxldCBwcm9wO1xuICAgIGZvciAocHJvcCBpbiBiZWZvcmVbc291cmNlSWRdKSB7XG4gICAgICAgIGlmICghYmVmb3JlW3NvdXJjZUlkXS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgY29udGludWU7XG4gICAgICAgIGlmIChwcm9wICE9PSAnZGF0YScgJiYgIWlzRXF1YWwoYmVmb3JlW3NvdXJjZUlkXVtwcm9wXSwgYWZ0ZXJbc291cmNlSWRdW3Byb3BdKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAocHJvcCBpbiBhZnRlcltzb3VyY2VJZF0pIHtcbiAgICAgICAgaWYgKCFhZnRlcltzb3VyY2VJZF0uaGFzT3duUHJvcGVydHkocHJvcCkpIGNvbnRpbnVlO1xuICAgICAgICBpZiAocHJvcCAhPT0gJ2RhdGEnICYmICFpc0VxdWFsKGJlZm9yZVtzb3VyY2VJZF1bcHJvcF0sIGFmdGVyW3NvdXJjZUlkXVtwcm9wXSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZGlmZlNvdXJjZXMoYmVmb3JlLCBhZnRlciwgY29tbWFuZHMsIHNvdXJjZXNSZW1vdmVkKSB7XG4gICAgYmVmb3JlID0gYmVmb3JlIHx8IHt9O1xuICAgIGFmdGVyID0gYWZ0ZXIgfHwge307XG5cbiAgICBsZXQgc291cmNlSWQ7XG5cbiAgICAvLyBsb29rIGZvciBzb3VyY2VzIHRvIHJlbW92ZVxuICAgIGZvciAoc291cmNlSWQgaW4gYmVmb3JlKSB7XG4gICAgICAgIGlmICghYmVmb3JlLmhhc093blByb3BlcnR5KHNvdXJjZUlkKSkgY29udGludWU7XG4gICAgICAgIGlmICghYWZ0ZXIuaGFzT3duUHJvcGVydHkoc291cmNlSWQpKSB7XG4gICAgICAgICAgICByZW1vdmVTb3VyY2Uoc291cmNlSWQsIGNvbW1hbmRzLCBzb3VyY2VzUmVtb3ZlZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBsb29rIGZvciBzb3VyY2VzIHRvIGFkZC91cGRhdGVcbiAgICBmb3IgKHNvdXJjZUlkIGluIGFmdGVyKSB7XG4gICAgICAgIGlmICghYWZ0ZXIuaGFzT3duUHJvcGVydHkoc291cmNlSWQpKSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFiZWZvcmUuaGFzT3duUHJvcGVydHkoc291cmNlSWQpKSB7XG4gICAgICAgICAgICBhZGRTb3VyY2Uoc291cmNlSWQsIGFmdGVyLCBjb21tYW5kcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzRXF1YWwoYmVmb3JlW3NvdXJjZUlkXSwgYWZ0ZXJbc291cmNlSWRdKSkge1xuICAgICAgICAgICAgaWYgKGJlZm9yZVtzb3VyY2VJZF0udHlwZSA9PT0gJ2dlb2pzb24nICYmIGFmdGVyW3NvdXJjZUlkXS50eXBlID09PSAnZ2VvanNvbicgJiYgY2FuVXBkYXRlR2VvSlNPTihiZWZvcmUsIGFmdGVyLCBzb3VyY2VJZCkpIHtcbiAgICAgICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnNldEdlb0pTT05Tb3VyY2VEYXRhLCBhcmdzOiBbc291cmNlSWQsIGFmdGVyW3NvdXJjZUlkXS5kYXRhXX0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBubyB1cGRhdGUgY29tbWFuZCwgbXVzdCByZW1vdmUgdGhlbiBhZGRcbiAgICAgICAgICAgICAgICB1cGRhdGVTb3VyY2Uoc291cmNlSWQsIGFmdGVyLCBjb21tYW5kcywgc291cmNlc1JlbW92ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkaWZmTGF5ZXJQcm9wZXJ0eUNoYW5nZXMoYmVmb3JlLCBhZnRlciwgY29tbWFuZHMsIGxheWVySWQsIGtsYXNzLCBjb21tYW5kKSB7XG4gICAgYmVmb3JlID0gYmVmb3JlIHx8IHt9O1xuICAgIGFmdGVyID0gYWZ0ZXIgfHwge307XG5cbiAgICBsZXQgcHJvcDtcblxuICAgIGZvciAocHJvcCBpbiBiZWZvcmUpIHtcbiAgICAgICAgaWYgKCFiZWZvcmUuaGFzT3duUHJvcGVydHkocHJvcCkpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoIWlzRXF1YWwoYmVmb3JlW3Byb3BdLCBhZnRlcltwcm9wXSkpIHtcbiAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQsIGFyZ3M6IFtsYXllcklkLCBwcm9wLCBhZnRlcltwcm9wXSwga2xhc3NdfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yIChwcm9wIGluIGFmdGVyKSB7XG4gICAgICAgIGlmICghYWZ0ZXIuaGFzT3duUHJvcGVydHkocHJvcCkgfHwgYmVmb3JlLmhhc093blByb3BlcnR5KHByb3ApKSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFpc0VxdWFsKGJlZm9yZVtwcm9wXSwgYWZ0ZXJbcHJvcF0pKSB7XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kLCBhcmdzOiBbbGF5ZXJJZCwgcHJvcCwgYWZ0ZXJbcHJvcF0sIGtsYXNzXX0pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBwbHVja0lkKGxheWVyKSB7XG4gICAgcmV0dXJuIGxheWVyLmlkO1xufVxuZnVuY3Rpb24gaW5kZXhCeUlkKGdyb3VwLCBsYXllcikge1xuICAgIGdyb3VwW2xheWVyLmlkXSA9IGxheWVyO1xuICAgIHJldHVybiBncm91cDtcbn1cblxuZnVuY3Rpb24gZGlmZkxheWVycyhiZWZvcmUsIGFmdGVyLCBjb21tYW5kcykge1xuICAgIGJlZm9yZSA9IGJlZm9yZSB8fCBbXTtcbiAgICBhZnRlciA9IGFmdGVyIHx8IFtdO1xuXG4gICAgLy8gb3JkZXIgb2YgbGF5ZXJzIGJ5IGlkXG4gICAgY29uc3QgYmVmb3JlT3JkZXIgPSBiZWZvcmUubWFwKHBsdWNrSWQpO1xuICAgIGNvbnN0IGFmdGVyT3JkZXIgPSBhZnRlci5tYXAocGx1Y2tJZCk7XG5cbiAgICAvLyBpbmRleCBvZiBsYXllciBieSBpZFxuICAgIGNvbnN0IGJlZm9yZUluZGV4ID0gYmVmb3JlLnJlZHVjZShpbmRleEJ5SWQsIHt9KTtcbiAgICBjb25zdCBhZnRlckluZGV4ID0gYWZ0ZXIucmVkdWNlKGluZGV4QnlJZCwge30pO1xuXG4gICAgLy8gdHJhY2sgb3JkZXIgb2YgbGF5ZXJzIGFzIGlmIHRoZXkgaGF2ZSBiZWVuIG11dGF0ZWRcbiAgICBjb25zdCB0cmFja2VyID0gYmVmb3JlT3JkZXIuc2xpY2UoKTtcblxuICAgIC8vIGxheWVycyB0aGF0IGhhdmUgYmVlbiBhZGRlZCBkbyBub3QgbmVlZCB0byBiZSBkaWZmZWRcbiAgICBjb25zdCBjbGVhbiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICBsZXQgaSwgZCwgbGF5ZXJJZCwgYmVmb3JlTGF5ZXIsIGFmdGVyTGF5ZXIsIGluc2VydEJlZm9yZUxheWVySWQsIHByb3A7XG5cbiAgICAvLyByZW1vdmUgbGF5ZXJzXG4gICAgZm9yIChpID0gMCwgZCA9IDA7IGkgPCBiZWZvcmVPcmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICBsYXllcklkID0gYmVmb3JlT3JkZXJbaV07XG4gICAgICAgIGlmICghYWZ0ZXJJbmRleC5oYXNPd25Qcm9wZXJ0eShsYXllcklkKSkge1xuICAgICAgICAgICAgY29tbWFuZHMucHVzaCh7Y29tbWFuZDogb3BlcmF0aW9ucy5yZW1vdmVMYXllciwgYXJnczogW2xheWVySWRdfSk7XG4gICAgICAgICAgICB0cmFja2VyLnNwbGljZSh0cmFja2VyLmluZGV4T2YobGF5ZXJJZCwgZCksIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gbGltaXQgd2hlcmUgaW4gdHJhY2tlciB3ZSBuZWVkIHRvIGxvb2sgZm9yIGEgbWF0Y2hcbiAgICAgICAgICAgIGQrKztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFkZC9yZW9yZGVyIGxheWVyc1xuICAgIGZvciAoaSA9IDAsIGQgPSAwOyBpIDwgYWZ0ZXJPcmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyB3b3JrIGJhY2t3YXJkcyBhcyBpbnNlcnQgaXMgYmVmb3JlIGFuIGV4aXN0aW5nIGxheWVyXG4gICAgICAgIGxheWVySWQgPSBhZnRlck9yZGVyW2FmdGVyT3JkZXIubGVuZ3RoIC0gMSAtIGldO1xuXG4gICAgICAgIGlmICh0cmFja2VyW3RyYWNrZXIubGVuZ3RoIC0gMSAtIGldID09PSBsYXllcklkKSBjb250aW51ZTtcblxuICAgICAgICBpZiAoYmVmb3JlSW5kZXguaGFzT3duUHJvcGVydHkobGF5ZXJJZCkpIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgbGF5ZXIgYmVmb3JlIHdlIGluc2VydCBhdCB0aGUgY29ycmVjdCBwb3NpdGlvblxuICAgICAgICAgICAgY29tbWFuZHMucHVzaCh7Y29tbWFuZDogb3BlcmF0aW9ucy5yZW1vdmVMYXllciwgYXJnczogW2xheWVySWRdfSk7XG4gICAgICAgICAgICB0cmFja2VyLnNwbGljZSh0cmFja2VyLmxhc3RJbmRleE9mKGxheWVySWQsIHRyYWNrZXIubGVuZ3RoIC0gZCksIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gbGltaXQgd2hlcmUgaW4gdHJhY2tlciB3ZSBuZWVkIHRvIGxvb2sgZm9yIGEgbWF0Y2hcbiAgICAgICAgICAgIGQrKztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFkZCBsYXllciBhdCBjb3JyZWN0IHBvc2l0aW9uXG4gICAgICAgIGluc2VydEJlZm9yZUxheWVySWQgPSB0cmFja2VyW3RyYWNrZXIubGVuZ3RoIC0gaV07XG4gICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMuYWRkTGF5ZXIsIGFyZ3M6IFthZnRlckluZGV4W2xheWVySWRdLCBpbnNlcnRCZWZvcmVMYXllcklkXX0pO1xuICAgICAgICB0cmFja2VyLnNwbGljZSh0cmFja2VyLmxlbmd0aCAtIGksIDAsIGxheWVySWQpO1xuICAgICAgICBjbGVhbltsYXllcklkXSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIGxheWVyc1xuICAgIGZvciAoaSA9IDA7IGkgPCBhZnRlck9yZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxheWVySWQgPSBhZnRlck9yZGVyW2ldO1xuICAgICAgICBiZWZvcmVMYXllciA9IGJlZm9yZUluZGV4W2xheWVySWRdO1xuICAgICAgICBhZnRlckxheWVyID0gYWZ0ZXJJbmRleFtsYXllcklkXTtcblxuICAgICAgICAvLyBubyBuZWVkIHRvIHVwZGF0ZSBpZiBwcmV2aW91c2x5IGFkZGVkIChuZXcgb3IgbW92ZWQpXG4gICAgICAgIGlmIChjbGVhbltsYXllcklkXSB8fCBpc0VxdWFsKGJlZm9yZUxheWVyLCBhZnRlckxheWVyKSkgY29udGludWU7XG5cbiAgICAgICAgLy8gSWYgc291cmNlLCBzb3VyY2UtbGF5ZXIsIG9yIHR5cGUgaGF2ZSBjaGFuZ2VzLCB0aGVuIHJlbW92ZSB0aGUgbGF5ZXJcbiAgICAgICAgLy8gYW5kIGFkZCBpdCBiYWNrICdmcm9tIHNjcmF0Y2gnLlxuICAgICAgICBpZiAoIWlzRXF1YWwoYmVmb3JlTGF5ZXIuc291cmNlLCBhZnRlckxheWVyLnNvdXJjZSkgfHwgIWlzRXF1YWwoYmVmb3JlTGF5ZXJbJ3NvdXJjZS1sYXllciddLCBhZnRlckxheWVyWydzb3VyY2UtbGF5ZXInXSkgfHwgIWlzRXF1YWwoYmVmb3JlTGF5ZXIudHlwZSwgYWZ0ZXJMYXllci50eXBlKSkge1xuICAgICAgICAgICAgY29tbWFuZHMucHVzaCh7Y29tbWFuZDogb3BlcmF0aW9ucy5yZW1vdmVMYXllciwgYXJnczogW2xheWVySWRdfSk7XG4gICAgICAgICAgICAvLyB3ZSBhZGQgdGhlIGxheWVyIGJhY2sgYXQgdGhlIHNhbWUgcG9zaXRpb24gaXQgd2FzIGFscmVhZHkgaW4sIHNvXG4gICAgICAgICAgICAvLyB0aGVyZSdzIG5vIG5lZWQgdG8gdXBkYXRlIHRoZSBgdHJhY2tlcmBcbiAgICAgICAgICAgIGluc2VydEJlZm9yZUxheWVySWQgPSB0cmFja2VyW3RyYWNrZXIubGFzdEluZGV4T2YobGF5ZXJJZCkgKyAxXTtcbiAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMuYWRkTGF5ZXIsIGFyZ3M6IFthZnRlckxheWVyLCBpbnNlcnRCZWZvcmVMYXllcklkXX0pO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBsYXlvdXQsIHBhaW50LCBmaWx0ZXIsIG1pbnpvb20sIG1heHpvb21cbiAgICAgICAgZGlmZkxheWVyUHJvcGVydHlDaGFuZ2VzKGJlZm9yZUxheWVyLmxheW91dCwgYWZ0ZXJMYXllci5sYXlvdXQsIGNvbW1hbmRzLCBsYXllcklkLCBudWxsLCBvcGVyYXRpb25zLnNldExheW91dFByb3BlcnR5KTtcbiAgICAgICAgZGlmZkxheWVyUHJvcGVydHlDaGFuZ2VzKGJlZm9yZUxheWVyLnBhaW50LCBhZnRlckxheWVyLnBhaW50LCBjb21tYW5kcywgbGF5ZXJJZCwgbnVsbCwgb3BlcmF0aW9ucy5zZXRQYWludFByb3BlcnR5KTtcbiAgICAgICAgaWYgKCFpc0VxdWFsKGJlZm9yZUxheWVyLmZpbHRlciwgYWZ0ZXJMYXllci5maWx0ZXIpKSB7XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnNldEZpbHRlciwgYXJnczogW2xheWVySWQsIGFmdGVyTGF5ZXIuZmlsdGVyXX0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFcXVhbChiZWZvcmVMYXllci5taW56b29tLCBhZnRlckxheWVyLm1pbnpvb20pIHx8ICFpc0VxdWFsKGJlZm9yZUxheWVyLm1heHpvb20sIGFmdGVyTGF5ZXIubWF4em9vbSkpIHtcbiAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMuc2V0TGF5ZXJab29tUmFuZ2UsIGFyZ3M6IFtsYXllcklkLCBhZnRlckxheWVyLm1pbnpvb20sIGFmdGVyTGF5ZXIubWF4em9vbV19KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGhhbmRsZSBhbGwgb3RoZXIgbGF5ZXIgcHJvcHMsIGluY2x1ZGluZyBwYWludC4qXG4gICAgICAgIGZvciAocHJvcCBpbiBiZWZvcmVMYXllcikge1xuICAgICAgICAgICAgaWYgKCFiZWZvcmVMYXllci5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgY29udGludWU7XG4gICAgICAgICAgICBpZiAocHJvcCA9PT0gJ2xheW91dCcgfHwgcHJvcCA9PT0gJ3BhaW50JyB8fCBwcm9wID09PSAnZmlsdGVyJyB8fFxuICAgICAgICAgICAgICAgIHByb3AgPT09ICdtZXRhZGF0YScgfHwgcHJvcCA9PT0gJ21pbnpvb20nIHx8IHByb3AgPT09ICdtYXh6b29tJykgY29udGludWU7XG4gICAgICAgICAgICBpZiAocHJvcC5pbmRleE9mKCdwYWludC4nKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGRpZmZMYXllclByb3BlcnR5Q2hhbmdlcyhiZWZvcmVMYXllcltwcm9wXSwgYWZ0ZXJMYXllcltwcm9wXSwgY29tbWFuZHMsIGxheWVySWQsIHByb3Auc2xpY2UoNiksIG9wZXJhdGlvbnMuc2V0UGFpbnRQcm9wZXJ0eSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFpc0VxdWFsKGJlZm9yZUxheWVyW3Byb3BdLCBhZnRlckxheWVyW3Byb3BdKSkge1xuICAgICAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMuc2V0TGF5ZXJQcm9wZXJ0eSwgYXJnczogW2xheWVySWQsIHByb3AsIGFmdGVyTGF5ZXJbcHJvcF1dfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChwcm9wIGluIGFmdGVyTGF5ZXIpIHtcbiAgICAgICAgICAgIGlmICghYWZ0ZXJMYXllci5oYXNPd25Qcm9wZXJ0eShwcm9wKSB8fCBiZWZvcmVMYXllci5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgY29udGludWU7XG4gICAgICAgICAgICBpZiAocHJvcCA9PT0gJ2xheW91dCcgfHwgcHJvcCA9PT0gJ3BhaW50JyB8fCBwcm9wID09PSAnZmlsdGVyJyB8fFxuICAgICAgICAgICAgICAgIHByb3AgPT09ICdtZXRhZGF0YScgfHwgcHJvcCA9PT0gJ21pbnpvb20nIHx8IHByb3AgPT09ICdtYXh6b29tJykgY29udGludWU7XG4gICAgICAgICAgICBpZiAocHJvcC5pbmRleE9mKCdwYWludC4nKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGRpZmZMYXllclByb3BlcnR5Q2hhbmdlcyhiZWZvcmVMYXllcltwcm9wXSwgYWZ0ZXJMYXllcltwcm9wXSwgY29tbWFuZHMsIGxheWVySWQsIHByb3Auc2xpY2UoNiksIG9wZXJhdGlvbnMuc2V0UGFpbnRQcm9wZXJ0eSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFpc0VxdWFsKGJlZm9yZUxheWVyW3Byb3BdLCBhZnRlckxheWVyW3Byb3BdKSkge1xuICAgICAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMuc2V0TGF5ZXJQcm9wZXJ0eSwgYXJnczogW2xheWVySWQsIHByb3AsIGFmdGVyTGF5ZXJbcHJvcF1dfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogRGlmZiB0d28gc3R5bGVzaGVldFxuICpcbiAqIENyZWF0ZXMgc2VtYW50aWNseSBhd2FyZSBkaWZmcyB0aGF0IGNhbiBlYXNpbHkgYmUgYXBwbGllZCBhdCBydW50aW1lLlxuICogT3BlcmF0aW9ucyBwcm9kdWNlZCBieSB0aGUgZGlmZiBjbG9zZWx5IHJlc2VtYmxlIHRoZSBtYXBib3gtZ2wtanMgQVBJLiBBbnlcbiAqIGVycm9yIGNyZWF0aW5nIHRoZSBkaWZmIHdpbGwgZmFsbCBiYWNrIHRvIHRoZSAnc2V0U3R5bGUnIG9wZXJhdGlvbi5cbiAqXG4gKiBFeGFtcGxlIGRpZmY6XG4gKiBbXG4gKiAgICAgeyBjb21tYW5kOiAnc2V0Q29uc3RhbnQnLCBhcmdzOiBbJ0B3YXRlcicsICcjMDAwMEZGJ10gfSxcbiAqICAgICB7IGNvbW1hbmQ6ICdzZXRQYWludFByb3BlcnR5JywgYXJnczogWydiYWNrZ3JvdW5kJywgJ2JhY2tncm91bmQtY29sb3InLCAnYmxhY2snXSB9XG4gKiBdXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gW2JlZm9yZV0gc3R5bGVzaGVldCB0byBjb21wYXJlIGZyb21cbiAqIEBwYXJhbSB7Kn0gYWZ0ZXIgc3R5bGVzaGVldCB0byBjb21wYXJlIHRvXG4gKiBAcmV0dXJucyBBcnJheSBsaXN0IG9mIGNoYW5nZXNcbiAqL1xuZnVuY3Rpb24gZGlmZlN0eWxlcyhiZWZvcmUsIGFmdGVyKSB7XG4gICAgaWYgKCFiZWZvcmUpIHJldHVybiBbe2NvbW1hbmQ6IG9wZXJhdGlvbnMuc2V0U3R5bGUsIGFyZ3M6IFthZnRlcl19XTtcblxuICAgIGxldCBjb21tYW5kcyA9IFtdO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgLy8gSGFuZGxlIGNoYW5nZXMgdG8gdG9wLWxldmVsIHByb3BlcnRpZXNcbiAgICAgICAgaWYgKCFpc0VxdWFsKGJlZm9yZS52ZXJzaW9uLCBhZnRlci52ZXJzaW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIFt7Y29tbWFuZDogb3BlcmF0aW9ucy5zZXRTdHlsZSwgYXJnczogW2FmdGVyXX1dO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFcXVhbChiZWZvcmUuY2VudGVyLCBhZnRlci5jZW50ZXIpKSB7XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnNldENlbnRlciwgYXJnczogW2FmdGVyLmNlbnRlcl19KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzRXF1YWwoYmVmb3JlLnpvb20sIGFmdGVyLnpvb20pKSB7XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnNldFpvb20sIGFyZ3M6IFthZnRlci56b29tXX0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFcXVhbChiZWZvcmUuYmVhcmluZywgYWZ0ZXIuYmVhcmluZykpIHtcbiAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMuc2V0QmVhcmluZywgYXJnczogW2FmdGVyLmJlYXJpbmddfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0VxdWFsKGJlZm9yZS5waXRjaCwgYWZ0ZXIucGl0Y2gpKSB7XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnNldFBpdGNoLCBhcmdzOiBbYWZ0ZXIucGl0Y2hdfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0VxdWFsKGJlZm9yZS5zcHJpdGUsIGFmdGVyLnNwcml0ZSkpIHtcbiAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMuc2V0U3ByaXRlLCBhcmdzOiBbYWZ0ZXIuc3ByaXRlXX0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFcXVhbChiZWZvcmUuZ2x5cGhzLCBhZnRlci5nbHlwaHMpKSB7XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnNldEdseXBocywgYXJnczogW2FmdGVyLmdseXBoc119KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzRXF1YWwoYmVmb3JlLnRyYW5zaXRpb24sIGFmdGVyLnRyYW5zaXRpb24pKSB7XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnNldFRyYW5zaXRpb24sIGFyZ3M6IFthZnRlci50cmFuc2l0aW9uXX0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFcXVhbChiZWZvcmUubGlnaHQsIGFmdGVyLmxpZ2h0KSkge1xuICAgICAgICAgICAgY29tbWFuZHMucHVzaCh7Y29tbWFuZDogb3BlcmF0aW9ucy5zZXRMaWdodCwgYXJnczogW2FmdGVyLmxpZ2h0XX0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZGxlIGNoYW5nZXMgdG8gYHNvdXJjZXNgXG4gICAgICAgIC8vIElmIGEgc291cmNlIGlzIHRvIGJlIHJlbW92ZWQsIHdlIGFsc28tLWJlZm9yZSB0aGUgcmVtb3ZlU291cmNlXG4gICAgICAgIC8vIGNvbW1hbmQtLW5lZWQgdG8gcmVtb3ZlIGFsbCB0aGUgc3R5bGUgbGF5ZXJzIHRoYXQgZGVwZW5kIG9uIGl0LlxuICAgICAgICBjb25zdCBzb3VyY2VzUmVtb3ZlZCA9IHt9O1xuXG4gICAgICAgIC8vIEZpcnN0IGNvbGxlY3QgdGhlIHthZGQscmVtb3ZlfVNvdXJjZSBjb21tYW5kc1xuICAgICAgICBjb25zdCByZW1vdmVPckFkZFNvdXJjZUNvbW1hbmRzID0gW107XG4gICAgICAgIGRpZmZTb3VyY2VzKGJlZm9yZS5zb3VyY2VzLCBhZnRlci5zb3VyY2VzLCByZW1vdmVPckFkZFNvdXJjZUNvbW1hbmRzLCBzb3VyY2VzUmVtb3ZlZCk7XG5cbiAgICAgICAgLy8gUHVzaCBhIHJlbW92ZUxheWVyIGNvbW1hbmQgZm9yIGVhY2ggc3R5bGUgbGF5ZXIgdGhhdCBkZXBlbmRzIG9uIGFcbiAgICAgICAgLy8gc291cmNlIHRoYXQncyBiZWluZyByZW1vdmVkLlxuICAgICAgICAvLyBBbHNvLCBleGNsdWRlIGFueSBzdWNoIGxheWVycyB0aGVtIGZyb20gdGhlIGlucHV0IHRvIGBkaWZmTGF5ZXJzYFxuICAgICAgICAvLyBiZWxvdywgc28gdGhhdCBkaWZmTGF5ZXJzIHByb2R1Y2VzIHRoZSBhcHByb3ByaWF0ZSBgYWRkTGF5ZXJzYFxuICAgICAgICAvLyBjb21tYW5kXG4gICAgICAgIGNvbnN0IGJlZm9yZUxheWVycyA9IFtdO1xuICAgICAgICBpZiAoYmVmb3JlLmxheWVycykge1xuICAgICAgICAgICAgYmVmb3JlLmxheWVycy5mb3JFYWNoKChsYXllcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzb3VyY2VzUmVtb3ZlZFtsYXllci5zb3VyY2VdKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMucmVtb3ZlTGF5ZXIsIGFyZ3M6IFtsYXllci5pZF19KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBiZWZvcmVMYXllcnMucHVzaChsYXllcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29tbWFuZHMgPSBjb21tYW5kcy5jb25jYXQocmVtb3ZlT3JBZGRTb3VyY2VDb21tYW5kcyk7XG5cbiAgICAgICAgLy8gSGFuZGxlIGNoYW5nZXMgdG8gYGxheWVyc2BcbiAgICAgICAgZGlmZkxheWVycyhiZWZvcmVMYXllcnMsIGFmdGVyLmxheWVycywgY29tbWFuZHMpO1xuXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBmYWxsIGJhY2sgdG8gc2V0U3R5bGVcbiAgICAgICAgY29uc29sZS53YXJuKCdVbmFibGUgdG8gY29tcHV0ZSBzdHlsZSBkaWZmOicsIGUpO1xuICAgICAgICBjb21tYW5kcyA9IFt7Y29tbWFuZDogb3BlcmF0aW9ucy5zZXRTdHlsZSwgYXJnczogW2FmdGVyXX1dO1xuICAgIH1cblxuICAgIHJldHVybiBjb21tYW5kcztcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGlmZlN0eWxlcztcbmV4cG9ydCB7b3BlcmF0aW9uc307XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2NsYW1wfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5jbGFzcyBQYXRoSW50ZXJwb2xhdG9yIHtcbiAgICBwb2ludHM6IEFycmF5PFBvaW50PjtcbiAgICBsZW5ndGg6IG51bWJlcjtcbiAgICBwYWRkZWRMZW5ndGg6IG51bWJlcjtcbiAgICBwYWRkaW5nOiBudW1iZXI7XG4gICAgX2Rpc3RhbmNlczogQXJyYXk8bnVtYmVyPjtcblxuICAgIGNvbnN0cnVjdG9yKHBvaW50c186ID9BcnJheTxQb2ludD4sIHBhZGRpbmdfOiA/bnVtYmVyKSB7XG4gICAgICAgIHRoaXMucmVzZXQocG9pbnRzXywgcGFkZGluZ18pO1xuICAgIH1cblxuICAgIHJlc2V0KHBvaW50c186ID9BcnJheTxQb2ludD4sIHBhZGRpbmdfOiA/bnVtYmVyKSB7XG4gICAgICAgIHRoaXMucG9pbnRzID0gcG9pbnRzXyB8fCBbXTtcblxuICAgICAgICAvLyBDb21wdXRlIGN1bXVsYXRpdmUgZGlzdGFuY2UgZnJvbSBmaXJzdCBwb2ludCB0byBldmVyeSBvdGhlciBwb2ludCBpbiB0aGUgc2VnbWVudC5cbiAgICAgICAgLy8gTGFzdCBlbnRyeSBpbiB0aGUgYXJyYXkgaXMgdG90YWwgbGVuZ3RoIG9mIHRoZSBwYXRoXG4gICAgICAgIHRoaXMuX2Rpc3RhbmNlcyA9IFswLjBdO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgdGhpcy5wb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuX2Rpc3RhbmNlc1tpXSA9IHRoaXMuX2Rpc3RhbmNlc1tpIC0gMV0gKyB0aGlzLnBvaW50c1tpXS5kaXN0KHRoaXMucG9pbnRzW2kgLSAxXSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMuX2Rpc3RhbmNlc1t0aGlzLl9kaXN0YW5jZXMubGVuZ3RoIC0gMV07XG4gICAgICAgIHRoaXMucGFkZGluZyA9IE1hdGgubWluKHBhZGRpbmdfIHx8IDAsIHRoaXMubGVuZ3RoICogMC41KTtcbiAgICAgICAgdGhpcy5wYWRkZWRMZW5ndGggPSB0aGlzLmxlbmd0aCAtIHRoaXMucGFkZGluZyAqIDIuMDtcbiAgICB9XG5cbiAgICBsZXJwKHQ6IG51bWJlcik6IFBvaW50IHtcbiAgICAgICAgYXNzZXJ0KHRoaXMucG9pbnRzLmxlbmd0aCA+IDApO1xuICAgICAgICBpZiAodGhpcy5wb2ludHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wb2ludHNbMF07XG4gICAgICAgIH1cblxuICAgICAgICB0ID0gY2xhbXAodCwgMCwgMSk7XG5cbiAgICAgICAgLy8gRmluZCB0aGUgY29ycmVjdCBzZWdtZW50IFtwMCwgcDFdIHdoZXJlIHAwIDw9IHggPCBwMVxuICAgICAgICBsZXQgY3VycmVudEluZGV4ID0gMTtcbiAgICAgICAgbGV0IGRpc3RPZkN1cnJlbnRJZHggPSB0aGlzLl9kaXN0YW5jZXNbY3VycmVudEluZGV4XTtcbiAgICAgICAgY29uc3QgZGlzdFRvVGFyZ2V0ID0gdCAqIHRoaXMucGFkZGVkTGVuZ3RoICsgdGhpcy5wYWRkaW5nO1xuXG4gICAgICAgIHdoaWxlIChkaXN0T2ZDdXJyZW50SWR4IDwgZGlzdFRvVGFyZ2V0ICYmIGN1cnJlbnRJbmRleCA8IHRoaXMuX2Rpc3RhbmNlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGRpc3RPZkN1cnJlbnRJZHggPSB0aGlzLl9kaXN0YW5jZXNbKytjdXJyZW50SW5kZXhdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSW50ZXJwb2xhdGUgYmV0d2VlbiB0aGUgdHdvIHBvaW50cyBvZiB0aGUgc2VnbWVudFxuICAgICAgICBjb25zdCBpZHhPZlByZXZQb2ludCA9IGN1cnJlbnRJbmRleCAtIDE7XG4gICAgICAgIGNvbnN0IGRpc3RPZlByZXZJZHggPSB0aGlzLl9kaXN0YW5jZXNbaWR4T2ZQcmV2UG9pbnRdO1xuICAgICAgICBjb25zdCBzZWdtZW50TGVuZ3RoID0gZGlzdE9mQ3VycmVudElkeCAtIGRpc3RPZlByZXZJZHg7XG4gICAgICAgIGNvbnN0IHNlZ21lbnRUID0gc2VnbWVudExlbmd0aCA+IDAgPyAoZGlzdFRvVGFyZ2V0IC0gZGlzdE9mUHJldklkeCkgLyBzZWdtZW50TGVuZ3RoIDogMDtcblxuICAgICAgICByZXR1cm4gdGhpcy5wb2ludHNbaWR4T2ZQcmV2UG9pbnRdLm11bHQoMS4wIC0gc2VnbWVudFQpLmFkZCh0aGlzLnBvaW50c1tjdXJyZW50SW5kZXhdLm11bHQoc2VnbWVudFQpKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFBhdGhJbnRlcnBvbGF0b3I7XG4iLCIvLyBAZmxvd1xuXG4vKipcbiAqIEdyaWRJbmRleCBpcyBhIGRhdGEgc3RydWN0dXJlIGZvciB0ZXN0aW5nIHRoZSBpbnRlcnNlY3Rpb24gb2ZcbiAqIGNpcmNsZXMgYW5kIHJlY3RhbmdsZXMgaW4gYSAyZCBwbGFuZS5cbiAqIEl0IGlzIG9wdGltaXplZCBmb3IgcmFwaWQgaW5zZXJ0aW9uIGFuZCBxdWVyeWluZy5cbiAqIEdyaWRJbmRleCBzcGxpdHMgdGhlIHBsYW5lIGludG8gYSBzZXQgb2YgXCJjZWxsc1wiIGFuZCBrZWVwcyB0cmFja1xuICogb2Ygd2hpY2ggZ2VvbWV0cmllcyBpbnRlcnNlY3Qgd2l0aCBlYWNoIGNlbGwuIEF0IHF1ZXJ5IHRpbWUsXG4gKiBmdWxsIGdlb21ldHJ5IGNvbXBhcmlzb25zIGFyZSBvbmx5IGRvbmUgZm9yIGl0ZW1zIHRoYXQgc2hhcmVcbiAqIGF0IGxlYXN0IG9uZSBjZWxsLiBBcyBsb25nIGFzIHRoZSBnZW9tZXRyaWVzIGFyZSByZWxhdGl2ZWx5XG4gKiB1bmlmb3JtbHkgZGlzdHJpYnV0ZWQgYWNyb3NzIHRoZSBwbGFuZSwgdGhpcyBncmVhdGx5IHJlZHVjZXNcbiAqIHRoZSBudW1iZXIgb2YgY29tcGFyaXNvbnMgbmVjZXNzYXJ5LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIEdyaWRJbmRleCB7XG4gICAgY2lyY2xlS2V5czogQXJyYXk8YW55PjtcbiAgICBib3hLZXlzOiBBcnJheTxhbnk+O1xuICAgIGJveENlbGxzOiBBcnJheTxBcnJheTxudW1iZXI+PjtcbiAgICBjaXJjbGVDZWxsczogQXJyYXk8QXJyYXk8bnVtYmVyPj47XG4gICAgYmJveGVzOiBBcnJheTxudW1iZXI+O1xuICAgIGNpcmNsZXM6IEFycmF5PG51bWJlcj47XG4gICAgeENlbGxDb3VudDogbnVtYmVyO1xuICAgIHlDZWxsQ291bnQ6IG51bWJlcjtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xuICAgIHhTY2FsZTogbnVtYmVyO1xuICAgIHlTY2FsZTogbnVtYmVyO1xuICAgIGJveFVpZDogbnVtYmVyO1xuICAgIGNpcmNsZVVpZDogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IgKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBjZWxsU2l6ZTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGJveENlbGxzID0gdGhpcy5ib3hDZWxscyA9IFtdO1xuICAgICAgICBjb25zdCBjaXJjbGVDZWxscyA9IHRoaXMuY2lyY2xlQ2VsbHMgPSBbXTtcblxuICAgICAgICAvLyBNb3JlIGNlbGxzIC0+IGZld2VyIGdlb21ldHJpZXMgdG8gY2hlY2sgcGVyIGNlbGwsIGJ1dCBpdGVtcyB0ZW5kXG4gICAgICAgIC8vIHRvIGJlIHNwbGl0IGFjcm9zcyBtb3JlIGNlbGxzLlxuICAgICAgICAvLyBTd2VldCBzcG90IGFsbG93cyBtb3N0IHNtYWxsIGl0ZW1zIHRvIGZpdCBpbiBvbmUgY2VsbFxuICAgICAgICB0aGlzLnhDZWxsQ291bnQgPSBNYXRoLmNlaWwod2lkdGggLyBjZWxsU2l6ZSk7XG4gICAgICAgIHRoaXMueUNlbGxDb3VudCA9IE1hdGguY2VpbChoZWlnaHQgLyBjZWxsU2l6ZSk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnhDZWxsQ291bnQgKiB0aGlzLnlDZWxsQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgYm94Q2VsbHMucHVzaChbXSk7XG4gICAgICAgICAgICBjaXJjbGVDZWxscy5wdXNoKFtdKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNpcmNsZUtleXMgPSBbXTtcbiAgICAgICAgdGhpcy5ib3hLZXlzID0gW107XG4gICAgICAgIHRoaXMuYmJveGVzID0gW107XG4gICAgICAgIHRoaXMuY2lyY2xlcyA9IFtdO1xuXG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIHRoaXMueFNjYWxlID0gdGhpcy54Q2VsbENvdW50IC8gd2lkdGg7XG4gICAgICAgIHRoaXMueVNjYWxlID0gdGhpcy55Q2VsbENvdW50IC8gaGVpZ2h0O1xuICAgICAgICB0aGlzLmJveFVpZCA9IDA7XG4gICAgICAgIHRoaXMuY2lyY2xlVWlkID0gMDtcbiAgICB9XG5cbiAgICBrZXlzTGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ib3hLZXlzLmxlbmd0aCArIHRoaXMuY2lyY2xlS2V5cy5sZW5ndGg7XG4gICAgfVxuXG4gICAgaW5zZXJ0KGtleTogYW55LCB4MTogbnVtYmVyLCB5MTogbnVtYmVyLCB4MjogbnVtYmVyLCB5MjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2ZvckVhY2hDZWxsKHgxLCB5MSwgeDIsIHkyLCB0aGlzLl9pbnNlcnRCb3hDZWxsLCB0aGlzLmJveFVpZCsrKTtcbiAgICAgICAgdGhpcy5ib3hLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgdGhpcy5iYm94ZXMucHVzaCh4MSk7XG4gICAgICAgIHRoaXMuYmJveGVzLnB1c2goeTEpO1xuICAgICAgICB0aGlzLmJib3hlcy5wdXNoKHgyKTtcbiAgICAgICAgdGhpcy5iYm94ZXMucHVzaCh5Mik7XG4gICAgfVxuXG4gICAgaW5zZXJ0Q2lyY2xlKGtleTogYW55LCB4OiBudW1iZXIsIHk6IG51bWJlciwgcmFkaXVzOiBudW1iZXIpIHtcbiAgICAgICAgLy8gSW5zZXJ0IGNpcmNsZSBpbnRvIGdyaWQgZm9yIGFsbCBjZWxscyBpbiB0aGUgY2lyY3Vtc2NyaWJpbmcgc3F1YXJlXG4gICAgICAgIC8vIEl0J3MgbW9yZSB0aGFuIG5lY2Vzc2FyeSAoYnkgYSBmYWN0b3Igb2YgNC9QSSksIGJ1dCBmYXN0IHRvIGluc2VydFxuICAgICAgICB0aGlzLl9mb3JFYWNoQ2VsbCh4IC0gcmFkaXVzLCB5IC0gcmFkaXVzLCB4ICsgcmFkaXVzLCB5ICsgcmFkaXVzLCB0aGlzLl9pbnNlcnRDaXJjbGVDZWxsLCB0aGlzLmNpcmNsZVVpZCsrKTtcbiAgICAgICAgdGhpcy5jaXJjbGVLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgdGhpcy5jaXJjbGVzLnB1c2goeCk7XG4gICAgICAgIHRoaXMuY2lyY2xlcy5wdXNoKHkpO1xuICAgICAgICB0aGlzLmNpcmNsZXMucHVzaChyYWRpdXMpO1xuICAgIH1cblxuICAgIF9pbnNlcnRCb3hDZWxsKHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIsIGNlbGxJbmRleDogbnVtYmVyLCB1aWQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLmJveENlbGxzW2NlbGxJbmRleF0ucHVzaCh1aWQpO1xuICAgIH1cblxuICAgIF9pbnNlcnRDaXJjbGVDZWxsKHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIsIGNlbGxJbmRleDogbnVtYmVyLCB1aWQ6IG51bWJlcikgIHtcbiAgICAgICAgdGhpcy5jaXJjbGVDZWxsc1tjZWxsSW5kZXhdLnB1c2godWlkKTtcbiAgICB9XG5cbiAgICBfcXVlcnkoeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlciwgaGl0VGVzdDogYm9vbGVhbiwgcHJlZGljYXRlPzogYW55KSB7XG4gICAgICAgIGlmICh4MiA8IDAgfHwgeDEgPiB0aGlzLndpZHRoIHx8IHkyIDwgMCB8fCB5MSA+IHRoaXMuaGVpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm4gaGl0VGVzdCA/IGZhbHNlIDogW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGlmICh4MSA8PSAwICYmIHkxIDw9IDAgJiYgdGhpcy53aWR0aCA8PSB4MiAmJiB0aGlzLmhlaWdodCA8PSB5Mikge1xuICAgICAgICAgICAgaWYgKGhpdFRlc3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGJveFVpZCA9IDA7IGJveFVpZCA8IHRoaXMuYm94S2V5cy5sZW5ndGg7IGJveFVpZCsrKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBrZXk6IHRoaXMuYm94S2V5c1tib3hVaWRdLFxuICAgICAgICAgICAgICAgICAgICB4MTogdGhpcy5iYm94ZXNbYm94VWlkICogNF0sXG4gICAgICAgICAgICAgICAgICAgIHkxOiB0aGlzLmJib3hlc1tib3hVaWQgKiA0ICsgMV0sXG4gICAgICAgICAgICAgICAgICAgIHgyOiB0aGlzLmJib3hlc1tib3hVaWQgKiA0ICsgMl0sXG4gICAgICAgICAgICAgICAgICAgIHkyOiB0aGlzLmJib3hlc1tib3hVaWQgKiA0ICsgM11cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGNpcmNsZVVpZCA9IDA7IGNpcmNsZVVpZCA8IHRoaXMuY2lyY2xlS2V5cy5sZW5ndGg7IGNpcmNsZVVpZCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeCA9IHRoaXMuY2lyY2xlc1tjaXJjbGVVaWQgKiAzXTtcbiAgICAgICAgICAgICAgICBjb25zdCB5ID0gdGhpcy5jaXJjbGVzW2NpcmNsZVVpZCAqIDMgKyAxXTtcbiAgICAgICAgICAgICAgICBjb25zdCByYWRpdXMgPSB0aGlzLmNpcmNsZXNbY2lyY2xlVWlkICogMyArIDJdO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiB0aGlzLmNpcmNsZUtleXNbY2lyY2xlVWlkXSxcbiAgICAgICAgICAgICAgICAgICAgeDE6IHggLSByYWRpdXMsXG4gICAgICAgICAgICAgICAgICAgIHkxOiB5IC0gcmFkaXVzLFxuICAgICAgICAgICAgICAgICAgICB4MjogeCArIHJhZGl1cyxcbiAgICAgICAgICAgICAgICAgICAgeTI6IHkgKyByYWRpdXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwcmVkaWNhdGUgPyByZXN1bHQuZmlsdGVyKHByZWRpY2F0ZSkgOiByZXN1bHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBxdWVyeUFyZ3MgPSB7XG4gICAgICAgICAgICAgICAgaGl0VGVzdCxcbiAgICAgICAgICAgICAgICBzZWVuVWlkczoge2JveDoge30sIGNpcmNsZToge319XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5fZm9yRWFjaENlbGwoeDEsIHkxLCB4MiwgeTIsIHRoaXMuX3F1ZXJ5Q2VsbCwgcmVzdWx0LCBxdWVyeUFyZ3MsIHByZWRpY2F0ZSk7XG4gICAgICAgICAgICByZXR1cm4gaGl0VGVzdCA/IHJlc3VsdC5sZW5ndGggPiAwIDogcmVzdWx0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3F1ZXJ5Q2lyY2xlKHg6IG51bWJlciwgeTogbnVtYmVyLCByYWRpdXM6IG51bWJlciwgaGl0VGVzdDogYm9vbGVhbiwgcHJlZGljYXRlPzogYW55KSB7XG4gICAgICAgIC8vIEluc2VydCBjaXJjbGUgaW50byBncmlkIGZvciBhbGwgY2VsbHMgaW4gdGhlIGNpcmN1bXNjcmliaW5nIHNxdWFyZVxuICAgICAgICAvLyBJdCdzIG1vcmUgdGhhbiBuZWNlc3NhcnkgKGJ5IGEgZmFjdG9yIG9mIDQvUEkpLCBidXQgZmFzdCB0byBpbnNlcnRcbiAgICAgICAgY29uc3QgeDEgPSB4IC0gcmFkaXVzO1xuICAgICAgICBjb25zdCB4MiA9IHggKyByYWRpdXM7XG4gICAgICAgIGNvbnN0IHkxID0geSAtIHJhZGl1cztcbiAgICAgICAgY29uc3QgeTIgPSB5ICsgcmFkaXVzO1xuICAgICAgICBpZiAoeDIgPCAwIHx8IHgxID4gdGhpcy53aWR0aCB8fCB5MiA8IDAgfHwgeTEgPiB0aGlzLmhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuIGhpdFRlc3QgPyBmYWxzZSA6IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQm94IHF1ZXJ5IGVhcmx5IGV4aXRzIGlmIHRoZSBib3VuZGluZyBib3ggaXMgbGFyZ2VyIHRoYW4gdGhlIGdyaWQsIGJ1dCB3ZSBkb24ndCBkb1xuICAgICAgICAvLyB0aGUgZXF1aXZhbGVudCBjYWxjdWxhdGlvbiBmb3IgY2lyY2xlIHF1ZXJpZXMgYmVjYXVzZSBlYXJseSBleGl0IGlzIGxlc3MgbGlrZWx5XG4gICAgICAgIC8vIGFuZCB0aGUgY2FsY3VsYXRpb24gaXMgbW9yZSBleHBlbnNpdmVcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGNvbnN0IHF1ZXJ5QXJncyA9IHtcbiAgICAgICAgICAgIGhpdFRlc3QsXG4gICAgICAgICAgICBjaXJjbGU6IHt4LCB5LCByYWRpdXN9LFxuICAgICAgICAgICAgc2VlblVpZHM6IHtib3g6IHt9LCBjaXJjbGU6IHt9fVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLl9mb3JFYWNoQ2VsbCh4MSwgeTEsIHgyLCB5MiwgdGhpcy5fcXVlcnlDZWxsQ2lyY2xlLCByZXN1bHQsIHF1ZXJ5QXJncywgcHJlZGljYXRlKTtcbiAgICAgICAgcmV0dXJuIGhpdFRlc3QgPyByZXN1bHQubGVuZ3RoID4gMCA6IHJlc3VsdDtcbiAgICB9XG5cbiAgICBxdWVyeSh4MTogbnVtYmVyLCB5MTogbnVtYmVyLCB4MjogbnVtYmVyLCB5MjogbnVtYmVyLCBwcmVkaWNhdGU/OiBhbnkpOiBBcnJheTxhbnk+IHtcbiAgICAgICAgcmV0dXJuICh0aGlzLl9xdWVyeSh4MSwgeTEsIHgyLCB5MiwgZmFsc2UsIHByZWRpY2F0ZSk6IGFueSk7XG4gICAgfVxuXG4gICAgaGl0VGVzdCh4MTogbnVtYmVyLCB5MTogbnVtYmVyLCB4MjogbnVtYmVyLCB5MjogbnVtYmVyLCBwcmVkaWNhdGU/OiBhbnkpOiBib29sZWFuICB7XG4gICAgICAgIHJldHVybiAodGhpcy5fcXVlcnkoeDEsIHkxLCB4MiwgeTIsIHRydWUsIHByZWRpY2F0ZSk6IGFueSk7XG4gICAgfVxuXG4gICAgaGl0VGVzdENpcmNsZSh4OiBudW1iZXIsIHk6IG51bWJlciwgcmFkaXVzOiBudW1iZXIsIHByZWRpY2F0ZT86IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKHRoaXMuX3F1ZXJ5Q2lyY2xlKHgsIHksIHJhZGl1cywgdHJ1ZSwgcHJlZGljYXRlKTogYW55KTtcbiAgICB9XG5cbiAgICBfcXVlcnlDZWxsKHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIsIGNlbGxJbmRleDogbnVtYmVyLCByZXN1bHQ6IGFueSwgcXVlcnlBcmdzOiBhbnksIHByZWRpY2F0ZT86IGFueSkge1xuICAgICAgICBjb25zdCBzZWVuVWlkcyA9IHF1ZXJ5QXJncy5zZWVuVWlkcztcbiAgICAgICAgY29uc3QgYm94Q2VsbCA9IHRoaXMuYm94Q2VsbHNbY2VsbEluZGV4XTtcbiAgICAgICAgaWYgKGJveENlbGwgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGJib3hlcyA9IHRoaXMuYmJveGVzO1xuICAgICAgICAgICAgZm9yIChjb25zdCBib3hVaWQgb2YgYm94Q2VsbCkge1xuICAgICAgICAgICAgICAgIGlmICghc2VlblVpZHMuYm94W2JveFVpZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgc2VlblVpZHMuYm94W2JveFVpZF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPSBib3hVaWQgKiA0O1xuICAgICAgICAgICAgICAgICAgICBpZiAoKHgxIDw9IGJib3hlc1tvZmZzZXQgKyAyXSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICh5MSA8PSBiYm94ZXNbb2Zmc2V0ICsgM10pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoeDIgPj0gYmJveGVzW29mZnNldCArIDBdKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKHkyID49IGJib3hlc1tvZmZzZXQgKyAxXSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICghcHJlZGljYXRlIHx8IHByZWRpY2F0ZSh0aGlzLmJveEtleXNbYm94VWlkXSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVlcnlBcmdzLmhpdFRlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IHRoaXMuYm94S2V5c1tib3hVaWRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MTogYmJveGVzW29mZnNldF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxOiBiYm94ZXNbb2Zmc2V0ICsgMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyOiBiYm94ZXNbb2Zmc2V0ICsgMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkyOiBiYm94ZXNbb2Zmc2V0ICsgM11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaXJjbGVDZWxsID0gdGhpcy5jaXJjbGVDZWxsc1tjZWxsSW5kZXhdO1xuICAgICAgICBpZiAoY2lyY2xlQ2VsbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgY2lyY2xlcyA9IHRoaXMuY2lyY2xlcztcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2lyY2xlVWlkIG9mIGNpcmNsZUNlbGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXNlZW5VaWRzLmNpcmNsZVtjaXJjbGVVaWRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlZW5VaWRzLmNpcmNsZVtjaXJjbGVVaWRdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gY2lyY2xlVWlkICogMztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NpcmNsZUFuZFJlY3RDb2xsaWRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlc1tvZmZzZXRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlc1tvZmZzZXQgKyAxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZXNbb2Zmc2V0ICsgMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICB4MSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHkxLFxuICAgICAgICAgICAgICAgICAgICAgICAgeDIsXG4gICAgICAgICAgICAgICAgICAgICAgICB5MikgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICghcHJlZGljYXRlIHx8IHByZWRpY2F0ZSh0aGlzLmNpcmNsZUtleXNbY2lyY2xlVWlkXSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVlcnlBcmdzLmhpdFRlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeCA9IGNpcmNsZXNbb2Zmc2V0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB5ID0gY2lyY2xlc1tvZmZzZXQgKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByYWRpdXMgPSBjaXJjbGVzW29mZnNldCArIDJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiB0aGlzLmNpcmNsZUtleXNbY2lyY2xlVWlkXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDE6IHggLSByYWRpdXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxOiB5IC0gcmFkaXVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MjogeCArIHJhZGl1cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTI6IHkgKyByYWRpdXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9xdWVyeUNlbGxDaXJjbGUoeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlciwgY2VsbEluZGV4OiBudW1iZXIsIHJlc3VsdDogYW55LCBxdWVyeUFyZ3M6IGFueSwgcHJlZGljYXRlPzogYW55KSB7XG4gICAgICAgIGNvbnN0IGNpcmNsZSA9IHF1ZXJ5QXJncy5jaXJjbGU7XG4gICAgICAgIGNvbnN0IHNlZW5VaWRzID0gcXVlcnlBcmdzLnNlZW5VaWRzO1xuICAgICAgICBjb25zdCBib3hDZWxsID0gdGhpcy5ib3hDZWxsc1tjZWxsSW5kZXhdO1xuICAgICAgICBpZiAoYm94Q2VsbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgYmJveGVzID0gdGhpcy5iYm94ZXM7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGJveFVpZCBvZiBib3hDZWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzZWVuVWlkcy5ib3hbYm94VWlkXSkge1xuICAgICAgICAgICAgICAgICAgICBzZWVuVWlkcy5ib3hbYm94VWlkXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IGJveFVpZCAqIDQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaXJjbGVBbmRSZWN0Q29sbGlkZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZS54LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlLnksXG4gICAgICAgICAgICAgICAgICAgICAgICBjaXJjbGUucmFkaXVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmJveGVzW29mZnNldCArIDBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmJveGVzW29mZnNldCArIDFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmJveGVzW29mZnNldCArIDJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmJveGVzW29mZnNldCArIDNdKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKCFwcmVkaWNhdGUgfHwgcHJlZGljYXRlKHRoaXMuYm94S2V5c1tib3hVaWRdKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjaXJjbGVDZWxsID0gdGhpcy5jaXJjbGVDZWxsc1tjZWxsSW5kZXhdO1xuICAgICAgICBpZiAoY2lyY2xlQ2VsbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgY2lyY2xlcyA9IHRoaXMuY2lyY2xlcztcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2lyY2xlVWlkIG9mIGNpcmNsZUNlbGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXNlZW5VaWRzLmNpcmNsZVtjaXJjbGVVaWRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlZW5VaWRzLmNpcmNsZVtjaXJjbGVVaWRdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gY2lyY2xlVWlkICogMztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NpcmNsZXNDb2xsaWRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlc1tvZmZzZXRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlc1tvZmZzZXQgKyAxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZXNbb2Zmc2V0ICsgMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjaXJjbGUueCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZS55LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlLnJhZGl1cykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICghcHJlZGljYXRlIHx8IHByZWRpY2F0ZSh0aGlzLmNpcmNsZUtleXNbY2lyY2xlVWlkXSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2ZvckVhY2hDZWxsKHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIsIGZuOiBhbnksIGFyZzE6IGFueSwgYXJnMj86IGFueSwgcHJlZGljYXRlPzogYW55KSB7XG4gICAgICAgIGNvbnN0IGN4MSA9IHRoaXMuX2NvbnZlcnRUb1hDZWxsQ29vcmQoeDEpO1xuICAgICAgICBjb25zdCBjeTEgPSB0aGlzLl9jb252ZXJ0VG9ZQ2VsbENvb3JkKHkxKTtcbiAgICAgICAgY29uc3QgY3gyID0gdGhpcy5fY29udmVydFRvWENlbGxDb29yZCh4Mik7XG4gICAgICAgIGNvbnN0IGN5MiA9IHRoaXMuX2NvbnZlcnRUb1lDZWxsQ29vcmQoeTIpO1xuXG4gICAgICAgIGZvciAobGV0IHggPSBjeDE7IHggPD0gY3gyOyB4KyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IHkgPSBjeTE7IHkgPD0gY3kyOyB5KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsSW5kZXggPSB0aGlzLnhDZWxsQ291bnQgKiB5ICsgeDtcbiAgICAgICAgICAgICAgICBpZiAoZm4uY2FsbCh0aGlzLCB4MSwgeTEsIHgyLCB5MiwgY2VsbEluZGV4LCBhcmcxLCBhcmcyLCBwcmVkaWNhdGUpKSByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfY29udmVydFRvWENlbGxDb29yZCh4OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKHRoaXMueENlbGxDb3VudCAtIDEsIE1hdGguZmxvb3IoeCAqIHRoaXMueFNjYWxlKSkpO1xuICAgIH1cblxuICAgIF9jb252ZXJ0VG9ZQ2VsbENvb3JkKHk6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4odGhpcy55Q2VsbENvdW50IC0gMSwgTWF0aC5mbG9vcih5ICogdGhpcy55U2NhbGUpKSk7XG4gICAgfVxuXG4gICAgX2NpcmNsZXNDb2xsaWRlKHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHIxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIsIHIyOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZHggPSB4MiAtIHgxO1xuICAgICAgICBjb25zdCBkeSA9IHkyIC0geTE7XG4gICAgICAgIGNvbnN0IGJvdGhSYWRpaSA9IHIxICsgcjI7XG4gICAgICAgIHJldHVybiAoYm90aFJhZGlpICogYm90aFJhZGlpKSA+IChkeCAqIGR4ICsgZHkgKiBkeSk7XG4gICAgfVxuXG4gICAgX2NpcmNsZUFuZFJlY3RDb2xsaWRlKGNpcmNsZVg6IG51bWJlciwgY2lyY2xlWTogbnVtYmVyLCByYWRpdXM6IG51bWJlciwgeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBoYWxmUmVjdFdpZHRoID0gKHgyIC0geDEpIC8gMjtcbiAgICAgICAgY29uc3QgZGlzdFggPSBNYXRoLmFicyhjaXJjbGVYIC0gKHgxICsgaGFsZlJlY3RXaWR0aCkpO1xuICAgICAgICBpZiAoZGlzdFggPiAoaGFsZlJlY3RXaWR0aCArIHJhZGl1cykpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhhbGZSZWN0SGVpZ2h0ID0gKHkyIC0geTEpIC8gMjtcbiAgICAgICAgY29uc3QgZGlzdFkgPSBNYXRoLmFicyhjaXJjbGVZIC0gKHkxICsgaGFsZlJlY3RIZWlnaHQpKTtcbiAgICAgICAgaWYgKGRpc3RZID4gKGhhbGZSZWN0SGVpZ2h0ICsgcmFkaXVzKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpc3RYIDw9IGhhbGZSZWN0V2lkdGggfHwgZGlzdFkgPD0gaGFsZlJlY3RIZWlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZHggPSBkaXN0WCAtIGhhbGZSZWN0V2lkdGg7XG4gICAgICAgIGNvbnN0IGR5ID0gZGlzdFkgLSBoYWxmUmVjdEhlaWdodDtcbiAgICAgICAgcmV0dXJuIChkeCAqIGR4ICsgZHkgKiBkeSA8PSAocmFkaXVzICogcmFkaXVzKSk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBHcmlkSW5kZXg7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbmltcG9ydCB7bWF0NCwgdmVjNH0gZnJvbSAnZ2wtbWF0cml4JztcbmltcG9ydCAqIGFzIHN5bWJvbFNpemUgZnJvbSAnLi9zeW1ib2xfc2l6ZSc7XG5pbXBvcnQge2FkZER5bmFtaWNBdHRyaWJ1dGVzfSBmcm9tICcuLi9kYXRhL2J1Y2tldC9zeW1ib2xfYnVja2V0JztcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuLi9yZW5kZXIvcGFpbnRlcic7XG5pbXBvcnQgdHlwZSBUcmFuc2Zvcm0gZnJvbSAnLi4vZ2VvL3RyYW5zZm9ybSc7XG5pbXBvcnQgdHlwZSBTeW1ib2xCdWNrZXQgZnJvbSAnLi4vZGF0YS9idWNrZXQvc3ltYm9sX2J1Y2tldCc7XG5pbXBvcnQgdHlwZSB7XG4gICAgR2x5cGhPZmZzZXRBcnJheSxcbiAgICBTeW1ib2xMaW5lVmVydGV4QXJyYXksXG4gICAgU3ltYm9sRHluYW1pY0xheW91dEFycmF5XG59IGZyb20gJy4uL2RhdGEvYXJyYXlfdHlwZXMnO1xuaW1wb3J0IHtXcml0aW5nTW9kZX0gZnJvbSAnLi4vc3ltYm9sL3NoYXBpbmcnO1xuXG5leHBvcnQge3VwZGF0ZUxpbmVMYWJlbHMsIGhpZGVHbHlwaHMsIGdldExhYmVsUGxhbmVNYXRyaXgsIGdldEdsQ29vcmRNYXRyaXgsIHByb2plY3QsIGdldFBlcnNwZWN0aXZlUmF0aW8sIHBsYWNlRmlyc3RBbmRMYXN0R2x5cGgsIHBsYWNlR2x5cGhBbG9uZ0xpbmUsIHh5VHJhbnNmb3JtTWF0NH07XG5cbi8qXG4gKiAjIE92ZXJ2aWV3IG9mIGNvb3JkaW5hdGUgc3BhY2VzXG4gKlxuICogIyMgVGlsZSBjb29yZGluYXRlIHNwYWNlc1xuICogRWFjaCBsYWJlbCBoYXMgYW4gYW5jaG9yLiBTb21lIGxhYmVscyBoYXZlIGNvcnJlc3BvbmRpbmcgbGluZSBnZW9tZXRyaWVzLlxuICogVGhlIHBvaW50cyBmb3IgYm90aCBhbmNob3JzIGFuZCBsaW5lcyBhcmUgc3RvcmVkIGluIHRpbGUgdW5pdHMuIEVhY2ggdGlsZSBoYXMgaXQncyBvd25cbiAqIGNvb3JkaW5hdGUgc3BhY2UgZ29pbmcgZnJvbSAoMCwgMCkgYXQgdGhlIHRvcCBsZWZ0IHRvIChFWFRFTlQsIEVYVEVOVCkgYXQgdGhlIGJvdHRvbSByaWdodC5cbiAqXG4gKiAjIyBHTCBjb29yZGluYXRlIHNwYWNlXG4gKiBBdCB0aGUgZW5kIG9mIGV2ZXJ5dGhpbmcsIHRoZSB2ZXJ0ZXggc2hhZGVyIG5lZWRzIHRvIHByb2R1Y2UgYSBwb3NpdGlvbiBpbiBHTCBjb29yZGluYXRlIHNwYWNlLFxuICogd2hpY2ggaXMgKC0xLCAxKSBhdCB0aGUgdG9wIGxlZnQgYW5kICgxLCAtMSkgaW4gdGhlIGJvdHRvbSByaWdodC5cbiAqXG4gKiAjIyBNYXAgcGl4ZWwgY29vcmRpbmF0ZSBzcGFjZXNcbiAqIEVhY2ggdGlsZSBoYXMgYSBwaXhlbCBjb29yZGluYXRlIHNwYWNlLiBJdCdzIGp1c3QgdGhlIHRpbGUgdW5pdHMgc2NhbGVkIHNvIHRoYXQgb25lIHVuaXQgaXNcbiAqIHdoYXRldmVyIGNvdW50cyBhcyAxIHBpeGVsIGF0IHRoZSBjdXJyZW50IHpvb20uXG4gKiBUaGlzIHNwYWNlIGlzIHVzZWQgZm9yIHBpdGNoLWFsaWdubWVudD1tYXAsIHJvdGF0aW9uLWFsaWdubWVudD1tYXBcbiAqXG4gKiAjIyBSb3RhdGVkIG1hcCBwaXhlbCBjb29yZGluYXRlIHNwYWNlc1xuICogTGlrZSB0aGUgYWJvdmUsIGJ1dCByb3RhdGVkIHNvIGF4aXMgb2YgdGhlIHNwYWNlIGFyZSBhbGlnbmVkIHdpdGggdGhlIHZpZXdwb3J0IGluc3RlYWQgb2YgdGhlIHRpbGUuXG4gKiBUaGlzIHNwYWNlIGlzIHVzZWQgZm9yIHBpdGNoLWFsaWdubWVudD1tYXAsIHJvdGF0aW9uLWFsaWdubWVudD12aWV3cG9ydFxuICpcbiAqICMjIFZpZXdwb3J0IHBpeGVsIGNvb3JkaW5hdGUgc3BhY2VcbiAqICgwLCAwKSBpcyBhdCB0aGUgdG9wIGxlZnQgb2YgdGhlIGNhbnZhcyBhbmQgKHBpeGVsV2lkdGgsIHBpeGVsSGVpZ2h0KSBpcyBhdCB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lclxuICogb2YgdGhlIGNhbnZhcy4gVGhpcyBzcGFjZSBpcyB1c2VkIGZvciBwaXRjaC1hbGlnbm1lbnQ9dmlld3BvcnRcbiAqXG4gKlxuICogIyBWZXJ0ZXggcHJvamVjdGlvblxuICogSXQgZ29lcyByb3VnaGx5IGxpa2UgdGhpczpcbiAqIDEuIHByb2plY3QgdGhlIGFuY2hvciBhbmQgbGluZSBmcm9tIHRpbGUgdW5pdHMgaW50byB0aGUgY29ycmVjdCBsYWJlbCBjb29yZGluYXRlIHNwYWNlXG4gKiAgICAgIC0gbWFwIHBpeGVsIHNwYWNlICAgICAgICAgICBwaXRjaC1hbGlnbm1lbnQ9bWFwICAgICAgICAgcm90YXRpb24tYWxpZ25tZW50PW1hcFxuICogICAgICAtIHJvdGF0ZWQgbWFwIHBpeGVsIHNwYWNlICAgcGl0Y2gtYWxpZ25tZW50PW1hcCAgICAgICAgIHJvdGF0aW9uLWFsaWdubWVudD12aWV3cG9ydFxuICogICAgICAtIHZpZXdwb3J0IHBpeGVsIHNwYWNlICAgICAgcGl0Y2gtYWxpZ25tZW50PXZpZXdwb3J0ICAgIHJvdGF0aW9uLWFsaWdubWVudD0qXG4gKiAyLiBpZiB0aGUgbGFiZWwgZm9sbG93cyBhIGxpbmUsIGZpbmQgdGhlIHBvaW50IGFsb25nIHRoZSBsaW5lIHRoYXQgaXMgdGhlIGNvcnJlY3QgZGlzdGFuY2UgZnJvbSB0aGUgYW5jaG9yLlxuICogMy4gYWRkIHRoZSBnbHlwaCdzIGNvcm5lciBvZmZzZXQgdG8gdGhlIHBvaW50IGZyb20gc3RlcCAzXG4gKiA0LiBjb252ZXJ0IGZyb20gdGhlIGxhYmVsIGNvb3JkaW5hdGUgc3BhY2UgdG8gZ2wgY29vcmRpbmF0ZXNcbiAqXG4gKiBGb3IgaG9yaXpvbnRhbCBsYWJlbHMgd2Ugd2FudCB0byBkbyBzdGVwIDEgaW4gdGhlIHNoYWRlciBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyAobm8gY3B1IHdvcmspLlxuICogICAgICBUaGlzIGlzIHdoYXQgYHVfbGFiZWxfcGxhbmVfbWF0cml4YCBpcyB1c2VkIGZvci5cbiAqIEZvciBsYWJlbHMgYWxpZ25lZCB3aXRoIGxpbmVzIHdlIGhhdmUgdG8gc3RlcHMgMSBhbmQgMiBvbiB0aGUgY3B1IHNpbmNlIHdlIG5lZWQgYWNjZXNzIHRvIHRoZSBsaW5lIGdlb21ldHJ5LlxuICogICAgICBUaGlzIGlzIHdoYXQgYHVwZGF0ZUxpbmVMYWJlbHMoLi4uKWAgZG9lcy5cbiAqICAgICAgU2luY2UgdGhlIGNvbnZlcnNpb24gaXMgaGFuZGxlZCBvbiB0aGUgY3B1IHdlIGp1c3Qgc2V0IGB1X2xhYmVsX3BsYW5lX21hdHJpeGAgdG8gYW4gaWRlbnRpdHkgbWF0cml4LlxuICpcbiAqIFN0ZXBzIDMgYW5kIDQgYXJlIGRvbmUgaW4gdGhlIHNoYWRlcnMgZm9yIGFsbCBsYWJlbHMuXG4gKi9cblxuLypcbiAqIFJldHVybnMgYSBtYXRyaXggZm9yIGNvbnZlcnRpbmcgZnJvbSB0aWxlIHVuaXRzIHRvIHRoZSBjb3JyZWN0IGxhYmVsIGNvb3JkaW5hdGUgc3BhY2UuXG4gKi9cbmZ1bmN0aW9uIGdldExhYmVsUGxhbmVNYXRyaXgocG9zTWF0cml4OiBtYXQ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXRjaFdpdGhNYXA6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZVdpdGhNYXA6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbHNUb1RpbGVVbml0czogbnVtYmVyKSB7XG4gICAgY29uc3QgbSA9IG1hdDQuY3JlYXRlKCk7XG4gICAgaWYgKHBpdGNoV2l0aE1hcCkge1xuICAgICAgICBtYXQ0LnNjYWxlKG0sIG0sIFsxIC8gcGl4ZWxzVG9UaWxlVW5pdHMsIDEgLyBwaXhlbHNUb1RpbGVVbml0cywgMV0pO1xuICAgICAgICBpZiAoIXJvdGF0ZVdpdGhNYXApIHtcbiAgICAgICAgICAgIG1hdDQucm90YXRlWihtLCBtLCB0cmFuc2Zvcm0uYW5nbGUpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbWF0NC5tdWx0aXBseShtLCB0cmFuc2Zvcm0ubGFiZWxQbGFuZU1hdHJpeCwgcG9zTWF0cml4KTtcbiAgICB9XG4gICAgcmV0dXJuIG07XG59XG5cbi8qXG4gKiBSZXR1cm5zIGEgbWF0cml4IGZvciBjb252ZXJ0aW5nIGZyb20gdGhlIGNvcnJlY3QgbGFiZWwgY29vcmRpbmF0ZSBzcGFjZSB0byBnbCBjb29yZHMuXG4gKi9cbmZ1bmN0aW9uIGdldEdsQ29vcmRNYXRyaXgocG9zTWF0cml4OiBtYXQ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwaXRjaFdpdGhNYXA6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZVdpdGhNYXA6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbHNUb1RpbGVVbml0czogbnVtYmVyKSB7XG4gICAgaWYgKHBpdGNoV2l0aE1hcCkge1xuICAgICAgICBjb25zdCBtID0gbWF0NC5jbG9uZShwb3NNYXRyaXgpO1xuICAgICAgICBtYXQ0LnNjYWxlKG0sIG0sIFtwaXhlbHNUb1RpbGVVbml0cywgcGl4ZWxzVG9UaWxlVW5pdHMsIDFdKTtcbiAgICAgICAgaWYgKCFyb3RhdGVXaXRoTWFwKSB7XG4gICAgICAgICAgICBtYXQ0LnJvdGF0ZVoobSwgbSwgLXRyYW5zZm9ybS5hbmdsZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRyYW5zZm9ybS5nbENvb3JkTWF0cml4O1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcHJvamVjdChwb2ludDogUG9pbnQsIG1hdHJpeDogbWF0NCkge1xuICAgIGNvbnN0IHBvcyA9IFtwb2ludC54LCBwb2ludC55LCAwLCAxXTtcbiAgICB4eVRyYW5zZm9ybU1hdDQocG9zLCBwb3MsIG1hdHJpeCk7XG4gICAgY29uc3QgdyA9IHBvc1szXTtcbiAgICByZXR1cm4ge1xuICAgICAgICBwb2ludDogbmV3IFBvaW50KHBvc1swXSAvIHcsIHBvc1sxXSAvIHcpLFxuICAgICAgICBzaWduZWREaXN0YW5jZUZyb21DYW1lcmE6IHdcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBnZXRQZXJzcGVjdGl2ZVJhdGlvKGNhbWVyYVRvQ2VudGVyRGlzdGFuY2U6IG51bWJlciwgc2lnbmVkRGlzdGFuY2VGcm9tQ2FtZXJhOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiAwLjUgKyAwLjUgKiAoY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSAvIHNpZ25lZERpc3RhbmNlRnJvbUNhbWVyYSk7XG59XG5cbmZ1bmN0aW9uIGlzVmlzaWJsZShhbmNob3JQb3M6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICAgICAgICAgICAgICAgICAgIGNsaXBwaW5nQnVmZmVyOiBbbnVtYmVyLCBudW1iZXJdKSB7XG4gICAgY29uc3QgeCA9IGFuY2hvclBvc1swXSAvIGFuY2hvclBvc1szXTtcbiAgICBjb25zdCB5ID0gYW5jaG9yUG9zWzFdIC8gYW5jaG9yUG9zWzNdO1xuICAgIGNvbnN0IGluUGFkZGVkVmlld3BvcnQgPSAoXG4gICAgICAgIHggPj0gLWNsaXBwaW5nQnVmZmVyWzBdICYmXG4gICAgICAgIHggPD0gY2xpcHBpbmdCdWZmZXJbMF0gJiZcbiAgICAgICAgeSA+PSAtY2xpcHBpbmdCdWZmZXJbMV0gJiZcbiAgICAgICAgeSA8PSBjbGlwcGluZ0J1ZmZlclsxXSk7XG4gICAgcmV0dXJuIGluUGFkZGVkVmlld3BvcnQ7XG59XG5cbi8qXG4gKiAgVXBkYXRlIHRoZSBgZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlcmAgZm9yIHRoZSBidWZmZXIgd2l0aCB0aGUgY29ycmVjdCBnbHlwaCBwb3NpdGlvbnMgZm9yIHRoZSBjdXJyZW50IG1hcCB2aWV3LlxuICogIFRoaXMgaXMgb25seSBydW4gb24gbGFiZWxzIHRoYXQgYXJlIGFsaWduZWQgd2l0aCBsaW5lcy4gSG9yaXpvbnRhbCBsYWJlbHMgYXJlIGhhbmRsZWQgZW50aXJlbHkgaW4gdGhlIHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gdXBkYXRlTGluZUxhYmVscyhidWNrZXQ6IFN5bWJvbEJ1Y2tldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zTWF0cml4OiBtYXQ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwYWludGVyOiBQYWludGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpc1RleHQ6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsUGxhbmVNYXRyaXg6IG1hdDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGdsQ29vcmRNYXRyaXg6IG1hdDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBpdGNoV2l0aE1hcDogYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAga2VlcFVwcmlnaHQ6IGJvb2xlYW4pIHtcblxuICAgIGNvbnN0IHNpemVEYXRhID0gaXNUZXh0ID8gYnVja2V0LnRleHRTaXplRGF0YSA6IGJ1Y2tldC5pY29uU2l6ZURhdGE7XG4gICAgY29uc3QgcGFydGlhbGx5RXZhbHVhdGVkU2l6ZSA9IHN5bWJvbFNpemUuZXZhbHVhdGVTaXplRm9yWm9vbShzaXplRGF0YSwgcGFpbnRlci50cmFuc2Zvcm0uem9vbSk7XG5cbiAgICBjb25zdCBjbGlwcGluZ0J1ZmZlciA9IFsyNTYgLyBwYWludGVyLndpZHRoICogMiArIDEsIDI1NiAvIHBhaW50ZXIuaGVpZ2h0ICogMiArIDFdO1xuXG4gICAgY29uc3QgZHluYW1pY0xheW91dFZlcnRleEFycmF5ID0gaXNUZXh0ID9cbiAgICAgICAgYnVja2V0LnRleHQuZHluYW1pY0xheW91dFZlcnRleEFycmF5IDpcbiAgICAgICAgYnVja2V0Lmljb24uZHluYW1pY0xheW91dFZlcnRleEFycmF5O1xuICAgIGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheS5jbGVhcigpO1xuXG4gICAgY29uc3QgbGluZVZlcnRleEFycmF5ID0gYnVja2V0LmxpbmVWZXJ0ZXhBcnJheTtcbiAgICBjb25zdCBwbGFjZWRTeW1ib2xzID0gaXNUZXh0ID8gYnVja2V0LnRleHQucGxhY2VkU3ltYm9sQXJyYXkgOiBidWNrZXQuaWNvbi5wbGFjZWRTeW1ib2xBcnJheTtcblxuICAgIGNvbnN0IGFzcGVjdFJhdGlvID0gcGFpbnRlci50cmFuc2Zvcm0ud2lkdGggLyBwYWludGVyLnRyYW5zZm9ybS5oZWlnaHQ7XG5cbiAgICBsZXQgdXNlVmVydGljYWwgPSBmYWxzZTtcblxuICAgIGZvciAobGV0IHMgPSAwOyBzIDwgcGxhY2VkU3ltYm9scy5sZW5ndGg7IHMrKykge1xuICAgICAgICBjb25zdCBzeW1ib2w6IGFueSA9IHBsYWNlZFN5bWJvbHMuZ2V0KHMpO1xuXG4gICAgICAgIC8vIERvbid0IGRvIGNhbGN1bGF0aW9ucyBmb3IgdmVydGljYWwgZ2x5cGhzIHVubGVzcyB0aGUgcHJldmlvdXMgc3ltYm9sIHdhcyBob3Jpem9udGFsXG4gICAgICAgIC8vIGFuZCB3ZSBkZXRlcm1pbmVkIHRoYXQgdmVydGljYWwgZ2x5cGhzIHdlcmUgbmVjZXNzYXJ5LlxuICAgICAgICAvLyBBbHNvIGRvbid0IGRvIGNhbGN1bGF0aW9ucyBmb3Igc3ltYm9scyB0aGF0IGFyZSBjb2xsaWRlZCBhbmQgZnVsbHkgZmFkZWQgb3V0XG4gICAgICAgIGlmIChzeW1ib2wuaGlkZGVuIHx8IHN5bWJvbC53cml0aW5nTW9kZSA9PT0gV3JpdGluZ01vZGUudmVydGljYWwgJiYgIXVzZVZlcnRpY2FsKSB7XG4gICAgICAgICAgICBoaWRlR2x5cGhzKHN5bWJvbC5udW1HbHlwaHMsIGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBd2t3YXJkLi4uIGJ1dCB3ZSdyZSBjb3VudGluZyBvbiB0aGUgcGFpcmVkIFwidmVydGljYWxcIiBzeW1ib2wgY29taW5nIGltbWVkaWF0ZWx5IGFmdGVyIGl0cyBob3Jpem9udGFsIGNvdW50ZXJwYXJ0XG4gICAgICAgIHVzZVZlcnRpY2FsID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgYW5jaG9yUG9zID0gW3N5bWJvbC5hbmNob3JYLCBzeW1ib2wuYW5jaG9yWSwgMCwgMV07XG4gICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NChhbmNob3JQb3MsIGFuY2hvclBvcywgcG9zTWF0cml4KTtcblxuICAgICAgICAvLyBEb24ndCBib3RoZXIgY2FsY3VsYXRpbmcgdGhlIGNvcnJlY3QgcG9pbnQgZm9yIGludmlzaWJsZSBsYWJlbHMuXG4gICAgICAgIGlmICghaXNWaXNpYmxlKGFuY2hvclBvcywgY2xpcHBpbmdCdWZmZXIpKSB7XG4gICAgICAgICAgICBoaWRlR2x5cGhzKHN5bWJvbC5udW1HbHlwaHMsIGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNhbWVyYVRvQW5jaG9yRGlzdGFuY2UgPSBhbmNob3JQb3NbM107XG4gICAgICAgIGNvbnN0IHBlcnNwZWN0aXZlUmF0aW8gPSBnZXRQZXJzcGVjdGl2ZVJhdGlvKHBhaW50ZXIudHJhbnNmb3JtLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UsIGNhbWVyYVRvQW5jaG9yRGlzdGFuY2UpO1xuXG4gICAgICAgIGNvbnN0IGZvbnRTaXplID0gc3ltYm9sU2l6ZS5ldmFsdWF0ZVNpemVGb3JGZWF0dXJlKHNpemVEYXRhLCBwYXJ0aWFsbHlFdmFsdWF0ZWRTaXplLCBzeW1ib2wpO1xuICAgICAgICBjb25zdCBwaXRjaFNjYWxlZEZvbnRTaXplID0gcGl0Y2hXaXRoTWFwID8gZm9udFNpemUgLyBwZXJzcGVjdGl2ZVJhdGlvIDogZm9udFNpemUgKiBwZXJzcGVjdGl2ZVJhdGlvO1xuXG4gICAgICAgIGNvbnN0IHRpbGVBbmNob3JQb2ludCA9IG5ldyBQb2ludChzeW1ib2wuYW5jaG9yWCwgc3ltYm9sLmFuY2hvclkpO1xuICAgICAgICBjb25zdCBhbmNob3JQb2ludCA9IHByb2plY3QodGlsZUFuY2hvclBvaW50LCBsYWJlbFBsYW5lTWF0cml4KS5wb2ludDtcbiAgICAgICAgY29uc3QgcHJvamVjdGlvbkNhY2hlID0ge307XG5cbiAgICAgICAgY29uc3QgcGxhY2VVbmZsaXBwZWQ6IGFueSA9IHBsYWNlR2x5cGhzQWxvbmdMaW5lKHN5bWJvbCwgcGl0Y2hTY2FsZWRGb250U2l6ZSwgZmFsc2UgLyp1bmZsaXBwZWQqLywga2VlcFVwcmlnaHQsIHBvc01hdHJpeCwgbGFiZWxQbGFuZU1hdHJpeCwgZ2xDb29yZE1hdHJpeCxcbiAgICAgICAgICAgIGJ1Y2tldC5nbHlwaE9mZnNldEFycmF5LCBsaW5lVmVydGV4QXJyYXksIGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSwgYW5jaG9yUG9pbnQsIHRpbGVBbmNob3JQb2ludCwgcHJvamVjdGlvbkNhY2hlLCBhc3BlY3RSYXRpbyk7XG5cbiAgICAgICAgdXNlVmVydGljYWwgPSBwbGFjZVVuZmxpcHBlZC51c2VWZXJ0aWNhbDtcblxuICAgICAgICBpZiAocGxhY2VVbmZsaXBwZWQubm90RW5vdWdoUm9vbSB8fCB1c2VWZXJ0aWNhbCB8fFxuICAgICAgICAgICAgKHBsYWNlVW5mbGlwcGVkLm5lZWRzRmxpcHBpbmcgJiZcbiAgICAgICAgICAgICBwbGFjZUdseXBoc0Fsb25nTGluZShzeW1ib2wsIHBpdGNoU2NhbGVkRm9udFNpemUsIHRydWUgLypmbGlwcGVkKi8sIGtlZXBVcHJpZ2h0LCBwb3NNYXRyaXgsIGxhYmVsUGxhbmVNYXRyaXgsIGdsQ29vcmRNYXRyaXgsXG4gICAgICAgICAgICAgICAgIGJ1Y2tldC5nbHlwaE9mZnNldEFycmF5LCBsaW5lVmVydGV4QXJyYXksIGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSwgYW5jaG9yUG9pbnQsIHRpbGVBbmNob3JQb2ludCwgcHJvamVjdGlvbkNhY2hlLCBhc3BlY3RSYXRpbykubm90RW5vdWdoUm9vbSkpIHtcbiAgICAgICAgICAgIGhpZGVHbHlwaHMoc3ltYm9sLm51bUdseXBocywgZHluYW1pY0xheW91dFZlcnRleEFycmF5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc1RleHQpIHtcbiAgICAgICAgYnVja2V0LnRleHQuZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYnVja2V0Lmljb24uZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBwbGFjZUZpcnN0QW5kTGFzdEdseXBoKGZvbnRTY2FsZTogbnVtYmVyLCBnbHlwaE9mZnNldEFycmF5OiBHbHlwaE9mZnNldEFycmF5LCBsaW5lT2Zmc2V0WDogbnVtYmVyLCBsaW5lT2Zmc2V0WTogbnVtYmVyLCBmbGlwOiBib29sZWFuLCBhbmNob3JQb2ludDogUG9pbnQsIHRpbGVBbmNob3JQb2ludDogUG9pbnQsIHN5bWJvbDogYW55LCBsaW5lVmVydGV4QXJyYXk6IFN5bWJvbExpbmVWZXJ0ZXhBcnJheSwgbGFiZWxQbGFuZU1hdHJpeDogbWF0NCwgcHJvamVjdGlvbkNhY2hlOiBhbnkpIHtcbiAgICBjb25zdCBnbHlwaEVuZEluZGV4ID0gc3ltYm9sLmdseXBoU3RhcnRJbmRleCArIHN5bWJvbC5udW1HbHlwaHM7XG4gICAgY29uc3QgbGluZVN0YXJ0SW5kZXggPSBzeW1ib2wubGluZVN0YXJ0SW5kZXg7XG4gICAgY29uc3QgbGluZUVuZEluZGV4ID0gc3ltYm9sLmxpbmVTdGFydEluZGV4ICsgc3ltYm9sLmxpbmVMZW5ndGg7XG5cbiAgICBjb25zdCBmaXJzdEdseXBoT2Zmc2V0ID0gZ2x5cGhPZmZzZXRBcnJheS5nZXRvZmZzZXRYKHN5bWJvbC5nbHlwaFN0YXJ0SW5kZXgpO1xuICAgIGNvbnN0IGxhc3RHbHlwaE9mZnNldCA9IGdseXBoT2Zmc2V0QXJyYXkuZ2V0b2Zmc2V0WChnbHlwaEVuZEluZGV4IC0gMSk7XG5cbiAgICBjb25zdCBmaXJzdFBsYWNlZEdseXBoID0gcGxhY2VHbHlwaEFsb25nTGluZShmb250U2NhbGUgKiBmaXJzdEdseXBoT2Zmc2V0LCBsaW5lT2Zmc2V0WCwgbGluZU9mZnNldFksIGZsaXAsIGFuY2hvclBvaW50LCB0aWxlQW5jaG9yUG9pbnQsIHN5bWJvbC5zZWdtZW50LFxuICAgICAgICBsaW5lU3RhcnRJbmRleCwgbGluZUVuZEluZGV4LCBsaW5lVmVydGV4QXJyYXksIGxhYmVsUGxhbmVNYXRyaXgsIHByb2plY3Rpb25DYWNoZSk7XG4gICAgaWYgKCFmaXJzdFBsYWNlZEdseXBoKVxuICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGxhc3RQbGFjZWRHbHlwaCA9IHBsYWNlR2x5cGhBbG9uZ0xpbmUoZm9udFNjYWxlICogbGFzdEdseXBoT2Zmc2V0LCBsaW5lT2Zmc2V0WCwgbGluZU9mZnNldFksIGZsaXAsIGFuY2hvclBvaW50LCB0aWxlQW5jaG9yUG9pbnQsIHN5bWJvbC5zZWdtZW50LFxuICAgICAgICBsaW5lU3RhcnRJbmRleCwgbGluZUVuZEluZGV4LCBsaW5lVmVydGV4QXJyYXksIGxhYmVsUGxhbmVNYXRyaXgsIHByb2plY3Rpb25DYWNoZSk7XG4gICAgaWYgKCFsYXN0UGxhY2VkR2x5cGgpXG4gICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIHtmaXJzdDogZmlyc3RQbGFjZWRHbHlwaCwgbGFzdDogbGFzdFBsYWNlZEdseXBofTtcbn1cblxuZnVuY3Rpb24gcmVxdWlyZXNPcmllbnRhdGlvbkNoYW5nZSh3cml0aW5nTW9kZSwgZmlyc3RQb2ludCwgbGFzdFBvaW50LCBhc3BlY3RSYXRpbykge1xuICAgIGlmICh3cml0aW5nTW9kZSA9PT0gV3JpdGluZ01vZGUuaG9yaXpvbnRhbCkge1xuICAgICAgICAvLyBPbiB0b3Agb2YgY2hvb3Npbmcgd2hldGhlciB0byBmbGlwLCBjaG9vc2Ugd2hldGhlciB0byByZW5kZXIgdGhpcyB2ZXJzaW9uIG9mIHRoZSBnbHlwaHMgb3IgdGhlIGFsdGVybmF0ZVxuICAgICAgICAvLyB2ZXJ0aWNhbCBnbHlwaHMuIFdlIGNhbid0IGp1c3QgZmlsdGVyIG91dCB2ZXJ0aWNhbCBnbHlwaHMgaW4gdGhlIGhvcml6b250YWwgcmFuZ2UgYmVjYXVzZSB0aGUgaG9yaXpvbnRhbFxuICAgICAgICAvLyBhbmQgdmVydGljYWwgdmVyc2lvbnMgY2FuIGhhdmUgc2xpZ2h0bHkgZGlmZmVyZW50IHByb2plY3Rpb25zIHdoaWNoIGNvdWxkIGxlYWQgdG8gYW5nbGVzIHdoZXJlIGJvdGggb3JcbiAgICAgICAgLy8gbmVpdGhlciBzaG93ZWQuXG4gICAgICAgIGNvbnN0IHJpc2UgPSBNYXRoLmFicyhsYXN0UG9pbnQueSAtIGZpcnN0UG9pbnQueSk7XG4gICAgICAgIGNvbnN0IHJ1biA9IE1hdGguYWJzKGxhc3RQb2ludC54IC0gZmlyc3RQb2ludC54KSAqIGFzcGVjdFJhdGlvO1xuICAgICAgICBpZiAocmlzZSA+IHJ1bikge1xuICAgICAgICAgICAgcmV0dXJuIHt1c2VWZXJ0aWNhbDogdHJ1ZX07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod3JpdGluZ01vZGUgPT09IFdyaXRpbmdNb2RlLnZlcnRpY2FsID8gZmlyc3RQb2ludC55IDwgbGFzdFBvaW50LnkgOiBmaXJzdFBvaW50LnggPiBsYXN0UG9pbnQueCkge1xuICAgICAgICAvLyBJbmNsdWRlcyBcImhvcml6b250YWxPbmx5XCIgY2FzZSBmb3IgbGFiZWxzIHdpdGhvdXQgdmVydGljYWwgZ2x5cGhzXG4gICAgICAgIHJldHVybiB7bmVlZHNGbGlwcGluZzogdHJ1ZX07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHBsYWNlR2x5cGhzQWxvbmdMaW5lKHN5bWJvbCwgZm9udFNpemUsIGZsaXAsIGtlZXBVcHJpZ2h0LCBwb3NNYXRyaXgsIGxhYmVsUGxhbmVNYXRyaXgsIGdsQ29vcmRNYXRyaXgsIGdseXBoT2Zmc2V0QXJyYXksIGxpbmVWZXJ0ZXhBcnJheSwgZHluYW1pY0xheW91dFZlcnRleEFycmF5LCBhbmNob3JQb2ludCwgdGlsZUFuY2hvclBvaW50LCBwcm9qZWN0aW9uQ2FjaGUsIGFzcGVjdFJhdGlvKSB7XG4gICAgY29uc3QgZm9udFNjYWxlID0gZm9udFNpemUgLyAyNDtcbiAgICBjb25zdCBsaW5lT2Zmc2V0WCA9IHN5bWJvbC5saW5lT2Zmc2V0WCAqIGZvbnRTY2FsZTtcbiAgICBjb25zdCBsaW5lT2Zmc2V0WSA9IHN5bWJvbC5saW5lT2Zmc2V0WSAqIGZvbnRTY2FsZTtcblxuICAgIGxldCBwbGFjZWRHbHlwaHM7XG4gICAgaWYgKHN5bWJvbC5udW1HbHlwaHMgPiAxKSB7XG4gICAgICAgIGNvbnN0IGdseXBoRW5kSW5kZXggPSBzeW1ib2wuZ2x5cGhTdGFydEluZGV4ICsgc3ltYm9sLm51bUdseXBocztcbiAgICAgICAgY29uc3QgbGluZVN0YXJ0SW5kZXggPSBzeW1ib2wubGluZVN0YXJ0SW5kZXg7XG4gICAgICAgIGNvbnN0IGxpbmVFbmRJbmRleCA9IHN5bWJvbC5saW5lU3RhcnRJbmRleCArIHN5bWJvbC5saW5lTGVuZ3RoO1xuXG4gICAgICAgIC8vIFBsYWNlIHRoZSBmaXJzdCBhbmQgdGhlIGxhc3QgZ2x5cGggaW4gdGhlIGxhYmVsIGZpcnN0LCBzbyB3ZSBjYW4gZmlndXJlIG91dFxuICAgICAgICAvLyB0aGUgb3ZlcmFsbCBvcmllbnRhdGlvbiBvZiB0aGUgbGFiZWwgYW5kIGRldGVybWluZSB3aGV0aGVyIGl0IG5lZWRzIHRvIGJlIGZsaXBwZWQgaW4ga2VlcFVwcmlnaHQgbW9kZVxuICAgICAgICBjb25zdCBmaXJzdEFuZExhc3RHbHlwaCA9IHBsYWNlRmlyc3RBbmRMYXN0R2x5cGgoZm9udFNjYWxlLCBnbHlwaE9mZnNldEFycmF5LCBsaW5lT2Zmc2V0WCwgbGluZU9mZnNldFksIGZsaXAsIGFuY2hvclBvaW50LCB0aWxlQW5jaG9yUG9pbnQsIHN5bWJvbCwgbGluZVZlcnRleEFycmF5LCBsYWJlbFBsYW5lTWF0cml4LCBwcm9qZWN0aW9uQ2FjaGUpO1xuICAgICAgICBpZiAoIWZpcnN0QW5kTGFzdEdseXBoKSB7XG4gICAgICAgICAgICByZXR1cm4ge25vdEVub3VnaFJvb206IHRydWV9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpcnN0UG9pbnQgPSBwcm9qZWN0KGZpcnN0QW5kTGFzdEdseXBoLmZpcnN0LnBvaW50LCBnbENvb3JkTWF0cml4KS5wb2ludDtcbiAgICAgICAgY29uc3QgbGFzdFBvaW50ID0gcHJvamVjdChmaXJzdEFuZExhc3RHbHlwaC5sYXN0LnBvaW50LCBnbENvb3JkTWF0cml4KS5wb2ludDtcblxuICAgICAgICBpZiAoa2VlcFVwcmlnaHQgJiYgIWZsaXApIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWVudGF0aW9uQ2hhbmdlID0gcmVxdWlyZXNPcmllbnRhdGlvbkNoYW5nZShzeW1ib2wud3JpdGluZ01vZGUsIGZpcnN0UG9pbnQsIGxhc3RQb2ludCwgYXNwZWN0UmF0aW8pO1xuICAgICAgICAgICAgaWYgKG9yaWVudGF0aW9uQ2hhbmdlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWVudGF0aW9uQ2hhbmdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcGxhY2VkR2x5cGhzID0gW2ZpcnN0QW5kTGFzdEdseXBoLmZpcnN0XTtcbiAgICAgICAgZm9yIChsZXQgZ2x5cGhJbmRleCA9IHN5bWJvbC5nbHlwaFN0YXJ0SW5kZXggKyAxOyBnbHlwaEluZGV4IDwgZ2x5cGhFbmRJbmRleCAtIDE7IGdseXBoSW5kZXgrKykge1xuICAgICAgICAgICAgLy8gU2luY2UgZmlyc3QgYW5kIGxhc3QgZ2x5cGggZml0IG9uIHRoZSBsaW5lLCB3ZSdyZSBzdXJlIHRoYXQgdGhlIHJlc3Qgb2YgdGhlIGdseXBocyBjYW4gYmUgcGxhY2VkXG4gICAgICAgICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICAgICAgICBwbGFjZWRHbHlwaHMucHVzaChwbGFjZUdseXBoQWxvbmdMaW5lKGZvbnRTY2FsZSAqIGdseXBoT2Zmc2V0QXJyYXkuZ2V0b2Zmc2V0WChnbHlwaEluZGV4KSwgbGluZU9mZnNldFgsIGxpbmVPZmZzZXRZLCBmbGlwLCBhbmNob3JQb2ludCwgdGlsZUFuY2hvclBvaW50LCBzeW1ib2wuc2VnbWVudCxcbiAgICAgICAgICAgICAgICBsaW5lU3RhcnRJbmRleCwgbGluZUVuZEluZGV4LCBsaW5lVmVydGV4QXJyYXksIGxhYmVsUGxhbmVNYXRyaXgsIHByb2plY3Rpb25DYWNoZSkpO1xuICAgICAgICB9XG4gICAgICAgIHBsYWNlZEdseXBocy5wdXNoKGZpcnN0QW5kTGFzdEdseXBoLmxhc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE9ubHkgYSBzaW5nbGUgZ2x5cGggdG8gcGxhY2VcbiAgICAgICAgLy8gU28sIGRldGVybWluZSB3aGV0aGVyIHRvIGZsaXAgYmFzZWQgb24gcHJvamVjdGVkIGFuZ2xlIG9mIHRoZSBsaW5lIHNlZ21lbnQgaXQncyBvblxuICAgICAgICBpZiAoa2VlcFVwcmlnaHQgJiYgIWZsaXApIHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSBwcm9qZWN0KHRpbGVBbmNob3JQb2ludCwgcG9zTWF0cml4KS5wb2ludDtcbiAgICAgICAgICAgIGNvbnN0IHRpbGVWZXJ0ZXhJbmRleCA9IChzeW1ib2wubGluZVN0YXJ0SW5kZXggKyBzeW1ib2wuc2VnbWVudCArIDEpO1xuICAgICAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICAgICAgY29uc3QgdGlsZVNlZ21lbnRFbmQgPSBuZXcgUG9pbnQobGluZVZlcnRleEFycmF5LmdldHgodGlsZVZlcnRleEluZGV4KSwgbGluZVZlcnRleEFycmF5LmdldHkodGlsZVZlcnRleEluZGV4KSk7XG4gICAgICAgICAgICBjb25zdCBwcm9qZWN0ZWRWZXJ0ZXggPSBwcm9qZWN0KHRpbGVTZWdtZW50RW5kLCBwb3NNYXRyaXgpO1xuICAgICAgICAgICAgLy8gV2Uga25vdyB0aGUgYW5jaG9yIHdpbGwgYmUgaW4gdGhlIHZpZXdwb3J0LCBidXQgdGhlIGVuZCBvZiB0aGUgbGluZSBzZWdtZW50IG1heSBiZVxuICAgICAgICAgICAgLy8gYmVoaW5kIHRoZSBwbGFuZSBvZiB0aGUgY2FtZXJhLCBpbiB3aGljaCBjYXNlIHdlIGNhbiB1c2UgYSBwb2ludCBhdCBhbnkgYXJiaXRyYXJ5IChjbG9zZXIpXG4gICAgICAgICAgICAvLyBwb2ludCBvbiB0aGUgc2VnbWVudC5cbiAgICAgICAgICAgIGNvbnN0IGIgPSAocHJvamVjdGVkVmVydGV4LnNpZ25lZERpc3RhbmNlRnJvbUNhbWVyYSA+IDApID9cbiAgICAgICAgICAgICAgICBwcm9qZWN0ZWRWZXJ0ZXgucG9pbnQgOlxuICAgICAgICAgICAgICAgIHByb2plY3RUcnVuY2F0ZWRMaW5lU2VnbWVudCh0aWxlQW5jaG9yUG9pbnQsIHRpbGVTZWdtZW50RW5kLCBhLCAxLCBwb3NNYXRyaXgpO1xuXG4gICAgICAgICAgICBjb25zdCBvcmllbnRhdGlvbkNoYW5nZSA9IHJlcXVpcmVzT3JpZW50YXRpb25DaGFuZ2Uoc3ltYm9sLndyaXRpbmdNb2RlLCBhLCBiLCBhc3BlY3RSYXRpbyk7XG4gICAgICAgICAgICBpZiAob3JpZW50YXRpb25DaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZW50YXRpb25DaGFuZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICBjb25zdCBzaW5nbGVHbHlwaCA9IHBsYWNlR2x5cGhBbG9uZ0xpbmUoZm9udFNjYWxlICogZ2x5cGhPZmZzZXRBcnJheS5nZXRvZmZzZXRYKHN5bWJvbC5nbHlwaFN0YXJ0SW5kZXgpLCBsaW5lT2Zmc2V0WCwgbGluZU9mZnNldFksIGZsaXAsIGFuY2hvclBvaW50LCB0aWxlQW5jaG9yUG9pbnQsIHN5bWJvbC5zZWdtZW50LFxuICAgICAgICAgICAgc3ltYm9sLmxpbmVTdGFydEluZGV4LCBzeW1ib2wubGluZVN0YXJ0SW5kZXggKyBzeW1ib2wubGluZUxlbmd0aCwgbGluZVZlcnRleEFycmF5LCBsYWJlbFBsYW5lTWF0cml4LCBwcm9qZWN0aW9uQ2FjaGUpO1xuICAgICAgICBpZiAoIXNpbmdsZUdseXBoKVxuICAgICAgICAgICAgcmV0dXJuIHtub3RFbm91Z2hSb29tOiB0cnVlfTtcblxuICAgICAgICBwbGFjZWRHbHlwaHMgPSBbc2luZ2xlR2x5cGhdO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgZ2x5cGg6IGFueSBvZiBwbGFjZWRHbHlwaHMpIHtcbiAgICAgICAgYWRkRHluYW1pY0F0dHJpYnV0ZXMoZHluYW1pY0xheW91dFZlcnRleEFycmF5LCBnbHlwaC5wb2ludCwgZ2x5cGguYW5nbGUpO1xuICAgIH1cbiAgICByZXR1cm4ge307XG59XG5cbmZ1bmN0aW9uIHByb2plY3RUcnVuY2F0ZWRMaW5lU2VnbWVudChwcmV2aW91c1RpbGVQb2ludDogUG9pbnQsIGN1cnJlbnRUaWxlUG9pbnQ6IFBvaW50LCBwcmV2aW91c1Byb2plY3RlZFBvaW50OiBQb2ludCwgbWluaW11bUxlbmd0aDogbnVtYmVyLCBwcm9qZWN0aW9uTWF0cml4OiBtYXQ0KSB7XG4gICAgLy8gV2UgYXJlIGFzc3VtaW5nIFwicHJldmlvdXNUaWxlUG9pbnRcIiB3b24ndCBwcm9qZWN0IHRvIGEgcG9pbnQgd2l0aGluIG9uZSB1bml0IG9mIHRoZSBjYW1lcmEgcGxhbmVcbiAgICAvLyBJZiBpdCBkaWQsIHRoYXQgd291bGQgbWVhbiBvdXIgbGFiZWwgZXh0ZW5kZWQgYWxsIHRoZSB3YXkgb3V0IGZyb20gd2l0aGluIHRoZSB2aWV3cG9ydCB0byBhICh2ZXJ5IGRpc3RhbnQpXG4gICAgLy8gcG9pbnQgbmVhciB0aGUgcGxhbmUgb2YgdGhlIGNhbWVyYS4gV2Ugd291bGRuJ3QgYmUgYWJsZSB0byByZW5kZXIgdGhlIGxhYmVsIGFueXdheSBvbmNlIGl0IGNyb3NzZWQgdGhlXG4gICAgLy8gcGxhbmUgb2YgdGhlIGNhbWVyYS5cbiAgICBjb25zdCBwcm9qZWN0ZWRVbml0VmVydGV4ID0gcHJvamVjdChwcmV2aW91c1RpbGVQb2ludC5hZGQocHJldmlvdXNUaWxlUG9pbnQuc3ViKGN1cnJlbnRUaWxlUG9pbnQpLl91bml0KCkpLCBwcm9qZWN0aW9uTWF0cml4KS5wb2ludDtcbiAgICBjb25zdCBwcm9qZWN0ZWRVbml0U2VnbWVudCA9IHByZXZpb3VzUHJvamVjdGVkUG9pbnQuc3ViKHByb2plY3RlZFVuaXRWZXJ0ZXgpO1xuXG4gICAgcmV0dXJuIHByZXZpb3VzUHJvamVjdGVkUG9pbnQuYWRkKHByb2plY3RlZFVuaXRTZWdtZW50Ll9tdWx0KG1pbmltdW1MZW5ndGggLyBwcm9qZWN0ZWRVbml0U2VnbWVudC5tYWcoKSkpO1xufVxuXG5mdW5jdGlvbiBwbGFjZUdseXBoQWxvbmdMaW5lKG9mZnNldFg6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU9mZnNldFg6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU9mZnNldFk6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxpcDogYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yUG9pbnQ6IFBvaW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWxlQW5jaG9yUG9pbnQ6IFBvaW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JTZWdtZW50OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVTdGFydEluZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVFbmRJbmRleDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lVmVydGV4QXJyYXk6IFN5bWJvbExpbmVWZXJ0ZXhBcnJheSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxQbGFuZU1hdHJpeDogbWF0NCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdGlvbkNhY2hlOiB7W186IG51bWJlcl06IFBvaW50fSkge1xuXG4gICAgY29uc3QgY29tYmluZWRPZmZzZXRYID0gZmxpcCA/XG4gICAgICAgIG9mZnNldFggLSBsaW5lT2Zmc2V0WCA6XG4gICAgICAgIG9mZnNldFggKyBsaW5lT2Zmc2V0WDtcblxuICAgIGxldCBkaXIgPSBjb21iaW5lZE9mZnNldFggPiAwID8gMSA6IC0xO1xuXG4gICAgbGV0IGFuZ2xlID0gMDtcbiAgICBpZiAoZmxpcCkge1xuICAgICAgICAvLyBUaGUgbGFiZWwgbmVlZHMgdG8gYmUgZmxpcHBlZCB0byBrZWVwIHRleHQgdXByaWdodC5cbiAgICAgICAgLy8gSXRlcmF0ZSBpbiB0aGUgcmV2ZXJzZSBkaXJlY3Rpb24uXG4gICAgICAgIGRpciAqPSAtMTtcbiAgICAgICAgYW5nbGUgPSBNYXRoLlBJO1xuICAgIH1cblxuICAgIGlmIChkaXIgPCAwKSBhbmdsZSArPSBNYXRoLlBJO1xuXG4gICAgbGV0IGN1cnJlbnRJbmRleCA9IGRpciA+IDAgP1xuICAgICAgICBsaW5lU3RhcnRJbmRleCArIGFuY2hvclNlZ21lbnQgOlxuICAgICAgICBsaW5lU3RhcnRJbmRleCArIGFuY2hvclNlZ21lbnQgKyAxO1xuXG4gICAgbGV0IGN1cnJlbnQgPSBhbmNob3JQb2ludDtcbiAgICBsZXQgcHJldiA9IGFuY2hvclBvaW50O1xuICAgIGxldCBkaXN0YW5jZVRvUHJldiA9IDA7XG4gICAgbGV0IGN1cnJlbnRTZWdtZW50RGlzdGFuY2UgPSAwO1xuICAgIGNvbnN0IGFic09mZnNldFggPSBNYXRoLmFicyhjb21iaW5lZE9mZnNldFgpO1xuICAgIGNvbnN0IHBhdGhWZXJ0aWNlcyA9IFtdO1xuXG4gICAgd2hpbGUgKGRpc3RhbmNlVG9QcmV2ICsgY3VycmVudFNlZ21lbnREaXN0YW5jZSA8PSBhYnNPZmZzZXRYKSB7XG4gICAgICAgIGN1cnJlbnRJbmRleCArPSBkaXI7XG5cbiAgICAgICAgLy8gb2Zmc2V0IGRvZXMgbm90IGZpdCBvbiB0aGUgcHJvamVjdGVkIGxpbmVcbiAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA8IGxpbmVTdGFydEluZGV4IHx8IGN1cnJlbnRJbmRleCA+PSBsaW5lRW5kSW5kZXgpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgICBwcmV2ID0gY3VycmVudDtcbiAgICAgICAgcGF0aFZlcnRpY2VzLnB1c2goY3VycmVudCk7XG5cbiAgICAgICAgY3VycmVudCA9IHByb2plY3Rpb25DYWNoZVtjdXJyZW50SW5kZXhdO1xuICAgICAgICBpZiAoY3VycmVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VmVydGV4ID0gbmV3IFBvaW50KGxpbmVWZXJ0ZXhBcnJheS5nZXR4KGN1cnJlbnRJbmRleCksIGxpbmVWZXJ0ZXhBcnJheS5nZXR5KGN1cnJlbnRJbmRleCkpO1xuICAgICAgICAgICAgY29uc3QgcHJvamVjdGlvbiA9IHByb2plY3QoY3VycmVudFZlcnRleCwgbGFiZWxQbGFuZU1hdHJpeCk7XG4gICAgICAgICAgICBpZiAocHJvamVjdGlvbi5zaWduZWREaXN0YW5jZUZyb21DYW1lcmEgPiAwKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudCA9IHByb2plY3Rpb25DYWNoZVtjdXJyZW50SW5kZXhdID0gcHJvamVjdGlvbi5wb2ludDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIHZlcnRleCBpcyBiZWhpbmQgdGhlIHBsYW5lIG9mIHRoZSBjYW1lcmEsIHNvIHdlIGNhbid0IHByb2plY3QgaXRcbiAgICAgICAgICAgICAgICAvLyBJbnN0ZWFkLCB3ZSdsbCBjcmVhdGUgYSB2ZXJ0ZXggYWxvbmcgdGhlIGxpbmUgdGhhdCdzIGZhciBlbm91Z2ggdG8gaW5jbHVkZSB0aGUgZ2x5cGhcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0xpbmVWZXJ0ZXhJbmRleCA9IGN1cnJlbnRJbmRleCAtIGRpcjtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c1RpbGVQb2ludCA9IGRpc3RhbmNlVG9QcmV2ID09PSAwID9cbiAgICAgICAgICAgICAgICAgICAgdGlsZUFuY2hvclBvaW50IDpcbiAgICAgICAgICAgICAgICAgICAgbmV3IFBvaW50KGxpbmVWZXJ0ZXhBcnJheS5nZXR4KHByZXZpb3VzTGluZVZlcnRleEluZGV4KSwgbGluZVZlcnRleEFycmF5LmdldHkocHJldmlvdXNMaW5lVmVydGV4SW5kZXgpKTtcbiAgICAgICAgICAgICAgICAvLyBEb24ndCBjYWNoZSBiZWNhdXNlIHRoZSBuZXcgdmVydGV4IG1pZ2h0IG5vdCBiZSBmYXIgZW5vdWdoIG91dCBmb3IgZnV0dXJlIGdseXBocyBvbiB0aGUgc2FtZSBzZWdtZW50XG4gICAgICAgICAgICAgICAgY3VycmVudCA9IHByb2plY3RUcnVuY2F0ZWRMaW5lU2VnbWVudChwcmV2aW91c1RpbGVQb2ludCwgY3VycmVudFZlcnRleCwgcHJldiwgYWJzT2Zmc2V0WCAtIGRpc3RhbmNlVG9QcmV2ICsgMSwgbGFiZWxQbGFuZU1hdHJpeCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkaXN0YW5jZVRvUHJldiArPSBjdXJyZW50U2VnbWVudERpc3RhbmNlO1xuICAgICAgICBjdXJyZW50U2VnbWVudERpc3RhbmNlID0gcHJldi5kaXN0KGN1cnJlbnQpO1xuICAgIH1cblxuICAgIC8vIFRoZSBwb2ludCBpcyBvbiB0aGUgY3VycmVudCBzZWdtZW50LiBJbnRlcnBvbGF0ZSB0byBmaW5kIGl0LlxuICAgIGNvbnN0IHNlZ21lbnRJbnRlcnBvbGF0aW9uVCA9IChhYnNPZmZzZXRYIC0gZGlzdGFuY2VUb1ByZXYpIC8gY3VycmVudFNlZ21lbnREaXN0YW5jZTtcbiAgICBjb25zdCBwcmV2VG9DdXJyZW50ID0gY3VycmVudC5zdWIocHJldik7XG4gICAgY29uc3QgcCA9IHByZXZUb0N1cnJlbnQubXVsdChzZWdtZW50SW50ZXJwb2xhdGlvblQpLl9hZGQocHJldik7XG5cbiAgICAvLyBvZmZzZXQgdGhlIHBvaW50IGZyb20gdGhlIGxpbmUgdG8gdGV4dC1vZmZzZXQgYW5kIGljb24tb2Zmc2V0XG4gICAgcC5fYWRkKHByZXZUb0N1cnJlbnQuX3VuaXQoKS5fcGVycCgpLl9tdWx0KGxpbmVPZmZzZXRZICogZGlyKSk7XG5cbiAgICBjb25zdCBzZWdtZW50QW5nbGUgPSBhbmdsZSArIE1hdGguYXRhbjIoY3VycmVudC55IC0gcHJldi55LCBjdXJyZW50LnggLSBwcmV2LngpO1xuXG4gICAgcGF0aFZlcnRpY2VzLnB1c2gocCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBwb2ludDogcCxcbiAgICAgICAgYW5nbGU6IHNlZ21lbnRBbmdsZSxcbiAgICAgICAgcGF0aDogcGF0aFZlcnRpY2VzXG4gICAgfTtcbn1cblxuY29uc3QgaGlkZGVuR2x5cGhBdHRyaWJ1dGVzID0gbmV3IEZsb2F0MzJBcnJheShbLUluZmluaXR5LCAtSW5maW5pdHksIDAsIC1JbmZpbml0eSwgLUluZmluaXR5LCAwLCAtSW5maW5pdHksIC1JbmZpbml0eSwgMCwgLUluZmluaXR5LCAtSW5maW5pdHksIDBdKTtcblxuLy8gSGlkZSB0aGVtIGJ5IG1vdmluZyB0aGVtIG9mZnNjcmVlbi4gV2Ugc3RpbGwgbmVlZCB0byBhZGQgdGhlbSB0byB0aGUgYnVmZmVyXG4vLyBiZWNhdXNlIHRoZSBkeW5hbWljIGJ1ZmZlciBpcyBwYWlyZWQgd2l0aCBhIHN0YXRpYyBidWZmZXIgdGhhdCBkb2Vzbid0IGdldCB1cGRhdGVkLlxuZnVuY3Rpb24gaGlkZUdseXBocyhudW06IG51bWJlciwgZHluYW1pY0xheW91dFZlcnRleEFycmF5OiBTeW1ib2xEeW5hbWljTGF5b3V0QXJyYXkpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGg7XG4gICAgICAgIGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheS5yZXNpemUob2Zmc2V0ICsgNCk7XG4gICAgICAgIC8vIFNpbmNlIGFsbCBoaWRkZW4gZ2x5cGhzIGhhdmUgdGhlIHNhbWUgYXR0cmlidXRlcywgd2UgY2FuIGJ1aWxkIHVwIHRoZSBhcnJheSBmYXN0ZXIgd2l0aCBhIHNpbmdsZSBjYWxsIHRvIEZsb2F0MzJBcnJheS5zZXRcbiAgICAgICAgLy8gZm9yIGVhY2ggc2V0IG9mIGZvdXIgdmVydGljZXMsIGluc3RlYWQgb2YgY2FsbGluZyBhZGREeW5hbWljQXR0cmlidXRlcyBmb3IgZWFjaCB2ZXJ0ZXguXG4gICAgICAgIGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheS5mbG9hdDMyLnNldChoaWRkZW5HbHlwaEF0dHJpYnV0ZXMsIG9mZnNldCAqIDMpO1xuICAgIH1cbn1cblxuLy8gRm9yIGxpbmUgbGFiZWwgbGF5b3V0LCB3ZSdyZSBub3QgdXNpbmcgeiBvdXRwdXQgYW5kIG91ciB3IGlucHV0IGlzIGFsd2F5cyAxXG4vLyBUaGlzIGN1c3RvbSBtYXRyaXggdHJhbnNmb3JtYXRpb24gaWdub3JlcyB0aG9zZSBjb21wb25lbnRzIHRvIG1ha2UgcHJvamVjdGlvbiBmYXN0ZXJcbmZ1bmN0aW9uIHh5VHJhbnNmb3JtTWF0NChvdXQ6IHZlYzQsIGE6IHZlYzQsIG06IG1hdDQpIHtcbiAgICBjb25zdCB4ID0gYVswXSwgeSA9IGFbMV07XG4gICAgb3V0WzBdID0gbVswXSAqIHggKyBtWzRdICogeSArIG1bMTJdO1xuICAgIG91dFsxXSA9IG1bMV0gKiB4ICsgbVs1XSAqIHkgKyBtWzEzXTtcbiAgICBvdXRbM10gPSBtWzNdICogeCArIG1bN10gKiB5ICsgbVsxNV07XG4gICAgcmV0dXJuIG91dDtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCBjbGlwTGluZSBmcm9tICcuL2NsaXBfbGluZSc7XG5pbXBvcnQgUGF0aEludGVycG9sYXRvciBmcm9tICcuL3BhdGhfaW50ZXJwb2xhdG9yJztcblxuaW1wb3J0ICogYXMgaW50ZXJzZWN0aW9uVGVzdHMgZnJvbSAnLi4vdXRpbC9pbnRlcnNlY3Rpb25fdGVzdHMnO1xuaW1wb3J0IEdyaWQgZnJvbSAnLi9ncmlkX2luZGV4JztcbmltcG9ydCB7bWF0NH0gZnJvbSAnZ2wtbWF0cml4JztcbmltcG9ydCBPTkVfRU0gZnJvbSAnLi4vc3ltYm9sL29uZV9lbSc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCAqIGFzIHByb2plY3Rpb24gZnJvbSAnLi4vc3ltYm9sL3Byb2plY3Rpb24nO1xuXG5pbXBvcnQgdHlwZSBUcmFuc2Zvcm0gZnJvbSAnLi4vZ2VvL3RyYW5zZm9ybSc7XG5pbXBvcnQgdHlwZSB7U2luZ2xlQ29sbGlzaW9uQm94fSBmcm9tICcuLi9kYXRhL2J1Y2tldC9zeW1ib2xfYnVja2V0JztcbmltcG9ydCB0eXBlIHtcbiAgICBHbHlwaE9mZnNldEFycmF5LFxuICAgIFN5bWJvbExpbmVWZXJ0ZXhBcnJheVxufSBmcm9tICcuLi9kYXRhL2FycmF5X3R5cGVzJztcblxuLy8gV2hlbiBhIHN5bWJvbCBjcm9zc2VzIHRoZSBlZGdlIHRoYXQgY2F1c2VzIGl0IHRvIGJlIGluY2x1ZGVkIGluXG4vLyBjb2xsaXNpb24gZGV0ZWN0aW9uLCBpdCB3aWxsIGNhdXNlIGNoYW5nZXMgaW4gdGhlIHN5bWJvbHMgYXJvdW5kXG4vLyBpdC4gVGhpcyBjb25zdGFudCBzcGVjaWZpZXMgaG93IG1hbnkgcGl4ZWxzIHRvIHBhZCB0aGUgZWRnZSBvZlxuLy8gdGhlIHZpZXdwb3J0IGZvciBjb2xsaXNpb24gZGV0ZWN0aW9uIHNvIHRoYXQgdGhlIGJ1bGsgb2YgdGhlIGNoYW5nZXNcbi8vIG9jY3VyIG9mZnNjcmVlbi4gTWFraW5nIHRoaXMgY29uc3RhbnQgZ3JlYXRlciBpbmNyZWFzZXMgbGFiZWxcbi8vIHN0YWJpbGl0eSwgYnV0IGl0J3MgZXhwZW5zaXZlLlxuY29uc3Qgdmlld3BvcnRQYWRkaW5nID0gMTAwO1xuXG4vKipcbiAqIEEgY29sbGlzaW9uIGluZGV4IHVzZWQgdG8gcHJldmVudCBzeW1ib2xzIGZyb20gb3ZlcmxhcHBpbmcuIEl0IGtlZXAgdHJhY2tzIG9mXG4gKiB3aGVyZSBwcmV2aW91cyBzeW1ib2xzIGhhdmUgYmVlbiBwbGFjZWQgYW5kIGlzIHVzZWQgdG8gY2hlY2sgaWYgYSBuZXdcbiAqIHN5bWJvbCBvdmVybGFwcyB3aXRoIGFueSBwcmV2aW91c2x5IGFkZGVkIHN5bWJvbHMuXG4gKlxuICogVGhlcmUgYXJlIHR3byBzdGVwcyB0byBpbnNlcnRpb246IGZpcnN0IHBsYWNlQ29sbGlzaW9uQm94L0NpcmNsZXMgY2hlY2tzIGlmXG4gKiB0aGVyZSdzIHJvb20gZm9yIGEgc3ltYm9sLCB0aGVuIGluc2VydENvbGxpc2lvbkJveC9DaXJjbGVzIGFjdHVhbGx5IHB1dHMgdGhlXG4gKiBzeW1ib2wgaW4gdGhlIGluZGV4LiBUaGUgdHdvIHN0ZXAgcHJvY2VzcyBhbGxvd3MgcGFpcmVkIHN5bWJvbHMgdG8gYmUgaW5zZXJ0ZWRcbiAqIHRvZ2V0aGVyIGV2ZW4gaWYgdGhleSBvdmVybGFwLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIENvbGxpc2lvbkluZGV4IHtcbiAgICBncmlkOiBHcmlkO1xuICAgIGlnbm9yZWRHcmlkOiBHcmlkO1xuICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtO1xuICAgIHBpdGNoZmFjdG9yOiBudW1iZXI7XG4gICAgc2NyZWVuUmlnaHRCb3VuZGFyeTogbnVtYmVyO1xuICAgIHNjcmVlbkJvdHRvbUJvdW5kYXJ5OiBudW1iZXI7XG4gICAgZ3JpZFJpZ2h0Qm91bmRhcnk6IG51bWJlcjtcbiAgICBncmlkQm90dG9tQm91bmRhcnk6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICB0cmFuc2Zvcm06IFRyYW5zZm9ybSxcbiAgICAgICAgZ3JpZDogR3JpZCA9IG5ldyBHcmlkKHRyYW5zZm9ybS53aWR0aCArIDIgKiB2aWV3cG9ydFBhZGRpbmcsIHRyYW5zZm9ybS5oZWlnaHQgKyAyICogdmlld3BvcnRQYWRkaW5nLCAyNSksXG4gICAgICAgIGlnbm9yZWRHcmlkOiBHcmlkID0gbmV3IEdyaWQodHJhbnNmb3JtLndpZHRoICsgMiAqIHZpZXdwb3J0UGFkZGluZywgdHJhbnNmb3JtLmhlaWdodCArIDIgKiB2aWV3cG9ydFBhZGRpbmcsIDI1KVxuICAgICkge1xuICAgICAgICB0aGlzLnRyYW5zZm9ybSA9IHRyYW5zZm9ybTtcblxuICAgICAgICB0aGlzLmdyaWQgPSBncmlkO1xuICAgICAgICB0aGlzLmlnbm9yZWRHcmlkID0gaWdub3JlZEdyaWQ7XG4gICAgICAgIHRoaXMucGl0Y2hmYWN0b3IgPSBNYXRoLmNvcyh0cmFuc2Zvcm0uX3BpdGNoKSAqIHRyYW5zZm9ybS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlO1xuXG4gICAgICAgIHRoaXMuc2NyZWVuUmlnaHRCb3VuZGFyeSA9IHRyYW5zZm9ybS53aWR0aCArIHZpZXdwb3J0UGFkZGluZztcbiAgICAgICAgdGhpcy5zY3JlZW5Cb3R0b21Cb3VuZGFyeSA9IHRyYW5zZm9ybS5oZWlnaHQgKyB2aWV3cG9ydFBhZGRpbmc7XG4gICAgICAgIHRoaXMuZ3JpZFJpZ2h0Qm91bmRhcnkgPSB0cmFuc2Zvcm0ud2lkdGggKyAyICogdmlld3BvcnRQYWRkaW5nO1xuICAgICAgICB0aGlzLmdyaWRCb3R0b21Cb3VuZGFyeSA9IHRyYW5zZm9ybS5oZWlnaHQgKyAyICogdmlld3BvcnRQYWRkaW5nO1xuICAgIH1cblxuICAgIHBsYWNlQ29sbGlzaW9uQm94KGNvbGxpc2lvbkJveDogU2luZ2xlQ29sbGlzaW9uQm94LCBhbGxvd092ZXJsYXA6IGJvb2xlYW4sIHRleHRQaXhlbFJhdGlvOiBudW1iZXIsIHBvc01hdHJpeDogbWF0NCwgY29sbGlzaW9uR3JvdXBQcmVkaWNhdGU/OiBhbnkpOiB7IGJveDogQXJyYXk8bnVtYmVyPiwgb2Zmc2NyZWVuOiBib29sZWFuIH0ge1xuICAgICAgICBjb25zdCBwcm9qZWN0ZWRQb2ludCA9IHRoaXMucHJvamVjdEFuZEdldFBlcnNwZWN0aXZlUmF0aW8ocG9zTWF0cml4LCBjb2xsaXNpb25Cb3guYW5jaG9yUG9pbnRYLCBjb2xsaXNpb25Cb3guYW5jaG9yUG9pbnRZKTtcbiAgICAgICAgY29uc3QgdGlsZVRvVmlld3BvcnQgPSB0ZXh0UGl4ZWxSYXRpbyAqIHByb2plY3RlZFBvaW50LnBlcnNwZWN0aXZlUmF0aW87XG4gICAgICAgIGNvbnN0IHRsWCA9IGNvbGxpc2lvbkJveC54MSAqIHRpbGVUb1ZpZXdwb3J0ICsgcHJvamVjdGVkUG9pbnQucG9pbnQueDtcbiAgICAgICAgY29uc3QgdGxZID0gY29sbGlzaW9uQm94LnkxICogdGlsZVRvVmlld3BvcnQgKyBwcm9qZWN0ZWRQb2ludC5wb2ludC55O1xuICAgICAgICBjb25zdCBiclggPSBjb2xsaXNpb25Cb3gueDIgKiB0aWxlVG9WaWV3cG9ydCArIHByb2plY3RlZFBvaW50LnBvaW50Lng7XG4gICAgICAgIGNvbnN0IGJyWSA9IGNvbGxpc2lvbkJveC55MiAqIHRpbGVUb1ZpZXdwb3J0ICsgcHJvamVjdGVkUG9pbnQucG9pbnQueTtcblxuICAgICAgICBpZiAoIXRoaXMuaXNJbnNpZGVHcmlkKHRsWCwgdGxZLCBiclgsIGJyWSkgfHxcbiAgICAgICAgICAgICghYWxsb3dPdmVybGFwICYmIHRoaXMuZ3JpZC5oaXRUZXN0KHRsWCwgdGxZLCBiclgsIGJyWSwgY29sbGlzaW9uR3JvdXBQcmVkaWNhdGUpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBib3g6IFtdLFxuICAgICAgICAgICAgICAgIG9mZnNjcmVlbjogZmFsc2VcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYm94OiBbdGxYLCB0bFksIGJyWCwgYnJZXSxcbiAgICAgICAgICAgIG9mZnNjcmVlbjogdGhpcy5pc09mZnNjcmVlbih0bFgsIHRsWSwgYnJYLCBiclkpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcGxhY2VDb2xsaXNpb25DaXJjbGVzKGFsbG93T3ZlcmxhcDogYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sOiBhbnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVWZXJ0ZXhBcnJheTogU3ltYm9sTGluZVZlcnRleEFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaE9mZnNldEFycmF5OiBHbHlwaE9mZnNldEFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NNYXRyaXg6IG1hdDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsUGxhbmVNYXRyaXg6IG1hdDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsVG9TY3JlZW5NYXRyaXg/OiBtYXQ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93Q29sbGlzaW9uQ2lyY2xlczogYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGl0Y2hXaXRoTWFwOiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsaXNpb25Hcm91cFByZWRpY2F0ZT86IGFueSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlUGl4ZWxEaWFtZXRlcjogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0UGl4ZWxQYWRkaW5nOiBudW1iZXIpOiB7IGNpcmNsZXM6IEFycmF5PG51bWJlcj4sIG9mZnNjcmVlbjogYm9vbGVhbiwgY29sbGlzaW9uRGV0ZWN0ZWQ6IGJvb2xlYW4gfSB7XG4gICAgICAgIGNvbnN0IHBsYWNlZENvbGxpc2lvbkNpcmNsZXMgPSBbXTtcblxuICAgICAgICBjb25zdCB0aWxlVW5pdEFuY2hvclBvaW50ID0gbmV3IFBvaW50KHN5bWJvbC5hbmNob3JYLCBzeW1ib2wuYW5jaG9yWSk7XG4gICAgICAgIGNvbnN0IHNjcmVlbkFuY2hvclBvaW50ID0gcHJvamVjdGlvbi5wcm9qZWN0KHRpbGVVbml0QW5jaG9yUG9pbnQsIHBvc01hdHJpeCk7XG4gICAgICAgIGNvbnN0IHBlcnNwZWN0aXZlUmF0aW8gPSBwcm9qZWN0aW9uLmdldFBlcnNwZWN0aXZlUmF0aW8odGhpcy50cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSwgc2NyZWVuQW5jaG9yUG9pbnQuc2lnbmVkRGlzdGFuY2VGcm9tQ2FtZXJhKTtcbiAgICAgICAgY29uc3QgbGFiZWxQbGFuZUZvbnRTaXplID0gcGl0Y2hXaXRoTWFwID8gZm9udFNpemUgLyBwZXJzcGVjdGl2ZVJhdGlvIDogZm9udFNpemUgKiBwZXJzcGVjdGl2ZVJhdGlvO1xuICAgICAgICBjb25zdCBsYWJlbFBsYW5lRm9udFNjYWxlID0gbGFiZWxQbGFuZUZvbnRTaXplIC8gT05FX0VNO1xuXG4gICAgICAgIGNvbnN0IGxhYmVsUGxhbmVBbmNob3JQb2ludCA9IHByb2plY3Rpb24ucHJvamVjdCh0aWxlVW5pdEFuY2hvclBvaW50LCBsYWJlbFBsYW5lTWF0cml4KS5wb2ludDtcblxuICAgICAgICBjb25zdCBwcm9qZWN0aW9uQ2FjaGUgPSB7fTtcbiAgICAgICAgY29uc3QgbGluZU9mZnNldFggPSBzeW1ib2wubGluZU9mZnNldFggKiBsYWJlbFBsYW5lRm9udFNjYWxlO1xuICAgICAgICBjb25zdCBsaW5lT2Zmc2V0WSA9IHN5bWJvbC5saW5lT2Zmc2V0WSAqIGxhYmVsUGxhbmVGb250U2NhbGU7XG5cbiAgICAgICAgY29uc3QgZmlyc3RBbmRMYXN0R2x5cGggPSBwcm9qZWN0aW9uLnBsYWNlRmlyc3RBbmRMYXN0R2x5cGgoXG4gICAgICAgICAgICBsYWJlbFBsYW5lRm9udFNjYWxlLFxuICAgICAgICAgICAgZ2x5cGhPZmZzZXRBcnJheSxcbiAgICAgICAgICAgIGxpbmVPZmZzZXRYLFxuICAgICAgICAgICAgbGluZU9mZnNldFksXG4gICAgICAgICAgICAvKmZsaXAqLyBmYWxzZSxcbiAgICAgICAgICAgIGxhYmVsUGxhbmVBbmNob3JQb2ludCxcbiAgICAgICAgICAgIHRpbGVVbml0QW5jaG9yUG9pbnQsXG4gICAgICAgICAgICBzeW1ib2wsXG4gICAgICAgICAgICBsaW5lVmVydGV4QXJyYXksXG4gICAgICAgICAgICBsYWJlbFBsYW5lTWF0cml4LFxuICAgICAgICAgICAgcHJvamVjdGlvbkNhY2hlKTtcblxuICAgICAgICBsZXQgY29sbGlzaW9uRGV0ZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgbGV0IGluR3JpZCA9IGZhbHNlO1xuICAgICAgICBsZXQgZW50aXJlbHlPZmZzY3JlZW4gPSB0cnVlO1xuXG4gICAgICAgIGlmIChmaXJzdEFuZExhc3RHbHlwaCkge1xuICAgICAgICAgICAgY29uc3QgcmFkaXVzID0gY2lyY2xlUGl4ZWxEaWFtZXRlciAqIDAuNSAqIHBlcnNwZWN0aXZlUmF0aW8gKyB0ZXh0UGl4ZWxQYWRkaW5nO1xuICAgICAgICAgICAgY29uc3Qgc2NyZWVuUGxhbmVNaW4gPSBuZXcgUG9pbnQoLXZpZXdwb3J0UGFkZGluZywgLXZpZXdwb3J0UGFkZGluZyk7XG4gICAgICAgICAgICBjb25zdCBzY3JlZW5QbGFuZU1heCA9IG5ldyBQb2ludCh0aGlzLnNjcmVlblJpZ2h0Qm91bmRhcnksIHRoaXMuc2NyZWVuQm90dG9tQm91bmRhcnkpO1xuICAgICAgICAgICAgY29uc3QgaW50ZXJwb2xhdG9yID0gbmV3IFBhdGhJbnRlcnBvbGF0b3IoKTtcblxuICAgICAgICAgICAgLy8gQ29uc3RydWN0IGEgcHJvamVjdGVkIHBhdGggZnJvbSBwcm9qZWN0ZWQgbGluZSB2ZXJ0aWNlcy4gQW5jaG9yIHBvaW50cyBhcmUgaWdub3JlZCBhbmQgcmVtb3ZlZFxuICAgICAgICAgICAgY29uc3QgZmlyc3QgPSBmaXJzdEFuZExhc3RHbHlwaC5maXJzdDtcbiAgICAgICAgICAgIGNvbnN0IGxhc3QgPSBmaXJzdEFuZExhc3RHbHlwaC5sYXN0O1xuXG4gICAgICAgICAgICBsZXQgcHJvamVjdGVkUGF0aCA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGZpcnN0LnBhdGgubGVuZ3RoIC0gMTsgaSA+PSAxOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBwcm9qZWN0ZWRQYXRoLnB1c2goZmlyc3QucGF0aFtpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGxhc3QucGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHByb2plY3RlZFBhdGgucHVzaChsYXN0LnBhdGhbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXNzZXJ0KHByb2plY3RlZFBhdGgubGVuZ3RoID49IDIpO1xuXG4gICAgICAgICAgICAvLyBUb2xlcmF0ZSBhIHNsaWdodGx5IGxvbmdlciBkaXN0YW5jZSB0aGFuIG9uZSBkaWFtZXRlciBiZXR3ZWVuIHR3byBhZGphY2VudCBjaXJjbGVzXG4gICAgICAgICAgICBjb25zdCBjaXJjbGVEaXN0ID0gcmFkaXVzICogMi41O1xuXG4gICAgICAgICAgICAvLyBUaGUgcGF0aCBtaWdodCBuZWVkIHRvIGJlIGNvbnZlcnRlZCBpbnRvIHNjcmVlbiBzcGFjZSBpZiBhIHBpdGNoZWQgbWFwIGlzIHVzZWQgYXMgdGhlIGxhYmVsIHNwYWNlXG4gICAgICAgICAgICBpZiAobGFiZWxUb1NjcmVlbk1hdHJpeCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjcmVlblNwYWNlUGF0aCA9IHByb2plY3RlZFBhdGgubWFwKHAgPT4gcHJvamVjdGlvbi5wcm9qZWN0KHAsIGxhYmVsVG9TY3JlZW5NYXRyaXgpKTtcblxuICAgICAgICAgICAgICAgIC8vIERvIG5vdCB0cnkgdG8gcGxhY2UgY29sbGlzaW9uIGNpcmNsZXMgaWYgZXZlbiBvZiB0aGUgcG9pbnRzIGlzIGJlaGluZCB0aGUgY2FtZXJhLlxuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBwbGF1c2libGUgc2NlbmFyaW8gd2l0aCBiaWcgY2FtZXJhIHBpdGNoIGFuZ2xlc1xuICAgICAgICAgICAgICAgIGlmIChzY3JlZW5TcGFjZVBhdGguc29tZShwb2ludCA9PiBwb2ludC5zaWduZWREaXN0YW5jZUZyb21DYW1lcmEgPD0gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvamVjdGVkUGF0aCA9IFtdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2plY3RlZFBhdGggPSBzY3JlZW5TcGFjZVBhdGgubWFwKHAgPT4gcC5wb2ludCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgc2VnbWVudHMgPSBbXTtcblxuICAgICAgICAgICAgaWYgKHByb2plY3RlZFBhdGgubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIFF1aWNrbHkgY2hlY2sgaWYgdGhlIHBhdGggaXMgZnVsbHkgaW5zaWRlIG9yIG91dHNpZGUgb2YgdGhlIHBhZGRlZCBjb2xsaXNpb24gcmVnaW9uLlxuICAgICAgICAgICAgICAgIC8vIEZvciBvdmVybGFwcGluZyBwYXRocyB3ZSdsbCBvbmx5IGNyZWF0ZSBjb2xsaXNpb24gY2lyY2xlcyBmb3IgdGhlIHZpc2libGUgc2VnbWVudHNcbiAgICAgICAgICAgICAgICBjb25zdCBtaW5Qb2ludCA9IHByb2plY3RlZFBhdGhbMF0uY2xvbmUoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXhQb2ludCA9IHByb2plY3RlZFBhdGhbMF0uY2xvbmUoKTtcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcHJvamVjdGVkUGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBtaW5Qb2ludC54ID0gTWF0aC5taW4obWluUG9pbnQueCwgcHJvamVjdGVkUGF0aFtpXS54KTtcbiAgICAgICAgICAgICAgICAgICAgbWluUG9pbnQueSA9IE1hdGgubWluKG1pblBvaW50LnksIHByb2plY3RlZFBhdGhbaV0ueSk7XG4gICAgICAgICAgICAgICAgICAgIG1heFBvaW50LnggPSBNYXRoLm1heChtYXhQb2ludC54LCBwcm9qZWN0ZWRQYXRoW2ldLngpO1xuICAgICAgICAgICAgICAgICAgICBtYXhQb2ludC55ID0gTWF0aC5tYXgobWF4UG9pbnQueSwgcHJvamVjdGVkUGF0aFtpXS55KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobWluUG9pbnQueCA+PSBzY3JlZW5QbGFuZU1pbi54ICYmIG1heFBvaW50LnggPD0gc2NyZWVuUGxhbmVNYXgueCAmJlxuICAgICAgICAgICAgICAgICAgICBtaW5Qb2ludC55ID49IHNjcmVlblBsYW5lTWluLnkgJiYgbWF4UG9pbnQueSA8PSBzY3JlZW5QbGFuZU1heC55KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFF1YWQgZnVsbHkgdmlzaWJsZVxuICAgICAgICAgICAgICAgICAgICBzZWdtZW50cyA9IFtwcm9qZWN0ZWRQYXRoXTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1heFBvaW50LnggPCBzY3JlZW5QbGFuZU1pbi54IHx8IG1pblBvaW50LnggPiBzY3JlZW5QbGFuZU1heC54IHx8XG4gICAgICAgICAgICAgICAgICAgIG1heFBvaW50LnkgPCBzY3JlZW5QbGFuZU1pbi55IHx8IG1pblBvaW50LnkgPiBzY3JlZW5QbGFuZU1heC55KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIE5vdCB2aXNpYmxlXG4gICAgICAgICAgICAgICAgICAgIHNlZ21lbnRzID0gW107XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2VnbWVudHMgPSBjbGlwTGluZShbcHJvamVjdGVkUGF0aF0sIHNjcmVlblBsYW5lTWluLngsIHNjcmVlblBsYW5lTWluLnksIHNjcmVlblBsYW5lTWF4LngsIHNjcmVlblBsYW5lTWF4LnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBzZWcgb2Ygc2VnbWVudHMpIHtcbiAgICAgICAgICAgICAgICAvLyBpbnRlcnBvbGF0ZSBwb3NpdGlvbnMgZm9yIGNvbGxpc2lvbiBjaXJjbGVzLiBBZGQgYSBzbWFsbCBwYWRkaW5nIHRvIGJvdGggZW5kcyBvZiB0aGUgc2VnbWVudFxuICAgICAgICAgICAgICAgIGFzc2VydChzZWcubGVuZ3RoID4gMCk7XG4gICAgICAgICAgICAgICAgaW50ZXJwb2xhdG9yLnJlc2V0KHNlZywgcmFkaXVzICogMC4yNSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgbnVtQ2lyY2xlcyA9IDA7XG5cbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJwb2xhdG9yLmxlbmd0aCA8PSAwLjUgKiByYWRpdXMpIHtcbiAgICAgICAgICAgICAgICAgICAgbnVtQ2lyY2xlcyA9IDE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbnVtQ2lyY2xlcyA9IE1hdGguY2VpbChpbnRlcnBvbGF0b3IucGFkZGVkTGVuZ3RoIC8gY2lyY2xlRGlzdCkgKyAxO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtQ2lyY2xlczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHQgPSBpIC8gTWF0aC5tYXgobnVtQ2lyY2xlcyAtIDEsIDEpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaXJjbGVQb3NpdGlvbiA9IGludGVycG9sYXRvci5sZXJwKHQpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGFkZCB2aWV3cG9ydCBwYWRkaW5nIHRvIHRoZSBwb3NpdGlvbiBhbmQgcGVyZm9ybSBpbml0aWFsIGNvbGxpc2lvbiBjaGVja1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjZW50ZXJYID0gY2lyY2xlUG9zaXRpb24ueCArIHZpZXdwb3J0UGFkZGluZztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VudGVyWSA9IGNpcmNsZVBvc2l0aW9uLnkgKyB2aWV3cG9ydFBhZGRpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgcGxhY2VkQ29sbGlzaW9uQ2lyY2xlcy5wdXNoKGNlbnRlclgsIGNlbnRlclksIHJhZGl1cywgMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeDEgPSBjZW50ZXJYIC0gcmFkaXVzO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB5MSA9IGNlbnRlclkgLSByYWRpdXM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHgyID0gY2VudGVyWCArIHJhZGl1cztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeTIgPSBjZW50ZXJZICsgcmFkaXVzO1xuXG4gICAgICAgICAgICAgICAgICAgIGVudGlyZWx5T2Zmc2NyZWVuID0gZW50aXJlbHlPZmZzY3JlZW4gJiYgdGhpcy5pc09mZnNjcmVlbih4MSwgeTEsIHgyLCB5Mik7XG4gICAgICAgICAgICAgICAgICAgIGluR3JpZCA9IGluR3JpZCB8fCB0aGlzLmlzSW5zaWRlR3JpZCh4MSwgeTEsIHgyLCB5Mik7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhbGxvd092ZXJsYXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuaGl0VGVzdENpcmNsZShjZW50ZXJYLCBjZW50ZXJZLCByYWRpdXMsIGNvbGxpc2lvbkdyb3VwUHJlZGljYXRlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IGVhcmx5IGV4aXQgaWYgd2UncmUgc2hvd2luZyB0aGUgZGVidWcgY2lyY2xlcyBiZWNhdXNlIHdlIHN0aWxsIHdhbnQgdG8gY2FsY3VsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggY2lyY2xlcyBhcmUgaW4gdXNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGlzaW9uRGV0ZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2hvd0NvbGxpc2lvbkNpcmNsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZXM6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2NyZWVuOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxpc2lvbkRldGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNpcmNsZXM6ICgoIXNob3dDb2xsaXNpb25DaXJjbGVzICYmIGNvbGxpc2lvbkRldGVjdGVkKSB8fCAhaW5HcmlkKSA/IFtdIDogcGxhY2VkQ29sbGlzaW9uQ2lyY2xlcyxcbiAgICAgICAgICAgIG9mZnNjcmVlbjogZW50aXJlbHlPZmZzY3JlZW4sXG4gICAgICAgICAgICBjb2xsaXNpb25EZXRlY3RlZFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJlY2F1c2UgdGhlIGdlb21ldHJpZXMgaW4gdGhlIENvbGxpc2lvbkluZGV4IGFyZSBhbiBhcHByb3hpbWF0aW9uIG9mIHRoZSBzaGFwZSBvZlxuICAgICAqIHN5bWJvbHMgb24gdGhlIG1hcCwgd2UgdXNlIHRoZSBDb2xsaXNpb25JbmRleCB0byBsb29rIHVwIHRoZSBzeW1ib2wgcGFydCBvZlxuICAgICAqIGBxdWVyeVJlbmRlcmVkRmVhdHVyZXNgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBxdWVyeVJlbmRlcmVkU3ltYm9scyh2aWV3cG9ydFF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50Pikge1xuICAgICAgICBpZiAodmlld3BvcnRRdWVyeUdlb21ldHJ5Lmxlbmd0aCA9PT0gMCB8fCAodGhpcy5ncmlkLmtleXNMZW5ndGgoKSA9PT0gMCAmJiB0aGlzLmlnbm9yZWRHcmlkLmtleXNMZW5ndGgoKSA9PT0gMCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gW107XG4gICAgICAgIGxldCBtaW5YID0gSW5maW5pdHk7XG4gICAgICAgIGxldCBtaW5ZID0gSW5maW5pdHk7XG4gICAgICAgIGxldCBtYXhYID0gLUluZmluaXR5O1xuICAgICAgICBsZXQgbWF4WSA9IC1JbmZpbml0eTtcbiAgICAgICAgZm9yIChjb25zdCBwb2ludCBvZiB2aWV3cG9ydFF1ZXJ5R2VvbWV0cnkpIHtcbiAgICAgICAgICAgIGNvbnN0IGdyaWRQb2ludCA9IG5ldyBQb2ludChwb2ludC54ICsgdmlld3BvcnRQYWRkaW5nLCBwb2ludC55ICsgdmlld3BvcnRQYWRkaW5nKTtcbiAgICAgICAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCBncmlkUG9pbnQueCk7XG4gICAgICAgICAgICBtaW5ZID0gTWF0aC5taW4obWluWSwgZ3JpZFBvaW50LnkpO1xuICAgICAgICAgICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIGdyaWRQb2ludC54KTtcbiAgICAgICAgICAgIG1heFkgPSBNYXRoLm1heChtYXhZLCBncmlkUG9pbnQueSk7XG4gICAgICAgICAgICBxdWVyeS5wdXNoKGdyaWRQb2ludCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmZWF0dXJlcyA9IHRoaXMuZ3JpZC5xdWVyeShtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZKVxuICAgICAgICAgICAgLmNvbmNhdCh0aGlzLmlnbm9yZWRHcmlkLnF1ZXJ5KG1pblgsIG1pblksIG1heFgsIG1heFkpKTtcblxuICAgICAgICBjb25zdCBzZWVuRmVhdHVyZXMgPSB7fTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG5cbiAgICAgICAgZm9yIChjb25zdCBmZWF0dXJlIG9mIGZlYXR1cmVzKSB7XG4gICAgICAgICAgICBjb25zdCBmZWF0dXJlS2V5ID0gZmVhdHVyZS5rZXk7XG4gICAgICAgICAgICAvLyBTa2lwIGFscmVhZHkgc2VlbiBmZWF0dXJlcy5cbiAgICAgICAgICAgIGlmIChzZWVuRmVhdHVyZXNbZmVhdHVyZUtleS5idWNrZXRJbnN0YW5jZUlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgc2VlbkZlYXR1cmVzW2ZlYXR1cmVLZXkuYnVja2V0SW5zdGFuY2VJZF0gPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWVuRmVhdHVyZXNbZmVhdHVyZUtleS5idWNrZXRJbnN0YW5jZUlkXVtmZWF0dXJlS2V5LmZlYXR1cmVJbmRleF0pIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgcXVlcnkgaW50ZXJzZWN0cyB3aXRoIHRoZSBmZWF0dXJlIGJveFxuICAgICAgICAgICAgLy8gXCJDb2xsaXNpb24gQ2lyY2xlc1wiIGZvciBsaW5lIGxhYmVscyBhcmUgdHJlYXRlZCBhcyBib3hlcyBoZXJlXG4gICAgICAgICAgICAvLyBTaW5jZSB0aGVyZSdzIG5vIGFjdHVhbCBjb2xsaXNpb24gdGFraW5nIHBsYWNlLCB0aGUgY2lyY2xlIHZzLiBzcXVhcmVcbiAgICAgICAgICAgIC8vIGRpc3RpbmN0aW9uIGRvZXNuJ3QgbWF0dGVyIGFzIG11Y2gsIGFuZCBib3ggZ2VvbWV0cnkgaXMgZWFzaWVyXG4gICAgICAgICAgICAvLyB0byB3b3JrIHdpdGguXG4gICAgICAgICAgICBjb25zdCBiYm94ID0gW1xuICAgICAgICAgICAgICAgIG5ldyBQb2ludChmZWF0dXJlLngxLCBmZWF0dXJlLnkxKSxcbiAgICAgICAgICAgICAgICBuZXcgUG9pbnQoZmVhdHVyZS54MiwgZmVhdHVyZS55MSksXG4gICAgICAgICAgICAgICAgbmV3IFBvaW50KGZlYXR1cmUueDIsIGZlYXR1cmUueTIpLFxuICAgICAgICAgICAgICAgIG5ldyBQb2ludChmZWF0dXJlLngxLCBmZWF0dXJlLnkyKVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGlmICghaW50ZXJzZWN0aW9uVGVzdHMucG9seWdvbkludGVyc2VjdHNQb2x5Z29uKHF1ZXJ5LCBiYm94KSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZWVuRmVhdHVyZXNbZmVhdHVyZUtleS5idWNrZXRJbnN0YW5jZUlkXVtmZWF0dXJlS2V5LmZlYXR1cmVJbmRleF0gPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHJlc3VsdFtmZWF0dXJlS2V5LmJ1Y2tldEluc3RhbmNlSWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRbZmVhdHVyZUtleS5idWNrZXRJbnN0YW5jZUlkXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0W2ZlYXR1cmVLZXkuYnVja2V0SW5zdGFuY2VJZF0ucHVzaChmZWF0dXJlS2V5LmZlYXR1cmVJbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGluc2VydENvbGxpc2lvbkJveChjb2xsaXNpb25Cb3g6IEFycmF5PG51bWJlcj4sIGlnbm9yZVBsYWNlbWVudDogYm9vbGVhbiwgYnVja2V0SW5zdGFuY2VJZDogbnVtYmVyLCBmZWF0dXJlSW5kZXg6IG51bWJlciwgY29sbGlzaW9uR3JvdXBJRDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSBpZ25vcmVQbGFjZW1lbnQgPyB0aGlzLmlnbm9yZWRHcmlkIDogdGhpcy5ncmlkO1xuXG4gICAgICAgIGNvbnN0IGtleSA9IHtidWNrZXRJbnN0YW5jZUlkLCBmZWF0dXJlSW5kZXgsIGNvbGxpc2lvbkdyb3VwSUR9O1xuICAgICAgICBncmlkLmluc2VydChrZXksIGNvbGxpc2lvbkJveFswXSwgY29sbGlzaW9uQm94WzFdLCBjb2xsaXNpb25Cb3hbMl0sIGNvbGxpc2lvbkJveFszXSk7XG4gICAgfVxuXG4gICAgaW5zZXJ0Q29sbGlzaW9uQ2lyY2xlcyhjb2xsaXNpb25DaXJjbGVzOiBBcnJheTxudW1iZXI+LCBpZ25vcmVQbGFjZW1lbnQ6IGJvb2xlYW4sIGJ1Y2tldEluc3RhbmNlSWQ6IG51bWJlciwgZmVhdHVyZUluZGV4OiBudW1iZXIsIGNvbGxpc2lvbkdyb3VwSUQ6IG51bWJlcikge1xuICAgICAgICBjb25zdCBncmlkID0gaWdub3JlUGxhY2VtZW50ID8gdGhpcy5pZ25vcmVkR3JpZCA6IHRoaXMuZ3JpZDtcblxuICAgICAgICBjb25zdCBrZXkgPSB7YnVja2V0SW5zdGFuY2VJZCwgZmVhdHVyZUluZGV4LCBjb2xsaXNpb25Hcm91cElEfTtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBjb2xsaXNpb25DaXJjbGVzLmxlbmd0aDsgayArPSA0KSB7XG4gICAgICAgICAgICBncmlkLmluc2VydENpcmNsZShrZXksIGNvbGxpc2lvbkNpcmNsZXNba10sIGNvbGxpc2lvbkNpcmNsZXNbayArIDFdLCBjb2xsaXNpb25DaXJjbGVzW2sgKyAyXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm9qZWN0QW5kR2V0UGVyc3BlY3RpdmVSYXRpbyhwb3NNYXRyaXg6IG1hdDQsIHg6IG51bWJlciwgeTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHAgPSBbeCwgeSwgMCwgMV07XG4gICAgICAgIHByb2plY3Rpb24ueHlUcmFuc2Zvcm1NYXQ0KHAsIHAsIHBvc01hdHJpeCk7XG4gICAgICAgIGNvbnN0IGEgPSBuZXcgUG9pbnQoXG4gICAgICAgICAgICAoKChwWzBdIC8gcFszXSArIDEpIC8gMikgKiB0aGlzLnRyYW5zZm9ybS53aWR0aCkgKyB2aWV3cG9ydFBhZGRpbmcsXG4gICAgICAgICAgICAoKCgtcFsxXSAvIHBbM10gKyAxKSAvIDIpICogdGhpcy50cmFuc2Zvcm0uaGVpZ2h0KSArIHZpZXdwb3J0UGFkZGluZ1xuICAgICAgICApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcG9pbnQ6IGEsXG4gICAgICAgICAgICAvLyBTZWUgcGVyc3BlY3RpdmUgcmF0aW8gY29tbWVudCBpbiBzeW1ib2xfc2RmLnZlcnRleFxuICAgICAgICAgICAgLy8gV2UncmUgZG9pbmcgY29sbGlzaW9uIGRldGVjdGlvbiBpbiB2aWV3cG9ydCBzcGFjZSBzbyB3ZSBuZWVkXG4gICAgICAgICAgICAvLyB0byBzY2FsZSBkb3duIGJveGVzIGluIHRoZSBkaXN0YW5jZVxuICAgICAgICAgICAgcGVyc3BlY3RpdmVSYXRpbzogMC41ICsgMC41ICogKHRoaXMudHJhbnNmb3JtLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UgLyBwWzNdKVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGlzT2Zmc2NyZWVuKHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHgyIDwgdmlld3BvcnRQYWRkaW5nIHx8IHgxID49IHRoaXMuc2NyZWVuUmlnaHRCb3VuZGFyeSB8fCB5MiA8IHZpZXdwb3J0UGFkZGluZyB8fCB5MSA+IHRoaXMuc2NyZWVuQm90dG9tQm91bmRhcnk7XG4gICAgfVxuXG4gICAgaXNJbnNpZGVHcmlkKHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHgyID49IDAgJiYgeDEgPCB0aGlzLmdyaWRSaWdodEJvdW5kYXJ5ICYmIHkyID49IDAgJiYgeTEgPCB0aGlzLmdyaWRCb3R0b21Cb3VuZGFyeTtcbiAgICB9XG5cbiAgICAvKlxuICAgICogUmV0dXJucyBhIG1hdHJpeCBmb3IgdHJhbnNmb3JtaW5nIGNvbGxpc2lvbiBzaGFwZXMgdG8gdmlld3BvcnQgY29vcmRpbmF0ZSBzcGFjZS5cbiAgICAqIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHJlbmRlciBlLmcuIGNvbGxpc2lvbiBjaXJjbGVzIG9uIHRoZSBzY3JlZW4uXG4gICAgKiAgIGV4YW1wbGUgdHJhbnNmb3JtYXRpb246IGNsaXBQb3MgPSBnbENvb3JkTWF0cml4ICogdmlld3BvcnRNYXRyaXggKiBjaXJjbGVfcG9zXG4gICAgKi9cbiAgICBnZXRWaWV3cG9ydE1hdHJpeCgpOiBtYXQ0IHtcbiAgICAgICAgY29uc3QgbSA9IG1hdDQuaWRlbnRpdHkoW10pO1xuICAgICAgICBtYXQ0LnRyYW5zbGF0ZShtLCBtLCBbLXZpZXdwb3J0UGFkZGluZywgLXZpZXdwb3J0UGFkZGluZywgMC4wXSk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29sbGlzaW9uSW5kZXg7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgRVhURU5UIGZyb20gJy4uL2RhdGEvZXh0ZW50JztcblxuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4vdGlsZV9pZCc7XG5cbi8qKlxuICogQ29udmVydHMgYSBwaXhlbCB2YWx1ZSBhdCBhIHRoZSBnaXZlbiB6b29tIGxldmVsIHRvIHRpbGUgdW5pdHMuXG4gKlxuICogVGhlIHNoYWRlcnMgbW9zdGx5IGNhbGN1bGF0ZSBldmVyeXRoaW5nIGluIHRpbGUgdW5pdHMgc28gc3R5bGVcbiAqIHByb3BlcnRpZXMgbmVlZCB0byBiZSBjb252ZXJ0ZWQgZnJvbSBwaXhlbHMgdG8gdGlsZSB1bml0cyB1c2luZyB0aGlzLlxuICpcbiAqIEZvciBleGFtcGxlLCBhIHRyYW5zbGF0aW9uIGJ5IDMwIHBpeGVscyBhdCB6b29tIDYuNSB3aWxsIGJlIGFcbiAqIHRyYW5zbGF0aW9uIGJ5IHBpeGVsc1RvVGlsZVVuaXRzKDMwLCA2LjUpIHRpbGUgdW5pdHMuXG4gKlxuICogQHJldHVybnMgdmFsdWUgaW4gdGlsZSB1bml0c1xuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odGlsZToge3RpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCwgdGlsZVNpemU6IG51bWJlcn0sIHBpeGVsVmFsdWU6IG51bWJlciwgejogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGl4ZWxWYWx1ZSAqIChFWFRFTlQgLyAodGlsZS50aWxlU2l6ZSAqIE1hdGgucG93KDIsIHogLSB0aWxlLnRpbGVJRC5vdmVyc2NhbGVkWikpKTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBDb2xsaXNpb25JbmRleCBmcm9tICcuL2NvbGxpc2lvbl9pbmRleCc7XG5pbXBvcnQgRVhURU5UIGZyb20gJy4uL2RhdGEvZXh0ZW50JztcbmltcG9ydCAqIGFzIHN5bWJvbFNpemUgZnJvbSAnLi9zeW1ib2xfc2l6ZSc7XG5pbXBvcnQgKiBhcyBwcm9qZWN0aW9uIGZyb20gJy4vcHJvamVjdGlvbic7XG5pbXBvcnQge2dldEFuY2hvckp1c3RpZmljYXRpb24sIGV2YWx1YXRlVmFyaWFibGVPZmZzZXR9IGZyb20gJy4vc3ltYm9sX2xheW91dCc7XG5pbXBvcnQge2dldEFuY2hvckFsaWdubWVudCwgV3JpdGluZ01vZGV9IGZyb20gJy4vc2hhcGluZyc7XG5pbXBvcnQge21hdDR9IGZyb20gJ2dsLW1hdHJpeCc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgcGl4ZWxzVG9UaWxlVW5pdHMgZnJvbSAnLi4vc291cmNlL3BpeGVsc190b190aWxlX3VuaXRzJztcbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi9nZW8vdHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXInO1xuXG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4uL3NvdXJjZS90aWxlJztcbmltcG9ydCB0eXBlIFN5bWJvbEJ1Y2tldCwge0NvbGxpc2lvbkFycmF5cywgU2luZ2xlQ29sbGlzaW9uQm94fSBmcm9tICcuLi9kYXRhL2J1Y2tldC9zeW1ib2xfYnVja2V0JztcbmltcG9ydCB0eXBlIHtDb2xsaXNpb25Cb3hBcnJheSwgQ29sbGlzaW9uVmVydGV4QXJyYXksIFN5bWJvbEluc3RhbmNlfSBmcm9tICcuLi9kYXRhL2FycmF5X3R5cGVzJztcbmltcG9ydCB0eXBlIEZlYXR1cmVJbmRleCBmcm9tICcuLi9kYXRhL2ZlYXR1cmVfaW5kZXgnO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uL3NvdXJjZS90aWxlX2lkJztcbmltcG9ydCB0eXBlIHtUZXh0QW5jaG9yfSBmcm9tICcuL3N5bWJvbF9sYXlvdXQnO1xuXG5jbGFzcyBPcGFjaXR5U3RhdGUge1xuICAgIG9wYWNpdHk6IG51bWJlcjtcbiAgICBwbGFjZWQ6IGJvb2xlYW47XG4gICAgY29uc3RydWN0b3IocHJldlN0YXRlOiA/T3BhY2l0eVN0YXRlLCBpbmNyZW1lbnQ6IG51bWJlciwgcGxhY2VkOiBib29sZWFuLCBza2lwRmFkZTogP2Jvb2xlYW4pIHtcbiAgICAgICAgaWYgKHByZXZTdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5vcGFjaXR5ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgcHJldlN0YXRlLm9wYWNpdHkgKyAocHJldlN0YXRlLnBsYWNlZCA/IGluY3JlbWVudCA6IC1pbmNyZW1lbnQpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9wYWNpdHkgPSAoc2tpcEZhZGUgJiYgcGxhY2VkKSA/IDEgOiAwO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGxhY2VkID0gcGxhY2VkO1xuICAgIH1cbiAgICBpc0hpZGRlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3BhY2l0eSA9PT0gMCAmJiAhdGhpcy5wbGFjZWQ7XG4gICAgfVxufVxuXG5jbGFzcyBKb2ludE9wYWNpdHlTdGF0ZSB7XG4gICAgdGV4dDogT3BhY2l0eVN0YXRlO1xuICAgIGljb246IE9wYWNpdHlTdGF0ZTtcbiAgICBjb25zdHJ1Y3RvcihwcmV2U3RhdGU6ID9Kb2ludE9wYWNpdHlTdGF0ZSwgaW5jcmVtZW50OiBudW1iZXIsIHBsYWNlZFRleHQ6IGJvb2xlYW4sIHBsYWNlZEljb246IGJvb2xlYW4sIHNraXBGYWRlOiA/Ym9vbGVhbikge1xuICAgICAgICB0aGlzLnRleHQgPSBuZXcgT3BhY2l0eVN0YXRlKHByZXZTdGF0ZSA/IHByZXZTdGF0ZS50ZXh0IDogbnVsbCwgaW5jcmVtZW50LCBwbGFjZWRUZXh0LCBza2lwRmFkZSk7XG4gICAgICAgIHRoaXMuaWNvbiA9IG5ldyBPcGFjaXR5U3RhdGUocHJldlN0YXRlID8gcHJldlN0YXRlLmljb24gOiBudWxsLCBpbmNyZW1lbnQsIHBsYWNlZEljb24sIHNraXBGYWRlKTtcbiAgICB9XG4gICAgaXNIaWRkZW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHQuaXNIaWRkZW4oKSAmJiB0aGlzLmljb24uaXNIaWRkZW4oKTtcbiAgICB9XG59XG5cbmNsYXNzIEpvaW50UGxhY2VtZW50IHtcbiAgICB0ZXh0OiBib29sZWFuO1xuICAgIGljb246IGJvb2xlYW47XG4gICAgLy8gc2tpcEZhZGUgPSBvdXRzaWRlIHZpZXdwb3J0LCBidXQgd2l0aGluIENvbGxpc2lvbkluZGV4Ojp2aWV3cG9ydFBhZGRpbmcgcHggb2YgdGhlIGVkZ2VcbiAgICAvLyBCZWNhdXNlIHRoZXNlIHN5bWJvbHMgYXJlbid0IG9uc2NyZWVuIHlldCwgd2UgY2FuIHNraXAgdGhlIFwiZmFkZSBpblwiIGFuaW1hdGlvbixcbiAgICAvLyBhbmQgaWYgYSBzdWJzZXF1ZW50IHZpZXdwb3J0IGNoYW5nZSBicmluZ3MgdGhlbSBpbnRvIHZpZXcsIHRoZXknbGwgYmUgZnVsbHlcbiAgICAvLyB2aXNpYmxlIHJpZ2h0IGF3YXkuXG4gICAgc2tpcEZhZGU6IGJvb2xlYW47XG4gICAgY29uc3RydWN0b3IodGV4dDogYm9vbGVhbiwgaWNvbjogYm9vbGVhbiwgc2tpcEZhZGU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICAgICAgdGhpcy5pY29uID0gaWNvbjtcbiAgICAgICAgdGhpcy5za2lwRmFkZSA9IHNraXBGYWRlO1xuICAgIH1cbn1cblxuY2xhc3MgQ29sbGlzaW9uQ2lyY2xlQXJyYXkge1xuICAgIC8vIFN0b3JlcyBjb2xsaXNpb24gY2lyY2xlcyBhbmQgcGxhY2VtZW50IG1hdHJpY2VzIG9mIGEgYnVja2V0IGZvciBkZWJ1ZyByZW5kZXJpbmcuXG4gICAgaW52UHJvak1hdHJpeDogbWF0NDtcbiAgICB2aWV3cG9ydE1hdHJpeDogbWF0NDtcbiAgICBjaXJjbGVzOiBBcnJheTxudW1iZXI+O1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuaW52UHJvak1hdHJpeCA9IG1hdDQuY3JlYXRlKCk7XG4gICAgICAgIHRoaXMudmlld3BvcnRNYXRyaXggPSBtYXQ0LmNyZWF0ZSgpO1xuICAgICAgICB0aGlzLmNpcmNsZXMgPSBbXTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSZXRhaW5lZFF1ZXJ5RGF0YSB7XG4gICAgYnVja2V0SW5zdGFuY2VJZDogbnVtYmVyO1xuICAgIGZlYXR1cmVJbmRleDogRmVhdHVyZUluZGV4O1xuICAgIHNvdXJjZUxheWVySW5kZXg6IG51bWJlcjtcbiAgICBidWNrZXRJbmRleDogbnVtYmVyO1xuICAgIHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRDtcbiAgICBmZWF0dXJlU29ydE9yZGVyOiA/QXJyYXk8bnVtYmVyPlxuICAgIGNvbnN0cnVjdG9yKGJ1Y2tldEluc3RhbmNlSWQ6IG51bWJlcixcbiAgICAgICAgICAgICAgICBmZWF0dXJlSW5kZXg6IEZlYXR1cmVJbmRleCxcbiAgICAgICAgICAgICAgICBzb3VyY2VMYXllckluZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgYnVja2V0SW5kZXg6IG51bWJlcixcbiAgICAgICAgICAgICAgICB0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQpIHtcbiAgICAgICAgdGhpcy5idWNrZXRJbnN0YW5jZUlkID0gYnVja2V0SW5zdGFuY2VJZDtcbiAgICAgICAgdGhpcy5mZWF0dXJlSW5kZXggPSBmZWF0dXJlSW5kZXg7XG4gICAgICAgIHRoaXMuc291cmNlTGF5ZXJJbmRleCA9IHNvdXJjZUxheWVySW5kZXg7XG4gICAgICAgIHRoaXMuYnVja2V0SW5kZXggPSBidWNrZXRJbmRleDtcbiAgICAgICAgdGhpcy50aWxlSUQgPSB0aWxlSUQ7XG4gICAgfVxufVxuXG50eXBlIENvbGxpc2lvbkdyb3VwID0geyBJRDogbnVtYmVyLCBwcmVkaWNhdGU/OiBhbnkgfTtcblxuY2xhc3MgQ29sbGlzaW9uR3JvdXBzIHtcbiAgICBjb2xsaXNpb25Hcm91cHM6IHtbZ3JvdXBOYW1lOiBzdHJpbmddOiBDb2xsaXNpb25Hcm91cH07XG4gICAgbWF4R3JvdXBJRDogbnVtYmVyO1xuICAgIGNyb3NzU291cmNlQ29sbGlzaW9uczogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKGNyb3NzU291cmNlQ29sbGlzaW9uczogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmNyb3NzU291cmNlQ29sbGlzaW9ucyA9IGNyb3NzU291cmNlQ29sbGlzaW9ucztcbiAgICAgICAgdGhpcy5tYXhHcm91cElEID0gMDtcbiAgICAgICAgdGhpcy5jb2xsaXNpb25Hcm91cHMgPSB7fTtcbiAgICB9XG5cbiAgICBnZXQoc291cmNlSUQ6IHN0cmluZykge1xuICAgICAgICAvLyBUaGUgcHJlZGljYXRlL2dyb3VwSUQgbWVjaGFuaXNtIGFsbG93cyBmb3IgYXJiaXRyYXJ5IGdyb3VwaW5nLFxuICAgICAgICAvLyBidXQgdGhlIGN1cnJlbnQgaW50ZXJmYWNlIGRlZmluZXMgb25lIHNvdXJjZSA9PSBvbmUgZ3JvdXAgd2hlblxuICAgICAgICAvLyBjcm9zc1NvdXJjZUNvbGxpc2lvbnMgPT0gdHJ1ZS5cbiAgICAgICAgaWYgKCF0aGlzLmNyb3NzU291cmNlQ29sbGlzaW9ucykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNvbGxpc2lvbkdyb3Vwc1tzb3VyY2VJRF0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0R3JvdXBJRCA9ICsrdGhpcy5tYXhHcm91cElEO1xuICAgICAgICAgICAgICAgIHRoaXMuY29sbGlzaW9uR3JvdXBzW3NvdXJjZUlEXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgSUQ6IG5leHRHcm91cElELFxuICAgICAgICAgICAgICAgICAgICBwcmVkaWNhdGU6IChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBrZXkuY29sbGlzaW9uR3JvdXBJRCA9PT0gbmV4dEdyb3VwSUQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sbGlzaW9uR3JvdXBzW3NvdXJjZUlEXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7SUQ6IDAsIHByZWRpY2F0ZTogbnVsbH07XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZVZhcmlhYmxlTGF5b3V0U2hpZnQoYW5jaG9yOiBUZXh0QW5jaG9yLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgdGV4dE9mZnNldDogW251bWJlciwgbnVtYmVyXSwgdGV4dEJveFNjYWxlOiBudW1iZXIpOiBQb2ludCB7XG4gICAgY29uc3Qge2hvcml6b250YWxBbGlnbiwgdmVydGljYWxBbGlnbn0gPSBnZXRBbmNob3JBbGlnbm1lbnQoYW5jaG9yKTtcbiAgICBjb25zdCBzaGlmdFggPSAtKGhvcml6b250YWxBbGlnbiAtIDAuNSkgKiB3aWR0aDtcbiAgICBjb25zdCBzaGlmdFkgPSAtKHZlcnRpY2FsQWxpZ24gLSAwLjUpICogaGVpZ2h0O1xuICAgIGNvbnN0IG9mZnNldCA9IGV2YWx1YXRlVmFyaWFibGVPZmZzZXQoYW5jaG9yLCB0ZXh0T2Zmc2V0KTtcbiAgICByZXR1cm4gbmV3IFBvaW50KFxuICAgICAgICBzaGlmdFggKyBvZmZzZXRbMF0gKiB0ZXh0Qm94U2NhbGUsXG4gICAgICAgIHNoaWZ0WSArIG9mZnNldFsxXSAqIHRleHRCb3hTY2FsZVxuICAgICk7XG59XG5cbmZ1bmN0aW9uIHNoaWZ0VmFyaWFibGVDb2xsaXNpb25Cb3goY29sbGlzaW9uQm94OiBTaW5nbGVDb2xsaXNpb25Cb3gsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnRYOiBudW1iZXIsIHNoaWZ0WTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZVdpdGhNYXA6IGJvb2xlYW4sIHBpdGNoV2l0aE1hcDogYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZTogbnVtYmVyKSB7XG4gICAgY29uc3Qge3gxLCB4MiwgeTEsIHkyLCBhbmNob3JQb2ludFgsIGFuY2hvclBvaW50WX0gPSBjb2xsaXNpb25Cb3g7XG4gICAgY29uc3Qgcm90YXRlZE9mZnNldCA9IG5ldyBQb2ludChzaGlmdFgsIHNoaWZ0WSk7XG4gICAgaWYgKHJvdGF0ZVdpdGhNYXApIHtcbiAgICAgICAgcm90YXRlZE9mZnNldC5fcm90YXRlKHBpdGNoV2l0aE1hcCA/IGFuZ2xlIDogLWFuZ2xlKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeDE6IHgxICsgcm90YXRlZE9mZnNldC54LFxuICAgICAgICB5MTogeTEgKyByb3RhdGVkT2Zmc2V0LnksXG4gICAgICAgIHgyOiB4MiArIHJvdGF0ZWRPZmZzZXQueCxcbiAgICAgICAgeTI6IHkyICsgcm90YXRlZE9mZnNldC55LFxuICAgICAgICAvLyBzeW1ib2wgYW5jaG9yIHBvaW50IHN0YXlzIHRoZSBzYW1lIHJlZ2FyZGxlc3Mgb2YgdGV4dC1hbmNob3JcbiAgICAgICAgYW5jaG9yUG9pbnRYLFxuICAgICAgICBhbmNob3JQb2ludFlcbiAgICB9O1xufVxuXG5leHBvcnQgdHlwZSBWYXJpYWJsZU9mZnNldCA9IHtcbiAgICB0ZXh0T2Zmc2V0OiBbbnVtYmVyLCBudW1iZXJdLFxuICAgIHdpZHRoOiBudW1iZXIsXG4gICAgaGVpZ2h0OiBudW1iZXIsXG4gICAgYW5jaG9yOiBUZXh0QW5jaG9yLFxuICAgIHRleHRCb3hTY2FsZTogbnVtYmVyLFxuICAgIHByZXZBbmNob3I/OiBUZXh0QW5jaG9yXG59O1xuXG50eXBlIFRpbGVMYXllclBhcmFtZXRlcnMgPSB7XG4gICAgYnVja2V0OiBTeW1ib2xCdWNrZXQsXG4gICAgbGF5b3V0OiBhbnksXG4gICAgcG9zTWF0cml4OiBtYXQ0LFxuICAgIHRleHRMYWJlbFBsYW5lTWF0cml4OiBtYXQ0LFxuICAgIGxhYmVsVG9TY3JlZW5NYXRyaXg6IG1hdDQsXG4gICAgc2NhbGU6IG51bWJlcixcbiAgICB0ZXh0UGl4ZWxSYXRpbzogbnVtYmVyLFxuICAgIGhvbGRpbmdGb3JGYWRlOiBib29sZWFuLFxuICAgIGNvbGxpc2lvbkJveEFycmF5OiA/Q29sbGlzaW9uQm94QXJyYXksXG4gICAgcGFydGlhbGx5RXZhbHVhdGVkVGV4dFNpemU6IGFueSxcbiAgICBjb2xsaXNpb25Hcm91cDogYW55XG59O1xuXG5leHBvcnQgdHlwZSBCdWNrZXRQYXJ0ID0ge1xuICAgIHNvcnRLZXk/OiBudW1iZXIgfCB2b2lkLFxuICAgIHN5bWJvbEluc3RhbmNlU3RhcnQ6IG51bWJlcixcbiAgICBzeW1ib2xJbnN0YW5jZUVuZDogbnVtYmVyLFxuICAgIHBhcmFtZXRlcnM6IFRpbGVMYXllclBhcmFtZXRlcnNcbn07XG5cbmV4cG9ydCB0eXBlIENyb3NzVGlsZUlEID0gc3RyaW5nIHwgbnVtYmVyO1xuXG5leHBvcnQgY2xhc3MgUGxhY2VtZW50IHtcbiAgICB0cmFuc2Zvcm06IFRyYW5zZm9ybTtcbiAgICBjb2xsaXNpb25JbmRleDogQ29sbGlzaW9uSW5kZXg7XG4gICAgcGxhY2VtZW50czogeyBbXzogQ3Jvc3NUaWxlSURdOiBKb2ludFBsYWNlbWVudCB9O1xuICAgIG9wYWNpdGllczogeyBbXzogQ3Jvc3NUaWxlSURdOiBKb2ludE9wYWNpdHlTdGF0ZSB9O1xuICAgIHZhcmlhYmxlT2Zmc2V0czoge1tfOiBDcm9zc1RpbGVJRF06IFZhcmlhYmxlT2Zmc2V0IH07XG4gICAgcGxhY2VkT3JpZW50YXRpb25zOiB7W186IENyb3NzVGlsZUlEXTogbnVtYmVyIH07XG4gICAgY29tbWl0VGltZTogbnVtYmVyO1xuICAgIHByZXZab29tQWRqdXN0bWVudDogbnVtYmVyO1xuICAgIGxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lOiBudW1iZXI7XG4gICAgc3RhbGU6IGJvb2xlYW47XG4gICAgZmFkZUR1cmF0aW9uOiBudW1iZXI7XG4gICAgcmV0YWluZWRRdWVyeURhdGE6IHtbXzogbnVtYmVyXTogUmV0YWluZWRRdWVyeURhdGF9O1xuICAgIGNvbGxpc2lvbkdyb3VwczogQ29sbGlzaW9uR3JvdXBzO1xuICAgIHByZXZQbGFjZW1lbnQ6ID9QbGFjZW1lbnQ7XG4gICAgem9vbUF0TGFzdFJlY2VuY3lDaGVjazogbnVtYmVyO1xuICAgIGNvbGxpc2lvbkNpcmNsZUFycmF5czoge1thbnldOiBDb2xsaXNpb25DaXJjbGVBcnJheX07XG5cbiAgICBjb25zdHJ1Y3Rvcih0cmFuc2Zvcm06IFRyYW5zZm9ybSwgZmFkZUR1cmF0aW9uOiBudW1iZXIsIGNyb3NzU291cmNlQ29sbGlzaW9uczogYm9vbGVhbiwgcHJldlBsYWNlbWVudD86IFBsYWNlbWVudCkge1xuICAgICAgICB0aGlzLnRyYW5zZm9ybSA9IHRyYW5zZm9ybS5jbG9uZSgpO1xuICAgICAgICB0aGlzLmNvbGxpc2lvbkluZGV4ID0gbmV3IENvbGxpc2lvbkluZGV4KHRoaXMudHJhbnNmb3JtKTtcbiAgICAgICAgdGhpcy5wbGFjZW1lbnRzID0ge307XG4gICAgICAgIHRoaXMub3BhY2l0aWVzID0ge307XG4gICAgICAgIHRoaXMudmFyaWFibGVPZmZzZXRzID0ge307XG4gICAgICAgIHRoaXMuc3RhbGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jb21taXRUaW1lID0gMDtcbiAgICAgICAgdGhpcy5mYWRlRHVyYXRpb24gPSBmYWRlRHVyYXRpb247XG4gICAgICAgIHRoaXMucmV0YWluZWRRdWVyeURhdGEgPSB7fTtcbiAgICAgICAgdGhpcy5jb2xsaXNpb25Hcm91cHMgPSBuZXcgQ29sbGlzaW9uR3JvdXBzKGNyb3NzU291cmNlQ29sbGlzaW9ucyk7XG4gICAgICAgIHRoaXMuY29sbGlzaW9uQ2lyY2xlQXJyYXlzID0ge307XG5cbiAgICAgICAgdGhpcy5wcmV2UGxhY2VtZW50ID0gcHJldlBsYWNlbWVudDtcbiAgICAgICAgaWYgKHByZXZQbGFjZW1lbnQpIHtcbiAgICAgICAgICAgIHByZXZQbGFjZW1lbnQucHJldlBsYWNlbWVudCA9IHVuZGVmaW5lZDsgLy8gT25seSBob2xkIG9uIHRvIG9uZSBwbGFjZW1lbnQgYmFja1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wbGFjZWRPcmllbnRhdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICBnZXRCdWNrZXRQYXJ0cyhyZXN1bHRzOiBBcnJheTxCdWNrZXRQYXJ0Piwgc3R5bGVMYXllcjogU3R5bGVMYXllciwgdGlsZTogVGlsZSwgc29ydEFjcm9zc1RpbGVzOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IHN5bWJvbEJ1Y2tldCA9ICgodGlsZS5nZXRCdWNrZXQoc3R5bGVMYXllcik6IGFueSk6IFN5bWJvbEJ1Y2tldCk7XG4gICAgICAgIGNvbnN0IGJ1Y2tldEZlYXR1cmVJbmRleCA9IHRpbGUubGF0ZXN0RmVhdHVyZUluZGV4O1xuICAgICAgICBpZiAoIXN5bWJvbEJ1Y2tldCB8fCAhYnVja2V0RmVhdHVyZUluZGV4IHx8IHN0eWxlTGF5ZXIuaWQgIT09IHN5bWJvbEJ1Y2tldC5sYXllcklkc1swXSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCBjb2xsaXNpb25Cb3hBcnJheSA9IHRpbGUuY29sbGlzaW9uQm94QXJyYXk7XG5cbiAgICAgICAgY29uc3QgbGF5b3V0ID0gc3ltYm9sQnVja2V0LmxheWVyc1swXS5sYXlvdXQ7XG5cbiAgICAgICAgY29uc3Qgc2NhbGUgPSBNYXRoLnBvdygyLCB0aGlzLnRyYW5zZm9ybS56b29tIC0gdGlsZS50aWxlSUQub3ZlcnNjYWxlZFopO1xuICAgICAgICBjb25zdCB0ZXh0UGl4ZWxSYXRpbyA9IHRpbGUudGlsZVNpemUgLyBFWFRFTlQ7XG5cbiAgICAgICAgY29uc3QgcG9zTWF0cml4ID0gdGhpcy50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KHRpbGUudGlsZUlELnRvVW53cmFwcGVkKCkpO1xuXG4gICAgICAgIGNvbnN0IHBpdGNoV2l0aE1hcCA9IGxheW91dC5nZXQoJ3RleHQtcGl0Y2gtYWxpZ25tZW50JykgPT09ICdtYXAnO1xuICAgICAgICBjb25zdCByb3RhdGVXaXRoTWFwID0gbGF5b3V0LmdldCgndGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQnKSA9PT0gJ21hcCc7XG4gICAgICAgIGNvbnN0IHBpeGVsc1RvVGlsZXMgPSBwaXhlbHNUb1RpbGVVbml0cyh0aWxlLCAxLCB0aGlzLnRyYW5zZm9ybS56b29tKTtcblxuICAgICAgICBjb25zdCB0ZXh0TGFiZWxQbGFuZU1hdHJpeCA9IHByb2plY3Rpb24uZ2V0TGFiZWxQbGFuZU1hdHJpeChwb3NNYXRyaXgsXG4gICAgICAgICAgICAgICAgcGl0Y2hXaXRoTWFwLFxuICAgICAgICAgICAgICAgIHJvdGF0ZVdpdGhNYXAsXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0sXG4gICAgICAgICAgICAgICAgcGl4ZWxzVG9UaWxlcyk7XG5cbiAgICAgICAgbGV0IGxhYmVsVG9TY3JlZW5NYXRyaXggPSBudWxsO1xuXG4gICAgICAgIGlmIChwaXRjaFdpdGhNYXApIHtcbiAgICAgICAgICAgIGNvbnN0IGdsTWF0cml4ID0gcHJvamVjdGlvbi5nZXRHbENvb3JkTWF0cml4KFxuICAgICAgICAgICAgICAgIHBvc01hdHJpeCxcbiAgICAgICAgICAgICAgICBwaXRjaFdpdGhNYXAsXG4gICAgICAgICAgICAgICAgcm90YXRlV2l0aE1hcCxcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICBwaXhlbHNUb1RpbGVzKTtcblxuICAgICAgICAgICAgbGFiZWxUb1NjcmVlbk1hdHJpeCA9IG1hdDQubXVsdGlwbHkoW10sIHRoaXMudHJhbnNmb3JtLmxhYmVsUGxhbmVNYXRyaXgsIGdsTWF0cml4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFzIGxvbmcgYXMgdGhpcyBwbGFjZW1lbnQgbGl2ZXMsIHdlIGhhdmUgdG8gaG9sZCBvbnRvIHRoaXMgYnVja2V0J3NcbiAgICAgICAgLy8gbWF0Y2hpbmcgRmVhdHVyZUluZGV4L2RhdGEgZm9yIHF1ZXJ5aW5nIHB1cnBvc2VzXG4gICAgICAgIHRoaXMucmV0YWluZWRRdWVyeURhdGFbc3ltYm9sQnVja2V0LmJ1Y2tldEluc3RhbmNlSWRdID0gbmV3IFJldGFpbmVkUXVlcnlEYXRhKFxuICAgICAgICAgICAgc3ltYm9sQnVja2V0LmJ1Y2tldEluc3RhbmNlSWQsXG4gICAgICAgICAgICBidWNrZXRGZWF0dXJlSW5kZXgsXG4gICAgICAgICAgICBzeW1ib2xCdWNrZXQuc291cmNlTGF5ZXJJbmRleCxcbiAgICAgICAgICAgIHN5bWJvbEJ1Y2tldC5pbmRleCxcbiAgICAgICAgICAgIHRpbGUudGlsZUlEXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgcGFyYW1ldGVycyA9IHtcbiAgICAgICAgICAgIGJ1Y2tldDogc3ltYm9sQnVja2V0LFxuICAgICAgICAgICAgbGF5b3V0LFxuICAgICAgICAgICAgcG9zTWF0cml4LFxuICAgICAgICAgICAgdGV4dExhYmVsUGxhbmVNYXRyaXgsXG4gICAgICAgICAgICBsYWJlbFRvU2NyZWVuTWF0cml4LFxuICAgICAgICAgICAgc2NhbGUsXG4gICAgICAgICAgICB0ZXh0UGl4ZWxSYXRpbyxcbiAgICAgICAgICAgIGhvbGRpbmdGb3JGYWRlOiB0aWxlLmhvbGRpbmdGb3JGYWRlKCksXG4gICAgICAgICAgICBjb2xsaXNpb25Cb3hBcnJheSxcbiAgICAgICAgICAgIHBhcnRpYWxseUV2YWx1YXRlZFRleHRTaXplOiBzeW1ib2xTaXplLmV2YWx1YXRlU2l6ZUZvclpvb20oc3ltYm9sQnVja2V0LnRleHRTaXplRGF0YSwgdGhpcy50cmFuc2Zvcm0uem9vbSksXG4gICAgICAgICAgICBjb2xsaXNpb25Hcm91cDogdGhpcy5jb2xsaXNpb25Hcm91cHMuZ2V0KHN5bWJvbEJ1Y2tldC5zb3VyY2VJRClcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoc29ydEFjcm9zc1RpbGVzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJhbmdlIG9mIHN5bWJvbEJ1Y2tldC5zb3J0S2V5UmFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qge3NvcnRLZXksIHN5bWJvbEluc3RhbmNlU3RhcnQsIHN5bWJvbEluc3RhbmNlRW5kfSA9IHJhbmdlO1xuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh7c29ydEtleSwgc3ltYm9sSW5zdGFuY2VTdGFydCwgc3ltYm9sSW5zdGFuY2VFbmQsIHBhcmFtZXRlcnN9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaCh7XG4gICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2VTdGFydDogMCxcbiAgICAgICAgICAgICAgICBzeW1ib2xJbnN0YW5jZUVuZDogc3ltYm9sQnVja2V0LnN5bWJvbEluc3RhbmNlcy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhdHRlbXB0QW5jaG9yUGxhY2VtZW50KGFuY2hvcjogVGV4dEFuY2hvciwgdGV4dEJveDogU2luZ2xlQ29sbGlzaW9uQm94LCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRCb3hTY2FsZTogbnVtYmVyLCByb3RhdGVXaXRoTWFwOiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl0Y2hXaXRoTWFwOiBib29sZWFuLCB0ZXh0UGl4ZWxSYXRpbzogbnVtYmVyLCBwb3NNYXRyaXg6IG1hdDQsIGNvbGxpc2lvbkdyb3VwOiBDb2xsaXNpb25Hcm91cCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGxvd092ZXJsYXA6IGJvb2xlYW4sIHN5bWJvbEluc3RhbmNlOiBTeW1ib2xJbnN0YW5jZSwgYnVja2V0OiBTeW1ib2xCdWNrZXQsIG9yaWVudGF0aW9uOiBudW1iZXIsIGljb25Cb3g6ID9TaW5nbGVDb2xsaXNpb25Cb3gpOiA/eyBzaGlmdDogUG9pbnQsIHBsYWNlZEdseXBoQm94ZXM6IHsgYm94OiBBcnJheTxudW1iZXI+LCBvZmZzY3JlZW46IGJvb2xlYW4gfSB9ICB7XG5cbiAgICAgICAgY29uc3QgdGV4dE9mZnNldCA9IFtzeW1ib2xJbnN0YW5jZS50ZXh0T2Zmc2V0MCwgc3ltYm9sSW5zdGFuY2UudGV4dE9mZnNldDFdO1xuICAgICAgICBjb25zdCBzaGlmdCA9IGNhbGN1bGF0ZVZhcmlhYmxlTGF5b3V0U2hpZnQoYW5jaG9yLCB3aWR0aCwgaGVpZ2h0LCB0ZXh0T2Zmc2V0LCB0ZXh0Qm94U2NhbGUpO1xuXG4gICAgICAgIGNvbnN0IHBsYWNlZEdseXBoQm94ZXMgPSB0aGlzLmNvbGxpc2lvbkluZGV4LnBsYWNlQ29sbGlzaW9uQm94KFxuICAgICAgICAgICAgc2hpZnRWYXJpYWJsZUNvbGxpc2lvbkJveChcbiAgICAgICAgICAgICAgICB0ZXh0Qm94LCBzaGlmdC54LCBzaGlmdC55LFxuICAgICAgICAgICAgICAgIHJvdGF0ZVdpdGhNYXAsIHBpdGNoV2l0aE1hcCwgdGhpcy50cmFuc2Zvcm0uYW5nbGUpLFxuICAgICAgICAgICAgdGV4dEFsbG93T3ZlcmxhcCwgdGV4dFBpeGVsUmF0aW8sIHBvc01hdHJpeCwgY29sbGlzaW9uR3JvdXAucHJlZGljYXRlKTtcblxuICAgICAgICBpZiAoaWNvbkJveCkge1xuICAgICAgICAgICAgY29uc3QgcGxhY2VkSWNvbkJveGVzID0gdGhpcy5jb2xsaXNpb25JbmRleC5wbGFjZUNvbGxpc2lvbkJveChcbiAgICAgICAgICAgICAgICBzaGlmdFZhcmlhYmxlQ29sbGlzaW9uQm94KFxuICAgICAgICAgICAgICAgICAgICBpY29uQm94LCBzaGlmdC54LCBzaGlmdC55LFxuICAgICAgICAgICAgICAgICAgICByb3RhdGVXaXRoTWFwLCBwaXRjaFdpdGhNYXAsIHRoaXMudHJhbnNmb3JtLmFuZ2xlKSxcbiAgICAgICAgICAgICAgICB0ZXh0QWxsb3dPdmVybGFwLCB0ZXh0UGl4ZWxSYXRpbywgcG9zTWF0cml4LCBjb2xsaXNpb25Hcm91cC5wcmVkaWNhdGUpO1xuICAgICAgICAgICAgaWYgKHBsYWNlZEljb25Cb3hlcy5ib3gubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGxhY2VkR2x5cGhCb3hlcy5ib3gubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbGV0IHByZXZBbmNob3I7XG4gICAgICAgICAgICAvLyBJZiB0aGlzIGxhYmVsIHdhcyBwbGFjZWQgaW4gdGhlIHByZXZpb3VzIHBsYWNlbWVudCwgcmVjb3JkIHRoZSBhbmNob3IgcG9zaXRpb25cbiAgICAgICAgICAgIC8vIHRvIGFsbG93IHVzIHRvIGFuaW1hdGUgdGhlIHRyYW5zaXRpb25cbiAgICAgICAgICAgIGlmICh0aGlzLnByZXZQbGFjZW1lbnQgJiZcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZQbGFjZW1lbnQudmFyaWFibGVPZmZzZXRzW3N5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEXSAmJlxuICAgICAgICAgICAgICAgIHRoaXMucHJldlBsYWNlbWVudC5wbGFjZW1lbnRzW3N5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEXSAmJlxuICAgICAgICAgICAgICAgIHRoaXMucHJldlBsYWNlbWVudC5wbGFjZW1lbnRzW3N5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEXS50ZXh0KSB7XG4gICAgICAgICAgICAgICAgcHJldkFuY2hvciA9IHRoaXMucHJldlBsYWNlbWVudC52YXJpYWJsZU9mZnNldHNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdLmFuY2hvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzc2VydChzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRCAhPT0gMCk7XG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlT2Zmc2V0c1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF0gPSB7XG4gICAgICAgICAgICAgICAgdGV4dE9mZnNldCxcbiAgICAgICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICAgICAgYW5jaG9yLFxuICAgICAgICAgICAgICAgIHRleHRCb3hTY2FsZSxcbiAgICAgICAgICAgICAgICBwcmV2QW5jaG9yXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5tYXJrVXNlZEp1c3RpZmljYXRpb24oYnVja2V0LCBhbmNob3IsIHN5bWJvbEluc3RhbmNlLCBvcmllbnRhdGlvbik7XG5cbiAgICAgICAgICAgIGlmIChidWNrZXQuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMubWFya1VzZWRPcmllbnRhdGlvbihidWNrZXQsIG9yaWVudGF0aW9uLCBzeW1ib2xJbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5wbGFjZWRPcmllbnRhdGlvbnNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdID0gb3JpZW50YXRpb247XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB7c2hpZnQsIHBsYWNlZEdseXBoQm94ZXN9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcGxhY2VMYXllckJ1Y2tldFBhcnQoYnVja2V0UGFydDogT2JqZWN0LCBzZWVuQ3Jvc3NUaWxlSURzOiB7IFtzdHJpbmcgfCBudW1iZXJdOiBib29sZWFuIH0sIHNob3dDb2xsaXNpb25Cb3hlczogYm9vbGVhbikge1xuXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGJ1Y2tldCxcbiAgICAgICAgICAgIGxheW91dCxcbiAgICAgICAgICAgIHBvc01hdHJpeCxcbiAgICAgICAgICAgIHRleHRMYWJlbFBsYW5lTWF0cml4LFxuICAgICAgICAgICAgbGFiZWxUb1NjcmVlbk1hdHJpeCxcbiAgICAgICAgICAgIHRleHRQaXhlbFJhdGlvLFxuICAgICAgICAgICAgaG9sZGluZ0ZvckZhZGUsXG4gICAgICAgICAgICBjb2xsaXNpb25Cb3hBcnJheSxcbiAgICAgICAgICAgIHBhcnRpYWxseUV2YWx1YXRlZFRleHRTaXplLFxuICAgICAgICAgICAgY29sbGlzaW9uR3JvdXBcbiAgICAgICAgfSA9IGJ1Y2tldFBhcnQucGFyYW1ldGVycztcblxuICAgICAgICBjb25zdCB0ZXh0T3B0aW9uYWwgPSBsYXlvdXQuZ2V0KCd0ZXh0LW9wdGlvbmFsJyk7XG4gICAgICAgIGNvbnN0IGljb25PcHRpb25hbCA9IGxheW91dC5nZXQoJ2ljb24tb3B0aW9uYWwnKTtcbiAgICAgICAgY29uc3QgdGV4dEFsbG93T3ZlcmxhcCA9IGxheW91dC5nZXQoJ3RleHQtYWxsb3ctb3ZlcmxhcCcpO1xuICAgICAgICBjb25zdCBpY29uQWxsb3dPdmVybGFwID0gbGF5b3V0LmdldCgnaWNvbi1hbGxvdy1vdmVybGFwJyk7XG4gICAgICAgIGNvbnN0IHJvdGF0ZVdpdGhNYXAgPSBsYXlvdXQuZ2V0KCd0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCcpID09PSAnbWFwJztcbiAgICAgICAgY29uc3QgcGl0Y2hXaXRoTWFwID0gbGF5b3V0LmdldCgndGV4dC1waXRjaC1hbGlnbm1lbnQnKSA9PT0gJ21hcCc7XG4gICAgICAgIGNvbnN0IGhhc0ljb25UZXh0Rml0ID0gbGF5b3V0LmdldCgnaWNvbi10ZXh0LWZpdCcpICE9PSAnbm9uZSc7XG4gICAgICAgIGNvbnN0IHpPcmRlckJ5Vmlld3BvcnRZID0gbGF5b3V0LmdldCgnc3ltYm9sLXotb3JkZXInKSA9PT0gJ3ZpZXdwb3J0LXknO1xuXG4gICAgICAgIC8vIFRoaXMgbG9naWMgaXMgc2ltaWxhciB0byB0aGUgXCJkZWZhdWx0T3BhY2l0eVN0YXRlXCIgbG9naWMgYmVsb3cgaW4gdXBkYXRlQnVja2V0T3BhY2l0aWVzXG4gICAgICAgIC8vIElmIHdlIGtub3cgYSBzeW1ib2wgaXMgYWx3YXlzIHN1cHBvc2VkIHRvIHNob3csIGZvcmNlIGl0IHRvIGJlIG1hcmtlZCB2aXNpYmxlIGV2ZW4gaWZcbiAgICAgICAgLy8gaXQgd2Fzbid0IHBsYWNlZCBpbnRvIHRoZSBjb2xsaXNpb24gaW5kZXggKGJlY2F1c2Ugc29tZSBvciBhbGwgb2YgaXQgd2FzIG91dHNpZGUgdGhlIHJhbmdlXG4gICAgICAgIC8vIG9mIHRoZSBjb2xsaXNpb24gZ3JpZCkuXG4gICAgICAgIC8vIFRoZXJlIGlzIGEgc3VidGxlIGVkZ2UgY2FzZSBoZXJlIHdlJ3JlIGFjY2VwdGluZzpcbiAgICAgICAgLy8gIFN5bWJvbCBBIGhhcyB0ZXh0LWFsbG93LW92ZXJsYXA6IHRydWUsIGljb24tYWxsb3ctb3ZlcmxhcDogdHJ1ZSwgaWNvbi1vcHRpb25hbDogZmFsc2VcbiAgICAgICAgLy8gIEEncyBpY29uIGlzIG91dHNpZGUgdGhlIGdyaWQsIHNvIGRvZXNuJ3QgZ2V0IHBsYWNlZFxuICAgICAgICAvLyAgQSdzIHRleHQgd291bGQgYmUgaW5zaWRlIGdyaWQsIGJ1dCBkb2Vzbid0IGdldCBwbGFjZWQgYmVjYXVzZSBvZiBpY29uLW9wdGlvbmFsOiBmYWxzZVxuICAgICAgICAvLyAgV2Ugc3RpbGwgc2hvdyBBIGJlY2F1c2Ugb2YgdGhlIGFsbG93LW92ZXJsYXAgc2V0dGluZ3MuXG4gICAgICAgIC8vICBTeW1ib2wgQiBoYXMgYWxsb3ctb3ZlcmxhcDogZmFsc2UsIGFuZCBnZXRzIHBsYWNlZCB3aGVyZSBBJ3MgdGV4dCB3b3VsZCBiZVxuICAgICAgICAvLyAgT24gcGFubmluZyBpbiwgdGhlcmUgaXMgYSBzaG9ydCBwZXJpb2Qgd2hlbiBTeW1ib2wgQiBhbmQgU3ltYm9sIEEgd2lsbCBvdmVybGFwXG4gICAgICAgIC8vICBUaGlzIGlzIHRoZSByZXZlcnNlIG9mIG91ciBub3JtYWwgcG9saWN5IG9mIFwiZmFkZSBpbiBvbiBwYW5cIiwgYnV0IHNob3VsZCBsb29rIGxpa2UgYW55IG90aGVyXG4gICAgICAgIC8vICBjb2xsaXNpb24gYW5kIGhvcGVmdWxseSBub3QgYmUgdG9vIG5vdGljZWFibGUuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvNzE3MlxuICAgICAgICBjb25zdCBhbHdheXNTaG93VGV4dCA9IHRleHRBbGxvd092ZXJsYXAgJiYgKGljb25BbGxvd092ZXJsYXAgfHwgIWJ1Y2tldC5oYXNJY29uRGF0YSgpIHx8IGljb25PcHRpb25hbCk7XG4gICAgICAgIGNvbnN0IGFsd2F5c1Nob3dJY29uID0gaWNvbkFsbG93T3ZlcmxhcCAmJiAodGV4dEFsbG93T3ZlcmxhcCB8fCAhYnVja2V0Lmhhc1RleHREYXRhKCkgfHwgdGV4dE9wdGlvbmFsKTtcblxuICAgICAgICBpZiAoIWJ1Y2tldC5jb2xsaXNpb25BcnJheXMgJiYgY29sbGlzaW9uQm94QXJyYXkpIHtcbiAgICAgICAgICAgIGJ1Y2tldC5kZXNlcmlhbGl6ZUNvbGxpc2lvbkJveGVzKGNvbGxpc2lvbkJveEFycmF5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBsYWNlU3ltYm9sID0gKHN5bWJvbEluc3RhbmNlOiBTeW1ib2xJbnN0YW5jZSwgY29sbGlzaW9uQXJyYXlzOiBDb2xsaXNpb25BcnJheXMpID0+IHtcbiAgICAgICAgICAgIGlmIChzZWVuQ3Jvc3NUaWxlSURzW3N5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEXSkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKGhvbGRpbmdGb3JGYWRlKSB7XG4gICAgICAgICAgICAgICAgLy8gTWFyayBhbGwgc3ltYm9scyBmcm9tIHRoaXMgdGlsZSBhcyBcIm5vdCBwbGFjZWRcIiwgYnV0IGRvbid0IGFkZCB0byBzZWVuQ3Jvc3NUaWxlSURzLCBiZWNhdXNlIHdlIGRvbid0XG4gICAgICAgICAgICAgICAgLy8ga25vdyB5ZXQgaWYgd2UgaGF2ZSBhIGR1cGxpY2F0ZSBpbiBhIHBhcmVudCB0aWxlIHRoYXQgX3Nob3VsZF8gYmUgcGxhY2VkLlxuICAgICAgICAgICAgICAgIHRoaXMucGxhY2VtZW50c1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF0gPSBuZXcgSm9pbnRQbGFjZW1lbnQoZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgcGxhY2VUZXh0ID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgcGxhY2VJY29uID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgb2Zmc2NyZWVuID0gdHJ1ZTtcbiAgICAgICAgICAgIGxldCBzaGlmdCA9IG51bGw7XG5cbiAgICAgICAgICAgIGxldCBwbGFjZWQgPSB7Ym94OiBudWxsLCBvZmZzY3JlZW46IG51bGx9O1xuICAgICAgICAgICAgbGV0IHBsYWNlZFZlcnRpY2FsVGV4dCA9IHtib3g6IG51bGwsIG9mZnNjcmVlbjogbnVsbH07XG5cbiAgICAgICAgICAgIGxldCBwbGFjZWRHbHlwaEJveGVzID0gbnVsbDtcbiAgICAgICAgICAgIGxldCBwbGFjZWRHbHlwaENpcmNsZXMgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHBsYWNlZEljb25Cb3hlcyA9IG51bGw7XG4gICAgICAgICAgICBsZXQgdGV4dEZlYXR1cmVJbmRleCA9IDA7XG4gICAgICAgICAgICBsZXQgdmVydGljYWxUZXh0RmVhdHVyZUluZGV4ID0gMDtcbiAgICAgICAgICAgIGxldCBpY29uRmVhdHVyZUluZGV4ID0gMDtcblxuICAgICAgICAgICAgaWYgKGNvbGxpc2lvbkFycmF5cy50ZXh0RmVhdHVyZUluZGV4KSB7XG4gICAgICAgICAgICAgICAgdGV4dEZlYXR1cmVJbmRleCA9IGNvbGxpc2lvbkFycmF5cy50ZXh0RmVhdHVyZUluZGV4O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzeW1ib2xJbnN0YW5jZS51c2VSdW50aW1lQ29sbGlzaW9uQ2lyY2xlcykge1xuICAgICAgICAgICAgICAgIHRleHRGZWF0dXJlSW5kZXggPSBzeW1ib2xJbnN0YW5jZS5mZWF0dXJlSW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29sbGlzaW9uQXJyYXlzLnZlcnRpY2FsVGV4dEZlYXR1cmVJbmRleCkge1xuICAgICAgICAgICAgICAgIHZlcnRpY2FsVGV4dEZlYXR1cmVJbmRleCA9IGNvbGxpc2lvbkFycmF5cy52ZXJ0aWNhbFRleHRGZWF0dXJlSW5kZXg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHRleHRCb3ggPSBjb2xsaXNpb25BcnJheXMudGV4dEJveDtcbiAgICAgICAgICAgIGlmICh0ZXh0Qm94KSB7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVQcmV2aW91c09yaWVudGF0aW9uSWZOb3RQbGFjZWQgPSAoaXNQbGFjZWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByZXZpb3VzT3JpZW50YXRpb24gPSBXcml0aW5nTW9kZS5ob3Jpem9udGFsO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYnVja2V0LmFsbG93VmVydGljYWxQbGFjZW1lbnQgJiYgIWlzUGxhY2VkICYmIHRoaXMucHJldlBsYWNlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldlBsYWNlZE9yaWVudGF0aW9uID0gdGhpcy5wcmV2UGxhY2VtZW50LnBsYWNlZE9yaWVudGF0aW9uc1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldlBsYWNlZE9yaWVudGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wbGFjZWRPcmllbnRhdGlvbnNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdID0gcHJldlBsYWNlZE9yaWVudGF0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzT3JpZW50YXRpb24gPSBwcmV2UGxhY2VkT3JpZW50YXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXJrVXNlZE9yaWVudGF0aW9uKGJ1Y2tldCwgcHJldmlvdXNPcmllbnRhdGlvbiwgc3ltYm9sSW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c09yaWVudGF0aW9uO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwbGFjZVRleHRGb3JQbGFjZW1lbnRNb2RlcyA9IChwbGFjZUhvcml6b250YWxGbiwgcGxhY2VWZXJ0aWNhbEZuKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChidWNrZXQuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCAmJiBzeW1ib2xJbnN0YW5jZS5udW1WZXJ0aWNhbEdseXBoVmVydGljZXMgPiAwICYmIGNvbGxpc2lvbkFycmF5cy52ZXJ0aWNhbFRleHRCb3gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcGxhY2VtZW50TW9kZSBvZiBidWNrZXQud3JpdGluZ01vZGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBsYWNlbWVudE1vZGUgPT09IFdyaXRpbmdNb2RlLnZlcnRpY2FsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlZCA9IHBsYWNlVmVydGljYWxGbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWRWZXJ0aWNhbFRleHQgPSBwbGFjZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VkID0gcGxhY2VIb3Jpem9udGFsRm4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBsYWNlZCAmJiBwbGFjZWQuYm94ICYmIHBsYWNlZC5ib3gubGVuZ3RoKSBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlZCA9IHBsYWNlSG9yaXpvbnRhbEZuKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKCFsYXlvdXQuZ2V0KCd0ZXh0LXZhcmlhYmxlLWFuY2hvcicpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlQm94ID0gKGNvbGxpc2lvblRleHRCb3gsIG9yaWVudGF0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwbGFjZWRGZWF0dXJlID0gdGhpcy5jb2xsaXNpb25JbmRleC5wbGFjZUNvbGxpc2lvbkJveChjb2xsaXNpb25UZXh0Qm94LCB0ZXh0QWxsb3dPdmVybGFwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRQaXhlbFJhdGlvLCBwb3NNYXRyaXgsIGNvbGxpc2lvbkdyb3VwLnByZWRpY2F0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGxhY2VkRmVhdHVyZSAmJiBwbGFjZWRGZWF0dXJlLmJveCAmJiBwbGFjZWRGZWF0dXJlLmJveC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcmtVc2VkT3JpZW50YXRpb24oYnVja2V0LCBvcmllbnRhdGlvbiwgc3ltYm9sSW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGxhY2VkT3JpZW50YXRpb25zW3N5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEXSA9IG9yaWVudGF0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBsYWNlZEZlYXR1cmU7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGxhY2VIb3Jpem9udGFsID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBsYWNlQm94KHRleHRCb3gsIFdyaXRpbmdNb2RlLmhvcml6b250YWwpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlVmVydGljYWwgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZXJ0aWNhbFRleHRCb3ggPSBjb2xsaXNpb25BcnJheXMudmVydGljYWxUZXh0Qm94O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1Y2tldC5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50ICYmIHN5bWJvbEluc3RhbmNlLm51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcyA+IDAgJiYgdmVydGljYWxUZXh0Qm94KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBsYWNlQm94KHZlcnRpY2FsVGV4dEJveCwgV3JpdGluZ01vZGUudmVydGljYWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtib3g6IG51bGwsIG9mZnNjcmVlbjogbnVsbH07XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcGxhY2VUZXh0Rm9yUGxhY2VtZW50TW9kZXMocGxhY2VIb3Jpem9udGFsLCBwbGFjZVZlcnRpY2FsKTtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlUHJldmlvdXNPcmllbnRhdGlvbklmTm90UGxhY2VkKHBsYWNlZCAmJiBwbGFjZWQuYm94ICYmIHBsYWNlZC5ib3gubGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBhbmNob3JzID0gbGF5b3V0LmdldCgndGV4dC12YXJpYWJsZS1hbmNob3InKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIHN5bWJvbCB3YXMgaW4gdGhlIGxhc3QgcGxhY2VtZW50LCBzaGlmdCB0aGUgcHJldmlvdXNseSB1c2VkXG4gICAgICAgICAgICAgICAgICAgIC8vIGFuY2hvciB0byB0aGUgZnJvbnQgb2YgdGhlIGFuY2hvciBsaXN0LCBvbmx5IGlmIHRoZSBwcmV2aW91cyBhbmNob3JcbiAgICAgICAgICAgICAgICAgICAgLy8gaXMgc3RpbGwgaW4gdGhlIGFuY2hvciBsaXN0XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnByZXZQbGFjZW1lbnQgJiYgdGhpcy5wcmV2UGxhY2VtZW50LnZhcmlhYmxlT2Zmc2V0c1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZPZmZzZXRzID0gdGhpcy5wcmV2UGxhY2VtZW50LnZhcmlhYmxlT2Zmc2V0c1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYW5jaG9ycy5pbmRleE9mKHByZXZPZmZzZXRzLmFuY2hvcikgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9ycyA9IGFuY2hvcnMuZmlsdGVyKGFuY2hvciA9PiBhbmNob3IgIT09IHByZXZPZmZzZXRzLmFuY2hvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9ycy51bnNoaWZ0KHByZXZPZmZzZXRzLmFuY2hvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwbGFjZUJveEZvclZhcmlhYmxlQW5jaG9ycyA9IChjb2xsaXNpb25UZXh0Qm94LCBjb2xsaXNpb25JY29uQm94LCBvcmllbnRhdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBjb2xsaXNpb25UZXh0Qm94LngyIC0gY29sbGlzaW9uVGV4dEJveC54MTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IGNvbGxpc2lvblRleHRCb3gueTIgLSBjb2xsaXNpb25UZXh0Qm94LnkxO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dEJveFNjYWxlID0gc3ltYm9sSW5zdGFuY2UudGV4dEJveFNjYWxlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YXJpYWJsZUljb25Cb3ggPSBoYXNJY29uVGV4dEZpdCAmJiAhaWNvbkFsbG93T3ZlcmxhcCA/IGNvbGxpc2lvbkljb25Cb3ggOiBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGxhY2VkQm94OiA/eyBib3g6IEFycmF5PG51bWJlcj4sIG9mZnNjcmVlbjogYm9vbGVhbiB9ICA9IHtib3g6IFtdLCBvZmZzY3JlZW46IGZhbHNlfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlbWVudEF0dGVtcHRzID0gdGV4dEFsbG93T3ZlcmxhcCA/IGFuY2hvcnMubGVuZ3RoICogMiA6IGFuY2hvcnMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbGFjZW1lbnRBdHRlbXB0czsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYW5jaG9yID0gYW5jaG9yc1tpICUgYW5jaG9ycy5sZW5ndGhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFsbG93T3ZlcmxhcCA9IChpID49IGFuY2hvcnMubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmF0dGVtcHRBbmNob3JQbGFjZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvciwgY29sbGlzaW9uVGV4dEJveCwgd2lkdGgsIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEJveFNjYWxlLCByb3RhdGVXaXRoTWFwLCBwaXRjaFdpdGhNYXAsIHRleHRQaXhlbFJhdGlvLCBwb3NNYXRyaXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxpc2lvbkdyb3VwLCBhbGxvd092ZXJsYXAsIHN5bWJvbEluc3RhbmNlLCBidWNrZXQsIG9yaWVudGF0aW9uLCB2YXJpYWJsZUljb25Cb3gpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWRCb3ggPSByZXN1bHQucGxhY2VkR2x5cGhCb3hlcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBsYWNlZEJveCAmJiBwbGFjZWRCb3guYm94ICYmIHBsYWNlZEJveC5ib3gubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZVRleHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnQgPSByZXN1bHQuc2hpZnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBsYWNlZEJveDtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwbGFjZUhvcml6b250YWwgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGxhY2VCb3hGb3JWYXJpYWJsZUFuY2hvcnModGV4dEJveCwgY29sbGlzaW9uQXJyYXlzLmljb25Cb3gsIFdyaXRpbmdNb2RlLmhvcml6b250YWwpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlVmVydGljYWwgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZXJ0aWNhbFRleHRCb3ggPSBjb2xsaXNpb25BcnJheXMudmVydGljYWxUZXh0Qm94O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2FzUGxhY2VkID0gcGxhY2VkICYmIHBsYWNlZC5ib3ggJiYgcGxhY2VkLmJveC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVja2V0LmFsbG93VmVydGljYWxQbGFjZW1lbnQgJiYgIXdhc1BsYWNlZCAmJiBzeW1ib2xJbnN0YW5jZS5udW1WZXJ0aWNhbEdseXBoVmVydGljZXMgPiAwICYmIHZlcnRpY2FsVGV4dEJveCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwbGFjZUJveEZvclZhcmlhYmxlQW5jaG9ycyh2ZXJ0aWNhbFRleHRCb3gsIGNvbGxpc2lvbkFycmF5cy52ZXJ0aWNhbEljb25Cb3gsIFdyaXRpbmdNb2RlLnZlcnRpY2FsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7Ym94OiBudWxsLCBvZmZzY3JlZW46IG51bGx9O1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlVGV4dEZvclBsYWNlbWVudE1vZGVzKHBsYWNlSG9yaXpvbnRhbCwgcGxhY2VWZXJ0aWNhbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHBsYWNlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VUZXh0ID0gcGxhY2VkLmJveDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNjcmVlbiA9IHBsYWNlZC5vZmZzY3JlZW47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2T3JpZW50YXRpb24gPSB1cGRhdGVQcmV2aW91c09yaWVudGF0aW9uSWZOb3RQbGFjZWQocGxhY2VkICYmIHBsYWNlZC5ib3gpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGRpZG4ndCBnZXQgcGxhY2VkLCB3ZSBzdGlsbCBuZWVkIHRvIGNvcHkgb3VyIHBvc2l0aW9uIGZyb20gdGhlIGxhc3QgcGxhY2VtZW50IGZvclxuICAgICAgICAgICAgICAgICAgICAvLyBmYWRlIGFuaW1hdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwbGFjZVRleHQgJiYgdGhpcy5wcmV2UGxhY2VtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2T2Zmc2V0ID0gdGhpcy5wcmV2UGxhY2VtZW50LnZhcmlhYmxlT2Zmc2V0c1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldk9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFyaWFibGVPZmZzZXRzW3N5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEXSA9IHByZXZPZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXJrVXNlZEp1c3RpZmljYXRpb24oYnVja2V0LCBwcmV2T2Zmc2V0LmFuY2hvciwgc3ltYm9sSW5zdGFuY2UsIHByZXZPcmllbnRhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcGxhY2VkR2x5cGhCb3hlcyA9IHBsYWNlZDtcbiAgICAgICAgICAgIHBsYWNlVGV4dCA9IHBsYWNlZEdseXBoQm94ZXMgJiYgcGxhY2VkR2x5cGhCb3hlcy5ib3ggJiYgcGxhY2VkR2x5cGhCb3hlcy5ib3gubGVuZ3RoID4gMDtcblxuICAgICAgICAgICAgb2Zmc2NyZWVuID0gcGxhY2VkR2x5cGhCb3hlcyAmJiBwbGFjZWRHbHlwaEJveGVzLm9mZnNjcmVlbjtcblxuICAgICAgICAgICAgaWYgKHN5bWJvbEluc3RhbmNlLnVzZVJ1bnRpbWVDb2xsaXNpb25DaXJjbGVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGxhY2VkU3ltYm9sID0gYnVja2V0LnRleHQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KHN5bWJvbEluc3RhbmNlLmNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9udFNpemUgPSBzeW1ib2xTaXplLmV2YWx1YXRlU2l6ZUZvckZlYXR1cmUoYnVja2V0LnRleHRTaXplRGF0YSwgcGFydGlhbGx5RXZhbHVhdGVkVGV4dFNpemUsIHBsYWNlZFN5bWJvbCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0UGl4ZWxQYWRkaW5nID0gbGF5b3V0LmdldCgndGV4dC1wYWRkaW5nJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgY2lyY2xlUGl4ZWxEaWFtZXRlciA9IHN5bWJvbEluc3RhbmNlLmNvbGxpc2lvbkNpcmNsZURpYW1ldGVyO1xuXG4gICAgICAgICAgICAgICAgcGxhY2VkR2x5cGhDaXJjbGVzID0gdGhpcy5jb2xsaXNpb25JbmRleC5wbGFjZUNvbGxpc2lvbkNpcmNsZXModGV4dEFsbG93T3ZlcmxhcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlZFN5bWJvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldC5saW5lVmVydGV4QXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICBidWNrZXQuZ2x5cGhPZmZzZXRBcnJheSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zTWF0cml4LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dExhYmVsUGxhbmVNYXRyaXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbFRvU2NyZWVuTWF0cml4LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0NvbGxpc2lvbkJveGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGl0Y2hXaXRoTWFwLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sbGlzaW9uR3JvdXAucHJlZGljYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlUGl4ZWxEaWFtZXRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRQaXhlbFBhZGRpbmcpO1xuXG4gICAgICAgICAgICAgICAgYXNzZXJ0KCFwbGFjZWRHbHlwaENpcmNsZXMuY2lyY2xlcy5sZW5ndGggfHwgKCFwbGFjZWRHbHlwaENpcmNsZXMuY29sbGlzaW9uRGV0ZWN0ZWQgfHwgc2hvd0NvbGxpc2lvbkJveGVzKSk7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGV4dC1hbGxvdy1vdmVybGFwIGlzIHNldCwgZm9yY2UgXCJwbGFjZWRDaXJjbGVzXCIgdG8gdHJ1ZVxuICAgICAgICAgICAgICAgIC8vIEluIHRoZW9yeSB0aGVyZSBzaG91bGQgYWx3YXlzIGJlIGF0IGxlYXN0IG9uZSBjaXJjbGUgcGxhY2VkXG4gICAgICAgICAgICAgICAgLy8gaW4gdGhpcyBjYXNlLCBidXQgZm9yIG5vdyBxdWlya3MgaW4gdGV4dC1hbmNob3JcbiAgICAgICAgICAgICAgICAvLyBhbmQgdGV4dC1vZmZzZXQgbWF5IHByZXZlbnQgdGhhdCBmcm9tIGJlaW5nIHRydWUuXG4gICAgICAgICAgICAgICAgcGxhY2VUZXh0ID0gdGV4dEFsbG93T3ZlcmxhcCB8fCAocGxhY2VkR2x5cGhDaXJjbGVzLmNpcmNsZXMubGVuZ3RoID4gMCAmJiAhcGxhY2VkR2x5cGhDaXJjbGVzLmNvbGxpc2lvbkRldGVjdGVkKTtcbiAgICAgICAgICAgICAgICBvZmZzY3JlZW4gPSBvZmZzY3JlZW4gJiYgcGxhY2VkR2x5cGhDaXJjbGVzLm9mZnNjcmVlbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbGxpc2lvbkFycmF5cy5pY29uRmVhdHVyZUluZGV4KSB7XG4gICAgICAgICAgICAgICAgaWNvbkZlYXR1cmVJbmRleCA9IGNvbGxpc2lvbkFycmF5cy5pY29uRmVhdHVyZUluZGV4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29sbGlzaW9uQXJyYXlzLmljb25Cb3gpIHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlSWNvbkZlYXR1cmUgPSBpY29uQm94ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hpZnRlZEljb25Cb3ggPSBoYXNJY29uVGV4dEZpdCAmJiBzaGlmdCA/XG4gICAgICAgICAgICAgICAgICAgICAgICBzaGlmdFZhcmlhYmxlQ29sbGlzaW9uQm94KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25Cb3gsIHNoaWZ0LngsIHNoaWZ0LnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlV2l0aE1hcCwgcGl0Y2hXaXRoTWFwLCB0aGlzLnRyYW5zZm9ybS5hbmdsZSkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbkJveDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sbGlzaW9uSW5kZXgucGxhY2VDb2xsaXNpb25Cb3goc2hpZnRlZEljb25Cb3gsXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uQWxsb3dPdmVybGFwLCB0ZXh0UGl4ZWxSYXRpbywgcG9zTWF0cml4LCBjb2xsaXNpb25Hcm91cC5wcmVkaWNhdGUpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocGxhY2VkVmVydGljYWxUZXh0ICYmIHBsYWNlZFZlcnRpY2FsVGV4dC5ib3ggJiYgcGxhY2VkVmVydGljYWxUZXh0LmJveC5sZW5ndGggJiYgY29sbGlzaW9uQXJyYXlzLnZlcnRpY2FsSWNvbkJveCkge1xuICAgICAgICAgICAgICAgICAgICBwbGFjZWRJY29uQm94ZXMgPSBwbGFjZUljb25GZWF0dXJlKGNvbGxpc2lvbkFycmF5cy52ZXJ0aWNhbEljb25Cb3gpO1xuICAgICAgICAgICAgICAgICAgICBwbGFjZUljb24gPSBwbGFjZWRJY29uQm94ZXMuYm94Lmxlbmd0aCA+IDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGxhY2VkSWNvbkJveGVzID0gcGxhY2VJY29uRmVhdHVyZShjb2xsaXNpb25BcnJheXMuaWNvbkJveCk7XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlSWNvbiA9IHBsYWNlZEljb25Cb3hlcy5ib3gubGVuZ3RoID4gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb2Zmc2NyZWVuID0gb2Zmc2NyZWVuICYmIHBsYWNlZEljb25Cb3hlcy5vZmZzY3JlZW47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGljb25XaXRob3V0VGV4dCA9IHRleHRPcHRpb25hbCB8fFxuICAgICAgICAgICAgICAgIChzeW1ib2xJbnN0YW5jZS5udW1Ib3Jpem9udGFsR2x5cGhWZXJ0aWNlcyA9PT0gMCAmJiBzeW1ib2xJbnN0YW5jZS5udW1WZXJ0aWNhbEdseXBoVmVydGljZXMgPT09IDApO1xuICAgICAgICAgICAgY29uc3QgdGV4dFdpdGhvdXRJY29uID0gaWNvbk9wdGlvbmFsIHx8IHN5bWJvbEluc3RhbmNlLm51bUljb25WZXJ0aWNlcyA9PT0gMDtcblxuICAgICAgICAgICAgLy8gQ29tYmluZSB0aGUgc2NhbGVzIGZvciBpY29ucyBhbmQgdGV4dC5cbiAgICAgICAgICAgIGlmICghaWNvbldpdGhvdXRUZXh0ICYmICF0ZXh0V2l0aG91dEljb24pIHtcbiAgICAgICAgICAgICAgICBwbGFjZUljb24gPSBwbGFjZVRleHQgPSBwbGFjZUljb24gJiYgcGxhY2VUZXh0O1xuICAgICAgICAgICAgfSBlbHNlIGlmICghdGV4dFdpdGhvdXRJY29uKSB7XG4gICAgICAgICAgICAgICAgcGxhY2VUZXh0ID0gcGxhY2VJY29uICYmIHBsYWNlVGV4dDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWljb25XaXRob3V0VGV4dCkge1xuICAgICAgICAgICAgICAgIHBsYWNlSWNvbiA9IHBsYWNlSWNvbiAmJiBwbGFjZVRleHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwbGFjZVRleHQgJiYgcGxhY2VkR2x5cGhCb3hlcyAmJiBwbGFjZWRHbHlwaEJveGVzLmJveCkge1xuICAgICAgICAgICAgICAgIGlmIChwbGFjZWRWZXJ0aWNhbFRleHQgJiYgcGxhY2VkVmVydGljYWxUZXh0LmJveCAmJiB2ZXJ0aWNhbFRleHRGZWF0dXJlSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2xsaXNpb25JbmRleC5pbnNlcnRDb2xsaXNpb25Cb3gocGxhY2VkR2x5cGhCb3hlcy5ib3gsIGxheW91dC5nZXQoJ3RleHQtaWdub3JlLXBsYWNlbWVudCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYnVja2V0LmJ1Y2tldEluc3RhbmNlSWQsIHZlcnRpY2FsVGV4dEZlYXR1cmVJbmRleCwgY29sbGlzaW9uR3JvdXAuSUQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29sbGlzaW9uSW5kZXguaW5zZXJ0Q29sbGlzaW9uQm94KHBsYWNlZEdseXBoQm94ZXMuYm94LCBsYXlvdXQuZ2V0KCd0ZXh0LWlnbm9yZS1wbGFjZW1lbnQnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldC5idWNrZXRJbnN0YW5jZUlkLCB0ZXh0RmVhdHVyZUluZGV4LCBjb2xsaXNpb25Hcm91cC5JRCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGxhY2VJY29uICYmIHBsYWNlZEljb25Cb3hlcykge1xuICAgICAgICAgICAgICAgIHRoaXMuY29sbGlzaW9uSW5kZXguaW5zZXJ0Q29sbGlzaW9uQm94KHBsYWNlZEljb25Cb3hlcy5ib3gsIGxheW91dC5nZXQoJ2ljb24taWdub3JlLXBsYWNlbWVudCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYnVja2V0LmJ1Y2tldEluc3RhbmNlSWQsIGljb25GZWF0dXJlSW5kZXgsIGNvbGxpc2lvbkdyb3VwLklEKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwbGFjZWRHbHlwaENpcmNsZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAocGxhY2VUZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29sbGlzaW9uSW5kZXguaW5zZXJ0Q29sbGlzaW9uQ2lyY2xlcyhwbGFjZWRHbHlwaENpcmNsZXMuY2lyY2xlcywgbGF5b3V0LmdldCgndGV4dC1pZ25vcmUtcGxhY2VtZW50JyksXG4gICAgICAgICAgICAgICAgICAgICAgICBidWNrZXQuYnVja2V0SW5zdGFuY2VJZCwgdGV4dEZlYXR1cmVJbmRleCwgY29sbGlzaW9uR3JvdXAuSUQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzaG93Q29sbGlzaW9uQm94ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWQgPSBidWNrZXQuYnVja2V0SW5zdGFuY2VJZDtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNpcmNsZUFycmF5ID0gdGhpcy5jb2xsaXNpb25DaXJjbGVBcnJheXNbaWRdO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIEdyb3VwIGNvbGxpc2lvbiBjaXJjbGVzIHRvZ2V0aGVyIGJ5IGJ1Y2tldC4gQ2lyY2xlcyBjYW4ndCBiZSBwdXNoZWQgZm9yd2FyZCBmb3IgcmVuZGVyaW5nIHlldCBhcyB0aGUgc3ltYm9sIHBsYWNlbWVudFxuICAgICAgICAgICAgICAgICAgICAvLyBmb3IgYSBidWNrZXQgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgY29tcGxldGUgYmVmb3JlIHRoZSBjb21taXQtZnVuY3Rpb24gaGFzIGJlZW4gY2FsbGVkXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaXJjbGVBcnJheSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlQXJyYXkgPSB0aGlzLmNvbGxpc2lvbkNpcmNsZUFycmF5c1tpZF0gPSBuZXcgQ29sbGlzaW9uQ2lyY2xlQXJyYXkoKTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBsYWNlZEdseXBoQ2lyY2xlcy5jaXJjbGVzLmxlbmd0aDsgaSArPSA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaXJjbGVBcnJheS5jaXJjbGVzLnB1c2gocGxhY2VkR2x5cGhDaXJjbGVzLmNpcmNsZXNbaSArIDBdKTsgICAgICAgICAgICAgIC8vIHhcbiAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZUFycmF5LmNpcmNsZXMucHVzaChwbGFjZWRHbHlwaENpcmNsZXMuY2lyY2xlc1tpICsgMV0pOyAgICAgICAgICAgICAgLy8geVxuICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlQXJyYXkuY2lyY2xlcy5wdXNoKHBsYWNlZEdseXBoQ2lyY2xlcy5jaXJjbGVzW2kgKyAyXSk7ICAgICAgICAgICAgICAvLyByYWRpdXNcbiAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZUFycmF5LmNpcmNsZXMucHVzaChwbGFjZWRHbHlwaENpcmNsZXMuY29sbGlzaW9uRGV0ZWN0ZWQgPyAxIDogMCk7ICAgLy8gY29sbGlzaW9uRGV0ZWN0ZWQtZmxhZ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3NlcnQoc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSUQgIT09IDApO1xuICAgICAgICAgICAgYXNzZXJ0KGJ1Y2tldC5idWNrZXRJbnN0YW5jZUlkICE9PSAwKTtcblxuICAgICAgICAgICAgdGhpcy5wbGFjZW1lbnRzW3N5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEXSA9IG5ldyBKb2ludFBsYWNlbWVudChwbGFjZVRleHQgfHwgYWx3YXlzU2hvd1RleHQsIHBsYWNlSWNvbiB8fCBhbHdheXNTaG93SWNvbiwgb2Zmc2NyZWVuIHx8IGJ1Y2tldC5qdXN0UmVsb2FkZWQpO1xuICAgICAgICAgICAgc2VlbkNyb3NzVGlsZUlEc1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF0gPSB0cnVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh6T3JkZXJCeVZpZXdwb3J0WSkge1xuICAgICAgICAgICAgYXNzZXJ0KGJ1Y2tldFBhcnQuc3ltYm9sSW5zdGFuY2VTdGFydCA9PT0gMCk7XG4gICAgICAgICAgICBjb25zdCBzeW1ib2xJbmRleGVzID0gYnVja2V0LmdldFNvcnRlZFN5bWJvbEluZGV4ZXModGhpcy50cmFuc2Zvcm0uYW5nbGUpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHN5bWJvbEluZGV4ZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzeW1ib2xJbmRleCA9IHN5bWJvbEluZGV4ZXNbaV07XG4gICAgICAgICAgICAgICAgcGxhY2VTeW1ib2woYnVja2V0LnN5bWJvbEluc3RhbmNlcy5nZXQoc3ltYm9sSW5kZXgpLCBidWNrZXQuY29sbGlzaW9uQXJyYXlzW3N5bWJvbEluZGV4XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gYnVja2V0UGFydC5zeW1ib2xJbnN0YW5jZVN0YXJ0OyBpIDwgYnVja2V0UGFydC5zeW1ib2xJbnN0YW5jZUVuZDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcGxhY2VTeW1ib2woYnVja2V0LnN5bWJvbEluc3RhbmNlcy5nZXQoaSksIGJ1Y2tldC5jb2xsaXNpb25BcnJheXNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3dDb2xsaXNpb25Cb3hlcyAmJiBidWNrZXQuYnVja2V0SW5zdGFuY2VJZCBpbiB0aGlzLmNvbGxpc2lvbkNpcmNsZUFycmF5cykge1xuICAgICAgICAgICAgY29uc3QgY2lyY2xlQXJyYXkgPSB0aGlzLmNvbGxpc2lvbkNpcmNsZUFycmF5c1tidWNrZXQuYnVja2V0SW5zdGFuY2VJZF07XG5cbiAgICAgICAgICAgIC8vIFN0b3JlIHZpZXdwb3J0IGFuZCBpbnZlcnNlIHByb2plY3Rpb24gbWF0cmljZXMgcGVyIGJ1Y2tldFxuICAgICAgICAgICAgbWF0NC5pbnZlcnQoY2lyY2xlQXJyYXkuaW52UHJvak1hdHJpeCwgcG9zTWF0cml4KTtcbiAgICAgICAgICAgIGNpcmNsZUFycmF5LnZpZXdwb3J0TWF0cml4ID0gdGhpcy5jb2xsaXNpb25JbmRleC5nZXRWaWV3cG9ydE1hdHJpeCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnVja2V0Lmp1c3RSZWxvYWRlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIG1hcmtVc2VkSnVzdGlmaWNhdGlvbihidWNrZXQ6IFN5bWJvbEJ1Y2tldCwgcGxhY2VkQW5jaG9yOiBUZXh0QW5jaG9yLCBzeW1ib2xJbnN0YW5jZTogU3ltYm9sSW5zdGFuY2UsIG9yaWVudGF0aW9uOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QganVzdGlmaWNhdGlvbnMgPSB7XG4gICAgICAgICAgICBcImxlZnRcIjogc3ltYm9sSW5zdGFuY2UubGVmdEp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxcbiAgICAgICAgICAgIFwiY2VudGVyXCI6IHN5bWJvbEluc3RhbmNlLmNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxcbiAgICAgICAgICAgIFwicmlnaHRcIjogc3ltYm9sSW5zdGFuY2UucmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXhcbiAgICAgICAgfTtcblxuICAgICAgICBsZXQgYXV0b0luZGV4O1xuICAgICAgICBpZiAob3JpZW50YXRpb24gPT09IFdyaXRpbmdNb2RlLnZlcnRpY2FsKSB7XG4gICAgICAgICAgICBhdXRvSW5kZXggPSBzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGF1dG9JbmRleCA9IGp1c3RpZmljYXRpb25zW2dldEFuY2hvckp1c3RpZmljYXRpb24ocGxhY2VkQW5jaG9yKV07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbmRleGVzID0gW1xuICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UubGVmdEp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxcbiAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLmNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxcbiAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLnJpZ2h0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LFxuICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UudmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXhcbiAgICAgICAgXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGluZGV4IG9mIGluZGV4ZXMpIHtcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKGF1dG9JbmRleCA+PSAwICYmIGluZGV4ICE9PSBhdXRvSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlcmUgYXJlIG11bHRpcGxlIGp1c3RpZmljYXRpb25zIGFuZCB0aGlzIG9uZSBpc24ndCBpdDogc2hpZnQgb2Zmc2NyZWVuXG4gICAgICAgICAgICAgICAgICAgIGJ1Y2tldC50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldChpbmRleCkuY3Jvc3NUaWxlSUQgPSAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEVpdGhlciB0aGlzIGlzIHRoZSBjaG9zZW4ganVzdGlmaWNhdGlvbiBvciB0aGUganVzdGlmaWNhdGlvbiBpcyBoYXJkd2lyZWQ6IHVzZSB0aGlzIG9uZVxuICAgICAgICAgICAgICAgICAgICBidWNrZXQudGV4dC5wbGFjZWRTeW1ib2xBcnJheS5nZXQoaW5kZXgpLmNyb3NzVGlsZUlEID0gc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbWFya1VzZWRPcmllbnRhdGlvbihidWNrZXQ6IFN5bWJvbEJ1Y2tldCwgb3JpZW50YXRpb246IG51bWJlciwgc3ltYm9sSW5zdGFuY2U6IFN5bWJvbEluc3RhbmNlKSB7XG4gICAgICAgIGNvbnN0IGhvcml6b250YWwgPSAob3JpZW50YXRpb24gPT09IFdyaXRpbmdNb2RlLmhvcml6b250YWwgfHwgb3JpZW50YXRpb24gPT09IFdyaXRpbmdNb2RlLmhvcml6b250YWxPbmx5KSA/IG9yaWVudGF0aW9uIDogMDtcbiAgICAgICAgY29uc3QgdmVydGljYWwgPSBvcmllbnRhdGlvbiA9PT0gV3JpdGluZ01vZGUudmVydGljYWwgPyBvcmllbnRhdGlvbiA6IDA7XG5cbiAgICAgICAgY29uc3QgaG9yaXpvbnRhbEluZGV4ZXMgPSBbXG4gICAgICAgICAgICBzeW1ib2xJbnN0YW5jZS5sZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LFxuICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UuY2VudGVySnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LFxuICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UucmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXhcbiAgICAgICAgXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGluZGV4IG9mIGhvcml6b250YWxJbmRleGVzKSB7XG4gICAgICAgICAgICBidWNrZXQudGV4dC5wbGFjZWRTeW1ib2xBcnJheS5nZXQoaW5kZXgpLnBsYWNlZE9yaWVudGF0aW9uID0gaG9yaXpvbnRhbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleCkge1xuICAgICAgICAgICAgYnVja2V0LnRleHQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4KS5wbGFjZWRPcmllbnRhdGlvbiA9IHZlcnRpY2FsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29tbWl0KG5vdzogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29tbWl0VGltZSA9IG5vdztcbiAgICAgICAgdGhpcy56b29tQXRMYXN0UmVjZW5jeUNoZWNrID0gdGhpcy50cmFuc2Zvcm0uem9vbTtcblxuICAgICAgICBjb25zdCBwcmV2UGxhY2VtZW50ID0gdGhpcy5wcmV2UGxhY2VtZW50O1xuICAgICAgICBsZXQgcGxhY2VtZW50Q2hhbmdlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMucHJldlpvb21BZGp1c3RtZW50ID0gcHJldlBsYWNlbWVudCA/IHByZXZQbGFjZW1lbnQuem9vbUFkanVzdG1lbnQodGhpcy50cmFuc2Zvcm0uem9vbSkgOiAwO1xuICAgICAgICBjb25zdCBpbmNyZW1lbnQgPSBwcmV2UGxhY2VtZW50ID8gcHJldlBsYWNlbWVudC5zeW1ib2xGYWRlQ2hhbmdlKG5vdykgOiAxO1xuXG4gICAgICAgIGNvbnN0IHByZXZPcGFjaXRpZXMgPSBwcmV2UGxhY2VtZW50ID8gcHJldlBsYWNlbWVudC5vcGFjaXRpZXMgOiB7fTtcbiAgICAgICAgY29uc3QgcHJldk9mZnNldHMgPSBwcmV2UGxhY2VtZW50ID8gcHJldlBsYWNlbWVudC52YXJpYWJsZU9mZnNldHMgOiB7fTtcbiAgICAgICAgY29uc3QgcHJldk9yaWVudGF0aW9ucyA9IHByZXZQbGFjZW1lbnQgPyBwcmV2UGxhY2VtZW50LnBsYWNlZE9yaWVudGF0aW9ucyA6IHt9O1xuXG4gICAgICAgIC8vIGFkZCB0aGUgb3BhY2l0aWVzIGZyb20gdGhlIGN1cnJlbnQgcGxhY2VtZW50LCBhbmQgY29weSB0aGVpciBjdXJyZW50IHZhbHVlcyBmcm9tIHRoZSBwcmV2aW91cyBwbGFjZW1lbnRcbiAgICAgICAgZm9yIChjb25zdCBjcm9zc1RpbGVJRCBpbiB0aGlzLnBsYWNlbWVudHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGpvaW50UGxhY2VtZW50ID0gdGhpcy5wbGFjZW1lbnRzW2Nyb3NzVGlsZUlEXTtcbiAgICAgICAgICAgIGNvbnN0IHByZXZPcGFjaXR5ID0gcHJldk9wYWNpdGllc1tjcm9zc1RpbGVJRF07XG4gICAgICAgICAgICBpZiAocHJldk9wYWNpdHkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wYWNpdGllc1tjcm9zc1RpbGVJRF0gPSBuZXcgSm9pbnRPcGFjaXR5U3RhdGUocHJldk9wYWNpdHksIGluY3JlbWVudCwgam9pbnRQbGFjZW1lbnQudGV4dCwgam9pbnRQbGFjZW1lbnQuaWNvbik7XG4gICAgICAgICAgICAgICAgcGxhY2VtZW50Q2hhbmdlZCA9IHBsYWNlbWVudENoYW5nZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgam9pbnRQbGFjZW1lbnQudGV4dCAhPT0gcHJldk9wYWNpdHkudGV4dC5wbGFjZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgam9pbnRQbGFjZW1lbnQuaWNvbiAhPT0gcHJldk9wYWNpdHkuaWNvbi5wbGFjZWQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMub3BhY2l0aWVzW2Nyb3NzVGlsZUlEXSA9IG5ldyBKb2ludE9wYWNpdHlTdGF0ZShudWxsLCBpbmNyZW1lbnQsIGpvaW50UGxhY2VtZW50LnRleHQsIGpvaW50UGxhY2VtZW50Lmljb24sIGpvaW50UGxhY2VtZW50LnNraXBGYWRlKTtcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnRDaGFuZ2VkID0gcGxhY2VtZW50Q2hhbmdlZCB8fCBqb2ludFBsYWNlbWVudC50ZXh0IHx8IGpvaW50UGxhY2VtZW50Lmljb247XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjb3B5IGFuZCB1cGRhdGUgdmFsdWVzIGZyb20gdGhlIHByZXZpb3VzIHBsYWNlbWVudCB0aGF0IGFyZW4ndCBpbiB0aGUgY3VycmVudCBwbGFjZW1lbnQgYnV0IGhhdmVuJ3QgZmluaXNoZWQgZmFkaW5nXG4gICAgICAgIGZvciAoY29uc3QgY3Jvc3NUaWxlSUQgaW4gcHJldk9wYWNpdGllcykge1xuICAgICAgICAgICAgY29uc3QgcHJldk9wYWNpdHkgPSBwcmV2T3BhY2l0aWVzW2Nyb3NzVGlsZUlEXTtcbiAgICAgICAgICAgIGlmICghdGhpcy5vcGFjaXRpZXNbY3Jvc3NUaWxlSURdKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgam9pbnRPcGFjaXR5ID0gbmV3IEpvaW50T3BhY2l0eVN0YXRlKHByZXZPcGFjaXR5LCBpbmNyZW1lbnQsIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFqb2ludE9wYWNpdHkuaXNIaWRkZW4oKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wYWNpdGllc1tjcm9zc1RpbGVJRF0gPSBqb2ludE9wYWNpdHk7XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudENoYW5nZWQgPSBwbGFjZW1lbnRDaGFuZ2VkIHx8IHByZXZPcGFjaXR5LnRleHQucGxhY2VkIHx8IHByZXZPcGFjaXR5Lmljb24ucGxhY2VkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGNyb3NzVGlsZUlEIGluIHByZXZPZmZzZXRzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMudmFyaWFibGVPZmZzZXRzW2Nyb3NzVGlsZUlEXSAmJiB0aGlzLm9wYWNpdGllc1tjcm9zc1RpbGVJRF0gJiYgIXRoaXMub3BhY2l0aWVzW2Nyb3NzVGlsZUlEXS5pc0hpZGRlbigpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YXJpYWJsZU9mZnNldHNbY3Jvc3NUaWxlSURdID0gcHJldk9mZnNldHNbY3Jvc3NUaWxlSURdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBjcm9zc1RpbGVJRCBpbiBwcmV2T3JpZW50YXRpb25zKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucGxhY2VkT3JpZW50YXRpb25zW2Nyb3NzVGlsZUlEXSAmJiB0aGlzLm9wYWNpdGllc1tjcm9zc1RpbGVJRF0gJiYgIXRoaXMub3BhY2l0aWVzW2Nyb3NzVGlsZUlEXS5pc0hpZGRlbigpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wbGFjZWRPcmllbnRhdGlvbnNbY3Jvc3NUaWxlSURdID0gcHJldk9yaWVudGF0aW9uc1tjcm9zc1RpbGVJRF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0aGlzLmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lIGlzIHRoZSB0aW1lIG9mIHRoZSBsYXN0IGNvbW1pdCgpIHRoYXRcbiAgICAgICAgLy8gcmVzdWx0ZWQgaW4gYSBwbGFjZW1lbnQgY2hhbmdlIC0tIGluIG90aGVyIHdvcmRzLCB0aGUgc3RhcnQgdGltZSBvZlxuICAgICAgICAvLyB0aGUgbGFzdCBzeW1ib2wgZmFkZSBhbmltYXRpb25cbiAgICAgICAgYXNzZXJ0KCFwcmV2UGxhY2VtZW50IHx8IHByZXZQbGFjZW1lbnQubGFzdFBsYWNlbWVudENoYW5nZVRpbWUgIT09IHVuZGVmaW5lZCk7XG4gICAgICAgIGlmIChwbGFjZW1lbnRDaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lID0gbm93O1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgdGhpcy5sYXN0UGxhY2VtZW50Q2hhbmdlVGltZSA9IHByZXZQbGFjZW1lbnQgPyBwcmV2UGxhY2VtZW50Lmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lIDogbm93O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlTGF5ZXJPcGFjaXRpZXMoc3R5bGVMYXllcjogU3R5bGVMYXllciwgdGlsZXM6IEFycmF5PFRpbGU+KSB7XG4gICAgICAgIGNvbnN0IHNlZW5Dcm9zc1RpbGVJRHMgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCB0aWxlIG9mIHRpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCBzeW1ib2xCdWNrZXQgPSAoKHRpbGUuZ2V0QnVja2V0KHN0eWxlTGF5ZXIpOiBhbnkpOiBTeW1ib2xCdWNrZXQpO1xuICAgICAgICAgICAgaWYgKHN5bWJvbEJ1Y2tldCAmJiB0aWxlLmxhdGVzdEZlYXR1cmVJbmRleCAmJiBzdHlsZUxheWVyLmlkID09PSBzeW1ib2xCdWNrZXQubGF5ZXJJZHNbMF0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUJ1Y2tldE9wYWNpdGllcyhzeW1ib2xCdWNrZXQsIHNlZW5Dcm9zc1RpbGVJRHMsIHRpbGUuY29sbGlzaW9uQm94QXJyYXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlQnVja2V0T3BhY2l0aWVzKGJ1Y2tldDogU3ltYm9sQnVja2V0LCBzZWVuQ3Jvc3NUaWxlSURzOiB7IFtzdHJpbmcgfCBudW1iZXJdOiBib29sZWFuIH0sIGNvbGxpc2lvbkJveEFycmF5OiA/Q29sbGlzaW9uQm94QXJyYXkpIHtcbiAgICAgICAgaWYgKGJ1Y2tldC5oYXNUZXh0RGF0YSgpKSBidWNrZXQudGV4dC5vcGFjaXR5VmVydGV4QXJyYXkuY2xlYXIoKTtcbiAgICAgICAgaWYgKGJ1Y2tldC5oYXNJY29uRGF0YSgpKSBidWNrZXQuaWNvbi5vcGFjaXR5VmVydGV4QXJyYXkuY2xlYXIoKTtcbiAgICAgICAgaWYgKGJ1Y2tldC5oYXNJY29uQ29sbGlzaW9uQm94RGF0YSgpKSBidWNrZXQuaWNvbkNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheS5jbGVhcigpO1xuICAgICAgICBpZiAoYnVja2V0Lmhhc1RleHRDb2xsaXNpb25Cb3hEYXRhKCkpIGJ1Y2tldC50ZXh0Q29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5LmNsZWFyKCk7XG5cbiAgICAgICAgY29uc3QgbGF5b3V0ID0gYnVja2V0LmxheWVyc1swXS5sYXlvdXQ7XG4gICAgICAgIGNvbnN0IGR1cGxpY2F0ZU9wYWNpdHlTdGF0ZSA9IG5ldyBKb2ludE9wYWNpdHlTdGF0ZShudWxsLCAwLCBmYWxzZSwgZmFsc2UsIHRydWUpO1xuICAgICAgICBjb25zdCB0ZXh0QWxsb3dPdmVybGFwID0gbGF5b3V0LmdldCgndGV4dC1hbGxvdy1vdmVybGFwJyk7XG4gICAgICAgIGNvbnN0IGljb25BbGxvd092ZXJsYXAgPSBsYXlvdXQuZ2V0KCdpY29uLWFsbG93LW92ZXJsYXAnKTtcbiAgICAgICAgY29uc3QgdmFyaWFibGVQbGFjZW1lbnQgPSBsYXlvdXQuZ2V0KCd0ZXh0LXZhcmlhYmxlLWFuY2hvcicpO1xuICAgICAgICBjb25zdCByb3RhdGVXaXRoTWFwID0gbGF5b3V0LmdldCgndGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQnKSA9PT0gJ21hcCc7XG4gICAgICAgIGNvbnN0IHBpdGNoV2l0aE1hcCA9IGxheW91dC5nZXQoJ3RleHQtcGl0Y2gtYWxpZ25tZW50JykgPT09ICdtYXAnO1xuICAgICAgICBjb25zdCBoYXNJY29uVGV4dEZpdCA9IGxheW91dC5nZXQoJ2ljb24tdGV4dC1maXQnKSAhPT0gJ25vbmUnO1xuICAgICAgICAvLyBJZiBhbGxvdy1vdmVybGFwIGlzIHRydWUsIHdlIGNhbiBzaG93IHN5bWJvbHMgYmVmb3JlIHBsYWNlbWVudCBydW5zIG9uIHRoZW1cbiAgICAgICAgLy8gQnV0IHdlIGhhdmUgdG8gd2FpdCBmb3IgcGxhY2VtZW50IGlmIHdlIHBvdGVudGlhbGx5IGRlcGVuZCBvbiBhIHBhaXJlZCBpY29uL3RleHRcbiAgICAgICAgLy8gd2l0aCBhbGxvdy1vdmVybGFwOiBmYWxzZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy83MDMyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRPcGFjaXR5U3RhdGUgPSBuZXcgSm9pbnRPcGFjaXR5U3RhdGUobnVsbCwgMCxcbiAgICAgICAgICAgICAgICB0ZXh0QWxsb3dPdmVybGFwICYmIChpY29uQWxsb3dPdmVybGFwIHx8ICFidWNrZXQuaGFzSWNvbkRhdGEoKSB8fCBsYXlvdXQuZ2V0KCdpY29uLW9wdGlvbmFsJykpLFxuICAgICAgICAgICAgICAgIGljb25BbGxvd092ZXJsYXAgJiYgKHRleHRBbGxvd092ZXJsYXAgfHwgIWJ1Y2tldC5oYXNUZXh0RGF0YSgpIHx8IGxheW91dC5nZXQoJ3RleHQtb3B0aW9uYWwnKSksXG4gICAgICAgICAgICAgICAgdHJ1ZSk7XG5cbiAgICAgICAgaWYgKCFidWNrZXQuY29sbGlzaW9uQXJyYXlzICYmIGNvbGxpc2lvbkJveEFycmF5ICYmICgoYnVja2V0Lmhhc0ljb25Db2xsaXNpb25Cb3hEYXRhKCkgfHwgYnVja2V0Lmhhc1RleHRDb2xsaXNpb25Cb3hEYXRhKCkpKSkge1xuICAgICAgICAgICAgYnVja2V0LmRlc2VyaWFsaXplQ29sbGlzaW9uQm94ZXMoY29sbGlzaW9uQm94QXJyYXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWRkT3BhY2l0aWVzID0gKGljb25PclRleHQsIG51bVZlcnRpY2VzOiBudW1iZXIsIG9wYWNpdHk6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1WZXJ0aWNlcyAvIDQ7IGkrKykge1xuICAgICAgICAgICAgICAgIGljb25PclRleHQub3BhY2l0eVZlcnRleEFycmF5LmVtcGxhY2VCYWNrKG9wYWNpdHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgYnVja2V0LnN5bWJvbEluc3RhbmNlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgY29uc3Qgc3ltYm9sSW5zdGFuY2UgPSBidWNrZXQuc3ltYm9sSW5zdGFuY2VzLmdldChzKTtcbiAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICBudW1Ib3Jpem9udGFsR2x5cGhWZXJ0aWNlcyxcbiAgICAgICAgICAgICAgICBudW1WZXJ0aWNhbEdseXBoVmVydGljZXMsXG4gICAgICAgICAgICAgICAgY3Jvc3NUaWxlSURcbiAgICAgICAgICAgIH0gPSBzeW1ib2xJbnN0YW5jZTtcblxuICAgICAgICAgICAgY29uc3QgaXNEdXBsaWNhdGUgPSBzZWVuQ3Jvc3NUaWxlSURzW2Nyb3NzVGlsZUlEXTtcblxuICAgICAgICAgICAgbGV0IG9wYWNpdHlTdGF0ZSA9IHRoaXMub3BhY2l0aWVzW2Nyb3NzVGlsZUlEXTtcbiAgICAgICAgICAgIGlmIChpc0R1cGxpY2F0ZSkge1xuICAgICAgICAgICAgICAgIG9wYWNpdHlTdGF0ZSA9IGR1cGxpY2F0ZU9wYWNpdHlTdGF0ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIW9wYWNpdHlTdGF0ZSkge1xuICAgICAgICAgICAgICAgIG9wYWNpdHlTdGF0ZSA9IGRlZmF1bHRPcGFjaXR5U3RhdGU7XG4gICAgICAgICAgICAgICAgLy8gc3RvcmUgdGhlIHN0YXRlIHNvIHRoYXQgZnV0dXJlIHBsYWNlbWVudHMgdXNlIGl0IGFzIGEgc3RhcnRpbmcgcG9pbnRcbiAgICAgICAgICAgICAgICB0aGlzLm9wYWNpdGllc1tjcm9zc1RpbGVJRF0gPSBvcGFjaXR5U3RhdGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNlZW5Dcm9zc1RpbGVJRHNbY3Jvc3NUaWxlSURdID0gdHJ1ZTtcblxuICAgICAgICAgICAgY29uc3QgaGFzVGV4dCA9IG51bUhvcml6b250YWxHbHlwaFZlcnRpY2VzID4gMCB8fCBudW1WZXJ0aWNhbEdseXBoVmVydGljZXMgPiAwO1xuICAgICAgICAgICAgY29uc3QgaGFzSWNvbiA9IHN5bWJvbEluc3RhbmNlLm51bUljb25WZXJ0aWNlcyA+IDA7XG5cbiAgICAgICAgICAgIGNvbnN0IHBsYWNlZE9yaWVudGF0aW9uID0gdGhpcy5wbGFjZWRPcmllbnRhdGlvbnNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdO1xuICAgICAgICAgICAgY29uc3QgaG9yaXpvbnRhbEhpZGRlbiA9IHBsYWNlZE9yaWVudGF0aW9uID09PSBXcml0aW5nTW9kZS52ZXJ0aWNhbDtcbiAgICAgICAgICAgIGNvbnN0IHZlcnRpY2FsSGlkZGVuID0gcGxhY2VkT3JpZW50YXRpb24gPT09IFdyaXRpbmdNb2RlLmhvcml6b250YWwgfHwgcGxhY2VkT3JpZW50YXRpb24gPT09IFdyaXRpbmdNb2RlLmhvcml6b250YWxPbmx5O1xuXG4gICAgICAgICAgICBpZiAoaGFzVGV4dCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhY2tlZE9wYWNpdHkgPSBwYWNrT3BhY2l0eShvcGFjaXR5U3RhdGUudGV4dCk7XG4gICAgICAgICAgICAgICAgLy8gVmVydGljYWwgdGV4dCBmYWRlcyBpbi9vdXQgb24gY29sbGlzaW9uIHRoZSBzYW1lIHdheSBhcyBjb3JyZXNwb25kaW5nXG4gICAgICAgICAgICAgICAgLy8gaG9yaXpvbnRhbCB0ZXh0LiBTd2l0Y2ggYmV0d2VlbiB2ZXJ0aWNhbC9ob3Jpem9udGFsIHNob3VsZCBiZSBpbnN0YW50YW5lb3VzXG4gICAgICAgICAgICAgICAgY29uc3QgaG9yaXpvbnRhbE9wYWNpdHkgPSBob3Jpem9udGFsSGlkZGVuID8gUEFDS0VEX0hJRERFTl9PUEFDSVRZIDogcGFja2VkT3BhY2l0eTtcbiAgICAgICAgICAgICAgICBhZGRPcGFjaXRpZXMoYnVja2V0LnRleHQsIG51bUhvcml6b250YWxHbHlwaFZlcnRpY2VzLCBob3Jpem9udGFsT3BhY2l0eSk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmVydGljYWxPcGFjaXR5ID0gdmVydGljYWxIaWRkZW4gPyBQQUNLRURfSElEREVOX09QQUNJVFkgOiBwYWNrZWRPcGFjaXR5O1xuICAgICAgICAgICAgICAgIGFkZE9wYWNpdGllcyhidWNrZXQudGV4dCwgbnVtVmVydGljYWxHbHlwaFZlcnRpY2VzLCB2ZXJ0aWNhbE9wYWNpdHkpO1xuXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBsYWJlbCBpcyBjb21wbGV0ZWx5IGZhZGVkLCBtYXJrIGl0IHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBjYWxjdWxhdGVcbiAgICAgICAgICAgICAgICAvLyBpdHMgcG9zaXRpb24gYXQgcmVuZGVyIHRpbWUuIElmIHRoaXMgbGF5ZXIgaGFzIHZhcmlhYmxlIHBsYWNlbWVudCwgc2hpZnQgdGhlIHZhcmlvdXNcbiAgICAgICAgICAgICAgICAvLyBzeW1ib2wgaW5zdGFuY2VzIGFwcHJvcHJpYXRlbHkgc28gdGhhdCBzeW1ib2xzIGZyb20gYnVja2V0cyB0aGF0IGhhdmUgeWV0IHRvIGJlIHBsYWNlZFxuICAgICAgICAgICAgICAgIC8vIG9mZnNldCBhcHByb3ByaWF0ZWx5LlxuICAgICAgICAgICAgICAgIGNvbnN0IHN5bWJvbEhpZGRlbiA9IG9wYWNpdHlTdGF0ZS50ZXh0LmlzSGlkZGVuKCk7XG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBzeW1ib2xJbnN0YW5jZS5yaWdodEp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UuY2VudGVySnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LFxuICAgICAgICAgICAgICAgICAgICBzeW1ib2xJbnN0YW5jZS5sZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4XG4gICAgICAgICAgICAgICAgXS5mb3JFYWNoKGluZGV4ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldC50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldChpbmRleCkuaGlkZGVuID0gc3ltYm9sSGlkZGVuIHx8IGhvcml6b250YWxIaWRkZW4gPyAxIDogMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYnVja2V0LnRleHQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4KS5oaWRkZW4gPSBzeW1ib2xIaWRkZW4gfHwgdmVydGljYWxIaWRkZW4gPyAxIDogMDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2T2Zmc2V0ID0gdGhpcy52YXJpYWJsZU9mZnNldHNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdO1xuICAgICAgICAgICAgICAgIGlmIChwcmV2T2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFya1VzZWRKdXN0aWZpY2F0aW9uKGJ1Y2tldCwgcHJldk9mZnNldC5hbmNob3IsIHN5bWJvbEluc3RhbmNlLCBwbGFjZWRPcmllbnRhdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgcHJldk9yaWVudGF0aW9uID0gdGhpcy5wbGFjZWRPcmllbnRhdGlvbnNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdO1xuICAgICAgICAgICAgICAgIGlmIChwcmV2T3JpZW50YXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXJrVXNlZEp1c3RpZmljYXRpb24oYnVja2V0LCAnbGVmdCcsIHN5bWJvbEluc3RhbmNlLCBwcmV2T3JpZW50YXRpb24pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcmtVc2VkT3JpZW50YXRpb24oYnVja2V0LCBwcmV2T3JpZW50YXRpb24sIHN5bWJvbEluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChoYXNJY29uKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFja2VkT3BhY2l0eSA9IHBhY2tPcGFjaXR5KG9wYWNpdHlTdGF0ZS5pY29uKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHVzZUhvcml6b250YWwgPSAhKGhhc0ljb25UZXh0Rml0ICYmIHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsUGxhY2VkSWNvblN5bWJvbEluZGV4ICYmIGhvcml6b250YWxIaWRkZW4pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHN5bWJvbEluc3RhbmNlLnBsYWNlZEljb25TeW1ib2xJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhvcml6b250YWxPcGFjaXR5ID0gdXNlSG9yaXpvbnRhbCA/IHBhY2tlZE9wYWNpdHkgOiBQQUNLRURfSElEREVOX09QQUNJVFk7XG4gICAgICAgICAgICAgICAgICAgIGFkZE9wYWNpdGllcyhidWNrZXQuaWNvbiwgc3ltYm9sSW5zdGFuY2UubnVtSWNvblZlcnRpY2VzLCBob3Jpem9udGFsT3BhY2l0eSk7XG4gICAgICAgICAgICAgICAgICAgIGJ1Y2tldC5pY29uLnBsYWNlZFN5bWJvbEFycmF5LmdldChzeW1ib2xJbnN0YW5jZS5wbGFjZWRJY29uU3ltYm9sSW5kZXgpLmhpZGRlbiA9XG4gICAgICAgICAgICAgICAgICAgICAgICAob3BhY2l0eVN0YXRlLmljb24uaXNIaWRkZW4oKTogYW55KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc3ltYm9sSW5zdGFuY2UudmVydGljYWxQbGFjZWRJY29uU3ltYm9sSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZXJ0aWNhbE9wYWNpdHkgPSAhdXNlSG9yaXpvbnRhbCA/IHBhY2tlZE9wYWNpdHkgOiBQQUNLRURfSElEREVOX09QQUNJVFk7XG4gICAgICAgICAgICAgICAgICAgIGFkZE9wYWNpdGllcyhidWNrZXQuaWNvbiwgc3ltYm9sSW5zdGFuY2UubnVtVmVydGljYWxJY29uVmVydGljZXMsIHZlcnRpY2FsT3BhY2l0eSk7XG4gICAgICAgICAgICAgICAgICAgIGJ1Y2tldC5pY29uLnBsYWNlZFN5bWJvbEFycmF5LmdldChzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbFBsYWNlZEljb25TeW1ib2xJbmRleCkuaGlkZGVuID1cbiAgICAgICAgICAgICAgICAgICAgICAgIChvcGFjaXR5U3RhdGUuaWNvbi5pc0hpZGRlbigpOiBhbnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGJ1Y2tldC5oYXNJY29uQ29sbGlzaW9uQm94RGF0YSgpIHx8IGJ1Y2tldC5oYXNUZXh0Q29sbGlzaW9uQm94RGF0YSgpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sbGlzaW9uQXJyYXlzID0gYnVja2V0LmNvbGxpc2lvbkFycmF5c1tzXTtcbiAgICAgICAgICAgICAgICBpZiAoY29sbGlzaW9uQXJyYXlzKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBzaGlmdCA9IG5ldyBQb2ludCgwLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbGxpc2lvbkFycmF5cy50ZXh0Qm94IHx8IGNvbGxpc2lvbkFycmF5cy52ZXJ0aWNhbFRleHRCb3gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZVBsYWNlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhcmlhYmxlT2Zmc2V0ID0gdGhpcy52YXJpYWJsZU9mZnNldHNbY3Jvc3NUaWxlSURdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZU9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHdpbGwgc2hvdyBlaXRoZXIgdGhlIGN1cnJlbnRseSBwbGFjZWQgcG9zaXRpb24gb3IgdGhlIGxhc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3VjY2Vzc2Z1bGx5IHBsYWNlZCBwb3NpdGlvbiAoc28geW91IGNhbiB2aXN1YWxpemUgd2hhdCBjb2xsaXNpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8ganVzdCBtYWRlIHRoZSBzeW1ib2wgZGlzYXBwZWFyLCBhbmQgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIGZvciB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3ltYm9sIHRvIGNvbWUgYmFjaylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnQgPSBjYWxjdWxhdGVWYXJpYWJsZUxheW91dFNoaWZ0KHZhcmlhYmxlT2Zmc2V0LmFuY2hvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVPZmZzZXQud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlT2Zmc2V0LmhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVPZmZzZXQudGV4dE9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVPZmZzZXQudGV4dEJveFNjYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvdGF0ZVdpdGhNYXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0Ll9yb3RhdGUocGl0Y2hXaXRoTWFwID8gdGhpcy50cmFuc2Zvcm0uYW5nbGUgOiAtdGhpcy50cmFuc2Zvcm0uYW5nbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm8gb2Zmc2V0IC0+IHRoaXMgc3ltYm9sIGhhc24ndCBiZWVuIHBsYWNlZCBzaW5jZSBjb21pbmcgb24tc2NyZWVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIHNpbmdsZSBib3ggaXMgcGFydGljdWxhcmx5IG1lYW5pbmdmdWwgYW5kIGFsbCBvZiB0aGVtIHdvdWxkIGJlIHRvbyBub2lzeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2UgdGhlIGNlbnRlciBib3gganVzdCB0byBzaG93IHNvbWV0aGluZydzIHRoZXJlLCBidXQgbWFyayBpdCBcIm5vdCB1c2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbGxpc2lvbkFycmF5cy50ZXh0Qm94KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQ29sbGlzaW9uVmVydGljZXMoYnVja2V0LnRleHRDb2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QXJyYXksIG9wYWNpdHlTdGF0ZS50ZXh0LnBsYWNlZCwgIXVzZWQgfHwgaG9yaXpvbnRhbEhpZGRlbiwgc2hpZnQueCwgc2hpZnQueSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29sbGlzaW9uQXJyYXlzLnZlcnRpY2FsVGV4dEJveCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNvbGxpc2lvblZlcnRpY2VzKGJ1Y2tldC50ZXh0Q29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5LCBvcGFjaXR5U3RhdGUudGV4dC5wbGFjZWQsICF1c2VkIHx8IHZlcnRpY2FsSGlkZGVuLCBzaGlmdC54LCBzaGlmdC55KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlcnRpY2FsSWNvblVzZWQgPSBCb29sZWFuKCF2ZXJ0aWNhbEhpZGRlbiAmJiBjb2xsaXNpb25BcnJheXMudmVydGljYWxJY29uQm94KTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY29sbGlzaW9uQXJyYXlzLmljb25Cb3gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNvbGxpc2lvblZlcnRpY2VzKGJ1Y2tldC5pY29uQ29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5LCBvcGFjaXR5U3RhdGUuaWNvbi5wbGFjZWQsIHZlcnRpY2FsSWNvblVzZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzSWNvblRleHRGaXQgPyBzaGlmdC54IDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNJY29uVGV4dEZpdCA/IHNoaWZ0LnkgOiAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2xsaXNpb25BcnJheXMudmVydGljYWxJY29uQm94KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVDb2xsaXNpb25WZXJ0aWNlcyhidWNrZXQuaWNvbkNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheSwgb3BhY2l0eVN0YXRlLmljb24ucGxhY2VkLCAhdmVydGljYWxJY29uVXNlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNJY29uVGV4dEZpdCA/IHNoaWZ0LnggOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0ljb25UZXh0Rml0ID8gc2hpZnQueSA6IDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnVja2V0LnNvcnRGZWF0dXJlcyh0aGlzLnRyYW5zZm9ybS5hbmdsZSk7XG4gICAgICAgIGlmICh0aGlzLnJldGFpbmVkUXVlcnlEYXRhW2J1Y2tldC5idWNrZXRJbnN0YW5jZUlkXSkge1xuICAgICAgICAgICAgdGhpcy5yZXRhaW5lZFF1ZXJ5RGF0YVtidWNrZXQuYnVja2V0SW5zdGFuY2VJZF0uZmVhdHVyZVNvcnRPcmRlciA9IGJ1Y2tldC5mZWF0dXJlU29ydE9yZGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJ1Y2tldC5oYXNUZXh0RGF0YSgpICYmIGJ1Y2tldC50ZXh0Lm9wYWNpdHlWZXJ0ZXhCdWZmZXIpIHtcbiAgICAgICAgICAgIGJ1Y2tldC50ZXh0Lm9wYWNpdHlWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShidWNrZXQudGV4dC5vcGFjaXR5VmVydGV4QXJyYXkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChidWNrZXQuaGFzSWNvbkRhdGEoKSAmJiBidWNrZXQuaWNvbi5vcGFjaXR5VmVydGV4QnVmZmVyKSB7XG4gICAgICAgICAgICBidWNrZXQuaWNvbi5vcGFjaXR5VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoYnVja2V0Lmljb24ub3BhY2l0eVZlcnRleEFycmF5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYnVja2V0Lmhhc0ljb25Db2xsaXNpb25Cb3hEYXRhKCkgJiYgYnVja2V0Lmljb25Db2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QnVmZmVyKSB7XG4gICAgICAgICAgICBidWNrZXQuaWNvbkNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShidWNrZXQuaWNvbkNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJ1Y2tldC5oYXNUZXh0Q29sbGlzaW9uQm94RGF0YSgpICYmIGJ1Y2tldC50ZXh0Q29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEJ1ZmZlcikge1xuICAgICAgICAgICAgYnVja2V0LnRleHRDb2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoYnVja2V0LnRleHRDb2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QXJyYXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXNzZXJ0KGJ1Y2tldC50ZXh0Lm9wYWNpdHlWZXJ0ZXhBcnJheS5sZW5ndGggPT09IGJ1Y2tldC50ZXh0LmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCAvIDQpO1xuICAgICAgICBhc3NlcnQoYnVja2V0Lmljb24ub3BhY2l0eVZlcnRleEFycmF5Lmxlbmd0aCA9PT0gYnVja2V0Lmljb24ubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoIC8gNCk7XG5cbiAgICAgICAgLy8gUHVzaCBnZW5lcmF0ZWQgY29sbGlzaW9uIGNpcmNsZXMgdG8gdGhlIGJ1Y2tldCBmb3IgZGVidWcgcmVuZGVyaW5nXG4gICAgICAgIGlmIChidWNrZXQuYnVja2V0SW5zdGFuY2VJZCBpbiB0aGlzLmNvbGxpc2lvbkNpcmNsZUFycmF5cykge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmNvbGxpc2lvbkNpcmNsZUFycmF5c1tidWNrZXQuYnVja2V0SW5zdGFuY2VJZF07XG5cbiAgICAgICAgICAgIGJ1Y2tldC5wbGFjZW1lbnRJbnZQcm9qTWF0cml4ID0gaW5zdGFuY2UuaW52UHJvak1hdHJpeDtcbiAgICAgICAgICAgIGJ1Y2tldC5wbGFjZW1lbnRWaWV3cG9ydE1hdHJpeCA9IGluc3RhbmNlLnZpZXdwb3J0TWF0cml4O1xuICAgICAgICAgICAgYnVja2V0LmNvbGxpc2lvbkNpcmNsZUFycmF5ID0gaW5zdGFuY2UuY2lyY2xlcztcblxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuY29sbGlzaW9uQ2lyY2xlQXJyYXlzW2J1Y2tldC5idWNrZXRJbnN0YW5jZUlkXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN5bWJvbEZhZGVDaGFuZ2Uobm93OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmFkZUR1cmF0aW9uID09PSAwID9cbiAgICAgICAgICAgIDEgOlxuICAgICAgICAgICAgKChub3cgLSB0aGlzLmNvbW1pdFRpbWUpIC8gdGhpcy5mYWRlRHVyYXRpb24gKyB0aGlzLnByZXZab29tQWRqdXN0bWVudCk7XG4gICAgfVxuXG4gICAgem9vbUFkanVzdG1lbnQoem9vbTogbnVtYmVyKSB7XG4gICAgICAgIC8vIFdoZW4gem9vbWluZyBvdXQgcXVpY2tseSwgbGFiZWxzIGNhbiBvdmVybGFwIGVhY2ggb3RoZXIuIFRoaXNcbiAgICAgICAgLy8gYWRqdXN0bWVudCBpcyB1c2VkIHRvIHJlZHVjZSB0aGUgaW50ZXJ2YWwgYmV0d2VlbiBwbGFjZW1lbnQgY2FsY3VsYXRpb25zXG4gICAgICAgIC8vIGFuZCB0byByZWR1Y2UgdGhlIGZhZGUgZHVyYXRpb24gd2hlbiB6b29taW5nIG91dCBxdWlja2x5LiBEaXNjb3ZlcmluZyB0aGVcbiAgICAgICAgLy8gY29sbGlzaW9ucyBtb3JlIHF1aWNrbHkgYW5kIGZhZGluZyB0aGVtIG1vcmUgcXVpY2tseSByZWR1Y2VzIHRoZSB1bndhbnRlZCBlZmZlY3QuXG4gICAgICAgIHJldHVybiBNYXRoLm1heCgwLCAodGhpcy50cmFuc2Zvcm0uem9vbSAtIHpvb20pIC8gMS41KTtcbiAgICB9XG5cbiAgICBoYXNUcmFuc2l0aW9ucyhub3c6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGFsZSB8fFxuICAgICAgICAgICAgbm93IC0gdGhpcy5sYXN0UGxhY2VtZW50Q2hhbmdlVGltZSA8IHRoaXMuZmFkZUR1cmF0aW9uO1xuICAgIH1cblxuICAgIHN0aWxsUmVjZW50KG5vdzogbnVtYmVyLCB6b29tOiBudW1iZXIpIHtcbiAgICAgICAgLy8gVGhlIGFkanVzdG1lbnQgbWFrZXMgcGxhY2VtZW50IG1vcmUgZnJlcXVlbnQgd2hlbiB6b29taW5nLlxuICAgICAgICAvLyBUaGlzIGNvbmRpdGlvbiBhcHBsaWVzIHRoZSBhZGp1c3RtZW50IG9ubHkgYWZ0ZXIgdGhlIG1hcCBoYXNcbiAgICAgICAgLy8gc3RvcHBlZCB6b29taW5nLiBUaGlzIGF2b2lkcyBhZGRpbmcgZXh0cmEgamFuayB3aGlsZSB6b29taW5nLlxuICAgICAgICBjb25zdCBkdXJhdGlvbkFkanVzdG1lbnQgPSB0aGlzLnpvb21BdExhc3RSZWNlbmN5Q2hlY2sgPT09IHpvb20gP1xuICAgICAgICAgICAgKDEgLSB0aGlzLnpvb21BZGp1c3RtZW50KHpvb20pKSA6XG4gICAgICAgICAgICAxO1xuICAgICAgICB0aGlzLnpvb21BdExhc3RSZWNlbmN5Q2hlY2sgPSB6b29tO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmNvbW1pdFRpbWUgKyB0aGlzLmZhZGVEdXJhdGlvbiAqIGR1cmF0aW9uQWRqdXN0bWVudCA+IG5vdztcbiAgICB9XG5cbiAgICBzZXRTdGFsZSgpIHtcbiAgICAgICAgdGhpcy5zdGFsZSA9IHRydWU7XG4gICAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVDb2xsaXNpb25WZXJ0aWNlcyhjb2xsaXNpb25WZXJ0ZXhBcnJheTogQ29sbGlzaW9uVmVydGV4QXJyYXksIHBsYWNlZDogYm9vbGVhbiwgbm90VXNlZDogYm9vbGVhbiB8IG51bWJlciwgc2hpZnRYPzogbnVtYmVyLCBzaGlmdFk/OiBudW1iZXIpIHtcbiAgICBjb2xsaXNpb25WZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhwbGFjZWQgPyAxIDogMCwgbm90VXNlZCA/IDEgOiAwLCBzaGlmdFggfHwgMCwgc2hpZnRZIHx8IDApO1xuICAgIGNvbGxpc2lvblZlcnRleEFycmF5LmVtcGxhY2VCYWNrKHBsYWNlZCA/IDEgOiAwLCBub3RVc2VkID8gMSA6IDAsIHNoaWZ0WCB8fCAwLCBzaGlmdFkgfHwgMCk7XG4gICAgY29sbGlzaW9uVmVydGV4QXJyYXkuZW1wbGFjZUJhY2socGxhY2VkID8gMSA6IDAsIG5vdFVzZWQgPyAxIDogMCwgc2hpZnRYIHx8IDAsIHNoaWZ0WSB8fCAwKTtcbiAgICBjb2xsaXNpb25WZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhwbGFjZWQgPyAxIDogMCwgbm90VXNlZCA/IDEgOiAwLCBzaGlmdFggfHwgMCwgc2hpZnRZIHx8IDApO1xufVxuXG4vLyBBbGwgZm91ciB2ZXJ0aWNlcyBmb3IgYSBnbHlwaCB3aWxsIGhhdmUgdGhlIHNhbWUgb3BhY2l0eSBzdGF0ZVxuLy8gU28gd2UgcGFjayB0aGUgb3BhY2l0eSBpbnRvIGEgdWludDgsIGFuZCB0aGVuIHJlcGVhdCBpdCBmb3VyIHRpbWVzXG4vLyB0byBtYWtlIGEgc2luZ2xlIHVpbnQzMiB0aGF0IHdlIGNhbiB1cGxvYWQgZm9yIGVhY2ggZ2x5cGggaW4gdGhlXG4vLyBsYWJlbC5cbmNvbnN0IHNoaWZ0MjUgPSBNYXRoLnBvdygyLCAyNSk7XG5jb25zdCBzaGlmdDI0ID0gTWF0aC5wb3coMiwgMjQpO1xuY29uc3Qgc2hpZnQxNyA9IE1hdGgucG93KDIsIDE3KTtcbmNvbnN0IHNoaWZ0MTYgPSBNYXRoLnBvdygyLCAxNik7XG5jb25zdCBzaGlmdDkgPSBNYXRoLnBvdygyLCA5KTtcbmNvbnN0IHNoaWZ0OCA9IE1hdGgucG93KDIsIDgpO1xuY29uc3Qgc2hpZnQxID0gTWF0aC5wb3coMiwgMSk7XG5mdW5jdGlvbiBwYWNrT3BhY2l0eShvcGFjaXR5U3RhdGU6IE9wYWNpdHlTdGF0ZSk6IG51bWJlciB7XG4gICAgaWYgKG9wYWNpdHlTdGF0ZS5vcGFjaXR5ID09PSAwICYmICFvcGFjaXR5U3RhdGUucGxhY2VkKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH0gZWxzZSBpZiAob3BhY2l0eVN0YXRlLm9wYWNpdHkgPT09IDEgJiYgb3BhY2l0eVN0YXRlLnBsYWNlZCkge1xuICAgICAgICByZXR1cm4gNDI5NDk2NzI5NTtcbiAgICB9XG4gICAgY29uc3QgdGFyZ2V0Qml0ID0gb3BhY2l0eVN0YXRlLnBsYWNlZCA/IDEgOiAwO1xuICAgIGNvbnN0IG9wYWNpdHlCaXRzID0gTWF0aC5mbG9vcihvcGFjaXR5U3RhdGUub3BhY2l0eSAqIDEyNyk7XG4gICAgcmV0dXJuIG9wYWNpdHlCaXRzICogc2hpZnQyNSArIHRhcmdldEJpdCAqIHNoaWZ0MjQgK1xuICAgICAgICBvcGFjaXR5Qml0cyAqIHNoaWZ0MTcgKyB0YXJnZXRCaXQgKiBzaGlmdDE2ICtcbiAgICAgICAgb3BhY2l0eUJpdHMgKiBzaGlmdDkgKyB0YXJnZXRCaXQgKiBzaGlmdDggK1xuICAgICAgICBvcGFjaXR5Qml0cyAqIHNoaWZ0MSArIHRhcmdldEJpdDtcbn1cblxuY29uc3QgUEFDS0VEX0hJRERFTl9PUEFDSVRZID0gMDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBicm93c2VyIGZyb20gJy4uL3V0aWwvYnJvd3Nlcic7XG5cbmltcG9ydCB7UGxhY2VtZW50fSBmcm9tICcuLi9zeW1ib2wvcGxhY2VtZW50JztcblxuaW1wb3J0IHR5cGUgVHJhbnNmb3JtIGZyb20gJy4uL2dlby90cmFuc2Zvcm0nO1xuaW1wb3J0IHR5cGUgU3R5bGVMYXllciBmcm9tICcuL3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIFN5bWJvbFN0eWxlTGF5ZXIgZnJvbSAnLi9zdHlsZV9sYXllci9zeW1ib2xfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgVGlsZSBmcm9tICcuLi9zb3VyY2UvdGlsZSc7XG5pbXBvcnQgdHlwZSB7QnVja2V0UGFydH0gZnJvbSAnLi4vc3ltYm9sL3BsYWNlbWVudCc7XG5cbmNsYXNzIExheWVyUGxhY2VtZW50IHtcbiAgICBfc29ydEFjcm9zc1RpbGVzOiBib29sZWFuO1xuICAgIF9jdXJyZW50VGlsZUluZGV4OiBudW1iZXI7XG4gICAgX2N1cnJlbnRQYXJ0SW5kZXg6IG51bWJlcjtcbiAgICBfc2VlbkNyb3NzVGlsZUlEczogeyBbc3RyaW5nIHwgbnVtYmVyXTogYm9vbGVhbiB9O1xuICAgIF9idWNrZXRQYXJ0czogQXJyYXk8QnVja2V0UGFydD47XG5cbiAgICBjb25zdHJ1Y3RvcihzdHlsZUxheWVyOiBTeW1ib2xTdHlsZUxheWVyKSB7XG4gICAgICAgIHRoaXMuX3NvcnRBY3Jvc3NUaWxlcyA9IHN0eWxlTGF5ZXIubGF5b3V0LmdldCgnc3ltYm9sLXotb3JkZXInKSAhPT0gJ3ZpZXdwb3J0LXknICYmXG4gICAgICAgICAgICBzdHlsZUxheWVyLmxheW91dC5nZXQoJ3N5bWJvbC1zb3J0LWtleScpLmNvbnN0YW50T3IoMSkgIT09IHVuZGVmaW5lZDtcblxuICAgICAgICB0aGlzLl9jdXJyZW50VGlsZUluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5fY3VycmVudFBhcnRJbmRleCA9IDA7XG4gICAgICAgIHRoaXMuX3NlZW5Dcm9zc1RpbGVJRHMgPSB7fTtcbiAgICAgICAgdGhpcy5fYnVja2V0UGFydHMgPSBbXTtcbiAgICB9XG5cbiAgICBjb250aW51ZVBsYWNlbWVudCh0aWxlczogQXJyYXk8VGlsZT4sIHBsYWNlbWVudDogUGxhY2VtZW50LCBzaG93Q29sbGlzaW9uQm94ZXM6IGJvb2xlYW4sIHN0eWxlTGF5ZXI6IFN0eWxlTGF5ZXIsIHNob3VsZFBhdXNlUGxhY2VtZW50OiAoKSA9PiBib29sZWFuKSB7XG5cbiAgICAgICAgY29uc3QgYnVja2V0UGFydHMgPSB0aGlzLl9idWNrZXRQYXJ0cztcblxuICAgICAgICB3aGlsZSAodGhpcy5fY3VycmVudFRpbGVJbmRleCA8IHRpbGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgdGlsZSA9IHRpbGVzW3RoaXMuX2N1cnJlbnRUaWxlSW5kZXhdO1xuICAgICAgICAgICAgcGxhY2VtZW50LmdldEJ1Y2tldFBhcnRzKGJ1Y2tldFBhcnRzLCBzdHlsZUxheWVyLCB0aWxlLCB0aGlzLl9zb3J0QWNyb3NzVGlsZXMpO1xuXG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50VGlsZUluZGV4Kys7XG4gICAgICAgICAgICBpZiAoc2hvdWxkUGF1c2VQbGFjZW1lbnQoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX3NvcnRBY3Jvc3NUaWxlcykge1xuICAgICAgICAgICAgdGhpcy5fc29ydEFjcm9zc1RpbGVzID0gZmFsc2U7XG4gICAgICAgICAgICBidWNrZXRQYXJ0cy5zb3J0KChhLCBiKSA9PiAoKGEuc29ydEtleTogYW55KTogbnVtYmVyKSAtICgoYi5zb3J0S2V5OiBhbnkpOiBudW1iZXIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlICh0aGlzLl9jdXJyZW50UGFydEluZGV4IDwgYnVja2V0UGFydHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBidWNrZXRQYXJ0ID0gYnVja2V0UGFydHNbdGhpcy5fY3VycmVudFBhcnRJbmRleF07XG4gICAgICAgICAgICBwbGFjZW1lbnQucGxhY2VMYXllckJ1Y2tldFBhcnQoYnVja2V0UGFydCwgdGhpcy5fc2VlbkNyb3NzVGlsZUlEcywgc2hvd0NvbGxpc2lvbkJveGVzKTtcblxuICAgICAgICAgICAgdGhpcy5fY3VycmVudFBhcnRJbmRleCsrO1xuICAgICAgICAgICAgaWYgKHNob3VsZFBhdXNlUGxhY2VtZW50KCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5jbGFzcyBQYXVzZWFibGVQbGFjZW1lbnQge1xuICAgIHBsYWNlbWVudDogUGxhY2VtZW50O1xuICAgIF9kb25lOiBib29sZWFuO1xuICAgIF9jdXJyZW50UGxhY2VtZW50SW5kZXg6IG51bWJlcjtcbiAgICBfZm9yY2VGdWxsUGxhY2VtZW50OiBib29sZWFuO1xuICAgIF9zaG93Q29sbGlzaW9uQm94ZXM6IGJvb2xlYW47XG4gICAgX2luUHJvZ3Jlc3NMYXllcjogP0xheWVyUGxhY2VtZW50O1xuXG4gICAgY29uc3RydWN0b3IodHJhbnNmb3JtOiBUcmFuc2Zvcm0sIG9yZGVyOiBBcnJheTxzdHJpbmc+LFxuICAgICAgICAgICAgICAgIGZvcmNlRnVsbFBsYWNlbWVudDogYm9vbGVhbixcbiAgICAgICAgICAgICAgICBzaG93Q29sbGlzaW9uQm94ZXM6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgZmFkZUR1cmF0aW9uOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgY3Jvc3NTb3VyY2VDb2xsaXNpb25zOiBib29sZWFuLFxuICAgICAgICAgICAgICAgIHByZXZQbGFjZW1lbnQ/OiBQbGFjZW1lbnQpIHtcblxuICAgICAgICB0aGlzLnBsYWNlbWVudCA9IG5ldyBQbGFjZW1lbnQodHJhbnNmb3JtLCBmYWRlRHVyYXRpb24sIGNyb3NzU291cmNlQ29sbGlzaW9ucywgcHJldlBsYWNlbWVudCk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRQbGFjZW1lbnRJbmRleCA9IG9yZGVyLmxlbmd0aCAtIDE7XG4gICAgICAgIHRoaXMuX2ZvcmNlRnVsbFBsYWNlbWVudCA9IGZvcmNlRnVsbFBsYWNlbWVudDtcbiAgICAgICAgdGhpcy5fc2hvd0NvbGxpc2lvbkJveGVzID0gc2hvd0NvbGxpc2lvbkJveGVzO1xuICAgICAgICB0aGlzLl9kb25lID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaXNEb25lKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZG9uZTtcbiAgICB9XG5cbiAgICBjb250aW51ZVBsYWNlbWVudChvcmRlcjogQXJyYXk8c3RyaW5nPiwgbGF5ZXJzOiB7W186IHN0cmluZ106IFN0eWxlTGF5ZXJ9LCBsYXllclRpbGVzOiB7W186IHN0cmluZ106IEFycmF5PFRpbGU+fSkge1xuICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBicm93c2VyLm5vdygpO1xuXG4gICAgICAgIGNvbnN0IHNob3VsZFBhdXNlUGxhY2VtZW50ID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWxhcHNlZFRpbWUgPSBicm93c2VyLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvcmNlRnVsbFBsYWNlbWVudCA/IGZhbHNlIDogZWxhcHNlZFRpbWUgPiAyO1xuICAgICAgICB9O1xuXG4gICAgICAgIHdoaWxlICh0aGlzLl9jdXJyZW50UGxhY2VtZW50SW5kZXggPj0gMCkge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXJJZCA9IG9yZGVyW3RoaXMuX2N1cnJlbnRQbGFjZW1lbnRJbmRleF07XG4gICAgICAgICAgICBjb25zdCBsYXllciA9IGxheWVyc1tsYXllcklkXTtcbiAgICAgICAgICAgIGNvbnN0IHBsYWNlbWVudFpvb20gPSB0aGlzLnBsYWNlbWVudC5jb2xsaXNpb25JbmRleC50cmFuc2Zvcm0uem9vbTtcbiAgICAgICAgICAgIGlmIChsYXllci50eXBlID09PSAnc3ltYm9sJyAmJlxuICAgICAgICAgICAgICAgICghbGF5ZXIubWluem9vbSB8fCBsYXllci5taW56b29tIDw9IHBsYWNlbWVudFpvb20pICYmXG4gICAgICAgICAgICAgICAgKCFsYXllci5tYXh6b29tIHx8IGxheWVyLm1heHpvb20gPiBwbGFjZW1lbnRab29tKSkge1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9pblByb2dyZXNzTGF5ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5Qcm9ncmVzc0xheWVyID0gbmV3IExheWVyUGxhY2VtZW50KCgobGF5ZXI6IGFueSk6IFN5bWJvbFN0eWxlTGF5ZXIpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwYXVzZVBsYWNlbWVudCA9IHRoaXMuX2luUHJvZ3Jlc3NMYXllci5jb250aW51ZVBsYWNlbWVudChsYXllclRpbGVzW2xheWVyLnNvdXJjZV0sIHRoaXMucGxhY2VtZW50LCB0aGlzLl9zaG93Q29sbGlzaW9uQm94ZXMsIGxheWVyLCBzaG91bGRQYXVzZVBsYWNlbWVudCk7XG5cbiAgICAgICAgICAgICAgICBpZiAocGF1c2VQbGFjZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gV2UgZGlkbid0IGZpbmlzaCBwbGFjaW5nIGFsbCBsYXllcnMgd2l0aGluIDJtcyxcbiAgICAgICAgICAgICAgICAgICAgLy8gYnV0IHdlIGNhbiBrZWVwIHJlbmRlcmluZyB3aXRoIGEgcGFydGlhbCBwbGFjZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgLy8gV2UnbGwgcmVzdW1lIGhlcmUgb24gdGhlIG5leHQgZnJhbWVcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9pblByb2dyZXNzTGF5ZXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRQbGFjZW1lbnRJbmRleC0tO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZG9uZSA9IHRydWU7XG4gICAgfVxuXG4gICAgY29tbWl0KG5vdzogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMucGxhY2VtZW50LmNvbW1pdChub3cpO1xuICAgICAgICByZXR1cm4gdGhpcy5wbGFjZW1lbnQ7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBQYXVzZWFibGVQbGFjZW1lbnQ7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgRVhURU5UIGZyb20gJy4uL2RhdGEvZXh0ZW50JztcblxuaW1wb3J0IHtTeW1ib2xJbnN0YW5jZUFycmF5fSBmcm9tICcuLi9kYXRhL2FycmF5X3R5cGVzJztcblxuaW1wb3J0IHR5cGUge1N5bWJvbEluc3RhbmNlfSBmcm9tICcuLi9kYXRhL2FycmF5X3R5cGVzJztcbmltcG9ydCB0eXBlIHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuLi9zb3VyY2UvdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSBTeW1ib2xCdWNrZXQgZnJvbSAnLi4vZGF0YS9idWNrZXQvc3ltYm9sX2J1Y2tldCc7XG5pbXBvcnQgdHlwZSBTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIFRpbGUgZnJvbSAnLi4vc291cmNlL3RpbGUnO1xuXG4vKlxuICAgIFRoZSBDcm9zc1RpbGVTeW1ib2xJbmRleCBnZW5lcmFsbHkgd29ya3Mgb24gdGhlIGFzc3VtcHRpb24gdGhhdFxuICAgIGEgY29uY2VwdHVhbCBcInVuaXF1ZSBzeW1ib2xcIiBjYW4gYmUgaWRlbnRpZmllZCBieSB0aGUgdGV4dCBvZlxuICAgIHRoZSBsYWJlbCBjb21iaW5lZCB3aXRoIHRoZSBhbmNob3IgcG9pbnQuIFRoZSBnb2FsIGlzIHRvIGFzc2lnblxuICAgIHRoZXNlIGNvbmNlcHR1YWwgXCJ1bmlxdWUgc3ltYm9sc1wiIGEgc2hhcmVkIGNyb3NzVGlsZUlEIHRoYXQgY2FuIGJlXG4gICAgdXNlZCBieSBQbGFjZW1lbnQgdG8ga2VlcCBmYWRpbmcgb3BhY2l0eSBzdGF0ZXMgY29uc2lzdGVudCBhbmQgdG9cbiAgICBkZWR1cGxpY2F0ZSBsYWJlbHMuXG5cbiAgICBUaGUgQ3Jvc3NUaWxlU3ltYm9sSW5kZXggaW5kZXhlcyBhbGwgdGhlIGN1cnJlbnQgc3ltYm9sIGluc3RhbmNlcyBhbmRcbiAgICB0aGVpciBjcm9zc1RpbGVJRHMuIFdoZW4gYSBzeW1ib2wgYnVja2V0IGdldHMgYWRkZWQgb3IgdXBkYXRlZCwgdGhlXG4gICAgaW5kZXggYXNzaWducyBhIGNyb3NzVGlsZUlEIHRvIGVhY2ggb2YgaXQncyBzeW1ib2wgaW5zdGFuY2VzIGJ5IGVpdGhlclxuICAgIG1hdGNoaW5nIGl0IHdpdGggYW4gZXhpc3RpbmcgaWQgb3IgYXNzaWduaW5nIGEgbmV3IG9uZS5cbiovXG5cbi8vIFJvdW5kIGFuY2hvciBwb3NpdGlvbnMgdG8gcm91Z2hseSA0IHBpeGVsIGdyaWRcbmNvbnN0IHJvdW5kaW5nRmFjdG9yID0gNTEyIC8gRVhURU5UIC8gMjtcblxuY2xhc3MgVGlsZUxheWVySW5kZXgge1xuICAgIHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRDtcbiAgICBpbmRleGVkU3ltYm9sSW5zdGFuY2VzOiB7W186IG51bWJlcl06IEFycmF5PHtcbiAgICAgICAgY3Jvc3NUaWxlSUQ6IG51bWJlcixcbiAgICAgICAgY29vcmQ6IHtcbiAgICAgICAgICAgIHg6IG51bWJlcixcbiAgICAgICAgICAgIHk6IG51bWJlclxuICAgICAgICB9XG4gICAgfT59O1xuICAgIGJ1Y2tldEluc3RhbmNlSWQ6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCwgc3ltYm9sSW5zdGFuY2VzOiBTeW1ib2xJbnN0YW5jZUFycmF5LCBidWNrZXRJbnN0YW5jZUlkOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy50aWxlSUQgPSB0aWxlSUQ7XG4gICAgICAgIHRoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlcyA9IHt9O1xuICAgICAgICB0aGlzLmJ1Y2tldEluc3RhbmNlSWQgPSBidWNrZXRJbnN0YW5jZUlkO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3ltYm9sSW5zdGFuY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzeW1ib2xJbnN0YW5jZSA9IHN5bWJvbEluc3RhbmNlcy5nZXQoaSk7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBzeW1ib2xJbnN0YW5jZS5rZXk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlc1trZXldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmRleGVkU3ltYm9sSW5zdGFuY2VzW2tleV0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFRoaXMgdGlsZSBtYXkgaGF2ZSBtdWx0aXBsZSBzeW1ib2wgaW5zdGFuY2VzIHdpdGggdGhlIHNhbWUga2V5XG4gICAgICAgICAgICAvLyBTdG9yZSBlYWNoIG9uZSBhbG9uZyB3aXRoIGl0cyBjb29yZGluYXRlc1xuICAgICAgICAgICAgdGhpcy5pbmRleGVkU3ltYm9sSW5zdGFuY2VzW2tleV0ucHVzaCh7XG4gICAgICAgICAgICAgICAgY3Jvc3NUaWxlSUQ6IHN5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlELFxuICAgICAgICAgICAgICAgIGNvb3JkOiB0aGlzLmdldFNjYWxlZENvb3JkaW5hdGVzKHN5bWJvbEluc3RhbmNlLCB0aWxlSUQpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENvbnZlcnRzIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgaW5wdXQgc3ltYm9sIGluc3RhbmNlIGludG8gY29vcmRpbmF0ZXMgdGhhdCBiZSBjYW4gY29tcGFyZWRcbiAgICAvLyBhZ2FpbnN0IG90aGVyIHN5bWJvbHMgaW4gdGhpcyBpbmRleC4gQ29vcmRpbmF0ZXMgYXJlOlxuICAgIC8vICgxKSB3b3JsZC1iYXNlZCAoc28gYWZ0ZXIgY29udmVyc2lvbiB0aGUgc291cmNlIHRpbGUgaXMgaXJyZWxldmFudClcbiAgICAvLyAoMikgY29udmVydGVkIHRvIHRoZSB6LXNjYWxlIG9mIHRoaXMgVGlsZUxheWVySW5kZXhcbiAgICAvLyAoMykgZG93bi1zYW1wbGVkIGJ5IFwicm91bmRpbmdGYWN0b3JcIiBmcm9tIHRpbGUgY29vcmRpbmF0ZSBwcmVjaXNpb24gaW4gb3JkZXIgdG8gYmVcbiAgICAvLyAgICAgbW9yZSB0b2xlcmFudCBvZiBzbWFsbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRpbGVzLlxuICAgIGdldFNjYWxlZENvb3JkaW5hdGVzKHN5bWJvbEluc3RhbmNlOiBTeW1ib2xJbnN0YW5jZSwgY2hpbGRUaWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQpIHtcbiAgICAgICAgY29uc3QgekRpZmZlcmVuY2UgPSBjaGlsZFRpbGVJRC5jYW5vbmljYWwueiAtIHRoaXMudGlsZUlELmNhbm9uaWNhbC56O1xuICAgICAgICBjb25zdCBzY2FsZSA9IHJvdW5kaW5nRmFjdG9yIC8gTWF0aC5wb3coMiwgekRpZmZlcmVuY2UpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogTWF0aC5mbG9vcigoY2hpbGRUaWxlSUQuY2Fub25pY2FsLnggKiBFWFRFTlQgKyBzeW1ib2xJbnN0YW5jZS5hbmNob3JYKSAqIHNjYWxlKSxcbiAgICAgICAgICAgIHk6IE1hdGguZmxvb3IoKGNoaWxkVGlsZUlELmNhbm9uaWNhbC55ICogRVhURU5UICsgc3ltYm9sSW5zdGFuY2UuYW5jaG9yWSkgKiBzY2FsZSlcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmaW5kTWF0Y2hlcyhzeW1ib2xJbnN0YW5jZXM6IFN5bWJvbEluc3RhbmNlQXJyYXksIG5ld1RpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCwgem9vbUNyb3NzVGlsZUlEczoge1tjcm9zc1RpbGVJRDogbnVtYmVyXTogYm9vbGVhbn0pIHtcbiAgICAgICAgY29uc3QgdG9sZXJhbmNlID0gdGhpcy50aWxlSUQuY2Fub25pY2FsLnogPCBuZXdUaWxlSUQuY2Fub25pY2FsLnogPyAxIDogTWF0aC5wb3coMiwgdGhpcy50aWxlSUQuY2Fub25pY2FsLnogLSBuZXdUaWxlSUQuY2Fub25pY2FsLnopO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3ltYm9sSW5zdGFuY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzeW1ib2xJbnN0YW5jZSA9IHN5bWJvbEluc3RhbmNlcy5nZXQoaSk7XG4gICAgICAgICAgICBpZiAoc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSUQpIHtcbiAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IGhhcyBhIG1hdGNoLCBza2lwXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGluZGV4ZWRJbnN0YW5jZXMgPSB0aGlzLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXNbc3ltYm9sSW5zdGFuY2Uua2V5XTtcbiAgICAgICAgICAgIGlmICghaW5kZXhlZEluc3RhbmNlcykge1xuICAgICAgICAgICAgICAgIC8vIE5vIHN5bWJvbCB3aXRoIHRoaXMga2V5IGluIHRoaXMgYnVja2V0XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNjYWxlZFN5bWJvbENvb3JkID0gdGhpcy5nZXRTY2FsZWRDb29yZGluYXRlcyhzeW1ib2xJbnN0YW5jZSwgbmV3VGlsZUlEKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCB0aGlzVGlsZVN5bWJvbCBvZiBpbmRleGVkSW5zdGFuY2VzKSB7XG4gICAgICAgICAgICAgICAgLy8gUmV0dXJuIGFueSBzeW1ib2wgd2l0aCB0aGUgc2FtZSBrZXlzIHdob3NlIGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gMVxuICAgICAgICAgICAgICAgIC8vIGdyaWQgdW5pdC4gKHdpdGggYSA0cHggZ3JpZCwgdGhpcyBjb3ZlcnMgYSAxMnB4IGJ5IDEycHggYXJlYSlcbiAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnModGhpc1RpbGVTeW1ib2wuY29vcmQueCAtIHNjYWxlZFN5bWJvbENvb3JkLngpIDw9IHRvbGVyYW5jZSAmJlxuICAgICAgICAgICAgICAgICAgICBNYXRoLmFicyh0aGlzVGlsZVN5bWJvbC5jb29yZC55IC0gc2NhbGVkU3ltYm9sQ29vcmQueSkgPD0gdG9sZXJhbmNlICYmXG4gICAgICAgICAgICAgICAgICAgICF6b29tQ3Jvc3NUaWxlSURzW3RoaXNUaWxlU3ltYm9sLmNyb3NzVGlsZUlEXSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBPbmNlIHdlJ3ZlIG1hcmtlZCBvdXJzZWx2ZXMgZHVwbGljYXRlIGFnYWluc3QgdGhpcyBwYXJlbnQgc3ltYm9sLFxuICAgICAgICAgICAgICAgICAgICAvLyBkb24ndCBsZXQgYW55IG90aGVyIHN5bWJvbHMgYXQgdGhlIHNhbWUgem9vbSBsZXZlbCBkdXBsaWNhdGUgYWdhaW5zdFxuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgc2FtZSBwYXJlbnQgKHNlZSBpc3N1ZSAjNTk5MylcbiAgICAgICAgICAgICAgICAgICAgem9vbUNyb3NzVGlsZUlEc1t0aGlzVGlsZVN5bWJvbC5jcm9zc1RpbGVJRF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRCA9IHRoaXNUaWxlU3ltYm9sLmNyb3NzVGlsZUlEO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIENyb3NzVGlsZUlEcyB7XG4gICAgbWF4Q3Jvc3NUaWxlSUQ6IG51bWJlcjtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5tYXhDcm9zc1RpbGVJRCA9IDA7XG4gICAgfVxuICAgIGdlbmVyYXRlKCkge1xuICAgICAgICByZXR1cm4gKyt0aGlzLm1heENyb3NzVGlsZUlEO1xuICAgIH1cbn1cblxuY2xhc3MgQ3Jvc3NUaWxlU3ltYm9sTGF5ZXJJbmRleCB7XG4gICAgaW5kZXhlczoge1t6b29tOiBzdHJpbmcgfCBudW1iZXJdOiB7W3RpbGVJZDogc3RyaW5nIHwgbnVtYmVyXTogVGlsZUxheWVySW5kZXh9fTtcbiAgICB1c2VkQ3Jvc3NUaWxlSURzOiB7W3pvb206IHN0cmluZyB8IG51bWJlcl06IHtbY3Jvc3NUaWxlSUQ6IG51bWJlcl06IGJvb2xlYW59fTtcbiAgICBsbmc6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmluZGV4ZXMgPSB7fTtcbiAgICAgICAgdGhpcy51c2VkQ3Jvc3NUaWxlSURzID0ge307XG4gICAgICAgIHRoaXMubG5nID0gMDtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIFNvbWV0aW1lcyB3aGVuIGEgdXNlciBwYW5zIGFjcm9zcyB0aGUgYW50aW1lcmlkaWFuIHRoZSBsb25naXR1ZGUgdmFsdWUgZ2V0cyB3cmFwcGVkLlxuICAgICAqIFRvIHByZXZlbnQgbGFiZWxzIGZyb20gZmxhc2hpbmcgb3V0IGFuZCBpbiB3ZSBhZGp1c3QgdGhlIHRpbGVJRCB2YWx1ZXMgaW4gdGhlIGluZGV4ZXNcbiAgICAgKiBzbyB0aGF0IHRoZXkgbWF0Y2ggdGhlIG5ldyB3cmFwcGVkIHZlcnNpb24gb2YgdGhlIG1hcC5cbiAgICAgKi9cbiAgICBoYW5kbGVXcmFwSnVtcChsbmc6IG51bWJlcikge1xuICAgICAgICBjb25zdCB3cmFwRGVsdGEgPSBNYXRoLnJvdW5kKChsbmcgLSB0aGlzLmxuZykgLyAzNjApO1xuICAgICAgICBpZiAod3JhcERlbHRhICE9PSAwKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHpvb20gaW4gdGhpcy5pbmRleGVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgem9vbUluZGV4ZXMgPSB0aGlzLmluZGV4ZXNbem9vbV07XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Wm9vbUluZGV4ID0ge307XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gem9vbUluZGV4ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlIHRoZSB0aWxlSUQncyB3cmFwIGFuZCBhZGQgaXQgdG8gYSBuZXcgaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB6b29tSW5kZXhlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBpbmRleC50aWxlSUQgPSBpbmRleC50aWxlSUQudW53cmFwVG8oaW5kZXgudGlsZUlELndyYXAgKyB3cmFwRGVsdGEpO1xuICAgICAgICAgICAgICAgICAgICBuZXdab29tSW5kZXhbaW5kZXgudGlsZUlELmtleV0gPSBpbmRleDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5pbmRleGVzW3pvb21dID0gbmV3Wm9vbUluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubG5nID0gbG5nO1xuICAgIH1cblxuICAgIGFkZEJ1Y2tldCh0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQsIGJ1Y2tldDogU3ltYm9sQnVja2V0LCBjcm9zc1RpbGVJRHM6IENyb3NzVGlsZUlEcykge1xuICAgICAgICBpZiAodGhpcy5pbmRleGVzW3RpbGVJRC5vdmVyc2NhbGVkWl0gJiZcbiAgICAgICAgICAgIHRoaXMuaW5kZXhlc1t0aWxlSUQub3ZlcnNjYWxlZFpdW3RpbGVJRC5rZXldKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pbmRleGVzW3RpbGVJRC5vdmVyc2NhbGVkWl1bdGlsZUlELmtleV0uYnVja2V0SW5zdGFuY2VJZCA9PT1cbiAgICAgICAgICAgICAgICBidWNrZXQuYnVja2V0SW5zdGFuY2VJZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gV2UncmUgcmVwbGFjaW5nIHRoaXMgYnVja2V0IHdpdGggYW4gdXBkYXRlZCB2ZXJzaW9uXG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBvbGQgYnVja2V0J3MgXCJ1c2VkIGNyb3NzVGlsZUlEc1wiIG5vdyBzbyB0aGF0XG4gICAgICAgICAgICAgICAgLy8gdGhlIG5ldyBidWNrZXQgY2FuIGNsYWltIHRoZW0uXG4gICAgICAgICAgICAgICAgLy8gVGhlIG9sZCBpbmRleCBlbnRyaWVzIHRoZW1zZWx2ZXMgc3RpY2sgYXJvdW5kIHVudGlsXG4gICAgICAgICAgICAgICAgLy8gJ3JlbW92ZVN0YWxlQnVja2V0cycgaXMgY2FsbGVkLlxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlQnVja2V0Q3Jvc3NUaWxlSURzKHRpbGVJRC5vdmVyc2NhbGVkWixcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleGVzW3RpbGVJRC5vdmVyc2NhbGVkWl1bdGlsZUlELmtleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWNrZXQuc3ltYm9sSW5zdGFuY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzeW1ib2xJbnN0YW5jZSA9IGJ1Y2tldC5zeW1ib2xJbnN0YW5jZXMuZ2V0KGkpO1xuICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSUQgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnVzZWRDcm9zc1RpbGVJRHNbdGlsZUlELm92ZXJzY2FsZWRaXSkge1xuICAgICAgICAgICAgdGhpcy51c2VkQ3Jvc3NUaWxlSURzW3RpbGVJRC5vdmVyc2NhbGVkWl0gPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB6b29tQ3Jvc3NUaWxlSURzID0gdGhpcy51c2VkQ3Jvc3NUaWxlSURzW3RpbGVJRC5vdmVyc2NhbGVkWl07XG5cbiAgICAgICAgZm9yIChjb25zdCB6b29tIGluIHRoaXMuaW5kZXhlcykge1xuICAgICAgICAgICAgY29uc3Qgem9vbUluZGV4ZXMgPSB0aGlzLmluZGV4ZXNbem9vbV07XG4gICAgICAgICAgICBpZiAoTnVtYmVyKHpvb20pID4gdGlsZUlELm92ZXJzY2FsZWRaKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpZCBpbiB6b29tSW5kZXhlcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEluZGV4ID0gem9vbUluZGV4ZXNbaWRdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRJbmRleC50aWxlSUQuaXNDaGlsZE9mKHRpbGVJRCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkSW5kZXguZmluZE1hdGNoZXMoYnVja2V0LnN5bWJvbEluc3RhbmNlcywgdGlsZUlELCB6b29tQ3Jvc3NUaWxlSURzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50Q29vcmQgPSB0aWxlSUQuc2NhbGVkVG8oTnVtYmVyKHpvb20pKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJbmRleCA9IHpvb21JbmRleGVzW3BhcmVudENvb3JkLmtleV07XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudEluZGV4LmZpbmRNYXRjaGVzKGJ1Y2tldC5zeW1ib2xJbnN0YW5jZXMsIHRpbGVJRCwgem9vbUNyb3NzVGlsZUlEcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWNrZXQuc3ltYm9sSW5zdGFuY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzeW1ib2xJbnN0YW5jZSA9IGJ1Y2tldC5zeW1ib2xJbnN0YW5jZXMuZ2V0KGkpO1xuICAgICAgICAgICAgaWYgKCFzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRCkge1xuICAgICAgICAgICAgICAgIC8vIHN5bWJvbCBkaWQgbm90IG1hdGNoIGFueSBrbm93biBzeW1ib2wsIGFzc2lnbiBhIG5ldyBpZFxuICAgICAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEID0gY3Jvc3NUaWxlSURzLmdlbmVyYXRlKCk7XG4gICAgICAgICAgICAgICAgem9vbUNyb3NzVGlsZUlEc1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaW5kZXhlc1t0aWxlSUQub3ZlcnNjYWxlZFpdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5kZXhlc1t0aWxlSUQub3ZlcnNjYWxlZFpdID0ge307XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbmRleGVzW3RpbGVJRC5vdmVyc2NhbGVkWl1bdGlsZUlELmtleV0gPSBuZXcgVGlsZUxheWVySW5kZXgodGlsZUlELCBidWNrZXQuc3ltYm9sSW5zdGFuY2VzLCBidWNrZXQuYnVja2V0SW5zdGFuY2VJZCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmVtb3ZlQnVja2V0Q3Jvc3NUaWxlSURzKHpvb206IHN0cmluZyB8IG51bWJlciwgcmVtb3ZlZEJ1Y2tldDogVGlsZUxheWVySW5kZXgpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcmVtb3ZlZEJ1Y2tldC5pbmRleGVkU3ltYm9sSW5zdGFuY2VzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHN5bWJvbEluc3RhbmNlIG9mIHJlbW92ZWRCdWNrZXQuaW5kZXhlZFN5bWJvbEluc3RhbmNlc1soa2V5OiBhbnkpXSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnVzZWRDcm9zc1RpbGVJRHNbem9vbV1bc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVtb3ZlU3RhbGVCdWNrZXRzKGN1cnJlbnRJRHM6IHsgW3N0cmluZyB8IG51bWJlcl06IGJvb2xlYW4gfSkge1xuICAgICAgICBsZXQgdGlsZXNDaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgeiBpbiB0aGlzLmluZGV4ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHpvb21JbmRleGVzID0gdGhpcy5pbmRleGVzW3pdO1xuICAgICAgICAgICAgZm9yIChjb25zdCB0aWxlS2V5IGluIHpvb21JbmRleGVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50SURzW3pvb21JbmRleGVzW3RpbGVLZXldLmJ1Y2tldEluc3RhbmNlSWRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlQnVja2V0Q3Jvc3NUaWxlSURzKHosIHpvb21JbmRleGVzW3RpbGVLZXldKTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHpvb21JbmRleGVzW3RpbGVLZXldO1xuICAgICAgICAgICAgICAgICAgICB0aWxlc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGlsZXNDaGFuZ2VkO1xuICAgIH1cbn1cblxuY2xhc3MgQ3Jvc3NUaWxlU3ltYm9sSW5kZXgge1xuICAgIGxheWVySW5kZXhlczoge1tsYXllcklkOiBzdHJpbmddOiBDcm9zc1RpbGVTeW1ib2xMYXllckluZGV4fTtcbiAgICBjcm9zc1RpbGVJRHM6IENyb3NzVGlsZUlEcztcbiAgICBtYXhCdWNrZXRJbnN0YW5jZUlkOiBudW1iZXI7XG4gICAgYnVja2V0c0luQ3VycmVudFBsYWNlbWVudDoge1tfOiBudW1iZXJdOiBib29sZWFufTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmxheWVySW5kZXhlcyA9IHt9O1xuICAgICAgICB0aGlzLmNyb3NzVGlsZUlEcyA9IG5ldyBDcm9zc1RpbGVJRHMoKTtcbiAgICAgICAgdGhpcy5tYXhCdWNrZXRJbnN0YW5jZUlkID0gMDtcbiAgICAgICAgdGhpcy5idWNrZXRzSW5DdXJyZW50UGxhY2VtZW50ID0ge307XG4gICAgfVxuXG4gICAgYWRkTGF5ZXIoc3R5bGVMYXllcjogU3R5bGVMYXllciwgdGlsZXM6IEFycmF5PFRpbGU+LCBsbmc6IG51bWJlcikge1xuICAgICAgICBsZXQgbGF5ZXJJbmRleCA9IHRoaXMubGF5ZXJJbmRleGVzW3N0eWxlTGF5ZXIuaWRdO1xuICAgICAgICBpZiAobGF5ZXJJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsYXllckluZGV4ID0gdGhpcy5sYXllckluZGV4ZXNbc3R5bGVMYXllci5pZF0gPSBuZXcgQ3Jvc3NUaWxlU3ltYm9sTGF5ZXJJbmRleCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHN5bWJvbEJ1Y2tldHNDaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRCdWNrZXRJRHMgPSB7fTtcblxuICAgICAgICBsYXllckluZGV4LmhhbmRsZVdyYXBKdW1wKGxuZyk7XG5cbiAgICAgICAgZm9yIChjb25zdCB0aWxlIG9mIHRpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCBzeW1ib2xCdWNrZXQgPSAoKHRpbGUuZ2V0QnVja2V0KHN0eWxlTGF5ZXIpOiBhbnkpOiBTeW1ib2xCdWNrZXQpO1xuICAgICAgICAgICAgaWYgKCFzeW1ib2xCdWNrZXQgfHwgc3R5bGVMYXllci5pZCAhPT0gc3ltYm9sQnVja2V0LmxheWVySWRzWzBdKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBpZiAoIXN5bWJvbEJ1Y2tldC5idWNrZXRJbnN0YW5jZUlkKSB7XG4gICAgICAgICAgICAgICAgc3ltYm9sQnVja2V0LmJ1Y2tldEluc3RhbmNlSWQgPSArK3RoaXMubWF4QnVja2V0SW5zdGFuY2VJZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGxheWVySW5kZXguYWRkQnVja2V0KHRpbGUudGlsZUlELCBzeW1ib2xCdWNrZXQsIHRoaXMuY3Jvc3NUaWxlSURzKSkge1xuICAgICAgICAgICAgICAgIHN5bWJvbEJ1Y2tldHNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnJlbnRCdWNrZXRJRHNbc3ltYm9sQnVja2V0LmJ1Y2tldEluc3RhbmNlSWRdID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsYXllckluZGV4LnJlbW92ZVN0YWxlQnVja2V0cyhjdXJyZW50QnVja2V0SURzKSkge1xuICAgICAgICAgICAgc3ltYm9sQnVja2V0c0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN5bWJvbEJ1Y2tldHNDaGFuZ2VkO1xuICAgIH1cblxuICAgIHBydW5lVW51c2VkTGF5ZXJzKHVzZWRMYXllcnM6IEFycmF5PHN0cmluZz4pIHtcbiAgICAgICAgY29uc3QgdXNlZExheWVyTWFwID0ge307XG4gICAgICAgIHVzZWRMYXllcnMuZm9yRWFjaCgodXNlZExheWVyKSA9PiB7XG4gICAgICAgICAgICB1c2VkTGF5ZXJNYXBbdXNlZExheWVyXSA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICBmb3IgKGNvbnN0IGxheWVySWQgaW4gdGhpcy5sYXllckluZGV4ZXMpIHtcbiAgICAgICAgICAgIGlmICghdXNlZExheWVyTWFwW2xheWVySWRdKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMubGF5ZXJJbmRleGVzW2xheWVySWRdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDcm9zc1RpbGVTeW1ib2xJbmRleDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHtFdmVudCwgRXJyb3JFdmVudCwgRXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCBTdHlsZUxheWVyIGZyb20gJy4vc3R5bGVfbGF5ZXInO1xuaW1wb3J0IGNyZWF0ZVN0eWxlTGF5ZXIgZnJvbSAnLi9jcmVhdGVfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IGxvYWRTcHJpdGUgZnJvbSAnLi9sb2FkX3Nwcml0ZSc7XG5pbXBvcnQgSW1hZ2VNYW5hZ2VyIGZyb20gJy4uL3JlbmRlci9pbWFnZV9tYW5hZ2VyJztcbmltcG9ydCBHbHlwaE1hbmFnZXIgZnJvbSAnLi4vcmVuZGVyL2dseXBoX21hbmFnZXInO1xuaW1wb3J0IExpZ2h0IGZyb20gJy4vbGlnaHQnO1xuaW1wb3J0IExpbmVBdGxhcyBmcm9tICcuLi9yZW5kZXIvbGluZV9hdGxhcyc7XG5pbXBvcnQge3BpY2ssIGNsb25lLCBleHRlbmQsIGRlZXBFcXVhbCwgZmlsdGVyT2JqZWN0LCBtYXBPYmplY3R9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQge2dldEpTT04sIGdldFJlZmVycmVyLCBtYWtlUmVxdWVzdCwgUmVzb3VyY2VUeXBlfSBmcm9tICcuLi91dGlsL2FqYXgnO1xuaW1wb3J0IHtpc01hcGJveFVSTH0gZnJvbSAnLi4vdXRpbC9tYXBib3gnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vdXRpbC9icm93c2VyJztcbmltcG9ydCBEaXNwYXRjaGVyIGZyb20gJy4uL3V0aWwvZGlzcGF0Y2hlcic7XG5pbXBvcnQge3ZhbGlkYXRlU3R5bGUsIGVtaXRWYWxpZGF0aW9uRXJyb3JzIGFzIF9lbWl0VmFsaWRhdGlvbkVycm9yc30gZnJvbSAnLi92YWxpZGF0ZV9zdHlsZSc7XG5pbXBvcnQge1xuICAgIGdldFR5cGUgYXMgZ2V0U291cmNlVHlwZSxcbiAgICBzZXRUeXBlIGFzIHNldFNvdXJjZVR5cGUsXG4gICAgdHlwZSBTb3VyY2VDbGFzc1xufSBmcm9tICcuLi9zb3VyY2Uvc291cmNlJztcbmltcG9ydCB7cXVlcnlSZW5kZXJlZEZlYXR1cmVzLCBxdWVyeVJlbmRlcmVkU3ltYm9scywgcXVlcnlTb3VyY2VGZWF0dXJlc30gZnJvbSAnLi4vc291cmNlL3F1ZXJ5X2ZlYXR1cmVzJztcbmltcG9ydCBTb3VyY2VDYWNoZSBmcm9tICcuLi9zb3VyY2Uvc291cmNlX2NhY2hlJztcbmltcG9ydCBHZW9KU09OU291cmNlIGZyb20gJy4uL3NvdXJjZS9nZW9qc29uX3NvdXJjZSc7XG5pbXBvcnQgc3R5bGVTcGVjIGZyb20gJy4uL3N0eWxlLXNwZWMvcmVmZXJlbmNlL2xhdGVzdCc7XG5pbXBvcnQgZ2V0V29ya2VyUG9vbCBmcm9tICcuLi91dGlsL2dsb2JhbF93b3JrZXJfcG9vbCc7XG5pbXBvcnQgZGVyZWYgZnJvbSAnLi4vc3R5bGUtc3BlYy9kZXJlZic7XG5pbXBvcnQgZW1wdHlTdHlsZSBmcm9tICcuLi9zdHlsZS1zcGVjL2VtcHR5JztcbmltcG9ydCBkaWZmU3R5bGVzLCB7b3BlcmF0aW9ucyBhcyBkaWZmT3BlcmF0aW9uc30gZnJvbSAnLi4vc3R5bGUtc3BlYy9kaWZmJztcbmltcG9ydCB7XG4gICAgcmVnaXN0ZXJGb3JQbHVnaW5TdGF0ZUNoYW5nZSxcbiAgICBldmVudGVkIGFzIHJ0bFRleHRQbHVnaW5FdmVudGVkLFxuICAgIHRyaWdnZXJQbHVnaW5Db21wbGV0aW9uRXZlbnRcbn0gZnJvbSAnLi4vc291cmNlL3J0bF90ZXh0X3BsdWdpbic7XG5pbXBvcnQgUGF1c2VhYmxlUGxhY2VtZW50IGZyb20gJy4vcGF1c2VhYmxlX3BsYWNlbWVudCc7XG5pbXBvcnQgWm9vbUhpc3RvcnkgZnJvbSAnLi96b29tX2hpc3RvcnknO1xuaW1wb3J0IENyb3NzVGlsZVN5bWJvbEluZGV4IGZyb20gJy4uL3N5bWJvbC9jcm9zc190aWxlX3N5bWJvbF9pbmRleCc7XG5pbXBvcnQge3ZhbGlkYXRlQ3VzdG9tU3R5bGVMYXllcn0gZnJvbSAnLi9zdHlsZV9sYXllci9jdXN0b21fc3R5bGVfbGF5ZXInO1xuXG4vLyBXZSdyZSBza2lwcGluZyB2YWxpZGF0aW9uIGVycm9ycyB3aXRoIHRoZSBgc291cmNlLmNhbnZhc2AgaWRlbnRpZmllciBpbiBvcmRlclxuLy8gdG8gY29udGludWUgdG8gYWxsb3cgY2FudmFzIHNvdXJjZXMgdG8gYmUgYWRkZWQgYXQgcnVudGltZS91cGRhdGVkIGluXG4vLyBzbWFydCBzZXRTdHlsZSAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL3B1bGwvNjQyNCk6XG5jb25zdCBlbWl0VmFsaWRhdGlvbkVycm9ycyA9IChldmVudGVkOiBFdmVudGVkLCBlcnJvcnM6ID8kUmVhZE9ubHlBcnJheTx7bWVzc2FnZTogc3RyaW5nLCBpZGVudGlmaWVyPzogc3RyaW5nfT4pID0+XG4gICAgX2VtaXRWYWxpZGF0aW9uRXJyb3JzKGV2ZW50ZWQsIGVycm9ycyAmJiBlcnJvcnMuZmlsdGVyKGVycm9yID0+IGVycm9yLmlkZW50aWZpZXIgIT09ICdzb3VyY2UuY2FudmFzJykpO1xuXG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vdWkvbWFwJztcbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi9nZW8vdHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIHtTdHlsZUltYWdlfSBmcm9tICcuL3N0eWxlX2ltYWdlJztcbmltcG9ydCB0eXBlIHtTdHlsZUdseXBofSBmcm9tICcuL3N0eWxlX2dseXBoJztcbmltcG9ydCB0eXBlIHtDYWxsYmFja30gZnJvbSAnLi4vdHlwZXMvY2FsbGJhY2snO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvblBhcmFtZXRlcnMgZnJvbSAnLi9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuaW1wb3J0IHR5cGUge1BsYWNlbWVudH0gZnJvbSAnLi4vc3ltYm9sL3BsYWNlbWVudCc7XG5pbXBvcnQgdHlwZSB7Q2FuY2VsYWJsZX0gZnJvbSAnLi4vdHlwZXMvY2FuY2VsYWJsZSc7XG5pbXBvcnQgdHlwZSB7UmVxdWVzdFBhcmFtZXRlcnMsIFJlc3BvbnNlQ2FsbGJhY2t9IGZyb20gJy4uL3V0aWwvYWpheCc7XG5pbXBvcnQgdHlwZSB7R2VvSlNPTn0gZnJvbSAnQG1hcGJveC9nZW9qc29uLXR5cGVzJztcbmltcG9ydCB0eXBlIHtcbiAgICBMYXllclNwZWNpZmljYXRpb24sXG4gICAgRmlsdGVyU3BlY2lmaWNhdGlvbixcbiAgICBTdHlsZVNwZWNpZmljYXRpb24sXG4gICAgTGlnaHRTcGVjaWZpY2F0aW9uLFxuICAgIFNvdXJjZVNwZWNpZmljYXRpb25cbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5pbXBvcnQgdHlwZSB7Q3VzdG9tTGF5ZXJJbnRlcmZhY2V9IGZyb20gJy4vc3R5bGVfbGF5ZXIvY3VzdG9tX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIHtWYWxpZGF0b3J9IGZyb20gJy4vdmFsaWRhdGVfc3R5bGUnO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uL3NvdXJjZS90aWxlX2lkJztcblxuY29uc3Qgc3VwcG9ydGVkRGlmZk9wZXJhdGlvbnMgPSBwaWNrKGRpZmZPcGVyYXRpb25zLCBbXG4gICAgJ2FkZExheWVyJyxcbiAgICAncmVtb3ZlTGF5ZXInLFxuICAgICdzZXRQYWludFByb3BlcnR5JyxcbiAgICAnc2V0TGF5b3V0UHJvcGVydHknLFxuICAgICdzZXRGaWx0ZXInLFxuICAgICdhZGRTb3VyY2UnLFxuICAgICdyZW1vdmVTb3VyY2UnLFxuICAgICdzZXRMYXllclpvb21SYW5nZScsXG4gICAgJ3NldExpZ2h0JyxcbiAgICAnc2V0VHJhbnNpdGlvbicsXG4gICAgJ3NldEdlb0pTT05Tb3VyY2VEYXRhJ1xuICAgIC8vICdzZXRHbHlwaHMnLFxuICAgIC8vICdzZXRTcHJpdGUnLFxuXSk7XG5cbmNvbnN0IGlnbm9yZWREaWZmT3BlcmF0aW9ucyA9IHBpY2soZGlmZk9wZXJhdGlvbnMsIFtcbiAgICAnc2V0Q2VudGVyJyxcbiAgICAnc2V0Wm9vbScsXG4gICAgJ3NldEJlYXJpbmcnLFxuICAgICdzZXRQaXRjaCdcbl0pO1xuXG5jb25zdCBlbXB0eSA9IGVtcHR5U3R5bGUoKTtcblxuZXhwb3J0IHR5cGUgU3R5bGVPcHRpb25zID0ge1xuICAgIHZhbGlkYXRlPzogYm9vbGVhbixcbiAgICBsb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk/OiBzdHJpbmdcbn07XG5cbmV4cG9ydCB0eXBlIFN0eWxlU2V0dGVyT3B0aW9ucyA9IHtcbiAgICB2YWxpZGF0ZT86IGJvb2xlYW5cbn07XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0eWxlIGV4dGVuZHMgRXZlbnRlZCB7XG4gICAgbWFwOiBNYXA7XG4gICAgc3R5bGVzaGVldDogU3R5bGVTcGVjaWZpY2F0aW9uO1xuICAgIGRpc3BhdGNoZXI6IERpc3BhdGNoZXI7XG4gICAgaW1hZ2VNYW5hZ2VyOiBJbWFnZU1hbmFnZXI7XG4gICAgZ2x5cGhNYW5hZ2VyOiBHbHlwaE1hbmFnZXI7XG4gICAgbGluZUF0bGFzOiBMaW5lQXRsYXM7XG4gICAgbGlnaHQ6IExpZ2h0O1xuXG4gICAgX3JlcXVlc3Q6ID9DYW5jZWxhYmxlO1xuICAgIF9zcHJpdGVSZXF1ZXN0OiA/Q2FuY2VsYWJsZTtcbiAgICBfbGF5ZXJzOiB7W186IHN0cmluZ106IFN0eWxlTGF5ZXJ9O1xuICAgIF9zZXJpYWxpemVkTGF5ZXJzOiB7W186IHN0cmluZ106IE9iamVjdH07XG4gICAgX29yZGVyOiBBcnJheTxzdHJpbmc+O1xuICAgIHNvdXJjZUNhY2hlczoge1tfOiBzdHJpbmddOiBTb3VyY2VDYWNoZX07XG4gICAgem9vbUhpc3Rvcnk6IFpvb21IaXN0b3J5O1xuICAgIF9sb2FkZWQ6IGJvb2xlYW47XG4gICAgX3J0bFRleHRQbHVnaW5DYWxsYmFjazogRnVuY3Rpb247XG4gICAgX2NoYW5nZWQ6IGJvb2xlYW47XG4gICAgX3VwZGF0ZWRTb3VyY2VzOiB7W186IHN0cmluZ106ICdjbGVhcicgfCAncmVsb2FkJ307XG4gICAgX3VwZGF0ZWRMYXllcnM6IHtbXzogc3RyaW5nXTogdHJ1ZX07XG4gICAgX3JlbW92ZWRMYXllcnM6IHtbXzogc3RyaW5nXTogU3R5bGVMYXllcn07XG4gICAgX2NoYW5nZWRJbWFnZXM6IHtbXzogc3RyaW5nXTogdHJ1ZX07XG4gICAgX3VwZGF0ZWRQYWludFByb3BzOiB7W2xheWVyOiBzdHJpbmddOiB0cnVlfTtcbiAgICBfbGF5ZXJPcmRlckNoYW5nZWQ6IGJvb2xlYW47XG4gICAgX2F2YWlsYWJsZUltYWdlczogQXJyYXk8c3RyaW5nPjtcblxuICAgIGNyb3NzVGlsZVN5bWJvbEluZGV4OiBDcm9zc1RpbGVTeW1ib2xJbmRleDtcbiAgICBwYXVzZWFibGVQbGFjZW1lbnQ6IFBhdXNlYWJsZVBsYWNlbWVudDtcbiAgICBwbGFjZW1lbnQ6IFBsYWNlbWVudDtcbiAgICB6OiBudW1iZXI7XG5cbiAgICAvLyBleHBvc2VkIHRvIGFsbG93IHN0dWJiaW5nIGJ5IHVuaXQgdGVzdHNcbiAgICBzdGF0aWMgZ2V0U291cmNlVHlwZTogdHlwZW9mIGdldFNvdXJjZVR5cGU7XG4gICAgc3RhdGljIHNldFNvdXJjZVR5cGU6IHR5cGVvZiBzZXRTb3VyY2VUeXBlO1xuICAgIHN0YXRpYyByZWdpc3RlckZvclBsdWdpblN0YXRlQ2hhbmdlOiB0eXBlb2YgcmVnaXN0ZXJGb3JQbHVnaW5TdGF0ZUNoYW5nZTtcblxuICAgIGNvbnN0cnVjdG9yKG1hcDogTWFwLCBvcHRpb25zOiBTdHlsZU9wdGlvbnMgPSB7fSkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIHRoaXMubWFwID0gbWFwO1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIgPSBuZXcgRGlzcGF0Y2hlcihnZXRXb3JrZXJQb29sKCksIHRoaXMpO1xuICAgICAgICB0aGlzLmltYWdlTWFuYWdlciA9IG5ldyBJbWFnZU1hbmFnZXIoKTtcbiAgICAgICAgdGhpcy5pbWFnZU1hbmFnZXIuc2V0RXZlbnRlZFBhcmVudCh0aGlzKTtcbiAgICAgICAgdGhpcy5nbHlwaE1hbmFnZXIgPSBuZXcgR2x5cGhNYW5hZ2VyKG1hcC5fcmVxdWVzdE1hbmFnZXIsIG9wdGlvbnMubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5KTtcbiAgICAgICAgdGhpcy5saW5lQXRsYXMgPSBuZXcgTGluZUF0bGFzKDI1NiwgNTEyKTtcbiAgICAgICAgdGhpcy5jcm9zc1RpbGVTeW1ib2xJbmRleCA9IG5ldyBDcm9zc1RpbGVTeW1ib2xJbmRleCgpO1xuXG4gICAgICAgIHRoaXMuX2xheWVycyA9IHt9O1xuICAgICAgICB0aGlzLl9zZXJpYWxpemVkTGF5ZXJzID0ge307XG4gICAgICAgIHRoaXMuX29yZGVyICA9IFtdO1xuICAgICAgICB0aGlzLnNvdXJjZUNhY2hlcyA9IHt9O1xuICAgICAgICB0aGlzLnpvb21IaXN0b3J5ID0gbmV3IFpvb21IaXN0b3J5KCk7XG4gICAgICAgIHRoaXMuX2xvYWRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9hdmFpbGFibGVJbWFnZXMgPSBbXTtcblxuICAgICAgICB0aGlzLl9yZXNldFVwZGF0ZXMoKTtcblxuICAgICAgICB0aGlzLmRpc3BhdGNoZXIuYnJvYWRjYXN0KCdzZXRSZWZlcnJlcicsIGdldFJlZmVycmVyKCkpO1xuXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICB0aGlzLl9ydGxUZXh0UGx1Z2luQ2FsbGJhY2sgPSBTdHlsZS5yZWdpc3RlckZvclBsdWdpblN0YXRlQ2hhbmdlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgcGx1Z2luU3RhdHVzOiBldmVudC5wbHVnaW5TdGF0dXMsXG4gICAgICAgICAgICAgICAgcGx1Z2luVVJMOiBldmVudC5wbHVnaW5VUkxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBzZWxmLmRpc3BhdGNoZXIuYnJvYWRjYXN0KCdzeW5jUlRMUGx1Z2luU3RhdGUnLCBzdGF0ZSwgKGVyciwgcmVzdWx0cykgPT4ge1xuICAgICAgICAgICAgICAgIHRyaWdnZXJQbHVnaW5Db21wbGV0aW9uRXZlbnQoZXJyKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0cykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhbGxDb21wbGV0ZSA9IHJlc3VsdHMuZXZlcnkoKGVsZW0pID0+IGVsZW0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWxsQ29tcGxldGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaWQgaW4gc2VsZi5zb3VyY2VDYWNoZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNvdXJjZUNhY2hlc1tpZF0ucmVsb2FkKCk7IC8vIFNob3VsZCBiZSBhIG5vLW9wIGlmIHRoZSBwbHVnaW4gbG9hZHMgYmVmb3JlIGFueSB0aWxlcyBsb2FkXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm9uKCdkYXRhJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuZGF0YVR5cGUgIT09ICdzb3VyY2UnIHx8IGV2ZW50LnNvdXJjZURhdGFUeXBlICE9PSAnbWV0YWRhdGEnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzb3VyY2VDYWNoZSA9IHRoaXMuc291cmNlQ2FjaGVzW2V2ZW50LnNvdXJjZUlkXTtcbiAgICAgICAgICAgIGlmICghc291cmNlQ2FjaGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IHNvdXJjZUNhY2hlLmdldFNvdXJjZSgpO1xuICAgICAgICAgICAgaWYgKCFzb3VyY2UgfHwgIXNvdXJjZS52ZWN0b3JMYXllcklkcykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBsYXllcklkIGluIHRoaXMuX2xheWVycykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJzW2xheWVySWRdO1xuICAgICAgICAgICAgICAgIGlmIChsYXllci5zb3VyY2UgPT09IHNvdXJjZS5pZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWxpZGF0ZUxheWVyKGxheWVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGxvYWRVUkwodXJsOiBzdHJpbmcsIG9wdGlvbnM6IHtcbiAgICAgICAgdmFsaWRhdGU/OiBib29sZWFuLFxuICAgICAgICBhY2Nlc3NUb2tlbj86IHN0cmluZ1xuICAgIH0gPSB7fSkge1xuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhbG9hZGluZycsIHtkYXRhVHlwZTogJ3N0eWxlJ30pKTtcblxuICAgICAgICBjb25zdCB2YWxpZGF0ZSA9IHR5cGVvZiBvcHRpb25zLnZhbGlkYXRlID09PSAnYm9vbGVhbicgP1xuICAgICAgICAgICAgb3B0aW9ucy52YWxpZGF0ZSA6ICFpc01hcGJveFVSTCh1cmwpO1xuXG4gICAgICAgIHVybCA9IHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci5ub3JtYWxpemVTdHlsZVVSTCh1cmwsIG9wdGlvbnMuYWNjZXNzVG9rZW4pO1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QodXJsLCBSZXNvdXJjZVR5cGUuU3R5bGUpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0ID0gZ2V0SlNPTihyZXF1ZXN0LCAoZXJyb3I6ID9FcnJvciwganNvbjogP09iamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fcmVxdWVzdCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQoZXJyb3IpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoanNvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWQoanNvbiwgdmFsaWRhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBsb2FkSlNPTihqc29uOiBTdHlsZVNwZWNpZmljYXRpb24sIG9wdGlvbnM6IFN0eWxlU2V0dGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGFsb2FkaW5nJywge2RhdGFUeXBlOiAnc3R5bGUnfSkpO1xuXG4gICAgICAgIHRoaXMuX3JlcXVlc3QgPSBicm93c2VyLmZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3JlcXVlc3QgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fbG9hZChqc29uLCBvcHRpb25zLnZhbGlkYXRlICE9PSBmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGxvYWRFbXB0eSgpIHtcbiAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZGF0YWxvYWRpbmcnLCB7ZGF0YVR5cGU6ICdzdHlsZSd9KSk7XG4gICAgICAgIHRoaXMuX2xvYWQoZW1wdHksIGZhbHNlKTtcbiAgICB9XG5cbiAgICBfbG9hZChqc29uOiBTdHlsZVNwZWNpZmljYXRpb24sIHZhbGlkYXRlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh2YWxpZGF0ZSAmJiBlbWl0VmFsaWRhdGlvbkVycm9ycyh0aGlzLCB2YWxpZGF0ZVN0eWxlKGpzb24pKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdHlsZXNoZWV0ID0ganNvbjtcblxuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIGpzb24uc291cmNlcykge1xuICAgICAgICAgICAgdGhpcy5hZGRTb3VyY2UoaWQsIGpzb24uc291cmNlc1tpZF0sIHt2YWxpZGF0ZTogZmFsc2V9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChqc29uLnNwcml0ZSkge1xuICAgICAgICAgICAgdGhpcy5fbG9hZFNwcml0ZShqc29uLnNwcml0ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmltYWdlTWFuYWdlci5zZXRMb2FkZWQodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdseXBoTWFuYWdlci5zZXRVUkwoanNvbi5nbHlwaHMpO1xuXG4gICAgICAgIGNvbnN0IGxheWVycyA9IGRlcmVmKHRoaXMuc3R5bGVzaGVldC5sYXllcnMpO1xuXG4gICAgICAgIHRoaXMuX29yZGVyID0gbGF5ZXJzLm1hcCgobGF5ZXIpID0+IGxheWVyLmlkKTtcblxuICAgICAgICB0aGlzLl9sYXllcnMgPSB7fTtcbiAgICAgICAgdGhpcy5fc2VyaWFsaXplZExheWVycyA9IHt9O1xuICAgICAgICBmb3IgKGxldCBsYXllciBvZiBsYXllcnMpIHtcbiAgICAgICAgICAgIGxheWVyID0gY3JlYXRlU3R5bGVMYXllcihsYXllcik7XG4gICAgICAgICAgICBsYXllci5zZXRFdmVudGVkUGFyZW50KHRoaXMsIHtsYXllcjoge2lkOiBsYXllci5pZH19KTtcbiAgICAgICAgICAgIHRoaXMuX2xheWVyc1tsYXllci5pZF0gPSBsYXllcjtcbiAgICAgICAgICAgIHRoaXMuX3NlcmlhbGl6ZWRMYXllcnNbbGF5ZXIuaWRdID0gbGF5ZXIuc2VyaWFsaXplKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kaXNwYXRjaGVyLmJyb2FkY2FzdCgnc2V0TGF5ZXJzJywgdGhpcy5fc2VyaWFsaXplTGF5ZXJzKHRoaXMuX29yZGVyKSk7XG5cbiAgICAgICAgdGhpcy5saWdodCA9IG5ldyBMaWdodCh0aGlzLnN0eWxlc2hlZXQubGlnaHQpO1xuXG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGEnLCB7ZGF0YVR5cGU6ICdzdHlsZSd9KSk7XG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3N0eWxlLmxvYWQnKSk7XG4gICAgfVxuXG4gICAgX2xvYWRTcHJpdGUodXJsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fc3ByaXRlUmVxdWVzdCA9IGxvYWRTcHJpdGUodXJsLCB0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIsIChlcnIsIGltYWdlcykgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc3ByaXRlUmVxdWVzdCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KGVycikpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpbWFnZXMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGlkIGluIGltYWdlcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmltYWdlTWFuYWdlci5hZGRJbWFnZShpZCwgaW1hZ2VzW2lkXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmltYWdlTWFuYWdlci5zZXRMb2FkZWQodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLl9hdmFpbGFibGVJbWFnZXMgPSB0aGlzLmltYWdlTWFuYWdlci5saXN0SW1hZ2VzKCk7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoZXIuYnJvYWRjYXN0KCdzZXRJbWFnZXMnLCB0aGlzLl9hdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZGF0YScsIHtkYXRhVHlwZTogJ3N0eWxlJ30pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX3ZhbGlkYXRlTGF5ZXIobGF5ZXI6IFN0eWxlTGF5ZXIpIHtcbiAgICAgICAgY29uc3Qgc291cmNlQ2FjaGUgPSB0aGlzLnNvdXJjZUNhY2hlc1tsYXllci5zb3VyY2VdO1xuICAgICAgICBpZiAoIXNvdXJjZUNhY2hlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzb3VyY2VMYXllciA9IGxheWVyLnNvdXJjZUxheWVyO1xuICAgICAgICBpZiAoIXNvdXJjZUxheWVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzb3VyY2UgPSBzb3VyY2VDYWNoZS5nZXRTb3VyY2UoKTtcbiAgICAgICAgaWYgKHNvdXJjZS50eXBlID09PSAnZ2VvanNvbicgfHwgKHNvdXJjZS52ZWN0b3JMYXllcklkcyAmJiBzb3VyY2UudmVjdG9yTGF5ZXJJZHMuaW5kZXhPZihzb3VyY2VMYXllcikgPT09IC0xKSkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgU291cmNlIGxheWVyIFwiJHtzb3VyY2VMYXllcn1cIiBgICtcbiAgICAgICAgICAgICAgICBgZG9lcyBub3QgZXhpc3Qgb24gc291cmNlIFwiJHtzb3VyY2UuaWR9XCIgYCArXG4gICAgICAgICAgICAgICAgYGFzIHNwZWNpZmllZCBieSBzdHlsZSBsYXllciBcIiR7bGF5ZXIuaWR9XCJgXG4gICAgICAgICAgICApKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsb2FkZWQoKSB7XG4gICAgICAgIGlmICghdGhpcy5fbG9hZGVkKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLl91cGRhdGVkU291cmNlcykubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5zb3VyY2VDYWNoZXMpXG4gICAgICAgICAgICBpZiAoIXRoaXMuc291cmNlQ2FjaGVzW2lkXS5sb2FkZWQoKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgaWYgKCF0aGlzLmltYWdlTWFuYWdlci5pc0xvYWRlZCgpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIF9zZXJpYWxpemVMYXllcnMoaWRzOiBBcnJheTxzdHJpbmc+KTogQXJyYXk8T2JqZWN0PiB7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWRMYXllcnMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBpZCBvZiBpZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJzW2lkXTtcbiAgICAgICAgICAgIGlmIChsYXllci50eXBlICE9PSAnY3VzdG9tJykge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWRMYXllcnMucHVzaChsYXllci5zZXJpYWxpemUoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZWRMYXllcnM7XG4gICAgfVxuXG4gICAgaGFzVHJhbnNpdGlvbnMoKSB7XG4gICAgICAgIGlmICh0aGlzLmxpZ2h0ICYmIHRoaXMubGlnaHQuaGFzVHJhbnNpdGlvbigpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5zb3VyY2VDYWNoZXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZUNhY2hlc1tpZF0uaGFzVHJhbnNpdGlvbigpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuX2xheWVycykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2xheWVyc1tpZF0uaGFzVHJhbnNpdGlvbigpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgX2NoZWNrTG9hZGVkKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2xvYWRlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdHlsZSBpcyBub3QgZG9uZSBsb2FkaW5nJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBcHBseSBxdWV1ZWQgc3R5bGUgdXBkYXRlcyBpbiBhIGJhdGNoIGFuZCByZWNhbGN1bGF0ZSB6b29tLWRlcGVuZGVudCBwYWludCBwcm9wZXJ0aWVzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdXBkYXRlKHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzKSB7XG4gICAgICAgIGlmICghdGhpcy5fbG9hZGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy5fY2hhbmdlZDtcbiAgICAgICAgaWYgKHRoaXMuX2NoYW5nZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRJZHMgPSBPYmplY3Qua2V5cyh0aGlzLl91cGRhdGVkTGF5ZXJzKTtcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZWRJZHMgPSBPYmplY3Qua2V5cyh0aGlzLl9yZW1vdmVkTGF5ZXJzKTtcblxuICAgICAgICAgICAgaWYgKHVwZGF0ZWRJZHMubGVuZ3RoIHx8IHJlbW92ZWRJZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlV29ya2VyTGF5ZXJzKHVwZGF0ZWRJZHMsIHJlbW92ZWRJZHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLl91cGRhdGVkU291cmNlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuX3VwZGF0ZWRTb3VyY2VzW2lkXTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYWN0aW9uID09PSAncmVsb2FkJyB8fCBhY3Rpb24gPT09ICdjbGVhcicpO1xuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24gPT09ICdyZWxvYWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbG9hZFNvdXJjZShpZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICdjbGVhcicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2xlYXJTb3VyY2UoaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlVGlsZXNGb3JDaGFuZ2VkSW1hZ2VzKCk7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5fdXBkYXRlZFBhaW50UHJvcHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sYXllcnNbaWRdLnVwZGF0ZVRyYW5zaXRpb25zKHBhcmFtZXRlcnMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmxpZ2h0LnVwZGF0ZVRyYW5zaXRpb25zKHBhcmFtZXRlcnMpO1xuXG4gICAgICAgICAgICB0aGlzLl9yZXNldFVwZGF0ZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3Qgc291cmNlSWQgaW4gdGhpcy5zb3VyY2VDYWNoZXMpIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVzW3NvdXJjZUlkXS51c2VkID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGxheWVySWQgb2YgdGhpcy5fb3JkZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJzW2xheWVySWRdO1xuXG4gICAgICAgICAgICBsYXllci5yZWNhbGN1bGF0ZShwYXJhbWV0ZXJzLCB0aGlzLl9hdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICAgICAgaWYgKCFsYXllci5pc0hpZGRlbihwYXJhbWV0ZXJzLnpvb20pICYmIGxheWVyLnNvdXJjZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVzW2xheWVyLnNvdXJjZV0udXNlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxpZ2h0LnJlY2FsY3VsYXRlKHBhcmFtZXRlcnMpO1xuICAgICAgICB0aGlzLnogPSBwYXJhbWV0ZXJzLnpvb207XG5cbiAgICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGEnLCB7ZGF0YVR5cGU6ICdzdHlsZSd9KSk7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIC8qXG4gICAgICogQXBwbHkgYW55IHF1ZXVlZCBpbWFnZSBjaGFuZ2VzLlxuICAgICAqL1xuICAgIF91cGRhdGVUaWxlc0ZvckNoYW5nZWRJbWFnZXMoKSB7XG4gICAgICAgIGNvbnN0IGNoYW5nZWRJbWFnZXMgPSBPYmplY3Qua2V5cyh0aGlzLl9jaGFuZ2VkSW1hZ2VzKTtcbiAgICAgICAgaWYgKGNoYW5nZWRJbWFnZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gdGhpcy5zb3VyY2VDYWNoZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZUNhY2hlc1tuYW1lXS5yZWxvYWRUaWxlc0ZvckRlcGVuZGVuY2llcyhbJ2ljb25zJywgJ3BhdHRlcm5zJ10sIGNoYW5nZWRJbWFnZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fY2hhbmdlZEltYWdlcyA9IHt9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3VwZGF0ZVdvcmtlckxheWVycyh1cGRhdGVkSWRzOiBBcnJheTxzdHJpbmc+LCByZW1vdmVkSWRzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlci5icm9hZGNhc3QoJ3VwZGF0ZUxheWVycycsIHtcbiAgICAgICAgICAgIGxheWVyczogdGhpcy5fc2VyaWFsaXplTGF5ZXJzKHVwZGF0ZWRJZHMpLFxuICAgICAgICAgICAgcmVtb3ZlZElkc1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfcmVzZXRVcGRhdGVzKCkge1xuICAgICAgICB0aGlzLl9jaGFuZ2VkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5fdXBkYXRlZExheWVycyA9IHt9O1xuICAgICAgICB0aGlzLl9yZW1vdmVkTGF5ZXJzID0ge307XG5cbiAgICAgICAgdGhpcy5fdXBkYXRlZFNvdXJjZXMgPSB7fTtcbiAgICAgICAgdGhpcy5fdXBkYXRlZFBhaW50UHJvcHMgPSB7fTtcblxuICAgICAgICB0aGlzLl9jaGFuZ2VkSW1hZ2VzID0ge307XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlIHRoaXMgc3R5bGUncyBzdGF0ZSB0byBtYXRjaCB0aGUgZ2l2ZW4gc3R5bGUgSlNPTiwgcGVyZm9ybWluZyBvbmx5XG4gICAgICogdGhlIG5lY2Vzc2FyeSBtdXRhdGlvbnMuXG4gICAgICpcbiAgICAgKiBNYXkgdGhyb3cgYW4gRXJyb3IgKCdVbmltcGxlbWVudGVkOiBNRVRIT0QnKSBpZiB0aGUgbWFwYm94LWdsLXN0eWxlLXNwZWNcbiAgICAgKiBkaWZmIGFsZ29yaXRobSBwcm9kdWNlcyBhbiBvcGVyYXRpb24gdGhhdCBpcyBub3Qgc3VwcG9ydGVkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgYW55IGNoYW5nZXMgd2VyZSBtYWRlOyBmYWxzZSBvdGhlcndpc2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHNldFN0YXRlKG5leHRTdGF0ZTogU3R5bGVTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHRoaXMuX2NoZWNrTG9hZGVkKCk7XG5cbiAgICAgICAgaWYgKGVtaXRWYWxpZGF0aW9uRXJyb3JzKHRoaXMsIHZhbGlkYXRlU3R5bGUobmV4dFN0YXRlKSkpIHJldHVybiBmYWxzZTtcblxuICAgICAgICBuZXh0U3RhdGUgPSBjbG9uZShuZXh0U3RhdGUpO1xuICAgICAgICBuZXh0U3RhdGUubGF5ZXJzID0gZGVyZWYobmV4dFN0YXRlLmxheWVycyk7XG5cbiAgICAgICAgY29uc3QgY2hhbmdlcyA9IGRpZmZTdHlsZXModGhpcy5zZXJpYWxpemUoKSwgbmV4dFN0YXRlKVxuICAgICAgICAgICAgLmZpbHRlcihvcCA9PiAhKG9wLmNvbW1hbmQgaW4gaWdub3JlZERpZmZPcGVyYXRpb25zKSk7XG5cbiAgICAgICAgaWYgKGNoYW5nZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1bmltcGxlbWVudGVkT3BzID0gY2hhbmdlcy5maWx0ZXIob3AgPT4gIShvcC5jb21tYW5kIGluIHN1cHBvcnRlZERpZmZPcGVyYXRpb25zKSk7XG4gICAgICAgIGlmICh1bmltcGxlbWVudGVkT3BzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDogJHt1bmltcGxlbWVudGVkT3BzLm1hcChvcCA9PiBvcC5jb21tYW5kKS5qb2luKCcsICcpfS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoYW5nZXMuZm9yRWFjaCgob3ApID0+IHtcbiAgICAgICAgICAgIGlmIChvcC5jb21tYW5kID09PSAnc2V0VHJhbnNpdGlvbicpIHtcbiAgICAgICAgICAgICAgICAvLyBgdHJhbnNpdGlvbmAgaXMgYWx3YXlzIHJlYWQgZGlyZWN0bHkgb2ZmIG9mXG4gICAgICAgICAgICAgICAgLy8gYHRoaXMuc3R5bGVzaGVldGAsIHdoaWNoIHdlIHVwZGF0ZSBiZWxvd1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICh0aGlzOiBhbnkpW29wLmNvbW1hbmRdLmFwcGx5KHRoaXMsIG9wLmFyZ3MpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnN0eWxlc2hlZXQgPSBuZXh0U3RhdGU7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgYWRkSW1hZ2UoaWQ6IHN0cmluZywgaW1hZ2U6IFN0eWxlSW1hZ2UpIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0SW1hZ2UoaWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcignQW4gaW1hZ2Ugd2l0aCB0aGlzIG5hbWUgYWxyZWFkeSBleGlzdHMuJykpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmltYWdlTWFuYWdlci5hZGRJbWFnZShpZCwgaW1hZ2UpO1xuICAgICAgICB0aGlzLl9hdmFpbGFibGVJbWFnZXMgPSB0aGlzLmltYWdlTWFuYWdlci5saXN0SW1hZ2VzKCk7XG4gICAgICAgIHRoaXMuX2NoYW5nZWRJbWFnZXNbaWRdID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGEnLCB7ZGF0YVR5cGU6ICdzdHlsZSd9KSk7XG4gICAgfVxuXG4gICAgdXBkYXRlSW1hZ2UoaWQ6IHN0cmluZywgaW1hZ2U6IFN0eWxlSW1hZ2UpIHtcbiAgICAgICAgdGhpcy5pbWFnZU1hbmFnZXIudXBkYXRlSW1hZ2UoaWQsIGltYWdlKTtcbiAgICB9XG5cbiAgICBnZXRJbWFnZShpZDogc3RyaW5nKTogP1N0eWxlSW1hZ2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5pbWFnZU1hbmFnZXIuZ2V0SW1hZ2UoaWQpO1xuICAgIH1cblxuICAgIHJlbW92ZUltYWdlKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCF0aGlzLmdldEltYWdlKGlkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoJ05vIGltYWdlIHdpdGggdGhpcyBuYW1lIGV4aXN0cy4nKSkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW1hZ2VNYW5hZ2VyLnJlbW92ZUltYWdlKGlkKTtcbiAgICAgICAgdGhpcy5fYXZhaWxhYmxlSW1hZ2VzID0gdGhpcy5pbWFnZU1hbmFnZXIubGlzdEltYWdlcygpO1xuICAgICAgICB0aGlzLl9jaGFuZ2VkSW1hZ2VzW2lkXSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NoYW5nZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhJywge2RhdGFUeXBlOiAnc3R5bGUnfSkpO1xuICAgIH1cblxuICAgIGxpc3RJbWFnZXMoKSB7XG4gICAgICAgIHRoaXMuX2NoZWNrTG9hZGVkKCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2VNYW5hZ2VyLmxpc3RJbWFnZXMoKTtcbiAgICB9XG5cbiAgICBhZGRTb3VyY2UoaWQ6IHN0cmluZywgc291cmNlOiBTb3VyY2VTcGVjaWZpY2F0aW9uLCBvcHRpb25zOiBTdHlsZVNldHRlck9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLl9jaGVja0xvYWRlZCgpO1xuXG4gICAgICAgIGlmICh0aGlzLnNvdXJjZUNhY2hlc1tpZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGVyZSBpcyBhbHJlYWR5IGEgc291cmNlIHdpdGggdGhpcyBJRCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzb3VyY2UudHlwZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgdHlwZSBwcm9wZXJ0eSBtdXN0IGJlIGRlZmluZWQsIGJ1dCB0aGUgb25seSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMgd2VyZSBnaXZlbjogJHtPYmplY3Qua2V5cyhzb3VyY2UpLmpvaW4oJywgJyl9LmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnVpbHRJbnMgPSBbJ3ZlY3RvcicsICdyYXN0ZXInLCAnZ2VvanNvbicsICd2aWRlbycsICdpbWFnZSddO1xuICAgICAgICBjb25zdCBzaG91bGRWYWxpZGF0ZSA9IGJ1aWx0SW5zLmluZGV4T2Yoc291cmNlLnR5cGUpID49IDA7XG4gICAgICAgIGlmIChzaG91bGRWYWxpZGF0ZSAmJiB0aGlzLl92YWxpZGF0ZSh2YWxpZGF0ZVN0eWxlLnNvdXJjZSwgYHNvdXJjZXMuJHtpZH1gLCBzb3VyY2UsIG51bGwsIG9wdGlvbnMpKSByZXR1cm47XG5cbiAgICAgICAgaWYgKHRoaXMubWFwICYmIHRoaXMubWFwLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmcpIChzb3VyY2U6IGFueSkuY29sbGVjdFJlc291cmNlVGltaW5nID0gdHJ1ZTtcbiAgICAgICAgY29uc3Qgc291cmNlQ2FjaGUgPSB0aGlzLnNvdXJjZUNhY2hlc1tpZF0gPSBuZXcgU291cmNlQ2FjaGUoaWQsIHNvdXJjZSwgdGhpcy5kaXNwYXRjaGVyKTtcbiAgICAgICAgc291cmNlQ2FjaGUuc3R5bGUgPSB0aGlzO1xuICAgICAgICBzb3VyY2VDYWNoZS5zZXRFdmVudGVkUGFyZW50KHRoaXMsICgpID0+ICh7XG4gICAgICAgICAgICBpc1NvdXJjZUxvYWRlZDogdGhpcy5sb2FkZWQoKSxcbiAgICAgICAgICAgIHNvdXJjZTogc291cmNlQ2FjaGUuc2VyaWFsaXplKCksXG4gICAgICAgICAgICBzb3VyY2VJZDogaWRcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHNvdXJjZUNhY2hlLm9uQWRkKHRoaXMubWFwKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGEgc291cmNlIGZyb20gdGhpcyBzdHlsZXNoZWV0LCBnaXZlbiBpdHMgaWQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIGlkIG9mIHRoZSBzb3VyY2UgdG8gcmVtb3ZlXG4gICAgICogQHRocm93cyB7RXJyb3J9IGlmIG5vIHNvdXJjZSBpcyBmb3VuZCB3aXRoIHRoZSBnaXZlbiBJRFxuICAgICAqIEByZXR1cm5zIHtNYXB9IFRoZSB7QGxpbmsgTWFwfSBvYmplY3QuXG4gICAgICovXG4gICAgcmVtb3ZlU291cmNlKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcblxuICAgICAgICBpZiAodGhpcy5zb3VyY2VDYWNoZXNbaWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlcmUgaXMgbm8gc291cmNlIHdpdGggdGhpcyBJRCcpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJJZCBpbiB0aGlzLl9sYXllcnMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9sYXllcnNbbGF5ZXJJZF0uc291cmNlID09PSBpZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBTb3VyY2UgXCIke2lkfVwiIGNhbm5vdCBiZSByZW1vdmVkIHdoaWxlIGxheWVyIFwiJHtsYXllcklkfVwiIGlzIHVzaW5nIGl0LmApKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzb3VyY2VDYWNoZSA9IHRoaXMuc291cmNlQ2FjaGVzW2lkXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuc291cmNlQ2FjaGVzW2lkXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3VwZGF0ZWRTb3VyY2VzW2lkXTtcbiAgICAgICAgc291cmNlQ2FjaGUuZmlyZShuZXcgRXZlbnQoJ2RhdGEnLCB7c291cmNlRGF0YVR5cGU6ICdtZXRhZGF0YScsIGRhdGFUeXBlOidzb3VyY2UnLCBzb3VyY2VJZDogaWR9KSk7XG4gICAgICAgIHNvdXJjZUNhY2hlLnNldEV2ZW50ZWRQYXJlbnQobnVsbCk7XG4gICAgICAgIHNvdXJjZUNhY2hlLmNsZWFyVGlsZXMoKTtcblxuICAgICAgICBpZiAoc291cmNlQ2FjaGUub25SZW1vdmUpIHNvdXJjZUNhY2hlLm9uUmVtb3ZlKHRoaXMubWFwKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBTZXQgdGhlIGRhdGEgb2YgYSBHZW9KU09OIHNvdXJjZSwgZ2l2ZW4gaXRzIGlkLlxuICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIGlkIG9mIHRoZSBzb3VyY2VcbiAgICAqIEBwYXJhbSB7R2VvSlNPTnxzdHJpbmd9IGRhdGEgR2VvSlNPTiBzb3VyY2VcbiAgICAqL1xuICAgIHNldEdlb0pTT05Tb3VyY2VEYXRhKGlkOiBzdHJpbmcsIGRhdGE6IEdlb0pTT04gfCBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcblxuICAgICAgICBhc3NlcnQodGhpcy5zb3VyY2VDYWNoZXNbaWRdICE9PSB1bmRlZmluZWQsICdUaGVyZSBpcyBubyBzb3VyY2Ugd2l0aCB0aGlzIElEJyk7XG4gICAgICAgIGNvbnN0IGdlb2pzb25Tb3VyY2U6IEdlb0pTT05Tb3VyY2UgPSAodGhpcy5zb3VyY2VDYWNoZXNbaWRdLmdldFNvdXJjZSgpOiBhbnkpO1xuICAgICAgICBhc3NlcnQoZ2VvanNvblNvdXJjZS50eXBlID09PSAnZ2VvanNvbicpO1xuXG4gICAgICAgIGdlb2pzb25Tb3VyY2Uuc2V0RGF0YShkYXRhKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGEgc291cmNlIGJ5IGlkLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBpZCBvZiB0aGUgZGVzaXJlZCBzb3VyY2VcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBzb3VyY2VcbiAgICAgKi9cbiAgICBnZXRTb3VyY2UoaWQ6IHN0cmluZyk6IE9iamVjdCB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvdXJjZUNhY2hlc1tpZF0gJiYgdGhpcy5zb3VyY2VDYWNoZXNbaWRdLmdldFNvdXJjZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCBhIGxheWVyIHRvIHRoZSBtYXAgc3R5bGUuIFRoZSBsYXllciB3aWxsIGJlIGluc2VydGVkIGJlZm9yZSB0aGUgbGF5ZXIgd2l0aFxuICAgICAqIElEIGBiZWZvcmVgLCBvciBhcHBlbmRlZCBpZiBgYmVmb3JlYCBpcyBvbWl0dGVkLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0IHwgQ3VzdG9tTGF5ZXJJbnRlcmZhY2V9IGxheWVyT2JqZWN0IFRoZSBzdHlsZSBsYXllciB0byBhZGQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtiZWZvcmVdIElEIG9mIGFuIGV4aXN0aW5nIGxheWVyIHRvIGluc2VydCBiZWZvcmVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBTdHlsZSBzZXR0ZXIgb3B0aW9ucy5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBUaGUge0BsaW5rIE1hcH0gb2JqZWN0LlxuICAgICAqL1xuICAgIGFkZExheWVyKGxheWVyT2JqZWN0OiBMYXllclNwZWNpZmljYXRpb24gfCBDdXN0b21MYXllckludGVyZmFjZSwgYmVmb3JlPzogc3RyaW5nLCBvcHRpb25zOiBTdHlsZVNldHRlck9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLl9jaGVja0xvYWRlZCgpO1xuXG4gICAgICAgIGNvbnN0IGlkID0gbGF5ZXJPYmplY3QuaWQ7XG5cbiAgICAgICAgaWYgKHRoaXMuZ2V0TGF5ZXIoaWQpKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBMYXllciB3aXRoIGlkIFwiJHtpZH1cIiBhbHJlYWR5IGV4aXN0cyBvbiB0aGlzIG1hcGApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbGF5ZXI7XG4gICAgICAgIGlmIChsYXllck9iamVjdC50eXBlID09PSAnY3VzdG9tJykge1xuXG4gICAgICAgICAgICBpZiAoZW1pdFZhbGlkYXRpb25FcnJvcnModGhpcywgdmFsaWRhdGVDdXN0b21TdHlsZUxheWVyKGxheWVyT2JqZWN0KSkpIHJldHVybjtcblxuICAgICAgICAgICAgbGF5ZXIgPSBjcmVhdGVTdHlsZUxheWVyKGxheWVyT2JqZWN0KTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBsYXllck9iamVjdC5zb3VyY2UgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRTb3VyY2UoaWQsIGxheWVyT2JqZWN0LnNvdXJjZSk7XG4gICAgICAgICAgICAgICAgbGF5ZXJPYmplY3QgPSBjbG9uZShsYXllck9iamVjdCk7XG4gICAgICAgICAgICAgICAgbGF5ZXJPYmplY3QgPSAoZXh0ZW5kKGxheWVyT2JqZWN0LCB7c291cmNlOiBpZH0pOiBhbnkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyB0aGlzIGxheWVyIGlzIG5vdCBpbiB0aGUgc3R5bGUubGF5ZXJzIGFycmF5LCBzbyB3ZSBwYXNzIGFuIGltcG9zc2libGUgYXJyYXkgaW5kZXhcbiAgICAgICAgICAgIGlmICh0aGlzLl92YWxpZGF0ZSh2YWxpZGF0ZVN0eWxlLmxheWVyLFxuICAgICAgICAgICAgICAgIGBsYXllcnMuJHtpZH1gLCBsYXllck9iamVjdCwge2FycmF5SW5kZXg6IC0xfSwgb3B0aW9ucykpIHJldHVybjtcblxuICAgICAgICAgICAgbGF5ZXIgPSBjcmVhdGVTdHlsZUxheWVyKGxheWVyT2JqZWN0KTtcbiAgICAgICAgICAgIHRoaXMuX3ZhbGlkYXRlTGF5ZXIobGF5ZXIpO1xuXG4gICAgICAgICAgICBsYXllci5zZXRFdmVudGVkUGFyZW50KHRoaXMsIHtsYXllcjoge2lkfX0pO1xuICAgICAgICAgICAgdGhpcy5fc2VyaWFsaXplZExheWVyc1tsYXllci5pZF0gPSBsYXllci5zZXJpYWxpemUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluZGV4ID0gYmVmb3JlID8gdGhpcy5fb3JkZXIuaW5kZXhPZihiZWZvcmUpIDogdGhpcy5fb3JkZXIubGVuZ3RoO1xuICAgICAgICBpZiAoYmVmb3JlICYmIGluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgTGF5ZXIgd2l0aCBpZCBcIiR7YmVmb3JlfVwiIGRvZXMgbm90IGV4aXN0IG9uIHRoaXMgbWFwLmApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9vcmRlci5zcGxpY2UoaW5kZXgsIDAsIGlkKTtcbiAgICAgICAgdGhpcy5fbGF5ZXJPcmRlckNoYW5nZWQgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuX2xheWVyc1tpZF0gPSBsYXllcjtcblxuICAgICAgICBpZiAodGhpcy5fcmVtb3ZlZExheWVyc1tpZF0gJiYgbGF5ZXIuc291cmNlICYmIGxheWVyLnR5cGUgIT09ICdjdXN0b20nKSB7XG4gICAgICAgICAgICAvLyBJZiwgaW4gdGhlIGN1cnJlbnQgYmF0Y2gsIHdlIGhhdmUgYWxyZWFkeSByZW1vdmVkIHRoaXMgbGF5ZXJcbiAgICAgICAgICAgIC8vIGFuZCB3ZSBhcmUgbm93IHJlLWFkZGluZyBpdCB3aXRoIGEgZGlmZmVyZW50IGB0eXBlYCwgdGhlbiB3ZVxuICAgICAgICAgICAgLy8gbmVlZCB0byBjbGVhciAocmF0aGVyIHRoYW4ganVzdCByZWxvYWQpIHRoZSB1bmRlcnlsaW5nIHNvdXJjZSdzXG4gICAgICAgICAgICAvLyB0aWxlcy4gIE90aGVyd2lzZSwgdGlsZXMgbWFya2VkICdyZWxvYWRpbmcnIHdpbGwgaGF2ZSBidWNrZXRzIC9cbiAgICAgICAgICAgIC8vIGJ1ZmZlcnMgdGhhdCBhcmUgc2V0IHVwIGZvciB0aGUgX3ByZXZpb3VzXyB2ZXJzaW9uIG9mIHRoaXNcbiAgICAgICAgICAgIC8vIGxheWVyLCBjYXVzaW5nLCBlLmcuOlxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzM2MzNcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZWQgPSB0aGlzLl9yZW1vdmVkTGF5ZXJzW2lkXTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9yZW1vdmVkTGF5ZXJzW2lkXTtcbiAgICAgICAgICAgIGlmIChyZW1vdmVkLnR5cGUgIT09IGxheWVyLnR5cGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVkU291cmNlc1tsYXllci5zb3VyY2VdID0gJ2NsZWFyJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlZFNvdXJjZXNbbGF5ZXIuc291cmNlXSA9ICdyZWxvYWQnO1xuICAgICAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVzW2xheWVyLnNvdXJjZV0ucGF1c2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl91cGRhdGVMYXllcihsYXllcik7XG5cbiAgICAgICAgaWYgKGxheWVyLm9uQWRkKSB7XG4gICAgICAgICAgICBsYXllci5vbkFkZCh0aGlzLm1hcCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNb3ZlcyBhIGxheWVyIHRvIGEgZGlmZmVyZW50IHotcG9zaXRpb24uIFRoZSBsYXllciB3aWxsIGJlIGluc2VydGVkIGJlZm9yZSB0aGUgbGF5ZXIgd2l0aFxuICAgICAqIElEIGBiZWZvcmVgLCBvciBhcHBlbmRlZCBpZiBgYmVmb3JlYCBpcyBvbWl0dGVkLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCAgSUQgb2YgdGhlIGxheWVyIHRvIG1vdmVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2JlZm9yZV0gSUQgb2YgYW4gZXhpc3RpbmcgbGF5ZXIgdG8gaW5zZXJ0IGJlZm9yZVxuICAgICAqL1xuICAgIG1vdmVMYXllcihpZDogc3RyaW5nLCBiZWZvcmU/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlZCA9IHRydWU7XG5cbiAgICAgICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllcnNbaWRdO1xuICAgICAgICBpZiAoIWxheWVyKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBUaGUgbGF5ZXIgJyR7aWR9JyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSBtb3ZlZC5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlkID09PSBiZWZvcmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fb3JkZXIuaW5kZXhPZihpZCk7XG4gICAgICAgIHRoaXMuX29yZGVyLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICAgICAgY29uc3QgbmV3SW5kZXggPSBiZWZvcmUgPyB0aGlzLl9vcmRlci5pbmRleE9mKGJlZm9yZSkgOiB0aGlzLl9vcmRlci5sZW5ndGg7XG4gICAgICAgIGlmIChiZWZvcmUgJiYgbmV3SW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBMYXllciB3aXRoIGlkIFwiJHtiZWZvcmV9XCIgZG9lcyBub3QgZXhpc3Qgb24gdGhpcyBtYXAuYCkpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9vcmRlci5zcGxpY2UobmV3SW5kZXgsIDAsIGlkKTtcblxuICAgICAgICB0aGlzLl9sYXllck9yZGVyQ2hhbmdlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIHRoZSBsYXllciB3aXRoIHRoZSBnaXZlbiBpZCBmcm9tIHRoZSBzdHlsZS5cbiAgICAgKlxuICAgICAqIElmIG5vIHN1Y2ggbGF5ZXIgZXhpc3RzLCBhbiBgZXJyb3JgIGV2ZW50IGlzIGZpcmVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIGlkIG9mIHRoZSBsYXllciB0byByZW1vdmVcbiAgICAgKiBAZmlyZXMgZXJyb3JcbiAgICAgKi9cbiAgICByZW1vdmVMYXllcihpZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2NoZWNrTG9hZGVkKCk7XG5cbiAgICAgICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllcnNbaWRdO1xuICAgICAgICBpZiAoIWxheWVyKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBUaGUgbGF5ZXIgJyR7aWR9JyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSByZW1vdmVkLmApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsYXllci5zZXRFdmVudGVkUGFyZW50KG51bGwpO1xuXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fb3JkZXIuaW5kZXhPZihpZCk7XG4gICAgICAgIHRoaXMuX29yZGVyLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICAgICAgdGhpcy5fbGF5ZXJPcmRlckNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fcmVtb3ZlZExheWVyc1tpZF0gPSBsYXllcjtcbiAgICAgICAgZGVsZXRlIHRoaXMuX2xheWVyc1tpZF07XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9zZXJpYWxpemVkTGF5ZXJzW2lkXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3VwZGF0ZWRMYXllcnNbaWRdO1xuICAgICAgICBkZWxldGUgdGhpcy5fdXBkYXRlZFBhaW50UHJvcHNbaWRdO1xuXG4gICAgICAgIGlmIChsYXllci5vblJlbW92ZSkge1xuICAgICAgICAgICAgbGF5ZXIub25SZW1vdmUodGhpcy5tYXApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBzdHlsZSBsYXllciBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gYGlkYC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIGlkIG9mIHRoZSBkZXNpcmVkIGxheWVyXG4gICAgICogQHJldHVybnMgez9PYmplY3R9IGEgbGF5ZXIsIGlmIG9uZSB3aXRoIHRoZSBnaXZlbiBgaWRgIGV4aXN0c1xuICAgICAqL1xuICAgIGdldExheWVyKGlkOiBzdHJpbmcpOiBPYmplY3Qge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGF5ZXJzW2lkXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjaGVja3MgaWYgYSBzcGVjaWZpYyBsYXllciBpcyBwcmVzZW50IHdpdGhpbiB0aGUgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBpZCBvZiB0aGUgZGVzaXJlZCBsYXllclxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBhIGJvb2xlYW4gc3BlY2lmeWluZyBpZiB0aGUgZ2l2ZW4gbGF5ZXIgaXMgcHJlc2VudFxuICAgICAqL1xuICAgIGhhc0xheWVyKGlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGlkIGluIHRoaXMuX2xheWVycztcbiAgICB9XG5cbiAgICBzZXRMYXllclpvb21SYW5nZShsYXllcklkOiBzdHJpbmcsIG1pbnpvb206ID9udW1iZXIsIG1heHpvb206ID9udW1iZXIpIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcblxuICAgICAgICBjb25zdCBsYXllciA9IHRoaXMuZ2V0TGF5ZXIobGF5ZXJJZCk7XG4gICAgICAgIGlmICghbGF5ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYFRoZSBsYXllciAnJHtsYXllcklkfScgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgaGF2ZSB6b29tIGV4dGVudC5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxheWVyLm1pbnpvb20gPT09IG1pbnpvb20gJiYgbGF5ZXIubWF4em9vbSA9PT0gbWF4em9vbSkgcmV0dXJuO1xuXG4gICAgICAgIGlmIChtaW56b29tICE9IG51bGwpIHtcbiAgICAgICAgICAgIGxheWVyLm1pbnpvb20gPSBtaW56b29tO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXh6b29tICE9IG51bGwpIHtcbiAgICAgICAgICAgIGxheWVyLm1heHpvb20gPSBtYXh6b29tO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3VwZGF0ZUxheWVyKGxheWVyKTtcbiAgICB9XG5cbiAgICBzZXRGaWx0ZXIobGF5ZXJJZDogc3RyaW5nLCBmaWx0ZXI6ID9GaWx0ZXJTcGVjaWZpY2F0aW9uLCAgb3B0aW9uczogU3R5bGVTZXR0ZXJPcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcblxuICAgICAgICBjb25zdCBsYXllciA9IHRoaXMuZ2V0TGF5ZXIobGF5ZXJJZCk7XG4gICAgICAgIGlmICghbGF5ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYFRoZSBsYXllciAnJHtsYXllcklkfScgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgYmUgZmlsdGVyZWQuYCkpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZWVwRXF1YWwobGF5ZXIuZmlsdGVyLCBmaWx0ZXIpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsdGVyID09PSBudWxsIHx8IGZpbHRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsYXllci5maWx0ZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVMYXllcihsYXllcik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fdmFsaWRhdGUodmFsaWRhdGVTdHlsZS5maWx0ZXIsIGBsYXllcnMuJHtsYXllci5pZH0uZmlsdGVyYCwgZmlsdGVyLCBudWxsLCBvcHRpb25zKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGF5ZXIuZmlsdGVyID0gY2xvbmUoZmlsdGVyKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlTGF5ZXIobGF5ZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBhIGxheWVyJ3MgZmlsdGVyIG9iamVjdFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllciB0aGUgbGF5ZXIgdG8gaW5zcGVjdFxuICAgICAqIEByZXR1cm5zIHsqfSB0aGUgbGF5ZXIncyBmaWx0ZXIsIGlmIGFueVxuICAgICAqL1xuICAgIGdldEZpbHRlcihsYXllcjogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBjbG9uZSh0aGlzLmdldExheWVyKGxheWVyKS5maWx0ZXIpO1xuICAgIH1cblxuICAgIHNldExheW91dFByb3BlcnR5KGxheWVySWQ6IHN0cmluZywgbmFtZTogc3RyaW5nLCB2YWx1ZTogYW55LCAgb3B0aW9uczogU3R5bGVTZXR0ZXJPcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcblxuICAgICAgICBjb25zdCBsYXllciA9IHRoaXMuZ2V0TGF5ZXIobGF5ZXJJZCk7XG4gICAgICAgIGlmICghbGF5ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYFRoZSBsYXllciAnJHtsYXllcklkfScgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgYmUgc3R5bGVkLmApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVlcEVxdWFsKGxheWVyLmdldExheW91dFByb3BlcnR5KG5hbWUpLCB2YWx1ZSkpIHJldHVybjtcblxuICAgICAgICBsYXllci5zZXRMYXlvdXRQcm9wZXJ0eShuYW1lLCB2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUxheWVyKGxheWVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgYSBsYXlvdXQgcHJvcGVydHkncyB2YWx1ZSBmcm9tIGEgZ2l2ZW4gbGF5ZXJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJJZCB0aGUgbGF5ZXIgdG8gaW5zcGVjdFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBsYXlvdXQgcHJvcGVydHlcbiAgICAgKiBAcmV0dXJucyB7Kn0gdGhlIHByb3BlcnR5IHZhbHVlXG4gICAgICovXG4gICAgZ2V0TGF5b3V0UHJvcGVydHkobGF5ZXJJZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgbGF5ZXIgPSB0aGlzLmdldExheWVyKGxheWVySWQpO1xuICAgICAgICBpZiAoIWxheWVyKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBUaGUgbGF5ZXIgJyR7bGF5ZXJJZH0nIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZS5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxheWVyLmdldExheW91dFByb3BlcnR5KG5hbWUpO1xuICAgIH1cblxuICAgIHNldFBhaW50UHJvcGVydHkobGF5ZXJJZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksIG9wdGlvbnM6IFN0eWxlU2V0dGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMuX2NoZWNrTG9hZGVkKCk7XG5cbiAgICAgICAgY29uc3QgbGF5ZXIgPSB0aGlzLmdldExheWVyKGxheWVySWQpO1xuICAgICAgICBpZiAoIWxheWVyKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBUaGUgbGF5ZXIgJyR7bGF5ZXJJZH0nIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGJlIHN0eWxlZC5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlZXBFcXVhbChsYXllci5nZXRQYWludFByb3BlcnR5KG5hbWUpLCB2YWx1ZSkpIHJldHVybjtcblxuICAgICAgICBjb25zdCByZXF1aXJlc1JlbGF5b3V0ID0gbGF5ZXIuc2V0UGFpbnRQcm9wZXJ0eShuYW1lLCB2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICAgIGlmIChyZXF1aXJlc1JlbGF5b3V0KSB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVMYXllcihsYXllcik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fdXBkYXRlZFBhaW50UHJvcHNbbGF5ZXJJZF0gPSB0cnVlO1xuICAgIH1cblxuICAgIGdldFBhaW50UHJvcGVydHkobGF5ZXI6IHN0cmluZywgbmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldExheWVyKGxheWVyKS5nZXRQYWludFByb3BlcnR5KG5hbWUpO1xuICAgIH1cblxuICAgIHNldEZlYXR1cmVTdGF0ZSh0YXJnZXQ6IHsgc291cmNlOiBzdHJpbmc7IHNvdXJjZUxheWVyPzogc3RyaW5nOyBpZDogc3RyaW5nIHwgbnVtYmVyOyB9LCBzdGF0ZTogT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuX2NoZWNrTG9hZGVkKCk7XG4gICAgICAgIGNvbnN0IHNvdXJjZUlkID0gdGFyZ2V0LnNvdXJjZTtcbiAgICAgICAgY29uc3Qgc291cmNlTGF5ZXIgPSB0YXJnZXQuc291cmNlTGF5ZXI7XG4gICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlID0gdGhpcy5zb3VyY2VDYWNoZXNbc291cmNlSWRdO1xuXG4gICAgICAgIGlmIChzb3VyY2VDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBUaGUgc291cmNlICcke3NvdXJjZUlkfScgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlLmApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc291cmNlVHlwZSA9IHNvdXJjZUNhY2hlLmdldFNvdXJjZSgpLnR5cGU7XG4gICAgICAgIGlmIChzb3VyY2VUeXBlID09PSAnZ2VvanNvbicgJiYgc291cmNlTGF5ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYEdlb0pTT04gc291cmNlcyBjYW5ub3QgaGF2ZSBhIHNvdXJjZUxheWVyIHBhcmFtZXRlci5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzb3VyY2VUeXBlID09PSAndmVjdG9yJyAmJiAhc291cmNlTGF5ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYFRoZSBzb3VyY2VMYXllciBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZCBmb3IgdmVjdG9yIHNvdXJjZSB0eXBlcy5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0YXJnZXQuaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgVGhlIGZlYXR1cmUgaWQgcGFyYW1ldGVyIG11c3QgYmUgcHJvdmlkZWQuYCkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNvdXJjZUNhY2hlLnNldEZlYXR1cmVTdGF0ZShzb3VyY2VMYXllciwgdGFyZ2V0LmlkLCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlRmVhdHVyZVN0YXRlKHRhcmdldDogeyBzb3VyY2U6IHN0cmluZzsgc291cmNlTGF5ZXI/OiBzdHJpbmc7IGlkPzogc3RyaW5nIHwgbnVtYmVyOyB9LCBrZXk/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcbiAgICAgICAgY29uc3Qgc291cmNlSWQgPSB0YXJnZXQuc291cmNlO1xuICAgICAgICBjb25zdCBzb3VyY2VDYWNoZSA9IHRoaXMuc291cmNlQ2FjaGVzW3NvdXJjZUlkXTtcblxuICAgICAgICBpZiAoc291cmNlQ2FjaGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgVGhlIHNvdXJjZSAnJHtzb3VyY2VJZH0nIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZS5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc291cmNlVHlwZSA9IHNvdXJjZUNhY2hlLmdldFNvdXJjZSgpLnR5cGU7XG4gICAgICAgIGNvbnN0IHNvdXJjZUxheWVyID0gc291cmNlVHlwZSA9PT0gJ3ZlY3RvcicgPyB0YXJnZXQuc291cmNlTGF5ZXIgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKHNvdXJjZVR5cGUgPT09ICd2ZWN0b3InICYmICFzb3VyY2VMYXllcikge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgVGhlIHNvdXJjZUxheWVyIHBhcmFtZXRlciBtdXN0IGJlIHByb3ZpZGVkIGZvciB2ZWN0b3Igc291cmNlIHR5cGVzLmApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5ICYmICh0eXBlb2YgdGFyZ2V0LmlkICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgdGFyZ2V0LmlkICE9PSAnbnVtYmVyJykpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYEEgZmVhdHVyZSBpZCBpcyByZXF1cmVkIHRvIHJlbW92ZSBpdHMgc3BlY2lmaWMgc3RhdGUgcHJvcGVydHkuYCkpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHNvdXJjZUNhY2hlLnJlbW92ZUZlYXR1cmVTdGF0ZShzb3VyY2VMYXllciwgdGFyZ2V0LmlkLCBrZXkpO1xuICAgIH1cblxuICAgIGdldEZlYXR1cmVTdGF0ZSh0YXJnZXQ6IHsgc291cmNlOiBzdHJpbmc7IHNvdXJjZUxheWVyPzogc3RyaW5nOyBpZDogc3RyaW5nIHwgbnVtYmVyOyB9KSB7XG4gICAgICAgIHRoaXMuX2NoZWNrTG9hZGVkKCk7XG4gICAgICAgIGNvbnN0IHNvdXJjZUlkID0gdGFyZ2V0LnNvdXJjZTtcbiAgICAgICAgY29uc3Qgc291cmNlTGF5ZXIgPSB0YXJnZXQuc291cmNlTGF5ZXI7XG4gICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlID0gdGhpcy5zb3VyY2VDYWNoZXNbc291cmNlSWRdO1xuXG4gICAgICAgIGlmIChzb3VyY2VDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBUaGUgc291cmNlICcke3NvdXJjZUlkfScgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlLmApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc291cmNlVHlwZSA9IHNvdXJjZUNhY2hlLmdldFNvdXJjZSgpLnR5cGU7XG4gICAgICAgIGlmIChzb3VyY2VUeXBlID09PSAndmVjdG9yJyAmJiAhc291cmNlTGF5ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYFRoZSBzb3VyY2VMYXllciBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZCBmb3IgdmVjdG9yIHNvdXJjZSB0eXBlcy5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0YXJnZXQuaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgVGhlIGZlYXR1cmUgaWQgcGFyYW1ldGVyIG11c3QgYmUgcHJvdmlkZWQuYCkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzb3VyY2VDYWNoZS5nZXRGZWF0dXJlU3RhdGUoc291cmNlTGF5ZXIsIHRhcmdldC5pZCk7XG4gICAgfVxuXG4gICAgZ2V0VHJhbnNpdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGV4dGVuZCh7ZHVyYXRpb246IDMwMCwgZGVsYXk6IDB9LCB0aGlzLnN0eWxlc2hlZXQgJiYgdGhpcy5zdHlsZXNoZWV0LnRyYW5zaXRpb24pO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlck9iamVjdCh7XG4gICAgICAgICAgICB2ZXJzaW9uOiB0aGlzLnN0eWxlc2hlZXQudmVyc2lvbixcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuc3R5bGVzaGVldC5uYW1lLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHRoaXMuc3R5bGVzaGVldC5tZXRhZGF0YSxcbiAgICAgICAgICAgIGxpZ2h0OiB0aGlzLnN0eWxlc2hlZXQubGlnaHQsXG4gICAgICAgICAgICBjZW50ZXI6IHRoaXMuc3R5bGVzaGVldC5jZW50ZXIsXG4gICAgICAgICAgICB6b29tOiB0aGlzLnN0eWxlc2hlZXQuem9vbSxcbiAgICAgICAgICAgIGJlYXJpbmc6IHRoaXMuc3R5bGVzaGVldC5iZWFyaW5nLFxuICAgICAgICAgICAgcGl0Y2g6IHRoaXMuc3R5bGVzaGVldC5waXRjaCxcbiAgICAgICAgICAgIHNwcml0ZTogdGhpcy5zdHlsZXNoZWV0LnNwcml0ZSxcbiAgICAgICAgICAgIGdseXBoczogdGhpcy5zdHlsZXNoZWV0LmdseXBocyxcbiAgICAgICAgICAgIHRyYW5zaXRpb246IHRoaXMuc3R5bGVzaGVldC50cmFuc2l0aW9uLFxuICAgICAgICAgICAgc291cmNlczogbWFwT2JqZWN0KHRoaXMuc291cmNlQ2FjaGVzLCAoc291cmNlKSA9PiBzb3VyY2Uuc2VyaWFsaXplKCkpLFxuICAgICAgICAgICAgbGF5ZXJzOiB0aGlzLl9zZXJpYWxpemVMYXllcnModGhpcy5fb3JkZXIpXG4gICAgICAgIH0sICh2YWx1ZSkgPT4geyByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZDsgfSk7XG4gICAgfVxuXG4gICAgX3VwZGF0ZUxheWVyKGxheWVyOiBTdHlsZUxheWVyKSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZWRMYXllcnNbbGF5ZXIuaWRdID0gdHJ1ZTtcbiAgICAgICAgaWYgKGxheWVyLnNvdXJjZSAmJiAhdGhpcy5fdXBkYXRlZFNvdXJjZXNbbGF5ZXIuc291cmNlXSAmJlxuICAgICAgICAgICAgLy9Ta2lwIGZvciByYXN0ZXIgbGF5ZXJzIChodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvNzg2NSlcbiAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVzW2xheWVyLnNvdXJjZV0uZ2V0U291cmNlKCkudHlwZSAhPT0gJ3Jhc3RlcicpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZWRTb3VyY2VzW2xheWVyLnNvdXJjZV0gPSAncmVsb2FkJztcbiAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVzW2xheWVyLnNvdXJjZV0ucGF1c2UoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBfZmxhdHRlbkFuZFNvcnRSZW5kZXJlZEZlYXR1cmVzKHNvdXJjZVJlc3VsdHM6IEFycmF5PGFueT4pIHtcbiAgICAgICAgLy8gRmVhdHVyZSBvcmRlciBpcyBjb21wbGljYXRlZC5cbiAgICAgICAgLy8gVGhlIG9yZGVyIGJldHdlZW4gZmVhdHVyZXMgaW4gdHdvIDJEIGxheWVycyBpcyBhbHdheXMgZGV0ZXJtaW5lZCBieSBsYXllciBvcmRlci5cbiAgICAgICAgLy8gVGhlIG9yZGVyIGJldHdlZW4gZmVhdHVyZXMgaW4gdHdvIDNEIGxheWVycyBpcyBhbHdheXMgZGV0ZXJtaW5lZCBieSBkZXB0aC5cbiAgICAgICAgLy8gVGhlIG9yZGVyIGJldHdlZW4gYSBmZWF0dXJlIGluIGEgMkQgbGF5ZXIgYW5kIGEgM0QgbGF5ZXIgaXMgdHJpY2t5OlxuICAgICAgICAvLyAgICAgIE1vc3Qgb2Z0ZW4gbGF5ZXIgb3JkZXIgZGV0ZXJtaW5lcyB0aGUgZmVhdHVyZSBvcmRlciBpbiB0aGlzIGNhc2UuIElmXG4gICAgICAgIC8vICAgICAgYSBsaW5lIGxheWVyIGlzIGFib3ZlIGEgZXh0cnVzaW9uIGxheWVyIHRoZSBsaW5lIGZlYXR1cmUgd2lsbCBiZSByZW5kZXJlZFxuICAgICAgICAvLyAgICAgIGFib3ZlIHRoZSBleHRydXNpb24uIElmIHRoZSBsaW5lIGxheWVyIGlzIGJlbG93IHRoZSBleHRydXNpb24gbGF5ZXIsXG4gICAgICAgIC8vICAgICAgaXQgd2lsbCBiZSByZW5kZXJlZCBiZWxvdyBpdC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgICBUaGVyZSBpcyBhIHdlaXJkIGNhc2UgdGhvdWdoLlxuICAgICAgICAvLyAgICAgIFlvdSBoYXZlIGxheWVycyBpbiB0aGlzIG9yZGVyOiBleHRydXNpb25fbGF5ZXJfYSwgbGluZV9sYXllciwgZXh0cnVzaW9uX2xheWVyX2JcbiAgICAgICAgLy8gICAgICBFYWNoIGxheWVyIGhhcyBhIGZlYXR1cmUgdGhhdCBvdmVybGFwcyB0aGUgb3RoZXIgZmVhdHVyZXMuXG4gICAgICAgIC8vICAgICAgVGhlIGZlYXR1cmUgaW4gZXh0cnVzaW9uX2xheWVyX2EgaXMgY2xvc2VyIHRoYW4gdGhlIGZlYXR1cmUgaW4gZXh0cnVzaW9uX2xheWVyX2Igc28gaXQgaXMgcmVuZGVyZWQgYWJvdmUuXG4gICAgICAgIC8vICAgICAgVGhlIGZlYXR1cmUgaW4gbGluZV9sYXllciBpcyByZW5kZXJlZCBhYm92ZSBleHRydXNpb25fbGF5ZXJfYS5cbiAgICAgICAgLy8gICAgICBUaGlzIG1lYW5zIHRoYXQgdGhhdCB0aGUgbGluZV9sYXllciBmZWF0dXJlIGlzIGFib3ZlIHRoZSBleHRydXNpb25fbGF5ZXJfYiBmZWF0dXJlIGRlc3BpdGVcbiAgICAgICAgLy8gICAgICBpdCBiZWluZyBpbiBhbiBlYXJsaWVyIGxheWVyLlxuXG4gICAgICAgIGNvbnN0IGlzTGF5ZXIzRCA9IGxheWVySWQgPT4gdGhpcy5fbGF5ZXJzW2xheWVySWRdLnR5cGUgPT09ICdmaWxsLWV4dHJ1c2lvbic7XG5cbiAgICAgICAgY29uc3QgbGF5ZXJJbmRleCA9IHt9O1xuICAgICAgICBjb25zdCBmZWF0dXJlczNEID0gW107XG4gICAgICAgIGZvciAobGV0IGwgPSB0aGlzLl9vcmRlci5sZW5ndGggLSAxOyBsID49IDA7IGwtLSkge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXJJZCA9IHRoaXMuX29yZGVyW2xdO1xuICAgICAgICAgICAgaWYgKGlzTGF5ZXIzRChsYXllcklkKSkge1xuICAgICAgICAgICAgICAgIGxheWVySW5kZXhbbGF5ZXJJZF0gPSBsO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc291cmNlUmVzdWx0IG9mIHNvdXJjZVJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGF5ZXJGZWF0dXJlcyA9IHNvdXJjZVJlc3VsdFtsYXllcklkXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxheWVyRmVhdHVyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmVhdHVyZVdyYXBwZXIgb2YgbGF5ZXJGZWF0dXJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzM0QucHVzaChmZWF0dXJlV3JhcHBlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmZWF0dXJlczNELnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBiLmludGVyc2VjdGlvblogLSBhLmludGVyc2VjdGlvblo7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGZlYXR1cmVzID0gW107XG4gICAgICAgIGZvciAobGV0IGwgPSB0aGlzLl9vcmRlci5sZW5ndGggLSAxOyBsID49IDA7IGwtLSkge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXJJZCA9IHRoaXMuX29yZGVyW2xdO1xuXG4gICAgICAgICAgICBpZiAoaXNMYXllcjNEKGxheWVySWQpKSB7XG4gICAgICAgICAgICAgICAgLy8gYWRkIGFsbCAzRCBmZWF0dXJlcyB0aGF0IGFyZSBpbiBvciBhYm92ZSB0aGUgY3VycmVudCBsYXllclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBmZWF0dXJlczNELmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvcG1vc3QzRCA9IGZlYXR1cmVzM0RbaV0uZmVhdHVyZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxheWVySW5kZXhbdG9wbW9zdDNELmxheWVyLmlkXSA8IGwpIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcy5wdXNoKHRvcG1vc3QzRCk7XG4gICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzM0QucG9wKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHNvdXJjZVJlc3VsdCBvZiBzb3VyY2VSZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxheWVyRmVhdHVyZXMgPSBzb3VyY2VSZXN1bHRbbGF5ZXJJZF07XG4gICAgICAgICAgICAgICAgICAgIGlmIChsYXllckZlYXR1cmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZlYXR1cmVXcmFwcGVyIG9mIGxheWVyRmVhdHVyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcy5wdXNoKGZlYXR1cmVXcmFwcGVyLmZlYXR1cmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZlYXR1cmVzO1xuICAgIH1cblxuICAgIHF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhxdWVyeUdlb21ldHJ5OiBhbnksIHBhcmFtczogYW55LCB0cmFuc2Zvcm06IFRyYW5zZm9ybSkge1xuICAgICAgICBpZiAocGFyYW1zICYmIHBhcmFtcy5maWx0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbGlkYXRlKHZhbGlkYXRlU3R5bGUuZmlsdGVyLCAncXVlcnlSZW5kZXJlZEZlYXR1cmVzLmZpbHRlcicsIHBhcmFtcy5maWx0ZXIsIG51bGwsIHBhcmFtcyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbmNsdWRlZFNvdXJjZXMgPSB7fTtcbiAgICAgICAgaWYgKHBhcmFtcyAmJiBwYXJhbXMubGF5ZXJzKSB7XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocGFyYW1zLmxheWVycykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKCdwYXJhbWV0ZXJzLmxheWVycyBtdXN0IGJlIGFuIEFycmF5LicpKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCBsYXllcklkIG9mIHBhcmFtcy5sYXllcnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyc1tsYXllcklkXTtcbiAgICAgICAgICAgICAgICBpZiAoIWxheWVyKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgbGF5ZXIgaXMgbm90IGluIHRoZSBzdHlsZS5sYXllcnMgYXJyYXlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgVGhlIGxheWVyICcke2xheWVySWR9JyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSBxdWVyaWVkIGZvciBmZWF0dXJlcy5gKSkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGluY2x1ZGVkU291cmNlc1tsYXllci5zb3VyY2VdID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNvdXJjZVJlc3VsdHMgPSBbXTtcblxuICAgICAgICBwYXJhbXMuYXZhaWxhYmxlSW1hZ2VzID0gdGhpcy5fYXZhaWxhYmxlSW1hZ2VzO1xuXG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5zb3VyY2VDYWNoZXMpIHtcbiAgICAgICAgICAgIGlmIChwYXJhbXMubGF5ZXJzICYmICFpbmNsdWRlZFNvdXJjZXNbaWRdKSBjb250aW51ZTtcbiAgICAgICAgICAgIHNvdXJjZVJlc3VsdHMucHVzaChcbiAgICAgICAgICAgICAgICBxdWVyeVJlbmRlcmVkRmVhdHVyZXMoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVzW2lkXSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGF5ZXJzLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXJpYWxpemVkTGF5ZXJzLFxuICAgICAgICAgICAgICAgICAgICBxdWVyeUdlb21ldHJ5LFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wbGFjZW1lbnQpIHtcbiAgICAgICAgICAgIC8vIElmIGEgcGxhY2VtZW50IGhhcyBydW4sIHF1ZXJ5IGFnYWluc3QgaXRzIENvbGxpc2lvbkluZGV4XG4gICAgICAgICAgICAvLyBmb3Igc3ltYm9sIHJlc3VsdHMsIGFuZCB0cmVhdCBpdCBhcyBhbiBleHRyYSBzb3VyY2UgdG8gbWVyZ2VcbiAgICAgICAgICAgIHNvdXJjZVJlc3VsdHMucHVzaChcbiAgICAgICAgICAgICAgICBxdWVyeVJlbmRlcmVkU3ltYm9scyhcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGF5ZXJzLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXJpYWxpemVkTGF5ZXJzLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZUNhY2hlcyxcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlHZW9tZXRyeSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsYWNlbWVudC5jb2xsaXNpb25JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbGFjZW1lbnQucmV0YWluZWRRdWVyeURhdGEpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZsYXR0ZW5BbmRTb3J0UmVuZGVyZWRGZWF0dXJlcyhzb3VyY2VSZXN1bHRzKTtcbiAgICB9XG5cbiAgICBxdWVyeVNvdXJjZUZlYXR1cmVzKHNvdXJjZUlEOiBzdHJpbmcsIHBhcmFtczogP3tzb3VyY2VMYXllcjogP3N0cmluZywgZmlsdGVyOiA/QXJyYXk8YW55PiwgdmFsaWRhdGU/OiBib29sZWFufSkge1xuICAgICAgICBpZiAocGFyYW1zICYmIHBhcmFtcy5maWx0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbGlkYXRlKHZhbGlkYXRlU3R5bGUuZmlsdGVyLCAncXVlcnlTb3VyY2VGZWF0dXJlcy5maWx0ZXInLCBwYXJhbXMuZmlsdGVyLCBudWxsLCBwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlID0gdGhpcy5zb3VyY2VDYWNoZXNbc291cmNlSURdO1xuICAgICAgICByZXR1cm4gc291cmNlQ2FjaGUgPyBxdWVyeVNvdXJjZUZlYXR1cmVzKHNvdXJjZUNhY2hlLCBwYXJhbXMpIDogW107XG4gICAgfVxuXG4gICAgYWRkU291cmNlVHlwZShuYW1lOiBzdHJpbmcsIFNvdXJjZVR5cGU6IFNvdXJjZUNsYXNzLCBjYWxsYmFjazogQ2FsbGJhY2s8dm9pZD4pIHtcbiAgICAgICAgaWYgKFN0eWxlLmdldFNvdXJjZVR5cGUobmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3IoYEEgc291cmNlIHR5cGUgY2FsbGVkIFwiJHtuYW1lfVwiIGFscmVhZHkgZXhpc3RzLmApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIFN0eWxlLnNldFNvdXJjZVR5cGUobmFtZSwgU291cmNlVHlwZSk7XG5cbiAgICAgICAgaWYgKCFTb3VyY2VUeXBlLndvcmtlclNvdXJjZVVSTCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kaXNwYXRjaGVyLmJyb2FkY2FzdCgnbG9hZFdvcmtlclNvdXJjZScsIHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB1cmw6IFNvdXJjZVR5cGUud29ya2VyU291cmNlVVJMXG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBnZXRMaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGlnaHQuZ2V0TGlnaHQoKTtcbiAgICB9XG5cbiAgICBzZXRMaWdodChsaWdodE9wdGlvbnM6IExpZ2h0U3BlY2lmaWNhdGlvbiwgb3B0aW9uczogU3R5bGVTZXR0ZXJPcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcblxuICAgICAgICBjb25zdCBsaWdodCA9IHRoaXMubGlnaHQuZ2V0TGlnaHQoKTtcbiAgICAgICAgbGV0IF91cGRhdGUgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbGlnaHRPcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAoIWRlZXBFcXVhbChsaWdodE9wdGlvbnNba2V5XSwgbGlnaHRba2V5XSkpIHtcbiAgICAgICAgICAgICAgICBfdXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIV91cGRhdGUpIHJldHVybjtcblxuICAgICAgICBjb25zdCBwYXJhbWV0ZXJzID0ge1xuICAgICAgICAgICAgbm93OiBicm93c2VyLm5vdygpLFxuICAgICAgICAgICAgdHJhbnNpdGlvbjogZXh0ZW5kKHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwLFxuICAgICAgICAgICAgICAgIGRlbGF5OiAwXG4gICAgICAgICAgICB9LCB0aGlzLnN0eWxlc2hlZXQudHJhbnNpdGlvbilcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmxpZ2h0LnNldExpZ2h0KGxpZ2h0T3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMubGlnaHQudXBkYXRlVHJhbnNpdGlvbnMocGFyYW1ldGVycyk7XG4gICAgfVxuXG4gICAgX3ZhbGlkYXRlKHZhbGlkYXRlOiBWYWxpZGF0b3IsIGtleTogc3RyaW5nLCB2YWx1ZTogYW55LCBwcm9wczogYW55LCBvcHRpb25zOiB7IHZhbGlkYXRlPzogYm9vbGVhbiB9ID0ge30pIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy52YWxpZGF0ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW1pdFZhbGlkYXRpb25FcnJvcnModGhpcywgdmFsaWRhdGUuY2FsbCh2YWxpZGF0ZVN0eWxlLCBleHRlbmQoe1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgc3R5bGU6IHRoaXMuc2VyaWFsaXplKCksXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIHN0eWxlU3BlY1xuICAgICAgICB9LCBwcm9wcykpKTtcbiAgICB9XG5cbiAgICBfcmVtb3ZlKCkge1xuICAgICAgICBpZiAodGhpcy5fcmVxdWVzdCkge1xuICAgICAgICAgICAgdGhpcy5fcmVxdWVzdC5jYW5jZWwoKTtcbiAgICAgICAgICAgIHRoaXMuX3JlcXVlc3QgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9zcHJpdGVSZXF1ZXN0KSB7XG4gICAgICAgICAgICB0aGlzLl9zcHJpdGVSZXF1ZXN0LmNhbmNlbCgpO1xuICAgICAgICAgICAgdGhpcy5fc3ByaXRlUmVxdWVzdCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcnRsVGV4dFBsdWdpbkV2ZW50ZWQub2ZmKCdwbHVnaW5TdGF0ZUNoYW5nZScsIHRoaXMuX3J0bFRleHRQbHVnaW5DYWxsYmFjayk7XG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJJZCBpbiB0aGlzLl9sYXllcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyOiBTdHlsZUxheWVyID0gdGhpcy5fbGF5ZXJzW2xheWVySWRdO1xuICAgICAgICAgICAgbGF5ZXIuc2V0RXZlbnRlZFBhcmVudChudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuc291cmNlQ2FjaGVzKSB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZUNhY2hlc1tpZF0uY2xlYXJUaWxlcygpO1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VDYWNoZXNbaWRdLnNldEV2ZW50ZWRQYXJlbnQobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbWFnZU1hbmFnZXIuc2V0RXZlbnRlZFBhcmVudChudWxsKTtcbiAgICAgICAgdGhpcy5zZXRFdmVudGVkUGFyZW50KG51bGwpO1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIucmVtb3ZlKCk7XG4gICAgfVxuXG4gICAgX2NsZWFyU291cmNlKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zb3VyY2VDYWNoZXNbaWRdLmNsZWFyVGlsZXMoKTtcbiAgICB9XG5cbiAgICBfcmVsb2FkU291cmNlKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zb3VyY2VDYWNoZXNbaWRdLnJlc3VtZSgpO1xuICAgICAgICB0aGlzLnNvdXJjZUNhY2hlc1tpZF0ucmVsb2FkKCk7XG4gICAgfVxuXG4gICAgX3VwZGF0ZVNvdXJjZXModHJhbnNmb3JtOiBUcmFuc2Zvcm0pIHtcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLnNvdXJjZUNhY2hlcykge1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VDYWNoZXNbaWRdLnVwZGF0ZSh0cmFuc2Zvcm0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2dlbmVyYXRlQ29sbGlzaW9uQm94ZXMoKSB7XG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5zb3VyY2VDYWNoZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbG9hZFNvdXJjZShpZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfdXBkYXRlUGxhY2VtZW50KHRyYW5zZm9ybTogVHJhbnNmb3JtLCBzaG93Q29sbGlzaW9uQm94ZXM6IGJvb2xlYW4sIGZhZGVEdXJhdGlvbjogbnVtYmVyLCBjcm9zc1NvdXJjZUNvbGxpc2lvbnM6IGJvb2xlYW4sIGZvcmNlRnVsbFBsYWNlbWVudDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIGxldCBzeW1ib2xCdWNrZXRzQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICBsZXQgcGxhY2VtZW50Q29tbWl0dGVkID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgbGF5ZXJUaWxlcyA9IHt9O1xuXG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJJRCBvZiB0aGlzLl9vcmRlcikge1xuICAgICAgICAgICAgY29uc3Qgc3R5bGVMYXllciA9IHRoaXMuX2xheWVyc1tsYXllcklEXTtcbiAgICAgICAgICAgIGlmIChzdHlsZUxheWVyLnR5cGUgIT09ICdzeW1ib2wnKSBjb250aW51ZTtcblxuICAgICAgICAgICAgaWYgKCFsYXllclRpbGVzW3N0eWxlTGF5ZXIuc291cmNlXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlID0gdGhpcy5zb3VyY2VDYWNoZXNbc3R5bGVMYXllci5zb3VyY2VdO1xuICAgICAgICAgICAgICAgIGxheWVyVGlsZXNbc3R5bGVMYXllci5zb3VyY2VdID0gc291cmNlQ2FjaGUuZ2V0UmVuZGVyYWJsZUlkcyh0cnVlKVxuICAgICAgICAgICAgICAgICAgICAubWFwKChpZCkgPT4gc291cmNlQ2FjaGUuZ2V0VGlsZUJ5SUQoaWQpKVxuICAgICAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gKGIudGlsZUlELm92ZXJzY2FsZWRaIC0gYS50aWxlSUQub3ZlcnNjYWxlZFopIHx8IChhLnRpbGVJRC5pc0xlc3NUaGFuKGIudGlsZUlEKSA/IC0xIDogMSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBsYXllckJ1Y2tldHNDaGFuZ2VkID0gdGhpcy5jcm9zc1RpbGVTeW1ib2xJbmRleC5hZGRMYXllcihzdHlsZUxheWVyLCBsYXllclRpbGVzW3N0eWxlTGF5ZXIuc291cmNlXSwgdHJhbnNmb3JtLmNlbnRlci5sbmcpO1xuICAgICAgICAgICAgc3ltYm9sQnVja2V0c0NoYW5nZWQgPSBzeW1ib2xCdWNrZXRzQ2hhbmdlZCB8fCBsYXllckJ1Y2tldHNDaGFuZ2VkO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3Jvc3NUaWxlU3ltYm9sSW5kZXgucHJ1bmVVbnVzZWRMYXllcnModGhpcy5fb3JkZXIpO1xuXG4gICAgICAgIC8vIEFueXRoaW5nIHRoYXQgY2hhbmdlcyBvdXIgXCJpbiBwcm9ncmVzc1wiIGxheWVyIGFuZCB0aWxlIGluZGljZXMgcmVxdWlyZXMgdXNcbiAgICAgICAgLy8gdG8gc3RhcnQgb3Zlci4gV2hlbiB3ZSBzdGFydCBvdmVyLCB3ZSBkbyBhIGZ1bGwgcGxhY2VtZW50IGluc3RlYWQgb2YgaW5jcmVtZW50YWxcbiAgICAgICAgLy8gdG8gcHJldmVudCBzdGFydmF0aW9uLlxuICAgICAgICAvLyBXZSBuZWVkIHRvIHJlc3RhcnQgcGxhY2VtZW50IHRvIGtlZXAgbGF5ZXIgaW5kaWNlcyBpbiBzeW5jLlxuICAgICAgICAvLyBBbHNvIGZvcmNlIGZ1bGwgcGxhY2VtZW50IHdoZW4gZmFkZUR1cmF0aW9uID09PSAwIHRvIGVuc3VyZSB0aGF0IG5ld2x5IGxvYWRlZFxuICAgICAgICAvLyB0aWxlcyB3aWxsIGZ1bGx5IGRpc3BsYXkgc3ltYm9scyBpbiB0aGVpciBmaXJzdCBmcmFtZVxuICAgICAgICBmb3JjZUZ1bGxQbGFjZW1lbnQgPSBmb3JjZUZ1bGxQbGFjZW1lbnQgfHwgdGhpcy5fbGF5ZXJPcmRlckNoYW5nZWQgfHwgZmFkZUR1cmF0aW9uID09PSAwO1xuXG4gICAgICAgIGlmIChmb3JjZUZ1bGxQbGFjZW1lbnQgfHwgIXRoaXMucGF1c2VhYmxlUGxhY2VtZW50IHx8ICh0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5pc0RvbmUoKSAmJiAhdGhpcy5wbGFjZW1lbnQuc3RpbGxSZWNlbnQoYnJvd3Nlci5ub3coKSwgdHJhbnNmb3JtLnpvb20pKSkge1xuICAgICAgICAgICAgdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQgPSBuZXcgUGF1c2VhYmxlUGxhY2VtZW50KHRyYW5zZm9ybSwgdGhpcy5fb3JkZXIsIGZvcmNlRnVsbFBsYWNlbWVudCwgc2hvd0NvbGxpc2lvbkJveGVzLCBmYWRlRHVyYXRpb24sIGNyb3NzU291cmNlQ29sbGlzaW9ucywgdGhpcy5wbGFjZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5fbGF5ZXJPcmRlckNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5pc0RvbmUoKSkge1xuICAgICAgICAgICAgLy8gdGhlIGxhc3QgcGxhY2VtZW50IGZpbmlzaGVkIHJ1bm5pbmcsIGJ1dCB0aGUgbmV4dCBvbmUgaGFzbsOiwoDCmXRcbiAgICAgICAgICAgIC8vIHN0YXJ0ZWQgeWV0IGJlY2F1c2Ugb2YgdGhlIGBzdGlsbFJlY2VudGAgY2hlY2sgaW1tZWRpYXRlbHlcbiAgICAgICAgICAgIC8vIGFib3ZlLCBzbyBtYXJrIGl0IHN0YWxlIHRvIGVuc3VyZSB0aGF0IHdlIHJlcXVlc3QgYW5vdGhlclxuICAgICAgICAgICAgLy8gcmVuZGVyIGZyYW1lXG4gICAgICAgICAgICB0aGlzLnBsYWNlbWVudC5zZXRTdGFsZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuY29udGludWVQbGFjZW1lbnQodGhpcy5fb3JkZXIsIHRoaXMuX2xheWVycywgbGF5ZXJUaWxlcyk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5pc0RvbmUoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGxhY2VtZW50ID0gdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuY29tbWl0KGJyb3dzZXIubm93KCkpO1xuICAgICAgICAgICAgICAgIHBsYWNlbWVudENvbW1pdHRlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzeW1ib2xCdWNrZXRzQ2hhbmdlZCkge1xuICAgICAgICAgICAgICAgIC8vIHNpbmNlIHRoZSBwbGFjZW1lbnQgZ2V0cyBzcGxpdCBvdmVyIG11bHRpcGxlIGZyYW1lcyBpdCBpcyBwb3NzaWJsZVxuICAgICAgICAgICAgICAgIC8vIHRoZXNlIGJ1Y2tldHMgd2VyZSBwcm9jZXNzZWQgYmVmb3JlIHRoZXkgd2VyZSBjaGFuZ2VkIGFuZCBzbyB0aGVcbiAgICAgICAgICAgICAgICAvLyBwbGFjZW1lbnQgaXMgYWxyZWFkeSBzdGFsZSB3aGlsZSBpdCBpcyBpbiBwcm9ncmVzc1xuICAgICAgICAgICAgICAgIHRoaXMucGF1c2VhYmxlUGxhY2VtZW50LnBsYWNlbWVudC5zZXRTdGFsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBsYWNlbWVudENvbW1pdHRlZCB8fCBzeW1ib2xCdWNrZXRzQ2hhbmdlZCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBsYXllcklEIG9mIHRoaXMuX29yZGVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3R5bGVMYXllciA9IHRoaXMuX2xheWVyc1tsYXllcklEXTtcbiAgICAgICAgICAgICAgICBpZiAoc3R5bGVMYXllci50eXBlICE9PSAnc3ltYm9sJykgY29udGludWU7XG4gICAgICAgICAgICAgICAgdGhpcy5wbGFjZW1lbnQudXBkYXRlTGF5ZXJPcGFjaXRpZXMoc3R5bGVMYXllciwgbGF5ZXJUaWxlc1tzdHlsZUxheWVyLnNvdXJjZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gbmVlZHNSZW5kZXIgaXMgZmFsc2Ugd2hlbiB3ZSBoYXZlIGp1c3QgZmluaXNoZWQgYSBwbGFjZW1lbnQgdGhhdCBkaWRuJ3QgY2hhbmdlIHRoZSB2aXNpYmlsaXR5IG9mIGFueSBzeW1ib2xzXG4gICAgICAgIGNvbnN0IG5lZWRzUmVyZW5kZXIgPSAhdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuaXNEb25lKCkgfHwgdGhpcy5wbGFjZW1lbnQuaGFzVHJhbnNpdGlvbnMoYnJvd3Nlci5ub3coKSk7XG4gICAgICAgIHJldHVybiBuZWVkc1JlcmVuZGVyO1xuICAgIH1cblxuICAgIF9yZWxlYXNlU3ltYm9sRmFkZVRpbGVzKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuc291cmNlQ2FjaGVzKSB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZUNhY2hlc1tpZF0ucmVsZWFzZVN5bWJvbEZhZGVUaWxlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2FsbGJhY2tzIGZyb20gd2ViIHdvcmtlcnNcblxuICAgIGdldEltYWdlcyhtYXBJZDogc3RyaW5nLCBwYXJhbXM6IHtpY29uczogQXJyYXk8c3RyaW5nPiwgc291cmNlOiBzdHJpbmcsIHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCwgdHlwZTogc3RyaW5nfSwgY2FsbGJhY2s6IENhbGxiYWNrPHtbXzogc3RyaW5nXTogU3R5bGVJbWFnZX0+KSB7XG5cbiAgICAgICAgdGhpcy5pbWFnZU1hbmFnZXIuZ2V0SW1hZ2VzKHBhcmFtcy5pY29ucywgY2FsbGJhY2spO1xuXG4gICAgICAgIC8vIEFwcGx5IHF1ZXVlZCBpbWFnZSBjaGFuZ2VzIGJlZm9yZSBzZXR0aW5nIHRoZSB0aWxlJ3MgZGVwZW5kZW5jaWVzIHNvIHRoYXQgdGhlIHRpbGVcbiAgICAgICAgLy8gaXMgbm90IHJlbG9hZGVkIHVuZWNlc3NhcmlseS4gV2l0aG91dCB0aGlzIGZvcmNlZCB1cGRhdGUgdGhlIHJlbG9hZCBjb3VsZCBoYXBwZW4gaW4gY2FzZXNcbiAgICAgICAgLy8gbGlrZSB0aGlzIG9uZTpcbiAgICAgICAgLy8gLSBpY29ucyBjb250YWlucyBcIm15LWltYWdlXCJcbiAgICAgICAgLy8gLSBpbWFnZU1hbmFnZXIuZ2V0SW1hZ2VzKC4uLikgdHJpZ2dlcnMgYG9uc3R5bGVpbWFnZW1pc3NpbmdgXG4gICAgICAgIC8vIC0gdGhlIHVzZXIgYWRkcyBcIm15LWltYWdlXCIgd2l0aGluIHRoZSBjYWxsYmFja1xuICAgICAgICAvLyAtIGFkZEltYWdlIGFkZHMgXCJteS1pbWFnZVwiIHRvIHRoaXMuX2NoYW5nZWRJbWFnZXNcbiAgICAgICAgLy8gLSB0aGUgbmV4dCBmcmFtZSB0cmlnZ2VycyBhIHJlbG9hZCBvZiB0aGlzIHRpbGUgZXZlbiB0aG91Z2ggaXQgYWxyZWFkeSBoYXMgdGhlIGxhdGVzdCB2ZXJzaW9uXG4gICAgICAgIHRoaXMuX3VwZGF0ZVRpbGVzRm9yQ2hhbmdlZEltYWdlcygpO1xuXG4gICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlID0gdGhpcy5zb3VyY2VDYWNoZXNbcGFyYW1zLnNvdXJjZV07XG4gICAgICAgIGlmIChzb3VyY2VDYWNoZSkge1xuICAgICAgICAgICAgc291cmNlQ2FjaGUuc2V0RGVwZW5kZW5jaWVzKHBhcmFtcy50aWxlSUQua2V5LCBwYXJhbXMudHlwZSwgcGFyYW1zLmljb25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEdseXBocyhtYXBJZDogc3RyaW5nLCBwYXJhbXM6IHtzdGFja3M6IHtbXzogc3RyaW5nXTogQXJyYXk8bnVtYmVyPn19LCBjYWxsYmFjazogQ2FsbGJhY2s8e1tfOiBzdHJpbmddOiB7W186IG51bWJlcl06ID9TdHlsZUdseXBofX0+KSB7XG4gICAgICAgIHRoaXMuZ2x5cGhNYW5hZ2VyLmdldEdseXBocyhwYXJhbXMuc3RhY2tzLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgZ2V0UmVzb3VyY2UobWFwSWQ6IHN0cmluZywgcGFyYW1zOiBSZXF1ZXN0UGFyYW1ldGVycywgY2FsbGJhY2s6IFJlc3BvbnNlQ2FsbGJhY2s8YW55Pik6IENhbmNlbGFibGUge1xuICAgICAgICByZXR1cm4gbWFrZVJlcXVlc3QocGFyYW1zLCBjYWxsYmFjayk7XG4gICAgfVxufVxuXG5TdHlsZS5nZXRTb3VyY2VUeXBlID0gZ2V0U291cmNlVHlwZTtcblN0eWxlLnNldFNvdXJjZVR5cGUgPSBzZXRTb3VyY2VUeXBlO1xuU3R5bGUucmVnaXN0ZXJGb3JQbHVnaW5TdGF0ZUNoYW5nZSA9IHJlZ2lzdGVyRm9yUGx1Z2luU3RhdGVDaGFuZ2U7XG5cbmV4cG9ydCBkZWZhdWx0IFN0eWxlO1xuIiwiLy8gQGZsb3dcbmltcG9ydCB7Y3JlYXRlTGF5b3V0fSBmcm9tICcuLi91dGlsL3N0cnVjdF9hcnJheSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUxheW91dChbXG4gICAge25hbWU6ICdhX3BvcycsIHR5cGU6ICdJbnQxNicsIGNvbXBvbmVudHM6IDJ9XG5dKTtcbiIsIlxuLy8gRGlzYWJsZSBGbG93IGFubm90YXRpb25zIGhlcmUgYmVjYXVzZSBGbG93IGRvZXNuJ3Qgc3VwcG9ydCBpbXBvcnRpbmcgR0xTTCBmaWxlc1xuLyogZXNsaW50LWRpc2FibGUgZmxvd3R5cGUvcmVxdWlyZS12YWxpZC1maWxlLWFubm90YXRpb24gKi9cblxuaW1wb3J0IHByZWx1ZGVGcmFnIGZyb20gJy4vX3ByZWx1ZGUuZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgcHJlbHVkZVZlcnQgZnJvbSAnLi9fcHJlbHVkZS52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgYmFja2dyb3VuZEZyYWcgZnJvbSAnLi9iYWNrZ3JvdW5kLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGJhY2tncm91bmRWZXJ0IGZyb20gJy4vYmFja2dyb3VuZC52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgYmFja2dyb3VuZFBhdHRlcm5GcmFnIGZyb20gJy4vYmFja2dyb3VuZF9wYXR0ZXJuLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGJhY2tncm91bmRQYXR0ZXJuVmVydCBmcm9tICcuL2JhY2tncm91bmRfcGF0dGVybi52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgY2lyY2xlRnJhZyBmcm9tICcuL2NpcmNsZS5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBjaXJjbGVWZXJ0IGZyb20gJy4vY2lyY2xlLnZlcnRleC5nbHNsJztcbmltcG9ydCBjbGlwcGluZ01hc2tGcmFnIGZyb20gJy4vY2xpcHBpbmdfbWFzay5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBjbGlwcGluZ01hc2tWZXJ0IGZyb20gJy4vY2xpcHBpbmdfbWFzay52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgaGVhdG1hcEZyYWcgZnJvbSAnLi9oZWF0bWFwLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGhlYXRtYXBWZXJ0IGZyb20gJy4vaGVhdG1hcC52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgaGVhdG1hcFRleHR1cmVGcmFnIGZyb20gJy4vaGVhdG1hcF90ZXh0dXJlLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGhlYXRtYXBUZXh0dXJlVmVydCBmcm9tICcuL2hlYXRtYXBfdGV4dHVyZS52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgY29sbGlzaW9uQm94RnJhZyBmcm9tICcuL2NvbGxpc2lvbl9ib3guZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgY29sbGlzaW9uQm94VmVydCBmcm9tICcuL2NvbGxpc2lvbl9ib3gudmVydGV4Lmdsc2wnO1xuaW1wb3J0IGNvbGxpc2lvbkNpcmNsZUZyYWcgZnJvbSAnLi9jb2xsaXNpb25fY2lyY2xlLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGNvbGxpc2lvbkNpcmNsZVZlcnQgZnJvbSAnLi9jb2xsaXNpb25fY2lyY2xlLnZlcnRleC5nbHNsJztcbmltcG9ydCBkZWJ1Z0ZyYWcgZnJvbSAnLi9kZWJ1Zy5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBkZWJ1Z1ZlcnQgZnJvbSAnLi9kZWJ1Zy52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgZmlsbEZyYWcgZnJvbSAnLi9maWxsLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGZpbGxWZXJ0IGZyb20gJy4vZmlsbC52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgZmlsbE91dGxpbmVGcmFnIGZyb20gJy4vZmlsbF9vdXRsaW5lLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGZpbGxPdXRsaW5lVmVydCBmcm9tICcuL2ZpbGxfb3V0bGluZS52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgZmlsbE91dGxpbmVQYXR0ZXJuRnJhZyBmcm9tICcuL2ZpbGxfb3V0bGluZV9wYXR0ZXJuLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGZpbGxPdXRsaW5lUGF0dGVyblZlcnQgZnJvbSAnLi9maWxsX291dGxpbmVfcGF0dGVybi52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgZmlsbFBhdHRlcm5GcmFnIGZyb20gJy4vZmlsbF9wYXR0ZXJuLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGZpbGxQYXR0ZXJuVmVydCBmcm9tICcuL2ZpbGxfcGF0dGVybi52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgZmlsbEV4dHJ1c2lvbkZyYWcgZnJvbSAnLi9maWxsX2V4dHJ1c2lvbi5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBmaWxsRXh0cnVzaW9uVmVydCBmcm9tICcuL2ZpbGxfZXh0cnVzaW9uLnZlcnRleC5nbHNsJztcbmltcG9ydCBmaWxsRXh0cnVzaW9uUGF0dGVybkZyYWcgZnJvbSAnLi9maWxsX2V4dHJ1c2lvbl9wYXR0ZXJuLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGZpbGxFeHRydXNpb25QYXR0ZXJuVmVydCBmcm9tICcuL2ZpbGxfZXh0cnVzaW9uX3BhdHRlcm4udmVydGV4Lmdsc2wnO1xuaW1wb3J0IGhpbGxzaGFkZVByZXBhcmVGcmFnIGZyb20gJy4vaGlsbHNoYWRlX3ByZXBhcmUuZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgaGlsbHNoYWRlUHJlcGFyZVZlcnQgZnJvbSAnLi9oaWxsc2hhZGVfcHJlcGFyZS52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgaGlsbHNoYWRlRnJhZyBmcm9tICcuL2hpbGxzaGFkZS5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBoaWxsc2hhZGVWZXJ0IGZyb20gJy4vaGlsbHNoYWRlLnZlcnRleC5nbHNsJztcbmltcG9ydCBsaW5lRnJhZyBmcm9tICcuL2xpbmUuZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgbGluZVZlcnQgZnJvbSAnLi9saW5lLnZlcnRleC5nbHNsJztcbmltcG9ydCBsaW5lR3JhZGllbnRGcmFnIGZyb20gJy4vbGluZV9ncmFkaWVudC5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBsaW5lR3JhZGllbnRWZXJ0IGZyb20gJy4vbGluZV9ncmFkaWVudC52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgbGluZVBhdHRlcm5GcmFnIGZyb20gJy4vbGluZV9wYXR0ZXJuLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGxpbmVQYXR0ZXJuVmVydCBmcm9tICcuL2xpbmVfcGF0dGVybi52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgbGluZVNERkZyYWcgZnJvbSAnLi9saW5lX3NkZi5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBsaW5lU0RGVmVydCBmcm9tICcuL2xpbmVfc2RmLnZlcnRleC5nbHNsJztcbmltcG9ydCByYXN0ZXJGcmFnIGZyb20gJy4vcmFzdGVyLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IHJhc3RlclZlcnQgZnJvbSAnLi9yYXN0ZXIudmVydGV4Lmdsc2wnO1xuaW1wb3J0IHN5bWJvbEljb25GcmFnIGZyb20gJy4vc3ltYm9sX2ljb24uZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgc3ltYm9sSWNvblZlcnQgZnJvbSAnLi9zeW1ib2xfaWNvbi52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgc3ltYm9sU0RGRnJhZyBmcm9tICcuL3N5bWJvbF9zZGYuZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgc3ltYm9sU0RGVmVydCBmcm9tICcuL3N5bWJvbF9zZGYudmVydGV4Lmdsc2wnO1xuaW1wb3J0IHN5bWJvbFRleHRBbmRJY29uRnJhZyBmcm9tICcuL3N5bWJvbF90ZXh0X2FuZF9pY29uLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IHN5bWJvbFRleHRBbmRJY29uVmVydCBmcm9tICcuL3N5bWJvbF90ZXh0X2FuZF9pY29uLnZlcnRleC5nbHNsJztcblxuZXhwb3J0IGNvbnN0IHByZWx1ZGUgPSBjb21waWxlKHByZWx1ZGVGcmFnLCBwcmVsdWRlVmVydCk7XG5leHBvcnQgY29uc3QgYmFja2dyb3VuZCA9IGNvbXBpbGUoYmFja2dyb3VuZEZyYWcsIGJhY2tncm91bmRWZXJ0KTtcbmV4cG9ydCBjb25zdCBiYWNrZ3JvdW5kUGF0dGVybiA9IGNvbXBpbGUoYmFja2dyb3VuZFBhdHRlcm5GcmFnLCBiYWNrZ3JvdW5kUGF0dGVyblZlcnQpO1xuZXhwb3J0IGNvbnN0IGNpcmNsZSA9IGNvbXBpbGUoY2lyY2xlRnJhZywgY2lyY2xlVmVydCk7XG5leHBvcnQgY29uc3QgY2xpcHBpbmdNYXNrID0gY29tcGlsZShjbGlwcGluZ01hc2tGcmFnLCBjbGlwcGluZ01hc2tWZXJ0KTtcbmV4cG9ydCBjb25zdCBoZWF0bWFwID0gY29tcGlsZShoZWF0bWFwRnJhZywgaGVhdG1hcFZlcnQpO1xuZXhwb3J0IGNvbnN0IGhlYXRtYXBUZXh0dXJlID0gY29tcGlsZShoZWF0bWFwVGV4dHVyZUZyYWcsIGhlYXRtYXBUZXh0dXJlVmVydCk7XG5leHBvcnQgY29uc3QgY29sbGlzaW9uQm94ID0gY29tcGlsZShjb2xsaXNpb25Cb3hGcmFnLCBjb2xsaXNpb25Cb3hWZXJ0KTtcbmV4cG9ydCBjb25zdCBjb2xsaXNpb25DaXJjbGUgPSBjb21waWxlKGNvbGxpc2lvbkNpcmNsZUZyYWcsIGNvbGxpc2lvbkNpcmNsZVZlcnQpO1xuZXhwb3J0IGNvbnN0IGRlYnVnID0gY29tcGlsZShkZWJ1Z0ZyYWcsIGRlYnVnVmVydCk7XG5leHBvcnQgY29uc3QgZmlsbCA9IGNvbXBpbGUoZmlsbEZyYWcsIGZpbGxWZXJ0KTtcbmV4cG9ydCBjb25zdCBmaWxsT3V0bGluZSA9IGNvbXBpbGUoZmlsbE91dGxpbmVGcmFnLCBmaWxsT3V0bGluZVZlcnQpO1xuZXhwb3J0IGNvbnN0IGZpbGxPdXRsaW5lUGF0dGVybiA9IGNvbXBpbGUoZmlsbE91dGxpbmVQYXR0ZXJuRnJhZywgZmlsbE91dGxpbmVQYXR0ZXJuVmVydCk7XG5leHBvcnQgY29uc3QgZmlsbFBhdHRlcm4gPSBjb21waWxlKGZpbGxQYXR0ZXJuRnJhZywgZmlsbFBhdHRlcm5WZXJ0KTtcbmV4cG9ydCBjb25zdCBmaWxsRXh0cnVzaW9uID0gY29tcGlsZShmaWxsRXh0cnVzaW9uRnJhZywgZmlsbEV4dHJ1c2lvblZlcnQpO1xuZXhwb3J0IGNvbnN0IGZpbGxFeHRydXNpb25QYXR0ZXJuID0gY29tcGlsZShmaWxsRXh0cnVzaW9uUGF0dGVybkZyYWcsIGZpbGxFeHRydXNpb25QYXR0ZXJuVmVydCk7XG5leHBvcnQgY29uc3QgaGlsbHNoYWRlUHJlcGFyZSA9IGNvbXBpbGUoaGlsbHNoYWRlUHJlcGFyZUZyYWcsIGhpbGxzaGFkZVByZXBhcmVWZXJ0KTtcbmV4cG9ydCBjb25zdCBoaWxsc2hhZGUgPSBjb21waWxlKGhpbGxzaGFkZUZyYWcsIGhpbGxzaGFkZVZlcnQpO1xuZXhwb3J0IGNvbnN0IGxpbmUgPSBjb21waWxlKGxpbmVGcmFnLCBsaW5lVmVydCk7XG5leHBvcnQgY29uc3QgbGluZUdyYWRpZW50ID0gY29tcGlsZShsaW5lR3JhZGllbnRGcmFnLCBsaW5lR3JhZGllbnRWZXJ0KTtcbmV4cG9ydCBjb25zdCBsaW5lUGF0dGVybiA9IGNvbXBpbGUobGluZVBhdHRlcm5GcmFnLCBsaW5lUGF0dGVyblZlcnQpO1xuZXhwb3J0IGNvbnN0IGxpbmVTREYgPSBjb21waWxlKGxpbmVTREZGcmFnLCBsaW5lU0RGVmVydCk7XG5leHBvcnQgY29uc3QgcmFzdGVyID0gY29tcGlsZShyYXN0ZXJGcmFnLCByYXN0ZXJWZXJ0KTtcbmV4cG9ydCBjb25zdCBzeW1ib2xJY29uID0gY29tcGlsZShzeW1ib2xJY29uRnJhZywgc3ltYm9sSWNvblZlcnQpO1xuZXhwb3J0IGNvbnN0IHN5bWJvbFNERiA9IGNvbXBpbGUoc3ltYm9sU0RGRnJhZywgc3ltYm9sU0RGVmVydCk7XG5leHBvcnQgY29uc3Qgc3ltYm9sVGV4dEFuZEljb24gPSBjb21waWxlKHN5bWJvbFRleHRBbmRJY29uRnJhZywgc3ltYm9sVGV4dEFuZEljb25WZXJ0KTtcblxuLy8gRXhwYW5kICNwcmFnbWFzIHRvICNpZmRlZnMuXG5cbmZ1bmN0aW9uIGNvbXBpbGUoZnJhZ21lbnRTb3VyY2UsIHZlcnRleFNvdXJjZSkge1xuICAgIGNvbnN0IHJlID0gLyNwcmFnbWEgbWFwYm94OiAoW1xcd10rKSAoW1xcd10rKSAoW1xcd10rKSAoW1xcd10rKS9nO1xuXG4gICAgY29uc3QgZnJhZ21lbnRQcmFnbWFzID0ge307XG5cbiAgICBmcmFnbWVudFNvdXJjZSA9IGZyYWdtZW50U291cmNlLnJlcGxhY2UocmUsIChtYXRjaCwgb3BlcmF0aW9uLCBwcmVjaXNpb24sIHR5cGUsIG5hbWUpID0+IHtcbiAgICAgICAgZnJhZ21lbnRQcmFnbWFzW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJ2RlZmluZScpIHtcbiAgICAgICAgICAgIHJldHVybiBgXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfJHtuYW1lfVxudmFyeWluZyAke3ByZWNpc2lvbn0gJHt0eXBlfSAke25hbWV9O1xuI2Vsc2VcbnVuaWZvcm0gJHtwcmVjaXNpb259ICR7dHlwZX0gdV8ke25hbWV9O1xuI2VuZGlmXG5gO1xuICAgICAgICB9IGVsc2UgLyogaWYgKG9wZXJhdGlvbiA9PT0gJ2luaXRpYWxpemUnKSAqLyB7XG4gICAgICAgICAgICByZXR1cm4gYFxuI2lmZGVmIEhBU19VTklGT1JNX3VfJHtuYW1lfVxuICAgICR7cHJlY2lzaW9ufSAke3R5cGV9ICR7bmFtZX0gPSB1XyR7bmFtZX07XG4jZW5kaWZcbmA7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHZlcnRleFNvdXJjZSA9IHZlcnRleFNvdXJjZS5yZXBsYWNlKHJlLCAobWF0Y2gsIG9wZXJhdGlvbiwgcHJlY2lzaW9uLCB0eXBlLCBuYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IGF0dHJUeXBlID0gdHlwZSA9PT0gJ2Zsb2F0JyA/ICd2ZWMyJyA6ICd2ZWM0JztcbiAgICAgICAgY29uc3QgdW5wYWNrVHlwZSA9IG5hbWUubWF0Y2goL2NvbG9yLykgPyAnY29sb3InIDogYXR0clR5cGU7XG5cbiAgICAgICAgaWYgKGZyYWdtZW50UHJhZ21hc1tuYW1lXSkge1xuICAgICAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJ2RlZmluZScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYFxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyR7bmFtZX1cbnVuaWZvcm0gbG93cCBmbG9hdCB1XyR7bmFtZX1fdDtcbmF0dHJpYnV0ZSAke3ByZWNpc2lvbn0gJHthdHRyVHlwZX0gYV8ke25hbWV9O1xudmFyeWluZyAke3ByZWNpc2lvbn0gJHt0eXBlfSAke25hbWV9O1xuI2Vsc2VcbnVuaWZvcm0gJHtwcmVjaXNpb259ICR7dHlwZX0gdV8ke25hbWV9O1xuI2VuZGlmXG5gO1xuICAgICAgICAgICAgfSBlbHNlIC8qIGlmIChvcGVyYXRpb24gPT09ICdpbml0aWFsaXplJykgKi8ge1xuICAgICAgICAgICAgICAgIGlmICh1bnBhY2tUeXBlID09PSAndmVjNCcpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdmVjNCBhdHRyaWJ1dGVzIGFyZSBvbmx5IHVzZWQgZm9yIGNyb3NzLWZhZGVkIHByb3BlcnRpZXMsIGFuZCBhcmUgbm90IHBhY2tlZFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyR7bmFtZX1cbiAgICAke25hbWV9ID0gYV8ke25hbWV9O1xuI2Vsc2VcbiAgICAke3ByZWNpc2lvbn0gJHt0eXBlfSAke25hbWV9ID0gdV8ke25hbWV9O1xuI2VuZGlmXG5gO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfJHtuYW1lfVxuICAgICR7bmFtZX0gPSB1bnBhY2tfbWl4XyR7dW5wYWNrVHlwZX0oYV8ke25hbWV9LCB1XyR7bmFtZX1fdCk7XG4jZWxzZVxuICAgICR7cHJlY2lzaW9ufSAke3R5cGV9ICR7bmFtZX0gPSB1XyR7bmFtZX07XG4jZW5kaWZcbmA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJ2RlZmluZScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYFxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyR7bmFtZX1cbnVuaWZvcm0gbG93cCBmbG9hdCB1XyR7bmFtZX1fdDtcbmF0dHJpYnV0ZSAke3ByZWNpc2lvbn0gJHthdHRyVHlwZX0gYV8ke25hbWV9O1xuI2Vsc2VcbnVuaWZvcm0gJHtwcmVjaXNpb259ICR7dHlwZX0gdV8ke25hbWV9O1xuI2VuZGlmXG5gO1xuICAgICAgICAgICAgfSBlbHNlIC8qIGlmIChvcGVyYXRpb24gPT09ICdpbml0aWFsaXplJykgKi8ge1xuICAgICAgICAgICAgICAgIGlmICh1bnBhY2tUeXBlID09PSAndmVjNCcpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdmVjNCBhdHRyaWJ1dGVzIGFyZSBvbmx5IHVzZWQgZm9yIGNyb3NzLWZhZGVkIHByb3BlcnRpZXMsIGFuZCBhcmUgbm90IHBhY2tlZFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyR7bmFtZX1cbiAgICAke3ByZWNpc2lvbn0gJHt0eXBlfSAke25hbWV9ID0gYV8ke25hbWV9O1xuI2Vsc2VcbiAgICAke3ByZWNpc2lvbn0gJHt0eXBlfSAke25hbWV9ID0gdV8ke25hbWV9O1xuI2VuZGlmXG5gO1xuICAgICAgICAgICAgICAgIH0gZWxzZSAvKiAqL3tcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcbiNpZm5kZWYgSEFTX1VOSUZPUk1fdV8ke25hbWV9XG4gICAgJHtwcmVjaXNpb259ICR7dHlwZX0gJHtuYW1lfSA9IHVucGFja19taXhfJHt1bnBhY2tUeXBlfShhXyR7bmFtZX0sIHVfJHtuYW1lfV90KTtcbiNlbHNlXG4gICAgJHtwcmVjaXNpb259ICR7dHlwZX0gJHtuYW1lfSA9IHVfJHtuYW1lfTtcbiNlbmRpZlxuYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB7ZnJhZ21lbnRTb3VyY2UsIHZlcnRleFNvdXJjZX07XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB0eXBlIFByb2dyYW0gZnJvbSAnLi9wcm9ncmFtJztcbmltcG9ydCB0eXBlIFZlcnRleEJ1ZmZlciBmcm9tICcuLi9nbC92ZXJ0ZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIEluZGV4QnVmZmVyIGZyb20gJy4uL2dsL2luZGV4X2J1ZmZlcic7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uL2dsL2NvbnRleHQnO1xuXG5jbGFzcyBWZXJ0ZXhBcnJheU9iamVjdCB7XG4gICAgY29udGV4dDogQ29udGV4dDtcbiAgICBib3VuZFByb2dyYW06ID9Qcm9ncmFtPCo+O1xuICAgIGJvdW5kTGF5b3V0VmVydGV4QnVmZmVyOiA/VmVydGV4QnVmZmVyO1xuICAgIGJvdW5kUGFpbnRWZXJ0ZXhCdWZmZXJzOiBBcnJheTxWZXJ0ZXhCdWZmZXI+O1xuICAgIGJvdW5kSW5kZXhCdWZmZXI6ID9JbmRleEJ1ZmZlcjtcbiAgICBib3VuZFZlcnRleE9mZnNldDogP251bWJlcjtcbiAgICBib3VuZER5bmFtaWNWZXJ0ZXhCdWZmZXI6ID9WZXJ0ZXhCdWZmZXI7XG4gICAgYm91bmREeW5hbWljVmVydGV4QnVmZmVyMjogP1ZlcnRleEJ1ZmZlcjtcbiAgICB2YW86IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmJvdW5kUHJvZ3JhbSA9IG51bGw7XG4gICAgICAgIHRoaXMuYm91bmRMYXlvdXRWZXJ0ZXhCdWZmZXIgPSBudWxsO1xuICAgICAgICB0aGlzLmJvdW5kUGFpbnRWZXJ0ZXhCdWZmZXJzID0gW107XG4gICAgICAgIHRoaXMuYm91bmRJbmRleEJ1ZmZlciA9IG51bGw7XG4gICAgICAgIHRoaXMuYm91bmRWZXJ0ZXhPZmZzZXQgPSBudWxsO1xuICAgICAgICB0aGlzLmJvdW5kRHluYW1pY1ZlcnRleEJ1ZmZlciA9IG51bGw7XG4gICAgICAgIHRoaXMudmFvID0gbnVsbDtcbiAgICB9XG5cbiAgICBiaW5kKGNvbnRleHQ6IENvbnRleHQsXG4gICAgICAgICBwcm9ncmFtOiBQcm9ncmFtPCo+LFxuICAgICAgICAgbGF5b3V0VmVydGV4QnVmZmVyOiBWZXJ0ZXhCdWZmZXIsXG4gICAgICAgICBwYWludFZlcnRleEJ1ZmZlcnM6IEFycmF5PFZlcnRleEJ1ZmZlcj4sXG4gICAgICAgICBpbmRleEJ1ZmZlcjogP0luZGV4QnVmZmVyLFxuICAgICAgICAgdmVydGV4T2Zmc2V0OiA/bnVtYmVyLFxuICAgICAgICAgZHluYW1pY1ZlcnRleEJ1ZmZlcjogP1ZlcnRleEJ1ZmZlcixcbiAgICAgICAgIGR5bmFtaWNWZXJ0ZXhCdWZmZXIyOiA/VmVydGV4QnVmZmVyKSB7XG5cbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcblxuICAgICAgICBsZXQgcGFpbnRCdWZmZXJzRGlmZmVyID0gdGhpcy5ib3VuZFBhaW50VmVydGV4QnVmZmVycy5sZW5ndGggIT09IHBhaW50VmVydGV4QnVmZmVycy5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyAhcGFpbnRCdWZmZXJzRGlmZmVyICYmIGkgPCBwYWludFZlcnRleEJ1ZmZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmJvdW5kUGFpbnRWZXJ0ZXhCdWZmZXJzW2ldICE9PSBwYWludFZlcnRleEJ1ZmZlcnNbaV0pIHtcbiAgICAgICAgICAgICAgICBwYWludEJ1ZmZlcnNEaWZmZXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNGcmVzaEJpbmRSZXF1aXJlZCA9IChcbiAgICAgICAgICAgICF0aGlzLnZhbyB8fFxuICAgICAgICAgICAgdGhpcy5ib3VuZFByb2dyYW0gIT09IHByb2dyYW0gfHxcbiAgICAgICAgICAgIHRoaXMuYm91bmRMYXlvdXRWZXJ0ZXhCdWZmZXIgIT09IGxheW91dFZlcnRleEJ1ZmZlciB8fFxuICAgICAgICAgICAgcGFpbnRCdWZmZXJzRGlmZmVyIHx8XG4gICAgICAgICAgICB0aGlzLmJvdW5kSW5kZXhCdWZmZXIgIT09IGluZGV4QnVmZmVyIHx8XG4gICAgICAgICAgICB0aGlzLmJvdW5kVmVydGV4T2Zmc2V0ICE9PSB2ZXJ0ZXhPZmZzZXQgfHxcbiAgICAgICAgICAgIHRoaXMuYm91bmREeW5hbWljVmVydGV4QnVmZmVyICE9PSBkeW5hbWljVmVydGV4QnVmZmVyIHx8XG4gICAgICAgICAgICB0aGlzLmJvdW5kRHluYW1pY1ZlcnRleEJ1ZmZlcjIgIT09IGR5bmFtaWNWZXJ0ZXhCdWZmZXIyXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFjb250ZXh0LmV4dFZlcnRleEFycmF5T2JqZWN0IHx8IGlzRnJlc2hCaW5kUmVxdWlyZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZnJlc2hCaW5kKHByb2dyYW0sIGxheW91dFZlcnRleEJ1ZmZlciwgcGFpbnRWZXJ0ZXhCdWZmZXJzLCBpbmRleEJ1ZmZlciwgdmVydGV4T2Zmc2V0LCBkeW5hbWljVmVydGV4QnVmZmVyLCBkeW5hbWljVmVydGV4QnVmZmVyMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250ZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUy5zZXQodGhpcy52YW8pO1xuXG4gICAgICAgICAgICBpZiAoZHluYW1pY1ZlcnRleEJ1ZmZlcikge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBidWZmZXIgbWF5IGhhdmUgYmVlbiB1cGRhdGVkLiBSZWJpbmQgdG8gdXBsb2FkIGRhdGEuXG4gICAgICAgICAgICAgICAgZHluYW1pY1ZlcnRleEJ1ZmZlci5iaW5kKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpbmRleEJ1ZmZlciAmJiBpbmRleEJ1ZmZlci5keW5hbWljRHJhdykge1xuICAgICAgICAgICAgICAgIGluZGV4QnVmZmVyLmJpbmQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGR5bmFtaWNWZXJ0ZXhCdWZmZXIyKSB7XG4gICAgICAgICAgICAgICAgZHluYW1pY1ZlcnRleEJ1ZmZlcjIuYmluZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnJlc2hCaW5kKHByb2dyYW06IFByb2dyYW08Kj4sXG4gICAgICAgICAgICAgIGxheW91dFZlcnRleEJ1ZmZlcjogVmVydGV4QnVmZmVyLFxuICAgICAgICAgICAgICBwYWludFZlcnRleEJ1ZmZlcnM6IEFycmF5PFZlcnRleEJ1ZmZlcj4sXG4gICAgICAgICAgICAgIGluZGV4QnVmZmVyOiA/SW5kZXhCdWZmZXIsXG4gICAgICAgICAgICAgIHZlcnRleE9mZnNldDogP251bWJlcixcbiAgICAgICAgICAgICAgZHluYW1pY1ZlcnRleEJ1ZmZlcjogP1ZlcnRleEJ1ZmZlcixcbiAgICAgICAgICAgICAgZHluYW1pY1ZlcnRleEJ1ZmZlcjI6ID9WZXJ0ZXhCdWZmZXIpIHtcbiAgICAgICAgbGV0IG51bVByZXZBdHRyaWJ1dGVzO1xuICAgICAgICBjb25zdCBudW1OZXh0QXR0cmlidXRlcyA9IHByb2dyYW0ubnVtQXR0cmlidXRlcztcblxuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jb250ZXh0O1xuICAgICAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG5cbiAgICAgICAgaWYgKGNvbnRleHQuZXh0VmVydGV4QXJyYXlPYmplY3QpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbykgdGhpcy5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLnZhbyA9IGNvbnRleHQuZXh0VmVydGV4QXJyYXlPYmplY3QuY3JlYXRlVmVydGV4QXJyYXlPRVMoKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmluZFZlcnRleEFycmF5T0VTLnNldCh0aGlzLnZhbyk7XG4gICAgICAgICAgICBudW1QcmV2QXR0cmlidXRlcyA9IDA7XG5cbiAgICAgICAgICAgIC8vIHN0b3JlIHRoZSBhcmd1bWVudHMgc28gdGhhdCB3ZSBjYW4gdmVyaWZ5IHRoZW0gd2hlbiB0aGUgdmFvIGlzIGJvdW5kIGFnYWluXG4gICAgICAgICAgICB0aGlzLmJvdW5kUHJvZ3JhbSA9IHByb2dyYW07XG4gICAgICAgICAgICB0aGlzLmJvdW5kTGF5b3V0VmVydGV4QnVmZmVyID0gbGF5b3V0VmVydGV4QnVmZmVyO1xuICAgICAgICAgICAgdGhpcy5ib3VuZFBhaW50VmVydGV4QnVmZmVycyA9IHBhaW50VmVydGV4QnVmZmVycztcbiAgICAgICAgICAgIHRoaXMuYm91bmRJbmRleEJ1ZmZlciA9IGluZGV4QnVmZmVyO1xuICAgICAgICAgICAgdGhpcy5ib3VuZFZlcnRleE9mZnNldCA9IHZlcnRleE9mZnNldDtcbiAgICAgICAgICAgIHRoaXMuYm91bmREeW5hbWljVmVydGV4QnVmZmVyID0gZHluYW1pY1ZlcnRleEJ1ZmZlcjtcbiAgICAgICAgICAgIHRoaXMuYm91bmREeW5hbWljVmVydGV4QnVmZmVyMiA9IGR5bmFtaWNWZXJ0ZXhCdWZmZXIyO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBudW1QcmV2QXR0cmlidXRlcyA9IGNvbnRleHQuY3VycmVudE51bUF0dHJpYnV0ZXMgfHwgMDtcblxuICAgICAgICAgICAgLy8gRGlzYWJsZSBhbGwgYXR0cmlidXRlcyBmcm9tIHRoZSBwcmV2aW91cyBwcm9ncmFtIHRoYXQgYXJlbid0IHVzZWQgaW5cbiAgICAgICAgICAgIC8vIHRoZSBuZXcgcHJvZ3JhbS4gTm90ZTogYXR0cmlidXRlIGluZGljZXMgYXJlICpub3QqIHByb2dyYW0gc3BlY2lmaWMhXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gbnVtTmV4dEF0dHJpYnV0ZXM7IGkgPCBudW1QcmV2QXR0cmlidXRlczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgLy8gV2ViR0wgYnJlYWtzIGlmIHlvdSBkaXNhYmxlIGF0dHJpYnV0ZSAwLlxuICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjAzMDUyMzFcbiAgICAgICAgICAgICAgICBhc3NlcnQoaSAhPT0gMCk7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGF5b3V0VmVydGV4QnVmZmVyLmVuYWJsZUF0dHJpYnV0ZXMoZ2wsIHByb2dyYW0pO1xuICAgICAgICBmb3IgKGNvbnN0IHZlcnRleEJ1ZmZlciBvZiBwYWludFZlcnRleEJ1ZmZlcnMpIHtcbiAgICAgICAgICAgIHZlcnRleEJ1ZmZlci5lbmFibGVBdHRyaWJ1dGVzKGdsLCBwcm9ncmFtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkeW5hbWljVmVydGV4QnVmZmVyKSB7XG4gICAgICAgICAgICBkeW5hbWljVmVydGV4QnVmZmVyLmVuYWJsZUF0dHJpYnV0ZXMoZ2wsIHByb2dyYW0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkeW5hbWljVmVydGV4QnVmZmVyMikge1xuICAgICAgICAgICAgZHluYW1pY1ZlcnRleEJ1ZmZlcjIuZW5hYmxlQXR0cmlidXRlcyhnbCwgcHJvZ3JhbSk7XG4gICAgICAgIH1cblxuICAgICAgICBsYXlvdXRWZXJ0ZXhCdWZmZXIuYmluZCgpO1xuICAgICAgICBsYXlvdXRWZXJ0ZXhCdWZmZXIuc2V0VmVydGV4QXR0cmliUG9pbnRlcnMoZ2wsIHByb2dyYW0sIHZlcnRleE9mZnNldCk7XG4gICAgICAgIGZvciAoY29uc3QgdmVydGV4QnVmZmVyIG9mIHBhaW50VmVydGV4QnVmZmVycykge1xuICAgICAgICAgICAgdmVydGV4QnVmZmVyLmJpbmQoKTtcbiAgICAgICAgICAgIHZlcnRleEJ1ZmZlci5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycyhnbCwgcHJvZ3JhbSwgdmVydGV4T2Zmc2V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkeW5hbWljVmVydGV4QnVmZmVyKSB7XG4gICAgICAgICAgICBkeW5hbWljVmVydGV4QnVmZmVyLmJpbmQoKTtcbiAgICAgICAgICAgIGR5bmFtaWNWZXJ0ZXhCdWZmZXIuc2V0VmVydGV4QXR0cmliUG9pbnRlcnMoZ2wsIHByb2dyYW0sIHZlcnRleE9mZnNldCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZGV4QnVmZmVyKSB7XG4gICAgICAgICAgICBpbmRleEJ1ZmZlci5iaW5kKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGR5bmFtaWNWZXJ0ZXhCdWZmZXIyKSB7XG4gICAgICAgICAgICBkeW5hbWljVmVydGV4QnVmZmVyMi5iaW5kKCk7XG4gICAgICAgICAgICBkeW5hbWljVmVydGV4QnVmZmVyMi5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycyhnbCwgcHJvZ3JhbSwgdmVydGV4T2Zmc2V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQuY3VycmVudE51bUF0dHJpYnV0ZXMgPSBudW1OZXh0QXR0cmlidXRlcztcbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy52YW8pIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5leHRWZXJ0ZXhBcnJheU9iamVjdC5kZWxldGVWZXJ0ZXhBcnJheU9FUyh0aGlzLnZhbyk7XG4gICAgICAgICAgICB0aGlzLnZhbyA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZlcnRleEFycmF5T2JqZWN0O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtwcmVsdWRlfSBmcm9tICcuLi9zaGFkZXJzJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBQcm9ncmFtQ29uZmlndXJhdGlvbiBmcm9tICcuLi9kYXRhL3Byb2dyYW1fY29uZmlndXJhdGlvbic7XG5pbXBvcnQgVmVydGV4QXJyYXlPYmplY3QgZnJvbSAnLi92ZXJ0ZXhfYXJyYXlfb2JqZWN0JztcbmltcG9ydCBDb250ZXh0IGZyb20gJy4uL2dsL2NvbnRleHQnO1xuXG5pbXBvcnQgdHlwZSBTZWdtZW50VmVjdG9yIGZyb20gJy4uL2RhdGEvc2VnbWVudCc7XG5pbXBvcnQgdHlwZSBWZXJ0ZXhCdWZmZXIgZnJvbSAnLi4vZ2wvdmVydGV4X2J1ZmZlcic7XG5pbXBvcnQgdHlwZSBJbmRleEJ1ZmZlciBmcm9tICcuLi9nbC9pbmRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUgRGVwdGhNb2RlIGZyb20gJy4uL2dsL2RlcHRoX21vZGUnO1xuaW1wb3J0IHR5cGUgU3RlbmNpbE1vZGUgZnJvbSAnLi4vZ2wvc3RlbmNpbF9tb2RlJztcbmltcG9ydCB0eXBlIENvbG9yTW9kZSBmcm9tICcuLi9nbC9jb2xvcl9tb2RlJztcbmltcG9ydCB0eXBlIEN1bGxGYWNlTW9kZSBmcm9tICcuLi9nbC9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQgdHlwZSB7VW5pZm9ybUJpbmRpbmdzLCBVbmlmb3JtVmFsdWVzLCBVbmlmb3JtTG9jYXRpb25zfSBmcm9tICcuL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQgdHlwZSB7QmluZGVyVW5pZm9ybX0gZnJvbSAnLi4vZGF0YS9wcm9ncmFtX2NvbmZpZ3VyYXRpb24nO1xuXG5leHBvcnQgdHlwZSBEcmF3TW9kZSA9XG4gICAgfCAkUHJvcGVydHlUeXBlPFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgJ0xJTkVTJz5cbiAgICB8ICRQcm9wZXJ0eVR5cGU8V2ViR0xSZW5kZXJpbmdDb250ZXh0LCAnVFJJQU5HTEVTJz5cbiAgICB8ICRQcm9wZXJ0eVR5cGU8V2ViR0xSZW5kZXJpbmdDb250ZXh0LCAnTElORV9TVFJJUCc+O1xuXG5jbGFzcyBQcm9ncmFtPFVzOiBVbmlmb3JtQmluZGluZ3M+IHtcbiAgICBwcm9ncmFtOiBXZWJHTFByb2dyYW07XG4gICAgYXR0cmlidXRlczoge1tfOiBzdHJpbmddOiBudW1iZXJ9O1xuICAgIG51bUF0dHJpYnV0ZXM6IG51bWJlcjtcbiAgICBmaXhlZFVuaWZvcm1zOiBVcztcbiAgICBiaW5kZXJVbmlmb3JtczogQXJyYXk8QmluZGVyVW5pZm9ybT47XG4gICAgZmFpbGVkVG9DcmVhdGU6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LFxuICAgICAgICAgICAgICAgIHNvdXJjZToge2ZyYWdtZW50U291cmNlOiBzdHJpbmcsIHZlcnRleFNvdXJjZTogc3RyaW5nfSxcbiAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uOiA/UHJvZ3JhbUNvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgICAgICAgZml4ZWRVbmlmb3JtczogKENvbnRleHQsIFVuaWZvcm1Mb2NhdGlvbnMpID0+IFVzLFxuICAgICAgICAgICAgICAgIHNob3dPdmVyZHJhd0luc3BlY3RvcjogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgICAgIHRoaXMucHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTtcblxuICAgICAgICBjb25zdCBkZWZpbmVzID0gY29uZmlndXJhdGlvbiA/IGNvbmZpZ3VyYXRpb24uZGVmaW5lcygpIDogW107XG4gICAgICAgIGlmIChzaG93T3ZlcmRyYXdJbnNwZWN0b3IpIHtcbiAgICAgICAgICAgIGRlZmluZXMucHVzaCgnI2RlZmluZSBPVkVSRFJBV19JTlNQRUNUT1I7Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmcmFnbWVudFNvdXJjZSA9IGRlZmluZXMuY29uY2F0KHByZWx1ZGUuZnJhZ21lbnRTb3VyY2UsIHNvdXJjZS5mcmFnbWVudFNvdXJjZSkuam9pbignXFxuJyk7XG4gICAgICAgIGNvbnN0IHZlcnRleFNvdXJjZSA9IGRlZmluZXMuY29uY2F0KHByZWx1ZGUudmVydGV4U291cmNlLCBzb3VyY2UudmVydGV4U291cmNlKS5qb2luKCdcXG4nKTtcbiAgICAgICAgY29uc3QgZnJhZ21lbnRTaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIoZ2wuRlJBR01FTlRfU0hBREVSKTtcbiAgICAgICAgaWYgKGdsLmlzQ29udGV4dExvc3QoKSkge1xuICAgICAgICAgICAgdGhpcy5mYWlsZWRUb0NyZWF0ZSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZ2wuc2hhZGVyU291cmNlKGZyYWdtZW50U2hhZGVyLCBmcmFnbWVudFNvdXJjZSk7XG4gICAgICAgIGdsLmNvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpO1xuICAgICAgICBhc3NlcnQoZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKGZyYWdtZW50U2hhZGVyLCBnbC5DT01QSUxFX1NUQVRVUyksIChnbC5nZXRTaGFkZXJJbmZvTG9nKGZyYWdtZW50U2hhZGVyKTogYW55KSk7XG4gICAgICAgIGdsLmF0dGFjaFNoYWRlcih0aGlzLnByb2dyYW0sIGZyYWdtZW50U2hhZGVyKTtcblxuICAgICAgICBjb25zdCB2ZXJ0ZXhTaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIoZ2wuVkVSVEVYX1NIQURFUik7XG4gICAgICAgIGlmIChnbC5pc0NvbnRleHRMb3N0KCkpIHtcbiAgICAgICAgICAgIHRoaXMuZmFpbGVkVG9DcmVhdGUgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGdsLnNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIHZlcnRleFNvdXJjZSk7XG4gICAgICAgIGdsLmNvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKTtcbiAgICAgICAgYXNzZXJ0KGdsLmdldFNoYWRlclBhcmFtZXRlcih2ZXJ0ZXhTaGFkZXIsIGdsLkNPTVBJTEVfU1RBVFVTKSwgKGdsLmdldFNoYWRlckluZm9Mb2codmVydGV4U2hhZGVyKTogYW55KSk7XG4gICAgICAgIGdsLmF0dGFjaFNoYWRlcih0aGlzLnByb2dyYW0sIHZlcnRleFNoYWRlcik7XG5cbiAgICAgICAgLy8gTWFudWFsbHkgYmluZCBsYXlvdXQgYXR0cmlidXRlcyBpbiB0aGUgb3JkZXIgZGVmaW5lZCBieSB0aGVpclxuICAgICAgICAvLyBQcm9ncmFtSW50ZXJmYWNlIHNvIHRoYXQgd2UgZG9uJ3QgZHluYW1pY2FsbHkgbGluayBhbiB1bnVzZWRcbiAgICAgICAgLy8gYXR0cmlidXRlIGF0IHBvc2l0aW9uIDAsIHdoaWNoIGNhbiBjYXVzZSByZW5kZXJpbmcgdG8gZmFpbCBmb3IgYW5cbiAgICAgICAgLy8gZW50aXJlIGxheWVyIChzZWUgIzQ2MDcsICM0NzI4KVxuICAgICAgICBjb25zdCBsYXlvdXRBdHRyaWJ1dGVzID0gY29uZmlndXJhdGlvbiA/IGNvbmZpZ3VyYXRpb24ubGF5b3V0QXR0cmlidXRlcyA6IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxheW91dEF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGdsLmJpbmRBdHRyaWJMb2NhdGlvbih0aGlzLnByb2dyYW0sIGksIGxheW91dEF0dHJpYnV0ZXNbaV0ubmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5saW5rUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xuICAgICAgICBhc3NlcnQoZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0aGlzLnByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSwgKGdsLmdldFByb2dyYW1JbmZvTG9nKHRoaXMucHJvZ3JhbSk6IGFueSkpO1xuXG4gICAgICAgIGdsLmRlbGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpO1xuICAgICAgICBnbC5kZWxldGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpO1xuXG4gICAgICAgIHRoaXMubnVtQXR0cmlidXRlcyA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIodGhpcy5wcm9ncmFtLCBnbC5BQ1RJVkVfQVRUUklCVVRFUyk7XG5cbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzID0ge307XG4gICAgICAgIGNvbnN0IHVuaWZvcm1Mb2NhdGlvbnMgPSB7fTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubnVtQXR0cmlidXRlczsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGUgPSBnbC5nZXRBY3RpdmVBdHRyaWIodGhpcy5wcm9ncmFtLCBpKTtcbiAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXNbYXR0cmlidXRlLm5hbWVdID0gZ2wuZ2V0QXR0cmliTG9jYXRpb24odGhpcy5wcm9ncmFtLCBhdHRyaWJ1dGUubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBudW1Vbmlmb3JtcyA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIodGhpcy5wcm9ncmFtLCBnbC5BQ1RJVkVfVU5JRk9STVMpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVVuaWZvcm1zOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHVuaWZvcm0gPSBnbC5nZXRBY3RpdmVVbmlmb3JtKHRoaXMucHJvZ3JhbSwgaSk7XG4gICAgICAgICAgICBpZiAodW5pZm9ybSkge1xuICAgICAgICAgICAgICAgIHVuaWZvcm1Mb2NhdGlvbnNbdW5pZm9ybS5uYW1lXSA9IGdsLmdldFVuaWZvcm1Mb2NhdGlvbih0aGlzLnByb2dyYW0sIHVuaWZvcm0ubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZpeGVkVW5pZm9ybXMgPSBmaXhlZFVuaWZvcm1zKGNvbnRleHQsIHVuaWZvcm1Mb2NhdGlvbnMpO1xuICAgICAgICB0aGlzLmJpbmRlclVuaWZvcm1zID0gY29uZmlndXJhdGlvbiA/IGNvbmZpZ3VyYXRpb24uZ2V0VW5pZm9ybXMoY29udGV4dCwgdW5pZm9ybUxvY2F0aW9ucykgOiBbXTtcbiAgICB9XG5cbiAgICBkcmF3KGNvbnRleHQ6IENvbnRleHQsXG4gICAgICAgICBkcmF3TW9kZTogRHJhd01vZGUsXG4gICAgICAgICBkZXB0aE1vZGU6ICRSZWFkT25seTxEZXB0aE1vZGU+LFxuICAgICAgICAgc3RlbmNpbE1vZGU6ICRSZWFkT25seTxTdGVuY2lsTW9kZT4sXG4gICAgICAgICBjb2xvck1vZGU6ICRSZWFkT25seTxDb2xvck1vZGU+LFxuICAgICAgICAgY3VsbEZhY2VNb2RlOiAkUmVhZE9ubHk8Q3VsbEZhY2VNb2RlPixcbiAgICAgICAgIHVuaWZvcm1WYWx1ZXM6IFVuaWZvcm1WYWx1ZXM8VXM+LFxuICAgICAgICAgbGF5ZXJJRDogc3RyaW5nLFxuICAgICAgICAgbGF5b3V0VmVydGV4QnVmZmVyOiBWZXJ0ZXhCdWZmZXIsXG4gICAgICAgICBpbmRleEJ1ZmZlcjogSW5kZXhCdWZmZXIsXG4gICAgICAgICBzZWdtZW50czogU2VnbWVudFZlY3RvcixcbiAgICAgICAgIGN1cnJlbnRQcm9wZXJ0aWVzOiBhbnksXG4gICAgICAgICB6b29tOiA/bnVtYmVyLFxuICAgICAgICAgY29uZmlndXJhdGlvbjogP1Byb2dyYW1Db25maWd1cmF0aW9uLFxuICAgICAgICAgZHluYW1pY0xheW91dEJ1ZmZlcjogP1ZlcnRleEJ1ZmZlcixcbiAgICAgICAgIGR5bmFtaWNMYXlvdXRCdWZmZXIyOiA/VmVydGV4QnVmZmVyKSB7XG5cbiAgICAgICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuXG4gICAgICAgIGlmICh0aGlzLmZhaWxlZFRvQ3JlYXRlKSByZXR1cm47XG5cbiAgICAgICAgY29udGV4dC5wcm9ncmFtLnNldCh0aGlzLnByb2dyYW0pO1xuICAgICAgICBjb250ZXh0LnNldERlcHRoTW9kZShkZXB0aE1vZGUpO1xuICAgICAgICBjb250ZXh0LnNldFN0ZW5jaWxNb2RlKHN0ZW5jaWxNb2RlKTtcbiAgICAgICAgY29udGV4dC5zZXRDb2xvck1vZGUoY29sb3JNb2RlKTtcbiAgICAgICAgY29udGV4dC5zZXRDdWxsRmFjZShjdWxsRmFjZU1vZGUpO1xuXG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBpbiB0aGlzLmZpeGVkVW5pZm9ybXMpIHtcbiAgICAgICAgICAgIHRoaXMuZml4ZWRVbmlmb3Jtc1tuYW1lXS5zZXQodW5pZm9ybVZhbHVlc1tuYW1lXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgY29uZmlndXJhdGlvbi5zZXRVbmlmb3Jtcyhjb250ZXh0LCB0aGlzLmJpbmRlclVuaWZvcm1zLCBjdXJyZW50UHJvcGVydGllcywge3pvb206ICh6b29tOiBhbnkpfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcmltaXRpdmVTaXplID0ge1xuICAgICAgICAgICAgW2dsLkxJTkVTXTogMixcbiAgICAgICAgICAgIFtnbC5UUklBTkdMRVNdOiAzLFxuICAgICAgICAgICAgW2dsLkxJTkVfU1RSSVBdOiAxXG4gICAgICAgIH1bZHJhd01vZGVdO1xuXG4gICAgICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBzZWdtZW50cy5nZXQoKSkge1xuICAgICAgICAgICAgY29uc3QgdmFvcyA9IHNlZ21lbnQudmFvcyB8fCAoc2VnbWVudC52YW9zID0ge30pO1xuICAgICAgICAgICAgY29uc3QgdmFvOiBWZXJ0ZXhBcnJheU9iamVjdCA9IHZhb3NbbGF5ZXJJRF0gfHwgKHZhb3NbbGF5ZXJJRF0gPSBuZXcgVmVydGV4QXJyYXlPYmplY3QoKSk7XG5cbiAgICAgICAgICAgIHZhby5iaW5kKFxuICAgICAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBsYXlvdXRWZXJ0ZXhCdWZmZXIsXG4gICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiA/IGNvbmZpZ3VyYXRpb24uZ2V0UGFpbnRWZXJ0ZXhCdWZmZXJzKCkgOiBbXSxcbiAgICAgICAgICAgICAgICBpbmRleEJ1ZmZlcixcbiAgICAgICAgICAgICAgICBzZWdtZW50LnZlcnRleE9mZnNldCxcbiAgICAgICAgICAgICAgICBkeW5hbWljTGF5b3V0QnVmZmVyLFxuICAgICAgICAgICAgICAgIGR5bmFtaWNMYXlvdXRCdWZmZXIyXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoXG4gICAgICAgICAgICAgICAgZHJhd01vZGUsXG4gICAgICAgICAgICAgICAgc2VnbWVudC5wcmltaXRpdmVMZW5ndGggKiBwcmltaXRpdmVTaXplLFxuICAgICAgICAgICAgICAgIGdsLlVOU0lHTkVEX1NIT1JULFxuICAgICAgICAgICAgICAgIHNlZ21lbnQucHJpbWl0aXZlT2Zmc2V0ICogcHJpbWl0aXZlU2l6ZSAqIDIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBQcm9ncmFtO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHtcbiAgICBVbmlmb3JtMWksXG4gICAgVW5pZm9ybTFmLFxuICAgIFVuaWZvcm0yZixcbiAgICBVbmlmb3JtM2Zcbn0gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCBwaXhlbHNUb1RpbGVVbml0cyBmcm9tICcuLi8uLi9zb3VyY2UvcGl4ZWxzX3RvX3RpbGVfdW5pdHMnO1xuXG5pbXBvcnQgdHlwZSBQYWludGVyIGZyb20gJy4uL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uLy4uL3NvdXJjZS90aWxlX2lkJztcbmltcG9ydCB0eXBlIHtDcm9zc0ZhZGVkfSBmcm9tICcuLi8uLi9zdHlsZS9wcm9wZXJ0aWVzJztcbmltcG9ydCB0eXBlIHtDcm9zc2ZhZGVQYXJhbWV0ZXJzfSBmcm9tICcuLi8uLi9zdHlsZS9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuaW1wb3J0IHR5cGUge1VuaWZvcm1WYWx1ZXN9IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4uLy4uL3NvdXJjZS90aWxlJztcbmltcG9ydCB0eXBlIFJlc29sdmVkSW1hZ2UgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL3Jlc29sdmVkX2ltYWdlJztcblxudHlwZSBCYWNrZ3JvdW5kUGF0dGVyblVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfaW1hZ2UnOiBVbmlmb3JtMWksXG4gICAgJ3VfcGF0dGVybl90bF9hJzogVW5pZm9ybTJmLFxuICAgICd1X3BhdHRlcm5fYnJfYSc6IFVuaWZvcm0yZixcbiAgICAndV9wYXR0ZXJuX3RsX2InOiBVbmlmb3JtMmYsXG4gICAgJ3VfcGF0dGVybl9icl9iJzogVW5pZm9ybTJmLFxuICAgICd1X3RleHNpemUnOiBVbmlmb3JtMmYsXG4gICAgJ3VfbWl4JzogVW5pZm9ybTFmLFxuICAgICd1X3BhdHRlcm5fc2l6ZV9hJzogVW5pZm9ybTJmLFxuICAgICd1X3BhdHRlcm5fc2l6ZV9iJzogVW5pZm9ybTJmLFxuICAgICd1X3NjYWxlX2EnOiBVbmlmb3JtMWYsXG4gICAgJ3Vfc2NhbGVfYic6IFVuaWZvcm0xZixcbiAgICAndV9waXhlbF9jb29yZF91cHBlcic6IFVuaWZvcm0yZixcbiAgICAndV9waXhlbF9jb29yZF9sb3dlcic6IFVuaWZvcm0yZixcbiAgICAndV90aWxlX3VuaXRzX3RvX3BpeGVscyc6IFVuaWZvcm0xZlxufH07XG5cbmV4cG9ydCB0eXBlIFBhdHRlcm5Vbmlmb3Jtc1R5cGUgPSB7fFxuICAgIC8vIHBhdHRlcm4gdW5pZm9ybXM6XG4gICAgJ3VfaW1hZ2UnOiBVbmlmb3JtMWksXG4gICAgJ3VfdGV4c2l6ZSc6IFVuaWZvcm0yZixcbiAgICAndV9zY2FsZSc6IFVuaWZvcm0zZixcbiAgICAndV9mYWRlJzogVW5pZm9ybTFmLFxuICAgICd1X3BpeGVsX2Nvb3JkX3VwcGVyJzogVW5pZm9ybTJmLFxuICAgICd1X3BpeGVsX2Nvb3JkX2xvd2VyJzogVW5pZm9ybTJmXG58fTtcblxuZnVuY3Rpb24gcGF0dGVyblVuaWZvcm1WYWx1ZXMoY3Jvc3NmYWRlOiBDcm9zc2ZhZGVQYXJhbWV0ZXJzLCBwYWludGVyOiBQYWludGVyLFxuICAgICAgICB0aWxlOiBUaWxlXG4pOiBVbmlmb3JtVmFsdWVzPFBhdHRlcm5Vbmlmb3Jtc1R5cGU+IHtcblxuICAgIGNvbnN0IHRpbGVSYXRpbyA9IDEgLyBwaXhlbHNUb1RpbGVVbml0cyh0aWxlLCAxLCBwYWludGVyLnRyYW5zZm9ybS50aWxlWm9vbSk7XG5cbiAgICBjb25zdCBudW1UaWxlcyA9IE1hdGgucG93KDIsIHRpbGUudGlsZUlELm92ZXJzY2FsZWRaKTtcbiAgICBjb25zdCB0aWxlU2l6ZUF0TmVhcmVzdFpvb20gPSB0aWxlLnRpbGVTaXplICogTWF0aC5wb3coMiwgcGFpbnRlci50cmFuc2Zvcm0udGlsZVpvb20pIC8gbnVtVGlsZXM7XG5cbiAgICBjb25zdCBwaXhlbFggPSB0aWxlU2l6ZUF0TmVhcmVzdFpvb20gKiAodGlsZS50aWxlSUQuY2Fub25pY2FsLnggKyB0aWxlLnRpbGVJRC53cmFwICogbnVtVGlsZXMpO1xuICAgIGNvbnN0IHBpeGVsWSA9IHRpbGVTaXplQXROZWFyZXN0Wm9vbSAqIHRpbGUudGlsZUlELmNhbm9uaWNhbC55O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ3VfaW1hZ2UnOiAwLFxuICAgICAgICAndV90ZXhzaXplJzogdGlsZS5pbWFnZUF0bGFzVGV4dHVyZS5zaXplLFxuICAgICAgICAndV9zY2FsZSc6IFt0aWxlUmF0aW8sIGNyb3NzZmFkZS5mcm9tU2NhbGUsIGNyb3NzZmFkZS50b1NjYWxlXSxcbiAgICAgICAgJ3VfZmFkZSc6IGNyb3NzZmFkZS50LFxuICAgICAgICAvLyBzcGxpdCB0aGUgcGl4ZWwgY29vcmQgaW50byB0d28gcGFpcnMgb2YgMTYgYml0IG51bWJlcnMuIFRoZSBnbHNsIHNwZWMgb25seSBndWFyYW50ZWVzIDE2IGJpdHMgb2YgcHJlY2lzaW9uLlxuICAgICAgICAndV9waXhlbF9jb29yZF91cHBlcic6IFtwaXhlbFggPj4gMTYsIHBpeGVsWSA+PiAxNl0sXG4gICAgICAgICd1X3BpeGVsX2Nvb3JkX2xvd2VyJzogW3BpeGVsWCAmIDB4RkZGRiwgcGl4ZWxZICYgMHhGRkZGXVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIGJnUGF0dGVyblVuaWZvcm1WYWx1ZXMoaW1hZ2U6IENyb3NzRmFkZWQ8UmVzb2x2ZWRJbWFnZT4sIGNyb3NzZmFkZTogQ3Jvc3NmYWRlUGFyYW1ldGVycywgcGFpbnRlcjogUGFpbnRlcixcbiAgICAgICAgdGlsZToge3RpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCwgdGlsZVNpemU6IG51bWJlcn1cbik6IFVuaWZvcm1WYWx1ZXM8QmFja2dyb3VuZFBhdHRlcm5Vbmlmb3Jtc1R5cGU+IHtcbiAgICBjb25zdCBpbWFnZVBvc0EgPSBwYWludGVyLmltYWdlTWFuYWdlci5nZXRQYXR0ZXJuKGltYWdlLmZyb20udG9TdHJpbmcoKSk7XG4gICAgY29uc3QgaW1hZ2VQb3NCID0gcGFpbnRlci5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybihpbWFnZS50by50b1N0cmluZygpKTtcbiAgICBhc3NlcnQoaW1hZ2VQb3NBICYmIGltYWdlUG9zQik7XG4gICAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gcGFpbnRlci5pbWFnZU1hbmFnZXIuZ2V0UGl4ZWxTaXplKCk7XG5cbiAgICBjb25zdCBudW1UaWxlcyA9IE1hdGgucG93KDIsIHRpbGUudGlsZUlELm92ZXJzY2FsZWRaKTtcbiAgICBjb25zdCB0aWxlU2l6ZUF0TmVhcmVzdFpvb20gPSB0aWxlLnRpbGVTaXplICogTWF0aC5wb3coMiwgcGFpbnRlci50cmFuc2Zvcm0udGlsZVpvb20pIC8gbnVtVGlsZXM7XG5cbiAgICBjb25zdCBwaXhlbFggPSB0aWxlU2l6ZUF0TmVhcmVzdFpvb20gKiAodGlsZS50aWxlSUQuY2Fub25pY2FsLnggKyB0aWxlLnRpbGVJRC53cmFwICogbnVtVGlsZXMpO1xuICAgIGNvbnN0IHBpeGVsWSA9IHRpbGVTaXplQXROZWFyZXN0Wm9vbSAqIHRpbGUudGlsZUlELmNhbm9uaWNhbC55O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ3VfaW1hZ2UnOiAwLFxuICAgICAgICAndV9wYXR0ZXJuX3RsX2EnOiAoaW1hZ2VQb3NBOiBhbnkpLnRsLFxuICAgICAgICAndV9wYXR0ZXJuX2JyX2EnOiAoaW1hZ2VQb3NBOiBhbnkpLmJyLFxuICAgICAgICAndV9wYXR0ZXJuX3RsX2InOiAoaW1hZ2VQb3NCOiBhbnkpLnRsLFxuICAgICAgICAndV9wYXR0ZXJuX2JyX2InOiAoaW1hZ2VQb3NCOiBhbnkpLmJyLFxuICAgICAgICAndV90ZXhzaXplJzogW3dpZHRoLCBoZWlnaHRdLFxuICAgICAgICAndV9taXgnOiBjcm9zc2ZhZGUudCxcbiAgICAgICAgJ3VfcGF0dGVybl9zaXplX2EnOiAoaW1hZ2VQb3NBOiBhbnkpLmRpc3BsYXlTaXplLFxuICAgICAgICAndV9wYXR0ZXJuX3NpemVfYic6IChpbWFnZVBvc0I6IGFueSkuZGlzcGxheVNpemUsXG4gICAgICAgICd1X3NjYWxlX2EnOiBjcm9zc2ZhZGUuZnJvbVNjYWxlLFxuICAgICAgICAndV9zY2FsZV9iJzogY3Jvc3NmYWRlLnRvU2NhbGUsXG4gICAgICAgICd1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzJzogMSAvIHBpeGVsc1RvVGlsZVVuaXRzKHRpbGUsIDEsIHBhaW50ZXIudHJhbnNmb3JtLnRpbGVab29tKSxcbiAgICAgICAgLy8gc3BsaXQgdGhlIHBpeGVsIGNvb3JkIGludG8gdHdvIHBhaXJzIG9mIDE2IGJpdCBudW1iZXJzLiBUaGUgZ2xzbCBzcGVjIG9ubHkgZ3VhcmFudGVlcyAxNiBiaXRzIG9mIHByZWNpc2lvbi5cbiAgICAgICAgJ3VfcGl4ZWxfY29vcmRfdXBwZXInOiBbcGl4ZWxYID4+IDE2LCBwaXhlbFkgPj4gMTZdLFxuICAgICAgICAndV9waXhlbF9jb29yZF9sb3dlcic6IFtwaXhlbFggJiAweEZGRkYsIHBpeGVsWSAmIDB4RkZGRl1cbiAgICB9O1xufVxuZXhwb3J0IHtiZ1BhdHRlcm5Vbmlmb3JtVmFsdWVzLCBwYXR0ZXJuVW5pZm9ybVZhbHVlc307XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge3BhdHRlcm5Vbmlmb3JtVmFsdWVzfSBmcm9tICcuL3BhdHRlcm4nO1xuaW1wb3J0IHtcbiAgICBVbmlmb3JtMWksXG4gICAgVW5pZm9ybTFmLFxuICAgIFVuaWZvcm0yZixcbiAgICBVbmlmb3JtM2YsXG4gICAgVW5pZm9ybU1hdHJpeDRmXG59IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5cbmltcG9ydCB7bWF0MywgdmVjM30gZnJvbSAnZ2wtbWF0cml4JztcbmltcG9ydCB7ZXh0ZW5kfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuXG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uLy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuLi9wYWludGVyJztcbmltcG9ydCB0eXBlIHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuLi8uLi9zb3VyY2UvdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSB7VW5pZm9ybVZhbHVlcywgVW5pZm9ybUxvY2F0aW9uc30gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCB0eXBlIHtDcm9zc2ZhZGVQYXJhbWV0ZXJzfSBmcm9tICcuLi8uLi9zdHlsZS9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuaW1wb3J0IHR5cGUgVGlsZSBmcm9tICcuLi8uLi9zb3VyY2UvdGlsZSc7XG5cbmV4cG9ydCB0eXBlIEZpbGxFeHRydXNpb25Vbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9saWdodHBvcyc6IFVuaWZvcm0zZixcbiAgICAndV9saWdodGludGVuc2l0eSc6IFVuaWZvcm0xZixcbiAgICAndV9saWdodGNvbG9yJzogVW5pZm9ybTNmLFxuICAgICd1X3ZlcnRpY2FsX2dyYWRpZW50JzogVW5pZm9ybTFmLFxuICAgICd1X29wYWNpdHknOiBVbmlmb3JtMWZcbnx9O1xuXG5leHBvcnQgdHlwZSBGaWxsRXh0cnVzaW9uUGF0dGVyblVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X2xpZ2h0cG9zJzogVW5pZm9ybTNmLFxuICAgICd1X2xpZ2h0aW50ZW5zaXR5JzogVW5pZm9ybTFmLFxuICAgICd1X2xpZ2h0Y29sb3InOiBVbmlmb3JtM2YsXG4gICAgJ3VfaGVpZ2h0X2ZhY3Rvcic6IFVuaWZvcm0xZixcbiAgICAndV92ZXJ0aWNhbF9ncmFkaWVudCc6IFVuaWZvcm0xZixcbiAgICAvLyBwYXR0ZXJuIHVuaWZvcm1zOlxuICAgICd1X3RleHNpemUnOiBVbmlmb3JtMmYsXG4gICAgJ3VfaW1hZ2UnOiBVbmlmb3JtMWksXG4gICAgJ3VfcGl4ZWxfY29vcmRfdXBwZXInOiBVbmlmb3JtMmYsXG4gICAgJ3VfcGl4ZWxfY29vcmRfbG93ZXInOiBVbmlmb3JtMmYsXG4gICAgJ3Vfc2NhbGUnOiBVbmlmb3JtM2YsXG4gICAgJ3VfZmFkZSc6IFVuaWZvcm0xZixcbiAgICAndV9vcGFjaXR5JzogVW5pZm9ybTFmXG58fTtcblxuY29uc3QgZmlsbEV4dHJ1c2lvblVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IEZpbGxFeHRydXNpb25Vbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeCksXG4gICAgJ3VfbGlnaHRwb3MnOiBuZXcgVW5pZm9ybTNmKGNvbnRleHQsIGxvY2F0aW9ucy51X2xpZ2h0cG9zKSxcbiAgICAndV9saWdodGludGVuc2l0eSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfbGlnaHRpbnRlbnNpdHkpLFxuICAgICd1X2xpZ2h0Y29sb3InOiBuZXcgVW5pZm9ybTNmKGNvbnRleHQsIGxvY2F0aW9ucy51X2xpZ2h0Y29sb3IpLFxuICAgICd1X3ZlcnRpY2FsX2dyYWRpZW50JzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV92ZXJ0aWNhbF9ncmFkaWVudCksXG4gICAgJ3Vfb3BhY2l0eSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfb3BhY2l0eSlcbn0pO1xuXG5jb25zdCBmaWxsRXh0cnVzaW9uUGF0dGVyblVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IEZpbGxFeHRydXNpb25QYXR0ZXJuVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X2xpZ2h0cG9zJzogbmV3IFVuaWZvcm0zZihjb250ZXh0LCBsb2NhdGlvbnMudV9saWdodHBvcyksXG4gICAgJ3VfbGlnaHRpbnRlbnNpdHknOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2xpZ2h0aW50ZW5zaXR5KSxcbiAgICAndV9saWdodGNvbG9yJzogbmV3IFVuaWZvcm0zZihjb250ZXh0LCBsb2NhdGlvbnMudV9saWdodGNvbG9yKSxcbiAgICAndV92ZXJ0aWNhbF9ncmFkaWVudCc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfdmVydGljYWxfZ3JhZGllbnQpLFxuICAgICd1X2hlaWdodF9mYWN0b3InOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2hlaWdodF9mYWN0b3IpLFxuICAgIC8vIHBhdHRlcm4gdW5pZm9ybXNcbiAgICAndV9pbWFnZSc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaW1hZ2UpLFxuICAgICd1X3RleHNpemUnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3RleHNpemUpLFxuICAgICd1X3BpeGVsX2Nvb3JkX3VwcGVyJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV9waXhlbF9jb29yZF91cHBlciksXG4gICAgJ3VfcGl4ZWxfY29vcmRfbG93ZXInOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3BpeGVsX2Nvb3JkX2xvd2VyKSxcbiAgICAndV9zY2FsZSc6IG5ldyBVbmlmb3JtM2YoY29udGV4dCwgbG9jYXRpb25zLnVfc2NhbGUpLFxuICAgICd1X2ZhZGUnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2ZhZGUpLFxuICAgICd1X29wYWNpdHknOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X29wYWNpdHkpXG59KTtcblxuY29uc3QgZmlsbEV4dHJ1c2lvblVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgbWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgcGFpbnRlcjogUGFpbnRlcixcbiAgICBzaG91bGRVc2VWZXJ0aWNhbEdyYWRpZW50OiBib29sZWFuLFxuICAgIG9wYWNpdHk6IG51bWJlclxuKTogVW5pZm9ybVZhbHVlczxGaWxsRXh0cnVzaW9uVW5pZm9ybXNUeXBlPiA9PiB7XG4gICAgY29uc3QgbGlnaHQgPSBwYWludGVyLnN0eWxlLmxpZ2h0O1xuICAgIGNvbnN0IF9scCA9IGxpZ2h0LnByb3BlcnRpZXMuZ2V0KCdwb3NpdGlvbicpO1xuICAgIGNvbnN0IGxpZ2h0UG9zID0gW19scC54LCBfbHAueSwgX2xwLnpdO1xuICAgIGNvbnN0IGxpZ2h0TWF0ID0gbWF0My5jcmVhdGUoKTtcbiAgICBpZiAobGlnaHQucHJvcGVydGllcy5nZXQoJ2FuY2hvcicpID09PSAndmlld3BvcnQnKSB7XG4gICAgICAgIG1hdDMuZnJvbVJvdGF0aW9uKGxpZ2h0TWF0LCAtcGFpbnRlci50cmFuc2Zvcm0uYW5nbGUpO1xuICAgIH1cbiAgICB2ZWMzLnRyYW5zZm9ybU1hdDMobGlnaHRQb3MsIGxpZ2h0UG9zLCBsaWdodE1hdCk7XG5cbiAgICBjb25zdCBsaWdodENvbG9yID0gbGlnaHQucHJvcGVydGllcy5nZXQoJ2NvbG9yJyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICAndV9tYXRyaXgnOiBtYXRyaXgsXG4gICAgICAgICd1X2xpZ2h0cG9zJzogbGlnaHRQb3MsXG4gICAgICAgICd1X2xpZ2h0aW50ZW5zaXR5JzogbGlnaHQucHJvcGVydGllcy5nZXQoJ2ludGVuc2l0eScpLFxuICAgICAgICAndV9saWdodGNvbG9yJzogW2xpZ2h0Q29sb3IuciwgbGlnaHRDb2xvci5nLCBsaWdodENvbG9yLmJdLFxuICAgICAgICAndV92ZXJ0aWNhbF9ncmFkaWVudCc6ICtzaG91bGRVc2VWZXJ0aWNhbEdyYWRpZW50LFxuICAgICAgICAndV9vcGFjaXR5Jzogb3BhY2l0eVxuICAgIH07XG59O1xuXG5jb25zdCBmaWxsRXh0cnVzaW9uUGF0dGVyblVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgbWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgcGFpbnRlcjogUGFpbnRlcixcbiAgICBzaG91bGRVc2VWZXJ0aWNhbEdyYWRpZW50OiBib29sZWFuLFxuICAgIG9wYWNpdHk6IG51bWJlcixcbiAgICBjb29yZDogT3ZlcnNjYWxlZFRpbGVJRCxcbiAgICBjcm9zc2ZhZGU6IENyb3NzZmFkZVBhcmFtZXRlcnMsXG4gICAgdGlsZTogVGlsZVxuKTogVW5pZm9ybVZhbHVlczxGaWxsRXh0cnVzaW9uUGF0dGVyblVuaWZvcm1zVHlwZT4gPT4ge1xuICAgIHJldHVybiBleHRlbmQoZmlsbEV4dHJ1c2lvblVuaWZvcm1WYWx1ZXMobWF0cml4LCBwYWludGVyLCBzaG91bGRVc2VWZXJ0aWNhbEdyYWRpZW50LCBvcGFjaXR5KSxcbiAgICAgICAgcGF0dGVyblVuaWZvcm1WYWx1ZXMoY3Jvc3NmYWRlLCBwYWludGVyLCB0aWxlKSxcbiAgICAgICAge1xuICAgICAgICAgICAgJ3VfaGVpZ2h0X2ZhY3Rvcic6IC1NYXRoLnBvdygyLCBjb29yZC5vdmVyc2NhbGVkWikgLyB0aWxlLnRpbGVTaXplIC8gOFxuICAgICAgICB9KTtcbn07XG5cbmV4cG9ydCB7XG4gICAgZmlsbEV4dHJ1c2lvblVuaWZvcm1zLFxuICAgIGZpbGxFeHRydXNpb25QYXR0ZXJuVW5pZm9ybXMsXG4gICAgZmlsbEV4dHJ1c2lvblVuaWZvcm1WYWx1ZXMsXG4gICAgZmlsbEV4dHJ1c2lvblBhdHRlcm5Vbmlmb3JtVmFsdWVzXG59O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtwYXR0ZXJuVW5pZm9ybVZhbHVlc30gZnJvbSAnLi9wYXR0ZXJuJztcbmltcG9ydCB7XG4gICAgVW5pZm9ybTFpLFxuICAgIFVuaWZvcm0xZixcbiAgICBVbmlmb3JtMmYsXG4gICAgVW5pZm9ybTNmLFxuICAgIFVuaWZvcm1NYXRyaXg0ZlxufSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHtleHRlbmR9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5cbmltcG9ydCB0eXBlIFBhaW50ZXIgZnJvbSAnLi4vcGFpbnRlcic7XG5pbXBvcnQgdHlwZSB7VW5pZm9ybVZhbHVlcywgVW5pZm9ybUxvY2F0aW9uc30gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7Q3Jvc3NmYWRlUGFyYW1ldGVyc30gZnJvbSAnLi4vLi4vc3R5bGUvZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcbmltcG9ydCB0eXBlIFRpbGUgZnJvbSAnLi4vLi4vc291cmNlL3RpbGUnO1xuXG5leHBvcnQgdHlwZSBGaWxsVW5pZm9ybXNUeXBlID0ge3xcbiAgICAndV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGZcbnx9O1xuXG5leHBvcnQgdHlwZSBGaWxsT3V0bGluZVVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X3dvcmxkJzogVW5pZm9ybTJmXG58fTtcblxuZXhwb3J0IHR5cGUgRmlsbFBhdHRlcm5Vbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAvLyBwYXR0ZXJuIHVuaWZvcm1zOlxuICAgICd1X3RleHNpemUnOiBVbmlmb3JtMmYsXG4gICAgJ3VfaW1hZ2UnOiBVbmlmb3JtMWksXG4gICAgJ3VfcGl4ZWxfY29vcmRfdXBwZXInOiBVbmlmb3JtMmYsXG4gICAgJ3VfcGl4ZWxfY29vcmRfbG93ZXInOiBVbmlmb3JtMmYsXG4gICAgJ3Vfc2NhbGUnOiBVbmlmb3JtM2YsXG4gICAgJ3VfZmFkZSc6IFVuaWZvcm0xZlxufH07XG5cbmV4cG9ydCB0eXBlIEZpbGxPdXRsaW5lUGF0dGVyblVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X3dvcmxkJzogVW5pZm9ybTJmLFxuICAgIC8vIHBhdHRlcm4gdW5pZm9ybXM6XG4gICAgJ3VfdGV4c2l6ZSc6IFVuaWZvcm0yZixcbiAgICAndV9pbWFnZSc6IFVuaWZvcm0xaSxcbiAgICAndV9waXhlbF9jb29yZF91cHBlcic6IFVuaWZvcm0yZixcbiAgICAndV9waXhlbF9jb29yZF9sb3dlcic6IFVuaWZvcm0yZixcbiAgICAndV9zY2FsZSc6IFVuaWZvcm0zZixcbiAgICAndV9mYWRlJzogVW5pZm9ybTFmXG58fTtcblxuY29uc3QgZmlsbFVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IEZpbGxVbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeClcbn0pO1xuXG5jb25zdCBmaWxsUGF0dGVyblVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IEZpbGxQYXR0ZXJuVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X2ltYWdlJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pbWFnZSksXG4gICAgJ3VfdGV4c2l6ZSc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfdGV4c2l6ZSksXG4gICAgJ3VfcGl4ZWxfY29vcmRfdXBwZXInOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3BpeGVsX2Nvb3JkX3VwcGVyKSxcbiAgICAndV9waXhlbF9jb29yZF9sb3dlcic6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfcGl4ZWxfY29vcmRfbG93ZXIpLFxuICAgICd1X3NjYWxlJzogbmV3IFVuaWZvcm0zZihjb250ZXh0LCBsb2NhdGlvbnMudV9zY2FsZSksXG4gICAgJ3VfZmFkZSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfZmFkZSlcblxufSk7XG5cbmNvbnN0IGZpbGxPdXRsaW5lVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogRmlsbE91dGxpbmVVbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeCksXG4gICAgJ3Vfd29ybGQnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3dvcmxkKVxufSk7XG5cbmNvbnN0IGZpbGxPdXRsaW5lUGF0dGVyblVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IEZpbGxPdXRsaW5lUGF0dGVyblVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KSxcbiAgICAndV93b3JsZCc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfd29ybGQpLFxuICAgICd1X2ltYWdlJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pbWFnZSksXG4gICAgJ3VfdGV4c2l6ZSc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfdGV4c2l6ZSksXG4gICAgJ3VfcGl4ZWxfY29vcmRfdXBwZXInOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3BpeGVsX2Nvb3JkX3VwcGVyKSxcbiAgICAndV9waXhlbF9jb29yZF9sb3dlcic6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfcGl4ZWxfY29vcmRfbG93ZXIpLFxuICAgICd1X3NjYWxlJzogbmV3IFVuaWZvcm0zZihjb250ZXh0LCBsb2NhdGlvbnMudV9zY2FsZSksXG4gICAgJ3VfZmFkZSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfZmFkZSlcbn0pO1xuXG5jb25zdCBmaWxsVW5pZm9ybVZhbHVlcyA9IChtYXRyaXg6IEZsb2F0MzJBcnJheSk6IFVuaWZvcm1WYWx1ZXM8RmlsbFVuaWZvcm1zVHlwZT4gPT4gKHtcbiAgICAndV9tYXRyaXgnOiBtYXRyaXhcbn0pO1xuXG5jb25zdCBmaWxsUGF0dGVyblVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgbWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgcGFpbnRlcjogUGFpbnRlcixcbiAgICBjcm9zc2ZhZGU6IENyb3NzZmFkZVBhcmFtZXRlcnMsXG4gICAgdGlsZTogVGlsZVxuKTogVW5pZm9ybVZhbHVlczxGaWxsUGF0dGVyblVuaWZvcm1zVHlwZT4gPT4gZXh0ZW5kKFxuICAgIGZpbGxVbmlmb3JtVmFsdWVzKG1hdHJpeCksXG4gICAgcGF0dGVyblVuaWZvcm1WYWx1ZXMoY3Jvc3NmYWRlLCBwYWludGVyLCB0aWxlKVxuKTtcblxuY29uc3QgZmlsbE91dGxpbmVVbmlmb3JtVmFsdWVzID0gKFxuICAgIG1hdHJpeDogRmxvYXQzMkFycmF5LFxuICAgIGRyYXdpbmdCdWZmZXJTaXplOiBbbnVtYmVyLCBudW1iZXJdXG4pOiBVbmlmb3JtVmFsdWVzPEZpbGxPdXRsaW5lVW5pZm9ybXNUeXBlPiA9PiAoe1xuICAgICd1X21hdHJpeCc6IG1hdHJpeCxcbiAgICAndV93b3JsZCc6IGRyYXdpbmdCdWZmZXJTaXplXG59KTtcblxuY29uc3QgZmlsbE91dGxpbmVQYXR0ZXJuVW5pZm9ybVZhbHVlcyA9IChcbiAgICBtYXRyaXg6IEZsb2F0MzJBcnJheSxcbiAgICBwYWludGVyOiBQYWludGVyLFxuICAgIGNyb3NzZmFkZTogQ3Jvc3NmYWRlUGFyYW1ldGVycyxcbiAgICB0aWxlOiBUaWxlLFxuICAgIGRyYXdpbmdCdWZmZXJTaXplOiBbbnVtYmVyLCBudW1iZXJdXG4pOiBVbmlmb3JtVmFsdWVzPEZpbGxPdXRsaW5lUGF0dGVyblVuaWZvcm1zVHlwZT4gPT4gZXh0ZW5kKFxuICAgIGZpbGxQYXR0ZXJuVW5pZm9ybVZhbHVlcyhtYXRyaXgsIHBhaW50ZXIsIGNyb3NzZmFkZSwgdGlsZSksXG4gICAge1xuICAgICAgICAndV93b3JsZCc6IGRyYXdpbmdCdWZmZXJTaXplXG4gICAgfVxuKTtcblxuZXhwb3J0IHtcbiAgICBmaWxsVW5pZm9ybXMsXG4gICAgZmlsbFBhdHRlcm5Vbmlmb3JtcyxcbiAgICBmaWxsT3V0bGluZVVuaWZvcm1zLFxuICAgIGZpbGxPdXRsaW5lUGF0dGVyblVuaWZvcm1zLFxuICAgIGZpbGxVbmlmb3JtVmFsdWVzLFxuICAgIGZpbGxQYXR0ZXJuVW5pZm9ybVZhbHVlcyxcbiAgICBmaWxsT3V0bGluZVVuaWZvcm1WYWx1ZXMsXG4gICAgZmlsbE91dGxpbmVQYXR0ZXJuVW5pZm9ybVZhbHVlc1xufTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7XG4gICAgVW5pZm9ybTFpLFxuICAgIFVuaWZvcm0xZixcbiAgICBVbmlmb3JtMmYsXG4gICAgVW5pZm9ybU1hdHJpeDRmXG59IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQgcGl4ZWxzVG9UaWxlVW5pdHMgZnJvbSAnLi4vLi4vc291cmNlL3BpeGVsc190b190aWxlX3VuaXRzJztcblxuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi8uLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtVbmlmb3JtVmFsdWVzLCBVbmlmb3JtTG9jYXRpb25zfSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uLy4uL3NvdXJjZS90aWxlX2lkJztcbmltcG9ydCB0eXBlIFRpbGUgZnJvbSAnLi4vLi4vc291cmNlL3RpbGUnO1xuaW1wb3J0IHR5cGUgQ2lyY2xlU3R5bGVMYXllciBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZV9sYXllci9jaXJjbGVfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuLi9wYWludGVyJztcbmltcG9ydCBicm93c2VyIGZyb20gJy4uLy4uL3V0aWwvYnJvd3Nlcic7XG5cbmV4cG9ydCB0eXBlIENpcmNsZVVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSc6IFVuaWZvcm0xZixcbiAgICAndV9zY2FsZV93aXRoX21hcCc6IFVuaWZvcm0xaSxcbiAgICAndV9waXRjaF93aXRoX21hcCc6IFVuaWZvcm0xaSxcbiAgICAndV9leHRydWRlX3NjYWxlJzogVW5pZm9ybTJmLFxuICAgICd1X2RldmljZV9waXhlbF9yYXRpbyc6IFVuaWZvcm0xZixcbiAgICAndV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGZcbnx9O1xuXG5jb25zdCBjaXJjbGVVbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBDaXJjbGVVbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlKSxcbiAgICAndV9zY2FsZV93aXRoX21hcCc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfc2NhbGVfd2l0aF9tYXApLFxuICAgICd1X3BpdGNoX3dpdGhfbWFwJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9waXRjaF93aXRoX21hcCksXG4gICAgJ3VfZXh0cnVkZV9zY2FsZSc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfZXh0cnVkZV9zY2FsZSksXG4gICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9kZXZpY2VfcGl4ZWxfcmF0aW8pLFxuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KVxufSk7XG5cbmNvbnN0IGNpcmNsZVVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgcGFpbnRlcjogUGFpbnRlcixcbiAgICBjb29yZDogT3ZlcnNjYWxlZFRpbGVJRCxcbiAgICB0aWxlOiBUaWxlLFxuICAgIGxheWVyOiBDaXJjbGVTdHlsZUxheWVyXG4pOiBVbmlmb3JtVmFsdWVzPENpcmNsZVVuaWZvcm1zVHlwZT4gPT4ge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IHBhaW50ZXIudHJhbnNmb3JtO1xuXG4gICAgbGV0IHBpdGNoV2l0aE1hcDogYm9vbGVhbiwgZXh0cnVkZVNjYWxlOiBbbnVtYmVyLCBudW1iZXJdO1xuICAgIGlmIChsYXllci5wYWludC5nZXQoJ2NpcmNsZS1waXRjaC1hbGlnbm1lbnQnKSA9PT0gJ21hcCcpIHtcbiAgICAgICAgY29uc3QgcGl4ZWxSYXRpbyA9IHBpeGVsc1RvVGlsZVVuaXRzKHRpbGUsIDEsIHRyYW5zZm9ybS56b29tKTtcbiAgICAgICAgcGl0Y2hXaXRoTWFwID0gdHJ1ZTtcbiAgICAgICAgZXh0cnVkZVNjYWxlID0gW3BpeGVsUmF0aW8sIHBpeGVsUmF0aW9dO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHBpdGNoV2l0aE1hcCA9IGZhbHNlO1xuICAgICAgICBleHRydWRlU2NhbGUgPSB0cmFuc2Zvcm0ucGl4ZWxzVG9HTFVuaXRzO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgICd1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UnOiB0cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSxcbiAgICAgICAgJ3Vfc2NhbGVfd2l0aF9tYXAnOiArKGxheWVyLnBhaW50LmdldCgnY2lyY2xlLXBpdGNoLXNjYWxlJykgPT09ICdtYXAnKSxcbiAgICAgICAgJ3VfbWF0cml4JzogcGFpbnRlci50cmFuc2xhdGVQb3NNYXRyaXgoXG4gICAgICAgICAgICBjb29yZC5wb3NNYXRyaXgsXG4gICAgICAgICAgICB0aWxlLFxuICAgICAgICAgICAgbGF5ZXIucGFpbnQuZ2V0KCdjaXJjbGUtdHJhbnNsYXRlJyksXG4gICAgICAgICAgICBsYXllci5wYWludC5nZXQoJ2NpcmNsZS10cmFuc2xhdGUtYW5jaG9yJykpLFxuICAgICAgICAndV9waXRjaF93aXRoX21hcCc6ICsocGl0Y2hXaXRoTWFwKSxcbiAgICAgICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLFxuICAgICAgICAndV9leHRydWRlX3NjYWxlJzogZXh0cnVkZVNjYWxlXG4gICAgfTtcbn07XG5cbmV4cG9ydCB7Y2lyY2xlVW5pZm9ybXMsIGNpcmNsZVVuaWZvcm1WYWx1ZXN9O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtcbiAgICBVbmlmb3JtMWYsXG4gICAgVW5pZm9ybTJmLFxuICAgIFVuaWZvcm1NYXRyaXg0ZlxufSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHBpeGVsc1RvVGlsZVVuaXRzIGZyb20gJy4uLy4uL3NvdXJjZS9waXhlbHNfdG9fdGlsZV91bml0cyc7XG5cbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VW5pZm9ybVZhbHVlcywgVW5pZm9ybUxvY2F0aW9uc30gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi8uLi9nZW8vdHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIFRpbGUgZnJvbSAnLi4vLi4vc291cmNlL3RpbGUnO1xuXG5leHBvcnQgdHlwZSBDb2xsaXNpb25Vbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlJzogVW5pZm9ybTFmLFxuICAgICd1X3BpeGVsc190b190aWxlX3VuaXRzJzogVW5pZm9ybTFmLFxuICAgICd1X2V4dHJ1ZGVfc2NhbGUnOiBVbmlmb3JtMmYsXG4gICAgJ3Vfb3ZlcnNjYWxlX2ZhY3Rvcic6IFVuaWZvcm0xZlxufH07XG5cbmV4cG9ydCB0eXBlIENvbGxpc2lvbkNpcmNsZVVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X2ludl9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGYsXG4gICAgJ3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSc6IFVuaWZvcm0xZixcbiAgICAndV92aWV3cG9ydF9zaXplJzogVW5pZm9ybTJmXG58fTtcblxuY29uc3QgY29sbGlzaW9uVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogQ29sbGlzaW9uVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UpLFxuICAgICd1X3BpeGVsc190b190aWxlX3VuaXRzJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9waXhlbHNfdG9fdGlsZV91bml0cyksXG4gICAgJ3VfZXh0cnVkZV9zY2FsZSc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfZXh0cnVkZV9zY2FsZSksXG4gICAgJ3Vfb3ZlcnNjYWxlX2ZhY3Rvcic6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfb3ZlcnNjYWxlX2ZhY3Rvcilcbn0pO1xuXG5jb25zdCBjb2xsaXNpb25DaXJjbGVVbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBDb2xsaXNpb25DaXJjbGVVbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeCksXG4gICAgJ3VfaW52X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfaW52X21hdHJpeCksXG4gICAgJ3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSksXG4gICAgJ3Vfdmlld3BvcnRfc2l6ZSc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfdmlld3BvcnRfc2l6ZSlcbn0pO1xuXG5jb25zdCBjb2xsaXNpb25Vbmlmb3JtVmFsdWVzID0gKFxuICAgIG1hdHJpeDogRmxvYXQzMkFycmF5LFxuICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtLFxuICAgIHRpbGU6IFRpbGVcbik6IFVuaWZvcm1WYWx1ZXM8Q29sbGlzaW9uVW5pZm9ybXNUeXBlPiA9PiB7XG4gICAgY29uc3QgcGl4ZWxSYXRpbyA9IHBpeGVsc1RvVGlsZVVuaXRzKHRpbGUsIDEsIHRyYW5zZm9ybS56b29tKTtcbiAgICBjb25zdCBzY2FsZSA9IE1hdGgucG93KDIsIHRyYW5zZm9ybS56b29tIC0gdGlsZS50aWxlSUQub3ZlcnNjYWxlZFopO1xuICAgIGNvbnN0IG92ZXJzY2FsZUZhY3RvciA9IHRpbGUudGlsZUlELm92ZXJzY2FsZUZhY3RvcigpO1xuICAgIHJldHVybiB7XG4gICAgICAgICd1X21hdHJpeCc6IG1hdHJpeCxcbiAgICAgICAgJ3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSc6IHRyYW5zZm9ybS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlLFxuICAgICAgICAndV9waXhlbHNfdG9fdGlsZV91bml0cyc6IHBpeGVsUmF0aW8sXG4gICAgICAgICd1X2V4dHJ1ZGVfc2NhbGUnOiBbdHJhbnNmb3JtLnBpeGVsc1RvR0xVbml0c1swXSAvIChwaXhlbFJhdGlvICogc2NhbGUpLFxuICAgICAgICAgICAgdHJhbnNmb3JtLnBpeGVsc1RvR0xVbml0c1sxXSAvIChwaXhlbFJhdGlvICogc2NhbGUpXSxcbiAgICAgICAgJ3Vfb3ZlcnNjYWxlX2ZhY3Rvcic6IG92ZXJzY2FsZUZhY3RvclxuICAgIH07XG59O1xuXG5jb25zdCBjb2xsaXNpb25DaXJjbGVVbmlmb3JtVmFsdWVzID0gKFxuICAgIG1hdHJpeDogRmxvYXQzMkFycmF5LFxuICAgIGludk1hdHJpeDogRmxvYXQzMkFycmF5LFxuICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtXG4pOiBVbmlmb3JtVmFsdWVzPENvbGxpc2lvbkNpcmNsZVVuaWZvcm1zVHlwZT4gPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAgICd1X21hdHJpeCc6IG1hdHJpeCxcbiAgICAgICAgJ3VfaW52X21hdHJpeCc6IGludk1hdHJpeCxcbiAgICAgICAgJ3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSc6IHRyYW5zZm9ybS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlLFxuICAgICAgICAndV92aWV3cG9ydF9zaXplJzogW3RyYW5zZm9ybS53aWR0aCwgdHJhbnNmb3JtLmhlaWdodF1cbiAgICB9O1xufTtcblxuZXhwb3J0IHtjb2xsaXNpb25Vbmlmb3JtcywgY29sbGlzaW9uVW5pZm9ybVZhbHVlcywgY29sbGlzaW9uQ2lyY2xlVW5pZm9ybXMsIGNvbGxpc2lvbkNpcmNsZVVuaWZvcm1WYWx1ZXN9O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtcbiAgICBVbmlmb3JtQ29sb3IsXG4gICAgVW5pZm9ybU1hdHJpeDRmLFxuICAgIFVuaWZvcm0xaSxcbiAgICBVbmlmb3JtMWZcbn0gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcblxuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi8uLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtVbmlmb3JtVmFsdWVzLCBVbmlmb3JtTG9jYXRpb25zfSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHR5cGUgQ29sb3IgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy91dGlsL2NvbG9yJztcblxuZXhwb3J0IHR5cGUgRGVidWdVbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X2NvbG9yJzogVW5pZm9ybUNvbG9yLFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9vdmVybGF5JzogVW5pZm9ybTFpLFxuICAgICd1X292ZXJsYXlfc2NhbGUnOiBVbmlmb3JtMWZcbnx9O1xuXG5jb25zdCBkZWJ1Z1VuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IERlYnVnVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfY29sb3InOiBuZXcgVW5pZm9ybUNvbG9yKGNvbnRleHQsIGxvY2F0aW9ucy51X2NvbG9yKSxcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeCksXG4gICAgJ3Vfb3ZlcmxheSc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfb3ZlcmxheSksXG4gICAgJ3Vfb3ZlcmxheV9zY2FsZSc6ICBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X292ZXJsYXlfc2NhbGUpLFxufSk7XG5cbmNvbnN0IGRlYnVnVW5pZm9ybVZhbHVlcyA9IChtYXRyaXg6IEZsb2F0MzJBcnJheSwgY29sb3I6IENvbG9yLCBzY2FsZVJhdGlvOiBudW1iZXIgPSAxKTogVW5pZm9ybVZhbHVlczxEZWJ1Z1VuaWZvcm1zVHlwZT4gPT4gKHtcbiAgICAndV9tYXRyaXgnOiBtYXRyaXgsXG4gICAgJ3VfY29sb3InOiBjb2xvcixcbiAgICAndV9vdmVybGF5JzogMCxcbiAgICAndV9vdmVybGF5X3NjYWxlJzogc2NhbGVSYXRpb1xufSk7XG5cbmV4cG9ydCB7ZGVidWdVbmlmb3JtcywgZGVidWdVbmlmb3JtVmFsdWVzfTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7VW5pZm9ybU1hdHJpeDRmfSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuXG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uLy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1VuaWZvcm1WYWx1ZXMsIFVuaWZvcm1Mb2NhdGlvbnN9IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5cbmV4cG9ydCB0eXBlIENsaXBwaW5nTWFza1VuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmXG58fTtcblxuY29uc3QgY2xpcHBpbmdNYXNrVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogQ2xpcHBpbmdNYXNrVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpXG59KTtcblxuY29uc3QgY2xpcHBpbmdNYXNrVW5pZm9ybVZhbHVlcyA9IChtYXRyaXg6IEZsb2F0MzJBcnJheSk6IFVuaWZvcm1WYWx1ZXM8Q2xpcHBpbmdNYXNrVW5pZm9ybXNUeXBlPiA9PiAoe1xuICAgICd1X21hdHJpeCc6IG1hdHJpeFxufSk7XG5cbmV4cG9ydCB7Y2xpcHBpbmdNYXNrVW5pZm9ybXMsIGNsaXBwaW5nTWFza1VuaWZvcm1WYWx1ZXN9O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHttYXQ0fSBmcm9tICdnbC1tYXRyaXgnO1xuXG5pbXBvcnQge1xuICAgIFVuaWZvcm0xaSxcbiAgICBVbmlmb3JtMWYsXG4gICAgVW5pZm9ybTJmLFxuICAgIFVuaWZvcm1NYXRyaXg0ZlxufSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHBpeGVsc1RvVGlsZVVuaXRzIGZyb20gJy4uLy4uL3NvdXJjZS9waXhlbHNfdG9fdGlsZV91bml0cyc7XG5cbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4uLy4uL3NvdXJjZS90aWxlJztcbmltcG9ydCB0eXBlIHtVbmlmb3JtVmFsdWVzLCBVbmlmb3JtTG9jYXRpb25zfSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuLi9wYWludGVyJztcbmltcG9ydCB0eXBlIEhlYXRtYXBTdHlsZUxheWVyIGZyb20gJy4uLy4uL3N0eWxlL3N0eWxlX2xheWVyL2hlYXRtYXBfc3R5bGVfbGF5ZXInO1xuXG5leHBvcnQgdHlwZSBIZWF0bWFwVW5pZm9ybXNUeXBlID0ge3xcbiAgICAndV9leHRydWRlX3NjYWxlJzogVW5pZm9ybTFmLFxuICAgICd1X2ludGVuc2l0eSc6IFVuaWZvcm0xZixcbiAgICAndV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGZcbnx9O1xuXG5leHBvcnQgdHlwZSBIZWF0bWFwVGV4dHVyZVVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X3dvcmxkJzogVW5pZm9ybTJmLFxuICAgICd1X2ltYWdlJzogVW5pZm9ybTFpLFxuICAgICd1X2NvbG9yX3JhbXAnOiBVbmlmb3JtMWksXG4gICAgJ3Vfb3BhY2l0eSc6IFVuaWZvcm0xZlxufH07XG5cbmNvbnN0IGhlYXRtYXBVbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBIZWF0bWFwVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfZXh0cnVkZV9zY2FsZSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfZXh0cnVkZV9zY2FsZSksXG4gICAgJ3VfaW50ZW5zaXR5JzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9pbnRlbnNpdHkpLFxuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KVxufSk7XG5cbmNvbnN0IGhlYXRtYXBUZXh0dXJlVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogSGVhdG1hcFRleHR1cmVVbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeCksXG4gICAgJ3Vfd29ybGQnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3dvcmxkKSxcbiAgICAndV9pbWFnZSc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaW1hZ2UpLFxuICAgICd1X2NvbG9yX3JhbXAnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X2NvbG9yX3JhbXApLFxuICAgICd1X29wYWNpdHknOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X29wYWNpdHkpXG59KTtcblxuY29uc3QgaGVhdG1hcFVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgbWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgdGlsZTogVGlsZSxcbiAgICB6b29tOiBudW1iZXIsXG4gICAgaW50ZW5zaXR5OiBudW1iZXJcbik6IFVuaWZvcm1WYWx1ZXM8SGVhdG1hcFVuaWZvcm1zVHlwZT4gPT4gKHtcbiAgICAndV9tYXRyaXgnOiBtYXRyaXgsXG4gICAgJ3VfZXh0cnVkZV9zY2FsZSc6IHBpeGVsc1RvVGlsZVVuaXRzKHRpbGUsIDEsIHpvb20pLFxuICAgICd1X2ludGVuc2l0eSc6IGludGVuc2l0eVxufSk7XG5cbmNvbnN0IGhlYXRtYXBUZXh0dXJlVW5pZm9ybVZhbHVlcyA9IChcbiAgICBwYWludGVyOiBQYWludGVyLFxuICAgIGxheWVyOiBIZWF0bWFwU3R5bGVMYXllcixcbiAgICB0ZXh0dXJlVW5pdDogbnVtYmVyLFxuICAgIGNvbG9yUmFtcFVuaXQ6IG51bWJlclxuKTogVW5pZm9ybVZhbHVlczxIZWF0bWFwVGV4dHVyZVVuaWZvcm1zVHlwZT4gPT4ge1xuICAgIGNvbnN0IG1hdHJpeCA9IG1hdDQuY3JlYXRlKCk7XG4gICAgbWF0NC5vcnRobyhtYXRyaXgsIDAsIHBhaW50ZXIud2lkdGgsIHBhaW50ZXIuaGVpZ2h0LCAwLCAwLCAxKTtcblxuICAgIGNvbnN0IGdsID0gcGFpbnRlci5jb250ZXh0LmdsO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ3VfbWF0cml4JzogbWF0cml4LFxuICAgICAgICAndV93b3JsZCc6IFtnbC5kcmF3aW5nQnVmZmVyV2lkdGgsIGdsLmRyYXdpbmdCdWZmZXJIZWlnaHRdLFxuICAgICAgICAndV9pbWFnZSc6IHRleHR1cmVVbml0LFxuICAgICAgICAndV9jb2xvcl9yYW1wJzogY29sb3JSYW1wVW5pdCxcbiAgICAgICAgJ3Vfb3BhY2l0eSc6IGxheWVyLnBhaW50LmdldCgnaGVhdG1hcC1vcGFjaXR5JylcbiAgICB9O1xufTtcblxuZXhwb3J0IHtcbiAgICBoZWF0bWFwVW5pZm9ybXMsXG4gICAgaGVhdG1hcFRleHR1cmVVbmlmb3JtcyxcbiAgICBoZWF0bWFwVW5pZm9ybVZhbHVlcyxcbiAgICBoZWF0bWFwVGV4dHVyZVVuaWZvcm1WYWx1ZXNcbn07XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge21hdDR9IGZyb20gJ2dsLW1hdHJpeCc7XG5cbmltcG9ydCB7XG4gICAgVW5pZm9ybTFpLFxuICAgIFVuaWZvcm0xZixcbiAgICBVbmlmb3JtMmYsXG4gICAgVW5pZm9ybUNvbG9yLFxuICAgIFVuaWZvcm1NYXRyaXg0ZixcbiAgICBVbmlmb3JtNGZcbn0gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi4vLi4vZGF0YS9leHRlbnQnO1xuaW1wb3J0IE1lcmNhdG9yQ29vcmRpbmF0ZSBmcm9tICcuLi8uLi9nZW8vbWVyY2F0b3JfY29vcmRpbmF0ZSc7XG5cbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VW5pZm9ybVZhbHVlcywgVW5pZm9ybUxvY2F0aW9uc30gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCB0eXBlIFRpbGUgZnJvbSAnLi4vLi4vc291cmNlL3RpbGUnO1xuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuLi9wYWludGVyJztcbmltcG9ydCB0eXBlIEhpbGxzaGFkZVN0eWxlTGF5ZXIgZnJvbSAnLi4vLi4vc3R5bGUvc3R5bGVfbGF5ZXIvaGlsbHNoYWRlX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIERFTURhdGEgZnJvbSAnLi4vLi4vZGF0YS9kZW1fZGF0YSc7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi4vLi4vc291cmNlL3RpbGVfaWQnO1xuXG5leHBvcnQgdHlwZSBIaWxsc2hhZGVVbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9pbWFnZSc6IFVuaWZvcm0xaSxcbiAgICAndV9sYXRyYW5nZSc6IFVuaWZvcm0yZixcbiAgICAndV9saWdodCc6IFVuaWZvcm0yZixcbiAgICAndV9zaGFkb3cnOiBVbmlmb3JtQ29sb3IsXG4gICAgJ3VfaGlnaGxpZ2h0JzogVW5pZm9ybUNvbG9yLFxuICAgICd1X2FjY2VudCc6IFVuaWZvcm1Db2xvclxufH07XG5cbmV4cG9ydCB0eXBlIEhpbGxzaGFkZVByZXBhcmVVbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9pbWFnZSc6IFVuaWZvcm0xaSxcbiAgICAndV9kaW1lbnNpb24nOiBVbmlmb3JtMmYsXG4gICAgJ3Vfem9vbSc6IFVuaWZvcm0xZixcbiAgICAndV9tYXh6b29tJzogVW5pZm9ybTFmLFxuICAgICd1X3VucGFjayc6IFVuaWZvcm00ZlxufH07XG5cbmNvbnN0IGhpbGxzaGFkZVVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IEhpbGxzaGFkZVVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KSxcbiAgICAndV9pbWFnZSc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaW1hZ2UpLFxuICAgICd1X2xhdHJhbmdlJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV9sYXRyYW5nZSksXG4gICAgJ3VfbGlnaHQnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X2xpZ2h0KSxcbiAgICAndV9zaGFkb3cnOiBuZXcgVW5pZm9ybUNvbG9yKGNvbnRleHQsIGxvY2F0aW9ucy51X3NoYWRvdyksXG4gICAgJ3VfaGlnaGxpZ2h0JzogbmV3IFVuaWZvcm1Db2xvcihjb250ZXh0LCBsb2NhdGlvbnMudV9oaWdobGlnaHQpLFxuICAgICd1X2FjY2VudCc6IG5ldyBVbmlmb3JtQ29sb3IoY29udGV4dCwgbG9jYXRpb25zLnVfYWNjZW50KVxufSk7XG5cbmNvbnN0IGhpbGxzaGFkZVByZXBhcmVVbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBIaWxsc2hhZGVQcmVwYXJlVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X2ltYWdlJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pbWFnZSksXG4gICAgJ3VfZGltZW5zaW9uJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV9kaW1lbnNpb24pLFxuICAgICd1X3pvb20nOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3pvb20pLFxuICAgICd1X21heHpvb20nOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X21heHpvb20pLFxuICAgICd1X3VucGFjayc6IG5ldyBVbmlmb3JtNGYoY29udGV4dCwgbG9jYXRpb25zLnVfdW5wYWNrKVxufSk7XG5cbmNvbnN0IGhpbGxzaGFkZVVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgcGFpbnRlcjogUGFpbnRlcixcbiAgICB0aWxlOiBUaWxlLFxuICAgIGxheWVyOiBIaWxsc2hhZGVTdHlsZUxheWVyXG4pOiBVbmlmb3JtVmFsdWVzPEhpbGxzaGFkZVVuaWZvcm1zVHlwZT4gPT4ge1xuICAgIGNvbnN0IHNoYWRvdyA9IGxheWVyLnBhaW50LmdldChcImhpbGxzaGFkZS1zaGFkb3ctY29sb3JcIik7XG4gICAgY29uc3QgaGlnaGxpZ2h0ID0gbGF5ZXIucGFpbnQuZ2V0KFwiaGlsbHNoYWRlLWhpZ2hsaWdodC1jb2xvclwiKTtcbiAgICBjb25zdCBhY2NlbnQgPSBsYXllci5wYWludC5nZXQoXCJoaWxsc2hhZGUtYWNjZW50LWNvbG9yXCIpO1xuXG4gICAgbGV0IGF6aW11dGhhbCA9IGxheWVyLnBhaW50LmdldCgnaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1kaXJlY3Rpb24nKSAqIChNYXRoLlBJIC8gMTgwKTtcbiAgICAvLyBtb2RpZnkgYXppbXV0aGFsIGFuZ2xlIGJ5IG1hcCByb3RhdGlvbiBpZiBsaWdodCBpcyBhbmNob3JlZCBhdCB0aGUgdmlld3BvcnRcbiAgICBpZiAobGF5ZXIucGFpbnQuZ2V0KCdoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWFuY2hvcicpID09PSAndmlld3BvcnQnKSB7XG4gICAgICAgIGF6aW11dGhhbCAtPSBwYWludGVyLnRyYW5zZm9ybS5hbmdsZTtcbiAgICB9XG4gICAgY29uc3QgYWxpZ24gPSAhcGFpbnRlci5vcHRpb25zLm1vdmluZztcbiAgICByZXR1cm4ge1xuICAgICAgICAndV9tYXRyaXgnOiBwYWludGVyLnRyYW5zZm9ybS5jYWxjdWxhdGVQb3NNYXRyaXgodGlsZS50aWxlSUQudG9VbndyYXBwZWQoKSwgYWxpZ24pLFxuICAgICAgICAndV9pbWFnZSc6IDAsXG4gICAgICAgICd1X2xhdHJhbmdlJzogZ2V0VGlsZUxhdFJhbmdlKHBhaW50ZXIsIHRpbGUudGlsZUlEKSxcbiAgICAgICAgJ3VfbGlnaHQnOiBbbGF5ZXIucGFpbnQuZ2V0KCdoaWxsc2hhZGUtZXhhZ2dlcmF0aW9uJyksIGF6aW11dGhhbF0sXG4gICAgICAgICd1X3NoYWRvdyc6IHNoYWRvdyxcbiAgICAgICAgJ3VfaGlnaGxpZ2h0JzogaGlnaGxpZ2h0LFxuICAgICAgICAndV9hY2NlbnQnOiBhY2NlbnRcbiAgICB9O1xufTtcblxuY29uc3QgaGlsbHNoYWRlVW5pZm9ybVByZXBhcmVWYWx1ZXMgPSAoXG4gICAgdGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlELCBkZW06IERFTURhdGEsIG1heHpvb206IG51bWJlclxuKTogVW5pZm9ybVZhbHVlczxIaWxsc2hhZGVQcmVwYXJlVW5pZm9ybXNUeXBlPiA9PiB7XG5cbiAgICBjb25zdCBzdHJpZGUgPSBkZW0uc3RyaWRlO1xuICAgIGNvbnN0IG1hdHJpeCA9IG1hdDQuY3JlYXRlKCk7XG4gICAgLy8gRmxpcCByZW5kZXJpbmcgYXQgeSBheGlzLlxuICAgIG1hdDQub3J0aG8obWF0cml4LCAwLCBFWFRFTlQsIC1FWFRFTlQsIDAsIDAsIDEpO1xuICAgIG1hdDQudHJhbnNsYXRlKG1hdHJpeCwgbWF0cml4LCBbMCwgLUVYVEVOVCwgMF0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ3VfbWF0cml4JzogbWF0cml4LFxuICAgICAgICAndV9pbWFnZSc6IDEsXG4gICAgICAgICd1X2RpbWVuc2lvbic6IFtzdHJpZGUsIHN0cmlkZV0sXG4gICAgICAgICd1X3pvb20nOiB0aWxlSUQub3ZlcnNjYWxlZFosXG4gICAgICAgICd1X21heHpvb20nOiBtYXh6b29tLFxuICAgICAgICAndV91bnBhY2snOiBkZW0uZ2V0VW5wYWNrVmVjdG9yKClcbiAgICB9O1xufTtcblxuZnVuY3Rpb24gZ2V0VGlsZUxhdFJhbmdlKHBhaW50ZXI6IFBhaW50ZXIsIHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCkge1xuICAgIC8vIGZvciBzY2FsaW5nIHRoZSBtYWduaXR1ZGUgb2YgYSBwb2ludHMgc2xvcGUgYnkgaXRzIGxhdGl0dWRlXG4gICAgY29uc3QgdGlsZXNBdFpvb20gPSBNYXRoLnBvdygyLCB0aWxlSUQuY2Fub25pY2FsLnopO1xuICAgIGNvbnN0IHkgPSB0aWxlSUQuY2Fub25pY2FsLnk7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgbmV3IE1lcmNhdG9yQ29vcmRpbmF0ZSgwLCB5IC8gdGlsZXNBdFpvb20pLnRvTG5nTGF0KCkubGF0LFxuICAgICAgICBuZXcgTWVyY2F0b3JDb29yZGluYXRlKDAsICh5ICsgMSkgLyB0aWxlc0F0Wm9vbSkudG9MbmdMYXQoKS5sYXRdO1xufVxuXG5leHBvcnQge1xuICAgIGhpbGxzaGFkZVVuaWZvcm1zLFxuICAgIGhpbGxzaGFkZVByZXBhcmVVbmlmb3JtcyxcbiAgICBoaWxsc2hhZGVVbmlmb3JtVmFsdWVzLFxuICAgIGhpbGxzaGFkZVVuaWZvcm1QcmVwYXJlVmFsdWVzXG59O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtcbiAgICBVbmlmb3JtMWksXG4gICAgVW5pZm9ybTFmLFxuICAgIFVuaWZvcm0yZixcbiAgICBVbmlmb3JtM2YsXG4gICAgVW5pZm9ybU1hdHJpeDRmXG59IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQgcGl4ZWxzVG9UaWxlVW5pdHMgZnJvbSAnLi4vLi4vc291cmNlL3BpeGVsc190b190aWxlX3VuaXRzJztcbmltcG9ydCB7ZXh0ZW5kfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vLi4vdXRpbC9icm93c2VyJztcblxuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi8uLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtVbmlmb3JtVmFsdWVzLCBVbmlmb3JtTG9jYXRpb25zfSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHR5cGUgVHJhbnNmb3JtIGZyb20gJy4uLy4uL2dlby90cmFuc2Zvcm0nO1xuaW1wb3J0IHR5cGUgVGlsZSBmcm9tICcuLi8uLi9zb3VyY2UvdGlsZSc7XG5pbXBvcnQgdHlwZSB7Q3Jvc3NGYWRlZH0gZnJvbSAnLi4vLi4vc3R5bGUvcHJvcGVydGllcyc7XG5pbXBvcnQgdHlwZSBMaW5lU3R5bGVMYXllciBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZV9sYXllci9saW5lX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIFBhaW50ZXIgZnJvbSAnLi4vcGFpbnRlcic7XG5pbXBvcnQgdHlwZSB7Q3Jvc3NmYWRlUGFyYW1ldGVyc30gZnJvbSAnLi4vLi4vc3R5bGUvZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcblxuZXhwb3J0IHR5cGUgTGluZVVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X3JhdGlvJzogVW5pZm9ybTFmLFxuICAgICd1X2RldmljZV9waXhlbF9yYXRpbyc6IFVuaWZvcm0xZixcbiAgICAndV91bml0c190b19waXhlbHMnOiBVbmlmb3JtMmZcbnx9O1xuXG5leHBvcnQgdHlwZSBMaW5lR3JhZGllbnRVbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9yYXRpbyc6IFVuaWZvcm0xZixcbiAgICAndV9kZXZpY2VfcGl4ZWxfcmF0aW8nOiBVbmlmb3JtMWYsXG4gICAgJ3VfdW5pdHNfdG9fcGl4ZWxzJzogVW5pZm9ybTJmLFxuICAgICd1X2ltYWdlJzogVW5pZm9ybTFpXG58fTtcblxuZXhwb3J0IHR5cGUgTGluZVBhdHRlcm5Vbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV90ZXhzaXplJzogVW5pZm9ybTJmLFxuICAgICd1X3JhdGlvJzogVW5pZm9ybTFmLFxuICAgICd1X2RldmljZV9waXhlbF9yYXRpbyc6IFVuaWZvcm0xZixcbiAgICAndV91bml0c190b19waXhlbHMnOiBVbmlmb3JtMmYsXG4gICAgJ3VfaW1hZ2UnOiBVbmlmb3JtMWksXG4gICAgJ3Vfc2NhbGUnOiBVbmlmb3JtM2YsXG4gICAgJ3VfZmFkZSc6IFVuaWZvcm0xZlxufH07XG5cbmV4cG9ydCB0eXBlIExpbmVTREZVbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9yYXRpbyc6IFVuaWZvcm0xZixcbiAgICAndV9kZXZpY2VfcGl4ZWxfcmF0aW8nOiBVbmlmb3JtMWYsXG4gICAgJ3VfdW5pdHNfdG9fcGl4ZWxzJzogVW5pZm9ybTJmLFxuICAgICd1X3BhdHRlcm5zY2FsZV9hJzogVW5pZm9ybTJmLFxuICAgICd1X3BhdHRlcm5zY2FsZV9iJzogVW5pZm9ybTJmLFxuICAgICd1X3NkZmdhbW1hJzogVW5pZm9ybTFmLFxuICAgICd1X2ltYWdlJzogVW5pZm9ybTFpLFxuICAgICd1X3RleF95X2EnOiBVbmlmb3JtMWYsXG4gICAgJ3VfdGV4X3lfYic6IFVuaWZvcm0xZixcbiAgICAndV9taXgnOiBVbmlmb3JtMWZcbnx9O1xuXG5jb25zdCBsaW5lVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogTGluZVVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KSxcbiAgICAndV9yYXRpbyc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfcmF0aW8pLFxuICAgICd1X2RldmljZV9waXhlbF9yYXRpbyc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfZGV2aWNlX3BpeGVsX3JhdGlvKSxcbiAgICAndV91bml0c190b19waXhlbHMnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3VuaXRzX3RvX3BpeGVscylcbn0pO1xuXG5jb25zdCBsaW5lR3JhZGllbnRVbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBMaW5lR3JhZGllbnRVbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeCksXG4gICAgJ3VfcmF0aW8nOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3JhdGlvKSxcbiAgICAndV9kZXZpY2VfcGl4ZWxfcmF0aW8nOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2RldmljZV9waXhlbF9yYXRpbyksXG4gICAgJ3VfdW5pdHNfdG9fcGl4ZWxzJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV91bml0c190b19waXhlbHMpLFxuICAgICd1X2ltYWdlJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pbWFnZSlcbn0pO1xuXG5jb25zdCBsaW5lUGF0dGVyblVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IExpbmVQYXR0ZXJuVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X3RleHNpemUnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3RleHNpemUpLFxuICAgICd1X3JhdGlvJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9yYXRpbyksXG4gICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9kZXZpY2VfcGl4ZWxfcmF0aW8pLFxuICAgICd1X2ltYWdlJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pbWFnZSksXG4gICAgJ3VfdW5pdHNfdG9fcGl4ZWxzJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV91bml0c190b19waXhlbHMpLFxuICAgICd1X3NjYWxlJzogbmV3IFVuaWZvcm0zZihjb250ZXh0LCBsb2NhdGlvbnMudV9zY2FsZSksXG4gICAgJ3VfZmFkZSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfZmFkZSlcbn0pO1xuXG5jb25zdCBsaW5lU0RGVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogTGluZVNERlVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KSxcbiAgICAndV9yYXRpbyc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfcmF0aW8pLFxuICAgICd1X2RldmljZV9waXhlbF9yYXRpbyc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfZGV2aWNlX3BpeGVsX3JhdGlvKSxcbiAgICAndV91bml0c190b19waXhlbHMnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3VuaXRzX3RvX3BpeGVscyksXG4gICAgJ3VfcGF0dGVybnNjYWxlX2EnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3BhdHRlcm5zY2FsZV9hKSxcbiAgICAndV9wYXR0ZXJuc2NhbGVfYic6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfcGF0dGVybnNjYWxlX2IpLFxuICAgICd1X3NkZmdhbW1hJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9zZGZnYW1tYSksXG4gICAgJ3VfaW1hZ2UnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X2ltYWdlKSxcbiAgICAndV90ZXhfeV9hJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV90ZXhfeV9hKSxcbiAgICAndV90ZXhfeV9iJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV90ZXhfeV9iKSxcbiAgICAndV9taXgnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X21peClcbn0pO1xuXG5jb25zdCBsaW5lVW5pZm9ybVZhbHVlcyA9IChcbiAgICBwYWludGVyOiBQYWludGVyLFxuICAgIHRpbGU6IFRpbGUsXG4gICAgbGF5ZXI6IExpbmVTdHlsZUxheWVyXG4pOiBVbmlmb3JtVmFsdWVzPExpbmVVbmlmb3Jtc1R5cGU+ID0+IHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBwYWludGVyLnRyYW5zZm9ybTtcblxuICAgIHJldHVybiB7XG4gICAgICAgICd1X21hdHJpeCc6IGNhbGN1bGF0ZU1hdHJpeChwYWludGVyLCB0aWxlLCBsYXllciksXG4gICAgICAgICd1X3JhdGlvJzogMSAvIHBpeGVsc1RvVGlsZVVuaXRzKHRpbGUsIDEsIHRyYW5zZm9ybS56b29tKSxcbiAgICAgICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLFxuICAgICAgICAndV91bml0c190b19waXhlbHMnOiBbXG4gICAgICAgICAgICAxIC8gdHJhbnNmb3JtLnBpeGVsc1RvR0xVbml0c1swXSxcbiAgICAgICAgICAgIDEgLyB0cmFuc2Zvcm0ucGl4ZWxzVG9HTFVuaXRzWzFdXG4gICAgICAgIF1cbiAgICB9O1xufTtcblxuY29uc3QgbGluZUdyYWRpZW50VW5pZm9ybVZhbHVlcyA9IChcbiAgICBwYWludGVyOiBQYWludGVyLFxuICAgIHRpbGU6IFRpbGUsXG4gICAgbGF5ZXI6IExpbmVTdHlsZUxheWVyXG4pOiBVbmlmb3JtVmFsdWVzPExpbmVHcmFkaWVudFVuaWZvcm1zVHlwZT4gPT4ge1xuICAgIHJldHVybiBleHRlbmQobGluZVVuaWZvcm1WYWx1ZXMocGFpbnRlciwgdGlsZSwgbGF5ZXIpLCB7XG4gICAgICAgICd1X2ltYWdlJzogMFxuICAgIH0pO1xufTtcblxuY29uc3QgbGluZVBhdHRlcm5Vbmlmb3JtVmFsdWVzID0gKFxuICAgIHBhaW50ZXI6IFBhaW50ZXIsXG4gICAgdGlsZTogVGlsZSxcbiAgICBsYXllcjogTGluZVN0eWxlTGF5ZXIsXG4gICAgY3Jvc3NmYWRlOiBDcm9zc2ZhZGVQYXJhbWV0ZXJzXG4pOiBVbmlmb3JtVmFsdWVzPExpbmVQYXR0ZXJuVW5pZm9ybXNUeXBlPiA9PiB7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gcGFpbnRlci50cmFuc2Zvcm07XG4gICAgY29uc3QgdGlsZVpvb21SYXRpbyA9IGNhbGN1bGF0ZVRpbGVSYXRpbyh0aWxlLCB0cmFuc2Zvcm0pO1xuICAgIHJldHVybiB7XG4gICAgICAgICd1X21hdHJpeCc6IGNhbGN1bGF0ZU1hdHJpeChwYWludGVyLCB0aWxlLCBsYXllciksXG4gICAgICAgICd1X3RleHNpemUnOiB0aWxlLmltYWdlQXRsYXNUZXh0dXJlLnNpemUsXG4gICAgICAgIC8vIGNhbWVyYSB6b29tIHJhdGlvXG4gICAgICAgICd1X3JhdGlvJzogMSAvIHBpeGVsc1RvVGlsZVVuaXRzKHRpbGUsIDEsIHRyYW5zZm9ybS56b29tKSxcbiAgICAgICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLFxuICAgICAgICAndV9pbWFnZSc6IDAsXG4gICAgICAgICd1X3NjYWxlJzogW3RpbGVab29tUmF0aW8sIGNyb3NzZmFkZS5mcm9tU2NhbGUsIGNyb3NzZmFkZS50b1NjYWxlXSxcbiAgICAgICAgJ3VfZmFkZSc6IGNyb3NzZmFkZS50LFxuICAgICAgICAndV91bml0c190b19waXhlbHMnOiBbXG4gICAgICAgICAgICAxIC8gdHJhbnNmb3JtLnBpeGVsc1RvR0xVbml0c1swXSxcbiAgICAgICAgICAgIDEgLyB0cmFuc2Zvcm0ucGl4ZWxzVG9HTFVuaXRzWzFdXG4gICAgICAgIF1cbiAgICB9O1xufTtcblxuY29uc3QgbGluZVNERlVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgcGFpbnRlcjogUGFpbnRlcixcbiAgICB0aWxlOiBUaWxlLFxuICAgIGxheWVyOiBMaW5lU3R5bGVMYXllcixcbiAgICBkYXNoYXJyYXk6IENyb3NzRmFkZWQ8QXJyYXk8bnVtYmVyPj4sXG4gICAgY3Jvc3NmYWRlOiBDcm9zc2ZhZGVQYXJhbWV0ZXJzXG4pOiBVbmlmb3JtVmFsdWVzPExpbmVTREZVbmlmb3Jtc1R5cGU+ID0+IHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBwYWludGVyLnRyYW5zZm9ybTtcbiAgICBjb25zdCBsaW5lQXRsYXMgPSBwYWludGVyLmxpbmVBdGxhcztcbiAgICBjb25zdCB0aWxlUmF0aW8gPSBjYWxjdWxhdGVUaWxlUmF0aW8odGlsZSwgdHJhbnNmb3JtKTtcblxuICAgIGNvbnN0IHJvdW5kID0gbGF5ZXIubGF5b3V0LmdldCgnbGluZS1jYXAnKSA9PT0gJ3JvdW5kJztcblxuICAgIGNvbnN0IHBvc0EgPSBsaW5lQXRsYXMuZ2V0RGFzaChkYXNoYXJyYXkuZnJvbSwgcm91bmQpO1xuICAgIGNvbnN0IHBvc0IgPSBsaW5lQXRsYXMuZ2V0RGFzaChkYXNoYXJyYXkudG8sIHJvdW5kKTtcblxuICAgIGNvbnN0IHdpZHRoQSA9IHBvc0Eud2lkdGggKiBjcm9zc2ZhZGUuZnJvbVNjYWxlO1xuICAgIGNvbnN0IHdpZHRoQiA9IHBvc0Iud2lkdGggKiBjcm9zc2ZhZGUudG9TY2FsZTtcblxuICAgIHJldHVybiBleHRlbmQobGluZVVuaWZvcm1WYWx1ZXMocGFpbnRlciwgdGlsZSwgbGF5ZXIpLCB7XG4gICAgICAgICd1X3BhdHRlcm5zY2FsZV9hJzogW3RpbGVSYXRpbyAvIHdpZHRoQSwgLXBvc0EuaGVpZ2h0IC8gMl0sXG4gICAgICAgICd1X3BhdHRlcm5zY2FsZV9iJzogW3RpbGVSYXRpbyAvIHdpZHRoQiwgLXBvc0IuaGVpZ2h0IC8gMl0sXG4gICAgICAgICd1X3NkZmdhbW1hJzogbGluZUF0bGFzLndpZHRoIC8gKE1hdGgubWluKHdpZHRoQSwgd2lkdGhCKSAqIDI1NiAqIGJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbykgLyAyLFxuICAgICAgICAndV9pbWFnZSc6IDAsXG4gICAgICAgICd1X3RleF95X2EnOiBwb3NBLnksXG4gICAgICAgICd1X3RleF95X2InOiBwb3NCLnksXG4gICAgICAgICd1X21peCc6IGNyb3NzZmFkZS50XG4gICAgfSk7XG59O1xuXG5mdW5jdGlvbiBjYWxjdWxhdGVUaWxlUmF0aW8odGlsZTogVGlsZSwgdHJhbnNmb3JtOiBUcmFuc2Zvcm0pIHtcbiAgICByZXR1cm4gMSAvIHBpeGVsc1RvVGlsZVVuaXRzKHRpbGUsIDEsIHRyYW5zZm9ybS50aWxlWm9vbSk7XG59XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZU1hdHJpeChwYWludGVyLCB0aWxlLCBsYXllcikge1xuICAgIHJldHVybiBwYWludGVyLnRyYW5zbGF0ZVBvc01hdHJpeChcbiAgICAgICAgdGlsZS50aWxlSUQucG9zTWF0cml4LFxuICAgICAgICB0aWxlLFxuICAgICAgICBsYXllci5wYWludC5nZXQoJ2xpbmUtdHJhbnNsYXRlJyksXG4gICAgICAgIGxheWVyLnBhaW50LmdldCgnbGluZS10cmFuc2xhdGUtYW5jaG9yJylcbiAgICApO1xufVxuXG5leHBvcnQge1xuICAgIGxpbmVVbmlmb3JtcyxcbiAgICBsaW5lR3JhZGllbnRVbmlmb3JtcyxcbiAgICBsaW5lUGF0dGVyblVuaWZvcm1zLFxuICAgIGxpbmVTREZVbmlmb3JtcyxcbiAgICBsaW5lVW5pZm9ybVZhbHVlcyxcbiAgICBsaW5lR3JhZGllbnRVbmlmb3JtVmFsdWVzLFxuICAgIGxpbmVQYXR0ZXJuVW5pZm9ybVZhbHVlcyxcbiAgICBsaW5lU0RGVW5pZm9ybVZhbHVlc1xufTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7XG4gICAgVW5pZm9ybTFpLFxuICAgIFVuaWZvcm0xZixcbiAgICBVbmlmb3JtMmYsXG4gICAgVW5pZm9ybTNmLFxuICAgIFVuaWZvcm1NYXRyaXg0ZlxufSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuXG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uLy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1VuaWZvcm1WYWx1ZXMsIFVuaWZvcm1Mb2NhdGlvbnN9IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQgdHlwZSBSYXN0ZXJTdHlsZUxheWVyIGZyb20gJy4uLy4uL3N0eWxlL3N0eWxlX2xheWVyL3Jhc3Rlcl9zdHlsZV9sYXllcic7XG5cbmV4cG9ydCB0eXBlIFJhc3RlclVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X3RsX3BhcmVudCc6IFVuaWZvcm0yZixcbiAgICAndV9zY2FsZV9wYXJlbnQnOiBVbmlmb3JtMWYsXG4gICAgJ3VfYnVmZmVyX3NjYWxlJzogVW5pZm9ybTFmLFxuICAgICd1X2ZhZGVfdCc6IFVuaWZvcm0xZixcbiAgICAndV9vcGFjaXR5JzogVW5pZm9ybTFmLFxuICAgICd1X2ltYWdlMCc6IFVuaWZvcm0xaSxcbiAgICAndV9pbWFnZTEnOiBVbmlmb3JtMWksXG4gICAgJ3VfYnJpZ2h0bmVzc19sb3cnOiBVbmlmb3JtMWYsXG4gICAgJ3VfYnJpZ2h0bmVzc19oaWdoJzogVW5pZm9ybTFmLFxuICAgICd1X3NhdHVyYXRpb25fZmFjdG9yJzogVW5pZm9ybTFmLFxuICAgICd1X2NvbnRyYXN0X2ZhY3Rvcic6IFVuaWZvcm0xZixcbiAgICAndV9zcGluX3dlaWdodHMnOiBVbmlmb3JtM2Zcbnx9O1xuXG5jb25zdCByYXN0ZXJVbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBSYXN0ZXJVbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeCksXG4gICAgJ3VfdGxfcGFyZW50JzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV90bF9wYXJlbnQpLFxuICAgICd1X3NjYWxlX3BhcmVudCc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfc2NhbGVfcGFyZW50KSxcbiAgICAndV9idWZmZXJfc2NhbGUnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2J1ZmZlcl9zY2FsZSksXG4gICAgJ3VfZmFkZV90JzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9mYWRlX3QpLFxuICAgICd1X29wYWNpdHknOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X29wYWNpdHkpLFxuICAgICd1X2ltYWdlMCc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaW1hZ2UwKSxcbiAgICAndV9pbWFnZTEnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X2ltYWdlMSksXG4gICAgJ3VfYnJpZ2h0bmVzc19sb3cnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2JyaWdodG5lc3NfbG93KSxcbiAgICAndV9icmlnaHRuZXNzX2hpZ2gnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2JyaWdodG5lc3NfaGlnaCksXG4gICAgJ3Vfc2F0dXJhdGlvbl9mYWN0b3InOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3NhdHVyYXRpb25fZmFjdG9yKSxcbiAgICAndV9jb250cmFzdF9mYWN0b3InOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2NvbnRyYXN0X2ZhY3RvciksXG4gICAgJ3Vfc3Bpbl93ZWlnaHRzJzogbmV3IFVuaWZvcm0zZihjb250ZXh0LCBsb2NhdGlvbnMudV9zcGluX3dlaWdodHMpXG59KTtcblxuY29uc3QgcmFzdGVyVW5pZm9ybVZhbHVlcyA9IChcbiAgICBtYXRyaXg6IEZsb2F0MzJBcnJheSxcbiAgICBwYXJlbnRUTDogW251bWJlciwgbnVtYmVyXSxcbiAgICBwYXJlbnRTY2FsZUJ5OiBudW1iZXIsXG4gICAgZmFkZToge21peDogbnVtYmVyLCBvcGFjaXR5OiBudW1iZXJ9LFxuICAgIGxheWVyOiBSYXN0ZXJTdHlsZUxheWVyXG4pOiBVbmlmb3JtVmFsdWVzPFJhc3RlclVuaWZvcm1zVHlwZT4gPT4gKHtcbiAgICAndV9tYXRyaXgnOiBtYXRyaXgsXG4gICAgJ3VfdGxfcGFyZW50JzogcGFyZW50VEwsXG4gICAgJ3Vfc2NhbGVfcGFyZW50JzogcGFyZW50U2NhbGVCeSxcbiAgICAndV9idWZmZXJfc2NhbGUnOiAxLFxuICAgICd1X2ZhZGVfdCc6IGZhZGUubWl4LFxuICAgICd1X29wYWNpdHknOiBmYWRlLm9wYWNpdHkgKiBsYXllci5wYWludC5nZXQoJ3Jhc3Rlci1vcGFjaXR5JyksXG4gICAgJ3VfaW1hZ2UwJzogMCxcbiAgICAndV9pbWFnZTEnOiAxLFxuICAgICd1X2JyaWdodG5lc3NfbG93JzogbGF5ZXIucGFpbnQuZ2V0KCdyYXN0ZXItYnJpZ2h0bmVzcy1taW4nKSxcbiAgICAndV9icmlnaHRuZXNzX2hpZ2gnOiBsYXllci5wYWludC5nZXQoJ3Jhc3Rlci1icmlnaHRuZXNzLW1heCcpLFxuICAgICd1X3NhdHVyYXRpb25fZmFjdG9yJzogc2F0dXJhdGlvbkZhY3RvcihsYXllci5wYWludC5nZXQoJ3Jhc3Rlci1zYXR1cmF0aW9uJykpLFxuICAgICd1X2NvbnRyYXN0X2ZhY3Rvcic6IGNvbnRyYXN0RmFjdG9yKGxheWVyLnBhaW50LmdldCgncmFzdGVyLWNvbnRyYXN0JykpLFxuICAgICd1X3NwaW5fd2VpZ2h0cyc6IHNwaW5XZWlnaHRzKGxheWVyLnBhaW50LmdldCgncmFzdGVyLWh1ZS1yb3RhdGUnKSlcbn0pO1xuXG5mdW5jdGlvbiBzcGluV2VpZ2h0cyhhbmdsZSkge1xuICAgIGFuZ2xlICo9IE1hdGguUEkgLyAxODA7XG4gICAgY29uc3QgcyA9IE1hdGguc2luKGFuZ2xlKTtcbiAgICBjb25zdCBjID0gTWF0aC5jb3MoYW5nbGUpO1xuICAgIHJldHVybiBbXG4gICAgICAgICgyICogYyArIDEpIC8gMyxcbiAgICAgICAgKC1NYXRoLnNxcnQoMykgKiBzIC0gYyArIDEpIC8gMyxcbiAgICAgICAgKE1hdGguc3FydCgzKSAqIHMgLSBjICsgMSkgLyAzXG4gICAgXTtcbn1cblxuZnVuY3Rpb24gY29udHJhc3RGYWN0b3IoY29udHJhc3QpIHtcbiAgICByZXR1cm4gY29udHJhc3QgPiAwID9cbiAgICAgICAgMSAvICgxIC0gY29udHJhc3QpIDpcbiAgICAgICAgMSArIGNvbnRyYXN0O1xufVxuXG5mdW5jdGlvbiBzYXR1cmF0aW9uRmFjdG9yKHNhdHVyYXRpb24pIHtcbiAgICByZXR1cm4gc2F0dXJhdGlvbiA+IDAgP1xuICAgICAgICAxIC0gMSAvICgxLjAwMSAtIHNhdHVyYXRpb24pIDpcbiAgICAgICAgLXNhdHVyYXRpb247XG59XG5cbmV4cG9ydCB7cmFzdGVyVW5pZm9ybXMsIHJhc3RlclVuaWZvcm1WYWx1ZXN9O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtcbiAgICBVbmlmb3JtMWksXG4gICAgVW5pZm9ybTFmLFxuICAgIFVuaWZvcm0yZixcbiAgICBVbmlmb3JtTWF0cml4NGZcbn0gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCB7ZXh0ZW5kfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vLi4vdXRpbC9icm93c2VyJztcblxuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi8uLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIFBhaW50ZXIgZnJvbSAnLi4vcGFpbnRlcic7XG5pbXBvcnQgdHlwZSB7VW5pZm9ybVZhbHVlcywgVW5pZm9ybUxvY2F0aW9uc30gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcblxuZXhwb3J0IHR5cGUgU3ltYm9sSWNvblVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfaXNfc2l6ZV96b29tX2NvbnN0YW50JzogVW5pZm9ybTFpLFxuICAgICd1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCc6IFVuaWZvcm0xaSxcbiAgICAndV9zaXplX3QnOiBVbmlmb3JtMWYsXG4gICAgJ3Vfc2l6ZSc6IFVuaWZvcm0xZixcbiAgICAndV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlJzogVW5pZm9ybTFmLFxuICAgICd1X3BpdGNoJzogVW5pZm9ybTFmLFxuICAgICd1X3JvdGF0ZV9zeW1ib2wnOiBVbmlmb3JtMWksXG4gICAgJ3VfYXNwZWN0X3JhdGlvJzogVW5pZm9ybTFmLFxuICAgICd1X2ZhZGVfY2hhbmdlJzogVW5pZm9ybTFmLFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9sYWJlbF9wbGFuZV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGYsXG4gICAgJ3VfY29vcmRfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X2lzX3RleHQnOiBVbmlmb3JtMWksXG4gICAgJ3VfcGl0Y2hfd2l0aF9tYXAnOiBVbmlmb3JtMWksXG4gICAgJ3VfdGV4c2l6ZSc6IFVuaWZvcm0yZixcbiAgICAndV90ZXh0dXJlJzogVW5pZm9ybTFpXG58fTtcblxuZXhwb3J0IHR5cGUgU3ltYm9sU0RGVW5pZm9ybXNUeXBlID0ge3xcbiAgICAndV9pc19zaXplX3pvb21fY29uc3RhbnQnOiBVbmlmb3JtMWksXG4gICAgJ3VfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50JzogVW5pZm9ybTFpLFxuICAgICd1X3NpemVfdCc6IFVuaWZvcm0xZixcbiAgICAndV9zaXplJzogVW5pZm9ybTFmLFxuICAgICd1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UnOiBVbmlmb3JtMWYsXG4gICAgJ3VfcGl0Y2gnOiBVbmlmb3JtMWYsXG4gICAgJ3Vfcm90YXRlX3N5bWJvbCc6IFVuaWZvcm0xaSxcbiAgICAndV9hc3BlY3RfcmF0aW8nOiBVbmlmb3JtMWYsXG4gICAgJ3VfZmFkZV9jaGFuZ2UnOiBVbmlmb3JtMWYsXG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X2xhYmVsX3BsYW5lX21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9jb29yZF9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGYsXG4gICAgJ3VfaXNfdGV4dCc6IFVuaWZvcm0xaSxcbiAgICAndV9waXRjaF93aXRoX21hcCc6IFVuaWZvcm0xaSxcbiAgICAndV90ZXhzaXplJzogVW5pZm9ybTJmLFxuICAgICd1X3RleHR1cmUnOiBVbmlmb3JtMWksXG4gICAgJ3VfZ2FtbWFfc2NhbGUnOiBVbmlmb3JtMWYsXG4gICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogVW5pZm9ybTFmLFxuICAgICd1X2lzX2hhbG8nOiBVbmlmb3JtMWlcbnx9O1xuXG5leHBvcnQgdHlwZSBzeW1ib2xUZXh0QW5kSWNvblVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfaXNfc2l6ZV96b29tX2NvbnN0YW50JzogVW5pZm9ybTFpLFxuICAgICd1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCc6IFVuaWZvcm0xaSxcbiAgICAndV9zaXplX3QnOiBVbmlmb3JtMWYsXG4gICAgJ3Vfc2l6ZSc6IFVuaWZvcm0xZixcbiAgICAndV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlJzogVW5pZm9ybTFmLFxuICAgICd1X3BpdGNoJzogVW5pZm9ybTFmLFxuICAgICd1X3JvdGF0ZV9zeW1ib2wnOiBVbmlmb3JtMWksXG4gICAgJ3VfYXNwZWN0X3JhdGlvJzogVW5pZm9ybTFmLFxuICAgICd1X2ZhZGVfY2hhbmdlJzogVW5pZm9ybTFmLFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9sYWJlbF9wbGFuZV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGYsXG4gICAgJ3VfY29vcmRfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X2lzX3RleHQnOiBVbmlmb3JtMWksXG4gICAgJ3VfcGl0Y2hfd2l0aF9tYXAnOiBVbmlmb3JtMWksXG4gICAgJ3VfdGV4c2l6ZSc6IFVuaWZvcm0yZixcbiAgICAndV90ZXhzaXplX2ljb24nOiBVbmlmb3JtMmYsXG4gICAgJ3VfdGV4dHVyZSc6IFVuaWZvcm0xaSxcbiAgICAndV90ZXh0dXJlX2ljb24nOiBVbmlmb3JtMWksXG4gICAgJ3VfZ2FtbWFfc2NhbGUnOiBVbmlmb3JtMWYsXG4gICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogVW5pZm9ybTFmLFxuICAgICd1X2lzX2hhbG8nOiBVbmlmb3JtMWlcbnx9O1xuXG5jb25zdCBzeW1ib2xJY29uVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogU3ltYm9sSWNvblVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X2lzX3NpemVfem9vbV9jb25zdGFudCc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaXNfc2l6ZV96b29tX2NvbnN0YW50KSxcbiAgICAndV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCksXG4gICAgJ3Vfc2l6ZV90JzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9zaXplX3QpLFxuICAgICd1X3NpemUnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3NpemUpLFxuICAgICd1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UpLFxuICAgICd1X3BpdGNoJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9waXRjaCksXG4gICAgJ3Vfcm90YXRlX3N5bWJvbCc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfcm90YXRlX3N5bWJvbCksXG4gICAgJ3VfYXNwZWN0X3JhdGlvJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9hc3BlY3RfcmF0aW8pLFxuICAgICd1X2ZhZGVfY2hhbmdlJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9mYWRlX2NoYW5nZSksXG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X2xhYmVsX3BsYW5lX21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbGFiZWxfcGxhbmVfbWF0cml4KSxcbiAgICAndV9jb29yZF9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X2Nvb3JkX21hdHJpeCksXG4gICAgJ3VfaXNfdGV4dCc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaXNfdGV4dCksXG4gICAgJ3VfcGl0Y2hfd2l0aF9tYXAnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X3BpdGNoX3dpdGhfbWFwKSxcbiAgICAndV90ZXhzaXplJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV90ZXhzaXplKSxcbiAgICAndV90ZXh0dXJlJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV90ZXh0dXJlKVxufSk7XG5cbmNvbnN0IHN5bWJvbFNERlVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IFN5bWJvbFNERlVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X2lzX3NpemVfem9vbV9jb25zdGFudCc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaXNfc2l6ZV96b29tX2NvbnN0YW50KSxcbiAgICAndV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCksXG4gICAgJ3Vfc2l6ZV90JzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9zaXplX3QpLFxuICAgICd1X3NpemUnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3NpemUpLFxuICAgICd1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UpLFxuICAgICd1X3BpdGNoJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9waXRjaCksXG4gICAgJ3Vfcm90YXRlX3N5bWJvbCc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfcm90YXRlX3N5bWJvbCksXG4gICAgJ3VfYXNwZWN0X3JhdGlvJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9hc3BlY3RfcmF0aW8pLFxuICAgICd1X2ZhZGVfY2hhbmdlJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9mYWRlX2NoYW5nZSksXG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X2xhYmVsX3BsYW5lX21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbGFiZWxfcGxhbmVfbWF0cml4KSxcbiAgICAndV9jb29yZF9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X2Nvb3JkX21hdHJpeCksXG4gICAgJ3VfaXNfdGV4dCc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaXNfdGV4dCksXG4gICAgJ3VfcGl0Y2hfd2l0aF9tYXAnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X3BpdGNoX3dpdGhfbWFwKSxcbiAgICAndV90ZXhzaXplJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV90ZXhzaXplKSxcbiAgICAndV90ZXh0dXJlJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV90ZXh0dXJlKSxcbiAgICAndV9nYW1tYV9zY2FsZSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfZ2FtbWFfc2NhbGUpLFxuICAgICd1X2RldmljZV9waXhlbF9yYXRpbyc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfZGV2aWNlX3BpeGVsX3JhdGlvKSxcbiAgICAndV9pc19oYWxvJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pc19oYWxvKVxufSk7XG5cbmNvbnN0IHN5bWJvbFRleHRBbmRJY29uVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogc3ltYm9sVGV4dEFuZEljb25Vbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9pc19zaXplX3pvb21fY29uc3RhbnQnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X2lzX3NpemVfem9vbV9jb25zdGFudCksXG4gICAgJ3VfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50JzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQpLFxuICAgICd1X3NpemVfdCc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfc2l6ZV90KSxcbiAgICAndV9zaXplJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9zaXplKSxcbiAgICAndV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlKSxcbiAgICAndV9waXRjaCc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfcGl0Y2gpLFxuICAgICd1X3JvdGF0ZV9zeW1ib2wnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X3JvdGF0ZV9zeW1ib2wpLFxuICAgICd1X2FzcGVjdF9yYXRpbyc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfYXNwZWN0X3JhdGlvKSxcbiAgICAndV9mYWRlX2NoYW5nZSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfZmFkZV9jaGFuZ2UpLFxuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KSxcbiAgICAndV9sYWJlbF9wbGFuZV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X2xhYmVsX3BsYW5lX21hdHJpeCksXG4gICAgJ3VfY29vcmRfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9jb29yZF9tYXRyaXgpLFxuICAgICd1X2lzX3RleHQnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X2lzX3RleHQpLFxuICAgICd1X3BpdGNoX3dpdGhfbWFwJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9waXRjaF93aXRoX21hcCksXG4gICAgJ3VfdGV4c2l6ZSc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfdGV4c2l6ZSksXG4gICAgJ3VfdGV4c2l6ZV9pY29uJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV90ZXhzaXplX2ljb24pLFxuICAgICd1X3RleHR1cmUnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X3RleHR1cmUpLFxuICAgICd1X3RleHR1cmVfaWNvbic6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfdGV4dHVyZV9pY29uKSxcbiAgICAndV9nYW1tYV9zY2FsZSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfZ2FtbWFfc2NhbGUpLFxuICAgICd1X2RldmljZV9waXhlbF9yYXRpbyc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfZGV2aWNlX3BpeGVsX3JhdGlvKSxcbiAgICAndV9pc19oYWxvJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pc19oYWxvKVxufSk7XG5cbmNvbnN0IHN5bWJvbEljb25Vbmlmb3JtVmFsdWVzID0gKFxuICAgIGZ1bmN0aW9uVHlwZTogc3RyaW5nLFxuICAgIHNpemU6ID97dVNpemVUOiBudW1iZXIsIHVTaXplOiBudW1iZXJ9LFxuICAgIHJvdGF0ZUluU2hhZGVyOiBib29sZWFuLFxuICAgIHBpdGNoV2l0aE1hcDogYm9vbGVhbixcbiAgICBwYWludGVyOiBQYWludGVyLFxuICAgIG1hdHJpeDogRmxvYXQzMkFycmF5LFxuICAgIGxhYmVsUGxhbmVNYXRyaXg6IEZsb2F0MzJBcnJheSxcbiAgICBnbENvb3JkTWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgaXNUZXh0OiBib29sZWFuLFxuICAgIHRleFNpemU6IFtudW1iZXIsIG51bWJlcl1cbik6IFVuaWZvcm1WYWx1ZXM8U3ltYm9sSWNvblVuaWZvcm1zVHlwZT4gPT4ge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IHBhaW50ZXIudHJhbnNmb3JtO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ3VfaXNfc2l6ZV96b29tX2NvbnN0YW50JzogKyhmdW5jdGlvblR5cGUgPT09ICdjb25zdGFudCcgfHwgZnVuY3Rpb25UeXBlID09PSAnc291cmNlJyksXG4gICAgICAgICd1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCc6ICsoZnVuY3Rpb25UeXBlID09PSAnY29uc3RhbnQnIHx8IGZ1bmN0aW9uVHlwZSA9PT0gJ2NhbWVyYScpLFxuICAgICAgICAndV9zaXplX3QnOiBzaXplID8gc2l6ZS51U2l6ZVQgOiAwLFxuICAgICAgICAndV9zaXplJzogc2l6ZSA/IHNpemUudVNpemUgOiAwLFxuICAgICAgICAndV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlJzogdHJhbnNmb3JtLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UsXG4gICAgICAgICd1X3BpdGNoJzogdHJhbnNmb3JtLnBpdGNoIC8gMzYwICogMiAqIE1hdGguUEksXG4gICAgICAgICd1X3JvdGF0ZV9zeW1ib2wnOiArcm90YXRlSW5TaGFkZXIsXG4gICAgICAgICd1X2FzcGVjdF9yYXRpbyc6IHRyYW5zZm9ybS53aWR0aCAvIHRyYW5zZm9ybS5oZWlnaHQsXG4gICAgICAgICd1X2ZhZGVfY2hhbmdlJzogcGFpbnRlci5vcHRpb25zLmZhZGVEdXJhdGlvbiA/IHBhaW50ZXIuc3ltYm9sRmFkZUNoYW5nZSA6IDEsXG4gICAgICAgICd1X21hdHJpeCc6IG1hdHJpeCxcbiAgICAgICAgJ3VfbGFiZWxfcGxhbmVfbWF0cml4JzogbGFiZWxQbGFuZU1hdHJpeCxcbiAgICAgICAgJ3VfY29vcmRfbWF0cml4JzogZ2xDb29yZE1hdHJpeCxcbiAgICAgICAgJ3VfaXNfdGV4dCc6ICtpc1RleHQsXG4gICAgICAgICd1X3BpdGNoX3dpdGhfbWFwJzogK3BpdGNoV2l0aE1hcCxcbiAgICAgICAgJ3VfdGV4c2l6ZSc6IHRleFNpemUsXG4gICAgICAgICd1X3RleHR1cmUnOiAwXG4gICAgfTtcbn07XG5cbmNvbnN0IHN5bWJvbFNERlVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgZnVuY3Rpb25UeXBlOiBzdHJpbmcsXG4gICAgc2l6ZTogP3t1U2l6ZVQ6IG51bWJlciwgdVNpemU6IG51bWJlcn0sXG4gICAgcm90YXRlSW5TaGFkZXI6IGJvb2xlYW4sXG4gICAgcGl0Y2hXaXRoTWFwOiBib29sZWFuLFxuICAgIHBhaW50ZXI6IFBhaW50ZXIsXG4gICAgbWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgbGFiZWxQbGFuZU1hdHJpeDogRmxvYXQzMkFycmF5LFxuICAgIGdsQ29vcmRNYXRyaXg6IEZsb2F0MzJBcnJheSxcbiAgICBpc1RleHQ6IGJvb2xlYW4sXG4gICAgdGV4U2l6ZTogW251bWJlciwgbnVtYmVyXSxcbiAgICBpc0hhbG86IGJvb2xlYW5cbik6IFVuaWZvcm1WYWx1ZXM8U3ltYm9sU0RGVW5pZm9ybXNUeXBlPiA9PiB7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gcGFpbnRlci50cmFuc2Zvcm07XG5cbiAgICByZXR1cm4gZXh0ZW5kKHN5bWJvbEljb25Vbmlmb3JtVmFsdWVzKGZ1bmN0aW9uVHlwZSwgc2l6ZSxcbiAgICAgICAgcm90YXRlSW5TaGFkZXIsIHBpdGNoV2l0aE1hcCwgcGFpbnRlciwgbWF0cml4LCBsYWJlbFBsYW5lTWF0cml4LFxuICAgICAgICBnbENvb3JkTWF0cml4LCBpc1RleHQsIHRleFNpemUpLCB7XG4gICAgICAgICd1X2dhbW1hX3NjYWxlJzogKHBpdGNoV2l0aE1hcCA/IE1hdGguY29zKHRyYW5zZm9ybS5fcGl0Y2gpICogdHJhbnNmb3JtLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UgOiAxKSxcbiAgICAgICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLFxuICAgICAgICAndV9pc19oYWxvJzogK2lzSGFsb1xuICAgIH0pO1xufTtcblxuY29uc3Qgc3ltYm9sVGV4dEFuZEljb25Vbmlmb3JtVmFsdWVzID0gKFxuICAgIGZ1bmN0aW9uVHlwZTogc3RyaW5nLFxuICAgIHNpemU6ID97dVNpemVUOiBudW1iZXIsIHVTaXplOiBudW1iZXJ9LFxuICAgIHJvdGF0ZUluU2hhZGVyOiBib29sZWFuLFxuICAgIHBpdGNoV2l0aE1hcDogYm9vbGVhbixcbiAgICBwYWludGVyOiBQYWludGVyLFxuICAgIG1hdHJpeDogRmxvYXQzMkFycmF5LFxuICAgIGxhYmVsUGxhbmVNYXRyaXg6IEZsb2F0MzJBcnJheSxcbiAgICBnbENvb3JkTWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgdGV4U2l6ZVNERjogW251bWJlciwgbnVtYmVyXSxcbiAgICB0ZXhTaXplSWNvbjogW251bWJlciwgbnVtYmVyXVxuKTogVW5pZm9ybVZhbHVlczxTeW1ib2xJY29uVW5pZm9ybXNUeXBlPiA9PiB7XG4gICAgcmV0dXJuIGV4dGVuZChzeW1ib2xTREZVbmlmb3JtVmFsdWVzKGZ1bmN0aW9uVHlwZSwgc2l6ZSxcbiAgICAgICAgcm90YXRlSW5TaGFkZXIsIHBpdGNoV2l0aE1hcCwgcGFpbnRlciwgbWF0cml4LCBsYWJlbFBsYW5lTWF0cml4LFxuICAgICAgICBnbENvb3JkTWF0cml4LCB0cnVlLCB0ZXhTaXplU0RGLCB0cnVlKSwge1xuICAgICAgICAndV90ZXhzaXplX2ljb24nOiB0ZXhTaXplSWNvbixcbiAgICAgICAgJ3VfdGV4dHVyZV9pY29uJzogMVxuICAgIH0pO1xufTtcblxuZXhwb3J0IHtzeW1ib2xJY29uVW5pZm9ybXMsIHN5bWJvbFNERlVuaWZvcm1zLCBzeW1ib2xJY29uVW5pZm9ybVZhbHVlcywgc3ltYm9sU0RGVW5pZm9ybVZhbHVlcywgc3ltYm9sVGV4dEFuZEljb25Vbmlmb3JtVmFsdWVzLCBzeW1ib2xUZXh0QW5kSWNvblVuaWZvcm1zfTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7YmdQYXR0ZXJuVW5pZm9ybVZhbHVlc30gZnJvbSAnLi9wYXR0ZXJuJztcbmltcG9ydCB7XG4gICAgVW5pZm9ybTFpLFxuICAgIFVuaWZvcm0xZixcbiAgICBVbmlmb3JtMmYsXG4gICAgVW5pZm9ybUNvbG9yLFxuICAgIFVuaWZvcm1NYXRyaXg0ZlxufSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHtleHRlbmR9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5cbmltcG9ydCB0eXBlIFBhaW50ZXIgZnJvbSAnLi4vcGFpbnRlcic7XG5pbXBvcnQgdHlwZSB7VW5pZm9ybVZhbHVlcywgVW5pZm9ybUxvY2F0aW9uc30gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSBDb2xvciBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuaW1wb3J0IHR5cGUge0Nyb3NzRmFkZWR9IGZyb20gJy4uLy4uL3N0eWxlL3Byb3BlcnRpZXMnO1xuaW1wb3J0IHR5cGUge0Nyb3NzZmFkZVBhcmFtZXRlcnN9IGZyb20gJy4uLy4uL3N0eWxlL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi4vLi4vc291cmNlL3RpbGVfaWQnO1xuaW1wb3J0IHR5cGUgUmVzb2x2ZWRJbWFnZSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvcmVzb2x2ZWRfaW1hZ2UnO1xuXG5leHBvcnQgdHlwZSBCYWNrZ3JvdW5kVW5pZm9ybXNUeXBlID0ge3xcbiAgICAndV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGYsXG4gICAgJ3Vfb3BhY2l0eSc6IFVuaWZvcm0xZixcbiAgICAndV9jb2xvcic6IFVuaWZvcm1Db2xvclxufH07XG5cbmV4cG9ydCB0eXBlIEJhY2tncm91bmRQYXR0ZXJuVW5pZm9ybXNUeXBlID0ge3xcbiAgICAndV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGYsXG4gICAgJ3Vfb3BhY2l0eSc6IFVuaWZvcm0xZixcbiAgICAvLyBwYXR0ZXJuIHVuaWZvcm1zOlxuICAgICd1X2ltYWdlJzogVW5pZm9ybTFpLFxuICAgICd1X3BhdHRlcm5fdGxfYSc6IFVuaWZvcm0yZixcbiAgICAndV9wYXR0ZXJuX2JyX2EnOiBVbmlmb3JtMmYsXG4gICAgJ3VfcGF0dGVybl90bF9iJzogVW5pZm9ybTJmLFxuICAgICd1X3BhdHRlcm5fYnJfYic6IFVuaWZvcm0yZixcbiAgICAndV90ZXhzaXplJzogVW5pZm9ybTJmLFxuICAgICd1X21peCc6IFVuaWZvcm0xZixcbiAgICAndV9wYXR0ZXJuX3NpemVfYSc6IFVuaWZvcm0yZixcbiAgICAndV9wYXR0ZXJuX3NpemVfYic6IFVuaWZvcm0yZixcbiAgICAndV9zY2FsZV9hJzogVW5pZm9ybTFmLFxuICAgICd1X3NjYWxlX2InOiBVbmlmb3JtMWYsXG4gICAgJ3VfcGl4ZWxfY29vcmRfdXBwZXInOiBVbmlmb3JtMmYsXG4gICAgJ3VfcGl4ZWxfY29vcmRfbG93ZXInOiBVbmlmb3JtMmYsXG4gICAgJ3VfdGlsZV91bml0c190b19waXhlbHMnOiBVbmlmb3JtMWZcbnx9O1xuXG5jb25zdCBiYWNrZ3JvdW5kVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogQmFja2dyb3VuZFVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KSxcbiAgICAndV9vcGFjaXR5JzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9vcGFjaXR5KSxcbiAgICAndV9jb2xvcic6IG5ldyBVbmlmb3JtQ29sb3IoY29udGV4dCwgbG9jYXRpb25zLnVfY29sb3IpXG59KTtcblxuY29uc3QgYmFja2dyb3VuZFBhdHRlcm5Vbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBCYWNrZ3JvdW5kUGF0dGVyblVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KSxcbiAgICAndV9vcGFjaXR5JzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9vcGFjaXR5KSxcbiAgICAndV9pbWFnZSc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaW1hZ2UpLFxuICAgICd1X3BhdHRlcm5fdGxfYSc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfcGF0dGVybl90bF9hKSxcbiAgICAndV9wYXR0ZXJuX2JyX2EnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3BhdHRlcm5fYnJfYSksXG4gICAgJ3VfcGF0dGVybl90bF9iJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV9wYXR0ZXJuX3RsX2IpLFxuICAgICd1X3BhdHRlcm5fYnJfYic6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfcGF0dGVybl9icl9iKSxcbiAgICAndV90ZXhzaXplJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV90ZXhzaXplKSxcbiAgICAndV9taXgnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X21peCksXG4gICAgJ3VfcGF0dGVybl9zaXplX2EnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3BhdHRlcm5fc2l6ZV9hKSxcbiAgICAndV9wYXR0ZXJuX3NpemVfYic6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfcGF0dGVybl9zaXplX2IpLFxuICAgICd1X3NjYWxlX2EnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3NjYWxlX2EpLFxuICAgICd1X3NjYWxlX2InOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3NjYWxlX2IpLFxuICAgICd1X3BpeGVsX2Nvb3JkX3VwcGVyJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV9waXhlbF9jb29yZF91cHBlciksXG4gICAgJ3VfcGl4ZWxfY29vcmRfbG93ZXInOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3BpeGVsX2Nvb3JkX2xvd2VyKSxcbiAgICAndV90aWxlX3VuaXRzX3RvX3BpeGVscyc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfdGlsZV91bml0c190b19waXhlbHMpXG59KTtcblxuY29uc3QgYmFja2dyb3VuZFVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgbWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgb3BhY2l0eTogbnVtYmVyLFxuICAgIGNvbG9yOiBDb2xvclxuKTogVW5pZm9ybVZhbHVlczxCYWNrZ3JvdW5kVW5pZm9ybXNUeXBlPiA9PiAoe1xuICAgICd1X21hdHJpeCc6IG1hdHJpeCxcbiAgICAndV9vcGFjaXR5Jzogb3BhY2l0eSxcbiAgICAndV9jb2xvcic6IGNvbG9yXG59KTtcblxuY29uc3QgYmFja2dyb3VuZFBhdHRlcm5Vbmlmb3JtVmFsdWVzID0gKFxuICAgIG1hdHJpeDogRmxvYXQzMkFycmF5LFxuICAgIG9wYWNpdHk6IG51bWJlcixcbiAgICBwYWludGVyOiBQYWludGVyLFxuICAgIGltYWdlOiBDcm9zc0ZhZGVkPFJlc29sdmVkSW1hZ2U+LFxuICAgIHRpbGU6IHt0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQsIHRpbGVTaXplOiBudW1iZXJ9LFxuICAgIGNyb3NzZmFkZTogQ3Jvc3NmYWRlUGFyYW1ldGVyc1xuKTogVW5pZm9ybVZhbHVlczxCYWNrZ3JvdW5kUGF0dGVyblVuaWZvcm1zVHlwZT4gPT4gZXh0ZW5kKFxuICAgIGJnUGF0dGVyblVuaWZvcm1WYWx1ZXMoaW1hZ2UsIGNyb3NzZmFkZSwgcGFpbnRlciwgdGlsZSksXG4gICAge1xuICAgICAgICAndV9tYXRyaXgnOiBtYXRyaXgsXG4gICAgICAgICd1X29wYWNpdHknOiBvcGFjaXR5XG4gICAgfVxuKTtcblxuZXhwb3J0IHtcbiAgICBiYWNrZ3JvdW5kVW5pZm9ybXMsXG4gICAgYmFja2dyb3VuZFBhdHRlcm5Vbmlmb3JtcyxcbiAgICBiYWNrZ3JvdW5kVW5pZm9ybVZhbHVlcyxcbiAgICBiYWNrZ3JvdW5kUGF0dGVyblVuaWZvcm1WYWx1ZXNcbn07XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2ZpbGxFeHRydXNpb25Vbmlmb3JtcywgZmlsbEV4dHJ1c2lvblBhdHRlcm5Vbmlmb3Jtc30gZnJvbSAnLi9maWxsX2V4dHJ1c2lvbl9wcm9ncmFtJztcbmltcG9ydCB7ZmlsbFVuaWZvcm1zLCBmaWxsUGF0dGVyblVuaWZvcm1zLCBmaWxsT3V0bGluZVVuaWZvcm1zLCBmaWxsT3V0bGluZVBhdHRlcm5Vbmlmb3Jtc30gZnJvbSAnLi9maWxsX3Byb2dyYW0nO1xuaW1wb3J0IHtjaXJjbGVVbmlmb3Jtc30gZnJvbSAnLi9jaXJjbGVfcHJvZ3JhbSc7XG5pbXBvcnQge2NvbGxpc2lvblVuaWZvcm1zLCBjb2xsaXNpb25DaXJjbGVVbmlmb3Jtc30gZnJvbSAnLi9jb2xsaXNpb25fcHJvZ3JhbSc7XG5pbXBvcnQge2RlYnVnVW5pZm9ybXN9IGZyb20gJy4vZGVidWdfcHJvZ3JhbSc7XG5pbXBvcnQge2NsaXBwaW5nTWFza1VuaWZvcm1zfSBmcm9tICcuL2NsaXBwaW5nX21hc2tfcHJvZ3JhbSc7XG5pbXBvcnQge2hlYXRtYXBVbmlmb3JtcywgaGVhdG1hcFRleHR1cmVVbmlmb3Jtc30gZnJvbSAnLi9oZWF0bWFwX3Byb2dyYW0nO1xuaW1wb3J0IHtoaWxsc2hhZGVVbmlmb3JtcywgaGlsbHNoYWRlUHJlcGFyZVVuaWZvcm1zfSBmcm9tICcuL2hpbGxzaGFkZV9wcm9ncmFtJztcbmltcG9ydCB7bGluZVVuaWZvcm1zLCBsaW5lR3JhZGllbnRVbmlmb3JtcywgbGluZVBhdHRlcm5Vbmlmb3JtcywgbGluZVNERlVuaWZvcm1zfSBmcm9tICcuL2xpbmVfcHJvZ3JhbSc7XG5pbXBvcnQge3Jhc3RlclVuaWZvcm1zfSBmcm9tICcuL3Jhc3Rlcl9wcm9ncmFtJztcbmltcG9ydCB7c3ltYm9sSWNvblVuaWZvcm1zLCBzeW1ib2xTREZVbmlmb3Jtcywgc3ltYm9sVGV4dEFuZEljb25Vbmlmb3Jtc30gZnJvbSAnLi9zeW1ib2xfcHJvZ3JhbSc7XG5pbXBvcnQge2JhY2tncm91bmRVbmlmb3JtcywgYmFja2dyb3VuZFBhdHRlcm5Vbmlmb3Jtc30gZnJvbSAnLi9iYWNrZ3JvdW5kX3Byb2dyYW0nO1xuXG5leHBvcnQgY29uc3QgcHJvZ3JhbVVuaWZvcm1zID0ge1xuICAgIGZpbGxFeHRydXNpb246IGZpbGxFeHRydXNpb25Vbmlmb3JtcyxcbiAgICBmaWxsRXh0cnVzaW9uUGF0dGVybjogZmlsbEV4dHJ1c2lvblBhdHRlcm5Vbmlmb3JtcyxcbiAgICBmaWxsOiBmaWxsVW5pZm9ybXMsXG4gICAgZmlsbFBhdHRlcm46IGZpbGxQYXR0ZXJuVW5pZm9ybXMsXG4gICAgZmlsbE91dGxpbmU6IGZpbGxPdXRsaW5lVW5pZm9ybXMsXG4gICAgZmlsbE91dGxpbmVQYXR0ZXJuOiBmaWxsT3V0bGluZVBhdHRlcm5Vbmlmb3JtcyxcbiAgICBjaXJjbGU6IGNpcmNsZVVuaWZvcm1zLFxuICAgIGNvbGxpc2lvbkJveDogY29sbGlzaW9uVW5pZm9ybXMsXG4gICAgY29sbGlzaW9uQ2lyY2xlOiBjb2xsaXNpb25DaXJjbGVVbmlmb3JtcyxcbiAgICBkZWJ1ZzogZGVidWdVbmlmb3JtcyxcbiAgICBjbGlwcGluZ01hc2s6IGNsaXBwaW5nTWFza1VuaWZvcm1zLFxuICAgIGhlYXRtYXA6IGhlYXRtYXBVbmlmb3JtcyxcbiAgICBoZWF0bWFwVGV4dHVyZTogaGVhdG1hcFRleHR1cmVVbmlmb3JtcyxcbiAgICBoaWxsc2hhZGU6IGhpbGxzaGFkZVVuaWZvcm1zLFxuICAgIGhpbGxzaGFkZVByZXBhcmU6IGhpbGxzaGFkZVByZXBhcmVVbmlmb3JtcyxcbiAgICBsaW5lOiBsaW5lVW5pZm9ybXMsXG4gICAgbGluZUdyYWRpZW50OiBsaW5lR3JhZGllbnRVbmlmb3JtcyxcbiAgICBsaW5lUGF0dGVybjogbGluZVBhdHRlcm5Vbmlmb3JtcyxcbiAgICBsaW5lU0RGOiBsaW5lU0RGVW5pZm9ybXMsXG4gICAgcmFzdGVyOiByYXN0ZXJVbmlmb3JtcyxcbiAgICBzeW1ib2xJY29uOiBzeW1ib2xJY29uVW5pZm9ybXMsXG4gICAgc3ltYm9sU0RGOiBzeW1ib2xTREZVbmlmb3JtcyxcbiAgICBzeW1ib2xUZXh0QW5kSWNvbjogc3ltYm9sVGV4dEFuZEljb25Vbmlmb3JtcyxcbiAgICBiYWNrZ3JvdW5kOiBiYWNrZ3JvdW5kVW5pZm9ybXMsXG4gICAgYmFja2dyb3VuZFBhdHRlcm46IGJhY2tncm91bmRQYXR0ZXJuVW5pZm9ybXNcbn07XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgdHlwZSBQYWludGVyIGZyb20gJy4vcGFpbnRlcic7XG5pbXBvcnQgdHlwZSBTb3VyY2VDYWNoZSBmcm9tICcuLi9zb3VyY2Uvc291cmNlX2NhY2hlJztcbmltcG9ydCB0eXBlIFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uL3NvdXJjZS90aWxlX2lkJztcbmltcG9ydCB0eXBlIFN5bWJvbEJ1Y2tldCBmcm9tICcuLi9kYXRhL2J1Y2tldC9zeW1ib2xfYnVja2V0JztcbmltcG9ydCBEZXB0aE1vZGUgZnJvbSAnLi4vZ2wvZGVwdGhfbW9kZSc7XG5pbXBvcnQgU3RlbmNpbE1vZGUgZnJvbSAnLi4vZ2wvc3RlbmNpbF9tb2RlJztcbmltcG9ydCBDdWxsRmFjZU1vZGUgZnJvbSAnLi4vZ2wvY3VsbF9mYWNlX21vZGUnO1xuaW1wb3J0IHtjb2xsaXNpb25Vbmlmb3JtVmFsdWVzLCBjb2xsaXNpb25DaXJjbGVVbmlmb3JtVmFsdWVzfSBmcm9tICcuL3Byb2dyYW0vY29sbGlzaW9uX3Byb2dyYW0nO1xuXG5pbXBvcnQge1F1YWRUcmlhbmdsZUFycmF5LCBDb2xsaXNpb25DaXJjbGVMYXlvdXRBcnJheX0gZnJvbSAnLi4vZGF0YS9hcnJheV90eXBlcyc7XG5pbXBvcnQge2NvbGxpc2lvbkNpcmNsZUxheW91dH0gZnJvbSAnLi4vZGF0YS9idWNrZXQvc3ltYm9sX2F0dHJpYnV0ZXMnO1xuaW1wb3J0IFNlZ21lbnRWZWN0b3IgZnJvbSAnLi4vZGF0YS9zZWdtZW50JztcbmltcG9ydCB7bWF0NH0gZnJvbSAnZ2wtbWF0cml4JztcbmltcG9ydCBWZXJ0ZXhCdWZmZXIgZnJvbSAnLi4vZ2wvdmVydGV4X2J1ZmZlcic7XG5pbXBvcnQgSW5kZXhCdWZmZXIgZnJvbSAnLi4vZ2wvaW5kZXhfYnVmZmVyJztcblxuZXhwb3J0IGRlZmF1bHQgZHJhd0NvbGxpc2lvbkRlYnVnO1xuXG50eXBlIFRpbGVCYXRjaCA9IHtcbiAgICBjaXJjbGVBcnJheTogQXJyYXk8bnVtYmVyPixcbiAgICBjaXJjbGVPZmZzZXQ6IG51bWJlcixcbiAgICB0cmFuc2Zvcm06IG1hdDQsXG4gICAgaW52VHJhbnNmb3JtOiBtYXQ0XG59O1xuXG5sZXQgcXVhZFRyaWFuZ2xlczogP1F1YWRUcmlhbmdsZUFycmF5O1xuXG5mdW5jdGlvbiBkcmF3Q29sbGlzaW9uRGVidWcocGFpbnRlcjogUGFpbnRlciwgc291cmNlQ2FjaGU6IFNvdXJjZUNhY2hlLCBsYXllcjogU3R5bGVMYXllciwgY29vcmRzOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPiwgdHJhbnNsYXRlOiBbbnVtYmVyLCBudW1iZXJdLCB0cmFuc2xhdGVBbmNob3I6ICdtYXAnIHwgJ3ZpZXdwb3J0JywgaXNUZXh0OiBib29sZWFuKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgY29uc3QgcHJvZ3JhbSA9IHBhaW50ZXIudXNlUHJvZ3JhbSgnY29sbGlzaW9uQm94Jyk7XG4gICAgY29uc3QgdGlsZUJhdGNoZXM6IEFycmF5PFRpbGVCYXRjaD4gPSBbXTtcbiAgICBsZXQgY2lyY2xlQ291bnQgPSAwO1xuICAgIGxldCBjaXJjbGVPZmZzZXQgPSAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29yZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY29vcmQgPSBjb29yZHNbaV07XG4gICAgICAgIGNvbnN0IHRpbGUgPSBzb3VyY2VDYWNoZS5nZXRUaWxlKGNvb3JkKTtcbiAgICAgICAgY29uc3QgYnVja2V0OiA/U3ltYm9sQnVja2V0ID0gKHRpbGUuZ2V0QnVja2V0KGxheWVyKTogYW55KTtcbiAgICAgICAgaWYgKCFidWNrZXQpIGNvbnRpbnVlO1xuICAgICAgICBsZXQgcG9zTWF0cml4ID0gY29vcmQucG9zTWF0cml4O1xuICAgICAgICBpZiAodHJhbnNsYXRlWzBdICE9PSAwIHx8IHRyYW5zbGF0ZVsxXSAhPT0gMCkge1xuICAgICAgICAgICAgcG9zTWF0cml4ID0gcGFpbnRlci50cmFuc2xhdGVQb3NNYXRyaXgoY29vcmQucG9zTWF0cml4LCB0aWxlLCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUFuY2hvcik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYnVmZmVycyA9IGlzVGV4dCA/IGJ1Y2tldC50ZXh0Q29sbGlzaW9uQm94IDogYnVja2V0Lmljb25Db2xsaXNpb25Cb3g7XG4gICAgICAgIC8vIEdldCBjb2xsaXNpb24gY2lyY2xlIGRhdGEgb2YgdGhpcyBidWNrZXRcbiAgICAgICAgY29uc3QgY2lyY2xlQXJyYXk6IEFycmF5PG51bWJlcj4gPSBidWNrZXQuY29sbGlzaW9uQ2lyY2xlQXJyYXk7XG4gICAgICAgIGlmIChjaXJjbGVBcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGtub3cgdGhlIHByb2plY3Rpb24gbWF0cml4IHRoYXQgd2FzIHVzZWQgZm9yIHByb2plY3RpbmcgY29sbGlzaW9uIGNpcmNsZXMgdG8gdGhlIHNjcmVlbi5cbiAgICAgICAgICAgIC8vIFRoaXMgbWlnaHQgdmFyeSBiZXR3ZWVuIGJ1Y2tldHMgYXMgdGhlIHN5bWJvbCBwbGFjZW1lbnQgaXMgYSBjb250aW5vdXMgcHJvY2Vzcy4gVGhpcyBtYXRyaXggaXNcbiAgICAgICAgICAgIC8vIHJlcXVpcmVkIGZvciB0cmFuc2Zvcm1pbmcgcG9pbnRzIGZyb20gcHJldmlvdXMgc2NyZWVuIHNwYWNlIHRvIHRoZSBjdXJyZW50IG9uZVxuICAgICAgICAgICAgY29uc3QgaW52VHJhbnNmb3JtID0gbWF0NC5jcmVhdGUoKTtcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IHBvc01hdHJpeDtcblxuICAgICAgICAgICAgbWF0NC5tdWwoaW52VHJhbnNmb3JtLCBidWNrZXQucGxhY2VtZW50SW52UHJvak1hdHJpeCwgcGFpbnRlci50cmFuc2Zvcm0uZ2xDb29yZE1hdHJpeCk7XG4gICAgICAgICAgICBtYXQ0Lm11bChpbnZUcmFuc2Zvcm0sIGludlRyYW5zZm9ybSwgYnVja2V0LnBsYWNlbWVudFZpZXdwb3J0TWF0cml4KTtcblxuICAgICAgICAgICAgdGlsZUJhdGNoZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgY2lyY2xlQXJyYXksXG4gICAgICAgICAgICAgICAgY2lyY2xlT2Zmc2V0LFxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICBpbnZUcmFuc2Zvcm1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjaXJjbGVDb3VudCArPSBjaXJjbGVBcnJheS5sZW5ndGggLyA0OyAgLy8gNCB2YWx1ZXMgcGVyIGNpcmNsZVxuICAgICAgICAgICAgY2lyY2xlT2Zmc2V0ID0gY2lyY2xlQ291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFidWZmZXJzKSBjb250aW51ZTtcbiAgICAgICAgcHJvZ3JhbS5kcmF3KGNvbnRleHQsIGdsLkxJTkVTLFxuICAgICAgICAgICAgRGVwdGhNb2RlLmRpc2FibGVkLCBTdGVuY2lsTW9kZS5kaXNhYmxlZCxcbiAgICAgICAgICAgIHBhaW50ZXIuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpLFxuICAgICAgICAgICAgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLFxuICAgICAgICAgICAgY29sbGlzaW9uVW5pZm9ybVZhbHVlcyhcbiAgICAgICAgICAgICAgICBwb3NNYXRyaXgsXG4gICAgICAgICAgICAgICAgcGFpbnRlci50cmFuc2Zvcm0sXG4gICAgICAgICAgICAgICAgdGlsZSksXG4gICAgICAgICAgICBsYXllci5pZCwgYnVmZmVycy5sYXlvdXRWZXJ0ZXhCdWZmZXIsIGJ1ZmZlcnMuaW5kZXhCdWZmZXIsXG4gICAgICAgICAgICBidWZmZXJzLnNlZ21lbnRzLCBudWxsLCBwYWludGVyLnRyYW5zZm9ybS56b29tLCBudWxsLCBudWxsLFxuICAgICAgICAgICAgYnVmZmVycy5jb2xsaXNpb25WZXJ0ZXhCdWZmZXIpO1xuICAgIH1cblxuICAgIGlmICghaXNUZXh0IHx8ICF0aWxlQmF0Y2hlcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFJlbmRlciBjb2xsaXNpb24gY2lyY2xlc1xuICAgIGNvbnN0IGNpcmNsZVByb2dyYW0gPSBwYWludGVyLnVzZVByb2dyYW0oJ2NvbGxpc2lvbkNpcmNsZScpO1xuXG4gICAgLy8gQ29uc3RydWN0IHZlcnRleCBkYXRhXG4gICAgY29uc3QgdmVydGV4RGF0YSA9IG5ldyBDb2xsaXNpb25DaXJjbGVMYXlvdXRBcnJheSgpO1xuICAgIHZlcnRleERhdGEucmVzaXplKGNpcmNsZUNvdW50ICogNCk7XG4gICAgdmVydGV4RGF0YS5fdHJpbSgpO1xuXG4gICAgbGV0IHZlcnRleE9mZnNldCA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IGJhdGNoIG9mIHRpbGVCYXRjaGVzKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmF0Y2guY2lyY2xlQXJyYXkubGVuZ3RoIC8gNDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjaXJjbGVJZHggPSBpICogNDtcbiAgICAgICAgICAgIGNvbnN0IHggPSBiYXRjaC5jaXJjbGVBcnJheVtjaXJjbGVJZHggKyAwXTtcbiAgICAgICAgICAgIGNvbnN0IHkgPSBiYXRjaC5jaXJjbGVBcnJheVtjaXJjbGVJZHggKyAxXTtcbiAgICAgICAgICAgIGNvbnN0IHJhZGl1cyA9IGJhdGNoLmNpcmNsZUFycmF5W2NpcmNsZUlkeCArIDJdO1xuICAgICAgICAgICAgY29uc3QgY29sbGlzaW9uID0gYmF0Y2guY2lyY2xlQXJyYXlbY2lyY2xlSWR4ICsgM107XG5cbiAgICAgICAgICAgIC8vIDQgZmxvYXRzIHBlciB2ZXJ0ZXgsIDQgdmVydGljZXMgcGVyIHF1YWRcbiAgICAgICAgICAgIHZlcnRleERhdGEuZW1wbGFjZSh2ZXJ0ZXhPZmZzZXQrKywgeCwgeSwgcmFkaXVzLCBjb2xsaXNpb24sIDApO1xuICAgICAgICAgICAgdmVydGV4RGF0YS5lbXBsYWNlKHZlcnRleE9mZnNldCsrLCB4LCB5LCByYWRpdXMsIGNvbGxpc2lvbiwgMSk7XG4gICAgICAgICAgICB2ZXJ0ZXhEYXRhLmVtcGxhY2UodmVydGV4T2Zmc2V0KyssIHgsIHksIHJhZGl1cywgY29sbGlzaW9uLCAyKTtcbiAgICAgICAgICAgIHZlcnRleERhdGEuZW1wbGFjZSh2ZXJ0ZXhPZmZzZXQrKywgeCwgeSwgcmFkaXVzLCBjb2xsaXNpb24sIDMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICghcXVhZFRyaWFuZ2xlcyB8fCBxdWFkVHJpYW5nbGVzLmxlbmd0aCA8IGNpcmNsZUNvdW50ICogMikge1xuICAgICAgICBxdWFkVHJpYW5nbGVzID0gY3JlYXRlUXVhZFRyaWFuZ2xlcyhjaXJjbGVDb3VudCk7XG4gICAgfVxuXG4gICAgY29uc3QgaW5kZXhCdWZmZXI6IEluZGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVJbmRleEJ1ZmZlcihxdWFkVHJpYW5nbGVzLCB0cnVlKTtcbiAgICBjb25zdCB2ZXJ0ZXhCdWZmZXI6IFZlcnRleEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHZlcnRleERhdGEsIGNvbGxpc2lvbkNpcmNsZUxheW91dC5tZW1iZXJzLCB0cnVlKTtcblxuICAgIC8vIFJlbmRlciBiYXRjaGVzXG4gICAgZm9yIChjb25zdCBiYXRjaCBvZiB0aWxlQmF0Y2hlcykge1xuICAgICAgICBjb25zdCB1bmlmb3JtcyA9IGNvbGxpc2lvbkNpcmNsZVVuaWZvcm1WYWx1ZXMoXG4gICAgICAgICAgICBiYXRjaC50cmFuc2Zvcm0sXG4gICAgICAgICAgICBiYXRjaC5pbnZUcmFuc2Zvcm0sXG4gICAgICAgICAgICBwYWludGVyLnRyYW5zZm9ybVxuICAgICAgICApO1xuXG4gICAgICAgIGNpcmNsZVByb2dyYW0uZHJhdyhcbiAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICBnbC5UUklBTkdMRVMsXG4gICAgICAgICAgICBEZXB0aE1vZGUuZGlzYWJsZWQsXG4gICAgICAgICAgICBTdGVuY2lsTW9kZS5kaXNhYmxlZCxcbiAgICAgICAgICAgIHBhaW50ZXIuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpLFxuICAgICAgICAgICAgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLFxuICAgICAgICAgICAgdW5pZm9ybXMsXG4gICAgICAgICAgICBsYXllci5pZCxcbiAgICAgICAgICAgIHZlcnRleEJ1ZmZlcixcbiAgICAgICAgICAgIGluZGV4QnVmZmVyLFxuICAgICAgICAgICAgU2VnbWVudFZlY3Rvci5zaW1wbGVTZWdtZW50KDAsIGJhdGNoLmNpcmNsZU9mZnNldCAqIDIsIGJhdGNoLmNpcmNsZUFycmF5Lmxlbmd0aCwgYmF0Y2guY2lyY2xlQXJyYXkubGVuZ3RoIC8gMiksXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgcGFpbnRlci50cmFuc2Zvcm0uem9vbSxcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgbnVsbCk7XG4gICAgfVxuXG4gICAgdmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICBpbmRleEJ1ZmZlci5kZXN0cm95KCk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVF1YWRUcmlhbmdsZXMocXVhZENvdW50OiBudW1iZXIpOiBRdWFkVHJpYW5nbGVBcnJheSB7XG4gICAgY29uc3QgdHJpQ291bnQgPSBxdWFkQ291bnQgKiAyO1xuICAgIGNvbnN0IGFycmF5ID0gbmV3IFF1YWRUcmlhbmdsZUFycmF5KCk7XG5cbiAgICBhcnJheS5yZXNpemUodHJpQ291bnQpO1xuICAgIGFycmF5Ll90cmltKCk7XG5cbiAgICAvLyBUd28gdHJpYW5nbGVzIGFuZCA0IHZlcnRpY2VzIHBlciBxdWFkLlxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHJpQ291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCBpZHggPSBpICogNjtcblxuICAgICAgICBhcnJheS51aW50MTZbaWR4ICsgMF0gPSBpICogNCArIDA7XG4gICAgICAgIGFycmF5LnVpbnQxNltpZHggKyAxXSA9IGkgKiA0ICsgMTtcbiAgICAgICAgYXJyYXkudWludDE2W2lkeCArIDJdID0gaSAqIDQgKyAyO1xuICAgICAgICBhcnJheS51aW50MTZbaWR4ICsgM10gPSBpICogNCArIDI7XG4gICAgICAgIGFycmF5LnVpbnQxNltpZHggKyA0XSA9IGkgKiA0ICsgMztcbiAgICAgICAgYXJyYXkudWludDE2W2lkeCArIDVdID0gaSAqIDQgKyAwO1xuICAgIH1cblxuICAgIHJldHVybiBhcnJheTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCBkcmF3Q29sbGlzaW9uRGVidWcgZnJvbSAnLi9kcmF3X2NvbGxpc2lvbl9kZWJ1Zyc7XG5cbmltcG9ydCBTZWdtZW50VmVjdG9yIGZyb20gJy4uL2RhdGEvc2VnbWVudCc7XG5pbXBvcnQgcGl4ZWxzVG9UaWxlVW5pdHMgZnJvbSAnLi4vc291cmNlL3BpeGVsc190b190aWxlX3VuaXRzJztcbmltcG9ydCAqIGFzIHN5bWJvbFByb2plY3Rpb24gZnJvbSAnLi4vc3ltYm9sL3Byb2plY3Rpb24nO1xuaW1wb3J0ICogYXMgc3ltYm9sU2l6ZSBmcm9tICcuLi9zeW1ib2wvc3ltYm9sX3NpemUnO1xuaW1wb3J0IHttYXQ0fSBmcm9tICdnbC1tYXRyaXgnO1xuY29uc3QgaWRlbnRpdHlNYXQ0ID0gbWF0NC5pZGVudGl0eShuZXcgRmxvYXQzMkFycmF5KDE2KSk7XG5pbXBvcnQgU3RlbmNpbE1vZGUgZnJvbSAnLi4vZ2wvc3RlbmNpbF9tb2RlJztcbmltcG9ydCBEZXB0aE1vZGUgZnJvbSAnLi4vZ2wvZGVwdGhfbW9kZSc7XG5pbXBvcnQgQ3VsbEZhY2VNb2RlIGZyb20gJy4uL2dsL2N1bGxfZmFjZV9tb2RlJztcbmltcG9ydCB7YWRkRHluYW1pY0F0dHJpYnV0ZXN9IGZyb20gJy4uL2RhdGEvYnVja2V0L3N5bWJvbF9idWNrZXQnO1xuXG5pbXBvcnQge2dldEFuY2hvckFsaWdubWVudCwgV3JpdGluZ01vZGV9IGZyb20gJy4uL3N5bWJvbC9zaGFwaW5nJztcbmltcG9ydCBPTkVfRU0gZnJvbSAnLi4vc3ltYm9sL29uZV9lbSc7XG5pbXBvcnQge2V2YWx1YXRlVmFyaWFibGVPZmZzZXR9IGZyb20gJy4uL3N5bWJvbC9zeW1ib2xfbGF5b3V0JztcblxuaW1wb3J0IHtcbiAgICBzeW1ib2xJY29uVW5pZm9ybVZhbHVlcyxcbiAgICBzeW1ib2xTREZVbmlmb3JtVmFsdWVzLFxuICAgIHN5bWJvbFRleHRBbmRJY29uVW5pZm9ybVZhbHVlc1xufSBmcm9tICcuL3Byb2dyYW0vc3ltYm9sX3Byb2dyYW0nO1xuXG5pbXBvcnQgdHlwZSBQYWludGVyIGZyb20gJy4vcGFpbnRlcic7XG5pbXBvcnQgdHlwZSBTb3VyY2VDYWNoZSBmcm9tICcuLi9zb3VyY2Uvc291cmNlX2NhY2hlJztcbmltcG9ydCB0eXBlIFN5bWJvbFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXIvc3ltYm9sX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIFN5bWJvbEJ1Y2tldCwge1N5bWJvbEJ1ZmZlcnN9IGZyb20gJy4uL2RhdGEvYnVja2V0L3N5bWJvbF9idWNrZXQnO1xuaW1wb3J0IHR5cGUgVGV4dHVyZSBmcm9tICcuLi9yZW5kZXIvdGV4dHVyZSc7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi4vc291cmNlL3RpbGVfaWQnO1xuaW1wb3J0IHR5cGUge1VuaWZvcm1WYWx1ZXN9IGZyb20gJy4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCB0eXBlIHtTeW1ib2xTREZVbmlmb3Jtc1R5cGV9IGZyb20gJy4uL3JlbmRlci9wcm9ncmFtL3N5bWJvbF9wcm9ncmFtJztcbmltcG9ydCB0eXBlIHtDcm9zc1RpbGVJRCwgVmFyaWFibGVPZmZzZXR9IGZyb20gJy4uL3N5bWJvbC9wbGFjZW1lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBkcmF3U3ltYm9scztcblxudHlwZSBTeW1ib2xUaWxlUmVuZGVyU3RhdGUgPSB7XG4gICAgc2VnbWVudHM6IFNlZ21lbnRWZWN0b3IsXG4gICAgc29ydEtleTogbnVtYmVyLFxuICAgIHN0YXRlOiB7XG4gICAgICAgIHByb2dyYW06IGFueSxcbiAgICAgICAgYnVmZmVyczogU3ltYm9sQnVmZmVycyxcbiAgICAgICAgdW5pZm9ybVZhbHVlczogYW55LFxuICAgICAgICBhdGxhc1RleHR1cmU6IFRleHR1cmUsXG4gICAgICAgIGF0bGFzVGV4dHVyZUljb246IFRleHR1cmUgfCBudWxsLFxuICAgICAgICBhdGxhc0ludGVycG9sYXRpb246IGFueSxcbiAgICAgICAgYXRsYXNJbnRlcnBvbGF0aW9uSWNvbjogYW55LFxuICAgICAgICBpc1NERjogYm9vbGVhbixcbiAgICAgICAgaGFzSGFsbzogYm9vbGVhblxuICAgIH1cbn07XG5cbmZ1bmN0aW9uIGRyYXdTeW1ib2xzKHBhaW50ZXI6IFBhaW50ZXIsIHNvdXJjZUNhY2hlOiBTb3VyY2VDYWNoZSwgbGF5ZXI6IFN5bWJvbFN0eWxlTGF5ZXIsIGNvb3JkczogQXJyYXk8T3ZlcnNjYWxlZFRpbGVJRD4sIHZhcmlhYmxlT2Zmc2V0czoge1tfOiBDcm9zc1RpbGVJRF06IFZhcmlhYmxlT2Zmc2V0fSkge1xuICAgIGlmIChwYWludGVyLnJlbmRlclBhc3MgIT09ICd0cmFuc2x1Y2VudCcpIHJldHVybjtcblxuICAgIC8vIERpc2FibGUgdGhlIHN0ZW5jaWwgdGVzdCBzbyB0aGF0IGxhYmVscyBhcmVuJ3QgY2xpcHBlZCB0byB0aWxlIGJvdW5kYXJpZXMuXG4gICAgY29uc3Qgc3RlbmNpbE1vZGUgPSBTdGVuY2lsTW9kZS5kaXNhYmxlZDtcbiAgICBjb25zdCBjb2xvck1vZGUgPSBwYWludGVyLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKTtcbiAgICBjb25zdCB2YXJpYWJsZVBsYWNlbWVudCA9IGxheWVyLmxheW91dC5nZXQoJ3RleHQtdmFyaWFibGUtYW5jaG9yJyk7XG5cbiAgICAvL0NvbXB1dGUgdmFyaWFibGUtb2Zmc2V0cyBiZWZvcmUgcGFpbnRpbmcgc2luY2UgaWNvbnMgYW5kIHRleHQgZGF0YSBwb3NpdGlvbmluZ1xuICAgIC8vZGVwZW5kIG9uIGVhY2ggb3RoZXIgaW4gdGhpcyBjYXNlLlxuICAgIGlmICh2YXJpYWJsZVBsYWNlbWVudCkge1xuICAgICAgICB1cGRhdGVWYXJpYWJsZUFuY2hvcnMoY29vcmRzLCBwYWludGVyLCBsYXllciwgc291cmNlQ2FjaGUsXG4gICAgICAgICAgICBsYXllci5sYXlvdXQuZ2V0KCd0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCcpLFxuICAgICAgICAgICAgbGF5ZXIubGF5b3V0LmdldCgndGV4dC1waXRjaC1hbGlnbm1lbnQnKSxcbiAgICAgICAgICAgIHZhcmlhYmxlT2Zmc2V0c1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChsYXllci5wYWludC5nZXQoJ2ljb24tb3BhY2l0eScpLmNvbnN0YW50T3IoMSkgIT09IDApIHtcbiAgICAgICAgZHJhd0xheWVyU3ltYm9scyhwYWludGVyLCBzb3VyY2VDYWNoZSwgbGF5ZXIsIGNvb3JkcywgZmFsc2UsXG4gICAgICAgICAgICBsYXllci5wYWludC5nZXQoJ2ljb24tdHJhbnNsYXRlJyksXG4gICAgICAgICAgICBsYXllci5wYWludC5nZXQoJ2ljb24tdHJhbnNsYXRlLWFuY2hvcicpLFxuICAgICAgICAgICAgbGF5ZXIubGF5b3V0LmdldCgnaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQnKSxcbiAgICAgICAgICAgIGxheWVyLmxheW91dC5nZXQoJ2ljb24tcGl0Y2gtYWxpZ25tZW50JyksXG4gICAgICAgICAgICBsYXllci5sYXlvdXQuZ2V0KCdpY29uLWtlZXAtdXByaWdodCcpLFxuICAgICAgICAgICAgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChsYXllci5wYWludC5nZXQoJ3RleHQtb3BhY2l0eScpLmNvbnN0YW50T3IoMSkgIT09IDApIHtcbiAgICAgICAgZHJhd0xheWVyU3ltYm9scyhwYWludGVyLCBzb3VyY2VDYWNoZSwgbGF5ZXIsIGNvb3JkcywgdHJ1ZSxcbiAgICAgICAgICAgIGxheWVyLnBhaW50LmdldCgndGV4dC10cmFuc2xhdGUnKSxcbiAgICAgICAgICAgIGxheWVyLnBhaW50LmdldCgndGV4dC10cmFuc2xhdGUtYW5jaG9yJyksXG4gICAgICAgICAgICBsYXllci5sYXlvdXQuZ2V0KCd0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCcpLFxuICAgICAgICAgICAgbGF5ZXIubGF5b3V0LmdldCgndGV4dC1waXRjaC1hbGlnbm1lbnQnKSxcbiAgICAgICAgICAgIGxheWVyLmxheW91dC5nZXQoJ3RleHQta2VlcC11cHJpZ2h0JyksXG4gICAgICAgICAgICBzdGVuY2lsTW9kZSwgY29sb3JNb2RlXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHNvdXJjZUNhY2hlLm1hcC5zaG93Q29sbGlzaW9uQm94ZXMpIHtcbiAgICAgICAgZHJhd0NvbGxpc2lvbkRlYnVnKHBhaW50ZXIsIHNvdXJjZUNhY2hlLCBsYXllciwgY29vcmRzLCBsYXllci5wYWludC5nZXQoJ3RleHQtdHJhbnNsYXRlJyksXG4gICAgICAgICAgICBsYXllci5wYWludC5nZXQoJ3RleHQtdHJhbnNsYXRlLWFuY2hvcicpLCB0cnVlKTtcbiAgICAgICAgZHJhd0NvbGxpc2lvbkRlYnVnKHBhaW50ZXIsIHNvdXJjZUNhY2hlLCBsYXllciwgY29vcmRzLCBsYXllci5wYWludC5nZXQoJ2ljb24tdHJhbnNsYXRlJyksXG4gICAgICAgICAgICBsYXllci5wYWludC5nZXQoJ2ljb24tdHJhbnNsYXRlLWFuY2hvcicpLCBmYWxzZSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVWYXJpYWJsZVJlbmRlclNoaWZ0KGFuY2hvciwgd2lkdGgsIGhlaWdodCwgdGV4dE9mZnNldCwgdGV4dEJveFNjYWxlLCByZW5kZXJUZXh0U2l6ZSk6IFBvaW50IHtcbiAgICBjb25zdCB7aG9yaXpvbnRhbEFsaWduLCB2ZXJ0aWNhbEFsaWdufSA9IGdldEFuY2hvckFsaWdubWVudChhbmNob3IpO1xuICAgIGNvbnN0IHNoaWZ0WCA9IC0oaG9yaXpvbnRhbEFsaWduIC0gMC41KSAqIHdpZHRoO1xuICAgIGNvbnN0IHNoaWZ0WSA9IC0odmVydGljYWxBbGlnbiAtIDAuNSkgKiBoZWlnaHQ7XG4gICAgY29uc3QgdmFyaWFibGVPZmZzZXQgPSBldmFsdWF0ZVZhcmlhYmxlT2Zmc2V0KGFuY2hvciwgdGV4dE9mZnNldCk7XG4gICAgcmV0dXJuIG5ldyBQb2ludChcbiAgICAgICAgKHNoaWZ0WCAvIHRleHRCb3hTY2FsZSArIHZhcmlhYmxlT2Zmc2V0WzBdKSAqIHJlbmRlclRleHRTaXplLFxuICAgICAgICAoc2hpZnRZIC8gdGV4dEJveFNjYWxlICsgdmFyaWFibGVPZmZzZXRbMV0pICogcmVuZGVyVGV4dFNpemVcbiAgICApO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVWYXJpYWJsZUFuY2hvcnMoY29vcmRzLCBwYWludGVyLCBsYXllciwgc291cmNlQ2FjaGUsIHJvdGF0aW9uQWxpZ25tZW50LCBwaXRjaEFsaWdubWVudCwgdmFyaWFibGVPZmZzZXRzKSB7XG4gICAgY29uc3QgdHIgPSBwYWludGVyLnRyYW5zZm9ybTtcbiAgICBjb25zdCByb3RhdGVXaXRoTWFwID0gcm90YXRpb25BbGlnbm1lbnQgPT09ICdtYXAnO1xuICAgIGNvbnN0IHBpdGNoV2l0aE1hcCA9IHBpdGNoQWxpZ25tZW50ID09PSAnbWFwJztcblxuICAgIGZvciAoY29uc3QgY29vcmQgb2YgY29vcmRzKSB7XG4gICAgICAgIGNvbnN0IHRpbGUgPSBzb3VyY2VDYWNoZS5nZXRUaWxlKGNvb3JkKTtcbiAgICAgICAgY29uc3QgYnVja2V0OiBTeW1ib2xCdWNrZXQgPSAodGlsZS5nZXRCdWNrZXQobGF5ZXIpOiBhbnkpO1xuICAgICAgICBpZiAoIWJ1Y2tldCB8fCAhYnVja2V0LnRleHQgfHwgIWJ1Y2tldC50ZXh0LnNlZ21lbnRzLmdldCgpLmxlbmd0aCkgY29udGludWU7XG5cbiAgICAgICAgY29uc3Qgc2l6ZURhdGEgPSBidWNrZXQudGV4dFNpemVEYXRhO1xuICAgICAgICBjb25zdCBzaXplID0gc3ltYm9sU2l6ZS5ldmFsdWF0ZVNpemVGb3Jab29tKHNpemVEYXRhLCB0ci56b29tKTtcblxuICAgICAgICBjb25zdCBwaXhlbFRvVGlsZVNjYWxlID0gcGl4ZWxzVG9UaWxlVW5pdHModGlsZSwgMSwgcGFpbnRlci50cmFuc2Zvcm0uem9vbSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUGxhbmVNYXRyaXggPSBzeW1ib2xQcm9qZWN0aW9uLmdldExhYmVsUGxhbmVNYXRyaXgoY29vcmQucG9zTWF0cml4LCBwaXRjaFdpdGhNYXAsIHJvdGF0ZVdpdGhNYXAsIHBhaW50ZXIudHJhbnNmb3JtLCBwaXhlbFRvVGlsZVNjYWxlKTtcbiAgICAgICAgY29uc3QgdXBkYXRlVGV4dEZpdEljb24gPSBsYXllci5sYXlvdXQuZ2V0KCdpY29uLXRleHQtZml0JykgIT09ICdub25lJyAmJiAgYnVja2V0Lmhhc0ljb25EYXRhKCk7XG5cbiAgICAgICAgaWYgKHNpemUpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbGVTY2FsZSA9IE1hdGgucG93KDIsIHRyLnpvb20gLSB0aWxlLnRpbGVJRC5vdmVyc2NhbGVkWik7XG4gICAgICAgICAgICB1cGRhdGVWYXJpYWJsZUFuY2hvcnNGb3JCdWNrZXQoYnVja2V0LCByb3RhdGVXaXRoTWFwLCBwaXRjaFdpdGhNYXAsIHZhcmlhYmxlT2Zmc2V0cywgc3ltYm9sU2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ciwgbGFiZWxQbGFuZU1hdHJpeCwgY29vcmQucG9zTWF0cml4LCB0aWxlU2NhbGUsIHNpemUsIHVwZGF0ZVRleHRGaXRJY29uKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlVmFyaWFibGVBbmNob3JzRm9yQnVja2V0KGJ1Y2tldCwgcm90YXRlV2l0aE1hcCwgcGl0Y2hXaXRoTWFwLCB2YXJpYWJsZU9mZnNldHMsIHN5bWJvbFNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLCBsYWJlbFBsYW5lTWF0cml4LCBwb3NNYXRyaXgsIHRpbGVTY2FsZSwgc2l6ZSwgdXBkYXRlVGV4dEZpdEljb24pIHtcbiAgICBjb25zdCBwbGFjZWRTeW1ib2xzID0gYnVja2V0LnRleHQucGxhY2VkU3ltYm9sQXJyYXk7XG4gICAgY29uc3QgZHluYW1pY1RleHRMYXlvdXRWZXJ0ZXhBcnJheSA9IGJ1Y2tldC50ZXh0LmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheTtcbiAgICBjb25zdCBkeW5hbWljSWNvbkxheW91dFZlcnRleEFycmF5ID0gYnVja2V0Lmljb24uZHluYW1pY0xheW91dFZlcnRleEFycmF5O1xuICAgIGNvbnN0IHBsYWNlZFRleHRTaGlmdHMgPSB7fTtcblxuICAgIGR5bmFtaWNUZXh0TGF5b3V0VmVydGV4QXJyYXkuY2xlYXIoKTtcbiAgICBmb3IgKGxldCBzID0gMDsgcyA8IHBsYWNlZFN5bWJvbHMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgY29uc3Qgc3ltYm9sOiBhbnkgPSBwbGFjZWRTeW1ib2xzLmdldChzKTtcbiAgICAgICAgY29uc3Qgc2tpcE9yaWVudGF0aW9uID0gYnVja2V0LmFsbG93VmVydGljYWxQbGFjZW1lbnQgJiYgIXN5bWJvbC5wbGFjZWRPcmllbnRhdGlvbjtcbiAgICAgICAgY29uc3QgdmFyaWFibGVPZmZzZXQgPSAoIXN5bWJvbC5oaWRkZW4gJiYgc3ltYm9sLmNyb3NzVGlsZUlEICYmICFza2lwT3JpZW50YXRpb24pID8gdmFyaWFibGVPZmZzZXRzW3N5bWJvbC5jcm9zc1RpbGVJRF0gOiBudWxsO1xuXG4gICAgICAgIGlmICghdmFyaWFibGVPZmZzZXQpIHtcbiAgICAgICAgICAgIC8vIFRoZXNlIHN5bWJvbHMgYXJlIGZyb20gYSBqdXN0aWZpY2F0aW9uIHRoYXQgaXMgbm90IGJlaW5nIHVzZWQsIG9yIGEgbGFiZWwgdGhhdCB3YXNuJ3QgcGxhY2VkXG4gICAgICAgICAgICAvLyBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIHRoZSBleHRyYSBtYXRoIHRvIGZpZ3VyZSBvdXQgd2hhdCBpbmNyZW1lbnRhbCBzaGlmdCB0byBhcHBseS5cbiAgICAgICAgICAgIHN5bWJvbFByb2plY3Rpb24uaGlkZUdseXBocyhzeW1ib2wubnVtR2x5cGhzLCBkeW5hbWljVGV4dExheW91dFZlcnRleEFycmF5KTtcbiAgICAgICAgfSBlbHNlICB7XG4gICAgICAgICAgICBjb25zdCB0aWxlQW5jaG9yID0gbmV3IFBvaW50KHN5bWJvbC5hbmNob3JYLCBzeW1ib2wuYW5jaG9yWSk7XG4gICAgICAgICAgICBjb25zdCBwcm9qZWN0ZWRBbmNob3IgPSBzeW1ib2xQcm9qZWN0aW9uLnByb2plY3QodGlsZUFuY2hvciwgcGl0Y2hXaXRoTWFwID8gcG9zTWF0cml4IDogbGFiZWxQbGFuZU1hdHJpeCk7XG4gICAgICAgICAgICBjb25zdCBwZXJzcGVjdGl2ZVJhdGlvID0gc3ltYm9sUHJvamVjdGlvbi5nZXRQZXJzcGVjdGl2ZVJhdGlvKHRyYW5zZm9ybS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlLCBwcm9qZWN0ZWRBbmNob3Iuc2lnbmVkRGlzdGFuY2VGcm9tQ2FtZXJhKTtcbiAgICAgICAgICAgIGxldCByZW5kZXJUZXh0U2l6ZSA9IHN5bWJvbFNpemUuZXZhbHVhdGVTaXplRm9yRmVhdHVyZShidWNrZXQudGV4dFNpemVEYXRhLCBzaXplLCBzeW1ib2wpICogcGVyc3BlY3RpdmVSYXRpbyAvIE9ORV9FTTtcbiAgICAgICAgICAgIGlmIChwaXRjaFdpdGhNYXApIHtcbiAgICAgICAgICAgICAgICAvLyBHbyBmcm9tIHNpemUgaW4gcGl4ZWxzIHRvIGVxdWl2YWxlbnQgc2l6ZSBpbiB0aWxlIHVuaXRzXG4gICAgICAgICAgICAgICAgcmVuZGVyVGV4dFNpemUgKj0gYnVja2V0LnRpbGVQaXhlbFJhdGlvIC8gdGlsZVNjYWxlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB7d2lkdGgsIGhlaWdodCwgYW5jaG9yLCB0ZXh0T2Zmc2V0LCB0ZXh0Qm94U2NhbGV9ID0gdmFyaWFibGVPZmZzZXQ7XG5cbiAgICAgICAgICAgIGNvbnN0IHNoaWZ0ID0gY2FsY3VsYXRlVmFyaWFibGVSZW5kZXJTaGlmdChcbiAgICAgICAgICAgICAgICBhbmNob3IsIHdpZHRoLCBoZWlnaHQsIHRleHRPZmZzZXQsIHRleHRCb3hTY2FsZSwgcmVuZGVyVGV4dFNpemUpO1xuXG4gICAgICAgICAgICAvLyBVc3VhbCBjYXNlIGlzIHRoYXQgd2UgdGFrZSB0aGUgcHJvamVjdGVkIGFuY2hvciBhbmQgYWRkIHRoZSBwaXhlbC1iYXNlZCBzaGlmdFxuICAgICAgICAgICAgLy8gY2FsY3VsYXRlZCBhYm92ZS4gSW4gdGhlIChzb21ld2hhdCB3ZWlyZCkgY2FzZSBvZiBwaXRjaC1hbGlnbmVkIHRleHQsIHdlIGFkZCBhbiBlcXVpdmFsZW50XG4gICAgICAgICAgICAvLyB0aWxlLXVuaXQgYmFzZWQgc2hpZnQgdG8gdGhlIGFuY2hvciBiZWZvcmUgcHJvamVjdGluZyB0byB0aGUgbGFiZWwgcGxhbmUuXG4gICAgICAgICAgICBjb25zdCBzaGlmdGVkQW5jaG9yID0gcGl0Y2hXaXRoTWFwID9cbiAgICAgICAgICAgICAgICBzeW1ib2xQcm9qZWN0aW9uLnByb2plY3QodGlsZUFuY2hvci5hZGQoc2hpZnQpLCBsYWJlbFBsYW5lTWF0cml4KS5wb2ludCA6XG4gICAgICAgICAgICAgICAgcHJvamVjdGVkQW5jaG9yLnBvaW50LmFkZChyb3RhdGVXaXRoTWFwID9cbiAgICAgICAgICAgICAgICAgICAgc2hpZnQucm90YXRlKC10cmFuc2Zvcm0uYW5nbGUpIDpcbiAgICAgICAgICAgICAgICAgICAgc2hpZnQpO1xuXG4gICAgICAgICAgICBjb25zdCBhbmdsZSA9IChidWNrZXQuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCAmJiBzeW1ib2wucGxhY2VkT3JpZW50YXRpb24gPT09IFdyaXRpbmdNb2RlLnZlcnRpY2FsKSA/IE1hdGguUEkgLyAyIDogMDtcbiAgICAgICAgICAgIGZvciAobGV0IGcgPSAwOyBnIDwgc3ltYm9sLm51bUdseXBoczsgZysrKSB7XG4gICAgICAgICAgICAgICAgYWRkRHluYW1pY0F0dHJpYnV0ZXMoZHluYW1pY1RleHRMYXlvdXRWZXJ0ZXhBcnJheSwgc2hpZnRlZEFuY2hvciwgYW5nbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9Pbmx5IG9mZnNldCBob3Jpem9udGFsIHRleHQgaWNvbnNcbiAgICAgICAgICAgIGlmICh1cGRhdGVUZXh0Rml0SWNvbiAmJiBzeW1ib2wuYXNzb2NpYXRlZEljb25JbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgcGxhY2VkVGV4dFNoaWZ0c1tzeW1ib2wuYXNzb2NpYXRlZEljb25JbmRleF0gPSB7c2hpZnRlZEFuY2hvciwgYW5nbGV9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHVwZGF0ZVRleHRGaXRJY29uKSB7XG4gICAgICAgIGR5bmFtaWNJY29uTGF5b3V0VmVydGV4QXJyYXkuY2xlYXIoKTtcbiAgICAgICAgY29uc3QgcGxhY2VkSWNvbnMgPSBidWNrZXQuaWNvbi5wbGFjZWRTeW1ib2xBcnJheTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbGFjZWRJY29ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcGxhY2VkSWNvbiA9IHBsYWNlZEljb25zLmdldChpKTtcbiAgICAgICAgICAgIGlmIChwbGFjZWRJY29uLmhpZGRlbikge1xuICAgICAgICAgICAgICAgIHN5bWJvbFByb2plY3Rpb24uaGlkZUdseXBocyhwbGFjZWRJY29uLm51bUdseXBocywgZHluYW1pY0ljb25MYXlvdXRWZXJ0ZXhBcnJheSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNoaWZ0ID0gcGxhY2VkVGV4dFNoaWZ0c1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoIXNoaWZ0KSB7XG4gICAgICAgICAgICAgICAgICAgIHN5bWJvbFByb2plY3Rpb24uaGlkZUdseXBocyhwbGFjZWRJY29uLm51bUdseXBocywgZHluYW1pY0ljb25MYXlvdXRWZXJ0ZXhBcnJheSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgZyA9IDA7IGcgPCBwbGFjZWRJY29uLm51bUdseXBoczsgZysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGREeW5hbWljQXR0cmlidXRlcyhkeW5hbWljSWNvbkxheW91dFZlcnRleEFycmF5LCBzaGlmdC5zaGlmdGVkQW5jaG9yLCBzaGlmdC5hbmdsZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnVja2V0Lmljb24uZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKGR5bmFtaWNJY29uTGF5b3V0VmVydGV4QXJyYXkpO1xuICAgIH1cbiAgICBidWNrZXQudGV4dC5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoZHluYW1pY1RleHRMYXlvdXRWZXJ0ZXhBcnJheSk7XG59XG5cbmZ1bmN0aW9uIGdldFN5bWJvbFByb2dyYW1OYW1lKGlzU0RGOiBib29sZWFuLCBpc1RleHQ6IGJvb2xlYW4sIGJ1Y2tldDogU3ltYm9sQnVja2V0KSB7XG4gICAgaWYgKGJ1Y2tldC5pY29uc0luVGV4dCAmJiBpc1RleHQpIHtcbiAgICAgICAgcmV0dXJuICdzeW1ib2xUZXh0QW5kSWNvbic7XG4gICAgfSBlbHNlIGlmIChpc1NERikge1xuICAgICAgICByZXR1cm4gJ3N5bWJvbFNERic7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICdzeW1ib2xJY29uJztcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYXdMYXllclN5bWJvbHMocGFpbnRlciwgc291cmNlQ2FjaGUsIGxheWVyLCBjb29yZHMsIGlzVGV4dCwgdHJhbnNsYXRlLCB0cmFuc2xhdGVBbmNob3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uQWxpZ25tZW50LCBwaXRjaEFsaWdubWVudCwga2VlcFVwcmlnaHQsIHN0ZW5jaWxNb2RlLCBjb2xvck1vZGUpIHtcblxuICAgIGNvbnN0IGNvbnRleHQgPSBwYWludGVyLmNvbnRleHQ7XG4gICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuICAgIGNvbnN0IHRyID0gcGFpbnRlci50cmFuc2Zvcm07XG5cbiAgICBjb25zdCByb3RhdGVXaXRoTWFwID0gcm90YXRpb25BbGlnbm1lbnQgPT09ICdtYXAnO1xuICAgIGNvbnN0IHBpdGNoV2l0aE1hcCA9IHBpdGNoQWxpZ25tZW50ID09PSAnbWFwJztcbiAgICBjb25zdCBhbG9uZ0xpbmUgPSByb3RhdGVXaXRoTWFwICYmIGxheWVyLmxheW91dC5nZXQoJ3N5bWJvbC1wbGFjZW1lbnQnKSAhPT0gJ3BvaW50JztcbiAgICAvLyBMaW5lIGxhYmVsIHJvdGF0aW9uIGhhcHBlbnMgaW4gYHVwZGF0ZUxpbmVMYWJlbHNgXG4gICAgLy8gUGl0Y2hlZCBwb2ludCBsYWJlbHMgYXJlIGF1dG9tYXRpY2FsbHkgcm90YXRlZCBieSB0aGUgbGFiZWxQbGFuZU1hdHJpeCBwcm9qZWN0aW9uXG4gICAgLy8gVW5waXRjaGVkIHBvaW50IGxhYmVscyBuZWVkIHRvIGhhdmUgdGhlaXIgcm90YXRpb24gYXBwbGllZCBhZnRlciBwcm9qZWN0aW9uXG4gICAgY29uc3Qgcm90YXRlSW5TaGFkZXIgPSByb3RhdGVXaXRoTWFwICYmICFwaXRjaFdpdGhNYXAgJiYgIWFsb25nTGluZTtcblxuICAgIGNvbnN0IHNvcnRGZWF0dXJlc0J5S2V5ID0gbGF5ZXIubGF5b3V0LmdldCgnc3ltYm9sLXNvcnQta2V5JykuY29uc3RhbnRPcigxKSAhPT0gdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgZGVwdGhNb2RlID0gcGFpbnRlci5kZXB0aE1vZGVGb3JTdWJsYXllcigwLCBEZXB0aE1vZGUuUmVhZE9ubHkpO1xuXG4gICAgY29uc3QgdmFyaWFibGVQbGFjZW1lbnQgPSBsYXllci5sYXlvdXQuZ2V0KCd0ZXh0LXZhcmlhYmxlLWFuY2hvcicpO1xuXG4gICAgY29uc3QgdGlsZVJlbmRlclN0YXRlOiBBcnJheTxTeW1ib2xUaWxlUmVuZGVyU3RhdGU+ID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGNvb3JkIG9mIGNvb3Jkcykge1xuICAgICAgICBjb25zdCB0aWxlID0gc291cmNlQ2FjaGUuZ2V0VGlsZShjb29yZCk7XG4gICAgICAgIGNvbnN0IGJ1Y2tldDogU3ltYm9sQnVja2V0ID0gKHRpbGUuZ2V0QnVja2V0KGxheWVyKTogYW55KTtcbiAgICAgICAgaWYgKCFidWNrZXQpIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBidWZmZXJzID0gaXNUZXh0ID8gYnVja2V0LnRleHQgOiBidWNrZXQuaWNvbjtcbiAgICAgICAgaWYgKCFidWZmZXJzIHx8ICFidWZmZXJzLnNlZ21lbnRzLmdldCgpLmxlbmd0aCkgY29udGludWU7XG4gICAgICAgIGNvbnN0IHByb2dyYW1Db25maWd1cmF0aW9uID0gYnVmZmVycy5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KGxheWVyLmlkKTtcblxuICAgICAgICBjb25zdCBpc1NERiA9IGlzVGV4dCB8fCBidWNrZXQuc2RmSWNvbnM7XG5cbiAgICAgICAgY29uc3Qgc2l6ZURhdGEgPSBpc1RleHQgPyBidWNrZXQudGV4dFNpemVEYXRhIDogYnVja2V0Lmljb25TaXplRGF0YTtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWQgPSBwaXRjaFdpdGhNYXAgfHwgdHIucGl0Y2ggIT09IDA7XG5cbiAgICAgICAgY29uc3QgcHJvZ3JhbSA9IHBhaW50ZXIudXNlUHJvZ3JhbShnZXRTeW1ib2xQcm9ncmFtTmFtZShpc1NERiwgaXNUZXh0LCBidWNrZXQpLCBwcm9ncmFtQ29uZmlndXJhdGlvbik7XG4gICAgICAgIGNvbnN0IHNpemUgPSBzeW1ib2xTaXplLmV2YWx1YXRlU2l6ZUZvclpvb20oc2l6ZURhdGEsIHRyLnpvb20pO1xuXG4gICAgICAgIGxldCB0ZXhTaXplOiBbbnVtYmVyLCBudW1iZXJdO1xuICAgICAgICBsZXQgdGV4U2l6ZUljb246IFtudW1iZXIsIG51bWJlcl0gPSBbMCwgMF07XG4gICAgICAgIGxldCBhdGxhc1RleHR1cmU7XG4gICAgICAgIGxldCBhdGxhc0ludGVycG9sYXRpb247XG4gICAgICAgIGxldCBhdGxhc1RleHR1cmVJY29uID0gbnVsbDtcbiAgICAgICAgbGV0IGF0bGFzSW50ZXJwb2xhdGlvbkljb247XG4gICAgICAgIGlmIChpc1RleHQpIHtcbiAgICAgICAgICAgIGF0bGFzVGV4dHVyZSA9IHRpbGUuZ2x5cGhBdGxhc1RleHR1cmU7XG4gICAgICAgICAgICBhdGxhc0ludGVycG9sYXRpb24gPSBnbC5MSU5FQVI7XG4gICAgICAgICAgICB0ZXhTaXplID0gdGlsZS5nbHlwaEF0bGFzVGV4dHVyZS5zaXplO1xuICAgICAgICAgICAgaWYgKGJ1Y2tldC5pY29uc0luVGV4dCkge1xuICAgICAgICAgICAgICAgIHRleFNpemVJY29uID0gdGlsZS5pbWFnZUF0bGFzVGV4dHVyZS5zaXplO1xuICAgICAgICAgICAgICAgIGF0bGFzVGV4dHVyZUljb24gPSB0aWxlLmltYWdlQXRsYXNUZXh0dXJlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHpvb21EZXBlbmRlbnRTaXplID0gc2l6ZURhdGEua2luZCA9PT0gJ2NvbXBvc2l0ZScgfHwgc2l6ZURhdGEua2luZCA9PT0gJ2NhbWVyYSc7XG4gICAgICAgICAgICAgICAgYXRsYXNJbnRlcnBvbGF0aW9uSWNvbiA9IHRyYW5zZm9ybWVkIHx8IHBhaW50ZXIub3B0aW9ucy5yb3RhdGluZyB8fCBwYWludGVyLm9wdGlvbnMuem9vbWluZyB8fCB6b29tRGVwZW5kZW50U2l6ZSA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1Q7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpY29uU2NhbGVkID0gbGF5ZXIubGF5b3V0LmdldCgnaWNvbi1zaXplJykuY29uc3RhbnRPcigwKSAhPT0gMSB8fCBidWNrZXQuaWNvbnNOZWVkTGluZWFyO1xuICAgICAgICAgICAgYXRsYXNUZXh0dXJlID0gdGlsZS5pbWFnZUF0bGFzVGV4dHVyZTtcbiAgICAgICAgICAgIGF0bGFzSW50ZXJwb2xhdGlvbiA9IGlzU0RGIHx8IHBhaW50ZXIub3B0aW9ucy5yb3RhdGluZyB8fCBwYWludGVyLm9wdGlvbnMuem9vbWluZyB8fCBpY29uU2NhbGVkIHx8IHRyYW5zZm9ybWVkID9cbiAgICAgICAgICAgICAgICBnbC5MSU5FQVIgOlxuICAgICAgICAgICAgICAgIGdsLk5FQVJFU1Q7XG4gICAgICAgICAgICB0ZXhTaXplID0gdGlsZS5pbWFnZUF0bGFzVGV4dHVyZS5zaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcyA9IHBpeGVsc1RvVGlsZVVuaXRzKHRpbGUsIDEsIHBhaW50ZXIudHJhbnNmb3JtLnpvb20pO1xuICAgICAgICBjb25zdCBsYWJlbFBsYW5lTWF0cml4ID0gc3ltYm9sUHJvamVjdGlvbi5nZXRMYWJlbFBsYW5lTWF0cml4KGNvb3JkLnBvc01hdHJpeCwgcGl0Y2hXaXRoTWFwLCByb3RhdGVXaXRoTWFwLCBwYWludGVyLnRyYW5zZm9ybSwgcyk7XG4gICAgICAgIGNvbnN0IGdsQ29vcmRNYXRyaXggPSBzeW1ib2xQcm9qZWN0aW9uLmdldEdsQ29vcmRNYXRyaXgoY29vcmQucG9zTWF0cml4LCBwaXRjaFdpdGhNYXAsIHJvdGF0ZVdpdGhNYXAsIHBhaW50ZXIudHJhbnNmb3JtLCBzKTtcblxuICAgICAgICBjb25zdCBoYXNWYXJpYWJsZUFuY2hvcnMgPSB2YXJpYWJsZVBsYWNlbWVudCAmJiBidWNrZXQuaGFzVGV4dERhdGEoKTtcbiAgICAgICAgY29uc3QgdXBkYXRlVGV4dEZpdEljb24gPSBsYXllci5sYXlvdXQuZ2V0KCdpY29uLXRleHQtZml0JykgIT09ICdub25lJyAmJlxuICAgICAgICAgICAgaGFzVmFyaWFibGVBbmNob3JzICYmXG4gICAgICAgICAgICBidWNrZXQuaGFzSWNvbkRhdGEoKTtcblxuICAgICAgICBpZiAoYWxvbmdMaW5lKSB7XG4gICAgICAgICAgICBzeW1ib2xQcm9qZWN0aW9uLnVwZGF0ZUxpbmVMYWJlbHMoYnVja2V0LCBjb29yZC5wb3NNYXRyaXgsIHBhaW50ZXIsIGlzVGV4dCwgbGFiZWxQbGFuZU1hdHJpeCwgZ2xDb29yZE1hdHJpeCwgcGl0Y2hXaXRoTWFwLCBrZWVwVXByaWdodCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtYXRyaXggPSBwYWludGVyLnRyYW5zbGF0ZVBvc01hdHJpeChjb29yZC5wb3NNYXRyaXgsIHRpbGUsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlQW5jaG9yKSxcbiAgICAgICAgICAgIHVMYWJlbFBsYW5lTWF0cml4ID0gKGFsb25nTGluZSB8fCAoaXNUZXh0ICYmIHZhcmlhYmxlUGxhY2VtZW50KSB8fCB1cGRhdGVUZXh0Rml0SWNvbikgPyBpZGVudGl0eU1hdDQgOiBsYWJlbFBsYW5lTWF0cml4LFxuICAgICAgICAgICAgdWdsQ29vcmRNYXRyaXggPSBwYWludGVyLnRyYW5zbGF0ZVBvc01hdHJpeChnbENvb3JkTWF0cml4LCB0aWxlLCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUFuY2hvciwgdHJ1ZSk7XG5cbiAgICAgICAgY29uc3QgaGFzSGFsbyA9IGlzU0RGICYmIGxheWVyLnBhaW50LmdldChpc1RleHQgPyAndGV4dC1oYWxvLXdpZHRoJyA6ICdpY29uLWhhbG8td2lkdGgnKS5jb25zdGFudE9yKDEpICE9PSAwO1xuXG4gICAgICAgIGxldCB1bmlmb3JtVmFsdWVzO1xuICAgICAgICBpZiAoaXNTREYpIHtcbiAgICAgICAgICAgIGlmICghYnVja2V0Lmljb25zSW5UZXh0KSB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybVZhbHVlcyA9IHN5bWJvbFNERlVuaWZvcm1WYWx1ZXMoc2l6ZURhdGEua2luZCxcbiAgICAgICAgICAgICAgICBzaXplLCByb3RhdGVJblNoYWRlciwgcGl0Y2hXaXRoTWFwLCBwYWludGVyLCBtYXRyaXgsXG4gICAgICAgICAgICAgICAgdUxhYmVsUGxhbmVNYXRyaXgsIHVnbENvb3JkTWF0cml4LCBpc1RleHQsIHRleFNpemUsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtVmFsdWVzID0gc3ltYm9sVGV4dEFuZEljb25Vbmlmb3JtVmFsdWVzKHNpemVEYXRhLmtpbmQsXG4gICAgICAgICAgICAgICAgc2l6ZSwgcm90YXRlSW5TaGFkZXIsIHBpdGNoV2l0aE1hcCwgcGFpbnRlciwgbWF0cml4LFxuICAgICAgICAgICAgICAgIHVMYWJlbFBsYW5lTWF0cml4LCB1Z2xDb29yZE1hdHJpeCwgdGV4U2l6ZSwgdGV4U2l6ZUljb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdW5pZm9ybVZhbHVlcyA9IHN5bWJvbEljb25Vbmlmb3JtVmFsdWVzKHNpemVEYXRhLmtpbmQsXG4gICAgICAgICAgICAgICAgc2l6ZSwgcm90YXRlSW5TaGFkZXIsIHBpdGNoV2l0aE1hcCwgcGFpbnRlciwgbWF0cml4LFxuICAgICAgICAgICAgICAgIHVMYWJlbFBsYW5lTWF0cml4LCB1Z2xDb29yZE1hdHJpeCwgaXNUZXh0LCB0ZXhTaXplKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0YXRlID0ge1xuICAgICAgICAgICAgcHJvZ3JhbSxcbiAgICAgICAgICAgIGJ1ZmZlcnMsXG4gICAgICAgICAgICB1bmlmb3JtVmFsdWVzLFxuICAgICAgICAgICAgYXRsYXNUZXh0dXJlLFxuICAgICAgICAgICAgYXRsYXNUZXh0dXJlSWNvbixcbiAgICAgICAgICAgIGF0bGFzSW50ZXJwb2xhdGlvbixcbiAgICAgICAgICAgIGF0bGFzSW50ZXJwb2xhdGlvbkljb24sXG4gICAgICAgICAgICBpc1NERixcbiAgICAgICAgICAgIGhhc0hhbG9cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoc29ydEZlYXR1cmVzQnlLZXkpIHtcbiAgICAgICAgICAgIGNvbnN0IG9sZFNlZ21lbnRzID0gYnVmZmVycy5zZWdtZW50cy5nZXQoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBvbGRTZWdtZW50cykge1xuICAgICAgICAgICAgICAgIHRpbGVSZW5kZXJTdGF0ZS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgc2VnbWVudHM6IG5ldyBTZWdtZW50VmVjdG9yKFtzZWdtZW50XSksXG4gICAgICAgICAgICAgICAgICAgIHNvcnRLZXk6ICgoc2VnbWVudC5zb3J0S2V5OiBhbnkpOiBudW1iZXIpLFxuICAgICAgICAgICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGlsZVJlbmRlclN0YXRlLnB1c2goe1xuICAgICAgICAgICAgICAgIHNlZ21lbnRzOiBidWZmZXJzLnNlZ21lbnRzLFxuICAgICAgICAgICAgICAgIHNvcnRLZXk6IDAsXG4gICAgICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNvcnRGZWF0dXJlc0J5S2V5KSB7XG4gICAgICAgIHRpbGVSZW5kZXJTdGF0ZS5zb3J0KChhLCBiKSA9PiBhLnNvcnRLZXkgLSBiLnNvcnRLZXkpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc2VnbWVudFN0YXRlIG9mIHRpbGVSZW5kZXJTdGF0ZSkge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHNlZ21lbnRTdGF0ZS5zdGF0ZTtcblxuICAgICAgICBjb250ZXh0LmFjdGl2ZVRleHR1cmUuc2V0KGdsLlRFWFRVUkUwKTtcbiAgICAgICAgc3RhdGUuYXRsYXNUZXh0dXJlLmJpbmQoc3RhdGUuYXRsYXNJbnRlcnBvbGF0aW9uLCBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgaWYgKHN0YXRlLmF0bGFzVGV4dHVyZUljb24pIHtcbiAgICAgICAgICAgIGNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQoZ2wuVEVYVFVSRTEpO1xuICAgICAgICAgICAgaWYgKHN0YXRlLmF0bGFzVGV4dHVyZUljb24pIHtcbiAgICAgICAgICAgICAgICBzdGF0ZS5hdGxhc1RleHR1cmVJY29uLmJpbmQoc3RhdGUuYXRsYXNJbnRlcnBvbGF0aW9uSWNvbiwgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGUuaXNTREYpIHtcbiAgICAgICAgICAgIGNvbnN0IHVuaWZvcm1WYWx1ZXMgPSAoKHN0YXRlLnVuaWZvcm1WYWx1ZXM6IGFueSk6IFVuaWZvcm1WYWx1ZXM8U3ltYm9sU0RGVW5pZm9ybXNUeXBlPik7XG4gICAgICAgICAgICBpZiAoc3RhdGUuaGFzSGFsbykge1xuICAgICAgICAgICAgICAgIHVuaWZvcm1WYWx1ZXNbJ3VfaXNfaGFsbyddID0gMTtcbiAgICAgICAgICAgICAgICBkcmF3U3ltYm9sRWxlbWVudHMoc3RhdGUuYnVmZmVycywgc2VnbWVudFN0YXRlLnNlZ21lbnRzLCBsYXllciwgcGFpbnRlciwgc3RhdGUucHJvZ3JhbSwgZGVwdGhNb2RlLCBzdGVuY2lsTW9kZSwgY29sb3JNb2RlLCB1bmlmb3JtVmFsdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVuaWZvcm1WYWx1ZXNbJ3VfaXNfaGFsbyddID0gMDtcbiAgICAgICAgfVxuICAgICAgICBkcmF3U3ltYm9sRWxlbWVudHMoc3RhdGUuYnVmZmVycywgc2VnbWVudFN0YXRlLnNlZ21lbnRzLCBsYXllciwgcGFpbnRlciwgc3RhdGUucHJvZ3JhbSwgZGVwdGhNb2RlLCBzdGVuY2lsTW9kZSwgY29sb3JNb2RlLCBzdGF0ZS51bmlmb3JtVmFsdWVzKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYXdTeW1ib2xFbGVtZW50cyhidWZmZXJzLCBzZWdtZW50cywgbGF5ZXIsIHBhaW50ZXIsIHByb2dyYW0sIGRlcHRoTW9kZSwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSwgdW5pZm9ybVZhbHVlcykge1xuICAgIGNvbnN0IGNvbnRleHQgPSBwYWludGVyLmNvbnRleHQ7XG4gICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuICAgIHByb2dyYW0uZHJhdyhjb250ZXh0LCBnbC5UUklBTkdMRVMsIGRlcHRoTW9kZSwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLFxuICAgICAgICB1bmlmb3JtVmFsdWVzLCBsYXllci5pZCwgYnVmZmVycy5sYXlvdXRWZXJ0ZXhCdWZmZXIsXG4gICAgICAgIGJ1ZmZlcnMuaW5kZXhCdWZmZXIsIHNlZ21lbnRzLCBsYXllci5wYWludCxcbiAgICAgICAgcGFpbnRlci50cmFuc2Zvcm0uem9vbSwgYnVmZmVycy5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KGxheWVyLmlkKSxcbiAgICAgICAgYnVmZmVycy5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyLCBidWZmZXJzLm9wYWNpdHlWZXJ0ZXhCdWZmZXIpO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFN0ZW5jaWxNb2RlIGZyb20gJy4uL2dsL3N0ZW5jaWxfbW9kZSc7XG5pbXBvcnQgRGVwdGhNb2RlIGZyb20gJy4uL2dsL2RlcHRoX21vZGUnO1xuaW1wb3J0IEN1bGxGYWNlTW9kZSBmcm9tICcuLi9nbC9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQgUHJvZ3JhbSBmcm9tICcuL3Byb2dyYW0nO1xuaW1wb3J0IHtjaXJjbGVVbmlmb3JtVmFsdWVzfSBmcm9tICcuL3Byb2dyYW0vY2lyY2xlX3Byb2dyYW0nO1xuaW1wb3J0IFNlZ21lbnRWZWN0b3IgZnJvbSAnLi4vZGF0YS9zZWdtZW50JztcbmltcG9ydCB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi4vc291cmNlL3RpbGVfaWQnO1xuXG5pbXBvcnQgdHlwZSBQYWludGVyIGZyb20gJy4vcGFpbnRlcic7XG5pbXBvcnQgdHlwZSBTb3VyY2VDYWNoZSBmcm9tICcuLi9zb3VyY2Uvc291cmNlX2NhY2hlJztcbmltcG9ydCB0eXBlIENpcmNsZVN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXIvY2lyY2xlX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIENpcmNsZUJ1Y2tldCBmcm9tICcuLi9kYXRhL2J1Y2tldC9jaXJjbGVfYnVja2V0JztcbmltcG9ydCB0eXBlIFByb2dyYW1Db25maWd1cmF0aW9uIGZyb20gJy4uL2RhdGEvcHJvZ3JhbV9jb25maWd1cmF0aW9uJztcbmltcG9ydCB0eXBlIFZlcnRleEJ1ZmZlciBmcm9tICcuLi9nbC92ZXJ0ZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIEluZGV4QnVmZmVyIGZyb20gJy4uL2dsL2luZGV4X2J1ZmZlcic7XG5pbXBvcnQgdHlwZSB7VW5pZm9ybVZhbHVlc30gZnJvbSAnLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHR5cGUge0NpcmNsZVVuaWZvcm1zVHlwZX0gZnJvbSAnLi9wcm9ncmFtL2NpcmNsZV9wcm9ncmFtJztcblxuZXhwb3J0IGRlZmF1bHQgZHJhd0NpcmNsZXM7XG5cbnR5cGUgVGlsZVJlbmRlclN0YXRlID0ge1xuICAgIHByb2dyYW1Db25maWd1cmF0aW9uOiBQcm9ncmFtQ29uZmlndXJhdGlvbixcbiAgICBwcm9ncmFtOiBQcm9ncmFtPCo+LFxuICAgIGxheW91dFZlcnRleEJ1ZmZlcjogVmVydGV4QnVmZmVyLFxuICAgIGluZGV4QnVmZmVyOiBJbmRleEJ1ZmZlcixcbiAgICB1bmlmb3JtVmFsdWVzOiBVbmlmb3JtVmFsdWVzPENpcmNsZVVuaWZvcm1zVHlwZT5cbn07XG5cbnR5cGUgU2VnbWVudHNUaWxlUmVuZGVyU3RhdGUgPSB7XG4gICAgc2VnbWVudHM6IFNlZ21lbnRWZWN0b3IsXG4gICAgc29ydEtleTogbnVtYmVyLFxuICAgIHN0YXRlOiBUaWxlUmVuZGVyU3RhdGVcbn07XG5cbmZ1bmN0aW9uIGRyYXdDaXJjbGVzKHBhaW50ZXI6IFBhaW50ZXIsIHNvdXJjZUNhY2hlOiBTb3VyY2VDYWNoZSwgbGF5ZXI6IENpcmNsZVN0eWxlTGF5ZXIsIGNvb3JkczogQXJyYXk8T3ZlcnNjYWxlZFRpbGVJRD4pIHtcbiAgICBpZiAocGFpbnRlci5yZW5kZXJQYXNzICE9PSAndHJhbnNsdWNlbnQnKSByZXR1cm47XG5cbiAgICBjb25zdCBvcGFjaXR5ID0gbGF5ZXIucGFpbnQuZ2V0KCdjaXJjbGUtb3BhY2l0eScpO1xuICAgIGNvbnN0IHN0cm9rZVdpZHRoID0gbGF5ZXIucGFpbnQuZ2V0KCdjaXJjbGUtc3Ryb2tlLXdpZHRoJyk7XG4gICAgY29uc3Qgc3Ryb2tlT3BhY2l0eSA9IGxheWVyLnBhaW50LmdldCgnY2lyY2xlLXN0cm9rZS1vcGFjaXR5Jyk7XG4gICAgY29uc3Qgc29ydEZlYXR1cmVzQnlLZXkgPSBsYXllci5sYXlvdXQuZ2V0KCdjaXJjbGUtc29ydC1rZXknKS5jb25zdGFudE9yKDEpICE9PSB1bmRlZmluZWQ7XG5cbiAgICBpZiAob3BhY2l0eS5jb25zdGFudE9yKDEpID09PSAwICYmIChzdHJva2VXaWR0aC5jb25zdGFudE9yKDEpID09PSAwIHx8IHN0cm9rZU9wYWNpdHkuY29uc3RhbnRPcigxKSA9PT0gMCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRleHQgPSBwYWludGVyLmNvbnRleHQ7XG4gICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuXG4gICAgY29uc3QgZGVwdGhNb2RlID0gcGFpbnRlci5kZXB0aE1vZGVGb3JTdWJsYXllcigwLCBEZXB0aE1vZGUuUmVhZE9ubHkpO1xuICAgIC8vIFR1cm4gb2ZmIHN0ZW5jaWwgdGVzdGluZyB0byBhbGxvdyBjaXJjbGVzIHRvIGJlIGRyYXduIGFjcm9zcyBib3VuZGFyaWVzLFxuICAgIC8vIHNvIHRoYXQgbGFyZ2UgY2lyY2xlcyBhcmUgbm90IGNsaXBwZWQgdG8gdGlsZXNcbiAgICBjb25zdCBzdGVuY2lsTW9kZSA9IFN0ZW5jaWxNb2RlLmRpc2FibGVkO1xuICAgIGNvbnN0IGNvbG9yTW9kZSA9IHBhaW50ZXIuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpO1xuXG4gICAgY29uc3Qgc2VnbWVudHNSZW5kZXJTdGF0ZXM6IEFycmF5PFNlZ21lbnRzVGlsZVJlbmRlclN0YXRlPiA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29yZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY29vcmQgPSBjb29yZHNbaV07XG5cbiAgICAgICAgY29uc3QgdGlsZSA9IHNvdXJjZUNhY2hlLmdldFRpbGUoY29vcmQpO1xuICAgICAgICBjb25zdCBidWNrZXQ6ID9DaXJjbGVCdWNrZXQ8Kj4gPSAodGlsZS5nZXRCdWNrZXQobGF5ZXIpOiBhbnkpO1xuICAgICAgICBpZiAoIWJ1Y2tldCkgY29udGludWU7XG5cbiAgICAgICAgY29uc3QgcHJvZ3JhbUNvbmZpZ3VyYXRpb24gPSBidWNrZXQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChsYXllci5pZCk7XG4gICAgICAgIGNvbnN0IHByb2dyYW0gPSBwYWludGVyLnVzZVByb2dyYW0oJ2NpcmNsZScsIHByb2dyYW1Db25maWd1cmF0aW9uKTtcbiAgICAgICAgY29uc3QgbGF5b3V0VmVydGV4QnVmZmVyID0gYnVja2V0LmxheW91dFZlcnRleEJ1ZmZlcjtcbiAgICAgICAgY29uc3QgaW5kZXhCdWZmZXIgPSBidWNrZXQuaW5kZXhCdWZmZXI7XG4gICAgICAgIGNvbnN0IHVuaWZvcm1WYWx1ZXMgPSBjaXJjbGVVbmlmb3JtVmFsdWVzKHBhaW50ZXIsIGNvb3JkLCB0aWxlLCBsYXllcik7XG5cbiAgICAgICAgY29uc3Qgc3RhdGU6IFRpbGVSZW5kZXJTdGF0ZSA9IHtcbiAgICAgICAgICAgIHByb2dyYW1Db25maWd1cmF0aW9uLFxuICAgICAgICAgICAgcHJvZ3JhbSxcbiAgICAgICAgICAgIGxheW91dFZlcnRleEJ1ZmZlcixcbiAgICAgICAgICAgIGluZGV4QnVmZmVyLFxuICAgICAgICAgICAgdW5pZm9ybVZhbHVlcyxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoc29ydEZlYXR1cmVzQnlLZXkpIHtcbiAgICAgICAgICAgIGNvbnN0IG9sZFNlZ21lbnRzID0gYnVja2V0LnNlZ21lbnRzLmdldCgpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBzZWdtZW50IG9mIG9sZFNlZ21lbnRzKSB7XG4gICAgICAgICAgICAgICAgc2VnbWVudHNSZW5kZXJTdGF0ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHNlZ21lbnRzOiBuZXcgU2VnbWVudFZlY3Rvcihbc2VnbWVudF0pLFxuICAgICAgICAgICAgICAgICAgICBzb3J0S2V5OiAoKHNlZ21lbnQuc29ydEtleTogYW55KTogbnVtYmVyKSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlZ21lbnRzUmVuZGVyU3RhdGVzLnB1c2goe1xuICAgICAgICAgICAgICAgIHNlZ21lbnRzOiBidWNrZXQuc2VnbWVudHMsXG4gICAgICAgICAgICAgICAgc29ydEtleTogMCxcbiAgICAgICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIGlmIChzb3J0RmVhdHVyZXNCeUtleSkge1xuICAgICAgICBzZWdtZW50c1JlbmRlclN0YXRlcy5zb3J0KChhLCBiKSA9PiBhLnNvcnRLZXkgLSBiLnNvcnRLZXkpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc2VnbWVudHNTdGF0ZSBvZiBzZWdtZW50c1JlbmRlclN0YXRlcykge1xuICAgICAgICBjb25zdCB7cHJvZ3JhbUNvbmZpZ3VyYXRpb24sIHByb2dyYW0sIGxheW91dFZlcnRleEJ1ZmZlciwgaW5kZXhCdWZmZXIsIHVuaWZvcm1WYWx1ZXN9ID0gc2VnbWVudHNTdGF0ZS5zdGF0ZTtcbiAgICAgICAgY29uc3Qgc2VnbWVudHMgPSBzZWdtZW50c1N0YXRlLnNlZ21lbnRzO1xuXG4gICAgICAgIHByb2dyYW0uZHJhdyhjb250ZXh0LCBnbC5UUklBTkdMRVMsIGRlcHRoTW9kZSwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLFxuICAgICAgICAgICAgdW5pZm9ybVZhbHVlcywgbGF5ZXIuaWQsXG4gICAgICAgICAgICBsYXlvdXRWZXJ0ZXhCdWZmZXIsIGluZGV4QnVmZmVyLCBzZWdtZW50cyxcbiAgICAgICAgICAgIGxheWVyLnBhaW50LCBwYWludGVyLnRyYW5zZm9ybS56b29tLCBwcm9ncmFtQ29uZmlndXJhdGlvbik7XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi90ZXh0dXJlJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuaW1wb3J0IERlcHRoTW9kZSBmcm9tICcuLi9nbC9kZXB0aF9tb2RlJztcbmltcG9ydCBTdGVuY2lsTW9kZSBmcm9tICcuLi9nbC9zdGVuY2lsX21vZGUnO1xuaW1wb3J0IENvbG9yTW9kZSBmcm9tICcuLi9nbC9jb2xvcl9tb2RlJztcbmltcG9ydCBDdWxsRmFjZU1vZGUgZnJvbSAnLi4vZ2wvY3VsbF9mYWNlX21vZGUnO1xuaW1wb3J0IHtcbiAgICBoZWF0bWFwVW5pZm9ybVZhbHVlcyxcbiAgICBoZWF0bWFwVGV4dHVyZVVuaWZvcm1WYWx1ZXNcbn0gZnJvbSAnLi9wcm9ncmFtL2hlYXRtYXBfcHJvZ3JhbSc7XG5cbmltcG9ydCB0eXBlIFBhaW50ZXIgZnJvbSAnLi9wYWludGVyJztcbmltcG9ydCB0eXBlIFNvdXJjZUNhY2hlIGZyb20gJy4uL3NvdXJjZS9zb3VyY2VfY2FjaGUnO1xuaW1wb3J0IHR5cGUgSGVhdG1hcFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXIvaGVhdG1hcF9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBIZWF0bWFwQnVja2V0IGZyb20gJy4uL2RhdGEvYnVja2V0L2hlYXRtYXBfYnVja2V0JztcbmltcG9ydCB0eXBlIHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuLi9zb3VyY2UvdGlsZV9pZCc7XG5cbmV4cG9ydCBkZWZhdWx0IGRyYXdIZWF0bWFwO1xuXG5mdW5jdGlvbiBkcmF3SGVhdG1hcChwYWludGVyOiBQYWludGVyLCBzb3VyY2VDYWNoZTogU291cmNlQ2FjaGUsIGxheWVyOiBIZWF0bWFwU3R5bGVMYXllciwgY29vcmRzOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPikge1xuICAgIGlmIChsYXllci5wYWludC5nZXQoJ2hlYXRtYXAtb3BhY2l0eScpID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocGFpbnRlci5yZW5kZXJQYXNzID09PSAnb2Zmc2NyZWVuJykge1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gcGFpbnRlci5jb250ZXh0O1xuICAgICAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG5cbiAgICAgICAgLy8gQWxsb3cga2VybmVscyB0byBiZSBkcmF3biBhY3Jvc3MgYm91bmRhcmllcywgc28gdGhhdFxuICAgICAgICAvLyBsYXJnZSBrZXJuZWxzIGFyZSBub3QgY2xpcHBlZCB0byB0aWxlc1xuICAgICAgICBjb25zdCBzdGVuY2lsTW9kZSA9IFN0ZW5jaWxNb2RlLmRpc2FibGVkO1xuICAgICAgICAvLyBUdXJuIG9uIGFkZGl0aXZlIGJsZW5kaW5nIGZvciBrZXJuZWxzLCB3aGljaCBpcyBhIGtleSBhc3BlY3Qgb2Yga2VybmVsIGRlbnNpdHkgZXN0aW1hdGlvbiBmb3JtdWxhXG4gICAgICAgIGNvbnN0IGNvbG9yTW9kZSA9IG5ldyBDb2xvck1vZGUoW2dsLk9ORSwgZ2wuT05FXSwgQ29sb3IudHJhbnNwYXJlbnQsIFt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlXSk7XG5cbiAgICAgICAgYmluZEZyYW1lYnVmZmVyKGNvbnRleHQsIHBhaW50ZXIsIGxheWVyKTtcblxuICAgICAgICBjb250ZXh0LmNsZWFyKHtjb2xvcjogQ29sb3IudHJhbnNwYXJlbnR9KTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvb3Jkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY29vcmQgPSBjb29yZHNbaV07XG5cbiAgICAgICAgICAgIC8vIFNraXAgdGlsZXMgdGhhdCBoYXZlIHVuY292ZXJlZCBwYXJlbnRzIHRvIGF2b2lkIGZsaWNrZXJpbmc7IHdlIGRvbid0IG5lZWRcbiAgICAgICAgICAgIC8vIHRvIHVzZSBjb21wbGV4IHRpbGUgbWFza2luZyBoZXJlIGJlY2F1c2UgdGhlIGNoYW5nZSBiZXR3ZWVuIHpvb20gbGV2ZWxzIGlzIHN1YnRsZSxcbiAgICAgICAgICAgIC8vIHNvIGl0J3MgZmluZSB0byBzaW1wbHkgcmVuZGVyIHRoZSBwYXJlbnQgdW50aWwgYWxsIGl0cyA0IGNoaWxkcmVuIGFyZSBsb2FkZWRcbiAgICAgICAgICAgIGlmIChzb3VyY2VDYWNoZS5oYXNSZW5kZXJhYmxlUGFyZW50KGNvb3JkKSkgY29udGludWU7XG5cbiAgICAgICAgICAgIGNvbnN0IHRpbGUgPSBzb3VyY2VDYWNoZS5nZXRUaWxlKGNvb3JkKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1Y2tldDogP0hlYXRtYXBCdWNrZXQgPSAodGlsZS5nZXRCdWNrZXQobGF5ZXIpOiBhbnkpO1xuICAgICAgICAgICAgaWYgKCFidWNrZXQpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBjb25zdCBwcm9ncmFtQ29uZmlndXJhdGlvbiA9IGJ1Y2tldC5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KGxheWVyLmlkKTtcbiAgICAgICAgICAgIGNvbnN0IHByb2dyYW0gPSBwYWludGVyLnVzZVByb2dyYW0oJ2hlYXRtYXAnLCBwcm9ncmFtQ29uZmlndXJhdGlvbik7XG4gICAgICAgICAgICBjb25zdCB7em9vbX0gPSBwYWludGVyLnRyYW5zZm9ybTtcblxuICAgICAgICAgICAgcHJvZ3JhbS5kcmF3KGNvbnRleHQsIGdsLlRSSUFOR0xFUywgRGVwdGhNb2RlLmRpc2FibGVkLCBzdGVuY2lsTW9kZSwgY29sb3JNb2RlLCBDdWxsRmFjZU1vZGUuZGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgaGVhdG1hcFVuaWZvcm1WYWx1ZXMoY29vcmQucG9zTWF0cml4LFxuICAgICAgICAgICAgICAgICAgICB0aWxlLCB6b29tLCBsYXllci5wYWludC5nZXQoJ2hlYXRtYXAtaW50ZW5zaXR5JykpLFxuICAgICAgICAgICAgICAgIGxheWVyLmlkLCBidWNrZXQubGF5b3V0VmVydGV4QnVmZmVyLCBidWNrZXQuaW5kZXhCdWZmZXIsXG4gICAgICAgICAgICAgICAgYnVja2V0LnNlZ21lbnRzLCBsYXllci5wYWludCwgcGFpbnRlci50cmFuc2Zvcm0uem9vbSxcbiAgICAgICAgICAgICAgICBwcm9ncmFtQ29uZmlndXJhdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0LnZpZXdwb3J0LnNldChbMCwgMCwgcGFpbnRlci53aWR0aCwgcGFpbnRlci5oZWlnaHRdKTtcblxuICAgIH0gZWxzZSBpZiAocGFpbnRlci5yZW5kZXJQYXNzID09PSAndHJhbnNsdWNlbnQnKSB7XG4gICAgICAgIHBhaW50ZXIuY29udGV4dC5zZXRDb2xvck1vZGUocGFpbnRlci5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpO1xuICAgICAgICByZW5kZXJUZXh0dXJlVG9NYXAocGFpbnRlciwgbGF5ZXIpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gYmluZEZyYW1lYnVmZmVyKGNvbnRleHQsIHBhaW50ZXIsIGxheWVyKSB7XG4gICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuICAgIGNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQoZ2wuVEVYVFVSRTEpO1xuXG4gICAgLy8gVXNlIGEgNHggZG93bnNjYWxlZCBzY3JlZW4gdGV4dHVyZSBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlXG4gICAgY29udGV4dC52aWV3cG9ydC5zZXQoWzAsIDAsIHBhaW50ZXIud2lkdGggLyA0LCBwYWludGVyLmhlaWdodCAvIDRdKTtcblxuICAgIGxldCBmYm8gPSBsYXllci5oZWF0bWFwRmJvO1xuXG4gICAgaWYgKCFmYm8pIHtcbiAgICAgICAgY29uc3QgdGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZSk7XG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGdsLkNMQU1QX1RPX0VER0UpO1xuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9ULCBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGdsLkxJTkVBUik7XG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBnbC5MSU5FQVIpO1xuXG4gICAgICAgIGZibyA9IGxheWVyLmhlYXRtYXBGYm8gPSBjb250ZXh0LmNyZWF0ZUZyYW1lYnVmZmVyKHBhaW50ZXIud2lkdGggLyA0LCBwYWludGVyLmhlaWdodCAvIDQsIGZhbHNlKTtcblxuICAgICAgICBiaW5kVGV4dHVyZVRvRnJhbWVidWZmZXIoY29udGV4dCwgcGFpbnRlciwgdGV4dHVyZSwgZmJvKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGZiby5jb2xvckF0dGFjaG1lbnQuZ2V0KCkpO1xuICAgICAgICBjb250ZXh0LmJpbmRGcmFtZWJ1ZmZlci5zZXQoZmJvLmZyYW1lYnVmZmVyKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGJpbmRUZXh0dXJlVG9GcmFtZWJ1ZmZlcihjb250ZXh0LCBwYWludGVyLCB0ZXh0dXJlLCBmYm8pIHtcbiAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgLy8gVXNlIHRoZSBoaWdoZXIgcHJlY2lzaW9uIGhhbGYtZmxvYXQgdGV4dHVyZSB3aGVyZSBhdmFpbGFibGUgKHByb2R1Y2luZyBtdWNoIHNtb290aGVyIGxvb2tpbmcgaGVhdG1hcHMpO1xuICAgIC8vIE90aGVyd2lzZSwgZmFsbCBiYWNrIHRvIGEgbG93IHByZWNpc2lvbiB0ZXh0dXJlXG4gICAgY29uc3QgaW50ZXJuYWxGb3JtYXQgPSBjb250ZXh0LmV4dFJlbmRlclRvVGV4dHVyZUhhbGZGbG9hdCA/IGNvbnRleHQuZXh0VGV4dHVyZUhhbGZGbG9hdC5IQUxGX0ZMT0FUX09FUyA6IGdsLlVOU0lHTkVEX0JZVEU7XG4gICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCBwYWludGVyLndpZHRoIC8gNCwgcGFpbnRlci5oZWlnaHQgLyA0LCAwLCBnbC5SR0JBLCBpbnRlcm5hbEZvcm1hdCwgbnVsbCk7XG4gICAgZmJvLmNvbG9yQXR0YWNobWVudC5zZXQodGV4dHVyZSk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclRleHR1cmVUb01hcChwYWludGVyLCBsYXllcikge1xuICAgIGNvbnN0IGNvbnRleHQgPSBwYWludGVyLmNvbnRleHQ7XG4gICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuXG4gICAgLy8gSGVyZSB3ZSBiaW5kIHR3byBkaWZmZXJlbnQgdGV4dHVyZXMgZnJvbSB3aGljaCB3ZSdsbCBzYW1wbGUgaW4gZHJhd2luZ1xuICAgIC8vIGhlYXRtYXBzOiB0aGUga2VybmVsIHRleHR1cmUsIHByZXBhcmVkIGluIHRoZSBvZmZzY3JlZW4gcGFzcywgYW5kIGFcbiAgICAvLyBjb2xvciByYW1wIHRleHR1cmUuXG4gICAgY29uc3QgZmJvID0gbGF5ZXIuaGVhdG1hcEZibztcbiAgICBpZiAoIWZibykgcmV0dXJuO1xuICAgIGNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQoZ2wuVEVYVFVSRTApO1xuICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGZiby5jb2xvckF0dGFjaG1lbnQuZ2V0KCkpO1xuXG4gICAgY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldChnbC5URVhUVVJFMSk7XG4gICAgbGV0IGNvbG9yUmFtcFRleHR1cmUgPSBsYXllci5jb2xvclJhbXBUZXh0dXJlO1xuICAgIGlmICghY29sb3JSYW1wVGV4dHVyZSkge1xuICAgICAgICBjb2xvclJhbXBUZXh0dXJlID0gbGF5ZXIuY29sb3JSYW1wVGV4dHVyZSA9IG5ldyBUZXh0dXJlKGNvbnRleHQsIGxheWVyLmNvbG9yUmFtcCwgZ2wuUkdCQSk7XG4gICAgfVxuICAgIGNvbG9yUmFtcFRleHR1cmUuYmluZChnbC5MSU5FQVIsIGdsLkNMQU1QX1RPX0VER0UpO1xuXG4gICAgcGFpbnRlci51c2VQcm9ncmFtKCdoZWF0bWFwVGV4dHVyZScpLmRyYXcoY29udGV4dCwgZ2wuVFJJQU5HTEVTLFxuICAgICAgICBEZXB0aE1vZGUuZGlzYWJsZWQsIFN0ZW5jaWxNb2RlLmRpc2FibGVkLCBwYWludGVyLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLFxuICAgICAgICBoZWF0bWFwVGV4dHVyZVVuaWZvcm1WYWx1ZXMocGFpbnRlciwgbGF5ZXIsIDAsIDEpLFxuICAgICAgICBsYXllci5pZCwgcGFpbnRlci52aWV3cG9ydEJ1ZmZlciwgcGFpbnRlci5xdWFkVHJpYW5nbGVJbmRleEJ1ZmZlcixcbiAgICAgICAgcGFpbnRlci52aWV3cG9ydFNlZ21lbnRzLCBsYXllci5wYWludCwgcGFpbnRlci50cmFuc2Zvcm0uem9vbSk7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgRGVwdGhNb2RlIGZyb20gJy4uL2dsL2RlcHRoX21vZGUnO1xuaW1wb3J0IEN1bGxGYWNlTW9kZSBmcm9tICcuLi9nbC9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuL3RleHR1cmUnO1xuaW1wb3J0IHtcbiAgICBsaW5lVW5pZm9ybVZhbHVlcyxcbiAgICBsaW5lUGF0dGVyblVuaWZvcm1WYWx1ZXMsXG4gICAgbGluZVNERlVuaWZvcm1WYWx1ZXMsXG4gICAgbGluZUdyYWRpZW50VW5pZm9ybVZhbHVlc1xufSBmcm9tICcuL3Byb2dyYW0vbGluZV9wcm9ncmFtJztcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUgU291cmNlQ2FjaGUgZnJvbSAnLi4vc291cmNlL3NvdXJjZV9jYWNoZSc7XG5pbXBvcnQgdHlwZSBMaW5lU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllci9saW5lX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIExpbmVCdWNrZXQgZnJvbSAnLi4vZGF0YS9idWNrZXQvbGluZV9idWNrZXQnO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uL3NvdXJjZS90aWxlX2lkJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZHJhd0xpbmUocGFpbnRlcjogUGFpbnRlciwgc291cmNlQ2FjaGU6IFNvdXJjZUNhY2hlLCBsYXllcjogTGluZVN0eWxlTGF5ZXIsIGNvb3JkczogQXJyYXk8T3ZlcnNjYWxlZFRpbGVJRD4pIHtcbiAgICBpZiAocGFpbnRlci5yZW5kZXJQYXNzICE9PSAndHJhbnNsdWNlbnQnKSByZXR1cm47XG5cbiAgICBjb25zdCBvcGFjaXR5ID0gbGF5ZXIucGFpbnQuZ2V0KCdsaW5lLW9wYWNpdHknKTtcbiAgICBjb25zdCB3aWR0aCA9IGxheWVyLnBhaW50LmdldCgnbGluZS13aWR0aCcpO1xuICAgIGlmIChvcGFjaXR5LmNvbnN0YW50T3IoMSkgPT09IDAgfHwgd2lkdGguY29uc3RhbnRPcigxKSA9PT0gMCkgcmV0dXJuO1xuXG4gICAgY29uc3QgZGVwdGhNb2RlID0gcGFpbnRlci5kZXB0aE1vZGVGb3JTdWJsYXllcigwLCBEZXB0aE1vZGUuUmVhZE9ubHkpO1xuICAgIGNvbnN0IGNvbG9yTW9kZSA9IHBhaW50ZXIuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpO1xuXG4gICAgY29uc3QgZGFzaGFycmF5ID0gbGF5ZXIucGFpbnQuZ2V0KCdsaW5lLWRhc2hhcnJheScpO1xuICAgIGNvbnN0IHBhdHRlcm5Qcm9wZXJ0eSA9IGxheWVyLnBhaW50LmdldCgnbGluZS1wYXR0ZXJuJyk7XG4gICAgY29uc3QgaW1hZ2UgPSBwYXR0ZXJuUHJvcGVydHkuY29uc3RhbnRPcigoMTogYW55KSk7XG5cbiAgICBjb25zdCBncmFkaWVudCA9IGxheWVyLnBhaW50LmdldCgnbGluZS1ncmFkaWVudCcpO1xuICAgIGNvbnN0IGNyb3NzZmFkZSA9IGxheWVyLmdldENyb3NzZmFkZVBhcmFtZXRlcnMoKTtcblxuICAgIGNvbnN0IHByb2dyYW1JZCA9XG4gICAgICAgIGltYWdlID8gJ2xpbmVQYXR0ZXJuJyA6XG4gICAgICAgIGRhc2hhcnJheSA/ICdsaW5lU0RGJyA6XG4gICAgICAgIGdyYWRpZW50ID8gJ2xpbmVHcmFkaWVudCcgOiAnbGluZSc7XG5cbiAgICBjb25zdCBjb250ZXh0ID0gcGFpbnRlci5jb250ZXh0O1xuICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcblxuICAgIGxldCBmaXJzdFRpbGUgPSB0cnVlO1xuXG4gICAgaWYgKGdyYWRpZW50KSB7XG4gICAgICAgIGNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQoZ2wuVEVYVFVSRTApO1xuXG4gICAgICAgIGxldCBncmFkaWVudFRleHR1cmUgPSBsYXllci5ncmFkaWVudFRleHR1cmU7XG4gICAgICAgIGlmICghbGF5ZXIuZ3JhZGllbnQpIHJldHVybjtcbiAgICAgICAgaWYgKCFncmFkaWVudFRleHR1cmUpIGdyYWRpZW50VGV4dHVyZSA9IGxheWVyLmdyYWRpZW50VGV4dHVyZSA9IG5ldyBUZXh0dXJlKGNvbnRleHQsIGxheWVyLmdyYWRpZW50LCBnbC5SR0JBKTtcbiAgICAgICAgZ3JhZGllbnRUZXh0dXJlLmJpbmQoZ2wuTElORUFSLCBnbC5DTEFNUF9UT19FREdFKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNvb3JkIG9mIGNvb3Jkcykge1xuICAgICAgICBjb25zdCB0aWxlID0gc291cmNlQ2FjaGUuZ2V0VGlsZShjb29yZCk7XG5cbiAgICAgICAgaWYgKGltYWdlICYmICF0aWxlLnBhdHRlcm5zTG9hZGVkKCkpIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnN0IGJ1Y2tldDogP0xpbmVCdWNrZXQgPSAodGlsZS5nZXRCdWNrZXQobGF5ZXIpOiBhbnkpO1xuICAgICAgICBpZiAoIWJ1Y2tldCkgY29udGludWU7XG5cbiAgICAgICAgY29uc3QgcHJvZ3JhbUNvbmZpZ3VyYXRpb24gPSBidWNrZXQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChsYXllci5pZCk7XG4gICAgICAgIGNvbnN0IHByZXZQcm9ncmFtID0gcGFpbnRlci5jb250ZXh0LnByb2dyYW0uZ2V0KCk7XG4gICAgICAgIGNvbnN0IHByb2dyYW0gPSBwYWludGVyLnVzZVByb2dyYW0ocHJvZ3JhbUlkLCBwcm9ncmFtQ29uZmlndXJhdGlvbik7XG4gICAgICAgIGNvbnN0IHByb2dyYW1DaGFuZ2VkID0gZmlyc3RUaWxlIHx8IHByb2dyYW0ucHJvZ3JhbSAhPT0gcHJldlByb2dyYW07XG5cbiAgICAgICAgY29uc3QgY29uc3RhbnRQYXR0ZXJuID0gcGF0dGVyblByb3BlcnR5LmNvbnN0YW50T3IobnVsbCk7XG4gICAgICAgIGlmIChjb25zdGFudFBhdHRlcm4gJiYgdGlsZS5pbWFnZUF0bGFzKSB7XG4gICAgICAgICAgICBjb25zdCBhdGxhcyA9IHRpbGUuaW1hZ2VBdGxhcztcbiAgICAgICAgICAgIGNvbnN0IHBvc1RvID0gYXRsYXMucGF0dGVyblBvc2l0aW9uc1tjb25zdGFudFBhdHRlcm4udG8udG9TdHJpbmcoKV07XG4gICAgICAgICAgICBjb25zdCBwb3NGcm9tID0gYXRsYXMucGF0dGVyblBvc2l0aW9uc1tjb25zdGFudFBhdHRlcm4uZnJvbS50b1N0cmluZygpXTtcbiAgICAgICAgICAgIGlmIChwb3NUbyAmJiBwb3NGcm9tKSBwcm9ncmFtQ29uZmlndXJhdGlvbi5zZXRDb25zdGFudFBhdHRlcm5Qb3NpdGlvbnMocG9zVG8sIHBvc0Zyb20pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdW5pZm9ybVZhbHVlcyA9IGltYWdlID8gbGluZVBhdHRlcm5Vbmlmb3JtVmFsdWVzKHBhaW50ZXIsIHRpbGUsIGxheWVyLCBjcm9zc2ZhZGUpIDpcbiAgICAgICAgICAgIGRhc2hhcnJheSA/IGxpbmVTREZVbmlmb3JtVmFsdWVzKHBhaW50ZXIsIHRpbGUsIGxheWVyLCBkYXNoYXJyYXksIGNyb3NzZmFkZSkgOlxuICAgICAgICAgICAgZ3JhZGllbnQgPyBsaW5lR3JhZGllbnRVbmlmb3JtVmFsdWVzKHBhaW50ZXIsIHRpbGUsIGxheWVyKSA6XG4gICAgICAgICAgICBsaW5lVW5pZm9ybVZhbHVlcyhwYWludGVyLCB0aWxlLCBsYXllcik7XG5cbiAgICAgICAgaWYgKGltYWdlKSB7XG4gICAgICAgICAgICBjb250ZXh0LmFjdGl2ZVRleHR1cmUuc2V0KGdsLlRFWFRVUkUwKTtcbiAgICAgICAgICAgIHRpbGUuaW1hZ2VBdGxhc1RleHR1cmUuYmluZChnbC5MSU5FQVIsIGdsLkNMQU1QX1RPX0VER0UpO1xuICAgICAgICAgICAgcHJvZ3JhbUNvbmZpZ3VyYXRpb24udXBkYXRlUGFpbnRCdWZmZXJzKGNyb3NzZmFkZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGFzaGFycmF5ICYmIChwcm9ncmFtQ2hhbmdlZCB8fCBwYWludGVyLmxpbmVBdGxhcy5kaXJ0eSkpIHtcbiAgICAgICAgICAgIGNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQoZ2wuVEVYVFVSRTApO1xuICAgICAgICAgICAgcGFpbnRlci5saW5lQXRsYXMuYmluZChjb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByb2dyYW0uZHJhdyhjb250ZXh0LCBnbC5UUklBTkdMRVMsIGRlcHRoTW9kZSxcbiAgICAgICAgICAgIHBhaW50ZXIuc3RlbmNpbE1vZGVGb3JDbGlwcGluZyhjb29yZCksIGNvbG9yTW9kZSwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLCB1bmlmb3JtVmFsdWVzLFxuICAgICAgICAgICAgbGF5ZXIuaWQsIGJ1Y2tldC5sYXlvdXRWZXJ0ZXhCdWZmZXIsIGJ1Y2tldC5pbmRleEJ1ZmZlciwgYnVja2V0LnNlZ21lbnRzLFxuICAgICAgICAgICAgbGF5ZXIucGFpbnQsIHBhaW50ZXIudHJhbnNmb3JtLnpvb20sIHByb2dyYW1Db25maWd1cmF0aW9uKTtcblxuICAgICAgICBmaXJzdFRpbGUgPSBmYWxzZTtcbiAgICAgICAgLy8gb25jZSByZWZhY3RvcmVkIHNvIHRoYXQgYm91bmQgdGV4dHVyZSBzdGF0ZSBpcyBtYW5hZ2VkLCB3ZSdsbCBhbHNvIGJlIGFibGUgdG8gcmVtb3ZlIHRoaXMgZmlyc3RUaWxlL3Byb2dyYW1DaGFuZ2VkIGxvZ2ljXG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IENvbG9yIGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5pbXBvcnQgRGVwdGhNb2RlIGZyb20gJy4uL2dsL2RlcHRoX21vZGUnO1xuaW1wb3J0IEN1bGxGYWNlTW9kZSBmcm9tICcuLi9nbC9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQge1xuICAgIGZpbGxVbmlmb3JtVmFsdWVzLFxuICAgIGZpbGxQYXR0ZXJuVW5pZm9ybVZhbHVlcyxcbiAgICBmaWxsT3V0bGluZVVuaWZvcm1WYWx1ZXMsXG4gICAgZmlsbE91dGxpbmVQYXR0ZXJuVW5pZm9ybVZhbHVlc1xufSBmcm9tICcuL3Byb2dyYW0vZmlsbF9wcm9ncmFtJztcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUgU291cmNlQ2FjaGUgZnJvbSAnLi4vc291cmNlL3NvdXJjZV9jYWNoZSc7XG5pbXBvcnQgdHlwZSBGaWxsU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllci9maWxsX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIEZpbGxCdWNrZXQgZnJvbSAnLi4vZGF0YS9idWNrZXQvZmlsbF9idWNrZXQnO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uL3NvdXJjZS90aWxlX2lkJztcblxuZXhwb3J0IGRlZmF1bHQgZHJhd0ZpbGw7XG5cbmZ1bmN0aW9uIGRyYXdGaWxsKHBhaW50ZXI6IFBhaW50ZXIsIHNvdXJjZUNhY2hlOiBTb3VyY2VDYWNoZSwgbGF5ZXI6IEZpbGxTdHlsZUxheWVyLCBjb29yZHM6IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+KSB7XG4gICAgY29uc3QgY29sb3IgPSBsYXllci5wYWludC5nZXQoJ2ZpbGwtY29sb3InKTtcbiAgICBjb25zdCBvcGFjaXR5ID0gbGF5ZXIucGFpbnQuZ2V0KCdmaWxsLW9wYWNpdHknKTtcblxuICAgIGlmIChvcGFjaXR5LmNvbnN0YW50T3IoMSkgPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbG9yTW9kZSA9IHBhaW50ZXIuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpO1xuXG4gICAgY29uc3QgcGF0dGVybiA9IGxheWVyLnBhaW50LmdldCgnZmlsbC1wYXR0ZXJuJyk7XG4gICAgY29uc3QgcGFzcyA9IHBhaW50ZXIub3BhcXVlUGFzc0VuYWJsZWRGb3JMYXllcigpICYmXG4gICAgICAgICghcGF0dGVybi5jb25zdGFudE9yKCgxOiBhbnkpKSAmJlxuICAgICAgICBjb2xvci5jb25zdGFudE9yKENvbG9yLnRyYW5zcGFyZW50KS5hID09PSAxICYmXG4gICAgICAgIG9wYWNpdHkuY29uc3RhbnRPcigwKSA9PT0gMSkgPyAnb3BhcXVlJyA6ICd0cmFuc2x1Y2VudCc7XG5cbiAgICAvLyBEcmF3IGZpbGxcbiAgICBpZiAocGFpbnRlci5yZW5kZXJQYXNzID09PSBwYXNzKSB7XG4gICAgICAgIGNvbnN0IGRlcHRoTW9kZSA9IHBhaW50ZXIuZGVwdGhNb2RlRm9yU3VibGF5ZXIoXG4gICAgICAgICAgICAxLCBwYWludGVyLnJlbmRlclBhc3MgPT09ICdvcGFxdWUnID8gRGVwdGhNb2RlLlJlYWRXcml0ZSA6IERlcHRoTW9kZS5SZWFkT25seSk7XG4gICAgICAgIGRyYXdGaWxsVGlsZXMocGFpbnRlciwgc291cmNlQ2FjaGUsIGxheWVyLCBjb29yZHMsIGRlcHRoTW9kZSwgY29sb3JNb2RlLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgLy8gRHJhdyBzdHJva2VcbiAgICBpZiAocGFpbnRlci5yZW5kZXJQYXNzID09PSAndHJhbnNsdWNlbnQnICYmIGxheWVyLnBhaW50LmdldCgnZmlsbC1hbnRpYWxpYXMnKSkge1xuXG4gICAgICAgIC8vIElmIHdlIGRlZmluZWQgYSBkaWZmZXJlbnQgY29sb3IgZm9yIHRoZSBmaWxsIG91dGxpbmUsIHdlIGFyZVxuICAgICAgICAvLyBnb2luZyB0byBpZ25vcmUgdGhlIGJpdHMgaW4gMHgwNyBhbmQganVzdCBjYXJlIGFib3V0IHRoZSBnbG9iYWxcbiAgICAgICAgLy8gY2xpcHBpbmcgbWFzay5cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSBvbmx5IHdhbnQgdG8gZHJhd0ZpbGwgdGhlIGFudGlhbGlhc2VkIHBhcnRzIHRoYXQgYXJlXG4gICAgICAgIC8vICpvdXRzaWRlKiB0aGUgY3VycmVudCBzaGFwZS4gVGhpcyBpcyBpbXBvcnRhbnQgaW4gY2FzZSB0aGUgZmlsbFxuICAgICAgICAvLyBvciBzdHJva2UgY29sb3IgaXMgdHJhbnNsdWNlbnQuIElmIHdlIHdvdWxkbid0IGNsaXAgdG8gb3V0c2lkZVxuICAgICAgICAvLyB0aGUgY3VycmVudCBzaGFwZSwgc29tZSBwaXhlbHMgZnJvbSB0aGUgb3V0bGluZSBzdHJva2Ugb3ZlcmxhcHBlZFxuICAgICAgICAvLyB0aGUgKG5vbi1hbnRpYWxpYXNlZCkgZmlsbC5cbiAgICAgICAgY29uc3QgZGVwdGhNb2RlID0gcGFpbnRlci5kZXB0aE1vZGVGb3JTdWJsYXllcihcbiAgICAgICAgICAgIGxheWVyLmdldFBhaW50UHJvcGVydHkoJ2ZpbGwtb3V0bGluZS1jb2xvcicpID8gMiA6IDAsIERlcHRoTW9kZS5SZWFkT25seSk7XG4gICAgICAgIGRyYXdGaWxsVGlsZXMocGFpbnRlciwgc291cmNlQ2FjaGUsIGxheWVyLCBjb29yZHMsIGRlcHRoTW9kZSwgY29sb3JNb2RlLCB0cnVlKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYXdGaWxsVGlsZXMocGFpbnRlciwgc291cmNlQ2FjaGUsIGxheWVyLCBjb29yZHMsIGRlcHRoTW9kZSwgY29sb3JNb2RlLCBpc091dGxpbmUpIHtcbiAgICBjb25zdCBnbCA9IHBhaW50ZXIuY29udGV4dC5nbDtcblxuICAgIGNvbnN0IHBhdHRlcm5Qcm9wZXJ0eSA9IGxheWVyLnBhaW50LmdldCgnZmlsbC1wYXR0ZXJuJyk7XG4gICAgY29uc3QgaW1hZ2UgPSBwYXR0ZXJuUHJvcGVydHkgJiYgcGF0dGVyblByb3BlcnR5LmNvbnN0YW50T3IoKDE6IGFueSkpO1xuICAgIGNvbnN0IGNyb3NzZmFkZSA9IGxheWVyLmdldENyb3NzZmFkZVBhcmFtZXRlcnMoKTtcbiAgICBsZXQgZHJhd01vZGUsIHByb2dyYW1OYW1lLCB1bmlmb3JtVmFsdWVzLCBpbmRleEJ1ZmZlciwgc2VnbWVudHM7XG5cbiAgICBpZiAoIWlzT3V0bGluZSkge1xuICAgICAgICBwcm9ncmFtTmFtZSA9IGltYWdlID8gJ2ZpbGxQYXR0ZXJuJyA6ICdmaWxsJztcbiAgICAgICAgZHJhd01vZGUgPSBnbC5UUklBTkdMRVM7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcHJvZ3JhbU5hbWUgPSBpbWFnZSAmJiAhbGF5ZXIuZ2V0UGFpbnRQcm9wZXJ0eSgnZmlsbC1vdXRsaW5lLWNvbG9yJykgPyAnZmlsbE91dGxpbmVQYXR0ZXJuJyA6ICdmaWxsT3V0bGluZSc7XG4gICAgICAgIGRyYXdNb2RlID0gZ2wuTElORVM7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjb29yZCBvZiBjb29yZHMpIHtcbiAgICAgICAgY29uc3QgdGlsZSA9IHNvdXJjZUNhY2hlLmdldFRpbGUoY29vcmQpO1xuICAgICAgICBpZiAoaW1hZ2UgJiYgIXRpbGUucGF0dGVybnNMb2FkZWQoKSkgY29udGludWU7XG5cbiAgICAgICAgY29uc3QgYnVja2V0OiA/RmlsbEJ1Y2tldCA9ICh0aWxlLmdldEJ1Y2tldChsYXllcik6IGFueSk7XG4gICAgICAgIGlmICghYnVja2V0KSBjb250aW51ZTtcblxuICAgICAgICBjb25zdCBwcm9ncmFtQ29uZmlndXJhdGlvbiA9IGJ1Y2tldC5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KGxheWVyLmlkKTtcbiAgICAgICAgY29uc3QgcHJvZ3JhbSA9IHBhaW50ZXIudXNlUHJvZ3JhbShwcm9ncmFtTmFtZSwgcHJvZ3JhbUNvbmZpZ3VyYXRpb24pO1xuXG4gICAgICAgIGlmIChpbWFnZSkge1xuICAgICAgICAgICAgcGFpbnRlci5jb250ZXh0LmFjdGl2ZVRleHR1cmUuc2V0KGdsLlRFWFRVUkUwKTtcbiAgICAgICAgICAgIHRpbGUuaW1hZ2VBdGxhc1RleHR1cmUuYmluZChnbC5MSU5FQVIsIGdsLkNMQU1QX1RPX0VER0UpO1xuICAgICAgICAgICAgcHJvZ3JhbUNvbmZpZ3VyYXRpb24udXBkYXRlUGFpbnRCdWZmZXJzKGNyb3NzZmFkZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb25zdGFudFBhdHRlcm4gPSBwYXR0ZXJuUHJvcGVydHkuY29uc3RhbnRPcihudWxsKTtcbiAgICAgICAgaWYgKGNvbnN0YW50UGF0dGVybiAmJiB0aWxlLmltYWdlQXRsYXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGF0bGFzID0gdGlsZS5pbWFnZUF0bGFzO1xuICAgICAgICAgICAgY29uc3QgcG9zVG8gPSBhdGxhcy5wYXR0ZXJuUG9zaXRpb25zW2NvbnN0YW50UGF0dGVybi50by50b1N0cmluZygpXTtcbiAgICAgICAgICAgIGNvbnN0IHBvc0Zyb20gPSBhdGxhcy5wYXR0ZXJuUG9zaXRpb25zW2NvbnN0YW50UGF0dGVybi5mcm9tLnRvU3RyaW5nKCldO1xuICAgICAgICAgICAgaWYgKHBvc1RvICYmIHBvc0Zyb20pIHByb2dyYW1Db25maWd1cmF0aW9uLnNldENvbnN0YW50UGF0dGVyblBvc2l0aW9ucyhwb3NUbywgcG9zRnJvbSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0aWxlTWF0cml4ID0gcGFpbnRlci50cmFuc2xhdGVQb3NNYXRyaXgoY29vcmQucG9zTWF0cml4LCB0aWxlLFxuICAgICAgICAgICAgbGF5ZXIucGFpbnQuZ2V0KCdmaWxsLXRyYW5zbGF0ZScpLCBsYXllci5wYWludC5nZXQoJ2ZpbGwtdHJhbnNsYXRlLWFuY2hvcicpKTtcblxuICAgICAgICBpZiAoIWlzT3V0bGluZSkge1xuICAgICAgICAgICAgaW5kZXhCdWZmZXIgPSBidWNrZXQuaW5kZXhCdWZmZXI7XG4gICAgICAgICAgICBzZWdtZW50cyA9IGJ1Y2tldC5zZWdtZW50cztcbiAgICAgICAgICAgIHVuaWZvcm1WYWx1ZXMgPSBpbWFnZSA/XG4gICAgICAgICAgICAgICAgZmlsbFBhdHRlcm5Vbmlmb3JtVmFsdWVzKHRpbGVNYXRyaXgsIHBhaW50ZXIsIGNyb3NzZmFkZSwgdGlsZSkgOlxuICAgICAgICAgICAgICAgIGZpbGxVbmlmb3JtVmFsdWVzKHRpbGVNYXRyaXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5kZXhCdWZmZXIgPSBidWNrZXQuaW5kZXhCdWZmZXIyO1xuICAgICAgICAgICAgc2VnbWVudHMgPSBidWNrZXQuc2VnbWVudHMyO1xuICAgICAgICAgICAgY29uc3QgZHJhd2luZ0J1ZmZlclNpemUgPSBbZ2wuZHJhd2luZ0J1ZmZlcldpZHRoLCBnbC5kcmF3aW5nQnVmZmVySGVpZ2h0XTtcbiAgICAgICAgICAgIHVuaWZvcm1WYWx1ZXMgPSAocHJvZ3JhbU5hbWUgPT09ICdmaWxsT3V0bGluZVBhdHRlcm4nICYmIGltYWdlKSA/XG4gICAgICAgICAgICAgICAgZmlsbE91dGxpbmVQYXR0ZXJuVW5pZm9ybVZhbHVlcyh0aWxlTWF0cml4LCBwYWludGVyLCBjcm9zc2ZhZGUsIHRpbGUsIGRyYXdpbmdCdWZmZXJTaXplKSA6XG4gICAgICAgICAgICAgICAgZmlsbE91dGxpbmVVbmlmb3JtVmFsdWVzKHRpbGVNYXRyaXgsIGRyYXdpbmdCdWZmZXJTaXplKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByb2dyYW0uZHJhdyhwYWludGVyLmNvbnRleHQsIGRyYXdNb2RlLCBkZXB0aE1vZGUsXG4gICAgICAgICAgICBwYWludGVyLnN0ZW5jaWxNb2RlRm9yQ2xpcHBpbmcoY29vcmQpLCBjb2xvck1vZGUsIEN1bGxGYWNlTW9kZS5kaXNhYmxlZCwgdW5pZm9ybVZhbHVlcyxcbiAgICAgICAgICAgIGxheWVyLmlkLCBidWNrZXQubGF5b3V0VmVydGV4QnVmZmVyLCBpbmRleEJ1ZmZlciwgc2VnbWVudHMsXG4gICAgICAgICAgICBsYXllci5wYWludCwgcGFpbnRlci50cmFuc2Zvcm0uem9vbSwgcHJvZ3JhbUNvbmZpZ3VyYXRpb24pO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBEZXB0aE1vZGUgZnJvbSAnLi4vZ2wvZGVwdGhfbW9kZSc7XG5pbXBvcnQgU3RlbmNpbE1vZGUgZnJvbSAnLi4vZ2wvc3RlbmNpbF9tb2RlJztcbmltcG9ydCBDb2xvck1vZGUgZnJvbSAnLi4vZ2wvY29sb3JfbW9kZSc7XG5pbXBvcnQgQ3VsbEZhY2VNb2RlIGZyb20gJy4uL2dsL2N1bGxfZmFjZV9tb2RlJztcbmltcG9ydCB7XG4gICAgZmlsbEV4dHJ1c2lvblVuaWZvcm1WYWx1ZXMsXG4gICAgZmlsbEV4dHJ1c2lvblBhdHRlcm5Vbmlmb3JtVmFsdWVzLFxufSBmcm9tICcuL3Byb2dyYW0vZmlsbF9leHRydXNpb25fcHJvZ3JhbSc7XG5cbmltcG9ydCB0eXBlIFBhaW50ZXIgZnJvbSAnLi9wYWludGVyJztcbmltcG9ydCB0eXBlIFNvdXJjZUNhY2hlIGZyb20gJy4uL3NvdXJjZS9zb3VyY2VfY2FjaGUnO1xuaW1wb3J0IHR5cGUgRmlsbEV4dHJ1c2lvblN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXIvZmlsbF9leHRydXNpb25fc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgRmlsbEV4dHJ1c2lvbkJ1Y2tldCBmcm9tICcuLi9kYXRhL2J1Y2tldC9maWxsX2V4dHJ1c2lvbl9idWNrZXQnO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uL3NvdXJjZS90aWxlX2lkJztcblxuZXhwb3J0IGRlZmF1bHQgZHJhdztcblxuZnVuY3Rpb24gZHJhdyhwYWludGVyOiBQYWludGVyLCBzb3VyY2U6IFNvdXJjZUNhY2hlLCBsYXllcjogRmlsbEV4dHJ1c2lvblN0eWxlTGF5ZXIsIGNvb3JkczogQXJyYXk8T3ZlcnNjYWxlZFRpbGVJRD4pIHtcbiAgICBjb25zdCBvcGFjaXR5ID0gbGF5ZXIucGFpbnQuZ2V0KCdmaWxsLWV4dHJ1c2lvbi1vcGFjaXR5Jyk7XG4gICAgaWYgKG9wYWNpdHkgPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChwYWludGVyLnJlbmRlclBhc3MgPT09ICd0cmFuc2x1Y2VudCcpIHtcbiAgICAgICAgY29uc3QgZGVwdGhNb2RlID0gbmV3IERlcHRoTW9kZShwYWludGVyLmNvbnRleHQuZ2wuTEVRVUFMLCBEZXB0aE1vZGUuUmVhZFdyaXRlLCBwYWludGVyLmRlcHRoUmFuZ2VGb3IzRCk7XG5cbiAgICAgICAgaWYgKG9wYWNpdHkgPT09IDEgJiYgIWxheWVyLnBhaW50LmdldCgnZmlsbC1leHRydXNpb24tcGF0dGVybicpLmNvbnN0YW50T3IoKDE6IGFueSkpKSB7XG4gICAgICAgICAgICBjb25zdCBjb2xvck1vZGUgPSBwYWludGVyLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKTtcbiAgICAgICAgICAgIGRyYXdFeHRydXNpb25UaWxlcyhwYWludGVyLCBzb3VyY2UsIGxheWVyLCBjb29yZHMsIGRlcHRoTW9kZSwgU3RlbmNpbE1vZGUuZGlzYWJsZWQsIGNvbG9yTW9kZSk7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIERyYXcgdHJhbnNwYXJlbnQgYnVpbGRpbmdzIGluIHR3byBwYXNzZXMgc28gdGhhdCBvbmx5IHRoZSBjbG9zZXN0IHN1cmZhY2UgaXMgZHJhd24uXG4gICAgICAgICAgICAvLyBGaXJzdCBkcmF3IGFsbCB0aGUgZXh0cnVzaW9ucyBpbnRvIG9ubHkgdGhlIGRlcHRoIGJ1ZmZlci4gTm8gY29sb3JzIGFyZSBkcmF3bi5cbiAgICAgICAgICAgIGRyYXdFeHRydXNpb25UaWxlcyhwYWludGVyLCBzb3VyY2UsIGxheWVyLCBjb29yZHMsIGRlcHRoTW9kZSxcbiAgICAgICAgICAgICAgICBTdGVuY2lsTW9kZS5kaXNhYmxlZCxcbiAgICAgICAgICAgICAgICBDb2xvck1vZGUuZGlzYWJsZWQpO1xuXG4gICAgICAgICAgICAvLyBUaGVuIGRyYXcgYWxsIHRoZSBleHRydXNpb25zIGEgc2Vjb25kIHR5cGUsIG9ubHkgY29sb3JpbmcgZnJhZ21lbnRzIGlmIHRoZXkgaGF2ZSB0aGVcbiAgICAgICAgICAgIC8vIHNhbWUgZGVwdGggdmFsdWUgYXMgdGhlIGNsb3Nlc3QgZnJhZ21lbnQgaW4gdGhlIHByZXZpb3VzIHBhc3MuIFVzZSB0aGUgc3RlbmNpbCBidWZmZXJcbiAgICAgICAgICAgIC8vIHRvIHByZXZlbnQgdGhlIHNlY29uZCBkcmF3IGluIGNhc2VzIHdoZXJlIHdlIGhhdmUgY29pbmNpZGVudCBwb2x5Z29ucy5cbiAgICAgICAgICAgIGRyYXdFeHRydXNpb25UaWxlcyhwYWludGVyLCBzb3VyY2UsIGxheWVyLCBjb29yZHMsIGRlcHRoTW9kZSxcbiAgICAgICAgICAgICAgICBwYWludGVyLnN0ZW5jaWxNb2RlRm9yM0QoKSxcbiAgICAgICAgICAgICAgICBwYWludGVyLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYXdFeHRydXNpb25UaWxlcyhwYWludGVyLCBzb3VyY2UsIGxheWVyLCBjb29yZHMsIGRlcHRoTW9kZSwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSBwYWludGVyLmNvbnRleHQ7XG4gICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuICAgIGNvbnN0IHBhdHRlcm5Qcm9wZXJ0eSA9IGxheWVyLnBhaW50LmdldCgnZmlsbC1leHRydXNpb24tcGF0dGVybicpO1xuICAgIGNvbnN0IGltYWdlID0gcGF0dGVyblByb3BlcnR5LmNvbnN0YW50T3IoKDE6IGFueSkpO1xuICAgIGNvbnN0IGNyb3NzZmFkZSA9IGxheWVyLmdldENyb3NzZmFkZVBhcmFtZXRlcnMoKTtcbiAgICBjb25zdCBvcGFjaXR5ID0gbGF5ZXIucGFpbnQuZ2V0KCdmaWxsLWV4dHJ1c2lvbi1vcGFjaXR5Jyk7XG5cbiAgICBmb3IgKGNvbnN0IGNvb3JkIG9mIGNvb3Jkcykge1xuICAgICAgICBjb25zdCB0aWxlID0gc291cmNlLmdldFRpbGUoY29vcmQpO1xuICAgICAgICBjb25zdCBidWNrZXQ6ID9GaWxsRXh0cnVzaW9uQnVja2V0ID0gKHRpbGUuZ2V0QnVja2V0KGxheWVyKTogYW55KTtcbiAgICAgICAgaWYgKCFidWNrZXQpIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnN0IHByb2dyYW1Db25maWd1cmF0aW9uID0gYnVja2V0LnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQobGF5ZXIuaWQpO1xuICAgICAgICBjb25zdCBwcm9ncmFtID0gcGFpbnRlci51c2VQcm9ncmFtKGltYWdlID8gJ2ZpbGxFeHRydXNpb25QYXR0ZXJuJyA6ICdmaWxsRXh0cnVzaW9uJywgcHJvZ3JhbUNvbmZpZ3VyYXRpb24pO1xuXG4gICAgICAgIGlmIChpbWFnZSkge1xuICAgICAgICAgICAgcGFpbnRlci5jb250ZXh0LmFjdGl2ZVRleHR1cmUuc2V0KGdsLlRFWFRVUkUwKTtcbiAgICAgICAgICAgIHRpbGUuaW1hZ2VBdGxhc1RleHR1cmUuYmluZChnbC5MSU5FQVIsIGdsLkNMQU1QX1RPX0VER0UpO1xuICAgICAgICAgICAgcHJvZ3JhbUNvbmZpZ3VyYXRpb24udXBkYXRlUGFpbnRCdWZmZXJzKGNyb3NzZmFkZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29uc3RhbnRQYXR0ZXJuID0gcGF0dGVyblByb3BlcnR5LmNvbnN0YW50T3IobnVsbCk7XG4gICAgICAgIGlmIChjb25zdGFudFBhdHRlcm4gJiYgdGlsZS5pbWFnZUF0bGFzKSB7XG4gICAgICAgICAgICBjb25zdCBhdGxhcyA9IHRpbGUuaW1hZ2VBdGxhcztcbiAgICAgICAgICAgIGNvbnN0IHBvc1RvID0gYXRsYXMucGF0dGVyblBvc2l0aW9uc1tjb25zdGFudFBhdHRlcm4udG8udG9TdHJpbmcoKV07XG4gICAgICAgICAgICBjb25zdCBwb3NGcm9tID0gYXRsYXMucGF0dGVyblBvc2l0aW9uc1tjb25zdGFudFBhdHRlcm4uZnJvbS50b1N0cmluZygpXTtcbiAgICAgICAgICAgIGlmIChwb3NUbyAmJiBwb3NGcm9tKSBwcm9ncmFtQ29uZmlndXJhdGlvbi5zZXRDb25zdGFudFBhdHRlcm5Qb3NpdGlvbnMocG9zVG8sIHBvc0Zyb20pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWF0cml4ID0gcGFpbnRlci50cmFuc2xhdGVQb3NNYXRyaXgoXG4gICAgICAgICAgICBjb29yZC5wb3NNYXRyaXgsXG4gICAgICAgICAgICB0aWxlLFxuICAgICAgICAgICAgbGF5ZXIucGFpbnQuZ2V0KCdmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUnKSxcbiAgICAgICAgICAgIGxheWVyLnBhaW50LmdldCgnZmlsbC1leHRydXNpb24tdHJhbnNsYXRlLWFuY2hvcicpKTtcblxuICAgICAgICBjb25zdCBzaG91bGRVc2VWZXJ0aWNhbEdyYWRpZW50ID0gbGF5ZXIucGFpbnQuZ2V0KCdmaWxsLWV4dHJ1c2lvbi12ZXJ0aWNhbC1ncmFkaWVudCcpO1xuICAgICAgICBjb25zdCB1bmlmb3JtVmFsdWVzID0gaW1hZ2UgP1xuICAgICAgICAgICAgZmlsbEV4dHJ1c2lvblBhdHRlcm5Vbmlmb3JtVmFsdWVzKG1hdHJpeCwgcGFpbnRlciwgc2hvdWxkVXNlVmVydGljYWxHcmFkaWVudCwgb3BhY2l0eSwgY29vcmQsIGNyb3NzZmFkZSwgdGlsZSkgOlxuICAgICAgICAgICAgZmlsbEV4dHJ1c2lvblVuaWZvcm1WYWx1ZXMobWF0cml4LCBwYWludGVyLCBzaG91bGRVc2VWZXJ0aWNhbEdyYWRpZW50LCBvcGFjaXR5KTtcblxuICAgICAgICBwcm9ncmFtLmRyYXcoY29udGV4dCwgY29udGV4dC5nbC5UUklBTkdMRVMsIGRlcHRoTW9kZSwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSwgQ3VsbEZhY2VNb2RlLmJhY2tDQ1csXG4gICAgICAgICAgICB1bmlmb3JtVmFsdWVzLCBsYXllci5pZCwgYnVja2V0LmxheW91dFZlcnRleEJ1ZmZlciwgYnVja2V0LmluZGV4QnVmZmVyLFxuICAgICAgICAgICAgYnVja2V0LnNlZ21lbnRzLCBsYXllci5wYWludCwgcGFpbnRlci50cmFuc2Zvcm0uem9vbSxcbiAgICAgICAgICAgIHByb2dyYW1Db25maWd1cmF0aW9uKTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuL3RleHR1cmUnO1xuaW1wb3J0IFN0ZW5jaWxNb2RlIGZyb20gJy4uL2dsL3N0ZW5jaWxfbW9kZSc7XG5pbXBvcnQgRGVwdGhNb2RlIGZyb20gJy4uL2dsL2RlcHRoX21vZGUnO1xuaW1wb3J0IEN1bGxGYWNlTW9kZSBmcm9tICcuLi9nbC9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQge1xuICAgIGhpbGxzaGFkZVVuaWZvcm1WYWx1ZXMsXG4gICAgaGlsbHNoYWRlVW5pZm9ybVByZXBhcmVWYWx1ZXNcbn0gZnJvbSAnLi9wcm9ncmFtL2hpbGxzaGFkZV9wcm9ncmFtJztcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUgU291cmNlQ2FjaGUgZnJvbSAnLi4vc291cmNlL3NvdXJjZV9jYWNoZSc7XG5pbXBvcnQgdHlwZSBIaWxsc2hhZGVTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyL2hpbGxzaGFkZV9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi4vc291cmNlL3RpbGVfaWQnO1xuXG5leHBvcnQgZGVmYXVsdCBkcmF3SGlsbHNoYWRlO1xuXG5mdW5jdGlvbiBkcmF3SGlsbHNoYWRlKHBhaW50ZXI6IFBhaW50ZXIsIHNvdXJjZUNhY2hlOiBTb3VyY2VDYWNoZSwgbGF5ZXI6IEhpbGxzaGFkZVN0eWxlTGF5ZXIsIHRpbGVJRHM6IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+KSB7XG4gICAgaWYgKHBhaW50ZXIucmVuZGVyUGFzcyAhPT0gJ29mZnNjcmVlbicgJiYgcGFpbnRlci5yZW5kZXJQYXNzICE9PSAndHJhbnNsdWNlbnQnKSByZXR1cm47XG5cbiAgICBjb25zdCBjb250ZXh0ID0gcGFpbnRlci5jb250ZXh0O1xuICAgIGNvbnN0IHNvdXJjZU1heFpvb20gPSBzb3VyY2VDYWNoZS5nZXRTb3VyY2UoKS5tYXh6b29tO1xuXG4gICAgY29uc3QgZGVwdGhNb2RlID0gcGFpbnRlci5kZXB0aE1vZGVGb3JTdWJsYXllcigwLCBEZXB0aE1vZGUuUmVhZE9ubHkpO1xuICAgIGNvbnN0IGNvbG9yTW9kZSA9IHBhaW50ZXIuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpO1xuXG4gICAgY29uc3QgW3N0ZW5jaWxNb2RlcywgY29vcmRzXSA9IHBhaW50ZXIucmVuZGVyUGFzcyA9PT0gJ3RyYW5zbHVjZW50JyA/XG4gICAgICAgIHBhaW50ZXIuc3RlbmNpbENvbmZpZ0Zvck92ZXJsYXAodGlsZUlEcykgOiBbe30sIHRpbGVJRHNdO1xuXG4gICAgZm9yIChjb25zdCBjb29yZCBvZiBjb29yZHMpIHtcbiAgICAgICAgY29uc3QgdGlsZSA9IHNvdXJjZUNhY2hlLmdldFRpbGUoY29vcmQpO1xuICAgICAgICBpZiAodGlsZS5uZWVkc0hpbGxzaGFkZVByZXBhcmUgJiYgcGFpbnRlci5yZW5kZXJQYXNzID09PSAnb2Zmc2NyZWVuJykge1xuICAgICAgICAgICAgcHJlcGFyZUhpbGxzaGFkZShwYWludGVyLCB0aWxlLCBsYXllciwgc291cmNlTWF4Wm9vbSwgZGVwdGhNb2RlLCBTdGVuY2lsTW9kZS5kaXNhYmxlZCwgY29sb3JNb2RlKTtcbiAgICAgICAgfSBlbHNlIGlmIChwYWludGVyLnJlbmRlclBhc3MgPT09ICd0cmFuc2x1Y2VudCcpIHtcbiAgICAgICAgICAgIHJlbmRlckhpbGxzaGFkZShwYWludGVyLCB0aWxlLCBsYXllciwgZGVwdGhNb2RlLCBzdGVuY2lsTW9kZXNbY29vcmQub3ZlcnNjYWxlZFpdLCBjb2xvck1vZGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29udGV4dC52aWV3cG9ydC5zZXQoWzAsIDAsIHBhaW50ZXIud2lkdGgsIHBhaW50ZXIuaGVpZ2h0XSk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckhpbGxzaGFkZShwYWludGVyLCB0aWxlLCBsYXllciwgZGVwdGhNb2RlLCBzdGVuY2lsTW9kZSwgY29sb3JNb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgY29uc3QgZmJvID0gdGlsZS5mYm87XG4gICAgaWYgKCFmYm8pIHJldHVybjtcblxuICAgIGNvbnN0IHByb2dyYW0gPSBwYWludGVyLnVzZVByb2dyYW0oJ2hpbGxzaGFkZScpO1xuXG4gICAgY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldChnbC5URVhUVVJFMCk7XG4gICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgZmJvLmNvbG9yQXR0YWNobWVudC5nZXQoKSk7XG5cbiAgICBjb25zdCB1bmlmb3JtVmFsdWVzID0gaGlsbHNoYWRlVW5pZm9ybVZhbHVlcyhwYWludGVyLCB0aWxlLCBsYXllcik7XG5cbiAgICBwcm9ncmFtLmRyYXcoY29udGV4dCwgZ2wuVFJJQU5HTEVTLCBkZXB0aE1vZGUsIHN0ZW5jaWxNb2RlLCBjb2xvck1vZGUsIEN1bGxGYWNlTW9kZS5kaXNhYmxlZCxcbiAgICAgICAgdW5pZm9ybVZhbHVlcywgbGF5ZXIuaWQsIHBhaW50ZXIucmFzdGVyQm91bmRzQnVmZmVyLFxuICAgICAgICBwYWludGVyLnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLCBwYWludGVyLnJhc3RlckJvdW5kc1NlZ21lbnRzKTtcbn1cblxuLy8gaGlsbHNoYWRlIHJlbmRlcmluZyBpcyBkb25lIGluIHR3byBzdGVwcy4gdGhlIHByZXBhcmUgc3RlcCBmaXJzdCBjYWxjdWxhdGVzIHRoZSBzbG9wZSBvZiB0aGUgdGVycmFpbiBpbiB0aGUgeCBhbmQgeVxuLy8gZGlyZWN0aW9ucyBmb3IgZWFjaCBwaXhlbCwgYW5kIHNhdmVzIHRob3NlIHZhbHVlcyB0byBhIGZyYW1lYnVmZmVyIHRleHR1cmUgaW4gdGhlIHIgYW5kIGcgY2hhbm5lbHMuXG5mdW5jdGlvbiBwcmVwYXJlSGlsbHNoYWRlKHBhaW50ZXIsIHRpbGUsIGxheWVyLCBzb3VyY2VNYXhab29tLCBkZXB0aE1vZGUsIHN0ZW5jaWxNb2RlLCBjb2xvck1vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gcGFpbnRlci5jb250ZXh0O1xuICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcbiAgICBjb25zdCBkZW0gPSB0aWxlLmRlbTtcbiAgICBpZiAoZGVtICYmIGRlbS5kYXRhKSB7XG4gICAgICAgIGNvbnN0IHRpbGVTaXplID0gZGVtLmRpbTtcbiAgICAgICAgY29uc3QgdGV4dHVyZVN0cmlkZSA9IGRlbS5zdHJpZGU7XG5cbiAgICAgICAgY29uc3QgcGl4ZWxEYXRhID0gZGVtLmdldFBpeGVscygpO1xuICAgICAgICBjb250ZXh0LmFjdGl2ZVRleHR1cmUuc2V0KGdsLlRFWFRVUkUxKTtcblxuICAgICAgICBjb250ZXh0LnBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhLnNldChmYWxzZSk7XG4gICAgICAgIHRpbGUuZGVtVGV4dHVyZSA9IHRpbGUuZGVtVGV4dHVyZSB8fCBwYWludGVyLmdldFRpbGVUZXh0dXJlKHRleHR1cmVTdHJpZGUpO1xuICAgICAgICBpZiAodGlsZS5kZW1UZXh0dXJlKSB7XG4gICAgICAgICAgICBjb25zdCBkZW1UZXh0dXJlID0gdGlsZS5kZW1UZXh0dXJlO1xuICAgICAgICAgICAgZGVtVGV4dHVyZS51cGRhdGUocGl4ZWxEYXRhLCB7cHJlbXVsdGlwbHk6IGZhbHNlfSk7XG4gICAgICAgICAgICBkZW1UZXh0dXJlLmJpbmQoZ2wuTkVBUkVTVCwgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aWxlLmRlbVRleHR1cmUgPSBuZXcgVGV4dHVyZShjb250ZXh0LCBwaXhlbERhdGEsIGdsLlJHQkEsIHtwcmVtdWx0aXBseTogZmFsc2V9KTtcbiAgICAgICAgICAgIHRpbGUuZGVtVGV4dHVyZS5iaW5kKGdsLk5FQVJFU1QsIGdsLkNMQU1QX1RPX0VER0UpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldChnbC5URVhUVVJFMCk7XG5cbiAgICAgICAgbGV0IGZibyA9IHRpbGUuZmJvO1xuXG4gICAgICAgIGlmICghZmJvKSB7XG4gICAgICAgICAgICBjb25zdCByZW5kZXJUZXh0dXJlID0gbmV3IFRleHR1cmUoY29udGV4dCwge3dpZHRoOiB0aWxlU2l6ZSwgaGVpZ2h0OiB0aWxlU2l6ZSwgZGF0YTogbnVsbH0sIGdsLlJHQkEpO1xuICAgICAgICAgICAgcmVuZGVyVGV4dHVyZS5iaW5kKGdsLkxJTkVBUiwgZ2wuQ0xBTVBfVE9fRURHRSk7XG5cbiAgICAgICAgICAgIGZibyA9IHRpbGUuZmJvID0gY29udGV4dC5jcmVhdGVGcmFtZWJ1ZmZlcih0aWxlU2l6ZSwgdGlsZVNpemUsIHRydWUpO1xuICAgICAgICAgICAgZmJvLmNvbG9yQXR0YWNobWVudC5zZXQocmVuZGVyVGV4dHVyZS50ZXh0dXJlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQuYmluZEZyYW1lYnVmZmVyLnNldChmYm8uZnJhbWVidWZmZXIpO1xuICAgICAgICBjb250ZXh0LnZpZXdwb3J0LnNldChbMCwgMCwgdGlsZVNpemUsIHRpbGVTaXplXSk7XG5cbiAgICAgICAgcGFpbnRlci51c2VQcm9ncmFtKCdoaWxsc2hhZGVQcmVwYXJlJykuZHJhdyhjb250ZXh0LCBnbC5UUklBTkdMRVMsXG4gICAgICAgICAgICBkZXB0aE1vZGUsIHN0ZW5jaWxNb2RlLCBjb2xvck1vZGUsIEN1bGxGYWNlTW9kZS5kaXNhYmxlZCxcbiAgICAgICAgICAgIGhpbGxzaGFkZVVuaWZvcm1QcmVwYXJlVmFsdWVzKHRpbGUudGlsZUlELCBkZW0sIHNvdXJjZU1heFpvb20pLFxuICAgICAgICAgICAgbGF5ZXIuaWQsIHBhaW50ZXIucmFzdGVyQm91bmRzQnVmZmVyLFxuICAgICAgICAgICAgcGFpbnRlci5xdWFkVHJpYW5nbGVJbmRleEJ1ZmZlciwgcGFpbnRlci5yYXN0ZXJCb3VuZHNTZWdtZW50cyk7XG5cbiAgICAgICAgdGlsZS5uZWVkc0hpbGxzaGFkZVByZXBhcmUgPSBmYWxzZTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2NsYW1wfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuXG5pbXBvcnQgSW1hZ2VTb3VyY2UgZnJvbSAnLi4vc291cmNlL2ltYWdlX3NvdXJjZSc7XG5pbXBvcnQgYnJvd3NlciBmcm9tICcuLi91dGlsL2Jyb3dzZXInO1xuaW1wb3J0IFN0ZW5jaWxNb2RlIGZyb20gJy4uL2dsL3N0ZW5jaWxfbW9kZSc7XG5pbXBvcnQgRGVwdGhNb2RlIGZyb20gJy4uL2dsL2RlcHRoX21vZGUnO1xuaW1wb3J0IEN1bGxGYWNlTW9kZSBmcm9tICcuLi9nbC9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQge3Jhc3RlclVuaWZvcm1WYWx1ZXN9IGZyb20gJy4vcHJvZ3JhbS9yYXN0ZXJfcHJvZ3JhbSc7XG5cbmltcG9ydCB0eXBlIFBhaW50ZXIgZnJvbSAnLi9wYWludGVyJztcbmltcG9ydCB0eXBlIFNvdXJjZUNhY2hlIGZyb20gJy4uL3NvdXJjZS9zb3VyY2VfY2FjaGUnO1xuaW1wb3J0IHR5cGUgUmFzdGVyU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllci9yYXN0ZXJfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uL3NvdXJjZS90aWxlX2lkJztcblxuZXhwb3J0IGRlZmF1bHQgZHJhd1Jhc3RlcjtcblxuZnVuY3Rpb24gZHJhd1Jhc3RlcihwYWludGVyOiBQYWludGVyLCBzb3VyY2VDYWNoZTogU291cmNlQ2FjaGUsIGxheWVyOiBSYXN0ZXJTdHlsZUxheWVyLCB0aWxlSURzOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPikge1xuICAgIGlmIChwYWludGVyLnJlbmRlclBhc3MgIT09ICd0cmFuc2x1Y2VudCcpIHJldHVybjtcbiAgICBpZiAobGF5ZXIucGFpbnQuZ2V0KCdyYXN0ZXItb3BhY2l0eScpID09PSAwKSByZXR1cm47XG4gICAgaWYgKCF0aWxlSURzLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgY29uc3Qgc291cmNlID0gc291cmNlQ2FjaGUuZ2V0U291cmNlKCk7XG4gICAgY29uc3QgcHJvZ3JhbSA9IHBhaW50ZXIudXNlUHJvZ3JhbSgncmFzdGVyJyk7XG5cbiAgICBjb25zdCBjb2xvck1vZGUgPSBwYWludGVyLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKTtcblxuICAgIGNvbnN0IFtzdGVuY2lsTW9kZXMsIGNvb3Jkc10gPSBzb3VyY2UgaW5zdGFuY2VvZiBJbWFnZVNvdXJjZSA/IFt7fSwgdGlsZUlEc10gOlxuICAgICAgICBwYWludGVyLnN0ZW5jaWxDb25maWdGb3JPdmVybGFwKHRpbGVJRHMpO1xuXG4gICAgY29uc3QgbWluVGlsZVogPSBjb29yZHNbY29vcmRzLmxlbmd0aCAtIDFdLm92ZXJzY2FsZWRaO1xuXG4gICAgY29uc3QgYWxpZ24gPSAhcGFpbnRlci5vcHRpb25zLm1vdmluZztcbiAgICBmb3IgKGNvbnN0IGNvb3JkIG9mIGNvb3Jkcykge1xuICAgICAgICAvLyBTZXQgdGhlIGxvd2VyIHpvb20gbGV2ZWwgdG8gc3VibGF5ZXIgMCwgYW5kIGhpZ2hlciB6b29tIGxldmVscyB0byBoaWdoZXIgc3VibGF5ZXJzXG4gICAgICAgIC8vIFVzZSBnbC5MRVNTIHRvIHByZXZlbnQgZG91YmxlIGRyYXdpbmcgaW4gYXJlYXMgd2hlcmUgdGlsZXMgb3ZlcmxhcC5cbiAgICAgICAgY29uc3QgZGVwdGhNb2RlID0gcGFpbnRlci5kZXB0aE1vZGVGb3JTdWJsYXllcihjb29yZC5vdmVyc2NhbGVkWiAtIG1pblRpbGVaLFxuICAgICAgICAgICAgbGF5ZXIucGFpbnQuZ2V0KCdyYXN0ZXItb3BhY2l0eScpID09PSAxID8gRGVwdGhNb2RlLlJlYWRXcml0ZSA6IERlcHRoTW9kZS5SZWFkT25seSwgZ2wuTEVTUyk7XG5cbiAgICAgICAgY29uc3QgdGlsZSA9IHNvdXJjZUNhY2hlLmdldFRpbGUoY29vcmQpO1xuICAgICAgICBjb25zdCBwb3NNYXRyaXggPSBwYWludGVyLnRyYW5zZm9ybS5jYWxjdWxhdGVQb3NNYXRyaXgoY29vcmQudG9VbndyYXBwZWQoKSwgYWxpZ24pO1xuXG4gICAgICAgIHRpbGUucmVnaXN0ZXJGYWRlRHVyYXRpb24obGF5ZXIucGFpbnQuZ2V0KCdyYXN0ZXItZmFkZS1kdXJhdGlvbicpKTtcblxuICAgICAgICBjb25zdCBwYXJlbnRUaWxlID0gc291cmNlQ2FjaGUuZmluZExvYWRlZFBhcmVudChjb29yZCwgMCksXG4gICAgICAgICAgICBmYWRlID0gZ2V0RmFkZVZhbHVlcyh0aWxlLCBwYXJlbnRUaWxlLCBzb3VyY2VDYWNoZSwgbGF5ZXIsIHBhaW50ZXIudHJhbnNmb3JtKTtcblxuICAgICAgICBsZXQgcGFyZW50U2NhbGVCeSwgcGFyZW50VEw7XG5cbiAgICAgICAgY29uc3QgdGV4dHVyZUZpbHRlciA9IGxheWVyLnBhaW50LmdldCgncmFzdGVyLXJlc2FtcGxpbmcnKSA9PT0gJ25lYXJlc3QnID8gIGdsLk5FQVJFU1QgOiBnbC5MSU5FQVI7XG5cbiAgICAgICAgY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldChnbC5URVhUVVJFMCk7XG4gICAgICAgIHRpbGUudGV4dHVyZS5iaW5kKHRleHR1cmVGaWx0ZXIsIGdsLkNMQU1QX1RPX0VER0UsIGdsLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCk7XG5cbiAgICAgICAgY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldChnbC5URVhUVVJFMSk7XG5cbiAgICAgICAgaWYgKHBhcmVudFRpbGUpIHtcbiAgICAgICAgICAgIHBhcmVudFRpbGUudGV4dHVyZS5iaW5kKHRleHR1cmVGaWx0ZXIsIGdsLkNMQU1QX1RPX0VER0UsIGdsLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCk7XG4gICAgICAgICAgICBwYXJlbnRTY2FsZUJ5ID0gTWF0aC5wb3coMiwgcGFyZW50VGlsZS50aWxlSUQub3ZlcnNjYWxlZFogLSB0aWxlLnRpbGVJRC5vdmVyc2NhbGVkWik7XG4gICAgICAgICAgICBwYXJlbnRUTCA9IFt0aWxlLnRpbGVJRC5jYW5vbmljYWwueCAqIHBhcmVudFNjYWxlQnkgJSAxLCB0aWxlLnRpbGVJRC5jYW5vbmljYWwueSAqIHBhcmVudFNjYWxlQnkgJSAxXTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGlsZS50ZXh0dXJlLmJpbmQodGV4dHVyZUZpbHRlciwgZ2wuQ0xBTVBfVE9fRURHRSwgZ2wuTElORUFSX01JUE1BUF9ORUFSRVNUKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVuaWZvcm1WYWx1ZXMgPSByYXN0ZXJVbmlmb3JtVmFsdWVzKHBvc01hdHJpeCwgcGFyZW50VEwgfHwgWzAsIDBdLCBwYXJlbnRTY2FsZUJ5IHx8IDEsIGZhZGUsIGxheWVyKTtcblxuICAgICAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgSW1hZ2VTb3VyY2UpIHtcbiAgICAgICAgICAgIHByb2dyYW0uZHJhdyhjb250ZXh0LCBnbC5UUklBTkdMRVMsIGRlcHRoTW9kZSwgU3RlbmNpbE1vZGUuZGlzYWJsZWQsIGNvbG9yTW9kZSwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLFxuICAgICAgICAgICAgICAgIHVuaWZvcm1WYWx1ZXMsIGxheWVyLmlkLCBzb3VyY2UuYm91bmRzQnVmZmVyLFxuICAgICAgICAgICAgICAgIHBhaW50ZXIucXVhZFRyaWFuZ2xlSW5kZXhCdWZmZXIsIHNvdXJjZS5ib3VuZHNTZWdtZW50cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm9ncmFtLmRyYXcoY29udGV4dCwgZ2wuVFJJQU5HTEVTLCBkZXB0aE1vZGUsIHN0ZW5jaWxNb2Rlc1tjb29yZC5vdmVyc2NhbGVkWl0sIGNvbG9yTW9kZSwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLFxuICAgICAgICAgICAgICAgIHVuaWZvcm1WYWx1ZXMsIGxheWVyLmlkLCBwYWludGVyLnJhc3RlckJvdW5kc0J1ZmZlcixcbiAgICAgICAgICAgICAgICBwYWludGVyLnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLCBwYWludGVyLnJhc3RlckJvdW5kc1NlZ21lbnRzKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0RmFkZVZhbHVlcyh0aWxlLCBwYXJlbnRUaWxlLCBzb3VyY2VDYWNoZSwgbGF5ZXIsIHRyYW5zZm9ybSkge1xuICAgIGNvbnN0IGZhZGVEdXJhdGlvbiA9IGxheWVyLnBhaW50LmdldCgncmFzdGVyLWZhZGUtZHVyYXRpb24nKTtcblxuICAgIGlmIChmYWRlRHVyYXRpb24gPiAwKSB7XG4gICAgICAgIGNvbnN0IG5vdyA9IGJyb3dzZXIubm93KCk7XG4gICAgICAgIGNvbnN0IHNpbmNlVGlsZSA9IChub3cgLSB0aWxlLnRpbWVBZGRlZCkgLyBmYWRlRHVyYXRpb247XG4gICAgICAgIGNvbnN0IHNpbmNlUGFyZW50ID0gcGFyZW50VGlsZSA/IChub3cgLSBwYXJlbnRUaWxlLnRpbWVBZGRlZCkgLyBmYWRlRHVyYXRpb24gOiAtMTtcblxuICAgICAgICBjb25zdCBzb3VyY2UgPSBzb3VyY2VDYWNoZS5nZXRTb3VyY2UoKTtcbiAgICAgICAgY29uc3QgaWRlYWxaID0gdHJhbnNmb3JtLmNvdmVyaW5nWm9vbUxldmVsKHtcbiAgICAgICAgICAgIHRpbGVTaXplOiBzb3VyY2UudGlsZVNpemUsXG4gICAgICAgICAgICByb3VuZFpvb206IHNvdXJjZS5yb3VuZFpvb21cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gaWYgbm8gcGFyZW50IG9yIHBhcmVudCBpcyBvbGRlciwgZmFkZSBpbjsgaWYgcGFyZW50IGlzIHlvdW5nZXIsIGZhZGUgb3V0XG4gICAgICAgIGNvbnN0IGZhZGVJbiA9ICFwYXJlbnRUaWxlIHx8IE1hdGguYWJzKHBhcmVudFRpbGUudGlsZUlELm92ZXJzY2FsZWRaIC0gaWRlYWxaKSA+IE1hdGguYWJzKHRpbGUudGlsZUlELm92ZXJzY2FsZWRaIC0gaWRlYWxaKTtcblxuICAgICAgICBjb25zdCBjaGlsZE9wYWNpdHkgPSAoZmFkZUluICYmIHRpbGUucmVmcmVzaGVkVXBvbkV4cGlyYXRpb24pID8gMSA6IGNsYW1wKGZhZGVJbiA/IHNpbmNlVGlsZSA6IDEgLSBzaW5jZVBhcmVudCwgMCwgMSk7XG5cbiAgICAgICAgLy8gd2UgZG9uJ3QgY3Jvc3NmYWRlIHRpbGVzIHRoYXQgd2VyZSBqdXN0IHJlZnJlc2hlZCB1cG9uIGV4cGlyaW5nOlxuICAgICAgICAvLyBvbmNlIHRoZXkncmUgb2xkIGVub3VnaCB0byBwYXNzIHRoZSBjcm9zc2ZhZGluZyB0aHJlc2hvbGRcbiAgICAgICAgLy8gKGZhZGVEdXJhdGlvbiksIHVuc2V0IHRoZSBgcmVmcmVzaGVkVXBvbkV4cGlyYXRpb25gIGZsYWcgc28gd2UgZG9uJ3RcbiAgICAgICAgLy8gaW5jb3JyZWN0bHkgZmFpbCB0byBjcm9zc2ZhZGUgdGhlbSB3aGVuIHpvb21pbmdcbiAgICAgICAgaWYgKHRpbGUucmVmcmVzaGVkVXBvbkV4cGlyYXRpb24gJiYgc2luY2VUaWxlID49IDEpIHRpbGUucmVmcmVzaGVkVXBvbkV4cGlyYXRpb24gPSBmYWxzZTtcblxuICAgICAgICBpZiAocGFyZW50VGlsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAxLFxuICAgICAgICAgICAgICAgIG1peDogMSAtIGNoaWxkT3BhY2l0eVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgb3BhY2l0eTogY2hpbGRPcGFjaXR5LFxuICAgICAgICAgICAgICAgIG1peDogMFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBvcGFjaXR5OiAxLFxuICAgICAgICAgICAgbWl4OiAwXG4gICAgICAgIH07XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFN0ZW5jaWxNb2RlIGZyb20gJy4uL2dsL3N0ZW5jaWxfbW9kZSc7XG5pbXBvcnQgRGVwdGhNb2RlIGZyb20gJy4uL2dsL2RlcHRoX21vZGUnO1xuaW1wb3J0IEN1bGxGYWNlTW9kZSBmcm9tICcuLi9nbC9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQge1xuICAgIGJhY2tncm91bmRVbmlmb3JtVmFsdWVzLFxuICAgIGJhY2tncm91bmRQYXR0ZXJuVW5pZm9ybVZhbHVlc1xufSBmcm9tICcuL3Byb2dyYW0vYmFja2dyb3VuZF9wcm9ncmFtJztcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUgU291cmNlQ2FjaGUgZnJvbSAnLi4vc291cmNlL3NvdXJjZV9jYWNoZSc7XG5pbXBvcnQgdHlwZSBCYWNrZ3JvdW5kU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllci9iYWNrZ3JvdW5kX3N0eWxlX2xheWVyJztcblxuZXhwb3J0IGRlZmF1bHQgZHJhd0JhY2tncm91bmQ7XG5cbmZ1bmN0aW9uIGRyYXdCYWNrZ3JvdW5kKHBhaW50ZXI6IFBhaW50ZXIsIHNvdXJjZUNhY2hlOiBTb3VyY2VDYWNoZSwgbGF5ZXI6IEJhY2tncm91bmRTdHlsZUxheWVyKSB7XG4gICAgY29uc3QgY29sb3IgPSBsYXllci5wYWludC5nZXQoJ2JhY2tncm91bmQtY29sb3InKTtcbiAgICBjb25zdCBvcGFjaXR5ID0gbGF5ZXIucGFpbnQuZ2V0KCdiYWNrZ3JvdW5kLW9wYWNpdHknKTtcblxuICAgIGlmIChvcGFjaXR5ID09PSAwKSByZXR1cm47XG5cbiAgICBjb25zdCBjb250ZXh0ID0gcGFpbnRlci5jb250ZXh0O1xuICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBwYWludGVyLnRyYW5zZm9ybTtcbiAgICBjb25zdCB0aWxlU2l6ZSA9IHRyYW5zZm9ybS50aWxlU2l6ZTtcbiAgICBjb25zdCBpbWFnZSA9IGxheWVyLnBhaW50LmdldCgnYmFja2dyb3VuZC1wYXR0ZXJuJyk7XG4gICAgaWYgKHBhaW50ZXIuaXNQYXR0ZXJuTWlzc2luZyhpbWFnZSkpIHJldHVybjtcblxuICAgIGNvbnN0IHBhc3MgPSAoIWltYWdlICYmIGNvbG9yLmEgPT09IDEgJiYgb3BhY2l0eSA9PT0gMSAmJiBwYWludGVyLm9wYXF1ZVBhc3NFbmFibGVkRm9yTGF5ZXIoKSkgPyAnb3BhcXVlJyA6ICd0cmFuc2x1Y2VudCc7XG4gICAgaWYgKHBhaW50ZXIucmVuZGVyUGFzcyAhPT0gcGFzcykgcmV0dXJuO1xuXG4gICAgY29uc3Qgc3RlbmNpbE1vZGUgPSBTdGVuY2lsTW9kZS5kaXNhYmxlZDtcbiAgICBjb25zdCBkZXB0aE1vZGUgPSBwYWludGVyLmRlcHRoTW9kZUZvclN1YmxheWVyKDAsIHBhc3MgPT09ICdvcGFxdWUnID8gRGVwdGhNb2RlLlJlYWRXcml0ZSA6IERlcHRoTW9kZS5SZWFkT25seSk7XG4gICAgY29uc3QgY29sb3JNb2RlID0gcGFpbnRlci5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCk7XG5cbiAgICBjb25zdCBwcm9ncmFtID0gcGFpbnRlci51c2VQcm9ncmFtKGltYWdlID8gJ2JhY2tncm91bmRQYXR0ZXJuJyA6ICdiYWNrZ3JvdW5kJyk7XG5cbiAgICBjb25zdCB0aWxlSURzID0gdHJhbnNmb3JtLmNvdmVyaW5nVGlsZXMoe3RpbGVTaXplfSk7XG5cbiAgICBpZiAoaW1hZ2UpIHtcbiAgICAgICAgY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldChnbC5URVhUVVJFMCk7XG4gICAgICAgIHBhaW50ZXIuaW1hZ2VNYW5hZ2VyLmJpbmQocGFpbnRlci5jb250ZXh0KTtcbiAgICB9XG5cbiAgICBjb25zdCBjcm9zc2ZhZGUgPSBsYXllci5nZXRDcm9zc2ZhZGVQYXJhbWV0ZXJzKCk7XG4gICAgZm9yIChjb25zdCB0aWxlSUQgb2YgdGlsZUlEcykge1xuICAgICAgICBjb25zdCBtYXRyaXggPSBwYWludGVyLnRyYW5zZm9ybS5jYWxjdWxhdGVQb3NNYXRyaXgodGlsZUlELnRvVW53cmFwcGVkKCkpO1xuICAgICAgICBjb25zdCB1bmlmb3JtVmFsdWVzID0gaW1hZ2UgP1xuICAgICAgICAgICAgYmFja2dyb3VuZFBhdHRlcm5Vbmlmb3JtVmFsdWVzKG1hdHJpeCwgb3BhY2l0eSwgcGFpbnRlciwgaW1hZ2UsIHt0aWxlSUQsIHRpbGVTaXplfSwgY3Jvc3NmYWRlKSA6XG4gICAgICAgICAgICBiYWNrZ3JvdW5kVW5pZm9ybVZhbHVlcyhtYXRyaXgsIG9wYWNpdHksIGNvbG9yKTtcblxuICAgICAgICBwcm9ncmFtLmRyYXcoY29udGV4dCwgZ2wuVFJJQU5HTEVTLCBkZXB0aE1vZGUsIHN0ZW5jaWxNb2RlLCBjb2xvck1vZGUsIEN1bGxGYWNlTW9kZS5kaXNhYmxlZCxcbiAgICAgICAgICAgIHVuaWZvcm1WYWx1ZXMsIGxheWVyLmlkLCBwYWludGVyLnRpbGVFeHRlbnRCdWZmZXIsXG4gICAgICAgICAgICBwYWludGVyLnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLCBwYWludGVyLnRpbGVFeHRlbnRTZWdtZW50cyk7XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IERlcHRoTW9kZSBmcm9tICcuLi9nbC9kZXB0aF9tb2RlJztcbmltcG9ydCBTdGVuY2lsTW9kZSBmcm9tICcuLi9nbC9zdGVuY2lsX21vZGUnO1xuaW1wb3J0IEN1bGxGYWNlTW9kZSBmcm9tICcuLi9nbC9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQge2RlYnVnVW5pZm9ybVZhbHVlc30gZnJvbSAnLi9wcm9ncmFtL2RlYnVnX3Byb2dyYW0nO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5pbXBvcnQgQ29sb3JNb2RlIGZyb20gJy4uL2dsL2NvbG9yX21vZGUnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vdXRpbC9icm93c2VyJztcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUgU291cmNlQ2FjaGUgZnJvbSAnLi4vc291cmNlL3NvdXJjZV9jYWNoZSc7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi4vc291cmNlL3RpbGVfaWQnO1xuXG5leHBvcnQgZGVmYXVsdCBkcmF3RGVidWc7XG5cbmNvbnN0IHRvcENvbG9yID0gbmV3IENvbG9yKDEsIDAsIDAsIDEpO1xuY29uc3QgYnRtQ29sb3IgPSBuZXcgQ29sb3IoMCwgMSwgMCwgMSk7XG5jb25zdCBsZWZ0Q29sb3IgPSBuZXcgQ29sb3IoMCwgMCwgMSwgMSk7XG5jb25zdCByaWdodENvbG9yID0gbmV3IENvbG9yKDEsIDAsIDEsIDEpO1xuY29uc3QgY2VudGVyQ29sb3IgPSBuZXcgQ29sb3IoMCwgMSwgMSwgMSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBkcmF3RGVidWdQYWRkaW5nKHBhaW50ZXI6IFBhaW50ZXIpIHtcbiAgICBjb25zdCBwYWRkaW5nID0gcGFpbnRlci50cmFuc2Zvcm0ucGFkZGluZztcbiAgICBjb25zdCBsaW5lV2lkdGggPSAzO1xuICAgIC8vIFRvcFxuICAgIGRyYXdIb3Jpem9udGFsTGluZShwYWludGVyLCBwYWludGVyLnRyYW5zZm9ybS5oZWlnaHQgLSAocGFkZGluZy50b3AgfHwgMCksIGxpbmVXaWR0aCwgdG9wQ29sb3IpO1xuICAgIC8vIEJvdHRvbVxuICAgIGRyYXdIb3Jpem9udGFsTGluZShwYWludGVyLCBwYWRkaW5nLmJvdHRvbSB8fCAwLCBsaW5lV2lkdGgsIGJ0bUNvbG9yKTtcbiAgICAvLyBMZWZ0XG4gICAgZHJhd1ZlcnRpY2FsTGluZShwYWludGVyLCBwYWRkaW5nLmxlZnQgfHwgMCwgbGluZVdpZHRoLCBsZWZ0Q29sb3IpO1xuICAgIC8vIFJpZ2h0XG4gICAgZHJhd1ZlcnRpY2FsTGluZShwYWludGVyLCBwYWludGVyLnRyYW5zZm9ybS53aWR0aCAtIChwYWRkaW5nLnJpZ2h0IHx8IDApLCBsaW5lV2lkdGgsIHJpZ2h0Q29sb3IpO1xuICAgIC8vIENlbnRlclxuICAgIGNvbnN0IGNlbnRlciA9IHBhaW50ZXIudHJhbnNmb3JtLmNlbnRlclBvaW50O1xuICAgIGRyYXdDcm9zc2hhaXIocGFpbnRlciwgY2VudGVyLngsIHBhaW50ZXIudHJhbnNmb3JtLmhlaWdodCAtIGNlbnRlci55LCBjZW50ZXJDb2xvcik7XG59XG5cbmZ1bmN0aW9uIGRyYXdDcm9zc2hhaXIocGFpbnRlcjogUGFpbnRlciwgeDogbnVtYmVyLCB5OiBudW1iZXIsIGNvbG9yOiBDb2xvcikge1xuICAgIGNvbnN0IHNpemUgPSAyMDtcbiAgICBjb25zdCBsaW5lV2lkdGggPSAyO1xuICAgIC8vVmVydGljYWwgbGluZVxuICAgIGRyYXdEZWJ1Z1NTUmVjdChwYWludGVyLCB4IC0gbGluZVdpZHRoIC8gMiwgeSAtIHNpemUgLyAyLCBsaW5lV2lkdGgsIHNpemUsIGNvbG9yKTtcbiAgICAvL0hvcml6b250YWwgbGluZVxuICAgIGRyYXdEZWJ1Z1NTUmVjdChwYWludGVyLCB4IC0gc2l6ZSAvIDIsIHkgLSBsaW5lV2lkdGggLyAyLCBzaXplLCBsaW5lV2lkdGgsIGNvbG9yKTtcbn1cblxuZnVuY3Rpb24gZHJhd0hvcml6b250YWxMaW5lKHBhaW50ZXI6IFBhaW50ZXIsIHk6IG51bWJlciwgbGluZVdpZHRoOiBudW1iZXIsIGNvbG9yOiBDb2xvcikge1xuICAgIGRyYXdEZWJ1Z1NTUmVjdChwYWludGVyLCAwLCB5ICArIGxpbmVXaWR0aCAvIDIsIHBhaW50ZXIudHJhbnNmb3JtLndpZHRoLCAgbGluZVdpZHRoLCBjb2xvcik7XG59XG5cbmZ1bmN0aW9uIGRyYXdWZXJ0aWNhbExpbmUocGFpbnRlcjogUGFpbnRlciwgeDogbnVtYmVyLCBsaW5lV2lkdGg6IG51bWJlciwgY29sb3I6IENvbG9yKSB7XG4gICAgZHJhd0RlYnVnU1NSZWN0KHBhaW50ZXIsIHggLSBsaW5lV2lkdGggLyAyLCAwLCBsaW5lV2lkdGgsICBwYWludGVyLnRyYW5zZm9ybS5oZWlnaHQsIGNvbG9yKTtcbn1cblxuZnVuY3Rpb24gZHJhd0RlYnVnU1NSZWN0KHBhaW50ZXI6IFBhaW50ZXIsIHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgY29sb3I6IENvbG9yKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG5cbiAgICBnbC5lbmFibGUoZ2wuU0NJU1NPUl9URVNUKTtcbiAgICBnbC5zY2lzc29yKHggKiBicm93c2VyLmRldmljZVBpeGVsUmF0aW8sIHkgKiBicm93c2VyLmRldmljZVBpeGVsUmF0aW8sIHdpZHRoICogYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLCBoZWlnaHQgKiBicm93c2VyLmRldmljZVBpeGVsUmF0aW8pO1xuICAgIGNvbnRleHQuY2xlYXIoe2NvbG9yfSk7XG4gICAgZ2wuZGlzYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xufVxuXG5mdW5jdGlvbiBkcmF3RGVidWcocGFpbnRlcjogUGFpbnRlciwgc291cmNlQ2FjaGU6IFNvdXJjZUNhY2hlLCBjb29yZHM6IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+KSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29yZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZHJhd0RlYnVnVGlsZShwYWludGVyLCBzb3VyY2VDYWNoZSwgY29vcmRzW2ldKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYXdEZWJ1Z1RpbGUocGFpbnRlciwgc291cmNlQ2FjaGUsIGNvb3JkOiBPdmVyc2NhbGVkVGlsZUlEKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG5cbiAgICBjb25zdCBwb3NNYXRyaXggPSBjb29yZC5wb3NNYXRyaXg7XG4gICAgY29uc3QgcHJvZ3JhbSA9IHBhaW50ZXIudXNlUHJvZ3JhbSgnZGVidWcnKTtcblxuICAgIGNvbnN0IGRlcHRoTW9kZSA9IERlcHRoTW9kZS5kaXNhYmxlZDtcbiAgICBjb25zdCBzdGVuY2lsTW9kZSA9IFN0ZW5jaWxNb2RlLmRpc2FibGVkO1xuICAgIGNvbnN0IGNvbG9yTW9kZSA9IHBhaW50ZXIuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpO1xuICAgIGNvbnN0IGlkID0gJyRkZWJ1Zyc7XG5cbiAgICBjb250ZXh0LmFjdGl2ZVRleHR1cmUuc2V0KGdsLlRFWFRVUkUwKTtcbiAgICAvLyBCaW5kIHRoZSBlbXB0eSB0ZXh0dXJlIGZvciBkcmF3aW5nIG91dGxpbmVzXG4gICAgcGFpbnRlci5lbXB0eVRleHR1cmUuYmluZChnbC5MSU5FQVIsIGdsLkNMQU1QX1RPX0VER0UpO1xuXG4gICAgcHJvZ3JhbS5kcmF3KGNvbnRleHQsIGdsLkxJTkVfU1RSSVAsIGRlcHRoTW9kZSwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLFxuICAgICAgICBkZWJ1Z1VuaWZvcm1WYWx1ZXMocG9zTWF0cml4LCBDb2xvci5yZWQpLCBpZCxcbiAgICAgICAgcGFpbnRlci5kZWJ1Z0J1ZmZlciwgcGFpbnRlci50aWxlQm9yZGVySW5kZXhCdWZmZXIsIHBhaW50ZXIuZGVidWdTZWdtZW50cyk7XG5cbiAgICBjb25zdCB0aWxlUmF3RGF0YSA9IHNvdXJjZUNhY2hlLmdldFRpbGVCeUlEKGNvb3JkLmtleSkubGF0ZXN0UmF3VGlsZURhdGE7XG4gICAgY29uc3QgdGlsZUJ5dGVMZW5ndGggPSAodGlsZVJhd0RhdGEgJiYgdGlsZVJhd0RhdGEuYnl0ZUxlbmd0aCkgfHwgMDtcbiAgICBjb25zdCB0aWxlU2l6ZUtiID0gTWF0aC5mbG9vcih0aWxlQnl0ZUxlbmd0aCAvIDEwMjQpO1xuICAgIGNvbnN0IHRpbGVTaXplID0gc291cmNlQ2FjaGUuZ2V0VGlsZShjb29yZCkudGlsZVNpemU7XG4gICAgY29uc3Qgc2NhbGVSYXRpbyA9ICg1MTIgLyBNYXRoLm1pbih0aWxlU2l6ZSwgNTEyKSAqIChjb29yZC5vdmVyc2NhbGVkWiAvIHBhaW50ZXIudHJhbnNmb3JtLnpvb20pKSAqIDAuNTtcbiAgICBsZXQgdGlsZUlkVGV4dCA9IGNvb3JkLmNhbm9uaWNhbC50b1N0cmluZygpO1xuICAgIGlmIChjb29yZC5vdmVyc2NhbGVkWiAhPT0gY29vcmQuY2Fub25pY2FsLnopIHtcbiAgICAgICAgdGlsZUlkVGV4dCArPSBgID0+ICR7Y29vcmQub3ZlcnNjYWxlZFp9YDtcbiAgICB9XG4gICAgY29uc3QgdGlsZUxhYmVsID0gYCR7dGlsZUlkVGV4dH0gJHt0aWxlU2l6ZUtifWtiYDtcbiAgICBkcmF3VGV4dFRvT3ZlcmxheShwYWludGVyLCB0aWxlTGFiZWwpO1xuXG4gICAgcHJvZ3JhbS5kcmF3KGNvbnRleHQsIGdsLlRSSUFOR0xFUywgZGVwdGhNb2RlLCBzdGVuY2lsTW9kZSwgQ29sb3JNb2RlLmFscGhhQmxlbmRlZCwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLFxuICAgICAgICBkZWJ1Z1VuaWZvcm1WYWx1ZXMocG9zTWF0cml4LCBDb2xvci50cmFuc3BhcmVudCwgc2NhbGVSYXRpbyksIGlkLFxuICAgICAgICBwYWludGVyLmRlYnVnQnVmZmVyLCBwYWludGVyLnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLCBwYWludGVyLmRlYnVnU2VnbWVudHMpO1xufVxuXG5mdW5jdGlvbiBkcmF3VGV4dFRvT3ZlcmxheShwYWludGVyOiBQYWludGVyLCB0ZXh0OiBzdHJpbmcpIHtcbiAgICBwYWludGVyLmluaXREZWJ1Z092ZXJsYXlDYW52YXMoKTtcbiAgICBjb25zdCBjYW52YXMgPSBwYWludGVyLmRlYnVnT3ZlcmxheUNhbnZhcztcbiAgICBjb25zdCBnbCA9IHBhaW50ZXIuY29udGV4dC5nbDtcbiAgICBjb25zdCBjdHgyZCA9IHBhaW50ZXIuZGVidWdPdmVybGF5Q2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgY3R4MmQuY2xlYXJSZWN0KDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG5cbiAgICBjdHgyZC5zaGFkb3dDb2xvciA9ICd3aGl0ZSc7XG4gICAgY3R4MmQuc2hhZG93Qmx1ciA9IDI7XG4gICAgY3R4MmQubGluZVdpZHRoID0gMS41O1xuICAgIGN0eDJkLnN0cm9rZVN0eWxlID0gJ3doaXRlJztcbiAgICBjdHgyZC50ZXh0QmFzZWxpbmUgPSAndG9wJztcbiAgICBjdHgyZC5mb250ID0gYGJvbGQgJHszNn1weCBPcGVuIFNhbnMsIHNhbnMtc2VyaWZgO1xuICAgIGN0eDJkLmZpbGxUZXh0KHRleHQsIDUsIDUpO1xuICAgIGN0eDJkLnN0cm9rZVRleHQodGV4dCwgNSwgNSk7XG5cbiAgICBwYWludGVyLmRlYnVnT3ZlcmxheVRleHR1cmUudXBkYXRlKGNhbnZhcyk7XG4gICAgcGFpbnRlci5kZWJ1Z092ZXJsYXlUZXh0dXJlLmJpbmQoZ2wuTElORUFSLCBnbC5DTEFNUF9UT19FREdFKTtcbn1cbiIsIi8vIEBmbG93XG5cbmV4cG9ydCBkZWZhdWx0IGRyYXdDdXN0b207XG5cbmltcG9ydCBEZXB0aE1vZGUgZnJvbSAnLi4vZ2wvZGVwdGhfbW9kZSc7XG5pbXBvcnQgU3RlbmNpbE1vZGUgZnJvbSAnLi4vZ2wvc3RlbmNpbF9tb2RlJztcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUgU291cmNlQ2FjaGUgZnJvbSAnLi4vc291cmNlL3NvdXJjZV9jYWNoZSc7XG5pbXBvcnQgdHlwZSBDdXN0b21TdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyL2N1c3RvbV9zdHlsZV9sYXllcic7XG5cbmZ1bmN0aW9uIGRyYXdDdXN0b20ocGFpbnRlcjogUGFpbnRlciwgc291cmNlQ2FjaGU6IFNvdXJjZUNhY2hlLCBsYXllcjogQ3VzdG9tU3R5bGVMYXllcikge1xuXG4gICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICBjb25zdCBpbXBsZW1lbnRhdGlvbiA9IGxheWVyLmltcGxlbWVudGF0aW9uO1xuXG4gICAgaWYgKHBhaW50ZXIucmVuZGVyUGFzcyA9PT0gJ29mZnNjcmVlbicpIHtcblxuICAgICAgICBjb25zdCBwcmVyZW5kZXIgPSBpbXBsZW1lbnRhdGlvbi5wcmVyZW5kZXI7XG4gICAgICAgIGlmIChwcmVyZW5kZXIpIHtcbiAgICAgICAgICAgIHBhaW50ZXIuc2V0Q3VzdG9tTGF5ZXJEZWZhdWx0cygpO1xuICAgICAgICAgICAgY29udGV4dC5zZXRDb2xvck1vZGUocGFpbnRlci5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpO1xuXG4gICAgICAgICAgICBwcmVyZW5kZXIuY2FsbChpbXBsZW1lbnRhdGlvbiwgY29udGV4dC5nbCwgcGFpbnRlci50cmFuc2Zvcm0uY3VzdG9tTGF5ZXJNYXRyaXgoKSk7XG5cbiAgICAgICAgICAgIGNvbnRleHQuc2V0RGlydHkoKTtcbiAgICAgICAgICAgIHBhaW50ZXIuc2V0QmFzZVN0YXRlKCk7XG4gICAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAocGFpbnRlci5yZW5kZXJQYXNzID09PSAndHJhbnNsdWNlbnQnKSB7XG5cbiAgICAgICAgcGFpbnRlci5zZXRDdXN0b21MYXllckRlZmF1bHRzKCk7XG5cbiAgICAgICAgY29udGV4dC5zZXRDb2xvck1vZGUocGFpbnRlci5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpO1xuICAgICAgICBjb250ZXh0LnNldFN0ZW5jaWxNb2RlKFN0ZW5jaWxNb2RlLmRpc2FibGVkKTtcblxuICAgICAgICBjb25zdCBkZXB0aE1vZGUgPSBpbXBsZW1lbnRhdGlvbi5yZW5kZXJpbmdNb2RlID09PSAnM2QnID9cbiAgICAgICAgICAgIG5ldyBEZXB0aE1vZGUocGFpbnRlci5jb250ZXh0LmdsLkxFUVVBTCwgRGVwdGhNb2RlLlJlYWRXcml0ZSwgcGFpbnRlci5kZXB0aFJhbmdlRm9yM0QpIDpcbiAgICAgICAgICAgIHBhaW50ZXIuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMCwgRGVwdGhNb2RlLlJlYWRPbmx5KTtcblxuICAgICAgICBjb250ZXh0LnNldERlcHRoTW9kZShkZXB0aE1vZGUpO1xuXG4gICAgICAgIGltcGxlbWVudGF0aW9uLnJlbmRlcihjb250ZXh0LmdsLCBwYWludGVyLnRyYW5zZm9ybS5jdXN0b21MYXllck1hdHJpeCgpKTtcblxuICAgICAgICBjb250ZXh0LnNldERpcnR5KCk7XG4gICAgICAgIHBhaW50ZXIuc2V0QmFzZVN0YXRlKCk7XG4gICAgICAgIGNvbnRleHQuYmluZEZyYW1lYnVmZmVyLnNldChudWxsKTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYnJvd3NlciBmcm9tICcuLi91dGlsL2Jyb3dzZXInO1xuaW1wb3J0IHdpbmRvdyBmcm9tICcuLi91dGlsL3dpbmRvdyc7XG5cbmltcG9ydCB7bWF0NH0gZnJvbSAnZ2wtbWF0cml4JztcbmltcG9ydCBTb3VyY2VDYWNoZSBmcm9tICcuLi9zb3VyY2Uvc291cmNlX2NhY2hlJztcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi4vZGF0YS9leHRlbnQnO1xuaW1wb3J0IHBpeGVsc1RvVGlsZVVuaXRzIGZyb20gJy4uL3NvdXJjZS9waXhlbHNfdG9fdGlsZV91bml0cyc7XG5pbXBvcnQgU2VnbWVudFZlY3RvciBmcm9tICcuLi9kYXRhL3NlZ21lbnQnO1xuaW1wb3J0IHtSYXN0ZXJCb3VuZHNBcnJheSwgUG9zQXJyYXksIFRyaWFuZ2xlSW5kZXhBcnJheSwgTGluZVN0cmlwSW5kZXhBcnJheX0gZnJvbSAnLi4vZGF0YS9hcnJheV90eXBlcyc7XG5pbXBvcnQge3ZhbHVlc30gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCByYXN0ZXJCb3VuZHNBdHRyaWJ1dGVzIGZyb20gJy4uL2RhdGEvcmFzdGVyX2JvdW5kc19hdHRyaWJ1dGVzJztcbmltcG9ydCBwb3NBdHRyaWJ1dGVzIGZyb20gJy4uL2RhdGEvcG9zX2F0dHJpYnV0ZXMnO1xuaW1wb3J0IFByb2dyYW1Db25maWd1cmF0aW9uIGZyb20gJy4uL2RhdGEvcHJvZ3JhbV9jb25maWd1cmF0aW9uJztcbmltcG9ydCBDcm9zc1RpbGVTeW1ib2xJbmRleCBmcm9tICcuLi9zeW1ib2wvY3Jvc3NfdGlsZV9zeW1ib2xfaW5kZXgnO1xuaW1wb3J0ICogYXMgc2hhZGVycyBmcm9tICcuLi9zaGFkZXJzJztcbmltcG9ydCBQcm9ncmFtIGZyb20gJy4vcHJvZ3JhbSc7XG5pbXBvcnQge3Byb2dyYW1Vbmlmb3Jtc30gZnJvbSAnLi9wcm9ncmFtL3Byb2dyYW1fdW5pZm9ybXMnO1xuaW1wb3J0IENvbnRleHQgZnJvbSAnLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgRGVwdGhNb2RlIGZyb20gJy4uL2dsL2RlcHRoX21vZGUnO1xuaW1wb3J0IFN0ZW5jaWxNb2RlIGZyb20gJy4uL2dsL3N0ZW5jaWxfbW9kZSc7XG5pbXBvcnQgQ29sb3JNb2RlIGZyb20gJy4uL2dsL2NvbG9yX21vZGUnO1xuaW1wb3J0IEN1bGxGYWNlTW9kZSBmcm9tICcuLi9nbC9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuL3RleHR1cmUnO1xuaW1wb3J0IHtjbGlwcGluZ01hc2tVbmlmb3JtVmFsdWVzfSBmcm9tICcuL3Byb2dyYW0vY2xpcHBpbmdfbWFza19wcm9ncmFtJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuaW1wb3J0IHN5bWJvbCBmcm9tICcuL2RyYXdfc3ltYm9sJztcbmltcG9ydCBjaXJjbGUgZnJvbSAnLi9kcmF3X2NpcmNsZSc7XG5pbXBvcnQgaGVhdG1hcCBmcm9tICcuL2RyYXdfaGVhdG1hcCc7XG5pbXBvcnQgbGluZSBmcm9tICcuL2RyYXdfbGluZSc7XG5pbXBvcnQgZmlsbCBmcm9tICcuL2RyYXdfZmlsbCc7XG5pbXBvcnQgZmlsbEV4dHJ1c2lvbiBmcm9tICcuL2RyYXdfZmlsbF9leHRydXNpb24nO1xuaW1wb3J0IGhpbGxzaGFkZSBmcm9tICcuL2RyYXdfaGlsbHNoYWRlJztcbmltcG9ydCByYXN0ZXIgZnJvbSAnLi9kcmF3X3Jhc3Rlcic7XG5pbXBvcnQgYmFja2dyb3VuZCBmcm9tICcuL2RyYXdfYmFja2dyb3VuZCc7XG5pbXBvcnQgZGVidWcsIHtkcmF3RGVidWdQYWRkaW5nfSBmcm9tICcuL2RyYXdfZGVidWcnO1xuaW1wb3J0IGN1c3RvbSBmcm9tICcuL2RyYXdfY3VzdG9tJztcblxuY29uc3QgZHJhdyA9IHtcbiAgICBzeW1ib2wsXG4gICAgY2lyY2xlLFxuICAgIGhlYXRtYXAsXG4gICAgbGluZSxcbiAgICBmaWxsLFxuICAgICdmaWxsLWV4dHJ1c2lvbic6IGZpbGxFeHRydXNpb24sXG4gICAgaGlsbHNoYWRlLFxuICAgIHJhc3RlcixcbiAgICBiYWNrZ3JvdW5kLFxuICAgIGRlYnVnLFxuICAgIGN1c3RvbVxufTtcblxuaW1wb3J0IHR5cGUgVHJhbnNmb3JtIGZyb20gJy4uL2dlby90cmFuc2Zvcm0nO1xuaW1wb3J0IHR5cGUgVGlsZSBmcm9tICcuLi9zb3VyY2UvdGlsZSc7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi4vc291cmNlL3RpbGVfaWQnO1xuaW1wb3J0IHR5cGUgU3R5bGUgZnJvbSAnLi4vc3R5bGUvc3R5bGUnO1xuaW1wb3J0IHR5cGUgU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSB7Q3Jvc3NGYWRlZH0gZnJvbSAnLi4vc3R5bGUvcHJvcGVydGllcyc7XG5pbXBvcnQgdHlwZSBMaW5lQXRsYXMgZnJvbSAnLi9saW5lX2F0bGFzJztcbmltcG9ydCB0eXBlIEltYWdlTWFuYWdlciBmcm9tICcuL2ltYWdlX21hbmFnZXInO1xuaW1wb3J0IHR5cGUgR2x5cGhNYW5hZ2VyIGZyb20gJy4vZ2x5cGhfbWFuYWdlcic7XG5pbXBvcnQgdHlwZSBWZXJ0ZXhCdWZmZXIgZnJvbSAnLi4vZ2wvdmVydGV4X2J1ZmZlcic7XG5pbXBvcnQgdHlwZSBJbmRleEJ1ZmZlciBmcm9tICcuLi9nbC9pbmRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUge0RlcHRoUmFuZ2VUeXBlLCBEZXB0aE1hc2tUeXBlLCBEZXB0aEZ1bmNUeXBlfSBmcm9tICcuLi9nbC90eXBlcyc7XG5pbXBvcnQgdHlwZSBSZXNvbHZlZEltYWdlIGZyb20gJy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5cbmV4cG9ydCB0eXBlIFJlbmRlclBhc3MgPSAnb2Zmc2NyZWVuJyB8ICdvcGFxdWUnIHwgJ3RyYW5zbHVjZW50JztcblxudHlwZSBQYWludGVyT3B0aW9ucyA9IHtcbiAgICBzaG93T3ZlcmRyYXdJbnNwZWN0b3I6IGJvb2xlYW4sXG4gICAgc2hvd1RpbGVCb3VuZGFyaWVzOiBib29sZWFuLFxuICAgIHNob3dQYWRkaW5nOiBib29sZWFuLFxuICAgIHJvdGF0aW5nOiBib29sZWFuLFxuICAgIHpvb21pbmc6IGJvb2xlYW4sXG4gICAgbW92aW5nOiBib29sZWFuLFxuICAgIGdwdVRpbWluZzogYm9vbGVhbixcbiAgICBmYWRlRHVyYXRpb246IG51bWJlclxufVxuXG4vKipcbiAqIEluaXRpYWxpemUgYSBuZXcgcGFpbnRlciBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtDYW52YXN9IGdsIGFuIGV4cGVyaW1lbnRhbC13ZWJnbCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFBhaW50ZXIge1xuICAgIGNvbnRleHQ6IENvbnRleHQ7XG4gICAgdHJhbnNmb3JtOiBUcmFuc2Zvcm07XG4gICAgX3RpbGVUZXh0dXJlczoge1tfOiBudW1iZXJdOiBBcnJheTxUZXh0dXJlPiB9O1xuICAgIG51bVN1YmxheWVyczogbnVtYmVyO1xuICAgIGRlcHRoRXBzaWxvbjogbnVtYmVyO1xuICAgIGVtcHR5UHJvZ3JhbUNvbmZpZ3VyYXRpb246IFByb2dyYW1Db25maWd1cmF0aW9uO1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgaGVpZ2h0OiBudW1iZXI7XG4gICAgdGlsZUV4dGVudEJ1ZmZlcjogVmVydGV4QnVmZmVyO1xuICAgIHRpbGVFeHRlbnRTZWdtZW50czogU2VnbWVudFZlY3RvcjtcbiAgICBkZWJ1Z0J1ZmZlcjogVmVydGV4QnVmZmVyO1xuICAgIGRlYnVnU2VnbWVudHM6IFNlZ21lbnRWZWN0b3I7XG4gICAgcmFzdGVyQm91bmRzQnVmZmVyOiBWZXJ0ZXhCdWZmZXI7XG4gICAgcmFzdGVyQm91bmRzU2VnbWVudHM6IFNlZ21lbnRWZWN0b3I7XG4gICAgdmlld3BvcnRCdWZmZXI6IFZlcnRleEJ1ZmZlcjtcbiAgICB2aWV3cG9ydFNlZ21lbnRzOiBTZWdtZW50VmVjdG9yO1xuICAgIHF1YWRUcmlhbmdsZUluZGV4QnVmZmVyOiBJbmRleEJ1ZmZlcjtcbiAgICB0aWxlQm9yZGVySW5kZXhCdWZmZXI6IEluZGV4QnVmZmVyO1xuICAgIF90aWxlQ2xpcHBpbmdNYXNrSURzOiB7W186IHN0cmluZ106IG51bWJlciB9O1xuICAgIHN0ZW5jaWxDbGVhck1vZGU6IFN0ZW5jaWxNb2RlO1xuICAgIHN0eWxlOiBTdHlsZTtcbiAgICBvcHRpb25zOiBQYWludGVyT3B0aW9ucztcbiAgICBsaW5lQXRsYXM6IExpbmVBdGxhcztcbiAgICBpbWFnZU1hbmFnZXI6IEltYWdlTWFuYWdlcjtcbiAgICBnbHlwaE1hbmFnZXI6IEdseXBoTWFuYWdlcjtcbiAgICBkZXB0aFJhbmdlRm9yM0Q6IERlcHRoUmFuZ2VUeXBlO1xuICAgIG9wYXF1ZVBhc3NDdXRvZmY6IG51bWJlcjtcbiAgICByZW5kZXJQYXNzOiBSZW5kZXJQYXNzO1xuICAgIGN1cnJlbnRMYXllcjogbnVtYmVyO1xuICAgIGN1cnJlbnRTdGVuY2lsU291cmNlOiA/c3RyaW5nO1xuICAgIG5leHRTdGVuY2lsSUQ6IG51bWJlcjtcbiAgICBpZDogc3RyaW5nO1xuICAgIF9zaG93T3ZlcmRyYXdJbnNwZWN0b3I6IGJvb2xlYW47XG4gICAgY2FjaGU6IHtbXzogc3RyaW5nXTogUHJvZ3JhbTwqPiB9O1xuICAgIGNyb3NzVGlsZVN5bWJvbEluZGV4OiBDcm9zc1RpbGVTeW1ib2xJbmRleDtcbiAgICBzeW1ib2xGYWRlQ2hhbmdlOiBudW1iZXI7XG4gICAgZ3B1VGltZXJzOiB7W186IHN0cmluZ106IGFueSB9O1xuICAgIGVtcHR5VGV4dHVyZTogVGV4dHVyZTtcbiAgICBkZWJ1Z092ZXJsYXlUZXh0dXJlOiBUZXh0dXJlO1xuICAgIGRlYnVnT3ZlcmxheUNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQ7XG5cbiAgICBjb25zdHJ1Y3RvcihnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0LCB0cmFuc2Zvcm06IFRyYW5zZm9ybSkge1xuICAgICAgICB0aGlzLmNvbnRleHQgPSBuZXcgQ29udGV4dChnbCk7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuICAgICAgICB0aGlzLl90aWxlVGV4dHVyZXMgPSB7fTtcblxuICAgICAgICB0aGlzLnNldHVwKCk7XG5cbiAgICAgICAgLy8gV2l0aGluIGVhY2ggbGF5ZXIgdGhlcmUgYXJlIG11bHRpcGxlIGRpc3RpbmN0IHotcGxhbmVzIHRoYXQgY2FuIGJlIGRyYXduIHRvLlxuICAgICAgICAvLyBUaGlzIGlzIGltcGxlbWVudGVkIHVzaW5nIHRoZSBXZWJHTCBkZXB0aCBidWZmZXIuXG4gICAgICAgIHRoaXMubnVtU3VibGF5ZXJzID0gU291cmNlQ2FjaGUubWF4VW5kZXJ6b29taW5nICsgU291cmNlQ2FjaGUubWF4T3Zlcnpvb21pbmcgKyAxO1xuICAgICAgICB0aGlzLmRlcHRoRXBzaWxvbiA9IDEgLyBNYXRoLnBvdygyLCAxNik7XG5cbiAgICAgICAgdGhpcy5jcm9zc1RpbGVTeW1ib2xJbmRleCA9IG5ldyBDcm9zc1RpbGVTeW1ib2xJbmRleCgpO1xuXG4gICAgICAgIHRoaXMuZ3B1VGltZXJzID0ge307XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBVcGRhdGUgdGhlIEdMIHZpZXdwb3J0LCBwcm9qZWN0aW9uIG1hdHJpeCwgYW5kIHRyYW5zZm9ybXMgdG8gY29tcGVuc2F0ZVxuICAgICAqIGZvciBhIG5ldyB3aWR0aCBhbmQgaGVpZ2h0IHZhbHVlLlxuICAgICAqL1xuICAgIHJlc2l6ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLndpZHRoID0gd2lkdGggKiBicm93c2VyLmRldmljZVBpeGVsUmF0aW87XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0ICogYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvO1xuICAgICAgICB0aGlzLmNvbnRleHQudmlld3BvcnQuc2V0KFswLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodF0pO1xuXG4gICAgICAgIGlmICh0aGlzLnN0eWxlKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGxheWVySWQgb2YgdGhpcy5zdHlsZS5fb3JkZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0eWxlLl9sYXllcnNbbGF5ZXJJZF0ucmVzaXplKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXR1cCgpIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dDtcblxuICAgICAgICBjb25zdCB0aWxlRXh0ZW50QXJyYXkgPSBuZXcgUG9zQXJyYXkoKTtcbiAgICAgICAgdGlsZUV4dGVudEFycmF5LmVtcGxhY2VCYWNrKDAsIDApO1xuICAgICAgICB0aWxlRXh0ZW50QXJyYXkuZW1wbGFjZUJhY2soRVhURU5ULCAwKTtcbiAgICAgICAgdGlsZUV4dGVudEFycmF5LmVtcGxhY2VCYWNrKDAsIEVYVEVOVCk7XG4gICAgICAgIHRpbGVFeHRlbnRBcnJheS5lbXBsYWNlQmFjayhFWFRFTlQsIEVYVEVOVCk7XG4gICAgICAgIHRoaXMudGlsZUV4dGVudEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRpbGVFeHRlbnRBcnJheSwgcG9zQXR0cmlidXRlcy5tZW1iZXJzKTtcbiAgICAgICAgdGhpcy50aWxlRXh0ZW50U2VnbWVudHMgPSBTZWdtZW50VmVjdG9yLnNpbXBsZVNlZ21lbnQoMCwgMCwgNCwgMik7XG5cbiAgICAgICAgY29uc3QgZGVidWdBcnJheSA9IG5ldyBQb3NBcnJheSgpO1xuICAgICAgICBkZWJ1Z0FycmF5LmVtcGxhY2VCYWNrKDAsIDApO1xuICAgICAgICBkZWJ1Z0FycmF5LmVtcGxhY2VCYWNrKEVYVEVOVCwgMCk7XG4gICAgICAgIGRlYnVnQXJyYXkuZW1wbGFjZUJhY2soMCwgRVhURU5UKTtcbiAgICAgICAgZGVidWdBcnJheS5lbXBsYWNlQmFjayhFWFRFTlQsIEVYVEVOVCk7XG4gICAgICAgIHRoaXMuZGVidWdCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcihkZWJ1Z0FycmF5LCBwb3NBdHRyaWJ1dGVzLm1lbWJlcnMpO1xuICAgICAgICB0aGlzLmRlYnVnU2VnbWVudHMgPSBTZWdtZW50VmVjdG9yLnNpbXBsZVNlZ21lbnQoMCwgMCwgNCwgNSk7XG5cbiAgICAgICAgY29uc3QgcmFzdGVyQm91bmRzQXJyYXkgPSBuZXcgUmFzdGVyQm91bmRzQXJyYXkoKTtcbiAgICAgICAgcmFzdGVyQm91bmRzQXJyYXkuZW1wbGFjZUJhY2soMCwgMCwgMCwgMCk7XG4gICAgICAgIHJhc3RlckJvdW5kc0FycmF5LmVtcGxhY2VCYWNrKEVYVEVOVCwgMCwgRVhURU5ULCAwKTtcbiAgICAgICAgcmFzdGVyQm91bmRzQXJyYXkuZW1wbGFjZUJhY2soMCwgRVhURU5ULCAwLCBFWFRFTlQpO1xuICAgICAgICByYXN0ZXJCb3VuZHNBcnJheS5lbXBsYWNlQmFjayhFWFRFTlQsIEVYVEVOVCwgRVhURU5ULCBFWFRFTlQpO1xuICAgICAgICB0aGlzLnJhc3RlckJvdW5kc0J1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHJhc3RlckJvdW5kc0FycmF5LCByYXN0ZXJCb3VuZHNBdHRyaWJ1dGVzLm1lbWJlcnMpO1xuICAgICAgICB0aGlzLnJhc3RlckJvdW5kc1NlZ21lbnRzID0gU2VnbWVudFZlY3Rvci5zaW1wbGVTZWdtZW50KDAsIDAsIDQsIDIpO1xuXG4gICAgICAgIGNvbnN0IHZpZXdwb3J0QXJyYXkgPSBuZXcgUG9zQXJyYXkoKTtcbiAgICAgICAgdmlld3BvcnRBcnJheS5lbXBsYWNlQmFjaygwLCAwKTtcbiAgICAgICAgdmlld3BvcnRBcnJheS5lbXBsYWNlQmFjaygxLCAwKTtcbiAgICAgICAgdmlld3BvcnRBcnJheS5lbXBsYWNlQmFjaygwLCAxKTtcbiAgICAgICAgdmlld3BvcnRBcnJheS5lbXBsYWNlQmFjaygxLCAxKTtcbiAgICAgICAgdGhpcy52aWV3cG9ydEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHZpZXdwb3J0QXJyYXksIHBvc0F0dHJpYnV0ZXMubWVtYmVycyk7XG4gICAgICAgIHRoaXMudmlld3BvcnRTZWdtZW50cyA9IFNlZ21lbnRWZWN0b3Iuc2ltcGxlU2VnbWVudCgwLCAwLCA0LCAyKTtcblxuICAgICAgICBjb25zdCB0aWxlTGluZVN0cmlwSW5kaWNlcyA9IG5ldyBMaW5lU3RyaXBJbmRleEFycmF5KCk7XG4gICAgICAgIHRpbGVMaW5lU3RyaXBJbmRpY2VzLmVtcGxhY2VCYWNrKDApO1xuICAgICAgICB0aWxlTGluZVN0cmlwSW5kaWNlcy5lbXBsYWNlQmFjaygxKTtcbiAgICAgICAgdGlsZUxpbmVTdHJpcEluZGljZXMuZW1wbGFjZUJhY2soMyk7XG4gICAgICAgIHRpbGVMaW5lU3RyaXBJbmRpY2VzLmVtcGxhY2VCYWNrKDIpO1xuICAgICAgICB0aWxlTGluZVN0cmlwSW5kaWNlcy5lbXBsYWNlQmFjaygwKTtcbiAgICAgICAgdGhpcy50aWxlQm9yZGVySW5kZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZUluZGV4QnVmZmVyKHRpbGVMaW5lU3RyaXBJbmRpY2VzKTtcblxuICAgICAgICBjb25zdCBxdWFkVHJpYW5nbGVJbmRpY2VzID0gbmV3IFRyaWFuZ2xlSW5kZXhBcnJheSgpO1xuICAgICAgICBxdWFkVHJpYW5nbGVJbmRpY2VzLmVtcGxhY2VCYWNrKDAsIDEsIDIpO1xuICAgICAgICBxdWFkVHJpYW5nbGVJbmRpY2VzLmVtcGxhY2VCYWNrKDIsIDEsIDMpO1xuICAgICAgICB0aGlzLnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVJbmRleEJ1ZmZlcihxdWFkVHJpYW5nbGVJbmRpY2VzKTtcblxuICAgICAgICB0aGlzLmVtcHR5VGV4dHVyZSA9IG5ldyBUZXh0dXJlKGNvbnRleHQsIHtcbiAgICAgICAgICAgIHdpZHRoOiAxLFxuICAgICAgICAgICAgaGVpZ2h0OiAxLFxuICAgICAgICAgICAgZGF0YTogbmV3IFVpbnQ4QXJyYXkoWzAsIDAsIDAsIDBdKVxuICAgICAgICB9LCBjb250ZXh0LmdsLlJHQkEpO1xuXG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5jb250ZXh0LmdsO1xuICAgICAgICB0aGlzLnN0ZW5jaWxDbGVhck1vZGUgPSBuZXcgU3RlbmNpbE1vZGUoe2Z1bmM6IGdsLkFMV0FZUywgbWFzazogMH0sIDB4MCwgMHhGRiwgZ2wuWkVSTywgZ2wuWkVSTywgZ2wuWkVSTyk7XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBSZXNldCB0aGUgZHJhd2luZyBjYW52YXMgYnkgY2xlYXJpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyIHNvIHRoYXQgd2UgY2FuIGRyYXdcbiAgICAgKiBuZXcgdGlsZXMgYXQgdGhlIHNhbWUgbG9jYXRpb24sIHdoaWxlIHJldGFpbmluZyBwcmV2aW91c2x5IGRyYXduIHBpeGVscy5cbiAgICAgKi9cbiAgICBjbGVhclN0ZW5jaWwoKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG4gICAgICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcblxuICAgICAgICB0aGlzLm5leHRTdGVuY2lsSUQgPSAxO1xuICAgICAgICB0aGlzLmN1cnJlbnRTdGVuY2lsU291cmNlID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIC8vIEFzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy81NDkwLFxuICAgICAgICAvLyBwZW5kaW5nIGFuIHVwc3RyZWFtIGZpeCwgd2UgZHJhdyBhIGZ1bGxzY3JlZW4gc3RlbmNpbD0wIGNsaXBwaW5nIG1hc2sgaGVyZSxcbiAgICAgICAgLy8gZWZmZWN0aXZlbHkgY2xlYXJpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyOiBvbmNlIGFuIHVwc3RyZWFtIHBhdGNoIGxhbmRzLCByZW1vdmVcbiAgICAgICAgLy8gdGhpcyBmdW5jdGlvbiBpbiBmYXZvciBvZiBjb250ZXh0LmNsZWFyKHsgc3RlbmNpbDogMHgwIH0pXG5cbiAgICAgICAgY29uc3QgbWF0cml4ID0gbWF0NC5jcmVhdGUoKTtcbiAgICAgICAgbWF0NC5vcnRobyhtYXRyaXgsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCAwLCAxKTtcbiAgICAgICAgbWF0NC5zY2FsZShtYXRyaXgsIG1hdHJpeCwgW2dsLmRyYXdpbmdCdWZmZXJXaWR0aCwgZ2wuZHJhd2luZ0J1ZmZlckhlaWdodCwgMF0pO1xuXG4gICAgICAgIHRoaXMudXNlUHJvZ3JhbSgnY2xpcHBpbmdNYXNrJykuZHJhdyhjb250ZXh0LCBnbC5UUklBTkdMRVMsXG4gICAgICAgICAgICBEZXB0aE1vZGUuZGlzYWJsZWQsIHRoaXMuc3RlbmNpbENsZWFyTW9kZSwgQ29sb3JNb2RlLmRpc2FibGVkLCBDdWxsRmFjZU1vZGUuZGlzYWJsZWQsXG4gICAgICAgICAgICBjbGlwcGluZ01hc2tVbmlmb3JtVmFsdWVzKG1hdHJpeCksXG4gICAgICAgICAgICAnJGNsaXBwaW5nJywgdGhpcy52aWV3cG9ydEJ1ZmZlcixcbiAgICAgICAgICAgIHRoaXMucXVhZFRyaWFuZ2xlSW5kZXhCdWZmZXIsIHRoaXMudmlld3BvcnRTZWdtZW50cyk7XG4gICAgfVxuXG4gICAgX3JlbmRlclRpbGVDbGlwcGluZ01hc2tzKGxheWVyOiBTdHlsZUxheWVyLCB0aWxlSURzOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPikge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RlbmNpbFNvdXJjZSA9PT0gbGF5ZXIuc291cmNlIHx8ICFsYXllci5pc1RpbGVDbGlwcGVkKCkgfHwgIXRpbGVJRHMgfHwgIXRpbGVJRHMubGVuZ3RoKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5jdXJyZW50U3RlbmNpbFNvdXJjZSA9IGxheWVyLnNvdXJjZTtcblxuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jb250ZXh0O1xuICAgICAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG5cbiAgICAgICAgaWYgKHRoaXMubmV4dFN0ZW5jaWxJRCArIHRpbGVJRHMubGVuZ3RoID4gMjU2KSB7XG4gICAgICAgICAgICAvLyB3ZSdsbCBydW4gb3V0IG9mIGZyZXNoIElEcyBzbyB3ZSBuZWVkIHRvIGNsZWFyIGFuZCBzdGFydCBmcm9tIHNjcmF0Y2hcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTdGVuY2lsKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0LnNldENvbG9yTW9kZShDb2xvck1vZGUuZGlzYWJsZWQpO1xuICAgICAgICBjb250ZXh0LnNldERlcHRoTW9kZShEZXB0aE1vZGUuZGlzYWJsZWQpO1xuXG4gICAgICAgIGNvbnN0IHByb2dyYW0gPSB0aGlzLnVzZVByb2dyYW0oJ2NsaXBwaW5nTWFzaycpO1xuXG4gICAgICAgIHRoaXMuX3RpbGVDbGlwcGluZ01hc2tJRHMgPSB7fTtcblxuICAgICAgICBmb3IgKGNvbnN0IHRpbGVJRCBvZiB0aWxlSURzKSB7XG4gICAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuX3RpbGVDbGlwcGluZ01hc2tJRHNbdGlsZUlELmtleV0gPSB0aGlzLm5leHRTdGVuY2lsSUQrKztcblxuICAgICAgICAgICAgcHJvZ3JhbS5kcmF3KGNvbnRleHQsIGdsLlRSSUFOR0xFUywgRGVwdGhNb2RlLmRpc2FibGVkLFxuICAgICAgICAgICAgICAgIC8vIFRlc3RzIHdpbGwgYWx3YXlzIHBhc3MsIGFuZCByZWYgdmFsdWUgd2lsbCBiZSB3cml0dGVuIHRvIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAgICAgICAgICAgIG5ldyBTdGVuY2lsTW9kZSh7ZnVuYzogZ2wuQUxXQVlTLCBtYXNrOiAwfSwgaWQsIDB4RkYsIGdsLktFRVAsIGdsLktFRVAsIGdsLlJFUExBQ0UpLFxuICAgICAgICAgICAgICAgIENvbG9yTW9kZS5kaXNhYmxlZCwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLCBjbGlwcGluZ01hc2tVbmlmb3JtVmFsdWVzKHRpbGVJRC5wb3NNYXRyaXgpLFxuICAgICAgICAgICAgICAgICckY2xpcHBpbmcnLCB0aGlzLnRpbGVFeHRlbnRCdWZmZXIsXG4gICAgICAgICAgICAgICAgdGhpcy5xdWFkVHJpYW5nbGVJbmRleEJ1ZmZlciwgdGhpcy50aWxlRXh0ZW50U2VnbWVudHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RlbmNpbE1vZGVGb3IzRCgpOiBTdGVuY2lsTW9kZSB7XG4gICAgICAgIHRoaXMuY3VycmVudFN0ZW5jaWxTb3VyY2UgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKHRoaXMubmV4dFN0ZW5jaWxJRCArIDEgPiAyNTYpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTdGVuY2lsKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpZCA9IHRoaXMubmV4dFN0ZW5jaWxJRCsrO1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuY29udGV4dC5nbDtcbiAgICAgICAgcmV0dXJuIG5ldyBTdGVuY2lsTW9kZSh7ZnVuYzogZ2wuTk9URVFVQUwsIG1hc2s6IDB4RkZ9LCBpZCwgMHhGRiwgZ2wuS0VFUCwgZ2wuS0VFUCwgZ2wuUkVQTEFDRSk7XG4gICAgfVxuXG4gICAgc3RlbmNpbE1vZGVGb3JDbGlwcGluZyh0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQpOiBTdGVuY2lsTW9kZSB7XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5jb250ZXh0LmdsO1xuICAgICAgICByZXR1cm4gbmV3IFN0ZW5jaWxNb2RlKHtmdW5jOiBnbC5FUVVBTCwgbWFzazogMHhGRn0sIHRoaXMuX3RpbGVDbGlwcGluZ01hc2tJRHNbdGlsZUlELmtleV0sIDB4MDAsIGdsLktFRVAsIGdsLktFRVAsIGdsLlJFUExBQ0UpO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogU29ydCBjb29yZGluYXRlcyBieSBaIGFzIGRyYXdpbmcgdGlsZXMgaXMgZG9uZSBpbiBaLWRlc2NlbmRpbmcgb3JkZXIuXG4gICAgICogQWxsIGNoaWxkcmVuIHdpdGggdGhlIHNhbWUgWiB3cml0ZSB0aGUgc2FtZSBzdGVuY2lsIHZhbHVlLiAgQ2hpbGRyZW5cbiAgICAgKiBzdGVuY2lsIHZhbHVlcyBhcmUgZ3JlYXRlciB0aGFuIHBhcmVudCdzLiAgVGhpcyBpcyB1c2VkIG9ubHkgZm9yIHJhc3RlclxuICAgICAqIGFuZCByYXN0ZXItZGVtIHRpbGVzLCB3aGljaCBhcmUgYWxyZWFkeSBjbGlwcGVkIHRvIHRpbGUgYm91bmRhcmllcywgdG9cbiAgICAgKiBtYXNrIGFyZWEgb2YgdGlsZSBvdmVybGFwcGVkIGJ5IGNoaWxkcmVuIHRpbGVzLlxuICAgICAqIFN0ZW5jaWwgcmVmIHZhbHVlcyBjb250aW51ZSByYW5nZSB1c2VkIGluIF90aWxlQ2xpcHBpbmdNYXNrSURzLlxuICAgICAqXG4gICAgICogUmV0dXJucyBbU3RlbmNpbE1vZGUgZm9yIHRpbGUgb3ZlcnNjYWxlWiBtYXAsIHNvcnRlZENvb3Jkc10uXG4gICAgICovXG4gICAgc3RlbmNpbENvbmZpZ0Zvck92ZXJsYXAodGlsZUlEczogQXJyYXk8T3ZlcnNjYWxlZFRpbGVJRD4pOiBbe1tfOiBudW1iZXJdOiAkUmVhZE9ubHk8U3RlbmNpbE1vZGU+fSwgQXJyYXk8T3ZlcnNjYWxlZFRpbGVJRD5dIHtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmNvbnRleHQuZ2w7XG4gICAgICAgIGNvbnN0IGNvb3JkcyA9IHRpbGVJRHMuc29ydCgoYSwgYikgPT4gYi5vdmVyc2NhbGVkWiAtIGEub3ZlcnNjYWxlZFopO1xuICAgICAgICBjb25zdCBtaW5UaWxlWiA9IGNvb3Jkc1tjb29yZHMubGVuZ3RoIC0gMV0ub3ZlcnNjYWxlZFo7XG4gICAgICAgIGNvbnN0IHN0ZW5jaWxWYWx1ZXMgPSBjb29yZHNbMF0ub3ZlcnNjYWxlZFogLSBtaW5UaWxlWiArIDE7XG4gICAgICAgIGlmIChzdGVuY2lsVmFsdWVzID4gMSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlbmNpbFNvdXJjZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmICh0aGlzLm5leHRTdGVuY2lsSUQgKyBzdGVuY2lsVmFsdWVzID4gMjU2KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhclN0ZW5jaWwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHpUb1N0ZW5jaWxNb2RlID0ge307XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ZW5jaWxWYWx1ZXM7IGkrKykge1xuICAgICAgICAgICAgICAgIHpUb1N0ZW5jaWxNb2RlW2kgKyBtaW5UaWxlWl0gPSBuZXcgU3RlbmNpbE1vZGUoe2Z1bmM6IGdsLkdFUVVBTCwgbWFzazogMHhGRn0sIGkgKyB0aGlzLm5leHRTdGVuY2lsSUQsIDB4RkYsIGdsLktFRVAsIGdsLktFRVAsIGdsLlJFUExBQ0UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5uZXh0U3RlbmNpbElEICs9IHN0ZW5jaWxWYWx1ZXM7XG4gICAgICAgICAgICByZXR1cm4gW3pUb1N0ZW5jaWxNb2RlLCBjb29yZHNdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbe1ttaW5UaWxlWl06IFN0ZW5jaWxNb2RlLmRpc2FibGVkfSwgY29vcmRzXTtcbiAgICB9XG5cbiAgICBjb2xvck1vZGVGb3JSZW5kZXJQYXNzKCk6ICRSZWFkT25seTxDb2xvck1vZGU+IHtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmNvbnRleHQuZ2w7XG4gICAgICAgIGlmICh0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IG51bU92ZXJkcmF3U3RlcHMgPSA4O1xuICAgICAgICAgICAgY29uc3QgYSA9IDEgLyBudW1PdmVyZHJhd1N0ZXBzO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yTW9kZShbZ2wuQ09OU1RBTlRfQ09MT1IsIGdsLk9ORV0sIG5ldyBDb2xvcihhLCBhLCBhLCAwKSwgW3RydWUsIHRydWUsIHRydWUsIHRydWVdKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlbmRlclBhc3MgPT09ICdvcGFxdWUnKSB7XG4gICAgICAgICAgICByZXR1cm4gQ29sb3JNb2RlLnVuYmxlbmRlZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBDb2xvck1vZGUuYWxwaGFCbGVuZGVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGVwdGhNb2RlRm9yU3VibGF5ZXIobjogbnVtYmVyLCBtYXNrOiBEZXB0aE1hc2tUeXBlLCBmdW5jOiA/RGVwdGhGdW5jVHlwZSk6ICRSZWFkT25seTxEZXB0aE1vZGU+IHtcbiAgICAgICAgaWYgKCF0aGlzLm9wYXF1ZVBhc3NFbmFibGVkRm9yTGF5ZXIoKSkgcmV0dXJuIERlcHRoTW9kZS5kaXNhYmxlZDtcbiAgICAgICAgY29uc3QgZGVwdGggPSAxIC0gKCgxICsgdGhpcy5jdXJyZW50TGF5ZXIpICogdGhpcy5udW1TdWJsYXllcnMgKyBuKSAqIHRoaXMuZGVwdGhFcHNpbG9uO1xuICAgICAgICByZXR1cm4gbmV3IERlcHRoTW9kZShmdW5jIHx8IHRoaXMuY29udGV4dC5nbC5MRVFVQUwsIG1hc2ssIFtkZXB0aCwgZGVwdGhdKTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIFRoZSBvcGFxdWUgcGFzcyBhbmQgM0QgbGF5ZXJzIGJvdGggdXNlIHRoZSBkZXB0aCBidWZmZXIuXG4gICAgICogTGF5ZXJzIGRyYXduIGFib3ZlIDNEIGxheWVycyBuZWVkIHRvIGJlIGRyYXduIHVzaW5nIHRoZVxuICAgICAqIHBhaW50ZXIncyBhbGdvcml0aG0gc28gdGhhdCB0aGV5IGFwcGVhciBhYm92ZSAzRCBmZWF0dXJlcy5cbiAgICAgKiBUaGlzIHJldHVybnMgdHJ1ZSBmb3IgbGF5ZXJzIHRoYXQgY2FuIGJlIGRyYXduIHVzaW5nIHRoZVxuICAgICAqIG9wYXF1ZSBwYXNzLlxuICAgICAqL1xuICAgIG9wYXF1ZVBhc3NFbmFibGVkRm9yTGF5ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRMYXllciA8IHRoaXMub3BhcXVlUGFzc0N1dG9mZjtcbiAgICB9XG5cbiAgICByZW5kZXIoc3R5bGU6IFN0eWxlLCBvcHRpb25zOiBQYWludGVyT3B0aW9ucykge1xuICAgICAgICB0aGlzLnN0eWxlID0gc3R5bGU7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICAgICAgdGhpcy5saW5lQXRsYXMgPSBzdHlsZS5saW5lQXRsYXM7XG4gICAgICAgIHRoaXMuaW1hZ2VNYW5hZ2VyID0gc3R5bGUuaW1hZ2VNYW5hZ2VyO1xuICAgICAgICB0aGlzLmdseXBoTWFuYWdlciA9IHN0eWxlLmdseXBoTWFuYWdlcjtcblxuICAgICAgICB0aGlzLnN5bWJvbEZhZGVDaGFuZ2UgPSBzdHlsZS5wbGFjZW1lbnQuc3ltYm9sRmFkZUNoYW5nZShicm93c2VyLm5vdygpKTtcblxuICAgICAgICB0aGlzLmltYWdlTWFuYWdlci5iZWdpbkZyYW1lKCk7XG5cbiAgICAgICAgY29uc3QgbGF5ZXJJZHMgPSB0aGlzLnN0eWxlLl9vcmRlcjtcbiAgICAgICAgY29uc3Qgc291cmNlQ2FjaGVzID0gdGhpcy5zdHlsZS5zb3VyY2VDYWNoZXM7XG5cbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiBzb3VyY2VDYWNoZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlID0gc291cmNlQ2FjaGVzW2lkXTtcbiAgICAgICAgICAgIGlmIChzb3VyY2VDYWNoZS51c2VkKSB7XG4gICAgICAgICAgICAgICAgc291cmNlQ2FjaGUucHJlcGFyZSh0aGlzLmNvbnRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29vcmRzQXNjZW5kaW5nOiB7W186IHN0cmluZ106IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+fSA9IHt9O1xuICAgICAgICBjb25zdCBjb29yZHNEZXNjZW5kaW5nOiB7W186IHN0cmluZ106IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+fSA9IHt9O1xuICAgICAgICBjb25zdCBjb29yZHNEZXNjZW5kaW5nU3ltYm9sOiB7W186IHN0cmluZ106IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+fSA9IHt9O1xuXG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gc291cmNlQ2FjaGVzKSB7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VDYWNoZSA9IHNvdXJjZUNhY2hlc1tpZF07XG4gICAgICAgICAgICBjb29yZHNBc2NlbmRpbmdbaWRdID0gc291cmNlQ2FjaGUuZ2V0VmlzaWJsZUNvb3JkaW5hdGVzKCk7XG4gICAgICAgICAgICBjb29yZHNEZXNjZW5kaW5nW2lkXSA9IGNvb3Jkc0FzY2VuZGluZ1tpZF0uc2xpY2UoKS5yZXZlcnNlKCk7XG4gICAgICAgICAgICBjb29yZHNEZXNjZW5kaW5nU3ltYm9sW2lkXSA9IHNvdXJjZUNhY2hlLmdldFZpc2libGVDb29yZGluYXRlcyh0cnVlKS5yZXZlcnNlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9wYXF1ZVBhc3NDdXRvZmYgPSBJbmZpbml0eTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsYXllcklkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXJJZCA9IGxheWVySWRzW2ldO1xuICAgICAgICAgICAgaWYgKHRoaXMuc3R5bGUuX2xheWVyc1tsYXllcklkXS5pczNEKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wYXF1ZVBhc3NDdXRvZmYgPSBpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gT2Zmc2NyZWVuIHBhc3MgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgLy8gV2UgZmlyc3QgZG8gYWxsIHJlbmRlcmluZyB0aGF0IHJlcXVpcmVzIHJlbmRlcmluZyB0byBhIHNlcGFyYXRlXG4gICAgICAgIC8vIGZyYW1lYnVmZmVyLCBhbmQgdGhlbiBzYXZlIHRob3NlIGZvciByZW5kZXJpbmcgYmFjayB0byB0aGUgbWFwXG4gICAgICAgIC8vIGxhdGVyOiBpbiBkb2luZyB0aGlzIHdlIGF2b2lkIGRvaW5nIGV4cGVuc2l2ZSBmcmFtZWJ1ZmZlciByZXN0b3Jlcy5cbiAgICAgICAgdGhpcy5yZW5kZXJQYXNzID0gJ29mZnNjcmVlbic7XG5cbiAgICAgICAgZm9yIChjb25zdCBsYXllcklkIG9mIGxheWVySWRzKSB7XG4gICAgICAgICAgICBjb25zdCBsYXllciA9IHRoaXMuc3R5bGUuX2xheWVyc1tsYXllcklkXTtcbiAgICAgICAgICAgIGlmICghbGF5ZXIuaGFzT2Zmc2NyZWVuUGFzcygpIHx8IGxheWVyLmlzSGlkZGVuKHRoaXMudHJhbnNmb3JtLnpvb20pKSBjb250aW51ZTtcblxuICAgICAgICAgICAgY29uc3QgY29vcmRzID0gY29vcmRzRGVzY2VuZGluZ1tsYXllci5zb3VyY2VdO1xuICAgICAgICAgICAgaWYgKGxheWVyLnR5cGUgIT09ICdjdXN0b20nICYmICFjb29yZHMubGVuZ3RoKSBjb250aW51ZTtcblxuICAgICAgICAgICAgdGhpcy5yZW5kZXJMYXllcih0aGlzLCBzb3VyY2VDYWNoZXNbbGF5ZXIuc291cmNlXSwgbGF5ZXIsIGNvb3Jkcyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZWJpbmQgdGhlIG1haW4gZnJhbWVidWZmZXIgbm93IHRoYXQgYWxsIG9mZnNjcmVlbiBsYXllcnMgaGF2ZSBiZWVuIHJlbmRlcmVkOlxuICAgICAgICB0aGlzLmNvbnRleHQuYmluZEZyYW1lYnVmZmVyLnNldChudWxsKTtcblxuICAgICAgICAvLyBDbGVhciBidWZmZXJzIGluIHByZXBhcmF0aW9uIGZvciBkcmF3aW5nIHRvIHRoZSBtYWluIGZyYW1lYnVmZmVyXG4gICAgICAgIHRoaXMuY29udGV4dC5jbGVhcih7Y29sb3I6IG9wdGlvbnMuc2hvd092ZXJkcmF3SW5zcGVjdG9yID8gQ29sb3IuYmxhY2sgOiBDb2xvci50cmFuc3BhcmVudCwgZGVwdGg6IDF9KTtcbiAgICAgICAgdGhpcy5jbGVhclN0ZW5jaWwoKTtcblxuICAgICAgICB0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3IgPSBvcHRpb25zLnNob3dPdmVyZHJhd0luc3BlY3RvcjtcbiAgICAgICAgdGhpcy5kZXB0aFJhbmdlRm9yM0QgPSBbMCwgMSAtICgoc3R5bGUuX29yZGVyLmxlbmd0aCArIDIpICogdGhpcy5udW1TdWJsYXllcnMgKiB0aGlzLmRlcHRoRXBzaWxvbildO1xuXG4gICAgICAgIC8vIE9wYXF1ZSBwYXNzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgIC8vIERyYXcgb3BhcXVlIGxheWVycyB0b3AtdG8tYm90dG9tIGZpcnN0LlxuICAgICAgICB0aGlzLnJlbmRlclBhc3MgPSAnb3BhcXVlJztcblxuICAgICAgICBmb3IgKHRoaXMuY3VycmVudExheWVyID0gbGF5ZXJJZHMubGVuZ3RoIC0gMTsgdGhpcy5jdXJyZW50TGF5ZXIgPj0gMDsgdGhpcy5jdXJyZW50TGF5ZXItLSkge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSB0aGlzLnN0eWxlLl9sYXllcnNbbGF5ZXJJZHNbdGhpcy5jdXJyZW50TGF5ZXJdXTtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlID0gc291cmNlQ2FjaGVzW2xheWVyLnNvdXJjZV07XG4gICAgICAgICAgICBjb25zdCBjb29yZHMgPSBjb29yZHNBc2NlbmRpbmdbbGF5ZXIuc291cmNlXTtcblxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyVGlsZUNsaXBwaW5nTWFza3MobGF5ZXIsIGNvb3Jkcyk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckxheWVyKHRoaXMsIHNvdXJjZUNhY2hlLCBsYXllciwgY29vcmRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRyYW5zbHVjZW50IHBhc3MgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgLy8gRHJhdyBhbGwgb3RoZXIgbGF5ZXJzIGJvdHRvbS10by10b3AuXG4gICAgICAgIHRoaXMucmVuZGVyUGFzcyA9ICd0cmFuc2x1Y2VudCc7XG5cbiAgICAgICAgZm9yICh0aGlzLmN1cnJlbnRMYXllciA9IDA7IHRoaXMuY3VycmVudExheWVyIDwgbGF5ZXJJZHMubGVuZ3RoOyB0aGlzLmN1cnJlbnRMYXllcisrKSB7XG4gICAgICAgICAgICBjb25zdCBsYXllciA9IHRoaXMuc3R5bGUuX2xheWVyc1tsYXllcklkc1t0aGlzLmN1cnJlbnRMYXllcl1dO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlQ2FjaGUgPSBzb3VyY2VDYWNoZXNbbGF5ZXIuc291cmNlXTtcblxuICAgICAgICAgICAgLy8gRm9yIHN5bWJvbCBsYXllcnMgaW4gdGhlIHRyYW5zbHVjZW50IHBhc3MsIHdlIGFkZCBleHRyYSB0aWxlcyB0byB0aGUgcmVuZGVyYWJsZSBzZXRcbiAgICAgICAgICAgIC8vIGZvciBjcm9zcy10aWxlIHN5bWJvbCBmYWRpbmcuIFN5bWJvbCBsYXllcnMgZG9uJ3QgdXNlIHRpbGUgY2xpcHBpbmcsIHNvIG5vIG5lZWQgdG8gcmVuZGVyXG4gICAgICAgICAgICAvLyBzZXBhcmF0ZSBjbGlwcGluZyBtYXNrc1xuICAgICAgICAgICAgY29uc3QgY29vcmRzID0gKGxheWVyLnR5cGUgPT09ICdzeW1ib2wnID8gY29vcmRzRGVzY2VuZGluZ1N5bWJvbCA6IGNvb3Jkc0Rlc2NlbmRpbmcpW2xheWVyLnNvdXJjZV07XG5cbiAgICAgICAgICAgIHRoaXMuX3JlbmRlclRpbGVDbGlwcGluZ01hc2tzKGxheWVyLCBjb29yZHNBc2NlbmRpbmdbbGF5ZXIuc291cmNlXSk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckxheWVyKHRoaXMsIHNvdXJjZUNhY2hlLCBsYXllciwgY29vcmRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd1RpbGVCb3VuZGFyaWVzKSB7XG4gICAgICAgICAgICAvL1VzZSBzb3VyY2Ugd2l0aCBoaWdoZXN0IG1heHpvb21cbiAgICAgICAgICAgIGxldCBzZWxlY3RlZFNvdXJjZTtcbiAgICAgICAgICAgIGxldCBzb3VyY2VDYWNoZTtcbiAgICAgICAgICAgIGNvbnN0IGxheWVycyA9IHZhbHVlcyh0aGlzLnN0eWxlLl9sYXllcnMpO1xuICAgICAgICAgICAgbGF5ZXJzLmZvckVhY2goKGxheWVyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGxheWVyLnNvdXJjZSAmJiAhbGF5ZXIuaXNIaWRkZW4odGhpcy50cmFuc2Zvcm0uem9vbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxheWVyLnNvdXJjZSAhPT0gKHNvdXJjZUNhY2hlICYmIHNvdXJjZUNhY2hlLmlkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlQ2FjaGUgPSB0aGlzLnN0eWxlLnNvdXJjZUNhY2hlc1tsYXllci5zb3VyY2VdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghc2VsZWN0ZWRTb3VyY2UgfHwgKHNlbGVjdGVkU291cmNlLmdldFNvdXJjZSgpLm1heHpvb20gPCBzb3VyY2VDYWNoZS5nZXRTb3VyY2UoKS5tYXh6b29tKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRTb3VyY2UgPSBzb3VyY2VDYWNoZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkU291cmNlKSB7XG4gICAgICAgICAgICAgICAgZHJhdy5kZWJ1Zyh0aGlzLCBzZWxlY3RlZFNvdXJjZSwgc2VsZWN0ZWRTb3VyY2UuZ2V0VmlzaWJsZUNvb3JkaW5hdGVzKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93UGFkZGluZykge1xuICAgICAgICAgICAgZHJhd0RlYnVnUGFkZGluZyh0aGlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCBkZWZhdWx0cyBmb3IgbW9zdCBHTCB2YWx1ZXMgc28gdGhhdCBhbnlvbmUgdXNpbmcgdGhlIHN0YXRlIGFmdGVyIHRoZSByZW5kZXJcbiAgICAgICAgLy8gZW5jb3VudGVycyBtb3JlIGV4cGVjdGVkIHZhbHVlcy5cbiAgICAgICAgdGhpcy5jb250ZXh0LnNldERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICByZW5kZXJMYXllcihwYWludGVyOiBQYWludGVyLCBzb3VyY2VDYWNoZTogU291cmNlQ2FjaGUsIGxheWVyOiBTdHlsZUxheWVyLCBjb29yZHM6IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+KSB7XG4gICAgICAgIGlmIChsYXllci5pc0hpZGRlbih0aGlzLnRyYW5zZm9ybS56b29tKSkgcmV0dXJuO1xuICAgICAgICBpZiAobGF5ZXIudHlwZSAhPT0gJ2JhY2tncm91bmQnICYmIGxheWVyLnR5cGUgIT09ICdjdXN0b20nICYmICFjb29yZHMubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIHRoaXMuaWQgPSBsYXllci5pZDtcblxuICAgICAgICB0aGlzLmdwdVRpbWluZ1N0YXJ0KGxheWVyKTtcbiAgICAgICAgZHJhd1tsYXllci50eXBlXShwYWludGVyLCBzb3VyY2VDYWNoZSwgbGF5ZXIsIGNvb3JkcywgdGhpcy5zdHlsZS5wbGFjZW1lbnQudmFyaWFibGVPZmZzZXRzKTtcbiAgICAgICAgdGhpcy5ncHVUaW1pbmdFbmQoKTtcbiAgICB9XG5cbiAgICBncHVUaW1pbmdTdGFydChsYXllcjogU3R5bGVMYXllcikge1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5ncHVUaW1pbmcpIHJldHVybjtcbiAgICAgICAgY29uc3QgZXh0ID0gdGhpcy5jb250ZXh0LmV4dFRpbWVyUXVlcnk7XG4gICAgICAgIC8vIFRoaXMgdHJpZXMgdG8gdGltZSB0aGUgZHJhdyBjYWxsIGl0c2VsZiwgYnV0IG5vdGUgdGhhdCB0aGUgY29zdCBmb3IgZHJhd2luZyBhIGxheWVyXG4gICAgICAgIC8vIG1heSBiZSBkb21pbmF0ZWQgYnkgdGhlIGNvc3Qgb2YgdXBsb2FkaW5nIHZlcnRpY2VzIHRvIHRoZSBHUFUuXG4gICAgICAgIC8vIFRvIGluc3RydW1lbnQgdGhhdCwgd2UnZCBuZWVkIHRvIHBhc3MgdGhlIGxheWVyVGltZXJzIG9iamVjdCBkb3duIGludG8gdGhlIGJ1Y2tldFxuICAgICAgICAvLyB1cGxvYWRpbmcgbG9naWMuXG4gICAgICAgIGxldCBsYXllclRpbWVyID0gdGhpcy5ncHVUaW1lcnNbbGF5ZXIuaWRdO1xuICAgICAgICBpZiAoIWxheWVyVGltZXIpIHtcbiAgICAgICAgICAgIGxheWVyVGltZXIgPSB0aGlzLmdwdVRpbWVyc1tsYXllci5pZF0gPSB7XG4gICAgICAgICAgICAgICAgY2FsbHM6IDAsXG4gICAgICAgICAgICAgICAgY3B1VGltZTogMCxcbiAgICAgICAgICAgICAgICBxdWVyeTogZXh0LmNyZWF0ZVF1ZXJ5RVhUKClcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGF5ZXJUaW1lci5jYWxscysrO1xuICAgICAgICBleHQuYmVnaW5RdWVyeUVYVChleHQuVElNRV9FTEFQU0VEX0VYVCwgbGF5ZXJUaW1lci5xdWVyeSk7XG4gICAgfVxuXG4gICAgZ3B1VGltaW5nRW5kKCkge1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5ncHVUaW1pbmcpIHJldHVybjtcbiAgICAgICAgY29uc3QgZXh0ID0gdGhpcy5jb250ZXh0LmV4dFRpbWVyUXVlcnk7XG4gICAgICAgIGV4dC5lbmRRdWVyeUVYVChleHQuVElNRV9FTEFQU0VEX0VYVCk7XG4gICAgfVxuXG4gICAgY29sbGVjdEdwdVRpbWVycygpIHtcbiAgICAgICAgY29uc3QgY3VycmVudExheWVyVGltZXJzID0gdGhpcy5ncHVUaW1lcnM7XG4gICAgICAgIHRoaXMuZ3B1VGltZXJzID0ge307XG4gICAgICAgIHJldHVybiBjdXJyZW50TGF5ZXJUaW1lcnM7XG4gICAgfVxuXG4gICAgcXVlcnlHcHVUaW1lcnMoZ3B1VGltZXJzOiB7W186IHN0cmluZ106IGFueX0pIHtcbiAgICAgICAgY29uc3QgbGF5ZXJzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJJZCBpbiBncHVUaW1lcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGdwdVRpbWVyID0gZ3B1VGltZXJzW2xheWVySWRdO1xuICAgICAgICAgICAgY29uc3QgZXh0ID0gdGhpcy5jb250ZXh0LmV4dFRpbWVyUXVlcnk7XG4gICAgICAgICAgICBjb25zdCBncHVUaW1lID0gZXh0LmdldFF1ZXJ5T2JqZWN0RVhUKGdwdVRpbWVyLnF1ZXJ5LCBleHQuUVVFUllfUkVTVUxUX0VYVCkgLyAoMTAwMCAqIDEwMDApO1xuICAgICAgICAgICAgZXh0LmRlbGV0ZVF1ZXJ5RVhUKGdwdVRpbWVyLnF1ZXJ5KTtcbiAgICAgICAgICAgIGxheWVyc1tsYXllcklkXSA9IGdwdVRpbWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxheWVycztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmFuc2Zvcm0gYSBtYXRyaXggdG8gaW5jb3Jwb3JhdGUgdGhlICotdHJhbnNsYXRlIGFuZCAqLXRyYW5zbGF0ZS1hbmNob3IgcHJvcGVydGllcyBpbnRvIGl0LlxuICAgICAqIEBwYXJhbSBpblZpZXdwb3J0UGl4ZWxVbml0c1VuaXRzIFRydWUgd2hlbiB0aGUgdW5pdHMgYWNjZXB0ZWQgYnkgdGhlIG1hdHJpeCBhcmUgaW4gdmlld3BvcnQgcGl4ZWxzIGluc3RlYWQgb2YgdGlsZSB1bml0cy5cbiAgICAgKiBAcmV0dXJucyB7RmxvYXQzMkFycmF5fSBtYXRyaXhcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRyYW5zbGF0ZVBvc01hdHJpeChtYXRyaXg6IEZsb2F0MzJBcnJheSwgdGlsZTogVGlsZSwgdHJhbnNsYXRlOiBbbnVtYmVyLCBudW1iZXJdLCB0cmFuc2xhdGVBbmNob3I6ICdtYXAnIHwgJ3ZpZXdwb3J0JywgaW5WaWV3cG9ydFBpeGVsVW5pdHNVbml0cz86IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKCF0cmFuc2xhdGVbMF0gJiYgIXRyYW5zbGF0ZVsxXSkgcmV0dXJuIG1hdHJpeDtcblxuICAgICAgICBjb25zdCBhbmdsZSA9IGluVmlld3BvcnRQaXhlbFVuaXRzVW5pdHMgP1xuICAgICAgICAgICAgKHRyYW5zbGF0ZUFuY2hvciA9PT0gJ21hcCcgPyB0aGlzLnRyYW5zZm9ybS5hbmdsZSA6IDApIDpcbiAgICAgICAgICAgICh0cmFuc2xhdGVBbmNob3IgPT09ICd2aWV3cG9ydCcgPyAtdGhpcy50cmFuc2Zvcm0uYW5nbGUgOiAwKTtcblxuICAgICAgICBpZiAoYW5nbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHNpbkEgPSBNYXRoLnNpbihhbmdsZSk7XG4gICAgICAgICAgICBjb25zdCBjb3NBID0gTWF0aC5jb3MoYW5nbGUpO1xuICAgICAgICAgICAgdHJhbnNsYXRlID0gW1xuICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVswXSAqIGNvc0EgLSB0cmFuc2xhdGVbMV0gKiBzaW5BLFxuICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVswXSAqIHNpbkEgKyB0cmFuc2xhdGVbMV0gKiBjb3NBXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdHJhbnNsYXRpb24gPSBbXG4gICAgICAgICAgICBpblZpZXdwb3J0UGl4ZWxVbml0c1VuaXRzID8gdHJhbnNsYXRlWzBdIDogcGl4ZWxzVG9UaWxlVW5pdHModGlsZSwgdHJhbnNsYXRlWzBdLCB0aGlzLnRyYW5zZm9ybS56b29tKSxcbiAgICAgICAgICAgIGluVmlld3BvcnRQaXhlbFVuaXRzVW5pdHMgPyB0cmFuc2xhdGVbMV0gOiBwaXhlbHNUb1RpbGVVbml0cyh0aWxlLCB0cmFuc2xhdGVbMV0sIHRoaXMudHJhbnNmb3JtLnpvb20pLFxuICAgICAgICAgICAgMFxuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZWRNYXRyaXggPSBuZXcgRmxvYXQzMkFycmF5KDE2KTtcbiAgICAgICAgbWF0NC50cmFuc2xhdGUodHJhbnNsYXRlZE1hdHJpeCwgbWF0cml4LCB0cmFuc2xhdGlvbik7XG4gICAgICAgIHJldHVybiB0cmFuc2xhdGVkTWF0cml4O1xuICAgIH1cblxuICAgIHNhdmVUaWxlVGV4dHVyZSh0ZXh0dXJlOiBUZXh0dXJlKSB7XG4gICAgICAgIGNvbnN0IHRleHR1cmVzID0gdGhpcy5fdGlsZVRleHR1cmVzW3RleHR1cmUuc2l6ZVswXV07XG4gICAgICAgIGlmICghdGV4dHVyZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX3RpbGVUZXh0dXJlc1t0ZXh0dXJlLnNpemVbMF1dID0gW3RleHR1cmVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGV4dHVyZXMucHVzaCh0ZXh0dXJlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFRpbGVUZXh0dXJlKHNpemU6IG51bWJlcikge1xuICAgICAgICBjb25zdCB0ZXh0dXJlcyA9IHRoaXMuX3RpbGVUZXh0dXJlc1tzaXplXTtcbiAgICAgICAgcmV0dXJuIHRleHR1cmVzICYmIHRleHR1cmVzLmxlbmd0aCA+IDAgPyB0ZXh0dXJlcy5wb3AoKSA6IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgYSBwYXR0ZXJuIGltYWdlIGlzIG5lZWRlZCwgYW5kIGlmIGl0IGlzLCB3aGV0aGVyIGl0IGlzIG5vdCBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB0cnVlIGlmIGEgbmVlZGVkIGltYWdlIGlzIG1pc3NpbmcgYW5kIHJlbmRlcmluZyBuZWVkcyB0byBiZSBza2lwcGVkLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgaXNQYXR0ZXJuTWlzc2luZyhpbWFnZTogP0Nyb3NzRmFkZWQ8UmVzb2x2ZWRJbWFnZT4pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCFpbWFnZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoIWltYWdlLmZyb20gfHwgIWltYWdlLnRvKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY29uc3QgaW1hZ2VQb3NBID0gdGhpcy5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybihpbWFnZS5mcm9tLnRvU3RyaW5nKCkpO1xuICAgICAgICBjb25zdCBpbWFnZVBvc0IgPSB0aGlzLmltYWdlTWFuYWdlci5nZXRQYXR0ZXJuKGltYWdlLnRvLnRvU3RyaW5nKCkpO1xuICAgICAgICByZXR1cm4gIWltYWdlUG9zQSB8fCAhaW1hZ2VQb3NCO1xuICAgIH1cblxuICAgIHVzZVByb2dyYW0obmFtZTogc3RyaW5nLCBwcm9ncmFtQ29uZmlndXJhdGlvbjogP1Byb2dyYW1Db25maWd1cmF0aW9uKTogUHJvZ3JhbTxhbnk+IHtcbiAgICAgICAgdGhpcy5jYWNoZSA9IHRoaXMuY2FjaGUgfHwge307XG4gICAgICAgIGNvbnN0IGtleSA9IGAke25hbWV9JHtwcm9ncmFtQ29uZmlndXJhdGlvbiA/IHByb2dyYW1Db25maWd1cmF0aW9uLmNhY2hlS2V5IDogJyd9JHt0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3IgPyAnL292ZXJkcmF3JyA6ICcnfWA7XG4gICAgICAgIGlmICghdGhpcy5jYWNoZVtrZXldKSB7XG4gICAgICAgICAgICB0aGlzLmNhY2hlW2tleV0gPSBuZXcgUHJvZ3JhbSh0aGlzLmNvbnRleHQsIHNoYWRlcnNbbmFtZV0sIHByb2dyYW1Db25maWd1cmF0aW9uLCBwcm9ncmFtVW5pZm9ybXNbbmFtZV0sIHRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVba2V5XTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIFJlc2V0IHNvbWUgR0wgc3RhdGUgdG8gZGVmYXVsdCB2YWx1ZXMgdG8gYXZvaWQgaGFyZC10by1kZWJ1ZyBidWdzXG4gICAgICogaW4gY3VzdG9tIGxheWVycy5cbiAgICAgKi9cbiAgICBzZXRDdXN0b21MYXllckRlZmF1bHRzKCkge1xuICAgICAgICAvLyBQcmV2ZW50IGN1c3RvbSBsYXllcnMgZnJvbSB1bmludGVudGlvbmFsbHkgbW9kaWZ5IHRoZSBsYXN0IFZBTyB1c2VkLlxuICAgICAgICAvLyBBbGwgb3RoZXIgc3RhdGUgaXMgc3RhdGUgaXMgcmVzdG9yZWQgb24gaXQncyBvd24sIGJ1dCBmb3IgVkFPcyBpdCdzXG4gICAgICAgIC8vIHNpbXBsZXIgdG8gdW5iaW5kIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byB0cmFjayB0aGUgc3RhdGUgb2YgVkFPcy5cbiAgICAgICAgdGhpcy5jb250ZXh0LnVuYmluZFZBTygpO1xuXG4gICAgICAgIC8vIFRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhpcyBzdGF0ZSBpcyBtZWFuaW5nZnVsIGFuZCBvZnRlbiBleHBlY3RlZC5cbiAgICAgICAgLy8gTGVhdmluZyB0aGlzIHN0YXRlIGRpcnR5IGNvdWxkIGNhdXNlIGEgbG90IG9mIGNvbmZ1c2lvbiBmb3IgdXNlcnMuXG4gICAgICAgIHRoaXMuY29udGV4dC5jdWxsRmFjZS5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnBpeGVsU3RvcmVVbnBhY2suc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmNvbnRleHQucGl4ZWxTdG9yZVVucGFja1ByZW11bHRpcGx5QWxwaGEuc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmNvbnRleHQucGl4ZWxTdG9yZVVucGFja0ZsaXBZLnNldERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIFNldCBHTCBzdGF0ZSB0aGF0IGlzIHNoYXJlZCBieSBhbGwgbGF5ZXJzLlxuICAgICAqL1xuICAgIHNldEJhc2VTdGF0ZSgpIHtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmNvbnRleHQuZ2w7XG4gICAgICAgIHRoaXMuY29udGV4dC5jdWxsRmFjZS5zZXQoZmFsc2UpO1xuICAgICAgICB0aGlzLmNvbnRleHQudmlld3BvcnQuc2V0KFswLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodF0pO1xuICAgICAgICB0aGlzLmNvbnRleHQuYmxlbmRFcXVhdGlvbi5zZXQoZ2wuRlVOQ19BREQpO1xuICAgIH1cblxuICAgIGluaXREZWJ1Z092ZXJsYXlDYW52YXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmRlYnVnT3ZlcmxheUNhbnZhcyA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmRlYnVnT3ZlcmxheUNhbnZhcyA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgICAgIHRoaXMuZGVidWdPdmVybGF5Q2FudmFzLndpZHRoID0gNTEyO1xuICAgICAgICAgICAgdGhpcy5kZWJ1Z092ZXJsYXlDYW52YXMuaGVpZ2h0ID0gNTEyO1xuICAgICAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmNvbnRleHQuZ2w7XG4gICAgICAgICAgICB0aGlzLmRlYnVnT3ZlcmxheVRleHR1cmUgPSBuZXcgVGV4dHVyZSh0aGlzLmNvbnRleHQsIHRoaXMuZGVidWdPdmVybGF5Q2FudmFzLCBnbC5SR0JBKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuZW1wdHlUZXh0dXJlLmRlc3Ryb3koKTtcbiAgICAgICAgaWYgKHRoaXMuZGVidWdPdmVybGF5VGV4dHVyZSkge1xuICAgICAgICAgICAgdGhpcy5kZWJ1Z092ZXJsYXlUZXh0dXJlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUGFpbnRlcjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7dmVjMywgdmVjNH0gZnJvbSAnZ2wtbWF0cml4JztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuY2xhc3MgRnJ1c3R1bSB7XG4gICAgcG9pbnRzOiBBcnJheTxBcnJheTxudW1iZXI+PjtcbiAgICBwbGFuZXM6IEFycmF5PEFycmF5PG51bWJlcj4+O1xuXG4gICAgY29uc3RydWN0b3IocG9pbnRzXzogQXJyYXk8QXJyYXk8bnVtYmVyPj4sIHBsYW5lc186IEFycmF5PEFycmF5PG51bWJlcj4+KSB7XG4gICAgICAgIHRoaXMucG9pbnRzID0gcG9pbnRzXztcbiAgICAgICAgdGhpcy5wbGFuZXMgPSBwbGFuZXNfO1xuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSW52UHJvamVjdGlvbk1hdHJpeChpbnZQcm9qOiBGbG9hdDY0QXJyYXksIHdvcmxkU2l6ZTogbnVtYmVyLCB6b29tOiBudW1iZXIpOiBGcnVzdHVtIHtcbiAgICAgICAgY29uc3QgY2xpcFNwYWNlQ29ybmVycyA9IFtcbiAgICAgICAgICAgIFstMSwgMSwgLTEsIDFdLFxuICAgICAgICAgICAgWyAxLCAxLCAtMSwgMV0sXG4gICAgICAgICAgICBbIDEsIC0xLCAtMSwgMV0sXG4gICAgICAgICAgICBbLTEsIC0xLCAtMSwgMV0sXG4gICAgICAgICAgICBbLTEsIDEsIDEsIDFdLFxuICAgICAgICAgICAgWyAxLCAxLCAxLCAxXSxcbiAgICAgICAgICAgIFsgMSwgLTEsIDEsIDFdLFxuICAgICAgICAgICAgWy0xLCAtMSwgMSwgMV1cbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBzY2FsZSA9IE1hdGgucG93KDIsIHpvb20pO1xuXG4gICAgICAgIC8vIFRyYW5zZm9ybSBmcnVzdHVtIGNvcm5lciBwb2ludHMgZnJvbSBjbGlwIHNwYWNlIHRvIHRpbGUgc3BhY2VcbiAgICAgICAgY29uc3QgZnJ1c3R1bUNvb3JkcyA9IGNsaXBTcGFjZUNvcm5lcnNcbiAgICAgICAgICAgIC5tYXAodiA9PiB2ZWM0LnRyYW5zZm9ybU1hdDQoW10sIHYsIGludlByb2opKVxuICAgICAgICAgICAgLm1hcCh2ID0+IHZlYzQuc2NhbGUoW10sIHYsIDEuMCAvIHZbM10gLyB3b3JsZFNpemUgKiBzY2FsZSkpO1xuXG4gICAgICAgIGNvbnN0IGZydXN0dW1QbGFuZVBvaW50SW5kaWNlcyA9IFtcbiAgICAgICAgICAgIFswLCAxLCAyXSwgIC8vIG5lYXJcbiAgICAgICAgICAgIFs2LCA1LCA0XSwgIC8vIGZhclxuICAgICAgICAgICAgWzAsIDMsIDddLCAgLy8gbGVmdFxuICAgICAgICAgICAgWzIsIDEsIDVdLCAgLy8gcmlnaHRcbiAgICAgICAgICAgIFszLCAyLCA2XSwgIC8vIGJvdHRvbVxuICAgICAgICAgICAgWzAsIDQsIDVdICAgLy8gdG9wXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgZnJ1c3R1bVBsYW5lcyA9IGZydXN0dW1QbGFuZVBvaW50SW5kaWNlcy5tYXAoKHA6IEFycmF5PG51bWJlcj4pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSB2ZWMzLnN1YihbXSwgZnJ1c3R1bUNvb3Jkc1twWzBdXSwgZnJ1c3R1bUNvb3Jkc1twWzFdXSk7XG4gICAgICAgICAgICBjb25zdCBiID0gdmVjMy5zdWIoW10sIGZydXN0dW1Db29yZHNbcFsyXV0sIGZydXN0dW1Db29yZHNbcFsxXV0pO1xuICAgICAgICAgICAgY29uc3QgbiA9IHZlYzMubm9ybWFsaXplKFtdLCB2ZWMzLmNyb3NzKFtdLCBhLCBiKSk7XG4gICAgICAgICAgICBjb25zdCBkID0gLXZlYzMuZG90KG4sIGZydXN0dW1Db29yZHNbcFsxXV0pO1xuICAgICAgICAgICAgcmV0dXJuIG4uY29uY2F0KGQpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gbmV3IEZydXN0dW0oZnJ1c3R1bUNvb3JkcywgZnJ1c3R1bVBsYW5lcyk7XG4gICAgfVxufVxuXG5jbGFzcyBBYWJiIHtcbiAgICBtaW46IHZlYzM7XG4gICAgbWF4OiB2ZWMzO1xuICAgIGNlbnRlcjogdmVjMztcblxuICAgIGNvbnN0cnVjdG9yKG1pbl86IHZlYzMsIG1heF86IHZlYzMpIHtcbiAgICAgICAgdGhpcy5taW4gPSBtaW5fO1xuICAgICAgICB0aGlzLm1heCA9IG1heF87XG4gICAgICAgIHRoaXMuY2VudGVyID0gdmVjMy5zY2FsZShbXSwgdmVjMy5hZGQoW10sIHRoaXMubWluLCB0aGlzLm1heCksIDAuNSk7XG4gICAgfVxuXG4gICAgcXVhZHJhbnQoaW5kZXg6IG51bWJlcik6IEFhYmIge1xuICAgICAgICBjb25zdCBzcGxpdCA9IFsoaW5kZXggJSAyKSA9PT0gMCwgaW5kZXggPCAyXTtcbiAgICAgICAgY29uc3QgcU1pbiA9IHZlYzMuY2xvbmUodGhpcy5taW4pO1xuICAgICAgICBjb25zdCBxTWF4ID0gdmVjMy5jbG9uZSh0aGlzLm1heCk7XG4gICAgICAgIGZvciAobGV0IGF4aXMgPSAwOyBheGlzIDwgc3BsaXQubGVuZ3RoOyBheGlzKyspIHtcbiAgICAgICAgICAgIHFNaW5bYXhpc10gPSBzcGxpdFtheGlzXSA/IHRoaXMubWluW2F4aXNdIDogdGhpcy5jZW50ZXJbYXhpc107XG4gICAgICAgICAgICBxTWF4W2F4aXNdID0gc3BsaXRbYXhpc10gPyB0aGlzLmNlbnRlcltheGlzXSA6IHRoaXMubWF4W2F4aXNdO1xuICAgICAgICB9XG4gICAgICAgIC8vIEVsZXZhdGlvbiBpcyBhbHdheXMgY29uc3RhbnQsIGhlbmNlIHF1YWRyYW50Lm1heC56ID0gdGhpcy5tYXguelxuICAgICAgICBxTWF4WzJdID0gdGhpcy5tYXhbMl07XG4gICAgICAgIHJldHVybiBuZXcgQWFiYihxTWluLCBxTWF4KTtcbiAgICB9XG5cbiAgICBkaXN0YW5jZVgocG9pbnQ6IEFycmF5PG51bWJlcj4pOiBudW1iZXIge1xuICAgICAgICBjb25zdCBwb2ludE9uQWFiYiA9IE1hdGgubWF4KE1hdGgubWluKHRoaXMubWF4WzBdLCBwb2ludFswXSksIHRoaXMubWluWzBdKTtcbiAgICAgICAgcmV0dXJuIHBvaW50T25BYWJiIC0gcG9pbnRbMF07XG4gICAgfVxuXG4gICAgZGlzdGFuY2VZKHBvaW50OiBBcnJheTxudW1iZXI+KTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgcG9pbnRPbkFhYmIgPSBNYXRoLm1heChNYXRoLm1pbih0aGlzLm1heFsxXSwgcG9pbnRbMV0pLCB0aGlzLm1pblsxXSk7XG4gICAgICAgIHJldHVybiBwb2ludE9uQWFiYiAtIHBvaW50WzFdO1xuICAgIH1cblxuICAgIC8vIFBlcmZvcm1zIGEgZnJ1c3R1bS1hYWJiIGludGVyc2VjdGlvbiB0ZXN0LiBSZXR1cm5zIDAgaWYgdGhlcmUncyBubyBpbnRlcnNlY3Rpb24sXG4gICAgLy8gMSBpZiBzaGFwZXMgYXJlIGludGVyc2VjdGluZyBhbmQgMiBpZiB0aGUgYWFiYiBpZiBmdWxseSBpbnNpZGUgdGhlIGZydXN0dW0uXG4gICAgaW50ZXJzZWN0cyhmcnVzdHVtOiBGcnVzdHVtKTogbnVtYmVyIHtcbiAgICAgICAgLy8gRXhlY3V0ZSBzZXBhcmF0aW5nIGF4aXMgdGVzdCBiZXR3ZWVuIHR3byBjb252ZXggb2JqZWN0cyB0byBmaW5kIGludGVyc2VjdGlvbnNcbiAgICAgICAgLy8gRWFjaCBmcnVzdHVtIHBsYW5lIHRvZ2V0aGVyIHdpdGggMyBtYWpvciBheGVzIGRlZmluZSB0aGUgc2VwYXJhdGluZyBheGVzXG4gICAgICAgIC8vIE5vdGU6IHRlc3Qgb25seSA0IHBvaW50cyBhcyBib3RoIG1pbiBhbmQgbWF4IHBvaW50cyBoYXZlIGVxdWFsIGVsZXZhdGlvblxuICAgICAgICBhc3NlcnQodGhpcy5taW5bMl0gPT09IDAgJiYgdGhpcy5tYXhbMl0gPT09IDApO1xuXG4gICAgICAgIGNvbnN0IGFhYmJQb2ludHMgPSBbXG4gICAgICAgICAgICBbdGhpcy5taW5bMF0sIHRoaXMubWluWzFdLCAwLjAsIDFdLFxuICAgICAgICAgICAgW3RoaXMubWF4WzBdLCB0aGlzLm1pblsxXSwgMC4wLCAxXSxcbiAgICAgICAgICAgIFt0aGlzLm1heFswXSwgdGhpcy5tYXhbMV0sIDAuMCwgMV0sXG4gICAgICAgICAgICBbdGhpcy5taW5bMF0sIHRoaXMubWF4WzFdLCAwLjAsIDFdXG4gICAgICAgIF07XG5cbiAgICAgICAgbGV0IGZ1bGx5SW5zaWRlID0gdHJ1ZTtcblxuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IGZydXN0dW0ucGxhbmVzLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBjb25zdCBwbGFuZSA9IGZydXN0dW0ucGxhbmVzW3BdO1xuICAgICAgICAgICAgbGV0IHBvaW50c0luc2lkZSA9IDA7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWFiYlBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHBvaW50c0luc2lkZSArPSB2ZWM0LmRvdChwbGFuZSwgYWFiYlBvaW50c1tpXSkgPj0gMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHBvaW50c0luc2lkZSA9PT0gMClcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcblxuICAgICAgICAgICAgaWYgKHBvaW50c0luc2lkZSAhPT0gYWFiYlBvaW50cy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgZnVsbHlJbnNpZGUgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmdWxseUluc2lkZSlcbiAgICAgICAgICAgIHJldHVybiAyO1xuXG4gICAgICAgIGZvciAobGV0IGF4aXMgPSAwOyBheGlzIDwgMzsgYXhpcysrKSB7XG4gICAgICAgICAgICBsZXQgcHJvak1pbiA9IE51bWJlci5NQVhfVkFMVUU7XG4gICAgICAgICAgICBsZXQgcHJvak1heCA9IC1OdW1iZXIuTUFYX1ZBTFVFO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IGZydXN0dW0ucG9pbnRzLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvamVjdGVkUG9pbnQgPSBmcnVzdHVtLnBvaW50c1twXVtheGlzXSAtIHRoaXMubWluW2F4aXNdO1xuXG4gICAgICAgICAgICAgICAgcHJvak1pbiA9IE1hdGgubWluKHByb2pNaW4sIHByb2plY3RlZFBvaW50KTtcbiAgICAgICAgICAgICAgICBwcm9qTWF4ID0gTWF0aC5tYXgocHJvak1heCwgcHJvamVjdGVkUG9pbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocHJvak1heCA8IDAgfHwgcHJvak1pbiA+IHRoaXMubWF4W2F4aXNdIC0gdGhpcy5taW5bYXhpc10pXG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG59XG5leHBvcnQge1xuICAgIEFhYmIsXG4gICAgRnJ1c3R1bVxufTtcbiIsIi8vIEBmbG93XG5pbXBvcnQge251bWJlcn0gZnJvbSBcIi4uL3N0eWxlLXNwZWMvdXRpbC9pbnRlcnBvbGF0ZVwiO1xuaW1wb3J0IFBvaW50ICBmcm9tIFwiQG1hcGJveC9wb2ludC1nZW9tZXRyeVwiO1xuaW1wb3J0IHtjbGFtcH0gZnJvbSBcIi4uL3V0aWwvdXRpbFwiO1xuXG4vKipcbiAqIEFuIGBFZGdlSW5zZXRgIG9iamVjdCByZXByZXNlbnRzIHNjcmVlbiBzcGFjZSBwYWRkaW5nIGFwcGxpZWQgdG8gdGhlIGVkZ2VzIG9mIHRoZSB2aWV3cG9ydC5cbiAqIFRoaXMgc2hpZnRzIHRoZSBhcHByZW50IGNlbnRlciBvciB0aGUgdmFuaXNoaW5nIHBvaW50IG9mIHRoZSBtYXAuIFRoaXMgaXMgdXNlZnVsIGZvciBhZGRpbmcgZmxvYXRpbmcgVUkgZWxlbWVudHNcbiAqIG9uIHRvcCBvZiB0aGUgbWFwIGFuZCBoYXZpbmcgdGhlIHZhbmlzaGluZyBwb2ludCBzaGlmdCBhcyBVSSBlbGVtZW50cyByZXNpemUuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IFt0b3A9MF1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYm90dG9tPTBdXG4gKiBAcGFyYW0ge251bWJlcn0gW2xlZnQ9MF1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbcmlnaHQ9MF1cbiAqL1xuY2xhc3MgRWRnZUluc2V0cyB7XG4gICAgdG9wOiBudW1iZXI7XG4gICAgYm90dG9tOiBudW1iZXI7XG4gICAgbGVmdDogbnVtYmVyO1xuICAgIHJpZ2h0OiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3Rvcih0b3A6IG51bWJlciA9IDAsIGJvdHRvbTogbnVtYmVyID0gMCwgbGVmdDogbnVtYmVyID0gMCwgcmlnaHQ6IG51bWJlciA9IDApIHtcbiAgICAgICAgaWYgKGlzTmFOKHRvcCkgfHwgdG9wIDwgMCB8fFxuICAgICAgICAgICAgaXNOYU4oYm90dG9tKSB8fCBib3R0b20gPCAwIHx8XG4gICAgICAgICAgICBpc05hTihsZWZ0KSB8fCBsZWZ0IDwgMCB8fFxuICAgICAgICAgICAgaXNOYU4ocmlnaHQpIHx8IHJpZ2h0IDwgMFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB2YWx1ZSBmb3IgZWRnZS1pbnNldHMsIHRvcCwgYm90dG9tLCBsZWZ0IGFuZCByaWdodCBtdXN0IGFsbCBiZSBudW1iZXJzJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRvcCA9IHRvcDtcbiAgICAgICAgdGhpcy5ib3R0b20gPSBib3R0b207XG4gICAgICAgIHRoaXMubGVmdCA9IGxlZnQ7XG4gICAgICAgIHRoaXMucmlnaHQgPSByaWdodDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcnBvbGF0ZXMgdGhlIGluc2V0IGluLXBsYWNlLlxuICAgICAqIFRoaXMgbWFpbnRhaW5zIHRoZSBjdXJyZW50IGluc2V0IHZhbHVlIGZvciBhbnkgaW5zZXQgbm90IHByZXNlbnQgaW4gYHRhcmdldGAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1BhZGRpbmdPcHRpb25zfSB0YXJnZXRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdFxuICAgICAqIEByZXR1cm5zIHtFZGdlSW5zZXRzfVxuICAgICAqIEBtZW1iZXJvZiBFZGdlSW5zZXRzXG4gICAgICovXG4gICAgaW50ZXJwb2xhdGUoc3RhcnQ6IFBhZGRpbmdPcHRpb25zIHwgRWRnZUluc2V0cywgdGFyZ2V0OiBQYWRkaW5nT3B0aW9ucywgdDogbnVtYmVyKTogRWRnZUluc2V0cyB7XG4gICAgICAgIGlmICh0YXJnZXQudG9wICE9IG51bGwgJiYgc3RhcnQudG9wICE9IG51bGwpIHRoaXMudG9wID0gbnVtYmVyKHN0YXJ0LnRvcCwgdGFyZ2V0LnRvcCwgdCk7XG4gICAgICAgIGlmICh0YXJnZXQuYm90dG9tICE9IG51bGwgJiYgc3RhcnQuYm90dG9tICE9IG51bGwpIHRoaXMuYm90dG9tID0gbnVtYmVyKHN0YXJ0LmJvdHRvbSwgdGFyZ2V0LmJvdHRvbSwgdCk7XG4gICAgICAgIGlmICh0YXJnZXQubGVmdCAhPSBudWxsICYmIHN0YXJ0LmxlZnQgIT0gbnVsbCkgdGhpcy5sZWZ0ID0gbnVtYmVyKHN0YXJ0LmxlZnQsIHRhcmdldC5sZWZ0LCB0KTtcbiAgICAgICAgaWYgKHRhcmdldC5yaWdodCAhPSBudWxsICYmIHN0YXJ0LnJpZ2h0ICE9IG51bGwpIHRoaXMucmlnaHQgPSBudW1iZXIoc3RhcnQucmlnaHQsIHRhcmdldC5yaWdodCwgdCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXRpbGl0eSBtZXRob2QgdGhhdCBjb21wdXRlcyB0aGUgbmV3IGFwcHJlbnQgY2VudGVyIG9yIHZhbmlzaGluZyBwb2ludCBhZnRlciBhcHBseWluZyBpbnNldHMuXG4gICAgICogVGhpcyBpcyBpbiBwaXhlbHMgYW5kIHdpdGggdGhlIHRvcCBsZWZ0IGJlaW5nICgwLjApIGFuZCAreSBiZWluZyBkb3dud2FyZHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0XG4gICAgICogQHJldHVybnMge1BvaW50fVxuICAgICAqIEBtZW1iZXJvZiBFZGdlSW5zZXRzXG4gICAgICovXG4gICAgZ2V0Q2VudGVyKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogUG9pbnQge1xuICAgICAgICAvLyBDbGFtcCBpbnNldHMgc28gdGhleSBuZXZlciBvdmVyZmxvdyB3aWR0aC9oZWlnaHQgYW5kIGFsd2F5cyBjYWxjdWxhdGUgYSB2YWxpZCBjZW50ZXJcbiAgICAgICAgY29uc3QgeCA9IGNsYW1wKCh0aGlzLmxlZnQgKyB3aWR0aCAtIHRoaXMucmlnaHQpIC8gMiwgMCwgd2lkdGgpO1xuICAgICAgICBjb25zdCB5ID0gY2xhbXAoKHRoaXMudG9wICsgaGVpZ2h0IC0gdGhpcy5ib3R0b20pIC8gMiwgMCwgaGVpZ2h0KTtcblxuICAgICAgICByZXR1cm4gbmV3IFBvaW50KHgsIHkpO1xuICAgIH1cblxuICAgIGVxdWFscyhvdGhlcjogUGFkZGluZ09wdGlvbnMpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9wID09PSBvdGhlci50b3AgJiZcbiAgICAgICAgICAgIHRoaXMuYm90dG9tID09PSBvdGhlci5ib3R0b20gJiZcbiAgICAgICAgICAgIHRoaXMubGVmdCA9PT0gb3RoZXIubGVmdCAmJlxuICAgICAgICAgICAgdGhpcy5yaWdodCA9PT0gb3RoZXIucmlnaHQ7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogRWRnZUluc2V0cyB7XG4gICAgICAgIHJldHVybiBuZXcgRWRnZUluc2V0cyh0aGlzLnRvcCwgdGhpcy5ib3R0b20sIHRoaXMubGVmdCwgdGhpcy5yaWdodCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBzZHRhdGUgYXMganNvbiwgdXNlZnVsIHdoZW4geW91IHdhbnQgdG8gaGF2ZSBhXG4gICAgICogcmVhZC1vbmx5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpbnNldC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtQYWRkaW5nT3B0aW9uc31cbiAgICAgKiBAbWVtYmVyb2YgRWRnZUluc2V0c1xuICAgICAqL1xuICAgIHRvSlNPTigpOiBQYWRkaW5nT3B0aW9ucyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0b3A6IHRoaXMudG9wLFxuICAgICAgICAgICAgYm90dG9tOiB0aGlzLmJvdHRvbSxcbiAgICAgICAgICAgIGxlZnQ6IHRoaXMubGVmdCxcbiAgICAgICAgICAgIHJpZ2h0OiB0aGlzLnJpZ2h0XG4gICAgICAgIH07XG4gICAgfVxufVxuXG5leHBvcnQgdHlwZSBQYWRkaW5nT3B0aW9ucyA9IHt0b3A6ID9udW1iZXIsIGJvdHRvbTogP251bWJlciwgcmlnaHQ6ID9udW1iZXIsIGxlZnQ6ID9udW1iZXJ9O1xuXG5leHBvcnQgZGVmYXVsdCBFZGdlSW5zZXRzO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IExuZ0xhdCBmcm9tICcuL2xuZ19sYXQnO1xuaW1wb3J0IExuZ0xhdEJvdW5kcyBmcm9tICcuL2xuZ19sYXRfYm91bmRzJztcbmltcG9ydCBNZXJjYXRvckNvb3JkaW5hdGUsIHttZXJjYXRvclhmcm9tTG5nLCBtZXJjYXRvcllmcm9tTGF0LCBtZXJjYXRvclpmcm9tQWx0aXR1ZGV9IGZyb20gJy4vbWVyY2F0b3JfY29vcmRpbmF0ZSc7XG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQge3dyYXAsIGNsYW1wfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHtudW1iZXIgYXMgaW50ZXJwb2xhdGV9IGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9pbnRlcnBvbGF0ZSc7XG5pbXBvcnQgRVhURU5UIGZyb20gJy4uL2RhdGEvZXh0ZW50JztcbmltcG9ydCB7dmVjNCwgbWF0NCwgbWF0MiwgdmVjMn0gZnJvbSAnZ2wtbWF0cml4JztcbmltcG9ydCB7QWFiYiwgRnJ1c3R1bX0gZnJvbSAnLi4vdXRpbC9wcmltaXRpdmVzLmpzJztcbmltcG9ydCBFZGdlSW5zZXRzIGZyb20gJy4vZWRnZV9pbnNldHMnO1xuXG5pbXBvcnQge1Vud3JhcHBlZFRpbGVJRCwgT3ZlcnNjYWxlZFRpbGVJRCwgQ2Fub25pY2FsVGlsZUlEfSBmcm9tICcuLi9zb3VyY2UvdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSB7UGFkZGluZ09wdGlvbnN9IGZyb20gJy4vZWRnZV9pbnNldHMnO1xuXG4vKipcbiAqIEEgc2luZ2xlIHRyYW5zZm9ybSwgZ2VuZXJhbGx5IHVzZWQgZm9yIGEgc2luZ2xlIHRpbGUgdG8gYmVcbiAqIHNjYWxlZCwgcm90YXRlZCwgYW5kIHpvb21lZC5cbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFRyYW5zZm9ybSB7XG4gICAgdGlsZVNpemU6IG51bWJlcjtcbiAgICB0aWxlWm9vbTogbnVtYmVyO1xuICAgIGxuZ1JhbmdlOiA/W251bWJlciwgbnVtYmVyXTtcbiAgICBsYXRSYW5nZTogP1tudW1iZXIsIG51bWJlcl07XG4gICAgbWF4VmFsaWRMYXRpdHVkZTogbnVtYmVyO1xuICAgIHNjYWxlOiBudW1iZXI7XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBoZWlnaHQ6IG51bWJlcjtcbiAgICBhbmdsZTogbnVtYmVyO1xuICAgIHJvdGF0aW9uTWF0cml4OiBGbG9hdDY0QXJyYXk7XG4gICAgem9vbUZyYWN0aW9uOiBudW1iZXI7XG4gICAgcGl4ZWxzVG9HTFVuaXRzOiBbbnVtYmVyLCBudW1iZXJdO1xuICAgIGNhbWVyYVRvQ2VudGVyRGlzdGFuY2U6IG51bWJlcjtcbiAgICBtZXJjYXRvck1hdHJpeDogQXJyYXk8bnVtYmVyPjtcbiAgICBwcm9qTWF0cml4OiBGbG9hdDY0QXJyYXk7XG4gICAgaW52UHJvak1hdHJpeDogRmxvYXQ2NEFycmF5O1xuICAgIGFsaWduZWRQcm9qTWF0cml4OiBGbG9hdDY0QXJyYXk7XG4gICAgcGl4ZWxNYXRyaXg6IEZsb2F0NjRBcnJheTtcbiAgICBwaXhlbE1hdHJpeEludmVyc2U6IEZsb2F0NjRBcnJheTtcbiAgICBnbENvb3JkTWF0cml4OiBGbG9hdDMyQXJyYXk7XG4gICAgbGFiZWxQbGFuZU1hdHJpeDogRmxvYXQzMkFycmF5O1xuICAgIF9mb3Y6IG51bWJlcjtcbiAgICBfcGl0Y2g6IG51bWJlcjtcbiAgICBfem9vbTogbnVtYmVyO1xuICAgIF91bm1vZGlmaWVkOiBib29sZWFuO1xuICAgIF9yZW5kZXJXb3JsZENvcGllczogYm9vbGVhbjtcbiAgICBfbWluWm9vbTogbnVtYmVyO1xuICAgIF9tYXhab29tOiBudW1iZXI7XG4gICAgX21pblBpdGNoOiBudW1iZXI7XG4gICAgX21heFBpdGNoOiBudW1iZXI7XG4gICAgX2NlbnRlcjogTG5nTGF0O1xuICAgIF9lZGdlSW5zZXRzOiBFZGdlSW5zZXRzO1xuICAgIF9jb25zdHJhaW5pbmc6IGJvb2xlYW47XG4gICAgX3Bvc01hdHJpeENhY2hlOiB7W186IHN0cmluZ106IEZsb2F0MzJBcnJheX07XG4gICAgX2FsaWduZWRQb3NNYXRyaXhDYWNoZToge1tfOiBzdHJpbmddOiBGbG9hdDMyQXJyYXl9O1xuXG4gICAgY29uc3RydWN0b3IobWluWm9vbTogP251bWJlciwgbWF4Wm9vbTogP251bWJlciwgbWluUGl0Y2g6ID9udW1iZXIsIG1heFBpdGNoOiA/bnVtYmVyLCByZW5kZXJXb3JsZENvcGllczogYm9vbGVhbiB8IHZvaWQpIHtcbiAgICAgICAgdGhpcy50aWxlU2l6ZSA9IDUxMjsgLy8gY29uc3RhbnRcbiAgICAgICAgdGhpcy5tYXhWYWxpZExhdGl0dWRlID0gODUuMDUxMTI5OyAvLyBjb25zdGFudFxuXG4gICAgICAgIHRoaXMuX3JlbmRlcldvcmxkQ29waWVzID0gcmVuZGVyV29ybGRDb3BpZXMgPT09IHVuZGVmaW5lZCA/IHRydWUgOiByZW5kZXJXb3JsZENvcGllcztcbiAgICAgICAgdGhpcy5fbWluWm9vbSA9IG1pblpvb20gfHwgMDtcbiAgICAgICAgdGhpcy5fbWF4Wm9vbSA9IG1heFpvb20gfHwgMjI7XG5cbiAgICAgICAgdGhpcy5fbWluUGl0Y2ggPSAobWluUGl0Y2ggPT09IHVuZGVmaW5lZCB8fCBtaW5QaXRjaCA9PT0gbnVsbCkgPyAwIDogbWluUGl0Y2g7XG4gICAgICAgIHRoaXMuX21heFBpdGNoID0gKG1heFBpdGNoID09PSB1bmRlZmluZWQgfHwgbWF4UGl0Y2ggPT09IG51bGwpID8gNjAgOiBtYXhQaXRjaDtcblxuICAgICAgICB0aGlzLnNldE1heEJvdW5kcygpO1xuXG4gICAgICAgIHRoaXMud2lkdGggPSAwO1xuICAgICAgICB0aGlzLmhlaWdodCA9IDA7XG4gICAgICAgIHRoaXMuX2NlbnRlciA9IG5ldyBMbmdMYXQoMCwgMCk7XG4gICAgICAgIHRoaXMuem9vbSA9IDA7XG4gICAgICAgIHRoaXMuYW5nbGUgPSAwO1xuICAgICAgICB0aGlzLl9mb3YgPSAwLjY0MzUwMTEwODc5MzI4NDQ7XG4gICAgICAgIHRoaXMuX3BpdGNoID0gMDtcbiAgICAgICAgdGhpcy5fdW5tb2RpZmllZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX2VkZ2VJbnNldHMgPSBuZXcgRWRnZUluc2V0cygpO1xuICAgICAgICB0aGlzLl9wb3NNYXRyaXhDYWNoZSA9IHt9O1xuICAgICAgICB0aGlzLl9hbGlnbmVkUG9zTWF0cml4Q2FjaGUgPSB7fTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBUcmFuc2Zvcm0ge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBUcmFuc2Zvcm0odGhpcy5fbWluWm9vbSwgdGhpcy5fbWF4Wm9vbSwgdGhpcy5fbWluUGl0Y2gsIHRoaXMubWF4UGl0Y2gsIHRoaXMuX3JlbmRlcldvcmxkQ29waWVzKTtcbiAgICAgICAgY2xvbmUudGlsZVNpemUgPSB0aGlzLnRpbGVTaXplO1xuICAgICAgICBjbG9uZS5sYXRSYW5nZSA9IHRoaXMubGF0UmFuZ2U7XG4gICAgICAgIGNsb25lLndpZHRoID0gdGhpcy53aWR0aDtcbiAgICAgICAgY2xvbmUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG4gICAgICAgIGNsb25lLl9jZW50ZXIgPSB0aGlzLl9jZW50ZXI7XG4gICAgICAgIGNsb25lLnpvb20gPSB0aGlzLnpvb207XG4gICAgICAgIGNsb25lLmFuZ2xlID0gdGhpcy5hbmdsZTtcbiAgICAgICAgY2xvbmUuX2ZvdiA9IHRoaXMuX2ZvdjtcbiAgICAgICAgY2xvbmUuX3BpdGNoID0gdGhpcy5fcGl0Y2g7XG4gICAgICAgIGNsb25lLl91bm1vZGlmaWVkID0gdGhpcy5fdW5tb2RpZmllZDtcbiAgICAgICAgY2xvbmUuX2VkZ2VJbnNldHMgPSB0aGlzLl9lZGdlSW5zZXRzLmNsb25lKCk7XG4gICAgICAgIGNsb25lLl9jYWxjTWF0cmljZXMoKTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGdldCBtaW5ab29tKCk6IG51bWJlciB7IHJldHVybiB0aGlzLl9taW5ab29tOyB9XG4gICAgc2V0IG1pblpvb20oem9vbTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLl9taW5ab29tID09PSB6b29tKSByZXR1cm47XG4gICAgICAgIHRoaXMuX21pblpvb20gPSB6b29tO1xuICAgICAgICB0aGlzLnpvb20gPSBNYXRoLm1heCh0aGlzLnpvb20sIHpvb20pO1xuICAgIH1cblxuICAgIGdldCBtYXhab29tKCk6IG51bWJlciB7IHJldHVybiB0aGlzLl9tYXhab29tOyB9XG4gICAgc2V0IG1heFpvb20oem9vbTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLl9tYXhab29tID09PSB6b29tKSByZXR1cm47XG4gICAgICAgIHRoaXMuX21heFpvb20gPSB6b29tO1xuICAgICAgICB0aGlzLnpvb20gPSBNYXRoLm1pbih0aGlzLnpvb20sIHpvb20pO1xuICAgIH1cblxuICAgIGdldCBtaW5QaXRjaCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5fbWluUGl0Y2g7IH1cbiAgICBzZXQgbWluUGl0Y2gocGl0Y2g6IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5fbWluUGl0Y2ggPT09IHBpdGNoKSByZXR1cm47XG4gICAgICAgIHRoaXMuX21pblBpdGNoID0gcGl0Y2g7XG4gICAgICAgIHRoaXMucGl0Y2ggPSBNYXRoLm1heCh0aGlzLnBpdGNoLCBwaXRjaCk7XG4gICAgfVxuXG4gICAgZ2V0IG1heFBpdGNoKCk6IG51bWJlciB7IHJldHVybiB0aGlzLl9tYXhQaXRjaDsgfVxuICAgIHNldCBtYXhQaXRjaChwaXRjaDogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLl9tYXhQaXRjaCA9PT0gcGl0Y2gpIHJldHVybjtcbiAgICAgICAgdGhpcy5fbWF4UGl0Y2ggPSBwaXRjaDtcbiAgICAgICAgdGhpcy5waXRjaCA9IE1hdGgubWluKHRoaXMucGl0Y2gsIHBpdGNoKTtcbiAgICB9XG5cbiAgICBnZXQgcmVuZGVyV29ybGRDb3BpZXMoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9yZW5kZXJXb3JsZENvcGllczsgfVxuICAgIHNldCByZW5kZXJXb3JsZENvcGllcyhyZW5kZXJXb3JsZENvcGllcz86ID9ib29sZWFuKSB7XG4gICAgICAgIGlmIChyZW5kZXJXb3JsZENvcGllcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZW5kZXJXb3JsZENvcGllcyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAocmVuZGVyV29ybGRDb3BpZXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJlbmRlcldvcmxkQ29waWVzID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9yZW5kZXJXb3JsZENvcGllcyA9IHJlbmRlcldvcmxkQ29waWVzO1xuICAgIH1cblxuICAgIGdldCB3b3JsZFNpemUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGlsZVNpemUgKiB0aGlzLnNjYWxlO1xuICAgIH1cblxuICAgIGdldCBjZW50ZXJPZmZzZXQoKTogUG9pbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5jZW50ZXJQb2ludC5fc3ViKHRoaXMuc2l6ZS5fZGl2KDIpKTtcbiAgICB9XG5cbiAgICBnZXQgc2l6ZSgpOiBQb2ludCB7XG4gICAgICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuICAgIH1cblxuICAgIGdldCBiZWFyaW5nKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAtdGhpcy5hbmdsZSAvIE1hdGguUEkgKiAxODA7XG4gICAgfVxuICAgIHNldCBiZWFyaW5nKGJlYXJpbmc6IG51bWJlcikge1xuICAgICAgICBjb25zdCBiID0gLXdyYXAoYmVhcmluZywgLTE4MCwgMTgwKSAqIE1hdGguUEkgLyAxODA7XG4gICAgICAgIGlmICh0aGlzLmFuZ2xlID09PSBiKSByZXR1cm47XG4gICAgICAgIHRoaXMuX3VubW9kaWZpZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hbmdsZSA9IGI7XG4gICAgICAgIHRoaXMuX2NhbGNNYXRyaWNlcygpO1xuXG4gICAgICAgIC8vIDJ4MiBtYXRyaXggZm9yIHJvdGF0aW5nIHBvaW50c1xuICAgICAgICB0aGlzLnJvdGF0aW9uTWF0cml4ID0gbWF0Mi5jcmVhdGUoKTtcbiAgICAgICAgbWF0Mi5yb3RhdGUodGhpcy5yb3RhdGlvbk1hdHJpeCwgdGhpcy5yb3RhdGlvbk1hdHJpeCwgdGhpcy5hbmdsZSk7XG4gICAgfVxuXG4gICAgZ2V0IHBpdGNoKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9waXRjaCAvIE1hdGguUEkgKiAxODA7XG4gICAgfVxuICAgIHNldCBwaXRjaChwaXRjaDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHAgPSBjbGFtcChwaXRjaCwgdGhpcy5taW5QaXRjaCwgdGhpcy5tYXhQaXRjaCkgLyAxODAgKiBNYXRoLlBJO1xuICAgICAgICBpZiAodGhpcy5fcGl0Y2ggPT09IHApIHJldHVybjtcbiAgICAgICAgdGhpcy5fdW5tb2RpZmllZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9waXRjaCA9IHA7XG4gICAgICAgIHRoaXMuX2NhbGNNYXRyaWNlcygpO1xuICAgIH1cblxuICAgIGdldCBmb3YoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZvdiAvIE1hdGguUEkgKiAxODA7XG4gICAgfVxuICAgIHNldCBmb3YoZm92OiBudW1iZXIpIHtcbiAgICAgICAgZm92ID0gTWF0aC5tYXgoMC4wMSwgTWF0aC5taW4oNjAsIGZvdikpO1xuICAgICAgICBpZiAodGhpcy5fZm92ID09PSBmb3YpIHJldHVybjtcbiAgICAgICAgdGhpcy5fdW5tb2RpZmllZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9mb3YgPSBmb3YgLyAxODAgKiBNYXRoLlBJO1xuICAgICAgICB0aGlzLl9jYWxjTWF0cmljZXMoKTtcbiAgICB9XG5cbiAgICBnZXQgem9vbSgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5fem9vbTsgfVxuICAgIHNldCB6b29tKHpvb206IG51bWJlcikge1xuICAgICAgICBjb25zdCB6ID0gTWF0aC5taW4oTWF0aC5tYXgoem9vbSwgdGhpcy5taW5ab29tKSwgdGhpcy5tYXhab29tKTtcbiAgICAgICAgaWYgKHRoaXMuX3pvb20gPT09IHopIHJldHVybjtcbiAgICAgICAgdGhpcy5fdW5tb2RpZmllZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl96b29tID0gejtcbiAgICAgICAgdGhpcy5zY2FsZSA9IHRoaXMuem9vbVNjYWxlKHopO1xuICAgICAgICB0aGlzLnRpbGVab29tID0gTWF0aC5mbG9vcih6KTtcbiAgICAgICAgdGhpcy56b29tRnJhY3Rpb24gPSB6IC0gdGhpcy50aWxlWm9vbTtcbiAgICAgICAgdGhpcy5fY29uc3RyYWluKCk7XG4gICAgICAgIHRoaXMuX2NhbGNNYXRyaWNlcygpO1xuICAgIH1cblxuICAgIGdldCBjZW50ZXIoKTogTG5nTGF0IHsgcmV0dXJuIHRoaXMuX2NlbnRlcjsgfVxuICAgIHNldCBjZW50ZXIoY2VudGVyOiBMbmdMYXQpIHtcbiAgICAgICAgaWYgKGNlbnRlci5sYXQgPT09IHRoaXMuX2NlbnRlci5sYXQgJiYgY2VudGVyLmxuZyA9PT0gdGhpcy5fY2VudGVyLmxuZykgcmV0dXJuO1xuICAgICAgICB0aGlzLl91bm1vZGlmaWVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NlbnRlciA9IGNlbnRlcjtcbiAgICAgICAgdGhpcy5fY29uc3RyYWluKCk7XG4gICAgICAgIHRoaXMuX2NhbGNNYXRyaWNlcygpO1xuICAgIH1cblxuICAgIGdldCBwYWRkaW5nKCk6IFBhZGRpbmdPcHRpb25zIHsgcmV0dXJuIHRoaXMuX2VkZ2VJbnNldHMudG9KU09OKCk7IH1cbiAgICBzZXQgcGFkZGluZyhwYWRkaW5nOiBQYWRkaW5nT3B0aW9ucykge1xuICAgICAgICBpZiAodGhpcy5fZWRnZUluc2V0cy5lcXVhbHMocGFkZGluZykpIHJldHVybjtcbiAgICAgICAgdGhpcy5fdW5tb2RpZmllZCA9IGZhbHNlO1xuICAgICAgICAvL1VwZGF0ZSBlZGdlLWluc2V0cyBpbnBsYWNlXG4gICAgICAgIHRoaXMuX2VkZ2VJbnNldHMuaW50ZXJwb2xhdGUodGhpcy5fZWRnZUluc2V0cywgcGFkZGluZywgMSk7XG4gICAgICAgIHRoaXMuX2NhbGNNYXRyaWNlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBjZW50ZXIgb2YgdGhlIHNjcmVlbiBpbiBwaXhlbHMgd2l0aCB0aGUgdG9wLWxlZnQgY29ybmVyIGJlaW5nICgwLDApXG4gICAgICogYW5kICt5IGF4aXMgcG9pbnRpbmcgZG93bndhcmRzLiBUaGlzIGFjY291bnRzIGZvciBwYWRkaW5nLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICogQHR5cGUge1BvaW50fVxuICAgICAqIEBtZW1iZXJvZiBUcmFuc2Zvcm1cbiAgICAgKi9cbiAgICBnZXQgY2VudGVyUG9pbnQoKTogUG9pbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWRnZUluc2V0cy5nZXRDZW50ZXIodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgaWYgdGhlIHBhZGRpbmcgcGFyYW1zIG1hdGNoXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1BhZGRpbmdPcHRpb25zfSBwYWRkaW5nXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFRyYW5zZm9ybVxuICAgICAqL1xuICAgIGlzUGFkZGluZ0VxdWFsKHBhZGRpbmc6IFBhZGRpbmdPcHRpb25zKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lZGdlSW5zZXRzLmVxdWFscyhwYWRkaW5nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIZWxwZXIgbWV0aG9kIHRvIHVwYWR0ZSBlZGdlLWluc2V0cyBpbnBsYWNlXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1BhZGRpbmdPcHRpb25zfSB0YXJnZXRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdFxuICAgICAqIEBtZW1iZXJvZiBUcmFuc2Zvcm1cbiAgICAgKi9cbiAgICBpbnRlcnBvbGF0ZVBhZGRpbmcoc3RhcnQ6IFBhZGRpbmdPcHRpb25zLCB0YXJnZXQ6IFBhZGRpbmdPcHRpb25zLCB0OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fdW5tb2RpZmllZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9lZGdlSW5zZXRzLmludGVycG9sYXRlKHN0YXJ0LCB0YXJnZXQsIHQpO1xuICAgICAgICB0aGlzLl9jb25zdHJhaW4oKTtcbiAgICAgICAgdGhpcy5fY2FsY01hdHJpY2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgem9vbSBsZXZlbCB0aGF0IHdpbGwgY292ZXIgYWxsIHRpbGVzIHRoZSB0cmFuc2Zvcm1cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBvcHRpb25zXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG9wdGlvbnMudGlsZVNpemUgVGlsZSBzaXplLCBleHByZXNzZWQgaW4gc2NyZWVuIHBpeGVscy5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IG9wdGlvbnMucm91bmRab29tIFRhcmdldCB6b29tIGxldmVsLiBJZiB0cnVlLCB0aGUgdmFsdWUgd2lsbCBiZSByb3VuZGVkIHRvIHRoZSBjbG9zZXN0IGludGVnZXIuIE90aGVyd2lzZSB0aGUgdmFsdWUgd2lsbCBiZSBmbG9vcmVkLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IHpvb20gbGV2ZWwgQW4gaW50ZWdlciB6b29tIGxldmVsIGF0IHdoaWNoIGFsbCB0aWxlcyB3aWxsIGJlIHZpc2libGUuXG4gICAgICovXG4gICAgY292ZXJpbmdab29tTGV2ZWwob3B0aW9uczoge3JvdW5kWm9vbT86IGJvb2xlYW4sIHRpbGVTaXplOiBudW1iZXJ9KSB7XG4gICAgICAgIGNvbnN0IHogPSAob3B0aW9ucy5yb3VuZFpvb20gPyBNYXRoLnJvdW5kIDogTWF0aC5mbG9vcikoXG4gICAgICAgICAgICB0aGlzLnpvb20gKyB0aGlzLnNjYWxlWm9vbSh0aGlzLnRpbGVTaXplIC8gb3B0aW9ucy50aWxlU2l6ZSlcbiAgICAgICAgKTtcbiAgICAgICAgLy8gQXQgbmVnYXRpdmUgem9vbSBsZXZlbHMgbG9hZCB0aWxlcyBmcm9tIHowIGJlY2F1c2UgbmVnYXRpdmUgdGlsZSB6b29tIGxldmVscyBkb24ndCBleGlzdC5cbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIHopO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhbnkgXCJ3cmFwcGVkXCIgY29waWVzIG9mIGEgZ2l2ZW4gdGlsZSBjb29yZGluYXRlIHRoYXQgYXJlIHZpc2libGVcbiAgICAgKiBpbiB0aGUgY3VycmVudCB2aWV3LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBnZXRWaXNpYmxlVW53cmFwcGVkQ29vcmRpbmF0ZXModGlsZUlEOiBDYW5vbmljYWxUaWxlSUQpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW25ldyBVbndyYXBwZWRUaWxlSUQoMCwgdGlsZUlEKV07XG4gICAgICAgIGlmICh0aGlzLl9yZW5kZXJXb3JsZENvcGllcykge1xuICAgICAgICAgICAgY29uc3QgdXRsID0gdGhpcy5wb2ludENvb3JkaW5hdGUobmV3IFBvaW50KDAsIDApKTtcbiAgICAgICAgICAgIGNvbnN0IHV0ciA9IHRoaXMucG9pbnRDb29yZGluYXRlKG5ldyBQb2ludCh0aGlzLndpZHRoLCAwKSk7XG4gICAgICAgICAgICBjb25zdCB1YmwgPSB0aGlzLnBvaW50Q29vcmRpbmF0ZShuZXcgUG9pbnQodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpKTtcbiAgICAgICAgICAgIGNvbnN0IHViciA9IHRoaXMucG9pbnRDb29yZGluYXRlKG5ldyBQb2ludCgwLCB0aGlzLmhlaWdodCkpO1xuICAgICAgICAgICAgY29uc3QgdzAgPSBNYXRoLmZsb29yKE1hdGgubWluKHV0bC54LCB1dHIueCwgdWJsLngsIHVici54KSk7XG4gICAgICAgICAgICBjb25zdCB3MSA9IE1hdGguZmxvb3IoTWF0aC5tYXgodXRsLngsIHV0ci54LCB1YmwueCwgdWJyLngpKTtcblxuICAgICAgICAgICAgLy8gQWRkIGFuIGV4dHJhIGNvcHkgb2YgdGhlIHdvcmxkIG9uIGVhY2ggc2lkZSB0byBwcm9wZXJseSByZW5kZXIgSW1hZ2VTb3VyY2VzIGFuZCBDYW52YXNTb3VyY2VzLlxuICAgICAgICAgICAgLy8gQm90aCBzb3VyY2VzIGRyYXcgb3V0c2lkZSB0aGUgdGlsZSBib3VuZGFyaWVzIG9mIHRoZSB0aWxlIHRoYXQgXCJjb250YWlucyB0aGVtXCIgc28gd2UgbmVlZFxuICAgICAgICAgICAgLy8gdG8gYWRkIGV4dHJhIGNvcGllcyBvbiBib3RoIHNpZGVzIGluIGNhc2Ugb2Zmc2NyZWVuIHRpbGVzIG5lZWQgdG8gZHJhdyBpbnRvIG9uLXNjcmVlbiBvbmVzLlxuICAgICAgICAgICAgY29uc3QgZXh0cmFXb3JsZENvcHkgPSAxO1xuXG4gICAgICAgICAgICBmb3IgKGxldCB3ID0gdzAgLSBleHRyYVdvcmxkQ29weTsgdyA8PSB3MSArIGV4dHJhV29ybGRDb3B5OyB3KyspIHtcbiAgICAgICAgICAgICAgICBpZiAodyA9PT0gMCkgY29udGludWU7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobmV3IFVud3JhcHBlZFRpbGVJRCh3LCB0aWxlSUQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhbGwgY29vcmRpbmF0ZXMgdGhhdCBjb3VsZCBjb3ZlciB0aGlzIHRyYW5zZm9ybSBmb3IgYSBjb3ZlcmluZ1xuICAgICAqIHpvb20gbGV2ZWwuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gb3B0aW9ucy50aWxlU2l6ZVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvcHRpb25zLm1pbnpvb21cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gb3B0aW9ucy5tYXh6b29tXG4gICAgICogQHBhcmFtIHtib29sZWFufSBvcHRpb25zLnJvdW5kWm9vbVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0aW9ucy5yZXBhcnNlT3ZlcnNjYWxlZFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0aW9ucy5yZW5kZXJXb3JsZENvcGllc1xuICAgICAqIEByZXR1cm5zIHtBcnJheTxPdmVyc2NhbGVkVGlsZUlEPn0gT3ZlcnNjYWxlZFRpbGVJRHNcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvdmVyaW5nVGlsZXMoXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIHRpbGVTaXplOiBudW1iZXIsXG4gICAgICAgICAgICBtaW56b29tPzogbnVtYmVyLFxuICAgICAgICAgICAgbWF4em9vbT86IG51bWJlcixcbiAgICAgICAgICAgIHJvdW5kWm9vbT86IGJvb2xlYW4sXG4gICAgICAgICAgICByZXBhcnNlT3ZlcnNjYWxlZD86IGJvb2xlYW4sXG4gICAgICAgICAgICByZW5kZXJXb3JsZENvcGllcz86IGJvb2xlYW5cbiAgICAgICAgfVxuICAgICk6IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+IHtcbiAgICAgICAgbGV0IHogPSB0aGlzLmNvdmVyaW5nWm9vbUxldmVsKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBhY3R1YWxaID0gejtcblxuICAgICAgICBpZiAob3B0aW9ucy5taW56b29tICE9PSB1bmRlZmluZWQgJiYgeiA8IG9wdGlvbnMubWluem9vbSkgcmV0dXJuIFtdO1xuICAgICAgICBpZiAob3B0aW9ucy5tYXh6b29tICE9PSB1bmRlZmluZWQgJiYgeiA+IG9wdGlvbnMubWF4em9vbSkgeiA9IG9wdGlvbnMubWF4em9vbTtcblxuICAgICAgICBjb25zdCBjZW50ZXJDb29yZCA9IE1lcmNhdG9yQ29vcmRpbmF0ZS5mcm9tTG5nTGF0KHRoaXMuY2VudGVyKTtcbiAgICAgICAgY29uc3QgbnVtVGlsZXMgPSBNYXRoLnBvdygyLCB6KTtcbiAgICAgICAgY29uc3QgY2VudGVyUG9pbnQgPSBbbnVtVGlsZXMgKiBjZW50ZXJDb29yZC54LCBudW1UaWxlcyAqIGNlbnRlckNvb3JkLnksIDBdO1xuICAgICAgICBjb25zdCBjYW1lcmFGcnVzdHVtID0gRnJ1c3R1bS5mcm9tSW52UHJvamVjdGlvbk1hdHJpeCh0aGlzLmludlByb2pNYXRyaXgsIHRoaXMud29ybGRTaXplLCB6KTtcblxuICAgICAgICAvLyBObyBjaGFuZ2Ugb2YgTE9EIGJlaGF2aW9yIGZvciBwaXRjaCBsb3dlciB0aGFuIDYwIGFuZCB3aGVuIHRoZXJlIGlzIG5vIHRvcCBwYWRkaW5nOiByZXR1cm4gb25seSB0aWxlIGlkcyBmcm9tIHRoZSByZXF1ZXN0ZWQgem9vbSBsZXZlbFxuICAgICAgICBsZXQgbWluWm9vbSA9IG9wdGlvbnMubWluem9vbSB8fCAwO1xuICAgICAgICAvLyBVc2UgMC4xIGFzIGFuIGVwc2lsb24gdG8gYXZvaWQgZm9yIGV4cGxpY2l0ID09IDAuMCBmbG9hdGluZyBwb2ludCBjaGVja3NcbiAgICAgICAgaWYgKHRoaXMucGl0Y2ggPD0gNjAuMCAmJiB0aGlzLl9lZGdlSW5zZXRzLnRvcCA8IDAuMSlcbiAgICAgICAgICAgIG1pblpvb20gPSB6O1xuXG4gICAgICAgIC8vIFRoZXJlIHNob3VsZCBhbHdheXMgYmUgYSBjZXJ0YWluIG51bWJlciBvZiBtYXhpbXVtIHpvb20gbGV2ZWwgdGlsZXMgc3Vycm91bmRpbmcgdGhlIGNlbnRlciBsb2NhdGlvblxuICAgICAgICBjb25zdCByYWRpdXNPZk1heEx2bExvZEluVGlsZXMgPSAzO1xuXG4gICAgICAgIGNvbnN0IG5ld1Jvb3RUaWxlID0gKHdyYXA6IG51bWJlcik6IGFueSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC8vIEFsbCB0aWxlcyBhcmUgb24gemVybyBlbGV2YXRpb24gcGxhbmUgPT4geiBkaWZmZXJlbmNlIGlzIHplcm9cbiAgICAgICAgICAgICAgICBhYWJiOiBuZXcgQWFiYihbd3JhcCAqIG51bVRpbGVzLCAwLCAwXSwgWyh3cmFwICsgMSkgKiBudW1UaWxlcywgbnVtVGlsZXMsIDBdKSxcbiAgICAgICAgICAgICAgICB6b29tOiAwLFxuICAgICAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICAgICAgeTogMCxcbiAgICAgICAgICAgICAgICB3cmFwLFxuICAgICAgICAgICAgICAgIGZ1bGx5VmlzaWJsZTogZmFsc2VcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gRG8gYSBkZXB0aC1maXJzdCB0cmF2ZXJzYWwgdG8gZmluZCB2aXNpYmxlIHRpbGVzIGFuZCBwcm9wZXIgbGV2ZWxzIG9mIGRldGFpbFxuICAgICAgICBjb25zdCBzdGFjayA9IFtdO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgY29uc3QgbWF4Wm9vbSA9IHo7XG4gICAgICAgIGNvbnN0IG92ZXJzY2FsZWRaID0gb3B0aW9ucy5yZXBhcnNlT3ZlcnNjYWxlZCA/IGFjdHVhbFogOiB6O1xuXG4gICAgICAgIGlmICh0aGlzLl9yZW5kZXJXb3JsZENvcGllcykge1xuICAgICAgICAgICAgLy8gUmVuZGVyIGNvcHkgb2YgdGhlIGdsb2JlIHRocmljZSBvbiBib3RoIHNpZGVzXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSAzOyBpKyspIHtcbiAgICAgICAgICAgICAgICBzdGFjay5wdXNoKG5ld1Jvb3RUaWxlKC1pKSk7XG4gICAgICAgICAgICAgICAgc3RhY2sucHVzaChuZXdSb290VGlsZShpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzdGFjay5wdXNoKG5ld1Jvb3RUaWxlKDApKTtcblxuICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgaXQgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIGNvbnN0IHggPSBpdC54O1xuICAgICAgICAgICAgY29uc3QgeSA9IGl0Lnk7XG4gICAgICAgICAgICBsZXQgZnVsbHlWaXNpYmxlID0gaXQuZnVsbHlWaXNpYmxlO1xuXG4gICAgICAgICAgICAvLyBWaXNpYmlsaXR5IG9mIGEgdGlsZSBpcyBub3QgcmVxdWlyZWQgaWYgYW55IG9mIGl0cyBhbmNlc3RvciBpZiBmdWxseSBpbnNpZGUgdGhlIGZydXN0dW1cbiAgICAgICAgICAgIGlmICghZnVsbHlWaXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW50ZXJzZWN0UmVzdWx0ID0gaXQuYWFiYi5pbnRlcnNlY3RzKGNhbWVyYUZydXN0dW0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKGludGVyc2VjdFJlc3VsdCA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICBmdWxseVZpc2libGUgPSBpbnRlcnNlY3RSZXN1bHQgPT09IDI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlWCA9IGl0LmFhYmIuZGlzdGFuY2VYKGNlbnRlclBvaW50KTtcbiAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlWSA9IGl0LmFhYmIuZGlzdGFuY2VZKGNlbnRlclBvaW50KTtcbiAgICAgICAgICAgIGNvbnN0IGxvbmdlc3REaW0gPSBNYXRoLm1heChNYXRoLmFicyhkaXN0YW5jZVgpLCBNYXRoLmFicyhkaXN0YW5jZVkpKTtcblxuICAgICAgICAgICAgLy8gV2UncmUgdXNpbmcgZGlzdGFuY2UgYmFzZWQgaGV1cmlzdGljcyB0byBkZXRlcm1pbmUgaWYgYSB0aWxlIHNob3VsZCBiZSBzcGxpdCBpbnRvIHF1YWRyYW50cyBvciBub3QuXG4gICAgICAgICAgICAvLyByYWRpdXNPZk1heEx2bExvZEluVGlsZXMgZGVmaW5lcyB0aGF0IHRoZXJlJ3MgYWx3YXlzIGEgY2VydGFpbiBudW1iZXIgb2YgbWF4TGV2ZWwgdGlsZXMgbmV4dCB0byB0aGUgbWFwIGNlbnRlci5cbiAgICAgICAgICAgIC8vIFVzaW5nIHRoZSBmYWN0IHRoYXQgYSBwYXJlbnQgbm9kZSBpbiBxdWFkdHJlZSBpcyB0d2ljZSB0aGUgc2l6ZSBvZiBpdHMgY2hpbGRyZW4gKHBlciBkaW1lbnNpb24pXG4gICAgICAgICAgICAvLyB3ZSBjYW4gZGVmaW5lIGRpc3RhbmNlIHRocmVzaG9sZHMgZm9yIGVhY2ggcmVsYXRpdmUgbGV2ZWw6XG4gICAgICAgICAgICAvLyBmKGspID0gb2Zmc2V0ICsgMiArIDQgKyA4ICsgMTYgKyAuLi4gKyAyXmsuIFRoaXMgaXMgdGhlIHNhbWUgYXMgXCJvZmZzZXQrMl4oaysxKS0yXCJcbiAgICAgICAgICAgIGNvbnN0IGRpc3RUb1NwbGl0ID0gcmFkaXVzT2ZNYXhMdmxMb2RJblRpbGVzICsgKDEgPDwgKG1heFpvb20gLSBpdC56b29tKSkgLSAyO1xuXG4gICAgICAgICAgICAvLyBIYXZlIHdlIHJlYWNoZWQgdGhlIHRhcmdldCBkZXB0aCBvciBpcyB0aGUgdGlsZSB0b28gZmFyIGF3YXkgdG8gYmUgYW55IHNwbGl0IGZ1cnRoZXI/XG4gICAgICAgICAgICBpZiAoaXQuem9vbSA9PT0gbWF4Wm9vbSB8fCAobG9uZ2VzdERpbSA+IGRpc3RUb1NwbGl0ICYmIGl0Lnpvb20gPj0gbWluWm9vbSkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHRpbGVJRDogbmV3IE92ZXJzY2FsZWRUaWxlSUQoaXQuem9vbSA9PT0gbWF4Wm9vbSA/IG92ZXJzY2FsZWRaIDogaXQuem9vbSwgaXQud3JhcCwgaXQuem9vbSwgeCwgeSksXG4gICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlU3E6IHZlYzIuc3FyTGVuKFtjZW50ZXJQb2ludFswXSAtIDAuNSAtIHgsIGNlbnRlclBvaW50WzFdIC0gMC41IC0geV0pXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRYID0gKHggPDwgMSkgKyAoaSAlIDIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkWSA9ICh5IDw8IDEpICsgKGkgPj4gMSk7XG5cbiAgICAgICAgICAgICAgICBzdGFjay5wdXNoKHthYWJiOiBpdC5hYWJiLnF1YWRyYW50KGkpLCB6b29tOiBpdC56b29tICsgMSwgeDogY2hpbGRYLCB5OiBjaGlsZFksIHdyYXA6IGl0LndyYXAsIGZ1bGx5VmlzaWJsZX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zb3J0KChhLCBiKSA9PiBhLmRpc3RhbmNlU3EgLSBiLmRpc3RhbmNlU3EpLm1hcChhID0+IGEudGlsZUlEKTtcbiAgICB9XG5cbiAgICByZXNpemUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcblxuICAgICAgICB0aGlzLnBpeGVsc1RvR0xVbml0cyA9IFsyIC8gd2lkdGgsIC0yIC8gaGVpZ2h0XTtcbiAgICAgICAgdGhpcy5fY29uc3RyYWluKCk7XG4gICAgICAgIHRoaXMuX2NhbGNNYXRyaWNlcygpO1xuICAgIH1cblxuICAgIGdldCB1bm1vZGlmaWVkKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fdW5tb2RpZmllZDsgfVxuXG4gICAgem9vbVNjYWxlKHpvb206IG51bWJlcikgeyByZXR1cm4gTWF0aC5wb3coMiwgem9vbSk7IH1cbiAgICBzY2FsZVpvb20oc2NhbGU6IG51bWJlcikgeyByZXR1cm4gTWF0aC5sb2coc2NhbGUpIC8gTWF0aC5MTjI7IH1cblxuICAgIHByb2plY3QobG5nbGF0OiBMbmdMYXQpIHtcbiAgICAgICAgY29uc3QgbGF0ID0gY2xhbXAobG5nbGF0LmxhdCwgLXRoaXMubWF4VmFsaWRMYXRpdHVkZSwgdGhpcy5tYXhWYWxpZExhdGl0dWRlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQb2ludChcbiAgICAgICAgICAgICAgICBtZXJjYXRvclhmcm9tTG5nKGxuZ2xhdC5sbmcpICogdGhpcy53b3JsZFNpemUsXG4gICAgICAgICAgICAgICAgbWVyY2F0b3JZZnJvbUxhdChsYXQpICogdGhpcy53b3JsZFNpemUpO1xuICAgIH1cblxuICAgIHVucHJvamVjdChwb2ludDogUG9pbnQpOiBMbmdMYXQge1xuICAgICAgICByZXR1cm4gbmV3IE1lcmNhdG9yQ29vcmRpbmF0ZShwb2ludC54IC8gdGhpcy53b3JsZFNpemUsIHBvaW50LnkgLyB0aGlzLndvcmxkU2l6ZSkudG9MbmdMYXQoKTtcbiAgICB9XG5cbiAgICBnZXQgcG9pbnQoKTogUG9pbnQgeyByZXR1cm4gdGhpcy5wcm9qZWN0KHRoaXMuY2VudGVyKTsgfVxuXG4gICAgc2V0TG9jYXRpb25BdFBvaW50KGxuZ2xhdDogTG5nTGF0LCBwb2ludDogUG9pbnQpIHtcbiAgICAgICAgY29uc3QgYSA9IHRoaXMucG9pbnRDb29yZGluYXRlKHBvaW50KTtcbiAgICAgICAgY29uc3QgYiA9IHRoaXMucG9pbnRDb29yZGluYXRlKHRoaXMuY2VudGVyUG9pbnQpO1xuICAgICAgICBjb25zdCBsb2MgPSB0aGlzLmxvY2F0aW9uQ29vcmRpbmF0ZShsbmdsYXQpO1xuICAgICAgICBjb25zdCBuZXdDZW50ZXIgPSBuZXcgTWVyY2F0b3JDb29yZGluYXRlKFxuICAgICAgICAgICAgICAgIGxvYy54IC0gKGEueCAtIGIueCksXG4gICAgICAgICAgICAgICAgbG9jLnkgLSAoYS55IC0gYi55KSk7XG4gICAgICAgIHRoaXMuY2VudGVyID0gdGhpcy5jb29yZGluYXRlTG9jYXRpb24obmV3Q2VudGVyKTtcbiAgICAgICAgaWYgKHRoaXMuX3JlbmRlcldvcmxkQ29waWVzKSB7XG4gICAgICAgICAgICB0aGlzLmNlbnRlciA9IHRoaXMuY2VudGVyLndyYXAoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdpdmVuIGEgbG9jYXRpb24sIHJldHVybiB0aGUgc2NyZWVuIHBvaW50IHRoYXQgY29ycmVzcG9uZHMgdG8gaXRcbiAgICAgKiBAcGFyYW0ge0xuZ0xhdH0gbG5nbGF0IGxvY2F0aW9uXG4gICAgICogQHJldHVybnMge1BvaW50fSBzY3JlZW4gcG9pbnRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGxvY2F0aW9uUG9pbnQobG5nbGF0OiBMbmdMYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29vcmRpbmF0ZVBvaW50KHRoaXMubG9jYXRpb25Db29yZGluYXRlKGxuZ2xhdCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdpdmVuIGEgcG9pbnQgb24gc2NyZWVuLCByZXR1cm4gaXRzIGxuZ2xhdFxuICAgICAqIEBwYXJhbSB7UG9pbnR9IHAgc2NyZWVuIHBvaW50XG4gICAgICogQHJldHVybnMge0xuZ0xhdH0gbG5nbGF0IGxvY2F0aW9uXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwb2ludExvY2F0aW9uKHA6IFBvaW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvb3JkaW5hdGVMb2NhdGlvbih0aGlzLnBvaW50Q29vcmRpbmF0ZShwKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2l2ZW4gYSBnZW9ncmFwaGljYWwgbG5nbGF0LCByZXR1cm4gYW4gdW5yb3VuZGVkXG4gICAgICogY29vcmRpbmF0ZSB0aGF0IHJlcHJlc2VudHMgaXQgYXQgdGhpcyB0cmFuc2Zvcm0ncyB6b29tIGxldmVsLlxuICAgICAqIEBwYXJhbSB7TG5nTGF0fSBsbmdsYXRcbiAgICAgKiBAcmV0dXJucyB7Q29vcmRpbmF0ZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGxvY2F0aW9uQ29vcmRpbmF0ZShsbmdsYXQ6IExuZ0xhdCkge1xuICAgICAgICByZXR1cm4gTWVyY2F0b3JDb29yZGluYXRlLmZyb21MbmdMYXQobG5nbGF0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIENvb3JkaW5hdGUsIHJldHVybiBpdHMgZ2VvZ3JhcGhpY2FsIHBvc2l0aW9uLlxuICAgICAqIEBwYXJhbSB7Q29vcmRpbmF0ZX0gY29vcmRcbiAgICAgKiBAcmV0dXJucyB7TG5nTGF0fSBsbmdsYXRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvb3JkaW5hdGVMb2NhdGlvbihjb29yZDogTWVyY2F0b3JDb29yZGluYXRlKSB7XG4gICAgICAgIHJldHVybiBjb29yZC50b0xuZ0xhdCgpO1xuICAgIH1cblxuICAgIHBvaW50Q29vcmRpbmF0ZShwOiBQb2ludCkge1xuICAgICAgICBjb25zdCB0YXJnZXRaID0gMDtcbiAgICAgICAgLy8gc2luY2Ugd2UgZG9uJ3Qga25vdyB0aGUgY29ycmVjdCBwcm9qZWN0ZWQgeiB2YWx1ZSBmb3IgdGhlIHBvaW50LFxuICAgICAgICAvLyB1bnByb2plY3QgdHdvIHBvaW50cyB0byBnZXQgYSBsaW5lIGFuZCB0aGVuIGZpbmQgdGhlIHBvaW50IG9uIHRoYXRcbiAgICAgICAgLy8gbGluZSB3aXRoIHo9MFxuXG4gICAgICAgIGNvbnN0IGNvb3JkMCA9IFtwLngsIHAueSwgMCwgMV07XG4gICAgICAgIGNvbnN0IGNvb3JkMSA9IFtwLngsIHAueSwgMSwgMV07XG5cbiAgICAgICAgdmVjNC50cmFuc2Zvcm1NYXQ0KGNvb3JkMCwgY29vcmQwLCB0aGlzLnBpeGVsTWF0cml4SW52ZXJzZSk7XG4gICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NChjb29yZDEsIGNvb3JkMSwgdGhpcy5waXhlbE1hdHJpeEludmVyc2UpO1xuXG4gICAgICAgIGNvbnN0IHcwID0gY29vcmQwWzNdO1xuICAgICAgICBjb25zdCB3MSA9IGNvb3JkMVszXTtcbiAgICAgICAgY29uc3QgeDAgPSBjb29yZDBbMF0gLyB3MDtcbiAgICAgICAgY29uc3QgeDEgPSBjb29yZDFbMF0gLyB3MTtcbiAgICAgICAgY29uc3QgeTAgPSBjb29yZDBbMV0gLyB3MDtcbiAgICAgICAgY29uc3QgeTEgPSBjb29yZDFbMV0gLyB3MTtcbiAgICAgICAgY29uc3QgejAgPSBjb29yZDBbMl0gLyB3MDtcbiAgICAgICAgY29uc3QgejEgPSBjb29yZDFbMl0gLyB3MTtcblxuICAgICAgICBjb25zdCB0ID0gejAgPT09IHoxID8gMCA6ICh0YXJnZXRaIC0gejApIC8gKHoxIC0gejApO1xuXG4gICAgICAgIHJldHVybiBuZXcgTWVyY2F0b3JDb29yZGluYXRlKFxuICAgICAgICAgICAgaW50ZXJwb2xhdGUoeDAsIHgxLCB0KSAvIHRoaXMud29ybGRTaXplLFxuICAgICAgICAgICAgaW50ZXJwb2xhdGUoeTAsIHkxLCB0KSAvIHRoaXMud29ybGRTaXplKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIGNvb3JkaW5hdGUsIHJldHVybiB0aGUgc2NyZWVuIHBvaW50IHRoYXQgY29ycmVzcG9uZHMgdG8gaXRcbiAgICAgKiBAcGFyYW0ge0Nvb3JkaW5hdGV9IGNvb3JkXG4gICAgICogQHJldHVybnMge1BvaW50fSBzY3JlZW4gcG9pbnRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvb3JkaW5hdGVQb2ludChjb29yZDogTWVyY2F0b3JDb29yZGluYXRlKSB7XG4gICAgICAgIGNvbnN0IHAgPSBbY29vcmQueCAqIHRoaXMud29ybGRTaXplLCBjb29yZC55ICogdGhpcy53b3JsZFNpemUsIDAsIDFdO1xuICAgICAgICB2ZWM0LnRyYW5zZm9ybU1hdDQocCwgcCwgdGhpcy5waXhlbE1hdHJpeCk7XG4gICAgICAgIHJldHVybiBuZXcgUG9pbnQocFswXSAvIHBbM10sIHBbMV0gLyBwWzNdKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBtYXAncyBnZW9ncmFwaGljYWwgYm91bmRzLiBXaGVuIHRoZSBiZWFyaW5nIG9yIHBpdGNoIGlzIG5vbi16ZXJvLCB0aGUgdmlzaWJsZSByZWdpb24gaXMgbm90XG4gICAgICogYW4gYXhpcy1hbGlnbmVkIHJlY3RhbmdsZSwgYW5kIHRoZSByZXN1bHQgaXMgdGhlIHNtYWxsZXN0IGJvdW5kcyB0aGF0IGVuY29tcGFzc2VzIHRoZSB2aXNpYmxlIHJlZ2lvbi5cbiAgICAgKiBAcmV0dXJucyB7TG5nTGF0Qm91bmRzfSBSZXR1cm5zIGEge0BsaW5rIExuZ0xhdEJvdW5kc30gb2JqZWN0IGRlc2NyaWJpbmcgdGhlIG1hcCdzIGdlb2dyYXBoaWNhbCBib3VuZHMuXG4gICAgICovXG4gICAgZ2V0Qm91bmRzKCk6IExuZ0xhdEJvdW5kcyB7XG4gICAgICAgIHJldHVybiBuZXcgTG5nTGF0Qm91bmRzKClcbiAgICAgICAgICAgIC5leHRlbmQodGhpcy5wb2ludExvY2F0aW9uKG5ldyBQb2ludCgwLCAwKSkpXG4gICAgICAgICAgICAuZXh0ZW5kKHRoaXMucG9pbnRMb2NhdGlvbihuZXcgUG9pbnQodGhpcy53aWR0aCwgMCkpKVxuICAgICAgICAgICAgLmV4dGVuZCh0aGlzLnBvaW50TG9jYXRpb24obmV3IFBvaW50KHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KSkpXG4gICAgICAgICAgICAuZXh0ZW5kKHRoaXMucG9pbnRMb2NhdGlvbihuZXcgUG9pbnQoMCwgdGhpcy5oZWlnaHQpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbWF4aW11bSBnZW9ncmFwaGljYWwgYm91bmRzIHRoZSBtYXAgaXMgY29uc3RyYWluZWQgdG8sIG9yIGBudWxsYCBpZiBub25lIHNldC5cbiAgICAgKiBAcmV0dXJucyB7TG5nTGF0Qm91bmRzfSB7QGxpbmsgTG5nTGF0Qm91bmRzfVxuICAgICAqL1xuICAgIGdldE1heEJvdW5kcygpOiBMbmdMYXRCb3VuZHMgfCBudWxsIHtcbiAgICAgICAgaWYgKCF0aGlzLmxhdFJhbmdlIHx8IHRoaXMubGF0UmFuZ2UubGVuZ3RoICE9PSAyIHx8XG4gICAgICAgICAgICAhdGhpcy5sbmdSYW5nZSB8fCB0aGlzLmxuZ1JhbmdlLmxlbmd0aCAhPT0gMikgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBMbmdMYXRCb3VuZHMoW3RoaXMubG5nUmFuZ2VbMF0sIHRoaXMubGF0UmFuZ2VbMF1dLCBbdGhpcy5sbmdSYW5nZVsxXSwgdGhpcy5sYXRSYW5nZVsxXV0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgb3IgY2xlYXJzIHRoZSBtYXAncyBnZW9ncmFwaGljYWwgY29uc3RyYWludHMuXG4gICAgICogQHBhcmFtIHtMbmdMYXRCb3VuZHN9IGJvdW5kcyBBIHtAbGluayBMbmdMYXRCb3VuZHN9IG9iamVjdCBkZXNjcmliaW5nIHRoZSBuZXcgZ2VvZ3JhcGhpYyBib3VuZGFyaWVzIG9mIHRoZSBtYXAuXG4gICAgICovXG4gICAgc2V0TWF4Qm91bmRzKGJvdW5kcz86IExuZ0xhdEJvdW5kcykge1xuICAgICAgICBpZiAoYm91bmRzKSB7XG4gICAgICAgICAgICB0aGlzLmxuZ1JhbmdlID0gW2JvdW5kcy5nZXRXZXN0KCksIGJvdW5kcy5nZXRFYXN0KCldO1xuICAgICAgICAgICAgdGhpcy5sYXRSYW5nZSA9IFtib3VuZHMuZ2V0U291dGgoKSwgYm91bmRzLmdldE5vcnRoKCldO1xuICAgICAgICAgICAgdGhpcy5fY29uc3RyYWluKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxuZ1JhbmdlID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMubGF0UmFuZ2UgPSBbLXRoaXMubWF4VmFsaWRMYXRpdHVkZSwgdGhpcy5tYXhWYWxpZExhdGl0dWRlXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgcG9zTWF0cml4IHRoYXQsIGdpdmVuIGEgdGlsZSBjb29yZGluYXRlLCB3b3VsZCBiZSB1c2VkIHRvIGRpc3BsYXkgdGhlIHRpbGUgb24gYSBtYXAuXG4gICAgICogQHBhcmFtIHtVbndyYXBwZWRUaWxlSUR9IHVud3JhcHBlZFRpbGVJRDtcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNhbGN1bGF0ZVBvc01hdHJpeCh1bndyYXBwZWRUaWxlSUQ6IFVud3JhcHBlZFRpbGVJRCwgYWxpZ25lZDogYm9vbGVhbiA9IGZhbHNlKTogRmxvYXQzMkFycmF5IHtcbiAgICAgICAgY29uc3QgcG9zTWF0cml4S2V5ID0gdW53cmFwcGVkVGlsZUlELmtleTtcbiAgICAgICAgY29uc3QgY2FjaGUgPSBhbGlnbmVkID8gdGhpcy5fYWxpZ25lZFBvc01hdHJpeENhY2hlIDogdGhpcy5fcG9zTWF0cml4Q2FjaGU7XG4gICAgICAgIGlmIChjYWNoZVtwb3NNYXRyaXhLZXldKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVbcG9zTWF0cml4S2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNhbm9uaWNhbCA9IHVud3JhcHBlZFRpbGVJRC5jYW5vbmljYWw7XG4gICAgICAgIGNvbnN0IHNjYWxlID0gdGhpcy53b3JsZFNpemUgLyB0aGlzLnpvb21TY2FsZShjYW5vbmljYWwueik7XG4gICAgICAgIGNvbnN0IHVud3JhcHBlZFggPSBjYW5vbmljYWwueCArIE1hdGgucG93KDIsIGNhbm9uaWNhbC56KSAqIHVud3JhcHBlZFRpbGVJRC53cmFwO1xuXG4gICAgICAgIGNvbnN0IHBvc01hdHJpeCA9IG1hdDQuaWRlbnRpdHkobmV3IEZsb2F0NjRBcnJheSgxNikpO1xuICAgICAgICBtYXQ0LnRyYW5zbGF0ZShwb3NNYXRyaXgsIHBvc01hdHJpeCwgW3Vud3JhcHBlZFggKiBzY2FsZSwgY2Fub25pY2FsLnkgKiBzY2FsZSwgMF0pO1xuICAgICAgICBtYXQ0LnNjYWxlKHBvc01hdHJpeCwgcG9zTWF0cml4LCBbc2NhbGUgLyBFWFRFTlQsIHNjYWxlIC8gRVhURU5ULCAxXSk7XG4gICAgICAgIG1hdDQubXVsdGlwbHkocG9zTWF0cml4LCBhbGlnbmVkID8gdGhpcy5hbGlnbmVkUHJvak1hdHJpeCA6IHRoaXMucHJvak1hdHJpeCwgcG9zTWF0cml4KTtcblxuICAgICAgICBjYWNoZVtwb3NNYXRyaXhLZXldID0gbmV3IEZsb2F0MzJBcnJheShwb3NNYXRyaXgpO1xuICAgICAgICByZXR1cm4gY2FjaGVbcG9zTWF0cml4S2V5XTtcbiAgICB9XG5cbiAgICBjdXN0b21MYXllck1hdHJpeCgpOiBBcnJheTxudW1iZXI+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWVyY2F0b3JNYXRyaXguc2xpY2UoKTtcbiAgICB9XG5cbiAgICBfY29uc3RyYWluKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2VudGVyIHx8ICF0aGlzLndpZHRoIHx8ICF0aGlzLmhlaWdodCB8fCB0aGlzLl9jb25zdHJhaW5pbmcpIHJldHVybjtcblxuICAgICAgICB0aGlzLl9jb25zdHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgICAgIGxldCBtaW5ZID0gLTkwO1xuICAgICAgICBsZXQgbWF4WSA9IDkwO1xuICAgICAgICBsZXQgbWluWCA9IC0xODA7XG4gICAgICAgIGxldCBtYXhYID0gMTgwO1xuICAgICAgICBsZXQgc3ksIHN4LCB4MiwgeTI7XG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLnNpemUsXG4gICAgICAgICAgICB1bm1vZGlmaWVkID0gdGhpcy5fdW5tb2RpZmllZDtcblxuICAgICAgICBpZiAodGhpcy5sYXRSYW5nZSkge1xuICAgICAgICAgICAgY29uc3QgbGF0UmFuZ2UgPSB0aGlzLmxhdFJhbmdlO1xuICAgICAgICAgICAgbWluWSA9IG1lcmNhdG9yWWZyb21MYXQobGF0UmFuZ2VbMV0pICogdGhpcy53b3JsZFNpemU7XG4gICAgICAgICAgICBtYXhZID0gbWVyY2F0b3JZZnJvbUxhdChsYXRSYW5nZVswXSkgKiB0aGlzLndvcmxkU2l6ZTtcbiAgICAgICAgICAgIHN5ID0gbWF4WSAtIG1pblkgPCBzaXplLnkgPyBzaXplLnkgLyAobWF4WSAtIG1pblkpIDogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmxuZ1JhbmdlKSB7XG4gICAgICAgICAgICBjb25zdCBsbmdSYW5nZSA9IHRoaXMubG5nUmFuZ2U7XG4gICAgICAgICAgICBtaW5YID0gbWVyY2F0b3JYZnJvbUxuZyhsbmdSYW5nZVswXSkgKiB0aGlzLndvcmxkU2l6ZTtcbiAgICAgICAgICAgIG1heFggPSBtZXJjYXRvclhmcm9tTG5nKGxuZ1JhbmdlWzFdKSAqIHRoaXMud29ybGRTaXplO1xuICAgICAgICAgICAgc3ggPSBtYXhYIC0gbWluWCA8IHNpemUueCA/IHNpemUueCAvIChtYXhYIC0gbWluWCkgOiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcG9pbnQgPSB0aGlzLnBvaW50O1xuXG4gICAgICAgIC8vIGhvdyBtdWNoIHRoZSBtYXAgc2hvdWxkIHNjYWxlIHRvIGZpdCB0aGUgc2NyZWVuIGludG8gZ2l2ZW4gbGF0aXR1ZGUvbG9uZ2l0dWRlIHJhbmdlc1xuICAgICAgICBjb25zdCBzID0gTWF0aC5tYXgoc3ggfHwgMCwgc3kgfHwgMCk7XG5cbiAgICAgICAgaWYgKHMpIHtcbiAgICAgICAgICAgIHRoaXMuY2VudGVyID0gdGhpcy51bnByb2plY3QobmV3IFBvaW50KFxuICAgICAgICAgICAgICAgIHN4ID8gKG1heFggKyBtaW5YKSAvIDIgOiBwb2ludC54LFxuICAgICAgICAgICAgICAgIHN5ID8gKG1heFkgKyBtaW5ZKSAvIDIgOiBwb2ludC55KSk7XG4gICAgICAgICAgICB0aGlzLnpvb20gKz0gdGhpcy5zY2FsZVpvb20ocyk7XG4gICAgICAgICAgICB0aGlzLl91bm1vZGlmaWVkID0gdW5tb2RpZmllZDtcbiAgICAgICAgICAgIHRoaXMuX2NvbnN0cmFpbmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubGF0UmFuZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHkgPSBwb2ludC55LFxuICAgICAgICAgICAgICAgIGgyID0gc2l6ZS55IC8gMjtcblxuICAgICAgICAgICAgaWYgKHkgLSBoMiA8IG1pblkpIHkyID0gbWluWSArIGgyO1xuICAgICAgICAgICAgaWYgKHkgKyBoMiA+IG1heFkpIHkyID0gbWF4WSAtIGgyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubG5nUmFuZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHggPSBwb2ludC54LFxuICAgICAgICAgICAgICAgIHcyID0gc2l6ZS54IC8gMjtcblxuICAgICAgICAgICAgaWYgKHggLSB3MiA8IG1pblgpIHgyID0gbWluWCArIHcyO1xuICAgICAgICAgICAgaWYgKHggKyB3MiA+IG1heFgpIHgyID0gbWF4WCAtIHcyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcGFuIHRoZSBtYXAgaWYgdGhlIHNjcmVlbiBnb2VzIG9mZiB0aGUgcmFuZ2VcbiAgICAgICAgaWYgKHgyICE9PSB1bmRlZmluZWQgfHwgeTIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5jZW50ZXIgPSB0aGlzLnVucHJvamVjdChuZXcgUG9pbnQoXG4gICAgICAgICAgICAgICAgeDIgIT09IHVuZGVmaW5lZCA/IHgyIDogcG9pbnQueCxcbiAgICAgICAgICAgICAgICB5MiAhPT0gdW5kZWZpbmVkID8geTIgOiBwb2ludC55KSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl91bm1vZGlmaWVkID0gdW5tb2RpZmllZDtcbiAgICAgICAgdGhpcy5fY29uc3RyYWluaW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgX2NhbGNNYXRyaWNlcygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmhlaWdodCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGhhbGZGb3YgPSB0aGlzLl9mb3YgLyAyO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSB0aGlzLmNlbnRlck9mZnNldDtcbiAgICAgICAgdGhpcy5jYW1lcmFUb0NlbnRlckRpc3RhbmNlID0gMC41IC8gTWF0aC50YW4oaGFsZkZvdikgKiB0aGlzLmhlaWdodDtcblxuICAgICAgICAvLyBGaW5kIHRoZSBkaXN0YW5jZSBmcm9tIHRoZSBjZW50ZXIgcG9pbnQgW3dpZHRoLzIgKyBvZmZzZXQueCwgaGVpZ2h0LzIgKyBvZmZzZXQueV0gdG8gdGhlXG4gICAgICAgIC8vIGNlbnRlciB0b3AgcG9pbnQgW3dpZHRoLzIgKyBvZmZzZXQueCwgMF0gaW4gWiB1bml0cywgdXNpbmcgdGhlIGxhdyBvZiBzaW5lcy5cbiAgICAgICAgLy8gMSBaIHVuaXQgaXMgZXF1aXZhbGVudCB0byAxIGhvcml6b250YWwgcHggYXQgdGhlIGNlbnRlciBvZiB0aGUgbWFwXG4gICAgICAgIC8vICh0aGUgZGlzdGFuY2UgYmV0d2Vlblt3aWR0aC8yLCBoZWlnaHQvMl0gYW5kIFt3aWR0aC8yICsgMSwgaGVpZ2h0LzJdKVxuICAgICAgICBjb25zdCBncm91bmRBbmdsZSA9IE1hdGguUEkgLyAyICsgdGhpcy5fcGl0Y2g7XG4gICAgICAgIGNvbnN0IGZvdkFib3ZlQ2VudGVyID0gdGhpcy5fZm92ICogKDAuNSArIG9mZnNldC55IC8gdGhpcy5oZWlnaHQpO1xuICAgICAgICBjb25zdCB0b3BIYWxmU3VyZmFjZURpc3RhbmNlID0gTWF0aC5zaW4oZm92QWJvdmVDZW50ZXIpICogdGhpcy5jYW1lcmFUb0NlbnRlckRpc3RhbmNlIC8gTWF0aC5zaW4oY2xhbXAoTWF0aC5QSSAtIGdyb3VuZEFuZ2xlIC0gZm92QWJvdmVDZW50ZXIsIDAuMDEsIE1hdGguUEkgLSAwLjAxKSk7XG4gICAgICAgIGNvbnN0IHBvaW50ID0gdGhpcy5wb2ludDtcbiAgICAgICAgY29uc3QgeCA9IHBvaW50LngsIHkgPSBwb2ludC55O1xuXG4gICAgICAgIC8vIENhbGN1bGF0ZSB6IGRpc3RhbmNlIG9mIHRoZSBmYXJ0aGVzdCBmcmFnbWVudCB0aGF0IHNob3VsZCBiZSByZW5kZXJlZC5cbiAgICAgICAgY29uc3QgZnVydGhlc3REaXN0YW5jZSA9IE1hdGguY29zKE1hdGguUEkgLyAyIC0gdGhpcy5fcGl0Y2gpICogdG9wSGFsZlN1cmZhY2VEaXN0YW5jZSArIHRoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZTtcbiAgICAgICAgLy8gQWRkIGEgYml0IGV4dHJhIHRvIGF2b2lkIHByZWNpc2lvbiBwcm9ibGVtcyB3aGVuIGEgZnJhZ21lbnQncyBkaXN0YW5jZSBpcyBleGFjdGx5IGBmdXJ0aGVzdERpc3RhbmNlYFxuICAgICAgICBjb25zdCBmYXJaID0gZnVydGhlc3REaXN0YW5jZSAqIDEuMDE7XG5cbiAgICAgICAgLy8gVGhlIGxhcmdlciB0aGUgdmFsdWUgb2YgbmVhclogaXNcbiAgICAgICAgLy8gLSB0aGUgbW9yZSBkZXB0aCBwcmVjaXNpb24gaXMgYXZhaWxhYmxlIGZvciBmZWF0dXJlcyAoZ29vZClcbiAgICAgICAgLy8gLSBjbGlwcGluZyBzdGFydHMgYXBwZWFyaW5nIHNvb25lciB3aGVuIHRoZSBjYW1lcmEgaXMgY2xvc2UgdG8gM2QgZmVhdHVyZXMgKGJhZClcbiAgICAgICAgLy9cbiAgICAgICAgLy8gU21hbGxlciB2YWx1ZXMgd29ya2VkIHdlbGwgZm9yIG1hcGJveC1nbC1qcyBidXQgZGVja2dsIHdhcyBlbmNvdW50ZXJpbmcgcHJlY2lzaW9uIGlzc3Vlc1xuICAgICAgICAvLyB3aGVuIHJlbmRlcmluZyBpdCdzIGxheWVycyB1c2luZyBjdXN0b20gbGF5ZXJzLiBUaGlzIHZhbHVlIHdhcyBleHBlcmltZW50YWxseSBjaG9zZW4gYW5kXG4gICAgICAgIC8vIHNlZW1zIHRvIHNvbHZlIHotZmlnaHRpbmcgaXNzdWVzIGluIGRlY2tnbCB3aGlsZSBub3QgY2xpcHBpbmcgYnVpbGRpbmdzIHRvbyBjbG9zZSB0byB0aGUgY2FtZXJhLlxuICAgICAgICBjb25zdCBuZWFyWiA9IHRoaXMuaGVpZ2h0IC8gNTA7XG5cbiAgICAgICAgLy8gbWF0cml4IGZvciBjb252ZXJzaW9uIGZyb20gbG9jYXRpb24gdG8gR0wgY29vcmRpbmF0ZXMgKC0xIC4uIDEpXG4gICAgICAgIGxldCBtID0gbmV3IEZsb2F0NjRBcnJheSgxNik7XG4gICAgICAgIG1hdDQucGVyc3BlY3RpdmUobSwgdGhpcy5fZm92LCB0aGlzLndpZHRoIC8gdGhpcy5oZWlnaHQsIG5lYXJaLCBmYXJaKTtcblxuICAgICAgICAvL0FwcGx5IGNlbnRlciBvZiBwZXJzcGVjdGl2ZSBvZmZzZXRcbiAgICAgICAgbVs4XSA9IC1vZmZzZXQueCAqIDIgLyB0aGlzLndpZHRoO1xuICAgICAgICBtWzldID0gb2Zmc2V0LnkgKiAyIC8gdGhpcy5oZWlnaHQ7XG5cbiAgICAgICAgbWF0NC5zY2FsZShtLCBtLCBbMSwgLTEsIDFdKTtcbiAgICAgICAgbWF0NC50cmFuc2xhdGUobSwgbSwgWzAsIDAsIC10aGlzLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2VdKTtcbiAgICAgICAgbWF0NC5yb3RhdGVYKG0sIG0sIHRoaXMuX3BpdGNoKTtcbiAgICAgICAgbWF0NC5yb3RhdGVaKG0sIG0sIHRoaXMuYW5nbGUpO1xuICAgICAgICBtYXQ0LnRyYW5zbGF0ZShtLCBtLCBbLXgsIC15LCAwXSk7XG5cbiAgICAgICAgLy8gVGhlIG1lcmNhdG9yTWF0cml4IGNhbiBiZSB1c2VkIHRvIHRyYW5zZm9ybSBwb2ludHMgZnJvbSBtZXJjYXRvciBjb29yZGluYXRlc1xuICAgICAgICAvLyAoWzAsIDBdIG53LCBbMSwgMV0gc2UpIHRvIEdMIGNvb3JkaW5hdGVzLlxuICAgICAgICB0aGlzLm1lcmNhdG9yTWF0cml4ID0gbWF0NC5zY2FsZShbXSwgbSwgW3RoaXMud29ybGRTaXplLCB0aGlzLndvcmxkU2l6ZSwgdGhpcy53b3JsZFNpemVdKTtcblxuICAgICAgICAvLyBzY2FsZSB2ZXJ0aWNhbGx5IHRvIG1ldGVycyBwZXIgcGl4ZWwgKGludmVyc2Ugb2YgZ3JvdW5kIHJlc29sdXRpb24pOlxuICAgICAgICBtYXQ0LnNjYWxlKG0sIG0sIFsxLCAxLCBtZXJjYXRvclpmcm9tQWx0aXR1ZGUoMSwgdGhpcy5jZW50ZXIubGF0KSAqIHRoaXMud29ybGRTaXplLCAxXSk7XG5cbiAgICAgICAgdGhpcy5wcm9qTWF0cml4ID0gbTtcbiAgICAgICAgdGhpcy5pbnZQcm9qTWF0cml4ID0gbWF0NC5pbnZlcnQoW10sIHRoaXMucHJvak1hdHJpeCk7XG5cbiAgICAgICAgLy8gTWFrZSBhIHNlY29uZCBwcm9qZWN0aW9uIG1hdHJpeCB0aGF0IGlzIGFsaWduZWQgdG8gYSBwaXhlbCBncmlkIGZvciByZW5kZXJpbmcgcmFzdGVyIHRpbGVzLlxuICAgICAgICAvLyBXZSdyZSByb3VuZGluZyB0aGUgKGZsb2F0aW5nIHBvaW50KSB4L3kgdmFsdWVzIHRvIGFjaGlldmUgdG8gYXZvaWQgcmVuZGVyaW5nIHJhc3RlciBpbWFnZXMgdG8gZnJhY3Rpb25hbFxuICAgICAgICAvLyBjb29yZGluYXRlcy4gQWRkaXRpb25hbGx5LCB3ZSBhZGp1c3QgYnkgaGFsZiBhIHBpeGVsIGluIGVpdGhlciBkaXJlY3Rpb24gaW4gY2FzZSB0aGF0IHZpZXdwb3J0IGRpbWVuc2lvblxuICAgICAgICAvLyBpcyBhbiBvZGQgaW50ZWdlciB0byBwcmVzZXJ2ZSByZW5kZXJpbmcgdG8gdGhlIHBpeGVsIGdyaWQuIFdlJ3JlIHJvdGF0aW5nIHRoaXMgc2hpZnQgYmFzZWQgb24gdGhlIGFuZ2xlXG4gICAgICAgIC8vIG9mIHRoZSB0cmFuc2Zvcm1hdGlvbiBzbyB0aGF0IDDDgsKwLCA5MMOCwrAsIDE4MMOCwrAsIGFuZCAyNzDDgsKwIHJhc3RlcnMgYXJlIGNyaXNwLCBhbmQgYWRqdXN0IHRoZSBzaGlmdCBzbyB0aGF0XG4gICAgICAgIC8vIGl0IGlzIGFsd2F5cyA8PSAwLjUgcGl4ZWxzLlxuICAgICAgICBjb25zdCB4U2hpZnQgPSAodGhpcy53aWR0aCAlIDIpIC8gMiwgeVNoaWZ0ID0gKHRoaXMuaGVpZ2h0ICUgMikgLyAyLFxuICAgICAgICAgICAgYW5nbGVDb3MgPSBNYXRoLmNvcyh0aGlzLmFuZ2xlKSwgYW5nbGVTaW4gPSBNYXRoLnNpbih0aGlzLmFuZ2xlKSxcbiAgICAgICAgICAgIGR4ID0geCAtIE1hdGgucm91bmQoeCkgKyBhbmdsZUNvcyAqIHhTaGlmdCArIGFuZ2xlU2luICogeVNoaWZ0LFxuICAgICAgICAgICAgZHkgPSB5IC0gTWF0aC5yb3VuZCh5KSArIGFuZ2xlQ29zICogeVNoaWZ0ICsgYW5nbGVTaW4gKiB4U2hpZnQ7XG4gICAgICAgIGNvbnN0IGFsaWduZWRNID0gbmV3IEZsb2F0NjRBcnJheShtKTtcbiAgICAgICAgbWF0NC50cmFuc2xhdGUoYWxpZ25lZE0sIGFsaWduZWRNLCBbIGR4ID4gMC41ID8gZHggLSAxIDogZHgsIGR5ID4gMC41ID8gZHkgLSAxIDogZHksIDAgXSk7XG4gICAgICAgIHRoaXMuYWxpZ25lZFByb2pNYXRyaXggPSBhbGlnbmVkTTtcblxuICAgICAgICBtID0gbWF0NC5jcmVhdGUoKTtcbiAgICAgICAgbWF0NC5zY2FsZShtLCBtLCBbdGhpcy53aWR0aCAvIDIsIC10aGlzLmhlaWdodCAvIDIsIDFdKTtcbiAgICAgICAgbWF0NC50cmFuc2xhdGUobSwgbSwgWzEsIC0xLCAwXSk7XG4gICAgICAgIHRoaXMubGFiZWxQbGFuZU1hdHJpeCA9IG07XG5cbiAgICAgICAgbSA9IG1hdDQuY3JlYXRlKCk7XG4gICAgICAgIG1hdDQuc2NhbGUobSwgbSwgWzEsIC0xLCAxXSk7XG4gICAgICAgIG1hdDQudHJhbnNsYXRlKG0sIG0sIFstMSwgLTEsIDBdKTtcbiAgICAgICAgbWF0NC5zY2FsZShtLCBtLCBbMiAvIHRoaXMud2lkdGgsIDIgLyB0aGlzLmhlaWdodCwgMV0pO1xuICAgICAgICB0aGlzLmdsQ29vcmRNYXRyaXggPSBtO1xuXG4gICAgICAgIC8vIG1hdHJpeCBmb3IgY29udmVyc2lvbiBmcm9tIGxvY2F0aW9uIHRvIHNjcmVlbiBjb29yZGluYXRlc1xuICAgICAgICB0aGlzLnBpeGVsTWF0cml4ID0gbWF0NC5tdWx0aXBseShuZXcgRmxvYXQ2NEFycmF5KDE2KSwgdGhpcy5sYWJlbFBsYW5lTWF0cml4LCB0aGlzLnByb2pNYXRyaXgpO1xuXG4gICAgICAgIC8vIGludmVyc2UgbWF0cml4IGZvciBjb252ZXJzaW9uIGZyb20gc2NyZWVuIGNvb3JkaW5hZXMgdG8gbG9jYXRpb25cbiAgICAgICAgbSA9IG1hdDQuaW52ZXJ0KG5ldyBGbG9hdDY0QXJyYXkoMTYpLCB0aGlzLnBpeGVsTWF0cml4KTtcbiAgICAgICAgaWYgKCFtKSB0aHJvdyBuZXcgRXJyb3IoXCJmYWlsZWQgdG8gaW52ZXJ0IG1hdHJpeFwiKTtcbiAgICAgICAgdGhpcy5waXhlbE1hdHJpeEludmVyc2UgPSBtO1xuXG4gICAgICAgIHRoaXMuX3Bvc01hdHJpeENhY2hlID0ge307XG4gICAgICAgIHRoaXMuX2FsaWduZWRQb3NNYXRyaXhDYWNoZSA9IHt9O1xuICAgIH1cblxuICAgIG1heFBpdGNoU2NhbGVGYWN0b3IoKSB7XG4gICAgICAgIC8vIGNhbGNNYXRyaWNlcyBoYXNuJ3QgcnVuIHlldFxuICAgICAgICBpZiAoIXRoaXMucGl4ZWxNYXRyaXhJbnZlcnNlKSByZXR1cm4gMTtcblxuICAgICAgICBjb25zdCBjb29yZCA9IHRoaXMucG9pbnRDb29yZGluYXRlKG5ldyBQb2ludCgwLCAwKSk7XG4gICAgICAgIGNvbnN0IHAgPSBbY29vcmQueCAqIHRoaXMud29ybGRTaXplLCBjb29yZC55ICogdGhpcy53b3JsZFNpemUsIDAsIDFdO1xuICAgICAgICBjb25zdCB0b3BQb2ludCA9IHZlYzQudHJhbnNmb3JtTWF0NChwLCBwLCB0aGlzLnBpeGVsTWF0cml4KTtcbiAgICAgICAgcmV0dXJuIHRvcFBvaW50WzNdIC8gdGhpcy5jYW1lcmFUb0NlbnRlckRpc3RhbmNlO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogVGhlIGNhbWVyYSBsb29rcyBhdCB0aGUgbWFwIGZyb20gYSAzRCAobG5nLCBsYXQsIGFsdGl0dWRlKSBsb2NhdGlvbi4gTGV0J3MgdXNlIGBjYW1lcmFMb2NhdGlvbmBcbiAgICAgKiBhcyB0aGUgbmFtZSBmb3IgdGhlIGxvY2F0aW9uIHVuZGVyIHRoZSBjYW1lcmEgYW5kIG9uIHRoZSBzdXJmYWNlIG9mIHRoZSBlYXJ0aCAobG5nLCBsYXQsIDApLlxuICAgICAqIGBjYW1lcmFQb2ludGAgaXMgdGhlIHByb2plY3RlZCBwb3NpdGlvbiBvZiB0aGUgYGNhbWVyYUxvY2F0aW9uYC5cbiAgICAgKlxuICAgICAqIFRoaXMgcG9pbnQgaXMgdXNlZnVsIHRvIHVzIGJlY2F1c2Ugb25seSBmaWxsLWV4dHJ1c2lvbnMgdGhhdCBhcmUgYmV0d2VlbiBgY2FtZXJhUG9pbnRgIGFuZFxuICAgICAqIHRoZSBxdWVyeSBwb2ludCBvbiB0aGUgc3VyZmFjZSBvZiB0aGUgZWFydGggY2FuIGV4dGVuZCBhbmQgaW50ZXJzZWN0IHRoZSBxdWVyeS5cbiAgICAgKlxuICAgICAqIFdoZW4gdGhlIG1hcCBpcyBub3QgcGl0Y2hlZCB0aGUgYGNhbWVyYVBvaW50YCBpcyBlcXVpdmFsZW50IHRvIHRoZSBjZW50ZXIgb2YgdGhlIG1hcCBiZWNhdXNlXG4gICAgICogdGhlIGNhbWVyYSBpcyByaWdodCBhYm92ZSB0aGUgY2VudGVyIG9mIHRoZSBtYXAuXG4gICAgICovXG4gICAgZ2V0Q2FtZXJhUG9pbnQoKSB7XG4gICAgICAgIGNvbnN0IHBpdGNoID0gdGhpcy5fcGl0Y2g7XG4gICAgICAgIGNvbnN0IHlPZmZzZXQgPSBNYXRoLnRhbihwaXRjaCkgKiAodGhpcy5jYW1lcmFUb0NlbnRlckRpc3RhbmNlIHx8IDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5jZW50ZXJQb2ludC5hZGQobmV3IFBvaW50KDAsIHlPZmZzZXQpKTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIFdoZW4gdGhlIG1hcCBpcyBwaXRjaGVkLCBzb21lIG9mIHRoZSAzRCBmZWF0dXJlcyB0aGF0IGludGVyc2VjdCBhIHF1ZXJ5IHdpbGwgbm90IGludGVyc2VjdFxuICAgICAqIHRoZSBxdWVyeSBhdCB0aGUgc3VyZmFjZSBvZiB0aGUgZWFydGguIEluc3RlYWQgdGhlIGZlYXR1cmUgbWF5IGJlIGNsb3NlciBhbmQgb25seSBpbnRlcnNlY3RcbiAgICAgKiB0aGUgcXVlcnkgYmVjYXVzZSBpdCBleHRydWRlcyBpbnRvIHRoZSBhaXIuXG4gICAgICpcbiAgICAgKiBUaGlzIHJldHVybnMgYSBnZW9tZXRyeSB0aGF0IGluY2x1ZGVzIGFsbCBvZiB0aGUgb3JpZ2luYWwgcXVlcnkgYXMgd2VsbCBhcyBhbGwgcG9zc2libGUgYXJlcyBvZiB0aGVcbiAgICAgKiBzY3JlZW4gd2hlcmUgdGhlICpiYXNlKiBvZiBhIHZpc2libGUgZXh0cnVzaW9uIGNvdWxkIGJlLlxuICAgICAqICAtIEZvciBwb2ludCBxdWVyaWVzLCB0aGUgbGluZSBmcm9tIHRoZSBxdWVyeSBwb2ludCB0byB0aGUgXCJjYW1lcmEgcG9pbnRcIlxuICAgICAqICAtIEZvciBvdGhlciBnZW9tZXRyaWVzLCB0aGUgZW52ZWxvcGUgb2YgdGhlIHF1ZXJ5IGdlb21ldHJ5IGFuZCB0aGUgXCJjYW1lcmEgcG9pbnRcIlxuICAgICAqL1xuICAgIGdldENhbWVyYVF1ZXJ5R2VvbWV0cnkocXVlcnlHZW9tZXRyeTogQXJyYXk8UG9pbnQ+KTogQXJyYXk8UG9pbnQ+IHtcbiAgICAgICAgY29uc3QgYyA9IHRoaXMuZ2V0Q2FtZXJhUG9pbnQoKTtcblxuICAgICAgICBpZiAocXVlcnlHZW9tZXRyeS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBbcXVlcnlHZW9tZXRyeVswXSwgY107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbWluWCA9IGMueDtcbiAgICAgICAgICAgIGxldCBtaW5ZID0gYy55O1xuICAgICAgICAgICAgbGV0IG1heFggPSBjLng7XG4gICAgICAgICAgICBsZXQgbWF4WSA9IGMueTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcCBvZiBxdWVyeUdlb21ldHJ5KSB7XG4gICAgICAgICAgICAgICAgbWluWCA9IE1hdGgubWluKG1pblgsIHAueCk7XG4gICAgICAgICAgICAgICAgbWluWSA9IE1hdGgubWluKG1pblksIHAueSk7XG4gICAgICAgICAgICAgICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIHAueCk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IE1hdGgubWF4KG1heFksIHAueSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIG5ldyBQb2ludChtaW5YLCBtaW5ZKSxcbiAgICAgICAgICAgICAgICBuZXcgUG9pbnQobWF4WCwgbWluWSksXG4gICAgICAgICAgICAgICAgbmV3IFBvaW50KG1heFgsIG1heFkpLFxuICAgICAgICAgICAgICAgIG5ldyBQb2ludChtaW5YLCBtYXhZKSxcbiAgICAgICAgICAgICAgICBuZXcgUG9pbnQobWluWCwgbWluWSlcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRyYW5zZm9ybTtcbiIsIi8vIEBmbG93IHN0cmljdFxuXG4vKipcbiAqIFRocm90dGxlIHRoZSBnaXZlbiBmdW5jdGlvbiB0byBydW4gYXQgbW9zdCBldmVyeSBgcGVyaW9kYCBtaWxsaXNlY29uZHMuXG4gVGhyb3R0bGUgdGhlIGdpdmVuIGZ1bmN0aW9uIHRvIHJ1biBhdCBtb3N0IGV2ZXJ5IHBlcmlvZCBtaWxsaXNlY29uZHMuXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0aHJvdHRsZShmbjogKCkgPT4gdm9pZCwgdGltZTogbnVtYmVyKTogKCkgPT4gP1RpbWVvdXRJRCB7XG4gICAgbGV0IHBlbmRpbmcgPSBmYWxzZTtcbiAgICBsZXQgdGltZXJJZDogP1RpbWVvdXRJRCA9IG51bGw7XG5cbiAgICBjb25zdCBsYXRlciA9ICgpID0+IHtcbiAgICAgICAgdGltZXJJZCA9IG51bGw7XG4gICAgICAgIGlmIChwZW5kaW5nKSB7XG4gICAgICAgICAgICBmbigpO1xuICAgICAgICAgICAgdGltZXJJZCA9IHNldFRpbWVvdXQobGF0ZXIsIHRpbWUpO1xuICAgICAgICAgICAgcGVuZGluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHBlbmRpbmcgPSB0cnVlO1xuICAgICAgICBpZiAoIXRpbWVySWQpIHtcbiAgICAgICAgICAgIGxhdGVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRpbWVySWQ7XG4gICAgfTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7YmluZEFsbH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB3aW5kb3cgZnJvbSAnLi4vdXRpbC93aW5kb3cnO1xuaW1wb3J0IHRocm90dGxlIGZyb20gJy4uL3V0aWwvdGhyb3R0bGUnO1xuXG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi9tYXAnO1xuXG4vKlxuICogQWRkcyB0aGUgbWFwJ3MgcG9zaXRpb24gdG8gaXRzIHBhZ2UncyBsb2NhdGlvbiBoYXNoLlxuICogUGFzc2VkIGFzIGFuIG9wdGlvbiB0byB0aGUgbWFwIG9iamVjdC5cbiAqXG4gKiBAcmV0dXJucyB7SGFzaH0gYHRoaXNgXG4gKi9cbmNsYXNzIEhhc2gge1xuICAgIF9tYXA6IE1hcDtcbiAgICBfdXBkYXRlSGFzaDogKCkgPT4gP1RpbWVvdXRJRDtcbiAgICBfaGFzaE5hbWU6ID9zdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcihoYXNoTmFtZTogP3N0cmluZykge1xuICAgICAgICB0aGlzLl9oYXNoTmFtZSA9IGhhc2hOYW1lICYmIGVuY29kZVVSSUNvbXBvbmVudChoYXNoTmFtZSk7XG4gICAgICAgIGJpbmRBbGwoW1xuICAgICAgICAgICAgJ19nZXRDdXJyZW50SGFzaCcsXG4gICAgICAgICAgICAnX29uSGFzaENoYW5nZScsXG4gICAgICAgICAgICAnX3VwZGF0ZUhhc2gnXG4gICAgICAgIF0sIHRoaXMpO1xuXG4gICAgICAgIC8vIE1vYmlsZSBTYWZhcmkgZG9lc24ndCBhbGxvdyB1cGRhdGluZyB0aGUgaGFzaCBtb3JlIHRoYW4gMTAwIHRpbWVzIHBlciAzMCBzZWNvbmRzLlxuICAgICAgICB0aGlzLl91cGRhdGVIYXNoID0gdGhyb3R0bGUodGhpcy5fdXBkYXRlSGFzaFVudGhyb3R0bGVkLmJpbmQodGhpcyksIDMwICogMTAwMCAvIDEwMCk7XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBNYXAgZWxlbWVudCB0byBsaXN0ZW4gZm9yIGNvb3JkaW5hdGUgY2hhbmdlc1xuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG1hcFxuICAgICAqIEByZXR1cm5zIHtIYXNofSBgdGhpc2BcbiAgICAgKi9cbiAgICBhZGRUbyhtYXA6IE1hcCkge1xuICAgICAgICB0aGlzLl9tYXAgPSBtYXA7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdoYXNoY2hhbmdlJywgdGhpcy5fb25IYXNoQ2hhbmdlLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuX21hcC5vbignbW92ZWVuZCcsIHRoaXMuX3VwZGF0ZUhhc2gpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIFJlbW92ZXMgaGFzaFxuICAgICAqXG4gICAgICogQHJldHVybnMge1BvcHVwfSBgdGhpc2BcbiAgICAgKi9cbiAgICByZW1vdmUoKSB7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdoYXNoY2hhbmdlJywgdGhpcy5fb25IYXNoQ2hhbmdlLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuX21hcC5vZmYoJ21vdmVlbmQnLCB0aGlzLl91cGRhdGVIYXNoKTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3VwZGF0ZUhhc2goKSk7XG5cbiAgICAgICAgZGVsZXRlIHRoaXMuX21hcDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZ2V0SGFzaFN0cmluZyhtYXBGZWVkYmFjaz86IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3QgY2VudGVyID0gdGhpcy5fbWFwLmdldENlbnRlcigpLFxuICAgICAgICAgICAgem9vbSA9IE1hdGgucm91bmQodGhpcy5fbWFwLmdldFpvb20oKSAqIDEwMCkgLyAxMDAsXG4gICAgICAgICAgICAvLyBkZXJpdmVkIGZyb20gZXF1YXRpb246IDUxMnB4ICogMl56IC8gMzYwIC8gMTBeZCA8IDAuNXB4XG4gICAgICAgICAgICBwcmVjaXNpb24gPSBNYXRoLmNlaWwoKHpvb20gKiBNYXRoLkxOMiArIE1hdGgubG9nKDUxMiAvIDM2MCAvIDAuNSkpIC8gTWF0aC5MTjEwKSxcbiAgICAgICAgICAgIG0gPSBNYXRoLnBvdygxMCwgcHJlY2lzaW9uKSxcbiAgICAgICAgICAgIGxuZyA9IE1hdGgucm91bmQoY2VudGVyLmxuZyAqIG0pIC8gbSxcbiAgICAgICAgICAgIGxhdCA9IE1hdGgucm91bmQoY2VudGVyLmxhdCAqIG0pIC8gbSxcbiAgICAgICAgICAgIGJlYXJpbmcgPSB0aGlzLl9tYXAuZ2V0QmVhcmluZygpLFxuICAgICAgICAgICAgcGl0Y2ggPSB0aGlzLl9tYXAuZ2V0UGl0Y2goKTtcbiAgICAgICAgbGV0IGhhc2ggPSAnJztcbiAgICAgICAgaWYgKG1hcEZlZWRiYWNrKSB7XG4gICAgICAgICAgICAvLyBuZXcgbWFwIGZlZWRiYWNrIHNpdGUgaGFzIHNvbWUgY29uc3RyYWludHMgdGhhdCBkb24ndCBhbGxvd1xuICAgICAgICAgICAgLy8gdXMgdG8gdXNlIHRoZSBzYW1lIGhhc2ggZm9ybWF0IGFzIHdlIGRvIGZvciB0aGUgTWFwIGhhc2ggb3B0aW9uLlxuICAgICAgICAgICAgaGFzaCArPSBgLyR7bG5nfS8ke2xhdH0vJHt6b29tfWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBoYXNoICs9IGAke3pvb219LyR7bGF0fS8ke2xuZ31gO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJlYXJpbmcgfHwgcGl0Y2gpIGhhc2ggKz0gKGAvJHtNYXRoLnJvdW5kKGJlYXJpbmcgKiAxMCkgLyAxMH1gKTtcbiAgICAgICAgaWYgKHBpdGNoKSBoYXNoICs9IChgLyR7TWF0aC5yb3VuZChwaXRjaCl9YCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2hhc2hOYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBoYXNoTmFtZSA9IHRoaXMuX2hhc2hOYW1lO1xuICAgICAgICAgICAgbGV0IGZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBwYXJ0cyA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoLnNsaWNlKDEpLnNwbGl0KCcmJykubWFwKHBhcnQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IHBhcnQuc3BsaXQoJz0nKVswXTtcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBoYXNoTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtrZXl9PSR7aGFzaH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcGFydDtcbiAgICAgICAgICAgIH0pLmZpbHRlcihhID0+IGEpO1xuICAgICAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgICAgICAgIHBhcnRzLnB1c2goYCR7aGFzaE5hbWV9PSR7aGFzaH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBgIyR7cGFydHMuam9pbignJicpfWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYCMke2hhc2h9YDtcbiAgICB9XG5cbiAgICBfZ2V0Q3VycmVudEhhc2goKSB7XG4gICAgICAgIC8vIEdldCB0aGUgY3VycmVudCBoYXNoIGZyb20gbG9jYXRpb24sIHN0cmlwcGVkIGZyb20gaXRzIG51bWJlciBzaWduXG4gICAgICAgIGNvbnN0IGhhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaC5yZXBsYWNlKCcjJywgJycpO1xuICAgICAgICBpZiAodGhpcy5faGFzaE5hbWUpIHtcbiAgICAgICAgICAgIC8vIFNwbGl0IHRoZSBwYXJhbWV0ZXItc3R5bGVkIGhhc2ggaW50byBwYXJ0cyBhbmQgZmluZCB0aGUgdmFsdWUgd2UgbmVlZFxuICAgICAgICAgICAgbGV0IGtleXZhbDtcbiAgICAgICAgICAgIGhhc2guc3BsaXQoJyYnKS5tYXAoXG4gICAgICAgICAgICAgICAgcGFydCA9PiBwYXJ0LnNwbGl0KCc9JylcbiAgICAgICAgICAgICkuZm9yRWFjaChwYXJ0ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocGFydFswXSA9PT0gdGhpcy5faGFzaE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAga2V5dmFsID0gcGFydDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiAoa2V5dmFsID8ga2V5dmFsWzFdIHx8ICcnIDogJycpLnNwbGl0KCcvJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhhc2guc3BsaXQoJy8nKTtcbiAgICB9XG5cbiAgICBfb25IYXNoQ2hhbmdlKCkge1xuICAgICAgICBjb25zdCBsb2MgPSB0aGlzLl9nZXRDdXJyZW50SGFzaCgpO1xuICAgICAgICBpZiAobG9jLmxlbmd0aCA+PSAzICYmICFsb2Muc29tZSh2ID0+IGlzTmFOKHYpKSkge1xuICAgICAgICAgICAgY29uc3QgYmVhcmluZyA9IHRoaXMuX21hcC5kcmFnUm90YXRlLmlzRW5hYmxlZCgpICYmIHRoaXMuX21hcC50b3VjaFpvb21Sb3RhdGUuaXNFbmFibGVkKCkgPyArKGxvY1szXSB8fCAwKSA6IHRoaXMuX21hcC5nZXRCZWFyaW5nKCk7XG4gICAgICAgICAgICB0aGlzLl9tYXAuanVtcFRvKHtcbiAgICAgICAgICAgICAgICBjZW50ZXI6IFsrbG9jWzJdLCArbG9jWzFdXSxcbiAgICAgICAgICAgICAgICB6b29tOiArbG9jWzBdLFxuICAgICAgICAgICAgICAgIGJlYXJpbmcsXG4gICAgICAgICAgICAgICAgcGl0Y2g6ICsobG9jWzRdIHx8IDApXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBfdXBkYXRlSGFzaFVudGhyb3R0bGVkKCkge1xuICAgICAgICBjb25zdCBoYXNoID0gdGhpcy5nZXRIYXNoU3RyaW5nKCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUod2luZG93Lmhpc3Rvcnkuc3RhdGUsICcnLCBoYXNoKTtcbiAgICAgICAgfSBjYXRjaCAoU2VjdXJpdHlFcnJvcikge1xuICAgICAgICAgICAgLy8gSUUxMSBkb2VzIG5vdCBhbGxvdyB0aGlzIGlmIHRoZSBwYWdlIGlzIHdpdGhpbiBhbiBpZnJhbWUgY3JlYXRlZFxuICAgICAgICAgICAgLy8gd2l0aCBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudC53cml0ZSguLi4pLlxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzc0MTBcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG5leHBvcnQgZGVmYXVsdCBIYXNoO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vdXRpbC9icm93c2VyJztcbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuL21hcCc7XG5pbXBvcnQge2JlemllciwgY2xhbXAsIGV4dGVuZH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB0eXBlIHtEcmFnUGFuT3B0aW9uc30gZnJvbSAnLi9oYW5kbGVyL3NoaW0vZHJhZ19wYW4nO1xuXG5jb25zdCBkZWZhdWx0SW5lcnRpYU9wdGlvbnMgPSB7XG4gICAgbGluZWFyaXR5OiAwLjMsXG4gICAgZWFzaW5nOiBiZXppZXIoMCwgMCwgMC4zLCAxKSxcbn07XG5cbmNvbnN0IGRlZmF1bHRQYW5JbmVydGlhT3B0aW9ucyA9IGV4dGVuZCh7XG4gICAgZGVjZWxlcmF0aW9uOiAyNTAwLFxuICAgIG1heFNwZWVkOiAxNDAwXG59LCBkZWZhdWx0SW5lcnRpYU9wdGlvbnMpO1xuXG5jb25zdCBkZWZhdWx0Wm9vbUluZXJ0aWFPcHRpb25zID0gZXh0ZW5kKHtcbiAgICBkZWNlbGVyYXRpb246IDIwLFxuICAgIG1heFNwZWVkOiAxNDAwXG59LCBkZWZhdWx0SW5lcnRpYU9wdGlvbnMpO1xuXG5jb25zdCBkZWZhdWx0QmVhcmluZ0luZXJ0aWFPcHRpb25zID0gZXh0ZW5kKHtcbiAgICBkZWNlbGVyYXRpb246IDEwMDAsXG4gICAgbWF4U3BlZWQ6IDM2MFxufSwgZGVmYXVsdEluZXJ0aWFPcHRpb25zKTtcblxuY29uc3QgZGVmYXVsdFBpdGNoSW5lcnRpYU9wdGlvbnMgPSBleHRlbmQoe1xuICAgIGRlY2VsZXJhdGlvbjogMTAwMCxcbiAgICBtYXhTcGVlZDogOTBcbn0sIGRlZmF1bHRJbmVydGlhT3B0aW9ucyk7XG5cbmV4cG9ydCB0eXBlIEluZXJ0aWFPcHRpb25zID0ge1xuICAgIGxpbmVhcml0eTogbnVtYmVyO1xuICAgIGVhc2luZzogKHQ6IG51bWJlcikgPT4gbnVtYmVyO1xuICAgIGRlY2VsZXJhdGlvbjogbnVtYmVyO1xuICAgIG1heFNwZWVkOiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBJbnB1dEV2ZW50ID0gTW91c2VFdmVudCB8IFRvdWNoRXZlbnQgfCBLZXlib2FyZEV2ZW50IHwgV2hlZWxFdmVudDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSGFuZGxlckluZXJ0aWEge1xuICAgIF9tYXA6IE1hcDtcbiAgICBfaW5lcnRpYUJ1ZmZlcjogQXJyYXk8eyB0aW1lOiBudW1iZXIsIHNldHRpbmdzOiBPYmplY3QgfT47XG5cbiAgICBjb25zdHJ1Y3RvcihtYXA6IE1hcCkge1xuICAgICAgICB0aGlzLl9tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBjbGVhcigpIHtcbiAgICAgICAgdGhpcy5faW5lcnRpYUJ1ZmZlciA9IFtdO1xuICAgIH1cblxuICAgIHJlY29yZChzZXR0aW5nczogYW55KSB7XG4gICAgICAgIHRoaXMuX2RyYWluSW5lcnRpYUJ1ZmZlcigpO1xuICAgICAgICB0aGlzLl9pbmVydGlhQnVmZmVyLnB1c2goe3RpbWU6IGJyb3dzZXIubm93KCksIHNldHRpbmdzfSk7XG4gICAgfVxuXG4gICAgX2RyYWluSW5lcnRpYUJ1ZmZlcigpIHtcbiAgICAgICAgY29uc3QgaW5lcnRpYSA9IHRoaXMuX2luZXJ0aWFCdWZmZXIsXG4gICAgICAgICAgICBub3cgPSBicm93c2VyLm5vdygpLFxuICAgICAgICAgICAgY3V0b2ZmID0gMTYwOyAgIC8vbXNlY1xuXG4gICAgICAgIHdoaWxlIChpbmVydGlhLmxlbmd0aCA+IDAgJiYgbm93IC0gaW5lcnRpYVswXS50aW1lID4gY3V0b2ZmKVxuICAgICAgICAgICAgaW5lcnRpYS5zaGlmdCgpO1xuICAgIH1cblxuICAgIF9vbk1vdmVFbmQocGFuSW5lcnRpYU9wdGlvbnM/OiBEcmFnUGFuT3B0aW9ucykge1xuICAgICAgICB0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKTtcbiAgICAgICAgaWYgKHRoaXMuX2luZXJ0aWFCdWZmZXIubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVsdGFzID0ge1xuICAgICAgICAgICAgem9vbTogMCxcbiAgICAgICAgICAgIGJlYXJpbmc6IDAsXG4gICAgICAgICAgICBwaXRjaDogMCxcbiAgICAgICAgICAgIHBhbjogbmV3IFBvaW50KDAsIDApLFxuICAgICAgICAgICAgcGluY2hBcm91bmQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGFyb3VuZDogdW5kZWZpbmVkXG4gICAgICAgIH07XG5cbiAgICAgICAgZm9yIChjb25zdCB7c2V0dGluZ3N9IG9mIHRoaXMuX2luZXJ0aWFCdWZmZXIpIHtcbiAgICAgICAgICAgIGRlbHRhcy56b29tICs9IHNldHRpbmdzLnpvb21EZWx0YSB8fCAwO1xuICAgICAgICAgICAgZGVsdGFzLmJlYXJpbmcgKz0gc2V0dGluZ3MuYmVhcmluZ0RlbHRhIHx8IDA7XG4gICAgICAgICAgICBkZWx0YXMucGl0Y2ggKz0gc2V0dGluZ3MucGl0Y2hEZWx0YSB8fCAwO1xuICAgICAgICAgICAgaWYgKHNldHRpbmdzLnBhbkRlbHRhKSBkZWx0YXMucGFuLl9hZGQoc2V0dGluZ3MucGFuRGVsdGEpO1xuICAgICAgICAgICAgaWYgKHNldHRpbmdzLmFyb3VuZCkgZGVsdGFzLmFyb3VuZCA9IHNldHRpbmdzLmFyb3VuZDtcbiAgICAgICAgICAgIGlmIChzZXR0aW5ncy5waW5jaEFyb3VuZCkgZGVsdGFzLnBpbmNoQXJvdW5kID0gc2V0dGluZ3MucGluY2hBcm91bmQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXN0RW50cnkgPSB0aGlzLl9pbmVydGlhQnVmZmVyW3RoaXMuX2luZXJ0aWFCdWZmZXIubGVuZ3RoIC0gMV07XG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gKGxhc3RFbnRyeS50aW1lIC0gdGhpcy5faW5lcnRpYUJ1ZmZlclswXS50aW1lKTtcblxuICAgICAgICBjb25zdCBlYXNlT3B0aW9ucyA9IHt9O1xuXG4gICAgICAgIGlmIChkZWx0YXMucGFuLm1hZygpKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjYWxjdWxhdGVFYXNpbmcoZGVsdGFzLnBhbi5tYWcoKSwgZHVyYXRpb24sIGV4dGVuZCh7fSwgZGVmYXVsdFBhbkluZXJ0aWFPcHRpb25zLCBwYW5JbmVydGlhT3B0aW9ucyB8fCB7fSkpO1xuICAgICAgICAgICAgZWFzZU9wdGlvbnMub2Zmc2V0ID0gZGVsdGFzLnBhbi5tdWx0KHJlc3VsdC5hbW91bnQgLyBkZWx0YXMucGFuLm1hZygpKTtcbiAgICAgICAgICAgIGVhc2VPcHRpb25zLmNlbnRlciA9IHRoaXMuX21hcC50cmFuc2Zvcm0uY2VudGVyO1xuICAgICAgICAgICAgZXh0ZW5kRHVyYXRpb24oZWFzZU9wdGlvbnMsIHJlc3VsdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVsdGFzLnpvb20pIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNhbGN1bGF0ZUVhc2luZyhkZWx0YXMuem9vbSwgZHVyYXRpb24sIGRlZmF1bHRab29tSW5lcnRpYU9wdGlvbnMpO1xuICAgICAgICAgICAgZWFzZU9wdGlvbnMuem9vbSA9IHRoaXMuX21hcC50cmFuc2Zvcm0uem9vbSArIHJlc3VsdC5hbW91bnQ7XG4gICAgICAgICAgICBleHRlbmREdXJhdGlvbihlYXNlT3B0aW9ucywgcmVzdWx0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZWx0YXMuYmVhcmluZykge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY2FsY3VsYXRlRWFzaW5nKGRlbHRhcy5iZWFyaW5nLCBkdXJhdGlvbiwgZGVmYXVsdEJlYXJpbmdJbmVydGlhT3B0aW9ucyk7XG4gICAgICAgICAgICBlYXNlT3B0aW9ucy5iZWFyaW5nID0gdGhpcy5fbWFwLnRyYW5zZm9ybS5iZWFyaW5nICsgY2xhbXAocmVzdWx0LmFtb3VudCwgLTE3OSwgMTc5KTtcbiAgICAgICAgICAgIGV4dGVuZER1cmF0aW9uKGVhc2VPcHRpb25zLCByZXN1bHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlbHRhcy5waXRjaCkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY2FsY3VsYXRlRWFzaW5nKGRlbHRhcy5waXRjaCwgZHVyYXRpb24sIGRlZmF1bHRQaXRjaEluZXJ0aWFPcHRpb25zKTtcbiAgICAgICAgICAgIGVhc2VPcHRpb25zLnBpdGNoID0gdGhpcy5fbWFwLnRyYW5zZm9ybS5waXRjaCArIHJlc3VsdC5hbW91bnQ7XG4gICAgICAgICAgICBleHRlbmREdXJhdGlvbihlYXNlT3B0aW9ucywgcmVzdWx0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlYXNlT3B0aW9ucy56b29tIHx8IGVhc2VPcHRpb25zLmJlYXJpbmcpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhc3QgPSBkZWx0YXMucGluY2hBcm91bmQgPT09IHVuZGVmaW5lZCA/IGRlbHRhcy5hcm91bmQgOiBkZWx0YXMucGluY2hBcm91bmQ7XG4gICAgICAgICAgICBlYXNlT3B0aW9ucy5hcm91bmQgPSBsYXN0ID8gdGhpcy5fbWFwLnVucHJvamVjdChsYXN0KSA6IHRoaXMuX21hcC5nZXRDZW50ZXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZChlYXNlT3B0aW9ucywge1xuICAgICAgICAgICAgbm9Nb3ZlU3RhcnQ6IHRydWVcbiAgICAgICAgfSk7XG5cbiAgICB9XG59XG5cbi8vIFVuZm9ydHVuYXRlbHkgem9vbSwgYmVhcmluZywgZXRjIGNhbid0IGhhdmUgZGlmZmVyZW50IGR1cmF0aW9ucyBhbmQgZWFzaW5ncyBzb1xuLy8gd2UgbmVlZCB0byBjaG9vc2Ugb25lLiBXZSB1c2UgdGhlIGxvbmdlc3QgZHVyYXRpb24gYW5kIGl0J3MgY29ycmVzcG9uZGluZyBlYXNpbmcuXG5mdW5jdGlvbiBleHRlbmREdXJhdGlvbihlYXNlT3B0aW9ucywgcmVzdWx0KSB7XG4gICAgaWYgKCFlYXNlT3B0aW9ucy5kdXJhdGlvbiB8fCBlYXNlT3B0aW9ucy5kdXJhdGlvbiA8IHJlc3VsdC5kdXJhdGlvbikge1xuICAgICAgICBlYXNlT3B0aW9ucy5kdXJhdGlvbiA9IHJlc3VsdC5kdXJhdGlvbjtcbiAgICAgICAgZWFzZU9wdGlvbnMuZWFzaW5nID0gcmVzdWx0LmVhc2luZztcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZUVhc2luZyhhbW91bnQsIGluZXJ0aWFEdXJhdGlvbjogbnVtYmVyLCBpbmVydGlhT3B0aW9ucykge1xuICAgIGNvbnN0IHttYXhTcGVlZCwgbGluZWFyaXR5LCBkZWNlbGVyYXRpb259ID0gaW5lcnRpYU9wdGlvbnM7XG4gICAgY29uc3Qgc3BlZWQgPSBjbGFtcChcbiAgICAgICAgYW1vdW50ICogbGluZWFyaXR5IC8gKGluZXJ0aWFEdXJhdGlvbiAvIDEwMDApLFxuICAgICAgICAtbWF4U3BlZWQsXG4gICAgICAgIG1heFNwZWVkKTtcbiAgICBjb25zdCBkdXJhdGlvbiA9IE1hdGguYWJzKHNwZWVkKSAvIChkZWNlbGVyYXRpb24gKiBsaW5lYXJpdHkpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGVhc2luZzogaW5lcnRpYU9wdGlvbnMuZWFzaW5nLFxuICAgICAgICBkdXJhdGlvbjogZHVyYXRpb24gKiAxMDAwLFxuICAgICAgICBhbW91bnQ6IHNwZWVkICogKGR1cmF0aW9uIC8gMilcbiAgICB9O1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtFdmVudH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcblxuaW1wb3J0IERPTSBmcm9tICcuLi91dGlsL2RvbSc7XG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQge2V4dGVuZH0gZnJvbSAnLi4vdXRpbC91dGlsJztcblxuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4vbWFwJztcbmltcG9ydCB0eXBlIExuZ0xhdCBmcm9tICcuLi9nZW8vbG5nX2xhdCc7XG5cbi8qKlxuICogYE1hcE1vdXNlRXZlbnRgIGlzIHRoZSBldmVudCB0eXBlIGZvciBtb3VzZS1yZWxhdGVkIG1hcCBldmVudHMuXG4gKiBAZXh0ZW5kcyB7T2JqZWN0fVxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBgY2xpY2tgIGV2ZW50IGlzIGFuIGV4YW1wbGUgb2YgYSBgTWFwTW91c2VFdmVudGAuXG4gKiAvLyBTZXQgdXAgYW4gZXZlbnQgbGlzdGVuZXIgb24gdGhlIG1hcC5cbiAqIG1hcC5vbignY2xpY2snLCBmdW5jdGlvbihlKSB7XG4gKiAgIC8vIFRoZSBldmVudCBvYmplY3QgKGUpIGNvbnRhaW5zIGluZm9ybWF0aW9uIGxpa2UgdGhlXG4gKiAgIC8vIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludCBvbiB0aGUgbWFwIHRoYXQgd2FzIGNsaWNrZWQuXG4gKiAgIGNvbnNvbGUubG9nKCdBIGNsaWNrIGV2ZW50IGhhcyBvY2N1cnJlZCBhdCAnICsgZS5sbmdMYXQpO1xuICogfSk7XG4gKi9cbmV4cG9ydCBjbGFzcyBNYXBNb3VzZUV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAgIC8qKlxuICAgICAqIFRoZSBldmVudCB0eXBlIChvbmUgb2YgW2Btb3VzZWRvd25gXSgjbWFwLmV2ZW50Om1vdXNlZG93biksXG4gICAgICogW2Btb3VzZXVwYF0oI21hcC5ldmVudDptb3VzZXVwKSxcbiAgICAgKiBbYGNsaWNrYF0oI21hcC5ldmVudDpjbGljayksXG4gICAgICogW2BkYmxjbGlja2BdKCNtYXAuZXZlbnQ6ZGJsY2xpY2spLFxuICAgICAqIFtgbW91c2Vtb3ZlYF0oI21hcC5ldmVudDptb3VzZW1vdmUpLFxuICAgICAqIFtgbW91c2VvdmVyYF0oI21hcC5ldmVudDptb3VzZW92ZXIpLFxuICAgICAqIFtgbW91c2VlbnRlcmBdKCNtYXAuZXZlbnQ6bW91c2VlbnRlciksXG4gICAgICogW2Btb3VzZWxlYXZlYF0oI21hcC5ldmVudDptb3VzZWxlYXZlKSxcbiAgICAgKiBbYG1vdXNlb3V0YF0oI21hcC5ldmVudDptb3VzZW91dCksXG4gICAgICogW2Bjb250ZXh0bWVudWBdKCNtYXAuZXZlbnQ6Y29udGV4dG1lbnUpKS5cbiAgICAgKi9cbiAgICB0eXBlOiAnbW91c2Vkb3duJ1xuICAgICAgICB8ICdtb3VzZXVwJ1xuICAgICAgICB8ICdjbGljaydcbiAgICAgICAgfCAnZGJsY2xpY2snXG4gICAgICAgIHwgJ21vdXNlbW92ZSdcbiAgICAgICAgfCAnbW91c2VvdmVyJ1xuICAgICAgICB8ICdtb3VzZWVudGVyJ1xuICAgICAgICB8ICdtb3VzZWxlYXZlJ1xuICAgICAgICB8ICdtb3VzZW91dCdcbiAgICAgICAgfCAnY29udGV4dG1lbnUnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBNYXBgIG9iamVjdCB0aGF0IGZpcmVkIHRoZSBldmVudC5cbiAgICAgKi9cbiAgICB0YXJnZXQ6IE1hcDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBET00gZXZlbnQgd2hpY2ggY2F1c2VkIHRoZSBtYXAgZXZlbnQuXG4gICAgICovXG4gICAgb3JpZ2luYWxFdmVudDogTW91c2VFdmVudDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwaXhlbCBjb29yZGluYXRlcyBvZiB0aGUgbW91c2UgY3Vyc29yLCByZWxhdGl2ZSB0byB0aGUgbWFwIGFuZCBtZWFzdXJlZCBmcm9tIHRoZSB0b3AgbGVmdCBjb3JuZXIuXG4gICAgICovXG4gICAgcG9pbnQ6IFBvaW50O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGdlb2dyYXBoaWMgbG9jYXRpb24gb24gdGhlIG1hcCBvZiB0aGUgbW91c2UgY3Vyc29yLlxuICAgICAqL1xuICAgIGxuZ0xhdDogTG5nTGF0O1xuXG4gICAgLyoqXG4gICAgICogUHJldmVudHMgc3Vic2VxdWVudCBkZWZhdWx0IHByb2Nlc3Npbmcgb2YgdGhlIGV2ZW50IGJ5IHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBDYWxsaW5nIHRoaXMgbWV0aG9kIHdpbGwgcHJldmVudCB0aGUgZm9sbG93aW5nIGRlZmF1bHQgbWFwIGJlaGF2aW9yczpcbiAgICAgKlxuICAgICAqICAgKiBPbiBgbW91c2Vkb3duYCBldmVudHMsIHRoZSBiZWhhdmlvciBvZiB7QGxpbmsgRHJhZ1BhbkhhbmRsZXJ9XG4gICAgICogICAqIE9uIGBtb3VzZWRvd25gIGV2ZW50cywgdGhlIGJlaGF2aW9yIG9mIHtAbGluayBEcmFnUm90YXRlSGFuZGxlcn1cbiAgICAgKiAgICogT24gYG1vdXNlZG93bmAgZXZlbnRzLCB0aGUgYmVoYXZpb3Igb2Yge0BsaW5rIEJveFpvb21IYW5kbGVyfVxuICAgICAqICAgKiBPbiBgZGJsY2xpY2tgIGV2ZW50cywgdGhlIGJlaGF2aW9yIG9mIHtAbGluayBEb3VibGVDbGlja1pvb21IYW5kbGVyfVxuICAgICAqXG4gICAgICovXG4gICAgcHJldmVudERlZmF1bHQoKSB7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGB0cnVlYCBpZiBgcHJldmVudERlZmF1bHRgIGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGdldCBkZWZhdWx0UHJldmVudGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFByZXZlbnRlZDtcbiAgICB9XG5cbiAgICBfZGVmYXVsdFByZXZlbnRlZDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IodHlwZTogc3RyaW5nLCBtYXA6IE1hcCwgb3JpZ2luYWxFdmVudDogTW91c2VFdmVudCwgZGF0YTogT2JqZWN0ID0ge30pIHtcbiAgICAgICAgY29uc3QgcG9pbnQgPSBET00ubW91c2VQb3MobWFwLmdldENhbnZhc0NvbnRhaW5lcigpLCBvcmlnaW5hbEV2ZW50KTtcbiAgICAgICAgY29uc3QgbG5nTGF0ID0gbWFwLnVucHJvamVjdChwb2ludCk7XG4gICAgICAgIHN1cGVyKHR5cGUsIGV4dGVuZCh7cG9pbnQsIGxuZ0xhdCwgb3JpZ2luYWxFdmVudH0sIGRhdGEpKTtcbiAgICAgICAgdGhpcy5fZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRhcmdldCA9IG1hcDtcbiAgICB9XG59XG5cbi8qKlxuICogYE1hcFRvdWNoRXZlbnRgIGlzIHRoZSBldmVudCB0eXBlIGZvciB0b3VjaC1yZWxhdGVkIG1hcCBldmVudHMuXG4gKiBAZXh0ZW5kcyB7T2JqZWN0fVxuICovXG5leHBvcnQgY2xhc3MgTWFwVG91Y2hFdmVudCBleHRlbmRzIEV2ZW50IHtcbiAgICAvKipcbiAgICAgKiBUaGUgZXZlbnQgdHlwZS5cbiAgICAgKi9cbiAgICB0eXBlOiAndG91Y2hzdGFydCdcbiAgICAgICAgfCAndG91Y2hlbmQnXG4gICAgICAgIHwgJ3RvdWNoY2FuY2VsJztcblxuICAgIC8qKlxuICAgICAqIFRoZSBgTWFwYCBvYmplY3QgdGhhdCBmaXJlZCB0aGUgZXZlbnQuXG4gICAgICovXG4gICAgdGFyZ2V0OiBNYXA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgRE9NIGV2ZW50IHdoaWNoIGNhdXNlZCB0aGUgbWFwIGV2ZW50LlxuICAgICAqL1xuICAgIG9yaWdpbmFsRXZlbnQ6IFRvdWNoRXZlbnQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZ2VvZ3JhcGhpYyBsb2NhdGlvbiBvbiB0aGUgbWFwIG9mIHRoZSBjZW50ZXIgb2YgdGhlIHRvdWNoIGV2ZW50IHBvaW50cy5cbiAgICAgKi9cbiAgICBsbmdMYXQ6IExuZ0xhdDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwaXhlbCBjb29yZGluYXRlcyBvZiB0aGUgY2VudGVyIG9mIHRoZSB0b3VjaCBldmVudCBwb2ludHMsIHJlbGF0aXZlIHRvIHRoZSBtYXAgYW5kIG1lYXN1cmVkIGZyb20gdGhlIHRvcCBsZWZ0XG4gICAgICogY29ybmVyLlxuICAgICAqL1xuICAgIHBvaW50OiBQb2ludDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiBwaXhlbCBjb29yZGluYXRlcyBjb3JyZXNwb25kaW5nIHRvIGFcbiAgICAgKiBbdG91Y2ggZXZlbnQncyBgdG91Y2hlc2BdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Ub3VjaEV2ZW50L3RvdWNoZXMpIHByb3BlcnR5LlxuICAgICAqL1xuICAgIHBvaW50czogQXJyYXk8UG9pbnQ+O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGdlb2dyYXBoaWNhbCBsb2NhdGlvbnMgb24gdGhlIG1hcCBjb3JyZXNwb25kaW5nIHRvIGFcbiAgICAgKiBbdG91Y2ggZXZlbnQncyBgdG91Y2hlc2BdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Ub3VjaEV2ZW50L3RvdWNoZXMpIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGxuZ0xhdHM6IEFycmF5PExuZ0xhdD47XG5cbiAgICAvKipcbiAgICAgKiBQcmV2ZW50cyBzdWJzZXF1ZW50IGRlZmF1bHQgcHJvY2Vzc2luZyBvZiB0aGUgZXZlbnQgYnkgdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIENhbGxpbmcgdGhpcyBtZXRob2Qgd2lsbCBwcmV2ZW50IHRoZSBmb2xsb3dpbmcgZGVmYXVsdCBtYXAgYmVoYXZpb3JzOlxuICAgICAqXG4gICAgICogICAqIE9uIGB0b3VjaHN0YXJ0YCBldmVudHMsIHRoZSBiZWhhdmlvciBvZiB7QGxpbmsgRHJhZ1BhbkhhbmRsZXJ9XG4gICAgICogICAqIE9uIGB0b3VjaHN0YXJ0YCBldmVudHMsIHRoZSBiZWhhdmlvciBvZiB7QGxpbmsgVG91Y2hab29tUm90YXRlSGFuZGxlcn1cbiAgICAgKlxuICAgICAqL1xuICAgIHByZXZlbnREZWZhdWx0KCkge1xuICAgICAgICB0aGlzLl9kZWZhdWx0UHJldmVudGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBgdHJ1ZWAgaWYgYHByZXZlbnREZWZhdWx0YCBoYXMgYmVlbiBjYWxsZWQuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBnZXQgZGVmYXVsdFByZXZlbnRlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWQ7XG4gICAgfVxuXG4gICAgX2RlZmF1bHRQcmV2ZW50ZWQ6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHR5cGU6IHN0cmluZywgbWFwOiBNYXAsIG9yaWdpbmFsRXZlbnQ6IFRvdWNoRXZlbnQpIHtcbiAgICAgICAgY29uc3QgdG91Y2hlcyA9IHR5cGUgPT09IFwidG91Y2hlbmRcIiA/IG9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXMgOiBvcmlnaW5hbEV2ZW50LnRvdWNoZXM7XG4gICAgICAgIGNvbnN0IHBvaW50cyA9IERPTS50b3VjaFBvcyhtYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCksIHRvdWNoZXMpO1xuICAgICAgICBjb25zdCBsbmdMYXRzID0gcG9pbnRzLm1hcCgodCkgPT4gbWFwLnVucHJvamVjdCh0KSk7XG4gICAgICAgIGNvbnN0IHBvaW50ID0gcG9pbnRzLnJlZHVjZSgocHJldiwgY3VyciwgaSwgYXJyKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcHJldi5hZGQoY3Vyci5kaXYoYXJyLmxlbmd0aCkpO1xuICAgICAgICB9LCBuZXcgUG9pbnQoMCwgMCkpO1xuICAgICAgICBjb25zdCBsbmdMYXQgPSBtYXAudW5wcm9qZWN0KHBvaW50KTtcbiAgICAgICAgc3VwZXIodHlwZSwge3BvaW50cywgcG9pbnQsIGxuZ0xhdHMsIGxuZ0xhdCwgb3JpZ2luYWxFdmVudH0pO1xuICAgICAgICB0aGlzLl9kZWZhdWx0UHJldmVudGVkID0gZmFsc2U7XG4gICAgfVxufVxuXG4vKipcbiAqIGBNYXBXaGVlbEV2ZW50YCBpcyB0aGUgZXZlbnQgdHlwZSBmb3IgdGhlIGB3aGVlbGAgbWFwIGV2ZW50LlxuICogQGV4dGVuZHMge09iamVjdH1cbiAqL1xuZXhwb3J0IGNsYXNzIE1hcFdoZWVsRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG4gICAgLyoqXG4gICAgICogVGhlIGV2ZW50IHR5cGUuXG4gICAgICovXG4gICAgdHlwZTogJ3doZWVsJztcblxuICAgIC8qKlxuICAgICAqIFRoZSBgTWFwYCBvYmplY3QgdGhhdCBmaXJlZCB0aGUgZXZlbnQuXG4gICAgICovXG4gICAgdGFyZ2V0OiBNYXA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgRE9NIGV2ZW50IHdoaWNoIGNhdXNlZCB0aGUgbWFwIGV2ZW50LlxuICAgICAqL1xuICAgIG9yaWdpbmFsRXZlbnQ6IFdoZWVsRXZlbnQ7XG5cbiAgICAvKipcbiAgICAgKiBQcmV2ZW50cyBzdWJzZXF1ZW50IGRlZmF1bHQgcHJvY2Vzc2luZyBvZiB0aGUgZXZlbnQgYnkgdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIENhbGxpbmcgdGhpcyBtZXRob2Qgd2lsbCBwcmV2ZW50IHRoZSB0aGUgYmVoYXZpb3Igb2Yge0BsaW5rIFNjcm9sbFpvb21IYW5kbGVyfS5cbiAgICAgKi9cbiAgICBwcmV2ZW50RGVmYXVsdCgpIHtcbiAgICAgICAgdGhpcy5fZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYHRydWVgIGlmIGBwcmV2ZW50RGVmYXVsdGAgaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgZ2V0IGRlZmF1bHRQcmV2ZW50ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0UHJldmVudGVkO1xuICAgIH1cblxuICAgIF9kZWZhdWx0UHJldmVudGVkOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcih0eXBlOiBzdHJpbmcsIG1hcDogTWFwLCBvcmlnaW5hbEV2ZW50OiBXaGVlbEV2ZW50KSB7XG4gICAgICAgIHN1cGVyKHR5cGUsIHtvcmlnaW5hbEV2ZW50fSk7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWQgPSBmYWxzZTtcbiAgICB9XG59XG5cbi8qKlxuICogQSBgTWFwQm94Wm9vbUV2ZW50YCBpcyB0aGUgZXZlbnQgdHlwZSBmb3IgdGhlIGJveHpvb20tcmVsYXRlZCBtYXAgZXZlbnRzIGVtaXR0ZWQgYnkgdGhlIHtAbGluayBCb3hab29tSGFuZGxlcn0uXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gTWFwQm94Wm9vbUV2ZW50XG4gKiBAcHJvcGVydHkge01vdXNlRXZlbnR9IG9yaWdpbmFsRXZlbnQgVGhlIERPTSBldmVudCB0aGF0IHRyaWdnZXJlZCB0aGUgYm94em9vbSBldmVudC4gQ2FuIGJlIGEgYE1vdXNlRXZlbnRgIG9yIGBLZXlib2FyZEV2ZW50YFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGUgVGhlIHR5cGUgb2YgYm94em9vbSBldmVudC4gT25lIG9mIGBib3h6b29tc3RhcnRgLCBgYm94em9vbWVuZGAgb3IgYGJveHpvb21jYW5jZWxgXG4gKiBAcHJvcGVydHkge01hcH0gdGFyZ2V0IFRoZSBgTWFwYCBpbnN0YW5jZSB0aGF0IHRyaWdnZXJyZWQgdGhlIGV2ZW50XG4gKi9cbmV4cG9ydCB0eXBlIE1hcEJveFpvb21FdmVudCA9IHtcbiAgICB0eXBlOiAnYm94em9vbXN0YXJ0J1xuICAgICAgICB8ICdib3h6b29tZW5kJ1xuICAgICAgICB8ICdib3h6b29tY2FuY2VsJyxcbiAgICB0YXJnZXQ6IE1hcCxcbiAgICBvcmlnaW5hbEV2ZW50OiBNb3VzZUV2ZW50XG59O1xuXG4vKipcbiAqIEEgYE1hcERhdGFFdmVudGAgb2JqZWN0IGlzIGVtaXR0ZWQgd2l0aCB0aGUge0BsaW5rIE1hcC5ldmVudDpkYXRhfVxuICogYW5kIHtAbGluayBNYXAuZXZlbnQ6ZGF0YWxvYWRpbmd9IGV2ZW50cy4gUG9zc2libGUgdmFsdWVzIGZvclxuICogYGRhdGFUeXBlYHMgYXJlOlxuICpcbiAqIC0gYCdzb3VyY2UnYDogVGhlIG5vbi10aWxlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGFueSBzb3VyY2VcbiAqIC0gYCdzdHlsZSdgOiBUaGUgW3N0eWxlXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1zdHlsZS1zcGVjLykgdXNlZCBieSB0aGUgbWFwXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gTWFwRGF0YUV2ZW50XG4gKiBAcHJvcGVydHkge3N0cmluZ30gdHlwZSBUaGUgZXZlbnQgdHlwZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRhIHRoYXQgaGFzIGNoYW5nZWQuIE9uZSBvZiBgJ3NvdXJjZSdgLCBgJ3N0eWxlJ2AuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtpc1NvdXJjZUxvYWRlZF0gVHJ1ZSBpZiB0aGUgZXZlbnQgaGFzIGEgYGRhdGFUeXBlYCBvZiBgc291cmNlYCBhbmQgdGhlIHNvdXJjZSBoYXMgbm8gb3V0c3RhbmRpbmcgbmV0d29yayByZXF1ZXN0cy5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbc291cmNlXSBUaGUgW3N0eWxlIHNwZWMgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNvdXJjZV0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtc3R5bGUtc3BlYy8jc291cmNlcykgaWYgdGhlIGV2ZW50IGhhcyBhIGBkYXRhVHlwZWAgb2YgYHNvdXJjZWAuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3NvdXJjZURhdGFUeXBlXSBJbmNsdWRlZCBpZiB0aGUgZXZlbnQgaGFzIGEgYGRhdGFUeXBlYCBvZiBgc291cmNlYCBhbmQgdGhlIGV2ZW50IHNpZ25hbHNcbiAqIHRoYXQgaW50ZXJuYWwgZGF0YSBoYXMgYmVlbiByZWNlaXZlZCBvciBjaGFuZ2VkLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIGBtZXRhZGF0YWAgYW5kIGBjb250ZW50YC5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbdGlsZV0gVGhlIHRpbGUgYmVpbmcgbG9hZGVkIG9yIGNoYW5nZWQsIGlmIHRoZSBldmVudCBoYXMgYSBgZGF0YVR5cGVgIG9mIGBzb3VyY2VgIGFuZFxuICogdGhlIGV2ZW50IGlzIHJlbGF0ZWQgdG8gbG9hZGluZyBvZiBhIHRpbGUuXG4gKiBAcHJvcGVydHkge0Nvb3JkaW5hdGV9IFtjb29yZF0gVGhlIGNvb3JkaW5hdGUgb2YgdGhlIHRpbGUgaWYgdGhlIGV2ZW50IGhhcyBhIGBkYXRhVHlwZWAgb2YgYHNvdXJjZWAgYW5kXG4gKiB0aGUgZXZlbnQgaXMgcmVsYXRlZCB0byBsb2FkaW5nIG9mIGEgdGlsZS5cbiAqIEBleGFtcGxlXG4gKiAvLyBUaGUgc291cmNlZGF0YSBldmVudCBpcyBhbiBleGFtcGxlIG9mIE1hcERhdGFFdmVudC5cbiAqIC8vIFNldCB1cCBhbiBldmVudCBsaXN0ZW5lciBvbiB0aGUgbWFwLlxuICogbWFwLm9uKCdzb3VyY2VkYXRhJywgZnVuY3Rpb24oZSkge1xuICogICAgaWYgKGUuaXNTb3VyY2VMb2FkZWQpIHtcbiAqICAgICAgICAvLyBEbyBzb21ldGhpbmcgd2hlbiB0aGUgc291cmNlIGhhcyBmaW5pc2hlZCBsb2FkaW5nXG4gKiAgICB9XG4gKiB9KTtcbiAqL1xuZXhwb3J0IHR5cGUgTWFwRGF0YUV2ZW50ID0ge1xuICAgIHR5cGU6IHN0cmluZyxcbiAgICBkYXRhVHlwZTogc3RyaW5nXG59O1xuXG5leHBvcnQgdHlwZSBNYXBDb250ZXh0RXZlbnQgPSB7XG4gICAgdHlwZTogJ3dlYmdsY29udGV4dGxvc3QnIHwgJ3dlYmdsY29udGV4dHJlc3RvcmVkJyxcbiAgICBvcmlnaW5hbEV2ZW50OiBXZWJHTENvbnRleHRFdmVudFxufVxuXG5leHBvcnQgdHlwZSBNYXBFdmVudCA9XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIHBvaW50aW5nIGRldmljZSAodXN1YWxseSBhIG1vdXNlKSBpcyBwcmVzc2VkIHdpdGhpbiB0aGUgbWFwLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgZXZlbnQgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBvcHRpb25hbCBgbGF5ZXJJZGAgcGFyYW1ldGVyLlxuICAgICAqIElmIGBsYXllcklkYCBpcyBpbmNsdWRlZCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IGluIHtAbGluayBNYXAjb259LCB0aGUgZXZlbnQgbGlzdGVuZXIgd2lsbCBmaXJlIG9ubHkgd2hlbiB0aGVcbiAgICAgKiB0aGUgY3Vyc29yIGlzIHByZXNzZWQgd2hpbGUgaW5zaWRlIGEgdmlzaWJsZSBwb3J0aW9uIG9mIHRoZSBzcGVjaWZlZCBsYXllci5cbiAgICAgKlxuICAgICAqIEBldmVudCBtb3VzZWRvd25cbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50fSBkYXRhXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lclxuICAgICAqIG1hcC5vbignbW91c2Vkb3duJywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSBtb3VzZWRvd24gZXZlbnQgaGFzIG9jY3VycmVkLicpO1xuICAgICAqIH0pO1xuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gSW5pdGlhbGl6ZSB0aGUgbWFwXG4gICAgICogdmFyIG1hcCA9IG5ldyBtYXBib3hnbC5NYXAoeyAvLyBtYXAgb3B0aW9ucyB9KTtcbiAgICAgKiAvLyBTZXQgYW4gZXZlbnQgbGlzdGVuZXIgZm9yIGEgc3BlY2lmaWMgbGF5ZXJcbiAgICAgKiBtYXAub24oJ21vdXNlZG93bicsICdwb2ktbGFiZWwnLCBmdW5jdGlvbigpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdBIG1vdXNlZG93biBldmVudCBoYXMgb2NjdXJyZWQgb24gYSB2aXNpYmxlIHBvcnRpb24gb2YgdGhlIHBvaS1sYWJlbCBsYXllci4nKTtcbiAgICAgKiB9KTtcbiAgICAgKiBAc2VlIFtIaWdobGlnaHQgZmVhdHVyZXMgd2l0aGluIGEgYm91bmRpbmcgYm94XShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS91c2luZy1ib3gtcXVlcnlyZW5kZXJlZGZlYXR1cmVzLylcbiAgICAgKiBAc2VlIFtDcmVhdGUgYSBkcmFnZ2FibGUgcG9pbnRdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2RyYWctYS1wb2ludC8pXG4gICAgICovXG4gICAgfCAnbW91c2Vkb3duJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIHBvaW50aW5nIGRldmljZSAodXN1YWxseSBhIG1vdXNlKSBpcyByZWxlYXNlZCB3aXRoaW4gdGhlIG1hcC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIGV2ZW50IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgb3B0aW9uYWwgYGxheWVySWRgIHBhcmFtZXRlci5cbiAgICAgKiBJZiBgbGF5ZXJJZGAgaXMgaW5jbHVkZWQgYXMgdGhlIHNlY29uZCBhcmd1bWVudCBpbiB7QGxpbmsgTWFwI29ufSwgdGhlIGV2ZW50IGxpc3RlbmVyIHdpbGwgZmlyZSBvbmx5IHdoZW4gdGhlXG4gICAgICogdGhlIGN1cnNvciBpcyByZWxlYXNlZCB3aGlsZSBpbnNpZGUgYSB2aXNpYmxlIHBvcnRpb24gb2YgdGhlIHNwZWNpZmVkIGxheWVyLlxuICAgICAqXG4gICAgICogQGV2ZW50IG1vdXNldXBcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50fSBkYXRhXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lclxuICAgICAqIG1hcC5vbignbW91c2V1cCcsIGZ1bmN0aW9uKCkge1xuICAgICAqICAgY29uc29sZS5sb2coJ0EgbW91c2V1cCBldmVudCBoYXMgb2NjdXJyZWQuJyk7XG4gICAgICogfSk7XG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lciBmb3IgYSBzcGVjaWZpYyBsYXllclxuICAgICAqIG1hcC5vbignbW91c2V1cCcsICdwb2ktbGFiZWwnLCBmdW5jdGlvbigpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdBIG1vdXNldXAgZXZlbnQgaGFzIG9jY3VycmVkIG9uIGEgdmlzaWJsZSBwb3J0aW9uIG9mIHRoZSBwb2ktbGFiZWwgbGF5ZXIuJyk7XG4gICAgICogfSk7XG4gICAgICogQHNlZSBbSGlnaGxpZ2h0IGZlYXR1cmVzIHdpdGhpbiBhIGJvdW5kaW5nIGJveF0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvdXNpbmctYm94LXF1ZXJ5cmVuZGVyZWRmZWF0dXJlcy8pXG4gICAgICogQHNlZSBbQ3JlYXRlIGEgZHJhZ2dhYmxlIHBvaW50XShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9kcmFnLWEtcG9pbnQvKVxuICAgICAqL1xuICAgIHwgJ21vdXNldXAnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgcG9pbnRpbmcgZGV2aWNlICh1c3VhbGx5IGEgbW91c2UpIGlzIG1vdmVkIHdpdGhpbiB0aGUgbWFwLlxuICAgICAqIEFzIHlvdSBtb3ZlIHRoZSBjdXJzb3IgYWNyb3NzIGEgd2ViIHBhZ2UgY29udGFpbmluZyBhIG1hcCxcbiAgICAgKiB0aGUgZXZlbnQgd2lsbCBmaXJlIGVhY2ggdGltZSBpdCBlbnRlcnMgdGhlIG1hcCBvciBhbnkgY2hpbGQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBldmVudCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIG9wdGlvbmFsIGBsYXllcklkYCBwYXJhbWV0ZXIuXG4gICAgICogSWYgYGxheWVySWRgIGlzIGluY2x1ZGVkIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgaW4ge0BsaW5rIE1hcCNvbn0sIHRoZSBldmVudCBsaXN0ZW5lciB3aWxsIGZpcmUgb25seSB3aGVuIHRoZVxuICAgICAqIHRoZSBjdXJzb3IgaXMgbW92ZWQgaW5zaWRlIGEgdmlzaWJsZSBwb3J0aW9uIG9mIHRoZSBzcGVjaWZlZCBsYXllci5cbiAgICAgKlxuICAgICAqIEBldmVudCBtb3VzZW92ZXJcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50fSBkYXRhXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lclxuICAgICAqIG1hcC5vbignbW91c2VvdmVyJywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSBtb3VzZW92ZXIgZXZlbnQgaGFzIG9jY3VycmVkLicpO1xuICAgICAqIH0pO1xuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gSW5pdGlhbGl6ZSB0aGUgbWFwXG4gICAgICogdmFyIG1hcCA9IG5ldyBtYXBib3hnbC5NYXAoeyAvLyBtYXAgb3B0aW9ucyB9KTtcbiAgICAgKiAvLyBTZXQgYW4gZXZlbnQgbGlzdGVuZXIgZm9yIGEgc3BlY2lmaWMgbGF5ZXJcbiAgICAgKiBtYXAub24oJ21vdXNlb3ZlcicsICdwb2ktbGFiZWwnLCBmdW5jdGlvbigpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdBIG1vdXNlb3ZlciBldmVudCBoYXMgb2NjdXJyZWQgb24gYSB2aXNpYmxlIHBvcnRpb24gb2YgdGhlIHBvaS1sYWJlbCBsYXllci4nKTtcbiAgICAgKiB9KTtcbiAgICAgKiBAc2VlIFtHZXQgY29vcmRpbmF0ZXMgb2YgdGhlIG1vdXNlIHBvaW50ZXJdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvbW91c2UtcG9zaXRpb24vKVxuICAgICAqIEBzZWUgW0hpZ2hsaWdodCBmZWF0dXJlcyB1bmRlciB0aGUgbW91c2UgcG9pbnRlcl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9ob3Zlci1zdHlsZXMvKVxuICAgICAqIEBzZWUgW0Rpc3BsYXkgYSBwb3B1cCBvbiBob3Zlcl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9wb3B1cC1vbi1ob3Zlci8pXG4gICAgICovXG4gICAgfCAnbW91c2VvdmVyJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIHBvaW50aW5nIGRldmljZSAodXN1YWxseSBhIG1vdXNlKSBpcyBtb3ZlZCB3aGlsZSB0aGUgY3Vyc29yIGlzIGluc2lkZSB0aGUgbWFwLlxuICAgICAqIEFzIHlvdSBtb3ZlIHRoZSBjdXJzb3IgYWNyb3NzIHRoZSBtYXAsIHRoZSBldmVudCB3aWxsIGZpcmUgZXZlcnkgdGltZSB0aGUgY3Vyc29yIGNoYW5nZXMgcG9zaXRpb24gd2l0aGluIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBldmVudCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIG9wdGlvbmFsIGBsYXllcklkYCBwYXJhbWV0ZXIuXG4gICAgICogSWYgYGxheWVySWRgIGlzIGluY2x1ZGVkIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgaW4ge0BsaW5rIE1hcCNvbn0sIHRoZSBldmVudCBsaXN0ZW5lciB3aWxsIGZpcmUgb25seSB3aGVuIHRoZVxuICAgICAqIHRoZSBjdXJzb3IgaXMgaW5zaWRlIGEgdmlzaWJsZSBwb3J0aW9uIG9mIHRoZSBzcGVjaWZpZWQgbGF5ZXIuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbW91c2Vtb3ZlXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwTW91c2VFdmVudH0gZGF0YVxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gSW5pdGlhbGl6ZSB0aGUgbWFwXG4gICAgICogdmFyIG1hcCA9IG5ldyBtYXBib3hnbC5NYXAoeyAvLyBtYXAgb3B0aW9ucyB9KTtcbiAgICAgKiAvLyBTZXQgYW4gZXZlbnQgbGlzdGVuZXJcbiAgICAgKiBtYXAub24oJ21vdXNlbW92ZScsIGZ1bmN0aW9uKCkge1xuICAgICAqICAgY29uc29sZS5sb2coJ0EgbW91c2Vtb3ZlIGV2ZW50IGhhcyBvY2N1cnJlZC4nKTtcbiAgICAgKiB9KTtcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEluaXRpYWxpemUgdGhlIG1hcFxuICAgICAqIHZhciBtYXAgPSBuZXcgbWFwYm94Z2wuTWFwKHsgLy8gbWFwIG9wdGlvbnMgfSk7XG4gICAgICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyIGZvciBhIHNwZWNpZmljIGxheWVyXG4gICAgICogbWFwLm9uKCdtb3VzZW1vdmUnLCAncG9pLWxhYmVsJywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSBtb3VzZW1vdmUgZXZlbnQgaGFzIG9jY3VycmVkIG9uIGEgdmlzaWJsZSBwb3J0aW9uIG9mIHRoZSBwb2ktbGFiZWwgbGF5ZXIuJyk7XG4gICAgICogfSk7XG4gICAgICogQHNlZSBbR2V0IGNvb3JkaW5hdGVzIG9mIHRoZSBtb3VzZSBwb2ludGVyXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL21vdXNlLXBvc2l0aW9uLylcbiAgICAgKiBAc2VlIFtIaWdobGlnaHQgZmVhdHVyZXMgdW5kZXIgdGhlIG1vdXNlIHBvaW50ZXJdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvaG92ZXItc3R5bGVzLylcbiAgICAgKiBAc2VlIFtEaXNwbGF5IGEgcG9wdXAgb24gb3Zlcl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9wb3B1cC1vbi1ob3Zlci8pXG4gICAgICovXG4gICAgfCAnbW91c2Vtb3ZlJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIHBvaW50aW5nIGRldmljZSAodXN1YWxseSBhIG1vdXNlKSBpcyBwcmVzc2VkIGFuZCByZWxlYXNlZCBhdCB0aGUgc2FtZSBwb2ludCBvbiB0aGUgbWFwLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgZXZlbnQgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBvcHRpb25hbCBgbGF5ZXJJZGAgcGFyYW1ldGVyLlxuICAgICAqIElmIGBsYXllcklkYCBpcyBpbmNsdWRlZCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IGluIHtAbGluayBNYXAjb259LCB0aGUgZXZlbnQgbGlzdGVuZXIgd2lsbCBmaXJlIG9ubHkgd2hlbiB0aGVcbiAgICAgKiBwb2ludCB0aGF0IGlzIHByZXNzZWQgYW5kIHJlbGVhc2VkIGNvbnRhaW5zIGEgdmlzaWJsZSBwb3J0aW9uIG9mIHRoZSBzcGVjaWZlZCBsYXllci5cbiAgICAgKlxuICAgICAqIEBldmVudCBjbGlja1xuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcE1vdXNlRXZlbnR9IGRhdGFcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEluaXRpYWxpemUgdGhlIG1hcFxuICAgICAqIHZhciBtYXAgPSBuZXcgbWFwYm94Z2wuTWFwKHsgLy8gbWFwIG9wdGlvbnMgfSk7XG4gICAgICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyXG4gICAgICogbWFwLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdBIGNsaWNrIGV2ZW50IGhhcyBvY2N1cnJlZCBhdCAnICsgZS5sbmdMYXQpO1xuICAgICAqIH0pO1xuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gSW5pdGlhbGl6ZSB0aGUgbWFwXG4gICAgICogdmFyIG1hcCA9IG5ldyBtYXBib3hnbC5NYXAoeyAvLyBtYXAgb3B0aW9ucyB9KTtcbiAgICAgKiAvLyBTZXQgYW4gZXZlbnQgbGlzdGVuZXIgZm9yIGEgc3BlY2lmaWMgbGF5ZXJcbiAgICAgKiBtYXAub24oJ2NsaWNrJywgJ3BvaS1sYWJlbCcsIGZ1bmN0aW9uKGUpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdBIGNsaWNrIGV2ZW50IGhhcyBvY2N1cnJlZCBvbiBhIHZpc2libGUgcG9ydGlvbiBvZiB0aGUgcG9pLWxhYmVsIGxheWVyIGF0ICcgKyBlLmxuZ0xhdCk7XG4gICAgICogfSk7XG4gICAgICogQHNlZSBbTWVhc3VyZSBkaXN0YW5jZXNdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvbWVhc3VyZS8pXG4gICAgICogQHNlZSBbQ2VudGVyIHRoZSBtYXAgb24gYSBjbGlja2VkIHN5bWJvbF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9jZW50ZXItb24tc3ltYm9sLylcbiAgICAgKi9cbiAgICB8ICdjbGljaydcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBwb2ludGluZyBkZXZpY2UgKHVzdWFsbHkgYSBtb3VzZSkgaXMgcHJlc3NlZCBhbmQgcmVsZWFzZWQgdHdpY2UgYXQgdGhlIHNhbWUgcG9pbnQgb25cbiAgICAgKiB0aGUgbWFwIGluIHJhcGlkIHN1Y2Nlc3Npb24uXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBldmVudCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIG9wdGlvbmFsIGBsYXllcklkYCBwYXJhbWV0ZXIuXG4gICAgICogSWYgYGxheWVySWRgIGlzIGluY2x1ZGVkIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgaW4ge0BsaW5rIE1hcCNvbn0sIHRoZSBldmVudCBsaXN0ZW5lciB3aWxsIGZpcmUgb25seVxuICAgICAqIHdoZW4gdGhlIHBvaW50IHRoYXQgaXMgY2xpY2tlZCB0d2ljZSBjb250YWlucyBhIHZpc2libGUgcG9ydGlvbiBvZiB0aGUgc3BlY2lmZWQgbGF5ZXIuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZGJsY2xpY2tcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50fSBkYXRhXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lclxuICAgICAqIG1hcC5vbignZGJsY2xpY2snLCBmdW5jdGlvbihlKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSBkYmxjbGljayBldmVudCBoYXMgb2NjdXJyZWQgYXQgJyArIGUubG5nTGF0KTtcbiAgICAgKiB9KTtcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEluaXRpYWxpemUgdGhlIG1hcFxuICAgICAqIHZhciBtYXAgPSBuZXcgbWFwYm94Z2wuTWFwKHsgLy8gbWFwIG9wdGlvbnMgfSk7XG4gICAgICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyIGZvciBhIHNwZWNpZmljIGxheWVyXG4gICAgICogbWFwLm9uKCdkYmxjbGljaycsICdwb2ktbGFiZWwnLCBmdW5jdGlvbihlKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSBkYmxjbGljayBldmVudCBoYXMgb2NjdXJyZWQgb24gYSB2aXNpYmxlIHBvcnRpb24gb2YgdGhlIHBvaS1sYWJlbCBsYXllciBhdCAnICsgZS5sbmdMYXQpO1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIHwgJ2RibGNsaWNrJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIHBvaW50aW5nIGRldmljZSAodXN1YWxseSBhIG1vdXNlKSBlbnRlcnMgYSB2aXNpYmxlIHBvcnRpb24gb2YgYSBzcGVjaWZpZWQgbGF5ZXIgZnJvbVxuICAgICAqIG91dHNpZGUgdGhhdCBsYXllciBvciBvdXRzaWRlIHRoZSBtYXAgY2FudmFzLlxuICAgICAqXG4gICAgICogKipJbXBvcnRhbnQ6KiogVGhpcyBldmVudCBjYW4gb25seSBiZSBsaXN0ZW5lZCBmb3Igd2hlbiB7QGxpbmsgTWFwI29ufSBpbmNsdWRlcyB0aHJlZSBhcmd1ZW1lbnRzLFxuICAgICAqIHdoZXJlIHRoZSBzZWNvbmQgYXJndW1lbnQgc3BlY2lmaWVzIHRoZSBkZXNpcmVkIGxheWVyLlxuICAgICAqXG4gICAgICogQGV2ZW50IG1vdXNlZW50ZXJcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50fSBkYXRhXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lclxuICAgICAqIG1hcC5vbignbW91c2VlbnRlcicsICd3YXRlcicsIGZ1bmN0aW9uKCkge1xuICAgICAqICAgY29uc29sZS5sb2coJ0EgbW91c2VlbnRlciBldmVudCBvY2N1cnJlZCBvbiBhIHZpc2libGUgcG9ydGlvbiBvZiB0aGUgd2F0ZXIgbGF5ZXIuJyk7XG4gICAgICogfSk7XG4gICAgICogQHNlZSBbQ2VudGVyIHRoZSBtYXAgb24gYSBjbGlja2VkIHN5bWJvbF0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvY2VudGVyLW9uLXN5bWJvbC8pXG4gICAgICogQHNlZSBbRGlzcGxheSBhIHBvcHVwIG9uIGNsaWNrXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9wb3B1cC1vbi1jbGljay8pXG4gICAgICovXG4gICAgfCAnbW91c2VlbnRlcidcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBwb2ludGluZyBkZXZpY2UgKHVzdWFsbHkgYSBtb3VzZSkgbGVhdmVzIGEgdmlzaWJsZSBwb3J0aW9uIG9mIGEgc3BlY2lmaWVkIGxheWVyLCBvciBsZWF2ZXNcbiAgICAgKiB0aGUgbWFwIGNhbnZhcy5cbiAgICAgKlxuICAgICAqICoqSW1wb3J0YW50OioqIFRoaXMgZXZlbnQgY2FuIG9ubHkgYmUgbGlzdGVuZWQgZm9yIHdoZW4ge0BsaW5rIE1hcCNvbn0gaW5jbHVkZXMgdGhyZWUgYXJndWVtZW50cyxcbiAgICAgKiB3aGVyZSB0aGUgc2Vjb25kIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgZGVzaXJlZCBsYXllci5cbiAgICAgKlxuICAgICAqIEBldmVudCBtb3VzZWxlYXZlXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwTW91c2VFdmVudH0gZGF0YVxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gSW5pdGlhbGl6ZSB0aGUgbWFwXG4gICAgICogdmFyIG1hcCA9IG5ldyBtYXBib3hnbC5NYXAoeyAvLyBtYXAgb3B0aW9ucyB9KTtcbiAgICAgKiAvLyBTZXQgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBmaXJlc1xuICAgICAqIC8vIHdoZW4gdGhlIHBvaW50aW5nIGRldmljZSBsZWF2ZXNcbiAgICAgKiAvLyBhIHZpc2libGUgcG9ydGlvbiBvZiB0aGUgc3BlY2lmaWVkIGxheWVyLlxuICAgICAqIG1hcC5vbignbW91c2VsZWF2ZScsICd3YXRlcicsIGZ1bmN0aW9uKCkge1xuICAgICAqICAgY29uc29sZS5sb2coJ0EgbW91c2VsZWF2ZSBldmVudCBvY2N1cnJlZC4nKTtcbiAgICAgKiB9KTtcbiAgICAgKiBAc2VlIFtIaWdobGlnaHQgZmVhdHVyZXMgdW5kZXIgdGhlIG1vdXNlIHBvaW50ZXJdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvaG92ZXItc3R5bGVzLylcbiAgICAgKiBAc2VlIFtEaXNwbGF5IGEgcG9wdXAgb24gY2xpY2tdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3BvcHVwLW9uLWNsaWNrLylcbiAgICAgKi9cbiAgICB8ICdtb3VzZWxlYXZlJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIHBvaW50IGRldmljZSAodXN1YWxseSBhIG1vdXNlKSBsZWF2ZXMgdGhlIG1hcCdzIGNhbnZhcy5cbiAgICAgKlxuICAgICAqIEBldmVudCBtb3VzZW91dFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcE1vdXNlRXZlbnR9IGRhdGFcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEluaXRpYWxpemUgdGhlIG1hcFxuICAgICAqIHZhciBtYXAgPSBuZXcgbWFwYm94Z2wuTWFwKHsgLy8gbWFwIG9wdGlvbnMgfSk7XG4gICAgICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgZmlyZXNcbiAgICAgKiAvLyB3aGVuIHRoZSBwb2ludGluZyBkZXZpY2UgbGVhdmUnc1xuICAgICAqIC8vIHRoZSBtYXAncyBjYW52YXMuXG4gICAgICogbWFwLm9uKCdtb3VzZW91dCcsIGZ1bmN0aW9uKCkge1xuICAgICAqICAgY29uc29sZS5sb2coJ0EgbW91c2VvdXQgZXZlbnQgb2NjdXJyZWQuJyk7XG4gICAgICogfSk7XG4gICAgICovXG4gICAgfCAnbW91c2VvdXQnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSByaWdodCBidXR0b24gb2YgdGhlIG1vdXNlIGlzIGNsaWNrZWQgb3IgdGhlIGNvbnRleHQgbWVudSBrZXkgaXMgcHJlc3NlZCB3aXRoaW4gdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIEBldmVudCBjb250ZXh0bWVudVxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcE1vdXNlRXZlbnR9IGRhdGFcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEluaXRpYWxpemUgdGhlIG1hcFxuICAgICAqIHZhciBtYXAgPSBuZXcgbWFwYm94Z2wuTWFwKHsgLy8gbWFwIG9wdGlvbnMgfSk7XG4gICAgICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgZmlyZXNcbiAgICAgKiAvLyB3aGVuIHRoZSByaWdodCBtb3VzZSBidXR0b24gaXNcbiAgICAgKiAvLyBwcmVzc2VkIHdpdGhpbiB0aGUgbWFwLlxuICAgICAqIG1hcC5vbignY29udGV4dG1lbnUnLCBmdW5jdGlvbigpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdBIGNvbnRleHRtZW51IGV2ZW50IG9jY3VycmVkLicpO1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIHwgJ2NvbnRleHRtZW51J1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIFtgd2hlZWxgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9FdmVudHMvd2hlZWwpIGV2ZW50IG9jY3VycyB3aXRoaW4gdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIEBldmVudCB3aGVlbFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcFdoZWVsRXZlbnR9IGRhdGFcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEluaXRpYWxpemUgdGhlIG1hcFxuICAgICAqIHZhciBtYXAgPSBuZXcgbWFwYm94Z2wuTWFwKHsgLy8gbWFwIG9wdGlvbnMgfSk7XG4gICAgICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgZmlyZXNcbiAgICAgKiAvLyB3aGVuIGEgd2hlZWwgZXZlbnQgb2NjdXJzIHdpdGhpbiB0aGUgbWFwLlxuICAgICAqIG1hcC5vbignd2hlZWwnLCBmdW5jdGlvbigpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdBIHdoZWVsIGV2ZW50IG9jY3VycmVkLicpO1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIHwgJ3doZWVsJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIFtgdG91Y2hzdGFydGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0V2ZW50cy90b3VjaHN0YXJ0KSBldmVudCBvY2N1cnMgd2l0aGluIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgdG91Y2hzdGFydFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcFRvdWNoRXZlbnR9IGRhdGFcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGZpcmVzXG4gICAgICogLy8gd2hlbiBhIHRvdWNoc3RhcnQgZXZlbnQgb2NjdXJzIHdpdGhpbiB0aGUgbWFwLlxuICAgICAqIG1hcC5vbigndG91Y2hzdGFydCcsIGZ1bmN0aW9uKCkge1xuICAgICAqICAgY29uc29sZS5sb2coJ0EgdG91Y2hzdGFydCBldmVudCBvY2N1cnJlZC4nKTtcbiAgICAgKiB9KTtcbiAgICAgKiBAc2VlIFtDcmVhdGUgYSBkcmFnZ2FibGUgcG9pbnRdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2RyYWctYS1wb2ludC8pXG4gICAgICovXG4gICAgfCAndG91Y2hzdGFydCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBbYHRvdWNoZW5kYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvRXZlbnRzL3RvdWNoZW5kKSBldmVudCBvY2N1cnMgd2l0aGluIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgdG91Y2hlbmRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBUb3VjaEV2ZW50fSBkYXRhXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGZpcmVzXG4gICAgICogLy8gd2hlbiBhIHRvdWNoc3RhcnQgZXZlbnQgb2NjdXJzIHdpdGhpbiB0aGUgbWFwLlxuICAgICAqIG1hcC5vbigndG91Y2hzdGFydCcsIGZ1bmN0aW9uKCkge1xuICAgICAqICAgY29uc29sZS5sb2coJ0EgdG91Y2hzdGFydCBldmVudCBvY2N1cnJlZC4nKTtcbiAgICAgKiB9KTtcbiAgICAgKiBAc2VlIFtDcmVhdGUgYSBkcmFnZ2FibGUgcG9pbnRdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2RyYWctYS1wb2ludC8pXG4gICAgICovXG4gICAgfCAndG91Y2hlbmQnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgW2B0b3VjaG1vdmVgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9FdmVudHMvdG91Y2htb3ZlKSBldmVudCBvY2N1cnMgd2l0aGluIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgdG91Y2htb3ZlXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwVG91Y2hFdmVudH0gZGF0YVxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gSW5pdGlhbGl6ZSB0aGUgbWFwXG4gICAgICogdmFyIG1hcCA9IG5ldyBtYXBib3hnbC5NYXAoeyAvLyBtYXAgb3B0aW9ucyB9KTtcbiAgICAgKiAvLyBTZXQgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBmaXJlc1xuICAgICAqIC8vIHdoZW4gYSB0b3VjaG1vdmUgZXZlbnQgb2NjdXJzIHdpdGhpbiB0aGUgbWFwLlxuICAgICAqIG1hcC5vbigndG91Y2htb3ZlJywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSB0b3VjaG1vdmUgZXZlbnQgb2NjdXJyZWQuJyk7XG4gICAgICogfSk7XG4gICAgICogQHNlZSBbQ3JlYXRlIGEgZHJhZ2dhYmxlIHBvaW50XShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9kcmFnLWEtcG9pbnQvKVxuICAgICAqL1xuICAgIHwgJ3RvdWNobW92ZSdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBbYHRvdWNoY2FuY2VsYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvRXZlbnRzL3RvdWNoY2FuY2VsKSBldmVudCBvY2N1cnMgd2l0aGluIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgdG91Y2hjYW5jZWxcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBUb3VjaEV2ZW50fSBkYXRhXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGZpcmVzXG4gICAgICogLy8gd2hlbiBhIHRvdWNoY2FuY2VsIGV2ZW50IG9jY3VycyB3aXRoaW4gdGhlIG1hcC5cbiAgICAgKiBtYXAub24oJ3RvdWNoY2FuY2VsJywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSB0b3VjaGNhbmNlbCBldmVudCBvY2N1cnJlZC4nKTtcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICB8ICd0b3VjaGNhbmNlbCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIGp1c3QgYmVmb3JlIHRoZSBtYXAgYmVnaW5zIGEgdHJhbnNpdGlvbiBmcm9tIG9uZVxuICAgICAqIHZpZXcgdG8gYW5vdGhlciwgYXMgdGhlIHJlc3VsdCBvZiBlaXRoZXIgdXNlciBpbnRlcmFjdGlvbiBvciBtZXRob2RzIHN1Y2ggYXMge0BsaW5rIE1hcCNqdW1wVG99LlxuICAgICAqXG4gICAgICogQGV2ZW50IG1vdmVzdGFydFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge3tvcmlnaW5hbEV2ZW50OiBEcmFnRXZlbnR9fSBkYXRhXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGZpcmVzXG4gICAgICogLy8ganVzdCBiZWZvcmUgdGhlIG1hcCBiZWdpbnMgYSB0cmFuc2l0aW9uXG4gICAgICogLy8gZnJvbSBvbmUgdmlldyB0byBhbm90aGVyLlxuICAgICAqIG1hcC5vbignbW92ZXN0YXJ0JywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSBtb3Zlc3RhcnRgIGV2ZW50IG9jY3VycmVkLicpO1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIHwgJ21vdmVzdGFydCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHJlcGVhdGVkbHkgZHVyaW5nIGFuIGFuaW1hdGVkIHRyYW5zaXRpb24gZnJvbSBvbmUgdmlldyB0b1xuICAgICAqIGFub3RoZXIsIGFzIHRoZSByZXN1bHQgb2YgZWl0aGVyIHVzZXIgaW50ZXJhY3Rpb24gb3IgbWV0aG9kcyBzdWNoIGFzIHtAbGluayBNYXAjZmx5VG99LlxuICAgICAqXG4gICAgICogQGV2ZW50IG1vdmVcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50IHwgTWFwVG91Y2hFdmVudH0gZGF0YVxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gSW5pdGlhbGl6ZSB0aGUgbWFwXG4gICAgICogdmFyIG1hcCA9IG5ldyBtYXBib3hnbC5NYXAoeyAvLyBtYXAgb3B0aW9ucyB9KTtcbiAgICAgKiAvLyBTZXQgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBmaXJlc1xuICAgICAqIC8vIHJlcGVhdGVkbHkgZHVyaW5nIGFuIGFuaW1hdGVkIHRyYW5zaXRpb24uXG4gICAgICogbWFwLm9uKCdtb3ZlJywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSBtb3ZlIGV2ZW50IG9jY3VycmVkLicpO1xuICAgICAqIH0pO1xuICAgICAqIEBzZWUgW0Rpc3BsYXkgSFRNTCBjbHVzdGVycyB3aXRoIGN1c3RvbSBwcm9wZXJ0aWVzXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9jbHVzdGVyLWh0bWwvKVxuICAgICAqIEBzZWUgW0ZpbHRlciBmZWF0dXJlcyB3aXRoaW4gbWFwIHZpZXddKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2ZpbHRlci1mZWF0dXJlcy13aXRoaW4tbWFwLXZpZXcvKVxuICAgICAqL1xuICAgIHwgJ21vdmUnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCBqdXN0IGFmdGVyIHRoZSBtYXAgY29tcGxldGVzIGEgdHJhbnNpdGlvbiBmcm9tIG9uZVxuICAgICAqIHZpZXcgdG8gYW5vdGhlciwgYXMgdGhlIHJlc3VsdCBvZiBlaXRoZXIgdXNlciBpbnRlcmFjdGlvbiBvciBtZXRob2RzIHN1Y2ggYXMge0BsaW5rIE1hcCNqdW1wVG99LlxuICAgICAqXG4gICAgICogQGV2ZW50IG1vdmVlbmRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHt7b3JpZ2luYWxFdmVudDogRHJhZ0V2ZW50fX0gZGF0YVxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gSW5pdGlhbGl6ZSB0aGUgbWFwXG4gICAgICogdmFyIG1hcCA9IG5ldyBtYXBib3hnbC5NYXAoeyAvLyBtYXAgb3B0aW9ucyB9KTtcbiAgICAgKiAvLyBTZXQgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBmaXJlc1xuICAgICAqIC8vIGp1c3QgYWZ0ZXIgdGhlIG1hcCBjb21wbGV0ZXMgYSB0cmFuc2l0aW9uLlxuICAgICAqIG1hcC5vbignbW92ZWVuZCcsIGZ1bmN0aW9uKCkge1xuICAgICAqICAgY29uc29sZS5sb2coJ0EgbW92ZWVuZCBldmVudCBvY2N1cnJlZC4nKTtcbiAgICAgKiB9KTtcbiAgICAgKiBAc2VlIFtQbGF5IG1hcCBsb2NhdGlvbnMgYXMgYSBzbGlkZXNob3ddKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvcGxheWJhY2stbG9jYXRpb25zLylcbiAgICAgKiBAc2VlIFtGaWx0ZXIgZmVhdHVyZXMgd2l0aGluIG1hcCB2aWV3XShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2ZpbHRlci1mZWF0dXJlcy13aXRoaW4tbWFwLXZpZXcvKVxuICAgICAqIEBzZWUgW0Rpc3BsYXkgSFRNTCBjbHVzdGVycyB3aXRoIGN1c3RvbSBwcm9wZXJ0aWVzXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9jbHVzdGVyLWh0bWwvKVxuICAgICAqL1xuICAgIHwgJ21vdmVlbmQnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgXCJkcmFnIHRvIHBhblwiIGludGVyYWN0aW9uIHN0YXJ0cy4gU2VlIHtAbGluayBEcmFnUGFuSGFuZGxlcn0uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZHJhZ3N0YXJ0XG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7e29yaWdpbmFsRXZlbnQ6IERyYWdFdmVudH19IGRhdGFcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEluaXRpYWxpemUgdGhlIG1hcFxuICAgICAqIHZhciBtYXAgPSBuZXcgbWFwYm94Z2wuTWFwKHsgLy8gbWFwIG9wdGlvbnMgfSk7XG4gICAgICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgZmlyZXNcbiAgICAgKiAvLyB3aGVuIGEgXCJkcmFnIHRvIHBhblwiIGludGVyYWN0aW9uIHN0YXJ0cy5cbiAgICAgKiBtYXAub24oJ2RyYWdzdGFydCcsIGZ1bmN0aW9uKCkge1xuICAgICAqICAgY29uc29sZS5sb2coJ0EgZHJhZ3N0YXJ0IGV2ZW50IG9jY3VycmVkLicpO1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIHwgJ2RyYWdzdGFydCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHJlcGVhdGVkbHkgZHVyaW5nIGEgXCJkcmFnIHRvIHBhblwiIGludGVyYWN0aW9uLiBTZWUge0BsaW5rIERyYWdQYW5IYW5kbGVyfS5cbiAgICAgKlxuICAgICAqIEBldmVudCBkcmFnXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwTW91c2VFdmVudCB8IE1hcFRvdWNoRXZlbnR9IGRhdGFcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEluaXRpYWxpemUgdGhlIG1hcFxuICAgICAqIHZhciBtYXAgPSBuZXcgbWFwYm94Z2wuTWFwKHsgLy8gbWFwIG9wdGlvbnMgfSk7XG4gICAgICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgZmlyZXNcbiAgICAgKiAvLyByZXBlYXRlZGx5ICBkdXJpbmcgYSBcImRyYWcgdG8gcGFuXCIgaW50ZXJhY3Rpb24uXG4gICAgICogbWFwLm9uKCdkcmFnJywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSBkcmFnIGV2ZW50IG9jY3VycmVkLicpO1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIHwgJ2RyYWcnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgXCJkcmFnIHRvIHBhblwiIGludGVyYWN0aW9uIGVuZHMuIFNlZSB7QGxpbmsgRHJhZ1BhbkhhbmRsZXJ9LlxuICAgICAqXG4gICAgICogQGV2ZW50IGRyYWdlbmRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHt7b3JpZ2luYWxFdmVudDogRHJhZ0V2ZW50fX0gZGF0YVxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gSW5pdGlhbGl6ZSB0aGUgbWFwXG4gICAgICogdmFyIG1hcCA9IG5ldyBtYXBib3hnbC5NYXAoeyAvLyBtYXAgb3B0aW9ucyB9KTtcbiAgICAgKiAvLyBTZXQgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBmaXJlc1xuICAgICAqIC8vIHdoZW4gYSBcImRyYWcgdG8gcGFuXCIgaW50ZXJhY3Rpb24gZW5kcy5cbiAgICAgKiBtYXAub24oJ2RyYWdlbmQnLCBmdW5jdGlvbigpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdBIGRyYWdlbmQgZXZlbnQgb2NjdXJyZWQuJyk7XG4gICAgICogfSk7XG4gICAgICogQHNlZSBbQ3JlYXRlIGEgZHJhZ2dhYmxlIG1hcmtlcl0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZHJhZy1hLW1hcmtlci8pXG4gICAgICovXG4gICAgfCAnZHJhZ2VuZCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIGp1c3QgYmVmb3JlIHRoZSBtYXAgYmVnaW5zIGEgdHJhbnNpdGlvbiBmcm9tIG9uZSB6b29tIGxldmVsIHRvIGFub3RoZXIsXG4gICAgICogYXMgdGhlIHJlc3VsdCBvZiBlaXRoZXIgdXNlciBpbnRlcmFjdGlvbiBvciBtZXRob2RzIHN1Y2ggYXMge0BsaW5rIE1hcCNmbHlUb30uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgem9vbXN0YXJ0XG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwTW91c2VFdmVudCB8IE1hcFRvdWNoRXZlbnR9IGRhdGFcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEluaXRpYWxpemUgdGhlIG1hcFxuICAgICAqIHZhciBtYXAgPSBuZXcgbWFwYm94Z2wuTWFwKHsgLy8gbWFwIG9wdGlvbnMgfSk7XG4gICAgICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgZmlyZXNcbiAgICAgKiAvLyBqdXN0IGJlZm9yZSBhIHpvb20gdHJhbnNpdGlvbiBzdGFydHMuXG4gICAgICogbWFwLm9uKCd6b29tc3RhcnQnLCBmdW5jdGlvbigpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdBIHpvb21zdGFydCBldmVudCBvY2N1cnJlZC4nKTtcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICB8ICd6b29tc3RhcnQnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCByZXBlYXRlZGx5IGR1cmluZyBhbiBhbmltYXRlZCB0cmFuc2l0aW9uIGZyb20gb25lIHpvb20gbGV2ZWwgdG8gYW5vdGhlcixcbiAgICAgKiBhcyB0aGUgcmVzdWx0IG9mIGVpdGhlciB1c2VyIGludGVyYWN0aW9uIG9yIG1ldGhvZHMgc3VjaCBhcyB7QGxpbmsgTWFwI2ZseVRvfS5cbiAgICAgKlxuICAgICAqIEBldmVudCB6b29tXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwTW91c2VFdmVudCB8IE1hcFRvdWNoRXZlbnR9IGRhdGFcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGZpcmVzXG4gICAgICogLy8gcmVwZWF0ZWRseSBkdXJpbmcgYSB6b29tIHRyYW5zaXRpb24uXG4gICAgICogbWFwLm9uKCd6b29tJywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSB6b29tIGV2ZW50IG9jY3VycmVkLicpO1xuICAgICAqIH0pO1xuICAgICAqIEBzZWUgW1VwZGF0ZSBhIGNob3JvcGxldGggbGF5ZXIgYnkgem9vbSBsZXZlbF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS91cGRhdGluZy1jaG9yb3BsZXRoLylcbiAgICAgKi9cbiAgICB8ICd6b29tJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQganVzdCBhZnRlciB0aGUgbWFwIGNvbXBsZXRlcyBhIHRyYW5zaXRpb24gZnJvbSBvbmUgem9vbSBsZXZlbCB0byBhbm90aGVyLFxuICAgICAqIGFzIHRoZSByZXN1bHQgb2YgZWl0aGVyIHVzZXIgaW50ZXJhY3Rpb24gb3IgbWV0aG9kcyBzdWNoIGFzIHtAbGluayBNYXAjZmx5VG99LlxuICAgICAqXG4gICAgICogQGV2ZW50IHpvb21lbmRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50IHwgTWFwVG91Y2hFdmVudH0gZGF0YVxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gSW5pdGlhbGl6ZSB0aGUgbWFwXG4gICAgICogdmFyIG1hcCA9IG5ldyBtYXBib3hnbC5NYXAoeyAvLyBtYXAgb3B0aW9ucyB9KTtcbiAgICAgKiAvLyBTZXQgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBmaXJlc1xuICAgICAqIC8vIGp1c3QgYWZ0ZXIgYSB6b29tIHRyYW5zaXRpb24gZmluaXNoZXMuXG4gICAgICogbWFwLm9uKCd6b29tZW5kJywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSB6b29tZW5kIGV2ZW50IG9jY3VycmVkLicpO1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIHwgJ3pvb21lbmQnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgXCJkcmFnIHRvIHJvdGF0ZVwiIGludGVyYWN0aW9uIHN0YXJ0cy4gU2VlIHtAbGluayBEcmFnUm90YXRlSGFuZGxlcn0uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgcm90YXRlc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50IHwgTWFwVG91Y2hFdmVudH0gZGF0YVxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gSW5pdGlhbGl6ZSB0aGUgbWFwXG4gICAgICogdmFyIG1hcCA9IG5ldyBtYXBib3hnbC5NYXAoeyAvLyBtYXAgb3B0aW9ucyB9KTtcbiAgICAgKiAvLyBTZXQgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBmaXJlc1xuICAgICAqIC8vIGp1c3QgYmVmb3JlIGEgXCJkcmFnIHRvIHJvdGF0ZVwiIGludGVyYWN0aW9uIHN0YXJ0cy5cbiAgICAgKiBtYXAub24oJ3JvdGF0ZXN0YXJ0JywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSByb3RhdGVzdGFydCBldmVudCBvY2N1cnJlZC4nKTtcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICB8ICdyb3RhdGVzdGFydCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHJlcGVhdGVkbHkgZHVyaW5nIGEgXCJkcmFnIHRvIHJvdGF0ZVwiIGludGVyYWN0aW9uLiBTZWUge0BsaW5rIERyYWdSb3RhdGVIYW5kbGVyfS5cbiAgICAgKlxuICAgICAqIEBldmVudCByb3RhdGVcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50IHwgTWFwVG91Y2hFdmVudH0gZGF0YVxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gSW5pdGlhbGl6ZSB0aGUgbWFwXG4gICAgICogdmFyIG1hcCA9IG5ldyBtYXBib3hnbC5NYXAoeyAvLyBtYXAgb3B0aW9ucyB9KTtcbiAgICAgKiAvLyBTZXQgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBmaXJlc1xuICAgICAqIC8vIHJlcGVhdGVkbHkgZHVyaW5nIFwiZHJhZyB0byByb3RhdGVcIiBpbnRlcmFjdGlvbi5cbiAgICAgKiBtYXAub24oJ3JvdGF0ZScsIGZ1bmN0aW9uKCkge1xuICAgICAqICAgY29uc29sZS5sb2coJ0Egcm90YXRlIGV2ZW50IG9jY3VycmVkLicpO1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIHwgJ3JvdGF0ZSdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBcImRyYWcgdG8gcm90YXRlXCIgaW50ZXJhY3Rpb24gZW5kcy4gU2VlIHtAbGluayBEcmFnUm90YXRlSGFuZGxlcn0uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgcm90YXRlZW5kXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwTW91c2VFdmVudCB8IE1hcFRvdWNoRXZlbnR9IGRhdGFcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEluaXRpYWxpemUgdGhlIG1hcFxuICAgICAqIHZhciBtYXAgPSBuZXcgbWFwYm94Z2wuTWFwKHsgLy8gbWFwIG9wdGlvbnMgfSk7XG4gICAgICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgZmlyZXNcbiAgICAgKiAvLyBqdXN0IGFmdGVyIGEgXCJkcmFnIHRvIHJvdGF0ZVwiIGludGVyYWN0aW9uIGVuZHMuXG4gICAgICogbWFwLm9uKCdyb3RhdGVlbmQnLCBmdW5jdGlvbigpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdBIHJvdGF0ZWVuZCBldmVudCBvY2N1cnJlZC4nKTtcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICB8ICdyb3RhdGVlbmQnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuZXZlciB0aGUgbWFwJ3MgcGl0Y2ggKHRpbHQpIGJlZ2lucyBhIGNoYW5nZSBhc1xuICAgICAqIHRoZSByZXN1bHQgb2YgZWl0aGVyIHVzZXIgaW50ZXJhY3Rpb24gb3IgbWV0aG9kcyBzdWNoIGFzIHtAbGluayBNYXAjZmx5VG99IC5cbiAgICAgKlxuICAgICAqIEBldmVudCBwaXRjaHN0YXJ0XG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwRXZlbnREYXRhfSBkYXRhXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGZpcmVzXG4gICAgICogLy8ganVzdCBiZWZvcmUgYSBwaXRjaCAodGlsdCkgdHJhbnNpdGlvbiBzdGFydHMuXG4gICAgICogbWFwLm9uKCdwaXRjaHN0YXJ0JywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSBwaXRjaHN0YXJ0IGV2ZW50IG9jY3VycmVkLicpO1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIHwgJ3BpdGNoc3RhcnQnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCByZXBlYXRlZGx5IGR1cmluZyB0aGUgbWFwJ3MgcGl0Y2ggKHRpbHQpIGFuaW1hdGlvbiBiZXR3ZWVuXG4gICAgICogb25lIHN0YXRlIGFuZCBhbm90aGVyIGFzIHRoZSByZXN1bHQgb2YgZWl0aGVyIHVzZXIgaW50ZXJhY3Rpb25cbiAgICAgKiBvciBtZXRob2RzIHN1Y2ggYXMge0BsaW5rIE1hcCNmbHlUb30uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgcGl0Y2hcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBFdmVudERhdGF9IGRhdGFcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEluaXRpYWxpemUgdGhlIG1hcFxuICAgICAqIHZhciBtYXAgPSBuZXcgbWFwYm94Z2wuTWFwKHsgLy8gbWFwIG9wdGlvbnMgfSk7XG4gICAgICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgZmlyZXNcbiAgICAgKiAvLyByZXBlYXRlZGx5IGR1cmluZyBhIHBpdGNoICh0aWx0KSB0cmFuc2l0aW9uLlxuICAgICAqIG1hcC5vbigncGl0Y2gnLCBmdW5jdGlvbigpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdBIHBpdGNoIGV2ZW50IG9jY3VycmVkLicpO1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIHwgJ3BpdGNoJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIG1hcCdzIHBpdGNoICh0aWx0KSBmaW5pc2hlcyBjaGFuZ2luZyBhc1xuICAgICAqIHRoZSByZXN1bHQgb2YgZWl0aGVyIHVzZXIgaW50ZXJhY3Rpb24gb3IgbWV0aG9kcyBzdWNoIGFzIHtAbGluayBNYXAjZmx5VG99LlxuICAgICAqXG4gICAgICogQGV2ZW50IHBpdGNoZW5kXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwRXZlbnREYXRhfSBkYXRhXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGZpcmVzXG4gICAgICogLy8ganVzdCBhZnRlciBhIHBpdGNoICh0aWx0KSB0cmFuc2l0aW9uIGVuZHMuXG4gICAgICogbWFwLm9uKCdwaXRjaGVuZCcsIGZ1bmN0aW9uKCkge1xuICAgICAqICAgY29uc29sZS5sb2coJ0EgcGl0Y2hlbmQgZXZlbnQgb2NjdXJyZWQuJyk7XG4gICAgICogfSk7XG4gICAgICovXG4gICAgfCAncGl0Y2hlbmQnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgXCJib3ggem9vbVwiIGludGVyYWN0aW9uIHN0YXJ0cy4gU2VlIHtAbGluayBCb3hab29tSGFuZGxlcn0uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgYm94em9vbXN0YXJ0XG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwQm94Wm9vbUV2ZW50fSBkYXRhXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGZpcmVzXG4gICAgICogLy8ganVzdCBiZWZvcmUgYSBcImJveCB6b29tXCIgaW50ZXJhY3Rpb24gc3RhcnRzLlxuICAgICAqIG1hcC5vbignYm94em9vbXN0YXJ0JywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSBib3h6b29tc3RhcnQgZXZlbnQgb2NjdXJyZWQuJyk7XG4gICAgICogfSk7XG4gICAgICovXG4gICAgfCAnYm94em9vbXN0YXJ0J1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIFwiYm94IHpvb21cIiBpbnRlcmFjdGlvbiBlbmRzLiAgU2VlIHtAbGluayBCb3hab29tSGFuZGxlcn0uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgYm94em9vbWVuZFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwQm94Wm9vbUV2ZW50fSBkYXRhXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGZpcmVzXG4gICAgICogLy8ganVzdCBhZnRlciBhIFwiYm94IHpvb21cIiBpbnRlcmFjdGlvbiBlbmRzLlxuICAgICAqIG1hcC5vbignYm94em9vbWVuZCcsIGZ1bmN0aW9uKCkge1xuICAgICAqICAgY29uc29sZS5sb2coJ0EgYm94em9vbWVuZCBldmVudCBvY2N1cnJlZC4nKTtcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICB8ICdib3h6b29tZW5kJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgdXNlciBjYW5jZWxzIGEgXCJib3ggem9vbVwiIGludGVyYWN0aW9uLCBvciB3aGVuIHRoZSBib3VuZGluZyBib3ggZG9lcyBub3QgbWVldCB0aGUgbWluaW11bSBzaXplIHRocmVzaG9sZC5cbiAgICAgKiBTZWUge0BsaW5rIEJveFpvb21IYW5kbGVyfS5cbiAgICAgKlxuICAgICAqIEBldmVudCBib3h6b29tY2FuY2VsXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwQm94Wm9vbUV2ZW50fSBkYXRhXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGZpcmVzXG4gICAgICogLy8gdGhlIHVzZXIgY2FuY2VscyBhIFwiYm94IHpvb21cIiBpbnRlcmFjdGlvbi5cbiAgICAgKiBtYXAub24oJ2JveHpvb21jYW5jZWwnLCBmdW5jdGlvbigpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdBIGJveHpvb21jYW5jZWwgZXZlbnQgb2NjdXJyZWQuJyk7XG4gICAgICogfSk7XG4gICAgICovXG4gICAgfCAnYm94em9vbWNhbmNlbCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBtYXAgaGFzIGJlZW4gcmVzaXplZC5cbiAgICAgKlxuICAgICAqIEBldmVudCByZXNpemVcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGZpcmVzXG4gICAgICogLy8gaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIG1hcCBoYXMgYmVlbiByZXNpemVkLlxuICAgICAqIG1hcC5vbigncmVzaXplJywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSByZXNpemUgZXZlbnQgb2NjdXJyZWQuJyk7XG4gICAgICogfSk7XG4gICAgICovXG4gICAgfCAncmVzaXplJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgV2ViR0wgY29udGV4dCBpcyBsb3N0LlxuICAgICAqXG4gICAgICogQGV2ZW50IHdlYmdsY29udGV4dGxvc3RcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGZpcmVzXG4gICAgICogLy8gd2hlbiB0aGUgV2ViR0wgY29udGV4dCBpcyBsb3N0LlxuICAgICAqIG1hcC5vbignd2ViZ2xjb250ZXh0bG9zdCcsIGZ1bmN0aW9uKCkge1xuICAgICAqICAgY29uc29sZS5sb2coJ0Egd2ViZ2xjb250ZXh0bG9zdCBldmVudCBvY2N1cnJlZC4nKTtcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICB8ICd3ZWJnbGNvbnRleHRsb3N0J1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgV2ViR0wgY29udGV4dCBpcyByZXN0b3JlZC5cbiAgICAgKlxuICAgICAqIEBldmVudCB3ZWJnbGNvbnRleHRyZXN0b3JlZFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEluaXRpYWxpemUgdGhlIG1hcFxuICAgICAqIHZhciBtYXAgPSBuZXcgbWFwYm94Z2wuTWFwKHsgLy8gbWFwIG9wdGlvbnMgfSk7XG4gICAgICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgZmlyZXNcbiAgICAgKiAvLyB3aGVuIHRoZSBXZWJHTCBjb250ZXh0IGlzIHJlc3RvcmVkLlxuICAgICAqIG1hcC5vbignd2ViZ2xjb250ZXh0cmVzdG9yZWQnLCBmdW5jdGlvbigpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdBIHdlYmdsY29udGV4dHJlc3RvcmVkIGV2ZW50IG9jY3VycmVkLicpO1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIHwgJ3dlYmdsY29udGV4dHJlc3RvcmVkJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgYWxsIG5lY2Vzc2FyeSByZXNvdXJjZXMgaGF2ZSBiZWVuIGRvd25sb2FkZWRcbiAgICAgKiBhbmQgdGhlIGZpcnN0IHZpc3VhbGx5IGNvbXBsZXRlIHJlbmRlcmluZyBvZiB0aGUgbWFwIGhhcyBvY2N1cnJlZC5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGZpcmVzXG4gICAgICogLy8gd2hlbiB0aGUgbWFwIGhhcyBmaW5pc2hlZCBsb2FkaW5nLlxuICAgICAqIG1hcC5vbignbG9hZCcsIGZ1bmN0aW9uKCkge1xuICAgICAqICAgY29uc29sZS5sb2coJ0EgbG9hZCBldmVudCBvY2N1cnJlZC4nKTtcbiAgICAgKiB9KTtcbiAgICAgKiBAc2VlIFtEcmF3IEdlb0pTT04gcG9pbnRzXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2dlb2pzb24tbWFya2Vycy8pXG4gICAgICogQHNlZSBbQWRkIGxpdmUgcmVhbHRpbWUgZGF0YV0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9saXZlLWdlb2pzb24vKVxuICAgICAqIEBzZWUgW0FuaW1hdGUgYSBwb2ludF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9hbmltYXRlLXBvaW50LWFsb25nLWxpbmUvKVxuICAgICAqL1xuICAgIHwgJ2xvYWQnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuZXZlciB0aGUgbWFwIGlzIGRyYXduIHRvIHRoZSBzY3JlZW4sIGFzIHRoZSByZXN1bHQgb2ZcbiAgICAgKlxuICAgICAqIC0gYSBjaGFuZ2UgdG8gdGhlIG1hcCdzIHBvc2l0aW9uLCB6b29tLCBwaXRjaCwgb3IgYmVhcmluZ1xuICAgICAqIC0gYSBjaGFuZ2UgdG8gdGhlIG1hcCdzIHN0eWxlXG4gICAgICogLSBhIGNoYW5nZSB0byBhIEdlb0pTT04gc291cmNlXG4gICAgICogLSB0aGUgbG9hZGluZyBvZiBhIHZlY3RvciB0aWxlLCBHZW9KU09OIGZpbGUsIGdseXBoLCBvciBzcHJpdGVcbiAgICAgKlxuICAgICAqIEBldmVudCByZW5kZXJcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGZpcmVzXG4gICAgICogLy8gd2hlbmV2ZXIgdGhlIG1hcCBpcyBkcmF3biB0byB0aGUgc2NyZWVuLlxuICAgICAqIG1hcC5vbigncmVuZGVyJywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSByZW5kZXIgZXZlbnQgb2NjdXJyZWQuJyk7XG4gICAgICogfSk7XG4gICAgICovXG4gICAgfCAncmVuZGVyJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgYWZ0ZXIgdGhlIGxhc3QgZnJhbWUgcmVuZGVyZWQgYmVmb3JlIHRoZSBtYXAgZW50ZXJzIGFuXG4gICAgICogXCJpZGxlXCIgc3RhdGU6XG4gICAgICpcbiAgICAgKiAtIE5vIGNhbWVyYSB0cmFuc2l0aW9ucyBhcmUgaW4gcHJvZ3Jlc3NcbiAgICAgKiAtIEFsbCBjdXJyZW50bHkgcmVxdWVzdGVkIHRpbGVzIGhhdmUgbG9hZGVkXG4gICAgICogLSBBbGwgZmFkZS90cmFuc2l0aW9uIGFuaW1hdGlvbnMgaGF2ZSBjb21wbGV0ZWRcbiAgICAgKlxuICAgICAqIEBldmVudCBpZGxlXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gSW5pdGlhbGl6ZSB0aGUgbWFwXG4gICAgICogdmFyIG1hcCA9IG5ldyBtYXBib3hnbC5NYXAoeyAvLyBtYXAgb3B0aW9ucyB9KTtcbiAgICAgKiAvLyBTZXQgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBmaXJlc1xuICAgICAqIC8vIGp1c3QgYmVmb3JlIHRoZSBtYXAgZW50ZXJzIGFuIFwiaWRsZVwiIHN0YXRlLlxuICAgICAqIG1hcC5vbignaWRsZScsIGZ1bmN0aW9uKCkge1xuICAgICAqICAgY29uc29sZS5sb2coJ0EgaWRsZSBldmVudCBvY2N1cnJlZC4nKTtcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICB8ICdpZGxlJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIG1hcCBoYXMgYmVlbiByZW1vdmVkIHdpdGgge0BsaW5rIE1hcC5ldmVudDpyZW1vdmV9LlxuICAgICAqXG4gICAgICogQGV2ZW50IHJlbW92ZVxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEluaXRpYWxpemUgdGhlIG1hcFxuICAgICAqIHZhciBtYXAgPSBuZXcgbWFwYm94Z2wuTWFwKHsgLy8gbWFwIG9wdGlvbnMgfSk7XG4gICAgICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgZmlyZXNcbiAgICAgKiAvLyBqdXN0IGFmdGVyIHRoZSBtYXAgaXMgcmVtb3ZlZC5cbiAgICAgKiBtYXAub24oJ3JlbW92ZScsIGZ1bmN0aW9uKCkge1xuICAgICAqICAgY29uc29sZS5sb2coJ0EgcmVtb3ZlIGV2ZW50IG9jY3VycmVkLicpO1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIHwgJ3JlbW92ZSdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYW4gZXJyb3Igb2NjdXJzLiBUaGlzIGlzIEdMIEpTJ3MgcHJpbWFyeSBlcnJvciByZXBvcnRpbmdcbiAgICAgKiBtZWNoYW5pc20uIFdlIHVzZSBhbiBldmVudCBpbnN0ZWFkIG9mIGB0aHJvd2AgdG8gYmV0dGVyIGFjY29tbW9kYXRlXG4gICAgICogYXN5bmNyb25vdXMgb3BlcmF0aW9ucy4gSWYgbm8gbGlzdGVuZXJzIGFyZSBib3VuZCB0byB0aGUgYGVycm9yYCBldmVudCwgdGhlXG4gICAgICogZXJyb3Igd2lsbCBiZSBwcmludGVkIHRvIHRoZSBjb25zb2xlLlxuICAgICAqXG4gICAgICogQGV2ZW50IGVycm9yXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7e2Vycm9yOiB7bWVzc2FnZTogc3RyaW5nfX19IGRhdGFcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEluaXRpYWxpemUgdGhlIG1hcFxuICAgICAqIHZhciBtYXAgPSBuZXcgbWFwYm94Z2wuTWFwKHsgLy8gbWFwIG9wdGlvbnMgfSk7XG4gICAgICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgZmlyZXNcbiAgICAgKiAvLyB3aGVuIGFuIGVycm9yIG9jY3Vycy5cbiAgICAgKiBtYXAub24oJ2Vycm9yJywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSBlcnJvciBldmVudCBvY2N1cnJlZC4nKTtcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICB8ICdlcnJvcidcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYW55IG1hcCBkYXRhIGxvYWRzIG9yIGNoYW5nZXMuIFNlZSB7QGxpbmsgTWFwRGF0YUV2ZW50fVxuICAgICAqIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgICAqXG4gICAgICogQGV2ZW50IGRhdGFcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBEYXRhRXZlbnR9IGRhdGFcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEluaXRpYWxpemUgdGhlIG1hcFxuICAgICAqIHZhciBtYXAgPSBuZXcgbWFwYm94Z2wuTWFwKHsgLy8gbWFwIG9wdGlvbnMgfSk7XG4gICAgICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgZmlyZXNcbiAgICAgKiAvLyB3aGVuIG1hcCBkYXRhIGxvYWRzIG9yIGNoYW5nZXMuXG4gICAgICogbWFwLm9uKCdkYXRhJywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSBkYXRhIGV2ZW50IG9jY3VycmVkLicpO1xuICAgICAqIH0pO1xuICAgICAqIEBzZWUgW0Rpc3BsYXkgSFRNTCBjbHVzdGVycyB3aXRoIGN1c3RvbSBwcm9wZXJ0aWVzXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9jbHVzdGVyLWh0bWwvKVxuICAgICAqL1xuICAgIHwgJ2RhdGEnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSBtYXAncyBzdHlsZSBsb2FkcyBvciBjaGFuZ2VzLiBTZWVcbiAgICAgKiB7QGxpbmsgTWFwRGF0YUV2ZW50fSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAgKlxuICAgICAqIEBldmVudCBzdHlsZWRhdGFcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBEYXRhRXZlbnR9IGRhdGFcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEluaXRpYWxpemUgdGhlIG1hcFxuICAgICAqIHZhciBtYXAgPSBuZXcgbWFwYm94Z2wuTWFwKHsgLy8gbWFwIG9wdGlvbnMgfSk7XG4gICAgICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgZmlyZXNcbiAgICAgKiAvLyB3aGVuIHRoZSBtYXAncyBzdHlsZSBsb2FkcyBvciBjaGFuZ2VzLlxuICAgICAqIG1hcC5vbignc3R5bGVkYXRhJywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSBzdHlsZWRhdGEgZXZlbnQgb2NjdXJyZWQuJyk7XG4gICAgICogfSk7XG4gICAgICovXG4gICAgfCAnc3R5bGVkYXRhJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBvbmUgb2YgdGhlIG1hcCdzIHNvdXJjZXMgbG9hZHMgb3IgY2hhbmdlcywgaW5jbHVkaW5nIGlmIGEgdGlsZSBiZWxvbmdpbmdcbiAgICAgKiB0byBhIHNvdXJjZSBsb2FkcyBvciBjaGFuZ2VzLiBTZWUge0BsaW5rIE1hcERhdGFFdmVudH0gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc291cmNlZGF0YVxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcERhdGFFdmVudH0gZGF0YVxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gSW5pdGlhbGl6ZSB0aGUgbWFwXG4gICAgICogdmFyIG1hcCA9IG5ldyBtYXBib3hnbC5NYXAoeyAvLyBtYXAgb3B0aW9ucyB9KTtcbiAgICAgKiAvLyBTZXQgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBmaXJlc1xuICAgICAqIC8vIHdoZW4gb25lIG9mIHRoZSBtYXAncyBzb3VyY2VzIGxvYWRzIG9yIGNoYW5nZXMuXG4gICAgICogbWFwLm9uKCdzb3VyY2VkYXRhJywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSBzb3VyY2VkYXRhIGV2ZW50IG9jY3VycmVkLicpO1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIHwgJ3NvdXJjZWRhdGEnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGFueSBtYXAgZGF0YSAoc3R5bGUsIHNvdXJjZSwgdGlsZSwgZXRjKSBiZWdpbnMgbG9hZGluZyBvclxuICAgICAqIGNoYW5naW5nIGFzeW5jcm9ub3VzbHkuIEFsbCBgZGF0YWxvYWRpbmdgIGV2ZW50cyBhcmUgZm9sbG93ZWQgYnkgYSBgZGF0YWBcbiAgICAgKiBvciBgZXJyb3JgIGV2ZW50LiBTZWUge0BsaW5rIE1hcERhdGFFdmVudH0gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZGF0YWxvYWRpbmdcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBEYXRhRXZlbnR9IGRhdGFcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEluaXRpYWxpemUgdGhlIG1hcFxuICAgICAqIHZhciBtYXAgPSBuZXcgbWFwYm94Z2wuTWFwKHsgLy8gbWFwIG9wdGlvbnMgfSk7XG4gICAgICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgZmlyZXNcbiAgICAgKiAvLyB3aGVuIGFueSBtYXAgZGF0YSBiZWdpbnMgbG9hZGluZ1xuICAgICAqIC8vIG9yIGNoYW5naW5nIGFzeW5jaHJvbm91c2x5LlxuICAgICAqIG1hcC5vbignZGF0YWxvYWRpbmcnLCBmdW5jdGlvbigpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdBIGRhdGFsb2FkaW5nIGV2ZW50IG9jY3VycmVkLicpO1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIHwgJ2RhdGFsb2FkaW5nJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgbWFwJ3Mgc3R5bGUgYmVnaW5zIGxvYWRpbmcgb3IgY2hhbmdpbmcgYXN5bmNyb25vdXNseS5cbiAgICAgKiBBbGwgYHN0eWxlZGF0YWxvYWRpbmdgIGV2ZW50cyBhcmUgZm9sbG93ZWQgYnkgYSBgc3R5bGVkYXRhYFxuICAgICAqIG9yIGBlcnJvcmAgZXZlbnQuIFNlZSB7QGxpbmsgTWFwRGF0YUV2ZW50fSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAgKlxuICAgICAqIEBldmVudCBzdHlsZWRhdGFsb2FkaW5nXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwRGF0YUV2ZW50fSBkYXRhXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGZpcmVzXG4gICAgICogLy8gbWFwJ3Mgc3R5bGUgYmVnaW5zIGxvYWRpbmcgb3JcbiAgICAgKiAvLyBjaGFuZ2luZyBhc3luY3Jvbm91c2x5LlxuICAgICAqIG1hcC5vbignc3R5bGVkYXRhbG9hZGluZycsIGZ1bmN0aW9uKCkge1xuICAgICAqICAgY29uc29sZS5sb2coJ0Egc3R5bGVkYXRhbG9hZGluZyBldmVudCBvY2N1cnJlZC4nKTtcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICB8ICdzdHlsZWRhdGFsb2FkaW5nJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBvbmUgb2YgdGhlIG1hcCdzIHNvdXJjZXMgYmVnaW5zIGxvYWRpbmcgb3IgY2hhbmdpbmcgYXN5bmNyb25vdXNseS5cbiAgICAgKiBBbGwgYHNvdXJjZWRhdGFsb2FkaW5nYCBldmVudHMgYXJlIGZvbGxvd2VkIGJ5IGEgYHNvdXJjZWRhdGFgIG9yIGBlcnJvcmAgZXZlbnQuXG4gICAgICogU2VlIHtAbGluayBNYXBEYXRhRXZlbnR9IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgICAqXG4gICAgICogQGV2ZW50IHNvdXJjZWRhdGFsb2FkaW5nXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwRGF0YUV2ZW50fSBkYXRhXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGZpcmVzXG4gICAgICogLy8gbWFwJ3Mgc291cmNlcyBiZWdpbiBsb2FkaW5nIG9yXG4gICAgICogLy8gY2hhbmdpbmcgYXN5bmNyb25vdXNseS5cbiAgICAgKiBtYXAub24oJ3NvdXJjZWRhdGFsb2FkaW5nJywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSBzb3VyY2VkYXRhbG9hZGluZyBldmVudCBvY2N1cnJlZC4nKTtcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICB8ICdzb3VyY2VkYXRhbG9hZGluZydcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYW4gaWNvbiBvciBwYXR0ZXJuIG5lZWRlZCBieSB0aGUgc3R5bGUgaXMgbWlzc2luZy4gVGhlIG1pc3NpbmcgaW1hZ2UgY2FuXG4gICAgICogYmUgYWRkZWQgd2l0aCB7QGxpbmsgTWFwI2FkZEltYWdlfSB3aXRoaW4gdGhpcyBldmVudCBsaXN0ZW5lciBjYWxsYmFjayB0byBwcmV2ZW50IHRoZSBpbWFnZSBmcm9tXG4gICAgICogYmVpbmcgc2tpcHBlZC4gVGhpcyBldmVudCBjYW4gYmUgdXNlZCB0byBkeW5hbWljYWxseSBnZW5lcmF0ZSBpY29ucyBhbmQgcGF0dGVybnMuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3R5bGVpbWFnZW1pc3NpbmdcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IGlkIFRoZSBpZCBvZiB0aGUgbWlzc2luZyBpbWFnZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEluaXRpYWxpemUgdGhlIG1hcFxuICAgICAqIHZhciBtYXAgPSBuZXcgbWFwYm94Z2wuTWFwKHsgLy8gbWFwIG9wdGlvbnMgfSk7XG4gICAgICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgZmlyZXNcbiAgICAgKiAvLyBhbiBpY29uIG9yIHBhdHRlcm4gaXMgbWlzc2luZy5cbiAgICAgKiBtYXAub24oJ3N0eWxlaW1hZ2VtaXNzaW5nJywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSBzdHlsZWltYWdlbWlzc2luZyBldmVudCBvY2N1cnJlZC4nKTtcbiAgICAgKiB9KTtcbiAgICAgKiBAc2VlIFtHZW5lcmF0ZSBhbmQgYWRkIGEgbWlzc2luZyBpY29uIHRvIHRoZSBtYXBdKGh0dHBzOi8vbWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9hZGQtaW1hZ2UtbWlzc2luZy1nZW5lcmF0ZWQvKVxuICAgICAqL1xuICAgIHwgJ3N0eWxlaW1hZ2VtaXNzaW5nJ1xuXG4gICAgLyoqXG4gICAgICogQGV2ZW50IHN0eWxlLmxvYWRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB8ICdzdHlsZS5sb2FkJztcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7TWFwTW91c2VFdmVudCwgTWFwVG91Y2hFdmVudCwgTWFwV2hlZWxFdmVudH0gZnJvbSAnLi4vZXZlbnRzJztcbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi9tYXAnO1xuXG5leHBvcnQgY2xhc3MgTWFwRXZlbnRIYW5kbGVyIHtcblxuICAgIF9tb3VzZWRvd25Qb3M6IFBvaW50O1xuICAgIF9jbGlja1RvbGVyYW5jZTogbnVtYmVyO1xuICAgIF9tYXA6IE1hcDtcblxuICAgIGNvbnN0cnVjdG9yKG1hcDogTWFwLCBvcHRpb25zOiB7IGNsaWNrVG9sZXJhbmNlOiBudW1iZXIgfSkge1xuICAgICAgICB0aGlzLl9tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMuX2NsaWNrVG9sZXJhbmNlID0gb3B0aW9ucy5jbGlja1RvbGVyYW5jZTtcbiAgICB9XG5cbiAgICByZXNldCgpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuX21vdXNlZG93blBvcztcbiAgICB9XG5cbiAgICB3aGVlbChlOiBXaGVlbEV2ZW50KSB7XG4gICAgICAgIC8vIElmIG1hcEV2ZW50LnByZXZlbnREZWZhdWx0KCkgaXMgY2FsbGVkIGJ5IHRoZSB1c2VyLCBwcmV2ZW50IGhhbmRsZXJzIHN1Y2ggYXM6XG4gICAgICAgIC8vIC0gU2Nyb2xsWm9vbVxuICAgICAgICByZXR1cm4gdGhpcy5fZmlyZVByZXZlbnRhYmxlKG5ldyBNYXBXaGVlbEV2ZW50KGUudHlwZSwgdGhpcy5fbWFwLCBlKSk7XG4gICAgfVxuXG4gICAgbW91c2Vkb3duKGU6IE1vdXNlRXZlbnQsIHBvaW50OiBQb2ludCkge1xuICAgICAgICB0aGlzLl9tb3VzZWRvd25Qb3MgPSBwb2ludDtcbiAgICAgICAgLy8gSWYgbWFwRXZlbnQucHJldmVudERlZmF1bHQoKSBpcyBjYWxsZWQgYnkgdGhlIHVzZXIsIHByZXZlbnQgaGFuZGxlcnMgc3VjaCBhczpcbiAgICAgICAgLy8gLSBNb3VzZVBhblxuICAgICAgICAvLyAtIE1vdXNlUm90YXRlXG4gICAgICAgIC8vIC0gTW91c2VQaXRjaFxuICAgICAgICAvLyAtIERibGNsaWNrSGFuZGxlclxuICAgICAgICByZXR1cm4gdGhpcy5fZmlyZVByZXZlbnRhYmxlKG5ldyBNYXBNb3VzZUV2ZW50KGUudHlwZSwgdGhpcy5fbWFwLCBlKSk7XG4gICAgfVxuXG4gICAgbW91c2V1cChlOiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIHRoaXMuX21hcC5maXJlKG5ldyBNYXBNb3VzZUV2ZW50KGUudHlwZSwgdGhpcy5fbWFwLCBlKSk7XG4gICAgfVxuXG4gICAgY2xpY2soZTogTW91c2VFdmVudCwgcG9pbnQ6IFBvaW50KSB7XG4gICAgICAgIGlmICh0aGlzLl9tb3VzZWRvd25Qb3MgJiYgdGhpcy5fbW91c2Vkb3duUG9zLmRpc3QocG9pbnQpID49IHRoaXMuX2NsaWNrVG9sZXJhbmNlKSByZXR1cm47XG4gICAgICAgIHRoaXMuX21hcC5maXJlKG5ldyBNYXBNb3VzZUV2ZW50KGUudHlwZSwgdGhpcy5fbWFwLCBlKSk7XG4gICAgfVxuXG4gICAgZGJsY2xpY2soZTogTW91c2VFdmVudCkge1xuICAgICAgICAvLyBJZiBtYXBFdmVudC5wcmV2ZW50RGVmYXVsdCgpIGlzIGNhbGxlZCBieSB0aGUgdXNlciwgcHJldmVudCBoYW5kbGVycyBzdWNoIGFzOlxuICAgICAgICAvLyAtIERibENsaWNrWm9vbVxuICAgICAgICByZXR1cm4gdGhpcy5fZmlyZVByZXZlbnRhYmxlKG5ldyBNYXBNb3VzZUV2ZW50KGUudHlwZSwgdGhpcy5fbWFwLCBlKSk7XG4gICAgfVxuXG4gICAgbW91c2VvdmVyKGU6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgdGhpcy5fbWFwLmZpcmUobmV3IE1hcE1vdXNlRXZlbnQoZS50eXBlLCB0aGlzLl9tYXAsIGUpKTtcbiAgICB9XG5cbiAgICBtb3VzZW91dChlOiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIHRoaXMuX21hcC5maXJlKG5ldyBNYXBNb3VzZUV2ZW50KGUudHlwZSwgdGhpcy5fbWFwLCBlKSk7XG4gICAgfVxuXG4gICAgdG91Y2hzdGFydChlOiBUb3VjaEV2ZW50KSB7XG4gICAgICAgIC8vIElmIG1hcEV2ZW50LnByZXZlbnREZWZhdWx0KCkgaXMgY2FsbGVkIGJ5IHRoZSB1c2VyLCBwcmV2ZW50IGhhbmRsZXJzIHN1Y2ggYXM6XG4gICAgICAgIC8vIC0gVG91Y2hQYW5cbiAgICAgICAgLy8gLSBUb3VjaFpvb21cbiAgICAgICAgLy8gLSBUb3VjaFJvdGF0ZVxuICAgICAgICAvLyAtIFRvdWNoUGl0Y2hcbiAgICAgICAgLy8gLSBUYXBab29tXG4gICAgICAgIC8vIC0gU3dpcGVab29tXG4gICAgICAgIHJldHVybiB0aGlzLl9maXJlUHJldmVudGFibGUobmV3IE1hcFRvdWNoRXZlbnQoZS50eXBlLCB0aGlzLl9tYXAsIGUpKTtcbiAgICB9XG5cbiAgICB0b3VjaGVuZChlOiBUb3VjaEV2ZW50KSB7XG4gICAgICAgIHRoaXMuX21hcC5maXJlKG5ldyBNYXBUb3VjaEV2ZW50KGUudHlwZSwgdGhpcy5fbWFwLCBlKSk7XG4gICAgfVxuXG4gICAgdG91Y2hjYW5jZWwoZTogVG91Y2hFdmVudCkge1xuICAgICAgICB0aGlzLl9tYXAuZmlyZShuZXcgTWFwVG91Y2hFdmVudChlLnR5cGUsIHRoaXMuX21hcCwgZSkpO1xuICAgIH1cblxuICAgIF9maXJlUHJldmVudGFibGUobWFwRXZlbnQ6IE1hcE1vdXNlRXZlbnQgfCBNYXBUb3VjaEV2ZW50IHwgTWFwV2hlZWxFdmVudCkge1xuICAgICAgICB0aGlzLl9tYXAuZmlyZShtYXBFdmVudCk7XG4gICAgICAgIGlmIChtYXBFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICAvLyByZXR1cm5pbmcgYW4gb2JqZWN0IG1hcmtzIHRoZSBoYW5kbGVyIGFzIGFjdGl2ZSBhbmQgcmVzZXRzIG90aGVyIGhhbmRsZXJzXG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc0VuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlzQWN0aXZlKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGVuYWJsZSgpIHt9XG4gICAgZGlzYWJsZSgpIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBCbG9ja2FibGVNYXBFdmVudEhhbmRsZXIge1xuICAgIF9tYXA6IE1hcDtcbiAgICBfZGVsYXlDb250ZXh0TWVudTogYm9vbGVhbjtcbiAgICBfY29udGV4dE1lbnVFdmVudDogTW91c2VFdmVudDtcblxuICAgIGNvbnN0cnVjdG9yKG1hcDogTWFwKSB7XG4gICAgICAgIHRoaXMuX21hcCA9IG1hcDtcbiAgICB9XG5cbiAgICByZXNldCgpIHtcbiAgICAgICAgdGhpcy5fZGVsYXlDb250ZXh0TWVudSA9IGZhbHNlO1xuICAgICAgICBkZWxldGUgdGhpcy5fY29udGV4dE1lbnVFdmVudDtcbiAgICB9XG5cbiAgICBtb3VzZW1vdmUoZTogTW91c2VFdmVudCkge1xuICAgICAgICAvLyBtb3VzZW1vdmUgbWFwIGV2ZW50cyBzaG91bGQgbm90IGJlIGZpcmVkIHdoZW4gaW50ZXJhY3Rpb24gaGFuZGxlcnMgKHBhbiwgcm90YXRlLCBldGMpIGFyZSBhY3RpdmVcbiAgICAgICAgdGhpcy5fbWFwLmZpcmUobmV3IE1hcE1vdXNlRXZlbnQoZS50eXBlLCB0aGlzLl9tYXAsIGUpKTtcbiAgICB9XG5cbiAgICB0b3VjaG1vdmUoZTogVG91Y2hFdmVudCkge1xuICAgICAgICAvLyB0b3VjaG1vdmUgbWFwIGV2ZW50cyBzaG91bGQgbm90IGJlIGZpcmVkIHdoZW4gaW50ZXJhY3Rpb24gaGFuZGxlcnMgKHBhbiwgcm90YXRlLCBldGMpIGFyZSBhY3RpdmVcbiAgICAgICAgdGhpcy5fbWFwLmZpcmUobmV3IE1hcFRvdWNoRXZlbnQoZS50eXBlLCB0aGlzLl9tYXAsIGUpKTtcbiAgICB9XG5cbiAgICBtb3VzZWRvd24oKSB7XG4gICAgICAgIHRoaXMuX2RlbGF5Q29udGV4dE1lbnUgPSB0cnVlO1xuICAgIH1cblxuICAgIG1vdXNldXAoKSB7XG4gICAgICAgIHRoaXMuX2RlbGF5Q29udGV4dE1lbnUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuX2NvbnRleHRNZW51RXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX21hcC5maXJlKG5ldyBNYXBNb3VzZUV2ZW50KCdjb250ZXh0bWVudScsIHRoaXMuX21hcCwgdGhpcy5fY29udGV4dE1lbnVFdmVudCkpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2NvbnRleHRNZW51RXZlbnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29udGV4dG1lbnUoZTogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5fZGVsYXlDb250ZXh0TWVudSkge1xuICAgICAgICAgICAgLy8gTWFjOiBjb250ZXh0bWVudSBmaXJlZCBvbiBtb3VzZWRvd247IHdlIHNhdmUgaXQgdW50aWwgbW91c2V1cCBmb3IgY29uc2lzdGVuY3kncyBzYWtlXG4gICAgICAgICAgICB0aGlzLl9jb250ZXh0TWVudUV2ZW50ID0gZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFdpbmRvd3M6IGNvbnRleHRtZW51IGZpcmVkIG9uIG1vdXNldXAsIHNvIGZpcmUgZXZlbnQgbm93XG4gICAgICAgICAgICB0aGlzLl9tYXAuZmlyZShuZXcgTWFwTW91c2VFdmVudChlLnR5cGUsIHRoaXMuX21hcCwgZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcHJldmVudCBicm93c2VyIGNvbnRleHQgbWVudSB3aGVuIG5lY2Vzc2FyeVxuICAgICAgICBpZiAodGhpcy5fbWFwLmxpc3RlbnMoJ2NvbnRleHRtZW51JykpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzRW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZW5hYmxlKCkge31cbiAgICBkaXNhYmxlKCkge31cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBET00gZnJvbSAnLi4vLi4vdXRpbC9kb20nO1xuXG5pbXBvcnQge0V2ZW50fSBmcm9tICcuLi8uLi91dGlsL2V2ZW50ZWQnO1xuXG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vbWFwJztcblxuLyoqXG4gKiBUaGUgYEJveFpvb21IYW5kbGVyYCBhbGxvd3MgdGhlIHVzZXIgdG8gem9vbSB0aGUgbWFwIHRvIGZpdCB3aXRoaW4gYSBib3VuZGluZyBib3guXG4gKiBUaGUgYm91bmRpbmcgYm94IGlzIGRlZmluZWQgYnkgY2xpY2tpbmcgYW5kIGhvbGRpbmcgYHNoaWZ0YCB3aGlsZSBkcmFnZ2luZyB0aGUgY3Vyc29yLlxuICovXG5jbGFzcyBCb3hab29tSGFuZGxlciB7XG4gICAgX21hcDogTWFwO1xuICAgIF9lbDogSFRNTEVsZW1lbnQ7XG4gICAgX2NvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gICAgX2VuYWJsZWQ6IGJvb2xlYW47XG4gICAgX2FjdGl2ZTogYm9vbGVhbjtcbiAgICBfc3RhcnRQb3M6IFBvaW50O1xuICAgIF9sYXN0UG9zOiBQb2ludDtcbiAgICBfYm94OiBIVE1MRWxlbWVudDtcbiAgICBfY2xpY2tUb2xlcmFuY2U6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobWFwOiBNYXAsIG9wdGlvbnM6IHtcbiAgICAgICAgY2xpY2tUb2xlcmFuY2U6IG51bWJlclxuICAgIH0pIHtcbiAgICAgICAgdGhpcy5fbWFwID0gbWFwO1xuICAgICAgICB0aGlzLl9lbCA9IG1hcC5nZXRDYW52YXNDb250YWluZXIoKTtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyID0gbWFwLmdldENvbnRhaW5lcigpO1xuICAgICAgICB0aGlzLl9jbGlja1RvbGVyYW5jZSA9IG9wdGlvbnMuY2xpY2tUb2xlcmFuY2UgfHwgMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIFwiYm94IHpvb21cIiBpbnRlcmFjdGlvbiBpcyBlbmFibGVkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgXCJib3ggem9vbVwiIGludGVyYWN0aW9uIGlzIGVuYWJsZWQuXG4gICAgICovXG4gICAgaXNFbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9lbmFibGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgXCJib3ggem9vbVwiIGludGVyYWN0aW9uIGlzIGFjdGl2ZSwgaS5lLiBjdXJyZW50bHkgYmVpbmcgdXNlZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIFwiYm94IHpvb21cIiBpbnRlcmFjdGlvbiBpcyBhY3RpdmUuXG4gICAgICovXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2FjdGl2ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzIHRoZSBcImJveCB6b29tXCIgaW50ZXJhY3Rpb24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICAgbWFwLmJveFpvb20uZW5hYmxlKCk7XG4gICAgICovXG4gICAgZW5hYmxlKCkge1xuICAgICAgICBpZiAodGhpcy5pc0VuYWJsZWQoKSkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9lbmFibGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgXCJib3ggem9vbVwiIGludGVyYWN0aW9uLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAgIG1hcC5ib3hab29tLmRpc2FibGUoKTtcbiAgICAgKi9cbiAgICBkaXNhYmxlKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNFbmFibGVkKCkpIHJldHVybjtcbiAgICAgICAgdGhpcy5fZW5hYmxlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIG1vdXNlZG93bihlOiBNb3VzZUV2ZW50LCBwb2ludDogUG9pbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRW5hYmxlZCgpKSByZXR1cm47XG4gICAgICAgIGlmICghKGUuc2hpZnRLZXkgJiYgZS5idXR0b24gPT09IDApKSByZXR1cm47XG5cbiAgICAgICAgRE9NLmRpc2FibGVEcmFnKCk7XG4gICAgICAgIHRoaXMuX3N0YXJ0UG9zID0gdGhpcy5fbGFzdFBvcyA9IHBvaW50O1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSB0cnVlO1xuICAgIH1cblxuICAgIG1vdXNlbW92ZVdpbmRvdyhlOiBNb3VzZUV2ZW50LCBwb2ludDogUG9pbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9hY3RpdmUpIHJldHVybjtcblxuICAgICAgICBjb25zdCBwb3MgPSBwb2ludDtcblxuICAgICAgICBpZiAodGhpcy5fbGFzdFBvcy5lcXVhbHMocG9zKSB8fCAoIXRoaXMuX2JveCAmJiBwb3MuZGlzdCh0aGlzLl9zdGFydFBvcykgPCB0aGlzLl9jbGlja1RvbGVyYW5jZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHAwID0gdGhpcy5fc3RhcnRQb3M7XG4gICAgICAgIHRoaXMuX2xhc3RQb3MgPSBwb3M7XG5cbiAgICAgICAgaWYgKCF0aGlzLl9ib3gpIHtcbiAgICAgICAgICAgIHRoaXMuX2JveCA9IERPTS5jcmVhdGUoJ2RpdicsICdtYXBib3hnbC1ib3h6b29tJywgdGhpcy5fY29udGFpbmVyKTtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1jcm9zc2hhaXInKTtcbiAgICAgICAgICAgIHRoaXMuX2ZpcmVFdmVudCgnYm94em9vbXN0YXJ0JywgZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtaW5YID0gTWF0aC5taW4ocDAueCwgcG9zLngpLFxuICAgICAgICAgICAgbWF4WCA9IE1hdGgubWF4KHAwLngsIHBvcy54KSxcbiAgICAgICAgICAgIG1pblkgPSBNYXRoLm1pbihwMC55LCBwb3MueSksXG4gICAgICAgICAgICBtYXhZID0gTWF0aC5tYXgocDAueSwgcG9zLnkpO1xuXG4gICAgICAgIERPTS5zZXRUcmFuc2Zvcm0odGhpcy5fYm94LCBgdHJhbnNsYXRlKCR7bWluWH1weCwke21pbll9cHgpYCk7XG5cbiAgICAgICAgdGhpcy5fYm94LnN0eWxlLndpZHRoID0gYCR7bWF4WCAtIG1pblh9cHhgO1xuICAgICAgICB0aGlzLl9ib3guc3R5bGUuaGVpZ2h0ID0gYCR7bWF4WSAtIG1pbll9cHhgO1xuICAgIH1cblxuICAgIG1vdXNldXBXaW5kb3coZTogTW91c2VFdmVudCwgcG9pbnQ6IFBvaW50KSB7XG4gICAgICAgIGlmICghdGhpcy5fYWN0aXZlKSByZXR1cm47XG5cbiAgICAgICAgaWYgKGUuYnV0dG9uICE9PSAwKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgcDAgPSB0aGlzLl9zdGFydFBvcyxcbiAgICAgICAgICAgIHAxID0gcG9pbnQ7XG5cbiAgICAgICAgdGhpcy5yZXNldCgpO1xuXG4gICAgICAgIERPTS5zdXBwcmVzc0NsaWNrKCk7XG5cbiAgICAgICAgaWYgKHAwLnggPT09IHAxLnggJiYgcDAueSA9PT0gcDEueSkge1xuICAgICAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdib3h6b29tY2FuY2VsJywgZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9tYXAuZmlyZShuZXcgRXZlbnQoJ2JveHpvb21lbmQnLCB7b3JpZ2luYWxFdmVudDogZX0pKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY2FtZXJhQW5pbWF0aW9uOiBtYXAgPT4gbWFwLmZpdFNjcmVlbkNvb3JkaW5hdGVzKHAwLCBwMSwgdGhpcy5fbWFwLmdldEJlYXJpbmcoKSwge2xpbmVhcjogdHJ1ZX0pXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAga2V5ZG93bihlOiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5fYWN0aXZlKSByZXR1cm47XG5cbiAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgICAgIHRoaXMuX2ZpcmVFdmVudCgnYm94em9vbWNhbmNlbCcsIGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVzZXQoKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jcm9zc2hhaXInKTtcblxuICAgICAgICBpZiAodGhpcy5fYm94KSB7XG4gICAgICAgICAgICBET00ucmVtb3ZlKHRoaXMuX2JveCk7XG4gICAgICAgICAgICB0aGlzLl9ib3ggPSAobnVsbDogYW55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIERPTS5lbmFibGVEcmFnKCk7XG5cbiAgICAgICAgZGVsZXRlIHRoaXMuX3N0YXJ0UG9zO1xuICAgICAgICBkZWxldGUgdGhpcy5fbGFzdFBvcztcbiAgICB9XG5cbiAgICBfZmlyZUV2ZW50KHR5cGU6IHN0cmluZywgZTogKikge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWFwLmZpcmUobmV3IEV2ZW50KHR5cGUsIHtvcmlnaW5hbEV2ZW50OiBlfSkpO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQm94Wm9vbUhhbmRsZXI7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmRleFRvdWNoZXModG91Y2hlczogVG91Y2hMaXN0LCBwb2ludHM6IEFycmF5PFBvaW50Pikge1xuICAgIGFzc2VydCh0b3VjaGVzLmxlbmd0aCA9PT0gcG9pbnRzLmxlbmd0aCk7XG4gICAgY29uc3Qgb2JqID0ge307XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b3VjaGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG9ialt0b3VjaGVzW2ldLmlkZW50aWZpZXJdID0gcG9pbnRzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IHtpbmRleFRvdWNoZXN9IGZyb20gJy4vaGFuZGxlcl91dGlsJztcblxuZnVuY3Rpb24gZ2V0Q2VudHJvaWQocG9pbnRzOiBBcnJheTxQb2ludD4pIHtcbiAgICBjb25zdCBzdW0gPSBuZXcgUG9pbnQoMCwgMCk7XG4gICAgZm9yIChjb25zdCBwb2ludCBvZiBwb2ludHMpIHtcbiAgICAgICAgc3VtLl9hZGQocG9pbnQpO1xuICAgIH1cbiAgICByZXR1cm4gc3VtLmRpdihwb2ludHMubGVuZ3RoKTtcbn1cblxuZXhwb3J0IGNvbnN0IE1BWF9UQVBfSU5URVJWQUwgPSA1MDA7XG5jb25zdCBNQVhfVE9VQ0hfVElNRSA9IDUwMDtcbmNvbnN0IE1BWF9ESVNUID0gMzA7XG5cbmV4cG9ydCBjbGFzcyBTaW5nbGVUYXBSZWNvZ25pemVyIHtcblxuICAgIG51bVRvdWNoZXM6IG51bWJlcjtcbiAgICBjZW50cm9pZDogUG9pbnQ7XG4gICAgc3RhcnRUaW1lOiBudW1iZXI7XG4gICAgYWJvcnRlZDogYm9vbGVhbjtcbiAgICB0b3VjaGVzOiB7IFtudW1iZXIgfCBzdHJpbmddOiBQb2ludCB9O1xuXG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogeyBudW1Ub3VjaGVzOiBudW1iZXIgfSkge1xuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgIHRoaXMubnVtVG91Y2hlcyA9IG9wdGlvbnMubnVtVG91Y2hlcztcbiAgICB9XG5cbiAgICByZXNldCgpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuY2VudHJvaWQ7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnN0YXJ0VGltZTtcbiAgICAgICAgZGVsZXRlIHRoaXMudG91Y2hlcztcbiAgICAgICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdG91Y2hzdGFydChlOiBUb3VjaEV2ZW50LCBwb2ludHM6IEFycmF5PFBvaW50Pikge1xuXG4gICAgICAgIGlmICh0aGlzLmNlbnRyb2lkIHx8IGUudGFyZ2V0VG91Y2hlcy5sZW5ndGggPiB0aGlzLm51bVRvdWNoZXMpIHtcbiAgICAgICAgICAgIHRoaXMuYWJvcnRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYWJvcnRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc3RhcnRUaW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRUaW1lID0gZS50aW1lU3RhbXA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZS50YXJnZXRUb3VjaGVzLmxlbmd0aCA9PT0gdGhpcy5udW1Ub3VjaGVzKSB7XG4gICAgICAgICAgICB0aGlzLmNlbnRyb2lkID0gZ2V0Q2VudHJvaWQocG9pbnRzKTtcbiAgICAgICAgICAgIHRoaXMudG91Y2hlcyA9IGluZGV4VG91Y2hlcyhlLnRhcmdldFRvdWNoZXMsIHBvaW50cyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0b3VjaG1vdmUoZTogVG91Y2hFdmVudCwgcG9pbnRzOiBBcnJheTxQb2ludD4pIHtcbiAgICAgICAgaWYgKHRoaXMuYWJvcnRlZCB8fCAhdGhpcy5jZW50cm9pZCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IG5ld1RvdWNoZXMgPSBpbmRleFRvdWNoZXMoZS50YXJnZXRUb3VjaGVzLCBwb2ludHMpO1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMudG91Y2hlcykge1xuICAgICAgICAgICAgY29uc3QgcHJldlBvcyA9IHRoaXMudG91Y2hlc1tpZF07XG4gICAgICAgICAgICBjb25zdCBwb3MgPSBuZXdUb3VjaGVzW2lkXTtcbiAgICAgICAgICAgIGlmICghcG9zIHx8IHBvcy5kaXN0KHByZXZQb3MpID4gTUFYX0RJU1QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdG91Y2hlbmQoZTogVG91Y2hFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuY2VudHJvaWQgfHwgZS50aW1lU3RhbXAgLSB0aGlzLnN0YXJ0VGltZSA+IE1BWF9UT1VDSF9USU1FKSB7XG4gICAgICAgICAgICB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGUudGFyZ2V0VG91Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbnRyb2lkID0gIXRoaXMuYWJvcnRlZCAmJiB0aGlzLmNlbnRyb2lkO1xuICAgICAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICAgICAgaWYgKGNlbnRyb2lkKSByZXR1cm4gY2VudHJvaWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuZXhwb3J0IGNsYXNzIFRhcFJlY29nbml6ZXIge1xuXG4gICAgc2luZ2xlVGFwOiBTaW5nbGVUYXBSZWNvZ25pemVyO1xuICAgIG51bVRhcHM6IG51bWJlcjtcbiAgICBsYXN0VGltZTogbnVtYmVyO1xuICAgIGxhc3RUYXA6IFBvaW50O1xuICAgIGNvdW50OiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiB7IG51bVRhcHM6IG51bWJlciwgbnVtVG91Y2hlczogbnVtYmVyIH0pIHtcbiAgICAgICAgdGhpcy5zaW5nbGVUYXAgPSBuZXcgU2luZ2xlVGFwUmVjb2duaXplcihvcHRpb25zKTtcbiAgICAgICAgdGhpcy5udW1UYXBzID0gb3B0aW9ucy5udW1UYXBzO1xuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgcmVzZXQoKSB7XG4gICAgICAgIHRoaXMubGFzdFRpbWUgPSBJbmZpbml0eTtcbiAgICAgICAgZGVsZXRlIHRoaXMubGFzdFRhcDtcbiAgICAgICAgdGhpcy5jb3VudCA9IDA7XG4gICAgICAgIHRoaXMuc2luZ2xlVGFwLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgdG91Y2hzdGFydChlOiBUb3VjaEV2ZW50LCBwb2ludHM6IEFycmF5PFBvaW50Pikge1xuICAgICAgICB0aGlzLnNpbmdsZVRhcC50b3VjaHN0YXJ0KGUsIHBvaW50cyk7XG4gICAgfVxuXG4gICAgdG91Y2htb3ZlKGU6IFRvdWNoRXZlbnQsIHBvaW50czogQXJyYXk8UG9pbnQ+KSB7XG4gICAgICAgIHRoaXMuc2luZ2xlVGFwLnRvdWNobW92ZShlLCBwb2ludHMpO1xuICAgIH1cblxuICAgIHRvdWNoZW5kKGU6IFRvdWNoRXZlbnQpIHtcbiAgICAgICAgY29uc3QgdGFwID0gdGhpcy5zaW5nbGVUYXAudG91Y2hlbmQoZSk7XG4gICAgICAgIGlmICh0YXApIHtcbiAgICAgICAgICAgIGNvbnN0IHNvb25Fbm91Z2ggPSBlLnRpbWVTdGFtcCAtIHRoaXMubGFzdFRpbWUgPCBNQVhfVEFQX0lOVEVSVkFMO1xuICAgICAgICAgICAgY29uc3QgY2xvc2VFbm91Z2ggPSAhdGhpcy5sYXN0VGFwIHx8IHRoaXMubGFzdFRhcC5kaXN0KHRhcCkgPCBNQVhfRElTVDtcblxuICAgICAgICAgICAgaWYgKCFzb29uRW5vdWdoIHx8ICFjbG9zZUVub3VnaCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jb3VudCsrO1xuICAgICAgICAgICAgdGhpcy5sYXN0VGltZSA9IGUudGltZVN0YW1wO1xuICAgICAgICAgICAgdGhpcy5sYXN0VGFwID0gdGFwO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5jb3VudCA9PT0gdGhpcy5udW1UYXBzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0YXA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge1RhcFJlY29nbml6ZXJ9IGZyb20gJy4vdGFwX3JlY29nbml6ZXInO1xuaW1wb3J0IHR5cGUgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vbWFwJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGFwWm9vbUhhbmRsZXIge1xuXG4gICAgX2VuYWJsZWQ6IGJvb2xlYW47XG4gICAgX2FjdGl2ZTogYm9vbGVhbjtcbiAgICBfem9vbUluOiBUYXBSZWNvZ25pemVyO1xuICAgIF96b29tT3V0OiBUYXBSZWNvZ25pemVyO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuX3pvb21JbiA9IG5ldyBUYXBSZWNvZ25pemVyKHtcbiAgICAgICAgICAgIG51bVRvdWNoZXM6IDEsXG4gICAgICAgICAgICBudW1UYXBzOiAyXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX3pvb21PdXQgPSBuZXcgVGFwUmVjb2duaXplcih7XG4gICAgICAgICAgICBudW1Ub3VjaGVzOiAyLFxuICAgICAgICAgICAgbnVtVGFwczogMVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgcmVzZXQoKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl96b29tSW4ucmVzZXQoKTtcbiAgICAgICAgdGhpcy5fem9vbU91dC5yZXNldCgpO1xuICAgIH1cblxuICAgIHRvdWNoc3RhcnQoZTogVG91Y2hFdmVudCwgcG9pbnRzOiBBcnJheTxQb2ludD4pIHtcbiAgICAgICAgdGhpcy5fem9vbUluLnRvdWNoc3RhcnQoZSwgcG9pbnRzKTtcbiAgICAgICAgdGhpcy5fem9vbU91dC50b3VjaHN0YXJ0KGUsIHBvaW50cyk7XG4gICAgfVxuXG4gICAgdG91Y2htb3ZlKGU6IFRvdWNoRXZlbnQsIHBvaW50czogQXJyYXk8UG9pbnQ+KSB7XG4gICAgICAgIHRoaXMuX3pvb21Jbi50b3VjaG1vdmUoZSwgcG9pbnRzKTtcbiAgICAgICAgdGhpcy5fem9vbU91dC50b3VjaG1vdmUoZSwgcG9pbnRzKTtcbiAgICB9XG5cbiAgICB0b3VjaGVuZChlOiBUb3VjaEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHpvb21JblBvaW50ID0gdGhpcy5fem9vbUluLnRvdWNoZW5kKGUpO1xuICAgICAgICBjb25zdCB6b29tT3V0UG9pbnQgPSB0aGlzLl96b29tT3V0LnRvdWNoZW5kKGUpO1xuXG4gICAgICAgIGlmICh6b29tSW5Qb2ludCkge1xuICAgICAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZXNldCgpLCAwKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY2FtZXJhQW5pbWF0aW9uOiAobWFwOiBNYXApID0+IG1hcC5lYXNlVG8oe1xuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwLFxuICAgICAgICAgICAgICAgICAgICB6b29tOiBtYXAuZ2V0Wm9vbSgpICsgMSxcbiAgICAgICAgICAgICAgICAgICAgYXJvdW5kOiBtYXAudW5wcm9qZWN0KHpvb21JblBvaW50KVxuICAgICAgICAgICAgICAgIH0sIHtvcmlnaW5hbEV2ZW50OiBlfSlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoem9vbU91dFBvaW50KSB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlc2V0KCksIDApO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBjYW1lcmFBbmltYXRpb246IChtYXA6IE1hcCkgPT4gbWFwLmVhc2VUbyh7XG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAzMDAsXG4gICAgICAgICAgICAgICAgICAgIHpvb206IG1hcC5nZXRab29tKCkgLSAxLFxuICAgICAgICAgICAgICAgICAgICBhcm91bmQ6IG1hcC51bnByb2plY3Qoem9vbU91dFBvaW50KVxuICAgICAgICAgICAgICAgIH0sIHtvcmlnaW5hbEV2ZW50OiBlfSlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0b3VjaGNhbmNlbCgpIHtcbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH1cblxuICAgIGVuYWJsZSgpIHtcbiAgICAgICAgdGhpcy5fZW5hYmxlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgZGlzYWJsZSgpIHtcbiAgICAgICAgdGhpcy5fZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgaXNFbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5hYmxlZDtcbiAgICB9XG5cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgRE9NIGZyb20gJy4uLy4uL3V0aWwvZG9tJztcbmltcG9ydCB0eXBlIFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG5jb25zdCBMRUZUX0JVVFRPTiA9IDA7XG5jb25zdCBSSUdIVF9CVVRUT04gPSAyO1xuXG5jbGFzcyBNb3VzZUhhbmRsZXIge1xuXG4gICAgX2VuYWJsZWQ6IGJvb2xlYW47XG4gICAgX2FjdGl2ZTogYm9vbGVhbjtcbiAgICBfbGFzdFBvaW50OiBQb2ludDtcbiAgICBfZXZlbnRCdXR0b246IG51bWJlcjtcbiAgICBfbW92ZWQ6IGJvb2xlYW47XG4gICAgX2NsaWNrVG9sZXJhbmNlOiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiB7IGNsaWNrVG9sZXJhbmNlOiBudW1iZXIgfSkge1xuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgIHRoaXMuX2NsaWNrVG9sZXJhbmNlID0gb3B0aW9ucy5jbGlja1RvbGVyYW5jZSB8fCAxO1xuICAgIH1cblxuICAgIHJlc2V0KCkge1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fbW92ZWQgPSBmYWxzZTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX2xhc3RQb2ludDtcbiAgICAgICAgZGVsZXRlIHRoaXMuX2V2ZW50QnV0dG9uO1xuICAgIH1cblxuICAgIF9jb3JyZWN0QnV0dG9uKGU6IE1vdXNlRXZlbnQsIGJ1dHRvbjogbnVtYmVyKSB7ICAvL2VzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBpbXBsZW1lbnRlZCBieSBjaGlsZFxuICAgIH1cblxuICAgIF9tb3ZlKGxhc3RQb2ludDogUG9pbnQsIHBvaW50OiBQb2ludCkgeyAgLy9lc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAgIHJldHVybiB7fTsgLy8gaW1wbGVtZW50ZWQgYnkgY2hpbGRcbiAgICB9XG5cbiAgICBtb3VzZWRvd24oZTogTW91c2VFdmVudCwgcG9pbnQ6IFBvaW50KSB7XG4gICAgICAgIGlmICh0aGlzLl9sYXN0UG9pbnQpIHJldHVybjtcblxuICAgICAgICBjb25zdCBldmVudEJ1dHRvbiA9IERPTS5tb3VzZUJ1dHRvbihlKTtcbiAgICAgICAgaWYgKCF0aGlzLl9jb3JyZWN0QnV0dG9uKGUsIGV2ZW50QnV0dG9uKSkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuX2xhc3RQb2ludCA9IHBvaW50O1xuICAgICAgICB0aGlzLl9ldmVudEJ1dHRvbiA9IGV2ZW50QnV0dG9uO1xuICAgIH1cblxuICAgIG1vdXNlbW92ZVdpbmRvdyhlOiBNb3VzZUV2ZW50LCBwb2ludDogUG9pbnQpIHtcbiAgICAgICAgY29uc3QgbGFzdFBvaW50ID0gdGhpcy5fbGFzdFBvaW50O1xuICAgICAgICBpZiAoIWxhc3RQb2ludCkgcmV0dXJuO1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLl9tb3ZlZCAmJiBwb2ludC5kaXN0KGxhc3RQb2ludCkgPCB0aGlzLl9jbGlja1RvbGVyYW5jZSkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9tb3ZlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX2xhc3RQb2ludCA9IHBvaW50O1xuXG4gICAgICAgIC8vIGltcGxlbWVudGVkIGJ5IGNoaWxkIGNsYXNzXG4gICAgICAgIHJldHVybiB0aGlzLl9tb3ZlKGxhc3RQb2ludCwgcG9pbnQpO1xuICAgIH1cblxuICAgIG1vdXNldXBXaW5kb3coZTogTW91c2VFdmVudCkge1xuICAgICAgICBjb25zdCBldmVudEJ1dHRvbiA9IERPTS5tb3VzZUJ1dHRvbihlKTtcbiAgICAgICAgaWYgKGV2ZW50QnV0dG9uICE9PSB0aGlzLl9ldmVudEJ1dHRvbikgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5fbW92ZWQpIERPTS5zdXBwcmVzc0NsaWNrKCk7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9XG5cbiAgICBlbmFibGUoKSB7XG4gICAgICAgIHRoaXMuX2VuYWJsZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGRpc2FibGUoKSB7XG4gICAgICAgIHRoaXMuX2VuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH1cblxuICAgIGlzRW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VuYWJsZWQ7XG4gICAgfVxuXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTW91c2VQYW5IYW5kbGVyIGV4dGVuZHMgTW91c2VIYW5kbGVyIHtcblxuICAgIG1vdXNlZG93bihlOiBNb3VzZUV2ZW50LCBwb2ludDogUG9pbnQpIHtcbiAgICAgICAgc3VwZXIubW91c2Vkb3duKGUsIHBvaW50KTtcbiAgICAgICAgaWYgKHRoaXMuX2xhc3RQb2ludCkgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICB9XG4gICAgX2NvcnJlY3RCdXR0b24oZTogTW91c2VFdmVudCwgYnV0dG9uOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIGJ1dHRvbiA9PT0gTEVGVF9CVVRUT04gJiYgIWUuY3RybEtleTtcbiAgICB9XG5cbiAgICBfbW92ZShsYXN0UG9pbnQ6IFBvaW50LCBwb2ludDogUG9pbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFyb3VuZDogcG9pbnQsXG4gICAgICAgICAgICBwYW5EZWx0YTogcG9pbnQuc3ViKGxhc3RQb2ludClcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNb3VzZVJvdGF0ZUhhbmRsZXIgZXh0ZW5kcyBNb3VzZUhhbmRsZXIge1xuICAgIF9jb3JyZWN0QnV0dG9uKGU6IE1vdXNlRXZlbnQsIGJ1dHRvbjogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiAoYnV0dG9uID09PSBMRUZUX0JVVFRPTiAmJiBlLmN0cmxLZXkpIHx8IChidXR0b24gPT09IFJJR0hUX0JVVFRPTik7XG4gICAgfVxuXG4gICAgX21vdmUobGFzdFBvaW50OiBQb2ludCwgcG9pbnQ6IFBvaW50KSB7XG4gICAgICAgIGNvbnN0IGRlZ3JlZXNQZXJQaXhlbE1vdmVkID0gMC44O1xuICAgICAgICBjb25zdCBiZWFyaW5nRGVsdGEgPSAocG9pbnQueCAtIGxhc3RQb2ludC54KSAqIGRlZ3JlZXNQZXJQaXhlbE1vdmVkO1xuICAgICAgICBpZiAoYmVhcmluZ0RlbHRhKSB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHtiZWFyaW5nRGVsdGF9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29udGV4dG1lbnUoZTogTW91c2VFdmVudCkge1xuICAgICAgICAvLyBwcmV2ZW50IGJyb3dzZXIgY29udGV4dCBtZW51IHdoZW4gbmVjZXNzYXJ5OyB3ZSBkb24ndCBhbGxvdyBpdCB3aXRoIHJvdGF0aW9uXG4gICAgICAgIC8vIGJlY2F1c2Ugd2UgY2FuJ3QgZGlzY2VybiByb3RhdGlvbiBnZXN0dXJlIHN0YXJ0IGZyb20gY29udGV4dG1lbnUgb24gTWFjXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNb3VzZVBpdGNoSGFuZGxlciBleHRlbmRzIE1vdXNlSGFuZGxlciB7XG4gICAgX2NvcnJlY3RCdXR0b24oZTogTW91c2VFdmVudCwgYnV0dG9uOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIChidXR0b24gPT09IExFRlRfQlVUVE9OICYmIGUuY3RybEtleSkgfHwgKGJ1dHRvbiA9PT0gUklHSFRfQlVUVE9OKTtcbiAgICB9XG5cbiAgICBfbW92ZShsYXN0UG9pbnQ6IFBvaW50LCBwb2ludDogUG9pbnQpIHtcbiAgICAgICAgY29uc3QgZGVncmVlc1BlclBpeGVsTW92ZWQgPSAtMC41O1xuICAgICAgICBjb25zdCBwaXRjaERlbHRhID0gKHBvaW50LnkgLSBsYXN0UG9pbnQueSkgKiBkZWdyZWVzUGVyUGl4ZWxNb3ZlZDtcbiAgICAgICAgaWYgKHBpdGNoRGVsdGEpIHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4ge3BpdGNoRGVsdGF9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29udGV4dG1lbnUoZTogTW91c2VFdmVudCkge1xuICAgICAgICAvLyBwcmV2ZW50IGJyb3dzZXIgY29udGV4dCBtZW51IHdoZW4gbmVjZXNzYXJ5OyB3ZSBkb24ndCBhbGxvdyBpdCB3aXRoIHJvdGF0aW9uXG4gICAgICAgIC8vIGJlY2F1c2Ugd2UgY2FuJ3QgZGlzY2VybiByb3RhdGlvbiBnZXN0dXJlIHN0YXJ0IGZyb20gY29udGV4dG1lbnUgb24gTWFjXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQge2luZGV4VG91Y2hlc30gZnJvbSAnLi9oYW5kbGVyX3V0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb3VjaFBhbkhhbmRsZXIge1xuXG4gICAgX2VuYWJsZWQ6IGJvb2xlYW47XG4gICAgX2FjdGl2ZTogYm9vbGVhbjtcbiAgICBfdG91Y2hlczogeyBbc3RyaW5nIHwgbnVtYmVyXTogUG9pbnQgfTtcbiAgICBfbWluVG91Y2hlczogbnVtYmVyO1xuICAgIF9jbGlja1RvbGVyYW5jZTogbnVtYmVyO1xuICAgIF9zdW06IFBvaW50O1xuXG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogeyBjbGlja1RvbGVyYW5jZTogbnVtYmVyIH0pIHtcbiAgICAgICAgdGhpcy5fbWluVG91Y2hlcyA9IDE7XG4gICAgICAgIHRoaXMuX2NsaWNrVG9sZXJhbmNlID0gb3B0aW9ucy5jbGlja1RvbGVyYW5jZSB8fCAxO1xuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgcmVzZXQoKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl90b3VjaGVzID0ge307XG4gICAgICAgIHRoaXMuX3N1bSA9IG5ldyBQb2ludCgwLCAwKTtcbiAgICB9XG5cbiAgICB0b3VjaHN0YXJ0KGU6IFRvdWNoRXZlbnQsIHBvaW50czogQXJyYXk8UG9pbnQ+KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWxjdWxhdGVUcmFuc2Zvcm0oZSwgcG9pbnRzKTtcbiAgICB9XG5cbiAgICB0b3VjaG1vdmUoZTogVG91Y2hFdmVudCwgcG9pbnRzOiBBcnJheTxQb2ludD4pIHtcbiAgICAgICAgaWYgKCF0aGlzLl9hY3RpdmUpIHJldHVybjtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FsY3VsYXRlVHJhbnNmb3JtKGUsIHBvaW50cyk7XG4gICAgfVxuXG4gICAgdG91Y2hlbmQoZTogVG91Y2hFdmVudCwgcG9pbnRzOiBBcnJheTxQb2ludD4pIHtcbiAgICAgICAgdGhpcy5fY2FsY3VsYXRlVHJhbnNmb3JtKGUsIHBvaW50cyk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZSAmJiBlLnRhcmdldFRvdWNoZXMubGVuZ3RoIDwgdGhpcy5fbWluVG91Y2hlcykge1xuICAgICAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdG91Y2hjYW5jZWwoKSB7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9XG5cbiAgICBfY2FsY3VsYXRlVHJhbnNmb3JtKGU6IFRvdWNoRXZlbnQsIHBvaW50czogQXJyYXk8UG9pbnQ+KSB7XG4gICAgICAgIGlmIChlLnRhcmdldFRvdWNoZXMubGVuZ3RoID4gMCkgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcblxuICAgICAgICBjb25zdCB0b3VjaGVzID0gaW5kZXhUb3VjaGVzKGUudGFyZ2V0VG91Y2hlcywgcG9pbnRzKTtcblxuICAgICAgICBjb25zdCB0b3VjaFBvaW50U3VtID0gbmV3IFBvaW50KDAsIDApO1xuICAgICAgICBjb25zdCB0b3VjaERlbHRhU3VtID0gbmV3IFBvaW50KDAsIDApO1xuICAgICAgICBsZXQgdG91Y2hEZWx0YUNvdW50ID0gMDtcblxuICAgICAgICBmb3IgKGNvbnN0IGlkZW50aWZpZXIgaW4gdG91Y2hlcykge1xuICAgICAgICAgICAgY29uc3QgcG9pbnQgPSB0b3VjaGVzW2lkZW50aWZpZXJdO1xuICAgICAgICAgICAgY29uc3QgcHJldlBvaW50ID0gdGhpcy5fdG91Y2hlc1tpZGVudGlmaWVyXTtcbiAgICAgICAgICAgIGlmIChwcmV2UG9pbnQpIHtcbiAgICAgICAgICAgICAgICB0b3VjaFBvaW50U3VtLl9hZGQocG9pbnQpO1xuICAgICAgICAgICAgICAgIHRvdWNoRGVsdGFTdW0uX2FkZChwb2ludC5zdWIocHJldlBvaW50KSk7XG4gICAgICAgICAgICAgICAgdG91Y2hEZWx0YUNvdW50Kys7XG4gICAgICAgICAgICAgICAgdG91Y2hlc1tpZGVudGlmaWVyXSA9IHBvaW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdG91Y2hlcyA9IHRvdWNoZXM7XG5cbiAgICAgICAgaWYgKHRvdWNoRGVsdGFDb3VudCA8IHRoaXMuX21pblRvdWNoZXMgfHwgIXRvdWNoRGVsdGFTdW0ubWFnKCkpIHJldHVybjtcblxuICAgICAgICBjb25zdCBwYW5EZWx0YSA9IHRvdWNoRGVsdGFTdW0uZGl2KHRvdWNoRGVsdGFDb3VudCk7XG4gICAgICAgIHRoaXMuX3N1bS5fYWRkKHBhbkRlbHRhKTtcbiAgICAgICAgaWYgKHRoaXMuX3N1bS5tYWcoKSA8IHRoaXMuX2NsaWNrVG9sZXJhbmNlKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgYXJvdW5kID0gdG91Y2hQb2ludFN1bS5kaXYodG91Y2hEZWx0YUNvdW50KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXJvdW5kLFxuICAgICAgICAgICAgcGFuRGVsdGFcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBlbmFibGUoKSB7XG4gICAgICAgIHRoaXMuX2VuYWJsZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGRpc2FibGUoKSB7XG4gICAgICAgIHRoaXMuX2VuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH1cblxuICAgIGlzRW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VuYWJsZWQ7XG4gICAgfVxuXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmU7XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IERPTSBmcm9tICcuLi8uLi91dGlsL2RvbSc7XG5cbmNsYXNzIFR3b1RvdWNoSGFuZGxlciB7XG5cbiAgICBfZW5hYmxlZDogYm9vbGVhbjtcbiAgICBfYWN0aXZlOiBib29sZWFuO1xuICAgIF9maXJzdFR3b1RvdWNoZXM6IFtudW1iZXIsIG51bWJlcl07XG4gICAgX3ZlY3RvcjogUG9pbnQ7XG4gICAgX3N0YXJ0VmVjdG9yOiBQb2ludDtcbiAgICBfYXJvdW5kQ2VudGVyOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9XG5cbiAgICByZXNldCgpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9maXJzdFR3b1RvdWNoZXM7XG4gICAgfVxuXG4gICAgX3N0YXJ0KHBvaW50czogW1BvaW50LCBQb2ludF0pIHt9IC8vZXNsaW50LWRpc2FibGUtbGluZVxuICAgIF9tb3ZlKHBvaW50czogW1BvaW50LCBQb2ludF0sIHBpbmNoQXJvdW5kOiBQb2ludCwgZTogVG91Y2hFdmVudCkgeyByZXR1cm4ge307IH0gLy9lc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICB0b3VjaHN0YXJ0KGU6IFRvdWNoRXZlbnQsIHBvaW50czogQXJyYXk8UG9pbnQ+KSB7XG4gICAgICAgIGlmICh0aGlzLl9maXJzdFR3b1RvdWNoZXMgfHwgZS50YXJnZXRUb3VjaGVzLmxlbmd0aCA8IDIpIHJldHVybjtcblxuICAgICAgICB0aGlzLl9maXJzdFR3b1RvdWNoZXMgPSBbXG4gICAgICAgICAgICBlLnRhcmdldFRvdWNoZXNbMF0uaWRlbnRpZmllcixcbiAgICAgICAgICAgIGUudGFyZ2V0VG91Y2hlc1sxXS5pZGVudGlmaWVyXG4gICAgICAgIF07XG5cbiAgICAgICAgLy8gaW1wbGVtZW50ZWQgYnkgY2hpbGQgY2xhc3Nlc1xuICAgICAgICB0aGlzLl9zdGFydChbcG9pbnRzWzBdLCBwb2ludHNbMV1dKTtcbiAgICB9XG5cbiAgICB0b3VjaG1vdmUoZTogVG91Y2hFdmVudCwgcG9pbnRzOiBBcnJheTxQb2ludD4pIHtcbiAgICAgICAgaWYgKCF0aGlzLl9maXJzdFR3b1RvdWNoZXMpIHJldHVybjtcblxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgY29uc3QgW2lkQSwgaWRCXSA9IHRoaXMuX2ZpcnN0VHdvVG91Y2hlcztcbiAgICAgICAgY29uc3QgYSA9IGdldFRvdWNoQnlJZChlLCBwb2ludHMsIGlkQSk7XG4gICAgICAgIGNvbnN0IGIgPSBnZXRUb3VjaEJ5SWQoZSwgcG9pbnRzLCBpZEIpO1xuICAgICAgICBpZiAoIWEgfHwgIWIpIHJldHVybjtcbiAgICAgICAgY29uc3QgcGluY2hBcm91bmQgPSB0aGlzLl9hcm91bmRDZW50ZXIgPyBudWxsIDogYS5hZGQoYikuZGl2KDIpO1xuXG4gICAgICAgIC8vIGltcGxlbWVudGVkIGJ5IGNoaWxkIGNsYXNzZXNcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vdmUoW2EsIGJdLCBwaW5jaEFyb3VuZCwgZSk7XG5cbiAgICB9XG5cbiAgICB0b3VjaGVuZChlOiBUb3VjaEV2ZW50LCBwb2ludHM6IEFycmF5PFBvaW50Pikge1xuICAgICAgICBpZiAoIXRoaXMuX2ZpcnN0VHdvVG91Y2hlcykgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IFtpZEEsIGlkQl0gPSB0aGlzLl9maXJzdFR3b1RvdWNoZXM7XG4gICAgICAgIGNvbnN0IGEgPSBnZXRUb3VjaEJ5SWQoZSwgcG9pbnRzLCBpZEEpO1xuICAgICAgICBjb25zdCBiID0gZ2V0VG91Y2hCeUlkKGUsIHBvaW50cywgaWRCKTtcbiAgICAgICAgaWYgKGEgJiYgYikgcmV0dXJuO1xuXG4gICAgICAgIGlmICh0aGlzLl9hY3RpdmUpIERPTS5zdXBwcmVzc0NsaWNrKCk7XG5cbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH1cblxuICAgIHRvdWNoY2FuY2VsKCkge1xuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgZW5hYmxlKG9wdGlvbnM6ID97YXJvdW5kPzogJ2NlbnRlcid9KSB7XG4gICAgICAgIHRoaXMuX2VuYWJsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9hcm91bmRDZW50ZXIgPSAhIW9wdGlvbnMgJiYgb3B0aW9ucy5hcm91bmQgPT09ICdjZW50ZXInO1xuICAgIH1cblxuICAgIGRpc2FibGUoKSB7XG4gICAgICAgIHRoaXMuX2VuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH1cblxuICAgIGlzRW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VuYWJsZWQ7XG4gICAgfVxuXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmU7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZXRUb3VjaEJ5SWQoZTogVG91Y2hFdmVudCwgcG9pbnRzOiBBcnJheTxQb2ludD4sIGlkZW50aWZpZXI6IG51bWJlcikge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZS50YXJnZXRUb3VjaGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChlLnRhcmdldFRvdWNoZXNbaV0uaWRlbnRpZmllciA9PT0gaWRlbnRpZmllcikgcmV0dXJuIHBvaW50c1tpXTtcbiAgICB9XG59XG5cbi8qIFpPT00gKi9cblxuY29uc3QgWk9PTV9USFJFU0hPTEQgPSAwLjE7XG5cbmZ1bmN0aW9uIGdldFpvb21EZWx0YShkaXN0YW5jZSwgbGFzdERpc3RhbmNlKSB7XG4gICAgcmV0dXJuIE1hdGgubG9nKGRpc3RhbmNlIC8gbGFzdERpc3RhbmNlKSAvIE1hdGguTE4yO1xufVxuXG5leHBvcnQgY2xhc3MgVG91Y2hab29tSGFuZGxlciBleHRlbmRzIFR3b1RvdWNoSGFuZGxlciB7XG5cbiAgICBfZGlzdGFuY2U6IG51bWJlcjtcbiAgICBfc3RhcnREaXN0YW5jZTogbnVtYmVyO1xuXG4gICAgcmVzZXQoKSB7XG4gICAgICAgIHN1cGVyLnJlc2V0KCk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9kaXN0YW5jZTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3N0YXJ0RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgX3N0YXJ0KHBvaW50czogW1BvaW50LCBQb2ludF0pIHtcbiAgICAgICAgdGhpcy5fc3RhcnREaXN0YW5jZSA9IHRoaXMuX2Rpc3RhbmNlID0gcG9pbnRzWzBdLmRpc3QocG9pbnRzWzFdKTtcbiAgICB9XG5cbiAgICBfbW92ZShwb2ludHM6IFtQb2ludCwgUG9pbnRdLCBwaW5jaEFyb3VuZDogUG9pbnQpIHtcbiAgICAgICAgY29uc3QgbGFzdERpc3RhbmNlID0gdGhpcy5fZGlzdGFuY2U7XG4gICAgICAgIHRoaXMuX2Rpc3RhbmNlID0gcG9pbnRzWzBdLmRpc3QocG9pbnRzWzFdKTtcbiAgICAgICAgaWYgKCF0aGlzLl9hY3RpdmUgJiYgTWF0aC5hYnMoZ2V0Wm9vbURlbHRhKHRoaXMuX2Rpc3RhbmNlLCB0aGlzLl9zdGFydERpc3RhbmNlKSkgPCBaT09NX1RIUkVTSE9MRCkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSB0cnVlO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgem9vbURlbHRhOiBnZXRab29tRGVsdGEodGhpcy5fZGlzdGFuY2UsIGxhc3REaXN0YW5jZSksXG4gICAgICAgICAgICBwaW5jaEFyb3VuZFxuICAgICAgICB9O1xuICAgIH1cbn1cblxuLyogUk9UQVRFICovXG5cbmNvbnN0IFJPVEFUSU9OX1RIUkVTSE9MRCA9IDI1OyAvLyBwaXhlbHMgYWxvbmcgY2lyY3VtZmVyZW5jZSBvZiB0b3VjaCBjaXJjbGVcblxuZnVuY3Rpb24gZ2V0QmVhcmluZ0RlbHRhKGEsIGIpIHtcbiAgICByZXR1cm4gYS5hbmdsZVdpdGgoYikgKiAxODAgLyBNYXRoLlBJO1xufVxuXG5leHBvcnQgY2xhc3MgVG91Y2hSb3RhdGVIYW5kbGVyIGV4dGVuZHMgVHdvVG91Y2hIYW5kbGVyIHtcbiAgICBfbWluRGlhbWV0ZXI6IG51bWJlcjtcblxuICAgIHJlc2V0KCkge1xuICAgICAgICBzdXBlci5yZXNldCgpO1xuICAgICAgICBkZWxldGUgdGhpcy5fbWluRGlhbWV0ZXI7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9zdGFydFZlY3RvcjtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3ZlY3RvcjtcbiAgICB9XG5cbiAgICBfc3RhcnQocG9pbnRzOiBbUG9pbnQsIFBvaW50XSkge1xuICAgICAgICB0aGlzLl9zdGFydFZlY3RvciA9IHRoaXMuX3ZlY3RvciA9IHBvaW50c1swXS5zdWIocG9pbnRzWzFdKTtcbiAgICAgICAgdGhpcy5fbWluRGlhbWV0ZXIgPSBwb2ludHNbMF0uZGlzdChwb2ludHNbMV0pO1xuICAgIH1cblxuICAgIF9tb3ZlKHBvaW50czogW1BvaW50LCBQb2ludF0sIHBpbmNoQXJvdW5kOiBQb2ludCkge1xuICAgICAgICBjb25zdCBsYXN0VmVjdG9yID0gdGhpcy5fdmVjdG9yO1xuICAgICAgICB0aGlzLl92ZWN0b3IgPSBwb2ludHNbMF0uc3ViKHBvaW50c1sxXSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLl9hY3RpdmUgJiYgdGhpcy5faXNCZWxvd1RocmVzaG9sZCh0aGlzLl92ZWN0b3IpKSByZXR1cm47XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJlYXJpbmdEZWx0YTogZ2V0QmVhcmluZ0RlbHRhKHRoaXMuX3ZlY3RvciwgbGFzdFZlY3RvciksXG4gICAgICAgICAgICBwaW5jaEFyb3VuZFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIF9pc0JlbG93VGhyZXNob2xkKHZlY3RvcjogUG9pbnQpIHtcbiAgICAgICAgLypcbiAgICAgICAgICogVGhlIHRocmVzaG9sZCBiZWZvcmUgYSByb3RhdGlvbiBhY3R1YWxseSBoYXBwZW5zIGlzIGNvbmZpZ3VyZWQgaW5cbiAgICAgICAgICogcGl4ZWxzIGFsb25ndGggY2lyY3VtZmVyZW5jZSBvZiB0aGUgY2lyY2xlIGZvcm1lZCBieSB0aGUgdHdvIGZpbmdlcnMuXG4gICAgICAgICAqIFRoaXMgbWFrZXMgdGhlIHRocmVzaG9sZCBpbiBkZWdyZWVzIGxhcmdlciB3aGVuIHRoZSBmaW5nZXJzIGFyZSBjbG9zZVxuICAgICAgICAgKiB0b2dldGhlciBhbmQgc21hbGxlciB3aGVuIHRoZSBmaW5nZXJzIGFyZSBmYXIgYXBhcnQuXG4gICAgICAgICAqXG4gICAgICAgICAqIFVzZSB0aGUgc21hbGxlc3QgZGlhbWV0ZXIgZnJvbSB0aGUgd2hvbGUgZ2VzdHVyZSB0byByZWR1Y2Ugc2Vuc2l0aXZpdHlcbiAgICAgICAgICogd2hlbiBwaW5jaGluZyBpbiBhbmQgb3V0LlxuICAgICAgICAgKi9cblxuICAgICAgICB0aGlzLl9taW5EaWFtZXRlciA9IE1hdGgubWluKHRoaXMuX21pbkRpYW1ldGVyLCB2ZWN0b3IubWFnKCkpO1xuICAgICAgICBjb25zdCBjaXJjdW1mZXJlbmNlID0gTWF0aC5QSSAqIHRoaXMuX21pbkRpYW1ldGVyO1xuICAgICAgICBjb25zdCB0aHJlc2hvbGQgPSBST1RBVElPTl9USFJFU0hPTEQgLyBjaXJjdW1mZXJlbmNlICogMzYwO1xuXG4gICAgICAgIGNvbnN0IGJlYXJpbmdEZWx0YVNpbmNlU3RhcnQgPSBnZXRCZWFyaW5nRGVsdGEodmVjdG9yLCB0aGlzLl9zdGFydFZlY3Rvcik7XG4gICAgICAgIHJldHVybiBNYXRoLmFicyhiZWFyaW5nRGVsdGFTaW5jZVN0YXJ0KSA8IHRocmVzaG9sZDtcbiAgICB9XG59XG5cbi8qIFBJVENIICovXG5cbmZ1bmN0aW9uIGlzVmVydGljYWwodmVjdG9yKSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKHZlY3Rvci55KSA+IE1hdGguYWJzKHZlY3Rvci54KTtcbn1cblxuY29uc3QgQUxMT1dFRF9TSU5HTEVfVE9VQ0hfVElNRSA9IDEwMDtcblxuLyoqXG4gKiBUaGUgYFRvdWNoUGl0Y2hIYW5kbGVyYCBhbGxvd3MgdGhlIHVzZXIgdG8gcGl0Y2ggdGhlIG1hcCBieSBkcmFnZ2luZyB1cCBhbmQgZG93biB3aXRoIHR3byBmaW5nZXJzLlxuICovXG5leHBvcnQgY2xhc3MgVG91Y2hQaXRjaEhhbmRsZXIgZXh0ZW5kcyBUd29Ub3VjaEhhbmRsZXIge1xuXG4gICAgX3ZhbGlkOiBib29sZWFuIHwgdm9pZDtcbiAgICBfZmlyc3RNb3ZlOiBudW1iZXI7XG4gICAgX2xhc3RQb2ludHM6IFtQb2ludCwgUG9pbnRdO1xuXG4gICAgcmVzZXQoKSB7XG4gICAgICAgIHN1cGVyLnJlc2V0KCk7XG4gICAgICAgIHRoaXMuX3ZhbGlkID0gdW5kZWZpbmVkO1xuICAgICAgICBkZWxldGUgdGhpcy5fZmlyc3RNb3ZlO1xuICAgICAgICBkZWxldGUgdGhpcy5fbGFzdFBvaW50cztcbiAgICB9XG5cbiAgICBfc3RhcnQocG9pbnRzOiBbUG9pbnQsIFBvaW50XSkge1xuICAgICAgICB0aGlzLl9sYXN0UG9pbnRzID0gcG9pbnRzO1xuICAgICAgICBpZiAoaXNWZXJ0aWNhbChwb2ludHNbMF0uc3ViKHBvaW50c1sxXSkpKSB7XG4gICAgICAgICAgICAvLyBmaW5nZXJzIGFyZSBtb3JlIGhvcml6b250YWwgdGhhbiB2ZXJ0aWNhbFxuICAgICAgICAgICAgdGhpcy5fdmFsaWQgPSBmYWxzZTtcblxuICAgICAgICB9XG4gICAgfVxuXG4gICAgX21vdmUocG9pbnRzOiBbUG9pbnQsIFBvaW50XSwgY2VudGVyOiBQb2ludCwgZTogVG91Y2hFdmVudCkge1xuICAgICAgICBjb25zdCB2ZWN0b3JBID0gcG9pbnRzWzBdLnN1Yih0aGlzLl9sYXN0UG9pbnRzWzBdKTtcbiAgICAgICAgY29uc3QgdmVjdG9yQiA9IHBvaW50c1sxXS5zdWIodGhpcy5fbGFzdFBvaW50c1sxXSk7XG5cbiAgICAgICAgdGhpcy5fdmFsaWQgPSB0aGlzLmdlc3R1cmVCZWdpbnNWZXJ0aWNhbGx5KHZlY3RvckEsIHZlY3RvckIsIGUudGltZVN0YW1wKTtcbiAgICAgICAgaWYgKCF0aGlzLl92YWxpZCkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuX2xhc3RQb2ludHMgPSBwb2ludHM7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7XG4gICAgICAgIGNvbnN0IHlEZWx0YUF2ZXJhZ2UgPSAodmVjdG9yQS55ICsgdmVjdG9yQi55KSAvIDI7XG4gICAgICAgIGNvbnN0IGRlZ3JlZXNQZXJQaXhlbE1vdmVkID0gLTAuNTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBpdGNoRGVsdGE6IHlEZWx0YUF2ZXJhZ2UgKiBkZWdyZWVzUGVyUGl4ZWxNb3ZlZFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGdlc3R1cmVCZWdpbnNWZXJ0aWNhbGx5KHZlY3RvckE6IFBvaW50LCB2ZWN0b3JCOiBQb2ludCwgdGltZVN0YW1wOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuX3ZhbGlkICE9PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLl92YWxpZDtcblxuICAgICAgICBjb25zdCB0aHJlc2hvbGQgPSAyO1xuICAgICAgICBjb25zdCBtb3ZlZEEgPSB2ZWN0b3JBLm1hZygpID49IHRocmVzaG9sZDtcbiAgICAgICAgY29uc3QgbW92ZWRCID0gdmVjdG9yQi5tYWcoKSA+PSB0aHJlc2hvbGQ7XG5cbiAgICAgICAgLy8gbmVpdGhlciBmaW5nZXIgaGFzIG1vdmVkIGEgbWVhbmluZ2Z1bCBhbW91bnQsIHdhaXRcbiAgICAgICAgaWYgKCFtb3ZlZEEgJiYgIW1vdmVkQikgcmV0dXJuO1xuXG4gICAgICAgIC8vIE9uZSBmaW5nZXIgaGFzIG1vdmVkIGFuZCB0aGUgb3RoZXIgaGFzIG5vdC5cbiAgICAgICAgLy8gSWYgZW5vdWdoIHRpbWUgaGFzIHBhc3NlZCwgZGVjaWRlIGl0IGlzIG5vdCBhIHBpdGNoLlxuICAgICAgICBpZiAoIW1vdmVkQSB8fCAhbW92ZWRCKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZmlyc3RNb3ZlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9maXJzdE1vdmUgPSB0aW1lU3RhbXA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aW1lU3RhbXAgLSB0aGlzLl9maXJzdE1vdmUgPCBBTExPV0VEX1NJTkdMRV9UT1VDSF9USU1FKSB7XG4gICAgICAgICAgICAgICAgLy8gc3RpbGwgd2FpdGluZyBmb3IgYSBtb3ZlbWVudCBmcm9tIHRoZSBzZWNvbmQgZmluZ2VyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNTYW1lRGlyZWN0aW9uID0gdmVjdG9yQS55ID4gMCA9PT0gdmVjdG9yQi55ID4gMDtcbiAgICAgICAgcmV0dXJuIGlzVmVydGljYWwodmVjdG9yQSkgJiYgaXNWZXJ0aWNhbCh2ZWN0b3JCKSAmJiBpc1NhbWVEaXJlY3Rpb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBcImRyYWcgdG8gcGl0Y2hcIiBpbnRlcmFjdGlvbiBpcyBlbmFibGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIFRvdWNoUGl0Y2hIYW5kbGVyXG4gICAgICogQG5hbWUgaXNFbmFibGVkXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgXCJkcmFnIHRvIHBpdGNoXCIgaW50ZXJhY3Rpb24gaXMgZW5hYmxlZC5cbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgXCJkcmFnIHRvIHBpdGNoXCIgaW50ZXJhY3Rpb24gaXMgYWN0aXZlLCBpLmUuIGN1cnJlbnRseSBiZWluZyB1c2VkLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIFRvdWNoUGl0Y2hIYW5kbGVyXG4gICAgICogQG5hbWUgaXNBY3RpdmVcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBcImRyYWcgdG8gcGl0Y2hcIiBpbnRlcmFjdGlvbiBpcyBhY3RpdmUuXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzIHRoZSBcImRyYWcgdG8gcGl0Y2hcIiBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBUb3VjaFBpdGNoSGFuZGxlclxuICAgICAqIEBuYW1lIGVuYWJsZVxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLnRvdWNoUGl0Y2guZW5hYmxlKCk7XG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgXCJkcmFnIHRvIHBpdGNoXCIgaW50ZXJhY3Rpb24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgVG91Y2hQaXRjaEhhbmRsZXJcbiAgICAgKiBAbmFtZSBkaXNhYmxlXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXAudG91Y2hQaXRjaC5kaXNhYmxlKCk7XG4gICAgICovXG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vbWFwJztcblxuY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgcGFuU3RlcDogMTAwLFxuICAgIGJlYXJpbmdTdGVwOiAxNSxcbiAgICBwaXRjaFN0ZXA6IDEwXG59O1xuXG4vKipcbiAqIFRoZSBgS2V5Ym9hcmRIYW5kbGVyYCBhbGxvd3MgdGhlIHVzZXIgdG8gem9vbSwgcm90YXRlLCBhbmQgcGFuIHRoZSBtYXAgdXNpbmdcbiAqIHRoZSBmb2xsb3dpbmcga2V5Ym9hcmQgc2hvcnRjdXRzOlxuICpcbiAqIC0gYD1gIC8gYCtgOiBJbmNyZWFzZSB0aGUgem9vbSBsZXZlbCBieSAxLlxuICogLSBgU2hpZnQtPWAgLyBgU2hpZnQtK2A6IEluY3JlYXNlIHRoZSB6b29tIGxldmVsIGJ5IDIuXG4gKiAtIGAtYDogRGVjcmVhc2UgdGhlIHpvb20gbGV2ZWwgYnkgMS5cbiAqIC0gYFNoaWZ0LS1gOiBEZWNyZWFzZSB0aGUgem9vbSBsZXZlbCBieSAyLlxuICogLSBBcnJvdyBrZXlzOiBQYW4gYnkgMTAwIHBpeGVscy5cbiAqIC0gYFNoaWZ0K8OiwofComA6IEluY3JlYXNlIHRoZSByb3RhdGlvbiBieSAxNSBkZWdyZWVzLlxuICogLSBgU2hpZnQrw6LCh8KgYDogRGVjcmVhc2UgdGhlIHJvdGF0aW9uIGJ5IDE1IGRlZ3JlZXMuXG4gKiAtIGBTaGlmdCvDosKHwqFgOiBJbmNyZWFzZSB0aGUgcGl0Y2ggYnkgMTAgZGVncmVlcy5cbiAqIC0gYFNoaWZ0K8OiwofCo2A6IERlY3JlYXNlIHRoZSBwaXRjaCBieSAxMCBkZWdyZWVzLlxuICovXG5jbGFzcyBLZXlib2FyZEhhbmRsZXIge1xuICAgIF9lbmFibGVkOiBib29sZWFuO1xuICAgIF9hY3RpdmU6IGJvb2xlYW47XG4gICAgX3BhblN0ZXA6IG51bWJlcjtcbiAgICBfYmVhcmluZ1N0ZXA6IG51bWJlcjtcbiAgICBfcGl0Y2hTdGVwOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAqIEBwcml2YXRlXG4gICAgKi9cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgY29uc3Qgc3RlcE9wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucztcbiAgICAgICAgdGhpcy5fcGFuU3RlcCA9IHN0ZXBPcHRpb25zLnBhblN0ZXA7XG4gICAgICAgIHRoaXMuX2JlYXJpbmdTdGVwID0gc3RlcE9wdGlvbnMuYmVhcmluZ1N0ZXA7XG4gICAgICAgIHRoaXMuX3BpdGNoU3RlcCA9IHN0ZXBPcHRpb25zLnBpdGNoU3RlcDtcbiAgICB9XG5cbiAgICByZXNldCgpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgfVxuXG4gICAga2V5ZG93bihlOiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmIChlLmFsdEtleSB8fCBlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KSByZXR1cm47XG5cbiAgICAgICAgbGV0IHpvb21EaXIgPSAwO1xuICAgICAgICBsZXQgYmVhcmluZ0RpciA9IDA7XG4gICAgICAgIGxldCBwaXRjaERpciA9IDA7XG4gICAgICAgIGxldCB4RGlyID0gMDtcbiAgICAgICAgbGV0IHlEaXIgPSAwO1xuXG4gICAgICAgIHN3aXRjaCAoZS5rZXlDb2RlKSB7XG4gICAgICAgIGNhc2UgNjE6XG4gICAgICAgIGNhc2UgMTA3OlxuICAgICAgICBjYXNlIDE3MTpcbiAgICAgICAgY2FzZSAxODc6XG4gICAgICAgICAgICB6b29tRGlyID0gMTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMTg5OlxuICAgICAgICBjYXNlIDEwOTpcbiAgICAgICAgY2FzZSAxNzM6XG4gICAgICAgICAgICB6b29tRGlyID0gLTE7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM3OlxuICAgICAgICAgICAgaWYgKGUuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICBiZWFyaW5nRGlyID0gLTE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB4RGlyID0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgICAgaWYgKGUuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICBiZWFyaW5nRGlyID0gMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHhEaXIgPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzODpcbiAgICAgICAgICAgIGlmIChlLnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgcGl0Y2hEaXIgPSAxO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgeURpciA9IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICAgIGlmIChlLnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgcGl0Y2hEaXIgPSAtMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHlEaXIgPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjYW1lcmFBbmltYXRpb246IChtYXA6IE1hcCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHpvb20gPSBtYXAuZ2V0Wm9vbSgpO1xuICAgICAgICAgICAgICAgIG1hcC5lYXNlVG8oe1xuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwLFxuICAgICAgICAgICAgICAgICAgICBlYXNlSWQ6ICdrZXlib2FyZEhhbmRsZXInLFxuICAgICAgICAgICAgICAgICAgICBlYXNpbmc6IGVhc2VPdXQsXG5cbiAgICAgICAgICAgICAgICAgICAgem9vbTogem9vbURpciA/IE1hdGgucm91bmQoem9vbSkgKyB6b29tRGlyICogKGUuc2hpZnRLZXkgPyAyIDogMSkgOiB6b29tLFxuICAgICAgICAgICAgICAgICAgICBiZWFyaW5nOiBtYXAuZ2V0QmVhcmluZygpICsgYmVhcmluZ0RpciAqIHRoaXMuX2JlYXJpbmdTdGVwLFxuICAgICAgICAgICAgICAgICAgICBwaXRjaDogbWFwLmdldFBpdGNoKCkgKyBwaXRjaERpciAqIHRoaXMuX3BpdGNoU3RlcCxcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBbLXhEaXIgKiB0aGlzLl9wYW5TdGVwLCAteURpciAqIHRoaXMuX3BhblN0ZXBdLFxuICAgICAgICAgICAgICAgICAgICBjZW50ZXI6IG1hcC5nZXRDZW50ZXIoKVxuICAgICAgICAgICAgICAgIH0sIHtvcmlnaW5hbEV2ZW50OiBlfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZW5hYmxlKCkge1xuICAgICAgICB0aGlzLl9lbmFibGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBkaXNhYmxlKCkge1xuICAgICAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9XG5cbiAgICBpc0VuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmFibGVkO1xuICAgIH1cblxuICAgIGlzQWN0aXZlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZWFzZU91dCh0OiBudW1iZXIpIHtcbiAgICByZXR1cm4gdCAqICgyIC0gdCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEtleWJvYXJkSGFuZGxlcjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBET00gZnJvbSAnLi4vLi4vdXRpbC9kb20nO1xuXG5pbXBvcnQge2Vhc2UgYXMgX2Vhc2UsIGJpbmRBbGwsIGJlemllcn0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCBicm93c2VyIGZyb20gJy4uLy4uL3V0aWwvYnJvd3Nlcic7XG5pbXBvcnQgd2luZG93IGZyb20gJy4uLy4uL3V0aWwvd2luZG93JztcbmltcG9ydCB7bnVtYmVyIGFzIGludGVycG9sYXRlfSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3V0aWwvaW50ZXJwb2xhdGUnO1xuaW1wb3J0IExuZ0xhdCBmcm9tICcuLi8uLi9nZW8vbG5nX2xhdCc7XG5cbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi9tYXAnO1xuaW1wb3J0IHR5cGUgSGFuZGxlck1hbmFnZXIgZnJvbSAnLi4vaGFuZGxlcl9tYW5hZ2VyJztcbmltcG9ydCB0eXBlIFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG4vLyBkZWx0YVkgdmFsdWUgZm9yIG1vdXNlIHNjcm9sbCB3aGVlbCBpZGVudGlmaWNhdGlvblxuY29uc3Qgd2hlZWxab29tRGVsdGEgPSA0LjAwMDI0NDE0MDYyNTtcblxuLy8gVGhlc2UgbWFnaWMgbnVtYmVycyBjb250cm9sIHRoZSByYXRlIG9mIHpvb20uIFRyYWNrcGFkIGV2ZW50cyBmaXJlIGF0IGEgZ3JlYXRlclxuLy8gZnJlcXVlbmN5IHRoYW4gbW91c2Ugc2Nyb2xsIHdoZWVsLCBzbyByZWR1Y2UgdGhlIHpvb20gcmF0ZSBwZXIgd2hlZWwgdGlja1xuY29uc3QgZGVmYXVsdFpvb21SYXRlID0gMSAvIDEwMDtcbmNvbnN0IHdoZWVsWm9vbVJhdGUgPSAxIC8gNDUwO1xuXG4vLyB1cHBlciBib3VuZCBvbiBob3cgbXVjaCB3ZSBzY2FsZSB0aGUgbWFwIGluIGFueSBzaW5nbGUgcmVuZGVyIGZyYW1lOyB0aGlzXG4vLyBpcyB1c2VkIHRvIGxpbWl0IHpvb20gcmF0ZSBpbiB0aGUgY2FzZSBvZiB2ZXJ5IGZhc3Qgc2Nyb2xsaW5nXG5jb25zdCBtYXhTY2FsZVBlckZyYW1lID0gMjtcblxuLyoqXG4gKiBUaGUgYFNjcm9sbFpvb21IYW5kbGVyYCBhbGxvd3MgdGhlIHVzZXIgdG8gem9vbSB0aGUgbWFwIGJ5IHNjcm9sbGluZy5cbiAqL1xuY2xhc3MgU2Nyb2xsWm9vbUhhbmRsZXIge1xuICAgIF9tYXA6IE1hcDtcbiAgICBfZWw6IEhUTUxFbGVtZW50O1xuICAgIF9lbmFibGVkOiBib29sZWFuO1xuICAgIF9hY3RpdmU6IGJvb2xlYW47XG4gICAgX3pvb21pbmc6IGJvb2xlYW47XG4gICAgX2Fyb3VuZENlbnRlcjogYm9vbGVhbjtcbiAgICBfYXJvdW5kOiBQb2ludDtcbiAgICBfYXJvdW5kUG9pbnQ6IFBvaW50O1xuICAgIF90eXBlOiAnd2hlZWwnIHwgJ3RyYWNrcGFkJyB8IG51bGw7XG4gICAgX2xhc3RWYWx1ZTogbnVtYmVyO1xuICAgIF90aW1lb3V0OiA/VGltZW91dElEOyAvLyB1c2VkIGZvciBkZWxheWVkLWhhbmRsaW5nIG9mIGEgc2luZ2xlIHdoZWVsIG1vdmVtZW50XG4gICAgX2ZpbmlzaFRpbWVvdXQ6ID9UaW1lb3V0SUQ7IC8vIHVzZWQgdG8gZGVsYXkgZmluYWwgJ3ttb3ZlLHpvb219ZW5kJyBldmVudHNcblxuICAgIF9sYXN0V2hlZWxFdmVudDogYW55O1xuICAgIF9sYXN0V2hlZWxFdmVudFRpbWU6IG51bWJlcjtcblxuICAgIF9zdGFydFpvb206ID9udW1iZXI7XG4gICAgX3RhcmdldFpvb206ID9udW1iZXI7XG4gICAgX2RlbHRhOiBudW1iZXI7XG4gICAgX2Vhc2luZzogPygobnVtYmVyKSA9PiBudW1iZXIpO1xuICAgIF9wcmV2RWFzZTogP3tzdGFydDogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyLCBlYXNpbmc6IChfOiBudW1iZXIpID0+IG51bWJlcn07XG5cbiAgICBfZnJhbWVJZDogP2Jvb2xlYW47XG4gICAgX2hhbmRsZXI6IEhhbmRsZXJNYW5hZ2VyO1xuXG4gICAgX2RlZmF1bHRab29tUmF0ZTogbnVtYmVyO1xuICAgIF93aGVlbFpvb21SYXRlOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG1hcDogTWFwLCBoYW5kbGVyOiBIYW5kbGVyTWFuYWdlcikge1xuICAgICAgICB0aGlzLl9tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMuX2VsID0gbWFwLmdldENhbnZhc0NvbnRhaW5lcigpO1xuICAgICAgICB0aGlzLl9oYW5kbGVyID0gaGFuZGxlcjtcblxuICAgICAgICB0aGlzLl9kZWx0YSA9IDA7XG5cbiAgICAgICAgdGhpcy5fZGVmYXVsdFpvb21SYXRlID0gZGVmYXVsdFpvb21SYXRlO1xuICAgICAgICB0aGlzLl93aGVlbFpvb21SYXRlID0gd2hlZWxab29tUmF0ZTtcblxuICAgICAgICBiaW5kQWxsKFtcbiAgICAgICAgICAgICdfb25XaGVlbCcsXG4gICAgICAgICAgICAnX29uVGltZW91dCcsXG4gICAgICAgICAgICAnX29uU2Nyb2xsRnJhbWUnLFxuICAgICAgICAgICAgJ19vblNjcm9sbEZpbmlzaGVkJ1xuICAgICAgICBdLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIHpvb20gcmF0ZSBvZiBhIHRyYWNrcGFkXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt6b29tUmF0ZT0xLzEwMF0gVGhlIHJhdGUgdXNlZCB0byBzY2FsZSB0cmFja3BhZCBtb3ZlbWVudCB0byBhIHpvb20gdmFsdWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBTcGVlZCB1cCB0cmFja3BhZCB6b29tXG4gICAgICogbWFwLnNjcm9sbFpvb20uc2V0Wm9vbVJhdGUoMS8yNSk7XG4gICAgICovXG4gICAgc2V0Wm9vbVJhdGUoem9vbVJhdGU6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9kZWZhdWx0Wm9vbVJhdGUgPSB6b29tUmF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIFNldCB0aGUgem9vbSByYXRlIG9mIGEgbW91c2Ugd2hlZWxcbiAgICAqIEBwYXJhbSB7bnVtYmVyfSBbd2hlZWxab29tUmF0ZT0xLzQ1MF0gVGhlIHJhdGUgdXNlZCB0byBzY2FsZSBtb3VzZSB3aGVlbCBtb3ZlbWVudCB0byBhIHpvb20gdmFsdWUuXG4gICAgKiBAZXhhbXBsZVxuICAgICogLy8gU2xvdyBkb3duIHpvb20gb2YgbW91c2Ugd2hlZWxcbiAgICAqIG1hcC5zY3JvbGxab29tLnNldFdoZWVsWm9vbVJhdGUoMS82MDApO1xuICAgICovXG4gICAgc2V0V2hlZWxab29tUmF0ZSh3aGVlbFpvb21SYXRlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fd2hlZWxab29tUmF0ZSA9IHdoZWVsWm9vbVJhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBcInNjcm9sbCB0byB6b29tXCIgaW50ZXJhY3Rpb24gaXMgZW5hYmxlZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIFwic2Nyb2xsIHRvIHpvb21cIiBpbnRlcmFjdGlvbiBpcyBlbmFibGVkLlxuICAgICAqL1xuICAgIGlzRW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZW5hYmxlZDtcbiAgICB9XG5cbiAgICAvKlxuICAgICogQWN0aXZlIHN0YXRlIGlzIHR1cm5lZCBvbiBhbmQgb2ZmIHdpdGggZXZlcnkgc2Nyb2xsIHdoZWVsIGV2ZW50IGFuZCBpcyBzZXQgYmFjayB0byBmYWxzZSBiZWZvcmUgdGhlIG1hcFxuICAgICogcmVuZGVyIGlzIGNhbGxlZCwgc28gX2FjdGl2ZSBpcyBub3QgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZGV0ZXJtaW5pbmcgaWYgYSBzY3JvbGwgem9vbSBhbmltYXRpb24gaXMgaW5cbiAgICAqIHByb2dyZXNzLlxuICAgICovXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2FjdGl2ZSB8fCB0aGlzLl9maW5pc2hUaW1lb3V0ICE9PSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaXNab29taW5nKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl96b29taW5nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgdGhlIFwic2Nyb2xsIHRvIHpvb21cIiBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gT3B0aW9ucyBvYmplY3QuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmFyb3VuZF0gSWYgXCJjZW50ZXJcIiBpcyBwYXNzZWQsIG1hcCB3aWxsIHpvb20gYXJvdW5kIGNlbnRlciBvZiBtYXBcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogICBtYXAuc2Nyb2xsWm9vbS5lbmFibGUoKTtcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICBtYXAuc2Nyb2xsWm9vbS5lbmFibGUoeyBhcm91bmQ6ICdjZW50ZXInIH0pXG4gICAgICovXG4gICAgZW5hYmxlKG9wdGlvbnM6IGFueSkge1xuICAgICAgICBpZiAodGhpcy5pc0VuYWJsZWQoKSkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fYXJvdW5kQ2VudGVyID0gb3B0aW9ucyAmJiBvcHRpb25zLmFyb3VuZCA9PT0gJ2NlbnRlcic7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMgdGhlIFwic2Nyb2xsIHRvIHpvb21cIiBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogICBtYXAuc2Nyb2xsWm9vbS5kaXNhYmxlKCk7XG4gICAgICovXG4gICAgZGlzYWJsZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRW5hYmxlZCgpKSByZXR1cm47XG4gICAgICAgIHRoaXMuX2VuYWJsZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB3aGVlbChlOiBXaGVlbEV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5pc0VuYWJsZWQoKSkgcmV0dXJuO1xuXG4gICAgICAgIC8vIFJlbW92ZSBgYW55YCBjYXN0IHdoZW4gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzQ4NzkgaXMgZml4ZWQuXG4gICAgICAgIGxldCB2YWx1ZSA9IGUuZGVsdGFNb2RlID09PSAod2luZG93LldoZWVsRXZlbnQ6IGFueSkuRE9NX0RFTFRBX0xJTkUgPyBlLmRlbHRhWSAqIDQwIDogZS5kZWx0YVk7XG4gICAgICAgIGNvbnN0IG5vdyA9IGJyb3dzZXIubm93KCksXG4gICAgICAgICAgICB0aW1lRGVsdGEgPSBub3cgLSAodGhpcy5fbGFzdFdoZWVsRXZlbnRUaW1lIHx8IDApO1xuXG4gICAgICAgIHRoaXMuX2xhc3RXaGVlbEV2ZW50VGltZSA9IG5vdztcblxuICAgICAgICBpZiAodmFsdWUgIT09IDAgJiYgKHZhbHVlICUgd2hlZWxab29tRGVsdGEpID09PSAwKSB7XG4gICAgICAgICAgICAvLyBUaGlzIG9uZSBpcyBkZWZpbml0ZWx5IGEgbW91c2Ugd2hlZWwgZXZlbnQuXG4gICAgICAgICAgICB0aGlzLl90eXBlID0gJ3doZWVsJztcblxuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlICE9PSAwICYmIE1hdGguYWJzKHZhbHVlKSA8IDQpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgb25lIGlzIGRlZmluaXRlbHkgYSB0cmFja3BhZCBldmVudCBiZWNhdXNlIGl0IGlzIHNvIHNtYWxsLlxuICAgICAgICAgICAgdGhpcy5fdHlwZSA9ICd0cmFja3BhZCc7XG5cbiAgICAgICAgfSBlbHNlIGlmICh0aW1lRGVsdGEgPiA0MDApIHtcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgbGlrZWx5IGEgbmV3IHNjcm9sbCBhY3Rpb24uXG4gICAgICAgICAgICB0aGlzLl90eXBlID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX2xhc3RWYWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgICAgICAvLyBTdGFydCBhIHRpbWVvdXQgaW4gY2FzZSB0aGlzIHdhcyBhIHNpbmd1bGFyIGV2ZW50LCBhbmQgZGVseSBpdCBieSB1cCB0byA0MG1zLlxuICAgICAgICAgICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQodGhpcy5fb25UaW1lb3V0LCA0MCwgZSk7XG5cbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5fdHlwZSkge1xuICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHJlcGVhdGluZyBldmVudCwgYnV0IHdlIGRvbid0IGtub3cgdGhlIHR5cGUgb2YgZXZlbnQganVzdCB5ZXQuXG4gICAgICAgICAgICAvLyBJZiB0aGUgZGVsdGEgcGVyIHRpbWUgaXMgc21hbGwsIHdlIGFzc3VtZSBpdCdzIGEgZmFzdCB0cmFja3BhZDsgb3RoZXJ3aXNlIHdlIHN3aXRjaCBpbnRvIHdoZWVsIG1vZGUuXG4gICAgICAgICAgICB0aGlzLl90eXBlID0gKE1hdGguYWJzKHRpbWVEZWx0YSAqIHZhbHVlKSA8IDIwMCkgPyAndHJhY2twYWQnIDogJ3doZWVsJztcblxuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIG91ciBkZWxheWVkIGV2ZW50IGlzbid0IGZpcmVkIGFnYWluLCBiZWNhdXNlIHdlIGFjY3VtdWxhdGVcbiAgICAgICAgICAgIC8vIHRoZSBwcmV2aW91cyBldmVudCAod2hpY2ggd2FzIGxlc3MgdGhhbiA0MG1zIGFnbykgaW50byB0aGlzIGV2ZW50LlxuICAgICAgICAgICAgaWYgKHRoaXMuX3RpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGltZW91dCA9IG51bGw7XG4gICAgICAgICAgICAgICAgdmFsdWUgKz0gdGhpcy5fbGFzdFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2xvdyBkb3duIHpvb20gaWYgc2hpZnQga2V5IGlzIGhlbGQgZm9yIG1vcmUgcHJlY2lzZSB6b29taW5nXG4gICAgICAgIGlmIChlLnNoaWZ0S2V5ICYmIHZhbHVlKSB2YWx1ZSA9IHZhbHVlIC8gNDtcblxuICAgICAgICAvLyBPbmx5IGZpcmUgdGhlIGNhbGxiYWNrIGlmIHdlIGFjdHVhbGx5IGtub3cgd2hhdCB0eXBlIG9mIHNjcm9sbGluZyBkZXZpY2UgdGhlIHVzZXIgdXNlcy5cbiAgICAgICAgaWYgKHRoaXMuX3R5cGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2xhc3RXaGVlbEV2ZW50ID0gZTtcbiAgICAgICAgICAgIHRoaXMuX2RlbHRhIC09IHZhbHVlO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9hY3RpdmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGFydChlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBfb25UaW1lb3V0KGluaXRpYWxFdmVudDogYW55KSB7XG4gICAgICAgIHRoaXMuX3R5cGUgPSAnd2hlZWwnO1xuICAgICAgICB0aGlzLl9kZWx0YSAtPSB0aGlzLl9sYXN0VmFsdWU7XG4gICAgICAgIGlmICghdGhpcy5fYWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLl9zdGFydChpbml0aWFsRXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3N0YXJ0KGU6IGFueSkge1xuICAgICAgICBpZiAoIXRoaXMuX2RlbHRhKSByZXR1cm47XG5cbiAgICAgICAgaWYgKHRoaXMuX2ZyYW1lSWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lSWQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgaWYgKCF0aGlzLmlzWm9vbWluZygpKSB7XG4gICAgICAgICAgICB0aGlzLl96b29taW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9maW5pc2hUaW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fZmluaXNoVGltZW91dCk7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fZmluaXNoVGltZW91dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBvcyA9IERPTS5tb3VzZVBvcyh0aGlzLl9lbCwgZSk7XG5cbiAgICAgICAgdGhpcy5fYXJvdW5kID0gTG5nTGF0LmNvbnZlcnQodGhpcy5fYXJvdW5kQ2VudGVyID8gdGhpcy5fbWFwLmdldENlbnRlcigpIDogdGhpcy5fbWFwLnVucHJvamVjdChwb3MpKTtcbiAgICAgICAgdGhpcy5fYXJvdW5kUG9pbnQgPSB0aGlzLl9tYXAudHJhbnNmb3JtLmxvY2F0aW9uUG9pbnQodGhpcy5fYXJvdW5kKTtcbiAgICAgICAgaWYgKCF0aGlzLl9mcmFtZUlkKSB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZUlkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZXIuX3RyaWdnZXJSZW5kZXJGcmFtZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyRnJhbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vblNjcm9sbEZyYW1lKCk7XG4gICAgfVxuXG4gICAgX29uU2Nyb2xsRnJhbWUoKSB7XG4gICAgICAgIGlmICghdGhpcy5fZnJhbWVJZCkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9mcmFtZUlkID0gbnVsbDtcblxuICAgICAgICBpZiAoIXRoaXMuaXNBY3RpdmUoKSkgcmV0dXJuO1xuICAgICAgICBjb25zdCB0ciA9IHRoaXMuX21hcC50cmFuc2Zvcm07XG5cbiAgICAgICAgLy8gaWYgd2UndmUgaGFkIHNjcm9sbCBldmVudHMgc2luY2UgdGhlIGxhc3QgcmVuZGVyIGZyYW1lLCBjb25zdW1lIHRoZVxuICAgICAgICAvLyBhY2N1bXVsYXRlZCBkZWx0YSwgYW5kIHVwZGF0ZSB0aGUgdGFyZ2V0IHpvb20gbGV2ZWwgYWNjb3JkaW5nbHlcbiAgICAgICAgaWYgKHRoaXMuX2RlbHRhICE9PSAwKSB7XG4gICAgICAgICAgICAvLyBGb3IgdHJhY2twYWQgZXZlbnRzIGFuZCBzaW5nbGUgbW91c2Ugd2hlZWwgdGlja3MsIHVzZSB0aGUgZGVmYXVsdCB6b29tIHJhdGVcbiAgICAgICAgICAgIGNvbnN0IHpvb21SYXRlID0gKHRoaXMuX3R5cGUgPT09ICd3aGVlbCcgJiYgTWF0aC5hYnModGhpcy5fZGVsdGEpID4gd2hlZWxab29tRGVsdGEpID8gdGhpcy5fd2hlZWxab29tUmF0ZSA6IHRoaXMuX2RlZmF1bHRab29tUmF0ZTtcbiAgICAgICAgICAgIC8vIFNjYWxlIGJ5IHNpZ21vaWQgb2Ygc2Nyb2xsIHdoZWVsIGRlbHRhLlxuICAgICAgICAgICAgbGV0IHNjYWxlID0gbWF4U2NhbGVQZXJGcmFtZSAvICgxICsgTWF0aC5leHAoLU1hdGguYWJzKHRoaXMuX2RlbHRhICogem9vbVJhdGUpKSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9kZWx0YSA8IDAgJiYgc2NhbGUgIT09IDApIHtcbiAgICAgICAgICAgICAgICBzY2FsZSA9IDEgLyBzY2FsZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZnJvbVNjYWxlID0gdHlwZW9mIHRoaXMuX3RhcmdldFpvb20gPT09ICdudW1iZXInID8gdHIuem9vbVNjYWxlKHRoaXMuX3RhcmdldFpvb20pIDogdHIuc2NhbGU7XG4gICAgICAgICAgICB0aGlzLl90YXJnZXRab29tID0gTWF0aC5taW4odHIubWF4Wm9vbSwgTWF0aC5tYXgodHIubWluWm9vbSwgdHIuc2NhbGVab29tKGZyb21TY2FsZSAqIHNjYWxlKSkpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGlzIGlzIGEgbW91c2Ugd2hlZWwsIHJlZnJlc2ggdGhlIHN0YXJ0aW5nIHpvb20gYW5kIGVhc2luZ1xuICAgICAgICAgICAgLy8gZnVuY3Rpb24gd2UncmUgdXNpbmcgdG8gc21vb3RoIG91dCB0aGUgem9vbWluZyBiZXR3ZWVuIHdoZWVsXG4gICAgICAgICAgICAvLyBldmVudHNcbiAgICAgICAgICAgIGlmICh0aGlzLl90eXBlID09PSAnd2hlZWwnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhcnRab29tID0gdHIuem9vbTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lYXNpbmcgPSB0aGlzLl9zbW9vdGhPdXRFYXNpbmcoMjAwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fZGVsdGEgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGFyZ2V0Wm9vbSA9IHR5cGVvZiB0aGlzLl90YXJnZXRab29tID09PSAnbnVtYmVyJyA/XG4gICAgICAgICAgICB0aGlzLl90YXJnZXRab29tIDogdHIuem9vbTtcbiAgICAgICAgY29uc3Qgc3RhcnRab29tID0gdGhpcy5fc3RhcnRab29tO1xuICAgICAgICBjb25zdCBlYXNpbmcgPSB0aGlzLl9lYXNpbmc7XG5cbiAgICAgICAgbGV0IGZpbmlzaGVkID0gZmFsc2U7XG4gICAgICAgIGxldCB6b29tO1xuICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gJ3doZWVsJyAmJiBzdGFydFpvb20gJiYgZWFzaW5nKSB7XG4gICAgICAgICAgICBhc3NlcnQoZWFzaW5nICYmIHR5cGVvZiBzdGFydFpvb20gPT09ICdudW1iZXInKTtcblxuICAgICAgICAgICAgY29uc3QgdCA9IE1hdGgubWluKChicm93c2VyLm5vdygpIC0gdGhpcy5fbGFzdFdoZWVsRXZlbnRUaW1lKSAvIDIwMCwgMSk7XG4gICAgICAgICAgICBjb25zdCBrID0gZWFzaW5nKHQpO1xuICAgICAgICAgICAgem9vbSA9IGludGVycG9sYXRlKHN0YXJ0Wm9vbSwgdGFyZ2V0Wm9vbSwgayk7XG4gICAgICAgICAgICBpZiAodCA8IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2ZyYW1lSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZnJhbWVJZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmaW5pc2hlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB6b29tID0gdGFyZ2V0Wm9vbTtcbiAgICAgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7XG5cbiAgICAgICAgaWYgKGZpbmlzaGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX2ZpbmlzaFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl96b29taW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlci5fdHJpZ2dlclJlbmRlckZyYW1lKCk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3RhcmdldFpvb207XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2ZpbmlzaFRpbWVvdXQ7XG4gICAgICAgICAgICB9LCAyMDApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5vSW5lcnRpYTogdHJ1ZSxcbiAgICAgICAgICAgIG5lZWRzUmVuZGVyRnJhbWU6ICFmaW5pc2hlZCxcbiAgICAgICAgICAgIHpvb21EZWx0YTogem9vbSAtIHRyLnpvb20sXG4gICAgICAgICAgICBhcm91bmQ6IHRoaXMuX2Fyb3VuZFBvaW50LFxuICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogdGhpcy5fbGFzdFdoZWVsRXZlbnRcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBfc21vb3RoT3V0RWFzaW5nKGR1cmF0aW9uOiBudW1iZXIpIHtcbiAgICAgICAgbGV0IGVhc2luZyA9IF9lYXNlO1xuXG4gICAgICAgIGlmICh0aGlzLl9wcmV2RWFzZSkge1xuICAgICAgICAgICAgY29uc3QgZWFzZSA9IHRoaXMuX3ByZXZFYXNlLFxuICAgICAgICAgICAgICAgIHQgPSAoYnJvd3Nlci5ub3coKSAtIGVhc2Uuc3RhcnQpIC8gZWFzZS5kdXJhdGlvbixcbiAgICAgICAgICAgICAgICBzcGVlZCA9IGVhc2UuZWFzaW5nKHQgKyAwLjAxKSAtIGVhc2UuZWFzaW5nKHQpLFxuXG4gICAgICAgICAgICAgICAgLy8gUXVpY2sgaGFjayB0byBtYWtlIG5ldyBiZXppZXIgdGhhdCBpcyBjb250aW51b3VzIHdpdGggbGFzdFxuICAgICAgICAgICAgICAgIHggPSAwLjI3IC8gTWF0aC5zcXJ0KHNwZWVkICogc3BlZWQgKyAwLjAwMDEpICogMC4wMSxcbiAgICAgICAgICAgICAgICB5ID0gTWF0aC5zcXJ0KDAuMjcgKiAwLjI3IC0geCAqIHgpO1xuXG4gICAgICAgICAgICBlYXNpbmcgPSBiZXppZXIoeCwgeSwgMC4yNSwgMSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wcmV2RWFzZSA9IHtcbiAgICAgICAgICAgIHN0YXJ0OiBicm93c2VyLm5vdygpLFxuICAgICAgICAgICAgZHVyYXRpb24sXG4gICAgICAgICAgICBlYXNpbmdcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gZWFzaW5nO1xuICAgIH1cblxuICAgIHJlc2V0KCkge1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNjcm9sbFpvb21IYW5kbGVyO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHR5cGUgQ2xpY2tab29tSGFuZGxlciBmcm9tICcuLi9jbGlja196b29tJztcbmltcG9ydCB0eXBlIFRhcFpvb21IYW5kbGVyIGZyb20gJy4vLi4vdGFwX3pvb20nO1xuXG4vKipcbiAqIFRoZSBgRG91YmxlQ2xpY2tab29tSGFuZGxlcmAgYWxsb3dzIHRoZSB1c2VyIHRvIHpvb20gdGhlIG1hcCBhdCBhIHBvaW50IGJ5XG4gKiBkb3VibGUgY2xpY2tpbmcgb3IgZG91YmxlIHRhcHBpbmcuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvdWJsZUNsaWNrWm9vbUhhbmRsZXIge1xuXG4gICAgX2NsaWNrWm9vbTogQ2xpY2tab29tSGFuZGxlcjtcbiAgICBfdGFwWm9vbTogVGFwWm9vbUhhbmRsZXI7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICovXG4gICAgY29uc3RydWN0b3IoY2xpY2tab29tOiBDbGlja1pvb21IYW5kbGVyLCBUYXBab29tOiBUYXBab29tSGFuZGxlcikge1xuICAgICAgICB0aGlzLl9jbGlja1pvb20gPSBjbGlja1pvb207XG4gICAgICAgIHRoaXMuX3RhcFpvb20gPSBUYXBab29tO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgdGhlIFwiZG91YmxlIGNsaWNrIHRvIHpvb21cIiBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLmRvdWJsZUNsaWNrWm9vbS5lbmFibGUoKTtcbiAgICAgKi9cbiAgICBlbmFibGUoKSB7XG4gICAgICAgIHRoaXMuX2NsaWNrWm9vbS5lbmFibGUoKTtcbiAgICAgICAgdGhpcy5fdGFwWm9vbS5lbmFibGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgXCJkb3VibGUgY2xpY2sgdG8gem9vbVwiIGludGVyYWN0aW9uLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXAuZG91YmxlQ2xpY2tab29tLmRpc2FibGUoKTtcbiAgICAgKi9cbiAgICBkaXNhYmxlKCkge1xuICAgICAgICB0aGlzLl9jbGlja1pvb20uZGlzYWJsZSgpO1xuICAgICAgICB0aGlzLl90YXBab29tLmRpc2FibGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIFwiZG91YmxlIGNsaWNrIHRvIHpvb21cIiBpbnRlcmFjdGlvbiBpcyBlbmFibGVkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgXCJkb3VibGUgY2xpY2sgdG8gem9vbVwiIGludGVyYWN0aW9uIGlzIGVuYWJsZWQuXG4gICAgICovXG4gICAgaXNFbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2xpY2tab29tLmlzRW5hYmxlZCgpICYmIHRoaXMuX3RhcFpvb20uaXNFbmFibGVkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBcImRvdWJsZSBjbGljayB0byB6b29tXCIgaW50ZXJhY3Rpb24gaXMgYWN0aXZlLCBpLmUuIGN1cnJlbnRseSBiZWluZyB1c2VkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgXCJkb3VibGUgY2xpY2sgdG8gem9vbVwiIGludGVyYWN0aW9uIGlzIGFjdGl2ZS5cbiAgICAgKi9cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWNrWm9vbS5pc0FjdGl2ZSgpIHx8IHRoaXMuX3RhcFpvb20uaXNBY3RpdmUoKTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgdHlwZSBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi9tYXAnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDbGlja1pvb21IYW5kbGVyIHtcblxuICAgIF9lbmFibGVkOiBib29sZWFuO1xuICAgIF9hY3RpdmU6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH1cblxuICAgIHJlc2V0KCkge1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBkYmxjbGljayhlOiBNb3VzZUV2ZW50LCBwb2ludDogUG9pbnQpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY2FtZXJhQW5pbWF0aW9uOiAobWFwOiBNYXApID0+IHtcbiAgICAgICAgICAgICAgICBtYXAuZWFzZVRvKHtcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDMwMCxcbiAgICAgICAgICAgICAgICAgICAgem9vbTogbWFwLmdldFpvb20oKSArIChlLnNoaWZ0S2V5ID8gLTEgOiAxKSxcbiAgICAgICAgICAgICAgICAgICAgYXJvdW5kOiBtYXAudW5wcm9qZWN0KHBvaW50KVxuICAgICAgICAgICAgICAgIH0sIHtvcmlnaW5hbEV2ZW50OiBlfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZW5hYmxlKCkge1xuICAgICAgICB0aGlzLl9lbmFibGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBkaXNhYmxlKCkge1xuICAgICAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9XG5cbiAgICBpc0VuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmFibGVkO1xuICAgIH1cblxuICAgIGlzQWN0aXZlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7VGFwUmVjb2duaXplciwgTUFYX1RBUF9JTlRFUlZBTH0gZnJvbSAnLi90YXBfcmVjb2duaXplcic7XG5pbXBvcnQgdHlwZSBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGFwRHJhZ1pvb21IYW5kbGVyIHtcblxuICAgIF9lbmFibGVkOiBib29sZWFuO1xuICAgIF9hY3RpdmU6IGJvb2xlYW47XG4gICAgX3N3aXBlUG9pbnQ6IFBvaW50O1xuICAgIF9zd2lwZVRvdWNoOiBudW1iZXI7XG4gICAgX3RhcFRpbWU6IG51bWJlcjtcbiAgICBfdGFwOiBUYXBSZWNvZ25pemVyO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG5cbiAgICAgICAgdGhpcy5fdGFwID0gbmV3IFRhcFJlY29nbml6ZXIoe1xuICAgICAgICAgICAgbnVtVG91Y2hlczogMSxcbiAgICAgICAgICAgIG51bVRhcHM6IDFcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH1cblxuICAgIHJlc2V0KCkge1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3N3aXBlUG9pbnQ7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9zd2lwZVRvdWNoO1xuICAgICAgICBkZWxldGUgdGhpcy5fdGFwVGltZTtcbiAgICAgICAgdGhpcy5fdGFwLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgdG91Y2hzdGFydChlOiBUb3VjaEV2ZW50LCBwb2ludHM6IEFycmF5PFBvaW50Pikge1xuICAgICAgICBpZiAodGhpcy5fc3dpcGVQb2ludCkgcmV0dXJuO1xuXG4gICAgICAgIGlmICh0aGlzLl90YXBUaW1lICYmIGUudGltZVN0YW1wIC0gdGhpcy5fdGFwVGltZSA+IE1BWF9UQVBfSU5URVJWQUwpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fdGFwVGltZSkge1xuICAgICAgICAgICAgdGhpcy5fdGFwLnRvdWNoc3RhcnQoZSwgcG9pbnRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChlLnRhcmdldFRvdWNoZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fc3dpcGVQb2ludCA9IHBvaW50c1swXTtcbiAgICAgICAgICAgIHRoaXMuX3N3aXBlVG91Y2ggPSBlLnRhcmdldFRvdWNoZXNbMF0uaWRlbnRpZmllcjtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgdG91Y2htb3ZlKGU6IFRvdWNoRXZlbnQsIHBvaW50czogQXJyYXk8UG9pbnQ+KSB7XG4gICAgICAgIGlmICghdGhpcy5fdGFwVGltZSkge1xuICAgICAgICAgICAgdGhpcy5fdGFwLnRvdWNobW92ZShlLCBwb2ludHMpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3N3aXBlUG9pbnQpIHtcbiAgICAgICAgICAgIGlmIChlLnRhcmdldFRvdWNoZXNbMF0uaWRlbnRpZmllciAhPT0gdGhpcy5fc3dpcGVUb3VjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbmV3U3dpcGVQb2ludCA9IHBvaW50c1swXTtcbiAgICAgICAgICAgIGNvbnN0IGRpc3QgPSBuZXdTd2lwZVBvaW50LnkgLSB0aGlzLl9zd2lwZVBvaW50Lnk7XG4gICAgICAgICAgICB0aGlzLl9zd2lwZVBvaW50ID0gbmV3U3dpcGVQb2ludDtcblxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB6b29tRGVsdGE6IGRpc3QgLyAxMjhcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0b3VjaGVuZChlOiBUb3VjaEV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5fdGFwVGltZSkge1xuICAgICAgICAgICAgY29uc3QgcG9pbnQgPSB0aGlzLl90YXAudG91Y2hlbmQoZSk7XG4gICAgICAgICAgICBpZiAocG9pbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90YXBUaW1lID0gZS50aW1lU3RhbXA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fc3dpcGVQb2ludCkge1xuICAgICAgICAgICAgaWYgKGUudGFyZ2V0VG91Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0b3VjaGNhbmNlbCgpIHtcbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH1cblxuICAgIGVuYWJsZSgpIHtcbiAgICAgICAgdGhpcy5fZW5hYmxlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgZGlzYWJsZSgpIHtcbiAgICAgICAgdGhpcy5fZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgaXNFbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5hYmxlZDtcbiAgICB9XG5cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgdHlwZSB7TW91c2VQYW5IYW5kbGVyfSBmcm9tICcuLi9tb3VzZSc7XG5pbXBvcnQgdHlwZSBUb3VjaFBhbkhhbmRsZXIgZnJvbSAnLi8uLi90b3VjaF9wYW4nO1xuXG5leHBvcnQgdHlwZSBEcmFnUGFuT3B0aW9ucyA9IHtcbiAgICBsaW5lYXJpdHk/OiBudW1iZXI7XG4gICAgZWFzaW5nPzogKHQ6IG51bWJlcikgPT4gbnVtYmVyO1xuICAgIGRlY2VsZXJhdGlvbj86IG51bWJlcjtcbiAgICBtYXhTcGVlZD86IG51bWJlcjtcbn07XG5cbi8qKlxuICogVGhlIGBEcmFnUGFuSGFuZGxlcmAgYWxsb3dzIHRoZSB1c2VyIHRvIHBhbiB0aGUgbWFwIGJ5IGNsaWNraW5nIGFuZCBkcmFnZ2luZ1xuICogdGhlIGN1cnNvci5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHJhZ1BhbkhhbmRsZXIge1xuXG4gICAgX2VsOiBIVE1MRWxlbWVudDtcbiAgICBfbW91c2VQYW46IE1vdXNlUGFuSGFuZGxlcjtcbiAgICBfdG91Y2hQYW46IFRvdWNoUGFuSGFuZGxlcjtcbiAgICBfaW5lcnRpYU9wdGlvbnM6IERyYWdQYW5PcHRpb25zXG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICovXG4gICAgY29uc3RydWN0b3IoZWw6IEhUTUxFbGVtZW50LCBtb3VzZVBhbjogTW91c2VQYW5IYW5kbGVyLCB0b3VjaFBhbjogVG91Y2hQYW5IYW5kbGVyKSB7XG4gICAgICAgIHRoaXMuX2VsID0gZWw7XG4gICAgICAgIHRoaXMuX21vdXNlUGFuID0gbW91c2VQYW47XG4gICAgICAgIHRoaXMuX3RvdWNoUGFuID0gdG91Y2hQYW47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyB0aGUgXCJkcmFnIHRvIHBhblwiIGludGVyYWN0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBPcHRpb25zIG9iamVjdFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5saW5lYXJpdHk9MF0gZmFjdG9yIHVzZWQgdG8gc2NhbGUgdGhlIGRyYWcgdmVsb2NpdHlcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5lYXNpbmc9YmV6aWVyKDAsIDAsIDAuMywgMSldIGVhc2luZyBmdW5jdGlvbiBhcHBsbGVkIHRvIGBtYXAucGFuVG9gIHdoZW4gYXBwbHlpbmcgdGhlIGRyYWcuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1heFNwZWVkPTE0MDBdIHRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBkcmFnIHZlbG9jaXR5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5kZWNlbGVyYXRpb249MjUwMF0gdGhlIHJhdGUgYXQgd2hpY2ggdGhlIHNwZWVkIHJlZHVjZXMgYWZ0ZXIgdGhlIHBhbiBlbmRzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAgIG1hcC5kcmFnUGFuLmVuYWJsZSgpO1xuICAgICAqIEBleGFtcGxlXG4gICAgICogICBtYXAuZHJhZ3Bhbi5lbmFibGUoe1xuICAgICAqICAgICAgbGluZWFyaXR5OiAwLjMsXG4gICAgICogICAgICBlYXNpbmc6IGJlemllcigwLCAwLCAwLjMsIDEpLFxuICAgICAqICAgICAgbWF4U3BlZWQ6IDE0MDAsXG4gICAgICogICAgICBkZWNlbGVyYXRpb246IDI1MDAsXG4gICAgICogICB9KTtcbiAgICAgKi9cbiAgICBlbmFibGUob3B0aW9ucz86IERyYWdQYW5PcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX2luZXJ0aWFPcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgdGhpcy5fbW91c2VQYW4uZW5hYmxlKCk7XG4gICAgICAgIHRoaXMuX3RvdWNoUGFuLmVuYWJsZSgpO1xuICAgICAgICB0aGlzLl9lbC5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC10b3VjaC1kcmFnLXBhbicpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERpc2FibGVzIHRoZSBcImRyYWcgdG8gcGFuXCIgaW50ZXJhY3Rpb24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5kcmFnUGFuLmRpc2FibGUoKTtcbiAgICAgKi9cbiAgICBkaXNhYmxlKCkge1xuICAgICAgICB0aGlzLl9tb3VzZVBhbi5kaXNhYmxlKCk7XG4gICAgICAgIHRoaXMuX3RvdWNoUGFuLmRpc2FibGUoKTtcbiAgICAgICAgdGhpcy5fZWwuY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtdG91Y2gtZHJhZy1wYW4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIFwiZHJhZyB0byBwYW5cIiBpbnRlcmFjdGlvbiBpcyBlbmFibGVkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgXCJkcmFnIHRvIHBhblwiIGludGVyYWN0aW9uIGlzIGVuYWJsZWQuXG4gICAgICovXG4gICAgaXNFbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbW91c2VQYW4uaXNFbmFibGVkKCkgJiYgdGhpcy5fdG91Y2hQYW4uaXNFbmFibGVkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBcImRyYWcgdG8gcGFuXCIgaW50ZXJhY3Rpb24gaXMgYWN0aXZlLCBpLmUuIGN1cnJlbnRseSBiZWluZyB1c2VkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgXCJkcmFnIHRvIHBhblwiIGludGVyYWN0aW9uIGlzIGFjdGl2ZS5cbiAgICAgKi9cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vdXNlUGFuLmlzQWN0aXZlKCkgfHwgdGhpcy5fdG91Y2hQYW4uaXNBY3RpdmUoKTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgdHlwZSB7TW91c2VSb3RhdGVIYW5kbGVyLCBNb3VzZVBpdGNoSGFuZGxlcn0gZnJvbSAnLi4vbW91c2UnO1xuXG4vKipcbiAqIFRoZSBgRHJhZ1JvdGF0ZUhhbmRsZXJgIGFsbG93cyB0aGUgdXNlciB0byByb3RhdGUgdGhlIG1hcCBieSBjbGlja2luZyBhbmRcbiAqIGRyYWdnaW5nIHRoZSBjdXJzb3Igd2hpbGUgaG9sZGluZyB0aGUgcmlnaHQgbW91c2UgYnV0dG9uIG9yIGBjdHJsYCBrZXkuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERyYWdSb3RhdGVIYW5kbGVyIHtcblxuICAgIF9tb3VzZVJvdGF0ZTogTW91c2VSb3RhdGVIYW5kbGVyO1xuICAgIF9tb3VzZVBpdGNoOiBNb3VzZVBpdGNoSGFuZGxlcjtcbiAgICBfcGl0Y2hXaXRoUm90YXRlOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5iZWFyaW5nU25hcF0gVGhlIHRocmVzaG9sZCwgbWVhc3VyZWQgaW4gZGVncmVlcywgdGhhdCBkZXRlcm1pbmVzIHdoZW4gdGhlIG1hcCdzXG4gICAgICogICBiZWFyaW5nIHdpbGwgc25hcCB0byBub3J0aC5cbiAgICAgKiBAcGFyYW0ge2Jvb2x9IFtvcHRpb25zLnBpdGNoV2l0aFJvdGF0ZT10cnVlXSBDb250cm9sIHRoZSBtYXAgcGl0Y2ggaW4gYWRkaXRpb24gdG8gdGhlIGJlYXJpbmdcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IHtwaXRjaFdpdGhSb3RhdGU6IGJvb2xlYW59LCBtb3VzZVJvdGF0ZTogTW91c2VSb3RhdGVIYW5kbGVyLCBtb3VzZVBpdGNoOiBNb3VzZVBpdGNoSGFuZGxlcikge1xuICAgICAgICB0aGlzLl9waXRjaFdpdGhSb3RhdGUgPSBvcHRpb25zLnBpdGNoV2l0aFJvdGF0ZTtcbiAgICAgICAgdGhpcy5fbW91c2VSb3RhdGUgPSBtb3VzZVJvdGF0ZTtcbiAgICAgICAgdGhpcy5fbW91c2VQaXRjaCA9IG1vdXNlUGl0Y2g7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyB0aGUgXCJkcmFnIHRvIHJvdGF0ZVwiIGludGVyYWN0aW9uLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXAuZHJhZ1JvdGF0ZS5lbmFibGUoKTtcbiAgICAgKi9cbiAgICBlbmFibGUoKSB7XG4gICAgICAgIHRoaXMuX21vdXNlUm90YXRlLmVuYWJsZSgpO1xuICAgICAgICBpZiAodGhpcy5fcGl0Y2hXaXRoUm90YXRlKSB0aGlzLl9tb3VzZVBpdGNoLmVuYWJsZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERpc2FibGVzIHRoZSBcImRyYWcgdG8gcm90YXRlXCIgaW50ZXJhY3Rpb24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5kcmFnUm90YXRlLmRpc2FibGUoKTtcbiAgICAgKi9cbiAgICBkaXNhYmxlKCkge1xuICAgICAgICB0aGlzLl9tb3VzZVJvdGF0ZS5kaXNhYmxlKCk7XG4gICAgICAgIHRoaXMuX21vdXNlUGl0Y2guZGlzYWJsZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgXCJkcmFnIHRvIHJvdGF0ZVwiIGludGVyYWN0aW9uIGlzIGVuYWJsZWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBcImRyYWcgdG8gcm90YXRlXCIgaW50ZXJhY3Rpb24gaXMgZW5hYmxlZC5cbiAgICAgKi9cbiAgICBpc0VuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tb3VzZVJvdGF0ZS5pc0VuYWJsZWQoKSAmJiAoIXRoaXMuX3BpdGNoV2l0aFJvdGF0ZSB8fCB0aGlzLl9tb3VzZVBpdGNoLmlzRW5hYmxlZCgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIFwiZHJhZyB0byByb3RhdGVcIiBpbnRlcmFjdGlvbiBpcyBhY3RpdmUsIGkuZS4gY3VycmVudGx5IGJlaW5nIHVzZWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBcImRyYWcgdG8gcm90YXRlXCIgaW50ZXJhY3Rpb24gaXMgYWN0aXZlLlxuICAgICAqL1xuICAgIGlzQWN0aXZlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbW91c2VSb3RhdGUuaXNBY3RpdmUoKSB8fCB0aGlzLl9tb3VzZVBpdGNoLmlzQWN0aXZlKCk7XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHR5cGUge1RvdWNoWm9vbUhhbmRsZXIsIFRvdWNoUm90YXRlSGFuZGxlcn0gZnJvbSAnLi4vdG91Y2hfem9vbV9yb3RhdGUnO1xuaW1wb3J0IHR5cGUgVGFwRHJhZ1pvb21IYW5kbGVyIGZyb20gJy4uL3RhcF9kcmFnX3pvb20nO1xuXG4vKipcbiAqIFRoZSBgVG91Y2hab29tUm90YXRlSGFuZGxlcmAgYWxsb3dzIHRoZSB1c2VyIHRvIHpvb20gYW5kIHJvdGF0ZSB0aGUgbWFwIGJ5XG4gKiBwaW5jaGluZyBvbiBhIHRvdWNoc2NyZWVuLlxuICpcbiAqIFRoZXkgY2FuIHpvb20gd2l0aCBvbmUgZmluZ2VyIGJ5IGRvdWJsZSB0YXBwaW5nIGFuZCBkcmFnZ2luZy4gT24gdGhlIHNlY29uZCB0YXAsXG4gKiBob2xkIHRoZSBmaW5nZXIgZG93biBhbmQgZHJhZyB1cCBvciBkb3duIHRvIHpvb20gaW4gb3Igb3V0LlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb3VjaFpvb21Sb3RhdGVIYW5kbGVyIHtcblxuICAgIF9lbDogSFRNTEVsZW1lbnQ7XG4gICAgX3RvdWNoWm9vbTogVG91Y2hab29tSGFuZGxlcjtcbiAgICBfdG91Y2hSb3RhdGU6IFRvdWNoUm90YXRlSGFuZGxlcjtcbiAgICBfdGFwRHJhZ1pvb206IFRhcERyYWdab29tSGFuZGxlcjtcbiAgICBfcm90YXRpb25EaXNhYmxlZDogYm9vbGVhbjtcbiAgICBfZW5hYmxlZDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgKi9cbiAgICBjb25zdHJ1Y3RvcihlbDogSFRNTEVsZW1lbnQsIHRvdWNoWm9vbTogVG91Y2hab29tSGFuZGxlciwgdG91Y2hSb3RhdGU6IFRvdWNoUm90YXRlSGFuZGxlciwgdGFwRHJhZ1pvb206IFRhcERyYWdab29tSGFuZGxlcikge1xuICAgICAgICB0aGlzLl9lbCA9IGVsO1xuICAgICAgICB0aGlzLl90b3VjaFpvb20gPSB0b3VjaFpvb207XG4gICAgICAgIHRoaXMuX3RvdWNoUm90YXRlID0gdG91Y2hSb3RhdGU7XG4gICAgICAgIHRoaXMuX3RhcERyYWdab29tID0gdGFwRHJhZ1pvb207XG4gICAgICAgIHRoaXMuX3JvdGF0aW9uRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fZW5hYmxlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyB0aGUgXCJwaW5jaCB0byByb3RhdGUgYW5kIHpvb21cIiBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gT3B0aW9ucyBvYmplY3QuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmFyb3VuZF0gSWYgXCJjZW50ZXJcIiBpcyBwYXNzZWQsIG1hcCB3aWxsIHpvb20gYXJvdW5kIHRoZSBjZW50ZXJcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogICBtYXAudG91Y2hab29tUm90YXRlLmVuYWJsZSgpO1xuICAgICAqIEBleGFtcGxlXG4gICAgICogICBtYXAudG91Y2hab29tUm90YXRlLmVuYWJsZSh7IGFyb3VuZDogJ2NlbnRlcicgfSk7XG4gICAgICovXG4gICAgZW5hYmxlKG9wdGlvbnM6ID97YXJvdW5kPzogJ2NlbnRlcid9KSB7XG4gICAgICAgIHRoaXMuX3RvdWNoWm9vbS5lbmFibGUob3B0aW9ucyk7XG4gICAgICAgIGlmICghdGhpcy5fcm90YXRpb25EaXNhYmxlZCkgdGhpcy5fdG91Y2hSb3RhdGUuZW5hYmxlKG9wdGlvbnMpO1xuICAgICAgICB0aGlzLl90YXBEcmFnWm9vbS5lbmFibGUoKTtcbiAgICAgICAgdGhpcy5fZWwuY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtdG91Y2gtem9vbS1yb3RhdGUnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgXCJwaW5jaCB0byByb3RhdGUgYW5kIHpvb21cIiBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogICBtYXAudG91Y2hab29tUm90YXRlLmRpc2FibGUoKTtcbiAgICAgKi9cbiAgICBkaXNhYmxlKCkge1xuICAgICAgICB0aGlzLl90b3VjaFpvb20uZGlzYWJsZSgpO1xuICAgICAgICB0aGlzLl90b3VjaFJvdGF0ZS5kaXNhYmxlKCk7XG4gICAgICAgIHRoaXMuX3RhcERyYWdab29tLmRpc2FibGUoKTtcbiAgICAgICAgdGhpcy5fZWwuY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtdG91Y2gtem9vbS1yb3RhdGUnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIFwicGluY2ggdG8gcm90YXRlIGFuZCB6b29tXCIgaW50ZXJhY3Rpb24gaXMgZW5hYmxlZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIFwicGluY2ggdG8gcm90YXRlIGFuZCB6b29tXCIgaW50ZXJhY3Rpb24gaXMgZW5hYmxlZC5cbiAgICAgKi9cbiAgICBpc0VuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90b3VjaFpvb20uaXNFbmFibGVkKCkgJiZcbiAgICAgICAgICAgICh0aGlzLl9yb3RhdGlvbkRpc2FibGVkIHx8IHRoaXMuX3RvdWNoUm90YXRlLmlzRW5hYmxlZCgpKSAmJlxuICAgICAgICAgICAgdGhpcy5fdGFwRHJhZ1pvb20uaXNFbmFibGVkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBoYW5kbGVyIGlzIGVuYWJsZWQgYW5kIGhhcyBkZXRlY3RlZCB0aGUgc3RhcnQgb2YgYSB6b29tL3JvdGF0ZSBnZXN0dXJlLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IC8vZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAqL1xuICAgIGlzQWN0aXZlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdG91Y2hab29tLmlzQWN0aXZlKCkgfHwgdGhpcy5fdG91Y2hSb3RhdGUuaXNBY3RpdmUoKSB8fCB0aGlzLl90YXBEcmFnWm9vbS5pc0FjdGl2ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERpc2FibGVzIHRoZSBcInBpbmNoIHRvIHJvdGF0ZVwiIGludGVyYWN0aW9uLCBsZWF2aW5nIHRoZSBcInBpbmNoIHRvIHpvb21cIlxuICAgICAqIGludGVyYWN0aW9uIGVuYWJsZWQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICAgbWFwLnRvdWNoWm9vbVJvdGF0ZS5kaXNhYmxlUm90YXRpb24oKTtcbiAgICAgKi9cbiAgICBkaXNhYmxlUm90YXRpb24oKSB7XG4gICAgICAgIHRoaXMuX3JvdGF0aW9uRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl90b3VjaFJvdGF0ZS5kaXNhYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyB0aGUgXCJwaW5jaCB0byByb3RhdGVcIiBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogICBtYXAudG91Y2hab29tUm90YXRlLmVuYWJsZSgpO1xuICAgICAqICAgbWFwLnRvdWNoWm9vbVJvdGF0ZS5lbmFibGVSb3RhdGlvbigpO1xuICAgICAqL1xuICAgIGVuYWJsZVJvdGF0aW9uKCkge1xuICAgICAgICB0aGlzLl9yb3RhdGlvbkRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLl90b3VjaFpvb20uaXNFbmFibGVkKCkpIHRoaXMuX3RvdWNoUm90YXRlLmVuYWJsZSgpO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7RXZlbnR9IGZyb20gJy4uL3V0aWwvZXZlbnRlZCc7XG5pbXBvcnQgRE9NIGZyb20gJy4uL3V0aWwvZG9tJztcbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuL21hcCc7XG5pbXBvcnQgSGFuZGxlckluZXJ0aWEgZnJvbSAnLi9oYW5kbGVyX2luZXJ0aWEnO1xuaW1wb3J0IHtNYXBFdmVudEhhbmRsZXIsIEJsb2NrYWJsZU1hcEV2ZW50SGFuZGxlcn0gZnJvbSAnLi9oYW5kbGVyL21hcF9ldmVudCc7XG5pbXBvcnQgQm94Wm9vbUhhbmRsZXIgZnJvbSAnLi9oYW5kbGVyL2JveF96b29tJztcbmltcG9ydCBUYXBab29tSGFuZGxlciBmcm9tICcuL2hhbmRsZXIvdGFwX3pvb20nO1xuaW1wb3J0IHtNb3VzZVBhbkhhbmRsZXIsIE1vdXNlUm90YXRlSGFuZGxlciwgTW91c2VQaXRjaEhhbmRsZXJ9IGZyb20gJy4vaGFuZGxlci9tb3VzZSc7XG5pbXBvcnQgVG91Y2hQYW5IYW5kbGVyIGZyb20gJy4vaGFuZGxlci90b3VjaF9wYW4nO1xuaW1wb3J0IHtUb3VjaFpvb21IYW5kbGVyLCBUb3VjaFJvdGF0ZUhhbmRsZXIsIFRvdWNoUGl0Y2hIYW5kbGVyfSBmcm9tICcuL2hhbmRsZXIvdG91Y2hfem9vbV9yb3RhdGUnO1xuaW1wb3J0IEtleWJvYXJkSGFuZGxlciBmcm9tICcuL2hhbmRsZXIva2V5Ym9hcmQnO1xuaW1wb3J0IFNjcm9sbFpvb21IYW5kbGVyIGZyb20gJy4vaGFuZGxlci9zY3JvbGxfem9vbSc7XG5pbXBvcnQgRG91YmxlQ2xpY2tab29tSGFuZGxlciBmcm9tICcuL2hhbmRsZXIvc2hpbS9kYmxjbGlja196b29tJztcbmltcG9ydCBDbGlja1pvb21IYW5kbGVyIGZyb20gJy4vaGFuZGxlci9jbGlja196b29tJztcbmltcG9ydCBUYXBEcmFnWm9vbUhhbmRsZXIgZnJvbSAnLi9oYW5kbGVyL3RhcF9kcmFnX3pvb20nO1xuaW1wb3J0IERyYWdQYW5IYW5kbGVyIGZyb20gJy4vaGFuZGxlci9zaGltL2RyYWdfcGFuJztcbmltcG9ydCBEcmFnUm90YXRlSGFuZGxlciBmcm9tICcuL2hhbmRsZXIvc2hpbS9kcmFnX3JvdGF0ZSc7XG5pbXBvcnQgVG91Y2hab29tUm90YXRlSGFuZGxlciBmcm9tICcuL2hhbmRsZXIvc2hpbS90b3VjaF96b29tX3JvdGF0ZSc7XG5pbXBvcnQge2JpbmRBbGwsIGV4dGVuZH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB3aW5kb3cgZnJvbSAnLi4vdXRpbC93aW5kb3cnO1xuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5leHBvcnQgdHlwZSBJbnB1dEV2ZW50ID0gTW91c2VFdmVudCB8IFRvdWNoRXZlbnQgfCBLZXlib2FyZEV2ZW50IHwgV2hlZWxFdmVudDtcblxuY29uc3QgaXNNb3ZpbmcgPSBwID0+IHAuem9vbSB8fCBwLmRyYWcgfHwgcC5waXRjaCB8fCBwLnJvdGF0ZTtcblxuY2xhc3MgUmVuZGVyRnJhbWVFdmVudCBleHRlbmRzIEV2ZW50IHtcbiAgICB0eXBlOiAncmVuZGVyRnJhbWUnO1xuICAgIHRpbWVTdGFtcDogbnVtYmVyO1xufVxuXG4vLyBIYW5kbGVycyBpbnRlcnByZXQgZG9tIGV2ZW50cyBhbmQgcmV0dXJuIGNhbWVyYSBjaGFuZ2VzIHRoYXQgc2hvdWxkIGJlXG4vLyBhcHBsaWVkIHRvIHRoZSBtYXAgKGBIYW5kbGVyUmVzdWx0YHMpLiBUaGUgY2FtZXJhIGNoYW5nZXMgYXJlIGFsbCBkZWx0YXMuXG4vLyBUaGUgaGFuZGxlciBpdHNlbGYgc2hvdWxkIGhhdmUgbm8ga25vd2xlZGdlIG9mIHRoZSBtYXAncyBjdXJyZW50IHN0YXRlLlxuLy8gVGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8gbWVyZ2UgbXVsdGlwbGUgcmVzdWx0cyBhbmQga2VlcHMgaGFuZGxlcnMgc2ltcGxlci5cbi8vIEZvciBleGFtcGxlLCBpZiB0aGVyZSBpcyBhIG1vdXNlZG93biBhbmQgbW91c2Vtb3ZlLCB0aGUgbW91c2VQYW4gaGFuZGxlclxuLy8gd291bGQgcmV0dXJuIGEgYHBhbkRlbHRhYCBvbiB0aGUgbW91c2Vtb3ZlLlxuZXhwb3J0IGludGVyZmFjZSBIYW5kbGVyIHtcbiAgICBlbmFibGUoKTogdm9pZDtcbiAgICBkaXNhYmxlKCk6IHZvaWQ7XG4gICAgaXNFbmFibGVkKCk6IGJvb2xlYW47XG4gICAgaXNBY3RpdmUoKTogYm9vbGVhbjtcblxuICAgIC8vIGByZXNldGAgY2FuIGJlIGNhbGxlZCBieSB0aGUgbWFuYWdlciBhdCBhbnkgdGltZSBhbmQgbXVzdCByZXNldCBldmVyeXRoaW5nIHRvIGl0J3Mgb3JpZ2luYWwgc3RhdGVcbiAgICByZXNldCgpOiB2b2lkO1xuXG4gICAgLy8gSGFuZGxlcnMgY2FuIG9wdGlvbmFsbHkgaW1wbGVtZW50IHRoZXNlIG1ldGhvZHMuXG4gICAgLy8gVGhleSBhcmUgY2FsbGVkIHdpdGggZG9tIGV2ZW50cyB3aGVuZXZlciB0aG9zZSBkb20gZXZlbnMgYXJlIHJlY2VpdmVkLlxuICAgICt0b3VjaHN0YXJ0PzogKGU6IFRvdWNoRXZlbnQsIHBvaW50czogQXJyYXk8UG9pbnQ+KSA9PiBIYW5kbGVyUmVzdWx0IHwgdm9pZDtcbiAgICArdG91Y2htb3ZlPzogKGU6IFRvdWNoRXZlbnQsIHBvaW50czogQXJyYXk8UG9pbnQ+KSA9PiBIYW5kbGVyUmVzdWx0IHwgdm9pZDtcbiAgICArdG91Y2hlbmQ/OiAoZTogVG91Y2hFdmVudCwgcG9pbnRzOiBBcnJheTxQb2ludD4pID0+IEhhbmRsZXJSZXN1bHQgfCB2b2lkO1xuICAgICt0b3VjaGNhbmNlbD86IChlOiBUb3VjaEV2ZW50LCBwb2ludHM6IEFycmF5PFBvaW50PikgPT4gSGFuZGxlclJlc3VsdCB8IHZvaWQ7XG4gICAgK21vdXNlZG93bj86IChlOiBNb3VzZUV2ZW50LCBwb2ludDogUG9pbnQpID0+IEhhbmRsZXJSZXN1bHQgfCB2b2lkO1xuICAgICttb3VzZW1vdmU/OiAoZTogTW91c2VFdmVudCwgcG9pbnQ6IFBvaW50KSA9PiBIYW5kbGVyUmVzdWx0IHwgdm9pZDtcbiAgICArbW91c2V1cD86IChlOiBNb3VzZUV2ZW50LCBwb2ludDogUG9pbnQpID0+IEhhbmRsZXJSZXN1bHQgfCB2b2lkO1xuICAgICtkYmxjbGljaz86IChlOiBNb3VzZUV2ZW50LCBwb2ludDogUG9pbnQpID0+IEhhbmRsZXJSZXN1bHQgfCB2b2lkO1xuICAgICt3aGVlbD86IChlOiBXaGVlbEV2ZW50LCBwb2ludDogUG9pbnQpID0+IEhhbmRsZXJSZXN1bHQgfCB2b2lkO1xuICAgICtrZXlkb3duPzogKGU6IEtleWJvYXJkRXZlbnQpID0+IEhhbmRsZXJSZXN1bHQgfCB2b2lkO1xuICAgICtrZXl1cD86IChlOiBLZXlib2FyZEV2ZW50KSA9PiBIYW5kbGVyUmVzdWx0IHwgdm9pZDtcblxuICAgIC8vIGByZW5kZXJGcmFtZWAgaXMgdGhlIG9ubHkgbm9uLWRvbSBldmVudC4gSXQgaXMgY2FsbGVkIGR1cmluZyByZW5kZXJcbiAgICAvLyBmcmFtZXMgYW5kIGNhbiBiZSB1c2VkIHRvIHNtb290aCBjYW1lcmEgY2hhbmdlcyAoc2VlIHNjcm9sbCBoYW5kbGVyKS5cbiAgICArcmVuZGVyRnJhbWU/OiAoKSA9PiBIYW5kbGVyUmVzdWx0IHwgdm9pZDtcbn1cblxuLy8gQWxsIGhhbmRsZXIgbWV0aG9kcyB0aGF0IGFyZSBjYWxsZWQgd2l0aCBldmVudHMgY2FuIG9wdGlvbmFsbHkgcmV0dXJuIGEgYEhhbmRsZXJSZXN1bHRgLlxuZXhwb3J0IHR5cGUgSGFuZGxlclJlc3VsdCA9IHt8XG4gICAgcGFuRGVsdGE/OiBQb2ludCxcbiAgICB6b29tRGVsdGE/OiBudW1iZXIsXG4gICAgYmVhcmluZ0RlbHRhPzogbnVtYmVyLFxuICAgIHBpdGNoRGVsdGE/OiBudW1iZXIsXG4gICAgLy8gdGhlIHBvaW50IHRvIG5vdCBtb3ZlIHdoZW4gY2hhbmdpbmcgdGhlIGNhbWVyYVxuICAgIGFyb3VuZD86IFBvaW50IHwgbnVsbCxcbiAgICAvLyBzYW1lIGFzIGFib3ZlLCBleGNlcHQgZm9yIHBpbmNoIGFjdGlvbnMsIHdoaWNoIGFyZSBnaXZlbiBoaWdoZXIgcHJpb3JpdHlcbiAgICBwaW5jaEFyb3VuZD86IFBvaW50IHwgbnVsbCxcbiAgICAvLyBBIG1ldGhvZCB0aGF0IGNhbiBmaXJlIGEgb25lLW9mZiBlYXNpbmcgYnkgZGlyZWN0bHkgY2hhbmdpbmcgdGhlIG1hcCdzIGNhbWVyYS5cbiAgICBjYW1lcmFBbmltYXRpb24/OiAobWFwOiBNYXApID0+IGFueTtcblxuICAgIC8vIFRoZSBsYXN0IHRocmVlIHByb3BlcnRpZXMgYXJlIG5lZWRlZCBieSBvbmx5IG9uZSBoYW5kbGVyOiBzY3JvbGx6b29tLlxuICAgIC8vIFRoZSBET00gZXZlbnQgdG8gYmUgdXNlZCBhcyB0aGUgYG9yaWdpbmFsRXZlbnRgIG9uIGFueSBjYW1lcmEgY2hhbmdlIGV2ZW50cy5cbiAgICBvcmlnaW5hbEV2ZW50PzogYW55LFxuICAgIC8vIE1ha2VzIHRoZSBtYW5hZ2VyIHRyaWdnZXIgYSBmcmFtZSwgYWxsb3dpbmcgdGhlIGhhbmRsZXIgdG8gcmV0dXJuIG11bHRpcGxlIHJlc3VsdHMgb3ZlciB0aW1lIChzZWUgc2Nyb2xsem9vbSkuXG4gICAgbmVlZHNSZW5kZXJGcmFtZT86IGJvb2xlYW4sXG4gICAgLy8gVGhlIGNhbWVyYSBjaGFuZ2VzIHdvbid0IGdldCByZWNvcmRlZCBmb3IgaW5lcnRpYWwgem9vbWluZy5cbiAgICBub0luZXJ0aWE/OiBib29sZWFuXG58fTtcblxuZnVuY3Rpb24gaGFzQ2hhbmdlKHJlc3VsdDogSGFuZGxlclJlc3VsdCkge1xuICAgIHJldHVybiAocmVzdWx0LnBhbkRlbHRhICYmIHJlc3VsdC5wYW5EZWx0YS5tYWcoKSkgfHwgcmVzdWx0Lnpvb21EZWx0YSB8fCByZXN1bHQuYmVhcmluZ0RlbHRhIHx8IHJlc3VsdC5waXRjaERlbHRhO1xufVxuXG5jbGFzcyBIYW5kbGVyTWFuYWdlciB7XG4gICAgX21hcDogTWFwO1xuICAgIF9lbDogSFRNTEVsZW1lbnQ7XG4gICAgX2hhbmRsZXJzOiBBcnJheTx7IGhhbmRsZXJOYW1lOiBzdHJpbmcsIGhhbmRsZXI6IEhhbmRsZXIsIGFsbG93ZWQ6IGFueSB9PjtcbiAgICBfZXZlbnRzSW5Qcm9ncmVzczogT2JqZWN0O1xuICAgIF9mcmFtZUlkOiBudW1iZXI7XG4gICAgX2luZXJ0aWE6IEhhbmRsZXJJbmVydGlhO1xuICAgIF9iZWFyaW5nU25hcDogbnVtYmVyO1xuICAgIF9oYW5kbGVyc0J5SWQ6IHsgW3N0cmluZ106IEhhbmRsZXIgfTtcbiAgICBfdXBkYXRpbmdDYW1lcmE6IGJvb2xlYW47XG4gICAgX2NoYW5nZXM6IEFycmF5PFtIYW5kbGVyUmVzdWx0LCBPYmplY3QsIGFueV0+O1xuICAgIF9wcmV2aW91c0FjdGl2ZUhhbmRsZXJzOiB7IFtzdHJpbmddOiBIYW5kbGVyIH07XG4gICAgX2JlYXJpbmdDaGFuZ2VkOiBib29sZWFuO1xuICAgIF9saXN0ZW5lcnM6IEFycmF5PFtIVE1MRWxlbWVudCwgc3RyaW5nLCB2b2lkIHwge3Bhc3NpdmU/OiBib29sZWFuLCBjYXB0dXJlPzogYm9vbGVhbn1dPjtcblxuICAgIGNvbnN0cnVjdG9yKG1hcDogTWFwLCBvcHRpb25zOiB7IGludGVyYWN0aXZlOiBib29sZWFuLCBwaXRjaFdpdGhSb3RhdGU6IGJvb2xlYW4sIGNsaWNrVG9sZXJhbmNlOiBudW1iZXIsIGJlYXJpbmdTbmFwOiBudW1iZXJ9KSB7XG4gICAgICAgIHRoaXMuX21hcCA9IG1hcDtcbiAgICAgICAgdGhpcy5fZWwgPSB0aGlzLl9tYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCk7XG4gICAgICAgIHRoaXMuX2hhbmRsZXJzID0gW107XG4gICAgICAgIHRoaXMuX2hhbmRsZXJzQnlJZCA9IHt9O1xuICAgICAgICB0aGlzLl9jaGFuZ2VzID0gW107XG5cbiAgICAgICAgdGhpcy5faW5lcnRpYSA9IG5ldyBIYW5kbGVySW5lcnRpYShtYXApO1xuICAgICAgICB0aGlzLl9iZWFyaW5nU25hcCA9IG9wdGlvbnMuYmVhcmluZ1NuYXA7XG4gICAgICAgIHRoaXMuX3ByZXZpb3VzQWN0aXZlSGFuZGxlcnMgPSB7fTtcblxuICAgICAgICAvLyBUcmFjayB3aGV0aGVyIG1hcCBpcyBjdXJyZW50bHkgbW92aW5nLCB0byBjb21wdXRlIHN0YXJ0L21vdmUvZW5kIGV2ZW50c1xuICAgICAgICB0aGlzLl9ldmVudHNJblByb2dyZXNzID0ge307XG5cbiAgICAgICAgdGhpcy5fYWRkRGVmYXVsdEhhbmRsZXJzKG9wdGlvbnMpO1xuXG4gICAgICAgIGJpbmRBbGwoWydoYW5kbGVFdmVudCcsICdoYW5kbGVXaW5kb3dFdmVudCddLCB0aGlzKTtcblxuICAgICAgICBjb25zdCBlbCA9IHRoaXMuX2VsO1xuXG4gICAgICAgIHRoaXMuX2xpc3RlbmVycyA9IFtcbiAgICAgICAgICAgIC8vIEJpbmQgdG91Y2hzdGFydCBhbmQgdG91Y2htb3ZlIHdpdGggcGFzc2l2ZTogZmFsc2UgYmVjYXVzZSwgZXZlbiB0aG91Z2hcbiAgICAgICAgICAgIC8vIHRoZXkgb25seSBmaXJlIGEgbWFwIGV2ZW50cyBhbmQgdGhlcmVmb3JlIGNvdWxkIHRoZW9yZXRpY2FsbHkgYmVcbiAgICAgICAgICAgIC8vIHBhc3NpdmUsIGJpbmRpbmcgd2l0aCBwYXNzaXZlOiB0cnVlIGNhdXNlcyBpT1Mgbm90IHRvIHJlc3BlY3RcbiAgICAgICAgICAgIC8vIGUucHJldmVudERlZmF1bHQoKSBpbiBfb3RoZXJfIGhhbmRsZXJzLCBldmVuIGlmIHRoZXkgYXJlIG5vbi1wYXNzaXZlXG4gICAgICAgICAgICAvLyAoc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODQyNTEpXG4gICAgICAgICAgICBbZWwsICd0b3VjaHN0YXJ0Jywge3Bhc3NpdmU6IGZhbHNlfV0sXG4gICAgICAgICAgICBbZWwsICd0b3VjaG1vdmUnLCB7cGFzc2l2ZTogZmFsc2V9XSxcbiAgICAgICAgICAgIFtlbCwgJ3RvdWNoZW5kJywgdW5kZWZpbmVkXSxcbiAgICAgICAgICAgIFtlbCwgJ3RvdWNoY2FuY2VsJywgdW5kZWZpbmVkXSxcblxuICAgICAgICAgICAgW2VsLCAnbW91c2Vkb3duJywgdW5kZWZpbmVkXSxcbiAgICAgICAgICAgIFtlbCwgJ21vdXNlbW92ZScsIHVuZGVmaW5lZF0sXG4gICAgICAgICAgICBbZWwsICdtb3VzZXVwJywgdW5kZWZpbmVkXSxcblxuICAgICAgICAgICAgLy8gQmluZCB3aW5kb3ctbGV2ZWwgZXZlbnQgbGlzdGVuZXJzIGZvciBtb3ZlIGFuZCB1cC9lbmQgZXZlbnRzLiBJbiB0aGUgYWJzZW5jZSBvZlxuICAgICAgICAgICAgLy8gdGhlIHBvaW50ZXIgY2FwdHVyZSBBUEksIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYWxsIG5lY2Vzc2FyeSBwbGF0Zm9ybXMsXG4gICAgICAgICAgICAvLyB3aW5kb3ctbGV2ZWwgZXZlbnQgbGlzdGVuZXJzIGdpdmUgdXMgdGhlIGJlc3Qgc2hvdCBhdCBjYXB0dXJpbmcgZXZlbnRzIHRoYXRcbiAgICAgICAgICAgIC8vIGZhbGwgb3V0c2lkZSB0aGUgbWFwIGNhbnZhcyBlbGVtZW50LiBVc2UgYHtjYXB0dXJlOiB0cnVlfWAgZm9yIHRoZSBtb3ZlIGV2ZW50XG4gICAgICAgICAgICAvLyB0byBwcmV2ZW50IG1hcCBtb3ZlIGV2ZW50cyBmcm9tIGJlaW5nIGZpcmVkIGR1cmluZyBhIGRyYWcuXG4gICAgICAgICAgICBbd2luZG93LmRvY3VtZW50LCAnbW91c2Vtb3ZlJywge2NhcHR1cmU6IHRydWV9XSxcbiAgICAgICAgICAgIFt3aW5kb3cuZG9jdW1lbnQsICdtb3VzZXVwJywgdW5kZWZpbmVkXSxcblxuICAgICAgICAgICAgW2VsLCAnbW91c2VvdmVyJywgdW5kZWZpbmVkXSxcbiAgICAgICAgICAgIFtlbCwgJ21vdXNlb3V0JywgdW5kZWZpbmVkXSxcbiAgICAgICAgICAgIFtlbCwgJ2RibGNsaWNrJywgdW5kZWZpbmVkXSxcbiAgICAgICAgICAgIFtlbCwgJ2NsaWNrJywgdW5kZWZpbmVkXSxcblxuICAgICAgICAgICAgW2VsLCAna2V5ZG93bicsIHtjYXB0dXJlOiBmYWxzZX1dLFxuICAgICAgICAgICAgW2VsLCAna2V5dXAnLCB1bmRlZmluZWRdLFxuXG4gICAgICAgICAgICBbZWwsICd3aGVlbCcsIHtwYXNzaXZlOiBmYWxzZX1dLFxuICAgICAgICAgICAgW2VsLCAnY29udGV4dG1lbnUnLCB1bmRlZmluZWRdLFxuXG4gICAgICAgICAgICBbd2luZG93LCAnYmx1cicsIHVuZGVmaW5lZF1cbiAgICAgICAgXTtcblxuICAgICAgICBmb3IgKGNvbnN0IFt0YXJnZXQsIHR5cGUsIGxpc3RlbmVyT3B0aW9uc10gb2YgdGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBET00uYWRkRXZlbnRMaXN0ZW5lcih0YXJnZXQsIHR5cGUsIHRhcmdldCA9PT0gd2luZG93LmRvY3VtZW50ID8gdGhpcy5oYW5kbGVXaW5kb3dFdmVudCA6IHRoaXMuaGFuZGxlRXZlbnQsIGxpc3RlbmVyT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBmb3IgKGNvbnN0IFt0YXJnZXQsIHR5cGUsIGxpc3RlbmVyT3B0aW9uc10gb2YgdGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBET00ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0YXJnZXQsIHR5cGUsIHRhcmdldCA9PT0gd2luZG93LmRvY3VtZW50ID8gdGhpcy5oYW5kbGVXaW5kb3dFdmVudCA6IHRoaXMuaGFuZGxlRXZlbnQsIGxpc3RlbmVyT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfYWRkRGVmYXVsdEhhbmRsZXJzKG9wdGlvbnM6IHsgaW50ZXJhY3RpdmU6IGJvb2xlYW4sIHBpdGNoV2l0aFJvdGF0ZTogYm9vbGVhbiwgY2xpY2tUb2xlcmFuY2U6IG51bWJlciB9KSB7XG4gICAgICAgIGNvbnN0IG1hcCA9IHRoaXMuX21hcDtcbiAgICAgICAgY29uc3QgZWwgPSBtYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCk7XG4gICAgICAgIHRoaXMuX2FkZCgnbWFwRXZlbnQnLCBuZXcgTWFwRXZlbnRIYW5kbGVyKG1hcCwgb3B0aW9ucykpO1xuXG4gICAgICAgIGNvbnN0IGJveFpvb20gPSBtYXAuYm94Wm9vbSA9IG5ldyBCb3hab29tSGFuZGxlcihtYXAsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLl9hZGQoJ2JveFpvb20nLCBib3hab29tKTtcblxuICAgICAgICBjb25zdCB0YXBab29tID0gbmV3IFRhcFpvb21IYW5kbGVyKCk7XG4gICAgICAgIGNvbnN0IGNsaWNrWm9vbSA9IG5ldyBDbGlja1pvb21IYW5kbGVyKCk7XG4gICAgICAgIG1hcC5kb3VibGVDbGlja1pvb20gPSBuZXcgRG91YmxlQ2xpY2tab29tSGFuZGxlcihjbGlja1pvb20sIHRhcFpvb20pO1xuICAgICAgICB0aGlzLl9hZGQoJ3RhcFpvb20nLCB0YXBab29tKTtcbiAgICAgICAgdGhpcy5fYWRkKCdjbGlja1pvb20nLCBjbGlja1pvb20pO1xuXG4gICAgICAgIGNvbnN0IHRhcERyYWdab29tID0gbmV3IFRhcERyYWdab29tSGFuZGxlcigpO1xuICAgICAgICB0aGlzLl9hZGQoJ3RhcERyYWdab29tJywgdGFwRHJhZ1pvb20pO1xuXG4gICAgICAgIGNvbnN0IHRvdWNoUGl0Y2ggPSBtYXAudG91Y2hQaXRjaCA9IG5ldyBUb3VjaFBpdGNoSGFuZGxlcigpO1xuICAgICAgICB0aGlzLl9hZGQoJ3RvdWNoUGl0Y2gnLCB0b3VjaFBpdGNoKTtcblxuICAgICAgICBjb25zdCBtb3VzZVJvdGF0ZSA9IG5ldyBNb3VzZVJvdGF0ZUhhbmRsZXIob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IG1vdXNlUGl0Y2ggPSBuZXcgTW91c2VQaXRjaEhhbmRsZXIob3B0aW9ucyk7XG4gICAgICAgIG1hcC5kcmFnUm90YXRlID0gbmV3IERyYWdSb3RhdGVIYW5kbGVyKG9wdGlvbnMsIG1vdXNlUm90YXRlLCBtb3VzZVBpdGNoKTtcbiAgICAgICAgdGhpcy5fYWRkKCdtb3VzZVJvdGF0ZScsIG1vdXNlUm90YXRlLCBbJ21vdXNlUGl0Y2gnXSk7XG4gICAgICAgIHRoaXMuX2FkZCgnbW91c2VQaXRjaCcsIG1vdXNlUGl0Y2gsIFsnbW91c2VSb3RhdGUnXSk7XG5cbiAgICAgICAgY29uc3QgbW91c2VQYW4gPSBuZXcgTW91c2VQYW5IYW5kbGVyKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCB0b3VjaFBhbiA9IG5ldyBUb3VjaFBhbkhhbmRsZXIob3B0aW9ucyk7XG4gICAgICAgIG1hcC5kcmFnUGFuID0gbmV3IERyYWdQYW5IYW5kbGVyKGVsLCBtb3VzZVBhbiwgdG91Y2hQYW4pO1xuICAgICAgICB0aGlzLl9hZGQoJ21vdXNlUGFuJywgbW91c2VQYW4pO1xuICAgICAgICB0aGlzLl9hZGQoJ3RvdWNoUGFuJywgdG91Y2hQYW4sIFsndG91Y2hab29tJywgJ3RvdWNoUm90YXRlJ10pO1xuXG4gICAgICAgIGNvbnN0IHRvdWNoUm90YXRlID0gbmV3IFRvdWNoUm90YXRlSGFuZGxlcigpO1xuICAgICAgICBjb25zdCB0b3VjaFpvb20gPSBuZXcgVG91Y2hab29tSGFuZGxlcigpO1xuICAgICAgICBtYXAudG91Y2hab29tUm90YXRlID0gbmV3IFRvdWNoWm9vbVJvdGF0ZUhhbmRsZXIoZWwsIHRvdWNoWm9vbSwgdG91Y2hSb3RhdGUsIHRhcERyYWdab29tKTtcbiAgICAgICAgdGhpcy5fYWRkKCd0b3VjaFJvdGF0ZScsIHRvdWNoUm90YXRlLCBbJ3RvdWNoUGFuJywgJ3RvdWNoWm9vbSddKTtcbiAgICAgICAgdGhpcy5fYWRkKCd0b3VjaFpvb20nLCB0b3VjaFpvb20sIFsndG91Y2hQYW4nLCAndG91Y2hSb3RhdGUnXSk7XG5cbiAgICAgICAgY29uc3Qgc2Nyb2xsWm9vbSA9IG1hcC5zY3JvbGxab29tID0gbmV3IFNjcm9sbFpvb21IYW5kbGVyKG1hcCwgdGhpcyk7XG4gICAgICAgIHRoaXMuX2FkZCgnc2Nyb2xsWm9vbScsIHNjcm9sbFpvb20sIFsnbW91c2VQYW4nXSk7XG5cbiAgICAgICAgY29uc3Qga2V5Ym9hcmQgPSBtYXAua2V5Ym9hcmQgPSBuZXcgS2V5Ym9hcmRIYW5kbGVyKCk7XG4gICAgICAgIHRoaXMuX2FkZCgna2V5Ym9hcmQnLCBrZXlib2FyZCk7XG5cbiAgICAgICAgdGhpcy5fYWRkKCdibG9ja2FibGVNYXBFdmVudCcsIG5ldyBCbG9ja2FibGVNYXBFdmVudEhhbmRsZXIobWFwKSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBuYW1lIG9mIFsnYm94Wm9vbScsICdkb3VibGVDbGlja1pvb20nLCAndGFwRHJhZ1pvb20nLCAndG91Y2hQaXRjaCcsICdkcmFnUm90YXRlJywgJ2RyYWdQYW4nLCAndG91Y2hab29tUm90YXRlJywgJ3Njcm9sbFpvb20nLCAna2V5Ym9hcmQnXSkge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuaW50ZXJhY3RpdmUgJiYgKG9wdGlvbnM6IGFueSlbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAobWFwOiBhbnkpW25hbWVdLmVuYWJsZSgob3B0aW9uczogYW55KVtuYW1lXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfYWRkKGhhbmRsZXJOYW1lOiBzdHJpbmcsIGhhbmRsZXI6IEhhbmRsZXIsIGFsbG93ZWQ/OiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIHRoaXMuX2hhbmRsZXJzLnB1c2goe2hhbmRsZXJOYW1lLCBoYW5kbGVyLCBhbGxvd2VkfSk7XG4gICAgICAgIHRoaXMuX2hhbmRsZXJzQnlJZFtoYW5kbGVyTmFtZV0gPSBoYW5kbGVyO1xuICAgIH1cblxuICAgIHN0b3AoKSB7XG4gICAgICAgIC8vIGRvIG5vdGhpbmcgaWYgdGhpcyBtZXRob2Qgd2FzIHRyaWdnZXJlZCBieSBhIGdlc3R1cmUgdXBkYXRlXG4gICAgICAgIGlmICh0aGlzLl91cGRhdGluZ0NhbWVyYSkgcmV0dXJuO1xuXG4gICAgICAgIGZvciAoY29uc3Qge2hhbmRsZXJ9IG9mIHRoaXMuX2hhbmRsZXJzKSB7XG4gICAgICAgICAgICBoYW5kbGVyLnJlc2V0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faW5lcnRpYS5jbGVhcigpO1xuICAgICAgICB0aGlzLl9maXJlRXZlbnRzKHt9LCB7fSk7XG4gICAgICAgIHRoaXMuX2NoYW5nZXMgPSBbXTtcbiAgICB9XG5cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgICAgZm9yIChjb25zdCB7aGFuZGxlcn0gb2YgdGhpcy5faGFuZGxlcnMpIHtcbiAgICAgICAgICAgIGlmIChoYW5kbGVyLmlzQWN0aXZlKCkpIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpc1pvb21pbmcoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2V2ZW50c0luUHJvZ3Jlc3Muem9vbSB8fCB0aGlzLl9tYXAuc2Nyb2xsWm9vbS5pc1pvb21pbmcoKTtcbiAgICB9XG4gICAgaXNSb3RhdGluZygpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZXZlbnRzSW5Qcm9ncmVzcy5yb3RhdGU7XG4gICAgfVxuXG4gICAgX2Jsb2NrZWRCeUFjdGl2ZShhY3RpdmVIYW5kbGVyczogeyBbc3RyaW5nXTogSGFuZGxlciB9LCBhbGxvd2VkOiBBcnJheTxzdHJpbmc+LCBteU5hbWU6IHN0cmluZykge1xuICAgICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gYWN0aXZlSGFuZGxlcnMpIHtcbiAgICAgICAgICAgIGlmIChuYW1lID09PSBteU5hbWUpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKCFhbGxvd2VkIHx8IGFsbG93ZWQuaW5kZXhPZihuYW1lKSA8IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaGFuZGxlV2luZG93RXZlbnQoZTogSW5wdXRFdmVudCkge1xuICAgICAgICB0aGlzLmhhbmRsZUV2ZW50KGUsIGAke2UudHlwZX1XaW5kb3dgKTtcbiAgICB9XG5cbiAgICBoYW5kbGVFdmVudChlOiBJbnB1dEV2ZW50IHwgUmVuZGVyRnJhbWVFdmVudCwgZXZlbnROYW1lPzogc3RyaW5nKSB7XG5cbiAgICAgICAgaWYgKGUudHlwZSA9PT0gJ2JsdXInKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3AoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3VwZGF0aW5nQ2FtZXJhID0gdHJ1ZTtcbiAgICAgICAgYXNzZXJ0KGUudGltZVN0YW1wICE9PSB1bmRlZmluZWQpO1xuXG4gICAgICAgIGNvbnN0IGlucHV0RXZlbnQgPSBlLnR5cGUgPT09ICdyZW5kZXJGcmFtZScgPyB1bmRlZmluZWQgOiAoKGU6IGFueSk6IElucHV0RXZlbnQpO1xuXG4gICAgICAgIC8qXG4gICAgICAgICAqIFdlIGRvbid0IGNhbGwgZS5wcmV2ZW50RGVmYXVsdCgpIGZvciBhbnkgZXZlbnRzIGJ5IGRlZmF1bHQuXG4gICAgICAgICAqIEhhbmRsZXJzIGFyZSByZXNwb25zaWJsZSBmb3IgY2FsbGluZyBpdCB3aGVyZSBuZWNlc3NhcnkuXG4gICAgICAgICAqL1xuXG4gICAgICAgIGNvbnN0IG1lcmdlZEhhbmRsZXJSZXN1bHQ6IEhhbmRsZXJSZXN1bHQgPSB7bmVlZHNSZW5kZXJGcmFtZTogZmFsc2V9O1xuICAgICAgICBjb25zdCBldmVudHNJblByb2dyZXNzID0ge307XG4gICAgICAgIGNvbnN0IGFjdGl2ZUhhbmRsZXJzID0ge307XG5cbiAgICAgICAgY29uc3QgcG9pbnRzID0gZSA/IChlLnRhcmdldFRvdWNoZXMgP1xuICAgICAgICAgICAgRE9NLnRvdWNoUG9zKHRoaXMuX2VsLCAoKGU6IGFueSk6IFRvdWNoRXZlbnQpLnRhcmdldFRvdWNoZXMpIDpcbiAgICAgICAgICAgIERPTS5tb3VzZVBvcyh0aGlzLl9lbCwgKChlOiBhbnkpOiBNb3VzZUV2ZW50KSkpIDogbnVsbDtcblxuICAgICAgICBmb3IgKGNvbnN0IHtoYW5kbGVyTmFtZSwgaGFuZGxlciwgYWxsb3dlZH0gb2YgdGhpcy5faGFuZGxlcnMpIHtcbiAgICAgICAgICAgIGlmICghaGFuZGxlci5pc0VuYWJsZWQoKSkgY29udGludWU7XG5cbiAgICAgICAgICAgIGxldCBkYXRhOiBIYW5kbGVyUmVzdWx0IHwgdm9pZDtcbiAgICAgICAgICAgIGlmICh0aGlzLl9ibG9ja2VkQnlBY3RpdmUoYWN0aXZlSGFuZGxlcnMsIGFsbG93ZWQsIGhhbmRsZXJOYW1lKSkge1xuICAgICAgICAgICAgICAgIGhhbmRsZXIucmVzZXQoKTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoKGhhbmRsZXI6IGFueSlbZXZlbnROYW1lIHx8IGUudHlwZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IChoYW5kbGVyOiBhbnkpW2V2ZW50TmFtZSB8fCBlLnR5cGVdKGUsIHBvaW50cyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VIYW5kbGVyUmVzdWx0KG1lcmdlZEhhbmRsZXJSZXN1bHQsIGV2ZW50c0luUHJvZ3Jlc3MsIGRhdGEsIGhhbmRsZXJOYW1lLCBpbnB1dEV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5uZWVkc1JlbmRlckZyYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyUmVuZGVyRnJhbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEgfHwgaGFuZGxlci5pc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgYWN0aXZlSGFuZGxlcnNbaGFuZGxlck5hbWVdID0gaGFuZGxlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlYWN0aXZhdGVkSGFuZGxlcnMgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBuYW1lIGluIHRoaXMuX3ByZXZpb3VzQWN0aXZlSGFuZGxlcnMpIHtcbiAgICAgICAgICAgIGlmICghYWN0aXZlSGFuZGxlcnNbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICBkZWFjdGl2YXRlZEhhbmRsZXJzW25hbWVdID0gaW5wdXRFdmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9wcmV2aW91c0FjdGl2ZUhhbmRsZXJzID0gYWN0aXZlSGFuZGxlcnM7XG5cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKGRlYWN0aXZhdGVkSGFuZGxlcnMpLmxlbmd0aCB8fCBoYXNDaGFuZ2UobWVyZ2VkSGFuZGxlclJlc3VsdCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZXMucHVzaChbbWVyZ2VkSGFuZGxlclJlc3VsdCwgZXZlbnRzSW5Qcm9ncmVzcywgZGVhY3RpdmF0ZWRIYW5kbGVyc10pO1xuICAgICAgICAgICAgdGhpcy5fdHJpZ2dlclJlbmRlckZyYW1lKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoT2JqZWN0LmtleXMoYWN0aXZlSGFuZGxlcnMpLmxlbmd0aCB8fCBoYXNDaGFuZ2UobWVyZ2VkSGFuZGxlclJlc3VsdCkpIHtcbiAgICAgICAgICAgIHRoaXMuX21hcC5fc3RvcCh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3VwZGF0aW5nQ2FtZXJhID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3Qge2NhbWVyYUFuaW1hdGlvbn0gPSBtZXJnZWRIYW5kbGVyUmVzdWx0O1xuICAgICAgICBpZiAoY2FtZXJhQW5pbWF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9pbmVydGlhLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLl9maXJlRXZlbnRzKHt9LCB7fSk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VzID0gW107XG4gICAgICAgICAgICBjYW1lcmFBbmltYXRpb24odGhpcy5fbWFwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG1lcmdlSGFuZGxlclJlc3VsdChtZXJnZWRIYW5kbGVyUmVzdWx0OiBIYW5kbGVyUmVzdWx0LCBldmVudHNJblByb2dyZXNzOiBPYmplY3QsIGhhbmRsZXJSZXN1bHQ6IEhhbmRsZXJSZXN1bHQsIG5hbWU6IHN0cmluZywgZT86IElucHV0RXZlbnQpIHtcbiAgICAgICAgaWYgKCFoYW5kbGVyUmVzdWx0KSByZXR1cm47XG5cbiAgICAgICAgZXh0ZW5kKG1lcmdlZEhhbmRsZXJSZXN1bHQsIGhhbmRsZXJSZXN1bHQpO1xuXG4gICAgICAgIGNvbnN0IGV2ZW50RGF0YSA9IHtoYW5kbGVyTmFtZTogbmFtZSwgb3JpZ2luYWxFdmVudDogaGFuZGxlclJlc3VsdC5vcmlnaW5hbEV2ZW50IHx8IGV9O1xuXG4gICAgICAgIC8vIHRyYWNrIHdoaWNoIGhhbmRsZXIgY2hhbmdlZCB3aGljaCBjYW1lcmEgcHJvcGVydHlcbiAgICAgICAgaWYgKGhhbmRsZXJSZXN1bHQuem9vbURlbHRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGV2ZW50c0luUHJvZ3Jlc3Muem9vbSA9IGV2ZW50RGF0YTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFuZGxlclJlc3VsdC5wYW5EZWx0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBldmVudHNJblByb2dyZXNzLmRyYWcgPSBldmVudERhdGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhbmRsZXJSZXN1bHQucGl0Y2hEZWx0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBldmVudHNJblByb2dyZXNzLnBpdGNoID0gZXZlbnREYXRhO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYW5kbGVyUmVzdWx0LmJlYXJpbmdEZWx0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBldmVudHNJblByb2dyZXNzLnJvdGF0ZSA9IGV2ZW50RGF0YTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgX2FwcGx5Q2hhbmdlcygpIHtcbiAgICAgICAgY29uc3QgY29tYmluZWQgPSB7fTtcbiAgICAgICAgY29uc3QgY29tYmluZWRFdmVudHNJblByb2dyZXNzID0ge307XG4gICAgICAgIGNvbnN0IGNvbWJpbmVkRGVhY3RpdmF0ZWRIYW5kbGVycyA9IHt9O1xuXG4gICAgICAgIGZvciAoY29uc3QgW2NoYW5nZSwgZXZlbnRzSW5Qcm9ncmVzcywgZGVhY3RpdmF0ZWRIYW5kbGVyc10gb2YgdGhpcy5fY2hhbmdlcykge1xuXG4gICAgICAgICAgICBpZiAoY2hhbmdlLnBhbkRlbHRhKSBjb21iaW5lZC5wYW5EZWx0YSA9IChjb21iaW5lZC5wYW5EZWx0YSB8fCBuZXcgUG9pbnQoMCwgMCkpLl9hZGQoY2hhbmdlLnBhbkRlbHRhKTtcbiAgICAgICAgICAgIGlmIChjaGFuZ2Uuem9vbURlbHRhKSBjb21iaW5lZC56b29tRGVsdGEgPSAoY29tYmluZWQuem9vbURlbHRhIHx8IDApICsgY2hhbmdlLnpvb21EZWx0YTtcbiAgICAgICAgICAgIGlmIChjaGFuZ2UuYmVhcmluZ0RlbHRhKSBjb21iaW5lZC5iZWFyaW5nRGVsdGEgPSAoY29tYmluZWQuYmVhcmluZ0RlbHRhIHx8IDApICsgY2hhbmdlLmJlYXJpbmdEZWx0YTtcbiAgICAgICAgICAgIGlmIChjaGFuZ2UucGl0Y2hEZWx0YSkgY29tYmluZWQucGl0Y2hEZWx0YSA9IChjb21iaW5lZC5waXRjaERlbHRhIHx8IDApICsgY2hhbmdlLnBpdGNoRGVsdGE7XG4gICAgICAgICAgICBpZiAoY2hhbmdlLmFyb3VuZCAhPT0gdW5kZWZpbmVkKSBjb21iaW5lZC5hcm91bmQgPSBjaGFuZ2UuYXJvdW5kO1xuICAgICAgICAgICAgaWYgKGNoYW5nZS5waW5jaEFyb3VuZCAhPT0gdW5kZWZpbmVkKSBjb21iaW5lZC5waW5jaEFyb3VuZCA9IGNoYW5nZS5waW5jaEFyb3VuZDtcbiAgICAgICAgICAgIGlmIChjaGFuZ2Uubm9JbmVydGlhKSBjb21iaW5lZC5ub0luZXJ0aWEgPSBjaGFuZ2Uubm9JbmVydGlhO1xuXG4gICAgICAgICAgICBleHRlbmQoY29tYmluZWRFdmVudHNJblByb2dyZXNzLCBldmVudHNJblByb2dyZXNzKTtcbiAgICAgICAgICAgIGV4dGVuZChjb21iaW5lZERlYWN0aXZhdGVkSGFuZGxlcnMsIGRlYWN0aXZhdGVkSGFuZGxlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdXBkYXRlTWFwVHJhbnNmb3JtKGNvbWJpbmVkLCBjb21iaW5lZEV2ZW50c0luUHJvZ3Jlc3MsIGNvbWJpbmVkRGVhY3RpdmF0ZWRIYW5kbGVycyk7XG4gICAgICAgIHRoaXMuX2NoYW5nZXMgPSBbXTtcbiAgICB9XG5cbiAgICBfdXBkYXRlTWFwVHJhbnNmb3JtKGNvbWJpbmVkUmVzdWx0OiBhbnksIGNvbWJpbmVkRXZlbnRzSW5Qcm9ncmVzczogT2JqZWN0LCBkZWFjdGl2YXRlZEhhbmRsZXJzOiBPYmplY3QpIHtcblxuICAgICAgICBjb25zdCBtYXAgPSB0aGlzLl9tYXA7XG4gICAgICAgIGNvbnN0IHRyID0gbWFwLnRyYW5zZm9ybTtcblxuICAgICAgICBpZiAoIWhhc0NoYW5nZShjb21iaW5lZFJlc3VsdCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9maXJlRXZlbnRzKGNvbWJpbmVkRXZlbnRzSW5Qcm9ncmVzcywgZGVhY3RpdmF0ZWRIYW5kbGVycyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQge3BhbkRlbHRhLCB6b29tRGVsdGEsIGJlYXJpbmdEZWx0YSwgcGl0Y2hEZWx0YSwgYXJvdW5kLCBwaW5jaEFyb3VuZH0gPSBjb21iaW5lZFJlc3VsdDtcblxuICAgICAgICBpZiAocGluY2hBcm91bmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYXJvdW5kID0gcGluY2hBcm91bmQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzdG9wIGFueSBvbmdvaW5nIGNhbWVyYSBhbmltYXRpb25zIChlYXNlVG8sIGZseVRvKVxuICAgICAgICBtYXAuX3N0b3AodHJ1ZSk7XG5cbiAgICAgICAgYXJvdW5kID0gYXJvdW5kIHx8IG1hcC50cmFuc2Zvcm0uY2VudGVyUG9pbnQ7XG4gICAgICAgIGNvbnN0IGxvYyA9IHRyLnBvaW50TG9jYXRpb24ocGFuRGVsdGEgPyBhcm91bmQuc3ViKHBhbkRlbHRhKSA6IGFyb3VuZCk7XG4gICAgICAgIGlmIChiZWFyaW5nRGVsdGEpIHRyLmJlYXJpbmcgKz0gYmVhcmluZ0RlbHRhO1xuICAgICAgICBpZiAocGl0Y2hEZWx0YSkgdHIucGl0Y2ggKz0gcGl0Y2hEZWx0YTtcbiAgICAgICAgaWYgKHpvb21EZWx0YSkgdHIuem9vbSArPSB6b29tRGVsdGE7XG4gICAgICAgIHRyLnNldExvY2F0aW9uQXRQb2ludChsb2MsIGFyb3VuZCk7XG5cbiAgICAgICAgdGhpcy5fbWFwLl91cGRhdGUoKTtcbiAgICAgICAgaWYgKCFjb21iaW5lZFJlc3VsdC5ub0luZXJ0aWEpIHRoaXMuX2luZXJ0aWEucmVjb3JkKGNvbWJpbmVkUmVzdWx0KTtcbiAgICAgICAgdGhpcy5fZmlyZUV2ZW50cyhjb21iaW5lZEV2ZW50c0luUHJvZ3Jlc3MsIGRlYWN0aXZhdGVkSGFuZGxlcnMpO1xuXG4gICAgfVxuXG4gICAgX2ZpcmVFdmVudHMobmV3RXZlbnRzSW5Qcm9ncmVzczogeyBbc3RyaW5nXTogT2JqZWN0IH0sIGRlYWN0aXZhdGVkSGFuZGxlcnM6IE9iamVjdCkge1xuXG4gICAgICAgIGNvbnN0IHdhc01vdmluZyA9IGlzTW92aW5nKHRoaXMuX2V2ZW50c0luUHJvZ3Jlc3MpO1xuICAgICAgICBjb25zdCBub3dNb3ZpbmcgPSBpc01vdmluZyhuZXdFdmVudHNJblByb2dyZXNzKTtcblxuICAgICAgICBpZiAoIXdhc01vdmluZyAmJiBub3dNb3ZpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZpcmVFdmVudCgnbW92ZXN0YXJ0Jywgbm93TW92aW5nLm9yaWdpbmFsRXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBldmVudE5hbWUgaW4gbmV3RXZlbnRzSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgY29uc3Qge29yaWdpbmFsRXZlbnR9ID0gbmV3RXZlbnRzSW5Qcm9ncmVzc1tldmVudE5hbWVdO1xuICAgICAgICAgICAgY29uc3QgaXNTdGFydCA9ICF0aGlzLl9ldmVudHNJblByb2dyZXNzW2V2ZW50TmFtZV07XG4gICAgICAgICAgICB0aGlzLl9ldmVudHNJblByb2dyZXNzW2V2ZW50TmFtZV0gPSBuZXdFdmVudHNJblByb2dyZXNzW2V2ZW50TmFtZV07XG4gICAgICAgICAgICBpZiAoaXNTdGFydCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpcmVFdmVudChgJHtldmVudE5hbWV9c3RhcnRgLCBvcmlnaW5hbEV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXdFdmVudHNJblByb2dyZXNzLnJvdGF0ZSkgdGhpcy5fYmVhcmluZ0NoYW5nZWQgPSB0cnVlO1xuXG4gICAgICAgIGlmIChub3dNb3ZpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZpcmVFdmVudCgnbW92ZScsIG5vd01vdmluZy5vcmlnaW5hbEV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgZXZlbnROYW1lIGluIG5ld0V2ZW50c0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgIGNvbnN0IHtvcmlnaW5hbEV2ZW50fSA9IG5ld0V2ZW50c0luUHJvZ3Jlc3NbZXZlbnROYW1lXTtcbiAgICAgICAgICAgIHRoaXMuX2ZpcmVFdmVudChldmVudE5hbWUsIG9yaWdpbmFsRXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG9yaWdpbmFsRW5kRXZlbnQ7XG4gICAgICAgIGZvciAoY29uc3QgZXZlbnROYW1lIGluIHRoaXMuX2V2ZW50c0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgIGNvbnN0IHtoYW5kbGVyTmFtZSwgb3JpZ2luYWxFdmVudH0gPSB0aGlzLl9ldmVudHNJblByb2dyZXNzW2V2ZW50TmFtZV07XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2hhbmRsZXJzQnlJZFtoYW5kbGVyTmFtZV0uaXNBY3RpdmUoKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNJblByb2dyZXNzW2V2ZW50TmFtZV07XG4gICAgICAgICAgICAgICAgb3JpZ2luYWxFbmRFdmVudCA9IGRlYWN0aXZhdGVkSGFuZGxlcnNbaGFuZGxlck5hbWVdIHx8IG9yaWdpbmFsRXZlbnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmlyZUV2ZW50KGAke2V2ZW50TmFtZX1lbmRgLCBvcmlnaW5hbEVuZEV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0aWxsTW92aW5nID0gaXNNb3ZpbmcodGhpcy5fZXZlbnRzSW5Qcm9ncmVzcyk7XG4gICAgICAgIGlmICgod2FzTW92aW5nIHx8IG5vd01vdmluZykgJiYgIXN0aWxsTW92aW5nKSB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGluZ0NhbWVyYSA9IHRydWU7XG4gICAgICAgICAgICBjb25zdCBpbmVydGlhbEVhc2UgPSB0aGlzLl9pbmVydGlhLl9vbk1vdmVFbmQodGhpcy5fbWFwLmRyYWdQYW4uX2luZXJ0aWFPcHRpb25zKTtcblxuICAgICAgICAgICAgY29uc3Qgc2hvdWxkU25hcFRvTm9ydGggPSBiZWFyaW5nID0+IGJlYXJpbmcgIT09IDAgJiYgLXRoaXMuX2JlYXJpbmdTbmFwIDwgYmVhcmluZyAmJiBiZWFyaW5nIDwgdGhpcy5fYmVhcmluZ1NuYXA7XG5cbiAgICAgICAgICAgIGlmIChpbmVydGlhbEVhc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU25hcFRvTm9ydGgoaW5lcnRpYWxFYXNlLmJlYXJpbmcgfHwgdGhpcy5fbWFwLmdldEJlYXJpbmcoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5lcnRpYWxFYXNlLmJlYXJpbmcgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9tYXAuZWFzZVRvKGluZXJ0aWFsRWFzZSwge29yaWdpbmFsRXZlbnQ6IG9yaWdpbmFsRW5kRXZlbnR9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFwLmZpcmUobmV3IEV2ZW50KCdtb3ZlZW5kJywge29yaWdpbmFsRXZlbnQ6IG9yaWdpbmFsRW5kRXZlbnR9KSk7XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZFNuYXBUb05vcnRoKHRoaXMuX21hcC5nZXRCZWFyaW5nKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21hcC5yZXNldE5vcnRoKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fYmVhcmluZ0NoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0aW5nQ2FtZXJhID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIF9maXJlRXZlbnQodHlwZTogc3RyaW5nLCBlOiAqKSB7XG4gICAgICAgIHRoaXMuX21hcC5maXJlKG5ldyBFdmVudCh0eXBlLCBlID8ge29yaWdpbmFsRXZlbnQ6IGV9IDoge30pKTtcbiAgICB9XG5cbiAgICBfdHJpZ2dlclJlbmRlckZyYW1lKCkge1xuICAgICAgICBpZiAodGhpcy5fZnJhbWVJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZUlkID0gdGhpcy5fbWFwLl9yZXF1ZXN0UmVuZGVyRnJhbWUodGltZVN0YW1wID0+IHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fZnJhbWVJZDtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUV2ZW50KG5ldyBSZW5kZXJGcmFtZUV2ZW50KCdyZW5kZXJGcmFtZScsIHt0aW1lU3RhbXB9KSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fYXBwbHlDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG5leHBvcnQgZGVmYXVsdCBIYW5kbGVyTWFuYWdlcjtcbiIsIi8vIEBmbG93XG5pbXBvcnQge2V4dGVuZH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB3aW5kb3cgZnJvbSAnLi93aW5kb3cnO1xuXG4vKipcbiAqIFRoaXMgaXMgYSBwcml2YXRlIG5hbWVzcGFjZSBmb3IgdXRpbGl0eSBmdW5jdGlvbnMgdGhhdCB3aWxsIGdldCBhdXRvbWF0aWNhbGx5IHN0cmlwcGVkXG4gKiBvdXQgaW4gcHJvZHVjdGlvbiBidWlsZHMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IERlYnVnID0ge1xuICAgIGV4dGVuZChkZXN0OiBPYmplY3QsIC4uLnNvdXJjZXM6IEFycmF5PD9PYmplY3Q+KTogT2JqZWN0IHtcbiAgICAgICAgcmV0dXJuIGV4dGVuZChkZXN0LCAuLi5zb3VyY2VzKTtcbiAgICB9LFxuXG4gICAgcnVuKGZuOiAoKSA9PiBhbnkpIHtcbiAgICAgICAgZm4oKTtcbiAgICB9LFxuXG4gICAgbG9nVG9FbGVtZW50KG1lc3NhZ2U6IHN0cmluZywgb3ZlcndyaXRlOiBib29sZWFuID0gZmFsc2UsIGlkOiBzdHJpbmcgPSBcImxvZ1wiKSB7XG4gICAgICAgIGNvbnN0IGVsID0gd2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgICAgICAgaWYgKGVsKSB7XG4gICAgICAgICAgICBpZiAob3ZlcndyaXRlKSBlbC5pbm5lckhUTUwgPSAnJztcbiAgICAgICAgICAgIGVsLmlubmVySFRNTCArPSBgPGJyPiR7bWVzc2FnZX1gO1xuICAgICAgICB9XG5cbiAgICB9XG59O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtcbiAgICBiaW5kQWxsLFxuICAgIGV4dGVuZCxcbiAgICB3YXJuT25jZSxcbiAgICBjbGFtcCxcbiAgICB3cmFwLFxuICAgIGVhc2UgYXMgZGVmYXVsdEVhc2luZyxcbiAgICBwaWNrXG59IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQge251bWJlciBhcyBpbnRlcnBvbGF0ZX0gZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL2ludGVycG9sYXRlJztcbmltcG9ydCBicm93c2VyIGZyb20gJy4uL3V0aWwvYnJvd3Nlcic7XG5pbXBvcnQgTG5nTGF0IGZyb20gJy4uL2dlby9sbmdfbGF0JztcbmltcG9ydCBMbmdMYXRCb3VuZHMgZnJvbSAnLi4vZ2VvL2xuZ19sYXRfYm91bmRzJztcbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB7RXZlbnQsIEV2ZW50ZWR9IGZyb20gJy4uL3V0aWwvZXZlbnRlZCc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQge0RlYnVnfSBmcm9tICcuLi91dGlsL2RlYnVnJztcblxuaW1wb3J0IHR5cGUgVHJhbnNmb3JtIGZyb20gJy4uL2dlby90cmFuc2Zvcm0nO1xuaW1wb3J0IHR5cGUge0xuZ0xhdExpa2V9IGZyb20gJy4uL2dlby9sbmdfbGF0JztcbmltcG9ydCB0eXBlIHtMbmdMYXRCb3VuZHNMaWtlfSBmcm9tICcuLi9nZW8vbG5nX2xhdF9ib3VuZHMnO1xuaW1wb3J0IHR5cGUge1Rhc2tJRH0gZnJvbSAnLi4vdXRpbC90YXNrX3F1ZXVlJztcbmltcG9ydCB0eXBlIHtQb2ludExpa2V9IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IHR5cGUge1BhZGRpbmdPcHRpb25zfSBmcm9tICcuLi9nZW8vZWRnZV9pbnNldHMnO1xuXG4vKipcbiAqIE9wdGlvbnMgY29tbW9uIHRvIHtAbGluayBNYXAjanVtcFRvfSwge0BsaW5rIE1hcCNlYXNlVG99LCBhbmQge0BsaW5rIE1hcCNmbHlUb30sIGNvbnRyb2xsaW5nIHRoZSBkZXNpcmVkIGxvY2F0aW9uLFxuICogem9vbSwgYmVhcmluZywgYW5kIHBpdGNoIG9mIHRoZSBjYW1lcmEuIEFsbCBwcm9wZXJ0aWVzIGFyZSBvcHRpb25hbCwgYW5kIHdoZW4gYSBwcm9wZXJ0eSBpcyBvbWl0dGVkLCB0aGUgY3VycmVudFxuICogY2FtZXJhIHZhbHVlIGZvciB0aGF0IHByb3BlcnR5IHdpbGwgcmVtYWluIHVuY2hhbmdlZC5cbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBDYW1lcmFPcHRpb25zXG4gKiBAcHJvcGVydHkge0xuZ0xhdExpa2V9IGNlbnRlciBUaGUgZGVzaXJlZCBjZW50ZXIuXG4gKiBAcHJvcGVydHkge251bWJlcn0gem9vbSBUaGUgZGVzaXJlZCB6b29tIGxldmVsLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJlYXJpbmcgVGhlIGRlc2lyZWQgYmVhcmluZyBpbiBkZWdyZWVzLiBUaGUgYmVhcmluZyBpcyB0aGUgY29tcGFzcyBkaXJlY3Rpb24gdGhhdFxuICogaXMgXCJ1cFwiLiBGb3IgZXhhbXBsZSwgYGJlYXJpbmc6IDkwYCBvcmllbnRzIHRoZSBtYXAgc28gdGhhdCBlYXN0IGlzIHVwLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHBpdGNoIFRoZSBkZXNpcmVkIHBpdGNoIGluIGRlZ3JlZXMuIFRoZSBwaXRjaCBpcyB0aGUgYW5nbGUgdG93YXJkcyB0aGUgaG9yaXpvblxuICogbWVhc3VyZWQgaW4gZGVncmVlcyB3aXRoIGEgcmFuZ2UgYmV0d2VlbiAwIGFuZCA2MCBkZWdyZWVzLiBGb3IgZXhhbXBsZSwgcGl0Y2g6IDAgcHJvdmlkZXMgdGhlIGFwcGVhcmFuY2VcbiAqIG9mIGxvb2tpbmcgc3RyYWlnaHQgZG93biBhdCB0aGUgbWFwLCB3aGlsZSBwaXRjaDogNjAgdGlsdHMgdGhlIHVzZXIncyBwZXJzcGVjdGl2ZSB0b3dhcmRzIHRoZSBob3Jpem9uLlxuICogSW5jcmVhc2luZyB0aGUgcGl0Y2ggdmFsdWUgaXMgb2Z0ZW4gdXNlZCB0byBkaXNwbGF5IDNEIG9iamVjdHMuXG4gKiBAcHJvcGVydHkge0xuZ0xhdExpa2V9IGFyb3VuZCBJZiBgem9vbWAgaXMgc3BlY2lmaWVkLCBgYXJvdW5kYCBkZXRlcm1pbmVzIHRoZSBwb2ludCBhcm91bmQgd2hpY2ggdGhlIHpvb20gaXMgY2VudGVyZWQuXG4gKiBAcHJvcGVydHkge1BhZGRpbmdPcHRpb25zfSBwYWRkaW5nIERpbWVuc2lvbnMgaW4gcGl4ZWxzIGFwcGxpZWQgb24gZWFjaCBzaWRlIG9mIHRoZSB2aWV3cG9ydCBmb3Igc2hpZnRpbmcgdGhlIHZhbmlzaGluZyBwb2ludC5cbiAqIEBleGFtcGxlXG4gKiAvLyBzZXQgdGhlIG1hcCdzIGluaXRpYWwgcGVyc3BlY3RpdmUgd2l0aCBDYW1lcmFPcHRpb25zXG4gKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7XG4gKiAgIGNvbnRhaW5lcjogJ21hcCcsXG4gKiAgIHN0eWxlOiAnbWFwYm94Oi8vc3R5bGVzL21hcGJveC9zdHJlZXRzLXYxMScsXG4gKiAgIGNlbnRlcjogWy03My41ODA0LCA0NS41MzQ4M10sXG4gKiAgIHBpdGNoOiA2MCxcbiAqICAgYmVhcmluZzogLTYwLFxuICogICB6b29tOiAxMFxuICogfSk7XG4gKiBAc2VlIFtTZXQgcGl0Y2ggYW5kIGJlYXJpbmddKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3NldC1wZXJzcGVjdGl2ZS8pXG4gKiBAc2VlIFtKdW1wIHRvIGEgc2VyaWVzIG9mIGxvY2F0aW9uc10oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvanVtcC10by8pXG4gKiBAc2VlIFtGbHkgdG8gYSBsb2NhdGlvbl0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZmx5dG8vKVxuICogQHNlZSBbRGlzcGxheSBidWlsZGluZ3MgaW4gM0RdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlLzNkLWJ1aWxkaW5ncy8pXG4gKi9cbmV4cG9ydCB0eXBlIENhbWVyYU9wdGlvbnMgPSB7XG4gICAgY2VudGVyPzogTG5nTGF0TGlrZSxcbiAgICB6b29tPzogbnVtYmVyLFxuICAgIGJlYXJpbmc/OiBudW1iZXIsXG4gICAgcGl0Y2g/OiBudW1iZXIsXG4gICAgYXJvdW5kPzogTG5nTGF0TGlrZSxcbiAgICBwYWRkaW5nPzogUGFkZGluZ09wdGlvbnNcbn07XG5cbi8qKlxuICogT3B0aW9ucyBjb21tb24gdG8gbWFwIG1vdmVtZW50IG1ldGhvZHMgdGhhdCBpbnZvbHZlIGFuaW1hdGlvbiwgc3VjaCBhcyB7QGxpbmsgTWFwI3BhbkJ5fSBhbmRcbiAqIHtAbGluayBNYXAjZWFzZVRvfSwgY29udHJvbGxpbmcgdGhlIGR1cmF0aW9uIGFuZCBlYXNpbmcgZnVuY3Rpb24gb2YgdGhlIGFuaW1hdGlvbi4gQWxsIHByb3BlcnRpZXNcbiAqIGFyZSBvcHRpb25hbC5cbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBBbmltYXRpb25PcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gZHVyYXRpb24gVGhlIGFuaW1hdGlvbidzIGR1cmF0aW9uLCBtZWFzdXJlZCBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBlYXNpbmcgQSBmdW5jdGlvbiB0YWtpbmcgYSB0aW1lIGluIHRoZSByYW5nZSAwLi4xIGFuZCByZXR1cm5pbmcgYSBudW1iZXIgd2hlcmUgMCBpc1xuICogICB0aGUgaW5pdGlhbCBzdGF0ZSBhbmQgMSBpcyB0aGUgZmluYWwgc3RhdGUuXG4gKiBAcHJvcGVydHkge1BvaW50TGlrZX0gb2Zmc2V0IG9mIHRoZSB0YXJnZXQgY2VudGVyIHJlbGF0aXZlIHRvIHJlYWwgbWFwIGNvbnRhaW5lciBjZW50ZXIgYXQgdGhlIGVuZCBvZiBhbmltYXRpb24uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGFuaW1hdGUgSWYgYGZhbHNlYCwgbm8gYW5pbWF0aW9uIHdpbGwgb2NjdXIuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGVzc2VudGlhbCBJZiBgdHJ1ZWAsIHRoZW4gdGhlIGFuaW1hdGlvbiBpcyBjb25zaWRlcmVkIGVzc2VudGlhbCBhbmQgd2lsbCBub3QgYmUgYWZmZWN0ZWQgYnlcbiAqICAgW2BwcmVmZXJzLXJlZHVjZWQtbW90aW9uYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0BtZWRpYS9wcmVmZXJzLXJlZHVjZWQtbW90aW9uKS5cbiAqL1xuZXhwb3J0IHR5cGUgQW5pbWF0aW9uT3B0aW9ucyA9IHtcbiAgICBkdXJhdGlvbj86IG51bWJlcixcbiAgICBlYXNpbmc/OiAoXzogbnVtYmVyKSA9PiBudW1iZXIsXG4gICAgb2Zmc2V0PzogUG9pbnRMaWtlLFxuICAgIGFuaW1hdGU/OiBib29sZWFuLFxuICAgIGVzc2VudGlhbD86IGJvb2xlYW5cbn07XG5cbi8qKlxuICogT3B0aW9ucyBmb3Igc2V0dGluZyBwYWRkaW5nIG9uIGNhbGxzIHRvIG1ldGhvZHMgc3VjaCBhcyB7QGxpbmsgTWFwI2ZpdEJvdW5kc30sIHtAbGluayBNYXAjZml0U2NyZWVuQ29vcmRpbmF0ZXN9LCBhbmQge0BsaW5rIE1hcCNzZXRQYWRkaW5nfS4gQWRqdXN0IHRoZXNlIG9wdGlvbnMgdG8gc2V0IHRoZSBhbW91bnQgb2YgcGFkZGluZyBpbiBwaXhlbHMgYWRkZWQgdG8gdGhlIGVkZ2VzIG9mIHRoZSBjYW52YXMuIFNldCBhIHVuaWZvcm0gcGFkZGluZyBvbiBhbGwgZWRnZXMgb3IgaW5kaXZpZHVhbCB2YWx1ZXMgZm9yIGVhY2ggZWRnZS4gQWxsIHByb3BlcnRpZXMgb2YgdGhpcyBvYmplY3QgbXVzdCBiZVxuICogbm9uLW5lZ2F0aXZlIGludGVnZXJzLlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFBhZGRpbmdPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gdG9wIFBhZGRpbmcgaW4gcGl4ZWxzIGZyb20gdGhlIHRvcCBvZiB0aGUgbWFwIGNhbnZhcy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBib3R0b20gUGFkZGluZyBpbiBwaXhlbHMgZnJvbSB0aGUgYm90dG9tIG9mIHRoZSBtYXAgY2FudmFzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGxlZnQgUGFkZGluZyBpbiBwaXhlbHMgZnJvbSB0aGUgbGVmdCBvZiB0aGUgbWFwIGNhbnZhcy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSByaWdodCBQYWRkaW5nIGluIHBpeGVscyBmcm9tIHRoZSByaWdodCBvZiB0aGUgbWFwIGNhbnZhcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogdmFyIGJib3ggPSBbWy03OSwgNDNdLCBbLTczLCA0NV1dO1xuICogbWFwLmZpdEJvdW5kcyhiYm94LCB7XG4gKiAgIHBhZGRpbmc6IHt0b3A6IDEwLCBib3R0b206MjUsIGxlZnQ6IDE1LCByaWdodDogNX1cbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiB2YXIgYmJveCA9IFtbLTc5LCA0M10sIFstNzMsIDQ1XV07XG4gKiBtYXAuZml0Qm91bmRzKGJib3gsIHtcbiAqICAgcGFkZGluZzogMjBcbiAqIH0pO1xuICogQHNlZSBbRml0IHRvIHRoZSBib3VuZHMgb2YgYSBMaW5lU3RyaW5nXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS96b29tdG8tbGluZXN0cmluZy8pXG4gKiBAc2VlIFtGaXQgYSBtYXAgdG8gYSBib3VuZGluZyBib3hdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2ZpdGJvdW5kcy8pXG4gKi9cblxuY2xhc3MgQ2FtZXJhIGV4dGVuZHMgRXZlbnRlZCB7XG4gICAgdHJhbnNmb3JtOiBUcmFuc2Zvcm07XG4gICAgX21vdmluZzogYm9vbGVhbjtcbiAgICBfem9vbWluZzogYm9vbGVhbjtcbiAgICBfcm90YXRpbmc6IGJvb2xlYW47XG4gICAgX3BpdGNoaW5nOiBib29sZWFuO1xuICAgIF9wYWRkaW5nOiBib29sZWFuO1xuXG4gICAgX2JlYXJpbmdTbmFwOiBudW1iZXI7XG4gICAgX2Vhc2VFbmRUaW1lb3V0SUQ6IFRpbWVvdXRJRDtcbiAgICBfZWFzZVN0YXJ0OiBudW1iZXI7XG4gICAgX2Vhc2VPcHRpb25zOiB7ZHVyYXRpb246IG51bWJlciwgZWFzaW5nOiAoXzogbnVtYmVyKSA9PiBudW1iZXJ9O1xuICAgIF9lYXNlSWQ6IHN0cmluZyB8IHZvaWQ7XG5cbiAgICBfb25FYXNlRnJhbWU6IChfOiBudW1iZXIpID0+IHZvaWQ7XG4gICAgX29uRWFzZUVuZDogKGVhc2VJZD86IHN0cmluZykgPT4gdm9pZDtcbiAgICBfZWFzZUZyYW1lSWQ6ID9UYXNrSUQ7XG5cbiAgICArX3JlcXVlc3RSZW5kZXJGcmFtZTogKCgpID0+IHZvaWQpID0+IFRhc2tJRDtcbiAgICArX2NhbmNlbFJlbmRlckZyYW1lOiAoXzogVGFza0lEKSA9PiB2b2lkO1xuXG4gICAgY29uc3RydWN0b3IodHJhbnNmb3JtOiBUcmFuc2Zvcm0sIG9wdGlvbnM6IHtiZWFyaW5nU25hcDogbnVtYmVyfSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLl9tb3ZpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fem9vbWluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRyYW5zZm9ybSA9IHRyYW5zZm9ybTtcbiAgICAgICAgdGhpcy5fYmVhcmluZ1NuYXAgPSBvcHRpb25zLmJlYXJpbmdTbmFwO1xuXG4gICAgICAgIGJpbmRBbGwoWydfcmVuZGVyRnJhbWVDYWxsYmFjayddLCB0aGlzKTtcblxuICAgICAgICAvL2FkZEFzc2VydGlvbnModGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbWFwJ3MgZ2VvZ3JhcGhpY2FsIGNlbnRlcnBvaW50LlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcmV0dXJucyBUaGUgbWFwJ3MgZ2VvZ3JhcGhpY2FsIGNlbnRlcnBvaW50LlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gcmV0dXJuIGEgTG5nTGF0IG9iamVjdCBzdWNoIGFzIHtsbmc6IDAsIGxhdDogMH1cbiAgICAgKiB2YXIgY2VudGVyID0gbWFwLmdldENlbnRlcigpO1xuICAgICAqIC8vIGFjY2VzcyBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIHZhbHVlcyBkaXJlY3RseVxuICAgICAqIHZhciB7bG9uZ2l0dWRlLCBsYXRpdHVkZX0gPSBtYXAuZ2V0Q2VudGVyKCk7XG4gICAgICogQHNlZSBUdXRvcmlhbDogW1VzZSBNYXBib3ggR0wgSlMgaW4gYSBSZWFjdCBhcHBdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL2hlbHAvdHV0b3JpYWxzL3VzZS1tYXBib3gtZ2wtanMtd2l0aC1yZWFjdC8jc3RvcmUtdGhlLW5ldy1jb29yZGluYXRlcylcbiAgICAgKi9cbiAgICBnZXRDZW50ZXIoKTogTG5nTGF0IHsgcmV0dXJuIG5ldyBMbmdMYXQodGhpcy50cmFuc2Zvcm0uY2VudGVyLmxuZywgdGhpcy50cmFuc2Zvcm0uY2VudGVyLmxhdCk7IH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG1hcCdzIGdlb2dyYXBoaWNhbCBjZW50ZXJwb2ludC4gRXF1aXZhbGVudCB0byBganVtcFRvKHtjZW50ZXI6IGNlbnRlcn0pYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIGNlbnRlciBUaGUgY2VudGVycG9pbnQgdG8gc2V0LlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVlbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5zZXRDZW50ZXIoWy03NCwgMzhdKTtcbiAgICAgKi9cbiAgICBzZXRDZW50ZXIoY2VudGVyOiBMbmdMYXRMaWtlLCBldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuanVtcFRvKHtjZW50ZXJ9LCBldmVudERhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhbnMgdGhlIG1hcCBieSB0aGUgc3BlY2lmaWVkIG9mZnNldC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIG9mZnNldCBgeGAgYW5kIGB5YCBjb29yZGluYXRlcyBieSB3aGljaCB0byBwYW4gdGhlIG1hcC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIG9iamVjdFxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVlbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAc2VlIFtOYXZpZ2F0ZSB0aGUgbWFwIHdpdGggZ2FtZS1saWtlIGNvbnRyb2xzXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2dhbWUtY29udHJvbHMvKVxuICAgICAqL1xuICAgIHBhbkJ5KG9mZnNldDogUG9pbnRMaWtlLCBvcHRpb25zPzogQW5pbWF0aW9uT3B0aW9ucywgZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIG9mZnNldCA9IFBvaW50LmNvbnZlcnQob2Zmc2V0KS5tdWx0KC0xKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFuVG8odGhpcy50cmFuc2Zvcm0uY2VudGVyLCBleHRlbmQoe29mZnNldH0sIG9wdGlvbnMpLCBldmVudERhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhbnMgdGhlIG1hcCB0byB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uIHdpdGggYW4gYW5pbWF0ZWQgdHJhbnNpdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIGxuZ2xhdCBUaGUgbG9jYXRpb24gdG8gcGFuIHRoZSBtYXAgdG8uXG4gICAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBkZXNjcmliaW5nIHRoZSBkZXN0aW5hdGlvbiBhbmQgYW5pbWF0aW9uIG9mIHRoZSB0cmFuc2l0aW9uLlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVlbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5wYW5UbyhbLTc0LCAzOF0pO1xuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gU3BlY2lmeSB0aGF0IHRoZSBwYW5UbyBhbmltYXRpb24gc2hvdWxkIGxhc3QgNTAwMCBtaWxsaXNlY29uZHMuXG4gICAgICogbWFwLnBhblRvKFstNzQsIDM4XSwge2R1cmF0aW9uOiA1MDAwfSk7XG4gICAgICogQHNlZSBbVXBkYXRlIGEgZmVhdHVyZSBpbiByZWFsdGltZV0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvbGl2ZS11cGRhdGUtZmVhdHVyZS8pXG4gICAgICovXG4gICAgcGFuVG8obG5nbGF0OiBMbmdMYXRMaWtlLCBvcHRpb25zPzogQW5pbWF0aW9uT3B0aW9ucywgZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVhc2VUbyhleHRlbmQoe1xuICAgICAgICAgICAgY2VudGVyOiBsbmdsYXRcbiAgICAgICAgfSwgb3B0aW9ucyksIGV2ZW50RGF0YSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbWFwJ3MgY3VycmVudCB6b29tIGxldmVsLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcmV0dXJucyBUaGUgbWFwJ3MgY3VycmVudCB6b29tIGxldmVsLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLmdldFpvb20oKTtcbiAgICAgKi9cbiAgICBnZXRab29tKCk6IG51bWJlciB7IHJldHVybiB0aGlzLnRyYW5zZm9ybS56b29tOyB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBtYXAncyB6b29tIGxldmVsLiBFcXVpdmFsZW50IHRvIGBqdW1wVG8oe3pvb206IHpvb219KWAuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSB6b29tIFRoZSB6b29tIGxldmVsIHRvIHNldCAoMC0yMCkuXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgem9vbXN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVcbiAgICAgKiBAZmlyZXMgem9vbVxuICAgICAqIEBmaXJlcyBtb3ZlZW5kXG4gICAgICogQGZpcmVzIHpvb21lbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIFpvb20gdG8gdGhlIHpvb20gbGV2ZWwgNSB3aXRob3V0IGFuIGFuaW1hdGVkIHRyYW5zaXRpb25cbiAgICAgKiBtYXAuc2V0Wm9vbSg1KTtcbiAgICAgKi9cbiAgICBzZXRab29tKHpvb206IG51bWJlciwgZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuanVtcFRvKHt6b29tfSwgZXZlbnREYXRhKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogWm9vbXMgdGhlIG1hcCB0byB0aGUgc3BlY2lmaWVkIHpvb20gbGV2ZWwsIHdpdGggYW4gYW5pbWF0ZWQgdHJhbnNpdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIHpvb20gVGhlIHpvb20gbGV2ZWwgdG8gdHJhbnNpdGlvbiB0by5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIG9iamVjdFxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIHpvb21zdGFydFxuICAgICAqIEBmaXJlcyBtb3ZlXG4gICAgICogQGZpcmVzIHpvb21cbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEBmaXJlcyB6b29tZW5kXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBab29tIHRvIHRoZSB6b29tIGxldmVsIDUgd2l0aG91dCBhbiBhbmltYXRlZCB0cmFuc2l0aW9uXG4gICAgICogbWFwLnpvb21Ubyg1KTtcbiAgICAgKiAvLyBab29tIHRvIHRoZSB6b29tIGxldmVsIDggd2l0aCBhbiBhbmltYXRlZCB0cmFuc2l0aW9uXG4gICAgICogbWFwLnpvb21Ubyg4LCB7XG4gICAgICogICBkdXJhdGlvbjogMjAwMCxcbiAgICAgKiAgIG9mZnNldDogWzEwMCwgNTBdXG4gICAgICogfSk7XG4gICAgICovXG4gICAgem9vbVRvKHpvb206IG51bWJlciwgb3B0aW9uczogPyBBbmltYXRpb25PcHRpb25zLCBldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWFzZVRvKGV4dGVuZCh7XG4gICAgICAgICAgICB6b29tXG4gICAgICAgIH0sIG9wdGlvbnMpLCBldmVudERhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluY3JlYXNlcyB0aGUgbWFwJ3Mgem9vbSBsZXZlbCBieSAxLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIG9iamVjdFxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIHpvb21zdGFydFxuICAgICAqIEBmaXJlcyBtb3ZlXG4gICAgICogQGZpcmVzIHpvb21cbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEBmaXJlcyB6b29tZW5kXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyB6b29tIHRoZSBtYXAgaW4gb25lIGxldmVsIHdpdGggYSBjdXN0b20gYW5pbWF0aW9uIGR1cmF0aW9uXG4gICAgICogbWFwLnpvb21Jbih7ZHVyYXRpb246IDEwMDB9KTtcbiAgICAgKi9cbiAgICB6b29tSW4ob3B0aW9ucz86IEFuaW1hdGlvbk9wdGlvbnMsIGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICB0aGlzLnpvb21Ubyh0aGlzLmdldFpvb20oKSArIDEsIG9wdGlvbnMsIGV2ZW50RGF0YSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlY3JlYXNlcyB0aGUgbWFwJ3Mgem9vbSBsZXZlbCBieSAxLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIG9iamVjdFxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIHpvb21zdGFydFxuICAgICAqIEBmaXJlcyBtb3ZlXG4gICAgICogQGZpcmVzIHpvb21cbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEBmaXJlcyB6b29tZW5kXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyB6b29tIHRoZSBtYXAgb3V0IG9uZSBsZXZlbCB3aXRoIGEgY3VzdG9tIGFuaW1hdGlvbiBvZmZzZXRcbiAgICAgKiBtYXAuem9vbU91dCh7b2Zmc2V0OiBbODAsIDYwXX0pO1xuICAgICAqL1xuICAgIHpvb21PdXQob3B0aW9ucz86IEFuaW1hdGlvbk9wdGlvbnMsIGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICB0aGlzLnpvb21Ubyh0aGlzLmdldFpvb20oKSAtIDEsIG9wdGlvbnMsIGV2ZW50RGF0YSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG1hcCdzIGN1cnJlbnQgYmVhcmluZy4gVGhlIGJlYXJpbmcgaXMgdGhlIGNvbXBhc3MgZGlyZWN0aW9uIHRoYXQgaXMgXFxcInVwXFxcIjsgZm9yIGV4YW1wbGUsIGEgYmVhcmluZ1xuICAgICAqIG9mIDkww4LCsCBvcmllbnRzIHRoZSBtYXAgc28gdGhhdCBlYXN0IGlzIHVwLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcmV0dXJucyBUaGUgbWFwJ3MgY3VycmVudCBiZWFyaW5nLlxuICAgICAqIEBzZWUgW05hdmlnYXRlIHRoZSBtYXAgd2l0aCBnYW1lLWxpa2UgY29udHJvbHNdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZ2FtZS1jb250cm9scy8pXG4gICAgICovXG4gICAgZ2V0QmVhcmluZygpOiBudW1iZXIgeyByZXR1cm4gdGhpcy50cmFuc2Zvcm0uYmVhcmluZzsgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbWFwJ3MgYmVhcmluZyAocm90YXRpb24pLiBUaGUgYmVhcmluZyBpcyB0aGUgY29tcGFzcyBkaXJlY3Rpb24gdGhhdCBpcyBcXFwidXBcXFwiOyBmb3IgZXhhbXBsZSwgYSBiZWFyaW5nXG4gICAgICogb2YgOTDDgsKwIG9yaWVudHMgdGhlIG1hcCBzbyB0aGF0IGVhc3QgaXMgdXAuXG4gICAgICpcbiAgICAgKiBFcXVpdmFsZW50IHRvIGBqdW1wVG8oe2JlYXJpbmc6IGJlYXJpbmd9KWAuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSBiZWFyaW5nIFRoZSBkZXNpcmVkIGJlYXJpbmcuXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gcm90YXRlIHRoZSBtYXAgdG8gOTAgZGVncmVlc1xuICAgICAqIG1hcC5zZXRCZWFyaW5nKDkwKTtcbiAgICAgKi9cbiAgICBzZXRCZWFyaW5nKGJlYXJpbmc6IG51bWJlciwgZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuanVtcFRvKHtiZWFyaW5nfSwgZXZlbnREYXRhKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBwYWRkaW5nIGFwcGxpZWQgYXJvdW5kIHRoZSBtYXAgdmlld3BvcnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHBhZGRpbmcgYXJvdW5kIHRoZSBtYXAgdmlld3BvcnQuXG4gICAgICovXG4gICAgZ2V0UGFkZGluZygpOiBQYWRkaW5nT3B0aW9ucyB7IHJldHVybiB0aGlzLnRyYW5zZm9ybS5wYWRkaW5nOyB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBwYWRkaW5nIGluIHBpeGVscyBhcm91bmQgdGhlIHZpZXdwb3J0LlxuICAgICAqXG4gICAgICogRXF1aXZhbGVudCB0byBganVtcFRvKHtwYWRkaW5nOiBwYWRkaW5nfSlgLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcGFyYW0gcGFkZGluZyBUaGUgZGVzaXJlZCBwYWRkaW5nLiBGb3JtYXQ6IHsgbGVmdDogbnVtYmVyLCByaWdodDogbnVtYmVyLCB0b3A6IG51bWJlciwgYm90dG9tOiBudW1iZXIgfVxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVlbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIFNldHMgYSBsZWZ0IHBhZGRpbmcgb2YgMzAwcHgsIGFuZCBhIHRvcCBwYWRkaW5nIG9mIDUwcHhcbiAgICAgKiBtYXAuc2V0UGFkZGluZyh7IGxlZnQ6IDMwMCwgdG9wOiA1MCB9KTtcbiAgICAgKi9cbiAgICBzZXRQYWRkaW5nKHBhZGRpbmc6IFBhZGRpbmdPcHRpb25zLCBldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgdGhpcy5qdW1wVG8oe3BhZGRpbmd9LCBldmVudERhdGEpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSb3RhdGVzIHRoZSBtYXAgdG8gdGhlIHNwZWNpZmllZCBiZWFyaW5nLCB3aXRoIGFuIGFuaW1hdGVkIHRyYW5zaXRpb24uIFRoZSBiZWFyaW5nIGlzIHRoZSBjb21wYXNzIGRpcmVjdGlvblxuICAgICAqIHRoYXQgaXMgXFxcInVwXFxcIjsgZm9yIGV4YW1wbGUsIGEgYmVhcmluZyBvZiA5MMOCwrAgb3JpZW50cyB0aGUgbWFwIHNvIHRoYXQgZWFzdCBpcyB1cC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIGJlYXJpbmcgVGhlIGRlc2lyZWQgYmVhcmluZy5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIG9iamVjdFxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVlbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKi9cbiAgICByb3RhdGVUbyhiZWFyaW5nOiBudW1iZXIsIG9wdGlvbnM/OiBBbmltYXRpb25PcHRpb25zLCBldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWFzZVRvKGV4dGVuZCh7XG4gICAgICAgICAgICBiZWFyaW5nXG4gICAgICAgIH0sIG9wdGlvbnMpLCBldmVudERhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJvdGF0ZXMgdGhlIG1hcCBzbyB0aGF0IG5vcnRoIGlzIHVwICgww4LCsCBiZWFyaW5nKSwgd2l0aCBhbiBhbmltYXRlZCB0cmFuc2l0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIG9iamVjdFxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVlbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKi9cbiAgICByZXNldE5vcnRoKG9wdGlvbnM/OiBBbmltYXRpb25PcHRpb25zLCBldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgdGhpcy5yb3RhdGVUbygwLCBleHRlbmQoe2R1cmF0aW9uOiAxMDAwfSwgb3B0aW9ucyksIGV2ZW50RGF0YSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJvdGF0ZXMgYW5kIHBpdGNoZXMgdGhlIG1hcCBzbyB0aGF0IG5vcnRoIGlzIHVwICgww4LCsCBiZWFyaW5nKSBhbmQgcGl0Y2ggaXMgMMOCwrAsIHdpdGggYW4gYW5pbWF0ZWQgdHJhbnNpdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBvYmplY3RcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhZGRlZCB0byBldmVudCBvYmplY3RzIG9mIGV2ZW50cyB0cmlnZ2VyZWQgYnkgdGhpcyBtZXRob2QuXG4gICAgICogQGZpcmVzIG1vdmVzdGFydFxuICAgICAqIEBmaXJlcyBtb3ZlZW5kXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICovXG4gICAgcmVzZXROb3J0aFBpdGNoKG9wdGlvbnM/OiBBbmltYXRpb25PcHRpb25zLCBldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgdGhpcy5lYXNlVG8oZXh0ZW5kKHtcbiAgICAgICAgICAgIGJlYXJpbmc6IDAsXG4gICAgICAgICAgICBwaXRjaDogMCxcbiAgICAgICAgICAgIGR1cmF0aW9uOiAxMDAwXG4gICAgICAgIH0sIG9wdGlvbnMpLCBldmVudERhdGEpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTbmFwcyB0aGUgbWFwIHNvIHRoYXQgbm9ydGggaXMgdXAgKDDDgsKwIGJlYXJpbmcpLCBpZiB0aGUgY3VycmVudCBiZWFyaW5nIGlzIGNsb3NlIGVub3VnaCB0byBpdCAoaS5lLiB3aXRoaW4gdGhlXG4gICAgICogYGJlYXJpbmdTbmFwYCB0aHJlc2hvbGQpLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIG9iamVjdFxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVlbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKi9cbiAgICBzbmFwVG9Ob3J0aChvcHRpb25zPzogQW5pbWF0aW9uT3B0aW9ucywgZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIGlmIChNYXRoLmFicyh0aGlzLmdldEJlYXJpbmcoKSkgPCB0aGlzLl9iZWFyaW5nU25hcCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzZXROb3J0aChvcHRpb25zLCBldmVudERhdGEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG1hcCdzIGN1cnJlbnQgcGl0Y2ggKHRpbHQpLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcmV0dXJucyBUaGUgbWFwJ3MgY3VycmVudCBwaXRjaCwgbWVhc3VyZWQgaW4gZGVncmVlcyBhd2F5IGZyb20gdGhlIHBsYW5lIG9mIHRoZSBzY3JlZW4uXG4gICAgICovXG4gICAgZ2V0UGl0Y2goKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMudHJhbnNmb3JtLnBpdGNoOyB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBtYXAncyBwaXRjaCAodGlsdCkuIEVxdWl2YWxlbnQgdG8gYGp1bXBUbyh7cGl0Y2g6IHBpdGNofSlgLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcGFyYW0gcGl0Y2ggVGhlIHBpdGNoIHRvIHNldCwgbWVhc3VyZWQgaW4gZGVncmVlcyBhd2F5IGZyb20gdGhlIHBsYW5lIG9mIHRoZSBzY3JlZW4gKDAtNjApLlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgcGl0Y2hzdGFydFxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqL1xuICAgIHNldFBpdGNoKHBpdGNoOiBudW1iZXIsIGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICB0aGlzLmp1bXBUbyh7cGl0Y2h9LCBldmVudERhdGEpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSB7TG5nTGF0Qm91bmRzTGlrZX0gYm91bmRzIENhbGN1bGF0ZSB0aGUgY2VudGVyIGZvciB0aGVzZSBib3VuZHMgaW4gdGhlIHZpZXdwb3J0IGFuZCB1c2VcbiAgICAgKiAgICAgIHRoZSBoaWdoZXN0IHpvb20gbGV2ZWwgdXAgdG8gYW5kIGluY2x1ZGluZyBgTWFwI2dldE1heFpvb20oKWAgdGhhdCBmaXRzXG4gICAgICogICAgICBpbiB0aGUgdmlld3BvcnQuIExhdExuZ0JvdW5kcyByZXByZXNlbnQgYSBib3ggdGhhdCBpcyBhbHdheXMgYXhpcy1hbGlnbmVkIHdpdGggYmVhcmluZyAwLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgb2JqZWN0XG4gICAgICogQHBhcmFtIHtudW1iZXIgfCBQYWRkaW5nT3B0aW9uc30gW29wdGlvbnMucGFkZGluZ10gVGhlIGFtb3VudCBvZiBwYWRkaW5nIGluIHBpeGVscyB0byBhZGQgdG8gdGhlIGdpdmVuIGJvdW5kcy5cbiAgICAgKiBAcGFyYW0ge1BvaW50TGlrZX0gW29wdGlvbnMub2Zmc2V0PVswLCAwXV0gVGhlIGNlbnRlciBvZiB0aGUgZ2l2ZW4gYm91bmRzIHJlbGF0aXZlIHRvIHRoZSBtYXAncyBjZW50ZXIsIG1lYXN1cmVkIGluIHBpeGVscy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4Wm9vbV0gVGhlIG1heGltdW0gem9vbSBsZXZlbCB0byBhbGxvdyB3aGVuIHRoZSBjYW1lcmEgd291bGQgdHJhbnNpdGlvbiB0byB0aGUgc3BlY2lmaWVkIGJvdW5kcy5cbiAgICAgKiBAcmV0dXJucyB7Q2FtZXJhT3B0aW9ucyB8IHZvaWR9IElmIG1hcCBpcyBhYmxlIHRvIGZpdCB0byBwcm92aWRlZCBib3VuZHMsIHJldHVybnMgYENhbWVyYU9wdGlvbnNgIHdpdGhcbiAgICAgKiAgICAgIGBjZW50ZXJgLCBgem9vbWAsIGFuZCBgYmVhcmluZ2AuIElmIG1hcCBpcyB1bmFibGUgdG8gZml0LCBtZXRob2Qgd2lsbCB3YXJuIGFuZCByZXR1cm4gdW5kZWZpbmVkLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIGJib3ggPSBbWy03OSwgNDNdLCBbLTczLCA0NV1dO1xuICAgICAqIHZhciBuZXdDYW1lcmFUcmFuc2Zvcm0gPSBtYXAuY2FtZXJhRm9yQm91bmRzKGJib3gsIHtcbiAgICAgKiAgIHBhZGRpbmc6IHt0b3A6IDEwLCBib3R0b206MjUsIGxlZnQ6IDE1LCByaWdodDogNX1cbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICBjYW1lcmFGb3JCb3VuZHMoYm91bmRzOiBMbmdMYXRCb3VuZHNMaWtlLCBvcHRpb25zPzogQ2FtZXJhT3B0aW9ucyk6IHZvaWQgfCBDYW1lcmFPcHRpb25zICYgQW5pbWF0aW9uT3B0aW9ucyB7XG4gICAgICAgIGJvdW5kcyA9IExuZ0xhdEJvdW5kcy5jb252ZXJ0KGJvdW5kcyk7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYW1lcmFGb3JCb3hBbmRCZWFyaW5nKGJvdW5kcy5nZXROb3J0aFdlc3QoKSwgYm91bmRzLmdldFNvdXRoRWFzdCgpLCAwLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGNlbnRlciBvZiB0aGVzZSB0d28gcG9pbnRzIGluIHRoZSB2aWV3cG9ydCBhbmQgdXNlXG4gICAgICogdGhlIGhpZ2hlc3Qgem9vbSBsZXZlbCB1cCB0byBhbmQgaW5jbHVkaW5nIGBNYXAjZ2V0TWF4Wm9vbSgpYCB0aGF0IGZpdHNcbiAgICAgKiB0aGUgcG9pbnRzIGluIHRoZSB2aWV3cG9ydCBhdCB0aGUgc3BlY2lmaWVkIGJlYXJpbmcuXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcGFyYW0ge0xuZ0xhdExpa2V9IHAwIEZpcnN0IHBvaW50XG4gICAgICogQHBhcmFtIHtMbmdMYXRMaWtlfSBwMSBTZWNvbmQgcG9pbnRcbiAgICAgKiBAcGFyYW0gYmVhcmluZyBEZXNpcmVkIG1hcCBiZWFyaW5nIGF0IGVuZCBvZiBhbmltYXRpb24sIGluIGRlZ3JlZXNcbiAgICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgICAqIEBwYXJhbSB7bnVtYmVyIHwgUGFkZGluZ09wdGlvbnN9IFtvcHRpb25zLnBhZGRpbmddIFRoZSBhbW91bnQgb2YgcGFkZGluZyBpbiBwaXhlbHMgdG8gYWRkIHRvIHRoZSBnaXZlbiBib3VuZHMuXG4gICAgICogQHBhcmFtIHtQb2ludExpa2V9IFtvcHRpb25zLm9mZnNldD1bMCwgMF1dIFRoZSBjZW50ZXIgb2YgdGhlIGdpdmVuIGJvdW5kcyByZWxhdGl2ZSB0byB0aGUgbWFwJ3MgY2VudGVyLCBtZWFzdXJlZCBpbiBwaXhlbHMuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1heFpvb21dIFRoZSBtYXhpbXVtIHpvb20gbGV2ZWwgdG8gYWxsb3cgd2hlbiB0aGUgY2FtZXJhIHdvdWxkIHRyYW5zaXRpb24gdG8gdGhlIHNwZWNpZmllZCBib3VuZHMuXG4gICAgICogQHJldHVybnMge0NhbWVyYU9wdGlvbnMgfCB2b2lkfSBJZiBtYXAgaXMgYWJsZSB0byBmaXQgdG8gcHJvdmlkZWQgYm91bmRzLCByZXR1cm5zIGBDYW1lcmFPcHRpb25zYCB3aXRoXG4gICAgICogICAgICBgY2VudGVyYCwgYHpvb21gLCBhbmQgYGJlYXJpbmdgLiBJZiBtYXAgaXMgdW5hYmxlIHRvIGZpdCwgbWV0aG9kIHdpbGwgd2FybiBhbmQgcmV0dXJuIHVuZGVmaW5lZC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIHAwID0gWy03OSwgNDNdO1xuICAgICAqIHZhciBwMSA9IFstNzMsIDQ1XTtcbiAgICAgKiB2YXIgYmVhcmluZyA9IDkwO1xuICAgICAqIHZhciBuZXdDYW1lcmFUcmFuc2Zvcm0gPSBtYXAuX2NhbWVyYUZvckJveEFuZEJlYXJpbmcocDAsIHAxLCBiZWFyaW5nLCB7XG4gICAgICogICBwYWRkaW5nOiB7dG9wOiAxMCwgYm90dG9tOjI1LCBsZWZ0OiAxNSwgcmlnaHQ6IDV9XG4gICAgICogfSk7XG4gICAgICovXG4gICAgX2NhbWVyYUZvckJveEFuZEJlYXJpbmcocDA6IExuZ0xhdExpa2UsIHAxOiBMbmdMYXRMaWtlLCBiZWFyaW5nOiBudW1iZXIsIG9wdGlvbnM/OiBDYW1lcmFPcHRpb25zKTogdm9pZCB8IENhbWVyYU9wdGlvbnMgJiBBbmltYXRpb25PcHRpb25zIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdFBhZGRpbmcgPSB7XG4gICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICBib3R0b206IDAsXG4gICAgICAgICAgICByaWdodDogMCxcbiAgICAgICAgICAgIGxlZnQ6IDBcbiAgICAgICAgfTtcbiAgICAgICAgb3B0aW9ucyA9IGV4dGVuZCh7XG4gICAgICAgICAgICBwYWRkaW5nOiBkZWZhdWx0UGFkZGluZyxcbiAgICAgICAgICAgIG9mZnNldDogWzAsIDBdLFxuICAgICAgICAgICAgbWF4Wm9vbTogdGhpcy50cmFuc2Zvcm0ubWF4Wm9vbVxuICAgICAgICB9LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMucGFkZGluZyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBvcHRpb25zLnBhZGRpbmc7XG4gICAgICAgICAgICBvcHRpb25zLnBhZGRpbmcgPSB7XG4gICAgICAgICAgICAgICAgdG9wOiBwLFxuICAgICAgICAgICAgICAgIGJvdHRvbTogcCxcbiAgICAgICAgICAgICAgICByaWdodDogcCxcbiAgICAgICAgICAgICAgICBsZWZ0OiBwXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgb3B0aW9ucy5wYWRkaW5nID0gZXh0ZW5kKGRlZmF1bHRQYWRkaW5nLCBvcHRpb25zLnBhZGRpbmcpO1xuICAgICAgICBjb25zdCB0ciA9IHRoaXMudHJhbnNmb3JtO1xuICAgICAgICBjb25zdCBlZGdlUGFkZGluZyA9IHRyLnBhZGRpbmc7XG5cbiAgICAgICAgLy8gV2Ugd2FudCB0byBjYWxjdWxhdGUgdGhlIHVwcGVyIHJpZ2h0IGFuZCBsb3dlciBsZWZ0IG9mIHRoZSBib3ggZGVmaW5lZCBieSBwMCBhbmQgcDFcbiAgICAgICAgLy8gaW4gYSBjb29yZGluYXRlIHN5c3RlbSByb3RhdGUgdG8gbWF0Y2ggdGhlIGRlc3RpbmF0aW9uIGJlYXJpbmcuXG4gICAgICAgIGNvbnN0IHAwd29ybGQgPSB0ci5wcm9qZWN0KExuZ0xhdC5jb252ZXJ0KHAwKSk7XG4gICAgICAgIGNvbnN0IHAxd29ybGQgPSB0ci5wcm9qZWN0KExuZ0xhdC5jb252ZXJ0KHAxKSk7XG4gICAgICAgIGNvbnN0IHAwcm90YXRlZCA9IHAwd29ybGQucm90YXRlKC1iZWFyaW5nICogTWF0aC5QSSAvIDE4MCk7XG4gICAgICAgIGNvbnN0IHAxcm90YXRlZCA9IHAxd29ybGQucm90YXRlKC1iZWFyaW5nICogTWF0aC5QSSAvIDE4MCk7XG5cbiAgICAgICAgY29uc3QgdXBwZXJSaWdodCA9IG5ldyBQb2ludChNYXRoLm1heChwMHJvdGF0ZWQueCwgcDFyb3RhdGVkLngpLCBNYXRoLm1heChwMHJvdGF0ZWQueSwgcDFyb3RhdGVkLnkpKTtcbiAgICAgICAgY29uc3QgbG93ZXJMZWZ0ID0gbmV3IFBvaW50KE1hdGgubWluKHAwcm90YXRlZC54LCBwMXJvdGF0ZWQueCksIE1hdGgubWluKHAwcm90YXRlZC55LCBwMXJvdGF0ZWQueSkpO1xuXG4gICAgICAgIC8vIENhbGN1bGF0ZSB6b29tOiBjb25zaWRlciB0aGUgb3JpZ2luYWwgYmJveCBhbmQgcGFkZGluZy5cbiAgICAgICAgY29uc3Qgc2l6ZSA9IHVwcGVyUmlnaHQuc3ViKGxvd2VyTGVmdCk7XG4gICAgICAgIGNvbnN0IHNjYWxlWCA9ICh0ci53aWR0aCAtIChlZGdlUGFkZGluZy5sZWZ0ICsgZWRnZVBhZGRpbmcucmlnaHQgKyBvcHRpb25zLnBhZGRpbmcubGVmdCArIG9wdGlvbnMucGFkZGluZy5yaWdodCkpIC8gc2l6ZS54O1xuICAgICAgICBjb25zdCBzY2FsZVkgPSAodHIuaGVpZ2h0IC0gKGVkZ2VQYWRkaW5nLnRvcCArIGVkZ2VQYWRkaW5nLmJvdHRvbSArIG9wdGlvbnMucGFkZGluZy50b3AgKyBvcHRpb25zLnBhZGRpbmcuYm90dG9tKSkgLyBzaXplLnk7XG5cbiAgICAgICAgaWYgKHNjYWxlWSA8IDAgfHwgc2NhbGVYIDwgMCkge1xuICAgICAgICAgICAgd2Fybk9uY2UoXG4gICAgICAgICAgICAgICAgJ01hcCBjYW5ub3QgZml0IHdpdGhpbiBjYW52YXMgd2l0aCB0aGUgZ2l2ZW4gYm91bmRzLCBwYWRkaW5nLCBhbmQvb3Igb2Zmc2V0LidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB6b29tID0gTWF0aC5taW4odHIuc2NhbGVab29tKHRyLnNjYWxlICogTWF0aC5taW4oc2NhbGVYLCBzY2FsZVkpKSwgb3B0aW9ucy5tYXhab29tKTtcblxuICAgICAgICAvLyBDYWxjdWxhdGUgY2VudGVyOiBhcHBseSB0aGUgem9vbSwgdGhlIGNvbmZpZ3VyZWQgb2Zmc2V0LCBhcyB3ZWxsIGFzIG9mZnNldCB0aGF0IGV4aXN0cyBhcyBhIHJlc3VsdCBvZiBwYWRkaW5nLlxuICAgICAgICBjb25zdCBvZmZzZXQgPSBQb2ludC5jb252ZXJ0KG9wdGlvbnMub2Zmc2V0KTtcbiAgICAgICAgY29uc3QgcGFkZGluZ09mZnNldFggPSAob3B0aW9ucy5wYWRkaW5nLmxlZnQgLSBvcHRpb25zLnBhZGRpbmcucmlnaHQpIC8gMjtcbiAgICAgICAgY29uc3QgcGFkZGluZ09mZnNldFkgPSAob3B0aW9ucy5wYWRkaW5nLnRvcCAtIG9wdGlvbnMucGFkZGluZy5ib3R0b20pIC8gMjtcbiAgICAgICAgY29uc3Qgb2Zmc2V0QXRJbml0aWFsWm9vbSA9IG5ldyBQb2ludChvZmZzZXQueCArIHBhZGRpbmdPZmZzZXRYLCBvZmZzZXQueSArIHBhZGRpbmdPZmZzZXRZKTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0QXRGaW5hbFpvb20gPSBvZmZzZXRBdEluaXRpYWxab29tLm11bHQodHIuc2NhbGUgLyB0ci56b29tU2NhbGUoem9vbSkpO1xuXG4gICAgICAgIGNvbnN0IGNlbnRlciA9ICB0ci51bnByb2plY3QocDB3b3JsZC5hZGQocDF3b3JsZCkuZGl2KDIpLnN1YihvZmZzZXRBdEZpbmFsWm9vbSkpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjZW50ZXIsXG4gICAgICAgICAgICB6b29tLFxuICAgICAgICAgICAgYmVhcmluZ1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhbnMgYW5kIHpvb21zIHRoZSBtYXAgdG8gY29udGFpbiBpdHMgdmlzaWJsZSBhcmVhIHdpdGhpbiB0aGUgc3BlY2lmaWVkIGdlb2dyYXBoaWNhbCBib3VuZHMuXG4gICAgICogVGhpcyBmdW5jdGlvbiB3aWxsIGFsc28gcmVzZXQgdGhlIG1hcCdzIGJlYXJpbmcgdG8gMCBpZiBiZWFyaW5nIGlzIG5vbnplcm8uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSBib3VuZHMgQ2VudGVyIHRoZXNlIGJvdW5kcyBpbiB0aGUgdmlld3BvcnQgYW5kIHVzZSB0aGUgaGlnaGVzdFxuICAgICAqICAgICAgem9vbSBsZXZlbCB1cCB0byBhbmQgaW5jbHVkaW5nIGBNYXAjZ2V0TWF4Wm9vbSgpYCB0aGF0IGZpdHMgdGhlbSBpbiB0aGUgdmlld3BvcnQuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBPcHRpb25zIHN1cHBvcnRzIGFsbCBwcm9wZXJ0aWVzIGZyb20ge0BsaW5rIEFuaW1hdGlvbk9wdGlvbnN9IGFuZCB7QGxpbmsgQ2FtZXJhT3B0aW9uc30gaW4gYWRkaXRpb24gdG8gdGhlIGZpZWxkcyBiZWxvdy5cbiAgICAgKiBAcGFyYW0ge251bWJlciB8IFBhZGRpbmdPcHRpb25zfSBbb3B0aW9ucy5wYWRkaW5nXSBUaGUgYW1vdW50IG9mIHBhZGRpbmcgaW4gcGl4ZWxzIHRvIGFkZCB0byB0aGUgZ2l2ZW4gYm91bmRzLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubGluZWFyPWZhbHNlXSBJZiBgdHJ1ZWAsIHRoZSBtYXAgdHJhbnNpdGlvbnMgdXNpbmdcbiAgICAgKiAgICAge0BsaW5rIE1hcCNlYXNlVG99LiBJZiBgZmFsc2VgLCB0aGUgbWFwIHRyYW5zaXRpb25zIHVzaW5nIHtAbGluayBNYXAjZmx5VG99LiBTZWVcbiAgICAgKiAgICAgdGhvc2UgZnVuY3Rpb25zIGFuZCB7QGxpbmsgQW5pbWF0aW9uT3B0aW9uc30gZm9yIGluZm9ybWF0aW9uIGFib3V0IG9wdGlvbnMgYXZhaWxhYmxlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLmVhc2luZ10gQW4gZWFzaW5nIGZ1bmN0aW9uIGZvciB0aGUgYW5pbWF0ZWQgdHJhbnNpdGlvbi4gU2VlIHtAbGluayBBbmltYXRpb25PcHRpb25zfS5cbiAgICAgKiBAcGFyYW0ge1BvaW50TGlrZX0gW29wdGlvbnMub2Zmc2V0PVswLCAwXV0gVGhlIGNlbnRlciBvZiB0aGUgZ2l2ZW4gYm91bmRzIHJlbGF0aXZlIHRvIHRoZSBtYXAncyBjZW50ZXIsIG1lYXN1cmVkIGluIHBpeGVscy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4Wm9vbV0gVGhlIG1heGltdW0gem9vbSBsZXZlbCB0byBhbGxvdyB3aGVuIHRoZSBtYXAgdmlldyB0cmFuc2l0aW9ucyB0byB0aGUgc3BlY2lmaWVkIGJvdW5kcy5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW2V2ZW50RGF0YV0gQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVlbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2Bcblx0ICogQGV4YW1wbGVcbiAgICAgKiB2YXIgYmJveCA9IFtbLTc5LCA0M10sIFstNzMsIDQ1XV07XG4gICAgICogbWFwLmZpdEJvdW5kcyhiYm94LCB7XG4gICAgICogICBwYWRkaW5nOiB7dG9wOiAxMCwgYm90dG9tOjI1LCBsZWZ0OiAxNSwgcmlnaHQ6IDV9XG4gICAgICogfSk7XG4gICAgICogQHNlZSBbRml0IGEgbWFwIHRvIGEgYm91bmRpbmcgYm94XShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2ZpdGJvdW5kcy8pXG4gICAgICovXG4gICAgZml0Qm91bmRzKGJvdW5kczogTG5nTGF0Qm91bmRzTGlrZSwgb3B0aW9ucz86IEFuaW1hdGlvbk9wdGlvbnMgJiBDYW1lcmFPcHRpb25zLCBldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpdEludGVybmFsKFxuICAgICAgICAgICAgdGhpcy5jYW1lcmFGb3JCb3VuZHMoYm91bmRzLCBvcHRpb25zKSxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBldmVudERhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhbnMsIHJvdGF0ZXMgYW5kIHpvb21zIHRoZSBtYXAgdG8gdG8gZml0IHRoZSBib3ggbWFkZSBieSBwb2ludHMgcDAgYW5kIHAxXG4gICAgICogb25jZSB0aGUgbWFwIGlzIHJvdGF0ZWQgdG8gdGhlIHNwZWNpZmllZCBiZWFyaW5nLiBUbyB6b29tIHdpdGhvdXQgcm90YXRpbmcsXG4gICAgICogcGFzcyBpbiB0aGUgY3VycmVudCBtYXAgYmVhcmluZy5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIHAwIEZpcnN0IHBvaW50IG9uIHNjcmVlbiwgaW4gcGl4ZWwgY29vcmRpbmF0ZXNcbiAgICAgKiBAcGFyYW0gcDEgU2Vjb25kIHBvaW50IG9uIHNjcmVlbiwgaW4gcGl4ZWwgY29vcmRpbmF0ZXNcbiAgICAgKiBAcGFyYW0gYmVhcmluZyBEZXNpcmVkIG1hcCBiZWFyaW5nIGF0IGVuZCBvZiBhbmltYXRpb24sIGluIGRlZ3JlZXNcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIG9iamVjdFxuICAgICAqIEBwYXJhbSB7bnVtYmVyIHwgUGFkZGluZ09wdGlvbnN9IFtvcHRpb25zLnBhZGRpbmddIFRoZSBhbW91bnQgb2YgcGFkZGluZyBpbiBwaXhlbHMgdG8gYWRkIHRvIHRoZSBnaXZlbiBib3VuZHMuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5saW5lYXI9ZmFsc2VdIElmIGB0cnVlYCwgdGhlIG1hcCB0cmFuc2l0aW9ucyB1c2luZ1xuICAgICAqICAgICB7QGxpbmsgTWFwI2Vhc2VUb30uIElmIGBmYWxzZWAsIHRoZSBtYXAgdHJhbnNpdGlvbnMgdXNpbmcge0BsaW5rIE1hcCNmbHlUb30uIFNlZVxuICAgICAqICAgICB0aG9zZSBmdW5jdGlvbnMgYW5kIHtAbGluayBBbmltYXRpb25PcHRpb25zfSBmb3IgaW5mb3JtYXRpb24gYWJvdXQgb3B0aW9ucyBhdmFpbGFibGUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMuZWFzaW5nXSBBbiBlYXNpbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRlZCB0cmFuc2l0aW9uLiBTZWUge0BsaW5rIEFuaW1hdGlvbk9wdGlvbnN9LlxuICAgICAqIEBwYXJhbSB7UG9pbnRMaWtlfSBbb3B0aW9ucy5vZmZzZXQ9WzAsIDBdXSBUaGUgY2VudGVyIG9mIHRoZSBnaXZlbiBib3VuZHMgcmVsYXRpdmUgdG8gdGhlIG1hcCdzIGNlbnRlciwgbWVhc3VyZWQgaW4gcGl4ZWxzLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhab29tXSBUaGUgbWF4aW11bSB6b29tIGxldmVsIHRvIGFsbG93IHdoZW4gdGhlIG1hcCB2aWV3IHRyYW5zaXRpb25zIHRvIHRoZSBzcGVjaWZpZWQgYm91bmRzLlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVlbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2Bcblx0ICogQGV4YW1wbGVcbiAgICAgKiB2YXIgcDAgPSBbMjIwLCA0MDBdO1xuICAgICAqIHZhciBwMSA9IFs1MDAsIDkwMF07XG4gICAgICogbWFwLmZpdFNjcmVlbkNvb3JkaW5hdGVzKHAwLCBwMSwgbWFwLmdldEJlYXJpbmcoKSwge1xuICAgICAqICAgcGFkZGluZzoge3RvcDogMTAsIGJvdHRvbToyNSwgbGVmdDogMTUsIHJpZ2h0OiA1fVxuICAgICAqIH0pO1xuICAgICAqIEBzZWUgW1VzZWQgYnkgQm94Wm9vbUhhbmRsZXJdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2FwaS8jYm94em9vbWhhbmRsZXIpXG4gICAgICovXG4gICAgZml0U2NyZWVuQ29vcmRpbmF0ZXMocDA6IFBvaW50TGlrZSwgcDE6IFBvaW50TGlrZSwgYmVhcmluZzogbnVtYmVyLCBvcHRpb25zPzogQW5pbWF0aW9uT3B0aW9ucyAmIENhbWVyYU9wdGlvbnMsIGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZml0SW50ZXJuYWwoXG4gICAgICAgICAgICB0aGlzLl9jYW1lcmFGb3JCb3hBbmRCZWFyaW5nKFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtLnBvaW50TG9jYXRpb24oUG9pbnQuY29udmVydChwMCkpLFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtLnBvaW50TG9jYXRpb24oUG9pbnQuY29udmVydChwMSkpLFxuICAgICAgICAgICAgICAgIGJlYXJpbmcsXG4gICAgICAgICAgICAgICAgb3B0aW9ucyksXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgZXZlbnREYXRhKTtcbiAgICB9XG5cbiAgICBfZml0SW50ZXJuYWwoY2FsY3VsYXRlZE9wdGlvbnM/OiBDYW1lcmFPcHRpb25zICYgQW5pbWF0aW9uT3B0aW9ucywgb3B0aW9ucz86IEFuaW1hdGlvbk9wdGlvbnMgJiBDYW1lcmFPcHRpb25zLCBldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgLy8gY2FtZXJhRm9yQm91bmRzIHdhcm5zICsgcmV0dXJucyB1bmRlZmluZWQgaWYgdW5hYmxlIHRvIGZpdDpcbiAgICAgICAgaWYgKCFjYWxjdWxhdGVkT3B0aW9ucykgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgb3B0aW9ucyA9IGV4dGVuZChjYWxjdWxhdGVkT3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIC8vIEV4cGxpY3RseSByZW1vdmUgdGhlIHBhZGRpbmcgZmllbGQgYmVjYXVzZSwgY2FsY3VsYXRlZE9wdGlvbnMgYWxyZWFkeSBhY2NvdW50cyBmb3IgcGFkZGluZyBieSBzZXR0aW5nIHpvb20gYW5kIGNlbnRlciBhY2NvcmRpbmdseS5cbiAgICAgICAgZGVsZXRlIG9wdGlvbnMucGFkZGluZztcblxuICAgICAgICByZXR1cm4gb3B0aW9ucy5saW5lYXIgP1xuICAgICAgICAgICAgdGhpcy5lYXNlVG8ob3B0aW9ucywgZXZlbnREYXRhKSA6XG4gICAgICAgICAgICB0aGlzLmZseVRvKG9wdGlvbnMsIGV2ZW50RGF0YSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hhbmdlcyBhbnkgY29tYmluYXRpb24gb2YgY2VudGVyLCB6b29tLCBiZWFyaW5nLCBhbmQgcGl0Y2gsIHdpdGhvdXRcbiAgICAgKiBhbiBhbmltYXRlZCB0cmFuc2l0aW9uLiBUaGUgbWFwIHdpbGwgcmV0YWluIGl0cyBjdXJyZW50IHZhbHVlcyBmb3IgYW55XG4gICAgICogZGV0YWlscyBub3Qgc3BlY2lmaWVkIGluIGBvcHRpb25zYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBvYmplY3RcbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhZGRlZCB0byBldmVudCBvYmplY3RzIG9mIGV2ZW50cyB0cmlnZ2VyZWQgYnkgdGhpcyBtZXRob2QuXG4gICAgICogQGZpcmVzIG1vdmVzdGFydFxuICAgICAqIEBmaXJlcyB6b29tc3RhcnRcbiAgICAgKiBAZmlyZXMgcGl0Y2hzdGFydFxuICAgICAqIEBmaXJlcyByb3RhdGVcbiAgICAgKiBAZmlyZXMgbW92ZVxuICAgICAqIEBmaXJlcyB6b29tXG4gICAgICogQGZpcmVzIHBpdGNoXG4gICAgICogQGZpcmVzIG1vdmVlbmRcbiAgICAgKiBAZmlyZXMgem9vbWVuZFxuICAgICAqIEBmaXJlcyBwaXRjaGVuZFxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8ganVtcCB0byBjb29yZGluYXRlcyBhdCBjdXJyZW50IHpvb21cbiAgICAgKiBtYXAuanVtcFRvKHtjZW50ZXI6IFswLCAwXX0pO1xuICAgICAqIC8vIGp1bXAgd2l0aCB6b29tLCBwaXRjaCwgYW5kIGJlYXJpbmcgb3B0aW9uc1xuICAgICAqIG1hcC5qdW1wVG8oe1xuICAgICAqICAgY2VudGVyOiBbMCwgMF0sXG4gICAgICogICB6b29tOiA4LFxuICAgICAqICAgcGl0Y2g6IDQ1LFxuICAgICAqICAgYmVhcmluZzogOTBcbiAgICAgKiB9KTtcbiAgICAgKiBAc2VlIFtKdW1wIHRvIGEgc2VyaWVzIG9mIGxvY2F0aW9uc10oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvanVtcC10by8pXG4gICAgICogQHNlZSBbVXBkYXRlIGEgZmVhdHVyZSBpbiByZWFsdGltZV0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvbGl2ZS11cGRhdGUtZmVhdHVyZS8pXG4gICAgICovXG4gICAganVtcFRvKG9wdGlvbnM6IENhbWVyYU9wdGlvbnMsIGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICB0aGlzLnN0b3AoKTtcblxuICAgICAgICBjb25zdCB0ciA9IHRoaXMudHJhbnNmb3JtO1xuICAgICAgICBsZXQgem9vbUNoYW5nZWQgPSBmYWxzZSxcbiAgICAgICAgICAgIGJlYXJpbmdDaGFuZ2VkID0gZmFsc2UsXG4gICAgICAgICAgICBwaXRjaENoYW5nZWQgPSBmYWxzZTtcblxuICAgICAgICBpZiAoJ3pvb20nIGluIG9wdGlvbnMgJiYgdHIuem9vbSAhPT0gK29wdGlvbnMuem9vbSkge1xuICAgICAgICAgICAgem9vbUNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgdHIuem9vbSA9ICtvcHRpb25zLnpvb207XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5jZW50ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdHIuY2VudGVyID0gTG5nTGF0LmNvbnZlcnQob3B0aW9ucy5jZW50ZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdiZWFyaW5nJyBpbiBvcHRpb25zICYmIHRyLmJlYXJpbmcgIT09ICtvcHRpb25zLmJlYXJpbmcpIHtcbiAgICAgICAgICAgIGJlYXJpbmdDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRyLmJlYXJpbmcgPSArb3B0aW9ucy5iZWFyaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdwaXRjaCcgaW4gb3B0aW9ucyAmJiB0ci5waXRjaCAhPT0gK29wdGlvbnMucGl0Y2gpIHtcbiAgICAgICAgICAgIHBpdGNoQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICB0ci5waXRjaCA9ICtvcHRpb25zLnBpdGNoO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMucGFkZGluZyAhPSBudWxsICYmICF0ci5pc1BhZGRpbmdFcXVhbChvcHRpb25zLnBhZGRpbmcpKSB7XG4gICAgICAgICAgICB0ci5wYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnbW92ZXN0YXJ0JywgZXZlbnREYXRhKSlcbiAgICAgICAgICAgIC5maXJlKG5ldyBFdmVudCgnbW92ZScsIGV2ZW50RGF0YSkpO1xuXG4gICAgICAgIGlmICh6b29tQ2hhbmdlZCkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnem9vbXN0YXJ0JywgZXZlbnREYXRhKSlcbiAgICAgICAgICAgICAgICAuZmlyZShuZXcgRXZlbnQoJ3pvb20nLCBldmVudERhdGEpKVxuICAgICAgICAgICAgICAgIC5maXJlKG5ldyBFdmVudCgnem9vbWVuZCcsIGV2ZW50RGF0YSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJlYXJpbmdDaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdyb3RhdGVzdGFydCcsIGV2ZW50RGF0YSkpXG4gICAgICAgICAgICAgICAgLmZpcmUobmV3IEV2ZW50KCdyb3RhdGUnLCBldmVudERhdGEpKVxuICAgICAgICAgICAgICAgIC5maXJlKG5ldyBFdmVudCgncm90YXRlZW5kJywgZXZlbnREYXRhKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGl0Y2hDaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdwaXRjaHN0YXJ0JywgZXZlbnREYXRhKSlcbiAgICAgICAgICAgICAgICAuZmlyZShuZXcgRXZlbnQoJ3BpdGNoJywgZXZlbnREYXRhKSlcbiAgICAgICAgICAgICAgICAuZmlyZShuZXcgRXZlbnQoJ3BpdGNoZW5kJywgZXZlbnREYXRhKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5maXJlKG5ldyBFdmVudCgnbW92ZWVuZCcsIGV2ZW50RGF0YSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoYW5nZXMgYW55IGNvbWJpbmF0aW9uIG9mIGNlbnRlciwgem9vbSwgYmVhcmluZywgcGl0Y2gsIGFuZCBwYWRkaW5nIHdpdGggYW4gYW5pbWF0ZWQgdHJhbnNpdGlvblxuICAgICAqIGJldHdlZW4gb2xkIGFuZCBuZXcgdmFsdWVzLiBUaGUgbWFwIHdpbGwgcmV0YWluIGl0cyBjdXJyZW50IHZhbHVlcyBmb3IgYW55XG4gICAgICogZGV0YWlscyBub3Qgc3BlY2lmaWVkIGluIGBvcHRpb25zYC5cbiAgICAgKlxuICAgICAqIE5vdGU6IFRoZSB0cmFuc2l0aW9uIHdpbGwgaGFwcGVuIGluc3RhbnRseSBpZiB0aGUgdXNlciBoYXMgZW5hYmxlZFxuICAgICAqIHRoZSBgcmVkdWNlZCBtb3Rpb25gIGFjY2VzaWJpbGl0eSBmZWF0dXJlIGVuYWJsZWQgaW4gdGhlaXIgb3BlcmF0aW5nIHN5c3RlbSxcbiAgICAgKiB1bmxlc3MgJ29wdGlvbnMnIGluY2x1ZGVzIGBlc3NlbnRpYWw6IHRydWVgLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGRlc2NyaWJpbmcgdGhlIGRlc3RpbmF0aW9uIGFuZCBhbmltYXRpb24gb2YgdGhlIHRyYW5zaXRpb24uXG4gICAgICogICAgICAgICAgICBBY2NlcHRzIHtAbGluayBDYW1lcmFPcHRpb25zfSBhbmQge0BsaW5rIEFuaW1hdGlvbk9wdGlvbnN9LlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIHpvb21zdGFydFxuICAgICAqIEBmaXJlcyBwaXRjaHN0YXJ0XG4gICAgICogQGZpcmVzIHJvdGF0ZVxuICAgICAqIEBmaXJlcyBtb3ZlXG4gICAgICogQGZpcmVzIHpvb21cbiAgICAgKiBAZmlyZXMgcGl0Y2hcbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEBmaXJlcyB6b29tZW5kXG4gICAgICogQGZpcmVzIHBpdGNoZW5kXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICogQHNlZSBbTmF2aWdhdGUgdGhlIG1hcCB3aXRoIGdhbWUtbGlrZSBjb250cm9sc10oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9nYW1lLWNvbnRyb2xzLylcbiAgICAgKi9cbiAgICBlYXNlVG8ob3B0aW9uczogQ2FtZXJhT3B0aW9ucyAmIEFuaW1hdGlvbk9wdGlvbnMgJiB7ZWFzZUlkPzogc3RyaW5nfSwgZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuX3N0b3AoZmFsc2UsIG9wdGlvbnMuZWFzZUlkKTtcblxuICAgICAgICBvcHRpb25zID0gZXh0ZW5kKHtcbiAgICAgICAgICAgIG9mZnNldDogWzAsIDBdLFxuICAgICAgICAgICAgZHVyYXRpb246IDUwMCxcbiAgICAgICAgICAgIGVhc2luZzogZGVmYXVsdEVhc2luZ1xuICAgICAgICB9LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAob3B0aW9ucy5hbmltYXRlID09PSBmYWxzZSB8fCAoIW9wdGlvbnMuZXNzZW50aWFsICYmIGJyb3dzZXIucHJlZmVyc1JlZHVjZWRNb3Rpb24pKSBvcHRpb25zLmR1cmF0aW9uID0gMDtcblxuICAgICAgICBjb25zdCB0ciA9IHRoaXMudHJhbnNmb3JtLFxuICAgICAgICAgICAgc3RhcnRab29tID0gdGhpcy5nZXRab29tKCksXG4gICAgICAgICAgICBzdGFydEJlYXJpbmcgPSB0aGlzLmdldEJlYXJpbmcoKSxcbiAgICAgICAgICAgIHN0YXJ0UGl0Y2ggPSB0aGlzLmdldFBpdGNoKCksXG4gICAgICAgICAgICBzdGFydFBhZGRpbmcgPSB0aGlzLmdldFBhZGRpbmcoKSxcblxuICAgICAgICAgICAgem9vbSA9ICd6b29tJyBpbiBvcHRpb25zID8gK29wdGlvbnMuem9vbSA6IHN0YXJ0Wm9vbSxcbiAgICAgICAgICAgIGJlYXJpbmcgPSAnYmVhcmluZycgaW4gb3B0aW9ucyA/IHRoaXMuX25vcm1hbGl6ZUJlYXJpbmcob3B0aW9ucy5iZWFyaW5nLCBzdGFydEJlYXJpbmcpIDogc3RhcnRCZWFyaW5nLFxuICAgICAgICAgICAgcGl0Y2ggPSAncGl0Y2gnIGluIG9wdGlvbnMgPyArb3B0aW9ucy5waXRjaCA6IHN0YXJ0UGl0Y2gsXG4gICAgICAgICAgICBwYWRkaW5nID0gJ3BhZGRpbmcnIGluIG9wdGlvbnMgPyBvcHRpb25zLnBhZGRpbmcgOiB0ci5wYWRkaW5nO1xuXG4gICAgICAgIGNvbnN0IG9mZnNldEFzUG9pbnQgPSBQb2ludC5jb252ZXJ0KG9wdGlvbnMub2Zmc2V0KTtcbiAgICAgICAgbGV0IHBvaW50QXRPZmZzZXQgPSB0ci5jZW50ZXJQb2ludC5hZGQob2Zmc2V0QXNQb2ludCk7XG4gICAgICAgIGNvbnN0IGxvY2F0aW9uQXRPZmZzZXQgPSB0ci5wb2ludExvY2F0aW9uKHBvaW50QXRPZmZzZXQpO1xuICAgICAgICBjb25zdCBjZW50ZXIgPSBMbmdMYXQuY29udmVydChvcHRpb25zLmNlbnRlciB8fCBsb2NhdGlvbkF0T2Zmc2V0KTtcbiAgICAgICAgdGhpcy5fbm9ybWFsaXplQ2VudGVyKGNlbnRlcik7XG5cbiAgICAgICAgY29uc3QgZnJvbSA9IHRyLnByb2plY3QobG9jYXRpb25BdE9mZnNldCk7XG4gICAgICAgIGNvbnN0IGRlbHRhID0gdHIucHJvamVjdChjZW50ZXIpLnN1Yihmcm9tKTtcbiAgICAgICAgY29uc3QgZmluYWxTY2FsZSA9IHRyLnpvb21TY2FsZSh6b29tIC0gc3RhcnRab29tKTtcblxuICAgICAgICBsZXQgYXJvdW5kLCBhcm91bmRQb2ludDtcblxuICAgICAgICBpZiAob3B0aW9ucy5hcm91bmQpIHtcbiAgICAgICAgICAgIGFyb3VuZCA9IExuZ0xhdC5jb252ZXJ0KG9wdGlvbnMuYXJvdW5kKTtcbiAgICAgICAgICAgIGFyb3VuZFBvaW50ID0gdHIubG9jYXRpb25Qb2ludChhcm91bmQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY3VycmVudGx5ID0ge1xuICAgICAgICAgICAgbW92aW5nOiB0aGlzLl9tb3ZpbmcsXG4gICAgICAgICAgICB6b29taW5nOiB0aGlzLl96b29taW5nLFxuICAgICAgICAgICAgcm90YXRpbmc6IHRoaXMuX3JvdGF0aW5nLFxuICAgICAgICAgICAgcGl0Y2hpbmc6IHRoaXMuX3BpdGNoaW5nXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fem9vbWluZyA9IHRoaXMuX3pvb21pbmcgfHwgKHpvb20gIT09IHN0YXJ0Wm9vbSk7XG4gICAgICAgIHRoaXMuX3JvdGF0aW5nID0gdGhpcy5fcm90YXRpbmcgfHwgKHN0YXJ0QmVhcmluZyAhPT0gYmVhcmluZyk7XG4gICAgICAgIHRoaXMuX3BpdGNoaW5nID0gdGhpcy5fcGl0Y2hpbmcgfHwgKHBpdGNoICE9PSBzdGFydFBpdGNoKTtcbiAgICAgICAgdGhpcy5fcGFkZGluZyA9ICF0ci5pc1BhZGRpbmdFcXVhbChwYWRkaW5nKTtcblxuICAgICAgICB0aGlzLl9lYXNlSWQgPSBvcHRpb25zLmVhc2VJZDtcbiAgICAgICAgdGhpcy5fcHJlcGFyZUVhc2UoZXZlbnREYXRhLCBvcHRpb25zLm5vTW92ZVN0YXJ0LCBjdXJyZW50bHkpO1xuXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9lYXNlRW5kVGltZW91dElEKTtcblxuICAgICAgICB0aGlzLl9lYXNlKChrKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5fem9vbWluZykge1xuICAgICAgICAgICAgICAgIHRyLnpvb20gPSBpbnRlcnBvbGF0ZShzdGFydFpvb20sIHpvb20sIGspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX3JvdGF0aW5nKSB7XG4gICAgICAgICAgICAgICAgdHIuYmVhcmluZyA9IGludGVycG9sYXRlKHN0YXJ0QmVhcmluZywgYmVhcmluZywgayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fcGl0Y2hpbmcpIHtcbiAgICAgICAgICAgICAgICB0ci5waXRjaCA9IGludGVycG9sYXRlKHN0YXJ0UGl0Y2gsIHBpdGNoLCBrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9wYWRkaW5nKSB7XG4gICAgICAgICAgICAgICAgdHIuaW50ZXJwb2xhdGVQYWRkaW5nKHN0YXJ0UGFkZGluZywgcGFkZGluZywgayk7XG4gICAgICAgICAgICAgICAgLy8gV2hlbiBwYWRkaW5nIGlzIGJlaW5nIGFwcGxpZWQsIFRyYW5zZm9ybSNjZW50ZXJQb2ludCBpcyBjaGFuZ2luZyBjb250aW5vdXNseSxcbiAgICAgICAgICAgICAgICAvLyB0aHVzIHdlIG5lZWQgdG8gcmVjYWxjdWxhdGUgb2Zmc2V0UG9pbnQgZXZlcnkgZnJhLGVcbiAgICAgICAgICAgICAgICBwb2ludEF0T2Zmc2V0ID0gdHIuY2VudGVyUG9pbnQuYWRkKG9mZnNldEFzUG9pbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYXJvdW5kKSB7XG4gICAgICAgICAgICAgICAgdHIuc2V0TG9jYXRpb25BdFBvaW50KGFyb3VuZCwgYXJvdW5kUG9pbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzY2FsZSA9IHRyLnpvb21TY2FsZSh0ci56b29tIC0gc3RhcnRab29tKTtcbiAgICAgICAgICAgICAgICBjb25zdCBiYXNlID0gem9vbSA+IHN0YXJ0Wm9vbSA/XG4gICAgICAgICAgICAgICAgICAgIE1hdGgubWluKDIsIGZpbmFsU2NhbGUpIDpcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5tYXgoMC41LCBmaW5hbFNjYWxlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGVlZHVwID0gTWF0aC5wb3coYmFzZSwgMSAtIGspO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NlbnRlciA9IHRyLnVucHJvamVjdChmcm9tLmFkZChkZWx0YS5tdWx0KGsgKiBzcGVlZHVwKSkubXVsdChzY2FsZSkpO1xuICAgICAgICAgICAgICAgIHRyLnNldExvY2F0aW9uQXRQb2ludCh0ci5yZW5kZXJXb3JsZENvcGllcyA/IG5ld0NlbnRlci53cmFwKCkgOiBuZXdDZW50ZXIsIHBvaW50QXRPZmZzZXQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9maXJlTW92ZUV2ZW50cyhldmVudERhdGEpO1xuXG4gICAgICAgIH0sIChpbnRlcnJ1cHRpbmdFYXNlSWQ/OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2FmdGVyRWFzZShldmVudERhdGEsIGludGVycnVwdGluZ0Vhc2VJZCk7XG4gICAgICAgIH0sIG9wdGlvbnMpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIF9wcmVwYXJlRWFzZShldmVudERhdGE/OiBPYmplY3QsIG5vTW92ZVN0YXJ0OiBib29sZWFuLCBjdXJyZW50bHk6IE9iamVjdCA9IHt9KSB7XG4gICAgICAgIHRoaXMuX21vdmluZyA9IHRydWU7XG5cbiAgICAgICAgaWYgKCFub01vdmVTdGFydCAmJiAhY3VycmVudGx5Lm1vdmluZykge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnbW92ZXN0YXJ0JywgZXZlbnREYXRhKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3pvb21pbmcgJiYgIWN1cnJlbnRseS56b29taW5nKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCd6b29tc3RhcnQnLCBldmVudERhdGEpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fcm90YXRpbmcgJiYgIWN1cnJlbnRseS5yb3RhdGluZykge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgncm90YXRlc3RhcnQnLCBldmVudERhdGEpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fcGl0Y2hpbmcgJiYgIWN1cnJlbnRseS5waXRjaGluZykge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgncGl0Y2hzdGFydCcsIGV2ZW50RGF0YSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2ZpcmVNb3ZlRXZlbnRzKGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdtb3ZlJywgZXZlbnREYXRhKSk7XG4gICAgICAgIGlmICh0aGlzLl96b29taW5nKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCd6b29tJywgZXZlbnREYXRhKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3JvdGF0aW5nKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdyb3RhdGUnLCBldmVudERhdGEpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fcGl0Y2hpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3BpdGNoJywgZXZlbnREYXRhKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfYWZ0ZXJFYXNlKGV2ZW50RGF0YT86IE9iamVjdCwgZWFzZUlkPzogc3RyaW5nKSB7XG4gICAgICAgIC8vIGlmIHRoaXMgZWFzaW5nIGlzIGJlaW5nIHN0b3BwZWQgdG8gc3RhcnQgYW5vdGhlciBlYXNpbmcgd2l0aFxuICAgICAgICAvLyB0aGUgc2FtZSBpZCB0aGVuIGRvbid0IGZpcmUgYW55IGV2ZW50cyB0byBhdm9pZCBleHRyYSBzdGFydC9zdG9wIGV2ZW50c1xuICAgICAgICBpZiAodGhpcy5fZWFzZUlkICYmIGVhc2VJZCAmJiB0aGlzLl9lYXNlSWQgPT09IGVhc2VJZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9lYXNlSWQ7XG5cbiAgICAgICAgY29uc3Qgd2FzWm9vbWluZyA9IHRoaXMuX3pvb21pbmc7XG4gICAgICAgIGNvbnN0IHdhc1JvdGF0aW5nID0gdGhpcy5fcm90YXRpbmc7XG4gICAgICAgIGNvbnN0IHdhc1BpdGNoaW5nID0gdGhpcy5fcGl0Y2hpbmc7XG4gICAgICAgIHRoaXMuX21vdmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl96b29taW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3JvdGF0aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3BpdGNoaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3BhZGRpbmcgPSBmYWxzZTtcblxuICAgICAgICBpZiAod2FzWm9vbWluZykge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnem9vbWVuZCcsIGV2ZW50RGF0YSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh3YXNSb3RhdGluZykge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgncm90YXRlZW5kJywgZXZlbnREYXRhKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdhc1BpdGNoaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdwaXRjaGVuZCcsIGV2ZW50RGF0YSkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ21vdmVlbmQnLCBldmVudERhdGEpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGFuZ2VzIGFueSBjb21iaW5hdGlvbiBvZiBjZW50ZXIsIHpvb20sIGJlYXJpbmcsIGFuZCBwaXRjaCwgYW5pbWF0aW5nIHRoZSB0cmFuc2l0aW9uIGFsb25nIGEgY3VydmUgdGhhdFxuICAgICAqIGV2b2tlcyBmbGlnaHQuIFRoZSBhbmltYXRpb24gc2VhbWxlc3NseSBpbmNvcnBvcmF0ZXMgem9vbWluZyBhbmQgcGFubmluZyB0byBoZWxwXG4gICAgICogdGhlIHVzZXIgbWFpbnRhaW4gaGVyIGJlYXJpbmdzIGV2ZW4gYWZ0ZXIgdHJhdmVyc2luZyBhIGdyZWF0IGRpc3RhbmNlLlxuICAgICAqXG4gICAgICogTm90ZTogVGhlIGFuaW1hdGlvbiB3aWxsIGJlIHNraXBwZWQsIGFuZCB0aGlzIHdpbGwgYmVoYXZlIGVxdWl2YWxlbnRseSB0byBganVtcFRvYFxuICAgICAqIGlmIHRoZSB1c2VyIGhhcyB0aGUgYHJlZHVjZWQgbW90aW9uYCBhY2Nlc2liaWxpdHkgZmVhdHVyZSBlbmFibGVkIGluIHRoZWlyIG9wZXJhdGluZyBzeXN0ZW0sXG4gICAgICogdW5sZXNzICdvcHRpb25zJyBpbmNsdWRlcyBgZXNzZW50aWFsOiB0cnVlYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgT3B0aW9ucyBkZXNjcmliaW5nIHRoZSBkZXN0aW5hdGlvbiBhbmQgYW5pbWF0aW9uIG9mIHRoZSB0cmFuc2l0aW9uLlxuICAgICAqICAgICBBY2NlcHRzIHtAbGluayBDYW1lcmFPcHRpb25zfSwge0BsaW5rIEFuaW1hdGlvbk9wdGlvbnN9LFxuICAgICAqICAgICBhbmQgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmN1cnZlPTEuNDJdIFRoZSB6b29taW5nIFwiY3VydmVcIiB0aGF0IHdpbGwgb2NjdXIgYWxvbmcgdGhlXG4gICAgICogICAgIGZsaWdodCBwYXRoLiBBIGhpZ2ggdmFsdWUgbWF4aW1pemVzIHpvb21pbmcgZm9yIGFuIGV4YWdnZXJhdGVkIGFuaW1hdGlvbiwgd2hpbGUgYSBsb3dcbiAgICAgKiAgICAgdmFsdWUgbWluaW1pemVzIHpvb21pbmcgZm9yIGFuIGVmZmVjdCBjbG9zZXIgdG8ge0BsaW5rIE1hcCNlYXNlVG99LiAxLjQyIGlzIHRoZSBhdmVyYWdlXG4gICAgICogICAgIHZhbHVlIHNlbGVjdGVkIGJ5IHBhcnRpY2lwYW50cyBpbiB0aGUgdXNlciBzdHVkeSBkaXNjdXNzZWQgaW5cbiAgICAgKiAgICAgW3ZhbiBXaWprICgyMDAzKV0oaHR0cHM6Ly93d3cud2luLnR1ZS5ubC9+dmFud2lqay96b29tcGFuLnBkZikuIEEgdmFsdWUgb2ZcbiAgICAgKiAgICAgYE1hdGgucG93KDYsIDAuMjUpYCB3b3VsZCBiZSBlcXVpdmFsZW50IHRvIHRoZSByb290IG1lYW4gc3F1YXJlZCBhdmVyYWdlIHZlbG9jaXR5LiBBXG4gICAgICogICAgIHZhbHVlIG9mIDEgd291bGQgcHJvZHVjZSBhIGNpcmN1bGFyIG1vdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWluWm9vbV0gVGhlIHplcm8tYmFzZWQgem9vbSBsZXZlbCBhdCB0aGUgcGVhayBvZiB0aGUgZmxpZ2h0IHBhdGguIElmXG4gICAgICogICAgIGBvcHRpb25zLmN1cnZlYCBpcyBzcGVjaWZpZWQsIHRoaXMgb3B0aW9uIGlzIGlnbm9yZWQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnNwZWVkPTEuMl0gVGhlIGF2ZXJhZ2Ugc3BlZWQgb2YgdGhlIGFuaW1hdGlvbiBkZWZpbmVkIGluIHJlbGF0aW9uIHRvXG4gICAgICogICAgIGBvcHRpb25zLmN1cnZlYC4gQSBzcGVlZCBvZiAxLjIgbWVhbnMgdGhhdCB0aGUgbWFwIGFwcGVhcnMgdG8gbW92ZSBhbG9uZyB0aGUgZmxpZ2h0IHBhdGhcbiAgICAgKiAgICAgYnkgMS4yIHRpbWVzIGBvcHRpb25zLmN1cnZlYCBzY3JlZW5mdWxzIGV2ZXJ5IHNlY29uZC4gQSBfc2NyZWVuZnVsXyBpcyB0aGUgbWFwJ3MgdmlzaWJsZSBzcGFuLlxuICAgICAqICAgICBJdCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgZml4ZWQgcGh5c2ljYWwgZGlzdGFuY2UsIGJ1dCB2YXJpZXMgYnkgem9vbSBsZXZlbC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuc2NyZWVuU3BlZWRdIFRoZSBhdmVyYWdlIHNwZWVkIG9mIHRoZSBhbmltYXRpb24gbWVhc3VyZWQgaW4gc2NyZWVuZnVsc1xuICAgICAqICAgICBwZXIgc2Vjb25kLCBhc3N1bWluZyBhIGxpbmVhciB0aW1pbmcgY3VydmUuIElmIGBvcHRpb25zLnNwZWVkYCBpcyBzcGVjaWZpZWQsIHRoaXMgb3B0aW9uIGlzIGlnbm9yZWQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1heER1cmF0aW9uXSBUaGUgYW5pbWF0aW9uJ3MgbWF4aW11bSBkdXJhdGlvbiwgbWVhc3VyZWQgaW4gbWlsbGlzZWNvbmRzLlxuICAgICAqICAgICBJZiBkdXJhdGlvbiBleGNlZWRzIG1heGltdW0gZHVyYXRpb24sIGl0IHJlc2V0cyB0byAwLlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIHpvb21zdGFydFxuICAgICAqIEBmaXJlcyBwaXRjaHN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVcbiAgICAgKiBAZmlyZXMgem9vbVxuICAgICAqIEBmaXJlcyByb3RhdGVcbiAgICAgKiBAZmlyZXMgcGl0Y2hcbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEBmaXJlcyB6b29tZW5kXG4gICAgICogQGZpcmVzIHBpdGNoZW5kXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBmbHkgd2l0aCBkZWZhdWx0IG9wdGlvbnMgdG8gbnVsbCBpc2xhbmRcbiAgICAgKiBtYXAuZmx5VG8oe2NlbnRlcjogWzAsIDBdLCB6b29tOiA5fSk7XG4gICAgICogLy8gdXNpbmcgZmx5VG8gb3B0aW9uc1xuICAgICAqIG1hcC5mbHlUbyh7XG4gICAgICogICBjZW50ZXI6IFswLCAwXSxcbiAgICAgKiAgIHpvb206IDksXG4gICAgICogICBzcGVlZDogMC4yLFxuICAgICAqICAgY3VydmU6IDEsXG4gICAgICogICBlYXNpbmcodCkge1xuICAgICAqICAgICByZXR1cm4gdDtcbiAgICAgKiAgIH1cbiAgICAgKiB9KTtcbiAgICAgKiBAc2VlIFtGbHkgdG8gYSBsb2NhdGlvbl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9mbHl0by8pXG4gICAgICogQHNlZSBbU2xvd2x5IGZseSB0byBhIGxvY2F0aW9uXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2ZseXRvLW9wdGlvbnMvKVxuICAgICAqIEBzZWUgW0ZseSB0byBhIGxvY2F0aW9uIGJhc2VkIG9uIHNjcm9sbCBwb3NpdGlvbl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9zY3JvbGwtZmx5LXRvLylcbiAgICAgKi9cbiAgICBmbHlUbyhvcHRpb25zOiBPYmplY3QsIGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICAvLyBGYWxsIHRocm91Z2ggdG8ganVtcFRvIGlmIHVzZXIgaGFzIHNldCBwcmVmZXJzLXJlZHVjZWQtbW90aW9uXG4gICAgICAgIGlmICghb3B0aW9ucy5lc3NlbnRpYWwgJiYgYnJvd3Nlci5wcmVmZXJzUmVkdWNlZE1vdGlvbikge1xuICAgICAgICAgICAgY29uc3QgY29lcmNlZE9wdGlvbnMgPSAocGljayhvcHRpb25zLCBbJ2NlbnRlcicsICd6b29tJywgJ2JlYXJpbmcnLCAncGl0Y2gnLCAnYXJvdW5kJ10pOiBDYW1lcmFPcHRpb25zKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmp1bXBUbyhjb2VyY2VkT3B0aW9ucywgZXZlbnREYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoaXMgbWV0aG9kIGltcGxlbWVudHMgYW4gw6LCgMKcb3B0aW1hbCBwYXRow6LCgMKdIGFuaW1hdGlvbiwgYXMgZGV0YWlsZWQgaW46XG4gICAgICAgIC8vXG4gICAgICAgIC8vIFZhbiBXaWprLCBKYXJrZSBKLjsgTnVpaiwgV2ltIEEuIEEuIMOiwoDCnFNtb290aCBhbmQgZWZmaWNpZW50IHpvb21pbmcgYW5kIHBhbm5pbmcuw6LCgMKdIElORk9WSVNcbiAgICAgICAgLy8gICDDosKAwpkwMy4gcHAuIDE1w6LCgMKTMjIuIDxodHRwczovL3d3dy53aW4udHVlLm5sL352YW53aWprL3pvb21wYW4ucGRmI3BhZ2U9NT4uXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFdoZXJlIGFwcGxpY2FibGUsIGxvY2FsIHZhcmlhYmxlIGRvY3VtZW50YXRpb24gYmVnaW5zIHdpdGggdGhlIGFzc29jaWF0ZWQgdmFyaWFibGUgb3JcbiAgICAgICAgLy8gZnVuY3Rpb24gaW4gdmFuIFdpamsgKDIwMDMpLlxuXG4gICAgICAgIHRoaXMuc3RvcCgpO1xuXG4gICAgICAgIG9wdGlvbnMgPSBleHRlbmQoe1xuICAgICAgICAgICAgb2Zmc2V0OiBbMCwgMF0sXG4gICAgICAgICAgICBzcGVlZDogMS4yLFxuICAgICAgICAgICAgY3VydmU6IDEuNDIsXG4gICAgICAgICAgICBlYXNpbmc6IGRlZmF1bHRFYXNpbmdcbiAgICAgICAgfSwgb3B0aW9ucyk7XG5cbiAgICAgICAgY29uc3QgdHIgPSB0aGlzLnRyYW5zZm9ybSxcbiAgICAgICAgICAgIHN0YXJ0Wm9vbSA9IHRoaXMuZ2V0Wm9vbSgpLFxuICAgICAgICAgICAgc3RhcnRCZWFyaW5nID0gdGhpcy5nZXRCZWFyaW5nKCksXG4gICAgICAgICAgICBzdGFydFBpdGNoID0gdGhpcy5nZXRQaXRjaCgpLFxuICAgICAgICAgICAgc3RhcnRQYWRkaW5nID0gdGhpcy5nZXRQYWRkaW5nKCk7XG5cbiAgICAgICAgY29uc3Qgem9vbSA9ICd6b29tJyBpbiBvcHRpb25zID8gY2xhbXAoK29wdGlvbnMuem9vbSwgdHIubWluWm9vbSwgdHIubWF4Wm9vbSkgOiBzdGFydFpvb207XG4gICAgICAgIGNvbnN0IGJlYXJpbmcgPSAnYmVhcmluZycgaW4gb3B0aW9ucyA/IHRoaXMuX25vcm1hbGl6ZUJlYXJpbmcob3B0aW9ucy5iZWFyaW5nLCBzdGFydEJlYXJpbmcpIDogc3RhcnRCZWFyaW5nO1xuICAgICAgICBjb25zdCBwaXRjaCA9ICdwaXRjaCcgaW4gb3B0aW9ucyA/ICtvcHRpb25zLnBpdGNoIDogc3RhcnRQaXRjaDtcbiAgICAgICAgY29uc3QgcGFkZGluZyA9ICdwYWRkaW5nJyBpbiBvcHRpb25zID8gb3B0aW9ucy5wYWRkaW5nIDogdHIucGFkZGluZztcblxuICAgICAgICBjb25zdCBzY2FsZSA9IHRyLnpvb21TY2FsZSh6b29tIC0gc3RhcnRab29tKTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0QXNQb2ludCA9IFBvaW50LmNvbnZlcnQob3B0aW9ucy5vZmZzZXQpO1xuICAgICAgICBsZXQgcG9pbnRBdE9mZnNldCA9IHRyLmNlbnRlclBvaW50LmFkZChvZmZzZXRBc1BvaW50KTtcbiAgICAgICAgY29uc3QgbG9jYXRpb25BdE9mZnNldCA9IHRyLnBvaW50TG9jYXRpb24ocG9pbnRBdE9mZnNldCk7XG4gICAgICAgIGNvbnN0IGNlbnRlciA9IExuZ0xhdC5jb252ZXJ0KG9wdGlvbnMuY2VudGVyIHx8IGxvY2F0aW9uQXRPZmZzZXQpO1xuICAgICAgICB0aGlzLl9ub3JtYWxpemVDZW50ZXIoY2VudGVyKTtcblxuICAgICAgICBjb25zdCBmcm9tID0gdHIucHJvamVjdChsb2NhdGlvbkF0T2Zmc2V0KTtcbiAgICAgICAgY29uc3QgZGVsdGEgPSB0ci5wcm9qZWN0KGNlbnRlcikuc3ViKGZyb20pO1xuXG4gICAgICAgIGxldCByaG8gPSBvcHRpb25zLmN1cnZlO1xuXG4gICAgICAgIC8vIHfDosKCwoA6IEluaXRpYWwgdmlzaWJsZSBzcGFuLCBtZWFzdXJlZCBpbiBwaXhlbHMgYXQgdGhlIGluaXRpYWwgc2NhbGUuXG4gICAgICAgIGNvbnN0IHcwID0gTWF0aC5tYXgodHIud2lkdGgsIHRyLmhlaWdodCksXG4gICAgICAgICAgICAvLyB3w6LCgsKBOiBGaW5hbCB2aXNpYmxlIHNwYW4sIG1lYXN1cmVkIGluIHBpeGVscyB3aXRoIHJlc3BlY3QgdG8gdGhlIGluaXRpYWwgc2NhbGUuXG4gICAgICAgICAgICB3MSA9IHcwIC8gc2NhbGUsXG4gICAgICAgICAgICAvLyBMZW5ndGggb2YgdGhlIGZsaWdodCBwYXRoIGFzIHByb2plY3RlZCBvbnRvIHRoZSBncm91bmQgcGxhbmUsIG1lYXN1cmVkIGluIHBpeGVscyBmcm9tXG4gICAgICAgICAgICAvLyB0aGUgd29ybGQgaW1hZ2Ugb3JpZ2luIGF0IHRoZSBpbml0aWFsIHNjYWxlLlxuICAgICAgICAgICAgdTEgPSBkZWx0YS5tYWcoKTtcblxuICAgICAgICBpZiAoJ21pblpvb20nIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IG1pblpvb20gPSBjbGFtcChNYXRoLm1pbihvcHRpb25zLm1pblpvb20sIHN0YXJ0Wm9vbSwgem9vbSksIHRyLm1pblpvb20sIHRyLm1heFpvb20pO1xuICAgICAgICAgICAgLy8gdzxzdWI+bTwvc3ViPjogTWF4aW11bSB2aXNpYmxlIHNwYW4sIG1lYXN1cmVkIGluIHBpeGVscyB3aXRoIHJlc3BlY3QgdG8gdGhlIGluaXRpYWxcbiAgICAgICAgICAgIC8vIHNjYWxlLlxuICAgICAgICAgICAgY29uc3Qgd01heCA9IHcwIC8gdHIuem9vbVNjYWxlKG1pblpvb20gLSBzdGFydFpvb20pO1xuICAgICAgICAgICAgcmhvID0gTWF0aC5zcXJ0KHdNYXggLyB1MSAqIDIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gw4/CgcOCwrJcbiAgICAgICAgY29uc3QgcmhvMiA9IHJobyAqIHJobztcblxuICAgICAgICAvKipcbiAgICAgICAgICogcsOhwrXCojogUmV0dXJucyB0aGUgem9vbS1vdXQgZmFjdG9yIGF0IG9uZSBlbmQgb2YgdGhlIGFuaW1hdGlvbi5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIGkgMCBmb3IgdGhlIGFzY2VudCBvciAxIGZvciB0aGUgZGVzY2VudC5cbiAgICAgICAgICogQHByaXZhdGVcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIHIoaSkge1xuICAgICAgICAgICAgY29uc3QgYiA9ICh3MSAqIHcxIC0gdzAgKiB3MCArIChpID8gLTEgOiAxKSAqIHJobzIgKiByaG8yICogdTEgKiB1MSkgLyAoMiAqIChpID8gdzEgOiB3MCkgKiByaG8yICogdTEpO1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgubG9nKE1hdGguc3FydChiICogYiArIDEpIC0gYik7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBzaW5oKG4pIHsgcmV0dXJuIChNYXRoLmV4cChuKSAtIE1hdGguZXhwKC1uKSkgLyAyOyB9XG4gICAgICAgIGZ1bmN0aW9uIGNvc2gobikgeyByZXR1cm4gKE1hdGguZXhwKG4pICsgTWF0aC5leHAoLW4pKSAvIDI7IH1cbiAgICAgICAgZnVuY3Rpb24gdGFuaChuKSB7IHJldHVybiBzaW5oKG4pIC8gY29zaChuKTsgfVxuXG4gICAgICAgIC8vIHLDosKCwoA6IFpvb20tb3V0IGZhY3RvciBkdXJpbmcgYXNjZW50LlxuICAgICAgICBjb25zdCByMCA9IHIoMCk7XG5cbiAgICAgICAgLy8gdyhzKTogUmV0dXJucyB0aGUgdmlzaWJsZSBzcGFuIG9uIHRoZSBncm91bmQsIG1lYXN1cmVkIGluIHBpeGVscyB3aXRoIHJlc3BlY3QgdG8gdGhlXG4gICAgICAgIC8vIGluaXRpYWwgc2NhbGUuIEFzc3VtZXMgYW4gYW5ndWxhciBmaWVsZCBvZiB2aWV3IG9mIDIgYXJjdGFuIMOCwr0gw6LCicKIIDUzw4LCsC5cbiAgICAgICAgbGV0IHc6IChfOiBudW1iZXIpID0+IG51bWJlciA9IGZ1bmN0aW9uIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gKGNvc2gocjApIC8gY29zaChyMCArIHJobyAqIHMpKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyB1KHMpOiBSZXR1cm5zIHRoZSBkaXN0YW5jZSBhbG9uZyB0aGUgZmxpZ2h0IHBhdGggYXMgcHJvamVjdGVkIG9udG8gdGhlIGdyb3VuZCBwbGFuZSxcbiAgICAgICAgLy8gbWVhc3VyZWQgaW4gcGl4ZWxzIGZyb20gdGhlIHdvcmxkIGltYWdlIG9yaWdpbiBhdCB0aGUgaW5pdGlhbCBzY2FsZS5cbiAgICAgICAgbGV0IHU6IChfOiBudW1iZXIpID0+IG51bWJlciA9IGZ1bmN0aW9uIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gdzAgKiAoKGNvc2gocjApICogdGFuaChyMCArIHJobyAqIHMpIC0gc2luaChyMCkpIC8gcmhvMikgLyB1MTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBTOiBUb3RhbCBsZW5ndGggb2YgdGhlIGZsaWdodCBwYXRoLCBtZWFzdXJlZCBpbiDDj8KBLXNjcmVlbmZ1bHMuXG4gICAgICAgIGxldCBTID0gKHIoMSkgLSByMCkgLyByaG87XG5cbiAgICAgICAgLy8gV2hlbiB1w6LCgsKAID0gdcOiwoLCgSwgdGhlIG9wdGltYWwgcGF0aCBkb2VzbsOiwoDCmXQgcmVxdWlyZSBib3RoIGFzY2VudCBhbmQgZGVzY2VudC5cbiAgICAgICAgaWYgKE1hdGguYWJzKHUxKSA8IDAuMDAwMDAxIHx8ICFpc0Zpbml0ZShTKSkge1xuICAgICAgICAgICAgLy8gUGVyZm9ybSBhIG1vcmUgb3IgbGVzcyBpbnN0YW50YW5lb3VzIHRyYW5zaXRpb24gaWYgdGhlIHBhdGggaXMgdG9vIHNob3J0LlxuICAgICAgICAgICAgaWYgKE1hdGguYWJzKHcwIC0gdzEpIDwgMC4wMDAwMDEpIHJldHVybiB0aGlzLmVhc2VUbyhvcHRpb25zLCBldmVudERhdGEpO1xuXG4gICAgICAgICAgICBjb25zdCBrID0gdzEgPCB3MCA/IC0xIDogMTtcbiAgICAgICAgICAgIFMgPSBNYXRoLmFicyhNYXRoLmxvZyh3MSAvIHcwKSkgLyByaG87XG5cbiAgICAgICAgICAgIHUgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4gICAgICAgICAgICB3ID0gZnVuY3Rpb24ocykgeyByZXR1cm4gTWF0aC5leHAoayAqIHJobyAqIHMpOyB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdkdXJhdGlvbicgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgb3B0aW9ucy5kdXJhdGlvbiA9ICtvcHRpb25zLmR1cmF0aW9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgViA9ICdzY3JlZW5TcGVlZCcgaW4gb3B0aW9ucyA/ICtvcHRpb25zLnNjcmVlblNwZWVkIC8gcmhvIDogK29wdGlvbnMuc3BlZWQ7XG4gICAgICAgICAgICBvcHRpb25zLmR1cmF0aW9uID0gMTAwMCAqIFMgLyBWO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMubWF4RHVyYXRpb24gJiYgb3B0aW9ucy5kdXJhdGlvbiA+IG9wdGlvbnMubWF4RHVyYXRpb24pIHtcbiAgICAgICAgICAgIG9wdGlvbnMuZHVyYXRpb24gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fem9vbWluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuX3JvdGF0aW5nID0gKHN0YXJ0QmVhcmluZyAhPT0gYmVhcmluZyk7XG4gICAgICAgIHRoaXMuX3BpdGNoaW5nID0gKHBpdGNoICE9PSBzdGFydFBpdGNoKTtcbiAgICAgICAgdGhpcy5fcGFkZGluZyA9ICF0ci5pc1BhZGRpbmdFcXVhbChwYWRkaW5nKTtcblxuICAgICAgICB0aGlzLl9wcmVwYXJlRWFzZShldmVudERhdGEsIGZhbHNlKTtcblxuICAgICAgICB0aGlzLl9lYXNlKChrKSA9PiB7XG4gICAgICAgICAgICAvLyBzOiBUaGUgZGlzdGFuY2UgdHJhdmVsZWQgYWxvbmcgdGhlIGZsaWdodCBwYXRoLCBtZWFzdXJlZCBpbiDDj8KBLXNjcmVlbmZ1bHMuXG4gICAgICAgICAgICBjb25zdCBzID0gayAqIFM7XG4gICAgICAgICAgICBjb25zdCBzY2FsZSA9IDEgLyB3KHMpO1xuICAgICAgICAgICAgdHIuem9vbSA9IGsgPT09IDEgPyB6b29tIDogc3RhcnRab29tICsgdHIuc2NhbGVab29tKHNjYWxlKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX3JvdGF0aW5nKSB7XG4gICAgICAgICAgICAgICAgdHIuYmVhcmluZyA9IGludGVycG9sYXRlKHN0YXJ0QmVhcmluZywgYmVhcmluZywgayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fcGl0Y2hpbmcpIHtcbiAgICAgICAgICAgICAgICB0ci5waXRjaCA9IGludGVycG9sYXRlKHN0YXJ0UGl0Y2gsIHBpdGNoLCBrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9wYWRkaW5nKSB7XG4gICAgICAgICAgICAgICAgdHIuaW50ZXJwb2xhdGVQYWRkaW5nKHN0YXJ0UGFkZGluZywgcGFkZGluZywgayk7XG4gICAgICAgICAgICAgICAgLy8gV2hlbiBwYWRkaW5nIGlzIGJlaW5nIGFwcGxpZWQsIFRyYW5zZm9ybSNjZW50ZXJQb2ludCBpcyBjaGFuZ2luZyBjb250aW5vdXNseSxcbiAgICAgICAgICAgICAgICAvLyB0aHVzIHdlIG5lZWQgdG8gcmVjYWxjdWxhdGUgb2Zmc2V0UG9pbnQgZXZlcnkgZnJhbWVcbiAgICAgICAgICAgICAgICBwb2ludEF0T2Zmc2V0ID0gdHIuY2VudGVyUG9pbnQuYWRkKG9mZnNldEFzUG9pbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBuZXdDZW50ZXIgPSBrID09PSAxID8gY2VudGVyIDogdHIudW5wcm9qZWN0KGZyb20uYWRkKGRlbHRhLm11bHQodShzKSkpLm11bHQoc2NhbGUpKTtcbiAgICAgICAgICAgIHRyLnNldExvY2F0aW9uQXRQb2ludCh0ci5yZW5kZXJXb3JsZENvcGllcyA/IG5ld0NlbnRlci53cmFwKCkgOiBuZXdDZW50ZXIsIHBvaW50QXRPZmZzZXQpO1xuXG4gICAgICAgICAgICB0aGlzLl9maXJlTW92ZUV2ZW50cyhldmVudERhdGEpO1xuXG4gICAgICAgIH0sICgpID0+IHRoaXMuX2FmdGVyRWFzZShldmVudERhdGEpLCBvcHRpb25zKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpc0Vhc2luZygpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZWFzZUZyYW1lSWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3RvcHMgYW55IGFuaW1hdGVkIHRyYW5zaXRpb24gdW5kZXJ3YXkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqL1xuICAgIHN0b3AoKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdG9wKCk7XG4gICAgfVxuXG4gICAgX3N0b3AoYWxsb3dHZXN0dXJlcz86IGJvb2xlYW4sIGVhc2VJZD86IHN0cmluZyk6IHRoaXMge1xuICAgICAgICBpZiAodGhpcy5fZWFzZUZyYW1lSWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbmNlbFJlbmRlckZyYW1lKHRoaXMuX2Vhc2VGcmFtZUlkKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9lYXNlRnJhbWVJZDtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9vbkVhc2VGcmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9vbkVhc2VFbmQpIHtcbiAgICAgICAgICAgIC8vIFRoZSBfb25FYXNlRW5kIGZ1bmN0aW9uIG1pZ2h0IGVtaXQgZXZlbnRzIHdoaWNoIHRyaWdnZXIgbmV3XG4gICAgICAgICAgICAvLyBhbmltYXRpb24sIHdoaWNoIHNldHMgYSBuZXcgX29uRWFzZUVuZC4gRW5zdXJlIHdlIGRvbid0IGRlbGV0ZVxuICAgICAgICAgICAgLy8gaXQgdW5pbnRlbnRpb25hbGx5LlxuICAgICAgICAgICAgY29uc3Qgb25FYXNlRW5kID0gdGhpcy5fb25FYXNlRW5kO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX29uRWFzZUVuZDtcbiAgICAgICAgICAgIG9uRWFzZUVuZC5jYWxsKHRoaXMsIGVhc2VJZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFhbGxvd0dlc3R1cmVzKSB7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVycyA9ICh0aGlzOiBhbnkpLmhhbmRsZXJzO1xuICAgICAgICAgICAgaWYgKGhhbmRsZXJzKSBoYW5kbGVycy5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgX2Vhc2UoZnJhbWU6IChfOiBudW1iZXIpID0+IHZvaWQsXG4gICAgICAgICAgZmluaXNoOiAoKSA9PiB2b2lkLFxuICAgICAgICAgIG9wdGlvbnM6IHthbmltYXRlOiBib29sZWFuLCBkdXJhdGlvbjogbnVtYmVyLCBlYXNpbmc6IChfOiBudW1iZXIpID0+IG51bWJlcn0pIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuYW5pbWF0ZSA9PT0gZmFsc2UgfHwgb3B0aW9ucy5kdXJhdGlvbiA9PT0gMCkge1xuICAgICAgICAgICAgZnJhbWUoMSk7XG4gICAgICAgICAgICBmaW5pc2goKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2Vhc2VTdGFydCA9IGJyb3dzZXIubm93KCk7XG4gICAgICAgICAgICB0aGlzLl9lYXNlT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgICAgICB0aGlzLl9vbkVhc2VGcmFtZSA9IGZyYW1lO1xuICAgICAgICAgICAgdGhpcy5fb25FYXNlRW5kID0gZmluaXNoO1xuICAgICAgICAgICAgdGhpcy5fZWFzZUZyYW1lSWQgPSB0aGlzLl9yZXF1ZXN0UmVuZGVyRnJhbWUodGhpcy5fcmVuZGVyRnJhbWVDYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDYWxsYmFjayBmb3IgbWFwLl9yZXF1ZXN0UmVuZGVyRnJhbWVcbiAgICBfcmVuZGVyRnJhbWVDYWxsYmFjaygpIHtcbiAgICAgICAgY29uc3QgdCA9IE1hdGgubWluKChicm93c2VyLm5vdygpIC0gdGhpcy5fZWFzZVN0YXJ0KSAvIHRoaXMuX2Vhc2VPcHRpb25zLmR1cmF0aW9uLCAxKTtcbiAgICAgICAgdGhpcy5fb25FYXNlRnJhbWUodGhpcy5fZWFzZU9wdGlvbnMuZWFzaW5nKHQpKTtcbiAgICAgICAgaWYgKHQgPCAxKSB7XG4gICAgICAgICAgICB0aGlzLl9lYXNlRnJhbWVJZCA9IHRoaXMuX3JlcXVlc3RSZW5kZXJGcmFtZSh0aGlzLl9yZW5kZXJGcmFtZUNhbGxiYWNrKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gY29udmVydCBiZWFyaW5nIHNvIHRoYXQgaXQncyBudW1lcmljYWxseSBjbG9zZSB0byB0aGUgY3VycmVudCBvbmUgc28gdGhhdCBpdCBpbnRlcnBvbGF0ZXMgcHJvcGVybHlcbiAgICBfbm9ybWFsaXplQmVhcmluZyhiZWFyaW5nOiBudW1iZXIsIGN1cnJlbnRCZWFyaW5nOiBudW1iZXIpIHtcbiAgICAgICAgYmVhcmluZyA9IHdyYXAoYmVhcmluZywgLTE4MCwgMTgwKTtcbiAgICAgICAgY29uc3QgZGlmZiA9IE1hdGguYWJzKGJlYXJpbmcgLSBjdXJyZW50QmVhcmluZyk7XG4gICAgICAgIGlmIChNYXRoLmFicyhiZWFyaW5nIC0gMzYwIC0gY3VycmVudEJlYXJpbmcpIDwgZGlmZikgYmVhcmluZyAtPSAzNjA7XG4gICAgICAgIGlmIChNYXRoLmFicyhiZWFyaW5nICsgMzYwIC0gY3VycmVudEJlYXJpbmcpIDwgZGlmZikgYmVhcmluZyArPSAzNjA7XG4gICAgICAgIHJldHVybiBiZWFyaW5nO1xuICAgIH1cblxuICAgIC8vIElmIGEgcGF0aCBjcm9zc2luZyB0aGUgYW50aW1lcmlkaWFuIHdvdWxkIGJlIHNob3J0ZXIsIGV4dGVuZCB0aGUgZmluYWwgY29vcmRpbmF0ZSBzbyB0aGF0XG4gICAgLy8gaW50ZXJwb2xhdGluZyBiZXR3ZWVuIHRoZSB0d28gZW5kcG9pbnRzIHdpbGwgY3Jvc3MgaXQuXG4gICAgX25vcm1hbGl6ZUNlbnRlcihjZW50ZXI6IExuZ0xhdCkge1xuICAgICAgICBjb25zdCB0ciA9IHRoaXMudHJhbnNmb3JtO1xuICAgICAgICBpZiAoIXRyLnJlbmRlcldvcmxkQ29waWVzIHx8IHRyLmxuZ1JhbmdlKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgZGVsdGEgPSBjZW50ZXIubG5nIC0gdHIuY2VudGVyLmxuZztcbiAgICAgICAgY2VudGVyLmxuZyArPVxuICAgICAgICAgICAgZGVsdGEgPiAxODAgPyAtMzYwIDpcbiAgICAgICAgICAgIGRlbHRhIDwgLTE4MCA/IDM2MCA6IDA7XG4gICAgfVxufVxuXG4vLyBJbiBkZWJ1ZyBidWlsZHMsIGNoZWNrIHRoYXQgY2FtZXJhIGNoYW5nZSBldmVudHMgYXJlIGZpcmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLlxuLy8gLSBfX19zdGFydCBldmVudHMgbmVlZHMgdG8gYmUgZmlyZWQgYmVmb3JlIF9fXyBhbmQgX19fZW5kIGV2ZW50c1xuLy8gLSBhbm90aGVyIF9fX3N0YXJ0IGV2ZW50IGNhbid0IGJlIGZpcmVkIGJlZm9yZSBhIF9fX2VuZCBldmVudCBoYXMgYmVlbiBmaXJlZCBmb3IgdGhlIHByZXZpb3VzIG9uZVxuZnVuY3Rpb24gYWRkQXNzZXJ0aW9ucyhjYW1lcmE6IENhbWVyYSkgeyAvL2VzbGludC1kaXNhYmxlLWxpbmVcbiAgICBEZWJ1Zy5ydW4oKCkgPT4ge1xuICAgICAgICBjb25zdCBpblByb2dyZXNzID0ge307XG5cbiAgICAgICAgWydkcmFnJywgJ3pvb20nLCAncm90YXRlJywgJ3BpdGNoJywgJ21vdmUnXS5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgICAgICAgaW5Qcm9ncmVzc1tuYW1lXSA9IGZhbHNlO1xuXG4gICAgICAgICAgICBjYW1lcmEub24oYCR7bmFtZX1zdGFydGAsICgpID0+IHtcbiAgICAgICAgICAgICAgICBhc3NlcnQoIWluUHJvZ3Jlc3NbbmFtZV0sIGBcIiR7bmFtZX1zdGFydFwiIGZpcmVkIHR3aWNlIHdpdGhvdXQgYSBcIiR7bmFtZX1lbmRcImApO1xuICAgICAgICAgICAgICAgIGluUHJvZ3Jlc3NbbmFtZV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIGFzc2VydChpblByb2dyZXNzLm1vdmUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNhbWVyYS5vbihuYW1lLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGluUHJvZ3Jlc3NbbmFtZV0pO1xuICAgICAgICAgICAgICAgIGFzc2VydChpblByb2dyZXNzLm1vdmUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNhbWVyYS5vbihgJHtuYW1lfWVuZGAsICgpID0+IHtcbiAgICAgICAgICAgICAgICBhc3NlcnQoaW5Qcm9ncmVzcy5tb3ZlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoaW5Qcm9ncmVzc1tuYW1lXSk7XG4gICAgICAgICAgICAgICAgaW5Qcm9ncmVzc1tuYW1lXSA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIENhbmFyeSB1c2VkIHRvIHRlc3Qgd2hldGhlciB0aGlzIGZ1bmN0aW9uIGlzIHN0cmlwcGVkIGluIHByb2QgYnVpbGRcbiAgICAgICAgY2FuYXJ5ID0gJ2NhbmFyeSBkZWJ1ZyBydW4nO1xuICAgIH0pO1xufVxuXG5sZXQgY2FuYXJ5OyAvL2VzbGludC1kaXNhYmxlLWxpbmVcblxuZXhwb3J0IGRlZmF1bHQgQ2FtZXJhO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IERPTSBmcm9tICcuLi8uLi91dGlsL2RvbSc7XG5pbXBvcnQge2JpbmRBbGx9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgY29uZmlnIGZyb20gJy4uLy4uL3V0aWwvY29uZmlnJztcblxuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL21hcCc7XG5cbnR5cGUgT3B0aW9ucyA9IHtcbiAgICBjb21wYWN0PzogYm9vbGVhbixcbiAgICBjdXN0b21BdHRyaWJ1dGlvbj86IHN0cmluZyB8IEFycmF5PHN0cmluZz5cbn07XG5cbi8qKlxuICogQW4gYEF0dHJpYnV0aW9uQ29udHJvbGAgY29udHJvbCBwcmVzZW50cyB0aGUgbWFwJ3MgW2F0dHJpYnV0aW9uIGluZm9ybWF0aW9uXShodHRwczovL3d3dy5tYXBib3guY29tL2hlbHAvYXR0cmlidXRpb24vKS5cbiAqXG4gKiBAaW1wbGVtZW50cyB7SUNvbnRyb2x9XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmNvbXBhY3RdIElmIGB0cnVlYCBmb3JjZSBhIGNvbXBhY3QgYXR0cmlidXRpb24gdGhhdCBzaG93cyB0aGUgZnVsbCBhdHRyaWJ1dGlvbiBvbiBtb3VzZSBob3Zlciwgb3IgaWYgYGZhbHNlYCBmb3JjZSB0aGUgZnVsbCBhdHRyaWJ1dGlvbiBjb250cm9sLiBUaGUgZGVmYXVsdCBpcyBhIHJlc3BvbnNpdmUgYXR0cmlidXRpb24gdGhhdCBjb2xsYXBzZXMgd2hlbiB0aGUgbWFwIGlzIGxlc3MgdGhhbiA2NDAgcGl4ZWxzIHdpZGUuXG4gKiBAcGFyYW0ge3N0cmluZyB8IEFycmF5PHN0cmluZz59IFtvcHRpb25zLmN1c3RvbUF0dHJpYnV0aW9uXSBTdHJpbmcgb3Igc3RyaW5ncyB0byBzaG93IGluIGFkZGl0aW9uIHRvIGFueSBvdGhlciBhdHRyaWJ1dGlvbnMuXG4gKiBAZXhhbXBsZVxuICogdmFyIG1hcCA9IG5ldyBtYXBib3hnbC5NYXAoe2F0dHJpYnV0aW9uQ29udHJvbDogZmFsc2V9KVxuICogICAgIC5hZGRDb250cm9sKG5ldyBtYXBib3hnbC5BdHRyaWJ1dGlvbkNvbnRyb2woe1xuICogICAgICAgICBjb21wYWN0OiB0cnVlXG4gKiAgICAgfSkpO1xuICovXG5jbGFzcyBBdHRyaWJ1dGlvbkNvbnRyb2wge1xuICAgIG9wdGlvbnM6IE9wdGlvbnM7XG4gICAgX21hcDogTWFwO1xuICAgIF9jb250YWluZXI6IEhUTUxFbGVtZW50O1xuICAgIF9pbm5lckNvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gICAgX2VkaXRMaW5rOiA/SFRNTEFuY2hvckVsZW1lbnQ7XG4gICAgX2F0dHJpYkhUTUw6IHN0cmluZztcbiAgICBzdHlsZUlkOiBzdHJpbmc7XG4gICAgc3R5bGVPd25lcjogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICAgICAgYmluZEFsbChbXG4gICAgICAgICAgICAnX3VwZGF0ZUVkaXRMaW5rJyxcbiAgICAgICAgICAgICdfdXBkYXRlRGF0YScsXG4gICAgICAgICAgICAnX3VwZGF0ZUNvbXBhY3QnXG4gICAgICAgIF0sIHRoaXMpO1xuICAgIH1cblxuICAgIGdldERlZmF1bHRQb3NpdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICdib3R0b20tcmlnaHQnO1xuICAgIH1cblxuICAgIG9uQWRkKG1hcDogTWFwKSB7XG4gICAgICAgIGNvbnN0IGNvbXBhY3QgPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmNvbXBhY3Q7XG5cbiAgICAgICAgdGhpcy5fbWFwID0gbWFwO1xuICAgICAgICB0aGlzLl9jb250YWluZXIgPSBET00uY3JlYXRlKCdkaXYnLCAnbWFwYm94Z2wtY3RybCBtYXBib3hnbC1jdHJsLWF0dHJpYicpO1xuICAgICAgICB0aGlzLl9pbm5lckNvbnRhaW5lciA9IERPTS5jcmVhdGUoJ2RpdicsICdtYXBib3hnbC1jdHJsLWF0dHJpYi1pbm5lcicsIHRoaXMuX2NvbnRhaW5lcik7XG5cbiAgICAgICAgaWYgKGNvbXBhY3QpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1jb21wYWN0Jyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl91cGRhdGVBdHRyaWJ1dGlvbnMoKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlRWRpdExpbmsoKTtcblxuICAgICAgICB0aGlzLl9tYXAub24oJ3N0eWxlZGF0YScsIHRoaXMuX3VwZGF0ZURhdGEpO1xuICAgICAgICB0aGlzLl9tYXAub24oJ3NvdXJjZWRhdGEnLCB0aGlzLl91cGRhdGVEYXRhKTtcbiAgICAgICAgdGhpcy5fbWFwLm9uKCdtb3ZlZW5kJywgdGhpcy5fdXBkYXRlRWRpdExpbmspO1xuXG4gICAgICAgIGlmIChjb21wYWN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vbigncmVzaXplJywgdGhpcy5fdXBkYXRlQ29tcGFjdCk7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVDb21wYWN0KCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fY29udGFpbmVyO1xuICAgIH1cblxuICAgIG9uUmVtb3ZlKCkge1xuICAgICAgICBET00ucmVtb3ZlKHRoaXMuX2NvbnRhaW5lcik7XG5cbiAgICAgICAgdGhpcy5fbWFwLm9mZignc3R5bGVkYXRhJywgdGhpcy5fdXBkYXRlRGF0YSk7XG4gICAgICAgIHRoaXMuX21hcC5vZmYoJ3NvdXJjZWRhdGEnLCB0aGlzLl91cGRhdGVEYXRhKTtcbiAgICAgICAgdGhpcy5fbWFwLm9mZignbW92ZWVuZCcsIHRoaXMuX3VwZGF0ZUVkaXRMaW5rKTtcbiAgICAgICAgdGhpcy5fbWFwLm9mZigncmVzaXplJywgdGhpcy5fdXBkYXRlQ29tcGFjdCk7XG5cbiAgICAgICAgdGhpcy5fbWFwID0gKHVuZGVmaW5lZDogYW55KTtcbiAgICAgICAgdGhpcy5fYXR0cmliSFRNTCA9ICh1bmRlZmluZWQ6IGFueSk7XG4gICAgfVxuXG4gICAgX3VwZGF0ZUVkaXRMaW5rKCkge1xuICAgICAgICBsZXQgZWRpdExpbmsgPSB0aGlzLl9lZGl0TGluaztcbiAgICAgICAgaWYgKCFlZGl0TGluaykge1xuICAgICAgICAgICAgZWRpdExpbmsgPSB0aGlzLl9lZGl0TGluayA9ICh0aGlzLl9jb250YWluZXIucXVlcnlTZWxlY3RvcignLm1hcGJveC1pbXByb3ZlLW1hcCcpOiBhbnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyYW1zID0gW1xuICAgICAgICAgICAge2tleTogXCJvd25lclwiLCB2YWx1ZTogdGhpcy5zdHlsZU93bmVyfSxcbiAgICAgICAgICAgIHtrZXk6IFwiaWRcIiwgdmFsdWU6IHRoaXMuc3R5bGVJZH0sXG4gICAgICAgICAgICB7a2V5OiBcImFjY2Vzc190b2tlblwiLCB2YWx1ZTogdGhpcy5fbWFwLl9yZXF1ZXN0TWFuYWdlci5fY3VzdG9tQWNjZXNzVG9rZW4gfHwgY29uZmlnLkFDQ0VTU19UT0tFTn1cbiAgICAgICAgXTtcblxuICAgICAgICBpZiAoZWRpdExpbmspIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtU3RyaW5nID0gcGFyYW1zLnJlZHVjZSgoYWNjLCBuZXh0LCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG5leHQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgYWNjICs9IGAke25leHQua2V5fT0ke25leHQudmFsdWV9JHtpIDwgcGFyYW1zLmxlbmd0aCAtIDEgPyAnJicgOiAnJ31gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfSwgYD9gKTtcbiAgICAgICAgICAgIGVkaXRMaW5rLmhyZWYgPSBgJHtjb25maWcuRkVFREJBQ0tfVVJMfS8ke3BhcmFtU3RyaW5nfSR7dGhpcy5fbWFwLl9oYXNoID8gdGhpcy5fbWFwLl9oYXNoLmdldEhhc2hTdHJpbmcodHJ1ZSkgOiAnJ31gO1xuICAgICAgICAgICAgZWRpdExpbmsucmVsID0gXCJub29wZW5lciBub2ZvbGxvd1wiO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3VwZGF0ZURhdGEoZTogYW55KSB7XG4gICAgICAgIGlmIChlICYmIChlLnNvdXJjZURhdGFUeXBlID09PSAnbWV0YWRhdGEnIHx8IGUuZGF0YVR5cGUgPT09ICdzdHlsZScpKSB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVBdHRyaWJ1dGlvbnMoKTtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUVkaXRMaW5rKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfdXBkYXRlQXR0cmlidXRpb25zKCkge1xuICAgICAgICBpZiAoIXRoaXMuX21hcC5zdHlsZSkgcmV0dXJuO1xuICAgICAgICBsZXQgYXR0cmlidXRpb25zOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY3VzdG9tQXR0cmlidXRpb24pIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMub3B0aW9ucy5jdXN0b21BdHRyaWJ1dGlvbikpIHtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGlvbnMgPSBhdHRyaWJ1dGlvbnMuY29uY2F0KFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuY3VzdG9tQXR0cmlidXRpb24ubWFwKGF0dHJpYnV0aW9uID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXR0cmlidXRpb24gIT09ICdzdHJpbmcnKSByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXR0cmlidXRpb247XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5jdXN0b21BdHRyaWJ1dGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGlvbnMucHVzaCh0aGlzLm9wdGlvbnMuY3VzdG9tQXR0cmlidXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX21hcC5zdHlsZS5zdHlsZXNoZWV0KSB7XG4gICAgICAgICAgICBjb25zdCBzdHlsZXNoZWV0OiBhbnkgPSB0aGlzLl9tYXAuc3R5bGUuc3R5bGVzaGVldDtcbiAgICAgICAgICAgIHRoaXMuc3R5bGVPd25lciA9IHN0eWxlc2hlZXQub3duZXI7XG4gICAgICAgICAgICB0aGlzLnN0eWxlSWQgPSBzdHlsZXNoZWV0LmlkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc291cmNlQ2FjaGVzID0gdGhpcy5fbWFwLnN0eWxlLnNvdXJjZUNhY2hlcztcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiBzb3VyY2VDYWNoZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlID0gc291cmNlQ2FjaGVzW2lkXTtcbiAgICAgICAgICAgIGlmIChzb3VyY2VDYWNoZS51c2VkKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc291cmNlID0gc291cmNlQ2FjaGUuZ2V0U291cmNlKCk7XG4gICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5hdHRyaWJ1dGlvbiAmJiBhdHRyaWJ1dGlvbnMuaW5kZXhPZihzb3VyY2UuYXR0cmlidXRpb24pIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGlvbnMucHVzaChzb3VyY2UuYXR0cmlidXRpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJlbW92ZSBhbnkgZW50cmllcyB0aGF0IGFyZSBzdWJzdHJpbmdzIG9mIGFub3RoZXIgZW50cnkuXG4gICAgICAgIC8vIGZpcnN0IHNvcnQgYnkgbGVuZ3RoIHNvIHRoYXQgc3Vic3RyaW5ncyBjb21lIGZpcnN0XG4gICAgICAgIGF0dHJpYnV0aW9ucy5zb3J0KChhLCBiKSA9PiBhLmxlbmd0aCAtIGIubGVuZ3RoKTtcbiAgICAgICAgYXR0cmlidXRpb25zID0gYXR0cmlidXRpb25zLmZpbHRlcigoYXR0cmliLCBpKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCBhdHRyaWJ1dGlvbnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRpb25zW2pdLmluZGV4T2YoYXR0cmliKSA+PSAwKSB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGNoZWNrIGlmIGF0dHJpYnV0aW9uIHN0cmluZyBpcyBkaWZmZXJlbnQgdG8gbWluaW1pemUgRE9NIGNoYW5nZXNcbiAgICAgICAgY29uc3QgYXR0cmliSFRNTCA9IGF0dHJpYnV0aW9ucy5qb2luKCcgfCAnKTtcbiAgICAgICAgaWYgKGF0dHJpYkhUTUwgPT09IHRoaXMuX2F0dHJpYkhUTUwpIHJldHVybjtcblxuICAgICAgICB0aGlzLl9hdHRyaWJIVE1MID0gYXR0cmliSFRNTDtcblxuICAgICAgICBpZiAoYXR0cmlidXRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5faW5uZXJDb250YWluZXIuaW5uZXJIVE1MID0gYXR0cmliSFRNTDtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1hdHRyaWItZW1wdHknKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1hdHRyaWItZW1wdHknKTtcbiAgICAgICAgfVxuICAgICAgICAvLyByZW1vdmUgb2xkIERPTSBub2RlIGZyb20gX2VkaXRMaW5rXG4gICAgICAgIHRoaXMuX2VkaXRMaW5rID0gbnVsbDtcbiAgICB9XG5cbiAgICBfdXBkYXRlQ29tcGFjdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX21hcC5nZXRDYW52YXNDb250YWluZXIoKS5vZmZzZXRXaWR0aCA8PSA2NDApIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1jb21wYWN0Jyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY29tcGFjdCcpO1xuICAgICAgICB9XG4gICAgfVxuXG59XG5cbmV4cG9ydCBkZWZhdWx0IEF0dHJpYnV0aW9uQ29udHJvbDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBET00gZnJvbSAnLi4vLi4vdXRpbC9kb20nO1xuXG5pbXBvcnQge2JpbmRBbGx9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5cbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi9tYXAnO1xuXG4vKipcbiAqIEEgYExvZ29Db250cm9sYCBpcyBhIGNvbnRyb2wgdGhhdCBhZGRzIHRoZSBNYXBib3ggd2F0ZXJtYXJrXG4gKiB0byB0aGUgbWFwIGFzIHJlcXVpcmVkIGJ5IHRoZSBbdGVybXMgb2Ygc2VydmljZV0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS90b3MvKSBmb3IgTWFwYm94XG4gKiB2ZWN0b3IgdGlsZXMgYW5kIGNvcmUgc3R5bGVzLlxuICpcbiAqIEBpbXBsZW1lbnRzIHtJQ29udHJvbH1cbiAqIEBwcml2YXRlXG4qKi9cblxuY2xhc3MgTG9nb0NvbnRyb2wge1xuICAgIF9tYXA6IE1hcDtcbiAgICBfY29udGFpbmVyOiBIVE1MRWxlbWVudDtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBiaW5kQWxsKFsnX3VwZGF0ZUxvZ28nXSwgdGhpcyk7XG4gICAgICAgIGJpbmRBbGwoWydfdXBkYXRlQ29tcGFjdCddLCB0aGlzKTtcbiAgICB9XG5cbiAgICBvbkFkZChtYXA6IE1hcCkge1xuICAgICAgICB0aGlzLl9tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMuX2NvbnRhaW5lciA9IERPTS5jcmVhdGUoJ2RpdicsICdtYXBib3hnbC1jdHJsJyk7XG4gICAgICAgIGNvbnN0IGFuY2hvciA9IERPTS5jcmVhdGUoJ2EnLCAnbWFwYm94Z2wtY3RybC1sb2dvJyk7XG4gICAgICAgIGFuY2hvci50YXJnZXQgPSBcIl9ibGFua1wiO1xuICAgICAgICBhbmNob3IucmVsID0gXCJub29wZW5lciBub2ZvbGxvd1wiO1xuICAgICAgICBhbmNob3IuaHJlZiA9IFwiaHR0cHM6Ly93d3cubWFwYm94LmNvbS9cIjtcbiAgICAgICAgYW5jaG9yLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIiwgdGhpcy5fbWFwLl9nZXRVSVN0cmluZygnTG9nb0NvbnRyb2wuVGl0bGUnKSk7XG4gICAgICAgIGFuY2hvci5zZXRBdHRyaWJ1dGUoXCJyZWxcIiwgXCJub29wZW5lciBub2ZvbGxvd1wiKTtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKGFuY2hvcik7XG4gICAgICAgIHRoaXMuX2NvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG4gICAgICAgIHRoaXMuX21hcC5vbignc291cmNlZGF0YScsIHRoaXMuX3VwZGF0ZUxvZ28pO1xuICAgICAgICB0aGlzLl91cGRhdGVMb2dvKCk7XG5cbiAgICAgICAgdGhpcy5fbWFwLm9uKCdyZXNpemUnLCB0aGlzLl91cGRhdGVDb21wYWN0KTtcbiAgICAgICAgdGhpcy5fdXBkYXRlQ29tcGFjdCgpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXI7XG4gICAgfVxuXG4gICAgb25SZW1vdmUoKSB7XG4gICAgICAgIERPTS5yZW1vdmUodGhpcy5fY29udGFpbmVyKTtcbiAgICAgICAgdGhpcy5fbWFwLm9mZignc291cmNlZGF0YScsIHRoaXMuX3VwZGF0ZUxvZ28pO1xuICAgICAgICB0aGlzLl9tYXAub2ZmKCdyZXNpemUnLCB0aGlzLl91cGRhdGVDb21wYWN0KTtcbiAgICB9XG5cbiAgICBnZXREZWZhdWx0UG9zaXRpb24oKSB7XG4gICAgICAgIHJldHVybiAnYm90dG9tLWxlZnQnO1xuICAgIH1cblxuICAgIF91cGRhdGVMb2dvKGU6IGFueSkge1xuICAgICAgICBpZiAoIWUgfHwgZS5zb3VyY2VEYXRhVHlwZSA9PT0gJ21ldGFkYXRhJykge1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSB0aGlzLl9sb2dvUmVxdWlyZWQoKSA/ICdibG9jaycgOiAnbm9uZSc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfbG9nb1JlcXVpcmVkKCkge1xuICAgICAgICBpZiAoIXRoaXMuX21hcC5zdHlsZSkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlcyA9IHRoaXMuX21hcC5zdHlsZS5zb3VyY2VDYWNoZXM7XG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gc291cmNlQ2FjaGVzKSB7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBzb3VyY2VDYWNoZXNbaWRdLmdldFNvdXJjZSgpO1xuICAgICAgICAgICAgaWYgKHNvdXJjZS5tYXBib3hfbG9nbykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIF91cGRhdGVDb21wYWN0KCkge1xuICAgICAgICBjb25zdCBjb250YWluZXJDaGlsZHJlbiA9IHRoaXMuX2NvbnRhaW5lci5jaGlsZHJlbjtcbiAgICAgICAgaWYgKGNvbnRhaW5lckNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgYW5jaG9yID0gY29udGFpbmVyQ2hpbGRyZW5bMF07XG4gICAgICAgICAgICBpZiAodGhpcy5fbWFwLmdldENhbnZhc0NvbnRhaW5lcigpLm9mZnNldFdpZHRoIDwgMjUwKSB7XG4gICAgICAgICAgICAgICAgYW5jaG9yLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWNvbXBhY3QnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYW5jaG9yLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWNvbXBhY3QnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxufVxuXG5leHBvcnQgZGVmYXVsdCBMb2dvQ29udHJvbDtcbiIsIi8vIEBmbG93IHN0cmljdFxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5leHBvcnQgdHlwZSBUYXNrSUQgPSBudW1iZXI7IC8vIGNhbid0IG1hcmsgb3BhcXVlIGR1ZSB0byBodHRwczovL2dpdGh1Yi5jb20vZmxvd3R5cGUvZmxvdy1yZW1vdmUtdHlwZXMvcHVsbC82MVxudHlwZSBUYXNrID0ge1xuICAgIGNhbGxiYWNrOiAodGltZVN0YW1wOiBudW1iZXIpID0+IHZvaWQ7XG4gICAgaWQ6IFRhc2tJRDtcbiAgICBjYW5jZWxsZWQ6IGJvb2xlYW47XG59O1xuXG5jbGFzcyBUYXNrUXVldWUge1xuICAgIF9xdWV1ZTogQXJyYXk8VGFzaz47XG4gICAgX2lkOiBUYXNrSUQ7XG4gICAgX2NsZWFyZWQ6IGJvb2xlYW47XG4gICAgX2N1cnJlbnRseVJ1bm5pbmc6IEFycmF5PFRhc2s+IHwgZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcigpICB7XG4gICAgICAgIHRoaXMuX3F1ZXVlID0gW107XG4gICAgICAgIHRoaXMuX2lkID0gMDtcbiAgICAgICAgdGhpcy5fY2xlYXJlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jdXJyZW50bHlSdW5uaW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgYWRkKGNhbGxiYWNrOiAodGltZVN0YW1wOiBudW1iZXIpID0+IHZvaWQpOiBUYXNrSUQge1xuICAgICAgICBjb25zdCBpZCA9ICsrdGhpcy5faWQ7XG4gICAgICAgIGNvbnN0IHF1ZXVlID0gdGhpcy5fcXVldWU7XG4gICAgICAgIHF1ZXVlLnB1c2goe2NhbGxiYWNrLCBpZCwgY2FuY2VsbGVkOiBmYWxzZX0pO1xuICAgICAgICByZXR1cm4gaWQ7XG4gICAgfVxuXG4gICAgcmVtb3ZlKGlkOiBUYXNrSUQpIHtcbiAgICAgICAgY29uc3QgcnVubmluZyA9IHRoaXMuX2N1cnJlbnRseVJ1bm5pbmc7XG4gICAgICAgIGNvbnN0IHF1ZXVlID0gcnVubmluZyA/IHRoaXMuX3F1ZXVlLmNvbmNhdChydW5uaW5nKSA6IHRoaXMuX3F1ZXVlO1xuICAgICAgICBmb3IgKGNvbnN0IHRhc2sgb2YgcXVldWUpIHtcbiAgICAgICAgICAgIGlmICh0YXNrLmlkID09PSBpZCkge1xuICAgICAgICAgICAgICAgIHRhc2suY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBydW4odGltZVN0YW1wOiBudW1iZXIgPSAwKSB7XG4gICAgICAgIGFzc2VydCghdGhpcy5fY3VycmVudGx5UnVubmluZyk7XG4gICAgICAgIGNvbnN0IHF1ZXVlID0gdGhpcy5fY3VycmVudGx5UnVubmluZyA9IHRoaXMuX3F1ZXVlO1xuXG4gICAgICAgIC8vIFRhc2tzIHF1ZXVlZCBieSBjYWxsYmFja3MgaW4gdGhlIGN1cnJlbnQgcXVldWUgc2hvdWxkIGJlIGV4ZWN1dGVkXG4gICAgICAgIC8vIG9uIHRoZSBuZXh0IHJ1biwgbm90IHRoZSBjdXJyZW50IHJ1bi5cbiAgICAgICAgdGhpcy5fcXVldWUgPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IHRhc2sgb2YgcXVldWUpIHtcbiAgICAgICAgICAgIGlmICh0YXNrLmNhbmNlbGxlZCkgY29udGludWU7XG4gICAgICAgICAgICB0YXNrLmNhbGxiYWNrKHRpbWVTdGFtcCk7XG4gICAgICAgICAgICBpZiAodGhpcy5fY2xlYXJlZCkgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jbGVhcmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRseVJ1bm5pbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBjbGVhcigpIHtcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRseVJ1bm5pbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX2NsZWFyZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3F1ZXVlID0gW107XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBUYXNrUXVldWU7XG4iLCIvLyBAZmxvd1xuXG5jb25zdCBkZWZhdWx0TG9jYWxlID0ge1xuICAgICdGdWxsc2NyZWVuQ29udHJvbC5FbnRlcic6ICdFbnRlciBmdWxsc2NyZWVuJyxcbiAgICAnRnVsbHNjcmVlbkNvbnRyb2wuRXhpdCc6ICdFeGl0IGZ1bGxzY3JlZW4nLFxuICAgICdHZW9sb2NhdGVDb250cm9sLkZpbmRNeUxvY2F0aW9uJzogJ0ZpbmQgbXkgbG9jYXRpb24nLFxuICAgICdHZW9sb2NhdGVDb250cm9sLkxvY2F0aW9uTm90QXZhaWxhYmxlJzogJ0xvY2F0aW9uIG5vdCBhdmFpbGFibGUnLFxuICAgICdMb2dvQ29udHJvbC5UaXRsZSc6ICdNYXBib3ggbG9nbycsXG4gICAgJ05hdmlnYXRpb25Db250cm9sLlJlc2V0QmVhcmluZyc6ICdSZXNldCBiZWFyaW5nIHRvIG5vcnRoJyxcbiAgICAnTmF2aWdhdGlvbkNvbnRyb2wuWm9vbUluJzogJ1pvb20gaW4nLFxuICAgICdOYXZpZ2F0aW9uQ29udHJvbC5ab29tT3V0JzogJ1pvb20gb3V0JyxcbiAgICAnU2NhbGVDb250cm9sLkZlZXQnOiAnZnQnLFxuICAgICdTY2FsZUNvbnRyb2wuTWV0ZXJzJzogJ20nLFxuICAgICdTY2FsZUNvbnRyb2wuS2lsb21ldGVycyc6ICdrbScsXG4gICAgJ1NjYWxlQ29udHJvbC5NaWxlcyc6ICdtaScsXG4gICAgJ1NjYWxlQ29udHJvbC5OYXV0aWNhbE1pbGVzJzogJ25tJ1xuXG59O1xuXG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0TG9jYWxlO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHt2ZXJzaW9ufSBmcm9tICcuLi8uLi9wYWNrYWdlLmpzb24nO1xuaW1wb3J0IHtleHRlbmQsIGJpbmRBbGwsIHdhcm5PbmNlLCB1bmlxdWVJZH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCBicm93c2VyIGZyb20gJy4uL3V0aWwvYnJvd3Nlcic7XG5pbXBvcnQgd2luZG93IGZyb20gJy4uL3V0aWwvd2luZG93JztcbmNvbnN0IHtIVE1MSW1hZ2VFbGVtZW50LCBIVE1MRWxlbWVudCwgSW1hZ2VCaXRtYXB9ID0gd2luZG93O1xuaW1wb3J0IERPTSBmcm9tICcuLi91dGlsL2RvbSc7XG5pbXBvcnQge2dldEltYWdlLCBnZXRKU09OLCBSZXNvdXJjZVR5cGV9IGZyb20gJy4uL3V0aWwvYWpheCc7XG5pbXBvcnQge1JlcXVlc3RNYW5hZ2VyfSBmcm9tICcuLi91dGlsL21hcGJveCc7XG5pbXBvcnQgU3R5bGUgZnJvbSAnLi4vc3R5bGUvc3R5bGUnO1xuaW1wb3J0IEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4uL3N0eWxlL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5pbXBvcnQgUGFpbnRlciBmcm9tICcuLi9yZW5kZXIvcGFpbnRlcic7XG5pbXBvcnQgVHJhbnNmb3JtIGZyb20gJy4uL2dlby90cmFuc2Zvcm0nO1xuaW1wb3J0IEhhc2ggZnJvbSAnLi9oYXNoJztcbmltcG9ydCBIYW5kbGVyTWFuYWdlciBmcm9tICcuL2hhbmRsZXJfbWFuYWdlcic7XG5pbXBvcnQgQ2FtZXJhIGZyb20gJy4vY2FtZXJhJztcbmltcG9ydCBMbmdMYXQgZnJvbSAnLi4vZ2VvL2xuZ19sYXQnO1xuaW1wb3J0IExuZ0xhdEJvdW5kcyBmcm9tICcuLi9nZW8vbG5nX2xhdF9ib3VuZHMnO1xuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IEF0dHJpYnV0aW9uQ29udHJvbCBmcm9tICcuL2NvbnRyb2wvYXR0cmlidXRpb25fY29udHJvbCc7XG5pbXBvcnQgTG9nb0NvbnRyb2wgZnJvbSAnLi9jb250cm9sL2xvZ29fY29udHJvbCc7XG5pbXBvcnQgaXNTdXBwb3J0ZWQgZnJvbSAnQG1hcGJveC9tYXBib3gtZ2wtc3VwcG9ydGVkJztcbmltcG9ydCB7UkdCQUltYWdlfSBmcm9tICcuLi91dGlsL2ltYWdlJztcbmltcG9ydCB7RXZlbnQsIEVycm9yRXZlbnR9IGZyb20gJy4uL3V0aWwvZXZlbnRlZCc7XG5pbXBvcnQge01hcE1vdXNlRXZlbnR9IGZyb20gJy4vZXZlbnRzJztcbmltcG9ydCBUYXNrUXVldWUgZnJvbSAnLi4vdXRpbC90YXNrX3F1ZXVlJztcbmltcG9ydCB3ZWJwU3VwcG9ydGVkIGZyb20gJy4uL3V0aWwvd2VicF9zdXBwb3J0ZWQnO1xuaW1wb3J0IHtQZXJmb3JtYW5jZU1hcmtlcnMsIFBlcmZvcm1hbmNlVXRpbHN9IGZyb20gJy4uL3V0aWwvcGVyZm9ybWFuY2UnO1xuXG5pbXBvcnQge3NldENhY2hlTGltaXRzfSBmcm9tICcuLi91dGlsL3RpbGVfcmVxdWVzdF9jYWNoZSc7XG5cbmltcG9ydCB0eXBlIHtQb2ludExpa2V9IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IHR5cGUge1JlcXVlc3RUcmFuc2Zvcm1GdW5jdGlvbn0gZnJvbSAnLi4vdXRpbC9tYXBib3gnO1xuaW1wb3J0IHR5cGUge0xuZ0xhdExpa2V9IGZyb20gJy4uL2dlby9sbmdfbGF0JztcbmltcG9ydCB0eXBlIHtMbmdMYXRCb3VuZHNMaWtlfSBmcm9tICcuLi9nZW8vbG5nX2xhdF9ib3VuZHMnO1xuaW1wb3J0IHR5cGUge1N0eWxlT3B0aW9ucywgU3R5bGVTZXR0ZXJPcHRpb25zfSBmcm9tICcuLi9zdHlsZS9zdHlsZSc7XG5pbXBvcnQgdHlwZSB7TWFwRXZlbnQsIE1hcERhdGFFdmVudH0gZnJvbSAnLi9ldmVudHMnO1xuaW1wb3J0IHR5cGUge0N1c3RvbUxheWVySW50ZXJmYWNlfSBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllci9jdXN0b21fc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUge1N0eWxlSW1hZ2VJbnRlcmZhY2UsIFN0eWxlSW1hZ2VNZXRhZGF0YX0gZnJvbSAnLi4vc3R5bGUvc3R5bGVfaW1hZ2UnO1xuXG5pbXBvcnQgdHlwZSBTY3JvbGxab29tSGFuZGxlciBmcm9tICcuL2hhbmRsZXIvc2Nyb2xsX3pvb20nO1xuaW1wb3J0IHR5cGUgQm94Wm9vbUhhbmRsZXIgZnJvbSAnLi9oYW5kbGVyL2JveF96b29tJztcbmltcG9ydCB0eXBlIHtUb3VjaFBpdGNoSGFuZGxlcn0gZnJvbSAnLi9oYW5kbGVyL3RvdWNoX3pvb21fcm90YXRlJztcbmltcG9ydCB0eXBlIERyYWdSb3RhdGVIYW5kbGVyIGZyb20gJy4vaGFuZGxlci9zaGltL2RyYWdfcm90YXRlJztcbmltcG9ydCB0eXBlIERyYWdQYW5IYW5kbGVyLCB7RHJhZ1Bhbk9wdGlvbnN9IGZyb20gJy4vaGFuZGxlci9zaGltL2RyYWdfcGFuJztcbmltcG9ydCB0eXBlIEtleWJvYXJkSGFuZGxlciBmcm9tICcuL2hhbmRsZXIva2V5Ym9hcmQnO1xuaW1wb3J0IHR5cGUgRG91YmxlQ2xpY2tab29tSGFuZGxlciBmcm9tICcuL2hhbmRsZXIvc2hpbS9kYmxjbGlja196b29tJztcbmltcG9ydCB0eXBlIFRvdWNoWm9vbVJvdGF0ZUhhbmRsZXIgZnJvbSAnLi9oYW5kbGVyL3NoaW0vdG91Y2hfem9vbV9yb3RhdGUnO1xuaW1wb3J0IGRlZmF1bHRMb2NhbGUgZnJvbSAnLi9kZWZhdWx0X2xvY2FsZSc7XG5pbXBvcnQgdHlwZSB7VGFza0lEfSBmcm9tICcuLi91dGlsL3Rhc2tfcXVldWUnO1xuaW1wb3J0IHR5cGUge0NhbmNlbGFibGV9IGZyb20gJy4uL3R5cGVzL2NhbmNlbGFibGUnO1xuaW1wb3J0IHR5cGUge1xuICAgIExheWVyU3BlY2lmaWNhdGlvbixcbiAgICBGaWx0ZXJTcGVjaWZpY2F0aW9uLFxuICAgIFN0eWxlU3BlY2lmaWNhdGlvbixcbiAgICBMaWdodFNwZWNpZmljYXRpb24sXG4gICAgU291cmNlU3BlY2lmaWNhdGlvblxufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcblxudHlwZSBDb250cm9sUG9zaXRpb24gPSAndG9wLWxlZnQnIHwgJ3RvcC1yaWdodCcgfCAnYm90dG9tLWxlZnQnIHwgJ2JvdHRvbS1yaWdodCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11c2UtYmVmb3JlLWRlZmluZSAqL1xudHlwZSBJQ29udHJvbCA9IHtcbiAgICBvbkFkZChtYXA6IE1hcCk6IEhUTUxFbGVtZW50O1xuICAgIG9uUmVtb3ZlKG1hcDogTWFwKTogdm9pZDtcblxuICAgICtnZXREZWZhdWx0UG9zaXRpb24/OiAoKSA9PiBDb250cm9sUG9zaXRpb247XG59XG4vKiBlc2xpbnQtZW5hYmxlIG5vLXVzZS1iZWZvcmUtZGVmaW5lICovXG5cbnR5cGUgTWFwT3B0aW9ucyA9IHtcbiAgICBoYXNoPzogYm9vbGVhbiB8IHN0cmluZyxcbiAgICBpbnRlcmFjdGl2ZT86IGJvb2xlYW4sXG4gICAgY29udGFpbmVyOiBIVE1MRWxlbWVudCB8IHN0cmluZyxcbiAgICBiZWFyaW5nU25hcD86IG51bWJlcixcbiAgICBhdHRyaWJ1dGlvbkNvbnRyb2w/OiBib29sZWFuLFxuICAgIGN1c3RvbUF0dHJpYnV0aW9uPzogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPixcbiAgICBsb2dvUG9zaXRpb24/OiBDb250cm9sUG9zaXRpb24sXG4gICAgZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdD86IGJvb2xlYW4sXG4gICAgcHJlc2VydmVEcmF3aW5nQnVmZmVyPzogYm9vbGVhbixcbiAgICBhbnRpYWxpYXM/OiBib29sZWFuLFxuICAgIHJlZnJlc2hFeHBpcmVkVGlsZXM/OiBib29sZWFuLFxuICAgIG1heEJvdW5kcz86IExuZ0xhdEJvdW5kc0xpa2UsXG4gICAgc2Nyb2xsWm9vbT86IGJvb2xlYW4sXG4gICAgbWluWm9vbT86ID9udW1iZXIsXG4gICAgbWF4Wm9vbT86ID9udW1iZXIsXG4gICAgbWluUGl0Y2g/OiA/bnVtYmVyLFxuICAgIG1heFBpdGNoPzogP251bWJlcixcbiAgICBib3hab29tPzogYm9vbGVhbixcbiAgICBkcmFnUm90YXRlPzogYm9vbGVhbixcbiAgICBkcmFnUGFuPzogRHJhZ1Bhbk9wdGlvbnMsXG4gICAga2V5Ym9hcmQ/OiBib29sZWFuLFxuICAgIGRvdWJsZUNsaWNrWm9vbT86IGJvb2xlYW4sXG4gICAgdG91Y2hab29tUm90YXRlPzogYm9vbGVhbixcbiAgICB0b3VjaFBpdGNoPzogYm9vbGVhbixcbiAgICB0cmFja1Jlc2l6ZT86IGJvb2xlYW4sXG4gICAgY2VudGVyPzogTG5nTGF0TGlrZSxcbiAgICB6b29tPzogbnVtYmVyLFxuICAgIGJlYXJpbmc/OiBudW1iZXIsXG4gICAgcGl0Y2g/OiBudW1iZXIsXG4gICAgcmVuZGVyV29ybGRDb3BpZXM/OiBib29sZWFuLFxuICAgIG1heFRpbGVDYWNoZVNpemU/OiBudW1iZXIsXG4gICAgdHJhbnNmb3JtUmVxdWVzdD86IFJlcXVlc3RUcmFuc2Zvcm1GdW5jdGlvbixcbiAgICBhY2Nlc3NUb2tlbjogc3RyaW5nLFxuICAgIGxvY2FsZT86IE9iamVjdFxufTtcblxuY29uc3QgZGVmYXVsdE1pblpvb20gPSAtMjtcbmNvbnN0IGRlZmF1bHRNYXhab29tID0gMjI7XG5cbi8vIHRoZSBkZWZhdWx0IHZhbHVlcywgYnV0IGFsc28gdGhlIHZhbGlkIHJhbmdlXG5jb25zdCBkZWZhdWx0TWluUGl0Y2ggPSAwO1xuY29uc3QgZGVmYXVsdE1heFBpdGNoID0gNjA7XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAgIGNlbnRlcjogWzAsIDBdLFxuICAgIHpvb206IDAsXG4gICAgYmVhcmluZzogMCxcbiAgICBwaXRjaDogMCxcblxuICAgIG1pblpvb206IGRlZmF1bHRNaW5ab29tLFxuICAgIG1heFpvb206IGRlZmF1bHRNYXhab29tLFxuXG4gICAgbWluUGl0Y2g6IGRlZmF1bHRNaW5QaXRjaCxcbiAgICBtYXhQaXRjaDogZGVmYXVsdE1heFBpdGNoLFxuXG4gICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgc2Nyb2xsWm9vbTogdHJ1ZSxcbiAgICBib3hab29tOiB0cnVlLFxuICAgIGRyYWdSb3RhdGU6IHRydWUsXG4gICAgZHJhZ1BhbjogdHJ1ZSxcbiAgICBrZXlib2FyZDogdHJ1ZSxcbiAgICBkb3VibGVDbGlja1pvb206IHRydWUsXG4gICAgdG91Y2hab29tUm90YXRlOiB0cnVlLFxuICAgIHRvdWNoUGl0Y2g6IHRydWUsXG5cbiAgICBiZWFyaW5nU25hcDogNyxcbiAgICBjbGlja1RvbGVyYW5jZTogMyxcbiAgICBwaXRjaFdpdGhSb3RhdGU6IHRydWUsXG5cbiAgICBoYXNoOiBmYWxzZSxcbiAgICBhdHRyaWJ1dGlvbkNvbnRyb2w6IHRydWUsXG5cbiAgICBmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OiBmYWxzZSxcbiAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IGZhbHNlLFxuICAgIHRyYWNrUmVzaXplOiB0cnVlLFxuICAgIHJlbmRlcldvcmxkQ29waWVzOiB0cnVlLFxuICAgIHJlZnJlc2hFeHBpcmVkVGlsZXM6IHRydWUsXG4gICAgbWF4VGlsZUNhY2hlU2l6ZTogbnVsbCxcbiAgICBsb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk6ICdzYW5zLXNlcmlmJyxcbiAgICB0cmFuc2Zvcm1SZXF1ZXN0OiBudWxsLFxuICAgIGFjY2Vzc1Rva2VuOiBudWxsLFxuICAgIGZhZGVEdXJhdGlvbjogMzAwLFxuICAgIGNyb3NzU291cmNlQ29sbGlzaW9uczogdHJ1ZVxufTtcblxuLyoqXG4gKiBUaGUgYE1hcGAgb2JqZWN0IHJlcHJlc2VudHMgdGhlIG1hcCBvbiB5b3VyIHBhZ2UuIEl0IGV4cG9zZXMgbWV0aG9kc1xuICogYW5kIHByb3BlcnRpZXMgdGhhdCBlbmFibGUgeW91IHRvIHByb2dyYW1tYXRpY2FsbHkgY2hhbmdlIHRoZSBtYXAsXG4gKiBhbmQgZmlyZXMgZXZlbnRzIGFzIHVzZXJzIGludGVyYWN0IHdpdGggaXQuXG4gKlxuICogWW91IGNyZWF0ZSBhIGBNYXBgIGJ5IHNwZWNpZnlpbmcgYSBgY29udGFpbmVyYCBhbmQgb3RoZXIgb3B0aW9ucy5cbiAqIFRoZW4gTWFwYm94IEdMIEpTIGluaXRpYWxpemVzIHRoZSBtYXAgb24gdGhlIHBhZ2UgYW5kIHJldHVybnMgeW91ciBgTWFwYFxuICogb2JqZWN0LlxuICpcbiAqIEBleHRlbmRzIEV2ZW50ZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fHN0cmluZ30gb3B0aW9ucy5jb250YWluZXIgVGhlIEhUTUwgZWxlbWVudCBpbiB3aGljaCBNYXBib3ggR0wgSlMgd2lsbCByZW5kZXIgdGhlIG1hcCwgb3IgdGhlIGVsZW1lbnQncyBzdHJpbmcgYGlkYC4gVGhlIHNwZWNpZmllZCBlbGVtZW50IG11c3QgaGF2ZSBubyBjaGlsZHJlbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5taW5ab29tPTBdIFRoZSBtaW5pbXVtIHpvb20gbGV2ZWwgb2YgdGhlIG1hcCAoMC0yNCkuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4Wm9vbT0yMl0gVGhlIG1heGltdW0gem9vbSBsZXZlbCBvZiB0aGUgbWFwICgwLTI0KS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5taW5QaXRjaD0wXSBUaGUgbWluaW11bSBwaXRjaCBvZiB0aGUgbWFwICgwLTYwKS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhQaXRjaD02MF0gVGhlIG1heGltdW0gcGl0Y2ggb2YgdGhlIG1hcCAoMC02MCkuXG4gKiBAcGFyYW0ge09iamVjdHxzdHJpbmd9IFtvcHRpb25zLnN0eWxlXSBUaGUgbWFwJ3MgTWFwYm94IHN0eWxlLiBUaGlzIG11c3QgYmUgYW4gYSBKU09OIG9iamVjdCBjb25mb3JtaW5nIHRvXG4gKiB0aGUgc2NoZW1hIGRlc2NyaWJlZCBpbiB0aGUgW01hcGJveCBTdHlsZSBTcGVjaWZpY2F0aW9uXShodHRwczovL21hcGJveC5jb20vbWFwYm94LWdsLXN0eWxlLXNwZWMvKSwgb3IgYSBVUkwgdG9cbiAqIHN1Y2ggSlNPTi5cbiAqXG4gKiBUbyBsb2FkIGEgc3R5bGUgZnJvbSB0aGUgTWFwYm94IEFQSSwgeW91IGNhbiB1c2UgYSBVUkwgb2YgdGhlIGZvcm0gYG1hcGJveDovL3N0eWxlcy86b3duZXIvOnN0eWxlYCxcbiAqIHdoZXJlIGA6b3duZXJgIGlzIHlvdXIgTWFwYm94IGFjY291bnQgbmFtZSBhbmQgYDpzdHlsZWAgaXMgdGhlIHN0eWxlIElELiBPciB5b3UgY2FuIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZ1xuICogW3RoZSBwcmVkZWZpbmVkIE1hcGJveCBzdHlsZXNdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwcy8pOlxuICpcbiAqICAqIGBtYXBib3g6Ly9zdHlsZXMvbWFwYm94L3N0cmVldHMtdjExYFxuICogICogYG1hcGJveDovL3N0eWxlcy9tYXBib3gvb3V0ZG9vcnMtdjExYFxuICogICogYG1hcGJveDovL3N0eWxlcy9tYXBib3gvbGlnaHQtdjEwYFxuICogICogYG1hcGJveDovL3N0eWxlcy9tYXBib3gvZGFyay12MTBgXG4gKiAgKiBgbWFwYm94Oi8vc3R5bGVzL21hcGJveC9zYXRlbGxpdGUtdjlgXG4gKiAgKiBgbWFwYm94Oi8vc3R5bGVzL21hcGJveC9zYXRlbGxpdGUtc3RyZWV0cy12MTFgXG4gKiAgKiBgbWFwYm94Oi8vc3R5bGVzL21hcGJveC9uYXZpZ2F0aW9uLXByZXZpZXctZGF5LXY0YFxuICogICogYG1hcGJveDovL3N0eWxlcy9tYXBib3gvbmF2aWdhdGlvbi1wcmV2aWV3LW5pZ2h0LXY0YFxuICogICogYG1hcGJveDovL3N0eWxlcy9tYXBib3gvbmF2aWdhdGlvbi1ndWlkYW5jZS1kYXktdjRgXG4gKiAgKiBgbWFwYm94Oi8vc3R5bGVzL21hcGJveC9uYXZpZ2F0aW9uLWd1aWRhbmNlLW5pZ2h0LXY0YFxuICpcbiAqIFRpbGVzZXRzIGhvc3RlZCB3aXRoIE1hcGJveCBjYW4gYmUgc3R5bGUtb3B0aW1pemVkIGlmIHlvdSBhcHBlbmQgYD9vcHRpbWl6ZT10cnVlYCB0byB0aGUgZW5kIG9mIHlvdXIgc3R5bGUgVVJMLCBsaWtlIGBtYXBib3g6Ly9zdHlsZXMvbWFwYm94L3N0cmVldHMtdjExP29wdGltaXplPXRydWVgLlxuICogTGVhcm4gbW9yZSBhYm91dCBzdHlsZS1vcHRpbWl6ZWQgdmVjdG9yIHRpbGVzIGluIG91ciBbQVBJIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vYXBpLWRvY3VtZW50YXRpb24vbWFwcy8jcmV0cmlldmUtdGlsZXMpLlxuICpcbiAqIEBwYXJhbSB7KGJvb2xlYW58c3RyaW5nKX0gW29wdGlvbnMuaGFzaD1mYWxzZV0gSWYgYHRydWVgLCB0aGUgbWFwJ3MgcG9zaXRpb24gKHpvb20sIGNlbnRlciBsYXRpdHVkZSwgY2VudGVyIGxvbmdpdHVkZSwgYmVhcmluZywgYW5kIHBpdGNoKSB3aWxsIGJlIHN5bmNlZCB3aXRoIHRoZSBoYXNoIGZyYWdtZW50IG9mIHRoZSBwYWdlJ3MgVVJMLlxuICogICBGb3IgZXhhbXBsZSwgYGh0dHA6Ly9wYXRoL3RvL215L3BhZ2UuaHRtbCMyLjU5LzM5LjI2LzUzLjA3Ly0yNC4xLzYwYC5cbiAqICAgQW4gYWRkaXRpb25hbCBzdHJpbmcgbWF5IG9wdGlvbmFsbHkgYmUgcHJvdmlkZWQgdG8gaW5kaWNhdGUgYSBwYXJhbWV0ZXItc3R5bGVkIGhhc2gsXG4gKiAgIGUuZy4gaHR0cDovL3BhdGgvdG8vbXkvcGFnZS5odG1sI21hcD0yLjU5LzM5LjI2LzUzLjA3Ly0yNC4xLzYwJmZvbz1iYXIsIHdoZXJlIGZvb1xuICogICBpcyBhIGN1c3RvbSBwYXJhbWV0ZXIgYW5kIGJhciBpcyBhbiBhcmJpdHJhcnkgaGFzaCBkaXN0aW5jdCBmcm9tIHRoZSBtYXAgaGFzaC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuaW50ZXJhY3RpdmU9dHJ1ZV0gSWYgYGZhbHNlYCwgbm8gbW91c2UsIHRvdWNoLCBvciBrZXlib2FyZCBsaXN0ZW5lcnMgd2lsbCBiZSBhdHRhY2hlZCB0byB0aGUgbWFwLCBzbyBpdCB3aWxsIG5vdCByZXNwb25kIHRvIGludGVyYWN0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmJlYXJpbmdTbmFwPTddIFRoZSB0aHJlc2hvbGQsIG1lYXN1cmVkIGluIGRlZ3JlZXMsIHRoYXQgZGV0ZXJtaW5lcyB3aGVuIHRoZSBtYXAnc1xuICogICBiZWFyaW5nIHdpbGwgc25hcCB0byBub3J0aC4gRm9yIGV4YW1wbGUsIHdpdGggYSBgYmVhcmluZ1NuYXBgIG9mIDcsIGlmIHRoZSB1c2VyIHJvdGF0ZXNcbiAqICAgdGhlIG1hcCB3aXRoaW4gNyBkZWdyZWVzIG9mIG5vcnRoLCB0aGUgbWFwIHdpbGwgYXV0b21hdGljYWxseSBzbmFwIHRvIGV4YWN0IG5vcnRoLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5waXRjaFdpdGhSb3RhdGU9dHJ1ZV0gSWYgYGZhbHNlYCwgdGhlIG1hcCdzIHBpdGNoICh0aWx0KSBjb250cm9sIHdpdGggXCJkcmFnIHRvIHJvdGF0ZVwiIGludGVyYWN0aW9uIHdpbGwgYmUgZGlzYWJsZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuY2xpY2tUb2xlcmFuY2U9M10gVGhlIG1heCBudW1iZXIgb2YgcGl4ZWxzIGEgdXNlciBjYW4gc2hpZnQgdGhlIG1vdXNlIHBvaW50ZXIgZHVyaW5nIGEgY2xpY2sgZm9yIGl0IHRvIGJlIGNvbnNpZGVyZWQgYSB2YWxpZCBjbGljayAoYXMgb3Bwb3NlZCB0byBhIG1vdXNlIGRyYWcpLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5hdHRyaWJ1dGlvbkNvbnRyb2w9dHJ1ZV0gSWYgYHRydWVgLCBhbiB7QGxpbmsgQXR0cmlidXRpb25Db250cm9sfSB3aWxsIGJlIGFkZGVkIHRvIHRoZSBtYXAuXG4gKiBAcGFyYW0ge3N0cmluZyB8IEFycmF5PHN0cmluZz59IFtvcHRpb25zLmN1c3RvbUF0dHJpYnV0aW9uXSBTdHJpbmcgb3Igc3RyaW5ncyB0byBzaG93IGluIGFuIHtAbGluayBBdHRyaWJ1dGlvbkNvbnRyb2x9LiBPbmx5IGFwcGxpY2FibGUgaWYgYG9wdGlvbnMuYXR0cmlidXRpb25Db250cm9sYCBpcyBgdHJ1ZWAuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubG9nb1Bvc2l0aW9uPSdib3R0b20tbGVmdCddIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgcG9zaXRpb24gb2YgdGhlIE1hcGJveCB3b3JkbWFyayBvbiB0aGUgbWFwLiBWYWxpZCBvcHRpb25zIGFyZSBgdG9wLWxlZnRgLGB0b3AtcmlnaHRgLCBgYm90dG9tLWxlZnRgLCBgYm90dG9tLXJpZ2h0YC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdD1mYWxzZV0gSWYgYHRydWVgLCBtYXAgY3JlYXRpb24gd2lsbCBmYWlsIGlmIHRoZSBwZXJmb3JtYW5jZSBvZiBNYXBib3hcbiAqICAgR0wgSlMgd291bGQgYmUgZHJhbWF0aWNhbGx5IHdvcnNlIHRoYW4gZXhwZWN0ZWQgKGkuZS4gYSBzb2Z0d2FyZSByZW5kZXJlciB3b3VsZCBiZSB1c2VkKS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucHJlc2VydmVEcmF3aW5nQnVmZmVyPWZhbHNlXSBJZiBgdHJ1ZWAsIHRoZSBtYXAncyBjYW52YXMgY2FuIGJlIGV4cG9ydGVkIHRvIGEgUE5HIHVzaW5nIGBtYXAuZ2V0Q2FudmFzKCkudG9EYXRhVVJMKClgLiBUaGlzIGlzIGBmYWxzZWAgYnkgZGVmYXVsdCBhcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuYW50aWFsaWFzXSBJZiBgdHJ1ZWAsIHRoZSBnbCBjb250ZXh0IHdpbGwgYmUgY3JlYXRlZCB3aXRoIE1TQUEgYW50aWFsaWFzaW5nLCB3aGljaCBjYW4gYmUgdXNlZnVsIGZvciBhbnRpYWxpYXNpbmcgY3VzdG9tIGxheWVycy4gdGhpcyBpcyBgZmFsc2VgIGJ5IGRlZmF1bHQgYXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnJlZnJlc2hFeHBpcmVkVGlsZXM9dHJ1ZV0gSWYgYGZhbHNlYCwgdGhlIG1hcCB3b24ndCBhdHRlbXB0IHRvIHJlLXJlcXVlc3QgdGlsZXMgb25jZSB0aGV5IGV4cGlyZSBwZXIgdGhlaXIgSFRUUCBgY2FjaGVDb250cm9sYC9gZXhwaXJlc2AgaGVhZGVycy5cbiAqIEBwYXJhbSB7TG5nTGF0Qm91bmRzTGlrZX0gW29wdGlvbnMubWF4Qm91bmRzXSBJZiBzZXQsIHRoZSBtYXAgd2lsbCBiZSBjb25zdHJhaW5lZCB0byB0aGUgZ2l2ZW4gYm91bmRzLlxuICogQHBhcmFtIHtib29sZWFufE9iamVjdH0gW29wdGlvbnMuc2Nyb2xsWm9vbT10cnVlXSBJZiBgdHJ1ZWAsIHRoZSBcInNjcm9sbCB0byB6b29tXCIgaW50ZXJhY3Rpb24gaXMgZW5hYmxlZC4gQW4gYE9iamVjdGAgdmFsdWUgaXMgcGFzc2VkIGFzIG9wdGlvbnMgdG8ge0BsaW5rIFNjcm9sbFpvb21IYW5kbGVyI2VuYWJsZX0uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmJveFpvb209dHJ1ZV0gSWYgYHRydWVgLCB0aGUgXCJib3ggem9vbVwiIGludGVyYWN0aW9uIGlzIGVuYWJsZWQgKHNlZSB7QGxpbmsgQm94Wm9vbUhhbmRsZXJ9KS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZHJhZ1JvdGF0ZT10cnVlXSBJZiBgdHJ1ZWAsIHRoZSBcImRyYWcgdG8gcm90YXRlXCIgaW50ZXJhY3Rpb24gaXMgZW5hYmxlZCAoc2VlIHtAbGluayBEcmFnUm90YXRlSGFuZGxlcn0pLlxuICogQHBhcmFtIHtib29sZWFufE9iamVjdH0gW29wdGlvbnMuZHJhZ1Bhbj10cnVlXSBJZiBgdHJ1ZWAsIHRoZSBcImRyYWcgdG8gcGFuXCIgaW50ZXJhY3Rpb24gaXMgZW5hYmxlZC4gQW4gYE9iamVjdGAgdmFsdWUgaXMgcGFzc2VkIGFzIG9wdGlvbnMgdG8ge0BsaW5rIERyYWdQYW5IYW5kbGVyI2VuYWJsZX0uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmtleWJvYXJkPXRydWVdIElmIGB0cnVlYCwga2V5Ym9hcmQgc2hvcnRjdXRzIGFyZSBlbmFibGVkIChzZWUge0BsaW5rIEtleWJvYXJkSGFuZGxlcn0pLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5kb3VibGVDbGlja1pvb209dHJ1ZV0gSWYgYHRydWVgLCB0aGUgXCJkb3VibGUgY2xpY2sgdG8gem9vbVwiIGludGVyYWN0aW9uIGlzIGVuYWJsZWQgKHNlZSB7QGxpbmsgRG91YmxlQ2xpY2tab29tSGFuZGxlcn0pLlxuICogQHBhcmFtIHtib29sZWFufE9iamVjdH0gW29wdGlvbnMudG91Y2hab29tUm90YXRlPXRydWVdIElmIGB0cnVlYCwgdGhlIFwicGluY2ggdG8gcm90YXRlIGFuZCB6b29tXCIgaW50ZXJhY3Rpb24gaXMgZW5hYmxlZC4gQW4gYE9iamVjdGAgdmFsdWUgaXMgcGFzc2VkIGFzIG9wdGlvbnMgdG8ge0BsaW5rIFRvdWNoWm9vbVJvdGF0ZUhhbmRsZXIjZW5hYmxlfS5cbiAqIEBwYXJhbSB7Ym9vbGVhbnxPYmplY3R9IFtvcHRpb25zLnRvdWNoUGl0Y2g9dHJ1ZV0gSWYgYHRydWVgLCB0aGUgXCJkcmFnIHRvIHBpdGNoXCIgaW50ZXJhY3Rpb24gaXMgZW5hYmxlZC4gQW4gYE9iamVjdGAgdmFsdWUgaXMgcGFzc2VkIGFzIG9wdGlvbnMgdG8ge0BsaW5rIFRvdWNoUGl0Y2hIYW5kbGVyI2VuYWJsZX0uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnRyYWNrUmVzaXplPXRydWVdICBJZiBgdHJ1ZWAsIHRoZSBtYXAgd2lsbCBhdXRvbWF0aWNhbGx5IHJlc2l6ZSB3aGVuIHRoZSBicm93c2VyIHdpbmRvdyByZXNpemVzLlxuICogQHBhcmFtIHtMbmdMYXRMaWtlfSBbb3B0aW9ucy5jZW50ZXI9WzAsIDBdXSBUaGUgaW5pdGFsIGdlb2dyYXBoaWNhbCBjZW50ZXJwb2ludCBvZiB0aGUgbWFwLiBJZiBgY2VudGVyYCBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBjb25zdHJ1Y3RvciBvcHRpb25zLCBNYXBib3ggR0wgSlMgd2lsbCBsb29rIGZvciBpdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgb2JqZWN0LiBJZiBpdCBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBzdHlsZSwgZWl0aGVyLCBpdCB3aWxsIGRlZmF1bHQgdG8gYFswLCAwXWAgTm90ZTogTWFwYm94IEdMIHVzZXMgbG9uZ2l0dWRlLCBsYXRpdHVkZSBjb29yZGluYXRlIG9yZGVyIChhcyBvcHBvc2VkIHRvIGxhdGl0dWRlLCBsb25naXR1ZGUpIHRvIG1hdGNoIEdlb0pTT04uXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuem9vbT0wXSBUaGUgaW5pdGlhbCB6b29tIGxldmVsIG9mIHRoZSBtYXAuIElmIGB6b29tYCBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBjb25zdHJ1Y3RvciBvcHRpb25zLCBNYXBib3ggR0wgSlMgd2lsbCBsb29rIGZvciBpdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgb2JqZWN0LiBJZiBpdCBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBzdHlsZSwgZWl0aGVyLCBpdCB3aWxsIGRlZmF1bHQgdG8gYDBgLlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmJlYXJpbmc9MF0gVGhlIGluaXRpYWwgYmVhcmluZyAocm90YXRpb24pIG9mIHRoZSBtYXAsIG1lYXN1cmVkIGluIGRlZ3JlZXMgY291bnRlci1jbG9ja3dpc2UgZnJvbSBub3J0aC4gSWYgYGJlYXJpbmdgIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGNvbnN0cnVjdG9yIG9wdGlvbnMsIE1hcGJveCBHTCBKUyB3aWxsIGxvb2sgZm9yIGl0IGluIHRoZSBtYXAncyBzdHlsZSBvYmplY3QuIElmIGl0IGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIHN0eWxlLCBlaXRoZXIsIGl0IHdpbGwgZGVmYXVsdCB0byBgMGAuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMucGl0Y2g9MF0gVGhlIGluaXRpYWwgcGl0Y2ggKHRpbHQpIG9mIHRoZSBtYXAsIG1lYXN1cmVkIGluIGRlZ3JlZXMgYXdheSBmcm9tIHRoZSBwbGFuZSBvZiB0aGUgc2NyZWVuICgwLTYwKS4gSWYgYHBpdGNoYCBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBjb25zdHJ1Y3RvciBvcHRpb25zLCBNYXBib3ggR0wgSlMgd2lsbCBsb29rIGZvciBpdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgb2JqZWN0LiBJZiBpdCBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBzdHlsZSwgZWl0aGVyLCBpdCB3aWxsIGRlZmF1bHQgdG8gYDBgLlxuICogQHBhcmFtIHtMbmdMYXRCb3VuZHNMaWtlfSBbb3B0aW9ucy5ib3VuZHNdIFRoZSBpbml0aWFsIGJvdW5kcyBvZiB0aGUgbWFwLiBJZiBgYm91bmRzYCBpcyBzcGVjaWZpZWQsIGl0IG92ZXJyaWRlcyBgY2VudGVyYCBhbmQgYHpvb21gIGNvbnN0cnVjdG9yIG9wdGlvbnMuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMuZml0Qm91bmRzT3B0aW9uc10gQSBbYGZpdEJvdW5kc2BdKCNtYXAjZml0Ym91bmRzKSBvcHRpb25zIG9iamVjdCB0byB1c2UgX29ubHlfIHdoZW4gZml0dGluZyB0aGUgaW5pdGlhbCBgYm91bmRzYCBwcm92aWRlZCBhYm92ZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucmVuZGVyV29ybGRDb3BpZXM9dHJ1ZV0gIElmIGB0cnVlYCwgbXVsdGlwbGUgY29waWVzIG9mIHRoZSB3b3JsZCB3aWxsIGJlIHJlbmRlcmVkIHNpZGUgYnkgc2lkZSBiZXlvbmQgLTE4MCBhbmQgMTgwIGRlZ3JlZXMgbG9uZ2l0dWRlLiBJZiBzZXQgdG8gYGZhbHNlYDpcbiAqIC0gV2hlbiB0aGUgbWFwIGlzIHpvb21lZCBvdXQgZmFyIGVub3VnaCB0aGF0IGEgc2luZ2xlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB3b3JsZCBkb2VzIG5vdCBmaWxsIHRoZSBtYXAncyBlbnRpcmVcbiAqIGNvbnRhaW5lciwgdGhlcmUgd2lsbCBiZSBibGFuayBzcGFjZSBiZXlvbmQgMTgwIGFuZCAtMTgwIGRlZ3JlZXMgbG9uZ2l0dWRlLlxuICogLSBGZWF0dXJlcyB0aGF0IGNyb3NzIDE4MCBhbmQgLTE4MCBkZWdyZWVzIGxvbmdpdHVkZSB3aWxsIGJlIGN1dCBpbiB0d28gKHdpdGggb25lIHBvcnRpb24gb24gdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlXG4gKiBtYXAgYW5kIHRoZSBvdGhlciBvbiB0aGUgbGVmdCBlZGdlIG9mIHRoZSBtYXApIGF0IGV2ZXJ5IHpvb20gbGV2ZWwuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4VGlsZUNhY2hlU2l6ZT1udWxsXSAgVGhlIG1heGltdW0gbnVtYmVyIG9mIHRpbGVzIHN0b3JlZCBpbiB0aGUgdGlsZSBjYWNoZSBmb3IgYSBnaXZlbiBzb3VyY2UuIElmIG9taXR0ZWQsIHRoZSBjYWNoZSB3aWxsIGJlIGR5bmFtaWNhbGx5IHNpemVkIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZpZXdwb3J0LlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseT0nc2Fucy1zZXJpZiddIERlZmluZXMgYSBDU1NcbiAqICAgZm9udC1mYW1pbHkgZm9yIGxvY2FsbHkgb3ZlcnJpZGluZyBnZW5lcmF0aW9uIG9mIGdseXBocyBpbiB0aGUgJ0NKSyBVbmlmaWVkIElkZW9ncmFwaHMnLCAnSGlyYWdhbmEnLCAnS2F0YWthbmEnIGFuZCAnSGFuZ3VsIFN5bGxhYmxlcycgcmFuZ2VzLlxuICogICBJbiB0aGVzZSByYW5nZXMsIGZvbnQgc2V0dGluZ3MgZnJvbSB0aGUgbWFwJ3Mgc3R5bGUgd2lsbCBiZSBpZ25vcmVkLCBleGNlcHQgZm9yIGZvbnQtd2VpZ2h0IGtleXdvcmRzIChsaWdodC9yZWd1bGFyL21lZGl1bS9ib2xkKS5cbiAqICAgU2V0IHRvIGBmYWxzZWAsIHRvIGVuYWJsZSBmb250IHNldHRpbmdzIGZyb20gdGhlIG1hcCdzIHN0eWxlIGZvciB0aGVzZSBnbHlwaCByYW5nZXMuICBOb3RlIHRoYXQgW01hcGJveCBTdHVkaW9dKGh0dHBzOi8vc3R1ZGlvLm1hcGJveC5jb20vKSBzZXRzIHRoaXMgdmFsdWUgdG8gYGZhbHNlYCBieSBkZWZhdWx0LlxuICogICBUaGUgcHVycG9zZSBvZiB0aGlzIG9wdGlvbiBpcyB0byBhdm9pZCBiYW5kd2lkdGgtaW50ZW5zaXZlIGdseXBoIHNlcnZlciByZXF1ZXN0cy4gKFNlZSBbVXNlIGxvY2FsbHkgZ2VuZXJhdGVkIGlkZW9ncmFwaHNdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvbG9jYWwtaWRlb2dyYXBocykuKVxuICogQHBhcmFtIHtSZXF1ZXN0VHJhbnNmb3JtRnVuY3Rpb259IFtvcHRpb25zLnRyYW5zZm9ybVJlcXVlc3Q9bnVsbF0gQSBjYWxsYmFjayBydW4gYmVmb3JlIHRoZSBNYXAgbWFrZXMgYSByZXF1ZXN0IGZvciBhbiBleHRlcm5hbCBVUkwuIFRoZSBjYWxsYmFjayBjYW4gYmUgdXNlZCB0byBtb2RpZnkgdGhlIHVybCwgc2V0IGhlYWRlcnMsIG9yIHNldCB0aGUgY3JlZGVudGlhbHMgcHJvcGVydHkgZm9yIGNyb3NzLW9yaWdpbiByZXF1ZXN0cy5cbiAqICAgRXhwZWN0ZWQgdG8gcmV0dXJuIGFuIG9iamVjdCB3aXRoIGEgYHVybGAgcHJvcGVydHkgYW5kIG9wdGlvbmFsbHkgYGhlYWRlcnNgIGFuZCBgY3JlZGVudGlhbHNgIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmNvbGxlY3RSZXNvdXJjZVRpbWluZz1mYWxzZV0gSWYgYHRydWVgLCBSZXNvdXJjZSBUaW1pbmcgQVBJIGluZm9ybWF0aW9uIHdpbGwgYmUgY29sbGVjdGVkIGZvciByZXF1ZXN0cyBtYWRlIGJ5IEdlb0pTT04gYW5kIFZlY3RvciBUaWxlIHdlYiB3b3JrZXJzICh0aGlzIGluZm9ybWF0aW9uIGlzIG5vcm1hbGx5IGluYWNjZXNzaWJsZSBmcm9tIHRoZSBtYWluIEphdmFzY3JpcHQgdGhyZWFkKS4gSW5mb3JtYXRpb24gd2lsbCBiZSByZXR1cm5lZCBpbiBhIGByZXNvdXJjZVRpbWluZ2AgcHJvcGVydHkgb2YgcmVsZXZhbnQgYGRhdGFgIGV2ZW50cy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5mYWRlRHVyYXRpb249MzAwXSBDb250cm9scyB0aGUgZHVyYXRpb24gb2YgdGhlIGZhZGUtaW4vZmFkZS1vdXQgYW5pbWF0aW9uIGZvciBsYWJlbCBjb2xsaXNpb25zLCBpbiBtaWxsaXNlY29uZHMuIFRoaXMgc2V0dGluZyBhZmZlY3RzIGFsbCBzeW1ib2wgbGF5ZXJzLiBUaGlzIHNldHRpbmcgZG9lcyBub3QgYWZmZWN0IHRoZSBkdXJhdGlvbiBvZiBydW50aW1lIHN0eWxpbmcgdHJhbnNpdGlvbnMgb3IgcmFzdGVyIHRpbGUgY3Jvc3MtZmFkaW5nLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5jcm9zc1NvdXJjZUNvbGxpc2lvbnM9dHJ1ZV0gSWYgYHRydWVgLCBzeW1ib2xzIGZyb20gbXVsdGlwbGUgc291cmNlcyBjYW4gY29sbGlkZSB3aXRoIGVhY2ggb3RoZXIgZHVyaW5nIGNvbGxpc2lvbiBkZXRlY3Rpb24uIElmIGBmYWxzZWAsIGNvbGxpc2lvbiBkZXRlY3Rpb24gaXMgcnVuIHNlcGFyYXRlbHkgZm9yIHRoZSBzeW1ib2xzIGluIGVhY2ggc291cmNlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmFjY2Vzc1Rva2VuPW51bGxdIElmIHNwZWNpZmllZCwgbWFwIHdpbGwgdXNlIHRoaXMgdG9rZW4gaW5zdGVhZCBvZiB0aGUgb25lIGRlZmluZWQgaW4gbWFwYm94Z2wuYWNjZXNzVG9rZW4uXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMubG9jYWxlPW51bGxdIEEgcGF0Y2ggdG8gYXBwbHkgdG8gdGhlIGRlZmF1bHQgbG9jYWxpemF0aW9uIHRhYmxlIGZvciBVSSBzdHJpbmdzLCBlLmcuIGNvbnRyb2wgdG9vbHRpcHMuIFRoZSBgbG9jYWxlYCBvYmplY3QgbWFwcyBuYW1lc3BhY2VkIFVJIHN0cmluZyBJRHMgdG8gdHJhbnNsYXRlZCBzdHJpbmdzIGluIHRoZSB0YXJnZXQgbGFuZ3VhZ2U7IHNlZSBgc3JjL3VpL2RlZmF1bHRfbG9jYWxlLmpzYCBmb3IgYW4gZXhhbXBsZSB3aXRoIGFsbCBzdXBwb3J0ZWQgc3RyaW5nIElEcy4gVGhlIG9iamVjdCBtYXkgc3BlY2lmeSBhbGwgVUkgc3RyaW5ncyAodGhlcmVieSBhZGRpbmcgc3VwcG9ydCBmb3IgYSBuZXcgdHJhbnNsYXRpb24pIG9yIG9ubHkgYSBzdWJzZXQgb2Ygc3RyaW5ncyAodGhlcmVieSBwYXRjaGluZyB0aGUgZGVmYXVsdCB0cmFuc2xhdGlvbiB0YWJsZSkuXG4gKiBAZXhhbXBsZVxuICogdmFyIG1hcCA9IG5ldyBtYXBib3hnbC5NYXAoe1xuICogICBjb250YWluZXI6ICdtYXAnLFxuICogICBjZW50ZXI6IFstMTIyLjQyMDY3OSwgMzcuNzcyNTM3XSxcbiAqICAgem9vbTogMTMsXG4gKiAgIHN0eWxlOiBzdHlsZV9vYmplY3QsXG4gKiAgIGhhc2g6IHRydWUsXG4gKiAgIHRyYW5zZm9ybVJlcXVlc3Q6ICh1cmwsIHJlc291cmNlVHlwZSk9PiB7XG4gKiAgICAgaWYocmVzb3VyY2VUeXBlID09PSAnU291cmNlJyAmJiB1cmwuc3RhcnRzV2l0aCgnaHR0cDovL215SG9zdCcpKSB7XG4gKiAgICAgICByZXR1cm4ge1xuICogICAgICAgIHVybDogdXJsLnJlcGxhY2UoJ2h0dHAnLCAnaHR0cHMnKSxcbiAqICAgICAgICBoZWFkZXJzOiB7ICdteS1jdXN0b20taGVhZGVyJzogdHJ1ZX0sXG4gKiAgICAgICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJyAgLy8gSW5jbHVkZSBjb29raWVzIGZvciBjcm9zcy1vcmlnaW4gcmVxdWVzdHNcbiAqICAgICAgfVxuICogICAgIH1cbiAqICAgfVxuICogfSk7XG4gKiBAc2VlIFtEaXNwbGF5IGEgbWFwXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlcy8pXG4gKi9cbmNsYXNzIE1hcCBleHRlbmRzIENhbWVyYSB7XG4gICAgc3R5bGU6IFN0eWxlO1xuICAgIHBhaW50ZXI6IFBhaW50ZXI7XG4gICAgaGFuZGxlcnM6IEhhbmRsZXJNYW5hZ2VyO1xuXG4gICAgX2NvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gICAgX21pc3NpbmdDU1NDYW5hcnk6IEhUTUxFbGVtZW50O1xuICAgIF9jYW52YXNDb250YWluZXI6IEhUTUxFbGVtZW50O1xuICAgIF9jb250cm9sQ29udGFpbmVyOiBIVE1MRWxlbWVudDtcbiAgICBfY29udHJvbFBvc2l0aW9uczoge1tfOiBzdHJpbmddOiBIVE1MRWxlbWVudH07XG4gICAgX2ludGVyYWN0aXZlOiA/Ym9vbGVhbjtcbiAgICBfc2hvd1RpbGVCb3VuZGFyaWVzOiA/Ym9vbGVhbjtcbiAgICBfc2hvd0NvbGxpc2lvbkJveGVzOiA/Ym9vbGVhbjtcbiAgICBfc2hvd1BhZGRpbmc6ID9ib29sZWFuO1xuICAgIF9zaG93T3ZlcmRyYXdJbnNwZWN0b3I6IGJvb2xlYW47XG4gICAgX3JlcGFpbnQ6ID9ib29sZWFuO1xuICAgIF92ZXJ0aWNlczogP2Jvb2xlYW47XG4gICAgX2NhbnZhczogSFRNTENhbnZhc0VsZW1lbnQ7XG4gICAgX21heFRpbGVDYWNoZVNpemU6IG51bWJlcjtcbiAgICBfZnJhbWU6ID9DYW5jZWxhYmxlO1xuICAgIF9zdHlsZURpcnR5OiA/Ym9vbGVhbjtcbiAgICBfc291cmNlc0RpcnR5OiA/Ym9vbGVhbjtcbiAgICBfcGxhY2VtZW50RGlydHk6ID9ib29sZWFuO1xuICAgIF9sb2FkZWQ6IGJvb2xlYW47XG4gICAgLy8gYWNjb3VudHMgZm9yIHBsYWNlbWVudCBmaW5pc2hpbmcgYXMgd2VsbFxuICAgIF9mdWxseUxvYWRlZDogYm9vbGVhbjtcbiAgICBfdHJhY2tSZXNpemU6IGJvb2xlYW47XG4gICAgX3ByZXNlcnZlRHJhd2luZ0J1ZmZlcjogYm9vbGVhbjtcbiAgICBfZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDogYm9vbGVhbjtcbiAgICBfYW50aWFsaWFzOiBib29sZWFuO1xuICAgIF9yZWZyZXNoRXhwaXJlZFRpbGVzOiBib29sZWFuO1xuICAgIF9oYXNoOiBIYXNoO1xuICAgIF9kZWxlZ2F0ZWRMaXN0ZW5lcnM6IGFueTtcbiAgICBfZmFkZUR1cmF0aW9uOiBudW1iZXI7XG4gICAgX2Nyb3NzU291cmNlQ29sbGlzaW9uczogYm9vbGVhbjtcbiAgICBfY3Jvc3NGYWRpbmdGYWN0b3I6IG51bWJlcjtcbiAgICBfY29sbGVjdFJlc291cmNlVGltaW5nOiBib29sZWFuO1xuICAgIF9yZW5kZXJUYXNrUXVldWU6IFRhc2tRdWV1ZTtcbiAgICBfY29udHJvbHM6IEFycmF5PElDb250cm9sPjtcbiAgICBfbWFwSWQ6IG51bWJlcjtcbiAgICBfbG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5OiBzdHJpbmc7XG4gICAgX3JlcXVlc3RNYW5hZ2VyOiBSZXF1ZXN0TWFuYWdlcjtcbiAgICBfbG9jYWxlOiBPYmplY3Q7XG4gICAgX3JlbW92ZWQ6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWFwJ3Mge0BsaW5rIFNjcm9sbFpvb21IYW5kbGVyfSwgd2hpY2ggaW1wbGVtZW50cyB6b29taW5nIGluIGFuZCBvdXQgd2l0aCBhIHNjcm9sbCB3aGVlbCBvciB0cmFja3BhZC5cbiAgICAgKiBGaW5kIG1vcmUgZGV0YWlscyBhbmQgZXhhbXBsZXMgdXNpbmcgYHNjcm9sbFpvb21gIGluIHRoZSB7QGxpbmsgU2Nyb2xsWm9vbUhhbmRsZXJ9IHNlY3Rpb24uXG4gICAgICovXG4gICAgc2Nyb2xsWm9vbTogU2Nyb2xsWm9vbUhhbmRsZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWFwJ3Mge0BsaW5rIEJveFpvb21IYW5kbGVyfSwgd2hpY2ggaW1wbGVtZW50cyB6b29taW5nIHVzaW5nIGEgZHJhZyBnZXN0dXJlIHdpdGggdGhlIFNoaWZ0IGtleSBwcmVzc2VkLlxuICAgICAqIEZpbmQgbW9yZSBkZXRhaWxzIGFuZCBleGFtcGxlcyB1c2luZyBgYm94Wm9vbWAgaW4gdGhlIHtAbGluayBCb3hab29tSGFuZGxlcn0gc2VjdGlvbi5cbiAgICAgKi9cbiAgICBib3hab29tOiBCb3hab29tSGFuZGxlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXAncyB7QGxpbmsgRHJhZ1JvdGF0ZUhhbmRsZXJ9LCB3aGljaCBpbXBsZW1lbnRzIHJvdGF0aW5nIHRoZSBtYXAgd2hpbGUgZHJhZ2dpbmcgd2l0aCB0aGUgcmlnaHRcbiAgICAgKiBtb3VzZSBidXR0b24gb3Igd2l0aCB0aGUgQ29udHJvbCBrZXkgcHJlc3NlZC4gRmluZCBtb3JlIGRldGFpbHMgYW5kIGV4YW1wbGVzIHVzaW5nIGBkcmFnUm90YXRlYFxuICAgICAqIGluIHRoZSB7QGxpbmsgRHJhZ1JvdGF0ZUhhbmRsZXJ9IHNlY3Rpb24uXG4gICAgICovXG4gICAgZHJhZ1JvdGF0ZTogRHJhZ1JvdGF0ZUhhbmRsZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWFwJ3Mge0BsaW5rIERyYWdQYW5IYW5kbGVyfSwgd2hpY2ggaW1wbGVtZW50cyBkcmFnZ2luZyB0aGUgbWFwIHdpdGggYSBtb3VzZSBvciB0b3VjaCBnZXN0dXJlLlxuICAgICAqIEZpbmQgbW9yZSBkZXRhaWxzIGFuZCBleGFtcGxlcyB1c2luZyBgZHJhZ1BhbmAgaW4gdGhlIHtAbGluayBEcmFnUGFuSGFuZGxlcn0gc2VjdGlvbi5cbiAgICAgKi9cbiAgICBkcmFnUGFuOiBEcmFnUGFuSGFuZGxlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXAncyB7QGxpbmsgS2V5Ym9hcmRIYW5kbGVyfSwgd2hpY2ggYWxsb3dzIHRoZSB1c2VyIHRvIHpvb20sIHJvdGF0ZSwgYW5kIHBhbiB0aGUgbWFwIHVzaW5nIGtleWJvYXJkXG4gICAgICogc2hvcnRjdXRzLiBGaW5kIG1vcmUgZGV0YWlscyBhbmQgZXhhbXBsZXMgdXNpbmcgYGtleWJvYXJkYCBpbiB0aGUge0BsaW5rIEtleWJvYXJkSGFuZGxlcn0gc2VjdGlvbi5cbiAgICAgKi9cbiAgICBrZXlib2FyZDogS2V5Ym9hcmRIYW5kbGVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1hcCdzIHtAbGluayBEb3VibGVDbGlja1pvb21IYW5kbGVyfSwgd2hpY2ggYWxsb3dzIHRoZSB1c2VyIHRvIHpvb20gYnkgZG91YmxlIGNsaWNraW5nLlxuICAgICAqIEZpbmQgbW9yZSBkZXRhaWxzIGFuZCBleGFtcGxlcyB1c2luZyBgZG91YmxlQ2xpY2tab29tYCBpbiB0aGUge0BsaW5rIERvdWJsZUNsaWNrWm9vbUhhbmRsZXJ9IHNlY3Rpb24uXG4gICAgICovXG4gICAgZG91YmxlQ2xpY2tab29tOiBEb3VibGVDbGlja1pvb21IYW5kbGVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1hcCdzIHtAbGluayBUb3VjaFpvb21Sb3RhdGVIYW5kbGVyfSwgd2hpY2ggYWxsb3dzIHRoZSB1c2VyIHRvIHpvb20gb3Igcm90YXRlIHRoZSBtYXAgd2l0aCB0b3VjaCBnZXN0dXJlcy5cbiAgICAgKiBGaW5kIG1vcmUgZGV0YWlscyBhbmQgZXhhbXBsZXMgdXNpbmcgYHRvdWNoWm9vbVJvdGF0ZWAgaW4gdGhlIHtAbGluayBUb3VjaFpvb21Sb3RhdGVIYW5kbGVyfSBzZWN0aW9uLlxuICAgICAqL1xuICAgIHRvdWNoWm9vbVJvdGF0ZTogVG91Y2hab29tUm90YXRlSGFuZGxlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXAncyB7QGxpbmsgVG91Y2hQaXRjaEhhbmRsZXJ9LCB3aGljaCBhbGxvd3MgdGhlIHVzZXIgdG8gcGl0Y2ggdGhlIG1hcCB3aXRoIHRvdWNoIGdlc3R1cmVzLlxuICAgICAqIEZpbmQgbW9yZSBkZXRhaWxzIGFuZCBleGFtcGxlcyB1c2luZyBgdG91Y2hQaXRjaGAgaW4gdGhlIHtAbGluayBUb3VjaFBpdGNoSGFuZGxlcn0gc2VjdGlvbi5cbiAgICAgKi9cbiAgICB0b3VjaFBpdGNoOiBUb3VjaFBpdGNoSGFuZGxlcjtcblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE1hcE9wdGlvbnMpIHtcbiAgICAgICAgUGVyZm9ybWFuY2VVdGlscy5tYXJrKFBlcmZvcm1hbmNlTWFya2Vycy5jcmVhdGUpO1xuXG4gICAgICAgIG9wdGlvbnMgPSBleHRlbmQoe30sIGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcblxuICAgICAgICBpZiAob3B0aW9ucy5taW5ab29tICE9IG51bGwgJiYgb3B0aW9ucy5tYXhab29tICE9IG51bGwgJiYgb3B0aW9ucy5taW5ab29tID4gb3B0aW9ucy5tYXhab29tKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG1heFpvb20gbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gbWluWm9vbWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMubWluUGl0Y2ggIT0gbnVsbCAmJiBvcHRpb25zLm1heFBpdGNoICE9IG51bGwgJiYgb3B0aW9ucy5taW5QaXRjaCA+IG9wdGlvbnMubWF4UGl0Y2gpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbWF4UGl0Y2ggbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gbWluUGl0Y2hgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLm1pblBpdGNoICE9IG51bGwgJiYgb3B0aW9ucy5taW5QaXRjaCA8IGRlZmF1bHRNaW5QaXRjaCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBtaW5QaXRjaCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAke2RlZmF1bHRNaW5QaXRjaH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLm1heFBpdGNoICE9IG51bGwgJiYgb3B0aW9ucy5tYXhQaXRjaCA+IGRlZmF1bHRNYXhQaXRjaCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBtYXhQaXRjaCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAke2RlZmF1bHRNYXhQaXRjaH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IG5ldyBUcmFuc2Zvcm0ob3B0aW9ucy5taW5ab29tLCBvcHRpb25zLm1heFpvb20sIG9wdGlvbnMubWluUGl0Y2gsIG9wdGlvbnMubWF4UGl0Y2gsIG9wdGlvbnMucmVuZGVyV29ybGRDb3BpZXMpO1xuICAgICAgICBzdXBlcih0cmFuc2Zvcm0sIG9wdGlvbnMpO1xuXG4gICAgICAgIHRoaXMuX2ludGVyYWN0aXZlID0gb3B0aW9ucy5pbnRlcmFjdGl2ZTtcbiAgICAgICAgdGhpcy5fbWF4VGlsZUNhY2hlU2l6ZSA9IG9wdGlvbnMubWF4VGlsZUNhY2hlU2l6ZTtcbiAgICAgICAgdGhpcy5fZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCA9IG9wdGlvbnMuZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDtcbiAgICAgICAgdGhpcy5fcHJlc2VydmVEcmF3aW5nQnVmZmVyID0gb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI7XG4gICAgICAgIHRoaXMuX2FudGlhbGlhcyA9IG9wdGlvbnMuYW50aWFsaWFzO1xuICAgICAgICB0aGlzLl90cmFja1Jlc2l6ZSA9IG9wdGlvbnMudHJhY2tSZXNpemU7XG4gICAgICAgIHRoaXMuX2JlYXJpbmdTbmFwID0gb3B0aW9ucy5iZWFyaW5nU25hcDtcbiAgICAgICAgdGhpcy5fcmVmcmVzaEV4cGlyZWRUaWxlcyA9IG9wdGlvbnMucmVmcmVzaEV4cGlyZWRUaWxlcztcbiAgICAgICAgdGhpcy5fZmFkZUR1cmF0aW9uID0gb3B0aW9ucy5mYWRlRHVyYXRpb247XG4gICAgICAgIHRoaXMuX2Nyb3NzU291cmNlQ29sbGlzaW9ucyA9IG9wdGlvbnMuY3Jvc3NTb3VyY2VDb2xsaXNpb25zO1xuICAgICAgICB0aGlzLl9jcm9zc0ZhZGluZ0ZhY3RvciA9IDE7XG4gICAgICAgIHRoaXMuX2NvbGxlY3RSZXNvdXJjZVRpbWluZyA9IG9wdGlvbnMuY29sbGVjdFJlc291cmNlVGltaW5nO1xuICAgICAgICB0aGlzLl9yZW5kZXJUYXNrUXVldWUgPSBuZXcgVGFza1F1ZXVlKCk7XG4gICAgICAgIHRoaXMuX2NvbnRyb2xzID0gW107XG4gICAgICAgIHRoaXMuX21hcElkID0gdW5pcXVlSWQoKTtcbiAgICAgICAgdGhpcy5fbG9jYWxlID0gZXh0ZW5kKHt9LCBkZWZhdWx0TG9jYWxlLCBvcHRpb25zLmxvY2FsZSk7XG5cbiAgICAgICAgdGhpcy5fcmVxdWVzdE1hbmFnZXIgPSBuZXcgUmVxdWVzdE1hbmFnZXIob3B0aW9ucy50cmFuc2Zvcm1SZXF1ZXN0LCBvcHRpb25zLmFjY2Vzc1Rva2VuKTtcblxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuY29udGFpbmVyID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyID0gd2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG9wdGlvbnMuY29udGFpbmVyKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5fY29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb250YWluZXIgJyR7b3B0aW9ucy5jb250YWluZXJ9JyBub3QgZm91bmQuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5jb250YWluZXIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyID0gb3B0aW9ucy5jb250YWluZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdHlwZTogJ2NvbnRhaW5lcicgbXVzdCBiZSBhIFN0cmluZyBvciBIVE1MRWxlbWVudC5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLm1heEJvdW5kcykge1xuICAgICAgICAgICAgdGhpcy5zZXRNYXhCb3VuZHMob3B0aW9ucy5tYXhCb3VuZHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgYmluZEFsbChbXG4gICAgICAgICAgICAnX29uV2luZG93T25saW5lJyxcbiAgICAgICAgICAgICdfb25XaW5kb3dSZXNpemUnLFxuICAgICAgICAgICAgJ19jb250ZXh0TG9zdCcsXG4gICAgICAgICAgICAnX2NvbnRleHRSZXN0b3JlZCdcbiAgICAgICAgXSwgdGhpcyk7XG5cbiAgICAgICAgdGhpcy5fc2V0dXBDb250YWluZXIoKTtcbiAgICAgICAgdGhpcy5fc2V0dXBQYWludGVyKCk7XG4gICAgICAgIGlmICh0aGlzLnBhaW50ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gaW5pdGlhbGl6ZSBXZWJHTC5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub24oJ21vdmUnLCAoKSA9PiB0aGlzLl91cGRhdGUoZmFsc2UpKTtcbiAgICAgICAgdGhpcy5vbignbW92ZWVuZCcsICgpID0+IHRoaXMuX3VwZGF0ZShmYWxzZSkpO1xuICAgICAgICB0aGlzLm9uKCd6b29tJywgKCkgPT4gdGhpcy5fdXBkYXRlKHRydWUpKTtcblxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvbmxpbmUnLCB0aGlzLl9vbldpbmRvd09ubGluZSwgZmFsc2UpO1xuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX29uV2luZG93UmVzaXplLCBmYWxzZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhhbmRsZXJzID0gbmV3IEhhbmRsZXJNYW5hZ2VyKHRoaXMsIG9wdGlvbnMpO1xuXG4gICAgICAgIGNvbnN0IGhhc2hOYW1lID0gKHR5cGVvZiBvcHRpb25zLmhhc2ggPT09ICdzdHJpbmcnICYmIG9wdGlvbnMuaGFzaCkgfHwgdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLl9oYXNoID0gb3B0aW9ucy5oYXNoICYmIChuZXcgSGFzaChoYXNoTmFtZSkpLmFkZFRvKHRoaXMpO1xuICAgICAgICAvLyBkb24ndCBzZXQgcG9zaXRpb24gZnJvbSBvcHRpb25zIGlmIHNldCB0aHJvdWdoIGhhc2hcbiAgICAgICAgaWYgKCF0aGlzLl9oYXNoIHx8ICF0aGlzLl9oYXNoLl9vbkhhc2hDaGFuZ2UoKSkge1xuICAgICAgICAgICAgdGhpcy5qdW1wVG8oe1xuICAgICAgICAgICAgICAgIGNlbnRlcjogb3B0aW9ucy5jZW50ZXIsXG4gICAgICAgICAgICAgICAgem9vbTogb3B0aW9ucy56b29tLFxuICAgICAgICAgICAgICAgIGJlYXJpbmc6IG9wdGlvbnMuYmVhcmluZyxcbiAgICAgICAgICAgICAgICBwaXRjaDogb3B0aW9ucy5waXRjaFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zLmJvdW5kcykge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzaXplKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5maXRCb3VuZHMob3B0aW9ucy5ib3VuZHMsIGV4dGVuZCh7fSwgb3B0aW9ucy5maXRCb3VuZHNPcHRpb25zLCB7ZHVyYXRpb246IDB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlc2l6ZSgpO1xuXG4gICAgICAgIHRoaXMuX2xvY2FsSWRlb2dyYXBoRm9udEZhbWlseSA9IG9wdGlvbnMubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5O1xuICAgICAgICBpZiAob3B0aW9ucy5zdHlsZSkgdGhpcy5zZXRTdHlsZShvcHRpb25zLnN0eWxlLCB7bG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5OiBvcHRpb25zLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseX0pO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmF0dHJpYnV0aW9uQ29udHJvbClcbiAgICAgICAgICAgIHRoaXMuYWRkQ29udHJvbChuZXcgQXR0cmlidXRpb25Db250cm9sKHtjdXN0b21BdHRyaWJ1dGlvbjogb3B0aW9ucy5jdXN0b21BdHRyaWJ1dGlvbn0pKTtcblxuICAgICAgICB0aGlzLmFkZENvbnRyb2wobmV3IExvZ29Db250cm9sKCksIG9wdGlvbnMubG9nb1Bvc2l0aW9uKTtcblxuICAgICAgICB0aGlzLm9uKCdzdHlsZS5sb2FkJywgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMudHJhbnNmb3JtLnVubW9kaWZpZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmp1bXBUbygodGhpcy5zdHlsZS5zdHlsZXNoZWV0OiBhbnkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMub24oJ2RhdGEnLCAoZXZlbnQ6IE1hcERhdGFFdmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlKGV2ZW50LmRhdGFUeXBlID09PSAnc3R5bGUnKTtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoYCR7ZXZlbnQuZGF0YVR5cGV9ZGF0YWAsIGV2ZW50KSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9uKCdkYXRhbG9hZGluZycsIChldmVudDogTWFwRGF0YUV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KGAke2V2ZW50LmRhdGFUeXBlfWRhdGFsb2FkaW5nYCwgZXZlbnQpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLypcbiAgICAqIFJldHVybnMgYSB1bmlxdWUgbnVtYmVyIGZvciB0aGlzIG1hcCBpbnN0YW5jZSB3aGljaCBpcyB1c2VkIGZvciB0aGUgTWFwTG9hZEV2ZW50XG4gICAgKiB0byBtYWtlIHN1cmUgd2Ugb25seSBmaXJlIG9uZSBldmVudCBwZXIgaW5zdGFudGlhdGVkIG1hcCBvYmplY3QuXG4gICAgKiBAcHJpdmF0ZVxuICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAqL1xuICAgIF9nZXRNYXBJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21hcElkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYW4ge0BsaW5rIElDb250cm9sfSB0byB0aGUgbWFwLCBjYWxsaW5nIGBjb250cm9sLm9uQWRkKHRoaXMpYC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7SUNvbnRyb2x9IGNvbnRyb2wgVGhlIHtAbGluayBJQ29udHJvbH0gdG8gYWRkLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbcG9zaXRpb25dIHBvc2l0aW9uIG9uIHRoZSBtYXAgdG8gd2hpY2ggdGhlIGNvbnRyb2wgd2lsbCBiZSBhZGRlZC5cbiAgICAgKiBWYWxpZCB2YWx1ZXMgYXJlIGAndG9wLWxlZnQnYCwgYCd0b3AtcmlnaHQnYCwgYCdib3R0b20tbGVmdCdgLCBhbmQgYCdib3R0b20tcmlnaHQnYC4gRGVmYXVsdHMgdG8gYCd0b3AtcmlnaHQnYC5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEFkZCB6b29tIGFuZCByb3RhdGlvbiBjb250cm9scyB0byB0aGUgbWFwLlxuICAgICAqIG1hcC5hZGRDb250cm9sKG5ldyBtYXBib3hnbC5OYXZpZ2F0aW9uQ29udHJvbCgpKTtcbiAgICAgKiBAc2VlIFtEaXNwbGF5IG1hcCBuYXZpZ2F0aW9uIGNvbnRyb2xzXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL25hdmlnYXRpb24vKVxuICAgICAqL1xuICAgIGFkZENvbnRyb2woY29udHJvbDogSUNvbnRyb2wsIHBvc2l0aW9uPzogQ29udHJvbFBvc2l0aW9uKSB7XG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gdW5kZWZpbmVkICYmIGNvbnRyb2wuZ2V0RGVmYXVsdFBvc2l0aW9uKSB7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IGNvbnRyb2wuZ2V0RGVmYXVsdFBvc2l0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gJ3RvcC1yaWdodCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjb250cm9sIHx8ICFjb250cm9sLm9uQWRkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAnSW52YWxpZCBhcmd1bWVudCB0byBtYXAuYWRkQ29udHJvbCgpLiBBcmd1bWVudCBtdXN0IGJlIGEgY29udHJvbCB3aXRoIG9uQWRkIGFuZCBvblJlbW92ZSBtZXRob2RzLicpKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29udHJvbEVsZW1lbnQgPSBjb250cm9sLm9uQWRkKHRoaXMpO1xuICAgICAgICB0aGlzLl9jb250cm9scy5wdXNoKGNvbnRyb2wpO1xuXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uQ29udGFpbmVyID0gdGhpcy5fY29udHJvbFBvc2l0aW9uc1twb3NpdGlvbl07XG4gICAgICAgIGlmIChwb3NpdGlvbi5pbmRleE9mKCdib3R0b20nKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHBvc2l0aW9uQ29udGFpbmVyLmluc2VydEJlZm9yZShjb250cm9sRWxlbWVudCwgcG9zaXRpb25Db250YWluZXIuZmlyc3RDaGlsZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwb3NpdGlvbkNvbnRhaW5lci5hcHBlbmRDaGlsZChjb250cm9sRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgY29udHJvbCBmcm9tIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0lDb250cm9sfSBjb250cm9sIFRoZSB7QGxpbmsgSUNvbnRyb2x9IHRvIHJlbW92ZS5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIERlZmluZSBhIG5ldyBuYXZpZ2F0aW9uIGNvbnRyb2wuXG4gICAgICogdmFyIG5hdmlnYXRpb24gPSBuZXcgbWFwYm94Z2wuTmF2aWdhdGlvbkNvbnRyb2woKTtcbiAgICAgKiAvLyBBZGQgem9vbSBhbmQgcm90YXRpb24gY29udHJvbHMgdG8gdGhlIG1hcC5cbiAgICAgKiBtYXAuYWRkQ29udHJvbChuYXZpZ2F0aW9uKTtcbiAgICAgKiAvLyBSZW1vdmUgem9vbSBhbmQgcm90YXRpb24gY29udHJvbHMgZnJvbSB0aGUgbWFwLlxuICAgICAqIG1hcC5yZW1vdmVDb250cm9sKG5hdmlnYXRpb24pO1xuICAgICAqL1xuICAgIHJlbW92ZUNvbnRyb2woY29udHJvbDogSUNvbnRyb2wpIHtcbiAgICAgICAgaWYgKCFjb250cm9sIHx8ICFjb250cm9sLm9uUmVtb3ZlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAnSW52YWxpZCBhcmd1bWVudCB0byBtYXAucmVtb3ZlQ29udHJvbCgpLiBBcmd1bWVudCBtdXN0IGJlIGEgY29udHJvbCB3aXRoIG9uQWRkIGFuZCBvblJlbW92ZSBtZXRob2RzLicpKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2kgPSB0aGlzLl9jb250cm9scy5pbmRleE9mKGNvbnRyb2wpO1xuICAgICAgICBpZiAoY2kgPiAtMSkgdGhpcy5fY29udHJvbHMuc3BsaWNlKGNpLCAxKTtcbiAgICAgICAgY29udHJvbC5vblJlbW92ZSh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzaXplcyB0aGUgbWFwIGFjY29yZGluZyB0byB0aGUgZGltZW5zaW9ucyBvZiBpdHNcbiAgICAgKiBgY29udGFpbmVyYCBlbGVtZW50LlxuICAgICAqXG4gICAgICogQ2hlY2tzIGlmIHRoZSBtYXAgY29udGFpbmVyIHNpemUgY2hhbmdlZCBhbmQgdXBkYXRlcyB0aGUgbWFwIGlmIGl0IGhhcyBjaGFuZ2VkLlxuICAgICAqIFRoaXMgbWV0aG9kIG11c3QgYmUgY2FsbGVkIGFmdGVyIHRoZSBtYXAncyBgY29udGFpbmVyYCBpcyByZXNpemVkIHByb2dyYW1tYXRpY2FsbHlcbiAgICAgKiBvciB3aGVuIHRoZSBtYXAgaXMgc2hvd24gYWZ0ZXIgYmVpbmcgaW5pdGlhbGx5IGhpZGRlbiB3aXRoIENTUy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIHBhc3NlZCB0byBgbW92ZXN0YXJ0YCwgYG1vdmVgLCBgcmVzaXplYCwgYW5kIGBtb3ZlZW5kYFxuICAgICAqICAgZXZlbnRzIHRoYXQgZ2V0IHRyaWdnZXJlZCBhcyBhIHJlc3VsdCBvZiByZXNpemUuIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgZGlmZmVyZW50aWF0aW5nIHRoZVxuICAgICAqICAgc291cmNlIG9mIGFuIGV2ZW50IChmb3IgZXhhbXBsZSwgdXNlci1pbml0aWF0ZWQgb3IgcHJvZ3JhbW1hdGljYWxseS10cmlnZ2VyZWQgZXZlbnRzKS5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIFJlc2l6ZSB0aGUgbWFwIHdoZW4gdGhlIG1hcCBjb250YWluZXIgaXMgc2hvd25cbiAgICAgKiAvLyBhZnRlciBiZWluZyBpbml0aWFsbHkgaGlkZGVuIHdpdGggQ1NTLlxuICAgICAqIHZhciBtYXBEaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFwJyk7XG4gICAgICogaWYgKG1hcERpdi5zdHlsZS52aXNpYmlsaXR5ID09PSB0cnVlKSBtYXAucmVzaXplKCk7XG4gICAgICovXG4gICAgcmVzaXplKGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICBjb25zdCBkaW1lbnNpb25zID0gdGhpcy5fY29udGFpbmVyRGltZW5zaW9ucygpO1xuICAgICAgICBjb25zdCB3aWR0aCA9IGRpbWVuc2lvbnNbMF07XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IGRpbWVuc2lvbnNbMV07XG5cbiAgICAgICAgdGhpcy5fcmVzaXplQ2FudmFzKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB0aGlzLnRyYW5zZm9ybS5yZXNpemUod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHRoaXMucGFpbnRlci5yZXNpemUod2lkdGgsIGhlaWdodCk7XG5cbiAgICAgICAgY29uc3QgZmlyZU1vdmluZyA9ICF0aGlzLl9tb3Zpbmc7XG4gICAgICAgIGlmIChmaXJlTW92aW5nKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3AoKTtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ21vdmVzdGFydCcsIGV2ZW50RGF0YSkpXG4gICAgICAgICAgICAgICAgLmZpcmUobmV3IEV2ZW50KCdtb3ZlJywgZXZlbnREYXRhKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdyZXNpemUnLCBldmVudERhdGEpKTtcblxuICAgICAgICBpZiAoZmlyZU1vdmluZykgdGhpcy5maXJlKG5ldyBFdmVudCgnbW92ZWVuZCcsIGV2ZW50RGF0YSkpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG1hcCdzIGdlb2dyYXBoaWNhbCBib3VuZHMuIFdoZW4gdGhlIGJlYXJpbmcgb3IgcGl0Y2ggaXMgbm9uLXplcm8sIHRoZSB2aXNpYmxlIHJlZ2lvbiBpcyBub3RcbiAgICAgKiBhbiBheGlzLWFsaWduZWQgcmVjdGFuZ2xlLCBhbmQgdGhlIHJlc3VsdCBpcyB0aGUgc21hbGxlc3QgYm91bmRzIHRoYXQgZW5jb21wYXNzZXMgdGhlIHZpc2libGUgcmVnaW9uLlxuICAgICAqIEByZXR1cm5zIHtMbmdMYXRCb3VuZHN9IFRoZSBnZW9ncmFwaGljYWwgYm91bmRzIG9mIHRoZSBtYXAgYXMge0BsaW5rIExuZ0xhdEJvdW5kc30uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgYm91bmRzID0gbWFwLmdldEJvdW5kcygpO1xuICAgICAqL1xuICAgIGdldEJvdW5kcygpOiBMbmdMYXRCb3VuZHMge1xuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm0uZ2V0Qm91bmRzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbWF4aW11bSBnZW9ncmFwaGljYWwgYm91bmRzIHRoZSBtYXAgaXMgY29uc3RyYWluZWQgdG8sIG9yIGBudWxsYCBpZiBub25lIHNldC5cbiAgICAgKiBAcmV0dXJucyBUaGUgbWFwIG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBtYXhCb3VuZHMgPSBtYXAuZ2V0TWF4Qm91bmRzKCk7XG4gICAgICovXG4gICAgZ2V0TWF4Qm91bmRzKCk6IExuZ0xhdEJvdW5kcyB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm0uZ2V0TWF4Qm91bmRzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBvciBjbGVhcnMgdGhlIG1hcCdzIGdlb2dyYXBoaWNhbCBib3VuZHMuXG4gICAgICpcbiAgICAgKiBQYW4gYW5kIHpvb20gb3BlcmF0aW9ucyBhcmUgY29uc3RyYWluZWQgd2l0aGluIHRoZXNlIGJvdW5kcy5cbiAgICAgKiBJZiBhIHBhbiBvciB6b29tIGlzIHBlcmZvcm1lZCB0aGF0IHdvdWxkXG4gICAgICogZGlzcGxheSByZWdpb25zIG91dHNpZGUgdGhlc2UgYm91bmRzLCB0aGUgbWFwIHdpbGxcbiAgICAgKiBpbnN0ZWFkIGRpc3BsYXkgYSBwb3NpdGlvbiBhbmQgem9vbSBsZXZlbFxuICAgICAqIGFzIGNsb3NlIGFzIHBvc3NpYmxlIHRvIHRoZSBvcGVyYXRpb24ncyByZXF1ZXN0IHdoaWxlIHN0aWxsXG4gICAgICogcmVtYWluaW5nIHdpdGhpbiB0aGUgYm91bmRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtMbmdMYXRCb3VuZHNMaWtlIHwgbnVsbCB8IHVuZGVmaW5lZH0gYm91bmRzIFRoZSBtYXhpbXVtIGJvdW5kcyB0byBzZXQuIElmIGBudWxsYCBvciBgdW5kZWZpbmVkYCBpcyBwcm92aWRlZCwgdGhlIGZ1bmN0aW9uIHJlbW92ZXMgdGhlIG1hcCdzIG1heGltdW0gYm91bmRzLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gRGVmaW5lIGJvdW5kcyB0aGF0IGNvbmZvcm0gdG8gdGhlIGBMbmdMYXRCb3VuZHNMaWtlYCBvYmplY3QuXG4gICAgICogdmFyIGJvdW5kcyA9IFtcbiAgICAgKiAgIFstNzQuMDQ3MjgsIDQwLjY4MzkyXSwgLy8gW3dlc3QsIHNvdXRoXVxuICAgICAqICAgWy03My45MTA1OCwgNDAuODc3NjRdICAvLyBbZWFzdCwgbm9ydGhdXG4gICAgICogXTtcbiAgICAgKiAvLyBTZXQgdGhlIG1hcCdzIG1heCBib3VuZHMuXG4gICAgICogbWFwLnNldE1heEJvdW5kcyhib3VuZHMpO1xuICAgICAqL1xuICAgIHNldE1heEJvdW5kcyhib3VuZHM6IExuZ0xhdEJvdW5kc0xpa2UpIHtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm0uc2V0TWF4Qm91bmRzKExuZ0xhdEJvdW5kcy5jb252ZXJ0KGJvdW5kcykpO1xuICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBvciBjbGVhcnMgdGhlIG1hcCdzIG1pbmltdW0gem9vbSBsZXZlbC5cbiAgICAgKiBJZiB0aGUgbWFwJ3MgY3VycmVudCB6b29tIGxldmVsIGlzIGxvd2VyIHRoYW4gdGhlIG5ldyBtaW5pbXVtLFxuICAgICAqIHRoZSBtYXAgd2lsbCB6b29tIHRvIHRoZSBuZXcgbWluaW11bS5cbiAgICAgKlxuICAgICAqIEl0IGlzIG5vdCBhbHdheXMgcG9zc2libGUgdG8gem9vbSBvdXQgYW5kIHJlYWNoIHRoZSBzZXQgYG1pblpvb21gLlxuICAgICAqIE90aGVyIGZhY3RvcnMgc3VjaCBhcyBtYXAgaGVpZ2h0IG1heSByZXN0cmljdCB6b29taW5nLiBGb3IgZXhhbXBsZSxcbiAgICAgKiBpZiB0aGUgbWFwIGlzIDUxMnB4IHRhbGwgaXQgd2lsbCBub3QgYmUgcG9zc2libGUgdG8gem9vbSBiZWxvdyB6b29tIDBcbiAgICAgKiBubyBtYXR0ZXIgd2hhdCB0aGUgYG1pblpvb21gIGlzIHNldCB0by5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7bnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZH0gbWluWm9vbSBUaGUgbWluaW11bSB6b29tIGxldmVsIHRvIHNldCAoLTIgLSAyNCkuXG4gICAgICogICBJZiBgbnVsbGAgb3IgYHVuZGVmaW5lZGAgaXMgcHJvdmlkZWQsIHRoZSBmdW5jdGlvbiByZW1vdmVzIHRoZSBjdXJyZW50IG1pbmltdW0gem9vbSAoaS5lLiBzZXRzIGl0IHRvIC0yKS5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5zZXRNaW5ab29tKDEyLjI1KTtcbiAgICAgKi9cbiAgICBzZXRNaW5ab29tKG1pblpvb20/OiA/bnVtYmVyKSB7XG5cbiAgICAgICAgbWluWm9vbSA9IG1pblpvb20gPT09IG51bGwgfHwgbWluWm9vbSA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdE1pblpvb20gOiBtaW5ab29tO1xuXG4gICAgICAgIGlmIChtaW5ab29tID49IGRlZmF1bHRNaW5ab29tICYmIG1pblpvb20gPD0gdGhpcy50cmFuc2Zvcm0ubWF4Wm9vbSkge1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0ubWluWm9vbSA9IG1pblpvb207XG4gICAgICAgICAgICB0aGlzLl91cGRhdGUoKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0Wm9vbSgpIDwgbWluWm9vbSkgdGhpcy5zZXRab29tKG1pblpvb20pO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgICB9IGVsc2UgdGhyb3cgbmV3IEVycm9yKGBtaW5ab29tIG11c3QgYmUgYmV0d2VlbiAke2RlZmF1bHRNaW5ab29tfSBhbmQgdGhlIGN1cnJlbnQgbWF4Wm9vbSwgaW5jbHVzaXZlYCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbWFwJ3MgbWluaW11bSBhbGxvd2FibGUgem9vbSBsZXZlbC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IG1pblpvb21cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBtaW5ab29tID0gbWFwLmdldE1pblpvb20oKTtcbiAgICAgKi9cbiAgICBnZXRNaW5ab29tKCkgeyByZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWluWm9vbTsgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBvciBjbGVhcnMgdGhlIG1hcCdzIG1heGltdW0gem9vbSBsZXZlbC5cbiAgICAgKiBJZiB0aGUgbWFwJ3MgY3VycmVudCB6b29tIGxldmVsIGlzIGhpZ2hlciB0aGFuIHRoZSBuZXcgbWF4aW11bSxcbiAgICAgKiB0aGUgbWFwIHdpbGwgem9vbSB0byB0aGUgbmV3IG1heGltdW0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge251bWJlciB8IG51bGwgfCB1bmRlZmluZWR9IG1heFpvb20gVGhlIG1heGltdW0gem9vbSBsZXZlbCB0byBzZXQuXG4gICAgICogICBJZiBgbnVsbGAgb3IgYHVuZGVmaW5lZGAgaXMgcHJvdmlkZWQsIHRoZSBmdW5jdGlvbiByZW1vdmVzIHRoZSBjdXJyZW50IG1heGltdW0gem9vbSAoc2V0cyBpdCB0byAyMikuXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXAuc2V0TWF4Wm9vbSgxOC43NSk7XG4gICAgICovXG4gICAgc2V0TWF4Wm9vbShtYXhab29tPzogP251bWJlcikge1xuXG4gICAgICAgIG1heFpvb20gPSBtYXhab29tID09PSBudWxsIHx8IG1heFpvb20gPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRNYXhab29tIDogbWF4Wm9vbTtcblxuICAgICAgICBpZiAobWF4Wm9vbSA+PSB0aGlzLnRyYW5zZm9ybS5taW5ab29tKSB7XG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybS5tYXhab29tID0gbWF4Wm9vbTtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5nZXRab29tKCkgPiBtYXhab29tKSB0aGlzLnNldFpvb20obWF4Wm9vbSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAgIH0gZWxzZSB0aHJvdyBuZXcgRXJyb3IoYG1heFpvb20gbXVzdCBiZSBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgbWluWm9vbWApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG1hcCdzIG1heGltdW0gYWxsb3dhYmxlIHpvb20gbGV2ZWwuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBtYXhab29tXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgbWF4Wm9vbSA9IG1hcC5nZXRNYXhab29tKCk7XG4gICAgICovXG4gICAgZ2V0TWF4Wm9vbSgpIHsgcmV0dXJuIHRoaXMudHJhbnNmb3JtLm1heFpvb207IH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgb3IgY2xlYXJzIHRoZSBtYXAncyBtaW5pbXVtIHBpdGNoLlxuICAgICAqIElmIHRoZSBtYXAncyBjdXJyZW50IHBpdGNoIGlzIGxvd2VyIHRoYW4gdGhlIG5ldyBtaW5pbXVtLFxuICAgICAqIHRoZSBtYXAgd2lsbCBwaXRjaCB0byB0aGUgbmV3IG1pbmltdW0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge251bWJlciB8IG51bGwgfCB1bmRlZmluZWR9IG1pblBpdGNoIFRoZSBtaW5pbXVtIHBpdGNoIHRvIHNldCAoMC02MCkuXG4gICAgICogICBJZiBgbnVsbGAgb3IgYHVuZGVmaW5lZGAgaXMgcHJvdmlkZWQsIHRoZSBmdW5jdGlvbiByZW1vdmVzIHRoZSBjdXJyZW50IG1pbmltdW0gcGl0Y2ggKGkuZS4gc2V0cyBpdCB0byAwKS5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKi9cbiAgICBzZXRNaW5QaXRjaChtaW5QaXRjaD86ID9udW1iZXIpIHtcblxuICAgICAgICBtaW5QaXRjaCA9IG1pblBpdGNoID09PSBudWxsIHx8IG1pblBpdGNoID09PSB1bmRlZmluZWQgPyBkZWZhdWx0TWluUGl0Y2ggOiBtaW5QaXRjaDtcblxuICAgICAgICBpZiAobWluUGl0Y2ggPCBkZWZhdWx0TWluUGl0Y2gpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbWluUGl0Y2ggbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJHtkZWZhdWx0TWluUGl0Y2h9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWluUGl0Y2ggPj0gZGVmYXVsdE1pblBpdGNoICYmIG1pblBpdGNoIDw9IHRoaXMudHJhbnNmb3JtLm1heFBpdGNoKSB7XG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybS5taW5QaXRjaCA9IG1pblBpdGNoO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmdldFBpdGNoKCkgPCBtaW5QaXRjaCkgdGhpcy5zZXRQaXRjaChtaW5QaXRjaCk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAgIH0gZWxzZSB0aHJvdyBuZXcgRXJyb3IoYG1pblBpdGNoIG11c3QgYmUgYmV0d2VlbiAke2RlZmF1bHRNaW5QaXRjaH0gYW5kIHRoZSBjdXJyZW50IG1heFBpdGNoLCBpbmNsdXNpdmVgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBtYXAncyBtaW5pbXVtIGFsbG93YWJsZSBwaXRjaC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IG1pblBpdGNoXG4gICAgICovXG4gICAgZ2V0TWluUGl0Y2goKSB7IHJldHVybiB0aGlzLnRyYW5zZm9ybS5taW5QaXRjaDsgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBvciBjbGVhcnMgdGhlIG1hcCdzIG1heGltdW0gcGl0Y2guXG4gICAgICogSWYgdGhlIG1hcCdzIGN1cnJlbnQgcGl0Y2ggaXMgaGlnaGVyIHRoYW4gdGhlIG5ldyBtYXhpbXVtLFxuICAgICAqIHRoZSBtYXAgd2lsbCBwaXRjaCB0byB0aGUgbmV3IG1heGltdW0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge251bWJlciB8IG51bGwgfCB1bmRlZmluZWR9IG1heFBpdGNoIFRoZSBtYXhpbXVtIHBpdGNoIHRvIHNldC5cbiAgICAgKiAgIElmIGBudWxsYCBvciBgdW5kZWZpbmVkYCBpcyBwcm92aWRlZCwgdGhlIGZ1bmN0aW9uIHJlbW92ZXMgdGhlIGN1cnJlbnQgbWF4aW11bSBwaXRjaCAoc2V0cyBpdCB0byA2MCkuXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICovXG4gICAgc2V0TWF4UGl0Y2gobWF4UGl0Y2g/OiA/bnVtYmVyKSB7XG5cbiAgICAgICAgbWF4UGl0Y2ggPSBtYXhQaXRjaCA9PT0gbnVsbCB8fCBtYXhQaXRjaCA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdE1heFBpdGNoIDogbWF4UGl0Y2g7XG5cbiAgICAgICAgaWYgKG1heFBpdGNoID4gZGVmYXVsdE1heFBpdGNoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG1heFBpdGNoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICR7ZGVmYXVsdE1heFBpdGNofWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1heFBpdGNoID49IHRoaXMudHJhbnNmb3JtLm1pblBpdGNoKSB7XG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybS5tYXhQaXRjaCA9IG1heFBpdGNoO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmdldFBpdGNoKCkgPiBtYXhQaXRjaCkgdGhpcy5zZXRQaXRjaChtYXhQaXRjaCk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAgIH0gZWxzZSB0aHJvdyBuZXcgRXJyb3IoYG1heFBpdGNoIG11c3QgYmUgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IG1pblBpdGNoYCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbWFwJ3MgbWF4aW11bSBhbGxvd2FibGUgcGl0Y2guXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBtYXhQaXRjaFxuICAgICAqL1xuICAgIGdldE1heFBpdGNoKCkgeyByZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWF4UGl0Y2g7IH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHN0YXRlIG9mIGByZW5kZXJXb3JsZENvcGllc2AuIElmIGB0cnVlYCwgbXVsdGlwbGUgY29waWVzIG9mIHRoZSB3b3JsZCB3aWxsIGJlIHJlbmRlcmVkIHNpZGUgYnkgc2lkZSBiZXlvbmQgLTE4MCBhbmQgMTgwIGRlZ3JlZXMgbG9uZ2l0dWRlLiBJZiBzZXQgdG8gYGZhbHNlYDpcbiAgICAgKiAtIFdoZW4gdGhlIG1hcCBpcyB6b29tZWQgb3V0IGZhciBlbm91Z2ggdGhhdCBhIHNpbmdsZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgd29ybGQgZG9lcyBub3QgZmlsbCB0aGUgbWFwJ3MgZW50aXJlXG4gICAgICogY29udGFpbmVyLCB0aGVyZSB3aWxsIGJlIGJsYW5rIHNwYWNlIGJleW9uZCAxODAgYW5kIC0xODAgZGVncmVlcyBsb25naXR1ZGUuXG4gICAgICogLSBGZWF0dXJlcyB0aGF0IGNyb3NzIDE4MCBhbmQgLTE4MCBkZWdyZWVzIGxvbmdpdHVkZSB3aWxsIGJlIGN1dCBpbiB0d28gKHdpdGggb25lIHBvcnRpb24gb24gdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlXG4gICAgICogbWFwIGFuZCB0aGUgb3RoZXIgb24gdGhlIGxlZnQgZWRnZSBvZiB0aGUgbWFwKSBhdCBldmVyeSB6b29tIGxldmVsLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSByZW5kZXJXb3JsZENvcGllc1xuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIHdvcmxkQ29waWVzUmVuZGVyZWQgPSBtYXAuZ2V0UmVuZGVyV29ybGRDb3BpZXMoKTtcbiAgICAgKiBAc2VlIFtSZW5kZXIgd29ybGQgY29waWVzXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9yZW5kZXItd29ybGQtY29waWVzLylcbiAgICAgKi9cbiAgICBnZXRSZW5kZXJXb3JsZENvcGllcygpIHsgcmV0dXJuIHRoaXMudHJhbnNmb3JtLnJlbmRlcldvcmxkQ29waWVzOyB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdGF0ZSBvZiBgcmVuZGVyV29ybGRDb3BpZXNgLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtib29sZWFufSByZW5kZXJXb3JsZENvcGllcyBJZiBgdHJ1ZWAsIG11bHRpcGxlIGNvcGllcyBvZiB0aGUgd29ybGQgd2lsbCBiZSByZW5kZXJlZCBzaWRlIGJ5IHNpZGUgYmV5b25kIC0xODAgYW5kIDE4MCBkZWdyZWVzIGxvbmdpdHVkZS4gSWYgc2V0IHRvIGBmYWxzZWA6XG4gICAgICogLSBXaGVuIHRoZSBtYXAgaXMgem9vbWVkIG91dCBmYXIgZW5vdWdoIHRoYXQgYSBzaW5nbGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHdvcmxkIGRvZXMgbm90IGZpbGwgdGhlIG1hcCdzIGVudGlyZVxuICAgICAqIGNvbnRhaW5lciwgdGhlcmUgd2lsbCBiZSBibGFuayBzcGFjZSBiZXlvbmQgMTgwIGFuZCAtMTgwIGRlZ3JlZXMgbG9uZ2l0dWRlLlxuICAgICAqIC0gRmVhdHVyZXMgdGhhdCBjcm9zcyAxODAgYW5kIC0xODAgZGVncmVlcyBsb25naXR1ZGUgd2lsbCBiZSBjdXQgaW4gdHdvICh3aXRoIG9uZSBwb3J0aW9uIG9uIHRoZSByaWdodCBlZGdlIG9mIHRoZVxuICAgICAqIG1hcCBhbmQgdGhlIG90aGVyIG9uIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIG1hcCkgYXQgZXZlcnkgem9vbSBsZXZlbC5cbiAgICAgKlxuICAgICAqIGB1bmRlZmluZWRgIGlzIHRyZWF0ZWQgYXMgYHRydWVgLCBgbnVsbGAgaXMgdHJlYXRlZCBhcyBgZmFsc2VgLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLnNldFJlbmRlcldvcmxkQ29waWVzKHRydWUpO1xuICAgICAqIEBzZWUgW1JlbmRlciB3b3JsZCBjb3BpZXNdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3JlbmRlci13b3JsZC1jb3BpZXMvKVxuICAgICAqL1xuICAgIHNldFJlbmRlcldvcmxkQ29waWVzKHJlbmRlcldvcmxkQ29waWVzPzogP2Jvb2xlYW4pIHtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm0ucmVuZGVyV29ybGRDb3BpZXMgPSByZW5kZXJXb3JsZENvcGllcztcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSB7QGxpbmsgUG9pbnR9IHJlcHJlc2VudGluZyBwaXhlbCBjb29yZGluYXRlcywgcmVsYXRpdmUgdG8gdGhlIG1hcCdzIGBjb250YWluZXJgLFxuICAgICAqIHRoYXQgY29ycmVzcG9uZCB0byB0aGUgc3BlY2lmaWVkIGdlb2dyYXBoaWNhbCBsb2NhdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7TG5nTGF0TGlrZX0gbG5nbGF0IFRoZSBnZW9ncmFwaGljYWwgbG9jYXRpb24gdG8gcHJvamVjdC5cbiAgICAgKiBAcmV0dXJucyB7UG9pbnR9IFRoZSB7QGxpbmsgUG9pbnR9IGNvcnJlc3BvbmRpbmcgdG8gYGxuZ2xhdGAsIHJlbGF0aXZlIHRvIHRoZSBtYXAncyBgY29udGFpbmVyYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBjb29yZGluYXRlID0gWy0xMjIuNDIwNjc5LCAzNy43NzI1MzddO1xuICAgICAqIHZhciBwb2ludCA9IG1hcC5wcm9qZWN0KGNvb3JkaW5hdGUpO1xuICAgICAqL1xuICAgIHByb2plY3QobG5nbGF0OiBMbmdMYXRMaWtlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybS5sb2NhdGlvblBvaW50KExuZ0xhdC5jb252ZXJ0KGxuZ2xhdCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSB7QGxpbmsgTG5nTGF0fSByZXByZXNlbnRpbmcgZ2VvZ3JhcGhpY2FsIGNvb3JkaW5hdGVzIHRoYXQgY29ycmVzcG9uZFxuICAgICAqIHRvIHRoZSBzcGVjaWZpZWQgcGl4ZWwgY29vcmRpbmF0ZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1BvaW50TGlrZX0gcG9pbnQgVGhlIHBpeGVsIGNvb3JkaW5hdGVzIHRvIHVucHJvamVjdC5cbiAgICAgKiBAcmV0dXJucyB7TG5nTGF0fSBUaGUge0BsaW5rIExuZ0xhdH0gY29ycmVzcG9uZGluZyB0byBgcG9pbnRgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHtcbiAgICAgKiAgIC8vIFdoZW4gdGhlIG1hcCBpcyBjbGlja2VkLCBnZXQgdGhlIGdlb2dyYXBoaWMgY29vcmRpbmF0ZS5cbiAgICAgKiAgIHZhciBjb29yZGluYXRlID0gbWFwLnVucHJvamVjdChlLnBvaW50KTtcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICB1bnByb2plY3QocG9pbnQ6IFBvaW50TGlrZSkge1xuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm0ucG9pbnRMb2NhdGlvbihQb2ludC5jb252ZXJ0KHBvaW50KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBtYXAgaXMgcGFubmluZywgem9vbWluZywgcm90YXRpbmcsIG9yIHBpdGNoaW5nIGR1ZSB0byBhIGNhbWVyYSBhbmltYXRpb24gb3IgdXNlciBnZXN0dXJlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBtYXAgaXMgbW92aW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIGlzTW92aW5nID0gbWFwLmlzTW92aW5nKCk7XG4gICAgICovXG4gICAgaXNNb3ZpbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tb3ZpbmcgfHwgdGhpcy5oYW5kbGVycy5pc0FjdGl2ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbWFwIGlzIHpvb21pbmcgZHVlIHRvIGEgY2FtZXJhIGFuaW1hdGlvbiBvciB1c2VyIGdlc3R1cmUuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIG1hcCBpcyB6b29taW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIGlzWm9vbWluZyA9IG1hcC5pc1pvb21pbmcoKTtcbiAgICAgKi9cbiAgICBpc1pvb21pbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl96b29taW5nIHx8IHRoaXMuaGFuZGxlcnMuaXNab29taW5nKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBtYXAgaXMgcm90YXRpbmcgZHVlIHRvIGEgY2FtZXJhIGFuaW1hdGlvbiBvciB1c2VyIGdlc3R1cmUuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIG1hcCBpcyByb3RhdGluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5pc1JvdGF0aW5nKCk7XG4gICAgICovXG4gICAgaXNSb3RhdGluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JvdGF0aW5nIHx8IHRoaXMuaGFuZGxlcnMuaXNSb3RhdGluZygpO1xuICAgIH1cblxuICAgIF9jcmVhdGVEZWxlZ2F0ZWRMaXN0ZW5lcih0eXBlOiBNYXBFdmVudCwgbGF5ZXJJZDogYW55LCBsaXN0ZW5lcjogYW55KSB7XG4gICAgICAgIGlmICh0eXBlID09PSAnbW91c2VlbnRlcicgfHwgdHlwZSA9PT0gJ21vdXNlb3ZlcicpIHtcbiAgICAgICAgICAgIGxldCBtb3VzZWluID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBtb3VzZW1vdmUgPSAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZlYXR1cmVzID0gdGhpcy5nZXRMYXllcihsYXllcklkKSA/IHRoaXMucXVlcnlSZW5kZXJlZEZlYXR1cmVzKGUucG9pbnQsIHtsYXllcnM6IFtsYXllcklkXX0pIDogW107XG4gICAgICAgICAgICAgICAgaWYgKCFmZWF0dXJlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbW91c2VpbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIW1vdXNlaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgbW91c2VpbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLmNhbGwodGhpcywgbmV3IE1hcE1vdXNlRXZlbnQodHlwZSwgdGhpcywgZS5vcmlnaW5hbEV2ZW50LCB7ZmVhdHVyZXN9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IG1vdXNlb3V0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIG1vdXNlaW4gPSBmYWxzZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4ge2xheWVyOiBsYXllcklkLCBsaXN0ZW5lciwgZGVsZWdhdGVzOiB7bW91c2Vtb3ZlLCBtb3VzZW91dH19O1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdtb3VzZWxlYXZlJyB8fCB0eXBlID09PSAnbW91c2VvdXQnKSB7XG4gICAgICAgICAgICBsZXQgbW91c2VpbiA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgbW91c2Vtb3ZlID0gKGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlcyA9IHRoaXMuZ2V0TGF5ZXIobGF5ZXJJZCkgPyB0aGlzLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhlLnBvaW50LCB7bGF5ZXJzOiBbbGF5ZXJJZF19KSA6IFtdO1xuICAgICAgICAgICAgICAgIGlmIChmZWF0dXJlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbW91c2VpbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtb3VzZWluKSB7XG4gICAgICAgICAgICAgICAgICAgIG1vdXNlaW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIuY2FsbCh0aGlzLCBuZXcgTWFwTW91c2VFdmVudCh0eXBlLCB0aGlzLCBlLm9yaWdpbmFsRXZlbnQpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgbW91c2VvdXQgPSAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChtb3VzZWluKSB7XG4gICAgICAgICAgICAgICAgICAgIG1vdXNlaW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIuY2FsbCh0aGlzLCBuZXcgTWFwTW91c2VFdmVudCh0eXBlLCB0aGlzLCBlLm9yaWdpbmFsRXZlbnQpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHtsYXllcjogbGF5ZXJJZCwgbGlzdGVuZXIsIGRlbGVnYXRlczoge21vdXNlbW92ZSwgbW91c2VvdXR9fTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGRlbGVnYXRlID0gKGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlcyA9IHRoaXMuZ2V0TGF5ZXIobGF5ZXJJZCkgPyB0aGlzLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhlLnBvaW50LCB7bGF5ZXJzOiBbbGF5ZXJJZF19KSA6IFtdO1xuICAgICAgICAgICAgICAgIGlmIChmZWF0dXJlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSGVyZSB3ZSBuZWVkIHRvIG11dGF0ZSB0aGUgb3JpZ2luYWwgZXZlbnQsIHNvIHRoYXQgcHJldmVudERlZmF1bHQgd29ya3MgYXMgZXhwZWN0ZWQuXG4gICAgICAgICAgICAgICAgICAgIGUuZmVhdHVyZXMgPSBmZWF0dXJlcztcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIuY2FsbCh0aGlzLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGUuZmVhdHVyZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiB7bGF5ZXI6IGxheWVySWQsIGxpc3RlbmVyLCBkZWxlZ2F0ZXM6IHtbdHlwZV06IGRlbGVnYXRlfX07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgbGlzdGVuZXIgZm9yIGV2ZW50cyBvZiBhIHNwZWNpZmllZCB0eXBlLCBvcHRpb25hbGx5IGxpbWl0ZWQgdG8gZmVhdHVyZXMgaW4gYSBzcGVjaWZpZWQgc3R5bGUgbGF5ZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBUaGUgZXZlbnQgdHlwZSB0byBsaXN0ZW4gZm9yLiBFdmVudHMgY29tcGF0aWJsZSB3aXRoIHRoZSBvcHRpb25hbCBgbGF5ZXJJZGAgcGFyYW1ldGVyIGFyZSB0cmlnZ2VyZWRcbiAgICAgKiB3aGVuIHRoZSBjdXJzb3IgZW50ZXJzIGEgdmlzaWJsZSBwb3J0aW9uIG9mIHRoZSBzcGVjaWZpZWQgbGF5ZXIgZnJvbSBvdXRzaWRlIHRoYXQgbGF5ZXIgb3Igb3V0c2lkZSB0aGUgbWFwIGNhbnZhcy5cbiAgICAgKlxuICAgICAqIHwgRXZlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ29tcGF0aWJsZSB3aXRoIGBsYXllcklkYCB8XG4gICAgICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAgICAgKiB8IFtgbW91c2Vkb3duYF0oI21hcC5ldmVudDptb3VzZWRvd24pICAgICAgICAgICAgICAgICAgICAgICB8IHllcyAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgW2Btb3VzZXVwYF0oI21hcC5ldmVudDptb3VzZXVwKSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeWVzICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBbYG1vdXNlb3ZlcmBdKCNtYXAuZXZlbnQ6bW91c2VvdmVyKSAgICAgICAgICAgICAgICAgICAgICAgfCB5ZXMgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IFtgbW91c2VvdXRgXSgjbWFwLmV2ZW50Om1vdXNlb3V0KSAgICAgICAgICAgICAgICAgICAgICAgICB8IHllcyAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgW2Btb3VzZW1vdmVgXSgjbWFwLmV2ZW50Om1vdXNlbW92ZSkgICAgICAgICAgICAgICAgICAgICAgIHwgeWVzICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBbYG1vdXNlZW50ZXJgXSgjbWFwLmV2ZW50Om1vdXNlZW50ZXIpICAgICAgICAgICAgICAgICAgICAgfCB5ZXMgKHJlcXVpcmVkKSAgICAgICAgICAgIHxcbiAgICAgKiB8IFtgbW91c2VsZWF2ZWBdKCNtYXAuZXZlbnQ6bW91c2VsZWF2ZSkgICAgICAgICAgICAgICAgICAgICB8IHllcyAocmVxdWlyZWQpICAgICAgICAgICAgfFxuICAgICAqIHwgW2BjbGlja2BdKCNtYXAuZXZlbnQ6Y2xpY2spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeWVzICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBbYGRibGNsaWNrYF0oI21hcC5ldmVudDpkYmxjbGljaykgICAgICAgICAgICAgICAgICAgICAgICAgfCB5ZXMgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IFtgY29udGV4dG1lbnVgXSgjbWFwLmV2ZW50OmNvbnRleHRtZW51KSAgICAgICAgICAgICAgICAgICB8IHllcyAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgW2B0b3VjaHN0YXJ0YF0oI21hcC5ldmVudDp0b3VjaHN0YXJ0KSAgICAgICAgICAgICAgICAgICAgIHwgeWVzICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBbYHRvdWNoZW5kYF0oI21hcC5ldmVudDp0b3VjaGVuZCkgICAgICAgICAgICAgICAgICAgICAgICAgfCB5ZXMgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IFtgdG91Y2hjYW5jZWxgXSgjbWFwLmV2ZW50OnRvdWNoY2FuY2VsKSAgICAgICAgICAgICAgICAgICB8IHllcyAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgW2B3aGVlbGBdKCNtYXAuZXZlbnQ6d2hlZWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBbYHJlc2l6ZWBdKCNtYXAuZXZlbnQ6cmVzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IFtgcmVtb3ZlYF0oI21hcC5ldmVudDpyZW1vdmUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgW2B0b3VjaG1vdmVgXSgjbWFwLmV2ZW50OnRvdWNobW92ZSkgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBbYG1vdmVzdGFydGBdKCNtYXAuZXZlbnQ6bW92ZXN0YXJ0KSAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IFtgbW92ZWBdKCNtYXAuZXZlbnQ6bW92ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgW2Btb3ZlZW5kYF0oI21hcC5ldmVudDptb3ZlZW5kKSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBbYGRyYWdzdGFydGBdKCNtYXAuZXZlbnQ6ZHJhZ3N0YXJ0KSAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IFtgZHJhZ2BdKCNtYXAuZXZlbnQ6ZHJhZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgW2BkcmFnZW5kYF0oI21hcC5ldmVudDpkcmFnZW5kKSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBbYHpvb21zdGFydGBdKCNtYXAuZXZlbnQ6em9vbXN0YXJ0KSAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IFtgem9vbWBdKCNtYXAuZXZlbnQ6em9vbSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgW2B6b29tZW5kYF0oI21hcC5ldmVudDp6b29tZW5kKSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBbYHJvdGF0ZXN0YXJ0YF0oI21hcC5ldmVudDpyb3RhdGVzdGFydCkgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IFtgcm90YXRlYF0oI21hcC5ldmVudDpyb3RhdGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgW2Byb3RhdGVlbmRgXSgjbWFwLmV2ZW50OnJvdGF0ZWVuZCkgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBbYHBpdGNoc3RhcnRgXSgjbWFwLmV2ZW50OnBpdGNoc3RhcnQpICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IFtgcGl0Y2hgXSgjbWFwLmV2ZW50OnBpdGNoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgW2BwaXRjaGVuZGBdKCNtYXAuZXZlbnQ6cGl0Y2hlbmQpICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBbYGJveHpvb21zdGFydGBdKCNtYXAuZXZlbnQ6Ym94em9vbXN0YXJ0KSAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IFtgYm94em9vbWVuZGBdKCNtYXAuZXZlbnQ6Ym94em9vbWVuZCkgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgW2Bib3h6b29tY2FuY2VsYF0oI21hcC5ldmVudDpib3h6b29tY2FuY2VsKSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBbYHdlYmdsY29udGV4dGxvc3RgXSgjbWFwLmV2ZW50OndlYmdsY29udGV4dGxvc3QpICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IFtgd2ViZ2xjb250ZXh0cmVzdG9yZWRgXSgjbWFwLmV2ZW50OndlYmdsY29udGV4dHJlc3RvcmVkKSB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgW2Bsb2FkYF0oI21hcC5ldmVudDpsb2FkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBbYHJlbmRlcmBdKCNtYXAuZXZlbnQ6cmVuZGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IFtgaWRsZWBdKCNtYXAuZXZlbnQ6aWRsZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgW2BlcnJvcmBdKCNtYXAuZXZlbnQ6ZXJyb3IpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBbYGRhdGFgXSgjbWFwLmV2ZW50OmRhdGEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IFtgc3R5bGVkYXRhYF0oI21hcC5ldmVudDpzdHlsZWRhdGEpICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgW2Bzb3VyY2VkYXRhYF0oI21hcC5ldmVudDpzb3VyY2VkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBbYGRhdGFsb2FkaW5nYF0oI21hcC5ldmVudDpkYXRhbG9hZGluZykgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IFtgc3R5bGVkYXRhbG9hZGluZ2BdKCNtYXAuZXZlbnQ6c3R5bGVkYXRhbG9hZGluZykgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgW2Bzb3VyY2VkYXRhbG9hZGluZ2BdKCNtYXAuZXZlbnQ6c291cmNlZGF0YWxvYWRpbmcpICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBbYHN0eWxlaW1hZ2VtaXNzaW5nYF0oI21hcC5ldmVudDpzdHlsZWltYWdlbWlzc2luZykgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllcklkIChvcHRpb25hbCkgVGhlIElEIG9mIGEgc3R5bGUgbGF5ZXIuIEV2ZW50IHdpbGwgb25seSBiZSB0cmlnZ2VyZWQgaWYgaXRzIGxvY2F0aW9uXG4gICAgICogaXMgd2l0aGluIGEgdmlzaWJsZSBmZWF0dXJlIGluIHRoaXMgbGF5ZXIuIFRoZSBldmVudCB3aWxsIGhhdmUgYSBgZmVhdHVyZXNgIHByb3BlcnR5IGNvbnRhaW5pbmdcbiAgICAgKiBhbiBhcnJheSBvZiB0aGUgbWF0Y2hpbmcgZmVhdHVyZXMuIElmIGBsYXllcklkYCBpcyBub3Qgc3VwcGxpZWQsIHRoZSBldmVudCB3aWxsIG5vdCBoYXZlIGEgYGZlYXR1cmVzYCBwcm9wZXJ0eS5cbiAgICAgKiBQbGVhc2Ugbm90ZSB0aGF0IG1hbnkgZXZlbnQgdHlwZXMgYXJlIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIG9wdGlvbmFsIGBsYXllcklkYCBwYXJhbWV0ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgVGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBldmVudCBpcyBmaXJlZC5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lciB0aGF0IHdpbGwgZmlyZVxuICAgICAqIC8vIHdoZW4gdGhlIG1hcCBoYXMgZmluaXNoZWQgbG9hZGluZ1xuICAgICAqIG1hcC5vbignbG9hZCcsIGZ1bmN0aW9uKCkge1xuICAgICAqICAgLy8gT25jZSB0aGUgbWFwIGhhcyBmaW5pc2hlZCBsb2FkaW5nLFxuICAgICAqICAgLy8gYWRkIGEgbmV3IGxheWVyXG4gICAgICogICBtYXAuYWRkTGF5ZXIoe1xuICAgICAqICAgICBpZDogJ3BvaW50cy1vZi1pbnRlcmVzdCcsXG4gICAgICogICAgIHNvdXJjZToge1xuICAgICAqICAgICAgIHR5cGU6ICd2ZWN0b3InLFxuICAgICAqICAgICAgIHVybDogJ21hcGJveDovL21hcGJveC5tYXBib3gtc3RyZWV0cy12OCdcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgJ3NvdXJjZS1sYXllcic6ICdwb2lfbGFiZWwnLFxuICAgICAqICAgICB0eXBlOiAnY2lyY2xlJyxcbiAgICAgKiAgICAgcGFpbnQ6IHtcbiAgICAgKiAgICAgICAvLyBNYXBib3ggU3R5bGUgU3BlY2lmaWNhdGlvbiBwYWludCBwcm9wZXJ0aWVzXG4gICAgICogICAgIH0sXG4gICAgICogICAgIGxheW91dDoge1xuICAgICAqICAgICAgIC8vIE1hcGJveCBTdHlsZSBTcGVjaWZpY2F0aW9uIGxheW91dCBwcm9wZXJ0aWVzXG4gICAgICogICAgIH1cbiAgICAgKiAgIH0pO1xuICAgICAqIH0pO1xuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgd2lsbCBmaXJlXG4gICAgICogLy8gd2hlbiBhIGZlYXR1cmUgb24gdGhlIGNvdW50cmllcyBsYXllciBvZiB0aGUgbWFwIGlzIGNsaWNrZWRcbiAgICAgKiBtYXAub24oJ2NsaWNrJywgJ2NvdW50cmllcycsIGZ1bmN0aW9uKGUpIHtcbiAgICAgKiAgIG5ldyBtYXBib3hnbC5Qb3B1cCgpXG4gICAgICogICAgIC5zZXRMbmdMYXQoZS5sbmdMYXQpXG4gICAgICogICAgIC5zZXRIVE1MKGBDb3VudHJ5IG5hbWU6ICR7ZS5mZWF0dXJlc1swXS5wcm9wZXJ0aWVzLm5hbWV9YClcbiAgICAgKiAgICAgLmFkZFRvKG1hcCk7XG4gICAgICogfSk7XG4gICAgICogQHNlZSBbRGlzcGxheSBwb3B1cCBvbiBjbGlja10oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvcG9wdXAtb24tY2xpY2svKVxuICAgICAqIEBzZWUgW0NlbnRlciB0aGUgbWFwIG9uIGEgY2xpY2tlZCBzeW1ib2xdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2NlbnRlci1vbi1zeW1ib2wvKVxuICAgICAqIEBzZWUgW0NyZWF0ZSBhIGhvdmVyIGVmZmVjdF0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvaG92ZXItc3R5bGVzLylcbiAgICAgKiBAc2VlIFtDcmVhdGUgYSBkcmFnZ2FibGUgbWFya2VyXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9kcmFnLWEtcG9pbnQvKVxuICAgICAqL1xuICAgIG9uKHR5cGU6IE1hcEV2ZW50LCBsYXllcklkOiBhbnksIGxpc3RlbmVyOiBhbnkpIHtcbiAgICAgICAgaWYgKGxpc3RlbmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBzdXBlci5vbih0eXBlLCBsYXllcklkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlbGVnYXRlZExpc3RlbmVyID0gdGhpcy5fY3JlYXRlRGVsZWdhdGVkTGlzdGVuZXIodHlwZSwgbGF5ZXJJZCwgbGlzdGVuZXIpO1xuXG4gICAgICAgIHRoaXMuX2RlbGVnYXRlZExpc3RlbmVycyA9IHRoaXMuX2RlbGVnYXRlZExpc3RlbmVycyB8fCB7fTtcbiAgICAgICAgdGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzW3R5cGVdID0gdGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzW3R5cGVdIHx8IFtdO1xuICAgICAgICB0aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnNbdHlwZV0ucHVzaChkZWxlZ2F0ZWRMaXN0ZW5lcik7XG5cbiAgICAgICAgZm9yIChjb25zdCBldmVudCBpbiBkZWxlZ2F0ZWRMaXN0ZW5lci5kZWxlZ2F0ZXMpIHtcbiAgICAgICAgICAgIHRoaXMub24oKGV2ZW50OiBhbnkpLCBkZWxlZ2F0ZWRMaXN0ZW5lci5kZWxlZ2F0ZXNbZXZlbnRdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBsaXN0ZW5lciB0aGF0IHdpbGwgYmUgY2FsbGVkIG9ubHkgb25jZSB0byBhIHNwZWNpZmllZCBldmVudCB0eXBlLlxuICAgICAqXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBuYW1lIG9uY2VcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgVGhlIGV2ZW50IHR5cGUgdG8gYWRkIGEgbGlzdGVuZXIgZm9yLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIFRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgZXZlbnQgaXMgZmlyZWQuXG4gICAgICogICBUaGUgbGlzdGVuZXIgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIGRhdGEgb2JqZWN0IHBhc3NlZCB0byBgZmlyZWAsXG4gICAgICogICBleHRlbmRlZCB3aXRoIGB0YXJnZXRgIGFuZCBgdHlwZWAgcHJvcGVydGllcy5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBsaXN0ZW5lciB0aGF0IHdpbGwgYmUgY2FsbGVkIG9ubHkgb25jZSB0byBhIHNwZWNpZmllZCBldmVudCB0eXBlIG9jY3VycmluZyBvbiBmZWF0dXJlcyBpbiBhIHNwZWNpZmllZCBzdHlsZSBsYXllci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFRoZSBldmVudCB0eXBlIHRvIGxpc3RlbiBmb3I7IG9uZSBvZiBgJ21vdXNlZG93bidgLCBgJ21vdXNldXAnYCwgYCdjbGljaydgLCBgJ2RibGNsaWNrJ2AsXG4gICAgICogYCdtb3VzZW1vdmUnYCwgYCdtb3VzZWVudGVyJ2AsIGAnbW91c2VsZWF2ZSdgLCBgJ21vdXNlb3ZlcidgLCBgJ21vdXNlb3V0J2AsIGAnY29udGV4dG1lbnUnYCwgYCd0b3VjaHN0YXJ0J2AsXG4gICAgICogYCd0b3VjaGVuZCdgLCBvciBgJ3RvdWNoY2FuY2VsJ2AuIGBtb3VzZWVudGVyYCBhbmQgYG1vdXNlb3ZlcmAgZXZlbnRzIGFyZSB0cmlnZ2VyZWQgd2hlbiB0aGUgY3Vyc29yIGVudGVyc1xuICAgICAqIGEgdmlzaWJsZSBwb3J0aW9uIG9mIHRoZSBzcGVjaWZpZWQgbGF5ZXIgZnJvbSBvdXRzaWRlIHRoYXQgbGF5ZXIgb3Igb3V0c2lkZSB0aGUgbWFwIGNhbnZhcy4gYG1vdXNlbGVhdmVgXG4gICAgICogYW5kIGBtb3VzZW91dGAgZXZlbnRzIGFyZSB0cmlnZ2VyZWQgd2hlbiB0aGUgY3Vyc29yIGxlYXZlcyBhIHZpc2libGUgcG9ydGlvbiBvZiB0aGUgc3BlY2lmaWVkIGxheWVyLCBvciBsZWF2ZXNcbiAgICAgKiB0aGUgbWFwIGNhbnZhcy5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJJZCBUaGUgSUQgb2YgYSBzdHlsZSBsYXllci4gT25seSBldmVudHMgd2hvc2UgbG9jYXRpb24gaXMgd2l0aGluIGEgdmlzaWJsZVxuICAgICAqIGZlYXR1cmUgaW4gdGhpcyBsYXllciB3aWxsIHRyaWdnZXIgdGhlIGxpc3RlbmVyLiBUaGUgZXZlbnQgd2lsbCBoYXZlIGEgYGZlYXR1cmVzYCBwcm9wZXJ0eSBjb250YWluaW5nXG4gICAgICogYW4gYXJyYXkgb2YgdGhlIG1hdGNoaW5nIGZlYXR1cmVzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIFRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgZXZlbnQgaXMgZmlyZWQuXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICovXG5cbiAgICBvbmNlKHR5cGU6IE1hcEV2ZW50LCBsYXllcklkOiBhbnksIGxpc3RlbmVyOiBhbnkpIHtcblxuICAgICAgICBpZiAobGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHN1cGVyLm9uY2UodHlwZSwgbGF5ZXJJZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZWxlZ2F0ZWRMaXN0ZW5lciA9IHRoaXMuX2NyZWF0ZURlbGVnYXRlZExpc3RlbmVyKHR5cGUsIGxheWVySWQsIGxpc3RlbmVyKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGV2ZW50IGluIGRlbGVnYXRlZExpc3RlbmVyLmRlbGVnYXRlcykge1xuICAgICAgICAgICAgdGhpcy5vbmNlKChldmVudDogYW55KSwgZGVsZWdhdGVkTGlzdGVuZXIuZGVsZWdhdGVzW2V2ZW50XSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFuIGV2ZW50IGxpc3RlbmVyIHByZXZpb3VzbHkgYWRkZWQgd2l0aCBgTWFwI29uYC5cbiAgICAgKlxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAbmFtZSBvZmZcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgVGhlIGV2ZW50IHR5cGUgcHJldmlvdXNseSB1c2VkIHRvIGluc3RhbGwgdGhlIGxpc3RlbmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIFRoZSBmdW5jdGlvbiBwcmV2aW91c2x5IGluc3RhbGxlZCBhcyBhIGxpc3RlbmVyLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbiBldmVudCBsaXN0ZW5lciBmb3IgbGF5ZXItc3BlY2lmaWMgZXZlbnRzIHByZXZpb3VzbHkgYWRkZWQgd2l0aCBgTWFwI29uYC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFRoZSBldmVudCB0eXBlIHByZXZpb3VzbHkgdXNlZCB0byBpbnN0YWxsIHRoZSBsaXN0ZW5lci5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJJZCBUaGUgbGF5ZXIgSUQgcHJldmlvdXNseSB1c2VkIHRvIGluc3RhbGwgdGhlIGxpc3RlbmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIFRoZSBmdW5jdGlvbiBwcmV2aW91c2x5IGluc3RhbGxlZCBhcyBhIGxpc3RlbmVyLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqL1xuICAgIG9mZih0eXBlOiBNYXBFdmVudCwgbGF5ZXJJZDogYW55LCBsaXN0ZW5lcjogYW55KSB7XG4gICAgICAgIGlmIChsaXN0ZW5lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gc3VwZXIub2ZmKHR5cGUsIGxheWVySWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVtb3ZlRGVsZWdhdGVkTGlzdGVuZXIgPSAoZGVsZWdhdGVkTGlzdGVuZXJzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSBkZWxlZ2F0ZWRMaXN0ZW5lcnNbdHlwZV07XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlbGVnYXRlZExpc3RlbmVyID0gbGlzdGVuZXJzW2ldO1xuICAgICAgICAgICAgICAgIGlmIChkZWxlZ2F0ZWRMaXN0ZW5lci5sYXllciA9PT0gbGF5ZXJJZCAmJiBkZWxlZ2F0ZWRMaXN0ZW5lci5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBldmVudCBpbiBkZWxlZ2F0ZWRMaXN0ZW5lci5kZWxlZ2F0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub2ZmKChldmVudDogYW55KSwgZGVsZWdhdGVkTGlzdGVuZXIuZGVsZWdhdGVzW2V2ZW50XSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnMgJiYgdGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzW3R5cGVdKSB7XG4gICAgICAgICAgICByZW1vdmVEZWxlZ2F0ZWRMaXN0ZW5lcih0aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBhcnJheSBvZiBbR2VvSlNPTl0oaHR0cDovL2dlb2pzb24ub3JnLylcbiAgICAgKiBbRmVhdHVyZSBvYmplY3RzXShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzk0NiNzZWN0aW9uLTMuMilcbiAgICAgKiByZXByZXNlbnRpbmcgdmlzaWJsZSBmZWF0dXJlcyB0aGF0IHNhdGlzZnkgdGhlIHF1ZXJ5IHBhcmFtZXRlcnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1BvaW50TGlrZXxBcnJheTxQb2ludExpa2U+fSBbZ2VvbWV0cnldIC0gVGhlIGdlb21ldHJ5IG9mIHRoZSBxdWVyeSByZWdpb246XG4gICAgICogZWl0aGVyIGEgc2luZ2xlIHBvaW50IG9yIHNvdXRod2VzdCBhbmQgbm9ydGhlYXN0IHBvaW50cyBkZXNjcmliaW5nIGEgYm91bmRpbmcgYm94LlxuICAgICAqIE9taXR0aW5nIHRoaXMgcGFyYW1ldGVyIChpLmUuIGNhbGxpbmcge0BsaW5rIE1hcCNxdWVyeVJlbmRlcmVkRmVhdHVyZXN9IHdpdGggemVybyBhcmd1bWVudHMsXG4gICAgICogb3Igd2l0aCBvbmx5IGEgYG9wdGlvbnNgIGFyZ3VtZW50KSBpcyBlcXVpdmFsZW50IHRvIHBhc3NpbmcgYSBib3VuZGluZyBib3ggZW5jb21wYXNzaW5nIHRoZSBlbnRpcmVcbiAgICAgKiBtYXAgdmlld3BvcnQuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBPcHRpb25zIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IFtvcHRpb25zLmxheWVyc10gQW4gYXJyYXkgb2YgW3N0eWxlIGxheWVyIElEc10oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3N0eWxlLXNwZWMvI2xheWVyLWlkKSBmb3IgdGhlIHF1ZXJ5IHRvIGluc3BlY3QuXG4gICAgICogICBPbmx5IGZlYXR1cmVzIHdpdGhpbiB0aGVzZSBsYXllcnMgd2lsbCBiZSByZXR1cm5lZC4gSWYgdGhpcyBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLCBhbGwgbGF5ZXJzIHdpbGwgYmUgY2hlY2tlZC5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbb3B0aW9ucy5maWx0ZXJdIEEgW2ZpbHRlcl0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3N0eWxlLXNwZWMvbGF5ZXJzLyNmaWx0ZXIpXG4gICAgICogICB0byBsaW1pdCBxdWVyeSByZXN1bHRzLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudmFsaWRhdGU9dHJ1ZV0gV2hldGhlciB0byBjaGVjayBpZiB0aGUgW29wdGlvbnMuZmlsdGVyXSBjb25mb3JtcyB0byB0aGUgTWFwYm94IEdMIFN0eWxlIFNwZWNpZmljYXRpb24uIERpc2FibGluZyB2YWxpZGF0aW9uIGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHRoYXQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB5b3UgaGF2ZSBwcmV2aW91c2x5IHZhbGlkYXRlZCB0aGUgdmFsdWVzIHlvdSB3aWxsIGJlIHBhc3NpbmcgdG8gdGhpcyBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtBcnJheTxPYmplY3Q+fSBBbiBhcnJheSBvZiBbR2VvSlNPTl0oaHR0cDovL2dlb2pzb24ub3JnLylcbiAgICAgKiBbZmVhdHVyZSBvYmplY3RzXShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzk0NiNzZWN0aW9uLTMuMikuXG4gICAgICpcbiAgICAgKiBUaGUgYHByb3BlcnRpZXNgIHZhbHVlIG9mIGVhY2ggcmV0dXJuZWQgZmVhdHVyZSBvYmplY3QgY29udGFpbnMgdGhlIHByb3BlcnRpZXMgb2YgaXRzIHNvdXJjZSBmZWF0dXJlLiBGb3IgR2VvSlNPTiBzb3VyY2VzLCBvbmx5XG4gICAgICogc3RyaW5nIGFuZCBudW1lcmljIHByb3BlcnR5IHZhbHVlcyBhcmUgc3VwcG9ydGVkIChpLmUuIGBudWxsYCwgYEFycmF5YCwgYW5kIGBPYmplY3RgIHZhbHVlcyBhcmUgbm90IHN1cHBvcnRlZCkuXG4gICAgICpcbiAgICAgKiBFYWNoIGZlYXR1cmUgaW5jbHVkZXMgdG9wLWxldmVsIGBsYXllcmAsIGBzb3VyY2VgLCBhbmQgYHNvdXJjZUxheWVyYCBwcm9wZXJ0aWVzLiBUaGUgYGxheWVyYCBwcm9wZXJ0eSBpcyBhbiBvYmplY3RcbiAgICAgKiByZXByZXNlbnRpbmcgdGhlIHN0eWxlIGxheWVyIHRvICB3aGljaCB0aGUgZmVhdHVyZSBiZWxvbmdzLiBMYXlvdXQgYW5kIHBhaW50IHByb3BlcnRpZXMgaW4gdGhpcyBvYmplY3QgY29udGFpbiB2YWx1ZXNcbiAgICAgKiB3aGljaCBhcmUgZnVsbHkgZXZhbHVhdGVkIGZvciB0aGUgZ2l2ZW4gem9vbSBsZXZlbCBhbmQgZmVhdHVyZS5cbiAgICAgKlxuICAgICAqIE9ubHkgZmVhdHVyZXMgdGhhdCBhcmUgY3VycmVudGx5IHJlbmRlcmVkIGFyZSBpbmNsdWRlZC4gU29tZSBmZWF0dXJlcyB3aWxsICoqbm90KiogYmUgaW5jbHVkZWQsIGxpa2U6XG4gICAgICpcbiAgICAgKiAtIEZlYXR1cmVzIGZyb20gbGF5ZXJzIHdob3NlIGB2aXNpYmlsaXR5YCBwcm9wZXJ0eSBpcyBgXCJub25lXCJgLlxuICAgICAqIC0gRmVhdHVyZXMgZnJvbSBsYXllcnMgd2hvc2Ugem9vbSByYW5nZSBleGNsdWRlcyB0aGUgY3VycmVudCB6b29tIGxldmVsLlxuICAgICAqIC0gU3ltYm9sIGZlYXR1cmVzIHRoYXQgaGF2ZSBiZWVuIGhpZGRlbiBkdWUgdG8gdGV4dCBvciBpY29uIGNvbGxpc2lvbi5cbiAgICAgKlxuICAgICAqIEZlYXR1cmVzIGZyb20gYWxsIG90aGVyIGxheWVycyBhcmUgaW5jbHVkZWQsIGluY2x1ZGluZyBmZWF0dXJlcyB0aGF0IG1heSBoYXZlIG5vIHZpc2libGVcbiAgICAgKiBjb250cmlidXRpb24gdG8gdGhlIHJlbmRlcmVkIHJlc3VsdDsgZm9yIGV4YW1wbGUsIGJlY2F1c2UgdGhlIGxheWVyJ3Mgb3BhY2l0eSBvciBjb2xvciBhbHBoYSBjb21wb25lbnQgaXMgc2V0IHRvXG4gICAgICogMC5cbiAgICAgKlxuICAgICAqIFRoZSB0b3Btb3N0IHJlbmRlcmVkIGZlYXR1cmUgYXBwZWFycyBmaXJzdCBpbiB0aGUgcmV0dXJuZWQgYXJyYXksIGFuZCBzdWJzZXF1ZW50IGZlYXR1cmVzIGFyZSBzb3J0ZWQgYnlcbiAgICAgKiBkZXNjZW5kaW5nIHotb3JkZXIuIEZlYXR1cmVzIHRoYXQgYXJlIHJlbmRlcmVkIG11bHRpcGxlIHRpbWVzIChkdWUgdG8gd3JhcHBpbmcgYWNyb3NzIHRoZSBhbnRpbWVyaWRpYW4gYXQgbG93XG4gICAgICogem9vbSBsZXZlbHMpIGFyZSByZXR1cm5lZCBvbmx5IG9uY2UgKHRob3VnaCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY2F2ZWF0KS5cbiAgICAgKlxuICAgICAqIEJlY2F1c2UgZmVhdHVyZXMgY29tZSBmcm9tIHRpbGVkIHZlY3RvciBkYXRhIG9yIEdlb0pTT04gZGF0YSB0aGF0IGlzIGNvbnZlcnRlZCB0byB0aWxlcyBpbnRlcm5hbGx5LCBmZWF0dXJlXG4gICAgICogZ2VvbWV0cmllcyBtYXkgYmUgc3BsaXQgb3IgZHVwbGljYXRlZCBhY3Jvc3MgdGlsZSBib3VuZGFyaWVzIGFuZCwgYXMgYSByZXN1bHQsIGZlYXR1cmVzIG1heSBhcHBlYXIgbXVsdGlwbGVcbiAgICAgKiB0aW1lcyBpbiBxdWVyeSByZXN1bHRzLiBGb3IgZXhhbXBsZSwgc3VwcG9zZSB0aGVyZSBpcyBhIGhpZ2h3YXkgcnVubmluZyB0aHJvdWdoIHRoZSBib3VuZGluZyByZWN0YW5nbGUgb2YgYSBxdWVyeS5cbiAgICAgKiBUaGUgcmVzdWx0cyBvZiB0aGUgcXVlcnkgd2lsbCBiZSB0aG9zZSBwYXJ0cyBvZiB0aGUgaGlnaHdheSB0aGF0IGxpZSB3aXRoaW4gdGhlIG1hcCB0aWxlcyBjb3ZlcmluZyB0aGUgYm91bmRpbmdcbiAgICAgKiByZWN0YW5nbGUsIGV2ZW4gaWYgdGhlIGhpZ2h3YXkgZXh0ZW5kcyBpbnRvIG90aGVyIHRpbGVzLCBhbmQgdGhlIHBvcnRpb24gb2YgdGhlIGhpZ2h3YXkgd2l0aGluIGVhY2ggbWFwIHRpbGVcbiAgICAgKiB3aWxsIGJlIHJldHVybmVkIGFzIGEgc2VwYXJhdGUgZmVhdHVyZS4gU2ltaWxhcmx5LCBhIHBvaW50IGZlYXR1cmUgbmVhciBhIHRpbGUgYm91bmRhcnkgbWF5IGFwcGVhciBpbiBtdWx0aXBsZVxuICAgICAqIHRpbGVzIGR1ZSB0byB0aWxlIGJ1ZmZlcmluZy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gRmluZCBhbGwgZmVhdHVyZXMgYXQgYSBwb2ludFxuICAgICAqIHZhciBmZWF0dXJlcyA9IG1hcC5xdWVyeVJlbmRlcmVkRmVhdHVyZXMoXG4gICAgICogICBbMjAsIDM1XSxcbiAgICAgKiAgIHsgbGF5ZXJzOiBbJ215LWxheWVyLW5hbWUnXSB9XG4gICAgICogKTtcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gRmluZCBhbGwgZmVhdHVyZXMgd2l0aGluIGEgc3RhdGljIGJvdW5kaW5nIGJveFxuICAgICAqIHZhciBmZWF0dXJlcyA9IG1hcC5xdWVyeVJlbmRlcmVkRmVhdHVyZXMoXG4gICAgICogICBbWzEwLCAyMF0sIFszMCwgNTBdXSxcbiAgICAgKiAgIHsgbGF5ZXJzOiBbJ215LWxheWVyLW5hbWUnXSB9XG4gICAgICogKTtcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gRmluZCBhbGwgZmVhdHVyZXMgd2l0aGluIGEgYm91bmRpbmcgYm94IGFyb3VuZCBhIHBvaW50XG4gICAgICogdmFyIHdpZHRoID0gMTA7XG4gICAgICogdmFyIGhlaWdodCA9IDIwO1xuICAgICAqIHZhciBmZWF0dXJlcyA9IG1hcC5xdWVyeVJlbmRlcmVkRmVhdHVyZXMoW1xuICAgICAqICAgW3BvaW50LnggLSB3aWR0aCAvIDIsIHBvaW50LnkgLSBoZWlnaHQgLyAyXSxcbiAgICAgKiAgIFtwb2ludC54ICsgd2lkdGggLyAyLCBwb2ludC55ICsgaGVpZ2h0IC8gMl1cbiAgICAgKiBdLCB7IGxheWVyczogWydteS1sYXllci1uYW1lJ10gfSk7XG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIFF1ZXJ5IGFsbCByZW5kZXJlZCBmZWF0dXJlcyBmcm9tIGEgc2luZ2xlIGxheWVyXG4gICAgICogdmFyIGZlYXR1cmVzID0gbWFwLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyh7IGxheWVyczogWydteS1sYXllci1uYW1lJ10gfSk7XG4gICAgICogQHNlZSBbR2V0IGZlYXR1cmVzIHVuZGVyIHRoZSBtb3VzZSBwb2ludGVyXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3F1ZXJ5cmVuZGVyZWRmZWF0dXJlcy8pXG4gICAgICogQHNlZSBbSGlnaGxpZ2h0IGZlYXR1cmVzIHdpdGhpbiBhIGJvdW5kaW5nIGJveF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS91c2luZy1ib3gtcXVlcnlyZW5kZXJlZGZlYXR1cmVzLylcbiAgICAgKiBAc2VlIFtGaWx0ZXIgZmVhdHVyZXMgd2l0aGluIG1hcCB2aWV3XShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2ZpbHRlci1mZWF0dXJlcy13aXRoaW4tbWFwLXZpZXcvKVxuICAgICAqL1xuICAgIHF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhnZW9tZXRyeT86IFBvaW50TGlrZSB8IFtQb2ludExpa2UsIFBvaW50TGlrZV0sIG9wdGlvbnM/OiBPYmplY3QpIHtcbiAgICAgICAgLy8gVGhlIGZpcnN0IHBhcmFtZXRlciBjYW4gYmUgb21pdHRlZCBlbnRpcmVseSwgbWFraW5nIHRoaXMgZWZmZWN0aXZlbHkgYW4gb3ZlcmxvYWRlZCBtZXRob2RcbiAgICAgICAgLy8gd2l0aCB0d28gc2lnbmF0dXJlczpcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgIHF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhnZW9tZXRyeTogUG9pbnRMaWtlIHwgW1BvaW50TGlrZSwgUG9pbnRMaWtlXSwgb3B0aW9ucz86IE9iamVjdClcbiAgICAgICAgLy8gICAgIHF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhvcHRpb25zPzogT2JqZWN0KVxuICAgICAgICAvL1xuICAgICAgICAvLyBUaGVyZSBubyB3YXkgdG8gZXhwcmVzcyB0aGF0IGluIGEgd2F5IHRoYXQncyBjb21wYXRpYmxlIHdpdGggYm90aCBmbG93IGFuZCBkb2N1bWVudGF0aW9uLmpzLlxuICAgICAgICAvLyBSZWxhdGVkOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvMTU1NlxuXG4gICAgICAgIGlmICghdGhpcy5zdHlsZSkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCAmJiBnZW9tZXRyeSAhPT0gdW5kZWZpbmVkICYmICEoZ2VvbWV0cnkgaW5zdGFuY2VvZiBQb2ludCkgJiYgIUFycmF5LmlzQXJyYXkoZ2VvbWV0cnkpKSB7XG4gICAgICAgICAgICBvcHRpb25zID0gKGdlb21ldHJ5OiBPYmplY3QpO1xuICAgICAgICAgICAgZ2VvbWV0cnkgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgZ2VvbWV0cnkgPSBnZW9tZXRyeSB8fCBbWzAsIDBdLCBbdGhpcy50cmFuc2Zvcm0ud2lkdGgsIHRoaXMudHJhbnNmb3JtLmhlaWdodF1dO1xuXG4gICAgICAgIGxldCBxdWVyeUdlb21ldHJ5O1xuICAgICAgICBpZiAoZ2VvbWV0cnkgaW5zdGFuY2VvZiBQb2ludCB8fCB0eXBlb2YgZ2VvbWV0cnlbMF0gPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBxdWVyeUdlb21ldHJ5ID0gW1BvaW50LmNvbnZlcnQoZ2VvbWV0cnkpXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHRsID0gUG9pbnQuY29udmVydChnZW9tZXRyeVswXSk7XG4gICAgICAgICAgICBjb25zdCBiciA9IFBvaW50LmNvbnZlcnQoZ2VvbWV0cnlbMV0pO1xuICAgICAgICAgICAgcXVlcnlHZW9tZXRyeSA9IFt0bCwgbmV3IFBvaW50KGJyLngsIHRsLnkpLCBiciwgbmV3IFBvaW50KHRsLngsIGJyLnkpLCB0bF07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZS5xdWVyeVJlbmRlcmVkRmVhdHVyZXMocXVlcnlHZW9tZXRyeSwgb3B0aW9ucywgdGhpcy50cmFuc2Zvcm0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgW0dlb0pTT05dKGh0dHA6Ly9nZW9qc29uLm9yZy8pXG4gICAgICogW0ZlYXR1cmUgb2JqZWN0c10oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc5NDYjc2VjdGlvbi0zLjIpXG4gICAgICogcmVwcmVzZW50aW5nIGZlYXR1cmVzIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHZlY3RvciB0aWxlIG9yIEdlb0pTT04gc291cmNlIHRoYXQgc2F0aXNmeSB0aGUgcXVlcnkgcGFyYW1ldGVycy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2VJZCBUaGUgSUQgb2YgdGhlIHZlY3RvciB0aWxlIG9yIEdlb0pTT04gc291cmNlIHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1ldGVyc10gT3B0aW9ucyBvYmplY3QuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXJhbWV0ZXJzLnNvdXJjZUxheWVyXSBUaGUgbmFtZSBvZiB0aGUgW3NvdXJjZSBsYXllcl0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vaGVscC9nbG9zc2FyeS9zb3VyY2UtbGF5ZXIvKVxuICAgICAqICAgdG8gcXVlcnkuICpGb3IgdmVjdG9yIHRpbGUgc291cmNlcywgdGhpcyBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQuKiBGb3IgR2VvSlNPTiBzb3VyY2VzLCBpdCBpcyBpZ25vcmVkLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtwYXJhbWV0ZXJzLmZpbHRlcl0gQSBbZmlsdGVyXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy9sYXllcnMvI2ZpbHRlcilcbiAgICAgKiAgIHRvIGxpbWl0IHF1ZXJ5IHJlc3VsdHMuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbcGFyYW1ldGVycy52YWxpZGF0ZT10cnVlXSBXaGV0aGVyIHRvIGNoZWNrIGlmIHRoZSBbcGFyYW1ldGVycy5maWx0ZXJdIGNvbmZvcm1zIHRvIHRoZSBNYXBib3ggR0wgU3R5bGUgU3BlY2lmaWNhdGlvbi4gRGlzYWJsaW5nIHZhbGlkYXRpb24gaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gdGhhdCBzaG91bGQgb25seSBiZSB1c2VkIGlmIHlvdSBoYXZlIHByZXZpb3VzbHkgdmFsaWRhdGVkIHRoZSB2YWx1ZXMgeW91IHdpbGwgYmUgcGFzc2luZyB0byB0aGlzIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0FycmF5PE9iamVjdD59IEFuIGFycmF5IG9mIFtHZW9KU09OXShodHRwOi8vZ2VvanNvbi5vcmcvKVxuICAgICAqIFtGZWF0dXJlIG9iamVjdHNdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3OTQ2I3NlY3Rpb24tMy4yKS5cbiAgICAgKlxuICAgICAqIEluIGNvbnRyYXN0IHRvIHtAbGluayBNYXAjcXVlcnlSZW5kZXJlZEZlYXR1cmVzfSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGFsbCBmZWF0dXJlcyBtYXRjaGluZyB0aGUgcXVlcnkgcGFyYW1ldGVycyxcbiAgICAgKiB3aGV0aGVyIG9yIG5vdCB0aGV5IGFyZSByZW5kZXJlZCBieSB0aGUgY3VycmVudCBzdHlsZSAoaS5lLiB2aXNpYmxlKS4gVGhlIGRvbWFpbiBvZiB0aGUgcXVlcnkgaW5jbHVkZXMgYWxsIGN1cnJlbnRseS1sb2FkZWRcbiAgICAgKiB2ZWN0b3IgdGlsZXMgYW5kIEdlb0pTT04gc291cmNlIHRpbGVzOiB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNoZWNrIHRpbGVzIG91dHNpZGUgdGhlIGN1cnJlbnRseVxuICAgICAqIHZpc2libGUgdmlld3BvcnQuXG4gICAgICpcbiAgICAgKiBCZWNhdXNlIGZlYXR1cmVzIGNvbWUgZnJvbSB0aWxlZCB2ZWN0b3IgZGF0YSBvciBHZW9KU09OIGRhdGEgdGhhdCBpcyBjb252ZXJ0ZWQgdG8gdGlsZXMgaW50ZXJuYWxseSwgZmVhdHVyZVxuICAgICAqIGdlb21ldHJpZXMgbWF5IGJlIHNwbGl0IG9yIGR1cGxpY2F0ZWQgYWNyb3NzIHRpbGUgYm91bmRhcmllcyBhbmQsIGFzIGEgcmVzdWx0LCBmZWF0dXJlcyBtYXkgYXBwZWFyIG11bHRpcGxlXG4gICAgICogdGltZXMgaW4gcXVlcnkgcmVzdWx0cy4gRm9yIGV4YW1wbGUsIHN1cHBvc2UgdGhlcmUgaXMgYSBoaWdod2F5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgYm91bmRpbmcgcmVjdGFuZ2xlIG9mIGEgcXVlcnkuXG4gICAgICogVGhlIHJlc3VsdHMgb2YgdGhlIHF1ZXJ5IHdpbGwgYmUgdGhvc2UgcGFydHMgb2YgdGhlIGhpZ2h3YXkgdGhhdCBsaWUgd2l0aGluIHRoZSBtYXAgdGlsZXMgY292ZXJpbmcgdGhlIGJvdW5kaW5nXG4gICAgICogcmVjdGFuZ2xlLCBldmVuIGlmIHRoZSBoaWdod2F5IGV4dGVuZHMgaW50byBvdGhlciB0aWxlcywgYW5kIHRoZSBwb3J0aW9uIG9mIHRoZSBoaWdod2F5IHdpdGhpbiBlYWNoIG1hcCB0aWxlXG4gICAgICogd2lsbCBiZSByZXR1cm5lZCBhcyBhIHNlcGFyYXRlIGZlYXR1cmUuIFNpbWlsYXJseSwgYSBwb2ludCBmZWF0dXJlIG5lYXIgYSB0aWxlIGJvdW5kYXJ5IG1heSBhcHBlYXIgaW4gbXVsdGlwbGVcbiAgICAgKiB0aWxlcyBkdWUgdG8gdGlsZSBidWZmZXJpbmcuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEZpbmQgYWxsIGZlYXR1cmVzIGluIG9uZSBzb3VyY2UgbGF5ZXIgaW4gYSB2ZWN0b3Igc291cmNlXG4gICAgICogdmFyIGZlYXR1cmVzID0gbWFwLnF1ZXJ5U291cmNlRmVhdHVyZXMoJ3lvdXItc291cmNlLWlkJywge1xuICAgICAqICAgc291cmNlTGF5ZXI6ICd5b3VyLXNvdXJjZS1sYXllcidcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIEBzZWUgW0hpZ2hsaWdodCBmZWF0dXJlcyBjb250YWluaW5nIHNpbWlsYXIgZGF0YV0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9xdWVyeS1zaW1pbGFyLWZlYXR1cmVzLylcbiAgICAgKi9cbiAgICBxdWVyeVNvdXJjZUZlYXR1cmVzKHNvdXJjZUlkOiBzdHJpbmcsIHBhcmFtZXRlcnM6ID97c291cmNlTGF5ZXI6ID9zdHJpbmcsIGZpbHRlcjogP0FycmF5PGFueT4sIHZhbGlkYXRlPzogYm9vbGVhbn0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUucXVlcnlTb3VyY2VGZWF0dXJlcyhzb3VyY2VJZCwgcGFyYW1ldGVycyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgbWFwJ3MgTWFwYm94IHN0eWxlIG9iamVjdCB3aXRoIGEgbmV3IHZhbHVlLlxuICAgICAqXG4gICAgICogSWYgYSBzdHlsZSBpcyBhbHJlYWR5IHNldCB3aGVuIHRoaXMgaXMgdXNlZCBhbmQgb3B0aW9ucy5kaWZmIGlzIHNldCB0byB0cnVlLCB0aGUgbWFwIHJlbmRlcmVyIHdpbGwgYXR0ZW1wdCB0byBjb21wYXJlIHRoZSBnaXZlbiBzdHlsZVxuICAgICAqIGFnYWluc3QgdGhlIG1hcCdzIGN1cnJlbnQgc3RhdGUgYW5kIHBlcmZvcm0gb25seSB0aGUgY2hhbmdlcyBuZWNlc3NhcnkgdG8gbWFrZSB0aGUgbWFwIHN0eWxlIG1hdGNoIHRoZSBkZXNpcmVkIHN0YXRlLiBDaGFuZ2VzIGluIHNwcml0ZXNcbiAgICAgKiAoaW1hZ2VzIHVzZWQgZm9yIGljb25zIGFuZCBwYXR0ZXJucykgYW5kIGdseXBocyAoZm9udHMgZm9yIGxhYmVsIHRleHQpICoqY2Fubm90KiogYmUgZGlmZmVkLiBJZiB0aGUgc3ByaXRlcyBvciBmb250cyB1c2VkIGluIHRoZSBjdXJyZW50XG4gICAgICogc3R5bGUgYW5kIHRoZSBnaXZlbiBzdHlsZSBhcmUgZGlmZmVyZW50IGluIGFueSB3YXksIHRoZSBtYXAgcmVuZGVyZXIgd2lsbCBmb3JjZSBhIGZ1bGwgdXBkYXRlLCByZW1vdmluZyB0aGUgY3VycmVudCBzdHlsZSBhbmQgYnVpbGRpbmdcbiAgICAgKiB0aGUgZ2l2ZW4gb25lIGZyb20gc2NyYXRjaC5cbiAgICAgKlxuICAgICAqXG4gICAgICogQHBhcmFtIHN0eWxlIEEgSlNPTiBvYmplY3QgY29uZm9ybWluZyB0byB0aGUgc2NoZW1hIGRlc2NyaWJlZCBpbiB0aGVcbiAgICAgKiAgIFtNYXBib3ggU3R5bGUgU3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9tYXBib3guY29tL21hcGJveC1nbC1zdHlsZS1zcGVjLyksIG9yIGEgVVJMIHRvIHN1Y2ggSlNPTi5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIE9wdGlvbnMgb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZGlmZj10cnVlXSBJZiBmYWxzZSwgZm9yY2UgYSAnZnVsbCcgdXBkYXRlLCByZW1vdmluZyB0aGUgY3VycmVudCBzdHlsZVxuICAgICAqICAgYW5kIGJ1aWxkaW5nIHRoZSBnaXZlbiBvbmUgaW5zdGVhZCBvZiBhdHRlbXB0aW5nIGEgZGlmZi1iYXNlZCB1cGRhdGUuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseT0nc2Fucy1zZXJpZiddIERlZmluZXMgYSBDU1NcbiAgICAgKiAgIGZvbnQtZmFtaWx5IGZvciBsb2NhbGx5IG92ZXJyaWRpbmcgZ2VuZXJhdGlvbiBvZiBnbHlwaHMgaW4gdGhlICdDSksgVW5pZmllZCBJZGVvZ3JhcGhzJywgJ0hpcmFnYW5hJywgJ0thdGFrYW5hJyBhbmQgJ0hhbmd1bCBTeWxsYWJsZXMnIHJhbmdlcy5cbiAgICAgKiAgIEluIHRoZXNlIHJhbmdlcywgZm9udCBzZXR0aW5ncyBmcm9tIHRoZSBtYXAncyBzdHlsZSB3aWxsIGJlIGlnbm9yZWQsIGV4Y2VwdCBmb3IgZm9udC13ZWlnaHQga2V5d29yZHMgKGxpZ2h0L3JlZ3VsYXIvbWVkaXVtL2JvbGQpLlxuICAgICAqICAgU2V0IHRvIGBmYWxzZWAsIHRvIGVuYWJsZSBmb250IHNldHRpbmdzIGZyb20gdGhlIG1hcCdzIHN0eWxlIGZvciB0aGVzZSBnbHlwaCByYW5nZXMuXG4gICAgICogICBGb3JjZXMgYSBmdWxsIHVwZGF0ZS5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLnNldFN0eWxlKFwibWFwYm94Oi8vc3R5bGVzL21hcGJveC9zdHJlZXRzLXYxMVwiKTtcbiAgICAgKlxuICAgICAqIEBzZWUgW0NoYW5nZSBhIG1hcCdzIHN0eWxlXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3NldHN0eWxlLylcbiAgICAgKi9cbiAgICBzZXRTdHlsZShzdHlsZTogU3R5bGVTcGVjaWZpY2F0aW9uIHwgc3RyaW5nIHwgbnVsbCwgb3B0aW9ucz86IHtkaWZmPzogYm9vbGVhbn0gJiBTdHlsZU9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGV4dGVuZCh7fSwge2xvY2FsSWRlb2dyYXBoRm9udEZhbWlseTogdGhpcy5fbG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5fSwgb3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKChvcHRpb25zLmRpZmYgIT09IGZhbHNlICYmIG9wdGlvbnMubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5ID09PSB0aGlzLl9sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHkpICYmIHRoaXMuc3R5bGUgJiYgc3R5bGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2RpZmZTdHlsZShzdHlsZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2xvY2FsSWRlb2dyYXBoRm9udEZhbWlseSA9IG9wdGlvbnMubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5O1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZVN0eWxlKHN0eWxlLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9nZXRVSVN0cmluZyhrZXk6IHN0cmluZykge1xuICAgICAgICBjb25zdCBzdHIgPSB0aGlzLl9sb2NhbGVba2V5XTtcbiAgICAgICAgaWYgKHN0ciA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgVUkgc3RyaW5nICcke2tleX0nYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3RyO1xuICAgIH1cblxuICAgIF91cGRhdGVTdHlsZShzdHlsZTogU3R5bGVTcGVjaWZpY2F0aW9uIHwgc3RyaW5nIHwgbnVsbCwgIG9wdGlvbnM/OiB7ZGlmZj86IGJvb2xlYW59ICYgU3R5bGVPcHRpb25zKSB7XG4gICAgICAgIGlmICh0aGlzLnN0eWxlKSB7XG4gICAgICAgICAgICB0aGlzLnN0eWxlLnNldEV2ZW50ZWRQYXJlbnQobnVsbCk7XG4gICAgICAgICAgICB0aGlzLnN0eWxlLl9yZW1vdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc3R5bGUpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnN0eWxlO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0eWxlID0gbmV3IFN0eWxlKHRoaXMsIG9wdGlvbnMgfHwge30pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdHlsZS5zZXRFdmVudGVkUGFyZW50KHRoaXMsIHtzdHlsZTogdGhpcy5zdHlsZX0pO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygc3R5bGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLnN0eWxlLmxvYWRVUkwoc3R5bGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdHlsZS5sb2FkSlNPTihzdHlsZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBfbGF6eUluaXRFbXB0eVN0eWxlKCkge1xuICAgICAgICBpZiAoIXRoaXMuc3R5bGUpIHtcbiAgICAgICAgICAgIHRoaXMuc3R5bGUgPSBuZXcgU3R5bGUodGhpcywge30pO1xuICAgICAgICAgICAgdGhpcy5zdHlsZS5zZXRFdmVudGVkUGFyZW50KHRoaXMsIHtzdHlsZTogdGhpcy5zdHlsZX0pO1xuICAgICAgICAgICAgdGhpcy5zdHlsZS5sb2FkRW1wdHkoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9kaWZmU3R5bGUoc3R5bGU6IFN0eWxlU3BlY2lmaWNhdGlvbiB8IHN0cmluZywgIG9wdGlvbnM/OiB7ZGlmZj86IGJvb2xlYW59ICYgU3R5bGVPcHRpb25zKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc3R5bGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLl9yZXF1ZXN0TWFuYWdlci5ub3JtYWxpemVTdHlsZVVSTChzdHlsZSk7XG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5fcmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdCh1cmwsIFJlc291cmNlVHlwZS5TdHlsZSk7XG4gICAgICAgICAgICBnZXRKU09OKHJlcXVlc3QsIChlcnJvcjogP0Vycm9yLCBqc29uOiA/T2JqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChlcnJvcikpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoanNvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVEaWZmKGpzb24sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdHlsZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZURpZmYoc3R5bGUsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3VwZGF0ZURpZmYoc3R5bGU6IFN0eWxlU3BlY2lmaWNhdGlvbiwgIG9wdGlvbnM/OiB7ZGlmZj86IGJvb2xlYW59ICYgU3R5bGVPcHRpb25zKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zdHlsZS5zZXRTdGF0ZShzdHlsZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGUodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHdhcm5PbmNlKFxuICAgICAgICAgICAgICAgIGBVbmFibGUgdG8gcGVyZm9ybSBzdHlsZSBkaWZmOiAke2UubWVzc2FnZSB8fCBlLmVycm9yIHx8IGV9LiAgUmVidWlsZGluZyB0aGUgc3R5bGUgZnJvbSBzY3JhdGNoLmBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVTdHlsZShzdHlsZSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBtYXAncyBNYXBib3ggW3N0eWxlXShodHRwczovL2RvY3MubWFwYm94LmNvbS9oZWxwL2dsb3NzYXJ5L3N0eWxlLykgb2JqZWN0LCBhIEpTT04gb2JqZWN0IHdoaWNoIGNhbiBiZSB1c2VkIHRvIHJlY3JlYXRlIHRoZSBtYXAncyBzdHlsZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBtYXAncyBzdHlsZSBKU09OIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIHN0eWxlSnNvbiA9IG1hcC5nZXRTdHlsZSgpO1xuICAgICAqXG4gICAgICovXG4gICAgZ2V0U3R5bGUoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0eWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdHlsZS5zZXJpYWxpemUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgbWFwJ3Mgc3R5bGUgaXMgZnVsbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IEEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHN0eWxlIGlzIGZ1bGx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIHN0eWxlTG9hZFN0YXR1cyA9IG1hcC5pc1N0eWxlTG9hZGVkKCk7XG4gICAgICovXG4gICAgaXNTdHlsZUxvYWRlZCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnN0eWxlKSByZXR1cm4gd2Fybk9uY2UoJ1RoZXJlIGlzIG5vIHN0eWxlIGFkZGVkIHRvIHRoZSBtYXAuJyk7XG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlLmxvYWRlZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBzb3VyY2UgdG8gdGhlIG1hcCdzIHN0eWxlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFRoZSBJRCBvZiB0aGUgc291cmNlIHRvIGFkZC4gTXVzdCBub3QgY29uZmxpY3Qgd2l0aCBleGlzdGluZyBzb3VyY2VzLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QsIGNvbmZvcm1pbmcgdG8gdGhlXG4gICAgICogTWFwYm94IFN0eWxlIFNwZWNpZmljYXRpb24ncyBbc291cmNlIGRlZmluaXRpb25dKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLXN0eWxlLXNwZWMvI3NvdXJjZXMpIG9yXG4gICAgICoge0BsaW5rIENhbnZhc1NvdXJjZU9wdGlvbnN9LlxuICAgICAqIEBmaXJlcyBzb3VyY2UuYWRkXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXAuYWRkU291cmNlKCdteS1kYXRhJywge1xuICAgICAqICAgdHlwZTogJ3ZlY3RvcicsXG4gICAgICogICB1cmw6ICdtYXBib3g6Ly9teXVzZXJuYW1lLnRpbGVzZXRpZCdcbiAgICAgKiB9KTtcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5hZGRTb3VyY2UoJ215LWRhdGEnLCB7XG4gICAgICogICBcInR5cGVcIjogXCJnZW9qc29uXCIsXG4gICAgICogICBcImRhdGFcIjoge1xuICAgICAqICAgICBcInR5cGVcIjogXCJGZWF0dXJlXCIsXG4gICAgICogICAgIFwiZ2VvbWV0cnlcIjoge1xuICAgICAqICAgICAgIFwidHlwZVwiOiBcIlBvaW50XCIsXG4gICAgICogICAgICAgXCJjb29yZGluYXRlc1wiOiBbLTc3LjAzMjMsIDM4LjkxMzFdXG4gICAgICogICAgIH0sXG4gICAgICogICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICogICAgICAgXCJ0aXRsZVwiOiBcIk1hcGJveCBEQ1wiLFxuICAgICAqICAgICAgIFwibWFya2VyLXN5bWJvbFwiOiBcIm1vbnVtZW50XCJcbiAgICAgKiAgICAgfVxuICAgICAqICAgfVxuICAgICAqIH0pO1xuICAgICAqIEBzZWUgVmVjdG9yIHNvdXJjZTogW1Nob3cgYW5kIGhpZGUgbGF5ZXJzXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS90b2dnbGUtbGF5ZXJzLylcbiAgICAgKiBAc2VlIEdlb0pTT04gc291cmNlOiBbQWRkIGxpdmUgcmVhbHRpbWUgZGF0YV0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvbGl2ZS1nZW9qc29uLylcbiAgICAgKiBAc2VlIFJhc3RlciBERU0gc291cmNlOiBbQWRkIGhpbGxzaGFkaW5nXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9oaWxsc2hhZGUvKVxuICAgICAqL1xuICAgIGFkZFNvdXJjZShpZDogc3RyaW5nLCBzb3VyY2U6IFNvdXJjZVNwZWNpZmljYXRpb24pIHtcbiAgICAgICAgdGhpcy5fbGF6eUluaXRFbXB0eVN0eWxlKCk7XG4gICAgICAgIHRoaXMuc3R5bGUuYWRkU291cmNlKGlkLCBzb3VyY2UpO1xuICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlKHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgc291cmNlIGlzIGxvYWRlZC4gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHNvdXJjZSB3aXRoXG4gICAgICogdGhlIGdpdmVuIElEIGluIHRoZSBtYXAncyBzdHlsZSBoYXMgbm8gb3V0c3RhbmRpbmcgbmV0d29yayByZXF1ZXN0cywgb3RoZXJ3aXNlIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgVGhlIElEIG9mIHRoZSBzb3VyY2UgdG8gYmUgY2hlY2tlZC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gQSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgc291cmNlIGlzIGxvYWRlZC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBzb3VyY2VMb2FkZWQgPSBtYXAuaXNTb3VyY2VMb2FkZWQoJ2JhdGh5bWV0cnktZGF0YScpO1xuICAgICAqL1xuICAgIGlzU291cmNlTG9hZGVkKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc291cmNlID0gdGhpcy5zdHlsZSAmJiB0aGlzLnN0eWxlLnNvdXJjZUNhY2hlc1tpZF07XG4gICAgICAgIGlmIChzb3VyY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgVGhlcmUgaXMgbm8gc291cmNlIHdpdGggSUQgJyR7aWR9J2ApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNvdXJjZS5sb2FkZWQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgYWxsIHRpbGVzIGluIHRoZSB2aWV3cG9ydCBmcm9tIGFsbCBzb3VyY2VzIG9uXG4gICAgICogdGhlIHN0eWxlIGFyZSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gQSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciBhbGwgdGlsZXMgYXJlIGxvYWRlZC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciB0aWxlc0xvYWRlZCA9IG1hcC5hcmVUaWxlc0xvYWRlZCgpO1xuICAgICAqL1xuXG4gICAgYXJlVGlsZXNMb2FkZWQoKSB7XG4gICAgICAgIGNvbnN0IHNvdXJjZXMgPSB0aGlzLnN0eWxlICYmIHRoaXMuc3R5bGUuc291cmNlQ2FjaGVzO1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHNvdXJjZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IHNvdXJjZXNbaWRdO1xuICAgICAgICAgICAgY29uc3QgdGlsZXMgPSBzb3VyY2UuX3RpbGVzO1xuICAgICAgICAgICAgZm9yIChjb25zdCB0IGluIHRpbGVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGlsZSA9IHRpbGVzW3RdO1xuICAgICAgICAgICAgICAgIGlmICghKHRpbGUuc3RhdGUgPT09ICdsb2FkZWQnIHx8IHRpbGUuc3RhdGUgPT09ICdlcnJvcmVkJykpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgW2N1c3RvbSBzb3VyY2UgdHlwZV0oI0N1c3RvbSBTb3VyY2VzKSwgbWFraW5nIGl0IGF2YWlsYWJsZSBmb3IgdXNlIHdpdGhcbiAgICAgKiB7QGxpbmsgTWFwI2FkZFNvdXJjZX0uXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgc291cmNlIHR5cGU7IHNvdXJjZSBkZWZpbml0aW9uIG9iamVjdHMgdXNlIHRoaXMgbmFtZSBpbiB0aGUgYHt0eXBlOiAuLi59YCBmaWVsZC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBTb3VyY2VUeXBlIEEge0BsaW5rIFNvdXJjZX0gY29uc3RydWN0b3IuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIHdoZW4gdGhlIHNvdXJjZSB0eXBlIGlzIHJlYWR5IG9yIHdpdGggYW4gZXJyb3IgYXJndW1lbnQgaWYgdGhlcmUgaXMgYW4gZXJyb3IuXG4gICAgICovXG4gICAgYWRkU291cmNlVHlwZShuYW1lOiBzdHJpbmcsIFNvdXJjZVR5cGU6IGFueSwgY2FsbGJhY2s6IEZ1bmN0aW9uKSB7XG4gICAgICAgIHRoaXMuX2xhenlJbml0RW1wdHlTdHlsZSgpO1xuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZS5hZGRTb3VyY2VUeXBlKG5hbWUsIFNvdXJjZVR5cGUsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGEgc291cmNlIGZyb20gdGhlIG1hcCdzIHN0eWxlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFRoZSBJRCBvZiB0aGUgc291cmNlIHRvIHJlbW92ZS5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5yZW1vdmVTb3VyY2UoJ2JhdGh5bWV0cnktZGF0YScpO1xuICAgICAqL1xuICAgIHJlbW92ZVNvdXJjZShpZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc3R5bGUucmVtb3ZlU291cmNlKGlkKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZSh0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBzb3VyY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIElEIGluIHRoZSBtYXAncyBzdHlsZS5cbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIG9mdGVuIHVzZWQgdG8gdXBkYXRlIGEgc291cmNlIHVzaW5nIHRoZSBpbnN0YW5jZSBtZW1iZXJzIGZvciB0aGUgcmVsZXZhbnRcbiAgICAgKiBzb3VyY2UgdHlwZSBhcyBkZWZpbmVkIGluIFtTb3VyY2VzXSgjc291cmNlcykuXG4gICAgICogRm9yIGV4YW1wbGUsIHNldHRpbmcgdGhlIGBkYXRhYCBmb3IgYSBHZW9KU09OIHNvdXJjZSBvciB1cGRhdGluZyB0aGUgYHVybGAgYW5kIGBjb29yZGluYXRlc2BcbiAgICAgKiBvZiBhbiBpbWFnZSBzb3VyY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgVGhlIElEIG9mIHRoZSBzb3VyY2UgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHs/T2JqZWN0fSBUaGUgc3R5bGUgc291cmNlIHdpdGggdGhlIHNwZWNpZmllZCBJRCBvciBgdW5kZWZpbmVkYCBpZiB0aGUgSURcbiAgICAgKiBjb3JyZXNwb25kcyB0byBubyBleGlzdGluZyBzb3VyY2VzLlxuICAgICAqIFRoZSBzaGFwZSBvZiB0aGUgb2JqZWN0IHZhcmllcyBieSBzb3VyY2UgdHlwZS5cbiAgICAgKiBBIGxpc3Qgb2Ygb3B0aW9ucyBmb3IgZWFjaCBzb3VyY2UgdHlwZSBpcyBhdmFpbGFibGUgb24gdGhlIE1hcGJveCBTdHlsZSBTcGVjaWZpY2F0aW9uJ3NcbiAgICAgKiBbU291cmNlc10oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3N0eWxlLXNwZWMvc291cmNlcy8pIHBhZ2UuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgc291cmNlT2JqZWN0ID0gbWFwLmdldFNvdXJjZSgncG9pbnRzJyk7XG4gICAgICogQHNlZSBbQ3JlYXRlIGEgZHJhZ2dhYmxlIHBvaW50XShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9kcmFnLWEtcG9pbnQvKVxuICAgICAqIEBzZWUgW0FuaW1hdGUgYSBwb2ludF0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvYW5pbWF0ZS1wb2ludC1hbG9uZy1saW5lLylcbiAgICAgKiBAc2VlIFtBZGQgbGl2ZSByZWFsdGltZSBkYXRhXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9saXZlLWdlb2pzb24vKVxuICAgICAqL1xuICAgIGdldFNvdXJjZShpZDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlLmdldFNvdXJjZShpZCk7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtcmV0dXJuc1xuICAgIC8qKlxuICAgICAqIEFkZCBhbiBpbWFnZSB0byB0aGUgc3R5bGUuIFRoaXMgaW1hZ2UgY2FuIGJlIGRpc3BsYXllZCBvbiB0aGUgbWFwIGxpa2UgYW55IG90aGVyIGljb24gaW4gdGhlIHN0eWxlJ3NcbiAgICAgKiBbc3ByaXRlXShodHRwczovL2RvY3MubWFwYm94LmNvbS9oZWxwL2dsb3NzYXJ5L3Nwcml0ZS8pIHVzaW5nIHRoZSBpbWFnZSdzIElEIHdpdGhcbiAgICAgKiBbYGljb24taW1hZ2VgXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy8jbGF5b3V0LXN5bWJvbC1pY29uLWltYWdlKSxcbiAgICAgKiBbYGJhY2tncm91bmQtcGF0dGVybmBdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjLyNwYWludC1iYWNrZ3JvdW5kLWJhY2tncm91bmQtcGF0dGVybiksXG4gICAgICogW2BmaWxsLXBhdHRlcm5gXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy8jcGFpbnQtZmlsbC1maWxsLXBhdHRlcm4pLFxuICAgICAqIG9yIFtgbGluZS1wYXR0ZXJuYF0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3N0eWxlLXNwZWMvI3BhaW50LWxpbmUtbGluZS1wYXR0ZXJuKS5cbiAgICAgKiBBIHtAbGluayBNYXAjZXJyb3J9IGV2ZW50IHdpbGwgYmUgZmlyZWQgaWYgdGhlcmUgaXMgbm90IGVub3VnaCBzcGFjZSBpbiB0aGUgc3ByaXRlIHRvIGFkZCB0aGlzIGltYWdlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGlkIFRoZSBJRCBvZiB0aGUgaW1hZ2UuXG4gICAgICogQHBhcmFtIGltYWdlIFRoZSBpbWFnZSBhcyBhbiBgSFRNTEltYWdlRWxlbWVudGAsIGBJbWFnZURhdGFgLCBgSW1hZ2VCaXRtYXBgIG9yIG9iamVjdCB3aXRoIGB3aWR0aGAsIGBoZWlnaHRgLCBhbmQgYGRhdGFgXG4gICAgICogcHJvcGVydGllcyB3aXRoIHRoZSBzYW1lIGZvcm1hdCBhcyBgSW1hZ2VEYXRhYC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5waXhlbFJhdGlvIFRoZSByYXRpbyBvZiBwaXhlbHMgaW4gdGhlIGltYWdlIHRvIHBoeXNpY2FsIHBpeGVscyBvbiB0aGUgc2NyZWVuXG4gICAgICogQHBhcmFtIG9wdGlvbnMuc2RmIFdoZXRoZXIgdGhlIGltYWdlIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBhbiBTREYgaW1hZ2VcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5jb250ZW50ICBgW3gxLCB5MSwgeDIsIHkyXWAgIElmIGBpY29uLXRleHQtZml0YCBpcyB1c2VkIGluIGEgbGF5ZXIgd2l0aCB0aGlzIGltYWdlLCB0aGlzIG9wdGlvbiBkZWZpbmVzIHRoZSBwYXJ0IG9mIHRoZSBpbWFnZSB0aGF0IGNhbiBiZSBjb3ZlcmVkIGJ5IHRoZSBjb250ZW50IGluIGB0ZXh0LWZpZWxkYC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5zdHJldGNoWCAgYFtbeDEsIHgyXSwgLi4uXWAgSWYgYGljb24tdGV4dC1maXRgIGlzIHVzZWQgaW4gYSBsYXllciB3aXRoIHRoaXMgaW1hZ2UsIHRoaXMgb3B0aW9uIGRlZmluZXMgdGhlIHBhcnQocykgb2YgdGhlIGltYWdlIHRoYXQgY2FuIGJlIHN0cmV0Y2hlZCBob3Jpem9udGFsbHkuXG4gICAgICogQHBhcmFtIG9wdGlvbnMuc3RyZXRjaFkgIGBbW3kxLCB5Ml0sIC4uLl1gIElmIGBpY29uLXRleHQtZml0YCBpcyB1c2VkIGluIGEgbGF5ZXIgd2l0aCB0aGlzIGltYWdlLCB0aGlzIG9wdGlvbiBkZWZpbmVzIHRoZSBwYXJ0KHMpIG9mIHRoZSBpbWFnZSB0aGF0IGNhbiBiZSBzdHJldGNoZWQgdmVydGljYWxseS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gSWYgdGhlIHN0eWxlJ3Mgc3ByaXRlIGRvZXMgbm90IGFscmVhZHkgY29udGFpbiBhbiBpbWFnZSB3aXRoIElEICdjYXQnLFxuICAgICAqIC8vIGFkZCB0aGUgaW1hZ2UgJ2NhdC1pY29uLnBuZycgdG8gdGhlIHN0eWxlJ3Mgc3ByaXRlIHdpdGggdGhlIElEICdjYXQnLlxuICAgICAqIG1hcC5sb2FkSW1hZ2UoJ2h0dHBzOi8vdXBsb2FkLndpa2ltZWRpYS5vcmcvd2lraXBlZGlhL2NvbW1vbnMvdGh1bWIvNi82MC9DYXRfc2lsaG91ZXR0ZS5zdmcvNDAwcHgtQ2F0X3NpbGhvdWV0dGUuc3ZnLnBuZycsIGZ1bmN0aW9uKGVycm9yLCBpbWFnZSkge1xuICAgICAqICAgIGlmIChlcnJvcikgdGhyb3cgZXJyb3I7XG4gICAgICogICAgaWYgKCFtYXAuaGFzSW1hZ2UoJ2NhdCcpKSBtYXAuYWRkSW1hZ2UoJ2NhdCcsIGltYWdlKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqXG4gICAgICogLy8gQWRkIGEgc3RyZXRjaGFibGUgaW1hZ2UgdGhhdCBjYW4gYmUgdXNlZCB3aXRoIGBpY29uLXRleHQtZml0YFxuICAgICAqIC8vIEluIHRoaXMgZXhhbXBsZSwgdGhlIGltYWdlIGlzIDYwMHB4IHdpZGUgYnkgNDAwcHggaGlnaC5cbiAgICAgKiBtYXAubG9hZEltYWdlKCdodHRwczovL3VwbG9hZC53aWtpbWVkaWEub3JnL3dpa2lwZWRpYS9jb21tb25zLzgvODkvQmxhY2tfYW5kX1doaXRlX0JveGVkXyUyOGJvcmRlcmVkJTI5LnBuZycsIGZ1bmN0aW9uKGVycm9yLCBpbWFnZSkge1xuICAgICAqICAgIGlmIChlcnJvcikgdGhyb3cgZXJyb3I7XG4gICAgICogICAgaWYgKCFtYXAuaGFzSW1hZ2UoJ2JvcmRlci1pbWFnZScpKSB7XG4gICAgICogICAgICBtYXAuYWRkSW1hZ2UoJ2JvcmRlci1pbWFnZScsIGltYWdlLCB7XG4gICAgICogICAgICAgICAgY29udGVudDogWzE2LCAxNiwgMzAwLCAzODRdLCAvLyBwbGFjZSB0ZXh0IG92ZXIgbGVmdCBoYWxmIG9mIGltYWdlLCBhdm9pZGluZyB0aGUgMTZweCBib3JkZXJcbiAgICAgKiAgICAgICAgICBzdHJldGNoWDogW1sxNiwgNTg0XV0sIC8vIHN0cmV0Y2ggZXZlcnl0aGluZyBob3Jpem9udGFsbHkgZXhjZXB0IHRoZSAxNnB4IGJvcmRlclxuICAgICAqICAgICAgICAgIHN0cmV0Y2hZOiBbWzE2LCAzODRdXSwgLy8gc3RyZXRjaCBldmVyeXRoaW5nIHZlcnRpY2FsbHkgZXhjZXB0IHRoZSAxNnB4IGJvcmRlclxuICAgICAqICAgICAgfSk7XG4gICAgICogICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICpcbiAgICAgKiBAc2VlIFVzZSBgSFRNTEltYWdlRWxlbWVudGA6IFtBZGQgYW4gaWNvbiB0byB0aGUgbWFwXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2FkZC1pbWFnZS8pXG4gICAgICogQHNlZSBVc2UgYEltYWdlRGF0YWA6IFtBZGQgYSBnZW5lcmF0ZWQgaWNvbiB0byB0aGUgbWFwXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2FkZC1pbWFnZS1nZW5lcmF0ZWQvKVxuICAgICAqL1xuICAgIGFkZEltYWdlKGlkOiBzdHJpbmcsXG4gICAgICAgICAgICAgaW1hZ2U6IEhUTUxJbWFnZUVsZW1lbnQgfCBJbWFnZUJpdG1hcCB8IEltYWdlRGF0YSB8IHt3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgZGF0YTogVWludDhBcnJheSB8IFVpbnQ4Q2xhbXBlZEFycmF5fSB8IFN0eWxlSW1hZ2VJbnRlcmZhY2UsXG4gICAgICAgICAgICAge3BpeGVsUmF0aW8gPSAxLCBzZGYgPSBmYWxzZSwgc3RyZXRjaFgsIHN0cmV0Y2hZLCBjb250ZW50fTogJFNoYXBlPFN0eWxlSW1hZ2VNZXRhZGF0YT4gPSB7fSkge1xuICAgICAgICB0aGlzLl9sYXp5SW5pdEVtcHR5U3R5bGUoKTtcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IDA7XG5cbiAgICAgICAgaWYgKGltYWdlIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudCB8fCAoSW1hZ2VCaXRtYXAgJiYgaW1hZ2UgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0LCBkYXRhfSA9IGJyb3dzZXIuZ2V0SW1hZ2VEYXRhKGltYWdlKTtcbiAgICAgICAgICAgIHRoaXMuc3R5bGUuYWRkSW1hZ2UoaWQsIHtkYXRhOiBuZXcgUkdCQUltYWdlKHt3aWR0aCwgaGVpZ2h0fSwgZGF0YSksIHBpeGVsUmF0aW8sIHN0cmV0Y2hYLCBzdHJldGNoWSwgY29udGVudCwgc2RmLCB2ZXJzaW9ufSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaW1hZ2Uud2lkdGggPT09IHVuZGVmaW5lZCB8fCBpbWFnZS5oZWlnaHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnRzIHRvIG1hcC5hZGRJbWFnZSgpLiBUaGUgc2Vjb25kIGFyZ3VtZW50IG11c3QgYmUgYW4gYEhUTUxJbWFnZUVsZW1lbnRgLCBgSW1hZ2VEYXRhYCwgYEltYWdlQml0bWFwYCwgJyArXG4gICAgICAgICAgICAgICAgJ29yIG9iamVjdCB3aXRoIGB3aWR0aGAsIGBoZWlnaHRgLCBhbmQgYGRhdGFgIHByb3BlcnRpZXMgd2l0aCB0aGUgc2FtZSBmb3JtYXQgYXMgYEltYWdlRGF0YWAnKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qge3dpZHRoLCBoZWlnaHQsIGRhdGF9ID0gaW1hZ2U7XG4gICAgICAgICAgICBjb25zdCB1c2VySW1hZ2UgPSAoKGltYWdlOiBhbnkpOiBTdHlsZUltYWdlSW50ZXJmYWNlKTtcblxuICAgICAgICAgICAgdGhpcy5zdHlsZS5hZGRJbWFnZShpZCwge1xuICAgICAgICAgICAgICAgIGRhdGE6IG5ldyBSR0JBSW1hZ2Uoe3dpZHRoLCBoZWlnaHR9LCBuZXcgVWludDhBcnJheShkYXRhKSksXG4gICAgICAgICAgICAgICAgcGl4ZWxSYXRpbyxcbiAgICAgICAgICAgICAgICBzdHJldGNoWCxcbiAgICAgICAgICAgICAgICBzdHJldGNoWSxcbiAgICAgICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgICAgIHNkZixcbiAgICAgICAgICAgICAgICB2ZXJzaW9uLFxuICAgICAgICAgICAgICAgIHVzZXJJbWFnZVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICh1c2VySW1hZ2Uub25BZGQpIHtcbiAgICAgICAgICAgICAgICB1c2VySW1hZ2Uub25BZGQodGhpcywgaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtcmV0dXJuc1xuICAgIC8qKlxuICAgICAqIFVwZGF0ZSBhbiBleGlzdGluZyBpbWFnZSBpbiBhIHN0eWxlLiBUaGlzIGltYWdlIGNhbiBiZSBkaXNwbGF5ZWQgb24gdGhlIG1hcCBsaWtlIGFueSBvdGhlciBpY29uIGluIHRoZSBzdHlsZSdzXG4gICAgICogW3Nwcml0ZV0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vaGVscC9nbG9zc2FyeS9zcHJpdGUvKSB1c2luZyB0aGUgaW1hZ2UncyBJRCB3aXRoXG4gICAgICogW2BpY29uLWltYWdlYF0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3N0eWxlLXNwZWMvI2xheW91dC1zeW1ib2wtaWNvbi1pbWFnZSksXG4gICAgICogW2BiYWNrZ3JvdW5kLXBhdHRlcm5gXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy8jcGFpbnQtYmFja2dyb3VuZC1iYWNrZ3JvdW5kLXBhdHRlcm4pLFxuICAgICAqIFtgZmlsbC1wYXR0ZXJuYF0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3N0eWxlLXNwZWMvI3BhaW50LWZpbGwtZmlsbC1wYXR0ZXJuKSxcbiAgICAgKiBvciBbYGxpbmUtcGF0dGVybmBdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjLyNwYWludC1saW5lLWxpbmUtcGF0dGVybikuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaWQgVGhlIElEIG9mIHRoZSBpbWFnZS5cbiAgICAgKiBAcGFyYW0gaW1hZ2UgVGhlIGltYWdlIGFzIGFuIGBIVE1MSW1hZ2VFbGVtZW50YCwgYEltYWdlRGF0YWAsIGBJbWFnZUJpdG1hcGAgb3Igb2JqZWN0IHdpdGggYHdpZHRoYCwgYGhlaWdodGAsIGFuZCBgZGF0YWBcbiAgICAgKiBwcm9wZXJ0aWVzIHdpdGggdGhlIHNhbWUgZm9ybWF0IGFzIGBJbWFnZURhdGFgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJZiBhbiBpbWFnZSB3aXRoIHRoZSBJRCAnY2F0JyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgc3R5bGUncyBzcHJpdGUsXG4gICAgICogLy8gcmVwbGFjZSB0aGF0IGltYWdlIHdpdGggYSBuZXcgaW1hZ2UsICdvdGhlci1jYXQtaWNvbi5wbmcnLlxuICAgICAqIGlmIChtYXAuaGFzSW1hZ2UoJ2NhdCcpKSBtYXAudXBkYXRlSW1hZ2UoJ2NhdCcsICcuL290aGVyLWNhdC1pY29uLnBuZycpO1xuICAgICAqL1xuICAgIHVwZGF0ZUltYWdlKGlkOiBzdHJpbmcsXG4gICAgICAgIGltYWdlOiBIVE1MSW1hZ2VFbGVtZW50IHwgSW1hZ2VCaXRtYXAgfCBJbWFnZURhdGEgfCB7d2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIGRhdGE6IFVpbnQ4QXJyYXkgfCBVaW50OENsYW1wZWRBcnJheX0gfCBTdHlsZUltYWdlSW50ZXJmYWNlKSB7XG5cbiAgICAgICAgY29uc3QgZXhpc3RpbmdJbWFnZSA9IHRoaXMuc3R5bGUuZ2V0SW1hZ2UoaWQpO1xuICAgICAgICBpZiAoIWV4aXN0aW5nSW1hZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICdUaGUgbWFwIGhhcyBubyBpbWFnZSB3aXRoIHRoYXQgaWQuIElmIHlvdSBhcmUgYWRkaW5nIGEgbmV3IGltYWdlIHVzZSBgbWFwLmFkZEltYWdlKC4uLilgIGluc3RlYWQuJykpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbWFnZURhdGEgPSAoaW1hZ2UgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50IHx8IChJbWFnZUJpdG1hcCAmJiBpbWFnZSBpbnN0YW5jZW9mIEltYWdlQml0bWFwKSkgPyBicm93c2VyLmdldEltYWdlRGF0YShpbWFnZSkgOiBpbWFnZTtcbiAgICAgICAgY29uc3Qge3dpZHRoLCBoZWlnaHQsIGRhdGF9ID0gaW1hZ2VEYXRhO1xuXG4gICAgICAgIGlmICh3aWR0aCA9PT0gdW5kZWZpbmVkIHx8IGhlaWdodCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAnSW52YWxpZCBhcmd1bWVudHMgdG8gbWFwLnVwZGF0ZUltYWdlKCkuIFRoZSBzZWNvbmQgYXJndW1lbnQgbXVzdCBiZSBhbiBgSFRNTEltYWdlRWxlbWVudGAsIGBJbWFnZURhdGFgLCBgSW1hZ2VCaXRtYXBgLCAnICtcbiAgICAgICAgICAgICAgICAnb3Igb2JqZWN0IHdpdGggYHdpZHRoYCwgYGhlaWdodGAsIGFuZCBgZGF0YWAgcHJvcGVydGllcyB3aXRoIHRoZSBzYW1lIGZvcm1hdCBhcyBgSW1hZ2VEYXRhYCcpKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAod2lkdGggIT09IGV4aXN0aW5nSW1hZ2UuZGF0YS53aWR0aCB8fCBoZWlnaHQgIT09IGV4aXN0aW5nSW1hZ2UuZGF0YS5oZWlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICdUaGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgdXBkYXRlZCBpbWFnZSBtdXN0IGJlIHRoYXQgc2FtZSBhcyB0aGUgcHJldmlvdXMgdmVyc2lvbiBvZiB0aGUgaW1hZ2UnKSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29weSA9ICEoaW1hZ2UgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50IHx8IChJbWFnZUJpdG1hcCAmJiBpbWFnZSBpbnN0YW5jZW9mIEltYWdlQml0bWFwKSk7XG4gICAgICAgIGV4aXN0aW5nSW1hZ2UuZGF0YS5yZXBsYWNlKGRhdGEsIGNvcHkpO1xuXG4gICAgICAgIHRoaXMuc3R5bGUudXBkYXRlSW1hZ2UoaWQsIGV4aXN0aW5nSW1hZ2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIHdoZXRoZXIgb3Igbm90IGFuIGltYWdlIHdpdGggYSBzcGVjaWZpYyBJRCBleGlzdHMgaW4gdGhlIHN0eWxlLiBUaGlzIGNoZWNrcyBib3RoIGltYWdlc1xuICAgICAqIGluIHRoZSBzdHlsZSdzIG9yaWdpbmFsIFtzcHJpdGVdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL2hlbHAvZ2xvc3Nhcnkvc3ByaXRlLykgYW5kIGFueSBpbWFnZXNcbiAgICAgKiB0aGF0IGhhdmUgYmVlbiBhZGRlZCBhdCBydW50aW1lIHVzaW5nIHtAbGluayBNYXAjYWRkSW1hZ2V9LlxuICAgICAqXG4gICAgICogQHBhcmFtIGlkIFRoZSBJRCBvZiB0aGUgaW1hZ2UuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gIEEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGltYWdlIGV4aXN0cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIENoZWNrIGlmIGFuIGltYWdlIHdpdGggdGhlIElEICdjYXQnIGV4aXN0cyBpblxuICAgICAqIC8vIHRoZSBzdHlsZSdzIHNwcml0ZS5cbiAgICAgKiB2YXIgY2F0SWNvbkV4aXN0cyA9IG1hcC5oYXNJbWFnZSgnY2F0Jyk7XG4gICAgICovXG4gICAgaGFzSW1hZ2UoaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIWlkKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKCdNaXNzaW5nIHJlcXVpcmVkIGltYWdlIGlkJykpKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAhIXRoaXMuc3R5bGUuZ2V0SW1hZ2UoaWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhbiBpbWFnZSBmcm9tIGEgc3R5bGUuIFRoaXMgY2FuIGJlIGFuIGltYWdlIGZyb20gdGhlIHN0eWxlJ3Mgb3JpZ2luYWxcbiAgICAgKiBbc3ByaXRlXShodHRwczovL2RvY3MubWFwYm94LmNvbS9oZWxwL2dsb3NzYXJ5L3Nwcml0ZS8pIG9yIGFueSBpbWFnZXNcbiAgICAgKiB0aGF0IGhhdmUgYmVlbiBhZGRlZCBhdCBydW50aW1lIHVzaW5nIHtAbGluayBNYXAjYWRkSW1hZ2V9LlxuICAgICAqXG4gICAgICogQHBhcmFtIGlkIFRoZSBJRCBvZiB0aGUgaW1hZ2UuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIElmIGFuIGltYWdlIHdpdGggdGhlIElEICdjYXQnIGV4aXN0cyBpblxuICAgICAqIC8vIHRoZSBzdHlsZSdzIHNwcml0ZSwgcmVtb3ZlIGl0LlxuICAgICAqIGlmIChtYXAuaGFzSW1hZ2UoJ2NhdCcpKSBtYXAucmVtb3ZlSW1hZ2UoJ2NhdCcpO1xuICAgICAqL1xuICAgIHJlbW92ZUltYWdlKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zdHlsZS5yZW1vdmVJbWFnZShpZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9hZCBhbiBpbWFnZSBmcm9tIGFuIGV4dGVybmFsIFVSTCB0byBiZSB1c2VkIHdpdGgge0BsaW5rIE1hcCNhZGRJbWFnZX0uIEV4dGVybmFsXG4gICAgICogZG9tYWlucyBtdXN0IHN1cHBvcnQgW0NPUlNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvQWNjZXNzX2NvbnRyb2xfQ09SUykuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgb2YgdGhlIGltYWdlIGZpbGUuIEltYWdlIGZpbGUgbXVzdCBiZSBpbiBwbmcsIHdlYnAsIG9yIGpwZyBmb3JtYXQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgRXhwZWN0aW5nIGBjYWxsYmFjayhlcnJvciwgZGF0YSlgLiBDYWxsZWQgd2hlbiB0aGUgaW1hZ2UgaGFzIGxvYWRlZCBvciB3aXRoIGFuIGVycm9yIGFyZ3VtZW50IGlmIHRoZXJlIGlzIGFuIGVycm9yLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBMb2FkIGFuIGltYWdlIGZyb20gYW4gZXh0ZXJuYWwgVVJMLlxuICAgICAqIG1hcC5sb2FkSW1hZ2UoJ2h0dHA6Ly9wbGFjZWtpdHRlbi5jb20vNTAvNTAnLCBmdW5jdGlvbihlcnJvciwgaW1hZ2UpIHtcbiAgICAgKiAgIGlmIChlcnJvcikgdGhyb3cgZXJyb3I7XG4gICAgICogICAvLyBBZGQgdGhlIGxvYWRlZCBpbWFnZSB0byB0aGUgc3R5bGUncyBzcHJpdGUgd2l0aCB0aGUgSUQgJ2tpdHRlbicuXG4gICAgICogICBtYXAuYWRkSW1hZ2UoJ2tpdHRlbicsIGltYWdlKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIEBzZWUgW0FkZCBhbiBpY29uIHRvIHRoZSBtYXBdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvYWRkLWltYWdlLylcbiAgICAgKi9cbiAgICBsb2FkSW1hZ2UodXJsOiBzdHJpbmcsIGNhbGxiYWNrOiBGdW5jdGlvbikge1xuICAgICAgICBnZXRJbWFnZSh0aGlzLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KHVybCwgUmVzb3VyY2VUeXBlLkltYWdlKSwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICogUmV0dXJucyBhbiBBcnJheSBvZiBzdHJpbmdzIGNvbnRhaW5pbmcgdGhlIElEcyBvZiBhbGwgaW1hZ2VzIGN1cnJlbnRseSBhdmFpbGFibGUgaW4gdGhlIG1hcC5cbiAgICAqIFRoaXMgaW5jbHVkZXMgYm90aCBpbWFnZXMgZnJvbSB0aGUgc3R5bGUncyBvcmlnaW5hbCBbc3ByaXRlXShodHRwczovL2RvY3MubWFwYm94LmNvbS9oZWxwL2dsb3NzYXJ5L3Nwcml0ZS8pXG4gICAgKiBhbmQgYW55IGltYWdlcyB0aGF0IGhhdmUgYmVlbiBhZGRlZCBhdCBydW50aW1lIHVzaW5nIHtAbGluayBNYXAjYWRkSW1hZ2V9LlxuICAgICpcbiAgICAqIEByZXR1cm5zIHtBcnJheTxzdHJpbmc+fSBBbiBBcnJheSBvZiBzdHJpbmdzIGNvbnRhaW5pbmcgdGhlIG5hbWVzIG9mIGFsbCBzcHJpdGVzL2ltYWdlcyBjdXJyZW50bHkgYXZhaWxhYmxlIGluIHRoZSBtYXAuXG4gICAgKlxuICAgICogQGV4YW1wbGVcbiAgICAqIHZhciBhbGxJbWFnZXMgPSBtYXAubGlzdEltYWdlcygpO1xuICAgICpcbiAgICAqL1xuICAgIGxpc3RJbWFnZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlLmxpc3RJbWFnZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgW01hcGJveCBzdHlsZSBsYXllcl0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3N0eWxlLXNwZWMvI2xheWVycylcbiAgICAgKiB0byB0aGUgbWFwJ3Mgc3R5bGUuXG4gICAgICpcbiAgICAgKiBBIGxheWVyIGRlZmluZXMgaG93IGRhdGEgZnJvbSBhIHNwZWNpZmllZCBzb3VyY2Ugd2lsbCBiZSBzdHlsZWQuIFJlYWQgbW9yZSBhYm91dCBsYXllciB0eXBlc1xuICAgICAqIGFuZCBhdmFpbGFibGUgcGFpbnQgYW5kIGxheW91dCBwcm9wZXJ0aWVzIGluIHRoZSBbTWFwYm94IFN0eWxlIFNwZWNpZmljYXRpb25dKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjLyNsYXllcnMpLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3QgfCBDdXN0b21MYXllckludGVyZmFjZX0gbGF5ZXIgVGhlIGxheWVyIHRvIGFkZCwgY29uZm9ybWluZyB0byBlaXRoZXIgdGhlIE1hcGJveCBTdHlsZSBTcGVjaWZpY2F0aW9uJ3MgW2xheWVyIGRlZmluaXRpb25dKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjLyNsYXllcnMpIG9yLCBsZXNzIGNvbW1vbmx5LCB0aGUgW2BDdXN0b21MYXllckludGVyZmFjZWBdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9hcGkvI2N1c3RvbWxheWVyaW50ZXJmYWNlKSBzcGVjaWZpY2F0aW9uLlxuICAgICAqIFRoZSBNYXBib3ggU3R5bGUgU3BlY2lmaWNhdGlvbidzIGxheWVyIGRlZmluaXRpb24gaXMgYXBwcm9wcmlhdGUgZm9yIG1vc3QgbGF5ZXJzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVyLmlkIEEgdW5pcXVlIGlkZW5maWVyIHRoYXQgeW91IGRlZmluZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXIudHlwZSBUaGUgdHlwZSBvZiBsYXllciAoZm9yIGV4YW1wbGUgYGZpbGxgIG9yIGBzeW1ib2xgKS5cbiAgICAgKiBBIGxpc3Qgb2YgbGF5ZXIgdHlwZXMgaXMgYXZhaWxhYmxlIGluIHRoZSBbTWFwYm94IFN0eWxlIFNwZWNpZmljYXRpb25dKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjL2xheWVycy8jdHlwZSkuXG4gICAgICpcbiAgICAgKiAoVGhpcyBjYW4gYWxzbyBiZSBgY3VzdG9tYC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbYEN1c3RvbUxheWVySW50ZXJmYWNlYF0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2FwaS8jY3VzdG9tbGF5ZXJpbnRlcmZhY2UpLilcbiAgICAgKiBAcGFyYW0ge3N0cmluZyB8IE9iamVjdH0gW2xheWVyLnNvdXJjZV0gVGhlIGRhdGEgc291cmNlIGZvciB0aGUgbGF5ZXIuXG4gICAgICogUmVmZXJlbmNlIGEgc291cmNlIHRoYXQgaGFzIF9hbHJlYWR5IGJlZW4gZGVmaW5lZF8gdXNpbmcgdGhlIHNvdXJjZSdzIHVuaXF1ZSBpZC5cbiAgICAgKiBSZWZlcmVuY2UgYSBfbmV3IHNvdXJjZV8gdXNpbmcgYSBzb3VyY2Ugb2JqZWN0IChhcyBkZWZpbmVkIGluIHRoZSBbTWFwYm94IFN0eWxlIFNwZWNpZmljYXRpb25dKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjL3NvdXJjZXMvKSkgZGlyZWN0bHkuXG4gICAgICogVGhpcyBpcyAqKnJlcXVpcmVkKiogZm9yIGFsbCBgbGF5ZXIudHlwZWAgb3B0aW9ucyBfZXhjZXB0XyBmb3IgYGN1c3RvbWAuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtsYXllci5zb3VyY2VMYXllcl0gKG9wdGlvbmFsKSBUaGUgbmFtZSBvZiB0aGUgW3NvdXJjZSBsYXllcl0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vaGVscC9nbG9zc2FyeS9zb3VyY2UtbGF5ZXIvKSB3aXRoaW4gdGhlIHNwZWNpZmllZCBgbGF5ZXIuc291cmNlYCB0byB1c2UgZm9yIHRoaXMgc3R5bGUgbGF5ZXIuXG4gICAgICogVGhpcyBpcyBvbmx5IGFwcGxpY2FibGUgZm9yIHZlY3RvciB0aWxlIHNvdXJjZXMgYW5kIGlzICoqcmVxdWlyZWQqKiB3aGVuIGBsYXllci5zb3VyY2VgIGlzIG9mIHRoZSB0eXBlIGB2ZWN0b3JgLlxuICAgICAqIEBwYXJhbSB7YXJyYXl9IFtsYXllci5maWx0ZXJdIChvcHRpb25hbCkgQW4gZXhwcmVzc2lvbiBzcGVjaWZ5aW5nIGNvbmRpdGlvbnMgb24gc291cmNlIGZlYXR1cmVzLlxuICAgICAqIE9ubHkgZmVhdHVyZXMgdGhhdCBtYXRjaCB0aGUgZmlsdGVyIGFyZSBkaXNwbGF5ZWQuXG4gICAgICogVGhlIE1hcGJveCBTdHlsZSBTcGVjaWZpY2F0aW9uIGluY2x1ZGVzIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGxpbWl0YXRpb25zIG9mIHRoZSBbYGZpbHRlcmBdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjL2xheWVycy8jZmlsdGVyKSBwYXJhbWV0ZXJcbiAgICAgKiBhbmQgYSBjb21wbGV0ZSBsaXN0IG9mIGF2YWlsYWJsZSBbZXhwcmVzc2lvbnNdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjL2V4cHJlc3Npb25zLykuXG4gICAgICogSWYgbm8gZmlsdGVyIGlzIHByb3ZpZGVkLCBhbGwgZmVhdHVyZXMgaW4gdGhlIHNvdXJjZSAob3Igc291cmNlIGxheWVyIGZvciB2ZWN0b3IgdGlsZXNldHMpIHdpbGwgYmUgZGlzcGxheWVkLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbbGF5ZXIucGFpbnRdIChvcHRpb25hbCkgUGFpbnQgcHJvcGVydGllcyBmb3IgdGhlIGxheWVyLlxuICAgICAqIEF2YWlsYWJsZSBwYWludCBwcm9wZXJ0aWVzIHZhcnkgYnkgYGxheWVyLnR5cGVgLlxuICAgICAqIEEgZnVsbCBsaXN0IG9mIHBhaW50IHByb3BlcnRpZXMgZm9yIGVhY2ggbGF5ZXIgdHlwZSBpcyBhdmFpbGFibGUgaW4gdGhlIFtNYXBib3ggU3R5bGUgU3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3N0eWxlLXNwZWMvbGF5ZXJzLykuXG4gICAgICogSWYgbm8gcGFpbnQgcHJvcGVydGllcyBhcmUgc3BlY2lmaWVkLCBkZWZhdWx0IHZhbHVlcyB3aWxsIGJlIHVzZWQuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtsYXllci5sYXlvdXRdIChvcHRpb25hbCkgTGF5b3V0IHByb3BlcnRpZXMgZm9yIHRoZSBsYXllci5cbiAgICAgKiBBdmFpbGFibGUgbGF5b3V0IHByb3BlcnRpZXMgdmFyeSBieSBgbGF5ZXIudHlwZWAuXG4gICAgICogQSBmdWxsIGxpc3Qgb2YgbGF5b3V0IHByb3BlcnRpZXMgZm9yIGVhY2ggbGF5ZXIgdHlwZSBpcyBhdmFpbGFibGUgaW4gdGhlIFtNYXBib3ggU3R5bGUgU3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3N0eWxlLXNwZWMvbGF5ZXJzLykuXG4gICAgICogSWYgbm8gbGF5b3V0IHByb3BlcnRpZXMgYXJlIHNwZWNpZmllZCwgZGVmYXVsdCB2YWx1ZXMgd2lsbCBiZSB1c2VkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGF5ZXIubWF4em9vbV0gKG9wdGlvbmFsKSBUaGUgbWF4aW11bSB6b29tIGxldmVsIGZvciB0aGUgbGF5ZXIuXG4gICAgICogQXQgem9vbSBsZXZlbHMgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIHRoZSBtYXh6b29tLCB0aGUgbGF5ZXIgd2lsbCBiZSBoaWRkZW4uXG4gICAgICogVGhlIHZhbHVlIGNhbiBiZSBhbnkgbnVtYmVyIGJldHdlZW4gYDBgIGFuZCBgMjRgIChpbmNsdXNpdmUpLlxuICAgICAqIElmIG5vIG1heHpvb20gaXMgcHJvdmlkZWQsIHRoZSBsYXllciB3aWxsIGJlIHZpc2libGUgYXQgYWxsIHpvb20gbGV2ZWxzIGZvciB3aGljaCB0aGVyZSBhcmUgdGlsZXMgYXZhaWxhYmxlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGF5ZXIubWluem9vbV0gKG9wdGlvbmFsKSBUaGUgbWluaW11bSB6b29tIGxldmVsIGZvciB0aGUgbGF5ZXIuXG4gICAgICogQXQgem9vbSBsZXZlbHMgbGVzcyB0aGFuIHRoZSBtaW56b29tLCB0aGUgbGF5ZXIgd2lsbCBiZSBoaWRkZW4uXG4gICAgICogVGhlIHZhbHVlIGNhbiBiZSBhbnkgbnVtYmVyIGJldHdlZW4gYDBgIGFuZCBgMjRgIChpbmNsdXNpdmUpLlxuICAgICAqIElmIG5vIG1pbnpvb20gaXMgcHJvdmlkZWQsIHRoZSBsYXllciB3aWxsIGJlIHZpc2libGUgYXQgYWxsIHpvb20gbGV2ZWxzIGZvciB3aGljaCB0aGVyZSBhcmUgdGlsZXMgYXZhaWxhYmxlLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbbGF5ZXIubWV0YWRhdGFdIChvcHRpb25hbCkgQXJiaXRyYXJ5IHByb3BlcnRpZXMgdXNlZnVsIHRvIHRyYWNrIHdpdGggdGhlIGxheWVyLCBidXQgZG8gbm90IGluZmx1ZW5jZSByZW5kZXJpbmcuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtsYXllci5yZW5kZXJpbmdNb2RlXSBUaGlzIGlzIG9ubHkgYXBwbGljYWJsZSBmb3IgbGF5ZXJzIHdpdGggdGhlIHR5cGUgYGN1c3RvbWAuXG4gICAgICogU2VlIFtgQ3VzdG9tTGF5ZXJJbnRlcmZhY2VgXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvYXBpLyNjdXN0b21sYXllcmludGVyZmFjZSkgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtiZWZvcmVJZF0gVGhlIElEIG9mIGFuIGV4aXN0aW5nIGxheWVyIHRvIGluc2VydCB0aGUgbmV3IGxheWVyIGJlZm9yZS5cbiAgICAgKiBJZiB0aGlzIGFyZ3VtZW50IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBsYXllciB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBlbmQgb2YgdGhlIGxheWVycyBhcnJheS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBBZGQgYSBjaXJjbGUgbGF5ZXIgd2l0aCBhIHZlY3RvciBzb3VyY2VcbiAgICAgKiBtYXAuYWRkTGF5ZXIoe1xuICAgICAqICAgaWQ6ICdwb2ludHMtb2YtaW50ZXJlc3QnLFxuICAgICAqICAgc291cmNlOiB7XG4gICAgICogICAgIHR5cGU6ICd2ZWN0b3InLFxuICAgICAqICAgICB1cmw6ICdtYXBib3g6Ly9tYXBib3gubWFwYm94LXN0cmVldHMtdjgnXG4gICAgICogICB9LFxuICAgICAqICAgJ3NvdXJjZS1sYXllcic6ICdwb2lfbGFiZWwnLFxuICAgICAqICAgdHlwZTogJ2NpcmNsZScsXG4gICAgICogICBwYWludDoge1xuICAgICAqICAgICAvLyBNYXBib3ggU3R5bGUgU3BlY2lmaWNhdGlvbiBwYWludCBwcm9wZXJ0aWVzXG4gICAgICogICB9LFxuICAgICAqICAgbGF5b3V0OiB7XG4gICAgICogICAgIC8vIE1hcGJveCBTdHlsZSBTcGVjaWZpY2F0aW9uIGxheW91dCBwcm9wZXJ0aWVzXG4gICAgICogICB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIERlZmluZSBhIHNvdXJjZSBiZWZvcmUgdXNpbmcgaXQgdG8gY3JlYXRlIGEgbmV3IGxheWVyXG4gICAgICogbWFwLmFkZFNvdXJjZSgnc3RhdGUtZGF0YScsIHtcbiAgICAgKiAgIHR5cGU6ICdnZW9qc29uJyxcbiAgICAgKiAgIGRhdGE6ICdwYXRoL3RvL2RhdGEuZ2VvanNvbidcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIG1hcC5hZGRMYXllcih7XG4gICAgICogICBpZDogJ3N0YXRlcycsXG4gICAgICogICAvLyBSZWZlcmVuY2VzIHRoZSBHZW9KU09OIHNvdXJjZSBkZWZpbmVkIGFib3ZlXG4gICAgICogICAvLyBhbmQgZG9lcyBub3QgcmVxdWlyZSBhIGBzb3VyY2UtbGF5ZXJgXG4gICAgICogICBzb3VyY2U6ICdzdGF0ZS1kYXRhJyxcbiAgICAgKiAgIHR5cGU6ICdzeW1ib2wnLFxuICAgICAqICAgbGF5b3V0OiB7XG4gICAgICogICAgIC8vIFNldCB0aGUgbGFiZWwgY29udGVudCB0byB0aGVcbiAgICAgKiAgICAgLy8gZmVhdHVyZSdzIGBuYW1lYCBwcm9wZXJ0eVxuICAgICAqICAgICB0ZXh0LWZpZWxkOiBbJ2dldCcsICduYW1lJ11cbiAgICAgKiAgIH1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gQWRkIGEgbmV3IHN5bWJvbCBsYXllciBiZWZvcmUgYW4gZXhpc3RpbmcgbGF5ZXJcbiAgICAgKiBtYXAuYWRkTGF5ZXIoe1xuICAgICAqICAgaWQ6ICdzdGF0ZXMnLFxuICAgICAqICAgLy8gUmVmZXJlbmNlcyBhIHNvdXJjZSB0aGF0J3MgYWxyZWFkeSBiZWVuIGRlZmluZWRcbiAgICAgKiAgIHNvdXJjZTogJ3N0YXRlLWRhdGEnLFxuICAgICAqICAgdHlwZTogJ3N5bWJvbCcsXG4gICAgICogICBsYXlvdXQ6IHtcbiAgICAgKiAgICAgLy8gU2V0IHRoZSBsYWJlbCBjb250ZW50IHRvIHRoZVxuICAgICAqICAgICAvLyBmZWF0dXJlJ3MgYG5hbWVgIHByb3BlcnR5XG4gICAgICogICAgIHRleHQtZmllbGQ6IFsnZ2V0JywgJ25hbWUnXVxuICAgICAqICAgfVxuICAgICAqIC8vIEFkZCB0aGUgbGF5ZXIgYmVmb3JlIHRoZSBleGlzdGluZyBgY2l0aWVzYCBsYXllclxuICAgICAqIH0sICdjaXRpZXMnKTtcbiAgICAgKlxuICAgICAqIEBzZWUgW0NyZWF0ZSBhbmQgc3R5bGUgY2x1c3RlcnNdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2NsdXN0ZXIvKVxuICAgICAqIEBzZWUgW0FkZCBhIHZlY3RvciB0aWxlIHNvdXJjZV0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvdmVjdG9yLXNvdXJjZS8pXG4gICAgICogQHNlZSBbQWRkIGEgV01TIHNvdXJjZV0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvd21zLylcbiAgICAgKi9cbiAgICBhZGRMYXllcihsYXllcjogTGF5ZXJTcGVjaWZpY2F0aW9uIHwgQ3VzdG9tTGF5ZXJJbnRlcmZhY2UsIGJlZm9yZUlkPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2xhenlJbml0RW1wdHlTdHlsZSgpO1xuICAgICAgICB0aGlzLnN0eWxlLmFkZExheWVyKGxheWVyLCBiZWZvcmVJZCk7XG4gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTW92ZXMgYSBsYXllciB0byBhIGRpZmZlcmVudCB6LXBvc2l0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFRoZSBJRCBvZiB0aGUgbGF5ZXIgdG8gbW92ZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2JlZm9yZUlkXSBUaGUgSUQgb2YgYW4gZXhpc3RpbmcgbGF5ZXIgdG8gaW5zZXJ0IHRoZSBuZXcgbGF5ZXIgYmVmb3JlLiBXaGVuIHZpZXdpbmcgdGhlIG1hcCwgdGhlIGBpZGAgbGF5ZXIgd2lsbCBhcHBlYXIgYmVuZWF0aCB0aGUgYGJlZm9yZUlkYCBsYXllci4gSWYgYGJlZm9yZUlkYCBpcyBvbWl0dGVkLCB0aGUgbGF5ZXIgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgZW5kIG9mIHRoZSBsYXllcnMgYXJyYXkgYW5kIGFwcGVhciBhYm92ZSBhbGwgb3RoZXIgbGF5ZXJzIG9uIHRoZSBtYXAuXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIE1vdmUgYSBsYXllciB3aXRoIElEICdwb2x5Z29uJyBiZWZvcmUgdGhlIGxheWVyIHdpdGggSUQgJ2NvdW50cnktbGFiZWwnLiBUaGUgYHBvbHlnb25gIGxheWVyIHdpbGwgYXBwZWFyIGJlbmVhdGggdGhlIGBjb3VudHJ5LWxhYmVsYCBsYXllciBvbiB0aGUgbWFwLlxuICAgICAqIG1hcC5tb3ZlTGF5ZXIoJ3BvbHlnb24nLCAnY291bnRyeS1sYWJlbCcpO1xuICAgICAqL1xuICAgIG1vdmVMYXllcihpZDogc3RyaW5nLCBiZWZvcmVJZD86IHN0cmluZykge1xuICAgICAgICB0aGlzLnN0eWxlLm1vdmVMYXllcihpZCwgYmVmb3JlSWQpO1xuICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlKHRydWUpO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLXJldHVybnNcbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBsYXllciB3aXRoIHRoZSBnaXZlbiBJRCBmcm9tIHRoZSBtYXAncyBzdHlsZS5cbiAgICAgKlxuICAgICAqIElmIG5vIHN1Y2ggbGF5ZXIgZXhpc3RzLCBhbiBgZXJyb3JgIGV2ZW50IGlzIGZpcmVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIGlkIG9mIHRoZSBsYXllciB0byByZW1vdmVcbiAgICAgKiBAZmlyZXMgZXJyb3JcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gSWYgYSBsYXllciB3aXRoIElEICdzdGF0ZS1kYXRhJyBleGlzdHMsIHJlbW92ZSBpdC5cbiAgICAgKiBpZiAobWFwLmdldExheWVyKCdzdGF0ZS1kYXRhJykpIG1hcC5yZW1vdmVMYXllcignc3RhdGUtZGF0YScpO1xuICAgICAqL1xuICAgIHJlbW92ZUxheWVyKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zdHlsZS5yZW1vdmVMYXllcihpZCk7XG4gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbGF5ZXIgd2l0aCB0aGUgc3BlY2lmaWVkIElEIGluIHRoZSBtYXAncyBzdHlsZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBUaGUgSUQgb2YgdGhlIGxheWVyIHRvIGdldC5cbiAgICAgKiBAcmV0dXJucyB7P09iamVjdH0gVGhlIGxheWVyIHdpdGggdGhlIHNwZWNpZmllZCBJRCwgb3IgYHVuZGVmaW5lZGBcbiAgICAgKiAgIGlmIHRoZSBJRCBjb3JyZXNwb25kcyB0byBubyBleGlzdGluZyBsYXllcnMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBzdGF0ZURhdGFMYXllciA9IG1hcC5nZXRMYXllcignc3RhdGUtZGF0YScpO1xuICAgICAqXG4gICAgICogQHNlZSBbRmlsdGVyIHN5bWJvbHMgYnkgdG9nZ2xpbmcgYSBsaXN0XShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2ZpbHRlci1tYXJrZXJzLylcbiAgICAgKiBAc2VlIFtGaWx0ZXIgc3ltYm9scyBieSB0ZXh0IGlucHV0XShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2ZpbHRlci1tYXJrZXJzLWJ5LWlucHV0LylcbiAgICAgKi9cbiAgICBnZXRMYXllcihpZDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlLmdldExheWVyKGlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB6b29tIGV4dGVudCBmb3IgdGhlIHNwZWNpZmllZCBzdHlsZSBsYXllci4gVGhlIHpvb20gZXh0ZW50IGluY2x1ZGVzIHRoZVxuICAgICAqIFttaW5pbXVtIHpvb20gbGV2ZWxdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjLyNsYXllci1taW56b29tKVxuICAgICAqIGFuZCBbbWF4aW11bSB6b29tIGxldmVsXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy8jbGF5ZXItbWF4em9vbSkpXG4gICAgICogYXQgd2hpY2ggdGhlIGxheWVyIHdpbGwgYmUgcmVuZGVyZWQuXG4gICAgICpcbiAgICAgKiBOb3RlOiBGb3Igc3R5bGUgbGF5ZXJzIHVzaW5nIHZlY3RvciBzb3VyY2VzLCBzdHlsZSBsYXllcnMgY2Fubm90IGJlIHJlbmRlcmVkIGF0IHpvb20gbGV2ZWxzIGxvd2VyIHRoYW4gdGhlXG4gICAgICogbWluaW11bSB6b29tIGxldmVsIG9mIHRoZSBfc291cmNlIGxheWVyXyBiZWNhdXNlIHRoZSBkYXRhIGRvZXMgbm90IGV4aXN0IGF0IHRob3NlIHpvb20gbGV2ZWxzLiBJZiB0aGUgbWluaW11bVxuICAgICAqIHpvb20gbGV2ZWwgb2YgdGhlIHNvdXJjZSBsYXllciBpcyBoaWdoZXIgdGhhbiB0aGUgbWluaW11bSB6b29tIGxldmVsIGRlZmluZWQgaW4gdGhlIHN0eWxlIGxheWVyLCB0aGUgc3R5bGVcbiAgICAgKiBsYXllciB3aWxsIG5vdCBiZSByZW5kZXJlZCBhdCBhbGwgem9vbSBsZXZlbHMgaW4gdGhlIHpvb20gcmFuZ2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJJZCBUaGUgSUQgb2YgdGhlIGxheWVyIHRvIHdoaWNoIHRoZSB6b29tIGV4dGVudCB3aWxsIGJlIGFwcGxpZWQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG1pbnpvb20gVGhlIG1pbmltdW0gem9vbSB0byBzZXQgKDAtMjQpLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtYXh6b29tIFRoZSBtYXhpbXVtIHpvb20gdG8gc2V0ICgwLTI0KS5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLnNldExheWVyWm9vbVJhbmdlKCdteS1sYXllcicsIDIsIDUpO1xuICAgICAqXG4gICAgICovXG4gICAgc2V0TGF5ZXJab29tUmFuZ2UobGF5ZXJJZDogc3RyaW5nLCBtaW56b29tOiBudW1iZXIsIG1heHpvb206IG51bWJlcikge1xuICAgICAgICB0aGlzLnN0eWxlLnNldExheWVyWm9vbVJhbmdlKGxheWVySWQsIG1pbnpvb20sIG1heHpvb20pO1xuICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlKHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGZpbHRlciBmb3IgdGhlIHNwZWNpZmllZCBzdHlsZSBsYXllci5cbiAgICAgKlxuICAgICAqIEZpbHRlcnMgY29udHJvbCB3aGljaCBmZWF0dXJlcyBhIHN0eWxlIGxheWVyIHJlbmRlcnMgZnJvbSBpdHMgc291cmNlLlxuICAgICAqIEFueSBmZWF0dXJlIGZvciB3aGljaCB0aGUgZmlsdGVyIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIGB0cnVlYCB3aWxsIGJlXG4gICAgICogcmVuZGVyZWQgb24gdGhlIG1hcC4gVGhvc2UgdGhhdCBhcmUgZmFsc2Ugd2lsbCBiZSBoaWRkZW4uXG4gICAgICpcbiAgICAgKiBVc2UgYHNldEZpbHRlcmAgdG8gc2hvdyBhIHN1YnNldCBvZiB5b3VyIHNvdXJjZSBkYXRhLlxuICAgICAqXG4gICAgICogVG8gY2xlYXIgdGhlIGZpbHRlciwgcGFzcyBgbnVsbGAgb3IgYHVuZGVmaW5lZGAgYXMgdGhlIHNlY29uZCBwYXJhbWV0ZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJJZCBUaGUgSUQgb2YgdGhlIGxheWVyIHRvIHdoaWNoIHRoZSBmaWx0ZXIgd2lsbCBiZSBhcHBsaWVkLlxuICAgICAqIEBwYXJhbSB7QXJyYXkgfCBudWxsIHwgdW5kZWZpbmVkfSBmaWx0ZXIgVGhlIGZpbHRlciwgY29uZm9ybWluZyB0byB0aGUgTWFwYm94IFN0eWxlIFNwZWNpZmljYXRpb24nc1xuICAgICAqICAgW2ZpbHRlciBkZWZpbml0aW9uXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy9sYXllcnMvI2ZpbHRlcikuICBJZiBgbnVsbGAgb3IgYHVuZGVmaW5lZGAgaXMgcHJvdmlkZWQsIHRoZSBmdW5jdGlvbiByZW1vdmVzIGFueSBleGlzdGluZyBmaWx0ZXIgZnJvbSB0aGUgbGF5ZXIuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBPcHRpb25zIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnZhbGlkYXRlPXRydWVdIFdoZXRoZXIgdG8gY2hlY2sgaWYgdGhlIGZpbHRlciBjb25mb3JtcyB0byB0aGUgTWFwYm94IEdMIFN0eWxlIFNwZWNpZmljYXRpb24uIERpc2FibGluZyB2YWxpZGF0aW9uIGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHRoYXQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB5b3UgaGF2ZSBwcmV2aW91c2x5IHZhbGlkYXRlZCB0aGUgdmFsdWVzIHlvdSB3aWxsIGJlIHBhc3NpbmcgdG8gdGhpcyBmdW5jdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gZGlzcGxheSBvbmx5IGZlYXR1cmVzIHdpdGggdGhlICduYW1lJyBwcm9wZXJ0eSAnVVNBJ1xuICAgICAqIG1hcC5zZXRGaWx0ZXIoJ215LWxheWVyJywgWyc9PScsIFsnZ2V0JywgJ25hbWUnXSwgJ1VTQSddKTtcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIGRpc3BsYXkgb25seSBmZWF0dXJlcyB3aXRoIGZpdmUgb3IgbW9yZSAnYXZhaWxhYmxlLXNwb3RzJ1xuICAgICAqIG1hcC5zZXRGaWx0ZXIoJ2Jpa2UtZG9ja3MnLCBbJz49JywgWydnZXQnLCAnYXZhaWxhYmxlLXNwb3RzJ10sIDVdKTtcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIHJlbW92ZSB0aGUgZmlsdGVyIGZvciB0aGUgJ2Jpa2UtZG9ja3MnIHN0eWxlIGxheWVyXG4gICAgICogbWFwLnNldEZpbHRlcignYmlrZS1kb2NrcycsIG51bGwpO1xuICAgICAqXG4gICAgICogQHNlZSBbRmlsdGVyIGZlYXR1cmVzIHdpdGhpbiBtYXAgdmlld10oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9maWx0ZXItZmVhdHVyZXMtd2l0aGluLW1hcC12aWV3LylcbiAgICAgKiBAc2VlIFtIaWdobGlnaHQgZmVhdHVyZXMgY29udGFpbmluZyBzaW1pbGFyIGRhdGFdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvcXVlcnktc2ltaWxhci1mZWF0dXJlcy8pXG4gICAgICogQHNlZSBbQ3JlYXRlIGEgdGltZWxpbmUgYW5pbWF0aW9uXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3RpbWVsaW5lLWFuaW1hdGlvbi8pXG4gICAgICogQHNlZSBUdXRvcmlhbDogW1Nob3cgY2hhbmdlcyBvdmVyIHRpbWVdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL2hlbHAvdHV0b3JpYWxzL3Nob3ctY2hhbmdlcy1vdmVyLXRpbWUvKVxuICAgICAqL1xuICAgIHNldEZpbHRlcihsYXllcklkOiBzdHJpbmcsIGZpbHRlcjogP0ZpbHRlclNwZWNpZmljYXRpb24sICBvcHRpb25zOiBTdHlsZVNldHRlck9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLnN0eWxlLnNldEZpbHRlcihsYXllcklkLCBmaWx0ZXIsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlKHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGZpbHRlciBhcHBsaWVkIHRvIHRoZSBzcGVjaWZpZWQgc3R5bGUgbGF5ZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJJZCBUaGUgSUQgb2YgdGhlIHN0eWxlIGxheWVyIHdob3NlIGZpbHRlciB0byBnZXQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBUaGUgbGF5ZXIncyBmaWx0ZXIuXG4gICAgICovXG4gICAgZ2V0RmlsdGVyKGxheWVySWQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZS5nZXRGaWx0ZXIobGF5ZXJJZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdmFsdWUgb2YgYSBwYWludCBwcm9wZXJ0eSBpbiB0aGUgc3BlY2lmaWVkIHN0eWxlIGxheWVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVySWQgVGhlIElEIG9mIHRoZSBsYXllciB0byBzZXQgdGhlIHBhaW50IHByb3BlcnR5IGluLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBwYWludCBwcm9wZXJ0eSB0byBzZXQuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIHBhaW50IHByb3BlcnR5IHRvIHNldC5cbiAgICAgKiAgIE11c3QgYmUgb2YgYSB0eXBlIGFwcHJvcHJpYXRlIGZvciB0aGUgcHJvcGVydHksIGFzIGRlZmluZWQgaW4gdGhlIFtNYXBib3ggU3R5bGUgU3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtc3R5bGUtc3BlYy8pLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gT3B0aW9ucyBvYmplY3QuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy52YWxpZGF0ZT10cnVlXSBXaGV0aGVyIHRvIGNoZWNrIGlmIGB2YWx1ZWAgY29uZm9ybXMgdG8gdGhlIE1hcGJveCBHTCBTdHlsZSBTcGVjaWZpY2F0aW9uLiBEaXNhYmxpbmcgdmFsaWRhdGlvbiBpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiB0aGF0IHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgeW91IGhhdmUgcHJldmlvdXNseSB2YWxpZGF0ZWQgdGhlIHZhbHVlcyB5b3Ugd2lsbCBiZSBwYXNzaW5nIHRvIHRoaXMgZnVuY3Rpb24uXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXAuc2V0UGFpbnRQcm9wZXJ0eSgnbXktbGF5ZXInLCAnZmlsbC1jb2xvcicsICcjZmFhZmVlJyk7XG4gICAgICogQHNlZSBbQ2hhbmdlIGEgbGF5ZXIncyBjb2xvciB3aXRoIGJ1dHRvbnNdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvY29sb3Itc3dpdGNoZXIvKVxuICAgICAqIEBzZWUgW0FkanVzdCBhIGxheWVyJ3Mgb3BhY2l0eV0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9hZGp1c3QtbGF5ZXItb3BhY2l0eS8pXG4gICAgICogQHNlZSBbQ3JlYXRlIGEgZHJhZ2dhYmxlIHBvaW50XShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2RyYWctYS1wb2ludC8pXG4gICAgICovXG4gICAgc2V0UGFpbnRQcm9wZXJ0eShsYXllcklkOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSwgb3B0aW9uczogU3R5bGVTZXR0ZXJPcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5zdHlsZS5zZXRQYWludFByb3BlcnR5KGxheWVySWQsIG5hbWUsIHZhbHVlLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZSh0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHBhaW50IHByb3BlcnR5IGluIHRoZSBzcGVjaWZpZWQgc3R5bGUgbGF5ZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJJZCBUaGUgSUQgb2YgdGhlIGxheWVyIHRvIGdldCB0aGUgcGFpbnQgcHJvcGVydHkgZnJvbS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiBhIHBhaW50IHByb3BlcnR5IHRvIGdldC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gVGhlIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgcGFpbnQgcHJvcGVydHkuXG4gICAgICovXG4gICAgZ2V0UGFpbnRQcm9wZXJ0eShsYXllcklkOiBzdHJpbmcsIG5hbWU6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZS5nZXRQYWludFByb3BlcnR5KGxheWVySWQsIG5hbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHZhbHVlIG9mIGEgbGF5b3V0IHByb3BlcnR5IGluIHRoZSBzcGVjaWZpZWQgc3R5bGUgbGF5ZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJJZCBUaGUgSUQgb2YgdGhlIGxheWVyIHRvIHNldCB0aGUgbGF5b3V0IHByb3BlcnR5IGluLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBsYXlvdXQgcHJvcGVydHkgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBsYXlvdXQgcHJvcGVydHkuIE11c3QgYmUgb2YgYSB0eXBlIGFwcHJvcHJpYXRlIGZvciB0aGUgcHJvcGVydHksIGFzIGRlZmluZWQgaW4gdGhlIFtNYXBib3ggU3R5bGUgU3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtc3R5bGUtc3BlYy8pLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gT3B0aW9ucyBvYmplY3QuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy52YWxpZGF0ZT10cnVlXSBXaGV0aGVyIHRvIGNoZWNrIGlmIGB2YWx1ZWAgY29uZm9ybXMgdG8gdGhlIE1hcGJveCBHTCBTdHlsZSBTcGVjaWZpY2F0aW9uLiBEaXNhYmxpbmcgdmFsaWRhdGlvbiBpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiB0aGF0IHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgeW91IGhhdmUgcHJldmlvdXNseSB2YWxpZGF0ZWQgdGhlIHZhbHVlcyB5b3Ugd2lsbCBiZSBwYXNzaW5nIHRvIHRoaXMgZnVuY3Rpb24uXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXAuc2V0TGF5b3V0UHJvcGVydHkoJ215LWxheWVyJywgJ3Zpc2liaWxpdHknLCAnbm9uZScpO1xuICAgICAqIEBzZWUgW1Nob3cgYW5kIGhpZGUgbGF5ZXJzXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS90b2dnbGUtbGF5ZXJzLylcbiAgICAgKi9cbiAgICBzZXRMYXlvdXRQcm9wZXJ0eShsYXllcklkOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSwgb3B0aW9uczogU3R5bGVTZXR0ZXJPcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5zdHlsZS5zZXRMYXlvdXRQcm9wZXJ0eShsYXllcklkLCBuYW1lLCB2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBsYXlvdXQgcHJvcGVydHkgaW4gdGhlIHNwZWNpZmllZCBzdHlsZSBsYXllci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllcklkIFRoZSBJRCBvZiB0aGUgbGF5ZXIgdG8gZ2V0IHRoZSBsYXlvdXQgcHJvcGVydHkgZnJvbS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgbGF5b3V0IHByb3BlcnR5IHRvIGdldC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gVGhlIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgbGF5b3V0IHByb3BlcnR5LlxuICAgICAqL1xuICAgIGdldExheW91dFByb3BlcnR5KGxheWVySWQ6IHN0cmluZywgbmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlLmdldExheW91dFByb3BlcnR5KGxheWVySWQsIG5hbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGFueSBjb21iaW5hdGlvbiBvZiBsaWdodCB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbGlnaHQgTGlnaHQgcHJvcGVydGllcyB0byBzZXQuIE11c3QgY29uZm9ybSB0byB0aGUgW01hcGJveCBTdHlsZSBTcGVjaWZpY2F0aW9uXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1zdHlsZS1zcGVjLyNsaWdodCkuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBPcHRpb25zIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnZhbGlkYXRlPXRydWVdIFdoZXRoZXIgdG8gY2hlY2sgaWYgdGhlIGZpbHRlciBjb25mb3JtcyB0byB0aGUgTWFwYm94IEdMIFN0eWxlIFNwZWNpZmljYXRpb24uIERpc2FibGluZyB2YWxpZGF0aW9uIGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHRoYXQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB5b3UgaGF2ZSBwcmV2aW91c2x5IHZhbGlkYXRlZCB0aGUgdmFsdWVzIHlvdSB3aWxsIGJlIHBhc3NpbmcgdG8gdGhpcyBmdW5jdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBsYXllclZpc2liaWxpdHkgPSBtYXAuZ2V0TGF5b3V0UHJvcGVydHkoJ215LWxheWVyJywgJ3Zpc2liaWxpdHknKTtcbiAgICAgKiBAc2VlIFtTaG93IGFuZCBoaWRlIGxheWVyc10oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvdG9nZ2xlLWxheWVycy8pXG4gICAgICovXG4gICAgc2V0TGlnaHQobGlnaHQ6IExpZ2h0U3BlY2lmaWNhdGlvbiwgb3B0aW9uczogU3R5bGVTZXR0ZXJPcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5fbGF6eUluaXRFbXB0eVN0eWxlKCk7XG4gICAgICAgIHRoaXMuc3R5bGUuc2V0TGlnaHQobGlnaHQsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlKHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBsaWdodCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBsaWdodCBMaWdodCBwcm9wZXJ0aWVzIG9mIHRoZSBzdHlsZS5cbiAgICAgKi9cbiAgICBnZXRMaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuZ2V0TGlnaHQoKTtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1yZXR1cm5zXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYHN0YXRlYCBvZiBhIGZlYXR1cmUuXG4gICAgICogQSBmZWF0dXJlJ3MgYHN0YXRlYCBpcyBhIHNldCBvZiB1c2VyLWRlZmluZWQga2V5LXZhbHVlIHBhaXJzIHRoYXQgYXJlIGFzc2lnbmVkIHRvIGEgZmVhdHVyZSBhdCBydW50aW1lLlxuICAgICAqIFdoZW4gdXNpbmcgdGhpcyBtZXRob2QsIHRoZSBgc3RhdGVgIG9iamVjdCBpcyBtZXJnZWQgd2l0aCBhbnkgZXhpc3Rpbmcga2V5LXZhbHVlIHBhaXJzIGluIHRoZSBmZWF0dXJlJ3Mgc3RhdGUuXG4gICAgICogRmVhdHVyZXMgYXJlIGlkZW50aWZpZWQgYnkgdGhlaXIgYGZlYXR1cmUuaWRgIGF0dHJpYnV0ZSwgd2hpY2ggY2FuIGJlIGFueSBudW1iZXIgb3Igc3RyaW5nLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHNvdXJjZXMgdGhhdCBoYXZlIGEgYGZlYXR1cmUuaWRgIGF0dHJpYnV0ZS4gVGhlIGBmZWF0dXJlLmlkYCBhdHRyaWJ1dGUgY2FuIGJlIGRlZmluZWQgaW4gdGhyZWUgd2F5czpcbiAgICAgKiAtIEZvciB2ZWN0b3Igb3IgR2VvSlNPTiBzb3VyY2VzLCBpbmNsdWRpbmcgYW4gYGlkYCBhdHRyaWJ1dGUgaW4gdGhlIG9yaWdpbmFsIGRhdGEgZmlsZS5cbiAgICAgKiAtIEZvciB2ZWN0b3Igb3IgR2VvSlNPTiBzb3VyY2VzLCB1c2luZyB0aGUgW2Bwcm9tb3RlSWRgXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy9zb3VyY2VzLyN2ZWN0b3ItcHJvbW90ZUlkKSBvcHRpb24gYXQgdGhlIHRpbWUgdGhlIHNvdXJjZSBpcyBkZWZpbmVkLlxuICAgICAqIC0gRm9yIEdlb0pTT04gc291cmNlcywgdXNpbmcgdGhlIFtgZ2VuZXJhdGVJZGBdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjL3NvdXJjZXMvI2dlb2pzb24tZ2VuZXJhdGVJZCkgb3B0aW9uIHRvIGF1dG8tYXNzaWduIGFuIGBpZGAgYmFzZWQgb24gdGhlIGZlYXR1cmUncyBpbmRleCBpbiB0aGUgc291cmNlIGRhdGEuIElmIHlvdSBjaGFuZ2UgZmVhdHVyZSBkYXRhIHVzaW5nIGBtYXAuZ2V0U291cmNlKCdzb21lIGlkJykuc2V0RGF0YSguLilgLCB5b3UgbWF5IG5lZWQgdG8gcmUtYXBwbHkgc3RhdGUgdGFraW5nIGludG8gYWNjb3VudCB1cGRhdGVkIGBpZGAgdmFsdWVzLlxuICAgICAqXG4gICAgICogX05vdGU6IFlvdSBjYW4gdXNlIHRoZSBbYGZlYXR1cmUtc3RhdGVgIGV4cHJlc3Npb25dKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjL2V4cHJlc3Npb25zLyNmZWF0dXJlLXN0YXRlKSB0byBhY2Nlc3MgdGhlIHZhbHVlcyBpbiBhIGZlYXR1cmUncyBzdGF0ZSBvYmplY3QgZm9yIHRoZSBwdXJwb3NlcyBvZiBzdHlsaW5nLl9cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBmZWF0dXJlIEZlYXR1cmUgaWRlbnRpZmllci4gRmVhdHVyZSBvYmplY3RzIHJldHVybmVkIGZyb21cbiAgICAgKiB7QGxpbmsgTWFwI3F1ZXJ5UmVuZGVyZWRGZWF0dXJlc30gb3IgZXZlbnQgaGFuZGxlcnMgY2FuIGJlIHVzZWQgYXMgZmVhdHVyZSBpZGVudGlmaWVycy5cbiAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlcn0gZmVhdHVyZS5pZCBVbmlxdWUgaWQgb2YgdGhlIGZlYXR1cmUuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGZlYXR1cmUuc291cmNlIFRoZSBpZCBvZiB0aGUgdmVjdG9yIG9yIEdlb0pTT04gc291cmNlIGZvciB0aGUgZmVhdHVyZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2ZlYXR1cmUuc291cmNlTGF5ZXJdIChvcHRpb25hbCkgKkZvciB2ZWN0b3IgdGlsZSBzb3VyY2VzLCBgc291cmNlTGF5ZXJgIGlzIHJlcXVpcmVkLipcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc3RhdGUgQSBzZXQgb2Yga2V5LXZhbHVlIHBhaXJzLiBUaGUgdmFsdWVzIHNob3VsZCBiZSB2YWxpZCBKU09OIHR5cGVzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBXaGVuIHRoZSBtb3VzZSBtb3ZlcyBvdmVyIHRoZSBgbXktbGF5ZXJgIGxheWVyLCB1cGRhdGVcbiAgICAgKiAvLyB0aGUgZmVhdHVyZSBzdGF0ZSBmb3IgdGhlIGZlYXR1cmUgdW5kZXIgdGhlIG1vdXNlXG4gICAgICogbWFwLm9uKCdtb3VzZW1vdmUnLCAnbXktbGF5ZXInLCBmdW5jdGlvbihlKSB7XG4gICAgICogICBpZiAoZS5mZWF0dXJlcy5sZW5ndGggPiAwKSB7XG4gICAgICogICAgIG1hcC5zZXRGZWF0dXJlU3RhdGUoe1xuICAgICAqICAgICAgIHNvdXJjZTogJ215LXNvdXJjZScsXG4gICAgICogICAgICAgc291cmNlTGF5ZXI6ICdteS1zb3VyY2UtbGF5ZXInLFxuICAgICAqICAgICAgIGlkOiBlLmZlYXR1cmVzWzBdLmlkLFxuICAgICAqICAgICB9LCB7XG4gICAgICogICAgICAgaG92ZXI6IHRydWVcbiAgICAgKiAgICAgfSk7XG4gICAgICogICB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBAc2VlIFtDcmVhdGUgYSBob3ZlciBlZmZlY3RdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2hvdmVyLXN0eWxlcy8pXG4gICAgICogQHNlZSBUdXRvcmlhbDogW0NyZWF0ZSBpbnRlcmFjdGl2ZSBob3ZlciBlZmZlY3RzIHdpdGggTWFwYm94IEdMIEpTXShodHRwczovL2RvY3MubWFwYm94LmNvbS9oZWxwL3R1dG9yaWFscy9jcmVhdGUtaW50ZXJhY3RpdmUtaG92ZXItZWZmZWN0cy13aXRoLW1hcGJveC1nbC1qcy8pXG4gICAgICovXG4gICAgc2V0RmVhdHVyZVN0YXRlKGZlYXR1cmU6IHsgc291cmNlOiBzdHJpbmc7IHNvdXJjZUxheWVyPzogc3RyaW5nOyBpZDogc3RyaW5nIHwgbnVtYmVyOyB9LCBzdGF0ZTogT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuc3R5bGUuc2V0RmVhdHVyZVN0YXRlKGZlYXR1cmUsIHN0YXRlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZSgpO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLXJldHVybnNcbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBgc3RhdGVgIG9mIGEgZmVhdHVyZSwgc2V0dGluZyBpdCBiYWNrIHRvIHRoZSBkZWZhdWx0IGJlaGF2aW9yLlxuICAgICAqIElmIG9ubHkgYSBgdGFyZ2V0LnNvdXJjZWAgaXMgc3BlY2lmaWVkLCBpdCB3aWxsIHJlbW92ZSB0aGUgc3RhdGUgZm9yIGFsbCBmZWF0dXJlcyBmcm9tIHRoYXQgc291cmNlLlxuICAgICAqIElmIGB0YXJnZXQuaWRgIGlzIGFsc28gc3BlY2lmaWVkLCBpdCB3aWxsIHJlbW92ZSBhbGwga2V5cyBmb3IgdGhhdCBmZWF0dXJlJ3Mgc3RhdGUuXG4gICAgICogSWYgYGtleWAgaXMgYWxzbyBzcGVjaWZpZWQsIGl0IHJlbW92ZXMgb25seSB0aGF0IGtleSBmcm9tIHRoYXQgZmVhdHVyZSdzIHN0YXRlLlxuICAgICAqIEZlYXR1cmVzIGFyZSBpZGVudGlmaWVkIGJ5IHRoZWlyIGBmZWF0dXJlLmlkYCBhdHRyaWJ1dGUsIHdoaWNoIGNhbiBiZSBhbnkgbnVtYmVyIG9yIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXQgSWRlbnRpZmllciBvZiB3aGVyZSB0byByZW1vdmUgc3RhdGUuIEl0IGNhbiBiZSBhIHNvdXJjZSwgYSBmZWF0dXJlLCBvciBhIHNwZWNpZmljIGtleSBvZiBmZWF0dXJlLlxuICAgICAqIEZlYXR1cmUgb2JqZWN0cyByZXR1cm5lZCBmcm9tIHtAbGluayBNYXAjcXVlcnlSZW5kZXJlZEZlYXR1cmVzfSBvciBldmVudCBoYW5kbGVycyBjYW4gYmUgdXNlZCBhcyBmZWF0dXJlIGlkZW50aWZpZXJzLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSB0YXJnZXQuaWQgKG9wdGlvbmFsKSBVbmlxdWUgaWQgb2YgdGhlIGZlYXR1cmUuIE9wdGlvbmFsIGlmIGtleSBpcyBub3Qgc3BlY2lmaWVkLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0YXJnZXQuc291cmNlIFRoZSBpZCBvZiB0aGUgdmVjdG9yIG9yIEdlb0pTT04gc291cmNlIGZvciB0aGUgZmVhdHVyZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3RhcmdldC5zb3VyY2VMYXllcl0gKG9wdGlvbmFsKSAqRm9yIHZlY3RvciB0aWxlIHNvdXJjZXMsIGBzb3VyY2VMYXllcmAgaXMgcmVxdWlyZWQuKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgKG9wdGlvbmFsKSBUaGUga2V5IGluIHRoZSBmZWF0dXJlIHN0YXRlIHRvIHJlc2V0LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBSZXNldCB0aGUgZW50aXJlIHN0YXRlIG9iamVjdCBmb3IgYWxsIGZlYXR1cmVzXG4gICAgICogLy8gaW4gdGhlIGBteS1zb3VyY2VgIHNvdXJjZVxuICAgICAqIG1hcC5yZW1vdmVGZWF0dXJlU3RhdGUoe1xuICAgICAqICAgc291cmNlOiAnbXktc291cmNlJ1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBXaGVuIHRoZSBtb3VzZSBsZWF2ZXMgdGhlIGBteS1sYXllcmAgbGF5ZXIsXG4gICAgICogLy8gcmVzZXQgdGhlIGVudGlyZSBzdGF0ZSBvYmplY3QgZm9yIHRoZVxuICAgICAqIC8vIGZlYXR1cmUgdW5kZXIgdGhlIG1vdXNlXG4gICAgICogbWFwLm9uKCdtb3VzZWxlYXZlJywgJ215LWxheWVyJywgZnVuY3Rpb24oZSkge1xuICAgICAqICAgbWFwLnJlbW92ZUZlYXR1cmVTdGF0ZSh7XG4gICAgICogICAgIHNvdXJjZTogJ215LXNvdXJjZScsXG4gICAgICogICAgIHNvdXJjZUxheWVyOiAnbXktc291cmNlLWxheWVyJyxcbiAgICAgKiAgICAgaWQ6IGUuZmVhdHVyZXNbMF0uaWRcbiAgICAgKiAgIH0pO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBXaGVuIHRoZSBtb3VzZSBsZWF2ZXMgdGhlIGBteS1sYXllcmAgbGF5ZXIsXG4gICAgICogLy8gcmVzZXQgb25seSB0aGUgYGhvdmVyYCBrZXktdmFsdWUgcGFpciBpbiB0aGVcbiAgICAgKiAvLyBzdGF0ZSBmb3IgdGhlIGZlYXR1cmUgdW5kZXIgdGhlIG1vdXNlXG4gICAgICogbWFwLm9uKCdtb3VzZWxlYXZlJywgJ215LWxheWVyJywgZnVuY3Rpb24oZSkge1xuICAgICAqICAgbWFwLnJlbW92ZUZlYXR1cmVTdGF0ZSh7XG4gICAgICogICAgIHNvdXJjZTogJ215LXNvdXJjZScsXG4gICAgICogICAgIHNvdXJjZUxheWVyOiAnbXktc291cmNlLWxheWVyJyxcbiAgICAgKiAgICAgaWQ6IGUuZmVhdHVyZXNbMF0uaWRcbiAgICAgKiAgIH0sICdob3ZlcicpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgKi9cbiAgICByZW1vdmVGZWF0dXJlU3RhdGUodGFyZ2V0OiB7IHNvdXJjZTogc3RyaW5nOyBzb3VyY2VMYXllcj86IHN0cmluZzsgaWQ/OiBzdHJpbmcgfCBudW1iZXI7IH0sIGtleT86IHN0cmluZykge1xuICAgICAgICB0aGlzLnN0eWxlLnJlbW92ZUZlYXR1cmVTdGF0ZSh0YXJnZXQsIGtleSk7XG4gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBgc3RhdGVgIG9mIGEgZmVhdHVyZS5cbiAgICAgKiBBIGZlYXR1cmUncyBgc3RhdGVgIGlzIGEgc2V0IG9mIHVzZXItZGVmaW5lZCBrZXktdmFsdWUgcGFpcnMgdGhhdCBhcmUgYXNzaWduZWQgdG8gYSBmZWF0dXJlIGF0IHJ1bnRpbWUuXG4gICAgICogRmVhdHVyZXMgYXJlIGlkZW50aWZpZWQgYnkgdGhlaXIgYGZlYXR1cmUuaWRgIGF0dHJpYnV0ZSwgd2hpY2ggY2FuIGJlIGFueSBudW1iZXIgb3Igc3RyaW5nLlxuICAgICAqXG4gICAgICogX05vdGU6IFRvIGFjY2VzcyB0aGUgdmFsdWVzIGluIGEgZmVhdHVyZSdzIHN0YXRlIG9iamVjdCBmb3IgdGhlIHB1cnBvc2VzIG9mIHN0eWxpbmcgdGhlIGZlYXR1cmUsIHVzZSB0aGUgW2BmZWF0dXJlLXN0YXRlYCBleHByZXNzaW9uXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy9leHByZXNzaW9ucy8jZmVhdHVyZS1zdGF0ZSkuX1xuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGZlYXR1cmUgRmVhdHVyZSBpZGVudGlmaWVyLiBGZWF0dXJlIG9iamVjdHMgcmV0dXJuZWQgZnJvbVxuICAgICAqIHtAbGluayBNYXAjcXVlcnlSZW5kZXJlZEZlYXR1cmVzfSBvciBldmVudCBoYW5kbGVycyBjYW4gYmUgdXNlZCBhcyBmZWF0dXJlIGlkZW50aWZpZXJzLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBmZWF0dXJlLmlkIFVuaXF1ZSBpZCBvZiB0aGUgZmVhdHVyZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZmVhdHVyZS5zb3VyY2UgVGhlIGlkIG9mIHRoZSB2ZWN0b3Igb3IgR2VvSlNPTiBzb3VyY2UgZm9yIHRoZSBmZWF0dXJlLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbZmVhdHVyZS5zb3VyY2VMYXllcl0gKG9wdGlvbmFsKSAqRm9yIHZlY3RvciB0aWxlIHNvdXJjZXMsIGBzb3VyY2VMYXllcmAgaXMgcmVxdWlyZWQuKlxuICAgICAqXG4gICAgICogQHJldHVybnMge09iamVjdH0gVGhlIHN0YXRlIG9mIHRoZSBmZWF0dXJlOiBhIHNldCBvZiBrZXktdmFsdWUgcGFpcnMgdGhhdCB3YXMgYXNzaWduZWQgdG8gdGhlIGZlYXR1cmUgYXQgcnVudGltZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gV2hlbiB0aGUgbW91c2UgbW92ZXMgb3ZlciB0aGUgYG15LWxheWVyYCBsYXllcixcbiAgICAgKiAvLyBnZXQgdGhlIGZlYXR1cmUgc3RhdGUgZm9yIHRoZSBmZWF0dXJlIHVuZGVyIHRoZSBtb3VzZVxuICAgICAqIG1hcC5vbignbW91c2Vtb3ZlJywgJ215LWxheWVyJywgZnVuY3Rpb24oZSkge1xuICAgICAqICAgaWYgKGUuZmVhdHVyZXMubGVuZ3RoID4gMCkge1xuICAgICAqICAgICBtYXAuZ2V0RmVhdHVyZVN0YXRlKHtcbiAgICAgKiAgICAgICBzb3VyY2U6ICdteS1zb3VyY2UnLFxuICAgICAqICAgICAgIHNvdXJjZUxheWVyOiAnbXktc291cmNlLWxheWVyJ1xuICAgICAqICAgICAgIGlkOiBlLmZlYXR1cmVzWzBdLmlkXG4gICAgICogICAgIH0pO1xuICAgICAqICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICovXG4gICAgZ2V0RmVhdHVyZVN0YXRlKGZlYXR1cmU6IHsgc291cmNlOiBzdHJpbmc7IHNvdXJjZUxheWVyPzogc3RyaW5nOyBpZDogc3RyaW5nIHwgbnVtYmVyOyB9KTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuZ2V0RmVhdHVyZVN0YXRlKGZlYXR1cmUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG1hcCdzIGNvbnRhaW5pbmcgSFRNTCBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHJldHVybnMge0hUTUxFbGVtZW50fSBUaGUgbWFwJ3MgY29udGFpbmVyLlxuICAgICAqL1xuICAgIGdldENvbnRhaW5lcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBIVE1MIGVsZW1lbnQgY29udGFpbmluZyB0aGUgbWFwJ3MgYDxjYW52YXM+YCBlbGVtZW50LlxuICAgICAqXG4gICAgICogSWYgeW91IHdhbnQgdG8gYWRkIG5vbi1HTCBvdmVybGF5cyB0byB0aGUgbWFwLCB5b3Ugc2hvdWxkIGFwcGVuZCB0aGVtIHRvIHRoaXMgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgdGhlIGVsZW1lbnQgdG8gd2hpY2ggZXZlbnQgYmluZGluZ3MgZm9yIG1hcCBpbnRlcmFjdGl2aXR5IChzdWNoIGFzIHBhbm5pbmcgYW5kIHpvb21pbmcpIGFyZVxuICAgICAqIGF0dGFjaGVkLiBJdCB3aWxsIHJlY2VpdmUgYnViYmxlZCBldmVudHMgZnJvbSBjaGlsZCBlbGVtZW50cyBzdWNoIGFzIHRoZSBgPGNhbnZhcz5gLCBidXQgbm90IGZyb21cbiAgICAgKiBtYXAgY29udHJvbHMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9IFRoZSBjb250YWluZXIgb2YgdGhlIG1hcCdzIGA8Y2FudmFzPmAuXG4gICAgICogQHNlZSBbQ3JlYXRlIGEgZHJhZ2dhYmxlIHBvaW50XShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2RyYWctYS1wb2ludC8pXG4gICAgICogQHNlZSBbSGlnaGxpZ2h0IGZlYXR1cmVzIHdpdGhpbiBhIGJvdW5kaW5nIGJveF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS91c2luZy1ib3gtcXVlcnlyZW5kZXJlZGZlYXR1cmVzLylcbiAgICAgKi9cbiAgICBnZXRDYW52YXNDb250YWluZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYW52YXNDb250YWluZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbWFwJ3MgYDxjYW52YXM+YCBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHJldHVybnMge0hUTUxDYW52YXNFbGVtZW50fSBUaGUgbWFwJ3MgYDxjYW52YXM+YCBlbGVtZW50LlxuICAgICAqIEBzZWUgW01lYXN1cmUgZGlzdGFuY2VzXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL21lYXN1cmUvKVxuICAgICAqIEBzZWUgW0Rpc3BsYXkgYSBwb3B1cCBvbiBob3Zlcl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9wb3B1cC1vbi1ob3Zlci8pXG4gICAgICogQHNlZSBbQ2VudGVyIHRoZSBtYXAgb24gYSBjbGlja2VkIHN5bWJvbF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9jZW50ZXItb24tc3ltYm9sLylcbiAgICAgKi9cbiAgICBnZXRDYW52YXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYW52YXM7XG4gICAgfVxuXG4gICAgX2NvbnRhaW5lckRpbWVuc2lvbnMoKSB7XG4gICAgICAgIGxldCB3aWR0aCA9IDA7XG4gICAgICAgIGxldCBoZWlnaHQgPSAwO1xuXG4gICAgICAgIGlmICh0aGlzLl9jb250YWluZXIpIHtcbiAgICAgICAgICAgIHdpZHRoID0gdGhpcy5fY29udGFpbmVyLmNsaWVudFdpZHRoIHx8IDQwMDtcbiAgICAgICAgICAgIGhlaWdodCA9IHRoaXMuX2NvbnRhaW5lci5jbGllbnRIZWlnaHQgfHwgMzAwO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFt3aWR0aCwgaGVpZ2h0XTtcbiAgICB9XG5cbiAgICBfZGV0ZWN0TWlzc2luZ0NTUygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29tcHV0ZWRDb2xvciA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuX21pc3NpbmdDU1NDYW5hcnkpLmdldFByb3BlcnR5VmFsdWUoJ2JhY2tncm91bmQtY29sb3InKTtcbiAgICAgICAgaWYgKGNvbXB1dGVkQ29sb3IgIT09ICdyZ2IoMjUwLCAxMjgsIDExNCknKSB7XG4gICAgICAgICAgICB3YXJuT25jZSgnVGhpcyBwYWdlIGFwcGVhcnMgdG8gYmUgbWlzc2luZyBDU1MgZGVjbGFyYXRpb25zIGZvciAnICtcbiAgICAgICAgICAgICAgICAnTWFwYm94IEdMIEpTLCB3aGljaCBtYXkgY2F1c2UgdGhlIG1hcCB0byBkaXNwbGF5IGluY29ycmVjdGx5LiAnICtcbiAgICAgICAgICAgICAgICAnUGxlYXNlIGVuc3VyZSB5b3VyIHBhZ2UgaW5jbHVkZXMgbWFwYm94LWdsLmNzcywgYXMgZGVzY3JpYmVkICcgK1xuICAgICAgICAgICAgICAgICdpbiBodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9hcGkvLicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3NldHVwQ29udGFpbmVyKCkge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLl9jb250YWluZXI7XG4gICAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1tYXAnKTtcblxuICAgICAgICBjb25zdCBtaXNzaW5nQ1NTQ2FuYXJ5ID0gdGhpcy5fbWlzc2luZ0NTU0NhbmFyeSA9IERPTS5jcmVhdGUoJ2RpdicsICdtYXBib3hnbC1jYW5hcnknLCBjb250YWluZXIpO1xuICAgICAgICBtaXNzaW5nQ1NTQ2FuYXJ5LnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgICAgdGhpcy5fZGV0ZWN0TWlzc2luZ0NTUygpO1xuXG4gICAgICAgIGNvbnN0IGNhbnZhc0NvbnRhaW5lciA9IHRoaXMuX2NhbnZhc0NvbnRhaW5lciA9IERPTS5jcmVhdGUoJ2RpdicsICdtYXBib3hnbC1jYW52YXMtY29udGFpbmVyJywgY29udGFpbmVyKTtcbiAgICAgICAgaWYgKHRoaXMuX2ludGVyYWN0aXZlKSB7XG4gICAgICAgICAgICBjYW52YXNDb250YWluZXIuY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtaW50ZXJhY3RpdmUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NhbnZhcyA9IERPTS5jcmVhdGUoJ2NhbnZhcycsICdtYXBib3hnbC1jYW52YXMnLCBjYW52YXNDb250YWluZXIpO1xuICAgICAgICB0aGlzLl9jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcignd2ViZ2xjb250ZXh0bG9zdCcsIHRoaXMuX2NvbnRleHRMb3N0LCBmYWxzZSk7XG4gICAgICAgIHRoaXMuX2NhbnZhcy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRyZXN0b3JlZCcsIHRoaXMuX2NvbnRleHRSZXN0b3JlZCwgZmFsc2UpO1xuICAgICAgICB0aGlzLl9jYW52YXMuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICcwJyk7XG4gICAgICAgIHRoaXMuX2NhbnZhcy5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCAnTWFwJyk7XG5cbiAgICAgICAgY29uc3QgZGltZW5zaW9ucyA9IHRoaXMuX2NvbnRhaW5lckRpbWVuc2lvbnMoKTtcbiAgICAgICAgdGhpcy5fcmVzaXplQ2FudmFzKGRpbWVuc2lvbnNbMF0sIGRpbWVuc2lvbnNbMV0pO1xuXG4gICAgICAgIGNvbnN0IGNvbnRyb2xDb250YWluZXIgPSB0aGlzLl9jb250cm9sQ29udGFpbmVyID0gRE9NLmNyZWF0ZSgnZGl2JywgJ21hcGJveGdsLWNvbnRyb2wtY29udGFpbmVyJywgY29udGFpbmVyKTtcbiAgICAgICAgY29uc3QgcG9zaXRpb25zID0gdGhpcy5fY29udHJvbFBvc2l0aW9ucyA9IHt9O1xuICAgICAgICBbJ3RvcC1sZWZ0JywgJ3RvcC1yaWdodCcsICdib3R0b20tbGVmdCcsICdib3R0b20tcmlnaHQnXS5mb3JFYWNoKChwb3NpdGlvbk5hbWUpID0+IHtcbiAgICAgICAgICAgIHBvc2l0aW9uc1twb3NpdGlvbk5hbWVdID0gRE9NLmNyZWF0ZSgnZGl2JywgYG1hcGJveGdsLWN0cmwtJHtwb3NpdGlvbk5hbWV9YCwgY29udHJvbENvbnRhaW5lcik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF9yZXNpemVDYW52YXMod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgcGl4ZWxSYXRpbyA9IGJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xuXG4gICAgICAgIC8vIFJlcXVlc3QgdGhlIHJlcXVpcmVkIGNhbnZhcyBzaXplIHRha2luZyB0aGUgcGl4ZWxyYXRpbyBpbnRvIGFjY291bnQuXG4gICAgICAgIHRoaXMuX2NhbnZhcy53aWR0aCA9IHBpeGVsUmF0aW8gKiB3aWR0aDtcbiAgICAgICAgdGhpcy5fY2FudmFzLmhlaWdodCA9IHBpeGVsUmF0aW8gKiBoZWlnaHQ7XG5cbiAgICAgICAgLy8gTWFpbnRhaW4gdGhlIHNhbWUgY2FudmFzIHNpemUsIHBvdGVudGlhbGx5IGRvd25zY2FsaW5nIGl0IGZvciBIaURQSSBkaXNwbGF5c1xuICAgICAgICB0aGlzLl9jYW52YXMuc3R5bGUud2lkdGggPSBgJHt3aWR0aH1weGA7XG4gICAgICAgIHRoaXMuX2NhbnZhcy5zdHlsZS5oZWlnaHQgPSBgJHtoZWlnaHR9cHhgO1xuICAgIH1cblxuICAgIF9zZXR1cFBhaW50ZXIoKSB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBleHRlbmQoe30sIGlzU3VwcG9ydGVkLndlYkdMQ29udGV4dEF0dHJpYnV0ZXMsIHtcbiAgICAgICAgICAgIGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6IHRoaXMuX2ZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQsXG4gICAgICAgICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IHRoaXMuX3ByZXNlcnZlRHJhd2luZ0J1ZmZlcixcbiAgICAgICAgICAgIGFudGlhbGlhczogdGhpcy5fYW50aWFsaWFzIHx8IGZhbHNlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5fY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgYXR0cmlidXRlcykgfHxcbiAgICAgICAgICAgIHRoaXMuX2NhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnLCBhdHRyaWJ1dGVzKTtcblxuICAgICAgICBpZiAoIWdsKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKCdGYWlsZWQgdG8gaW5pdGlhbGl6ZSBXZWJHTCcpKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBhaW50ZXIgPSBuZXcgUGFpbnRlcihnbCwgdGhpcy50cmFuc2Zvcm0pO1xuXG4gICAgICAgIHdlYnBTdXBwb3J0ZWQudGVzdFN1cHBvcnQoZ2wpO1xuICAgIH1cblxuICAgIF9jb250ZXh0TG9zdChldmVudDogKikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAodGhpcy5fZnJhbWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lLmNhbmNlbCgpO1xuICAgICAgICAgICAgdGhpcy5fZnJhbWUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3dlYmdsY29udGV4dGxvc3QnLCB7b3JpZ2luYWxFdmVudDogZXZlbnR9KSk7XG4gICAgfVxuXG4gICAgX2NvbnRleHRSZXN0b3JlZChldmVudDogKikge1xuICAgICAgICB0aGlzLl9zZXR1cFBhaW50ZXIoKTtcbiAgICAgICAgdGhpcy5yZXNpemUoKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3dlYmdsY29udGV4dHJlc3RvcmVkJywge29yaWdpbmFsRXZlbnQ6IGV2ZW50fSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgbWFwIGlzIGZ1bGx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIFJldHVybnMgYGZhbHNlYCBpZiB0aGUgc3R5bGUgaXMgbm90IHlldCBmdWxseSBsb2FkZWQsXG4gICAgICogb3IgaWYgdGhlcmUgaGFzIGJlZW4gYSBjaGFuZ2UgdG8gdGhlIHNvdXJjZXMgb3Igc3R5bGUgdGhhdFxuICAgICAqIGhhcyBub3QgeWV0IGZ1bGx5IGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBBIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBtYXAgaXMgZnVsbHkgbG9hZGVkLlxuICAgICAqL1xuICAgIGxvYWRlZCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLl9zdHlsZURpcnR5ICYmICF0aGlzLl9zb3VyY2VzRGlydHkgJiYgISF0aGlzLnN0eWxlICYmIHRoaXMuc3R5bGUubG9hZGVkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlIHRoaXMgbWFwJ3Mgc3R5bGUgYW5kIHNvdXJjZXMsIGFuZCByZS1yZW5kZXIgdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdXBkYXRlU3R5bGUgbWFyayB0aGUgbWFwJ3Mgc3R5bGUgZm9yIHJlcHJvY2Vzc2luZyBhc1xuICAgICAqIHdlbGwgYXMgaXRzIHNvdXJjZXNcbiAgICAgKiBAcmV0dXJucyB7TWFwfSB0aGlzXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfdXBkYXRlKHVwZGF0ZVN0eWxlPzogYm9vbGVhbikge1xuICAgICAgICBpZiAoIXRoaXMuc3R5bGUpIHJldHVybiB0aGlzO1xuXG4gICAgICAgIHRoaXMuX3N0eWxlRGlydHkgPSB0aGlzLl9zdHlsZURpcnR5IHx8IHVwZGF0ZVN0eWxlO1xuICAgICAgICB0aGlzLl9zb3VyY2VzRGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLnRyaWdnZXJSZXBhaW50KCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVxdWVzdCB0aGF0IHRoZSBnaXZlbiBjYWxsYmFjayBiZSBleGVjdXRlZCBkdXJpbmcgdGhlIG5leHQgcmVuZGVyXG4gICAgICogZnJhbWUuICBTY2hlZHVsZSBhIHJlbmRlciBmcmFtZSBpZiBvbmUgaXMgbm90IGFscmVhZHkgc2NoZWR1bGVkLlxuICAgICAqIEByZXR1cm5zIEFuIGlkIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2FuY2VsIHRoZSBjYWxsYmFja1xuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX3JlcXVlc3RSZW5kZXJGcmFtZShjYWxsYmFjazogKCkgPT4gdm9pZCk6IFRhc2tJRCB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVuZGVyVGFza1F1ZXVlLmFkZChjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgX2NhbmNlbFJlbmRlckZyYW1lKGlkOiBUYXNrSUQpIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyVGFza1F1ZXVlLnJlbW92ZShpZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FsbCB3aGVuIGEgKHJlLSlyZW5kZXIgb2YgdGhlIG1hcCBpcyByZXF1aXJlZDpcbiAgICAgKiAtIFRoZSBzdHlsZSBoYXMgY2hhbmdlZCAoYHNldFBhaW50UHJvcGVydHkoKWAsIGV0Yy4pXG4gICAgICogLSBTb3VyY2UgZGF0YSBoYXMgY2hhbmdlZCAoZS5nLiB0aWxlcyBoYXZlIGZpbmlzaGVkIGxvYWRpbmcpXG4gICAgICogLSBUaGUgbWFwIGhhcyBpcyBtb3ZpbmcgKG9yIGp1c3QgZmluaXNoZWQgbW92aW5nKVxuICAgICAqIC0gQSB0cmFuc2l0aW9uIGlzIGluIHByb2dyZXNzXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcGFpbnRTdGFydFRpbWVTdGFtcCAgVGhlIHRpbWUgd2hlbiB0aGUgYW5pbWF0aW9uIGZyYW1lIGJlZ2FuIGV4ZWN1dGluZy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtNYXB9IHRoaXNcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9yZW5kZXIocGFpbnRTdGFydFRpbWVTdGFtcDogbnVtYmVyKSB7XG4gICAgICAgIGxldCBncHVUaW1lciwgZnJhbWVTdGFydFRpbWUgPSAwO1xuICAgICAgICBjb25zdCBleHRUaW1lclF1ZXJ5ID0gdGhpcy5wYWludGVyLmNvbnRleHQuZXh0VGltZXJRdWVyeTtcbiAgICAgICAgaWYgKHRoaXMubGlzdGVucygnZ3B1LXRpbWluZy1mcmFtZScpKSB7XG4gICAgICAgICAgICBncHVUaW1lciA9IGV4dFRpbWVyUXVlcnkuY3JlYXRlUXVlcnlFWFQoKTtcbiAgICAgICAgICAgIGV4dFRpbWVyUXVlcnkuYmVnaW5RdWVyeUVYVChleHRUaW1lclF1ZXJ5LlRJTUVfRUxBUFNFRF9FWFQsIGdwdVRpbWVyKTtcbiAgICAgICAgICAgIGZyYW1lU3RhcnRUaW1lID0gYnJvd3Nlci5ub3coKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEEgY3VzdG9tIGxheWVyIG1heSBoYXZlIHVzZWQgdGhlIGNvbnRleHQgYXN5bmNocm9ub3VzbHkuIE1hcmsgdGhlIHN0YXRlIGFzIGRpcnR5LlxuICAgICAgICB0aGlzLnBhaW50ZXIuY29udGV4dC5zZXREaXJ0eSgpO1xuICAgICAgICB0aGlzLnBhaW50ZXIuc2V0QmFzZVN0YXRlKCk7XG5cbiAgICAgICAgdGhpcy5fcmVuZGVyVGFza1F1ZXVlLnJ1bihwYWludFN0YXJ0VGltZVN0YW1wKTtcbiAgICAgICAgLy8gQSB0YXNrIHF1ZXVlIGNhbGxiYWNrIG1heSBoYXZlIGZpcmVkIGEgdXNlciBldmVudCB3aGljaCBtYXkgaGF2ZSByZW1vdmVkIHRoZSBtYXBcbiAgICAgICAgaWYgKHRoaXMuX3JlbW92ZWQpIHJldHVybjtcblxuICAgICAgICBsZXQgY3Jvc3NGYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICAvLyBJZiB0aGUgc3R5bGUgaGFzIGNoYW5nZWQsIHRoZSBtYXAgaXMgYmVpbmcgem9vbWVkLCBvciBhIHRyYW5zaXRpb24gb3IgZmFkZSBpcyBpbiBwcm9ncmVzczpcbiAgICAgICAgLy8gIC0gQXBwbHkgc3R5bGUgY2hhbmdlcyAoaW4gYSBiYXRjaClcbiAgICAgICAgLy8gIC0gUmVjYWxjdWxhdGUgcGFpbnQgcHJvcGVydGllcy5cbiAgICAgICAgaWYgKHRoaXMuc3R5bGUgJiYgdGhpcy5fc3R5bGVEaXJ0eSkge1xuICAgICAgICAgICAgdGhpcy5fc3R5bGVEaXJ0eSA9IGZhbHNlO1xuXG4gICAgICAgICAgICBjb25zdCB6b29tID0gdGhpcy50cmFuc2Zvcm0uem9vbTtcbiAgICAgICAgICAgIGNvbnN0IG5vdyA9IGJyb3dzZXIubm93KCk7XG4gICAgICAgICAgICB0aGlzLnN0eWxlLnpvb21IaXN0b3J5LnVwZGF0ZSh6b29tLCBub3cpO1xuXG4gICAgICAgICAgICBjb25zdCBwYXJhbWV0ZXJzID0gbmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKHpvb20sIHtcbiAgICAgICAgICAgICAgICBub3csXG4gICAgICAgICAgICAgICAgZmFkZUR1cmF0aW9uOiB0aGlzLl9mYWRlRHVyYXRpb24sXG4gICAgICAgICAgICAgICAgem9vbUhpc3Rvcnk6IHRoaXMuc3R5bGUuem9vbUhpc3RvcnksXG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbjogdGhpcy5zdHlsZS5nZXRUcmFuc2l0aW9uKClcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBmYWN0b3IgPSBwYXJhbWV0ZXJzLmNyb3NzRmFkaW5nRmFjdG9yKCk7XG4gICAgICAgICAgICBpZiAoZmFjdG9yICE9PSAxIHx8IGZhY3RvciAhPT0gdGhpcy5fY3Jvc3NGYWRpbmdGYWN0b3IpIHtcbiAgICAgICAgICAgICAgICBjcm9zc0ZhZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fY3Jvc3NGYWRpbmdGYWN0b3IgPSBmYWN0b3I7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc3R5bGUudXBkYXRlKHBhcmFtZXRlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgd2UgYXJlIGluIF9yZW5kZXIgZm9yIGFueSByZWFzb24gb3RoZXIgdGhhbiBhbiBpbi1wcm9ncmVzcyBwYWludFxuICAgICAgICAvLyB0cmFuc2l0aW9uLCB1cGRhdGUgc291cmNlIGNhY2hlcyB0byBjaGVjayBmb3IgYW5kIGxvYWQgYW55IHRpbGVzIHdlXG4gICAgICAgIC8vIG5lZWQgZm9yIHRoZSBjdXJyZW50IHRyYW5zZm9ybVxuICAgICAgICBpZiAodGhpcy5zdHlsZSAmJiB0aGlzLl9zb3VyY2VzRGlydHkpIHtcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZXNEaXJ0eSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zdHlsZS5fdXBkYXRlU291cmNlcyh0aGlzLnRyYW5zZm9ybSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wbGFjZW1lbnREaXJ0eSA9IHRoaXMuc3R5bGUgJiYgdGhpcy5zdHlsZS5fdXBkYXRlUGxhY2VtZW50KHRoaXMucGFpbnRlci50cmFuc2Zvcm0sIHRoaXMuc2hvd0NvbGxpc2lvbkJveGVzLCB0aGlzLl9mYWRlRHVyYXRpb24sIHRoaXMuX2Nyb3NzU291cmNlQ29sbGlzaW9ucyk7XG5cbiAgICAgICAgLy8gQWN0dWFsbHkgZHJhd1xuICAgICAgICB0aGlzLnBhaW50ZXIucmVuZGVyKHRoaXMuc3R5bGUsIHtcbiAgICAgICAgICAgIHNob3dUaWxlQm91bmRhcmllczogdGhpcy5zaG93VGlsZUJvdW5kYXJpZXMsXG4gICAgICAgICAgICBzaG93T3ZlcmRyYXdJbnNwZWN0b3I6IHRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3RvcixcbiAgICAgICAgICAgIHJvdGF0aW5nOiB0aGlzLmlzUm90YXRpbmcoKSxcbiAgICAgICAgICAgIHpvb21pbmc6IHRoaXMuaXNab29taW5nKCksXG4gICAgICAgICAgICBtb3Zpbmc6IHRoaXMuaXNNb3ZpbmcoKSxcbiAgICAgICAgICAgIGZhZGVEdXJhdGlvbjogdGhpcy5fZmFkZUR1cmF0aW9uLFxuICAgICAgICAgICAgc2hvd1BhZGRpbmc6IHRoaXMuc2hvd1BhZGRpbmcsXG4gICAgICAgICAgICBncHVUaW1pbmc6ICEhdGhpcy5saXN0ZW5zKCdncHUtdGltaW5nLWxheWVyJyksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3JlbmRlcicpKTtcblxuICAgICAgICBpZiAodGhpcy5sb2FkZWQoKSAmJiAhdGhpcy5fbG9hZGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgUGVyZm9ybWFuY2VVdGlscy5tYXJrKFBlcmZvcm1hbmNlTWFya2Vycy5sb2FkKTtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2xvYWQnKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zdHlsZSAmJiAodGhpcy5zdHlsZS5oYXNUcmFuc2l0aW9ucygpIHx8IGNyb3NzRmFkaW5nKSkge1xuICAgICAgICAgICAgdGhpcy5fc3R5bGVEaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zdHlsZSAmJiAhdGhpcy5fcGxhY2VtZW50RGlydHkpIHtcbiAgICAgICAgICAgIC8vIFNpbmNlIG5vIGZhZGUgb3BlcmF0aW9ucyBhcmUgaW4gcHJvZ3Jlc3MsIHdlIGNhbiByZWxlYXNlXG4gICAgICAgICAgICAvLyBhbGwgdGlsZXMgaGVsZCBmb3IgZmFkaW5nLiBJZiB3ZSBkaWRuJ3QgZG8gdGhpcywgdGhlIHRpbGVzXG4gICAgICAgICAgICAvLyB3b3VsZCBqdXN0IHNpdCBpbiB0aGUgU291cmNlQ2FjaGVzIHVudGlsIHRoZSBuZXh0IHJlbmRlclxuICAgICAgICAgICAgdGhpcy5zdHlsZS5fcmVsZWFzZVN5bWJvbEZhZGVUaWxlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubGlzdGVucygnZ3B1LXRpbWluZy1mcmFtZScpKSB7XG4gICAgICAgICAgICBjb25zdCByZW5kZXJDUFVUaW1lID0gYnJvd3Nlci5ub3coKSAtIGZyYW1lU3RhcnRUaW1lO1xuICAgICAgICAgICAgZXh0VGltZXJRdWVyeS5lbmRRdWVyeUVYVChleHRUaW1lclF1ZXJ5LlRJTUVfRUxBUFNFRF9FWFQsIGdwdVRpbWVyKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlbmRlckdQVVRpbWUgPSBleHRUaW1lclF1ZXJ5LmdldFF1ZXJ5T2JqZWN0RVhUKGdwdVRpbWVyLCBleHRUaW1lclF1ZXJ5LlFVRVJZX1JFU1VMVF9FWFQpIC8gKDEwMDAgKiAxMDAwKTtcbiAgICAgICAgICAgICAgICBleHRUaW1lclF1ZXJ5LmRlbGV0ZVF1ZXJ5RVhUKGdwdVRpbWVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdncHUtdGltaW5nLWZyYW1lJywge1xuICAgICAgICAgICAgICAgICAgICBjcHVUaW1lOiByZW5kZXJDUFVUaW1lLFxuICAgICAgICAgICAgICAgICAgICBncHVUaW1lOiByZW5kZXJHUFVUaW1lXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfSwgNTApOyAvLyBXYWl0IDUwbXMgdG8gZ2l2ZSB0aW1lIGZvciBhbGwgR1BVIGNhbGxzIHRvIGZpbmlzaCBiZWZvcmUgcXVlcnlpbmdcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmxpc3RlbnMoJ2dwdS10aW1pbmctbGF5ZXInKSkge1xuICAgICAgICAgICAgLy8gUmVzZXR0aW5nIHRoZSBQYWludGVyJ3MgcGVyLWxheWVyIHRpbWluZyBxdWVyaWVzIGhlcmUgYWxsb3dzIHVzIHRvIGlzb2xhdGVcbiAgICAgICAgICAgIC8vIHRoZSBxdWVyaWVzIHRvIGluZGl2aWR1YWwgZnJhbWVzLlxuICAgICAgICAgICAgY29uc3QgZnJhbWVMYXllclF1ZXJpZXMgPSB0aGlzLnBhaW50ZXIuY29sbGVjdEdwdVRpbWVycygpO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZW5kZXJlZExheWVyVGltZXMgPSB0aGlzLnBhaW50ZXIucXVlcnlHcHVUaW1lcnMoZnJhbWVMYXllclF1ZXJpZXMpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZ3B1LXRpbWluZy1sYXllcicsIHtcbiAgICAgICAgICAgICAgICAgICAgbGF5ZXJUaW1lczogcmVuZGVyZWRMYXllclRpbWVzXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfSwgNTApOyAvLyBXYWl0IDUwbXMgdG8gZ2l2ZSB0aW1lIGZvciBhbGwgR1BVIGNhbGxzIHRvIGZpbmlzaCBiZWZvcmUgcXVlcnlpbmdcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNjaGVkdWxlIGFub3RoZXIgcmVuZGVyIGZyYW1lIGlmIGl0J3MgbmVlZGVkLlxuICAgICAgICAvL1xuICAgICAgICAvLyBFdmVuIHRob3VnaCBgX3N0eWxlRGlydHlgIGFuZCBgX3NvdXJjZXNEaXJ0eWAgYXJlIHJlc2V0IGluIHRoaXNcbiAgICAgICAgLy8gbWV0aG9kLCBzeW5jaHJvbm91cyBldmVudHMgZmlyZWQgZHVyaW5nIFN0eWxlI3VwZGF0ZSBvclxuICAgICAgICAvLyBTdHlsZSNfdXBkYXRlU291cmNlcyBjb3VsZCBoYXZlIGNhdXNlZCB0aGVtIHRvIGJlIHNldCBhZ2Fpbi5cbiAgICAgICAgY29uc3Qgc29tZXRoaW5nRGlydHkgPSB0aGlzLl9zb3VyY2VzRGlydHkgfHwgdGhpcy5fc3R5bGVEaXJ0eSB8fCB0aGlzLl9wbGFjZW1lbnREaXJ0eTtcbiAgICAgICAgaWYgKHNvbWV0aGluZ0RpcnR5IHx8IHRoaXMuX3JlcGFpbnQpIHtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlclJlcGFpbnQoKTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5pc01vdmluZygpICYmIHRoaXMubG9hZGVkKCkpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fZnVsbHlMb2FkZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mdWxseUxvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgUGVyZm9ybWFuY2VVdGlscy5tYXJrKFBlcmZvcm1hbmNlTWFya2Vycy5mdWxsTG9hZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdpZGxlJykpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYW4gdXAgYW5kIHJlbGVhc2UgYWxsIGludGVybmFsIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBtYXAuXG4gICAgICpcbiAgICAgKiBUaGlzIGluY2x1ZGVzIERPTSBlbGVtZW50cywgZXZlbnQgYmluZGluZ3MsIHdlYiB3b3JrZXJzLCBhbmQgV2ViR0wgcmVzb3VyY2VzLlxuICAgICAqXG4gICAgICogVXNlIHRoaXMgbWV0aG9kIHdoZW4geW91IGFyZSBkb25lIHVzaW5nIHRoZSBtYXAgYW5kIHdpc2ggdG8gZW5zdXJlIHRoYXQgaXQgbm9cbiAgICAgKiBsb25nZXIgY29uc3VtZXMgYnJvd3NlciByZXNvdXJjZXMuIEFmdGVyd2FyZHMsIHlvdSBtdXN0IG5vdCBjYWxsIGFueSBvdGhlclxuICAgICAqIG1ldGhvZHMgb24gdGhlIG1hcC5cbiAgICAgKi9cbiAgICByZW1vdmUoKSB7XG4gICAgICAgIGlmICh0aGlzLl9oYXNoKSB0aGlzLl9oYXNoLnJlbW92ZSgpO1xuXG4gICAgICAgIGZvciAoY29uc3QgY29udHJvbCBvZiB0aGlzLl9jb250cm9scykgY29udHJvbC5vblJlbW92ZSh0aGlzKTtcbiAgICAgICAgdGhpcy5fY29udHJvbHMgPSBbXTtcblxuICAgICAgICBpZiAodGhpcy5fZnJhbWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lLmNhbmNlbCgpO1xuICAgICAgICAgICAgdGhpcy5fZnJhbWUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3JlbmRlclRhc2tRdWV1ZS5jbGVhcigpO1xuICAgICAgICB0aGlzLnBhaW50ZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmhhbmRsZXJzLmRlc3Ryb3koKTtcbiAgICAgICAgZGVsZXRlIHRoaXMuaGFuZGxlcnM7XG4gICAgICAgIHRoaXMuc2V0U3R5bGUobnVsbCk7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX29uV2luZG93UmVzaXplLCBmYWxzZSk7XG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignb25saW5lJywgdGhpcy5fb25XaW5kb3dPbmxpbmUsIGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IHRoaXMucGFpbnRlci5jb250ZXh0LmdsLmdldEV4dGVuc2lvbignV0VCR0xfbG9zZV9jb250ZXh0Jyk7XG4gICAgICAgIGlmIChleHRlbnNpb24pIGV4dGVuc2lvbi5sb3NlQ29udGV4dCgpO1xuICAgICAgICByZW1vdmVOb2RlKHRoaXMuX2NhbnZhc0NvbnRhaW5lcik7XG4gICAgICAgIHJlbW92ZU5vZGUodGhpcy5fY29udHJvbENvbnRhaW5lcik7XG4gICAgICAgIHJlbW92ZU5vZGUodGhpcy5fbWlzc2luZ0NTU0NhbmFyeSk7XG4gICAgICAgIHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1tYXAnKTtcblxuICAgICAgICBQZXJmb3JtYW5jZVV0aWxzLmNsZWFyTWV0cmljcygpO1xuXG4gICAgICAgIHRoaXMuX3JlbW92ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdyZW1vdmUnKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlciB0aGUgcmVuZGVyaW5nIG9mIGEgc2luZ2xlIGZyYW1lLiBVc2UgdGhpcyBtZXRob2Qgd2l0aCBjdXN0b20gbGF5ZXJzIHRvXG4gICAgICogcmVwYWludCB0aGUgbWFwIHdoZW4gdGhlIGxheWVyIGNoYW5nZXMuIENhbGxpbmcgdGhpcyBtdWx0aXBsZSB0aW1lcyBiZWZvcmUgdGhlXG4gICAgICogbmV4dCBmcmFtZSBpcyByZW5kZXJlZCB3aWxsIHN0aWxsIHJlc3VsdCBpbiBvbmx5IGEgc2luZ2xlIGZyYW1lIGJlaW5nIHJlbmRlcmVkLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLnRyaWdnZXJSZXBhaW50KCk7XG4gICAgICogQHNlZSBbQWRkIGEgM0QgbW9kZWxdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2FkZC0zZC1tb2RlbC8pXG4gICAgICogQHNlZSBbQWRkIGFuIGFuaW1hdGVkIGljb24gdG8gdGhlIG1hcF0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvYWRkLWltYWdlLWFuaW1hdGVkLylcbiAgICAgKi9cbiAgICB0cmlnZ2VyUmVwYWludCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3R5bGUgJiYgIXRoaXMuX2ZyYW1lKSB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZSA9IGJyb3dzZXIuZnJhbWUoKHBhaW50U3RhcnRUaW1lU3RhbXA6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIFBlcmZvcm1hbmNlVXRpbHMuZnJhbWUocGFpbnRTdGFydFRpbWVTdGFtcCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnJhbWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlcihwYWludFN0YXJ0VGltZVN0YW1wKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX29uV2luZG93T25saW5lKCkge1xuICAgICAgICB0aGlzLl91cGRhdGUoKTtcbiAgICB9XG5cbiAgICBfb25XaW5kb3dSZXNpemUoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLl90cmFja1Jlc2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5yZXNpemUoe29yaWdpbmFsRXZlbnQ6IGV2ZW50fSkuX3VwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbmQgc2V0cyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBtYXAgd2lsbCByZW5kZXIgYW4gb3V0bGluZVxuICAgICAqIGFyb3VuZCBlYWNoIHRpbGUgYW5kIHRoZSB0aWxlIElELiBUaGVzZSB0aWxlIGJvdW5kYXJpZXMgYXJlIHVzZWZ1bCBmb3JcbiAgICAgKiBkZWJ1Z2dpbmcuXG4gICAgICpcbiAgICAgKiBUaGUgdW5jb21wcmVzc2VkIGZpbGUgc2l6ZSBvZiB0aGUgZmlyc3QgdmVjdG9yIHNvdXJjZSBpcyBkcmF3biBpbiB0aGUgdG9wIGxlZnRcbiAgICAgKiBjb3JuZXIgb2YgZWFjaCB0aWxlLCBuZXh0IHRvIHRoZSB0aWxlIElELlxuICAgICAqXG4gICAgICogQG5hbWUgc2hvd1RpbGVCb3VuZGFyaWVzXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQGluc3RhbmNlXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLnNob3dUaWxlQm91bmRhcmllcyA9IHRydWU7XG4gICAgICovXG4gICAgZ2V0IHNob3dUaWxlQm91bmRhcmllcygpOiBib29sZWFuIHsgcmV0dXJuICEhdGhpcy5fc2hvd1RpbGVCb3VuZGFyaWVzOyB9XG4gICAgc2V0IHNob3dUaWxlQm91bmRhcmllcyh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5fc2hvd1RpbGVCb3VuZGFyaWVzID09PSB2YWx1ZSkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9zaG93VGlsZUJvdW5kYXJpZXMgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbmQgc2V0cyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBtYXAgd2lsbCB2aXN1YWxpemVcbiAgICAgKiB0aGUgcGFkZGluZyBvZmZzZXRzLlxuICAgICAqXG4gICAgICogQG5hbWUgc2hvd1BhZGRpbmdcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICovXG4gICAgZ2V0IHNob3dQYWRkaW5nKCk6IGJvb2xlYW4geyByZXR1cm4gISF0aGlzLl9zaG93UGFkZGluZzsgfVxuICAgIHNldCBzaG93UGFkZGluZyh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5fc2hvd1BhZGRpbmcgPT09IHZhbHVlKSByZXR1cm47XG4gICAgICAgIHRoaXMuX3Nob3dQYWRkaW5nID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYW5kIHNldHMgYSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgbWFwIHdpbGwgcmVuZGVyIGJveGVzXG4gICAgICogYXJvdW5kIGFsbCBzeW1ib2xzIGluIHRoZSBkYXRhIHNvdXJjZSwgcmV2ZWFsaW5nIHdoaWNoIHN5bWJvbHNcbiAgICAgKiB3ZXJlIHJlbmRlcmVkIG9yIHdoaWNoIHdlcmUgaGlkZGVuIGR1ZSB0byBjb2xsaXNpb25zLlxuICAgICAqIFRoaXMgaW5mb3JtYXRpb24gaXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuXG4gICAgICpcbiAgICAgKiBAbmFtZSBzaG93Q29sbGlzaW9uQm94ZXNcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICovXG4gICAgZ2V0IHNob3dDb2xsaXNpb25Cb3hlcygpOiBib29sZWFuIHsgcmV0dXJuICEhdGhpcy5fc2hvd0NvbGxpc2lvbkJveGVzOyB9XG4gICAgc2V0IHNob3dDb2xsaXNpb25Cb3hlcyh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5fc2hvd0NvbGxpc2lvbkJveGVzID09PSB2YWx1ZSkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9zaG93Q29sbGlzaW9uQm94ZXMgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIHR1cm4gY29sbGlzaW9uIGJveGVzIG9uIHdlIGhhdmUgdG8gZ2VuZXJhdGUgdGhlbSBmb3IgZXhpc3RpbmcgdGlsZXNcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgdHVybiB0aGVtIG9mZiwgdGhlcmUncyBubyBjb3N0IHRvIGxlYXZpbmcgZXhpc3RpbmcgYm94ZXMgaW4gcGxhY2VcbiAgICAgICAgICAgIHRoaXMuc3R5bGUuX2dlbmVyYXRlQ29sbGlzaW9uQm94ZXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgY2FsbCBhbiB1cGRhdGUgdG8gcmVtb3ZlIGNvbGxpc2lvbiBib3hlc1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKlxuICAgICAqIEdldHMgYW5kIHNldHMgYSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgbWFwIHNob3VsZCBjb2xvci1jb2RlXG4gICAgICogZWFjaCBmcmFnbWVudCB0byBzaG93IGhvdyBtYW55IHRpbWVzIGl0IGhhcyBiZWVuIHNoYWRlZC5cbiAgICAgKiBXaGl0ZSBmcmFnbWVudHMgaGF2ZSBiZWVuIHNoYWRlZCA4IG9yIG1vcmUgdGltZXMuXG4gICAgICogQmxhY2sgZnJhZ21lbnRzIGhhdmUgYmVlbiBzaGFkZWQgMCB0aW1lcy5cbiAgICAgKiBUaGlzIGluZm9ybWF0aW9uIGlzIHVzZWZ1bCBmb3IgZGVidWdnaW5nLlxuICAgICAqXG4gICAgICogQG5hbWUgc2hvd092ZXJkcmF3XG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQGluc3RhbmNlXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqL1xuICAgIGdldCBzaG93T3ZlcmRyYXdJbnNwZWN0b3IoKTogYm9vbGVhbiB7IHJldHVybiAhIXRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3RvcjsgfVxuICAgIHNldCBzaG93T3ZlcmRyYXdJbnNwZWN0b3IodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3RvciA9PT0gdmFsdWUpIHJldHVybjtcbiAgICAgICAgdGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYW5kIHNldHMgYSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgbWFwIHdpbGxcbiAgICAgKiBjb250aW51b3VzbHkgcmVwYWludC4gVGhpcyBpbmZvcm1hdGlvbiBpcyB1c2VmdWwgZm9yIGFuYWx5emluZyBwZXJmb3JtYW5jZS5cbiAgICAgKlxuICAgICAqIEBuYW1lIHJlcGFpbnRcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICovXG4gICAgZ2V0IHJlcGFpbnQoKTogYm9vbGVhbiB7IHJldHVybiAhIXRoaXMuX3JlcGFpbnQ7IH1cbiAgICBzZXQgcmVwYWludCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5fcmVwYWludCAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlcGFpbnQgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlclJlcGFpbnQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBzaG93IHZlcnRpY2VzXG4gICAgZ2V0IHZlcnRpY2VzKCk6IGJvb2xlYW4geyByZXR1cm4gISF0aGlzLl92ZXJ0aWNlczsgfVxuICAgIHNldCB2ZXJ0aWNlcyh2YWx1ZTogYm9vbGVhbikgeyB0aGlzLl92ZXJ0aWNlcyA9IHZhbHVlOyB0aGlzLl91cGRhdGUoKTsgfVxuXG4gICAgLy8gZm9yIGNhY2hlIGJyb3dzZXIgdGVzdHNcbiAgICBfc2V0Q2FjaGVMaW1pdHMobGltaXQ6IG51bWJlciwgY2hlY2tUaHJlc2hvbGQ6IG51bWJlcikge1xuICAgICAgICBzZXRDYWNoZUxpbWl0cyhsaW1pdCwgY2hlY2tUaHJlc2hvbGQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSB2ZXJzaW9uIG9mIE1hcGJveCBHTCBKUyBpbiB1c2UgYXMgc3BlY2lmaWVkIGluIHBhY2thZ2UuanNvbiwgQ0hBTkdFTE9HLm1kLCBhbmQgdGhlIEdpdEh1YiByZWxlYXNlLlxuICAgICAqXG4gICAgICogQG5hbWUgdmVyc2lvblxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAdmFyIHtzdHJpbmd9IHZlcnNpb25cbiAgICAgKi9cblxuICAgIGdldCB2ZXJzaW9uKCk6IHN0cmluZyB7IHJldHVybiB2ZXJzaW9uOyB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1hcDtcblxuZnVuY3Rpb24gcmVtb3ZlTm9kZShub2RlKSB7XG4gICAgaWYgKG5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgaW50ZXJhY3RpdmUgY29udHJvbHMgYWRkZWQgdG8gdGhlIG1hcC4gVGhpcyBpcyBhXG4gKiBzcGVjaWZpY2F0aW9uIGZvciBpbXBsZW1lbnRlcnMgdG8gbW9kZWw6IGl0IGlzIG5vdFxuICogYW4gZXhwb3J0ZWQgbWV0aG9kIG9yIGNsYXNzLlxuICpcbiAqIENvbnRyb2xzIG11c3QgaW1wbGVtZW50IGBvbkFkZGAgYW5kIGBvblJlbW92ZWAsIGFuZCBtdXN0IG93biBhblxuICogZWxlbWVudCwgd2hpY2ggaXMgb2Z0ZW4gYSBgZGl2YCBlbGVtZW50LiBUbyB1c2UgTWFwYm94IEdMIEpTJ3NcbiAqIGRlZmF1bHQgY29udHJvbCBzdHlsaW5nLCBhZGQgdGhlIGBtYXBib3hnbC1jdHJsYCBjbGFzcyB0byB5b3VyIGNvbnRyb2wnc1xuICogbm9kZS5cbiAqXG4gKiBAaW50ZXJmYWNlIElDb250cm9sXG4gKiBAZXhhbXBsZVxuICogLy8gQ29udHJvbCBpbXBsZW1lbnRlZCBhcyBFUzYgY2xhc3NcbiAqIGNsYXNzIEhlbGxvV29ybGRDb250cm9sIHtcbiAqICAgICBvbkFkZChtYXApIHtcbiAqICAgICAgICAgdGhpcy5fbWFwID0gbWFwO1xuICogICAgICAgICB0aGlzLl9jb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAqICAgICAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTmFtZSA9ICdtYXBib3hnbC1jdHJsJztcbiAqICAgICAgICAgdGhpcy5fY29udGFpbmVyLnRleHRDb250ZW50ID0gJ0hlbGxvLCB3b3JsZCc7XG4gKiAgICAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXI7XG4gKiAgICAgfVxuICpcbiAqICAgICBvblJlbW92ZSgpIHtcbiAqICAgICAgICAgdGhpcy5fY29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fY29udGFpbmVyKTtcbiAqICAgICAgICAgdGhpcy5fbWFwID0gdW5kZWZpbmVkO1xuICogICAgIH1cbiAqIH1cbiAqXG4gKiAvLyBDb250cm9sIGltcGxlbWVudGVkIGFzIEVTNSBwcm90b3R5cGljYWwgY2xhc3NcbiAqIGZ1bmN0aW9uIEhlbGxvV29ybGRDb250cm9sKCkgeyB9XG4gKlxuICogSGVsbG9Xb3JsZENvbnRyb2wucHJvdG90eXBlLm9uQWRkID0gZnVuY3Rpb24obWFwKSB7XG4gKiAgICAgdGhpcy5fbWFwID0gbWFwO1xuICogICAgIHRoaXMuX2NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICogICAgIHRoaXMuX2NvbnRhaW5lci5jbGFzc05hbWUgPSAnbWFwYm94Z2wtY3RybCc7XG4gKiAgICAgdGhpcy5fY29udGFpbmVyLnRleHRDb250ZW50ID0gJ0hlbGxvLCB3b3JsZCc7XG4gKiAgICAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lcjtcbiAqIH07XG4gKlxuICogSGVsbG9Xb3JsZENvbnRyb2wucHJvdG90eXBlLm9uUmVtb3ZlID0gZnVuY3Rpb24gKCkge1xuICogICAgICB0aGlzLl9jb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9jb250YWluZXIpO1xuICogICAgICB0aGlzLl9tYXAgPSB1bmRlZmluZWQ7XG4gKiB9O1xuICovXG5cbi8qKlxuICogUmVnaXN0ZXIgYSBjb250cm9sIG9uIHRoZSBtYXAgYW5kIGdpdmUgaXQgYSBjaGFuY2UgdG8gcmVnaXN0ZXIgZXZlbnQgbGlzdGVuZXJzXG4gKiBhbmQgcmVzb3VyY2VzLiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkge0BsaW5rIE1hcCNhZGRDb250cm9sfVxuICogaW50ZXJuYWxseS5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBJQ29udHJvbFxuICogQGluc3RhbmNlXG4gKiBAbmFtZSBvbkFkZFxuICogQHBhcmFtIHtNYXB9IG1hcCB0aGUgTWFwIHRoaXMgY29udHJvbCB3aWxsIGJlIGFkZGVkIHRvXG4gKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9IFRoZSBjb250cm9sJ3MgY29udGFpbmVyIGVsZW1lbnQuIFRoaXMgc2hvdWxkXG4gKiBiZSBjcmVhdGVkIGJ5IHRoZSBjb250cm9sIGFuZCByZXR1cm5lZCBieSBvbkFkZCB3aXRob3V0IGJlaW5nIGF0dGFjaGVkXG4gKiB0byB0aGUgRE9NOiB0aGUgbWFwIHdpbGwgaW5zZXJ0IHRoZSBjb250cm9sJ3MgZWxlbWVudCBpbnRvIHRoZSBET01cbiAqIGFzIG5lY2Vzc2FyeS5cbiAqL1xuXG4vKipcbiAqIFVucmVnaXN0ZXIgYSBjb250cm9sIG9uIHRoZSBtYXAgYW5kIGdpdmUgaXQgYSBjaGFuY2UgdG8gZGV0YWNoIGV2ZW50IGxpc3RlbmVyc1xuICogYW5kIHJlc291cmNlcy4gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHtAbGluayBNYXAjcmVtb3ZlQ29udHJvbH1cbiAqIGludGVybmFsbHkuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgSUNvbnRyb2xcbiAqIEBpbnN0YW5jZVxuICogQG5hbWUgb25SZW1vdmVcbiAqIEBwYXJhbSB7TWFwfSBtYXAgdGhlIE1hcCB0aGlzIGNvbnRyb2wgd2lsbCBiZSByZW1vdmVkIGZyb21cbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9IHRoZXJlIGlzIG5vIHJlcXVpcmVkIHJldHVybiB2YWx1ZSBmb3IgdGhpcyBtZXRob2RcbiAqL1xuXG4vKipcbiAqIE9wdGlvbmFsbHkgcHJvdmlkZSBhIGRlZmF1bHQgcG9zaXRpb24gZm9yIHRoaXMgY29udHJvbC4gSWYgdGhpcyBtZXRob2RcbiAqIGlzIGltcGxlbWVudGVkIGFuZCB7QGxpbmsgTWFwI2FkZENvbnRyb2x9IGlzIGNhbGxlZCB3aXRob3V0IHRoZSBgcG9zaXRpb25gXG4gKiBwYXJhbWV0ZXIsIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBnZXREZWZhdWx0UG9zaXRpb24gd2lsbCBiZSB1c2VkIGFzIHRoZVxuICogY29udHJvbCdzIHBvc2l0aW9uLlxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIElDb250cm9sXG4gKiBAaW5zdGFuY2VcbiAqIEBuYW1lIGdldERlZmF1bHRQb3NpdGlvblxuICogQHJldHVybnMge3N0cmluZ30gYSBjb250cm9sIHBvc2l0aW9uLCBvbmUgb2YgdGhlIHZhbHVlcyB2YWxpZCBpbiBhZGRDb250cm9sLlxuICovXG5cbi8qKlxuICogQSBbYFBvaW50YCBnZW9tZXRyeV0oaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9wb2ludC1nZW9tZXRyeSkgb2JqZWN0LCB3aGljaCBoYXNcbiAqIGB4YCBhbmQgYHlgIHByb3BlcnRpZXMgcmVwcmVzZW50aW5nIHNjcmVlbiBjb29yZGluYXRlcyBpbiBwaXhlbHMuXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gUG9pbnRcbiAqIEBleGFtcGxlXG4gKiB2YXIgcG9pbnQgPSBuZXcgbWFwYm94Z2wuUG9pbnQoLTc3LCAzOCk7XG4gKi9cblxuLyoqXG4gKiBBIHtAbGluayBQb2ludH0gb3IgYW4gYXJyYXkgb2YgdHdvIG51bWJlcnMgcmVwcmVzZW50aW5nIGB4YCBhbmQgYHlgIHNjcmVlbiBjb29yZGluYXRlcyBpbiBwaXhlbHMuXG4gKlxuICogQHR5cGVkZWYgeyhQb2ludCB8IEFycmF5PG51bWJlcj4pfSBQb2ludExpa2VcbiAqIEBleGFtcGxlXG4gKiB2YXIgcDEgPSBuZXcgbWFwYm94Z2wuUG9pbnQoLTc3LCAzOCk7IC8vIGEgUG9pbnRMaWtlIHdoaWNoIGlzIGEgUG9pbnRcbiAqIHZhciBwMiA9IFstNzcsIDM4XTsgLy8gYSBQb2ludExpa2Ugd2hpY2ggaXMgYW4gYXJyYXkgb2YgdHdvIG51bWJlcnNcbiAqL1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IERPTSBmcm9tICcuLi8uLi91dGlsL2RvbSc7XG5pbXBvcnQge2V4dGVuZCwgYmluZEFsbH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB7TW91c2VSb3RhdGVIYW5kbGVyLCBNb3VzZVBpdGNoSGFuZGxlcn0gZnJvbSAnLi4vaGFuZGxlci9tb3VzZSc7XG5pbXBvcnQgd2luZG93IGZyb20gJy4uLy4uL3V0aWwvd2luZG93JztcblxuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL21hcCc7XG5cbnR5cGUgT3B0aW9ucyA9IHtcbiAgICBzaG93Q29tcGFzcz86IGJvb2xlYW4sXG4gICAgc2hvd1pvb20/OiBib29sZWFuLFxuICAgIHZpc3VhbGl6ZVBpdGNoPzogYm9vbGVhblxufTtcblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IE9wdGlvbnMgPSB7XG4gICAgc2hvd0NvbXBhc3M6IHRydWUsXG4gICAgc2hvd1pvb206IHRydWUsXG4gICAgdmlzdWFsaXplUGl0Y2g6IGZhbHNlXG59O1xuXG4vKipcbiAqIEEgYE5hdmlnYXRpb25Db250cm9sYCBjb250cm9sIGNvbnRhaW5zIHpvb20gYnV0dG9ucyBhbmQgYSBjb21wYXNzLlxuICpcbiAqIEBpbXBsZW1lbnRzIHtJQ29udHJvbH1cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuc2hvd0NvbXBhc3M9dHJ1ZV0gSWYgYHRydWVgIHRoZSBjb21wYXNzIGJ1dHRvbiBpcyBpbmNsdWRlZC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuc2hvd1pvb209dHJ1ZV0gSWYgYHRydWVgIHRoZSB6b29tLWluIGFuZCB6b29tLW91dCBidXR0b25zIGFyZSBpbmNsdWRlZC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMudmlzdWFsaXplUGl0Y2g9ZmFsc2VdIElmIGB0cnVlYCB0aGUgcGl0Y2ggaXMgdmlzdWFsaXplZCBieSByb3RhdGluZyBYLWF4aXMgb2YgY29tcGFzcy5cbiAqIEBleGFtcGxlXG4gKiB2YXIgbmF2ID0gbmV3IG1hcGJveGdsLk5hdmlnYXRpb25Db250cm9sKCk7XG4gKiBtYXAuYWRkQ29udHJvbChuYXYsICd0b3AtbGVmdCcpO1xuICogQHNlZSBbRGlzcGxheSBtYXAgbmF2aWdhdGlvbiBjb250cm9sc10oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9uYXZpZ2F0aW9uLylcbiAqIEBzZWUgW0FkZCBhIHRoaXJkIHBhcnR5IHZlY3RvciB0aWxlIHNvdXJjZV0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS90aGlyZC1wYXJ0eS8pXG4gKi9cbmNsYXNzIE5hdmlnYXRpb25Db250cm9sIHtcbiAgICBfbWFwOiBNYXA7XG4gICAgb3B0aW9uczogT3B0aW9ucztcbiAgICBfY29udGFpbmVyOiBIVE1MRWxlbWVudDtcbiAgICBfem9vbUluQnV0dG9uOiBIVE1MQnV0dG9uRWxlbWVudDtcbiAgICBfem9vbU91dEJ1dHRvbjogSFRNTEJ1dHRvbkVsZW1lbnQ7XG4gICAgX2NvbXBhc3M6IEhUTUxCdXR0b25FbGVtZW50O1xuICAgIF9jb21wYXNzSWNvbjogSFRNTEVsZW1lbnQ7XG4gICAgX2hhbmRsZXI6IE1vdXNlUm90YXRlV3JhcHBlcjtcblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gZXh0ZW5kKHt9LCBkZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5fY29udGFpbmVyID0gRE9NLmNyZWF0ZSgnZGl2JywgJ21hcGJveGdsLWN0cmwgbWFwYm94Z2wtY3RybC1ncm91cCcpO1xuICAgICAgICB0aGlzLl9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCAoZSkgPT4gZS5wcmV2ZW50RGVmYXVsdCgpKTtcblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNob3dab29tKSB7XG4gICAgICAgICAgICBiaW5kQWxsKFtcbiAgICAgICAgICAgICAgICAnX3NldEJ1dHRvblRpdGxlJyxcbiAgICAgICAgICAgICAgICAnX3VwZGF0ZVpvb21CdXR0b25zJ1xuICAgICAgICAgICAgXSwgdGhpcyk7XG4gICAgICAgICAgICB0aGlzLl96b29tSW5CdXR0b24gPSB0aGlzLl9jcmVhdGVCdXR0b24oJ21hcGJveGdsLWN0cmwtem9vbS1pbicsIChlKSA9PiB0aGlzLl9tYXAuem9vbUluKHt9LCB7b3JpZ2luYWxFdmVudDogZX0pKTtcbiAgICAgICAgICAgIERPTS5jcmVhdGUoJ3NwYW4nLCBgbWFwYm94Z2wtY3RybC1pY29uYCwgdGhpcy5fem9vbUluQnV0dG9uKS5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLl96b29tT3V0QnV0dG9uID0gdGhpcy5fY3JlYXRlQnV0dG9uKCdtYXBib3hnbC1jdHJsLXpvb20tb3V0JywgKGUpID0+IHRoaXMuX21hcC56b29tT3V0KHt9LCB7b3JpZ2luYWxFdmVudDogZX0pKTtcbiAgICAgICAgICAgIERPTS5jcmVhdGUoJ3NwYW4nLCBgbWFwYm94Z2wtY3RybC1pY29uYCwgdGhpcy5fem9vbU91dEJ1dHRvbikuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd0NvbXBhc3MpIHtcbiAgICAgICAgICAgIGJpbmRBbGwoW1xuICAgICAgICAgICAgICAgICdfcm90YXRlQ29tcGFzc0Fycm93J1xuICAgICAgICAgICAgXSwgdGhpcyk7XG4gICAgICAgICAgICB0aGlzLl9jb21wYXNzID0gdGhpcy5fY3JlYXRlQnV0dG9uKCdtYXBib3hnbC1jdHJsLWNvbXBhc3MnLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMudmlzdWFsaXplUGl0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFwLnJlc2V0Tm9ydGhQaXRjaCh7fSwge29yaWdpbmFsRXZlbnQ6IGV9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXAucmVzZXROb3J0aCh7fSwge29yaWdpbmFsRXZlbnQ6IGV9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX2NvbXBhc3NJY29uID0gRE9NLmNyZWF0ZSgnc3BhbicsICdtYXBib3hnbC1jdHJsLWljb24nLCB0aGlzLl9jb21wYXNzKTtcbiAgICAgICAgICAgIHRoaXMuX2NvbXBhc3NJY29uLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF91cGRhdGVab29tQnV0dG9ucygpIHtcbiAgICAgICAgY29uc3Qgem9vbSA9IHRoaXMuX21hcC5nZXRab29tKCk7XG4gICAgICAgIHRoaXMuX3pvb21JbkJ1dHRvbi5kaXNhYmxlZCA9IHpvb20gPT09IHRoaXMuX21hcC5nZXRNYXhab29tKCk7XG4gICAgICAgIHRoaXMuX3pvb21PdXRCdXR0b24uZGlzYWJsZWQgPSB6b29tID09PSB0aGlzLl9tYXAuZ2V0TWluWm9vbSgpO1xuICAgIH1cblxuICAgIF9yb3RhdGVDb21wYXNzQXJyb3coKSB7XG4gICAgICAgIGNvbnN0IHJvdGF0ZSA9IHRoaXMub3B0aW9ucy52aXN1YWxpemVQaXRjaCA/XG4gICAgICAgICAgICBgc2NhbGUoJHsxIC8gTWF0aC5wb3coTWF0aC5jb3ModGhpcy5fbWFwLnRyYW5zZm9ybS5waXRjaCAqIChNYXRoLlBJIC8gMTgwKSksIDAuNSl9KSByb3RhdGVYKCR7dGhpcy5fbWFwLnRyYW5zZm9ybS5waXRjaH1kZWcpIHJvdGF0ZVooJHt0aGlzLl9tYXAudHJhbnNmb3JtLmFuZ2xlICogKDE4MCAvIE1hdGguUEkpfWRlZylgIDpcbiAgICAgICAgICAgIGByb3RhdGUoJHt0aGlzLl9tYXAudHJhbnNmb3JtLmFuZ2xlICogKDE4MCAvIE1hdGguUEkpfWRlZylgO1xuXG4gICAgICAgIHRoaXMuX2NvbXBhc3NJY29uLnN0eWxlLnRyYW5zZm9ybSA9IHJvdGF0ZTtcbiAgICB9XG5cbiAgICBvbkFkZChtYXA6IE1hcCkge1xuICAgICAgICB0aGlzLl9tYXAgPSBtYXA7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd1pvb20pIHtcbiAgICAgICAgICAgIHRoaXMuX3NldEJ1dHRvblRpdGxlKHRoaXMuX3pvb21JbkJ1dHRvbiwgJ1pvb21JbicpO1xuICAgICAgICAgICAgdGhpcy5fc2V0QnV0dG9uVGl0bGUodGhpcy5fem9vbU91dEJ1dHRvbiwgJ1pvb21PdXQnKTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vbignem9vbScsIHRoaXMuX3VwZGF0ZVpvb21CdXR0b25zKTtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVpvb21CdXR0b25zKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93Q29tcGFzcykge1xuICAgICAgICAgICAgdGhpcy5fc2V0QnV0dG9uVGl0bGUodGhpcy5fY29tcGFzcywgJ1Jlc2V0QmVhcmluZycpO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy52aXN1YWxpemVQaXRjaCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hcC5vbigncGl0Y2gnLCB0aGlzLl9yb3RhdGVDb21wYXNzQXJyb3cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fbWFwLm9uKCdyb3RhdGUnLCB0aGlzLl9yb3RhdGVDb21wYXNzQXJyb3cpO1xuICAgICAgICAgICAgdGhpcy5fcm90YXRlQ29tcGFzc0Fycm93KCk7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVyID0gbmV3IE1vdXNlUm90YXRlV3JhcHBlcih0aGlzLl9tYXAsIHRoaXMuX2NvbXBhc3MsIHRoaXMub3B0aW9ucy52aXN1YWxpemVQaXRjaCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lcjtcbiAgICB9XG5cbiAgICBvblJlbW92ZSgpIHtcbiAgICAgICAgRE9NLnJlbW92ZSh0aGlzLl9jb250YWluZXIpO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNob3dab29tKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCd6b29tJywgdGhpcy5fdXBkYXRlWm9vbUJ1dHRvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd0NvbXBhc3MpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMudmlzdWFsaXplUGl0Y2gpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCdwaXRjaCcsIHRoaXMuX3JvdGF0ZUNvbXBhc3NBcnJvdyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCdyb3RhdGUnLCB0aGlzLl9yb3RhdGVDb21wYXNzQXJyb3cpO1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlci5vZmYoKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9oYW5kbGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVsZXRlIHRoaXMuX21hcDtcbiAgICB9XG5cbiAgICBfY3JlYXRlQnV0dG9uKGNsYXNzTmFtZTogc3RyaW5nLCBmbjogKCkgPT4gbWl4ZWQpIHtcbiAgICAgICAgY29uc3QgYSA9IERPTS5jcmVhdGUoJ2J1dHRvbicsIGNsYXNzTmFtZSwgdGhpcy5fY29udGFpbmVyKTtcbiAgICAgICAgYS50eXBlID0gJ2J1dHRvbic7XG4gICAgICAgIGEuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmbik7XG4gICAgICAgIHJldHVybiBhO1xuICAgIH1cblxuICAgIF9zZXRCdXR0b25UaXRsZShidXR0b246IEhUTUxCdXR0b25FbGVtZW50LCB0aXRsZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHN0ciA9IHRoaXMuX21hcC5fZ2V0VUlTdHJpbmcoYE5hdmlnYXRpb25Db250cm9sLiR7dGl0bGV9YCk7XG4gICAgICAgIGJ1dHRvbi50aXRsZSA9IHN0cjtcbiAgICAgICAgYnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIHN0cik7XG4gICAgfVxufVxuXG5jbGFzcyBNb3VzZVJvdGF0ZVdyYXBwZXIge1xuXG4gICAgbWFwOiBNYXA7XG4gICAgX2NsaWNrVG9sZXJhbmNlOiBudW1iZXI7XG4gICAgZWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gICAgbW91c2VSb3RhdGU6IE1vdXNlUm90YXRlSGFuZGxlcjtcbiAgICBtb3VzZVBpdGNoOiBNb3VzZVBpdGNoSGFuZGxlcjtcbiAgICBfc3RhcnRQb3M6IFBvaW50O1xuICAgIF9sYXN0UG9zOiBQb2ludDtcblxuICAgIGNvbnN0cnVjdG9yKG1hcDogTWFwLCBlbGVtZW50OiBIVE1MRWxlbWVudCwgcGl0Y2g/OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fY2xpY2tUb2xlcmFuY2UgPSAxMDtcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgdGhpcy5tb3VzZVJvdGF0ZSA9IG5ldyBNb3VzZVJvdGF0ZUhhbmRsZXIoe2NsaWNrVG9sZXJhbmNlOiBtYXAuZHJhZ1JvdGF0ZS5fbW91c2VSb3RhdGUuX2NsaWNrVG9sZXJhbmNlfSk7XG4gICAgICAgIHRoaXMubWFwID0gbWFwO1xuICAgICAgICBpZiAocGl0Y2gpIHRoaXMubW91c2VQaXRjaCA9IG5ldyBNb3VzZVBpdGNoSGFuZGxlcih7Y2xpY2tUb2xlcmFuY2U6IG1hcC5kcmFnUm90YXRlLl9tb3VzZVBpdGNoLl9jbGlja1RvbGVyYW5jZX0pO1xuXG4gICAgICAgIGJpbmRBbGwoWydtb3VzZWRvd24nLCAnbW91c2Vtb3ZlJywgJ21vdXNldXAnLCAndG91Y2hzdGFydCcsICd0b3VjaG1vdmUnLCAndG91Y2hlbmQnLCAncmVzZXQnXSwgdGhpcyk7XG4gICAgICAgIERPTS5hZGRFdmVudExpc3RlbmVyKGVsZW1lbnQsICdtb3VzZWRvd24nLCB0aGlzLm1vdXNlZG93bik7XG4gICAgICAgIERPTS5hZGRFdmVudExpc3RlbmVyKGVsZW1lbnQsICd0b3VjaHN0YXJ0JywgdGhpcy50b3VjaHN0YXJ0LCB7cGFzc2l2ZTogZmFsc2V9KTtcbiAgICAgICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIoZWxlbWVudCwgJ3RvdWNobW92ZScsIHRoaXMudG91Y2htb3ZlKTtcbiAgICAgICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIoZWxlbWVudCwgJ3RvdWNoZW5kJywgdGhpcy50b3VjaGVuZCk7XG4gICAgICAgIERPTS5hZGRFdmVudExpc3RlbmVyKGVsZW1lbnQsICd0b3VjaGNhbmNlbCcsIHRoaXMucmVzZXQpO1xuICAgIH1cblxuICAgIGRvd24oZTogTW91c2VFdmVudCwgcG9pbnQ6IFBvaW50KSB7XG4gICAgICAgIHRoaXMubW91c2VSb3RhdGUubW91c2Vkb3duKGUsIHBvaW50KTtcbiAgICAgICAgaWYgKHRoaXMubW91c2VQaXRjaCkgdGhpcy5tb3VzZVBpdGNoLm1vdXNlZG93bihlLCBwb2ludCk7XG4gICAgICAgIERPTS5kaXNhYmxlRHJhZygpO1xuICAgIH1cblxuICAgIG1vdmUoZTogTW91c2VFdmVudCwgcG9pbnQ6IFBvaW50KSB7XG4gICAgICAgIGNvbnN0IG1hcCA9IHRoaXMubWFwO1xuICAgICAgICBjb25zdCByID0gdGhpcy5tb3VzZVJvdGF0ZS5tb3VzZW1vdmVXaW5kb3coZSwgcG9pbnQpO1xuICAgICAgICBpZiAociAmJiByLmJlYXJpbmdEZWx0YSkgbWFwLnNldEJlYXJpbmcobWFwLmdldEJlYXJpbmcoKSArIHIuYmVhcmluZ0RlbHRhKTtcbiAgICAgICAgaWYgKHRoaXMubW91c2VQaXRjaCkge1xuICAgICAgICAgICAgY29uc3QgcCA9IHRoaXMubW91c2VQaXRjaC5tb3VzZW1vdmVXaW5kb3coZSwgcG9pbnQpO1xuICAgICAgICAgICAgaWYgKHAgJiYgcC5waXRjaERlbHRhKSBtYXAuc2V0UGl0Y2gobWFwLmdldFBpdGNoKCkgKyBwLnBpdGNoRGVsdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb2ZmKCkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50O1xuICAgICAgICBET00ucmVtb3ZlRXZlbnRMaXN0ZW5lcihlbGVtZW50LCAnbW91c2Vkb3duJywgdGhpcy5tb3VzZWRvd24pO1xuICAgICAgICBET00ucmVtb3ZlRXZlbnRMaXN0ZW5lcihlbGVtZW50LCAndG91Y2hzdGFydCcsIHRoaXMudG91Y2hzdGFydCwge3Bhc3NpdmU6IGZhbHNlfSk7XG4gICAgICAgIERPTS5yZW1vdmVFdmVudExpc3RlbmVyKGVsZW1lbnQsICd0b3VjaG1vdmUnLCB0aGlzLnRvdWNobW92ZSk7XG4gICAgICAgIERPTS5yZW1vdmVFdmVudExpc3RlbmVyKGVsZW1lbnQsICd0b3VjaGVuZCcsIHRoaXMudG91Y2hlbmQpO1xuICAgICAgICBET00ucmVtb3ZlRXZlbnRMaXN0ZW5lcihlbGVtZW50LCAndG91Y2hjYW5jZWwnLCB0aGlzLnJlc2V0KTtcbiAgICAgICAgdGhpcy5vZmZUZW1wKCk7XG4gICAgfVxuXG4gICAgb2ZmVGVtcCgpIHtcbiAgICAgICAgRE9NLmVuYWJsZURyYWcoKTtcbiAgICAgICAgRE9NLnJlbW92ZUV2ZW50TGlzdGVuZXIod2luZG93LCAnbW91c2Vtb3ZlJywgdGhpcy5tb3VzZW1vdmUpO1xuICAgICAgICBET00ucmVtb3ZlRXZlbnRMaXN0ZW5lcih3aW5kb3csICdtb3VzZXVwJywgdGhpcy5tb3VzZXVwKTtcbiAgICB9XG5cbiAgICBtb3VzZWRvd24oZTogTW91c2VFdmVudCkge1xuICAgICAgICB0aGlzLmRvd24oZXh0ZW5kKHt9LCBlLCB7Y3RybEtleTogdHJ1ZSwgcHJldmVudERlZmF1bHQ6ICgpID0+IGUucHJldmVudERlZmF1bHQoKX0pLCBET00ubW91c2VQb3ModGhpcy5lbGVtZW50LCBlKSk7XG4gICAgICAgIERPTS5hZGRFdmVudExpc3RlbmVyKHdpbmRvdywgJ21vdXNlbW92ZScsIHRoaXMubW91c2Vtb3ZlKTtcbiAgICAgICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIod2luZG93LCAnbW91c2V1cCcsIHRoaXMubW91c2V1cCk7XG4gICAgfVxuXG4gICAgbW91c2Vtb3ZlKGU6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgdGhpcy5tb3ZlKGUsIERPTS5tb3VzZVBvcyh0aGlzLmVsZW1lbnQsIGUpKTtcbiAgICB9XG5cbiAgICBtb3VzZXVwKGU6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgdGhpcy5tb3VzZVJvdGF0ZS5tb3VzZXVwV2luZG93KGUpO1xuICAgICAgICBpZiAodGhpcy5tb3VzZVBpdGNoKSB0aGlzLm1vdXNlUGl0Y2gubW91c2V1cFdpbmRvdyhlKTtcbiAgICAgICAgdGhpcy5vZmZUZW1wKCk7XG4gICAgfVxuXG4gICAgdG91Y2hzdGFydChlOiBUb3VjaEV2ZW50KSB7XG4gICAgICAgIGlmIChlLnRhcmdldFRvdWNoZXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9zdGFydFBvcyA9IHRoaXMuX2xhc3RQb3MgPSBET00udG91Y2hQb3ModGhpcy5lbGVtZW50LCBlLnRhcmdldFRvdWNoZXMpWzBdO1xuICAgICAgICAgICAgdGhpcy5kb3duKCgoe3R5cGU6ICdtb3VzZWRvd24nLCBidXR0b246IDAsIGN0cmxLZXk6IHRydWUsIHByZXZlbnREZWZhdWx0OiAoKSA9PiBlLnByZXZlbnREZWZhdWx0KCl9OiBhbnkpOiBNb3VzZUV2ZW50KSwgdGhpcy5fc3RhcnRQb3MpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdG91Y2htb3ZlKGU6IFRvdWNoRXZlbnQpIHtcbiAgICAgICAgaWYgKGUudGFyZ2V0VG91Y2hlcy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2xhc3RQb3MgPSBET00udG91Y2hQb3ModGhpcy5lbGVtZW50LCBlLnRhcmdldFRvdWNoZXMpWzBdO1xuICAgICAgICAgICAgdGhpcy5tb3ZlKCgoe3ByZXZlbnREZWZhdWx0OiAoKSA9PiBlLnByZXZlbnREZWZhdWx0KCl9OiBhbnkpOiBNb3VzZUV2ZW50KSwgdGhpcy5fbGFzdFBvcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0b3VjaGVuZChlOiBUb3VjaEV2ZW50KSB7XG4gICAgICAgIGlmIChlLnRhcmdldFRvdWNoZXMubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICB0aGlzLl9zdGFydFBvcyAmJlxuICAgICAgICAgICAgdGhpcy5fbGFzdFBvcyAmJlxuICAgICAgICAgICAgdGhpcy5fc3RhcnRQb3MuZGlzdCh0aGlzLl9sYXN0UG9zKSA8IHRoaXMuX2NsaWNrVG9sZXJhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xpY2soKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgcmVzZXQoKSB7XG4gICAgICAgIHRoaXMubW91c2VSb3RhdGUucmVzZXQoKTtcbiAgICAgICAgaWYgKHRoaXMubW91c2VQaXRjaCkgdGhpcy5tb3VzZVBpdGNoLnJlc2V0KCk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9zdGFydFBvcztcbiAgICAgICAgZGVsZXRlIHRoaXMuX2xhc3RQb3M7XG4gICAgICAgIHRoaXMub2ZmVGVtcCgpO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTmF2aWdhdGlvbkNvbnRyb2w7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgTG5nTGF0IGZyb20gJy4uL2dlby9sbmdfbGF0JztcblxuaW1wb3J0IHR5cGUgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSBUcmFuc2Zvcm0gZnJvbSAnLi4vZ2VvL3RyYW5zZm9ybSc7XG5cbi8qKlxuICogR2l2ZW4gYSBMbmdMYXQsIHByaW9yIHByb2plY3RlZCBwb3NpdGlvbiwgYW5kIGEgdHJhbnNmb3JtLCByZXR1cm4gYSBuZXcgTG5nTGF0IHNoaWZ0ZWRcbiAqIG4gw4PClyAzNjDDgsKwIGVhc3Qgb3Igd2VzdCBmb3Igc29tZSBuIMOiwonCpSAwIHN1Y2ggdGhhdDpcbiAqXG4gKiAqIHRoZSBwcm9qZWN0ZWQgbG9jYXRpb24gb2YgdGhlIHJlc3VsdCBpcyBvbiBzY3JlZW4sIGlmIHBvc3NpYmxlLCBhbmQgc2Vjb25kYXJpbHk6XG4gKiAqIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHByb2plY3RlZCBsb2NhdGlvbiBvZiB0aGUgcmVzdWx0IGFuZCB0aGUgcHJpb3IgcG9zaXRpb25cbiAqICAgaXMgbWluaW1pemVkLlxuICpcbiAqIFRoZSBvYmplY3QgaXMgdG8gcHJlc2VydmUgcGVyY2VpdmVkIG9iamVjdCBjb25zdGFuY3kgZm9yIFBvcHVwcyBhbmQgTWFya2VycyBhcyBtdWNoIGFzXG4gKiBwb3NzaWJsZTsgdGhleSBzaG91bGQgYXZvaWQgc2hpZnRpbmcgbGFyZ2UgZGlzdGFuY2VzIGFjcm9zcyB0aGUgc2NyZWVuLCBldmVuIHdoZW4gdGhlXG4gKiBtYXAgY2VudGVyIGNoYW5nZXMgYnkgw4LCsTM2MMOCwrAgZHVlIHRvIGF1dG9tYXRpYyB3cmFwcGluZywgYW5kIHdoZW4gYWJvdXQgdG8gZ28gb2ZmIHNjcmVlbixcbiAqIHNob3VsZCB3cmFwIGp1c3QgZW5vdWdoIHRvIGF2b2lkIGRvaW5nIHNvLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGxuZ0xhdDogTG5nTGF0LCBwcmlvclBvczogP1BvaW50LCB0cmFuc2Zvcm06IFRyYW5zZm9ybSk6IExuZ0xhdCB7XG4gICAgbG5nTGF0ID0gbmV3IExuZ0xhdChsbmdMYXQubG5nLCBsbmdMYXQubGF0KTtcblxuICAgIC8vIEZpcnN0LCB0cnkgc2hpZnRpbmcgb25lIHdvcmxkIGluIGVpdGhlciBkaXJlY3Rpb24sIGFuZCBzZWUgaWYgZWl0aGVyIGlzIGNsb3NlciB0byB0aGVcbiAgICAvLyBwcmlvciBwb3NpdGlvbi4gVGhpcyBwcmVzZXJ2ZXMgb2JqZWN0IGNvbnN0YW5jeSB3aGVuIHRoZSBtYXAgY2VudGVyIGlzIGF1dG8td3JhcHBlZFxuICAgIC8vIGR1cmluZyBhbmltYXRpb25zLlxuICAgIGlmIChwcmlvclBvcykge1xuICAgICAgICBjb25zdCBsZWZ0ICA9IG5ldyBMbmdMYXQobG5nTGF0LmxuZyAtIDM2MCwgbG5nTGF0LmxhdCk7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gbmV3IExuZ0xhdChsbmdMYXQubG5nICsgMzYwLCBsbmdMYXQubGF0KTtcbiAgICAgICAgY29uc3QgZGVsdGEgPSB0cmFuc2Zvcm0ubG9jYXRpb25Qb2ludChsbmdMYXQpLmRpc3RTcXIocHJpb3JQb3MpO1xuICAgICAgICBpZiAodHJhbnNmb3JtLmxvY2F0aW9uUG9pbnQobGVmdCkuZGlzdFNxcihwcmlvclBvcykgPCBkZWx0YSkge1xuICAgICAgICAgICAgbG5nTGF0ID0gbGVmdDtcbiAgICAgICAgfSBlbHNlIGlmICh0cmFuc2Zvcm0ubG9jYXRpb25Qb2ludChyaWdodCkuZGlzdFNxcihwcmlvclBvcykgPCBkZWx0YSkge1xuICAgICAgICAgICAgbG5nTGF0ID0gcmlnaHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZWNvbmQsIHdyYXAgdG93YXJkIHRoZSBjZW50ZXIgdW50aWwgdGhlIG5ldyBwb3NpdGlvbiBpcyBvbiBzY3JlZW4sIG9yIHdlIGNhbid0IGdldFxuICAgIC8vIGFueSBjbG9zZXIuXG4gICAgd2hpbGUgKE1hdGguYWJzKGxuZ0xhdC5sbmcgLSB0cmFuc2Zvcm0uY2VudGVyLmxuZykgPiAxODApIHtcbiAgICAgICAgY29uc3QgcG9zID0gdHJhbnNmb3JtLmxvY2F0aW9uUG9pbnQobG5nTGF0KTtcbiAgICAgICAgaWYgKHBvcy54ID49IDAgJiYgcG9zLnkgPj0gMCAmJiBwb3MueCA8PSB0cmFuc2Zvcm0ud2lkdGggJiYgcG9zLnkgPD0gdHJhbnNmb3JtLmhlaWdodCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxuZ0xhdC5sbmcgPiB0cmFuc2Zvcm0uY2VudGVyLmxuZykge1xuICAgICAgICAgICAgbG5nTGF0LmxuZyAtPSAzNjA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsbmdMYXQubG5nICs9IDM2MDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBsbmdMYXQ7XG59XG4iLCIvLyBAZmxvd1xuXG5leHBvcnQgdHlwZSBBbmNob3IgPVxuICAgIHwgJ2NlbnRlcidcbiAgICB8ICd0b3AnXG4gICAgfCAnYm90dG9tJ1xuICAgIHwgJ2xlZnQnXG4gICAgfCAncmlnaHQnXG4gICAgfCAndG9wLWxlZnQnXG4gICAgfCAndG9wLXJpZ2h0J1xuICAgIHwgJ2JvdHRvbS1sZWZ0J1xuICAgIHwgJ2JvdHRvbS1yaWdodCc7XG5cbmV4cG9ydCBjb25zdCBhbmNob3JUcmFuc2xhdGU6IHtbXzogQW5jaG9yXTogc3RyaW5nfSA9IHtcbiAgICAnY2VudGVyJzogJ3RyYW5zbGF0ZSgtNTAlLC01MCUpJyxcbiAgICAndG9wJzogJ3RyYW5zbGF0ZSgtNTAlLDApJyxcbiAgICAndG9wLWxlZnQnOiAndHJhbnNsYXRlKDAsMCknLFxuICAgICd0b3AtcmlnaHQnOiAndHJhbnNsYXRlKC0xMDAlLDApJyxcbiAgICAnYm90dG9tJzogJ3RyYW5zbGF0ZSgtNTAlLC0xMDAlKScsXG4gICAgJ2JvdHRvbS1sZWZ0JzogJ3RyYW5zbGF0ZSgwLC0xMDAlKScsXG4gICAgJ2JvdHRvbS1yaWdodCc6ICd0cmFuc2xhdGUoLTEwMCUsLTEwMCUpJyxcbiAgICAnbGVmdCc6ICd0cmFuc2xhdGUoMCwtNTAlKScsXG4gICAgJ3JpZ2h0JzogJ3RyYW5zbGF0ZSgtMTAwJSwtNTAlKSdcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUFuY2hvckNsYXNzKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBhbmNob3I6IEFuY2hvciwgcHJlZml4OiBzdHJpbmcpIHtcbiAgICBjb25zdCBjbGFzc0xpc3QgPSBlbGVtZW50LmNsYXNzTGlzdDtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBhbmNob3JUcmFuc2xhdGUpIHtcbiAgICAgICAgY2xhc3NMaXN0LnJlbW92ZShgbWFwYm94Z2wtJHtwcmVmaXh9LWFuY2hvci0ke2tleX1gKTtcbiAgICB9XG4gICAgY2xhc3NMaXN0LmFkZChgbWFwYm94Z2wtJHtwcmVmaXh9LWFuY2hvci0ke2FuY2hvcn1gKTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBET00gZnJvbSAnLi4vdXRpbC9kb20nO1xuaW1wb3J0IHdpbmRvdyBmcm9tICcuLi91dGlsL3dpbmRvdyc7XG5pbXBvcnQgTG5nTGF0IGZyb20gJy4uL2dlby9sbmdfbGF0JztcbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCBzbWFydFdyYXAgZnJvbSAnLi4vdXRpbC9zbWFydF93cmFwJztcbmltcG9ydCB7YmluZEFsbCwgZXh0ZW5kfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHt0eXBlIEFuY2hvciwgYW5jaG9yVHJhbnNsYXRlLCBhcHBseUFuY2hvckNsYXNzfSBmcm9tICcuL2FuY2hvcic7XG5pbXBvcnQge0V2ZW50LCBFdmVudGVkfSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4vbWFwJztcbmltcG9ydCB0eXBlIFBvcHVwIGZyb20gJy4vcG9wdXAnO1xuaW1wb3J0IHR5cGUge0xuZ0xhdExpa2V9IGZyb20gXCIuLi9nZW8vbG5nX2xhdFwiO1xuaW1wb3J0IHR5cGUge01hcE1vdXNlRXZlbnQsIE1hcFRvdWNoRXZlbnR9IGZyb20gJy4vZXZlbnRzJztcbmltcG9ydCB0eXBlIHtQb2ludExpa2V9IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG50eXBlIE9wdGlvbnMgPSB7XG4gICAgZWxlbWVudD86IEhUTUxFbGVtZW50LFxuICAgIG9mZnNldD86IFBvaW50TGlrZSxcbiAgICBhbmNob3I/OiBBbmNob3IsXG4gICAgY29sb3I/OiBzdHJpbmcsXG4gICAgZHJhZ2dhYmxlPzogYm9vbGVhbixcbiAgICByb3RhdGlvbj86IG51bWJlcixcbiAgICByb3RhdGlvbkFsaWdubWVudD86IHN0cmluZyxcbiAgICBwaXRjaEFsaWdubWVudD86IHN0cmluZ1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbWFya2VyIGNvbXBvbmVudFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gW29wdGlvbnMuZWxlbWVudF0gRE9NIGVsZW1lbnQgdG8gdXNlIGFzIGEgbWFya2VyLiBUaGUgZGVmYXVsdCBpcyBhIGxpZ2h0IGJsdWUsIGRyb3BsZXQtc2hhcGVkIFNWRyBtYXJrZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYW5jaG9yPSdjZW50ZXInXSBBIHN0cmluZyBpbmRpY2F0aW5nIHRoZSBwYXJ0IG9mIHRoZSBNYXJrZXIgdGhhdCBzaG91bGQgYmUgcG9zaXRpb25lZCBjbG9zZXN0IHRvIHRoZSBjb29yZGluYXRlIHNldCB2aWEge0BsaW5rIE1hcmtlciNzZXRMbmdMYXR9LlxuICogICBPcHRpb25zIGFyZSBgJ2NlbnRlcidgLCBgJ3RvcCdgLCBgJ2JvdHRvbSdgLCBgJ2xlZnQnYCwgYCdyaWdodCdgLCBgJ3RvcC1sZWZ0J2AsIGAndG9wLXJpZ2h0J2AsIGAnYm90dG9tLWxlZnQnYCwgYW5kIGAnYm90dG9tLXJpZ2h0J2AuXG4gKiBAcGFyYW0ge1BvaW50TGlrZX0gW29wdGlvbnMub2Zmc2V0XSBUaGUgb2Zmc2V0IGluIHBpeGVscyBhcyBhIHtAbGluayBQb2ludExpa2V9IG9iamVjdCB0byBhcHBseSByZWxhdGl2ZSB0byB0aGUgZWxlbWVudCdzIGNlbnRlci4gTmVnYXRpdmVzIGluZGljYXRlIGxlZnQgYW5kIHVwLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNvbG9yPScjM0ZCMUNFJ10gVGhlIGNvbG9yIHRvIHVzZSBmb3IgdGhlIGRlZmF1bHQgbWFya2VyIGlmIG9wdGlvbnMuZWxlbWVudCBpcyBub3QgcHJvdmlkZWQuIFRoZSBkZWZhdWx0IGlzIGxpZ2h0IGJsdWUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmRyYWdnYWJsZT1mYWxzZV0gQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgYSBtYXJrZXIgaXMgYWJsZSB0byBiZSBkcmFnZ2VkIHRvIGEgbmV3IHBvc2l0aW9uIG9uIHRoZSBtYXAuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMucm90YXRpb249MF0gVGhlIHJvdGF0aW9uIGFuZ2xlIG9mIHRoZSBtYXJrZXIgaW4gZGVncmVlcywgcmVsYXRpdmUgdG8gaXRzIHJlc3BlY3RpdmUgYHJvdGF0aW9uQWxpZ25tZW50YCBzZXR0aW5nLiBBIHBvc2l0aXZlIHZhbHVlIHdpbGwgcm90YXRlIHRoZSBtYXJrZXIgY2xvY2t3aXNlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnBpdGNoQWxpZ25tZW50PSdhdXRvJ10gYG1hcGAgYWxpZ25zIHRoZSBgTWFya2VyYCB0byB0aGUgcGxhbmUgb2YgdGhlIG1hcC4gYHZpZXdwb3J0YCBhbGlnbnMgdGhlIGBNYXJrZXJgIHRvIHRoZSBwbGFuZSBvZiB0aGUgdmlld3BvcnQuIGBhdXRvYCBhdXRvbWF0aWNhbGx5IG1hdGNoZXMgdGhlIHZhbHVlIG9mIGByb3RhdGlvbkFsaWdubWVudGAuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMucm90YXRpb25BbGlnbm1lbnQ9J2F1dG8nXSBgbWFwYCBhbGlnbnMgdGhlIGBNYXJrZXJgJ3Mgcm90YXRpb24gcmVsYXRpdmUgdG8gdGhlIG1hcCwgbWFpbnRhaW5pbmcgYSBiZWFyaW5nIGFzIHRoZSBtYXAgcm90YXRlcy4gYHZpZXdwb3J0YCBhbGlnbnMgdGhlIGBNYXJrZXJgJ3Mgcm90YXRpb24gcmVsYXRpdmUgdG8gdGhlIHZpZXdwb3J0LCBhZ25vc3RpYyB0byBtYXAgcm90YXRpb25zLiBgYXV0b2AgaXMgZXF1aXZhbGVudCB0byBgdmlld3BvcnRgLlxuICogQGV4YW1wbGVcbiAqIHZhciBtYXJrZXIgPSBuZXcgbWFwYm94Z2wuTWFya2VyKClcbiAqICAgLnNldExuZ0xhdChbMzAuNSwgNTAuNV0pXG4gKiAgIC5hZGRUbyhtYXApO1xuICogQHNlZSBbQWRkIGN1c3RvbSBpY29ucyB3aXRoIE1hcmtlcnNdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvY3VzdG9tLW1hcmtlci1pY29ucy8pXG4gKiBAc2VlIFtDcmVhdGUgYSBkcmFnZ2FibGUgTWFya2VyXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2RyYWctYS1tYXJrZXIvKVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNYXJrZXIgZXh0ZW5kcyBFdmVudGVkIHtcbiAgICBfbWFwOiBNYXA7XG4gICAgX2FuY2hvcjogQW5jaG9yO1xuICAgIF9vZmZzZXQ6IFBvaW50O1xuICAgIF9lbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgICBfcG9wdXA6ID9Qb3B1cDtcbiAgICBfbG5nTGF0OiBMbmdMYXQ7XG4gICAgX3BvczogP1BvaW50O1xuICAgIF9jb2xvcjogP3N0cmluZztcbiAgICBfZGVmYXVsdE1hcmtlcjogYm9vbGVhbjtcbiAgICBfZHJhZ2dhYmxlOiBib29sZWFuO1xuICAgIF9zdGF0ZTogJ2luYWN0aXZlJyB8ICdwZW5kaW5nJyB8ICdhY3RpdmUnOyAvLyB1c2VkIGZvciBoYW5kbGluZyBkcmFnIGV2ZW50c1xuICAgIF9wb3NpdGlvbkRlbHRhOiA/bnVtYmVyO1xuICAgIF9yb3RhdGlvbjogbnVtYmVyO1xuICAgIF9waXRjaEFsaWdubWVudDogc3RyaW5nO1xuICAgIF9yb3RhdGlvbkFsaWdubWVudDogc3RyaW5nO1xuICAgIF9vcmlnaW5hbFRhYkluZGV4OiA/c3RyaW5nOyAvLyBvcmlnaW5hbCB0YWJpbmRleCBvZiBfZWxlbWVudFxuXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucz86IE9wdGlvbnMsIGxlZ2FjeU9wdGlvbnM/OiBPcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIC8vIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IC0tIHRoZSBjb25zdHJ1Y3RvciB1c2VkIHRvIGFjY2VwdCB0aGUgZWxlbWVudCBhcyBhXG4gICAgICAgIC8vIHJlcXVpcmVkIGZpcnN0IGFyZ3VtZW50LCBiZWZvcmUgaXQgd2FzIG1hZGUgb3B0aW9uYWwuXG4gICAgICAgIGlmIChvcHRpb25zIGluc3RhbmNlb2Ygd2luZG93LkhUTUxFbGVtZW50IHx8IGxlZ2FjeU9wdGlvbnMpIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBleHRlbmQoe2VsZW1lbnQ6IG9wdGlvbnN9LCBsZWdhY3lPcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJpbmRBbGwoW1xuICAgICAgICAgICAgJ191cGRhdGUnLFxuICAgICAgICAgICAgJ19vbk1vdmUnLFxuICAgICAgICAgICAgJ19vblVwJyxcbiAgICAgICAgICAgICdfYWRkRHJhZ0hhbmRsZXInLFxuICAgICAgICAgICAgJ19vbk1hcENsaWNrJyxcbiAgICAgICAgICAgICdfb25LZXlQcmVzcydcbiAgICAgICAgXSwgdGhpcyk7XG5cbiAgICAgICAgdGhpcy5fYW5jaG9yID0gb3B0aW9ucyAmJiBvcHRpb25zLmFuY2hvciB8fCAnY2VudGVyJztcbiAgICAgICAgdGhpcy5fY29sb3IgPSBvcHRpb25zICYmIG9wdGlvbnMuY29sb3IgfHwgJyMzRkIxQ0UnO1xuICAgICAgICB0aGlzLl9kcmFnZ2FibGUgPSBvcHRpb25zICYmIG9wdGlvbnMuZHJhZ2dhYmxlIHx8IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZSA9ICdpbmFjdGl2ZSc7XG4gICAgICAgIHRoaXMuX3JvdGF0aW9uID0gb3B0aW9ucyAmJiBvcHRpb25zLnJvdGF0aW9uIHx8IDA7XG4gICAgICAgIHRoaXMuX3JvdGF0aW9uQWxpZ25tZW50ID0gb3B0aW9ucyAmJiBvcHRpb25zLnJvdGF0aW9uQWxpZ25tZW50IHx8ICdhdXRvJztcbiAgICAgICAgdGhpcy5fcGl0Y2hBbGlnbm1lbnQgPSBvcHRpb25zICYmIG9wdGlvbnMucGl0Y2hBbGlnbm1lbnQgJiYgb3B0aW9ucy5waXRjaEFsaWdubWVudCAhPT0gJ2F1dG8nID8gIG9wdGlvbnMucGl0Y2hBbGlnbm1lbnQgOiB0aGlzLl9yb3RhdGlvbkFsaWdubWVudDtcblxuICAgICAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMuZWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5fZGVmYXVsdE1hcmtlciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9lbGVtZW50ID0gRE9NLmNyZWF0ZSgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsICdNYXAgbWFya2VyJyk7XG5cbiAgICAgICAgICAgIC8vIGNyZWF0ZSBkZWZhdWx0IG1hcCBtYXJrZXIgU1ZHXG4gICAgICAgICAgICBjb25zdCBzdmcgPSBET00uY3JlYXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3N2ZycpO1xuICAgICAgICAgICAgc3ZnLnNldEF0dHJpYnV0ZU5TKG51bGwsICdkaXNwbGF5JywgJ2Jsb2NrJyk7XG4gICAgICAgICAgICBzdmcuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2hlaWdodCcsICc0MXB4Jyk7XG4gICAgICAgICAgICBzdmcuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3dpZHRoJywgJzI3cHgnKTtcbiAgICAgICAgICAgIHN2Zy5zZXRBdHRyaWJ1dGVOUyhudWxsLCAndmlld0JveCcsICcwIDAgMjcgNDEnKTtcblxuICAgICAgICAgICAgY29uc3QgbWFya2VyTGFyZ2UgPSBET00uY3JlYXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ2cnKTtcbiAgICAgICAgICAgIG1hcmtlckxhcmdlLnNldEF0dHJpYnV0ZU5TKG51bGwsICdzdHJva2UnLCAnbm9uZScpO1xuICAgICAgICAgICAgbWFya2VyTGFyZ2Uuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3N0cm9rZS13aWR0aCcsICcxJyk7XG4gICAgICAgICAgICBtYXJrZXJMYXJnZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZmlsbCcsICdub25lJyk7XG4gICAgICAgICAgICBtYXJrZXJMYXJnZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZmlsbC1ydWxlJywgJ2V2ZW5vZGQnKTtcblxuICAgICAgICAgICAgY29uc3QgcGFnZTEgPSBET00uY3JlYXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ2cnKTtcbiAgICAgICAgICAgIHBhZ2UxLnNldEF0dHJpYnV0ZU5TKG51bGwsICdmaWxsLXJ1bGUnLCAnbm9uemVybycpO1xuXG4gICAgICAgICAgICBjb25zdCBzaGFkb3cgPSBET00uY3JlYXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ2cnKTtcbiAgICAgICAgICAgIHNoYWRvdy5zZXRBdHRyaWJ1dGVOUyhudWxsLCAndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgzLjAsIDI5LjApJyk7XG4gICAgICAgICAgICBzaGFkb3cuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2ZpbGwnLCAnIzAwMDAwMCcpO1xuXG4gICAgICAgICAgICBjb25zdCBlbGxpcHNlcyA9IFtcbiAgICAgICAgICAgICAgICB7J3J4JzogJzEwLjUnLCAncnknOiAnNS4yNTAwMjI3Myd9LFxuICAgICAgICAgICAgICAgIHsncngnOiAnMTAuNScsICdyeSc6ICc1LjI1MDAyMjczJ30sXG4gICAgICAgICAgICAgICAgeydyeCc6ICc5LjUnLCAncnknOiAnNC43NzI3NTAwNyd9LFxuICAgICAgICAgICAgICAgIHsncngnOiAnOC41JywgJ3J5JzogJzQuMjk1NDk5MzYnfSxcbiAgICAgICAgICAgICAgICB7J3J4JzogJzcuNScsICdyeSc6ICczLjgxODIyMzA4J30sXG4gICAgICAgICAgICAgICAgeydyeCc6ICc2LjUnLCAncnknOiAnMy4zNDA5NDY3OSd9LFxuICAgICAgICAgICAgICAgIHsncngnOiAnNS41JywgJ3J5JzogJzIuODYzNjcwNTEnfSxcbiAgICAgICAgICAgICAgICB7J3J4JzogJzQuNScsICdyeSc6ICcyLjM4NjM2ODY0J31cbiAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgZGF0YSBvZiBlbGxpcHNlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsbGlwc2UgPSBET00uY3JlYXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ2VsbGlwc2UnKTtcbiAgICAgICAgICAgICAgICBlbGxpcHNlLnNldEF0dHJpYnV0ZU5TKG51bGwsICdvcGFjaXR5JywgJzAuMDQnKTtcbiAgICAgICAgICAgICAgICBlbGxpcHNlLnNldEF0dHJpYnV0ZU5TKG51bGwsICdjeCcsICcxMC41Jyk7XG4gICAgICAgICAgICAgICAgZWxsaXBzZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnY3knLCAnNS44MDAyOTAwOCcpO1xuICAgICAgICAgICAgICAgIGVsbGlwc2Uuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3J4JywgZGF0YVsncngnXSk7XG4gICAgICAgICAgICAgICAgZWxsaXBzZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAncnknLCBkYXRhWydyeSddKTtcbiAgICAgICAgICAgICAgICBzaGFkb3cuYXBwZW5kQ2hpbGQoZWxsaXBzZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGJhY2tncm91bmQgPSBET00uY3JlYXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ2cnKTtcbiAgICAgICAgICAgIGJhY2tncm91bmQuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2ZpbGwnLCB0aGlzLl9jb2xvcik7XG5cbiAgICAgICAgICAgIGNvbnN0IGJnUGF0aCA9IERPTS5jcmVhdGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAncGF0aCcpO1xuICAgICAgICAgICAgYmdQYXRoLnNldEF0dHJpYnV0ZU5TKG51bGwsICdkJywgJ00yNywxMy41IEMyNywxOS4wNzQ2NDQgMjAuMjUwMDAxLDI3LjAwMDAwMiAxNC43NSwzNC41MDAwMDIgQzE0LjAxNjY2NSwzNS41MDAwMDQgMTIuOTgzMzM1LDM1LjUwMDAwNCAxMi4yNSwzNC41MDAwMDIgQzYuNzQ5OTk5MywyNy4wMDAwMDIgMCwxOS4yMjI1NjIgMCwxMy41IEMwLDYuMDQ0MTU1OSA2LjA0NDE1NTksMCAxMy41LDAgQzIwLjk1NTg0NCwwIDI3LDYuMDQ0MTU1OSAyNywxMy41IFonKTtcblxuICAgICAgICAgICAgYmFja2dyb3VuZC5hcHBlbmRDaGlsZChiZ1BhdGgpO1xuXG4gICAgICAgICAgICBjb25zdCBib3JkZXIgPSBET00uY3JlYXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ2cnKTtcbiAgICAgICAgICAgIGJvcmRlci5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnb3BhY2l0eScsICcwLjI1Jyk7XG4gICAgICAgICAgICBib3JkZXIuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2ZpbGwnLCAnIzAwMDAwMCcpO1xuXG4gICAgICAgICAgICBjb25zdCBib3JkZXJQYXRoID0gRE9NLmNyZWF0ZU5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdwYXRoJyk7XG4gICAgICAgICAgICBib3JkZXJQYXRoLnNldEF0dHJpYnV0ZU5TKG51bGwsICdkJywgJ00xMy41LDAgQzYuMDQ0MTU1OSwwIDAsNi4wNDQxNTU5IDAsMTMuNSBDMCwxOS4yMjI1NjIgNi43NDk5OTkzLDI3IDEyLjI1LDM0LjUgQzEzLDM1LjUyMjcyNyAxNC4wMTY2NjQsMzUuNTAwMDA0IDE0Ljc1LDM0LjUgQzIwLjI1MDAwMSwyNyAyNywxOS4wNzQ2NDQgMjcsMTMuNSBDMjcsNi4wNDQxNTU5IDIwLjk1NTg0NCwwIDEzLjUsMCBaIE0xMy41LDEgQzIwLjQxNTQwNCwxIDI2LDYuNTg0NTk2IDI2LDEzLjUgQzI2LDE1Ljg5ODY1NyAyNC40OTU1ODQsMTkuMTgxNDMxIDIyLjIyMDcwMywyMi43MzgyODEgQzE5Ljk0NTgyMywyNi4yOTUxMzIgMTYuNzA1MTE5LDMwLjE0MjE2NyAxMy45NDMzNTksMzMuOTA4MjAzIEMxMy43NDM0NDUsMzQuMTgwODE0IDEzLjYxMjcxNSwzNC4zMjI3MzggMTMuNSwzNC40NDE0MDYgQzEzLjM4NzI4NSwzNC4zMjI3MzggMTMuMjU2NTU1LDM0LjE4MDgxNCAxMy4wNTY2NDEsMzMuOTA4MjAzIEMxMC4yODQ0ODEsMzAuMTI3OTg1IDcuNDE0ODY4NCwyNi4zMTQxNTkgNS4wMTU2MjUsMjIuNzczNDM4IEMyLjYxNjM4MTYsMTkuMjMyNzE1IDEsMTUuOTUzNTM4IDEsMTMuNSBDMSw2LjU4NDU5NiA2LjU4NDU5NiwxIDEzLjUsMSBaJyk7XG5cbiAgICAgICAgICAgIGJvcmRlci5hcHBlbmRDaGlsZChib3JkZXJQYXRoKTtcblxuICAgICAgICAgICAgY29uc3QgbWFraSA9IERPTS5jcmVhdGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnZycpO1xuICAgICAgICAgICAgbWFraS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSg2LjAsIDcuMCknKTtcbiAgICAgICAgICAgIG1ha2kuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2ZpbGwnLCAnI0ZGRkZGRicpO1xuXG4gICAgICAgICAgICBjb25zdCBjaXJjbGVDb250YWluZXIgPSBET00uY3JlYXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ2cnKTtcbiAgICAgICAgICAgIGNpcmNsZUNvbnRhaW5lci5zZXRBdHRyaWJ1dGVOUyhudWxsLCAndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSg4LjAsIDguMCknKTtcblxuICAgICAgICAgICAgY29uc3QgY2lyY2xlMSA9IERPTS5jcmVhdGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnY2lyY2xlJyk7XG4gICAgICAgICAgICBjaXJjbGUxLnNldEF0dHJpYnV0ZU5TKG51bGwsICdmaWxsJywgJyMwMDAwMDAnKTtcbiAgICAgICAgICAgIGNpcmNsZTEuc2V0QXR0cmlidXRlTlMobnVsbCwgJ29wYWNpdHknLCAnMC4yNScpO1xuICAgICAgICAgICAgY2lyY2xlMS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnY3gnLCAnNS41Jyk7XG4gICAgICAgICAgICBjaXJjbGUxLnNldEF0dHJpYnV0ZU5TKG51bGwsICdjeScsICc1LjUnKTtcbiAgICAgICAgICAgIGNpcmNsZTEuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3InLCAnNS40OTk5OTYyJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNpcmNsZTIgPSBET00uY3JlYXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ2NpcmNsZScpO1xuICAgICAgICAgICAgY2lyY2xlMi5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZmlsbCcsICcjRkZGRkZGJyk7XG4gICAgICAgICAgICBjaXJjbGUyLnNldEF0dHJpYnV0ZU5TKG51bGwsICdjeCcsICc1LjUnKTtcbiAgICAgICAgICAgIGNpcmNsZTIuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2N5JywgJzUuNScpO1xuICAgICAgICAgICAgY2lyY2xlMi5zZXRBdHRyaWJ1dGVOUyhudWxsLCAncicsICc1LjQ5OTk5NjInKTtcblxuICAgICAgICAgICAgY2lyY2xlQ29udGFpbmVyLmFwcGVuZENoaWxkKGNpcmNsZTEpO1xuICAgICAgICAgICAgY2lyY2xlQ29udGFpbmVyLmFwcGVuZENoaWxkKGNpcmNsZTIpO1xuXG4gICAgICAgICAgICBwYWdlMS5hcHBlbmRDaGlsZChzaGFkb3cpO1xuICAgICAgICAgICAgcGFnZTEuYXBwZW5kQ2hpbGQoYmFja2dyb3VuZCk7XG4gICAgICAgICAgICBwYWdlMS5hcHBlbmRDaGlsZChib3JkZXIpO1xuICAgICAgICAgICAgcGFnZTEuYXBwZW5kQ2hpbGQobWFraSk7XG4gICAgICAgICAgICBwYWdlMS5hcHBlbmRDaGlsZChjaXJjbGVDb250YWluZXIpO1xuXG4gICAgICAgICAgICBzdmcuYXBwZW5kQ2hpbGQocGFnZTEpO1xuXG4gICAgICAgICAgICB0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKHN2Zyk7XG5cbiAgICAgICAgICAgIC8vIGlmIG5vIGVsZW1lbnQgYW5kIG5vIG9mZnNldCBvcHRpb24gZ2l2ZW4gYXBwbHkgYW4gb2Zmc2V0IGZvciB0aGUgZGVmYXVsdCBtYXJrZXJcbiAgICAgICAgICAgIC8vIHRoZSAtMTQgYXMgdGhlIHkgdmFsdWUgb2YgdGhlIGRlZmF1bHQgbWFya2VyIG9mZnNldCB3YXMgZGV0ZXJtaW5lZCBhcyBmb2xsb3dzXG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gdGhlIG1hcmtlciB0aXAgaXMgYXQgdGhlIGNlbnRlciBvZiB0aGUgc2hhZG93IGVsbGlwc2UgZnJvbSB0aGUgZGVmYXVsdCBzdmdcbiAgICAgICAgICAgIC8vIHRoZSB5IHZhbHVlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIHNoYWRvdyBlbGxpcHNlIHJlbGF0aXZlIHRvIHRoZSBzdmcgdG9wIGxlZnQgaXMgXCJzaGFkb3cgdHJhbnNmb3JtIHRyYW5zbGF0ZS15ICgyOS4wKSArIGVsbGlwc2UgY3kgKDUuODAwMjkwMDgpXCJcbiAgICAgICAgICAgIC8vIG9mZnNldCB0byB0aGUgc3ZnIGNlbnRlciBcImhlaWdodCAoNDEgLyAyKVwiIGdpdmVzICgyOS4wICsgNS44MDAyOTAwOCkgLSAoNDEgLyAyKSBhbmQgcm91bmRlZCBmb3IgYW4gaW50ZWdlciBwaXhlbCBvZmZzZXQgZ2l2ZXMgMTRcbiAgICAgICAgICAgIC8vIG5lZ2F0aXZlIGlzIHVzZWQgdG8gbW92ZSB0aGUgbWFya2VyIHVwIGZyb20gdGhlIGNlbnRlciBzbyB0aGUgdGlwIGlzIGF0IHRoZSBNYXJrZXIgbG5nTGF0XG4gICAgICAgICAgICB0aGlzLl9vZmZzZXQgPSBQb2ludC5jb252ZXJ0KG9wdGlvbnMgJiYgb3B0aW9ucy5vZmZzZXQgfHwgWzAsIC0xNF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZWxlbWVudCA9IG9wdGlvbnMuZWxlbWVudDtcbiAgICAgICAgICAgIHRoaXMuX29mZnNldCA9IFBvaW50LmNvbnZlcnQob3B0aW9ucyAmJiBvcHRpb25zLm9mZnNldCB8fCBbMCwgMF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1tYXJrZXInKTtcbiAgICAgICAgdGhpcy5fZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdkcmFnc3RhcnQnLCAoZTogRHJhZ0V2ZW50KSA9PiB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAvLyBwcmV2ZW50IGZvY3VzaW5nIG9uIGNsaWNrXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgKCkgPT4ge1xuICAgICAgICAgICAgLy8gcmV2ZXJ0IHRoZSBkZWZhdWx0IHNjcm9sbGluZyBhY3Rpb24gb2YgdGhlIGNvbnRhaW5lclxuICAgICAgICAgICAgY29uc3QgZWwgPSB0aGlzLl9tYXAuZ2V0Q29udGFpbmVyKCk7XG4gICAgICAgICAgICBlbC5zY3JvbGxUb3AgPSAwO1xuICAgICAgICAgICAgZWwuc2Nyb2xsTGVmdCA9IDA7XG4gICAgICAgIH0pO1xuICAgICAgICBhcHBseUFuY2hvckNsYXNzKHRoaXMuX2VsZW1lbnQsIHRoaXMuX2FuY2hvciwgJ21hcmtlcicpO1xuXG4gICAgICAgIHRoaXMuX3BvcHVwID0gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBdHRhY2hlcyB0aGUgYE1hcmtlcmAgdG8gYSBgTWFwYCBvYmplY3QuXG4gICAgICogQHBhcmFtIHtNYXB9IG1hcCBUaGUgTWFwYm94IEdMIEpTIG1hcCB0byBhZGQgdGhlIG1hcmtlciB0by5cbiAgICAgKiBAcmV0dXJucyB7TWFya2VyfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBtYXJrZXIgPSBuZXcgbWFwYm94Z2wuTWFya2VyKClcbiAgICAgKiAgIC5zZXRMbmdMYXQoWzMwLjUsIDUwLjVdKVxuICAgICAqICAgLmFkZFRvKG1hcCk7IC8vIGFkZCB0aGUgbWFya2VyIHRvIHRoZSBtYXBcbiAgICAgKi9cbiAgICBhZGRUbyhtYXA6IE1hcCkge1xuICAgICAgICB0aGlzLnJlbW92ZSgpO1xuICAgICAgICB0aGlzLl9tYXAgPSBtYXA7XG4gICAgICAgIG1hcC5nZXRDYW52YXNDb250YWluZXIoKS5hcHBlbmRDaGlsZCh0aGlzLl9lbGVtZW50KTtcbiAgICAgICAgbWFwLm9uKCdtb3ZlJywgdGhpcy5fdXBkYXRlKTtcbiAgICAgICAgbWFwLm9uKCdtb3ZlZW5kJywgdGhpcy5fdXBkYXRlKTtcbiAgICAgICAgdGhpcy5zZXREcmFnZ2FibGUodGhpcy5fZHJhZ2dhYmxlKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG5cbiAgICAgICAgLy8gSWYgd2UgYXR0YWNoZWQgdGhlIGBjbGlja2AgbGlzdGVuZXIgdG8gdGhlIG1hcmtlciBlbGVtZW50LCB0aGUgcG9wdXBcbiAgICAgICAgLy8gd291bGQgY2xvc2Ugb25jZSB0aGUgZXZlbnQgcHJvcG9nYXRlZCB0byBgbWFwYCBkdWUgdG8gdGhlXG4gICAgICAgIC8vIGBQb3B1cCNfb25DbGlja0Nsb3NlYCBsaXN0ZW5lci5cbiAgICAgICAgdGhpcy5fbWFwLm9uKCdjbGljaycsIHRoaXMuX29uTWFwQ2xpY2spO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIG1hcmtlciBmcm9tIGEgbWFwXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgbWFya2VyID0gbmV3IG1hcGJveGdsLk1hcmtlcigpLmFkZFRvKG1hcCk7XG4gICAgICogbWFya2VyLnJlbW92ZSgpO1xuICAgICAqIEByZXR1cm5zIHtNYXJrZXJ9IGB0aGlzYFxuICAgICAqL1xuICAgIHJlbW92ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX21hcCkge1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9mZignY2xpY2snLCB0aGlzLl9vbk1hcENsaWNrKTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ21vdmUnLCB0aGlzLl91cGRhdGUpO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9mZignbW92ZWVuZCcsIHRoaXMuX3VwZGF0ZSk7XG4gICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCdtb3VzZWRvd24nLCB0aGlzLl9hZGREcmFnSGFuZGxlcik7XG4gICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCd0b3VjaHN0YXJ0JywgdGhpcy5fYWRkRHJhZ0hhbmRsZXIpO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9mZignbW91c2V1cCcsIHRoaXMuX29uVXApO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9mZigndG91Y2hlbmQnLCB0aGlzLl9vblVwKTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ21vdXNlbW92ZScsIHRoaXMuX29uTW92ZSk7XG4gICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCd0b3VjaG1vdmUnLCB0aGlzLl9vbk1vdmUpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX21hcDtcbiAgICAgICAgfVxuICAgICAgICBET00ucmVtb3ZlKHRoaXMuX2VsZW1lbnQpO1xuICAgICAgICBpZiAodGhpcy5fcG9wdXApIHRoaXMuX3BvcHVwLnJlbW92ZSgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIG1hcmtlcidzIGdlb2dyYXBoaWNhbCBsb2NhdGlvbi5cbiAgICAgKlxuICAgICAqIFRoZSBsb25naXR1ZGUgb2YgdGhlIHJlc3VsdCBtYXkgZGlmZmVyIGJ5IGEgbXVsdGlwbGUgb2YgMzYwIGRlZ3JlZXMgZnJvbSB0aGUgbG9uZ2l0dWRlIHByZXZpb3VzbHlcbiAgICAgKiBzZXQgYnkgYHNldExuZ0xhdGAgYmVjYXVzZSBgTWFya2VyYCB3cmFwcyB0aGUgYW5jaG9yIGxvbmdpdHVkZSBhY3Jvc3MgY29waWVzIG9mIHRoZSB3b3JsZCB0byBrZWVwXG4gICAgICogdGhlIG1hcmtlciBvbiBzY3JlZW4uXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7TG5nTGF0fSBBIHtAbGluayBMbmdMYXR9IGRlc2NyaWJpbmcgdGhlIG1hcmtlcidzIGxvY2F0aW9uLlxuICAgICogQGV4YW1wbGVcbiAgICAqIC8vIFN0b3JlIHRoZSBtYXJrZXIncyBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIGNvb3JkaW5hdGVzIGluIGEgdmFyaWFibGVcbiAgICAqIHZhciBsbmdMYXQgPSBtYXJrZXIuZ2V0TG5nTGF0KCk7XG4gICAgKiAvLyBQcmludCB0aGUgbWFya2VyJ3MgbG9uZ2l0dWRlIGFuZCBsYXRpdHVkZSB2YWx1ZXMgaW4gdGhlIGNvbnNvbGVcbiAgICAqIGNvbnNvbGUubG9nKCdMb25naXR1ZGU6ICcgKyBsbmdMYXQubG5nICsgJywgTGF0aXR1ZGU6ICcgKyBsbmdMYXQubGF0IClcbiAgICAqIEBzZWUgW0NyZWF0ZSBhIGRyYWdnYWJsZSBNYXJrZXJdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2RyYWctYS1tYXJrZXIvKVxuICAgICovXG4gICAgZ2V0TG5nTGF0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG5nTGF0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICogU2V0IHRoZSBtYXJrZXIncyBnZW9ncmFwaGljYWwgcG9zaXRpb24gYW5kIG1vdmUgaXQuXG4gICAgKiBAcGFyYW0ge0xuZ0xhdH0gbG5nbGF0IEEge0BsaW5rIExuZ0xhdH0gZGVzY3JpYmluZyB3aGVyZSB0aGUgbWFya2VyIHNob3VsZCBiZSBsb2NhdGVkLlxuICAgICogQHJldHVybnMge01hcmtlcn0gYHRoaXNgXG4gICAgKiBAZXhhbXBsZVxuICAgICogLy8gQ3JlYXRlIGEgbmV3IG1hcmtlciwgc2V0IHRoZSBsb25naXR1ZGUgYW5kIGxhdGl0dWRlLCBhbmQgYWRkIGl0IHRvIHRoZSBtYXBcbiAgICAqIG5ldyBtYXBib3hnbC5NYXJrZXIoKVxuICAgICogICAuc2V0TG5nTGF0KFstNjUuMDE3LCAtMTYuNDU3XSlcbiAgICAqICAgLmFkZFRvKG1hcCk7XG4gICAgKiBAc2VlIFtBZGQgY3VzdG9tIGljb25zIHdpdGggTWFya2Vyc10oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvY3VzdG9tLW1hcmtlci1pY29ucy8pXG4gICAgKiBAc2VlIFtDcmVhdGUgYSBkcmFnZ2FibGUgTWFya2VyXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9kcmFnLWEtbWFya2VyLylcbiAgICAqIEBzZWUgW0FkZCBhIG1hcmtlciB1c2luZyBhIHBsYWNlIG5hbWVdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL21hcmtlci1mcm9tLWdlb2NvZGUvKVxuICAgICovXG4gICAgc2V0TG5nTGF0KGxuZ2xhdDogTG5nTGF0TGlrZSkge1xuICAgICAgICB0aGlzLl9sbmdMYXQgPSBMbmdMYXQuY29udmVydChsbmdsYXQpO1xuICAgICAgICB0aGlzLl9wb3MgPSBudWxsO1xuICAgICAgICBpZiAodGhpcy5fcG9wdXApIHRoaXMuX3BvcHVwLnNldExuZ0xhdCh0aGlzLl9sbmdMYXQpO1xuICAgICAgICB0aGlzLl91cGRhdGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYE1hcmtlcmAncyBIVE1MIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gICAgICovXG4gICAgZ2V0RWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQmluZHMgYSB7QGxpbmsgUG9wdXB9IHRvIHRoZSB7QGxpbmsgTWFya2VyfS5cbiAgICAgKiBAcGFyYW0gcG9wdXAgQW4gaW5zdGFuY2Ugb2YgdGhlIHtAbGluayBQb3B1cH0gY2xhc3MuIElmIHVuZGVmaW5lZCBvciBudWxsLCBhbnkgcG9wdXBcbiAgICAgKiBzZXQgb24gdGhpcyB7QGxpbmsgTWFya2VyfSBpbnN0YW5jZSBpcyB1bnNldC5cbiAgICAgKiBAcmV0dXJucyB7TWFya2VyfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBtYXJrZXIgPSBuZXcgbWFwYm94Z2wuTWFya2VyKClcbiAgICAgKiAgLnNldExuZ0xhdChbMCwgMF0pXG4gICAgICogIC5zZXRQb3B1cChuZXcgbWFwYm94Z2wuUG9wdXAoKS5zZXRIVE1MKFwiPGgxPkhlbGxvIFdvcmxkITwvaDE+XCIpKSAvLyBhZGQgcG9wdXBcbiAgICAgKiAgLmFkZFRvKG1hcCk7XG4gICAgICogQHNlZSBbQXR0YWNoIGEgcG9wdXAgdG8gYSBtYXJrZXIgaW5zdGFuY2VdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3NldC1wb3B1cC8pXG4gICAgICovXG4gICAgc2V0UG9wdXAocG9wdXA6ID9Qb3B1cCkge1xuICAgICAgICBpZiAodGhpcy5fcG9wdXApIHtcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwLnJlbW92ZSgpO1xuICAgICAgICAgICAgdGhpcy5fcG9wdXAgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlwcmVzcycsIHRoaXMuX29uS2V5UHJlc3MpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX29yaWdpbmFsVGFiSW5kZXgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgndGFiaW5kZXgnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwb3B1cCkge1xuICAgICAgICAgICAgaWYgKCEoJ29mZnNldCcgaW4gcG9wdXAub3B0aW9ucykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXJrZXJIZWlnaHQgPSA0MSAtICg1LjggLyAyKTtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXJrZXJSYWRpdXMgPSAxMy41O1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVhck9mZnNldCA9IE1hdGguc3FydChNYXRoLnBvdyhtYXJrZXJSYWRpdXMsIDIpIC8gMik7XG4gICAgICAgICAgICAgICAgcG9wdXAub3B0aW9ucy5vZmZzZXQgPSB0aGlzLl9kZWZhdWx0TWFya2VyID8ge1xuICAgICAgICAgICAgICAgICAgICAndG9wJzogWzAsIDBdLFxuICAgICAgICAgICAgICAgICAgICAndG9wLWxlZnQnOiBbMCwgMF0sXG4gICAgICAgICAgICAgICAgICAgICd0b3AtcmlnaHQnOiBbMCwgMF0sXG4gICAgICAgICAgICAgICAgICAgICdib3R0b20nOiBbMCwgLW1hcmtlckhlaWdodF0sXG4gICAgICAgICAgICAgICAgICAgICdib3R0b20tbGVmdCc6IFtsaW5lYXJPZmZzZXQsIChtYXJrZXJIZWlnaHQgLSBtYXJrZXJSYWRpdXMgKyBsaW5lYXJPZmZzZXQpICogLTFdLFxuICAgICAgICAgICAgICAgICAgICAnYm90dG9tLXJpZ2h0JzogWy1saW5lYXJPZmZzZXQsIChtYXJrZXJIZWlnaHQgLSBtYXJrZXJSYWRpdXMgKyBsaW5lYXJPZmZzZXQpICogLTFdLFxuICAgICAgICAgICAgICAgICAgICAnbGVmdCc6IFttYXJrZXJSYWRpdXMsIChtYXJrZXJIZWlnaHQgLSBtYXJrZXJSYWRpdXMpICogLTFdLFxuICAgICAgICAgICAgICAgICAgICAncmlnaHQnOiBbLW1hcmtlclJhZGl1cywgKG1hcmtlckhlaWdodCAtIG1hcmtlclJhZGl1cykgKiAtMV1cbiAgICAgICAgICAgICAgICB9IDogdGhpcy5fb2Zmc2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcG9wdXAgPSBwb3B1cDtcbiAgICAgICAgICAgIGlmICh0aGlzLl9sbmdMYXQpIHRoaXMuX3BvcHVwLnNldExuZ0xhdCh0aGlzLl9sbmdMYXQpO1xuXG4gICAgICAgICAgICB0aGlzLl9vcmlnaW5hbFRhYkluZGV4ID0gdGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3RhYmluZGV4Jyk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX29yaWdpbmFsVGFiSW5kZXgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnMCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlwcmVzcycsIHRoaXMuX29uS2V5UHJlc3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgX29uS2V5UHJlc3MoZTogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBjb2RlID0gZS5jb2RlO1xuICAgICAgICBjb25zdCBsZWdhY3lDb2RlID0gZS5jaGFyQ29kZSB8fCBlLmtleUNvZGU7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGNvZGUgPT09ICdTcGFjZScpIHx8IChjb2RlID09PSAnRW50ZXInKSB8fFxuICAgICAgICAgICAgKGxlZ2FjeUNvZGUgPT09IDMyKSB8fCAobGVnYWN5Q29kZSA9PT0gMTMpIC8vIHNwYWNlIG9yIGVudGVyXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVQb3B1cCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX29uTWFwQ2xpY2soZTogTWFwTW91c2VFdmVudCkge1xuICAgICAgICBjb25zdCB0YXJnZXRFbGVtZW50ID0gZS5vcmlnaW5hbEV2ZW50LnRhcmdldDtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuX2VsZW1lbnQ7XG5cbiAgICAgICAgaWYgKHRoaXMuX3BvcHVwICYmICh0YXJnZXRFbGVtZW50ID09PSBlbGVtZW50IHx8IGVsZW1lbnQuY29udGFpbnMoKHRhcmdldEVsZW1lbnQ6IGFueSkpKSkge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVQb3B1cCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUge0BsaW5rIFBvcHVwfSBpbnN0YW5jZSB0aGF0IGlzIGJvdW5kIHRvIHRoZSB7QGxpbmsgTWFya2VyfS5cbiAgICAgKiBAcmV0dXJucyB7UG9wdXB9IHBvcHVwXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgbWFya2VyID0gbmV3IG1hcGJveGdsLk1hcmtlcigpXG4gICAgICogIC5zZXRMbmdMYXQoWzAsIDBdKVxuICAgICAqICAuc2V0UG9wdXAobmV3IG1hcGJveGdsLlBvcHVwKCkuc2V0SFRNTChcIjxoMT5IZWxsbyBXb3JsZCE8L2gxPlwiKSlcbiAgICAgKiAgLmFkZFRvKG1hcCk7XG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhtYXJrZXIuZ2V0UG9wdXAoKSk7IC8vIHJldHVybiB0aGUgcG9wdXAgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBnZXRQb3B1cCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BvcHVwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW5zIG9yIGNsb3NlcyB0aGUge0BsaW5rIFBvcHVwfSBpbnN0YW5jZSB0aGF0IGlzIGJvdW5kIHRvIHRoZSB7QGxpbmsgTWFya2VyfSwgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSB7QGxpbmsgUG9wdXB9LlxuICAgICAqIEByZXR1cm5zIHtNYXJrZXJ9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIG1hcmtlciA9IG5ldyBtYXBib3hnbC5NYXJrZXIoKVxuICAgICAqICAuc2V0TG5nTGF0KFswLCAwXSlcbiAgICAgKiAgLnNldFBvcHVwKG5ldyBtYXBib3hnbC5Qb3B1cCgpLnNldEhUTUwoXCI8aDE+SGVsbG8gV29ybGQhPC9oMT5cIikpXG4gICAgICogIC5hZGRUbyhtYXApO1xuICAgICAqXG4gICAgICogbWFya2VyLnRvZ2dsZVBvcHVwKCk7IC8vIHRvZ2dsZSBwb3B1cCBvcGVuIG9yIGNsb3NlZFxuICAgICAqL1xuICAgIHRvZ2dsZVBvcHVwKCkge1xuICAgICAgICBjb25zdCBwb3B1cCA9IHRoaXMuX3BvcHVwO1xuXG4gICAgICAgIGlmICghcG9wdXApIHJldHVybiB0aGlzO1xuICAgICAgICBlbHNlIGlmIChwb3B1cC5pc09wZW4oKSkgcG9wdXAucmVtb3ZlKCk7XG4gICAgICAgIGVsc2UgcG9wdXAuYWRkVG8odGhpcy5fbWFwKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgX3VwZGF0ZShlPzoge3R5cGU6ICdtb3ZlJyB8ICdtb3ZlZW5kJ30pIHtcbiAgICAgICAgaWYgKCF0aGlzLl9tYXApIHJldHVybjtcblxuICAgICAgICBpZiAodGhpcy5fbWFwLnRyYW5zZm9ybS5yZW5kZXJXb3JsZENvcGllcykge1xuICAgICAgICAgICAgdGhpcy5fbG5nTGF0ID0gc21hcnRXcmFwKHRoaXMuX2xuZ0xhdCwgdGhpcy5fcG9zLCB0aGlzLl9tYXAudHJhbnNmb3JtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3BvcyA9IHRoaXMuX21hcC5wcm9qZWN0KHRoaXMuX2xuZ0xhdCkuX2FkZCh0aGlzLl9vZmZzZXQpO1xuXG4gICAgICAgIGxldCByb3RhdGlvbiA9IFwiXCI7XG4gICAgICAgIGlmICh0aGlzLl9yb3RhdGlvbkFsaWdubWVudCA9PT0gXCJ2aWV3cG9ydFwiIHx8IHRoaXMuX3JvdGF0aW9uQWxpZ25tZW50ID09PSBcImF1dG9cIikge1xuICAgICAgICAgICAgcm90YXRpb24gPSBgcm90YXRlWigke3RoaXMuX3JvdGF0aW9ufWRlZylgO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3JvdGF0aW9uQWxpZ25tZW50ID09PSBcIm1hcFwiKSB7XG4gICAgICAgICAgICByb3RhdGlvbiA9IGByb3RhdGVaKCR7dGhpcy5fcm90YXRpb24gLSB0aGlzLl9tYXAuZ2V0QmVhcmluZygpfWRlZylgO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHBpdGNoID0gXCJcIjtcbiAgICAgICAgaWYgKHRoaXMuX3BpdGNoQWxpZ25tZW50ID09PSBcInZpZXdwb3J0XCIgfHwgdGhpcy5fcGl0Y2hBbGlnbm1lbnQgPT09IFwiYXV0b1wiKSB7XG4gICAgICAgICAgICBwaXRjaCA9IFwicm90YXRlWCgwZGVnKVwiO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3BpdGNoQWxpZ25tZW50ID09PSBcIm1hcFwiKSB7XG4gICAgICAgICAgICBwaXRjaCA9IGByb3RhdGVYKCR7dGhpcy5fbWFwLmdldFBpdGNoKCl9ZGVnKWA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBiZWNhdXNlIHJvdW5kaW5nIHRoZSBjb29yZGluYXRlcyBhdCBldmVyeSBgbW92ZWAgZXZlbnQgY2F1c2VzIHN0dXR0ZXJlZCB6b29taW5nXG4gICAgICAgIC8vIHdlIG9ubHkgcm91bmQgdGhlbSB3aGVuIF91cGRhdGUgaXMgY2FsbGVkIHdpdGggYG1vdmVlbmRgIG9yIHdoZW4gaXRzIGNhbGxlZCB3aXRoXG4gICAgICAgIC8vIG5vIGFyZ3VtZW50cyAod2hlbiB0aGUgTWFya2VyIGlzIGluaXRpYWxpemVkIG9yIE1hcmtlciNzZXRMbmdMYXQgaXMgaW52b2tlZCkuXG4gICAgICAgIGlmICghZSB8fCBlLnR5cGUgPT09IFwibW92ZWVuZFwiKSB7XG4gICAgICAgICAgICB0aGlzLl9wb3MgPSB0aGlzLl9wb3Mucm91bmQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIERPTS5zZXRUcmFuc2Zvcm0odGhpcy5fZWxlbWVudCwgYCR7YW5jaG9yVHJhbnNsYXRlW3RoaXMuX2FuY2hvcl19IHRyYW5zbGF0ZSgke3RoaXMuX3Bvcy54fXB4LCAke3RoaXMuX3Bvcy55fXB4KSAke3BpdGNofSAke3JvdGF0aW9ufWApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgbWFya2VyJ3Mgb2Zmc2V0LlxuICAgICAqIEByZXR1cm5zIHtQb2ludH0gVGhlIG1hcmtlcidzIHNjcmVlbiBjb29yZGluYXRlcyBpbiBwaXhlbHMuXG4gICAgICovXG4gICAgZ2V0T2Zmc2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb2Zmc2V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG9mZnNldCBvZiB0aGUgbWFya2VyXG4gICAgICogQHBhcmFtIHtQb2ludExpa2V9IG9mZnNldCBUaGUgb2Zmc2V0IGluIHBpeGVscyBhcyBhIHtAbGluayBQb2ludExpa2V9IG9iamVjdCB0byBhcHBseSByZWxhdGl2ZSB0byB0aGUgZWxlbWVudCdzIGNlbnRlci4gTmVnYXRpdmVzIGluZGljYXRlIGxlZnQgYW5kIHVwLlxuICAgICAqIEByZXR1cm5zIHtNYXJrZXJ9IGB0aGlzYFxuICAgICAqL1xuICAgIHNldE9mZnNldChvZmZzZXQ6IFBvaW50TGlrZSkge1xuICAgICAgICB0aGlzLl9vZmZzZXQgPSBQb2ludC5jb252ZXJ0KG9mZnNldCk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBfb25Nb3ZlKGU6IE1hcE1vdXNlRXZlbnQgfCBNYXBUb3VjaEV2ZW50KSB7XG4gICAgICAgIHRoaXMuX3BvcyA9IGUucG9pbnQuc3ViKHRoaXMuX3Bvc2l0aW9uRGVsdGEpO1xuICAgICAgICB0aGlzLl9sbmdMYXQgPSB0aGlzLl9tYXAudW5wcm9qZWN0KHRoaXMuX3Bvcyk7XG4gICAgICAgIHRoaXMuc2V0TG5nTGF0KHRoaXMuX2xuZ0xhdCk7XG4gICAgICAgIC8vIHN1cHByZXNzIGNsaWNrIGV2ZW50IHNvIHRoYXQgcG9wdXBzIGRvbid0IHRvZ2dsZSBvbiBkcmFnXG4gICAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcblxuICAgICAgICAvLyBtYWtlIHN1cmUgZHJhZ3N0YXJ0IG9ubHkgZmlyZXMgb24gdGhlIGZpcnN0IG1vdmUgZXZlbnQgYWZ0ZXIgbW91c2Vkb3duLlxuICAgICAgICAvLyB0aGlzIGNhbid0IGJlIG9uIG1vdXNlZG93biBiZWNhdXNlIHRoYXQgZXZlbnQgZG9lc24ndCBuZWNlc3NhcmlseVxuICAgICAgICAvLyBpbXBseSB0aGF0IGEgZHJhZyBpcyBhYm91dCB0byBoYXBwZW4uXG4gICAgICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gJ3BlbmRpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdhY3RpdmUnO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEZpcmVkIHdoZW4gZHJhZ2dpbmcgc3RhcnRzXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogQGV2ZW50IGRyYWdzdGFydFxuICAgICAgICAgICAgICogQG1lbWJlcm9mIE1hcmtlclxuICAgICAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAgICAgICAgICogQHByb3BlcnR5IHtNYXJrZXJ9IG1hcmtlciBvYmplY3QgdGhhdCBpcyBiZWluZyBkcmFnZ2VkXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RyYWdzdGFydCcpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlZCB3aGlsZSBkcmFnZ2luZ1xuICAgICAgICAgKlxuICAgICAgICAgKiBAZXZlbnQgZHJhZ1xuICAgICAgICAgKiBAbWVtYmVyb2YgTWFya2VyXG4gICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAgICAgKiBAcHJvcGVydHkge01hcmtlcn0gbWFya2VyIG9iamVjdCB0aGF0IGlzIGJlaW5nIGRyYWdnZWRcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RyYWcnKSk7XG4gICAgfVxuXG4gICAgX29uVXAoKSB7XG4gICAgICAgIC8vIHJldmVydCB0byBub3JtYWwgcG9pbnRlciBldmVudCBoYW5kbGluZ1xuICAgICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnYXV0byc7XG4gICAgICAgIHRoaXMuX3Bvc2l0aW9uRGVsdGEgPSBudWxsO1xuICAgICAgICB0aGlzLl9tYXAub2ZmKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdmUpO1xuICAgICAgICB0aGlzLl9tYXAub2ZmKCd0b3VjaG1vdmUnLCB0aGlzLl9vbk1vdmUpO1xuXG4gICAgICAgIC8vIG9ubHkgZmlyZSBkcmFnZW5kIGlmIGl0IHdhcyBwcmVjZWRlZCBieSBhdCBsZWFzdCBvbmUgZHJhZyBldmVudFxuICAgICAgICBpZiAodGhpcy5fc3RhdGUgPT09ICdhY3RpdmUnKSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICogRmlyZWQgd2hlbiB0aGUgbWFya2VyIGlzIGZpbmlzaGVkIGJlaW5nIGRyYWdnZWRcbiAgICAgICAgICAgICpcbiAgICAgICAgICAgICogQGV2ZW50IGRyYWdlbmRcbiAgICAgICAgICAgICogQG1lbWJlcm9mIE1hcmtlclxuICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICogQHR5cGUge09iamVjdH1cbiAgICAgICAgICAgICogQHByb3BlcnR5IHtNYXJrZXJ9IG1hcmtlciBvYmplY3QgdGhhdCB3YXMgZHJhZ2dlZFxuICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RyYWdlbmQnKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zdGF0ZSA9ICdpbmFjdGl2ZSc7XG4gICAgfVxuXG4gICAgX2FkZERyYWdIYW5kbGVyKGU6IE1hcE1vdXNlRXZlbnQgfCBNYXBUb3VjaEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLl9lbGVtZW50LmNvbnRhaW5zKChlLm9yaWdpbmFsRXZlbnQudGFyZ2V0OiBhbnkpKSkge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUgcGl4ZWwgZGlzdGFuY2UgYmV0d2VlbiB0aGUgY2xpY2sgcG9pbnRcbiAgICAgICAgICAgIC8vIGFuZCB0aGUgbWFya2VyIHBvc2l0aW9uLCB3aXRoIHRoZSBvZmZzZXQgYWNjb3VudGVkIGZvci4gVGhlbiB3ZVxuICAgICAgICAgICAgLy8gY2FuIHN1YnRyYWN0IHRoaXMgZGlzdGFuY2UgZnJvbSB0aGUgbW91c2Vtb3ZlIGV2ZW50J3MgcG9zaXRpb25cbiAgICAgICAgICAgIC8vIHRvIGNhbGN1bGF0ZSB0aGUgbmV3IG1hcmtlciBwb3NpdGlvbi5cbiAgICAgICAgICAgIC8vIElmIHdlIGRvbid0IGRvIHRoaXMsIHRoZSBtYXJrZXIgJ2p1bXBzJyB0byB0aGUgY2xpY2sgcG9zaXRpb25cbiAgICAgICAgICAgIC8vIGNyZWF0aW5nIGEgamFycmluZyBVWCBlZmZlY3QuXG4gICAgICAgICAgICB0aGlzLl9wb3NpdGlvbkRlbHRhID0gZS5wb2ludC5zdWIodGhpcy5fcG9zKS5hZGQodGhpcy5fb2Zmc2V0KTtcblxuICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAncGVuZGluZyc7XG4gICAgICAgICAgICB0aGlzLl9tYXAub24oJ21vdXNlbW92ZScsIHRoaXMuX29uTW92ZSk7XG4gICAgICAgICAgICB0aGlzLl9tYXAub24oJ3RvdWNobW92ZScsIHRoaXMuX29uTW92ZSk7XG4gICAgICAgICAgICB0aGlzLl9tYXAub25jZSgnbW91c2V1cCcsIHRoaXMuX29uVXApO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9uY2UoJ3RvdWNoZW5kJywgdGhpcy5fb25VcCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBgZHJhZ2dhYmxlYCBwcm9wZXJ0eSBhbmQgZnVuY3Rpb25hbGl0eSBvZiB0aGUgbWFya2VyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbc2hvdWxkQmVEcmFnZ2FibGU9ZmFsc2VdIFR1cm5zIGRyYWcgZnVuY3Rpb25hbGl0eSBvbi9vZmZcbiAgICAgKiBAcmV0dXJucyB7TWFya2VyfSBgdGhpc2BcbiAgICAgKi9cbiAgICBzZXREcmFnZ2FibGUoc2hvdWxkQmVEcmFnZ2FibGU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZHJhZ2dhYmxlID0gISFzaG91bGRCZURyYWdnYWJsZTsgLy8gY29udmVydCBwb3NzaWJsZSB1bmRlZmluZWQgdmFsdWUgdG8gZmFsc2VcblxuICAgICAgICAvLyBoYW5kbGUgY2FzZSB3aGVyZSBtYXAgbWF5IG5vdCBleGlzdCB5ZXRcbiAgICAgICAgLy8gZS5nLiB3aGVuIHNldERyYWdnYWJsZSBpcyBjYWxsZWQgYmVmb3JlIGFkZFRvXG4gICAgICAgIGlmICh0aGlzLl9tYXApIHtcbiAgICAgICAgICAgIGlmIChzaG91bGRCZURyYWdnYWJsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hcC5vbignbW91c2Vkb3duJywgdGhpcy5fYWRkRHJhZ0hhbmRsZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21hcC5vbigndG91Y2hzdGFydCcsIHRoaXMuX2FkZERyYWdIYW5kbGVyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFwLm9mZignbW91c2Vkb3duJywgdGhpcy5fYWRkRHJhZ0hhbmRsZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ3RvdWNoc3RhcnQnLCB0aGlzLl9hZGREcmFnSGFuZGxlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIG1hcmtlciBjYW4gYmUgZHJhZ2dlZFxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBtYXJrZXIgaXMgZHJhZ2dhYmxlLlxuICAgICAqL1xuICAgIGlzRHJhZ2dhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZHJhZ2dhYmxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGByb3RhdGlvbmAgcHJvcGVydHkgb2YgdGhlIG1hcmtlci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3JvdGF0aW9uPTBdIFRoZSByb3RhdGlvbiBhbmdsZSBvZiB0aGUgbWFya2VyIChjbG9ja3dpc2UsIGluIGRlZ3JlZXMpLCByZWxhdGl2ZSB0byBpdHMgcmVzcGVjdGl2ZSB7QGxpbmsgTWFya2VyI3JvdGF0aW9uQWxpZ25tZW50fSBzZXR0aW5nLlxuICAgICAqIEByZXR1cm5zIHtNYXJrZXJ9IGB0aGlzYFxuICAgICAqL1xuICAgIHNldFJvdGF0aW9uKHJvdGF0aW9uOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fcm90YXRpb24gPSByb3RhdGlvbiB8fCAwO1xuICAgICAgICB0aGlzLl91cGRhdGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCByb3RhdGlvbiBhbmdsZSBvZiB0aGUgbWFya2VyIChpbiBkZWdyZWVzKS5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgY3VycmVudCByb3RhdGlvbiBhbmdsZSBvZiB0aGUgbWFya2VyLlxuICAgICAqL1xuICAgIGdldFJvdGF0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm90YXRpb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYHJvdGF0aW9uQWxpZ25tZW50YCBwcm9wZXJ0eSBvZiB0aGUgbWFya2VyLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbYWxpZ25tZW50PSdhdXRvJ10gU2V0cyB0aGUgYHJvdGF0aW9uQWxpZ25tZW50YCBwcm9wZXJ0eSBvZiB0aGUgbWFya2VyLlxuICAgICAqIEByZXR1cm5zIHtNYXJrZXJ9IGB0aGlzYFxuICAgICAqL1xuICAgIHNldFJvdGF0aW9uQWxpZ25tZW50KGFsaWdubWVudDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX3JvdGF0aW9uQWxpZ25tZW50ID0gYWxpZ25tZW50IHx8ICdhdXRvJztcbiAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgYHJvdGF0aW9uQWxpZ25tZW50YCBwcm9wZXJ0eSBvZiB0aGUgbWFya2VyLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjdXJyZW50IHJvdGF0aW9uYWwgYWxpZ25tZW50IG9mIHRoZSBtYXJrZXIuXG4gICAgICovXG4gICAgZ2V0Um90YXRpb25BbGlnbm1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3RhdGlvbkFsaWdubWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBgcGl0Y2hBbGlnbm1lbnRgIHByb3BlcnR5IG9mIHRoZSBtYXJrZXIuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFthbGlnbm1lbnRdIFNldHMgdGhlIGBwaXRjaEFsaWdubWVudGAgcHJvcGVydHkgb2YgdGhlIG1hcmtlci4gSWYgYWxpZ25tZW50IGlzICdhdXRvJywgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IG1hdGNoIGByb3RhdGlvbkFsaWdubWVudGAuXG4gICAgICogQHJldHVybnMge01hcmtlcn0gYHRoaXNgXG4gICAgICovXG4gICAgc2V0UGl0Y2hBbGlnbm1lbnQoYWxpZ25tZW50OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fcGl0Y2hBbGlnbm1lbnQgPSBhbGlnbm1lbnQgJiYgYWxpZ25tZW50ICE9PSAnYXV0bycgPyBhbGlnbm1lbnQgOiB0aGlzLl9yb3RhdGlvbkFsaWdubWVudDtcbiAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgYHBpdGNoQWxpZ25tZW50YCBwcm9wZXJ0eSBvZiB0aGUgbWFya2VyLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjdXJyZW50IHBpdGNoIGFsaWdubWVudCBvZiB0aGUgbWFya2VyIGluIGRlZ3JlZXMuXG4gICAgICovXG4gICAgZ2V0UGl0Y2hBbGlnbm1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9waXRjaEFsaWdubWVudDtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge0V2ZW50LCBFdmVudGVkfSBmcm9tICcuLi8uLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IERPTSBmcm9tICcuLi8uLi91dGlsL2RvbSc7XG5pbXBvcnQgd2luZG93IGZyb20gJy4uLy4uL3V0aWwvd2luZG93JztcbmltcG9ydCB7ZXh0ZW5kLCBiaW5kQWxsLCB3YXJuT25jZX0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBMbmdMYXQgZnJvbSAnLi4vLi4vZ2VvL2xuZ19sYXQnO1xuaW1wb3J0IE1hcmtlciBmcm9tICcuLi9tYXJrZXInO1xuXG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vbWFwJztcbmltcG9ydCB0eXBlIHtBbmltYXRpb25PcHRpb25zLCBDYW1lcmFPcHRpb25zfSBmcm9tICcuLi9jYW1lcmEnO1xuXG50eXBlIE9wdGlvbnMgPSB7XG4gICAgcG9zaXRpb25PcHRpb25zPzogUG9zaXRpb25PcHRpb25zLFxuICAgIGZpdEJvdW5kc09wdGlvbnM/OiBBbmltYXRpb25PcHRpb25zICYgQ2FtZXJhT3B0aW9ucyxcbiAgICB0cmFja1VzZXJMb2NhdGlvbj86IGJvb2xlYW4sXG4gICAgc2hvd0FjY3VyYWN5Q2lyY2xlPzogYm9vbGVhbixcbiAgICBzaG93VXNlckxvY2F0aW9uPzogYm9vbGVhblxufTtcblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IE9wdGlvbnMgPSB7XG4gICAgcG9zaXRpb25PcHRpb25zOiB7XG4gICAgICAgIGVuYWJsZUhpZ2hBY2N1cmFjeTogZmFsc2UsXG4gICAgICAgIG1heGltdW1BZ2U6IDAsXG4gICAgICAgIHRpbWVvdXQ6IDYwMDAgLyogNiBzZWMgKi9cbiAgICB9LFxuICAgIGZpdEJvdW5kc09wdGlvbnM6IHtcbiAgICAgICAgbWF4Wm9vbTogMTVcbiAgICB9LFxuICAgIHRyYWNrVXNlckxvY2F0aW9uOiBmYWxzZSxcbiAgICBzaG93QWNjdXJhY3lDaXJjbGU6IHRydWUsXG4gICAgc2hvd1VzZXJMb2NhdGlvbjogdHJ1ZVxufTtcblxubGV0IHN1cHBvcnRzR2VvbG9jYXRpb247XG5cbmZ1bmN0aW9uIGNoZWNrR2VvbG9jYXRpb25TdXBwb3J0KGNhbGxiYWNrKSB7XG4gICAgaWYgKHN1cHBvcnRzR2VvbG9jYXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjYWxsYmFjayhzdXBwb3J0c0dlb2xvY2F0aW9uKTtcblxuICAgIH0gZWxzZSBpZiAod2luZG93Lm5hdmlnYXRvci5wZXJtaXNzaW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIG5hdmlnYXRvci5wZXJtaXNzaW9ucyBoYXMgaW5jb21wbGV0ZSBicm93c2VyIHN1cHBvcnRcbiAgICAgICAgLy8gaHR0cDovL2Nhbml1c2UuY29tLyNmZWF0PXBlcm1pc3Npb25zLWFwaVxuICAgICAgICAvLyBUZXN0IGZvciB0aGUgY2FzZSB3aGVyZSBhIGJyb3dzZXIgZGlzYWJsZXMgR2VvbG9jYXRpb24gYmVjYXVzZSBvZiBhblxuICAgICAgICAvLyBpbnNlY3VyZSBvcmlnaW5cbiAgICAgICAgd2luZG93Lm5hdmlnYXRvci5wZXJtaXNzaW9ucy5xdWVyeSh7bmFtZTogJ2dlb2xvY2F0aW9uJ30pLnRoZW4oKHApID0+IHtcbiAgICAgICAgICAgIHN1cHBvcnRzR2VvbG9jYXRpb24gPSBwLnN0YXRlICE9PSAnZGVuaWVkJztcbiAgICAgICAgICAgIGNhbGxiYWNrKHN1cHBvcnRzR2VvbG9jYXRpb24pO1xuICAgICAgICB9KTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIHN1cHBvcnRzR2VvbG9jYXRpb24gPSAhIXdpbmRvdy5uYXZpZ2F0b3IuZ2VvbG9jYXRpb247XG4gICAgICAgIGNhbGxiYWNrKHN1cHBvcnRzR2VvbG9jYXRpb24pO1xuICAgIH1cbn1cblxubGV0IG51bWJlck9mV2F0Y2hlcyA9IDA7XG5sZXQgbm9UaW1lb3V0ID0gZmFsc2U7XG5cbi8qKlxuICogQSBgR2VvbG9jYXRlQ29udHJvbGAgY29udHJvbCBwcm92aWRlcyBhIGJ1dHRvbiB0aGF0IHVzZXMgdGhlIGJyb3dzZXIncyBnZW9sb2NhdGlvblxuICogQVBJIHRvIGxvY2F0ZSB0aGUgdXNlciBvbiB0aGUgbWFwLlxuICpcbiAqIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCBnZW9sb2NhdGlvbixcbiAqIGFuZCBzb21lIHVzZXJzIG1heSBkaXNhYmxlIHRoZSBmZWF0dXJlLiBHZW9sb2NhdGlvbiBzdXBwb3J0IGZvciBtb2Rlcm5cbiAqIGJyb3dzZXJzIGluY2x1ZGluZyBDaHJvbWUgcmVxdWlyZXMgc2l0ZXMgdG8gYmUgc2VydmVkIG92ZXIgSFRUUFMuIElmXG4gKiBnZW9sb2NhdGlvbiBzdXBwb3J0IGlzIG5vdCBhdmFpbGFibGUsIHRoZSBHZW9sb2NhdGVDb250cm9sIHdpbGwgbm90XG4gKiBiZSB2aXNpYmxlLlxuICpcbiAqIFRoZSB6b29tIGxldmVsIGFwcGxpZWQgd2lsbCBkZXBlbmQgb24gdGhlIGFjY3VyYWN5IG9mIHRoZSBnZW9sb2NhdGlvbiBwcm92aWRlZCBieSB0aGUgZGV2aWNlLlxuICpcbiAqIFRoZSBHZW9sb2NhdGVDb250cm9sIGhhcyB0d28gbW9kZXMuIElmIGB0cmFja1VzZXJMb2NhdGlvbmAgaXMgYGZhbHNlYCAoZGVmYXVsdCkgdGhlIGNvbnRyb2wgYWN0cyBhcyBhIGJ1dHRvbiwgd2hpY2ggd2hlbiBwcmVzc2VkIHdpbGwgc2V0IHRoZSBtYXAncyBjYW1lcmEgdG8gdGFyZ2V0IHRoZSB1c2VyIGxvY2F0aW9uLiBJZiB0aGUgdXNlciBtb3ZlcywgdGhlIG1hcCB3b24ndCB1cGRhdGUuIFRoaXMgaXMgbW9zdCBzdWl0ZWQgZm9yIHRoZSBkZXNrdG9wLiBJZiBgdHJhY2tVc2VyTG9jYXRpb25gIGlzIGB0cnVlYCB0aGUgY29udHJvbCBhY3RzIGFzIGEgdG9nZ2xlIGJ1dHRvbiB0aGF0IHdoZW4gYWN0aXZlIHRoZSB1c2VyJ3MgbG9jYXRpb24gaXMgYWN0aXZlbHkgbW9uaXRvcmVkIGZvciBjaGFuZ2VzLiBJbiB0aGlzIG1vZGUgdGhlIEdlb2xvY2F0ZUNvbnRyb2wgaGFzIHRocmVlIGludGVyYWN0aW9uIHN0YXRlczpcbiAqICogYWN0aXZlIC0gdGhlIG1hcCdzIGNhbWVyYSBhdXRvbWF0aWNhbGx5IHVwZGF0ZXMgYXMgdGhlIHVzZXIncyBsb2NhdGlvbiBjaGFuZ2VzLCBrZWVwaW5nIHRoZSBsb2NhdGlvbiBkb3QgaW4gdGhlIGNlbnRlci4gSW5pdGlhbCBzdGF0ZSBhbmQgdXBvbiBjbGlja2luZyB0aGUgYEdlb2xvY2F0ZUNvbnRyb2xgIGJ1dHRvbi5cbiAqICogcGFzc2l2ZSAtIHRoZSB1c2VyJ3MgbG9jYXRpb24gZG90IGF1dG9tYXRpY2FsbHkgdXBkYXRlcywgYnV0IHRoZSBtYXAncyBjYW1lcmEgZG9lcyBub3QuIE9jY3VycyB1cG9uIHRoZSB1c2VyIGluaXRpYXRpbmcgYSBtYXAgbW92ZW1lbnQuXG4gKiAqIGRpc2FibGVkIC0gb2NjdXJzIGlmIEdlb2xvY2F0aW9uIGlzIG5vdCBhdmFpbGFibGUsIGRpc2FibGVkIG9yIGRlbmllZC5cbiAqXG4gKiBUaGVzZSBpbnRlcmFjdGlvbiBzdGF0ZXMgY2FuJ3QgYmUgY29udHJvbGxlZCBwcm9ncmFtbWF0aWNhbGx5LCByYXRoZXIgdGhleSBhcmUgc2V0IGJhc2VkIG9uIHVzZXIgaW50ZXJhY3Rpb25zLlxuICpcbiAqIEBpbXBsZW1lbnRzIHtJQ29udHJvbH1cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5wb3NpdGlvbk9wdGlvbnM9e2VuYWJsZUhpZ2hBY2N1cmFjeTogZmFsc2UsIHRpbWVvdXQ6IDYwMDB9XSBBIEdlb2xvY2F0aW9uIEFQSSBbUG9zaXRpb25PcHRpb25zXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvUG9zaXRpb25PcHRpb25zKSBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMuZml0Qm91bmRzT3B0aW9ucz17bWF4Wm9vbTogMTV9XSBBIFtgZml0Qm91bmRzYF0oI21hcCNmaXRib3VuZHMpIG9wdGlvbnMgb2JqZWN0IHRvIHVzZSB3aGVuIHRoZSBtYXAgaXMgcGFubmVkIGFuZCB6b29tZWQgdG8gdGhlIHVzZXIncyBsb2NhdGlvbi4gVGhlIGRlZmF1bHQgaXMgdG8gdXNlIGEgYG1heFpvb21gIG9mIDE1IHRvIGxpbWl0IGhvdyBmYXIgdGhlIG1hcCB3aWxsIHpvb20gaW4gZm9yIHZlcnkgYWNjdXJhdGUgbG9jYXRpb25zLlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uPWZhbHNlXSBJZiBgdHJ1ZWAgdGhlIEdlb2xvY2F0ZSBDb250cm9sIGJlY29tZXMgYSB0b2dnbGUgYnV0dG9uIGFuZCB3aGVuIGFjdGl2ZSB0aGUgbWFwIHdpbGwgcmVjZWl2ZSB1cGRhdGVzIHRvIHRoZSB1c2VyJ3MgbG9jYXRpb24gYXMgaXQgY2hhbmdlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5zaG93QWNjdXJhY3lDaXJjbGU9dHJ1ZV0gQnkgZGVmYXVsdCwgaWYgc2hvd1VzZXJMb2NhdGlvbiBpcyBgdHJ1ZWAsIGEgdHJhbnNwYXJlbnQgY2lyY2xlIHdpbGwgYmUgZHJhd24gYXJvdW5kIHRoZSB1c2VyIGxvY2F0aW9uIGluZGljYXRpbmcgdGhlIGFjY3VyYWN5ICg5NSUgY29uZmlkZW5jZSBsZXZlbCkgb2YgdGhlIHVzZXIncyBsb2NhdGlvbi4gU2V0IHRvIGBmYWxzZWAgdG8gZGlzYWJsZS4gQWx3YXlzIGRpc2FibGVkIHdoZW4gc2hvd1VzZXJMb2NhdGlvbiBpcyBgZmFsc2VgLlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnNob3dVc2VyTG9jYXRpb249dHJ1ZV0gQnkgZGVmYXVsdCBhIGRvdCB3aWxsIGJlIHNob3duIG9uIHRoZSBtYXAgYXQgdGhlIHVzZXIncyBsb2NhdGlvbi4gU2V0IHRvIGBmYWxzZWAgdG8gZGlzYWJsZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogbWFwLmFkZENvbnRyb2wobmV3IG1hcGJveGdsLkdlb2xvY2F0ZUNvbnRyb2woe1xuICogICAgIHBvc2l0aW9uT3B0aW9uczoge1xuICogICAgICAgICBlbmFibGVIaWdoQWNjdXJhY3k6IHRydWVcbiAqICAgICB9LFxuICogICAgIHRyYWNrVXNlckxvY2F0aW9uOiB0cnVlXG4gKiB9KSk7XG4gKiBAc2VlIFtMb2NhdGUgdGhlIHVzZXJdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvbG9jYXRlLXVzZXIvKVxuICovXG5jbGFzcyBHZW9sb2NhdGVDb250cm9sIGV4dGVuZHMgRXZlbnRlZCB7XG4gICAgX21hcDogTWFwO1xuICAgIG9wdGlvbnM6IE9wdGlvbnM7XG4gICAgX2NvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gICAgX2RvdEVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICAgIF9jaXJjbGVFbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgICBfZ2VvbG9jYXRlQnV0dG9uOiBIVE1MQnV0dG9uRWxlbWVudDtcbiAgICBfZ2VvbG9jYXRpb25XYXRjaElEOiBudW1iZXI7XG4gICAgX3RpbWVvdXRJZDogP1RpbWVvdXRJRDtcbiAgICBfd2F0Y2hTdGF0ZTogJ09GRicgfCAnQUNUSVZFX0xPQ0snIHwgJ1dBSVRJTkdfQUNUSVZFJyB8ICdBQ1RJVkVfRVJST1InIHwgJ0JBQ0tHUk9VTkQnIHwgJ0JBQ0tHUk9VTkRfRVJST1InO1xuICAgIF9sYXN0S25vd25Qb3NpdGlvbjogYW55O1xuICAgIF91c2VyTG9jYXRpb25Eb3RNYXJrZXI6IE1hcmtlcjtcbiAgICBfYWNjdXJhY3lDaXJjbGVNYXJrZXI6IE1hcmtlcjtcbiAgICBfYWNjdXJhY3k6IG51bWJlcjtcbiAgICBfc2V0dXA6IGJvb2xlYW47IC8vIHNldCB0byB0cnVlIG9uY2UgdGhlIGNvbnRyb2wgaGFzIGJlZW4gc2V0dXBcblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gZXh0ZW5kKHt9LCBkZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7XG5cbiAgICAgICAgYmluZEFsbChbXG4gICAgICAgICAgICAnX29uU3VjY2VzcycsXG4gICAgICAgICAgICAnX29uRXJyb3InLFxuICAgICAgICAgICAgJ19vblpvb20nLFxuICAgICAgICAgICAgJ19maW5pc2gnLFxuICAgICAgICAgICAgJ19zZXR1cFVJJyxcbiAgICAgICAgICAgICdfdXBkYXRlQ2FtZXJhJyxcbiAgICAgICAgICAgICdfdXBkYXRlTWFya2VyJ1xuICAgICAgICBdLCB0aGlzKTtcbiAgICB9XG5cbiAgICBvbkFkZChtYXA6IE1hcCkge1xuICAgICAgICB0aGlzLl9tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMuX2NvbnRhaW5lciA9IERPTS5jcmVhdGUoJ2RpdicsIGBtYXBib3hnbC1jdHJsIG1hcGJveGdsLWN0cmwtZ3JvdXBgKTtcbiAgICAgICAgY2hlY2tHZW9sb2NhdGlvblN1cHBvcnQodGhpcy5fc2V0dXBVSSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXI7XG4gICAgfVxuXG4gICAgb25SZW1vdmUoKSB7XG4gICAgICAgIC8vIGNsZWFyIHRoZSBnZW9sb2NhdGlvbiB3YXRjaCBpZiBleGlzdHNcbiAgICAgICAgaWYgKHRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB3aW5kb3cubmF2aWdhdG9yLmdlb2xvY2F0aW9uLmNsZWFyV2F0Y2godGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEKTtcbiAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCA9ICh1bmRlZmluZWQ6IGFueSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbGVhciB0aGUgbWFya2VycyBmcm9tIHRoZSBtYXBcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uICYmIHRoaXMuX3VzZXJMb2NhdGlvbkRvdE1hcmtlcikge1xuICAgICAgICAgICAgdGhpcy5fdXNlckxvY2F0aW9uRG90TWFya2VyLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd0FjY3VyYWN5Q2lyY2xlICYmIHRoaXMuX2FjY3VyYWN5Q2lyY2xlTWFya2VyKSB7XG4gICAgICAgICAgICB0aGlzLl9hY2N1cmFjeUNpcmNsZU1hcmtlci5yZW1vdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIERPTS5yZW1vdmUodGhpcy5fY29udGFpbmVyKTtcbiAgICAgICAgdGhpcy5fbWFwLm9mZignem9vbScsIHRoaXMuX29uWm9vbSk7XG4gICAgICAgIHRoaXMuX21hcCA9ICh1bmRlZmluZWQ6IGFueSk7XG4gICAgICAgIG51bWJlck9mV2F0Y2hlcyA9IDA7XG4gICAgICAgIG5vVGltZW91dCA9IGZhbHNlO1xuICAgIH1cblxuICAgIF9pc091dE9mTWFwTWF4Qm91bmRzKHBvc2l0aW9uOiBQb3NpdGlvbikge1xuICAgICAgICBjb25zdCBib3VuZHMgPSB0aGlzLl9tYXAuZ2V0TWF4Qm91bmRzKCk7XG4gICAgICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gcG9zaXRpb24uY29vcmRzO1xuXG4gICAgICAgIHJldHVybiBib3VuZHMgJiYgKFxuICAgICAgICAgICAgY29vcmRpbmF0ZXMubG9uZ2l0dWRlIDwgYm91bmRzLmdldFdlc3QoKSB8fFxuICAgICAgICAgICAgY29vcmRpbmF0ZXMubG9uZ2l0dWRlID4gYm91bmRzLmdldEVhc3QoKSB8fFxuICAgICAgICAgICAgY29vcmRpbmF0ZXMubGF0aXR1ZGUgPCBib3VuZHMuZ2V0U291dGgoKSB8fFxuICAgICAgICAgICAgY29vcmRpbmF0ZXMubGF0aXR1ZGUgPiBib3VuZHMuZ2V0Tm9ydGgoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIF9zZXRFcnJvclN0YXRlKCkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuX3dhdGNoU3RhdGUpIHtcbiAgICAgICAgY2FzZSAnV0FJVElOR19BQ1RJVkUnOlxuICAgICAgICAgICAgdGhpcy5fd2F0Y2hTdGF0ZSA9ICdBQ1RJVkVfRVJST1InO1xuICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZScpO1xuICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvcicpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0FDVElWRV9MT0NLJzpcbiAgICAgICAgICAgIHRoaXMuX3dhdGNoU3RhdGUgPSAnQUNUSVZFX0VSUk9SJztcbiAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUnKTtcbiAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUtZXJyb3InKTtcbiAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nJyk7XG4gICAgICAgICAgICAvLyB0dXJuIG1hcmtlciBncmV5XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnQkFDS0dST1VORCc6XG4gICAgICAgICAgICB0aGlzLl93YXRjaFN0YXRlID0gJ0JBQ0tHUk9VTkRfRVJST1InO1xuICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQnKTtcbiAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kLWVycm9yJyk7XG4gICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZycpO1xuICAgICAgICAgICAgLy8gdHVybiBtYXJrZXIgZ3JleVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0FDVElWRV9FUlJPUic6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGFzc2VydChmYWxzZSwgYFVuZXhwZWN0ZWQgd2F0Y2hTdGF0ZSAke3RoaXMuX3dhdGNoU3RhdGV9YCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfb25TdWNjZXNzKHBvc2l0aW9uOiBQb3NpdGlvbikge1xuICAgICAgICBpZiAoIXRoaXMuX21hcCkge1xuICAgICAgICAgICAgLy8gY29udHJvbCBoYXMgc2luY2UgYmVlbiByZW1vdmVkXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5faXNPdXRPZk1hcE1heEJvdW5kcyhwb3NpdGlvbikpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldEVycm9yU3RhdGUoKTtcblxuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnb3V0b2ZtYXhib3VuZHMnLCBwb3NpdGlvbikpO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlTWFya2VyKCk7XG4gICAgICAgICAgICB0aGlzLl9maW5pc2goKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbikge1xuICAgICAgICAgICAgLy8ga2VlcCBhIHJlY29yZCBvZiB0aGUgcG9zaXRpb24gc28gdGhhdCBpZiB0aGUgc3RhdGUgaXMgQkFDS0dST1VORCBhbmQgdGhlIHVzZXJcbiAgICAgICAgICAgIC8vIGNsaWNrcyB0aGUgYnV0dG9uLCB3ZSBjYW4gbW92ZSB0byBBQ1RJVkVfTE9DSyBpbW1lZGlhdGVseSB3aXRob3V0IHdhaXRpbmcgZm9yXG4gICAgICAgICAgICAvLyB3YXRjaFBvc2l0aW9uIHRvIHRyaWdnZXIgX29uU3VjY2Vzc1xuICAgICAgICAgICAgdGhpcy5fbGFzdEtub3duUG9zaXRpb24gPSBwb3NpdGlvbjtcblxuICAgICAgICAgICAgc3dpdGNoICh0aGlzLl93YXRjaFN0YXRlKSB7XG4gICAgICAgICAgICBjYXNlICdXQUlUSU5HX0FDVElWRSc6XG4gICAgICAgICAgICBjYXNlICdBQ1RJVkVfTE9DSyc6XG4gICAgICAgICAgICBjYXNlICdBQ1RJVkVfRVJST1InOlxuICAgICAgICAgICAgICAgIHRoaXMuX3dhdGNoU3RhdGUgPSAnQUNUSVZFX0xPQ0snO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvcicpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0JBQ0tHUk9VTkQnOlxuICAgICAgICAgICAgY2FzZSAnQkFDS0dST1VORF9FUlJPUic6XG4gICAgICAgICAgICAgICAgdGhpcy5fd2F0Y2hTdGF0ZSA9ICdCQUNLR1JPVU5EJztcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZycpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kLWVycm9yJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlLCBgVW5leHBlY3RlZCB3YXRjaFN0YXRlICR7dGhpcy5fd2F0Y2hTdGF0ZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHNob3dVc2VyTG9jYXRpb24gYW5kIHRoZSB3YXRjaCBzdGF0ZSBpc24ndCBvZmYgdGhlbiB1cGRhdGUgdGhlIG1hcmtlciBsb2NhdGlvblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24gJiYgdGhpcy5fd2F0Y2hTdGF0ZSAhPT0gJ09GRicpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZU1hcmtlcihwb3NpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiBpbiBub3JtYWwgbW9kZSAobm90IHdhdGNoIG1vZGUpLCBvciBpZiBpbiB3YXRjaCBtb2RlIGFuZCB0aGUgc3RhdGUgaXMgYWN0aXZlIHdhdGNoXG4gICAgICAgIC8vIHRoZW4gdXBkYXRlIHRoZSBjYW1lcmFcbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24gfHwgdGhpcy5fd2F0Y2hTdGF0ZSA9PT0gJ0FDVElWRV9MT0NLJykge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlQ2FtZXJhKHBvc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fZG90RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC11c2VyLWxvY2F0aW9uLWRvdC1zdGFsZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZ2VvbG9jYXRlJywgcG9zaXRpb24pKTtcbiAgICAgICAgdGhpcy5fZmluaXNoKCk7XG4gICAgfVxuXG4gICAgX3VwZGF0ZUNhbWVyYShwb3NpdGlvbjogUG9zaXRpb24pIHtcbiAgICAgICAgY29uc3QgY2VudGVyID0gbmV3IExuZ0xhdChwb3NpdGlvbi5jb29yZHMubG9uZ2l0dWRlLCBwb3NpdGlvbi5jb29yZHMubGF0aXR1ZGUpO1xuICAgICAgICBjb25zdCByYWRpdXMgPSBwb3NpdGlvbi5jb29yZHMuYWNjdXJhY3k7XG4gICAgICAgIGNvbnN0IGJlYXJpbmcgPSB0aGlzLl9tYXAuZ2V0QmVhcmluZygpO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gZXh0ZW5kKHtiZWFyaW5nfSwgdGhpcy5vcHRpb25zLmZpdEJvdW5kc09wdGlvbnMpO1xuXG4gICAgICAgIHRoaXMuX21hcC5maXRCb3VuZHMoY2VudGVyLnRvQm91bmRzKHJhZGl1cyksIG9wdGlvbnMsIHtcbiAgICAgICAgICAgIGdlb2xvY2F0ZVNvdXJjZTogdHJ1ZSAvLyB0YWcgdGhpcyBjYW1lcmEgY2hhbmdlIHNvIGl0IHdvbid0IGNhdXNlIHRoZSBjb250cm9sIHRvIGNoYW5nZSB0byBiYWNrZ3JvdW5kIHN0YXRlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF91cGRhdGVNYXJrZXIocG9zaXRpb246ID9Qb3NpdGlvbikge1xuICAgICAgICBpZiAocG9zaXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbnRlciA9IG5ldyBMbmdMYXQocG9zaXRpb24uY29vcmRzLmxvbmdpdHVkZSwgcG9zaXRpb24uY29vcmRzLmxhdGl0dWRlKTtcbiAgICAgICAgICAgIHRoaXMuX2FjY3VyYWN5Q2lyY2xlTWFya2VyLnNldExuZ0xhdChjZW50ZXIpLmFkZFRvKHRoaXMuX21hcCk7XG4gICAgICAgICAgICB0aGlzLl91c2VyTG9jYXRpb25Eb3RNYXJrZXIuc2V0TG5nTGF0KGNlbnRlcikuYWRkVG8odGhpcy5fbWFwKTtcbiAgICAgICAgICAgIHRoaXMuX2FjY3VyYWN5ID0gcG9zaXRpb24uY29vcmRzLmFjY3VyYWN5O1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uICYmIHRoaXMub3B0aW9ucy5zaG93QWNjdXJhY3lDaXJjbGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVDaXJjbGVSYWRpdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3VzZXJMb2NhdGlvbkRvdE1hcmtlci5yZW1vdmUoKTtcbiAgICAgICAgICAgIHRoaXMuX2FjY3VyYWN5Q2lyY2xlTWFya2VyLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3VwZGF0ZUNpcmNsZVJhZGl1cygpIHtcbiAgICAgICAgYXNzZXJ0KHRoaXMuX2NpcmNsZUVsZW1lbnQpO1xuICAgICAgICBjb25zdCB5ID0gdGhpcy5fbWFwLl9jb250YWluZXIuY2xpZW50SGVpZ2h0IC8gMjtcbiAgICAgICAgY29uc3QgYSA9IHRoaXMuX21hcC51bnByb2plY3QoWzAsIHldKTtcbiAgICAgICAgY29uc3QgYiA9IHRoaXMuX21hcC51bnByb2plY3QoWzEsIHldKTtcbiAgICAgICAgY29uc3QgbWV0ZXJzUGVyUGl4ZWwgPSBhLmRpc3RhbmNlVG8oYik7XG4gICAgICAgIGNvbnN0IGNpcmNsZURpYW1ldGVyID0gTWF0aC5jZWlsKDIuMCAqIHRoaXMuX2FjY3VyYWN5IC8gbWV0ZXJzUGVyUGl4ZWwpO1xuICAgICAgICB0aGlzLl9jaXJjbGVFbGVtZW50LnN0eWxlLndpZHRoID0gYCR7Y2lyY2xlRGlhbWV0ZXJ9cHhgO1xuICAgICAgICB0aGlzLl9jaXJjbGVFbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke2NpcmNsZURpYW1ldGVyfXB4YDtcbiAgICB9XG5cbiAgICBfb25ab29tKCkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24gJiYgdGhpcy5vcHRpb25zLnNob3dBY2N1cmFjeUNpcmNsZSkge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlQ2lyY2xlUmFkaXVzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfb25FcnJvcihlcnJvcjogUG9zaXRpb25FcnJvcikge1xuICAgICAgICBpZiAoIXRoaXMuX21hcCkge1xuICAgICAgICAgICAgLy8gY29udHJvbCBoYXMgc2luY2UgYmVlbiByZW1vdmVkXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uKSB7XG4gICAgICAgICAgICBpZiAoZXJyb3IuY29kZSA9PT0gMSkge1xuICAgICAgICAgICAgICAgIC8vIFBFUk1JU1NJT05fREVOSUVEXG4gICAgICAgICAgICAgICAgdGhpcy5fd2F0Y2hTdGF0ZSA9ICdPRkYnO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZScpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUtZXJyb3InKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZCcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kLWVycm9yJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCB0aXRsZSA9IHRoaXMuX21hcC5fZ2V0VUlTdHJpbmcoJ0dlb2xvY2F0ZUNvbnRyb2wuTG9jYXRpb25Ob3RBdmFpbGFibGUnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24udGl0bGUgPSB0aXRsZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgdGl0bGUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NsZWFyV2F0Y2goKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yLmNvZGUgPT09IDMgJiYgbm9UaW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgLy8gdGhpcyByZXByZXNlbnRzIGEgZm9yY2VkIGVycm9yIHN0YXRlXG4gICAgICAgICAgICAgICAgLy8gdGhpcyB3YXMgdHJpZ2dlcmVkIHRvIGZvcmNlIGltbWVkaWF0ZSBnZW9sb2NhdGlvbiB3aGVuIGEgd2F0Y2ggaXMgYWxyZWFkeSBwcmVzZW50XG4gICAgICAgICAgICAgICAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy84MjE0XG4gICAgICAgICAgICAgICAgLy8gYW5kIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9nZW9sb2NhdGlvbi1hcGkvI2V4YW1wbGUtNS1mb3JjaW5nLXRoZS11c2VyLWFnZW50LXRvLXJldHVybi1hLWZyZXNoLWNhY2hlZC1wb3NpdGlvblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0RXJyb3JTdGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX3dhdGNoU3RhdGUgIT09ICdPRkYnICYmIHRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9kb3RFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLXVzZXItbG9jYXRpb24tZG90LXN0YWxlJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdlcnJvcicsIGVycm9yKSk7XG5cbiAgICAgICAgdGhpcy5fZmluaXNoKCk7XG4gICAgfVxuXG4gICAgX2ZpbmlzaCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3RpbWVvdXRJZCkgeyBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dElkKTsgfVxuICAgICAgICB0aGlzLl90aW1lb3V0SWQgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgX3NldHVwVUkoc3VwcG9ydGVkOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIChlOiBNb3VzZUV2ZW50KSA9PiBlLnByZXZlbnREZWZhdWx0KCkpO1xuICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24gPSBET00uY3JlYXRlKCdidXR0b24nLCBgbWFwYm94Z2wtY3RybC1nZW9sb2NhdGVgLCB0aGlzLl9jb250YWluZXIpO1xuICAgICAgICBET00uY3JlYXRlKCdzcGFuJywgYG1hcGJveGdsLWN0cmwtaWNvbmAsIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbikuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsIHRydWUpO1xuICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24udHlwZSA9ICdidXR0b24nO1xuXG4gICAgICAgIGlmIChzdXBwb3J0ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB3YXJuT25jZSgnR2VvbG9jYXRpb24gc3VwcG9ydCBpcyBub3QgYXZhaWxhYmxlIHNvIHRoZSBHZW9sb2NhdGVDb250cm9sIHdpbGwgYmUgZGlzYWJsZWQuJyk7XG4gICAgICAgICAgICBjb25zdCB0aXRsZSA9IHRoaXMuX21hcC5fZ2V0VUlTdHJpbmcoJ0dlb2xvY2F0ZUNvbnRyb2wuTG9jYXRpb25Ob3RBdmFpbGFibGUnKTtcbiAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24udGl0bGUgPSB0aXRsZTtcbiAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCB0aXRsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB0aXRsZSA9IHRoaXMuX21hcC5fZ2V0VUlTdHJpbmcoJ0dlb2xvY2F0ZUNvbnRyb2wuRmluZE15TG9jYXRpb24nKTtcbiAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi50aXRsZSA9IHRpdGxlO1xuICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIHRpdGxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2FyaWEtcHJlc3NlZCcsICdmYWxzZScpO1xuICAgICAgICAgICAgdGhpcy5fd2F0Y2hTdGF0ZSA9ICdPRkYnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gd2hlbiBzaG93VXNlckxvY2F0aW9uIGlzIGVuYWJsZWQsIGtlZXAgdGhlIEdlb2xvY2F0ZSBidXR0b24gZGlzYWJsZWQgdW50aWwgdGhlIGRldmljZSBsb2NhdGlvbiBtYXJrZXIgaXMgc2V0dXAgb24gdGhlIG1hcFxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2RvdEVsZW1lbnQgPSBET00uY3JlYXRlKCdkaXYnLCAnbWFwYm94Z2wtdXNlci1sb2NhdGlvbi1kb3QnKTtcblxuICAgICAgICAgICAgdGhpcy5fdXNlckxvY2F0aW9uRG90TWFya2VyID0gbmV3IE1hcmtlcih0aGlzLl9kb3RFbGVtZW50KTtcblxuICAgICAgICAgICAgdGhpcy5fY2lyY2xlRWxlbWVudCA9IERPTS5jcmVhdGUoJ2RpdicsICdtYXBib3hnbC11c2VyLWxvY2F0aW9uLWFjY3VyYWN5LWNpcmNsZScpO1xuICAgICAgICAgICAgdGhpcy5fYWNjdXJhY3lDaXJjbGVNYXJrZXIgPSBuZXcgTWFya2VyKHtlbGVtZW50OiB0aGlzLl9jaXJjbGVFbGVtZW50LCBwaXRjaEFsaWdubWVudDogJ21hcCd9KTtcblxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbikgdGhpcy5fd2F0Y2hTdGF0ZSA9ICdPRkYnO1xuXG4gICAgICAgICAgICB0aGlzLl9tYXAub24oJ3pvb20nLCB0aGlzLl9vblpvb20pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlci5iaW5kKHRoaXMpKTtcblxuICAgICAgICB0aGlzLl9zZXR1cCA9IHRydWU7XG5cbiAgICAgICAgLy8gd2hlbiB0aGUgY2FtZXJhIGlzIGNoYW5nZWQgKGFuZCBpdCdzIG5vdCBhcyBhIHJlc3VsdCBvZiB0aGUgR2VvbG9jYXRpb24gQ29udHJvbCkgY2hhbmdlXG4gICAgICAgIC8vIHRoZSB3YXRjaCBtb2RlIHRvIGJhY2tncm91bmQgd2F0Y2gsIHNvIHRoYXQgdGhlIG1hcmtlciBpcyB1cGRhdGVkIGJ1dCBub3QgdGhlIGNhbWVyYS5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9uKCdtb3Zlc3RhcnQnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmcm9tUmVzaXplID0gZXZlbnQub3JpZ2luYWxFdmVudCAmJiBldmVudC5vcmlnaW5hbEV2ZW50LnR5cGUgPT09ICdyZXNpemUnO1xuICAgICAgICAgICAgICAgIGlmICghZXZlbnQuZ2VvbG9jYXRlU291cmNlICYmIHRoaXMuX3dhdGNoU3RhdGUgPT09ICdBQ1RJVkVfTE9DSycgJiYgIWZyb21SZXNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fd2F0Y2hTdGF0ZSA9ICdCQUNLR1JPVU5EJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQnKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZScpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3RyYWNrdXNlcmxvY2F0aW9uZW5kJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBQcm9ncmFtbWF0aWNhbGx5IHJlcXVlc3QgYW5kIG1vdmUgdGhlIG1hcCB0byB0aGUgdXNlcidzIGxvY2F0aW9uLlxuICAgICpcbiAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAgaWYgY2FsbGVkIGJlZm9yZSBjb250cm9sIHdhcyBhZGRlZCB0byBhIG1hcCwgb3RoZXJ3aXNlIHJldHVybnMgYHRydWVgLlxuICAgICogQGV4YW1wbGVcbiAgICAqIC8vIEluaXRpYWxpemUgdGhlIGdlb2xvY2F0ZSBjb250cm9sLlxuICAgICogdmFyIGdlb2xvY2F0ZSA9IG5ldyBtYXBib3hnbC5HZW9sb2NhdGVDb250cm9sKHtcbiAgICAqICBwb3NpdGlvbk9wdGlvbnM6IHtcbiAgICAqICAgIGVuYWJsZUhpZ2hBY2N1cmFjeTogdHJ1ZVxuICAgICogIH0sXG4gICAgKiAgdHJhY2tVc2VyTG9jYXRpb246IHRydWVcbiAgICAqIH0pO1xuICAgICogLy8gQWRkIHRoZSBjb250cm9sIHRvIHRoZSBtYXAuXG4gICAgKiBtYXAuYWRkQ29udHJvbChnZW9sb2NhdGUpO1xuICAgICogbWFwLm9uKCdsb2FkJywgZnVuY3Rpb24oKSB7XG4gICAgKiAgIGdlb2xvY2F0ZS50cmlnZ2VyKCk7XG4gICAgKiB9KTtcbiAgICAqL1xuICAgIHRyaWdnZXIoKSB7XG4gICAgICAgIGlmICghdGhpcy5fc2V0dXApIHtcbiAgICAgICAgICAgIHdhcm5PbmNlKCdHZW9sb2NhdGUgY29udHJvbCB0cmlnZ2VyZWQgYmVmb3JlIGFkZGVkIHRvIGEgbWFwJyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbikge1xuICAgICAgICAgICAgLy8gdXBkYXRlIHdhdGNoU3RhdGUgYW5kIGRvIGFueSBvdXRnb2luZyBzdGF0ZSBjbGVhbnVwXG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuX3dhdGNoU3RhdGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ09GRic6XG4gICAgICAgICAgICAgICAgLy8gdHVybiBvbiB0aGUgR2VvbG9jYXRlIENvbnRyb2xcbiAgICAgICAgICAgICAgICB0aGlzLl93YXRjaFN0YXRlID0gJ1dBSVRJTkdfQUNUSVZFJztcblxuICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3RyYWNrdXNlcmxvY2F0aW9uc3RhcnQnKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdXQUlUSU5HX0FDVElWRSc6XG4gICAgICAgICAgICBjYXNlICdBQ1RJVkVfTE9DSyc6XG4gICAgICAgICAgICBjYXNlICdBQ1RJVkVfRVJST1InOlxuICAgICAgICAgICAgY2FzZSAnQkFDS0dST1VORF9FUlJPUic6XG4gICAgICAgICAgICAgICAgLy8gdHVybiBvZmYgdGhlIEdlb2xvY2F0ZSBDb250cm9sXG4gICAgICAgICAgICAgICAgbnVtYmVyT2ZXYXRjaGVzLS07XG4gICAgICAgICAgICAgICAgbm9UaW1lb3V0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2F0Y2hTdGF0ZSA9ICdPRkYnO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZScpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUtZXJyb3InKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZCcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kLWVycm9yJyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCd0cmFja3VzZXJsb2NhdGlvbmVuZCcpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0JBQ0tHUk9VTkQnOlxuICAgICAgICAgICAgICAgIHRoaXMuX3dhdGNoU3RhdGUgPSAnQUNUSVZFX0xPQ0snO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kJyk7XG4gICAgICAgICAgICAgICAgLy8gc2V0IGNhbWVyYSB0byBsYXN0IGtub3duIGxvY2F0aW9uXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2xhc3RLbm93blBvc2l0aW9uKSB0aGlzLl91cGRhdGVDYW1lcmEodGhpcy5fbGFzdEtub3duUG9zaXRpb24pO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgndHJhY2t1c2VybG9jYXRpb25zdGFydCcpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlLCBgVW5leHBlY3RlZCB3YXRjaFN0YXRlICR7dGhpcy5fd2F0Y2hTdGF0ZX1gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaW5jb21pbmcgc3RhdGUgc2V0dXBcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5fd2F0Y2hTdGF0ZSkge1xuICAgICAgICAgICAgY2FzZSAnV0FJVElOR19BQ1RJVkUnOlxuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZScpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQUNUSVZFX0xPQ0snOlxuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0FDVElWRV9FUlJPUic6XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdCQUNLR1JPVU5EJzpcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZCcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQkFDS0dST1VORF9FUlJPUic6XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZC1lcnJvcicpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnT0ZGJzpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlLCBgVW5leHBlY3RlZCB3YXRjaFN0YXRlICR7dGhpcy5fd2F0Y2hTdGF0ZX1gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gbWFuYWdlIGdlb2xvY2F0aW9uLndhdGNoUG9zaXRpb24gLyBnZW9sb2NhdGlvbi5jbGVhcldhdGNoXG4gICAgICAgICAgICBpZiAodGhpcy5fd2F0Y2hTdGF0ZSA9PT0gJ09GRicgJiYgdGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBjbGVhciB3YXRjaFBvc2l0aW9uIGFzIHdlJ3ZlIGNoYW5nZWQgdG8gYW4gT0ZGIHN0YXRlXG4gICAgICAgICAgICAgICAgdGhpcy5fY2xlYXJXYXRjaCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIC8vIGVuYWJsZSB3YXRjaFBvc2l0aW9uIHNpbmNlIHdhdGNoU3RhdGUgaXMgbm90IE9GRiBhbmQgdGhlcmUgaXMgbm8gd2F0Y2hQb3NpdGlvbiBhbHJlYWR5IHJ1bm5pbmdcblxuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJywgJ3RydWUnKTtcblxuICAgICAgICAgICAgICAgIG51bWJlck9mV2F0Y2hlcysrO1xuICAgICAgICAgICAgICAgIGxldCBwb3NpdGlvbk9wdGlvbnM7XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlck9mV2F0Y2hlcyA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25PcHRpb25zID0ge21heGltdW1BZ2U6NjAwMDAwLCB0aW1lb3V0OjB9O1xuICAgICAgICAgICAgICAgICAgICBub1RpbWVvdXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uT3B0aW9ucyA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbk9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgIG5vVGltZW91dCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCA9IHdpbmRvdy5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24ud2F0Y2hQb3NpdGlvbihcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25TdWNjZXNzLCB0aGlzLl9vbkVycm9yLCBwb3NpdGlvbk9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2luZG93Lm5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oXG4gICAgICAgICAgICAgICAgdGhpcy5fb25TdWNjZXNzLCB0aGlzLl9vbkVycm9yLCB0aGlzLm9wdGlvbnMucG9zaXRpb25PcHRpb25zKTtcblxuICAgICAgICAgICAgLy8gVGhpcyB0aW1lb3V0IGVuc3VyZXMgdGhhdCB3ZSBzdGlsbCBjYWxsIGZpbmlzaCgpIGV2ZW4gaWZcbiAgICAgICAgICAgIC8vIHRoZSB1c2VyIGRlY2xpbmVzIHRvIHNoYXJlIHRoZWlyIGxvY2F0aW9uIGluIEZpcmVmb3hcbiAgICAgICAgICAgIHRoaXMuX3RpbWVvdXRJZCA9IHNldFRpbWVvdXQodGhpcy5fZmluaXNoLCAxMDAwMCAvKiAxMHNlYyAqLyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBfY2xlYXJXYXRjaCgpIHtcbiAgICAgICAgd2luZG93Lm5hdmlnYXRvci5nZW9sb2NhdGlvbi5jbGVhcldhdGNoKHRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCk7XG5cbiAgICAgICAgdGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEID0gKHVuZGVmaW5lZDogYW55KTtcbiAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmcnKTtcbiAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJywgJ2ZhbHNlJyk7XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVNYXJrZXIobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEdlb2xvY2F0ZUNvbnRyb2w7XG5cbi8qIEdlb2xvY2F0ZSBDb250cm9sIFdhdGNoIFN0YXRlc1xuICogVGhpcyBpcyB0aGUgcHJpdmF0ZSBzdGF0ZSBvZiB0aGUgY29udHJvbC5cbiAqXG4gKiBPRkZcbiAqICAgIG9mZi9pbmFjdGl2ZVxuICogV0FJVElOR19BQ1RJVkVcbiAqICAgIEdlb2xvY2F0ZSBDb250cm9sIHdhcyBjbGlja2VkIGJ1dCBzdGlsbCB3YWl0aW5nIGZvciBHZW9sb2NhdGlvbiBBUEkgcmVzcG9uc2Ugd2l0aCB1c2VyIGxvY2F0aW9uXG4gKiBBQ1RJVkVfTE9DS1xuICogICAgU2hvd2luZyB0aGUgdXNlciBsb2NhdGlvbiBhcyBhIGRvdCBBTkQgdHJhY2tpbmcgdGhlIGNhbWVyYSB0byBiZSBmaXhlZCB0byB0aGVpciBsb2NhdGlvbi4gSWYgdGhlaXIgbG9jYXRpb24gY2hhbmdlcyB0aGUgbWFwIG1vdmVzIHRvIGZvbGxvdy5cbiAqIEFDVElWRV9FUlJPUlxuICogICAgVGhlcmUgd2FzIGVuIGVycm9yIGZyb20gdGhlIEdlb2xvY2F0aW9uIEFQSSB3aGlsZSB0cnlpbmcgdG8gc2hvdyBhbmQgdHJhY2sgdGhlIHVzZXIgbG9jYXRpb24uXG4gKiBCQUNLR1JPVU5EXG4gKiAgICBTaG93aW5nIHRoZSB1c2VyIGxvY2F0aW9uIGFzIGEgZG90IGJ1dCB0aGUgY2FtZXJhIGRvZXNuJ3QgZm9sbG93IHRoZWlyIGxvY2F0aW9uIGFzIGl0IGNoYW5nZXMuXG4gKiBCQUNLR1JPVU5EX0VSUk9SXG4gKiAgICBUaGVyZSB3YXMgYW4gZXJyb3IgZnJvbSB0aGUgR2VvbG9jYXRpb24gQVBJIHdoaWxlIHRyeWluZyB0byBzaG93IChidXQgbm90IHRyYWNrKSB0aGUgdXNlciBsb2NhdGlvbi5cbiAqL1xuXG4vKipcbiAqIEZpcmVkIG9uIGVhY2ggR2VvbG9jYXRpb24gQVBJIHBvc2l0aW9uIHVwZGF0ZSB3aGljaCByZXR1cm5lZCBhcyBzdWNjZXNzLlxuICpcbiAqIEBldmVudCBnZW9sb2NhdGVcbiAqIEBtZW1iZXJvZiBHZW9sb2NhdGVDb250cm9sXG4gKiBAaW5zdGFuY2VcbiAqIEBwcm9wZXJ0eSB7UG9zaXRpb259IGRhdGEgVGhlIHJldHVybmVkIFtQb3NpdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1Bvc2l0aW9uKSBvYmplY3QgZnJvbSB0aGUgY2FsbGJhY2sgaW4gW0dlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbigpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvR2VvbG9jYXRpb24vZ2V0Q3VycmVudFBvc2l0aW9uKSBvciBbR2VvbG9jYXRpb24ud2F0Y2hQb3NpdGlvbigpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvR2VvbG9jYXRpb24vd2F0Y2hQb3NpdGlvbikuXG4gKiBAZXhhbXBsZVxuICogLy8gSW5pdGlhbGl6ZSB0aGUgZ2VvbG9jYXRlIGNvbnRyb2wuXG4gKiB2YXIgZ2VvbG9jYXRlID0gbmV3IG1hcGJveGdsLkdlb2xvY2F0ZUNvbnRyb2woe1xuICogICBwb3NpdGlvbk9wdGlvbnM6IHtcbiAqICAgICAgIGVuYWJsZUhpZ2hBY2N1cmFjeTogdHJ1ZVxuICogICB9LFxuICogICB0cmFja1VzZXJMb2NhdGlvbjogdHJ1ZVxuICogfSk7XG4gKiAvLyBBZGQgdGhlIGNvbnRyb2wgdG8gdGhlIG1hcC5cbiAqIG1hcC5hZGRDb250cm9sKGdlb2xvY2F0ZSk7XG4gKiAvLyBTZXQgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBmaXJlc1xuICogLy8gd2hlbiBhIGdlb2xvY2F0ZSBldmVudCBvY2N1cnMuXG4gKiBnZW9sb2NhdGUub24oJ2dlb2xvY2F0ZScsIGZ1bmN0aW9uKCkge1xuICogICBjb25zb2xlLmxvZygnQSBnZW9sb2NhdGUgZXZlbnQgaGFzIG9jY3VycmVkLicpXG4gKiB9KTtcbiAqXG4gKi9cblxuLyoqXG4gKiBGaXJlZCBvbiBlYWNoIEdlb2xvY2F0aW9uIEFQSSBwb3NpdGlvbiB1cGRhdGUgd2hpY2ggcmV0dXJuZWQgYXMgYW4gZXJyb3IuXG4gKlxuICogQGV2ZW50IGVycm9yXG4gKiBAbWVtYmVyb2YgR2VvbG9jYXRlQ29udHJvbFxuICogQGluc3RhbmNlXG4gKiBAcHJvcGVydHkge1Bvc2l0aW9uRXJyb3J9IGRhdGEgVGhlIHJldHVybmVkIFtQb3NpdGlvbkVycm9yXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvUG9zaXRpb25FcnJvcikgb2JqZWN0IGZyb20gdGhlIGNhbGxiYWNrIGluIFtHZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oKV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0dlb2xvY2F0aW9uL2dldEN1cnJlbnRQb3NpdGlvbikgb3IgW0dlb2xvY2F0aW9uLndhdGNoUG9zaXRpb24oKV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0dlb2xvY2F0aW9uL3dhdGNoUG9zaXRpb24pLlxuICogQGV4YW1wbGVcbiAqIC8vIEluaXRpYWxpemUgdGhlIGdlb2xvY2F0ZSBjb250cm9sLlxuICogdmFyIGdlb2xvY2F0ZSA9IG5ldyBtYXBib3hnbC5HZW9sb2NhdGVDb250cm9sKHtcbiAqICAgcG9zaXRpb25PcHRpb25zOiB7XG4gKiAgICAgICBlbmFibGVIaWdoQWNjdXJhY3k6IHRydWVcbiAqICAgfSxcbiAqICAgdHJhY2tVc2VyTG9jYXRpb246IHRydWVcbiAqIH0pO1xuICogLy8gQWRkIHRoZSBjb250cm9sIHRvIHRoZSBtYXAuXG4gKiBtYXAuYWRkQ29udHJvbChnZW9sb2NhdGUpO1xuICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgZmlyZXNcbiAqIC8vIHdoZW4gYW4gZXJyb3IgZXZlbnQgb2NjdXJzLlxuICogZ2VvbG9jYXRlLm9uKCdlcnJvcicsIGZ1bmN0aW9uKCkge1xuICogICBjb25zb2xlLmxvZygnQW4gZXJyb3IgZXZlbnQgaGFzIG9jY3VycmVkLicpXG4gKiB9KTtcbiAqXG4gKi9cblxuLyoqXG4gKiBGaXJlZCBvbiBlYWNoIEdlb2xvY2F0aW9uIEFQSSBwb3NpdGlvbiB1cGRhdGUgd2hpY2ggcmV0dXJuZWQgYXMgc3VjY2VzcyBidXQgdXNlciBwb3NpdGlvbiBpcyBvdXQgb2YgbWFwIG1heEJvdW5kcy5cbiAqXG4gKiBAZXZlbnQgb3V0b2ZtYXhib3VuZHNcbiAqIEBtZW1iZXJvZiBHZW9sb2NhdGVDb250cm9sXG4gKiBAaW5zdGFuY2VcbiAqIEBwcm9wZXJ0eSB7UG9zaXRpb259IGRhdGEgVGhlIHJldHVybmVkIFtQb3NpdGlvbl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1Bvc2l0aW9uKSBvYmplY3QgZnJvbSB0aGUgY2FsbGJhY2sgaW4gW0dlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbigpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvR2VvbG9jYXRpb24vZ2V0Q3VycmVudFBvc2l0aW9uKSBvciBbR2VvbG9jYXRpb24ud2F0Y2hQb3NpdGlvbigpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvR2VvbG9jYXRpb24vd2F0Y2hQb3NpdGlvbikuXG4gKiBAZXhhbXBsZVxuICogLy8gSW5pdGlhbGl6ZSB0aGUgZ2VvbG9jYXRlIGNvbnRyb2wuXG4gKiB2YXIgZ2VvbG9jYXRlID0gbmV3IG1hcGJveGdsLkdlb2xvY2F0ZUNvbnRyb2woe1xuICogICBwb3NpdGlvbk9wdGlvbnM6IHtcbiAqICAgICAgIGVuYWJsZUhpZ2hBY2N1cmFjeTogdHJ1ZVxuICogICB9LFxuICogICB0cmFja1VzZXJMb2NhdGlvbjogdHJ1ZVxuICogfSk7XG4gKiAvLyBBZGQgdGhlIGNvbnRyb2wgdG8gdGhlIG1hcC5cbiAqIG1hcC5hZGRDb250cm9sKGdlb2xvY2F0ZSk7XG4gKiAvLyBTZXQgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBmaXJlc1xuICogLy8gd2hlbiBhbiBvdXRvZm1heGJvdW5kcyBldmVudCBvY2N1cnMuXG4gKiBnZW9sb2NhdGUub24oJ291dG9mbWF4Ym91bmRzJywgZnVuY3Rpb24oKSB7XG4gKiAgIGNvbnNvbGUubG9nKCdBbiBvdXRvZm1heGJvdW5kcyBldmVudCBoYXMgb2NjdXJyZWQuJylcbiAqIH0pO1xuICpcbiAqL1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gdGhlIEdlb2xvY2F0ZSBDb250cm9sIGNoYW5nZXMgdG8gdGhlIGFjdGl2ZSBsb2NrIHN0YXRlLCB3aGljaCBoYXBwZW5zIGVpdGhlciB1cG9uIGZpcnN0IG9idGFpbmluZyBhIHN1Y2Nlc3NmdWwgR2VvbG9jYXRpb24gQVBJIHBvc2l0aW9uIGZvciB0aGUgdXNlciAoYSBnZW9sb2NhdGUgZXZlbnQgd2lsbCBmb2xsb3cpLCBvciB0aGUgdXNlciBjbGlja3MgdGhlIGdlb2xvY2F0ZSBidXR0b24gd2hlbiBpbiB0aGUgYmFja2dyb3VuZCBzdGF0ZSB3aGljaCB1c2VzIHRoZSBsYXN0IGtub3duIHBvc2l0aW9uIHRvIHJlY2VudGVyIHRoZSBtYXAgYW5kIGVudGVyIGFjdGl2ZSBsb2NrIHN0YXRlIChubyBnZW9sb2NhdGUgZXZlbnQgd2lsbCBmb2xsb3cgdW5sZXNzIHRoZSB1c2VycydzIGxvY2F0aW9uIGNoYW5nZXMpLlxuICpcbiAqIEBldmVudCB0cmFja3VzZXJsb2NhdGlvbnN0YXJ0XG4gKiBAbWVtYmVyb2YgR2VvbG9jYXRlQ29udHJvbFxuICogQGluc3RhbmNlXG4gKiBAZXhhbXBsZVxuICogLy8gSW5pdGlhbGl6ZSB0aGUgZ2VvbG9jYXRlIGNvbnRyb2wuXG4gKiB2YXIgZ2VvbG9jYXRlID0gbmV3IG1hcGJveGdsLkdlb2xvY2F0ZUNvbnRyb2woe1xuICogICBwb3NpdGlvbk9wdGlvbnM6IHtcbiAqICAgICAgIGVuYWJsZUhpZ2hBY2N1cmFjeTogdHJ1ZVxuICogICB9LFxuICogICB0cmFja1VzZXJMb2NhdGlvbjogdHJ1ZVxuICogfSk7XG4gKiAvLyBBZGQgdGhlIGNvbnRyb2wgdG8gdGhlIG1hcC5cbiAqIG1hcC5hZGRDb250cm9sKGdlb2xvY2F0ZSk7XG4gKiAvLyBTZXQgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBmaXJlc1xuICogLy8gd2hlbiBhIHRyYWNrdXNlcmxvY2F0aW9uc3RhcnQgZXZlbnQgb2NjdXJzLlxuICogZ2VvbG9jYXRlLm9uKCd0cmFja3VzZXJsb2NhdGlvbnN0YXJ0JywgZnVuY3Rpb24oKSB7XG4gKiAgIGNvbnNvbGUubG9nKCdBIHRyYWNrdXNlcmxvY2F0aW9uc3RhcnQgZXZlbnQgaGFzIG9jY3VycmVkLicpXG4gKiB9KTtcbiAqXG4gKi9cblxuLyoqXG4gKiBGaXJlZCB3aGVuIHRoZSBHZW9sb2NhdGUgQ29udHJvbCBjaGFuZ2VzIHRvIHRoZSBiYWNrZ3JvdW5kIHN0YXRlLCB3aGljaCBoYXBwZW5zIHdoZW4gYSB1c2VyIGNoYW5nZXMgdGhlIGNhbWVyYSBkdXJpbmcgYW4gYWN0aXZlIHBvc2l0aW9uIGxvY2suIFRoaXMgb25seSBhcHBsaWVzIHdoZW4gdHJhY2tVc2VyTG9jYXRpb24gaXMgdHJ1ZS4gSW4gdGhlIGJhY2tncm91bmQgc3RhdGUsIHRoZSBkb3Qgb24gdGhlIG1hcCB3aWxsIHVwZGF0ZSB3aXRoIGxvY2F0aW9uIHVwZGF0ZXMgYnV0IHRoZSBjYW1lcmEgd2lsbCBub3QuXG4gKlxuICogQGV2ZW50IHRyYWNrdXNlcmxvY2F0aW9uZW5kXG4gKiBAbWVtYmVyb2YgR2VvbG9jYXRlQ29udHJvbFxuICogQGluc3RhbmNlXG4gKiBAZXhhbXBsZVxuICogLy8gSW5pdGlhbGl6ZSB0aGUgZ2VvbG9jYXRlIGNvbnRyb2wuXG4gKiB2YXIgZ2VvbG9jYXRlID0gbmV3IG1hcGJveGdsLkdlb2xvY2F0ZUNvbnRyb2woe1xuICogICBwb3NpdGlvbk9wdGlvbnM6IHtcbiAqICAgICAgIGVuYWJsZUhpZ2hBY2N1cmFjeTogdHJ1ZVxuICogICB9LFxuICogICB0cmFja1VzZXJMb2NhdGlvbjogdHJ1ZVxuICogfSk7XG4gKiAvLyBBZGQgdGhlIGNvbnRyb2wgdG8gdGhlIG1hcC5cbiAqIG1hcC5hZGRDb250cm9sKGdlb2xvY2F0ZSk7XG4gKiAvLyBTZXQgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBmaXJlc1xuICogLy8gd2hlbiBhIHRyYWNrdXNlcmxvY2F0aW9uZW5kIGV2ZW50IG9jY3Vycy5cbiAqIGdlb2xvY2F0ZS5vbigndHJhY2t1c2VybG9jYXRpb25lbmQnLCBmdW5jdGlvbigpIHtcbiAqICAgY29uc29sZS5sb2coJ0EgdHJhY2t1c2VybG9jYXRpb25lbmQgZXZlbnQgaGFzIG9jY3VycmVkLicpXG4gKiB9KTtcbiAqXG4gKi9cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBET00gZnJvbSAnLi4vLi4vdXRpbC9kb20nO1xuaW1wb3J0IHtleHRlbmQsIGJpbmRBbGx9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5cbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi9tYXAnO1xuXG50eXBlIFVuaXQgPSAnaW1wZXJpYWwnIHwgJ21ldHJpYycgfCAnbmF1dGljYWwnO1xuXG50eXBlIE9wdGlvbnMgPSB7XG4gICAgbWF4V2lkdGg/OiBudW1iZXIsXG4gICAgdW5pdD86IFVuaXQ7XG59O1xuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogT3B0aW9ucyA9IHtcbiAgICBtYXhXaWR0aDogMTAwLFxuICAgIHVuaXQ6ICdtZXRyaWMnXG59O1xuXG4vKipcbiAqIEEgYFNjYWxlQ29udHJvbGAgY29udHJvbCBkaXNwbGF5cyB0aGUgcmF0aW8gb2YgYSBkaXN0YW5jZSBvbiB0aGUgbWFwIHRvIHRoZSBjb3JyZXNwb25kaW5nIGRpc3RhbmNlIG9uIHRoZSBncm91bmQuXG4gKlxuICogQGltcGxlbWVudHMge0lDb250cm9sfVxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1heFdpZHRoPScxMDAnXSBUaGUgbWF4aW11bSBsZW5ndGggb2YgdGhlIHNjYWxlIGNvbnRyb2wgaW4gcGl4ZWxzLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnVuaXQ9J21ldHJpYyddIFVuaXQgb2YgdGhlIGRpc3RhbmNlIChgJ2ltcGVyaWFsJ2AsIGAnbWV0cmljJ2Agb3IgYCduYXV0aWNhbCdgKS5cbiAqIEBleGFtcGxlXG4gKiB2YXIgc2NhbGUgPSBuZXcgbWFwYm94Z2wuU2NhbGVDb250cm9sKHtcbiAqICAgICBtYXhXaWR0aDogODAsXG4gKiAgICAgdW5pdDogJ2ltcGVyaWFsJ1xuICogfSk7XG4gKiBtYXAuYWRkQ29udHJvbChzY2FsZSk7XG4gKlxuICogc2NhbGUuc2V0VW5pdCgnbWV0cmljJyk7XG4gKi9cbmNsYXNzIFNjYWxlQ29udHJvbCB7XG4gICAgX21hcDogTWFwO1xuICAgIF9jb250YWluZXI6IEhUTUxFbGVtZW50O1xuICAgIG9wdGlvbnM6IE9wdGlvbnM7XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBPcHRpb25zKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IGV4dGVuZCh7fSwgZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICAgIGJpbmRBbGwoW1xuICAgICAgICAgICAgJ19vbk1vdmUnLFxuICAgICAgICAgICAgJ3NldFVuaXQnXG4gICAgICAgIF0sIHRoaXMpO1xuICAgIH1cblxuICAgIGdldERlZmF1bHRQb3NpdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICdib3R0b20tbGVmdCc7XG4gICAgfVxuXG4gICAgX29uTW92ZSgpIHtcbiAgICAgICAgdXBkYXRlU2NhbGUodGhpcy5fbWFwLCB0aGlzLl9jb250YWluZXIsIHRoaXMub3B0aW9ucyk7XG4gICAgfVxuXG4gICAgb25BZGQobWFwOiBNYXApIHtcbiAgICAgICAgdGhpcy5fbWFwID0gbWFwO1xuICAgICAgICB0aGlzLl9jb250YWluZXIgPSBET00uY3JlYXRlKCdkaXYnLCAnbWFwYm94Z2wtY3RybCBtYXBib3hnbC1jdHJsLXNjYWxlJywgbWFwLmdldENvbnRhaW5lcigpKTtcblxuICAgICAgICB0aGlzLl9tYXAub24oJ21vdmUnLCB0aGlzLl9vbk1vdmUpO1xuICAgICAgICB0aGlzLl9vbk1vdmUoKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fY29udGFpbmVyO1xuICAgIH1cblxuICAgIG9uUmVtb3ZlKCkge1xuICAgICAgICBET00ucmVtb3ZlKHRoaXMuX2NvbnRhaW5lcik7XG4gICAgICAgIHRoaXMuX21hcC5vZmYoJ21vdmUnLCB0aGlzLl9vbk1vdmUpO1xuICAgICAgICB0aGlzLl9tYXAgPSAodW5kZWZpbmVkOiBhbnkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgc2NhbGUncyB1bml0IG9mIHRoZSBkaXN0YW5jZVxuICAgICAqXG4gICAgICogQHBhcmFtIHVuaXQgVW5pdCBvZiB0aGUgZGlzdGFuY2UgKGAnaW1wZXJpYWwnYCwgYCdtZXRyaWMnYCBvciBgJ25hdXRpY2FsJ2ApLlxuICAgICAqL1xuICAgIHNldFVuaXQodW5pdDogVW5pdCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMudW5pdCA9IHVuaXQ7XG4gICAgICAgIHVwZGF0ZVNjYWxlKHRoaXMuX21hcCwgdGhpcy5fY29udGFpbmVyLCB0aGlzLm9wdGlvbnMpO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2NhbGVDb250cm9sO1xuXG5mdW5jdGlvbiB1cGRhdGVTY2FsZShtYXAsIGNvbnRhaW5lciwgb3B0aW9ucykge1xuICAgIC8vIEEgaG9yaXpvbnRhbCBzY2FsZSBpcyBpbWFnaW5lZCB0byBiZSBwcmVzZW50IGF0IGNlbnRlciBvZiB0aGUgbWFwXG4gICAgLy8gY29udGFpbmVyIHdpdGggbWF4aW11bSBsZW5ndGggKERlZmF1bHQpIGFzIDEwMHB4LlxuICAgIC8vIFVzaW5nIHNwaGVyaWNhbCBsYXcgb2YgY29zaW5lcyBhcHByb3hpbWF0aW9uLCB0aGUgcmVhbCBkaXN0YW5jZSBpc1xuICAgIC8vIGZvdW5kIGJldHdlZW4gdGhlIHR3byBjb29yZGluYXRlcy5cbiAgICBjb25zdCBtYXhXaWR0aCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5tYXhXaWR0aCB8fCAxMDA7XG5cbiAgICBjb25zdCB5ID0gbWFwLl9jb250YWluZXIuY2xpZW50SGVpZ2h0IC8gMjtcbiAgICBjb25zdCBsZWZ0ID0gbWFwLnVucHJvamVjdChbMCwgeV0pO1xuICAgIGNvbnN0IHJpZ2h0ID0gbWFwLnVucHJvamVjdChbbWF4V2lkdGgsIHldKTtcbiAgICBjb25zdCBtYXhNZXRlcnMgPSBsZWZ0LmRpc3RhbmNlVG8ocmlnaHQpO1xuICAgIC8vIFRoZSByZWFsIGRpc3RhbmNlIGNvcnJlc3BvbmRpbmcgdG8gMTAwcHggc2NhbGUgbGVuZ3RoIGlzIHJvdW5kZWQgb2ZmIHRvXG4gICAgLy8gbmVhciBwcmV0dHkgbnVtYmVyIGFuZCB0aGUgc2NhbGUgbGVuZ3RoIGZvciB0aGUgc2FtZSBpcyBmb3VuZCBvdXQuXG4gICAgLy8gRGVmYXVsdCB1bml0IG9mIHRoZSBzY2FsZSBpcyBiYXNlZCBvbiBVc2VyJ3MgbG9jYWxlLlxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMudW5pdCA9PT0gJ2ltcGVyaWFsJykge1xuICAgICAgICBjb25zdCBtYXhGZWV0ID0gMy4yODA4ICogbWF4TWV0ZXJzO1xuICAgICAgICBpZiAobWF4RmVldCA+IDUyODApIHtcbiAgICAgICAgICAgIGNvbnN0IG1heE1pbGVzID0gbWF4RmVldCAvIDUyODA7XG4gICAgICAgICAgICBzZXRTY2FsZShjb250YWluZXIsIG1heFdpZHRoLCBtYXhNaWxlcywgbWFwLl9nZXRVSVN0cmluZygnU2NhbGVDb250cm9sLk1pbGVzJykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0U2NhbGUoY29udGFpbmVyLCBtYXhXaWR0aCwgbWF4RmVldCwgbWFwLl9nZXRVSVN0cmluZygnU2NhbGVDb250cm9sLkZlZXQnKSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy51bml0ID09PSAnbmF1dGljYWwnKSB7XG4gICAgICAgIGNvbnN0IG1heE5hdXRpY2FscyA9IG1heE1ldGVycyAvIDE4NTI7XG4gICAgICAgIHNldFNjYWxlKGNvbnRhaW5lciwgbWF4V2lkdGgsIG1heE5hdXRpY2FscywgbWFwLl9nZXRVSVN0cmluZygnU2NhbGVDb250cm9sLk5hdXRpY2FsTWlsZXMnKSk7XG4gICAgfSBlbHNlIGlmIChtYXhNZXRlcnMgPj0gMTAwMCkge1xuICAgICAgICBzZXRTY2FsZShjb250YWluZXIsIG1heFdpZHRoLCBtYXhNZXRlcnMgLyAxMDAwLCBtYXAuX2dldFVJU3RyaW5nKCdTY2FsZUNvbnRyb2wuS2lsb21ldGVycycpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBzZXRTY2FsZShjb250YWluZXIsIG1heFdpZHRoLCBtYXhNZXRlcnMsIG1hcC5fZ2V0VUlTdHJpbmcoJ1NjYWxlQ29udHJvbC5NZXRlcnMnKSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBzZXRTY2FsZShjb250YWluZXIsIG1heFdpZHRoLCBtYXhEaXN0YW5jZSwgdW5pdCkge1xuICAgIGNvbnN0IGRpc3RhbmNlID0gZ2V0Um91bmROdW0obWF4RGlzdGFuY2UpO1xuICAgIGNvbnN0IHJhdGlvID0gZGlzdGFuY2UgLyBtYXhEaXN0YW5jZTtcbiAgICBjb250YWluZXIuc3R5bGUud2lkdGggPSBgJHttYXhXaWR0aCAqIHJhdGlvfXB4YDtcbiAgICBjb250YWluZXIuaW5uZXJIVE1MID0gYCR7ZGlzdGFuY2V9Jm5ic3A7JHt1bml0fWA7XG59XG5cbmZ1bmN0aW9uIGdldERlY2ltYWxSb3VuZE51bShkKSB7XG4gICAgY29uc3QgbXVsdGlwbGllciA9IE1hdGgucG93KDEwLCBNYXRoLmNlaWwoLU1hdGgubG9nKGQpIC8gTWF0aC5MTjEwKSk7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoZCAqIG11bHRpcGxpZXIpIC8gbXVsdGlwbGllcjtcbn1cblxuZnVuY3Rpb24gZ2V0Um91bmROdW0obnVtKSB7XG4gICAgY29uc3QgcG93MTAgPSBNYXRoLnBvdygxMCwgKGAke01hdGguZmxvb3IobnVtKX1gKS5sZW5ndGggLSAxKTtcbiAgICBsZXQgZCA9IG51bSAvIHBvdzEwO1xuXG4gICAgZCA9IGQgPj0gMTAgPyAxMCA6XG4gICAgICAgIGQgPj0gNSA/IDUgOlxuICAgICAgICBkID49IDMgPyAzIDpcbiAgICAgICAgZCA+PSAyID8gMiA6XG4gICAgICAgIGQgPj0gMSA/IDEgOiBnZXREZWNpbWFsUm91bmROdW0oZCk7XG5cbiAgICByZXR1cm4gcG93MTAgKiBkO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IERPTSBmcm9tICcuLi8uLi91dGlsL2RvbSc7XG5cbmltcG9ydCB7YmluZEFsbCwgd2Fybk9uY2V9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgd2luZG93IGZyb20gJy4uLy4uL3V0aWwvd2luZG93JztcblxuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL21hcCc7XG5cbnR5cGUgT3B0aW9ucyA9IHtcbiAgICBjb250YWluZXI/OiBIVE1MRWxlbWVudFxufTtcblxuLyoqXG4gKiBBIGBGdWxsc2NyZWVuQ29udHJvbGAgY29udHJvbCBjb250YWlucyBhIGJ1dHRvbiBmb3IgdG9nZ2xpbmcgdGhlIG1hcCBpbiBhbmQgb3V0IG9mIGZ1bGxzY3JlZW4gbW9kZS5cbiAqXG4gKiBAaW1wbGVtZW50cyB7SUNvbnRyb2x9XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBbb3B0aW9ucy5jb250YWluZXJdIGBjb250YWluZXJgIGlzIHRoZSBbY29tcGF0aWJsZSBET00gZWxlbWVudF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnQvcmVxdWVzdEZ1bGxTY3JlZW4jQ29tcGF0aWJsZV9lbGVtZW50cykgd2hpY2ggc2hvdWxkIGJlIG1hZGUgZnVsbCBzY3JlZW4uIEJ5IGRlZmF1bHQsIHRoZSBtYXAgY29udGFpbmVyIGVsZW1lbnQgd2lsbCBiZSBtYWRlIGZ1bGwgc2NyZWVuLlxuICpcbiAqIEBleGFtcGxlXG4gKiBtYXAuYWRkQ29udHJvbChuZXcgbWFwYm94Z2wuRnVsbHNjcmVlbkNvbnRyb2woe2NvbnRhaW5lcjogZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYm9keScpfSkpO1xuICogQHNlZSBbVmlldyBhIGZ1bGxzY3JlZW4gbWFwXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2Z1bGxzY3JlZW4vKVxuICovXG5cbmNsYXNzIEZ1bGxzY3JlZW5Db250cm9sIHtcbiAgICBfbWFwOiBNYXA7XG4gICAgX2NvbnRyb2xDb250YWluZXI6IEhUTUxFbGVtZW50O1xuICAgIF9mdWxsc2NyZWVuOiBib29sZWFuO1xuICAgIF9mdWxsc2NyZWVuY2hhbmdlOiBzdHJpbmc7XG4gICAgX2Z1bGxzY3JlZW5CdXR0b246IEhUTUxFbGVtZW50O1xuICAgIF9jb250YWluZXI6IEhUTUxFbGVtZW50O1xuXG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogT3B0aW9ucykge1xuICAgICAgICB0aGlzLl9mdWxsc2NyZWVuID0gZmFsc2U7XG4gICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuY29udGFpbmVyKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5jb250YWluZXIgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lcjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgd2Fybk9uY2UoJ0Z1bGwgc2NyZWVuIGNvbnRyb2wgXFwnY29udGFpbmVyXFwnIG11c3QgYmUgYSBET00gZWxlbWVudC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBiaW5kQWxsKFtcbiAgICAgICAgICAgICdfb25DbGlja0Z1bGxzY3JlZW4nLFxuICAgICAgICAgICAgJ19jaGFuZ2VJY29uJ1xuICAgICAgICBdLCB0aGlzKTtcbiAgICAgICAgaWYgKCdvbmZ1bGxzY3JlZW5jaGFuZ2UnIGluIHdpbmRvdy5kb2N1bWVudCkge1xuICAgICAgICAgICAgdGhpcy5fZnVsbHNjcmVlbmNoYW5nZSA9ICdmdWxsc2NyZWVuY2hhbmdlJztcbiAgICAgICAgfSBlbHNlIGlmICgnb25tb3pmdWxsc2NyZWVuY2hhbmdlJyBpbiB3aW5kb3cuZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2Z1bGxzY3JlZW5jaGFuZ2UgPSAnbW96ZnVsbHNjcmVlbmNoYW5nZSc7XG4gICAgICAgIH0gZWxzZSBpZiAoJ29ud2Via2l0ZnVsbHNjcmVlbmNoYW5nZScgaW4gd2luZG93LmRvY3VtZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9mdWxsc2NyZWVuY2hhbmdlID0gJ3dlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UnO1xuICAgICAgICB9IGVsc2UgaWYgKCdvbm1zZnVsbHNjcmVlbmNoYW5nZScgaW4gd2luZG93LmRvY3VtZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9mdWxsc2NyZWVuY2hhbmdlID0gJ01TRnVsbHNjcmVlbkNoYW5nZSc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkFkZChtYXA6IE1hcCkge1xuICAgICAgICB0aGlzLl9tYXAgPSBtYXA7XG4gICAgICAgIGlmICghdGhpcy5fY29udGFpbmVyKSB0aGlzLl9jb250YWluZXIgPSB0aGlzLl9tYXAuZ2V0Q29udGFpbmVyKCk7XG4gICAgICAgIHRoaXMuX2NvbnRyb2xDb250YWluZXIgPSBET00uY3JlYXRlKCdkaXYnLCBgbWFwYm94Z2wtY3RybCBtYXBib3hnbC1jdHJsLWdyb3VwYCk7XG4gICAgICAgIGlmICh0aGlzLl9jaGVja0Z1bGxzY3JlZW5TdXBwb3J0KCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldHVwVUkoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRyb2xDb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgIHdhcm5PbmNlKCdUaGlzIGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IGZ1bGxzY3JlZW4gbW9kZS4nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fY29udHJvbENvbnRhaW5lcjtcbiAgICB9XG5cbiAgICBvblJlbW92ZSgpIHtcbiAgICAgICAgRE9NLnJlbW92ZSh0aGlzLl9jb250cm9sQ29udGFpbmVyKTtcbiAgICAgICAgdGhpcy5fbWFwID0gKG51bGw6IGFueSk7XG4gICAgICAgIHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMuX2Z1bGxzY3JlZW5jaGFuZ2UsIHRoaXMuX2NoYW5nZUljb24pO1xuICAgIH1cblxuICAgIF9jaGVja0Z1bGxzY3JlZW5TdXBwb3J0KCkge1xuICAgICAgICByZXR1cm4gISEoXG4gICAgICAgICAgICB3aW5kb3cuZG9jdW1lbnQuZnVsbHNjcmVlbkVuYWJsZWQgfHxcbiAgICAgICAgICAgICh3aW5kb3cuZG9jdW1lbnQ6IGFueSkubW96RnVsbFNjcmVlbkVuYWJsZWQgfHxcbiAgICAgICAgICAgICh3aW5kb3cuZG9jdW1lbnQ6IGFueSkubXNGdWxsc2NyZWVuRW5hYmxlZCB8fFxuICAgICAgICAgICAgKHdpbmRvdy5kb2N1bWVudDogYW55KS53ZWJraXRGdWxsc2NyZWVuRW5hYmxlZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIF9zZXR1cFVJKCkge1xuICAgICAgICBjb25zdCBidXR0b24gPSB0aGlzLl9mdWxsc2NyZWVuQnV0dG9uID0gRE9NLmNyZWF0ZSgnYnV0dG9uJywgKGBtYXBib3hnbC1jdHJsLWZ1bGxzY3JlZW5gKSwgdGhpcy5fY29udHJvbENvbnRhaW5lcik7XG4gICAgICAgIERPTS5jcmVhdGUoJ3NwYW4nLCBgbWFwYm94Z2wtY3RybC1pY29uYCwgYnV0dG9uKS5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgdHJ1ZSk7XG4gICAgICAgIGJ1dHRvbi50eXBlID0gJ2J1dHRvbic7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVRpdGxlKCk7XG4gICAgICAgIHRoaXMuX2Z1bGxzY3JlZW5CdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9vbkNsaWNrRnVsbHNjcmVlbik7XG4gICAgICAgIHdpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKHRoaXMuX2Z1bGxzY3JlZW5jaGFuZ2UsIHRoaXMuX2NoYW5nZUljb24pO1xuICAgIH1cblxuICAgIF91cGRhdGVUaXRsZSgpIHtcbiAgICAgICAgY29uc3QgdGl0bGUgPSB0aGlzLl9nZXRUaXRsZSgpO1xuICAgICAgICB0aGlzLl9mdWxsc2NyZWVuQnV0dG9uLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIiwgdGl0bGUpO1xuICAgICAgICB0aGlzLl9mdWxsc2NyZWVuQnV0dG9uLnRpdGxlID0gdGl0bGU7XG4gICAgfVxuXG4gICAgX2dldFRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWFwLl9nZXRVSVN0cmluZyh0aGlzLl9pc0Z1bGxzY3JlZW4oKSA/ICdGdWxsc2NyZWVuQ29udHJvbC5FeGl0JyA6ICdGdWxsc2NyZWVuQ29udHJvbC5FbnRlcicpO1xuICAgIH1cblxuICAgIF9pc0Z1bGxzY3JlZW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mdWxsc2NyZWVuO1xuICAgIH1cblxuICAgIF9jaGFuZ2VJY29uKCkge1xuICAgICAgICBjb25zdCBmdWxsc2NyZWVuRWxlbWVudCA9XG4gICAgICAgICAgICB3aW5kb3cuZG9jdW1lbnQuZnVsbHNjcmVlbkVsZW1lbnQgfHxcbiAgICAgICAgICAgICh3aW5kb3cuZG9jdW1lbnQ6IGFueSkubW96RnVsbFNjcmVlbkVsZW1lbnQgfHxcbiAgICAgICAgICAgICh3aW5kb3cuZG9jdW1lbnQ6IGFueSkud2Via2l0RnVsbHNjcmVlbkVsZW1lbnQgfHxcbiAgICAgICAgICAgICh3aW5kb3cuZG9jdW1lbnQ6IGFueSkubXNGdWxsc2NyZWVuRWxlbWVudDtcblxuICAgICAgICBpZiAoKGZ1bGxzY3JlZW5FbGVtZW50ID09PSB0aGlzLl9jb250YWluZXIpICE9PSB0aGlzLl9mdWxsc2NyZWVuKSB7XG4gICAgICAgICAgICB0aGlzLl9mdWxsc2NyZWVuID0gIXRoaXMuX2Z1bGxzY3JlZW47XG4gICAgICAgICAgICB0aGlzLl9mdWxsc2NyZWVuQnV0dG9uLmNsYXNzTGlzdC50b2dnbGUoYG1hcGJveGdsLWN0cmwtc2hyaW5rYCk7XG4gICAgICAgICAgICB0aGlzLl9mdWxsc2NyZWVuQnV0dG9uLmNsYXNzTGlzdC50b2dnbGUoYG1hcGJveGdsLWN0cmwtZnVsbHNjcmVlbmApO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlVGl0bGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9vbkNsaWNrRnVsbHNjcmVlbigpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzRnVsbHNjcmVlbigpKSB7XG4gICAgICAgICAgICBpZiAod2luZG93LmRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKSB7XG4gICAgICAgICAgICAgICAgKHdpbmRvdy5kb2N1bWVudDogYW55KS5leGl0RnVsbHNjcmVlbigpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh3aW5kb3cuZG9jdW1lbnQubW96Q2FuY2VsRnVsbFNjcmVlbikge1xuICAgICAgICAgICAgICAgICh3aW5kb3cuZG9jdW1lbnQ6IGFueSkubW96Q2FuY2VsRnVsbFNjcmVlbigpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh3aW5kb3cuZG9jdW1lbnQubXNFeGl0RnVsbHNjcmVlbikge1xuICAgICAgICAgICAgICAgICh3aW5kb3cuZG9jdW1lbnQ6IGFueSkubXNFeGl0RnVsbHNjcmVlbigpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh3aW5kb3cuZG9jdW1lbnQud2Via2l0Q2FuY2VsRnVsbFNjcmVlbikge1xuICAgICAgICAgICAgICAgICh3aW5kb3cuZG9jdW1lbnQ6IGFueSkud2Via2l0Q2FuY2VsRnVsbFNjcmVlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2NvbnRhaW5lci5yZXF1ZXN0RnVsbHNjcmVlbikge1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLnJlcXVlc3RGdWxsc2NyZWVuKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoKHRoaXMuX2NvbnRhaW5lcjogYW55KS5tb3pSZXF1ZXN0RnVsbFNjcmVlbikge1xuICAgICAgICAgICAgKHRoaXMuX2NvbnRhaW5lcjogYW55KS5tb3pSZXF1ZXN0RnVsbFNjcmVlbigpO1xuICAgICAgICB9IGVsc2UgaWYgKCh0aGlzLl9jb250YWluZXI6IGFueSkubXNSZXF1ZXN0RnVsbHNjcmVlbikge1xuICAgICAgICAgICAgKHRoaXMuX2NvbnRhaW5lcjogYW55KS5tc1JlcXVlc3RGdWxsc2NyZWVuKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoKHRoaXMuX2NvbnRhaW5lcjogYW55KS53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbikge1xuICAgICAgICAgICAgKHRoaXMuX2NvbnRhaW5lcjogYW55KS53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbigpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBGdWxsc2NyZWVuQ29udHJvbDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7ZXh0ZW5kLCBiaW5kQWxsfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHtFdmVudCwgRXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCB7TWFwTW91c2VFdmVudH0gZnJvbSAnLi4vdWkvZXZlbnRzJztcbmltcG9ydCBET00gZnJvbSAnLi4vdXRpbC9kb20nO1xuaW1wb3J0IExuZ0xhdCBmcm9tICcuLi9nZW8vbG5nX2xhdCc7XG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgd2luZG93IGZyb20gJy4uL3V0aWwvd2luZG93JztcbmltcG9ydCBzbWFydFdyYXAgZnJvbSAnLi4vdXRpbC9zbWFydF93cmFwJztcbmltcG9ydCB7dHlwZSBBbmNob3IsIGFuY2hvclRyYW5zbGF0ZSwgYXBwbHlBbmNob3JDbGFzc30gZnJvbSAnLi9hbmNob3InO1xuXG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi9tYXAnO1xuaW1wb3J0IHR5cGUge0xuZ0xhdExpa2V9IGZyb20gJy4uL2dlby9sbmdfbGF0JztcbmltcG9ydCB0eXBlIHtQb2ludExpa2V9IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG5jb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICBjbG9zZUJ1dHRvbjogdHJ1ZSxcbiAgICBjbG9zZU9uQ2xpY2s6IHRydWUsXG4gICAgY2xhc3NOYW1lOiAnJyxcbiAgICBtYXhXaWR0aDogXCIyNDBweFwiXG59O1xuXG5leHBvcnQgdHlwZSBPZmZzZXQgPSBudW1iZXIgfCBQb2ludExpa2UgfCB7W186IEFuY2hvcl06IFBvaW50TGlrZX07XG5cbmV4cG9ydCB0eXBlIFBvcHVwT3B0aW9ucyA9IHtcbiAgICBjbG9zZUJ1dHRvbj86IGJvb2xlYW4sXG4gICAgY2xvc2VPbkNsaWNrPzogYm9vbGVhbixcbiAgICBjbG9zZU9uTW92ZT86IGJvb2xlYW4sXG4gICAgYW5jaG9yPzogQW5jaG9yLFxuICAgIG9mZnNldD86IE9mZnNldCxcbiAgICBjbGFzc05hbWU/OiBzdHJpbmcsXG4gICAgbWF4V2lkdGg/OiBzdHJpbmdcbn07XG5cbi8qKlxuICogQSBwb3B1cCBjb21wb25lbnQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5jbG9zZUJ1dHRvbj10cnVlXSBJZiBgdHJ1ZWAsIGEgY2xvc2UgYnV0dG9uIHdpbGwgYXBwZWFyIGluIHRoZVxuICogICB0b3AgcmlnaHQgY29ybmVyIG9mIHRoZSBwb3B1cC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuY2xvc2VPbkNsaWNrPXRydWVdIElmIGB0cnVlYCwgdGhlIHBvcHVwIHdpbGwgY2xvc2VkIHdoZW4gdGhlXG4gKiAgIG1hcCBpcyBjbGlja2VkLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5jbG9zZU9uTW92ZT1mYWxzZV0gSWYgYHRydWVgLCB0aGUgcG9wdXAgd2lsbCBjbG9zZWQgd2hlbiB0aGVcbiAqICAgbWFwIG1vdmVzLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmFuY2hvcl0gLSBBIHN0cmluZyBpbmRpY2F0aW5nIHRoZSBwYXJ0IG9mIHRoZSBQb3B1cCB0aGF0IHNob3VsZFxuICogICBiZSBwb3NpdGlvbmVkIGNsb3Nlc3QgdG8gdGhlIGNvb3JkaW5hdGUgc2V0IHZpYSB7QGxpbmsgUG9wdXAjc2V0TG5nTGF0fS5cbiAqICAgT3B0aW9ucyBhcmUgYCdjZW50ZXInYCwgYCd0b3AnYCwgYCdib3R0b20nYCwgYCdsZWZ0J2AsIGAncmlnaHQnYCwgYCd0b3AtbGVmdCdgLFxuICogICBgJ3RvcC1yaWdodCdgLCBgJ2JvdHRvbS1sZWZ0J2AsIGFuZCBgJ2JvdHRvbS1yaWdodCdgLiBJZiB1bnNldCB0aGUgYW5jaG9yIHdpbGwgYmVcbiAqICAgZHluYW1pY2FsbHkgc2V0IHRvIGVuc3VyZSB0aGUgcG9wdXAgZmFsbHMgd2l0aGluIHRoZSBtYXAgY29udGFpbmVyIHdpdGggYSBwcmVmZXJlbmNlXG4gKiAgIGZvciBgJ2JvdHRvbSdgLlxuICogQHBhcmFtIHtudW1iZXJ8UG9pbnRMaWtlfE9iamVjdH0gW29wdGlvbnMub2Zmc2V0XSAtXG4gKiAgQSBwaXhlbCBvZmZzZXQgYXBwbGllZCB0byB0aGUgcG9wdXAncyBsb2NhdGlvbiBzcGVjaWZpZWQgYXM6XG4gKiAgIC0gYSBzaW5nbGUgbnVtYmVyIHNwZWNpZnlpbmcgYSBkaXN0YW5jZSBmcm9tIHRoZSBwb3B1cCdzIGxvY2F0aW9uXG4gKiAgIC0gYSB7QGxpbmsgUG9pbnRMaWtlfSBzcGVjaWZ5aW5nIGEgY29uc3RhbnQgb2Zmc2V0XG4gKiAgIC0gYW4gb2JqZWN0IG9mIHtAbGluayBQb2ludH1zIHNwZWNpZmluZyBhbiBvZmZzZXQgZm9yIGVhY2ggYW5jaG9yIHBvc2l0aW9uXG4gKiAgTmVnYXRpdmUgb2Zmc2V0cyBpbmRpY2F0ZSBsZWZ0IGFuZCB1cC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jbGFzc05hbWVdIFNwYWNlLXNlcGFyYXRlZCBDU1MgY2xhc3MgbmFtZXMgdG8gYWRkIHRvIHBvcHVwIGNvbnRhaW5lclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLm1heFdpZHRoPScyNDBweCddIC1cbiAqICBBIHN0cmluZyB0aGF0IHNldHMgdGhlIENTUyBwcm9wZXJ0eSBvZiB0aGUgcG9wdXAncyBtYXhpbXVtIHdpZHRoLCBlZyBgJzMwMHB4J2AuXG4gKiAgVG8gZW5zdXJlIHRoZSBwb3B1cCByZXNpemVzIHRvIGZpdCBpdHMgY29udGVudCwgc2V0IHRoaXMgcHJvcGVydHkgdG8gYCdub25lJ2AuXG4gKiAgQXZhaWxhYmxlIHZhbHVlcyBjYW4gYmUgZm91bmQgaGVyZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL21heC13aWR0aFxuICogQGV4YW1wbGVcbiAqIHZhciBtYXJrZXJIZWlnaHQgPSA1MCwgbWFya2VyUmFkaXVzID0gMTAsIGxpbmVhck9mZnNldCA9IDI1O1xuICogdmFyIHBvcHVwT2Zmc2V0cyA9IHtcbiAqICAndG9wJzogWzAsIDBdLFxuICogICd0b3AtbGVmdCc6IFswLDBdLFxuICogICd0b3AtcmlnaHQnOiBbMCwwXSxcbiAqICAnYm90dG9tJzogWzAsIC1tYXJrZXJIZWlnaHRdLFxuICogICdib3R0b20tbGVmdCc6IFtsaW5lYXJPZmZzZXQsIChtYXJrZXJIZWlnaHQgLSBtYXJrZXJSYWRpdXMgKyBsaW5lYXJPZmZzZXQpICogLTFdLFxuICogICdib3R0b20tcmlnaHQnOiBbLWxpbmVhck9mZnNldCwgKG1hcmtlckhlaWdodCAtIG1hcmtlclJhZGl1cyArIGxpbmVhck9mZnNldCkgKiAtMV0sXG4gKiAgJ2xlZnQnOiBbbWFya2VyUmFkaXVzLCAobWFya2VySGVpZ2h0IC0gbWFya2VyUmFkaXVzKSAqIC0xXSxcbiAqICAncmlnaHQnOiBbLW1hcmtlclJhZGl1cywgKG1hcmtlckhlaWdodCAtIG1hcmtlclJhZGl1cykgKiAtMV1cbiAqICB9O1xuICogdmFyIHBvcHVwID0gbmV3IG1hcGJveGdsLlBvcHVwKHtvZmZzZXQ6IHBvcHVwT2Zmc2V0cywgY2xhc3NOYW1lOiAnbXktY2xhc3MnfSlcbiAqICAgLnNldExuZ0xhdChlLmxuZ0xhdClcbiAqICAgLnNldEhUTUwoXCI8aDE+SGVsbG8gV29ybGQhPC9oMT5cIilcbiAqICAgLnNldE1heFdpZHRoKFwiMzAwcHhcIilcbiAqICAgLmFkZFRvKG1hcCk7XG4gKiBAc2VlIFtEaXNwbGF5IGEgcG9wdXBdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvcG9wdXAvKVxuICogQHNlZSBbRGlzcGxheSBhIHBvcHVwIG9uIGhvdmVyXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3BvcHVwLW9uLWhvdmVyLylcbiAqIEBzZWUgW0Rpc3BsYXkgYSBwb3B1cCBvbiBjbGlja10oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9wb3B1cC1vbi1jbGljay8pXG4gKiBAc2VlIFtBdHRhY2ggYSBwb3B1cCB0byBhIG1hcmtlciBpbnN0YW5jZV0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9zZXQtcG9wdXAvKVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQb3B1cCBleHRlbmRzIEV2ZW50ZWQge1xuICAgIF9tYXA6IE1hcDtcbiAgICBvcHRpb25zOiBQb3B1cE9wdGlvbnM7XG4gICAgX2NvbnRlbnQ6IEhUTUxFbGVtZW50O1xuICAgIF9jb250YWluZXI6IEhUTUxFbGVtZW50O1xuICAgIF9jbG9zZUJ1dHRvbjogSFRNTEVsZW1lbnQ7XG4gICAgX3RpcDogSFRNTEVsZW1lbnQ7XG4gICAgX2xuZ0xhdDogTG5nTGF0O1xuICAgIF90cmFja1BvaW50ZXI6IGJvb2xlYW47XG4gICAgX3BvczogP1BvaW50O1xuXG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogUG9wdXBPcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IGV4dGVuZChPYmplY3QuY3JlYXRlKGRlZmF1bHRPcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgICAgIGJpbmRBbGwoWydfdXBkYXRlJywgJ19vbkNsb3NlJywgJ3JlbW92ZScsICdfb25Nb3VzZU1vdmUnLCAnX29uTW91c2VVcCcsICdfb25EcmFnJ10sIHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgdGhlIHBvcHVwIHRvIGEgbWFwLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtNYXB9IG1hcCBUaGUgTWFwYm94IEdMIEpTIG1hcCB0byBhZGQgdGhlIHBvcHVwIHRvLlxuICAgICAqIEByZXR1cm5zIHtQb3B1cH0gYHRoaXNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBuZXcgbWFwYm94Z2wuUG9wdXAoKVxuICAgICAqICAgLnNldExuZ0xhdChbMCwgMF0pXG4gICAgICogICAuc2V0SFRNTChcIjxoMT5OdWxsIElzbGFuZDwvaDE+XCIpXG4gICAgICogICAuYWRkVG8obWFwKTtcbiAgICAgKiBAc2VlIFtEaXNwbGF5IGEgcG9wdXBdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3BvcHVwLylcbiAgICAgKiBAc2VlIFtEaXNwbGF5IGEgcG9wdXAgb24gaG92ZXJdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3BvcHVwLW9uLWhvdmVyLylcbiAgICAgKiBAc2VlIFtEaXNwbGF5IGEgcG9wdXAgb24gY2xpY2tdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3BvcHVwLW9uLWNsaWNrLylcbiAgICAgKiBAc2VlIFtTaG93IHBvbHlnb24gaW5mb3JtYXRpb24gb24gY2xpY2tdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3BvbHlnb24tcG9wdXAtb24tY2xpY2svKVxuICAgICAqL1xuICAgIGFkZFRvKG1hcDogTWFwKSB7XG4gICAgICAgIGlmICh0aGlzLl9tYXApIHRoaXMucmVtb3ZlKCk7XG5cbiAgICAgICAgdGhpcy5fbWFwID0gbWFwO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNsb3NlT25DbGljaykge1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9uKCdjbGljaycsIHRoaXMuX29uQ2xvc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jbG9zZU9uTW92ZSkge1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9uKCdtb3ZlJywgdGhpcy5fb25DbG9zZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9tYXAub24oJ3JlbW92ZScsIHRoaXMucmVtb3ZlKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX3RyYWNrUG9pbnRlcikge1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9uKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSk7XG4gICAgICAgICAgICB0aGlzLl9tYXAub24oJ21vdXNldXAnLCB0aGlzLl9vbk1vdXNlVXApO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1wb3B1cC10cmFjay1wb2ludGVyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9tYXAuX2NhbnZhc0NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC10cmFjay1wb2ludGVyJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9tYXAub24oJ21vdmUnLCB0aGlzLl91cGRhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVkIHdoZW4gdGhlIHBvcHVwIGlzIG9wZW5lZCBtYW51YWxseSBvciBwcm9ncmFtYXRpY2FsbHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBldmVudCBvcGVuXG4gICAgICAgICAqIEBtZW1iZXJvZiBQb3B1cFxuICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cbiAgICAgICAgICogQHByb3BlcnR5IHtQb3B1cH0gcG9wdXAgb2JqZWN0IHRoYXQgd2FzIG9wZW5lZFxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKiAvLyBDcmVhdGUgYSBwb3B1cFxuICAgICAgICAgKiB2YXIgcG9wdXAgPSBuZXcgbWFwYm94Z2wuUG9wdXAoKTtcbiAgICAgICAgICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgd2lsbCBmaXJlXG4gICAgICAgICAqIC8vIGFueSB0aW1lIHRoZSBwb3B1cCBpcyBvcGVuZWRcbiAgICAgICAgICogcG9wdXAub24oJ29wZW4nLCBmdW5jdGlvbigpe1xuICAgICAgICAgKiAgIGNvbnNvbGUubG9nKCdwb3B1cCB3YXMgb3BlbmVkJyk7XG4gICAgICAgICAqIH0pO1xuICAgICAgICAgKlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnb3BlbicpKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBwb3B1cCBpcyBvcGVuLCBgZmFsc2VgIGlmIGl0IGlzIGNsb3NlZC5cbiAgICAgKi9cbiAgICBpc09wZW4oKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX21hcDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBwb3B1cCBmcm9tIHRoZSBtYXAgaXQgaGFzIGJlZW4gYWRkZWQgdG8uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBwb3B1cCA9IG5ldyBtYXBib3hnbC5Qb3B1cCgpLmFkZFRvKG1hcCk7XG4gICAgICogcG9wdXAucmVtb3ZlKCk7XG4gICAgICogQHJldHVybnMge1BvcHVwfSBgdGhpc2BcbiAgICAgKi9cbiAgICByZW1vdmUoKSB7XG4gICAgICAgIGlmICh0aGlzLl9jb250ZW50KSB7XG4gICAgICAgICAgICBET00ucmVtb3ZlKHRoaXMuX2NvbnRlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2NvbnRhaW5lcikge1xuICAgICAgICAgICAgRE9NLnJlbW92ZSh0aGlzLl9jb250YWluZXIpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2NvbnRhaW5lcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9tYXApIHtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ21vdmUnLCB0aGlzLl91cGRhdGUpO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9mZignbW92ZScsIHRoaXMuX29uQ2xvc2UpO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9mZignY2xpY2snLCB0aGlzLl9vbkNsb3NlKTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ3JlbW92ZScsIHRoaXMucmVtb3ZlKTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ21vdXNldXAnLCB0aGlzLl9vbk1vdXNlVXApO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9mZignZHJhZycsIHRoaXMuX29uRHJhZyk7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fbWFwO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVkIHdoZW4gdGhlIHBvcHVwIGlzIGNsb3NlZCBtYW51YWxseSBvciBwcm9ncmFtYXRpY2FsbHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBldmVudCBjbG9zZVxuICAgICAgICAgKiBAbWVtYmVyb2YgUG9wdXBcbiAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICAgICAqIEBwcm9wZXJ0eSB7UG9wdXB9IHBvcHVwIG9iamVjdCB0aGF0IHdhcyBjbG9zZWRcbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICogLy8gQ3JlYXRlIGEgcG9wdXBcbiAgICAgICAgICogdmFyIHBvcHVwID0gbmV3IG1hcGJveGdsLlBvcHVwKCk7XG4gICAgICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lciB0aGF0IHdpbGwgZmlyZVxuICAgICAgICAgKiAvLyBhbnkgdGltZSB0aGUgcG9wdXAgaXMgY2xvc2VkXG4gICAgICAgICAqIHBvcHVwLm9uKCdjbG9zZScsIGZ1bmN0aW9uKCl7XG4gICAgICAgICAqICAgY29uc29sZS5sb2coJ3BvcHVwIHdhcyBjbG9zZWQnKTtcbiAgICAgICAgICogfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdjbG9zZScpKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBnZW9ncmFwaGljYWwgbG9jYXRpb24gb2YgdGhlIHBvcHVwJ3MgYW5jaG9yLlxuICAgICAqXG4gICAgICogVGhlIGxvbmdpdHVkZSBvZiB0aGUgcmVzdWx0IG1heSBkaWZmZXIgYnkgYSBtdWx0aXBsZSBvZiAzNjAgZGVncmVlcyBmcm9tIHRoZSBsb25naXR1ZGUgcHJldmlvdXNseVxuICAgICAqIHNldCBieSBgc2V0TG5nTGF0YCBiZWNhdXNlIGBQb3B1cGAgd3JhcHMgdGhlIGFuY2hvciBsb25naXR1ZGUgYWNyb3NzIGNvcGllcyBvZiB0aGUgd29ybGQgdG8ga2VlcFxuICAgICAqIHRoZSBwb3B1cCBvbiBzY3JlZW4uXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7TG5nTGF0fSBUaGUgZ2VvZ3JhcGhpY2FsIGxvY2F0aW9uIG9mIHRoZSBwb3B1cCdzIGFuY2hvci5cbiAgICAgKi9cbiAgICBnZXRMbmdMYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sbmdMYXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZ2VvZ3JhcGhpY2FsIGxvY2F0aW9uIG9mIHRoZSBwb3B1cCdzIGFuY2hvciwgYW5kIG1vdmVzIHRoZSBwb3B1cCB0byBpdC4gUmVwbGFjZXMgdHJhY2tQb2ludGVyKCkgYmVoYXZpb3IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbG5nbGF0IFRoZSBnZW9ncmFwaGljYWwgbG9jYXRpb24gdG8gc2V0IGFzIHRoZSBwb3B1cCdzIGFuY2hvci5cbiAgICAgKiBAcmV0dXJucyB7UG9wdXB9IGB0aGlzYFxuICAgICAqL1xuICAgIHNldExuZ0xhdChsbmdsYXQ6IExuZ0xhdExpa2UpIHtcbiAgICAgICAgdGhpcy5fbG5nTGF0ID0gTG5nTGF0LmNvbnZlcnQobG5nbGF0KTtcbiAgICAgICAgdGhpcy5fcG9zID0gbnVsbDtcblxuICAgICAgICB0aGlzLl90cmFja1BvaW50ZXIgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLl91cGRhdGUoKTtcblxuICAgICAgICBpZiAodGhpcy5fbWFwKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXAub24oJ21vdmUnLCB0aGlzLl91cGRhdGUpO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9mZignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1wb3B1cC10cmFjay1wb2ludGVyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9tYXAuX2NhbnZhc0NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC10cmFjay1wb2ludGVyJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmFja3MgdGhlIHBvcHVwIGFuY2hvciB0byB0aGUgY3Vyc29yIHBvc2l0aW9uIG9uIHNjcmVlbnMgd2l0aCBhIHBvaW50ZXIgZGV2aWNlIChpdCB3aWxsIGJlIGhpZGRlbiBvbiB0b3VjaHNjcmVlbnMpLiBSZXBsYWNlcyB0aGUgYHNldExuZ0xhdGAgYmVoYXZpb3IuXG4gICAgICogRm9yIG1vc3QgdXNlIGNhc2VzLCBzZXQgYGNsb3NlT25DbGlja2AgYW5kIGBjbG9zZUJ1dHRvbmAgdG8gYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBwb3B1cCA9IG5ldyBtYXBib3hnbC5Qb3B1cCh7IGNsb3NlT25DbGljazogZmFsc2UsIGNsb3NlQnV0dG9uOiBmYWxzZSB9KVxuICAgICAqICAgLnNldEhUTUwoXCI8aDE+SGVsbG8gV29ybGQhPC9oMT5cIilcbiAgICAgKiAgIC50cmFja1BvaW50ZXIoKVxuICAgICAqICAgLmFkZFRvKG1hcCk7XG4gICAgICogQHJldHVybnMge1BvcHVwfSBgdGhpc2BcbiAgICAgKi9cbiAgICB0cmFja1BvaW50ZXIoKSB7XG4gICAgICAgIHRoaXMuX3RyYWNrUG9pbnRlciA9IHRydWU7XG4gICAgICAgIHRoaXMuX3BvcyA9IG51bGw7XG4gICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuICAgICAgICBpZiAodGhpcy5fbWFwKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCdtb3ZlJywgdGhpcy5fdXBkYXRlKTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vbignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUpO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9uKCdkcmFnJywgdGhpcy5fb25EcmFnKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtcG9wdXAtdHJhY2stcG9pbnRlcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fbWFwLl9jYW52YXNDb250YWluZXIuY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtdHJhY2stcG9pbnRlcicpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBgUG9wdXBgJ3MgSFRNTCBlbGVtZW50LlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gQ2hhbmdlIHRoZSBgUG9wdXBgIGVsZW1lbnQncyBmb250IHNpemVcbiAgICAgKiB2YXIgcG9wdXAgPSBuZXcgbWFwYm94Z2wuUG9wdXAoKVxuICAgICAqICAgLnNldExuZ0xhdChbLTk2LCAzNy44XSlcbiAgICAgKiAgIC5zZXRIVE1MKFwiPHA+SGVsbG8gV29ybGQhPC9wPlwiKVxuICAgICAqICAgLmFkZFRvKG1hcCk7XG4gICAgICogdmFyIHBvcHVwRWxlbSA9IHBvcHVwLmdldEVsZW1lbnQoKTtcbiAgICAgKiBwb3B1cEVsZW0uc3R5bGUuZm9udFNpemUgPSBcIjI1cHhcIjtcbiAgICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAgICAgKi9cbiAgICBnZXRFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29udGFpbmVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHBvcHVwJ3MgY29udGVudCB0byBhIHN0cmluZyBvZiB0ZXh0LlxuICAgICAqXG4gICAgICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgW1RleHRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9UZXh0KSBub2RlIGluIHRoZSBET00sXG4gICAgICogc28gaXQgY2Fubm90IGluc2VydCByYXcgSFRNTC4gVXNlIHRoaXMgbWV0aG9kIGZvciBzZWN1cml0eSBhZ2FpbnN0IFhTU1xuICAgICAqIGlmIHRoZSBwb3B1cCBjb250ZW50IGlzIHVzZXItcHJvdmlkZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGV4dCBUZXh0dWFsIGNvbnRlbnQgZm9yIHRoZSBwb3B1cC5cbiAgICAgKiBAcmV0dXJucyB7UG9wdXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIHBvcHVwID0gbmV3IG1hcGJveGdsLlBvcHVwKClcbiAgICAgKiAgIC5zZXRMbmdMYXQoZS5sbmdMYXQpXG4gICAgICogICAuc2V0VGV4dCgnSGVsbG8sIHdvcmxkIScpXG4gICAgICogICAuYWRkVG8obWFwKTtcbiAgICAgKi9cbiAgICBzZXRUZXh0KHRleHQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXRET01Db250ZW50KHdpbmRvdy5kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcG9wdXAncyBjb250ZW50IHRvIHRoZSBIVE1MIHByb3ZpZGVkIGFzIGEgc3RyaW5nLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgZG9lcyBub3QgcGVyZm9ybSBIVE1MIGZpbHRlcmluZyBvciBzYW5pdGl6YXRpb24sIGFuZCBtdXN0IGJlXG4gICAgICogdXNlZCBvbmx5IHdpdGggdHJ1c3RlZCBjb250ZW50LiBDb25zaWRlciB7QGxpbmsgUG9wdXAjc2V0VGV4dH0gaWZcbiAgICAgKiB0aGUgY29udGVudCBpcyBhbiB1bnRydXN0ZWQgdGV4dCBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaHRtbCBBIHN0cmluZyByZXByZXNlbnRpbmcgSFRNTCBjb250ZW50IGZvciB0aGUgcG9wdXAuXG4gICAgICogQHJldHVybnMge1BvcHVwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBwb3B1cCA9IG5ldyBtYXBib3hnbC5Qb3B1cCgpXG4gICAgICogICAuc2V0TG5nTGF0KGUubG5nTGF0KVxuICAgICAqICAgLnNldEhUTUwoXCI8aDE+SGVsbG8gV29ybGQhPC9oMT5cIilcbiAgICAgKiAgIC5hZGRUbyhtYXApO1xuICAgICAqIEBzZWUgW0Rpc3BsYXkgYSBwb3B1cF0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvcG9wdXAvKVxuICAgICAqIEBzZWUgW0Rpc3BsYXkgYSBwb3B1cCBvbiBob3Zlcl0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvcG9wdXAtb24taG92ZXIvKVxuICAgICAqIEBzZWUgW0Rpc3BsYXkgYSBwb3B1cCBvbiBjbGlja10oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvcG9wdXAtb24tY2xpY2svKVxuICAgICAqIEBzZWUgW0F0dGFjaCBhIHBvcHVwIHRvIGEgbWFya2VyIGluc3RhbmNlXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9zZXQtcG9wdXAvKVxuICAgICAqL1xuICAgIHNldEhUTUwoaHRtbDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGZyYWcgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgICBjb25zdCB0ZW1wID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2JvZHknKTtcbiAgICAgICAgbGV0IGNoaWxkO1xuICAgICAgICB0ZW1wLmlubmVySFRNTCA9IGh0bWw7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBjaGlsZCA9IHRlbXAuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgIGlmICghY2hpbGQpIGJyZWFrO1xuICAgICAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChjaGlsZCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5zZXRET01Db250ZW50KGZyYWcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHBvcHVwJ3MgbWF4aW11bSB3aWR0aC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBtYXhpbXVtIHdpZHRoIG9mIHRoZSBwb3B1cC5cbiAgICAgKi9cbiAgICBnZXRNYXhXaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lciAmJiB0aGlzLl9jb250YWluZXIuc3R5bGUubWF4V2lkdGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcG9wdXAncyBtYXhpbXVtIHdpZHRoLiBUaGlzIGlzIHNldHRpbmcgdGhlIENTUyBwcm9wZXJ0eSBgbWF4LXdpZHRoYC5cbiAgICAgKiBBdmFpbGFibGUgdmFsdWVzIGNhbiBiZSBmb3VuZCBoZXJlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvbWF4LXdpZHRoXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbWF4V2lkdGggQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBmb3IgdGhlIG1heGltdW0gd2lkdGguXG4gICAgICogQHJldHVybnMge1BvcHVwfSBgdGhpc2BcbiAgICAgKi9cbiAgICBzZXRNYXhXaWR0aChtYXhXaWR0aDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5tYXhXaWR0aCA9IG1heFdpZHRoO1xuICAgICAgICB0aGlzLl91cGRhdGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcG9wdXAncyBjb250ZW50IHRvIHRoZSBlbGVtZW50IHByb3ZpZGVkIGFzIGEgRE9NIG5vZGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaHRtbE5vZGUgQSBET00gbm9kZSB0byBiZSB1c2VkIGFzIGNvbnRlbnQgZm9yIHRoZSBwb3B1cC5cbiAgICAgKiBAcmV0dXJucyB7UG9wdXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gY3JlYXRlIGFuIGVsZW1lbnQgd2l0aCB0aGUgcG9wdXAgY29udGVudFxuICAgICAqIHZhciBkaXYgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICogZGl2LmlubmVySFRNTCA9ICdIZWxsbywgd29ybGQhJztcbiAgICAgKiB2YXIgcG9wdXAgPSBuZXcgbWFwYm94Z2wuUG9wdXAoKVxuICAgICAqICAgLnNldExuZ0xhdChlLmxuZ0xhdClcbiAgICAgKiAgIC5zZXRET01Db250ZW50KGRpdilcbiAgICAgKiAgIC5hZGRUbyhtYXApO1xuICAgICAqL1xuICAgIHNldERPTUNvbnRlbnQoaHRtbE5vZGU6IE5vZGUpIHtcbiAgICAgICAgdGhpcy5fY3JlYXRlQ29udGVudCgpO1xuICAgICAgICB0aGlzLl9jb250ZW50LmFwcGVuZENoaWxkKGh0bWxOb2RlKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBDU1MgY2xhc3MgdG8gdGhlIHBvcHVwIGNvbnRhaW5lciBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZSBOb24tZW1wdHkgc3RyaW5nIHdpdGggQ1NTIGNsYXNzIG5hbWUgdG8gYWRkIHRvIHBvcHVwIGNvbnRhaW5lclxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBsZXQgcG9wdXAgPSBuZXcgbWFwYm94Z2wuUG9wdXAoKVxuICAgICAqIHBvcHVwLmFkZENsYXNzTmFtZSgnc29tZS1jbGFzcycpXG4gICAgICovXG4gICAgYWRkQ2xhc3NOYW1lKGNsYXNzTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLl9jb250YWluZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGEgQ1NTIGNsYXNzIGZyb20gdGhlIHBvcHVwIGNvbnRhaW5lciBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZSBOb24tZW1wdHkgc3RyaW5nIHdpdGggQ1NTIGNsYXNzIG5hbWUgdG8gcmVtb3ZlIGZyb20gcG9wdXAgY29udGFpbmVyXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGxldCBwb3B1cCA9IG5ldyBtYXBib3hnbC5Qb3B1cCgpXG4gICAgICogcG9wdXAucmVtb3ZlQ2xhc3NOYW1lKCdzb21lLWNsYXNzJylcbiAgICAgKi9cbiAgICByZW1vdmVDbGFzc05hbWUoY2xhc3NOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NvbnRhaW5lcikge1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCBvciByZW1vdmUgdGhlIGdpdmVuIENTUyBjbGFzcyBvbiB0aGUgcG9wdXAgY29udGFpbmVyLCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgY29udGFpbmVyIGN1cnJlbnRseSBoYXMgdGhhdCBjbGFzcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWUgTm9uLWVtcHR5IHN0cmluZyB3aXRoIENTUyBjbGFzcyBuYW1lIHRvIGFkZC9yZW1vdmVcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBpZiB0aGUgY2xhc3Mgd2FzIHJlbW92ZWQgcmV0dXJuIGZhbHNlLCBpZiBjbGFzcyB3YXMgYWRkZWQsIHRoZW4gcmV0dXJuIHRydWVcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogbGV0IHBvcHVwID0gbmV3IG1hcGJveGdsLlBvcHVwKClcbiAgICAgKiBwb3B1cC50b2dnbGVDbGFzc05hbWUoJ3RvZ2dsZUNsYXNzJylcbiAgICAgKi9cbiAgICB0b2dnbGVDbGFzc05hbWUoY2xhc3NOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NvbnRhaW5lcikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QudG9nZ2xlKGNsYXNzTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfY3JlYXRlQ29udGVudCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NvbnRlbnQpIHtcbiAgICAgICAgICAgIERPTS5yZW1vdmUodGhpcy5fY29udGVudCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jb250ZW50ID0gRE9NLmNyZWF0ZSgnZGl2JywgJ21hcGJveGdsLXBvcHVwLWNvbnRlbnQnLCB0aGlzLl9jb250YWluZXIpO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNsb3NlQnV0dG9uKSB7XG4gICAgICAgICAgICB0aGlzLl9jbG9zZUJ1dHRvbiA9IERPTS5jcmVhdGUoJ2J1dHRvbicsICdtYXBib3hnbC1wb3B1cC1jbG9zZS1idXR0b24nLCB0aGlzLl9jb250ZW50KTtcbiAgICAgICAgICAgIHRoaXMuX2Nsb3NlQnV0dG9uLnR5cGUgPSAnYnV0dG9uJztcbiAgICAgICAgICAgIHRoaXMuX2Nsb3NlQnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsICdDbG9zZSBwb3B1cCcpO1xuICAgICAgICAgICAgdGhpcy5fY2xvc2VCdXR0b24uaW5uZXJIVE1MID0gJyYjMjE1Oyc7XG4gICAgICAgICAgICB0aGlzLl9jbG9zZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX29uQ2xvc2UpO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBfb25Nb3VzZVVwKGV2ZW50OiBNYXBNb3VzZUV2ZW50KSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZShldmVudC5wb2ludCk7XG4gICAgfVxuXG4gICAgX29uTW91c2VNb3ZlKGV2ZW50OiBNYXBNb3VzZUV2ZW50KSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZShldmVudC5wb2ludCk7XG4gICAgfVxuXG4gICAgX29uRHJhZyhldmVudDogTWFwTW91c2VFdmVudCkge1xuICAgICAgICB0aGlzLl91cGRhdGUoZXZlbnQucG9pbnQpO1xuICAgIH1cblxuICAgIF91cGRhdGUoY3Vyc29yOiBQb2ludExpa2UpIHtcbiAgICAgICAgY29uc3QgaGFzUG9zaXRpb24gPSB0aGlzLl9sbmdMYXQgfHwgdGhpcy5fdHJhY2tQb2ludGVyO1xuXG4gICAgICAgIGlmICghdGhpcy5fbWFwIHx8ICFoYXNQb3NpdGlvbiB8fCAhdGhpcy5fY29udGVudCkgeyByZXR1cm47IH1cblxuICAgICAgICBpZiAoIXRoaXMuX2NvbnRhaW5lcikge1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyID0gRE9NLmNyZWF0ZSgnZGl2JywgJ21hcGJveGdsLXBvcHVwJywgdGhpcy5fbWFwLmdldENvbnRhaW5lcigpKTtcbiAgICAgICAgICAgIHRoaXMuX3RpcCAgICAgICA9IERPTS5jcmVhdGUoJ2RpdicsICdtYXBib3hnbC1wb3B1cC10aXAnLCB0aGlzLl9jb250YWluZXIpO1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX2NvbnRlbnQpO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jbGFzc05hbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuY2xhc3NOYW1lLnNwbGl0KCcgJykuZm9yRWFjaChuYW1lID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKG5hbWUpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuX3RyYWNrUG9pbnRlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1wb3B1cC10cmFjay1wb2ludGVyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLm1heFdpZHRoICYmIHRoaXMuX2NvbnRhaW5lci5zdHlsZS5tYXhXaWR0aCAhPT0gdGhpcy5vcHRpb25zLm1heFdpZHRoKSB7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIuc3R5bGUubWF4V2lkdGggPSB0aGlzLm9wdGlvbnMubWF4V2lkdGg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fbWFwLnRyYW5zZm9ybS5yZW5kZXJXb3JsZENvcGllcyAmJiAhdGhpcy5fdHJhY2tQb2ludGVyKSB7XG4gICAgICAgICAgICB0aGlzLl9sbmdMYXQgPSBzbWFydFdyYXAodGhpcy5fbG5nTGF0LCB0aGlzLl9wb3MsIHRoaXMuX21hcC50cmFuc2Zvcm0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX3RyYWNrUG9pbnRlciAmJiAhY3Vyc29yKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgcG9zID0gdGhpcy5fcG9zID0gdGhpcy5fdHJhY2tQb2ludGVyICYmIGN1cnNvciA/IGN1cnNvciA6IHRoaXMuX21hcC5wcm9qZWN0KHRoaXMuX2xuZ0xhdCk7XG5cbiAgICAgICAgbGV0IGFuY2hvcjogP0FuY2hvciA9IHRoaXMub3B0aW9ucy5hbmNob3I7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IG5vcm1hbGl6ZU9mZnNldCh0aGlzLm9wdGlvbnMub2Zmc2V0KTtcblxuICAgICAgICBpZiAoIWFuY2hvcikge1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLl9jb250YWluZXIub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLl9jb250YWluZXIub2Zmc2V0SGVpZ2h0O1xuICAgICAgICAgICAgbGV0IGFuY2hvckNvbXBvbmVudHM7XG5cbiAgICAgICAgICAgIGlmIChwb3MueSArIG9mZnNldC5ib3R0b20ueSA8IGhlaWdodCkge1xuICAgICAgICAgICAgICAgIGFuY2hvckNvbXBvbmVudHMgPSBbJ3RvcCddO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwb3MueSA+IHRoaXMuX21hcC50cmFuc2Zvcm0uaGVpZ2h0IC0gaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgYW5jaG9yQ29tcG9uZW50cyA9IFsnYm90dG9tJ107XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFuY2hvckNvbXBvbmVudHMgPSBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHBvcy54IDwgd2lkdGggLyAyKSB7XG4gICAgICAgICAgICAgICAgYW5jaG9yQ29tcG9uZW50cy5wdXNoKCdsZWZ0Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBvcy54ID4gdGhpcy5fbWFwLnRyYW5zZm9ybS53aWR0aCAtIHdpZHRoIC8gMikge1xuICAgICAgICAgICAgICAgIGFuY2hvckNvbXBvbmVudHMucHVzaCgncmlnaHQnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGFuY2hvckNvbXBvbmVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgYW5jaG9yID0gJ2JvdHRvbSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFuY2hvciA9IChhbmNob3JDb21wb25lbnRzLmpvaW4oJy0nKTogYW55KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9mZnNldGVkUG9zID0gcG9zLmFkZChvZmZzZXRbYW5jaG9yXSkucm91bmQoKTtcbiAgICAgICAgRE9NLnNldFRyYW5zZm9ybSh0aGlzLl9jb250YWluZXIsIGAke2FuY2hvclRyYW5zbGF0ZVthbmNob3JdfSB0cmFuc2xhdGUoJHtvZmZzZXRlZFBvcy54fXB4LCR7b2Zmc2V0ZWRQb3MueX1weClgKTtcbiAgICAgICAgYXBwbHlBbmNob3JDbGFzcyh0aGlzLl9jb250YWluZXIsIGFuY2hvciwgJ3BvcHVwJyk7XG4gICAgfVxuXG4gICAgX29uQ2xvc2UoKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVPZmZzZXQob2Zmc2V0OiA/T2Zmc2V0KSB7XG4gICAgaWYgKCFvZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZU9mZnNldChuZXcgUG9pbnQoMCwgMCkpO1xuXG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygb2Zmc2V0ID09PSAnbnVtYmVyJykge1xuICAgICAgICAvLyBpbnB1dCBzcGVjaWZpZXMgYSByYWRpdXMgZnJvbSB3aGljaCB0byBjYWxjdWxhdGUgb2Zmc2V0cyBhdCBhbGwgcG9zaXRpb25zXG4gICAgICAgIGNvbnN0IGNvcm5lck9mZnNldCA9IE1hdGgucm91bmQoTWF0aC5zcXJ0KDAuNSAqIE1hdGgucG93KG9mZnNldCwgMikpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdjZW50ZXInOiBuZXcgUG9pbnQoMCwgMCksXG4gICAgICAgICAgICAndG9wJzogbmV3IFBvaW50KDAsIG9mZnNldCksXG4gICAgICAgICAgICAndG9wLWxlZnQnOiBuZXcgUG9pbnQoY29ybmVyT2Zmc2V0LCBjb3JuZXJPZmZzZXQpLFxuICAgICAgICAgICAgJ3RvcC1yaWdodCc6IG5ldyBQb2ludCgtY29ybmVyT2Zmc2V0LCBjb3JuZXJPZmZzZXQpLFxuICAgICAgICAgICAgJ2JvdHRvbSc6IG5ldyBQb2ludCgwLCAtb2Zmc2V0KSxcbiAgICAgICAgICAgICdib3R0b20tbGVmdCc6IG5ldyBQb2ludChjb3JuZXJPZmZzZXQsIC1jb3JuZXJPZmZzZXQpLFxuICAgICAgICAgICAgJ2JvdHRvbS1yaWdodCc6IG5ldyBQb2ludCgtY29ybmVyT2Zmc2V0LCAtY29ybmVyT2Zmc2V0KSxcbiAgICAgICAgICAgICdsZWZ0JzogbmV3IFBvaW50KG9mZnNldCwgMCksXG4gICAgICAgICAgICAncmlnaHQnOiBuZXcgUG9pbnQoLW9mZnNldCwgMClcbiAgICAgICAgfTtcblxuICAgIH0gZWxzZSBpZiAob2Zmc2V0IGluc3RhbmNlb2YgUG9pbnQgfHwgQXJyYXkuaXNBcnJheShvZmZzZXQpKSB7XG4gICAgICAgIC8vIGlucHV0IHNwZWNpZmllcyBhIHNpbmdsZSBvZmZzZXQgdG8gYmUgYXBwbGllZCB0byBhbGwgcG9zaXRpb25zXG4gICAgICAgIGNvbnN0IGNvbnZlcnRlZE9mZnNldCA9IFBvaW50LmNvbnZlcnQob2Zmc2V0KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdjZW50ZXInOiBjb252ZXJ0ZWRPZmZzZXQsXG4gICAgICAgICAgICAndG9wJzogY29udmVydGVkT2Zmc2V0LFxuICAgICAgICAgICAgJ3RvcC1sZWZ0JzogY29udmVydGVkT2Zmc2V0LFxuICAgICAgICAgICAgJ3RvcC1yaWdodCc6IGNvbnZlcnRlZE9mZnNldCxcbiAgICAgICAgICAgICdib3R0b20nOiBjb252ZXJ0ZWRPZmZzZXQsXG4gICAgICAgICAgICAnYm90dG9tLWxlZnQnOiBjb252ZXJ0ZWRPZmZzZXQsXG4gICAgICAgICAgICAnYm90dG9tLXJpZ2h0JzogY29udmVydGVkT2Zmc2V0LFxuICAgICAgICAgICAgJ2xlZnQnOiBjb252ZXJ0ZWRPZmZzZXQsXG4gICAgICAgICAgICAncmlnaHQnOiBjb252ZXJ0ZWRPZmZzZXRcbiAgICAgICAgfTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGlucHV0IHNwZWNpZmllcyBhbiBvZmZzZXQgcGVyIHBvc2l0aW9uXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnY2VudGVyJzogUG9pbnQuY29udmVydChvZmZzZXRbJ2NlbnRlciddIHx8IFswLCAwXSksXG4gICAgICAgICAgICAndG9wJzogUG9pbnQuY29udmVydChvZmZzZXRbJ3RvcCddIHx8IFswLCAwXSksXG4gICAgICAgICAgICAndG9wLWxlZnQnOiBQb2ludC5jb252ZXJ0KG9mZnNldFsndG9wLWxlZnQnXSB8fCBbMCwgMF0pLFxuICAgICAgICAgICAgJ3RvcC1yaWdodCc6IFBvaW50LmNvbnZlcnQob2Zmc2V0Wyd0b3AtcmlnaHQnXSB8fCBbMCwgMF0pLFxuICAgICAgICAgICAgJ2JvdHRvbSc6IFBvaW50LmNvbnZlcnQob2Zmc2V0Wydib3R0b20nXSB8fCBbMCwgMF0pLFxuICAgICAgICAgICAgJ2JvdHRvbS1sZWZ0JzogUG9pbnQuY29udmVydChvZmZzZXRbJ2JvdHRvbS1sZWZ0J10gfHwgWzAsIDBdKSxcbiAgICAgICAgICAgICdib3R0b20tcmlnaHQnOiBQb2ludC5jb252ZXJ0KG9mZnNldFsnYm90dG9tLXJpZ2h0J10gfHwgWzAsIDBdKSxcbiAgICAgICAgICAgICdsZWZ0JzogUG9pbnQuY29udmVydChvZmZzZXRbJ2xlZnQnXSB8fCBbMCwgMF0pLFxuICAgICAgICAgICAgJ3JpZ2h0JzogUG9pbnQuY29udmVydChvZmZzZXRbJ3JpZ2h0J10gfHwgWzAsIDBdKVxuICAgICAgICB9O1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBzdXBwb3J0ZWQgZnJvbSAnQG1hcGJveC9tYXBib3gtZ2wtc3VwcG9ydGVkJztcblxuaW1wb3J0IHt2ZXJzaW9ufSBmcm9tICcuLi9wYWNrYWdlLmpzb24nO1xuaW1wb3J0IE1hcCBmcm9tICcuL3VpL21hcCc7XG5pbXBvcnQgTmF2aWdhdGlvbkNvbnRyb2wgZnJvbSAnLi91aS9jb250cm9sL25hdmlnYXRpb25fY29udHJvbCc7XG5pbXBvcnQgR2VvbG9jYXRlQ29udHJvbCBmcm9tICcuL3VpL2NvbnRyb2wvZ2VvbG9jYXRlX2NvbnRyb2wnO1xuaW1wb3J0IEF0dHJpYnV0aW9uQ29udHJvbCBmcm9tICcuL3VpL2NvbnRyb2wvYXR0cmlidXRpb25fY29udHJvbCc7XG5pbXBvcnQgU2NhbGVDb250cm9sIGZyb20gJy4vdWkvY29udHJvbC9zY2FsZV9jb250cm9sJztcbmltcG9ydCBGdWxsc2NyZWVuQ29udHJvbCBmcm9tICcuL3VpL2NvbnRyb2wvZnVsbHNjcmVlbl9jb250cm9sJztcbmltcG9ydCBQb3B1cCBmcm9tICcuL3VpL3BvcHVwJztcbmltcG9ydCBNYXJrZXIgZnJvbSAnLi91aS9tYXJrZXInO1xuaW1wb3J0IFN0eWxlIGZyb20gJy4vc3R5bGUvc3R5bGUnO1xuaW1wb3J0IExuZ0xhdCBmcm9tICcuL2dlby9sbmdfbGF0JztcbmltcG9ydCBMbmdMYXRCb3VuZHMgZnJvbSAnLi9nZW8vbG5nX2xhdF9ib3VuZHMnO1xuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IE1lcmNhdG9yQ29vcmRpbmF0ZSBmcm9tICcuL2dlby9tZXJjYXRvcl9jb29yZGluYXRlJztcbmltcG9ydCB7RXZlbnRlZH0gZnJvbSAnLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IGNvbmZpZyBmcm9tICcuL3V0aWwvY29uZmlnJztcbmltcG9ydCB7RGVidWd9IGZyb20gJy4vdXRpbC9kZWJ1Zyc7XG5pbXBvcnQge2lzU2FmYXJpfSBmcm9tICcuL3V0aWwvdXRpbCc7XG5pbXBvcnQge3NldFJUTFRleHRQbHVnaW4sIGdldFJUTFRleHRQbHVnaW5TdGF0dXN9IGZyb20gJy4vc291cmNlL3J0bF90ZXh0X3BsdWdpbic7XG5pbXBvcnQgV29ya2VyUG9vbCBmcm9tICcuL3V0aWwvd29ya2VyX3Bvb2wnO1xuaW1wb3J0IHtwcmV3YXJtLCBjbGVhclByZXdhcm1lZFJlc291cmNlc30gZnJvbSAnLi91dGlsL2dsb2JhbF93b3JrZXJfcG9vbCc7XG5pbXBvcnQge2NsZWFyVGlsZUNhY2hlfSBmcm9tICcuL3V0aWwvdGlsZV9yZXF1ZXN0X2NhY2hlJztcbmltcG9ydCB7UGVyZm9ybWFuY2VVdGlsc30gZnJvbSAnLi91dGlsL3BlcmZvcm1hbmNlJztcblxuY29uc3QgZXhwb3J0ZWQgPSB7XG4gICAgdmVyc2lvbixcbiAgICBzdXBwb3J0ZWQsXG4gICAgc2V0UlRMVGV4dFBsdWdpbixcbiAgICBnZXRSVExUZXh0UGx1Z2luU3RhdHVzLFxuICAgIE1hcCxcbiAgICBOYXZpZ2F0aW9uQ29udHJvbCxcbiAgICBHZW9sb2NhdGVDb250cm9sLFxuICAgIEF0dHJpYnV0aW9uQ29udHJvbCxcbiAgICBTY2FsZUNvbnRyb2wsXG4gICAgRnVsbHNjcmVlbkNvbnRyb2wsXG4gICAgUG9wdXAsXG4gICAgTWFya2VyLFxuICAgIFN0eWxlLFxuICAgIExuZ0xhdCxcbiAgICBMbmdMYXRCb3VuZHMsXG4gICAgUG9pbnQsXG4gICAgTWVyY2F0b3JDb29yZGluYXRlLFxuICAgIEV2ZW50ZWQsXG4gICAgY29uZmlnLFxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemVzIHJlc291cmNlcyBsaWtlIFdlYldvcmtlcnMgdGhhdCBjYW4gYmUgc2hhcmVkIGFjcm9zcyBtYXBzIHRvIGxvd2VyIGxvYWRcbiAgICAgKiB0aW1lcyBpbiBzb21lIHNpdHVhdGlvbnMuIGBtYXBib3hnbC53b3JrZXJVcmxgIGFuZCBgbWFwYm94Z2wud29ya2VyQ291bnRgLCBpZiBiZWluZ1xuICAgICAqIHVzZWQsIG11c3QgYmUgc2V0IGJlZm9yZSBgcHJld2FybSgpYCBpcyBjYWxsZWQgdG8gaGF2ZSBhbiBlZmZlY3QuXG4gICAgICpcbiAgICAgKiBCeSBkZWZhdWx0LCB0aGUgbGlmZWN5Y2xlIG9mIHRoZXNlIHJlc291cmNlcyBpcyBtYW5hZ2VkIGF1dG9tYXRpY2FsbHksIGFuZCB0aGV5IGFyZVxuICAgICAqIGxhemlseSBpbml0aWFsaXplZCB3aGVuIGEgTWFwIGlzIGZpcnN0IGNyZWF0ZWQuIEJ5IGludm9raW5nIGBwcmV3YXJtKClgLCB0aGVzZVxuICAgICAqIHJlc291cmNlcyB3aWxsIGJlIGNyZWF0ZWQgYWhlYWQgb2YgdGltZSwgYW5kIHdpbGwgbm90IGJlIGNsZWFyZWQgd2hlbiB0aGUgbGFzdCBNYXBcbiAgICAgKiBpcyByZW1vdmVkIGZyb20gdGhlIHBhZ2UuIFRoaXMgYWxsb3dzIHRoZW0gdG8gYmUgcmUtdXNlZCBieSBuZXcgTWFwIGluc3RhbmNlcyB0aGF0XG4gICAgICogYXJlIGNyZWF0ZWQgbGF0ZXIuIFRoZXkgY2FuIGJlIG1hbnVhbGx5IGNsZWFyZWQgYnkgY2FsbGluZ1xuICAgICAqIGBtYXBib3hnbC5jbGVhclByZXdhcm1lZFJlc291cmNlcygpYC4gVGhpcyBpcyBvbmx5IG5lY2Vzc2FyeSBpZiB5b3VyIHdlYiBwYWdlIHJlbWFpbnNcbiAgICAgKiBhY3RpdmUgYnV0IHN0b3BzIHVzaW5nIG1hcHMgYWx0b2dldGhlci5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgcHJpbWFyaWx5IHVzZWZ1bCB3aGVuIHVzaW5nIEdMLUpTIG1hcHMgaW4gYSBzaW5nbGUgcGFnZSBhcHAsIHdoZXJlaW4gYSB1c2VyXG4gICAgICogd291bGQgbmF2aWdhdGUgYmV0d2VlbiB2YXJpb3VzIHZpZXdzIHRoYXQgY2FuIGNhdXNlIE1hcCBpbnN0YW5jZXMgdG8gY29uc3RhbnRseSBiZVxuICAgICAqIGNyZWF0ZWQgYW5kIGRlc3Ryb3llZC5cbiAgICAgKlxuICAgICAqIEBmdW5jdGlvbiBwcmV3YXJtXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXBib3hnbC5wcmV3YXJtKClcbiAgICAgKi9cbiAgICBwcmV3YXJtLFxuICAgIC8qKlxuICAgICAqIENsZWFycyB1cCByZXNvdXJjZXMgdGhhdCBoYXZlIHByZXZpb3VzbHkgYmVlbiBjcmVhdGVkIGJ5IGBtYXBib3hnbC5wcmV3YXJtKClgLlxuICAgICAqIE5vdGUgdGhhdCB0aGlzIGlzIHR5cGljYWxseSBub3QgbmVjZXNzYXJ5LiBZb3Ugc2hvdWxkIG9ubHkgY2FsbCB0aGlzIGZ1bmN0aW9uXG4gICAgICogaWYgeW91IGV4cGVjdCB0aGUgdXNlciBvZiB5b3VyIGFwcCB0byBub3QgcmV0dXJuIHRvIGEgTWFwIHZpZXcgYXQgYW55IHBvaW50XG4gICAgICogaW4geW91ciBhcHBsaWNhdGlvbi5cbiAgICAgKlxuICAgICAqIEBmdW5jdGlvbiBjbGVhclByZXdhcm1lZFJlc291cmNlc1xuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwYm94Z2wuY2xlYXJQcmV3YXJtZWRSZXNvdXJjZXMoKVxuICAgICAqL1xuICAgIGNsZWFyUHJld2FybWVkUmVzb3VyY2VzLFxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbmQgc2V0cyB0aGUgbWFwJ3MgW2FjY2VzcyB0b2tlbl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9oZWxwL2RlZmluZS1hY2Nlc3MtdG9rZW4vKS5cbiAgICAgKlxuICAgICAqIEB2YXIge3N0cmluZ30gYWNjZXNzVG9rZW5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY3VycmVudGx5IHNldCBhY2Nlc3MgdG9rZW4uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXBib3hnbC5hY2Nlc3NUb2tlbiA9IG15QWNjZXNzVG9rZW47XG4gICAgICogQHNlZSBbRGlzcGxheSBhIG1hcF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZXMvKVxuICAgICAqL1xuICAgIGdldCBhY2Nlc3NUb2tlbigpOiA/c3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGNvbmZpZy5BQ0NFU1NfVE9LRU47XG4gICAgfSxcblxuICAgIHNldCBhY2Nlc3NUb2tlbih0b2tlbjogc3RyaW5nKSB7XG4gICAgICAgIGNvbmZpZy5BQ0NFU1NfVE9LRU4gPSB0b2tlbjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbmQgc2V0cyB0aGUgbWFwJ3MgZGVmYXVsdCBBUEkgVVJMIGZvciByZXF1ZXN0aW5nIHRpbGVzLCBzdHlsZXMsIHNwcml0ZXMsIGFuZCBnbHlwaHNcbiAgICAgKlxuICAgICAqIEB2YXIge3N0cmluZ30gYmFzZUFwaVVybFxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjdXJyZW50IGJhc2UgQVBJIFVSTC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcGJveGdsLmJhc2VBcGlVcmwgPSAnaHR0cHM6Ly9hcGkubWFwYm94LmNvbSc7XG4gICAgICovXG4gICAgZ2V0IGJhc2VBcGlVcmwoKTogP3N0cmluZyB7XG4gICAgICAgIHJldHVybiBjb25maWcuQVBJX1VSTDtcbiAgICB9LFxuXG4gICAgc2V0IGJhc2VBcGlVcmwodXJsOiBzdHJpbmcpIHtcbiAgICAgICAgY29uZmlnLkFQSV9VUkwgPSB1cmw7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldHMgYW5kIHNldHMgdGhlIG51bWJlciBvZiB3ZWIgd29ya2VycyBpbnN0YW50aWF0ZWQgb24gYSBwYWdlIHdpdGggR0wgSlMgbWFwcy5cbiAgICAgKiBCeSBkZWZhdWx0LCBpdCBpcyBzZXQgdG8gaGFsZiB0aGUgbnVtYmVyIG9mIENQVSBjb3JlcyAoY2FwcGVkIGF0IDYpLlxuICAgICAqIE1ha2Ugc3VyZSB0byBzZXQgdGhpcyBwcm9wZXJ0eSBiZWZvcmUgY3JlYXRpbmcgYW55IG1hcCBpbnN0YW5jZXMgZm9yIGl0IHRvIGhhdmUgZWZmZWN0LlxuICAgICAqXG4gICAgICogQHZhciB7c3RyaW5nfSB3b3JrZXJDb3VudFxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IE51bWJlciBvZiB3b3JrZXJzIGN1cnJlbnRseSBjb25maWd1cmVkLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwYm94Z2wud29ya2VyQ291bnQgPSAyO1xuICAgICAqL1xuICAgIGdldCB3b3JrZXJDb3VudCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gV29ya2VyUG9vbC53b3JrZXJDb3VudDtcbiAgICB9LFxuXG4gICAgc2V0IHdvcmtlckNvdW50KGNvdW50OiBudW1iZXIpIHtcbiAgICAgICAgV29ya2VyUG9vbC53b3JrZXJDb3VudCA9IGNvdW50O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBpbWFnZXMgKHJhc3RlciB0aWxlcywgc3ByaXRlcywgaWNvbnMpIHRvIGxvYWQgaW4gcGFyYWxsZWwsXG4gICAgICogd2hpY2ggYWZmZWN0cyBwZXJmb3JtYW5jZSBpbiByYXN0ZXItaGVhdnkgbWFwcy4gMTYgYnkgZGVmYXVsdC5cbiAgICAgKlxuICAgICAqIEB2YXIge3N0cmluZ30gbWF4UGFyYWxsZWxJbWFnZVJlcXVlc3RzXG4gICAgICogQHJldHVybnMge251bWJlcn0gTnVtYmVyIG9mIHBhcmFsbGVsIHJlcXVlc3RzIGN1cnJlbnRseSBjb25maWd1cmVkLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwYm94Z2wubWF4UGFyYWxsZWxJbWFnZVJlcXVlc3RzID0gMTA7XG4gICAgICovXG4gICAgZ2V0IG1heFBhcmFsbGVsSW1hZ2VSZXF1ZXN0cygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gY29uZmlnLk1BWF9QQVJBTExFTF9JTUFHRV9SRVFVRVNUUztcbiAgICB9LFxuXG4gICAgc2V0IG1heFBhcmFsbGVsSW1hZ2VSZXF1ZXN0cyhudW1SZXF1ZXN0czogbnVtYmVyKSB7XG4gICAgICAgIGNvbmZpZy5NQVhfUEFSQUxMRUxfSU1BR0VfUkVRVUVTVFMgPSBudW1SZXF1ZXN0cztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2xlYXJzIGJyb3dzZXIgc3RvcmFnZSB1c2VkIGJ5IHRoaXMgbGlicmFyeS4gVXNpbmcgdGhpcyBtZXRob2QgZmx1c2hlcyB0aGUgTWFwYm94IHRpbGVcbiAgICAgKiBjYWNoZSB0aGF0IGlzIG1hbmFnZWQgYnkgdGhpcyBsaWJyYXJ5LiBUaWxlcyBtYXkgc3RpbGwgYmUgY2FjaGVkIGJ5IHRoZSBicm93c2VyXG4gICAgICogaW4gc29tZSBjYXNlcy5cbiAgICAgKlxuICAgICAqIFRoaXMgQVBJIGlzIHN1cHBvcnRlZCBvbiBicm93c2VycyB3aGVyZSB0aGUgW2BDYWNoZWAgQVBJXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQ2FjaGUpXG4gICAgICogaXMgc3VwcG9ydGVkIGFuZCBlbmFibGVkLiBUaGlzIGluY2x1ZGVzIGFsbCBtYWpvciBicm93c2VycyB3aGVuIHBhZ2VzIGFyZSBzZXJ2ZWQgb3ZlclxuICAgICAqIGBodHRwczovL2AsIGV4Y2VwdCBJbnRlcm5ldCBFeHBsb3JlciBhbmQgRWRnZSBNb2JpbGUuXG4gICAgICpcbiAgICAgKiBXaGVuIGNhbGxlZCBpbiB1bnN1cHBvcnRlZCBicm93c2VycyBvciBlbnZpcm9ubWVudHMgKHByaXZhdGUgb3IgaW5jb2duaXRvIG1vZGUpLCB0aGVcbiAgICAgKiBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCB3aXRoIGFuIGVycm9yIGFyZ3VtZW50LlxuICAgICAqXG4gICAgICogQGZ1bmN0aW9uIGNsZWFyU3RvcmFnZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCB3aXRoIGFuIGVycm9yIGFyZ3VtZW50IGlmIHRoZXJlIGlzIGFuIGVycm9yLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwYm94Z2wuY2xlYXJTdG9yYWdlKCk7XG4gICAgICovXG4gICAgY2xlYXJTdG9yYWdlKGNhbGxiYWNrPzogKGVycjogP0Vycm9yKSA9PiB2b2lkKSB7XG4gICAgICAgIGNsZWFyVGlsZUNhY2hlKGNhbGxiYWNrKTtcbiAgICB9LFxuXG4gICAgd29ya2VyVXJsOiAnJ1xufTtcblxuLy9UaGlzIGdldHMgYXV0b21hdGljYWxseSBzdHJpcHBlZCBvdXQgaW4gcHJvZHVjdGlvbiBidWlsZHMuXG5EZWJ1Zy5leHRlbmQoZXhwb3J0ZWQsIHtpc1NhZmFyaSwgZ2V0UGVyZm9ybWFuY2VNZXRyaWNzOiBQZXJmb3JtYW5jZVV0aWxzLmdldFBlcmZvcm1hbmNlTWV0cmljc30pO1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIE1hcGJveCBHTCBKUyBpbiB1c2UgYXMgc3BlY2lmaWVkIGluIGBwYWNrYWdlLmpzb25gLFxuICogYENIQU5HRUxPRy5tZGAsIGFuZCB0aGUgR2l0SHViIHJlbGVhc2UuXG4gKlxuICogQHZhciB7c3RyaW5nfSB2ZXJzaW9uXG4gKi9cblxuLyoqXG4gKiBUZXN0IHdoZXRoZXIgdGhlIGJyb3dzZXIgW3N1cHBvcnRzIE1hcGJveCBHTCBKU10oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9oZWxwL21hcGJveC1icm93c2VyLXN1cHBvcnQvI21hcGJveC1nbC1qcykuXG4gKlxuICogQGZ1bmN0aW9uIHN1cHBvcnRlZFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0PWZhbHNlXSBJZiBgdHJ1ZWAsXG4gKiAgIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiBgZmFsc2VgIGlmIHRoZSBwZXJmb3JtYW5jZSBvZiBNYXBib3ggR0wgSlMgd291bGRcbiAqICAgYmUgZHJhbWF0aWNhbGx5IHdvcnNlIHRoYW4gZXhwZWN0ZWQgKGUuZy4gYSBzb2Z0d2FyZSBXZWJHTCByZW5kZXJlciB3b3VsZCBiZSB1c2VkKS5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiBAZXhhbXBsZVxuICogbWFwYm94Z2wuc3VwcG9ydGVkKCkgLy8gPSB0cnVlXG4gKiBAc2VlIFtDaGVjayBmb3IgYnJvd3NlciBzdXBwb3J0XShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2NoZWNrLWZvci1zdXBwb3J0LylcbiAqL1xuXG4vKipcbiAqIFNldHMgdGhlIG1hcCdzIFtSVEwgdGV4dCBwbHVnaW5dKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3BsdWdpbnMvI21hcGJveC1nbC1ydGwtdGV4dCkuXG4gKiBOZWNlc3NhcnkgZm9yIHN1cHBvcnRpbmcgdGhlIEFyYWJpYyBhbmQgSGVicmV3IGxhbmd1YWdlcywgd2hpY2ggYXJlIHdyaXR0ZW4gcmlnaHQtdG8tbGVmdC4gTWFwYm94IFN0dWRpbyBsb2FkcyB0aGlzIHBsdWdpbiBieSBkZWZhdWx0LlxuICpcbiAqIEBmdW5jdGlvbiBzZXRSVExUZXh0UGx1Z2luXG4gKiBAcGFyYW0ge3N0cmluZ30gcGx1Z2luVVJMIFVSTCBwb2ludGluZyB0byB0aGUgTWFwYm94IFJUTCB0ZXh0IHBsdWdpbiBzb3VyY2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgd2l0aCBhbiBlcnJvciBhcmd1bWVudCBpZiB0aGVyZSBpcyBhbiBlcnJvci5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gbGF6eSBJZiBzZXQgdG8gYHRydWVgLCBtYXBib3hnbCB3aWxsIGRlZmVyIGxvYWRpbmcgdGhlIHBsdWdpbiB1bnRpbCBydGwgdGV4dCBpcyBlbmNvdW50ZXJlZCxcbiAqICAgIHJ0bCB0ZXh0IHdpbGwgdGhlbiBiZSByZW5kZXJlZCBvbmx5IGFmdGVyIHRoZSBwbHVnaW4gZmluaXNoZXMgbG9hZGluZy5cbiAqIEBleGFtcGxlXG4gKiBtYXBib3hnbC5zZXRSVExUZXh0UGx1Z2luKCdodHRwczovL2FwaS5tYXBib3guY29tL21hcGJveC1nbC1qcy9wbHVnaW5zL21hcGJveC1nbC1ydGwtdGV4dC92MC4yLjAvbWFwYm94LWdsLXJ0bC10ZXh0LmpzJyk7XG4gKiBAc2VlIFtBZGQgc3VwcG9ydCBmb3IgcmlnaHQtdG8tbGVmdCBzY3JpcHRzXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL21hcGJveC1nbC1ydGwtdGV4dC8pXG4gKi9cblxuLyoqXG4gICogR2V0cyB0aGUgbWFwJ3MgW1JUTCB0ZXh0IHBsdWdpbl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvcGx1Z2lucy8jbWFwYm94LWdsLXJ0bC10ZXh0KSBzdGF0dXMuXG4gICogVGhlIHN0YXR1cyBjYW4gYmUgYHVuYXZhaWxhYmxlYCAoaS5lLiBub3QgcmVxdWVzdGVkIG9yIHJlbW92ZWQpLCBgbG9hZGluZ2AsIGBsb2FkZWRgIG9yIGBlcnJvcmAuXG4gICogSWYgdGhlIHN0YXR1cyBpcyBgbG9hZGVkYCBhbmQgdGhlIHBsdWdpbiBpcyByZXF1ZXN0ZWQgYWdhaW4sIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duLlxuICAqXG4gICogQGZ1bmN0aW9uIGdldFJUTFRleHRQbHVnaW5TdGF0dXNcbiAgKiBAZXhhbXBsZVxuICAqIGNvbnN0IHBsdWdpblN0YXR1cyA9IG1hcGJveGdsLmdldFJUTFRleHRQbHVnaW5TdGF0dXMoKTtcbiAgKi9cblxuZXhwb3J0IGRlZmF1bHQgZXhwb3J0ZWQ7XG5cbi8vIGNhbmFyeSBhc3NlcnQ6IHVzZWQgdG8gY29uZmlybSB0aGF0IGFzc2VydHMgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSBwcm9kdWN0aW9uIGJ1aWxkXG5hc3NlcnQodHJ1ZSwgJ2NhbmFyeSBhc3NlcnQnKTtcbiIsIi8vXG4vLyBPdXIgY3VzdG9tIGludHJvIHByb3ZpZGVzIGEgc3BlY2lhbGl6ZWQgXCJkZWZpbmUoKVwiIGZ1bmN0aW9uLCBjYWxsZWQgYnkgdGhlXG4vLyBBTUQgbW9kdWxlcyBiZWxvdywgdGhhdCBzZXRzIHVwIHRoZSB3b3JrZXIgYmxvYiBVUkwgYW5kIHRoZW4gZXhlY3V0ZXMgdGhlXG4vLyBtYWluIG1vZHVsZSwgc3RvcmluZyBpdHMgZXhwb3J0ZWQgdmFsdWUgYXMgJ21hcGJveGdsJ1xuXG4vLyBUaGUgdGhyZWUgXCJjaHVua3NcIiBpbXBvcnRlZCBoZXJlIGFyZSBwcm9kdWNlZCBieSBhIGZpcnN0IFJvbGx1cCBwYXNzLFxuLy8gd2hpY2ggb3V0cHV0cyB0aGVtIGFzIEFNRCBtb2R1bGVzLlxuXG4vLyBTaGFyZWQgZGVwZW5kZW5jaWVzLCBpLmUuOlxuLypcbmRlZmluZShbJ2V4cG9ydHMnXSwgZnVuY3Rpb24gKGV4cG9ydHMpIHtcbiAgICAvLyBDb2RlIGZvciBhbGwgY29tbW9uIGRlcGVuZGVuY2llc1xuICAgIC8vIEVhY2ggbW9kdWxlJ3MgZXhwb3J0cyBhcmUgYXR0YWNoZWQgYXR0YWNoZWQgdG8gJ2V4cG9ydHMnICh3aXRoXG4gICAgLy8gbmFtZXMgcmV3cml0dGVuIHRvIGF2b2lkIGNvbGxpc2lvbnMsIGV0Yy4pXG59KVxuKi9cbmltcG9ydCAnLi9idWlsZC9tYXBib3hnbC9zaGFyZWQnO1xuXG4vLyBXb3JrZXIgYW5kIGl0cyB1bmlxdWUgZGVwZW5kZW5jaWVzLCBpLmUuOlxuLypcbmRlZmluZShbJy4vc2hhcmVkLmpzJ10sIGZ1bmN0aW9uIChfX3NoYXJlZF9fanMpIHtcbiAgICAvLyAgQ29kZSBmb3Igd29ya2VyIHNjcmlwdCBhbmQgaXRzIHVuaXF1ZSBkZXBlbmRlbmNpZXMuXG4gICAgLy8gIEV4cGVjdHMgdGhlIG91dHB1dCBvZiAnc2hhcmVkJyBtb2R1bGUgdG8gYmUgcGFzc2VkIGluIGFzIGFuIGFyZ3VtZW50LFxuICAgIC8vICBzaW5jZSBhbGwgcmVmZXJlbmNlcyB0byBjb21tb24gZGVwcyBsb29rIGxpa2UsIGUuZy4sXG4gICAgLy8gIF9fc2hhcmVkX19qcy5zaGFwZVRleHQoKS5cbn0pO1xuKi9cbi8vIFdoZW4gdGhpcyB3cmFwcGVyIGZ1bmN0aW9uIGlzIHBhc3NlZCB0byBvdXIgY3VzdG9tIGRlZmluZSgpIGFib3ZlLFxuLy8gaXQgZ2V0cyBzdHJpbmdpZmllZCwgdG9nZXRoZXIgd2l0aCB0aGUgc2hhcmVkIHdyYXBwZXIgKHVzaW5nXG4vLyBGdW5jdGlvbi50b1N0cmluZygpKSwgYW5kIHRoZSByZXN1bHRpbmcgc3RyaW5nIG9mIGNvZGUgaXMgbWFkZSBpbnRvIGFcbi8vIEJsb2IgVVJMIHRoYXQgZ2V0cyB1c2VkIGJ5IHRoZSBtYWluIG1vZHVsZSB0byBjcmVhdGUgdGhlIHdlYiB3b3JrZXJzLlxuaW1wb3J0ICcuL2J1aWxkL21hcGJveGdsL3dvcmtlcic7XG5cbi8vIE1haW4gbW9kdWxlIGFuZCBpdHMgdW5pcXVlIGRlcGVuZGVuY2llc1xuLypcbmRlZmluZShbJy4vc2hhcmVkLmpzJ10sIGZ1bmN0aW9uIChfX3NoYXJlZF9fanMpIHtcbiAgICAvLyAgQ29kZSBmb3IgbWFpbiBHTCBKUyBtb2R1bGUgYW5kIGl0cyB1bmlxdWUgZGVwZW5kZW5jaWVzLlxuICAgIC8vICBFeHBlY3RzIHRoZSBvdXRwdXQgb2YgJ3NoYXJlZCcgbW9kdWxlIHRvIGJlIHBhc3NlZCBpbiBhcyBhbiBhcmd1bWVudCxcbiAgICAvLyAgc2luY2UgYWxsIHJlZmVyZW5jZXMgdG8gY29tbW9uIGRlcHMgbG9vayBsaWtlLCBlLmcuLFxuICAgIC8vICBfX3NoYXJlZF9fanMuc2hhcGVUZXh0KCkuXG4gICAgLy9cbiAgICAvLyAgUmV0dXJucyB0aGUgYWN0dWFsIG1hcGJveGdsIChpLmUuIHNyYy9pbmRleC5qcylcbn0pO1xuKi9cbmltcG9ydCAnLi9idWlsZC9tYXBib3hnbC9pbmRleCc7XG5cbmV4cG9ydCBkZWZhdWx0IG1hcGJveGdsO1xuIl0sIm5hbWVzIjpbImFyZ3VtZW50cyIsInJlcXVpcmUkJDAiLCJyZXF1aXJlJCQxIiwibGV0IiwiY29uc3QiLCJVbml0QmV6aWVyIiwid2luZG93IiwiZXhwb3J0ZWQiLCJicm93c2VyIiwid2VicFN1cHBvcnRlZCIsInNka1ZlcnNpb24iLCJ0aGlzIiwic3VwZXIiLCJhc3NlcnQiLCJsaXN0ZW5lciIsInBhcnNlQ1NTQ29sb3IiLCJ0b1N0cmluZyIsInR5cGUiLCJ0eXBlcyIsImFyZyIsInZhbHVlVG9TdHJpbmciLCJpIiwiZXhwZWN0ZWQiLCJwYXJzZWQiLCJsaW5lIiwicCIsInRpbGVQb2ludHMiLCJwb2ludCIsInRpbGVMaW5lcyIsImVycm9yIiwiYXJyYXkiLCJpbnRlcnBvbGF0ZU51bWJlciIsIm91dHB1dEluZGV4IiwibHQiLCJydCIsInR5cGVUb1N0cmluZyIsImV4dGVuZCIsInN0b3AiLCJpbnRlcnBvbGF0aW9uVHlwZSIsImRlZmluaXRpb25zIiwiaXNDb25zdGFudC5pc1N0YXRlQ29uc3RhbnQiLCJpc0ZlYXR1cmVDb25zdGFudCIsImlzQ29uc3RhbnQuaXNGZWF0dXJlQ29uc3RhbnQiLCJpc0NvbnN0YW50LmlzR2xvYmFsUHJvcGVydHlDb25zdGFudCIsInZhbGlkYXRlU3BlYyIsImVsZW1lbnRTcGVjS2V5IiwibGF0ZXN0U3R5bGVTcGVjIiwidmFsaWRhdGVTb3VyY2UiLCJ2YWxpZGF0ZUxpZ2h0IiwidmFsaWRhdGVGaWx0ZXIiLCJ2YWxpZGF0ZVBhaW50UHJvcGVydHkiLCJ2YWxpZGF0ZUxheW91dFByb3BlcnR5IiwiR3JpZCIsIm5hbWUiLCJpc0NoYXIiLCJydGxUZXh0UGx1Z2luIiwicHJvcGVydHkiLCJzdHlsZVNwZWMiLCJQb2ludCIsImxheW91dCIsIm11cm11cjMiLCJtdXJtdXIyIiwiU3RydWN0QXJyYXlMYXlvdXQiLCJQYXR0ZXJuTGF5b3V0QXJyYXkiLCJFWFRFTlQiLCJDaXJjbGVMYXlvdXRBcnJheSIsIlRyaWFuZ2xlSW5kZXhBcnJheSIsImxheW91dEF0dHJpYnV0ZXMiLCJidWNrZXRGZWF0dXJlIiwiZmVhdHVyZSIsImluZGV4Iiwic291cmNlTGF5ZXJJbmRleCIsInBhaW50IiwiZ2xNYXRyaXguQVJSQVlfVFlQRSIsImNsb25lIiwiZXF1YWxzIiwiZ2xNYXRyaXguRVBTSUxPTiIsImNyZWF0ZSIsImNvcHkiLCJpZGVudGl0eSIsImZyb21WYWx1ZXMiLCJzZXQiLCJpbnZlcnQiLCJkZXRlcm1pbmFudCIsIm11bHRpcGx5Iiwicm90YXRlIiwic2NhbGUiLCJ0cmFuc2xhdGUiLCJmcm9tUm90YXRpb24iLCJmcm9tU2NhbGluZyIsInN0ciIsImZyb2IiLCJhZGQiLCJzdWJ0cmFjdCIsIm11bHRpcGx5U2NhbGFyIiwibXVsdGlwbHlTY2FsYXJBbmRBZGQiLCJleGFjdEVxdWFscyIsIm11bCIsInN1YiIsInRyYW5zcG9zZSIsImFkam9pbnQiLCJmcm9tVHJhbnNsYXRpb24iLCJmcm9tUXVhdCIsImJlemllciIsImdsTWF0cml4LlJBTkRPTSIsInJvdGF0ZVgiLCJyb3RhdGVZIiwicm90YXRlWiIsImRpdmlkZSIsImNlaWwiLCJmbG9vciIsIm1pbiIsIm1heCIsInJvdW5kIiwic2NhbGVBbmRBZGQiLCJkaXN0YW5jZSIsInNxdWFyZWREaXN0YW5jZSIsImxlbmd0aCIsInNxdWFyZWRMZW5ndGgiLCJuZWdhdGUiLCJpbnZlcnNlIiwibm9ybWFsaXplIiwiZG90IiwiY3Jvc3MiLCJsZXJwIiwicmFuZG9tIiwidHJhbnNmb3JtTWF0NCIsInRyYW5zZm9ybVF1YXQiLCJ6ZXJvIiwiZGl2IiwiZGlzdCIsInNxckRpc3QiLCJsZW4iLCJzcXJMZW4iLCJmb3JFYWNoIiwidmVjNC5jbG9uZSIsInZlYzQuZnJvbVZhbHVlcyIsInZlYzQuY29weSIsInZlYzQuc2V0IiwidmVjNC5hZGQiLCJ2ZWM0LnNjYWxlIiwidmVjNC5kb3QiLCJ2ZWM0LmxlcnAiLCJ2ZWM0Lmxlbmd0aCIsInZlYzQuc3F1YXJlZExlbmd0aCIsInZlYzQubm9ybWFsaXplIiwidmVjNC5leGFjdEVxdWFscyIsInZlYzQuZXF1YWxzIiwidmVjMy5jcmVhdGUiLCJ2ZWMzLmZyb21WYWx1ZXMiLCJ2ZWMzLmRvdCIsInZlYzMuY3Jvc3MiLCJ2ZWMzLmxlbiIsInZlYzMubm9ybWFsaXplIiwibWF0My5jcmVhdGUiLCJmcm9tUm90YXRpb25UcmFuc2xhdGlvbiIsImZyb21NYXQ0IiwicXVhdC5jcmVhdGUiLCJtYXQ0LmdldFJvdGF0aW9uIiwibWF0NC5nZXRUcmFuc2xhdGlvbiIsInF1YXQuY29weSIsImdldFRyYW5zbGF0aW9uIiwicXVhdC5yb3RhdGVYIiwicXVhdC5yb3RhdGVZIiwicXVhdC5yb3RhdGVaIiwicXVhdC5kb3QiLCJjb25qdWdhdGUiLCJxdWF0Lmxlbmd0aCIsInF1YXQuc3F1YXJlZExlbmd0aCIsInRyYW5zZm9ybU1hdDMiLCJhbmdsZSIsInZlYzQudHJhbnNmb3JtTWF0NCIsInByb3BlcnRpZXMiLCJzd2FwIiwiRmlsbExheW91dEFycmF5IiwiTGluZUluZGV4QXJyYXkiLCJyaW5nIiwiZWFyY3V0IiwiY2xhc3NpZnlSaW5ncyIsInNpZ25lZEFyZWEiLCJWZWN0b3JUaWxlRmVhdHVyZSIsIlZlY3RvclRpbGVMYXllciIsInJlcXVpcmUkJDIiLCJtdnQiLCJFQVJDVVRfTUFYX1JJTkdTIiwiRmlsbEV4dHJ1c2lvbkxheW91dEFycmF5IiwicHJvamVjdFF1ZXJ5R2VvbWV0cnkiLCJ2ZWN0b3JUaWxlRmVhdHVyZVR5cGVzIiwiTGluZUxheW91dEFycmF5Iiwib2Zmc2V0IiwiUHJvdG9idWYiLCJib3giLCJpZCIsInNyYyIsImJpbiIsInciLCJoIiwidGFnZ2VkTGluZSIsImFsaWduIiwiaW50ZXJwb2xhdGUiLCJib3JkZXIiLCJjb2xsaXNpb25QYWRkaW5nIiwiZGVmYXVsdENvbXBhcmUiLCJRdWV1ZSIsIm1pblpvb20iLCJtYXhab29tIiwic2hhcGluZyIsImFuY2hvciIsImFkZFZlcnRleCIsIlN5bWJvbExheW91dEFycmF5IiwiU3ltYm9sRHluYW1pY0xheW91dEFycmF5IiwiU3ltYm9sT3BhY2l0eUFycmF5IiwidXBsb2FkIiwiQ29sbGlzaW9uVmVydGV4QXJyYXkiLCJtYXQ0LmlkZW50aXR5IiwiZ2xvYmFsUlRMVGV4dFBsdWdpbiIsInRyYW5zZm9ybVRleHQiLCJyZXNvbHZlZFRva2VucyIsIkNvbGxpc2lvbkJveExheW91dEFycmF5IiwiayIsImNpcmNsZSIsImhlYXRtYXAiLCJoaWxsc2hhZGUiLCJmaWxsIiwiZmlsbEV4dHJ1c2lvbiIsInN5bWJvbCIsImJhY2tncm91bmQiLCJyYXN0ZXIiLCJJbWFnZURhdGEiLCJJbWFnZUJpdG1hcCIsImNhbGxiYWNrIiwibWVyY2F0b3JYZnJvbUxuZyIsIm1lcmNhdG9yWWZyb21MYXQiLCJkZXNlcmlhbGl6ZSIsInByb3RvdHlwZUFjY2Vzc29ycyIsInNvdXJjZUxheWVyIiwibGF5ZXJTdGF0ZXMiLCJ2dCIsImZlYXR1cmVGaWx0ZXIiLCJHZW9KU09ORmVhdHVyZSIsImRlc2VyaWFsaXplQnVja2V0IiwiYnVja2V0IiwicmVmUHJvcGVydGllcyIsImNyZWF0ZVN0eWxlTGF5ZXIiLCJ2YWx1ZXMiLCJsYXllckNvbmZpZ3MiLCJsYXllciIsInBvdHBhY2siLCJBbHBoYUltYWdlIiwic3RhY2siLCJnbHlwaHMiLCJyZWdpc3RlciIsIk92ZXJzY2FsZWRUaWxlSUQiLCJDb2xsaXNpb25Cb3hBcnJheSIsIkRpY3Rpb25hcnlDb2RlciIsIkZlYXR1cmVJbmRleCIsIndhcm5PbmNlIiwibWFwT2JqZWN0IiwiSW1hZ2VBdGxhcyIsIlN5bWJvbEJ1Y2tldCIsInBlcmZvcm1TeW1ib2xMYXlvdXQiLCJMaW5lQnVja2V0IiwiRmlsbEJ1Y2tldCIsIkZpbGxFeHRydXNpb25CdWNrZXQiLCJFdmFsdWF0aW9uUGFyYW1ldGVycyIsImdldEFycmF5QnVmZmVyIiwiUmVxdWVzdFBlcmZvcm1hbmNlIiwiREVNRGF0YSIsIlJHQkFJbWFnZSIsImdlb21ldHJ5IiwiR2VvSlNPTldyYXBwZXIiLCJGZWF0dXJlV3JhcHBlciIsIlBiZiIsInNvcnQiLCJyZXdpbmQiLCJ0cmFuc2Zvcm0iLCJ2dHBiZiIsImdldEpTT04iLCJjcmVhdGVFeHByZXNzaW9uIiwiQWN0b3IiLCJlbmZvcmNlQ2FjaGVTaXplTGltaXQiLCJzZWxmIiwib3B0aW9ucyIsIlJlc291cmNlVHlwZSIsImdldEltYWdlIiwiRXJyb3JFdmVudCIsIkV2ZW50IiwiSW1hZ2VQb3NpdGlvbiIsIlRleHR1cmUiLCJFdmVudGVkIiwicGFyc2VHbHlwaFBCRiIsImFzeW5jQWxsIiwiVGlueVNERiIsInNwaGVyaWNhbFRvQ2FydGVzaWFuIiwiUHJvcGVydGllcyIsIkRhdGFDb25zdGFudFByb3BlcnR5IiwiVHJhbnNpdGlvbmFibGUiLCJlbmRzV2l0aCIsImVtaXRWYWxpZGF0aW9uRXJyb3JzIiwidmFsaWRhdGVTdHlsZSIsInVuaXF1ZUlkIiwicGljayIsIkxuZ0xhdEJvdW5kcyIsInBvc3RUdXJuc3RpbGVFdmVudCIsInBvc3RNYXBMb2FkRXZlbnQiLCJjYWNoZUVudHJ5UG9zc2libHlBZGRlZCIsIm9mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCIsImNyZWF0ZUxheW91dCIsIk1lcmNhdG9yQ29vcmRpbmF0ZSIsIlJhc3RlckJvdW5kc0FycmF5IiwiU2VnbWVudFZlY3RvciIsIkNhbm9uaWNhbFRpbGVJRCIsImdldFZpZGVvIiwiVmFsaWRhdGlvbkVycm9yIiwidmVjdG9yIiwicmFzdGVyRGVtIiwiZ2VvanNvbiIsInZpZGVvIiwiaW1hZ2UiLCJjYW52YXMiLCJiaW5kQWxsIiwibWF0NC50cmFuc2xhdGUiLCJtYXQ0LnNjYWxlIiwibWF0NC5tdWx0aXBseSIsIkNvbG9yIiwiQUxXQVlTIiwiZGVlcEVxdWFsIiwiY3JlYXRlU291cmNlIiwiU291cmNlRmVhdHVyZVN0YXRlIiwidGlsZSIsImtleXNEaWZmZXJlbmNlIiwidGlsZUlEIiwiVGlsZSIsIm1hcGJveGdsIiwibGF0ZXN0IiwiaXNFcXVhbCIsImNsYW1wIiwibWF0NC5jcmVhdGUiLCJtYXQ0LnJvdGF0ZVoiLCJtYXQ0LmNsb25lIiwic3ltYm9sU2l6ZS5ldmFsdWF0ZVNpemVGb3Jab29tIiwiV3JpdGluZ01vZGUiLCJzeW1ib2xTaXplLmV2YWx1YXRlU2l6ZUZvckZlYXR1cmUiLCJvcmllbnRhdGlvbkNoYW5nZSIsImFkZER5bmFtaWNBdHRyaWJ1dGVzIiwicHJvamVjdGlvbi5wcm9qZWN0IiwicHJvamVjdGlvbi5nZXRQZXJzcGVjdGl2ZVJhdGlvIiwiT05FX0VNIiwicHJvamVjdGlvbi5wbGFjZUZpcnN0QW5kTGFzdEdseXBoIiwiY2xpcExpbmUiLCJpbnRlcnNlY3Rpb25UZXN0cy5wb2x5Z29uSW50ZXJzZWN0c1BvbHlnb24iLCJwcm9qZWN0aW9uLnh5VHJhbnNmb3JtTWF0NCIsImdldEFuY2hvckFsaWdubWVudCIsImV2YWx1YXRlVmFyaWFibGVPZmZzZXQiLCJwcm9qZWN0aW9uLmdldExhYmVsUGxhbmVNYXRyaXgiLCJwcm9qZWN0aW9uLmdldEdsQ29vcmRNYXRyaXgiLCJwbGFjZUhvcml6b250YWwiLCJwbGFjZVZlcnRpY2FsIiwibWF0NC5pbnZlcnQiLCJnZXRBbmNob3JKdXN0aWZpY2F0aW9uIiwiY3Jvc3NUaWxlSUQiLCJwcmV2T3BhY2l0eSIsInBhY2tlZE9wYWNpdHkiLCJob3Jpem9udGFsT3BhY2l0eSIsInZlcnRpY2FsT3BhY2l0eSIsInMiLCJzeW1ib2xJbnN0YW5jZSIsIl9lbWl0VmFsaWRhdGlvbkVycm9ycyIsImRpZmZPcGVyYXRpb25zIiwiZ2V0V29ya2VyUG9vbCIsIlpvb21IaXN0b3J5IiwiZ2V0UmVmZXJyZXIiLCJ0cmlnZ2VyUGx1Z2luQ29tcGxldGlvbkV2ZW50IiwiaXNNYXBib3hVUkwiLCJkZXJlZiIsInZhbGlkYXRlQ3VzdG9tU3R5bGVMYXllciIsImZpbHRlck9iamVjdCIsImwiLCJsYXllcklkIiwic291cmNlUmVzdWx0IiwibGF5ZXJGZWF0dXJlcyIsImZlYXR1cmVXcmFwcGVyIiwicnRsVGV4dFBsdWdpbkV2ZW50ZWQiLCJsYXllcklEIiwic3R5bGVMYXllciIsIm1ha2VSZXF1ZXN0IiwiZ2V0U291cmNlVHlwZSIsInNldFNvdXJjZVR5cGUiLCJyZWdpc3RlckZvclBsdWdpblN0YXRlQ2hhbmdlIiwidmVydGV4QnVmZmVyIiwiUHJvZ3JhbSIsIlVuaWZvcm1NYXRyaXg0ZiIsIlVuaWZvcm0zZiIsIlVuaWZvcm0xZiIsIlVuaWZvcm0xaSIsIlVuaWZvcm0yZiIsIm1hdDMuZnJvbVJvdGF0aW9uIiwidmVjMy50cmFuc2Zvcm1NYXQzIiwiVW5pZm9ybUNvbG9yIiwibWF0NC5vcnRobyIsIlVuaWZvcm00ZiIsIm1hdDQubXVsIiwiQ29sbGlzaW9uQ2lyY2xlTGF5b3V0QXJyYXkiLCJjb2xsaXNpb25DaXJjbGVMYXlvdXQiLCJiYXRjaCIsIlF1YWRUcmlhbmdsZUFycmF5Iiwic3ltYm9sUHJvamVjdGlvbi5nZXRMYWJlbFBsYW5lTWF0cml4Iiwic3ltYm9sU2l6ZSIsInN5bWJvbFByb2plY3Rpb24uaGlkZUdseXBocyIsInN5bWJvbFByb2plY3Rpb24ucHJvamVjdCIsInN5bWJvbFByb2plY3Rpb24uZ2V0UGVyc3BlY3RpdmVSYXRpbyIsInNoaWZ0IiwiZyIsInN5bWJvbFByb2plY3Rpb24uZ2V0R2xDb29yZE1hdHJpeCIsInN5bWJvbFByb2plY3Rpb24udXBkYXRlTGluZUxhYmVscyIsInN0YXRlIiwidW5pZm9ybVZhbHVlcyIsInByb2dyYW0iLCJsYXlvdXRWZXJ0ZXhCdWZmZXIiLCJpbmRleEJ1ZmZlciIsInByb2dyYW1Db25maWd1cmF0aW9uIiwiZGVwdGhNb2RlIiwiZHJhdyIsImRlYnVnIiwiY3VzdG9tIiwiUG9zQXJyYXkiLCJMaW5lU3RyaXBJbmRleEFycmF5Iiwic291cmNlQ2FjaGUiLCJjb29yZHMiLCJ2ZWMzLnN1YiIsInZlYzMuc2NhbGUiLCJ2ZWMzLmFkZCIsInZlYzMuY2xvbmUiLCJudW1iZXIiLCJMbmdMYXQiLCJ3cmFwIiwibWF0Mi5jcmVhdGUiLCJtYXQyLnJvdGF0ZSIsIlVud3JhcHBlZFRpbGVJRCIsInZlYzIuc3FyTGVuIiwibWF0NC5wZXJzcGVjdGl2ZSIsIm1hdDQucm90YXRlWCIsIm1lcmNhdG9yWmZyb21BbHRpdHVkZSIsInJlc3VsdCIsIl9lYXNlIiwiZXZlbnROYW1lIiwib3JpZ2luYWxFdmVudCIsImRlZmF1bHRFYXNpbmciLCJjb25maWciLCJkZWZhdWx0T3B0aW9ucyIsIlBlcmZvcm1hbmNlVXRpbHMiLCJQZXJmb3JtYW5jZU1hcmtlcnMiLCJSZXF1ZXN0TWFuYWdlciIsIm1vdXNlaW4iLCJtb3VzZW1vdmUiLCJtb3VzZW91dCIsIndpZHRoIiwiaGVpZ2h0IiwiZGF0YSIsImlzU3VwcG9ydGVkIiwic2V0Q2FjaGVMaW1pdHMiLCJ2ZXJzaW9uIiwidGl0bGUiLCJzdXBwb3J0ZWQiLCJzZXRSVExUZXh0UGx1Z2luIiwiZ2V0UlRMVGV4dFBsdWdpblN0YXR1cyIsImNsZWFyVGlsZUNhY2hlIiwiaXNTYWZhcmkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksQ0FBQztBQUNiO0FBQ0EsSUFBSSxxQkFBcUIsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUM7QUFDekQsSUFBSSxjQUFjLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUM7QUFDckQsSUFBSSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDO0FBQzdEO0FBQ0EsU0FBUyxRQUFRLENBQUMsR0FBRyxFQUFFO0FBQ3ZCLENBQUMsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUU7QUFDeEMsRUFBRSxNQUFNLElBQUksU0FBUyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7QUFDL0UsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztB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LEVBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLEdBQUcsTUFBTSxTQUFTLENBQUMsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUFDLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxZQUFZLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksT0FBTyxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBSSxLQUFLLFdBQVcsRUFBRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLEtBQUssV0FBVyxFQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUU7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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WSxJQUFJLHNCQUEwQjtBQUNyRSxJQUFRLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDO0FBQ3JDLElBQVEsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztBQUN2QztBQUNBLElBQVEsT0FBTyxJQUFJLENBQUM7QUFDaEIsRUFDSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzdLRDtBQUNBO0FBQ0E7QUFDQTtBQUNlLElBQU0sZUFBZSxHQUtoQyx3QkFBVyxDQUFDLEdBQUcsT0FBVyxLQUFLLHFCQUF5QixPQUFPLE1BQVUsVUFBVSxPQUFXO0FBQ2xHLElBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLEdBQUcsSUFBTSxHQUFHLFdBQU8sRUFBRSxJQUFJLE9BQU8sQ0FBQztBQUN6RCxJQUFRLElBQUksVUFBVSxJQUFFLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxHQUFDO0FBQ3JEO0FBQ0EsSUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FB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LENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNuRCxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0RCxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRCxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN0RCxFQUFFLGdCQUFnQixFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pELEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BELEVBQUUsZUFBZSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzlELEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVELEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUQsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEQsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEUsRUFBRSxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0QsRUFBRSxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0QsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDekQsRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUQsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUQsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUQsRUFBRSxhQUFhLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEQsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDN0QsRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDcEQsRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0MsRUFBRSxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEQsRUFBRSxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDekQsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDcEQsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDcEQsRUFBRSxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0QsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDN0QsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDN0QsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxzQkFBc0IsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2RSxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM3RCxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RCxFQUFFLGFBQWEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRSxFQUFFLGNBQWMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0RSxFQUFFLGFBQWEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyRCxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0RCxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxFQUFFLGtCQUFrQixFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLEVBQUUsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pFLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0RSxFQUFFLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdkUsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNsRSxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RCxFQUFFLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM3RCxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRCxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNyRCxFQUFFLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRCxFQUFFLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM3RCxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoRSxFQUFFLGVBQWUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRSxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN0RCxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNsRCxFQUFFLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN4RCxFQUFFLGVBQWUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqQyxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNsRCxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzRCxFQUFFLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN6RCxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN4RCxFQUFFLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNwRCxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN6RCxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RCxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2RCxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztB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QUMsQ0FBQyxDQUFDO0FBQ3JDLElBQUlBLElBQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxXQUFXLEdBQUcsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsV0FBVyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDeEYsQ0FBQztBQUNEO0FBQ0EsU0FBUyxVQUFVLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDL0IsSUFBSUEsSUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QixJQUFJQSxJQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLElBQUlBLElBQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsSUFBSUEsSUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QixJQUFJLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6RSxDQUFDO0FBQ0Q7QUFDQSxTQUFTLFlBQVksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNqQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0SCxDQUFDO0FBQ0Q7QUFDQTtBQUNBLFNBQVMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRTtBQUMxQyxJQUFJRCxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDdkIsSUFBSSxLQUFLQSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN0RCxRQUFRQyxJQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsUUFBUSxLQUFLRCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDL0QsWUFBWSxJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBRSxPQUFPLEtBQUssR0FBQztBQUN0RSxZQUFZLElBQUksWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFFLE1BQU0sR0FBRyxDQUFDLE1BQU0sR0FBQztBQUM1RSxTQUFTO0FBQ1QsS0FBSztBQUNMLElBQUksT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQztBQUNEO0FBQ0EsU0FBUyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFO0FBQzlDLElBQUksS0FBS0EsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzlDLFFBQVEsSUFBSSxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsT0FBTyxJQUFJLEdBQUM7QUFDaEUsS0FBSztBQUNMLElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQztBQUNEO0FBQ0EsU0FBUyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUN0QixJQUFJLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzNDLENBQUM7QUFDRDtBQUNBO0FBQ0EsVUFBVSxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ25DO0FBQ0EsSUFBSUMsSUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QixJQUFJQSxJQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCLElBQUlBLElBQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsSUFBSUEsSUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QixJQUFJQSxJQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCLElBQUlBLElBQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsSUFBSUEsSUFBTSxJQUFJLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDckMsSUFBSUEsSUFBTSxJQUFJLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDdEMsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFFLE9BQU8sSUFBSSxHQUFDO0FBQ3RFLElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQztBQUNEO0FBQ0EsU0FBUyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDdkM7QUFDQTtBQUNBO0FBQ0EsSUFBSUEsSUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQyxJQUFJQSxJQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9DLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBRSxPQUFPLEtBQUssR0FBQztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBSSxRQUFRLENBQUMsQ0FBQyxFQUFF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QUFHLEVBQUUsR0FBRyxFQUFFO0FBQ3BCLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtBQUNyQixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDM0IsSUFBSSxPQUFPLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDNUI7QUFDQTtBQUNBLFNBQVMsT0FBTyxDQUFDLENBQUMsVUFBVTtBQUM1QixJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDckQsQ0FBQztBQUNEO0FBQ0EsU0FBUyxPQUFPLENBQUMsQ0FBQyxVQUFVO0FBQzVCLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDOUMsQ0FBQztBQUNEO0FBQ0EsU0FBUyxPQUFPLENBQUMsQ0FBQyxVQUFVO0FBQzVCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLFNBQVMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDckYsQ0FBQztBQUNEO0FBQ0EsU0FBUyxPQUFPLENBQUMsQ0FBQyxVQUFVO0FBQzVCLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQztBQUNiLElBQUksT0FBTyxDQUFDLElBQUksT0FBTyxHQUFHLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLElBQUksS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pFLENBQUM7QUFDRDtBQUNBO0FBQ0EsU0FBUyxRQUFR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QyxZQUFZLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUTtBQUNsQyxZQUFZLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTTtBQUNoQyxZQUFZLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDO0FBQ2xDLEtBQUssTUFBTTtBQUNYO0FBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUTtBQUNyQyxZQUFZLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUTtBQUNsQyxZQUFZLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDO0FBQ2xDLEtBQUs7QUFDTCxDQUFDO0FBQ0Q7QUFDQSxTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQzFDLFNBQVMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDM0MsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtBQUN4QyxTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO0FBQ3hDLFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7QUFDM0MsU0FBUyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtBQUMzQztBQUNBLFNBQVMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxD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QUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxQixRQUFRQSxJQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hDLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hDLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2pDLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2pDLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2pDLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2pDLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2pDLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xDLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xDLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xDLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ25DLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ25DLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2xDLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2xDLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2xDLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ25DLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2xDLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFDakI7OztFQTNDdUQsY0E0Q3REO0FBQ0Q7QUFDQSx3Q0FBd0MsQ0FBQyxTQUFTLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztBQUN4RSxRQUFRLENBQUMsMENBQTBDLEVBQUUsd0NBQXdDLENBQUMsQ0FBQztBQUMvRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQU0sOEJBQThCOzs7Ozs7Ozs7NkNBT2hDLDBDQUFnQjtBQUNwQixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3RELFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDdEQsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUN4RCxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3hELFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDMUQsTUFBSztBQUNMO0FBQ0EsNkNBQUksb0NBQVksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVO0FBQ2xYLFFBQVFBLElBQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDOUIsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzQixRQUFRLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDakssTUFBSztBQUNMO0FBQ0EsNkNBQUksNEJBQVEsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVTtBQUN6WCxRQUFRQSxJQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFFBQVFBLElBQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDMUIsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEMsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEMsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEMsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEMsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEMsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEMsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEMsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDakMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDakMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFD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QUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksTUFBTSxLQUFLLEVBQUUsQ0FBQyxLQUFLLFVBQVUsQ0FBQztBQUNwRixFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sSUFBSSxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsSUFBSSxNQUFNLElBQUksTUFBTSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDaEYsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ1I7QUFDQSxDQUFDLFFBQVEsU0FBUztBQUNsQixFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7QUFDckQsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDO0FBQ3BELEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDM0M7QUFDQSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxNQUFNLEtBQUssRUFBRSxDQUFDLElBQUksVUFBVSxDQUFDO0FBQ25GLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDaEMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksTUFBTSxLQUFLLEVBQUUsQ0FBQyxJQUFJLFVBQVUsQ0FBQztBQUNuRixFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDWCxFQUFFO0FBQ0Y7QUFDQSxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDO0FBQ2xCO0FBQ0EsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUNqQixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxJQUFJLFVBQVUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLFVBQVUsSUFBSSxNQUFNLEtBQUssRUFBRSxDQUFDLElBQUksVUFBVSxDQUFDO0FBQ2xHLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDakIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxVQUFVLElBQUksTUFBTSxLQUFLLEVBQUUsQ0FBQyxLQUFLLFVBQVUsQ0FBQztBQUNwRyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ2pCO0FBQ0EsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDakIsQ0FBQztBQUNEO0FBQ0EsR0FBRyxRQUFhLEtBQUssV0FBVyxFQUFFO0FBQ2xDLEVBQUUsY0FBYyxHQUFHLGtCQUFpQjtBQUNwQzs7OztBQ25FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRTtBQUN0QyxFQUFFO0FBQ0YsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU07QUFDbEIsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNULElBQUksQ0FBQyxDQUFDO0FBQ047QUFDQSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNqQixHQUFHLENBQUM7QUFDSixLQUFLLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJO0FBQy9CLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQztBQUN4QyxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7QUFDekMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDMUM7QUFDQSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxVQUFVLElBQUksTUFBTSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDckYsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxVQUFVLElBQUksTUFBTSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDckY7QUFDQSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxJQUFJLFVBQVUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLFVBQVUsSUFBSSxNQUFNLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RGO0FBQ0EsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ1gsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNSLEdBQUc7QUFDSDtBQUNB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QUM7QUFDL0MsUUFBUUQsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUN6QixRQUFRQSxJQUFJLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzFCO0FBQ0EsUUFBUSxPQUFPLElBQUksRUFBRTtBQUNyQixZQUFZLEtBQUcsQ0FBQyxFQUFFLEdBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFO0FBQzNDLFlBQVksS0FBRyxDQUFDLEVBQUUsR0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUU7QUFDM0MsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUUsUUFBTTtBQUM5QixZQUFZLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzVCLFlBQVksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxQyxZQUFZLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNsRCxZQUFZLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNsRCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsQ0FBQyxFQUFFO0FBQ2xDLFlBQVksSUFBSSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzFDLFlBQVksSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekIsU0FBUyxNQUFNO0FBQ2YsWUFBWSxJQUFJLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxD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R0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQzFDLElBQUk1RCxJQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDNUMsSUFBSSxLQUFLRCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDOUMsUUFBUUMsSUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLFFBQVEsS0FBS0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzlDLFlBQVlDLElBQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQztBQUNBO0FBQ0EsWUFBWSxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUNsRCxZQUFZLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ2xEO0FBQ0EsWUFBWSxJQUFJLEtBQUssQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRTtBQUM5RyxnQkFBZ0IsUUFBUSxDQUFDLHNFQUFzRSxDQUFDLENBQUM7QUFDakcsZ0JBQWdCLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakUsZ0JBQWdCLEtBQUssQ0FBQyxDQUFDLEdBQUcs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Q2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUM3QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVMsUUFBUSxDQUFDLEdBQUcsRUFBRTtBQUM5QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0IsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdB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QUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDM0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0IsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2pDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ25CLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDbkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ25CLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUyxZQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRTtBQUN2QyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEIsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQ3BDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRTtBQUN2QixFQUFFLE9BQU8sT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEUsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUyxJQUFJLENBQUMsQ0FBQyxFQUFFO0FBQ3hCLEVBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVDLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0IsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNoQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbkIsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0IsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3BDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNsQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNFLFFBQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzdCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUMsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxVixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0IsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtBQUN2RCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQVcsR0FBRyxHQUFHLFFBQVE7O0FDOWF6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCQyxRQUFNLEdBQUc7QUFDekIsRUFBRSxJQUFJLEdBQUcsR0FBRyxJQUFJSixVQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDO0FBQ0EsRUFBRSxJQUFJQSxVQUFtQixJQUFJLFlBQVksRUFBRTtBQUMzQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixHQUFHO0FBQ0g7QUFDQSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsT0FBSyxDQUFDLENBQUMsRUFBRTtBQUN6QixFQUFFLElBQUksR0FBRyxHQUFHLElBQUlELFVBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0ssTUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDN0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLFVBQVEsQ0FBQyxHQUFHLEVBQUU7QUFDOUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxZQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDL0MsRUFBRSxJQUFJLEdBQUcsR0FBRyxJQUFJUCxVQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTUSxLQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQzdDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMs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LENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDN0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzdCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM3QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDN0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNsQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2xDLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JDLFFBQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtBQUNwQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFD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LENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNsQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2xDLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsY0FBWSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDdkMsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztBQUN2QixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxhQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUNwQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUyxlQUFlLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUN4QyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxLQUFHLENBQUMsQ0FBQyxFQUFFO0FBQ3ZCLEVBQUUsT0FBTyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckcsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsTUFBSSxDQUFDLENBQUMsRUFBRTtBQUN4QixFQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzRCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JDLEtBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCQyxVQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDcEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQkMsZ0JBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMxQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JDLHNCQUFvQixDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtBQUN2RCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxhQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNsQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUcsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTckIsUUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDN0IsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUMsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwZ0IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFJcUIsS0FBRyxHQUFHYixVQUFRLENBQUM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQVdjLEtBQUcsR0FBR0wsVUFBUTs7QUNwZXpCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQmhCLFFBQU0sR0FBRztBQUN6QixFQUFFLElBQUksR0FBRyxHQUFHLElBQUlKLFVBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkM7QUFDQSxFQUFFLElBQUlBLFVBQW1CLElBQUksWUFBWSxFQUFFO0FBQzNDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNmLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNmLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNmLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNmLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNmLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNmLEdBQUc7QUFDSDtBQUNBLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDakMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDakIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLE9BQUssQ0FBQyxDQUFDLEVBQUU7QUFDekIsRUFBRSxJQUFJLEdBQUcsR0FBRyxJQUFJRCxVQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNLLE1BQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQzdCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JFLFlBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtBQUN4RSxFQUFFLElBQUksR0FBRyxHQUFHLElBQUlQLFVBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCUSxLQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0FBQ3RFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTRixVQUFRLENBQUMsR0FBRyxFQUFFO0FBQzlCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNvQixXQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUNsQztBQUNBLEVBQUUsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFO0FBQ2pCLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixRQUFRLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQixHQUFHLE1BQU07QUFDVCxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTakIsUUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDL0IsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEMsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNuQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQztBQUNBLEVBQUUsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDOUM7QUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7QUFDWixJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLEdBQUc7QUFDSDtBQUNBLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNyQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztBQUMxQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDekMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNyQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDekMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDMUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNyQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztBQUMxQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDekMsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU2tCLFNBQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQ2hDLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDakMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2pDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDakMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2pDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDakMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2pDLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTakIsYUFBVyxDQUFDLENBQUMsRUFBRTtBQUMvQixFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixFQUFFLE9BQU8sR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUN4RyxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JDLFVBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNwQyxFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUM3QyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUM3QyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUM3QyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUM3QyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUM3QyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUM3QyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUM3QyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdB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QUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCQyxPQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDakMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTZSxpQkFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDeEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNiLGNBQVksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFO0FBQ3ZDLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7QUFDdkIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsYUFBVyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDcEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUNqQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNsQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNsQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNsQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDbkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ25CLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDbkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ25CLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUN2QyxFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2pCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQixFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDakIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNqQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2pCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQixFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQztBQUNBLEVBQUUsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEY7QUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7QUFDWixJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLEdBQUc7QUFDSDtBQUNBLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDckQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDckQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDckQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDckQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDckQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDckQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDckQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDckQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDckQsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQixVQUFVLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7QUFDL0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNyQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDZCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsS0FBRyxDQUFDLENBQUMsRUFBRTtBQUN2QixFQUFFLE9BQU8sT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlJLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLE1BQUksQ0FBQyxDQUFDLEVBQUU7QUFDeEIsRUFBRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JDLEtBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCQyxVQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDcEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQkMsZ0JBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMxQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JDLHNCQUFvQixDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtBQUN2RCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxhQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNsQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0osQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTckIsUUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDN0IsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUMsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNud0IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFJcUIsS0FBRyxHQUFHYixVQUFRLENBQUM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQVdjLEtBQUcsR0FBR0wsVUFBUTs7QUN4d0J6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JoQixRQUFNLEdBQUc7QUFDekIsRUFBRSxJQUFJLEdBQUcsR0FBRyxJQUFJSixVQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hDO0FBQ0EsRUFBRSxJQUFJQSxVQUFtQixJQUFJLFlBQVksRUFBRTtBQUMzQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEIsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoQixJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLE9BQUssQ0FBQyxDQUFDLEVBQUU7QUFDekIsRUFBRSxJQUFJLEdBQUcsR0FBRyxJQUFJRCxVQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTSyxNQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUM3QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNFLFlBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDM0csRUFBRSxJQUFJLEdBQUcsR0FBRyxJQUFJUCxVQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNRLEtBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0FBQ3pHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTRixVQUFRLENBQUMsR0FBRyxFQUFFO0FBQzlCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNvQixXQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUNsQztBQUNBLEVBQUUsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFO0FBQ2pCLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixRQUFRLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQixJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsUUFBUSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25CLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25CLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25CLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNsQixJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLEdBQUcsTUFBTTtBQUNULElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNuQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbkIsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEIsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQixJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkIsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwQixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTakIsUUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDL0IsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNqQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2pCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDakIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNqQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEMsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEMsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEMsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEMsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEMsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEMsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEMsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEMsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEMsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEMsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEMsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEM7QUFDQSxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2xGO0FBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ1osSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixHQUFHO0FBQ0g7QUFDQSxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3JELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3JELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3JELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3JELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3JELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3JELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3JELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3JELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3JELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3JELEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3RELEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3RELEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3RELEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3RELEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3RELEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3RELEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNrQixTQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUNoQyxFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2pCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQixFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDakIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNqQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2pCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUN6RyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDekcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUN6RyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDekcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDekcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM3RyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDN0csRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDMUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzFHLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTakIsYUFBVyxDQUFDLENBQUMsRUFBRTtBQUMvQixFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2pCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQixFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDakIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNqQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2pCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQixFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQztBQUNBLEVBQUUsT0FBTyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUMvRSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JDLFVBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNwQyxFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2pCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQixFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDakIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNqQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2pCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQjtBQUNBLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDckQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUNyRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ3JELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDckQsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1osRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1osRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1osRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1osRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUNyRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ3JELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDckQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUNyRCxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDWixFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDWixFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDYixFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ3JELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDckQsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUN0RCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ3RELEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNiLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNiLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNiLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDdEQsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUN0RCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ3RELEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDdEQsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQkcsV0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3JDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0FBQ3pCLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7QUFDekIsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUN6QjtBQUNBLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFO0FBQ2pCLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyRCxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckQsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RELElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0RCxHQUFHLE1BQU07QUFDVCxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2hCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsRCxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEQsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xELElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsRCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCRCxPQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDakMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JELFFBQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUU7QUFDMUMsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNkLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7QUFDekIsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUN6QixFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0FBQ3pCLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUNwQixFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7QUFDcEIsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0FBQ3BCO0FBQ0EsRUFBRSxJQUFJLEdBQUcsR0FBR1QsT0FBZ0IsRUFBRTtBQUM5QixJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLEdBQUc7QUFDSDtBQUNBLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDO0FBQ1gsRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDO0FBQ1gsRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDO0FBQ1gsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDWixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDZCxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDZDtBQUNBLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUIsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxQixFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxQixFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUIsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCO0FBQ0EsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDN0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDN0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDN0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDN0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDN0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDN0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDN0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDN0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDN0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDN0MsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDOUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDOUM7QUFDQSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRTtBQUNqQjtBQUNBLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwQixJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEIsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwQixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtBQUNyQyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEIsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xCO0FBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDakI7QUFDQSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwQixJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEIsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLEdBQUc7QUFDSDtBQUNBO0FBQ0EsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUM3QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDN0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUM3QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDN0IsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUM5QixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtBQUNyQyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEIsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xCO0FBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDakI7QUFDQSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwQixJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEIsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLEdBQUc7QUFDSDtBQUNBO0FBQ0EsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUM3QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDN0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUM3QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDN0IsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUM5QixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtBQUNyQyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEIsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDakI7QUFDQSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwQixJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEIsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwQixJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEIsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLEdBQUc7QUFDSDtBQUNBO0FBQ0EsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUM3QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDN0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUM3QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDN0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUM3QixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVN5QixpQkFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDeEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTWixhQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUNwQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JELGNBQVksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRTtBQUM3QyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNqQixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsRUFBRSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDaEMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2Q7QUFDQSxFQUFFLElBQUksR0FBRyxHQUFHWixPQUFnQixFQUFFO0FBQzlCLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixFQUFFLENBQUMsSUFBSSxHQUFHLENBQUM7QUFDWCxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUM7QUFDWCxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUM7QUFDWCxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNaO0FBQ0EsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3QixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTLGFBQWEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFO0FBQ3hDLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QixFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEI7QUFDQSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUyxhQUFhLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRTtBQUN4QyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEIsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCO0FBQ0EsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDZCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVMsYUFBYSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDeEMsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QjtBQUNBLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCLHVCQUF1QixDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ25EO0FBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNsQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNsQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNsQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3pCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDbkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ25CLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDekIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ25CLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDbkIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUMxQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDLEVBQUUsSUFBSSxXQUFXLEdBQUcsSUFBSUgsVUFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxJQUFJLFNBQVMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3hEO0FBQ0EsRUFBRSxJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUU7QUFDckIsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUM7QUFDN0UsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUM7QUFDN0UsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUM7QUFDN0UsR0FBRyxNQUFNO0FBQ1QsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNqRSxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2pFLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDakUsR0FBRztBQUNIO0FBQ0EsRUFBRSx1QkFBdUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQy9DLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTLGNBQWMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFO0FBQ3pDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNuQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25CLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVMsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDckMsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkIsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkIsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkIsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkIsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkIsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkIsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkIsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkIsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNyQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDckMsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVMsV0FBVyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDdEMsRUFBRSxJQUFJLE9BQU8sR0FBRyxJQUFJQSxVQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLEVBQUUsVUFBVSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMzQixFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixFQUFFLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUIsRUFBRSxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFCLEVBQUUsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQixFQUFFLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUIsRUFBRSxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFCLEVBQUUsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQixFQUFFLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUIsRUFBRSxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFCLEVBQUUsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQixFQUFFLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ2pDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ1o7QUFDQSxFQUFFLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtBQUNqQixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUN0QixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQy9CLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7QUFDL0IsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUMvQixHQUFHLE1BQU0sSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLEVBQUU7QUFDekMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEQsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUMvQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7QUFDL0IsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUMvQixHQUFHLE1BQU0sSUFBSSxJQUFJLEdBQUcsSUFBSSxFQUFFO0FBQzFCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hELElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7QUFDL0IsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUMvQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7QUFDL0IsR0FBRyxNQUFNO0FBQ1QsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEQsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUMvQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQy9CLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7QUFDL0IsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUN0QixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCLDRCQUE0QixDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMzRDtBQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNsQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNsQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNsQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNoQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzFCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDMUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUMxQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2hDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDMUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUMxQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzFCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDakMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTLGtDQUFrQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDcEU7QUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNsQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNsQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNsQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNsQyxFQUFFLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDNUIsRUFBRSxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzVCLEVBQUUsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM1QixFQUFFLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbEMsRUFBRSxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzVCLEVBQUUsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM1QixFQUFFLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDNUIsRUFBRSxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ25DLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2xCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztBQUM1RCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDNUQsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQzdELEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUzZCLFVBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQ2pDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNsQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNsQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNsQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ25CLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDbkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ25CLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDbkIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDeEIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtBQUNsRSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDOUIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0FBQzlCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztBQUM1QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN6QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN6QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQy9CLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDL0IsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUM5QixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVMsV0FBVyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7QUFDMUQsRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDLE1BQU0sRUFBRSxDQUFDO0FBQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN0QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkO0FBQ0EsRUFBRSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxLQUFLLFFBQVEsRUFBRTtBQUN2QyxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7QUFDaEMsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ2xDLEdBQUcsTUFBTTtBQUNULElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN4QixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCLDBCQUEwQixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtBQUNoRSxFQUFFLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ3hELEVBQUUsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDNUQsRUFBRSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUM1RCxFQUFFLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQzlELEVBQUUsSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQztBQUMxQyxFQUFFLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUM7QUFDdkMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2xCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNsQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxHQUFHLFFBQVEsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDbEQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdB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RSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7QUFDOUMsRUFBRSxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEIsRUFBRSxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEIsRUFBRSxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEIsRUFBRSxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsRUFBRSxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsRUFBRSxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsRUFBRSxJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsRUFBRSxJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsRUFBRSxJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUI7QUFDQSxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcxQixPQUFnQixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHQSxPQUFnQixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHQSxPQUFnQixFQUFFO0FBQ2pKLElBQUksT0FBT0csVUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLEdBQUc7QUFDSDtBQUNBLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBRyxPQUFPLENBQUM7QUFDdEIsRUFBRSxFQUFFLEdBQUcsSUFBSSxHQUFHLE9BQU8sQ0FBQztBQUN0QixFQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUcsT0FBTyxDQUFDO0FBQ3RCLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbkMsRUFBRSxFQUFFLElBQUksR0FBRyxDQUFDO0FBQ1osRUFBRSxFQUFFLElBQUksR0FBRyxDQUFDO0FBQ1osRUFBRSxFQUFFLElBQUksR0FBRyxDQUFDO0FBQ1osRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQzNCLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUMzQixFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDM0IsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQy9CO0FBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ1osSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ1gsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ1gsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ1gsR0FBRyxNQUFNO0FBQ1QsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNsQixJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUM7QUFDZCxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUM7QUFDZCxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUM7QUFDZCxHQUFHO0FBQ0g7QUFDQSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDekIsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN6QixFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDL0I7QUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7QUFDWixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDWCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDWCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDWCxHQUFHLE1BQU07QUFDVCxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQztBQUNkLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQztBQUNkLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQztBQUNkLEdBQUc7QUFDSDtBQUNBLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNqRCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDakQsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ2pELEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQixRQUFRLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFO0FBQy9DLEVBQUUsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNuQixNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ25CLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkIsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNqQixNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixFQUFFLElBQUksRUFBRSxHQUFHLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sRUFBRSxHQUFHLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sRUFBRSxHQUFHLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsRUFBRSxJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN4QztBQUNBLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFO0FBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDO0FBQ2QsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDO0FBQ2QsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDO0FBQ2QsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFO0FBQzlCLE1BQU0sRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUU7QUFDOUIsTUFBTSxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQy9CLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BDO0FBQ0EsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUU7QUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3QixJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUM7QUFDZCxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUM7QUFDZCxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUM7QUFDZCxHQUFHO0FBQ0g7QUFDQSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDZCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDZCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDZCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDN0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzdCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM3QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDZCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDZCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDZixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU1csS0FBRyxDQUFDLENBQUMsRUFBRTtBQUN2QixFQUFFLE9BQU8sT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdFAsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsTUFBSSxDQUFDLENBQUMsRUFBRTtBQUN4QixFQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JDLEtBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JDLFVBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNwQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JDLGdCQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDMUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JDLHNCQUFvQixDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtBQUN2RCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNsQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNsQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNsQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNsQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNsQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNsQyxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxhQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNsQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsUyxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNyQixRQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUM3QixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNqQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2pCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDakIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNqQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDakIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNqQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2pCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDakIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xCLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUMsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSUEsT0FBZ0Is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QUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCQyxVQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDcEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQlQsVUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3BDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0IsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDN0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUM5QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQzlCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JFLE9BQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNqQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0IsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtBQUM5QyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQy9CLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLEVBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3RDLEVBQUUsSUFBSSxDQUFDLEdBQUcs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QUMsR0FBRyxHQUFHLENBQUM7QUFDdEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN0QixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzFCLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0IsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2pDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDN0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzdCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM3QixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0IsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNoQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNoQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNoQyxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzVDLEVBQUUsSUFBSSxZQUFZLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQixFQUFFLElBQUksT0FBTyxHQUFHLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMvQyxFQUFFLElBQUksT0FBTyxHQUFHLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNDLEVBQUUsSUFBSSxPQUFPLEdBQUcsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2QyxFQUFFLElBQUksT0FBTyxHQUFHLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDN0UsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUM3RSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQzdFLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU2lCLFFB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QyxDQUFDLENBQUM7QUFDZixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsRCxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDO0FBQ2YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN4RCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDekQsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQixhQUFhLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDekMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFDLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQixhQUFhLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDekM7QUFDQSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2Y7QUFDQTtBQUNBLEVBQUUsSUFBSSxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUMzQixNQUFNLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO0FBQzNCLE1BQU0sR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM1QjtBQUNBLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRztBQUNoQyxNQUFNLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHO0FBQ2hDLE1BQU0sSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUNqQztBQUNBLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNsQixFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7QUFDWixFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7QUFDWixFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7QUFDWjtBQUNBLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUNaLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUNaLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUNaO0FBQ0EsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDMUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDMUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDMUIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQkMsU0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtBQUN4QyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7QUFDWixNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYjtBQUNBLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCO0FBQ0EsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckQsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckQ7QUFDQSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCQyxTQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0FBQ3hDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNaLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiO0FBQ0EsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckI7QUFDQSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNyRCxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNyRDtBQUNBLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JDLFNBQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7QUFDeEMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ1osTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2I7QUFDQSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQjtBQUNBLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JELEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JELEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkO0FBQ0EsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDNUIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdB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QUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JXLEtBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JDLFVBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNwQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JULFVBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNwQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0J3QixRQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDbEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxNQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUM3QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLE9BQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQzlCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQkMsS0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQy9CLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JDLEtBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxPQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUM5QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0IzQixPQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDakMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0I0QixhQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFO0FBQzlDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQy9CLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQy9CLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQy9CLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQy9CLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLFVBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQy9CLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixFQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNoQyxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLGlCQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN0QyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkMsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsUUFBTSxDQUFDLENBQUMsRUFBRTtBQUMxQixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLEVBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLGVBQWEsQ0FBQyxDQUFDLEVBQUU7QUFDakMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2QyxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLFFBQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQy9CLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLFNBQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQ2hDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsV0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDbEMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUM7QUFDQSxFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRTtBQUNmLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLEdBQUc7QUFDSDtBQUNBLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNuQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ25CLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbkIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsS0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDMUIsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0QsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JDLE9BQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDcEMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQyxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JDLE1BQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDbkMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDaEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDaEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDaEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDaEMsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsUUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUU7QUFDbkMsRUFBRSxLQUFLLEdBQUcsS0FBSyxJQUFJLEdBQUcsQ0FBQztBQUN2QjtBQUNBO0FBQ0E7QUFDQSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ3JCLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2I7QUFDQSxFQUFFLEdBQUc7QUFDTCxJQUFJLEVBQUUsR0FBR3JCLE1BQWUsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsSUFBSSxFQUFFLEdBQUdBLE1BQWUsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNCLEdBQUcsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFO0FBQ3BCO0FBQ0EsRUFBRSxHQUFHO0FBQ0wsSUFBSSxFQUFFLEdBQUdBLE1BQWUsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsSUFBSSxFQUFFLEdBQUdBLE1BQWUsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNCLEdBQUcsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFO0FBQ3BCO0FBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNuQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ3RCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDdEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQnNCLGVBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN6QyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkQsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQkMsZUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3pDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQjtBQUNBLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNwQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNyQztBQUNBLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDcEQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUNwRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO0FBQ3BELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsTUFBSSxDQUFDLEdBQUcsRUFBRTtBQUMxQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU3RDLEtBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDdkIsRUFBRSxPQUFPLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hFLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU00sYUFBVyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDbEMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTckIsUUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDN0IsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQyxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVB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QUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDakQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pELEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JxQixTQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7QUFDckMsRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDO0FB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LENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM3QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDN0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzdCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM3QixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUNuQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUQsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUM1QixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNDLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQzNCLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFD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LEVBQUUsQ0FBQztBQUNiLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO0FBQ2IsR0FBRztBQUNIO0FBQ0E7QUFDQSxFQUFFLElBQUksR0FBRyxHQUFHLEtBQUssR0FBR1YsT0FBZ0IsRUFBRTtBQUN0QztBQUNBLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0IsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1QixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDakQsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ3pDLEdBQUcsTUFBTTtBQUNUO0FBQ0E7QUFDQSxJQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNmLEdBQUc7QUFDSDtBQUNBO0FBQ0EsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLEVBQUUsR0FBRyxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3JDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxFQUFFLEdBQUcsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNyQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsRUFBRSxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDckMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLEVBQUUsR0FBRyxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3JDLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTaUQsUUFBTSxDQUFDLEdBQUcsRUFBRTtBQUM1QjtBQUNBO0FBQ0EsRUFBRSxJQUFJLEVBQUUsR0FBR3JCLE1BQWUsRUFBRSxDQUFDO0FBQzdCLEVBQUUsSUFBSSxFQUFFLEdBQUdBLE1BQWUsRUFBRSxDQUFDO0FBQzdCLEVBQUUsSUFBSSxFQUFFLEdBQUdBLE1BQWUsRUFBRSxDQUFDO0FBQzdCLEVBQUUsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDdkMsRUFBRSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2pELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2pELEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVN0QixRQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUMvQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFD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QUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFHLENBQUMsR0FBQztBQUMzQixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFFLENBQUMsR0FBRyxDQUFDLEdBQUM7QUFDbkMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN4QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3hFLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDekIsSUFBSSxLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQztBQUN4QixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQztBQUNuRCxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQztBQUNuRCxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FB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LEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTTyxZQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUMzRCxFQUFFLElBQUksRUFBRSxHQUFHLElBQUlQLFVBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUyw2QkFBNkIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDMUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJQSxVQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUc7QUFDbkIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUc7QUFDbkIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUNwQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN0QyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN0QyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN0QyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3ZDLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQmtGLHlCQUF1QixDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ25ELEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUc7QUFDckIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUc7QUFDckIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUc7QUFDckIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3ZDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3ZDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3ZDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDeEMsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTdEQsaUJBQWUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQ3hDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN0QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU2IsY0FBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDckMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU29FLFVBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQ2pDO0FBQ0EsRUFBRSxJQUFJLEtBQUssR0FBR0MsUUFBVyxFQUFFLENBQUM7QUFDNUIsRUFBRUMsV0FBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0IsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJckYsVUFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQyxFQUFFc0YsY0FBbUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUIsRUFBRUoseUJBQXVCLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN6QyxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVM3RSxNQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUM3QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxVQUFRLENBQUMsR0FBRyxFQUFFO0FBQzlCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQkUsS0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ3pELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFJLE9BQU8sR0FBRytFLE1BQVMsQ0FBQztBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVMs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QU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRztBQUN0QixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRztBQUN0QixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRztBQUN0QixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ25ELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNuRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbkQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDcEQsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQmtCLFNBQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtBQUNyQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDakQsTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDakQsTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDakQsTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNsRCxFQUFFeUQsU0FBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDNUIsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNyRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3JELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDckQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNyRCxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCeEQsU0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0FBQ3JDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtBQUNqRCxNQUFNLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtBQUNqRCxNQUFNLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtBQUNqRCxNQUFNLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2xELEVBQUV5RCxTQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM1QixFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3JELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDckQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNyRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3JELEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0J4RCxTQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7QUFDckMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0FBQ2pELE1BQU0sR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0FBQ2pELE1BQU0sR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0FBQ2pELE1BQU0sR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDbEQsRUFBRXlELFNBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDckQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNyRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3JELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDckQsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQixrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUM5QyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDakQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqRCxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDWixFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDWixFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDWixFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDWixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDakQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pELEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0IsbUJBQW1CLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDL0MsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDakQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDakQsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1osRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1osRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1osRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1osRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDakQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqRCxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0IsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFO0FBQ3BEO0FBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUd4RixPQUFnQixFQUFFO0FBQ3hDLElBQUksT0FBT0UsTUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN4QixHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RCxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDO0FBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUM7QUFDcEMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQztBQUNwQyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekIsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNyRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3JELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDckQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNyRCxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDakQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pELEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQmMsS0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQy9CLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCUixVQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDcEMsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUN6RCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ3pELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDekQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUN6RCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDekcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ3pHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUN6RyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDekcsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBSWEsS0FBRyxHQUFHYixVQUFRLENBQUM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQkUsT0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2pDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQUlvQyxLQUFHLEdBQUcyQyxLQUFRLENBQUM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCekMsTUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakIsRUFBRSxJQUFJRixLQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUM7QUFDNUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoQyxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTeEMsUUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDL0IsRUFBRSxJQUFJLEtBQUssR0FBR29DLGVBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDekIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ3pCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUN6QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ3hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUN6QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDekIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ3pCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDeEIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTZ0QsV0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDbEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFJakQsUUFBTSxHQUFHa0QsUUFBVyxDQUFDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFJbkMsS0FBRyxHQUFHZixRQUFNLENBQUM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQUlDLGVBQWEsR0FBR2tELGVBQWtCLENBQUM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQUluQyxRQUFNLEdBQUdmLGVBQWEsQ0FBQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTRyxXQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUNsQyxFQUFFLElBQUksU0FBUyxHQUFHSCxlQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkM7QUFDQSxFQUFFLElBQUksU0FBUyxHQUFHLENBQUMsRUFBRTtBQUNyQixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3JDLElBQUksSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztBQUM5QixJQUFJLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUM7QUFDOUIsSUFBSSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDO0FBQzlCLElBQUksSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztBQUM5QixJQUFJLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixJQUFJLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixJQUFJLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixJQUFJLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixJQUFJLElBQUksT0FBTyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDeEQsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEIsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLElBQUksU0FBUyxDQUFDO0FBQzdDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLElBQUksU0FBUyxDQUFDO0FBQzdDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLElBQUksU0FBUyxDQUFDO0FBQzdDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLElBQUksU0FBUyxDQUFDO0FBQzdDLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTNUIsS0FBRyxDQUFDLENBQUMsRUFBRTtBQUN2QixFQUFFLE9BQU8sUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqSSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNNLGFBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUksQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTckIsUUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDN0IsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlDLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlBLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlBLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlBLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlBLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlBLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlBLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlBLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOXFCOztBQ2owQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCQyxRQUFNLEdBQUc7QUFDekIsRUFBRSxJQUFJLEdBQUcsR0FBRyxJQUFJSixVQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDO0FBQ0EsRUFBRSxJQUFJQSxVQUFtQixJQUFJLFlBQVksRUFBRTtBQUMzQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsT0FBSyxDQUFDLENBQUMsRUFBRTtBQUN6QixFQUFFLElBQUksR0FBRyxHQUFHLElBQUlELFVBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTTyxZQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNqQyxFQUFFLElBQUksR0FBRyxHQUFHLElBQUlQLFVBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0ssTUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDN0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCRyxLQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDL0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQlcsS0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQy9CLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCQyxVQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDcEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JULFVBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNwQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQndCLFFBQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNsQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsTUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDN0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLE9BQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQzlCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCQyxLQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDL0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVB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QUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkIsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsUUFBTSxDQUFDLENBQUMsRUFBRTtBQUMxQixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixFQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsZUFBYSxDQUFDLENBQUMsRUFBRTtBQUNqQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsUUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDL0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsU0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFD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QUFDO0FBQ2QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQmlFLGVBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN6QyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0IzQyxlQUFhLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDekMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2QyxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCekMsUUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtBQUN2QztBQUNBLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7QUFDMUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQjtBQUNBLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFD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QUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0UsUUFBUSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RSxRQUFRLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdFLFFBQVEsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5RTtBQUNBO0FBQ0EsSUFBSSxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQztBQUN4RCxRQUFRLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pEO0FBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSztBQUNyQixRQUFRLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO0FBQ3RCO0FBQ0E7QUFDQSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRTtBQUNqRCxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJO0FBQzVDLFlBQVksZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFFLE9BQU8sS0FBSyxHQUFDO0FBQ3ZELFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDcEI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJO0FBQzVDLFlBQVksZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FB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SUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDM0M7QUFDQSxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUNyQyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUNyQztBQUNBLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUM7QUFDcEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQztBQUNwQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDO0FBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUM7QUFDcEM7QUFDQSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDO0FBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUM7QUFDcEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQztBQUNwQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDO0FBQ3BDO0FBQ0EsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDeEIsQ0FBQztBQUNEO0FBQ0E7QUFDQSxTQUFTLFdBQVcsQ0FBQyxLQUFLLEVBQUU7QUFDNUIsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLO0FBQ2pCLFFBQVEsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUN6QixJQUFJLEdBQUc7QUFDUCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBRSxRQUFRLEdBQUcsQ0FBQyxHQUFDO0FBQ3ZGLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDbkIsS0FBSyxRQUFRLENBQUMsS0FBSyxLQUFLLEVBQUU7QUFDMUI7QUFDQSxJQUFJLE9BQU8sUUFBUSxDQUFDO0FBQ3BCLENBQUM7QUFDRDtBQUNBO0FBQ0EsU0FBUyxlQUFlLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUN6RCxJQUFJLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDN0QsV0FBVyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztBQUM3RCxXQUFXLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUQsQ0FBQztBQUNEO0FBQ0E7QUFDQSxTQUFTLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQy9CLElBQUksT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzNFLFlBQVksYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzVFLGFBQWEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0QsWUFBWUEsUUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hGLENBQUM7QUFDRDtBQUNBO0FBQ0EsU0FBUyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDdkIsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pFLENBQUM7QUFDRDtBQUNBO0FBQ0EsU0FBU0EsUUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDeEIsSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUNEO0FBQ0E7QUFDQSxTQUFTLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDcEMsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwQyxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDcEMsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwQztBQUNBLElBQUksSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUUsT0FBTyxJQUFJLEdBQUM7QUFDNUM7QUFDQSxJQUFJLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBRSxPQUFPLElBQUksR0FBQztBQUN2RCxJQUFJLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBRSxPQUFPLElBQUksR0FBQztBQUN2RCxJQUFJLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBRSxPQUFPLElBQUksR0FBQztBQUN2RCxJQUFJLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUMs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QUFJLFFBQVEsR0FBRyxXQUFXLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQztBQUNyRCxJQUFJLElBQUksUUFBUSxHQUFHLFFBQVEsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDakU7QUFDQSxJQUFJLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkUsSUFBSSxJQUFJLFFBQVEsRUFBRTtBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDaEUsWUFBWSxJQUFJLEtBQUssR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUMzRSxZQUFZLFdBQVcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQztBQUMxQixJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQzlDLFFBQVEsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNuQyxRQUFRLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLFFBQVEsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdkMsUUFBUSxhQUFhLElBQUksSUFBSSxDQUFDLEdBQUc7QUFDakMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdELFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0QsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLFdBQVcsS0FBSyxDQUFDLElBQUksYUFBYSxLQUFLLENBQUMsR0FBRyxDQUFDO0FBQ3ZELFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGFBQWEsR0FBRyxXQUFXLElBQUksV0FBVyxDQUFDLENBQUM7QUFDOUQsQ0FBQyxDQUFDO0FBQ0Y7QUFDQSxTQUFTLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDM0MsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDaEIsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUU7QUFDMUQsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcs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RyxFQUFFLENBQUM7QUFDM0IsUUFBUSx1QkFBZ0IsMEJBQUMsRUFBRTtBQUMzQixZQURhQSxJQUFNOztZQUNQQSxJQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLFlBQVlBLElBQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUI7QUFDQSxZQUFZQSxJQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25ELFlBQVlBLElBQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbkQsWUFBWUEsSUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNuRCxZQUFZQSxJQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25EO0FBQ0EsWUFBWUEsSUFBTSxLQUFLLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztBQUN0QyxZQUFZQSxJQUFNLEtBQUssR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLFlBQVlBLElBQU0sS0FBSyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUM7QUFDdEMsWUFBWUEsSUFBTSxLQUFLLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztBQUN0QztBQUNBLFlBQVlBLElBQU0sSUFBSSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUM7QUFDcEMsWUFBWUEsSUFB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QUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksSUFBSSxFQUFFLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osQ0FBQyxDQUFDO0FBQ0Y7QUFDZSxTQUFTLHNCQUFzQixDQUFDLEtBQUssVUFBVTtBQUM5RCxJQUFJRCxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDcEI7QUFDQSxJQUFJLEtBQUtBLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQyxRQUFRQyxJQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDN0QsUUFBUUEsSUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQzdEO0FBQ0EsUUFBUUEsSUFBTSxxQkFBcUI7QUFDbkMsWUFBWSxDQUFDLENBQUMsWUFBWSxJQUFJLENBQUMsaUNBQWlDLENBQUMsWUFBWSxDQUFDLElBQUksd0JBQXdCLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN4SCxhQUFhLENBQUMsWUFBWSxJQUFJLENBQUMsaUNBQWlDLENBQUMsWUFBWSxDQUFDLElBQUksd0JBQXdCLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pILFNBQVMsQ0FBQztBQUNWO0FBQ0EsUUFBUSxJQUFJLHFCQUFxQixJQUFJLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3pFLFlBQVksTUFBTSxJQUFJLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pELFNBQVMsTUFBTTtBQUNmLFlBQVksTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDOztBQ2hIRDtBQUNBO0FBQ0E7QUFDQSxhQUFlLEVBQUUsQ0FBQzs7QUNIbEIsUUFBWSxHQUFHLFVBQVUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtBQUM3RCxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUM7QUFDVixFQUFFLElBQUksSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsRUFBQztBQUNwQyxFQUFFLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxFQUFDO0FBQzVCLEVBQUUsSUFBSSxLQUFLLEdBQUcsSUFBSSxJQUFJLEVBQUM7QUFDdkIsRUFBRSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUM7QUFDaEIsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFDO0FBQ2pDLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUM7QUFDdkIsRUFBRSxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBQztBQUM1QjtBQUNBLEVBQUUsQ0FBQyxJQUFJLEVBQUM7QUFDUjtBQUNBLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBQztBQUMvQixFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBQztBQUNoQixFQUFFLEtBQUssSUFBSSxLQUFJO0FBQ2YsRUFBRSxPQUFPLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxFQUFFO0FBQzlFO0FBQ0EsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFDO0FBQy9CLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFDO0FBQ2hCLEVBQUUsS0FBSyxJQUFJLEtBQUk7QUFDZixFQUFFLE9BQU8sS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLEVBQUU7QUFDOUU7QUFDQSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNmLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFLO0FBQ2pCLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFDekIsSUFBSSxPQUFPLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLFFBQVEsQ0FBQztBQUM5QyxHQUFHLE1BQU07QUFDVCxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFDO0FBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFLO0FBQ2pCLEdBQUc7QUFDSCxFQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pELEVBQUM7QUFDRDtBQUNBLFNBQWEsR0FBRyxVQUFVLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO0FBQ3JFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUM7QUFDYixFQUFFLElBQUksSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsRUFBQztBQUNwQyxFQUFFLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxFQUFDO0FBQzVCLEVBQUUsSUFBSSxLQUFLLEdBQUcsSUFBSSxJQUFJLEVBQUM7QUFDdkIsRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUM7QUFDbEUsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQUM7QUFDakMsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBQztBQUN2QixFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFDO0FBQzdEO0FBQ0EsRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUM7QUFDekI7QUFDQSxFQUFFLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxRQUFRLEVBQUU7QUFDMUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFDO0FBQzVCLElBQUksQ0FBQyxHQUFHLEtBQUk7QUFDWixHQUFHLE1BQU07QUFDVCxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBQztBQUM5QyxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQzNDLE1BQU0sQ0FBQyxHQUFFO0FBQ1QsTUFBTSxDQUFDLElBQUksRUFBQztBQUNaLEtBQUs7QUFDTCxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEVBQUU7QUFDeEIsTUFBTSxLQUFLLElBQUksRUFBRSxHQUFHLEVBQUM7QUFD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UyxNQUFNO0FBQ2YsWUFBWSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLFlBQVksSUFBSSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEMsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxHQUFHLElBQUksbUJBQW1CLElBQUksR0FBRyxHQUFHLENBQUMsbUJBQW1CLEVBQUU7QUFDbEUsUUFBUSxNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7QUFDbkUsS0FBSztBQUNMO0FBQ0EsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCO0FBQ0EsSUFBSSxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDLElBQUksa0JBQWtCLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDLENBQUM7QUFDRDtBQUNBLFNBQVMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7QUFDM0MsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztBQUN2RCxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZELElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFDdkQsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztBQUN2RCxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDcEMsQ0FBQztBQUNEO0FBQ0EsU0FBUyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFO0FBQ3ZDLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQztBQUNqQztBQUNBLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUUsU0FBTztBQUN0RixJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBRSxTQUFPO0FBQ3RGLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFFLFNBQU87QUFDdEYsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUUsU0FBTztBQUN0RixJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBRSxTQUFPO0FBQ3RGLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3RDLENBQUM7QUFDRDtBQUNBLFNBQVMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDcEQsSUFBSSxJQUFJLFFBQVE7QUFDaEIsUUFBUSxHQUFHLElBQUksTUFBTSxHQUFHLENBQUM7QUFDekIsUUFBUSxHQUFHLElBQUksUUFBUSxHQUFHLENBQUM7QUFDM0IsUUFBUSxHQUFHLElBQUksU0FBUyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFFO0FBQ0E7QUFDQSxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDMUIsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxRQUFRLEVBQUUsQ0FBQyxFQUFFLElBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBQztBQUNyRixDQUFDO0FBQ0Q7QUFDQSxTQUFTLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLElBQUk7QUFDMUcsU0FBUyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxHQUFHO0FBQzFHLFNBQVMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsS0FBSztBQUMxRyxTQUFTLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLElBQUk7QUFDMUcsU0FBUyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxHQUFHO0FBQzFHLFNBQVMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFFLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENB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Z0JBQWdCLENBQUNGLElBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQztBQUN4RCxVQUFZNUwsSUFBTSxDQUFDLEdBQUc4TCxLQUFHLENBQUMsQ0FBQyxHQUFHLGFBQWE7QUFDM0MsY0FBZ0IsQ0FBQyxHQUFHQSxLQUFHLENBQUMsQ0FBQyxHQUFHLGFBQWE7QUFDekMsY0FBZ0JDLEdBQUMsR0FBR0YsS0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLO0FBQ2xDLGNBQWdCRyxHQUFDLEdBQUdILEtBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3BDO0FBQ0EsVUFBWSxTQUFTLENBQUMsSUFBSSxDQUFDQSxLQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUMsQ0FBQyxLQUFFLENBQUMsQ0FBQyxFQUFFQSxLQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUU7QUFDQSxVQUFZLFNBQVMsQ0FBQyxJQUFJLENBQUNBLEtBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUVHLEdBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFRCxHQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEcsVUFBWSxTQUFTLENBQUMsSUFBSSxDQUFDRixLQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFNLENBQUMsQ0FBQyxFQUFFLElBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUdHLEdBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFRCxHQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEcsVUFBWSxTQUFTLENBQUMsSUFBSSxDQUFD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YyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hCLEtBQUs7QUFDTDtBQUNBLElBQUksY0FBYyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hELElBQUksS0FBSyxFQUFFLENBQUM7QUFDWjtBQUNBO0FBQ0EsSUFBSUMsSUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBQzdCLElBQUlELElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBQzdCO0FBQ0E7QUFDQSxJQUFJLE9BQU8sY0FBYyxHQUFHLFdBQVcsR0FBRyxDQUFDLEVBQUU7QUFDN0MsUUFBUUMsSUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyQyxRQUFRQSxJQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEMsUUFBUUEsSUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyQztBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFFLE9BQU8sS0FBSyxHQUFDO0FBQ2hDO0FBQ0EsUUFBUUQsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3ZFO0FBQ0EsUUFBUSxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RGO0FBQ0EsUUFBUSxhQUFhLENBQUMsSUFB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RSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNsRyxhQUFhLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtBQUNsQyxnQkFBZ0IsRUFBRSxHQUFHLElBQUlBLGFBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNsRyxhQUFhO0FBQ2I7QUFDQSxZQUFZLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7QUFDeEMsZ0JBQWdCLFNBQVM7QUFDekIsYUFBYSxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7QUFDbEMsZ0JBQWdCLEVBQUUsR0FBRyxJQUFJQSxhQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDbEcsYUFBYSxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7QUFDbEMsZ0JBQWdCLEVBQUUsR0FBRyxJQUFJQSxhQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFD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QztBQUM1QixZQUFZLElBQUksS0FBSyxJQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsK0JBQStCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxTQUFTLENBQUMsR0FBQztBQUMvRyxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDLElBQUksU0FBUyxJQUFFLFdBQVM7QUFDekQ7QUFDQTtBQUNBLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLFFBQVEsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO0FBQzlFLFFBQVEsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO0FBQzlFLFFBQVEsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO0FBQzlFLFFBQVEsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxZQUFZ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QUNBLElBQUksSUFBSSxHQUFHLEdBQUcsYUFBYSxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDaEQsUUFBUSxHQUFHLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3RDtBQUNBLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0QsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDaEMsSUFBSSxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25FLFFBQVEsTUFBTSxJQUFJLENBQUMsR0FBRyxVQUFVLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLElBQUksT0FBTyxHQUFHLEdBQUcsQ0FBQztBQUNoRSxRQUFRLE1BQU0sSUFBSSxDQUFDLEdBQUcsVUFBVSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNqRTtBQUNBLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM1QixDQUFDOztBQzdFRDtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUFLLFFBQVEsSUFBSSxRQUFRLEtBQUssV0FBVyxJQUFFLE9BQU8sUUFBUTtBQUMxRixnQkFBZ0IsUUFBUTtBQUN4QixLQUFTLEdBQUM7QUFDVixJQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUNsQyxJQUFRQyxJQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQy9DLElBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RELElBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLElBQUksUUFBUSxDQUFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBUSxLQUFLRCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN0QztBQUNBLFFBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JFO0FBQ0EsUUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RTtBQUNBLFFBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JFO0FBQ0EsUUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RSxLQUFTO0FBQ1Q7QUFDQSxJQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xFLElBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RSxJQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekUsSUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUUsRUFBQztBQUNMO2tCQUNJLG9CQUFJLENBQUMs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LEtBQUssQ0FBQyxHQUFDO0FBQzFGLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxDQUFDO0FBQ0Q7QUFDQSxTQUFTLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFO0FBQ25DLElBQUksSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBRSxTQUFPO0FBQ25DO0FBQ0EsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2hDLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDM0MsUUFBUSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckMsS0FBSztBQUNMLENBQUM7QUFDRDtBQUNBLFNBQVMsVUFBVSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUU7QUFDL0IsSUFBSSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7QUFDakIsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRTtBQUN0RSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RFLEtBQUs7QUFDTCxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFFLElBQUksQ0FBQyxPQUFP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Q0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM1QyxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBRSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBQztBQUNqQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBRSxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBQztBQUNsQyxLQUFLO0FBQ0wsQ0FBQztBQUNEO0FBQ0EsU0FBUyxRQUFRLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3JDLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDcEIsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9CLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLENBQUM7QUFDRDtBQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3pCLElBQUlDLElBQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEIsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLENBQUM7O0FDN0RjLFNBQVMsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtBQUM3RSxJQUFJQSxJQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsTUFBTSxHQUFH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QUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDL0QsSUFBUUMsSUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVELElBQVFELElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUN2RixJQUFRQyxJQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUQ7QUFDQSxJQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUU7QUFDdEMsUUFBWSxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUM7QUFDMUIsUUFBWSxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLEtBQVMsTUFBTSxJQUFJLE1BQU0sR0FBRyxNQUFNLEVBQUU7QUFDcEMsUUFBWUEsSUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3JGLFFBQVlBLElBQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3RGLFFBQVksT0FBTyxVQUFVLENB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QUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUIsSUFBSSxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNsQixJQUFJLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztBQUN2QixDQUFDO0FBQ0Q7QUFDQSxTQUFTLFlBQVksQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDeEQsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQyxRQUFRLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUN0QixRQUFRLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMxRCxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkIsS0FBSztBQUNMLENBQUM7QUFDRDtBQUNBLFNBQVMsUUFBUSxDQUFDLENBQUMsRUFBRTtBQUNyQixJQUFJLE9BQU8sQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDekIsQ0FBQztBQUNEO0FBQ0EsU0FBUyxRQUFRLENBQUMsQ0FBQyxFQUFFO0FBQ3JCLElBQUksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUMxQyxJQUFJLElBQUksRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNwRSxJQUFJLE9BQU8sRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFD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QUFFLFlBQVksRUFBRTtBQUN4RTtBQUNBLElBQUksSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQy9CLElBQUksSUFBSSxTQUFTLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQ3pELElBQUksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUN6QixJQUFJLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQztBQUNsQjtBQUNBLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDakQsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdCLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM3QixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDN0IsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3JDLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3JDLFFBQVEsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzNCO0FBQ0EsUUFBUSxJQUFJLFlBQVksSUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdB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LE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbkUsS0FBSztBQUNMLENBQUM7QUFDRDtBQUNBLFNBQVMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNoQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixDQUFDO0FBQ0Q7QUFDQSxTQUFTLFVBQVUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUM1QyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDakMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixJQUFJLE9BQU8sQ0FBQyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0EsU0FBUyxVQUFVLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDNUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2pDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENB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QUFDLEVBQUUsRUFBRTtBQUM5QyxRQUFRLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUMzQixRQUFRLFVBQVUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMxRDtBQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNwQyxRQUFRLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDcEMsUUFBUSxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3BDLFFBQVEsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNwQztBQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksR0FBQztBQUMvQyxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUM7QUFDL0MsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFDO0FBQy9DLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksR0FBQztBQUMvQyxLQUFLO0FBQ0wsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDO0FBQ0Q7QUFDQSxTQUFTLFVBQVUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUU7QUFDdkQ7QUFDQSxJQUFJLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxRQUFRO0FBQy9CLFFBQVEsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJO0FBQzNCLFFBQVEsVUFBVSxH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R0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2xGLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQztBQUN4QixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksS0FBSyxFQUFFO0FBQ25CLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ25GLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ25GLFlBQVksS0FBSyxHQUFHLElBQUksQ0FBQztBQUN6QixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsSUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFDO0FBQ25EO0FBQ0EsUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0RCxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxRCxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0RCxRQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUQsS0FBSztBQUNMLENBQUMsQ0FBQztBQUNGO0FBQ0EsU0FBUyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNqRCxJQUFJLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPO0FBQzlCLFFBQVEsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNO0FBQy9CLFFBQVEsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFDOUI7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFFLE9BQU8sSUFBSSxHQUFDO0FBQ3JDO0FBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDN0I7QUFDQSxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNCLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFFLE9BQU8rTyxhQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBQztBQUNqRTtBQUNBLElBQUksSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLEVBQUUsQ0FBQyxF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LENBQUM7QUFDM0MsUUFBUSxJQUFJLE9BQU8sRUFBRTtBQUNyQixZQUFZLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN0RSxZQUFZLE9BQU8sSUFBSSxDQUFDO0FBQ3hCLFNBQVM7QUFDVCxLQUFLO0FBQ0wsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeElBO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0FBLElBQU0sT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFNLFlBQVk7RUFZZCxxQkFBVyxHQUFHO0FBQ2xCLFFBQVFRLFlB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LENBQUMsUUFBUSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQ3BGLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDO0FBQ3JDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDO0FBQ2pDO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ25ELElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDbkQsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNsQztBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRyxDQUFDO0FBQ0Q7QUFDQSxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxVQUFVLElBQUksRUFBRTtBQUN6QyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkQsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEQ7QUFDQSxJQUFJLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEUsSUFBSSxJQUFJLFlBQVksR0FBRyxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BFO0FBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5QyxRQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUYsUUFBUSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzVGLEtBQUs7QUFDTDtBQUNBLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5RSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUU7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2hELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RELFFBQVEsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUcsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLFlBQVksQ0FBQztBQUN4QixDQUFDLENBQUM7QUFDRjtBQUNBO0FBQ0EsU0FBUyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzlDLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNwQyxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDekMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdkMsU0FBUztBQUNULFFBQVEsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNsQyxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3JDLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLFNBQVM7QUFDVCxLQUFLO0FBQ0wsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNqQyxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3BDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLFNBQVM7QUFDVCxRQUFRLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDakMsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNwQyxZQUFZLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEQsU0FBUztBQUNULEtBQUs7QUFDTCxDQUFDO0FBQ0Q7QUFDQTtBQUNBLFNBQVMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDOUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7QUFDaEI7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2QyxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hGLFFBQVEsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzFCLFlBQVksQ0FBQyxFQUFFLENBQUM7QUFDaEIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdB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SyxHQUFHLElBQUksQ0FBQztBQUNwQyxNQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUN0QyxNQUFRLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNyQyxNQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNwQyxNQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNwQyxNQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNoQyxNQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNwQyxNQUFRLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNyQyxNQUFRLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUN4QyxNQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNuQyxNQUFRLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUN2QyxNQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNwQyxNQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNsQyxNQUFRLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUN4QyxNQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNuQyxNQUFRLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUMxQyxNQUFRLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQzNDLE1BQVEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ3RDLE1BQVEsSUFB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LENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JDLE9BQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3ZCLElBQUs7QUFDTDtBQUNBLG9CQUFJLG9DQUFZLFlBQVkseUJBQTJCO0FBQ3ZELE1BQVEsSUFBSSxZQUFZLENBQUMsTUFBTSxLQUFLLEtBQUssRUFBRTtBQUMzQyxVQUFZLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JDLE9BQVMsTUFBTTtBQUNmLFVBQVksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEMsVUFBWSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckQsVUFBWSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDdkQsT0FBUztBQUNULElBQUs7QUFDTDtBQUNBLG9CQUFJLHNDQUFhLFNBQVMsc0JBQXdCO0FBQ2xELE1BQVEsSUFBSSxTQUFTLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtBQUNsRSxVQUFZLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RDLE9BQVMsTUFBTTtBQUNmLFVBQVksSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckMsVUFBWSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0MsVUFBWSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0MsVUFBWSxJQUFJLENB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QUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDakQsWUFBWSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvRSxTQUFTO0FBQ1QsUUFBUSxJQUFJLENBQUNBLHFCQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDbkQsWUFBWSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRixTQUFTO0FBQ1QsUUFBUSxJQUFJLENBQUNBLHFCQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDbkQsWUFBWSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRixTQUFTO0FBQ1QsUUFBUSxJQUFJLENBQUNBLHFCQUFPLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUU7QUFDM0QsWUFBWSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RixTQUFTO0FBQ1QsUUFBUSxJQUFJLENBQUNBLHFCQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDakQsWUFBWSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxRQUFR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QUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN0RCxJQUFRQSxJQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMxRSxJQUFRQSxJQUFNLHNCQUFzQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM0VSxpQkFBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsV0FBVyxHQUFHLGNBQWMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzlLLElBQVE1VSxJQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ2pDLElBQVFBLElBQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDdkM7QUFDQTtBQUNBLElBQVFBLElBQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDO0FBQzVIO0FBQ0EsSUFBUUEsSUFBTSxJQUFJLEdBQUcsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFRQSxJQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN2QztBQUNBO0FBQ0EsSUFBUUQsSUFBSSxDQUFDLEdBQUcsSUFBSSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckMsSUFBUXFiLHVCQUFnQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDOUU7QUFDQTtBQUNBLElBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxQyxJQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzFDO0FBQ0EsSUFBUXRILGlCQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLElBQVFELHFCQUFjLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO0FBQ25FLElBQVF3SCxtQkFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLElBQVF2RyxtQkFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3ZDLElBQVFqQixxQkFBYyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFDO0FBQ0E7QUFDQTtBQUNBLElBQVEsSUFBSSxDQUFDLGNBQWMsR0FBR0MsaUJBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ2xHO0FBQ0E7QUFDQSxJQUFRQSxpQkFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFd0gsaUNBQXFCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hHO0FBQ0EsSUFBUSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUM1QixJQUFRLElBQUksQ0FBQyxhQUFhLEdBQUdwRixrQkFBVyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFRbFcsSUFBTSxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQztBQUMzRSxRQUFZLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzVFLFFBQVksRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsR0FBRyxNQUFNLEdBQUcsUUFBUSxHQUFHLE1BQU07QUFDMUUsUUFBWSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxHQUFHLE1BQU0sR0FBRyxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQzNFLElBQVFBLElBQU0sUUFBUSxHQUFHLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLElBQVE2VCxxQkFBYyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsRyxJQUFRLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxRQUFRLENBQUM7QUFDMUM7QUFDQSxJQUFRLENBQUMsR0FBR2dCLGtCQUFXLEVBQUUsQ0FBQztBQUMxQixJQUFRZixpQkFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEUsSUFBUUQscUJBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekMsSUFBUSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDO0FBQ0EsSUFBUSxDQUFDLEdBQUdnQixrQkFBVyxFQUFFLENBQUM7QUFDMUIsSUFBUWYsaUJBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckMsSUFBUUQscUJBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQyxJQUFRQyxpQkFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9ELElBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFDL0I7QUFDQTtBQUNBLElBQVEsSUFBSSxDQUFDLFdBQVcsR0FBR0Msb0JBQWEsQ0FBQyxJQUFJLFlBQVksQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3ZHO0FBQ0E7QUFDQSxJQUFRLENBQUMsR0FBR21DLGtCQUFXLENBQUMsSUFBSSxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2hFLElBQVEsSUFBSSxDQUFDLENBQUMsSUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLEdBQUM7QUFDM0QsSUFBUSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDO0FBQ0EsSUFBUSxJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztBQUNsQyxJQUFRLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxFQUFFLENBQUM7QUFDckMsRUFBQztBQUNMO29CQUNJLHNEQUFzQjtBQUMxQjtBQUNBLElBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsSUFBRSxPQUFPLENBQUMsR0FBQztBQUMvQztBQUNBLElBQVFsVyxJQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUlzRCxpQkFBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVELElBQVF0RCxJQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdFLElBQVFBLElBQU0sUUFBUSxHQUFHdUsseUJBQWtCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDcEUsSUFBUSxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUM7QUFDckQsRUFBQztBQUNMO0FBQ0k7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtvQkFDSSw0Q0FBaUI7QUFDckIsSUFBUXZLLElBQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDbEMsSUFBUUEsSUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsc0JBQXNCLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDN0UsSUFBUSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUlzRCxpQkFBSyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELEVBQUM7QUFDTDtBQUNJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO29CQUNJLDBEQUF1QixhQUFhLHNCQUE4QjtBQUN0RSxJQUFRdEQsSUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3hDO0FBQ0EsSUFBUSxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ3hDLFFBQVksT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN6QyxLQUFTLE1BQU07QUFDZixRQUFZRCxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLFFBQVlBLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsUUFBWUEsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixRQUFZQSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLFFBQVksdUJBQWdCLHNDQUFhLEVBQUU7QUFDM0MsWUFEaUJDLElBQU07O2dCQUNQLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0MsWUFBZ0IsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQyxZQUFnQixJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLFlBQWdCLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0MsU0FBYTtBQUNiLFFBQVksT0FBTztBQUNuQixZQUFnQixJQUFJc0QsaUJBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO0FBQ3JDLFlBQWdCLElBQUlBLGlCQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztBQUNyQyxZQUFnQixJQUFJQSxpQkFBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7QUFDckMsWUFBZ0IsSUFBSUEsaUJBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO0FBQ3JDLFlBQWdCLElBQUlBLGlCQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztBQUNyQyxTQUFhLENBQUM7QUFDZCxLQUFTO0FBQ0w7O21FQUNIOztBQy96QkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDZSxTQUFTLFFBQVEsQ0FBQyxFQUFFLGNBQWMsSUFBSSw0QkFBNEI7QUFDakYsSUFBSXZELElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztBQUN4QixJQUFJQSxJQUFJLE9BQU8sZUFBZSxJQUFJLENBQUM7QUFDbkM7QUFDQSxJQUFJQyxJQUFNLEtBQUssZUFBUztBQUN4QixRQUFRLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDdkIsUUFBUSxJQUFJLE9BQU8sRUFBRTtBQUNyQixZQUFZLEVBQUUsRUFBRSxDQUFDO0FBQ2pCLFlBQVksT0FBTyxHQUFHLFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDOUMsWUFBWSxPQUFPLEdBQUcsS0FBSyxDQUFDO0FBQzVCLFNBQVM7QUFDVCxLQUFLLENBQUM7QUFDTjtBQUNBLElBQUksbUJBQWE7QUFDakIsUUFBUSxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUN0QixZQUFZLEtBQUssRUFBRSxDQUFDO0FBQ3BCLFNBQVM7QUFDVCxRQUFRLE9BQU8sT0FBTyxDQUFDO0FBQ3ZCLEtBQUssQ0FBQztBQUNOLENBQUM7O0FDM0JEO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBTSxJQUFJLEdBS04sYUFBVyxDQUFDLFFBQVEsT0FBVztBQUNuQyxJQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxJQUFJLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2xFLElBQVE0VCxtQkFBTyxDQUFDO0FBQ2hCLFFBQVksaUJBQWlCO0FBQzdCLFFBQVksZUFBZTtBQUMzQixRQUFZLGFBQWE7QUFDekIsS0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2pCO0FBQ0E7QUFDQSxJQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztBQUN6RixFQUFDO0FBQ0w7QUFDSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7ZUFDSSx3QkFBTSxHQUFHLEdBQU87QUFDcEIsSUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUN4QixJQUFRMVQsa0JBQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN6RSxJQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDbEQsSUFBUSxPQUFPLElBQUksQ0FBQztBQUNoQixFQUFDO0FBQ0w7QUFDSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO2VBQ0ksNEJBQVM7QUFDYixJQUFRQSxrQkFBTSxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVFLElBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNuRCxJQUFRLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUN6QztBQUNBLElBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ3pCLElBQVEsT0FBTyxJQUFJLENBQUM7QUFDaEIsRUFBQztBQUNMO2VBQ0ksd0NBQWMsV0FBVyxRQUFZO0FBQ3pDLElBQVFGLElBQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQzVDLFFBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHO0FBQzlEO0FBQ0EsUUFBWSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzVGLFFBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQztBQUN2QyxRQUFZLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUNoRCxRQUFZLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUNoRCxRQUFZLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtBQUM1QyxRQUFZLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3pDLElBQVFELElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUN0QixJQUFRLElBQUksV0FBVyxFQUFFO0FBQ3pCO0FBQ0E7QUFDQSxRQUFZLElBQUksSUFBSSxNQUFJLEdBQUcsU0FBSSxHQUFHLFNBQUksSUFBTSxDQUFDO0FBQzdDLEtBQVMsTUFBTTtBQUNmLFFBQVksSUFBSSxJQUFPLElBQUksU0FBSSxHQUFHLFNBQUksR0FBSyxDQUFDO0FBQzVDLEtBQVM7QUFDVDtBQUNBLElBQVEsSUFBSSxPQUFPLElBQUksS0FBSyxJQUFFLElBQUksYUFBUyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsR0FBRyxLQUFLLEdBQUM7QUFDNUUsSUFBUSxJQUFJLEtBQUssSUFBRSxJQUFJLGFBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksR0FBQztBQUNyRDtBQUNBLElBQVEsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQzVCLFFBQVlDLElBQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDNUMsUUFBWUQsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQzlCLFFBQVlDLElBQU0sS0FBSyxHQUFHRSxrQkFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFdBQUMsTUFBUTtBQUMvRSxZQUFnQkYsSUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQyxZQUFnQixJQUFJLEdBQUcsS0FBSyxRQUFRLEVBQUU7QUFDdEMsZ0JBQW9CLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDakMsZ0JBQW9CLFFBQVUsR0FBRyxTQUFJLE1BQU87QUFDNUMsYUFBaUI7QUFDakIsWUFBZ0IsT0FBTyxJQUFJLENBQUM7QUFDNUIsU0FBYSxDQUFDLENBQUMsTUFBTSxXQUFDLFlBQUssSUFBQyxDQUFDLENBQUM7QUFDOUIsUUFBWSxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ3hCLFlBQWdCLEtBQUssQ0FBQyxJQUFJLEVBQUksUUFBUSxTQUFJLE1BQU8sQ0FBQztBQUNsRCxTQUFhO0FBQ2IsUUFBWSxlQUFXLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJO0FBQ3pDLEtBQVM7QUFDVDtBQUNBLElBQVEsY0FBVyxNQUFPO0FBQ3RCLEVBQUM7QUFDTDtlQUNJLDhDQUFrQjs7QUFBQztBQUN2QjtBQUNBLElBQVFBLElBQU0sSUFBSSxHQUFHRSxrQkFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMzRCxJQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUM1QjtBQUNBLFFBQVlILElBQUksTUFBTSxDQUFDO0FBQ3ZCLFFBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHO0FBQy9CLHNCQUFnQixlQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFDO0FBQ3ZDLFNBQWEsQ0FBQyxPQUFPLFdBQUMsTUFBUTtBQUM5QixZQUFnQixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBS1EsTUFBSSxDQUFDLFNBQVMsRUFBRTtBQUNoRCxnQkFBb0IsTUFBTSxHQUFHLElBQUksQ0FBQztBQUNsQyxhQUFpQjtBQUNqQixTQUFhLENBQUMsQ0FBQztBQUNmLFFBQVksT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUQsS0FBUztBQUNULElBQVEsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLEVBQUM7QUFDTDtlQUNJLDBDQUFnQjtBQUNwQixJQUFRUCxJQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7QUFDM0MsSUFBUSxJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksV0FBQyxZQUFLLEtBQUssQ0FBQyxDQUFDLElBQUMsQ0FBQyxFQUFFO0FBQ3pELFFBQVlBLElBQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDaEosUUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM3QixZQUFnQixNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQyxZQUFnQixJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdCLHFCQUFnQixPQUFPO0FBQ3ZCLFlBQWdCLEtBQUssRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckMsU0FBYSxDQUFDLENBQUM7QUFDZixRQUFZLE9BQU8sSUFBSSxDQUFDO0FBQ3hCLEtBQVM7QUFDVCxJQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLEVBQUM7QUFDTDtlQUNJLDREQUF5QjtBQUM3QixJQUFRQSxJQUFNLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDMUMsSUFBUSxJQUFJO0FBQ1osUUFBWUUsa0JBQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDQSxrQkFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3hFLEtBQVMsQ0FBQyxPQUFPLGFBQWEsRUFBRTtBQUNoQztBQUNBO0FBQ0E7QUFDQSxLQUFTO0FBQ0wsRUFFSDs7QUNoSkQ7QUFDQTtBQU1BO0FBQ0FGLElBQU0scUJBQXFCLEdBQUc7QUFDOUIsSUFBSSxTQUFTLEVBQUUsR0FBRztBQUNsQixJQUFJLE1BQU0sRUFBRW1HLGtCQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2hDLENBQUMsQ0FBQztBQUNGO0FBQ0FuRyxJQUFNLHdCQUF3QixHQUFHZ0Msa0JBQU0sQ0FBQztBQUN4QyxJQUFJLFlBQVksRUFBRSxJQUFJO0FBQ3RCLElBQUksUUFBUSxFQUFFLElBQUk7QUFDbEIsQ0FBQyxFQUFFLHFCQUFxQixDQUFDLENBQUM7QUFDMUI7QUFDQWhDLElBQU0seUJBQXlCLEdBQUdnQyxrQkFBTSxDQUFDO0FBQ3pDLElBQUksWUFBWSxFQUFFLEVBQUU7QUFDcEIsSUFBSSxRQUFRLEVBQUUsSUFBSTtBQUNsQixDQUFDLEVBQUUscUJBQXFCLENBQUMsQ0FBQztBQUMxQjtBQUNBaEMsSUFBTSw0QkFBNEIsR0FBR2dDLGtCQUFNLENBQUM7QUFDNUMsSUFBSSxZQUFZLEVBQUUsSUFBSTtBQUN0QixJQUFJLFFBQVEsRUFBRSxHQUFHO0FBQ2pCLENBQUMsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0FBQzFCO0FBQ0FoQyxJQUFNLDBCQUEwQixHQUFHZ0Msa0JBQU0sQ0FBQztBQUMxQyxJQUFJLFlBQVksRUFBRSxJQUFJO0FBQ3RCLElBQUksUUFBUSxFQUFFLEVBQUU7QUFDaEIsQ0FBQyxFQUFFLHFCQUFxQixDQUFDLENBQUM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDZSxJQUFNLGNBQWMsR0FJL0IsdUJBQVcsQ0FBQyxHQUFHLEtBQU87QUFDMUIsTUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUN4QixNQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNyQixJQUFLO0FBQ0w7QUFDQSwyQkFBSSwwQkFBUTtBQUNaLE1BQVEsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7QUFDakMsSUFBSztBQUNMO0FBQ0EsMkJBQUksMEJBQU8sUUFBUSxLQUFPO0FBQzFCLE1BQVEsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7QUFDbkMsTUFBUSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRTVCLG1CQUFPLENBQUMsR0FBRyxFQUFFLFlBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUNsRSxJQUFLO0FBQ0w7QUFDQSwyQkFBSSxzREFBc0I7QUFDMUIsTUFBUUosSUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWM7QUFDM0MsVUFBWSxHQUFHLEdBQUdJLG1CQUFPLENBQUMsR0FBRyxFQUFFO0FBQy9CLFVBQVksTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUN6QjtBQUNBLE1BQVEsT0FBTyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNO0FBQ25FLFlBQVksT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFDO0FBQzVCLElBQUs7QUFDTDtBQUNBLDJCQUFJLGtDQUFXLGlCQUFpQixpQkFBbUI7QUFDbkQsTUFBUSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztBQUNuQyxNQUFRLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQzVDLFVBQVksT0FBTztBQUNuQixPQUFTO0FBQ1Q7QUFDQSxNQUFRSixJQUFNLE1BQU0sR0FBRztBQUN2QixVQUFZLElBQUksRUFBRSxDQUFDO0FBQ25CLFVBQVksT0FBTyxFQUFFLENBQUM7QUFDdEIsVUFBWSxLQUFLLEVBQUUsQ0FBQztBQUNwQixVQUFZLEdBQUcsRUFBRSxJQUFJc0QsaUJBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2hDLFVBQVksV0FBVyxFQUFFLFNBQVM7QUFDbEMsVUFBWSxNQUFNLEVBQUUsU0FBUztBQUM3QixPQUFTLENBQUM7QUFDVjtBQUNBLE1BQVEsdUJBQXlCLElBQUksQ0FBQyx1Q0FBYyxFQUFFO0FBQ3RELFVBRGF0RDtVQUFPOztVQUNSLE1BQU0sQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7QUFDbkQsVUFBWSxNQUFNLENBQUMsT0FBTyxJQUFJLFFBQVEsQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDO0FBQ3pELFVBQVksTUFBTSxDQUFDLEtBQUssSUFBSSxRQUFRLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQztBQUNyRCxVQUFZLElBQUksUUFBUSxDQUFDLFFBQVEsSUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUM7QUFDdEUsVUFBWSxJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUUsTUFBTSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFDO0FBQ2pFLFVBQVksSUFBSSxRQUFRLENBQUMsV0FBVyxJQUFFLE1BQU0sQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsR0FBQztBQUNoRixPQUFTO0FBQ1Q7QUFDQSxNQUFRQSxJQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzlFLE1BQVFBLElBQU0sUUFBUSxJQUFJLFNBQVMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN4RTtBQUNBLE1BQVFBLElBQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUMvQjtBQUNBLE1BQVEsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFO0FBQzlCLFVBQVlBLElBQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLFFBQVEsRUFBRWdDLGtCQUFNLENBQUMsRUFBRSxFQUFFLHdCQUF3QixFQUFFLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdEksVUFBWSxXQUFXLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ25GLFVBQVksV0FBVyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7QUFDNUQsVUFBWSxjQUFjLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2hELE9BQVM7QUFDVDtBQUNBLE1BQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFO0FBQ3pCLFVBQVloQyxJQUFNdWIsUUFBTSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO0FBQzdGLFVBQVksV0FBVyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUdBLFFBQU0sQ0FBQyxNQUFNLENBQUM7QUFDeEUsVUFBWSxjQUFjLENBQUMsV0FBVyxFQUFFQSxRQUFNLENBQUMsQ0FBQztBQUNoRCxPQUFTO0FBQ1Q7QUFDQSxNQUFRLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRTtBQUM1QixVQUFZdmIsSUFBTXViLFFBQU0sR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsNEJBQTRCLENBQUMsQ0FBQztBQUNuRyxVQUFZLFdBQVcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHM0csaUJBQUssQ0FBQzJHLFFBQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEcsVUFBWSxjQUFjLENBQUMsV0FBVyxFQUFFQSxRQUFNLENBQUMsQ0FBQztBQUNoRCxPQUFTO0FBQ1Q7QUFDQSxNQUFRLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRTtBQUMxQixVQUFZdmIsSUFBTXViLFFBQU0sR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsMEJBQTBCLENBQUMsQ0FBQztBQUMvRixVQUFZLFdBQVcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHQSxRQUFNLENBQUMsTUFBTSxDQUFDO0FBQzFFLFVBQVksY0FBYyxDQUFDLFdBQVcsRUFBRUEsUUFBTSxDQUFDLENBQUM7QUFDaEQsT0FBUztBQUNUO0FBQ0EsTUFBUSxJQUFJLFdBQVcsQ0FBQyxJQUFJLElBQUksV0FBVyxDQUFDLE9BQU8sRUFBRTtBQUNyRCxVQUFZdmIsSUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFdBQVcsS0FBSyxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDO0FBQy9GLFVBQVksV0FBVyxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUMxRixPQUFTO0FBQ1Q7QUFDQSxNQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNyQixNQUFRLE9BQU9nQyxrQkFBTSxDQUFDLFdBQVcsRUFBRTtBQUNuQyxVQUFZLFdBQVcsRUFBRSxJQUFJO0FBQzdCLE9BQVMsQ0FBQyxDQUFDO0FBQ1g7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsY0FBYyxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUU7QUFDN0MsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxXQUFXLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUU7QUFDekUsUUFBUSxXQUFXLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7QUFDL0MsUUFBUSxXQUFXLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDM0MsS0FBSztBQUNMLENBQUM7QUFDRDtBQUNBLFNBQVMsZUFBZSxDQUFDLE1BQU0sRUFBRSxlQUFlLFVBQVUsY0FBYyxFQUFFO0FBQzFFLElBQVc7SUFBVTtJQUFXLCtDQUErQjtBQUMvRCxJQUFJaEMsSUFBTSxLQUFLLEdBQUc0VSxpQkFBSztBQUN2QixRQUFRLE1BQU0sR0FBRyxTQUFTLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQztBQUNyRCxRQUFRLENBQUMsUUFBUTtBQUNqQixRQUFRLFFBQVEsQ0FBQyxDQUFDO0FBQ2xCLElBQUk1VSxJQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLFlBQVksR0FBRyxTQUFTLENBQUMsQ0FBQztBQUNsRSxJQUFJLE9BQU87QUFDWCxRQUFRLE1BQU0sRUFBRSxjQUFjLENBQUMsTUFBTTtBQUNyQyxRQUFRLFFBQVEsRUFBRSxRQUFRLEdBQUcsSUFBSTtBQUNqQyxRQUFRLE1BQU0sRUFBRSxLQUFLLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQUN0QyxLQUFLLENBQUM7QUFDTixDQUFDOztBQzdKRDtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTSxhQUFhO0VBd0V0QixzQkFBVyxDQUFDLElBQUksVUFBVSxHQUFHLE9BQU8sYUFBYSxjQUFjLElBQWlCLEVBQUU7bUNBQWYsV0FBVztBQUFLO0FBQ3ZGLFFBQVFBLElBQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDNUUsUUFBUUEsSUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1QyxRQUFRUSxVQUFLLE9BQUMsSUFBSSxFQUFFd0Isa0JBQU0sQ0FBQyxRQUFDLEtBQUssVUFBRSxNQUFNLGlCQUFFLGFBQWEsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbEUsUUFBUSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0FBQ3ZDLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDMUI7Ozs7Ozs7OzBCQXZCSSw0Q0FBaUI7QUFDckIsUUFBUSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0FBQ3RDLE1BQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxtQkFBSSw0Q0FBNEI7QUFDcEMsUUFBUSxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztBQUN0Qzs7Ozs7RUFqRW1DMFAsb0JBK0VsQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNLGFBQWE7RUFtRXRCLHNCQUFXLENBQUMsSUFBSSxVQUFVLEdBQUcsT0FBTyxhQUFhLGNBQWM7QUFDbkUsUUFBUTFSLElBQU0sT0FBTyxHQUFHLElBQUksS0FBSyxVQUFVLEdBQUcsYUFBYSxDQUFDLGNBQWMsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDO0FBQ25HLFFBQVFBLElBQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDdkUsUUFBUUEsSUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEdBQUcsV0FBRSxDQUFDLFdBQUssR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUMsQ0FBQyxDQUFDO0FBQzVELFFBQVFBLElBQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLFdBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFLO0FBQzVELFlBQVksT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDbEQsU0FBUyxFQUFFLElBQUlzRCxpQkFBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLFFBQVF0RCxJQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVDLFFBQVFRLFVBQUssT0FBQyxJQUFJLEVBQUUsU0FBQyxNQUFNLFNBQUUsS0FBSyxXQUFFLE9BQU8sVUFBRSxNQUFNLGlCQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7QUFDckUsUUFBUSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0FBQ3ZDOzs7Ozs7OzswQkEzQkksNENBQWlCO0FBQ3JCLFFBQVEsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztBQUN0QyxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUkscUJBQUksNENBQTRCO0FBQ3BDLFFBQVEsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7QUFDdEM7Ozs7O0VBNURtQ2tSLG9CQThFbEM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTSxhQUFhO0VBc0N0QixzQkFBVyxDQUFDLElBQUksVUFBVSxHQUFHLE9BQU8sYUFBYSxjQUFjO0FBQ25FLFFBQVFsUixVQUFLLE9BQUMsSUFBSSxFQUFFLGdCQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7QUFDckMsUUFBUSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0FBQ3ZDOzs7Ozs7OzswQkFwQkksNENBQWlCO0FBQ3JCLFFBQVEsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztBQUN0QyxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUkscUJBQUksNENBQTRCO0FBQ3BDLFFBQVEsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7QUFDdEM7Ozs7O0VBL0JtQ2tSLG9CQTBDbEM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdlJBO0FBQ0E7QUFHQTtBQUNBLElBQWEsZUFBZSxHQU14Qix3QkFBVyxDQUFDLEdBQUcsR0FBTyxPQUFPLDBCQUE4QjtBQUMvRCxJQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ3hCLElBQVEsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDO0FBQ2xELEVBQUM7QUFDTDswQkFDSSwwQkFBUTtBQUNaLElBQVEsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0FBQzlCLEVBQUM7QUFDTDswQkFDSSx3QkFBTSxDQUFDLFVBQWM7QUFDekI7QUFDQTtBQUNBLElBQVEsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsRUFBQztBQUNMOzBCQUNJLGdDQUFVLENBQUMsVUFBYyxLQUFLLEtBQVM7QUFDM0MsSUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBUSxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSxFQUFDO0FBQ0w7MEJBQ0ksNEJBQVEsQ0FBQyxVQUFjO0FBQzNCLElBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUQsRUFBQztBQUNMOzBCQUNJLHdCQUFNLENBQUMsVUFBYyxLQUFLLEtBQVM7QUFDdkMsSUFBUSxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBRSxTQUFPO0FBQ2pHLElBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUQsRUFBQztBQUNMOzBCQUNJLDhCQUFTLENBQUMsVUFBYztBQUM1QjtBQUNBO0FBQ0EsSUFBUSxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSxFQUFDO0FBQ0w7MEJBQ0ksZ0NBQVUsQ0FBQyxVQUFjO0FBQzdCLElBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUQsRUFBQztBQUNMOzBCQUNJLDhCQUFTLENBQUMsVUFBYztBQUM1QixJQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVELEVBQUM7QUFDTDswQkFDSSxrQ0FBVyxDQUFDLFVBQWM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFRLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFFLEVBQUM7QUFDTDswQkFDSSw4QkFBUyxDQUFDLFVBQWM7QUFDNUIsSUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RCxFQUFDO0FBQ0w7MEJBQ0ksb0NBQVksQ0FBQyxVQUFjO0FBQy9CLElBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUQsRUFBQztBQUNMOzBCQUNJLDhDQUFpQixRQUFRLDZDQUFpRDtBQUM5RSxJQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2pDLElBQVEsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLEVBQUU7QUFDdkM7QUFDQSxRQUFZLE9BQU8sRUFBRSxDQUFDO0FBQ3RCLEtBQVM7QUFDTCxFQUFDO0FBQ0w7MEJBQ0ksa0NBQVk7QUFDaEIsSUFBUSxPQUFPLElBQUksQ0FBQztBQUNoQixFQUFDO0FBQ0w7MEJBQ0ksZ0NBQVc7QUFDZixJQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLEVBQUM7MEJBQ0QsNEJBQVMsR0FBRTswQkFDWCw4QkFBVSxHQUNiO0FBQ0Q7QUFDTyxJQUFNLHdCQUF3QixHQUtqQyxpQ0FBVyxDQUFDLEdBQUcsR0FBTztBQUMxQixJQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ3BCLEVBQUM7QUFDTDttQ0FDSSwwQkFBUTtBQUNaLElBQVEsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztBQUN2QyxJQUFRLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO0FBQ2xDLEVBQUM7QUFDTDttQ0FDSSxnQ0FBVSxDQUFDLFVBQWM7QUFDN0I7QUFDQSxJQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVELEVBQUM7QUFDTDttQ0FDSSxnQ0FBVSxDQUFDLFVBQWM7QUFDN0I7QUFDQSxJQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVELEVBQUM7QUFDTDttQ0FDSSxrQ0FBWTtBQUNoQixJQUFRLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7QUFDbEMsRUFBQztBQUNMO21DQUNJLDhCQUFVO0FBQ2QsSUFBUSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0FBQ3ZDLElBQVEsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7QUFDcEMsUUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLGFBQWEsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0FBQ2hHLFFBQVksT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7QUFDMUMsS0FBUztBQUNMLEVBQUM7bUNBQ0Qsb0NBQVksQ0FBQyxVQUFjO0FBQy9CLElBQVEsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7QUFDcEM7QUFDQSxRQUFZLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7QUFDdkMsS0FBUyxNQUFNO0FBQ2Y7QUFDQSxRQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLEtBQVM7QUFDVDtBQUNBO0FBQ0EsSUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFO0FBQzlDLFFBQVksQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQy9CLEtBQVM7QUFDTCxFQUFDO0FBQ0w7bUNBQ0ksa0NBQVk7QUFDaEIsSUFBUSxPQUFPLElBQUksQ0FBQztBQUNoQixFQUFDO0FBQ0w7bUNBQ0ksZ0NBQVc7QUFDZixJQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLEVBQUM7bUNBQ0QsNEJBQVMsR0FBRTttQ0FDWCw4QkFBVSxHQUNiOztBQzVKRDtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBTSxjQUFjLEdBY2hCLHVCQUFXLENBQUMsR0FBRyxHQUFPLE9BQU87QUFDakM7QUFDQSxHQUFPO0FBQ1AsSUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUN4QixJQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLGtCQUFrQixFQUFFLENBQUM7QUFDNUMsSUFBUSxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUM3QyxJQUFRLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUM7QUFDdkQsRUFBQztBQUNMO0FBQ0k7QUFDSjtBQUNBO0FBQ0E7QUFDQTt5QkFDSSxrQ0FBWTtBQUNoQixJQUFRLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDM0IsRUFBQztBQUNMO0FBQ0k7QUFDSjtBQUNBO0FBQ0E7QUFDQTt5QkFDSSxnQ0FBVztBQUNmLElBQVEsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUMxQixFQUFDO0FBQ0w7QUFDSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7eUJBQ0ksNEJBQVM7QUFDYixJQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFFLFNBQU87QUFDckMsSUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUN6QixFQUFDO0FBQ0w7QUFDSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7eUJBQ0ksOEJBQVU7QUFDZCxJQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUUsU0FBTztBQUN0QyxJQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzFCLEVBQUM7QUFDTDt5QkFDSSxnQ0FBVSxDQUFDLFVBQWMsS0FBSyxLQUFTO0FBQzNDLElBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBRSxTQUFPO0FBQ3RDLElBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsSUFBRSxTQUFPO0FBQ3BEO0FBQ0EsSUFBUSxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDMUIsSUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQy9DLElBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDeEIsRUFBQztBQUNMO3lCQUNJLDRDQUFnQixDQUFDLFVBQWMsS0FBSyxLQUFTO0FBQ2pELElBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUUsU0FBTztBQUNsQztBQUNBLElBQVExUixJQUFNLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDMUI7QUFDQSxJQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRTtBQUMxRyxRQUFZLE9BQU87QUFDbkIsS0FBUztBQUNUO0FBQ0EsSUFBUUEsSUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUNsQyxJQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBQzVCO0FBQ0EsSUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtBQUN4QixRQUFZLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQy9FLFFBQVksSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFDaEUsUUFBWSxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvQyxLQUFTO0FBQ1Q7QUFDQSxJQUFRQSxJQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxQyxRQUFZLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN4QyxRQUFZLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN4QyxRQUFZLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDO0FBQ0EsSUFBUSxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLGtCQUFlLElBQUksV0FBTSxJQUFJLFVBQU0sQ0FBQztBQUN0RTtBQUNBLElBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFNLElBQUksR0FBRyxZQUFRLENBQUM7QUFDbkQsSUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQU0sSUFBSSxHQUFHLFlBQVEsQ0FBQztBQUNoRCxFQUFDO0FBQ0w7eUJBQ0ksd0NBQWMsQ0FBQyxVQUFjLEtBQUssS0FBUzs7QUFBQztBQUNoRCxJQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFFLFNBQU87QUFDbEM7QUFDQSxJQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUUsU0FBTztBQUNuQztBQUNBLElBQVFBLElBQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTO0FBQ2pDLFFBQVksRUFBRSxHQUFHLEtBQUssQ0FBQztBQUN2QjtBQUNBLElBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JCO0FBQ0EsSUFBUSxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDNUI7QUFDQSxJQUFRLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRTtBQUM1QyxRQUFZLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2hELEtBQVMsTUFBTTtBQUNmLFFBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSTBSLGlCQUFLLENBQUMsWUFBWSxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RSxRQUFZLE9BQU87QUFDbkIsWUFBZ0IsZUFBZSxZQUFFLGNBQU8sR0FBRyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUVuUixNQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFDO0FBQ2hILFNBQWEsQ0FBQztBQUNkLEtBQVM7QUFDTCxFQUFDO0FBQ0w7eUJBQ0ksNEJBQVEsQ0FBQyxhQUFpQjtBQUM5QixJQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFFLFNBQU87QUFDbEM7QUFDQSxJQUFRLElBQUksQ0FBQyxDQUFDLE9BQU8sS0FBSyxFQUFFLEVBQUU7QUFDOUIsUUFBWSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDekIsUUFBWSxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNoRCxLQUFTO0FBQ0wsRUFBQztBQUNMO3lCQUNJLDBCQUFRO0FBQ1osSUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztBQUM3QjtBQUNBLElBQVEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFDL0Q7QUFDQSxJQUFRLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtBQUN2QixRQUFZLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xDLFFBQVksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLEVBQU0sQ0FBQztBQUNwQyxLQUFTO0FBQ1Q7QUFDQSxJQUFRLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUN6QjtBQUNBLElBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQzlCLElBQVEsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQ3pCLEVBQUM7QUFDTDt5QkFDSSxrQ0FBVyxJQUFJLE1BQVUsQ0FBQyxLQUFLO0FBQ25DLElBQVEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJbVIsaUJBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9ELEVBQ0g7O0FDbktEO0FBQ0E7QUFHTyxTQUFTLFlBQVksQ0FBQyxPQUFPLGFBQWEsTUFBTSxnQkFBZ0I7QUFDdkUsSUFBSWpSLGtCQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDN0MsSUFBSVQsSUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ25CLElBQUksS0FBS0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzdDLFFBQVEsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0MsS0FBSztBQUNMLElBQUksT0FBTyxHQUFHLENBQUM7QUFDZixDQUFDOztBQ1hEO0FBQ0E7QUFJQSxTQUFTLFdBQVcsQ0FBQyxNQUFNLGdCQUFnQjtBQUMzQyxJQUFJQyxJQUFNLEdBQUcsR0FBRyxJQUFJc0QsaUJBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDaEMsSUFBSSx1QkFBb0IsK0JBQU0sRUFBRTtBQUNoQyxRQURTdEQsSUFBTTs7UUFDUCxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hCLEtBQUs7QUFDTCxJQUFJLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbEMsQ0FBQztBQUNEO0FBQ09BLElBQU0sZ0JBQWdCLEdBQUcsR0FBRyxDQUFDO0FBQ3BDQSxJQUFNLGNBQWMsR0FBRyxHQUFHLENBQUM7QUFDM0JBLElBQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUNwQjtBQUNPLElBQU0sbUJBQW1CLEdBUTVCLDRCQUFXLENBQUMsT0FBTyxzQkFBMEI7QUFDakQsSUFBUSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDckIsSUFBUSxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7QUFDekMsRUFBQztBQUNMOzhCQUNJLDBCQUFRO0FBQ1osSUFBUSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDN0IsSUFBUSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDOUIsSUFBUSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDNUIsSUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztBQUN6QixFQUFDO0FBQ0w7OEJBQ0ksa0NBQVcsQ0FBQyxVQUFjLE1BQU0sWUFBZ0I7QUFDcEQ7QUFDQSxJQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ3ZFLFFBQVksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDaEMsS0FBUztBQUNULElBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO0FBQzFCLFFBQVksT0FBTztBQUNuQixLQUFTO0FBQ1Q7QUFDQSxJQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUU7QUFDMUMsUUFBWSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDekMsS0FBUztBQUNUO0FBQ0EsSUFBUSxJQUFJLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUU7QUFDeEQsUUFBWSxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNoRCxRQUFZLElBQUksQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDakUsS0FBUztBQUNMLEVBQUM7QUFDTDs4QkFDSSxnQ0FBVSxDQUFDLFVBQWMsTUFBTSxZQUFnQjtBQUNuRCxJQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUUsU0FBTztBQUNuRDtBQUNBLElBQVFBLElBQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2pFLElBQVEsS0FBS0EsSUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUN2QyxRQUFZQSxJQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdDLFFBQVlBLElBQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2QyxRQUFZLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxRQUFRLEVBQUU7QUFDdEQsWUFBZ0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDcEMsU0FBYTtBQUNiLEtBQVM7QUFDTCxFQUFDO0FBQ0w7OEJBQ0ksOEJBQVMsQ0FBQyxVQUFjO0FBQzVCLElBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLGNBQWMsRUFBRTtBQUM3RSxRQUFZLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ2hDLEtBQVM7QUFDVDtBQUNBLElBQVEsSUFBSSxDQUFDLENBQUMsYUFBYSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDMUMsUUFBWUEsSUFBTSxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDNUQsUUFBWSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDekIsUUFBWSxJQUFJLFFBQVEsSUFBRSxPQUFPLFFBQVEsR0FBQztBQUMxQyxLQUFTO0FBQ0wsRUFFSDtBQUNEO0FBQ08sSUFBTSxhQUFhLEdBUXRCLHNCQUFXLENBQUMsT0FBTyx1Q0FBMkM7QUFDbEUsSUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDMUQsSUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7QUFDdkMsSUFBUSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDakIsRUFBQztBQUNMO3dCQUNJLDBCQUFRO0FBQ1osSUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUNqQyxJQUFRLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUM1QixJQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLElBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMzQixFQUFDO0FBQ0w7d0JBQ0ksa0NBQVcsQ0FBQyxVQUFjLE1BQU0sWUFBZ0I7QUFDcEQsSUFBUSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDekMsRUFBQztBQUNMO3dCQUNJLGdDQUFVLENBQUMsVUFBYyxNQUFNLFlBQWdCO0FBQ25ELElBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEVBQUM7QUFDTDt3QkFDSSw4QkFBUyxDQUFDLFVBQWM7QUFDNUIsSUFBUUEsSUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0MsSUFBUSxJQUFJLEdBQUcsRUFBRTtBQUNqQixRQUFZQSxJQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsZ0JBQWdCLENBQUM7QUFDOUUsUUFBWUEsSUFBTSxXQUFXLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUNuRjtBQUNBLFFBQVksSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLFdBQVcsRUFBRTtBQUM3QyxZQUFnQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDN0IsU0FBYTtBQUNiO0FBQ0EsUUFBWSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDekIsUUFBWSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDeEMsUUFBWSxJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztBQUMvQjtBQUNBLFFBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDN0MsWUFBZ0IsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzdCLFlBQWdCLE9BQU8sR0FBRyxDQUFDO0FBQzNCLFNBQWE7QUFDYixLQUFTO0FBQ0wsRUFDSDs7QUNwSUQ7QUFDQTtBQUdBO0FBQ0E7QUFDZSxJQUFNLGNBQWMsR0FPL0IsdUJBQVcsR0FBRztBQUNsQixJQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxhQUFhLENBQUM7QUFDekMsUUFBWSxVQUFVLEVBQUUsQ0FBQztBQUN6QixRQUFZLE9BQU8sRUFBRSxDQUFDO0FBQ3RCLEtBQVMsQ0FBQyxDQUFDO0FBQ1g7QUFDQSxJQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxhQUFhLENBQUM7QUFDMUMsUUFBWSxVQUFVLEVBQUUsQ0FBQztBQUN6QixRQUFZLE9BQU8sRUFBRSxDQUFDO0FBQ3RCLEtBQVMsQ0FBQyxDQUFDO0FBQ1g7QUFDQSxJQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNqQixFQUFDO0FBQ0w7eUJBQ0ksMEJBQVE7QUFDWixJQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0FBQzdCLElBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUM3QixJQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDMUIsRUFBQztBQUNMO3lCQUNJLGtDQUFXLENBQUMsVUFBYyxNQUFNLFlBQWdCO0FBQ3BELElBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzNDLElBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEVBQUM7QUFDTDt5QkFDSSxnQ0FBVSxDQUFDLFVBQWMsTUFBTSxZQUFnQjtBQUNuRCxJQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMxQyxJQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN2QyxFQUFDO0FBQ0w7eUJBQ0ksOEJBQVMsQ0FBQyxVQUFjOztBQUFDO0FBQzdCLElBQVFBLElBQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JELElBQVFBLElBQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZEO0FBQ0EsSUFBUSxJQUFJLFdBQVcsRUFBRTtBQUN6QixRQUFZLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ2hDLFFBQVksQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQy9CLFFBQVksVUFBVSxzQkFBT08sTUFBSSxDQUFDLEtBQUssS0FBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlDLFFBQVksT0FBTztBQUNuQixZQUFnQixlQUFlLFlBQUcsR0FBRyxZQUFVLEdBQUcsQ0FBQyxNQUFNLENBQUM7QUFDMUQsZ0JBQW9CLFFBQVEsRUFBRSxHQUFHO0FBQ2pDLGdCQUFvQixJQUFJLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUM7QUFDM0MsZ0JBQW9CLE1BQU0sRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQztBQUN0RCxhQUFpQixFQUFFLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxJQUFDO0FBQ3RDLFNBQWEsQ0FBQztBQUNkLEtBQVMsTUFBTSxJQUFJLFlBQVksRUFBRTtBQUNqQyxRQUFZLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ2hDLFFBQVksQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQy9CLFFBQVksVUFBVSxzQkFBT0EsTUFBSSxDQUFDLEtBQUssS0FBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlDLFFBQVksT0FBTztBQUNuQixZQUFnQixlQUFlLFlBQUcsR0FBRyxZQUFVLEdBQUcsQ0FBQyxNQUFNLENBQUM7QUFDMUQsZ0JBQW9CLFFBQVEsRUFBRSxHQUFHO0FBQ2pDLGdCQUFvQixJQUFJLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUM7QUFDM0MsZ0JBQW9CLE1BQU0sRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQztBQUN2RCxhQUFpQixFQUFFLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxJQUFDO0FBQ3RDLFNBQWEsQ0FBQztBQUNkLEtBQVM7QUFDTCxFQUFDO0FBQ0w7eUJBQ0ksc0NBQWM7QUFDbEIsSUFBUSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDakIsRUFBQztBQUNMO3lCQUNJLDRCQUFTO0FBQ2IsSUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUN6QixFQUFDO0FBQ0w7eUJBQ0ksOEJBQVU7QUFDZCxJQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzlCLElBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2pCLEVBQUM7QUFDTDt5QkFDSSxrQ0FBWTtBQUNoQixJQUFRLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUN6QixFQUFDO0FBQ0w7eUJBQ0ksZ0NBQVc7QUFDZixJQUFRLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUN4Qjs7QUMzRko7QUFDQTtBQUdBO0FBQ0FQLElBQU0sV0FBVyxHQUFHLENBQUMsQ0FBQztBQUN0QkEsSUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCO0FBQ0EsSUFBTSxZQUFZLEdBU2QscUJBQVcsQ0FBQyxPQUFPLDBCQUE4QjtBQUNyRCxJQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNyQixJQUFRLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUM7QUFDdkQsRUFBQztBQUNMO3VCQUNJLDBCQUFRO0FBQ1osSUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztBQUM3QixJQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzVCLElBQVEsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQy9CLElBQVEsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0FBQzdCLEVBQUM7QUFDTDt1QkFDSSwwQ0FBZSxDQUFDLFVBQWMsTUFBTSxNQUFVO0FBQ2xELElBQVEsT0FBTyxLQUFLLENBQUM7QUFDakIsRUFBQztBQUNMO3VCQUNJLHdCQUFNLFNBQVMsS0FBUyxLQUFLLEtBQVM7QUFDMUMsSUFBUSxPQUFPLEVBQUUsQ0FBQztBQUNkLEVBQUM7QUFDTDt1QkFDSSxnQ0FBVSxDQUFDLFVBQWMsS0FBSyxLQUFTO0FBQzNDLElBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFFLFNBQU87QUFDcEM7QUFDQSxJQUFRQSxJQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9DLElBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxJQUFFLFNBQU87QUFDekQ7QUFDQSxJQUFRLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0FBQ2hDLElBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7QUFDcEMsRUFBQztBQUNMO3VCQUNJLDRDQUFnQixDQUFDLFVBQWMsS0FBSyxLQUFTO0FBQ2pELElBQVFBLElBQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDMUMsSUFBUSxJQUFJLENBQUMsU0FBUyxJQUFFLFNBQU87QUFDL0IsSUFBUSxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDM0I7QUFDQSxJQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsSUFBRSxTQUFPO0FBQ2pGLElBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDM0IsSUFBUSxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztBQUNoQztBQUNBO0FBQ0EsSUFBUSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3hDLEVBQUM7QUFDTDt1QkFDSSx3Q0FBYyxDQUFDLFVBQWM7QUFDakMsSUFBUUEsSUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQyxJQUFRLElBQUksV0FBVyxLQUFLLElBQUksQ0FBQyxZQUFZLElBQUUsU0FBTztBQUN0RCxJQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBRSxHQUFHLENBQUMsYUFBYSxFQUFFLEdBQUM7QUFDN0MsSUFBUSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDakIsRUFBQztBQUNMO3VCQUNJLDRCQUFTO0FBQ2IsSUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUN6QixFQUFDO0FBQ0w7dUJBQ0ksOEJBQVU7QUFDZCxJQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzlCLElBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2pCLEVBQUM7QUFDTDt1QkFDSSxrQ0FBWTtBQUNoQixJQUFRLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUN6QixFQUFDO0FBQ0w7dUJBQ0ksZ0NBQVc7QUFDZixJQUFRLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUN4QixFQUNIO0FBQ0Q7QUFDTyxJQUFNLGVBQWU7Ozs7Ozs7Ozs4QkFFeEIsZ0NBQVUsQ0FBQyxjQUFjLEtBQUssU0FBUztBQUMzQyxRQUFRUSxzQkFBSyxDQUFDLGNBQVMsT0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbEMsUUFBUSxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLEdBQUM7QUFDakQsTUFBSztBQUNMLDhCQUFJLDBDQUFlLENBQUMsY0FBYyxNQUFNLFVBQVU7QUFDbEQsUUFBUSxPQUFPLE1BQU0sS0FBSyxXQUFXLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ3BELE1BQUs7QUFDTDtBQUNBLDhCQUFJLHdCQUFNLFNBQVMsU0FBUyxLQUFLLFNBQVM7QUFDMUMsUUFBUSxPQUFPO0FBQ2YsWUFBWSxNQUFNLEVBQUUsS0FBSztBQUN6QixZQUFZLFFBQVEsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQztBQUMxQyxTQUFTLENBQUM7QUFDVjs7O0VBZnFDLGVBZ0JwQztBQUNEO0FBQ08sSUFBTSxrQkFBa0I7Ozs7Ozs7OztpQ0FDM0IsMENBQWUsQ0FBQyxjQUFjLE1BQU0sVUFBVTtBQUNsRCxRQUFRLE9BQU8sQ0FBQyxNQUFNLEtBQUssV0FBVyxJQUFJLENBQUMsQ0FBQyxPQUFPLE1BQU0sTUFBTSxLQUFLLFlBQVksQ0FBQyxDQUFDO0FBQ2xGLE1BQUs7QUFDTDtBQUNBLGlDQUFJLHdCQUFNLFNBQVMsU0FBUyxLQUFLLFNBQVM7QUFDMUMsUUFBUVIsSUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUM7QUFDekMsUUFBUUEsSUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLElBQUksb0JBQW9CLENBQUM7QUFDNUUsUUFBUSxJQUFJLFlBQVksRUFBRTtBQUMxQixZQUFZLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ2hDLFlBQVksT0FBTyxlQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ2xDLFNBQVM7QUFDVCxNQUFLO0FBQ0w7QUFDQSxpQ0FBSSxvQ0FBWSxDQUFDLGNBQWM7QUFDL0I7QUFDQTtBQUNBLFFBQVEsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQzNCOzs7RUFsQndDLGVBbUJ2QztBQUNEO0FBQ08sSUFBTSxpQkFBaUI7Ozs7Ozs7OztnQ0FDMUIsMENBQWUsQ0FBQyxjQUFjLE1BQU0sVUFBVTtBQUNsRCxRQUFRLE9BQU8sQ0FBQyxNQUFNLEtBQUssV0FBVyxJQUFJLENBQUMsQ0FBQyxPQUFPLE1BQU0sTUFBTSxLQUFLLFlBQVksQ0FBQyxDQUFDO0FBQ2xGLE1BQUs7QUFDTDtBQUNBLGdDQUFJLHdCQUFNLFNBQVMsU0FBUyxLQUFLLFNBQVM7QUFDMUMsUUFBUUEsSUFBTSxvQkFBb0IsR0FBRyxDQUFDLEdBQUcsQ0FBQztBQUMxQyxRQUFRQSxJQUFNLFVBQVUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsSUFBSSxvQkFBb0IsQ0FBQztBQUMxRSxRQUFRLElBQUksVUFBVSxFQUFFO0FBQ3hCLFlBQVksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDaEMsWUFBWSxPQUFPLGFBQUMsVUFBVSxDQUFDLENBQUM7QUFDaEMsU0FBUztBQUNULE1BQUs7QUFDTDtBQUNBLGdDQUFJLG9DQUFZLENBQUMsY0FBYztBQUMvQjtBQUNBO0FBQ0EsUUFBUSxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDM0I7OztFQWxCdUMsZUFtQnRDOztBQy9JRDtBQUNBO0FBSWUsSUFBTSxlQUFlLEdBU2hDLHdCQUFXLENBQUMsT0FBTywwQkFBOEI7QUFDckQsSUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztBQUM3QixJQUFRLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUM7QUFDM0QsSUFBUSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDakIsRUFBQztBQUNMOzBCQUNJLDBCQUFRO0FBQ1osSUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztBQUM3QixJQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQzNCLElBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJc0QsaUJBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDaEMsRUFBQztBQUNMOzBCQUNJLGtDQUFXLENBQUMsVUFBYyxNQUFNLFlBQWdCO0FBQ3BELElBQVEsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQy9DLEVBQUM7QUFDTDswQkFDSSxnQ0FBVSxDQUFDLFVBQWMsTUFBTSxZQUFnQjtBQUNuRCxJQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFFLFNBQU87QUFDbEMsSUFBUSxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDM0IsSUFBUSxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0MsRUFBQztBQUNMOzBCQUNJLDhCQUFTLENBQUMsVUFBYyxNQUFNLFlBQWdCO0FBQ2xELElBQVEsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM1QztBQUNBLElBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUU7QUFDdkUsUUFBWSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDekIsS0FBUztBQUNMLEVBQUM7QUFDTDswQkFDSSxzQ0FBYztBQUNsQixJQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNqQixFQUFDO0FBQ0w7MEJBQ0ksb0RBQW9CLENBQUMsVUFBYyxNQUFNLFlBQWdCO0FBQzdELElBQVEsSUFBSSxDQUFDLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLEdBQUM7QUFDNUQ7QUFDQSxJQUFRdEQsSUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDOUQ7QUFDQSxJQUFRQSxJQUFNLGFBQWEsR0FBRyxJQUFJc0QsaUJBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUMsSUFBUXRELElBQU0sYUFBYSxHQUFHLElBQUlzRCxpQkFBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QyxJQUFRdkQsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0FBQ2hDO0FBQ0EsSUFBUSxLQUFLQyxJQUFNLFVBQVUsSUFBSSxPQUFPLEVBQUU7QUFDMUMsUUFBWUEsSUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzlDLFFBQVlBLElBQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDeEQsUUFBWSxJQUFJLFNBQVMsRUFBRTtBQUMzQixZQUFnQixhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFDLFlBQWdCLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3pELFlBQWdCLGVBQWUsRUFBRSxDQUFDO0FBQ2xDLFlBQWdCLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDNUMsU0FBYTtBQUNiLEtBQVM7QUFDVDtBQUNBLElBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7QUFDaEM7QUFDQSxJQUFRLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLElBQUUsU0FBTztBQUMvRTtBQUNBLElBQVFBLElBQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDNUQsSUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNqQyxJQUFRLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsZUFBZSxJQUFFLFNBQU87QUFDM0Q7QUFDQSxJQUFRQSxJQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQzFEO0FBQ0EsSUFBUSxPQUFPO0FBQ2YsZ0JBQVksTUFBTTtBQUNsQixrQkFBWSxRQUFRO0FBQ3BCLEtBQVMsQ0FBQztBQUNOLEVBQUM7QUFDTDswQkFDSSw0QkFBUztBQUNiLElBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDekIsRUFBQztBQUNMOzBCQUNJLDhCQUFVO0FBQ2QsSUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUM5QixJQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNqQixFQUFDO0FBQ0w7MEJBQ0ksa0NBQVk7QUFDaEIsSUFBUSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDekIsRUFBQztBQUNMOzBCQUNJLGdDQUFXO0FBQ2YsSUFBUSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDeEI7O0FDbkdKO0FBQ0E7QUFJQSxJQUFNLGVBQWUsR0FTakIsd0JBQVcsR0FBRztBQUNsQixJQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNqQixFQUFDO0FBQ0w7MEJBQ0ksMEJBQVE7QUFDWixJQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0FBQzdCLElBQVEsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7QUFDakMsRUFBQztBQUNMOzBCQUNJLDBCQUFPLE1BQU0sY0FBa0IsR0FBRTswQkFDakMsd0JBQU0sTUFBTSxjQUFrQixXQUFXLEtBQVMsQ0FBQyxVQUFjLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRTtBQUNuRjswQkFDSSxrQ0FBVyxDQUFDLFVBQWMsTUFBTSxZQUFnQjtBQUNwRCxJQUFRLElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBRSxTQUFPO0FBQ3hFO0FBQ0EsSUFBUSxJQUFJLENBQUMsZ0JBQWdCLEdBQUc7QUFDaEMsUUFBWSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVU7QUFDekMsUUFBWSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVU7QUFDekMsS0FBUyxDQUFDO0FBQ1Y7QUFDQTtBQUNBLElBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLEVBQUM7QUFDTDswQkFDSSxnQ0FBVSxDQUFDLFVBQWMsTUFBTSxZQUFnQjtBQUNuRCxJQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUUsU0FBTztBQUMzQztBQUNBLElBQVEsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQzNCO0FBQ0EsV0FBd0IsR0FBRyxJQUFJLENBQUM7UUFBakI7UUFBSyxpQkFBNkI7QUFDakQsSUFBUUEsSUFBTSxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0MsSUFBUUEsSUFBTSxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0MsSUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFFLFNBQU87QUFDN0IsSUFBUUEsSUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEU7QUFDQTtBQUNBLElBQVEsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsRDtBQUNJLEVBQUM7QUFDTDswQkFDSSw4QkFBUyxDQUFDLFVBQWMsTUFBTSxZQUFnQjtBQUNsRCxJQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUUsU0FBTztBQUMzQztBQUNBLFdBQXdCLEdBQUcsSUFBSSxDQUFDO1FBQWpCO1FBQUssaUJBQTZCO0FBQ2pELElBQVFBLElBQU0sQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQy9DLElBQVFBLElBQU0sQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQy9DLElBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFFLFNBQU87QUFDM0I7QUFDQSxJQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBRSxHQUFHLENBQUMsYUFBYSxFQUFFLEdBQUM7QUFDOUM7QUFDQSxJQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNqQixFQUFDO0FBQ0w7MEJBQ0ksc0NBQWM7QUFDbEIsSUFBUSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDakIsRUFBQztBQUNMOzBCQUNJLDBCQUFPLE9BQU8sb0JBQXdCO0FBQzFDLElBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDN0IsSUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUM7QUFDbEUsRUFBQztBQUNMOzBCQUNJLDhCQUFVO0FBQ2QsSUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUM5QixJQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNqQixFQUFDO0FBQ0w7MEJBQ0ksa0NBQVk7QUFDaEIsSUFBUSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDekIsRUFBQztBQUNMOzBCQUNJLGdDQUFXO0FBQ2YsSUFBUSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDeEIsRUFDSDtBQUNEO0FBQ0EsU0FBUyxZQUFZLENBQUMsQ0FBQyxjQUFjLE1BQU0sZ0JBQWdCLFVBQVUsVUFBVTtBQUMvRSxJQUFJLEtBQUtELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDckQsUUFBUSxJQUFJLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxLQUFLLFVBQVUsSUFBRSxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBQztBQUMzRSxLQUFLO0FBQ0wsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBQyxJQUFNLGNBQWMsR0FBRyxHQUFHLENBQUM7QUFDM0I7QUFDQSxTQUFTLFlBQVksQ0FBQyxRQUFRLEVBQUUsWUFBWSxFQUFFO0FBQzlDLElBQUksT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3hELENBQUM7QUFDRDtBQUNPLElBQU0sZ0JBQWdCOzs7Ozs7Ozs7K0JBS3pCLDBCQUFRO0FBQ1osUUFBUVEseUJBQUssQ0FBQyxVQUFLLEtBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQzlCLFFBQVEsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0FBQ25DLE1BQUs7QUFDTDtBQUNBLCtCQUFJLDBCQUFPLE1BQU0sa0JBQWtCO0FBQ25DLFFBQVEsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekUsTUFBSztBQUNMO0FBQ0EsK0JBQUksd0JBQU0sTUFBTSxrQkFBa0IsV0FBVyxTQUFTO0FBQ3RELFFBQVFSLElBQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDNUMsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkQsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLGNBQWMsSUFBRSxTQUFPO0FBQ2xILFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDNUIsUUFBUSxPQUFPO0FBQ2YsWUFBWSxTQUFTLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDO0FBQ2pFLHlCQUFZLFdBQVc7QUFDdkIsU0FBUyxDQUFDO0FBQ1Y7OztFQXhCc0Msa0JBeUJyQztBQUNEO0FBQ0E7QUFDQTtBQUNBQSxJQUFNLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztBQUM5QjtBQUNBLFNBQVMsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDL0IsSUFBSSxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDMUMsQ0FBQztBQUNEO0FBQ08sSUFBTSxrQkFBa0I7Ozs7Ozs7OztpQ0FHM0IsMEJBQVE7QUFDWixRQUFRUSx5QkFBSyxDQUFDLFVBQUssS0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBUSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7QUFDakMsUUFBUSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7QUFDakMsUUFBUSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDNUIsTUFBSztBQUNMO0FBQ0EsaUNBQUksMEJBQU8sTUFBTSxrQkFBa0I7QUFDbkMsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRSxRQUFRLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RCxNQUFLO0FBQ0w7QUFDQSxpQ0FBSSx3QkFBTSxNQUFNLGtCQUFrQixXQUFXLFNBQVM7QUFDdEQsUUFBUVIsSUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUN4QyxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRDtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBRSxTQUFPO0FBQzFFLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDNUI7QUFDQSxRQUFRLE9BQU87QUFDZixZQUFZLFlBQVksRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUM7QUFDbkUseUJBQVksV0FBVztBQUN2QixTQUFTLENBQUM7QUFDVixNQUFLO0FBQ0w7QUFDQSxpQ0FBSSxnREFBa0IsTUFBTSxTQUFTO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUN0RSxRQUFRQSxJQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7QUFDMUQsUUFBUUEsSUFBTSxTQUFTLEdBQUcsa0JBQWtCLEdBQUcsYUFBYSxHQUFHLEdBQUcsQ0FBQztBQUNuRTtBQUNBLFFBQVFBLElBQU0sc0JBQXNCLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDbEYsUUFBUSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsR0FBRyxTQUFTLENBQUM7QUFDNUQ7OztFQTdDd0Msa0JBOEN2QztBQUNEO0FBQ0E7QUFDQTtBQUNBLFNBQVMsVUFBVSxDQUFDLE1BQU0sRUFBRTtBQUM1QixJQUFJLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkQsQ0FBQztBQUNEO0FBQ0FBLElBQU0seUJBQXlCLEdBQUcsR0FBRyxDQUFDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTSxpQkFBaUI7Ozs7Ozs7OztnQ0FNMUIsMEJBQVE7QUFDWixRQUFRUSx5QkFBSyxDQUFDLFVBQUssS0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztBQUNoQyxRQUFRLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUMvQixRQUFRLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztBQUNoQyxNQUFLO0FBQ0w7QUFDQSxnQ0FBSSwwQkFBTyxNQUFNLGtCQUFrQjtBQUNuQyxRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO0FBQ2xDLFFBQVEsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ2xEO0FBQ0EsWUFBWSxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUNoQztBQUNBLFNBQVM7QUFDVCxNQUFLO0FBQ0w7QUFDQSxnQ0FBSSx3QkFBTSxNQUFNLGtCQUFrQixNQUFNLFNBQVMsQ0FBQyxjQUFjO0FBQ2hFLFFBQVFSLElBQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNELFFBQVFBLElBQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNEO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNsRixRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFFLFNBQU87QUFDakM7QUFDQSxRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO0FBQ2xDLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDNUIsUUFBUUEsSUFBTSxhQUFhLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFELFFBQVFBLElBQU0sb0JBQW9CLEdBQUcsQ0FBQyxHQUFHLENBQUM7QUFDMUMsUUFBUSxPQUFPO0FBQ2YsWUFBWSxVQUFVLEVBQUUsYUFBYSxHQUFHLG9CQUFvQjtBQUM1RCxTQUFTLENBQUM7QUFDVixNQUFLO0FBQ0w7QUFDQSxnQ0FBSSw0REFBd0IsT0FBTyxTQUFTLE9BQU8sU0FBUyxTQUFTLFVBQVU7QUFDL0UsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFFLE9BQU8sSUFBSSxDQUFDLE1BQU0sR0FBQztBQUMxRDtBQUNBLFFBQVFBLElBQU0sU0FBUyxHQUFHLENBQUMsQ0FBQztBQUM1QixRQUFRQSxJQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksU0FBUyxDQUFDO0FBQ2xELFFBQVFBLElBQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxTQUFTLENBQUM7QUFDbEQ7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sSUFBRSxTQUFPO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNoQyxZQUFZLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUU7QUFDL0MsZ0JBQWdCLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO0FBQzVDLGFBQWE7QUFDYjtBQUNBLFlBQVksSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyx5QkFBeUIsRUFBRTtBQUN6RTtBQUNBLGdCQUFnQixPQUFPLFNBQVMsQ0FBQztBQUNqQyxhQUFhLE1BQU07QUFDbkIsZ0JBQWdCLE9BQU8sS0FBSyxDQUFDO0FBQzdCLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQSxRQUFRQSxJQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoRSxRQUFRLE9BQU8sVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxlQUFlLENBQUM7QUFDN0U7OztFQWpFdUMsa0JBd0d0Qzs7QUM5U0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQUEsSUFBTSxjQUFjLEdBQUc7QUFDdkIsSUFBSSxPQUFPLEVBQUUsR0FBRztBQUNoQixJQUFJLFdBQVcsRUFBRSxFQUFFO0FBQ25CLElBQUksU0FBUyxFQUFFLEVBQUU7QUFDakIsQ0FBQyxDQUFDO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBTSxlQUFlLEdBVWpCLHdCQUFXLEdBQUc7QUFDbEIsSUFBUUEsSUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDO0FBQzNDLElBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDO0FBQzVDLElBQVEsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDO0FBQ3BELElBQVEsSUFBSSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDO0FBQzVDLEVBQUM7QUFDTDswQkFDSSwwQkFBUTtBQUNaLElBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7QUFDekIsRUFBQztBQUNMOzBCQUNJLDRCQUFRLENBQUMsYUFBaUI7O0FBQUM7QUFDL0IsSUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsT0FBTyxJQUFFLFNBQU87QUFDdkQ7QUFDQSxJQUFRRCxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDeEIsSUFBUUEsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLElBQVFBLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQUN6QixJQUFRQSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7QUFDckIsSUFBUUEsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCO0FBQ0EsSUFBUSxRQUFRLENBQUMsQ0FBQyxPQUFPO0FBQ3pCLElBQVEsS0FBSyxFQUFFLENBQUM7QUFDaEIsSUFBUSxLQUFLLEdBQUcsQ0FBQztBQUNqQixJQUFRLEtBQUssR0FBRyxDQUFDO0FBQ2pCLElBQVEsS0FBSyxHQUFHO0FBQ2hCLFFBQVksT0FBTyxHQUFHLENBQUMsQ0FBQztBQUN4QixRQUFZLE1BQU07QUFDbEI7QUFDQSxJQUFRLEtBQUssR0FBRyxDQUFDO0FBQ2pCLElBQVEsS0FBSyxHQUFHLENBQUM7QUFDakIsSUFBUSxLQUFLLEdBQUc7QUFDaEIsUUFBWSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDekIsUUFBWSxNQUFNO0FBQ2xCO0FBQ0EsSUFBUSxLQUFLLEVBQUU7QUFDZixRQUFZLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRTtBQUM1QixZQUFnQixVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEMsU0FBYSxNQUFNO0FBQ25CLFlBQWdCLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNuQyxZQUFnQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUIsU0FBYTtBQUNiLFFBQVksTUFBTTtBQUNsQjtBQUNBLElBQVEsS0FBSyxFQUFFO0FBQ2YsUUFBWSxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUU7QUFDNUIsWUFBZ0IsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUMvQixTQUFhLE1BQU07QUFDbkIsWUFBZ0IsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ25DLFlBQWdCLElBQUksR0FBRyxDQUFDLENBQUM7QUFDekIsU0FBYTtBQUNiLFFBQVksTUFBTTtBQUNsQjtBQUNBLElBQVEsS0FBSyxFQUFFO0FBQ2YsUUFBWSxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUU7QUFDNUIsWUFBZ0IsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUM3QixTQUFhLE1BQU07QUFDbkIsWUFBZ0IsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ25DLFlBQWdCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxQixTQUFhO0FBQ2IsUUFBWSxNQUFNO0FBQ2xCO0FBQ0EsSUFBUSxLQUFLLEVBQUU7QUFDZixRQUFZLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRTtBQUM1QixZQUFnQixRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDOUIsU0FBYSxNQUFNO0FBQ25CLFlBQWdCLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNuQyxZQUFnQixJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFNBQWE7QUFDYixRQUFZLE1BQU07QUFDbEI7QUFDQSxJQUFRO0FBQ1IsUUFBWSxPQUFPO0FBQ25CLEtBQVM7QUFDVDtBQUNBLElBQVEsT0FBTztBQUNmLFFBQVksZUFBZSxZQUFHLEdBQUcsR0FBVTtBQUMzQyxZQUFnQkMsSUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzNDLFlBQWdCLEdBQUcsQ0FBQyxNQUFNLENBQUM7QUFDM0IsZ0JBQW9CLFFBQVEsRUFBRSxHQUFHO0FBQ2pDLGdCQUFvQixNQUFNLEVBQUUsaUJBQWlCO0FBQzdDLGdCQUFvQixNQUFNLEVBQUUsT0FBTztBQUNuQztBQUNBLGdCQUFvQixJQUFJLEVBQUUsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUk7QUFDNUYsZ0JBQW9CLE9BQU8sRUFBRSxHQUFHLENBQUMsVUFBVSxFQUFFLEdBQUcsVUFBVSxHQUFHTyxNQUFJLENBQUMsWUFBWTtBQUM5RSxnQkFBb0IsS0FBSyxFQUFFLEdBQUcsQ0FBQyxRQUFRLEVBQUUsR0FBRyxRQUFRLEdBQUdBLE1BQUksQ0FBQyxVQUFVO0FBQ3RFLGdCQUFvQixNQUFNLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBR0EsTUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksR0FBR0EsTUFBSSxDQUFDLFFBQVEsQ0FBQztBQUMxRSxnQkFBb0IsTUFBTSxFQUFFLEdBQUcsQ0FBQyxTQUFTLEVBQUU7QUFDM0MsYUFBaUIsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLFNBQWE7QUFDYixLQUFTLENBQUM7QUFDTixFQUFDO0FBQ0w7MEJBQ0ksNEJBQVM7QUFDYixJQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLEVBQUM7QUFDTDswQkFDSSw4QkFBVTtBQUNkLElBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDOUIsSUFBUSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDakIsRUFBQztBQUNMOzBCQUNJLGtDQUFZO0FBQ2hCLElBQVEsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQ3pCLEVBQUM7QUFDTDswQkFDSSxnQ0FBVztBQUNmLElBQVEsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ3hCLEVBQ0g7QUFDRDtBQUNBLFNBQVMsT0FBTyxDQUFDLENBQUMsVUFBVTtBQUM1QixJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2QixDQUFDOztBQ2xKRDtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBUCxJQUFNLGNBQWMsR0FBRyxjQUFjLENBQUM7QUFDdEM7QUFDQTtBQUNBO0FBQ0FBLElBQU0sZUFBZSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaENBLElBQU0sYUFBYSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUI7QUFDQTtBQUNBO0FBQ0FBLElBQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBTSxpQkFBaUIsR0FnQ25CLDBCQUFXLENBQUMsR0FBRyxHQUFPLE9BQU8sY0FBa0I7QUFDbkQsSUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUN4QixJQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLGtCQUFrQixFQUFFLENBQUM7QUFDNUMsSUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztBQUNoQztBQUNBLElBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDeEI7QUFDQSxJQUFRLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxlQUFlLENBQUM7QUFDaEQsSUFBUSxJQUFJLENBQUMsY0FBYyxHQUFHLGFBQWEsQ0FBQztBQUM1QztBQUNBLElBQVE0VCxtQkFBTyxDQUFDO0FBQ2hCLFFBQVksVUFBVTtBQUN0QixRQUFZLFlBQVk7QUFDeEIsUUFBWSxnQkFBZ0I7QUFDNUIsUUFBWSxtQkFBbUI7QUFDL0IsS0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2IsRUFBQztBQUNMO0FBQ0k7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7NEJBQ0ksb0NBQVksUUFBUSxNQUFVO0FBQ2xDLElBQVEsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFFBQVEsQ0FBQztBQUNyQyxFQUFDO0FBQ0w7QUFDSTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs0QkFDQSw4Q0FBaUIsYUFBYSxNQUFVO0FBQzVDLElBQVEsSUFBSSxDQUFDLGNBQWMsR0FBRyxhQUFhLENBQUM7QUFDeEMsRUFBQztBQUNMO0FBQ0k7QUFDSjtBQUNBO0FBQ0E7QUFDQTs0QkFDSSxrQ0FBWTtBQUNoQixJQUFRLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDM0IsRUFBQztBQUNMO0FBQ0k7QUFDQTtBQUNBO0FBQ0E7QUFDQTs0QkFDQSxnQ0FBVztBQUNmLElBQVEsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLFNBQVMsQ0FBQztBQUMvRCxFQUFDO0FBQ0w7NEJBQ0ksa0NBQVk7QUFDaEIsSUFBUSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQzNCLEVBQUM7QUFDTDtBQUNJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7NEJBQ0ksMEJBQU8sT0FBTyxHQUFPO0FBQ3pCLElBQVEsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUUsU0FBTztBQUNyQyxJQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzdCLElBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUM7QUFDaEUsRUFBQztBQUNMO0FBQ0k7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzRCQUNJLDhCQUFVO0FBQ2QsSUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFFLFNBQU87QUFDdEMsSUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUMxQixFQUFDO0FBQ0w7NEJBQ0ksd0JBQU0sQ0FBQyxVQUFjO0FBQ3pCLElBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBRSxTQUFPO0FBQ3RDO0FBQ0E7QUFDQSxJQUFRN1QsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLFNBQVMsS0FBSyxDQUFDRyxrQkFBTSxDQUFDLFVBQVUsR0FBTyxjQUFjLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUN2RyxJQUFRRixJQUFNLEdBQUcsR0FBR0ksbUJBQU8sQ0FBQyxHQUFHLEVBQUU7QUFDakMsUUFBWSxTQUFTLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM5RDtBQUNBLElBQVEsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEdBQUcsQ0FBQztBQUN2QztBQUNBLElBQVEsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLGNBQWMsTUFBTSxDQUFDLEVBQUU7QUFDM0Q7QUFDQSxRQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDO0FBQ2pDO0FBQ0EsS0FBUyxNQUFNLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUN2RDtBQUNBLFFBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUM7QUFDcEM7QUFDQSxLQUFTLE1BQU0sSUFBSSxTQUFTLEdBQUcsR0FBRyxFQUFFO0FBQ3BDO0FBQ0EsUUFBWSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUM5QixRQUFZLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0FBQ3BDO0FBQ0E7QUFDQSxRQUFZLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9EO0FBQ0EsS0FBUyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ2hDO0FBQ0E7QUFDQSxRQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksVUFBVSxHQUFHLE9BQU8sQ0FBQztBQUNwRjtBQUNBO0FBQ0E7QUFDQSxRQUFZLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUMvQixZQUFnQixZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzVDLFlBQWdCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ3JDLFlBQWdCLEtBQUssSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQ3pDLFNBQWE7QUFDYixLQUFTO0FBQ1Q7QUFDQTtBQUNBLElBQVEsSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLEtBQUssSUFBRSxLQUFLLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBQztBQUNuRDtBQUNBO0FBQ0EsSUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDeEIsUUFBWSxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQztBQUNyQyxRQUFZLElBQUksQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO0FBQ2pDLFFBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDL0IsWUFBZ0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixTQUFhO0FBQ2IsS0FBUztBQUNUO0FBQ0EsSUFBUSxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDdkIsRUFBQztBQUNMOzRCQUNJLGtDQUFXLFlBQVksR0FBTztBQUNsQyxJQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDO0FBQzdCLElBQVEsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQ3ZDLElBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDM0IsUUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3RDLEtBQVM7QUFDTCxFQUFDO0FBQ0w7NEJBQ0ksMEJBQU8sQ0FBQyxHQUFPO0FBQ25CLElBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUUsU0FBTztBQUNqQztBQUNBLElBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQzNCLFFBQVksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDakMsS0FBUztBQUNUO0FBQ0EsSUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUM1QixJQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUU7QUFDL0IsUUFBWSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUNqQyxLQUFTO0FBQ1Q7QUFDQSxJQUFRLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtBQUNqQyxRQUFZLFlBQVksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDOUMsUUFBWSxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7QUFDdkMsS0FBUztBQUNUO0FBQ0EsSUFBUUosSUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlDO0FBQ0EsSUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHOGEsa0JBQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDN0csSUFBUSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDNUUsSUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUM1QixRQUFZLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ2pDLFFBQVksSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0FBQ2hELEtBQVM7QUFDTCxFQUFDO0FBQ0w7NEJBQ0ksc0NBQWM7QUFDbEIsSUFBUSxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUNqQyxFQUFDO0FBQ0w7NEJBQ0ksNENBQWlCOztBQUFDO0FBQ3RCLElBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUUsU0FBTztBQUNuQyxJQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzdCO0FBQ0EsSUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFFLFNBQU87QUFDckMsSUFBUTlhLElBQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLElBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUMvQjtBQUNBLFFBQVlBLElBQU0sUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxPQUFPLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsY0FBYyxJQUFJLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO0FBQzlJO0FBQ0EsUUFBWUQsSUFBSSxLQUFLLEdBQUcsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdGO0FBQ0EsUUFBWSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDaEQsWUFBZ0IsS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbEMsU0FBYTtBQUNiO0FBQ0EsUUFBWUMsSUFBTSxTQUFTLEdBQUcsT0FBTyxJQUFJLENBQUMsV0FBVyxLQUFLLFFBQVEsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDO0FBQy9HLFFBQVksSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRztBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLE9BQU8sRUFBRTtBQUN4QyxZQUFnQixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDMUMsWUFBZ0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUQsU0FBYTtBQUNiO0FBQ0EsUUFBWSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUM1QixLQUFTO0FBQ1Q7QUFDQSxJQUFRQSxJQUFNLFVBQVUsR0FBRyxPQUFPLElBQUksQ0FBQyxXQUFXLEtBQUssUUFBUTtBQUMvRCxRQUFZLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztBQUN2QyxJQUFRQSxJQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQzFDLElBQVFBLElBQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDcEM7QUFDQSxJQUFRRCxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDN0IsSUFBUUEsSUFBSSxJQUFJLENBQUM7QUFDakIsSUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssT0FBTyxJQUFJLFNBQVMsSUFBSSxNQUFNLEVBQUU7QUFDM0QsUUFBWVUsa0JBQU0sQ0FBQyxNQUFNLElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxDQUFDLENBQUM7QUFDNUQ7QUFDQSxRQUFZVCxJQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUNJLG1CQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwRixRQUFZSixJQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBWSxJQUFJLEdBQUdtTSxrQkFBVyxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDekQsUUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdkIsWUFBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDcEMsZ0JBQW9CLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ3pDLGFBQWlCO0FBQ2pCLFNBQWEsTUFBTTtBQUNuQixZQUFnQixRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ2hDLFNBQWE7QUFDYixLQUFTLE1BQU07QUFDZixRQUFZLElBQUksR0FBRyxVQUFVLENBQUM7QUFDOUIsUUFBWSxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzVCLEtBQVM7QUFDVDtBQUNBLElBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDNUI7QUFDQSxJQUFRLElBQUksUUFBUSxFQUFFO0FBQ3RCLFFBQVksSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7QUFDakMsUUFBWSxJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsYUFBTztBQUNuRCxZQUFnQjVMLE1BQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQ3RDLFlBQWdCQSxNQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLENBQUM7QUFDcEQsWUFBZ0IsT0FBT0EsTUFBSSxDQUFDLFdBQVcsQ0FBQztBQUN4QyxZQUFnQixPQUFPQSxNQUFJLENBQUMsY0FBYyxDQUFDO0FBQzNDLFNBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNwQixLQUFTO0FBQ1Q7QUFDQSxJQUFRLE9BQU87QUFDZixRQUFZLFNBQVMsRUFBRSxJQUFJO0FBQzNCLFFBQVksZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRO0FBQ3ZDLFFBQVksU0FBUyxFQUFFLElBQUksR0FBRyxFQUFFLENBQUMsSUFBSTtBQUNyQyxRQUFZLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWTtBQUNyQyxRQUFZLGFBQWEsRUFBRSxJQUFJLENBQUMsZUFBZTtBQUMvQyxLQUFTLENBQUM7QUFDTixFQUFDO0FBQ0w7NEJBQ0ksOENBQWlCLFFBQVEsTUFBVTtBQUN2QyxJQUFRUixJQUFJLE1BQU0sR0FBR3liLGdCQUFLLENBQUM7QUFDM0I7QUFDQSxJQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUM1QixRQUFZeGIsSUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVM7QUFDdkMsWUFBZ0IsQ0FBQyxHQUFHLENBQUNJLG1CQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUTtBQUNoRSxZQUFnQixLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDOUQ7QUFDQTtBQUNBLFlBQWdCLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLElBQUk7QUFDbkUsWUFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkQ7QUFDQSxRQUFZLE1BQU0sR0FBRytGLGtCQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0MsS0FBUztBQUNUO0FBQ0EsSUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHO0FBQ3pCLFFBQVksS0FBSyxFQUFFL0YsbUJBQU8sQ0FBQyxHQUFHLEVBQUU7QUFDaEMsa0JBQVksUUFBUTtBQUNwQixnQkFBWSxNQUFNO0FBQ2xCLEtBQVMsQ0FBQztBQUNWO0FBQ0EsSUFBUSxPQUFPLE1BQU0sQ0FBQztBQUNsQixFQUFDO0FBQ0w7NEJBQ0ksMEJBQVE7QUFDWixJQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0FBQ3pCLEVBQ0g7O0FDaFdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNlLElBQU0sc0JBQXNCLEdBUXZDLCtCQUFXLENBQUMsU0FBUyxnQkFBb0IsT0FBTyxjQUFrQjtBQUN0RSxJQUFRLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO0FBQ3BDLElBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7QUFDNUIsRUFBQztBQUNMO0FBQ0k7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO2lDQUNJLDRCQUFTO0FBQ2IsSUFBUSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ2pDLElBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMzQixFQUFDO0FBQ0w7QUFDSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7aUNBQ0ksOEJBQVU7QUFDZCxJQUFRLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDbEMsSUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzVCLEVBQUM7QUFDTDtBQUNJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7aUNBQ0ksa0NBQVk7QUFDaEIsSUFBUSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNwRSxFQUFDO0FBQ0w7QUFDSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO2lDQUNJLGdDQUFXO0FBQ2YsSUFBUSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNsRTs7QUM1REo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNlLElBQU0sZ0JBQWdCLEdBS2pDLHlCQUFXLEdBQUc7QUFDbEIsSUFBUSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDakIsRUFBQztBQUNMOzJCQUNJLDBCQUFRO0FBQ1osSUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztBQUN6QixFQUFDO0FBQ0w7MkJBQ0ksOEJBQVMsQ0FBQyxVQUFjLEtBQUssS0FBUztBQUMxQyxJQUFRLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUMzQixJQUFRLE9BQU87QUFDZixRQUFZLGVBQWUsWUFBRyxHQUFHLEdBQVU7QUFDM0MsWUFBZ0IsR0FBRyxDQUFDLE1BQU0sQ0FBQztBQUMzQixnQkFBb0IsUUFBUSxFQUFFLEdBQUc7QUFDakMsZ0JBQW9CLElBQUksRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0QsZ0JBQW9CLE1BQU0sRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztBQUNoRCxhQUFpQixFQUFFLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsU0FBYTtBQUNiLEtBQVMsQ0FBQztBQUNOLEVBQUM7QUFDTDsyQkFDSSw0QkFBUztBQUNiLElBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDekIsRUFBQztBQUNMOzJCQUNJLDhCQUFVO0FBQ2QsSUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUM5QixJQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNqQixFQUFDO0FBQ0w7MkJBQ0ksa0NBQVk7QUFDaEIsSUFBUSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDekIsRUFBQztBQUNMOzJCQUNJLGdDQUFXO0FBQ2YsSUFBUSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDeEI7O0FDOUNKO0FBQ0E7QUFHQTtBQUNlLElBQU0sa0JBQWtCLEdBU25DLDJCQUFXLEdBQUc7QUFDbEI7QUFDQSxJQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxhQUFhLENBQUM7QUFDdEMsUUFBWSxVQUFVLEVBQUUsQ0FBQztBQUN6QixRQUFZLE9BQU8sRUFBRSxDQUFDO0FBQ3RCLEtBQVMsQ0FBQyxDQUFDO0FBQ1g7QUFDQSxJQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNqQixFQUFDO0FBQ0w7NkJBQ0ksMEJBQVE7QUFDWixJQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0FBQzdCLElBQVEsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0FBQ2hDLElBQVEsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0FBQ2hDLElBQVEsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQzdCLElBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QixFQUFDO0FBQ0w7NkJBQ0ksa0NBQVcsQ0FBQyxVQUFjLE1BQU0sWUFBZ0I7QUFDcEQsSUFBUSxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUUsU0FBTztBQUNyQztBQUNBLElBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxnQkFBZ0IsRUFBRTtBQUM3RSxRQUFZLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN6QixLQUFTO0FBQ1Q7QUFDQSxJQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQzVCLFFBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzVDLEtBQVMsTUFBTSxJQUFJLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUMvQyxRQUFZLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLFFBQVksSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztBQUM3RCxLQUFTO0FBQ1Q7QUFDSSxFQUFDO0FBQ0w7NkJBQ0ksZ0NBQVUsQ0FBQyxVQUFjLE1BQU0sWUFBZ0I7QUFDbkQsSUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUM1QixRQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMzQyxLQUFTLE1BQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO0FBQ3JDLFFBQVksSUFBSSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFO0FBQ3BFLFlBQWdCLE9BQU87QUFDdkIsU0FBYTtBQUNiO0FBQ0EsUUFBWUosSUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVDLFFBQVlBLElBQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDOUQsUUFBWSxJQUFJLENBQUMsV0FBVyxHQUFHLGFBQWEsQ0FBQztBQUM3QztBQUNBLFFBQVksQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQy9CLFFBQVksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDaEM7QUFDQSxRQUFZLE9BQU87QUFDbkIsWUFBZ0IsU0FBUyxFQUFFLElBQUksR0FBRyxHQUFHO0FBQ3JDLFNBQWEsQ0FBQztBQUNkLEtBQVM7QUFDTCxFQUFDO0FBQ0w7NkJBQ0ksOEJBQVMsQ0FBQyxVQUFjO0FBQzVCLElBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDNUIsUUFBWUEsSUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEQsUUFBWSxJQUFJLEtBQUssRUFBRTtBQUN2QixZQUFnQixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDNUMsU0FBYTtBQUNiLEtBQVMsTUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7QUFDckMsUUFBWSxJQUFJLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUM5QyxZQUFnQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDN0IsU0FBYTtBQUNiLEtBQVM7QUFDTCxFQUFDO0FBQ0w7NkJBQ0ksc0NBQWM7QUFDbEIsSUFBUSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDakIsRUFBQztBQUNMOzZCQUNJLDRCQUFTO0FBQ2IsSUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUN6QixFQUFDO0FBQ0w7NkJBQ0ksOEJBQVU7QUFDZCxJQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzlCLElBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2pCLEVBQUM7QUFDTDs2QkFDSSxrQ0FBWTtBQUNoQixJQUFRLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUN6QixFQUFDO0FBQ0w7NkJBQ0ksZ0NBQVc7QUFDZixJQUFRLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUN4Qjs7QUNyR0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDZSxJQUFNLGNBQWMsR0FVL0IsdUJBQVcsQ0FBQyxFQUFFLGFBQWUsUUFBUSxpQkFBbUIsUUFBUSxpQkFBbUI7QUFDdkYsTUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUN0QixNQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO0FBQ2xDLE1BQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7QUFDbEMsSUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBSSwwQkFBTyxPQUFPLGlCQUFtQjtBQUNyQyxNQUFRLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxJQUFJLEVBQUUsQ0FBQztBQUM3QyxNQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDaEMsTUFBUSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ2hDLE1BQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDLENBQUM7QUFDMUQsSUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQUksOEJBQVU7QUFDZCxNQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDakMsTUFBUSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ2pDLE1BQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUM7QUFDN0QsSUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUFJLGtDQUFZO0FBQ2hCLE1BQVEsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDeEUsSUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUFJLGdDQUFXO0FBQ2YsTUFBUSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN0RTs7QUN0RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNlLElBQU0saUJBQWlCLEdBYWxDLDBCQUFXLENBQUMsT0FBTywwQkFBOEIsV0FBVyxrQkFBc0IsVUFBVSxpQkFBcUI7QUFDckgsSUFBUSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQztBQUN4RCxJQUFRLElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO0FBQ3hDLElBQVEsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7QUFDbEMsRUFBQztBQUNMO0FBQ0k7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzRCQUNJLDRCQUFTO0FBQ2IsSUFBUSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ25DLElBQVEsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBQztBQUN6RCxFQUFDO0FBQ0w7QUFDSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7NEJBQ0ksOEJBQVU7QUFDZCxJQUFRLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDcEMsSUFBUSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQy9CLEVBQUM7QUFDTDtBQUNJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7NEJBQ0ksa0NBQVk7QUFDaEIsSUFBUSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0FBQ3JHLEVBQUM7QUFDTDtBQUNJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7NEJBQ0ksZ0NBQVc7QUFDZixJQUFRLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3ZFOztBQ2pFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDZSxJQUFNLHNCQUFzQixHQVl2QywrQkFBVyxDQUFDLEVBQUUsV0FBZSxTQUFTLGdCQUFvQixXQUFXLGtCQUFzQixXQUFXLGtCQUFzQjtBQUNoSSxJQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3RCLElBQVEsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7QUFDcEMsSUFBUSxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztBQUN4QyxJQUFRLElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO0FBQ3hDLElBQVEsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztBQUN2QyxJQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLEVBQUM7QUFDTDtBQUNJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7aUNBQ0ksMEJBQU8sT0FBTyxvQkFBd0I7QUFDMUMsSUFBUSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN4QyxJQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLElBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUM7QUFDdkUsSUFBUSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ25DLElBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLDRCQUE0QixDQUFDLENBQUM7QUFDekQsRUFBQztBQUNMO0FBQ0k7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO2lDQUNJLDhCQUFVO0FBQ2QsSUFBUSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ2xDLElBQVEsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNwQyxJQUFRLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDcEMsSUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsNEJBQTRCLENBQUMsQ0FBQztBQUM1RCxFQUFDO0FBQ0w7QUFDSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO2lDQUNJLGtDQUFZO0FBQ2hCLElBQVEsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRTtBQUMxQyxTQUFhLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3JFLFFBQVksSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN0QyxFQUFDO0FBQ0w7QUFDSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO2lDQUNJLGdDQUFXO0FBQ2YsSUFBUSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3RHLEVBQUM7QUFDTDtBQUNJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO2lDQUNJLDhDQUFrQjtBQUN0QixJQUFRLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7QUFDdEMsSUFBUSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ2hDLEVBQUM7QUFDTDtBQUNJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO2lDQUNJLDRDQUFpQjtBQUNyQixJQUFRLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7QUFDdkMsSUFBUSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLElBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsR0FBQztBQUNoRTs7QUMxR0o7QUFDQTtBQXdCQTtBQUNBO0FBQ0FBLElBQU0sUUFBUSxhQUFHLFlBQUssQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLFNBQU0sQ0FBQztBQUM5RDtBQUNBLElBQU0sZ0JBQWdCOzs7Ozs7Ozs7O0VBQVMwUixvQkFHOUI7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLFNBQVMsQ0FBQyxNQUFNLGlCQUFpQjtBQUMxQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssTUFBTSxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUMsWUFBWSxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUM7QUFDdEgsQ0FBQztBQUNEO0FBQ0EsSUFBTSxjQUFjLEdBZWhCLHVCQUFXLENBQUMsR0FBRyxJQUFPLE9BQU8sK0ZBQWtHO0FBQ25JLEtBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDeEIsS0FBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztBQUNsRCxLQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQzVCLEtBQVEsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDaEMsS0FBUSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUMzQjtBQUNBLEtBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoRCxLQUFRLElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztBQUNoRCxLQUFRLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxFQUFFLENBQUM7QUFDMUM7QUFDQTtBQUNBLEtBQVEsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztBQUNwQztBQUNBLEtBQVEsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzFDO0FBQ0EsS0FBUWtDLG1CQUFPLENBQUMsQ0FBQyxhQUFhLEVBQUUsbUJBQW1CLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM1RDtBQUNBLEtBQVE1VCxJQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQzVCO0FBQ0EsS0FBUSxJQUFJLENBQUMsVUFBVSxHQUFHO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFZLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNoRCxTQUFZLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMvQyxTQUFZLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxTQUFTLENBQUM7QUFDdkMsU0FBWSxDQUFDLEVBQUUsRUFBRSxhQUFhLEVBQUUsU0FBUyxDQUFDO0FBQzFDO0FBQ0EsU0FBWSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDO0FBQ3hDLFNBQVksQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQztBQUN4QyxTQUFZLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUM7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBWSxDQUFDRSxrQkFBTSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0QsU0FBWSxDQUFDQSxrQkFBTSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDO0FBQ25EO0FBQ0EsU0FBWSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDO0FBQ3hDLFNBQVksQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQztBQUN2QyxTQUFZLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxTQUFTLENBQUM7QUFDdkMsU0FBWSxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDO0FBQ3BDO0FBQ0EsU0FBWSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDN0MsU0FBWSxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDO0FBQ3BDO0FBQ0EsU0FBWSxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDM0MsU0FBWSxDQUFDLEVBQUUsRUFBRSxhQUFhLEVBQUUsU0FBUyxDQUFDO0FBQzFDO0FBQ0EsU0FBWSxDQUFDQSxrQkFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUM7QUFDdkMsTUFBUyxDQUFDO0FBQ1Y7QUFDQSxLQUFRLHVCQUE4QyxJQUFJLENBQUMsbUNBQVUsRUFBRTtBQUN2RSxTQURhRjtRQUFPO1FBQVE7UUFBTTs7UUFDdEIsR0FBRyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxLQUFLRSxrQkFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUN4SSxNQUFTO0FBQ1QsR0FBSztBQUNMO0FBQ0EsMEJBQUksOEJBQVU7QUFDZCxLQUFRLHVCQUE4QyxJQUFJLENBQUMsbUNBQVUsRUFBRTtBQUN2RSxTQURhRjtXQUFPO1dBQVE7V0FBTTs7V0FDdEIsR0FBRyxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxLQUFLRSxrQkFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUMzSSxNQUFTO0FBQ1QsR0FBSztBQUNMO0FBQ0EsMEJBQUksb0RBQW9CLE9BQU8sMkVBQThFO0FBQzdHLEtBQVFGLElBQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDOUIsS0FBUUEsSUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLGtCQUFrQixFQUFFLENBQUM7QUFDNUMsS0FBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLGVBQWUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNqRTtBQUNBLEtBQVFBLElBQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxjQUFjLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZFLEtBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDdEM7QUFDQSxLQUFRQSxJQUFNLE9BQU8sR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO0FBQzdDLEtBQVFBLElBQU0sU0FBUyxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztBQUNqRCxLQUFRLEdBQUcsQ0FBQyxlQUFlLEdBQUcsSUFBSSxzQkFBc0IsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDN0UsS0FBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN0QyxLQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzFDO0FBQ0EsS0FBUUEsSUFBTSxXQUFXLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO0FBQ3JELEtBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDOUM7QUFDQSxLQUFRQSxJQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsVUFBVSxHQUFHLElBQUksaUJBQWlCLEVBQUUsQ0FBQztBQUNwRSxLQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzVDO0FBQ0EsS0FBUUEsSUFBTSxXQUFXLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM1RCxLQUFRQSxJQUFNLFVBQVUsR0FBRyxJQUFJLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzFELEtBQVEsR0FBRyxDQUFDLFVBQVUsR0FBRyxJQUFJLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDakYsS0FBUSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0FBQzlELEtBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUM3RDtBQUNBLEtBQVFBLElBQU0sUUFBUSxHQUFHLElBQUksZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3RELEtBQVFBLElBQU0sUUFBUSxHQUFHLElBQUksZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3RELEtBQVEsR0FBRyxDQUFDLE9BQU8sR0FBRyxJQUFJLGNBQWMsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2pFLEtBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDeEMsS0FBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUN0RTtBQUNBLEtBQVFBLElBQU0sV0FBVyxHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztBQUNyRCxLQUFRQSxJQUFNLFNBQVMsR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUM7QUFDakQsS0FBUSxHQUFHLENBQUMsZUFBZSxHQUFHLElBQUksc0JBQXNCLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDbEcsS0FBUSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUN6RSxLQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFO0FBQ0EsS0FBUUEsSUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLFVBQVUsR0FBRyxJQUFJLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3RSxLQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLFVBQVUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7QUFDQSxLQUFRQSxJQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsUUFBUSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7QUFDOUQsS0FBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUN4QztBQUNBLEtBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUU7QUFDQSxLQUFRLHVCQUFtQixDQUFDLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLFVBQVUsMEJBQUMsRUFBRTtBQUM5SixTQURhQSxJQUFNOztXQUNQLElBQUksT0FBTyxDQUFDLFdBQVcsSUFBSSxDQUFDLE9BQU8sSUFBTyxJQUFJLENBQUMsRUFBRTtBQUM3RCxhQUFnQixDQUFDLEdBQUcsSUFBTyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLElBQU8sSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM5RCxVQUFhO0FBQ2IsTUFBUztBQUNULEdBQUs7QUFDTDtBQUNBLDBCQUFJLHNCQUFLLFdBQVcsT0FBVSxPQUFPLFFBQVcsT0FBTyxlQUFrQjtBQUN6RSxLQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQUMsV0FBVyxXQUFFLE9BQU8sV0FBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQzdELEtBQVEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDbEQsR0FBSztBQUNMO0FBQ0EsMEJBQUksd0JBQU87QUFDWDtBQUNBLEtBQVEsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFFLFNBQU87QUFDekM7QUFDQSxLQUFRLHVCQUF3QixJQUFJLENBQUMsa0NBQVMsRUFBRTtBQUNoRCxTQURhQTtXQUFPOztXQUNSLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUM1QixNQUFTO0FBQ1QsS0FBUSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzlCLEtBQVEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDakMsS0FBUSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUMzQixHQUFLO0FBQ0w7QUFDQSwwQkFBSSxnQ0FBVztBQUNmLEtBQVEsdUJBQXdCLElBQUksQ0FBQyxrQ0FBUyxFQUFFO0FBQ2hELFNBRGFBO1dBQU87O1dBQ1IsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFLElBQUUsT0FBTyxJQUFJLEdBQUM7QUFDaEQsTUFBUztBQUNULEtBQVEsT0FBTyxLQUFLLENBQUM7QUFDckIsR0FBSztBQUNMO0FBQ0EsMEJBQUksa0NBQVk7QUFDaEIsS0FBUSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ2pGLEdBQUs7QUFDTCwwQkFBSSxvQ0FBYTtBQUNqQixLQUFRLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUM7QUFDL0MsR0FBSztBQUNMO0FBQ0EsMEJBQUksOENBQWlCLGNBQWMsc0JBQXlCLE9BQU8sY0FBaUIsTUFBTSxPQUFVO0FBQ3BHLEtBQVEsS0FBS0EsSUFBTSxJQUFJLElBQUksY0FBYyxFQUFFO0FBQzNDLFNBQVksSUFBSSxJQUFJLEtBQUssTUFBTSxJQUFFLFdBQVM7QUFDMUMsU0FBWSxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ3ZELGFBQWdCLE9BQU8sSUFBSSxDQUFDO0FBQzVCLFVBQWE7QUFDYixNQUFTO0FBQ1QsS0FBUSxPQUFPLEtBQUssQ0FBQztBQUNyQixHQUFLO0FBQ0w7QUFDQSwwQkFBSSxnREFBa0IsQ0FBQyxXQUFjO0FBQ3JDLEtBQVEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUssQ0FBQyxDQUFDLGtCQUFhLENBQUM7QUFDL0MsR0FBSztBQUNMO0FBQ0EsMEJBQUksb0NBQVksQ0FBQyw4QkFBaUMsU0FBUyxRQUFXO0FBQ3RFO0FBQ0EsS0FBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFO0FBQy9CLFNBQVksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3hCLFNBQVksT0FBTztBQUNuQixNQUFTO0FBQ1Q7QUFDQSxLQUFRLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO0FBQ3BDLEtBQVFTLGtCQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsQ0FBQztBQUMxQztBQUNBLEtBQVFULElBQU0sVUFBVSxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssYUFBYSxHQUFHLFNBQVMsS0FBSyxDQUFDLGFBQW1CLENBQUM7QUFDekY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBUUEsSUFBTSxtQkFBbUIsZUFBa0IsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM3RSxLQUFRQSxJQUFNLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztBQUNwQyxLQUFRQSxJQUFNLGNBQWMsR0FBRyxFQUFFLENBQUM7QUFDbEM7QUFDQSxLQUFRQSxJQUFNLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLGFBQWE7QUFDM0MsU0FBWSxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLGNBQW9CLGFBQWEsQ0FBQztBQUN4RSxTQUFZLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQW9CLElBQUksSUFBSSxDQUFDO0FBQ25FO0FBQ0EsS0FBUSx1QkFBOEMsSUFBSSxDQUFDLGtDQUFTLEVBQUU7QUFDdEUsU0FEYUE7V0FBTztXQUFhO1dBQVM7O1dBQzlCLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLElBQUUsV0FBUztBQUMvQztBQUNBLFNBQVlELElBQUksZUFBSSxvQkFBdUI7QUFDM0MsU0FBWSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxFQUFFO0FBQzdFLGFBQWdCLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNoQztBQUNBLFVBQWEsTUFBTTtBQUNuQixhQUFnQixJQUFJLENBQUMsT0FBTyxJQUFPLFNBQVMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDekQsaUJBQW9CLElBQUksR0FBRyxDQUFDLE9BQU8sSUFBTyxTQUFTLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMxRSxpQkFBb0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDbEgsaUJBQW9CLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtBQUN2RCxxQkFBd0IsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7QUFDbkQsa0JBQXFCO0FBQ3JCLGNBQWlCO0FBQ2pCLFVBQWE7QUFDYjtBQUNBLFNBQVksSUFBSSxJQUFJLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFO0FBQzVDLGFBQWdCLGNBQWMsQ0FBQyxXQUFXLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDdEQsVUFBYTtBQUNiLE1BQVM7QUFDVDtBQUNBLEtBQVFDLElBQU0sbUJBQW1CLEdBQUcsRUFBRSxDQUFDO0FBQ3ZDLEtBQVEsS0FBS0EsSUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFO0FBQ3pELFNBQVksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUN2QyxhQUFnQixtQkFBbUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUM7QUFDdkQsVUFBYTtBQUNiLE1BQVM7QUFDVCxLQUFRLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxjQUFjLENBQUM7QUFDdEQ7QUFDQSxLQUFRLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLE1BQU0sSUFBSSxTQUFTLENBQUMsbUJBQW1CLENBQUMsRUFBRTtBQUN2RixTQUFZLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO0FBQzdGLFNBQVksSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7QUFDdkMsTUFBUztBQUNUO0FBQ0EsS0FBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsTUFBTSxJQUFJLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO0FBQ2xGLFNBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEMsTUFBUztBQUNUO0FBQ0EsS0FBUSxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztBQUNyQztBQUNBLEtBQWUsMERBQXVDO0FBQ3RELEtBQVEsSUFBSSxlQUFlLEVBQUU7QUFDN0IsU0FBWSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2xDLFNBQVksSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDckMsU0FBWSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUMvQixTQUFZLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkMsTUFBUztBQUNULEdBQUs7QUFDTDtBQUNBLDBCQUFJLGtEQUFtQixtQkFBbUIsY0FBaUIsZ0JBQWdCLE9BQVUsYUFBYSxjQUFpQixJQUFJLE9BQVUsQ0FBQyxZQUFlO0FBQ2pKLEtBQVEsSUFBSSxDQUFDLGFBQWEsSUFBRSxTQUFPO0FBQ25DO0FBQ0EsS0FBUWdDLGtCQUFNLENBQUMsbUJBQW1CLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDbkQ7QUFDQSxLQUFRaEMsSUFBTSxTQUFTLEdBQUcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxhQUFhLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQy9GO0FBQ0E7QUFDQSxLQUFRLElBQUksYUFBYSxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUU7QUFDbkQsU0FBWSxnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO0FBQzlDLE1BQVM7QUFDVCxLQUFRLElBQUksYUFBYSxDQUFDLFFBQVEsS0FBSyxTQUFTLEVBQUU7QUFDbEQsU0FBWSxnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO0FBQzlDLE1BQVM7QUFDVCxLQUFRLElBQUksYUFBYSxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUU7QUFDcEQsU0FBWSxnQkFBZ0IsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDO0FBQy9DLE1BQVM7QUFDVCxLQUFRLElBQUksYUFBYSxDQUFDLFlBQVksS0FBSyxTQUFTLEVBQUU7QUFDdEQsU0FBWSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO0FBQ2hELE1BQVM7QUFDVDtBQUNBLEdBQUs7QUFDTDtBQUNBLDBCQUFJLDBDQUFnQjtBQUNwQixLQUFRQSxJQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDNUIsS0FBUUEsSUFBTSx3QkFBd0IsR0FBRyxFQUFFLENBQUM7QUFDNUMsS0FBUUEsSUFBTSwyQkFBMkIsR0FBRyxFQUFFLENBQUM7QUFDL0M7QUFDQSxLQUFRLHVCQUE4RCxJQUFJLENBQUMsaUNBQVEsRUFBRTtBQUNyRjtBQUNBLFNBRmFBO1dBQU87V0FBUTtXQUFrQjs7V0FFbEMsSUFBSSxNQUFNLENBQUMsUUFBUSxJQUFFLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxJQUFJLElBQUlzRCxpQkFBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFDO0FBQ2xILFNBQVksSUFBSSxNQUFNLENBQUMsU0FBUyxJQUFFLFFBQVEsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxRQUFRLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsU0FBUyxHQUFDO0FBQ3BHLFNBQVksSUFBSSxNQUFNLENBQUMsWUFBWSxJQUFFLFFBQVEsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxRQUFRLENBQUMsWUFBWSxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsWUFBWSxHQUFDO0FBQ2hILFNBQVksSUFBSSxNQUFNLENBQUMsVUFBVSxJQUFFLFFBQVEsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxRQUFRLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsVUFBVSxHQUFDO0FBQ3hHLFNBQVksSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBRSxRQUFRLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUM7QUFDN0UsU0FBWSxJQUFJLE1BQU0sQ0FBQyxXQUFXLEtBQUssU0FBUyxJQUFFLFFBQVEsQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsR0FBQztBQUM1RixTQUFZLElBQUksTUFBTSxDQUFDLFNBQVMsSUFBRSxRQUFRLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEdBQUM7QUFDeEU7QUFDQSxTQUFZdEIsa0JBQU0sQ0FBQyx3QkFBd0IsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQy9ELFNBQVlBLGtCQUFNLENBQUMsMkJBQTJCLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztBQUNyRSxNQUFTO0FBQ1Q7QUFDQSxLQUFRLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsd0JBQXdCLEVBQUUsMkJBQTJCLENBQUMsQ0FBQztBQUNsRyxLQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQzNCLEdBQUs7QUFDTDtBQUNBLDBCQUFJLG9EQUFvQixjQUFjLElBQU8sd0JBQXdCLE9BQVUsbUJBQW1CLE9BQVU7QUFDNUc7QUFDQSxLQUFRaEMsSUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUM5QixLQUFRQSxJQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDO0FBQ2pDO0FBQ0EsS0FBUSxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUFFO0FBQ3hDLFNBQVksT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLHdCQUF3QixFQUFFLG1CQUFtQixDQUFDLENBQUM7QUFDbkYsTUFBUztBQUNUO0FBQ0EsS0FBYTtRQUFVO1FBQVc7UUFBYztRQUFZO1FBQVEsNkNBQThCO0FBQ2xHO0FBQ0EsS0FBUSxJQUFJLFdBQVcsS0FBSyxTQUFTLEVBQUU7QUFDdkMsU0FBWSxNQUFNLEdBQUcsV0FBVyxDQUFDO0FBQ2pDLE1BQVM7QUFDVDtBQUNBO0FBQ0EsS0FBUSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hCO0FBQ0EsS0FBUSxNQUFNLEdBQUcsTUFBTSxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDO0FBQ3JELEtBQVFBLElBQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFDL0UsS0FBUSxJQUFJLFlBQVksSUFBRSxFQUFFLENBQUMsT0FBTyxJQUFJLFlBQVksR0FBQztBQUNyRCxLQUFRLElBQUksVUFBVSxJQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksVUFBVSxHQUFDO0FBQy9DLEtBQVEsSUFBSSxTQUFTLElBQUUsRUFBRSxDQUFDLElBQUksSUFBSSxTQUFTLEdBQUM7QUFDNUMsS0FBUSxFQUFFLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzNDO0FBQ0EsS0FBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzVCLEtBQVEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLElBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUM7QUFDNUUsS0FBUSxJQUFJLENBQUMsV0FBVyxDQUFDLHdCQUF3QixFQUFFLG1CQUFtQixDQUFDLENBQUM7QUFDeEU7QUFDQSxHQUFLO0FBQ0w7QUFDQSwwQkFBSSxvQ0FBWSxtQkFBbUIscUJBQXdCLG1CQUFtQixPQUFVOztBQUFDO0FBQ3pGO0FBQ0EsS0FBUUEsSUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQzNELEtBQVFBLElBQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQ3hEO0FBQ0EsS0FBUSxJQUFJLENBQUMsU0FBUyxJQUFJLFNBQVMsRUFBRTtBQUNyQyxTQUFZLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNsRSxNQUFTO0FBQ1Q7QUFDQSxLQUFRLEtBQUtBLElBQU0sU0FBUyxJQUFJLG1CQUFtQixFQUFFO0FBQ3JELGdCQUFpQyxHQUFHLG1CQUFtQixDQUFDLFNBQVM7WUFBOUMsc0NBQWdEO0FBQ25FLFNBQVlBLElBQU0sT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9ELFNBQVksSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxHQUFHLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9FLFNBQVksSUFBSSxPQUFPLEVBQUU7QUFDekIsYUFBZ0IsSUFBSSxDQUFDLFVBQVUsRUFBSSxTQUFTLGFBQVMsYUFBYSxDQUFDLENBQUM7QUFDcEUsVUFBYTtBQUNiLE1BQVM7QUFDVDtBQUNBLEtBQVEsSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLElBQUUsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLEdBQUM7QUFDcEU7QUFDQSxLQUFRLElBQUksU0FBUyxFQUFFO0FBQ3ZCLFNBQVksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQzdELE1BQVM7QUFDVDtBQUNBLEtBQVEsS0FBS0EsSUFBTXliLFdBQVMsSUFBSSxtQkFBbUIsRUFBRTtBQUNyRCxrQkFBaUMsR0FBRyxtQkFBbUIsQ0FBQ0EsV0FBUztZQUE5QywwQ0FBZ0Q7QUFDbkUsU0FBWSxJQUFJLENBQUMsVUFBVSxDQUFDQSxXQUFTLEVBQUVDLGVBQWEsQ0FBQyxDQUFDO0FBQ3RELE1BQVM7QUFDVDtBQUNBLEtBQVEzYixJQUFJLGdCQUFnQixDQUFDO0FBQzdCLEtBQVEsS0FBS0MsSUFBTXliLFdBQVMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7QUFDeEQsa0JBQThDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDQSxXQUFTO1lBQTlEO1lBQWEsMENBQW1EO0FBQ25GLFNBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7QUFDN0QsYUFBZ0IsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUNBLFdBQVMsQ0FBQyxDQUFDO0FBQ3pELGFBQWdCLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxJQUFJQyxlQUFhLENBQUM7QUFDckYsYUFBZ0IsSUFBSSxDQUFDLFVBQVUsRUFBSUQsV0FBUyxXQUFPLGdCQUFnQixDQUFDLENBQUM7QUFDckUsVUFBYTtBQUNiLE1BQVM7QUFDVDtBQUNBLEtBQVF6YixJQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDN0QsS0FBUSxJQUFJLENBQUMsU0FBUyxJQUFJLFNBQVMsS0FBSyxDQUFDLFdBQVcsRUFBRTtBQUN0RCxTQUFZLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO0FBQ3hDLFNBQVlBLElBQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQzdGO0FBQ0EsU0FBWUEsSUFBTSxpQkFBaUIsYUFBRyxrQkFBVyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUNPLE1BQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxJQUFJLE9BQU8sR0FBR0EsTUFBSSxDQUFDLGVBQVksQ0FBQztBQUM5SDtBQUNBLFNBQVksSUFBSSxZQUFZLEVBQUU7QUFDOUIsYUFBZ0IsSUFBSSxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRTtBQUN2RixpQkFBb0IsWUFBWSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDN0MsY0FBaUI7QUFDakIsYUFBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsYUFBYSxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQztBQUNsRixVQUFhLE1BQU07QUFDbkIsYUFBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSW1SLGlCQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsYUFBYSxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hGLGFBQWdCLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFO0FBQy9ELGlCQUFvQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQzNDLGNBQWlCO0FBQ2pCLFVBQWE7QUFDYixTQUFZLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO0FBQ3pDLFNBQVksSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7QUFDekMsTUFBUztBQUNUO0FBQ0EsR0FBSztBQUNMO0FBQ0EsMEJBQUksa0NBQVcsSUFBSSxPQUFVLENBQUksRUFBRTtBQUNuQyxLQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUlBLGlCQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLEdBQUs7QUFDTDtBQUNBLDBCQUFJLHNEQUFzQjs7QUFBQztBQUMzQixLQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTLEVBQUU7QUFDekMsU0FBWSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLFdBQUMsV0FBYTtBQUN2RSxhQUFnQixPQUFPblIsTUFBSSxDQUFDLFFBQVEsQ0FBQztBQUNyQyxhQUFnQkEsTUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxZQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRixhQUFnQkEsTUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0FBQ3JDLFVBQWEsQ0FBQyxDQUFDO0FBQ2YsTUFBUztBQUNULEdBRUM7O0FDeGZEO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFhLEtBQUssR0FBRztBQUNyQixJQUFJLHlCQUFNLENBQUMsSUFBd0IsMEJBQTBCOzs7QUFBQztBQUM5RCxRQUFRLE9BQU95Qix3QkFBTSxXQUFDLElBQUksV0FBSyxTQUFPLENBQUMsQ0FBQztBQUN4QyxLQUFLO0FBQ0w7QUFDQSxJQUFJLGlCQUFHLENBQUMsRUFBRSxhQUFhO0FBQ3ZCLFFBQVEsRUFBRSxFQUFFLENBQUM7QUFDYixLQUFLO0FBQ0w7QUFDQSxJQUFJLG1DQUFZLENBQUMsT0FBTyxVQUFVLFNBQTBCLEVBQUUsRUFBa0IsRUFBRTs2Q0FBdkMsWUFBWTsrQkFBUyxXQUFXO0FBQVE7QUFDbkYsUUFBUWhDLElBQU0sRUFBRSxHQUFHRSxrQkFBTSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEQsUUFBUSxJQUFJLEVBQUUsRUFBRTtBQUNoQixZQUFZLElBQUksU0FBUyxJQUFFLEVBQUUsQ0FBQyxTQUFTLEdBQUcsRUFBRSxHQUFDO0FBQzdDLFlBQVksRUFBRSxDQUFDLFNBQVMsSUFBSSxTQUFPLE9BQVMsQ0FBQztBQUM3QyxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDOztBQzNCRjtBQUNBO0FBbUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBTSxNQUFNO0VBcUJSLGVBQVcsQ0FBQyxTQUFTLGFBQWEsT0FBTyx5QkFBeUI7QUFDdEUsUUFBUU0sWUFBSyxLQUFDLENBQUMsQ0FBQztBQUNoQixRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0FBQzdCLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDOUIsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztBQUNuQyxRQUFRLElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztBQUNoRDtBQUNBLFFBQVFvVCxtQkFBTyxDQUFDLENBQUMsc0JBQXNCLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNoRDtBQUNBO0FBQ0E7Ozs7d0NBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFJLDBDQUFvQixFQUFFLE9BQU8sSUFBSWtILGtCQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUU7QUFDcEc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBSSxnQ0FBVSxNQUFNLGNBQWMsU0FBUyxXQUFXO0FBQ3RELFFBQVEsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDaEQsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQUksd0JBQU0sTUFBTSxhQUFhLE9BQU8scUJBQXFCLFNBQVMsV0FBVztBQUM3RSxRQUFRLE1BQU0sR0FBR3hYLGlCQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hELFFBQVEsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFdEIsa0JBQU0sQ0FBQyxTQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3ZGLE1BQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBSSx3QkFBTSxNQUFNLGNBQWMsT0FBTyxxQkFBcUIsU0FBUyxXQUFXO0FBQzlFLFFBQVEsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDQSxrQkFBTSxDQUFDO0FBQ2xDLFlBQVksTUFBTSxFQUFFLE1BQU07QUFDMUIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ2hDLE1BQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBSSxzQ0FBa0IsRUFBRSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUU7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQUksNEJBQVEsSUFBSSxVQUFVLFNBQVMsV0FBVztBQUM5QyxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUN2QyxRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCLE1BQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBSSwwQkFBTyxJQUFJLFVBQVUsT0FBTyxzQkFBc0IsU0FBUyxXQUFXO0FBQzFFLFFBQVEsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDQSxrQkFBTSxDQUFDO0FBQ2xDLGtCQUFZLElBQUk7QUFDaEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ2hDLE1BQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBSSwwQkFBTyxPQUFPLHFCQUFxQixTQUFTLFdBQVc7QUFDM0QsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzVELFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFJLDRCQUFRLE9BQU8scUJBQXFCLFNBQVMsV0FBVztBQUM1RCxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDNUQsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQixNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQUksNENBQXFCLEVBQUUsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFFO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBSSxrQ0FBVyxPQUFPLFVBQVUsU0FBUyxXQUFXO0FBQ3BELFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFDLE9BQU8sQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzFDLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQUksb0RBQTZCLEVBQUUsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFFO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQUksa0NBQVcsT0FBTyxrQkFBa0IsU0FBUyxXQUFXO0FBQzVELFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFDLE9BQU8sQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzFDLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQUksOEJBQVMsT0FBTyxVQUFVLE9BQU8scUJBQXFCLFNBQVMsV0FBVztBQUM5RSxRQUFRLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQ0Esa0JBQU0sQ0FBQztBQUNsQyxxQkFBWSxPQUFPO0FBQ25CLFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNoQyxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFJLGtDQUFXLE9BQU8scUJBQXFCLFNBQVMsV0FBVztBQUMvRCxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFQSxrQkFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3ZFLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBSSw0Q0FBZ0IsT0FBTyxxQkFBcUIsU0FBUyxXQUFXO0FBQ3BFLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQ0Esa0JBQU0sQ0FBQztBQUMzQixZQUFZLE9BQU8sRUFBRSxDQUFDO0FBQ3RCLFlBQVksS0FBSyxFQUFFLENBQUM7QUFDcEIsWUFBWSxRQUFRLEVBQUUsSUFBSTtBQUMxQixTQUFTLEVBQUUsT0FBTyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDaEMsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQixNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQUksb0NBQVksT0FBTyxxQkFBcUIsU0FBUyxXQUFXO0FBQ2hFLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUU7QUFDN0QsWUFBWSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3ZELFNBQVM7QUFDVCxRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCLE1BQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFJLHdDQUFtQixFQUFFLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRTtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBSSw4QkFBUyxLQUFLLFVBQVUsU0FBUyxXQUFXO0FBQ2hELFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFDLEtBQUssQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3hDLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFJLDRDQUFnQixNQUFNLG9CQUFvQixPQUFPLDJEQUEyRDtBQUNoSCxRQUFRLE1BQU0sR0FBRzBRLHdCQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzlDLFFBQVEsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDdEcsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFJLDREQUF3QixFQUFFLGNBQWMsRUFBRSxjQUFjLE9BQU8sVUFBVSxPQUFPLDJEQUEyRDtBQUMvSSxRQUFRMVMsSUFBTSxjQUFjLEdBQUc7QUFDL0IsWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUNsQixZQUFZLE1BQU0sRUFBRSxDQUFDO0FBQ3JCLFlBQVksS0FBSyxFQUFFLENBQUM7QUFDcEIsWUFBWSxJQUFJLEVBQUUsQ0FBQztBQUNuQixTQUFTLENBQUM7QUFDVixRQUFRLE9BQU8sR0FBR2dDLGtCQUFNLENBQUM7QUFDekIsWUFBWSxPQUFPLEVBQUUsY0FBYztBQUNuQyxZQUFZLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUIsWUFBWSxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPO0FBQzNDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNwQjtBQUNBLFFBQVEsSUFBSSxPQUFPLE9BQU8sQ0FBQyxPQUFPLEtBQUssUUFBUSxFQUFFO0FBQ2pELFlBQVloQyxJQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO0FBQ3RDLFlBQVksT0FBTyxDQUFDLE9BQU8sR0FBRztBQUM5QixnQkFBZ0IsR0FBRyxFQUFFLENBQUM7QUFDdEIsZ0JBQWdCLE1BQU0sRUFBRSxDQUFDO0FBQ3pCLGdCQUFnQixLQUFLLEVBQUUsQ0FBQztBQUN4QixnQkFBZ0IsSUFBSSxFQUFFLENBQUM7QUFDdkIsYUFBYSxDQUFDO0FBQ2QsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLENBQUMsT0FBTyxHQUFHZ0Msa0JBQU0sQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2xFLFFBQVFoQyxJQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQ2xDLFFBQVFBLElBQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUM7QUFDdkM7QUFDQTtBQUNBO0FBQ0EsUUFBUUEsSUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQzhhLGtCQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdkQsUUFBUTlhLElBQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUM4YSxrQkFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELFFBQVE5YSxJQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDbkUsUUFBUUEsSUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ25FO0FBQ0EsUUFBUUEsSUFBTSxVQUFVLEdBQUcsSUFBSXNELGlCQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0csUUFBUXRELElBQU0sU0FBUyxHQUFHLElBQUlzRCxpQkFBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVHO0FBQ0E7QUFDQSxRQUFRdEQsSUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMvQyxRQUFRQSxJQUFNLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLElBQUksV0FBVyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNuSSxRQUFRQSxJQUFNLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLElBQUksV0FBVyxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwSTtBQUNBLFFBQVEsSUFBSSxNQUFNLEdBQUcsQ0FBQyxJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDdEMsWUFBWTRQLG9CQUFRO0FBQ3BCLGdCQUFnQiw2RUFBNkU7QUFDN0YsYUFBYSxDQUFDO0FBQ2QsWUFBWSxPQUFPO0FBQ25CLFNBQVM7QUFDVDtBQUNBLFFBQVE1UCxJQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNsRztBQUNBO0FBQ0EsUUFBUUEsSUFBTSxNQUFNLEdBQUdzRCxpQkFBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDckQsUUFBUXRELElBQU0sY0FBYyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQ2xGLFFBQVFBLElBQU0sY0FBYyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ2xGLFFBQVFBLElBQU0sbUJBQW1CLEdBQUcsSUFBSXNELGlCQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQztBQUNwRyxRQUFRdEQsSUFBTSxpQkFBaUIsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDMUY7QUFDQSxRQUFRQSxJQUFNLE1BQU0sSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7QUFDekY7QUFDQSxRQUFRLE9BQU87QUFDZixvQkFBWSxNQUFNO0FBQ2xCLGtCQUFZLElBQUk7QUFDaEIscUJBQVksT0FBTztBQUNuQixTQUFTLENBQUM7QUFDVixNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQUksZ0NBQVUsTUFBTSxvQkFBb0IsT0FBTyxxQ0FBcUMsU0FBUyxXQUFXO0FBQ3hHLFFBQVEsT0FBTyxJQUFJLENBQUMsWUFBWTtBQUNoQyxZQUFZLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQztBQUNqRCxZQUFZLE9BQU87QUFDbkIsWUFBWSxTQUFTLENBQUMsQ0FBQztBQUN2QixNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQUksc0RBQXFCLEVBQUUsYUFBYSxFQUFFLGFBQWEsT0FBTyxVQUFVLE9BQU8scUNBQXFDLFNBQVMsV0FBVztBQUN4SSxRQUFRLE9BQU8sSUFBSSxDQUFDLFlBQVk7QUFDaEMsWUFBWSxJQUFJLENBQUMsdUJBQXVCO0FBQ3hDLGdCQUFnQixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQ3NELGlCQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQy9ELGdCQUFnQixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQ0EsaUJBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0QsZ0JBQWdCLE9BQU87QUFDdkIsZ0JBQWdCLE9BQU8sQ0FBQztBQUN4QixZQUFZLE9BQU87QUFDbkIsWUFBWSxTQUFTLENBQUMsQ0FBQztBQUN2QixNQUFLO0FBQ0w7QUFDQSxxQkFBSSxzQ0FBYSxpQkFBaUIscUNBQXFDLE9BQU8scUNBQXFDLFNBQVMsV0FBVztBQUN2STtBQUNBLFFBQVEsSUFBSSxDQUFDLGlCQUFpQixJQUFFLE9BQU8sSUFBSSxHQUFDO0FBQzVDO0FBQ0EsUUFBUSxPQUFPLEdBQUd0QixrQkFBTSxDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3JEO0FBQ0EsUUFBUSxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUM7QUFDL0I7QUFDQSxRQUFRLE9BQU8sT0FBTyxDQUFDLE1BQU07QUFDN0IsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUM7QUFDM0MsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMzQyxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQUksMEJBQU8sT0FBTyxpQkFBaUIsU0FBUyxXQUFXO0FBQ3ZELFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsUUFBUWhDLElBQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDbEMsUUFBUUQsSUFBSSxXQUFXLEdBQUcsS0FBSztBQUMvQixZQUFZLGNBQWMsR0FBRyxLQUFLO0FBQ2xDLFlBQVksWUFBWSxHQUFHLEtBQUssQ0FBQztBQUNqQztBQUNBLFFBQVEsSUFBSSxNQUFNLElBQUksT0FBTyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO0FBQzVELFlBQVksV0FBVyxHQUFHLElBQUksQ0FBQztBQUMvQixZQUFZLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQ3BDLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRTtBQUMxQyxZQUFZLEVBQUUsQ0FBQyxNQUFNLEdBQUcrYSxrQkFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdkQsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLFNBQVMsSUFBSSxPQUFPLElBQUksRUFBRSxDQUFDLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUU7QUFDckUsWUFBWSxjQUFjLEdBQUcsSUFBSSxDQUFDO0FBQ2xDLFlBQVksRUFBRSxDQUFDLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7QUFDMUMsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLE9BQU8sSUFBSSxPQUFPLElBQUksRUFBRSxDQUFDLEtBQUssS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUU7QUFDL0QsWUFBWSxZQUFZLEdBQUcsSUFBSSxDQUFDO0FBQ2hDLFlBQVksRUFBRSxDQUFDLEtBQUssR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFDdEMsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLE9BQU8sQ0FBQyxPQUFPLElBQUksSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDNUUsWUFBWSxFQUFFLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7QUFDekMsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUlwSixpQkFBSyxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNwRCxhQUFhLElBQUksQ0FBQyxJQUFJQSxpQkFBSyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ2hEO0FBQ0EsUUFBUSxJQUFJLFdBQVcsRUFBRTtBQUN6QixZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSUEsaUJBQUssQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDeEQsaUJBQWlCLElBQUksQ0FBQyxJQUFJQSxpQkFBSyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNuRCxpQkFBaUIsSUFBSSxDQUFDLElBQUlBLGlCQUFLLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDdkQsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLGNBQWMsRUFBRTtBQUM1QixZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSUEsaUJBQUssQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDMUQsaUJBQWlCLElBQUksQ0FBQyxJQUFJQSxpQkFBSyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNyRCxpQkFBaUIsSUFBSSxDQUFDLElBQUlBLGlCQUFLLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDekQsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLFlBQVksRUFBRTtBQUMxQixZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSUEsaUJBQUssQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDekQsaUJBQWlCLElBQUksQ0FBQyxJQUFJQSxpQkFBSyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNwRCxpQkFBaUIsSUFBSSxDQUFDLElBQUlBLGlCQUFLLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDeEQsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSUEsaUJBQUssQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUMxRCxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQUksMEJBQU8sT0FBTyx3REFBd0QsU0FBUyxXQUFXOztBQUFDO0FBQy9GLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzFDO0FBQ0EsUUFBUSxPQUFPLEdBQUcxUCxrQkFBTSxDQUFDO0FBQ3pCLFlBQVksTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxQixZQUFZLFFBQVEsRUFBRSxHQUFHO0FBQ3pCLFlBQVksTUFBTSxFQUFFMlosZ0JBQWE7QUFDakMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3BCO0FBQ0EsUUFBUSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssS0FBSyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsSUFBSXZiLG1CQUFPLENBQUMsb0JBQW9CLENBQUMsSUFBRSxPQUFPLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBQztBQUNwSDtBQUNBLFFBQVFKLElBQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTO0FBQ2pDLFlBQVksU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDdEMsWUFBWSxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRTtBQUM1QyxZQUFZLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQ3hDLFlBQVksWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUU7QUFDNUM7QUFDQSxZQUFZLElBQUksR0FBRyxNQUFNLElBQUksT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxTQUFTO0FBQ2hFLFlBQVksT0FBTyxHQUFHLFNBQVMsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLEdBQUcsWUFBWTtBQUNqSCxZQUFZLEtBQUssR0FBRyxPQUFPLElBQUksT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxVQUFVO0FBQ3BFLFlBQVksT0FBTyxHQUFHLFNBQVMsSUFBSSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDO0FBQzFFO0FBQ0EsUUFBUUEsSUFBTSxhQUFhLEdBQUdzRCxpQkFBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUQsUUFBUXZELElBQUksYUFBYSxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQzlELFFBQVFDLElBQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNqRSxRQUFRQSxJQUFNLE1BQU0sR0FBRzhhLGtCQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksZ0JBQWdCLENBQUMsQ0FBQztBQUMxRSxRQUFRLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0QztBQUNBLFFBQVE5YSxJQUFNLElBQUksR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDbEQsUUFBUUEsSUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkQsUUFBUUEsSUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLENBQUM7QUFDMUQ7QUFDQSxRQUFRRCxJQUFJLE1BQU0sRUFBRSxXQUFXLENBQUM7QUFDaEM7QUFDQSxRQUFRLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtBQUM1QixZQUFZLE1BQU0sR0FBRythLGtCQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNwRCxZQUFZLFdBQVcsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ25ELFNBQVM7QUFDVDtBQUNBLFFBQVE5YSxJQUFNLFNBQVMsR0FBRztBQUMxQixZQUFZLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTztBQUNoQyxZQUFZLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUTtBQUNsQyxZQUFZLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUztBQUNwQyxZQUFZLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUztBQUNwQyxTQUFTLENBQUM7QUFDVjtBQUNBLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQztBQUM5RCxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsS0FBSyxZQUFZLEtBQUssT0FBTyxDQUFDLENBQUM7QUFDdEUsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxLQUFLLFVBQVUsQ0FBQyxDQUFDO0FBQ2xFLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDcEQ7QUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUN0QyxRQUFRLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDckU7QUFDQSxRQUFRLFlBQVksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUM3QztBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssV0FBRSxDQUFDLEVBQUs7QUFDMUIsWUFBWSxJQUFJTyxNQUFJLENBQUMsUUFBUSxFQUFFO0FBQy9CLGdCQUFnQixFQUFFLENBQUMsSUFBSSxHQUFHNEwsa0JBQVcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzFELGFBQWE7QUFDYixZQUFZLElBQUk1TCxNQUFJLENBQUMsU0FBUyxFQUFFO0FBQ2hDLGdCQUFnQixFQUFFLENBQUMsT0FBTyxHQUFHNEwsa0JBQVcsQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ25FLGFBQWE7QUFDYixZQUFZLElBQUk1TCxNQUFJLENBQUMsU0FBUyxFQUFFO0FBQ2hDLGdCQUFnQixFQUFFLENBQUMsS0FBSyxHQUFHNEwsa0JBQVcsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdELGFBQWE7QUFDYixZQUFZLElBQUk1TCxNQUFJLENBQUMsUUFBUSxFQUFFO0FBQy9CLGdCQUFnQixFQUFFLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNoRTtBQUNBO0FBQ0EsZ0JBQWdCLGFBQWEsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNsRSxhQUFhO0FBQ2I7QUFDQSxZQUFZLElBQUksTUFBTSxFQUFFO0FBQ3hCLGdCQUFnQixFQUFFLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQzNELGFBQWEsTUFBTTtBQUNuQixnQkFBZ0JQLElBQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsQ0FBQztBQUNoRSxnQkFBZ0JBLElBQU0sSUFBSSxHQUFHLElBQUksR0FBRyxTQUFTO0FBQzdDLG9CQUFvQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUM7QUFDM0Msb0JBQW9CLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzlDLGdCQUFnQkEsSUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3RELGdCQUFnQkEsSUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDOUYsZ0JBQWdCLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDLElBQUksRUFBRSxHQUFHLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUMxRyxhQUFhO0FBQ2I7QUFDQSxZQUFZTyxNQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzVDO0FBQ0EsU0FBUyxZQUFHLGtCQUFrQixXQUFjO0FBQzVDLFlBQVlBLE1BQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFDM0QsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3BCO0FBQ0EsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQixNQUFLO0FBQ0w7QUFDQSxxQkFBSSxzQ0FBYSxTQUFTLFdBQVcsV0FBVyxXQUFXLFNBQXNCLEVBQUU7NkNBQWYsV0FBVztBQUFLO0FBQ3BGLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDNUI7QUFDQSxRQUFRLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFO0FBQy9DLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJbVIsaUJBQUssQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUN6RCxTQUFTO0FBQ1QsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFO0FBQ2pELFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJQSxpQkFBSyxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3pELFNBQVM7QUFDVCxRQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUU7QUFDbkQsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUlBLGlCQUFLLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDM0QsU0FBUztBQUNULFFBQVEsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRTtBQUNuRCxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSUEsaUJBQUssQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUMxRCxTQUFTO0FBQ1QsTUFBSztBQUNMO0FBQ0EscUJBQUksNENBQWdCLFNBQVMsV0FBVztBQUN4QyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSUEsaUJBQUssQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUNoRCxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUMzQixZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSUEsaUJBQUssQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUNwRCxTQUFTO0FBQ1QsUUFBUSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDNUIsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUlBLGlCQUFLLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDdEQsU0FBUztBQUNULFFBQVEsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQzVCLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJQSxpQkFBSyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3JELFNBQVM7QUFDVCxNQUFLO0FBQ0w7QUFDQSxxQkFBSSxrQ0FBVyxTQUFTLFdBQVcsTUFBTSxXQUFXO0FBQ3BEO0FBQ0E7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxNQUFNLEVBQUU7QUFDL0QsWUFBWSxPQUFPO0FBQ25CLFNBQVM7QUFDVCxRQUFRLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUM1QjtBQUNBLFFBQVExUixJQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQ3pDLFFBQVFBLElBQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDM0MsUUFBUUEsSUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUMzQyxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0FBQzdCLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDOUIsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztBQUMvQixRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQy9CLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDOUI7QUFDQSxRQUFRLElBQUksVUFBVSxFQUFFO0FBQ3hCLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJMFIsaUJBQUssQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUN2RCxTQUFTO0FBQ1QsUUFBUSxJQUFJLFdBQVcsRUFBRTtBQUN6QixZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSUEsaUJBQUssQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUN6RCxTQUFTO0FBQ1QsUUFBUSxJQUFJLFdBQVcsRUFBRTtBQUN6QixZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSUEsaUJBQUssQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUN4RCxTQUFTO0FBQ1QsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUlBLGlCQUFLLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDbkQsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFJLHdCQUFNLE9BQU8sVUFBVSxTQUFTLFdBQVc7O0FBQUM7QUFDaEQ7QUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxJQUFJdFIsbUJBQU8sQ0FBQyxvQkFBb0IsRUFBRTtBQUNoRSxZQUFZSixJQUFNLGNBQWMsSUFBSXlTLGdCQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDLGdCQUFnQixDQUFDO0FBQ3BILFlBQVksT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMxRCxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEI7QUFDQSxRQUFRLE9BQU8sR0FBR3pRLGtCQUFNLENBQUM7QUFDekIsWUFBWSxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFCLFlBQVksS0FBSyxFQUFFLEdBQUc7QUFDdEIsWUFBWSxLQUFLLEVBQUUsSUFBSTtBQUN2QixZQUFZLE1BQU0sRUFBRTJaLGdCQUFhO0FBQ2pDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNwQjtBQUNBLFFBQVEzYixJQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUztBQUNqQyxZQUFZLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFO0FBQ3RDLFlBQVksWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUU7QUFDNUMsWUFBWSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUN4QyxZQUFZLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDN0M7QUFDQSxRQUFRQSxJQUFNLElBQUksR0FBRyxNQUFNLElBQUksT0FBTyxHQUFHNFUsaUJBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsU0FBUyxDQUFDO0FBQ2xHLFFBQVE1VSxJQUFNLE9BQU8sR0FBRyxTQUFTLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxHQUFHLFlBQVksQ0FBQztBQUNwSCxRQUFRQSxJQUFNLEtBQUssR0FBRyxPQUFPLElBQUksT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUM7QUFDdkUsUUFBUUEsSUFBTSxPQUFPLEdBQUcsU0FBUyxJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUM7QUFDNUU7QUFDQSxRQUFRQSxJQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsQ0FBQztBQUNyRCxRQUFRQSxJQUFNLGFBQWEsR0FBR3NELGlCQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1RCxRQUFRdkQsSUFBSSxhQUFhLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDOUQsUUFBUUMsSUFBTSxnQkFBZ0IsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ2pFLFFBQVFBLElBQU0sTUFBTSxHQUFHOGEsa0JBQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQzFFLFFBQVEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RDO0FBQ0EsUUFBUTlhLElBQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUNsRCxRQUFRQSxJQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuRDtBQUNBLFFBQVFELElBQUksR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFDaEM7QUFDQTtBQUNBLFFBQVFDLElBQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDO0FBQ2hEO0FBQ0EsWUFBWSxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUs7QUFDM0I7QUFDQTtBQUNBLFlBQVksRUFBRSxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM3QjtBQUNBLFFBQVEsSUFBSSxTQUFTLElBQUksT0FBTyxFQUFFO0FBQ2xDLFlBQVlBLElBQU0sT0FBTyxHQUFHNFUsaUJBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3RHO0FBQ0E7QUFDQSxZQUFZNVUsSUFBTSxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxDQUFDO0FBQ2hFLFlBQVksR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzQyxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFFBQVFBLElBQU0sSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUN0QixZQUFZQSxJQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNuSCxZQUFZLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEQsU0FBUztBQUNUO0FBQ0EsUUFBUSxTQUFTLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7QUFDckUsUUFBUSxTQUFTLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7QUFDckUsUUFBUSxTQUFTLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUN0RDtBQUNBO0FBQ0EsUUFBUUEsSUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLFFBQVFELElBQUksQ0FBQywwQkFBMEIsVUFBVSxDQUFDLEVBQUU7QUFDcEQsWUFBWSxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRTtBQUNuRCxTQUFTLENBQUM7QUFDVjtBQUNBO0FBQ0E7QUFDQSxRQUFRQSxJQUFJLENBQUMsMEJBQTBCLFVBQVUsQ0FBQyxFQUFFO0FBQ3BELFlBQVksT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqRixTQUFTLENBQUM7QUFDVjtBQUNBO0FBQ0EsUUFBUUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQztBQUNsQztBQUNBO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3JEO0FBQ0EsWUFBWSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLFFBQVEsSUFBRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxHQUFDO0FBQ3JGO0FBQ0EsWUFBWUMsSUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNsRDtBQUNBLFlBQVksQ0FBQyxHQUFHLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDekMsWUFBWSxDQUFDLEdBQUcsU0FBUyxDQUFDLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUQsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLFVBQVUsSUFBSSxPQUFPLEVBQUU7QUFDbkMsWUFBWSxPQUFPLENBQUMsUUFBUSxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztBQUNqRCxTQUFTLE1BQU07QUFDZixZQUFZQSxJQUFNLENBQUMsR0FBRyxhQUFhLElBQUksT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQzdGLFlBQVksT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJ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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQUksOEJBQVMsS0FBSyw2Q0FBNkMsUUFBUSxXQUFXO0FBQ2xGLFFBQVEsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7QUFDbkMsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDN0MsUUFBUSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEMsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFJLGdDQUFVLEVBQUUsVUFBVSxRQUFRLFdBQVc7QUFDN0MsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLENB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6cUJBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTdSLElBQU02YixnQkFBYyxZQUFZO0FBQ2hDLElBQUksUUFBUSxFQUFFLEdBQUc7QUFDakIsSUFBSSxJQUFJLEVBQUUsUUFBUTtBQUNsQixDQUFDLENBQUM7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBTSxZQUFZLEdBS2QscUJBQVcsQ0FBQyxPQUFPLFNBQVc7QUFD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 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwYm94LWdsLWRldi5qcyIsInNvdXJjZXMiOlsiLi4vbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvYXNzZXJ0L25vZGVfbW9kdWxlcy91dGlsL3N1cHBvcnQvaXNCdWZmZXJCcm93c2VyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2Fzc2VydC9ub2RlX21vZHVsZXMvaW5oZXJpdHMvaW5oZXJpdHNfYnJvd3Nlci5qcyIsIi4uL25vZGVfbW9kdWxlcy9hc3NlcnQvbm9kZV9tb2R1bGVzL3V0aWwvdXRpbC5qcyIsIi4uL25vZGVfbW9kdWxlcy9hc3NlcnQvYXNzZXJ0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BtYXBib3gvdW5pdGJlemllci9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AbWFwYm94L3BvaW50LWdlb21ldHJ5L2luZGV4LmpzIiwiLi4vc3JjL3V0aWwvYnJvd3Nlci93aW5kb3cuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy91dGlsL2RlZXBfZXF1YWwuanMiLCIuLi9zcmMvdXRpbC91dGlsLmpzIiwiLi4vc3JjL3V0aWwvYnJvd3Nlci5qcyIsIi4uL3NyYy91dGlsL2NvbmZpZy5qcyIsIi4uL3NyYy91dGlsL3dlYnBfc3VwcG9ydGVkLmpzIiwiLi4vc3JjL3V0aWwvc2t1X3Rva2VuLmpzIiwiLi4vc3JjL3V0aWwvbWFwYm94LmpzIiwiLi4vc3JjL3V0aWwvdGlsZV9yZXF1ZXN0X2NhY2hlLmpzIiwiLi4vc3JjL3V0aWwvb2Zmc2NyZWVuX2NhbnZhc19zdXBwb3J0ZWQuanMiLCIuLi9zcmMvdXRpbC9hamF4LmpzIiwiLi4vc3JjL3V0aWwvZXZlbnRlZC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3IuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy92YWxpZGF0ZS92YWxpZGF0ZV9jb25zdGFudHMuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy91dGlsL2V4dGVuZC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3V0aWwvdW5idW5kbGVfanNvbmxpbnQuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL3BhcnNpbmdfZXJyb3IuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL3Njb3BlLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9jc3Njb2xvcnBhcnNlci9jc3Njb2xvcnBhcnNlci5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3V0aWwvY29sb3IuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL2NvbGxhdG9yLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9mb3JtYXR0ZWQuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL3Jlc29sdmVkX2ltYWdlLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi92YWx1ZXMuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL2xpdGVyYWwuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL3J1bnRpbWVfZXJyb3IuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL2Fzc2VydGlvbi5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvZm9ybWF0LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9pbWFnZS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvY29lcmNpb24uanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2V2YWx1YXRpb25fY29udGV4dC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vY29tcG91bmRfZXhwcmVzc2lvbi5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvY29sbGF0b3IuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL3dpdGhpbi5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vaXNfY29uc3RhbnQuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL3Zhci5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vcGFyc2luZ19jb250ZXh0LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9zdG9wcy5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvc3RlcC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3V0aWwvaW50ZXJwb2xhdGUuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy91dGlsL2NvbG9yX3NwYWNlcy5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvaW50ZXJwb2xhdGUuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL2NvYWxlc2NlLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9sZXQuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL2F0LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9pbi5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvaW5kZXhfb2YuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL21hdGNoLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9jYXNlLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9zbGljZS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvY29tcGFyaXNvbi5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvbnVtYmVyX2Zvcm1hdC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvbGVuZ3RoLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9pbmRleC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3V0aWwvcmVzdWx0LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdXRpbC9wcm9wZXJ0aWVzLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdXRpbC9nZXRfdHlwZS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2Z1bmN0aW9uL2luZGV4LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9pbmRleC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlL3ZhbGlkYXRlX29iamVjdC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlL3ZhbGlkYXRlX2FycmF5LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfbnVtYmVyLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfZnVuY3Rpb24uanMiLCIuLi9zcmMvc3R5bGUtc3BlYy92YWxpZGF0ZS92YWxpZGF0ZV9leHByZXNzaW9uLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfYm9vbGVhbi5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlL3ZhbGlkYXRlX2NvbG9yLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfZW51bS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2ZlYXR1cmVfZmlsdGVyL2luZGV4LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfZmlsdGVyLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfcHJvcGVydHkuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy92YWxpZGF0ZS92YWxpZGF0ZV9wYWludF9wcm9wZXJ0eS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlL3ZhbGlkYXRlX2xheW91dF9wcm9wZXJ0eS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlL3ZhbGlkYXRlX2xheWVyLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfc3RyaW5nLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfc291cmNlLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfbGlnaHQuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy92YWxpZGF0ZS92YWxpZGF0ZV9mb3JtYXR0ZWQuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy92YWxpZGF0ZS92YWxpZGF0ZV9pbWFnZS5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlL3ZhbGlkYXRlLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdmFsaWRhdGUvdmFsaWRhdGVfZ2x5cGhzX3VybC5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL3ZhbGlkYXRlX3N0eWxlLm1pbi5qcyIsIi4uL3NyYy9zdHlsZS92YWxpZGF0ZV9zdHlsZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9ncmlkLWluZGV4L2dyaWQtaW5kZXguanMiLCIuLi9zcmMvdXRpbC93ZWJfd29ya2VyX3RyYW5zZmVyLmpzIiwiLi4vc3JjL3N0eWxlL3pvb21faGlzdG9yeS5qcyIsIi4uL3NyYy91dGlsL2lzX2NoYXJfaW5fdW5pY29kZV9ibG9jay5qcyIsIi4uL3NyYy91dGlsL3NjcmlwdF9kZXRlY3Rpb24uanMiLCIuLi9zcmMvc291cmNlL3J0bF90ZXh0X3BsdWdpbi5qcyIsIi4uL3NyYy9zdHlsZS9ldmFsdWF0aW9uX3BhcmFtZXRlcnMuanMiLCIuLi9zcmMvc3R5bGUvcHJvcGVydGllcy5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllci5qcyIsIi4uL3NyYy91dGlsL3N0cnVjdF9hcnJheS5qcyIsIi4uL3NyYy9kYXRhL2FycmF5X3R5cGVzLmpzIiwiLi4vc3JjL2RhdGEvYnVja2V0L2NpcmNsZV9hdHRyaWJ1dGVzLmpzIiwiLi4vc3JjL2RhdGEvc2VnbWVudC5qcyIsIi4uL3NyYy9zaGFkZXJzL2VuY29kZV9hdHRyaWJ1dGUuanMiLCIuLi9zcmMvZGF0YS9idWNrZXQvcGF0dGVybl9hdHRyaWJ1dGVzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL211cm11cmhhc2gtanMvbXVybXVyaGFzaDNfZ2MuanMiLCIuLi9ub2RlX21vZHVsZXMvbXVybXVyaGFzaC1qcy9tdXJtdXJoYXNoMl9nYy5qcyIsIi4uL25vZGVfbW9kdWxlcy9tdXJtdXJoYXNoLWpzL2luZGV4LmpzIiwiLi4vc3JjL2RhdGEvZmVhdHVyZV9wb3NpdGlvbl9tYXAuanMiLCIuLi9zcmMvcmVuZGVyL3VuaWZvcm1fYmluZGluZy5qcyIsIi4uL3NyYy9kYXRhL3Byb2dyYW1fY29uZmlndXJhdGlvbi5qcyIsIi4uL3NyYy9kYXRhL2luZGV4X2FycmF5X3R5cGUuanMiLCIuLi9zcmMvZGF0YS9leHRlbnQuanMiLCIuLi9zcmMvZGF0YS9sb2FkX2dlb21ldHJ5LmpzIiwiLi4vc3JjL2RhdGEvYnVja2V0L2NpcmNsZV9idWNrZXQuanMiLCIuLi9zcmMvdXRpbC9pbnRlcnNlY3Rpb25fdGVzdHMuanMiLCIuLi9zcmMvc3R5bGUvcXVlcnlfdXRpbHMuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXIvY2lyY2xlX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMuanMiLCIuLi9ub2RlX21vZHVsZXMvZ2wtbWF0cml4L2VzbS9jb21tb24uanMiLCIuLi9ub2RlX21vZHVsZXMvZ2wtbWF0cml4L2VzbS9tYXQyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dsLW1hdHJpeC9lc20vbWF0MmQuanMiLCIuLi9ub2RlX21vZHVsZXMvZ2wtbWF0cml4L2VzbS9tYXQzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dsLW1hdHJpeC9lc20vbWF0NC5qcyIsIi4uL25vZGVfbW9kdWxlcy9nbC1tYXRyaXgvZXNtL3ZlYzMuanMiLCIuLi9ub2RlX21vZHVsZXMvZ2wtbWF0cml4L2VzbS92ZWM0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dsLW1hdHJpeC9lc20vcXVhdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9nbC1tYXRyaXgvZXNtL3F1YXQyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dsLW1hdHJpeC9lc20vdmVjMi5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllci9jaXJjbGVfc3R5bGVfbGF5ZXIuanMiLCIuLi9zcmMvZGF0YS9idWNrZXQvaGVhdG1hcF9idWNrZXQuanMiLCIuLi9zcmMvdXRpbC9pbWFnZS5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllci9oZWF0bWFwX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMuanMiLCIuLi9zcmMvdXRpbC9jb2xvcl9yYW1wLmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyL2hlYXRtYXBfc3R5bGVfbGF5ZXIuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXIvaGlsbHNoYWRlX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXIvaGlsbHNoYWRlX3N0eWxlX2xheWVyLmpzIiwiLi4vc3JjL2RhdGEvYnVja2V0L2ZpbGxfYXR0cmlidXRlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9lYXJjdXQvc3JjL2VhcmN1dC5qcyIsIi4uL25vZGVfbW9kdWxlcy9xdWlja3NlbGVjdC9pbmRleC5qcyIsIi4uL3NyYy91dGlsL2NsYXNzaWZ5X3JpbmdzLmpzIiwiLi4vc3JjL2RhdGEvYnVja2V0L3BhdHRlcm5fYnVja2V0X2ZlYXR1cmVzLmpzIiwiLi4vc3JjL2RhdGEvYnVja2V0L2ZpbGxfYnVja2V0LmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyL2ZpbGxfc3R5bGVfbGF5ZXJfcHJvcGVydGllcy5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllci9maWxsX3N0eWxlX2xheWVyLmpzIiwiLi4vc3JjL2RhdGEvYnVja2V0L2ZpbGxfZXh0cnVzaW9uX2F0dHJpYnV0ZXMuanMiLCIuLi9ub2RlX21vZHVsZXMvQG1hcGJveC92ZWN0b3ItdGlsZS9saWIvdmVjdG9ydGlsZWZlYXR1cmUuanMiLCIuLi9ub2RlX21vZHVsZXMvQG1hcGJveC92ZWN0b3ItdGlsZS9saWIvdmVjdG9ydGlsZWxheWVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BtYXBib3gvdmVjdG9yLXRpbGUvbGliL3ZlY3RvcnRpbGUuanMiLCIuLi9ub2RlX21vZHVsZXMvQG1hcGJveC92ZWN0b3ItdGlsZS9pbmRleC5qcyIsIi4uL3NyYy9kYXRhL2J1Y2tldC9maWxsX2V4dHJ1c2lvbl9idWNrZXQuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXIvZmlsbF9leHRydXNpb25fc3R5bGVfbGF5ZXJfcHJvcGVydGllcy5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllci9maWxsX2V4dHJ1c2lvbl9zdHlsZV9sYXllci5qcyIsIi4uL3NyYy9kYXRhL2J1Y2tldC9saW5lX2F0dHJpYnV0ZXMuanMiLCIuLi9zcmMvZGF0YS9idWNrZXQvbGluZV9idWNrZXQuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXIvbGluZV9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzLmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyL2xpbmVfc3R5bGVfbGF5ZXIuanMiLCIuLi9zcmMvZGF0YS9idWNrZXQvc3ltYm9sX2F0dHJpYnV0ZXMuanMiLCIuLi9zcmMvc3ltYm9sL3RyYW5zZm9ybV90ZXh0LmpzIiwiLi4vc3JjL3N5bWJvbC9tZXJnZWxpbmVzLmpzIiwiLi4vc3JjL3V0aWwvdmVydGljYWxpemVfcHVuY3R1YXRpb24uanMiLCIuLi9zcmMvc3ltYm9sL29uZV9lbS5qcyIsIi4uL25vZGVfbW9kdWxlcy9pZWVlNzU0L2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3BiZi9pbmRleC5qcyIsIi4uL3NyYy9zdHlsZS9wYXJzZV9nbHlwaF9wYmYuanMiLCIuLi9ub2RlX21vZHVsZXMvcG90cGFjay9pbmRleC5tanMiLCIuLi9zcmMvcmVuZGVyL2ltYWdlX2F0bGFzLmpzIiwiLi4vc3JjL3N5bWJvbC9zaGFwaW5nLmpzIiwiLi4vc3JjL3N5bWJvbC9hbmNob3IuanMiLCIuLi9zcmMvc3ltYm9sL3N5bWJvbF9zaXplLmpzIiwiLi4vc3JjL3N5bWJvbC9jaGVja19tYXhfYW5nbGUuanMiLCIuLi9zcmMvc3ltYm9sL2dldF9hbmNob3JzLmpzIiwiLi4vc3JjL3N5bWJvbC9jbGlwX2xpbmUuanMiLCIuLi9zcmMvc3ltYm9sL3F1YWRzLmpzIiwiLi4vc3JjL3N5bWJvbC9jb2xsaXNpb25fZmVhdHVyZS5qcyIsIi4uL25vZGVfbW9kdWxlcy90aW55cXVldWUvaW5kZXguanMiLCIuLi9zcmMvdXRpbC9maW5kX3BvbGVfb2ZfaW5hY2Nlc3NpYmlsaXR5LmpzIiwiLi4vc3JjL3N5bWJvbC9zeW1ib2xfbGF5b3V0LmpzIiwiLi4vc3JjL2RhdGEvYnVja2V0L3N5bWJvbF9idWNrZXQuanMiLCIuLi9zcmMvdXRpbC9yZXNvbHZlX3Rva2Vucy5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllci9zeW1ib2xfc3R5bGVfbGF5ZXJfcHJvcGVydGllcy5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2V4cHJlc3Npb24vZGVmaW5pdGlvbnMvZm9ybWF0X3NlY3Rpb25fb3ZlcnJpZGUuanMiLCIuLi9zcmMvc3R5bGUvc3R5bGVfbGF5ZXIvc3ltYm9sX3N0eWxlX2xheWVyLmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyL2JhY2tncm91bmRfc3R5bGVfbGF5ZXJfcHJvcGVydGllcy5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllci9iYWNrZ3JvdW5kX3N0eWxlX2xheWVyLmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyL3Jhc3Rlcl9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzLmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyL3Jhc3Rlcl9zdHlsZV9sYXllci5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZV9sYXllci9jdXN0b21fc3R5bGVfbGF5ZXIuanMiLCIuLi9zcmMvc3R5bGUvY3JlYXRlX3N0eWxlX2xheWVyLmpzIiwiLi4vc3JjL3JlbmRlci90ZXh0dXJlLmpzIiwiLi4vc3JjL3V0aWwvdGhyb3R0bGVkX2ludm9rZXIuanMiLCIuLi9zcmMvdXRpbC9hY3Rvci5qcyIsIi4uL25vZGVfbW9kdWxlcy9AbWFwYm94L3dob290cy1qcy9pbmRleC5tanMiLCIuLi9zcmMvZ2VvL2xuZ19sYXRfYm91bmRzLmpzIiwiLi4vc3JjL2dlby9sbmdfbGF0LmpzIiwiLi4vc3JjL2dlby9tZXJjYXRvcl9jb29yZGluYXRlLmpzIiwiLi4vc3JjL3NvdXJjZS90aWxlX2lkLmpzIiwiLi4vc3JjL2RhdGEvZGVtX2RhdGEuanMiLCIuLi9zcmMvZGF0YS9idWNrZXQuanMiLCIuLi9zcmMvdXRpbC9kaWN0aW9uYXJ5X2NvZGVyLmpzIiwiLi4vc3JjL3V0aWwvdmVjdG9ydGlsZV90b19nZW9qc29uLmpzIiwiLi4vc3JjL3NvdXJjZS9zb3VyY2Vfc3RhdGUuanMiLCIuLi9zcmMvZGF0YS9mZWF0dXJlX2luZGV4LmpzIiwiLi4vc3JjL3NvdXJjZS90aWxlLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvdXRpbC9yZWZfcHJvcGVydGllcy5qcyIsIi4uL3NyYy91dGlsL3BlcmZvcm1hbmNlLmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZ3JvdXBfYnlfbGF5b3V0LmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2xheWVyX2luZGV4LmpzIiwiLi4vc3JjL3JlbmRlci9nbHlwaF9hdGxhcy5qcyIsIi4uL3NyYy9zb3VyY2Uvd29ya2VyX3RpbGUuanMiLCIuLi9zcmMvc291cmNlL3ZlY3Rvcl90aWxlX3dvcmtlcl9zb3VyY2UuanMiLCIuLi9zcmMvc291cmNlL3Jhc3Rlcl9kZW1fdGlsZV93b3JrZXJfc291cmNlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BtYXBib3gvZ2VvanNvbi1yZXdpbmQvaW5kZXguanMiLCIuLi9zcmMvc291cmNlL2dlb2pzb25fd3JhcHBlci5qcyIsIi4uL25vZGVfbW9kdWxlcy92dC1wYmYvbGliL2dlb2pzb25fd3JhcHBlci5qcyIsIi4uL25vZGVfbW9kdWxlcy92dC1wYmYvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMva2RidXNoL3NyYy9zb3J0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2tkYnVzaC9zcmMvcmFuZ2UuanMiLCIuLi9ub2RlX21vZHVsZXMva2RidXNoL3NyYy93aXRoaW4uanMiLCIuLi9ub2RlX21vZHVsZXMva2RidXNoL3NyYy9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9zdXBlcmNsdXN0ZXIvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvZ2VvanNvbi12dC9zcmMvc2ltcGxpZnkuanMiLCIuLi9ub2RlX21vZHVsZXMvZ2VvanNvbi12dC9zcmMvZmVhdHVyZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9nZW9qc29uLXZ0L3NyYy9jb252ZXJ0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2dlb2pzb24tdnQvc3JjL2NsaXAuanMiLCIuLi9ub2RlX21vZHVsZXMvZ2VvanNvbi12dC9zcmMvd3JhcC5qcyIsIi4uL25vZGVfbW9kdWxlcy9nZW9qc29uLXZ0L3NyYy90cmFuc2Zvcm0uanMiLCIuLi9ub2RlX21vZHVsZXMvZ2VvanNvbi12dC9zcmMvdGlsZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9nZW9qc29uLXZ0L3NyYy9pbmRleC5qcyIsIi4uL3NyYy9zb3VyY2UvZ2VvanNvbl93b3JrZXJfc291cmNlLmpzIiwiLi4vc3JjL3NvdXJjZS93b3JrZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvQG1hcGJveC9tYXBib3gtZ2wtc3VwcG9ydGVkL2luZGV4LmpzIiwiLi4vc3JjL3V0aWwvZG9tLmpzIiwiLi4vc3JjL3N0eWxlL2xvYWRfc3ByaXRlLmpzIiwiLi4vc3JjL3N0eWxlL3N0eWxlX2ltYWdlLmpzIiwiLi4vc3JjL3JlbmRlci9pbWFnZV9tYW5hZ2VyLmpzIiwiLi4vc3JjL3N0eWxlL2xvYWRfZ2x5cGhfcmFuZ2UuanMiLCIuLi9ub2RlX21vZHVsZXMvQG1hcGJveC90aW55LXNkZi9pbmRleC5qcyIsIi4uL3NyYy9yZW5kZXIvZ2x5cGhfbWFuYWdlci5qcyIsIi4uL3NyYy9zdHlsZS9saWdodC5qcyIsIi4uL3NyYy9yZW5kZXIvbGluZV9hdGxhcy5qcyIsIi4uL3NyYy91dGlsL2Rpc3BhdGNoZXIuanMiLCIuLi9zcmMvc291cmNlL2xvYWRfdGlsZWpzb24uanMiLCIuLi9zcmMvc291cmNlL3RpbGVfYm91bmRzLmpzIiwiLi4vc3JjL3NvdXJjZS92ZWN0b3JfdGlsZV9zb3VyY2UuanMiLCIuLi9zcmMvc291cmNlL3Jhc3Rlcl90aWxlX3NvdXJjZS5qcyIsIi4uL3NyYy9zb3VyY2UvcmFzdGVyX2RlbV90aWxlX3NvdXJjZS5qcyIsIi4uL3NyYy9zb3VyY2UvZ2VvanNvbl9zb3VyY2UuanMiLCIuLi9zcmMvZGF0YS9yYXN0ZXJfYm91bmRzX2F0dHJpYnV0ZXMuanMiLCIuLi9zcmMvc291cmNlL2ltYWdlX3NvdXJjZS5qcyIsIi4uL3NyYy9zb3VyY2UvdmlkZW9fc291cmNlLmpzIiwiLi4vc3JjL3NvdXJjZS9jYW52YXNfc291cmNlLmpzIiwiLi4vc3JjL3NvdXJjZS9zb3VyY2UuanMiLCIuLi9zcmMvc291cmNlL3F1ZXJ5X2ZlYXR1cmVzLmpzIiwiLi4vc3JjL3NvdXJjZS90aWxlX2NhY2hlLmpzIiwiLi4vc3JjL2dsL2luZGV4X2J1ZmZlci5qcyIsIi4uL3NyYy9nbC92ZXJ0ZXhfYnVmZmVyLmpzIiwiLi4vc3JjL2dsL3ZhbHVlLmpzIiwiLi4vc3JjL2dsL2ZyYW1lYnVmZmVyLmpzIiwiLi4vc3JjL2dsL2RlcHRoX21vZGUuanMiLCIuLi9zcmMvZ2wvc3RlbmNpbF9tb2RlLmpzIiwiLi4vc3JjL2dsL2NvbG9yX21vZGUuanMiLCIuLi9zcmMvZ2wvY3VsbF9mYWNlX21vZGUuanMiLCIuLi9zcmMvZ2wvY29udGV4dC5qcyIsIi4uL3NyYy9zb3VyY2Uvc291cmNlX2NhY2hlLmpzIiwiLi4vc3JjL3V0aWwvYnJvd3Nlci93ZWJfd29ya2VyLmpzIiwiLi4vc3JjL3V0aWwvd29ya2VyX3Bvb2wuanMiLCIuLi9zcmMvdXRpbC9nbG9iYWxfd29ya2VyX3Bvb2wuanMiLCIuLi9zcmMvc3R5bGUtc3BlYy9kZXJlZi5qcyIsIi4uL3NyYy9zdHlsZS1zcGVjL2VtcHR5LmpzIiwiLi4vc3JjL3N0eWxlLXNwZWMvZGlmZi5qcyIsIi4uL3NyYy9zeW1ib2wvcGF0aF9pbnRlcnBvbGF0b3IuanMiLCIuLi9zcmMvc3ltYm9sL2dyaWRfaW5kZXguanMiLCIuLi9zcmMvc3ltYm9sL3Byb2plY3Rpb24uanMiLCIuLi9zcmMvc3ltYm9sL2NvbGxpc2lvbl9pbmRleC5qcyIsIi4uL3NyYy9zb3VyY2UvcGl4ZWxzX3RvX3RpbGVfdW5pdHMuanMiLCIuLi9zcmMvc3ltYm9sL3BsYWNlbWVudC5qcyIsIi4uL3NyYy9zdHlsZS9wYXVzZWFibGVfcGxhY2VtZW50LmpzIiwiLi4vc3JjL3N5bWJvbC9jcm9zc190aWxlX3N5bWJvbF9pbmRleC5qcyIsIi4uL3NyYy9zdHlsZS9zdHlsZS5qcyIsIi4uL3NyYy9kYXRhL3Bvc19hdHRyaWJ1dGVzLmpzIiwiLi4vc3JjL3NoYWRlcnMvc2hhZGVycy5qcyIsIi4uL3NyYy9yZW5kZXIvdmVydGV4X2FycmF5X29iamVjdC5qcyIsIi4uL3NyYy9yZW5kZXIvcHJvZ3JhbS5qcyIsIi4uL3NyYy9yZW5kZXIvcHJvZ3JhbS9wYXR0ZXJuLmpzIiwiLi4vc3JjL3JlbmRlci9wcm9ncmFtL2ZpbGxfZXh0cnVzaW9uX3Byb2dyYW0uanMiLCIuLi9zcmMvcmVuZGVyL3Byb2dyYW0vZmlsbF9wcm9ncmFtLmpzIiwiLi4vc3JjL3JlbmRlci9wcm9ncmFtL2NpcmNsZV9wcm9ncmFtLmpzIiwiLi4vc3JjL3JlbmRlci9wcm9ncmFtL2NvbGxpc2lvbl9wcm9ncmFtLmpzIiwiLi4vc3JjL3JlbmRlci9wcm9ncmFtL2RlYnVnX3Byb2dyYW0uanMiLCIuLi9zcmMvcmVuZGVyL3Byb2dyYW0vY2xpcHBpbmdfbWFza19wcm9ncmFtLmpzIiwiLi4vc3JjL3JlbmRlci9wcm9ncmFtL2hlYXRtYXBfcHJvZ3JhbS5qcyIsIi4uL3NyYy9yZW5kZXIvcHJvZ3JhbS9oaWxsc2hhZGVfcHJvZ3JhbS5qcyIsIi4uL3NyYy9yZW5kZXIvcHJvZ3JhbS9saW5lX3Byb2dyYW0uanMiLCIuLi9zcmMvcmVuZGVyL3Byb2dyYW0vcmFzdGVyX3Byb2dyYW0uanMiLCIuLi9zcmMvcmVuZGVyL3Byb2dyYW0vc3ltYm9sX3Byb2dyYW0uanMiLCIuLi9zcmMvcmVuZGVyL3Byb2dyYW0vYmFja2dyb3VuZF9wcm9ncmFtLmpzIiwiLi4vc3JjL3JlbmRlci9wcm9ncmFtL3Byb2dyYW1fdW5pZm9ybXMuanMiLCIuLi9zcmMvcmVuZGVyL2RyYXdfY29sbGlzaW9uX2RlYnVnLmpzIiwiLi4vc3JjL3JlbmRlci9kcmF3X3N5bWJvbC5qcyIsIi4uL3NyYy9yZW5kZXIvZHJhd19jaXJjbGUuanMiLCIuLi9zcmMvcmVuZGVyL2RyYXdfaGVhdG1hcC5qcyIsIi4uL3NyYy9yZW5kZXIvZHJhd19saW5lLmpzIiwiLi4vc3JjL3JlbmRlci9kcmF3X2ZpbGwuanMiLCIuLi9zcmMvcmVuZGVyL2RyYXdfZmlsbF9leHRydXNpb24uanMiLCIuLi9zcmMvcmVuZGVyL2RyYXdfaGlsbHNoYWRlLmpzIiwiLi4vc3JjL3JlbmRlci9kcmF3X3Jhc3Rlci5qcyIsIi4uL3NyYy9yZW5kZXIvZHJhd19iYWNrZ3JvdW5kLmpzIiwiLi4vc3JjL3JlbmRlci9kcmF3X2RlYnVnLmpzIiwiLi4vc3JjL3JlbmRlci9kcmF3X2N1c3RvbS5qcyIsIi4uL3NyYy9yZW5kZXIvcGFpbnRlci5qcyIsIi4uL3NyYy91dGlsL3ByaW1pdGl2ZXMuanMiLCIuLi9zcmMvZ2VvL2VkZ2VfaW5zZXRzLmpzIiwiLi4vc3JjL2dlby90cmFuc2Zvcm0uanMiLCIuLi9zcmMvdXRpbC90aHJvdHRsZS5qcyIsIi4uL3NyYy91aS9oYXNoLmpzIiwiLi4vc3JjL3VpL2hhbmRsZXJfaW5lcnRpYS5qcyIsIi4uL3NyYy91aS9ldmVudHMuanMiLCIuLi9zcmMvdWkvaGFuZGxlci9tYXBfZXZlbnQuanMiLCIuLi9zcmMvdWkvaGFuZGxlci9ib3hfem9vbS5qcyIsIi4uL3NyYy91aS9oYW5kbGVyL2hhbmRsZXJfdXRpbC5qcyIsIi4uL3NyYy91aS9oYW5kbGVyL3RhcF9yZWNvZ25pemVyLmpzIiwiLi4vc3JjL3VpL2hhbmRsZXIvdGFwX3pvb20uanMiLCIuLi9zcmMvdWkvaGFuZGxlci9tb3VzZS5qcyIsIi4uL3NyYy91aS9oYW5kbGVyL3RvdWNoX3Bhbi5qcyIsIi4uL3NyYy91aS9oYW5kbGVyL3RvdWNoX3pvb21fcm90YXRlLmpzIiwiLi4vc3JjL3VpL2hhbmRsZXIva2V5Ym9hcmQuanMiLCIuLi9zcmMvdWkvaGFuZGxlci9zY3JvbGxfem9vbS5qcyIsIi4uL3NyYy91aS9oYW5kbGVyL3NoaW0vZGJsY2xpY2tfem9vbS5qcyIsIi4uL3NyYy91aS9oYW5kbGVyL2NsaWNrX3pvb20uanMiLCIuLi9zcmMvdWkvaGFuZGxlci90YXBfZHJhZ196b29tLmpzIiwiLi4vc3JjL3VpL2hhbmRsZXIvc2hpbS9kcmFnX3Bhbi5qcyIsIi4uL3NyYy91aS9oYW5kbGVyL3NoaW0vZHJhZ19yb3RhdGUuanMiLCIuLi9zcmMvdWkvaGFuZGxlci9zaGltL3RvdWNoX3pvb21fcm90YXRlLmpzIiwiLi4vc3JjL3VpL2hhbmRsZXJfbWFuYWdlci5qcyIsIi4uL3NyYy91dGlsL2RlYnVnLmpzIiwiLi4vc3JjL3VpL2NhbWVyYS5qcyIsIi4uL3NyYy91aS9jb250cm9sL2F0dHJpYnV0aW9uX2NvbnRyb2wuanMiLCIuLi9zcmMvdWkvY29udHJvbC9sb2dvX2NvbnRyb2wuanMiLCIuLi9zcmMvdXRpbC90YXNrX3F1ZXVlLmpzIiwiLi4vc3JjL3VpL2RlZmF1bHRfbG9jYWxlLmpzIiwiLi4vc3JjL3VpL21hcC5qcyIsIi4uL3NyYy91aS9jb250cm9sL25hdmlnYXRpb25fY29udHJvbC5qcyIsIi4uL3NyYy91dGlsL3NtYXJ0X3dyYXAuanMiLCIuLi9zcmMvdWkvYW5jaG9yLmpzIiwiLi4vc3JjL3VpL21hcmtlci5qcyIsIi4uL3NyYy91aS9jb250cm9sL2dlb2xvY2F0ZV9jb250cm9sLmpzIiwiLi4vc3JjL3VpL2NvbnRyb2wvc2NhbGVfY29udHJvbC5qcyIsIi4uL3NyYy91aS9jb250cm9sL2Z1bGxzY3JlZW5fY29udHJvbC5qcyIsIi4uL3NyYy91aS9wb3B1cC5qcyIsIi4uL3NyYy9pbmRleC5qcyIsIi4uL3JvbGx1cC9tYXBib3hnbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxub2JqZWN0LWFzc2lnblxuKGMpIFNpbmRyZSBTb3JodXNcbkBsaWNlbnNlIE1JVFxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBwcm9wSXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuZnVuY3Rpb24gdG9PYmplY3QodmFsKSB7XG5cdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdCh2YWwpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRVc2VOYXRpdmUoKSB7XG5cdHRyeSB7XG5cdFx0aWYgKCFPYmplY3QuYXNzaWduKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9NDExOFxuXHRcdHZhciB0ZXN0MSA9IG5ldyBTdHJpbmcoJ2FiYycpOyAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXctd3JhcHBlcnNcblx0XHR0ZXN0MVs1XSA9ICdkZSc7XG5cdFx0aWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QxKVswXSA9PT0gJzUnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MiA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xuXHRcdFx0dGVzdDJbJ18nICsgU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSBpO1xuXHRcdH1cblx0XHR2YXIgb3JkZXIyID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDIpLm1hcChmdW5jdGlvbiAobikge1xuXHRcdFx0cmV0dXJuIHRlc3QyW25dO1xuXHRcdH0pO1xuXHRcdGlmIChvcmRlcjIuam9pbignJykgIT09ICcwMTIzNDU2Nzg5Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDMgPSB7fTtcblx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChsZXR0ZXIpIHtcblx0XHRcdHRlc3QzW2xldHRlcl0gPSBsZXR0ZXI7XG5cdFx0fSk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIHRlc3QzKSkuam9pbignJykgIT09XG5cdFx0XHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0Ly8gV2UgZG9uJ3QgZXhwZWN0IGFueSBvZiB0aGUgYWJvdmUgdG8gdGhyb3csIGJ1dCBiZXR0ZXIgdG8gYmUgc2FmZS5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG91bGRVc2VOYXRpdmUoKSA/IE9iamVjdC5hc3NpZ24gOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGZyb20pO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChwcm9wSXNFbnVtZXJhYmxlLmNhbGwoZnJvbSwgc3ltYm9sc1tpXSkpIHtcblx0XHRcdFx0XHR0b1tzeW1ib2xzW2ldXSA9IGZyb21bc3ltYm9sc1tpXV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdG87XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0J1ZmZlcihhcmcpIHtcbiAgcmV0dXJuIGFyZyAmJiB0eXBlb2YgYXJnID09PSAnb2JqZWN0J1xuICAgICYmIHR5cGVvZiBhcmcuY29weSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICYmIHR5cGVvZiBhcmcuZmlsbCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICYmIHR5cGVvZiBhcmcucmVhZFVJbnQ4ID09PSAnZnVuY3Rpb24nO1xufSIsImlmICh0eXBlb2YgT2JqZWN0LmNyZWF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAvLyBpbXBsZW1lbnRhdGlvbiBmcm9tIHN0YW5kYXJkIG5vZGUuanMgJ3V0aWwnIG1vZHVsZVxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgY3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ3Rvci5wcm90b3R5cGUsIHtcbiAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgIHZhbHVlOiBjdG9yLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xufSBlbHNlIHtcbiAgLy8gb2xkIHNjaG9vbCBzaGltIGZvciBvbGQgYnJvd3NlcnNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvclxuICAgIHZhciBUZW1wQ3RvciA9IGZ1bmN0aW9uICgpIHt9XG4gICAgVGVtcEN0b3IucHJvdG90eXBlID0gc3VwZXJDdG9yLnByb3RvdHlwZVxuICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKClcbiAgICBjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JcbiAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciBmb3JtYXRSZWdFeHAgPSAvJVtzZGolXS9nO1xuZXhwb3J0cy5mb3JtYXQgPSBmdW5jdGlvbihmKSB7XG4gIGlmICghaXNTdHJpbmcoZikpIHtcbiAgICB2YXIgb2JqZWN0cyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBvYmplY3RzLnB1c2goaW5zcGVjdChhcmd1bWVudHNbaV0pKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdHMuam9pbignICcpO1xuICB9XG5cbiAgdmFyIGkgPSAxO1xuICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgdmFyIGxlbiA9IGFyZ3MubGVuZ3RoO1xuICB2YXIgc3RyID0gU3RyaW5nKGYpLnJlcGxhY2UoZm9ybWF0UmVnRXhwLCBmdW5jdGlvbih4KSB7XG4gICAgaWYgKHggPT09ICclJScpIHJldHVybiAnJSc7XG4gICAgaWYgKGkgPj0gbGVuKSByZXR1cm4geDtcbiAgICBzd2l0Y2ggKHgpIHtcbiAgICAgIGNhc2UgJyVzJzogcmV0dXJuIFN0cmluZyhhcmdzW2krK10pO1xuICAgICAgY2FzZSAnJWQnOiByZXR1cm4gTnVtYmVyKGFyZ3NbaSsrXSk7XG4gICAgICBjYXNlICclaic6XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGFyZ3NbaSsrXSk7XG4gICAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgICByZXR1cm4gJ1tDaXJjdWxhcl0nO1xuICAgICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4geDtcbiAgICB9XG4gIH0pO1xuICBmb3IgKHZhciB4ID0gYXJnc1tpXTsgaSA8IGxlbjsgeCA9IGFyZ3NbKytpXSkge1xuICAgIGlmIChpc051bGwoeCkgfHwgIWlzT2JqZWN0KHgpKSB7XG4gICAgICBzdHIgKz0gJyAnICsgeDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyICs9ICcgJyArIGluc3BlY3QoeCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzdHI7XG59O1xuXG5cbi8vIE1hcmsgdGhhdCBhIG1ldGhvZCBzaG91bGQgbm90IGJlIHVzZWQuXG4vLyBSZXR1cm5zIGEgbW9kaWZpZWQgZnVuY3Rpb24gd2hpY2ggd2FybnMgb25jZSBieSBkZWZhdWx0LlxuLy8gSWYgLS1uby1kZXByZWNhdGlvbiBpcyBzZXQsIHRoZW4gaXQgaXMgYSBuby1vcC5cbmV4cG9ydHMuZGVwcmVjYXRlID0gZnVuY3Rpb24oZm4sIG1zZykge1xuICAvLyBBbGxvdyBmb3IgZGVwcmVjYXRpbmcgdGhpbmdzIGluIHRoZSBwcm9jZXNzIG9mIHN0YXJ0aW5nIHVwLlxuICBpZiAoaXNVbmRlZmluZWQoZ2xvYmFsLnByb2Nlc3MpKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGV4cG9ydHMuZGVwcmVjYXRlKGZuLCBtc2cpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLm5vRGVwcmVjYXRpb24gPT09IHRydWUpIHtcbiAgICByZXR1cm4gZm47XG4gIH1cblxuICB2YXIgd2FybmVkID0gZmFsc2U7XG4gIGZ1bmN0aW9uIGRlcHJlY2F0ZWQoKSB7XG4gICAgaWYgKCF3YXJuZWQpIHtcbiAgICAgIGlmIChwcm9jZXNzLnRocm93RGVwcmVjYXRpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICB9IGVsc2UgaWYgKHByb2Nlc3MudHJhY2VEZXByZWNhdGlvbikge1xuICAgICAgICBjb25zb2xlLnRyYWNlKG1zZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKG1zZyk7XG4gICAgICB9XG4gICAgICB3YXJuZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxuXG4gIHJldHVybiBkZXByZWNhdGVkO1xufTtcblxuXG52YXIgZGVidWdzID0ge307XG52YXIgZGVidWdFbnZpcm9uO1xuZXhwb3J0cy5kZWJ1Z2xvZyA9IGZ1bmN0aW9uKHNldCkge1xuICBpZiAoaXNVbmRlZmluZWQoZGVidWdFbnZpcm9uKSlcbiAgICBkZWJ1Z0Vudmlyb24gPSBwcm9jZXNzLmVudi5OT0RFX0RFQlVHIHx8ICcnO1xuICBzZXQgPSBzZXQudG9VcHBlckNhc2UoKTtcbiAgaWYgKCFkZWJ1Z3Nbc2V0XSkge1xuICAgIGlmIChuZXcgUmVnRXhwKCdcXFxcYicgKyBzZXQgKyAnXFxcXGInLCAnaScpLnRlc3QoZGVidWdFbnZpcm9uKSkge1xuICAgICAgdmFyIHBpZCA9IHByb2Nlc3MucGlkO1xuICAgICAgZGVidWdzW3NldF0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIG1zZyA9IGV4cG9ydHMuZm9ybWF0LmFwcGx5KGV4cG9ydHMsIGFyZ3VtZW50cyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJyVzICVkOiAlcycsIHNldCwgcGlkLCBtc2cpO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVidWdzW3NldF0gPSBmdW5jdGlvbigpIHt9O1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGVidWdzW3NldF07XG59O1xuXG5cbi8qKlxuICogRWNob3MgdGhlIHZhbHVlIG9mIGEgdmFsdWUuIFRyeXMgdG8gcHJpbnQgdGhlIHZhbHVlIG91dFxuICogaW4gdGhlIGJlc3Qgd2F5IHBvc3NpYmxlIGdpdmVuIHRoZSBkaWZmZXJlbnQgdHlwZXMuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIHByaW50IG91dC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbmFsIG9wdGlvbnMgb2JqZWN0IHRoYXQgYWx0ZXJzIHRoZSBvdXRwdXQuXG4gKi9cbi8qIGxlZ2FjeTogb2JqLCBzaG93SGlkZGVuLCBkZXB0aCwgY29sb3JzKi9cbmZ1bmN0aW9uIGluc3BlY3Qob2JqLCBvcHRzKSB7XG4gIC8vIGRlZmF1bHQgb3B0aW9uc1xuICB2YXIgY3R4ID0ge1xuICAgIHNlZW46IFtdLFxuICAgIHN0eWxpemU6IHN0eWxpemVOb0NvbG9yXG4gIH07XG4gIC8vIGxlZ2FjeS4uLlxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAzKSBjdHguZGVwdGggPSBhcmd1bWVudHNbMl07XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDQpIGN0eC5jb2xvcnMgPSBhcmd1bWVudHNbM107XG4gIGlmIChpc0Jvb2xlYW4ob3B0cykpIHtcbiAgICAvLyBsZWdhY3kuLi5cbiAgICBjdHguc2hvd0hpZGRlbiA9IG9wdHM7XG4gIH0gZWxzZSBpZiAob3B0cykge1xuICAgIC8vIGdvdCBhbiBcIm9wdGlvbnNcIiBvYmplY3RcbiAgICBleHBvcnRzLl9leHRlbmQoY3R4LCBvcHRzKTtcbiAgfVxuICAvLyBzZXQgZGVmYXVsdCBvcHRpb25zXG4gIGlmIChpc1VuZGVmaW5lZChjdHguc2hvd0hpZGRlbikpIGN0eC5zaG93SGlkZGVuID0gZmFsc2U7XG4gIGlmIChpc1VuZGVmaW5lZChjdHguZGVwdGgpKSBjdHguZGVwdGggPSAyO1xuICBpZiAoaXNVbmRlZmluZWQoY3R4LmNvbG9ycykpIGN0eC5jb2xvcnMgPSBmYWxzZTtcbiAgaWYgKGlzVW5kZWZpbmVkKGN0eC5jdXN0b21JbnNwZWN0KSkgY3R4LmN1c3RvbUluc3BlY3QgPSB0cnVlO1xuICBpZiAoY3R4LmNvbG9ycykgY3R4LnN0eWxpemUgPSBzdHlsaXplV2l0aENvbG9yO1xuICByZXR1cm4gZm9ybWF0VmFsdWUoY3R4LCBvYmosIGN0eC5kZXB0aCk7XG59XG5leHBvcnRzLmluc3BlY3QgPSBpbnNwZWN0O1xuXG5cbi8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQU5TSV9lc2NhcGVfY29kZSNncmFwaGljc1xuaW5zcGVjdC5jb2xvcnMgPSB7XG4gICdib2xkJyA6IFsxLCAyMl0sXG4gICdpdGFsaWMnIDogWzMsIDIzXSxcbiAgJ3VuZGVybGluZScgOiBbNCwgMjRdLFxuICAnaW52ZXJzZScgOiBbNywgMjddLFxuICAnd2hpdGUnIDogWzM3LCAzOV0sXG4gICdncmV5JyA6IFs5MCwgMzldLFxuICAnYmxhY2snIDogWzMwLCAzOV0sXG4gICdibHVlJyA6IFszNCwgMzldLFxuICAnY3lhbicgOiBbMzYsIDM5XSxcbiAgJ2dyZWVuJyA6IFszMiwgMzldLFxuICAnbWFnZW50YScgOiBbMzUsIDM5XSxcbiAgJ3JlZCcgOiBbMzEsIDM5XSxcbiAgJ3llbGxvdycgOiBbMzMsIDM5XVxufTtcblxuLy8gRG9uJ3QgdXNlICdibHVlJyBub3QgdmlzaWJsZSBvbiBjbWQuZXhlXG5pbnNwZWN0LnN0eWxlcyA9IHtcbiAgJ3NwZWNpYWwnOiAnY3lhbicsXG4gICdudW1iZXInOiAneWVsbG93JyxcbiAgJ2Jvb2xlYW4nOiAneWVsbG93JyxcbiAgJ3VuZGVmaW5lZCc6ICdncmV5JyxcbiAgJ251bGwnOiAnYm9sZCcsXG4gICdzdHJpbmcnOiAnZ3JlZW4nLFxuICAnZGF0ZSc6ICdtYWdlbnRhJyxcbiAgLy8gXCJuYW1lXCI6IGludGVudGlvbmFsbHkgbm90IHN0eWxpbmdcbiAgJ3JlZ2V4cCc6ICdyZWQnXG59O1xuXG5cbmZ1bmN0aW9uIHN0eWxpemVXaXRoQ29sb3Ioc3RyLCBzdHlsZVR5cGUpIHtcbiAgdmFyIHN0eWxlID0gaW5zcGVjdC5zdHlsZXNbc3R5bGVUeXBlXTtcblxuICBpZiAoc3R5bGUpIHtcbiAgICByZXR1cm4gJ1xcdTAwMWJbJyArIGluc3BlY3QuY29sb3JzW3N0eWxlXVswXSArICdtJyArIHN0ciArXG4gICAgICAgICAgICdcXHUwMDFiWycgKyBpbnNwZWN0LmNvbG9yc1tzdHlsZV1bMV0gKyAnbSc7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIHN0eWxpemVOb0NvbG9yKHN0ciwgc3R5bGVUeXBlKSB7XG4gIHJldHVybiBzdHI7XG59XG5cblxuZnVuY3Rpb24gYXJyYXlUb0hhc2goYXJyYXkpIHtcbiAgdmFyIGhhc2ggPSB7fTtcblxuICBhcnJheS5mb3JFYWNoKGZ1bmN0aW9uKHZhbCwgaWR4KSB7XG4gICAgaGFzaFt2YWxdID0gdHJ1ZTtcbiAgfSk7XG5cbiAgcmV0dXJuIGhhc2g7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0VmFsdWUoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzKSB7XG4gIC8vIFByb3ZpZGUgYSBob29rIGZvciB1c2VyLXNwZWNpZmllZCBpbnNwZWN0IGZ1bmN0aW9ucy5cbiAgLy8gQ2hlY2sgdGhhdCB2YWx1ZSBpcyBhbiBvYmplY3Qgd2l0aCBhbiBpbnNwZWN0IGZ1bmN0aW9uIG9uIGl0XG4gIGlmIChjdHguY3VzdG9tSW5zcGVjdCAmJlxuICAgICAgdmFsdWUgJiZcbiAgICAgIGlzRnVuY3Rpb24odmFsdWUuaW5zcGVjdCkgJiZcbiAgICAgIC8vIEZpbHRlciBvdXQgdGhlIHV0aWwgbW9kdWxlLCBpdCdzIGluc3BlY3QgZnVuY3Rpb24gaXMgc3BlY2lhbFxuICAgICAgdmFsdWUuaW5zcGVjdCAhPT0gZXhwb3J0cy5pbnNwZWN0ICYmXG4gICAgICAvLyBBbHNvIGZpbHRlciBvdXQgYW55IHByb3RvdHlwZSBvYmplY3RzIHVzaW5nIHRoZSBjaXJjdWxhciBjaGVjay5cbiAgICAgICEodmFsdWUuY29uc3RydWN0b3IgJiYgdmFsdWUuY29uc3RydWN0b3IucHJvdG90eXBlID09PSB2YWx1ZSkpIHtcbiAgICB2YXIgcmV0ID0gdmFsdWUuaW5zcGVjdChyZWN1cnNlVGltZXMsIGN0eCk7XG4gICAgaWYgKCFpc1N0cmluZyhyZXQpKSB7XG4gICAgICByZXQgPSBmb3JtYXRWYWx1ZShjdHgsIHJldCwgcmVjdXJzZVRpbWVzKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIC8vIFByaW1pdGl2ZSB0eXBlcyBjYW5ub3QgaGF2ZSBwcm9wZXJ0aWVzXG4gIHZhciBwcmltaXRpdmUgPSBmb3JtYXRQcmltaXRpdmUoY3R4LCB2YWx1ZSk7XG4gIGlmIChwcmltaXRpdmUpIHtcbiAgICByZXR1cm4gcHJpbWl0aXZlO1xuICB9XG5cbiAgLy8gTG9vayB1cCB0aGUga2V5cyBvZiB0aGUgb2JqZWN0LlxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKTtcbiAgdmFyIHZpc2libGVLZXlzID0gYXJyYXlUb0hhc2goa2V5cyk7XG5cbiAgaWYgKGN0eC5zaG93SGlkZGVuKSB7XG4gICAga2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHZhbHVlKTtcbiAgfVxuXG4gIC8vIElFIGRvZXNuJ3QgbWFrZSBlcnJvciBmaWVsZHMgbm9uLWVudW1lcmFibGVcbiAgLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL2R3dzUyc2J0KHY9dnMuOTQpLmFzcHhcbiAgaWYgKGlzRXJyb3IodmFsdWUpXG4gICAgICAmJiAoa2V5cy5pbmRleE9mKCdtZXNzYWdlJykgPj0gMCB8fCBrZXlzLmluZGV4T2YoJ2Rlc2NyaXB0aW9uJykgPj0gMCkpIHtcbiAgICByZXR1cm4gZm9ybWF0RXJyb3IodmFsdWUpO1xuICB9XG5cbiAgLy8gU29tZSB0eXBlIG9mIG9iamVjdCB3aXRob3V0IHByb3BlcnRpZXMgY2FuIGJlIHNob3J0Y3V0dGVkLlxuICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgIHZhciBuYW1lID0gdmFsdWUubmFtZSA/ICc6ICcgKyB2YWx1ZS5uYW1lIDogJyc7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoJ1tGdW5jdGlvbicgKyBuYW1lICsgJ10nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgICBpZiAoaXNSZWdFeHAodmFsdWUpKSB7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSwgJ3JlZ2V4cCcpO1xuICAgIH1cbiAgICBpZiAoaXNEYXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLCAnZGF0ZScpO1xuICAgIH1cbiAgICBpZiAoaXNFcnJvcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBmb3JtYXRFcnJvcih2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGJhc2UgPSAnJywgYXJyYXkgPSBmYWxzZSwgYnJhY2VzID0gWyd7JywgJ30nXTtcblxuICAvLyBNYWtlIEFycmF5IHNheSB0aGF0IHRoZXkgYXJlIEFycmF5XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIGFycmF5ID0gdHJ1ZTtcbiAgICBicmFjZXMgPSBbJ1snLCAnXSddO1xuICB9XG5cbiAgLy8gTWFrZSBmdW5jdGlvbnMgc2F5IHRoYXQgdGhleSBhcmUgZnVuY3Rpb25zXG4gIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgIHZhciBuID0gdmFsdWUubmFtZSA/ICc6ICcgKyB2YWx1ZS5uYW1lIDogJyc7XG4gICAgYmFzZSA9ICcgW0Z1bmN0aW9uJyArIG4gKyAnXSc7XG4gIH1cblxuICAvLyBNYWtlIFJlZ0V4cHMgc2F5IHRoYXQgdGhleSBhcmUgUmVnRXhwc1xuICBpZiAoaXNSZWdFeHAodmFsdWUpKSB7XG4gICAgYmFzZSA9ICcgJyArIFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIH1cblxuICAvLyBNYWtlIGRhdGVzIHdpdGggcHJvcGVydGllcyBmaXJzdCBzYXkgdGhlIGRhdGVcbiAgaWYgKGlzRGF0ZSh2YWx1ZSkpIHtcbiAgICBiYXNlID0gJyAnICsgRGF0ZS5wcm90b3R5cGUudG9VVENTdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIH1cblxuICAvLyBNYWtlIGVycm9yIHdpdGggbWVzc2FnZSBmaXJzdCBzYXkgdGhlIGVycm9yXG4gIGlmIChpc0Vycm9yKHZhbHVlKSkge1xuICAgIGJhc2UgPSAnICcgKyBmb3JtYXRFcnJvcih2YWx1ZSk7XG4gIH1cblxuICBpZiAoa2V5cy5sZW5ndGggPT09IDAgJiYgKCFhcnJheSB8fCB2YWx1ZS5sZW5ndGggPT0gMCkpIHtcbiAgICByZXR1cm4gYnJhY2VzWzBdICsgYmFzZSArIGJyYWNlc1sxXTtcbiAgfVxuXG4gIGlmIChyZWN1cnNlVGltZXMgPCAwKSB7XG4gICAgaWYgKGlzUmVnRXhwKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSksICdyZWdleHAnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKCdbT2JqZWN0XScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9XG5cbiAgY3R4LnNlZW4ucHVzaCh2YWx1ZSk7XG5cbiAgdmFyIG91dHB1dDtcbiAgaWYgKGFycmF5KSB7XG4gICAgb3V0cHV0ID0gZm9ybWF0QXJyYXkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5cyk7XG4gIH0gZWxzZSB7XG4gICAgb3V0cHV0ID0ga2V5cy5tYXAoZnVuY3Rpb24oa2V5KSB7XG4gICAgICByZXR1cm4gZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5LCBhcnJheSk7XG4gICAgfSk7XG4gIH1cblxuICBjdHguc2Vlbi5wb3AoKTtcblxuICByZXR1cm4gcmVkdWNlVG9TaW5nbGVTdHJpbmcob3V0cHV0LCBiYXNlLCBicmFjZXMpO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdFByaW1pdGl2ZShjdHgsIHZhbHVlKSB7XG4gIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpXG4gICAgcmV0dXJuIGN0eC5zdHlsaXplKCd1bmRlZmluZWQnLCAndW5kZWZpbmVkJyk7XG4gIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICB2YXIgc2ltcGxlID0gJ1xcJycgKyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkucmVwbGFjZSgvXlwifFwiJC9nLCAnJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcXCIvZywgJ1wiJykgKyAnXFwnJztcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoc2ltcGxlLCAnc3RyaW5nJyk7XG4gIH1cbiAgaWYgKGlzTnVtYmVyKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJycgKyB2YWx1ZSwgJ251bWJlcicpO1xuICBpZiAoaXNCb29sZWFuKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJycgKyB2YWx1ZSwgJ2Jvb2xlYW4nKTtcbiAgLy8gRm9yIHNvbWUgcmVhc29uIHR5cGVvZiBudWxsIGlzIFwib2JqZWN0XCIsIHNvIHNwZWNpYWwgY2FzZSBoZXJlLlxuICBpZiAoaXNOdWxsKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJ251bGwnLCAnbnVsbCcpO1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdEVycm9yKHZhbHVlKSB7XG4gIHJldHVybiAnWycgKyBFcnJvci5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgKyAnXSc7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0QXJyYXkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5cykge1xuICB2YXIgb3V0cHV0ID0gW107XG4gIGZvciAodmFyIGkgPSAwLCBsID0gdmFsdWUubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5KHZhbHVlLCBTdHJpbmcoaSkpKSB7XG4gICAgICBvdXRwdXQucHVzaChmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLFxuICAgICAgICAgIFN0cmluZyhpKSwgdHJ1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXRwdXQucHVzaCgnJyk7XG4gICAgfVxuICB9XG4gIGtleXMuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICBpZiAoIWtleS5tYXRjaCgvXlxcZCskLykpIHtcbiAgICAgIG91dHB1dC5wdXNoKGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsXG4gICAgICAgICAga2V5LCB0cnVlKSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXksIGFycmF5KSB7XG4gIHZhciBuYW1lLCBzdHIsIGRlc2M7XG4gIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHZhbHVlLCBrZXkpIHx8IHsgdmFsdWU6IHZhbHVlW2tleV0gfTtcbiAgaWYgKGRlc2MuZ2V0KSB7XG4gICAgaWYgKGRlc2Muc2V0KSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW0dldHRlci9TZXR0ZXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tHZXR0ZXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGRlc2Muc2V0KSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW1NldHRlcl0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfVxuICBpZiAoIWhhc093blByb3BlcnR5KHZpc2libGVLZXlzLCBrZXkpKSB7XG4gICAgbmFtZSA9ICdbJyArIGtleSArICddJztcbiAgfVxuICBpZiAoIXN0cikge1xuICAgIGlmIChjdHguc2Vlbi5pbmRleE9mKGRlc2MudmFsdWUpIDwgMCkge1xuICAgICAgaWYgKGlzTnVsbChyZWN1cnNlVGltZXMpKSB7XG4gICAgICAgIHN0ciA9IGZvcm1hdFZhbHVlKGN0eCwgZGVzYy52YWx1ZSwgbnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHIgPSBmb3JtYXRWYWx1ZShjdHgsIGRlc2MudmFsdWUsIHJlY3Vyc2VUaW1lcyAtIDEpO1xuICAgICAgfVxuICAgICAgaWYgKHN0ci5pbmRleE9mKCdcXG4nKSA+IC0xKSB7XG4gICAgICAgIGlmIChhcnJheSkge1xuICAgICAgICAgIHN0ciA9IHN0ci5zcGxpdCgnXFxuJykubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgIHJldHVybiAnICAnICsgbGluZTtcbiAgICAgICAgICB9KS5qb2luKCdcXG4nKS5zdWJzdHIoMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RyID0gJ1xcbicgKyBzdHIuc3BsaXQoJ1xcbicpLm1hcChmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gJyAgICcgKyBsaW5lO1xuICAgICAgICAgIH0pLmpvaW4oJ1xcbicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbQ2lyY3VsYXJdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH1cbiAgaWYgKGlzVW5kZWZpbmVkKG5hbWUpKSB7XG4gICAgaWYgKGFycmF5ICYmIGtleS5tYXRjaCgvXlxcZCskLykpIHtcbiAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuICAgIG5hbWUgPSBKU09OLnN0cmluZ2lmeSgnJyArIGtleSk7XG4gICAgaWYgKG5hbWUubWF0Y2goL15cIihbYS16QS1aX11bYS16QS1aXzAtOV0qKVwiJC8pKSB7XG4gICAgICBuYW1lID0gbmFtZS5zdWJzdHIoMSwgbmFtZS5sZW5ndGggLSAyKTtcbiAgICAgIG5hbWUgPSBjdHguc3R5bGl6ZShuYW1lLCAnbmFtZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIilcbiAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFxcIi9nLCAnXCInKVxuICAgICAgICAgICAgICAgICAucmVwbGFjZSgvKF5cInxcIiQpL2csIFwiJ1wiKTtcbiAgICAgIG5hbWUgPSBjdHguc3R5bGl6ZShuYW1lLCAnc3RyaW5nJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5hbWUgKyAnOiAnICsgc3RyO1xufVxuXG5cbmZ1bmN0aW9uIHJlZHVjZVRvU2luZ2xlU3RyaW5nKG91dHB1dCwgYmFzZSwgYnJhY2VzKSB7XG4gIHZhciBudW1MaW5lc0VzdCA9IDA7XG4gIHZhciBsZW5ndGggPSBvdXRwdXQucmVkdWNlKGZ1bmN0aW9uKHByZXYsIGN1cikge1xuICAgIG51bUxpbmVzRXN0Kys7XG4gICAgaWYgKGN1ci5pbmRleE9mKCdcXG4nKSA+PSAwKSBudW1MaW5lc0VzdCsrO1xuICAgIHJldHVybiBwcmV2ICsgY3VyLnJlcGxhY2UoL1xcdTAwMWJcXFtcXGRcXGQ/bS9nLCAnJykubGVuZ3RoICsgMTtcbiAgfSwgMCk7XG5cbiAgaWYgKGxlbmd0aCA+IDYwKSB7XG4gICAgcmV0dXJuIGJyYWNlc1swXSArXG4gICAgICAgICAgIChiYXNlID09PSAnJyA/ICcnIDogYmFzZSArICdcXG4gJykgK1xuICAgICAgICAgICAnICcgK1xuICAgICAgICAgICBvdXRwdXQuam9pbignLFxcbiAgJykgK1xuICAgICAgICAgICAnICcgK1xuICAgICAgICAgICBicmFjZXNbMV07XG4gIH1cblxuICByZXR1cm4gYnJhY2VzWzBdICsgYmFzZSArICcgJyArIG91dHB1dC5qb2luKCcsICcpICsgJyAnICsgYnJhY2VzWzFdO1xufVxuXG5cbi8vIE5PVEU6IFRoZXNlIHR5cGUgY2hlY2tpbmcgZnVuY3Rpb25zIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIGBpbnN0YW5jZW9mYFxuLy8gYmVjYXVzZSBpdCBpcyBmcmFnaWxlIGFuZCBjYW4gYmUgZWFzaWx5IGZha2VkIHdpdGggYE9iamVjdC5jcmVhdGUoKWAuXG5mdW5jdGlvbiBpc0FycmF5KGFyKSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGFyKTtcbn1cbmV4cG9ydHMuaXNBcnJheSA9IGlzQXJyYXk7XG5cbmZ1bmN0aW9uIGlzQm9vbGVhbihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdib29sZWFuJztcbn1cbmV4cG9ydHMuaXNCb29sZWFuID0gaXNCb29sZWFuO1xuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5leHBvcnRzLmlzTnVsbCA9IGlzTnVsbDtcblxuZnVuY3Rpb24gaXNOdWxsT3JVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNOdWxsT3JVbmRlZmluZWQgPSBpc051bGxPclVuZGVmaW5lZDtcblxuZnVuY3Rpb24gaXNOdW1iZXIoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnbnVtYmVyJztcbn1cbmV4cG9ydHMuaXNOdW1iZXIgPSBpc051bWJlcjtcblxuZnVuY3Rpb24gaXNTdHJpbmcoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnc3RyaW5nJztcbn1cbmV4cG9ydHMuaXNTdHJpbmcgPSBpc1N0cmluZztcblxuZnVuY3Rpb24gaXNTeW1ib2woYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnc3ltYm9sJztcbn1cbmV4cG9ydHMuaXNTeW1ib2wgPSBpc1N5bWJvbDtcblxuZnVuY3Rpb24gaXNVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IHZvaWQgMDtcbn1cbmV4cG9ydHMuaXNVbmRlZmluZWQgPSBpc1VuZGVmaW5lZDtcblxuZnVuY3Rpb24gaXNSZWdFeHAocmUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHJlKSAmJiBvYmplY3RUb1N0cmluZyhyZSkgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufVxuZXhwb3J0cy5pc1JlZ0V4cCA9IGlzUmVnRXhwO1xuXG5mdW5jdGlvbiBpc09iamVjdChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnICYmIGFyZyAhPT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNPYmplY3QgPSBpc09iamVjdDtcblxuZnVuY3Rpb24gaXNEYXRlKGQpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KGQpICYmIG9iamVjdFRvU3RyaW5nKGQpID09PSAnW29iamVjdCBEYXRlXSc7XG59XG5leHBvcnRzLmlzRGF0ZSA9IGlzRGF0ZTtcblxuZnVuY3Rpb24gaXNFcnJvcihlKSB7XG4gIHJldHVybiBpc09iamVjdChlKSAmJlxuICAgICAgKG9iamVjdFRvU3RyaW5nKGUpID09PSAnW29iamVjdCBFcnJvcl0nIHx8IGUgaW5zdGFuY2VvZiBFcnJvcik7XG59XG5leHBvcnRzLmlzRXJyb3IgPSBpc0Vycm9yO1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJztcbn1cbmV4cG9ydHMuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG5cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKGFyZykge1xuICByZXR1cm4gYXJnID09PSBudWxsIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnYm9vbGVhbicgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdudW1iZXInIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3N5bWJvbCcgfHwgIC8vIEVTNiBzeW1ib2xcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICd1bmRlZmluZWQnO1xufVxuZXhwb3J0cy5pc1ByaW1pdGl2ZSA9IGlzUHJpbWl0aXZlO1xuXG5leHBvcnRzLmlzQnVmZmVyID0gcmVxdWlyZSgnLi9zdXBwb3J0L2lzQnVmZmVyJyk7XG5cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKG8pIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKTtcbn1cblxuXG5mdW5jdGlvbiBwYWQobikge1xuICByZXR1cm4gbiA8IDEwID8gJzAnICsgbi50b1N0cmluZygxMCkgOiBuLnRvU3RyaW5nKDEwKTtcbn1cblxuXG52YXIgbW9udGhzID0gWydKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsXG4gICAgICAgICAgICAgICdPY3QnLCAnTm92JywgJ0RlYyddO1xuXG4vLyAyNiBGZWIgMTY6MTk6MzRcbmZ1bmN0aW9uIHRpbWVzdGFtcCgpIHtcbiAgdmFyIGQgPSBuZXcgRGF0ZSgpO1xuICB2YXIgdGltZSA9IFtwYWQoZC5nZXRIb3VycygpKSxcbiAgICAgICAgICAgICAgcGFkKGQuZ2V0TWludXRlcygpKSxcbiAgICAgICAgICAgICAgcGFkKGQuZ2V0U2Vjb25kcygpKV0uam9pbignOicpO1xuICByZXR1cm4gW2QuZ2V0RGF0ZSgpLCBtb250aHNbZC5nZXRNb250aCgpXSwgdGltZV0uam9pbignICcpO1xufVxuXG5cbi8vIGxvZyBpcyBqdXN0IGEgdGhpbiB3cmFwcGVyIHRvIGNvbnNvbGUubG9nIHRoYXQgcHJlcGVuZHMgYSB0aW1lc3RhbXBcbmV4cG9ydHMubG9nID0gZnVuY3Rpb24oKSB7XG4gIGNvbnNvbGUubG9nKCclcyAtICVzJywgdGltZXN0YW1wKCksIGV4cG9ydHMuZm9ybWF0LmFwcGx5KGV4cG9ydHMsIGFyZ3VtZW50cykpO1xufTtcblxuXG4vKipcbiAqIEluaGVyaXQgdGhlIHByb3RvdHlwZSBtZXRob2RzIGZyb20gb25lIGNvbnN0cnVjdG9yIGludG8gYW5vdGhlci5cbiAqXG4gKiBUaGUgRnVuY3Rpb24ucHJvdG90eXBlLmluaGVyaXRzIGZyb20gbGFuZy5qcyByZXdyaXR0ZW4gYXMgYSBzdGFuZGFsb25lXG4gKiBmdW5jdGlvbiAobm90IG9uIEZ1bmN0aW9uLnByb3RvdHlwZSkuIE5PVEU6IElmIHRoaXMgZmlsZSBpcyB0byBiZSBsb2FkZWRcbiAqIGR1cmluZyBib290c3RyYXBwaW5nIHRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgcmV3cml0dGVuIHVzaW5nIHNvbWUgbmF0aXZlXG4gKiBmdW5jdGlvbnMgYXMgcHJvdG90eXBlIHNldHVwIHVzaW5nIG5vcm1hbCBKYXZhU2NyaXB0IGRvZXMgbm90IHdvcmsgYXNcbiAqIGV4cGVjdGVkIGR1cmluZyBib290c3RyYXBwaW5nIChzZWUgbWlycm9yLmpzIGluIHIxMTQ5MDMpLlxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGN0b3IgQ29uc3RydWN0b3IgZnVuY3Rpb24gd2hpY2ggbmVlZHMgdG8gaW5oZXJpdCB0aGVcbiAqICAgICBwcm90b3R5cGUuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdXBlckN0b3IgQ29uc3RydWN0b3IgZnVuY3Rpb24gdG8gaW5oZXJpdCBwcm90b3R5cGUgZnJvbS5cbiAqL1xuZXhwb3J0cy5pbmhlcml0cyA9IHJlcXVpcmUoJ2luaGVyaXRzJyk7XG5cbmV4cG9ydHMuX2V4dGVuZCA9IGZ1bmN0aW9uKG9yaWdpbiwgYWRkKSB7XG4gIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIGFkZCBpc24ndCBhbiBvYmplY3RcbiAgaWYgKCFhZGQgfHwgIWlzT2JqZWN0KGFkZCkpIHJldHVybiBvcmlnaW47XG5cbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhhZGQpO1xuICB2YXIgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgb3JpZ2luW2tleXNbaV1dID0gYWRkW2tleXNbaV1dO1xuICB9XG4gIHJldHVybiBvcmlnaW47XG59O1xuXG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmosIHByb3ApIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgb2JqZWN0QXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xuXG4vLyBjb21wYXJlIGFuZCBpc0J1ZmZlciB0YWtlbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL2Jsb2IvNjgwZTllNWU0ODhmMjJhYWMyNzU5OWE1N2RjODQ0YTYzMTU5MjhkZC9pbmRleC5qc1xuLy8gb3JpZ2luYWwgbm90aWNlOlxuXG4vKiFcbiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxmZXJvc3NAZmVyb3NzLm9yZz4gPGh0dHA6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG5mdW5jdGlvbiBjb21wYXJlKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHZhciB4ID0gYS5sZW5ndGg7XG4gIHZhciB5ID0gYi5sZW5ndGg7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IE1hdGgubWluKHgsIHkpOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgeCA9IGFbaV07XG4gICAgICB5ID0gYltpXTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICBpZiAoeSA8IHgpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuICByZXR1cm4gMDtcbn1cbmZ1bmN0aW9uIGlzQnVmZmVyKGIpIHtcbiAgaWYgKGdsb2JhbC5CdWZmZXIgJiYgdHlwZW9mIGdsb2JhbC5CdWZmZXIuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZ2xvYmFsLkJ1ZmZlci5pc0J1ZmZlcihiKTtcbiAgfVxuICByZXR1cm4gISEoYiAhPSBudWxsICYmIGIuX2lzQnVmZmVyKTtcbn1cblxuLy8gYmFzZWQgb24gbm9kZSBhc3NlcnQsIG9yaWdpbmFsIG5vdGljZTpcbi8vIE5COiBUaGUgVVJMIHRvIHRoZSBDb21tb25KUyBzcGVjIGlzIGtlcHQganVzdCBmb3IgdHJhZGl0aW9uLlxuLy8gICAgIG5vZGUtYXNzZXJ0IGhhcyBldm9sdmVkIGEgbG90IHNpbmNlIHRoZW4sIGJvdGggaW4gQVBJIGFuZCBiZWhhdmlvci5cblxuLy8gaHR0cDovL3dpa2kuY29tbW9uanMub3JnL3dpa2kvVW5pdF9UZXN0aW5nLzEuMFxuLy9cbi8vIFRISVMgSVMgTk9UIFRFU1RFRCBOT1IgTElLRUxZIFRPIFdPUksgT1VUU0lERSBWOCFcbi8vXG4vLyBPcmlnaW5hbGx5IGZyb20gbmFyd2hhbC5qcyAoaHR0cDovL25hcndoYWxqcy5vcmcpXG4vLyBDb3B5cmlnaHQgKGMpIDIwMDkgVGhvbWFzIFJvYmluc29uIDwyODBub3J0aC5jb20+XG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgJ1NvZnR3YXJlJyksIHRvXG4vLyBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxuLy8gcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yXG4vLyBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTlxuLy8gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTlxuLy8gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbC8nKTtcbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHBTbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbnZhciBmdW5jdGlvbnNIYXZlTmFtZXMgPSAoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZm9vKCkge30ubmFtZSA9PT0gJ2Zvbyc7XG59KCkpO1xuZnVuY3Rpb24gcFRvU3RyaW5nIChvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopO1xufVxuZnVuY3Rpb24gaXNWaWV3KGFycmJ1Zikge1xuICBpZiAoaXNCdWZmZXIoYXJyYnVmKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodHlwZW9mIGdsb2JhbC5BcnJheUJ1ZmZlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoYXJyYnVmKTtcbiAgfVxuICBpZiAoIWFycmJ1Zikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoYXJyYnVmIGluc3RhbmNlb2YgRGF0YVZpZXcpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoYXJyYnVmLmJ1ZmZlciAmJiBhcnJidWYuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG4vLyAxLiBUaGUgYXNzZXJ0IG1vZHVsZSBwcm92aWRlcyBmdW5jdGlvbnMgdGhhdCB0aHJvd1xuLy8gQXNzZXJ0aW9uRXJyb3IncyB3aGVuIHBhcnRpY3VsYXIgY29uZGl0aW9ucyBhcmUgbm90IG1ldC4gVGhlXG4vLyBhc3NlcnQgbW9kdWxlIG11c3QgY29uZm9ybSB0byB0aGUgZm9sbG93aW5nIGludGVyZmFjZS5cblxudmFyIGFzc2VydCA9IG1vZHVsZS5leHBvcnRzID0gb2s7XG5cbi8vIDIuIFRoZSBBc3NlcnRpb25FcnJvciBpcyBkZWZpbmVkIGluIGFzc2VydC5cbi8vIG5ldyBhc3NlcnQuQXNzZXJ0aW9uRXJyb3IoeyBtZXNzYWdlOiBtZXNzYWdlLFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbDogYWN0dWFsLFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBleHBlY3RlZCB9KVxuXG52YXIgcmVnZXggPSAvXFxzKmZ1bmN0aW9uXFxzKyhbXlxcKFxcc10qKVxccyovO1xuLy8gYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9mdW5jdGlvbi5wcm90b3R5cGUubmFtZS9ibG9iL2FkZWVlZWM4YmZjYzYwNjhiMTg3ZDdkOWZiM2Q1YmIxZDNhMzA4OTkvaW1wbGVtZW50YXRpb24uanNcbmZ1bmN0aW9uIGdldE5hbWUoZnVuYykge1xuICBpZiAoIXV0aWwuaXNGdW5jdGlvbihmdW5jKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoZnVuY3Rpb25zSGF2ZU5hbWVzKSB7XG4gICAgcmV0dXJuIGZ1bmMubmFtZTtcbiAgfVxuICB2YXIgc3RyID0gZnVuYy50b1N0cmluZygpO1xuICB2YXIgbWF0Y2ggPSBzdHIubWF0Y2gocmVnZXgpO1xuICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbMV07XG59XG5hc3NlcnQuQXNzZXJ0aW9uRXJyb3IgPSBmdW5jdGlvbiBBc3NlcnRpb25FcnJvcihvcHRpb25zKSB7XG4gIHRoaXMubmFtZSA9ICdBc3NlcnRpb25FcnJvcic7XG4gIHRoaXMuYWN0dWFsID0gb3B0aW9ucy5hY3R1YWw7XG4gIHRoaXMuZXhwZWN0ZWQgPSBvcHRpb25zLmV4cGVjdGVkO1xuICB0aGlzLm9wZXJhdG9yID0gb3B0aW9ucy5vcGVyYXRvcjtcbiAgaWYgKG9wdGlvbnMubWVzc2FnZSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG9wdGlvbnMubWVzc2FnZTtcbiAgICB0aGlzLmdlbmVyYXRlZE1lc3NhZ2UgPSBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBnZXRNZXNzYWdlKHRoaXMpO1xuICAgIHRoaXMuZ2VuZXJhdGVkTWVzc2FnZSA9IHRydWU7XG4gIH1cbiAgdmFyIHN0YWNrU3RhcnRGdW5jdGlvbiA9IG9wdGlvbnMuc3RhY2tTdGFydEZ1bmN0aW9uIHx8IGZhaWw7XG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHN0YWNrU3RhcnRGdW5jdGlvbik7XG4gIH0gZWxzZSB7XG4gICAgLy8gbm9uIHY4IGJyb3dzZXJzIHNvIHdlIGNhbiBoYXZlIGEgc3RhY2t0cmFjZVxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoKTtcbiAgICBpZiAoZXJyLnN0YWNrKSB7XG4gICAgICB2YXIgb3V0ID0gZXJyLnN0YWNrO1xuXG4gICAgICAvLyB0cnkgdG8gc3RyaXAgdXNlbGVzcyBmcmFtZXNcbiAgICAgIHZhciBmbl9uYW1lID0gZ2V0TmFtZShzdGFja1N0YXJ0RnVuY3Rpb24pO1xuICAgICAgdmFyIGlkeCA9IG91dC5pbmRleE9mKCdcXG4nICsgZm5fbmFtZSk7XG4gICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgLy8gb25jZSB3ZSBoYXZlIGxvY2F0ZWQgdGhlIGZ1bmN0aW9uIGZyYW1lXG4gICAgICAgIC8vIHdlIG5lZWQgdG8gc3RyaXAgb3V0IGV2ZXJ5dGhpbmcgYmVmb3JlIGl0IChhbmQgaXRzIGxpbmUpXG4gICAgICAgIHZhciBuZXh0X2xpbmUgPSBvdXQuaW5kZXhPZignXFxuJywgaWR4ICsgMSk7XG4gICAgICAgIG91dCA9IG91dC5zdWJzdHJpbmcobmV4dF9saW5lICsgMSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc3RhY2sgPSBvdXQ7XG4gICAgfVxuICB9XG59O1xuXG4vLyBhc3NlcnQuQXNzZXJ0aW9uRXJyb3IgaW5zdGFuY2VvZiBFcnJvclxudXRpbC5pbmhlcml0cyhhc3NlcnQuQXNzZXJ0aW9uRXJyb3IsIEVycm9yKTtcblxuZnVuY3Rpb24gdHJ1bmNhdGUocywgbikge1xuICBpZiAodHlwZW9mIHMgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHMubGVuZ3RoIDwgbiA/IHMgOiBzLnNsaWNlKDAsIG4pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzO1xuICB9XG59XG5mdW5jdGlvbiBpbnNwZWN0KHNvbWV0aGluZykge1xuICBpZiAoZnVuY3Rpb25zSGF2ZU5hbWVzIHx8ICF1dGlsLmlzRnVuY3Rpb24oc29tZXRoaW5nKSkge1xuICAgIHJldHVybiB1dGlsLmluc3BlY3Qoc29tZXRoaW5nKTtcbiAgfVxuICB2YXIgcmF3bmFtZSA9IGdldE5hbWUoc29tZXRoaW5nKTtcbiAgdmFyIG5hbWUgPSByYXduYW1lID8gJzogJyArIHJhd25hbWUgOiAnJztcbiAgcmV0dXJuICdbRnVuY3Rpb24nICsgIG5hbWUgKyAnXSc7XG59XG5mdW5jdGlvbiBnZXRNZXNzYWdlKHNlbGYpIHtcbiAgcmV0dXJuIHRydW5jYXRlKGluc3BlY3Qoc2VsZi5hY3R1YWwpLCAxMjgpICsgJyAnICtcbiAgICAgICAgIHNlbGYub3BlcmF0b3IgKyAnICcgK1xuICAgICAgICAgdHJ1bmNhdGUoaW5zcGVjdChzZWxmLmV4cGVjdGVkKSwgMTI4KTtcbn1cblxuLy8gQXQgcHJlc2VudCBvbmx5IHRoZSB0aHJlZSBrZXlzIG1lbnRpb25lZCBhYm92ZSBhcmUgdXNlZCBhbmRcbi8vIHVuZGVyc3Rvb2QgYnkgdGhlIHNwZWMuIEltcGxlbWVudGF0aW9ucyBvciBzdWIgbW9kdWxlcyBjYW4gcGFzc1xuLy8gb3RoZXIga2V5cyB0byB0aGUgQXNzZXJ0aW9uRXJyb3IncyBjb25zdHJ1Y3RvciAtIHRoZXkgd2lsbCBiZVxuLy8gaWdub3JlZC5cblxuLy8gMy4gQWxsIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIG11c3QgdGhyb3cgYW4gQXNzZXJ0aW9uRXJyb3Jcbi8vIHdoZW4gYSBjb3JyZXNwb25kaW5nIGNvbmRpdGlvbiBpcyBub3QgbWV0LCB3aXRoIGEgbWVzc2FnZSB0aGF0XG4vLyBtYXkgYmUgdW5kZWZpbmVkIGlmIG5vdCBwcm92aWRlZC4gIEFsbCBhc3NlcnRpb24gbWV0aG9kcyBwcm92aWRlXG4vLyBib3RoIHRoZSBhY3R1YWwgYW5kIGV4cGVjdGVkIHZhbHVlcyB0byB0aGUgYXNzZXJ0aW9uIGVycm9yIGZvclxuLy8gZGlzcGxheSBwdXJwb3Nlcy5cblxuZnVuY3Rpb24gZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCBvcGVyYXRvciwgc3RhY2tTdGFydEZ1bmN0aW9uKSB7XG4gIHRocm93IG5ldyBhc3NlcnQuQXNzZXJ0aW9uRXJyb3Ioe1xuICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgYWN0dWFsOiBhY3R1YWwsXG4gICAgZXhwZWN0ZWQ6IGV4cGVjdGVkLFxuICAgIG9wZXJhdG9yOiBvcGVyYXRvcixcbiAgICBzdGFja1N0YXJ0RnVuY3Rpb246IHN0YWNrU3RhcnRGdW5jdGlvblxuICB9KTtcbn1cblxuLy8gRVhURU5TSU9OISBhbGxvd3MgZm9yIHdlbGwgYmVoYXZlZCBlcnJvcnMgZGVmaW5lZCBlbHNld2hlcmUuXG5hc3NlcnQuZmFpbCA9IGZhaWw7XG5cbi8vIDQuIFB1cmUgYXNzZXJ0aW9uIHRlc3RzIHdoZXRoZXIgYSB2YWx1ZSBpcyB0cnV0aHksIGFzIGRldGVybWluZWRcbi8vIGJ5ICEhZ3VhcmQuXG4vLyBhc3NlcnQub2soZ3VhcmQsIG1lc3NhZ2Vfb3B0KTtcbi8vIFRoaXMgc3RhdGVtZW50IGlzIGVxdWl2YWxlbnQgdG8gYXNzZXJ0LmVxdWFsKHRydWUsICEhZ3VhcmQsXG4vLyBtZXNzYWdlX29wdCk7LiBUbyB0ZXN0IHN0cmljdGx5IGZvciB0aGUgdmFsdWUgdHJ1ZSwgdXNlXG4vLyBhc3NlcnQuc3RyaWN0RXF1YWwodHJ1ZSwgZ3VhcmQsIG1lc3NhZ2Vfb3B0KTsuXG5cbmZ1bmN0aW9uIG9rKHZhbHVlLCBtZXNzYWdlKSB7XG4gIGlmICghdmFsdWUpIGZhaWwodmFsdWUsIHRydWUsIG1lc3NhZ2UsICc9PScsIGFzc2VydC5vayk7XG59XG5hc3NlcnQub2sgPSBvaztcblxuLy8gNS4gVGhlIGVxdWFsaXR5IGFzc2VydGlvbiB0ZXN0cyBzaGFsbG93LCBjb2VyY2l2ZSBlcXVhbGl0eSB3aXRoXG4vLyA9PS5cbi8vIGFzc2VydC5lcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5lcXVhbCA9IGZ1bmN0aW9uIGVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKGFjdHVhbCAhPSBleHBlY3RlZCkgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnPT0nLCBhc3NlcnQuZXF1YWwpO1xufTtcblxuLy8gNi4gVGhlIG5vbi1lcXVhbGl0eSBhc3NlcnRpb24gdGVzdHMgZm9yIHdoZXRoZXIgdHdvIG9iamVjdHMgYXJlIG5vdCBlcXVhbFxuLy8gd2l0aCAhPSBhc3NlcnQubm90RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZV9vcHQpO1xuXG5hc3NlcnQubm90RXF1YWwgPSBmdW5jdGlvbiBub3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChhY3R1YWwgPT0gZXhwZWN0ZWQpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICchPScsIGFzc2VydC5ub3RFcXVhbCk7XG4gIH1cbn07XG5cbi8vIDcuIFRoZSBlcXVpdmFsZW5jZSBhc3NlcnRpb24gdGVzdHMgYSBkZWVwIGVxdWFsaXR5IHJlbGF0aW9uLlxuLy8gYXNzZXJ0LmRlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5kZWVwRXF1YWwgPSBmdW5jdGlvbiBkZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoIV9kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgZmFsc2UpKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnZGVlcEVxdWFsJywgYXNzZXJ0LmRlZXBFcXVhbCk7XG4gIH1cbn07XG5cbmFzc2VydC5kZWVwU3RyaWN0RXF1YWwgPSBmdW5jdGlvbiBkZWVwU3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoIV9kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgdHJ1ZSkpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICdkZWVwU3RyaWN0RXF1YWwnLCBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gX2RlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBzdHJpY3QsIG1lbW9zKSB7XG4gIC8vIDcuMS4gQWxsIGlkZW50aWNhbCB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGFzIGRldGVybWluZWQgYnkgPT09LlxuICBpZiAoYWN0dWFsID09PSBleHBlY3RlZCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGlzQnVmZmVyKGFjdHVhbCkgJiYgaXNCdWZmZXIoZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuIGNvbXBhcmUoYWN0dWFsLCBleHBlY3RlZCkgPT09IDA7XG5cbiAgLy8gNy4yLiBJZiB0aGUgZXhwZWN0ZWQgdmFsdWUgaXMgYSBEYXRlIG9iamVjdCwgdGhlIGFjdHVhbCB2YWx1ZSBpc1xuICAvLyBlcXVpdmFsZW50IGlmIGl0IGlzIGFsc28gYSBEYXRlIG9iamVjdCB0aGF0IHJlZmVycyB0byB0aGUgc2FtZSB0aW1lLlxuICB9IGVsc2UgaWYgKHV0aWwuaXNEYXRlKGFjdHVhbCkgJiYgdXRpbC5pc0RhdGUoZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuIGFjdHVhbC5nZXRUaW1lKCkgPT09IGV4cGVjdGVkLmdldFRpbWUoKTtcblxuICAvLyA3LjMgSWYgdGhlIGV4cGVjdGVkIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdCwgdGhlIGFjdHVhbCB2YWx1ZSBpc1xuICAvLyBlcXVpdmFsZW50IGlmIGl0IGlzIGFsc28gYSBSZWdFeHAgb2JqZWN0IHdpdGggdGhlIHNhbWUgc291cmNlIGFuZFxuICAvLyBwcm9wZXJ0aWVzIChgZ2xvYmFsYCwgYG11bHRpbGluZWAsIGBsYXN0SW5kZXhgLCBgaWdub3JlQ2FzZWApLlxuICB9IGVsc2UgaWYgKHV0aWwuaXNSZWdFeHAoYWN0dWFsKSAmJiB1dGlsLmlzUmVnRXhwKGV4cGVjdGVkKSkge1xuICAgIHJldHVybiBhY3R1YWwuc291cmNlID09PSBleHBlY3RlZC5zb3VyY2UgJiZcbiAgICAgICAgICAgYWN0dWFsLmdsb2JhbCA9PT0gZXhwZWN0ZWQuZ2xvYmFsICYmXG4gICAgICAgICAgIGFjdHVhbC5tdWx0aWxpbmUgPT09IGV4cGVjdGVkLm11bHRpbGluZSAmJlxuICAgICAgICAgICBhY3R1YWwubGFzdEluZGV4ID09PSBleHBlY3RlZC5sYXN0SW5kZXggJiZcbiAgICAgICAgICAgYWN0dWFsLmlnbm9yZUNhc2UgPT09IGV4cGVjdGVkLmlnbm9yZUNhc2U7XG5cbiAgLy8gNy40LiBPdGhlciBwYWlycyB0aGF0IGRvIG5vdCBib3RoIHBhc3MgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnLFxuICAvLyBlcXVpdmFsZW5jZSBpcyBkZXRlcm1pbmVkIGJ5ID09LlxuICB9IGVsc2UgaWYgKChhY3R1YWwgPT09IG51bGwgfHwgdHlwZW9mIGFjdHVhbCAhPT0gJ29iamVjdCcpICYmXG4gICAgICAgICAgICAgKGV4cGVjdGVkID09PSBudWxsIHx8IHR5cGVvZiBleHBlY3RlZCAhPT0gJ29iamVjdCcpKSB7XG4gICAgcmV0dXJuIHN0cmljdCA/IGFjdHVhbCA9PT0gZXhwZWN0ZWQgOiBhY3R1YWwgPT0gZXhwZWN0ZWQ7XG5cbiAgLy8gSWYgYm90aCB2YWx1ZXMgYXJlIGluc3RhbmNlcyBvZiB0eXBlZCBhcnJheXMsIHdyYXAgdGhlaXIgdW5kZXJseWluZ1xuICAvLyBBcnJheUJ1ZmZlcnMgaW4gYSBCdWZmZXIgZWFjaCB0byBpbmNyZWFzZSBwZXJmb3JtYW5jZVxuICAvLyBUaGlzIG9wdGltaXphdGlvbiByZXF1aXJlcyB0aGUgYXJyYXlzIHRvIGhhdmUgdGhlIHNhbWUgdHlwZSBhcyBjaGVja2VkIGJ5XG4gIC8vIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgKGFrYSBwVG9TdHJpbmcpLiBOZXZlciBwZXJmb3JtIGJpbmFyeVxuICAvLyBjb21wYXJpc29ucyBmb3IgRmxvYXQqQXJyYXlzLCB0aG91Z2gsIHNpbmNlIGUuZy4gKzAgPT09IC0wIGJ1dCB0aGVpclxuICAvLyBiaXQgcGF0dGVybnMgYXJlIG5vdCBpZGVudGljYWwuXG4gIH0gZWxzZSBpZiAoaXNWaWV3KGFjdHVhbCkgJiYgaXNWaWV3KGV4cGVjdGVkKSAmJlxuICAgICAgICAgICAgIHBUb1N0cmluZyhhY3R1YWwpID09PSBwVG9TdHJpbmcoZXhwZWN0ZWQpICYmXG4gICAgICAgICAgICAgIShhY3R1YWwgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkgfHxcbiAgICAgICAgICAgICAgIGFjdHVhbCBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheSkpIHtcbiAgICByZXR1cm4gY29tcGFyZShuZXcgVWludDhBcnJheShhY3R1YWwuYnVmZmVyKSxcbiAgICAgICAgICAgICAgICAgICBuZXcgVWludDhBcnJheShleHBlY3RlZC5idWZmZXIpKSA9PT0gMDtcblxuICAvLyA3LjUgRm9yIGFsbCBvdGhlciBPYmplY3QgcGFpcnMsIGluY2x1ZGluZyBBcnJheSBvYmplY3RzLCBlcXVpdmFsZW5jZSBpc1xuICAvLyBkZXRlcm1pbmVkIGJ5IGhhdmluZyB0aGUgc2FtZSBudW1iZXIgb2Ygb3duZWQgcHJvcGVydGllcyAoYXMgdmVyaWZpZWRcbiAgLy8gd2l0aCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwpLCB0aGUgc2FtZSBzZXQgb2Yga2V5c1xuICAvLyAoYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIG9yZGVyKSwgZXF1aXZhbGVudCB2YWx1ZXMgZm9yIGV2ZXJ5XG4gIC8vIGNvcnJlc3BvbmRpbmcga2V5LCBhbmQgYW4gaWRlbnRpY2FsICdwcm90b3R5cGUnIHByb3BlcnR5LiBOb3RlOiB0aGlzXG4gIC8vIGFjY291bnRzIGZvciBib3RoIG5hbWVkIGFuZCBpbmRleGVkIHByb3BlcnRpZXMgb24gQXJyYXlzLlxuICB9IGVsc2UgaWYgKGlzQnVmZmVyKGFjdHVhbCkgIT09IGlzQnVmZmVyKGV4cGVjdGVkKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICBtZW1vcyA9IG1lbW9zIHx8IHthY3R1YWw6IFtdLCBleHBlY3RlZDogW119O1xuXG4gICAgdmFyIGFjdHVhbEluZGV4ID0gbWVtb3MuYWN0dWFsLmluZGV4T2YoYWN0dWFsKTtcbiAgICBpZiAoYWN0dWFsSW5kZXggIT09IC0xKSB7XG4gICAgICBpZiAoYWN0dWFsSW5kZXggPT09IG1lbW9zLmV4cGVjdGVkLmluZGV4T2YoZXhwZWN0ZWQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIG1lbW9zLmFjdHVhbC5wdXNoKGFjdHVhbCk7XG4gICAgbWVtb3MuZXhwZWN0ZWQucHVzaChleHBlY3RlZCk7XG5cbiAgICByZXR1cm4gb2JqRXF1aXYoYWN0dWFsLCBleHBlY3RlZCwgc3RyaWN0LCBtZW1vcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNBcmd1bWVudHMob2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PSAnW29iamVjdCBBcmd1bWVudHNdJztcbn1cblxuZnVuY3Rpb24gb2JqRXF1aXYoYSwgYiwgc3RyaWN0LCBhY3R1YWxWaXNpdGVkT2JqZWN0cykge1xuICBpZiAoYSA9PT0gbnVsbCB8fCBhID09PSB1bmRlZmluZWQgfHwgYiA9PT0gbnVsbCB8fCBiID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIGZhbHNlO1xuICAvLyBpZiBvbmUgaXMgYSBwcmltaXRpdmUsIHRoZSBvdGhlciBtdXN0IGJlIHNhbWVcbiAgaWYgKHV0aWwuaXNQcmltaXRpdmUoYSkgfHwgdXRpbC5pc1ByaW1pdGl2ZShiKSlcbiAgICByZXR1cm4gYSA9PT0gYjtcbiAgaWYgKHN0cmljdCAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSkgIT09IE9iamVjdC5nZXRQcm90b3R5cGVPZihiKSlcbiAgICByZXR1cm4gZmFsc2U7XG4gIHZhciBhSXNBcmdzID0gaXNBcmd1bWVudHMoYSk7XG4gIHZhciBiSXNBcmdzID0gaXNBcmd1bWVudHMoYik7XG4gIGlmICgoYUlzQXJncyAmJiAhYklzQXJncykgfHwgKCFhSXNBcmdzICYmIGJJc0FyZ3MpKVxuICAgIHJldHVybiBmYWxzZTtcbiAgaWYgKGFJc0FyZ3MpIHtcbiAgICBhID0gcFNsaWNlLmNhbGwoYSk7XG4gICAgYiA9IHBTbGljZS5jYWxsKGIpO1xuICAgIHJldHVybiBfZGVlcEVxdWFsKGEsIGIsIHN0cmljdCk7XG4gIH1cbiAgdmFyIGthID0gb2JqZWN0S2V5cyhhKTtcbiAgdmFyIGtiID0gb2JqZWN0S2V5cyhiKTtcbiAgdmFyIGtleSwgaTtcbiAgLy8gaGF2aW5nIHRoZSBzYW1lIG51bWJlciBvZiBvd25lZCBwcm9wZXJ0aWVzIChrZXlzIGluY29ycG9yYXRlc1xuICAvLyBoYXNPd25Qcm9wZXJ0eSlcbiAgaWYgKGthLmxlbmd0aCAhPT0ga2IubGVuZ3RoKVxuICAgIHJldHVybiBmYWxzZTtcbiAgLy90aGUgc2FtZSBzZXQgb2Yga2V5cyAoYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIG9yZGVyKSxcbiAga2Euc29ydCgpO1xuICBrYi5zb3J0KCk7XG4gIC8vfn5+Y2hlYXAga2V5IHRlc3RcbiAgZm9yIChpID0ga2EubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAoa2FbaV0gIT09IGtiW2ldKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vZXF1aXZhbGVudCB2YWx1ZXMgZm9yIGV2ZXJ5IGNvcnJlc3BvbmRpbmcga2V5LCBhbmRcbiAgLy9+fn5wb3NzaWJseSBleHBlbnNpdmUgZGVlcCB0ZXN0XG4gIGZvciAoaSA9IGthLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAga2V5ID0ga2FbaV07XG4gICAgaWYgKCFfZGVlcEVxdWFsKGFba2V5XSwgYltrZXldLCBzdHJpY3QsIGFjdHVhbFZpc2l0ZWRPYmplY3RzKSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gOC4gVGhlIG5vbi1lcXVpdmFsZW5jZSBhc3NlcnRpb24gdGVzdHMgZm9yIGFueSBkZWVwIGluZXF1YWxpdHkuXG4vLyBhc3NlcnQubm90RGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0Lm5vdERlZXBFcXVhbCA9IGZ1bmN0aW9uIG5vdERlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChfZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIGZhbHNlKSkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJ25vdERlZXBFcXVhbCcsIGFzc2VydC5ub3REZWVwRXF1YWwpO1xuICB9XG59O1xuXG5hc3NlcnQubm90RGVlcFN0cmljdEVxdWFsID0gbm90RGVlcFN0cmljdEVxdWFsO1xuZnVuY3Rpb24gbm90RGVlcFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKF9kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgdHJ1ZSkpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICdub3REZWVwU3RyaWN0RXF1YWwnLCBub3REZWVwU3RyaWN0RXF1YWwpO1xuICB9XG59XG5cblxuLy8gOS4gVGhlIHN0cmljdCBlcXVhbGl0eSBhc3NlcnRpb24gdGVzdHMgc3RyaWN0IGVxdWFsaXR5LCBhcyBkZXRlcm1pbmVkIGJ5ID09PS5cbi8vIGFzc2VydC5zdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5zdHJpY3RFcXVhbCA9IGZ1bmN0aW9uIHN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICc9PT0nLCBhc3NlcnQuc3RyaWN0RXF1YWwpO1xuICB9XG59O1xuXG4vLyAxMC4gVGhlIHN0cmljdCBub24tZXF1YWxpdHkgYXNzZXJ0aW9uIHRlc3RzIGZvciBzdHJpY3QgaW5lcXVhbGl0eSwgYXNcbi8vIGRldGVybWluZWQgYnkgIT09LiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0Lm5vdFN0cmljdEVxdWFsID0gZnVuY3Rpb24gbm90U3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoYWN0dWFsID09PSBleHBlY3RlZCkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJyE9PScsIGFzc2VydC5ub3RTdHJpY3RFcXVhbCk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGV4cGVjdGVkRXhjZXB0aW9uKGFjdHVhbCwgZXhwZWN0ZWQpIHtcbiAgaWYgKCFhY3R1YWwgfHwgIWV4cGVjdGVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChleHBlY3RlZCkgPT0gJ1tvYmplY3QgUmVnRXhwXScpIHtcbiAgICByZXR1cm4gZXhwZWN0ZWQudGVzdChhY3R1YWwpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBpZiAoYWN0dWFsIGluc3RhbmNlb2YgZXhwZWN0ZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIElnbm9yZS4gIFRoZSBpbnN0YW5jZW9mIGNoZWNrIGRvZXNuJ3Qgd29yayBmb3IgYXJyb3cgZnVuY3Rpb25zLlxuICB9XG5cbiAgaWYgKEVycm9yLmlzUHJvdG90eXBlT2YoZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGV4cGVjdGVkLmNhbGwoe30sIGFjdHVhbCkgPT09IHRydWU7XG59XG5cbmZ1bmN0aW9uIF90cnlCbG9jayhibG9jaykge1xuICB2YXIgZXJyb3I7XG4gIHRyeSB7XG4gICAgYmxvY2soKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9yID0gZTtcbiAgfVxuICByZXR1cm4gZXJyb3I7XG59XG5cbmZ1bmN0aW9uIF90aHJvd3Moc2hvdWxkVGhyb3csIGJsb2NrLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICB2YXIgYWN0dWFsO1xuXG4gIGlmICh0eXBlb2YgYmxvY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJsb2NrXCIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIGV4cGVjdGVkID09PSAnc3RyaW5nJykge1xuICAgIG1lc3NhZ2UgPSBleHBlY3RlZDtcbiAgICBleHBlY3RlZCA9IG51bGw7XG4gIH1cblxuICBhY3R1YWwgPSBfdHJ5QmxvY2soYmxvY2spO1xuXG4gIG1lc3NhZ2UgPSAoZXhwZWN0ZWQgJiYgZXhwZWN0ZWQubmFtZSA/ICcgKCcgKyBleHBlY3RlZC5uYW1lICsgJykuJyA6ICcuJykgK1xuICAgICAgICAgICAgKG1lc3NhZ2UgPyAnICcgKyBtZXNzYWdlIDogJy4nKTtcblxuICBpZiAoc2hvdWxkVGhyb3cgJiYgIWFjdHVhbCkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgJ01pc3NpbmcgZXhwZWN0ZWQgZXhjZXB0aW9uJyArIG1lc3NhZ2UpO1xuICB9XG5cbiAgdmFyIHVzZXJQcm92aWRlZE1lc3NhZ2UgPSB0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZyc7XG4gIHZhciBpc1Vud2FudGVkRXhjZXB0aW9uID0gIXNob3VsZFRocm93ICYmIHV0aWwuaXNFcnJvcihhY3R1YWwpO1xuICB2YXIgaXNVbmV4cGVjdGVkRXhjZXB0aW9uID0gIXNob3VsZFRocm93ICYmIGFjdHVhbCAmJiAhZXhwZWN0ZWQ7XG5cbiAgaWYgKChpc1Vud2FudGVkRXhjZXB0aW9uICYmXG4gICAgICB1c2VyUHJvdmlkZWRNZXNzYWdlICYmXG4gICAgICBleHBlY3RlZEV4Y2VwdGlvbihhY3R1YWwsIGV4cGVjdGVkKSkgfHxcbiAgICAgIGlzVW5leHBlY3RlZEV4Y2VwdGlvbikge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgJ0dvdCB1bndhbnRlZCBleGNlcHRpb24nICsgbWVzc2FnZSk7XG4gIH1cblxuICBpZiAoKHNob3VsZFRocm93ICYmIGFjdHVhbCAmJiBleHBlY3RlZCAmJlxuICAgICAgIWV4cGVjdGVkRXhjZXB0aW9uKGFjdHVhbCwgZXhwZWN0ZWQpKSB8fCAoIXNob3VsZFRocm93ICYmIGFjdHVhbCkpIHtcbiAgICB0aHJvdyBhY3R1YWw7XG4gIH1cbn1cblxuLy8gMTEuIEV4cGVjdGVkIHRvIHRocm93IGFuIGVycm9yOlxuLy8gYXNzZXJ0LnRocm93cyhibG9jaywgRXJyb3Jfb3B0LCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC50aHJvd3MgPSBmdW5jdGlvbihibG9jaywgLypvcHRpb25hbCovZXJyb3IsIC8qb3B0aW9uYWwqL21lc3NhZ2UpIHtcbiAgX3Rocm93cyh0cnVlLCBibG9jaywgZXJyb3IsIG1lc3NhZ2UpO1xufTtcblxuLy8gRVhURU5TSU9OISBUaGlzIGlzIGFubm95aW5nIHRvIHdyaXRlIG91dHNpZGUgdGhpcyBtb2R1bGUuXG5hc3NlcnQuZG9lc05vdFRocm93ID0gZnVuY3Rpb24oYmxvY2ssIC8qb3B0aW9uYWwqL2Vycm9yLCAvKm9wdGlvbmFsKi9tZXNzYWdlKSB7XG4gIF90aHJvd3MoZmFsc2UsIGJsb2NrLCBlcnJvciwgbWVzc2FnZSk7XG59O1xuXG5hc3NlcnQuaWZFcnJvciA9IGZ1bmN0aW9uKGVycikgeyBpZiAoZXJyKSB0aHJvdyBlcnI7IH07XG5cbi8vIEV4cG9zZSBhIHN0cmljdCBvbmx5IHZhcmlhbnQgb2YgYXNzZXJ0XG5mdW5jdGlvbiBzdHJpY3QodmFsdWUsIG1lc3NhZ2UpIHtcbiAgaWYgKCF2YWx1ZSkgZmFpbCh2YWx1ZSwgdHJ1ZSwgbWVzc2FnZSwgJz09Jywgc3RyaWN0KTtcbn1cbmFzc2VydC5zdHJpY3QgPSBvYmplY3RBc3NpZ24oc3RyaWN0LCBhc3NlcnQsIHtcbiAgZXF1YWw6IGFzc2VydC5zdHJpY3RFcXVhbCxcbiAgZGVlcEVxdWFsOiBhc3NlcnQuZGVlcFN0cmljdEVxdWFsLFxuICBub3RFcXVhbDogYXNzZXJ0Lm5vdFN0cmljdEVxdWFsLFxuICBub3REZWVwRXF1YWw6IGFzc2VydC5ub3REZWVwU3RyaWN0RXF1YWxcbn0pO1xuYXNzZXJ0LnN0cmljdC5zdHJpY3QgPSBhc3NlcnQuc3RyaWN0O1xuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChoYXNPd24uY2FsbChvYmosIGtleSkpIGtleXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiBrZXlzO1xufTtcbiIsIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zXG4gKiBhcmUgbWV0OlxuICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWVxuICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEVcbiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUlxuICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1JcbiAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLFxuICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLFxuICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SXG4gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZXG4gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxuICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqXG4gKiBQb3J0ZWQgZnJvbSBXZWJraXRcbiAqIGh0dHA6Ly9zdm4ud2Via2l0Lm9yZy9yZXBvc2l0b3J5L3dlYmtpdC90cnVuay9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Vbml0QmV6aWVyLmhcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVuaXRCZXppZXI7XG5cbmZ1bmN0aW9uIFVuaXRCZXppZXIocDF4LCBwMXksIHAyeCwgcDJ5KSB7XG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBwb2x5bm9taWFsIGNvZWZmaWNpZW50cywgaW1wbGljaXQgZmlyc3QgYW5kIGxhc3QgY29udHJvbCBwb2ludHMgYXJlICgwLDApIGFuZCAoMSwxKS5cbiAgICB0aGlzLmN4ID0gMy4wICogcDF4O1xuICAgIHRoaXMuYnggPSAzLjAgKiAocDJ4IC0gcDF4KSAtIHRoaXMuY3g7XG4gICAgdGhpcy5heCA9IDEuMCAtIHRoaXMuY3ggLSB0aGlzLmJ4O1xuXG4gICAgdGhpcy5jeSA9IDMuMCAqIHAxeTtcbiAgICB0aGlzLmJ5ID0gMy4wICogKHAyeSAtIHAxeSkgLSB0aGlzLmN5O1xuICAgIHRoaXMuYXkgPSAxLjAgLSB0aGlzLmN5IC0gdGhpcy5ieTtcblxuICAgIHRoaXMucDF4ID0gcDF4O1xuICAgIHRoaXMucDF5ID0gcDJ5O1xuICAgIHRoaXMucDJ4ID0gcDJ4O1xuICAgIHRoaXMucDJ5ID0gcDJ5O1xufVxuXG5Vbml0QmV6aWVyLnByb3RvdHlwZS5zYW1wbGVDdXJ2ZVggPSBmdW5jdGlvbih0KSB7XG4gICAgLy8gYGF4IHReMyArIGJ4IHReMiArIGN4IHQnIGV4cGFuZGVkIHVzaW5nIEhvcm5lcidzIHJ1bGUuXG4gICAgcmV0dXJuICgodGhpcy5heCAqIHQgKyB0aGlzLmJ4KSAqIHQgKyB0aGlzLmN4KSAqIHQ7XG59O1xuXG5Vbml0QmV6aWVyLnByb3RvdHlwZS5zYW1wbGVDdXJ2ZVkgPSBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuICgodGhpcy5heSAqIHQgKyB0aGlzLmJ5KSAqIHQgKyB0aGlzLmN5KSAqIHQ7XG59O1xuXG5Vbml0QmV6aWVyLnByb3RvdHlwZS5zYW1wbGVDdXJ2ZURlcml2YXRpdmVYID0gZnVuY3Rpb24odCkge1xuICAgIHJldHVybiAoMy4wICogdGhpcy5heCAqIHQgKyAyLjAgKiB0aGlzLmJ4KSAqIHQgKyB0aGlzLmN4O1xufTtcblxuVW5pdEJlemllci5wcm90b3R5cGUuc29sdmVDdXJ2ZVggPSBmdW5jdGlvbih4LCBlcHNpbG9uKSB7XG4gICAgaWYgKHR5cGVvZiBlcHNpbG9uID09PSAndW5kZWZpbmVkJykgZXBzaWxvbiA9IDFlLTY7XG5cbiAgICB2YXIgdDAsIHQxLCB0MiwgeDIsIGk7XG5cbiAgICAvLyBGaXJzdCB0cnkgYSBmZXcgaXRlcmF0aW9ucyBvZiBOZXd0b24ncyBtZXRob2QgLS0gbm9ybWFsbHkgdmVyeSBmYXN0LlxuICAgIGZvciAodDIgPSB4LCBpID0gMDsgaSA8IDg7IGkrKykge1xuXG4gICAgICAgIHgyID0gdGhpcy5zYW1wbGVDdXJ2ZVgodDIpIC0geDtcbiAgICAgICAgaWYgKE1hdGguYWJzKHgyKSA8IGVwc2lsb24pIHJldHVybiB0MjtcblxuICAgICAgICB2YXIgZDIgPSB0aGlzLnNhbXBsZUN1cnZlRGVyaXZhdGl2ZVgodDIpO1xuICAgICAgICBpZiAoTWF0aC5hYnMoZDIpIDwgMWUtNikgYnJlYWs7XG5cbiAgICAgICAgdDIgPSB0MiAtIHgyIC8gZDI7XG4gICAgfVxuXG4gICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBiaXNlY3Rpb24gbWV0aG9kIGZvciByZWxpYWJpbGl0eS5cbiAgICB0MCA9IDAuMDtcbiAgICB0MSA9IDEuMDtcbiAgICB0MiA9IHg7XG5cbiAgICBpZiAodDIgPCB0MCkgcmV0dXJuIHQwO1xuICAgIGlmICh0MiA+IHQxKSByZXR1cm4gdDE7XG5cbiAgICB3aGlsZSAodDAgPCB0MSkge1xuXG4gICAgICAgIHgyID0gdGhpcy5zYW1wbGVDdXJ2ZVgodDIpO1xuICAgICAgICBpZiAoTWF0aC5hYnMoeDIgLSB4KSA8IGVwc2lsb24pIHJldHVybiB0MjtcblxuICAgICAgICBpZiAoeCA+IHgyKSB7XG4gICAgICAgICAgICB0MCA9IHQyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdDEgPSB0MjtcbiAgICAgICAgfVxuXG4gICAgICAgIHQyID0gKHQxIC0gdDApICogMC41ICsgdDA7XG4gICAgfVxuXG4gICAgLy8gRmFpbHVyZS5cbiAgICByZXR1cm4gdDI7XG59O1xuXG5Vbml0QmV6aWVyLnByb3RvdHlwZS5zb2x2ZSA9IGZ1bmN0aW9uKHgsIGVwc2lsb24pIHtcbiAgICByZXR1cm4gdGhpcy5zYW1wbGVDdXJ2ZVkodGhpcy5zb2x2ZUN1cnZlWCh4LCBlcHNpbG9uKSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBvaW50O1xuXG4vKipcbiAqIEEgc3RhbmRhbG9uZSBwb2ludCBnZW9tZXRyeSB3aXRoIHVzZWZ1bCBhY2Nlc3NvciwgY29tcGFyaXNvbiwgYW5kXG4gKiBtb2RpZmljYXRpb24gbWV0aG9kcy5cbiAqXG4gKiBAY2xhc3MgUG9pbnRcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IHRoZSB4LWNvb3JkaW5hdGUuIHRoaXMgY291bGQgYmUgbG9uZ2l0dWRlIG9yIHNjcmVlblxuICogcGl4ZWxzLCBvciBhbnkgb3RoZXIgc29ydCBvZiB1bml0LlxuICogQHBhcmFtIHtOdW1iZXJ9IHkgdGhlIHktY29vcmRpbmF0ZS4gdGhpcyBjb3VsZCBiZSBsYXRpdHVkZSBvciBzY3JlZW5cbiAqIHBpeGVscywgb3IgYW55IG90aGVyIHNvcnQgb2YgdW5pdC5cbiAqIEBleGFtcGxlXG4gKiB2YXIgcG9pbnQgPSBuZXcgUG9pbnQoLTc3LCAzOCk7XG4gKi9cbmZ1bmN0aW9uIFBvaW50KHgsIHkpIHtcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG59XG5cblBvaW50LnByb3RvdHlwZSA9IHtcblxuICAgIC8qKlxuICAgICAqIENsb25lIHRoaXMgcG9pbnQsIHJldHVybmluZyBhIG5ldyBwb2ludCB0aGF0IGNhbiBiZSBtb2RpZmllZFxuICAgICAqIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBvbGQgb25lLlxuICAgICAqIEByZXR1cm4ge1BvaW50fSB0aGUgY2xvbmVcbiAgICAgKi9cbiAgICBjbG9uZTogZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgUG9pbnQodGhpcy54LCB0aGlzLnkpOyB9LFxuXG4gICAgLyoqXG4gICAgICogQWRkIHRoaXMgcG9pbnQncyB4ICYgeSBjb29yZGluYXRlcyB0byBhbm90aGVyIHBvaW50LFxuICAgICAqIHlpZWxkaW5nIGEgbmV3IHBvaW50LlxuICAgICAqIEBwYXJhbSB7UG9pbnR9IHAgdGhlIG90aGVyIHBvaW50XG4gICAgICogQHJldHVybiB7UG9pbnR9IG91dHB1dCBwb2ludFxuICAgICAqL1xuICAgIGFkZDogICAgIGZ1bmN0aW9uKHApIHsgcmV0dXJuIHRoaXMuY2xvbmUoKS5fYWRkKHApOyB9LFxuXG4gICAgLyoqXG4gICAgICogU3VidHJhY3QgdGhpcyBwb2ludCdzIHggJiB5IGNvb3JkaW5hdGVzIHRvIGZyb20gcG9pbnQsXG4gICAgICogeWllbGRpbmcgYSBuZXcgcG9pbnQuXG4gICAgICogQHBhcmFtIHtQb2ludH0gcCB0aGUgb3RoZXIgcG9pbnRcbiAgICAgKiBAcmV0dXJuIHtQb2ludH0gb3V0cHV0IHBvaW50XG4gICAgICovXG4gICAgc3ViOiAgICAgZnVuY3Rpb24ocCkgeyByZXR1cm4gdGhpcy5jbG9uZSgpLl9zdWIocCk7IH0sXG5cbiAgICAvKipcbiAgICAgKiBNdWx0aXBseSB0aGlzIHBvaW50J3MgeCAmIHkgY29vcmRpbmF0ZXMgYnkgcG9pbnQsXG4gICAgICogeWllbGRpbmcgYSBuZXcgcG9pbnQuXG4gICAgICogQHBhcmFtIHtQb2ludH0gcCB0aGUgb3RoZXIgcG9pbnRcbiAgICAgKiBAcmV0dXJuIHtQb2ludH0gb3V0cHV0IHBvaW50XG4gICAgICovXG4gICAgbXVsdEJ5UG9pbnQ6ICAgIGZ1bmN0aW9uKHApIHsgcmV0dXJuIHRoaXMuY2xvbmUoKS5fbXVsdEJ5UG9pbnQocCk7IH0sXG5cbiAgICAvKipcbiAgICAgKiBEaXZpZGUgdGhpcyBwb2ludCdzIHggJiB5IGNvb3JkaW5hdGVzIGJ5IHBvaW50LFxuICAgICAqIHlpZWxkaW5nIGEgbmV3IHBvaW50LlxuICAgICAqIEBwYXJhbSB7UG9pbnR9IHAgdGhlIG90aGVyIHBvaW50XG4gICAgICogQHJldHVybiB7UG9pbnR9IG91dHB1dCBwb2ludFxuICAgICAqL1xuICAgIGRpdkJ5UG9pbnQ6ICAgICBmdW5jdGlvbihwKSB7IHJldHVybiB0aGlzLmNsb25lKCkuX2RpdkJ5UG9pbnQocCk7IH0sXG5cbiAgICAvKipcbiAgICAgKiBNdWx0aXBseSB0aGlzIHBvaW50J3MgeCAmIHkgY29vcmRpbmF0ZXMgYnkgYSBmYWN0b3IsXG4gICAgICogeWllbGRpbmcgYSBuZXcgcG9pbnQuXG4gICAgICogQHBhcmFtIHtQb2ludH0gayBmYWN0b3JcbiAgICAgKiBAcmV0dXJuIHtQb2ludH0gb3V0cHV0IHBvaW50XG4gICAgICovXG4gICAgbXVsdDogICAgZnVuY3Rpb24oaykgeyByZXR1cm4gdGhpcy5jbG9uZSgpLl9tdWx0KGspOyB9LFxuXG4gICAgLyoqXG4gICAgICogRGl2aWRlIHRoaXMgcG9pbnQncyB4ICYgeSBjb29yZGluYXRlcyBieSBhIGZhY3RvcixcbiAgICAgKiB5aWVsZGluZyBhIG5ldyBwb2ludC5cbiAgICAgKiBAcGFyYW0ge1BvaW50fSBrIGZhY3RvclxuICAgICAqIEByZXR1cm4ge1BvaW50fSBvdXRwdXQgcG9pbnRcbiAgICAgKi9cbiAgICBkaXY6ICAgICBmdW5jdGlvbihrKSB7IHJldHVybiB0aGlzLmNsb25lKCkuX2RpdihrKTsgfSxcblxuICAgIC8qKlxuICAgICAqIFJvdGF0ZSB0aGlzIHBvaW50IGFyb3VuZCB0aGUgMCwgMCBvcmlnaW4gYnkgYW4gYW5nbGUgYSxcbiAgICAgKiBnaXZlbiBpbiByYWRpYW5zXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IGEgYW5nbGUgdG8gcm90YXRlIGFyb3VuZCwgaW4gcmFkaWFuc1xuICAgICAqIEByZXR1cm4ge1BvaW50fSBvdXRwdXQgcG9pbnRcbiAgICAgKi9cbiAgICByb3RhdGU6ICBmdW5jdGlvbihhKSB7IHJldHVybiB0aGlzLmNsb25lKCkuX3JvdGF0ZShhKTsgfSxcblxuICAgIC8qKlxuICAgICAqIFJvdGF0ZSB0aGlzIHBvaW50IGFyb3VuZCBwIHBvaW50IGJ5IGFuIGFuZ2xlIGEsXG4gICAgICogZ2l2ZW4gaW4gcmFkaWFuc1xuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBhIGFuZ2xlIHRvIHJvdGF0ZSBhcm91bmQsIGluIHJhZGlhbnNcbiAgICAgKiBAcGFyYW0ge1BvaW50fSBwIFBvaW50IHRvIHJvdGF0ZSBhcm91bmRcbiAgICAgKiBAcmV0dXJuIHtQb2ludH0gb3V0cHV0IHBvaW50XG4gICAgICovXG4gICAgcm90YXRlQXJvdW5kOiAgZnVuY3Rpb24oYSxwKSB7IHJldHVybiB0aGlzLmNsb25lKCkuX3JvdGF0ZUFyb3VuZChhLHApOyB9LFxuXG4gICAgLyoqXG4gICAgICogTXVsdGlwbHkgdGhpcyBwb2ludCBieSBhIDR4MSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXhcbiAgICAgKiBAcGFyYW0ge0FycmF5PE51bWJlcj59IG0gdHJhbnNmb3JtYXRpb24gbWF0cml4XG4gICAgICogQHJldHVybiB7UG9pbnR9IG91dHB1dCBwb2ludFxuICAgICAqL1xuICAgIG1hdE11bHQ6IGZ1bmN0aW9uKG0pIHsgcmV0dXJuIHRoaXMuY2xvbmUoKS5fbWF0TXVsdChtKTsgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGlzIHBvaW50IGJ1dCBhcyBhIHVuaXQgdmVjdG9yIGZyb20gMCwgMCwgbWVhbmluZ1xuICAgICAqIHRoYXQgdGhlIGRpc3RhbmNlIGZyb20gdGhlIHJlc3VsdGluZyBwb2ludCB0byB0aGUgMCwgMFxuICAgICAqIGNvb3JkaW5hdGUgd2lsbCBiZSBlcXVhbCB0byAxIGFuZCB0aGUgYW5nbGUgZnJvbSB0aGUgcmVzdWx0aW5nXG4gICAgICogcG9pbnQgdG8gdGhlIDAsIDAgY29vcmRpbmF0ZSB3aWxsIGJlIHRoZSBzYW1lIGFzIGJlZm9yZS5cbiAgICAgKiBAcmV0dXJuIHtQb2ludH0gdW5pdCB2ZWN0b3IgcG9pbnRcbiAgICAgKi9cbiAgICB1bml0OiAgICBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuY2xvbmUoKS5fdW5pdCgpOyB9LFxuXG4gICAgLyoqXG4gICAgICogQ29tcHV0ZSBhIHBlcnBlbmRpY3VsYXIgcG9pbnQsIHdoZXJlIHRoZSBuZXcgeSBjb29yZGluYXRlXG4gICAgICogaXMgdGhlIG9sZCB4IGNvb3JkaW5hdGUgYW5kIHRoZSBuZXcgeCBjb29yZGluYXRlIGlzIHRoZSBvbGQgeVxuICAgICAqIGNvb3JkaW5hdGUgbXVsdGlwbGllZCBieSAtMVxuICAgICAqIEByZXR1cm4ge1BvaW50fSBwZXJwZW5kaWN1bGFyIHBvaW50XG4gICAgICovXG4gICAgcGVycDogICAgZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLmNsb25lKCkuX3BlcnAoKTsgfSxcblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIHZlcnNpb24gb2YgdGhpcyBwb2ludCB3aXRoIHRoZSB4ICYgeSBjb29yZGluYXRlc1xuICAgICAqIHJvdW5kZWQgdG8gaW50ZWdlcnMuXG4gICAgICogQHJldHVybiB7UG9pbnR9IHJvdW5kZWQgcG9pbnRcbiAgICAgKi9cbiAgICByb3VuZDogICBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuY2xvbmUoKS5fcm91bmQoKTsgfSxcblxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgbWFnaXR1ZGUgb2YgdGhpcyBwb2ludDogdGhpcyBpcyB0aGUgRXVjbGlkZWFuXG4gICAgICogZGlzdGFuY2UgZnJvbSB0aGUgMCwgMCBjb29yZGluYXRlIHRvIHRoaXMgcG9pbnQncyB4IGFuZCB5XG4gICAgICogY29vcmRpbmF0ZXMuXG4gICAgICogQHJldHVybiB7TnVtYmVyfSBtYWduaXR1ZGVcbiAgICAgKi9cbiAgICBtYWc6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCAqIHRoaXMueCArIHRoaXMueSAqIHRoaXMueSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEp1ZGdlIHdoZXRoZXIgdGhpcyBwb2ludCBpcyBlcXVhbCB0byBhbm90aGVyIHBvaW50LCByZXR1cm5pbmdcbiAgICAgKiB0cnVlIG9yIGZhbHNlLlxuICAgICAqIEBwYXJhbSB7UG9pbnR9IG90aGVyIHRoZSBvdGhlciBwb2ludFxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IHdoZXRoZXIgdGhlIHBvaW50cyBhcmUgZXF1YWxcbiAgICAgKi9cbiAgICBlcXVhbHM6IGZ1bmN0aW9uKG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnggPT09IG90aGVyLnggJiZcbiAgICAgICAgICAgICAgIHRoaXMueSA9PT0gb3RoZXIueTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBkaXN0YW5jZSBmcm9tIHRoaXMgcG9pbnQgdG8gYW5vdGhlciBwb2ludFxuICAgICAqIEBwYXJhbSB7UG9pbnR9IHAgdGhlIG90aGVyIHBvaW50XG4gICAgICogQHJldHVybiB7TnVtYmVyfSBkaXN0YW5jZVxuICAgICAqL1xuICAgIGRpc3Q6IGZ1bmN0aW9uKHApIHtcbiAgICAgICAgcmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RTcXIocCkpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGZyb20gdGhpcyBwb2ludCB0byBhbm90aGVyIHBvaW50LFxuICAgICAqIHdpdGhvdXQgdGhlIHNxdWFyZSByb290IHN0ZXAuIFVzZWZ1bCBpZiB5b3UncmUgY29tcGFyaW5nXG4gICAgICogcmVsYXRpdmUgZGlzdGFuY2VzLlxuICAgICAqIEBwYXJhbSB7UG9pbnR9IHAgdGhlIG90aGVyIHBvaW50XG4gICAgICogQHJldHVybiB7TnVtYmVyfSBkaXN0YW5jZVxuICAgICAqL1xuICAgIGRpc3RTcXI6IGZ1bmN0aW9uKHApIHtcbiAgICAgICAgdmFyIGR4ID0gcC54IC0gdGhpcy54LFxuICAgICAgICAgICAgZHkgPSBwLnkgLSB0aGlzLnk7XG4gICAgICAgIHJldHVybiBkeCAqIGR4ICsgZHkgKiBkeTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBhbmdsZSBmcm9tIHRoZSAwLCAwIGNvb3JkaW5hdGUgdG8gdGhpcyBwb2ludCwgaW4gcmFkaWFuc1xuICAgICAqIGNvb3JkaW5hdGVzLlxuICAgICAqIEByZXR1cm4ge051bWJlcn0gYW5nbGVcbiAgICAgKi9cbiAgICBhbmdsZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmF0YW4yKHRoaXMueSwgdGhpcy54KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBhbmdsZSBmcm9tIHRoaXMgcG9pbnQgdG8gYW5vdGhlciBwb2ludCwgaW4gcmFkaWFuc1xuICAgICAqIEBwYXJhbSB7UG9pbnR9IGIgdGhlIG90aGVyIHBvaW50XG4gICAgICogQHJldHVybiB7TnVtYmVyfSBhbmdsZVxuICAgICAqL1xuICAgIGFuZ2xlVG86IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguYXRhbjIodGhpcy55IC0gYi55LCB0aGlzLnggLSBiLngpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIGFuZ2xlIGJldHdlZW4gdGhpcyBwb2ludCBhbmQgYW5vdGhlciBwb2ludCwgaW4gcmFkaWFuc1xuICAgICAqIEBwYXJhbSB7UG9pbnR9IGIgdGhlIG90aGVyIHBvaW50XG4gICAgICogQHJldHVybiB7TnVtYmVyfSBhbmdsZVxuICAgICAqL1xuICAgIGFuZ2xlV2l0aDogZnVuY3Rpb24oYikge1xuICAgICAgICByZXR1cm4gdGhpcy5hbmdsZVdpdGhTZXAoYi54LCBiLnkpO1xuICAgIH0sXG5cbiAgICAvKlxuICAgICAqIEZpbmQgdGhlIGFuZ2xlIG9mIHRoZSB0d28gdmVjdG9ycywgc29sdmluZyB0aGUgZm9ybXVsYSBmb3JcbiAgICAgKiB0aGUgY3Jvc3MgcHJvZHVjdCBhIHggYiA9IHxhfHxifHNpbijDjsK4KSBmb3Igw47CuC5cbiAgICAgKiBAcGFyYW0ge051bWJlcn0geCB0aGUgeC1jb29yZGluYXRlXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IHkgdGhlIHktY29vcmRpbmF0ZVxuICAgICAqIEByZXR1cm4ge051bWJlcn0gdGhlIGFuZ2xlIGluIHJhZGlhbnNcbiAgICAgKi9cbiAgICBhbmdsZVdpdGhTZXA6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguYXRhbjIoXG4gICAgICAgICAgICB0aGlzLnggKiB5IC0gdGhpcy55ICogeCxcbiAgICAgICAgICAgIHRoaXMueCAqIHggKyB0aGlzLnkgKiB5KTtcbiAgICB9LFxuXG4gICAgX21hdE11bHQ6IGZ1bmN0aW9uKG0pIHtcbiAgICAgICAgdmFyIHggPSBtWzBdICogdGhpcy54ICsgbVsxXSAqIHRoaXMueSxcbiAgICAgICAgICAgIHkgPSBtWzJdICogdGhpcy54ICsgbVszXSAqIHRoaXMueTtcbiAgICAgICAgdGhpcy54ID0geDtcbiAgICAgICAgdGhpcy55ID0geTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIF9hZGQ6IGZ1bmN0aW9uKHApIHtcbiAgICAgICAgdGhpcy54ICs9IHAueDtcbiAgICAgICAgdGhpcy55ICs9IHAueTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIF9zdWI6IGZ1bmN0aW9uKHApIHtcbiAgICAgICAgdGhpcy54IC09IHAueDtcbiAgICAgICAgdGhpcy55IC09IHAueTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIF9tdWx0OiBmdW5jdGlvbihrKSB7XG4gICAgICAgIHRoaXMueCAqPSBrO1xuICAgICAgICB0aGlzLnkgKj0gaztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIF9kaXY6IGZ1bmN0aW9uKGspIHtcbiAgICAgICAgdGhpcy54IC89IGs7XG4gICAgICAgIHRoaXMueSAvPSBrO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgX211bHRCeVBvaW50OiBmdW5jdGlvbihwKSB7XG4gICAgICAgIHRoaXMueCAqPSBwLng7XG4gICAgICAgIHRoaXMueSAqPSBwLnk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICBfZGl2QnlQb2ludDogZnVuY3Rpb24ocCkge1xuICAgICAgICB0aGlzLnggLz0gcC54O1xuICAgICAgICB0aGlzLnkgLz0gcC55O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgX3VuaXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLl9kaXYodGhpcy5tYWcoKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICBfcGVycDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB5ID0gdGhpcy55O1xuICAgICAgICB0aGlzLnkgPSB0aGlzLng7XG4gICAgICAgIHRoaXMueCA9IC15O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgX3JvdGF0ZTogZnVuY3Rpb24oYW5nbGUpIHtcbiAgICAgICAgdmFyIGNvcyA9IE1hdGguY29zKGFuZ2xlKSxcbiAgICAgICAgICAgIHNpbiA9IE1hdGguc2luKGFuZ2xlKSxcbiAgICAgICAgICAgIHggPSBjb3MgKiB0aGlzLnggLSBzaW4gKiB0aGlzLnksXG4gICAgICAgICAgICB5ID0gc2luICogdGhpcy54ICsgY29zICogdGhpcy55O1xuICAgICAgICB0aGlzLnggPSB4O1xuICAgICAgICB0aGlzLnkgPSB5O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgX3JvdGF0ZUFyb3VuZDogZnVuY3Rpb24oYW5nbGUsIHApIHtcbiAgICAgICAgdmFyIGNvcyA9IE1hdGguY29zKGFuZ2xlKSxcbiAgICAgICAgICAgIHNpbiA9IE1hdGguc2luKGFuZ2xlKSxcbiAgICAgICAgICAgIHggPSBwLnggKyBjb3MgKiAodGhpcy54IC0gcC54KSAtIHNpbiAqICh0aGlzLnkgLSBwLnkpLFxuICAgICAgICAgICAgeSA9IHAueSArIHNpbiAqICh0aGlzLnggLSBwLngpICsgY29zICogKHRoaXMueSAtIHAueSk7XG4gICAgICAgIHRoaXMueCA9IHg7XG4gICAgICAgIHRoaXMueSA9IHk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICBfcm91bmQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnggPSBNYXRoLnJvdW5kKHRoaXMueCk7XG4gICAgICAgIHRoaXMueSA9IE1hdGgucm91bmQodGhpcy55KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDb25zdHJ1Y3QgYSBwb2ludCBmcm9tIGFuIGFycmF5IGlmIG5lY2Vzc2FyeSwgb3RoZXJ3aXNlIGlmIHRoZSBpbnB1dFxuICogaXMgYWxyZWFkeSBhIFBvaW50LCBvciBhbiB1bmtub3duIHR5cGUsIHJldHVybiBpdCB1bmNoYW5nZWRcbiAqIEBwYXJhbSB7QXJyYXk8TnVtYmVyPnxQb2ludHwqfSBhIGFueSBraW5kIG9mIGlucHV0IHZhbHVlXG4gKiBAcmV0dXJuIHtQb2ludH0gY29uc3RydWN0ZWQgcG9pbnQsIG9yIHBhc3NlZC10aHJvdWdoIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqIC8vIHRoaXNcbiAqIHZhciBwb2ludCA9IFBvaW50LmNvbnZlcnQoWzAsIDFdKTtcbiAqIC8vIGlzIGVxdWl2YWxlbnQgdG9cbiAqIHZhciBwb2ludCA9IG5ldyBQb2ludCgwLCAxKTtcbiAqL1xuUG9pbnQuY29udmVydCA9IGZ1bmN0aW9uIChhKSB7XG4gICAgaWYgKGEgaW5zdGFuY2VvZiBQb2ludCkge1xuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQb2ludChhWzBdLCBhWzFdKTtcbiAgICB9XG4gICAgcmV0dXJuIGE7XG59O1xuIiwiLy8gQGZsb3dcbi8qIGVzbGludC1lbnYgYnJvd3NlciAqL1xuaW1wb3J0IHR5cGUge1dpbmRvd30gZnJvbSAnLi4vLi4vdHlwZXMvd2luZG93JztcblxuZXhwb3J0IGRlZmF1bHQgKHNlbGY6IFdpbmRvdyk7XG4iLCIvLyBAZmxvd1xuXG4vKipcbiAqIERlZXBseSBjb21wYXJlcyB0d28gb2JqZWN0IGxpdGVyYWxzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGRlZXBFcXVhbChhOiA/bWl4ZWQsIGI6ID9taXhlZCk6IGJvb2xlYW4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGEpKSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShiKSB8fCBhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIWRlZXBFcXVhbChhW2ldLCBiW2ldKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGEgPT09ICdvYmplY3QnICYmIGEgIT09IG51bGwgJiYgYiAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoISh0eXBlb2YgYiA9PT0gJ29iamVjdCcpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhKTtcbiAgICAgICAgaWYgKGtleXMubGVuZ3RoICE9PSBPYmplY3Qua2V5cyhiKS5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gYSkge1xuICAgICAgICAgICAgaWYgKCFkZWVwRXF1YWwoYVtrZXldLCBiW2tleV0pKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBhID09PSBiO1xufVxuXG5leHBvcnQgZGVmYXVsdCBkZWVwRXF1YWw7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgVW5pdEJlemllciBmcm9tICdAbWFwYm94L3VuaXRiZXppZXInO1xuXG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgd2luZG93IGZyb20gJy4vd2luZG93JztcblxuaW1wb3J0IHR5cGUge0NhbGxiYWNrfSBmcm9tICcuLi90eXBlcy9jYWxsYmFjayc7XG5cbi8qKlxuICogQG1vZHVsZSB1dGlsXG4gKiBAcHJpdmF0ZVxuICovXG5cbi8qKlxuICogR2l2ZW4gYSB2YWx1ZSBgdGAgdGhhdCB2YXJpZXMgYmV0d2VlbiAwIGFuZCAxLCByZXR1cm5cbiAqIGFuIGludGVycG9sYXRpb24gZnVuY3Rpb24gdGhhdCBlYXNlcyBiZXR3ZWVuIDAgYW5kIDEgaW4gYSBwbGVhc2luZ1xuICogY3ViaWMgaW4tb3V0IGZhc2hpb24uXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVhc2VDdWJpY0luT3V0KHQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKHQgPD0gMCkgcmV0dXJuIDA7XG4gICAgaWYgKHQgPj0gMSkgcmV0dXJuIDE7XG4gICAgY29uc3QgdDIgPSB0ICogdCxcbiAgICAgICAgdDMgPSB0MiAqIHQ7XG4gICAgcmV0dXJuIDQgKiAodCA8IDAuNSA/IHQzIDogMyAqICh0IC0gdDIpICsgdDMgLSAwLjc1KTtcbn1cblxuLyoqXG4gKiBHaXZlbiBnaXZlbiAoeCwgeSksICh4MSwgeTEpIGNvbnRyb2wgcG9pbnRzIGZvciBhIGJlemllciBjdXJ2ZSxcbiAqIHJldHVybiBhIGZ1bmN0aW9uIHRoYXQgaW50ZXJwb2xhdGVzIGFsb25nIHRoYXQgY3VydmUuXG4gKlxuICogQHBhcmFtIHAxeCBjb250cm9sIHBvaW50IDEgeCBjb29yZGluYXRlXG4gKiBAcGFyYW0gcDF5IGNvbnRyb2wgcG9pbnQgMSB5IGNvb3JkaW5hdGVcbiAqIEBwYXJhbSBwMnggY29udHJvbCBwb2ludCAyIHggY29vcmRpbmF0ZVxuICogQHBhcmFtIHAyeSBjb250cm9sIHBvaW50IDIgeSBjb29yZGluYXRlXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmV6aWVyKHAxeDogbnVtYmVyLCBwMXk6IG51bWJlciwgcDJ4OiBudW1iZXIsIHAyeTogbnVtYmVyKTogKHQ6IG51bWJlcikgPT4gbnVtYmVyIHtcbiAgICBjb25zdCBiZXppZXIgPSBuZXcgVW5pdEJlemllcihwMXgsIHAxeSwgcDJ4LCBwMnkpO1xuICAgIHJldHVybiBmdW5jdGlvbih0OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIGJlemllci5zb2x2ZSh0KTtcbiAgICB9O1xufVxuXG4vKipcbiAqIEEgZGVmYXVsdCBiZXppZXItY3VydmUgcG93ZXJlZCBlYXNpbmcgZnVuY3Rpb24gd2l0aFxuICogY29udHJvbCBwb2ludHMgKDAuMjUsIDAuMSkgYW5kICgwLjI1LCAxKVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjb25zdCBlYXNlID0gYmV6aWVyKDAuMjUsIDAuMSwgMC4yNSwgMSk7XG5cbi8qKlxuICogY29uc3RyYWluIG4gdG8gdGhlIGdpdmVuIHJhbmdlIHZpYSBtaW4gKyBtYXhcbiAqXG4gKiBAcGFyYW0gbiB2YWx1ZVxuICogQHBhcmFtIG1pbiB0aGUgbWluaW11bSB2YWx1ZSB0byBiZSByZXR1cm5lZFxuICogQHBhcmFtIG1heCB0aGUgbWF4aW11bSB2YWx1ZSB0byBiZSByZXR1cm5lZFxuICogQHJldHVybnMgdGhlIGNsYW1wZWQgdmFsdWVcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGFtcChuOiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgubWluKG1heCwgTWF0aC5tYXgobWluLCBuKSk7XG59XG5cbi8qKlxuICogY29uc3RyYWluIG4gdG8gdGhlIGdpdmVuIHJhbmdlLCBleGNsdWRpbmcgdGhlIG1pbmltdW0sIHZpYSBtb2R1bGFyIGFyaXRobWV0aWNcbiAqXG4gKiBAcGFyYW0gbiB2YWx1ZVxuICogQHBhcmFtIG1pbiB0aGUgbWluaW11bSB2YWx1ZSB0byBiZSByZXR1cm5lZCwgZXhjbHVzaXZlXG4gKiBAcGFyYW0gbWF4IHRoZSBtYXhpbXVtIHZhbHVlIHRvIGJlIHJldHVybmVkLCBpbmNsdXNpdmVcbiAqIEByZXR1cm5zIGNvbnN0cmFpbmVkIG51bWJlclxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdyYXAobjogbnVtYmVyLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGQgPSBtYXggLSBtaW47XG4gICAgY29uc3QgdyA9ICgobiAtIG1pbikgJSBkICsgZCkgJSBkICsgbWluO1xuICAgIHJldHVybiAodyA9PT0gbWluKSA/IG1heCA6IHc7XG59XG5cbi8qXG4gKiBDYWxsIGFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBvbiBhbiBhcnJheSBvZiBhcmd1bWVudHMsXG4gKiBjYWxsaW5nIGBjYWxsYmFja2Agd2l0aCB0aGUgY29tcGxldGVkIHJlc3VsdHMgb2YgYWxsIGNhbGxzLlxuICpcbiAqIEBwYXJhbSBhcnJheSBpbnB1dCB0byBlYWNoIGNhbGwgb2YgdGhlIGFzeW5jIGZ1bmN0aW9uLlxuICogQHBhcmFtIGZuIGFuIGFzeW5jIGZ1bmN0aW9uIHdpdGggc2lnbmF0dXJlIChkYXRhLCBjYWxsYmFjaylcbiAqIEBwYXJhbSBjYWxsYmFjayBhIGNhbGxiYWNrIHJ1biBhZnRlciBhbGwgYXN5bmMgd29yayBpcyBkb25lLlxuICogY2FsbGVkIHdpdGggYW4gYXJyYXksIGNvbnRhaW5pbmcgdGhlIHJlc3VsdHMgb2YgZWFjaCBhc3luYyBjYWxsLlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzeW5jQWxsPEl0ZW0sIFJlc3VsdD4oXG4gICAgYXJyYXk6IEFycmF5PEl0ZW0+LFxuICAgIGZuOiAoaXRlbTogSXRlbSwgZm5DYWxsYmFjazogQ2FsbGJhY2s8UmVzdWx0PikgPT4gdm9pZCxcbiAgICBjYWxsYmFjazogQ2FsbGJhY2s8QXJyYXk8UmVzdWx0Pj5cbikge1xuICAgIGlmICghYXJyYXkubGVuZ3RoKSB7IHJldHVybiBjYWxsYmFjayhudWxsLCBbXSk7IH1cbiAgICBsZXQgcmVtYWluaW5nID0gYXJyYXkubGVuZ3RoO1xuICAgIGNvbnN0IHJlc3VsdHMgPSBuZXcgQXJyYXkoYXJyYXkubGVuZ3RoKTtcbiAgICBsZXQgZXJyb3IgPSBudWxsO1xuICAgIGFycmF5LmZvckVhY2goKGl0ZW0sIGkpID0+IHtcbiAgICAgICAgZm4oaXRlbSwgKGVyciwgcmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSBlcnJvciA9IGVycjtcbiAgICAgICAgICAgIHJlc3VsdHNbaV0gPSAoKHJlc3VsdDogYW55KTogUmVzdWx0KTsgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzIxMjNcbiAgICAgICAgICAgIGlmICgtLXJlbWFpbmluZyA9PT0gMCkgY2FsbGJhY2soZXJyb3IsIHJlc3VsdHMpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuLypcbiAqIFBvbHlmaWxsIGZvciBPYmplY3QudmFsdWVzLiBOb3QgZnVsbHkgc3BlYyBjb21wbGlhbnQsIGJ1dCB3ZSBkb24ndFxuICogbmVlZCBpdCB0byBiZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVzPFQ+KG9iajoge1trZXk6IHN0cmluZ106IFR9KTogQXJyYXk8VD4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGZvciAoY29uc3QgayBpbiBvYmopIHtcbiAgICAgICAgcmVzdWx0LnB1c2gob2JqW2tdKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLypcbiAqIENvbXB1dGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUga2V5cyBpbiBvbmUgb2JqZWN0IGFuZCB0aGUga2V5c1xuICogaW4gYW5vdGhlciBvYmplY3QuXG4gKlxuICogQHJldHVybnMga2V5cyBkaWZmZXJlbmNlXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24ga2V5c0RpZmZlcmVuY2U8UywgVD4ob2JqOiB7W2tleTogc3RyaW5nXTogU30sIG90aGVyOiB7W2tleTogc3RyaW5nXTogVH0pOiBBcnJheTxzdHJpbmc+IHtcbiAgICBjb25zdCBkaWZmZXJlbmNlID0gW107XG4gICAgZm9yIChjb25zdCBpIGluIG9iaikge1xuICAgICAgICBpZiAoIShpIGluIG90aGVyKSkge1xuICAgICAgICAgICAgZGlmZmVyZW5jZS5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkaWZmZXJlbmNlO1xufVxuXG4vKipcbiAqIEdpdmVuIGEgZGVzdGluYXRpb24gb2JqZWN0IGFuZCBvcHRpb25hbGx5IG1hbnkgc291cmNlIG9iamVjdHMsXG4gKiBjb3B5IGFsbCBwcm9wZXJ0aWVzIGZyb20gdGhlIHNvdXJjZSBvYmplY3RzIGludG8gdGhlIGRlc3RpbmF0aW9uLlxuICogVGhlIGxhc3Qgc291cmNlIG9iamVjdCBnaXZlbiBvdmVycmlkZXMgcHJvcGVydGllcyBmcm9tIHByZXZpb3VzXG4gKiBzb3VyY2Ugb2JqZWN0cy5cbiAqXG4gKiBAcGFyYW0gZGVzdCBkZXN0aW5hdGlvbiBvYmplY3RcbiAqIEBwYXJhbSBzb3VyY2VzIHNvdXJjZXMgZnJvbSB3aGljaCBwcm9wZXJ0aWVzIGFyZSBwdWxsZWRcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRlbmQoZGVzdDogT2JqZWN0LCAuLi5zb3VyY2VzOiBBcnJheTw/T2JqZWN0Pik6IE9iamVjdCB7XG4gICAgZm9yIChjb25zdCBzcmMgb2Ygc291cmNlcykge1xuICAgICAgICBmb3IgKGNvbnN0IGsgaW4gc3JjKSB7XG4gICAgICAgICAgICBkZXN0W2tdID0gc3JjW2tdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkZXN0O1xufVxuXG4vKipcbiAqIEdpdmVuIGFuIG9iamVjdCBhbmQgYSBudW1iZXIgb2YgcHJvcGVydGllcyBhcyBzdHJpbmdzLCByZXR1cm4gdmVyc2lvblxuICogb2YgdGhhdCBvYmplY3Qgd2l0aCBvbmx5IHRob3NlIHByb3BlcnRpZXMuXG4gKlxuICogQHBhcmFtIHNyYyB0aGUgb2JqZWN0XG4gKiBAcGFyYW0gcHJvcGVydGllcyBhbiBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBjaG9zZW5cbiAqIHRvIGFwcGVhciBvbiB0aGUgcmVzdWx0aW5nIG9iamVjdC5cbiAqIEByZXR1cm5zIG9iamVjdCB3aXRoIGxpbWl0ZWQgcHJvcGVydGllcy5cbiAqIEBleGFtcGxlXG4gKiB2YXIgZm9vID0geyBuYW1lOiAnQ2hhcmxpZScsIGFnZTogMTAgfTtcbiAqIHZhciBqdXN0TmFtZSA9IHBpY2soZm9vLCBbJ25hbWUnXSk7XG4gKiAvLyBqdXN0TmFtZSA9IHsgbmFtZTogJ0NoYXJsaWUnIH1cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwaWNrKHNyYzogT2JqZWN0LCBwcm9wZXJ0aWVzOiBBcnJheTxzdHJpbmc+KTogT2JqZWN0IHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgayA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgIGlmIChrIGluIHNyYykge1xuICAgICAgICAgICAgcmVzdWx0W2tdID0gc3JjW2tdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmxldCBpZCA9IDE7XG5cbi8qKlxuICogUmV0dXJuIGEgdW5pcXVlIG51bWVyaWMgaWQsIHN0YXJ0aW5nIGF0IDEgYW5kIGluY3JlbWVudGluZyB3aXRoXG4gKiBlYWNoIGNhbGwuXG4gKlxuICogQHJldHVybnMgdW5pcXVlIG51bWVyaWMgaWQuXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5pcXVlSWQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gaWQrKztcbn1cblxuLyoqXG4gKiBSZXR1cm4gYSByYW5kb20gVVVJRCAodjQpLiBUYWtlbiBmcm9tOiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9qZWQvOTgyODgzXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXVpZCgpOiBzdHJpbmcge1xuICAgIGZ1bmN0aW9uIGIoYSkge1xuICAgICAgICByZXR1cm4gYSA/IChhIF4gTWF0aC5yYW5kb20oKSAqIDE2ID4+IGEgLyA0KS50b1N0cmluZygxNikgOlxuICAgICAgICAvLyRGbG93Rml4TWU6IEZsb3cgZG9lc24ndCBsaWtlIHRoZSBpbXBsaWVkIGFycmF5IGxpdGVyYWwgY29udmVyc2lvbiBoZXJlXG4gICAgICAgICAgICAoWzFlN10gKyAtWzFlM10gKyAtNGUzICsgLThlMyArIC0xZTExKS5yZXBsYWNlKC9bMDE4XS9nLCBiKTtcbiAgICB9XG4gICAgcmV0dXJuIGIoKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhIHN0cmluZyB0byBtYXRjaCBVVUlEKHY0KSBvZiB0aGVcbiAqIGZvcm06IHh4eHh4eHh4LXh4eHgtNHh4eC1bODlhYl14eHgteHh4eHh4eHh4eHh4XG4gKiBAcGFyYW0gc3RyIHN0cmluZyB0byB2YWxpZGF0ZS5cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVV1aWQoc3RyOiA/c3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN0ciA/IC9eWzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzRdWzAtOWEtZl17M30tWzg5YWJdWzAtOWEtZl17M30tWzAtOWEtZl17MTJ9JC9pLnRlc3Qoc3RyKSA6IGZhbHNlO1xufVxuXG4vKipcbiAqIEdpdmVuIGFuIGFycmF5IG9mIG1lbWJlciBmdW5jdGlvbiBuYW1lcyBhcyBzdHJpbmdzLCByZXBsYWNlIGFsbCBvZiB0aGVtXG4gKiB3aXRoIGJvdW5kIHZlcnNpb25zIHRoYXQgd2lsbCBhbHdheXMgcmVmZXIgdG8gYGNvbnRleHRgIGFzIGB0aGlzYC4gVGhpc1xuICogaXMgdXNlZnVsIGZvciBjbGFzc2VzIHdoZXJlIG90aGVyd2lzZSBldmVudCBiaW5kaW5ncyB3b3VsZCByZWFzc2lnblxuICogYHRoaXNgIHRvIHRoZSBldmVudGVkIG9iamVjdCBvciBzb21lIG90aGVyIHZhbHVlOiB0aGlzIGxldHMgeW91IGVuc3VyZVxuICogdGhlIGB0aGlzYCB2YWx1ZSBhbHdheXMuXG4gKlxuICogQHBhcmFtIGZucyBsaXN0IG9mIG1lbWJlciBmdW5jdGlvbiBuYW1lc1xuICogQHBhcmFtIGNvbnRleHQgdGhlIGNvbnRleHQgdmFsdWVcbiAqIEBleGFtcGxlXG4gKiBmdW5jdGlvbiBNeUNsYXNzKCkge1xuICogICBiaW5kQWxsKFsnb250aW1lciddLCB0aGlzKTtcbiAqICAgdGhpcy5uYW1lID0gJ1RvbSc7XG4gKiB9XG4gKiBNeUNsYXNzLnByb3RvdHlwZS5vbnRpbWVyID0gZnVuY3Rpb24oKSB7XG4gKiAgIGFsZXJ0KHRoaXMubmFtZSk7XG4gKiB9O1xuICogdmFyIG15Q2xhc3MgPSBuZXcgTXlDbGFzcygpO1xuICogc2V0VGltZW91dChteUNsYXNzLm9udGltZXIsIDEwMCk7XG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmluZEFsbChmbnM6IEFycmF5PHN0cmluZz4sIGNvbnRleHQ6IE9iamVjdCk6IHZvaWQge1xuICAgIGZucy5mb3JFYWNoKChmbikgPT4ge1xuICAgICAgICBpZiAoIWNvbnRleHRbZm5dKSB7IHJldHVybjsgfVxuICAgICAgICBjb250ZXh0W2ZuXSA9IGNvbnRleHRbZm5dLmJpbmQoY29udGV4dCk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgc3RyaW5nIGVuZHMgd2l0aCBhIHBhcnRpY3VsYXIgc3Vic3RyaW5nXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuZHNXaXRoKHN0cmluZzogc3RyaW5nLCBzdWZmaXg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdHJpbmcuaW5kZXhPZihzdWZmaXgsIHN0cmluZy5sZW5ndGggLSBzdWZmaXgubGVuZ3RoKSAhPT0gLTE7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIG9iamVjdCBieSBtYXBwaW5nIGFsbCB0aGUgdmFsdWVzIG9mIGFuIGV4aXN0aW5nIG9iamVjdCB3aGlsZVxuICogcHJlc2VydmluZyB0aGVpciBrZXlzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXBPYmplY3QoaW5wdXQ6IE9iamVjdCwgaXRlcmF0b3I6IEZ1bmN0aW9uLCBjb250ZXh0PzogT2JqZWN0KTogT2JqZWN0IHtcbiAgICBjb25zdCBvdXRwdXQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBpbnB1dCkge1xuICAgICAgICBvdXRwdXRba2V5XSA9IGl0ZXJhdG9yLmNhbGwoY29udGV4dCB8fCB0aGlzLCBpbnB1dFtrZXldLCBrZXksIGlucHV0KTtcbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYW4gb2JqZWN0IGJ5IGZpbHRlcmluZyBvdXQgdmFsdWVzIG9mIGFuIGV4aXN0aW5nIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyT2JqZWN0KGlucHV0OiBPYmplY3QsIGl0ZXJhdG9yOiBGdW5jdGlvbiwgY29udGV4dD86IE9iamVjdCk6IE9iamVjdCB7XG4gICAgY29uc3Qgb3V0cHV0ID0ge307XG4gICAgZm9yIChjb25zdCBrZXkgaW4gaW5wdXQpIHtcbiAgICAgICAgaWYgKGl0ZXJhdG9yLmNhbGwoY29udGV4dCB8fCB0aGlzLCBpbnB1dFtrZXldLCBrZXksIGlucHV0KSkge1xuICAgICAgICAgICAgb3V0cHV0W2tleV0gPSBpbnB1dFtrZXldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG59XG5cbmltcG9ydCBkZWVwRXF1YWwgZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL2RlZXBfZXF1YWwnO1xuZXhwb3J0IHtkZWVwRXF1YWx9O1xuXG4vKipcbiAqIERlZXBseSBjbG9uZXMgdHdvIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb25lPFQ+KGlucHV0OiBUKTogVCB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAgIHJldHVybiBpbnB1dC5tYXAoY2xvbmUpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JyAmJiBpbnB1dCkge1xuICAgICAgICByZXR1cm4gKChtYXBPYmplY3QoaW5wdXQsIGNsb25lKTogYW55KTogVCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0d28gYXJyYXlzIGhhdmUgYXQgbGVhc3Qgb25lIGNvbW1vbiBlbGVtZW50LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcnJheXNJbnRlcnNlY3Q8VD4oYTogQXJyYXk8VD4sIGI6IEFycmF5PFQ+KTogYm9vbGVhbiB7XG4gICAgZm9yIChsZXQgbCA9IDA7IGwgPCBhLmxlbmd0aDsgbCsrKSB7XG4gICAgICAgIGlmIChiLmluZGV4T2YoYVtsXSkgPj0gMCkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBQcmludCBhIHdhcm5pbmcgbWVzc2FnZSB0byB0aGUgY29uc29sZSBhbmQgZW5zdXJlIGR1cGxpY2F0ZSB3YXJuaW5nIG1lc3NhZ2VzXG4gKiBhcmUgbm90IHByaW50ZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3Qgd2Fybk9uY2VIaXN0b3J5OiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn0gPSB7fTtcblxuZXhwb3J0IGZ1bmN0aW9uIHdhcm5PbmNlKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghd2Fybk9uY2VIaXN0b3J5W21lc3NhZ2VdKSB7XG4gICAgICAgIC8vIGNvbnNvbGUgaXNuJ3QgZGVmaW5lZCBpbiBzb21lIFdlYldvcmtlcnMsIHNlZSAjMjU1OFxuICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09IFwidW5kZWZpbmVkXCIpIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbiAgICAgICAgd2Fybk9uY2VIaXN0b3J5W21lc3NhZ2VdID0gdHJ1ZTtcbiAgICB9XG59XG5cbi8qKlxuICogSW5kaWNhdGVzIGlmIHRoZSBwcm92aWRlZCBQb2ludHMgYXJlIGluIGEgY291bnRlciBjbG9ja3dpc2UgKHRydWUpIG9yIGNsb2Nrd2lzZSAoZmFsc2UpIG9yZGVyXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm5zIHRydWUgZm9yIGEgY291bnRlciBjbG9ja3dpc2Ugc2V0IG9mIHBvaW50c1xuICovXG4vLyBodHRwOi8vYnJ5Y2Vib2UuY29tLzIwMDYvMTAvMjMvbGluZS1zZWdtZW50LWludGVyc2VjdGlvbi1hbGdvcml0aG0vXG5leHBvcnQgZnVuY3Rpb24gaXNDb3VudGVyQ2xvY2t3aXNlKGE6IFBvaW50LCBiOiBQb2ludCwgYzogUG9pbnQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKGMueSAtIGEueSkgKiAoYi54IC0gYS54KSA+IChiLnkgLSBhLnkpICogKGMueCAtIGEueCk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgc2lnbmVkIGFyZWEgZm9yIHRoZSBwb2x5Z29uIHJpbmcuICBQb3N0aXZlIGFyZWFzIGFyZSBleHRlcmlvciByaW5ncyBhbmRcbiAqIGhhdmUgYSBjbG9ja3dpc2Ugd2luZGluZy4gIE5lZ2F0aXZlIGFyZWFzIGFyZSBpbnRlcmlvciByaW5ncyBhbmQgaGF2ZSBhIGNvdW50ZXIgY2xvY2t3aXNlXG4gKiBvcmRlcmluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHJpbmcgRXh0ZXJpb3Igb3IgaW50ZXJpb3IgcmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlU2lnbmVkQXJlYShyaW5nOiBBcnJheTxQb2ludD4pOiBudW1iZXIge1xuICAgIGxldCBzdW0gPSAwO1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSByaW5nLmxlbmd0aCwgaiA9IGxlbiAtIDEsIHAxLCBwMjsgaSA8IGxlbjsgaiA9IGkrKykge1xuICAgICAgICBwMSA9IHJpbmdbaV07XG4gICAgICAgIHAyID0gcmluZ1tqXTtcbiAgICAgICAgc3VtICs9IChwMi54IC0gcDEueCkgKiAocDEueSArIHAyLnkpO1xuICAgIH1cbiAgICByZXR1cm4gc3VtO1xufVxuXG4vKipcbiAqIERldGVjdHMgY2xvc2VkIHBvbHlnb25zLCBmaXJzdCArIGxhc3QgcG9pbnQgYXJlIGVxdWFsXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBwb2ludHMgYXJyYXkgb2YgcG9pbnRzXG4gKiBAcmV0dXJuIHRydWUgaWYgdGhlIHBvaW50cyBhcmUgYSBjbG9zZWQgcG9seWdvblxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDbG9zZWRQb2x5Z29uKHBvaW50czogQXJyYXk8UG9pbnQ+KTogYm9vbGVhbiB7XG4gICAgLy8gSWYgaXQgaXMgMiBwb2ludHMgdGhhdCBhcmUgdGhlIHNhbWUgdGhlbiBpdCBpcyBhIHBvaW50XG4gICAgLy8gSWYgaXQgaXMgMyBwb2ludHMgd2l0aCBzdGFydCBhbmQgZW5kIHRoZSBzYW1lIHRoZW4gaXQgaXMgYSBsaW5lXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPCA0KVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBwMSA9IHBvaW50c1swXTtcbiAgICBjb25zdCBwMiA9IHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV07XG5cbiAgICBpZiAoTWF0aC5hYnMocDEueCAtIHAyLngpID4gMCB8fFxuICAgICAgICBNYXRoLmFicyhwMS55IC0gcDIueSkgPiAwKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBwb2x5Z29uIHNpbXBsaWZpY2F0aW9uIGNhbiBwcm9kdWNlIHBvbHlnb25zIHdpdGggemVybyBhcmVhIGFuZCBtb3JlIHRoYW4gMyBwb2ludHNcbiAgICByZXR1cm4gTWF0aC5hYnMoY2FsY3VsYXRlU2lnbmVkQXJlYShwb2ludHMpKSA+IDAuMDE7XG59XG5cbi8qKlxuICogQ29udmVydHMgc3BoZXJpY2FsIGNvb3JkaW5hdGVzIHRvIGNhcnRlc2lhbiBjb29yZGluYXRlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHNwaGVyaWNhbCBTcGhlcmljYWwgY29vcmRpbmF0ZXMsIGluIFtyYWRpYWwsIGF6aW11dGhhbCwgcG9sYXJdXG4gKiBAcmV0dXJuIGNhcnRlc2lhbiBjb29yZGluYXRlcyBpbiBbeCwgeSwgel1cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3BoZXJpY2FsVG9DYXJ0ZXNpYW4oW3IsIGF6aW11dGhhbCwgcG9sYXJdOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pOiB7eDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlcn0ge1xuICAgIC8vIFdlIGFic3RyYWN0IFwibm9ydGhcIi9cInVwXCIgKGNvbXBhc3Mtd2lzZSkgdG8gYmUgMMOCwrAgd2hlbiByZWFsbHkgdGhpcyBpcyA5MMOCwrAgKMOPwoAvMik6XG4gICAgLy8gY29ycmVjdCBmb3IgdGhhdCBoZXJlXG4gICAgYXppbXV0aGFsICs9IDkwO1xuXG4gICAgLy8gQ29udmVydCBhemltdXRoYWwgYW5kIHBvbGFyIGFuZ2xlcyB0byByYWRpYW5zXG4gICAgYXppbXV0aGFsICo9IE1hdGguUEkgLyAxODA7XG4gICAgcG9sYXIgKj0gTWF0aC5QSSAvIDE4MDtcblxuICAgIHJldHVybiB7XG4gICAgICAgIHg6IHIgKiBNYXRoLmNvcyhhemltdXRoYWwpICogTWF0aC5zaW4ocG9sYXIpLFxuICAgICAgICB5OiByICogTWF0aC5zaW4oYXppbXV0aGFsKSAqIE1hdGguc2luKHBvbGFyKSxcbiAgICAgICAgejogciAqIE1hdGguY29zKHBvbGFyKVxuICAgIH07XG59XG5cbi8qIGdsb2JhbCBzZWxmLCBXb3JrZXJHbG9iYWxTY29wZSAqL1xuLyoqXG4gKiAgUmV0dW5zIHRydWUgaWYgdGhlIHdoZW4gcnVuIGluIHRoZSB3ZWItd29ya2VyIGNvbnRleHQuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNXb3JrZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgZGF0YSBmcm9tICdDYWNoZS1Db250cm9sJyBoZWFkZXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gY2FjaGVDb250cm9sIFZhbHVlIG9mICdDYWNoZS1Db250cm9sJyBoZWFkZXJcbiAqIEByZXR1cm4gb2JqZWN0IGNvbnRhaW5pbmcgcGFyc2VkIGhlYWRlciBpbmZvLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNhY2hlQ29udHJvbChjYWNoZUNvbnRyb2w6IHN0cmluZyk6IE9iamVjdCB7XG4gICAgLy8gVGFrZW4gZnJvbSBbV3JlY2tdKGh0dHBzOi8vZ2l0aHViLmNvbS9oYXBpanMvd3JlY2spXG4gICAgY29uc3QgcmUgPSAvKD86XnwoPzpcXHMqXFwsXFxzKikpKFteXFx4MDAtXFx4MjBcXChcXCk8PkBcXCw7XFw6XFxcXFwiXFwvXFxbXFxdXFw/XFw9XFx7XFx9XFx4N0ZdKykoPzpcXD0oPzooW15cXHgwMC1cXHgyMFxcKFxcKTw+QFxcLDtcXDpcXFxcXCJcXC9cXFtcXF1cXD9cXD1cXHtcXH1cXHg3Rl0rKXwoPzpcXFwiKCg/OlteXCJcXFxcXXxcXFxcLikqKVxcXCIpKSk/L2c7XG5cbiAgICBjb25zdCBoZWFkZXIgPSB7fTtcbiAgICBjYWNoZUNvbnRyb2wucmVwbGFjZShyZSwgKCQwLCAkMSwgJDIsICQzKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gJDIgfHwgJDM7XG4gICAgICAgIGhlYWRlclskMV0gPSB2YWx1ZSA/IHZhbHVlLnRvTG93ZXJDYXNlKCkgOiB0cnVlO1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfSk7XG5cbiAgICBpZiAoaGVhZGVyWydtYXgtYWdlJ10pIHtcbiAgICAgICAgY29uc3QgbWF4QWdlID0gcGFyc2VJbnQoaGVhZGVyWydtYXgtYWdlJ10sIDEwKTtcbiAgICAgICAgaWYgKGlzTmFOKG1heEFnZSkpIGRlbGV0ZSBoZWFkZXJbJ21heC1hZ2UnXTtcbiAgICAgICAgZWxzZSBoZWFkZXJbJ21heC1hZ2UnXSA9IG1heEFnZTtcbiAgICB9XG5cbiAgICByZXR1cm4gaGVhZGVyO1xufVxuXG5sZXQgX2lzU2FmYXJpID0gbnVsbDtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgd2hlbiBydW4gaW4gV2ViS2l0IGRlcml2ZWQgYnJvd3NlcnMuXG4gKiBUaGlzIGlzIHVzZWQgYXMgYSB3b3JrYXJvdW5kIGZvciBhIG1lbW9yeSBsZWFrIGluIFNhZmFyaSBjYXVzZWQgYnkgdXNpbmcgVHJhbnNmZXJhYmxlIG9iamVjdHMgdG9cbiAqIHRyYW5zZmVyIGRhdGEgYmV0d2VlbiBXZWJXb3JrZXJzIGFuZCB0aGUgbWFpbiB0aHJlYWQuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvODc3MVxuICpcbiAqIFRoaXMgc2hvdWxkIGJlIHJlbW92ZWQgb25jZSB0aGUgdW5kZXJseWluZyBTYWZhcmkgaXNzdWUgaXMgZml4ZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBzY29wZSB7V2luZG93T3JXb3JrZXJHbG9iYWxTY29wZX0gU2luY2UgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJvdGggb24gdGhlIG1haW4gdGhyZWFkIGFuZCBXZWJXb3JrZXIgY29udGV4dCxcbiAqICAgICAgbGV0IHRoZSBjYWxsaW5nIHNjb3BlIHBhc3MgaW4gdGhlIGdsb2JhbCBzY29wZSBvYmplY3QuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2FmYXJpKHNjb3BlOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoX2lzU2FmYXJpID09IG51bGwpIHtcbiAgICAgICAgY29uc3QgdXNlckFnZW50ID0gc2NvcGUubmF2aWdhdG9yID8gc2NvcGUubmF2aWdhdG9yLnVzZXJBZ2VudCA6IG51bGw7XG4gICAgICAgIF9pc1NhZmFyaSA9ICEhc2NvcGUuc2FmYXJpIHx8XG4gICAgICAgICEhKHVzZXJBZ2VudCAmJiAoL1xcYihpUGFkfGlQaG9uZXxpUG9kKVxcYi8udGVzdCh1c2VyQWdlbnQpIHx8ICghIXVzZXJBZ2VudC5tYXRjaCgnU2FmYXJpJykgJiYgIXVzZXJBZ2VudC5tYXRjaCgnQ2hyb21lJykpKSk7XG4gICAgfVxuICAgIHJldHVybiBfaXNTYWZhcmk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdG9yYWdlQXZhaWxhYmxlKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2UgPSB3aW5kb3dbdHlwZV07XG4gICAgICAgIHN0b3JhZ2Uuc2V0SXRlbSgnX21hcGJveF90ZXN0XycsIDEpO1xuICAgICAgICBzdG9yYWdlLnJlbW92ZUl0ZW0oJ19tYXBib3hfdGVzdF8nKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG4vLyBUaGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIGZyb20gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1dpbmRvd0Jhc2U2NC9CYXNlNjRfZW5jb2RpbmdfYW5kX2RlY29kaW5nI1RoZV9Vbmljb2RlX1Byb2JsZW1cbi8vVW5pY29kZSBjb21wbGlhbnQgYmFzZTY0IGVuY29kZXIgZm9yIHN0cmluZ3NcbmV4cG9ydCBmdW5jdGlvbiBiNjRFbmNvZGVVbmljb2RlKHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5idG9hKFxuICAgICAgICBlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC8lKFswLTlBLUZdezJ9KS9nLFxuICAgICAgICAgICAgKG1hdGNoLCBwMSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKE51bWJlcignMHgnICsgcDEpKTsgLy9lc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAgICAgICB9XG4gICAgICAgIClcbiAgICApO1xufVxuXG4vLyBVbmljb2RlIGNvbXBsaWFudCBkZWNvZGVyIGZvciBiYXNlNjQtZW5jb2RlZCBzdHJpbmdzXG5leHBvcnQgZnVuY3Rpb24gYjY0RGVjb2RlVW5pY29kZShzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQod2luZG93LmF0b2Ioc3RyKS5zcGxpdCgnJykubWFwKChjKSA9PiB7XG4gICAgICAgIHJldHVybiAnJScgKyAoJzAwJyArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC0yKTsgLy9lc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgfSkuam9pbignJykpO1xufVxuIiwiLy8gQGZsb3cgc3RyaWN0XG5cbmltcG9ydCB3aW5kb3cgZnJvbSAnLi93aW5kb3cnO1xuaW1wb3J0IHR5cGUge0NhbmNlbGFibGV9IGZyb20gJy4uL3R5cGVzL2NhbmNlbGFibGUnO1xuXG5jb25zdCBub3cgPSB3aW5kb3cucGVyZm9ybWFuY2UgJiYgd2luZG93LnBlcmZvcm1hbmNlLm5vdyA/XG4gICAgd2luZG93LnBlcmZvcm1hbmNlLm5vdy5iaW5kKHdpbmRvdy5wZXJmb3JtYW5jZSkgOlxuICAgIERhdGUubm93LmJpbmQoRGF0ZSk7XG5cbmNvbnN0IHJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcbiAgICB3aW5kb3cubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8XG4gICAgd2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZSB8fFxuICAgIHdpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZTtcblxuY29uc3QgY2FuY2VsID0gd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lIHx8XG4gICAgd2luZG93Lm1vekNhbmNlbEFuaW1hdGlvbkZyYW1lIHx8XG4gICAgd2luZG93LndlYmtpdENhbmNlbEFuaW1hdGlvbkZyYW1lIHx8XG4gICAgd2luZG93Lm1zQ2FuY2VsQW5pbWF0aW9uRnJhbWU7XG5cbmxldCBsaW5rRWw7XG5cbmxldCByZWR1Y2VkTW90aW9uUXVlcnk6IE1lZGlhUXVlcnlMaXN0O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IGV4cG9ydGVkID0ge1xuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIGEgZnVuY3Rpb24gdGhhdCBvdXRwdXRzIG1pbGxpc2Vjb25kczogZWl0aGVyIHBlcmZvcm1hbmNlLm5vdygpXG4gICAgICogb3IgYSBmYWxsYmFjayB0byBEYXRlLm5vdygpXG4gICAgICovXG4gICAgbm93LFxuXG4gICAgZnJhbWUoZm46IChwYWludFN0YXJ0VGltZXN0YW1wOiBudW1iZXIpID0+IHZvaWQpOiBDYW5jZWxhYmxlIHtcbiAgICAgICAgY29uc3QgZnJhbWUgPSByYWYoZm4pO1xuICAgICAgICByZXR1cm4ge2NhbmNlbDogKCkgPT4gY2FuY2VsKGZyYW1lKX07XG4gICAgfSxcblxuICAgIGdldEltYWdlRGF0YShpbWc6IENhbnZhc0ltYWdlU291cmNlLCBwYWRkaW5nPzogbnVtYmVyID0gMCk6IEltYWdlRGF0YSB7XG4gICAgICAgIGNvbnN0IGNhbnZhcyA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIGNyZWF0ZSBjYW52YXMgMmQgY29udGV4dCcpO1xuICAgICAgICB9XG4gICAgICAgIGNhbnZhcy53aWR0aCA9IGltZy53aWR0aDtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IGltZy5oZWlnaHQ7XG4gICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKGltZywgMCwgMCwgaW1nLndpZHRoLCBpbWcuaGVpZ2h0KTtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQuZ2V0SW1hZ2VEYXRhKC1wYWRkaW5nLCAtcGFkZGluZywgaW1nLndpZHRoICsgMiAqIHBhZGRpbmcsIGltZy5oZWlnaHQgKyAyICogcGFkZGluZyk7XG4gICAgfSxcblxuICAgIHJlc29sdmVVUkwocGF0aDogc3RyaW5nKSB7XG4gICAgICAgIGlmICghbGlua0VsKSBsaW5rRWwgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICBsaW5rRWwuaHJlZiA9IHBhdGg7XG4gICAgICAgIHJldHVybiBsaW5rRWwuaHJlZjtcbiAgICB9LFxuXG4gICAgaGFyZHdhcmVDb25jdXJyZW5jeTogd2luZG93Lm5hdmlnYXRvci5oYXJkd2FyZUNvbmN1cnJlbmN5IHx8IDQsXG5cbiAgICBnZXQgZGV2aWNlUGl4ZWxSYXRpbygpIHsgcmV0dXJuIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvOyB9LFxuICAgIGdldCBwcmVmZXJzUmVkdWNlZE1vdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF3aW5kb3cubWF0Y2hNZWRpYSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvL0xhemlseSBpbml0aWFsaXplIG1lZGlhIHF1ZXJ5XG4gICAgICAgIGlmIChyZWR1Y2VkTW90aW9uUXVlcnkgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmVkdWNlZE1vdGlvblF1ZXJ5ID0gd2luZG93Lm1hdGNoTWVkaWEoJyhwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlZHVjZWRNb3Rpb25RdWVyeS5tYXRjaGVzO1xuICAgIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBleHBvcnRlZDtcbiIsIi8vIEBmbG93IHN0cmljdFxuXG50eXBlIENvbmZpZyA9IHt8XG4gIEFQSV9VUkw6IHN0cmluZyxcbiAgRVZFTlRTX1VSTDogP3N0cmluZyxcbiAgRkVFREJBQ0tfVVJMOiBzdHJpbmcsXG4gIFJFUVVJUkVfQUNDRVNTX1RPS0VOOiBib29sZWFuLFxuICBBQ0NFU1NfVE9LRU46ID9zdHJpbmcsXG4gIE1BWF9QQVJBTExFTF9JTUFHRV9SRVFVRVNUUzogbnVtYmVyXG58fTtcblxuY29uc3QgY29uZmlnOiBDb25maWcgPSB7XG4gICAgQVBJX1VSTDogJ2h0dHBzOi8vYXBpLm1hcGJveC5jb20nLFxuICAgIGdldCBFVkVOVFNfVVJMKCkge1xuICAgICAgICBpZiAoIXRoaXMuQVBJX1VSTCkgeyByZXR1cm4gbnVsbDsgfVxuICAgICAgICBpZiAodGhpcy5BUElfVVJMLmluZGV4T2YoJ2h0dHBzOi8vYXBpLm1hcGJveC5jbicpID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2h0dHBzOi8vZXZlbnRzLm1hcGJveC5jbi9ldmVudHMvdjInO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuQVBJX1VSTC5pbmRleE9mKCdodHRwczovL2FwaS5tYXBib3guY29tJykgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAnaHR0cHM6Ly9ldmVudHMubWFwYm94LmNvbS9ldmVudHMvdjInO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIEZFRURCQUNLX1VSTDogJ2h0dHBzOi8vYXBwcy5tYXBib3guY29tL2ZlZWRiYWNrJyxcbiAgICBSRVFVSVJFX0FDQ0VTU19UT0tFTjogdHJ1ZSxcbiAgICBBQ0NFU1NfVE9LRU46IG51bGwsXG4gICAgTUFYX1BBUkFMTEVMX0lNQUdFX1JFUVVFU1RTOiAxNlxufTtcblxuZXhwb3J0IGRlZmF1bHQgY29uZmlnO1xuIiwiLy8gQGZsb3cgc3RyaWN0XG5cbmltcG9ydCB3aW5kb3cgZnJvbSAnLi93aW5kb3cnO1xuXG5jb25zdCBleHBvcnRlZCA9IHtcbiAgICBzdXBwb3J0ZWQ6IGZhbHNlLFxuICAgIHRlc3RTdXBwb3J0XG59O1xuXG5leHBvcnQgZGVmYXVsdCBleHBvcnRlZDtcblxubGV0IGdsRm9yVGVzdGluZztcbmxldCB3ZWJwQ2hlY2tDb21wbGV0ZSA9IGZhbHNlO1xubGV0IHdlYnBJbWdUZXN0O1xubGV0IHdlYnBJbWdUZXN0T25sb2FkQ29tcGxldGUgPSBmYWxzZTtcblxuaWYgKHdpbmRvdy5kb2N1bWVudCkge1xuICAgIHdlYnBJbWdUZXN0ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuICAgIHdlYnBJbWdUZXN0Lm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoZ2xGb3JUZXN0aW5nKSB0ZXN0V2VicFRleHR1cmVVcGxvYWQoZ2xGb3JUZXN0aW5nKTtcbiAgICAgICAgZ2xGb3JUZXN0aW5nID0gbnVsbDtcbiAgICAgICAgd2VicEltZ1Rlc3RPbmxvYWRDb21wbGV0ZSA9IHRydWU7XG4gICAgfTtcbiAgICB3ZWJwSW1nVGVzdC5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHdlYnBDaGVja0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgZ2xGb3JUZXN0aW5nID0gbnVsbDtcbiAgICB9O1xuICAgIHdlYnBJbWdUZXN0LnNyYyA9ICdkYXRhOmltYWdlL3dlYnA7YmFzZTY0LFVrbEdSaDRBQUFCWFJVSlFWbEE0VEJFQUFBQXZBUUFBQUFmUS8vNzN2LytCaU9oL0FBQT0nO1xufVxuXG5mdW5jdGlvbiB0ZXN0U3VwcG9ydChnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0KSB7XG4gICAgaWYgKHdlYnBDaGVja0NvbXBsZXRlIHx8ICF3ZWJwSW1nVGVzdCkgcmV0dXJuO1xuXG4gICAgLy8gSFRNTEltYWdlRWxlbWVudC5jb21wbGV0ZSBpcyBzZXQgd2hlbiBhbiBpbWFnZSBpcyBkb25lIGxvYWRpbmcgaXQncyBzb3VyY2VcbiAgICAvLyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIGxvYWQgd2FzIHN1Y2Nlc3NmdWwgb3Igbm90LlxuICAgIC8vIEl0J3MgcG9zc2libGUgZm9yIGFuIGVycm9yIHRvIHNldCBIVE1MSW1hZ2VFbGVtZW50LmNvbXBsZXRlIHRvIHRydWUgd2hpY2ggd291bGQgdHJpZ2dlclxuICAgIC8vIHRlc3RXZWJwVGV4dHVyZVVwbG9hZCBhbmQgbWlzdGFrZW5seSBzZXQgZXhwb3J0ZWQuc3VwcG9ydGVkIHRvIHRydWUgaW4gYnJvd3NlcnMgd2hpY2ggZG9uJ3Qgc3VwcG9ydCB3ZWJwXG4gICAgLy8gVG8gYXZvaWQgdGhpcywgd2Ugc2V0IGEgZmxhZyBpbiB0aGUgaW1hZ2UncyBvbmxvYWQgaGFuZGxlciBhbmQgb25seSBjYWxsIHRlc3RXZWJwVGV4dHVyZVVwbG9hZFxuICAgIC8vIGFmdGVyIGEgc3VjY2Vzc2Z1bCBpbWFnZSBsb2FkIGV2ZW50LlxuICAgIGlmICh3ZWJwSW1nVGVzdE9ubG9hZENvbXBsZXRlKSB7XG4gICAgICAgIHRlc3RXZWJwVGV4dHVyZVVwbG9hZChnbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZ2xGb3JUZXN0aW5nID0gZ2w7XG5cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHRlc3RXZWJwVGV4dHVyZVVwbG9hZChnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0KSB7XG4gICAgLy8gRWRnZSAxOCBzdXBwb3J0cyBXZWJQIGJ1dCBub3QgdXBsb2FkaW5nIGEgV2ViUCBpbWFnZSB0byBhIGdsIHRleHR1cmVcbiAgICAvLyBUZXN0IHN1cHBvcnQgZm9yIHRoaXMgYmVmb3JlIGFsbG93aW5nIFdlYlAgaW1hZ2VzLlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy83NjcxXG4gICAgY29uc3QgdGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcbiAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTtcblxuICAgIHRyeSB7XG4gICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgd2VicEltZ1Rlc3QpO1xuXG4gICAgICAgIC8vIFRoZSBlcnJvciBkb2VzIG5vdCBnZXQgdHJpZ2dlcmVkIGluIEVkZ2UgaWYgdGhlIGNvbnRleHQgaXMgbG9zdFxuICAgICAgICBpZiAoZ2wuaXNDb250ZXh0TG9zdCgpKSByZXR1cm47XG5cbiAgICAgICAgZXhwb3J0ZWQuc3VwcG9ydGVkID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIENhdGNoIFwiVW5zcGVjaWZpZWQgRXJyb3IuXCIgaW4gRWRnZSAxOC5cbiAgICB9XG5cbiAgICBnbC5kZWxldGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgd2VicENoZWNrQ29tcGxldGUgPSB0cnVlO1xufVxuIiwiLy8gQGZsb3dcblxuLyoqKioqIFNUQVJUIFdBUk5JTkcgLSBJRiBZT1UgVVNFIFRISVMgQ09ERSBXSVRIIE1BUEJPWCBNQVBQSU5HIEFQSVMsIFJFTU9WQUwgT1JcbiogTU9ESUZJQ0FUSU9OIE9GIFRIRSBGT0xMT1dJTkcgQ09ERSBWSU9MQVRFUyBUSEUgTUFQQk9YIFRFUk1TIE9GIFNFUlZJQ0UgICoqKioqKlxuKiBUaGUgZm9sbG93aW5nIGNvZGUgaXMgdXNlZCB0byBhY2Nlc3MgTWFwYm94J3MgTWFwcGluZyBBUElzLiBSZW1vdmFsIG9yIG1vZGlmaWNhdGlvblxuKiBvZiB0aGlzIGNvZGUgd2hlbiB1c2VkIHdpdGggTWFwYm94J3MgTWFwcGluZyBBUElzIGNhbiByZXN1bHQgaW4gaGlnaGVyIGZlZXMgYW5kL29yXG4qIHRlcm1pbmF0aW9uIG9mIHlvdXIgYWNjb3VudCB3aXRoIE1hcGJveC5cbipcbiogVW5kZXIgdGhlIE1hcGJveCBUZXJtcyBvZiBTZXJ2aWNlLCB5b3UgbWF5IG5vdCB1c2UgdGhpcyBjb2RlIHRvIGFjY2VzcyBNYXBib3hcbiogTWFwcGluZyBBUElzIG90aGVyIHRoYW4gdGhyb3VnaCBNYXBib3ggU0RLcy5cbipcbiogVGhlIE1hcHBpbmcgQVBJcyBkb2N1bWVudGF0aW9uIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL2RvY3MubWFwYm94LmNvbS9hcGkvbWFwcy8jbWFwc1xuKiBhbmQgdGhlIE1hcGJveCBUZXJtcyBvZiBTZXJ2aWNlIGFyZSBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cubWFwYm94LmNvbS90b3MvXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbnR5cGUgU2t1VG9rZW5PYmplY3QgPSB7fFxuICAgIHRva2VuOiBzdHJpbmcsXG4gICAgdG9rZW5FeHBpcmVzQXQ6IG51bWJlclxufH07XG5cbmNvbnN0IFNLVV9JRCA9ICcwMSc7XG5cbmZ1bmN0aW9uIGNyZWF0ZVNrdVRva2VuKCk6IFNrdVRva2VuT2JqZWN0IHtcbiAgICAvLyBTS1VfSUQgYW5kIFRPS0VOX1ZFUlNJT04gYXJlIHNwZWNpZmllZCBieSBhbiBpbnRlcm5hbCBzY2hlbWEgYW5kIHNob3VsZCBub3QgY2hhbmdlXG4gICAgY29uc3QgVE9LRU5fVkVSU0lPTiA9ICcxJztcbiAgICBjb25zdCBiYXNlNjJjaGFycyA9ICcwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWic7XG4gICAgLy8gc2Vzc2lvblJhbmRvbWl6ZXIgaXMgYSByYW5kb21pemVkIDEwLWRpZ2l0IGJhc2UtNjIgbnVtYmVyXG4gICAgbGV0IHNlc3Npb25SYW5kb21pemVyID0gJyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4gICAgICAgIHNlc3Npb25SYW5kb21pemVyICs9IGJhc2U2MmNoYXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDYyKV07XG4gICAgfVxuICAgIGNvbnN0IGV4cGlyYXRpb24gPSAxMiAqIDYwICogNjAgKiAxMDAwOyAvLyAxMiBob3Vyc1xuICAgIGNvbnN0IHRva2VuID0gW1RPS0VOX1ZFUlNJT04sIFNLVV9JRCwgc2Vzc2lvblJhbmRvbWl6ZXJdLmpvaW4oJycpO1xuICAgIGNvbnN0IHRva2VuRXhwaXJlc0F0ID0gRGF0ZS5ub3coKSArIGV4cGlyYXRpb247XG5cbiAgICByZXR1cm4ge3Rva2VuLCB0b2tlbkV4cGlyZXNBdH07XG59XG5cbmV4cG9ydCB7Y3JlYXRlU2t1VG9rZW4sIFNLVV9JRH07XG5cbi8qKioqKiBFTkQgV0FSTklORyAtIFJFTU9WQUwgT1IgTU9ESUZJQ0FUSU9OIE9GIFRIRVxuUFJFQ0VESU5HIENPREUgVklPTEFURVMgVEhFIE1BUEJPWCBURVJNUyBPRiBTRVJWSUNFICAqKioqKiovXG4iLCIvLyBAZmxvd1xuXG4vKioqKiogU1RBUlQgV0FSTklORyAtIElGIFlPVSBVU0UgVEhJUyBDT0RFIFdJVEggTUFQQk9YIE1BUFBJTkcgQVBJUywgUkVNT1ZBTCBPUlxuKiBNT0RJRklDQVRJT04gT0YgVEhFIEZPTExPV0lORyBDT0RFIFZJT0xBVEVTIFRIRSBNQVBCT1ggVEVSTVMgT0YgU0VSVklDRSAgKioqKioqXG4qIFRoZSBmb2xsb3dpbmcgY29kZSBpcyB1c2VkIHRvIGFjY2VzcyBNYXBib3gncyBNYXBwaW5nIEFQSXMuIFJlbW92YWwgb3IgbW9kaWZpY2F0aW9uXG4qIG9mIHRoaXMgY29kZSB3aGVuIHVzZWQgd2l0aCBNYXBib3gncyBNYXBwaW5nIEFQSXMgY2FuIHJlc3VsdCBpbiBoaWdoZXIgZmVlcyBhbmQvb3JcbiogdGVybWluYXRpb24gb2YgeW91ciBhY2NvdW50IHdpdGggTWFwYm94LlxuKlxuKiBVbmRlciB0aGUgTWFwYm94IFRlcm1zIG9mIFNlcnZpY2UsIHlvdSBtYXkgbm90IHVzZSB0aGlzIGNvZGUgdG8gYWNjZXNzIE1hcGJveFxuKiBNYXBwaW5nIEFQSXMgb3RoZXIgdGhhbiB0aHJvdWdoIE1hcGJveCBTREtzLlxuKlxuKiBUaGUgTWFwcGluZyBBUElzIGRvY3VtZW50YXRpb24gaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vZG9jcy5tYXBib3guY29tL2FwaS9tYXBzLyNtYXBzXG4qIGFuZCB0aGUgTWFwYm94IFRlcm1zIG9mIFNlcnZpY2UgYXJlIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5tYXBib3guY29tL3Rvcy9cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuaW1wb3J0IGNvbmZpZyBmcm9tICcuL2NvbmZpZyc7XG5cbmltcG9ydCBicm93c2VyIGZyb20gJy4vYnJvd3Nlcic7XG5pbXBvcnQgd2luZG93IGZyb20gJy4vd2luZG93JztcbmltcG9ydCB3ZWJwU3VwcG9ydGVkIGZyb20gJy4vd2VicF9zdXBwb3J0ZWQnO1xuaW1wb3J0IHtjcmVhdGVTa3VUb2tlbiwgU0tVX0lEfSBmcm9tICcuL3NrdV90b2tlbic7XG5pbXBvcnQge3ZlcnNpb24gYXMgc2RrVmVyc2lvbn0gZnJvbSAnLi4vLi4vcGFja2FnZS5qc29uJztcbmltcG9ydCB7dXVpZCwgdmFsaWRhdGVVdWlkLCBzdG9yYWdlQXZhaWxhYmxlLCBiNjREZWNvZGVVbmljb2RlLCBiNjRFbmNvZGVVbmljb2RlLCB3YXJuT25jZSwgZXh0ZW5kfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHtwb3N0RGF0YSwgUmVzb3VyY2VUeXBlfSBmcm9tICcuL2FqYXgnO1xuXG5pbXBvcnQgdHlwZSB7UmVxdWVzdFBhcmFtZXRlcnN9IGZyb20gJy4vYWpheCc7XG5pbXBvcnQgdHlwZSB7Q2FuY2VsYWJsZX0gZnJvbSAnLi4vdHlwZXMvY2FuY2VsYWJsZSc7XG5pbXBvcnQgdHlwZSB7VGlsZUpTT059IGZyb20gJy4uL3R5cGVzL3RpbGVqc29uJztcblxudHlwZSBSZXNvdXJjZVR5cGVFbnVtID0gJEtleXM8dHlwZW9mIFJlc291cmNlVHlwZT47XG5leHBvcnQgdHlwZSBSZXF1ZXN0VHJhbnNmb3JtRnVuY3Rpb24gPSAodXJsOiBzdHJpbmcsIHJlc291cmNlVHlwZT86IFJlc291cmNlVHlwZUVudW0pID0+IFJlcXVlc3RQYXJhbWV0ZXJzO1xuXG50eXBlIFVybE9iamVjdCA9IHt8XG4gICAgcHJvdG9jb2w6IHN0cmluZyxcbiAgICBhdXRob3JpdHk6IHN0cmluZyxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgcGFyYW1zOiBBcnJheTxzdHJpbmc+XG58fTtcblxuZXhwb3J0IGNsYXNzIFJlcXVlc3RNYW5hZ2VyIHtcbiAgICBfc2t1VG9rZW46IHN0cmluZztcbiAgICBfc2t1VG9rZW5FeHBpcmVzQXQ6IG51bWJlcjtcbiAgICBfdHJhbnNmb3JtUmVxdWVzdEZuOiA/UmVxdWVzdFRyYW5zZm9ybUZ1bmN0aW9uO1xuICAgIF9jdXN0b21BY2Nlc3NUb2tlbjogP3N0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKHRyYW5zZm9ybVJlcXVlc3RGbj86IFJlcXVlc3RUcmFuc2Zvcm1GdW5jdGlvbiwgY3VzdG9tQWNjZXNzVG9rZW4/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fdHJhbnNmb3JtUmVxdWVzdEZuID0gdHJhbnNmb3JtUmVxdWVzdEZuO1xuICAgICAgICB0aGlzLl9jdXN0b21BY2Nlc3NUb2tlbiA9IGN1c3RvbUFjY2Vzc1Rva2VuO1xuICAgICAgICB0aGlzLl9jcmVhdGVTa3VUb2tlbigpO1xuICAgIH1cblxuICAgIF9jcmVhdGVTa3VUb2tlbigpIHtcbiAgICAgICAgY29uc3Qgc2t1VG9rZW4gPSBjcmVhdGVTa3VUb2tlbigpO1xuICAgICAgICB0aGlzLl9za3VUb2tlbiA9IHNrdVRva2VuLnRva2VuO1xuICAgICAgICB0aGlzLl9za3VUb2tlbkV4cGlyZXNBdCA9IHNrdVRva2VuLnRva2VuRXhwaXJlc0F0O1xuICAgIH1cblxuICAgIF9pc1NrdVRva2VuRXhwaXJlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIERhdGUubm93KCkgPiB0aGlzLl9za3VUb2tlbkV4cGlyZXNBdDtcbiAgICB9XG5cbiAgICB0cmFuc2Zvcm1SZXF1ZXN0KHVybDogc3RyaW5nLCB0eXBlOiBSZXNvdXJjZVR5cGVFbnVtKSB7XG4gICAgICAgIGlmICh0aGlzLl90cmFuc2Zvcm1SZXF1ZXN0Rm4pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc2Zvcm1SZXF1ZXN0Rm4odXJsLCB0eXBlKSB8fCB7dXJsfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7dXJsfTtcbiAgICB9XG5cbiAgICBub3JtYWxpemVTdHlsZVVSTCh1cmw6IHN0cmluZywgYWNjZXNzVG9rZW4/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIWlzTWFwYm94VVJMKHVybCkpIHJldHVybiB1cmw7XG4gICAgICAgIGNvbnN0IHVybE9iamVjdCA9IHBhcnNlVXJsKHVybCk7XG4gICAgICAgIHVybE9iamVjdC5wYXRoID0gYC9zdHlsZXMvdjEke3VybE9iamVjdC5wYXRofWA7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYWtlQVBJVVJMKHVybE9iamVjdCwgdGhpcy5fY3VzdG9tQWNjZXNzVG9rZW4gfHwgYWNjZXNzVG9rZW4pO1xuICAgIH1cblxuICAgIG5vcm1hbGl6ZUdseXBoc1VSTCh1cmw6IHN0cmluZywgYWNjZXNzVG9rZW4/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIWlzTWFwYm94VVJMKHVybCkpIHJldHVybiB1cmw7XG4gICAgICAgIGNvbnN0IHVybE9iamVjdCA9IHBhcnNlVXJsKHVybCk7XG4gICAgICAgIHVybE9iamVjdC5wYXRoID0gYC9mb250cy92MSR7dXJsT2JqZWN0LnBhdGh9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ha2VBUElVUkwodXJsT2JqZWN0LCB0aGlzLl9jdXN0b21BY2Nlc3NUb2tlbiB8fCBhY2Nlc3NUb2tlbik7XG4gICAgfVxuXG4gICAgbm9ybWFsaXplU291cmNlVVJMKHVybDogc3RyaW5nLCBhY2Nlc3NUb2tlbj86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmICghaXNNYXBib3hVUkwodXJsKSkgcmV0dXJuIHVybDtcbiAgICAgICAgY29uc3QgdXJsT2JqZWN0ID0gcGFyc2VVcmwodXJsKTtcbiAgICAgICAgdXJsT2JqZWN0LnBhdGggPSBgL3Y0LyR7dXJsT2JqZWN0LmF1dGhvcml0eX0uanNvbmA7XG4gICAgICAgIC8vIFRpbGVKU09OIHJlcXVlc3RzIG5lZWQgYSBzZWN1cmUgZmxhZyBhcHBlbmRlZCB0byB0aGVpciBVUkxzIHNvXG4gICAgICAgIC8vIHRoYXQgdGhlIHNlcnZlciBrbm93cyB0byBzZW5kIFNTTC1pZmllZCByZXNvdXJjZSByZWZlcmVuY2VzLlxuICAgICAgICB1cmxPYmplY3QucGFyYW1zLnB1c2goJ3NlY3VyZScpO1xuICAgICAgICByZXR1cm4gdGhpcy5fbWFrZUFQSVVSTCh1cmxPYmplY3QsIHRoaXMuX2N1c3RvbUFjY2Vzc1Rva2VuIHx8IGFjY2Vzc1Rva2VuKTtcbiAgICB9XG5cbiAgICBub3JtYWxpemVTcHJpdGVVUkwodXJsOiBzdHJpbmcsIGZvcm1hdDogc3RyaW5nLCBleHRlbnNpb246IHN0cmluZywgYWNjZXNzVG9rZW4/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCB1cmxPYmplY3QgPSBwYXJzZVVybCh1cmwpO1xuICAgICAgICBpZiAoIWlzTWFwYm94VVJMKHVybCkpIHtcbiAgICAgICAgICAgIHVybE9iamVjdC5wYXRoICs9IGAke2Zvcm1hdH0ke2V4dGVuc2lvbn1gO1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdFVybCh1cmxPYmplY3QpO1xuICAgICAgICB9XG4gICAgICAgIHVybE9iamVjdC5wYXRoID0gYC9zdHlsZXMvdjEke3VybE9iamVjdC5wYXRofS9zcHJpdGUke2Zvcm1hdH0ke2V4dGVuc2lvbn1gO1xuICAgICAgICByZXR1cm4gdGhpcy5fbWFrZUFQSVVSTCh1cmxPYmplY3QsIHRoaXMuX2N1c3RvbUFjY2Vzc1Rva2VuIHx8IGFjY2Vzc1Rva2VuKTtcbiAgICB9XG5cbiAgICBub3JtYWxpemVUaWxlVVJMKHRpbGVVUkw6IHN0cmluZywgdGlsZVNpemU/OiA/bnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzU2t1VG9rZW5FeHBpcmVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZVNrdVRva2VuKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGlsZVVSTCAmJiAhaXNNYXBib3hVUkwodGlsZVVSTCkpIHJldHVybiB0aWxlVVJMO1xuXG4gICAgICAgIGNvbnN0IHVybE9iamVjdCA9IHBhcnNlVXJsKHRpbGVVUkwpO1xuICAgICAgICBjb25zdCBpbWFnZUV4dGVuc2lvblJlID0gLyhcXC4ocG5nfGpwZylcXGQqKSg/PSQpLztcbiAgICAgICAgY29uc3QgdGlsZVVSTEFQSVByZWZpeFJlID0gL14uK1xcL3Y0XFwvLztcblxuICAgICAgICAvLyBUaGUgdjQgbWFwYm94IHRpbGUgQVBJIHN1cHBvcnRzIDUxMng1MTIgaW1hZ2UgdGlsZXMgb25seSB3aGVuIEAyeFxuICAgICAgICAvLyBpcyBhcHBlbmRlZCB0byB0aGUgdGlsZSBVUkwuIElmIGB0aWxlU2l6ZTogNTEyYCBpcyBzcGVjaWZpZWQgZm9yXG4gICAgICAgIC8vIGEgTWFwYm94IHJhc3RlciBzb3VyY2UgZm9yY2UgdGhlIEAyeCBzdWZmaXggZXZlbiBpZiBhIG5vbiBoaWRwaSBkZXZpY2UuXG4gICAgICAgIGNvbnN0IHN1ZmZpeCA9IGJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbyA+PSAyIHx8IHRpbGVTaXplID09PSA1MTIgPyAnQDJ4JyA6ICcnO1xuICAgICAgICBjb25zdCBleHRlbnNpb24gPSB3ZWJwU3VwcG9ydGVkLnN1cHBvcnRlZCA/ICcud2VicCcgOiAnJDEnO1xuICAgICAgICB1cmxPYmplY3QucGF0aCA9IHVybE9iamVjdC5wYXRoLnJlcGxhY2UoaW1hZ2VFeHRlbnNpb25SZSwgYCR7c3VmZml4fSR7ZXh0ZW5zaW9ufWApO1xuICAgICAgICB1cmxPYmplY3QucGF0aCA9IHVybE9iamVjdC5wYXRoLnJlcGxhY2UodGlsZVVSTEFQSVByZWZpeFJlLCAnLycpO1xuICAgICAgICB1cmxPYmplY3QucGF0aCA9IGAvdjQke3VybE9iamVjdC5wYXRofWA7XG5cbiAgICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSB0aGlzLl9jdXN0b21BY2Nlc3NUb2tlbiB8fCBnZXRBY2Nlc3NUb2tlbih1cmxPYmplY3QucGFyYW1zKSB8fCBjb25maWcuQUNDRVNTX1RPS0VOO1xuICAgICAgICBpZiAoY29uZmlnLlJFUVVJUkVfQUNDRVNTX1RPS0VOICYmIGFjY2Vzc1Rva2VuICYmIHRoaXMuX3NrdVRva2VuKSB7XG4gICAgICAgICAgICB1cmxPYmplY3QucGFyYW1zLnB1c2goYHNrdT0ke3RoaXMuX3NrdVRva2VufWApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX21ha2VBUElVUkwodXJsT2JqZWN0LCBhY2Nlc3NUb2tlbik7XG4gICAgfVxuXG4gICAgY2Fub25pY2FsaXplVGlsZVVSTCh1cmw6IHN0cmluZywgcmVtb3ZlQWNjZXNzVG9rZW46IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IFwiL3Y0L1wiO1xuICAgICAgICAvLyBtYXRjaGVzIGFueSBmaWxlIGV4dGVuc2lvbiBzcGVjaWZpZWQgYnkgYSBkb3QgYW5kIG9uZSBvciBtb3JlIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzXG4gICAgICAgIGNvbnN0IGV4dGVuc2lvblJlID0gL1xcLltcXHddKyQvO1xuXG4gICAgICAgIGNvbnN0IHVybE9iamVjdCA9IHBhcnNlVXJsKHVybCk7XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGFyZSBkZWFsaW5nIHdpdGggYSB2YWxpZCBNYXBib3ggdGlsZSBVUkwuXG4gICAgICAgIC8vIEhhcyB0byBiZWdpbiB3aXRoIC92NC8sIHdpdGggYSB2YWxpZCBmaWxlbmFtZSArIGV4dGVuc2lvblxuICAgICAgICBpZiAoIXVybE9iamVjdC5wYXRoLm1hdGNoKC8oXlxcL3Y0XFwvKS8pIHx8ICF1cmxPYmplY3QucGF0aC5tYXRjaChleHRlbnNpb25SZSkpIHtcbiAgICAgICAgICAgIC8vIE5vdCBhIHByb3BlciBNYXBib3ggdGlsZSBVUkwuXG4gICAgICAgICAgICByZXR1cm4gdXJsO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlYXNzZW1ibGUgdGhlIGNhbm9uaWNhbCBVUkwgZnJvbSB0aGUgcGFydHMgd2UndmUgcGFyc2VkIGJlZm9yZS5cbiAgICAgICAgbGV0IHJlc3VsdCA9IFwibWFwYm94Oi8vdGlsZXMvXCI7XG4gICAgICAgIHJlc3VsdCArPSAgdXJsT2JqZWN0LnBhdGgucmVwbGFjZSh2ZXJzaW9uLCAnJyk7XG5cbiAgICAgICAgLy8gQXBwZW5kIHRoZSBxdWVyeSBzdHJpbmcsIG1pbnVzIHRoZSBhY2Nlc3MgdG9rZW4gcGFyYW1ldGVyLlxuICAgICAgICBsZXQgcGFyYW1zID0gdXJsT2JqZWN0LnBhcmFtcztcbiAgICAgICAgaWYgKHJlbW92ZUFjY2Vzc1Rva2VuKSB7XG4gICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuZmlsdGVyKHAgPT4gIXAubWF0Y2goL15hY2Nlc3NfdG9rZW49LykpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJhbXMubGVuZ3RoKSByZXN1bHQgKz0gYD8ke3BhcmFtcy5qb2luKCcmJyl9YDtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBjYW5vbmljYWxpemVUaWxlc2V0KHRpbGVKU09OOiBUaWxlSlNPTiwgc291cmNlVVJMPzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHJlbW92ZUFjY2Vzc1Rva2VuID0gc291cmNlVVJMID8gaXNNYXBib3hVUkwoc291cmNlVVJMKSA6IGZhbHNlO1xuICAgICAgICBjb25zdCBjYW5vbmljYWwgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCB1cmwgb2YgdGlsZUpTT04udGlsZXMgfHwgW10pIHtcbiAgICAgICAgICAgIGlmIChpc01hcGJveEhUVFBVUkwodXJsKSkge1xuICAgICAgICAgICAgICAgIGNhbm9uaWNhbC5wdXNoKHRoaXMuY2Fub25pY2FsaXplVGlsZVVSTCh1cmwsIHJlbW92ZUFjY2Vzc1Rva2VuKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbm9uaWNhbC5wdXNoKHVybCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbm9uaWNhbDtcbiAgICB9XG5cbiAgICBfbWFrZUFQSVVSTCh1cmxPYmplY3Q6IFVybE9iamVjdCwgYWNjZXNzVG9rZW46IHN0cmluZyB8IG51bGwgfCB2b2lkKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgaGVscCA9ICdTZWUgaHR0cHM6Ly93d3cubWFwYm94LmNvbS9hcGktZG9jdW1lbnRhdGlvbi8jYWNjZXNzLXRva2Vucy1hbmQtdG9rZW4tc2NvcGVzJztcbiAgICAgICAgY29uc3QgYXBpVXJsT2JqZWN0ID0gcGFyc2VVcmwoY29uZmlnLkFQSV9VUkwpO1xuICAgICAgICB1cmxPYmplY3QucHJvdG9jb2wgPSBhcGlVcmxPYmplY3QucHJvdG9jb2w7XG4gICAgICAgIHVybE9iamVjdC5hdXRob3JpdHkgPSBhcGlVcmxPYmplY3QuYXV0aG9yaXR5O1xuXG4gICAgICAgIGlmIChhcGlVcmxPYmplY3QucGF0aCAhPT0gJy8nKSB7XG4gICAgICAgICAgICB1cmxPYmplY3QucGF0aCA9IGAke2FwaVVybE9iamVjdC5wYXRofSR7dXJsT2JqZWN0LnBhdGh9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY29uZmlnLlJFUVVJUkVfQUNDRVNTX1RPS0VOKSByZXR1cm4gZm9ybWF0VXJsKHVybE9iamVjdCk7XG5cbiAgICAgICAgYWNjZXNzVG9rZW4gPSBhY2Nlc3NUb2tlbiB8fCBjb25maWcuQUNDRVNTX1RPS0VOO1xuICAgICAgICBpZiAoIWFjY2Vzc1Rva2VuKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBbiBBUEkgYWNjZXNzIHRva2VuIGlzIHJlcXVpcmVkIHRvIHVzZSBNYXBib3ggR0wuICR7aGVscH1gKTtcbiAgICAgICAgaWYgKGFjY2Vzc1Rva2VuWzBdID09PSAncycpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVzZSBhIHB1YmxpYyBhY2Nlc3MgdG9rZW4gKHBrLiopIHdpdGggTWFwYm94IEdMLCBub3QgYSBzZWNyZXQgYWNjZXNzIHRva2VuIChzay4qKS4gJHtoZWxwfWApO1xuXG4gICAgICAgIHVybE9iamVjdC5wYXJhbXMgPSB1cmxPYmplY3QucGFyYW1zLmZpbHRlcigoZCkgPT4gZC5pbmRleE9mKCdhY2Nlc3NfdG9rZW4nKSA9PT0gLTEpO1xuICAgICAgICB1cmxPYmplY3QucGFyYW1zLnB1c2goYGFjY2Vzc190b2tlbj0ke2FjY2Vzc1Rva2VufWApO1xuICAgICAgICByZXR1cm4gZm9ybWF0VXJsKHVybE9iamVjdCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpc01hcGJveFVSTCh1cmw6IHN0cmluZykge1xuICAgIHJldHVybiB1cmwuaW5kZXhPZignbWFwYm94OicpID09PSAwO1xufVxuXG5jb25zdCBtYXBib3hIVFRQVVJMUmUgPSAvXigoaHR0cHM/Oik/XFwvXFwvKT8oW15cXC9dK1xcLik/bWFwYm94XFwuYyhufG9tKShcXC98XFw/fCQpL2k7XG5mdW5jdGlvbiBpc01hcGJveEhUVFBVUkwodXJsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbWFwYm94SFRUUFVSTFJlLnRlc3QodXJsKTtcbn1cblxuZnVuY3Rpb24gaGFzQ2FjaGVEZWZlYXRpbmdTa3UodXJsOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdXJsLmluZGV4T2YoJ3NrdT0nKSA+IDAgJiYgaXNNYXBib3hIVFRQVVJMKHVybCk7XG59XG5cbmZ1bmN0aW9uIGdldEFjY2Vzc1Rva2VuKHBhcmFtczogQXJyYXk8c3RyaW5nPik6IHN0cmluZyB8IG51bGwge1xuICAgIGZvciAoY29uc3QgcGFyYW0gb2YgcGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gcGFyYW0ubWF0Y2goL15hY2Nlc3NfdG9rZW49KC4qKSQvKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hbMV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IHVybFJlID0gL14oXFx3Kyk6XFwvXFwvKFteLz9dKikoXFwvW14/XSspP1xcPz8oLispPy87XG5cbmZ1bmN0aW9uIHBhcnNlVXJsKHVybDogc3RyaW5nKTogVXJsT2JqZWN0IHtcbiAgICBjb25zdCBwYXJ0cyA9IHVybC5tYXRjaCh1cmxSZSk7XG4gICAgaWYgKCFwYXJ0cykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBwYXJzZSBVUkwgb2JqZWN0Jyk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHByb3RvY29sOiBwYXJ0c1sxXSxcbiAgICAgICAgYXV0aG9yaXR5OiBwYXJ0c1syXSxcbiAgICAgICAgcGF0aDogcGFydHNbM10gfHwgJy8nLFxuICAgICAgICBwYXJhbXM6IHBhcnRzWzRdID8gcGFydHNbNF0uc3BsaXQoJyYnKSA6IFtdXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VXJsKG9iajogVXJsT2JqZWN0KTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJhbXMgPSBvYmoucGFyYW1zLmxlbmd0aCA/IGA/JHtvYmoucGFyYW1zLmpvaW4oJyYnKX1gIDogJyc7XG4gICAgcmV0dXJuIGAke29iai5wcm90b2NvbH06Ly8ke29iai5hdXRob3JpdHl9JHtvYmoucGF0aH0ke3BhcmFtc31gO1xufVxuXG5leHBvcnQge2lzTWFwYm94VVJMLCBpc01hcGJveEhUVFBVUkwsIGhhc0NhY2hlRGVmZWF0aW5nU2t1fTtcblxuY29uc3QgdGVsZW1FdmVudEtleSA9ICdtYXBib3guZXZlbnREYXRhJztcblxuZnVuY3Rpb24gcGFyc2VBY2Nlc3NUb2tlbihhY2Nlc3NUb2tlbjogP3N0cmluZykge1xuICAgIGlmICghYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcGFydHMgPSBhY2Nlc3NUb2tlbi5zcGxpdCgnLicpO1xuICAgIGlmICghcGFydHMgfHwgcGFydHMubGVuZ3RoICE9PSAzKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGpzb25EYXRhID0gSlNPTi5wYXJzZShiNjREZWNvZGVVbmljb2RlKHBhcnRzWzFdKSk7XG4gICAgICAgIHJldHVybiBqc29uRGF0YTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cblxudHlwZSBUZWxlbWV0cnlFdmVudFR5cGUgPSAnYXBwVXNlclR1cm5zdGlsZScgfCAnbWFwLmxvYWQnO1xuXG5jbGFzcyBUZWxlbWV0cnlFdmVudCB7XG4gICAgZXZlbnREYXRhOiBhbnk7XG4gICAgYW5vbklkOiA/c3RyaW5nO1xuICAgIHF1ZXVlOiBBcnJheTxhbnk+O1xuICAgIHR5cGU6IFRlbGVtZXRyeUV2ZW50VHlwZTtcbiAgICBwZW5kaW5nUmVxdWVzdDogP0NhbmNlbGFibGU7XG4gICAgX2N1c3RvbUFjY2Vzc1Rva2VuOiA/c3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IodHlwZTogVGVsZW1ldHJ5RXZlbnRUeXBlKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMuYW5vbklkID0gbnVsbDtcbiAgICAgICAgdGhpcy5ldmVudERhdGEgPSB7fTtcbiAgICAgICAgdGhpcy5xdWV1ZSA9IFtdO1xuICAgICAgICB0aGlzLnBlbmRpbmdSZXF1ZXN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBnZXRTdG9yYWdlS2V5KGRvbWFpbjogP3N0cmluZykge1xuICAgICAgICBjb25zdCB0b2tlbkRhdGEgPSBwYXJzZUFjY2Vzc1Rva2VuKGNvbmZpZy5BQ0NFU1NfVE9LRU4pO1xuICAgICAgICBsZXQgdSA9ICcnO1xuICAgICAgICBpZiAodG9rZW5EYXRhICYmIHRva2VuRGF0YVsndSddKSB7XG4gICAgICAgICAgICB1ID0gYjY0RW5jb2RlVW5pY29kZSh0b2tlbkRhdGFbJ3UnXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1ID0gY29uZmlnLkFDQ0VTU19UT0tFTiB8fCAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZG9tYWluID9cbiAgICAgICAgICAgIGAke3RlbGVtRXZlbnRLZXl9LiR7ZG9tYWlufToke3V9YCA6XG4gICAgICAgICAgICBgJHt0ZWxlbUV2ZW50S2V5fToke3V9YDtcbiAgICB9XG5cbiAgICBmZXRjaEV2ZW50RGF0YSgpIHtcbiAgICAgICAgY29uc3QgaXNMb2NhbFN0b3JhZ2VBdmFpbGFibGUgPSBzdG9yYWdlQXZhaWxhYmxlKCdsb2NhbFN0b3JhZ2UnKTtcbiAgICAgICAgY29uc3Qgc3RvcmFnZUtleSA9IHRoaXMuZ2V0U3RvcmFnZUtleSgpO1xuICAgICAgICBjb25zdCB1dWlkS2V5ID0gdGhpcy5nZXRTdG9yYWdlS2V5KCd1dWlkJyk7XG5cbiAgICAgICAgaWYgKGlzTG9jYWxTdG9yYWdlQXZhaWxhYmxlKSB7XG4gICAgICAgICAgICAvL1JldHJpZXZlIGNhY2hlZCBkYXRhXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oc3RvcmFnZUtleSk7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ldmVudERhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHV1aWQgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0odXVpZEtleSk7XG4gICAgICAgICAgICAgICAgaWYgKHV1aWQpIHRoaXMuYW5vbklkID0gdXVpZDtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB3YXJuT25jZSgnVW5hYmxlIHRvIHJlYWQgZnJvbSBMb2NhbFN0b3JhZ2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNhdmVFdmVudERhdGEoKSB7XG4gICAgICAgIGNvbnN0IGlzTG9jYWxTdG9yYWdlQXZhaWxhYmxlID0gc3RvcmFnZUF2YWlsYWJsZSgnbG9jYWxTdG9yYWdlJyk7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2VLZXkgPSAgdGhpcy5nZXRTdG9yYWdlS2V5KCk7XG4gICAgICAgIGNvbnN0IHV1aWRLZXkgPSB0aGlzLmdldFN0b3JhZ2VLZXkoJ3V1aWQnKTtcbiAgICAgICAgaWYgKGlzTG9jYWxTdG9yYWdlQXZhaWxhYmxlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh1dWlkS2V5LCB0aGlzLmFub25JZCk7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZXZlbnREYXRhKS5sZW5ndGggPj0gMSkge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oc3RvcmFnZUtleSwgSlNPTi5zdHJpbmdpZnkodGhpcy5ldmVudERhdGEpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgd2Fybk9uY2UoJ1VuYWJsZSB0byB3cml0ZSB0byBMb2NhbFN0b3JhZ2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgcHJvY2Vzc1JlcXVlc3RzKF86ID9zdHJpbmcpIHt9XG5cbiAgICAvKlxuICAgICogSWYgYW55IGV2ZW50IGRhdGEgc2hvdWxkIGJlIHBlcnNpc3RlZCBhZnRlciB0aGUgUE9TVCByZXF1ZXN0LCB0aGUgY2FsbGJhY2sgc2hvdWxkIG1vZGlmeSBldmVudERhdGFgXG4gICAgKiB0byB0aGUgdmFsdWVzIHRoYXQgc2hvdWxkIGJlIHNhdmVkLiBGb3IgdGhpcyByZWFzb24sIHRoZSBjYWxsYmFjayBzaG91bGQgYmUgaW52b2tlZCBwcmlvciB0byB0aGUgY2FsbFxuICAgICogdG8gVGVsZW1ldHJ5RXZlbnQjc2F2ZURhdGFcbiAgICAqL1xuICAgIHBvc3RFdmVudCh0aW1lc3RhbXA6IG51bWJlciwgYWRkaXRpb25hbFBheWxvYWQ6IHtbXzogc3RyaW5nXTogYW55fSwgY2FsbGJhY2s6IChlcnI6ID9FcnJvcikgPT4gdm9pZCwgY3VzdG9tQWNjZXNzVG9rZW4/OiA/c3RyaW5nKSB7XG4gICAgICAgIGlmICghY29uZmlnLkVWRU5UU19VUkwpIHJldHVybjtcbiAgICAgICAgY29uc3QgZXZlbnRzVXJsT2JqZWN0OiBVcmxPYmplY3QgPSBwYXJzZVVybChjb25maWcuRVZFTlRTX1VSTCk7XG4gICAgICAgIGV2ZW50c1VybE9iamVjdC5wYXJhbXMucHVzaChgYWNjZXNzX3Rva2VuPSR7Y3VzdG9tQWNjZXNzVG9rZW4gfHwgY29uZmlnLkFDQ0VTU19UT0tFTiB8fCAnJ31gKTtcblxuICAgICAgICBjb25zdCBwYXlsb2FkOiBPYmplY3QgPSB7XG4gICAgICAgICAgICBldmVudDogdGhpcy50eXBlLFxuICAgICAgICAgICAgY3JlYXRlZDogbmV3IERhdGUodGltZXN0YW1wKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgc2RrSWRlbnRpZmllcjogJ21hcGJveC1nbC1qcycsXG4gICAgICAgICAgICBzZGtWZXJzaW9uLFxuICAgICAgICAgICAgc2t1SWQ6IFNLVV9JRCxcbiAgICAgICAgICAgIHVzZXJJZDogdGhpcy5hbm9uSWRcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBmaW5hbFBheWxvYWQgPSBhZGRpdGlvbmFsUGF5bG9hZCA/IGV4dGVuZChwYXlsb2FkLCBhZGRpdGlvbmFsUGF5bG9hZCkgOiBwYXlsb2FkO1xuICAgICAgICBjb25zdCByZXF1ZXN0OiBSZXF1ZXN0UGFyYW1ldGVycyA9IHtcbiAgICAgICAgICAgIHVybDogZm9ybWF0VXJsKGV2ZW50c1VybE9iamVjdCksXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICd0ZXh0L3BsYWluJyAvL1NraXAgdGhlIHByZS1mbGlnaHQgT1BUSU9OUyByZXF1ZXN0XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoW2ZpbmFsUGF5bG9hZF0pXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5wZW5kaW5nUmVxdWVzdCA9IHBvc3REYXRhKHJlcXVlc3QsIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nUmVxdWVzdCA9IG51bGw7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgICAgICB0aGlzLnNhdmVFdmVudERhdGEoKTtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1JlcXVlc3RzKGN1c3RvbUFjY2Vzc1Rva2VuKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcXVldWVSZXF1ZXN0KGV2ZW50OiBudW1iZXIgfCB7aWQ6IG51bWJlciwgdGltZXN0YW1wOiBudW1iZXJ9LCBjdXN0b21BY2Nlc3NUb2tlbj86ID9zdHJpbmcpIHtcbiAgICAgICAgdGhpcy5xdWV1ZS5wdXNoKGV2ZW50KTtcbiAgICAgICAgdGhpcy5wcm9jZXNzUmVxdWVzdHMoY3VzdG9tQWNjZXNzVG9rZW4pO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1hcExvYWRFdmVudCBleHRlbmRzIFRlbGVtZXRyeUV2ZW50IHtcbiAgICArc3VjY2Vzczoge1tfOiBudW1iZXJdOiBib29sZWFufTtcbiAgICBza3VUb2tlbjogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdtYXAubG9hZCcpO1xuICAgICAgICB0aGlzLnN1Y2Nlc3MgPSB7fTtcbiAgICAgICAgdGhpcy5za3VUb2tlbiA9ICcnO1xuICAgIH1cblxuICAgIHBvc3RNYXBMb2FkRXZlbnQodGlsZVVybHM6IEFycmF5PHN0cmluZz4sIG1hcElkOiBudW1iZXIsIHNrdVRva2VuOiBzdHJpbmcsIGN1c3RvbUFjY2Vzc1Rva2VuOiBzdHJpbmcpIHtcbiAgICAgICAgLy9FbmFibGVkIG9ubHkgd2hlbiBNYXBib3ggQWNjZXNzIFRva2VuIGlzIHNldCBhbmQgYSBzb3VyY2UgdXNlc1xuICAgICAgICAvLyBtYXBib3ggdGlsZXMuXG4gICAgICAgIHRoaXMuc2t1VG9rZW4gPSBza3VUb2tlbjtcblxuICAgICAgICBpZiAoY29uZmlnLkVWRU5UU19VUkwgJiZcbiAgICAgICAgICAgIGN1c3RvbUFjY2Vzc1Rva2VuIHx8IGNvbmZpZy5BQ0NFU1NfVE9LRU4gJiZcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkodGlsZVVybHMpICYmXG4gICAgICAgICAgICB0aWxlVXJscy5zb21lKHVybCA9PiBpc01hcGJveFVSTCh1cmwpIHx8IGlzTWFwYm94SFRUUFVSTCh1cmwpKSkge1xuICAgICAgICAgICAgdGhpcy5xdWV1ZVJlcXVlc3Qoe2lkOiBtYXBJZCwgdGltZXN0YW1wOiBEYXRlLm5vdygpfSwgY3VzdG9tQWNjZXNzVG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvY2Vzc1JlcXVlc3RzKGN1c3RvbUFjY2Vzc1Rva2VuPzogP3N0cmluZykge1xuICAgICAgICBpZiAodGhpcy5wZW5kaW5nUmVxdWVzdCB8fCB0aGlzLnF1ZXVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgICAgICBjb25zdCB7aWQsIHRpbWVzdGFtcH0gPSB0aGlzLnF1ZXVlLnNoaWZ0KCk7XG5cbiAgICAgICAgLy8gT25seSBvbmUgbG9hZCBldmVudCBzaG91bGQgZmlyZSBwZXIgbWFwXG4gICAgICAgIGlmIChpZCAmJiB0aGlzLnN1Y2Nlc3NbaWRdKSByZXR1cm47XG5cbiAgICAgICAgaWYgKCF0aGlzLmFub25JZCkge1xuICAgICAgICAgICAgdGhpcy5mZXRjaEV2ZW50RGF0YSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF2YWxpZGF0ZVV1aWQodGhpcy5hbm9uSWQpKSB7XG4gICAgICAgICAgICB0aGlzLmFub25JZCA9IHV1aWQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucG9zdEV2ZW50KHRpbWVzdGFtcCwge3NrdVRva2VuOiB0aGlzLnNrdVRva2VufSwgKGVycikgPT4ge1xuICAgICAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoaWQpIHRoaXMuc3VjY2Vzc1tpZF0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBjdXN0b21BY2Nlc3NUb2tlbik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVHVybnN0aWxlRXZlbnQgZXh0ZW5kcyBUZWxlbWV0cnlFdmVudCB7XG4gICAgY29uc3RydWN0b3IoY3VzdG9tQWNjZXNzVG9rZW4/OiA/c3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKCdhcHBVc2VyVHVybnN0aWxlJyk7XG4gICAgICAgIHRoaXMuX2N1c3RvbUFjY2Vzc1Rva2VuID0gY3VzdG9tQWNjZXNzVG9rZW47XG4gICAgfVxuXG4gICAgcG9zdFR1cm5zdGlsZUV2ZW50KHRpbGVVcmxzOiBBcnJheTxzdHJpbmc+LCBjdXN0b21BY2Nlc3NUb2tlbj86ID9zdHJpbmcpIHtcbiAgICAgICAgLy9FbmFibGVkIG9ubHkgd2hlbiBNYXBib3ggQWNjZXNzIFRva2VuIGlzIHNldCBhbmQgYSBzb3VyY2UgdXNlc1xuICAgICAgICAvLyBtYXBib3ggdGlsZXMuXG4gICAgICAgIGlmIChjb25maWcuRVZFTlRTX1VSTCAmJlxuICAgICAgICAgICAgY29uZmlnLkFDQ0VTU19UT0tFTiAmJlxuICAgICAgICAgICAgQXJyYXkuaXNBcnJheSh0aWxlVXJscykgJiZcbiAgICAgICAgICAgIHRpbGVVcmxzLnNvbWUodXJsID0+IGlzTWFwYm94VVJMKHVybCkgfHwgaXNNYXBib3hIVFRQVVJMKHVybCkpKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXVlUmVxdWVzdChEYXRlLm5vdygpLCBjdXN0b21BY2Nlc3NUb2tlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm9jZXNzUmVxdWVzdHMoY3VzdG9tQWNjZXNzVG9rZW4/OiA/c3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLnBlbmRpbmdSZXF1ZXN0IHx8IHRoaXMucXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuYW5vbklkIHx8ICF0aGlzLmV2ZW50RGF0YS5sYXN0U3VjY2VzcyB8fCAhdGhpcy5ldmVudERhdGEudG9rZW5VKSB7XG4gICAgICAgICAgICAvL1JldHJpZXZlIGNhY2hlZCBkYXRhXG4gICAgICAgICAgICB0aGlzLmZldGNoRXZlbnREYXRhKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0b2tlbkRhdGEgPSBwYXJzZUFjY2Vzc1Rva2VuKGNvbmZpZy5BQ0NFU1NfVE9LRU4pO1xuICAgICAgICBjb25zdCB0b2tlblUgPSB0b2tlbkRhdGEgPyB0b2tlbkRhdGFbJ3UnXSA6IGNvbmZpZy5BQ0NFU1NfVE9LRU47XG4gICAgICAgIC8vUmVzZXQgZXZlbnQgZGF0YSBjYWNoZSBpZiB0aGUgYWNjZXNzIHRva2VuIG93bmVyIGNoYW5nZWQuXG4gICAgICAgIGxldCBkdWVGb3JFdmVudCA9IHRva2VuVSAhPT0gdGhpcy5ldmVudERhdGEudG9rZW5VO1xuXG4gICAgICAgIGlmICghdmFsaWRhdGVVdWlkKHRoaXMuYW5vbklkKSkge1xuICAgICAgICAgICAgdGhpcy5hbm9uSWQgPSB1dWlkKCk7XG4gICAgICAgICAgICBkdWVGb3JFdmVudCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXh0VXBkYXRlID0gdGhpcy5xdWV1ZS5zaGlmdCgpO1xuICAgICAgICAvLyBSZWNvcmQgdHVybnN0aWxlIGV2ZW50IG9uY2UgcGVyIGNhbGVuZGFyIGRheS5cbiAgICAgICAgaWYgKHRoaXMuZXZlbnREYXRhLmxhc3RTdWNjZXNzKSB7XG4gICAgICAgICAgICBjb25zdCBsYXN0VXBkYXRlID0gbmV3IERhdGUodGhpcy5ldmVudERhdGEubGFzdFN1Y2Nlc3MpO1xuICAgICAgICAgICAgY29uc3QgbmV4dERhdGUgPSBuZXcgRGF0ZShuZXh0VXBkYXRlKTtcbiAgICAgICAgICAgIGNvbnN0IGRheXNFbGFwc2VkID0gKG5leHRVcGRhdGUgLSB0aGlzLmV2ZW50RGF0YS5sYXN0U3VjY2VzcykgLyAoMjQgKiA2MCAqIDYwICogMTAwMCk7XG4gICAgICAgICAgICBkdWVGb3JFdmVudCA9IGR1ZUZvckV2ZW50IHx8IGRheXNFbGFwc2VkID49IDEgfHwgZGF5c0VsYXBzZWQgPCAtMSB8fCBsYXN0VXBkYXRlLmdldERhdGUoKSAhPT0gbmV4dERhdGUuZ2V0RGF0ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZHVlRm9yRXZlbnQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkdWVGb3JFdmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1JlcXVlc3RzKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBvc3RFdmVudChuZXh0VXBkYXRlLCB7XCJlbmFibGVkLnRlbGVtZXRyeVwiOiBmYWxzZX0sIChlcnIpID0+IHtcbiAgICAgICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ldmVudERhdGEubGFzdFN1Y2Nlc3MgPSBuZXh0VXBkYXRlO1xuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnREYXRhLnRva2VuVSA9IHRva2VuVTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgY3VzdG9tQWNjZXNzVG9rZW4pO1xuICAgIH1cbn1cblxuY29uc3QgdHVybnN0aWxlRXZlbnRfID0gbmV3IFR1cm5zdGlsZUV2ZW50KCk7XG5leHBvcnQgY29uc3QgcG9zdFR1cm5zdGlsZUV2ZW50ID0gdHVybnN0aWxlRXZlbnRfLnBvc3RUdXJuc3RpbGVFdmVudC5iaW5kKHR1cm5zdGlsZUV2ZW50Xyk7XG5cbmNvbnN0IG1hcExvYWRFdmVudF8gPSBuZXcgTWFwTG9hZEV2ZW50KCk7XG5leHBvcnQgY29uc3QgcG9zdE1hcExvYWRFdmVudCA9IG1hcExvYWRFdmVudF8ucG9zdE1hcExvYWRFdmVudC5iaW5kKG1hcExvYWRFdmVudF8pO1xuXG4vKioqKiogRU5EIFdBUk5JTkcgLSBSRU1PVkFMIE9SIE1PRElGSUNBVElPTiBPRiBUSEVcblBSRUNFRElORyBDT0RFIFZJT0xBVEVTIFRIRSBNQVBCT1ggVEVSTVMgT0YgU0VSVklDRSAgKioqKioqL1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHt3YXJuT25jZSwgcGFyc2VDYWNoZUNvbnRyb2x9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgd2luZG93IGZyb20gJy4vd2luZG93JztcblxuaW1wb3J0IHR5cGUgRGlzcGF0Y2hlciBmcm9tICcuL2Rpc3BhdGNoZXInO1xuXG5jb25zdCBDQUNIRV9OQU1FID0gJ21hcGJveC10aWxlcyc7XG5sZXQgY2FjaGVMaW1pdCA9IDUwMDsgLy8gNTBNQiAvICgxMDBLQi90aWxlKSB+PSA1MDAgdGlsZXNcbmxldCBjYWNoZUNoZWNrVGhyZXNob2xkID0gNTA7XG5cbmNvbnN0IE1JTl9USU1FX1VOVElMX0VYUElSWSA9IDEwMDAgKiA2MCAqIDc7IC8vIDcgbWludXRlcy4gU2tpcCBjYWNoaW5nIHRpbGVzIHdpdGggYSBzaG9ydCBlbm91Z2ggbWF4IGFnZS5cblxuZXhwb3J0IHR5cGUgUmVzcG9uc2VPcHRpb25zID0ge1xuICAgIHN0YXR1czogbnVtYmVyLFxuICAgIHN0YXR1c1RleHQ6IHN0cmluZyxcbiAgICBoZWFkZXJzOiB3aW5kb3cuSGVhZGVyc1xufTtcblxuLy8gV2UncmUgdXNpbmcgYSBnbG9iYWwgc2hhcmVkIGNhY2hlIG9iamVjdC4gTm9ybWFsbHksIHJlcXVlc3RpbmcgYWQtaG9jIENhY2hlIG9iamVjdHMgaXMgZmluZSwgYnV0XG4vLyBTYWZhcmkgaGFzIGEgbWVtb3J5IGxlYWsgaW4gd2hpY2ggaXQgZmFpbHMgdG8gcmVsZWFzZSBtZW1vcnkgd2hlbiByZXF1ZXN0aW5nIGtleXMoKSBmcm9tIGEgQ2FjaGVcbi8vIG9iamVjdC4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM5OTEgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG5sZXQgc2hhcmVkQ2FjaGU6ID9Qcm9taXNlPENhY2hlPjtcblxuZnVuY3Rpb24gY2FjaGVPcGVuKCkge1xuICAgIGlmICh3aW5kb3cuY2FjaGVzICYmICFzaGFyZWRDYWNoZSkge1xuICAgICAgICBzaGFyZWRDYWNoZSA9IHdpbmRvdy5jYWNoZXMub3BlbihDQUNIRV9OQU1FKTtcbiAgICB9XG59XG5cbi8vIFdlJ3JlIG5ldmVyIGNsb3NpbmcgdGhlIGNhY2hlLCBidXQgb3VyIHVuaXQgdGVzdHMgcmVseSBvbiBjaGFuZ2luZyBvdXQgdGhlIGdsb2JhbCB3aW5kb3cuY2FjaGVzXG4vLyBvYmplY3QsIHNvIHdlIGhhdmUgYSBmdW5jdGlvbiBzcGVjaWZpY2FsbHkgZm9yIHVuaXQgdGVzdHMgdGhhdCBhbGxvd3MgcmVzZXR0aW5nIHRoZSBzaGFyZWQgY2FjaGUuXG5leHBvcnQgZnVuY3Rpb24gY2FjaGVDbG9zZSgpIHtcbiAgICBzaGFyZWRDYWNoZSA9IHVuZGVmaW5lZDtcbn1cblxubGV0IHJlc3BvbnNlQ29uc3RydWN0b3JTdXBwb3J0c1JlYWRhYmxlU3RyZWFtO1xuZnVuY3Rpb24gcHJlcGFyZUJvZHkocmVzcG9uc2U6IFJlc3BvbnNlLCBjYWxsYmFjaykge1xuICAgIGlmIChyZXNwb25zZUNvbnN0cnVjdG9yU3VwcG9ydHNSZWFkYWJsZVN0cmVhbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBuZXcgUmVzcG9uc2UobmV3IFJlYWRhYmxlU3RyZWFtKCkpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4gICAgICAgICAgICByZXNwb25zZUNvbnN0cnVjdG9yU3VwcG9ydHNSZWFkYWJsZVN0cmVhbSA9IHRydWU7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIEVkZ2VcbiAgICAgICAgICAgIHJlc3BvbnNlQ29uc3RydWN0b3JTdXBwb3J0c1JlYWRhYmxlU3RyZWFtID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVzcG9uc2VDb25zdHJ1Y3RvclN1cHBvcnRzUmVhZGFibGVTdHJlYW0pIHtcbiAgICAgICAgY2FsbGJhY2socmVzcG9uc2UuYm9keSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmVzcG9uc2UuYmxvYigpLnRoZW4oY2FsbGJhY2spO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhY2hlUHV0KHJlcXVlc3Q6IFJlcXVlc3QsIHJlc3BvbnNlOiBSZXNwb25zZSwgcmVxdWVzdFRpbWU6IG51bWJlcikge1xuICAgIGNhY2hlT3BlbigpO1xuICAgIGlmICghc2hhcmVkQ2FjaGUpIHJldHVybjtcblxuICAgIGNvbnN0IG9wdGlvbnM6IFJlc3BvbnNlT3B0aW9ucyA9IHtcbiAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IG5ldyB3aW5kb3cuSGVhZGVycygpXG4gICAgfTtcbiAgICByZXNwb25zZS5oZWFkZXJzLmZvckVhY2goKHYsIGspID0+IG9wdGlvbnMuaGVhZGVycy5zZXQoaywgdikpO1xuXG4gICAgY29uc3QgY2FjaGVDb250cm9sID0gcGFyc2VDYWNoZUNvbnRyb2wocmVzcG9uc2UuaGVhZGVycy5nZXQoJ0NhY2hlLUNvbnRyb2wnKSB8fCAnJyk7XG4gICAgaWYgKGNhY2hlQ29udHJvbFsnbm8tc3RvcmUnXSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChjYWNoZUNvbnRyb2xbJ21heC1hZ2UnXSkge1xuICAgICAgICBvcHRpb25zLmhlYWRlcnMuc2V0KCdFeHBpcmVzJywgbmV3IERhdGUocmVxdWVzdFRpbWUgKyBjYWNoZUNvbnRyb2xbJ21heC1hZ2UnXSAqIDEwMDApLnRvVVRDU3RyaW5nKCkpO1xuICAgIH1cblxuICAgIGNvbnN0IHRpbWVVbnRpbEV4cGlyeSA9IG5ldyBEYXRlKG9wdGlvbnMuaGVhZGVycy5nZXQoJ0V4cGlyZXMnKSkuZ2V0VGltZSgpIC0gcmVxdWVzdFRpbWU7XG4gICAgaWYgKHRpbWVVbnRpbEV4cGlyeSA8IE1JTl9USU1FX1VOVElMX0VYUElSWSkgcmV0dXJuO1xuXG4gICAgcHJlcGFyZUJvZHkocmVzcG9uc2UsIGJvZHkgPT4ge1xuICAgICAgICBjb25zdCBjbG9uZWRSZXNwb25zZSA9IG5ldyB3aW5kb3cuUmVzcG9uc2UoYm9keSwgb3B0aW9ucyk7XG5cbiAgICAgICAgY2FjaGVPcGVuKCk7XG4gICAgICAgIGlmICghc2hhcmVkQ2FjaGUpIHJldHVybjtcbiAgICAgICAgc2hhcmVkQ2FjaGVcbiAgICAgICAgICAgIC50aGVuKGNhY2hlID0+IGNhY2hlLnB1dChzdHJpcFF1ZXJ5UGFyYW1ldGVycyhyZXF1ZXN0LnVybCksIGNsb25lZFJlc3BvbnNlKSlcbiAgICAgICAgICAgIC5jYXRjaChlID0+IHdhcm5PbmNlKGUubWVzc2FnZSkpO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBzdHJpcFF1ZXJ5UGFyYW1ldGVycyh1cmw6IHN0cmluZykge1xuICAgIGNvbnN0IHN0YXJ0ID0gdXJsLmluZGV4T2YoJz8nKTtcbiAgICByZXR1cm4gc3RhcnQgPCAwID8gdXJsIDogdXJsLnNsaWNlKDAsIHN0YXJ0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhY2hlR2V0KHJlcXVlc3Q6IFJlcXVlc3QsIGNhbGxiYWNrOiAoZXJyb3I6ID9hbnksIHJlc3BvbnNlOiA/UmVzcG9uc2UsIGZyZXNoOiA/Ym9vbGVhbikgPT4gdm9pZCkge1xuICAgIGNhY2hlT3BlbigpO1xuICAgIGlmICghc2hhcmVkQ2FjaGUpIHJldHVybiBjYWxsYmFjayhudWxsKTtcblxuICAgIGNvbnN0IHN0cmlwcGVkVVJMID0gc3RyaXBRdWVyeVBhcmFtZXRlcnMocmVxdWVzdC51cmwpO1xuXG4gICAgc2hhcmVkQ2FjaGVcbiAgICAgICAgLnRoZW4oY2FjaGUgPT4ge1xuICAgICAgICAgICAgLy8gbWFudWFsbHkgc3RyaXAgVVJMIGluc3RlYWQgb2YgYGlnbm9yZVNlYXJjaDogdHJ1ZWAgYmVjYXVzZSBvZiBhIGtub3duXG4gICAgICAgICAgICAvLyBwZXJmb3JtYW5jZSBpc3N1ZSBpbiBDaHJvbWUgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzg0MzFcbiAgICAgICAgICAgIGNhY2hlLm1hdGNoKHN0cmlwcGVkVVJMKVxuICAgICAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZnJlc2ggPSBpc0ZyZXNoKHJlc3BvbnNlKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBSZWluc2VydCBpbnRvIGNhY2hlIHNvIHRoYXQgb3JkZXIgb2Yga2V5cyBpbiB0aGUgY2FjaGUgaXMgdGhlIG9yZGVyIG9mIGFjY2Vzcy5cbiAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBsaW5lIG1ha2VzIHRoZSBjYWNoZSBhIExSVSBpbnN0ZWFkIG9mIGEgRklGTyBjYWNoZS5cbiAgICAgICAgICAgICAgICAgICAgY2FjaGUuZGVsZXRlKHN0cmlwcGVkVVJMKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZyZXNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5wdXQoc3RyaXBwZWRVUkwsIHJlc3BvbnNlLmNsb25lKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UsIGZyZXNoKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChjYWxsYmFjayk7XG5cbn1cblxuZnVuY3Rpb24gaXNGcmVzaChyZXNwb25zZSkge1xuICAgIGlmICghcmVzcG9uc2UpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBleHBpcmVzID0gbmV3IERhdGUocmVzcG9uc2UuaGVhZGVycy5nZXQoJ0V4cGlyZXMnKSB8fCAwKTtcbiAgICBjb25zdCBjYWNoZUNvbnRyb2wgPSBwYXJzZUNhY2hlQ29udHJvbChyZXNwb25zZS5oZWFkZXJzLmdldCgnQ2FjaGUtQ29udHJvbCcpIHx8ICcnKTtcbiAgICByZXR1cm4gZXhwaXJlcyA+IERhdGUubm93KCkgJiYgIWNhY2hlQ29udHJvbFsnbm8tY2FjaGUnXTtcbn1cblxuLy8gYEluZmluaXR5YCB0cmlnZ2VycyBhIGNhY2hlIGNoZWNrIGFmdGVyIHRoZSBmaXJzdCB0aWxlIGlzIGxvYWRlZFxuLy8gc28gdGhhdCBhIGNoZWNrIGlzIHJ1biBhdCBsZWFzdCBvbmNlIG9uIGVhY2ggcGFnZSBsb2FkLlxubGV0IGdsb2JhbEVudHJ5Q291bnRlciA9IEluZmluaXR5O1xuXG4vLyBUaGUgY2FjaGUgY2hlY2sgZ2V0cyBydW4gb24gYSB3b3JrZXIuIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdFxuLy8gcHJvZmlsaW5nIHNvbWV0aW1lcyBzaG93cyB0aGlzIGFzIHRha2luZyB1cCBzaWduaWZpY2FudCB0aW1lIG9uIHRoZVxuLy8gdGhyZWFkIGl0IGdldHMgY2FsbGVkIGZyb20uIEFuZCBzb21ldGltZXMgaXQgZG9lc24ndC4gSXQgKm1heSogYmVcbi8vIGZpbmUgdG8gcnVuIHRoaXMgb24gdGhlIG1haW4gdGhyZWFkIGJ1dCBvdXQgb2YgY2F1dGlvbiB0aGlzIGlzIGJlaW5nXG4vLyBkaXNwYXRjaGVkIG9uIGEgd29ya2VyLiBUaGlzIGNhbiBiZSBpbnZlc3RpZ2F0ZWQgZnVydGhlciBpbiB0aGUgZnV0dXJlLlxuZXhwb3J0IGZ1bmN0aW9uIGNhY2hlRW50cnlQb3NzaWJseUFkZGVkKGRpc3BhdGNoZXI6IERpc3BhdGNoZXIpIHtcbiAgICBnbG9iYWxFbnRyeUNvdW50ZXIrKztcbiAgICBpZiAoZ2xvYmFsRW50cnlDb3VudGVyID4gY2FjaGVDaGVja1RocmVzaG9sZCkge1xuICAgICAgICBkaXNwYXRjaGVyLmdldEFjdG9yKCkuc2VuZCgnZW5mb3JjZUNhY2hlU2l6ZUxpbWl0JywgY2FjaGVMaW1pdCk7XG4gICAgICAgIGdsb2JhbEVudHJ5Q291bnRlciA9IDA7XG4gICAgfVxufVxuXG4vLyBydW5zIG9uIHdvcmtlciwgc2VlIGFib3ZlIGNvbW1lbnRcbmV4cG9ydCBmdW5jdGlvbiBlbmZvcmNlQ2FjaGVTaXplTGltaXQobGltaXQ6IG51bWJlcikge1xuICAgIGNhY2hlT3BlbigpO1xuICAgIGlmICghc2hhcmVkQ2FjaGUpIHJldHVybjtcblxuICAgIHNoYXJlZENhY2hlXG4gICAgICAgIC50aGVuKGNhY2hlID0+IHtcbiAgICAgICAgICAgIGNhY2hlLmtleXMoKS50aGVuKGtleXMgPT4ge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGggLSBsaW1pdDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhY2hlLmRlbGV0ZShrZXlzW2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhclRpbGVDYWNoZShjYWxsYmFjaz86IChlcnI6ID9FcnJvcikgPT4gdm9pZCkge1xuICAgIGNvbnN0IHByb21pc2UgPSB3aW5kb3cuY2FjaGVzLmRlbGV0ZShDQUNIRV9OQU1FKTtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgcHJvbWlzZS5jYXRjaChjYWxsYmFjaykudGhlbigoKSA9PiBjYWxsYmFjaygpKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRDYWNoZUxpbWl0cyhsaW1pdDogbnVtYmVyLCBjaGVja1RocmVzaG9sZDogbnVtYmVyKSB7XG4gICAgY2FjaGVMaW1pdCA9IGxpbWl0O1xuICAgIGNhY2hlQ2hlY2tUaHJlc2hvbGQgPSBjaGVja1RocmVzaG9sZDtcbn1cbiIsIi8vIEBmbG93XG5pbXBvcnQgd2luZG93IGZyb20gJy4vd2luZG93JztcblxubGV0IHN1cHBvcnRzT2Zmc2NyZWVuQ2FudmFzOiA/Ym9vbGVhbjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIGlmIChzdXBwb3J0c09mZnNjcmVlbkNhbnZhcyA9PSBudWxsKSB7XG4gICAgICAgIHN1cHBvcnRzT2Zmc2NyZWVuQ2FudmFzID0gd2luZG93Lk9mZnNjcmVlbkNhbnZhcyAmJlxuICAgICAgICAgICAgbmV3IHdpbmRvdy5PZmZzY3JlZW5DYW52YXMoMSwgMSkuZ2V0Q29udGV4dCgnMmQnKSAmJlxuICAgICAgICAgICAgdHlwZW9mIHdpbmRvdy5jcmVhdGVJbWFnZUJpdG1hcCA9PT0gJ2Z1bmN0aW9uJztcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwcG9ydHNPZmZzY3JlZW5DYW52YXM7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgd2luZG93IGZyb20gJy4vd2luZG93JztcbmltcG9ydCB7ZXh0ZW5kLCB3YXJuT25jZSwgaXNXb3JrZXJ9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQge2lzTWFwYm94SFRUUFVSTCwgaGFzQ2FjaGVEZWZlYXRpbmdTa3V9IGZyb20gJy4vbWFwYm94JztcbmltcG9ydCBjb25maWcgZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHtjYWNoZUdldCwgY2FjaGVQdXR9IGZyb20gJy4vdGlsZV9yZXF1ZXN0X2NhY2hlJztcbmltcG9ydCB3ZWJwU3VwcG9ydGVkIGZyb20gJy4vd2VicF9zdXBwb3J0ZWQnO1xuaW1wb3J0IG9mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCBmcm9tICcuL29mZnNjcmVlbl9jYW52YXNfc3VwcG9ydGVkJztcblxuaW1wb3J0IHR5cGUge0NhbGxiYWNrfSBmcm9tICcuLi90eXBlcy9jYWxsYmFjayc7XG5pbXBvcnQgdHlwZSB7Q2FuY2VsYWJsZX0gZnJvbSAnLi4vdHlwZXMvY2FuY2VsYWJsZSc7XG5cbi8qKlxuICogVGhlIHR5cGUgb2YgYSByZXNvdXJjZS5cbiAqIEBwcml2YXRlXG4gKiBAcmVhZG9ubHlcbiAqIEBlbnVtIHtzdHJpbmd9XG4gKi9cbmNvbnN0IFJlc291cmNlVHlwZSA9IHtcbiAgICBVbmtub3duOiAnVW5rbm93bicsXG4gICAgU3R5bGU6ICdTdHlsZScsXG4gICAgU291cmNlOiAnU291cmNlJyxcbiAgICBUaWxlOiAnVGlsZScsXG4gICAgR2x5cGhzOiAnR2x5cGhzJyxcbiAgICBTcHJpdGVJbWFnZTogJ1Nwcml0ZUltYWdlJyxcbiAgICBTcHJpdGVKU09OOiAnU3ByaXRlSlNPTicsXG4gICAgSW1hZ2U6ICdJbWFnZSdcbn07XG5leHBvcnQge1Jlc291cmNlVHlwZX07XG5cbmlmICh0eXBlb2YgT2JqZWN0LmZyZWV6ZSA9PSAnZnVuY3Rpb24nKSB7XG4gICAgT2JqZWN0LmZyZWV6ZShSZXNvdXJjZVR5cGUpO1xufVxuXG4vKipcbiAqIEEgYFJlcXVlc3RQYXJhbWV0ZXJzYCBvYmplY3QgdG8gYmUgcmV0dXJuZWQgZnJvbSBNYXAub3B0aW9ucy50cmFuc2Zvcm1SZXF1ZXN0IGNhbGxiYWNrcy5cbiAqIEB0eXBlZGVmIHtPYmplY3R9IFJlcXVlc3RQYXJhbWV0ZXJzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gYmUgcmVxdWVzdGVkLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGhlYWRlcnMgVGhlIGhlYWRlcnMgdG8gYmUgc2VudCB3aXRoIHRoZSByZXF1ZXN0LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IG1ldGhvZCBSZXF1ZXN0IG1ldGhvZCBgJ0dFVCcgfCAnUE9TVCcgfCAnUFVUJ2AuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYm9keSBSZXF1ZXN0IGJvZHkuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdHlwZSBSZXNwb25zZSBib2R5IHR5cGUgdG8gYmUgcmV0dXJuZWQgYCdzdHJpbmcnIHwgJ2pzb24nIHwgJ2FycmF5QnVmZmVyJ2AuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY3JlZGVudGlhbHMgYCdzYW1lLW9yaWdpbid8J2luY2x1ZGUnYCBVc2UgJ2luY2x1ZGUnIHRvIHNlbmQgY29va2llcyB3aXRoIGNyb3NzLW9yaWdpbiByZXF1ZXN0cy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gY29sbGVjdFJlc291cmNlVGltaW5nIElmIHRydWUsIFJlc291cmNlIFRpbWluZyBBUEkgaW5mb3JtYXRpb24gd2lsbCBiZSBjb2xsZWN0ZWQgZm9yIHRoZXNlIHRyYW5zZm9ybWVkIHJlcXVlc3RzIGFuZCByZXR1cm5lZCBpbiBhIHJlc291cmNlVGltaW5nIHByb3BlcnR5IG9mIHJlbGV2YW50IGRhdGEgZXZlbnRzLlxuICogQGV4YW1wbGVcbiAqIC8vIHVzZSB0cmFuc2Zvcm1SZXF1ZXN0IHRvIG1vZGlmeSByZXF1ZXN0cyB0aGF0IGJlZ2luIHdpdGggYGh0dHA6Ly9teUhvc3RgXG4gKiB0cmFuc2Zvcm1SZXF1ZXN0OiBmdW5jdGlvbih1cmwsIHJlc291cmNlVHlwZSkge1xuICogIGlmIChyZXNvdXJjZVR5cGUgPT09ICdTb3VyY2UnICYmIHVybC5pbmRleE9mKCdodHRwOi8vbXlIb3N0JykgPiAtMSkge1xuICogICAgcmV0dXJuIHtcbiAqICAgICAgdXJsOiB1cmwucmVwbGFjZSgnaHR0cCcsICdodHRwcycpLFxuICogICAgICBoZWFkZXJzOiB7ICdteS1jdXN0b20taGVhZGVyJzogdHJ1ZSB9LFxuICogICAgICBjcmVkZW50aWFsczogJ2luY2x1ZGUnICAvLyBJbmNsdWRlIGNvb2tpZXMgZm9yIGNyb3NzLW9yaWdpbiByZXF1ZXN0c1xuICogICAgfVxuICogICB9XG4gKiAgfVxuICpcbiAqL1xuZXhwb3J0IHR5cGUgUmVxdWVzdFBhcmFtZXRlcnMgPSB7XG4gICAgdXJsOiBzdHJpbmcsXG4gICAgaGVhZGVycz86IE9iamVjdCxcbiAgICBtZXRob2Q/OiAnR0VUJyB8ICdQT1NUJyB8ICdQVVQnLFxuICAgIGJvZHk/OiBzdHJpbmcsXG4gICAgdHlwZT86ICdzdHJpbmcnIHwgJ2pzb24nIHwgJ2FycmF5QnVmZmVyJyxcbiAgICBjcmVkZW50aWFscz86ICdzYW1lLW9yaWdpbicgfCAnaW5jbHVkZScsXG4gICAgY29sbGVjdFJlc291cmNlVGltaW5nPzogYm9vbGVhblxufTtcblxuZXhwb3J0IHR5cGUgUmVzcG9uc2VDYWxsYmFjazxUPiA9IChlcnJvcjogP0Vycm9yLCBkYXRhOiA/VCwgY2FjaGVDb250cm9sOiA/c3RyaW5nLCBleHBpcmVzOiA/c3RyaW5nKSA9PiB2b2lkO1xuXG5jbGFzcyBBSkFYRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgc3RhdHVzOiBudW1iZXI7XG4gICAgdXJsOiBzdHJpbmc7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBzdGF0dXM6IG51bWJlciwgdXJsOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gNDAxICYmIGlzTWFwYm94SFRUUFVSTCh1cmwpKSB7XG4gICAgICAgICAgICBtZXNzYWdlICs9ICc6IHlvdSBtYXkgaGF2ZSBwcm92aWRlZCBhbiBpbnZhbGlkIE1hcGJveCBhY2Nlc3MgdG9rZW4uIFNlZSBodHRwczovL3d3dy5tYXBib3guY29tL2FwaS1kb2N1bWVudGF0aW9uLyNhY2Nlc3MtdG9rZW5zLWFuZC10b2tlbi1zY29wZXMnO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcbiAgICAgICAgdGhpcy51cmwgPSB1cmw7XG5cbiAgICAgICAgLy8gd29yayBhcm91bmQgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9SaWNoLUhhcnJpcy9idWJsZS9pc3N1ZXMvNDBcbiAgICAgICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cblxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5uYW1lfTogJHt0aGlzLm1lc3NhZ2V9ICgke3RoaXMuc3RhdHVzfSk6ICR7dGhpcy51cmx9YDtcbiAgICB9XG59XG5cbi8vIEVuc3VyZSB0aGF0IHdlJ3JlIHNlbmRpbmcgdGhlIGNvcnJlY3QgcmVmZXJyZXIgZnJvbSBibG9iIFVSTCB3b3JrZXIgYnVuZGxlcy5cbi8vIEZvciBmaWxlcyBsb2FkZWQgZnJvbSB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0sIGBsb2NhdGlvbi5vcmlnaW5gIHdpbGwgYmUgc2V0XG4vLyB0byB0aGUgc3RyaW5nKCEpIFwibnVsbFwiIChGaXJlZm94KSwgb3IgXCJmaWxlOi8vXCIgKENocm9tZSwgU2FmYXJpLCBFZGdlLCBJRSksXG4vLyBhbmQgd2Ugd2lsbCBzZXQgYW4gZW1wdHkgcmVmZXJyZXIuIE90aGVyd2lzZSwgd2UncmUgdXNpbmcgdGhlIGRvY3VtZW50J3MgVVJMLlxuLyogZ2xvYmFsIHNlbGYgKi9cbmV4cG9ydCBjb25zdCBnZXRSZWZlcnJlciA9IGlzV29ya2VyKCkgP1xuICAgICgpID0+IHNlbGYud29ya2VyICYmIHNlbGYud29ya2VyLnJlZmVycmVyIDpcbiAgICAoKSA9PiAod2luZG93LmxvY2F0aW9uLnByb3RvY29sID09PSAnYmxvYjonID8gd2luZG93LnBhcmVudCA6IHdpbmRvdykubG9jYXRpb24uaHJlZjtcblxuLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIGEgVVJMIGlzIGEgZmlsZTovLyBVUkwuIFRoaXMgaXMgb2J2aW91c2x5IHRoZSBjYXNlIGlmIGl0IGJlZ2luc1xuLy8gd2l0aCBmaWxlOi8vLiBSZWxhdGl2ZSBVUkxzIGFyZSBhbHNvIGZpbGU6Ly8gVVJMcyBpZmYgdGhlIG9yaWdpbmFsIGRvY3VtZW50IHdhcyBsb2FkZWRcbi8vIHZpYSBhIGZpbGU6Ly8gVVJMLlxuY29uc3QgaXNGaWxlVVJMID0gdXJsID0+IC9eZmlsZTovLnRlc3QodXJsKSB8fCAoL15maWxlOi8udGVzdChnZXRSZWZlcnJlcigpKSAmJiAhL15cXHcrOi8udGVzdCh1cmwpKTtcblxuZnVuY3Rpb24gbWFrZUZldGNoUmVxdWVzdChyZXF1ZXN0UGFyYW1ldGVyczogUmVxdWVzdFBhcmFtZXRlcnMsIGNhbGxiYWNrOiBSZXNwb25zZUNhbGxiYWNrPGFueT4pOiBDYW5jZWxhYmxlIHtcbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IHdpbmRvdy5BYm9ydENvbnRyb2xsZXIoKTtcbiAgICBjb25zdCByZXF1ZXN0ID0gbmV3IHdpbmRvdy5SZXF1ZXN0KHJlcXVlc3RQYXJhbWV0ZXJzLnVybCwge1xuICAgICAgICBtZXRob2Q6IHJlcXVlc3RQYXJhbWV0ZXJzLm1ldGhvZCB8fCAnR0VUJyxcbiAgICAgICAgYm9keTogcmVxdWVzdFBhcmFtZXRlcnMuYm9keSxcbiAgICAgICAgY3JlZGVudGlhbHM6IHJlcXVlc3RQYXJhbWV0ZXJzLmNyZWRlbnRpYWxzLFxuICAgICAgICBoZWFkZXJzOiByZXF1ZXN0UGFyYW1ldGVycy5oZWFkZXJzLFxuICAgICAgICByZWZlcnJlcjogZ2V0UmVmZXJyZXIoKSxcbiAgICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbFxuICAgIH0pO1xuICAgIGxldCBjb21wbGV0ZSA9IGZhbHNlO1xuICAgIGxldCBhYm9ydGVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBjYWNoZUlnbm9yaW5nU2VhcmNoID0gaGFzQ2FjaGVEZWZlYXRpbmdTa3UocmVxdWVzdC51cmwpO1xuXG4gICAgaWYgKHJlcXVlc3RQYXJhbWV0ZXJzLnR5cGUgPT09ICdqc29uJykge1xuICAgICAgICByZXF1ZXN0LmhlYWRlcnMuc2V0KCdBY2NlcHQnLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbGlkYXRlT3JGZXRjaCA9IChlcnIsIGNhY2hlZFJlc3BvbnNlLCByZXNwb25zZUlzRnJlc2gpID0+IHtcbiAgICAgICAgaWYgKGFib3J0ZWQpIHJldHVybjtcblxuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAvLyBEbyBmZXRjaCBpbiBjYXNlIG9mIGNhY2hlIGVycm9yLlxuICAgICAgICAgICAgLy8gSFRUUCBwYWdlcyBpbiBFZGdlIHRyaWdnZXIgYSBzZWN1cml0eSBlcnJvciB0aGF0IGNhbiBiZSBpZ25vcmVkLlxuICAgICAgICAgICAgaWYgKGVyci5tZXNzYWdlICE9PSAnU2VjdXJpdHlFcnJvcicpIHtcbiAgICAgICAgICAgICAgICB3YXJuT25jZShlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNhY2hlZFJlc3BvbnNlICYmIHJlc3BvbnNlSXNGcmVzaCkge1xuICAgICAgICAgICAgcmV0dXJuIGZpbmlzaFJlcXVlc3QoY2FjaGVkUmVzcG9uc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNhY2hlZFJlc3BvbnNlKSB7XG4gICAgICAgICAgICAvLyBXZSBjYW4ndCBkbyByZXZhbGlkYXRpb24gd2l0aCAnSWYtTm9uZS1NYXRjaCcgYmVjYXVzZSB0aGVuIHRoZVxuICAgICAgICAgICAgLy8gcmVxdWVzdCBkb2Vzbid0IGhhdmUgc2ltcGxlIGNvcnMgaGVhZGVycy5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlcXVlc3RUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgICAgICB3aW5kb3cuZmV0Y2gocmVxdWVzdCkudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYWNoZWFibGVSZXNwb25zZSA9IGNhY2hlSWdub3JpbmdTZWFyY2ggPyByZXNwb25zZS5jbG9uZSgpIDogbnVsbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmluaXNoUmVxdWVzdChyZXNwb25zZSwgY2FjaGVhYmxlUmVzcG9uc2UsIHJlcXVlc3RUaW1lKTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobmV3IEFKQVhFcnJvcihyZXNwb25zZS5zdGF0dXNUZXh0LCByZXNwb25zZS5zdGF0dXMsIHJlcXVlc3RQYXJhbWV0ZXJzLnVybCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyb3IuY29kZSA9PT0gMjApIHtcbiAgICAgICAgICAgICAgICAvLyBzaWxlbmNlIGV4cGVjdGVkIEFib3J0RXJyb3JcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoZXJyb3IubWVzc2FnZSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZmluaXNoUmVxdWVzdCA9IChyZXNwb25zZSwgY2FjaGVhYmxlUmVzcG9uc2UsIHJlcXVlc3RUaW1lKSA9PiB7XG4gICAgICAgIChcbiAgICAgICAgICAgIHJlcXVlc3RQYXJhbWV0ZXJzLnR5cGUgPT09ICdhcnJheUJ1ZmZlcicgPyByZXNwb25zZS5hcnJheUJ1ZmZlcigpIDpcbiAgICAgICAgICAgIHJlcXVlc3RQYXJhbWV0ZXJzLnR5cGUgPT09ICdqc29uJyA/IHJlc3BvbnNlLmpzb24oKSA6XG4gICAgICAgICAgICByZXNwb25zZS50ZXh0KClcbiAgICAgICAgKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICBpZiAoYWJvcnRlZCkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKGNhY2hlYWJsZVJlc3BvbnNlICYmIHJlcXVlc3RUaW1lKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIHJlc3BvbnNlIG5lZWRzIHRvIGJlIGluc2VydGVkIGludG8gdGhlIGNhY2hlIGFmdGVyIGl0IGhhcyBjb21wbGV0ZWx5IGxvYWRlZC5cbiAgICAgICAgICAgICAgICAvLyBVbnRpbCBpdCBpcyBmdWxseSBsb2FkZWQgdGhlcmUgaXMgYSBjaGFuY2UgaXQgd2lsbCBiZSBhYm9ydGVkLiBBYm9ydGluZyB3aGlsZVxuICAgICAgICAgICAgICAgIC8vIHJlYWRpbmcgdGhlIGJvZHkgY2FuIGNhdXNlIHRoZSBjYWNoZSBpbnNlcnRpb24gdG8gZXJyb3IuIFdlIGNvdWxkIGNhdGNoIHRoaXMgZXJyb3JcbiAgICAgICAgICAgICAgICAvLyBpbiBtb3N0IGJyb3dzZXJzIGJ1dCBpbiBGaXJlZm94IGl0IHNlZW1zIHRvIHNvbWV0aW1lcyBjcmFzaCB0aGUgdGFiLiBBZGRpbmdcbiAgICAgICAgICAgICAgICAvLyBpdCB0byB0aGUgY2FjaGUgaGVyZSBhdm9pZHMgdGhhdCBlcnJvci5cbiAgICAgICAgICAgICAgICBjYWNoZVB1dChyZXF1ZXN0LCBjYWNoZWFibGVSZXNwb25zZSwgcmVxdWVzdFRpbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tcGxldGUgPSB0cnVlO1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0LCByZXNwb25zZS5oZWFkZXJzLmdldCgnQ2FjaGUtQ29udHJvbCcpLCByZXNwb25zZS5oZWFkZXJzLmdldCgnRXhwaXJlcycpKTtcbiAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIGlmICghYWJvcnRlZCkgY2FsbGJhY2sobmV3IEVycm9yKGVyci5tZXNzYWdlKSk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBpZiAoY2FjaGVJZ25vcmluZ1NlYXJjaCkge1xuICAgICAgICBjYWNoZUdldChyZXF1ZXN0LCB2YWxpZGF0ZU9yRmV0Y2gpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbGlkYXRlT3JGZXRjaChudWxsLCBudWxsKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge2NhbmNlbDogKCkgPT4ge1xuICAgICAgICBhYm9ydGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKCFjb21wbGV0ZSkgY29udHJvbGxlci5hYm9ydCgpO1xuICAgIH19O1xufVxuXG5mdW5jdGlvbiBtYWtlWE1MSHR0cFJlcXVlc3QocmVxdWVzdFBhcmFtZXRlcnM6IFJlcXVlc3RQYXJhbWV0ZXJzLCBjYWxsYmFjazogUmVzcG9uc2VDYWxsYmFjazxhbnk+KTogQ2FuY2VsYWJsZSB7XG4gICAgY29uc3QgeGhyOiBYTUxIdHRwUmVxdWVzdCA9IG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIHhoci5vcGVuKHJlcXVlc3RQYXJhbWV0ZXJzLm1ldGhvZCB8fCAnR0VUJywgcmVxdWVzdFBhcmFtZXRlcnMudXJsLCB0cnVlKTtcbiAgICBpZiAocmVxdWVzdFBhcmFtZXRlcnMudHlwZSA9PT0gJ2FycmF5QnVmZmVyJykge1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJztcbiAgICB9XG4gICAgZm9yIChjb25zdCBrIGluIHJlcXVlc3RQYXJhbWV0ZXJzLmhlYWRlcnMpIHtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoaywgcmVxdWVzdFBhcmFtZXRlcnMuaGVhZGVyc1trXSk7XG4gICAgfVxuICAgIGlmIChyZXF1ZXN0UGFyYW1ldGVycy50eXBlID09PSAnanNvbicpIHtcbiAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICd0ZXh0JztcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0FjY2VwdCcsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgfVxuICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSByZXF1ZXN0UGFyYW1ldGVycy5jcmVkZW50aWFscyA9PT0gJ2luY2x1ZGUnO1xuICAgIHhoci5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoeGhyLnN0YXR1c1RleHQpKTtcbiAgICB9O1xuICAgIHhoci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgIGlmICgoKHhoci5zdGF0dXMgPj0gMjAwICYmIHhoci5zdGF0dXMgPCAzMDApIHx8IHhoci5zdGF0dXMgPT09IDApICYmIHhoci5yZXNwb25zZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbGV0IGRhdGE6IG1peGVkID0geGhyLnJlc3BvbnNlO1xuICAgICAgICAgICAgaWYgKHJlcXVlc3RQYXJhbWV0ZXJzLnR5cGUgPT09ICdqc29uJykge1xuICAgICAgICAgICAgICAgIC8vIFdlJ3JlIG1hbnVhbGx5IHBhcnNpbmcgSlNPTiBoZXJlIHRvIGdldCBiZXR0ZXIgZXJyb3IgbWVzc2FnZXMuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgZGF0YSwgeGhyLmdldFJlc3BvbnNlSGVhZGVyKCdDYWNoZS1Db250cm9sJyksIHhoci5nZXRSZXNwb25zZUhlYWRlcignRXhwaXJlcycpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBBSkFYRXJyb3IoeGhyLnN0YXR1c1RleHQsIHhoci5zdGF0dXMsIHJlcXVlc3RQYXJhbWV0ZXJzLnVybCkpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB4aHIuc2VuZChyZXF1ZXN0UGFyYW1ldGVycy5ib2R5KTtcbiAgICByZXR1cm4ge2NhbmNlbDogKCkgPT4geGhyLmFib3J0KCl9O1xufVxuXG5leHBvcnQgY29uc3QgbWFrZVJlcXVlc3QgPSBmdW5jdGlvbihyZXF1ZXN0UGFyYW1ldGVyczogUmVxdWVzdFBhcmFtZXRlcnMsIGNhbGxiYWNrOiBSZXNwb25zZUNhbGxiYWNrPGFueT4pOiBDYW5jZWxhYmxlIHtcbiAgICAvLyBXZSdyZSB0cnlpbmcgdG8gdXNlIHRoZSBGZXRjaCBBUEkgaWYgcG9zc2libGUuIEhvd2V2ZXIsIGluIHNvbWUgc2l0dWF0aW9ucyB3ZSBjYW4ndCB1c2UgaXQ6XG4gICAgLy8gLSBJRTExIGRvZXNuJ3Qgc3VwcG9ydCBpdCBhdCBhbGwuIEluIHRoaXMgY2FzZSwgd2UgZGlzcGF0Y2ggdGhlIHJlcXVlc3QgdG8gdGhlIG1haW4gdGhyZWFkIHNvXG4gICAgLy8gICB0aGF0IHdlIGNhbiBnZXQgYW4gYWNjcnVhdGUgcmVmZXJyZXIgaGVhZGVyLlxuICAgIC8vIC0gU2FmYXJpIGV4cG9zZXMgd2luZG93LkFib3J0Q29udHJvbGxlciwgYnV0IGl0IGRvZXNuJ3Qgd29yayBhY3R1YWxseSBhYm9ydCBhbnkgcmVxdWVzdHMgaW5cbiAgICAvLyAgIHNvbWUgdmVyc2lvbnMgKHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0OTgwI2MyKVxuICAgIC8vIC0gUmVxdWVzdHMgZm9yIHJlc291cmNlcyB3aXRoIHRoZSBmaWxlOi8vIFVSSSBzY2hlbWUgZG9uJ3Qgd29yayB3aXRoIHRoZSBGZXRjaCBBUEkgZWl0aGVyLiBJblxuICAgIC8vICAgdGhpcyBjYXNlIHdlIHVuY29uZGl0aW9uYWxseSB1c2UgWEhSIG9uIHRoZSBjdXJyZW50IHRocmVhZCBzaW5jZSByZWZlcnJlcnMgZG9uJ3QgbWF0dGVyLlxuICAgIGlmICghaXNGaWxlVVJMKHJlcXVlc3RQYXJhbWV0ZXJzLnVybCkpIHtcbiAgICAgICAgaWYgKHdpbmRvdy5mZXRjaCAmJiB3aW5kb3cuUmVxdWVzdCAmJiB3aW5kb3cuQWJvcnRDb250cm9sbGVyICYmIHdpbmRvdy5SZXF1ZXN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSgnc2lnbmFsJykpIHtcbiAgICAgICAgICAgIHJldHVybiBtYWtlRmV0Y2hSZXF1ZXN0KHJlcXVlc3RQYXJhbWV0ZXJzLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzV29ya2VyKCkgJiYgc2VsZi53b3JrZXIgJiYgc2VsZi53b3JrZXIuYWN0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXVlT25NYWluVGhyZWFkID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBzZWxmLndvcmtlci5hY3Rvci5zZW5kKCdnZXRSZXNvdXJjZScsIHJlcXVlc3RQYXJhbWV0ZXJzLCBjYWxsYmFjaywgdW5kZWZpbmVkLCBxdWV1ZU9uTWFpblRocmVhZCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1ha2VYTUxIdHRwUmVxdWVzdChyZXF1ZXN0UGFyYW1ldGVycywgY2FsbGJhY2spO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEpTT04gPSBmdW5jdGlvbihyZXF1ZXN0UGFyYW1ldGVyczogUmVxdWVzdFBhcmFtZXRlcnMsIGNhbGxiYWNrOiBSZXNwb25zZUNhbGxiYWNrPE9iamVjdD4pOiBDYW5jZWxhYmxlIHtcbiAgICByZXR1cm4gbWFrZVJlcXVlc3QoZXh0ZW5kKHJlcXVlc3RQYXJhbWV0ZXJzLCB7dHlwZTogJ2pzb24nfSksIGNhbGxiYWNrKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uKHJlcXVlc3RQYXJhbWV0ZXJzOiBSZXF1ZXN0UGFyYW1ldGVycywgY2FsbGJhY2s6IFJlc3BvbnNlQ2FsbGJhY2s8QXJyYXlCdWZmZXI+KTogQ2FuY2VsYWJsZSB7XG4gICAgcmV0dXJuIG1ha2VSZXF1ZXN0KGV4dGVuZChyZXF1ZXN0UGFyYW1ldGVycywge3R5cGU6ICdhcnJheUJ1ZmZlcid9KSwgY2FsbGJhY2spO1xufTtcblxuZXhwb3J0IGNvbnN0IHBvc3REYXRhID0gZnVuY3Rpb24ocmVxdWVzdFBhcmFtZXRlcnM6IFJlcXVlc3RQYXJhbWV0ZXJzLCBjYWxsYmFjazogUmVzcG9uc2VDYWxsYmFjazxzdHJpbmc+KTogQ2FuY2VsYWJsZSB7XG4gICAgcmV0dXJuIG1ha2VSZXF1ZXN0KGV4dGVuZChyZXF1ZXN0UGFyYW1ldGVycywge21ldGhvZDogJ1BPU1QnfSksIGNhbGxiYWNrKTtcbn07XG5cbmZ1bmN0aW9uIHNhbWVPcmlnaW4odXJsKSB7XG4gICAgY29uc3QgYTogSFRNTEFuY2hvckVsZW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGEuaHJlZiA9IHVybDtcbiAgICByZXR1cm4gYS5wcm90b2NvbCA9PT0gd2luZG93LmRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sICYmIGEuaG9zdCA9PT0gd2luZG93LmRvY3VtZW50LmxvY2F0aW9uLmhvc3Q7XG59XG5cbmNvbnN0IHRyYW5zcGFyZW50UG5nVXJsID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQkNBWUFBQUFmRmNTSkFBQUFDMGxFUVZRWVYyTmdBQUlBQUFVQUFhclZ5RkVBQUFBQVNVVk9SSzVDWUlJPSc7XG5cbmZ1bmN0aW9uIGFycmF5QnVmZmVyVG9JbWFnZShkYXRhOiBBcnJheUJ1ZmZlciwgY2FsbGJhY2s6IChlcnI6ID9FcnJvciwgaW1hZ2U6ID9IVE1MSW1hZ2VFbGVtZW50KSA9PiB2b2lkLCBjYWNoZUNvbnRyb2w6ID9zdHJpbmcsIGV4cGlyZXM6ID9zdHJpbmcpIHtcbiAgICBjb25zdCBpbWc6IEhUTUxJbWFnZUVsZW1lbnQgPSBuZXcgd2luZG93LkltYWdlKCk7XG4gICAgY29uc3QgVVJMID0gd2luZG93LlVSTDtcbiAgICBpbWcub25sb2FkID0gKCkgPT4ge1xuICAgICAgICBjYWxsYmFjayhudWxsLCBpbWcpO1xuICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGltZy5zcmMpO1xuICAgIH07XG4gICAgaW1nLm9uZXJyb3IgPSAoKSA9PiBjYWxsYmFjayhuZXcgRXJyb3IoJ0NvdWxkIG5vdCBsb2FkIGltYWdlLiBQbGVhc2UgbWFrZSBzdXJlIHRvIHVzZSBhIHN1cHBvcnRlZCBpbWFnZSB0eXBlIHN1Y2ggYXMgUE5HIG9yIEpQRUcuIE5vdGUgdGhhdCBTVkdzIGFyZSBub3Qgc3VwcG9ydGVkLicpKTtcbiAgICBjb25zdCBibG9iOiBCbG9iID0gbmV3IHdpbmRvdy5CbG9iKFtuZXcgVWludDhBcnJheShkYXRhKV0sIHt0eXBlOiAnaW1hZ2UvcG5nJ30pO1xuICAgIChpbWc6IGFueSkuY2FjaGVDb250cm9sID0gY2FjaGVDb250cm9sO1xuICAgIChpbWc6IGFueSkuZXhwaXJlcyA9IGV4cGlyZXM7XG4gICAgaW1nLnNyYyA9IGRhdGEuYnl0ZUxlbmd0aCA/IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYikgOiB0cmFuc3BhcmVudFBuZ1VybDtcbn1cblxuZnVuY3Rpb24gYXJyYXlCdWZmZXJUb0ltYWdlQml0bWFwKGRhdGE6IEFycmF5QnVmZmVyLCBjYWxsYmFjazogKGVycjogP0Vycm9yLCBpbWFnZTogP0ltYWdlQml0bWFwKSA9PiB2b2lkKSB7XG4gICAgY29uc3QgYmxvYjogQmxvYiA9IG5ldyB3aW5kb3cuQmxvYihbbmV3IFVpbnQ4QXJyYXkoZGF0YSldLCB7dHlwZTogJ2ltYWdlL3BuZyd9KTtcbiAgICB3aW5kb3cuY3JlYXRlSW1hZ2VCaXRtYXAoYmxvYikudGhlbigoaW1nQml0bWFwKSA9PiB7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIGltZ0JpdG1hcCk7XG4gICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKGBDb3VsZCBub3QgbG9hZCBpbWFnZSBiZWNhdXNlIG9mICR7ZS5tZXNzYWdlfS4gUGxlYXNlIG1ha2Ugc3VyZSB0byB1c2UgYSBzdXBwb3J0ZWQgaW1hZ2UgdHlwZSBzdWNoIGFzIFBORyBvciBKUEVHLiBOb3RlIHRoYXQgU1ZHcyBhcmUgbm90IHN1cHBvcnRlZC5gKSk7XG4gICAgfSk7XG59XG5cbmxldCBpbWFnZVF1ZXVlLCBudW1JbWFnZVJlcXVlc3RzO1xuZXhwb3J0IGNvbnN0IHJlc2V0SW1hZ2VSZXF1ZXN0UXVldWUgPSAoKSA9PiB7XG4gICAgaW1hZ2VRdWV1ZSA9IFtdO1xuICAgIG51bUltYWdlUmVxdWVzdHMgPSAwO1xufTtcbnJlc2V0SW1hZ2VSZXF1ZXN0UXVldWUoKTtcblxuZXhwb3J0IGNvbnN0IGdldEltYWdlID0gZnVuY3Rpb24ocmVxdWVzdFBhcmFtZXRlcnM6IFJlcXVlc3RQYXJhbWV0ZXJzLCBjYWxsYmFjazogQ2FsbGJhY2s8SFRNTEltYWdlRWxlbWVudCB8IEltYWdlQml0bWFwPik6IENhbmNlbGFibGUge1xuICAgIGlmICh3ZWJwU3VwcG9ydGVkLnN1cHBvcnRlZCkge1xuICAgICAgICBpZiAoIXJlcXVlc3RQYXJhbWV0ZXJzLmhlYWRlcnMpIHtcbiAgICAgICAgICAgIHJlcXVlc3RQYXJhbWV0ZXJzLmhlYWRlcnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICByZXF1ZXN0UGFyYW1ldGVycy5oZWFkZXJzLmFjY2VwdCA9ICdpbWFnZS93ZWJwLCovKic7XG4gICAgfVxuXG4gICAgLy8gbGltaXQgY29uY3VycmVudCBpbWFnZSBsb2FkcyB0byBoZWxwIHdpdGggcmFzdGVyIHNvdXJjZXMgcGVyZm9ybWFuY2Ugb24gYmlnIHNjcmVlbnNcbiAgICBpZiAobnVtSW1hZ2VSZXF1ZXN0cyA+PSBjb25maWcuTUFYX1BBUkFMTEVMX0lNQUdFX1JFUVVFU1RTKSB7XG4gICAgICAgIGNvbnN0IHF1ZXVlZCA9IHtcbiAgICAgICAgICAgIHJlcXVlc3RQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgY2FsbGJhY2ssXG4gICAgICAgICAgICBjYW5jZWxsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgY2FuY2VsKCkgeyB0aGlzLmNhbmNlbGxlZCA9IHRydWU7IH1cbiAgICAgICAgfTtcbiAgICAgICAgaW1hZ2VRdWV1ZS5wdXNoKHF1ZXVlZCk7XG4gICAgICAgIHJldHVybiBxdWV1ZWQ7XG4gICAgfVxuICAgIG51bUltYWdlUmVxdWVzdHMrKztcblxuICAgIGxldCBhZHZhbmNlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGFkdmFuY2VJbWFnZVJlcXVlc3RRdWV1ZSA9ICgpID0+IHtcbiAgICAgICAgaWYgKGFkdmFuY2VkKSByZXR1cm47XG4gICAgICAgIGFkdmFuY2VkID0gdHJ1ZTtcbiAgICAgICAgbnVtSW1hZ2VSZXF1ZXN0cy0tO1xuICAgICAgICBhc3NlcnQobnVtSW1hZ2VSZXF1ZXN0cyA+PSAwKTtcbiAgICAgICAgd2hpbGUgKGltYWdlUXVldWUubGVuZ3RoICYmIG51bUltYWdlUmVxdWVzdHMgPCBjb25maWcuTUFYX1BBUkFMTEVMX0lNQUdFX1JFUVVFU1RTKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSBpbWFnZVF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgICBjb25zdCB7cmVxdWVzdFBhcmFtZXRlcnMsIGNhbGxiYWNrLCBjYW5jZWxsZWR9ID0gcmVxdWVzdDtcbiAgICAgICAgICAgIGlmICghY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5jYW5jZWwgPSBnZXRJbWFnZShyZXF1ZXN0UGFyYW1ldGVycywgY2FsbGJhY2spLmNhbmNlbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvLyByZXF1ZXN0IHRoZSBpbWFnZSB3aXRoIFhIUiB0byB3b3JrIGFyb3VuZCBjYWNoaW5nIGlzc3Vlc1xuICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvMTQ3MFxuICAgIGNvbnN0IHJlcXVlc3QgPSBnZXRBcnJheUJ1ZmZlcihyZXF1ZXN0UGFyYW1ldGVycywgKGVycjogP0Vycm9yLCBkYXRhOiA/QXJyYXlCdWZmZXIsIGNhY2hlQ29udHJvbDogP3N0cmluZywgZXhwaXJlczogP3N0cmluZykgPT4ge1xuXG4gICAgICAgIGFkdmFuY2VJbWFnZVJlcXVlc3RRdWV1ZSgpO1xuXG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YSkge1xuICAgICAgICAgICAgaWYgKG9mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCgpKSB7XG4gICAgICAgICAgICAgICAgYXJyYXlCdWZmZXJUb0ltYWdlQml0bWFwKGRhdGEsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYXJyYXlCdWZmZXJUb0ltYWdlKGRhdGEsIGNhbGxiYWNrLCBjYWNoZUNvbnRyb2wsIGV4cGlyZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBjYW5jZWw6ICgpID0+IHtcbiAgICAgICAgICAgIHJlcXVlc3QuY2FuY2VsKCk7XG4gICAgICAgICAgICBhZHZhbmNlSW1hZ2VSZXF1ZXN0UXVldWUoKTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VmlkZW8gPSBmdW5jdGlvbih1cmxzOiBBcnJheTxzdHJpbmc+LCBjYWxsYmFjazogQ2FsbGJhY2s8SFRNTFZpZGVvRWxlbWVudD4pOiBDYW5jZWxhYmxlIHtcbiAgICBjb25zdCB2aWRlbzogSFRNTFZpZGVvRWxlbWVudCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpO1xuICAgIHZpZGVvLm11dGVkID0gdHJ1ZTtcbiAgICB2aWRlby5vbmxvYWRzdGFydCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBjYWxsYmFjayhudWxsLCB2aWRlbyk7XG4gICAgfTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHVybHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgczogSFRNTFNvdXJjZUVsZW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7XG4gICAgICAgIGlmICghc2FtZU9yaWdpbih1cmxzW2ldKSkge1xuICAgICAgICAgICAgdmlkZW8uY3Jvc3NPcmlnaW4gPSAnQW5vbnltb3VzJztcbiAgICAgICAgfVxuICAgICAgICBzLnNyYyA9IHVybHNbaV07XG4gICAgICAgIHZpZGVvLmFwcGVuZENoaWxkKHMpO1xuICAgIH1cbiAgICByZXR1cm4ge2NhbmNlbDogKCkgPT4ge319O1xufTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7ZXh0ZW5kfSBmcm9tICcuL3V0aWwnO1xuXG50eXBlIExpc3RlbmVyID0gKE9iamVjdCkgPT4gYW55O1xudHlwZSBMaXN0ZW5lcnMgPSB7W186IHN0cmluZ106IEFycmF5PExpc3RlbmVyPiB9O1xuXG5mdW5jdGlvbiBfYWRkRXZlbnRMaXN0ZW5lcih0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiBMaXN0ZW5lciwgbGlzdGVuZXJMaXN0OiBMaXN0ZW5lcnMpIHtcbiAgICBjb25zdCBsaXN0ZW5lckV4aXN0cyA9IGxpc3RlbmVyTGlzdFt0eXBlXSAmJiBsaXN0ZW5lckxpc3RbdHlwZV0uaW5kZXhPZihsaXN0ZW5lcikgIT09IC0xO1xuICAgIGlmICghbGlzdGVuZXJFeGlzdHMpIHtcbiAgICAgICAgbGlzdGVuZXJMaXN0W3R5cGVdID0gbGlzdGVuZXJMaXN0W3R5cGVdIHx8IFtdO1xuICAgICAgICBsaXN0ZW5lckxpc3RbdHlwZV0ucHVzaChsaXN0ZW5lcik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBfcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlOiBzdHJpbmcsIGxpc3RlbmVyOiBMaXN0ZW5lciwgbGlzdGVuZXJMaXN0OiBMaXN0ZW5lcnMpIHtcbiAgICBpZiAobGlzdGVuZXJMaXN0ICYmIGxpc3RlbmVyTGlzdFt0eXBlXSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IGxpc3RlbmVyTGlzdFt0eXBlXS5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgbGlzdGVuZXJMaXN0W3R5cGVdLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFdmVudCB7XG4gICAgK3R5cGU6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKHR5cGU6IHN0cmluZywgZGF0YTogT2JqZWN0ID0ge30pIHtcbiAgICAgICAgZXh0ZW5kKHRoaXMsIGRhdGEpO1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIH1cbn1cblxuaW50ZXJmYWNlIEVycm9yTGlrZSB7XG4gICAgbWVzc2FnZTogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgRXJyb3JFdmVudCBleHRlbmRzIEV2ZW50IHtcbiAgICBlcnJvcjogRXJyb3JMaWtlO1xuXG4gICAgY29uc3RydWN0b3IoZXJyb3I6IEVycm9yTGlrZSwgZGF0YTogT2JqZWN0ID0ge30pIHtcbiAgICAgICAgc3VwZXIoJ2Vycm9yJywgZXh0ZW5kKHtlcnJvcn0sIGRhdGEpKTtcbiAgICB9XG59XG5cbi8qKlxuICogTWV0aG9kcyBtaXhlZCBpbiB0byBvdGhlciBjbGFzc2VzIGZvciBldmVudCBjYXBhYmlsaXRpZXMuXG4gKlxuICogQG1peGluIEV2ZW50ZWRcbiAqL1xuZXhwb3J0IGNsYXNzIEV2ZW50ZWQge1xuICAgIF9saXN0ZW5lcnM6IExpc3RlbmVycztcbiAgICBfb25lVGltZUxpc3RlbmVyczogTGlzdGVuZXJzO1xuICAgIF9ldmVudGVkUGFyZW50OiA/RXZlbnRlZDtcbiAgICBfZXZlbnRlZFBhcmVudERhdGE6ID8oT2JqZWN0IHwgKCkgPT4gT2JqZWN0KTtcblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBsaXN0ZW5lciB0byBhIHNwZWNpZmllZCBldmVudCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgVGhlIGV2ZW50IHR5cGUgdG8gYWRkIGEgbGlzdGVuIGZvci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciBUaGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGV2ZW50IGlzIGZpcmVkLlxuICAgICAqICAgVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHRoZSBkYXRhIG9iamVjdCBwYXNzZWQgdG8gYGZpcmVgLFxuICAgICAqICAgZXh0ZW5kZWQgd2l0aCBgdGFyZ2V0YCBhbmQgYHR5cGVgIHByb3BlcnRpZXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gYHRoaXNgXG4gICAgICovXG4gICAgb24odHlwZTogKiwgbGlzdGVuZXI6IExpc3RlbmVyKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2xpc3RlbmVycyA9IHRoaXMuX2xpc3RlbmVycyB8fCB7fTtcbiAgICAgICAgX2FkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIHRoaXMuX2xpc3RlbmVycyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFRoZSBldmVudCB0eXBlIHRvIHJlbW92ZSBsaXN0ZW5lcnMgZm9yLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byByZW1vdmUuXG4gICAgICogQHJldHVybnMge09iamVjdH0gYHRoaXNgXG4gICAgICovXG4gICAgb2ZmKHR5cGU6ICosIGxpc3RlbmVyOiBMaXN0ZW5lcikge1xuICAgICAgICBfcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgdGhpcy5fbGlzdGVuZXJzKTtcbiAgICAgICAgX3JlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIHRoaXMuX29uZVRpbWVMaXN0ZW5lcnMpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBsaXN0ZW5lciB0aGF0IHdpbGwgYmUgY2FsbGVkIG9ubHkgb25jZSB0byBhIHNwZWNpZmllZCBldmVudCB0eXBlLlxuICAgICAqXG4gICAgICogVGhlIGxpc3RlbmVyIHdpbGwgYmUgY2FsbGVkIGZpcnN0IHRpbWUgdGhlIGV2ZW50IGZpcmVzIGFmdGVyIHRoZSBsaXN0ZW5lciBpcyByZWdpc3RlcmVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgVGhlIGV2ZW50IHR5cGUgdG8gbGlzdGVuIGZvci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciBUaGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGV2ZW50IGlzIGZpcmVkIHRoZSBmaXJzdCB0aW1lLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IGB0aGlzYFxuICAgICAqL1xuICAgIG9uY2UodHlwZTogKiwgbGlzdGVuZXI6IExpc3RlbmVyKSB7XG4gICAgICAgIHRoaXMuX29uZVRpbWVMaXN0ZW5lcnMgPSB0aGlzLl9vbmVUaW1lTGlzdGVuZXJzIHx8IHt9O1xuICAgICAgICBfYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgdGhpcy5fb25lVGltZUxpc3RlbmVycyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZmlyZShldmVudDogRXZlbnQsIHByb3BlcnRpZXM/OiBPYmplY3QpIHtcbiAgICAgICAgLy8gQ29tcGF0aWJpbGl0eSB3aXRoICh0eXBlOiBzdHJpbmcsIHByb3BlcnRpZXM6IE9iamVjdCkgc2lnbmF0dXJlIGZyb20gcHJldmlvdXMgdmVyc2lvbnMuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvNjUyMixcbiAgICAgICAgLy8gICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWRyYXcvaXNzdWVzLzc2NlxuICAgICAgICBpZiAodHlwZW9mIGV2ZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZXZlbnQgPSBuZXcgRXZlbnQoZXZlbnQsIHByb3BlcnRpZXMgfHwge30pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdHlwZSA9IGV2ZW50LnR5cGU7XG5cbiAgICAgICAgaWYgKHRoaXMubGlzdGVucyh0eXBlKSkge1xuICAgICAgICAgICAgKGV2ZW50OiBhbnkpLnRhcmdldCA9IHRoaXM7XG5cbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBhZGRpbmcgb3IgcmVtb3ZpbmcgbGlzdGVuZXJzIGluc2lkZSBvdGhlciBsaXN0ZW5lcnMgd29uJ3QgY2F1c2UgYW4gaW5maW5pdGUgbG9vcFxuICAgICAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gdGhpcy5fbGlzdGVuZXJzICYmIHRoaXMuX2xpc3RlbmVyc1t0eXBlXSA/IHRoaXMuX2xpc3RlbmVyc1t0eXBlXS5zbGljZSgpIDogW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIGxpc3RlbmVycykge1xuICAgICAgICAgICAgICAgIGxpc3RlbmVyLmNhbGwodGhpcywgZXZlbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBvbmVUaW1lTGlzdGVuZXJzID0gdGhpcy5fb25lVGltZUxpc3RlbmVycyAmJiB0aGlzLl9vbmVUaW1lTGlzdGVuZXJzW3R5cGVdID8gdGhpcy5fb25lVGltZUxpc3RlbmVyc1t0eXBlXS5zbGljZSgpIDogW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIG9uZVRpbWVMaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgICAgICBfcmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgdGhpcy5fb25lVGltZUxpc3RlbmVycyk7XG4gICAgICAgICAgICAgICAgbGlzdGVuZXIuY2FsbCh0aGlzLCBldmVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX2V2ZW50ZWRQYXJlbnQ7XG4gICAgICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICAgICAgZXh0ZW5kKFxuICAgICAgICAgICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHRoaXMuX2V2ZW50ZWRQYXJlbnREYXRhID09PSAnZnVuY3Rpb24nID8gdGhpcy5fZXZlbnRlZFBhcmVudERhdGEoKSA6IHRoaXMuX2V2ZW50ZWRQYXJlbnREYXRhXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBwYXJlbnQuZmlyZShldmVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgLy8gVG8gZW5zdXJlIHRoYXQgbm8gZXJyb3IgZXZlbnRzIGFyZSBkcm9wcGVkLCBwcmludCB0aGVtIHRvIHRoZVxuICAgICAgICAvLyBjb25zb2xlIGlmIHRoZXkgaGF2ZSBubyBsaXN0ZW5lcnMuXG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBFcnJvckV2ZW50KSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGV2ZW50LmVycm9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSB0cnVlIGlmIHRoaXMgaW5zdGFuY2Ugb2YgRXZlbnRlZCBvciBhbnkgZm9yd2FyZGVlZCBpbnN0YW5jZXMgb2YgRXZlbnRlZCBoYXZlIGEgbGlzdGVuZXIgZm9yIHRoZSBzcGVjaWZpZWQgdHlwZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFRoZSBldmVudCB0eXBlXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgcmVnaXN0ZXJlZCBsaXN0ZW5lciBmb3Igc3BlY2lmaWVkIGV2ZW50IHR5cGUsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBsaXN0ZW5zKHR5cGU6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHRoaXMuX2xpc3RlbmVycyAmJiB0aGlzLl9saXN0ZW5lcnNbdHlwZV0gJiYgdGhpcy5fbGlzdGVuZXJzW3R5cGVdLmxlbmd0aCA+IDApIHx8XG4gICAgICAgICAgICAodGhpcy5fb25lVGltZUxpc3RlbmVycyAmJiB0aGlzLl9vbmVUaW1lTGlzdGVuZXJzW3R5cGVdICYmIHRoaXMuX29uZVRpbWVMaXN0ZW5lcnNbdHlwZV0ubGVuZ3RoID4gMCkgfHxcbiAgICAgICAgICAgICh0aGlzLl9ldmVudGVkUGFyZW50ICYmIHRoaXMuX2V2ZW50ZWRQYXJlbnQubGlzdGVucyh0eXBlKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCdWJibGUgYWxsIGV2ZW50cyBmaXJlZCBieSB0aGlzIGluc3RhbmNlIG9mIEV2ZW50ZWQgdG8gdGhpcyBwYXJlbnQgaW5zdGFuY2Ugb2YgRXZlbnRlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHJldHVybnMge09iamVjdH0gYHRoaXNgXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBzZXRFdmVudGVkUGFyZW50KHBhcmVudDogP0V2ZW50ZWQsIGRhdGE/OiBPYmplY3QgfCAoKSA9PiBPYmplY3QpIHtcbiAgICAgICAgdGhpcy5fZXZlbnRlZFBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgdGhpcy5fZXZlbnRlZFBhcmVudERhdGEgPSBkYXRhO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbi8vIE5vdGU6IERvIG5vdCBpbmhlcml0IGZyb20gRXJyb3IuIEl0IGJyZWFrcyB3aGVuIHRyYW5zcGlsaW5nIHRvIEVTNS5cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmFsaWRhdGlvbkVycm9yIHtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgaWRlbnRpZmllcjogP3N0cmluZztcbiAgICBsaW5lOiA/bnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3Ioa2V5OiA/c3RyaW5nLCB2YWx1ZTogP3sgX19saW5lX186IG51bWJlciB9LCBtZXNzYWdlOiBzdHJpbmcsIGlkZW50aWZpZXI6ID9zdHJpbmcpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gKGtleSA/IGAke2tleX06IGAgOiAnJykgKyBtZXNzYWdlO1xuICAgICAgICBpZiAoaWRlbnRpZmllcikgdGhpcy5pZGVudGlmaWVyID0gaWRlbnRpZmllcjtcblxuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS5fX2xpbmVfXykge1xuICAgICAgICAgICAgdGhpcy5saW5lID0gdmFsdWUuX19saW5lX187XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJcbmltcG9ydCBWYWxpZGF0aW9uRXJyb3IgZnJvbSAnLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvcic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlQ29uc3RhbnRzKG9wdGlvbnMpIHtcbiAgICBjb25zdCBrZXkgPSBvcHRpb25zLmtleTtcbiAgICBjb25zdCBjb25zdGFudHMgPSBvcHRpb25zLnZhbHVlO1xuXG4gICAgaWYgKGNvbnN0YW50cykge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCBjb25zdGFudHMsICdjb25zdGFudHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQgYXMgb2YgdjgnKV07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChvdXRwdXQ6IGFueSwgLi4uaW5wdXRzOiBBcnJheTxhbnk+KSB7XG4gICAgZm9yIChjb25zdCBpbnB1dCBvZiBpbnB1dHMpIHtcbiAgICAgICAgZm9yIChjb25zdCBrIGluIGlucHV0KSB7XG4gICAgICAgICAgICBvdXRwdXRba10gPSBpbnB1dFtrXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xufVxuIiwiLy8gQGZsb3dcblxuLy8gVHVybiBqc29ubGludC1saW5lcy1wcmltaXRpdmVzIG9iamVjdHMgaW50byBwcmltaXRpdmUgb2JqZWN0c1xuZXhwb3J0IGZ1bmN0aW9uIHVuYnVuZGxlKHZhbHVlOiBtaXhlZCkge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE51bWJlciB8fCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZyB8fCB2YWx1ZSBpbnN0YW5jZW9mIEJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlT2YoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVlcFVuYnVuZGxlKHZhbHVlOiBtaXhlZCk6IG1peGVkIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLm1hcChkZWVwVW5idW5kbGUpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBPYmplY3QgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIE51bWJlciB8fCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZyB8fCB2YWx1ZSBpbnN0YW5jZW9mIEJvb2xlYW4pKSB7XG4gICAgICAgIGNvbnN0IHVuYnVuZGxlZFZhbHVlOiB7IFtrZXk6IHN0cmluZ106IG1peGVkIH0gPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgIHVuYnVuZGxlZFZhbHVlW2tleV0gPSBkZWVwVW5idW5kbGUodmFsdWVba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuYnVuZGxlZFZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiB1bmJ1bmRsZSh2YWx1ZSk7XG59XG4iLCIvLyBAZmxvd1xuXG5jbGFzcyBQYXJzaW5nRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgbWVzc2FnZTogc3RyaW5nO1xuICAgIGNvbnN0cnVjdG9yKGtleTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIHRoaXMua2V5ID0ga2V5O1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUGFyc2luZ0Vycm9yO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4vZXhwcmVzc2lvbic7XG5cbi8qKlxuICogVHJhY2tzIGBsZXRgIGJpbmRpbmdzIGR1cmluZyBleHByZXNzaW9uIHBhcnNpbmcuXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTY29wZSB7XG4gICAgcGFyZW50OiA/U2NvcGU7XG4gICAgYmluZGluZ3M6IHtbXzogc3RyaW5nXTogRXhwcmVzc2lvbn07XG4gICAgY29uc3RydWN0b3IocGFyZW50PzogU2NvcGUsIGJpbmRpbmdzOiBBcnJheTxbc3RyaW5nLCBFeHByZXNzaW9uXT4gPSBbXSkge1xuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgdGhpcy5iaW5kaW5ncyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IFtuYW1lLCBleHByZXNzaW9uXSBvZiBiaW5kaW5ncykge1xuICAgICAgICAgICAgdGhpcy5iaW5kaW5nc1tuYW1lXSA9IGV4cHJlc3Npb247XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25jYXQoYmluZGluZ3M6IEFycmF5PFtzdHJpbmcsIEV4cHJlc3Npb25dPikge1xuICAgICAgICByZXR1cm4gbmV3IFNjb3BlKHRoaXMsIGJpbmRpbmdzKTtcbiAgICB9XG5cbiAgICBnZXQobmFtZTogc3RyaW5nKTogRXhwcmVzc2lvbiB7XG4gICAgICAgIGlmICh0aGlzLmJpbmRpbmdzW25hbWVdKSB7IHJldHVybiB0aGlzLmJpbmRpbmdzW25hbWVdOyB9XG4gICAgICAgIGlmICh0aGlzLnBhcmVudCkgeyByZXR1cm4gdGhpcy5wYXJlbnQuZ2V0KG5hbWUpOyB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtuYW1lfSBub3QgZm91bmQgaW4gc2NvcGUuYCk7XG4gICAgfVxuXG4gICAgaGFzKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5iaW5kaW5nc1tuYW1lXSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudCA/IHRoaXMucGFyZW50LmhhcyhuYW1lKSA6IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2NvcGU7XG4iLCIvLyBAZmxvd1xuXG5leHBvcnQgdHlwZSBOdWxsVHlwZVQgPSB7IGtpbmQ6ICdudWxsJyB9O1xuZXhwb3J0IHR5cGUgTnVtYmVyVHlwZVQgPSB7IGtpbmQ6ICdudW1iZXInIH07XG5leHBvcnQgdHlwZSBTdHJpbmdUeXBlVCA9IHsga2luZDogJ3N0cmluZycgfTtcbmV4cG9ydCB0eXBlIEJvb2xlYW5UeXBlVCA9IHsga2luZDogJ2Jvb2xlYW4nIH07XG5leHBvcnQgdHlwZSBDb2xvclR5cGVUID0geyBraW5kOiAnY29sb3InIH07XG5leHBvcnQgdHlwZSBPYmplY3RUeXBlVCA9IHsga2luZDogJ29iamVjdCcgfTtcbmV4cG9ydCB0eXBlIFZhbHVlVHlwZVQgPSB7IGtpbmQ6ICd2YWx1ZScgfTtcbmV4cG9ydCB0eXBlIEVycm9yVHlwZVQgPSB7IGtpbmQ6ICdlcnJvcicgfTtcbmV4cG9ydCB0eXBlIENvbGxhdG9yVHlwZVQgPSB7IGtpbmQ6ICdjb2xsYXRvcicgfTtcbmV4cG9ydCB0eXBlIEZvcm1hdHRlZFR5cGVUID0geyBraW5kOiAnZm9ybWF0dGVkJyB9O1xuZXhwb3J0IHR5cGUgUmVzb2x2ZWRJbWFnZVR5cGVUID0geyBraW5kOiAncmVzb2x2ZWRJbWFnZScgfTtcblxuZXhwb3J0IHR5cGUgRXZhbHVhdGlvbktpbmQgPSAnY29uc3RhbnQnIHwgJ3NvdXJjZScgfCAnY2FtZXJhJyB8ICdjb21wb3NpdGUnO1xuXG5leHBvcnQgdHlwZSBUeXBlID1cbiAgICBOdWxsVHlwZVQgfFxuICAgIE51bWJlclR5cGVUIHxcbiAgICBTdHJpbmdUeXBlVCB8XG4gICAgQm9vbGVhblR5cGVUIHxcbiAgICBDb2xvclR5cGVUIHxcbiAgICBPYmplY3RUeXBlVCB8XG4gICAgVmFsdWVUeXBlVCB8XG4gICAgQXJyYXlUeXBlIHwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgIEVycm9yVHlwZVQgfFxuICAgIENvbGxhdG9yVHlwZVQgfFxuICAgIEZvcm1hdHRlZFR5cGVUIHxcbiAgICBSZXNvbHZlZEltYWdlVHlwZVRcblxuZXhwb3J0IHR5cGUgQXJyYXlUeXBlID0ge1xuICAgIGtpbmQ6ICdhcnJheScsXG4gICAgaXRlbVR5cGU6IFR5cGUsXG4gICAgTjogP251bWJlclxufVxuXG5leHBvcnQgdHlwZSBOYXRpdmVUeXBlID0gJ251bWJlcicgfCAnc3RyaW5nJyB8ICdib29sZWFuJyB8ICdudWxsJyB8ICdhcnJheScgfCAnb2JqZWN0J1xuXG5leHBvcnQgY29uc3QgTnVsbFR5cGUgPSB7a2luZDogJ251bGwnfTtcbmV4cG9ydCBjb25zdCBOdW1iZXJUeXBlID0ge2tpbmQ6ICdudW1iZXInfTtcbmV4cG9ydCBjb25zdCBTdHJpbmdUeXBlID0ge2tpbmQ6ICdzdHJpbmcnfTtcbmV4cG9ydCBjb25zdCBCb29sZWFuVHlwZSA9IHtraW5kOiAnYm9vbGVhbid9O1xuZXhwb3J0IGNvbnN0IENvbG9yVHlwZSA9IHtraW5kOiAnY29sb3InfTtcbmV4cG9ydCBjb25zdCBPYmplY3RUeXBlID0ge2tpbmQ6ICdvYmplY3QnfTtcbmV4cG9ydCBjb25zdCBWYWx1ZVR5cGUgPSB7a2luZDogJ3ZhbHVlJ307XG5leHBvcnQgY29uc3QgRXJyb3JUeXBlID0ge2tpbmQ6ICdlcnJvcid9O1xuZXhwb3J0IGNvbnN0IENvbGxhdG9yVHlwZSA9IHtraW5kOiAnY29sbGF0b3InfTtcbmV4cG9ydCBjb25zdCBGb3JtYXR0ZWRUeXBlID0ge2tpbmQ6ICdmb3JtYXR0ZWQnfTtcbmV4cG9ydCBjb25zdCBSZXNvbHZlZEltYWdlVHlwZSA9IHtraW5kOiAncmVzb2x2ZWRJbWFnZSd9O1xuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXkoaXRlbVR5cGU6IFR5cGUsIE46ID9udW1iZXIpOiBBcnJheVR5cGUge1xuICAgIHJldHVybiB7XG4gICAgICAgIGtpbmQ6ICdhcnJheScsXG4gICAgICAgIGl0ZW1UeXBlLFxuICAgICAgICBOXG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvU3RyaW5nKHR5cGU6IFR5cGUpOiBzdHJpbmcge1xuICAgIGlmICh0eXBlLmtpbmQgPT09ICdhcnJheScpIHtcbiAgICAgICAgY29uc3QgaXRlbVR5cGUgPSB0b1N0cmluZyh0eXBlLml0ZW1UeXBlKTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB0eXBlLk4gPT09ICdudW1iZXInID9cbiAgICAgICAgICAgIGBhcnJheTwke2l0ZW1UeXBlfSwgJHt0eXBlLk59PmAgOlxuICAgICAgICAgICAgdHlwZS5pdGVtVHlwZS5raW5kID09PSAndmFsdWUnID8gJ2FycmF5JyA6IGBhcnJheTwke2l0ZW1UeXBlfT5gO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0eXBlLmtpbmQ7XG4gICAgfVxufVxuXG5jb25zdCB2YWx1ZU1lbWJlclR5cGVzID0gW1xuICAgIE51bGxUeXBlLFxuICAgIE51bWJlclR5cGUsXG4gICAgU3RyaW5nVHlwZSxcbiAgICBCb29sZWFuVHlwZSxcbiAgICBDb2xvclR5cGUsXG4gICAgRm9ybWF0dGVkVHlwZSxcbiAgICBPYmplY3RUeXBlLFxuICAgIGFycmF5KFZhbHVlVHlwZSksXG4gICAgUmVzb2x2ZWRJbWFnZVR5cGVcbl07XG5cbi8qKlxuICogUmV0dXJucyBudWxsIGlmIGB0YCBpcyBhIHN1YnR5cGUgb2YgYGV4cGVjdGVkYDsgb3RoZXJ3aXNlIHJldHVybnMgYW5cbiAqIGVycm9yIG1lc3NhZ2UuXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tTdWJ0eXBlKGV4cGVjdGVkOiBUeXBlLCB0OiBUeXBlKTogP3N0cmluZyB7XG4gICAgaWYgKHQua2luZCA9PT0gJ2Vycm9yJykge1xuICAgICAgICAvLyBFcnJvciBpcyBhIHN1YnR5cGUgb2YgZXZlcnkgdHlwZVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2UgaWYgKGV4cGVjdGVkLmtpbmQgPT09ICdhcnJheScpIHtcbiAgICAgICAgaWYgKHQua2luZCA9PT0gJ2FycmF5JyAmJlxuICAgICAgICAgICAgKCh0Lk4gPT09IDAgJiYgdC5pdGVtVHlwZS5raW5kID09PSAndmFsdWUnKSB8fCAhY2hlY2tTdWJ0eXBlKGV4cGVjdGVkLml0ZW1UeXBlLCB0Lml0ZW1UeXBlKSkgJiZcbiAgICAgICAgICAgICh0eXBlb2YgZXhwZWN0ZWQuTiAhPT0gJ251bWJlcicgfHwgZXhwZWN0ZWQuTiA9PT0gdC5OKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV4cGVjdGVkLmtpbmQgPT09IHQua2luZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2UgaWYgKGV4cGVjdGVkLmtpbmQgPT09ICd2YWx1ZScpIHtcbiAgICAgICAgZm9yIChjb25zdCBtZW1iZXJUeXBlIG9mIHZhbHVlTWVtYmVyVHlwZXMpIHtcbiAgICAgICAgICAgIGlmICghY2hlY2tTdWJ0eXBlKG1lbWJlclR5cGUsIHQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYEV4cGVjdGVkICR7dG9TdHJpbmcoZXhwZWN0ZWQpfSBidXQgZm91bmQgJHt0b1N0cmluZyh0KX0gaW5zdGVhZC5gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFR5cGUocHJvdmlkZWQ6IFR5cGUsIGFsbG93ZWRUeXBlczogQXJyYXk8VHlwZT4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gYWxsb3dlZFR5cGVzLnNvbWUodCA9PiB0LmtpbmQgPT09IHByb3ZpZGVkLmtpbmQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZE5hdGl2ZVR5cGUocHJvdmlkZWQ6IGFueSwgYWxsb3dlZFR5cGVzOiBBcnJheTxOYXRpdmVUeXBlPik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhbGxvd2VkVHlwZXMuc29tZSh0ID0+IHtcbiAgICAgICAgaWYgKHQgPT09ICdudWxsJykge1xuICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVkID09PSBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKHQgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHByb3ZpZGVkKTtcbiAgICAgICAgfSBlbHNlIGlmICh0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVkICYmICFBcnJheS5pc0FycmF5KHByb3ZpZGVkKSAmJiB0eXBlb2YgcHJvdmlkZWQgPT09ICdvYmplY3QnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHQgPT09IHR5cGVvZiBwcm92aWRlZDtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuIiwiLy8gKGMpIERlYW4gTWNOYW1lZSA8ZGVhbkBnbWFpbC5jb20+LCAyMDEyLlxuLy9cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kZWFubS9jc3MtY29sb3ItcGFyc2VyLWpzXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG9cbi8vIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4vLyByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Jcbi8vIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbi8vIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1Ncbi8vIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1jb2xvci9cbnZhciBrQ1NTQ29sb3JUYWJsZSA9IHtcbiAgXCJ0cmFuc3BhcmVudFwiOiBbMCwwLDAsMF0sIFwiYWxpY2VibHVlXCI6IFsyNDAsMjQ4LDI1NSwxXSxcbiAgXCJhbnRpcXVld2hpdGVcIjogWzI1MCwyMzUsMjE1LDFdLCBcImFxdWFcIjogWzAsMjU1LDI1NSwxXSxcbiAgXCJhcXVhbWFyaW5lXCI6IFsxMjcsMjU1LDIxMiwxXSwgXCJhenVyZVwiOiBbMjQwLDI1NSwyNTUsMV0sXG4gIFwiYmVpZ2VcIjogWzI0NSwyNDUsMjIwLDFdLCBcImJpc3F1ZVwiOiBbMjU1LDIyOCwxOTYsMV0sXG4gIFwiYmxhY2tcIjogWzAsMCwwLDFdLCBcImJsYW5jaGVkYWxtb25kXCI6IFsyNTUsMjM1LDIwNSwxXSxcbiAgXCJibHVlXCI6IFswLDAsMjU1LDFdLCBcImJsdWV2aW9sZXRcIjogWzEzOCw0MywyMjYsMV0sXG4gIFwiYnJvd25cIjogWzE2NSw0Miw0MiwxXSwgXCJidXJseXdvb2RcIjogWzIyMiwxODQsMTM1LDFdLFxuICBcImNhZGV0Ymx1ZVwiOiBbOTUsMTU4LDE2MCwxXSwgXCJjaGFydHJldXNlXCI6IFsxMjcsMjU1LDAsMV0sXG4gIFwiY2hvY29sYXRlXCI6IFsyMTAsMTA1LDMwLDFdLCBcImNvcmFsXCI6IFsyNTUsMTI3LDgwLDFdLFxuICBcImNvcm5mbG93ZXJibHVlXCI6IFsxMDAsMTQ5LDIzNywxXSwgXCJjb3Juc2lsa1wiOiBbMjU1LDI0OCwyMjAsMV0sXG4gIFwiY3JpbXNvblwiOiBbMjIwLDIwLDYwLDFdLCBcImN5YW5cIjogWzAsMjU1LDI1NSwxXSxcbiAgXCJkYXJrYmx1ZVwiOiBbMCwwLDEzOSwxXSwgXCJkYXJrY3lhblwiOiBbMCwxMzksMTM5LDFdLFxuICBcImRhcmtnb2xkZW5yb2RcIjogWzE4NCwxMzQsMTEsMV0sIFwiZGFya2dyYXlcIjogWzE2OSwxNjksMTY5LDFdLFxuICBcImRhcmtncmVlblwiOiBbMCwxMDAsMCwxXSwgXCJkYXJrZ3JleVwiOiBbMTY5LDE2OSwxNjksMV0sXG4gIFwiZGFya2toYWtpXCI6IFsxODksMTgzLDEwNywxXSwgXCJkYXJrbWFnZW50YVwiOiBbMTM5LDAsMTM5LDFdLFxuICBcImRhcmtvbGl2ZWdyZWVuXCI6IFs4NSwxMDcsNDcsMV0sIFwiZGFya29yYW5nZVwiOiBbMjU1LDE0MCwwLDFdLFxuICBcImRhcmtvcmNoaWRcIjogWzE1Myw1MCwyMDQsMV0sIFwiZGFya3JlZFwiOiBbMTM5LDAsMCwxXSxcbiAgXCJkYXJrc2FsbW9uXCI6IFsyMzMsMTUwLDEyMiwxXSwgXCJkYXJrc2VhZ3JlZW5cIjogWzE0MywxODgsMTQzLDFdLFxuICBcImRhcmtzbGF0ZWJsdWVcIjogWzcyLDYxLDEzOSwxXSwgXCJkYXJrc2xhdGVncmF5XCI6IFs0Nyw3OSw3OSwxXSxcbiAgXCJkYXJrc2xhdGVncmV5XCI6IFs0Nyw3OSw3OSwxXSwgXCJkYXJrdHVycXVvaXNlXCI6IFswLDIwNiwyMDksMV0sXG4gIFwiZGFya3Zpb2xldFwiOiBbMTQ4LDAsMjExLDFdLCBcImRlZXBwaW5rXCI6IFsyNTUsMjAsMTQ3LDFdLFxuICBcImRlZXBza3libHVlXCI6IFswLDE5MSwyNTUsMV0sIFwiZGltZ3JheVwiOiBbMTA1LDEwNSwxMDUsMV0sXG4gIFwiZGltZ3JleVwiOiBbMTA1LDEwNSwxMDUsMV0sIFwiZG9kZ2VyYmx1ZVwiOiBbMzAsMTQ0LDI1NSwxXSxcbiAgXCJmaXJlYnJpY2tcIjogWzE3OCwzNCwzNCwxXSwgXCJmbG9yYWx3aGl0ZVwiOiBbMjU1LDI1MCwyNDAsMV0sXG4gIFwiZm9yZXN0Z3JlZW5cIjogWzM0LDEzOSwzNCwxXSwgXCJmdWNoc2lhXCI6IFsyNTUsMCwyNTUsMV0sXG4gIFwiZ2FpbnNib3JvXCI6IFsyMjAsMjIwLDIyMCwxXSwgXCJnaG9zdHdoaXRlXCI6IFsyNDgsMjQ4LDI1NSwxXSxcbiAgXCJnb2xkXCI6IFsyNTUsMjE1LDAsMV0sIFwiZ29sZGVucm9kXCI6IFsyMTgsMTY1LDMyLDFdLFxuICBcImdyYXlcIjogWzEyOCwxMjgsMTI4LDFdLCBcImdyZWVuXCI6IFswLDEyOCwwLDFdLFxuICBcImdyZWVueWVsbG93XCI6IFsxNzMsMjU1LDQ3LDFdLCBcImdyZXlcIjogWzEyOCwxMjgsMTI4LDFdLFxuICBcImhvbmV5ZGV3XCI6IFsyNDAsMjU1LDI0MCwxXSwgXCJob3RwaW5rXCI6IFsyNTUsMTA1LDE4MCwxXSxcbiAgXCJpbmRpYW5yZWRcIjogWzIwNSw5Miw5MiwxXSwgXCJpbmRpZ29cIjogWzc1LDAsMTMwLDFdLFxuICBcIml2b3J5XCI6IFsyNTUsMjU1LDI0MCwxXSwgXCJraGFraVwiOiBbMjQwLDIzMCwxNDAsMV0sXG4gIFwibGF2ZW5kZXJcIjogWzIzMCwyMzAsMjUwLDFdLCBcImxhdmVuZGVyYmx1c2hcIjogWzI1NSwyNDAsMjQ1LDFdLFxuICBcImxhd25ncmVlblwiOiBbMTI0LDI1MiwwLDFdLCBcImxlbW9uY2hpZmZvblwiOiBbMjU1LDI1MCwyMDUsMV0sXG4gIFwibGlnaHRibHVlXCI6IFsxNzMsMjE2LDIzMCwxXSwgXCJsaWdodGNvcmFsXCI6IFsyNDAsMTI4LDEyOCwxXSxcbiAgXCJsaWdodGN5YW5cIjogWzIyNCwyNTUsMjU1LDFdLCBcImxpZ2h0Z29sZGVucm9keWVsbG93XCI6IFsyNTAsMjUwLDIxMCwxXSxcbiAgXCJsaWdodGdyYXlcIjogWzIxMSwyMTEsMjExLDFdLCBcImxpZ2h0Z3JlZW5cIjogWzE0NCwyMzgsMTQ0LDFdLFxuICBcImxpZ2h0Z3JleVwiOiBbMjExLDIxMSwyMTEsMV0sIFwibGlnaHRwaW5rXCI6IFsyNTUsMTgyLDE5MywxXSxcbiAgXCJsaWdodHNhbG1vblwiOiBbMjU1LDE2MCwxMjIsMV0sIFwibGlnaHRzZWFncmVlblwiOiBbMzIsMTc4LDE3MCwxXSxcbiAgXCJsaWdodHNreWJsdWVcIjogWzEzNSwyMDYsMjUwLDFdLCBcImxpZ2h0c2xhdGVncmF5XCI6IFsxMTksMTM2LDE1MywxXSxcbiAgXCJsaWdodHNsYXRlZ3JleVwiOiBbMTE5LDEzNiwxNTMsMV0sIFwibGlnaHRzdGVlbGJsdWVcIjogWzE3NiwxOTYsMjIyLDFdLFxuICBcImxpZ2h0eWVsbG93XCI6IFsyNTUsMjU1LDIyNCwxXSwgXCJsaW1lXCI6IFswLDI1NSwwLDFdLFxuICBcImxpbWVncmVlblwiOiBbNTAsMjA1LDUwLDFdLCBcImxpbmVuXCI6IFsyNTAsMjQwLDIzMCwxXSxcbiAgXCJtYWdlbnRhXCI6IFsyNTUsMCwyNTUsMV0sIFwibWFyb29uXCI6IFsxMjgsMCwwLDFdLFxuICBcIm1lZGl1bWFxdWFtYXJpbmVcIjogWzEwMiwyMDUsMTcwLDFdLCBcIm1lZGl1bWJsdWVcIjogWzAsMCwyMDUsMV0sXG4gIFwibWVkaXVtb3JjaGlkXCI6IFsxODYsODUsMjExLDFdLCBcIm1lZGl1bXB1cnBsZVwiOiBbMTQ3LDExMiwyMTksMV0sXG4gIFwibWVkaXVtc2VhZ3JlZW5cIjogWzYwLDE3OSwxMTMsMV0sIFwibWVkaXVtc2xhdGVibHVlXCI6IFsxMjMsMTA0LDIzOCwxXSxcbiAgXCJtZWRpdW1zcHJpbmdncmVlblwiOiBbMCwyNTAsMTU0LDFdLCBcIm1lZGl1bXR1cnF1b2lzZVwiOiBbNzIsMjA5LDIwNCwxXSxcbiAgXCJtZWRpdW12aW9sZXRyZWRcIjogWzE5OSwyMSwxMzMsMV0sIFwibWlkbmlnaHRibHVlXCI6IFsyNSwyNSwxMTIsMV0sXG4gIFwibWludGNyZWFtXCI6IFsyNDUsMjU1LDI1MCwxXSwgXCJtaXN0eXJvc2VcIjogWzI1NSwyMjgsMjI1LDFdLFxuICBcIm1vY2Nhc2luXCI6IFsyNTUsMjI4LDE4MSwxXSwgXCJuYXZham93aGl0ZVwiOiBbMjU1LDIyMiwxNzMsMV0sXG4gIFwibmF2eVwiOiBbMCwwLDEyOCwxXSwgXCJvbGRsYWNlXCI6IFsyNTMsMjQ1LDIzMCwxXSxcbiAgXCJvbGl2ZVwiOiBbMTI4LDEyOCwwLDFdLCBcIm9saXZlZHJhYlwiOiBbMTA3LDE0MiwzNSwxXSxcbiAgXCJvcmFuZ2VcIjogWzI1NSwxNjUsMCwxXSwgXCJvcmFuZ2VyZWRcIjogWzI1NSw2OSwwLDFdLFxuICBcIm9yY2hpZFwiOiBbMjE4LDExMiwyMTQsMV0sIFwicGFsZWdvbGRlbnJvZFwiOiBbMjM4LDIzMiwxNzAsMV0sXG4gIFwicGFsZWdyZWVuXCI6IFsxNTIsMjUxLDE1MiwxXSwgXCJwYWxldHVycXVvaXNlXCI6IFsxNzUsMjM4LDIzOCwxXSxcbiAgXCJwYWxldmlvbGV0cmVkXCI6IFsyMTksMTEyLDE0NywxXSwgXCJwYXBheWF3aGlwXCI6IFsyNTUsMjM5LDIxMywxXSxcbiAgXCJwZWFjaHB1ZmZcIjogWzI1NSwyMTgsMTg1LDFdLCBcInBlcnVcIjogWzIwNSwxMzMsNjMsMV0sXG4gIFwicGlua1wiOiBbMjU1LDE5MiwyMDMsMV0sIFwicGx1bVwiOiBbMjIxLDE2MCwyMjEsMV0sXG4gIFwicG93ZGVyYmx1ZVwiOiBbMTc2LDIyNCwyMzAsMV0sIFwicHVycGxlXCI6IFsxMjgsMCwxMjgsMV0sXG4gIFwicmViZWNjYXB1cnBsZVwiOiBbMTAyLDUxLDE1MywxXSxcbiAgXCJyZWRcIjogWzI1NSwwLDAsMV0sIFwicm9zeWJyb3duXCI6IFsxODgsMTQzLDE0MywxXSxcbiAgXCJyb3lhbGJsdWVcIjogWzY1LDEwNSwyMjUsMV0sIFwic2FkZGxlYnJvd25cIjogWzEzOSw2OSwxOSwxXSxcbiAgXCJzYWxtb25cIjogWzI1MCwxMjgsMTE0LDFdLCBcInNhbmR5YnJvd25cIjogWzI0NCwxNjQsOTYsMV0sXG4gIFwic2VhZ3JlZW5cIjogWzQ2LDEzOSw4NywxXSwgXCJzZWFzaGVsbFwiOiBbMjU1LDI0NSwyMzgsMV0sXG4gIFwic2llbm5hXCI6IFsxNjAsODIsNDUsMV0sIFwic2lsdmVyXCI6IFsxOTIsMTkyLDE5MiwxXSxcbiAgXCJza3libHVlXCI6IFsxMzUsMjA2LDIzNSwxXSwgXCJzbGF0ZWJsdWVcIjogWzEwNiw5MCwyMDUsMV0sXG4gIFwic2xhdGVncmF5XCI6IFsxMTIsMTI4LDE0NCwxXSwgXCJzbGF0ZWdyZXlcIjogWzExMiwxMjgsMTQ0LDFdLFxuICBcInNub3dcIjogWzI1NSwyNTAsMjUwLDFdLCBcInNwcmluZ2dyZWVuXCI6IFswLDI1NSwxMjcsMV0sXG4gIFwic3RlZWxibHVlXCI6IFs3MCwxMzAsMTgwLDFdLCBcInRhblwiOiBbMjEwLDE4MCwxNDAsMV0sXG4gIFwidGVhbFwiOiBbMCwxMjgsMTI4LDFdLCBcInRoaXN0bGVcIjogWzIxNiwxOTEsMjE2LDFdLFxuICBcInRvbWF0b1wiOiBbMjU1LDk5LDcxLDFdLCBcInR1cnF1b2lzZVwiOiBbNjQsMjI0LDIwOCwxXSxcbiAgXCJ2aW9sZXRcIjogWzIzOCwxMzAsMjM4LDFdLCBcIndoZWF0XCI6IFsyNDUsMjIyLDE3OSwxXSxcbiAgXCJ3aGl0ZVwiOiBbMjU1LDI1NSwyNTUsMV0sIFwid2hpdGVzbW9rZVwiOiBbMjQ1LDI0NSwyNDUsMV0sXG4gIFwieWVsbG93XCI6IFsyNTUsMjU1LDAsMV0sIFwieWVsbG93Z3JlZW5cIjogWzE1NCwyMDUsNTAsMV19XG5cbmZ1bmN0aW9uIGNsYW1wX2Nzc19ieXRlKGkpIHsgIC8vIENsYW1wIHRvIGludGVnZXIgMCAuLiAyNTUuXG4gIGkgPSBNYXRoLnJvdW5kKGkpOyAgLy8gU2VlbXMgdG8gYmUgd2hhdCBDaHJvbWUgZG9lcyAodnMgdHJ1bmNhdGlvbikuXG4gIHJldHVybiBpIDwgMCA/IDAgOiBpID4gMjU1ID8gMjU1IDogaTtcbn1cblxuZnVuY3Rpb24gY2xhbXBfY3NzX2Zsb2F0KGYpIHsgIC8vIENsYW1wIHRvIGZsb2F0IDAuMCAuLiAxLjAuXG4gIHJldHVybiBmIDwgMCA/IDAgOiBmID4gMSA/IDEgOiBmO1xufVxuXG5mdW5jdGlvbiBwYXJzZV9jc3NfaW50KHN0cikgeyAgLy8gaW50IG9yIHBlcmNlbnRhZ2UuXG4gIGlmIChzdHJbc3RyLmxlbmd0aCAtIDFdID09PSAnJScpXG4gICAgcmV0dXJuIGNsYW1wX2Nzc19ieXRlKHBhcnNlRmxvYXQoc3RyKSAvIDEwMCAqIDI1NSk7XG4gIHJldHVybiBjbGFtcF9jc3NfYnl0ZShwYXJzZUludChzdHIpKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VfY3NzX2Zsb2F0KHN0cikgeyAgLy8gZmxvYXQgb3IgcGVyY2VudGFnZS5cbiAgaWYgKHN0cltzdHIubGVuZ3RoIC0gMV0gPT09ICclJylcbiAgICByZXR1cm4gY2xhbXBfY3NzX2Zsb2F0KHBhcnNlRmxvYXQoc3RyKSAvIDEwMCk7XG4gIHJldHVybiBjbGFtcF9jc3NfZmxvYXQocGFyc2VGbG9hdChzdHIpKTtcbn1cblxuZnVuY3Rpb24gY3NzX2h1ZV90b19yZ2IobTEsIG0yLCBoKSB7XG4gIGlmIChoIDwgMCkgaCArPSAxO1xuICBlbHNlIGlmIChoID4gMSkgaCAtPSAxO1xuXG4gIGlmIChoICogNiA8IDEpIHJldHVybiBtMSArIChtMiAtIG0xKSAqIGggKiA2O1xuICBpZiAoaCAqIDIgPCAxKSByZXR1cm4gbTI7XG4gIGlmIChoICogMyA8IDIpIHJldHVybiBtMSArIChtMiAtIG0xKSAqICgyLzMgLSBoKSAqIDY7XG4gIHJldHVybiBtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VDU1NDb2xvcihjc3Nfc3RyKSB7XG4gIC8vIFJlbW92ZSBhbGwgd2hpdGVzcGFjZSwgbm90IGNvbXBsaWFudCwgYnV0IHNob3VsZCBqdXN0IGJlIG1vcmUgYWNjZXB0aW5nLlxuICB2YXIgc3RyID0gY3NzX3N0ci5yZXBsYWNlKC8gL2csICcnKS50b0xvd2VyQ2FzZSgpO1xuXG4gIC8vIENvbG9yIGtleXdvcmRzIChhbmQgdHJhbnNwYXJlbnQpIGxvb2t1cC5cbiAgaWYgKHN0ciBpbiBrQ1NTQ29sb3JUYWJsZSkgcmV0dXJuIGtDU1NDb2xvclRhYmxlW3N0cl0uc2xpY2UoKTsgIC8vIGR1cC5cblxuICAvLyAjYWJjIGFuZCAjYWJjMTIzIHN5bnRheC5cbiAgaWYgKHN0clswXSA9PT0gJyMnKSB7XG4gICAgaWYgKHN0ci5sZW5ndGggPT09IDQpIHtcbiAgICAgIHZhciBpdiA9IHBhcnNlSW50KHN0ci5zdWJzdHIoMSksIDE2KTsgIC8vIFRPRE8oZGVhbm0pOiBTdHJpY3RlciBwYXJzaW5nLlxuICAgICAgaWYgKCEoaXYgPj0gMCAmJiBpdiA8PSAweGZmZikpIHJldHVybiBudWxsOyAgLy8gQ292ZXJzIE5hTi5cbiAgICAgIHJldHVybiBbKChpdiAmIDB4ZjAwKSA+PiA0KSB8ICgoaXYgJiAweGYwMCkgPj4gOCksXG4gICAgICAgICAgICAgIChpdiAmIDB4ZjApIHwgKChpdiAmIDB4ZjApID4+IDQpLFxuICAgICAgICAgICAgICAoaXYgJiAweGYpIHwgKChpdiAmIDB4ZikgPDwgNCksXG4gICAgICAgICAgICAgIDFdO1xuICAgIH0gZWxzZSBpZiAoc3RyLmxlbmd0aCA9PT0gNykge1xuICAgICAgdmFyIGl2ID0gcGFyc2VJbnQoc3RyLnN1YnN0cigxKSwgMTYpOyAgLy8gVE9ETyhkZWFubSk6IFN0cmljdGVyIHBhcnNpbmcuXG4gICAgICBpZiAoIShpdiA+PSAwICYmIGl2IDw9IDB4ZmZmZmZmKSkgcmV0dXJuIG51bGw7ICAvLyBDb3ZlcnMgTmFOLlxuICAgICAgcmV0dXJuIFsoaXYgJiAweGZmMDAwMCkgPj4gMTYsXG4gICAgICAgICAgICAgIChpdiAmIDB4ZmYwMCkgPj4gOCxcbiAgICAgICAgICAgICAgaXYgJiAweGZmLFxuICAgICAgICAgICAgICAxXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBvcCA9IHN0ci5pbmRleE9mKCcoJyksIGVwID0gc3RyLmluZGV4T2YoJyknKTtcbiAgaWYgKG9wICE9PSAtMSAmJiBlcCArIDEgPT09IHN0ci5sZW5ndGgpIHtcbiAgICB2YXIgZm5hbWUgPSBzdHIuc3Vic3RyKDAsIG9wKTtcbiAgICB2YXIgcGFyYW1zID0gc3RyLnN1YnN0cihvcCsxLCBlcC0ob3ArMSkpLnNwbGl0KCcsJyk7XG4gICAgdmFyIGFscGhhID0gMTsgIC8vIFRvIGFsbG93IGNhc2UgZmFsbHRocm91Z2guXG4gICAgc3dpdGNoIChmbmFtZSkge1xuICAgICAgY2FzZSAncmdiYSc6XG4gICAgICAgIGlmIChwYXJhbXMubGVuZ3RoICE9PSA0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgYWxwaGEgPSBwYXJzZV9jc3NfZmxvYXQocGFyYW1zLnBvcCgpKTtcbiAgICAgICAgLy8gRmFsbCB0aHJvdWdoLlxuICAgICAgY2FzZSAncmdiJzpcbiAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggIT09IDMpIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gW3BhcnNlX2Nzc19pbnQocGFyYW1zWzBdKSxcbiAgICAgICAgICAgICAgICBwYXJzZV9jc3NfaW50KHBhcmFtc1sxXSksXG4gICAgICAgICAgICAgICAgcGFyc2VfY3NzX2ludChwYXJhbXNbMl0pLFxuICAgICAgICAgICAgICAgIGFscGhhXTtcbiAgICAgIGNhc2UgJ2hzbGEnOlxuICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCAhPT0gNCkgcmV0dXJuIG51bGw7XG4gICAgICAgIGFscGhhID0gcGFyc2VfY3NzX2Zsb2F0KHBhcmFtcy5wb3AoKSk7XG4gICAgICAgIC8vIEZhbGwgdGhyb3VnaC5cbiAgICAgIGNhc2UgJ2hzbCc6XG4gICAgICAgIGlmIChwYXJhbXMubGVuZ3RoICE9PSAzKSByZXR1cm4gbnVsbDtcbiAgICAgICAgdmFyIGggPSAoKChwYXJzZUZsb2F0KHBhcmFtc1swXSkgJSAzNjApICsgMzYwKSAlIDM2MCkgLyAzNjA7ICAvLyAwIC4uIDFcbiAgICAgICAgLy8gTk9URShkZWFubSk6IEFjY29yZGluZyB0byB0aGUgQ1NTIHNwZWMgcy9sIHNob3VsZCBvbmx5IGJlXG4gICAgICAgIC8vIHBlcmNlbnRhZ2VzLCBidXQgd2UgZG9uJ3QgYm90aGVyIGFuZCBsZXQgZmxvYXQgb3IgcGVyY2VudGFnZS5cbiAgICAgICAgdmFyIHMgPSBwYXJzZV9jc3NfZmxvYXQocGFyYW1zWzFdKTtcbiAgICAgICAgdmFyIGwgPSBwYXJzZV9jc3NfZmxvYXQocGFyYW1zWzJdKTtcbiAgICAgICAgdmFyIG0yID0gbCA8PSAwLjUgPyBsICogKHMgKyAxKSA6IGwgKyBzIC0gbCAqIHM7XG4gICAgICAgIHZhciBtMSA9IGwgKiAyIC0gbTI7XG4gICAgICAgIHJldHVybiBbY2xhbXBfY3NzX2J5dGUoY3NzX2h1ZV90b19yZ2IobTEsIG0yLCBoKzEvMykgKiAyNTUpLFxuICAgICAgICAgICAgICAgIGNsYW1wX2Nzc19ieXRlKGNzc19odWVfdG9fcmdiKG0xLCBtMiwgaCkgKiAyNTUpLFxuICAgICAgICAgICAgICAgIGNsYW1wX2Nzc19ieXRlKGNzc19odWVfdG9fcmdiKG0xLCBtMiwgaC0xLzMpICogMjU1KSxcbiAgICAgICAgICAgICAgICBhbHBoYV07XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudHJ5IHsgZXhwb3J0cy5wYXJzZUNTU0NvbG9yID0gcGFyc2VDU1NDb2xvciB9IGNhdGNoKGUpIHsgfVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtwYXJzZUNTU0NvbG9yfSBmcm9tICdjc3Njb2xvcnBhcnNlcic7XG5cbi8qKlxuICogQW4gUkdCQSBjb2xvciB2YWx1ZS4gQ3JlYXRlIGluc3RhbmNlcyBmcm9tIGNvbG9yIHN0cmluZ3MgdXNpbmcgdGhlIHN0YXRpY1xuICogbWV0aG9kIGBDb2xvci5wYXJzZWAuIFRoZSBjb25zdHJ1Y3RvciBhY2NlcHRzIFJHQiBjaGFubmVsIHZhbHVlcyBpbiB0aGUgcmFuZ2VcbiAqIGBbMCwgMV1gLCBwcmVtdWx0aXBsaWVkIGJ5IEEuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHIgVGhlIHJlZCBjaGFubmVsLlxuICogQHBhcmFtIHtudW1iZXJ9IGcgVGhlIGdyZWVuIGNoYW5uZWwuXG4gKiBAcGFyYW0ge251bWJlcn0gYiBUaGUgYmx1ZSBjaGFubmVsLlxuICogQHBhcmFtIHtudW1iZXJ9IGEgVGhlIGFscGhhIGNoYW5uZWwuXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBDb2xvciB7XG4gICAgcjogbnVtYmVyO1xuICAgIGc6IG51bWJlcjtcbiAgICBiOiBudW1iZXI7XG4gICAgYTogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IocjogbnVtYmVyLCBnOiBudW1iZXIsIGI6IG51bWJlciwgYTogbnVtYmVyID0gMSkge1xuICAgICAgICB0aGlzLnIgPSByO1xuICAgICAgICB0aGlzLmcgPSBnO1xuICAgICAgICB0aGlzLmIgPSBiO1xuICAgICAgICB0aGlzLmEgPSBhO1xuICAgIH1cblxuICAgIHN0YXRpYyBibGFjazogQ29sb3I7XG4gICAgc3RhdGljIHdoaXRlOiBDb2xvcjtcbiAgICBzdGF0aWMgdHJhbnNwYXJlbnQ6IENvbG9yO1xuICAgIHN0YXRpYyByZWQ6IENvbG9yO1xuXG4gICAgLyoqXG4gICAgICogUGFyc2VzIHZhbGlkIENTUyBjb2xvciBzdHJpbmdzIGFuZCByZXR1cm5zIGEgYENvbG9yYCBpbnN0YW5jZS5cbiAgICAgKiBAcmV0dXJucyBBIGBDb2xvcmAgaW5zdGFuY2UsIG9yIGB1bmRlZmluZWRgIGlmIHRoZSBpbnB1dCBpcyBub3QgYSB2YWxpZCBjb2xvciBzdHJpbmcuXG4gICAgICovXG4gICAgc3RhdGljIHBhcnNlKGlucHV0Pzogc3RyaW5nIHwgQ29sb3IgfCBudWxsKTogQ29sb3IgfCB2b2lkIHtcbiAgICAgICAgaWYgKCFpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIENvbG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJnYmEgPSBwYXJzZUNTU0NvbG9yKGlucHV0KTtcbiAgICAgICAgaWYgKCFyZ2JhKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihcbiAgICAgICAgICAgIHJnYmFbMF0gLyAyNTUgKiByZ2JhWzNdLFxuICAgICAgICAgICAgcmdiYVsxXSAvIDI1NSAqIHJnYmFbM10sXG4gICAgICAgICAgICByZ2JhWzJdIC8gMjU1ICogcmdiYVszXSxcbiAgICAgICAgICAgIHJnYmFbM11cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIFJHQkEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY29sb3IgdmFsdWUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBBbiBSR0JBIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBwdXJwbGUgPSBuZXcgQ29sb3IucGFyc2UoJ3B1cnBsZScpO1xuICAgICAqIHB1cnBsZS50b1N0cmluZzsgLy8gPSBcInJnYmEoMTI4LDAsMTI4LDEpXCJcbiAgICAgKiB2YXIgdHJhbnNsdWNlbnRHcmVlbiA9IG5ldyBDb2xvci5wYXJzZSgncmdiYSgyNiwgMjA3LCAyNiwgLjczKScpO1xuICAgICAqIHRyYW5zbHVjZW50R3JlZW4udG9TdHJpbmcoKTsgLy8gPSBcInJnYmEoMjYsMjA3LDI2LDAuNzMpXCJcbiAgICAgKi9cbiAgICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBbciwgZywgYiwgYV0gPSB0aGlzLnRvQXJyYXkoKTtcbiAgICAgICAgcmV0dXJuIGByZ2JhKCR7TWF0aC5yb3VuZChyKX0sJHtNYXRoLnJvdW5kKGcpfSwke01hdGgucm91bmQoYil9LCR7YX0pYDtcbiAgICB9XG5cbiAgICB0b0FycmF5KCk6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdIHtcbiAgICAgICAgY29uc3Qge3IsIGcsIGIsIGF9ID0gdGhpcztcbiAgICAgICAgcmV0dXJuIGEgPT09IDAgPyBbMCwgMCwgMCwgMF0gOiBbXG4gICAgICAgICAgICByICogMjU1IC8gYSxcbiAgICAgICAgICAgIGcgKiAyNTUgLyBhLFxuICAgICAgICAgICAgYiAqIDI1NSAvIGEsXG4gICAgICAgICAgICBhXG4gICAgICAgIF07XG4gICAgfVxufVxuXG5Db2xvci5ibGFjayA9IG5ldyBDb2xvcigwLCAwLCAwLCAxKTtcbkNvbG9yLndoaXRlID0gbmV3IENvbG9yKDEsIDEsIDEsIDEpO1xuQ29sb3IudHJhbnNwYXJlbnQgPSBuZXcgQ29sb3IoMCwgMCwgMCwgMCk7XG5Db2xvci5yZWQgPSBuZXcgQ29sb3IoMSwgMCwgMCwgMSk7XG5cbmV4cG9ydCBkZWZhdWx0IENvbG9yO1xuIiwiLy8gQGZsb3dcblxuLy8gRmxvdyB0eXBlIGRlY2xhcmF0aW9ucyBmb3IgSW50bCBjcmliYmVkIGZyb21cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy8xMjcwXG5cbmRlY2xhcmUgdmFyIEludGw6IHtcbiAgICBDb2xsYXRvcjogQ2xhc3M8SW50bCRDb2xsYXRvcj5cbn07XG5cbmRlY2xhcmUgY2xhc3MgSW50bCRDb2xsYXRvciB7XG4gICAgY29uc3RydWN0b3IgKFxuICAgICAgICBsb2NhbGVzPzogc3RyaW5nIHwgc3RyaW5nW10sXG4gICAgICAgIG9wdGlvbnM/OiBDb2xsYXRvck9wdGlvbnNcbiAgICApOiBJbnRsJENvbGxhdG9yO1xuXG4gICAgc3RhdGljIChcbiAgICAgICAgbG9jYWxlcz86IHN0cmluZyB8IHN0cmluZ1tdLFxuICAgICAgICBvcHRpb25zPzogQ29sbGF0b3JPcHRpb25zXG4gICAgKTogSW50bCRDb2xsYXRvcjtcblxuICAgIGNvbXBhcmUgKGE6IHN0cmluZywgYjogc3RyaW5nKTogbnVtYmVyO1xuXG4gICAgcmVzb2x2ZWRPcHRpb25zKCk6IGFueTtcbn1cblxudHlwZSBDb2xsYXRvck9wdGlvbnMgPSB7XG4gICAgbG9jYWxlTWF0Y2hlcj86ICdsb29rdXAnIHwgJ2Jlc3QgZml0JyxcbiAgICB1c2FnZT86ICdzb3J0JyB8ICdzZWFyY2gnLFxuICAgIHNlbnNpdGl2aXR5PzogJ2Jhc2UnIHwgJ2FjY2VudCcgfCAnY2FzZScgfCAndmFyaWFudCcsXG4gICAgaWdub3JlUHVuY3R1YXRpb24/OiBib29sZWFuLFxuICAgIG51bWVyaWM/OiBib29sZWFuLFxuICAgIGNhc2VGaXJzdD86ICd1cHBlcicgfCAnbG93ZXInIHwgJ2ZhbHNlJ1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb2xsYXRvciB7XG4gICAgbG9jYWxlOiBzdHJpbmcgfCBudWxsO1xuICAgIHNlbnNpdGl2aXR5OiAnYmFzZScgfCAnYWNjZW50JyB8ICdjYXNlJyB8ICd2YXJpYW50JztcbiAgICBjb2xsYXRvcjogSW50bCRDb2xsYXRvcjtcblxuICAgIGNvbnN0cnVjdG9yKGNhc2VTZW5zaXRpdmU6IGJvb2xlYW4sIGRpYWNyaXRpY1NlbnNpdGl2ZTogYm9vbGVhbiwgbG9jYWxlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgICAgIGlmIChjYXNlU2Vuc2l0aXZlKVxuICAgICAgICAgICAgdGhpcy5zZW5zaXRpdml0eSA9IGRpYWNyaXRpY1NlbnNpdGl2ZSA/ICd2YXJpYW50JyA6ICdjYXNlJztcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5zZW5zaXRpdml0eSA9IGRpYWNyaXRpY1NlbnNpdGl2ZSA/ICdhY2NlbnQnIDogJ2Jhc2UnO1xuXG4gICAgICAgIHRoaXMubG9jYWxlID0gbG9jYWxlO1xuICAgICAgICB0aGlzLmNvbGxhdG9yID0gbmV3IEludGwuQ29sbGF0b3IodGhpcy5sb2NhbGUgPyB0aGlzLmxvY2FsZSA6IFtdLFxuICAgICAgICAgICAge3NlbnNpdGl2aXR5OiB0aGlzLnNlbnNpdGl2aXR5LCB1c2FnZTogJ3NlYXJjaCd9KTtcbiAgICB9XG5cbiAgICBjb21wYXJlKGxoczogc3RyaW5nLCByaHM6IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbGxhdG9yLmNvbXBhcmUobGhzLCByaHMpO1xuICAgIH1cblxuICAgIHJlc29sdmVkTG9jYWxlKCk6IHN0cmluZyB7XG4gICAgICAgIC8vIFdlIGNyZWF0ZSBhIENvbGxhdG9yIHdpdGhvdXQgXCJ1c2FnZTogc2VhcmNoXCIgYmVjYXVzZSB3ZSBkb24ndCB3YW50XG4gICAgICAgIC8vIHRoZSBzZWFyY2ggb3B0aW9ucyBlbmNvZGVkIGluIG91ciByZXN1bHQgKGUuZy4gXCJlbi11LWNvLXNlYXJjaFwiKVxuICAgICAgICByZXR1cm4gbmV3IEludGwuQ29sbGF0b3IodGhpcy5sb2NhbGUgPyB0aGlzLmxvY2FsZSA6IFtdKVxuICAgICAgICAgICAgLnJlc29sdmVkT3B0aW9ucygpLmxvY2FsZTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHR5cGUgQ29sb3IgZnJvbSAnLi4vLi4vdXRpbC9jb2xvcic7XG5pbXBvcnQgdHlwZSBSZXNvbHZlZEltYWdlIGZyb20gJy4uL3R5cGVzL3Jlc29sdmVkX2ltYWdlJztcblxuZXhwb3J0IGNsYXNzIEZvcm1hdHRlZFNlY3Rpb24ge1xuICAgIHRleHQ6IHN0cmluZztcbiAgICBpbWFnZTogUmVzb2x2ZWRJbWFnZSB8IG51bGw7XG4gICAgc2NhbGU6IG51bWJlciB8IG51bGw7XG4gICAgZm9udFN0YWNrOiBzdHJpbmcgfCBudWxsO1xuICAgIHRleHRDb2xvcjogQ29sb3IgfCBudWxsO1xuXG4gICAgY29uc3RydWN0b3IodGV4dDogc3RyaW5nLCBpbWFnZTogUmVzb2x2ZWRJbWFnZSB8IG51bGwsIHNjYWxlOiBudW1iZXIgfCBudWxsLCBmb250U3RhY2s6IHN0cmluZyB8IG51bGwsIHRleHRDb2xvcjogQ29sb3IgfCBudWxsKSB7XG4gICAgICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgICAgIHRoaXMuaW1hZ2UgPSBpbWFnZTtcbiAgICAgICAgdGhpcy5zY2FsZSA9IHNjYWxlO1xuICAgICAgICB0aGlzLmZvbnRTdGFjayA9IGZvbnRTdGFjaztcbiAgICAgICAgdGhpcy50ZXh0Q29sb3IgPSB0ZXh0Q29sb3I7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGb3JtYXR0ZWQge1xuICAgIHNlY3Rpb25zOiBBcnJheTxGb3JtYXR0ZWRTZWN0aW9uPjtcblxuICAgIGNvbnN0cnVjdG9yKHNlY3Rpb25zOiBBcnJheTxGb3JtYXR0ZWRTZWN0aW9uPikge1xuICAgICAgICB0aGlzLnNlY3Rpb25zID0gc2VjdGlvbnM7XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21TdHJpbmcodW5mb3JtYXR0ZWQ6IHN0cmluZyk6IEZvcm1hdHRlZCB7XG4gICAgICAgIHJldHVybiBuZXcgRm9ybWF0dGVkKFtuZXcgRm9ybWF0dGVkU2VjdGlvbih1bmZvcm1hdHRlZCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCldKTtcbiAgICB9XG5cbiAgICBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5zZWN0aW9ucy5sZW5ndGggPT09IDApIHJldHVybiB0cnVlO1xuICAgICAgICByZXR1cm4gIXRoaXMuc2VjdGlvbnMuc29tZShzZWN0aW9uID0+IHNlY3Rpb24udGV4dC5sZW5ndGggIT09IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWN0aW9uLmltYWdlICYmIHNlY3Rpb24uaW1hZ2UubmFtZS5sZW5ndGggIT09IDApKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZmFjdG9yeSh0ZXh0OiBGb3JtYXR0ZWQgfCBzdHJpbmcpOiBGb3JtYXR0ZWQge1xuICAgICAgICBpZiAodGV4dCBpbnN0YW5jZW9mIEZvcm1hdHRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gRm9ybWF0dGVkLmZyb21TdHJpbmcodGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5zZWN0aW9ucy5sZW5ndGggPT09IDApIHJldHVybiAnJztcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VjdGlvbnMubWFwKHNlY3Rpb24gPT4gc2VjdGlvbi50ZXh0KS5qb2luKCcnKTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKTogQXJyYXk8bWl4ZWQ+IHtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZDogQXJyYXk8bWl4ZWQ+ID0gW1wiZm9ybWF0XCJdO1xuICAgICAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgdGhpcy5zZWN0aW9ucykge1xuICAgICAgICAgICAgaWYgKHNlY3Rpb24uaW1hZ2UpIHtcbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkLnB1c2goW1wiaW1hZ2VcIiwgc2VjdGlvbi5pbWFnZS5uYW1lXSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXJpYWxpemVkLnB1c2goc2VjdGlvbi50ZXh0KTtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnM6IHsgW2tleTogc3RyaW5nXTogbWl4ZWQgfSA9IHt9O1xuICAgICAgICAgICAgaWYgKHNlY3Rpb24uZm9udFN0YWNrKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc1tcInRleHQtZm9udFwiXSA9IFtcImxpdGVyYWxcIiwgc2VjdGlvbi5mb250U3RhY2suc3BsaXQoJywnKV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VjdGlvbi5zY2FsZSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnNbXCJmb250LXNjYWxlXCJdID0gc2VjdGlvbi5zY2FsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWN0aW9uLnRleHRDb2xvcikge1xuICAgICAgICAgICAgICAgIG9wdGlvbnNbXCJ0ZXh0LWNvbG9yXCJdID0gKFtcInJnYmFcIl06IEFycmF5PG1peGVkPikuY29uY2F0KHNlY3Rpb24udGV4dENvbG9yLnRvQXJyYXkoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXJpYWxpemVkLnB1c2gob3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZWQ7XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuZXhwb3J0IHR5cGUgUmVzb2x2ZWRJbWFnZU9wdGlvbnMgPSB7XG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGF2YWlsYWJsZTogYm9vbGVhblxufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVzb2x2ZWRJbWFnZSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGF2YWlsYWJsZTogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFJlc29sdmVkSW1hZ2VPcHRpb25zKSB7XG4gICAgICAgIHRoaXMubmFtZSA9IG9wdGlvbnMubmFtZTtcbiAgICAgICAgdGhpcy5hdmFpbGFibGUgPSBvcHRpb25zLmF2YWlsYWJsZTtcbiAgICB9XG5cbiAgICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5uYW1lO1xuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tU3RyaW5nKG5hbWU6IHN0cmluZyk6IFJlc29sdmVkSW1hZ2UgfCBudWxsIHtcbiAgICAgICAgaWYgKCFuYW1lKSByZXR1cm4gbnVsbDsgLy8gdHJlYXQgZW1wdHkgdmFsdWVzIGFzIG5vIGltYWdlXG4gICAgICAgIHJldHVybiBuZXcgUmVzb2x2ZWRJbWFnZSh7bmFtZSwgYXZhaWxhYmxlOiBmYWxzZX0pO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpOiBBcnJheTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIFtcImltYWdlXCIsIHRoaXMubmFtZV07XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vdXRpbC9jb2xvcic7XG5pbXBvcnQgQ29sbGF0b3IgZnJvbSAnLi90eXBlcy9jb2xsYXRvcic7XG5pbXBvcnQgRm9ybWF0dGVkIGZyb20gJy4vdHlwZXMvZm9ybWF0dGVkJztcbmltcG9ydCBSZXNvbHZlZEltYWdlIGZyb20gJy4vdHlwZXMvcmVzb2x2ZWRfaW1hZ2UnO1xuaW1wb3J0IHtOdWxsVHlwZSwgTnVtYmVyVHlwZSwgU3RyaW5nVHlwZSwgQm9vbGVhblR5cGUsIENvbG9yVHlwZSwgT2JqZWN0VHlwZSwgVmFsdWVUeXBlLCBDb2xsYXRvclR5cGUsIEZvcm1hdHRlZFR5cGUsIFJlc29sdmVkSW1hZ2VUeXBlLCBhcnJheX0gZnJvbSAnLi90eXBlcyc7XG5cbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUkdCQShyOiBtaXhlZCwgZzogbWl4ZWQsIGI6IG1peGVkLCBhPzogbWl4ZWQpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAoIShcbiAgICAgICAgdHlwZW9mIHIgPT09ICdudW1iZXInICYmIHIgPj0gMCAmJiByIDw9IDI1NSAmJlxuICAgICAgICB0eXBlb2YgZyA9PT0gJ251bWJlcicgJiYgZyA+PSAwICYmIGcgPD0gMjU1ICYmXG4gICAgICAgIHR5cGVvZiBiID09PSAnbnVtYmVyJyAmJiBiID49IDAgJiYgYiA8PSAyNTVcbiAgICApKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdHlwZW9mIGEgPT09ICdudW1iZXInID8gW3IsIGcsIGIsIGFdIDogW3IsIGcsIGJdO1xuICAgICAgICByZXR1cm4gYEludmFsaWQgcmdiYSB2YWx1ZSBbJHt2YWx1ZS5qb2luKCcsICcpfV06ICdyJywgJ2cnLCBhbmQgJ2InIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyNTUuYDtcbiAgICB9XG5cbiAgICBpZiAoIShcbiAgICAgICAgdHlwZW9mIGEgPT09ICd1bmRlZmluZWQnIHx8ICh0eXBlb2YgYSA9PT0gJ251bWJlcicgJiYgYSA+PSAwICYmIGEgPD0gMSlcbiAgICApKSB7XG4gICAgICAgIHJldHVybiBgSW52YWxpZCByZ2JhIHZhbHVlIFske1tyLCBnLCBiLCBhXS5qb2luKCcsICcpfV06ICdhJyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMS5gO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgdHlwZSBWYWx1ZSA9IG51bGwgfCBzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyIHwgQ29sb3IgfCBDb2xsYXRvciB8IEZvcm1hdHRlZCB8IFJlc29sdmVkSW1hZ2UgfCAkUmVhZE9ubHlBcnJheTxWYWx1ZT4gfCB7ICtbc3RyaW5nXTogVmFsdWUgfVxuXG5leHBvcnQgZnVuY3Rpb24gaXNWYWx1ZShtaXhlZDogbWl4ZWQpOiBib29sZWFuIHtcbiAgICBpZiAobWl4ZWQgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbWl4ZWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG1peGVkID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbWl4ZWQgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAobWl4ZWQgaW5zdGFuY2VvZiBDb2xvcikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKG1peGVkIGluc3RhbmNlb2YgQ29sbGF0b3IpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChtaXhlZCBpbnN0YW5jZW9mIEZvcm1hdHRlZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKG1peGVkIGluc3RhbmNlb2YgUmVzb2x2ZWRJbWFnZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkobWl4ZWQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBtaXhlZCkge1xuICAgICAgICAgICAgaWYgKCFpc1ZhbHVlKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG1peGVkID09PSAnb2JqZWN0Jykge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBtaXhlZCkge1xuICAgICAgICAgICAgaWYgKCFpc1ZhbHVlKG1peGVkW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0eXBlT2YodmFsdWU6IFZhbHVlKTogVHlwZSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBOdWxsVHlwZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZ1R5cGU7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgICAgICByZXR1cm4gQm9vbGVhblR5cGU7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHJldHVybiBOdW1iZXJUeXBlO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBDb2xvcikge1xuICAgICAgICByZXR1cm4gQ29sb3JUeXBlO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBDb2xsYXRvcikge1xuICAgICAgICByZXR1cm4gQ29sbGF0b3JUeXBlO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBGb3JtYXR0ZWQpIHtcbiAgICAgICAgcmV0dXJuIEZvcm1hdHRlZFR5cGU7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFJlc29sdmVkSW1hZ2UpIHtcbiAgICAgICAgcmV0dXJuIFJlc29sdmVkSW1hZ2VUeXBlO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICBsZXQgaXRlbVR5cGU6IFR5cGUgfCB0eXBlb2YgdW5kZWZpbmVkO1xuXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgdCA9IHR5cGVPZihpdGVtKTtcbiAgICAgICAgICAgIGlmICghaXRlbVR5cGUpIHtcbiAgICAgICAgICAgICAgICBpdGVtVHlwZSA9IHQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW1UeXBlID09PSB0KSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZW1UeXBlID0gVmFsdWVUeXBlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFycmF5KGl0ZW1UeXBlIHx8IFZhbHVlVHlwZSwgbGVuZ3RoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBhc3NlcnQodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jyk7XG4gICAgICAgIHJldHVybiBPYmplY3RUeXBlO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlOiBWYWx1ZSkge1xuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGUgPT09ICdudW1iZXInIHx8IHR5cGUgPT09ICdib29sZWFuJykge1xuICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgQ29sb3IgfHwgdmFsdWUgaW5zdGFuY2VvZiBGb3JtYXR0ZWQgfHwgdmFsdWUgaW5zdGFuY2VvZiBSZXNvbHZlZEltYWdlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgfVxufVxuXG5leHBvcnQge0NvbG9yLCBDb2xsYXRvcn07XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQge2lzVmFsdWUsIHR5cGVPZiwgQ29sb3J9IGZyb20gJy4uL3ZhbHVlcyc7XG5pbXBvcnQgRm9ybWF0dGVkIGZyb20gJy4uL3R5cGVzL2Zvcm1hdHRlZCc7XG5cbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7VmFsdWV9ICBmcm9tICcuLi92YWx1ZXMnO1xuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgUGFyc2luZ0NvbnRleHQgZnJvbSAnLi4vcGFyc2luZ19jb250ZXh0JztcblxuY2xhc3MgTGl0ZXJhbCBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG4gICAgdmFsdWU6IFZhbHVlO1xuXG4gICAgY29uc3RydWN0b3IodHlwZTogVHlwZSwgdmFsdWU6IFZhbHVlKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcGFyc2UoYXJnczogJFJlYWRPbmx5QXJyYXk8bWl4ZWQ+LCBjb250ZXh0OiBQYXJzaW5nQ29udGV4dCkge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggIT09IDIpXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgJ2xpdGVyYWwnIGV4cHJlc3Npb24gcmVxdWlyZXMgZXhhY3RseSBvbmUgYXJndW1lbnQsIGJ1dCBmb3VuZCAke2FyZ3MubGVuZ3RoIC0gMX0gaW5zdGVhZC5gKTtcblxuICAgICAgICBpZiAoIWlzVmFsdWUoYXJnc1sxXSkpXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgaW52YWxpZCB2YWx1ZWApO1xuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gKGFyZ3NbMV06IGFueSk7XG4gICAgICAgIGxldCB0eXBlID0gdHlwZU9mKHZhbHVlKTtcblxuICAgICAgICAvLyBzcGVjaWFsIGNhc2U6IGluZmVyIHRoZSBpdGVtIHR5cGUgaWYgcG9zc2libGUgZm9yIHplcm8tbGVuZ3RoIGFycmF5c1xuICAgICAgICBjb25zdCBleHBlY3RlZCA9IGNvbnRleHQuZXhwZWN0ZWRUeXBlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlLmtpbmQgPT09ICdhcnJheScgJiZcbiAgICAgICAgICAgIHR5cGUuTiA9PT0gMCAmJlxuICAgICAgICAgICAgZXhwZWN0ZWQgJiZcbiAgICAgICAgICAgIGV4cGVjdGVkLmtpbmQgPT09ICdhcnJheScgJiZcbiAgICAgICAgICAgICh0eXBlb2YgZXhwZWN0ZWQuTiAhPT0gJ251bWJlcicgfHwgZXhwZWN0ZWQuTiA9PT0gMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0eXBlID0gZXhwZWN0ZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IExpdGVyYWwodHlwZSwgdmFsdWUpO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICB9XG5cbiAgICBlYWNoQ2hpbGQoKSB7fVxuXG4gICAgb3V0cHV0RGVmaW5lZCgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCk6IEFycmF5PG1peGVkPiB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUua2luZCA9PT0gJ2FycmF5JyB8fCB0aGlzLnR5cGUua2luZCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHJldHVybiBbXCJsaXRlcmFsXCIsIHRoaXMudmFsdWVdO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsdWUgaW5zdGFuY2VvZiBDb2xvcikge1xuICAgICAgICAgICAgLy8gQ29uc3RhbnQtZm9sZGluZyBjYW4gZ2VuZXJhdGUgTGl0ZXJhbCBleHByZXNzaW9ucyB0aGF0IHlvdVxuICAgICAgICAgICAgLy8gY291bGRuJ3QgYWN0dWFsbHkgZ2VuZXJhdGUgd2l0aCBhIFwibGl0ZXJhbFwiIGV4cHJlc3Npb24sXG4gICAgICAgICAgICAvLyBzbyB3ZSBoYXZlIHRvIGltcGxlbWVudCBhbiBlcXVpdmFsZW50IHNlcmlhbGl6YXRpb24gaGVyZVxuICAgICAgICAgICAgcmV0dXJuIFtcInJnYmFcIl0uY29uY2F0KHRoaXMudmFsdWUudG9BcnJheSgpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbHVlIGluc3RhbmNlb2YgRm9ybWF0dGVkKSB7XG4gICAgICAgICAgICAvLyBTYW1lIGFzIENvbG9yXG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZS5zZXJpYWxpemUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFzc2VydCh0aGlzLnZhbHVlID09PSBudWxsIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIHRoaXMudmFsdWUgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIHRoaXMudmFsdWUgPT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIHRoaXMudmFsdWUgPT09ICdib29sZWFuJyk7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMudmFsdWU6IGFueSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpdGVyYWw7XG4iLCIvLyBAZmxvd1xuXG5jbGFzcyBSdW50aW1lRXJyb3Ige1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gJ0V4cHJlc3Npb25FdmFsdWF0aW9uRXJyb3InO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cblxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJ1bnRpbWVFcnJvcjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHtcbiAgICBPYmplY3RUeXBlLFxuICAgIFZhbHVlVHlwZSxcbiAgICBTdHJpbmdUeXBlLFxuICAgIE51bWJlclR5cGUsXG4gICAgQm9vbGVhblR5cGUsXG4gICAgY2hlY2tTdWJ0eXBlLFxuICAgIHRvU3RyaW5nLFxuICAgIGFycmF5XG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBSdW50aW1lRXJyb3IgZnJvbSAnLi4vcnVudGltZV9lcnJvcic7XG5pbXBvcnQge3R5cGVPZn0gZnJvbSAnLi4vdmFsdWVzJztcblxuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgUGFyc2luZ0NvbnRleHQgZnJvbSAnLi4vcGFyc2luZ19jb250ZXh0JztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25Db250ZXh0IGZyb20gJy4uL2V2YWx1YXRpb25fY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5jb25zdCB0eXBlcyA9IHtcbiAgICBzdHJpbmc6IFN0cmluZ1R5cGUsXG4gICAgbnVtYmVyOiBOdW1iZXJUeXBlLFxuICAgIGJvb2xlYW46IEJvb2xlYW5UeXBlLFxuICAgIG9iamVjdDogT2JqZWN0VHlwZVxufTtcblxuY2xhc3MgQXNzZXJ0aW9uIGltcGxlbWVudHMgRXhwcmVzc2lvbiB7XG4gICAgdHlwZTogVHlwZTtcbiAgICBhcmdzOiBBcnJheTxFeHByZXNzaW9uPjtcblxuICAgIGNvbnN0cnVjdG9yKHR5cGU6IFR5cGUsIGFyZ3M6IEFycmF5PEV4cHJlc3Npb24+KSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMuYXJncyA9IGFyZ3M7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpOiA/RXhwcmVzc2lvbiB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDIpXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LmApO1xuXG4gICAgICAgIGxldCBpID0gMTtcbiAgICAgICAgbGV0IHR5cGU7XG5cbiAgICAgICAgY29uc3QgbmFtZTogc3RyaW5nID0gKGFyZ3NbMF06IGFueSk7XG4gICAgICAgIGlmIChuYW1lID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICBsZXQgaXRlbVR5cGU7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHlwZSA9IGFyZ3NbMV07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0eXBlICE9PSAnc3RyaW5nJyB8fCAhKHR5cGUgaW4gdHlwZXMpIHx8IHR5cGUgPT09ICdvYmplY3QnKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcignVGhlIGl0ZW0gdHlwZSBhcmd1bWVudCBvZiBcImFycmF5XCIgbXVzdCBiZSBvbmUgb2Ygc3RyaW5nLCBudW1iZXIsIGJvb2xlYW4nLCAxKTtcbiAgICAgICAgICAgICAgICBpdGVtVHlwZSA9IHR5cGVzW3R5cGVdO1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXRlbVR5cGUgPSBWYWx1ZVR5cGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBOO1xuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgICAgIGlmIChhcmdzWzJdICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgICAgICh0eXBlb2YgYXJnc1syXSAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbMl0gPCAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzJdICE9PSBNYXRoLmZsb29yKGFyZ3NbMl0pKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcignVGhlIGxlbmd0aCBhcmd1bWVudCB0byBcImFycmF5XCIgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgbGl0ZXJhbCcsIDIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBOID0gYXJnc1syXTtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHR5cGUgPSBhcnJheShpdGVtVHlwZSwgTik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhc3NlcnQodHlwZXNbbmFtZV0sIG5hbWUpO1xuICAgICAgICAgICAgdHlwZSA9IHR5cGVzW25hbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyc2VkID0gW107XG4gICAgICAgIGZvciAoOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBjb250ZXh0LnBhcnNlKGFyZ3NbaV0sIGksIFZhbHVlVHlwZSk7XG4gICAgICAgICAgICBpZiAoIWlucHV0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHBhcnNlZC5wdXNoKGlucHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgQXNzZXJ0aW9uKHR5cGUsIHBhcnNlZCk7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoY3R4OiBFdmFsdWF0aW9uQ29udGV4dCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmFyZ3NbaV0uZXZhbHVhdGUoY3R4KTtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gY2hlY2tTdWJ0eXBlKHRoaXMudHlwZSwgdHlwZU9mKHZhbHVlKSk7XG4gICAgICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpID09PSB0aGlzLmFyZ3MubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoYEV4cGVjdGVkIHZhbHVlIHRvIGJlIG9mIHR5cGUgJHt0b1N0cmluZyh0aGlzLnR5cGUpfSwgYnV0IGZvdW5kICR7dG9TdHJpbmcodHlwZU9mKHZhbHVlKSl9IGluc3RlYWQuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhc3NlcnQoZmFsc2UpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBlYWNoQ2hpbGQoZm46IChfOiBFeHByZXNzaW9uKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMuYXJncy5mb3JFYWNoKGZuKTtcbiAgICB9XG5cbiAgICBvdXRwdXREZWZpbmVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hcmdzLmV2ZXJ5KGFyZyA9PiBhcmcub3V0cHV0RGVmaW5lZCgpKTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKTogQXJyYXk8bWl4ZWQ+IHtcbiAgICAgICAgY29uc3QgdHlwZSA9IHRoaXMudHlwZTtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IFt0eXBlLmtpbmRdO1xuICAgICAgICBpZiAodHlwZS5raW5kID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtVHlwZSA9IHR5cGUuaXRlbVR5cGU7XG4gICAgICAgICAgICBpZiAoaXRlbVR5cGUua2luZCA9PT0gJ3N0cmluZycgfHxcbiAgICAgICAgICAgICAgICBpdGVtVHlwZS5raW5kID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgICAgIGl0ZW1UeXBlLmtpbmQgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWQucHVzaChpdGVtVHlwZS5raW5kKTtcbiAgICAgICAgICAgICAgICBjb25zdCBOID0gdHlwZS5OO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgTiA9PT0gJ251bWJlcicgfHwgdGhpcy5hcmdzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplZC5wdXNoKE4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VyaWFsaXplZC5jb25jYXQodGhpcy5hcmdzLm1hcChhcmcgPT4gYXJnLnNlcmlhbGl6ZSgpKSk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBBc3NlcnRpb247XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge051bWJlclR5cGUsIFZhbHVlVHlwZSwgRm9ybWF0dGVkVHlwZSwgYXJyYXksIFN0cmluZ1R5cGUsIENvbG9yVHlwZSwgUmVzb2x2ZWRJbWFnZVR5cGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCBGb3JtYXR0ZWQsIHtGb3JtYXR0ZWRTZWN0aW9ufSBmcm9tICcuLi90eXBlcy9mb3JtYXR0ZWQnO1xuaW1wb3J0IHt0b1N0cmluZywgdHlwZU9mfSBmcm9tICcuLi92YWx1ZXMnO1xuXG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uQ29udGV4dCBmcm9tICcuLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgUGFyc2luZ0NvbnRleHQgZnJvbSAnLi4vcGFyc2luZ19jb250ZXh0JztcbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbnR5cGUgRm9ybWF0dGVkU2VjdGlvbkV4cHJlc3Npb24gPSB7XG4gICAgLy8gQ29udGVudCBvZiBhIHNlY3Rpb24gbWF5IGJlIEltYWdlIGV4cHJlc3Npb24gb3Igb3RoZXJcbiAgICAvLyB0eXBlIG9mIGV4cHJlc3Npb24gdGhhdCBpcyBjb2VyY2FibGUgdG8gJ3N0cmluZycuXG4gICAgY29udGVudDogRXhwcmVzc2lvbixcbiAgICBzY2FsZTogRXhwcmVzc2lvbiB8IG51bGw7XG4gICAgZm9udDogRXhwcmVzc2lvbiB8IG51bGw7XG4gICAgdGV4dENvbG9yOiBFeHByZXNzaW9uIHwgbnVsbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRm9ybWF0RXhwcmVzc2lvbiBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG4gICAgc2VjdGlvbnM6IEFycmF5PEZvcm1hdHRlZFNlY3Rpb25FeHByZXNzaW9uPjtcblxuICAgIGNvbnN0cnVjdG9yKHNlY3Rpb25zOiBBcnJheTxGb3JtYXR0ZWRTZWN0aW9uRXhwcmVzc2lvbj4pIHtcbiAgICAgICAgdGhpcy50eXBlID0gRm9ybWF0dGVkVHlwZTtcbiAgICAgICAgdGhpcy5zZWN0aW9ucyA9IHNlY3Rpb25zO1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZShhcmdzOiAkUmVhZE9ubHlBcnJheTxtaXhlZD4sIGNvbnRleHQ6IFBhcnNpbmdDb250ZXh0KTogP0V4cHJlc3Npb24ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlyc3RBcmcgPSBhcmdzWzFdO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZmlyc3RBcmcpICYmIHR5cGVvZiBmaXJzdEFyZyA9PT0gJ29iamVjdCcpICB7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhbiBpbWFnZSBvciB0ZXh0IHNlY3Rpb24uYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZWN0aW9uczogQXJyYXk8Rm9ybWF0dGVkU2VjdGlvbkV4cHJlc3Npb24+ID0gW107XG4gICAgICAgIGxldCBuZXh0VG9rZW5NYXlCZU9iamVjdCA9IGZhbHNlO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBhcmdzLmxlbmd0aCAtIDE7ICsraSkge1xuICAgICAgICAgICAgY29uc3QgYXJnID0gKGFyZ3NbaV06IGFueSk7XG5cbiAgICAgICAgICAgIGlmIChuZXh0VG9rZW5NYXlCZU9iamVjdCAmJiB0eXBlb2YgYXJnID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGFyZykpIHtcbiAgICAgICAgICAgICAgICBuZXh0VG9rZW5NYXlCZU9iamVjdCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgbGV0IHNjYWxlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoYXJnWydmb250LXNjYWxlJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgc2NhbGUgPSBjb250ZXh0LnBhcnNlKGFyZ1snZm9udC1zY2FsZSddLCAxLCBOdW1iZXJUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzY2FsZSkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IGZvbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChhcmdbJ3RleHQtZm9udCddKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvbnQgPSBjb250ZXh0LnBhcnNlKGFyZ1sndGV4dC1mb250J10sIDEsIGFycmF5KFN0cmluZ1R5cGUpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmb250KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgdGV4dENvbG9yID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoYXJnWyd0ZXh0LWNvbG9yJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dENvbG9yID0gY29udGV4dC5wYXJzZShhcmdbJ3RleHQtY29sb3InXSwgMSwgQ29sb3JUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0ZXh0Q29sb3IpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RFeHByZXNzaW9uID0gc2VjdGlvbnNbc2VjdGlvbnMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgbGFzdEV4cHJlc3Npb24uc2NhbGUgPSBzY2FsZTtcbiAgICAgICAgICAgICAgICBsYXN0RXhwcmVzc2lvbi5mb250ID0gZm9udDtcbiAgICAgICAgICAgICAgICBsYXN0RXhwcmVzc2lvbi50ZXh0Q29sb3IgPSB0ZXh0Q29sb3I7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBjb250ZXh0LnBhcnNlKGFyZ3NbaV0sIDEsIFZhbHVlVHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFjb250ZW50KSByZXR1cm4gbnVsbDtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGtpbmQgPSBjb250ZW50LnR5cGUua2luZDtcbiAgICAgICAgICAgICAgICBpZiAoa2luZCAhPT0gJ3N0cmluZycgJiYga2luZCAhPT0gJ3ZhbHVlJyAmJiBraW5kICE9PSAnbnVsbCcgJiYga2luZCAhPT0gJ3Jlc29sdmVkSW1hZ2UnKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRm9ybWF0dGVkIHRleHQgdHlwZSBtdXN0IGJlICdzdHJpbmcnLCAndmFsdWUnLCAnaW1hZ2UnIG9yICdudWxsJy5gKTtcblxuICAgICAgICAgICAgICAgIG5leHRUb2tlbk1heUJlT2JqZWN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBzZWN0aW9ucy5wdXNoKHtjb250ZW50LCBzY2FsZTogbnVsbCwgZm9udDogbnVsbCwgdGV4dENvbG9yOiBudWxsfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IEZvcm1hdEV4cHJlc3Npb24oc2VjdGlvbnMpO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGN0eDogRXZhbHVhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgY29uc3QgZXZhbHVhdGVTZWN0aW9uID0gc2VjdGlvbiA9PiB7XG4gICAgICAgICAgICBjb25zdCBldmFsdWF0ZWRDb250ZW50ID0gc2VjdGlvbi5jb250ZW50LmV2YWx1YXRlKGN0eCk7XG4gICAgICAgICAgICBpZiAodHlwZU9mKGV2YWx1YXRlZENvbnRlbnQpID09PSBSZXNvbHZlZEltYWdlVHlwZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRm9ybWF0dGVkU2VjdGlvbignJywgZXZhbHVhdGVkQ29udGVudCwgbnVsbCwgbnVsbCwgbnVsbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgRm9ybWF0dGVkU2VjdGlvbihcbiAgICAgICAgICAgICAgICAgICAgdG9TdHJpbmcoZXZhbHVhdGVkQ29udGVudCksXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb24uc2NhbGUgPyBzZWN0aW9uLnNjYWxlLmV2YWx1YXRlKGN0eCkgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLmZvbnQgPyBzZWN0aW9uLmZvbnQuZXZhbHVhdGUoY3R4KS5qb2luKCcsJykgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLnRleHRDb2xvciA/IHNlY3Rpb24udGV4dENvbG9yLmV2YWx1YXRlKGN0eCkgOiBudWxsXG4gICAgICAgICAgICApO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBuZXcgRm9ybWF0dGVkKHRoaXMuc2VjdGlvbnMubWFwKGV2YWx1YXRlU2VjdGlvbikpO1xuICAgIH1cblxuICAgIGVhY2hDaGlsZChmbjogKF86IEV4cHJlc3Npb24pID0+IHZvaWQpIHtcbiAgICAgICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHRoaXMuc2VjdGlvbnMpIHtcbiAgICAgICAgICAgIGZuKHNlY3Rpb24uY29udGVudCk7XG4gICAgICAgICAgICBpZiAoc2VjdGlvbi5zY2FsZSkge1xuICAgICAgICAgICAgICAgIGZuKHNlY3Rpb24uc2NhbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlY3Rpb24uZm9udCkge1xuICAgICAgICAgICAgICAgIGZuKHNlY3Rpb24uZm9udCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VjdGlvbi50ZXh0Q29sb3IpIHtcbiAgICAgICAgICAgICAgICBmbihzZWN0aW9uLnRleHRDb2xvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvdXRwdXREZWZpbmVkKCkge1xuICAgICAgICAvLyBUZWNobmljYWxseSB0aGUgY29tYmluYXRvcmljIHNldCBvZiBhbGwgY2hpbGRyZW5cbiAgICAgICAgLy8gVXN1YWxseSwgdGhpcy50ZXh0IHdpbGwgYmUgdW5kZWZpbmVkIGFueXdheVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkID0gW1wiZm9ybWF0XCJdO1xuICAgICAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgdGhpcy5zZWN0aW9ucykge1xuICAgICAgICAgICAgc2VyaWFsaXplZC5wdXNoKHNlY3Rpb24uY29udGVudC5zZXJpYWxpemUoKSk7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge307XG4gICAgICAgICAgICBpZiAoc2VjdGlvbi5zY2FsZSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnNbJ2ZvbnQtc2NhbGUnXSA9IHNlY3Rpb24uc2NhbGUuc2VyaWFsaXplKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VjdGlvbi5mb250KSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uc1sndGV4dC1mb250J10gPSBzZWN0aW9uLmZvbnQuc2VyaWFsaXplKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VjdGlvbi50ZXh0Q29sb3IpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zWyd0ZXh0LWNvbG9yJ10gPSBzZWN0aW9uLnRleHRDb2xvci5zZXJpYWxpemUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlcmlhbGl6ZWQucHVzaChvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VyaWFsaXplZDtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge1Jlc29sdmVkSW1hZ2VUeXBlLCBTdHJpbmdUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgUmVzb2x2ZWRJbWFnZSBmcm9tICcuLi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25Db250ZXh0IGZyb20gJy4uL2V2YWx1YXRpb25fY29udGV4dCc7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW1hZ2VFeHByZXNzaW9uIGltcGxlbWVudHMgRXhwcmVzc2lvbiB7XG4gICAgdHlwZTogVHlwZTtcbiAgICBpbnB1dDogRXhwcmVzc2lvbjtcblxuICAgIGNvbnN0cnVjdG9yKGlucHV0OiBFeHByZXNzaW9uKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IFJlc29sdmVkSW1hZ2VUeXBlO1xuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpOiA/RXhwcmVzc2lvbiB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMikge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIHR3byBhcmd1bWVudHMuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuYW1lID0gY29udGV4dC5wYXJzZShhcmdzWzFdLCAxLCBTdHJpbmdUeXBlKTtcbiAgICAgICAgaWYgKCFuYW1lKSByZXR1cm4gY29udGV4dC5lcnJvcihgTm8gaW1hZ2UgbmFtZSBwcm92aWRlZC5gKTtcblxuICAgICAgICByZXR1cm4gbmV3IEltYWdlRXhwcmVzc2lvbihuYW1lKTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGV2YWx1YXRlZEltYWdlTmFtZSA9IHRoaXMuaW5wdXQuZXZhbHVhdGUoY3R4KTtcblxuICAgICAgICBjb25zdCB2YWx1ZSA9IFJlc29sdmVkSW1hZ2UuZnJvbVN0cmluZyhldmFsdWF0ZWRJbWFnZU5hbWUpO1xuICAgICAgICBpZiAodmFsdWUgJiYgY3R4LmF2YWlsYWJsZUltYWdlcykgdmFsdWUuYXZhaWxhYmxlID0gY3R4LmF2YWlsYWJsZUltYWdlcy5pbmRleE9mKGV2YWx1YXRlZEltYWdlTmFtZSkgPiAtMTtcblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoXzogRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICBmbih0aGlzLmlucHV0KTtcbiAgICB9XG5cbiAgICBvdXRwdXREZWZpbmVkKCkge1xuICAgICAgICAvLyBUaGUgb3V0cHV0IG9mIGltYWdlIGlzIGRldGVybWluZWQgYnkgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGltYWdlcyBpbiB0aGUgZXZhbHVhdGlvbiBjb250ZXh0XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIHJldHVybiBbXCJpbWFnZVwiLCB0aGlzLmlucHV0LnNlcmlhbGl6ZSgpXTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB7Qm9vbGVhblR5cGUsIENvbG9yVHlwZSwgTnVtYmVyVHlwZSwgU3RyaW5nVHlwZSwgVmFsdWVUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge0NvbG9yLCB0b1N0cmluZyBhcyB2YWx1ZVRvU3RyaW5nLCB2YWxpZGF0ZVJHQkF9IGZyb20gJy4uL3ZhbHVlcyc7XG5pbXBvcnQgUnVudGltZUVycm9yIGZyb20gJy4uL3J1bnRpbWVfZXJyb3InO1xuaW1wb3J0IEZvcm1hdHRlZCBmcm9tICcuLi90eXBlcy9mb3JtYXR0ZWQnO1xuaW1wb3J0IEZvcm1hdEV4cHJlc3Npb24gZnJvbSAnLi4vZGVmaW5pdGlvbnMvZm9ybWF0JztcbmltcG9ydCBJbWFnZUV4cHJlc3Npb24gZnJvbSAnLi4vZGVmaW5pdGlvbnMvaW1hZ2UnO1xuaW1wb3J0IFJlc29sdmVkSW1hZ2UgZnJvbSAnLi4vdHlwZXMvcmVzb2x2ZWRfaW1hZ2UnO1xuXG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbmNvbnN0IHR5cGVzID0ge1xuICAgICd0by1ib29sZWFuJzogQm9vbGVhblR5cGUsXG4gICAgJ3RvLWNvbG9yJzogQ29sb3JUeXBlLFxuICAgICd0by1udW1iZXInOiBOdW1iZXJUeXBlLFxuICAgICd0by1zdHJpbmcnOiBTdHJpbmdUeXBlXG59O1xuXG4vKipcbiAqIFNwZWNpYWwgZm9ybSBmb3IgZXJyb3ItY29hbGVzY2luZyBjb2VyY2lvbiBleHByZXNzaW9ucyBcInRvLW51bWJlclwiLFxuICogXCJ0by1jb2xvclwiLiAgU2luY2UgdGhlc2UgY29lcmNpb25zIGNhbiBmYWlsIGF0IHJ1bnRpbWUsIHRoZXkgYWNjZXB0IG11bHRpcGxlXG4gKiBhcmd1bWVudHMsIG9ubHkgZXZhbHVhdGluZyBvbmUgYXQgYSB0aW1lIHVudGlsIG9uZSBzdWNjZWVkcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBDb2VyY2lvbiBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG4gICAgYXJnczogQXJyYXk8RXhwcmVzc2lvbj47XG5cbiAgICBjb25zdHJ1Y3Rvcih0eXBlOiBUeXBlLCBhcmdzOiBBcnJheTxFeHByZXNzaW9uPikge1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgICB0aGlzLmFyZ3MgPSBhcmdzO1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZShhcmdzOiAkUmVhZE9ubHlBcnJheTxtaXhlZD4sIGNvbnRleHQ6IFBhcnNpbmdDb250ZXh0KTogP0V4cHJlc3Npb24ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPCAyKVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC5gKTtcblxuICAgICAgICBjb25zdCBuYW1lOiBzdHJpbmcgPSAoYXJnc1swXTogYW55KTtcbiAgICAgICAgYXNzZXJ0KHR5cGVzW25hbWVdLCBuYW1lKTtcblxuICAgICAgICBpZiAoKG5hbWUgPT09ICd0by1ib29sZWFuJyB8fCBuYW1lID09PSAndG8tc3RyaW5nJykgJiYgYXJncy5sZW5ndGggIT09IDIpXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgb25lIGFyZ3VtZW50LmApO1xuXG4gICAgICAgIGNvbnN0IHR5cGUgPSB0eXBlc1tuYW1lXTtcblxuICAgICAgICBjb25zdCBwYXJzZWQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IGNvbnRleHQucGFyc2UoYXJnc1tpXSwgaSwgVmFsdWVUeXBlKTtcbiAgICAgICAgICAgIGlmICghaW5wdXQpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgcGFyc2VkLnB1c2goaW5wdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBDb2VyY2lvbih0eXBlLCBwYXJzZWQpO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGN0eDogRXZhbHVhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZS5raW5kID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHJldHVybiBCb29sZWFuKHRoaXMuYXJnc1swXS5ldmFsdWF0ZShjdHgpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUua2luZCA9PT0gJ2NvbG9yJykge1xuICAgICAgICAgICAgbGV0IGlucHV0O1xuICAgICAgICAgICAgbGV0IGVycm9yO1xuICAgICAgICAgICAgZm9yIChjb25zdCBhcmcgb2YgdGhpcy5hcmdzKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSBhcmcuZXZhbHVhdGUoY3R4KTtcbiAgICAgICAgICAgICAgICBlcnJvciA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0IGluc3RhbmNlb2YgQ29sb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjID0gY3R4LnBhcnNlQ29sb3IoaW5wdXQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYykgcmV0dXJuIGM7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQubGVuZ3RoIDwgMyB8fCBpbnB1dC5sZW5ndGggPiA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGBJbnZhbGlkIHJiZ2EgdmFsdWUgJHtKU09OLnN0cmluZ2lmeShpbnB1dCl9OiBleHBlY3RlZCBhbiBhcnJheSBjb250YWluaW5nIGVpdGhlciB0aHJlZSBvciBmb3VyIG51bWVyaWMgdmFsdWVzLmA7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IHZhbGlkYXRlUkdCQShpbnB1dFswXSwgaW5wdXRbMV0sIGlucHV0WzJdLCBpbnB1dFszXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcigoaW5wdXRbMF06IGFueSkgLyAyNTUsIChpbnB1dFsxXTogYW55KSAvIDI1NSwgKGlucHV0WzJdOiBhbnkpIC8gMjU1LCAoaW5wdXRbM106IGFueSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihlcnJvciB8fCBgQ291bGQgbm90IHBhcnNlIGNvbG9yIGZyb20gdmFsdWUgJyR7dHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJyA/IGlucHV0IDogU3RyaW5nKEpTT04uc3RyaW5naWZ5KGlucHV0KSl9J2ApO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudHlwZS5raW5kID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYXJnIG9mIHRoaXMuYXJncykge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gYXJnLmV2YWx1YXRlKGN0eCk7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICBjb25zdCBudW0gPSBOdW1iZXIodmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChpc05hTihudW0pKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihgQ291bGQgbm90IGNvbnZlcnQgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9IHRvIG51bWJlci5gKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUua2luZCA9PT0gJ2Zvcm1hdHRlZCcpIHtcbiAgICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIGV4cGxpY2l0ICd0by1mb3JtYXR0ZWQnIGJ1dCB0aGlzIGNvZXJjaW9uIGNhbiBiZSBpbXBsaWNpdGx5XG4gICAgICAgICAgICAvLyBjcmVhdGVkIGJ5IHByb3BlcnRpZXMgdGhhdCBleHBlY3QgdGhlICdmb3JtYXR0ZWQnIHR5cGUuXG4gICAgICAgICAgICByZXR1cm4gRm9ybWF0dGVkLmZyb21TdHJpbmcodmFsdWVUb1N0cmluZyh0aGlzLmFyZ3NbMF0uZXZhbHVhdGUoY3R4KSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudHlwZS5raW5kID09PSAncmVzb2x2ZWRJbWFnZScpIHtcbiAgICAgICAgICAgIHJldHVybiBSZXNvbHZlZEltYWdlLmZyb21TdHJpbmcodmFsdWVUb1N0cmluZyh0aGlzLmFyZ3NbMF0uZXZhbHVhdGUoY3R4KSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlVG9TdHJpbmcodGhpcy5hcmdzWzBdLmV2YWx1YXRlKGN0eCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoXzogRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLmFyZ3MuZm9yRWFjaChmbik7XG4gICAgfVxuXG4gICAgb3V0cHV0RGVmaW5lZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXJncy5ldmVyeShhcmcgPT4gYXJnLm91dHB1dERlZmluZWQoKSk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICBpZiAodGhpcy50eXBlLmtpbmQgPT09ICdmb3JtYXR0ZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZvcm1hdEV4cHJlc3Npb24oW3tjb250ZW50OiB0aGlzLmFyZ3NbMF0sIHNjYWxlOiBudWxsLCBmb250OiBudWxsLCB0ZXh0Q29sb3I6IG51bGx9XSkuc2VyaWFsaXplKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50eXBlLmtpbmQgPT09ICdyZXNvbHZlZEltYWdlJykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbWFnZUV4cHJlc3Npb24odGhpcy5hcmdzWzBdKS5zZXJpYWxpemUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBbYHRvLSR7dGhpcy50eXBlLmtpbmR9YF07XG4gICAgICAgIHRoaXMuZWFjaENoaWxkKGNoaWxkID0+IHsgc2VyaWFsaXplZC5wdXNoKGNoaWxkLnNlcmlhbGl6ZSgpKTsgfSk7XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVkO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29lcmNpb247XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge0NvbG9yfSBmcm9tICcuL3ZhbHVlcyc7XG5pbXBvcnQgdHlwZSB7Rm9ybWF0dGVkU2VjdGlvbn0gZnJvbSAnLi90eXBlcy9mb3JtYXR0ZWQnO1xuaW1wb3J0IHR5cGUge0dsb2JhbFByb3BlcnRpZXMsIEZlYXR1cmUsIEZlYXR1cmVTdGF0ZX0gZnJvbSAnLi9pbmRleCc7XG5pbXBvcnQgdHlwZSB7Q2Fub25pY2FsVGlsZUlEfSBmcm9tICcuLi8uLi9zb3VyY2UvdGlsZV9pZCc7XG5cbmNvbnN0IGdlb21ldHJ5VHlwZXMgPSBbJ1Vua25vd24nLCAnUG9pbnQnLCAnTGluZVN0cmluZycsICdQb2x5Z29uJ107XG5cbmNsYXNzIEV2YWx1YXRpb25Db250ZXh0IHtcbiAgICBnbG9iYWxzOiBHbG9iYWxQcm9wZXJ0aWVzO1xuICAgIGZlYXR1cmU6ID9GZWF0dXJlO1xuICAgIGZlYXR1cmVTdGF0ZTogP0ZlYXR1cmVTdGF0ZTtcbiAgICBmb3JtYXR0ZWRTZWN0aW9uOiA/Rm9ybWF0dGVkU2VjdGlvbjtcbiAgICBhdmFpbGFibGVJbWFnZXM6ID9BcnJheTxzdHJpbmc+O1xuICAgIGNhbm9uaWNhbDogP0Nhbm9uaWNhbFRpbGVJRDtcblxuICAgIF9wYXJzZUNvbG9yQ2FjaGU6IHtbXzogc3RyaW5nXTogP0NvbG9yfTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmdsb2JhbHMgPSAobnVsbDogYW55KTtcbiAgICAgICAgdGhpcy5mZWF0dXJlID0gbnVsbDtcbiAgICAgICAgdGhpcy5mZWF0dXJlU3RhdGUgPSBudWxsO1xuICAgICAgICB0aGlzLmZvcm1hdHRlZFNlY3Rpb24gPSBudWxsO1xuICAgICAgICB0aGlzLl9wYXJzZUNvbG9yQ2FjaGUgPSB7fTtcbiAgICAgICAgdGhpcy5hdmFpbGFibGVJbWFnZXMgPSBudWxsO1xuICAgICAgICB0aGlzLmNhbm9uaWNhbCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZlYXR1cmUgJiYgJ2lkJyBpbiB0aGlzLmZlYXR1cmUgPyB0aGlzLmZlYXR1cmUuaWQgOiBudWxsO1xuICAgIH1cblxuICAgIGdlb21ldHJ5VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmVhdHVyZSA/IHR5cGVvZiB0aGlzLmZlYXR1cmUudHlwZSA9PT0gJ251bWJlcicgPyBnZW9tZXRyeVR5cGVzW3RoaXMuZmVhdHVyZS50eXBlXSA6IHRoaXMuZmVhdHVyZS50eXBlIDogbnVsbDtcbiAgICB9XG5cbiAgICBnZW9tZXRyeSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmVhdHVyZSAmJiAnZ2VvbWV0cnknIGluIHRoaXMuZmVhdHVyZSA/IHRoaXMuZmVhdHVyZS5nZW9tZXRyeSA6IG51bGw7XG4gICAgfVxuXG4gICAgY2Fub25pY2FsSUQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbm9uaWNhbDtcbiAgICB9XG5cbiAgICBwcm9wZXJ0aWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mZWF0dXJlICYmIHRoaXMuZmVhdHVyZS5wcm9wZXJ0aWVzIHx8IHt9O1xuICAgIH1cblxuICAgIHBhcnNlQ29sb3IoaW5wdXQ6IHN0cmluZyk6ID9Db2xvciB7XG4gICAgICAgIGxldCBjYWNoZWQgPSB0aGlzLl9wYXJzZUNvbG9yQ2FjaGVbaW5wdXRdO1xuICAgICAgICBpZiAoIWNhY2hlZCkge1xuICAgICAgICAgICAgY2FjaGVkID0gdGhpcy5fcGFyc2VDb2xvckNhY2hlW2lucHV0XSA9IENvbG9yLnBhcnNlKGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRXZhbHVhdGlvbkNvbnRleHQ7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge3RvU3RyaW5nfSBmcm9tICcuL3R5cGVzJztcblxuaW1wb3J0IFBhcnNpbmdDb250ZXh0IGZyb20gJy4vcGFyc2luZ19jb250ZXh0JztcbmltcG9ydCBFdmFsdWF0aW9uQ29udGV4dCBmcm9tICcuL2V2YWx1YXRpb25fY29udGV4dCc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9uLCBFeHByZXNzaW9uUmVnaXN0cnl9IGZyb20gJy4vZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSB7VHlwZX0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7VmFsdWV9IGZyb20gJy4vdmFsdWVzJztcblxuZXhwb3J0IHR5cGUgVmFyYXJncyA9IHt8IHR5cGU6IFR5cGUgfH07XG50eXBlIFNpZ25hdHVyZSA9IEFycmF5PFR5cGU+IHwgVmFyYXJncztcbnR5cGUgRXZhbHVhdGUgPSAoRXZhbHVhdGlvbkNvbnRleHQsIEFycmF5PEV4cHJlc3Npb24+KSA9PiBWYWx1ZTtcbnR5cGUgRGVmaW5pdGlvbiA9IFtUeXBlLCBTaWduYXR1cmUsIEV2YWx1YXRlXSB8XG4gICAge3x0eXBlOiBUeXBlLCBvdmVybG9hZHM6IEFycmF5PFtTaWduYXR1cmUsIEV2YWx1YXRlXT58fTtcblxuY2xhc3MgQ29tcG91bmRFeHByZXNzaW9uIGltcGxlbWVudHMgRXhwcmVzc2lvbiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHR5cGU6IFR5cGU7XG4gICAgX2V2YWx1YXRlOiBFdmFsdWF0ZTtcbiAgICBhcmdzOiBBcnJheTxFeHByZXNzaW9uPjtcblxuICAgIHN0YXRpYyBkZWZpbml0aW9uczoge1tfOiBzdHJpbmddOiBEZWZpbml0aW9uIH07XG5cbiAgICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIHR5cGU6IFR5cGUsIGV2YWx1YXRlOiBFdmFsdWF0ZSwgYXJnczogQXJyYXk8RXhwcmVzc2lvbj4pIHtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgdGhpcy5fZXZhbHVhdGUgPSBldmFsdWF0ZTtcbiAgICAgICAgdGhpcy5hcmdzID0gYXJncztcbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ldmFsdWF0ZShjdHgsIHRoaXMuYXJncyk7XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoXzogRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLmFyZ3MuZm9yRWFjaChmbik7XG4gICAgfVxuXG4gICAgb3V0cHV0RGVmaW5lZCgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpOiBBcnJheTxtaXhlZD4ge1xuICAgICAgICByZXR1cm4gW3RoaXMubmFtZV0uY29uY2F0KHRoaXMuYXJncy5tYXAoYXJnID0+IGFyZy5zZXJpYWxpemUoKSkpO1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZShhcmdzOiAkUmVhZE9ubHlBcnJheTxtaXhlZD4sIGNvbnRleHQ6IFBhcnNpbmdDb250ZXh0KTogP0V4cHJlc3Npb24ge1xuICAgICAgICBjb25zdCBvcDogc3RyaW5nID0gKGFyZ3NbMF06IGFueSk7XG4gICAgICAgIGNvbnN0IGRlZmluaXRpb24gPSBDb21wb3VuZEV4cHJlc3Npb24uZGVmaW5pdGlvbnNbb3BdO1xuICAgICAgICBpZiAoIWRlZmluaXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBVbmtub3duIGV4cHJlc3Npb24gXCIke29wfVwiLiBJZiB5b3Ugd2FudGVkIGEgbGl0ZXJhbCBhcnJheSwgdXNlIFtcImxpdGVyYWxcIiwgWy4uLl1dLmAsIDApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTm93IGNoZWNrIGFyZ3VtZW50IHR5cGVzIGFnYWluc3QgZWFjaCBzaWduYXR1cmVcbiAgICAgICAgY29uc3QgdHlwZSA9IEFycmF5LmlzQXJyYXkoZGVmaW5pdGlvbikgP1xuICAgICAgICAgICAgZGVmaW5pdGlvblswXSA6IGRlZmluaXRpb24udHlwZTtcblxuICAgICAgICBjb25zdCBhdmFpbGFibGVPdmVybG9hZHMgPSBBcnJheS5pc0FycmF5KGRlZmluaXRpb24pID9cbiAgICAgICAgICAgIFtbZGVmaW5pdGlvblsxXSwgZGVmaW5pdGlvblsyXV1dIDpcbiAgICAgICAgICAgIGRlZmluaXRpb24ub3ZlcmxvYWRzO1xuXG4gICAgICAgIGNvbnN0IG92ZXJsb2FkcyA9IGF2YWlsYWJsZU92ZXJsb2Fkcy5maWx0ZXIoKFtzaWduYXR1cmVdKSA9PiAoXG4gICAgICAgICAgICAhQXJyYXkuaXNBcnJheShzaWduYXR1cmUpIHx8IC8vIHZhcmFnc1xuICAgICAgICAgICAgc2lnbmF0dXJlLmxlbmd0aCA9PT0gYXJncy5sZW5ndGggLSAxIC8vIGNvcnJlY3QgcGFyYW0gY291bnRcbiAgICAgICAgKSk7XG5cbiAgICAgICAgbGV0IHNpZ25hdHVyZUNvbnRleHQ6IFBhcnNpbmdDb250ZXh0ID0gKG51bGw6IGFueSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBbcGFyYW1zLCBldmFsdWF0ZV0gb2Ygb3ZlcmxvYWRzKSB7XG4gICAgICAgICAgICAvLyBVc2UgYSBmcmVzaCBjb250ZXh0IGZvciBlYWNoIGF0dGVtcHRlZCBzaWduYXR1cmUgc28gdGhhdCwgaWZcbiAgICAgICAgICAgIC8vIHdlIGV2ZW50dWFsbHkgc3VjY2VlZCwgd2UgaGF2ZW4ndCBwb2xsdXRlZCBgY29udGV4dC5lcnJvcnNgLlxuICAgICAgICAgICAgc2lnbmF0dXJlQ29udGV4dCA9IG5ldyBQYXJzaW5nQ29udGV4dChjb250ZXh0LnJlZ2lzdHJ5LCBjb250ZXh0LnBhdGgsIG51bGwsIGNvbnRleHQuc2NvcGUpO1xuXG4gICAgICAgICAgICAvLyBGaXJzdCBwYXJzZSBhbGwgdGhlIGFyZ3MsIHBvdGVudGlhbGx5IGNvZXJjaW5nIHRvIHRoZVxuICAgICAgICAgICAgLy8gdHlwZXMgZXhwZWN0ZWQgYnkgdGhpcyBvdmVybG9hZC5cbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEFyZ3M6IEFycmF5PEV4cHJlc3Npb24+ID0gW107XG4gICAgICAgICAgICBsZXQgYXJnUGFyc2VGYWlsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyZyA9IGFyZ3NbaV07XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWRUeXBlID0gQXJyYXkuaXNBcnJheShwYXJhbXMpID9cbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2kgLSAxXSA6XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy50eXBlO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gc2lnbmF0dXJlQ29udGV4dC5wYXJzZShhcmcsIDEgKyBwYXJzZWRBcmdzLmxlbmd0aCwgZXhwZWN0ZWRUeXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICAgICAgICAgICAgICBhcmdQYXJzZUZhaWxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwYXJzZWRBcmdzLnB1c2gocGFyc2VkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhcmdQYXJzZUZhaWxlZCkge1xuICAgICAgICAgICAgICAgIC8vIENvdWxkbid0IGNvZXJjZSBhcmdzIG9mIHRoaXMgb3ZlcmxvYWQgdG8gZXhwZWN0ZWQgdHlwZSwgbW92ZVxuICAgICAgICAgICAgICAgIC8vIG9uIHRvIG5leHQgb25lLlxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJhbXMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggIT09IHBhcnNlZEFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZUNvbnRleHQuZXJyb3IoYEV4cGVjdGVkICR7cGFyYW1zLmxlbmd0aH0gYXJndW1lbnRzLCBidXQgZm91bmQgJHtwYXJzZWRBcmdzLmxlbmd0aH0gaW5zdGVhZC5gKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcnNlZEFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IEFycmF5LmlzQXJyYXkocGFyYW1zKSA/IHBhcmFtc1tpXSA6IHBhcmFtcy50eXBlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyZyA9IHBhcnNlZEFyZ3NbaV07XG4gICAgICAgICAgICAgICAgc2lnbmF0dXJlQ29udGV4dC5jb25jYXQoaSArIDEpLmNoZWNrU3VidHlwZShleHBlY3RlZCwgYXJnLnR5cGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2lnbmF0dXJlQ29udGV4dC5lcnJvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb21wb3VuZEV4cHJlc3Npb24ob3AsIHR5cGUsIGV2YWx1YXRlLCBwYXJzZWRBcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGFzc2VydCghc2lnbmF0dXJlQ29udGV4dCB8fCBzaWduYXR1cmVDb250ZXh0LmVycm9ycy5sZW5ndGggPiAwKTtcblxuICAgICAgICBpZiAob3ZlcmxvYWRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgY29udGV4dC5lcnJvcnMucHVzaCguLi5zaWduYXR1cmVDb250ZXh0LmVycm9ycyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBleHBlY3RlZCA9IG92ZXJsb2Fkcy5sZW5ndGggPyBvdmVybG9hZHMgOiBhdmFpbGFibGVPdmVybG9hZHM7XG4gICAgICAgICAgICBjb25zdCBzaWduYXR1cmVzID0gZXhwZWN0ZWRcbiAgICAgICAgICAgICAgICAubWFwKChbcGFyYW1zXSkgPT4gc3RyaW5naWZ5U2lnbmF0dXJlKHBhcmFtcykpXG4gICAgICAgICAgICAgICAgLmpvaW4oJyB8ICcpO1xuXG4gICAgICAgICAgICBjb25zdCBhY3R1YWxUeXBlcyA9IFtdO1xuICAgICAgICAgICAgLy8gRm9yIGVycm9yIG1lc3NhZ2UsIHJlLXBhcnNlIGFyZ3VtZW50cyB3aXRob3V0IHRyeWluZyB0b1xuICAgICAgICAgICAgLy8gYXBwbHkgYW55IGNvZXJjaW9uc1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gY29udGV4dC5wYXJzZShhcmdzW2ldLCAxICsgYWN0dWFsVHlwZXMubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgYWN0dWFsVHlwZXMucHVzaCh0b1N0cmluZyhwYXJzZWQudHlwZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgYXJndW1lbnRzIG9mIHR5cGUgJHtzaWduYXR1cmVzfSwgYnV0IGZvdW5kICgke2FjdHVhbFR5cGVzLmpvaW4oJywgJyl9KSBpbnN0ZWFkLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgc3RhdGljIHJlZ2lzdGVyKFxuICAgICAgICByZWdpc3RyeTogRXhwcmVzc2lvblJlZ2lzdHJ5LFxuICAgICAgICBkZWZpbml0aW9uczoge1tfOiBzdHJpbmddOiBEZWZpbml0aW9uIH1cbiAgICApIHtcbiAgICAgICAgYXNzZXJ0KCFDb21wb3VuZEV4cHJlc3Npb24uZGVmaW5pdGlvbnMpO1xuICAgICAgICBDb21wb3VuZEV4cHJlc3Npb24uZGVmaW5pdGlvbnMgPSBkZWZpbml0aW9ucztcbiAgICAgICAgZm9yIChjb25zdCBuYW1lIGluIGRlZmluaXRpb25zKSB7XG4gICAgICAgICAgICByZWdpc3RyeVtuYW1lXSA9IENvbXBvdW5kRXhwcmVzc2lvbjtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5U2lnbmF0dXJlKHNpZ25hdHVyZTogU2lnbmF0dXJlKTogc3RyaW5nIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShzaWduYXR1cmUpKSB7XG4gICAgICAgIHJldHVybiBgKCR7c2lnbmF0dXJlLm1hcCh0b1N0cmluZykuam9pbignLCAnKX0pYDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYCgke3RvU3RyaW5nKHNpZ25hdHVyZS50eXBlKX0uLi4pYDtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbXBvdW5kRXhwcmVzc2lvbjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7U3RyaW5nVHlwZSwgQm9vbGVhblR5cGUsIENvbGxhdG9yVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IENvbGxhdG9yIGZyb20gJy4uL3R5cGVzL2NvbGxhdG9yJztcblxuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb2xsYXRvckV4cHJlc3Npb24gaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuICAgIGNhc2VTZW5zaXRpdmU6IEV4cHJlc3Npb247XG4gICAgZGlhY3JpdGljU2Vuc2l0aXZlOiBFeHByZXNzaW9uO1xuICAgIGxvY2FsZTogRXhwcmVzc2lvbiB8IG51bGw7XG5cbiAgICBjb25zdHJ1Y3RvcihjYXNlU2Vuc2l0aXZlOiBFeHByZXNzaW9uLCBkaWFjcml0aWNTZW5zaXRpdmU6IEV4cHJlc3Npb24sIGxvY2FsZTogRXhwcmVzc2lvbiB8IG51bGwpIHtcbiAgICAgICAgdGhpcy50eXBlID0gQ29sbGF0b3JUeXBlO1xuICAgICAgICB0aGlzLmxvY2FsZSA9IGxvY2FsZTtcbiAgICAgICAgdGhpcy5jYXNlU2Vuc2l0aXZlID0gY2FzZVNlbnNpdGl2ZTtcbiAgICAgICAgdGhpcy5kaWFjcml0aWNTZW5zaXRpdmUgPSBkaWFjcml0aWNTZW5zaXRpdmU7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpOiA/RXhwcmVzc2lvbiB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMilcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBvbmUgYXJndW1lbnQuYCk7XG5cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IChhcmdzWzFdOiBhbnkpO1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShvcHRpb25zKSlcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBDb2xsYXRvciBvcHRpb25zIGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0LmApO1xuXG4gICAgICAgIGNvbnN0IGNhc2VTZW5zaXRpdmUgPSBjb250ZXh0LnBhcnNlKFxuICAgICAgICAgICAgb3B0aW9uc1snY2FzZS1zZW5zaXRpdmUnXSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBvcHRpb25zWydjYXNlLXNlbnNpdGl2ZSddLCAxLCBCb29sZWFuVHlwZSk7XG4gICAgICAgIGlmICghY2FzZVNlbnNpdGl2ZSkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgY29uc3QgZGlhY3JpdGljU2Vuc2l0aXZlID0gY29udGV4dC5wYXJzZShcbiAgICAgICAgICAgIG9wdGlvbnNbJ2RpYWNyaXRpYy1zZW5zaXRpdmUnXSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBvcHRpb25zWydkaWFjcml0aWMtc2Vuc2l0aXZlJ10sIDEsIEJvb2xlYW5UeXBlKTtcbiAgICAgICAgaWYgKCFkaWFjcml0aWNTZW5zaXRpdmUpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGxldCBsb2NhbGUgPSBudWxsO1xuICAgICAgICBpZiAob3B0aW9uc1snbG9jYWxlJ10pIHtcbiAgICAgICAgICAgIGxvY2FsZSA9IGNvbnRleHQucGFyc2Uob3B0aW9uc1snbG9jYWxlJ10sIDEsIFN0cmluZ1R5cGUpO1xuICAgICAgICAgICAgaWYgKCFsb2NhbGUpIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBDb2xsYXRvckV4cHJlc3Npb24oY2FzZVNlbnNpdGl2ZSwgZGlhY3JpdGljU2Vuc2l0aXZlLCBsb2NhbGUpO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGN0eDogRXZhbHVhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xsYXRvcih0aGlzLmNhc2VTZW5zaXRpdmUuZXZhbHVhdGUoY3R4KSwgdGhpcy5kaWFjcml0aWNTZW5zaXRpdmUuZXZhbHVhdGUoY3R4KSwgdGhpcy5sb2NhbGUgPyB0aGlzLmxvY2FsZS5ldmFsdWF0ZShjdHgpIDogbnVsbCk7XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoXzogRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICBmbih0aGlzLmNhc2VTZW5zaXRpdmUpO1xuICAgICAgICBmbih0aGlzLmRpYWNyaXRpY1NlbnNpdGl2ZSk7XG4gICAgICAgIGlmICh0aGlzLmxvY2FsZSkge1xuICAgICAgICAgICAgZm4odGhpcy5sb2NhbGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb3V0cHV0RGVmaW5lZCgpIHtcbiAgICAgICAgLy8gVGVjaG5pY2FsbHkgdGhlIHNldCBvZiBwb3NzaWJsZSBvdXRwdXRzIGlzIHRoZSBjb21iaW5hdG9yaWMgc2V0IG9mIENvbGxhdG9ycyBwcm9kdWNlZFxuICAgICAgICAvLyBieSBhbGwgcG9zc2libGUgb3V0cHV0cyBvZiBsb2NhbGUvY2FzZVNlbnNpdGl2ZS9kaWFjcml0aWNTZW5zaXRpdmVcbiAgICAgICAgLy8gQnV0IGZvciB0aGUgcHJpbWFyeSB1c2Ugb2YgQ29sbGF0b3JzIGluIGNvbXBhcmlzb24gb3BlcmF0b3JzLCB3ZSBpZ25vcmUgdGhlIENvbGxhdG9yJ3NcbiAgICAgICAgLy8gcG9zc2libGUgb3V0cHV0cyBhbnl3YXksIHNvIHdlIGNhbiBnZXQgYXdheSB3aXRoIGxlYXZpbmcgdGhpcyBmYWxzZSBmb3Igbm93LlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge307XG4gICAgICAgIG9wdGlvbnNbJ2Nhc2Utc2Vuc2l0aXZlJ10gPSB0aGlzLmNhc2VTZW5zaXRpdmUuc2VyaWFsaXplKCk7XG4gICAgICAgIG9wdGlvbnNbJ2RpYWNyaXRpYy1zZW5zaXRpdmUnXSA9IHRoaXMuZGlhY3JpdGljU2Vuc2l0aXZlLnNlcmlhbGl6ZSgpO1xuICAgICAgICBpZiAodGhpcy5sb2NhbGUpIHtcbiAgICAgICAgICAgIG9wdGlvbnNbJ2xvY2FsZSddID0gdGhpcy5sb2NhbGUuc2VyaWFsaXplKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcImNvbGxhdG9yXCIsIG9wdGlvbnNdO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7aXNWYWx1ZX0gZnJvbSAnLi4vdmFsdWVzJztcbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge0Jvb2xlYW5UeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtHZW9KU09OLCBHZW9KU09OUG9seWdvbiwgR2VvSlNPTk11bHRpUG9seWdvbn0gZnJvbSAnQG1hcGJveC9nZW9qc29uLXR5cGVzJztcbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB0eXBlIHtDYW5vbmljYWxUaWxlSUR9IGZyb20gJy4uLy4uLy4uL3NvdXJjZS90aWxlX2lkJztcblxudHlwZSBHZW9KU09OUG9seWdvbnMgPXwgR2VvSlNPTlBvbHlnb24gfCBHZW9KU09OTXVsdGlQb2x5Z29uO1xuXG4vLyBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZXG50eXBlIEJCb3ggPSBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbmNvbnN0IEVYVEVOVCA9IDgxOTI7XG5cbmZ1bmN0aW9uIHVwZGF0ZUJCb3goYmJveDogQkJveCwgY29vcmQ6IFBvaW50KSB7XG4gICAgYmJveFswXSA9IE1hdGgubWluKGJib3hbMF0sIGNvb3JkWzBdKTtcbiAgICBiYm94WzFdID0gTWF0aC5taW4oYmJveFsxXSwgY29vcmRbMV0pO1xuICAgIGJib3hbMl0gPSBNYXRoLm1heChiYm94WzJdLCBjb29yZFswXSk7XG4gICAgYmJveFszXSA9IE1hdGgubWF4KGJib3hbM10sIGNvb3JkWzFdKTtcbn1cblxuZnVuY3Rpb24gbWVyY2F0b3JYZnJvbUxuZyhsbmc6IG51bWJlcikge1xuICAgIHJldHVybiAoMTgwICsgbG5nKSAvIDM2MDtcbn1cblxuZnVuY3Rpb24gbWVyY2F0b3JZZnJvbUxhdChsYXQ6IG51bWJlcikge1xuICAgIHJldHVybiAoMTgwIC0gKDE4MCAvIE1hdGguUEkgKiBNYXRoLmxvZyhNYXRoLnRhbihNYXRoLlBJIC8gNCArIGxhdCAqIE1hdGguUEkgLyAzNjApKSkpIC8gMzYwO1xufVxuXG5mdW5jdGlvbiBib3hXaXRoaW5Cb3goYmJveDE6IEJCb3gsIGJib3gyOiBCQm94KSB7XG4gICAgaWYgKGJib3gxWzBdIDw9IGJib3gyWzBdKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGJib3gxWzJdID49IGJib3gyWzJdKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGJib3gxWzFdIDw9IGJib3gyWzFdKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGJib3gxWzNdID49IGJib3gyWzNdKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdldFRpbGVDb29yZGluYXRlcyhwLCBjYW5vbmljYWw6IENhbm9uaWNhbFRpbGVJRCkge1xuICAgIGNvbnN0IHggPSBtZXJjYXRvclhmcm9tTG5nKHBbMF0pO1xuICAgIGNvbnN0IHkgPSBtZXJjYXRvcllmcm9tTGF0KHBbMV0pO1xuICAgIGNvbnN0IHRpbGVzQXRab29tID0gTWF0aC5wb3coMiwgY2Fub25pY2FsLnopO1xuICAgIHJldHVybiBbTWF0aC5yb3VuZCh4ICogdGlsZXNBdFpvb20gKiBFWFRFTlQpLCBNYXRoLnJvdW5kKHkgKiB0aWxlc0F0Wm9vbSAqIEVYVEVOVCldO1xufVxuXG5mdW5jdGlvbiBvbkJvdW5kYXJ5KHAsIHAxLCBwMikge1xuICAgIGNvbnN0IHgxID0gcFswXSAtIHAxWzBdO1xuICAgIGNvbnN0IHkxID0gcFsxXSAtIHAxWzFdO1xuICAgIGNvbnN0IHgyID0gcFswXSAtIHAyWzBdO1xuICAgIGNvbnN0IHkyID0gcFsxXSAtIHAyWzFdO1xuICAgIHJldHVybiAoeDEgKiB5MiAtIHgyICogeTEgPT09IDApICYmICh4MSAqIHgyIDw9IDApICYmICh5MSAqIHkyIDw9IDApO1xufVxuXG5mdW5jdGlvbiByYXlJbnRlcnNlY3QocCwgcDEsIHAyKSB7XG4gICAgcmV0dXJuICgocDFbMV0gPiBwWzFdKSAhPT0gKHAyWzFdID4gcFsxXSkpICYmIChwWzBdIDwgKHAyWzBdIC0gcDFbMF0pICogKHBbMV0gLSBwMVsxXSkgLyAocDJbMV0gLSBwMVsxXSkgKyBwMVswXSk7XG59XG5cbi8vIHJheSBjYXN0aW5nIGFsZ29yaXRobSBmb3IgZGV0ZWN0aW5nIGlmIHBvaW50IGlzIGluIHBvbHlnb25cbmZ1bmN0aW9uIHBvaW50V2l0aGluUG9seWdvbihwb2ludCwgcmluZ3MpIHtcbiAgICBsZXQgaW5zaWRlID0gZmFsc2U7XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHJpbmdzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJpbmcgPSByaW5nc1tpXTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDAsIGxlbjIgPSByaW5nLmxlbmd0aDsgaiA8IGxlbjIgLSAxOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChvbkJvdW5kYXJ5KHBvaW50LCByaW5nW2pdLCByaW5nW2ogKyAxXSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmIChyYXlJbnRlcnNlY3QocG9pbnQsIHJpbmdbal0sIHJpbmdbaiArIDFdKSkgaW5zaWRlID0gIWluc2lkZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaW5zaWRlO1xufVxuXG5mdW5jdGlvbiBwb2ludFdpdGhpblBvbHlnb25zKHBvaW50LCBwb2x5Z29ucykge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9seWdvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHBvaW50V2l0aGluUG9seWdvbihwb2ludCwgcG9seWdvbnNbaV0pKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBwZXJwKHYxLCB2Mikge1xuICAgIHJldHVybiAodjFbMF0gKiB2MlsxXSAtIHYxWzFdICogdjJbMF0pO1xufVxuXG4vLyBjaGVjayBpZiBwMSBhbmQgcDIgYXJlIGluIGRpZmZlcmVudCBzaWRlcyBvZiBsaW5lIHNlZ21lbnQgcTEtPnEyXG5mdW5jdGlvbiAgdHdvU2lkZWQocDEsIHAyLCBxMSwgcTIpIHtcbiAgICAvLyBxMS0+cDEgKHgxLCB5MSksIHExLT5wMiAoeDIsIHkyKSwgcTEtPnEyICh4MywgeTMpXG4gICAgY29uc3QgeDEgPSBwMVswXSAtIHExWzBdO1xuICAgIGNvbnN0IHkxID0gcDFbMV0gLSBxMVsxXTtcbiAgICBjb25zdCB4MiA9IHAyWzBdIC0gcTFbMF07XG4gICAgY29uc3QgeTIgPSBwMlsxXSAtIHExWzFdO1xuICAgIGNvbnN0IHgzID0gcTJbMF0gLSBxMVswXTtcbiAgICBjb25zdCB5MyA9IHEyWzFdIC0gcTFbMV07XG4gICAgY29uc3QgZGV0MSA9ICh4MSAqIHkzIC0geDMgKiB5MSk7XG4gICAgY29uc3QgZGV0MiA9ICAoeDIgKiB5MyAtIHgzICogeTIpO1xuICAgIGlmICgoZGV0MSA+IDAgJiYgZGV0MiA8IDApIHx8IChkZXQxIDwgMCAmJiBkZXQyID4gMCkpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBmYWxzZTtcbn1cbi8vIGEsIGIgYXJlIGVuZCBwb2ludHMgZm9yIGxpbmUgc2VnbWVudDEsIGMgYW5kIGQgYXJlIGVuZCBwb2ludHMgZm9yIGxpbmUgc2VnbWVudDJcbmZ1bmN0aW9uIGxpbmVJbnRlcnNlY3RMaW5lKGEsIGIsIGMsIGQpIHtcbiAgICAvLyBjaGVjayBpZiB0d28gc2VnbWVudHMgYXJlIHBhcmFsbGVsIG9yIG5vdFxuICAgIC8vIHByZWNvbmRpdGlvbiBpcyBlbmQgcG9pbnQgYSwgYiBpcyBpbnNpZGUgcG9seWdvbiwgaWYgbGluZSBhLT5iIGlzXG4gICAgLy8gcGFyYWxsZWwgdG8gcG9seWdvbiBlZGdlIGMtPmQsIHRoZW4gYS0+YiB3b24ndCBpbnRlcnNlY3Qgd2l0aCBjLT5kXG4gICAgY29uc3QgdmVjdG9yUCA9IFtiWzBdIC0gYVswXSwgYlsxXSAtIGFbMV1dO1xuICAgIGNvbnN0IHZlY3RvclEgPSBbZFswXSAtIGNbMF0sIGRbMV0gLSBjWzFdXTtcbiAgICBpZiAocGVycCh2ZWN0b3JRLCB2ZWN0b3JQKSA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gSWYgbGluZXMgYXJlIGludGVyc2VjdGluZyB3aXRoIGVhY2ggb3RoZXIsIHRoZSByZWxhdGl2ZSBsb2NhdGlvbiBzaG91bGQgYmU6XG4gICAgLy8gYSBhbmQgYiBsaWUgaW4gZGlmZmVyZW50IHNpZGVzIG9mIHNlZ21lbnQgYy0+ZFxuICAgIC8vIGMgYW5kIGQgbGllIGluIGRpZmZlcmVudCBzaWRlcyBvZiBzZWdtZW50IGEtPmJcbiAgICBpZiAodHdvU2lkZWQoYSwgYiwgYywgZCkgJiYgdHdvU2lkZWQoYywgZCwgYSwgYikpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbGluZUludGVyc2VjdFBvbHlnb24ocDEsIHAyLCBwb2x5Z29uKSB7XG4gICAgZm9yIChjb25zdCByaW5nIG9mIHBvbHlnb24pIHtcbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGV2ZXJ5IGVkZ2Ugb2YgdGhlIHJpbmdcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCByaW5nLmxlbmd0aCAtIDE7ICsraikge1xuICAgICAgICAgICAgaWYgKGxpbmVJbnRlcnNlY3RMaW5lKHAxLCBwMiwgcmluZ1tqXSwgcmluZ1tqICsgMV0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBsaW5lU3RyaW5nV2l0aGluUG9seWdvbihsaW5lLCBwb2x5Z29uKSB7XG4gICAgLy8gRmlyc3QsIGNoZWNrIGlmIGdlb21ldHJ5IHBvaW50cyBvZiBsaW5lIHNlZ21lbnRzIGFyZSBhbGwgaW5zaWRlIHBvbHlnb25cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKCFwb2ludFdpdGhpblBvbHlnb24obGluZVtpXSwgcG9seWdvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNlY29uZCwgY2hlY2sgaWYgdGhlcmUgaXMgbGluZSBzZWdtZW50IGludGVyc2VjdGluZyBwb2x5Z29uIGVkZ2VcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmUubGVuZ3RoIC0gMTsgKytpKSB7XG4gICAgICAgIGlmIChsaW5lSW50ZXJzZWN0UG9seWdvbihsaW5lW2ldLCBsaW5lW2kgKyAxXSwgcG9seWdvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gbGluZVN0cmluZ1dpdGhpblBvbHlnb25zKGxpbmUsIHBvbHlnb25zKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2x5Z29ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAobGluZVN0cmluZ1dpdGhpblBvbHlnb24obGluZSwgcG9seWdvbnNbaV0pKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRUaWxlUG9seWdvbihjb29yZGluYXRlcywgYmJveCwgY2Fub25pY2FsKSB7XG4gICAgY29uc3QgcG9seWdvbiA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29vcmRpbmF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcmluZyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvb3JkaW5hdGVzW2ldLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCBjb29yZCA9IGdldFRpbGVDb29yZGluYXRlcyhjb29yZGluYXRlc1tpXVtqXSwgY2Fub25pY2FsKTtcbiAgICAgICAgICAgIHVwZGF0ZUJCb3goYmJveCwgY29vcmQpO1xuICAgICAgICAgICAgcmluZy5wdXNoKGNvb3JkKTtcbiAgICAgICAgfVxuICAgICAgICBwb2x5Z29uLnB1c2gocmluZyk7XG4gICAgfVxuICAgIHJldHVybiBwb2x5Z29uO1xufVxuXG5mdW5jdGlvbiBnZXRUaWxlUG9seWdvbnMoY29vcmRpbmF0ZXMsIGJib3gsIGNhbm9uaWNhbCkge1xuICAgIGNvbnN0IHBvbHlnb25zID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29yZGluYXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBwb2x5Z29uID0gZ2V0VGlsZVBvbHlnb24oY29vcmRpbmF0ZXNbaV0sIGJib3gsIGNhbm9uaWNhbCk7XG4gICAgICAgIHBvbHlnb25zLnB1c2gocG9seWdvbik7XG4gICAgfVxuICAgIHJldHVybiBwb2x5Z29ucztcbn1cblxuZnVuY3Rpb24gdXBkYXRlUG9pbnQocCwgYmJveCwgcG9seUJCb3gsIHdvcmxkU2l6ZSkge1xuICAgIGlmIChwWzBdIDwgcG9seUJCb3hbMF0gfHwgcFswXSA+IHBvbHlCQm94WzJdKSB7XG4gICAgICAgIGNvbnN0IGhhbGZXb3JsZFNpemUgPSB3b3JsZFNpemUgKiAwLjU7XG4gICAgICAgIGxldCBzaGlmdCA9IChwWzBdIC0gcG9seUJCb3hbMF0gPiBoYWxmV29ybGRTaXplKSA/IC13b3JsZFNpemUgOiAocG9seUJCb3hbMF0gLSBwWzBdID4gaGFsZldvcmxkU2l6ZSkgPyB3b3JsZFNpemUgOiAwO1xuICAgICAgICBpZiAoc2hpZnQgPT09IDApIHtcbiAgICAgICAgICAgIHNoaWZ0ID0gKHBbMF0gLSBwb2x5QkJveFsyXSA+IGhhbGZXb3JsZFNpemUpID8gLXdvcmxkU2l6ZSA6IChwb2x5QkJveFsyXSAtIHBbMF0gPiBoYWxmV29ybGRTaXplKSA/IHdvcmxkU2l6ZSA6IDA7XG4gICAgICAgIH1cbiAgICAgICAgcFswXSArPSBzaGlmdDtcbiAgICB9XG4gICAgdXBkYXRlQkJveChiYm94LCBwKTtcbn1cblxuZnVuY3Rpb24gcmVzZXRCQm94KGJib3gpIHtcbiAgICBiYm94WzBdID0gYmJveFsxXSA9IEluZmluaXR5O1xuICAgIGJib3hbMl0gPSBiYm94WzNdID0gLUluZmluaXR5O1xufVxuXG5mdW5jdGlvbiBnZXRUaWxlUG9pbnRzKGdlb21ldHJ5LCBwb2ludEJCb3gsIHBvbHlCQm94LCBjYW5vbmljYWwpIHtcbiAgICBjb25zdCB3b3JsZFNpemUgPSBNYXRoLnBvdygyLCBjYW5vbmljYWwueikgKiBFWFRFTlQ7XG4gICAgY29uc3Qgc2hpZnRzID0gW2Nhbm9uaWNhbC54ICogRVhURU5ULCBjYW5vbmljYWwueSAqIEVYVEVOVF07XG4gICAgY29uc3QgdGlsZVBvaW50cyA9IFtdO1xuICAgIGZvciAoY29uc3QgcG9pbnRzIG9mIGdlb21ldHJ5KSB7XG4gICAgICAgIGZvciAoY29uc3QgcG9pbnQgb2YgcG9pbnRzKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gW3BvaW50LnggKyBzaGlmdHNbMF0sIHBvaW50LnkgKyBzaGlmdHNbMV1dO1xuICAgICAgICAgICAgdXBkYXRlUG9pbnQocCwgcG9pbnRCQm94LCBwb2x5QkJveCwgd29ybGRTaXplKTtcbiAgICAgICAgICAgIHRpbGVQb2ludHMucHVzaChwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGlsZVBvaW50cztcbn1cblxuZnVuY3Rpb24gZ2V0VGlsZUxpbmVzKGdlb21ldHJ5LCBsaW5lQkJveCwgcG9seUJCb3gsIGNhbm9uaWNhbCkge1xuICAgIGNvbnN0IHdvcmxkU2l6ZSA9IE1hdGgucG93KDIsIGNhbm9uaWNhbC56KSAqIEVYVEVOVDtcbiAgICBjb25zdCBzaGlmdHMgPSBbY2Fub25pY2FsLnggKiBFWFRFTlQsIGNhbm9uaWNhbC55ICogRVhURU5UXTtcbiAgICBjb25zdCB0aWxlTGluZXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgZ2VvbWV0cnkpIHtcbiAgICAgICAgY29uc3QgdGlsZUxpbmUgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwb2ludCBvZiBsaW5lKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gW3BvaW50LnggKyBzaGlmdHNbMF0sIHBvaW50LnkgKyBzaGlmdHNbMV1dO1xuICAgICAgICAgICAgdXBkYXRlQkJveChsaW5lQkJveCwgcCk7XG4gICAgICAgICAgICB0aWxlTGluZS5wdXNoKHApO1xuICAgICAgICB9XG4gICAgICAgIHRpbGVMaW5lcy5wdXNoKHRpbGVMaW5lKTtcbiAgICB9XG4gICAgaWYgKGxpbmVCQm94WzJdIC0gbGluZUJCb3hbMF0gPD0gd29ybGRTaXplIC8gMikge1xuICAgICAgICByZXNldEJCb3gobGluZUJCb3gpO1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgdGlsZUxpbmVzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHAgb2YgbGluZSkge1xuICAgICAgICAgICAgICAgIHVwZGF0ZVBvaW50KHAsIGxpbmVCQm94LCBwb2x5QkJveCwgd29ybGRTaXplKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGlsZUxpbmVzO1xufVxuXG5mdW5jdGlvbiBwb2ludHNXaXRoaW5Qb2x5Z29ucyhjdHg6IEV2YWx1YXRpb25Db250ZXh0LCBwb2x5Z29uR2VvbWV0cnk6IEdlb0pTT05Qb2x5Z29ucykge1xuICAgIGNvbnN0IHBvaW50QkJveCA9IFtJbmZpbml0eSwgSW5maW5pdHksIC1JbmZpbml0eSwgLUluZmluaXR5XTtcbiAgICBjb25zdCBwb2x5QkJveCA9IFtJbmZpbml0eSwgSW5maW5pdHksIC1JbmZpbml0eSwgLUluZmluaXR5XTtcblxuICAgIGNvbnN0IGNhbm9uaWNhbCA9IGN0eC5jYW5vbmljYWxJRCgpO1xuXG4gICAgaWYgKHBvbHlnb25HZW9tZXRyeS50eXBlID09PSAnUG9seWdvbicpIHtcbiAgICAgICAgY29uc3QgdGlsZVBvbHlnb24gPSBnZXRUaWxlUG9seWdvbihwb2x5Z29uR2VvbWV0cnkuY29vcmRpbmF0ZXMsIHBvbHlCQm94LCBjYW5vbmljYWwpO1xuICAgICAgICBjb25zdCB0aWxlUG9pbnRzID0gZ2V0VGlsZVBvaW50cyhjdHguZ2VvbWV0cnkoKSwgcG9pbnRCQm94LCBwb2x5QkJveCwgY2Fub25pY2FsKTtcbiAgICAgICAgaWYgKCFib3hXaXRoaW5Cb3gocG9pbnRCQm94LCBwb2x5QkJveCkpIHJldHVybiBmYWxzZTtcblxuICAgICAgICBmb3IgKGNvbnN0IHBvaW50IG9mIHRpbGVQb2ludHMpIHtcbiAgICAgICAgICAgIGlmICghcG9pbnRXaXRoaW5Qb2x5Z29uKHBvaW50LCB0aWxlUG9seWdvbikpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocG9seWdvbkdlb21ldHJ5LnR5cGUgPT09ICdNdWx0aVBvbHlnb24nKSB7XG4gICAgICAgIGNvbnN0IHRpbGVQb2x5Z29ucyA9IGdldFRpbGVQb2x5Z29ucyhwb2x5Z29uR2VvbWV0cnkuY29vcmRpbmF0ZXMsIHBvbHlCQm94LCBjYW5vbmljYWwpO1xuICAgICAgICBjb25zdCB0aWxlUG9pbnRzID0gZ2V0VGlsZVBvaW50cyhjdHguZ2VvbWV0cnkoKSwgcG9pbnRCQm94LCBwb2x5QkJveCwgY2Fub25pY2FsKTtcbiAgICAgICAgaWYgKCFib3hXaXRoaW5Cb3gocG9pbnRCQm94LCBwb2x5QkJveCkpIHJldHVybiBmYWxzZTtcblxuICAgICAgICBmb3IgKGNvbnN0IHBvaW50IG9mIHRpbGVQb2ludHMpIHtcbiAgICAgICAgICAgIGlmICghcG9pbnRXaXRoaW5Qb2x5Z29ucyhwb2ludCwgdGlsZVBvbHlnb25zKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGxpbmVzV2l0aGluUG9seWdvbnMoY3R4OiBFdmFsdWF0aW9uQ29udGV4dCwgcG9seWdvbkdlb21ldHJ5OiBHZW9KU09OUG9seWdvbnMpIHtcbiAgICBjb25zdCBsaW5lQkJveCA9IFtJbmZpbml0eSwgSW5maW5pdHksIC1JbmZpbml0eSwgLUluZmluaXR5XTtcbiAgICBjb25zdCBwb2x5QkJveCA9IFtJbmZpbml0eSwgSW5maW5pdHksIC1JbmZpbml0eSwgLUluZmluaXR5XTtcblxuICAgIGNvbnN0IGNhbm9uaWNhbCA9IGN0eC5jYW5vbmljYWxJRCgpO1xuXG4gICAgaWYgKHBvbHlnb25HZW9tZXRyeS50eXBlID09PSAnUG9seWdvbicpIHtcbiAgICAgICAgY29uc3QgdGlsZVBvbHlnb24gPSBnZXRUaWxlUG9seWdvbihwb2x5Z29uR2VvbWV0cnkuY29vcmRpbmF0ZXMsIHBvbHlCQm94LCBjYW5vbmljYWwpO1xuICAgICAgICBjb25zdCB0aWxlTGluZXMgPSBnZXRUaWxlTGluZXMoY3R4Lmdlb21ldHJ5KCksIGxpbmVCQm94LCBwb2x5QkJveCwgY2Fub25pY2FsKTtcbiAgICAgICAgaWYgKCFib3hXaXRoaW5Cb3gobGluZUJCb3gsIHBvbHlCQm94KSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiB0aWxlTGluZXMpIHtcbiAgICAgICAgICAgIGlmICghbGluZVN0cmluZ1dpdGhpblBvbHlnb24obGluZSwgdGlsZVBvbHlnb24pKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHBvbHlnb25HZW9tZXRyeS50eXBlID09PSAnTXVsdGlQb2x5Z29uJykge1xuICAgICAgICBjb25zdCB0aWxlUG9seWdvbnMgPSBnZXRUaWxlUG9seWdvbnMocG9seWdvbkdlb21ldHJ5LmNvb3JkaW5hdGVzLCBwb2x5QkJveCwgY2Fub25pY2FsKTtcbiAgICAgICAgY29uc3QgdGlsZUxpbmVzID0gZ2V0VGlsZUxpbmVzKGN0eC5nZW9tZXRyeSgpLCBsaW5lQkJveCwgcG9seUJCb3gsIGNhbm9uaWNhbCk7XG4gICAgICAgIGlmICghYm94V2l0aGluQm94KGxpbmVCQm94LCBwb2x5QkJveCkpIHJldHVybiBmYWxzZTtcblxuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgdGlsZUxpbmVzKSB7XG4gICAgICAgICAgICBpZiAoIWxpbmVTdHJpbmdXaXRoaW5Qb2x5Z29ucyhsaW5lLCB0aWxlUG9seWdvbnMpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmNsYXNzIFdpdGhpbiBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG4gICAgZ2VvanNvbjogR2VvSlNPTlxuICAgIGdlb21ldHJpZXM6IEdlb0pTT05Qb2x5Z29ucztcblxuICAgIGNvbnN0cnVjdG9yKGdlb2pzb246IEdlb0pTT04sIGdlb21ldHJpZXM6IEdlb0pTT05Qb2x5Z29ucykge1xuICAgICAgICB0aGlzLnR5cGUgPSBCb29sZWFuVHlwZTtcbiAgICAgICAgdGhpcy5nZW9qc29uID0gZ2VvanNvbjtcbiAgICAgICAgdGhpcy5nZW9tZXRyaWVzID0gZ2VvbWV0cmllcztcbiAgICB9XG5cbiAgICBzdGF0aWMgcGFyc2UoYXJnczogJFJlYWRPbmx5QXJyYXk8bWl4ZWQ+LCBjb250ZXh0OiBQYXJzaW5nQ29udGV4dCkge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggIT09IDIpXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgJ3dpdGhpbicgZXhwcmVzc2lvbiByZXF1aXJlcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgYnV0IGZvdW5kICR7YXJncy5sZW5ndGggLSAxfSBpbnN0ZWFkLmApO1xuICAgICAgICBpZiAoaXNWYWx1ZShhcmdzWzFdKSkge1xuICAgICAgICAgICAgY29uc3QgZ2VvanNvbiA9IChhcmdzWzFdOiBPYmplY3QpO1xuICAgICAgICAgICAgaWYgKGdlb2pzb24udHlwZSA9PT0gJ0ZlYXR1cmVDb2xsZWN0aW9uJykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ2VvanNvbi5mZWF0dXJlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0eXBlID0gZ2VvanNvbi5mZWF0dXJlc1tpXS5nZW9tZXRyeS50eXBlO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ1BvbHlnb24nIHx8IHR5cGUgPT09ICdNdWx0aVBvbHlnb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFdpdGhpbihnZW9qc29uLCBnZW9qc29uLmZlYXR1cmVzW2ldLmdlb21ldHJ5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZ2VvanNvbi50eXBlID09PSAnRmVhdHVyZScpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0eXBlID0gZ2VvanNvbi5nZW9tZXRyeS50eXBlO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnUG9seWdvbicgfHwgdHlwZSA9PT0gJ011bHRpUG9seWdvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBXaXRoaW4oZ2VvanNvbiwgZ2VvanNvbi5nZW9tZXRyeSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChnZW9qc29uLnR5cGUgID09PSAnUG9seWdvbicgfHwgZ2VvanNvbi50eXBlID09PSAnTXVsdGlQb2x5Z29uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgV2l0aGluKGdlb2pzb24sIGdlb2pzb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGAnd2l0aGluJyBleHByZXNzaW9uIHJlcXVpcmVzIHZhbGlkIGdlb2pzb24gb2JqZWN0IHRoYXQgY29udGFpbnMgcG9seWdvbiBnZW9tZXRyeSB0eXBlLmApO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGN0eDogRXZhbHVhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgaWYgKGN0eC5nZW9tZXRyeSgpICE9IG51bGwgJiYgY3R4LmNhbm9uaWNhbElEKCkgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKGN0eC5nZW9tZXRyeVR5cGUoKSA9PT0gJ1BvaW50Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBwb2ludHNXaXRoaW5Qb2x5Z29ucyhjdHgsIHRoaXMuZ2VvbWV0cmllcyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGN0eC5nZW9tZXRyeVR5cGUoKSA9PT0gJ0xpbmVTdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxpbmVzV2l0aGluUG9seWdvbnMoY3R4LCB0aGlzLmdlb21ldHJpZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBlYWNoQ2hpbGQoKSB7fVxuXG4gICAgb3V0cHV0RGVmaW5lZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCk6IEFycmF5PG1peGVkPiB7XG4gICAgICAgIHJldHVybiBbXCJ3aXRoaW5cIiwgdGhpcy5nZW9qc29uXTtcbiAgICB9XG5cbn1cblxuZXhwb3J0IGRlZmF1bHQgV2l0aGluO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IENvbXBvdW5kRXhwcmVzc2lvbiBmcm9tICcuL2NvbXBvdW5kX2V4cHJlc3Npb24nO1xuaW1wb3J0IFdpdGhpbiBmcm9tICcuL2RlZmluaXRpb25zL3dpdGhpbic7XG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi9leHByZXNzaW9uLmpzJztcblxuZnVuY3Rpb24gaXNGZWF0dXJlQ29uc3RhbnQoZTogRXhwcmVzc2lvbikge1xuICAgIGlmIChlIGluc3RhbmNlb2YgQ29tcG91bmRFeHByZXNzaW9uKSB7XG4gICAgICAgIGlmIChlLm5hbWUgPT09ICdnZXQnICYmIGUuYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChlLm5hbWUgPT09ICdmZWF0dXJlLXN0YXRlJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKGUubmFtZSA9PT0gJ2hhcycgJiYgZS5hcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgZS5uYW1lID09PSAncHJvcGVydGllcycgfHxcbiAgICAgICAgICAgIGUubmFtZSA9PT0gJ2dlb21ldHJ5LXR5cGUnIHx8XG4gICAgICAgICAgICBlLm5hbWUgPT09ICdpZCdcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAoL15maWx0ZXItLy50ZXN0KGUubmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlIGluc3RhbmNlb2YgV2l0aGluKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBsZXQgcmVzdWx0ID0gdHJ1ZTtcbiAgICBlLmVhY2hDaGlsZChhcmcgPT4ge1xuICAgICAgICBpZiAocmVzdWx0ICYmICFpc0ZlYXR1cmVDb25zdGFudChhcmcpKSB7IHJlc3VsdCA9IGZhbHNlOyB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gaXNTdGF0ZUNvbnN0YW50KGU6IEV4cHJlc3Npb24pIHtcbiAgICBpZiAoZSBpbnN0YW5jZW9mIENvbXBvdW5kRXhwcmVzc2lvbikge1xuICAgICAgICBpZiAoZS5uYW1lID09PSAnZmVhdHVyZS1zdGF0ZScpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsZXQgcmVzdWx0ID0gdHJ1ZTtcbiAgICBlLmVhY2hDaGlsZChhcmcgPT4ge1xuICAgICAgICBpZiAocmVzdWx0ICYmICFpc1N0YXRlQ29uc3RhbnQoYXJnKSkgeyByZXN1bHQgPSBmYWxzZTsgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGlzR2xvYmFsUHJvcGVydHlDb25zdGFudChlOiBFeHByZXNzaW9uLCBwcm9wZXJ0aWVzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgaWYgKGUgaW5zdGFuY2VvZiBDb21wb3VuZEV4cHJlc3Npb24gJiYgcHJvcGVydGllcy5pbmRleE9mKGUubmFtZSkgPj0gMCkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICBsZXQgcmVzdWx0ID0gdHJ1ZTtcbiAgICBlLmVhY2hDaGlsZCgoYXJnKSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQgJiYgIWlzR2xvYmFsUHJvcGVydHlDb25zdGFudChhcmcsIHByb3BlcnRpZXMpKSB7IHJlc3VsdCA9IGZhbHNlOyB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IHtpc0ZlYXR1cmVDb25zdGFudCwgaXNHbG9iYWxQcm9wZXJ0eUNvbnN0YW50LCBpc1N0YXRlQ29uc3RhbnR9O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uQ29udGV4dCAgZnJvbSAnLi4vZXZhbHVhdGlvbl9jb250ZXh0JztcblxuY2xhc3MgVmFyIGltcGxlbWVudHMgRXhwcmVzc2lvbiB7XG4gICAgdHlwZTogVHlwZTtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgYm91bmRFeHByZXNzaW9uOiBFeHByZXNzaW9uO1xuXG4gICAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nLCBib3VuZEV4cHJlc3Npb246IEV4cHJlc3Npb24pIHtcbiAgICAgICAgdGhpcy50eXBlID0gYm91bmRFeHByZXNzaW9uLnR5cGU7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuYm91bmRFeHByZXNzaW9uID0gYm91bmRFeHByZXNzaW9uO1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZShhcmdzOiAkUmVhZE9ubHlBcnJheTxtaXhlZD4sIGNvbnRleHQ6IFBhcnNpbmdDb250ZXh0KSB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMiB8fCB0eXBlb2YgYXJnc1sxXSAhPT0gJ3N0cmluZycpXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgJ3ZhcicgZXhwcmVzc2lvbiByZXF1aXJlcyBleGFjdGx5IG9uZSBzdHJpbmcgbGl0ZXJhbCBhcmd1bWVudC5gKTtcblxuICAgICAgICBjb25zdCBuYW1lID0gYXJnc1sxXTtcbiAgICAgICAgaWYgKCFjb250ZXh0LnNjb3BlLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYFVua25vd24gdmFyaWFibGUgXCIke25hbWV9XCIuIE1ha2Ugc3VyZSBcIiR7bmFtZX1cIiBoYXMgYmVlbiBib3VuZCBpbiBhbiBlbmNsb3NpbmcgXCJsZXRcIiBleHByZXNzaW9uIGJlZm9yZSB1c2luZyBpdC5gLCAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgVmFyKG5hbWUsIGNvbnRleHQuc2NvcGUuZ2V0KG5hbWUpKTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJvdW5kRXhwcmVzc2lvbi5ldmFsdWF0ZShjdHgpO1xuICAgIH1cblxuICAgIGVhY2hDaGlsZCgpIHt9XG5cbiAgICBvdXRwdXREZWZpbmVkKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICByZXR1cm4gW1widmFyXCIsIHRoaXMubmFtZV07XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWYXI7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgU2NvcGUgZnJvbSAnLi9zY29wZSc7XG5pbXBvcnQge2NoZWNrU3VidHlwZX0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgUGFyc2luZ0Vycm9yIGZyb20gJy4vcGFyc2luZ19lcnJvcic7XG5pbXBvcnQgTGl0ZXJhbCBmcm9tICcuL2RlZmluaXRpb25zL2xpdGVyYWwnO1xuaW1wb3J0IEFzc2VydGlvbiBmcm9tICcuL2RlZmluaXRpb25zL2Fzc2VydGlvbic7XG5pbXBvcnQgQ29lcmNpb24gZnJvbSAnLi9kZWZpbml0aW9ucy9jb2VyY2lvbic7XG5pbXBvcnQgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuaW1wb3J0IENvbXBvdW5kRXhwcmVzc2lvbiBmcm9tICcuL2NvbXBvdW5kX2V4cHJlc3Npb24nO1xuaW1wb3J0IENvbGxhdG9yRXhwcmVzc2lvbiBmcm9tICcuL2RlZmluaXRpb25zL2NvbGxhdG9yJztcbmltcG9ydCBXaXRoaW4gZnJvbSAnLi9kZWZpbml0aW9ucy93aXRoaW4nO1xuaW1wb3J0IHtpc0dsb2JhbFByb3BlcnR5Q29uc3RhbnQsIGlzRmVhdHVyZUNvbnN0YW50fSBmcm9tICcuL2lzX2NvbnN0YW50JztcbmltcG9ydCBWYXIgZnJvbSAnLi9kZWZpbml0aW9ucy92YXInO1xuXG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbiwgRXhwcmVzc2lvblJlZ2lzdHJ5fSBmcm9tICcuL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIFN0YXRlIGFzc29jaWF0ZWQgcGFyc2luZyBhdCBhIGdpdmVuIHBvaW50IGluIGFuIGV4cHJlc3Npb24gdHJlZS5cbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFBhcnNpbmdDb250ZXh0IHtcbiAgICByZWdpc3RyeTogRXhwcmVzc2lvblJlZ2lzdHJ5O1xuICAgIHBhdGg6IEFycmF5PG51bWJlcj47XG4gICAga2V5OiBzdHJpbmc7XG4gICAgc2NvcGU6IFNjb3BlO1xuICAgIGVycm9yczogQXJyYXk8UGFyc2luZ0Vycm9yPjtcblxuICAgIC8vIFRoZSBleHBlY3RlZCB0eXBlIG9mIHRoaXMgZXhwcmVzc2lvbi4gUHJvdmlkZWQgb25seSB0byBhbGxvdyBFeHByZXNzaW9uXG4gICAgLy8gaW1wbGVtZW50YXRpb25zIHRvIGluZmVyIGFyZ3VtZW50IHR5cGVzOiBFeHByZXNzaW9uI3BhcnNlKCkgbmVlZCBub3RcbiAgICAvLyBjaGVjayB0aGF0IHRoZSBvdXRwdXQgdHlwZSBvZiB0aGUgcGFyc2VkIGV4cHJlc3Npb24gbWF0Y2hlc1xuICAgIC8vIGBleHBlY3RlZFR5cGVgLlxuICAgIGV4cGVjdGVkVHlwZTogP1R5cGU7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcmVnaXN0cnk6IEV4cHJlc3Npb25SZWdpc3RyeSxcbiAgICAgICAgcGF0aDogQXJyYXk8bnVtYmVyPiA9IFtdLFxuICAgICAgICBleHBlY3RlZFR5cGU6ID9UeXBlLFxuICAgICAgICBzY29wZTogU2NvcGUgPSBuZXcgU2NvcGUoKSxcbiAgICAgICAgZXJyb3JzOiBBcnJheTxQYXJzaW5nRXJyb3I+ID0gW11cbiAgICApIHtcbiAgICAgICAgdGhpcy5yZWdpc3RyeSA9IHJlZ2lzdHJ5O1xuICAgICAgICB0aGlzLnBhdGggPSBwYXRoO1xuICAgICAgICB0aGlzLmtleSA9IHBhdGgubWFwKHBhcnQgPT4gYFske3BhcnR9XWApLmpvaW4oJycpO1xuICAgICAgICB0aGlzLnNjb3BlID0gc2NvcGU7XG4gICAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICAgICAgICB0aGlzLmV4cGVjdGVkVHlwZSA9IGV4cGVjdGVkVHlwZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gZXhwciB0aGUgSlNPTiBleHByZXNzaW9uIHRvIHBhcnNlXG4gICAgICogQHBhcmFtIGluZGV4IHRoZSBvcHRpb25hbCBhcmd1bWVudCBpbmRleCBpZiB0aGlzIGV4cHJlc3Npb24gaXMgYW4gYXJndW1lbnQgb2YgYSBwYXJlbnQgZXhwcmVzc2lvbiB0aGF0J3MgYmVpbmcgcGFyc2VkXG4gICAgICogQHBhcmFtIG9wdGlvbnNcbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5vbWl0VHlwZUFubm90YXRpb25zIHNldCB0cnVlIHRvIG9taXQgaW5mZXJyZWQgdHlwZSBhbm5vdGF0aW9ucy4gIENhbGxlciBiZXdhcmU6IHdpdGggdGhpcyBvcHRpb24gc2V0LCB0aGUgcGFyc2VkIGV4cHJlc3Npb24ncyB0eXBlIHdpbGwgTk9UIHNhdGlzZnkgYGV4cGVjdGVkVHlwZWAgaWYgaXQgd291bGQgbm9ybWFsbHkgYmUgd3JhcHBlZCBpbiBhbiBpbmZlcnJlZCBhbm5vdGF0aW9uLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcGFyc2UoXG4gICAgICAgIGV4cHI6IG1peGVkLFxuICAgICAgICBpbmRleD86IG51bWJlcixcbiAgICAgICAgZXhwZWN0ZWRUeXBlPzogP1R5cGUsXG4gICAgICAgIGJpbmRpbmdzPzogQXJyYXk8W3N0cmluZywgRXhwcmVzc2lvbl0+LFxuICAgICAgICBvcHRpb25zOiB7dHlwZUFubm90YXRpb24/OiAnYXNzZXJ0JyB8ICdjb2VyY2UnIHwgJ29taXQnfSA9IHt9XG4gICAgKTogP0V4cHJlc3Npb24ge1xuICAgICAgICBpZiAoaW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbmNhdChpbmRleCwgZXhwZWN0ZWRUeXBlLCBiaW5kaW5ncykuX3BhcnNlKGV4cHIsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9wYXJzZShleHByLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBfcGFyc2UoZXhwcjogbWl4ZWQsIG9wdGlvbnM6IHt0eXBlQW5ub3RhdGlvbj86ICdhc3NlcnQnIHwgJ2NvZXJjZScgfCAnb21pdCd9KTogP0V4cHJlc3Npb24ge1xuICAgICAgICBpZiAoZXhwciA9PT0gbnVsbCB8fCB0eXBlb2YgZXhwciA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGV4cHIgPT09ICdib29sZWFuJyB8fCB0eXBlb2YgZXhwciA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGV4cHIgPSBbJ2xpdGVyYWwnLCBleHByXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGFubm90YXRlKHBhcnNlZCwgdHlwZSwgdHlwZUFubm90YXRpb246ICdhc3NlcnQnIHwgJ2NvZXJjZScgfCAnb21pdCcpIHtcbiAgICAgICAgICAgIGlmICh0eXBlQW5ub3RhdGlvbiA9PT0gJ2Fzc2VydCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFzc2VydGlvbih0eXBlLCBbcGFyc2VkXSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVBbm5vdGF0aW9uID09PSAnY29lcmNlJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ29lcmNpb24odHlwZSwgW3BhcnNlZF0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXhwcikpIHtcbiAgICAgICAgICAgIGlmIChleHByLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9yKGBFeHBlY3RlZCBhbiBhcnJheSB3aXRoIGF0IGxlYXN0IG9uZSBlbGVtZW50LiBJZiB5b3Ugd2FudGVkIGEgbGl0ZXJhbCBhcnJheSwgdXNlIFtcImxpdGVyYWxcIiwgW11dLmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBvcCA9IGV4cHJbMF07XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IoYEV4cHJlc3Npb24gbmFtZSBtdXN0IGJlIGEgc3RyaW5nLCBidXQgZm91bmQgJHt0eXBlb2Ygb3B9IGluc3RlYWQuIElmIHlvdSB3YW50ZWQgYSBsaXRlcmFsIGFycmF5LCB1c2UgW1wibGl0ZXJhbFwiLCBbLi4uXV0uYCwgMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IEV4cHIgPSB0aGlzLnJlZ2lzdHJ5W29wXTtcbiAgICAgICAgICAgIGlmIChFeHByKSB7XG4gICAgICAgICAgICAgICAgbGV0IHBhcnNlZCA9IEV4cHIucGFyc2UoZXhwciwgdGhpcyk7XG4gICAgICAgICAgICAgICAgaWYgKCFwYXJzZWQpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZXhwZWN0ZWRUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkID0gdGhpcy5leHBlY3RlZFR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdHVhbCA9IHBhcnNlZC50eXBlO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gd2UgZXhwZWN0IGEgbnVtYmVyLCBzdHJpbmcsIGJvb2xlYW4sIG9yIGFycmF5IGJ1dCBoYXZlIGEgdmFsdWUsIHdyYXAgaXQgaW4gYW4gYXNzZXJ0aW9uLlxuICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIHdlIGV4cGVjdCBhIGNvbG9yIG9yIGZvcm1hdHRlZCBzdHJpbmcsIGJ1dCBoYXZlIGEgc3RyaW5nIG9yIHZhbHVlLCB3cmFwIGl0IGluIGEgY29lcmNpb24uXG4gICAgICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgd2UgZG8gc3RhdGljIHR5cGUtY2hlY2tpbmcuXG4gICAgICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZXNlIGJlaGF2aW9ycyBhcmUgb3ZlcnJpZGFibGUgZm9yOlxuICAgICAgICAgICAgICAgICAgICAvLyAgICogVGhlIFwiY29hbGVzY2VcIiBvcGVyYXRvciwgd2hpY2ggbmVlZHMgdG8gb21pdCB0eXBlIGFubm90YXRpb25zLlxuICAgICAgICAgICAgICAgICAgICAvLyAgICogU3RyaW5nLXZhbHVlZCBwcm9wZXJ0aWVzIChlLmcuIGB0ZXh0LWZpZWxkYCksIHdoZXJlIGNvZXJjaW9uIGlzIG1vcmUgY29udmVuaWVudCB0aGFuIGFzc2VydGlvbi5cbiAgICAgICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAgICAgaWYgKChleHBlY3RlZC5raW5kID09PSAnc3RyaW5nJyB8fCBleHBlY3RlZC5raW5kID09PSAnbnVtYmVyJyB8fCBleHBlY3RlZC5raW5kID09PSAnYm9vbGVhbicgfHwgZXhwZWN0ZWQua2luZCA9PT0gJ29iamVjdCcgfHwgZXhwZWN0ZWQua2luZCA9PT0gJ2FycmF5JykgJiYgYWN0dWFsLmtpbmQgPT09ICd2YWx1ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZCA9IGFubm90YXRlKHBhcnNlZCwgZXhwZWN0ZWQsIG9wdGlvbnMudHlwZUFubm90YXRpb24gfHwgJ2Fzc2VydCcpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChleHBlY3RlZC5raW5kID09PSAnY29sb3InIHx8IGV4cGVjdGVkLmtpbmQgPT09ICdmb3JtYXR0ZWQnIHx8IGV4cGVjdGVkLmtpbmQgPT09ICdyZXNvbHZlZEltYWdlJykgJiYgKGFjdHVhbC5raW5kID09PSAndmFsdWUnIHx8IGFjdHVhbC5raW5kID09PSAnc3RyaW5nJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZCA9IGFubm90YXRlKHBhcnNlZCwgZXhwZWN0ZWQsIG9wdGlvbnMudHlwZUFubm90YXRpb24gfHwgJ2NvZXJjZScpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2hlY2tTdWJ0eXBlKGV4cGVjdGVkLCBhY3R1YWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIElmIGFuIGV4cHJlc3Npb24ncyBhcmd1bWVudHMgYXJlIGFsbCBsaXRlcmFscywgd2UgY2FuIGV2YWx1YXRlXG4gICAgICAgICAgICAgICAgLy8gaXQgaW1tZWRpYXRlbHkgYW5kIHJlcGxhY2UgaXQgd2l0aCBhIGxpdGVyYWwgdmFsdWUgaW4gdGhlXG4gICAgICAgICAgICAgICAgLy8gcGFyc2VkL2NvbXBpbGVkIHJlc3VsdC4gRXhwcmVzc2lvbnMgdGhhdCBleHBlY3QgYW4gaW1hZ2Ugc2hvdWxkXG4gICAgICAgICAgICAgICAgLy8gbm90IGJlIHJlc29sdmVkIGhlcmUgc28gd2UgY2FuIGxhdGVyIGdldCB0aGUgYXZhaWxhYmxlIGltYWdlcy5cbiAgICAgICAgICAgICAgICBpZiAoIShwYXJzZWQgaW5zdGFuY2VvZiBMaXRlcmFsKSAmJiAocGFyc2VkLnR5cGUua2luZCAhPT0gJ3Jlc29sdmVkSW1hZ2UnKSAmJiBpc0NvbnN0YW50KHBhcnNlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWMgPSBuZXcgRXZhbHVhdGlvbkNvbnRleHQoKTtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZCA9IG5ldyBMaXRlcmFsKHBhcnNlZC50eXBlLCBwYXJzZWQuZXZhbHVhdGUoZWMpKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvcihlLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvcihgVW5rbm93biBleHByZXNzaW9uIFwiJHtvcH1cIi4gSWYgeW91IHdhbnRlZCBhIGxpdGVyYWwgYXJyYXksIHVzZSBbXCJsaXRlcmFsXCIsIFsuLi5dXS5gLCAwKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9yKGAndW5kZWZpbmVkJyB2YWx1ZSBpbnZhbGlkLiBVc2UgbnVsbCBpbnN0ZWFkLmApO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHByID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3IoYEJhcmUgb2JqZWN0cyBpbnZhbGlkLiBVc2UgW1wibGl0ZXJhbFwiLCB7Li4ufV0gaW5zdGVhZC5gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9yKGBFeHBlY3RlZCBhbiBhcnJheSwgYnV0IGZvdW5kICR7dHlwZW9mIGV4cHJ9IGluc3RlYWQuYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgY29weSBvZiB0aGlzIGNvbnRleHQgc3VpdGFibGUgZm9yIHBhcnNpbmcgdGhlIHN1YmV4cHJlc3Npb24gYXRcbiAgICAgKiBpbmRleCBgaW5kZXhgLCBvcHRpb25hbGx5IGFwcGVuZGluZyB0byAnbGV0JyBiaW5kaW5nIG1hcC5cbiAgICAgKlxuICAgICAqIE5vdGUgdGhhdCBgZXJyb3JzYCBwcm9wZXJ0eSwgaW50ZW5kZWQgZm9yIGNvbGxlY3RpbmcgZXJyb3JzIHdoaWxlXG4gICAgICogcGFyc2luZywgaXMgY29waWVkIGJ5IHJlZmVyZW5jZSByYXRoZXIgdGhhbiBjbG9uZWQuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBjb25jYXQoaW5kZXg6IG51bWJlciwgZXhwZWN0ZWRUeXBlPzogP1R5cGUsIGJpbmRpbmdzPzogQXJyYXk8W3N0cmluZywgRXhwcmVzc2lvbl0+KSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSB0eXBlb2YgaW5kZXggPT09ICdudW1iZXInID8gdGhpcy5wYXRoLmNvbmNhdChpbmRleCkgOiB0aGlzLnBhdGg7XG4gICAgICAgIGNvbnN0IHNjb3BlID0gYmluZGluZ3MgPyB0aGlzLnNjb3BlLmNvbmNhdChiaW5kaW5ncykgOiB0aGlzLnNjb3BlO1xuICAgICAgICByZXR1cm4gbmV3IFBhcnNpbmdDb250ZXh0KFxuICAgICAgICAgICAgdGhpcy5yZWdpc3RyeSxcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICBleHBlY3RlZFR5cGUgfHwgbnVsbCxcbiAgICAgICAgICAgIHNjb3BlLFxuICAgICAgICAgICAgdGhpcy5lcnJvcnNcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQdXNoIGEgcGFyc2luZyAob3IgdHlwZSBjaGVja2luZykgZXJyb3IgaW50byB0aGUgYHRoaXMuZXJyb3JzYFxuICAgICAqIEBwYXJhbSBlcnJvciBUaGUgbWVzc2FnZVxuICAgICAqIEBwYXJhbSBrZXlzIE9wdGlvbmFsbHkgc3BlY2lmeSB0aGUgc291cmNlIG9mIHRoZSBlcnJvciBhdCBhIGNoaWxkXG4gICAgICogb2YgdGhlIGN1cnJlbnQgZXhwcmVzc2lvbiBhdCBgdGhpcy5rZXlgLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgZXJyb3IoZXJyb3I6IHN0cmluZywgLi4ua2V5czogQXJyYXk8bnVtYmVyPikge1xuICAgICAgICBjb25zdCBrZXkgPSBgJHt0aGlzLmtleX0ke2tleXMubWFwKGsgPT4gYFske2t9XWApLmpvaW4oJycpfWA7XG4gICAgICAgIHRoaXMuZXJyb3JzLnB1c2gobmV3IFBhcnNpbmdFcnJvcihrZXksIGVycm9yKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBudWxsIGlmIGB0YCBpcyBhIHN1YnR5cGUgb2YgYGV4cGVjdGVkYDsgb3RoZXJ3aXNlIHJldHVybnMgYW5cbiAgICAgKiBlcnJvciBtZXNzYWdlIGFuZCBhbHNvIHB1c2hlcyBpdCB0byBgdGhpcy5lcnJvcnNgLlxuICAgICAqL1xuICAgIGNoZWNrU3VidHlwZShleHBlY3RlZDogVHlwZSwgdDogVHlwZSk6ID9zdHJpbmcge1xuICAgICAgICBjb25zdCBlcnJvciA9IGNoZWNrU3VidHlwZShleHBlY3RlZCwgdCk7XG4gICAgICAgIGlmIChlcnJvcikgdGhpcy5lcnJvcihlcnJvcik7XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFBhcnNpbmdDb250ZXh0O1xuXG5mdW5jdGlvbiBpc0NvbnN0YW50KGV4cHJlc3Npb246IEV4cHJlc3Npb24pIHtcbiAgICBpZiAoZXhwcmVzc2lvbiBpbnN0YW5jZW9mIFZhcikge1xuICAgICAgICByZXR1cm4gaXNDb25zdGFudChleHByZXNzaW9uLmJvdW5kRXhwcmVzc2lvbik7XG4gICAgfSBlbHNlIGlmIChleHByZXNzaW9uIGluc3RhbmNlb2YgQ29tcG91bmRFeHByZXNzaW9uICYmIGV4cHJlc3Npb24ubmFtZSA9PT0gJ2Vycm9yJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIGlmIChleHByZXNzaW9uIGluc3RhbmNlb2YgQ29sbGF0b3JFeHByZXNzaW9uKSB7XG4gICAgICAgIC8vIEFsdGhvdWdoIHRoZSByZXN1bHRzIG9mIGEgQ29sbGF0b3IgZXhwcmVzc2lvbiB3aXRoIGZpeGVkIGFyZ3VtZW50c1xuICAgICAgICAvLyBnZW5lcmFsbHkgc2hvdWxkbid0IGNoYW5nZSBiZXR3ZWVuIGV4ZWN1dGlvbnMsIHdlIGNhbid0IHNlcmlhbGl6ZSB0aGVtXG4gICAgICAgIC8vIGFzIGNvbnN0YW50IGV4cHJlc3Npb25zIGJlY2F1c2UgcmVzdWx0cyBjaGFuZ2UgYmFzZWQgb24gZW52aXJvbm1lbnQuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24gaW5zdGFuY2VvZiBXaXRoaW4pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGlzVHlwZUFubm90YXRpb24gPSBleHByZXNzaW9uIGluc3RhbmNlb2YgQ29lcmNpb24gfHxcbiAgICAgICAgZXhwcmVzc2lvbiBpbnN0YW5jZW9mIEFzc2VydGlvbjtcblxuICAgIGxldCBjaGlsZHJlbkNvbnN0YW50ID0gdHJ1ZTtcbiAgICBleHByZXNzaW9uLmVhY2hDaGlsZChjaGlsZCA9PiB7XG4gICAgICAgIC8vIFdlIGNhbiBfYWxtb3N0XyBhc3N1bWUgdGhhdCBpZiBgZXhwcmVzc2lvbnNgIGNoaWxkcmVuIGFyZSBjb25zdGFudCxcbiAgICAgICAgLy8gdGhleSB3b3VsZCBhbHJlYWR5IGhhdmUgYmVlbiBldmFsdWF0ZWQgdG8gTGl0ZXJhbCB2YWx1ZXMgd2hlbiB0aGV5XG4gICAgICAgIC8vIHdlcmUgcGFyc2VkLiAgVHlwZSBhbm5vdGF0aW9ucyBhcmUgdGhlIGV4Y2VwdGlvbiwgYmVjYXVzZSB0aGV5IG1pZ2h0XG4gICAgICAgIC8vIGhhdmUgYmVlbiBpbmZlcnJlZCBhbmQgYWRkZWQgYWZ0ZXIgYSBjaGlsZCB3YXMgcGFyc2VkLlxuXG4gICAgICAgIC8vIFNvIHdlIHJlY3Vyc2UgaW50byBpc0NvbnN0YW50KCkgZm9yIHRoZSBjaGlsZHJlbiBvZiB0eXBlIGFubm90YXRpb25zLFxuICAgICAgICAvLyBidXQgb3RoZXJ3aXNlIHNpbXBseSBjaGVjayB3aGV0aGVyIHRoZXkgYXJlIExpdGVyYWxzLlxuICAgICAgICBpZiAoaXNUeXBlQW5ub3RhdGlvbikge1xuICAgICAgICAgICAgY2hpbGRyZW5Db25zdGFudCA9IGNoaWxkcmVuQ29uc3RhbnQgJiYgaXNDb25zdGFudChjaGlsZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjaGlsZHJlbkNvbnN0YW50ID0gY2hpbGRyZW5Db25zdGFudCAmJiBjaGlsZCBpbnN0YW5jZW9mIExpdGVyYWw7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIWNoaWxkcmVuQ29uc3RhbnQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBpc0ZlYXR1cmVDb25zdGFudChleHByZXNzaW9uKSAmJlxuICAgICAgICBpc0dsb2JhbFByb3BlcnR5Q29uc3RhbnQoZXhwcmVzc2lvbiwgWyd6b29tJywgJ2hlYXRtYXAtZGVuc2l0eScsICdsaW5lLXByb2dyZXNzJywgJ2FjY3VtdWxhdGVkJywgJ2lzLXN1cHBvcnRlZC1zY3JpcHQnXSk7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgUnVudGltZUVycm9yIGZyb20gJy4vcnVudGltZV9lcnJvcic7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuL2V4cHJlc3Npb24nO1xuXG5leHBvcnQgdHlwZSBTdG9wcyA9IEFycmF5PFtudW1iZXIsIEV4cHJlc3Npb25dPjtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBzdG9wIDw9IGlucHV0LCBvciAwIGlmIGl0IGRvZXNuJ3QgZXhpc3QuXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZFN0b3BMZXNzVGhhbk9yRXF1YWxUbyhzdG9wczogQXJyYXk8bnVtYmVyPiwgaW5wdXQ6IG51bWJlcikge1xuICAgIGNvbnN0IGxhc3RJbmRleCA9IHN0b3BzLmxlbmd0aCAtIDE7XG4gICAgbGV0IGxvd2VySW5kZXggPSAwO1xuICAgIGxldCB1cHBlckluZGV4ID0gbGFzdEluZGV4O1xuICAgIGxldCBjdXJyZW50SW5kZXggPSAwO1xuICAgIGxldCBjdXJyZW50VmFsdWUsIG5leHRWYWx1ZTtcblxuICAgIHdoaWxlIChsb3dlckluZGV4IDw9IHVwcGVySW5kZXgpIHtcbiAgICAgICAgY3VycmVudEluZGV4ID0gTWF0aC5mbG9vcigobG93ZXJJbmRleCArIHVwcGVySW5kZXgpIC8gMik7XG4gICAgICAgIGN1cnJlbnRWYWx1ZSA9IHN0b3BzW2N1cnJlbnRJbmRleF07XG4gICAgICAgIG5leHRWYWx1ZSA9IHN0b3BzW2N1cnJlbnRJbmRleCArIDFdO1xuXG4gICAgICAgIGlmIChjdXJyZW50VmFsdWUgPD0gaW5wdXQpIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50SW5kZXggPT09IGxhc3RJbmRleCB8fCBpbnB1dCA8IG5leHRWYWx1ZSkgeyAvLyBTZWFyY2ggY29tcGxldGVcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudEluZGV4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsb3dlckluZGV4ID0gY3VycmVudEluZGV4ICsgMTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50VmFsdWUgPiBpbnB1dCkge1xuICAgICAgICAgICAgdXBwZXJJbmRleCA9IGN1cnJlbnRJbmRleCAtIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKCdJbnB1dCBpcyBub3QgYSBudW1iZXIuJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7TnVtYmVyVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQge2ZpbmRTdG9wTGVzc1RoYW5PckVxdWFsVG99IGZyb20gJy4uL3N0b3BzJztcblxuaW1wb3J0IHR5cGUge1N0b3BzfSBmcm9tICcuLi9zdG9wcyc7XG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbmNsYXNzIFN0ZXAgaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuXG4gICAgaW5wdXQ6IEV4cHJlc3Npb247XG4gICAgbGFiZWxzOiBBcnJheTxudW1iZXI+O1xuICAgIG91dHB1dHM6IEFycmF5PEV4cHJlc3Npb24+O1xuXG4gICAgY29uc3RydWN0b3IodHlwZTogVHlwZSwgaW5wdXQ6IEV4cHJlc3Npb24sIHN0b3BzOiBTdG9wcykge1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG5cbiAgICAgICAgdGhpcy5sYWJlbHMgPSBbXTtcbiAgICAgICAgdGhpcy5vdXRwdXRzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgW2xhYmVsLCBleHByZXNzaW9uXSBvZiBzdG9wcykge1xuICAgICAgICAgICAgdGhpcy5sYWJlbHMucHVzaChsYWJlbCk7XG4gICAgICAgICAgICB0aGlzLm91dHB1dHMucHVzaChleHByZXNzaW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZShhcmdzOiAkUmVhZE9ubHlBcnJheTxtaXhlZD4sIGNvbnRleHQ6IFBhcnNpbmdDb250ZXh0KSB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCAtIDEgPCA0KSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgYXQgbGVhc3QgNCBhcmd1bWVudHMsIGJ1dCBmb3VuZCBvbmx5ICR7YXJncy5sZW5ndGggLSAxfS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgoYXJncy5sZW5ndGggLSAxKSAlIDIgIT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBhbiBldmVuIG51bWJlciBvZiBhcmd1bWVudHMuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbnB1dCA9IGNvbnRleHQucGFyc2UoYXJnc1sxXSwgMSwgTnVtYmVyVHlwZSk7XG4gICAgICAgIGlmICghaW5wdXQpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNvbnN0IHN0b3BzOiBTdG9wcyA9IFtdO1xuXG4gICAgICAgIGxldCBvdXRwdXRUeXBlOiBUeXBlID0gKG51bGw6IGFueSk7XG4gICAgICAgIGlmIChjb250ZXh0LmV4cGVjdGVkVHlwZSAmJiBjb250ZXh0LmV4cGVjdGVkVHlwZS5raW5kICE9PSAndmFsdWUnKSB7XG4gICAgICAgICAgICBvdXRwdXRUeXBlID0gY29udGV4dC5leHBlY3RlZFR5cGU7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGFyZ3MubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gaSA9PT0gMSA/IC1JbmZpbml0eSA6IGFyZ3NbaV07XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGFyZ3NbaSArIDFdO1xuXG4gICAgICAgICAgICBjb25zdCBsYWJlbEtleSA9IGk7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZUtleSA9IGkgKyAxO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGxhYmVsICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKCdJbnB1dC9vdXRwdXQgcGFpcnMgZm9yIFwic3RlcFwiIGV4cHJlc3Npb25zIG11c3QgYmUgZGVmaW5lZCB1c2luZyBsaXRlcmFsIG51bWVyaWMgdmFsdWVzIChub3QgY29tcHV0ZWQgZXhwcmVzc2lvbnMpIGZvciB0aGUgaW5wdXQgdmFsdWVzLicsIGxhYmVsS2V5KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHN0b3BzLmxlbmd0aCAmJiBzdG9wc1tzdG9wcy5sZW5ndGggLSAxXVswXSA+PSBsYWJlbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKCdJbnB1dC9vdXRwdXQgcGFpcnMgZm9yIFwic3RlcFwiIGV4cHJlc3Npb25zIG11c3QgYmUgYXJyYW5nZWQgd2l0aCBpbnB1dCB2YWx1ZXMgaW4gc3RyaWN0bHkgYXNjZW5kaW5nIG9yZGVyLicsIGxhYmVsS2V5KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gY29udGV4dC5wYXJzZSh2YWx1ZSwgdmFsdWVLZXksIG91dHB1dFR5cGUpO1xuICAgICAgICAgICAgaWYgKCFwYXJzZWQpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgb3V0cHV0VHlwZSA9IG91dHB1dFR5cGUgfHwgcGFyc2VkLnR5cGU7XG4gICAgICAgICAgICBzdG9wcy5wdXNoKFtsYWJlbCwgcGFyc2VkXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFN0ZXAob3V0cHV0VHlwZSwgaW5wdXQsIHN0b3BzKTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGxhYmVscyA9IHRoaXMubGFiZWxzO1xuICAgICAgICBjb25zdCBvdXRwdXRzID0gdGhpcy5vdXRwdXRzO1xuXG4gICAgICAgIGlmIChsYWJlbHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0c1swXS5ldmFsdWF0ZShjdHgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmFsdWUgPSAoKHRoaXMuaW5wdXQuZXZhbHVhdGUoY3R4KTogYW55KTogbnVtYmVyKTtcbiAgICAgICAgaWYgKHZhbHVlIDw9IGxhYmVsc1swXSkge1xuICAgICAgICAgICAgcmV0dXJuIG91dHB1dHNbMF0uZXZhbHVhdGUoY3R4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0b3BDb3VudCA9IGxhYmVscy5sZW5ndGg7XG4gICAgICAgIGlmICh2YWx1ZSA+PSBsYWJlbHNbc3RvcENvdW50IC0gMV0pIHtcbiAgICAgICAgICAgIHJldHVybiBvdXRwdXRzW3N0b3BDb3VudCAtIDFdLmV2YWx1YXRlKGN0eCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbmRleCA9IGZpbmRTdG9wTGVzc1RoYW5PckVxdWFsVG8obGFiZWxzLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBvdXRwdXRzW2luZGV4XS5ldmFsdWF0ZShjdHgpO1xuICAgIH1cblxuICAgIGVhY2hDaGlsZChmbjogKF86IEV4cHJlc3Npb24pID0+IHZvaWQpIHtcbiAgICAgICAgZm4odGhpcy5pbnB1dCk7XG4gICAgICAgIGZvciAoY29uc3QgZXhwcmVzc2lvbiBvZiB0aGlzLm91dHB1dHMpIHtcbiAgICAgICAgICAgIGZuKGV4cHJlc3Npb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb3V0cHV0RGVmaW5lZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3V0cHV0cy5ldmVyeShvdXQgPT4gb3V0Lm91dHB1dERlZmluZWQoKSk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkID0gW1wic3RlcFwiLCB0aGlzLmlucHV0LnNlcmlhbGl6ZSgpXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxhYmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZC5wdXNoKHRoaXMubGFiZWxzW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlcmlhbGl6ZWQucHVzaCh0aGlzLm91dHB1dHNbaV0uc2VyaWFsaXplKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVkO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3RlcDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBDb2xvciBmcm9tICcuL2NvbG9yJztcblxuZXhwb3J0IGZ1bmN0aW9uIG51bWJlcihhOiBudW1iZXIsIGI6IG51bWJlciwgdDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIChhICogKDEgLSB0KSkgKyAoYiAqIHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29sb3IoZnJvbTogQ29sb3IsIHRvOiBDb2xvciwgdDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG5ldyBDb2xvcihcbiAgICAgICAgbnVtYmVyKGZyb20uciwgdG8uciwgdCksXG4gICAgICAgIG51bWJlcihmcm9tLmcsIHRvLmcsIHQpLFxuICAgICAgICBudW1iZXIoZnJvbS5iLCB0by5iLCB0KSxcbiAgICAgICAgbnVtYmVyKGZyb20uYSwgdG8uYSwgdClcbiAgICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXJyYXkoZnJvbTogQXJyYXk8bnVtYmVyPiwgdG86IEFycmF5PG51bWJlcj4sIHQ6IG51bWJlcik6IEFycmF5PG51bWJlcj4ge1xuICAgIHJldHVybiBmcm9tLm1hcCgoZCwgaSkgPT4ge1xuICAgICAgICByZXR1cm4gbnVtYmVyKGQsIHRvW2ldLCB0KTtcbiAgICB9KTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBDb2xvciBmcm9tICcuL2NvbG9yJztcblxuaW1wb3J0IHtudW1iZXIgYXMgaW50ZXJwb2xhdGVOdW1iZXJ9IGZyb20gJy4vaW50ZXJwb2xhdGUnO1xuXG50eXBlIExBQkNvbG9yID0ge1xuICAgIGw6IG51bWJlcixcbiAgICBhOiBudW1iZXIsXG4gICAgYjogbnVtYmVyLFxuICAgIGFscGhhOiBudW1iZXJcbn07XG5cbnR5cGUgSENMQ29sb3IgPSB7XG4gICAgaDogbnVtYmVyLFxuICAgIGM6IG51bWJlcixcbiAgICBsOiBudW1iZXIsXG4gICAgYWxwaGE6IG51bWJlclxufTtcblxuLy8gQ29uc3RhbnRzXG5jb25zdCBYbiA9IDAuOTUwNDcwLCAvLyBENjUgc3RhbmRhcmQgcmVmZXJlbnRcbiAgICBZbiA9IDEsXG4gICAgWm4gPSAxLjA4ODgzMCxcbiAgICB0MCA9IDQgLyAyOSxcbiAgICB0MSA9IDYgLyAyOSxcbiAgICB0MiA9IDMgKiB0MSAqIHQxLFxuICAgIHQzID0gdDEgKiB0MSAqIHQxLFxuICAgIGRlZzJyYWQgPSBNYXRoLlBJIC8gMTgwLFxuICAgIHJhZDJkZWcgPSAxODAgLyBNYXRoLlBJO1xuXG4vLyBVdGlsaXRpZXNcbmZ1bmN0aW9uIHh5ejJsYWIodDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHQgPiB0MyA/IE1hdGgucG93KHQsIDEgLyAzKSA6IHQgLyB0MiArIHQwO1xufVxuXG5mdW5jdGlvbiBsYWIyeHl6KHQ6IG51bWJlcikge1xuICAgIHJldHVybiB0ID4gdDEgPyB0ICogdCAqIHQgOiB0MiAqICh0IC0gdDApO1xufVxuXG5mdW5jdGlvbiB4eXoycmdiKHg6IG51bWJlcikge1xuICAgIHJldHVybiAyNTUgKiAoeCA8PSAwLjAwMzEzMDggPyAxMi45MiAqIHggOiAxLjA1NSAqIE1hdGgucG93KHgsIDEgLyAyLjQpIC0gMC4wNTUpO1xufVxuXG5mdW5jdGlvbiByZ2IyeHl6KHg6IG51bWJlcikge1xuICAgIHggLz0gMjU1O1xuICAgIHJldHVybiB4IDw9IDAuMDQwNDUgPyB4IC8gMTIuOTIgOiBNYXRoLnBvdygoeCArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xufVxuXG4vLyBMQUJcbmZ1bmN0aW9uIHJnYlRvTGFiKHJnYkNvbG9yOiBDb2xvcik6IExBQkNvbG9yIHtcbiAgICBjb25zdCBiID0gcmdiMnh5eihyZ2JDb2xvci5yKSxcbiAgICAgICAgYSA9IHJnYjJ4eXoocmdiQ29sb3IuZyksXG4gICAgICAgIGwgPSByZ2IyeHl6KHJnYkNvbG9yLmIpLFxuICAgICAgICB4ID0geHl6MmxhYigoMC40MTI0NTY0ICogYiArIDAuMzU3NTc2MSAqIGEgKyAwLjE4MDQzNzUgKiBsKSAvIFhuKSxcbiAgICAgICAgeSA9IHh5ejJsYWIoKDAuMjEyNjcyOSAqIGIgKyAwLjcxNTE1MjIgKiBhICsgMC4wNzIxNzUwICogbCkgLyBZbiksXG4gICAgICAgIHogPSB4eXoybGFiKCgwLjAxOTMzMzkgKiBiICsgMC4xMTkxOTIwICogYSArIDAuOTUwMzA0MSAqIGwpIC8gWm4pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgbDogMTE2ICogeSAtIDE2LFxuICAgICAgICBhOiA1MDAgKiAoeCAtIHkpLFxuICAgICAgICBiOiAyMDAgKiAoeSAtIHopLFxuICAgICAgICBhbHBoYTogcmdiQ29sb3IuYVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIGxhYlRvUmdiKGxhYkNvbG9yOiBMQUJDb2xvcik6IENvbG9yIHtcbiAgICBsZXQgeSA9IChsYWJDb2xvci5sICsgMTYpIC8gMTE2LFxuICAgICAgICB4ID0gaXNOYU4obGFiQ29sb3IuYSkgPyB5IDogeSArIGxhYkNvbG9yLmEgLyA1MDAsXG4gICAgICAgIHogPSBpc05hTihsYWJDb2xvci5iKSA/IHkgOiB5IC0gbGFiQ29sb3IuYiAvIDIwMDtcbiAgICB5ID0gWW4gKiBsYWIyeHl6KHkpO1xuICAgIHggPSBYbiAqIGxhYjJ4eXooeCk7XG4gICAgeiA9IFpuICogbGFiMnh5eih6KTtcbiAgICByZXR1cm4gbmV3IENvbG9yKFxuICAgICAgICB4eXoycmdiKDMuMjQwNDU0MiAqIHggLSAxLjUzNzEzODUgKiB5IC0gMC40OTg1MzE0ICogeiksIC8vIEQ2NSAtPiBzUkdCXG4gICAgICAgIHh5ejJyZ2IoLTAuOTY5MjY2MCAqIHggKyAxLjg3NjAxMDggKiB5ICsgMC4wNDE1NTYwICogeiksXG4gICAgICAgIHh5ejJyZ2IoMC4wNTU2NDM0ICogeCAtIDAuMjA0MDI1OSAqIHkgKyAxLjA1NzIyNTIgKiB6KSxcbiAgICAgICAgbGFiQ29sb3IuYWxwaGFcbiAgICApO1xufVxuXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZUxhYihmcm9tOiBMQUJDb2xvciwgdG86IExBQkNvbG9yLCB0OiBudW1iZXIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBsOiBpbnRlcnBvbGF0ZU51bWJlcihmcm9tLmwsIHRvLmwsIHQpLFxuICAgICAgICBhOiBpbnRlcnBvbGF0ZU51bWJlcihmcm9tLmEsIHRvLmEsIHQpLFxuICAgICAgICBiOiBpbnRlcnBvbGF0ZU51bWJlcihmcm9tLmIsIHRvLmIsIHQpLFxuICAgICAgICBhbHBoYTogaW50ZXJwb2xhdGVOdW1iZXIoZnJvbS5hbHBoYSwgdG8uYWxwaGEsIHQpXG4gICAgfTtcbn1cblxuLy8gSENMXG5mdW5jdGlvbiByZ2JUb0hjbChyZ2JDb2xvcjogQ29sb3IpOiBIQ0xDb2xvciB7XG4gICAgY29uc3Qge2wsIGEsIGJ9ID0gcmdiVG9MYWIocmdiQ29sb3IpO1xuICAgIGNvbnN0IGggPSBNYXRoLmF0YW4yKGIsIGEpICogcmFkMmRlZztcbiAgICByZXR1cm4ge1xuICAgICAgICBoOiBoIDwgMCA/IGggKyAzNjAgOiBoLFxuICAgICAgICBjOiBNYXRoLnNxcnQoYSAqIGEgKyBiICogYiksXG4gICAgICAgIGwsXG4gICAgICAgIGFscGhhOiByZ2JDb2xvci5hXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gaGNsVG9SZ2IoaGNsQ29sb3I6IEhDTENvbG9yKTogQ29sb3Ige1xuICAgIGNvbnN0IGggPSBoY2xDb2xvci5oICogZGVnMnJhZCxcbiAgICAgICAgYyA9IGhjbENvbG9yLmMsXG4gICAgICAgIGwgPSBoY2xDb2xvci5sO1xuICAgIHJldHVybiBsYWJUb1JnYih7XG4gICAgICAgIGwsXG4gICAgICAgIGE6IE1hdGguY29zKGgpICogYyxcbiAgICAgICAgYjogTWF0aC5zaW4oaCkgKiBjLFxuICAgICAgICBhbHBoYTogaGNsQ29sb3IuYWxwaGFcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gaW50ZXJwb2xhdGVIdWUoYTogbnVtYmVyLCBiOiBudW1iZXIsIHQ6IG51bWJlcikge1xuICAgIGNvbnN0IGQgPSBiIC0gYTtcbiAgICByZXR1cm4gYSArIHQgKiAoZCA+IDE4MCB8fCBkIDwgLTE4MCA/IGQgLSAzNjAgKiBNYXRoLnJvdW5kKGQgLyAzNjApIDogZCk7XG59XG5cbmZ1bmN0aW9uIGludGVycG9sYXRlSGNsKGZyb206IEhDTENvbG9yLCB0bzogSENMQ29sb3IsIHQ6IG51bWJlcikge1xuICAgIHJldHVybiB7XG4gICAgICAgIGg6IGludGVycG9sYXRlSHVlKGZyb20uaCwgdG8uaCwgdCksXG4gICAgICAgIGM6IGludGVycG9sYXRlTnVtYmVyKGZyb20uYywgdG8uYywgdCksXG4gICAgICAgIGw6IGludGVycG9sYXRlTnVtYmVyKGZyb20ubCwgdG8ubCwgdCksXG4gICAgICAgIGFscGhhOiBpbnRlcnBvbGF0ZU51bWJlcihmcm9tLmFscGhhLCB0by5hbHBoYSwgdClcbiAgICB9O1xufVxuXG5leHBvcnQgY29uc3QgbGFiID0ge1xuICAgIGZvcndhcmQ6IHJnYlRvTGFiLFxuICAgIHJldmVyc2U6IGxhYlRvUmdiLFxuICAgIGludGVycG9sYXRlOiBpbnRlcnBvbGF0ZUxhYlxufTtcblxuZXhwb3J0IGNvbnN0IGhjbCA9IHtcbiAgICBmb3J3YXJkOiByZ2JUb0hjbCxcbiAgICByZXZlcnNlOiBoY2xUb1JnYixcbiAgICBpbnRlcnBvbGF0ZTogaW50ZXJwb2xhdGVIY2xcbn07XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgVW5pdEJlemllciBmcm9tICdAbWFwYm94L3VuaXRiZXppZXInO1xuXG5pbXBvcnQgKiBhcyBpbnRlcnBvbGF0ZSBmcm9tICcuLi8uLi91dGlsL2ludGVycG9sYXRlJztcbmltcG9ydCB7dG9TdHJpbmcsIE51bWJlclR5cGUsIENvbG9yVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtmaW5kU3RvcExlc3NUaGFuT3JFcXVhbFRvfSBmcm9tICcuLi9zdG9wcyc7XG5pbXBvcnQge2hjbCwgbGFifSBmcm9tICcuLi8uLi91dGlsL2NvbG9yX3NwYWNlcyc7XG5cbmltcG9ydCB0eXBlIHtTdG9wc30gZnJvbSAnLi4vc3RvcHMnO1xuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgUGFyc2luZ0NvbnRleHQgZnJvbSAnLi4vcGFyc2luZ19jb250ZXh0JztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25Db250ZXh0IGZyb20gJy4uL2V2YWx1YXRpb25fY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBJbnRlcnBvbGF0aW9uVHlwZSA9XG4gICAgeyBuYW1lOiAnbGluZWFyJyB9IHxcbiAgICB7IG5hbWU6ICdleHBvbmVudGlhbCcsIGJhc2U6IG51bWJlciB9IHxcbiAgICB7IG5hbWU6ICdjdWJpYy1iZXppZXInLCBjb250cm9sUG9pbnRzOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSB9O1xuXG5jbGFzcyBJbnRlcnBvbGF0ZSBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG5cbiAgICBvcGVyYXRvcjogJ2ludGVycG9sYXRlJyB8ICdpbnRlcnBvbGF0ZS1oY2wnIHwgJ2ludGVycG9sYXRlLWxhYic7XG4gICAgaW50ZXJwb2xhdGlvbjogSW50ZXJwb2xhdGlvblR5cGU7XG4gICAgaW5wdXQ6IEV4cHJlc3Npb247XG4gICAgbGFiZWxzOiBBcnJheTxudW1iZXI+O1xuICAgIG91dHB1dHM6IEFycmF5PEV4cHJlc3Npb24+O1xuXG4gICAgY29uc3RydWN0b3IodHlwZTogVHlwZSwgb3BlcmF0b3I6ICdpbnRlcnBvbGF0ZScgfCAnaW50ZXJwb2xhdGUtaGNsJyB8ICdpbnRlcnBvbGF0ZS1sYWInLCBpbnRlcnBvbGF0aW9uOiBJbnRlcnBvbGF0aW9uVHlwZSwgaW5wdXQ6IEV4cHJlc3Npb24sIHN0b3BzOiBTdG9wcykge1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgICB0aGlzLm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICAgIHRoaXMuaW50ZXJwb2xhdGlvbiA9IGludGVycG9sYXRpb247XG4gICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcblxuICAgICAgICB0aGlzLmxhYmVscyA9IFtdO1xuICAgICAgICB0aGlzLm91dHB1dHMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBbbGFiZWwsIGV4cHJlc3Npb25dIG9mIHN0b3BzKSB7XG4gICAgICAgICAgICB0aGlzLmxhYmVscy5wdXNoKGxhYmVsKTtcbiAgICAgICAgICAgIHRoaXMub3V0cHV0cy5wdXNoKGV4cHJlc3Npb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGludGVycG9sYXRpb25GYWN0b3IoaW50ZXJwb2xhdGlvbjogSW50ZXJwb2xhdGlvblR5cGUsIGlucHV0OiBudW1iZXIsIGxvd2VyOiBudW1iZXIsIHVwcGVyOiBudW1iZXIpIHtcbiAgICAgICAgbGV0IHQgPSAwO1xuICAgICAgICBpZiAoaW50ZXJwb2xhdGlvbi5uYW1lID09PSAnZXhwb25lbnRpYWwnKSB7XG4gICAgICAgICAgICB0ID0gZXhwb25lbnRpYWxJbnRlcnBvbGF0aW9uKGlucHV0LCBpbnRlcnBvbGF0aW9uLmJhc2UsIGxvd2VyLCB1cHBlcik7XG4gICAgICAgIH0gZWxzZSBpZiAoaW50ZXJwb2xhdGlvbi5uYW1lID09PSAnbGluZWFyJykge1xuICAgICAgICAgICAgdCA9IGV4cG9uZW50aWFsSW50ZXJwb2xhdGlvbihpbnB1dCwgMSwgbG93ZXIsIHVwcGVyKTtcbiAgICAgICAgfSBlbHNlIGlmIChpbnRlcnBvbGF0aW9uLm5hbWUgPT09ICdjdWJpYy1iZXppZXInKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gaW50ZXJwb2xhdGlvbi5jb250cm9sUG9pbnRzO1xuICAgICAgICAgICAgY29uc3QgdWIgPSBuZXcgVW5pdEJlemllcihjWzBdLCBjWzFdLCBjWzJdLCBjWzNdKTtcbiAgICAgICAgICAgIHQgPSB1Yi5zb2x2ZShleHBvbmVudGlhbEludGVycG9sYXRpb24oaW5wdXQsIDEsIGxvd2VyLCB1cHBlcikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZShhcmdzOiAkUmVhZE9ubHlBcnJheTxtaXhlZD4sIGNvbnRleHQ6IFBhcnNpbmdDb250ZXh0KSB7XG4gICAgICAgIGxldCBbb3BlcmF0b3IsIGludGVycG9sYXRpb24sIGlucHV0LCAuLi5yZXN0XSA9IGFyZ3M7XG5cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGludGVycG9sYXRpb24pIHx8IGludGVycG9sYXRpb24ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgYW4gaW50ZXJwb2xhdGlvbiB0eXBlIGV4cHJlc3Npb24uYCwgMSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW50ZXJwb2xhdGlvblswXSA9PT0gJ2xpbmVhcicpIHtcbiAgICAgICAgICAgIGludGVycG9sYXRpb24gPSB7bmFtZTogJ2xpbmVhcid9O1xuICAgICAgICB9IGVsc2UgaWYgKGludGVycG9sYXRpb25bMF0gPT09ICdleHBvbmVudGlhbCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGJhc2UgPSBpbnRlcnBvbGF0aW9uWzFdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBiYXNlICE9PSAnbnVtYmVyJylcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwb25lbnRpYWwgaW50ZXJwb2xhdGlvbiByZXF1aXJlcyBhIG51bWVyaWMgYmFzZS5gLCAxLCAxKTtcbiAgICAgICAgICAgIGludGVycG9sYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2V4cG9uZW50aWFsJyxcbiAgICAgICAgICAgICAgICBiYXNlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGludGVycG9sYXRpb25bMF0gPT09ICdjdWJpYy1iZXppZXInKSB7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sUG9pbnRzID0gaW50ZXJwb2xhdGlvbi5zbGljZSgxKTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBjb250cm9sUG9pbnRzLmxlbmd0aCAhPT0gNCB8fFxuICAgICAgICAgICAgICAgIGNvbnRyb2xQb2ludHMuc29tZSh0ID0+IHR5cGVvZiB0ICE9PSAnbnVtYmVyJyB8fCB0IDwgMCB8fCB0ID4gMSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKCdDdWJpYyBiZXppZXIgaW50ZXJwb2xhdGlvbiByZXF1aXJlcyBmb3VyIG51bWVyaWMgYXJndW1lbnRzIHdpdGggdmFsdWVzIGJldHdlZW4gMCBhbmQgMS4nLCAxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW50ZXJwb2xhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnY3ViaWMtYmV6aWVyJyxcbiAgICAgICAgICAgICAgICBjb250cm9sUG9pbnRzOiAoY29udHJvbFBvaW50czogYW55KVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBVbmtub3duIGludGVycG9sYXRpb24gdHlwZSAke1N0cmluZyhpbnRlcnBvbGF0aW9uWzBdKX1gLCAxLCAwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCAtIDEgPCA0KSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgYXQgbGVhc3QgNCBhcmd1bWVudHMsIGJ1dCBmb3VuZCBvbmx5ICR7YXJncy5sZW5ndGggLSAxfS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgoYXJncy5sZW5ndGggLSAxKSAlIDIgIT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBhbiBldmVuIG51bWJlciBvZiBhcmd1bWVudHMuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpbnB1dCA9IGNvbnRleHQucGFyc2UoaW5wdXQsIDIsIE51bWJlclR5cGUpO1xuICAgICAgICBpZiAoIWlucHV0KSByZXR1cm4gbnVsbDtcblxuICAgICAgICBjb25zdCBzdG9wczogU3RvcHMgPSBbXTtcblxuICAgICAgICBsZXQgb3V0cHV0VHlwZTogVHlwZSA9IChudWxsOiBhbnkpO1xuICAgICAgICBpZiAob3BlcmF0b3IgPT09ICdpbnRlcnBvbGF0ZS1oY2wnIHx8IG9wZXJhdG9yID09PSAnaW50ZXJwb2xhdGUtbGFiJykge1xuICAgICAgICAgICAgb3V0cHV0VHlwZSA9IENvbG9yVHlwZTtcbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0LmV4cGVjdGVkVHlwZSAmJiBjb250ZXh0LmV4cGVjdGVkVHlwZS5raW5kICE9PSAndmFsdWUnKSB7XG4gICAgICAgICAgICBvdXRwdXRUeXBlID0gY29udGV4dC5leHBlY3RlZFR5cGU7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3QubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gcmVzdFtpXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcmVzdFtpICsgMV07XG5cbiAgICAgICAgICAgIGNvbnN0IGxhYmVsS2V5ID0gaSArIDM7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZUtleSA9IGkgKyA0O1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGxhYmVsICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKCdJbnB1dC9vdXRwdXQgcGFpcnMgZm9yIFwiaW50ZXJwb2xhdGVcIiBleHByZXNzaW9ucyBtdXN0IGJlIGRlZmluZWQgdXNpbmcgbGl0ZXJhbCBudW1lcmljIHZhbHVlcyAobm90IGNvbXB1dGVkIGV4cHJlc3Npb25zKSBmb3IgdGhlIGlucHV0IHZhbHVlcy4nLCBsYWJlbEtleSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdG9wcy5sZW5ndGggJiYgc3RvcHNbc3RvcHMubGVuZ3RoIC0gMV1bMF0gPj0gbGFiZWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcignSW5wdXQvb3V0cHV0IHBhaXJzIGZvciBcImludGVycG9sYXRlXCIgZXhwcmVzc2lvbnMgbXVzdCBiZSBhcnJhbmdlZCB3aXRoIGlucHV0IHZhbHVlcyBpbiBzdHJpY3RseSBhc2NlbmRpbmcgb3JkZXIuJywgbGFiZWxLZXkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBjb250ZXh0LnBhcnNlKHZhbHVlLCB2YWx1ZUtleSwgb3V0cHV0VHlwZSk7XG4gICAgICAgICAgICBpZiAoIXBhcnNlZCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBvdXRwdXRUeXBlID0gb3V0cHV0VHlwZSB8fCBwYXJzZWQudHlwZTtcbiAgICAgICAgICAgIHN0b3BzLnB1c2goW2xhYmVsLCBwYXJzZWRdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvdXRwdXRUeXBlLmtpbmQgIT09ICdudW1iZXInICYmXG4gICAgICAgICAgICBvdXRwdXRUeXBlLmtpbmQgIT09ICdjb2xvcicgJiZcbiAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgb3V0cHV0VHlwZS5raW5kID09PSAnYXJyYXknICYmXG4gICAgICAgICAgICAgICAgb3V0cHV0VHlwZS5pdGVtVHlwZS5raW5kID09PSAnbnVtYmVyJyAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBvdXRwdXRUeXBlLk4gPT09ICdudW1iZXInXG4gICAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYFR5cGUgJHt0b1N0cmluZyhvdXRwdXRUeXBlKX0gaXMgbm90IGludGVycG9sYXRhYmxlLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBJbnRlcnBvbGF0ZShvdXRwdXRUeXBlLCAob3BlcmF0b3I6IGFueSksIGludGVycG9sYXRpb24sIGlucHV0LCBzdG9wcyk7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoY3R4OiBFdmFsdWF0aW9uQ29udGV4dCkge1xuICAgICAgICBjb25zdCBsYWJlbHMgPSB0aGlzLmxhYmVscztcbiAgICAgICAgY29uc3Qgb3V0cHV0cyA9IHRoaXMub3V0cHV0cztcblxuICAgICAgICBpZiAobGFiZWxzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIG91dHB1dHNbMF0uZXZhbHVhdGUoY3R4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gKCh0aGlzLmlucHV0LmV2YWx1YXRlKGN0eCk6IGFueSk6IG51bWJlcik7XG4gICAgICAgIGlmICh2YWx1ZSA8PSBsYWJlbHNbMF0pIHtcbiAgICAgICAgICAgIHJldHVybiBvdXRwdXRzWzBdLmV2YWx1YXRlKGN0eCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdG9wQ291bnQgPSBsYWJlbHMubGVuZ3RoO1xuICAgICAgICBpZiAodmFsdWUgPj0gbGFiZWxzW3N0b3BDb3VudCAtIDFdKSB7XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0c1tzdG9wQ291bnQgLSAxXS5ldmFsdWF0ZShjdHgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5kZXggPSBmaW5kU3RvcExlc3NUaGFuT3JFcXVhbFRvKGxhYmVscywgdmFsdWUpO1xuICAgICAgICBjb25zdCBsb3dlciA9IGxhYmVsc1tpbmRleF07XG4gICAgICAgIGNvbnN0IHVwcGVyID0gbGFiZWxzW2luZGV4ICsgMV07XG4gICAgICAgIGNvbnN0IHQgPSBJbnRlcnBvbGF0ZS5pbnRlcnBvbGF0aW9uRmFjdG9yKHRoaXMuaW50ZXJwb2xhdGlvbiwgdmFsdWUsIGxvd2VyLCB1cHBlcik7XG5cbiAgICAgICAgY29uc3Qgb3V0cHV0TG93ZXIgPSBvdXRwdXRzW2luZGV4XS5ldmFsdWF0ZShjdHgpO1xuICAgICAgICBjb25zdCBvdXRwdXRVcHBlciA9IG91dHB1dHNbaW5kZXggKyAxXS5ldmFsdWF0ZShjdHgpO1xuXG4gICAgICAgIGlmICh0aGlzLm9wZXJhdG9yID09PSAnaW50ZXJwb2xhdGUnKSB7XG4gICAgICAgICAgICByZXR1cm4gKGludGVycG9sYXRlW3RoaXMudHlwZS5raW5kLnRvTG93ZXJDYXNlKCldOiBhbnkpKG91dHB1dExvd2VyLCBvdXRwdXRVcHBlciwgdCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW1wb3J0L25hbWVzcGFjZVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMub3BlcmF0b3IgPT09ICdpbnRlcnBvbGF0ZS1oY2wnKSB7XG4gICAgICAgICAgICByZXR1cm4gaGNsLnJldmVyc2UoaGNsLmludGVycG9sYXRlKGhjbC5mb3J3YXJkKG91dHB1dExvd2VyKSwgaGNsLmZvcndhcmQob3V0cHV0VXBwZXIpLCB0KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbGFiLnJldmVyc2UobGFiLmludGVycG9sYXRlKGxhYi5mb3J3YXJkKG91dHB1dExvd2VyKSwgbGFiLmZvcndhcmQob3V0cHV0VXBwZXIpLCB0KSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlYWNoQ2hpbGQoZm46IChfOiBFeHByZXNzaW9uKSA9PiB2b2lkKSB7XG4gICAgICAgIGZuKHRoaXMuaW5wdXQpO1xuICAgICAgICBmb3IgKGNvbnN0IGV4cHJlc3Npb24gb2YgdGhpcy5vdXRwdXRzKSB7XG4gICAgICAgICAgICBmbihleHByZXNzaW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG91dHB1dERlZmluZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm91dHB1dHMuZXZlcnkob3V0ID0+IG91dC5vdXRwdXREZWZpbmVkKCkpO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpOiBBcnJheTxtaXhlZD4ge1xuICAgICAgICBsZXQgaW50ZXJwb2xhdGlvbjtcbiAgICAgICAgaWYgKHRoaXMuaW50ZXJwb2xhdGlvbi5uYW1lID09PSAnbGluZWFyJykge1xuICAgICAgICAgICAgaW50ZXJwb2xhdGlvbiA9IFtcImxpbmVhclwiXTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmludGVycG9sYXRpb24ubmFtZSA9PT0gJ2V4cG9uZW50aWFsJykge1xuICAgICAgICAgICAgaWYgICh0aGlzLmludGVycG9sYXRpb24uYmFzZSA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGludGVycG9sYXRpb24gPSBbXCJsaW5lYXJcIl07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGludGVycG9sYXRpb24gPSBbXCJleHBvbmVudGlhbFwiLCB0aGlzLmludGVycG9sYXRpb24uYmFzZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnRlcnBvbGF0aW9uID0gW1wiY3ViaWMtYmV6aWVyXCIgXS5jb25jYXQodGhpcy5pbnRlcnBvbGF0aW9uLmNvbnRyb2xQb2ludHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IFt0aGlzLm9wZXJhdG9yLCBpbnRlcnBvbGF0aW9uLCB0aGlzLmlucHV0LnNlcmlhbGl6ZSgpXTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGFiZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzZXJpYWxpemVkLnB1c2goXG4gICAgICAgICAgICAgICAgdGhpcy5sYWJlbHNbaV0sXG4gICAgICAgICAgICAgICAgdGhpcy5vdXRwdXRzW2ldLnNlcmlhbGl6ZSgpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVkO1xuICAgIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcmF0aW8gdGhhdCBjYW4gYmUgdXNlZCB0byBpbnRlcnBvbGF0ZSBiZXR3ZWVuIGV4cG9uZW50aWFsIGZ1bmN0aW9uXG4gKiBzdG9wcy5cbiAqIEhvdyBpdCB3b3JrczogVHdvIGNvbnNlY3V0aXZlIHN0b3AgdmFsdWVzIGRlZmluZSBhIChzY2FsZWQgYW5kIHNoaWZ0ZWQpIGV4cG9uZW50aWFsIGZ1bmN0aW9uIGBmKHgpID0gYSAqIGJhc2VeeCArIGJgLCB3aGVyZSBgYmFzZWAgaXMgdGhlIHVzZXItc3BlY2lmaWVkIGJhc2UsXG4gKiBhbmQgYGFgIGFuZCBgYmAgYXJlIGNvbnN0YW50cyBhZmZvcmRpbmcgc3VmZmljaWVudCBkZWdyZWVzIG9mIGZyZWVkb20gdG8gZml0XG4gKiB0aGUgZnVuY3Rpb24gdG8gdGhlIGdpdmVuIHN0b3BzLlxuICpcbiAqIEhlcmUncyBhIGJpdCBvZiBhbGdlYnJhIHRoYXQgbGV0cyB1cyBjb21wdXRlIGBmKHgpYCBkaXJlY3RseSBmcm9tIHRoZSBzdG9wXG4gKiB2YWx1ZXMgd2l0aG91dCBleHBsaWNpdGx5IHNvbHZpbmcgZm9yIGBhYCBhbmQgYGJgOlxuICpcbiAqIEZpcnN0IHN0b3AgdmFsdWU6IGBmKHgwKSA9IHkwID0gYSAqIGJhc2VeeDAgKyBiYFxuICogU2Vjb25kIHN0b3AgdmFsdWU6IGBmKHgxKSA9IHkxID0gYSAqIGJhc2VeeDEgKyBiYFxuICogPT4gYHkxIC0geTAgPSBhKGJhc2VeeDEgLSBiYXNlXngwKWBcbiAqID0+IGBhID0gKHkxIC0geTApLyhiYXNlXngxIC0gYmFzZV54MClgXG4gKlxuICogRGVzaXJlZCB2YWx1ZTogYGYoeCkgPSB5ID0gYSAqIGJhc2VeeCArIGJgXG4gKiA9PiBgZih4KSA9IHkwICsgYSAqIChiYXNlXnggLSBiYXNlXngwKWBcbiAqXG4gKiBGcm9tIHRoZSBhYm92ZSwgd2UgY2FuIHJlcGxhY2UgdGhlIGBhYCBpbiBgYSAqIChiYXNlXnggLSBiYXNlXngwKWAgYW5kIGRvIGFcbiAqIGxpdHRsZSBhbGdlYnJhOlxuICogYGBgXG4gKiBhICogKGJhc2VeeCAtIGJhc2VeeDApID0gKHkxIC0geTApLyhiYXNlXngxIC0gYmFzZV54MCkgKiAoYmFzZV54IC0gYmFzZV54MClcbiAqICAgICAgICAgICAgICAgICAgICAgPSAoeTEgLSB5MCkgKiAoYmFzZV54IC0gYmFzZV54MCkgLyAoYmFzZV54MSAtIGJhc2VeeDApXG4gKiBgYGBcbiAqXG4gKiBJZiB3ZSBsZXQgYChiYXNlXnggLSBiYXNlXngwKSAvIChiYXNlXngxIGJhc2VeeDApYCwgdGhlbiB3ZSBoYXZlXG4gKiBgZih4KSA9IHkwICsgKHkxIC0geTApICogcmF0aW9gLiAgSW4gb3RoZXIgd29yZHMsIGByYXRpb2AgbWF5IGJlIHRyZWF0ZWQgYXNcbiAqIGFuIGludGVycG9sYXRpb24gZmFjdG9yIGJldHdlZW4gdGhlIHR3byBzdG9wcycgb3V0cHV0IHZhbHVlcy5cbiAqXG4gKiAoTm90ZTogYSBzbGlnaHRseSBkaWZmZXJlbnQgZm9ybSBmb3IgYHJhdGlvYCxcbiAqIGAoYmFzZV4oeC14MCkgLSAxKSAvIChiYXNlXih4MS14MCkgLSAxKSBgLCBpcyBlcXVpdmFsZW50LCBidXQgcmVxdWlyZXMgZmV3ZXJcbiAqIGV4cGVuc2l2ZSBgTWF0aC5wb3coKWAgb3BlcmF0aW9ucy4pXG4gKlxuICogQHByaXZhdGVcbiovXG5mdW5jdGlvbiBleHBvbmVudGlhbEludGVycG9sYXRpb24oaW5wdXQsIGJhc2UsIGxvd2VyVmFsdWUsIHVwcGVyVmFsdWUpIHtcbiAgICBjb25zdCBkaWZmZXJlbmNlID0gdXBwZXJWYWx1ZSAtIGxvd2VyVmFsdWU7XG4gICAgY29uc3QgcHJvZ3Jlc3MgPSBpbnB1dCAtIGxvd2VyVmFsdWU7XG5cbiAgICBpZiAoZGlmZmVyZW5jZSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9IGVsc2UgaWYgKGJhc2UgPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHByb2dyZXNzIC8gZGlmZmVyZW5jZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gKE1hdGgucG93KGJhc2UsIHByb2dyZXNzKSAtIDEpIC8gKE1hdGgucG93KGJhc2UsIGRpZmZlcmVuY2UpIC0gMSk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBJbnRlcnBvbGF0ZTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHtjaGVja1N1YnR5cGUsIFZhbHVlVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IFJlc29sdmVkSW1hZ2UgZnJvbSAnLi4vdHlwZXMvcmVzb2x2ZWRfaW1hZ2UnO1xuXG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbmNsYXNzIENvYWxlc2NlIGltcGxlbWVudHMgRXhwcmVzc2lvbiB7XG4gICAgdHlwZTogVHlwZTtcbiAgICBhcmdzOiBBcnJheTxFeHByZXNzaW9uPjtcblxuICAgIGNvbnN0cnVjdG9yKHR5cGU6IFR5cGUsIGFyZ3M6IEFycmF5PEV4cHJlc3Npb24+KSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgIHRoaXMuYXJncyA9IGFyZ3M7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoXCJFeHBlY3RlY3RlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBvdXRwdXRUeXBlOiBUeXBlID0gKG51bGw6IGFueSk7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkVHlwZSA9IGNvbnRleHQuZXhwZWN0ZWRUeXBlO1xuICAgICAgICBpZiAoZXhwZWN0ZWRUeXBlICYmIGV4cGVjdGVkVHlwZS5raW5kICE9PSAndmFsdWUnKSB7XG4gICAgICAgICAgICBvdXRwdXRUeXBlID0gZXhwZWN0ZWRUeXBlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcnNlZEFyZ3MgPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGFyZyBvZiBhcmdzLnNsaWNlKDEpKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBjb250ZXh0LnBhcnNlKGFyZywgMSArIHBhcnNlZEFyZ3MubGVuZ3RoLCBvdXRwdXRUeXBlLCB1bmRlZmluZWQsIHt0eXBlQW5ub3RhdGlvbjogJ29taXQnfSk7XG4gICAgICAgICAgICBpZiAoIXBhcnNlZCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBvdXRwdXRUeXBlID0gb3V0cHV0VHlwZSB8fCBwYXJzZWQudHlwZTtcbiAgICAgICAgICAgIHBhcnNlZEFyZ3MucHVzaChwYXJzZWQpO1xuICAgICAgICB9XG4gICAgICAgIGFzc2VydChvdXRwdXRUeXBlKTtcblxuICAgICAgICAvLyBBYm92ZSwgd2UgcGFyc2UgYXJndW1lbnRzIHdpdGhvdXQgaW5mZXJyZWQgdHlwZSBhbm5vdGF0aW9uIHNvIHRoYXRcbiAgICAgICAgLy8gdGhleSBkb24ndCBwcm9kdWNlIGEgcnVudGltZSBlcnJvciBmb3IgYG51bGxgIGlucHV0LCB3aGljaCB3b3VsZFxuICAgICAgICAvLyBwcmVlbXB0IHRoZSBkZXNpcmVkIG51bGwtY29hbGVzY2luZyBiZWhhdmlvci5cbiAgICAgICAgLy8gVGh1cywgaWYgYW55IG9mIG91ciBhcmd1bWVudHMgd291bGQgaGF2ZSBuZWVkZWQgYW4gYW5ub3RhdGlvbiwgd2VcbiAgICAgICAgLy8gbmVlZCB0byB3cmFwIHRoZSBlbmNsb3NpbmcgY29hbGVzY2UgZXhwcmVzc2lvbiB3aXRoIGl0IGluc3RlYWQuXG4gICAgICAgIGNvbnN0IG5lZWRzQW5ub3RhdGlvbiA9IGV4cGVjdGVkVHlwZSAmJlxuICAgICAgICAgICAgcGFyc2VkQXJncy5zb21lKGFyZyA9PiBjaGVja1N1YnR5cGUoZXhwZWN0ZWRUeXBlLCBhcmcudHlwZSkpO1xuXG4gICAgICAgIHJldHVybiBuZWVkc0Fubm90YXRpb24gP1xuICAgICAgICAgICAgbmV3IENvYWxlc2NlKFZhbHVlVHlwZSwgcGFyc2VkQXJncykgOlxuICAgICAgICAgICAgbmV3IENvYWxlc2NlKChvdXRwdXRUeXBlOiBhbnkpLCBwYXJzZWRBcmdzKTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBudWxsO1xuICAgICAgICBsZXQgYXJnQ291bnQgPSAwO1xuICAgICAgICBsZXQgcmVxdWVzdGVkSW1hZ2VOYW1lO1xuICAgICAgICBmb3IgKGNvbnN0IGFyZyBvZiB0aGlzLmFyZ3MpIHtcbiAgICAgICAgICAgIGFyZ0NvdW50Kys7XG4gICAgICAgICAgICByZXN1bHQgPSBhcmcuZXZhbHVhdGUoY3R4KTtcbiAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgZmlyc3QgcmVxdWVzdGVkIGltYWdlIGluIGEgY29hbGVzY2Ugc3RhdGVtZW50XG4gICAgICAgICAgICAvLyBpZiBjb2FsZXNjZSBjYW4ndCBmaW5kIGEgdmFsaWQgaW1hZ2UsIHdlIHJldHVybiB0aGUgZmlyc3QgaW1hZ2UgbmFtZSBzbyBzdHlsZWltYWdlbWlzc2luZyBjYW4gZmlyZVxuICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQgaW5zdGFuY2VvZiBSZXNvbHZlZEltYWdlICYmICFyZXN1bHQuYXZhaWxhYmxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXF1ZXN0ZWRJbWFnZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGVkSW1hZ2VOYW1lID0gcmVzdWx0Lm5hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ0NvdW50ID09PSB0aGlzLmFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlcXVlc3RlZEltYWdlTmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IG51bGwpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoXzogRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLmFyZ3MuZm9yRWFjaChmbik7XG4gICAgfVxuXG4gICAgb3V0cHV0RGVmaW5lZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXJncy5ldmVyeShhcmcgPT4gYXJnLm91dHB1dERlZmluZWQoKSk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkID0gW1wiY29hbGVzY2VcIl07XG4gICAgICAgIHRoaXMuZWFjaENoaWxkKGNoaWxkID0+IHsgc2VyaWFsaXplZC5wdXNoKGNoaWxkLnNlcmlhbGl6ZSgpKTsgfSk7XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVkO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29hbGVzY2U7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgdHlwZSB7VHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgUGFyc2luZ0NvbnRleHQgZnJvbSAnLi4vcGFyc2luZ19jb250ZXh0JztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25Db250ZXh0ICBmcm9tICcuLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuXG5jbGFzcyBMZXQgaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuICAgIGJpbmRpbmdzOiBBcnJheTxbc3RyaW5nLCBFeHByZXNzaW9uXT47XG4gICAgcmVzdWx0OiBFeHByZXNzaW9uO1xuXG4gICAgY29uc3RydWN0b3IoYmluZGluZ3M6IEFycmF5PFtzdHJpbmcsIEV4cHJlc3Npb25dPiwgcmVzdWx0OiBFeHByZXNzaW9uKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHJlc3VsdC50eXBlO1xuICAgICAgICB0aGlzLmJpbmRpbmdzID0gW10uY29uY2F0KGJpbmRpbmdzKTtcbiAgICAgICAgdGhpcy5yZXN1bHQgPSByZXN1bHQ7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoY3R4OiBFdmFsdWF0aW9uQ29udGV4dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXN1bHQuZXZhbHVhdGUoY3R4KTtcbiAgICB9XG5cbiAgICBlYWNoQ2hpbGQoZm46IChfOiBFeHByZXNzaW9uKSA9PiB2b2lkKSB7XG4gICAgICAgIGZvciAoY29uc3QgYmluZGluZyBvZiB0aGlzLmJpbmRpbmdzKSB7XG4gICAgICAgICAgICBmbihiaW5kaW5nWzFdKTtcbiAgICAgICAgfVxuICAgICAgICBmbih0aGlzLnJlc3VsdCk7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgNClcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBhdCBsZWFzdCAzIGFyZ3VtZW50cywgYnV0IGZvdW5kICR7YXJncy5sZW5ndGggLSAxfSBpbnN0ZWFkLmApO1xuXG4gICAgICAgIGNvbnN0IGJpbmRpbmdzOiBBcnJheTxbc3RyaW5nLCBFeHByZXNzaW9uXT4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aCAtIDE7IGkgKz0gMikge1xuICAgICAgICAgICAgY29uc3QgbmFtZSA9IGFyZ3NbaV07XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgc3RyaW5nLCBidXQgZm91bmQgJHt0eXBlb2YgbmFtZX0gaW5zdGVhZC5gLCBpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKC9bXmEtekEtWjAtOV9dLy50ZXN0KG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYFZhcmlhYmxlIG5hbWVzIG11c3QgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIG9yICdfJy5gLCBpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjb250ZXh0LnBhcnNlKGFyZ3NbaSArIDFdLCBpICsgMSk7XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcblxuICAgICAgICAgICAgYmluZGluZ3MucHVzaChbbmFtZSwgdmFsdWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQucGFyc2UoYXJnc1thcmdzLmxlbmd0aCAtIDFdLCBhcmdzLmxlbmd0aCAtIDEsIGNvbnRleHQuZXhwZWN0ZWRUeXBlLCBiaW5kaW5ncyk7XG4gICAgICAgIGlmICghcmVzdWx0KSByZXR1cm4gbnVsbDtcblxuICAgICAgICByZXR1cm4gbmV3IExldChiaW5kaW5ncywgcmVzdWx0KTtcbiAgICB9XG5cbiAgICBvdXRwdXREZWZpbmVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXN1bHQub3V0cHV0RGVmaW5lZCgpO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IFtcImxldFwiXTtcbiAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgZXhwcl0gb2YgdGhpcy5iaW5kaW5ncykge1xuICAgICAgICAgICAgc2VyaWFsaXplZC5wdXNoKG5hbWUsIGV4cHIuc2VyaWFsaXplKCkpO1xuICAgICAgICB9XG4gICAgICAgIHNlcmlhbGl6ZWQucHVzaCh0aGlzLnJlc3VsdC5zZXJpYWxpemUoKSk7XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVkO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGV0O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHthcnJheSwgVmFsdWVUeXBlLCBOdW1iZXJUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCBSdW50aW1lRXJyb3IgZnJvbSAnLi4vcnVudGltZV9lcnJvcic7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uQ29udGV4dCBmcm9tICcuLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1R5cGUsIEFycmF5VHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUge1ZhbHVlfSBmcm9tICcuLi92YWx1ZXMnO1xuXG5jbGFzcyBBdCBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG4gICAgaW5kZXg6IEV4cHJlc3Npb247XG4gICAgaW5wdXQ6IEV4cHJlc3Npb247XG5cbiAgICBjb25zdHJ1Y3Rvcih0eXBlOiBUeXBlLCBpbmRleDogRXhwcmVzc2lvbiwgaW5wdXQ6IEV4cHJlc3Npb24pIHtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgdGhpcy5pbmRleCA9IGluZGV4O1xuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlKGFyZ3M6ICRSZWFkT25seUFycmF5PG1peGVkPiwgY29udGV4dDogUGFyc2luZ0NvbnRleHQpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoICE9PSAzKVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIDIgYXJndW1lbnRzLCBidXQgZm91bmQgJHthcmdzLmxlbmd0aCAtIDF9IGluc3RlYWQuYCk7XG5cbiAgICAgICAgY29uc3QgaW5kZXggPSBjb250ZXh0LnBhcnNlKGFyZ3NbMV0sIDEsIE51bWJlclR5cGUpO1xuICAgICAgICBjb25zdCBpbnB1dCA9IGNvbnRleHQucGFyc2UoYXJnc1syXSwgMiwgYXJyYXkoY29udGV4dC5leHBlY3RlZFR5cGUgfHwgVmFsdWVUeXBlKSk7XG5cbiAgICAgICAgaWYgKCFpbmRleCB8fCAhaW5wdXQpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNvbnN0IHQ6IEFycmF5VHlwZSA9IChpbnB1dC50eXBlOiBhbnkpO1xuICAgICAgICByZXR1cm4gbmV3IEF0KHQuaXRlbVR5cGUsIGluZGV4LCBpbnB1dCk7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoY3R4OiBFdmFsdWF0aW9uQ29udGV4dCkge1xuICAgICAgICBjb25zdCBpbmRleCA9ICgodGhpcy5pbmRleC5ldmFsdWF0ZShjdHgpOiBhbnkpOiBudW1iZXIpO1xuICAgICAgICBjb25zdCBhcnJheSA9ICgodGhpcy5pbnB1dC5ldmFsdWF0ZShjdHgpOiBhbnkpOiBBcnJheTxWYWx1ZT4pO1xuXG4gICAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoYEFycmF5IGluZGV4IG91dCBvZiBib3VuZHM6ICR7aW5kZXh9IDwgMC5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbmRleCA+PSBhcnJheS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoYEFycmF5IGluZGV4IG91dCBvZiBib3VuZHM6ICR7aW5kZXh9ID4gJHthcnJheS5sZW5ndGggLSAxfS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbmRleCAhPT0gTWF0aC5mbG9vcihpbmRleCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoYEFycmF5IGluZGV4IG11c3QgYmUgYW4gaW50ZWdlciwgYnV0IGZvdW5kICR7aW5kZXh9IGluc3RlYWQuYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXJyYXlbaW5kZXhdO1xuICAgIH1cblxuICAgIGVhY2hDaGlsZChmbjogKF86IEV4cHJlc3Npb24pID0+IHZvaWQpIHtcbiAgICAgICAgZm4odGhpcy5pbmRleCk7XG4gICAgICAgIGZuKHRoaXMuaW5wdXQpO1xuICAgIH1cblxuICAgIG91dHB1dERlZmluZWQoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIHJldHVybiBbXCJhdFwiLCB0aGlzLmluZGV4LnNlcmlhbGl6ZSgpLCB0aGlzLmlucHV0LnNlcmlhbGl6ZSgpXTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEF0O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtCb29sZWFuVHlwZSwgU3RyaW5nVHlwZSwgVmFsdWVUeXBlLCBOdWxsVHlwZSwgdG9TdHJpbmcsIE51bWJlclR5cGUsIGlzVmFsaWRUeXBlLCBpc1ZhbGlkTmF0aXZlVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IFJ1bnRpbWVFcnJvciBmcm9tICcuLi9ydW50aW1lX2Vycm9yJztcbmltcG9ydCB7dHlwZU9mfSBmcm9tICcuLi92YWx1ZXMnO1xuXG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbmNsYXNzIEluIGltcGxlbWVudHMgRXhwcmVzc2lvbiB7XG4gICAgdHlwZTogVHlwZTtcbiAgICBuZWVkbGU6IEV4cHJlc3Npb247XG4gICAgaGF5c3RhY2s6IEV4cHJlc3Npb247XG5cbiAgICBjb25zdHJ1Y3RvcihuZWVkbGU6IEV4cHJlc3Npb24sIGhheXN0YWNrOiBFeHByZXNzaW9uKSB7XG4gICAgICAgIHRoaXMudHlwZSA9IEJvb2xlYW5UeXBlO1xuICAgICAgICB0aGlzLm5lZWRsZSA9IG5lZWRsZTtcbiAgICAgICAgdGhpcy5oYXlzdGFjayA9IGhheXN0YWNrO1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZShhcmdzOiAkUmVhZE9ubHlBcnJheTxtaXhlZD4sIGNvbnRleHQ6IFBhcnNpbmdDb250ZXh0KSB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMykge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIDIgYXJndW1lbnRzLCBidXQgZm91bmQgJHthcmdzLmxlbmd0aCAtIDF9IGluc3RlYWQuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZWVkbGUgPSBjb250ZXh0LnBhcnNlKGFyZ3NbMV0sIDEsIFZhbHVlVHlwZSk7XG5cbiAgICAgICAgY29uc3QgaGF5c3RhY2sgPSBjb250ZXh0LnBhcnNlKGFyZ3NbMl0sIDIsIFZhbHVlVHlwZSk7XG5cbiAgICAgICAgaWYgKCFuZWVkbGUgfHwgIWhheXN0YWNrKSByZXR1cm4gbnVsbDtcblxuICAgICAgICBpZiAoIWlzVmFsaWRUeXBlKG5lZWRsZS50eXBlLCBbQm9vbGVhblR5cGUsIFN0cmluZ1R5cGUsIE51bWJlclR5cGUsIE51bGxUeXBlLCBWYWx1ZVR5cGVdKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIGZpcnN0IGFyZ3VtZW50IHRvIGJlIG9mIHR5cGUgYm9vbGVhbiwgc3RyaW5nLCBudW1iZXIgb3IgbnVsbCwgYnV0IGZvdW5kICR7dG9TdHJpbmcobmVlZGxlLnR5cGUpfSBpbnN0ZWFkYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IEluKG5lZWRsZSwgaGF5c3RhY2spO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGN0eDogRXZhbHVhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgY29uc3QgbmVlZGxlID0gKHRoaXMubmVlZGxlLmV2YWx1YXRlKGN0eCk6IGFueSk7XG4gICAgICAgIGNvbnN0IGhheXN0YWNrID0gKHRoaXMuaGF5c3RhY2suZXZhbHVhdGUoY3R4KTogYW55KTtcblxuICAgICAgICBpZiAoIWhheXN0YWNrKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgaWYgKCFpc1ZhbGlkTmF0aXZlVHlwZShuZWVkbGUsIFsnYm9vbGVhbicsICdzdHJpbmcnLCAnbnVtYmVyJywgJ251bGwnXSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoYEV4cGVjdGVkIGZpcnN0IGFyZ3VtZW50IHRvIGJlIG9mIHR5cGUgYm9vbGVhbiwgc3RyaW5nLCBudW1iZXIgb3IgbnVsbCwgYnV0IGZvdW5kICR7dG9TdHJpbmcodHlwZU9mKG5lZWRsZSkpfSBpbnN0ZWFkLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc1ZhbGlkTmF0aXZlVHlwZShoYXlzdGFjaywgWydzdHJpbmcnLCAnYXJyYXknXSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoYEV4cGVjdGVkIHNlY29uZCBhcmd1bWVudCB0byBiZSBvZiB0eXBlIGFycmF5IG9yIHN0cmluZywgYnV0IGZvdW5kICR7dG9TdHJpbmcodHlwZU9mKGhheXN0YWNrKSl9IGluc3RlYWQuYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaGF5c3RhY2suaW5kZXhPZihuZWVkbGUpID49IDA7XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoXzogRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICBmbih0aGlzLm5lZWRsZSk7XG4gICAgICAgIGZuKHRoaXMuaGF5c3RhY2spO1xuICAgIH1cblxuICAgIG91dHB1dERlZmluZWQoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgcmV0dXJuIFtcImluXCIsIHRoaXMubmVlZGxlLnNlcmlhbGl6ZSgpLCB0aGlzLmhheXN0YWNrLnNlcmlhbGl6ZSgpXTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEluO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtCb29sZWFuVHlwZSwgU3RyaW5nVHlwZSwgVmFsdWVUeXBlLCBOdWxsVHlwZSwgdG9TdHJpbmcsIE51bWJlclR5cGUsIGlzVmFsaWRUeXBlLCBpc1ZhbGlkTmF0aXZlVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IFJ1bnRpbWVFcnJvciBmcm9tICcuLi9ydW50aW1lX2Vycm9yJztcbmltcG9ydCB7dHlwZU9mfSBmcm9tICcuLi92YWx1ZXMnO1xuXG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbmNsYXNzIEluZGV4T2YgaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuICAgIG5lZWRsZTogRXhwcmVzc2lvbjtcbiAgICBoYXlzdGFjazogRXhwcmVzc2lvbjtcbiAgICBmcm9tSW5kZXg6ID9FeHByZXNzaW9uO1xuXG4gICAgY29uc3RydWN0b3IobmVlZGxlOiBFeHByZXNzaW9uLCBoYXlzdGFjazogRXhwcmVzc2lvbiwgZnJvbUluZGV4PzogRXhwcmVzc2lvbikge1xuICAgICAgICB0aGlzLnR5cGUgPSBOdW1iZXJUeXBlO1xuICAgICAgICB0aGlzLm5lZWRsZSA9IG5lZWRsZTtcbiAgICAgICAgdGhpcy5oYXlzdGFjayA9IGhheXN0YWNrO1xuICAgICAgICB0aGlzLmZyb21JbmRleCA9IGZyb21JbmRleDtcbiAgICB9XG5cbiAgICBzdGF0aWMgcGFyc2UoYXJnczogJFJlYWRPbmx5QXJyYXk8bWl4ZWQ+LCBjb250ZXh0OiBQYXJzaW5nQ29udGV4dCkge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPD0gMiB8fCAgYXJncy5sZW5ndGggPj0gNSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIDMgb3IgNCBhcmd1bWVudHMsIGJ1dCBmb3VuZCAke2FyZ3MubGVuZ3RoIC0gMX0gaW5zdGVhZC5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5lZWRsZSA9IGNvbnRleHQucGFyc2UoYXJnc1sxXSwgMSwgVmFsdWVUeXBlKTtcblxuICAgICAgICBjb25zdCBoYXlzdGFjayA9IGNvbnRleHQucGFyc2UoYXJnc1syXSwgMiwgVmFsdWVUeXBlKTtcblxuICAgICAgICBpZiAoIW5lZWRsZSB8fCAhaGF5c3RhY2spIHJldHVybiBudWxsO1xuICAgICAgICBpZiAoIWlzVmFsaWRUeXBlKG5lZWRsZS50eXBlLCBbQm9vbGVhblR5cGUsIFN0cmluZ1R5cGUsIE51bWJlclR5cGUsIE51bGxUeXBlLCBWYWx1ZVR5cGVdKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIGZpcnN0IGFyZ3VtZW50IHRvIGJlIG9mIHR5cGUgYm9vbGVhbiwgc3RyaW5nLCBudW1iZXIgb3IgbnVsbCwgYnV0IGZvdW5kICR7dG9TdHJpbmcobmVlZGxlLnR5cGUpfSBpbnN0ZWFkYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICAgIGNvbnN0IGZyb21JbmRleCA9IGNvbnRleHQucGFyc2UoYXJnc1szXSwgMywgTnVtYmVyVHlwZSk7XG4gICAgICAgICAgICBpZiAoIWZyb21JbmRleCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEluZGV4T2YobmVlZGxlLCBoYXlzdGFjaywgZnJvbUluZGV4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgSW5kZXhPZihuZWVkbGUsIGhheXN0YWNrKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV2YWx1YXRlKGN0eDogRXZhbHVhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgY29uc3QgbmVlZGxlID0gKHRoaXMubmVlZGxlLmV2YWx1YXRlKGN0eCk6IGFueSk7XG4gICAgICAgIGNvbnN0IGhheXN0YWNrID0gKHRoaXMuaGF5c3RhY2suZXZhbHVhdGUoY3R4KTogYW55KTtcblxuICAgICAgICBpZiAoIWlzVmFsaWROYXRpdmVUeXBlKG5lZWRsZSwgWydib29sZWFuJywgJ3N0cmluZycsICdudW1iZXInLCAnbnVsbCddKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihgRXhwZWN0ZWQgZmlyc3QgYXJndW1lbnQgdG8gYmUgb2YgdHlwZSBib29sZWFuLCBzdHJpbmcsIG51bWJlciBvciBudWxsLCBidXQgZm91bmQgJHt0b1N0cmluZyh0eXBlT2YobmVlZGxlKSl9IGluc3RlYWQuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzVmFsaWROYXRpdmVUeXBlKGhheXN0YWNrLCBbJ3N0cmluZycsICdhcnJheSddKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihgRXhwZWN0ZWQgc2Vjb25kIGFyZ3VtZW50IHRvIGJlIG9mIHR5cGUgYXJyYXkgb3Igc3RyaW5nLCBidXQgZm91bmQgJHt0b1N0cmluZyh0eXBlT2YoaGF5c3RhY2spKX0gaW5zdGVhZC5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmZyb21JbmRleCkge1xuICAgICAgICAgICAgY29uc3QgZnJvbUluZGV4ID0gKHRoaXMuZnJvbUluZGV4LmV2YWx1YXRlKGN0eCk6IG51bWJlcik7XG4gICAgICAgICAgICByZXR1cm4gaGF5c3RhY2suaW5kZXhPZihuZWVkbGUsIGZyb21JbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaGF5c3RhY2suaW5kZXhPZihuZWVkbGUpO1xuICAgIH1cblxuICAgIGVhY2hDaGlsZChmbjogKF86IEV4cHJlc3Npb24pID0+IHZvaWQpIHtcbiAgICAgICAgZm4odGhpcy5uZWVkbGUpO1xuICAgICAgICBmbih0aGlzLmhheXN0YWNrKTtcbiAgICAgICAgaWYgKHRoaXMuZnJvbUluZGV4KSB7XG4gICAgICAgICAgICBmbih0aGlzLmZyb21JbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvdXRwdXREZWZpbmVkKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICBpZiAodGhpcy5mcm9tSW5kZXggIT0gbnVsbCAmJiB0aGlzLmZyb21JbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBmcm9tSW5kZXggPSB0aGlzLmZyb21JbmRleC5zZXJpYWxpemUoKTtcbiAgICAgICAgICAgIHJldHVybiBbXCJpbmRleC1vZlwiLCB0aGlzLm5lZWRsZS5zZXJpYWxpemUoKSwgdGhpcy5oYXlzdGFjay5zZXJpYWxpemUoKSwgZnJvbUluZGV4XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1wiaW5kZXgtb2ZcIiwgdGhpcy5uZWVkbGUuc2VyaWFsaXplKCksIHRoaXMuaGF5c3RhY2suc2VyaWFsaXplKCldO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSW5kZXhPZjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHt0eXBlT2Z9IGZyb20gJy4uL3ZhbHVlcyc7XG5pbXBvcnQge1ZhbHVlVHlwZSwgdHlwZSBUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uQ29udGV4dCBmcm9tICcuLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuXG4vLyBNYXAgaW5wdXQgbGFiZWwgdmFsdWVzIHRvIG91dHB1dCBleHByZXNzaW9uIGluZGV4XG50eXBlIENhc2VzID0ge1tudW1iZXIgfCBzdHJpbmddOiBudW1iZXJ9O1xuXG5jbGFzcyBNYXRjaCBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG4gICAgaW5wdXRUeXBlOiBUeXBlO1xuXG4gICAgaW5wdXQ6IEV4cHJlc3Npb247XG4gICAgY2FzZXM6IENhc2VzO1xuICAgIG91dHB1dHM6IEFycmF5PEV4cHJlc3Npb24+O1xuICAgIG90aGVyd2lzZTogRXhwcmVzc2lvbjtcblxuICAgIGNvbnN0cnVjdG9yKGlucHV0VHlwZTogVHlwZSwgb3V0cHV0VHlwZTogVHlwZSwgaW5wdXQ6IEV4cHJlc3Npb24sIGNhc2VzOiBDYXNlcywgb3V0cHV0czogQXJyYXk8RXhwcmVzc2lvbj4sIG90aGVyd2lzZTogRXhwcmVzc2lvbikge1xuICAgICAgICB0aGlzLmlucHV0VHlwZSA9IGlucHV0VHlwZTtcbiAgICAgICAgdGhpcy50eXBlID0gb3V0cHV0VHlwZTtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgICAgICB0aGlzLmNhc2VzID0gY2FzZXM7XG4gICAgICAgIHRoaXMub3V0cHV0cyA9IG91dHB1dHM7XG4gICAgICAgIHRoaXMub3RoZXJ3aXNlID0gb3RoZXJ3aXNlO1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZShhcmdzOiAkUmVhZE9ubHlBcnJheTxtaXhlZD4sIGNvbnRleHQ6IFBhcnNpbmdDb250ZXh0KSB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDUpXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgYXQgbGVhc3QgNCBhcmd1bWVudHMsIGJ1dCBmb3VuZCBvbmx5ICR7YXJncy5sZW5ndGggLSAxfS5gKTtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoICUgMiAhPT0gMSlcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBhbiBldmVuIG51bWJlciBvZiBhcmd1bWVudHMuYCk7XG5cbiAgICAgICAgbGV0IGlucHV0VHlwZTtcbiAgICAgICAgbGV0IG91dHB1dFR5cGU7XG4gICAgICAgIGlmIChjb250ZXh0LmV4cGVjdGVkVHlwZSAmJiBjb250ZXh0LmV4cGVjdGVkVHlwZS5raW5kICE9PSAndmFsdWUnKSB7XG4gICAgICAgICAgICBvdXRwdXRUeXBlID0gY29udGV4dC5leHBlY3RlZFR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2FzZXMgPSB7fTtcbiAgICAgICAgY29uc3Qgb3V0cHV0cyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMjsgaSA8IGFyZ3MubGVuZ3RoIC0gMTsgaSArPSAyKSB7XG4gICAgICAgICAgICBsZXQgbGFiZWxzID0gYXJnc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXJnc1tpICsgMV07XG5cbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShsYWJlbHMpKSB7XG4gICAgICAgICAgICAgICAgbGFiZWxzID0gW2xhYmVsc107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGxhYmVsQ29udGV4dCA9IGNvbnRleHQuY29uY2F0KGkpO1xuICAgICAgICAgICAgaWYgKGxhYmVscy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGFiZWxDb250ZXh0LmVycm9yKCdFeHBlY3RlZCBhdCBsZWFzdCBvbmUgYnJhbmNoIGxhYmVsLicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGxhYmVsIG9mIGxhYmVscykge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbGFiZWwgIT09ICdudW1iZXInICYmIHR5cGVvZiBsYWJlbCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxhYmVsQ29udGV4dC5lcnJvcihgQnJhbmNoIGxhYmVscyBtdXN0IGJlIG51bWJlcnMgb3Igc3RyaW5ncy5gKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsYWJlbCA9PT0gJ251bWJlcicgJiYgTWF0aC5hYnMobGFiZWwpID4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxhYmVsQ29udGV4dC5lcnJvcihgQnJhbmNoIGxhYmVscyBtdXN0IGJlIGludGVnZXJzIG5vIGxhcmdlciB0aGFuICR7TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJ9LmApO1xuXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbGFiZWwgPT09ICdudW1iZXInICYmIE1hdGguZmxvb3IobGFiZWwpICE9PSBsYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGFiZWxDb250ZXh0LmVycm9yKGBOdW1lcmljIGJyYW5jaCBsYWJlbHMgbXVzdCBiZSBpbnRlZ2VyIHZhbHVlcy5gKTtcblxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlucHV0VHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBpbnB1dFR5cGUgPSB0eXBlT2YobGFiZWwpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGFiZWxDb250ZXh0LmNoZWNrU3VidHlwZShpbnB1dFR5cGUsIHR5cGVPZihsYWJlbCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2FzZXNbU3RyaW5nKGxhYmVsKV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsYWJlbENvbnRleHQuZXJyb3IoJ0JyYW5jaCBsYWJlbHMgbXVzdCBiZSB1bmlxdWUuJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2FzZXNbU3RyaW5nKGxhYmVsKV0gPSBvdXRwdXRzLmxlbmd0aDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5wYXJzZSh2YWx1ZSwgaSwgb3V0cHV0VHlwZSk7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBvdXRwdXRUeXBlID0gb3V0cHV0VHlwZSB8fCByZXN1bHQudHlwZTtcbiAgICAgICAgICAgIG91dHB1dHMucHVzaChyZXN1bHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5wdXQgPSBjb250ZXh0LnBhcnNlKGFyZ3NbMV0sIDEsIFZhbHVlVHlwZSk7XG4gICAgICAgIGlmICghaW5wdXQpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNvbnN0IG90aGVyd2lzZSA9IGNvbnRleHQucGFyc2UoYXJnc1thcmdzLmxlbmd0aCAtIDFdLCBhcmdzLmxlbmd0aCAtIDEsIG91dHB1dFR5cGUpO1xuICAgICAgICBpZiAoIW90aGVyd2lzZSkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgYXNzZXJ0KGlucHV0VHlwZSAmJiBvdXRwdXRUeXBlKTtcblxuICAgICAgICBpZiAoaW5wdXQudHlwZS5raW5kICE9PSAndmFsdWUnICYmIGNvbnRleHQuY29uY2F0KDEpLmNoZWNrU3VidHlwZSgoaW5wdXRUeXBlOiBhbnkpLCBpbnB1dC50eXBlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IE1hdGNoKChpbnB1dFR5cGU6IGFueSksIChvdXRwdXRUeXBlOiBhbnkpLCBpbnB1dCwgY2FzZXMsIG91dHB1dHMsIG90aGVyd2lzZSk7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoY3R4OiBFdmFsdWF0aW9uQ29udGV4dCkge1xuICAgICAgICBjb25zdCBpbnB1dCA9ICh0aGlzLmlucHV0LmV2YWx1YXRlKGN0eCk6IGFueSk7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9ICh0eXBlT2YoaW5wdXQpID09PSB0aGlzLmlucHV0VHlwZSAmJiB0aGlzLm91dHB1dHNbdGhpcy5jYXNlc1tpbnB1dF1dKSB8fCB0aGlzLm90aGVyd2lzZTtcbiAgICAgICAgcmV0dXJuIG91dHB1dC5ldmFsdWF0ZShjdHgpO1xuICAgIH1cblxuICAgIGVhY2hDaGlsZChmbjogKF86IEV4cHJlc3Npb24pID0+IHZvaWQpIHtcbiAgICAgICAgZm4odGhpcy5pbnB1dCk7XG4gICAgICAgIHRoaXMub3V0cHV0cy5mb3JFYWNoKGZuKTtcbiAgICAgICAgZm4odGhpcy5vdGhlcndpc2UpO1xuICAgIH1cblxuICAgIG91dHB1dERlZmluZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm91dHB1dHMuZXZlcnkob3V0ID0+IG91dC5vdXRwdXREZWZpbmVkKCkpICYmIHRoaXMub3RoZXJ3aXNlLm91dHB1dERlZmluZWQoKTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKTogQXJyYXk8bWl4ZWQ+IHtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IFtcIm1hdGNoXCIsIHRoaXMuaW5wdXQuc2VyaWFsaXplKCldO1xuXG4gICAgICAgIC8vIFNvcnQgc28gc2VyaWFsaXphdGlvbiBoYXMgYW4gYXJiaXRyYXJ5IGRlZmluZWQgb3JkZXIsIGV2ZW4gdGhvdWdoXG4gICAgICAgIC8vIGJyYW5jaCBvcmRlciBkb2Vzbid0IGFmZmVjdCBldmFsdWF0aW9uXG4gICAgICAgIGNvbnN0IHNvcnRlZExhYmVscyA9IE9iamVjdC5rZXlzKHRoaXMuY2FzZXMpLnNvcnQoKTtcblxuICAgICAgICAvLyBHcm91cCBicmFuY2hlcyBieSB1bmlxdWUgbWF0Y2ggZXhwcmVzc2lvbiB0byBzdXBwb3J0IGNvbmRlbnNlZFxuICAgICAgICAvLyBzZXJpYWxpemF0aW9ucyBvZiB0aGUgZm9ybSBbY2FzZTEsIGNhc2UyLCAuLi5dIC0+IG1hdGNoRXhwcmVzc2lvblxuICAgICAgICBjb25zdCBncm91cGVkQnlPdXRwdXQ6IEFycmF5PFtudW1iZXIsIEFycmF5PG51bWJlciB8IHN0cmluZz5dPiA9IFtdO1xuICAgICAgICBjb25zdCBvdXRwdXRMb29rdXA6IHtbaW5kZXg6IG51bWJlcl06IG51bWJlcn0gPSB7fTsgLy8gbG9va3VwIGluZGV4IGludG8gZ3JvdXBlZEJ5T3V0cHV0IGZvciBhIGdpdmVuIG91dHB1dCBleHByZXNzaW9uXG4gICAgICAgIGZvciAoY29uc3QgbGFiZWwgb2Ygc29ydGVkTGFiZWxzKSB7XG4gICAgICAgICAgICBjb25zdCBvdXRwdXRJbmRleCA9IG91dHB1dExvb2t1cFt0aGlzLmNhc2VzW2xhYmVsXV07XG4gICAgICAgICAgICBpZiAob3V0cHV0SW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIC8vIEZpcnN0IHRpbWUgc2VlaW5nIHRoaXMgb3V0cHV0LCBhZGQgaXQgdG8gdGhlIGVuZCBvZiB0aGUgZ3JvdXBlZCBsaXN0XG4gICAgICAgICAgICAgICAgb3V0cHV0TG9va3VwW3RoaXMuY2FzZXNbbGFiZWxdXSA9IGdyb3VwZWRCeU91dHB1dC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZ3JvdXBlZEJ5T3V0cHV0LnB1c2goW3RoaXMuY2FzZXNbbGFiZWxdLCBbbGFiZWxdXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIHNlZW4gdGhpcyBleHByZXNzaW9uIGJlZm9yZSwgYWRkIHRoZSBsYWJlbCB0byB0aGF0IG91dHB1dCdzIGdyb3VwXG4gICAgICAgICAgICAgICAgZ3JvdXBlZEJ5T3V0cHV0W291dHB1dEluZGV4XVsxXS5wdXNoKGxhYmVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvZXJjZUxhYmVsID0gKGxhYmVsKSA9PiB0aGlzLmlucHV0VHlwZS5raW5kID09PSAnbnVtYmVyJyA/IE51bWJlcihsYWJlbCkgOiBsYWJlbDtcblxuICAgICAgICBmb3IgKGNvbnN0IFtvdXRwdXRJbmRleCwgbGFiZWxzXSBvZiBncm91cGVkQnlPdXRwdXQpIHtcbiAgICAgICAgICAgIGlmIChsYWJlbHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgLy8gT25seSBhIHNpbmdsZSBsYWJlbCBtYXRjaGVzIHRoaXMgb3V0cHV0IGV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkLnB1c2goY29lcmNlTGFiZWwobGFiZWxzWzBdKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEFycmF5IG9mIGxpdGVyYWwgbGFiZWxzIHBvaW50aW5nIHRvIHRoaXMgb3V0cHV0IGV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICBzZXJpYWxpemVkLnB1c2gobGFiZWxzLm1hcChjb2VyY2VMYWJlbCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VyaWFsaXplZC5wdXNoKHRoaXMub3V0cHV0c1tvdXRwdXRJbmRleF0uc2VyaWFsaXplKCkpO1xuICAgICAgICB9XG4gICAgICAgIHNlcmlhbGl6ZWQucHVzaCh0aGlzLm90aGVyd2lzZS5zZXJpYWxpemUoKSk7XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVkO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTWF0Y2g7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB7Qm9vbGVhblR5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgUGFyc2luZ0NvbnRleHQgZnJvbSAnLi4vcGFyc2luZ19jb250ZXh0JztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25Db250ZXh0IGZyb20gJy4uL2V2YWx1YXRpb25fY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG50eXBlIEJyYW5jaGVzID0gQXJyYXk8W0V4cHJlc3Npb24sIEV4cHJlc3Npb25dPjtcblxuY2xhc3MgQ2FzZSBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG5cbiAgICBicmFuY2hlczogQnJhbmNoZXM7XG4gICAgb3RoZXJ3aXNlOiBFeHByZXNzaW9uO1xuXG4gICAgY29uc3RydWN0b3IodHlwZTogVHlwZSwgYnJhbmNoZXM6IEJyYW5jaGVzLCBvdGhlcndpc2U6IEV4cHJlc3Npb24pIHtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgdGhpcy5icmFuY2hlcyA9IGJyYW5jaGVzO1xuICAgICAgICB0aGlzLm90aGVyd2lzZSA9IG90aGVyd2lzZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcGFyc2UoYXJnczogJFJlYWRPbmx5QXJyYXk8bWl4ZWQ+LCBjb250ZXh0OiBQYXJzaW5nQ29udGV4dCkge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPCA0KVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIGF0IGxlYXN0IDMgYXJndW1lbnRzLCBidXQgZm91bmQgb25seSAke2FyZ3MubGVuZ3RoIC0gMX0uYCk7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCAlIDIgIT09IDApXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgYW4gb2RkIG51bWJlciBvZiBhcmd1bWVudHMuYCk7XG5cbiAgICAgICAgbGV0IG91dHB1dFR5cGU6ID9UeXBlO1xuICAgICAgICBpZiAoY29udGV4dC5leHBlY3RlZFR5cGUgJiYgY29udGV4dC5leHBlY3RlZFR5cGUua2luZCAhPT0gJ3ZhbHVlJykge1xuICAgICAgICAgICAgb3V0cHV0VHlwZSA9IGNvbnRleHQuZXhwZWN0ZWRUeXBlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnJhbmNoZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aCAtIDE7IGkgKz0gMikge1xuICAgICAgICAgICAgY29uc3QgdGVzdCA9IGNvbnRleHQucGFyc2UoYXJnc1tpXSwgaSwgQm9vbGVhblR5cGUpO1xuICAgICAgICAgICAgaWYgKCF0ZXN0KSByZXR1cm4gbnVsbDtcblxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5wYXJzZShhcmdzW2kgKyAxXSwgaSArIDEsIG91dHB1dFR5cGUpO1xuICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICBicmFuY2hlcy5wdXNoKFt0ZXN0LCByZXN1bHRdKTtcblxuICAgICAgICAgICAgb3V0cHV0VHlwZSA9IG91dHB1dFR5cGUgfHwgcmVzdWx0LnR5cGU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvdGhlcndpc2UgPSBjb250ZXh0LnBhcnNlKGFyZ3NbYXJncy5sZW5ndGggLSAxXSwgYXJncy5sZW5ndGggLSAxLCBvdXRwdXRUeXBlKTtcbiAgICAgICAgaWYgKCFvdGhlcndpc2UpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGFzc2VydChvdXRwdXRUeXBlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDYXNlKChvdXRwdXRUeXBlOiBhbnkpLCBicmFuY2hlcywgb3RoZXJ3aXNlKTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIGZvciAoY29uc3QgW3Rlc3QsIGV4cHJlc3Npb25dIG9mIHRoaXMuYnJhbmNoZXMpIHtcbiAgICAgICAgICAgIGlmICh0ZXN0LmV2YWx1YXRlKGN0eCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXhwcmVzc2lvbi5ldmFsdWF0ZShjdHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm90aGVyd2lzZS5ldmFsdWF0ZShjdHgpO1xuICAgIH1cblxuICAgIGVhY2hDaGlsZChmbjogKF86IEV4cHJlc3Npb24pID0+IHZvaWQpIHtcbiAgICAgICAgZm9yIChjb25zdCBbdGVzdCwgZXhwcmVzc2lvbl0gb2YgdGhpcy5icmFuY2hlcykge1xuICAgICAgICAgICAgZm4odGVzdCk7XG4gICAgICAgICAgICBmbihleHByZXNzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICBmbih0aGlzLm90aGVyd2lzZSk7XG4gICAgfVxuXG4gICAgb3V0cHV0RGVmaW5lZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnJhbmNoZXMuZXZlcnkoKFtfLCBvdXRdKSA9PiBvdXQub3V0cHV0RGVmaW5lZCgpKSAmJiB0aGlzLm90aGVyd2lzZS5vdXRwdXREZWZpbmVkKCk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkID0gW1wiY2FzZVwiXTtcbiAgICAgICAgdGhpcy5lYWNoQ2hpbGQoY2hpbGQgPT4geyBzZXJpYWxpemVkLnB1c2goY2hpbGQuc2VyaWFsaXplKCkpOyB9KTtcbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZWQ7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDYXNlO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtWYWx1ZVR5cGUsIE51bWJlclR5cGUsIFN0cmluZ1R5cGUsIGFycmF5LCB0b1N0cmluZywgaXNWYWxpZFR5cGUsIGlzVmFsaWROYXRpdmVUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgUnVudGltZUVycm9yIGZyb20gJy4uL3J1bnRpbWVfZXJyb3InO1xuaW1wb3J0IHt0eXBlT2Z9IGZyb20gJy4uL3ZhbHVlcyc7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uQ29udGV4dCBmcm9tICcuLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuY2xhc3MgU2xpY2UgaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuICAgIGlucHV0OiBFeHByZXNzaW9uO1xuICAgIGJlZ2luSW5kZXg6IEV4cHJlc3Npb247XG4gICAgZW5kSW5kZXg6ID9FeHByZXNzaW9uO1xuXG4gICAgY29uc3RydWN0b3IodHlwZTogVHlwZSwgaW5wdXQ6IEV4cHJlc3Npb24sIGJlZ2luSW5kZXg6IEV4cHJlc3Npb24sIGVuZEluZGV4PzogRXhwcmVzc2lvbikge1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgICB0aGlzLmlucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuYmVnaW5JbmRleCA9IGJlZ2luSW5kZXg7XG4gICAgICAgIHRoaXMuZW5kSW5kZXggPSBlbmRJbmRleDtcblxuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZShhcmdzOiAkUmVhZE9ubHlBcnJheTxtaXhlZD4sIGNvbnRleHQ6IFBhcnNpbmdDb250ZXh0KSB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA8PSAyIHx8ICBhcmdzLmxlbmd0aCA+PSA1KSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgMyBvciA0IGFyZ3VtZW50cywgYnV0IGZvdW5kICR7YXJncy5sZW5ndGggLSAxfSBpbnN0ZWFkLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5wdXQgPSBjb250ZXh0LnBhcnNlKGFyZ3NbMV0sIDEsIFZhbHVlVHlwZSk7XG4gICAgICAgIGNvbnN0IGJlZ2luSW5kZXggPSBjb250ZXh0LnBhcnNlKGFyZ3NbMl0sIDIsIE51bWJlclR5cGUpO1xuXG4gICAgICAgIGlmICghaW5wdXQgfHwgIWJlZ2luSW5kZXgpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGlmICghaXNWYWxpZFR5cGUoaW5wdXQudHlwZSwgW2FycmF5KFZhbHVlVHlwZSksIFN0cmluZ1R5cGUsIFZhbHVlVHlwZV0pKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgZmlyc3QgYXJndW1lbnQgdG8gYmUgb2YgdHlwZSBhcnJheSBvciBzdHJpbmcsIGJ1dCBmb3VuZCAke3RvU3RyaW5nKGlucHV0LnR5cGUpfSBpbnN0ZWFkYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZEluZGV4ID0gY29udGV4dC5wYXJzZShhcmdzWzNdLCAzLCBOdW1iZXJUeXBlKTtcbiAgICAgICAgICAgIGlmICghZW5kSW5kZXgpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTbGljZShpbnB1dC50eXBlLCBpbnB1dCwgYmVnaW5JbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTbGljZShpbnB1dC50eXBlLCBpbnB1dCwgYmVnaW5JbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBldmFsdWF0ZShjdHg6IEV2YWx1YXRpb25Db250ZXh0KSB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gKHRoaXMuaW5wdXQuZXZhbHVhdGUoY3R4KTogYW55KTtcbiAgICAgICAgY29uc3QgYmVnaW5JbmRleCA9ICh0aGlzLmJlZ2luSW5kZXguZXZhbHVhdGUoY3R4KTogbnVtYmVyKTtcblxuICAgICAgICBpZiAoIWlzVmFsaWROYXRpdmVUeXBlKGlucHV0LCBbJ3N0cmluZycsICdhcnJheSddKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihgRXhwZWN0ZWQgZmlyc3QgYXJndW1lbnQgdG8gYmUgb2YgdHlwZSBhcnJheSBvciBzdHJpbmcsIGJ1dCBmb3VuZCAke3RvU3RyaW5nKHR5cGVPZihpbnB1dCkpfSBpbnN0ZWFkLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZW5kSW5kZXgpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZEluZGV4ID0gKHRoaXMuZW5kSW5kZXguZXZhbHVhdGUoY3R4KTogbnVtYmVyKTtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dC5zbGljZShiZWdpbkluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaW5wdXQuc2xpY2UoYmVnaW5JbmRleCk7XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoXzogRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICBmbih0aGlzLmlucHV0KTtcbiAgICAgICAgZm4odGhpcy5iZWdpbkluZGV4KTtcbiAgICAgICAgaWYgKHRoaXMuZW5kSW5kZXgpIHtcbiAgICAgICAgICAgIGZuKHRoaXMuZW5kSW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb3V0cHV0RGVmaW5lZCgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZW5kSW5kZXggIT0gbnVsbCAmJiB0aGlzLmVuZEluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZEluZGV4ID0gdGhpcy5lbmRJbmRleC5zZXJpYWxpemUoKTtcbiAgICAgICAgICAgIHJldHVybiBbXCJzbGljZVwiLCB0aGlzLmlucHV0LnNlcmlhbGl6ZSgpLCB0aGlzLmJlZ2luSW5kZXguc2VyaWFsaXplKCksIGVuZEluZGV4XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1wic2xpY2VcIiwgdGhpcy5pbnB1dC5zZXJpYWxpemUoKSwgdGhpcy5iZWdpbkluZGV4LnNlcmlhbGl6ZSgpXTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNsaWNlO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHt0b1N0cmluZywgVmFsdWVUeXBlLCBCb29sZWFuVHlwZSwgQ29sbGF0b3JUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgQXNzZXJ0aW9uIGZyb20gJy4vYXNzZXJ0aW9uJztcbmltcG9ydCB7dHlwZU9mfSBmcm9tICcuLi92YWx1ZXMnO1xuaW1wb3J0IFJ1bnRpbWVFcnJvciBmcm9tICcuLi9ydW50aW1lX2Vycm9yJztcblxuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvbkNvbnRleHQgZnJvbSAnLi4vZXZhbHVhdGlvbl9jb250ZXh0JztcbmltcG9ydCB0eXBlIFBhcnNpbmdDb250ZXh0IGZyb20gJy4uL3BhcnNpbmdfY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG50eXBlIENvbXBhcmlzb25PcGVyYXRvciA9ICc9PScgfCAnIT0nIHwgJzwnIHwgJz4nIHwgJzw9JyB8ICc+PScgO1xuXG5mdW5jdGlvbiBpc0NvbXBhcmFibGVUeXBlKG9wOiBDb21wYXJpc29uT3BlcmF0b3IsIHR5cGU6IFR5cGUpIHtcbiAgICBpZiAob3AgPT09ICc9PScgfHwgb3AgPT09ICchPScpIHtcbiAgICAgICAgLy8gZXF1YWxpdHkgb3BlcmF0b3JcbiAgICAgICAgcmV0dXJuIHR5cGUua2luZCA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgICAgICAgICB0eXBlLmtpbmQgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICAgICB0eXBlLmtpbmQgPT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICB0eXBlLmtpbmQgPT09ICdudWxsJyB8fFxuICAgICAgICAgICAgdHlwZS5raW5kID09PSAndmFsdWUnO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG9yZGVyaW5nIG9wZXJhdG9yXG4gICAgICAgIHJldHVybiB0eXBlLmtpbmQgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICAgICB0eXBlLmtpbmQgPT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICB0eXBlLmtpbmQgPT09ICd2YWx1ZSc7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBlcShjdHgsIGEsIGIpIHsgcmV0dXJuIGEgPT09IGI7IH1cbmZ1bmN0aW9uIG5lcShjdHgsIGEsIGIpIHsgcmV0dXJuIGEgIT09IGI7IH1cbmZ1bmN0aW9uIGx0KGN0eCwgYSwgYikgeyByZXR1cm4gYSA8IGI7IH1cbmZ1bmN0aW9uIGd0KGN0eCwgYSwgYikgeyByZXR1cm4gYSA+IGI7IH1cbmZ1bmN0aW9uIGx0ZXEoY3R4LCBhLCBiKSB7IHJldHVybiBhIDw9IGI7IH1cbmZ1bmN0aW9uIGd0ZXEoY3R4LCBhLCBiKSB7IHJldHVybiBhID49IGI7IH1cblxuZnVuY3Rpb24gZXFDb2xsYXRlKGN0eCwgYSwgYiwgYykgeyByZXR1cm4gYy5jb21wYXJlKGEsIGIpID09PSAwOyB9XG5mdW5jdGlvbiBuZXFDb2xsYXRlKGN0eCwgYSwgYiwgYykgeyByZXR1cm4gIWVxQ29sbGF0ZShjdHgsIGEsIGIsIGMpOyB9XG5mdW5jdGlvbiBsdENvbGxhdGUoY3R4LCBhLCBiLCBjKSB7IHJldHVybiBjLmNvbXBhcmUoYSwgYikgPCAwOyB9XG5mdW5jdGlvbiBndENvbGxhdGUoY3R4LCBhLCBiLCBjKSB7IHJldHVybiBjLmNvbXBhcmUoYSwgYikgPiAwOyB9XG5mdW5jdGlvbiBsdGVxQ29sbGF0ZShjdHgsIGEsIGIsIGMpIHsgcmV0dXJuIGMuY29tcGFyZShhLCBiKSA8PSAwOyB9XG5mdW5jdGlvbiBndGVxQ29sbGF0ZShjdHgsIGEsIGIsIGMpIHsgcmV0dXJuIGMuY29tcGFyZShhLCBiKSA+PSAwOyB9XG5cbi8qKlxuICogU3BlY2lhbCBmb3JtIGZvciBjb21wYXJpc29uIG9wZXJhdG9ycywgaW1wbGVtZW50aW5nIHRoZSBzaWduYXR1cmVzOlxuICogLSAoVCwgVCwgP0NvbGxhdG9yKSA9PiBib29sZWFuXG4gKiAtIChULCB2YWx1ZSwgP0NvbGxhdG9yKSA9PiBib29sZWFuXG4gKiAtICh2YWx1ZSwgVCwgP0NvbGxhdG9yKSA9PiBib29sZWFuXG4gKlxuICogRm9yIGluZXF1YWxpdGllcywgVCBtdXN0IGJlIGVpdGhlciB2YWx1ZSwgc3RyaW5nLCBvciBudW1iZXIuIEZvciA9PS8hPSwgaXRcbiAqIGNhbiBhbHNvIGJlIGJvb2xlYW4gb3IgbnVsbC5cbiAqXG4gKiBFcXVhbGl0eSBzZW1hbnRpY3MgYXJlIGVxdWl2YWxlbnQgdG8gSmF2YXNjcmlwdCdzIHN0cmljdCBlcXVhbGl0eSAoPT09LyE9PSlcbiAqIC0tIGkuZS4sIHdoZW4gdGhlIGFyZ3VtZW50cycgdHlwZXMgZG9uJ3QgbWF0Y2gsID09IGV2YWx1YXRlcyB0byBmYWxzZSwgIT0gdG9cbiAqIHRydWUuXG4gKlxuICogV2hlbiB0eXBlcyBkb24ndCBtYXRjaCBpbiBhbiBvcmRlcmluZyBjb21wYXJpc29uLCBhIHJ1bnRpbWUgZXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIG1ha2VDb21wYXJpc29uKG9wOiBDb21wYXJpc29uT3BlcmF0b3IsIGNvbXBhcmVCYXNpYywgY29tcGFyZVdpdGhDb2xsYXRvcikge1xuICAgIGNvbnN0IGlzT3JkZXJDb21wYXJpc29uID0gb3AgIT09ICc9PScgJiYgb3AgIT09ICchPSc7XG5cbiAgICByZXR1cm4gY2xhc3MgQ29tcGFyaXNvbiBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgICAgICB0eXBlOiBUeXBlO1xuICAgICAgICBsaHM6IEV4cHJlc3Npb247XG4gICAgICAgIHJoczogRXhwcmVzc2lvbjtcbiAgICAgICAgY29sbGF0b3I6ID9FeHByZXNzaW9uO1xuICAgICAgICBoYXNVbnR5cGVkQXJndW1lbnQ6IGJvb2xlYW47XG5cbiAgICAgICAgY29uc3RydWN0b3IobGhzOiBFeHByZXNzaW9uLCByaHM6IEV4cHJlc3Npb24sIGNvbGxhdG9yOiA/RXhwcmVzc2lvbikge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gQm9vbGVhblR5cGU7XG4gICAgICAgICAgICB0aGlzLmxocyA9IGxocztcbiAgICAgICAgICAgIHRoaXMucmhzID0gcmhzO1xuICAgICAgICAgICAgdGhpcy5jb2xsYXRvciA9IGNvbGxhdG9yO1xuICAgICAgICAgICAgdGhpcy5oYXNVbnR5cGVkQXJndW1lbnQgPSBsaHMudHlwZS5raW5kID09PSAndmFsdWUnIHx8IHJocy50eXBlLmtpbmQgPT09ICd2YWx1ZSc7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0aWMgcGFyc2UoYXJnczogJFJlYWRPbmx5QXJyYXk8bWl4ZWQ+LCBjb250ZXh0OiBQYXJzaW5nQ29udGV4dCk6ID9FeHByZXNzaW9uIHtcbiAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMyAmJiBhcmdzLmxlbmd0aCAhPT0gNClcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgdHdvIG9yIHRocmVlIGFyZ3VtZW50cy5gKTtcblxuICAgICAgICAgICAgY29uc3Qgb3A6IENvbXBhcmlzb25PcGVyYXRvciA9IChhcmdzWzBdOiBhbnkpO1xuXG4gICAgICAgICAgICBsZXQgbGhzID0gY29udGV4dC5wYXJzZShhcmdzWzFdLCAxLCBWYWx1ZVR5cGUpO1xuICAgICAgICAgICAgaWYgKCFsaHMpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgaWYgKCFpc0NvbXBhcmFibGVUeXBlKG9wLCBsaHMudHlwZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5jb25jYXQoMSkuZXJyb3IoYFwiJHtvcH1cIiBjb21wYXJpc29ucyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgdHlwZSAnJHt0b1N0cmluZyhsaHMudHlwZSl9Jy5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCByaHMgPSBjb250ZXh0LnBhcnNlKGFyZ3NbMl0sIDIsIFZhbHVlVHlwZSk7XG4gICAgICAgICAgICBpZiAoIXJocykgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBpZiAoIWlzQ29tcGFyYWJsZVR5cGUob3AsIHJocy50eXBlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNvbmNhdCgyKS5lcnJvcihgXCIke29wfVwiIGNvbXBhcmlzb25zIGFyZSBub3Qgc3VwcG9ydGVkIGZvciB0eXBlICcke3RvU3RyaW5nKHJocy50eXBlKX0nLmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgbGhzLnR5cGUua2luZCAhPT0gcmhzLnR5cGUua2luZCAmJlxuICAgICAgICAgICAgICAgIGxocy50eXBlLmtpbmQgIT09ICd2YWx1ZScgJiZcbiAgICAgICAgICAgICAgICByaHMudHlwZS5raW5kICE9PSAndmFsdWUnXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgQ2Fubm90IGNvbXBhcmUgdHlwZXMgJyR7dG9TdHJpbmcobGhzLnR5cGUpfScgYW5kICcke3RvU3RyaW5nKHJocy50eXBlKX0nLmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXNPcmRlckNvbXBhcmlzb24pIHtcbiAgICAgICAgICAgICAgICAvLyB0eXBpbmcgcnVsZXMgc3BlY2lmaWMgdG8gbGVzcy9ncmVhdGVyIHRoYW4gb3BlcmF0b3JzXG4gICAgICAgICAgICAgICAgaWYgKGxocy50eXBlLmtpbmQgPT09ICd2YWx1ZScgJiYgcmhzLnR5cGUua2luZCAhPT0gJ3ZhbHVlJykge1xuICAgICAgICAgICAgICAgICAgICAvLyAodmFsdWUsIFQpXG4gICAgICAgICAgICAgICAgICAgIGxocyA9IG5ldyBBc3NlcnRpb24ocmhzLnR5cGUsIFtsaHNdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxocy50eXBlLmtpbmQgIT09ICd2YWx1ZScgJiYgcmhzLnR5cGUua2luZCA9PT0gJ3ZhbHVlJykge1xuICAgICAgICAgICAgICAgICAgICAvLyAoVCwgdmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIHJocyA9IG5ldyBBc3NlcnRpb24obGhzLnR5cGUsIFtyaHNdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBjb2xsYXRvciA9IG51bGw7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGxocy50eXBlLmtpbmQgIT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgIHJocy50eXBlLmtpbmQgIT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgIGxocy50eXBlLmtpbmQgIT09ICd2YWx1ZScgJiZcbiAgICAgICAgICAgICAgICAgICAgcmhzLnR5cGUua2luZCAhPT0gJ3ZhbHVlJ1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgQ2Fubm90IHVzZSBjb2xsYXRvciB0byBjb21wYXJlIG5vbi1zdHJpbmcgdHlwZXMuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbGxhdG9yID0gY29udGV4dC5wYXJzZShhcmdzWzNdLCAzLCBDb2xsYXRvclR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICghY29sbGF0b3IpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbXBhcmlzb24obGhzLCByaHMsIGNvbGxhdG9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2YWx1YXRlKGN0eDogRXZhbHVhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxocyA9IHRoaXMubGhzLmV2YWx1YXRlKGN0eCk7XG4gICAgICAgICAgICBjb25zdCByaHMgPSB0aGlzLnJocy5ldmFsdWF0ZShjdHgpO1xuXG4gICAgICAgICAgICBpZiAoaXNPcmRlckNvbXBhcmlzb24gJiYgdGhpcy5oYXNVbnR5cGVkQXJndW1lbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsdCA9IHR5cGVPZihsaHMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJ0ID0gdHlwZU9mKHJocyk7XG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgdGhhdCB0eXBlIGlzIHN0cmluZyBvciBudW1iZXIsIGFuZCBlcXVhbFxuICAgICAgICAgICAgICAgIGlmIChsdC5raW5kICE9PSBydC5raW5kIHx8ICEobHQua2luZCA9PT0gJ3N0cmluZycgfHwgbHQua2luZCA9PT0gJ251bWJlcicpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXJyb3IoYEV4cGVjdGVkIGFyZ3VtZW50cyBmb3IgXCIke29wfVwiIHRvIGJlIChzdHJpbmcsIHN0cmluZykgb3IgKG51bWJlciwgbnVtYmVyKSwgYnV0IGZvdW5kICgke2x0LmtpbmR9LCAke3J0LmtpbmR9KSBpbnN0ZWFkLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuY29sbGF0b3IgJiYgIWlzT3JkZXJDb21wYXJpc29uICYmIHRoaXMuaGFzVW50eXBlZEFyZ3VtZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbHQgPSB0eXBlT2YobGhzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBydCA9IHR5cGVPZihyaHMpO1xuICAgICAgICAgICAgICAgIGlmIChsdC5raW5kICE9PSAnc3RyaW5nJyB8fCBydC5raW5kICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tcGFyZUJhc2ljKGN0eCwgbGhzLCByaHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sbGF0b3IgP1xuICAgICAgICAgICAgICAgIGNvbXBhcmVXaXRoQ29sbGF0b3IoY3R4LCBsaHMsIHJocywgdGhpcy5jb2xsYXRvci5ldmFsdWF0ZShjdHgpKSA6XG4gICAgICAgICAgICAgICAgY29tcGFyZUJhc2ljKGN0eCwgbGhzLCByaHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgZWFjaENoaWxkKGZuOiAoXzogRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICAgICAgZm4odGhpcy5saHMpO1xuICAgICAgICAgICAgZm4odGhpcy5yaHMpO1xuICAgICAgICAgICAgaWYgKHRoaXMuY29sbGF0b3IpIHtcbiAgICAgICAgICAgICAgICBmbih0aGlzLmNvbGxhdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG91dHB1dERlZmluZWQoKTogYm9vbGVhbiB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBbb3BdO1xuICAgICAgICAgICAgdGhpcy5lYWNoQ2hpbGQoY2hpbGQgPT4geyBzZXJpYWxpemVkLnB1c2goY2hpbGQuc2VyaWFsaXplKCkpOyB9KTtcbiAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVkO1xuICAgICAgICB9XG4gICAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IEVxdWFscyA9IG1ha2VDb21wYXJpc29uKCc9PScsIGVxLCBlcUNvbGxhdGUpO1xuZXhwb3J0IGNvbnN0IE5vdEVxdWFscyA9IG1ha2VDb21wYXJpc29uKCchPScsIG5lcSwgbmVxQ29sbGF0ZSk7XG5leHBvcnQgY29uc3QgTGVzc1RoYW4gPSBtYWtlQ29tcGFyaXNvbignPCcsIGx0LCBsdENvbGxhdGUpO1xuZXhwb3J0IGNvbnN0IEdyZWF0ZXJUaGFuID0gbWFrZUNvbXBhcmlzb24oJz4nLCBndCwgZ3RDb2xsYXRlKTtcbmV4cG9ydCBjb25zdCBMZXNzVGhhbk9yRXF1YWwgPSBtYWtlQ29tcGFyaXNvbignPD0nLCBsdGVxLCBsdGVxQ29sbGF0ZSk7XG5leHBvcnQgY29uc3QgR3JlYXRlclRoYW5PckVxdWFsID0gbWFrZUNvbXBhcmlzb24oJz49JywgZ3RlcSwgZ3RlcUNvbGxhdGUpO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtTdHJpbmdUeXBlLCBOdW1iZXJUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB0eXBlIHtFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25Db250ZXh0IGZyb20gJy4uL2V2YWx1YXRpb25fY29udGV4dCc7XG5pbXBvcnQgdHlwZSBQYXJzaW5nQ29udGV4dCBmcm9tICcuLi9wYXJzaW5nX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4uL3R5cGVzJztcblxuZGVjbGFyZSB2YXIgSW50bDoge1xuICAgIE51bWJlckZvcm1hdDogQ2xhc3M8SW50bCROdW1iZXJGb3JtYXQ+XG59O1xuXG5kZWNsYXJlIGNsYXNzIEludGwkTnVtYmVyRm9ybWF0IHtcbiAgICBjb25zdHJ1Y3RvciAoXG4gICAgICAgIGxvY2FsZXM/OiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgICAgICAgb3B0aW9ucz86IE51bWJlckZvcm1hdE9wdGlvbnNcbiAgICApOiBJbnRsJE51bWJlckZvcm1hdDtcblxuICAgIHN0YXRpYyAoXG4gICAgICAgIGxvY2FsZXM/OiBzdHJpbmcgfCBzdHJpbmdbXSxcbiAgICAgICAgb3B0aW9ucz86IE51bWJlckZvcm1hdE9wdGlvbnNcbiAgICApOiBJbnRsJE51bWJlckZvcm1hdDtcblxuICAgIGZvcm1hdChhOiBudW1iZXIpOiBzdHJpbmc7XG5cbiAgICByZXNvbHZlZE9wdGlvbnMoKTogYW55O1xufVxuXG50eXBlIE51bWJlckZvcm1hdE9wdGlvbnMgPSB7XG4gICAgc3R5bGU/OiAnZGVjaW1hbCcgfCAnY3VycmVuY3knIHwgJ3BlcmNlbnQnO1xuICAgIGN1cnJlbmN5PzogbnVsbCB8IHN0cmluZztcbiAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM/OiBudWxsIHwgc3RyaW5nO1xuICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0cz86IG51bGwgfCBzdHJpbmc7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOdW1iZXJGb3JtYXQgaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuICAgIG51bWJlcjogRXhwcmVzc2lvbjtcbiAgICBsb2NhbGU6IEV4cHJlc3Npb24gfCBudWxsOyAgIC8vIEJDUCA0NyBsYW5ndWFnZSB0YWdcbiAgICBjdXJyZW5jeTogRXhwcmVzc2lvbiB8IG51bGw7IC8vIElTTyA0MjE3IGN1cnJlbmN5IGNvZGUsIHJlcXVpcmVkIGlmIHN0eWxlPWN1cnJlbmN5XG4gICAgbWluRnJhY3Rpb25EaWdpdHM6IEV4cHJlc3Npb24gfCBudWxsOyAvLyBEZWZhdWx0IDBcbiAgICBtYXhGcmFjdGlvbkRpZ2l0czogRXhwcmVzc2lvbiB8IG51bGw7IC8vIERlZmF1bHQgM1xuXG4gICAgY29uc3RydWN0b3IobnVtYmVyOiBFeHByZXNzaW9uLFxuICAgICAgICAgICAgICAgIGxvY2FsZTogRXhwcmVzc2lvbiB8IG51bGwsXG4gICAgICAgICAgICAgICAgY3VycmVuY3k6IEV4cHJlc3Npb24gfCBudWxsLFxuICAgICAgICAgICAgICAgIG1pbkZyYWN0aW9uRGlnaXRzOiBFeHByZXNzaW9uIHwgbnVsbCxcbiAgICAgICAgICAgICAgICBtYXhGcmFjdGlvbkRpZ2l0czogRXhwcmVzc2lvbiB8IG51bGwpIHtcbiAgICAgICAgdGhpcy50eXBlID0gU3RyaW5nVHlwZTtcbiAgICAgICAgdGhpcy5udW1iZXIgPSBudW1iZXI7XG4gICAgICAgIHRoaXMubG9jYWxlID0gbG9jYWxlO1xuICAgICAgICB0aGlzLmN1cnJlbmN5ID0gY3VycmVuY3k7XG4gICAgICAgIHRoaXMubWluRnJhY3Rpb25EaWdpdHMgPSBtaW5GcmFjdGlvbkRpZ2l0cztcbiAgICAgICAgdGhpcy5tYXhGcmFjdGlvbkRpZ2l0cyA9IG1heEZyYWN0aW9uRGlnaXRzO1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZShhcmdzOiAkUmVhZE9ubHlBcnJheTxtaXhlZD4sIGNvbnRleHQ6IFBhcnNpbmdDb250ZXh0KTogP0V4cHJlc3Npb24ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggIT09IDMpXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgdHdvIGFyZ3VtZW50cy5gKTtcblxuICAgICAgICBjb25zdCBudW1iZXIgPSBjb250ZXh0LnBhcnNlKGFyZ3NbMV0sIDEsIE51bWJlclR5cGUpO1xuICAgICAgICBpZiAoIW51bWJlcikgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IChhcmdzWzJdOiBhbnkpO1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShvcHRpb25zKSlcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBOdW1iZXJGb3JtYXQgb3B0aW9ucyBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdC5gKTtcblxuICAgICAgICBsZXQgbG9jYWxlID0gbnVsbDtcbiAgICAgICAgaWYgKG9wdGlvbnNbJ2xvY2FsZSddKSB7XG4gICAgICAgICAgICBsb2NhbGUgPSBjb250ZXh0LnBhcnNlKG9wdGlvbnNbJ2xvY2FsZSddLCAxLCBTdHJpbmdUeXBlKTtcbiAgICAgICAgICAgIGlmICghbG9jYWxlKSByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjdXJyZW5jeSA9IG51bGw7XG4gICAgICAgIGlmIChvcHRpb25zWydjdXJyZW5jeSddKSB7XG4gICAgICAgICAgICBjdXJyZW5jeSA9IGNvbnRleHQucGFyc2Uob3B0aW9uc1snY3VycmVuY3knXSwgMSwgU3RyaW5nVHlwZSk7XG4gICAgICAgICAgICBpZiAoIWN1cnJlbmN5KSByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBtaW5GcmFjdGlvbkRpZ2l0cyA9IG51bGw7XG4gICAgICAgIGlmIChvcHRpb25zWydtaW4tZnJhY3Rpb24tZGlnaXRzJ10pIHtcbiAgICAgICAgICAgIG1pbkZyYWN0aW9uRGlnaXRzID0gY29udGV4dC5wYXJzZShvcHRpb25zWydtaW4tZnJhY3Rpb24tZGlnaXRzJ10sIDEsIE51bWJlclR5cGUpO1xuICAgICAgICAgICAgaWYgKCFtaW5GcmFjdGlvbkRpZ2l0cykgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbWF4RnJhY3Rpb25EaWdpdHMgPSBudWxsO1xuICAgICAgICBpZiAob3B0aW9uc1snbWF4LWZyYWN0aW9uLWRpZ2l0cyddKSB7XG4gICAgICAgICAgICBtYXhGcmFjdGlvbkRpZ2l0cyA9IGNvbnRleHQucGFyc2Uob3B0aW9uc1snbWF4LWZyYWN0aW9uLWRpZ2l0cyddLCAxLCBOdW1iZXJUeXBlKTtcbiAgICAgICAgICAgIGlmICghbWF4RnJhY3Rpb25EaWdpdHMpIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBOdW1iZXJGb3JtYXQobnVtYmVyLCBsb2NhbGUsIGN1cnJlbmN5LCBtaW5GcmFjdGlvbkRpZ2l0cywgbWF4RnJhY3Rpb25EaWdpdHMpO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGN0eDogRXZhbHVhdGlvbkNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnRsLk51bWJlckZvcm1hdCh0aGlzLmxvY2FsZSA/IHRoaXMubG9jYWxlLmV2YWx1YXRlKGN0eCkgOiBbXSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdHlsZTogdGhpcy5jdXJyZW5jeSA/IFwiY3VycmVuY3lcIiA6IFwiZGVjaW1hbFwiLFxuICAgICAgICAgICAgICAgIGN1cnJlbmN5OiB0aGlzLmN1cnJlbmN5ID8gdGhpcy5jdXJyZW5jeS5ldmFsdWF0ZShjdHgpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogdGhpcy5taW5GcmFjdGlvbkRpZ2l0cyA/IHRoaXMubWluRnJhY3Rpb25EaWdpdHMuZXZhbHVhdGUoY3R4KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IHRoaXMubWF4RnJhY3Rpb25EaWdpdHMgPyB0aGlzLm1heEZyYWN0aW9uRGlnaXRzLmV2YWx1YXRlKGN0eCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9KS5mb3JtYXQodGhpcy5udW1iZXIuZXZhbHVhdGUoY3R4KSk7XG4gICAgfVxuXG4gICAgZWFjaENoaWxkKGZuOiAoXzogRXhwcmVzc2lvbikgPT4gdm9pZCkge1xuICAgICAgICBmbih0aGlzLm51bWJlcik7XG4gICAgICAgIGlmICh0aGlzLmxvY2FsZSkge1xuICAgICAgICAgICAgZm4odGhpcy5sb2NhbGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbmN5KSB7XG4gICAgICAgICAgICBmbih0aGlzLmN1cnJlbmN5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5taW5GcmFjdGlvbkRpZ2l0cykge1xuICAgICAgICAgICAgZm4odGhpcy5taW5GcmFjdGlvbkRpZ2l0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWF4RnJhY3Rpb25EaWdpdHMpIHtcbiAgICAgICAgICAgIGZuKHRoaXMubWF4RnJhY3Rpb25EaWdpdHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb3V0cHV0RGVmaW5lZCgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuICAgICAgICBpZiAodGhpcy5sb2NhbGUpIHtcbiAgICAgICAgICAgIG9wdGlvbnNbJ2xvY2FsZSddID0gdGhpcy5sb2NhbGUuc2VyaWFsaXplKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY3VycmVuY3kpIHtcbiAgICAgICAgICAgIG9wdGlvbnNbJ2N1cnJlbmN5J10gPSB0aGlzLmN1cnJlbmN5LnNlcmlhbGl6ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1pbkZyYWN0aW9uRGlnaXRzKSB7XG4gICAgICAgICAgICBvcHRpb25zWydtaW4tZnJhY3Rpb24tZGlnaXRzJ10gPSB0aGlzLm1pbkZyYWN0aW9uRGlnaXRzLnNlcmlhbGl6ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1heEZyYWN0aW9uRGlnaXRzKSB7XG4gICAgICAgICAgICBvcHRpb25zWydtYXgtZnJhY3Rpb24tZGlnaXRzJ10gPSB0aGlzLm1heEZyYWN0aW9uRGlnaXRzLnNlcmlhbGl6ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXCJudW1iZXItZm9ybWF0XCIsIHRoaXMubnVtYmVyLnNlcmlhbGl6ZSgpLCBvcHRpb25zXTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge051bWJlclR5cGUsIHRvU3RyaW5nfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7dHlwZU9mfSBmcm9tICcuLi92YWx1ZXMnO1xuaW1wb3J0IFJ1bnRpbWVFcnJvciBmcm9tICcuLi9ydW50aW1lX2Vycm9yJztcblxuaW1wb3J0IHR5cGUge0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUgUGFyc2luZ0NvbnRleHQgZnJvbSAnLi4vcGFyc2luZ19jb250ZXh0JztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25Db250ZXh0IGZyb20gJy4uL2V2YWx1YXRpb25fY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5jbGFzcyBMZW5ndGggaW1wbGVtZW50cyBFeHByZXNzaW9uIHtcbiAgICB0eXBlOiBUeXBlO1xuICAgIGlucHV0OiBFeHByZXNzaW9uO1xuXG4gICAgY29uc3RydWN0b3IoaW5wdXQ6IEV4cHJlc3Npb24pIHtcbiAgICAgICAgdGhpcy50eXBlID0gTnVtYmVyVHlwZTtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZShhcmdzOiAkUmVhZE9ubHlBcnJheTxtaXhlZD4sIGNvbnRleHQ6IFBhcnNpbmdDb250ZXh0KSB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCAhPT0gMilcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCAxIGFyZ3VtZW50LCBidXQgZm91bmQgJHthcmdzLmxlbmd0aCAtIDF9IGluc3RlYWQuYCk7XG5cbiAgICAgICAgY29uc3QgaW5wdXQgPSBjb250ZXh0LnBhcnNlKGFyZ3NbMV0sIDEpO1xuICAgICAgICBpZiAoIWlucHV0KSByZXR1cm4gbnVsbDtcblxuICAgICAgICBpZiAoaW5wdXQudHlwZS5raW5kICE9PSAnYXJyYXknICYmIGlucHV0LnR5cGUua2luZCAhPT0gJ3N0cmluZycgJiYgaW5wdXQudHlwZS5raW5kICE9PSAndmFsdWUnKVxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZXJyb3IoYEV4cGVjdGVkIGFyZ3VtZW50IG9mIHR5cGUgc3RyaW5nIG9yIGFycmF5LCBidXQgZm91bmQgJHt0b1N0cmluZyhpbnB1dC50eXBlKX0gaW5zdGVhZC5gKTtcblxuICAgICAgICByZXR1cm4gbmV3IExlbmd0aChpbnB1dCk7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoY3R4OiBFdmFsdWF0aW9uQ29udGV4dCkge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuaW5wdXQuZXZhbHVhdGUoY3R4KTtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dC5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dC5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUVycm9yKGBFeHBlY3RlZCB2YWx1ZSB0byBiZSBvZiB0eXBlIHN0cmluZyBvciBhcnJheSwgYnV0IGZvdW5kICR7dG9TdHJpbmcodHlwZU9mKGlucHV0KSl9IGluc3RlYWQuYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlYWNoQ2hpbGQoZm46IChfOiBFeHByZXNzaW9uKSA9PiB2b2lkKSB7XG4gICAgICAgIGZuKHRoaXMuaW5wdXQpO1xuICAgIH1cblxuICAgIG91dHB1dERlZmluZWQoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBbXCJsZW5ndGhcIl07XG4gICAgICAgIHRoaXMuZWFjaENoaWxkKGNoaWxkID0+IHsgc2VyaWFsaXplZC5wdXNoKGNoaWxkLnNlcmlhbGl6ZSgpKTsgfSk7XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVkO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGVuZ3RoO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtcbiAgICB0eXBlIFR5cGUsXG4gICAgTnVtYmVyVHlwZSxcbiAgICBTdHJpbmdUeXBlLFxuICAgIEJvb2xlYW5UeXBlLFxuICAgIENvbG9yVHlwZSxcbiAgICBPYmplY3RUeXBlLFxuICAgIFZhbHVlVHlwZSxcbiAgICBFcnJvclR5cGUsXG4gICAgQ29sbGF0b3JUeXBlLFxuICAgIGFycmF5LFxuICAgIHRvU3RyaW5nIGFzIHR5cGVUb1N0cmluZ1xufSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7dHlwZU9mLCBDb2xvciwgdmFsaWRhdGVSR0JBLCB0b1N0cmluZyBhcyB2YWx1ZVRvU3RyaW5nfSBmcm9tICcuLi92YWx1ZXMnO1xuaW1wb3J0IENvbXBvdW5kRXhwcmVzc2lvbiBmcm9tICcuLi9jb21wb3VuZF9leHByZXNzaW9uJztcbmltcG9ydCBSdW50aW1lRXJyb3IgZnJvbSAnLi4vcnVudGltZV9lcnJvcic7XG5pbXBvcnQgTGV0IGZyb20gJy4vbGV0JztcbmltcG9ydCBWYXIgZnJvbSAnLi92YXInO1xuaW1wb3J0IExpdGVyYWwgZnJvbSAnLi9saXRlcmFsJztcbmltcG9ydCBBc3NlcnRpb24gZnJvbSAnLi9hc3NlcnRpb24nO1xuaW1wb3J0IENvZXJjaW9uIGZyb20gJy4vY29lcmNpb24nO1xuaW1wb3J0IEF0IGZyb20gJy4vYXQnO1xuaW1wb3J0IEluIGZyb20gJy4vaW4nO1xuaW1wb3J0IEluZGV4T2YgZnJvbSAnLi9pbmRleF9vZic7XG5pbXBvcnQgTWF0Y2ggZnJvbSAnLi9tYXRjaCc7XG5pbXBvcnQgQ2FzZSBmcm9tICcuL2Nhc2UnO1xuaW1wb3J0IFNsaWNlIGZyb20gJy4vc2xpY2UnO1xuaW1wb3J0IFN0ZXAgZnJvbSAnLi9zdGVwJztcbmltcG9ydCBJbnRlcnBvbGF0ZSBmcm9tICcuL2ludGVycG9sYXRlJztcbmltcG9ydCBDb2FsZXNjZSBmcm9tICcuL2NvYWxlc2NlJztcbmltcG9ydCB7XG4gICAgRXF1YWxzLFxuICAgIE5vdEVxdWFscyxcbiAgICBMZXNzVGhhbixcbiAgICBHcmVhdGVyVGhhbixcbiAgICBMZXNzVGhhbk9yRXF1YWwsXG4gICAgR3JlYXRlclRoYW5PckVxdWFsXG59IGZyb20gJy4vY29tcGFyaXNvbic7XG5pbXBvcnQgQ29sbGF0b3JFeHByZXNzaW9uIGZyb20gJy4vY29sbGF0b3InO1xuaW1wb3J0IE51bWJlckZvcm1hdCBmcm9tICcuL251bWJlcl9mb3JtYXQnO1xuaW1wb3J0IEZvcm1hdEV4cHJlc3Npb24gZnJvbSAnLi9mb3JtYXQnO1xuaW1wb3J0IEltYWdlRXhwcmVzc2lvbiBmcm9tICcuL2ltYWdlJztcbmltcG9ydCBMZW5ndGggZnJvbSAnLi9sZW5ndGgnO1xuaW1wb3J0IFdpdGhpbiBmcm9tICcuL3dpdGhpbic7XG5cbmltcG9ydCB0eXBlIHtWYXJhcmdzfSBmcm9tICcuLi9jb21wb3VuZF9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIHtFeHByZXNzaW9uUmVnaXN0cnl9IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuXG5jb25zdCBleHByZXNzaW9uczogRXhwcmVzc2lvblJlZ2lzdHJ5ID0ge1xuICAgIC8vIHNwZWNpYWwgZm9ybXNcbiAgICAnPT0nOiBFcXVhbHMsXG4gICAgJyE9JzogTm90RXF1YWxzLFxuICAgICc+JzogR3JlYXRlclRoYW4sXG4gICAgJzwnOiBMZXNzVGhhbixcbiAgICAnPj0nOiBHcmVhdGVyVGhhbk9yRXF1YWwsXG4gICAgJzw9JzogTGVzc1RoYW5PckVxdWFsLFxuICAgICdhcnJheSc6IEFzc2VydGlvbixcbiAgICAnYXQnOiBBdCxcbiAgICAnYm9vbGVhbic6IEFzc2VydGlvbixcbiAgICAnY2FzZSc6IENhc2UsXG4gICAgJ2NvYWxlc2NlJzogQ29hbGVzY2UsXG4gICAgJ2NvbGxhdG9yJzogQ29sbGF0b3JFeHByZXNzaW9uLFxuICAgICdmb3JtYXQnOiBGb3JtYXRFeHByZXNzaW9uLFxuICAgICdpbWFnZSc6IEltYWdlRXhwcmVzc2lvbixcbiAgICAnaW4nOiBJbixcbiAgICAnaW5kZXgtb2YnOiBJbmRleE9mLFxuICAgICdpbnRlcnBvbGF0ZSc6IEludGVycG9sYXRlLFxuICAgICdpbnRlcnBvbGF0ZS1oY2wnOiBJbnRlcnBvbGF0ZSxcbiAgICAnaW50ZXJwb2xhdGUtbGFiJzogSW50ZXJwb2xhdGUsXG4gICAgJ2xlbmd0aCc6IExlbmd0aCxcbiAgICAnbGV0JzogTGV0LFxuICAgICdsaXRlcmFsJzogTGl0ZXJhbCxcbiAgICAnbWF0Y2gnOiBNYXRjaCxcbiAgICAnbnVtYmVyJzogQXNzZXJ0aW9uLFxuICAgICdudW1iZXItZm9ybWF0JzogTnVtYmVyRm9ybWF0LFxuICAgICdvYmplY3QnOiBBc3NlcnRpb24sXG4gICAgJ3NsaWNlJzogU2xpY2UsXG4gICAgJ3N0ZXAnOiBTdGVwLFxuICAgICdzdHJpbmcnOiBBc3NlcnRpb24sXG4gICAgJ3RvLWJvb2xlYW4nOiBDb2VyY2lvbixcbiAgICAndG8tY29sb3InOiBDb2VyY2lvbixcbiAgICAndG8tbnVtYmVyJzogQ29lcmNpb24sXG4gICAgJ3RvLXN0cmluZyc6IENvZXJjaW9uLFxuICAgICd2YXInOiBWYXIsXG4gICAgJ3dpdGhpbic6IFdpdGhpblxufTtcblxuZnVuY3Rpb24gcmdiYShjdHgsIFtyLCBnLCBiLCBhXSkge1xuICAgIHIgPSByLmV2YWx1YXRlKGN0eCk7XG4gICAgZyA9IGcuZXZhbHVhdGUoY3R4KTtcbiAgICBiID0gYi5ldmFsdWF0ZShjdHgpO1xuICAgIGNvbnN0IGFscGhhID0gYSA/IGEuZXZhbHVhdGUoY3R4KSA6IDE7XG4gICAgY29uc3QgZXJyb3IgPSB2YWxpZGF0ZVJHQkEociwgZywgYiwgYWxwaGEpO1xuICAgIGlmIChlcnJvcikgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihlcnJvcik7XG4gICAgcmV0dXJuIG5ldyBDb2xvcihyIC8gMjU1ICogYWxwaGEsIGcgLyAyNTUgKiBhbHBoYSwgYiAvIDI1NSAqIGFscGhhLCBhbHBoYSk7XG59XG5cbmZ1bmN0aW9uIGhhcyhrZXksIG9iaikge1xuICAgIHJldHVybiBrZXkgaW4gb2JqO1xufVxuXG5mdW5jdGlvbiBnZXQoa2V5LCBvYmopIHtcbiAgICBjb25zdCB2ID0gb2JqW2tleV07XG4gICAgcmV0dXJuIHR5cGVvZiB2ID09PSAndW5kZWZpbmVkJyA/IG51bGwgOiB2O1xufVxuXG5mdW5jdGlvbiBiaW5hcnlTZWFyY2godiwgYSwgaSwgaikge1xuICAgIHdoaWxlIChpIDw9IGopIHtcbiAgICAgICAgY29uc3QgbSA9IChpICsgaikgPj4gMTtcbiAgICAgICAgaWYgKGFbbV0gPT09IHYpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKGFbbV0gPiB2KVxuICAgICAgICAgICAgaiA9IG0gLSAxO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBpID0gbSArIDE7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdmFyYXJncyh0eXBlOiBUeXBlKTogVmFyYXJncyB7XG4gICAgcmV0dXJuIHt0eXBlfTtcbn1cblxuQ29tcG91bmRFeHByZXNzaW9uLnJlZ2lzdGVyKGV4cHJlc3Npb25zLCB7XG4gICAgJ2Vycm9yJzogW1xuICAgICAgICBFcnJvclR5cGUsXG4gICAgICAgIFtTdHJpbmdUeXBlXSxcbiAgICAgICAgKGN0eCwgW3ZdKSA9PiB7IHRocm93IG5ldyBSdW50aW1lRXJyb3Iodi5ldmFsdWF0ZShjdHgpKTsgfVxuICAgIF0sXG4gICAgJ3R5cGVvZic6IFtcbiAgICAgICAgU3RyaW5nVHlwZSxcbiAgICAgICAgW1ZhbHVlVHlwZV0sXG4gICAgICAgIChjdHgsIFt2XSkgPT4gdHlwZVRvU3RyaW5nKHR5cGVPZih2LmV2YWx1YXRlKGN0eCkpKVxuICAgIF0sXG4gICAgJ3RvLXJnYmEnOiBbXG4gICAgICAgIGFycmF5KE51bWJlclR5cGUsIDQpLFxuICAgICAgICBbQ29sb3JUeXBlXSxcbiAgICAgICAgKGN0eCwgW3ZdKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdi5ldmFsdWF0ZShjdHgpLnRvQXJyYXkoKTtcbiAgICAgICAgfVxuICAgIF0sXG4gICAgJ3JnYic6IFtcbiAgICAgICAgQ29sb3JUeXBlLFxuICAgICAgICBbTnVtYmVyVHlwZSwgTnVtYmVyVHlwZSwgTnVtYmVyVHlwZV0sXG4gICAgICAgIHJnYmFcbiAgICBdLFxuICAgICdyZ2JhJzogW1xuICAgICAgICBDb2xvclR5cGUsXG4gICAgICAgIFtOdW1iZXJUeXBlLCBOdW1iZXJUeXBlLCBOdW1iZXJUeXBlLCBOdW1iZXJUeXBlXSxcbiAgICAgICAgcmdiYVxuICAgIF0sXG4gICAgJ2hhcyc6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhblR5cGUsXG4gICAgICAgIG92ZXJsb2FkczogW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFtTdHJpbmdUeXBlXSxcbiAgICAgICAgICAgICAgICAoY3R4LCBba2V5XSkgPT4gaGFzKGtleS5ldmFsdWF0ZShjdHgpLCBjdHgucHJvcGVydGllcygpKVxuICAgICAgICAgICAgXSwgW1xuICAgICAgICAgICAgICAgIFtTdHJpbmdUeXBlLCBPYmplY3RUeXBlXSxcbiAgICAgICAgICAgICAgICAoY3R4LCBba2V5LCBvYmpdKSA9PiBoYXMoa2V5LmV2YWx1YXRlKGN0eCksIG9iai5ldmFsdWF0ZShjdHgpKVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgfSxcbiAgICAnZ2V0Jzoge1xuICAgICAgICB0eXBlOiBWYWx1ZVR5cGUsXG4gICAgICAgIG92ZXJsb2FkczogW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFtTdHJpbmdUeXBlXSxcbiAgICAgICAgICAgICAgICAoY3R4LCBba2V5XSkgPT4gZ2V0KGtleS5ldmFsdWF0ZShjdHgpLCBjdHgucHJvcGVydGllcygpKVxuICAgICAgICAgICAgXSwgW1xuICAgICAgICAgICAgICAgIFtTdHJpbmdUeXBlLCBPYmplY3RUeXBlXSxcbiAgICAgICAgICAgICAgICAoY3R4LCBba2V5LCBvYmpdKSA9PiBnZXQoa2V5LmV2YWx1YXRlKGN0eCksIG9iai5ldmFsdWF0ZShjdHgpKVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgfSxcbiAgICAnZmVhdHVyZS1zdGF0ZSc6IFtcbiAgICAgICAgVmFsdWVUeXBlLFxuICAgICAgICBbU3RyaW5nVHlwZV0sXG4gICAgICAgIChjdHgsIFtrZXldKSA9PiBnZXQoa2V5LmV2YWx1YXRlKGN0eCksIGN0eC5mZWF0dXJlU3RhdGUgfHwge30pXG4gICAgXSxcbiAgICAncHJvcGVydGllcyc6IFtcbiAgICAgICAgT2JqZWN0VHlwZSxcbiAgICAgICAgW10sXG4gICAgICAgIChjdHgpID0+IGN0eC5wcm9wZXJ0aWVzKClcbiAgICBdLFxuICAgICdnZW9tZXRyeS10eXBlJzogW1xuICAgICAgICBTdHJpbmdUeXBlLFxuICAgICAgICBbXSxcbiAgICAgICAgKGN0eCkgPT4gY3R4Lmdlb21ldHJ5VHlwZSgpXG4gICAgXSxcbiAgICAnaWQnOiBbXG4gICAgICAgIFZhbHVlVHlwZSxcbiAgICAgICAgW10sXG4gICAgICAgIChjdHgpID0+IGN0eC5pZCgpXG4gICAgXSxcbiAgICAnem9vbSc6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW10sXG4gICAgICAgIChjdHgpID0+IGN0eC5nbG9iYWxzLnpvb21cbiAgICBdLFxuICAgICdoZWF0bWFwLWRlbnNpdHknOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtdLFxuICAgICAgICAoY3R4KSA9PiBjdHguZ2xvYmFscy5oZWF0bWFwRGVuc2l0eSB8fCAwXG4gICAgXSxcbiAgICAnbGluZS1wcm9ncmVzcyc6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW10sXG4gICAgICAgIChjdHgpID0+IGN0eC5nbG9iYWxzLmxpbmVQcm9ncmVzcyB8fCAwXG4gICAgXSxcbiAgICAnYWNjdW11bGF0ZWQnOiBbXG4gICAgICAgIFZhbHVlVHlwZSxcbiAgICAgICAgW10sXG4gICAgICAgIChjdHgpID0+IGN0eC5nbG9iYWxzLmFjY3VtdWxhdGVkID09PSB1bmRlZmluZWQgPyBudWxsIDogY3R4Lmdsb2JhbHMuYWNjdW11bGF0ZWRcbiAgICBdLFxuICAgICcrJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICB2YXJhcmdzKE51bWJlclR5cGUpLFxuICAgICAgICAoY3R4LCBhcmdzKSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gMDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYXJnIG9mIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gYXJnLmV2YWx1YXRlKGN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgXSxcbiAgICAnKic6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgdmFyYXJncyhOdW1iZXJUeXBlKSxcbiAgICAgICAgKGN0eCwgYXJncykgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IDE7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFyZyBvZiBhcmdzKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICo9IGFyZy5ldmFsdWF0ZShjdHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIF0sXG4gICAgJy0nOiB7XG4gICAgICAgIHR5cGU6IE51bWJlclR5cGUsXG4gICAgICAgIG92ZXJsb2FkczogW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFtOdW1iZXJUeXBlLCBOdW1iZXJUeXBlXSxcbiAgICAgICAgICAgICAgICAoY3R4LCBbYSwgYl0pID0+IGEuZXZhbHVhdGUoY3R4KSAtIGIuZXZhbHVhdGUoY3R4KVxuICAgICAgICAgICAgXSwgW1xuICAgICAgICAgICAgICAgIFtOdW1iZXJUeXBlXSxcbiAgICAgICAgICAgICAgICAoY3R4LCBbYV0pID0+IC1hLmV2YWx1YXRlKGN0eClcbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIH0sXG4gICAgJy8nOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtOdW1iZXJUeXBlLCBOdW1iZXJUeXBlXSxcbiAgICAgICAgKGN0eCwgW2EsIGJdKSA9PiBhLmV2YWx1YXRlKGN0eCkgLyBiLmV2YWx1YXRlKGN0eClcbiAgICBdLFxuICAgICclJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbTnVtYmVyVHlwZSwgTnVtYmVyVHlwZV0sXG4gICAgICAgIChjdHgsIFthLCBiXSkgPT4gYS5ldmFsdWF0ZShjdHgpICUgYi5ldmFsdWF0ZShjdHgpXG4gICAgXSxcbiAgICAnbG4yJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbXSxcbiAgICAgICAgKCkgPT4gTWF0aC5MTjJcbiAgICBdLFxuICAgICdwaSc6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW10sXG4gICAgICAgICgpID0+IE1hdGguUElcbiAgICBdLFxuICAgICdlJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbXSxcbiAgICAgICAgKCkgPT4gTWF0aC5FXG4gICAgXSxcbiAgICAnXic6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW051bWJlclR5cGUsIE51bWJlclR5cGVdLFxuICAgICAgICAoY3R4LCBbYiwgZV0pID0+IE1hdGgucG93KGIuZXZhbHVhdGUoY3R4KSwgZS5ldmFsdWF0ZShjdHgpKVxuICAgIF0sXG4gICAgJ3NxcnQnOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtOdW1iZXJUeXBlXSxcbiAgICAgICAgKGN0eCwgW3hdKSA9PiBNYXRoLnNxcnQoeC5ldmFsdWF0ZShjdHgpKVxuICAgIF0sXG4gICAgJ2xvZzEwJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbTnVtYmVyVHlwZV0sXG4gICAgICAgIChjdHgsIFtuXSkgPT4gTWF0aC5sb2cobi5ldmFsdWF0ZShjdHgpKSAvIE1hdGguTE4xMFxuICAgIF0sXG4gICAgJ2xuJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbTnVtYmVyVHlwZV0sXG4gICAgICAgIChjdHgsIFtuXSkgPT4gTWF0aC5sb2cobi5ldmFsdWF0ZShjdHgpKVxuICAgIF0sXG4gICAgJ2xvZzInOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtOdW1iZXJUeXBlXSxcbiAgICAgICAgKGN0eCwgW25dKSA9PiBNYXRoLmxvZyhuLmV2YWx1YXRlKGN0eCkpIC8gTWF0aC5MTjJcbiAgICBdLFxuICAgICdzaW4nOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtOdW1iZXJUeXBlXSxcbiAgICAgICAgKGN0eCwgW25dKSA9PiBNYXRoLnNpbihuLmV2YWx1YXRlKGN0eCkpXG4gICAgXSxcbiAgICAnY29zJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbTnVtYmVyVHlwZV0sXG4gICAgICAgIChjdHgsIFtuXSkgPT4gTWF0aC5jb3Mobi5ldmFsdWF0ZShjdHgpKVxuICAgIF0sXG4gICAgJ3Rhbic6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW051bWJlclR5cGVdLFxuICAgICAgICAoY3R4LCBbbl0pID0+IE1hdGgudGFuKG4uZXZhbHVhdGUoY3R4KSlcbiAgICBdLFxuICAgICdhc2luJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbTnVtYmVyVHlwZV0sXG4gICAgICAgIChjdHgsIFtuXSkgPT4gTWF0aC5hc2luKG4uZXZhbHVhdGUoY3R4KSlcbiAgICBdLFxuICAgICdhY29zJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbTnVtYmVyVHlwZV0sXG4gICAgICAgIChjdHgsIFtuXSkgPT4gTWF0aC5hY29zKG4uZXZhbHVhdGUoY3R4KSlcbiAgICBdLFxuICAgICdhdGFuJzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICBbTnVtYmVyVHlwZV0sXG4gICAgICAgIChjdHgsIFtuXSkgPT4gTWF0aC5hdGFuKG4uZXZhbHVhdGUoY3R4KSlcbiAgICBdLFxuICAgICdtaW4nOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIHZhcmFyZ3MoTnVtYmVyVHlwZSksXG4gICAgICAgIChjdHgsIGFyZ3MpID0+IE1hdGgubWluKC4uLmFyZ3MubWFwKGFyZyA9PiBhcmcuZXZhbHVhdGUoY3R4KSkpXG4gICAgXSxcbiAgICAnbWF4JzogW1xuICAgICAgICBOdW1iZXJUeXBlLFxuICAgICAgICB2YXJhcmdzKE51bWJlclR5cGUpLFxuICAgICAgICAoY3R4LCBhcmdzKSA9PiBNYXRoLm1heCguLi5hcmdzLm1hcChhcmcgPT4gYXJnLmV2YWx1YXRlKGN0eCkpKVxuICAgIF0sXG4gICAgJ2Ficyc6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW051bWJlclR5cGVdLFxuICAgICAgICAoY3R4LCBbbl0pID0+IE1hdGguYWJzKG4uZXZhbHVhdGUoY3R4KSlcbiAgICBdLFxuICAgICdyb3VuZCc6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW051bWJlclR5cGVdLFxuICAgICAgICAoY3R4LCBbbl0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHYgPSBuLmV2YWx1YXRlKGN0eCk7XG4gICAgICAgICAgICAvLyBKYXZhc2NyaXB0J3MgTWF0aC5yb3VuZCgpIHJvdW5kcyB0b3dhcmRzICtJbmZpbml0eSBmb3IgaGFsZndheVxuICAgICAgICAgICAgLy8gdmFsdWVzLCBldmVuIHdoZW4gdGhleSdyZSBuZWdhdGl2ZS4gSXQncyBtb3JlIGNvbW1vbiB0byByb3VuZFxuICAgICAgICAgICAgLy8gYXdheSBmcm9tIDAgKGUuZy4sIHRoaXMgaXMgd2hhdCBweXRob24gYW5kIEMrKyBkbylcbiAgICAgICAgICAgIHJldHVybiB2IDwgMCA/IC1NYXRoLnJvdW5kKC12KSA6IE1hdGgucm91bmQodik7XG4gICAgICAgIH1cbiAgICBdLFxuICAgICdmbG9vcic6IFtcbiAgICAgICAgTnVtYmVyVHlwZSxcbiAgICAgICAgW051bWJlclR5cGVdLFxuICAgICAgICAoY3R4LCBbbl0pID0+IE1hdGguZmxvb3Iobi5ldmFsdWF0ZShjdHgpKVxuICAgIF0sXG4gICAgJ2NlaWwnOiBbXG4gICAgICAgIE51bWJlclR5cGUsXG4gICAgICAgIFtOdW1iZXJUeXBlXSxcbiAgICAgICAgKGN0eCwgW25dKSA9PiBNYXRoLmNlaWwobi5ldmFsdWF0ZShjdHgpKVxuICAgIF0sXG4gICAgJ2ZpbHRlci09PSc6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtTdHJpbmdUeXBlLCBWYWx1ZVR5cGVdLFxuICAgICAgICAoY3R4LCBbaywgdl0pID0+IGN0eC5wcm9wZXJ0aWVzKClbKGs6IGFueSkudmFsdWVdID09PSAodjogYW55KS52YWx1ZVxuICAgIF0sXG4gICAgJ2ZpbHRlci1pZC09PSc6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtWYWx1ZVR5cGVdLFxuICAgICAgICAoY3R4LCBbdl0pID0+IGN0eC5pZCgpID09PSAodjogYW55KS52YWx1ZVxuICAgIF0sXG4gICAgJ2ZpbHRlci10eXBlLT09JzogW1xuICAgICAgICBCb29sZWFuVHlwZSxcbiAgICAgICAgW1N0cmluZ1R5cGVdLFxuICAgICAgICAoY3R4LCBbdl0pID0+IGN0eC5nZW9tZXRyeVR5cGUoKSA9PT0gKHY6IGFueSkudmFsdWVcbiAgICBdLFxuICAgICdmaWx0ZXItPCc6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtTdHJpbmdUeXBlLCBWYWx1ZVR5cGVdLFxuICAgICAgICAoY3R4LCBbaywgdl0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSBjdHgucHJvcGVydGllcygpWyhrOiBhbnkpLnZhbHVlXTtcbiAgICAgICAgICAgIGNvbnN0IGIgPSAodjogYW55KS52YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYSA9PT0gdHlwZW9mIGIgJiYgYSA8IGI7XG4gICAgICAgIH1cbiAgICBdLFxuICAgICdmaWx0ZXItaWQtPCc6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtWYWx1ZVR5cGVdLFxuICAgICAgICAoY3R4LCBbdl0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSBjdHguaWQoKTtcbiAgICAgICAgICAgIGNvbnN0IGIgPSAodjogYW55KS52YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYSA9PT0gdHlwZW9mIGIgJiYgYSA8IGI7XG4gICAgICAgIH1cbiAgICBdLFxuICAgICdmaWx0ZXItPic6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtTdHJpbmdUeXBlLCBWYWx1ZVR5cGVdLFxuICAgICAgICAoY3R4LCBbaywgdl0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSBjdHgucHJvcGVydGllcygpWyhrOiBhbnkpLnZhbHVlXTtcbiAgICAgICAgICAgIGNvbnN0IGIgPSAodjogYW55KS52YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYSA9PT0gdHlwZW9mIGIgJiYgYSA+IGI7XG4gICAgICAgIH1cbiAgICBdLFxuICAgICdmaWx0ZXItaWQtPic6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtWYWx1ZVR5cGVdLFxuICAgICAgICAoY3R4LCBbdl0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSBjdHguaWQoKTtcbiAgICAgICAgICAgIGNvbnN0IGIgPSAodjogYW55KS52YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYSA9PT0gdHlwZW9mIGIgJiYgYSA+IGI7XG4gICAgICAgIH1cbiAgICBdLFxuICAgICdmaWx0ZXItPD0nOiBbXG4gICAgICAgIEJvb2xlYW5UeXBlLFxuICAgICAgICBbU3RyaW5nVHlwZSwgVmFsdWVUeXBlXSxcbiAgICAgICAgKGN0eCwgW2ssIHZdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhID0gY3R4LnByb3BlcnRpZXMoKVsoazogYW55KS52YWx1ZV07XG4gICAgICAgICAgICBjb25zdCBiID0gKHY6IGFueSkudmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGEgPT09IHR5cGVvZiBiICYmIGEgPD0gYjtcbiAgICAgICAgfVxuICAgIF0sXG4gICAgJ2ZpbHRlci1pZC08PSc6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtWYWx1ZVR5cGVdLFxuICAgICAgICAoY3R4LCBbdl0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSBjdHguaWQoKTtcbiAgICAgICAgICAgIGNvbnN0IGIgPSAodjogYW55KS52YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYSA9PT0gdHlwZW9mIGIgJiYgYSA8PSBiO1xuICAgICAgICB9XG4gICAgXSxcbiAgICAnZmlsdGVyLT49JzogW1xuICAgICAgICBCb29sZWFuVHlwZSxcbiAgICAgICAgW1N0cmluZ1R5cGUsIFZhbHVlVHlwZV0sXG4gICAgICAgIChjdHgsIFtrLCB2XSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYSA9IGN0eC5wcm9wZXJ0aWVzKClbKGs6IGFueSkudmFsdWVdO1xuICAgICAgICAgICAgY29uc3QgYiA9ICh2OiBhbnkpLnZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBhID09PSB0eXBlb2YgYiAmJiBhID49IGI7XG4gICAgICAgIH1cbiAgICBdLFxuICAgICdmaWx0ZXItaWQtPj0nOiBbXG4gICAgICAgIEJvb2xlYW5UeXBlLFxuICAgICAgICBbVmFsdWVUeXBlXSxcbiAgICAgICAgKGN0eCwgW3ZdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhID0gY3R4LmlkKCk7XG4gICAgICAgICAgICBjb25zdCBiID0gKHY6IGFueSkudmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGEgPT09IHR5cGVvZiBiICYmIGEgPj0gYjtcbiAgICAgICAgfVxuICAgIF0sXG4gICAgJ2ZpbHRlci1oYXMnOiBbXG4gICAgICAgIEJvb2xlYW5UeXBlLFxuICAgICAgICBbVmFsdWVUeXBlXSxcbiAgICAgICAgKGN0eCwgW2tdKSA9PiAoazogYW55KS52YWx1ZSBpbiBjdHgucHJvcGVydGllcygpXG4gICAgXSxcbiAgICAnZmlsdGVyLWhhcy1pZCc6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtdLFxuICAgICAgICAoY3R4KSA9PiAoY3R4LmlkKCkgIT09IG51bGwgJiYgY3R4LmlkKCkgIT09IHVuZGVmaW5lZClcbiAgICBdLFxuICAgICdmaWx0ZXItdHlwZS1pbic6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFthcnJheShTdHJpbmdUeXBlKV0sXG4gICAgICAgIChjdHgsIFt2XSkgPT4gKHY6IGFueSkudmFsdWUuaW5kZXhPZihjdHguZ2VvbWV0cnlUeXBlKCkpID49IDBcbiAgICBdLFxuICAgICdmaWx0ZXItaWQtaW4nOiBbXG4gICAgICAgIEJvb2xlYW5UeXBlLFxuICAgICAgICBbYXJyYXkoVmFsdWVUeXBlKV0sXG4gICAgICAgIChjdHgsIFt2XSkgPT4gKHY6IGFueSkudmFsdWUuaW5kZXhPZihjdHguaWQoKSkgPj0gMFxuICAgIF0sXG4gICAgJ2ZpbHRlci1pbi1zbWFsbCc6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtTdHJpbmdUeXBlLCBhcnJheShWYWx1ZVR5cGUpXSxcbiAgICAgICAgLy8gYXNzdW1lcyB2IGlzIGFuIGFycmF5IGxpdGVyYWxcbiAgICAgICAgKGN0eCwgW2ssIHZdKSA9PiAodjogYW55KS52YWx1ZS5pbmRleE9mKGN0eC5wcm9wZXJ0aWVzKClbKGs6IGFueSkudmFsdWVdKSA+PSAwXG4gICAgXSxcbiAgICAnZmlsdGVyLWluLWxhcmdlJzogW1xuICAgICAgICBCb29sZWFuVHlwZSxcbiAgICAgICAgW1N0cmluZ1R5cGUsIGFycmF5KFZhbHVlVHlwZSldLFxuICAgICAgICAvLyBhc3N1bWVzIHYgaXMgYSBhcnJheSBsaXRlcmFsIHdpdGggdmFsdWVzIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXIgYW5kIG9mIGEgc2luZ2xlIHR5cGVcbiAgICAgICAgKGN0eCwgW2ssIHZdKSA9PiBiaW5hcnlTZWFyY2goY3R4LnByb3BlcnRpZXMoKVsoazogYW55KS52YWx1ZV0sICh2OiBhbnkpLnZhbHVlLCAwLCAodjogYW55KS52YWx1ZS5sZW5ndGggLSAxKVxuICAgIF0sXG4gICAgJ2FsbCc6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhblR5cGUsXG4gICAgICAgIG92ZXJsb2FkczogW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFtCb29sZWFuVHlwZSwgQm9vbGVhblR5cGVdLFxuICAgICAgICAgICAgICAgIChjdHgsIFthLCBiXSkgPT4gYS5ldmFsdWF0ZShjdHgpICYmIGIuZXZhbHVhdGUoY3R4KVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICB2YXJhcmdzKEJvb2xlYW5UeXBlKSxcbiAgICAgICAgICAgICAgICAoY3R4LCBhcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYXJnIG9mIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmV2YWx1YXRlKGN0eCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgIH0sXG4gICAgJ2FueSc6IHtcbiAgICAgICAgdHlwZTogQm9vbGVhblR5cGUsXG4gICAgICAgIG92ZXJsb2FkczogW1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFtCb29sZWFuVHlwZSwgQm9vbGVhblR5cGVdLFxuICAgICAgICAgICAgICAgIChjdHgsIFthLCBiXSkgPT4gYS5ldmFsdWF0ZShjdHgpIHx8IGIuZXZhbHVhdGUoY3R4KVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICB2YXJhcmdzKEJvb2xlYW5UeXBlKSxcbiAgICAgICAgICAgICAgICAoY3R4LCBhcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYXJnIG9mIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmcuZXZhbHVhdGUoY3R4KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgfSxcbiAgICAnISc6IFtcbiAgICAgICAgQm9vbGVhblR5cGUsXG4gICAgICAgIFtCb29sZWFuVHlwZV0sXG4gICAgICAgIChjdHgsIFtiXSkgPT4gIWIuZXZhbHVhdGUoY3R4KVxuICAgIF0sXG4gICAgJ2lzLXN1cHBvcnRlZC1zY3JpcHQnOiBbXG4gICAgICAgIEJvb2xlYW5UeXBlLFxuICAgICAgICBbU3RyaW5nVHlwZV0sXG4gICAgICAgIC8vIEF0IHBhcnNlIHRpbWUgdGhpcyB3aWxsIGFsd2F5cyByZXR1cm4gdHJ1ZSwgc28gd2UgbmVlZCB0byBleGNsdWRlIHRoaXMgZXhwcmVzc2lvbiB3aXRoIGlzR2xvYmFsUHJvcGVydHlDb25zdGFudFxuICAgICAgICAoY3R4LCBbc10pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlzU3VwcG9ydGVkU2NyaXB0ID0gY3R4Lmdsb2JhbHMgJiYgY3R4Lmdsb2JhbHMuaXNTdXBwb3J0ZWRTY3JpcHQ7XG4gICAgICAgICAgICBpZiAoaXNTdXBwb3J0ZWRTY3JpcHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNTdXBwb3J0ZWRTY3JpcHQocy5ldmFsdWF0ZShjdHgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgXSxcbiAgICAndXBjYXNlJzogW1xuICAgICAgICBTdHJpbmdUeXBlLFxuICAgICAgICBbU3RyaW5nVHlwZV0sXG4gICAgICAgIChjdHgsIFtzXSkgPT4gcy5ldmFsdWF0ZShjdHgpLnRvVXBwZXJDYXNlKClcbiAgICBdLFxuICAgICdkb3duY2FzZSc6IFtcbiAgICAgICAgU3RyaW5nVHlwZSxcbiAgICAgICAgW1N0cmluZ1R5cGVdLFxuICAgICAgICAoY3R4LCBbc10pID0+IHMuZXZhbHVhdGUoY3R4KS50b0xvd2VyQ2FzZSgpXG4gICAgXSxcbiAgICAnY29uY2F0JzogW1xuICAgICAgICBTdHJpbmdUeXBlLFxuICAgICAgICB2YXJhcmdzKFZhbHVlVHlwZSksXG4gICAgICAgIChjdHgsIGFyZ3MpID0+IGFyZ3MubWFwKGFyZyA9PiB2YWx1ZVRvU3RyaW5nKGFyZy5ldmFsdWF0ZShjdHgpKSkuam9pbignJylcbiAgICBdLFxuICAgICdyZXNvbHZlZC1sb2NhbGUnOiBbXG4gICAgICAgIFN0cmluZ1R5cGUsXG4gICAgICAgIFtDb2xsYXRvclR5cGVdLFxuICAgICAgICAoY3R4LCBbY29sbGF0b3JdKSA9PiBjb2xsYXRvci5ldmFsdWF0ZShjdHgpLnJlc29sdmVkTG9jYWxlKClcbiAgICBdXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZXhwcmVzc2lvbnM7XG4iLCIvLyBAZmxvd1xuXG4vKipcbiAqIEEgdHlwZSB1c2VkIGZvciByZXR1cm5pbmcgYW5kIHByb3BhZ2F0aW5nIGVycm9ycy4gVGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIHVuaW9uXG4gKiByZXByZXNlbnRzIHN1Y2Nlc3MgYW5kIGNvbnRhaW5zIGEgdmFsdWUsIGFuZCB0aGUgc2Vjb25kIHJlcHJlc2VudHMgYW4gZXJyb3IgYW5kXG4gKiBjb250YWlucyBhbiBlcnJvciB2YWx1ZS5cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCB0eXBlIFJlc3VsdDxULCBFPiA9XG4gICAgfCB7fCByZXN1bHQ6ICdzdWNjZXNzJywgdmFsdWU6IFQgfH1cbiAgICB8IHt8IHJlc3VsdDogJ2Vycm9yJywgdmFsdWU6IEUgfH07XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWNjZXNzPFQsIEU+KHZhbHVlOiBUKTogUmVzdWx0PFQsIEU+IHtcbiAgICByZXR1cm4ge3Jlc3VsdDogJ3N1Y2Nlc3MnLCB2YWx1ZX07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcnJvcjxULCBFPih2YWx1ZTogRSk6IFJlc3VsdDxULCBFPiB7XG4gICAgcmV0dXJuIHtyZXN1bHQ6ICdlcnJvcicsIHZhbHVlfTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB0eXBlIHtTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3J0c1Byb3BlcnR5RXhwcmVzc2lvbihzcGVjOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzcGVjWydwcm9wZXJ0eS10eXBlJ10gPT09ICdkYXRhLWRyaXZlbicgfHwgc3BlY1sncHJvcGVydHktdHlwZSddID09PSAnY3Jvc3MtZmFkZWQtZGF0YS1kcml2ZW4nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9ydHNab29tRXhwcmVzc2lvbihzcGVjOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXNwZWMuZXhwcmVzc2lvbiAmJiBzcGVjLmV4cHJlc3Npb24ucGFyYW1ldGVycy5pbmRleE9mKCd6b29tJykgPiAtMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvcnRzSW50ZXJwb2xhdGlvbihzcGVjOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXNwZWMuZXhwcmVzc2lvbiAmJiBzcGVjLmV4cHJlc3Npb24uaW50ZXJwb2xhdGVkO1xufVxuIiwiLy8gQGZsb3dcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VHlwZSh2YWw6IG1peGVkKTogc3RyaW5nIHtcbiAgICBpZiAodmFsIGluc3RhbmNlb2YgTnVtYmVyKSB7XG4gICAgICAgIHJldHVybiAnbnVtYmVyJztcbiAgICB9IGVsc2UgaWYgKHZhbCBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgICAgICByZXR1cm4gJ3N0cmluZyc7XG4gICAgfSBlbHNlIGlmICh2YWwgaW5zdGFuY2VvZiBCb29sZWFuKSB7XG4gICAgICAgIHJldHVybiAnYm9vbGVhbic7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAgcmV0dXJuICdhcnJheSc7XG4gICAgfSBlbHNlIGlmICh2YWwgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuICdudWxsJztcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbDtcbiAgICB9XG59XG4iLCJcbmltcG9ydCAqIGFzIGNvbG9yU3BhY2VzIGZyb20gJy4uL3V0aWwvY29sb3Jfc3BhY2VzJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi91dGlsL2NvbG9yJztcbmltcG9ydCBleHRlbmQgZnJvbSAnLi4vdXRpbC9leHRlbmQnO1xuaW1wb3J0IGdldFR5cGUgZnJvbSAnLi4vdXRpbC9nZXRfdHlwZSc7XG5pbXBvcnQgKiBhcyBpbnRlcnBvbGF0ZSBmcm9tICcuLi91dGlsL2ludGVycG9sYXRlJztcbmltcG9ydCBJbnRlcnBvbGF0ZSBmcm9tICcuLi9leHByZXNzaW9uL2RlZmluaXRpb25zL2ludGVycG9sYXRlJztcbmltcG9ydCBGb3JtYXR0ZWQgZnJvbSAnLi4vZXhwcmVzc2lvbi90eXBlcy9mb3JtYXR0ZWQnO1xuaW1wb3J0IFJlc29sdmVkSW1hZ2UgZnJvbSAnLi4vZXhwcmVzc2lvbi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5pbXBvcnQge3N1cHBvcnRzSW50ZXJwb2xhdGlvbn0gZnJvbSAnLi4vdXRpbC9wcm9wZXJ0aWVzJztcbmltcG9ydCB7ZmluZFN0b3BMZXNzVGhhbk9yRXF1YWxUb30gZnJvbSAnLi4vZXhwcmVzc2lvbi9zdG9wcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBpZGVudGl0eUZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4geDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uKHBhcmFtZXRlcnMsIHByb3BlcnR5U3BlYykge1xuICAgIGNvbnN0IGlzQ29sb3IgPSBwcm9wZXJ0eVNwZWMudHlwZSA9PT0gJ2NvbG9yJztcbiAgICBjb25zdCB6b29tQW5kRmVhdHVyZURlcGVuZGVudCA9IHBhcmFtZXRlcnMuc3RvcHMgJiYgdHlwZW9mIHBhcmFtZXRlcnMuc3RvcHNbMF1bMF0gPT09ICdvYmplY3QnO1xuICAgIGNvbnN0IGZlYXR1cmVEZXBlbmRlbnQgPSB6b29tQW5kRmVhdHVyZURlcGVuZGVudCB8fCBwYXJhbWV0ZXJzLnByb3BlcnR5ICE9PSB1bmRlZmluZWQ7XG4gICAgY29uc3Qgem9vbURlcGVuZGVudCA9IHpvb21BbmRGZWF0dXJlRGVwZW5kZW50IHx8ICFmZWF0dXJlRGVwZW5kZW50O1xuICAgIGNvbnN0IHR5cGUgPSBwYXJhbWV0ZXJzLnR5cGUgfHwgKHN1cHBvcnRzSW50ZXJwb2xhdGlvbihwcm9wZXJ0eVNwZWMpID8gJ2V4cG9uZW50aWFsJyA6ICdpbnRlcnZhbCcpO1xuXG4gICAgaWYgKGlzQ29sb3IpIHtcbiAgICAgICAgcGFyYW1ldGVycyA9IGV4dGVuZCh7fSwgcGFyYW1ldGVycyk7XG5cbiAgICAgICAgaWYgKHBhcmFtZXRlcnMuc3RvcHMpIHtcbiAgICAgICAgICAgIHBhcmFtZXRlcnMuc3RvcHMgPSBwYXJhbWV0ZXJzLnN0b3BzLm1hcCgoc3RvcCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBbc3RvcFswXSwgQ29sb3IucGFyc2Uoc3RvcFsxXSldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyYW1ldGVycy5kZWZhdWx0KSB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHQgPSBDb2xvci5wYXJzZShwYXJhbWV0ZXJzLmRlZmF1bHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0ID0gQ29sb3IucGFyc2UocHJvcGVydHlTcGVjLmRlZmF1bHQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtZXRlcnMuY29sb3JTcGFjZSAmJiBwYXJhbWV0ZXJzLmNvbG9yU3BhY2UgIT09ICdyZ2InICYmICFjb2xvclNwYWNlc1twYXJhbWV0ZXJzLmNvbG9yU3BhY2VdKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW1wb3J0L25hbWVzcGFjZVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gY29sb3Igc3BhY2U6ICR7cGFyYW1ldGVycy5jb2xvclNwYWNlfWApO1xuICAgIH1cblxuICAgIGxldCBpbm5lckZ1bjtcbiAgICBsZXQgaGFzaGVkU3RvcHM7XG4gICAgbGV0IGNhdGVnb3JpY2FsS2V5VHlwZTtcbiAgICBpZiAodHlwZSA9PT0gJ2V4cG9uZW50aWFsJykge1xuICAgICAgICBpbm5lckZ1biA9IGV2YWx1YXRlRXhwb25lbnRpYWxGdW5jdGlvbjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdpbnRlcnZhbCcpIHtcbiAgICAgICAgaW5uZXJGdW4gPSBldmFsdWF0ZUludGVydmFsRnVuY3Rpb247XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnY2F0ZWdvcmljYWwnKSB7XG4gICAgICAgIGlubmVyRnVuID0gZXZhbHVhdGVDYXRlZ29yaWNhbEZ1bmN0aW9uO1xuXG4gICAgICAgIC8vIEZvciBjYXRlZ29yaWNhbCBmdW5jdGlvbnMsIGdlbmVyYXRlIGFuIE9iamVjdCBhcyBhIGhhc2htYXAgb2YgdGhlIHN0b3BzIGZvciBmYXN0IHNlYXJjaGluZ1xuICAgICAgICBoYXNoZWRTdG9wcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIGZvciAoY29uc3Qgc3RvcCBvZiBwYXJhbWV0ZXJzLnN0b3BzKSB7XG4gICAgICAgICAgICBoYXNoZWRTdG9wc1tzdG9wWzBdXSA9IHN0b3BbMV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbmZlciBrZXkgdHlwZSBiYXNlZCBvbiBmaXJzdCBzdG9wIGtleS0tIHVzZWQgdG8gZW5jZm9yY2Ugc3RyaWN0IHR5cGUgY2hlY2tpbmcgbGF0ZXJcbiAgICAgICAgY2F0ZWdvcmljYWxLZXlUeXBlID0gdHlwZW9mIHBhcmFtZXRlcnMuc3RvcHNbMF1bMF07XG5cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdpZGVudGl0eScpIHtcbiAgICAgICAgaW5uZXJGdW4gPSBldmFsdWF0ZUlkZW50aXR5RnVuY3Rpb247XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGZ1bmN0aW9uIHR5cGUgXCIke3R5cGV9XCJgKTtcbiAgICB9XG5cbiAgICBpZiAoem9vbUFuZEZlYXR1cmVEZXBlbmRlbnQpIHtcbiAgICAgICAgY29uc3QgZmVhdHVyZUZ1bmN0aW9ucyA9IHt9O1xuICAgICAgICBjb25zdCB6b29tU3RvcHMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBwYXJhbWV0ZXJzLnN0b3BzLmxlbmd0aDsgcysrKSB7XG4gICAgICAgICAgICBjb25zdCBzdG9wID0gcGFyYW1ldGVycy5zdG9wc1tzXTtcbiAgICAgICAgICAgIGNvbnN0IHpvb20gPSBzdG9wWzBdLnpvb207XG4gICAgICAgICAgICBpZiAoZmVhdHVyZUZ1bmN0aW9uc1t6b29tXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZmVhdHVyZUZ1bmN0aW9uc1t6b29tXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgem9vbSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogcGFyYW1ldGVycy50eXBlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogcGFyYW1ldGVycy5wcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogcGFyYW1ldGVycy5kZWZhdWx0LFxuICAgICAgICAgICAgICAgICAgICBzdG9wczogW11cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHpvb21TdG9wcy5wdXNoKHpvb20pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmVhdHVyZUZ1bmN0aW9uc1t6b29tXS5zdG9wcy5wdXNoKFtzdG9wWzBdLnZhbHVlLCBzdG9wWzFdXSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmZWF0dXJlRnVuY3Rpb25TdG9wcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHogb2Ygem9vbVN0b3BzKSB7XG4gICAgICAgICAgICBmZWF0dXJlRnVuY3Rpb25TdG9wcy5wdXNoKFtmZWF0dXJlRnVuY3Rpb25zW3pdLnpvb20sIGNyZWF0ZUZ1bmN0aW9uKGZlYXR1cmVGdW5jdGlvbnNbel0sIHByb3BlcnR5U3BlYyldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGludGVycG9sYXRpb25UeXBlID0ge25hbWU6ICdsaW5lYXInfTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtpbmQ6ICdjb21wb3NpdGUnLFxuICAgICAgICAgICAgaW50ZXJwb2xhdGlvblR5cGUsXG4gICAgICAgICAgICBpbnRlcnBvbGF0aW9uRmFjdG9yOiBJbnRlcnBvbGF0ZS5pbnRlcnBvbGF0aW9uRmFjdG9yLmJpbmQodW5kZWZpbmVkLCBpbnRlcnBvbGF0aW9uVHlwZSksXG4gICAgICAgICAgICB6b29tU3RvcHM6IGZlYXR1cmVGdW5jdGlvblN0b3BzLm1hcChzID0+IHNbMF0pLFxuICAgICAgICAgICAgZXZhbHVhdGUoe3pvb219LCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV2YWx1YXRlRXhwb25lbnRpYWxGdW5jdGlvbih7XG4gICAgICAgICAgICAgICAgICAgIHN0b3BzOiBmZWF0dXJlRnVuY3Rpb25TdG9wcyxcbiAgICAgICAgICAgICAgICAgICAgYmFzZTogcGFyYW1ldGVycy5iYXNlXG4gICAgICAgICAgICAgICAgfSwgcHJvcGVydHlTcGVjLCB6b29tKS5ldmFsdWF0ZSh6b29tLCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHpvb21EZXBlbmRlbnQpIHtcbiAgICAgICAgY29uc3QgaW50ZXJwb2xhdGlvblR5cGUgPSB0eXBlID09PSAnZXhwb25lbnRpYWwnID9cbiAgICAgICAgICAgIHtuYW1lOiAnZXhwb25lbnRpYWwnLCBiYXNlOiBwYXJhbWV0ZXJzLmJhc2UgIT09IHVuZGVmaW5lZCA/IHBhcmFtZXRlcnMuYmFzZSA6IDF9IDogbnVsbDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtpbmQ6ICdjYW1lcmEnLFxuICAgICAgICAgICAgaW50ZXJwb2xhdGlvblR5cGUsXG4gICAgICAgICAgICBpbnRlcnBvbGF0aW9uRmFjdG9yOiBJbnRlcnBvbGF0ZS5pbnRlcnBvbGF0aW9uRmFjdG9yLmJpbmQodW5kZWZpbmVkLCBpbnRlcnBvbGF0aW9uVHlwZSksXG4gICAgICAgICAgICB6b29tU3RvcHM6IHBhcmFtZXRlcnMuc3RvcHMubWFwKHMgPT4gc1swXSksXG4gICAgICAgICAgICBldmFsdWF0ZTogKHt6b29tfSkgPT4gaW5uZXJGdW4ocGFyYW1ldGVycywgcHJvcGVydHlTcGVjLCB6b29tLCBoYXNoZWRTdG9wcywgY2F0ZWdvcmljYWxLZXlUeXBlKVxuICAgICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBraW5kOiAnc291cmNlJyxcbiAgICAgICAgICAgIGV2YWx1YXRlKF8sIGZlYXR1cmUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZlYXR1cmUgJiYgZmVhdHVyZS5wcm9wZXJ0aWVzID8gZmVhdHVyZS5wcm9wZXJ0aWVzW3BhcmFtZXRlcnMucHJvcGVydHldIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2FsZXNjZShwYXJhbWV0ZXJzLmRlZmF1bHQsIHByb3BlcnR5U3BlYy5kZWZhdWx0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlubmVyRnVuKHBhcmFtZXRlcnMsIHByb3BlcnR5U3BlYywgdmFsdWUsIGhhc2hlZFN0b3BzLCBjYXRlZ29yaWNhbEtleVR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY29hbGVzY2UoYSwgYiwgYykge1xuICAgIGlmIChhICE9PSB1bmRlZmluZWQpIHJldHVybiBhO1xuICAgIGlmIChiICE9PSB1bmRlZmluZWQpIHJldHVybiBiO1xuICAgIGlmIChjICE9PSB1bmRlZmluZWQpIHJldHVybiBjO1xufVxuXG5mdW5jdGlvbiBldmFsdWF0ZUNhdGVnb3JpY2FsRnVuY3Rpb24ocGFyYW1ldGVycywgcHJvcGVydHlTcGVjLCBpbnB1dCwgaGFzaGVkU3RvcHMsIGtleVR5cGUpIHtcbiAgICBjb25zdCBldmFsdWF0ZWQgPSB0eXBlb2YgaW5wdXQgPT09IGtleVR5cGUgPyBoYXNoZWRTdG9wc1tpbnB1dF0gOiB1bmRlZmluZWQ7IC8vIEVuZm9yY2Ugc3RyaWN0IHR5cGluZyBvbiBpbnB1dFxuICAgIHJldHVybiBjb2FsZXNjZShldmFsdWF0ZWQsIHBhcmFtZXRlcnMuZGVmYXVsdCwgcHJvcGVydHlTcGVjLmRlZmF1bHQpO1xufVxuXG5mdW5jdGlvbiBldmFsdWF0ZUludGVydmFsRnVuY3Rpb24ocGFyYW1ldGVycywgcHJvcGVydHlTcGVjLCBpbnB1dCkge1xuICAgIC8vIEVkZ2UgY2FzZXNcbiAgICBpZiAoZ2V0VHlwZShpbnB1dCkgIT09ICdudW1iZXInKSByZXR1cm4gY29hbGVzY2UocGFyYW1ldGVycy5kZWZhdWx0LCBwcm9wZXJ0eVNwZWMuZGVmYXVsdCk7XG4gICAgY29uc3QgbiA9IHBhcmFtZXRlcnMuc3RvcHMubGVuZ3RoO1xuICAgIGlmIChuID09PSAxKSByZXR1cm4gcGFyYW1ldGVycy5zdG9wc1swXVsxXTtcbiAgICBpZiAoaW5wdXQgPD0gcGFyYW1ldGVycy5zdG9wc1swXVswXSkgcmV0dXJuIHBhcmFtZXRlcnMuc3RvcHNbMF1bMV07XG4gICAgaWYgKGlucHV0ID49IHBhcmFtZXRlcnMuc3RvcHNbbiAtIDFdWzBdKSByZXR1cm4gcGFyYW1ldGVycy5zdG9wc1tuIC0gMV1bMV07XG5cbiAgICBjb25zdCBpbmRleCA9IGZpbmRTdG9wTGVzc1RoYW5PckVxdWFsVG8ocGFyYW1ldGVycy5zdG9wcy5tYXAoKHN0b3ApID0+IHN0b3BbMF0pLCBpbnB1dCk7XG5cbiAgICByZXR1cm4gcGFyYW1ldGVycy5zdG9wc1tpbmRleF1bMV07XG59XG5cbmZ1bmN0aW9uIGV2YWx1YXRlRXhwb25lbnRpYWxGdW5jdGlvbihwYXJhbWV0ZXJzLCBwcm9wZXJ0eVNwZWMsIGlucHV0KSB7XG4gICAgY29uc3QgYmFzZSA9IHBhcmFtZXRlcnMuYmFzZSAhPT0gdW5kZWZpbmVkID8gcGFyYW1ldGVycy5iYXNlIDogMTtcblxuICAgIC8vIEVkZ2UgY2FzZXNcbiAgICBpZiAoZ2V0VHlwZShpbnB1dCkgIT09ICdudW1iZXInKSByZXR1cm4gY29hbGVzY2UocGFyYW1ldGVycy5kZWZhdWx0LCBwcm9wZXJ0eVNwZWMuZGVmYXVsdCk7XG4gICAgY29uc3QgbiA9IHBhcmFtZXRlcnMuc3RvcHMubGVuZ3RoO1xuICAgIGlmIChuID09PSAxKSByZXR1cm4gcGFyYW1ldGVycy5zdG9wc1swXVsxXTtcbiAgICBpZiAoaW5wdXQgPD0gcGFyYW1ldGVycy5zdG9wc1swXVswXSkgcmV0dXJuIHBhcmFtZXRlcnMuc3RvcHNbMF1bMV07XG4gICAgaWYgKGlucHV0ID49IHBhcmFtZXRlcnMuc3RvcHNbbiAtIDFdWzBdKSByZXR1cm4gcGFyYW1ldGVycy5zdG9wc1tuIC0gMV1bMV07XG5cbiAgICBjb25zdCBpbmRleCA9IGZpbmRTdG9wTGVzc1RoYW5PckVxdWFsVG8ocGFyYW1ldGVycy5zdG9wcy5tYXAoKHN0b3ApID0+IHN0b3BbMF0pLCBpbnB1dCk7XG4gICAgY29uc3QgdCA9IGludGVycG9sYXRpb25GYWN0b3IoXG4gICAgICAgIGlucHV0LCBiYXNlLFxuICAgICAgICBwYXJhbWV0ZXJzLnN0b3BzW2luZGV4XVswXSxcbiAgICAgICAgcGFyYW1ldGVycy5zdG9wc1tpbmRleCArIDFdWzBdKTtcblxuICAgIGNvbnN0IG91dHB1dExvd2VyID0gcGFyYW1ldGVycy5zdG9wc1tpbmRleF1bMV07XG4gICAgY29uc3Qgb3V0cHV0VXBwZXIgPSBwYXJhbWV0ZXJzLnN0b3BzW2luZGV4ICsgMV1bMV07XG4gICAgbGV0IGludGVycCA9IGludGVycG9sYXRlW3Byb3BlcnR5U3BlYy50eXBlXSB8fCBpZGVudGl0eUZ1bmN0aW9uOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGltcG9ydC9uYW1lc3BhY2VcblxuICAgIGlmIChwYXJhbWV0ZXJzLmNvbG9yU3BhY2UgJiYgcGFyYW1ldGVycy5jb2xvclNwYWNlICE9PSAncmdiJykge1xuICAgICAgICBjb25zdCBjb2xvcnNwYWNlID0gY29sb3JTcGFjZXNbcGFyYW1ldGVycy5jb2xvclNwYWNlXTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbXBvcnQvbmFtZXNwYWNlXG4gICAgICAgIGludGVycCA9IChhLCBiKSA9PiBjb2xvcnNwYWNlLnJldmVyc2UoY29sb3JzcGFjZS5pbnRlcnBvbGF0ZShjb2xvcnNwYWNlLmZvcndhcmQoYSksIGNvbG9yc3BhY2UuZm9yd2FyZChiKSwgdCkpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3V0cHV0TG93ZXIuZXZhbHVhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGV2YWx1YXRlKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBldmFsdWF0ZWRMb3dlciA9IG91dHB1dExvd2VyLmV2YWx1YXRlLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZXZhbHVhdGVkVXBwZXIgPSBvdXRwdXRVcHBlci5ldmFsdWF0ZS5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgZmlsbC1vdXRsaW5lLWNvbG9yLCB3aGljaCBoYXMgbm8gc3BlYyBkZWZhdWx0LlxuICAgICAgICAgICAgICAgIGlmIChldmFsdWF0ZWRMb3dlciA9PT0gdW5kZWZpbmVkIHx8IGV2YWx1YXRlZFVwcGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGludGVycChldmFsdWF0ZWRMb3dlciwgZXZhbHVhdGVkVXBwZXIsIHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBpbnRlcnAob3V0cHV0TG93ZXIsIG91dHB1dFVwcGVyLCB0KTtcbn1cblxuZnVuY3Rpb24gZXZhbHVhdGVJZGVudGl0eUZ1bmN0aW9uKHBhcmFtZXRlcnMsIHByb3BlcnR5U3BlYywgaW5wdXQpIHtcbiAgICBpZiAocHJvcGVydHlTcGVjLnR5cGUgPT09ICdjb2xvcicpIHtcbiAgICAgICAgaW5wdXQgPSBDb2xvci5wYXJzZShpbnB1dCk7XG4gICAgfSBlbHNlIGlmIChwcm9wZXJ0eVNwZWMudHlwZSA9PT0gJ2Zvcm1hdHRlZCcpIHtcbiAgICAgICAgaW5wdXQgPSBGb3JtYXR0ZWQuZnJvbVN0cmluZyhpbnB1dC50b1N0cmluZygpKTtcbiAgICB9IGVsc2UgaWYgKHByb3BlcnR5U3BlYy50eXBlID09PSAncmVzb2x2ZWRJbWFnZScpIHtcbiAgICAgICAgaW5wdXQgPSBSZXNvbHZlZEltYWdlLmZyb21TdHJpbmcoaW5wdXQudG9TdHJpbmcoKSk7XG4gICAgfSBlbHNlIGlmIChnZXRUeXBlKGlucHV0KSAhPT0gcHJvcGVydHlTcGVjLnR5cGUgJiYgKHByb3BlcnR5U3BlYy50eXBlICE9PSAnZW51bScgfHwgIXByb3BlcnR5U3BlYy52YWx1ZXNbaW5wdXRdKSkge1xuICAgICAgICBpbnB1dCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGNvYWxlc2NlKGlucHV0LCBwYXJhbWV0ZXJzLmRlZmF1bHQsIHByb3BlcnR5U3BlYy5kZWZhdWx0KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcmF0aW8gdGhhdCBjYW4gYmUgdXNlZCB0byBpbnRlcnBvbGF0ZSBiZXR3ZWVuIGV4cG9uZW50aWFsIGZ1bmN0aW9uXG4gKiBzdG9wcy5cbiAqXG4gKiBIb3cgaXQgd29ya3M6XG4gKiBUd28gY29uc2VjdXRpdmUgc3RvcCB2YWx1ZXMgZGVmaW5lIGEgKHNjYWxlZCBhbmQgc2hpZnRlZCkgZXhwb25lbnRpYWxcbiAqIGZ1bmN0aW9uIGBmKHgpID0gYSAqIGJhc2VeeCArIGJgLCB3aGVyZSBgYmFzZWAgaXMgdGhlIHVzZXItc3BlY2lmaWVkIGJhc2UsXG4gKiBhbmQgYGFgIGFuZCBgYmAgYXJlIGNvbnN0YW50cyBhZmZvcmRpbmcgc3VmZmljaWVudCBkZWdyZWVzIG9mIGZyZWVkb20gdG8gZml0XG4gKiB0aGUgZnVuY3Rpb24gdG8gdGhlIGdpdmVuIHN0b3BzLlxuICpcbiAqIEhlcmUncyBhIGJpdCBvZiBhbGdlYnJhIHRoYXQgbGV0cyB1cyBjb21wdXRlIGBmKHgpYCBkaXJlY3RseSBmcm9tIHRoZSBzdG9wXG4gKiB2YWx1ZXMgd2l0aG91dCBleHBsaWNpdGx5IHNvbHZpbmcgZm9yIGBhYCBhbmQgYGJgOlxuICpcbiAqIEZpcnN0IHN0b3AgdmFsdWU6IGBmKHgwKSA9IHkwID0gYSAqIGJhc2VeeDAgKyBiYFxuICogU2Vjb25kIHN0b3AgdmFsdWU6IGBmKHgxKSA9IHkxID0gYSAqIGJhc2VeeDEgKyBiYFxuICogPT4gYHkxIC0geTAgPSBhKGJhc2VeeDEgLSBiYXNlXngwKWBcbiAqID0+IGBhID0gKHkxIC0geTApLyhiYXNlXngxIC0gYmFzZV54MClgXG4gKlxuICogRGVzaXJlZCB2YWx1ZTogYGYoeCkgPSB5ID0gYSAqIGJhc2VeeCArIGJgXG4gKiA9PiBgZih4KSA9IHkwICsgYSAqIChiYXNlXnggLSBiYXNlXngwKWBcbiAqXG4gKiBGcm9tIHRoZSBhYm92ZSwgd2UgY2FuIHJlcGxhY2UgdGhlIGBhYCBpbiBgYSAqIChiYXNlXnggLSBiYXNlXngwKWAgYW5kIGRvIGFcbiAqIGxpdHRsZSBhbGdlYnJhOlxuICogYGBgXG4gKiBhICogKGJhc2VeeCAtIGJhc2VeeDApID0gKHkxIC0geTApLyhiYXNlXngxIC0gYmFzZV54MCkgKiAoYmFzZV54IC0gYmFzZV54MClcbiAqICAgICAgICAgICAgICAgICAgICAgPSAoeTEgLSB5MCkgKiAoYmFzZV54IC0gYmFzZV54MCkgLyAoYmFzZV54MSAtIGJhc2VeeDApXG4gKiBgYGBcbiAqXG4gKiBJZiB3ZSBsZXQgYChiYXNlXnggLSBiYXNlXngwKSAvIChiYXNlXngxIGJhc2VeeDApYCwgdGhlbiB3ZSBoYXZlXG4gKiBgZih4KSA9IHkwICsgKHkxIC0geTApICogcmF0aW9gLiAgSW4gb3RoZXIgd29yZHMsIGByYXRpb2AgbWF5IGJlIHRyZWF0ZWQgYXNcbiAqIGFuIGludGVycG9sYXRpb24gZmFjdG9yIGJldHdlZW4gdGhlIHR3byBzdG9wcycgb3V0cHV0IHZhbHVlcy5cbiAqXG4gKiAoTm90ZTogYSBzbGlnaHRseSBkaWZmZXJlbnQgZm9ybSBmb3IgYHJhdGlvYCxcbiAqIGAoYmFzZV4oeC14MCkgLSAxKSAvIChiYXNlXih4MS14MCkgLSAxKSBgLCBpcyBlcXVpdmFsZW50LCBidXQgcmVxdWlyZXMgZmV3ZXJcbiAqIGV4cGVuc2l2ZSBgTWF0aC5wb3coKWAgb3BlcmF0aW9ucy4pXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW50ZXJwb2xhdGlvbkZhY3RvcihpbnB1dCwgYmFzZSwgbG93ZXJWYWx1ZSwgdXBwZXJWYWx1ZSkge1xuICAgIGNvbnN0IGRpZmZlcmVuY2UgPSB1cHBlclZhbHVlIC0gbG93ZXJWYWx1ZTtcbiAgICBjb25zdCBwcm9ncmVzcyA9IGlucHV0IC0gbG93ZXJWYWx1ZTtcblxuICAgIGlmIChkaWZmZXJlbmNlID09PSAwKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH0gZWxzZSBpZiAoYmFzZSA9PT0gMSkge1xuICAgICAgICByZXR1cm4gcHJvZ3Jlc3MgLyBkaWZmZXJlbmNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoTWF0aC5wb3coYmFzZSwgcHJvZ3Jlc3MpIC0gMSkgLyAoTWF0aC5wb3coYmFzZSwgZGlmZmVyZW5jZSkgLSAxKTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCBleHRlbmQgZnJvbSAnLi4vdXRpbC9leHRlbmQnO1xuaW1wb3J0IFBhcnNpbmdFcnJvciBmcm9tICcuL3BhcnNpbmdfZXJyb3InO1xuaW1wb3J0IFBhcnNpbmdDb250ZXh0IGZyb20gJy4vcGFyc2luZ19jb250ZXh0JztcbmltcG9ydCBFdmFsdWF0aW9uQ29udGV4dCBmcm9tICcuL2V2YWx1YXRpb25fY29udGV4dCc7XG5pbXBvcnQgQ29tcG91bmRFeHByZXNzaW9uIGZyb20gJy4vY29tcG91bmRfZXhwcmVzc2lvbic7XG5pbXBvcnQgU3RlcCBmcm9tICcuL2RlZmluaXRpb25zL3N0ZXAnO1xuaW1wb3J0IEludGVycG9sYXRlIGZyb20gJy4vZGVmaW5pdGlvbnMvaW50ZXJwb2xhdGUnO1xuaW1wb3J0IENvYWxlc2NlIGZyb20gJy4vZGVmaW5pdGlvbnMvY29hbGVzY2UnO1xuaW1wb3J0IExldCBmcm9tICcuL2RlZmluaXRpb25zL2xldCc7XG5pbXBvcnQgZGVmaW5pdGlvbnMgZnJvbSAnLi9kZWZpbml0aW9ucyc7XG5pbXBvcnQgKiBhcyBpc0NvbnN0YW50IGZyb20gJy4vaXNfY29uc3RhbnQnO1xuaW1wb3J0IFJ1bnRpbWVFcnJvciBmcm9tICcuL3J1bnRpbWVfZXJyb3InO1xuaW1wb3J0IHtzdWNjZXNzLCBlcnJvcn0gZnJvbSAnLi4vdXRpbC9yZXN1bHQnO1xuaW1wb3J0IHtzdXBwb3J0c1Byb3BlcnR5RXhwcmVzc2lvbiwgc3VwcG9ydHNab29tRXhwcmVzc2lvbiwgc3VwcG9ydHNJbnRlcnBvbGF0aW9ufSBmcm9tICcuLi91dGlsL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgdHlwZSB7VHlwZSwgRXZhbHVhdGlvbktpbmR9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHR5cGUge1ZhbHVlfSBmcm9tICcuL3ZhbHVlcyc7XG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIHtTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYyc7XG5pbXBvcnQgdHlwZSB7UmVzdWx0fSBmcm9tICcuLi91dGlsL3Jlc3VsdCc7XG5pbXBvcnQgdHlwZSB7SW50ZXJwb2xhdGlvblR5cGV9IGZyb20gJy4vZGVmaW5pdGlvbnMvaW50ZXJwb2xhdGUnO1xuaW1wb3J0IHR5cGUge1Byb3BlcnR5VmFsdWVTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7Rm9ybWF0dGVkU2VjdGlvbn0gZnJvbSAnLi90eXBlcy9mb3JtYXR0ZWQnO1xuaW1wb3J0IHR5cGUgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSB7Q2Fub25pY2FsVGlsZUlEfSBmcm9tICcuLi8uLi9zb3VyY2UvdGlsZV9pZCc7XG5cbmV4cG9ydCB0eXBlIEZlYXR1cmUgPSB7XG4gICAgK3R5cGU6IDEgfCAyIHwgMyB8ICdVbmtub3duJyB8ICdQb2ludCcgfCAnTXVsdGlQb2ludCcgfCAnTGluZVN0cmluZycgfCAnTXVsdGlMaW5lU3RyaW5nJyB8ICdQb2x5Z29uJyB8ICdNdWx0aVBvbHlnb24nLFxuICAgICtpZD86IGFueSxcbiAgICArcHJvcGVydGllczoge1tfOiBzdHJpbmddOiBhbnl9LFxuICAgICtwYXR0ZXJucz86IHtbXzogc3RyaW5nXToge1wibWluXCI6IHN0cmluZywgXCJtaWRcIjogc3RyaW5nLCBcIm1heFwiOiBzdHJpbmd9fSxcbiAgICArZ2VvbWV0cnk/OiBBcnJheTxBcnJheTxQb2ludD4+XG59O1xuXG5leHBvcnQgdHlwZSBGZWF0dXJlU3RhdGUgPSB7W186IHN0cmluZ106IGFueX07XG5cbmV4cG9ydCB0eXBlIEdsb2JhbFByb3BlcnRpZXMgPSAkUmVhZE9ubHk8e1xuICAgIHpvb206IG51bWJlcixcbiAgICBoZWF0bWFwRGVuc2l0eT86IG51bWJlcixcbiAgICBsaW5lUHJvZ3Jlc3M/OiBudW1iZXIsXG4gICAgaXNTdXBwb3J0ZWRTY3JpcHQ/OiAoXzogc3RyaW5nKSA9PiBib29sZWFuLFxuICAgIGFjY3VtdWxhdGVkPzogVmFsdWVcbn0+O1xuXG5leHBvcnQgY2xhc3MgU3R5bGVFeHByZXNzaW9uIHtcbiAgICBleHByZXNzaW9uOiBFeHByZXNzaW9uO1xuXG4gICAgX2V2YWx1YXRvcjogRXZhbHVhdGlvbkNvbnRleHQ7XG4gICAgX2RlZmF1bHRWYWx1ZTogVmFsdWU7XG4gICAgX3dhcm5pbmdIaXN0b3J5OiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn07XG4gICAgX2VudW1WYWx1ZXM6ID97W186IHN0cmluZ106IGFueX07XG5cbiAgICBjb25zdHJ1Y3RvcihleHByZXNzaW9uOiBFeHByZXNzaW9uLCBwcm9wZXJ0eVNwZWM6ID9TdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbikge1xuICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuICAgICAgICB0aGlzLl93YXJuaW5nSGlzdG9yeSA9IHt9O1xuICAgICAgICB0aGlzLl9ldmFsdWF0b3IgPSBuZXcgRXZhbHVhdGlvbkNvbnRleHQoKTtcbiAgICAgICAgdGhpcy5fZGVmYXVsdFZhbHVlID0gcHJvcGVydHlTcGVjID8gZ2V0RGVmYXVsdFZhbHVlKHByb3BlcnR5U3BlYykgOiBudWxsO1xuICAgICAgICB0aGlzLl9lbnVtVmFsdWVzID0gcHJvcGVydHlTcGVjICYmIHByb3BlcnR5U3BlYy50eXBlID09PSAnZW51bScgPyBwcm9wZXJ0eVNwZWMudmFsdWVzIDogbnVsbDtcbiAgICB9XG5cbiAgICBldmFsdWF0ZVdpdGhvdXRFcnJvckhhbmRsaW5nKGdsb2JhbHM6IEdsb2JhbFByb3BlcnRpZXMsIGZlYXR1cmU/OiBGZWF0dXJlLCBmZWF0dXJlU3RhdGU/OiBGZWF0dXJlU3RhdGUsIGNhbm9uaWNhbD86IENhbm9uaWNhbFRpbGVJRCwgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPiwgZm9ybWF0dGVkU2VjdGlvbj86IEZvcm1hdHRlZFNlY3Rpb24pOiBhbnkge1xuICAgICAgICB0aGlzLl9ldmFsdWF0b3IuZ2xvYmFscyA9IGdsb2JhbHM7XG4gICAgICAgIHRoaXMuX2V2YWx1YXRvci5mZWF0dXJlID0gZmVhdHVyZTtcbiAgICAgICAgdGhpcy5fZXZhbHVhdG9yLmZlYXR1cmVTdGF0ZSA9IGZlYXR1cmVTdGF0ZTtcbiAgICAgICAgdGhpcy5fZXZhbHVhdG9yLmNhbm9uaWNhbCA9IGNhbm9uaWNhbDtcbiAgICAgICAgdGhpcy5fZXZhbHVhdG9yLmF2YWlsYWJsZUltYWdlcyA9IGF2YWlsYWJsZUltYWdlcyB8fCBudWxsO1xuICAgICAgICB0aGlzLl9ldmFsdWF0b3IuZm9ybWF0dGVkU2VjdGlvbiA9IGZvcm1hdHRlZFNlY3Rpb247XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZSh0aGlzLl9ldmFsdWF0b3IpO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGdsb2JhbHM6IEdsb2JhbFByb3BlcnRpZXMsIGZlYXR1cmU/OiBGZWF0dXJlLCBmZWF0dXJlU3RhdGU/OiBGZWF0dXJlU3RhdGUsIGNhbm9uaWNhbD86IENhbm9uaWNhbFRpbGVJRCwgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPiwgZm9ybWF0dGVkU2VjdGlvbj86IEZvcm1hdHRlZFNlY3Rpb24pOiBhbnkge1xuICAgICAgICB0aGlzLl9ldmFsdWF0b3IuZ2xvYmFscyA9IGdsb2JhbHM7XG4gICAgICAgIHRoaXMuX2V2YWx1YXRvci5mZWF0dXJlID0gZmVhdHVyZSB8fCBudWxsO1xuICAgICAgICB0aGlzLl9ldmFsdWF0b3IuZmVhdHVyZVN0YXRlID0gZmVhdHVyZVN0YXRlIHx8IG51bGw7XG4gICAgICAgIHRoaXMuX2V2YWx1YXRvci5jYW5vbmljYWwgPSBjYW5vbmljYWw7XG4gICAgICAgIHRoaXMuX2V2YWx1YXRvci5hdmFpbGFibGVJbWFnZXMgPSBhdmFpbGFibGVJbWFnZXMgfHwgbnVsbDtcbiAgICAgICAgdGhpcy5fZXZhbHVhdG9yLmZvcm1hdHRlZFNlY3Rpb24gPSBmb3JtYXR0ZWRTZWN0aW9uIHx8IG51bGw7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZSh0aGlzLl9ldmFsdWF0b3IpO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCB8fCAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicgJiYgdmFsICE9PSB2YWwpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9lbnVtVmFsdWVzICYmICEodmFsIGluIHRoaXMuX2VudW1WYWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFcnJvcihgRXhwZWN0ZWQgdmFsdWUgdG8gYmUgb25lIG9mICR7T2JqZWN0LmtleXModGhpcy5fZW51bVZhbHVlcykubWFwKHYgPT4gSlNPTi5zdHJpbmdpZnkodikpLmpvaW4oJywgJyl9LCBidXQgZm91bmQgJHtKU09OLnN0cmluZ2lmeSh2YWwpfSBpbnN0ZWFkLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl93YXJuaW5nSGlzdG9yeVtlLm1lc3NhZ2VdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2FybmluZ0hpc3RvcnlbZS5tZXNzYWdlXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oZS5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFeHByZXNzaW9uKGV4cHJlc3Npb246IG1peGVkKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZXhwcmVzc2lvbikgJiYgZXhwcmVzc2lvbi5sZW5ndGggPiAwICYmXG4gICAgICAgIHR5cGVvZiBleHByZXNzaW9uWzBdID09PSAnc3RyaW5nJyAmJiBleHByZXNzaW9uWzBdIGluIGRlZmluaXRpb25zO1xufVxuXG4vKipcbiAqIFBhcnNlIGFuZCB0eXBlY2hlY2sgdGhlIGdpdmVuIHN0eWxlIHNwZWMgSlNPTiBleHByZXNzaW9uLiAgSWZcbiAqIG9wdGlvbnMuZGVmYXVsdFZhbHVlIGlzIHByb3ZpZGVkLCB0aGVuIHRoZSByZXN1bHRpbmcgU3R5bGVFeHByZXNzaW9uJ3NcbiAqIGBldmFsdWF0ZSgpYCBtZXRob2Qgd2lsbCBoYW5kbGUgZXJyb3JzIGJ5IGxvZ2dpbmcgYSB3YXJuaW5nIChvbmNlIHBlclxuICogbWVzc2FnZSkgYW5kIHJldHVybmluZyB0aGUgZGVmYXVsdCB2YWx1ZS4gIE90aGVyd2lzZSwgaXQgd2lsbCB0aHJvd1xuICogZXZhbHVhdGlvbiBlcnJvcnMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUV4cHJlc3Npb24oZXhwcmVzc2lvbjogbWl4ZWQsIHByb3BlcnR5U3BlYzogP1N0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uKTogUmVzdWx0PFN0eWxlRXhwcmVzc2lvbiwgQXJyYXk8UGFyc2luZ0Vycm9yPj4ge1xuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBQYXJzaW5nQ29udGV4dChkZWZpbml0aW9ucywgW10sIHByb3BlcnR5U3BlYyA/IGdldEV4cGVjdGVkVHlwZShwcm9wZXJ0eVNwZWMpIDogdW5kZWZpbmVkKTtcblxuICAgIC8vIEZvciBzdHJpbmctdmFsdWVkIHByb3BlcnRpZXMsIGNvZXJjZSB0byBzdHJpbmcgYXQgdGhlIHRvcCBsZXZlbCByYXRoZXIgdGhhbiBhc3NlcnRpbmcuXG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2VyLnBhcnNlKGV4cHJlc3Npb24sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsXG4gICAgICAgIHByb3BlcnR5U3BlYyAmJiBwcm9wZXJ0eVNwZWMudHlwZSA9PT0gJ3N0cmluZycgPyB7dHlwZUFubm90YXRpb246ICdjb2VyY2UnfSA6IHVuZGVmaW5lZCk7XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgICBhc3NlcnQocGFyc2VyLmVycm9ycy5sZW5ndGggPiAwKTtcbiAgICAgICAgcmV0dXJuIGVycm9yKHBhcnNlci5lcnJvcnMpO1xuICAgIH1cblxuICAgIHJldHVybiBzdWNjZXNzKG5ldyBTdHlsZUV4cHJlc3Npb24ocGFyc2VkLCBwcm9wZXJ0eVNwZWMpKTtcbn1cblxuZXhwb3J0IGNsYXNzIFpvb21Db25zdGFudEV4cHJlc3Npb248S2luZDogRXZhbHVhdGlvbktpbmQ+IHtcbiAgICBraW5kOiBLaW5kO1xuICAgIGlzU3RhdGVEZXBlbmRlbnQ6IGJvb2xlYW47XG4gICAgX3N0eWxlRXhwcmVzc2lvbjogU3R5bGVFeHByZXNzaW9uO1xuXG4gICAgY29uc3RydWN0b3Ioa2luZDogS2luZCwgZXhwcmVzc2lvbjogU3R5bGVFeHByZXNzaW9uKSB7XG4gICAgICAgIHRoaXMua2luZCA9IGtpbmQ7XG4gICAgICAgIHRoaXMuX3N0eWxlRXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG4gICAgICAgIHRoaXMuaXNTdGF0ZURlcGVuZGVudCA9IGtpbmQgIT09ICgnY29uc3RhbnQnOiBFdmFsdWF0aW9uS2luZCkgJiYgIWlzQ29uc3RhbnQuaXNTdGF0ZUNvbnN0YW50KGV4cHJlc3Npb24uZXhwcmVzc2lvbik7XG4gICAgfVxuXG4gICAgZXZhbHVhdGVXaXRob3V0RXJyb3JIYW5kbGluZyhnbG9iYWxzOiBHbG9iYWxQcm9wZXJ0aWVzLCBmZWF0dXJlPzogRmVhdHVyZSwgZmVhdHVyZVN0YXRlPzogRmVhdHVyZVN0YXRlLCBjYW5vbmljYWw/OiBDYW5vbmljYWxUaWxlSUQsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4sIGZvcm1hdHRlZFNlY3Rpb24/OiBGb3JtYXR0ZWRTZWN0aW9uKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0eWxlRXhwcmVzc2lvbi5ldmFsdWF0ZVdpdGhvdXRFcnJvckhhbmRsaW5nKGdsb2JhbHMsIGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSwgY2Fub25pY2FsLCBhdmFpbGFibGVJbWFnZXMsIGZvcm1hdHRlZFNlY3Rpb24pO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGdsb2JhbHM6IEdsb2JhbFByb3BlcnRpZXMsIGZlYXR1cmU/OiBGZWF0dXJlLCBmZWF0dXJlU3RhdGU/OiBGZWF0dXJlU3RhdGUsIGNhbm9uaWNhbD86IENhbm9uaWNhbFRpbGVJRCwgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPiwgZm9ybWF0dGVkU2VjdGlvbj86IEZvcm1hdHRlZFNlY3Rpb24pOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3R5bGVFeHByZXNzaW9uLmV2YWx1YXRlKGdsb2JhbHMsIGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSwgY2Fub25pY2FsLCBhdmFpbGFibGVJbWFnZXMsIGZvcm1hdHRlZFNlY3Rpb24pO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFpvb21EZXBlbmRlbnRFeHByZXNzaW9uPEtpbmQ6IEV2YWx1YXRpb25LaW5kPiB7XG4gICAga2luZDogS2luZDtcbiAgICB6b29tU3RvcHM6IEFycmF5PG51bWJlcj47XG4gICAgaXNTdGF0ZURlcGVuZGVudDogYm9vbGVhbjtcblxuICAgIF9zdHlsZUV4cHJlc3Npb246IFN0eWxlRXhwcmVzc2lvbjtcbiAgICBpbnRlcnBvbGF0aW9uVHlwZTogP0ludGVycG9sYXRpb25UeXBlO1xuXG4gICAgY29uc3RydWN0b3Ioa2luZDogS2luZCwgZXhwcmVzc2lvbjogU3R5bGVFeHByZXNzaW9uLCB6b29tU3RvcHM6IEFycmF5PG51bWJlcj4sIGludGVycG9sYXRpb25UeXBlPzogSW50ZXJwb2xhdGlvblR5cGUpIHtcbiAgICAgICAgdGhpcy5raW5kID0ga2luZDtcbiAgICAgICAgdGhpcy56b29tU3RvcHMgPSB6b29tU3RvcHM7XG4gICAgICAgIHRoaXMuX3N0eWxlRXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG4gICAgICAgIHRoaXMuaXNTdGF0ZURlcGVuZGVudCA9IGtpbmQgIT09ICgnY2FtZXJhJzogRXZhbHVhdGlvbktpbmQpICYmICFpc0NvbnN0YW50LmlzU3RhdGVDb25zdGFudChleHByZXNzaW9uLmV4cHJlc3Npb24pO1xuICAgICAgICB0aGlzLmludGVycG9sYXRpb25UeXBlID0gaW50ZXJwb2xhdGlvblR5cGU7XG4gICAgfVxuXG4gICAgZXZhbHVhdGVXaXRob3V0RXJyb3JIYW5kbGluZyhnbG9iYWxzOiBHbG9iYWxQcm9wZXJ0aWVzLCBmZWF0dXJlPzogRmVhdHVyZSwgZmVhdHVyZVN0YXRlPzogRmVhdHVyZVN0YXRlLCBjYW5vbmljYWw/OiBDYW5vbmljYWxUaWxlSUQsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4sIGZvcm1hdHRlZFNlY3Rpb24/OiBGb3JtYXR0ZWRTZWN0aW9uKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0eWxlRXhwcmVzc2lvbi5ldmFsdWF0ZVdpdGhvdXRFcnJvckhhbmRsaW5nKGdsb2JhbHMsIGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSwgY2Fub25pY2FsLCBhdmFpbGFibGVJbWFnZXMsIGZvcm1hdHRlZFNlY3Rpb24pO1xuICAgIH1cblxuICAgIGV2YWx1YXRlKGdsb2JhbHM6IEdsb2JhbFByb3BlcnRpZXMsIGZlYXR1cmU/OiBGZWF0dXJlLCBmZWF0dXJlU3RhdGU/OiBGZWF0dXJlU3RhdGUsIGNhbm9uaWNhbD86IENhbm9uaWNhbFRpbGVJRCwgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPiwgZm9ybWF0dGVkU2VjdGlvbj86IEZvcm1hdHRlZFNlY3Rpb24pOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3R5bGVFeHByZXNzaW9uLmV2YWx1YXRlKGdsb2JhbHMsIGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSwgY2Fub25pY2FsLCBhdmFpbGFibGVJbWFnZXMsIGZvcm1hdHRlZFNlY3Rpb24pO1xuICAgIH1cblxuICAgIGludGVycG9sYXRpb25GYWN0b3IoaW5wdXQ6IG51bWJlciwgbG93ZXI6IG51bWJlciwgdXBwZXI6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLmludGVycG9sYXRpb25UeXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gSW50ZXJwb2xhdGUuaW50ZXJwb2xhdGlvbkZhY3Rvcih0aGlzLmludGVycG9sYXRpb25UeXBlLCBpbnB1dCwgbG93ZXIsIHVwcGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgdHlwZSBDb25zdGFudEV4cHJlc3Npb24gPSB7XG4gICAga2luZDogJ2NvbnN0YW50JyxcbiAgICArZXZhbHVhdGU6IChnbG9iYWxzOiBHbG9iYWxQcm9wZXJ0aWVzLCBmZWF0dXJlPzogRmVhdHVyZSwgZmVhdHVyZVN0YXRlPzogRmVhdHVyZVN0YXRlLCBjYW5vbmljYWw/OiBDYW5vbmljYWxUaWxlSUQsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4pID0+IGFueSxcbn1cblxuZXhwb3J0IHR5cGUgU291cmNlRXhwcmVzc2lvbiA9IHtcbiAgICBraW5kOiAnc291cmNlJyxcbiAgICBpc1N0YXRlRGVwZW5kZW50OiBib29sZWFuLFxuICAgICtldmFsdWF0ZTogKGdsb2JhbHM6IEdsb2JhbFByb3BlcnRpZXMsIGZlYXR1cmU/OiBGZWF0dXJlLCBmZWF0dXJlU3RhdGU/OiBGZWF0dXJlU3RhdGUsIGNhbm9uaWNhbD86IENhbm9uaWNhbFRpbGVJRCwgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPiwgZm9ybWF0dGVkU2VjdGlvbj86IEZvcm1hdHRlZFNlY3Rpb24pID0+IGFueSxcbn07XG5cbmV4cG9ydCB0eXBlIENhbWVyYUV4cHJlc3Npb24gPSB7XG4gICAga2luZDogJ2NhbWVyYScsXG4gICAgK2V2YWx1YXRlOiAoZ2xvYmFsczogR2xvYmFsUHJvcGVydGllcywgZmVhdHVyZT86IEZlYXR1cmUsIGZlYXR1cmVTdGF0ZT86IEZlYXR1cmVTdGF0ZSwgY2Fub25pY2FsPzogQ2Fub25pY2FsVGlsZUlELCBhdmFpbGFibGVJbWFnZXM/OiBBcnJheTxzdHJpbmc+KSA9PiBhbnksXG4gICAgK2ludGVycG9sYXRpb25GYWN0b3I6IChpbnB1dDogbnVtYmVyLCBsb3dlcjogbnVtYmVyLCB1cHBlcjogbnVtYmVyKSA9PiBudW1iZXIsXG4gICAgem9vbVN0b3BzOiBBcnJheTxudW1iZXI+LFxuICAgIGludGVycG9sYXRpb25UeXBlOiA/SW50ZXJwb2xhdGlvblR5cGVcbn07XG5cbmV4cG9ydCB0eXBlIENvbXBvc2l0ZUV4cHJlc3Npb24gPSB7XG4gICAga2luZDogJ2NvbXBvc2l0ZScsXG4gICAgaXNTdGF0ZURlcGVuZGVudDogYm9vbGVhbixcbiAgICArZXZhbHVhdGU6IChnbG9iYWxzOiBHbG9iYWxQcm9wZXJ0aWVzLCBmZWF0dXJlPzogRmVhdHVyZSwgZmVhdHVyZVN0YXRlPzogRmVhdHVyZVN0YXRlLCBjYW5vbmljYWw/OiBDYW5vbmljYWxUaWxlSUQsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4sIGZvcm1hdHRlZFNlY3Rpb24/OiBGb3JtYXR0ZWRTZWN0aW9uKSA9PiBhbnksXG4gICAgK2ludGVycG9sYXRpb25GYWN0b3I6IChpbnB1dDogbnVtYmVyLCBsb3dlcjogbnVtYmVyLCB1cHBlcjogbnVtYmVyKSA9PiBudW1iZXIsXG4gICAgem9vbVN0b3BzOiBBcnJheTxudW1iZXI+LFxuICAgIGludGVycG9sYXRpb25UeXBlOiA/SW50ZXJwb2xhdGlvblR5cGVcbn07XG5cbmV4cG9ydCB0eXBlIFN0eWxlUHJvcGVydHlFeHByZXNzaW9uID1cbiAgICB8IENvbnN0YW50RXhwcmVzc2lvblxuICAgIHwgU291cmNlRXhwcmVzc2lvblxuICAgIHwgQ2FtZXJhRXhwcmVzc2lvblxuICAgIHwgQ29tcG9zaXRlRXhwcmVzc2lvbjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByb3BlcnR5RXhwcmVzc2lvbihleHByZXNzaW9uOiBtaXhlZCwgcHJvcGVydHlTcGVjOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbik6IFJlc3VsdDxTdHlsZVByb3BlcnR5RXhwcmVzc2lvbiwgQXJyYXk8UGFyc2luZ0Vycm9yPj4ge1xuICAgIGV4cHJlc3Npb24gPSBjcmVhdGVFeHByZXNzaW9uKGV4cHJlc3Npb24sIHByb3BlcnR5U3BlYyk7XG4gICAgaWYgKGV4cHJlc3Npb24ucmVzdWx0ID09PSAnZXJyb3InKSB7XG4gICAgICAgIHJldHVybiBleHByZXNzaW9uO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZCA9IGV4cHJlc3Npb24udmFsdWUuZXhwcmVzc2lvbjtcblxuICAgIGNvbnN0IGlzRmVhdHVyZUNvbnN0YW50ID0gaXNDb25zdGFudC5pc0ZlYXR1cmVDb25zdGFudChwYXJzZWQpO1xuICAgIGlmICghaXNGZWF0dXJlQ29uc3RhbnQgJiYgIXN1cHBvcnRzUHJvcGVydHlFeHByZXNzaW9uKHByb3BlcnR5U3BlYykpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yKFtuZXcgUGFyc2luZ0Vycm9yKCcnLCAnZGF0YSBleHByZXNzaW9ucyBub3Qgc3VwcG9ydGVkJyldKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc1pvb21Db25zdGFudCA9IGlzQ29uc3RhbnQuaXNHbG9iYWxQcm9wZXJ0eUNvbnN0YW50KHBhcnNlZCwgWyd6b29tJ10pO1xuICAgIGlmICghaXNab29tQ29uc3RhbnQgJiYgIXN1cHBvcnRzWm9vbUV4cHJlc3Npb24ocHJvcGVydHlTcGVjKSkge1xuICAgICAgICByZXR1cm4gZXJyb3IoW25ldyBQYXJzaW5nRXJyb3IoJycsICd6b29tIGV4cHJlc3Npb25zIG5vdCBzdXBwb3J0ZWQnKV0pO1xuICAgIH1cblxuICAgIGNvbnN0IHpvb21DdXJ2ZSA9IGZpbmRab29tQ3VydmUocGFyc2VkKTtcbiAgICBpZiAoIXpvb21DdXJ2ZSAmJiAhaXNab29tQ29uc3RhbnQpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yKFtuZXcgUGFyc2luZ0Vycm9yKCcnLCAnXCJ6b29tXCIgZXhwcmVzc2lvbiBtYXkgb25seSBiZSB1c2VkIGFzIGlucHV0IHRvIGEgdG9wLWxldmVsIFwic3RlcFwiIG9yIFwiaW50ZXJwb2xhdGVcIiBleHByZXNzaW9uLicpXSk7XG4gICAgfSBlbHNlIGlmICh6b29tQ3VydmUgaW5zdGFuY2VvZiBQYXJzaW5nRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yKFt6b29tQ3VydmVdKTtcbiAgICB9IGVsc2UgaWYgKHpvb21DdXJ2ZSBpbnN0YW5jZW9mIEludGVycG9sYXRlICYmICFzdXBwb3J0c0ludGVycG9sYXRpb24ocHJvcGVydHlTcGVjKSkge1xuICAgICAgICByZXR1cm4gZXJyb3IoW25ldyBQYXJzaW5nRXJyb3IoJycsICdcImludGVycG9sYXRlXCIgZXhwcmVzc2lvbnMgY2Fubm90IGJlIHVzZWQgd2l0aCB0aGlzIHByb3BlcnR5JyldKTtcbiAgICB9XG5cbiAgICBpZiAoIXpvb21DdXJ2ZSkge1xuICAgICAgICByZXR1cm4gc3VjY2Vzcyhpc0ZlYXR1cmVDb25zdGFudCA/XG4gICAgICAgICAgICAobmV3IFpvb21Db25zdGFudEV4cHJlc3Npb24oJ2NvbnN0YW50JywgZXhwcmVzc2lvbi52YWx1ZSk6IENvbnN0YW50RXhwcmVzc2lvbikgOlxuICAgICAgICAgICAgKG5ldyBab29tQ29uc3RhbnRFeHByZXNzaW9uKCdzb3VyY2UnLCBleHByZXNzaW9uLnZhbHVlKTogU291cmNlRXhwcmVzc2lvbikpO1xuICAgIH1cblxuICAgIGNvbnN0IGludGVycG9sYXRpb25UeXBlID0gem9vbUN1cnZlIGluc3RhbmNlb2YgSW50ZXJwb2xhdGUgPyB6b29tQ3VydmUuaW50ZXJwb2xhdGlvbiA6IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiBzdWNjZXNzKGlzRmVhdHVyZUNvbnN0YW50ID9cbiAgICAgICAgKG5ldyBab29tRGVwZW5kZW50RXhwcmVzc2lvbignY2FtZXJhJywgZXhwcmVzc2lvbi52YWx1ZSwgem9vbUN1cnZlLmxhYmVscywgaW50ZXJwb2xhdGlvblR5cGUpOiBDYW1lcmFFeHByZXNzaW9uKSA6XG4gICAgICAgIChuZXcgWm9vbURlcGVuZGVudEV4cHJlc3Npb24oJ2NvbXBvc2l0ZScsIGV4cHJlc3Npb24udmFsdWUsIHpvb21DdXJ2ZS5sYWJlbHMsIGludGVycG9sYXRpb25UeXBlKTogQ29tcG9zaXRlRXhwcmVzc2lvbikpO1xufVxuXG5pbXBvcnQge2lzRnVuY3Rpb24sIGNyZWF0ZUZ1bmN0aW9ufSBmcm9tICcuLi9mdW5jdGlvbic7XG5pbXBvcnQge0NvbG9yfSBmcm9tICcuL3ZhbHVlcyc7XG5cbi8vIHNlcmlhbGl6YXRpb24gd3JhcHBlciBmb3Igb2xkLXN0eWxlIHN0b3AgZnVuY3Rpb25zIG5vcm1hbGl6ZWQgdG8gdGhlXG4vLyBleHByZXNzaW9uIGludGVyZmFjZVxuZXhwb3J0IGNsYXNzIFN0eWxlUHJvcGVydHlGdW5jdGlvbjxUPiB7XG4gICAgX3BhcmFtZXRlcnM6IFByb3BlcnR5VmFsdWVTcGVjaWZpY2F0aW9uPFQ+O1xuICAgIF9zcGVjaWZpY2F0aW9uOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbjtcblxuICAgIGtpbmQ6IEV2YWx1YXRpb25LaW5kO1xuICAgIGV2YWx1YXRlOiAoZ2xvYmFsczogR2xvYmFsUHJvcGVydGllcywgZmVhdHVyZT86IEZlYXR1cmUpID0+IGFueTtcbiAgICBpbnRlcnBvbGF0aW9uRmFjdG9yOiA/KGlucHV0OiBudW1iZXIsIGxvd2VyOiBudW1iZXIsIHVwcGVyOiBudW1iZXIpID0+IG51bWJlcjtcbiAgICB6b29tU3RvcHM6ID9BcnJheTxudW1iZXI+O1xuXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVyczogUHJvcGVydHlWYWx1ZVNwZWNpZmljYXRpb248VD4sIHNwZWNpZmljYXRpb246IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHRoaXMuX3BhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xuICAgICAgICB0aGlzLl9zcGVjaWZpY2F0aW9uID0gc3BlY2lmaWNhdGlvbjtcbiAgICAgICAgZXh0ZW5kKHRoaXMsIGNyZWF0ZUZ1bmN0aW9uKHRoaXMuX3BhcmFtZXRlcnMsIHRoaXMuX3NwZWNpZmljYXRpb24pKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZGVzZXJpYWxpemUoc2VyaWFsaXplZDoge19wYXJhbWV0ZXJzOiBQcm9wZXJ0eVZhbHVlU3BlY2lmaWNhdGlvbjxUPiwgX3NwZWNpZmljYXRpb246IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9ufSkge1xuICAgICAgICByZXR1cm4gKChuZXcgU3R5bGVQcm9wZXJ0eUZ1bmN0aW9uKHNlcmlhbGl6ZWQuX3BhcmFtZXRlcnMsIHNlcmlhbGl6ZWQuX3NwZWNpZmljYXRpb24pKTogU3R5bGVQcm9wZXJ0eUZ1bmN0aW9uPFQ+KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgc2VyaWFsaXplKGlucHV0OiBTdHlsZVByb3BlcnR5RnVuY3Rpb248VD4pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIF9wYXJhbWV0ZXJzOiBpbnB1dC5fcGFyYW1ldGVycyxcbiAgICAgICAgICAgIF9zcGVjaWZpY2F0aW9uOiBpbnB1dC5fc3BlY2lmaWNhdGlvblxuICAgICAgICB9O1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVByb3BlcnR5RXhwcmVzc2lvbjxUPih2YWx1ZTogUHJvcGVydHlWYWx1ZVNwZWNpZmljYXRpb248VD4sIHNwZWNpZmljYXRpb246IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uKTogU3R5bGVQcm9wZXJ0eUV4cHJlc3Npb24ge1xuICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gKG5ldyBTdHlsZVByb3BlcnR5RnVuY3Rpb24odmFsdWUsIHNwZWNpZmljYXRpb24pOiBhbnkpO1xuXG4gICAgfSBlbHNlIGlmIChpc0V4cHJlc3Npb24odmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSBjcmVhdGVQcm9wZXJ0eUV4cHJlc3Npb24odmFsdWUsIHNwZWNpZmljYXRpb24pO1xuICAgICAgICBpZiAoZXhwcmVzc2lvbi5yZXN1bHQgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgc2hvdWxkIGhhdmUgYmVlbiBjYXVnaHQgaW4gdmFsaWRhdGlvblxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGV4cHJlc3Npb24udmFsdWUubWFwKGVyciA9PiBgJHtlcnIua2V5fTogJHtlcnIubWVzc2FnZX1gKS5qb2luKCcsICcpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXhwcmVzc2lvbi52YWx1ZTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBjb25zdGFudDogYW55ID0gdmFsdWU7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHNwZWNpZmljYXRpb24udHlwZSA9PT0gJ2NvbG9yJykge1xuICAgICAgICAgICAgY29uc3RhbnQgPSBDb2xvci5wYXJzZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtpbmQ6ICdjb25zdGFudCcsXG4gICAgICAgICAgICBldmFsdWF0ZTogKCkgPT4gY29uc3RhbnRcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbi8vIFpvb20tZGVwZW5kZW50IGV4cHJlc3Npb25zIG1heSBvbmx5IHVzZSBbXCJ6b29tXCJdIGFzIHRoZSBpbnB1dCB0byBhIHRvcC1sZXZlbCBcInN0ZXBcIiBvciBcImludGVycG9sYXRlXCJcbi8vIGV4cHJlc3Npb24gKGNvbGxlY3RpdmVseSByZWZlcnJlZCB0byBhcyBhIFwiY3VydmVcIikuIFRoZSBjdXJ2ZSBtYXkgYmUgd3JhcHBlZCBpbiBvbmUgb3IgbW9yZSBcImxldFwiIG9yXG4vLyBcImNvYWxlc2NlXCIgZXhwcmVzc2lvbnMuXG5mdW5jdGlvbiBmaW5kWm9vbUN1cnZlKGV4cHJlc3Npb246IEV4cHJlc3Npb24pOiBTdGVwIHwgSW50ZXJwb2xhdGUgfCBQYXJzaW5nRXJyb3IgfCBudWxsIHtcbiAgICBsZXQgcmVzdWx0ID0gbnVsbDtcbiAgICBpZiAoZXhwcmVzc2lvbiBpbnN0YW5jZW9mIExldCkge1xuICAgICAgICByZXN1bHQgPSBmaW5kWm9vbUN1cnZlKGV4cHJlc3Npb24ucmVzdWx0KTtcblxuICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbiBpbnN0YW5jZW9mIENvYWxlc2NlKSB7XG4gICAgICAgIGZvciAoY29uc3QgYXJnIG9mIGV4cHJlc3Npb24uYXJncykge1xuICAgICAgICAgICAgcmVzdWx0ID0gZmluZFpvb21DdXJ2ZShhcmcpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKChleHByZXNzaW9uIGluc3RhbmNlb2YgU3RlcCB8fCBleHByZXNzaW9uIGluc3RhbmNlb2YgSW50ZXJwb2xhdGUpICYmXG4gICAgICAgIGV4cHJlc3Npb24uaW5wdXQgaW5zdGFuY2VvZiBDb21wb3VuZEV4cHJlc3Npb24gJiZcbiAgICAgICAgZXhwcmVzc2lvbi5pbnB1dC5uYW1lID09PSAnem9vbScpIHtcblxuICAgICAgICByZXN1bHQgPSBleHByZXNzaW9uO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQYXJzaW5nRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBleHByZXNzaW9uLmVhY2hDaGlsZCgoY2hpbGQpID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGRSZXN1bHQgPSBmaW5kWm9vbUN1cnZlKGNoaWxkKTtcbiAgICAgICAgaWYgKGNoaWxkUmVzdWx0IGluc3RhbmNlb2YgUGFyc2luZ0Vycm9yKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBjaGlsZFJlc3VsdDtcbiAgICAgICAgfSBlbHNlIGlmICghcmVzdWx0ICYmIGNoaWxkUmVzdWx0KSB7XG4gICAgICAgICAgICByZXN1bHQgPSBuZXcgUGFyc2luZ0Vycm9yKCcnLCAnXCJ6b29tXCIgZXhwcmVzc2lvbiBtYXkgb25seSBiZSB1c2VkIGFzIGlucHV0IHRvIGEgdG9wLWxldmVsIFwic3RlcFwiIG9yIFwiaW50ZXJwb2xhdGVcIiBleHByZXNzaW9uLicpO1xuICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCAmJiBjaGlsZFJlc3VsdCAmJiByZXN1bHQgIT09IGNoaWxkUmVzdWx0KSB7XG4gICAgICAgICAgICByZXN1bHQgPSBuZXcgUGFyc2luZ0Vycm9yKCcnLCAnT25seSBvbmUgem9vbS1iYXNlZCBcInN0ZXBcIiBvciBcImludGVycG9sYXRlXCIgc3ViZXhwcmVzc2lvbiBtYXkgYmUgdXNlZCBpbiBhbiBleHByZXNzaW9uLicpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5pbXBvcnQge0NvbG9yVHlwZSwgU3RyaW5nVHlwZSwgTnVtYmVyVHlwZSwgQm9vbGVhblR5cGUsIFZhbHVlVHlwZSwgRm9ybWF0dGVkVHlwZSwgUmVzb2x2ZWRJbWFnZVR5cGUsIGFycmF5fSBmcm9tICcuL3R5cGVzJztcblxuZnVuY3Rpb24gZ2V0RXhwZWN0ZWRUeXBlKHNwZWM6IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uKTogVHlwZSB7XG4gICAgY29uc3QgdHlwZXMgPSB7XG4gICAgICAgIGNvbG9yOiBDb2xvclR5cGUsXG4gICAgICAgIHN0cmluZzogU3RyaW5nVHlwZSxcbiAgICAgICAgbnVtYmVyOiBOdW1iZXJUeXBlLFxuICAgICAgICBlbnVtOiBTdHJpbmdUeXBlLFxuICAgICAgICBib29sZWFuOiBCb29sZWFuVHlwZSxcbiAgICAgICAgZm9ybWF0dGVkOiBGb3JtYXR0ZWRUeXBlLFxuICAgICAgICByZXNvbHZlZEltYWdlOiBSZXNvbHZlZEltYWdlVHlwZVxuICAgIH07XG5cbiAgICBpZiAoc3BlYy50eXBlID09PSAnYXJyYXknKSB7XG4gICAgICAgIHJldHVybiBhcnJheSh0eXBlc1tzcGVjLnZhbHVlXSB8fCBWYWx1ZVR5cGUsIHNwZWMubGVuZ3RoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZXNbc3BlYy50eXBlXTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdFZhbHVlKHNwZWM6IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uKTogVmFsdWUge1xuICAgIGlmIChzcGVjLnR5cGUgPT09ICdjb2xvcicgJiYgaXNGdW5jdGlvbihzcGVjLmRlZmF1bHQpKSB7XG4gICAgICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgaGVhdG1hcC1jb2xvcjogaXQgdXNlcyB0aGUgJ2RlZmF1bHQ6JyB0byBkZWZpbmUgYVxuICAgICAgICAvLyBkZWZhdWx0IGNvbG9yIHJhbXAsIGJ1dCBjcmVhdGVFeHByZXNzaW9uIGV4cGVjdHMgYSBzaW1wbGUgdmFsdWUgdG8gZmFsbFxuICAgICAgICAvLyBiYWNrIHRvIGluIGNhc2Ugb2YgcnVudGltZSBlcnJvcnNcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvcigwLCAwLCAwLCAwKTtcbiAgICB9IGVsc2UgaWYgKHNwZWMudHlwZSA9PT0gJ2NvbG9yJykge1xuICAgICAgICByZXR1cm4gQ29sb3IucGFyc2Uoc3BlYy5kZWZhdWx0KSB8fCBudWxsO1xuICAgIH0gZWxzZSBpZiAoc3BlYy5kZWZhdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHNwZWMuZGVmYXVsdDtcbiAgICB9XG59XG4iLCJcbmltcG9ydCBWYWxpZGF0aW9uRXJyb3IgZnJvbSAnLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvcic7XG5pbXBvcnQgZ2V0VHlwZSBmcm9tICcuLi91dGlsL2dldF90eXBlJztcbmltcG9ydCB2YWxpZGF0ZVNwZWMgZnJvbSAnLi92YWxpZGF0ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlT2JqZWN0KG9wdGlvbnMpIHtcbiAgICBjb25zdCBrZXkgPSBvcHRpb25zLmtleTtcbiAgICBjb25zdCBvYmplY3QgPSBvcHRpb25zLnZhbHVlO1xuICAgIGNvbnN0IGVsZW1lbnRTcGVjcyA9IG9wdGlvbnMudmFsdWVTcGVjIHx8IHt9O1xuICAgIGNvbnN0IGVsZW1lbnRWYWxpZGF0b3JzID0gb3B0aW9ucy5vYmplY3RFbGVtZW50VmFsaWRhdG9ycyB8fCB7fTtcbiAgICBjb25zdCBzdHlsZSA9IG9wdGlvbnMuc3R5bGU7XG4gICAgY29uc3Qgc3R5bGVTcGVjID0gb3B0aW9ucy5zdHlsZVNwZWM7XG4gICAgbGV0IGVycm9ycyA9IFtdO1xuXG4gICAgY29uc3QgdHlwZSA9IGdldFR5cGUob2JqZWN0KTtcbiAgICBpZiAodHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgb2JqZWN0LCBgb2JqZWN0IGV4cGVjdGVkLCAke3R5cGV9IGZvdW5kYCldO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgb2JqZWN0S2V5IGluIG9iamVjdCkge1xuICAgICAgICBjb25zdCBlbGVtZW50U3BlY0tleSA9IG9iamVjdEtleS5zcGxpdCgnLicpWzBdOyAvLyB0cmVhdCAncGFpbnQuKicgYXMgJ3BhaW50J1xuICAgICAgICBjb25zdCBlbGVtZW50U3BlYyA9IGVsZW1lbnRTcGVjc1tlbGVtZW50U3BlY0tleV0gfHwgZWxlbWVudFNwZWNzWycqJ107XG5cbiAgICAgICAgbGV0IHZhbGlkYXRlRWxlbWVudDtcbiAgICAgICAgaWYgKGVsZW1lbnRWYWxpZGF0b3JzW2VsZW1lbnRTcGVjS2V5XSkge1xuICAgICAgICAgICAgdmFsaWRhdGVFbGVtZW50ID0gZWxlbWVudFZhbGlkYXRvcnNbZWxlbWVudFNwZWNLZXldO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnRTcGVjc1tlbGVtZW50U3BlY0tleV0pIHtcbiAgICAgICAgICAgIHZhbGlkYXRlRWxlbWVudCA9IHZhbGlkYXRlU3BlYztcbiAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50VmFsaWRhdG9yc1snKiddKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZUVsZW1lbnQgPSBlbGVtZW50VmFsaWRhdG9yc1snKiddO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnRTcGVjc1snKiddKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZUVsZW1lbnQgPSB2YWxpZGF0ZVNwZWM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgb2JqZWN0W29iamVjdEtleV0sIGB1bmtub3duIHByb3BlcnR5IFwiJHtvYmplY3RLZXl9XCJgKSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVycm9ycyA9IGVycm9ycy5jb25jYXQodmFsaWRhdGVFbGVtZW50KHtcbiAgICAgICAgICAgIGtleTogKGtleSA/IGAke2tleX0uYCA6IGtleSkgKyBvYmplY3RLZXksXG4gICAgICAgICAgICB2YWx1ZTogb2JqZWN0W29iamVjdEtleV0sXG4gICAgICAgICAgICB2YWx1ZVNwZWM6IGVsZW1lbnRTcGVjLFxuICAgICAgICAgICAgc3R5bGUsXG4gICAgICAgICAgICBzdHlsZVNwZWMsXG4gICAgICAgICAgICBvYmplY3QsXG4gICAgICAgICAgICBvYmplY3RLZXlcbiAgICAgICAgfSwgb2JqZWN0KSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBlbGVtZW50U3BlY0tleSBpbiBlbGVtZW50U3BlY3MpIHtcbiAgICAgICAgLy8gRG9uJ3QgY2hlY2sgYHJlcXVpcmVkYCB3aGVuIHRoZXJlJ3MgYSBjdXN0b20gdmFsaWRhdG9yIGZvciB0aGF0IHByb3BlcnR5LlxuICAgICAgICBpZiAoZWxlbWVudFZhbGlkYXRvcnNbZWxlbWVudFNwZWNLZXldKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbGVtZW50U3BlY3NbZWxlbWVudFNwZWNLZXldLnJlcXVpcmVkICYmIGVsZW1lbnRTcGVjc1tlbGVtZW50U3BlY0tleV1bJ2RlZmF1bHQnXSA9PT0gdW5kZWZpbmVkICYmIG9iamVjdFtlbGVtZW50U3BlY0tleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIG9iamVjdCwgYG1pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgXCIke2VsZW1lbnRTcGVjS2V5fVwiYCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9ycztcbn1cbiIsIlxuaW1wb3J0IGdldFR5cGUgZnJvbSAnLi4vdXRpbC9nZXRfdHlwZSc7XG5pbXBvcnQgdmFsaWRhdGUgZnJvbSAnLi92YWxpZGF0ZSc7XG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3InO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWxpZGF0ZUFycmF5KG9wdGlvbnMpIHtcbiAgICBjb25zdCBhcnJheSA9IG9wdGlvbnMudmFsdWU7XG4gICAgY29uc3QgYXJyYXlTcGVjID0gb3B0aW9ucy52YWx1ZVNwZWM7XG4gICAgY29uc3Qgc3R5bGUgPSBvcHRpb25zLnN0eWxlO1xuICAgIGNvbnN0IHN0eWxlU3BlYyA9IG9wdGlvbnMuc3R5bGVTcGVjO1xuICAgIGNvbnN0IGtleSA9IG9wdGlvbnMua2V5O1xuICAgIGNvbnN0IHZhbGlkYXRlQXJyYXlFbGVtZW50ID0gb3B0aW9ucy5hcnJheUVsZW1lbnRWYWxpZGF0b3IgfHwgdmFsaWRhdGU7XG5cbiAgICBpZiAoZ2V0VHlwZShhcnJheSkgIT09ICdhcnJheScpIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgYXJyYXksIGBhcnJheSBleHBlY3RlZCwgJHtnZXRUeXBlKGFycmF5KX0gZm91bmRgKV07XG4gICAgfVxuXG4gICAgaWYgKGFycmF5U3BlYy5sZW5ndGggJiYgYXJyYXkubGVuZ3RoICE9PSBhcnJheVNwZWMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIGFycmF5LCBgYXJyYXkgbGVuZ3RoICR7YXJyYXlTcGVjLmxlbmd0aH0gZXhwZWN0ZWQsIGxlbmd0aCAke2FycmF5Lmxlbmd0aH0gZm91bmRgKV07XG4gICAgfVxuXG4gICAgaWYgKGFycmF5U3BlY1snbWluLWxlbmd0aCddICYmIGFycmF5Lmxlbmd0aCA8IGFycmF5U3BlY1snbWluLWxlbmd0aCddKSB7XG4gICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIGFycmF5LCBgYXJyYXkgbGVuZ3RoIGF0IGxlYXN0ICR7YXJyYXlTcGVjWydtaW4tbGVuZ3RoJ119IGV4cGVjdGVkLCBsZW5ndGggJHthcnJheS5sZW5ndGh9IGZvdW5kYCldO1xuICAgIH1cblxuICAgIGxldCBhcnJheUVsZW1lbnRTcGVjID0ge1xuICAgICAgICBcInR5cGVcIjogYXJyYXlTcGVjLnZhbHVlLFxuICAgICAgICBcInZhbHVlc1wiOiBhcnJheVNwZWMudmFsdWVzXG4gICAgfTtcblxuICAgIGlmIChzdHlsZVNwZWMuJHZlcnNpb24gPCA3KSB7XG4gICAgICAgIGFycmF5RWxlbWVudFNwZWMuZnVuY3Rpb24gPSBhcnJheVNwZWMuZnVuY3Rpb247XG4gICAgfVxuXG4gICAgaWYgKGdldFR5cGUoYXJyYXlTcGVjLnZhbHVlKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgYXJyYXlFbGVtZW50U3BlYyA9IGFycmF5U3BlYy52YWx1ZTtcbiAgICB9XG5cbiAgICBsZXQgZXJyb3JzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0KHZhbGlkYXRlQXJyYXlFbGVtZW50KHtcbiAgICAgICAgICAgIGFycmF5LFxuICAgICAgICAgICAgYXJyYXlJbmRleDogaSxcbiAgICAgICAgICAgIHZhbHVlOiBhcnJheVtpXSxcbiAgICAgICAgICAgIHZhbHVlU3BlYzogYXJyYXlFbGVtZW50U3BlYyxcbiAgICAgICAgICAgIHN0eWxlLFxuICAgICAgICAgICAgc3R5bGVTcGVjLFxuICAgICAgICAgICAga2V5OiBgJHtrZXl9WyR7aX1dYFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIHJldHVybiBlcnJvcnM7XG59XG4iLCJcbmltcG9ydCBnZXRUeXBlIGZyb20gJy4uL3V0aWwvZ2V0X3R5cGUnO1xuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVOdW1iZXIob3B0aW9ucykge1xuICAgIGNvbnN0IGtleSA9IG9wdGlvbnMua2V5O1xuICAgIGNvbnN0IHZhbHVlID0gb3B0aW9ucy52YWx1ZTtcbiAgICBjb25zdCB2YWx1ZVNwZWMgPSBvcHRpb25zLnZhbHVlU3BlYztcbiAgICBsZXQgdHlwZSA9IGdldFR5cGUodmFsdWUpO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmICh0eXBlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSAhPT0gdmFsdWUpIHtcbiAgICAgICAgdHlwZSA9ICdOYU4nO1xuICAgIH1cblxuICAgIGlmICh0eXBlICE9PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgYG51bWJlciBleHBlY3RlZCwgJHt0eXBlfSBmb3VuZGApXTtcbiAgICB9XG5cbiAgICBpZiAoJ21pbmltdW0nIGluIHZhbHVlU3BlYyAmJiB2YWx1ZSA8IHZhbHVlU3BlYy5taW5pbXVtKSB7XG4gICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCBgJHt2YWx1ZX0gaXMgbGVzcyB0aGFuIHRoZSBtaW5pbXVtIHZhbHVlICR7dmFsdWVTcGVjLm1pbmltdW19YCldO1xuICAgIH1cblxuICAgIGlmICgnbWF4aW11bScgaW4gdmFsdWVTcGVjICYmIHZhbHVlID4gdmFsdWVTcGVjLm1heGltdW0pIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsIGAke3ZhbHVlfSBpcyBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gdmFsdWUgJHt2YWx1ZVNwZWMubWF4aW11bX1gKV07XG4gICAgfVxuXG4gICAgcmV0dXJuIFtdO1xufVxuIiwiXG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3InO1xuaW1wb3J0IGdldFR5cGUgZnJvbSAnLi4vdXRpbC9nZXRfdHlwZSc7XG5pbXBvcnQgdmFsaWRhdGUgZnJvbSAnLi92YWxpZGF0ZSc7XG5pbXBvcnQgdmFsaWRhdGVPYmplY3QgZnJvbSAnLi92YWxpZGF0ZV9vYmplY3QnO1xuaW1wb3J0IHZhbGlkYXRlQXJyYXkgZnJvbSAnLi92YWxpZGF0ZV9hcnJheSc7XG5pbXBvcnQgdmFsaWRhdGVOdW1iZXIgZnJvbSAnLi92YWxpZGF0ZV9udW1iZXInO1xuaW1wb3J0IHtpc0V4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHt1bmJ1bmRsZSwgZGVlcFVuYnVuZGxlfSBmcm9tICcuLi91dGlsL3VuYnVuZGxlX2pzb25saW50JztcbmltcG9ydCB7XG4gICAgc3VwcG9ydHNQcm9wZXJ0eUV4cHJlc3Npb24sXG4gICAgc3VwcG9ydHNab29tRXhwcmVzc2lvbixcbiAgICBzdXBwb3J0c0ludGVycG9sYXRpb25cbn0gZnJvbSAnLi4vdXRpbC9wcm9wZXJ0aWVzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVGdW5jdGlvbihvcHRpb25zKSB7XG4gICAgY29uc3QgZnVuY3Rpb25WYWx1ZVNwZWMgPSBvcHRpb25zLnZhbHVlU3BlYztcbiAgICBjb25zdCBmdW5jdGlvblR5cGUgPSB1bmJ1bmRsZShvcHRpb25zLnZhbHVlLnR5cGUpO1xuICAgIGxldCBzdG9wS2V5VHlwZTtcbiAgICBsZXQgc3RvcERvbWFpblZhbHVlcyA9IHt9O1xuICAgIGxldCBwcmV2aW91c1N0b3BEb21haW5WYWx1ZTtcbiAgICBsZXQgcHJldmlvdXNTdG9wRG9tYWluWm9vbTtcblxuICAgIGNvbnN0IGlzWm9vbUZ1bmN0aW9uID0gZnVuY3Rpb25UeXBlICE9PSAnY2F0ZWdvcmljYWwnICYmIG9wdGlvbnMudmFsdWUucHJvcGVydHkgPT09IHVuZGVmaW5lZDtcbiAgICBjb25zdCBpc1Byb3BlcnR5RnVuY3Rpb24gPSAhaXNab29tRnVuY3Rpb247XG4gICAgY29uc3QgaXNab29tQW5kUHJvcGVydHlGdW5jdGlvbiA9XG4gICAgICAgIGdldFR5cGUob3B0aW9ucy52YWx1ZS5zdG9wcykgPT09ICdhcnJheScgJiZcbiAgICAgICAgZ2V0VHlwZShvcHRpb25zLnZhbHVlLnN0b3BzWzBdKSA9PT0gJ2FycmF5JyAmJlxuICAgICAgICBnZXRUeXBlKG9wdGlvbnMudmFsdWUuc3RvcHNbMF1bMF0pID09PSAnb2JqZWN0JztcblxuICAgIGNvbnN0IGVycm9ycyA9IHZhbGlkYXRlT2JqZWN0KHtcbiAgICAgICAga2V5OiBvcHRpb25zLmtleSxcbiAgICAgICAgdmFsdWU6IG9wdGlvbnMudmFsdWUsXG4gICAgICAgIHZhbHVlU3BlYzogb3B0aW9ucy5zdHlsZVNwZWMuZnVuY3Rpb24sXG4gICAgICAgIHN0eWxlOiBvcHRpb25zLnN0eWxlLFxuICAgICAgICBzdHlsZVNwZWM6IG9wdGlvbnMuc3R5bGVTcGVjLFxuICAgICAgICBvYmplY3RFbGVtZW50VmFsaWRhdG9yczoge1xuICAgICAgICAgICAgc3RvcHM6IHZhbGlkYXRlRnVuY3Rpb25TdG9wcyxcbiAgICAgICAgICAgIGRlZmF1bHQ6IHZhbGlkYXRlRnVuY3Rpb25EZWZhdWx0XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChmdW5jdGlvblR5cGUgPT09ICdpZGVudGl0eScgJiYgaXNab29tRnVuY3Rpb24pIHtcbiAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihvcHRpb25zLmtleSwgb3B0aW9ucy52YWx1ZSwgJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgXCJwcm9wZXJ0eVwiJykpO1xuICAgIH1cblxuICAgIGlmIChmdW5jdGlvblR5cGUgIT09ICdpZGVudGl0eScgJiYgIW9wdGlvbnMudmFsdWUuc3RvcHMpIHtcbiAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihvcHRpb25zLmtleSwgb3B0aW9ucy52YWx1ZSwgJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgXCJzdG9wc1wiJykpO1xuICAgIH1cblxuICAgIGlmIChmdW5jdGlvblR5cGUgPT09ICdleHBvbmVudGlhbCcgJiYgb3B0aW9ucy52YWx1ZVNwZWMuZXhwcmVzc2lvbiAmJiAhc3VwcG9ydHNJbnRlcnBvbGF0aW9uKG9wdGlvbnMudmFsdWVTcGVjKSkge1xuICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCBvcHRpb25zLnZhbHVlLCAnZXhwb25lbnRpYWwgZnVuY3Rpb25zIG5vdCBzdXBwb3J0ZWQnKSk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuc3R5bGVTcGVjLiR2ZXJzaW9uID49IDgpIHtcbiAgICAgICAgaWYgKGlzUHJvcGVydHlGdW5jdGlvbiAmJiAhc3VwcG9ydHNQcm9wZXJ0eUV4cHJlc3Npb24ob3B0aW9ucy52YWx1ZVNwZWMpKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCBvcHRpb25zLnZhbHVlLCAncHJvcGVydHkgZnVuY3Rpb25zIG5vdCBzdXBwb3J0ZWQnKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNab29tRnVuY3Rpb24gJiYgIXN1cHBvcnRzWm9vbUV4cHJlc3Npb24ob3B0aW9ucy52YWx1ZVNwZWMpKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCBvcHRpb25zLnZhbHVlLCAnem9vbSBmdW5jdGlvbnMgbm90IHN1cHBvcnRlZCcpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICgoZnVuY3Rpb25UeXBlID09PSAnY2F0ZWdvcmljYWwnIHx8IGlzWm9vbUFuZFByb3BlcnR5RnVuY3Rpb24pICYmIG9wdGlvbnMudmFsdWUucHJvcGVydHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCBvcHRpb25zLnZhbHVlLCAnXCJwcm9wZXJ0eVwiIHByb3BlcnR5IGlzIHJlcXVpcmVkJykpO1xuICAgIH1cblxuICAgIHJldHVybiBlcnJvcnM7XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUZ1bmN0aW9uU3RvcHMob3B0aW9ucykge1xuICAgICAgICBpZiAoZnVuY3Rpb25UeXBlID09PSAnaWRlbnRpdHknKSB7XG4gICAgICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Iob3B0aW9ucy5rZXksIG9wdGlvbnMudmFsdWUsICdpZGVudGl0eSBmdW5jdGlvbiBtYXkgbm90IGhhdmUgYSBcInN0b3BzXCIgcHJvcGVydHknKV07XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZXJyb3JzID0gW107XG4gICAgICAgIGNvbnN0IHZhbHVlID0gb3B0aW9ucy52YWx1ZTtcblxuICAgICAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0KHZhbGlkYXRlQXJyYXkoe1xuICAgICAgICAgICAga2V5OiBvcHRpb25zLmtleSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgdmFsdWVTcGVjOiBvcHRpb25zLnZhbHVlU3BlYyxcbiAgICAgICAgICAgIHN0eWxlOiBvcHRpb25zLnN0eWxlLFxuICAgICAgICAgICAgc3R5bGVTcGVjOiBvcHRpb25zLnN0eWxlU3BlYyxcbiAgICAgICAgICAgIGFycmF5RWxlbWVudFZhbGlkYXRvcjogdmFsaWRhdGVGdW5jdGlvblN0b3BcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIGlmIChnZXRUeXBlKHZhbHVlKSA9PT0gJ2FycmF5JyAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Iob3B0aW9ucy5rZXksIHZhbHVlLCAnYXJyYXkgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBzdG9wJykpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVycm9ycztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUZ1bmN0aW9uU3RvcChvcHRpb25zKSB7XG4gICAgICAgIGxldCBlcnJvcnMgPSBbXTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuICAgICAgICBjb25zdCBrZXkgPSBvcHRpb25zLmtleTtcblxuICAgICAgICBpZiAoZ2V0VHlwZSh2YWx1ZSkgIT09ICdhcnJheScpIHtcbiAgICAgICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCBgYXJyYXkgZXhwZWN0ZWQsICR7Z2V0VHlwZSh2YWx1ZSl9IGZvdW5kYCldO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCAhPT0gMikge1xuICAgICAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsIGBhcnJheSBsZW5ndGggMiBleHBlY3RlZCwgbGVuZ3RoICR7dmFsdWUubGVuZ3RofSBmb3VuZGApXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1pvb21BbmRQcm9wZXJ0eUZ1bmN0aW9uKSB7XG4gICAgICAgICAgICBpZiAoZ2V0VHlwZSh2YWx1ZVswXSkgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsIGBvYmplY3QgZXhwZWN0ZWQsICR7Z2V0VHlwZSh2YWx1ZVswXSl9IGZvdW5kYCldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlWzBdLnpvb20gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCAnb2JqZWN0IHN0b3Aga2V5IG11c3QgaGF2ZSB6b29tJyldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlWzBdLnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgJ29iamVjdCBzdG9wIGtleSBtdXN0IGhhdmUgdmFsdWUnKV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJldmlvdXNTdG9wRG9tYWluWm9vbSAmJiBwcmV2aW91c1N0b3BEb21haW5ab29tID4gdW5idW5kbGUodmFsdWVbMF0uem9vbSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZVswXS56b29tLCAnc3RvcCB6b29tIHZhbHVlcyBtdXN0IGFwcGVhciBpbiBhc2NlbmRpbmcgb3JkZXInKV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodW5idW5kbGUodmFsdWVbMF0uem9vbSkgIT09IHByZXZpb3VzU3RvcERvbWFpblpvb20pIHtcbiAgICAgICAgICAgICAgICBwcmV2aW91c1N0b3BEb21haW5ab29tID0gdW5idW5kbGUodmFsdWVbMF0uem9vbSk7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNTdG9wRG9tYWluVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgc3RvcERvbWFpblZhbHVlcyA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdCh2YWxpZGF0ZU9iamVjdCh7XG4gICAgICAgICAgICAgICAga2V5OiBgJHtrZXl9WzBdYCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVbMF0sXG4gICAgICAgICAgICAgICAgdmFsdWVTcGVjOiB7em9vbToge319LFxuICAgICAgICAgICAgICAgIHN0eWxlOiBvcHRpb25zLnN0eWxlLFxuICAgICAgICAgICAgICAgIHN0eWxlU3BlYzogb3B0aW9ucy5zdHlsZVNwZWMsXG4gICAgICAgICAgICAgICAgb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6IHt6b29tOiB2YWxpZGF0ZU51bWJlciwgdmFsdWU6IHZhbGlkYXRlU3RvcERvbWFpblZhbHVlfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdCh2YWxpZGF0ZVN0b3BEb21haW5WYWx1ZSh7XG4gICAgICAgICAgICAgICAga2V5OiBgJHtrZXl9WzBdYCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVbMF0sXG4gICAgICAgICAgICAgICAgdmFsdWVTcGVjOiB7fSxcbiAgICAgICAgICAgICAgICBzdHlsZTogb3B0aW9ucy5zdHlsZSxcbiAgICAgICAgICAgICAgICBzdHlsZVNwZWM6IG9wdGlvbnMuc3R5bGVTcGVjXG4gICAgICAgICAgICB9LCB2YWx1ZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRXhwcmVzc2lvbihkZWVwVW5idW5kbGUodmFsdWVbMV0pKSkge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9ycy5jb25jYXQoW25ldyBWYWxpZGF0aW9uRXJyb3IoYCR7a2V5fVsxXWAsIHZhbHVlWzFdLCAnZXhwcmVzc2lvbnMgYXJlIG5vdCBhbGxvd2VkIGluIGZ1bmN0aW9uIHN0b3BzLicpXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXJyb3JzLmNvbmNhdCh2YWxpZGF0ZSh7XG4gICAgICAgICAgICBrZXk6IGAke2tleX1bMV1gLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlWzFdLFxuICAgICAgICAgICAgdmFsdWVTcGVjOiBmdW5jdGlvblZhbHVlU3BlYyxcbiAgICAgICAgICAgIHN0eWxlOiBvcHRpb25zLnN0eWxlLFxuICAgICAgICAgICAgc3R5bGVTcGVjOiBvcHRpb25zLnN0eWxlU3BlY1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGVTdG9wRG9tYWluVmFsdWUob3B0aW9ucywgc3RvcCkge1xuICAgICAgICBjb25zdCB0eXBlID0gZ2V0VHlwZShvcHRpb25zLnZhbHVlKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB1bmJ1bmRsZShvcHRpb25zLnZhbHVlKTtcblxuICAgICAgICBjb25zdCByZXBvcnRWYWx1ZSA9IG9wdGlvbnMudmFsdWUgIT09IG51bGwgPyBvcHRpb25zLnZhbHVlIDogc3RvcDtcblxuICAgICAgICBpZiAoIXN0b3BLZXlUeXBlKSB7XG4gICAgICAgICAgICBzdG9wS2V5VHlwZSA9IHR5cGU7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSAhPT0gc3RvcEtleVR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihvcHRpb25zLmtleSwgcmVwb3J0VmFsdWUsIGAke3R5cGV9IHN0b3AgZG9tYWluIHR5cGUgbXVzdCBtYXRjaCBwcmV2aW91cyBzdG9wIGRvbWFpbiB0eXBlICR7c3RvcEtleVR5cGV9YCldO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGUgIT09ICdudW1iZXInICYmIHR5cGUgIT09ICdzdHJpbmcnICYmIHR5cGUgIT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCByZXBvcnRWYWx1ZSwgJ3N0b3AgZG9tYWluIHZhbHVlIG11c3QgYmUgYSBudW1iZXIsIHN0cmluZywgb3IgYm9vbGVhbicpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlICE9PSAnbnVtYmVyJyAmJiBmdW5jdGlvblR5cGUgIT09ICdjYXRlZ29yaWNhbCcpIHtcbiAgICAgICAgICAgIGxldCBtZXNzYWdlID0gYG51bWJlciBleHBlY3RlZCwgJHt0eXBlfSBmb3VuZGA7XG4gICAgICAgICAgICBpZiAoc3VwcG9ydHNQcm9wZXJ0eUV4cHJlc3Npb24oZnVuY3Rpb25WYWx1ZVNwZWMpICYmIGZ1bmN0aW9uVHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZSArPSAnXFxuSWYgeW91IGludGVuZGVkIHRvIHVzZSBhIGNhdGVnb3JpY2FsIGZ1bmN0aW9uLCBzcGVjaWZ5IGBcInR5cGVcIjogXCJjYXRlZ29yaWNhbFwiYC4nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCByZXBvcnRWYWx1ZSwgbWVzc2FnZSldO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZ1bmN0aW9uVHlwZSA9PT0gJ2NhdGVnb3JpY2FsJyAmJiB0eXBlID09PSAnbnVtYmVyJyAmJiAoIWlzRmluaXRlKHZhbHVlKSB8fCBNYXRoLmZsb29yKHZhbHVlKSAhPT0gdmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Iob3B0aW9ucy5rZXksIHJlcG9ydFZhbHVlLCBgaW50ZWdlciBleHBlY3RlZCwgZm91bmQgJHt2YWx1ZX1gKV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZnVuY3Rpb25UeXBlICE9PSAnY2F0ZWdvcmljYWwnICYmIHR5cGUgPT09ICdudW1iZXInICYmIHByZXZpb3VzU3RvcERvbWFpblZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgPCBwcmV2aW91c1N0b3BEb21haW5WYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCByZXBvcnRWYWx1ZSwgJ3N0b3AgZG9tYWluIHZhbHVlcyBtdXN0IGFwcGVhciBpbiBhc2NlbmRpbmcgb3JkZXInKV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcmV2aW91c1N0b3BEb21haW5WYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZ1bmN0aW9uVHlwZSA9PT0gJ2NhdGVnb3JpY2FsJyAmJiB2YWx1ZSBpbiBzdG9wRG9tYWluVmFsdWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Iob3B0aW9ucy5rZXksIHJlcG9ydFZhbHVlLCAnc3RvcCBkb21haW4gdmFsdWVzIG11c3QgYmUgdW5pcXVlJyldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RvcERvbWFpblZhbHVlc1t2YWx1ZV0gPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlRnVuY3Rpb25EZWZhdWx0KG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHtcbiAgICAgICAgICAgIGtleTogb3B0aW9ucy5rZXksXG4gICAgICAgICAgICB2YWx1ZTogb3B0aW9ucy52YWx1ZSxcbiAgICAgICAgICAgIHZhbHVlU3BlYzogZnVuY3Rpb25WYWx1ZVNwZWMsXG4gICAgICAgICAgICBzdHlsZTogb3B0aW9ucy5zdHlsZSxcbiAgICAgICAgICAgIHN0eWxlU3BlYzogb3B0aW9ucy5zdHlsZVNwZWNcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yJztcblxuaW1wb3J0IHtjcmVhdGVFeHByZXNzaW9uLCBjcmVhdGVQcm9wZXJ0eUV4cHJlc3Npb259IGZyb20gJy4uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHtkZWVwVW5idW5kbGV9IGZyb20gJy4uL3V0aWwvdW5idW5kbGVfanNvbmxpbnQnO1xuaW1wb3J0IHtpc1N0YXRlQ29uc3RhbnQsIGlzR2xvYmFsUHJvcGVydHlDb25zdGFudCwgaXNGZWF0dXJlQ29uc3RhbnR9IGZyb20gJy4uL2V4cHJlc3Npb24vaXNfY29uc3RhbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWxpZGF0ZUV4cHJlc3Npb24ob3B0aW9uczogYW55KTogQXJyYXk8VmFsaWRhdGlvbkVycm9yPiB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IChvcHRpb25zLmV4cHJlc3Npb25Db250ZXh0ID09PSAncHJvcGVydHknID8gY3JlYXRlUHJvcGVydHlFeHByZXNzaW9uIDogY3JlYXRlRXhwcmVzc2lvbikoZGVlcFVuYnVuZGxlKG9wdGlvbnMudmFsdWUpLCBvcHRpb25zLnZhbHVlU3BlYyk7XG4gICAgaWYgKGV4cHJlc3Npb24ucmVzdWx0ID09PSAnZXJyb3InKSB7XG4gICAgICAgIHJldHVybiBleHByZXNzaW9uLnZhbHVlLm1hcCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmFsaWRhdGlvbkVycm9yKGAke29wdGlvbnMua2V5fSR7ZXJyb3Iua2V5fWAsIG9wdGlvbnMudmFsdWUsIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBleHByZXNzaW9uT2JqID0gKGV4cHJlc3Npb24udmFsdWU6IGFueSkuZXhwcmVzc2lvbiB8fCAoZXhwcmVzc2lvbi52YWx1ZTogYW55KS5fc3R5bGVFeHByZXNzaW9uLmV4cHJlc3Npb247XG5cbiAgICBpZiAob3B0aW9ucy5leHByZXNzaW9uQ29udGV4dCA9PT0gJ3Byb3BlcnR5JyAmJiAob3B0aW9ucy5wcm9wZXJ0eUtleSA9PT0gJ3RleHQtZm9udCcpICYmXG4gICAgICAgICFleHByZXNzaW9uT2JqLm91dHB1dERlZmluZWQoKSkge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Iob3B0aW9ucy5rZXksIG9wdGlvbnMudmFsdWUsIGBJbnZhbGlkIGRhdGEgZXhwcmVzc2lvbiBmb3IgXCIke29wdGlvbnMucHJvcGVydHlLZXl9XCIuIE91dHB1dCB2YWx1ZXMgbXVzdCBiZSBjb250YWluZWQgYXMgbGl0ZXJhbHMgd2l0aGluIHRoZSBleHByZXNzaW9uLmApXTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5leHByZXNzaW9uQ29udGV4dCA9PT0gJ3Byb3BlcnR5JyAmJiBvcHRpb25zLnByb3BlcnR5VHlwZSA9PT0gJ2xheW91dCcgJiZcbiAgICAgICAgKCFpc1N0YXRlQ29uc3RhbnQoZXhwcmVzc2lvbk9iaikpKSB7XG4gICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihvcHRpb25zLmtleSwgb3B0aW9ucy52YWx1ZSwgJ1wiZmVhdHVyZS1zdGF0ZVwiIGRhdGEgZXhwcmVzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCBsYXlvdXQgcHJvcGVydGllcy4nKV07XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZXhwcmVzc2lvbkNvbnRleHQgPT09ICdmaWx0ZXInICYmICFpc1N0YXRlQ29uc3RhbnQoZXhwcmVzc2lvbk9iaikpIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMua2V5LCBvcHRpb25zLnZhbHVlLCAnXCJmZWF0dXJlLXN0YXRlXCIgZGF0YSBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIGZpbHRlcnMuJyldO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmV4cHJlc3Npb25Db250ZXh0ICYmIG9wdGlvbnMuZXhwcmVzc2lvbkNvbnRleHQuaW5kZXhPZignY2x1c3RlcicpID09PSAwKSB7XG4gICAgICAgIGlmICghaXNHbG9iYWxQcm9wZXJ0eUNvbnN0YW50KGV4cHJlc3Npb25PYmosIFsnem9vbScsICdmZWF0dXJlLXN0YXRlJ10pKSB7XG4gICAgICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Iob3B0aW9ucy5rZXksIG9wdGlvbnMudmFsdWUsICdcInpvb21cIiBhbmQgXCJmZWF0dXJlLXN0YXRlXCIgZXhwcmVzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCBjbHVzdGVyIHByb3BlcnRpZXMuJyldO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmV4cHJlc3Npb25Db250ZXh0ID09PSAnY2x1c3Rlci1pbml0aWFsJyAmJiAhaXNGZWF0dXJlQ29uc3RhbnQoZXhwcmVzc2lvbk9iaikpIHtcbiAgICAgICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihvcHRpb25zLmtleSwgb3B0aW9ucy52YWx1ZSwgJ0ZlYXR1cmUgZGF0YSBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIGluaXRpYWwgZXhwcmVzc2lvbiBwYXJ0IG9mIGNsdXN0ZXIgcHJvcGVydGllcy4nKV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gW107XG59XG4iLCJcbmltcG9ydCBnZXRUeXBlIGZyb20gJy4uL3V0aWwvZ2V0X3R5cGUnO1xuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVCb29sZWFuKG9wdGlvbnMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnMudmFsdWU7XG4gICAgY29uc3Qga2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgY29uc3QgdHlwZSA9IGdldFR5cGUodmFsdWUpO1xuXG4gICAgaWYgKHR5cGUgIT09ICdib29sZWFuJykge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgYGJvb2xlYW4gZXhwZWN0ZWQsICR7dHlwZX0gZm91bmRgKV07XG4gICAgfVxuXG4gICAgcmV0dXJuIFtdO1xufVxuIiwiXG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3InO1xuaW1wb3J0IGdldFR5cGUgZnJvbSAnLi4vdXRpbC9nZXRfdHlwZSc7XG5pbXBvcnQge3BhcnNlQ1NTQ29sb3J9IGZyb20gJ2Nzc2NvbG9ycGFyc2VyJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVDb2xvcihvcHRpb25zKSB7XG4gICAgY29uc3Qga2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgY29uc3QgdmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuICAgIGNvbnN0IHR5cGUgPSBnZXRUeXBlKHZhbHVlKTtcblxuICAgIGlmICh0eXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgYGNvbG9yIGV4cGVjdGVkLCAke3R5cGV9IGZvdW5kYCldO1xuICAgIH1cblxuICAgIGlmIChwYXJzZUNTU0NvbG9yKHZhbHVlKSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgYGNvbG9yIGV4cGVjdGVkLCBcIiR7dmFsdWV9XCIgZm91bmRgKV07XG4gICAgfVxuXG4gICAgcmV0dXJuIFtdO1xufVxuIiwiXG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3InO1xuaW1wb3J0IHt1bmJ1bmRsZX0gZnJvbSAnLi4vdXRpbC91bmJ1bmRsZV9qc29ubGludCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlRW51bShvcHRpb25zKSB7XG4gICAgY29uc3Qga2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgY29uc3QgdmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuICAgIGNvbnN0IHZhbHVlU3BlYyA9IG9wdGlvbnMudmFsdWVTcGVjO1xuICAgIGNvbnN0IGVycm9ycyA9IFtdO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWVTcGVjLnZhbHVlcykpIHsgLy8gPD12N1xuICAgICAgICBpZiAodmFsdWVTcGVjLnZhbHVlcy5pbmRleE9mKHVuYnVuZGxlKHZhbHVlKSkgPT09IC0xKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsIGBleHBlY3RlZCBvbmUgb2YgWyR7dmFsdWVTcGVjLnZhbHVlcy5qb2luKCcsICcpfV0sICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfSBmb3VuZGApKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7IC8vID49djhcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHZhbHVlU3BlYy52YWx1ZXMpLmluZGV4T2YodW5idW5kbGUodmFsdWUpKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgYGV4cGVjdGVkIG9uZSBvZiBbJHtPYmplY3Qua2V5cyh2YWx1ZVNwZWMudmFsdWVzKS5qb2luKCcsICcpfV0sICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfSBmb3VuZGApKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXJyb3JzO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtjcmVhdGVFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIHtHbG9iYWxQcm9wZXJ0aWVzLCBGZWF0dXJlfSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIHtDYW5vbmljYWxUaWxlSUR9IGZyb20gJy4uLy4uL3NvdXJjZS90aWxlX2lkJztcblxudHlwZSBGaWx0ZXJFeHByZXNzaW9uID0gKGdsb2JhbFByb3BlcnRpZXM6IEdsb2JhbFByb3BlcnRpZXMsIGZlYXR1cmU6IEZlYXR1cmUsIGNhbm9uaWNhbD86IENhbm9uaWNhbFRpbGVJRCkgPT4gYm9vbGVhbjtcbmV4cG9ydCB0eXBlIEZlYXR1cmVGaWx0ZXIgPXtmaWx0ZXI6IEZpbHRlckV4cHJlc3Npb24sIG5lZWRHZW9tZXRyeTogYm9vbGVhbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUZpbHRlcjtcbmV4cG9ydCB7aXNFeHByZXNzaW9uRmlsdGVyfTtcblxuZnVuY3Rpb24gaXNFeHByZXNzaW9uRmlsdGVyKGZpbHRlcjogYW55KSB7XG4gICAgaWYgKGZpbHRlciA9PT0gdHJ1ZSB8fCBmaWx0ZXIgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShmaWx0ZXIpIHx8IGZpbHRlci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBzd2l0Y2ggKGZpbHRlclswXSkge1xuICAgIGNhc2UgJ2hhcyc6XG4gICAgICAgIHJldHVybiBmaWx0ZXIubGVuZ3RoID49IDIgJiYgZmlsdGVyWzFdICE9PSAnJGlkJyAmJiBmaWx0ZXJbMV0gIT09ICckdHlwZSc7XG5cbiAgICBjYXNlICdpbic6XG4gICAgICAgIHJldHVybiBmaWx0ZXIubGVuZ3RoID49IDMgJiYgKHR5cGVvZiBmaWx0ZXJbMV0gIT09ICdzdHJpbmcnIHx8IEFycmF5LmlzQXJyYXkoZmlsdGVyWzJdKSk7XG5cbiAgICBjYXNlICchaW4nOlxuICAgIGNhc2UgJyFoYXMnOlxuICAgIGNhc2UgJ25vbmUnOlxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBjYXNlICc9PSc6XG4gICAgY2FzZSAnIT0nOlxuICAgIGNhc2UgJz4nOlxuICAgIGNhc2UgJz49JzpcbiAgICBjYXNlICc8JzpcbiAgICBjYXNlICc8PSc6XG4gICAgICAgIHJldHVybiBmaWx0ZXIubGVuZ3RoICE9PSAzIHx8IChBcnJheS5pc0FycmF5KGZpbHRlclsxXSkgfHwgQXJyYXkuaXNBcnJheShmaWx0ZXJbMl0pKTtcblxuICAgIGNhc2UgJ2FueSc6XG4gICAgY2FzZSAnYWxsJzpcbiAgICAgICAgZm9yIChjb25zdCBmIG9mIGZpbHRlci5zbGljZSgxKSkge1xuICAgICAgICAgICAgaWYgKCFpc0V4cHJlc3Npb25GaWx0ZXIoZikgJiYgdHlwZW9mIGYgIT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cblxuY29uc3QgZmlsdGVyU3BlYyA9IHtcbiAgICAndHlwZSc6ICdib29sZWFuJyxcbiAgICAnZGVmYXVsdCc6IGZhbHNlLFxuICAgICd0cmFuc2l0aW9uJzogZmFsc2UsXG4gICAgJ3Byb3BlcnR5LXR5cGUnOiAnZGF0YS1kcml2ZW4nLFxuICAgICdleHByZXNzaW9uJzoge1xuICAgICAgICAnaW50ZXJwb2xhdGVkJzogZmFsc2UsXG4gICAgICAgICdwYXJhbWV0ZXJzJzogWyd6b29tJywgJ2ZlYXR1cmUnXVxuICAgIH1cbn07XG5cbi8qKlxuICogR2l2ZW4gYSBmaWx0ZXIgZXhwcmVzc2VkIGFzIG5lc3RlZCBhcnJheXMsIHJldHVybiBhIG5ldyBmdW5jdGlvblxuICogdGhhdCBldmFsdWF0ZXMgd2hldGhlciBhIGdpdmVuIGZlYXR1cmUgKHdpdGggYSAucHJvcGVydGllcyBvciAudGFncyBwcm9wZXJ0eSlcbiAqIHBhc3NlcyBpdHMgdGVzdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gZmlsdGVyIG1hcGJveCBnbCBmaWx0ZXJcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gZmlsdGVyLWV2YWx1YXRpbmcgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRmlsdGVyKGZpbHRlcjogYW55KTogRmVhdHVyZUZpbHRlciB7XG4gICAgaWYgKGZpbHRlciA9PT0gbnVsbCB8fCBmaWx0ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4ge2ZpbHRlcjogKCkgPT4gdHJ1ZSwgbmVlZEdlb21ldHJ5OiBmYWxzZX07XG4gICAgfVxuXG4gICAgaWYgKCFpc0V4cHJlc3Npb25GaWx0ZXIoZmlsdGVyKSkge1xuICAgICAgICBmaWx0ZXIgPSBjb252ZXJ0RmlsdGVyKGZpbHRlcik7XG4gICAgfVxuXG4gICAgY29uc3QgY29tcGlsZWQgPSBjcmVhdGVFeHByZXNzaW9uKGZpbHRlciwgZmlsdGVyU3BlYyk7XG4gICAgaWYgKGNvbXBpbGVkLnJlc3VsdCA9PT0gJ2Vycm9yJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoY29tcGlsZWQudmFsdWUubWFwKGVyciA9PiBgJHtlcnIua2V5fTogJHtlcnIubWVzc2FnZX1gKS5qb2luKCcsICcpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBuZWVkR2VvbWV0cnkgPSBnZW9tZXRyeU5lZWRlZChmaWx0ZXIpO1xuICAgICAgICByZXR1cm4ge2ZpbHRlcjogKGdsb2JhbFByb3BlcnRpZXM6IEdsb2JhbFByb3BlcnRpZXMsIGZlYXR1cmU6IEZlYXR1cmUsIGNhbm9uaWNhbD86IENhbm9uaWNhbFRpbGVJRCkgPT4gY29tcGlsZWQudmFsdWUuZXZhbHVhdGUoZ2xvYmFsUHJvcGVydGllcywgZmVhdHVyZSwge30sIGNhbm9uaWNhbCksXG4gICAgICAgICAgICBuZWVkR2VvbWV0cnl9O1xuICAgIH1cbn1cblxuLy8gQ29tcGFyaXNvbiBmdW5jdGlvbiB0byBzb3J0IG51bWJlcnMgYW5kIHN0cmluZ3NcbmZ1bmN0aW9uIGNvbXBhcmUoYSwgYikge1xuICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDtcbn1cblxuZnVuY3Rpb24gZ2VvbWV0cnlOZWVkZWQoZmlsdGVyKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGZpbHRlcikpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoZmlsdGVyWzBdID09PSAnd2l0aGluJykgcmV0dXJuIHRydWU7XG4gICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IGZpbHRlci5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgaWYgKGdlb21ldHJ5TmVlZGVkKGZpbHRlcltpbmRleF0pKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0RmlsdGVyKGZpbHRlcjogP0FycmF5PGFueT4pOiBtaXhlZCB7XG4gICAgaWYgKCFmaWx0ZXIpIHJldHVybiB0cnVlO1xuICAgIGNvbnN0IG9wID0gZmlsdGVyWzBdO1xuICAgIGlmIChmaWx0ZXIubGVuZ3RoIDw9IDEpIHJldHVybiAob3AgIT09ICdhbnknKTtcbiAgICBjb25zdCBjb252ZXJ0ZWQgPVxuICAgICAgICBvcCA9PT0gJz09JyA/IGNvbnZlcnRDb21wYXJpc29uT3AoZmlsdGVyWzFdLCBmaWx0ZXJbMl0sICc9PScpIDpcbiAgICAgICAgb3AgPT09ICchPScgPyBjb252ZXJ0TmVnYXRpb24oY29udmVydENvbXBhcmlzb25PcChmaWx0ZXJbMV0sIGZpbHRlclsyXSwgJz09JykpIDpcbiAgICAgICAgb3AgPT09ICc8JyB8fFxuICAgICAgICBvcCA9PT0gJz4nIHx8XG4gICAgICAgIG9wID09PSAnPD0nIHx8XG4gICAgICAgIG9wID09PSAnPj0nID8gY29udmVydENvbXBhcmlzb25PcChmaWx0ZXJbMV0sIGZpbHRlclsyXSwgb3ApIDpcbiAgICAgICAgb3AgPT09ICdhbnknID8gY29udmVydERpc2p1bmN0aW9uT3AoZmlsdGVyLnNsaWNlKDEpKSA6XG4gICAgICAgIG9wID09PSAnYWxsJyA/IFsnYWxsJ10uY29uY2F0KGZpbHRlci5zbGljZSgxKS5tYXAoY29udmVydEZpbHRlcikpIDpcbiAgICAgICAgb3AgPT09ICdub25lJyA/IFsnYWxsJ10uY29uY2F0KGZpbHRlci5zbGljZSgxKS5tYXAoY29udmVydEZpbHRlcikubWFwKGNvbnZlcnROZWdhdGlvbikpIDpcbiAgICAgICAgb3AgPT09ICdpbicgPyBjb252ZXJ0SW5PcChmaWx0ZXJbMV0sIGZpbHRlci5zbGljZSgyKSkgOlxuICAgICAgICBvcCA9PT0gJyFpbicgPyBjb252ZXJ0TmVnYXRpb24oY29udmVydEluT3AoZmlsdGVyWzFdLCBmaWx0ZXIuc2xpY2UoMikpKSA6XG4gICAgICAgIG9wID09PSAnaGFzJyA/IGNvbnZlcnRIYXNPcChmaWx0ZXJbMV0pIDpcbiAgICAgICAgb3AgPT09ICchaGFzJyA/IGNvbnZlcnROZWdhdGlvbihjb252ZXJ0SGFzT3AoZmlsdGVyWzFdKSkgOlxuICAgICAgICBvcCA9PT0gJ3dpdGhpbicgPyBmaWx0ZXIgOlxuICAgICAgICB0cnVlO1xuICAgIHJldHVybiBjb252ZXJ0ZWQ7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRDb21wYXJpc29uT3AocHJvcGVydHk6IHN0cmluZywgdmFsdWU6IGFueSwgb3A6IHN0cmluZykge1xuICAgIHN3aXRjaCAocHJvcGVydHkpIHtcbiAgICBjYXNlICckdHlwZSc6XG4gICAgICAgIHJldHVybiBbYGZpbHRlci10eXBlLSR7b3B9YCwgdmFsdWVdO1xuICAgIGNhc2UgJyRpZCc6XG4gICAgICAgIHJldHVybiBbYGZpbHRlci1pZC0ke29wfWAsIHZhbHVlXTtcbiAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gW2BmaWx0ZXItJHtvcH1gLCBwcm9wZXJ0eSwgdmFsdWVdO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY29udmVydERpc2p1bmN0aW9uT3AoZmlsdGVyczogQXJyYXk8QXJyYXk8YW55Pj4pIHtcbiAgICByZXR1cm4gWydhbnknXS5jb25jYXQoZmlsdGVycy5tYXAoY29udmVydEZpbHRlcikpO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0SW5PcChwcm9wZXJ0eTogc3RyaW5nLCB2YWx1ZXM6IEFycmF5PGFueT4pIHtcbiAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICBzd2l0Y2ggKHByb3BlcnR5KSB7XG4gICAgY2FzZSAnJHR5cGUnOlxuICAgICAgICByZXR1cm4gW2BmaWx0ZXItdHlwZS1pbmAsIFsnbGl0ZXJhbCcsIHZhbHVlc11dO1xuICAgIGNhc2UgJyRpZCc6XG4gICAgICAgIHJldHVybiBbYGZpbHRlci1pZC1pbmAsIFsnbGl0ZXJhbCcsIHZhbHVlc11dO1xuICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID4gMjAwICYmICF2YWx1ZXMuc29tZSh2ID0+IHR5cGVvZiB2ICE9PSB0eXBlb2YgdmFsdWVzWzBdKSkge1xuICAgICAgICAgICAgcmV0dXJuIFsnZmlsdGVyLWluLWxhcmdlJywgcHJvcGVydHksIFsnbGl0ZXJhbCcsIHZhbHVlcy5zb3J0KGNvbXBhcmUpXV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gWydmaWx0ZXItaW4tc21hbGwnLCBwcm9wZXJ0eSwgWydsaXRlcmFsJywgdmFsdWVzXV07XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRIYXNPcChwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgc3dpdGNoIChwcm9wZXJ0eSkge1xuICAgIGNhc2UgJyR0eXBlJzpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgY2FzZSAnJGlkJzpcbiAgICAgICAgcmV0dXJuIFtgZmlsdGVyLWhhcy1pZGBdO1xuICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBbYGZpbHRlci1oYXNgLCBwcm9wZXJ0eV07XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjb252ZXJ0TmVnYXRpb24oZmlsdGVyOiBtaXhlZCkge1xuICAgIHJldHVybiBbJyEnLCBmaWx0ZXJdO1xufVxuIiwiXG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3InO1xuaW1wb3J0IHZhbGlkYXRlRXhwcmVzc2lvbiBmcm9tICcuL3ZhbGlkYXRlX2V4cHJlc3Npb24nO1xuaW1wb3J0IHZhbGlkYXRlRW51bSBmcm9tICcuL3ZhbGlkYXRlX2VudW0nO1xuaW1wb3J0IGdldFR5cGUgZnJvbSAnLi4vdXRpbC9nZXRfdHlwZSc7XG5pbXBvcnQge3VuYnVuZGxlLCBkZWVwVW5idW5kbGV9IGZyb20gJy4uL3V0aWwvdW5idW5kbGVfanNvbmxpbnQnO1xuaW1wb3J0IGV4dGVuZCBmcm9tICcuLi91dGlsL2V4dGVuZCc7XG5pbXBvcnQge2lzRXhwcmVzc2lvbkZpbHRlcn0gZnJvbSAnLi4vZmVhdHVyZV9maWx0ZXInO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWxpZGF0ZUZpbHRlcihvcHRpb25zKSB7XG4gICAgaWYgKGlzRXhwcmVzc2lvbkZpbHRlcihkZWVwVW5idW5kbGUob3B0aW9ucy52YWx1ZSkpKSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZUV4cHJlc3Npb24oZXh0ZW5kKHt9LCBvcHRpb25zLCB7XG4gICAgICAgICAgICBleHByZXNzaW9uQ29udGV4dDogJ2ZpbHRlcicsXG4gICAgICAgICAgICB2YWx1ZVNwZWM6IHt2YWx1ZTogJ2Jvb2xlYW4nfVxuICAgICAgICB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlTm9uRXhwcmVzc2lvbkZpbHRlcihvcHRpb25zKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlTm9uRXhwcmVzc2lvbkZpbHRlcihvcHRpb25zKSB7XG4gICAgY29uc3QgdmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuICAgIGNvbnN0IGtleSA9IG9wdGlvbnMua2V5O1xuXG4gICAgaWYgKGdldFR5cGUodmFsdWUpICE9PSAnYXJyYXknKSB7XG4gICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCBgYXJyYXkgZXhwZWN0ZWQsICR7Z2V0VHlwZSh2YWx1ZSl9IGZvdW5kYCldO1xuICAgIH1cblxuICAgIGNvbnN0IHN0eWxlU3BlYyA9IG9wdGlvbnMuc3R5bGVTcGVjO1xuICAgIGxldCB0eXBlO1xuXG4gICAgbGV0IGVycm9ycyA9IFtdO1xuXG4gICAgaWYgKHZhbHVlLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgcmV0dXJuIFtuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsICdmaWx0ZXIgYXJyYXkgbXVzdCBoYXZlIGF0IGxlYXN0IDEgZWxlbWVudCcpXTtcbiAgICB9XG5cbiAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0KHZhbGlkYXRlRW51bSh7XG4gICAgICAgIGtleTogYCR7a2V5fVswXWAsXG4gICAgICAgIHZhbHVlOiB2YWx1ZVswXSxcbiAgICAgICAgdmFsdWVTcGVjOiBzdHlsZVNwZWMuZmlsdGVyX29wZXJhdG9yLFxuICAgICAgICBzdHlsZTogb3B0aW9ucy5zdHlsZSxcbiAgICAgICAgc3R5bGVTcGVjOiBvcHRpb25zLnN0eWxlU3BlY1xuICAgIH0pKTtcblxuICAgIHN3aXRjaCAodW5idW5kbGUodmFsdWVbMF0pKSB7XG4gICAgY2FzZSAnPCc6XG4gICAgY2FzZSAnPD0nOlxuICAgIGNhc2UgJz4nOlxuICAgIGNhc2UgJz49JzpcbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+PSAyICYmIHVuYnVuZGxlKHZhbHVlWzFdKSA9PT0gJyR0eXBlJykge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCBgXCIkdHlwZVwiIGNhbm5vdCBiZSB1c2Ugd2l0aCBvcGVyYXRvciBcIiR7dmFsdWVbMF19XCJgKSk7XG4gICAgICAgIH1cbiAgICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgIGNhc2UgJz09JzpcbiAgICBjYXNlICchPSc6XG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggIT09IDMpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgYGZpbHRlciBhcnJheSBmb3Igb3BlcmF0b3IgXCIke3ZhbHVlWzBdfVwiIG11c3QgaGF2ZSAzIGVsZW1lbnRzYCkpO1xuICAgICAgICB9XG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cbiAgICBjYXNlICdpbic6XG4gICAgY2FzZSAnIWluJzpcbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgICB0eXBlID0gZ2V0VHlwZSh2YWx1ZVsxXSk7XG4gICAgICAgICAgICBpZiAodHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGAke2tleX1bMV1gLCB2YWx1ZVsxXSwgYHN0cmluZyBleHBlY3RlZCwgJHt0eXBlfSBmb3VuZGApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMjsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0eXBlID0gZ2V0VHlwZSh2YWx1ZVtpXSk7XG4gICAgICAgICAgICBpZiAodW5idW5kbGUodmFsdWVbMV0pID09PSAnJHR5cGUnKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdCh2YWxpZGF0ZUVudW0oe1xuICAgICAgICAgICAgICAgICAgICBrZXk6IGAke2tleX1bJHtpfV1gLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVbaV0sXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlU3BlYzogc3R5bGVTcGVjLmdlb21ldHJ5X3R5cGUsXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiBvcHRpb25zLnN0eWxlLFxuICAgICAgICAgICAgICAgICAgICBzdHlsZVNwZWM6IG9wdGlvbnMuc3R5bGVTcGVjXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlICE9PSAnc3RyaW5nJyAmJiB0eXBlICE9PSAnbnVtYmVyJyAmJiB0eXBlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGAke2tleX1bJHtpfV1gLCB2YWx1ZVtpXSwgYHN0cmluZywgbnVtYmVyLCBvciBib29sZWFuIGV4cGVjdGVkLCAke3R5cGV9IGZvdW5kYCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnYW55JzpcbiAgICBjYXNlICdhbGwnOlxuICAgIGNhc2UgJ25vbmUnOlxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0KHZhbGlkYXRlTm9uRXhwcmVzc2lvbkZpbHRlcih7XG4gICAgICAgICAgICAgICAga2V5OiBgJHtrZXl9WyR7aX1dYCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVbaV0sXG4gICAgICAgICAgICAgICAgc3R5bGU6IG9wdGlvbnMuc3R5bGUsXG4gICAgICAgICAgICAgICAgc3R5bGVTcGVjOiBvcHRpb25zLnN0eWxlU3BlY1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaGFzJzpcbiAgICBjYXNlICchaGFzJzpcbiAgICAgICAgdHlwZSA9IGdldFR5cGUodmFsdWVbMV0pO1xuICAgICAgICBpZiAodmFsdWUubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsIGBmaWx0ZXIgYXJyYXkgZm9yIFwiJHt2YWx1ZVswXX1cIiBvcGVyYXRvciBtdXN0IGhhdmUgMiBlbGVtZW50c2ApKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihgJHtrZXl9WzFdYCwgdmFsdWVbMV0sIGBzdHJpbmcgZXhwZWN0ZWQsICR7dHlwZX0gZm91bmRgKSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgY2FzZSAnd2l0aGluJzpcbiAgICAgICAgdHlwZSA9IGdldFR5cGUodmFsdWVbMV0pO1xuICAgICAgICBpZiAodmFsdWUubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgdmFsdWUsIGBmaWx0ZXIgYXJyYXkgZm9yIFwiJHt2YWx1ZVswXX1cIiBvcGVyYXRvciBtdXN0IGhhdmUgMiBlbGVtZW50c2ApKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihgJHtrZXl9WzFdYCwgdmFsdWVbMV0sIGBvYmplY3QgZXhwZWN0ZWQsICR7dHlwZX0gZm91bmRgKSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBlcnJvcnM7XG59XG4iLCJcbmltcG9ydCB2YWxpZGF0ZSBmcm9tICcuL3ZhbGlkYXRlJztcbmltcG9ydCBWYWxpZGF0aW9uRXJyb3IgZnJvbSAnLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvcic7XG5pbXBvcnQgZ2V0VHlwZSBmcm9tICcuLi91dGlsL2dldF90eXBlJztcbmltcG9ydCB7aXNGdW5jdGlvbn0gZnJvbSAnLi4vZnVuY3Rpb24nO1xuaW1wb3J0IHt1bmJ1bmRsZSwgZGVlcFVuYnVuZGxlfSBmcm9tICcuLi91dGlsL3VuYnVuZGxlX2pzb25saW50JztcbmltcG9ydCB7c3VwcG9ydHNQcm9wZXJ0eUV4cHJlc3Npb259IGZyb20gJy4uL3V0aWwvcHJvcGVydGllcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydHkob3B0aW9ucywgcHJvcGVydHlUeXBlKSB7XG4gICAgY29uc3Qga2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgY29uc3Qgc3R5bGUgPSBvcHRpb25zLnN0eWxlO1xuICAgIGNvbnN0IHN0eWxlU3BlYyA9IG9wdGlvbnMuc3R5bGVTcGVjO1xuICAgIGNvbnN0IHZhbHVlID0gb3B0aW9ucy52YWx1ZTtcbiAgICBjb25zdCBwcm9wZXJ0eUtleSA9IG9wdGlvbnMub2JqZWN0S2V5O1xuICAgIGNvbnN0IGxheWVyU3BlYyA9IHN0eWxlU3BlY1tgJHtwcm9wZXJ0eVR5cGV9XyR7b3B0aW9ucy5sYXllclR5cGV9YF07XG5cbiAgICBpZiAoIWxheWVyU3BlYykgcmV0dXJuIFtdO1xuXG4gICAgY29uc3QgdHJhbnNpdGlvbk1hdGNoID0gcHJvcGVydHlLZXkubWF0Y2goL14oLiopLXRyYW5zaXRpb24kLyk7XG4gICAgaWYgKHByb3BlcnR5VHlwZSA9PT0gJ3BhaW50JyAmJiB0cmFuc2l0aW9uTWF0Y2ggJiYgbGF5ZXJTcGVjW3RyYW5zaXRpb25NYXRjaFsxXV0gJiYgbGF5ZXJTcGVjW3RyYW5zaXRpb25NYXRjaFsxXV0udHJhbnNpdGlvbikge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGUoe1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICB2YWx1ZVNwZWM6IHN0eWxlU3BlYy50cmFuc2l0aW9uLFxuICAgICAgICAgICAgc3R5bGUsXG4gICAgICAgICAgICBzdHlsZVNwZWNcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWVTcGVjID0gb3B0aW9ucy52YWx1ZVNwZWMgfHwgbGF5ZXJTcGVjW3Byb3BlcnR5S2V5XTtcbiAgICBpZiAoIXZhbHVlU3BlYykge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgYHVua25vd24gcHJvcGVydHkgXCIke3Byb3BlcnR5S2V5fVwiYCldO1xuICAgIH1cblxuICAgIGxldCB0b2tlbk1hdGNoO1xuICAgIGlmIChnZXRUeXBlKHZhbHVlKSA9PT0gJ3N0cmluZycgJiYgc3VwcG9ydHNQcm9wZXJ0eUV4cHJlc3Npb24odmFsdWVTcGVjKSAmJiAhdmFsdWVTcGVjLnRva2VucyAmJiAodG9rZW5NYXRjaCA9IC9eeyhbXn1dKyl9JC8uZXhlYyh2YWx1ZSkpKSB7XG4gICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICAgIGtleSwgdmFsdWUsXG4gICAgICAgICAgICBgXCIke3Byb3BlcnR5S2V5fVwiIGRvZXMgbm90IHN1cHBvcnQgaW50ZXJwb2xhdGlvbiBzeW50YXhcXG5gICtcbiAgICAgICAgICAgICAgICBgVXNlIGFuIGlkZW50aXR5IHByb3BlcnR5IGZ1bmN0aW9uIGluc3RlYWQ6IFxcYHsgXCJ0eXBlXCI6IFwiaWRlbnRpdHlcIiwgXCJwcm9wZXJ0eVwiOiAke0pTT04uc3RyaW5naWZ5KHRva2VuTWF0Y2hbMV0pfSB9XFxgLmApXTtcbiAgICB9XG5cbiAgICBjb25zdCBlcnJvcnMgPSBbXTtcblxuICAgIGlmIChvcHRpb25zLmxheWVyVHlwZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgICAgaWYgKHByb3BlcnR5S2V5ID09PSAndGV4dC1maWVsZCcgJiYgc3R5bGUgJiYgIXN0eWxlLmdseXBocykge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCAndXNlIG9mIFwidGV4dC1maWVsZFwiIHJlcXVpcmVzIGEgc3R5bGUgXCJnbHlwaHNcIiBwcm9wZXJ0eScpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcGVydHlLZXkgPT09ICd0ZXh0LWZvbnQnICYmIGlzRnVuY3Rpb24oZGVlcFVuYnVuZGxlKHZhbHVlKSkgJiYgdW5idW5kbGUodmFsdWUudHlwZSkgPT09ICdpZGVudGl0eScpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgJ1widGV4dC1mb250XCIgZG9lcyBub3Qgc3VwcG9ydCBpZGVudGl0eSBmdW5jdGlvbnMnKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzLmNvbmNhdCh2YWxpZGF0ZSh7XG4gICAgICAgIGtleTogb3B0aW9ucy5rZXksXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB2YWx1ZVNwZWMsXG4gICAgICAgIHN0eWxlLFxuICAgICAgICBzdHlsZVNwZWMsXG4gICAgICAgIGV4cHJlc3Npb25Db250ZXh0OiAncHJvcGVydHknLFxuICAgICAgICBwcm9wZXJ0eVR5cGUsXG4gICAgICAgIHByb3BlcnR5S2V5XG4gICAgfSkpO1xufVxuIiwiXG5pbXBvcnQgdmFsaWRhdGVQcm9wZXJ0eSBmcm9tICcuL3ZhbGlkYXRlX3Byb3BlcnR5JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVQYWludFByb3BlcnR5KG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdmFsaWRhdGVQcm9wZXJ0eShvcHRpb25zLCAncGFpbnQnKTtcbn1cbiIsIlxuaW1wb3J0IHZhbGlkYXRlUHJvcGVydHkgZnJvbSAnLi92YWxpZGF0ZV9wcm9wZXJ0eSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlTGF5b3V0UHJvcGVydHkob3B0aW9ucykge1xuICAgIHJldHVybiB2YWxpZGF0ZVByb3BlcnR5KG9wdGlvbnMsICdsYXlvdXQnKTtcbn1cbiIsIlxuaW1wb3J0IFZhbGlkYXRpb25FcnJvciBmcm9tICcuLi9lcnJvci92YWxpZGF0aW9uX2Vycm9yJztcbmltcG9ydCB7dW5idW5kbGV9IGZyb20gJy4uL3V0aWwvdW5idW5kbGVfanNvbmxpbnQnO1xuaW1wb3J0IHZhbGlkYXRlT2JqZWN0IGZyb20gJy4vdmFsaWRhdGVfb2JqZWN0JztcbmltcG9ydCB2YWxpZGF0ZUZpbHRlciBmcm9tICcuL3ZhbGlkYXRlX2ZpbHRlcic7XG5pbXBvcnQgdmFsaWRhdGVQYWludFByb3BlcnR5IGZyb20gJy4vdmFsaWRhdGVfcGFpbnRfcHJvcGVydHknO1xuaW1wb3J0IHZhbGlkYXRlTGF5b3V0UHJvcGVydHkgZnJvbSAnLi92YWxpZGF0ZV9sYXlvdXRfcHJvcGVydHknO1xuaW1wb3J0IHZhbGlkYXRlU3BlYyBmcm9tICcuL3ZhbGlkYXRlJztcbmltcG9ydCBleHRlbmQgZnJvbSAnLi4vdXRpbC9leHRlbmQnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWxpZGF0ZUxheWVyKG9wdGlvbnMpIHtcbiAgICBsZXQgZXJyb3JzID0gW107XG5cbiAgICBjb25zdCBsYXllciA9IG9wdGlvbnMudmFsdWU7XG4gICAgY29uc3Qga2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgY29uc3Qgc3R5bGUgPSBvcHRpb25zLnN0eWxlO1xuICAgIGNvbnN0IHN0eWxlU3BlYyA9IG9wdGlvbnMuc3R5bGVTcGVjO1xuXG4gICAgaWYgKCFsYXllci50eXBlICYmICFsYXllci5yZWYpIHtcbiAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIGxheWVyLCAnZWl0aGVyIFwidHlwZVwiIG9yIFwicmVmXCIgaXMgcmVxdWlyZWQnKSk7XG4gICAgfVxuICAgIGxldCB0eXBlID0gdW5idW5kbGUobGF5ZXIudHlwZSk7XG4gICAgY29uc3QgcmVmID0gdW5idW5kbGUobGF5ZXIucmVmKTtcblxuICAgIGlmIChsYXllci5pZCkge1xuICAgICAgICBjb25zdCBsYXllcklkID0gdW5idW5kbGUobGF5ZXIuaWQpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMuYXJyYXlJbmRleDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBvdGhlckxheWVyID0gc3R5bGUubGF5ZXJzW2ldO1xuICAgICAgICAgICAgaWYgKHVuYnVuZGxlKG90aGVyTGF5ZXIuaWQpID09PSBsYXllcklkKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIGxheWVyLmlkLCBgZHVwbGljYXRlIGxheWVyIGlkIFwiJHtsYXllci5pZH1cIiwgcHJldmlvdXNseSB1c2VkIGF0IGxpbmUgJHtvdGhlckxheWVyLmlkLl9fbGluZV9ffWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICgncmVmJyBpbiBsYXllcikge1xuICAgICAgICBbJ3R5cGUnLCAnc291cmNlJywgJ3NvdXJjZS1sYXllcicsICdmaWx0ZXInLCAnbGF5b3V0J10uZm9yRWFjaCgocCkgPT4ge1xuICAgICAgICAgICAgaWYgKHAgaW4gbGF5ZXIpIHtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgbGF5ZXJbcF0sIGBcIiR7cH1cIiBpcyBwcm9oaWJpdGVkIGZvciByZWYgbGF5ZXJzYCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBsZXQgcGFyZW50O1xuXG4gICAgICAgIHN0eWxlLmxheWVycy5mb3JFYWNoKChsYXllcikgPT4ge1xuICAgICAgICAgICAgaWYgKHVuYnVuZGxlKGxheWVyLmlkKSA9PT0gcmVmKSBwYXJlbnQgPSBsYXllcjtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCFwYXJlbnQpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCBsYXllci5yZWYsIGByZWYgbGF5ZXIgXCIke3JlZn1cIiBub3QgZm91bmRgKSk7XG4gICAgICAgIH0gZWxzZSBpZiAocGFyZW50LnJlZikge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIGxheWVyLnJlZiwgJ3JlZiBjYW5ub3QgcmVmZXJlbmNlIGFub3RoZXIgcmVmIGxheWVyJykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHlwZSA9IHVuYnVuZGxlKHBhcmVudC50eXBlKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZSAhPT0gJ2JhY2tncm91bmQnKSB7XG4gICAgICAgIGlmICghbGF5ZXIuc291cmNlKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgbGF5ZXIsICdtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5IFwic291cmNlXCInKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBzdHlsZS5zb3VyY2VzICYmIHN0eWxlLnNvdXJjZXNbbGF5ZXIuc291cmNlXTtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZVR5cGUgPSBzb3VyY2UgJiYgdW5idW5kbGUoc291cmNlLnR5cGUpO1xuICAgICAgICAgICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChuZXcgVmFsaWRhdGlvbkVycm9yKGtleSwgbGF5ZXIuc291cmNlLCBgc291cmNlIFwiJHtsYXllci5zb3VyY2V9XCIgbm90IGZvdW5kYCkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzb3VyY2VUeXBlID09PSAndmVjdG9yJyAmJiB0eXBlID09PSAncmFzdGVyJykge1xuICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCBsYXllci5zb3VyY2UsIGBsYXllciBcIiR7bGF5ZXIuaWR9XCIgcmVxdWlyZXMgYSByYXN0ZXIgc291cmNlYCkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzb3VyY2VUeXBlID09PSAncmFzdGVyJyAmJiB0eXBlICE9PSAncmFzdGVyJykge1xuICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCBsYXllci5zb3VyY2UsIGBsYXllciBcIiR7bGF5ZXIuaWR9XCIgcmVxdWlyZXMgYSB2ZWN0b3Igc291cmNlYCkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzb3VyY2VUeXBlID09PSAndmVjdG9yJyAmJiAhbGF5ZXJbJ3NvdXJjZS1sYXllciddKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIGxheWVyLCBgbGF5ZXIgXCIke2xheWVyLmlkfVwiIG11c3Qgc3BlY2lmeSBhIFwic291cmNlLWxheWVyXCJgKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNvdXJjZVR5cGUgPT09ICdyYXN0ZXItZGVtJyAmJiB0eXBlICE9PSAnaGlsbHNoYWRlJykge1xuICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCBsYXllci5zb3VyY2UsICdyYXN0ZXItZGVtIHNvdXJjZSBjYW4gb25seSBiZSB1c2VkIHdpdGggbGF5ZXIgdHlwZSBcXCdoaWxsc2hhZGVcXCcuJykpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnbGluZScgJiYgbGF5ZXIucGFpbnQgJiYgbGF5ZXIucGFpbnRbJ2xpbmUtZ3JhZGllbnQnXSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAoc291cmNlVHlwZSAhPT0gJ2dlb2pzb24nIHx8ICFzb3VyY2UubGluZU1ldHJpY3MpKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIGxheWVyLCBgbGF5ZXIgXCIke2xheWVyLmlkfVwiIHNwZWNpZmllcyBhIGxpbmUtZ3JhZGllbnQsIHdoaWNoIHJlcXVpcmVzIGEgR2VvSlNPTiBzb3VyY2Ugd2l0aCBcXGBsaW5lTWV0cmljc1xcYCBlbmFibGVkLmApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVycm9ycyA9IGVycm9ycy5jb25jYXQodmFsaWRhdGVPYmplY3Qoe1xuICAgICAgICBrZXksXG4gICAgICAgIHZhbHVlOiBsYXllcixcbiAgICAgICAgdmFsdWVTcGVjOiBzdHlsZVNwZWMubGF5ZXIsXG4gICAgICAgIHN0eWxlOiBvcHRpb25zLnN0eWxlLFxuICAgICAgICBzdHlsZVNwZWM6IG9wdGlvbnMuc3R5bGVTcGVjLFxuICAgICAgICBvYmplY3RFbGVtZW50VmFsaWRhdG9yczoge1xuICAgICAgICAgICAgJyonKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIGVuZm9yY2UgdGhlIHNwZWMncyBgXCJyZXF1aXJlc1wiOiB0cnVlYCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIHJlZnM7XG4gICAgICAgICAgICAvLyB0aGUgYWN0dWFsIHJlcXVpcmVtZW50IGlzIHZhbGlkYXRlZCBhYm92ZS4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy81NzcyLlxuICAgICAgICAgICAgdHlwZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVTcGVjKHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiBgJHtrZXl9LnR5cGVgLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbGF5ZXIudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVTcGVjOiBzdHlsZVNwZWMubGF5ZXIudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU6IG9wdGlvbnMuc3R5bGUsXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlU3BlYzogb3B0aW9ucy5zdHlsZVNwZWMsXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdDogbGF5ZXIsXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdEtleTogJ3R5cGUnXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmlsdGVyOiB2YWxpZGF0ZUZpbHRlcixcbiAgICAgICAgICAgIGxheW91dChvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgbGF5ZXIsXG4gICAgICAgICAgICAgICAgICAgIGtleTogb3B0aW9ucy5rZXksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBvcHRpb25zLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBzdHlsZTogb3B0aW9ucy5zdHlsZSxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGVTcGVjOiBvcHRpb25zLnN0eWxlU3BlYyxcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICcqJyhvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlTGF5b3V0UHJvcGVydHkoZXh0ZW5kKHtsYXllclR5cGU6IHR5cGV9LCBvcHRpb25zKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYWludChvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgbGF5ZXIsXG4gICAgICAgICAgICAgICAgICAgIGtleTogb3B0aW9ucy5rZXksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBvcHRpb25zLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBzdHlsZTogb3B0aW9ucy5zdHlsZSxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGVTcGVjOiBvcHRpb25zLnN0eWxlU3BlYyxcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICcqJyhvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlUGFpbnRQcm9wZXJ0eShleHRlbmQoe2xheWVyVHlwZTogdHlwZX0sIG9wdGlvbnMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIGVycm9ycztcbn1cbiIsIlxuaW1wb3J0IGdldFR5cGUgZnJvbSAnLi4vdXRpbC9nZXRfdHlwZSc7XG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4uL2Vycm9yL3ZhbGlkYXRpb25fZXJyb3InO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWxpZGF0ZVN0cmluZyhvcHRpb25zKSB7XG4gICAgY29uc3QgdmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuICAgIGNvbnN0IGtleSA9IG9wdGlvbnMua2V5O1xuICAgIGNvbnN0IHR5cGUgPSBnZXRUeXBlKHZhbHVlKTtcblxuICAgIGlmICh0eXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgYHN0cmluZyBleHBlY3RlZCwgJHt0eXBlfSBmb3VuZGApXTtcbiAgICB9XG5cbiAgICByZXR1cm4gW107XG59XG4iLCJcbmltcG9ydCBWYWxpZGF0aW9uRXJyb3IgZnJvbSAnLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvcic7XG5pbXBvcnQge3VuYnVuZGxlfSBmcm9tICcuLi91dGlsL3VuYnVuZGxlX2pzb25saW50JztcbmltcG9ydCB2YWxpZGF0ZU9iamVjdCBmcm9tICcuL3ZhbGlkYXRlX29iamVjdCc7XG5pbXBvcnQgdmFsaWRhdGVFbnVtIGZyb20gJy4vdmFsaWRhdGVfZW51bSc7XG5pbXBvcnQgdmFsaWRhdGVFeHByZXNzaW9uIGZyb20gJy4vdmFsaWRhdGVfZXhwcmVzc2lvbic7XG5pbXBvcnQgdmFsaWRhdGVTdHJpbmcgZnJvbSAnLi92YWxpZGF0ZV9zdHJpbmcnO1xuaW1wb3J0IGdldFR5cGUgZnJvbSAnLi4vdXRpbC9nZXRfdHlwZSc7XG5cbmNvbnN0IG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzID0ge1xuICAgIHByb21vdGVJZDogdmFsaWRhdGVQcm9tb3RlSWRcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlU291cmNlKG9wdGlvbnMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnMudmFsdWU7XG4gICAgY29uc3Qga2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgY29uc3Qgc3R5bGVTcGVjID0gb3B0aW9ucy5zdHlsZVNwZWM7XG4gICAgY29uc3Qgc3R5bGUgPSBvcHRpb25zLnN0eWxlO1xuXG4gICAgaWYgKCF2YWx1ZS50eXBlKSB7XG4gICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCAnXCJ0eXBlXCIgaXMgcmVxdWlyZWQnKV07XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZSA9IHVuYnVuZGxlKHZhbHVlLnR5cGUpO1xuICAgIGxldCBlcnJvcnM7XG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICd2ZWN0b3InOlxuICAgIGNhc2UgJ3Jhc3Rlcic6XG4gICAgY2FzZSAncmFzdGVyLWRlbSc6XG4gICAgICAgIGVycm9ycyA9IHZhbGlkYXRlT2JqZWN0KHtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgdmFsdWVTcGVjOiBzdHlsZVNwZWNbYHNvdXJjZV8ke3R5cGUucmVwbGFjZSgnLScsICdfJyl9YF0sXG4gICAgICAgICAgICBzdHlsZTogb3B0aW9ucy5zdHlsZSxcbiAgICAgICAgICAgIHN0eWxlU3BlYyxcbiAgICAgICAgICAgIG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZXJyb3JzO1xuXG4gICAgY2FzZSAnZ2VvanNvbic6XG4gICAgICAgIGVycm9ycyA9IHZhbGlkYXRlT2JqZWN0KHtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgdmFsdWVTcGVjOiBzdHlsZVNwZWMuc291cmNlX2dlb2pzb24sXG4gICAgICAgICAgICBzdHlsZSxcbiAgICAgICAgICAgIHN0eWxlU3BlYyxcbiAgICAgICAgICAgIG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodmFsdWUuY2x1c3Rlcikge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIHZhbHVlLmNsdXN0ZXJQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgW29wZXJhdG9yLCBtYXBFeHByXSA9IHZhbHVlLmNsdXN0ZXJQcm9wZXJ0aWVzW3Byb3BdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlZHVjZUV4cHIgPSB0eXBlb2Ygb3BlcmF0b3IgPT09ICdzdHJpbmcnID8gW29wZXJhdG9yLCBbJ2FjY3VtdWxhdGVkJ10sIFsnZ2V0JywgcHJvcF1dIDogb3BlcmF0b3I7XG5cbiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZUV4cHJlc3Npb24oe1xuICAgICAgICAgICAgICAgICAgICBrZXk6IGAke2tleX0uJHtwcm9wfS5tYXBgLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWFwRXhwcixcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbkNvbnRleHQ6ICdjbHVzdGVyLW1hcCdcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goLi4udmFsaWRhdGVFeHByZXNzaW9uKHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiBgJHtrZXl9LiR7cHJvcH0ucmVkdWNlYCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHJlZHVjZUV4cHIsXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25Db250ZXh0OiAnY2x1c3Rlci1yZWR1Y2UnXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcnJvcnM7XG5cbiAgICBjYXNlICd2aWRlbyc6XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZU9iamVjdCh7XG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIHZhbHVlU3BlYzogc3R5bGVTcGVjLnNvdXJjZV92aWRlbyxcbiAgICAgICAgICAgIHN0eWxlLFxuICAgICAgICAgICAgc3R5bGVTcGVjXG4gICAgICAgIH0pO1xuXG4gICAgY2FzZSAnaW1hZ2UnOlxuICAgICAgICByZXR1cm4gdmFsaWRhdGVPYmplY3Qoe1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICB2YWx1ZVNwZWM6IHN0eWxlU3BlYy5zb3VyY2VfaW1hZ2UsXG4gICAgICAgICAgICBzdHlsZSxcbiAgICAgICAgICAgIHN0eWxlU3BlY1xuICAgICAgICB9KTtcblxuICAgIGNhc2UgJ2NhbnZhcyc6XG4gICAgICAgIHJldHVybiBbbmV3IFZhbGlkYXRpb25FcnJvcihrZXksIG51bGwsIGBQbGVhc2UgdXNlIHJ1bnRpbWUgQVBJcyB0byBhZGQgY2FudmFzIHNvdXJjZXMsIHJhdGhlciB0aGFuIGluY2x1ZGluZyB0aGVtIGluIHN0eWxlc2hlZXRzLmAsICdzb3VyY2UuY2FudmFzJyldO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlRW51bSh7XG4gICAgICAgICAgICBrZXk6IGAke2tleX0udHlwZWAsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUudHlwZSxcbiAgICAgICAgICAgIHZhbHVlU3BlYzoge3ZhbHVlczogWyd2ZWN0b3InLCAncmFzdGVyJywgJ3Jhc3Rlci1kZW0nLCAnZ2VvanNvbicsICd2aWRlbycsICdpbWFnZSddfSxcbiAgICAgICAgICAgIHN0eWxlLFxuICAgICAgICAgICAgc3R5bGVTcGVjXG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9tb3RlSWQoe2tleSwgdmFsdWV9KSB7XG4gICAgaWYgKGdldFR5cGUodmFsdWUpID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGVTdHJpbmcoe2tleSwgdmFsdWV9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBlcnJvcnMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIHZhbHVlKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZVN0cmluZyh7a2V5OiBgJHtrZXl9LiR7cHJvcH1gLCB2YWx1ZTogdmFsdWVbcHJvcF19KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVycm9ycztcbiAgICB9XG59XG4iLCJcbmltcG9ydCBWYWxpZGF0aW9uRXJyb3IgZnJvbSAnLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvcic7XG5pbXBvcnQgZ2V0VHlwZSBmcm9tICcuLi91dGlsL2dldF90eXBlJztcbmltcG9ydCB2YWxpZGF0ZSBmcm9tICcuL3ZhbGlkYXRlJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVMaWdodChvcHRpb25zKSB7XG4gICAgY29uc3QgbGlnaHQgPSBvcHRpb25zLnZhbHVlO1xuICAgIGNvbnN0IHN0eWxlU3BlYyA9IG9wdGlvbnMuc3R5bGVTcGVjO1xuICAgIGNvbnN0IGxpZ2h0U3BlYyA9IHN0eWxlU3BlYy5saWdodDtcbiAgICBjb25zdCBzdHlsZSA9IG9wdGlvbnMuc3R5bGU7XG5cbiAgICBsZXQgZXJyb3JzID0gW107XG5cbiAgICBjb25zdCByb290VHlwZSA9IGdldFR5cGUobGlnaHQpO1xuICAgIGlmIChsaWdodCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgfSBlbHNlIGlmIChyb290VHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdChbbmV3IFZhbGlkYXRpb25FcnJvcignbGlnaHQnLCBsaWdodCwgYG9iamVjdCBleHBlY3RlZCwgJHtyb290VHlwZX0gZm91bmRgKV0pO1xuICAgICAgICByZXR1cm4gZXJyb3JzO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qga2V5IGluIGxpZ2h0KSB7XG4gICAgICAgIGNvbnN0IHRyYW5zaXRpb25NYXRjaCA9IGtleS5tYXRjaCgvXiguKiktdHJhbnNpdGlvbiQvKTtcblxuICAgICAgICBpZiAodHJhbnNpdGlvbk1hdGNoICYmIGxpZ2h0U3BlY1t0cmFuc2l0aW9uTWF0Y2hbMV1dICYmIGxpZ2h0U3BlY1t0cmFuc2l0aW9uTWF0Y2hbMV1dLnRyYW5zaXRpb24pIHtcbiAgICAgICAgICAgIGVycm9ycyA9IGVycm9ycy5jb25jYXQodmFsaWRhdGUoe1xuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbGlnaHRba2V5XSxcbiAgICAgICAgICAgICAgICB2YWx1ZVNwZWM6IHN0eWxlU3BlYy50cmFuc2l0aW9uLFxuICAgICAgICAgICAgICAgIHN0eWxlLFxuICAgICAgICAgICAgICAgIHN0eWxlU3BlY1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGxpZ2h0U3BlY1trZXldKSB7XG4gICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMuY29uY2F0KHZhbGlkYXRlKHtcbiAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgdmFsdWU6IGxpZ2h0W2tleV0sXG4gICAgICAgICAgICAgICAgdmFsdWVTcGVjOiBsaWdodFNwZWNba2V5XSxcbiAgICAgICAgICAgICAgICBzdHlsZSxcbiAgICAgICAgICAgICAgICBzdHlsZVNwZWNcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVycm9ycyA9IGVycm9ycy5jb25jYXQoW25ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCBsaWdodFtrZXldLCBgdW5rbm93biBwcm9wZXJ0eSBcIiR7a2V5fVwiYCldKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlcnJvcnM7XG59XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHZhbGlkYXRlRXhwcmVzc2lvbiBmcm9tICcuL3ZhbGlkYXRlX2V4cHJlc3Npb24nO1xuaW1wb3J0IHZhbGlkYXRlU3RyaW5nIGZyb20gJy4vdmFsaWRhdGVfc3RyaW5nJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVGb3JtYXR0ZWQob3B0aW9uczogYW55KSB7XG4gICAgaWYgKHZhbGlkYXRlU3RyaW5nKG9wdGlvbnMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlRXhwcmVzc2lvbihvcHRpb25zKTtcbn1cbiIsIi8vIEBmbG93XG5pbXBvcnQgdmFsaWRhdGVFeHByZXNzaW9uIGZyb20gJy4vdmFsaWRhdGVfZXhwcmVzc2lvbic7XG5pbXBvcnQgdmFsaWRhdGVTdHJpbmcgZnJvbSAnLi92YWxpZGF0ZV9zdHJpbmcnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWxpZGF0ZUltYWdlKG9wdGlvbnM6IGFueSkge1xuICAgIGlmICh2YWxpZGF0ZVN0cmluZyhvcHRpb25zKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZUV4cHJlc3Npb24ob3B0aW9ucyk7XG59XG4iLCJcbmltcG9ydCBleHRlbmQgZnJvbSAnLi4vdXRpbC9leHRlbmQnO1xuaW1wb3J0IHt1bmJ1bmRsZSwgZGVlcFVuYnVuZGxlfSBmcm9tICcuLi91dGlsL3VuYnVuZGxlX2pzb25saW50JztcbmltcG9ydCB7aXNFeHByZXNzaW9ufSBmcm9tICcuLi9leHByZXNzaW9uJztcbmltcG9ydCB7aXNGdW5jdGlvbn0gZnJvbSAnLi4vZnVuY3Rpb24nO1xuXG5pbXBvcnQgdmFsaWRhdGVGdW5jdGlvbiBmcm9tICcuL3ZhbGlkYXRlX2Z1bmN0aW9uJztcbmltcG9ydCB2YWxpZGF0ZUV4cHJlc3Npb24gZnJvbSAnLi92YWxpZGF0ZV9leHByZXNzaW9uJztcbmltcG9ydCB2YWxpZGF0ZU9iamVjdCBmcm9tICcuL3ZhbGlkYXRlX29iamVjdCc7XG5pbXBvcnQgdmFsaWRhdGVBcnJheSBmcm9tICcuL3ZhbGlkYXRlX2FycmF5JztcbmltcG9ydCB2YWxpZGF0ZUJvb2xlYW4gZnJvbSAnLi92YWxpZGF0ZV9ib29sZWFuJztcbmltcG9ydCB2YWxpZGF0ZU51bWJlciBmcm9tICcuL3ZhbGlkYXRlX251bWJlcic7XG5pbXBvcnQgdmFsaWRhdGVDb2xvciBmcm9tICcuL3ZhbGlkYXRlX2NvbG9yJztcbmltcG9ydCB2YWxpZGF0ZUNvbnN0YW50cyBmcm9tICcuL3ZhbGlkYXRlX2NvbnN0YW50cyc7XG5pbXBvcnQgdmFsaWRhdGVFbnVtIGZyb20gJy4vdmFsaWRhdGVfZW51bSc7XG5pbXBvcnQgdmFsaWRhdGVGaWx0ZXIgZnJvbSAnLi92YWxpZGF0ZV9maWx0ZXInO1xuaW1wb3J0IHZhbGlkYXRlTGF5ZXIgZnJvbSAnLi92YWxpZGF0ZV9sYXllcic7XG5pbXBvcnQgdmFsaWRhdGVTb3VyY2UgZnJvbSAnLi92YWxpZGF0ZV9zb3VyY2UnO1xuaW1wb3J0IHZhbGlkYXRlTGlnaHQgZnJvbSAnLi92YWxpZGF0ZV9saWdodCc7XG5pbXBvcnQgdmFsaWRhdGVTdHJpbmcgZnJvbSAnLi92YWxpZGF0ZV9zdHJpbmcnO1xuaW1wb3J0IHZhbGlkYXRlRm9ybWF0dGVkIGZyb20gJy4vdmFsaWRhdGVfZm9ybWF0dGVkJztcbmltcG9ydCB2YWxpZGF0ZUltYWdlIGZyb20gJy4vdmFsaWRhdGVfaW1hZ2UnO1xuXG5jb25zdCBWQUxJREFUT1JTID0ge1xuICAgICcqJygpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH0sXG4gICAgJ2FycmF5JzogdmFsaWRhdGVBcnJheSxcbiAgICAnYm9vbGVhbic6IHZhbGlkYXRlQm9vbGVhbixcbiAgICAnbnVtYmVyJzogdmFsaWRhdGVOdW1iZXIsXG4gICAgJ2NvbG9yJzogdmFsaWRhdGVDb2xvcixcbiAgICAnY29uc3RhbnRzJzogdmFsaWRhdGVDb25zdGFudHMsXG4gICAgJ2VudW0nOiB2YWxpZGF0ZUVudW0sXG4gICAgJ2ZpbHRlcic6IHZhbGlkYXRlRmlsdGVyLFxuICAgICdmdW5jdGlvbic6IHZhbGlkYXRlRnVuY3Rpb24sXG4gICAgJ2xheWVyJzogdmFsaWRhdGVMYXllcixcbiAgICAnb2JqZWN0JzogdmFsaWRhdGVPYmplY3QsXG4gICAgJ3NvdXJjZSc6IHZhbGlkYXRlU291cmNlLFxuICAgICdsaWdodCc6IHZhbGlkYXRlTGlnaHQsXG4gICAgJ3N0cmluZyc6IHZhbGlkYXRlU3RyaW5nLFxuICAgICdmb3JtYXR0ZWQnOiB2YWxpZGF0ZUZvcm1hdHRlZCxcbiAgICAncmVzb2x2ZWRJbWFnZSc6IHZhbGlkYXRlSW1hZ2Vcbn07XG5cbi8vIE1haW4gcmVjdXJzaXZlIHZhbGlkYXRpb24gZnVuY3Rpb24uIFRyYWNrczpcbi8vXG4vLyAtIGtleTogc3RyaW5nIHJlcHJlc2VudGluZyBsb2NhdGlvbiBvZiB2YWxpZGF0aW9uIGluIHN0eWxlIHRyZWUuIFVzZWQgb25seVxuLy8gICBmb3IgbW9yZSBpbmZvcm1hdGl2ZSBlcnJvciByZXBvcnRpbmcuXG4vLyAtIHZhbHVlOiBjdXJyZW50IHZhbHVlIGZyb20gc3R5bGUgYmVpbmcgZXZhbHVhdGVkLiBNYXkgYmUgYW55dGhpbmcgZnJvbSBhXG4vLyAgIGhpZ2ggbGV2ZWwgb2JqZWN0IHRoYXQgbmVlZHMgdG8gYmUgZGVzY2VuZGVkIGludG8gZGVlcGVyIG9yIGEgc2ltcGxlXG4vLyAgIHNjYWxhciB2YWx1ZS5cbi8vIC0gdmFsdWVTcGVjOiBjdXJyZW50IHNwZWMgYmVpbmcgZXZhbHVhdGVkLiBUcmFja3MgdmFsdWUuXG4vLyAtIHN0eWxlU3BlYzogY3VycmVudCBmdWxsIHNwZWMgYmVpbmcgZXZhbHVhdGVkLlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWxpZGF0ZShvcHRpb25zKSB7XG4gICAgY29uc3QgdmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuICAgIGNvbnN0IHZhbHVlU3BlYyA9IG9wdGlvbnMudmFsdWVTcGVjO1xuICAgIGNvbnN0IHN0eWxlU3BlYyA9IG9wdGlvbnMuc3R5bGVTcGVjO1xuXG4gICAgaWYgKHZhbHVlU3BlYy5leHByZXNzaW9uICYmIGlzRnVuY3Rpb24odW5idW5kbGUodmFsdWUpKSkge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGVGdW5jdGlvbihvcHRpb25zKTtcblxuICAgIH0gZWxzZSBpZiAodmFsdWVTcGVjLmV4cHJlc3Npb24gJiYgaXNFeHByZXNzaW9uKGRlZXBVbmJ1bmRsZSh2YWx1ZSkpKSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZUV4cHJlc3Npb24ob3B0aW9ucyk7XG5cbiAgICB9IGVsc2UgaWYgKHZhbHVlU3BlYy50eXBlICYmIFZBTElEQVRPUlNbdmFsdWVTcGVjLnR5cGVdKSB7XG4gICAgICAgIHJldHVybiBWQUxJREFUT1JTW3ZhbHVlU3BlYy50eXBlXShvcHRpb25zKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGVPYmplY3QoZXh0ZW5kKHt9LCBvcHRpb25zLCB7XG4gICAgICAgICAgICB2YWx1ZVNwZWM6IHZhbHVlU3BlYy50eXBlID8gc3R5bGVTcGVjW3ZhbHVlU3BlYy50eXBlXSA6IHZhbHVlU3BlY1xuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybiB2YWxpZDtcbiAgICB9XG59XG4iLCJcbmltcG9ydCBWYWxpZGF0aW9uRXJyb3IgZnJvbSAnLi4vZXJyb3IvdmFsaWRhdGlvbl9lcnJvcic7XG5pbXBvcnQgdmFsaWRhdGVTdHJpbmcgZnJvbSAnLi92YWxpZGF0ZV9zdHJpbmcnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgY29uc3QgdmFsdWUgPSBvcHRpb25zLnZhbHVlO1xuICAgIGNvbnN0IGtleSA9IG9wdGlvbnMua2V5O1xuXG4gICAgY29uc3QgZXJyb3JzID0gdmFsaWRhdGVTdHJpbmcob3B0aW9ucyk7XG4gICAgaWYgKGVycm9ycy5sZW5ndGgpIHJldHVybiBlcnJvcnM7XG5cbiAgICBpZiAodmFsdWUuaW5kZXhPZigne2ZvbnRzdGFja30nKSA9PT0gLTEpIHtcbiAgICAgICAgZXJyb3JzLnB1c2gobmV3IFZhbGlkYXRpb25FcnJvcihrZXksIHZhbHVlLCAnXCJnbHlwaHNcIiB1cmwgbXVzdCBpbmNsdWRlIGEgXCJ7Zm9udHN0YWNrfVwiIHRva2VuJykpO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZS5pbmRleE9mKCd7cmFuZ2V9JykgPT09IC0xKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKG5ldyBWYWxpZGF0aW9uRXJyb3Ioa2V5LCB2YWx1ZSwgJ1wiZ2x5cGhzXCIgdXJsIG11c3QgaW5jbHVkZSBhIFwie3JhbmdlfVwiIHRva2VuJykpO1xuICAgIH1cblxuICAgIHJldHVybiBlcnJvcnM7XG59XG4iLCJcbmltcG9ydCB2YWxpZGF0ZUNvbnN0YW50cyBmcm9tICcuL3ZhbGlkYXRlL3ZhbGlkYXRlX2NvbnN0YW50cyc7XG5pbXBvcnQgdmFsaWRhdGUgZnJvbSAnLi92YWxpZGF0ZS92YWxpZGF0ZSc7XG5pbXBvcnQgbGF0ZXN0U3R5bGVTcGVjIGZyb20gJy4vcmVmZXJlbmNlL2xhdGVzdCc7XG5pbXBvcnQgdmFsaWRhdGVHbHlwaHNVUkwgZnJvbSAnLi92YWxpZGF0ZS92YWxpZGF0ZV9nbHlwaHNfdXJsJztcblxuaW1wb3J0IHZhbGlkYXRlU291cmNlIGZyb20gJy4vdmFsaWRhdGUvdmFsaWRhdGVfc291cmNlJztcbmltcG9ydCB2YWxpZGF0ZUxpZ2h0IGZyb20gJy4vdmFsaWRhdGUvdmFsaWRhdGVfbGlnaHQnO1xuaW1wb3J0IHZhbGlkYXRlTGF5ZXIgZnJvbSAnLi92YWxpZGF0ZS92YWxpZGF0ZV9sYXllcic7XG5pbXBvcnQgdmFsaWRhdGVGaWx0ZXIgZnJvbSAnLi92YWxpZGF0ZS92YWxpZGF0ZV9maWx0ZXInO1xuaW1wb3J0IHZhbGlkYXRlUGFpbnRQcm9wZXJ0eSBmcm9tICcuL3ZhbGlkYXRlL3ZhbGlkYXRlX3BhaW50X3Byb3BlcnR5JztcbmltcG9ydCB2YWxpZGF0ZUxheW91dFByb3BlcnR5IGZyb20gJy4vdmFsaWRhdGUvdmFsaWRhdGVfbGF5b3V0X3Byb3BlcnR5JztcblxuLyoqXG4gKiBWYWxpZGF0ZSBhIE1hcGJveCBHTCBzdHlsZSBhZ2FpbnN0IHRoZSBzdHlsZSBzcGVjaWZpY2F0aW9uLiBUaGlzIGVudHJ5cG9pbnQsXG4gKiBgbWFwYm94LWdsLXN0eWxlLXNwZWMvbGliL3ZhbGlkYXRlX3N0eWxlLm1pbmAsIGlzIGRlc2lnbmVkIHRvIHByb2R1Y2UgYXNcbiAqIHNtYWxsIGEgYnJvd3NlcmlmeSBidW5kbGUgYXMgcG9zc2libGUgYnkgb21pdHRpbmcgdW5uZWNlc3NhcnkgZnVuY3Rpb25hbGl0eVxuICogYW5kIGxlZ2FjeSBzdHlsZSBzcGVjaWZpY2F0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHN0eWxlIFRoZSBzdHlsZSB0byBiZSB2YWxpZGF0ZWQuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0eWxlU3BlY10gVGhlIHN0eWxlIHNwZWNpZmljYXRpb24gdG8gdmFsaWRhdGUgYWdhaW5zdC5cbiAqICAgICBJZiBvbWl0dGVkLCB0aGUgbGF0ZXN0IHN0eWxlIHNwZWMgaXMgdXNlZC5cbiAqIEByZXR1cm5zIHtBcnJheTxWYWxpZGF0aW9uRXJyb3I+fVxuICogQGV4YW1wbGVcbiAqICAgdmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnbWFwYm94LWdsLXN0eWxlLXNwZWMvbGliL3ZhbGlkYXRlX3N0eWxlLm1pbicpO1xuICogICB2YXIgZXJyb3JzID0gdmFsaWRhdGUoc3R5bGUpO1xuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVN0eWxlTWluKHN0eWxlLCBzdHlsZVNwZWMgPSBsYXRlc3RTdHlsZVNwZWMpIHtcblxuICAgIGxldCBlcnJvcnMgPSBbXTtcblxuICAgIGVycm9ycyA9IGVycm9ycy5jb25jYXQodmFsaWRhdGUoe1xuICAgICAgICBrZXk6ICcnLFxuICAgICAgICB2YWx1ZTogc3R5bGUsXG4gICAgICAgIHZhbHVlU3BlYzogc3R5bGVTcGVjLiRyb290LFxuICAgICAgICBzdHlsZVNwZWMsXG4gICAgICAgIHN0eWxlLFxuICAgICAgICBvYmplY3RFbGVtZW50VmFsaWRhdG9yczoge1xuICAgICAgICAgICAgZ2x5cGhzOiB2YWxpZGF0ZUdseXBoc1VSTCxcbiAgICAgICAgICAgICcqJygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KSk7XG5cbiAgICBpZiAoc3R5bGUuY29uc3RhbnRzKSB7XG4gICAgICAgIGVycm9ycyA9IGVycm9ycy5jb25jYXQodmFsaWRhdGVDb25zdGFudHMoe1xuICAgICAgICAgICAga2V5OiAnY29uc3RhbnRzJyxcbiAgICAgICAgICAgIHZhbHVlOiBzdHlsZS5jb25zdGFudHMsXG4gICAgICAgICAgICBzdHlsZSxcbiAgICAgICAgICAgIHN0eWxlU3BlY1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvcnRFcnJvcnMoZXJyb3JzKTtcbn1cblxudmFsaWRhdGVTdHlsZU1pbi5zb3VyY2UgPSB3cmFwQ2xlYW5FcnJvcnModmFsaWRhdGVTb3VyY2UpO1xudmFsaWRhdGVTdHlsZU1pbi5saWdodCA9IHdyYXBDbGVhbkVycm9ycyh2YWxpZGF0ZUxpZ2h0KTtcbnZhbGlkYXRlU3R5bGVNaW4ubGF5ZXIgPSB3cmFwQ2xlYW5FcnJvcnModmFsaWRhdGVMYXllcik7XG52YWxpZGF0ZVN0eWxlTWluLmZpbHRlciA9IHdyYXBDbGVhbkVycm9ycyh2YWxpZGF0ZUZpbHRlcik7XG52YWxpZGF0ZVN0eWxlTWluLnBhaW50UHJvcGVydHkgPSB3cmFwQ2xlYW5FcnJvcnModmFsaWRhdGVQYWludFByb3BlcnR5KTtcbnZhbGlkYXRlU3R5bGVNaW4ubGF5b3V0UHJvcGVydHkgPSB3cmFwQ2xlYW5FcnJvcnModmFsaWRhdGVMYXlvdXRQcm9wZXJ0eSk7XG5cbmZ1bmN0aW9uIHNvcnRFcnJvcnMoZXJyb3JzKSB7XG4gICAgcmV0dXJuIFtdLmNvbmNhdChlcnJvcnMpLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgcmV0dXJuIGEubGluZSAtIGIubGluZTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gd3JhcENsZWFuRXJyb3JzKGlubmVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHNvcnRFcnJvcnMoaW5uZXIuYXBwbHkodGhpcywgYXJncykpO1xuICAgIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHZhbGlkYXRlU3R5bGVNaW47XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHZhbGlkYXRlU3R5bGVNaW4gZnJvbSAnLi4vc3R5bGUtc3BlYy92YWxpZGF0ZV9zdHlsZS5taW4nO1xuaW1wb3J0IHtFcnJvckV2ZW50fSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuXG5pbXBvcnQgdHlwZSB7RXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcblxudHlwZSBWYWxpZGF0aW9uRXJyb3IgPSB7XG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIGxpbmU6IG51bWJlcixcbiAgICBpZGVudGlmaWVyPzogc3RyaW5nXG59O1xuXG5leHBvcnQgdHlwZSBWYWxpZGF0b3IgPSAoT2JqZWN0KSA9PiAkUmVhZE9ubHlBcnJheTxWYWxpZGF0aW9uRXJyb3I+O1xuXG50eXBlIFZhbGlkYXRlU3R5bGUgPSB7XG4gICAgKE9iamVjdCwgP09iamVjdCk6ICRSZWFkT25seUFycmF5PFZhbGlkYXRpb25FcnJvcj4sXG4gICAgc291cmNlOiBWYWxpZGF0b3IsXG4gICAgbGF5ZXI6IFZhbGlkYXRvcixcbiAgICBsaWdodDogVmFsaWRhdG9yLFxuICAgIGZpbHRlcjogVmFsaWRhdG9yLFxuICAgIHBhaW50UHJvcGVydHk6IFZhbGlkYXRvcixcbiAgICBsYXlvdXRQcm9wZXJ0eTogVmFsaWRhdG9yXG59O1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVTdHlsZSA9ICh2YWxpZGF0ZVN0eWxlTWluOiBWYWxpZGF0ZVN0eWxlKTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlU291cmNlID0gdmFsaWRhdGVTdHlsZS5zb3VyY2U7XG5leHBvcnQgY29uc3QgdmFsaWRhdGVMaWdodCA9IHZhbGlkYXRlU3R5bGUubGlnaHQ7XG5leHBvcnQgY29uc3QgdmFsaWRhdGVGaWx0ZXIgPSB2YWxpZGF0ZVN0eWxlLmZpbHRlcjtcbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVBhaW50UHJvcGVydHkgPSB2YWxpZGF0ZVN0eWxlLnBhaW50UHJvcGVydHk7XG5leHBvcnQgY29uc3QgdmFsaWRhdGVMYXlvdXRQcm9wZXJ0eSA9IHZhbGlkYXRlU3R5bGUubGF5b3V0UHJvcGVydHk7XG5cbmV4cG9ydCBmdW5jdGlvbiBlbWl0VmFsaWRhdGlvbkVycm9ycyhlbWl0dGVyOiBFdmVudGVkLCBlcnJvcnM6ID8kUmVhZE9ubHlBcnJheTx7bWVzc2FnZTogc3RyaW5nLCBpZGVudGlmaWVyPzogc3RyaW5nfT4pOiBib29sZWFuIHtcbiAgICBsZXQgaGFzRXJyb3JzID0gZmFsc2U7XG4gICAgaWYgKGVycm9ycyAmJiBlcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXJyb3Igb2YgZXJyb3JzKSB7XG4gICAgICAgICAgICBlbWl0dGVyLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGVycm9yLm1lc3NhZ2UpKSk7XG4gICAgICAgICAgICBoYXNFcnJvcnMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBoYXNFcnJvcnM7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gR3JpZEluZGV4O1xuXG52YXIgTlVNX1BBUkFNUyA9IDM7XG5cbmZ1bmN0aW9uIEdyaWRJbmRleChleHRlbnQsIG4sIHBhZGRpbmcpIHtcbiAgICB2YXIgY2VsbHMgPSB0aGlzLmNlbGxzID0gW107XG5cbiAgICBpZiAoZXh0ZW50IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICAgICAgdGhpcy5hcnJheUJ1ZmZlciA9IGV4dGVudDtcbiAgICAgICAgdmFyIGFycmF5ID0gbmV3IEludDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIGV4dGVudCA9IGFycmF5WzBdO1xuICAgICAgICBuID0gYXJyYXlbMV07XG4gICAgICAgIHBhZGRpbmcgPSBhcnJheVsyXTtcblxuICAgICAgICB0aGlzLmQgPSBuICsgMiAqIHBhZGRpbmc7XG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgdGhpcy5kICogdGhpcy5kOyBrKyspIHtcbiAgICAgICAgICAgIHZhciBzdGFydCA9IGFycmF5W05VTV9QQVJBTVMgKyBrXTtcbiAgICAgICAgICAgIHZhciBlbmQgPSBhcnJheVtOVU1fUEFSQU1TICsgayArIDFdO1xuICAgICAgICAgICAgY2VsbHMucHVzaChzdGFydCA9PT0gZW5kID9cbiAgICAgICAgICAgICAgICAgICAgbnVsbCA6XG4gICAgICAgICAgICAgICAgICAgIGFycmF5LnN1YmFycmF5KHN0YXJ0LCBlbmQpKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIga2V5c09mZnNldCA9IGFycmF5W05VTV9QQVJBTVMgKyBjZWxscy5sZW5ndGhdO1xuICAgICAgICB2YXIgYmJveGVzT2Zmc2V0ID0gYXJyYXlbTlVNX1BBUkFNUyArIGNlbGxzLmxlbmd0aCArIDFdO1xuICAgICAgICB0aGlzLmtleXMgPSBhcnJheS5zdWJhcnJheShrZXlzT2Zmc2V0LCBiYm94ZXNPZmZzZXQpO1xuICAgICAgICB0aGlzLmJib3hlcyA9IGFycmF5LnN1YmFycmF5KGJib3hlc09mZnNldCk7XG5cbiAgICAgICAgdGhpcy5pbnNlcnQgPSB0aGlzLl9pbnNlcnRSZWFkb25seTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZCA9IG4gKyAyICogcGFkZGluZztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmQgKiB0aGlzLmQ7IGkrKykge1xuICAgICAgICAgICAgY2VsbHMucHVzaChbXSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5rZXlzID0gW107XG4gICAgICAgIHRoaXMuYmJveGVzID0gW107XG4gICAgfVxuXG4gICAgdGhpcy5uID0gbjtcbiAgICB0aGlzLmV4dGVudCA9IGV4dGVudDtcbiAgICB0aGlzLnBhZGRpbmcgPSBwYWRkaW5nO1xuICAgIHRoaXMuc2NhbGUgPSBuIC8gZXh0ZW50O1xuICAgIHRoaXMudWlkID0gMDtcblxuICAgIHZhciBwID0gKHBhZGRpbmcgLyBuKSAqIGV4dGVudDtcbiAgICB0aGlzLm1pbiA9IC1wO1xuICAgIHRoaXMubWF4ID0gZXh0ZW50ICsgcDtcbn1cblxuXG5HcmlkSW5kZXgucHJvdG90eXBlLmluc2VydCA9IGZ1bmN0aW9uKGtleSwgeDEsIHkxLCB4MiwgeTIpIHtcbiAgICB0aGlzLl9mb3JFYWNoQ2VsbCh4MSwgeTEsIHgyLCB5MiwgdGhpcy5faW5zZXJ0Q2VsbCwgdGhpcy51aWQrKyk7XG4gICAgdGhpcy5rZXlzLnB1c2goa2V5KTtcbiAgICB0aGlzLmJib3hlcy5wdXNoKHgxKTtcbiAgICB0aGlzLmJib3hlcy5wdXNoKHkxKTtcbiAgICB0aGlzLmJib3hlcy5wdXNoKHgyKTtcbiAgICB0aGlzLmJib3hlcy5wdXNoKHkyKTtcbn07XG5cbkdyaWRJbmRleC5wcm90b3R5cGUuX2luc2VydFJlYWRvbmx5ID0gZnVuY3Rpb24oKSB7XG4gICAgdGhyb3cgJ0Nhbm5vdCBpbnNlcnQgaW50byBhIEdyaWRJbmRleCBjcmVhdGVkIGZyb20gYW4gQXJyYXlCdWZmZXIuJztcbn07XG5cbkdyaWRJbmRleC5wcm90b3R5cGUuX2luc2VydENlbGwgPSBmdW5jdGlvbih4MSwgeTEsIHgyLCB5MiwgY2VsbEluZGV4LCB1aWQpIHtcbiAgICB0aGlzLmNlbGxzW2NlbGxJbmRleF0ucHVzaCh1aWQpO1xufTtcblxuR3JpZEluZGV4LnByb3RvdHlwZS5xdWVyeSA9IGZ1bmN0aW9uKHgxLCB5MSwgeDIsIHkyLCBpbnRlcnNlY3Rpb25UZXN0KSB7XG4gICAgdmFyIG1pbiA9IHRoaXMubWluO1xuICAgIHZhciBtYXggPSB0aGlzLm1heDtcbiAgICBpZiAoeDEgPD0gbWluICYmIHkxIDw9IG1pbiAmJiBtYXggPD0geDIgJiYgbWF4IDw9IHkyICYmICFpbnRlcnNlY3Rpb25UZXN0KSB7XG4gICAgICAgIC8vIFdlIHVzZSBgQXJyYXkjc2xpY2VgIGJlY2F1c2UgYHRoaXMua2V5c2AgbWF5IGJlIGEgYEludDMyQXJyYXlgIGFuZFxuICAgICAgICAvLyBzb21lIGJyb3dzZXJzIChTYWZhcmkgYW5kIElFKSBkbyBub3Qgc3VwcG9ydCBgVHlwZWRBcnJheSNzbGljZWBcbiAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvVHlwZWRBcnJheS9zbGljZSNCcm93c2VyX2NvbXBhdGliaWxpdHlcbiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMua2V5cyk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgIHZhciBzZWVuVWlkcyA9IHt9O1xuICAgICAgICB0aGlzLl9mb3JFYWNoQ2VsbCh4MSwgeTEsIHgyLCB5MiwgdGhpcy5fcXVlcnlDZWxsLCByZXN1bHQsIHNlZW5VaWRzLCBpbnRlcnNlY3Rpb25UZXN0KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59O1xuXG5HcmlkSW5kZXgucHJvdG90eXBlLl9xdWVyeUNlbGwgPSBmdW5jdGlvbih4MSwgeTEsIHgyLCB5MiwgY2VsbEluZGV4LCByZXN1bHQsIHNlZW5VaWRzLCBpbnRlcnNlY3Rpb25UZXN0KSB7XG4gICAgdmFyIGNlbGwgPSB0aGlzLmNlbGxzW2NlbGxJbmRleF07XG4gICAgaWYgKGNlbGwgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIGtleXMgPSB0aGlzLmtleXM7XG4gICAgICAgIHZhciBiYm94ZXMgPSB0aGlzLmJib3hlcztcbiAgICAgICAgZm9yICh2YXIgdSA9IDA7IHUgPCBjZWxsLmxlbmd0aDsgdSsrKSB7XG4gICAgICAgICAgICB2YXIgdWlkID0gY2VsbFt1XTtcbiAgICAgICAgICAgIGlmIChzZWVuVWlkc1t1aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdWlkICogNDtcbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJzZWN0aW9uVGVzdCA/XG4gICAgICAgICAgICAgICAgICAgIGludGVyc2VjdGlvblRlc3QoYmJveGVzW29mZnNldCArIDBdLCBiYm94ZXNbb2Zmc2V0ICsgMV0sIGJib3hlc1tvZmZzZXQgKyAyXSwgYmJveGVzW29mZnNldCArIDNdKSA6XG4gICAgICAgICAgICAgICAgICAgICgoeDEgPD0gYmJveGVzW29mZnNldCArIDJdKSAmJlxuICAgICAgICAgICAgICAgICAgICAoeTEgPD0gYmJveGVzW29mZnNldCArIDNdKSAmJlxuICAgICAgICAgICAgICAgICAgICAoeDIgPj0gYmJveGVzW29mZnNldCArIDBdKSAmJlxuICAgICAgICAgICAgICAgICAgICAoeTIgPj0gYmJveGVzW29mZnNldCArIDFdKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VlblVpZHNbdWlkXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGtleXNbdWlkXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2VlblVpZHNbdWlkXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbkdyaWRJbmRleC5wcm90b3R5cGUuX2ZvckVhY2hDZWxsID0gZnVuY3Rpb24oeDEsIHkxLCB4MiwgeTIsIGZuLCBhcmcxLCBhcmcyLCBpbnRlcnNlY3Rpb25UZXN0KSB7XG4gICAgdmFyIGN4MSA9IHRoaXMuX2NvbnZlcnRUb0NlbGxDb29yZCh4MSk7XG4gICAgdmFyIGN5MSA9IHRoaXMuX2NvbnZlcnRUb0NlbGxDb29yZCh5MSk7XG4gICAgdmFyIGN4MiA9IHRoaXMuX2NvbnZlcnRUb0NlbGxDb29yZCh4Mik7XG4gICAgdmFyIGN5MiA9IHRoaXMuX2NvbnZlcnRUb0NlbGxDb29yZCh5Mik7XG4gICAgZm9yICh2YXIgeCA9IGN4MTsgeCA8PSBjeDI7IHgrKykge1xuICAgICAgICBmb3IgKHZhciB5ID0gY3kxOyB5IDw9IGN5MjsgeSsrKSB7XG4gICAgICAgICAgICB2YXIgY2VsbEluZGV4ID0gdGhpcy5kICogeSArIHg7XG4gICAgICAgICAgICBpZiAoaW50ZXJzZWN0aW9uVGVzdCAmJiAhaW50ZXJzZWN0aW9uVGVzdChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnZlcnRGcm9tQ2VsbENvb3JkKHgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udmVydEZyb21DZWxsQ29vcmQoeSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb252ZXJ0RnJvbUNlbGxDb29yZCh4ICsgMSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb252ZXJ0RnJvbUNlbGxDb29yZCh5ICsgMSkpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmIChmbi5jYWxsKHRoaXMsIHgxLCB5MSwgeDIsIHkyLCBjZWxsSW5kZXgsIGFyZzEsIGFyZzIsIGludGVyc2VjdGlvblRlc3QpKSByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5HcmlkSW5kZXgucHJvdG90eXBlLl9jb252ZXJ0RnJvbUNlbGxDb29yZCA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gKHggLSB0aGlzLnBhZGRpbmcpIC8gdGhpcy5zY2FsZTtcbn07XG5cbkdyaWRJbmRleC5wcm90b3R5cGUuX2NvbnZlcnRUb0NlbGxDb29yZCA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4odGhpcy5kIC0gMSwgTWF0aC5mbG9vcih4ICogdGhpcy5zY2FsZSkgKyB0aGlzLnBhZGRpbmcpKTtcbn07XG5cbkdyaWRJbmRleC5wcm90b3R5cGUudG9BcnJheUJ1ZmZlciA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmFycmF5QnVmZmVyKSByZXR1cm4gdGhpcy5hcnJheUJ1ZmZlcjtcblxuICAgIHZhciBjZWxscyA9IHRoaXMuY2VsbHM7XG5cbiAgICB2YXIgbWV0YWRhdGFMZW5ndGggPSBOVU1fUEFSQU1TICsgdGhpcy5jZWxscy5sZW5ndGggKyAxICsgMTtcbiAgICB2YXIgdG90YWxDZWxsTGVuZ3RoID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdG90YWxDZWxsTGVuZ3RoICs9IHRoaXMuY2VsbHNbaV0ubGVuZ3RoO1xuICAgIH1cblxuICAgIHZhciBhcnJheSA9IG5ldyBJbnQzMkFycmF5KG1ldGFkYXRhTGVuZ3RoICsgdG90YWxDZWxsTGVuZ3RoICsgdGhpcy5rZXlzLmxlbmd0aCArIHRoaXMuYmJveGVzLmxlbmd0aCk7XG4gICAgYXJyYXlbMF0gPSB0aGlzLmV4dGVudDtcbiAgICBhcnJheVsxXSA9IHRoaXMubjtcbiAgICBhcnJheVsyXSA9IHRoaXMucGFkZGluZztcblxuICAgIHZhciBvZmZzZXQgPSBtZXRhZGF0YUxlbmd0aDtcbiAgICBmb3IgKHZhciBrID0gMDsgayA8IGNlbGxzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIHZhciBjZWxsID0gY2VsbHNba107XG4gICAgICAgIGFycmF5W05VTV9QQVJBTVMgKyBrXSA9IG9mZnNldDtcbiAgICAgICAgYXJyYXkuc2V0KGNlbGwsIG9mZnNldCk7XG4gICAgICAgIG9mZnNldCArPSBjZWxsLmxlbmd0aDtcbiAgICB9XG5cbiAgICBhcnJheVtOVU1fUEFSQU1TICsgY2VsbHMubGVuZ3RoXSA9IG9mZnNldDtcbiAgICBhcnJheS5zZXQodGhpcy5rZXlzLCBvZmZzZXQpO1xuICAgIG9mZnNldCArPSB0aGlzLmtleXMubGVuZ3RoO1xuXG4gICAgYXJyYXlbTlVNX1BBUkFNUyArIGNlbGxzLmxlbmd0aCArIDFdID0gb2Zmc2V0O1xuICAgIGFycmF5LnNldCh0aGlzLmJib3hlcywgb2Zmc2V0KTtcbiAgICBvZmZzZXQgKz0gdGhpcy5iYm94ZXMubGVuZ3RoO1xuXG4gICAgcmV0dXJuIGFycmF5LmJ1ZmZlcjtcbn07XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCBHcmlkIGZyb20gJ2dyaWQtaW5kZXgnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5pbXBvcnQge1N0eWxlUHJvcGVydHlGdW5jdGlvbiwgU3R5bGVFeHByZXNzaW9uLCBab29tRGVwZW5kZW50RXhwcmVzc2lvbiwgWm9vbUNvbnN0YW50RXhwcmVzc2lvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uJztcbmltcG9ydCBDb21wb3VuZEV4cHJlc3Npb24gZnJvbSAnLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL2NvbXBvdW5kX2V4cHJlc3Npb24nO1xuaW1wb3J0IGV4cHJlc3Npb25zIGZyb20gJy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucyc7XG5pbXBvcnQgUmVzb2x2ZWRJbWFnZSBmcm9tICcuLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvcmVzb2x2ZWRfaW1hZ2UnO1xuaW1wb3J0IHdpbmRvdyBmcm9tICcuL3dpbmRvdyc7XG5jb25zdCB7SW1hZ2VEYXRhLCBJbWFnZUJpdG1hcH0gPSB3aW5kb3c7XG5cbmltcG9ydCB0eXBlIHtUcmFuc2ZlcmFibGV9IGZyb20gJy4uL3R5cGVzL3RyYW5zZmVyYWJsZSc7XG5cbnR5cGUgU2VyaWFsaXplZE9iamVjdCA9IHtbXzogc3RyaW5nXTogU2VyaWFsaXplZCB9OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5leHBvcnQgdHlwZSBTZXJpYWxpemVkID1cbiAgICB8IG51bGxcbiAgICB8IHZvaWRcbiAgICB8IGJvb2xlYW5cbiAgICB8IG51bWJlclxuICAgIHwgc3RyaW5nXG4gICAgfCBCb29sZWFuXG4gICAgfCBOdW1iZXJcbiAgICB8IFN0cmluZ1xuICAgIHwgRGF0ZVxuICAgIHwgUmVnRXhwXG4gICAgfCBBcnJheUJ1ZmZlclxuICAgIHwgJEFycmF5QnVmZmVyVmlld1xuICAgIHwgSW1hZ2VEYXRhXG4gICAgfCBBcnJheTxTZXJpYWxpemVkPlxuICAgIHwgU2VyaWFsaXplZE9iamVjdDtcblxudHlwZSBSZWdpc3RyeSA9IHtcbiAgICBbXzogc3RyaW5nXToge1xuICAgICAgICBrbGFzczogQ2xhc3M8YW55PixcbiAgICAgICAgb21pdDogJFJlYWRPbmx5QXJyYXk8c3RyaW5nPixcbiAgICAgICAgc2hhbGxvdzogJFJlYWRPbmx5QXJyYXk8c3RyaW5nPlxuICAgIH1cbn07XG5cbnR5cGUgUmVnaXN0ZXJPcHRpb25zPFQ+ID0ge1xuICAgIG9taXQ/OiAkUmVhZE9ubHlBcnJheTwkS2V5czxUPj4sXG4gICAgc2hhbGxvdz86ICRSZWFkT25seUFycmF5PCRLZXlzPFQ+PlxufVxuXG5jb25zdCByZWdpc3RyeTogUmVnaXN0cnkgPSB7fTtcblxuLyoqXG4gKiBSZWdpc3RlciB0aGUgZ2l2ZW4gY2xhc3MgYXMgc2VyaWFsaXphYmxlLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zXG4gKiBAcGFyYW0gb3B0aW9ucy5vbWl0IExpc3Qgb2YgcHJvcGVydGllcyB0byBvbWl0IGZyb20gc2VyaWFsaXphdGlvbiAoZS5nLiwgY2FjaGVkL2NvbXB1dGVkIHByb3BlcnRpZXMpXG4gKiBAcGFyYW0gb3B0aW9ucy5zaGFsbG93IExpc3Qgb2YgcHJvcGVydGllcyB0aGF0IHNob3VsZCBiZSBzZXJpYWxpemVkIGJ5IGEgc2ltcGxlIHNoYWxsb3cgY29weSwgcmF0aGVyIHRoYW4gYnkgYSByZWN1cnNpdmUgY2FsbCB0byBzZXJpYWxpemUoKS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXI8VDogYW55PihuYW1lOiBzdHJpbmcsIGtsYXNzOiBDbGFzczxUPiwgb3B0aW9uczogUmVnaXN0ZXJPcHRpb25zPFQ+ID0ge30pIHtcbiAgICBhc3NlcnQoIXJlZ2lzdHJ5W25hbWVdLCBgJHtuYW1lfSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuYCk7XG4gICAgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eTogYW55KShrbGFzcywgJ19jbGFzc1JlZ2lzdHJ5S2V5Jywge1xuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgd3JpdGVhYmxlOiBmYWxzZVxuICAgIH0pO1xuICAgIHJlZ2lzdHJ5W25hbWVdID0ge1xuICAgICAgICBrbGFzcyxcbiAgICAgICAgb21pdDogb3B0aW9ucy5vbWl0IHx8IFtdLFxuICAgICAgICBzaGFsbG93OiBvcHRpb25zLnNoYWxsb3cgfHwgW11cbiAgICB9O1xufVxuXG5yZWdpc3RlcignT2JqZWN0JywgT2JqZWN0KTtcblxudHlwZSBTZXJpYWxpemVkR3JpZCA9IHsgYnVmZmVyOiBBcnJheUJ1ZmZlciB9O1xuXG5HcmlkLnNlcmlhbGl6ZSA9IGZ1bmN0aW9uIHNlcmlhbGl6ZShncmlkOiBHcmlkLCB0cmFuc2ZlcmFibGVzPzogQXJyYXk8VHJhbnNmZXJhYmxlPik6IFNlcmlhbGl6ZWRHcmlkIHtcbiAgICBjb25zdCBidWZmZXIgPSBncmlkLnRvQXJyYXlCdWZmZXIoKTtcbiAgICBpZiAodHJhbnNmZXJhYmxlcykge1xuICAgICAgICB0cmFuc2ZlcmFibGVzLnB1c2goYnVmZmVyKTtcbiAgICB9XG4gICAgcmV0dXJuIHtidWZmZXJ9O1xufTtcblxuR3JpZC5kZXNlcmlhbGl6ZSA9IGZ1bmN0aW9uIGRlc2VyaWFsaXplKHNlcmlhbGl6ZWQ6IFNlcmlhbGl6ZWRHcmlkKTogR3JpZCB7XG4gICAgcmV0dXJuIG5ldyBHcmlkKHNlcmlhbGl6ZWQuYnVmZmVyKTtcbn07XG5yZWdpc3RlcignR3JpZCcsIEdyaWQpO1xuXG5yZWdpc3RlcignQ29sb3InLCBDb2xvcik7XG5yZWdpc3RlcignRXJyb3InLCBFcnJvcik7XG5yZWdpc3RlcignUmVzb2x2ZWRJbWFnZScsIFJlc29sdmVkSW1hZ2UpO1xuXG5yZWdpc3RlcignU3R5bGVQcm9wZXJ0eUZ1bmN0aW9uJywgU3R5bGVQcm9wZXJ0eUZ1bmN0aW9uKTtcbnJlZ2lzdGVyKCdTdHlsZUV4cHJlc3Npb24nLCBTdHlsZUV4cHJlc3Npb24sIHtvbWl0OiBbJ19ldmFsdWF0b3InXX0pO1xuXG5yZWdpc3RlcignWm9vbURlcGVuZGVudEV4cHJlc3Npb24nLCBab29tRGVwZW5kZW50RXhwcmVzc2lvbik7XG5yZWdpc3RlcignWm9vbUNvbnN0YW50RXhwcmVzc2lvbicsIFpvb21Db25zdGFudEV4cHJlc3Npb24pO1xucmVnaXN0ZXIoJ0NvbXBvdW5kRXhwcmVzc2lvbicsIENvbXBvdW5kRXhwcmVzc2lvbiwge29taXQ6IFsnX2V2YWx1YXRlJ119KTtcbmZvciAoY29uc3QgbmFtZSBpbiBleHByZXNzaW9ucykge1xuICAgIGlmICgoZXhwcmVzc2lvbnNbbmFtZV06IGFueSkuX2NsYXNzUmVnaXN0cnlLZXkpIGNvbnRpbnVlO1xuICAgIHJlZ2lzdGVyKGBFeHByZXNzaW9uXyR7bmFtZX1gLCBleHByZXNzaW9uc1tuYW1lXSk7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXIodmFsOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsICYmIHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgKHZhbCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8ICh2YWwuY29uc3RydWN0b3IgJiYgdmFsLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdBcnJheUJ1ZmZlcicpKTtcbn1cblxuZnVuY3Rpb24gaXNJbWFnZUJpdG1hcCh2YWw6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBJbWFnZUJpdG1hcCAmJlxuICAgICAgICB2YWwgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcDtcbn1cblxuLyoqXG4gKiBTZXJpYWxpemUgdGhlIGdpdmVuIG9iamVjdCBmb3IgdHJhbnNmZXIgdG8gb3IgZnJvbSBhIHdlYiB3b3JrZXIuXG4gKlxuICogRm9yIG5vbi1idWlsdGluIHR5cGVzLCByZWN1cnNpdmVseSBzZXJpYWxpemUgZWFjaCBwcm9wZXJ0eSAocG9zc2libHlcbiAqIG9taXR0aW5nIGNlcnRhaW4gcHJvcGVydGllcyAtIHNlZSByZWdpc3RlcigpKSwgYW5kIHBhY2thZ2UgdGhlIHJlc3VsdCBhbG9uZ1xuICogd2l0aCB0aGUgY29uc3RydWN0b3IncyBgbmFtZWAgc28gdGhhdCB0aGUgYXBwcm9wcmlhdGUgY29uc3RydWN0b3IgY2FuIGJlXG4gKiBsb29rZWQgdXAgaW4gYGRlc2VyaWFsaXplKClgLlxuICpcbiAqIElmIGEgYHRyYW5zZmVyYWJsZXNgIGFycmF5IGlzIHByb3ZpZGVkLCBhZGQgYW55IHRyYW5zZmVyYWJsZSBvYmplY3RzIChpLmUuLFxuICogYW55IEFycmF5QnVmZmVycyBvciBBcnJheUJ1ZmZlciB2aWV3cykgdG8gdGhlIGxpc3QuIChJZiBhIGNvcHkgaXMgbmVlZGVkLFxuICogdGhpcyBzaG91bGQgaGFwcGVuIGluIHRoZSBjbGllbnQgY29kZSwgYmVmb3JlIHVzaW5nIHNlcmlhbGl6ZSgpLilcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplKGlucHV0OiBtaXhlZCwgdHJhbnNmZXJhYmxlczogP0FycmF5PFRyYW5zZmVyYWJsZT4pOiBTZXJpYWxpemVkIHtcbiAgICBpZiAoaW5wdXQgPT09IG51bGwgfHxcbiAgICAgICAgaW5wdXQgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICB0eXBlb2YgaW5wdXQgPT09ICdib29sZWFuJyB8fFxuICAgICAgICB0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInIHx8XG4gICAgICAgIHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycgfHxcbiAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBCb29sZWFuIHx8XG4gICAgICAgIGlucHV0IGluc3RhbmNlb2YgTnVtYmVyIHx8XG4gICAgICAgIGlucHV0IGluc3RhbmNlb2YgU3RyaW5nIHx8XG4gICAgICAgIGlucHV0IGluc3RhbmNlb2YgRGF0ZSB8fFxuICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfVxuXG4gICAgaWYgKGlzQXJyYXlCdWZmZXIoaW5wdXQpIHx8IGlzSW1hZ2VCaXRtYXAoaW5wdXQpKSB7XG4gICAgICAgIGlmICh0cmFuc2ZlcmFibGVzKSB7XG4gICAgICAgICAgICB0cmFuc2ZlcmFibGVzLnB1c2goKChpbnB1dDogYW55KTogQXJyYXlCdWZmZXIpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhpbnB1dCkpIHtcbiAgICAgICAgY29uc3QgdmlldzogJEFycmF5QnVmZmVyVmlldyA9IChpbnB1dDogYW55KTtcbiAgICAgICAgaWYgKHRyYW5zZmVyYWJsZXMpIHtcbiAgICAgICAgICAgIHRyYW5zZmVyYWJsZXMucHVzaCh2aWV3LmJ1ZmZlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZpZXc7XG4gICAgfVxuXG4gICAgaWYgKGlucHV0IGluc3RhbmNlb2YgSW1hZ2VEYXRhKSB7XG4gICAgICAgIGlmICh0cmFuc2ZlcmFibGVzKSB7XG4gICAgICAgICAgICB0cmFuc2ZlcmFibGVzLnB1c2goaW5wdXQuZGF0YS5idWZmZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZDogQXJyYXk8U2VyaWFsaXplZD4gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGlucHV0KSB7XG4gICAgICAgICAgICBzZXJpYWxpemVkLnB1c2goc2VyaWFsaXplKGl0ZW0sIHRyYW5zZmVyYWJsZXMpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VyaWFsaXplZDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25zdCBrbGFzcyA9IChpbnB1dC5jb25zdHJ1Y3RvcjogYW55KTtcbiAgICAgICAgY29uc3QgbmFtZSA9IGtsYXNzLl9jbGFzc1JlZ2lzdHJ5S2V5O1xuICAgICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgY2FuJ3Qgc2VyaWFsaXplIG9iamVjdCBvZiB1bnJlZ2lzdGVyZWQgY2xhc3NgKTtcbiAgICAgICAgfVxuICAgICAgICBhc3NlcnQocmVnaXN0cnlbbmFtZV0pO1xuXG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXM6IFNlcmlhbGl6ZWRPYmplY3QgPSBrbGFzcy5zZXJpYWxpemUgP1xuICAgICAgICAgICAgLy8gKFRlbXBvcmFyeSB3b3JrYXJvdW5kKSBhbGxvdyBhIGNsYXNzIHRvIHByb3ZpZGUgc3RhdGljXG4gICAgICAgICAgICAvLyBgc2VyaWFsaXplKClgIGFuZCBgZGVzZXJpYWxpemUoKWAgbWV0aG9kcyB0byBieXBhc3MgdGhlIGdlbmVyaWNcbiAgICAgICAgICAgIC8vIGFwcHJvYWNoLlxuICAgICAgICAgICAgLy8gVGhpcyB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBsZXRzIHVzIHVzZSB0aGUgZ2VuZXJpYyBzZXJpYWxpemF0aW9uXG4gICAgICAgICAgICAvLyBhcHByb2FjaCBmb3Igb2JqZWN0cyB3aG9zZSBtZW1iZXJzIGluY2x1ZGUgaW5zdGFuY2VzIG9mIGR5bmFtaWNcbiAgICAgICAgICAgIC8vIFN0cnVjdEFycmF5IHR5cGVzLiBPbmNlIHdlIHJlZmFjdG9yIFN0cnVjdEFycmF5IHRvIGJlIHN0YXRpYyxcbiAgICAgICAgICAgIC8vIHdlIGNhbiByZW1vdmUgdGhpcyBjb21wbGV4aXR5LlxuICAgICAgICAgICAgKGtsYXNzLnNlcmlhbGl6ZShpbnB1dCwgdHJhbnNmZXJhYmxlcyk6IFNlcmlhbGl6ZWRPYmplY3QpIDoge307XG5cbiAgICAgICAgaWYgKCFrbGFzcy5zZXJpYWxpemUpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGlucHV0KSB7XG4gICAgICAgICAgICAgICAgLy8gYW55IGNhc3QgZHVlIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy81MzkzXG4gICAgICAgICAgICAgICAgaWYgKCEoaW5wdXQ6IGFueSkuaGFzT3duUHJvcGVydHkoa2V5KSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgaWYgKHJlZ2lzdHJ5W25hbWVdLm9taXQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5ID0gKGlucHV0OiBhbnkpW2tleV07XG4gICAgICAgICAgICAgICAgcHJvcGVydGllc1trZXldID0gcmVnaXN0cnlbbmFtZV0uc2hhbGxvdy5pbmRleE9mKGtleSkgPj0gMCA/XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5IDpcbiAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplKHByb3BlcnR5LCB0cmFuc2ZlcmFibGVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgcHJvcGVydGllcy5tZXNzYWdlID0gaW5wdXQubWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBzdGF0aWNhbGx5IHNlcmlhbGl6ZWQgb2JqZWN0IHN1cnZpdmVzIHRyYW5zZmVyIG9mICRuYW1lIHByb3BlcnR5XG4gICAgICAgICAgICBhc3NlcnQoIXRyYW5zZmVyYWJsZXMgfHwgcHJvcGVydGllcyAhPT0gdHJhbnNmZXJhYmxlc1t0cmFuc2ZlcmFibGVzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wZXJ0aWVzLiRuYW1lKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJyRuYW1lIHByb3BlcnR5IGlzIHJlc2VydmVkIGZvciB3b3JrZXIgc2VyaWFsaXphdGlvbiBsb2dpYy4nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmFtZSAhPT0gJ09iamVjdCcpIHtcbiAgICAgICAgICAgIHByb3BlcnRpZXMuJG5hbWUgPSBuYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGBjYW4ndCBzZXJpYWxpemUgb2JqZWN0IG9mIHR5cGUgJHt0eXBlb2YgaW5wdXR9YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXNlcmlhbGl6ZShpbnB1dDogU2VyaWFsaXplZCk6IG1peGVkIHtcbiAgICBpZiAoaW5wdXQgPT09IG51bGwgfHxcbiAgICAgICAgaW5wdXQgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICB0eXBlb2YgaW5wdXQgPT09ICdib29sZWFuJyB8fFxuICAgICAgICB0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInIHx8XG4gICAgICAgIHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycgfHxcbiAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBCb29sZWFuIHx8XG4gICAgICAgIGlucHV0IGluc3RhbmNlb2YgTnVtYmVyIHx8XG4gICAgICAgIGlucHV0IGluc3RhbmNlb2YgU3RyaW5nIHx8XG4gICAgICAgIGlucHV0IGluc3RhbmNlb2YgRGF0ZSB8fFxuICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIFJlZ0V4cCB8fFxuICAgICAgICBpc0FycmF5QnVmZmVyKGlucHV0KSB8fFxuICAgICAgICBpc0ltYWdlQml0bWFwKGlucHV0KSB8fFxuICAgICAgICBBcnJheUJ1ZmZlci5pc1ZpZXcoaW5wdXQpIHx8XG4gICAgICAgIGlucHV0IGluc3RhbmNlb2YgSW1hZ2VEYXRhKSB7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0Lm1hcChkZXNlcmlhbGl6ZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IChpbnB1dDogYW55KS4kbmFtZSB8fCAnT2JqZWN0JztcblxuICAgICAgICBjb25zdCB7a2xhc3N9ID0gcmVnaXN0cnlbbmFtZV07XG4gICAgICAgIGlmICgha2xhc3MpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgY2FuJ3QgZGVzZXJpYWxpemUgdW5yZWdpc3RlcmVkIGNsYXNzICR7bmFtZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChrbGFzcy5kZXNlcmlhbGl6ZSkge1xuICAgICAgICAgICAgcmV0dXJuIChrbGFzcy5kZXNlcmlhbGl6ZTogdHlwZW9mIGRlc2VyaWFsaXplKShpbnB1dCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBPYmplY3QuY3JlYXRlKGtsYXNzLnByb3RvdHlwZSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoaW5wdXQpKSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnJG5hbWUnKSBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gKGlucHV0OiBTZXJpYWxpemVkT2JqZWN0KVtrZXldO1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSByZWdpc3RyeVtuYW1lXS5zaGFsbG93LmluZGV4T2Yoa2V5KSA+PSAwID8gdmFsdWUgOiBkZXNlcmlhbGl6ZSh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgY2FuJ3QgZGVzZXJpYWxpemUgb2JqZWN0IG9mIHR5cGUgJHt0eXBlb2YgaW5wdXR9YCk7XG59XG4iLCIvLyBAZmxvd1xuXG5jbGFzcyBab29tSGlzdG9yeSB7XG4gICAgbGFzdFpvb206IG51bWJlcjtcbiAgICBsYXN0Rmxvb3Jab29tOiBudW1iZXI7XG4gICAgbGFzdEludGVnZXJab29tOiBudW1iZXI7XG4gICAgbGFzdEludGVnZXJab29tVGltZTogbnVtYmVyO1xuICAgIGZpcnN0OiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuZmlyc3QgPSB0cnVlO1xuICAgIH1cblxuICAgIHVwZGF0ZSh6OiBudW1iZXIsIG5vdzogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGZsb29yWiA9IE1hdGguZmxvb3Ioeik7XG5cbiAgICAgICAgaWYgKHRoaXMuZmlyc3QpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyc3QgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMubGFzdEludGVnZXJab29tID0gZmxvb3JaO1xuICAgICAgICAgICAgdGhpcy5sYXN0SW50ZWdlclpvb21UaW1lID0gMDtcbiAgICAgICAgICAgIHRoaXMubGFzdFpvb20gPSB6O1xuICAgICAgICAgICAgdGhpcy5sYXN0Rmxvb3Jab29tID0gZmxvb3JaO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5sYXN0Rmxvb3Jab29tID4gZmxvb3JaKSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RJbnRlZ2VyWm9vbSA9IGZsb29yWiArIDE7XG4gICAgICAgICAgICB0aGlzLmxhc3RJbnRlZ2VyWm9vbVRpbWUgPSBub3c7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5sYXN0Rmxvb3Jab29tIDwgZmxvb3JaKSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RJbnRlZ2VyWm9vbSA9IGZsb29yWjtcbiAgICAgICAgICAgIHRoaXMubGFzdEludGVnZXJab29tVGltZSA9IG5vdztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh6ICE9PSB0aGlzLmxhc3Rab29tKSB7XG4gICAgICAgICAgICB0aGlzLmxhc3Rab29tID0gejtcbiAgICAgICAgICAgIHRoaXMubGFzdEZsb29yWm9vbSA9IGZsb29yWjtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgWm9vbUhpc3Rvcnk7XG4iLCIvLyBAZmxvd1xuXG4vLyBUaGUgZm9sbG93aW5nIHRhYmxlIGNvbWVzIGZyb20gPGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLzEyLjAuMC91Y2QvQmxvY2tzLnR4dD4uXG4vLyBLZWVwIGl0IHN5bmNocm9uaXplZCB3aXRoIDxodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy9VQ0QvbGF0ZXN0L3VjZC9CbG9ja3MudHh0Pi5cblxudHlwZSBVbmljb2RlQmxvY2tMb29rdXAgPSB7W2tleTogc3RyaW5nXTogKGNoYXI6IG51bWJlcikgPT4gYm9vbGVhbn07XG5cbmNvbnN0IHVuaWNvZGVCbG9ja0xvb2t1cDogVW5pY29kZUJsb2NrTG9va3VwID0ge1xuICAgIC8vICdCYXNpYyBMYXRpbic6IChjaGFyKSA9PiBjaGFyID49IDB4MDAwMCAmJiBjaGFyIDw9IDB4MDA3RixcbiAgICAnTGF0aW4tMSBTdXBwbGVtZW50JzogKGNoYXIpID0+IGNoYXIgPj0gMHgwMDgwICYmIGNoYXIgPD0gMHgwMEZGLFxuICAgIC8vICdMYXRpbiBFeHRlbmRlZC1BJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwMTAwICYmIGNoYXIgPD0gMHgwMTdGLFxuICAgIC8vICdMYXRpbiBFeHRlbmRlZC1CJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwMTgwICYmIGNoYXIgPD0gMHgwMjRGLFxuICAgIC8vICdJUEEgRXh0ZW5zaW9ucyc6IChjaGFyKSA9PiBjaGFyID49IDB4MDI1MCAmJiBjaGFyIDw9IDB4MDJBRixcbiAgICAvLyAnU3BhY2luZyBNb2RpZmllciBMZXR0ZXJzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwMkIwICYmIGNoYXIgPD0gMHgwMkZGLFxuICAgIC8vICdDb21iaW5pbmcgRGlhY3JpdGljYWwgTWFya3MnOiAoY2hhcikgPT4gY2hhciA+PSAweDAzMDAgJiYgY2hhciA8PSAweDAzNkYsXG4gICAgLy8gJ0dyZWVrIGFuZCBDb3B0aWMnOiAoY2hhcikgPT4gY2hhciA+PSAweDAzNzAgJiYgY2hhciA8PSAweDAzRkYsXG4gICAgLy8gJ0N5cmlsbGljJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwNDAwICYmIGNoYXIgPD0gMHgwNEZGLFxuICAgIC8vICdDeXJpbGxpYyBTdXBwbGVtZW50JzogKGNoYXIpID0+IGNoYXIgPj0gMHgwNTAwICYmIGNoYXIgPD0gMHgwNTJGLFxuICAgIC8vICdBcm1lbmlhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MDUzMCAmJiBjaGFyIDw9IDB4MDU4RixcbiAgICAvLydIZWJyZXcnOiAoY2hhcikgPT4gY2hhciA+PSAweDA1OTAgJiYgY2hhciA8PSAweDA1RkYsXG4gICAgJ0FyYWJpYyc6IChjaGFyKSA9PiBjaGFyID49IDB4MDYwMCAmJiBjaGFyIDw9IDB4MDZGRixcbiAgICAvLydTeXJpYWMnOiAoY2hhcikgPT4gY2hhciA+PSAweDA3MDAgJiYgY2hhciA8PSAweDA3NEYsXG4gICAgJ0FyYWJpYyBTdXBwbGVtZW50JzogKGNoYXIpID0+IGNoYXIgPj0gMHgwNzUwICYmIGNoYXIgPD0gMHgwNzdGLFxuICAgIC8vICdUaGFhbmEnOiAoY2hhcikgPT4gY2hhciA+PSAweDA3ODAgJiYgY2hhciA8PSAweDA3QkYsXG4gICAgLy8gJ05Lbyc6IChjaGFyKSA9PiBjaGFyID49IDB4MDdDMCAmJiBjaGFyIDw9IDB4MDdGRixcbiAgICAvLyAnU2FtYXJpdGFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwODAwICYmIGNoYXIgPD0gMHgwODNGLFxuICAgIC8vICdNYW5kYWljJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwODQwICYmIGNoYXIgPD0gMHgwODVGLFxuICAgIC8vICdTeXJpYWMgU3VwcGxlbWVudCc6IChjaGFyKSA9PiBjaGFyID49IDB4MDg2MCAmJiBjaGFyIDw9IDB4MDg2RixcbiAgICAnQXJhYmljIEV4dGVuZGVkLUEnOiAoY2hhcikgPT4gY2hhciA+PSAweDA4QTAgJiYgY2hhciA8PSAweDA4RkYsXG4gICAgLy8gJ0RldmFuYWdhcmknOiAoY2hhcikgPT4gY2hhciA+PSAweDA5MDAgJiYgY2hhciA8PSAweDA5N0YsXG4gICAgLy8gJ0JlbmdhbGknOiAoY2hhcikgPT4gY2hhciA+PSAweDA5ODAgJiYgY2hhciA8PSAweDA5RkYsXG4gICAgLy8gJ0d1cm11a2hpJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwQTAwICYmIGNoYXIgPD0gMHgwQTdGLFxuICAgIC8vICdHdWphcmF0aSc6IChjaGFyKSA9PiBjaGFyID49IDB4MEE4MCAmJiBjaGFyIDw9IDB4MEFGRixcbiAgICAvLyAnT3JpeWEnOiAoY2hhcikgPT4gY2hhciA+PSAweDBCMDAgJiYgY2hhciA8PSAweDBCN0YsXG4gICAgLy8gJ1RhbWlsJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwQjgwICYmIGNoYXIgPD0gMHgwQkZGLFxuICAgIC8vICdUZWx1Z3UnOiAoY2hhcikgPT4gY2hhciA+PSAweDBDMDAgJiYgY2hhciA8PSAweDBDN0YsXG4gICAgLy8gJ0thbm5hZGEnOiAoY2hhcikgPT4gY2hhciA+PSAweDBDODAgJiYgY2hhciA8PSAweDBDRkYsXG4gICAgLy8gJ01hbGF5YWxhbSc6IChjaGFyKSA9PiBjaGFyID49IDB4MEQwMCAmJiBjaGFyIDw9IDB4MEQ3RixcbiAgICAvLyAnU2luaGFsYSc6IChjaGFyKSA9PiBjaGFyID49IDB4MEQ4MCAmJiBjaGFyIDw9IDB4MERGRixcbiAgICAvLyAnVGhhaSc6IChjaGFyKSA9PiBjaGFyID49IDB4MEUwMCAmJiBjaGFyIDw9IDB4MEU3RixcbiAgICAvLyAnTGFvJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwRTgwICYmIGNoYXIgPD0gMHgwRUZGLFxuICAgIC8vICdUaWJldGFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgwRjAwICYmIGNoYXIgPD0gMHgwRkZGLFxuICAgIC8vICdNeWFubWFyJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDAwICYmIGNoYXIgPD0gMHgxMDlGLFxuICAgIC8vICdHZW9yZ2lhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTBBMCAmJiBjaGFyIDw9IDB4MTBGRixcbiAgICAnSGFuZ3VsIEphbW8nOiAoY2hhcikgPT4gY2hhciA+PSAweDExMDAgJiYgY2hhciA8PSAweDExRkYsXG4gICAgLy8gJ0V0aGlvcGljJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMjAwICYmIGNoYXIgPD0gMHgxMzdGLFxuICAgIC8vICdFdGhpb3BpYyBTdXBwbGVtZW50JzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMzgwICYmIGNoYXIgPD0gMHgxMzlGLFxuICAgIC8vICdDaGVyb2tlZSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTNBMCAmJiBjaGFyIDw9IDB4MTNGRixcbiAgICAnVW5pZmllZCBDYW5hZGlhbiBBYm9yaWdpbmFsIFN5bGxhYmljcyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTQwMCAmJiBjaGFyIDw9IDB4MTY3RixcbiAgICAvLyAnT2doYW0nOiAoY2hhcikgPT4gY2hhciA+PSAweDE2ODAgJiYgY2hhciA8PSAweDE2OUYsXG4gICAgLy8gJ1J1bmljJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxNkEwICYmIGNoYXIgPD0gMHgxNkZGLFxuICAgIC8vICdUYWdhbG9nJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxNzAwICYmIGNoYXIgPD0gMHgxNzFGLFxuICAgIC8vICdIYW51bm9vJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxNzIwICYmIGNoYXIgPD0gMHgxNzNGLFxuICAgIC8vICdCdWhpZCc6IChjaGFyKSA9PiBjaGFyID49IDB4MTc0MCAmJiBjaGFyIDw9IDB4MTc1RixcbiAgICAvLyAnVGFnYmFud2EnOiAoY2hhcikgPT4gY2hhciA+PSAweDE3NjAgJiYgY2hhciA8PSAweDE3N0YsXG4gICAgJ0tobWVyJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxNzgwICYmIGNoYXIgPD0gMHgxN0ZGLFxuICAgIC8vICdNb25nb2xpYW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDE4MDAgJiYgY2hhciA8PSAweDE4QUYsXG4gICAgJ1VuaWZpZWQgQ2FuYWRpYW4gQWJvcmlnaW5hbCBTeWxsYWJpY3MgRXh0ZW5kZWQnOiAoY2hhcikgPT4gY2hhciA+PSAweDE4QjAgJiYgY2hhciA8PSAweDE4RkYsXG4gICAgLy8gJ0xpbWJ1JzogKGNoYXIpID0+IGNoYXIgPj0gMHgxOTAwICYmIGNoYXIgPD0gMHgxOTRGLFxuICAgIC8vICdUYWkgTGUnOiAoY2hhcikgPT4gY2hhciA+PSAweDE5NTAgJiYgY2hhciA8PSAweDE5N0YsXG4gICAgLy8gJ05ldyBUYWkgTHVlJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxOTgwICYmIGNoYXIgPD0gMHgxOURGLFxuICAgIC8vICdLaG1lciBTeW1ib2xzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxOUUwICYmIGNoYXIgPD0gMHgxOUZGLFxuICAgIC8vICdCdWdpbmVzZSc6IChjaGFyKSA9PiBjaGFyID49IDB4MUEwMCAmJiBjaGFyIDw9IDB4MUExRixcbiAgICAvLyAnVGFpIFRoYW0nOiAoY2hhcikgPT4gY2hhciA+PSAweDFBMjAgJiYgY2hhciA8PSAweDFBQUYsXG4gICAgLy8gJ0NvbWJpbmluZyBEaWFjcml0aWNhbCBNYXJrcyBFeHRlbmRlZCc6IChjaGFyKSA9PiBjaGFyID49IDB4MUFCMCAmJiBjaGFyIDw9IDB4MUFGRixcbiAgICAvLyAnQmFsaW5lc2UnOiAoY2hhcikgPT4gY2hhciA+PSAweDFCMDAgJiYgY2hhciA8PSAweDFCN0YsXG4gICAgLy8gJ1N1bmRhbmVzZSc6IChjaGFyKSA9PiBjaGFyID49IDB4MUI4MCAmJiBjaGFyIDw9IDB4MUJCRixcbiAgICAvLyAnQmF0YWsnOiAoY2hhcikgPT4gY2hhciA+PSAweDFCQzAgJiYgY2hhciA8PSAweDFCRkYsXG4gICAgLy8gJ0xlcGNoYSc6IChjaGFyKSA9PiBjaGFyID49IDB4MUMwMCAmJiBjaGFyIDw9IDB4MUM0RixcbiAgICAvLyAnT2wgQ2hpa2knOiAoY2hhcikgPT4gY2hhciA+PSAweDFDNTAgJiYgY2hhciA8PSAweDFDN0YsXG4gICAgLy8gJ0N5cmlsbGljIEV4dGVuZGVkLUMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFDODAgJiYgY2hhciA8PSAweDFDOEYsXG4gICAgLy8gJ0dlb3JnaWFuIEV4dGVuZGVkJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxQzkwICYmIGNoYXIgPD0gMHgxQ0JGLFxuICAgIC8vICdTdW5kYW5lc2UgU3VwcGxlbWVudCc6IChjaGFyKSA9PiBjaGFyID49IDB4MUNDMCAmJiBjaGFyIDw9IDB4MUNDRixcbiAgICAvLyAnVmVkaWMgRXh0ZW5zaW9ucyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUNEMCAmJiBjaGFyIDw9IDB4MUNGRixcbiAgICAvLyAnUGhvbmV0aWMgRXh0ZW5zaW9ucyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUQwMCAmJiBjaGFyIDw9IDB4MUQ3RixcbiAgICAvLyAnUGhvbmV0aWMgRXh0ZW5zaW9ucyBTdXBwbGVtZW50JzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRDgwICYmIGNoYXIgPD0gMHgxREJGLFxuICAgIC8vICdDb21iaW5pbmcgRGlhY3JpdGljYWwgTWFya3MgU3VwcGxlbWVudCc6IChjaGFyKSA9PiBjaGFyID49IDB4MURDMCAmJiBjaGFyIDw9IDB4MURGRixcbiAgICAvLyAnTGF0aW4gRXh0ZW5kZWQgQWRkaXRpb25hbCc6IChjaGFyKSA9PiBjaGFyID49IDB4MUUwMCAmJiBjaGFyIDw9IDB4MUVGRixcbiAgICAvLyAnR3JlZWsgRXh0ZW5kZWQnOiAoY2hhcikgPT4gY2hhciA+PSAweDFGMDAgJiYgY2hhciA8PSAweDFGRkYsXG4gICAgJ0dlbmVyYWwgUHVuY3R1YXRpb24nOiAoY2hhcikgPT4gY2hhciA+PSAweDIwMDAgJiYgY2hhciA8PSAweDIwNkYsXG4gICAgLy8gJ1N1cGVyc2NyaXB0cyBhbmQgU3Vic2NyaXB0cyc6IChjaGFyKSA9PiBjaGFyID49IDB4MjA3MCAmJiBjaGFyIDw9IDB4MjA5RixcbiAgICAvLyAnQ3VycmVuY3kgU3ltYm9scyc6IChjaGFyKSA9PiBjaGFyID49IDB4MjBBMCAmJiBjaGFyIDw9IDB4MjBDRixcbiAgICAvLyAnQ29tYmluaW5nIERpYWNyaXRpY2FsIE1hcmtzIGZvciBTeW1ib2xzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyMEQwICYmIGNoYXIgPD0gMHgyMEZGLFxuICAgICdMZXR0ZXJsaWtlIFN5bWJvbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDIxMDAgJiYgY2hhciA8PSAweDIxNEYsXG4gICAgJ051bWJlciBGb3Jtcyc6IChjaGFyKSA9PiBjaGFyID49IDB4MjE1MCAmJiBjaGFyIDw9IDB4MjE4RixcbiAgICAvLyAnQXJyb3dzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyMTkwICYmIGNoYXIgPD0gMHgyMUZGLFxuICAgIC8vICdNYXRoZW1hdGljYWwgT3BlcmF0b3JzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyMjAwICYmIGNoYXIgPD0gMHgyMkZGLFxuICAgICdNaXNjZWxsYW5lb3VzIFRlY2huaWNhbCc6IChjaGFyKSA9PiBjaGFyID49IDB4MjMwMCAmJiBjaGFyIDw9IDB4MjNGRixcbiAgICAnQ29udHJvbCBQaWN0dXJlcyc6IChjaGFyKSA9PiBjaGFyID49IDB4MjQwMCAmJiBjaGFyIDw9IDB4MjQzRixcbiAgICAnT3B0aWNhbCBDaGFyYWN0ZXIgUmVjb2duaXRpb24nOiAoY2hhcikgPT4gY2hhciA+PSAweDI0NDAgJiYgY2hhciA8PSAweDI0NUYsXG4gICAgJ0VuY2xvc2VkIEFscGhhbnVtZXJpY3MnOiAoY2hhcikgPT4gY2hhciA+PSAweDI0NjAgJiYgY2hhciA8PSAweDI0RkYsXG4gICAgLy8gJ0JveCBEcmF3aW5nJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyNTAwICYmIGNoYXIgPD0gMHgyNTdGLFxuICAgIC8vICdCbG9jayBFbGVtZW50cyc6IChjaGFyKSA9PiBjaGFyID49IDB4MjU4MCAmJiBjaGFyIDw9IDB4MjU5RixcbiAgICAnR2VvbWV0cmljIFNoYXBlcyc6IChjaGFyKSA9PiBjaGFyID49IDB4MjVBMCAmJiBjaGFyIDw9IDB4MjVGRixcbiAgICAnTWlzY2VsbGFuZW91cyBTeW1ib2xzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyNjAwICYmIGNoYXIgPD0gMHgyNkZGLFxuICAgIC8vICdEaW5nYmF0cyc6IChjaGFyKSA9PiBjaGFyID49IDB4MjcwMCAmJiBjaGFyIDw9IDB4MjdCRixcbiAgICAvLyAnTWlzY2VsbGFuZW91cyBNYXRoZW1hdGljYWwgU3ltYm9scy1BJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyN0MwICYmIGNoYXIgPD0gMHgyN0VGLFxuICAgIC8vICdTdXBwbGVtZW50YWwgQXJyb3dzLUEnOiAoY2hhcikgPT4gY2hhciA+PSAweDI3RjAgJiYgY2hhciA8PSAweDI3RkYsXG4gICAgLy8gJ0JyYWlsbGUgUGF0dGVybnMnOiAoY2hhcikgPT4gY2hhciA+PSAweDI4MDAgJiYgY2hhciA8PSAweDI4RkYsXG4gICAgLy8gJ1N1cHBsZW1lbnRhbCBBcnJvd3MtQic6IChjaGFyKSA9PiBjaGFyID49IDB4MjkwMCAmJiBjaGFyIDw9IDB4Mjk3RixcbiAgICAvLyAnTWlzY2VsbGFuZW91cyBNYXRoZW1hdGljYWwgU3ltYm9scy1CJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyOTgwICYmIGNoYXIgPD0gMHgyOUZGLFxuICAgIC8vICdTdXBwbGVtZW50YWwgTWF0aGVtYXRpY2FsIE9wZXJhdG9ycyc6IChjaGFyKSA9PiBjaGFyID49IDB4MkEwMCAmJiBjaGFyIDw9IDB4MkFGRixcbiAgICAnTWlzY2VsbGFuZW91cyBTeW1ib2xzIGFuZCBBcnJvd3MnOiAoY2hhcikgPT4gY2hhciA+PSAweDJCMDAgJiYgY2hhciA8PSAweDJCRkYsXG4gICAgLy8gJ0dsYWdvbGl0aWMnOiAoY2hhcikgPT4gY2hhciA+PSAweDJDMDAgJiYgY2hhciA8PSAweDJDNUYsXG4gICAgLy8gJ0xhdGluIEV4dGVuZGVkLUMnOiAoY2hhcikgPT4gY2hhciA+PSAweDJDNjAgJiYgY2hhciA8PSAweDJDN0YsXG4gICAgLy8gJ0NvcHRpYyc6IChjaGFyKSA9PiBjaGFyID49IDB4MkM4MCAmJiBjaGFyIDw9IDB4MkNGRixcbiAgICAvLyAnR2VvcmdpYW4gU3VwcGxlbWVudCc6IChjaGFyKSA9PiBjaGFyID49IDB4MkQwMCAmJiBjaGFyIDw9IDB4MkQyRixcbiAgICAvLyAnVGlmaW5hZ2gnOiAoY2hhcikgPT4gY2hhciA+PSAweDJEMzAgJiYgY2hhciA8PSAweDJEN0YsXG4gICAgLy8gJ0V0aGlvcGljIEV4dGVuZGVkJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyRDgwICYmIGNoYXIgPD0gMHgyRERGLFxuICAgIC8vICdDeXJpbGxpYyBFeHRlbmRlZC1BJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyREUwICYmIGNoYXIgPD0gMHgyREZGLFxuICAgIC8vICdTdXBwbGVtZW50YWwgUHVuY3R1YXRpb24nOiAoY2hhcikgPT4gY2hhciA+PSAweDJFMDAgJiYgY2hhciA8PSAweDJFN0YsXG4gICAgJ0NKSyBSYWRpY2FscyBTdXBwbGVtZW50JzogKGNoYXIpID0+IGNoYXIgPj0gMHgyRTgwICYmIGNoYXIgPD0gMHgyRUZGLFxuICAgICdLYW5neGkgUmFkaWNhbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDJGMDAgJiYgY2hhciA8PSAweDJGREYsXG4gICAgJ0lkZW9ncmFwaGljIERlc2NyaXB0aW9uIENoYXJhY3RlcnMnOiAoY2hhcikgPT4gY2hhciA+PSAweDJGRjAgJiYgY2hhciA8PSAweDJGRkYsXG4gICAgJ0NKSyBTeW1ib2xzIGFuZCBQdW5jdHVhdGlvbic6IChjaGFyKSA9PiBjaGFyID49IDB4MzAwMCAmJiBjaGFyIDw9IDB4MzAzRixcbiAgICAnSGlyYWdhbmEnOiAoY2hhcikgPT4gY2hhciA+PSAweDMwNDAgJiYgY2hhciA8PSAweDMwOUYsXG4gICAgJ0thdGFrYW5hJzogKGNoYXIpID0+IGNoYXIgPj0gMHgzMEEwICYmIGNoYXIgPD0gMHgzMEZGLFxuICAgICdCb3BvbW9mbyc6IChjaGFyKSA9PiBjaGFyID49IDB4MzEwMCAmJiBjaGFyIDw9IDB4MzEyRixcbiAgICAnSGFuZ3VsIENvbXBhdGliaWxpdHkgSmFtbyc6IChjaGFyKSA9PiBjaGFyID49IDB4MzEzMCAmJiBjaGFyIDw9IDB4MzE4RixcbiAgICAnS2FuYnVuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgzMTkwICYmIGNoYXIgPD0gMHgzMTlGLFxuICAgICdCb3BvbW9mbyBFeHRlbmRlZCc6IChjaGFyKSA9PiBjaGFyID49IDB4MzFBMCAmJiBjaGFyIDw9IDB4MzFCRixcbiAgICAnQ0pLIFN0cm9rZXMnOiAoY2hhcikgPT4gY2hhciA+PSAweDMxQzAgJiYgY2hhciA8PSAweDMxRUYsXG4gICAgJ0thdGFrYW5hIFBob25ldGljIEV4dGVuc2lvbnMnOiAoY2hhcikgPT4gY2hhciA+PSAweDMxRjAgJiYgY2hhciA8PSAweDMxRkYsXG4gICAgJ0VuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDMyMDAgJiYgY2hhciA8PSAweDMyRkYsXG4gICAgJ0NKSyBDb21wYXRpYmlsaXR5JzogKGNoYXIpID0+IGNoYXIgPj0gMHgzMzAwICYmIGNoYXIgPD0gMHgzM0ZGLFxuICAgICdDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBBJzogKGNoYXIpID0+IGNoYXIgPj0gMHgzNDAwICYmIGNoYXIgPD0gMHg0REJGLFxuICAgICdZaWppbmcgSGV4YWdyYW0gU3ltYm9scyc6IChjaGFyKSA9PiBjaGFyID49IDB4NERDMCAmJiBjaGFyIDw9IDB4NERGRixcbiAgICAnQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyc6IChjaGFyKSA9PiBjaGFyID49IDB4NEUwMCAmJiBjaGFyIDw9IDB4OUZGRixcbiAgICAnWWkgU3lsbGFibGVzJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBMDAwICYmIGNoYXIgPD0gMHhBNDhGLFxuICAgICdZaSBSYWRpY2Fscyc6IChjaGFyKSA9PiBjaGFyID49IDB4QTQ5MCAmJiBjaGFyIDw9IDB4QTRDRixcbiAgICAvLyAnTGlzdSc6IChjaGFyKSA9PiBjaGFyID49IDB4QTREMCAmJiBjaGFyIDw9IDB4QTRGRixcbiAgICAvLyAnVmFpJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBNTAwICYmIGNoYXIgPD0gMHhBNjNGLFxuICAgIC8vICdDeXJpbGxpYyBFeHRlbmRlZC1CJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBNjQwICYmIGNoYXIgPD0gMHhBNjlGLFxuICAgIC8vICdCYW11bSc6IChjaGFyKSA9PiBjaGFyID49IDB4QTZBMCAmJiBjaGFyIDw9IDB4QTZGRixcbiAgICAvLyAnTW9kaWZpZXIgVG9uZSBMZXR0ZXJzJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBNzAwICYmIGNoYXIgPD0gMHhBNzFGLFxuICAgIC8vICdMYXRpbiBFeHRlbmRlZC1EJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBNzIwICYmIGNoYXIgPD0gMHhBN0ZGLFxuICAgIC8vICdTeWxvdGkgTmFncmknOiAoY2hhcikgPT4gY2hhciA+PSAweEE4MDAgJiYgY2hhciA8PSAweEE4MkYsXG4gICAgLy8gJ0NvbW1vbiBJbmRpYyBOdW1iZXIgRm9ybXMnOiAoY2hhcikgPT4gY2hhciA+PSAweEE4MzAgJiYgY2hhciA8PSAweEE4M0YsXG4gICAgLy8gJ1BoYWdzLXBhJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBODQwICYmIGNoYXIgPD0gMHhBODdGLFxuICAgIC8vICdTYXVyYXNodHJhJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBODgwICYmIGNoYXIgPD0gMHhBOERGLFxuICAgIC8vICdEZXZhbmFnYXJpIEV4dGVuZGVkJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBOEUwICYmIGNoYXIgPD0gMHhBOEZGLFxuICAgIC8vICdLYXlhaCBMaSc6IChjaGFyKSA9PiBjaGFyID49IDB4QTkwMCAmJiBjaGFyIDw9IDB4QTkyRixcbiAgICAvLyAnUmVqYW5nJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBOTMwICYmIGNoYXIgPD0gMHhBOTVGLFxuICAgICdIYW5ndWwgSmFtbyBFeHRlbmRlZC1BJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBOTYwICYmIGNoYXIgPD0gMHhBOTdGLFxuICAgIC8vICdKYXZhbmVzZSc6IChjaGFyKSA9PiBjaGFyID49IDB4QTk4MCAmJiBjaGFyIDw9IDB4QTlERixcbiAgICAvLyAnTXlhbm1hciBFeHRlbmRlZC1CJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBOUUwICYmIGNoYXIgPD0gMHhBOUZGLFxuICAgIC8vICdDaGFtJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBQTAwICYmIGNoYXIgPD0gMHhBQTVGLFxuICAgIC8vICdNeWFubWFyIEV4dGVuZGVkLUEnOiAoY2hhcikgPT4gY2hhciA+PSAweEFBNjAgJiYgY2hhciA8PSAweEFBN0YsXG4gICAgLy8gJ1RhaSBWaWV0JzogKGNoYXIpID0+IGNoYXIgPj0gMHhBQTgwICYmIGNoYXIgPD0gMHhBQURGLFxuICAgIC8vICdNZWV0ZWkgTWF5ZWsgRXh0ZW5zaW9ucyc6IChjaGFyKSA9PiBjaGFyID49IDB4QUFFMCAmJiBjaGFyIDw9IDB4QUFGRixcbiAgICAvLyAnRXRoaW9waWMgRXh0ZW5kZWQtQSc6IChjaGFyKSA9PiBjaGFyID49IDB4QUIwMCAmJiBjaGFyIDw9IDB4QUIyRixcbiAgICAvLyAnTGF0aW4gRXh0ZW5kZWQtRSc6IChjaGFyKSA9PiBjaGFyID49IDB4QUIzMCAmJiBjaGFyIDw9IDB4QUI2RixcbiAgICAvLyAnQ2hlcm9rZWUgU3VwcGxlbWVudCc6IChjaGFyKSA9PiBjaGFyID49IDB4QUI3MCAmJiBjaGFyIDw9IDB4QUJCRixcbiAgICAvLyAnTWVldGVpIE1heWVrJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBQkMwICYmIGNoYXIgPD0gMHhBQkZGLFxuICAgICdIYW5ndWwgU3lsbGFibGVzJzogKGNoYXIpID0+IGNoYXIgPj0gMHhBQzAwICYmIGNoYXIgPD0gMHhEN0FGLFxuICAgICdIYW5ndWwgSmFtbyBFeHRlbmRlZC1CJzogKGNoYXIpID0+IGNoYXIgPj0gMHhEN0IwICYmIGNoYXIgPD0gMHhEN0ZGLFxuICAgIC8vICdIaWdoIFN1cnJvZ2F0ZXMnOiAoY2hhcikgPT4gY2hhciA+PSAweEQ4MDAgJiYgY2hhciA8PSAweERCN0YsXG4gICAgLy8gJ0hpZ2ggUHJpdmF0ZSBVc2UgU3Vycm9nYXRlcyc6IChjaGFyKSA9PiBjaGFyID49IDB4REI4MCAmJiBjaGFyIDw9IDB4REJGRixcbiAgICAvLyAnTG93IFN1cnJvZ2F0ZXMnOiAoY2hhcikgPT4gY2hhciA+PSAweERDMDAgJiYgY2hhciA8PSAweERGRkYsXG4gICAgJ1ByaXZhdGUgVXNlIEFyZWEnOiAoY2hhcikgPT4gY2hhciA+PSAweEUwMDAgJiYgY2hhciA8PSAweEY4RkYsXG4gICAgJ0NKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMnOiAoY2hhcikgPT4gY2hhciA+PSAweEY5MDAgJiYgY2hhciA8PSAweEZBRkYsXG4gICAgLy8gJ0FscGhhYmV0aWMgUHJlc2VudGF0aW9uIEZvcm1zJzogKGNoYXIpID0+IGNoYXIgPj0gMHhGQjAwICYmIGNoYXIgPD0gMHhGQjRGLFxuICAgICdBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUEnOiAoY2hhcikgPT4gY2hhciA+PSAweEZCNTAgJiYgY2hhciA8PSAweEZERkYsXG4gICAgLy8gJ1ZhcmlhdGlvbiBTZWxlY3RvcnMnOiAoY2hhcikgPT4gY2hhciA+PSAweEZFMDAgJiYgY2hhciA8PSAweEZFMEYsXG4gICAgJ1ZlcnRpY2FsIEZvcm1zJzogKGNoYXIpID0+IGNoYXIgPj0gMHhGRTEwICYmIGNoYXIgPD0gMHhGRTFGLFxuICAgIC8vICdDb21iaW5pbmcgSGFsZiBNYXJrcyc6IChjaGFyKSA9PiBjaGFyID49IDB4RkUyMCAmJiBjaGFyIDw9IDB4RkUyRixcbiAgICAnQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMnOiAoY2hhcikgPT4gY2hhciA+PSAweEZFMzAgJiYgY2hhciA8PSAweEZFNEYsXG4gICAgJ1NtYWxsIEZvcm0gVmFyaWFudHMnOiAoY2hhcikgPT4gY2hhciA+PSAweEZFNTAgJiYgY2hhciA8PSAweEZFNkYsXG4gICAgJ0FyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQic6IChjaGFyKSA9PiBjaGFyID49IDB4RkU3MCAmJiBjaGFyIDw9IDB4RkVGRixcbiAgICAnSGFsZndpZHRoIGFuZCBGdWxsd2lkdGggRm9ybXMnOiAoY2hhcikgPT4gY2hhciA+PSAweEZGMDAgJiYgY2hhciA8PSAweEZGRUZcbiAgICAvLyAnU3BlY2lhbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweEZGRjAgJiYgY2hhciA8PSAweEZGRkYsXG4gICAgLy8gJ0xpbmVhciBCIFN5bGxhYmFyeSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTAwMDAgJiYgY2hhciA8PSAweDEwMDdGLFxuICAgIC8vICdMaW5lYXIgQiBJZGVvZ3JhbXMnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwMDgwICYmIGNoYXIgPD0gMHgxMDBGRixcbiAgICAvLyAnQWVnZWFuIE51bWJlcnMnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwMTAwICYmIGNoYXIgPD0gMHgxMDEzRixcbiAgICAvLyAnQW5jaWVudCBHcmVlayBOdW1iZXJzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDE0MCAmJiBjaGFyIDw9IDB4MTAxOEYsXG4gICAgLy8gJ0FuY2llbnQgU3ltYm9scyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTAxOTAgJiYgY2hhciA8PSAweDEwMUNGLFxuICAgIC8vICdQaGFpc3RvcyBEaXNjJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDFEMCAmJiBjaGFyIDw9IDB4MTAxRkYsXG4gICAgLy8gJ0x5Y2lhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTAyODAgJiYgY2hhciA8PSAweDEwMjlGLFxuICAgIC8vICdDYXJpYW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDEwMkEwICYmIGNoYXIgPD0gMHgxMDJERixcbiAgICAvLyAnQ29wdGljIEVwYWN0IE51bWJlcnMnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwMkUwICYmIGNoYXIgPD0gMHgxMDJGRixcbiAgICAvLyAnT2xkIEl0YWxpYyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTAzMDAgJiYgY2hhciA8PSAweDEwMzJGLFxuICAgIC8vICdHb3RoaWMnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwMzMwICYmIGNoYXIgPD0gMHgxMDM0RixcbiAgICAvLyAnT2xkIFBlcm1pYyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTAzNTAgJiYgY2hhciA8PSAweDEwMzdGLFxuICAgIC8vICdVZ2FyaXRpYyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTAzODAgJiYgY2hhciA8PSAweDEwMzlGLFxuICAgIC8vICdPbGQgUGVyc2lhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTAzQTAgJiYgY2hhciA8PSAweDEwM0RGLFxuICAgIC8vICdEZXNlcmV0JzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDQwMCAmJiBjaGFyIDw9IDB4MTA0NEYsXG4gICAgLy8gJ1NoYXZpYW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDEwNDUwICYmIGNoYXIgPD0gMHgxMDQ3RixcbiAgICAvLyAnT3NtYW55YSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTA0ODAgJiYgY2hhciA8PSAweDEwNEFGLFxuICAgIC8vICdPc2FnZSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTA0QjAgJiYgY2hhciA8PSAweDEwNEZGLFxuICAgIC8vICdFbGJhc2FuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDUwMCAmJiBjaGFyIDw9IDB4MTA1MkYsXG4gICAgLy8gJ0NhdWNhc2lhbiBBbGJhbmlhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTA1MzAgJiYgY2hhciA8PSAweDEwNTZGLFxuICAgIC8vICdMaW5lYXIgQSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTA2MDAgJiYgY2hhciA8PSAweDEwNzdGLFxuICAgIC8vICdDeXByaW90IFN5bGxhYmFyeSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTA4MDAgJiYgY2hhciA8PSAweDEwODNGLFxuICAgIC8vICdJbXBlcmlhbCBBcmFtYWljJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDg0MCAmJiBjaGFyIDw9IDB4MTA4NUYsXG4gICAgLy8gJ1BhbG15cmVuZSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTA4NjAgJiYgY2hhciA8PSAweDEwODdGLFxuICAgIC8vICdOYWJhdGFlYW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDEwODgwICYmIGNoYXIgPD0gMHgxMDhBRixcbiAgICAvLyAnSGF0cmFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDhFMCAmJiBjaGFyIDw9IDB4MTA4RkYsXG4gICAgLy8gJ1Bob2VuaWNpYW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDEwOTAwICYmIGNoYXIgPD0gMHgxMDkxRixcbiAgICAvLyAnTHlkaWFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDkyMCAmJiBjaGFyIDw9IDB4MTA5M0YsXG4gICAgLy8gJ01lcm9pdGljIEhpZXJvZ2x5cGhzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMDk4MCAmJiBjaGFyIDw9IDB4MTA5OUYsXG4gICAgLy8gJ01lcm9pdGljIEN1cnNpdmUnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwOUEwICYmIGNoYXIgPD0gMHgxMDlGRixcbiAgICAvLyAnS2hhcm9zaHRoaSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTBBMDAgJiYgY2hhciA8PSAweDEwQTVGLFxuICAgIC8vICdPbGQgU291dGggQXJhYmlhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTBBNjAgJiYgY2hhciA8PSAweDEwQTdGLFxuICAgIC8vICdPbGQgTm9ydGggQXJhYmlhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTBBODAgJiYgY2hhciA8PSAweDEwQTlGLFxuICAgIC8vICdNYW5pY2hhZWFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMEFDMCAmJiBjaGFyIDw9IDB4MTBBRkYsXG4gICAgLy8gJ0F2ZXN0YW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDEwQjAwICYmIGNoYXIgPD0gMHgxMEIzRixcbiAgICAvLyAnSW5zY3JpcHRpb25hbCBQYXJ0aGlhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTBCNDAgJiYgY2hhciA8PSAweDEwQjVGLFxuICAgIC8vICdJbnNjcmlwdGlvbmFsIFBhaGxhdmknOiAoY2hhcikgPT4gY2hhciA+PSAweDEwQjYwICYmIGNoYXIgPD0gMHgxMEI3RixcbiAgICAvLyAnUHNhbHRlciBQYWhsYXZpJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMEI4MCAmJiBjaGFyIDw9IDB4MTBCQUYsXG4gICAgLy8gJ09sZCBUdXJraWMnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwQzAwICYmIGNoYXIgPD0gMHgxMEM0RixcbiAgICAvLyAnT2xkIEh1bmdhcmlhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTBDODAgJiYgY2hhciA8PSAweDEwQ0ZGLFxuICAgIC8vICdIYW5pZmkgUm9oaW5neWEnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwRDAwICYmIGNoYXIgPD0gMHgxMEQzRixcbiAgICAvLyAnUnVtaSBOdW1lcmFsIFN5bWJvbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDEwRTYwICYmIGNoYXIgPD0gMHgxMEU3RixcbiAgICAvLyAnT2xkIFNvZ2RpYW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDEwRjAwICYmIGNoYXIgPD0gMHgxMEYyRixcbiAgICAvLyAnU29nZGlhbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTBGMzAgJiYgY2hhciA8PSAweDEwRjZGLFxuICAgIC8vICdFbHltYWljJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMEZFMCAmJiBjaGFyIDw9IDB4MTBGRkYsXG4gICAgLy8gJ0JyYWhtaSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTEwMDAgJiYgY2hhciA8PSAweDExMDdGLFxuICAgIC8vICdLYWl0aGknOiAoY2hhcikgPT4gY2hhciA+PSAweDExMDgwICYmIGNoYXIgPD0gMHgxMTBDRixcbiAgICAvLyAnU29yYSBTb21wZW5nJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTBEMCAmJiBjaGFyIDw9IDB4MTEwRkYsXG4gICAgLy8gJ0NoYWttYSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTExMDAgJiYgY2hhciA8PSAweDExMTRGLFxuICAgIC8vICdNYWhhamFuaSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTExNTAgJiYgY2hhciA8PSAweDExMTdGLFxuICAgIC8vICdTaGFyYWRhJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTE4MCAmJiBjaGFyIDw9IDB4MTExREYsXG4gICAgLy8gJ1NpbmhhbGEgQXJjaGFpYyBOdW1iZXJzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTFFMCAmJiBjaGFyIDw9IDB4MTExRkYsXG4gICAgLy8gJ0tob2praSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTEyMDAgJiYgY2hhciA8PSAweDExMjRGLFxuICAgIC8vICdNdWx0YW5pJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTI4MCAmJiBjaGFyIDw9IDB4MTEyQUYsXG4gICAgLy8gJ0todWRhd2FkaSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTEyQjAgJiYgY2hhciA8PSAweDExMkZGLFxuICAgIC8vICdHcmFudGhhJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTMwMCAmJiBjaGFyIDw9IDB4MTEzN0YsXG4gICAgLy8gJ05ld2EnOiAoY2hhcikgPT4gY2hhciA+PSAweDExNDAwICYmIGNoYXIgPD0gMHgxMTQ3RixcbiAgICAvLyAnVGlyaHV0YSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTE0ODAgJiYgY2hhciA8PSAweDExNERGLFxuICAgIC8vICdTaWRkaGFtJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMTU4MCAmJiBjaGFyIDw9IDB4MTE1RkYsXG4gICAgLy8gJ01vZGknOiAoY2hhcikgPT4gY2hhciA+PSAweDExNjAwICYmIGNoYXIgPD0gMHgxMTY1RixcbiAgICAvLyAnTW9uZ29saWFuIFN1cHBsZW1lbnQnOiAoY2hhcikgPT4gY2hhciA+PSAweDExNjYwICYmIGNoYXIgPD0gMHgxMTY3RixcbiAgICAvLyAnVGFrcmknOiAoY2hhcikgPT4gY2hhciA+PSAweDExNjgwICYmIGNoYXIgPD0gMHgxMTZDRixcbiAgICAvLyAnQWhvbSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTE3MDAgJiYgY2hhciA8PSAweDExNzNGLFxuICAgIC8vICdEb2dyYSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTE4MDAgJiYgY2hhciA8PSAweDExODRGLFxuICAgIC8vICdXYXJhbmcgQ2l0aSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTE4QTAgJiYgY2hhciA8PSAweDExOEZGLFxuICAgIC8vICdOYW5kaW5hZ2FyaSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTE5QTAgJiYgY2hhciA8PSAweDExOUZGLFxuICAgIC8vICdaYW5hYmF6YXIgU3F1YXJlJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMUEwMCAmJiBjaGFyIDw9IDB4MTFBNEYsXG4gICAgLy8gJ1NveW9tYm8nOiAoY2hhcikgPT4gY2hhciA+PSAweDExQTUwICYmIGNoYXIgPD0gMHgxMUFBRixcbiAgICAvLyAnUGF1IENpbiBIYXUnOiAoY2hhcikgPT4gY2hhciA+PSAweDExQUMwICYmIGNoYXIgPD0gMHgxMUFGRixcbiAgICAvLyAnQmhhaWtzdWtpJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMUMwMCAmJiBjaGFyIDw9IDB4MTFDNkYsXG4gICAgLy8gJ01hcmNoZW4nOiAoY2hhcikgPT4gY2hhciA+PSAweDExQzcwICYmIGNoYXIgPD0gMHgxMUNCRixcbiAgICAvLyAnTWFzYXJhbSBHb25kaSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTFEMDAgJiYgY2hhciA8PSAweDExRDVGLFxuICAgIC8vICdHdW5qYWxhIEdvbmRpJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMUQ2MCAmJiBjaGFyIDw9IDB4MTFEQUYsXG4gICAgLy8gJ01ha2FzYXInOiAoY2hhcikgPT4gY2hhciA+PSAweDExRUUwICYmIGNoYXIgPD0gMHgxMUVGRixcbiAgICAvLyAnVGFtaWwgU3VwcGxlbWVudCc6IChjaGFyKSA9PiBjaGFyID49IDB4MTFGQzAgJiYgY2hhciA8PSAweDExRkZGLFxuICAgIC8vICdDdW5laWZvcm0nOiAoY2hhcikgPT4gY2hhciA+PSAweDEyMDAwICYmIGNoYXIgPD0gMHgxMjNGRixcbiAgICAvLyAnQ3VuZWlmb3JtIE51bWJlcnMgYW5kIFB1bmN0dWF0aW9uJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxMjQwMCAmJiBjaGFyIDw9IDB4MTI0N0YsXG4gICAgLy8gJ0Vhcmx5IER5bmFzdGljIEN1bmVpZm9ybSc6IChjaGFyKSA9PiBjaGFyID49IDB4MTI0ODAgJiYgY2hhciA8PSAweDEyNTRGLFxuICAgIC8vICdFZ3lwdGlhbiBIaWVyb2dseXBocyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTMwMDAgJiYgY2hhciA8PSAweDEzNDJGLFxuICAgIC8vICdFZ3lwdGlhbiBIaWVyb2dseXBoIEZvcm1hdCBDb250cm9scyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTM0MzAgJiYgY2hhciA8PSAweDEzNDNGLFxuICAgIC8vICdBbmF0b2xpYW4gSGllcm9nbHlwaHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDE0NDAwICYmIGNoYXIgPD0gMHgxNDY3RixcbiAgICAvLyAnQmFtdW0gU3VwcGxlbWVudCc6IChjaGFyKSA9PiBjaGFyID49IDB4MTY4MDAgJiYgY2hhciA8PSAweDE2QTNGLFxuICAgIC8vICdNcm8nOiAoY2hhcikgPT4gY2hhciA+PSAweDE2QTQwICYmIGNoYXIgPD0gMHgxNkE2RixcbiAgICAvLyAnQmFzc2EgVmFoJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxNkFEMCAmJiBjaGFyIDw9IDB4MTZBRkYsXG4gICAgLy8gJ1BhaGF3aCBIbW9uZyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTZCMDAgJiYgY2hhciA8PSAweDE2QjhGLFxuICAgIC8vICdNZWRlZmFpZHJpbic6IChjaGFyKSA9PiBjaGFyID49IDB4MTZFNDAgJiYgY2hhciA8PSAweDE2RTlGLFxuICAgIC8vICdNaWFvJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxNkYwMCAmJiBjaGFyIDw9IDB4MTZGOUYsXG4gICAgLy8gJ0lkZW9ncmFwaGljIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxNkZFMCAmJiBjaGFyIDw9IDB4MTZGRkYsXG4gICAgLy8gJ1Rhbmd1dCc6IChjaGFyKSA9PiBjaGFyID49IDB4MTcwMDAgJiYgY2hhciA8PSAweDE4N0ZGLFxuICAgIC8vICdUYW5ndXQgQ29tcG9uZW50cyc6IChjaGFyKSA9PiBjaGFyID49IDB4MTg4MDAgJiYgY2hhciA8PSAweDE4QUZGLFxuICAgIC8vICdLYW5hIFN1cHBsZW1lbnQnOiAoY2hhcikgPT4gY2hhciA+PSAweDFCMDAwICYmIGNoYXIgPD0gMHgxQjBGRixcbiAgICAvLyAnS2FuYSBFeHRlbmRlZC1BJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxQjEwMCAmJiBjaGFyIDw9IDB4MUIxMkYsXG4gICAgLy8gJ1NtYWxsIEthbmEgRXh0ZW5zaW9uJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxQjEzMCAmJiBjaGFyIDw9IDB4MUIxNkYsXG4gICAgLy8gJ051c2h1JzogKGNoYXIpID0+IGNoYXIgPj0gMHgxQjE3MCAmJiBjaGFyIDw9IDB4MUIyRkYsXG4gICAgLy8gJ0R1cGxveWFuJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxQkMwMCAmJiBjaGFyIDw9IDB4MUJDOUYsXG4gICAgLy8gJ1Nob3J0aGFuZCBGb3JtYXQgQ29udHJvbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFCQ0EwICYmIGNoYXIgPD0gMHgxQkNBRixcbiAgICAvLyAnQnl6YW50aW5lIE11c2ljYWwgU3ltYm9scyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUQwMDAgJiYgY2hhciA8PSAweDFEMEZGLFxuICAgIC8vICdNdXNpY2FsIFN5bWJvbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFEMTAwICYmIGNoYXIgPD0gMHgxRDFGRixcbiAgICAvLyAnQW5jaWVudCBHcmVlayBNdXNpY2FsIE5vdGF0aW9uJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRDIwMCAmJiBjaGFyIDw9IDB4MUQyNEYsXG4gICAgLy8gJ01heWFuIE51bWVyYWxzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRDJFMCAmJiBjaGFyIDw9IDB4MUQyRkYsXG4gICAgLy8gJ1RhaSBYdWFuIEppbmcgU3ltYm9scyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUQzMDAgJiYgY2hhciA8PSAweDFEMzVGLFxuICAgIC8vICdDb3VudGluZyBSb2QgTnVtZXJhbHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFEMzYwICYmIGNoYXIgPD0gMHgxRDM3RixcbiAgICAvLyAnTWF0aGVtYXRpY2FsIEFscGhhbnVtZXJpYyBTeW1ib2xzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRDQwMCAmJiBjaGFyIDw9IDB4MUQ3RkYsXG4gICAgLy8gJ1N1dHRvbiBTaWduV3JpdGluZyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUQ4MDAgJiYgY2hhciA8PSAweDFEQUFGLFxuICAgIC8vICdHbGFnb2xpdGljIFN1cHBsZW1lbnQnOiAoY2hhcikgPT4gY2hhciA+PSAweDFFMDAwICYmIGNoYXIgPD0gMHgxRTAyRixcbiAgICAvLyAnTnlpYWtlbmcgUHVhY2h1ZSBIbW9uZyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUUxMDAgJiYgY2hhciA8PSAweDFFMTRGLFxuICAgIC8vICdXYW5jaG8nOiAoY2hhcikgPT4gY2hhciA+PSAweDFFMkMwICYmIGNoYXIgPD0gMHgxRTJGRixcbiAgICAvLyAnTWVuZGUgS2lrYWt1aSc6IChjaGFyKSA9PiBjaGFyID49IDB4MUU4MDAgJiYgY2hhciA8PSAweDFFOERGLFxuICAgIC8vICdBZGxhbSc6IChjaGFyKSA9PiBjaGFyID49IDB4MUU5MDAgJiYgY2hhciA8PSAweDFFOTVGLFxuICAgIC8vICdJbmRpYyBTaXlhcSBOdW1iZXJzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRUM3MCAmJiBjaGFyIDw9IDB4MUVDQkYsXG4gICAgLy8gJ090dG9tYW4gU2l5YXEgTnVtYmVycyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUVEMDAgJiYgY2hhciA8PSAweDFFRDRGLFxuICAgIC8vICdBcmFiaWMgTWF0aGVtYXRpY2FsIEFscGhhYmV0aWMgU3ltYm9scyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUVFMDAgJiYgY2hhciA8PSAweDFFRUZGLFxuICAgIC8vICdNYWhqb25nIFRpbGVzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRjAwMCAmJiBjaGFyIDw9IDB4MUYwMkYsXG4gICAgLy8gJ0RvbWlubyBUaWxlcyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUYwMzAgJiYgY2hhciA8PSAweDFGMDlGLFxuICAgIC8vICdQbGF5aW5nIENhcmRzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRjBBMCAmJiBjaGFyIDw9IDB4MUYwRkYsXG4gICAgLy8gJ0VuY2xvc2VkIEFscGhhbnVtZXJpYyBTdXBwbGVtZW50JzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRjEwMCAmJiBjaGFyIDw9IDB4MUYxRkYsXG4gICAgLy8gJ0VuY2xvc2VkIElkZW9ncmFwaGljIFN1cHBsZW1lbnQnOiAoY2hhcikgPT4gY2hhciA+PSAweDFGMjAwICYmIGNoYXIgPD0gMHgxRjJGRixcbiAgICAvLyAnTWlzY2VsbGFuZW91cyBTeW1ib2xzIGFuZCBQaWN0b2dyYXBocyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUYzMDAgJiYgY2hhciA8PSAweDFGNUZGLFxuICAgIC8vICdFbW90aWNvbnMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFGNjAwICYmIGNoYXIgPD0gMHgxRjY0RixcbiAgICAvLyAnT3JuYW1lbnRhbCBEaW5nYmF0cyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUY2NTAgJiYgY2hhciA8PSAweDFGNjdGLFxuICAgIC8vICdUcmFuc3BvcnQgYW5kIE1hcCBTeW1ib2xzJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRjY4MCAmJiBjaGFyIDw9IDB4MUY2RkYsXG4gICAgLy8gJ0FsY2hlbWljYWwgU3ltYm9scyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUY3MDAgJiYgY2hhciA8PSAweDFGNzdGLFxuICAgIC8vICdHZW9tZXRyaWMgU2hhcGVzIEV4dGVuZGVkJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRjc4MCAmJiBjaGFyIDw9IDB4MUY3RkYsXG4gICAgLy8gJ1N1cHBsZW1lbnRhbCBBcnJvd3MtQyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUY4MDAgJiYgY2hhciA8PSAweDFGOEZGLFxuICAgIC8vICdTdXBwbGVtZW50YWwgU3ltYm9scyBhbmQgUGljdG9ncmFwaHMnOiAoY2hhcikgPT4gY2hhciA+PSAweDFGOTAwICYmIGNoYXIgPD0gMHgxRjlGRixcbiAgICAvLyAnQ2hlc3MgU3ltYm9scyc6IChjaGFyKSA9PiBjaGFyID49IDB4MUZBMDAgJiYgY2hhciA8PSAweDFGQTZGLFxuICAgIC8vICdTeW1ib2xzIGFuZCBQaWN0b2dyYXBocyBFeHRlbmRlZC1BJzogKGNoYXIpID0+IGNoYXIgPj0gMHgxRkE3MCAmJiBjaGFyIDw9IDB4MUZBRkYsXG4gICAgLy8gJ0NKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEInOiAoY2hhcikgPT4gY2hhciA+PSAweDIwMDAwICYmIGNoYXIgPD0gMHgyQTZERixcbiAgICAvLyAnQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQyc6IChjaGFyKSA9PiBjaGFyID49IDB4MkE3MDAgJiYgY2hhciA8PSAweDJCNzNGLFxuICAgIC8vICdDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBEJzogKGNoYXIpID0+IGNoYXIgPj0gMHgyQjc0MCAmJiBjaGFyIDw9IDB4MkI4MUYsXG4gICAgLy8gJ0NKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEUnOiAoY2hhcikgPT4gY2hhciA+PSAweDJCODIwICYmIGNoYXIgPD0gMHgyQ0VBRixcbiAgICAvLyAnQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gRic6IChjaGFyKSA9PiBjaGFyID49IDB4MkNFQjAgJiYgY2hhciA8PSAweDJFQkVGLFxuICAgIC8vICdDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzIFN1cHBsZW1lbnQnOiAoY2hhcikgPT4gY2hhciA+PSAweDJGODAwICYmIGNoYXIgPD0gMHgyRkExRixcbiAgICAvLyAnVGFncyc6IChjaGFyKSA9PiBjaGFyID49IDB4RTAwMDAgJiYgY2hhciA8PSAweEUwMDdGLFxuICAgIC8vICdWYXJpYXRpb24gU2VsZWN0b3JzIFN1cHBsZW1lbnQnOiAoY2hhcikgPT4gY2hhciA+PSAweEUwMTAwICYmIGNoYXIgPD0gMHhFMDFFRixcbiAgICAvLyAnU3VwcGxlbWVudGFyeSBQcml2YXRlIFVzZSBBcmVhLUEnOiAoY2hhcikgPT4gY2hhciA+PSAweEYwMDAwICYmIGNoYXIgPD0gMHhGRkZGRixcbiAgICAvLyAnU3VwcGxlbWVudGFyeSBQcml2YXRlIFVzZSBBcmVhLUInOiAoY2hhcikgPT4gY2hhciA+PSAweDEwMDAwMCAmJiBjaGFyIDw9IDB4MTBGRkZGLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgdW5pY29kZUJsb2NrTG9va3VwO1xuIiwiLy8gQGZsb3dcblxuLyogZXNsaW50LWRpc2FibGUgbmV3LWNhcCAqL1xuXG5pbXBvcnQgaXNDaGFyIGZyb20gJy4vaXNfY2hhcl9pbl91bmljb2RlX2Jsb2NrJztcblxuZXhwb3J0IGZ1bmN0aW9uIGFsbG93c0lkZW9ncmFwaGljQnJlYWtpbmcoY2hhcnM6IHN0cmluZykge1xuICAgIGZvciAoY29uc3QgY2hhciBvZiBjaGFycykge1xuICAgICAgICBpZiAoIWNoYXJBbGxvd3NJZGVvZ3JhcGhpY0JyZWFraW5nKGNoYXIuY2hhckNvZGVBdCgwKSkpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGxvd3NWZXJ0aWNhbFdyaXRpbmdNb2RlKGNoYXJzOiBzdHJpbmcpIHtcbiAgICBmb3IgKGNvbnN0IGNoYXIgb2YgY2hhcnMpIHtcbiAgICAgICAgaWYgKGNoYXJIYXNVcHJpZ2h0VmVydGljYWxPcmllbnRhdGlvbihjaGFyLmNoYXJDb2RlQXQoMCkpKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWxsb3dzTGV0dGVyU3BhY2luZyhjaGFyczogc3RyaW5nKSB7XG4gICAgZm9yIChjb25zdCBjaGFyIG9mIGNoYXJzKSB7XG4gICAgICAgIGlmICghY2hhckFsbG93c0xldHRlclNwYWNpbmcoY2hhci5jaGFyQ29kZUF0KDApKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoYXJBbGxvd3NMZXR0ZXJTcGFjaW5nKGNoYXI6IG51bWJlcikge1xuICAgIGlmIChpc0NoYXJbJ0FyYWJpYyddKGNoYXIpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGlzQ2hhclsnQXJhYmljIFN1cHBsZW1lbnQnXShjaGFyKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChpc0NoYXJbJ0FyYWJpYyBFeHRlbmRlZC1BJ10oY2hhcikpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoaXNDaGFyWydBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUEnXShjaGFyKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChpc0NoYXJbJ0FyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQiddKGNoYXIpKSByZXR1cm4gZmFsc2U7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoYXJBbGxvd3NJZGVvZ3JhcGhpY0JyZWFraW5nKGNoYXI6IG51bWJlcikge1xuICAgIC8vIFJldHVybiBlYXJseSBmb3IgY2hhcmFjdGVycyBvdXRzaWRlIGFsbCBpZGVvZ3JhcGhpYyByYW5nZXMuXG4gICAgaWYgKGNoYXIgPCAweDJFODApIHJldHVybiBmYWxzZTtcblxuICAgIGlmIChpc0NoYXJbJ0JvcG9tb2ZvIEV4dGVuZGVkJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0JvcG9tb2ZvJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0NKSyBDb21wYXRpYmlsaXR5IEZvcm1zJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0NKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnQ0pLIENvbXBhdGliaWxpdHknXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnQ0pLIFJhZGljYWxzIFN1cHBsZW1lbnQnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnQ0pLIFN0cm9rZXMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0NKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEEnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQgTW9udGhzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0hhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0hpcmFnYW5hJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0lkZW9ncmFwaGljIERlc2NyaXB0aW9uIENoYXJhY3RlcnMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnS2FuZ3hpIFJhZGljYWxzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0thdGFrYW5hIFBob25ldGljIEV4dGVuc2lvbnMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnS2F0YWthbmEnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnVmVydGljYWwgRm9ybXMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnWWkgUmFkaWNhbHMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnWWkgU3lsbGFibGVzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBUaGUgZm9sbG93aW5nIGxvZ2ljIGNvbWVzIGZyb21cbi8vIDxodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy8xMi4wLjAvdWNkL1ZlcnRpY2FsT3JpZW50YXRpb24udHh0Pi5cbi8vIEtlZXAgaXQgc3luY2hyb25pemVkIHdpdGhcbi8vIDxodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy9VQ0QvbGF0ZXN0L3VjZC9WZXJ0aWNhbE9yaWVudGF0aW9uLnR4dD4uXG4vLyBUaGUgZGF0YSBmaWxlIGRlbm90ZXMgd2l0aCDDosKAwpxVw6LCgMKdIG9yIMOiwoDCnFR1w6LCgMKdIGFueSBjb2RlcG9pbnQgdGhhdCBtYXkgYmUgZHJhd25cbi8vIHVwcmlnaHQgaW4gdmVydGljYWwgdGV4dCBidXQgZG9lcyBub3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiB1cHJpZ2h0IGFuZFxuLy8gw6LCgMKcbmV1dHJhbMOiwoDCnSBjaGFyYWN0ZXJzLlxuXG4vLyBCbG9ja3MgaW4gdGhlIFVuaWNvZGUgc3VwcGxlbWVudGFyeSBwbGFuZXMgYXJlIGV4Y2x1ZGVkIGZyb20gdGhpcyBtb2R1bGUgZHVlXG4vLyB0byA8aHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wvaXNzdWVzLzI5Pi5cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIFVuaWNvZGUgY29kZXBvaW50IGlkZW50aWZpZXMgYSBjaGFyYWN0ZXIgd2l0aFxuICogdXByaWdodCBvcmllbnRhdGlvbi5cbiAqXG4gKiBBIGNoYXJhY3RlciBoYXMgdXByaWdodCBvcmllbnRhdGlvbiBpZiBpdCBpcyBkcmF3biB1cHJpZ2h0ICh1bnJvdGF0ZWQpXG4gKiB3aGV0aGVyIHRoZSBsaW5lIGlzIG9yaWVudGVkIGhvcml6b250YWxseSBvciB2ZXJ0aWNhbGx5LCBldmVuIGlmIGJvdGhcbiAqIGFkamFjZW50IGNoYXJhY3RlcnMgY2FuIGJlIHJvdGF0ZWQuIEZvciBleGFtcGxlLCBhIENoaW5lc2UgY2hhcmFjdGVyIGlzXG4gKiBhbHdheXMgZHJhd24gdXByaWdodC4gQW4gdXByaWdodGx5IG9yaWVudGVkIGNoYXJhY3RlciBjYXVzZXMgYW4gYWRqYWNlbnRcbiAqIMOiwoDCnG5ldXRyYWzDosKAwp0gY2hhcmFjdGVyIHRvIGJlIGRyYXduIHVwcmlnaHQgYXMgd2VsbC5cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFySGFzVXByaWdodFZlcnRpY2FsT3JpZW50YXRpb24oY2hhcjogbnVtYmVyKSB7XG4gICAgaWYgKGNoYXIgPT09IDB4MDJFQSAvKiBtb2RpZmllciBsZXR0ZXIgeWluIGRlcGFydGluZyB0b25lIG1hcmsgKi8gfHxcbiAgICAgICAgY2hhciA9PT0gMHgwMkVCIC8qIG1vZGlmaWVyIGxldHRlciB5YW5nIGRlcGFydGluZyB0b25lIG1hcmsgKi8pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGVhcmx5IGZvciBjaGFyYWN0ZXJzIG91dHNpZGUgYWxsIHJhbmdlcyB3aG9zZSBjaGFyYWN0ZXJzIHJlbWFpblxuICAgIC8vIHVwcmlnaHQgaW4gdmVydGljYWwgd3JpdGluZyBtb2RlLlxuICAgIGlmIChjaGFyIDwgMHgxMTAwKSByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAoaXNDaGFyWydCb3BvbW9mbyBFeHRlbmRlZCddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydCb3BvbW9mbyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydDSksgQ29tcGF0aWJpbGl0eSBGb3JtcyddKGNoYXIpKSB7XG4gICAgICAgIGlmICghKChjaGFyID49IDB4RkU0OSAvKiBkYXNoZWQgb3ZlcmxpbmUgKi8gJiYgY2hhciA8PSAweEZFNEYpIC8qIHdhdnkgbG93IGxpbmUgKi8pKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNDaGFyWydDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0NKSyBDb21wYXRpYmlsaXR5J10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0NKSyBSYWRpY2FscyBTdXBwbGVtZW50J10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0NKSyBTdHJva2VzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0NKSyBTeW1ib2xzIGFuZCBQdW5jdHVhdGlvbiddKGNoYXIpKSB7XG4gICAgICAgIGlmICghKChjaGFyID49IDB4MzAwOCAvKiBsZWZ0IGFuZ2xlIGJyYWNrZXQgKi8gJiYgY2hhciA8PSAweDMwMTEpIC8qIHJpZ2h0IGJsYWNrIGxlbnRpY3VsYXIgYnJhY2tldCAqLykgJiZcbiAgICAgICAgICAgICEoKGNoYXIgPj0gMHgzMDE0IC8qIGxlZnQgdG9ydG9pc2Ugc2hlbGwgYnJhY2tldCAqLyAmJiBjaGFyIDw9IDB4MzAxRikgLyogbG93IGRvdWJsZSBwcmltZSBxdW90YXRpb24gbWFyayAqLykgJiZcbiAgICAgICAgICAgIGNoYXIgIT09IDB4MzAzMCAvKiB3YXZ5IGRhc2ggKi8pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc0NoYXJbJ0NKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEEnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQgTW9udGhzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0hhbmd1bCBDb21wYXRpYmlsaXR5IEphbW8nXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQSddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydIYW5ndWwgSmFtbyBFeHRlbmRlZC1CJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0hhbmd1bCBKYW1vJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0hhbmd1bCBTeWxsYWJsZXMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnSGlyYWdhbmEnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnSWRlb2dyYXBoaWMgRGVzY3JpcHRpb24gQ2hhcmFjdGVycyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydLYW5idW4nXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnS2FuZ3hpIFJhZGljYWxzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0thdGFrYW5hIFBob25ldGljIEV4dGVuc2lvbnMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnS2F0YWthbmEnXShjaGFyKSkge1xuICAgICAgICBpZiAoY2hhciAhPT0gMHgzMEZDIC8qIGthdGFrYW5hLWhpcmFnYW5hIHByb2xvbmdlZCBzb3VuZCBtYXJrICovKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNDaGFyWydIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3JtcyddKGNoYXIpKSB7XG4gICAgICAgIGlmIChjaGFyICE9PSAweEZGMDggLyogZnVsbHdpZHRoIGxlZnQgcGFyZW50aGVzaXMgKi8gJiZcbiAgICAgICAgICAgIGNoYXIgIT09IDB4RkYwOSAvKiBmdWxsd2lkdGggcmlnaHQgcGFyZW50aGVzaXMgKi8gJiZcbiAgICAgICAgICAgIGNoYXIgIT09IDB4RkYwRCAvKiBmdWxsd2lkdGggaHlwaGVuLW1pbnVzICovICYmXG4gICAgICAgICAgICAhKChjaGFyID49IDB4RkYxQSAvKiBmdWxsd2lkdGggY29sb24gKi8gJiYgY2hhciA8PSAweEZGMUUpIC8qIGZ1bGx3aWR0aCBncmVhdGVyLXRoYW4gc2lnbiAqLykgJiZcbiAgICAgICAgICAgIGNoYXIgIT09IDB4RkYzQiAvKiBmdWxsd2lkdGggbGVmdCBzcXVhcmUgYnJhY2tldCAqLyAmJlxuICAgICAgICAgICAgY2hhciAhPT0gMHhGRjNEIC8qIGZ1bGx3aWR0aCByaWdodCBzcXVhcmUgYnJhY2tldCAqLyAmJlxuICAgICAgICAgICAgY2hhciAhPT0gMHhGRjNGIC8qIGZ1bGx3aWR0aCBsb3cgbGluZSAqLyAmJlxuICAgICAgICAgICAgIShjaGFyID49IDB4RkY1QiAvKiBmdWxsd2lkdGggbGVmdCBjdXJseSBicmFja2V0ICovICYmIGNoYXIgPD0gMHhGRkRGKSAmJlxuICAgICAgICAgICAgY2hhciAhPT0gMHhGRkUzIC8qIGZ1bGx3aWR0aCBtYWNyb24gKi8gJiZcbiAgICAgICAgICAgICEoY2hhciA+PSAweEZGRTggLyogaGFsZndpZHRoIGZvcm1zIGxpZ2h0IHZlcnRpY2FsICovICYmIGNoYXIgPD0gMHhGRkVGKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzQ2hhclsnU21hbGwgRm9ybSBWYXJpYW50cyddKGNoYXIpKSB7XG4gICAgICAgIGlmICghKChjaGFyID49IDB4RkU1OCAvKiBzbWFsbCBlbSBkYXNoICovICYmIGNoYXIgPD0gMHhGRTVFKSAvKiBzbWFsbCByaWdodCB0b3J0b2lzZSBzaGVsbCBicmFja2V0ICovKSAmJlxuICAgICAgICAgICAgISgoY2hhciA+PSAweEZFNjMgLyogc21hbGwgaHlwaGVuLW1pbnVzICovICYmIGNoYXIgPD0gMHhGRTY2KSAvKiBzbWFsbCBlcXVhbHMgc2lnbiAqLykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc0NoYXJbJ1VuaWZpZWQgQ2FuYWRpYW4gQWJvcmlnaW5hbCBTeWxsYWJpY3MnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnVW5pZmllZCBDYW5hZGlhbiBBYm9yaWdpbmFsIFN5bGxhYmljcyBFeHRlbmRlZCddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydWZXJ0aWNhbCBGb3JtcyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydZaWppbmcgSGV4YWdyYW0gU3ltYm9scyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydZaSBTeWxsYWJsZXMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnWWkgUmFkaWNhbHMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBVbmljb2RlIGNvZGVwb2ludCBpZGVudGlmaWVzIGEgY2hhcmFjdGVyIHdpdGhcbiAqIG5ldXRyYWwgb3JpZW50YXRpb24uXG4gKlxuICogQSBjaGFyYWN0ZXIgaGFzIG5ldXRyYWwgb3JpZW50YXRpb24gaWYgaXQgbWF5IGJlIGRyYXduIHJvdGF0ZWQgb3IgdW5yb3RhdGVkXG4gKiB3aGVuIHRoZSBsaW5lIGlzIG9yaWVudGVkIHZlcnRpY2FsbHksIGRlcGVuZGluZyBvbiB0aGUgb3JpZW50YXRpb24gb2YgdGhlXG4gKiBhZGphY2VudCBjaGFyYWN0ZXJzLiBGb3IgZXhhbXBsZSwgYWxvbmcgYSB2ZXJ0aWNsbHkgb3JpZW50ZWQgbGluZSwgdGhlIHZ1bGdhclxuICogZnJhY3Rpb24gw4LCvSBpcyBkcmF3biB1cHJpZ2h0IGFtb25nIENoaW5lc2UgY2hhcmFjdGVycyBidXQgcm90YXRlZCBhbW9uZyBMYXRpblxuICogbGV0dGVycy4gQSBuZXV0cmFsbHkgb3JpZW50ZWQgY2hhcmFjdGVyIGRvZXMgbm90IGluZmx1ZW5jZSB3aGV0aGVyIGFuXG4gKiBhZGphY2VudCBjaGFyYWN0ZXIgaXMgZHJhd24gdXByaWdodCBvciByb3RhdGVkLlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYXJIYXNOZXV0cmFsVmVydGljYWxPcmllbnRhdGlvbihjaGFyOiBudW1iZXIpIHtcbiAgICBpZiAoaXNDaGFyWydMYXRpbi0xIFN1cHBsZW1lbnQnXShjaGFyKSkge1xuICAgICAgICBpZiAoY2hhciA9PT0gMHgwMEE3IC8qIHNlY3Rpb24gc2lnbiAqLyB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgwMEE5IC8qIGNvcHlyaWdodCBzaWduICovIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDAwQUUgLyogcmVnaXN0ZXJlZCBzaWduICovIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDAwQjEgLyogcGx1cy1taW51cyBzaWduICovIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDAwQkMgLyogdnVsZ2FyIGZyYWN0aW9uIG9uZSBxdWFydGVyICovIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDAwQkQgLyogdnVsZ2FyIGZyYWN0aW9uIG9uZSBoYWxmICovIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDAwQkUgLyogdnVsZ2FyIGZyYWN0aW9uIHRocmVlIHF1YXJ0ZXJzICovIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDAwRDcgLyogbXVsdGlwbGljYXRpb24gc2lnbiAqLyB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgwMEY3IC8qIGRpdmlzaW9uIHNpZ24gKi8pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc0NoYXJbJ0dlbmVyYWwgUHVuY3R1YXRpb24nXShjaGFyKSkge1xuICAgICAgICBpZiAoY2hhciA9PT0gMHgyMDE2IC8qIGRvdWJsZSB2ZXJ0aWNhbCBsaW5lICovIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDIwMjAgLyogZGFnZ2VyICovIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDIwMjEgLyogZG91YmxlIGRhZ2dlciAqLyB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgyMDMwIC8qIHBlciBtaWxsZSBzaWduICovIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDIwMzEgLyogcGVyIHRlbiB0aG91c2FuZCBzaWduICovIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDIwM0IgLyogcmVmZXJlbmNlIG1hcmsgKi8gfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MjAzQyAvKiBkb3VibGUgZXhjbGFtYXRpb24gbWFyayAqLyB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgyMDQyIC8qIGFzdGVyaXNtICovIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDIwNDcgLyogZG91YmxlIHF1ZXN0aW9uIG1hcmsgKi8gfHxcbiAgICAgICAgICAgIGNoYXIgPT09IDB4MjA0OCAvKiBxdWVzdGlvbiBleGNsYW1hdGlvbiBtYXJrICovIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDIwNDkgLyogZXhjbGFtYXRpb24gcXVlc3Rpb24gbWFyayAqLyB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgyMDUxIC8qIHR3byBhc3Rlcmlza3MgYWxpZ25lZCB2ZXJ0aWNhbGx5ICovKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNDaGFyWydMZXR0ZXJsaWtlIFN5bWJvbHMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnTnVtYmVyIEZvcm1zJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ01pc2NlbGxhbmVvdXMgVGVjaG5pY2FsJ10oY2hhcikpIHtcbiAgICAgICAgaWYgKChjaGFyID49IDB4MjMwMCAvKiBkaWFtZXRlciBzaWduICovICYmIGNoYXIgPD0gMHgyMzA3IC8qIHdhdnkgbGluZSAqLykgfHxcbiAgICAgICAgICAgIChjaGFyID49IDB4MjMwQyAvKiBib3R0b20gcmlnaHQgY3JvcCAqLyAmJiBjaGFyIDw9IDB4MjMxRiAvKiBib3R0b20gcmlnaHQgY29ybmVyICovKSB8fFxuICAgICAgICAgICAgKGNoYXIgPj0gMHgyMzI0IC8qIHVwIGFycm93aGVhZCBiZXR3ZWVuIHR3byBob3Jpem9udGFsIGJhcnMgKi8gJiYgY2hhciA8PSAweDIzMjggLyoga2V5Ym9hcmQgKi8pIHx8XG4gICAgICAgICAgICBjaGFyID09PSAweDIzMkIgLyogZXJhc2UgdG8gdGhlIGxlZnQgKi8gfHxcbiAgICAgICAgICAgIChjaGFyID49IDB4MjM3RCAvKiBzaG91bGRlcmVkIG9wZW4gYm94ICovICYmIGNoYXIgPD0gMHgyMzlBIC8qIGNsZWFyIHNjcmVlbiBzeW1ib2wgKi8pIHx8XG4gICAgICAgICAgICAoY2hhciA+PSAweDIzQkUgLyogZGVudGlzdHJ5IHN5bWJvbCBsaWdodCB2ZXJ0aWNhbCBhbmQgdG9wIHJpZ2h0ICovICYmIGNoYXIgPD0gMHgyM0NEIC8qIHNxdWFyZSBmb290ICovKSB8fFxuICAgICAgICAgICAgY2hhciA9PT0gMHgyM0NGIC8qIGVqZWN0IHN5bWJvbCAqLyB8fFxuICAgICAgICAgICAgKGNoYXIgPj0gMHgyM0QxIC8qIG1ldHJpY2FsIGJyZXZlICovICYmIGNoYXIgPD0gMHgyM0RCIC8qIGZ1c2UgKi8pIHx8XG4gICAgICAgICAgICAoY2hhciA+PSAweDIzRTIgLyogd2hpdGUgdHJhcGV6aXVtICovICYmIGNoYXIgPD0gMHgyM0ZGKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzQ2hhclsnQ29udHJvbCBQaWN0dXJlcyddKGNoYXIpICYmIGNoYXIgIT09IDB4MjQyMyAvKiBvcGVuIGJveCAqLykgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnT3B0aWNhbCBDaGFyYWN0ZXIgUmVjb2duaXRpb24nXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnRW5jbG9zZWQgQWxwaGFudW1lcmljcyddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydHZW9tZXRyaWMgU2hhcGVzJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ01pc2NlbGxhbmVvdXMgU3ltYm9scyddKGNoYXIpKSB7XG4gICAgICAgIGlmICghKChjaGFyID49IDB4MjYxQSAvKiBibGFjayBsZWZ0IHBvaW50aW5nIGluZGV4ICovICYmIGNoYXIgPD0gMHgyNjFGKSAvKiB3aGl0ZSBkb3duIHBvaW50aW5nIGluZGV4ICovKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzQ2hhclsnTWlzY2VsbGFuZW91cyBTeW1ib2xzIGFuZCBBcnJvd3MnXShjaGFyKSkge1xuICAgICAgICBpZiAoKGNoYXIgPj0gMHgyQjEyIC8qIHNxdWFyZSB3aXRoIHRvcCBoYWxmIGJsYWNrICovICYmIGNoYXIgPD0gMHgyQjJGIC8qIHdoaXRlIHZlcnRpY2FsIGVsbGlwc2UgKi8pIHx8XG4gICAgICAgICAgICAoY2hhciA+PSAweDJCNTAgLyogd2hpdGUgbWVkaXVtIHN0YXIgKi8gJiYgY2hhciA8PSAweDJCNTkgLyogaGVhdnkgY2lyY2xlZCBzYWx0aXJlICovKSB8fFxuICAgICAgICAgICAgKGNoYXIgPj0gMHgyQkI4IC8qIHVwd2FyZHMgd2hpdGUgYXJyb3cgZnJvbSBiYXIgd2l0aCBob3Jpem9udGFsIGJhciAqLyAmJiBjaGFyIDw9IDB4MkJFQikpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc0NoYXJbJ0NKSyBTeW1ib2xzIGFuZCBQdW5jdHVhdGlvbiddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydLYXRha2FuYSddKGNoYXIpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaXNDaGFyWydQcml2YXRlIFVzZSBBcmVhJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ0NKSyBDb21wYXRpYmlsaXR5IEZvcm1zJ10oY2hhcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChpc0NoYXJbJ1NtYWxsIEZvcm0gVmFyaWFudHMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGlzQ2hhclsnSGFsZndpZHRoIGFuZCBGdWxsd2lkdGggRm9ybXMnXShjaGFyKSkgcmV0dXJuIHRydWU7XG5cbiAgICBpZiAoY2hhciA9PT0gMHgyMjFFIC8qIGluZmluaXR5ICovIHx8XG4gICAgICAgIGNoYXIgPT09IDB4MjIzNCAvKiB0aGVyZWZvcmUgKi8gfHxcbiAgICAgICAgY2hhciA9PT0gMHgyMjM1IC8qIGJlY2F1c2UgKi8gfHxcbiAgICAgICAgKGNoYXIgPj0gMHgyNzAwIC8qIGJsYWNrIHNhZmV0eSBzY2lzc29ycyAqLyAmJiBjaGFyIDw9IDB4Mjc2NyAvKiByb3RhdGVkIGZsb3JhbCBoZWFydCBidWxsZXQgKi8pIHx8XG4gICAgICAgIChjaGFyID49IDB4Mjc3NiAvKiBkaW5nYmF0IG5lZ2F0aXZlIGNpcmNsZWQgZGlnaXQgb25lICovICYmIGNoYXIgPD0gMHgyNzkzIC8qIGRpbmdiYXQgbmVnYXRpdmUgY2lyY2xlZCBzYW5zLXNlcmlmIG51bWJlciB0ZW4gKi8pIHx8XG4gICAgICAgIGNoYXIgPT09IDB4RkZGQyAvKiBvYmplY3QgcmVwbGFjZW1lbnQgY2hhcmFjdGVyICovIHx8XG4gICAgICAgIGNoYXIgPT09IDB4RkZGRCAvKiByZXBsYWNlbWVudCBjaGFyYWN0ZXIgKi8pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gVW5pY29kZSBjb2RlcG9pbnQgaWRlbnRpZmllcyBhIGNoYXJhY3RlciB3aXRoXG4gKiByb3RhdGVkIG9yaWVudGF0aW9uLlxuICpcbiAqIEEgY2hhcmFjdGVyIGhhcyByb3RhdGVkIG9yaWVudGF0aW9uIGlmIGl0IGlzIGRyYXduIHJvdGF0ZWQgd2hlbiB0aGUgbGluZSBpc1xuICogb3JpZW50ZWQgdmVydGljYWxseSwgZXZlbiBpZiBib3RoIGFkamFjZW50IGNoYXJhY3RlcnMgYXJlIHVwcmlnaHQuIEZvclxuICogZXhhbXBsZSwgYSBMYXRpbiBsZXR0ZXIgaXMgZHJhd24gcm90YXRlZCBhbG9uZyBhIHZlcnRpY2FsIGxpbmUuIEEgcm90YXRlZFxuICogY2hhcmFjdGVyIGNhdXNlcyBhbiBhZGphY2VudCDDosKAwpxuZXV0cmFsw6LCgMKdIGNoYXJhY3RlciB0byBiZSBkcmF3biByb3RhdGVkIGFzIHdlbGwuXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhckhhc1JvdGF0ZWRWZXJ0aWNhbE9yaWVudGF0aW9uKGNoYXI6IG51bWJlcikge1xuICAgIHJldHVybiAhKGNoYXJIYXNVcHJpZ2h0VmVydGljYWxPcmllbnRhdGlvbihjaGFyKSB8fFxuICAgICAgICAgICAgIGNoYXJIYXNOZXV0cmFsVmVydGljYWxPcmllbnRhdGlvbihjaGFyKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGFySW5Db21wbGV4U2hhcGluZ1NjcmlwdChjaGFyOiBudW1iZXIpIHtcbiAgICByZXR1cm4gaXNDaGFyWydBcmFiaWMnXShjaGFyKSB8fFxuICAgICAgICAgICBpc0NoYXJbJ0FyYWJpYyBTdXBwbGVtZW50J10oY2hhcikgfHxcbiAgICAgICAgICAgaXNDaGFyWydBcmFiaWMgRXh0ZW5kZWQtQSddKGNoYXIpIHx8XG4gICAgICAgICAgIGlzQ2hhclsnQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1BJ10oY2hhcikgfHxcbiAgICAgICAgICAgaXNDaGFyWydBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUInXShjaGFyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoYXJJblJUTFNjcmlwdChjaGFyOiBudW1iZXIpIHtcbiAgICAvLyBNYWluIGJsb2NrcyBmb3IgSGVicmV3LCBBcmFiaWMsIFRoYWFuYSBhbmQgb3RoZXIgUlRMIHNjcmlwdHNcbiAgICByZXR1cm4gKGNoYXIgPj0gMHgwNTkwICYmIGNoYXIgPD0gMHgwOEZGKSB8fFxuICAgICAgICBpc0NoYXJbJ0FyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQSddKGNoYXIpIHx8XG4gICAgICAgIGlzQ2hhclsnQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1CJ10oY2hhcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGFySW5TdXBwb3J0ZWRTY3JpcHQoY2hhcjogbnVtYmVyLCBjYW5SZW5kZXJSVEw6IGJvb2xlYW4pIHtcbiAgICAvLyBUaGlzIGlzIGEgcm91Z2ggaGV1cmlzdGljOiB3aGV0aGVyIHdlIFwiY2FuIHJlbmRlclwiIGEgc2NyaXB0XG4gICAgLy8gYWN0dWFsbHkgZGVwZW5kcyBvbiB0aGUgcHJvcGVydGllcyBvZiB0aGUgZm9udCBiZWluZyB1c2VkXG4gICAgLy8gYW5kIHdoZXRoZXIgZGlmZmVyZW5jZXMgZnJvbSB0aGUgaWRlYWwgcmVuZGVyaW5nIGFyZSBjb25zaWRlcmVkXG4gICAgLy8gc2VtYW50aWNhbGx5IHNpZ25pZmljYW50LlxuXG4gICAgLy8gRXZlbiBpbiBMYXRpbiBzY3JpcHQsIHdlIFwiY2FuJ3QgcmVuZGVyXCIgY29tYmluYXRpb25zIHN1Y2ggYXMgdGhlIGZpXG4gICAgLy8gbGlnYXR1cmUsIGJ1dCB3ZSBkb24ndCBjb25zaWRlciB0aGF0IHNlbWFudGljYWxseSBzaWduaWZpY2FudC5cbiAgICBpZiAoIWNhblJlbmRlclJUTCAmJiBjaGFySW5SVExTY3JpcHQoY2hhcikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoKGNoYXIgPj0gMHgwOTAwICYmIGNoYXIgPD0gMHgwREZGKSB8fFxuICAgICAgICAvLyBNYWluIGJsb2NrcyBmb3IgSW5kaWMgc2NyaXB0cyBhbmQgU2luaGFsYVxuICAgICAgICAoY2hhciA+PSAweDBGMDAgJiYgY2hhciA8PSAweDEwOUYpIHx8XG4gICAgICAgIC8vIE1haW4gYmxvY2tzIGZvciBUaWJldGFuIGFuZCBNeWFubWFyXG4gICAgICAgIGlzQ2hhclsnS2htZXInXShjaGFyKSkge1xuICAgICAgICAvLyBUaGVzZSBibG9ja3MgY292ZXIgY29tbW9uIHNjcmlwdHMgdGhhdCByZXF1aXJlXG4gICAgICAgIC8vIGNvbXBsZXggdGV4dCBzaGFwaW5nLCBiYXNlZCBvbiB1bmljb2RlIHNjcmlwdCBtZXRhZGF0YTpcbiAgICAgICAgLy8gaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcy9jbGRyL3RydW5rL2NvbW1vbi9wcm9wZXJ0aWVzL3NjcmlwdE1ldGFkYXRhLnR4dFxuICAgICAgICAvLyB3aGVyZSBcIldlYiBSYW5rIDw9IDMyXCIgXCJTaGFwaW5nIFJlcXVpcmVkID0gWUVTXCJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ0NvbnRhaW5zUlRMVGV4dChjaGFyczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgZm9yIChjb25zdCBjaGFyIG9mIGNoYXJzKSB7XG4gICAgICAgIGlmIChjaGFySW5SVExTY3JpcHQoY2hhci5jaGFyQ29kZUF0KDApKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTdHJpbmdJblN1cHBvcnRlZFNjcmlwdChjaGFyczogc3RyaW5nLCBjYW5SZW5kZXJSVEw6IGJvb2xlYW4pIHtcbiAgICBmb3IgKGNvbnN0IGNoYXIgb2YgY2hhcnMpIHtcbiAgICAgICAgaWYgKCFjaGFySW5TdXBwb3J0ZWRTY3JpcHQoY2hhci5jaGFyQ29kZUF0KDApLCBjYW5SZW5kZXJSVEwpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge0V2ZW50LCBFdmVudGVkfSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IHtnZXRBcnJheUJ1ZmZlcn0gZnJvbSAnLi4vdXRpbC9hamF4JztcbmltcG9ydCBicm93c2VyIGZyb20gJy4uL3V0aWwvYnJvd3Nlcic7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQge2lzV29ya2VyfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuXG5jb25zdCBzdGF0dXMgPSB7XG4gICAgdW5hdmFpbGFibGU6ICd1bmF2YWlsYWJsZScsIC8vIE5vdCBsb2FkZWRcbiAgICBkZWZlcnJlZDogJ2RlZmVycmVkJywgLy8gVGhlIHBsdWdpbiBVUkwgaGFzIGJlZW4gc3BlY2lmaWVkLCBidXQgbG9hZGluZyBoYXMgYmVlbiBkZWZlcnJlZFxuICAgIGxvYWRpbmc6ICdsb2FkaW5nJywgLy8gcmVxdWVzdCBpbi1mbGlnaHRcbiAgICBsb2FkZWQ6ICdsb2FkZWQnLFxuICAgIGVycm9yOiAnZXJyb3InXG59O1xuXG5leHBvcnQgdHlwZSBQbHVnaW5TdGF0ZSA9IHtcbiAgICBwbHVnaW5TdGF0dXM6ICRWYWx1ZXM8dHlwZW9mIHN0YXR1cz47XG4gICAgcGx1Z2luVVJMOiA/c3RyaW5nXG59O1xuXG50eXBlIEVycm9yQ2FsbGJhY2sgPSAoZXJyb3I6ID9FcnJvcikgPT4gdm9pZDtcbnR5cGUgUGx1Z2luU3RhdGVTeW5jQ2FsbGJhY2sgPSAoc3RhdGU6IFBsdWdpblN0YXRlKSA9PiB2b2lkO1xubGV0IF9jb21wbGV0aW9uQ2FsbGJhY2sgPSBudWxsO1xuXG4vL1ZhcmlhYmxlcyBkZWZpbmluZyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgcGx1Z2luXG5sZXQgcGx1Z2luU3RhdHVzID0gc3RhdHVzLnVuYXZhaWxhYmxlO1xubGV0IHBsdWdpblVSTCA9IG51bGw7XG5cbmV4cG9ydCBjb25zdCB0cmlnZ2VyUGx1Z2luQ29tcGxldGlvbkV2ZW50ID0gZnVuY3Rpb24oZXJyb3I6ID9FcnJvcikge1xuICAgIC8vIE5ldHdvcmtFcnJvcidzIGFyZSBub3QgY29ycmVjdGx5IHJlZmxlY3RlZCBieSB0aGUgcGx1Z2luIHN0YXR1cyB3aGljaCBwcmV2ZW50cyByZWxvYWRpbmcgcGx1Z2luXG4gICAgaWYgKGVycm9yICYmIHR5cGVvZiBlcnJvciA9PT0gJ3N0cmluZycgJiYgZXJyb3IuaW5kZXhPZignTmV0d29ya0Vycm9yJykgPiAtMSkge1xuICAgICAgICBwbHVnaW5TdGF0dXMgPSBzdGF0dXMuZXJyb3I7XG4gICAgfVxuXG4gICAgaWYgKF9jb21wbGV0aW9uQ2FsbGJhY2spIHtcbiAgICAgICAgX2NvbXBsZXRpb25DYWxsYmFjayhlcnJvcik7XG4gICAgfVxufTtcblxuZnVuY3Rpb24gc2VuZFBsdWdpblN0YXRlVG9Xb3JrZXIoKSB7XG4gICAgZXZlbnRlZC5maXJlKG5ldyBFdmVudCgncGx1Z2luU3RhdGVDaGFuZ2UnLCB7cGx1Z2luU3RhdHVzLCBwbHVnaW5VUkx9KSk7XG59XG5cbmV4cG9ydCBjb25zdCBldmVudGVkID0gbmV3IEV2ZW50ZWQoKTtcblxuZXhwb3J0IGNvbnN0IGdldFJUTFRleHRQbHVnaW5TdGF0dXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHBsdWdpblN0YXR1cztcbn07XG5cbmV4cG9ydCBjb25zdCByZWdpc3RlckZvclBsdWdpblN0YXRlQ2hhbmdlID0gZnVuY3Rpb24oY2FsbGJhY2s6IFBsdWdpblN0YXRlU3luY0NhbGxiYWNrKSB7XG4gICAgLy8gRG8gYW4gaW5pdGlhbCBzeW5jIG9mIHRoZSBzdGF0ZVxuICAgIGNhbGxiYWNrKHtwbHVnaW5TdGF0dXMsIHBsdWdpblVSTH0pO1xuICAgIC8vIExpc3RlbiBmb3IgYWxsIGZ1dHVyZSBzdGF0ZSBjaGFuZ2VzXG4gICAgZXZlbnRlZC5vbigncGx1Z2luU3RhdGVDaGFuZ2UnLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIGNhbGxiYWNrO1xufTtcblxuZXhwb3J0IGNvbnN0IGNsZWFyUlRMVGV4dFBsdWdpbiA9IGZ1bmN0aW9uKCkge1xuICAgIHBsdWdpblN0YXR1cyA9IHN0YXR1cy51bmF2YWlsYWJsZTtcbiAgICBwbHVnaW5VUkwgPSBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IHNldFJUTFRleHRQbHVnaW4gPSBmdW5jdGlvbih1cmw6IHN0cmluZywgY2FsbGJhY2s6ID9FcnJvckNhbGxiYWNrLCBkZWZlcnJlZDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKHBsdWdpblN0YXR1cyA9PT0gc3RhdHVzLmRlZmVycmVkIHx8IHBsdWdpblN0YXR1cyA9PT0gc3RhdHVzLmxvYWRpbmcgfHwgcGx1Z2luU3RhdHVzID09PSBzdGF0dXMubG9hZGVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignc2V0UlRMVGV4dFBsdWdpbiBjYW5ub3QgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzLicpO1xuICAgIH1cbiAgICBwbHVnaW5VUkwgPSBicm93c2VyLnJlc29sdmVVUkwodXJsKTtcbiAgICBwbHVnaW5TdGF0dXMgPSBzdGF0dXMuZGVmZXJyZWQ7XG4gICAgX2NvbXBsZXRpb25DYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIHNlbmRQbHVnaW5TdGF0ZVRvV29ya2VyKCk7XG5cbiAgICAvL1N0YXJ0IGRvd25sb2FkaW5nIHRoZSBwbHVnaW4gaW1tZWRpYXRlbHkgaWYgbm90IGludGVuZGluZyB0byBsYXp5LWxvYWRcbiAgICBpZiAoIWRlZmVycmVkKSB7XG4gICAgICAgIGRvd25sb2FkUlRMVGV4dFBsdWdpbigpO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBkb3dubG9hZFJUTFRleHRQbHVnaW4gPSBmdW5jdGlvbigpIHtcbiAgICBpZiAocGx1Z2luU3RhdHVzICE9PSBzdGF0dXMuZGVmZXJyZWQgfHwgIXBsdWdpblVSTCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3J0bC10ZXh0LXBsdWdpbiBjYW5ub3QgYmUgZG93bmxvYWRlZCB1bmxlc3MgYSBwbHVnaW5VUkwgaXMgc3BlY2lmaWVkJyk7XG4gICAgfVxuICAgIHBsdWdpblN0YXR1cyA9IHN0YXR1cy5sb2FkaW5nO1xuICAgIHNlbmRQbHVnaW5TdGF0ZVRvV29ya2VyKCk7XG4gICAgaWYgKHBsdWdpblVSTCkge1xuICAgICAgICBnZXRBcnJheUJ1ZmZlcih7dXJsOiBwbHVnaW5VUkx9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHRyaWdnZXJQbHVnaW5Db21wbGV0aW9uRXZlbnQoZXJyb3IpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwbHVnaW5TdGF0dXMgPSBzdGF0dXMubG9hZGVkO1xuICAgICAgICAgICAgICAgIHNlbmRQbHVnaW5TdGF0ZVRvV29ya2VyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBwbHVnaW46IHtcbiAgICBhcHBseUFyYWJpY1NoYXBpbmc6ID9GdW5jdGlvbixcbiAgICBwcm9jZXNzQmlkaXJlY3Rpb25hbFRleHQ6ID8oc3RyaW5nLCBBcnJheTxudW1iZXI+KSA9PiBBcnJheTxzdHJpbmc+LFxuICAgIHByb2Nlc3NTdHlsZWRCaWRpcmVjdGlvbmFsVGV4dDogPyhzdHJpbmcsIEFycmF5PG51bWJlcj4sIEFycmF5PG51bWJlcj4pID0+IEFycmF5PFtzdHJpbmcsIEFycmF5PG51bWJlcj5dPixcbiAgICBpc0xvYWRlZDogKCkgPT4gYm9vbGVhbixcbiAgICBpc0xvYWRpbmc6ICgpID0+IGJvb2xlYW4sXG4gICAgc2V0U3RhdGU6IChzdGF0ZTogUGx1Z2luU3RhdGUpID0+IHZvaWQsXG4gICAgaXNQYXJzZWQ6ICgpID0+IGJvb2xlYW4sXG4gICAgZ2V0UGx1Z2luVVJMOiAoKSA9PiA/c3RyaW5nXG59ID0ge1xuICAgIGFwcGx5QXJhYmljU2hhcGluZzogbnVsbCxcbiAgICBwcm9jZXNzQmlkaXJlY3Rpb25hbFRleHQ6IG51bGwsXG4gICAgcHJvY2Vzc1N0eWxlZEJpZGlyZWN0aW9uYWxUZXh0OiBudWxsLFxuICAgIGlzTG9hZGVkKCkge1xuICAgICAgICByZXR1cm4gcGx1Z2luU3RhdHVzID09PSBzdGF0dXMubG9hZGVkIHx8IC8vIE1haW4gVGhyZWFkOiBsb2FkZWQgaWYgdGhlIGNvbXBsZXRpb24gY2FsbGJhY2sgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5XG4gICAgICAgICAgICBwbHVnaW4uYXBwbHlBcmFiaWNTaGFwaW5nICE9IG51bGw7IC8vIFdlYi13b3JrZXI6IGxvYWRlZCBpZiB0aGUgcGx1Z2luIGZ1bmN0aW9ucyBoYXZlIGJlZW4gY29tcGlsZWRcbiAgICB9LFxuICAgIGlzTG9hZGluZygpIHsgLy8gTWFpbiBUaHJlYWQgT25seTogcXVlcnkgdGhlIGxvYWRpbmcgc3RhdHVzLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiB0aGUgY29ycmVjdCB2YWx1ZSBpbiB0aGUgd29ya2VyIGNvbnRleHQuXG4gICAgICAgIHJldHVybiBwbHVnaW5TdGF0dXMgPT09IHN0YXR1cy5sb2FkaW5nO1xuICAgIH0sXG4gICAgc2V0U3RhdGUoc3RhdGU6IFBsdWdpblN0YXRlKSB7IC8vIFdvcmtlciB0aHJlYWQgb25seTogdGhpcyB0ZWxscyB0aGUgd29ya2VyIHRocmVhZHMgdGhhdCB0aGUgcGx1Z2luIGlzIGF2YWlsYWJsZSBvbiB0aGUgTWFpbiB0aHJlYWRcbiAgICAgICAgYXNzZXJ0KGlzV29ya2VyKCksICdDYW5ub3Qgc2V0IHRoZSBzdGF0ZSBvZiB0aGUgcnRsLXRleHQtcGx1Z2luIHdoZW4gbm90IGluIHRoZSB3ZWItd29ya2VyIGNvbnRleHQnKTtcblxuICAgICAgICBwbHVnaW5TdGF0dXMgPSBzdGF0ZS5wbHVnaW5TdGF0dXM7XG4gICAgICAgIHBsdWdpblVSTCA9IHN0YXRlLnBsdWdpblVSTDtcbiAgICB9LFxuICAgIGlzUGFyc2VkKCk6IGJvb2xlYW4ge1xuICAgICAgICBhc3NlcnQoaXNXb3JrZXIoKSwgJ3J0bC10ZXh0LXBsdWdpbiBpcyBvbmx5IHBhcnNlZCBvbiB0aGUgd29ya2VyLXRocmVhZHMnKTtcblxuICAgICAgICByZXR1cm4gcGx1Z2luLmFwcGx5QXJhYmljU2hhcGluZyAhPSBudWxsICYmXG4gICAgICAgICAgICBwbHVnaW4ucHJvY2Vzc0JpZGlyZWN0aW9uYWxUZXh0ICE9IG51bGwgJiZcbiAgICAgICAgICAgIHBsdWdpbi5wcm9jZXNzU3R5bGVkQmlkaXJlY3Rpb25hbFRleHQgIT0gbnVsbDtcbiAgICB9LFxuICAgIGdldFBsdWdpblVSTCgpOiA/c3RyaW5nIHtcbiAgICAgICAgYXNzZXJ0KGlzV29ya2VyKCksICdydGwtdGV4dC1wbHVnaW4gdXJsIGNhbiBvbmx5IGJlIHF1ZXJpZWQgZnJvbSB0aGUgd29ya2VyIHRocmVhZHMnKTtcbiAgICAgICAgcmV0dXJuIHBsdWdpblVSTDtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgbGF6eUxvYWRSVExUZXh0UGx1Z2luID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCFwbHVnaW4uaXNMb2FkaW5nKCkgJiZcbiAgICAgICAgIXBsdWdpbi5pc0xvYWRlZCgpICYmXG4gICAgICAgIGdldFJUTFRleHRQbHVnaW5TdGF0dXMoKSA9PT0gJ2RlZmVycmVkJ1xuICAgICkge1xuICAgICAgICBkb3dubG9hZFJUTFRleHRQbHVnaW4oKTtcbiAgICB9XG59O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFpvb21IaXN0b3J5IGZyb20gJy4vem9vbV9oaXN0b3J5JztcbmltcG9ydCB7aXNTdHJpbmdJblN1cHBvcnRlZFNjcmlwdH0gZnJvbSAnLi4vdXRpbC9zY3JpcHRfZGV0ZWN0aW9uJztcbmltcG9ydCB7cGx1Z2luIGFzIHJ0bFRleHRQbHVnaW59IGZyb20gJy4uL3NvdXJjZS9ydGxfdGV4dF9wbHVnaW4nO1xuXG5pbXBvcnQgdHlwZSB7VHJhbnNpdGlvblNwZWNpZmljYXRpb259IGZyb20gJy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBDcm9zc2ZhZGVQYXJhbWV0ZXJzID0ge1xuICAgIGZyb21TY2FsZTogbnVtYmVyLFxuICAgIHRvU2NhbGU6IG51bWJlcixcbiAgICB0OiBudW1iZXJcbn07XG5cbmNsYXNzIEV2YWx1YXRpb25QYXJhbWV0ZXJzIHtcbiAgICB6b29tOiBudW1iZXI7XG4gICAgbm93OiBudW1iZXI7XG4gICAgZmFkZUR1cmF0aW9uOiBudW1iZXI7XG4gICAgem9vbUhpc3Rvcnk6IFpvb21IaXN0b3J5O1xuICAgIHRyYW5zaXRpb246IFRyYW5zaXRpb25TcGVjaWZpY2F0aW9uO1xuXG4gICAgLy8gXCJvcHRpb25zXCIgbWF5IGFsc28gYmUgYW5vdGhlciBFdmFsdWF0aW9uUGFyYW1ldGVycyB0byBjb3B5LCBzZWUgQ3Jvc3NGYWRlZFByb3BlcnR5LnBvc3NpYmx5RXZhbHVhdGVcbiAgICBjb25zdHJ1Y3Rvcih6b29tOiBudW1iZXIsIG9wdGlvbnM/OiAqKSB7XG4gICAgICAgIHRoaXMuem9vbSA9IHpvb207XG5cbiAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMubm93ID0gb3B0aW9ucy5ub3c7XG4gICAgICAgICAgICB0aGlzLmZhZGVEdXJhdGlvbiA9IG9wdGlvbnMuZmFkZUR1cmF0aW9uO1xuICAgICAgICAgICAgdGhpcy56b29tSGlzdG9yeSA9IG9wdGlvbnMuem9vbUhpc3Rvcnk7XG4gICAgICAgICAgICB0aGlzLnRyYW5zaXRpb24gPSBvcHRpb25zLnRyYW5zaXRpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm5vdyA9IDA7XG4gICAgICAgICAgICB0aGlzLmZhZGVEdXJhdGlvbiA9IDA7XG4gICAgICAgICAgICB0aGlzLnpvb21IaXN0b3J5ID0gbmV3IFpvb21IaXN0b3J5KCk7XG4gICAgICAgICAgICB0aGlzLnRyYW5zaXRpb24gPSB7fTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzU3VwcG9ydGVkU2NyaXB0KHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBpc1N0cmluZ0luU3VwcG9ydGVkU2NyaXB0KHN0ciwgcnRsVGV4dFBsdWdpbi5pc0xvYWRlZCgpKTtcbiAgICB9XG5cbiAgICBjcm9zc0ZhZGluZ0ZhY3RvcigpIHtcbiAgICAgICAgaWYgKHRoaXMuZmFkZUR1cmF0aW9uID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLm1pbigodGhpcy5ub3cgLSB0aGlzLnpvb21IaXN0b3J5Lmxhc3RJbnRlZ2VyWm9vbVRpbWUpIC8gdGhpcy5mYWRlRHVyYXRpb24sIDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0Q3Jvc3NmYWRlUGFyYW1ldGVycygpOiBDcm9zc2ZhZGVQYXJhbWV0ZXJzIHtcbiAgICAgICAgY29uc3QgeiA9IHRoaXMuem9vbTtcbiAgICAgICAgY29uc3QgZnJhY3Rpb24gPSB6IC0gTWF0aC5mbG9vcih6KTtcbiAgICAgICAgY29uc3QgdCA9IHRoaXMuY3Jvc3NGYWRpbmdGYWN0b3IoKTtcblxuICAgICAgICByZXR1cm4geiA+IHRoaXMuem9vbUhpc3RvcnkubGFzdEludGVnZXJab29tID9cbiAgICAgICAgICAgIHtmcm9tU2NhbGU6IDIsIHRvU2NhbGU6IDEsIHQ6IGZyYWN0aW9uICsgKDEgLSBmcmFjdGlvbikgKiB0fSA6XG4gICAgICAgICAgICB7ZnJvbVNjYWxlOiAwLjUsIHRvU2NhbGU6IDEsIHQ6IDEgLSAoMSAtIHQpICogZnJhY3Rpb259O1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRXZhbHVhdGlvblBhcmFtZXRlcnM7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQge2Nsb25lLCBleHRlbmQsIGVhc2VDdWJpY0luT3V0fSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0ICogYXMgaW50ZXJwb2xhdGUgZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL2ludGVycG9sYXRlJztcbmltcG9ydCB7bm9ybWFsaXplUHJvcGVydHlFeHByZXNzaW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24nO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuaW1wb3J0IEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4vZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcblxuaW1wb3J0IHR5cGUge0Nhbm9uaWNhbFRpbGVJRH0gZnJvbSAnLi4vc291cmNlL3RpbGVfaWQnO1xuaW1wb3J0IHR5cGUge1N0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3N0eWxlLXNwZWMnO1xuaW1wb3J0IHR5cGUge1xuICAgIFRyYW5zaXRpb25TcGVjaWZpY2F0aW9uLFxuICAgIFByb3BlcnR5VmFsdWVTcGVjaWZpY2F0aW9uXG59IGZyb20gJy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG5pbXBvcnQgdHlwZSB7XG4gICAgRmVhdHVyZSxcbiAgICBGZWF0dXJlU3RhdGUsXG4gICAgU3R5bGVQcm9wZXJ0eUV4cHJlc3Npb24sXG4gICAgU291cmNlRXhwcmVzc2lvbixcbiAgICBDb21wb3NpdGVFeHByZXNzaW9uXG59IGZyb20gJy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbic7XG5cbnR5cGUgVGltZVBvaW50ID0gbnVtYmVyO1xuXG5leHBvcnQgdHlwZSBDcm9zc0ZhZGVkPFQ+ID0ge1xuICAgIHRvOiBULFxuICAgIGZyb206IFRcbn07XG5cbi8qKlxuICogSW1wbGVtZW50cyBhIG51bWJlciBvZiBjbGFzc2VzIHRoYXQgZGVmaW5lIHN0YXRlIGFuZCBiZWhhdmlvciBmb3IgcGFpbnQgYW5kIGxheW91dCBwcm9wZXJ0aWVzLCBtb3N0XG4gKiBpbXBvcnRhbnRseSB0aGVpciByZXNwZWN0aXZlIGV2YWx1YXRpb24gY2hhaW5zOlxuICpcbiAqICAgICAgIFRyYW5zaXRpb25hYmxlIHBhaW50IHByb3BlcnR5IHZhbHVlXG4gKiAgICAgw6LChsKSIFRyYW5zaXRpb25pbmcgcGFpbnQgcHJvcGVydHkgdmFsdWVcbiAqICAgICDDosKGwpIgUG9zc2libHkgZXZhbHVhdGVkIHBhaW50IHByb3BlcnR5IHZhbHVlXG4gKiAgICAgw6LChsKSIEZ1bGx5IGV2YWx1YXRlZCBwYWludCBwcm9wZXJ0eSB2YWx1ZVxuICpcbiAqICAgICAgIExheW91dCBwcm9wZXJ0eSB2YWx1ZVxuICogICAgIMOiwobCkiBQb3NzaWJseSBldmFsdWF0ZWQgbGF5b3V0IHByb3BlcnR5IHZhbHVlXG4gKiAgICAgw6LChsKSIEZ1bGx5IGV2YWx1YXRlZCBsYXlvdXQgcHJvcGVydHkgdmFsdWVcbiAqXG4gKiBAbW9kdWxlXG4gKiBAcHJpdmF0ZVxuICovXG5cbi8qKlxuICogIEltcGxlbWVudGF0aW9ucyBvZiB0aGUgYFByb3BlcnR5YCBpbnRlcmZhY2U6XG4gKlxuICogICogSG9sZCBtZXRhZGF0YSBhYm91dCBhIHByb3BlcnR5IHRoYXQncyBpbmRlcGVuZGVudCBvZiBhbnkgc3BlY2lmaWMgdmFsdWU6IHN0dWZmIGxpa2UgdGhlIHR5cGUgb2YgdGhlIHZhbHVlLFxuICogICAgdGhlIGRlZmF1bHQgdmFsdWUsIGV0Yy4gVGhpcyBjb21lcyBmcm9tIHRoZSBzdHlsZSBzcGVjaWZpY2F0aW9uIEpTT04uXG4gKiAgKiBEZWZpbmUgYmVoYXZpb3IgdGhhdCBuZWVkcyB0byBiZSBwb2x5bW9ycGhpYyBhY3Jvc3MgZGlmZmVyZW50IHByb3BlcnRpZXM6IFwicG9zc2libHkgZXZhbHVhdGluZ1wiXG4gKiAgICBhbiBpbnB1dCB2YWx1ZSAoc2VlIGJlbG93KSwgYW5kIGludGVycG9sYXRpbmcgYmV0d2VlbiB0d28gcG9zc2libHktZXZhbHV0ZWQgdmFsdWVzLlxuICpcbiAqICBUaGUgdHlwZSBgVGAgaXMgdGhlIGZ1bGx5LWV2YWx1YXRlZCB2YWx1ZSB0eXBlIChlLmcuIGBudW1iZXJgLCBgc3RyaW5nYCwgYENvbG9yYCkuXG4gKiAgVGhlIHR5cGUgYFJgIGlzIHRoZSBpbnRlcm1lZGlhdGUgXCJwb3NzaWJseSBldmFsdWF0ZWRcIiB2YWx1ZSB0eXBlLiBTZWUgYmVsb3cuXG4gKlxuICogIFRoZXJlIGFyZSB0d28gbWFpbiBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIGludGVyZmFjZSAtLSBvbmUgZm9yIHByb3BlcnRpZXMgdGhhdCBhbGxvdyBkYXRhLWRyaXZlbiB2YWx1ZXMsXG4gKiAgYW5kIG9uZSBmb3IgcHJvcGVydGllcyB0aGF0IGRvbid0LiBUaGVyZSBhcmUgYSBmZXcgXCJzcGVjaWFsIGNhc2VcIiBpbXBsZW1lbnRhdGlvbnMgYXMgd2VsbDogb25lIGZvciBwcm9wZXJ0aWVzXG4gKiAgd2hpY2ggY3Jvc3MtZmFkZSBiZXR3ZWVuIHR3byB2YWx1ZXMgcmF0aGVyIHRoYW4gaW50ZXJwb2xhdGluZywgb25lIGZvciBgaGVhdG1hcC1jb2xvcmAgYW5kIGBsaW5lLWdyYWRpZW50YCxcbiAqICBhbmQgb25lIGZvciBgbGlnaHQtcG9zaXRpb25gLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvcGVydHk8VCwgUj4ge1xuICAgIHNwZWNpZmljYXRpb246IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uO1xuICAgIHBvc3NpYmx5RXZhbHVhdGUodmFsdWU6IFByb3BlcnR5VmFsdWU8VCwgUj4sIHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzLCBjYW5vbmljYWw/OiBDYW5vbmljYWxUaWxlSUQsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4pOiBSO1xuICAgIGludGVycG9sYXRlKGE6IFIsIGI6IFIsIHQ6IG51bWJlcik6IFI7XG59XG5cbi8qKlxuICogIGBQcm9wZXJ0eVZhbHVlYCByZXByZXNlbnRzIHRoZSB2YWx1ZSBwYXJ0IG9mIGEgcHJvcGVydHkga2V5LXZhbHVlIHVuaXQuIEl0J3MgdXNlZCB0byByZXByZXNlbnQgYm90aFxuICogIHBhaW50IGFuZCBsYXlvdXQgcHJvcGVydHkgdmFsdWVzLCBhbmQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9yIG5vdCB0aGVpciBwcm9wZXJ0eSBzdXBwb3J0cyBkYXRhLWRyaXZlblxuICogIGV4cHJlc3Npb25zLlxuICpcbiAqICBgUHJvcGVydHlWYWx1ZWAgc3RvcmVzIHRoZSByYXcgaW5wdXQgdmFsdWUgYXMgc2VlbiBpbiBhIHN0eWxlIG9yIGEgcnVudGltZSBzdHlsaW5nIEFQSSBjYWxsLCBpLmUuIG9uZSBvZiB0aGVcbiAqICBmb2xsb3dpbmc6XG4gKlxuICogICAgKiBBIGNvbnN0YW50IHZhbHVlIG9mIHRoZSB0eXBlIGFwcHJvcHJpYXRlIGZvciB0aGUgcHJvcGVydHlcbiAqICAgICogQSBmdW5jdGlvbiB3aGljaCBwcm9kdWNlcyBhIHZhbHVlIG9mIHRoYXQgdHlwZSAoYnV0IGZ1bmN0aW9ucyBhcmUgcXVhc2ktZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBleHByZXNzaW9ucylcbiAqICAgICogQW4gZXhwcmVzc2lvbiB3aGljaCBwcm9kdWNlcyBhIHZhbHVlIG9mIHRoYXQgdHlwZVxuICogICAgKiBcInVuZGVmaW5lZFwiL1wibm90IHByZXNlbnRcIiwgaW4gd2hpY2ggY2FzZSB0aGUgcHJvcGVydHkgaXMgYXNzdW1lZCB0byB0YWtlIG9uIGl0cyBkZWZhdWx0IHZhbHVlLlxuICpcbiAqICBJbiBhZGRpdGlvbiB0byBzdG9yaW5nIHRoZSBvcmlnaW5hbCBpbnB1dCB2YWx1ZSwgYFByb3BlcnR5VmFsdWVgIGFsc28gc3RvcmVzIGEgbm9ybWFsaXplZCByZXByZXNlbnRhdGlvbixcbiAqICBlZmZlY3RpdmVseSB0cmVhdGluZyBmdW5jdGlvbnMgYXMgaWYgdGhleSBhcmUgZXhwcmVzc2lvbnMsIGFuZCBjb25zdGFudCBvciBkZWZhdWx0IHZhbHVlcyBhcyBpZiB0aGV5IGFyZVxuICogIChjb25zdGFudCkgZXhwcmVzc2lvbnMuXG4gKlxuICogIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBQcm9wZXJ0eVZhbHVlPFQsIFI+IHtcbiAgICBwcm9wZXJ0eTogUHJvcGVydHk8VCwgUj47XG4gICAgdmFsdWU6IFByb3BlcnR5VmFsdWVTcGVjaWZpY2F0aW9uPFQ+IHwgdm9pZDtcbiAgICBleHByZXNzaW9uOiBTdHlsZVByb3BlcnR5RXhwcmVzc2lvbjtcblxuICAgIGNvbnN0cnVjdG9yKHByb3BlcnR5OiBQcm9wZXJ0eTxULCBSPiwgdmFsdWU6IFByb3BlcnR5VmFsdWVTcGVjaWZpY2F0aW9uPFQ+IHwgdm9pZCkge1xuICAgICAgICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5leHByZXNzaW9uID0gbm9ybWFsaXplUHJvcGVydHlFeHByZXNzaW9uKHZhbHVlID09PSB1bmRlZmluZWQgPyBwcm9wZXJ0eS5zcGVjaWZpY2F0aW9uLmRlZmF1bHQgOiB2YWx1ZSwgcHJvcGVydHkuc3BlY2lmaWNhdGlvbik7XG4gICAgfVxuXG4gICAgaXNEYXRhRHJpdmVuKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5leHByZXNzaW9uLmtpbmQgPT09ICdzb3VyY2UnIHx8IHRoaXMuZXhwcmVzc2lvbi5raW5kID09PSAnY29tcG9zaXRlJztcbiAgICB9XG5cbiAgICBwb3NzaWJseUV2YWx1YXRlKHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzLCBjYW5vbmljYWw/OiBDYW5vbmljYWxUaWxlSUQsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4pOiBSIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydHkucG9zc2libHlFdmFsdWF0ZSh0aGlzLCBwYXJhbWV0ZXJzLCBjYW5vbmljYWwsIGF2YWlsYWJsZUltYWdlcyk7XG4gICAgfVxufVxuXG4vLyAtLS0tLS0tIFRyYW5zaXRpb25hYmxlIC0tLS0tLS1cblxuZXhwb3J0IHR5cGUgVHJhbnNpdGlvblBhcmFtZXRlcnMgPSB7XG4gICAgbm93OiBUaW1lUG9pbnQsXG4gICAgdHJhbnNpdGlvbjogVHJhbnNpdGlvblNwZWNpZmljYXRpb25cbn07XG5cbi8qKlxuICogUGFpbnQgcHJvcGVydGllcyBhcmUgX3RyYW5zaXRpb25hYmxlXzogdGhleSBjYW4gY2hhbmdlIGluIGEgZmx1aWQgbWFubmVyLCBpbnRlcnBvbGF0aW5nIG9yIGNyb3NzLWZhZGluZyBiZXR3ZWVuXG4gKiBvbGQgYW5kIG5ldyB2YWx1ZS4gVGhlIGR1cmF0aW9uIG9mIHRoZSB0cmFuc2l0aW9uLCBhbmQgdGhlIGRlbGF5IGJlZm9yZSBpdCBiZWdpbnMsIGlzIGNvbmZpZ3VyYWJsZS5cbiAqXG4gKiBgVHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlYCBpcyBhIGNvbXBvc2l0aW9uYWwgY2xhc3MgdGhhdCBzdG9yZXMgYm90aCB0aGUgcHJvcGVydHkgdmFsdWUgYW5kIHRoYXQgdHJhbnNpdGlvblxuICogY29uZmlndXJhdGlvbi5cbiAqXG4gKiBBIGBUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWVgIGNhbiBjYWxjdWxhdGUgdGhlIG5leHQgc3RlcCBpbiB0aGUgZXZhbHVhdGlvbiBjaGFpbiBmb3IgcGFpbnQgcHJvcGVydHkgdmFsdWVzOlxuICogYFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWU8VCwgUj4ge1xuICAgIHByb3BlcnR5OiBQcm9wZXJ0eTxULCBSPjtcbiAgICB2YWx1ZTogUHJvcGVydHlWYWx1ZTxULCBSPjtcbiAgICB0cmFuc2l0aW9uOiBUcmFuc2l0aW9uU3BlY2lmaWNhdGlvbiB8IHZvaWQ7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eTogUHJvcGVydHk8VCwgUj4pIHtcbiAgICAgICAgdGhpcy5wcm9wZXJ0eSA9IHByb3BlcnR5O1xuICAgICAgICB0aGlzLnZhbHVlID0gbmV3IFByb3BlcnR5VmFsdWUocHJvcGVydHksIHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgdHJhbnNpdGlvbmVkKHBhcmFtZXRlcnM6IFRyYW5zaXRpb25QYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICAgICBwcmlvcjogVHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWU8VCwgUj4pOiBUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZTxULCBSPiB7XG4gICAgICAgIHJldHVybiBuZXcgVHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWUodGhpcy5wcm9wZXJ0eSwgdGhpcy52YWx1ZSwgcHJpb3IsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgICAgIGV4dGVuZCh7fSwgcGFyYW1ldGVycy50cmFuc2l0aW9uLCB0aGlzLnRyYW5zaXRpb24pLCBwYXJhbWV0ZXJzLm5vdyk7XG4gICAgfVxuXG4gICAgdW50cmFuc2l0aW9uZWQoKTogVHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWU8VCwgUj4ge1xuICAgICAgICByZXR1cm4gbmV3IFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlKHRoaXMucHJvcGVydHksIHRoaXMudmFsdWUsIG51bGwsIHt9LCAwKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgIH1cbn1cblxuLyoqXG4gKiBBIGhlbHBlciB0eXBlOiBnaXZlbiBhbiBvYmplY3QgdHlwZSBgUHJvcGVydGllc2Agd2hvc2UgdmFsdWVzIGFyZSBlYWNoIG9mIHR5cGUgYFByb3BlcnR5PFQsIFI+YCwgaXQgY2FsY3VsYXRlc1xuICogYW4gb2JqZWN0IHR5cGUgd2l0aCB0aGUgc2FtZSBrZXlzIGFuZCB2YWx1ZXMgb2YgdHlwZSBgVHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlPFQsIFI+YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG50eXBlIFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZXM8UHJvcHM6IE9iamVjdD5cbiAgICA9ICRFeGFjdDwkT2JqTWFwPFByb3BzLCA8VCwgUj4ocDogUHJvcGVydHk8VCwgUj4pID0+IFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZTxULCBSPj4+XG5cbi8qKlxuICogYFRyYW5zaXRpb25hYmxlYCBzdG9yZXMgYSBtYXAgb2YgYWxsIChwcm9wZXJ0eSBuYW1lLCBgVHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlYCkgcGFpcnMgZm9yIHBhaW50IHByb3BlcnRpZXMgb2YgYVxuICogZ2l2ZW4gbGF5ZXIgdHlwZS4gSXQgY2FuIGNhbGN1bGF0ZSB0aGUgYFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlYHMgZm9yIGFsbCBvZiB0aGVtIGF0IG9uY2UsIHByb2R1Y2luZyBhXG4gKiBgVHJhbnNpdGlvbmluZ2AgaW5zdGFuY2UgZm9yIHRoZSBzYW1lIHNldCBvZiBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBUcmFuc2l0aW9uYWJsZTxQcm9wczogT2JqZWN0PiB7XG4gICAgX3Byb3BlcnRpZXM6IFByb3BlcnRpZXM8UHJvcHM+O1xuICAgIF92YWx1ZXM6IFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZXM8UHJvcHM+O1xuXG4gICAgY29uc3RydWN0b3IocHJvcGVydGllczogUHJvcGVydGllczxQcm9wcz4pIHtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gICAgICAgIHRoaXMuX3ZhbHVlcyA9IChPYmplY3QuY3JlYXRlKHByb3BlcnRpZXMuZGVmYXVsdFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZXMpOiBhbnkpO1xuICAgIH1cblxuICAgIGdldFZhbHVlPFM6IHN0cmluZywgVD4obmFtZTogUyk6IFByb3BlcnR5VmFsdWVTcGVjaWZpY2F0aW9uPFQ+IHwgdm9pZCB7XG4gICAgICAgIHJldHVybiBjbG9uZSh0aGlzLl92YWx1ZXNbbmFtZV0udmFsdWUudmFsdWUpO1xuICAgIH1cblxuICAgIHNldFZhbHVlPFM6IHN0cmluZywgVD4obmFtZTogUywgdmFsdWU6IFByb3BlcnR5VmFsdWVTcGVjaWZpY2F0aW9uPFQ+IHwgdm9pZCkge1xuICAgICAgICBpZiAoIXRoaXMuX3ZhbHVlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICAgICAgdGhpcy5fdmFsdWVzW25hbWVdID0gbmV3IFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZSh0aGlzLl92YWx1ZXNbbmFtZV0ucHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBkbyBub3QgX3JlbW92ZV8gYW4gb3duIHByb3BlcnR5IGluIHRoZSBjYXNlIHdoZXJlIGEgdmFsdWUgaXMgYmVpbmcgcmVzZXRcbiAgICAgICAgLy8gdG8gdGhlIGRlZmF1bHQ6IHRoZSB0cmFuc2l0aW9uIG1pZ2h0IHN0aWxsIGJlIG5vbi1kZWZhdWx0LlxuICAgICAgICB0aGlzLl92YWx1ZXNbbmFtZV0udmFsdWUgPSBuZXcgUHJvcGVydHlWYWx1ZSh0aGlzLl92YWx1ZXNbbmFtZV0ucHJvcGVydHksIHZhbHVlID09PSBudWxsID8gdW5kZWZpbmVkIDogY2xvbmUodmFsdWUpKTtcbiAgICB9XG5cbiAgICBnZXRUcmFuc2l0aW9uPFM6IHN0cmluZz4obmFtZTogUyk6IFRyYW5zaXRpb25TcGVjaWZpY2F0aW9uIHwgdm9pZCB7XG4gICAgICAgIHJldHVybiBjbG9uZSh0aGlzLl92YWx1ZXNbbmFtZV0udHJhbnNpdGlvbik7XG4gICAgfVxuXG4gICAgc2V0VHJhbnNpdGlvbjxTOiBzdHJpbmc+KG5hbWU6IFMsIHZhbHVlOiBUcmFuc2l0aW9uU3BlY2lmaWNhdGlvbiB8IHZvaWQpIHtcbiAgICAgICAgaWYgKCF0aGlzLl92YWx1ZXMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlc1tuYW1lXSA9IG5ldyBUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWUodGhpcy5fdmFsdWVzW25hbWVdLnByb3BlcnR5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl92YWx1ZXNbbmFtZV0udHJhbnNpdGlvbiA9IGNsb25lKHZhbHVlKSB8fCB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICBjb25zdCByZXN1bHQ6IGFueSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIE9iamVjdC5rZXlzKHRoaXMuX3ZhbHVlcykpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZShwcm9wZXJ0eSk7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtwcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdHJhbnNpdGlvbiA9IHRoaXMuZ2V0VHJhbnNpdGlvbihwcm9wZXJ0eSk7XG4gICAgICAgICAgICBpZiAodHJhbnNpdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2Ake3Byb3BlcnR5fS10cmFuc2l0aW9uYF0gPSB0cmFuc2l0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdHJhbnNpdGlvbmVkKHBhcmFtZXRlcnM6IFRyYW5zaXRpb25QYXJhbWV0ZXJzLCBwcmlvcjogVHJhbnNpdGlvbmluZzxQcm9wcz4pOiBUcmFuc2l0aW9uaW5nPFByb3BzPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBUcmFuc2l0aW9uaW5nKHRoaXMuX3Byb3BlcnRpZXMpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgT2JqZWN0LmtleXModGhpcy5fdmFsdWVzKSkge1xuICAgICAgICAgICAgcmVzdWx0Ll92YWx1ZXNbcHJvcGVydHldID0gdGhpcy5fdmFsdWVzW3Byb3BlcnR5XS50cmFuc2l0aW9uZWQocGFyYW1ldGVycywgcHJpb3IuX3ZhbHVlc1twcm9wZXJ0eV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdW50cmFuc2l0aW9uZWQoKTogVHJhbnNpdGlvbmluZzxQcm9wcz4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgVHJhbnNpdGlvbmluZyh0aGlzLl9wcm9wZXJ0aWVzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIE9iamVjdC5rZXlzKHRoaXMuX3ZhbHVlcykpIHtcbiAgICAgICAgICAgIHJlc3VsdC5fdmFsdWVzW3Byb3BlcnR5XSA9IHRoaXMuX3ZhbHVlc1twcm9wZXJ0eV0udW50cmFuc2l0aW9uZWQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuLy8gLS0tLS0tLSBUcmFuc2l0aW9uaW5nIC0tLS0tLS1cblxuLyoqXG4gKiBgVHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVgIGltcGxlbWVudHMgdGhlIGZpcnN0IG9mIHR3byBpbnRlcm1lZGlhdGUgc3RlcHMgaW4gdGhlIGV2YWx1YXRpb24gY2hhaW4gb2YgYSBwYWludFxuICogcHJvcGVydHkgdmFsdWUuIEluIHRoaXMgc3RlcCwgdHJhbnNpdGlvbnMgYmV0d2VlbiBvbGQgYW5kIG5ldyB2YWx1ZXMgYXJlIGhhbmRsZWQ6IGFzIGxvbmcgYXMgdGhlIHRyYW5zaXRpb24gaXMgaW5cbiAqIHByb2dyZXNzLCBgVHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVgIG1haW50YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgcHJpb3IgdmFsdWUsIGFuZCBpbnRlcnBvbGF0ZXMgYmV0d2VlbiBpdCBhbmRcbiAqIHRoZSBuZXcgdmFsdWUgYmFzZWQgb24gdGhlIGN1cnJlbnQgdGltZSBhbmQgdGhlIGNvbmZpZ3VyZWQgdHJhbnNpdGlvbiBkdXJhdGlvbiBhbmQgZGVsYXkuIFRoZSBwcm9kdWN0IGlzIHRoZSBuZXh0XG4gKiBzdGVwIGluIHRoZSBldmFsdWF0aW9uIGNoYWluOiB0aGUgXCJwb3NzaWJseSBldmFsdWF0ZWRcIiByZXN1bHQgdHlwZSBgUmAuIFNlZSBiZWxvdyBmb3IgbW9yZSBvbiB0aGlzIGNvbmNlcHQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgVHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWU8VCwgUj4ge1xuICAgIHByb3BlcnR5OiBQcm9wZXJ0eTxULCBSPjtcbiAgICB2YWx1ZTogUHJvcGVydHlWYWx1ZTxULCBSPjtcbiAgICBwcmlvcjogP1RyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlPFQsIFI+O1xuICAgIGJlZ2luOiBUaW1lUG9pbnQ7XG4gICAgZW5kOiBUaW1lUG9pbnQ7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eTogUHJvcGVydHk8VCwgUj4sXG4gICAgICAgICAgICAgICAgdmFsdWU6IFByb3BlcnR5VmFsdWU8VCwgUj4sXG4gICAgICAgICAgICAgICAgcHJpb3I6ID9UcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZTxULCBSPixcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiBUcmFuc2l0aW9uU3BlY2lmaWNhdGlvbixcbiAgICAgICAgICAgICAgICBub3c6IFRpbWVQb2ludCkge1xuICAgICAgICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5iZWdpbiA9IG5vdyArIHRyYW5zaXRpb24uZGVsYXkgfHwgMDtcbiAgICAgICAgdGhpcy5lbmQgPSB0aGlzLmJlZ2luICsgdHJhbnNpdGlvbi5kdXJhdGlvbiB8fCAwO1xuICAgICAgICBpZiAocHJvcGVydHkuc3BlY2lmaWNhdGlvbi50cmFuc2l0aW9uICYmICh0cmFuc2l0aW9uLmRlbGF5IHx8IHRyYW5zaXRpb24uZHVyYXRpb24pKSB7XG4gICAgICAgICAgICB0aGlzLnByaW9yID0gcHJpb3I7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwb3NzaWJseUV2YWx1YXRlKHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzLCBjYW5vbmljYWw6IENhbm9uaWNhbFRpbGVJRCwgYXZhaWxhYmxlSW1hZ2VzOiBBcnJheTxzdHJpbmc+KTogUiB7XG4gICAgICAgIGNvbnN0IG5vdyA9IHBhcmFtZXRlcnMubm93IHx8IDA7XG4gICAgICAgIGNvbnN0IGZpbmFsVmFsdWUgPSB0aGlzLnZhbHVlLnBvc3NpYmx5RXZhbHVhdGUocGFyYW1ldGVycywgY2Fub25pY2FsLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICBjb25zdCBwcmlvciA9IHRoaXMucHJpb3I7XG4gICAgICAgIGlmICghcHJpb3IpIHtcbiAgICAgICAgICAgIC8vIE5vIHByaW9yIHZhbHVlLlxuICAgICAgICAgICAgcmV0dXJuIGZpbmFsVmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAobm93ID4gdGhpcy5lbmQpIHtcbiAgICAgICAgICAgIC8vIFRyYW5zaXRpb24gZnJvbSBwcmlvciB2YWx1ZSBpcyBub3cgY29tcGxldGUuXG4gICAgICAgICAgICB0aGlzLnByaW9yID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiBmaW5hbFZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsdWUuaXNEYXRhRHJpdmVuKCkpIHtcbiAgICAgICAgICAgIC8vIFRyYW5zaXRpb25zIHRvIGRhdGEtZHJpdmVuIHByb3BlcnRpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuXG4gICAgICAgICAgICAvLyBXZSBzbmFwIGltbWVkaWF0ZWx5IHRvIHRoZSBkYXRhLWRyaXZlbiB2YWx1ZSBzbyB0aGF0LCB3aGVuIHdlIHBlcmZvcm0gbGF5b3V0LFxuICAgICAgICAgICAgLy8gd2Ugc2VlIHRoZSBkYXRhLWRyaXZlbiBmdW5jdGlvbiBhbmQgY2FuIHVzZSBpdCB0byBwb3B1bGF0ZSB2ZXJ0ZXggYnVmZmVycy5cbiAgICAgICAgICAgIHRoaXMucHJpb3IgPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIGZpbmFsVmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAobm93IDwgdGhpcy5iZWdpbikge1xuICAgICAgICAgICAgLy8gVHJhbnNpdGlvbiBoYXNuJ3Qgc3RhcnRlZCB5ZXQuXG4gICAgICAgICAgICByZXR1cm4gcHJpb3IucG9zc2libHlFdmFsdWF0ZShwYXJhbWV0ZXJzLCBjYW5vbmljYWwsIGF2YWlsYWJsZUltYWdlcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJbnRlcnBvbGF0ZSBiZXR3ZWVuIHJlY3Vyc2l2ZWx5LWNhbGN1bGF0ZWQgcHJpb3IgdmFsdWUgYW5kIGZpbmFsLlxuICAgICAgICAgICAgY29uc3QgdCA9IChub3cgLSB0aGlzLmJlZ2luKSAvICh0aGlzLmVuZCAtIHRoaXMuYmVnaW4pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydHkuaW50ZXJwb2xhdGUocHJpb3IucG9zc2libHlFdmFsdWF0ZShwYXJhbWV0ZXJzLCBjYW5vbmljYWwsIGF2YWlsYWJsZUltYWdlcyksIGZpbmFsVmFsdWUsIGVhc2VDdWJpY0luT3V0KHQpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBBIGhlbHBlciB0eXBlOiBnaXZlbiBhbiBvYmplY3QgdHlwZSBgUHJvcGVydGllc2Agd2hvc2UgdmFsdWVzIGFyZSBlYWNoIG9mIHR5cGUgYFByb3BlcnR5PFQsIFI+YCwgaXQgY2FsY3VsYXRlc1xuICogYW4gb2JqZWN0IHR5cGUgd2l0aCB0aGUgc2FtZSBrZXlzIGFuZCB2YWx1ZXMgb2YgdHlwZSBgVHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWU8VCwgUj5gLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbnR5cGUgVHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVzPFByb3BzOiBPYmplY3Q+XG4gICAgPSAkRXhhY3Q8JE9iak1hcDxQcm9wcywgPFQsIFI+KHA6IFByb3BlcnR5PFQsIFI+KSA9PiBUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZTxULCBSPj4+XG5cbi8qKlxuICogYFRyYW5zaXRpb25pbmdgIHN0b3JlcyBhIG1hcCBvZiBhbGwgKHByb3BlcnR5IG5hbWUsIGBUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZWApIHBhaXJzIGZvciBwYWludCBwcm9wZXJ0aWVzIG9mIGFcbiAqIGdpdmVuIGxheWVyIHR5cGUuIEl0IGNhbiBjYWxjdWxhdGUgdGhlIHBvc3NpYmx5LWV2YWx1YXRlZCB2YWx1ZXMgZm9yIGFsbCBvZiB0aGVtIGF0IG9uY2UsIHByb2R1Y2luZyBhXG4gKiBgUG9zc2libHlFdmFsdWF0ZWRgIGluc3RhbmNlIGZvciB0aGUgc2FtZSBzZXQgb2YgcHJvcGVydGllcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgVHJhbnNpdGlvbmluZzxQcm9wczogT2JqZWN0PiB7XG4gICAgX3Byb3BlcnRpZXM6IFByb3BlcnRpZXM8UHJvcHM+O1xuICAgIF92YWx1ZXM6IFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlczxQcm9wcz47XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiBQcm9wZXJ0aWVzPFByb3BzPikge1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgICAgICAgdGhpcy5fdmFsdWVzID0gKE9iamVjdC5jcmVhdGUocHJvcGVydGllcy5kZWZhdWx0VHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVzKTogYW55KTtcbiAgICB9XG5cbiAgICBwb3NzaWJseUV2YWx1YXRlKHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzLCBjYW5vbmljYWw/OiBDYW5vbmljYWxUaWxlSUQsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4pOiBQb3NzaWJseUV2YWx1YXRlZDxQcm9wcz4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgUG9zc2libHlFdmFsdWF0ZWQodGhpcy5fcHJvcGVydGllcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBPYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpKSB7XG4gICAgICAgICAgICByZXN1bHQuX3ZhbHVlc1twcm9wZXJ0eV0gPSB0aGlzLl92YWx1ZXNbcHJvcGVydHldLnBvc3NpYmx5RXZhbHVhdGUocGFyYW1ldGVycywgY2Fub25pY2FsLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgaGFzVHJhbnNpdGlvbigpIHtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBPYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdmFsdWVzW3Byb3BlcnR5XS5wcmlvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbi8vIC0tLS0tLS0gTGF5b3V0IC0tLS0tLS1cblxuLyoqXG4gKiBBIGhlbHBlciB0eXBlOiBnaXZlbiBhbiBvYmplY3QgdHlwZSBgUHJvcGVydGllc2Agd2hvc2UgdmFsdWVzIGFyZSBlYWNoIG9mIHR5cGUgYFByb3BlcnR5PFQsIFI+YCwgaXQgY2FsY3VsYXRlc1xuICogYW4gb2JqZWN0IHR5cGUgd2l0aCB0aGUgc2FtZSBrZXlzIGFuZCB2YWx1ZXMgb2YgdHlwZSBgUHJvcGVydHlWYWx1ZTxULCBSPmAuXG4gKlxuICogQHByaXZhdGVcbiAqL1xudHlwZSBQcm9wZXJ0eVZhbHVlczxQcm9wczogT2JqZWN0PlxuICAgID0gJEV4YWN0PCRPYmpNYXA8UHJvcHMsIDxULCBSPihwOiBQcm9wZXJ0eTxULCBSPikgPT4gUHJvcGVydHlWYWx1ZTxULCBSPj4+XG5cbi8qKlxuICogQmVjYXVzZSBsYXlvdXQgcHJvcGVydGllcyBhcmUgbm90IHRyYW5zaXRpb25hYmxlLCB0aGV5IGhhdmUgYSBzaW1wbGVyIHJlcHJlc2VudGF0aW9uIGFuZCBldmFsdWF0aW9uIGNoYWluIHRoYW5cbiAqIHBhaW50IHByb3BlcnRpZXM6IGBQcm9wZXJ0eVZhbHVlYHMgYXJlIHBvc3NpYmx5IGV2YWx1YXRlZCwgcHJvZHVjaW5nIHBvc3NpYmx5IGV2YWx1YXRlZCB2YWx1ZXMsIHdoaWNoIGFyZSB0aGVuXG4gKiBmdWxseSBldmFsdWF0ZWQuXG4gKlxuICogYExheW91dGAgc3RvcmVzIGEgbWFwIG9mIGFsbCAocHJvcGVydHkgbmFtZSwgYFByb3BlcnR5VmFsdWVgKSBwYWlycyBmb3IgbGF5b3V0IHByb3BlcnRpZXMgb2YgYVxuICogZ2l2ZW4gbGF5ZXIgdHlwZS4gSXQgY2FuIGNhbGN1bGF0ZSB0aGUgcG9zc2libHktZXZhbHVhdGVkIHZhbHVlcyBmb3IgYWxsIG9mIHRoZW0gYXQgb25jZSwgcHJvZHVjaW5nIGFcbiAqIGBQb3NzaWJseUV2YWx1YXRlZGAgaW5zdGFuY2UgZm9yIHRoZSBzYW1lIHNldCBvZiBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBMYXlvdXQ8UHJvcHM6IE9iamVjdD4ge1xuICAgIF9wcm9wZXJ0aWVzOiBQcm9wZXJ0aWVzPFByb3BzPjtcbiAgICBfdmFsdWVzOiBQcm9wZXJ0eVZhbHVlczxQcm9wcz47XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiBQcm9wZXJ0aWVzPFByb3BzPikge1xuICAgICAgICB0aGlzLl9wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgICAgICAgdGhpcy5fdmFsdWVzID0gKE9iamVjdC5jcmVhdGUocHJvcGVydGllcy5kZWZhdWx0UHJvcGVydHlWYWx1ZXMpOiBhbnkpO1xuICAgIH1cblxuICAgIGdldFZhbHVlPFM6IHN0cmluZz4obmFtZTogUykge1xuICAgICAgICByZXR1cm4gY2xvbmUodGhpcy5fdmFsdWVzW25hbWVdLnZhbHVlKTtcbiAgICB9XG5cbiAgICBzZXRWYWx1ZTxTOiBzdHJpbmc+KG5hbWU6IFMsIHZhbHVlOiAqKSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eVZhbHVlKHRoaXMuX3ZhbHVlc1tuYW1lXS5wcm9wZXJ0eSwgdmFsdWUgPT09IG51bGwgPyB1bmRlZmluZWQgOiBjbG9uZSh2YWx1ZSkpO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBhbnkgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBPYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUocHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRbcHJvcGVydHldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwb3NzaWJseUV2YWx1YXRlKHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzLCBjYW5vbmljYWw/OiBDYW5vbmljYWxUaWxlSUQsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4pOiBQb3NzaWJseUV2YWx1YXRlZDxQcm9wcz4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgUG9zc2libHlFdmFsdWF0ZWQodGhpcy5fcHJvcGVydGllcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBPYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpKSB7XG4gICAgICAgICAgICByZXN1bHQuX3ZhbHVlc1twcm9wZXJ0eV0gPSB0aGlzLl92YWx1ZXNbcHJvcGVydHldLnBvc3NpYmx5RXZhbHVhdGUocGFyYW1ldGVycywgY2Fub25pY2FsLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG4vLyAtLS0tLS0tIFBvc3NpYmx5RXZhbHVhdGVkIC0tLS0tLS1cblxuLyoqXG4gKiBcIlBvc3NpYmx5IGV2YWx1YXRlZCB2YWx1ZVwiIGlzIGFuIGludGVybWVkaWF0ZSBzdGFnZSBpbiB0aGUgZXZhbHVhdGlvbiBjaGFpbiBmb3IgYm90aCBwYWludCBhbmQgbGF5b3V0IHByb3BlcnR5XG4gKiB2YWx1ZXMuIFRoZSBwdXJwb3NlIG9mIHRoaXMgc3RhZ2UgaXMgdG8gb3B0aW1pemUgYXdheSB1bm5lY2Vzc2FyeSByZWNhbGN1bGF0aW9ucyBmb3IgZGF0YS1kcml2ZW4gcHJvcGVydGllcy4gQ29kZVxuICogd2hpY2ggdXNlcyBkYXRhLWRyaXZlbiBwcm9wZXJ0eSB2YWx1ZXMgbXVzdCBhc3N1bWUgdGhhdCB0aGUgdmFsdWUgaXMgZGVwZW5kZW50IG9uIGZlYXR1cmUgZGF0YSwgYW5kIHJlcXVlc3QgdGhhdCBpdFxuICogYmUgZXZhbHVhdGVkIGZvciBlYWNoIGZlYXR1cmUuIEJ1dCB3aGVuIHRoYXQgcHJvcGVydHkgdmFsdWUgaXMgaW4gZmFjdCBhIGNvbnN0YW50IG9yIGNhbWVyYSBmdW5jdGlvbiwgdGhlIGNhbGN1bGF0aW9uXG4gKiB3aWxsIG5vdCBhY3R1YWxseSBkZXBlbmQgb24gdGhlIGZlYXR1cmUsIGFuZCB3ZSBjYW4gYmVuZWZpdCBmcm9tIHJldHVybmluZyB0aGUgcHJpb3IgcmVzdWx0IG9mIGhhdmluZyBkb25lIHRoZVxuICogZXZhbHVhdGlvbiBvbmNlLCBhaGVhZCBvZiB0aW1lLCBpbiBhbiBpbnRlcm1lZGlhdGUgc3RlcCB3aG9zZSBpbnB1dHMgYXJlIGp1c3QgdGhlIHZhbHVlIGFuZCBcImdsb2JhbFwiIHBhcmFtZXRlcnNcbiAqIHN1Y2ggYXMgY3VycmVudCB6b29tIGxldmVsLlxuICpcbiAqIGBQb3NzaWJseUV2YWx1YXRlZFZhbHVlYCByZXByZXNlbnRzIHRoZSB0aHJlZSBwb3NzaWJsZSBvdXRjb21lcyBvZiB0aGlzIHN0ZXA6IGlmIHRoZSBpbnB1dCB2YWx1ZSB3YXMgYSBjb25zdGFudCBvclxuICogY2FtZXJhIGV4cHJlc3Npb24sIHRoZW4gdGhlIFwicG9zc2libHkgZXZhbHVhdGVkXCIgcmVzdWx0IGlzIGEgY29uc3RhbnQgdmFsdWUuIE90aGVyd2lzZSwgdGhlIGlucHV0IHZhbHVlIHdhcyBlaXRoZXJcbiAqIGEgc291cmNlIG9yIGNvbXBvc2l0ZSBleHByZXNzaW9uLCBhbmQgd2UgbXVzdCBkZWZlciBmaW5hbCBldmFsdWF0aW9uIHVudGlsIHN1cHBsaWVkIGEgZmVhdHVyZS4gV2Ugc2VwYXJhdGVcbiAqIHRoZSBzb3VyY2UgYW5kIGNvbXBvc2l0ZSBjYXNlcyBiZWNhdXNlIHRoZXkgYXJlIGhhbmRsZWQgZGlmZmVyZW50bHkgd2hlbiBnZW5lcmF0aW5nIEdMIGF0dHJpYnV0ZXMsIGJ1ZmZlcnMsIGFuZFxuICogdW5pZm9ybXMuXG4gKlxuICogTm90ZSB0aGF0IGBQb3NzaWJseUV2YWx1YXRlZFZhbHVlYCAoYW5kIGBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWVgLCBiZWxvdykgYXJlIF9ub3RfIHVzZWQgZm9yIHByb3BlcnRpZXMgdGhhdFxuICogZG8gbm90IGFsbG93IGRhdGEtZHJpdmVuIHZhbHVlcy4gRm9yIHN1Y2ggcHJvcGVydGllcywgd2Uga25vdyB0aGF0IHRoZSBcInBvc3NpYmx5IGV2YWx1YXRlZFwiIHJlc3VsdCBpcyBhbHdheXMgYSBjb25zdGFudFxuICogc2NhbGFyIHZhbHVlLiBTZWUgYmVsb3cuXG4gKlxuICogQHByaXZhdGVcbiAqL1xudHlwZSBQb3NzaWJseUV2YWx1YXRlZFZhbHVlPFQ+ID1cbiAgICB8IHtraW5kOiAnY29uc3RhbnQnLCB2YWx1ZTogVH1cbiAgICB8IFNvdXJjZUV4cHJlc3Npb25cbiAgICB8IENvbXBvc2l0ZUV4cHJlc3Npb247XG5cbi8qKlxuICogYFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZWAgaXMgdXNlZCBmb3IgZGF0YS1kcml2ZW4gcGFpbnQgYW5kIGxheW91dCBwcm9wZXJ0eSB2YWx1ZXMuIEl0IGhvbGRzIGFcbiAqIGBQb3NzaWJseUV2YWx1YXRlZFZhbHVlYCBhbmQgdGhlIGBHbG9iYWxQcm9wZXJ0aWVzYCB0aGF0IHdlcmUgdXNlZCB0byBnZW5lcmF0ZSBpdC4gWW91J3JlIG5vdCBhbGxvd2VkIHRvIHN1cHBseVxuICogYSBkaWZmZXJlbnQgc2V0IG9mIGBHbG9iYWxQcm9wZXJ0aWVzYCB3aGVuIHBlcmZvcm1pbmcgdGhlIGZpbmFsIGV2YWx1YXRpb24gYmVjYXVzZSB0aGV5IHdvdWxkIGJlIGlnbm9yZWQgaW4gdGhlXG4gKiBjYXNlIHdoZXJlIHRoZSBpbnB1dCB2YWx1ZSB3YXMgYSBjb25zdGFudCBvciBjYW1lcmEgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxUPiB7XG4gICAgcHJvcGVydHk6IERhdGFEcml2ZW5Qcm9wZXJ0eTxUPjtcbiAgICB2YWx1ZTogUG9zc2libHlFdmFsdWF0ZWRWYWx1ZTxUPjtcbiAgICBwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycztcblxuICAgIGNvbnN0cnVjdG9yKHByb3BlcnR5OiBEYXRhRHJpdmVuUHJvcGVydHk8VD4sIHZhbHVlOiBQb3NzaWJseUV2YWx1YXRlZFZhbHVlPFQ+LCBwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycykge1xuICAgICAgICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcbiAgICB9XG5cbiAgICBpc0NvbnN0YW50KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZS5raW5kID09PSAnY29uc3RhbnQnO1xuICAgIH1cblxuICAgIGNvbnN0YW50T3IodmFsdWU6IFQpOiBUIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUua2luZCA9PT0gJ2NvbnN0YW50Jykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUudmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBldmFsdWF0ZShmZWF0dXJlOiBGZWF0dXJlLCBmZWF0dXJlU3RhdGU6IEZlYXR1cmVTdGF0ZSwgY2Fub25pY2FsPzogQ2Fub25pY2FsVGlsZUlELCBhdmFpbGFibGVJbWFnZXM/OiBBcnJheTxzdHJpbmc+KTogVCB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BlcnR5LmV2YWx1YXRlKHRoaXMudmFsdWUsIHRoaXMucGFyYW1ldGVycywgZmVhdHVyZSwgZmVhdHVyZVN0YXRlLCBjYW5vbmljYWwsIGF2YWlsYWJsZUltYWdlcyk7XG4gICAgfVxufVxuXG4vKipcbiAqIEEgaGVscGVyIHR5cGU6IGdpdmVuIGFuIG9iamVjdCB0eXBlIGBQcm9wZXJ0aWVzYCB3aG9zZSB2YWx1ZXMgYXJlIGVhY2ggb2YgdHlwZSBgUHJvcGVydHk8VCwgUj5gLCBpdCBjYWxjdWxhdGVzXG4gKiBhbiBvYmplY3QgdHlwZSB3aXRoIHRoZSBzYW1lIGtleXMsIGFuZCB2YWx1ZXMgb2YgdHlwZSBgUmAuXG4gKlxuICogRm9yIHByb3BlcnRpZXMgdGhhdCBkb24ndCBhbGxvdyBkYXRhLWRyaXZlbiB2YWx1ZXMsIGBSYCBpcyBhIHNjYWxhciB0eXBlIHN1Y2ggYXMgYG51bWJlcmAsIGBzdHJpbmdgLCBvciBgQ29sb3JgLlxuICogRm9yIGRhdGEtZHJpdmVuIHByb3BlcnRpZXMsIGl0IGlzIGBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWVgLiBDcml0aWNhbGx5LCB0aGUgdHlwZSBkZWZpbml0aW9ucyBhcmUgc2V0IHVwXG4gKiBpbiBhIHdheSB0aGF0IGFsbG93cyBmbG93IHRvIGtub3cgd2hpY2ggb2YgdGhlc2UgdHdvIGNhc2VzIGFwcGxpZXMgZm9yIGFueSBnaXZlbiBwcm9wZXJ0eSBuYW1lLCBhbmQgaWYgeW91IGF0dGVtcHRcbiAqIHRvIHVzZSBhIGBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWVgIGFzIGlmIGl0IHdhcyBhIHNjYWxhciwgb3IgdmljZSB2ZXJzYSwgeW91IHdpbGwgZ2V0IGEgdHlwZSBlcnJvci4gKEhvd2V2ZXIsXG4gKiB0aGVyZSdzIGF0IGxlYXN0IG9uZSBjYXNlIGluIHdoaWNoIGZsb3cgZmFpbHMgdG8gcHJvZHVjZSBhIHR5cGUgZXJyb3IgdGhhdCB5b3Ugc2hvdWxkIGJlIGF3YXJlIG9mOiBpbiBhIGNvbnRleHQgc3VjaFxuICogYXMgYGxheWVyLnBhaW50LmdldCgnZm9vLW9wYWNpdHknKSA9PT0gMGAsIGlmIGBmb28tb3BhY2l0eWAgaXMgZGF0YS1kcml2ZW4sIHRoYW4gdGhlIGxlZnQtaGFuZCBzaWRlIGlzIG9mIHR5cGVcbiAqIGBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8bnVtYmVyPmAsIGJ1dCBmbG93IHdpbGwgbm90IGNvbXBsYWluIGFib3V0IGNvbXBhcmluZyB0aGlzIHRvIGEgbnVtYmVyIHVzaW5nIGA9PT1gLlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy8yMzU5LilcbiAqXG4gKiBUaGVyZSdzIGFsc28gYSB0aGlyZCwgc3BlY2lhbCBjYXNlIHBvc3NpYmxpdHkgZm9yIGBSYDogZm9yIGNyb3NzLWZhZGVkIHByb3BlcnRpZXMsIGl0J3MgYD9Dcm9zc0ZhZGVkPFQ+YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG50eXBlIFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZXM8UHJvcHM6IE9iamVjdD5cbiAgICA9ICRFeGFjdDwkT2JqTWFwPFByb3BzLCA8VCwgUj4ocDogUHJvcGVydHk8VCwgUj4pID0+IFI+PlxuXG4vKipcbiAqIGBQb3NzaWJseUV2YWx1YXRlZGAgc3RvcmVzIGEgbWFwIG9mIGFsbCAocHJvcGVydHkgbmFtZSwgYFJgKSBwYWlycyBmb3IgcGFpbnQgb3IgbGF5b3V0IHByb3BlcnRpZXMgb2YgYVxuICogZ2l2ZW4gbGF5ZXIgdHlwZS5cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBQb3NzaWJseUV2YWx1YXRlZDxQcm9wczogT2JqZWN0PiB7XG4gICAgX3Byb3BlcnRpZXM6IFByb3BlcnRpZXM8UHJvcHM+O1xuICAgIF92YWx1ZXM6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZXM8UHJvcHM+O1xuXG4gICAgY29uc3RydWN0b3IocHJvcGVydGllczogUHJvcGVydGllczxQcm9wcz4pIHtcbiAgICAgICAgdGhpcy5fcHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gICAgICAgIHRoaXMuX3ZhbHVlcyA9IChPYmplY3QuY3JlYXRlKHByb3BlcnRpZXMuZGVmYXVsdFBvc3NpYmx5RXZhbHVhdGVkVmFsdWVzKTogYW55KTtcbiAgICB9XG5cbiAgICBnZXQ8Uzogc3RyaW5nPihuYW1lOiBTKTogJEVsZW1lbnRUeXBlPFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZXM8UHJvcHM+LCBTPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZXNbbmFtZV07XG4gICAgfVxufVxuXG4vKipcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIGBQcm9wZXJ0eWAgZm9yIHByb3BlcnRpZXMgdGhhdCBkbyBub3QgcGVybWl0IGRhdGEtZHJpdmVuIChzb3VyY2Ugb3IgY29tcG9zaXRlKSBleHByZXNzaW9ucy5cbiAqIFRoaXMgcmVzdHJpY3Rpb24gYWxsb3dzIHVzIHRvIGRlY2xhcmUgc3RhdGljYWxseSB0aGF0IHRoZSByZXN1bHQgb2YgcG9zc2libHkgZXZhbHVhdGluZyB0aGlzIGtpbmQgb2YgcHJvcGVydHlcbiAqIGlzIGluIGZhY3QgYWx3YXlzIHRoZSBzY2FsYXIgdHlwZSBgVGAsIGFuZCBjYW4gYmUgdXNlZCB3aXRob3V0IGZ1cnRoZXIgZXZhbHVhdGluZyB0aGUgdmFsdWUgb24gYSBwZXItZmVhdHVyZSBiYXNpcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgRGF0YUNvbnN0YW50UHJvcGVydHk8VD4gaW1wbGVtZW50cyBQcm9wZXJ0eTxULCBUPiB7XG4gICAgc3BlY2lmaWNhdGlvbjogU3R5bGVQcm9wZXJ0eVNwZWNpZmljYXRpb247XG5cbiAgICBjb25zdHJ1Y3RvcihzcGVjaWZpY2F0aW9uOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbikge1xuICAgICAgICB0aGlzLnNwZWNpZmljYXRpb24gPSBzcGVjaWZpY2F0aW9uO1xuICAgIH1cblxuICAgIHBvc3NpYmx5RXZhbHVhdGUodmFsdWU6IFByb3BlcnR5VmFsdWU8VCwgVD4sIHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzKTogVCB7XG4gICAgICAgIGFzc2VydCghdmFsdWUuaXNEYXRhRHJpdmVuKCkpO1xuICAgICAgICByZXR1cm4gdmFsdWUuZXhwcmVzc2lvbi5ldmFsdWF0ZShwYXJhbWV0ZXJzKTtcbiAgICB9XG5cbiAgICBpbnRlcnBvbGF0ZShhOiBULCBiOiBULCB0OiBudW1iZXIpOiBUIHtcbiAgICAgICAgY29uc3QgaW50ZXJwOiA/KGE6IFQsIGI6IFQsIHQ6IG51bWJlcikgPT4gVCA9IChpbnRlcnBvbGF0ZTogYW55KVt0aGlzLnNwZWNpZmljYXRpb24udHlwZV07XG4gICAgICAgIGlmIChpbnRlcnApIHtcbiAgICAgICAgICAgIHJldHVybiBpbnRlcnAoYSwgYiwgdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiBgUHJvcGVydHlgIGZvciBwcm9wZXJ0aWVzIHRoYXQgcGVybWl0IGRhdGEtZHJpdmVuIChzb3VyY2Ugb3IgY29tcG9zaXRlKSBleHByZXNzaW9ucy5cbiAqIFRoZSByZXN1bHQgb2YgcG9zc2libHkgZXZhbHVhdGluZyB0aGlzIGtpbmQgb2YgcHJvcGVydHkgaXMgYFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxUPmA7IG9idGFpbmluZ1xuICogYSBzY2FsYXIgdmFsdWUgYFRgIHJlcXVpcmVzIGZ1cnRoZXIgZXZhbHVhdGlvbiBvbiBhIHBlci1mZWF0dXJlIGJhc2lzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhRHJpdmVuUHJvcGVydHk8VD4gaW1wbGVtZW50cyBQcm9wZXJ0eTxULCBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8VD4+IHtcbiAgICBzcGVjaWZpY2F0aW9uOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbjtcbiAgICBvdmVycmlkZXM6ID9PYmplY3Q7XG5cbiAgICBjb25zdHJ1Y3RvcihzcGVjaWZpY2F0aW9uOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbiwgb3ZlcnJpZGVzPzogT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuc3BlY2lmaWNhdGlvbiA9IHNwZWNpZmljYXRpb247XG4gICAgICAgIHRoaXMub3ZlcnJpZGVzID0gb3ZlcnJpZGVzO1xuICAgIH1cblxuICAgIHBvc3NpYmx5RXZhbHVhdGUodmFsdWU6IFByb3BlcnR5VmFsdWU8VCwgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPFQ+PiwgcGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMsIGNhbm9uaWNhbD86IENhbm9uaWNhbFRpbGVJRCwgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPik6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxUPiB7XG4gICAgICAgIGlmICh2YWx1ZS5leHByZXNzaW9uLmtpbmQgPT09ICdjb25zdGFudCcgfHwgdmFsdWUuZXhwcmVzc2lvbi5raW5kID09PSAnY2FtZXJhJykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWUodGhpcywge2tpbmQ6ICdjb25zdGFudCcsIHZhbHVlOiB2YWx1ZS5leHByZXNzaW9uLmV2YWx1YXRlKHBhcmFtZXRlcnMsIChudWxsOiBhbnkpLCB7fSwgY2Fub25pY2FsLCBhdmFpbGFibGVJbWFnZXMpfSwgcGFyYW1ldGVycyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZSh0aGlzLCB2YWx1ZS5leHByZXNzaW9uLCBwYXJhbWV0ZXJzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGludGVycG9sYXRlKGE6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxUPixcbiAgICAgICAgICAgICAgICBiOiBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8VD4sXG4gICAgICAgICAgICAgICAgdDogbnVtYmVyKTogUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPFQ+IHtcbiAgICAgICAgLy8gSWYgZWl0aGVyIHBvc3NpYmx5LWV2YWx1YXRlZCB2YWx1ZSBpcyBub24tY29uc3RhbnQsIGdpdmUgdXA6IHdlIGFyZW4ndCBhYmxlIHRvIGludGVycG9sYXRlIGRhdGEtZHJpdmVuIHZhbHVlcy5cbiAgICAgICAgaWYgKGEudmFsdWUua2luZCAhPT0gJ2NvbnN0YW50JyB8fCBiLnZhbHVlLmtpbmQgIT09ICdjb25zdGFudCcpIHtcbiAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3BlY2lhbCBjYXNlIGhhY2sgc29sZWx5IGZvciBmaWxsLW91dGxpbmUtY29sb3IuIFRoZSB1bmRlZmluZWQgdmFsdWUgaXMgc3Vic2VxdWVudGx5IGhhbmRsZWQgaW5cbiAgICAgICAgLy8gRmlsbFN0eWxlTGF5ZXIjcmVjYWxjdWxhdGUsIHdoaWNoIHNldHMgZmlsbC1vdXRsaW5lLWNvbG9yIHRvIHRoZSBmaWxsLWNvbG9yIHZhbHVlIGlmIHRoZSBmb3JtZXJcbiAgICAgICAgLy8gaXMgYSBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWUgY29udGFpbmluZyBhIGNvbnN0YW50IHVuZGVmaW5lZCB2YWx1ZS4gSW4gYWRkaXRpb24gdG8gdGhlXG4gICAgICAgIC8vIHJldHVybiB2YWx1ZSBoZXJlLCB0aGUgb3RoZXIgc291cmNlIG9mIGEgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlIGNvbnRhaW5pbmcgYSBjb25zdGFudFxuICAgICAgICAvLyB1bmRlZmluZWQgdmFsdWUgaXMgdGhlIFwiZGVmYXVsdCB2YWx1ZVwiIGZvciBmaWxsLW91dGxpbmUtY29sb3IgaGVsZCBpblxuICAgICAgICAvLyBgUHJvcGVydGllcyNkZWZhdWx0UG9zc2libHlFdmFsdWF0ZWRWYWx1ZXNgLCB3aGljaCBzZXJ2ZXMgYXMgdGhlIHByb3RvdHlwZSBvZlxuICAgICAgICAvLyBgUG9zc2libHlFdmFsdWF0ZWQjX3ZhbHVlc2AuXG4gICAgICAgIGlmIChhLnZhbHVlLnZhbHVlID09PSB1bmRlZmluZWQgfHwgYi52YWx1ZS52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZSh0aGlzLCB7a2luZDogJ2NvbnN0YW50JywgdmFsdWU6ICh1bmRlZmluZWQ6IGFueSl9LCBhLnBhcmFtZXRlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW50ZXJwOiA/KGE6IFQsIGI6IFQsIHQ6IG51bWJlcikgPT4gVCA9IChpbnRlcnBvbGF0ZTogYW55KVt0aGlzLnNwZWNpZmljYXRpb24udHlwZV07XG4gICAgICAgIGlmIChpbnRlcnApIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlKHRoaXMsIHtraW5kOiAnY29uc3RhbnQnLCB2YWx1ZTogaW50ZXJwKGEudmFsdWUudmFsdWUsIGIudmFsdWUudmFsdWUsIHQpfSwgYS5wYXJhbWV0ZXJzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXZhbHVhdGUodmFsdWU6IFBvc3NpYmx5RXZhbHVhdGVkVmFsdWU8VD4sIHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzLCBmZWF0dXJlOiBGZWF0dXJlLCBmZWF0dXJlU3RhdGU6IEZlYXR1cmVTdGF0ZSwgY2Fub25pY2FsPzogQ2Fub25pY2FsVGlsZUlELCBhdmFpbGFibGVJbWFnZXM/OiBBcnJheTxzdHJpbmc+KTogVCB7XG4gICAgICAgIGlmICh2YWx1ZS5raW5kID09PSAnY29uc3RhbnQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUuZXZhbHVhdGUocGFyYW1ldGVycywgZmVhdHVyZSwgZmVhdHVyZVN0YXRlLCBjYW5vbmljYWwsIGF2YWlsYWJsZUltYWdlcyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogQW4gaW1wbGVtZW50YXRpb24gb2YgYFByb3BlcnR5YCBmb3IgIGRhdGEgZHJpdmVuIGBsaW5lLXBhdHRlcm5gIHdoaWNoIGFyZSB0cmFuc2l0aW9uZWQgYnkgY3Jvc3MtZmFkaW5nXG4gKiByYXRoZXIgdGhhbiBpbnRlcnBvbGF0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0IGNsYXNzIENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHk8VD4gZXh0ZW5kcyBEYXRhRHJpdmVuUHJvcGVydHk8P0Nyb3NzRmFkZWQ8VD4+IHtcblxuICAgIHBvc3NpYmx5RXZhbHVhdGUodmFsdWU6IFByb3BlcnR5VmFsdWU8P0Nyb3NzRmFkZWQ8VD4sIFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTw/Q3Jvc3NGYWRlZDxUPj4+LCBwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycywgY2Fub25pY2FsPzogQ2Fub25pY2FsVGlsZUlELCBhdmFpbGFibGVJbWFnZXM/OiBBcnJheTxzdHJpbmc+KTogUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPD9Dcm9zc0ZhZGVkPFQ+PiB7XG4gICAgICAgIGlmICh2YWx1ZS52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZSh0aGlzLCB7a2luZDogJ2NvbnN0YW50JywgdmFsdWU6IHVuZGVmaW5lZH0sIHBhcmFtZXRlcnMpO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmV4cHJlc3Npb24ua2luZCA9PT0gJ2NvbnN0YW50Jykge1xuICAgICAgICAgICAgY29uc3QgZXZhbHVhdGVkVmFsdWUgPSB2YWx1ZS5leHByZXNzaW9uLmV2YWx1YXRlKHBhcmFtZXRlcnMsIChudWxsOiBhbnkpLCB7fSwgY2Fub25pY2FsLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICAgICAgY29uc3QgaXNJbWFnZUV4cHJlc3Npb24gPSB2YWx1ZS5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uLnR5cGUgPT09ICdyZXNvbHZlZEltYWdlJztcbiAgICAgICAgICAgIGNvbnN0IGNvbnN0YW50VmFsdWUgPSBpc0ltYWdlRXhwcmVzc2lvbiAmJiB0eXBlb2YgZXZhbHVhdGVkVmFsdWUgIT09ICdzdHJpbmcnID8gZXZhbHVhdGVkVmFsdWUubmFtZSA6IGV2YWx1YXRlZFZhbHVlO1xuICAgICAgICAgICAgY29uc3QgY29uc3RhbnQgPSB0aGlzLl9jYWxjdWxhdGUoY29uc3RhbnRWYWx1ZSwgY29uc3RhbnRWYWx1ZSwgY29uc3RhbnRWYWx1ZSwgcGFyYW1ldGVycyk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZSh0aGlzLCB7a2luZDogJ2NvbnN0YW50JywgdmFsdWU6IGNvbnN0YW50fSwgcGFyYW1ldGVycyk7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUuZXhwcmVzc2lvbi5raW5kID09PSAnY2FtZXJhJykge1xuICAgICAgICAgICAgY29uc3QgY2FtZXJhVmFsID0gdGhpcy5fY2FsY3VsYXRlKFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5leHByZXNzaW9uLmV2YWx1YXRlKHt6b29tOiBwYXJhbWV0ZXJzLnpvb20gLSAxLjB9KSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUuZXhwcmVzc2lvbi5ldmFsdWF0ZSh7em9vbTogcGFyYW1ldGVycy56b29tfSksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLmV4cHJlc3Npb24uZXZhbHVhdGUoe3pvb206IHBhcmFtZXRlcnMuem9vbSArIDEuMH0pLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlKHRoaXMsIHtraW5kOiAnY29uc3RhbnQnLCB2YWx1ZTogY2FtZXJhVmFsfSwgcGFyYW1ldGVycyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBzb3VyY2Ugb3IgY29tcG9zaXRlIGV4cHJlc3Npb25cbiAgICAgICAgICAgIHJldHVybiBuZXcgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlKHRoaXMsIHZhbHVlLmV4cHJlc3Npb24sIHBhcmFtZXRlcnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXZhbHVhdGUodmFsdWU6IFBvc3NpYmx5RXZhbHVhdGVkVmFsdWU8P0Nyb3NzRmFkZWQ8VD4+LCBnbG9iYWxzOiBFdmFsdWF0aW9uUGFyYW1ldGVycywgZmVhdHVyZTogRmVhdHVyZSwgZmVhdHVyZVN0YXRlOiBGZWF0dXJlU3RhdGUsIGNhbm9uaWNhbD86IENhbm9uaWNhbFRpbGVJRCwgYXZhaWxhYmxlSW1hZ2VzPzogQXJyYXk8c3RyaW5nPik6ID9Dcm9zc0ZhZGVkPFQ+IHtcbiAgICAgICAgaWYgKHZhbHVlLmtpbmQgPT09ICdzb3VyY2UnKSB7XG4gICAgICAgICAgICBjb25zdCBjb25zdGFudCA9IHZhbHVlLmV2YWx1YXRlKGdsb2JhbHMsIGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSwgY2Fub25pY2FsLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGN1bGF0ZShjb25zdGFudCwgY29uc3RhbnQsIGNvbnN0YW50LCBnbG9iYWxzKTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5raW5kID09PSAnY29tcG9zaXRlJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGN1bGF0ZShcbiAgICAgICAgICAgICAgICB2YWx1ZS5ldmFsdWF0ZSh7em9vbTogTWF0aC5mbG9vcihnbG9iYWxzLnpvb20pIC0gMS4wfSwgZmVhdHVyZSwgZmVhdHVyZVN0YXRlKSxcbiAgICAgICAgICAgICAgICB2YWx1ZS5ldmFsdWF0ZSh7em9vbTogTWF0aC5mbG9vcihnbG9iYWxzLnpvb20pfSwgZmVhdHVyZSwgZmVhdHVyZVN0YXRlKSxcbiAgICAgICAgICAgICAgICB2YWx1ZS5ldmFsdWF0ZSh7em9vbTogTWF0aC5mbG9vcihnbG9iYWxzLnpvb20pICsgMS4wfSwgZmVhdHVyZSwgZmVhdHVyZVN0YXRlKSxcbiAgICAgICAgICAgICAgICBnbG9iYWxzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9jYWxjdWxhdGUobWluOiBULCBtaWQ6IFQsIG1heDogVCwgcGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMpOiBDcm9zc0ZhZGVkPFQ+IHtcbiAgICAgICAgY29uc3QgeiA9IHBhcmFtZXRlcnMuem9vbTtcbiAgICAgICAgcmV0dXJuIHogPiBwYXJhbWV0ZXJzLnpvb21IaXN0b3J5Lmxhc3RJbnRlZ2VyWm9vbSA/IHtmcm9tOiBtaW4sIHRvOiBtaWR9IDoge2Zyb206IG1heCwgdG86IG1pZH07XG4gICAgfVxuXG4gICAgaW50ZXJwb2xhdGUoYTogUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPD9Dcm9zc0ZhZGVkPFQ+Pik6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTw/Q3Jvc3NGYWRlZDxUPj4ge1xuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG59XG4vKipcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIGBQcm9wZXJ0eWAgZm9yIGAqLXBhdHRlcm5gIGFuZCBgbGluZS1kYXNoYXJyYXlgLCB3aGljaCBhcmUgdHJhbnNpdGlvbmVkIGJ5IGNyb3NzLWZhZGluZ1xuICogcmF0aGVyIHRoYW4gaW50ZXJwb2xhdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgQ3Jvc3NGYWRlZFByb3BlcnR5PFQ+IGltcGxlbWVudHMgUHJvcGVydHk8VCwgP0Nyb3NzRmFkZWQ8VD4+IHtcbiAgICBzcGVjaWZpY2F0aW9uOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKHNwZWNpZmljYXRpb246IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHRoaXMuc3BlY2lmaWNhdGlvbiA9IHNwZWNpZmljYXRpb247XG4gICAgfVxuXG4gICAgcG9zc2libHlFdmFsdWF0ZSh2YWx1ZTogUHJvcGVydHlWYWx1ZTxULCA/Q3Jvc3NGYWRlZDxUPj4sIHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzLCBjYW5vbmljYWw/OiBDYW5vbmljYWxUaWxlSUQsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4pOiA/Q3Jvc3NGYWRlZDxUPiB7XG4gICAgICAgIGlmICh2YWx1ZS52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmV4cHJlc3Npb24ua2luZCA9PT0gJ2NvbnN0YW50Jykge1xuICAgICAgICAgICAgY29uc3QgY29uc3RhbnQgPSB2YWx1ZS5leHByZXNzaW9uLmV2YWx1YXRlKHBhcmFtZXRlcnMsIChudWxsOiBhbnkpLCB7fSwgY2Fub25pY2FsLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGN1bGF0ZShjb25zdGFudCwgY29uc3RhbnQsIGNvbnN0YW50LCBwYXJhbWV0ZXJzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFzc2VydCghdmFsdWUuaXNEYXRhRHJpdmVuKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGN1bGF0ZShcbiAgICAgICAgICAgICAgICB2YWx1ZS5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyhNYXRoLmZsb29yKHBhcmFtZXRlcnMuem9vbSAtIDEuMCksIHBhcmFtZXRlcnMpKSxcbiAgICAgICAgICAgICAgICB2YWx1ZS5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyhNYXRoLmZsb29yKHBhcmFtZXRlcnMuem9vbSksIHBhcmFtZXRlcnMpKSxcbiAgICAgICAgICAgICAgICB2YWx1ZS5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyhNYXRoLmZsb29yKHBhcmFtZXRlcnMuem9vbSArIDEuMCksIHBhcmFtZXRlcnMpKSxcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9jYWxjdWxhdGUobWluOiBULCBtaWQ6IFQsIG1heDogVCwgcGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMpOiA/Q3Jvc3NGYWRlZDxUPiB7XG4gICAgICAgIGNvbnN0IHogPSBwYXJhbWV0ZXJzLnpvb207XG4gICAgICAgIHJldHVybiB6ID4gcGFyYW1ldGVycy56b29tSGlzdG9yeS5sYXN0SW50ZWdlclpvb20gPyB7ZnJvbTogbWluLCB0bzogbWlkfSA6IHtmcm9tOiBtYXgsIHRvOiBtaWR9O1xuICAgIH1cblxuICAgIGludGVycG9sYXRlKGE6ID9Dcm9zc0ZhZGVkPFQ+KTogP0Nyb3NzRmFkZWQ8VD4ge1xuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG59XG5cbi8qKlxuICogQW4gaW1wbGVtZW50YXRpb24gb2YgYFByb3BlcnR5YCBmb3IgYGhlYXRtYXAtY29sb3JgIGFuZCBgbGluZS1ncmFkaWVudGAuIEludGVycG9sYXRpb24gaXMgYSBuby1vcCwgYW5kXG4gKiBldmFsdWF0aW9uIHJldHVybnMgYSBib29sZWFuIHZhbHVlIGluIG9yZGVyIHRvIGluZGljYXRlIGl0cyBwcmVzZW5jZSwgYnV0IHRoZSByZWFsXG4gKiBldmFsdWF0aW9uIGhhcHBlbnMgaW4gU3R5bGVMYXllciBjbGFzc2VzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0IGNsYXNzIENvbG9yUmFtcFByb3BlcnR5IGltcGxlbWVudHMgUHJvcGVydHk8Q29sb3IsIGJvb2xlYW4+IHtcbiAgICBzcGVjaWZpY2F0aW9uOiBTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKHNwZWNpZmljYXRpb246IFN0eWxlUHJvcGVydHlTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHRoaXMuc3BlY2lmaWNhdGlvbiA9IHNwZWNpZmljYXRpb247XG4gICAgfVxuXG4gICAgcG9zc2libHlFdmFsdWF0ZSh2YWx1ZTogUHJvcGVydHlWYWx1ZTxDb2xvciwgYm9vbGVhbj4sIHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzLCBjYW5vbmljYWw/OiBDYW5vbmljYWxUaWxlSUQsIGF2YWlsYWJsZUltYWdlcz86IEFycmF5PHN0cmluZz4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdmFsdWUuZXhwcmVzc2lvbi5ldmFsdWF0ZShwYXJhbWV0ZXJzLCAobnVsbDogYW55KSwge30sIGNhbm9uaWNhbCwgYXZhaWxhYmxlSW1hZ2VzKTtcbiAgICB9XG5cbiAgICBpbnRlcnBvbGF0ZSgpOiBib29sZWFuIHsgcmV0dXJuIGZhbHNlOyB9XG59XG5cbi8qKlxuICogYFByb3BlcnRpZXNgIGhvbGRzIG9iamVjdHMgY29udGFpbmluZyBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIGxheW91dCBvciBwYWludCBwcm9wZXJ0eSBzZXQgb2YgYSBnaXZlblxuICogbGF5ZXIgdHlwZS4gVGhlc2Ugb2JqZWN0cyBhcmUgaW1tdXRhYmxlLCBhbmQgdGhleSBhcmUgdXNlZCBhcyB0aGUgcHJvdG90eXBlcyBmb3IgdGhlIGBfdmFsdWVzYCBtZW1iZXJzIG9mXG4gKiBgVHJhbnNpdGlvbmFibGVgLCBgVHJhbnNpdGlvbmluZ2AsIGBMYXlvdXRgLCBhbmQgYFBvc3NpYmx5RXZhbHVhdGVkYC4gVGhpcyBhbGxvd3MgdGhlc2UgY2xhc3NlcyB0byBhdm9pZFxuICogZG9pbmcgd29yayBpbiB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgYSBwcm9wZXJ0eSBoYXMgbm8gZXhwbGljaXQgdmFsdWUgc2V0IGFuZCBzaG91bGQgYmUgY29uc2lkZXJlZCB0byB0YWtlXG4gKiBvbiB0aGUgZGVmYXVsdCB2YWx1ZTogdXNpbmcgYGZvciAoY29uc3QgcHJvcGVydHkgb2YgT2JqZWN0LmtleXModGhpcy5fdmFsdWVzKSlgLCB0aGV5IGNhbiBpdGVyYXRlIG92ZXJcbiAqIG9ubHkgdGhlIF9vd25fIHByb3BlcnRpZXMgb2YgYF92YWx1ZXNgLCBza2lwcGluZyByZXBlYXRlZCBjYWxjdWxhdGlvbiBvZiB0cmFuc2l0aW9ucyBhbmQgcG9zc2libGUvZmluYWxcbiAqIGV2YWx1YXRpb25zIGZvciBkZWZhdWx0cywgdGhlIHJlc3VsdCBvZiB3aGljaCB3aWxsIGFsd2F5cyBiZSB0aGUgc2FtZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgUHJvcGVydGllczxQcm9wczogT2JqZWN0PiB7XG4gICAgcHJvcGVydGllczogUHJvcHM7XG4gICAgZGVmYXVsdFByb3BlcnR5VmFsdWVzOiBQcm9wZXJ0eVZhbHVlczxQcm9wcz47XG4gICAgZGVmYXVsdFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZXM6IFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZXM8UHJvcHM+O1xuICAgIGRlZmF1bHRUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZXM6IFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlczxQcm9wcz47XG4gICAgZGVmYXVsdFBvc3NpYmx5RXZhbHVhdGVkVmFsdWVzOiBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWVzPFByb3BzPjtcbiAgICBvdmVycmlkYWJsZVByb3BlcnRpZXM6IEFycmF5PHN0cmluZz47XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiBQcm9wcykge1xuICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICAgICAgICB0aGlzLmRlZmF1bHRQcm9wZXJ0eVZhbHVlcyA9ICh7fTogYW55KTtcbiAgICAgICAgdGhpcy5kZWZhdWx0VHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlcyA9ICh7fTogYW55KTtcbiAgICAgICAgdGhpcy5kZWZhdWx0VHJhbnNpdGlvbmluZ1Byb3BlcnR5VmFsdWVzID0gKHt9OiBhbnkpO1xuICAgICAgICB0aGlzLmRlZmF1bHRQb3NzaWJseUV2YWx1YXRlZFZhbHVlcyA9ICh7fTogYW55KTtcbiAgICAgICAgdGhpcy5vdmVycmlkYWJsZVByb3BlcnRpZXMgPSAoW106IGFueSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wID0gcHJvcGVydGllc1twcm9wZXJ0eV07XG4gICAgICAgICAgICBpZiAocHJvcC5zcGVjaWZpY2F0aW9uLm92ZXJyaWRhYmxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vdmVycmlkYWJsZVByb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0UHJvcGVydHlWYWx1ZSA9IHRoaXMuZGVmYXVsdFByb3BlcnR5VmFsdWVzW3Byb3BlcnR5XSA9XG4gICAgICAgICAgICAgICAgbmV3IFByb3BlcnR5VmFsdWUocHJvcCwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWUgPSB0aGlzLmRlZmF1bHRUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWVzW3Byb3BlcnR5XSA9XG4gICAgICAgICAgICAgICAgbmV3IFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZShwcm9wKTtcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlc1twcm9wZXJ0eV0gPVxuICAgICAgICAgICAgICAgIGRlZmF1bHRUcmFuc2l0aW9uYWJsZVByb3BlcnR5VmFsdWUudW50cmFuc2l0aW9uZWQoKTtcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFBvc3NpYmx5RXZhbHVhdGVkVmFsdWVzW3Byb3BlcnR5XSA9XG4gICAgICAgICAgICAgICAgZGVmYXVsdFByb3BlcnR5VmFsdWUucG9zc2libHlFdmFsdWF0ZSgoe306IGFueSkpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5yZWdpc3RlcignRGF0YURyaXZlblByb3BlcnR5JywgRGF0YURyaXZlblByb3BlcnR5KTtcbnJlZ2lzdGVyKCdEYXRhQ29uc3RhbnRQcm9wZXJ0eScsIERhdGFDb25zdGFudFByb3BlcnR5KTtcbnJlZ2lzdGVyKCdDcm9zc0ZhZGVkRGF0YURyaXZlblByb3BlcnR5JywgQ3Jvc3NGYWRlZERhdGFEcml2ZW5Qcm9wZXJ0eSk7XG5yZWdpc3RlcignQ3Jvc3NGYWRlZFByb3BlcnR5JywgQ3Jvc3NGYWRlZFByb3BlcnR5KTtcbnJlZ2lzdGVyKCdDb2xvclJhbXBQcm9wZXJ0eScsIENvbG9yUmFtcFByb3BlcnR5KTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7ZW5kc1dpdGgsIGZpbHRlck9iamVjdH0gZnJvbSAnLi4vdXRpbC91dGlsJztcblxuaW1wb3J0IHN0eWxlU3BlYyBmcm9tICcuLi9zdHlsZS1zcGVjL3JlZmVyZW5jZS9sYXRlc3QnO1xuaW1wb3J0IHtcbiAgICB2YWxpZGF0ZVN0eWxlLFxuICAgIHZhbGlkYXRlTGF5b3V0UHJvcGVydHksXG4gICAgdmFsaWRhdGVQYWludFByb3BlcnR5LFxuICAgIGVtaXRWYWxpZGF0aW9uRXJyb3JzXG59IGZyb20gJy4vdmFsaWRhdGVfc3R5bGUnO1xuaW1wb3J0IHtFdmVudGVkfSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IHtMYXlvdXQsIFRyYW5zaXRpb25hYmxlLCBUcmFuc2l0aW9uaW5nLCBQcm9wZXJ0aWVzLCBQb3NzaWJseUV2YWx1YXRlZCwgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlfSBmcm9tICcuL3Byb3BlcnRpZXMnO1xuaW1wb3J0IHtzdXBwb3J0c1Byb3BlcnR5RXhwcmVzc2lvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgdHlwZSB7RmVhdHVyZVN0YXRlfSBmcm9tICcuLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUge0J1Y2tldH0gZnJvbSAnLi4vZGF0YS9idWNrZXQnO1xuaW1wb3J0IHR5cGUgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSB7RmVhdHVyZUZpbHRlcn0gZnJvbSAnLi4vc3R5bGUtc3BlYy9mZWF0dXJlX2ZpbHRlcic7XG5pbXBvcnQgdHlwZSB7VHJhbnNpdGlvblBhcmFtZXRlcnMsIFByb3BlcnR5VmFsdWV9IGZyb20gJy4vcHJvcGVydGllcyc7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uUGFyYW1ldGVycywge0Nyb3NzZmFkZVBhcmFtZXRlcnN9IGZyb20gJy4vZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi9nZW8vdHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIHtcbiAgICBMYXllclNwZWNpZmljYXRpb24sXG4gICAgRmlsdGVyU3BlY2lmaWNhdGlvblxufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcbmltcG9ydCB0eXBlIHtDdXN0b21MYXllckludGVyZmFjZX0gZnJvbSAnLi9zdHlsZV9sYXllci9jdXN0b21fc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL3VpL21hcCc7XG5pbXBvcnQgdHlwZSB7U3R5bGVTZXR0ZXJPcHRpb25zfSBmcm9tICcuL3N0eWxlJztcblxuY29uc3QgVFJBTlNJVElPTl9TVUZGSVggPSAnLXRyYW5zaXRpb24nO1xuXG5jbGFzcyBTdHlsZUxheWVyIGV4dGVuZHMgRXZlbnRlZCB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBtZXRhZGF0YTogbWl4ZWQ7XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIHNvdXJjZTogc3RyaW5nO1xuICAgIHNvdXJjZUxheWVyOiA/c3RyaW5nO1xuICAgIG1pbnpvb206ID9udW1iZXI7XG4gICAgbWF4em9vbTogP251bWJlcjtcbiAgICBmaWx0ZXI6IEZpbHRlclNwZWNpZmljYXRpb24gfCB2b2lkO1xuICAgIHZpc2liaWxpdHk6ICd2aXNpYmxlJyB8ICdub25lJyB8IHZvaWQ7XG4gICAgX2Nyb3NzZmFkZVBhcmFtZXRlcnM6IENyb3NzZmFkZVBhcmFtZXRlcnM7XG5cbiAgICBfdW5ldmFsdWF0ZWRMYXlvdXQ6IExheW91dDxhbnk+O1xuICAgICtsYXlvdXQ6IG1peGVkO1xuXG4gICAgX3RyYW5zaXRpb25hYmxlUGFpbnQ6IFRyYW5zaXRpb25hYmxlPGFueT47XG4gICAgX3RyYW5zaXRpb25pbmdQYWludDogVHJhbnNpdGlvbmluZzxhbnk+O1xuICAgICtwYWludDogbWl4ZWQ7XG5cbiAgICBfZmVhdHVyZUZpbHRlcjogRmVhdHVyZUZpbHRlcjtcblxuICAgICtxdWVyeVJhZGl1czogKGJ1Y2tldDogQnVja2V0KSA9PiBudW1iZXI7XG4gICAgK3F1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmU6IChxdWVyeUdlb21ldHJ5OiBBcnJheTxQb2ludD4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlOiBWZWN0b3JUaWxlRmVhdHVyZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVTdGF0ZTogRmVhdHVyZVN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnk6IEFycmF5PEFycmF5PFBvaW50Pj4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b29tOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IFRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsc1RvVGlsZVVuaXRzOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbFBvc01hdHJpeDogRmxvYXQzMkFycmF5KSA9PiBib29sZWFuIHwgbnVtYmVyO1xuXG4gICAgK29uQWRkOiA/KG1hcDogTWFwKSA9PiB2b2lkO1xuICAgICtvblJlbW92ZTogPyhtYXA6IE1hcCkgPT4gdm9pZDtcblxuICAgIGNvbnN0cnVjdG9yKGxheWVyOiBMYXllclNwZWNpZmljYXRpb24gfCBDdXN0b21MYXllckludGVyZmFjZSwgcHJvcGVydGllczogJFJlYWRPbmx5PHtsYXlvdXQ/OiBQcm9wZXJ0aWVzPCo+LCBwYWludD86IFByb3BlcnRpZXM8Kj59Pikge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIHRoaXMuaWQgPSBsYXllci5pZDtcbiAgICAgICAgdGhpcy50eXBlID0gbGF5ZXIudHlwZTtcbiAgICAgICAgdGhpcy5fZmVhdHVyZUZpbHRlciA9IHtmaWx0ZXI6ICgpID0+IHRydWUsIG5lZWRHZW9tZXRyeTogZmFsc2V9O1xuXG4gICAgICAgIGlmIChsYXllci50eXBlID09PSAnY3VzdG9tJykgcmV0dXJuO1xuXG4gICAgICAgIGxheWVyID0gKChsYXllcjogYW55KTogTGF5ZXJTcGVjaWZpY2F0aW9uKTtcblxuICAgICAgICB0aGlzLm1ldGFkYXRhID0gbGF5ZXIubWV0YWRhdGE7XG4gICAgICAgIHRoaXMubWluem9vbSA9IGxheWVyLm1pbnpvb207XG4gICAgICAgIHRoaXMubWF4em9vbSA9IGxheWVyLm1heHpvb207XG5cbiAgICAgICAgaWYgKGxheWVyLnR5cGUgIT09ICdiYWNrZ3JvdW5kJykge1xuICAgICAgICAgICAgdGhpcy5zb3VyY2UgPSBsYXllci5zb3VyY2U7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZUxheWVyID0gbGF5ZXJbJ3NvdXJjZS1sYXllciddO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXIgPSBsYXllci5maWx0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcGVydGllcy5sYXlvdXQpIHtcbiAgICAgICAgICAgIHRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0ID0gbmV3IExheW91dChwcm9wZXJ0aWVzLmxheW91dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcGVydGllcy5wYWludCkge1xuICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludCA9IG5ldyBUcmFuc2l0aW9uYWJsZShwcm9wZXJ0aWVzLnBhaW50KTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBsYXllci5wYWludCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0UGFpbnRQcm9wZXJ0eShwcm9wZXJ0eSwgbGF5ZXIucGFpbnRbcHJvcGVydHldLCB7dmFsaWRhdGU6IGZhbHNlfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIGxheWVyLmxheW91dCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0TGF5b3V0UHJvcGVydHkocHJvcGVydHksIGxheWVyLmxheW91dFtwcm9wZXJ0eV0sIHt2YWxpZGF0ZTogZmFsc2V9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvbmluZ1BhaW50ID0gdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC51bnRyYW5zaXRpb25lZCgpO1xuICAgICAgICAgICAgLy8kRmxvd0ZpeE1lXG4gICAgICAgICAgICB0aGlzLnBhaW50ID0gbmV3IFBvc3NpYmx5RXZhbHVhdGVkKHByb3BlcnRpZXMucGFpbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0Q3Jvc3NmYWRlUGFyYW1ldGVycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Nyb3NzZmFkZVBhcmFtZXRlcnM7XG4gICAgfVxuXG4gICAgZ2V0TGF5b3V0UHJvcGVydHkobmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGlmIChuYW1lID09PSAndmlzaWJpbGl0eScpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZpc2liaWxpdHk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQuZ2V0VmFsdWUobmFtZSk7XG4gICAgfVxuXG4gICAgc2V0TGF5b3V0UHJvcGVydHkobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55LCBvcHRpb25zOiBTdHlsZVNldHRlck9wdGlvbnMgPSB7fSkge1xuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gYGxheWVycy4ke3RoaXMuaWR9LmxheW91dC4ke25hbWV9YDtcbiAgICAgICAgICAgIGlmICh0aGlzLl92YWxpZGF0ZSh2YWxpZGF0ZUxheW91dFByb3BlcnR5LCBrZXksIG5hbWUsIHZhbHVlLCBvcHRpb25zKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuYW1lID09PSAndmlzaWJpbGl0eScpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaWJpbGl0eSA9IHZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQuc2V0VmFsdWUobmFtZSwgdmFsdWUpO1xuICAgIH1cblxuICAgIGdldFBhaW50UHJvcGVydHkobmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGlmIChlbmRzV2l0aChuYW1lLCBUUkFOU0lUSU9OX1NVRkZJWCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50LmdldFRyYW5zaXRpb24obmFtZS5zbGljZSgwLCAtVFJBTlNJVElPTl9TVUZGSVgubGVuZ3RoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5nZXRWYWx1ZShuYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldFBhaW50UHJvcGVydHkobmFtZTogc3RyaW5nLCB2YWx1ZTogbWl4ZWQsIG9wdGlvbnM6IFN0eWxlU2V0dGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBgbGF5ZXJzLiR7dGhpcy5pZH0ucGFpbnQuJHtuYW1lfWA7XG4gICAgICAgICAgICBpZiAodGhpcy5fdmFsaWRhdGUodmFsaWRhdGVQYWludFByb3BlcnR5LCBrZXksIG5hbWUsIHZhbHVlLCBvcHRpb25zKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbmRzV2l0aChuYW1lLCBUUkFOU0lUSU9OX1NVRkZJWCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuc2V0VHJhbnNpdGlvbihuYW1lLnNsaWNlKDAsIC1UUkFOU0lUSU9OX1NVRkZJWC5sZW5ndGgpLCAodmFsdWU6IGFueSkgfHwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zaXRpb25hYmxlID0gdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5fdmFsdWVzW25hbWVdO1xuICAgICAgICAgICAgY29uc3QgaXNDcm9zc0ZhZGVkUHJvcGVydHkgPSB0cmFuc2l0aW9uYWJsZS5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uW1wicHJvcGVydHktdHlwZVwiXSA9PT0gJ2Nyb3NzLWZhZGVkLWRhdGEtZHJpdmVuJztcbiAgICAgICAgICAgIGNvbnN0IHdhc0RhdGFEcml2ZW4gPSB0cmFuc2l0aW9uYWJsZS52YWx1ZS5pc0RhdGFEcml2ZW4oKTtcbiAgICAgICAgICAgIGNvbnN0IG9sZFZhbHVlID0gdHJhbnNpdGlvbmFibGUudmFsdWU7XG5cbiAgICAgICAgICAgIHRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuc2V0VmFsdWUobmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlU3BlY2lhbFBhaW50UHJvcGVydHlVcGRhdGUobmFtZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5fdmFsdWVzW25hbWVdLnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgaXNEYXRhRHJpdmVuID0gbmV3VmFsdWUuaXNEYXRhRHJpdmVuKCk7XG5cbiAgICAgICAgICAgIC8vIGlmIGEgY3Jvc3MtZmFkZWQgdmFsdWUgaXMgY2hhbmdlZCwgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIG5ldyBpY29ucyBnZXQgYWRkZWQgdG8gZWFjaCB0aWxlJ3MgaWNvbkF0bGFzXG4gICAgICAgICAgICAvLyBzbyBhIGNhbGwgdG8gX3VwZGF0ZUxheWVyIGlzIG5lY2Vzc2FyeSwgYW5kIHdlIHJldHVybiB0cnVlIGZyb20gdGhpcyBmdW5jdGlvbiBzbyBpdCBnZXRzIGNhbGxlZCBpblxuICAgICAgICAgICAgLy8gU3R5bGUjc2V0UGFpbnRQcm9wZXJ0eVxuICAgICAgICAgICAgcmV0dXJuIGlzRGF0YURyaXZlbiB8fCB3YXNEYXRhRHJpdmVuIHx8IGlzQ3Jvc3NGYWRlZFByb3BlcnR5IHx8IHRoaXMuX2hhbmRsZU92ZXJyaWRhYmxlUGFpbnRQcm9wZXJ0eVVwZGF0ZShuYW1lLCBvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2hhbmRsZVNwZWNpYWxQYWludFByb3BlcnR5VXBkYXRlKF86IHN0cmluZykge1xuICAgICAgICAvLyBOby1vcDsgY2FuIGJlIG92ZXJyaWRkZW4gYnkgZGVyaXZlZCBjbGFzc2VzLlxuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIF9oYW5kbGVPdmVycmlkYWJsZVBhaW50UHJvcGVydHlVcGRhdGU8VCwgUj4obmFtZTogc3RyaW5nLCBvbGRWYWx1ZTogUHJvcGVydHlWYWx1ZTxULCBSPiwgbmV3VmFsdWU6IFByb3BlcnR5VmFsdWU8VCwgUj4pOiBib29sZWFuIHtcbiAgICAgICAgLy8gTm8tb3A7IGNhbiBiZSBvdmVycmlkZGVuIGJ5IGRlcml2ZWQgY2xhc3Nlcy5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlzSGlkZGVuKHpvb206IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5taW56b29tICYmIHpvb20gPCB0aGlzLm1pbnpvb20pIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAodGhpcy5tYXh6b29tICYmIHpvb20gPj0gdGhpcy5tYXh6b29tKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlzaWJpbGl0eSA9PT0gJ25vbmUnO1xuICAgIH1cblxuICAgIHVwZGF0ZVRyYW5zaXRpb25zKHBhcmFtZXRlcnM6IFRyYW5zaXRpb25QYXJhbWV0ZXJzKSB7XG4gICAgICAgIHRoaXMuX3RyYW5zaXRpb25pbmdQYWludCA9IHRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQudHJhbnNpdGlvbmVkKHBhcmFtZXRlcnMsIHRoaXMuX3RyYW5zaXRpb25pbmdQYWludCk7XG4gICAgfVxuXG4gICAgaGFzVHJhbnNpdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zaXRpb25pbmdQYWludC5oYXNUcmFuc2l0aW9uKCk7XG4gICAgfVxuXG4gICAgcmVjYWxjdWxhdGUocGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMsIGF2YWlsYWJsZUltYWdlczogQXJyYXk8c3RyaW5nPikge1xuICAgICAgICBpZiAocGFyYW1ldGVycy5nZXRDcm9zc2ZhZGVQYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICB0aGlzLl9jcm9zc2ZhZGVQYXJhbWV0ZXJzID0gcGFyYW1ldGVycy5nZXRDcm9zc2ZhZGVQYXJhbWV0ZXJzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQpIHtcbiAgICAgICAgICAgICh0aGlzOiBhbnkpLmxheW91dCA9IHRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0LnBvc3NpYmx5RXZhbHVhdGUocGFyYW1ldGVycywgdW5kZWZpbmVkLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgKHRoaXM6IGFueSkucGFpbnQgPSB0aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQucG9zc2libHlFdmFsdWF0ZShwYXJhbWV0ZXJzLCB1bmRlZmluZWQsIGF2YWlsYWJsZUltYWdlcyk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICBjb25zdCBvdXRwdXQ6IGFueSA9IHtcbiAgICAgICAgICAgICdpZCc6IHRoaXMuaWQsXG4gICAgICAgICAgICAndHlwZSc6IHRoaXMudHlwZSxcbiAgICAgICAgICAgICdzb3VyY2UnOiB0aGlzLnNvdXJjZSxcbiAgICAgICAgICAgICdzb3VyY2UtbGF5ZXInOiB0aGlzLnNvdXJjZUxheWVyLFxuICAgICAgICAgICAgJ21ldGFkYXRhJzogdGhpcy5tZXRhZGF0YSxcbiAgICAgICAgICAgICdtaW56b29tJzogdGhpcy5taW56b29tLFxuICAgICAgICAgICAgJ21heHpvb20nOiB0aGlzLm1heHpvb20sXG4gICAgICAgICAgICAnZmlsdGVyJzogdGhpcy5maWx0ZXIsXG4gICAgICAgICAgICAnbGF5b3V0JzogdGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQgJiYgdGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQuc2VyaWFsaXplKCksXG4gICAgICAgICAgICAncGFpbnQnOiB0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50ICYmIHRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuc2VyaWFsaXplKClcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy52aXNpYmlsaXR5KSB7XG4gICAgICAgICAgICBvdXRwdXQubGF5b3V0ID0gb3V0cHV0LmxheW91dCB8fCB7fTtcbiAgICAgICAgICAgIG91dHB1dC5sYXlvdXQudmlzaWJpbGl0eSA9IHRoaXMudmlzaWJpbGl0eTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmaWx0ZXJPYmplY3Qob3V0cHV0LCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAhKGtleSA9PT0gJ2xheW91dCcgJiYgIU9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGgpICYmXG4gICAgICAgICAgICAgICAgIShrZXkgPT09ICdwYWludCcgJiYgIU9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfdmFsaWRhdGUodmFsaWRhdGU6IEZ1bmN0aW9uLCBrZXk6IHN0cmluZywgbmFtZTogc3RyaW5nLCB2YWx1ZTogbWl4ZWQsIG9wdGlvbnM6IFN0eWxlU2V0dGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMudmFsaWRhdGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVtaXRWYWxpZGF0aW9uRXJyb3JzKHRoaXMsIHZhbGlkYXRlLmNhbGwodmFsaWRhdGVTdHlsZSwge1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgbGF5ZXJUeXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICBvYmplY3RLZXk6IG5hbWUsXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIHN0eWxlU3BlYyxcbiAgICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy8yNDA3XG4gICAgICAgICAgICBzdHlsZToge2dseXBoczogdHJ1ZSwgc3ByaXRlOiB0cnVlfVxuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgaXMzRCgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlzVGlsZUNsaXBwZWQoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBoYXNPZmZzY3JlZW5QYXNzKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmVzaXplKCkge1xuICAgICAgICAvLyBub29wXG4gICAgfVxuXG4gICAgaXNTdGF0ZURlcGVuZGVudCgpIHtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiAodGhpczogYW55KS5wYWludC5fdmFsdWVzKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9ICh0aGlzOiBhbnkpLnBhaW50LmdldChwcm9wZXJ0eSk7XG4gICAgICAgICAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZSkgfHwgIXN1cHBvcnRzUHJvcGVydHlFeHByZXNzaW9uKHZhbHVlLnByb3BlcnR5LnNwZWNpZmljYXRpb24pKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICgodmFsdWUudmFsdWUua2luZCA9PT0gJ3NvdXJjZScgfHwgdmFsdWUudmFsdWUua2luZCA9PT0gJ2NvbXBvc2l0ZScpICYmXG4gICAgICAgICAgICAgICAgdmFsdWUudmFsdWUuaXNTdGF0ZURlcGVuZGVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFN0eWxlTGF5ZXI7XG4iLCIvLyBAZmxvd1xuXG4vLyBOb3RlOiBhbGwgXCJzaXplc1wiIGFyZSBtZWFzdXJlZCBpbiBieXRlc1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB0eXBlIHtUcmFuc2ZlcmFibGV9IGZyb20gJy4uL3R5cGVzL3RyYW5zZmVyYWJsZSc7XG5cbmNvbnN0IHZpZXdUeXBlcyA9IHtcbiAgICAnSW50OCc6IEludDhBcnJheSxcbiAgICAnVWludDgnOiBVaW50OEFycmF5LFxuICAgICdJbnQxNic6IEludDE2QXJyYXksXG4gICAgJ1VpbnQxNic6IFVpbnQxNkFycmF5LFxuICAgICdJbnQzMic6IEludDMyQXJyYXksXG4gICAgJ1VpbnQzMic6IFVpbnQzMkFycmF5LFxuICAgICdGbG9hdDMyJzogRmxvYXQzMkFycmF5XG59O1xuXG5leHBvcnQgdHlwZSBWaWV3VHlwZSA9ICRLZXlzPHR5cGVvZiB2aWV3VHlwZXM+O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdCB7XG4gICAgX3BvczE6IG51bWJlcjtcbiAgICBfcG9zMjogbnVtYmVyO1xuICAgIF9wb3M0OiBudW1iZXI7XG4gICAgX3Bvczg6IG51bWJlcjtcbiAgICArX3N0cnVjdEFycmF5OiBTdHJ1Y3RBcnJheTtcblxuICAgIC8vIFRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBhcmUgZGVmaW5lZCBvbiB0aGUgcHJvdG90eXBlIG9mIHN1YiBjbGFzc2VzLlxuICAgIHNpemU6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7U3RydWN0QXJyYXl9IHN0cnVjdEFycmF5IFRoZSBTdHJ1Y3RBcnJheSB0aGUgc3RydWN0IGlzIHN0b3JlZCBpblxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIHN0cnVjdCBpbiB0aGUgU3RydWN0QXJyYXkuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihzdHJ1Y3RBcnJheTogU3RydWN0QXJyYXksIGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgKHRoaXM6IGFueSkuX3N0cnVjdEFycmF5ID0gc3RydWN0QXJyYXk7XG4gICAgICAgIHRoaXMuX3BvczEgPSBpbmRleCAqIHRoaXMuc2l6ZTtcbiAgICAgICAgdGhpcy5fcG9zMiA9IHRoaXMuX3BvczEgLyAyO1xuICAgICAgICB0aGlzLl9wb3M0ID0gdGhpcy5fcG9zMSAvIDQ7XG4gICAgICAgIHRoaXMuX3BvczggPSB0aGlzLl9wb3MxIC8gODtcbiAgICB9XG59XG5cbmNvbnN0IERFRkFVTFRfQ0FQQUNJVFkgPSAxMjg7XG5jb25zdCBSRVNJWkVfTVVMVElQTElFUiA9IDU7XG5cbmV4cG9ydCB0eXBlIFN0cnVjdEFycmF5TWVtYmVyID0ge1xuICAgIG5hbWU6IHN0cmluZyxcbiAgICB0eXBlOiBWaWV3VHlwZSxcbiAgICBjb21wb25lbnRzOiBudW1iZXIsXG4gICAgb2Zmc2V0OiBudW1iZXJcbn07XG5cbmV4cG9ydCB0eXBlIFN0cnVjdEFycmF5TGF5b3V0ID0ge1xuICAgIG1lbWJlcnM6IEFycmF5PFN0cnVjdEFycmF5TWVtYmVyPixcbiAgICBzaXplOiBudW1iZXIsXG4gICAgYWxpZ25tZW50OiA/bnVtYmVyXG59XG5cbmV4cG9ydCB0eXBlIFNlcmlhbGl6ZWRTdHJ1Y3RBcnJheSA9IHtcbiAgICBsZW5ndGg6IG51bWJlcixcbiAgICBhcnJheUJ1ZmZlcjogQXJyYXlCdWZmZXJcbn07XG5cbi8qKlxuICogYFN0cnVjdEFycmF5YCBwcm92aWRlcyBhbiBhYnN0cmFjdGlvbiBvdmVyIGBBcnJheUJ1ZmZlcmAgYW5kIGBUeXBlZEFycmF5YFxuICogbWFraW5nIGl0IGJlaGF2ZSBsaWtlIGFuIGFycmF5IG9mIHR5cGVkIHN0cnVjdHMuXG4gKlxuICogQ29uY2VwdHVhbGx5LCBhIFN0cnVjdEFycmF5IGlzIGNvbXByaXNlZCBvZiBlbGVtZW50cywgaS5lLiwgaW5zdGFuY2VzIG9mIGl0c1xuICogYXNzb2NpYXRlZCBzdHJ1Y3QgdHlwZS4gRWFjaCBwYXJ0aWN1bGFyIHN0cnVjdCB0eXBlLCB0b2dldGhlciB3aXRoIGFuXG4gKiBhbGlnbm1lbnQgc2l6ZSwgZGV0ZXJtaW5lcyB0aGUgbWVtb3J5IGxheW91dCBvZiBhIFN0cnVjdEFycmF5IHdob3NlIGVsZW1lbnRzXG4gKiBhcmUgb2YgdGhhdCB0eXBlLiAgVGh1cywgZm9yIGVhY2ggc3VjaCBsYXlvdXQgdGhhdCB3ZSBuZWVkLCB3ZSBoYXZlXG4gKiBhIGNvcnJzZXBvbmRpbmcgU3RydWN0QXJyYXlMYXlvdXQgY2xhc3MsIGluaGVyaXRpbmcgZnJvbSBTdHJ1Y3RBcnJheSBhbmRcbiAqIGltcGxlbWVudGluZyBgZW1wbGFjZUJhY2soKWAgYW5kIGBfcmVmcmVzaFZpZXdzKClgLlxuICpcbiAqIEluIHNvbWUgY2FzZXMsIHdoZXJlIHdlIG5lZWQgdG8gYWNjZXNzIHBhcnRpY3VsYXIgZWxlbWVudHMgb2YgYSBTdHJ1Y3RBcnJheSxcbiAqIHdlIGltcGxlbWVudCBhIG1vcmUgc3BlY2lmaWMgc3ViY2xhc3MgdGhhdCBpbmhlcml0cyBmcm9tIG9uZSBvZiB0aGVcbiAqIFN0cnVjdEFycmF5TGF5b3V0cyBhbmQgYWRkcyBhIGBnZXQoaSk6IFRgIGFjY2Vzc29yIHRoYXQgcmV0dXJucyBhIHN0cnVjdHVyZWRcbiAqIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSBwcm94aWVzIGludG8gdGhlIHVuZGVybHlpbmcgbWVtb3J5IHNwYWNlIGZvciB0aGVcbiAqIGktdGggZWxlbWVudC4gIFRoaXMgYWZmb3JkcyB0aGUgY29udmllbmNlIG9mIHdvcmtpbmcgd2l0aCAoc2VlbWluZ2x5KSBwbGFpblxuICogSmF2YXNjcmlwdCBvYmplY3RzIHdpdGhvdXQgdGhlIG92ZXJoZWFkIG9mIHNlcmlhbGl6aW5nL2Rlc2VyaWFsaXppbmcgdGhlbVxuICogaW50byBBcnJheUJ1ZmZlcnMgZm9yIGVmZmljaWVudCB3ZWIgd29ya2VyIHRyYW5zZmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5IHtcbiAgICBjYXBhY2l0eTogbnVtYmVyO1xuICAgIGxlbmd0aDogbnVtYmVyO1xuICAgIGlzVHJhbnNmZXJyZWQ6IGJvb2xlYW47XG4gICAgYXJyYXlCdWZmZXI6IEFycmF5QnVmZmVyO1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuXG4gICAgLy8gVGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIGFyZSBkZWZpbmVkIG9uIHRoZSBwcm90b3R5cGUuXG4gICAgbWVtYmVyczogQXJyYXk8U3RydWN0QXJyYXlNZW1iZXI+O1xuICAgIGJ5dGVzUGVyRWxlbWVudDogbnVtYmVyO1xuICAgICtlbXBsYWNlQmFjazogRnVuY3Rpb247XG4gICAgK2VtcGxhY2U6IEZ1bmN0aW9uO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuaXNUcmFuc2ZlcnJlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNhcGFjaXR5ID0gLTE7XG4gICAgICAgIHRoaXMucmVzaXplKDApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlcmlhbGl6ZSBhIFN0cnVjdEFycmF5IGluc3RhbmNlLiAgU2VyaWFsaXplcyBib3RoIHRoZSByYXcgZGF0YSBhbmQgdGhlXG4gICAgICogbWV0YWRhdGEgbmVlZGVkIHRvIHJlY29uc3RydWN0IHRoZSBTdHJ1Y3RBcnJheSBiYXNlIGNsYXNzIGR1cmluZ1xuICAgICAqIGRlc2VyaWFsaXphdGlvbi5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHN0YXRpYyBzZXJpYWxpemUoYXJyYXk6IFN0cnVjdEFycmF5LCB0cmFuc2ZlcmFibGVzPzogQXJyYXk8VHJhbnNmZXJhYmxlPik6IFNlcmlhbGl6ZWRTdHJ1Y3RBcnJheSB7XG4gICAgICAgIGFzc2VydCghYXJyYXkuaXNUcmFuc2ZlcnJlZCk7XG5cbiAgICAgICAgYXJyYXkuX3RyaW0oKTtcblxuICAgICAgICBpZiAodHJhbnNmZXJhYmxlcykge1xuICAgICAgICAgICAgYXJyYXkuaXNUcmFuc2ZlcnJlZCA9IHRydWU7XG4gICAgICAgICAgICB0cmFuc2ZlcmFibGVzLnB1c2goYXJyYXkuYXJyYXlCdWZmZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxlbmd0aDogYXJyYXkubGVuZ3RoLFxuICAgICAgICAgICAgYXJyYXlCdWZmZXI6IGFycmF5LmFycmF5QnVmZmVyLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHN0YXRpYyBkZXNlcmlhbGl6ZShpbnB1dDogU2VyaWFsaXplZFN0cnVjdEFycmF5KSB7XG4gICAgICAgIGNvbnN0IHN0cnVjdEFycmF5ID0gT2JqZWN0LmNyZWF0ZSh0aGlzLnByb3RvdHlwZSk7XG4gICAgICAgIHN0cnVjdEFycmF5LmFycmF5QnVmZmVyID0gaW5wdXQuYXJyYXlCdWZmZXI7XG4gICAgICAgIHN0cnVjdEFycmF5Lmxlbmd0aCA9IGlucHV0Lmxlbmd0aDtcbiAgICAgICAgc3RydWN0QXJyYXkuY2FwYWNpdHkgPSBpbnB1dC5hcnJheUJ1ZmZlci5ieXRlTGVuZ3RoIC8gc3RydWN0QXJyYXkuYnl0ZXNQZXJFbGVtZW50O1xuICAgICAgICBzdHJ1Y3RBcnJheS5fcmVmcmVzaFZpZXdzKCk7XG4gICAgICAgIHJldHVybiBzdHJ1Y3RBcnJheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNpemUgdGhlIGFycmF5IHRvIGRpc2NhcmQgdW51c2VkIGNhcGFjaXR5LlxuICAgICAqL1xuICAgIF90cmltKCkge1xuICAgICAgICBpZiAodGhpcy5sZW5ndGggIT09IHRoaXMuY2FwYWNpdHkpIHtcbiAgICAgICAgICAgIHRoaXMuY2FwYWNpdHkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgICAgIHRoaXMuYXJyYXlCdWZmZXIgPSB0aGlzLmFycmF5QnVmZmVyLnNsaWNlKDAsIHRoaXMubGVuZ3RoICogdGhpcy5ieXRlc1BlckVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5fcmVmcmVzaFZpZXdzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNldHMgdGhlIHRoZSBsZW5ndGggb2YgdGhlIGFycmF5IHRvIDAgd2l0aG91dCBkZS1hbGxvY2F0aW5nIGNhcGNhY2l0eS5cbiAgICAgKi9cbiAgICBjbGVhcigpIHtcbiAgICAgICAgdGhpcy5sZW5ndGggPSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc2l6ZSB0aGUgYXJyYXkuXG4gICAgICogSWYgYG5gIGlzIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBsZW5ndGggdGhlbiBhZGRpdGlvbmFsIGVsZW1lbnRzIHdpdGggdW5kZWZpbmVkIHZhbHVlcyBhcmUgYWRkZWQuXG4gICAgICogSWYgYG5gIGlzIGxlc3MgdGhhbiB0aGUgY3VycmVudCBsZW5ndGggdGhlbiB0aGUgYXJyYXkgd2lsbCBiZSByZWR1Y2VkIHRvIHRoZSBmaXJzdCBgbmAgZWxlbWVudHMuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG5ldyBzaXplIG9mIHRoZSBhcnJheS5cbiAgICAgKi9cbiAgICByZXNpemUobjogbnVtYmVyKSB7XG4gICAgICAgIGFzc2VydCghdGhpcy5pc1RyYW5zZmVycmVkKTtcbiAgICAgICAgdGhpcy5yZXNlcnZlKG4pO1xuICAgICAgICB0aGlzLmxlbmd0aCA9IG47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5kaWNhdGUgYSBwbGFubmVkIGluY3JlYXNlIGluIHNpemUsIHNvIHRoYXQgYW55IG5lY2Vzc2FyeSBhbGxvY2F0aW9uIG1heVxuICAgICAqIGJlIGRvbmUgb25jZSwgYWhlYWQgb2YgdGltZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgZXhwZWN0ZWQgc2l6ZSBvZiB0aGUgYXJyYXkuXG4gICAgICovXG4gICAgcmVzZXJ2ZShuOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKG4gPiB0aGlzLmNhcGFjaXR5KSB7XG4gICAgICAgICAgICB0aGlzLmNhcGFjaXR5ID0gTWF0aC5tYXgobiwgTWF0aC5mbG9vcih0aGlzLmNhcGFjaXR5ICogUkVTSVpFX01VTFRJUExJRVIpLCBERUZBVUxUX0NBUEFDSVRZKTtcbiAgICAgICAgICAgIHRoaXMuYXJyYXlCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIodGhpcy5jYXBhY2l0eSAqIHRoaXMuYnl0ZXNQZXJFbGVtZW50KTtcblxuICAgICAgICAgICAgY29uc3Qgb2xkVWludDhBcnJheSA9IHRoaXMudWludDg7XG4gICAgICAgICAgICB0aGlzLl9yZWZyZXNoVmlld3MoKTtcbiAgICAgICAgICAgIGlmIChvbGRVaW50OEFycmF5KSB0aGlzLnVpbnQ4LnNldChvbGRVaW50OEFycmF5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBUeXBlZEFycmF5IHZpZXdzIGZvciB0aGUgY3VycmVudCBBcnJheUJ1ZmZlci5cbiAgICAgKi9cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ19yZWZyZXNoVmlld3MoKSBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVhY2ggY29uY3JldGUgU3RydWN0QXJyYXkgbGF5b3V0Jyk7XG4gICAgfVxufVxuXG4vKipcbiAqIEdpdmVuIGEgbGlzdCBvZiBtZW1iZXIgZmllbGRzLCBjcmVhdGUgYSBmdWxsIFN0cnVjdEFycmF5TGF5b3V0LCBpblxuICogcGFydGljdWxhciBjYWxjdWxhdGluZyB0aGUgY29ycmVjdCBieXRlIG9mZnNldCBmb3IgZWFjaCBmaWVsZC4gIFRoaXMgZGF0YVxuICogaXMgdXNlZCBhdCBidWlsZCB0aW1lIHRvIGdlbmVyYXRlIFN0cnVjdEFycmF5TGF5b3V0XyojZW1wbGFjZUJhY2soKSBhbmRcbiAqIG90aGVyIGFjY2Vzc29ycywgYW5kIGF0IHJ1bnRpbWUgZm9yIGJpbmRpbmcgdmVydGV4IGJ1ZmZlciBhdHRyaWJ1dGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUxheW91dChcbiAgICBtZW1iZXJzOiBBcnJheTx7IG5hbWU6IHN0cmluZywgdHlwZTogVmlld1R5cGUsICtjb21wb25lbnRzPzogbnVtYmVyLCB9PixcbiAgICBhbGlnbm1lbnQ6IG51bWJlciA9IDFcbik6IFN0cnVjdEFycmF5TGF5b3V0IHtcblxuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGxldCBtYXhTaXplID0gMDtcbiAgICBjb25zdCBsYXlvdXRNZW1iZXJzID0gbWVtYmVycy5tYXAoKG1lbWJlcikgPT4ge1xuICAgICAgICBhc3NlcnQobWVtYmVyLm5hbWUubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgdHlwZVNpemUgPSBzaXplT2YobWVtYmVyLnR5cGUpO1xuICAgICAgICBjb25zdCBtZW1iZXJPZmZzZXQgPSBvZmZzZXQgPSBhbGlnbihvZmZzZXQsIE1hdGgubWF4KGFsaWdubWVudCwgdHlwZVNpemUpKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IG1lbWJlci5jb21wb25lbnRzIHx8IDE7XG5cbiAgICAgICAgbWF4U2l6ZSA9IE1hdGgubWF4KG1heFNpemUsIHR5cGVTaXplKTtcbiAgICAgICAgb2Zmc2V0ICs9IHR5cGVTaXplICogY29tcG9uZW50cztcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogbWVtYmVyLm5hbWUsXG4gICAgICAgICAgICB0eXBlOiBtZW1iZXIudHlwZSxcbiAgICAgICAgICAgIGNvbXBvbmVudHMsXG4gICAgICAgICAgICBvZmZzZXQ6IG1lbWJlck9mZnNldCxcbiAgICAgICAgfTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHNpemUgPSBhbGlnbihvZmZzZXQsIE1hdGgubWF4KG1heFNpemUsIGFsaWdubWVudCkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgbWVtYmVyczogbGF5b3V0TWVtYmVycyxcbiAgICAgICAgc2l6ZSxcbiAgICAgICAgYWxpZ25tZW50XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gc2l6ZU9mKHR5cGU6IFZpZXdUeXBlKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdmlld1R5cGVzW3R5cGVdLkJZVEVTX1BFUl9FTEVNRU5UO1xufVxuXG5mdW5jdGlvbiBhbGlnbihvZmZzZXQ6IG51bWJlciwgc2l6ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5jZWlsKG9mZnNldCAvIHNpemUpICogc2l6ZTtcbn1cblxuZXhwb3J0IHtTdHJ1Y3RBcnJheSwgU3RydWN0LCB2aWV3VHlwZXMsIGNyZWF0ZUxheW91dH07XG4iLCIvLyBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkLiBFZGl0IGJ1aWxkL2dlbmVyYXRlLXN0cnVjdC1hcnJheXMuanMsIHRoZW4gcnVuIGB5YXJuIHJ1biBjb2RlZ2VuYC5cbi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7U3RydWN0LCBTdHJ1Y3RBcnJheX0gZnJvbSAnLi4vdXRpbC9zdHJ1Y3RfYXJyYXknO1xuaW1wb3J0IHtyZWdpc3Rlcn0gZnJvbSAnLi4vdXRpbC93ZWJfd29ya2VyX3RyYW5zZmVyJztcbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBJbnQxNlsyXVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0Mmk0IGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIGludDE2OiBJbnQxNkFycmF5O1xuXG4gICAgX3JlZnJlc2hWaWV3cygpIHtcbiAgICAgICAgdGhpcy51aW50OCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLmludDE2ID0gbmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlciwgdjE6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCwgdjEpO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG8yID0gaSAqIDI7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAwXSA9IHYwO1xuICAgICAgICB0aGlzLmludDE2W28yICsgMV0gPSB2MTtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDJpNC5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50ID0gNDtcbnJlZ2lzdGVyKCdTdHJ1Y3RBcnJheUxheW91dDJpNCcsIFN0cnVjdEFycmF5TGF5b3V0Mmk0KTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBJbnQxNls0XVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0NGk4IGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIGludDE2OiBJbnQxNkFycmF5O1xuXG4gICAgX3JlZnJlc2hWaWV3cygpIHtcbiAgICAgICAgdGhpcy51aW50OCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLmludDE2ID0gbmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCwgdjEsIHYyLCB2Myk7XG4gICAgfVxuXG4gICAgZW1wbGFjZShpOiBudW1iZXIsIHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIsIHYzOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbzIgPSBpICogNDtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDBdID0gdjA7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAxXSA9IHYxO1xuICAgICAgICB0aGlzLmludDE2W28yICsgMl0gPSB2MjtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDNdID0gdjM7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQ0aTgucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDg7XG5yZWdpc3RlcignU3RydWN0QXJyYXlMYXlvdXQ0aTgnLCBTdHJ1Y3RBcnJheUxheW91dDRpOCk7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogSW50MTZbMl1cbiAqIFs0XTogSW50MTZbNF1cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheUxheW91dDJpNGkxMiBleHRlbmRzIFN0cnVjdEFycmF5IHtcbiAgICB1aW50ODogVWludDhBcnJheTtcbiAgICBpbnQxNjogSW50MTZBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy5pbnQxNiA9IG5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIGVtcGxhY2VCYWNrKHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIsIHYzOiBudW1iZXIsIHY0OiBudW1iZXIsIHY1OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaSA9IHRoaXMubGVuZ3RoO1xuICAgICAgICB0aGlzLnJlc2l6ZShpICsgMSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVtcGxhY2UoaSwgdjAsIHYxLCB2MiwgdjMsIHY0LCB2NSk7XG4gICAgfVxuXG4gICAgZW1wbGFjZShpOiBudW1iZXIsIHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIsIHYzOiBudW1iZXIsIHY0OiBudW1iZXIsIHY1OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbzIgPSBpICogNjtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDBdID0gdjA7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAxXSA9IHYxO1xuICAgICAgICB0aGlzLmludDE2W28yICsgMl0gPSB2MjtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDNdID0gdjM7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyA0XSA9IHY0O1xuICAgICAgICB0aGlzLmludDE2W28yICsgNV0gPSB2NTtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDJpNGkxMi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50ID0gMTI7XG5yZWdpc3RlcignU3RydWN0QXJyYXlMYXlvdXQyaTRpMTInLCBTdHJ1Y3RBcnJheUxheW91dDJpNGkxMik7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogSW50MTZbMl1cbiAqIFs0XTogVWludDhbNF1cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheUxheW91dDJpNHViOCBleHRlbmRzIFN0cnVjdEFycmF5IHtcbiAgICB1aW50ODogVWludDhBcnJheTtcbiAgICBpbnQxNjogSW50MTZBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy5pbnQxNiA9IG5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIGVtcGxhY2VCYWNrKHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIsIHYzOiBudW1iZXIsIHY0OiBudW1iZXIsIHY1OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaSA9IHRoaXMubGVuZ3RoO1xuICAgICAgICB0aGlzLnJlc2l6ZShpICsgMSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVtcGxhY2UoaSwgdjAsIHYxLCB2MiwgdjMsIHY0LCB2NSk7XG4gICAgfVxuXG4gICAgZW1wbGFjZShpOiBudW1iZXIsIHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIsIHYzOiBudW1iZXIsIHY0OiBudW1iZXIsIHY1OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbzIgPSBpICogNDtcbiAgICAgICAgY29uc3QgbzEgPSBpICogODtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDBdID0gdjA7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAxXSA9IHYxO1xuICAgICAgICB0aGlzLnVpbnQ4W28xICsgNF0gPSB2MjtcbiAgICAgICAgdGhpcy51aW50OFtvMSArIDVdID0gdjM7XG4gICAgICAgIHRoaXMudWludDhbbzEgKyA2XSA9IHY0O1xuICAgICAgICB0aGlzLnVpbnQ4W28xICsgN10gPSB2NTtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDJpNHViOC5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50ID0gODtcbnJlZ2lzdGVyKCdTdHJ1Y3RBcnJheUxheW91dDJpNHViOCcsIFN0cnVjdEFycmF5TGF5b3V0Mmk0dWI4KTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBVaW50MTZbOF1cbiAqIFsxNl06IFVpbnQ4WzJdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQ4dWkydWIxOCBleHRlbmRzIFN0cnVjdEFycmF5IHtcbiAgICB1aW50ODogVWludDhBcnJheTtcbiAgICB1aW50MTY6IFVpbnQxNkFycmF5O1xuXG4gICAgX3JlZnJlc2hWaWV3cygpIHtcbiAgICAgICAgdGhpcy51aW50OCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLnVpbnQxNiA9IG5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyLCB2NDogbnVtYmVyLCB2NTogbnVtYmVyLCB2NjogbnVtYmVyLCB2NzogbnVtYmVyLCB2ODogbnVtYmVyLCB2OTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSwgdjIsIHYzLCB2NCwgdjUsIHY2LCB2NywgdjgsIHY5KTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlciwgdjQ6IG51bWJlciwgdjU6IG51bWJlciwgdjY6IG51bWJlciwgdjc6IG51bWJlciwgdjg6IG51bWJlciwgdjk6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvMiA9IGkgKiA5O1xuICAgICAgICBjb25zdCBvMSA9IGkgKiAxODtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAwXSA9IHYwO1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDFdID0gdjE7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMl0gPSB2MjtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAzXSA9IHYzO1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDRdID0gdjQ7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgNV0gPSB2NTtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyA2XSA9IHY2O1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDddID0gdjc7XG4gICAgICAgIHRoaXMudWludDhbbzEgKyAxNl0gPSB2ODtcbiAgICAgICAgdGhpcy51aW50OFtvMSArIDE3XSA9IHY5O1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0OHVpMnViMTgucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDE4O1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0OHVpMnViMTgnLCBTdHJ1Y3RBcnJheUxheW91dDh1aTJ1YjE4KTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBJbnQxNls0XVxuICogWzhdOiBVaW50MTZbNF1cbiAqIFsxNl06IEludDE2WzRdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQ0aTR1aTRpMjQgZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgaW50MTY6IEludDE2QXJyYXk7XG4gICAgdWludDE2OiBVaW50MTZBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy5pbnQxNiA9IG5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLnVpbnQxNiA9IG5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyLCB2NDogbnVtYmVyLCB2NTogbnVtYmVyLCB2NjogbnVtYmVyLCB2NzogbnVtYmVyLCB2ODogbnVtYmVyLCB2OTogbnVtYmVyLCB2MTA6IG51bWJlciwgdjExOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaSA9IHRoaXMubGVuZ3RoO1xuICAgICAgICB0aGlzLnJlc2l6ZShpICsgMSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVtcGxhY2UoaSwgdjAsIHYxLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgdjksIHYxMCwgdjExKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlciwgdjQ6IG51bWJlciwgdjU6IG51bWJlciwgdjY6IG51bWJlciwgdjc6IG51bWJlciwgdjg6IG51bWJlciwgdjk6IG51bWJlciwgdjEwOiBudW1iZXIsIHYxMTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG8yID0gaSAqIDEyO1xuICAgICAgICB0aGlzLmludDE2W28yICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDFdID0gdjE7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAyXSA9IHYyO1xuICAgICAgICB0aGlzLmludDE2W28yICsgM10gPSB2MztcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyA0XSA9IHY0O1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDVdID0gdjU7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgNl0gPSB2NjtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyA3XSA9IHY3O1xuICAgICAgICB0aGlzLmludDE2W28yICsgOF0gPSB2ODtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDldID0gdjk7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAxMF0gPSB2MTA7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAxMV0gPSB2MTE7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQ0aTR1aTRpMjQucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDI0O1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0NGk0dWk0aTI0JywgU3RydWN0QXJyYXlMYXlvdXQ0aTR1aTRpMjQpO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IEZsb2F0MzJbM11cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheUxheW91dDNmMTIgZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgZmxvYXQzMjogRmxvYXQzMkFycmF5O1xuXG4gICAgX3JlZnJlc2hWaWV3cygpIHtcbiAgICAgICAgdGhpcy51aW50OCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLmZsb2F0MzIgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIGVtcGxhY2VCYWNrKHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaSA9IHRoaXMubGVuZ3RoO1xuICAgICAgICB0aGlzLnJlc2l6ZShpICsgMSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVtcGxhY2UoaSwgdjAsIHYxLCB2Mik7XG4gICAgfVxuXG4gICAgZW1wbGFjZShpOiBudW1iZXIsIHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbzQgPSBpICogMztcbiAgICAgICAgdGhpcy5mbG9hdDMyW280ICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy5mbG9hdDMyW280ICsgMV0gPSB2MTtcbiAgICAgICAgdGhpcy5mbG9hdDMyW280ICsgMl0gPSB2MjtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDNmMTIucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDEyO1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0M2YxMicsIFN0cnVjdEFycmF5TGF5b3V0M2YxMik7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogVWludDMyWzFdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQxdWw0IGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIHVpbnQzMjogVWludDMyQXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMudWludDMyID0gbmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIGVtcGxhY2VCYWNrKHYwOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaSA9IHRoaXMubGVuZ3RoO1xuICAgICAgICB0aGlzLnJlc2l6ZShpICsgMSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVtcGxhY2UoaSwgdjApO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG80ID0gaSAqIDE7XG4gICAgICAgIHRoaXMudWludDMyW280ICsgMF0gPSB2MDtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDF1bDQucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDQ7XG5yZWdpc3RlcignU3RydWN0QXJyYXlMYXlvdXQxdWw0JywgU3RydWN0QXJyYXlMYXlvdXQxdWw0KTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBJbnQxNls2XVxuICogWzEyXTogVWludDMyWzFdXG4gKiBbMTZdOiBVaW50MTZbMl1cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheUxheW91dDZpMXVsMnVpMjAgZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgaW50MTY6IEludDE2QXJyYXk7XG4gICAgdWludDMyOiBVaW50MzJBcnJheTtcbiAgICB1aW50MTY6IFVpbnQxNkFycmF5O1xuXG4gICAgX3JlZnJlc2hWaWV3cygpIHtcbiAgICAgICAgdGhpcy51aW50OCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLmludDE2ID0gbmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMudWludDMyID0gbmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLnVpbnQxNiA9IG5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyLCB2NDogbnVtYmVyLCB2NTogbnVtYmVyLCB2NjogbnVtYmVyLCB2NzogbnVtYmVyLCB2ODogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSwgdjIsIHYzLCB2NCwgdjUsIHY2LCB2NywgdjgpO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyLCB2NDogbnVtYmVyLCB2NTogbnVtYmVyLCB2NjogbnVtYmVyLCB2NzogbnVtYmVyLCB2ODogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG8yID0gaSAqIDEwO1xuICAgICAgICBjb25zdCBvNCA9IGkgKiA1O1xuICAgICAgICB0aGlzLmludDE2W28yICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDFdID0gdjE7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAyXSA9IHYyO1xuICAgICAgICB0aGlzLmludDE2W28yICsgM10gPSB2MztcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDRdID0gdjQ7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyA1XSA9IHY1O1xuICAgICAgICB0aGlzLnVpbnQzMltvNCArIDNdID0gdjY7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgOF0gPSB2NztcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyA5XSA9IHY4O1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0NmkxdWwydWkyMC5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50ID0gMjA7XG5yZWdpc3RlcignU3RydWN0QXJyYXlMYXlvdXQ2aTF1bDJ1aTIwJywgU3RydWN0QXJyYXlMYXlvdXQ2aTF1bDJ1aTIwKTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBJbnQxNlsyXVxuICogWzRdOiBJbnQxNlsyXVxuICogWzhdOiBJbnQxNlsyXVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0MmkyaTJpMTIgZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgaW50MTY6IEludDE2QXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMuaW50MTYgPSBuZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyLCB2NDogbnVtYmVyLCB2NTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSwgdjIsIHYzLCB2NCwgdjUpO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyLCB2NDogbnVtYmVyLCB2NTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG8yID0gaSAqIDY7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAwXSA9IHYwO1xuICAgICAgICB0aGlzLmludDE2W28yICsgMV0gPSB2MTtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDJdID0gdjI7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAzXSA9IHYzO1xuICAgICAgICB0aGlzLmludDE2W28yICsgNF0gPSB2NDtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDVdID0gdjU7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQyaTJpMmkxMi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50ID0gMTI7XG5yZWdpc3RlcignU3RydWN0QXJyYXlMYXlvdXQyaTJpMmkxMicsIFN0cnVjdEFycmF5TGF5b3V0MmkyaTJpMTIpO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IEZsb2F0MzJbMl1cbiAqIFs4XTogRmxvYXQzMlsxXVxuICogWzEyXTogSW50MTZbMl1cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheUxheW91dDJmMWYyaTE2IGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIGZsb2F0MzI6IEZsb2F0MzJBcnJheTtcbiAgICBpbnQxNjogSW50MTZBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy5mbG9hdDMyID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy5pbnQxNiA9IG5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIGVtcGxhY2VCYWNrKHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIsIHYzOiBudW1iZXIsIHY0OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaSA9IHRoaXMubGVuZ3RoO1xuICAgICAgICB0aGlzLnJlc2l6ZShpICsgMSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVtcGxhY2UoaSwgdjAsIHYxLCB2MiwgdjMsIHY0KTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlciwgdjQ6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvNCA9IGkgKiA0O1xuICAgICAgICBjb25zdCBvMiA9IGkgKiA4O1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyAwXSA9IHYwO1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyAxXSA9IHYxO1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyAyXSA9IHYyO1xuICAgICAgICB0aGlzLmludDE2W28yICsgNl0gPSB2MztcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDddID0gdjQ7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQyZjFmMmkxNi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50ID0gMTY7XG5yZWdpc3RlcignU3RydWN0QXJyYXlMYXlvdXQyZjFmMmkxNicsIFN0cnVjdEFycmF5TGF5b3V0MmYxZjJpMTYpO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IFVpbnQ4WzJdXG4gKiBbNF06IEZsb2F0MzJbMl1cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheUxheW91dDJ1YjJmMTIgZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgZmxvYXQzMjogRmxvYXQzMkFycmF5O1xuXG4gICAgX3JlZnJlc2hWaWV3cygpIHtcbiAgICAgICAgdGhpcy51aW50OCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLmZsb2F0MzIgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIGVtcGxhY2VCYWNrKHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIsIHYzOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaSA9IHRoaXMubGVuZ3RoO1xuICAgICAgICB0aGlzLnJlc2l6ZShpICsgMSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVtcGxhY2UoaSwgdjAsIHYxLCB2MiwgdjMpO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyLCB2MzogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG8xID0gaSAqIDEyO1xuICAgICAgICBjb25zdCBvNCA9IGkgKiAzO1xuICAgICAgICB0aGlzLnVpbnQ4W28xICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy51aW50OFtvMSArIDFdID0gdjE7XG4gICAgICAgIHRoaXMuZmxvYXQzMltvNCArIDFdID0gdjI7XG4gICAgICAgIHRoaXMuZmxvYXQzMltvNCArIDJdID0gdjM7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQydWIyZjEyLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSAxMjtcbnJlZ2lzdGVyKCdTdHJ1Y3RBcnJheUxheW91dDJ1YjJmMTInLCBTdHJ1Y3RBcnJheUxheW91dDJ1YjJmMTIpO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IFVpbnQxNlszXVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0M3VpNiBleHRlbmRzIFN0cnVjdEFycmF5IHtcbiAgICB1aW50ODogVWludDhBcnJheTtcbiAgICB1aW50MTY6IFVpbnQxNkFycmF5O1xuXG4gICAgX3JlZnJlc2hWaWV3cygpIHtcbiAgICAgICAgdGhpcy51aW50OCA9IG5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLnVpbnQxNiA9IG5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSwgdjIpO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG8yID0gaSAqIDM7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAxXSA9IHYxO1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDJdID0gdjI7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQzdWk2LnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSA2O1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0M3VpNicsIFN0cnVjdEFycmF5TGF5b3V0M3VpNik7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogSW50MTZbMl1cbiAqIFs0XTogVWludDE2WzJdXG4gKiBbOF06IFVpbnQzMlszXVxuICogWzIwXTogVWludDE2WzNdXG4gKiBbMjhdOiBGbG9hdDMyWzJdXG4gKiBbMzZdOiBVaW50OFszXVxuICogWzQwXTogVWludDMyWzFdXG4gKiBbNDRdOiBJbnQxNlsxXVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0MmkydWkzdWwzdWkyZjN1YjF1bDFpNDggZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgaW50MTY6IEludDE2QXJyYXk7XG4gICAgdWludDE2OiBVaW50MTZBcnJheTtcbiAgICB1aW50MzI6IFVpbnQzMkFycmF5O1xuICAgIGZsb2F0MzI6IEZsb2F0MzJBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy5pbnQxNiA9IG5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLnVpbnQxNiA9IG5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy51aW50MzIgPSBuZXcgVWludDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMuZmxvYXQzMiA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlciwgdjQ6IG51bWJlciwgdjU6IG51bWJlciwgdjY6IG51bWJlciwgdjc6IG51bWJlciwgdjg6IG51bWJlciwgdjk6IG51bWJlciwgdjEwOiBudW1iZXIsIHYxMTogbnVtYmVyLCB2MTI6IG51bWJlciwgdjEzOiBudW1iZXIsIHYxNDogbnVtYmVyLCB2MTU6IG51bWJlciwgdjE2OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaSA9IHRoaXMubGVuZ3RoO1xuICAgICAgICB0aGlzLnJlc2l6ZShpICsgMSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVtcGxhY2UoaSwgdjAsIHYxLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3LCB2OCwgdjksIHYxMCwgdjExLCB2MTIsIHYxMywgdjE0LCB2MTUsIHYxNik7XG4gICAgfVxuXG4gICAgZW1wbGFjZShpOiBudW1iZXIsIHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIsIHYzOiBudW1iZXIsIHY0OiBudW1iZXIsIHY1OiBudW1iZXIsIHY2OiBudW1iZXIsIHY3OiBudW1iZXIsIHY4OiBudW1iZXIsIHY5OiBudW1iZXIsIHYxMDogbnVtYmVyLCB2MTE6IG51bWJlciwgdjEyOiBudW1iZXIsIHYxMzogbnVtYmVyLCB2MTQ6IG51bWJlciwgdjE1OiBudW1iZXIsIHYxNjogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG8yID0gaSAqIDI0O1xuICAgICAgICBjb25zdCBvNCA9IGkgKiAxMjtcbiAgICAgICAgY29uc3QgbzEgPSBpICogNDg7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAwXSA9IHYwO1xuICAgICAgICB0aGlzLmludDE2W28yICsgMV0gPSB2MTtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAyXSA9IHYyO1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDNdID0gdjM7XG4gICAgICAgIHRoaXMudWludDMyW280ICsgMl0gPSB2NDtcbiAgICAgICAgdGhpcy51aW50MzJbbzQgKyAzXSA9IHY1O1xuICAgICAgICB0aGlzLnVpbnQzMltvNCArIDRdID0gdjY7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMTBdID0gdjc7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMTFdID0gdjg7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMTJdID0gdjk7XG4gICAgICAgIHRoaXMuZmxvYXQzMltvNCArIDddID0gdjEwO1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyA4XSA9IHYxMTtcbiAgICAgICAgdGhpcy51aW50OFtvMSArIDM2XSA9IHYxMjtcbiAgICAgICAgdGhpcy51aW50OFtvMSArIDM3XSA9IHYxMztcbiAgICAgICAgdGhpcy51aW50OFtvMSArIDM4XSA9IHYxNDtcbiAgICAgICAgdGhpcy51aW50MzJbbzQgKyAxMF0gPSB2MTU7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAyMl0gPSB2MTY7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQyaTJ1aTN1bDN1aTJmM3ViMXVsMWk0OC5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50ID0gNDg7XG5yZWdpc3RlcignU3RydWN0QXJyYXlMYXlvdXQyaTJ1aTN1bDN1aTJmM3ViMXVsMWk0OCcsIFN0cnVjdEFycmF5TGF5b3V0MmkydWkzdWwzdWkyZjN1YjF1bDFpNDgpO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IEludDE2WzhdXG4gKiBbMTZdOiBVaW50MTZbMTVdXG4gKiBbNDhdOiBVaW50MzJbMV1cbiAqIFs1Ml06IEZsb2F0MzJbNF1cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheUxheW91dDhpMTV1aTF1bDRmNjggZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgaW50MTY6IEludDE2QXJyYXk7XG4gICAgdWludDE2OiBVaW50MTZBcnJheTtcbiAgICB1aW50MzI6IFVpbnQzMkFycmF5O1xuICAgIGZsb2F0MzI6IEZsb2F0MzJBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy5pbnQxNiA9IG5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLnVpbnQxNiA9IG5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy51aW50MzIgPSBuZXcgVWludDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMuZmxvYXQzMiA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlciwgdjQ6IG51bWJlciwgdjU6IG51bWJlciwgdjY6IG51bWJlciwgdjc6IG51bWJlciwgdjg6IG51bWJlciwgdjk6IG51bWJlciwgdjEwOiBudW1iZXIsIHYxMTogbnVtYmVyLCB2MTI6IG51bWJlciwgdjEzOiBudW1iZXIsIHYxNDogbnVtYmVyLCB2MTU6IG51bWJlciwgdjE2OiBudW1iZXIsIHYxNzogbnVtYmVyLCB2MTg6IG51bWJlciwgdjE5OiBudW1iZXIsIHYyMDogbnVtYmVyLCB2MjE6IG51bWJlciwgdjIyOiBudW1iZXIsIHYyMzogbnVtYmVyLCB2MjQ6IG51bWJlciwgdjI1OiBudW1iZXIsIHYyNjogbnVtYmVyLCB2Mjc6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCwgdjEsIHYyLCB2MywgdjQsIHY1LCB2NiwgdjcsIHY4LCB2OSwgdjEwLCB2MTEsIHYxMiwgdjEzLCB2MTQsIHYxNSwgdjE2LCB2MTcsIHYxOCwgdjE5LCB2MjAsIHYyMSwgdjIyLCB2MjMsIHYyNCwgdjI1LCB2MjYsIHYyNyk7XG4gICAgfVxuXG4gICAgZW1wbGFjZShpOiBudW1iZXIsIHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIsIHYzOiBudW1iZXIsIHY0OiBudW1iZXIsIHY1OiBudW1iZXIsIHY2OiBudW1iZXIsIHY3OiBudW1iZXIsIHY4OiBudW1iZXIsIHY5OiBudW1iZXIsIHYxMDogbnVtYmVyLCB2MTE6IG51bWJlciwgdjEyOiBudW1iZXIsIHYxMzogbnVtYmVyLCB2MTQ6IG51bWJlciwgdjE1OiBudW1iZXIsIHYxNjogbnVtYmVyLCB2MTc6IG51bWJlciwgdjE4OiBudW1iZXIsIHYxOTogbnVtYmVyLCB2MjA6IG51bWJlciwgdjIxOiBudW1iZXIsIHYyMjogbnVtYmVyLCB2MjM6IG51bWJlciwgdjI0OiBudW1iZXIsIHYyNTogbnVtYmVyLCB2MjY6IG51bWJlciwgdjI3OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbzIgPSBpICogMzQ7XG4gICAgICAgIGNvbnN0IG80ID0gaSAqIDE3O1xuICAgICAgICB0aGlzLmludDE2W28yICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDFdID0gdjE7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAyXSA9IHYyO1xuICAgICAgICB0aGlzLmludDE2W28yICsgM10gPSB2MztcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDRdID0gdjQ7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyA1XSA9IHY1O1xuICAgICAgICB0aGlzLmludDE2W28yICsgNl0gPSB2NjtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDddID0gdjc7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgOF0gPSB2ODtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyA5XSA9IHY5O1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDEwXSA9IHYxMDtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAxMV0gPSB2MTE7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMTJdID0gdjEyO1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDEzXSA9IHYxMztcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAxNF0gPSB2MTQ7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMTVdID0gdjE1O1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDE2XSA9IHYxNjtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAxN10gPSB2MTc7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMThdID0gdjE4O1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDE5XSA9IHYxOTtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAyMF0gPSB2MjA7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMjFdID0gdjIxO1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDIyXSA9IHYyMjtcbiAgICAgICAgdGhpcy51aW50MzJbbzQgKyAxMl0gPSB2MjM7XG4gICAgICAgIHRoaXMuZmxvYXQzMltvNCArIDEzXSA9IHYyNDtcbiAgICAgICAgdGhpcy5mbG9hdDMyW280ICsgMTRdID0gdjI1O1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyAxNV0gPSB2MjY7XG4gICAgICAgIHRoaXMuZmxvYXQzMltvNCArIDE2XSA9IHYyNztcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDhpMTV1aTF1bDRmNjgucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDY4O1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0OGkxNXVpMXVsNGY2OCcsIFN0cnVjdEFycmF5TGF5b3V0OGkxNXVpMXVsNGY2OCk7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogRmxvYXQzMlsxXVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0MWY0IGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIGZsb2F0MzI6IEZsb2F0MzJBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy5mbG9hdDMyID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvNCA9IGkgKiAxO1xuICAgICAgICB0aGlzLmZsb2F0MzJbbzQgKyAwXSA9IHYwO1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0MWY0LnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSA0O1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0MWY0JywgU3RydWN0QXJyYXlMYXlvdXQxZjQpO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IEludDE2WzNdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQzaTYgZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgaW50MTY6IEludDE2QXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMuaW50MTYgPSBuZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSwgdjIpO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG8yID0gaSAqIDM7XG4gICAgICAgIHRoaXMuaW50MTZbbzIgKyAwXSA9IHYwO1xuICAgICAgICB0aGlzLmludDE2W28yICsgMV0gPSB2MTtcbiAgICAgICAgdGhpcy5pbnQxNltvMiArIDJdID0gdjI7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQzaTYucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDY7XG5yZWdpc3RlcignU3RydWN0QXJyYXlMYXlvdXQzaTYnLCBTdHJ1Y3RBcnJheUxheW91dDNpNik7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogVWludDMyWzFdXG4gKiBbNF06IFVpbnQxNlsyXVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0MXVsMnVpOCBleHRlbmRzIFN0cnVjdEFycmF5IHtcbiAgICB1aW50ODogVWludDhBcnJheTtcbiAgICB1aW50MzI6IFVpbnQzMkFycmF5O1xuICAgIHVpbnQxNjogVWludDE2QXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMudWludDMyID0gbmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgICAgICB0aGlzLnVpbnQxNiA9IG5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlQmFjayh2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5yZXNpemUoaSArIDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbXBsYWNlKGksIHYwLCB2MSwgdjIpO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyLCB2MjogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG80ID0gaSAqIDI7XG4gICAgICAgIGNvbnN0IG8yID0gaSAqIDQ7XG4gICAgICAgIHRoaXMudWludDMyW280ICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAyXSA9IHYxO1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDNdID0gdjI7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQxdWwydWk4LnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQgPSA4O1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0MXVsMnVpOCcsIFN0cnVjdEFycmF5TGF5b3V0MXVsMnVpOCk7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogVWludDE2WzJdXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgU3RydWN0QXJyYXlMYXlvdXQydWk0IGV4dGVuZHMgU3RydWN0QXJyYXkge1xuICAgIHVpbnQ4OiBVaW50OEFycmF5O1xuICAgIHVpbnQxNjogVWludDE2QXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMudWludDE2ID0gbmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIGVtcGxhY2VCYWNrKHYwOiBudW1iZXIsIHYxOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaSA9IHRoaXMubGVuZ3RoO1xuICAgICAgICB0aGlzLnJlc2l6ZShpICsgMSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVtcGxhY2UoaSwgdjAsIHYxKTtcbiAgICB9XG5cbiAgICBlbXBsYWNlKGk6IG51bWJlciwgdjA6IG51bWJlciwgdjE6IG51bWJlcikge1xuICAgICAgICBjb25zdCBvMiA9IGkgKiAyO1xuICAgICAgICB0aGlzLnVpbnQxNltvMiArIDBdID0gdjA7XG4gICAgICAgIHRoaXMudWludDE2W28yICsgMV0gPSB2MTtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDJ1aTQucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDQ7XG5yZWdpc3RlcignU3RydWN0QXJyYXlMYXlvdXQydWk0JywgU3RydWN0QXJyYXlMYXlvdXQydWk0KTtcblxuLyoqXG4gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RydWN0QXJyYXkgbGF5b3V0OlxuICogWzBdOiBVaW50MTZbMV1cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheUxheW91dDF1aTIgZXh0ZW5kcyBTdHJ1Y3RBcnJheSB7XG4gICAgdWludDg6IFVpbnQ4QXJyYXk7XG4gICAgdWludDE2OiBVaW50MTZBcnJheTtcblxuICAgIF9yZWZyZXNoVmlld3MoKSB7XG4gICAgICAgIHRoaXMudWludDggPSBuZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKTtcbiAgICAgICAgdGhpcy51aW50MTYgPSBuZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCk7XG4gICAgfVxuXG4gICAgZW1wbGFjZShpOiBudW1iZXIsIHYwOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbzIgPSBpICogMTtcbiAgICAgICAgdGhpcy51aW50MTZbbzIgKyAwXSA9IHYwO1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG59XG5cblN0cnVjdEFycmF5TGF5b3V0MXVpMi5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50ID0gMjtcbnJlZ2lzdGVyKCdTdHJ1Y3RBcnJheUxheW91dDF1aTInLCBTdHJ1Y3RBcnJheUxheW91dDF1aTIpO1xuXG4vKipcbiAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBTdHJ1Y3RBcnJheSBsYXlvdXQ6XG4gKiBbMF06IEZsb2F0MzJbMl1cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTdHJ1Y3RBcnJheUxheW91dDJmOCBleHRlbmRzIFN0cnVjdEFycmF5IHtcbiAgICB1aW50ODogVWludDhBcnJheTtcbiAgICBmbG9hdDMyOiBGbG9hdDMyQXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMuZmxvYXQzMiA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlciwgdjE6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCwgdjEpO1xuICAgIH1cblxuICAgIGVtcGxhY2UoaTogbnVtYmVyLCB2MDogbnVtYmVyLCB2MTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG80ID0gaSAqIDI7XG4gICAgICAgIHRoaXMuZmxvYXQzMltvNCArIDBdID0gdjA7XG4gICAgICAgIHRoaXMuZmxvYXQzMltvNCArIDFdID0gdjE7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cbn1cblxuU3RydWN0QXJyYXlMYXlvdXQyZjgucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDg7XG5yZWdpc3RlcignU3RydWN0QXJyYXlMYXlvdXQyZjgnLCBTdHJ1Y3RBcnJheUxheW91dDJmOCk7XG5cbi8qKlxuICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFN0cnVjdEFycmF5IGxheW91dDpcbiAqIFswXTogRmxvYXQzMls0XVxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0cnVjdEFycmF5TGF5b3V0NGYxNiBleHRlbmRzIFN0cnVjdEFycmF5IHtcbiAgICB1aW50ODogVWludDhBcnJheTtcbiAgICBmbG9hdDMyOiBGbG9hdDMyQXJyYXk7XG5cbiAgICBfcmVmcmVzaFZpZXdzKCkge1xuICAgICAgICB0aGlzLnVpbnQ4ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgICAgIHRoaXMuZmxvYXQzMiA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgZW1wbGFjZUJhY2sodjA6IG51bWJlciwgdjE6IG51bWJlciwgdjI6IG51bWJlciwgdjM6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpID0gdGhpcy5sZW5ndGg7XG4gICAgICAgIHRoaXMucmVzaXplKGkgKyAxKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wbGFjZShpLCB2MCwgdjEsIHYyLCB2Myk7XG4gICAgfVxuXG4gICAgZW1wbGFjZShpOiBudW1iZXIsIHYwOiBudW1iZXIsIHYxOiBudW1iZXIsIHYyOiBudW1iZXIsIHYzOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbzQgPSBpICogNDtcbiAgICAgICAgdGhpcy5mbG9hdDMyW280ICsgMF0gPSB2MDtcbiAgICAgICAgdGhpcy5mbG9hdDMyW280ICsgMV0gPSB2MTtcbiAgICAgICAgdGhpcy5mbG9hdDMyW280ICsgMl0gPSB2MjtcbiAgICAgICAgdGhpcy5mbG9hdDMyW280ICsgM10gPSB2MztcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfVxufVxuXG5TdHJ1Y3RBcnJheUxheW91dDRmMTYucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudCA9IDE2O1xucmVnaXN0ZXIoJ1N0cnVjdEFycmF5TGF5b3V0NGYxNicsIFN0cnVjdEFycmF5TGF5b3V0NGYxNik7XG5cbmNsYXNzIENvbGxpc2lvbkJveFN0cnVjdCBleHRlbmRzIFN0cnVjdCB7XG4gICAgX3N0cnVjdEFycmF5OiBDb2xsaXNpb25Cb3hBcnJheTtcbiAgICBhbmNob3JQb2ludFg6IG51bWJlcjtcbiAgICBhbmNob3JQb2ludFk6IG51bWJlcjtcbiAgICB4MTogbnVtYmVyO1xuICAgIHkxOiBudW1iZXI7XG4gICAgeDI6IG51bWJlcjtcbiAgICB5MjogbnVtYmVyO1xuICAgIGZlYXR1cmVJbmRleDogbnVtYmVyO1xuICAgIHNvdXJjZUxheWVySW5kZXg6IG51bWJlcjtcbiAgICBidWNrZXRJbmRleDogbnVtYmVyO1xuICAgIGFuY2hvclBvaW50OiBQb2ludDtcbiAgICBnZXQgYW5jaG9yUG9pbnRYKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDBdOyB9XG4gICAgZ2V0IGFuY2hvclBvaW50WSgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAxXTsgfVxuICAgIGdldCB4MSgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAyXTsgfVxuICAgIGdldCB5MSgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAzXTsgfVxuICAgIGdldCB4MigpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyA0XTsgfVxuICAgIGdldCB5MigpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyA1XTsgfVxuICAgIGdldCBmZWF0dXJlSW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCArIDNdOyB9XG4gICAgZ2V0IHNvdXJjZUxheWVySW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDhdOyB9XG4gICAgZ2V0IGJ1Y2tldEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyA5XTsgfVxuICAgIGdldCBhbmNob3JQb2ludCgpIHsgcmV0dXJuIG5ldyBQb2ludCh0aGlzLmFuY2hvclBvaW50WCwgdGhpcy5hbmNob3JQb2ludFkpOyB9XG59XG5cbkNvbGxpc2lvbkJveFN0cnVjdC5wcm90b3R5cGUuc2l6ZSA9IDIwO1xuXG5leHBvcnQgdHlwZSBDb2xsaXNpb25Cb3ggPSBDb2xsaXNpb25Cb3hTdHJ1Y3Q7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIENvbGxpc2lvbkJveEFycmF5IGV4dGVuZHMgU3RydWN0QXJyYXlMYXlvdXQ2aTF1bDJ1aTIwIHtcbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIENvbGxpc2lvbkJveFN0cnVjdCBhdCB0aGUgZ2l2ZW4gbG9jYXRpb24gaW4gdGhlIGFycmF5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGVsZW1lbnQuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBnZXQoaW5kZXg6IG51bWJlcik6IENvbGxpc2lvbkJveFN0cnVjdCB7XG4gICAgICAgIGFzc2VydCghdGhpcy5pc1RyYW5zZmVycmVkKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xsaXNpb25Cb3hTdHJ1Y3QodGhpcywgaW5kZXgpO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ0NvbGxpc2lvbkJveEFycmF5JywgQ29sbGlzaW9uQm94QXJyYXkpO1xuXG5jbGFzcyBQbGFjZWRTeW1ib2xTdHJ1Y3QgZXh0ZW5kcyBTdHJ1Y3Qge1xuICAgIF9zdHJ1Y3RBcnJheTogUGxhY2VkU3ltYm9sQXJyYXk7XG4gICAgYW5jaG9yWDogbnVtYmVyO1xuICAgIGFuY2hvclk6IG51bWJlcjtcbiAgICBnbHlwaFN0YXJ0SW5kZXg6IG51bWJlcjtcbiAgICBudW1HbHlwaHM6IG51bWJlcjtcbiAgICB2ZXJ0ZXhTdGFydEluZGV4OiBudW1iZXI7XG4gICAgbGluZVN0YXJ0SW5kZXg6IG51bWJlcjtcbiAgICBsaW5lTGVuZ3RoOiBudW1iZXI7XG4gICAgc2VnbWVudDogbnVtYmVyO1xuICAgIGxvd2VyU2l6ZTogbnVtYmVyO1xuICAgIHVwcGVyU2l6ZTogbnVtYmVyO1xuICAgIGxpbmVPZmZzZXRYOiBudW1iZXI7XG4gICAgbGluZU9mZnNldFk6IG51bWJlcjtcbiAgICB3cml0aW5nTW9kZTogbnVtYmVyO1xuICAgIHBsYWNlZE9yaWVudGF0aW9uOiBudW1iZXI7XG4gICAgaGlkZGVuOiBudW1iZXI7XG4gICAgY3Jvc3NUaWxlSUQ6IG51bWJlcjtcbiAgICBhc3NvY2lhdGVkSWNvbkluZGV4OiBudW1iZXI7XG4gICAgZ2V0IGFuY2hvclgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgMF07IH1cbiAgICBnZXQgYW5jaG9yWSgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAxXTsgfVxuICAgIGdldCBnbHlwaFN0YXJ0SW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDJdOyB9XG4gICAgZ2V0IG51bUdseXBocygpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgM107IH1cbiAgICBnZXQgdmVydGV4U3RhcnRJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0ICsgMl07IH1cbiAgICBnZXQgbGluZVN0YXJ0SW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCArIDNdOyB9XG4gICAgZ2V0IGxpbmVMZW5ndGgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCArIDRdOyB9XG4gICAgZ2V0IHNlZ21lbnQoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDEwXTsgfVxuICAgIGdldCBsb3dlclNpemUoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDExXTsgfVxuICAgIGdldCB1cHBlclNpemUoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDEyXTsgfVxuICAgIGdldCBsaW5lT2Zmc2V0WCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmZsb2F0MzJbdGhpcy5fcG9zNCArIDddOyB9XG4gICAgZ2V0IGxpbmVPZmZzZXRZKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0ICsgOF07IH1cbiAgICBnZXQgd3JpdGluZ01vZGUoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50OFt0aGlzLl9wb3MxICsgMzZdOyB9XG4gICAgZ2V0IHBsYWNlZE9yaWVudGF0aW9uKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDhbdGhpcy5fcG9zMSArIDM3XTsgfVxuICAgIHNldCBwbGFjZWRPcmllbnRhdGlvbih4OiBudW1iZXIpIHsgdGhpcy5fc3RydWN0QXJyYXkudWludDhbdGhpcy5fcG9zMSArIDM3XSA9IHg7IH1cbiAgICBnZXQgaGlkZGVuKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDhbdGhpcy5fcG9zMSArIDM4XTsgfVxuICAgIHNldCBoaWRkZW4oeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQ4W3RoaXMuX3BvczEgKyAzOF0gPSB4OyB9XG4gICAgZ2V0IGNyb3NzVGlsZUlEKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQgKyAxMF07IH1cbiAgICBzZXQgY3Jvc3NUaWxlSUQoeDogbnVtYmVyKSB7IHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0ICsgMTBdID0geDsgfVxuICAgIGdldCBhc3NvY2lhdGVkSWNvbkluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiArIDIyXTsgfVxufVxuXG5QbGFjZWRTeW1ib2xTdHJ1Y3QucHJvdG90eXBlLnNpemUgPSA0ODtcblxuZXhwb3J0IHR5cGUgUGxhY2VkU3ltYm9sID0gUGxhY2VkU3ltYm9sU3RydWN0O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBQbGFjZWRTeW1ib2xBcnJheSBleHRlbmRzIFN0cnVjdEFycmF5TGF5b3V0MmkydWkzdWwzdWkyZjN1YjF1bDFpNDgge1xuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgUGxhY2VkU3ltYm9sU3RydWN0IGF0IHRoZSBnaXZlbiBsb2NhdGlvbiBpbiB0aGUgYXJyYXkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFRoZSBpbmRleCBvZiB0aGUgZWxlbWVudC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGdldChpbmRleDogbnVtYmVyKTogUGxhY2VkU3ltYm9sU3RydWN0IHtcbiAgICAgICAgYXNzZXJ0KCF0aGlzLmlzVHJhbnNmZXJyZWQpO1xuICAgICAgICByZXR1cm4gbmV3IFBsYWNlZFN5bWJvbFN0cnVjdCh0aGlzLCBpbmRleCk7XG4gICAgfVxufVxuXG5yZWdpc3RlcignUGxhY2VkU3ltYm9sQXJyYXknLCBQbGFjZWRTeW1ib2xBcnJheSk7XG5cbmNsYXNzIFN5bWJvbEluc3RhbmNlU3RydWN0IGV4dGVuZHMgU3RydWN0IHtcbiAgICBfc3RydWN0QXJyYXk6IFN5bWJvbEluc3RhbmNlQXJyYXk7XG4gICAgYW5jaG9yWDogbnVtYmVyO1xuICAgIGFuY2hvclk6IG51bWJlcjtcbiAgICByaWdodEp1c3RpZmllZFRleHRTeW1ib2xJbmRleDogbnVtYmVyO1xuICAgIGNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleDogbnVtYmVyO1xuICAgIGxlZnRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXg6IG51bWJlcjtcbiAgICB2ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleDogbnVtYmVyO1xuICAgIHBsYWNlZEljb25TeW1ib2xJbmRleDogbnVtYmVyO1xuICAgIHZlcnRpY2FsUGxhY2VkSWNvblN5bWJvbEluZGV4OiBudW1iZXI7XG4gICAga2V5OiBudW1iZXI7XG4gICAgdGV4dEJveFN0YXJ0SW5kZXg6IG51bWJlcjtcbiAgICB0ZXh0Qm94RW5kSW5kZXg6IG51bWJlcjtcbiAgICB2ZXJ0aWNhbFRleHRCb3hTdGFydEluZGV4OiBudW1iZXI7XG4gICAgdmVydGljYWxUZXh0Qm94RW5kSW5kZXg6IG51bWJlcjtcbiAgICBpY29uQm94U3RhcnRJbmRleDogbnVtYmVyO1xuICAgIGljb25Cb3hFbmRJbmRleDogbnVtYmVyO1xuICAgIHZlcnRpY2FsSWNvbkJveFN0YXJ0SW5kZXg6IG51bWJlcjtcbiAgICB2ZXJ0aWNhbEljb25Cb3hFbmRJbmRleDogbnVtYmVyO1xuICAgIGZlYXR1cmVJbmRleDogbnVtYmVyO1xuICAgIG51bUhvcml6b250YWxHbHlwaFZlcnRpY2VzOiBudW1iZXI7XG4gICAgbnVtVmVydGljYWxHbHlwaFZlcnRpY2VzOiBudW1iZXI7XG4gICAgbnVtSWNvblZlcnRpY2VzOiBudW1iZXI7XG4gICAgbnVtVmVydGljYWxJY29uVmVydGljZXM6IG51bWJlcjtcbiAgICB1c2VSdW50aW1lQ29sbGlzaW9uQ2lyY2xlczogbnVtYmVyO1xuICAgIGNyb3NzVGlsZUlEOiBudW1iZXI7XG4gICAgdGV4dEJveFNjYWxlOiBudW1iZXI7XG4gICAgdGV4dE9mZnNldDA6IG51bWJlcjtcbiAgICB0ZXh0T2Zmc2V0MTogbnVtYmVyO1xuICAgIGNvbGxpc2lvbkNpcmNsZURpYW1ldGVyOiBudW1iZXI7XG4gICAgZ2V0IGFuY2hvclgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgMF07IH1cbiAgICBnZXQgYW5jaG9yWSgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAxXTsgfVxuICAgIGdldCByaWdodEp1c3RpZmllZFRleHRTeW1ib2xJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyAyXTsgfVxuICAgIGdldCBjZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgM107IH1cbiAgICBnZXQgbGVmdEp1c3RpZmllZFRleHRTeW1ib2xJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyA0XTsgfVxuICAgIGdldCB2ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIgKyA1XTsgfVxuICAgIGdldCBwbGFjZWRJY29uU3ltYm9sSW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgNl07IH1cbiAgICBnZXQgdmVydGljYWxQbGFjZWRJY29uU3ltYm9sSW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyICsgN107IH1cbiAgICBnZXQga2V5KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyA4XTsgfVxuICAgIGdldCB0ZXh0Qm94U3RhcnRJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgOV07IH1cbiAgICBnZXQgdGV4dEJveEVuZEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxMF07IH1cbiAgICBnZXQgdmVydGljYWxUZXh0Qm94U3RhcnRJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgMTFdOyB9XG4gICAgZ2V0IHZlcnRpY2FsVGV4dEJveEVuZEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxMl07IH1cbiAgICBnZXQgaWNvbkJveFN0YXJ0SW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDEzXTsgfVxuICAgIGdldCBpY29uQm94RW5kSW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDE0XTsgfVxuICAgIGdldCB2ZXJ0aWNhbEljb25Cb3hTdGFydEluZGV4KCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAxNV07IH1cbiAgICBnZXQgdmVydGljYWxJY29uQm94RW5kSW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDE2XTsgfVxuICAgIGdldCBmZWF0dXJlSW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDE3XTsgfVxuICAgIGdldCBudW1Ib3Jpem9udGFsR2x5cGhWZXJ0aWNlcygpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgMThdOyB9XG4gICAgZ2V0IG51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcygpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgMTldOyB9XG4gICAgZ2V0IG51bUljb25WZXJ0aWNlcygpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgMjBdOyB9XG4gICAgZ2V0IG51bVZlcnRpY2FsSWNvblZlcnRpY2VzKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIgKyAyMV07IH1cbiAgICBnZXQgdXNlUnVudGltZUNvbGxpc2lvbkNpcmNsZXMoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDIyXTsgfVxuICAgIGdldCBjcm9zc1RpbGVJRCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0ICsgMTJdOyB9XG4gICAgc2V0IGNyb3NzVGlsZUlEKHg6IG51bWJlcikgeyB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCArIDEyXSA9IHg7IH1cbiAgICBnZXQgdGV4dEJveFNjYWxlKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0ICsgMTNdOyB9XG4gICAgZ2V0IHRleHRPZmZzZXQwKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0ICsgMTRdOyB9XG4gICAgZ2V0IHRleHRPZmZzZXQxKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0ICsgMTVdOyB9XG4gICAgZ2V0IGNvbGxpc2lvbkNpcmNsZURpYW1ldGVyKCkgeyByZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0ICsgMTZdOyB9XG59XG5cblN5bWJvbEluc3RhbmNlU3RydWN0LnByb3RvdHlwZS5zaXplID0gNjg7XG5cbmV4cG9ydCB0eXBlIFN5bWJvbEluc3RhbmNlID0gU3ltYm9sSW5zdGFuY2VTdHJ1Y3Q7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIFN5bWJvbEluc3RhbmNlQXJyYXkgZXh0ZW5kcyBTdHJ1Y3RBcnJheUxheW91dDhpMTV1aTF1bDRmNjgge1xuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgU3ltYm9sSW5zdGFuY2VTdHJ1Y3QgYXQgdGhlIGdpdmVuIGxvY2F0aW9uIGluIHRoZSBhcnJheS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBlbGVtZW50LlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgZ2V0KGluZGV4OiBudW1iZXIpOiBTeW1ib2xJbnN0YW5jZVN0cnVjdCB7XG4gICAgICAgIGFzc2VydCghdGhpcy5pc1RyYW5zZmVycmVkKTtcbiAgICAgICAgcmV0dXJuIG5ldyBTeW1ib2xJbnN0YW5jZVN0cnVjdCh0aGlzLCBpbmRleCk7XG4gICAgfVxufVxuXG5yZWdpc3RlcignU3ltYm9sSW5zdGFuY2VBcnJheScsIFN5bWJvbEluc3RhbmNlQXJyYXkpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBHbHlwaE9mZnNldEFycmF5IGV4dGVuZHMgU3RydWN0QXJyYXlMYXlvdXQxZjQge1xuICAgIGdldG9mZnNldFgoaW5kZXg6IG51bWJlcikgeyByZXR1cm4gdGhpcy5mbG9hdDMyW2luZGV4ICogMSArIDBdOyB9XG59XG5cbnJlZ2lzdGVyKCdHbHlwaE9mZnNldEFycmF5JywgR2x5cGhPZmZzZXRBcnJheSk7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIFN5bWJvbExpbmVWZXJ0ZXhBcnJheSBleHRlbmRzIFN0cnVjdEFycmF5TGF5b3V0M2k2IHtcbiAgICBnZXR4KGluZGV4OiBudW1iZXIpIHsgcmV0dXJuIHRoaXMuaW50MTZbaW5kZXggKiAzICsgMF07IH1cbiAgICBnZXR5KGluZGV4OiBudW1iZXIpIHsgcmV0dXJuIHRoaXMuaW50MTZbaW5kZXggKiAzICsgMV07IH1cbiAgICBnZXR0aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvcihpbmRleDogbnVtYmVyKSB7IHJldHVybiB0aGlzLmludDE2W2luZGV4ICogMyArIDJdOyB9XG59XG5cbnJlZ2lzdGVyKCdTeW1ib2xMaW5lVmVydGV4QXJyYXknLCBTeW1ib2xMaW5lVmVydGV4QXJyYXkpO1xuXG5jbGFzcyBGZWF0dXJlSW5kZXhTdHJ1Y3QgZXh0ZW5kcyBTdHJ1Y3Qge1xuICAgIF9zdHJ1Y3RBcnJheTogRmVhdHVyZUluZGV4QXJyYXk7XG4gICAgZmVhdHVyZUluZGV4OiBudW1iZXI7XG4gICAgc291cmNlTGF5ZXJJbmRleDogbnVtYmVyO1xuICAgIGJ1Y2tldEluZGV4OiBudW1iZXI7XG4gICAgZ2V0IGZlYXR1cmVJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0ICsgMF07IH1cbiAgICBnZXQgc291cmNlTGF5ZXJJbmRleCgpIHsgcmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyICsgMl07IH1cbiAgICBnZXQgYnVja2V0SW5kZXgoKSB7IHJldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMiArIDNdOyB9XG59XG5cbkZlYXR1cmVJbmRleFN0cnVjdC5wcm90b3R5cGUuc2l6ZSA9IDg7XG5cbmV4cG9ydCB0eXBlIEZlYXR1cmVJbmRleCA9IEZlYXR1cmVJbmRleFN0cnVjdDtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgRmVhdHVyZUluZGV4QXJyYXkgZXh0ZW5kcyBTdHJ1Y3RBcnJheUxheW91dDF1bDJ1aTgge1xuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgRmVhdHVyZUluZGV4U3RydWN0IGF0IHRoZSBnaXZlbiBsb2NhdGlvbiBpbiB0aGUgYXJyYXkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFRoZSBpbmRleCBvZiB0aGUgZWxlbWVudC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGdldChpbmRleDogbnVtYmVyKTogRmVhdHVyZUluZGV4U3RydWN0IHtcbiAgICAgICAgYXNzZXJ0KCF0aGlzLmlzVHJhbnNmZXJyZWQpO1xuICAgICAgICByZXR1cm4gbmV3IEZlYXR1cmVJbmRleFN0cnVjdCh0aGlzLCBpbmRleCk7XG4gICAgfVxufVxuXG5yZWdpc3RlcignRmVhdHVyZUluZGV4QXJyYXknLCBGZWF0dXJlSW5kZXhBcnJheSk7XG5cbmV4cG9ydCB7XG4gICAgU3RydWN0QXJyYXlMYXlvdXQyaTQsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQ0aTgsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQyaTRpMTIsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQyaTR1YjgsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQ4dWkydWIxOCxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDRpNHVpNGkyNCxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDNmMTIsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQxdWw0LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0NmkxdWwydWkyMCxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDJpMmkyaTEyLFxuICAgIFN0cnVjdEFycmF5TGF5b3V0MmYxZjJpMTYsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQydWIyZjEyLFxuICAgIFN0cnVjdEFycmF5TGF5b3V0M3VpNixcbiAgICBTdHJ1Y3RBcnJheUxheW91dDJpMnVpM3VsM3VpMmYzdWIxdWwxaTQ4LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0OGkxNXVpMXVsNGY2OCxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDFmNCxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDNpNixcbiAgICBTdHJ1Y3RBcnJheUxheW91dDF1bDJ1aTgsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQydWk0LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0MXVpMixcbiAgICBTdHJ1Y3RBcnJheUxheW91dDJmOCxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDRmMTYsXG4gICAgU3RydWN0QXJyYXlMYXlvdXQyaTQgYXMgUG9zQXJyYXksXG4gICAgU3RydWN0QXJyYXlMYXlvdXQ0aTggYXMgUmFzdGVyQm91bmRzQXJyYXksXG4gICAgU3RydWN0QXJyYXlMYXlvdXQyaTQgYXMgQ2lyY2xlTGF5b3V0QXJyYXksXG4gICAgU3RydWN0QXJyYXlMYXlvdXQyaTQgYXMgRmlsbExheW91dEFycmF5LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0Mmk0aTEyIGFzIEZpbGxFeHRydXNpb25MYXlvdXRBcnJheSxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDJpNCBhcyBIZWF0bWFwTGF5b3V0QXJyYXksXG4gICAgU3RydWN0QXJyYXlMYXlvdXQyaTR1YjggYXMgTGluZUxheW91dEFycmF5LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0OHVpMnViMTggYXMgUGF0dGVybkxheW91dEFycmF5LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0NGk0dWk0aTI0IGFzIFN5bWJvbExheW91dEFycmF5LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0M2YxMiBhcyBTeW1ib2xEeW5hbWljTGF5b3V0QXJyYXksXG4gICAgU3RydWN0QXJyYXlMYXlvdXQxdWw0IGFzIFN5bWJvbE9wYWNpdHlBcnJheSxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDJpMmkyaTEyIGFzIENvbGxpc2lvbkJveExheW91dEFycmF5LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0MmYxZjJpMTYgYXMgQ29sbGlzaW9uQ2lyY2xlTGF5b3V0QXJyYXksXG4gICAgU3RydWN0QXJyYXlMYXlvdXQydWIyZjEyIGFzIENvbGxpc2lvblZlcnRleEFycmF5LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0M3VpNiBhcyBRdWFkVHJpYW5nbGVBcnJheSxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDN1aTYgYXMgVHJpYW5nbGVJbmRleEFycmF5LFxuICAgIFN0cnVjdEFycmF5TGF5b3V0MnVpNCBhcyBMaW5lSW5kZXhBcnJheSxcbiAgICBTdHJ1Y3RBcnJheUxheW91dDF1aTIgYXMgTGluZVN0cmlwSW5kZXhBcnJheVxufTtcbiIsIi8vIEBmbG93XG5pbXBvcnQge2NyZWF0ZUxheW91dH0gZnJvbSAnLi4vLi4vdXRpbC9zdHJ1Y3RfYXJyYXknO1xuXG5jb25zdCBsYXlvdXQgPSBjcmVhdGVMYXlvdXQoW1xuICAgIHtuYW1lOiAnYV9wb3MnLCBjb21wb25lbnRzOiAyLCB0eXBlOiAnSW50MTYnfVxuXSwgNCk7XG5cbmV4cG9ydCBkZWZhdWx0IGxheW91dDtcbmV4cG9ydCBjb25zdCB7bWVtYmVycywgc2l6ZSwgYWxpZ25tZW50fSA9IGxheW91dDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7d2Fybk9uY2V9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5cbmltcG9ydCB7cmVnaXN0ZXJ9IGZyb20gJy4uL3V0aWwvd2ViX3dvcmtlcl90cmFuc2Zlcic7XG5cbmltcG9ydCB0eXBlIFZlcnRleEFycmF5T2JqZWN0IGZyb20gJy4uL3JlbmRlci92ZXJ0ZXhfYXJyYXlfb2JqZWN0JztcbmltcG9ydCB0eXBlIHtTdHJ1Y3RBcnJheX0gZnJvbSAnLi4vdXRpbC9zdHJ1Y3RfYXJyYXknO1xuXG5leHBvcnQgdHlwZSBTZWdtZW50ID0ge1xuICAgIHNvcnRLZXk6IG51bWJlciB8IHZvaWQsXG4gICAgdmVydGV4T2Zmc2V0OiBudW1iZXIsXG4gICAgcHJpbWl0aXZlT2Zmc2V0OiBudW1iZXIsXG4gICAgdmVydGV4TGVuZ3RoOiBudW1iZXIsXG4gICAgcHJpbWl0aXZlTGVuZ3RoOiBudW1iZXIsXG4gICAgdmFvczoge1tfOiBzdHJpbmddOiBWZXJ0ZXhBcnJheU9iamVjdH1cbn1cblxuY2xhc3MgU2VnbWVudFZlY3RvciB7XG4gICAgc3RhdGljIE1BWF9WRVJURVhfQVJSQVlfTEVOR1RIOiBudW1iZXI7XG4gICAgc2VnbWVudHM6IEFycmF5PFNlZ21lbnQ+O1xuXG4gICAgY29uc3RydWN0b3Ioc2VnbWVudHM/OiBBcnJheTxTZWdtZW50PiA9IFtdKSB7XG4gICAgICAgIHRoaXMuc2VnbWVudHMgPSBzZWdtZW50cztcbiAgICB9XG5cbiAgICBwcmVwYXJlU2VnbWVudChudW1WZXJ0aWNlczogbnVtYmVyLCBsYXlvdXRWZXJ0ZXhBcnJheTogU3RydWN0QXJyYXksIGluZGV4QXJyYXk6IFN0cnVjdEFycmF5LCBzb3J0S2V5PzogbnVtYmVyKTogU2VnbWVudCB7XG4gICAgICAgIGxldCBzZWdtZW50OiBTZWdtZW50ID0gdGhpcy5zZWdtZW50c1t0aGlzLnNlZ21lbnRzLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAobnVtVmVydGljZXMgPiBTZWdtZW50VmVjdG9yLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIKSB3YXJuT25jZShgTWF4IHZlcnRpY2VzIHBlciBzZWdtZW50IGlzICR7U2VnbWVudFZlY3Rvci5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSH06IGJ1Y2tldCByZXF1ZXN0ZWQgJHtudW1WZXJ0aWNlc31gKTtcbiAgICAgICAgaWYgKCFzZWdtZW50IHx8IHNlZ21lbnQudmVydGV4TGVuZ3RoICsgbnVtVmVydGljZXMgPiBTZWdtZW50VmVjdG9yLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIIHx8IHNlZ21lbnQuc29ydEtleSAhPT0gc29ydEtleSkge1xuICAgICAgICAgICAgc2VnbWVudCA9ICh7XG4gICAgICAgICAgICAgICAgdmVydGV4T2Zmc2V0OiBsYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgcHJpbWl0aXZlT2Zmc2V0OiBpbmRleEFycmF5Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICB2ZXJ0ZXhMZW5ndGg6IDAsXG4gICAgICAgICAgICAgICAgcHJpbWl0aXZlTGVuZ3RoOiAwXG4gICAgICAgICAgICB9OiBhbnkpO1xuICAgICAgICAgICAgaWYgKHNvcnRLZXkgIT09IHVuZGVmaW5lZCkgc2VnbWVudC5zb3J0S2V5ID0gc29ydEtleTtcbiAgICAgICAgICAgIHRoaXMuc2VnbWVudHMucHVzaChzZWdtZW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VnbWVudDtcbiAgICB9XG5cbiAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlZ21lbnRzO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiB0aGlzLnNlZ21lbnRzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGsgaW4gc2VnbWVudC52YW9zKSB7XG4gICAgICAgICAgICAgICAgc2VnbWVudC52YW9zW2tdLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBzaW1wbGVTZWdtZW50KHZlcnRleE9mZnNldDogbnVtYmVyLCBwcmltaXRpdmVPZmZzZXQ6IG51bWJlciwgdmVydGV4TGVuZ3RoOiBudW1iZXIsIHByaW1pdGl2ZUxlbmd0aDogbnVtYmVyKTogU2VnbWVudFZlY3RvciB7XG4gICAgICAgIHJldHVybiBuZXcgU2VnbWVudFZlY3Rvcihbe1xuICAgICAgICAgICAgdmVydGV4T2Zmc2V0LFxuICAgICAgICAgICAgcHJpbWl0aXZlT2Zmc2V0LFxuICAgICAgICAgICAgdmVydGV4TGVuZ3RoLFxuICAgICAgICAgICAgcHJpbWl0aXZlTGVuZ3RoLFxuICAgICAgICAgICAgdmFvczoge30sXG4gICAgICAgICAgICBzb3J0S2V5OiAwXG4gICAgICAgIH1dKTtcbiAgICB9XG59XG5cbi8qXG4gKiBUaGUgbWF4aW11bSBzaXplIG9mIGEgdmVydGV4IGFycmF5LiBUaGlzIGxpbWl0IGlzIGltcG9zZWQgYnkgV2ViR0wncyAxNiBiaXRcbiAqIGFkZHJlc3Npbmcgb2YgdmVydGV4IGJ1ZmZlcnMuXG4gKiBAcHJpdmF0ZVxuICogQHJlYWRvbmx5XG4gKi9cblNlZ21lbnRWZWN0b3IuTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEggPSBNYXRoLnBvdygyLCAxNikgLSAxO1xuXG5yZWdpc3RlcignU2VnbWVudFZlY3RvcicsIFNlZ21lbnRWZWN0b3IpO1xuZXhwb3J0IGRlZmF1bHQgU2VnbWVudFZlY3RvcjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7Y2xhbXB9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5cbi8qKlxuICogUGFja3MgdHdvIG51bWJlcnMsIGludGVycHJldGVkIGFzIDgtYml0IHVuc2lnbmVkIGludGVnZXJzLCBpbnRvIGEgc2luZ2xlXG4gKiBmbG9hdC4gIFVucGFjayB0aGVtIGluIHRoZSBzaGFkZXIgdXNpbmcgdGhlIGB1bnBhY2tfZmxvYXQoKWAgZnVuY3Rpb24sXG4gKiBkZWZpbmVkIGluIF9wcmVsdWRlLnZlcnRleC5nbHNsXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhY2tVaW50OFRvRmxvYXQoYTogbnVtYmVyLCBiOiBudW1iZXIpIHtcbiAgICAvLyBjb2VyY2UgYSBhbmQgYiB0byA4LWJpdCBpbnRzXG4gICAgYSA9IGNsYW1wKE1hdGguZmxvb3IoYSksIDAsIDI1NSk7XG4gICAgYiA9IGNsYW1wKE1hdGguZmxvb3IoYiksIDAsIDI1NSk7XG4gICAgcmV0dXJuIDI1NiAqIGEgKyBiO1xufVxuIiwiLy8gQGZsb3dcbmltcG9ydCB7Y3JlYXRlTGF5b3V0fSBmcm9tICcuLi8uLi91dGlsL3N0cnVjdF9hcnJheSc7XG5cbmNvbnN0IHBhdHRlcm5BdHRyaWJ1dGVzID0gY3JlYXRlTGF5b3V0KFtcbiAgICAvLyBbdGwueCwgdGwueSwgYnIueCwgYnIueV1cbiAgICB7bmFtZTogJ2FfcGF0dGVybl9mcm9tJywgY29tcG9uZW50czogNCwgdHlwZTogJ1VpbnQxNid9LFxuICAgIHtuYW1lOiAnYV9wYXR0ZXJuX3RvJywgY29tcG9uZW50czogNCwgdHlwZTogJ1VpbnQxNid9LFxuICAgIHtuYW1lOiAnYV9waXhlbF9yYXRpb19mcm9tJywgY29tcG9uZW50czogMSwgdHlwZTogJ1VpbnQ4J30sXG4gICAge25hbWU6ICdhX3BpeGVsX3JhdGlvX3RvJywgY29tcG9uZW50czogMSwgdHlwZTogJ1VpbnQ4J30sXG5dKTtcblxuZXhwb3J0IGRlZmF1bHQgcGF0dGVybkF0dHJpYnV0ZXM7XG4iLCIvKipcbiAqIEpTIEltcGxlbWVudGF0aW9uIG9mIE11cm11ckhhc2gzIChyMTM2KSAoYXMgb2YgTWF5IDIwLCAyMDExKVxuICogXG4gKiBAYXV0aG9yIDxhIGhyZWY9XCJtYWlsdG86Z2FyeS5jb3VydEBnbWFpbC5jb21cIj5HYXJ5IENvdXJ0PC9hPlxuICogQHNlZSBodHRwOi8vZ2l0aHViLmNvbS9nYXJ5Y291cnQvbXVybXVyaGFzaC1qc1xuICogQGF1dGhvciA8YSBocmVmPVwibWFpbHRvOmFhcHBsZWJ5QGdtYWlsLmNvbVwiPkF1c3RpbiBBcHBsZWJ5PC9hPlxuICogQHNlZSBodHRwOi8vc2l0ZXMuZ29vZ2xlLmNvbS9zaXRlL211cm11cmhhc2gvXG4gKiBcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgQVNDSUkgb25seVxuICogQHBhcmFtIHtudW1iZXJ9IHNlZWQgUG9zaXRpdmUgaW50ZWdlciBvbmx5XG4gKiBAcmV0dXJuIHtudW1iZXJ9IDMyLWJpdCBwb3NpdGl2ZSBpbnRlZ2VyIGhhc2ggXG4gKi9cblxuZnVuY3Rpb24gbXVybXVyaGFzaDNfMzJfZ2Moa2V5LCBzZWVkKSB7XG5cdHZhciByZW1haW5kZXIsIGJ5dGVzLCBoMSwgaDFiLCBjMSwgYzFiLCBjMiwgYzJiLCBrMSwgaTtcblx0XG5cdHJlbWFpbmRlciA9IGtleS5sZW5ndGggJiAzOyAvLyBrZXkubGVuZ3RoICUgNFxuXHRieXRlcyA9IGtleS5sZW5ndGggLSByZW1haW5kZXI7XG5cdGgxID0gc2VlZDtcblx0YzEgPSAweGNjOWUyZDUxO1xuXHRjMiA9IDB4MWI4NzM1OTM7XG5cdGkgPSAwO1xuXHRcblx0d2hpbGUgKGkgPCBieXRlcykge1xuXHQgIFx0azEgPSBcblx0ICBcdCAgKChrZXkuY2hhckNvZGVBdChpKSAmIDB4ZmYpKSB8XG5cdCAgXHQgICgoa2V5LmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDgpIHxcblx0ICBcdCAgKChrZXkuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgMTYpIHxcblx0ICBcdCAgKChrZXkuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgMjQpO1xuXHRcdCsraTtcblx0XHRcblx0XHRrMSA9ICgoKChrMSAmIDB4ZmZmZikgKiBjMSkgKyAoKCgoazEgPj4+IDE2KSAqIGMxKSAmIDB4ZmZmZikgPDwgMTYpKSkgJiAweGZmZmZmZmZmO1xuXHRcdGsxID0gKGsxIDw8IDE1KSB8IChrMSA+Pj4gMTcpO1xuXHRcdGsxID0gKCgoKGsxICYgMHhmZmZmKSAqIGMyKSArICgoKChrMSA+Pj4gMTYpICogYzIpICYgMHhmZmZmKSA8PCAxNikpKSAmIDB4ZmZmZmZmZmY7XG5cblx0XHRoMSBePSBrMTtcbiAgICAgICAgaDEgPSAoaDEgPDwgMTMpIHwgKGgxID4+PiAxOSk7XG5cdFx0aDFiID0gKCgoKGgxICYgMHhmZmZmKSAqIDUpICsgKCgoKGgxID4+PiAxNikgKiA1KSAmIDB4ZmZmZikgPDwgMTYpKSkgJiAweGZmZmZmZmZmO1xuXHRcdGgxID0gKCgoaDFiICYgMHhmZmZmKSArIDB4NmI2NCkgKyAoKCgoaDFiID4+PiAxNikgKyAweGU2NTQpICYgMHhmZmZmKSA8PCAxNikpO1xuXHR9XG5cdFxuXHRrMSA9IDA7XG5cdFxuXHRzd2l0Y2ggKHJlbWFpbmRlcikge1xuXHRcdGNhc2UgMzogazEgXj0gKGtleS5jaGFyQ29kZUF0KGkgKyAyKSAmIDB4ZmYpIDw8IDE2O1xuXHRcdGNhc2UgMjogazEgXj0gKGtleS5jaGFyQ29kZUF0KGkgKyAxKSAmIDB4ZmYpIDw8IDg7XG5cdFx0Y2FzZSAxOiBrMSBePSAoa2V5LmNoYXJDb2RlQXQoaSkgJiAweGZmKTtcblx0XHRcblx0XHRrMSA9ICgoKGsxICYgMHhmZmZmKSAqIGMxKSArICgoKChrMSA+Pj4gMTYpICogYzEpICYgMHhmZmZmKSA8PCAxNikpICYgMHhmZmZmZmZmZjtcblx0XHRrMSA9IChrMSA8PCAxNSkgfCAoazEgPj4+IDE3KTtcblx0XHRrMSA9ICgoKGsxICYgMHhmZmZmKSAqIGMyKSArICgoKChrMSA+Pj4gMTYpICogYzIpICYgMHhmZmZmKSA8PCAxNikpICYgMHhmZmZmZmZmZjtcblx0XHRoMSBePSBrMTtcblx0fVxuXHRcblx0aDEgXj0ga2V5Lmxlbmd0aDtcblxuXHRoMSBePSBoMSA+Pj4gMTY7XG5cdGgxID0gKCgoaDEgJiAweGZmZmYpICogMHg4NWViY2E2YikgKyAoKCgoaDEgPj4+IDE2KSAqIDB4ODVlYmNhNmIpICYgMHhmZmZmKSA8PCAxNikpICYgMHhmZmZmZmZmZjtcblx0aDEgXj0gaDEgPj4+IDEzO1xuXHRoMSA9ICgoKChoMSAmIDB4ZmZmZikgKiAweGMyYjJhZTM1KSArICgoKChoMSA+Pj4gMTYpICogMHhjMmIyYWUzNSkgJiAweGZmZmYpIDw8IDE2KSkpICYgMHhmZmZmZmZmZjtcblx0aDEgXj0gaDEgPj4+IDE2O1xuXG5cdHJldHVybiBoMSA+Pj4gMDtcbn1cblxuaWYodHlwZW9mIG1vZHVsZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICBtb2R1bGUuZXhwb3J0cyA9IG11cm11cmhhc2gzXzMyX2djXG59IiwiLyoqXG4gKiBKUyBJbXBsZW1lbnRhdGlvbiBvZiBNdXJtdXJIYXNoMlxuICogXG4gKiBAYXV0aG9yIDxhIGhyZWY9XCJtYWlsdG86Z2FyeS5jb3VydEBnbWFpbC5jb21cIj5HYXJ5IENvdXJ0PC9hPlxuICogQHNlZSBodHRwOi8vZ2l0aHViLmNvbS9nYXJ5Y291cnQvbXVybXVyaGFzaC1qc1xuICogQGF1dGhvciA8YSBocmVmPVwibWFpbHRvOmFhcHBsZWJ5QGdtYWlsLmNvbVwiPkF1c3RpbiBBcHBsZWJ5PC9hPlxuICogQHNlZSBodHRwOi8vc2l0ZXMuZ29vZ2xlLmNvbS9zaXRlL211cm11cmhhc2gvXG4gKiBcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgQVNDSUkgb25seVxuICogQHBhcmFtIHtudW1iZXJ9IHNlZWQgUG9zaXRpdmUgaW50ZWdlciBvbmx5XG4gKiBAcmV0dXJuIHtudW1iZXJ9IDMyLWJpdCBwb3NpdGl2ZSBpbnRlZ2VyIGhhc2hcbiAqL1xuXG5mdW5jdGlvbiBtdXJtdXJoYXNoMl8zMl9nYyhzdHIsIHNlZWQpIHtcbiAgdmFyXG4gICAgbCA9IHN0ci5sZW5ndGgsXG4gICAgaCA9IHNlZWQgXiBsLFxuICAgIGkgPSAwLFxuICAgIGs7XG4gIFxuICB3aGlsZSAobCA+PSA0KSB7XG4gIFx0ayA9IFxuICBcdCAgKChzdHIuY2hhckNvZGVBdChpKSAmIDB4ZmYpKSB8XG4gIFx0ICAoKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCA4KSB8XG4gIFx0ICAoKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCAxNikgfFxuICBcdCAgKChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgMjQpO1xuICAgIFxuICAgIGsgPSAoKChrICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUpICsgKCgoKGsgPj4+IDE2KSAqIDB4NWJkMWU5OTUpICYgMHhmZmZmKSA8PCAxNikpO1xuICAgIGsgXj0gayA+Pj4gMjQ7XG4gICAgayA9ICgoKGsgJiAweGZmZmYpICogMHg1YmQxZTk5NSkgKyAoKCgoayA+Pj4gMTYpICogMHg1YmQxZTk5NSkgJiAweGZmZmYpIDw8IDE2KSk7XG5cblx0aCA9ICgoKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSkgKyAoKCgoaCA+Pj4gMTYpICogMHg1YmQxZTk5NSkgJiAweGZmZmYpIDw8IDE2KSkgXiBrO1xuXG4gICAgbCAtPSA0O1xuICAgICsraTtcbiAgfVxuICBcbiAgc3dpdGNoIChsKSB7XG4gIGNhc2UgMzogaCBePSAoc3RyLmNoYXJDb2RlQXQoaSArIDIpICYgMHhmZikgPDwgMTY7XG4gIGNhc2UgMjogaCBePSAoc3RyLmNoYXJDb2RlQXQoaSArIDEpICYgMHhmZikgPDwgODtcbiAgY2FzZSAxOiBoIF49IChzdHIuY2hhckNvZGVBdChpKSAmIDB4ZmYpO1xuICAgICAgICAgIGggPSAoKChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUpICsgKCgoKGggPj4+IDE2KSAqIDB4NWJkMWU5OTUpICYgMHhmZmZmKSA8PCAxNikpO1xuICB9XG5cbiAgaCBePSBoID4+PiAxMztcbiAgaCA9ICgoKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSkgKyAoKCgoaCA+Pj4gMTYpICogMHg1YmQxZTk5NSkgJiAweGZmZmYpIDw8IDE2KSk7XG4gIGggXj0gaCA+Pj4gMTU7XG5cbiAgcmV0dXJuIGggPj4+IDA7XG59XG5cbmlmKHR5cGVvZiBtb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IG11cm11cmhhc2gyXzMyX2djXG59XG4iLCJ2YXIgbXVybXVyMyA9IHJlcXVpcmUoXCIuL211cm11cmhhc2gzX2djLmpzXCIpXG52YXIgbXVybXVyMiA9IHJlcXVpcmUoXCIuL211cm11cmhhc2gyX2djLmpzXCIpXG5cbm1vZHVsZS5leHBvcnRzID0gbXVybXVyM1xubW9kdWxlLmV4cG9ydHMubXVybXVyMyA9IG11cm11cjNcbm1vZHVsZS5leHBvcnRzLm11cm11cjIgPSBtdXJtdXIyXG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgbXVybXVyMyBmcm9tICdtdXJtdXJoYXNoLWpzJztcbmltcG9ydCB7cmVnaXN0ZXJ9IGZyb20gJy4uL3V0aWwvd2ViX3dvcmtlcl90cmFuc2Zlcic7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbnR5cGUgU2VyaWFsaXplZEZlYXR1cmVQb3NpdGlvbk1hcCA9IHtcbiAgICBpZHM6IEZsb2F0NjRBcnJheTtcbiAgICBwb3NpdGlvbnM6IFVpbnQzMkFycmF5O1xufTtcblxudHlwZSBGZWF0dXJlUG9zaXRpb24gPSB7XG4gICAgaW5kZXg6IG51bWJlcjtcbiAgICBzdGFydDogbnVtYmVyO1xuICAgIGVuZDogbnVtYmVyO1xufTtcblxuLy8gQSB0cmFuc2ZlcmFibGUgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBtYXBzIGZlYXR1cmUgaWRzIHRvIHRoZWlyIGluZGljZXMgYW5kIGJ1ZmZlciBvZmZzZXRzXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGZWF0dXJlUG9zaXRpb25NYXAge1xuICAgIGlkczogQXJyYXk8bnVtYmVyPjtcbiAgICBwb3NpdGlvbnM6IEFycmF5PG51bWJlcj47XG4gICAgaW5kZXhlZDogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmlkcyA9IFtdO1xuICAgICAgICB0aGlzLnBvc2l0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLmluZGV4ZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBhZGQoaWQ6IG1peGVkLCBpbmRleDogbnVtYmVyLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLmlkcy5wdXNoKGdldE51bWVyaWNJZChpZCkpO1xuICAgICAgICB0aGlzLnBvc2l0aW9ucy5wdXNoKGluZGV4LCBzdGFydCwgZW5kKTtcbiAgICB9XG5cbiAgICBnZXRQb3NpdGlvbnMoaWQ6IG1peGVkKTogQXJyYXk8RmVhdHVyZVBvc2l0aW9uPiB7XG4gICAgICAgIGFzc2VydCh0aGlzLmluZGV4ZWQpO1xuXG4gICAgICAgIGNvbnN0IGludElkID0gZ2V0TnVtZXJpY0lkKGlkKTtcblxuICAgICAgICAvLyBiaW5hcnkgc2VhcmNoIGZvciB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBpZCBpbiB0aGlzLmlkcztcbiAgICAgICAgLy8gcmVsaWVzIG9uIGlkcy9wb3NpdGlvbnMgYmVpbmcgc29ydGVkIGJ5IGlkLCB3aGljaCBoYXBwZW5zIGluIHNlcmlhbGl6YXRpb25cbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICBsZXQgaiA9IHRoaXMuaWRzLmxlbmd0aCAtIDE7XG4gICAgICAgIHdoaWxlIChpIDwgaikge1xuICAgICAgICAgICAgY29uc3QgbSA9IChpICsgaikgPj4gMTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlkc1ttXSA+PSBpbnRJZCkge1xuICAgICAgICAgICAgICAgIGogPSBtO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpID0gbSArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcG9zaXRpb25zID0gW107XG4gICAgICAgIHdoaWxlICh0aGlzLmlkc1tpXSA9PT0gaW50SWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wb3NpdGlvbnNbMyAqIGldO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLnBvc2l0aW9uc1szICogaSArIDFdO1xuICAgICAgICAgICAgY29uc3QgZW5kID0gdGhpcy5wb3NpdGlvbnNbMyAqIGkgKyAyXTtcbiAgICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKHtpbmRleCwgc3RhcnQsIGVuZH0pO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwb3NpdGlvbnM7XG4gICAgfVxuXG4gICAgc3RhdGljIHNlcmlhbGl6ZShtYXA6IEZlYXR1cmVQb3NpdGlvbk1hcCwgdHJhbnNmZXJhYmxlczogQXJyYXk8QXJyYXlCdWZmZXI+KTogU2VyaWFsaXplZEZlYXR1cmVQb3NpdGlvbk1hcCB7XG4gICAgICAgIGNvbnN0IGlkcyA9IG5ldyBGbG9hdDY0QXJyYXkobWFwLmlkcyk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IG5ldyBVaW50MzJBcnJheShtYXAucG9zaXRpb25zKTtcblxuICAgICAgICBzb3J0KGlkcywgcG9zaXRpb25zLCAwLCBpZHMubGVuZ3RoIC0gMSk7XG5cbiAgICAgICAgaWYgKHRyYW5zZmVyYWJsZXMpIHtcbiAgICAgICAgICAgIHRyYW5zZmVyYWJsZXMucHVzaChpZHMuYnVmZmVyLCBwb3NpdGlvbnMuYnVmZmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7aWRzLCBwb3NpdGlvbnN9O1xuICAgIH1cblxuICAgIHN0YXRpYyBkZXNlcmlhbGl6ZShvYmo6IFNlcmlhbGl6ZWRGZWF0dXJlUG9zaXRpb25NYXApOiBGZWF0dXJlUG9zaXRpb25NYXAge1xuICAgICAgICBjb25zdCBtYXAgPSBuZXcgRmVhdHVyZVBvc2l0aW9uTWFwKCk7XG4gICAgICAgIC8vIGFmdGVyIHRyYW5zZmVycmluZywgd2Ugb25seSB1c2UgdGhlc2UgYXJyYXlzIHN0YXRpY2FsbHkgKG5vIHB1c2hlcyksXG4gICAgICAgIC8vIHNvIFR5cGVkQXJyYXkgdnMgQXJyYXkgZGlzdGluY3Rpb24gdGhhdCBmbG93IHBvaW50cyBvdXQgZG9lc24ndCBtYXR0ZXJcbiAgICAgICAgbWFwLmlkcyA9IChvYmouaWRzOiBhbnkpO1xuICAgICAgICBtYXAucG9zaXRpb25zID0gKG9iai5wb3NpdGlvbnM6IGFueSk7XG4gICAgICAgIG1hcC5pbmRleGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIG1hcDtcbiAgICB9XG59XG5cbmNvbnN0IE1BWF9TQUZFX0lOVEVHRVIgPSBNYXRoLnBvdygyLCA1MykgLSAxO1xuXG5mdW5jdGlvbiBnZXROdW1lcmljSWQodmFsdWU6IG1peGVkKSB7XG4gICAgY29uc3QgbnVtVmFsdWUgPSArdmFsdWU7XG4gICAgaWYgKCFpc05hTihudW1WYWx1ZSkgJiYgbnVtVmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUikge1xuICAgICAgICByZXR1cm4gbnVtVmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBtdXJtdXIzKFN0cmluZyh2YWx1ZSkpO1xufVxuXG4vLyBjdXN0b20gcXVpY2tzb3J0IHRoYXQgc29ydHMgaWRzLCBpbmRpY2VzIGFuZCBvZmZzZXRzIHRvZ2V0aGVyIChieSBpZHMpXG4vLyB1c2VzIEhvYXJlIHBhcnRpdGlvbmluZyAmIG1hbnVhbCB0YWlsIGNhbGwgb3B0aW1pemF0aW9uIHRvIGF2b2lkIHdvcnN0IGNhc2Ugc2NlbmFyaW9zXG5mdW5jdGlvbiBzb3J0KGlkcywgcG9zaXRpb25zLCBsZWZ0LCByaWdodCkge1xuICAgIHdoaWxlIChsZWZ0IDwgcmlnaHQpIHtcbiAgICAgICAgY29uc3QgcGl2b3QgPSBpZHNbKGxlZnQgKyByaWdodCkgPj4gMV07XG4gICAgICAgIGxldCBpID0gbGVmdCAtIDE7XG4gICAgICAgIGxldCBqID0gcmlnaHQgKyAxO1xuXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBkbyBpKys7IHdoaWxlIChpZHNbaV0gPCBwaXZvdCk7XG4gICAgICAgICAgICBkbyBqLS07IHdoaWxlIChpZHNbal0gPiBwaXZvdCk7XG4gICAgICAgICAgICBpZiAoaSA+PSBqKSBicmVhaztcbiAgICAgICAgICAgIHN3YXAoaWRzLCBpLCBqKTtcbiAgICAgICAgICAgIHN3YXAocG9zaXRpb25zLCAzICogaSwgMyAqIGopO1xuICAgICAgICAgICAgc3dhcChwb3NpdGlvbnMsIDMgKiBpICsgMSwgMyAqIGogKyAxKTtcbiAgICAgICAgICAgIHN3YXAocG9zaXRpb25zLCAzICogaSArIDIsIDMgKiBqICsgMik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaiAtIGxlZnQgPCByaWdodCAtIGopIHtcbiAgICAgICAgICAgIHNvcnQoaWRzLCBwb3NpdGlvbnMsIGxlZnQsIGopO1xuICAgICAgICAgICAgbGVmdCA9IGogKyAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc29ydChpZHMsIHBvc2l0aW9ucywgaiArIDEsIHJpZ2h0KTtcbiAgICAgICAgICAgIHJpZ2h0ID0gajtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gc3dhcChhcnIsIGksIGopIHtcbiAgICBjb25zdCB0bXAgPSBhcnJbaV07XG4gICAgYXJyW2ldID0gYXJyW2pdO1xuICAgIGFycltqXSA9IHRtcDtcbn1cblxucmVnaXN0ZXIoJ0ZlYXR1cmVQb3NpdGlvbk1hcCcsIEZlYXR1cmVQb3NpdGlvbk1hcCk7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL2NvbG9yJztcblxuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi9nbC9jb250ZXh0JztcblxuZXhwb3J0IHR5cGUgVW5pZm9ybVZhbHVlczxVczogT2JqZWN0PlxuICAgID0gJEV4YWN0PCRPYmpNYXA8VXMsIDxWPih1OiBVbmlmb3JtPFY+KSA9PiBWPj47XG5leHBvcnQgdHlwZSBVbmlmb3JtTG9jYXRpb25zID0ge1tfOiBzdHJpbmddOiBXZWJHTFVuaWZvcm1Mb2NhdGlvbn07XG5cbmNsYXNzIFVuaWZvcm08VD4ge1xuICAgIGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ7XG4gICAgbG9jYXRpb246ID9XZWJHTFVuaWZvcm1Mb2NhdGlvbjtcbiAgICBjdXJyZW50OiBUO1xuXG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb246IFdlYkdMVW5pZm9ybUxvY2F0aW9uKSB7XG4gICAgICAgIHRoaXMuZ2wgPSBjb250ZXh0LmdsO1xuICAgICAgICB0aGlzLmxvY2F0aW9uID0gbG9jYXRpb247XG4gICAgfVxuXG4gICAgK3NldDogKHY6IFQpID0+IHZvaWQ7XG59XG5cbmNsYXNzIFVuaWZvcm0xaSBleHRlbmRzIFVuaWZvcm08bnVtYmVyPiB7XG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb246IFdlYkdMVW5pZm9ybUxvY2F0aW9uKSB7XG4gICAgICAgIHN1cGVyKGNvbnRleHQsIGxvY2F0aW9uKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gMDtcbiAgICB9XG5cbiAgICBzZXQodjogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnQgIT09IHYpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgICAgICB0aGlzLmdsLnVuaWZvcm0xaSh0aGlzLmxvY2F0aW9uLCB2KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgVW5pZm9ybTFmIGV4dGVuZHMgVW5pZm9ybTxudW1iZXI+IHtcbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbjogV2ViR0xVbmlmb3JtTG9jYXRpb24pIHtcbiAgICAgICAgc3VwZXIoY29udGV4dCwgbG9jYXRpb24pO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSAwO1xuICAgIH1cblxuICAgIHNldCh2OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudCAhPT0gdikge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgICAgIHRoaXMuZ2wudW5pZm9ybTFmKHRoaXMubG9jYXRpb24sIHYpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBVbmlmb3JtMmYgZXh0ZW5kcyBVbmlmb3JtPFtudW1iZXIsIG51bWJlcl0+IHtcbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbjogV2ViR0xVbmlmb3JtTG9jYXRpb24pIHtcbiAgICAgICAgc3VwZXIoY29udGV4dCwgbG9jYXRpb24pO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSBbMCwgMF07XG4gICAgfVxuXG4gICAgc2V0KHY6IFtudW1iZXIsIG51bWJlcl0pOiB2b2lkIHtcbiAgICAgICAgaWYgKHZbMF0gIT09IHRoaXMuY3VycmVudFswXSB8fCB2WzFdICE9PSB0aGlzLmN1cnJlbnRbMV0pIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgICAgICB0aGlzLmdsLnVuaWZvcm0yZih0aGlzLmxvY2F0aW9uLCB2WzBdLCB2WzFdKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgVW5pZm9ybTNmIGV4dGVuZHMgVW5pZm9ybTxbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0+IHtcbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbjogV2ViR0xVbmlmb3JtTG9jYXRpb24pIHtcbiAgICAgICAgc3VwZXIoY29udGV4dCwgbG9jYXRpb24pO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSBbMCwgMCwgMF07XG4gICAgfVxuXG4gICAgc2V0KHY6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSk6IHZvaWQge1xuICAgICAgICBpZiAodlswXSAhPT0gdGhpcy5jdXJyZW50WzBdIHx8IHZbMV0gIT09IHRoaXMuY3VycmVudFsxXSB8fCB2WzJdICE9PSB0aGlzLmN1cnJlbnRbMl0pIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgICAgICB0aGlzLmdsLnVuaWZvcm0zZih0aGlzLmxvY2F0aW9uLCB2WzBdLCB2WzFdLCB2WzJdKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgVW5pZm9ybTRmIGV4dGVuZHMgVW5pZm9ybTxbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXT4ge1xuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uOiBXZWJHTFVuaWZvcm1Mb2NhdGlvbikge1xuICAgICAgICBzdXBlcihjb250ZXh0LCBsb2NhdGlvbik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IFswLCAwLCAwLCAwXTtcbiAgICB9XG5cbiAgICBzZXQodjogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pOiB2b2lkIHtcbiAgICAgICAgaWYgKHZbMF0gIT09IHRoaXMuY3VycmVudFswXSB8fCB2WzFdICE9PSB0aGlzLmN1cnJlbnRbMV0gfHxcbiAgICAgICAgICAgIHZbMl0gIT09IHRoaXMuY3VycmVudFsyXSB8fCB2WzNdICE9PSB0aGlzLmN1cnJlbnRbM10pIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgICAgICB0aGlzLmdsLnVuaWZvcm00Zih0aGlzLmxvY2F0aW9uLCB2WzBdLCB2WzFdLCB2WzJdLCB2WzNdKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgVW5pZm9ybUNvbG9yIGV4dGVuZHMgVW5pZm9ybTxDb2xvcj4ge1xuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uOiBXZWJHTFVuaWZvcm1Mb2NhdGlvbikge1xuICAgICAgICBzdXBlcihjb250ZXh0LCBsb2NhdGlvbik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IENvbG9yLnRyYW5zcGFyZW50O1xuICAgIH1cblxuICAgIHNldCh2OiBDb2xvcik6IHZvaWQge1xuICAgICAgICBpZiAodi5yICE9PSB0aGlzLmN1cnJlbnQuciB8fCB2LmcgIT09IHRoaXMuY3VycmVudC5nIHx8XG4gICAgICAgICAgICB2LmIgIT09IHRoaXMuY3VycmVudC5iIHx8IHYuYSAhPT0gdGhpcy5jdXJyZW50LmEpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgICAgICB0aGlzLmdsLnVuaWZvcm00Zih0aGlzLmxvY2F0aW9uLCB2LnIsIHYuZywgdi5iLCB2LmEpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jb25zdCBlbXB0eU1hdDQgPSBuZXcgRmxvYXQzMkFycmF5KDE2KTtcbmNsYXNzIFVuaWZvcm1NYXRyaXg0ZiBleHRlbmRzIFVuaWZvcm08RmxvYXQzMkFycmF5PiB7XG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb246IFdlYkdMVW5pZm9ybUxvY2F0aW9uKSB7XG4gICAgICAgIHN1cGVyKGNvbnRleHQsIGxvY2F0aW9uKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gZW1wdHlNYXQ0O1xuICAgIH1cblxuICAgIHNldCh2OiBGbG9hdDMyQXJyYXkpOiB2b2lkIHtcbiAgICAgICAgLy8gVGhlIHZhc3QgbWFqb3JpdHkgb2YgbWF0cml4IGNvbXBhcmlzb25zIHRoYXQgd2lsbCB0cmlwIHRoaXMgc2V0XG4gICAgICAgIC8vIGhhcHBlbiBhdCBpPTEyIG9yIGk9MCwgc28gd2UgY2hlY2sgdGhvc2UgZmlyc3QgdG8gYXZvaWQgbG90cyBvZlxuICAgICAgICAvLyB1bm5lY2Vzc2FyeSBpdGVyYXRpb246XG4gICAgICAgIGlmICh2WzEyXSAhPT0gdGhpcy5jdXJyZW50WzEyXSB8fCB2WzBdICE9PSB0aGlzLmN1cnJlbnRbMF0pIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgICAgICB0aGlzLmdsLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5sb2NhdGlvbiwgZmFsc2UsIHYpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgMTY7IGkrKykge1xuICAgICAgICAgICAgaWYgKHZbaV0gIT09IHRoaXMuY3VycmVudFtpXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgICAgICAgICAgdGhpcy5nbC51bmlmb3JtTWF0cml4NGZ2KHRoaXMubG9jYXRpb24sIGZhbHNlLCB2KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IHtcbiAgICBVbmlmb3JtLFxuICAgIFVuaWZvcm0xaSxcbiAgICBVbmlmb3JtMWYsXG4gICAgVW5pZm9ybTJmLFxuICAgIFVuaWZvcm0zZixcbiAgICBVbmlmb3JtNGYsXG4gICAgVW5pZm9ybUNvbG9yLFxuICAgIFVuaWZvcm1NYXRyaXg0ZlxufTtcblxuZXhwb3J0IHR5cGUgVW5pZm9ybUJpbmRpbmdzID0ge1tfOiBzdHJpbmddOiBVbmlmb3JtPGFueT59O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtwYWNrVWludDhUb0Zsb2F0fSBmcm9tICcuLi9zaGFkZXJzL2VuY29kZV9hdHRyaWJ1dGUnO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5pbXBvcnQge3N1cHBvcnRzUHJvcGVydHlFeHByZXNzaW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvcHJvcGVydGllcyc7XG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuaW1wb3J0IHtQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWV9IGZyb20gJy4uL3N0eWxlL3Byb3BlcnRpZXMnO1xuaW1wb3J0IHtTdHJ1Y3RBcnJheUxheW91dDFmNCwgU3RydWN0QXJyYXlMYXlvdXQyZjgsIFN0cnVjdEFycmF5TGF5b3V0NGYxNiwgUGF0dGVybkxheW91dEFycmF5fSBmcm9tICcuL2FycmF5X3R5cGVzJztcbmltcG9ydCB7Y2xhbXB9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgcGF0dGVybkF0dHJpYnV0ZXMgZnJvbSAnLi9idWNrZXQvcGF0dGVybl9hdHRyaWJ1dGVzJztcbmltcG9ydCBFdmFsdWF0aW9uUGFyYW1ldGVycyBmcm9tICcuLi9zdHlsZS9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuaW1wb3J0IEZlYXR1cmVQb3NpdGlvbk1hcCBmcm9tICcuL2ZlYXR1cmVfcG9zaXRpb25fbWFwJztcbmltcG9ydCB7XG4gICAgVW5pZm9ybSxcbiAgICBVbmlmb3JtMWYsXG4gICAgVW5pZm9ybUNvbG9yLFxuICAgIFVuaWZvcm00ZixcbiAgICB0eXBlIFVuaWZvcm1Mb2NhdGlvbnNcbn0gZnJvbSAnLi4vcmVuZGVyL3VuaWZvcm1fYmluZGluZyc7XG5cbmltcG9ydCB0eXBlIHtDYW5vbmljYWxUaWxlSUR9IGZyb20gJy4uL3NvdXJjZS90aWxlX2lkJztcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VHlwZWRTdHlsZUxheWVyfSBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllci90eXBlZF9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSB7Q3Jvc3NmYWRlUGFyYW1ldGVyc30gZnJvbSAnLi4vc3R5bGUvZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcbmltcG9ydCB0eXBlIHtTdHJ1Y3RBcnJheSwgU3RydWN0QXJyYXlNZW1iZXJ9IGZyb20gJy4uL3V0aWwvc3RydWN0X2FycmF5JztcbmltcG9ydCB0eXBlIFZlcnRleEJ1ZmZlciBmcm9tICcuLi9nbC92ZXJ0ZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIHtJbWFnZVBvc2l0aW9ufSBmcm9tICcuLi9yZW5kZXIvaW1hZ2VfYXRsYXMnO1xuaW1wb3J0IHR5cGUge1xuICAgIEZlYXR1cmUsXG4gICAgRmVhdHVyZVN0YXRlLFxuICAgIEdsb2JhbFByb3BlcnRpZXMsXG4gICAgU291cmNlRXhwcmVzc2lvbixcbiAgICBDb21wb3NpdGVFeHByZXNzaW9uXG59IGZyb20gJy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSB7UG9zc2libHlFdmFsdWF0ZWR9IGZyb20gJy4uL3N0eWxlL3Byb3BlcnRpZXMnO1xuaW1wb3J0IHR5cGUge0ZlYXR1cmVTdGF0ZXN9IGZyb20gJy4uL3NvdXJjZS9zb3VyY2Vfc3RhdGUnO1xuaW1wb3J0IHR5cGUge0Zvcm1hdHRlZFNlY3Rpb259IGZyb20gJy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9mb3JtYXR0ZWQnO1xuXG5leHBvcnQgdHlwZSBCaW5kZXJVbmlmb3JtID0ge1xuICAgIG5hbWU6IHN0cmluZyxcbiAgICBwcm9wZXJ0eTogc3RyaW5nLFxuICAgIGJpbmRpbmc6IFVuaWZvcm08YW55PlxufTtcblxuZnVuY3Rpb24gcGFja0NvbG9yKGNvbG9yOiBDb2xvcik6IFtudW1iZXIsIG51bWJlcl0ge1xuICAgIHJldHVybiBbXG4gICAgICAgIHBhY2tVaW50OFRvRmxvYXQoMjU1ICogY29sb3IuciwgMjU1ICogY29sb3IuZyksXG4gICAgICAgIHBhY2tVaW50OFRvRmxvYXQoMjU1ICogY29sb3IuYiwgMjU1ICogY29sb3IuYSlcbiAgICBdO1xufVxuXG4vKipcbiAqICBgQmluZGVyYCBpcyB0aGUgaW50ZXJmYWNlIGRlZmluaXRpb24gZm9yIHRoZSBzdHJhdGVnaWVzIGZvciBjb25zdHJ1Y3RpbmcsXG4gKiAgdXBsb2FkaW5nLCBhbmQgYmluZGluZyBwYWludCBwcm9wZXJ0eSBkYXRhIGFzIEdMU0wgYXR0cmlidXRlcy4gTW9zdCBzdHlsZS1cbiAqICBzcGVjIHByb3BlcnRpZXMgaGF2ZSBhIDE6MSByZWxhdGlvbnNoaXAgdG8gc2hhZGVyIGF0dHJpYnV0ZS91bmlmb3JtcywgYnV0XG4gKiAgc29tZSByZXF1aXJlIG11bHRsaXBsZSB2YWx1ZXMgcGVyIGZlYXR1cmUgdG8gYmUgcGFzc2VkIHRvIHRoZSBHUFUsIGFuZCBpblxuICogIHRob3NlIGNhc2VzIHdlIGJpbmQgbXVsdGlwbGUgYXR0cmlidXRlcy91bmlmb3Jtcy5cbiAqXG4gKiAgSXQgaGFzIHRocmVlIGltcGxlbWVudGF0aW9ucywgb25lIGZvciBlYWNoIG9mIHRoZSB0aHJlZSBzdHJhdGVnaWVzIHdlIHVzZTpcbiAqXG4gKiAgKiBGb3IgX2NvbnN0YW50XyBwcm9wZXJ0aWVzIC0tIHRob3NlIHdob3NlIHZhbHVlIGlzIGEgY29uc3RhbnQsIG9yIHRoZSBjb25zdGFudFxuICogICAgcmVzdWx0IG9mIGV2YWx1YXRpbmcgYSBjYW1lcmEgZXhwcmVzc2lvbiBhdCBhIHBhcnRpY3VsYXIgY2FtZXJhIHBvc2l0aW9uIC0tIHdlXG4gKiAgICBkb24ndCBuZWVkIGEgdmVydGV4IGF0dHJpYnV0ZSBidWZmZXIsIGFuZCBpbnN0ZWFkIHVzZSBhIHVuaWZvcm0uXG4gKiAgKiBGb3IgZGF0YSBleHByZXNzaW9ucywgd2UgdXNlIGEgdmVydGV4IGJ1ZmZlciB3aXRoIGEgc2luZ2xlIGF0dHJpYnV0ZSB2YWx1ZSxcbiAqICAgIHRoZSBldmFsdWF0ZWQgcmVzdWx0IG9mIHRoZSBzb3VyY2UgZnVuY3Rpb24gZm9yIHRoZSBnaXZlbiBmZWF0dXJlLlxuICogICogRm9yIGNvbXBvc2l0ZSBleHByZXNzaW9ucywgd2UgdXNlIGEgdmVydGV4IGJ1ZmZlciB3aXRoIHR3byBhdHRyaWJ1dGVzOiBtaW4gYW5kXG4gKiAgICBtYXggdmFsdWVzIGNvdmVyaW5nIHRoZSByYW5nZSBvZiB6b29tcyBhdCB3aGljaCB3ZSBleHBlY3QgdGhlIHRpbGUgdG8gYmVcbiAqICAgIGRpc3BsYXllZC4gVGhlc2UgdmFsdWVzIGFyZSBjYWxjdWxhdGVkIGJ5IGV2YWx1YXRpbmcgdGhlIGNvbXBvc2l0ZSBleHByZXNzaW9uIGZvclxuICogICAgdGhlIGdpdmVuIGZlYXR1cmUgYXQgc3RyYXRlZ2ljYWxseSBjaG9zZW4gem9vbSBsZXZlbHMuIEluIGFkZGl0aW9uIHRvIHRoaXNcbiAqICAgIGF0dHJpYnV0ZSBkYXRhLCB3ZSBhbHNvIHVzZSBhIHVuaWZvcm0gdmFsdWUgd2hpY2ggdGhlIHNoYWRlciB1c2VzIHRvIGludGVycG9sYXRlXG4gKiAgICBiZXR3ZWVuIHRoZSBtaW4gYW5kIG1heCB2YWx1ZSBhdCB0aGUgZmluYWwgZGlzcGxheWVkIHpvb20gbGV2ZWwuIFRoZSB1c2Ugb2YgYVxuICogICAgdW5pZm9ybSBhbGxvd3MgdXMgdG8gY2hlYXBseSB1cGRhdGUgdGhlIHZhbHVlIG9uIGV2ZXJ5IGZyYW1lLlxuICpcbiAqICBOb3RlIHRoYXQgdGhlIHNoYWRlciBzb3VyY2UgdmFyaWVzIGRlcGVuZGluZyBvbiB3aGV0aGVyIHdlJ3JlIHVzaW5nIGEgdW5pZm9ybSBvclxuICogIGF0dHJpYnV0ZS4gV2UgZHluYW1pY2FsbHkgY29tcGlsZSBzaGFkZXJzIGF0IHJ1bnRpbWUgdG8gYWNjb21vZGF0ZSB0aGlzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblxuaW50ZXJmYWNlIEF0dHJpYnV0ZUJpbmRlciB7XG4gICAgcG9wdWxhdGVQYWludEFycmF5KGxlbmd0aDogbnVtYmVyLCBmZWF0dXJlOiBGZWF0dXJlLCBpbWFnZVBvc2l0aW9uczoge1tfOiBzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSwgY2Fub25pY2FsPzogQ2Fub25pY2FsVGlsZUlELCBmb3JtYXR0ZWRTZWN0aW9uPzogRm9ybWF0dGVkU2VjdGlvbik6IHZvaWQ7XG4gICAgdXBkYXRlUGFpbnRBcnJheShzdGFydDogbnVtYmVyLCBsZW5ndGg6IG51bWJlciwgZmVhdHVyZTogRmVhdHVyZSwgZmVhdHVyZVN0YXRlOiBGZWF0dXJlU3RhdGUsIGltYWdlUG9zaXRpb25zOiB7W186IHN0cmluZ106IEltYWdlUG9zaXRpb259KTogdm9pZDtcbiAgICB1cGxvYWQoQ29udGV4dCk6IHZvaWQ7XG4gICAgZGVzdHJveSgpOiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgVW5pZm9ybUJpbmRlciB7XG4gICAgdW5pZm9ybU5hbWVzOiBBcnJheTxzdHJpbmc+O1xuICAgIHNldFVuaWZvcm0odW5pZm9ybTogVW5pZm9ybTwqPiwgZ2xvYmFsczogR2xvYmFsUHJvcGVydGllcywgY3VycmVudFZhbHVlOiBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8Kj4sIHVuaWZvcm1OYW1lOiBzdHJpbmcpOiB2b2lkO1xuICAgIGdldEJpbmRpbmcoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb246IFdlYkdMVW5pZm9ybUxvY2F0aW9uLCBuYW1lOiBzdHJpbmcpOiAkU2hhcGU8VW5pZm9ybTwqPj47XG59XG5cbmNsYXNzIENvbnN0YW50QmluZGVyIGltcGxlbWVudHMgVW5pZm9ybUJpbmRlciB7XG4gICAgdmFsdWU6IG1peGVkO1xuICAgIHR5cGU6IHN0cmluZztcbiAgICB1bmlmb3JtTmFtZXM6IEFycmF5PHN0cmluZz47XG5cbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZTogbWl4ZWQsIG5hbWVzOiBBcnJheTxzdHJpbmc+LCB0eXBlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnVuaWZvcm1OYW1lcyA9IG5hbWVzLm1hcChuYW1lID0+IGB1XyR7bmFtZX1gKTtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB9XG5cbiAgICBzZXRVbmlmb3JtKHVuaWZvcm06IFVuaWZvcm08Kj4sIGdsb2JhbHM6IEdsb2JhbFByb3BlcnRpZXMsIGN1cnJlbnRWYWx1ZTogUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPG1peGVkPik6IHZvaWQge1xuICAgICAgICB1bmlmb3JtLnNldChjdXJyZW50VmFsdWUuY29uc3RhbnRPcih0aGlzLnZhbHVlKSk7XG4gICAgfVxuXG4gICAgZ2V0QmluZGluZyhjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbjogV2ViR0xVbmlmb3JtTG9jYXRpb24sIF86IHN0cmluZyk6ICRTaGFwZTxVbmlmb3JtPGFueT4+IHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnR5cGUgPT09ICdjb2xvcicpID9cbiAgICAgICAgICAgIG5ldyBVbmlmb3JtQ29sb3IoY29udGV4dCwgbG9jYXRpb24pIDpcbiAgICAgICAgICAgIG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb24pO1xuICAgIH1cbn1cblxuY2xhc3MgQ3Jvc3NGYWRlZENvbnN0YW50QmluZGVyIGltcGxlbWVudHMgVW5pZm9ybUJpbmRlciB7XG4gICAgdW5pZm9ybU5hbWVzOiBBcnJheTxzdHJpbmc+O1xuICAgIHBhdHRlcm5Gcm9tOiA/QXJyYXk8bnVtYmVyPjtcbiAgICBwYXR0ZXJuVG86ID9BcnJheTxudW1iZXI+O1xuICAgIHBpeGVsUmF0aW9Gcm9tOiBudW1iZXI7XG4gICAgcGl4ZWxSYXRpb1RvOiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZTogbWl4ZWQsIG5hbWVzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIHRoaXMudW5pZm9ybU5hbWVzID0gbmFtZXMubWFwKG5hbWUgPT4gYHVfJHtuYW1lfWApO1xuICAgICAgICB0aGlzLnBhdHRlcm5Gcm9tID0gbnVsbDtcbiAgICAgICAgdGhpcy5wYXR0ZXJuVG8gPSBudWxsO1xuICAgICAgICB0aGlzLnBpeGVsUmF0aW9Gcm9tID0gMS4wO1xuICAgICAgICB0aGlzLnBpeGVsUmF0aW9UbyA9IDEuMDtcbiAgICB9XG5cbiAgICBzZXRDb25zdGFudFBhdHRlcm5Qb3NpdGlvbnMocG9zVG86IEltYWdlUG9zaXRpb24sIHBvc0Zyb206IEltYWdlUG9zaXRpb24pIHtcbiAgICAgICAgdGhpcy5waXhlbFJhdGlvRnJvbSA9IHBvc0Zyb20ucGl4ZWxSYXRpbztcbiAgICAgICAgdGhpcy5waXhlbFJhdGlvVG8gPSBwb3NUby5waXhlbFJhdGlvO1xuICAgICAgICB0aGlzLnBhdHRlcm5Gcm9tID0gcG9zRnJvbS50bGJyO1xuICAgICAgICB0aGlzLnBhdHRlcm5UbyA9IHBvc1RvLnRsYnI7XG4gICAgfVxuXG4gICAgc2V0VW5pZm9ybSh1bmlmb3JtOiBVbmlmb3JtPCo+LCBnbG9iYWxzOiBHbG9iYWxQcm9wZXJ0aWVzLCBjdXJyZW50VmFsdWU6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxtaXhlZD4sIHVuaWZvcm1OYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgcG9zID1cbiAgICAgICAgICAgIHVuaWZvcm1OYW1lID09PSAndV9wYXR0ZXJuX3RvJyA/IHRoaXMucGF0dGVyblRvIDpcbiAgICAgICAgICAgIHVuaWZvcm1OYW1lID09PSAndV9wYXR0ZXJuX2Zyb20nID8gdGhpcy5wYXR0ZXJuRnJvbSA6XG4gICAgICAgICAgICB1bmlmb3JtTmFtZSA9PT0gJ3VfcGl4ZWxfcmF0aW9fdG8nID8gdGhpcy5waXhlbFJhdGlvVG8gOlxuICAgICAgICAgICAgdW5pZm9ybU5hbWUgPT09ICd1X3BpeGVsX3JhdGlvX2Zyb20nID8gdGhpcy5waXhlbFJhdGlvRnJvbSA6IG51bGw7XG4gICAgICAgIGlmIChwb3MpIHVuaWZvcm0uc2V0KHBvcyk7XG4gICAgfVxuXG4gICAgZ2V0QmluZGluZyhjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbjogV2ViR0xVbmlmb3JtTG9jYXRpb24sIG5hbWU6IHN0cmluZyk6ICRTaGFwZTxVbmlmb3JtPGFueT4+IHtcbiAgICAgICAgcmV0dXJuIG5hbWUuc3Vic3RyKDAsIDkpID09PSAndV9wYXR0ZXJuJyA/XG4gICAgICAgICAgICBuZXcgVW5pZm9ybTRmKGNvbnRleHQsIGxvY2F0aW9uKSA6XG4gICAgICAgICAgICBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9uKTtcbiAgICB9XG59XG5cbmNsYXNzIFNvdXJjZUV4cHJlc3Npb25CaW5kZXIgaW1wbGVtZW50cyBBdHRyaWJ1dGVCaW5kZXIge1xuICAgIGV4cHJlc3Npb246IFNvdXJjZUV4cHJlc3Npb247XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIG1heFZhbHVlOiBudW1iZXI7XG5cbiAgICBwYWludFZlcnRleEFycmF5OiBTdHJ1Y3RBcnJheTtcbiAgICBwYWludFZlcnRleEF0dHJpYnV0ZXM6IEFycmF5PFN0cnVjdEFycmF5TWVtYmVyPjtcbiAgICBwYWludFZlcnRleEJ1ZmZlcjogP1ZlcnRleEJ1ZmZlcjtcblxuICAgIGNvbnN0cnVjdG9yKGV4cHJlc3Npb246IFNvdXJjZUV4cHJlc3Npb24sIG5hbWVzOiBBcnJheTxzdHJpbmc+LCB0eXBlOiBzdHJpbmcsIFBhaW50VmVydGV4QXJyYXk6IENsYXNzPFN0cnVjdEFycmF5Pikge1xuICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgICB0aGlzLm1heFZhbHVlID0gMDtcbiAgICAgICAgdGhpcy5wYWludFZlcnRleEF0dHJpYnV0ZXMgPSBuYW1lcy5tYXAoKG5hbWUpID0+ICh7XG4gICAgICAgICAgICBuYW1lOiBgYV8ke25hbWV9YCxcbiAgICAgICAgICAgIHR5cGU6ICdGbG9hdDMyJyxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IHR5cGUgPT09ICdjb2xvcicgPyAyIDogMSxcbiAgICAgICAgICAgIG9mZnNldDogMFxuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMucGFpbnRWZXJ0ZXhBcnJheSA9IG5ldyBQYWludFZlcnRleEFycmF5KCk7XG4gICAgfVxuXG4gICAgcG9wdWxhdGVQYWludEFycmF5KG5ld0xlbmd0aDogbnVtYmVyLCBmZWF0dXJlOiBGZWF0dXJlLCBpbWFnZVBvc2l0aW9uczoge1tfOiBzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSwgY2Fub25pY2FsPzogQ2Fub25pY2FsVGlsZUlELCBmb3JtYXR0ZWRTZWN0aW9uPzogRm9ybWF0dGVkU2VjdGlvbikge1xuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMucGFpbnRWZXJ0ZXhBcnJheS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycygwKSwgZmVhdHVyZSwge30sIGNhbm9uaWNhbCwgW10sIGZvcm1hdHRlZFNlY3Rpb24pO1xuICAgICAgICB0aGlzLnBhaW50VmVydGV4QXJyYXkucmVzaXplKG5ld0xlbmd0aCk7XG4gICAgICAgIHRoaXMuX3NldFBhaW50VmFsdWUoc3RhcnQsIG5ld0xlbmd0aCwgdmFsdWUpO1xuICAgIH1cblxuICAgIHVwZGF0ZVBhaW50QXJyYXkoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIsIGZlYXR1cmU6IEZlYXR1cmUsIGZlYXR1cmVTdGF0ZTogRmVhdHVyZVN0YXRlKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKHt6b29tOiAwfSwgZmVhdHVyZSwgZmVhdHVyZVN0YXRlKTtcbiAgICAgICAgdGhpcy5fc2V0UGFpbnRWYWx1ZShzdGFydCwgZW5kLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgX3NldFBhaW50VmFsdWUoc3RhcnQsIGVuZCwgdmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2NvbG9yJykge1xuICAgICAgICAgICAgY29uc3QgY29sb3IgPSBwYWNrQ29sb3IodmFsdWUpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhaW50VmVydGV4QXJyYXkuZW1wbGFjZShpLCBjb2xvclswXSwgY29sb3JbMV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhaW50VmVydGV4QXJyYXkuZW1wbGFjZShpLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm1heFZhbHVlID0gTWF0aC5tYXgodGhpcy5tYXhWYWx1ZSwgTWF0aC5hYnModmFsdWUpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwbG9hZChjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgIGlmICh0aGlzLnBhaW50VmVydGV4QXJyYXkgJiYgdGhpcy5wYWludFZlcnRleEFycmF5LmFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wYWludFZlcnRleEJ1ZmZlciAmJiB0aGlzLnBhaW50VmVydGV4QnVmZmVyLmJ1ZmZlcikge1xuICAgICAgICAgICAgICAgIHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YSh0aGlzLnBhaW50VmVydGV4QXJyYXkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhaW50VmVydGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5wYWludFZlcnRleEFycmF5LCB0aGlzLnBhaW50VmVydGV4QXR0cmlidXRlcywgdGhpcy5leHByZXNzaW9uLmlzU3RhdGVEZXBlbmRlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIpIHtcbiAgICAgICAgICAgIHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBDb21wb3NpdGVFeHByZXNzaW9uQmluZGVyIGltcGxlbWVudHMgQXR0cmlidXRlQmluZGVyLCBVbmlmb3JtQmluZGVyIHtcbiAgICBleHByZXNzaW9uOiBDb21wb3NpdGVFeHByZXNzaW9uO1xuICAgIHVuaWZvcm1OYW1lczogQXJyYXk8c3RyaW5nPjtcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgdXNlSW50ZWdlclpvb206IGJvb2xlYW47XG4gICAgem9vbTogbnVtYmVyO1xuICAgIG1heFZhbHVlOiBudW1iZXI7XG5cbiAgICBwYWludFZlcnRleEFycmF5OiBTdHJ1Y3RBcnJheTtcbiAgICBwYWludFZlcnRleEF0dHJpYnV0ZXM6IEFycmF5PFN0cnVjdEFycmF5TWVtYmVyPjtcbiAgICBwYWludFZlcnRleEJ1ZmZlcjogP1ZlcnRleEJ1ZmZlcjtcblxuICAgIGNvbnN0cnVjdG9yKGV4cHJlc3Npb246IENvbXBvc2l0ZUV4cHJlc3Npb24sIG5hbWVzOiBBcnJheTxzdHJpbmc+LCB0eXBlOiBzdHJpbmcsIHVzZUludGVnZXJab29tOiBib29sZWFuLCB6b29tOiBudW1iZXIsIFBhaW50VmVydGV4QXJyYXk6IENsYXNzPFN0cnVjdEFycmF5Pikge1xuICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByZXNzaW9uO1xuICAgICAgICB0aGlzLnVuaWZvcm1OYW1lcyA9IG5hbWVzLm1hcChuYW1lID0+IGB1XyR7bmFtZX1fdGApO1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgICAgICB0aGlzLnVzZUludGVnZXJab29tID0gdXNlSW50ZWdlclpvb207XG4gICAgICAgIHRoaXMuem9vbSA9IHpvb207XG4gICAgICAgIHRoaXMubWF4VmFsdWUgPSAwO1xuICAgICAgICB0aGlzLnBhaW50VmVydGV4QXR0cmlidXRlcyA9IG5hbWVzLm1hcCgobmFtZSkgPT4gKHtcbiAgICAgICAgICAgIG5hbWU6IGBhXyR7bmFtZX1gLFxuICAgICAgICAgICAgdHlwZTogJ0Zsb2F0MzInLFxuICAgICAgICAgICAgY29tcG9uZW50czogdHlwZSA9PT0gJ2NvbG9yJyA/IDQgOiAyLFxuICAgICAgICAgICAgb2Zmc2V0OiAwXG4gICAgICAgIH0pKTtcbiAgICAgICAgdGhpcy5wYWludFZlcnRleEFycmF5ID0gbmV3IFBhaW50VmVydGV4QXJyYXkoKTtcbiAgICB9XG5cbiAgICBwb3B1bGF0ZVBhaW50QXJyYXkobmV3TGVuZ3RoOiBudW1iZXIsIGZlYXR1cmU6IEZlYXR1cmUsIGltYWdlUG9zaXRpb25zOiB7W186IHN0cmluZ106IEltYWdlUG9zaXRpb259LCBjYW5vbmljYWw/OiBDYW5vbmljYWxUaWxlSUQsIGZvcm1hdHRlZFNlY3Rpb24/OiBGb3JtYXR0ZWRTZWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IG1pbiA9IHRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgRXZhbHVhdGlvblBhcmFtZXRlcnModGhpcy56b29tKSwgZmVhdHVyZSwge30sIGNhbm9uaWNhbCwgW10sIGZvcm1hdHRlZFNlY3Rpb24pO1xuICAgICAgICBjb25zdCBtYXggPSB0aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKHRoaXMuem9vbSArIDEpLCBmZWF0dXJlLCB7fSwgY2Fub25pY2FsLCBbXSwgZm9ybWF0dGVkU2VjdGlvbik7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5wYWludFZlcnRleEFycmF5Lmxlbmd0aDtcbiAgICAgICAgdGhpcy5wYWludFZlcnRleEFycmF5LnJlc2l6ZShuZXdMZW5ndGgpO1xuICAgICAgICB0aGlzLl9zZXRQYWludFZhbHVlKHN0YXJ0LCBuZXdMZW5ndGgsIG1pbiwgbWF4KTtcbiAgICB9XG5cbiAgICB1cGRhdGVQYWludEFycmF5KHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyLCBmZWF0dXJlOiBGZWF0dXJlLCBmZWF0dXJlU3RhdGU6IEZlYXR1cmVTdGF0ZSkge1xuICAgICAgICBjb25zdCBtaW4gPSB0aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUoe3pvb206IHRoaXMuem9vbX0sIGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSk7XG4gICAgICAgIGNvbnN0IG1heCA9IHRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZSh7em9vbTogdGhpcy56b29tICsgMX0sIGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSk7XG4gICAgICAgIHRoaXMuX3NldFBhaW50VmFsdWUoc3RhcnQsIGVuZCwgbWluLCBtYXgpO1xuICAgIH1cblxuICAgIF9zZXRQYWludFZhbHVlKHN0YXJ0LCBlbmQsIG1pbiwgbWF4KSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdjb2xvcicpIHtcbiAgICAgICAgICAgIGNvbnN0IG1pbkNvbG9yID0gcGFja0NvbG9yKG1pbik7XG4gICAgICAgICAgICBjb25zdCBtYXhDb2xvciA9IHBhY2tDb2xvcihtYXgpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhaW50VmVydGV4QXJyYXkuZW1wbGFjZShpLCBtaW5Db2xvclswXSwgbWluQ29sb3JbMV0sIG1heENvbG9yWzBdLCBtYXhDb2xvclsxXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXMucGFpbnRWZXJ0ZXhBcnJheS5lbXBsYWNlKGksIG1pbiwgbWF4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubWF4VmFsdWUgPSBNYXRoLm1heCh0aGlzLm1heFZhbHVlLCBNYXRoLmFicyhtaW4pLCBNYXRoLmFicyhtYXgpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwbG9hZChjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgIGlmICh0aGlzLnBhaW50VmVydGV4QXJyYXkgJiYgdGhpcy5wYWludFZlcnRleEFycmF5LmFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wYWludFZlcnRleEJ1ZmZlciAmJiB0aGlzLnBhaW50VmVydGV4QnVmZmVyLmJ1ZmZlcikge1xuICAgICAgICAgICAgICAgIHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YSh0aGlzLnBhaW50VmVydGV4QXJyYXkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhaW50VmVydGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5wYWludFZlcnRleEFycmF5LCB0aGlzLnBhaW50VmVydGV4QXR0cmlidXRlcywgdGhpcy5leHByZXNzaW9uLmlzU3RhdGVEZXBlbmRlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIpIHtcbiAgICAgICAgICAgIHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0VW5pZm9ybSh1bmlmb3JtOiBVbmlmb3JtPCo+LCBnbG9iYWxzOiBHbG9iYWxQcm9wZXJ0aWVzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRab29tID0gdGhpcy51c2VJbnRlZ2VyWm9vbSA/IE1hdGguZmxvb3IoZ2xvYmFscy56b29tKSA6IGdsb2JhbHMuem9vbTtcbiAgICAgICAgY29uc3QgZmFjdG9yID0gY2xhbXAodGhpcy5leHByZXNzaW9uLmludGVycG9sYXRpb25GYWN0b3IoY3VycmVudFpvb20sIHRoaXMuem9vbSwgdGhpcy56b29tICsgMSksIDAsIDEpO1xuICAgICAgICB1bmlmb3JtLnNldChmYWN0b3IpO1xuICAgIH1cblxuICAgIGdldEJpbmRpbmcoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb246IFdlYkdMVW5pZm9ybUxvY2F0aW9uLCBfOiBzdHJpbmcpOiBVbmlmb3JtMWYge1xuICAgICAgICByZXR1cm4gbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbik7XG4gICAgfVxufVxuXG5jbGFzcyBDcm9zc0ZhZGVkQ29tcG9zaXRlQmluZGVyIGltcGxlbWVudHMgQXR0cmlidXRlQmluZGVyIHtcbiAgICBleHByZXNzaW9uOiBDb21wb3NpdGVFeHByZXNzaW9uO1xuICAgIHR5cGU6IHN0cmluZztcbiAgICB1c2VJbnRlZ2VyWm9vbTogYm9vbGVhbjtcbiAgICB6b29tOiBudW1iZXI7XG4gICAgbGF5ZXJJZDogc3RyaW5nO1xuXG4gICAgem9vbUluUGFpbnRWZXJ0ZXhBcnJheTogU3RydWN0QXJyYXk7XG4gICAgem9vbU91dFBhaW50VmVydGV4QXJyYXk6IFN0cnVjdEFycmF5O1xuICAgIHpvb21JblBhaW50VmVydGV4QnVmZmVyOiA/VmVydGV4QnVmZmVyO1xuICAgIHpvb21PdXRQYWludFZlcnRleEJ1ZmZlcjogP1ZlcnRleEJ1ZmZlcjtcbiAgICBwYWludFZlcnRleEF0dHJpYnV0ZXM6IEFycmF5PFN0cnVjdEFycmF5TWVtYmVyPjtcblxuICAgIGNvbnN0cnVjdG9yKGV4cHJlc3Npb246IENvbXBvc2l0ZUV4cHJlc3Npb24sIHR5cGU6IHN0cmluZywgdXNlSW50ZWdlclpvb206IGJvb2xlYW4sIHpvb206IG51bWJlciwgUGFpbnRWZXJ0ZXhBcnJheTogQ2xhc3M8U3RydWN0QXJyYXk+LCBsYXllcklkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5leHByZXNzaW9uID0gZXhwcmVzc2lvbjtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgdGhpcy51c2VJbnRlZ2VyWm9vbSA9IHVzZUludGVnZXJab29tO1xuICAgICAgICB0aGlzLnpvb20gPSB6b29tO1xuICAgICAgICB0aGlzLmxheWVySWQgPSBsYXllcklkO1xuXG4gICAgICAgIHRoaXMuem9vbUluUGFpbnRWZXJ0ZXhBcnJheSA9IG5ldyBQYWludFZlcnRleEFycmF5KCk7XG4gICAgICAgIHRoaXMuem9vbU91dFBhaW50VmVydGV4QXJyYXkgPSBuZXcgUGFpbnRWZXJ0ZXhBcnJheSgpO1xuICAgIH1cblxuICAgIHBvcHVsYXRlUGFpbnRBcnJheShsZW5ndGg6IG51bWJlciwgZmVhdHVyZTogRmVhdHVyZSwgaW1hZ2VQb3NpdGlvbnM6IHtbXzogc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0pIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLnpvb21JblBhaW50VmVydGV4QXJyYXkubGVuZ3RoO1xuICAgICAgICB0aGlzLnpvb21JblBhaW50VmVydGV4QXJyYXkucmVzaXplKGxlbmd0aCk7XG4gICAgICAgIHRoaXMuem9vbU91dFBhaW50VmVydGV4QXJyYXkucmVzaXplKGxlbmd0aCk7XG4gICAgICAgIHRoaXMuX3NldFBhaW50VmFsdWVzKHN0YXJ0LCBsZW5ndGgsIGZlYXR1cmUucGF0dGVybnMgJiYgZmVhdHVyZS5wYXR0ZXJuc1t0aGlzLmxheWVySWRdLCBpbWFnZVBvc2l0aW9ucyk7XG4gICAgfVxuXG4gICAgdXBkYXRlUGFpbnRBcnJheShzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlciwgZmVhdHVyZTogRmVhdHVyZSwgZmVhdHVyZVN0YXRlOiBGZWF0dXJlU3RhdGUsIGltYWdlUG9zaXRpb25zOiB7W186IHN0cmluZ106IEltYWdlUG9zaXRpb259KSB7XG4gICAgICAgIHRoaXMuX3NldFBhaW50VmFsdWVzKHN0YXJ0LCBlbmQsIGZlYXR1cmUucGF0dGVybnMgJiYgZmVhdHVyZS5wYXR0ZXJuc1t0aGlzLmxheWVySWRdLCBpbWFnZVBvc2l0aW9ucyk7XG4gICAgfVxuXG4gICAgX3NldFBhaW50VmFsdWVzKHN0YXJ0LCBlbmQsIHBhdHRlcm5zLCBwb3NpdGlvbnMpIHtcbiAgICAgICAgaWYgKCFwb3NpdGlvbnMgfHwgIXBhdHRlcm5zKSByZXR1cm47XG5cbiAgICAgICAgY29uc3Qge21pbiwgbWlkLCBtYXh9ID0gcGF0dGVybnM7XG4gICAgICAgIGNvbnN0IGltYWdlTWluID0gcG9zaXRpb25zW21pbl07XG4gICAgICAgIGNvbnN0IGltYWdlTWlkID0gcG9zaXRpb25zW21pZF07XG4gICAgICAgIGNvbnN0IGltYWdlTWF4ID0gcG9zaXRpb25zW21heF07XG4gICAgICAgIGlmICghaW1hZ2VNaW4gfHwgIWltYWdlTWlkIHx8ICFpbWFnZU1heCkgcmV0dXJuO1xuXG4gICAgICAgIC8vIFdlIHBvcHVsYXRlIHR3byBwYWludCBhcnJheXMgYmVjYXVzZSwgZm9yIGNyb3NzLWZhZGVkIHByb3BlcnRpZXMsIHdlIGRvbid0IGtub3cgd2hpY2ggZGlyZWN0aW9uXG4gICAgICAgIC8vIHdlJ3JlIGNyb3NzLWZhZGluZyB0byBhdCBsYXlvdXQgdGltZS4gSW4gb3JkZXIgdG8ga2VlcCB2ZXJ0ZXggYXR0cmlidXRlcyB0byBhIG1pbmltdW0gYW5kIG5vdCBwYXNzXG4gICAgICAgIC8vIHVubmVjZXNzYXJ5IHZlcnRleCBkYXRhIHRvIHRoZSBzaGFkZXJzLCB3ZSBkZXRlcm1pbmUgd2hpY2ggdG8gdXBsb2FkIGF0IGRyYXcgdGltZS5cbiAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuem9vbUluUGFpbnRWZXJ0ZXhBcnJheS5lbXBsYWNlKGksXG4gICAgICAgICAgICAgICAgaW1hZ2VNaWQudGxbMF0sIGltYWdlTWlkLnRsWzFdLCBpbWFnZU1pZC5iclswXSwgaW1hZ2VNaWQuYnJbMV0sXG4gICAgICAgICAgICAgICAgaW1hZ2VNaW4udGxbMF0sIGltYWdlTWluLnRsWzFdLCBpbWFnZU1pbi5iclswXSwgaW1hZ2VNaW4uYnJbMV0sXG4gICAgICAgICAgICAgICAgaW1hZ2VNaWQucGl4ZWxSYXRpbyxcbiAgICAgICAgICAgICAgICBpbWFnZU1pbi5waXhlbFJhdGlvLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuem9vbU91dFBhaW50VmVydGV4QXJyYXkuZW1wbGFjZShpLFxuICAgICAgICAgICAgICAgIGltYWdlTWlkLnRsWzBdLCBpbWFnZU1pZC50bFsxXSwgaW1hZ2VNaWQuYnJbMF0sIGltYWdlTWlkLmJyWzFdLFxuICAgICAgICAgICAgICAgIGltYWdlTWF4LnRsWzBdLCBpbWFnZU1heC50bFsxXSwgaW1hZ2VNYXguYnJbMF0sIGltYWdlTWF4LmJyWzFdLFxuICAgICAgICAgICAgICAgIGltYWdlTWlkLnBpeGVsUmF0aW8sXG4gICAgICAgICAgICAgICAgaW1hZ2VNYXgucGl4ZWxSYXRpbyxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGxvYWQoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgICBpZiAodGhpcy56b29tSW5QYWludFZlcnRleEFycmF5ICYmIHRoaXMuem9vbUluUGFpbnRWZXJ0ZXhBcnJheS5hcnJheUJ1ZmZlciAmJiB0aGlzLnpvb21PdXRQYWludFZlcnRleEFycmF5ICYmIHRoaXMuem9vbU91dFBhaW50VmVydGV4QXJyYXkuYXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICAgIHRoaXMuem9vbUluUGFpbnRWZXJ0ZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLnpvb21JblBhaW50VmVydGV4QXJyYXksIHBhdHRlcm5BdHRyaWJ1dGVzLm1lbWJlcnMsIHRoaXMuZXhwcmVzc2lvbi5pc1N0YXRlRGVwZW5kZW50KTtcbiAgICAgICAgICAgIHRoaXMuem9vbU91dFBhaW50VmVydGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy56b29tT3V0UGFpbnRWZXJ0ZXhBcnJheSwgcGF0dGVybkF0dHJpYnV0ZXMubWVtYmVycywgdGhpcy5leHByZXNzaW9uLmlzU3RhdGVEZXBlbmRlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuem9vbU91dFBhaW50VmVydGV4QnVmZmVyKSB0aGlzLnpvb21PdXRQYWludFZlcnRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIGlmICh0aGlzLnpvb21JblBhaW50VmVydGV4QnVmZmVyKSB0aGlzLnpvb21JblBhaW50VmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICB9XG59XG5cbi8qKlxuICogUHJvZ3JhbUNvbmZpZ3VyYXRpb24gY29udGFpbnMgdGhlIGxvZ2ljIGZvciBiaW5kaW5nIHN0eWxlIGxheWVyIHByb3BlcnRpZXMgYW5kIHRpbGVcbiAqIGxheWVyIGZlYXR1cmUgZGF0YSBpbnRvIEdMIHByb2dyYW0gdW5pZm9ybXMgYW5kIHZlcnRleCBhdHRyaWJ1dGVzLlxuICpcbiAqIE5vbi1kYXRhLWRyaXZlbiBwcm9wZXJ0eSB2YWx1ZXMgYXJlIGJvdW5kIHRvIHNoYWRlciB1bmlmb3Jtcy4gRGF0YS1kcml2ZW4gcHJvcGVydHlcbiAqIHZhbHVlcyBhcmUgYm91bmQgdG8gdmVydGV4IGF0dHJpYnV0ZXMuIEluIG9yZGVyIHRvIHN1cHBvcnQgYSB1bmlmb3JtIEdMU0wgc3ludGF4IG92ZXJcbiAqIGJvdGgsIFtNYXBib3ggR0wgU2hhZGVyc10oaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtc2hhZGVycykgZGVmaW5lcyBhIGAjcHJhZ21hYFxuICogYWJzdHJhY3Rpb24sIHdoaWNoIFByb2dyYW1Db25maWd1cmF0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBpbXBsZW1lbnRpbmcuIEF0IHJ1bnRpbWUsXG4gKiBpdCBleGFtaW5lcyB0aGUgYXR0cmlidXRlcyBvZiBhIHBhcnRpY3VsYXIgbGF5ZXIsIGNvbWJpbmVzIHRoaXMgd2l0aCBmaXhlZCBrbm93bGVkZ2VcbiAqIGFib3V0IGhvdyBsYXllcnMgb2YgdGhlIHBhcnRpY3VsYXIgdHlwZSBhcmUgaW1wbGVtZW50ZWQsIGFuZCBkZXRlcm1pbmVzIHdoaWNoIHVuaWZvcm1zXG4gKiBhbmQgdmVydGV4IGF0dHJpYnV0ZXMgd2lsbCBiZSByZXF1aXJlZC4gSXQgY2FuIHRoZW4gc3Vic3RpdHV0ZSB0aGUgYXBwcm9wcmlhdGUgdGV4dFxuICogaW50byB0aGUgc2hhZGVyIHNvdXJjZSBjb2RlLCBjcmVhdGUgYW5kIGxpbmsgYSBwcm9ncmFtLCBhbmQgYmluZCB0aGUgdW5pZm9ybXMgYW5kXG4gKiB2ZXJ0ZXggYXR0cmlidXRlcyBpbiBwcmVwYXJhdGlvbiBmb3IgZHJhd2luZy5cbiAqXG4gKiBXaGVuIGEgdmVjdG9yIHRpbGUgaXMgcGFyc2VkLCB0aGlzIHNhbWUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBpcyB1c2VkIHRvXG4gKiBwb3B1bGF0ZSB0aGUgYXR0cmlidXRlIGJ1ZmZlcnMgbmVlZGVkIGZvciBkYXRhLWRyaXZlbiBzdHlsaW5nIHVzaW5nIHRoZSB6b29tXG4gKiBsZXZlbCBhbmQgZmVhdHVyZSBwcm9wZXJ0eSBkYXRhLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByb2dyYW1Db25maWd1cmF0aW9uIHtcbiAgICBiaW5kZXJzOiB7W186IHN0cmluZ106IChBdHRyaWJ1dGVCaW5kZXIgfCBVbmlmb3JtQmluZGVyKSB9O1xuICAgIGNhY2hlS2V5OiBzdHJpbmc7XG4gICAgbGF5b3V0QXR0cmlidXRlczogQXJyYXk8U3RydWN0QXJyYXlNZW1iZXI+O1xuXG4gICAgX2J1ZmZlcnM6IEFycmF5PFZlcnRleEJ1ZmZlcj47XG5cbiAgICBjb25zdHJ1Y3RvcihsYXllcjogVHlwZWRTdHlsZUxheWVyLCB6b29tOiBudW1iZXIsIGZpbHRlclByb3BlcnRpZXM6IChfOiBzdHJpbmcpID0+IGJvb2xlYW4sIGxheW91dEF0dHJpYnV0ZXM6IEFycmF5PFN0cnVjdEFycmF5TWVtYmVyPikge1xuICAgICAgICB0aGlzLmJpbmRlcnMgPSB7fTtcbiAgICAgICAgdGhpcy5sYXlvdXRBdHRyaWJ1dGVzID0gbGF5b3V0QXR0cmlidXRlcztcbiAgICAgICAgdGhpcy5fYnVmZmVycyA9IFtdO1xuXG4gICAgICAgIGNvbnN0IGtleXMgPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIGxheWVyLnBhaW50Ll92YWx1ZXMpIHtcbiAgICAgICAgICAgIGlmICghZmlsdGVyUHJvcGVydGllcyhwcm9wZXJ0eSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBsYXllci5wYWludC5nZXQocHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKCEodmFsdWUgaW5zdGFuY2VvZiBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWUpIHx8ICFzdXBwb3J0c1Byb3BlcnR5RXhwcmVzc2lvbih2YWx1ZS5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbmFtZXMgPSBwYWludEF0dHJpYnV0ZU5hbWVzKHByb3BlcnR5LCBsYXllci50eXBlKTtcbiAgICAgICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSB2YWx1ZS52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSB2YWx1ZS5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uLnR5cGU7XG4gICAgICAgICAgICBjb25zdCB1c2VJbnRlZ2VyWm9vbSA9IHZhbHVlLnByb3BlcnR5LnVzZUludGVnZXJab29tO1xuICAgICAgICAgICAgY29uc3QgcHJvcFR5cGUgPSB2YWx1ZS5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uWydwcm9wZXJ0eS10eXBlJ107XG4gICAgICAgICAgICBjb25zdCBpc0Nyb3NzRmFkZWQgPSBwcm9wVHlwZSA9PT0gJ2Nyb3NzLWZhZGVkJyB8fCBwcm9wVHlwZSA9PT0gJ2Nyb3NzLWZhZGVkLWRhdGEtZHJpdmVuJztcblxuICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24ua2luZCA9PT0gJ2NvbnN0YW50Jykge1xuICAgICAgICAgICAgICAgIHRoaXMuYmluZGVyc1twcm9wZXJ0eV0gPSBpc0Nyb3NzRmFkZWQgP1xuICAgICAgICAgICAgICAgICAgICBuZXcgQ3Jvc3NGYWRlZENvbnN0YW50QmluZGVyKGV4cHJlc3Npb24udmFsdWUsIG5hbWVzKSA6XG4gICAgICAgICAgICAgICAgICAgIG5ldyBDb25zdGFudEJpbmRlcihleHByZXNzaW9uLnZhbHVlLCBuYW1lcywgdHlwZSk7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGAvdV8ke3Byb3BlcnR5fWApO1xuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24ua2luZCA9PT0gJ3NvdXJjZScgfHwgaXNDcm9zc0ZhZGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgU3RydWN0QXJyYXlMYXlvdXQgPSBsYXlvdXRUeXBlKHByb3BlcnR5LCB0eXBlLCAnc291cmNlJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kZXJzW3Byb3BlcnR5XSA9IGlzQ3Jvc3NGYWRlZCA/XG4gICAgICAgICAgICAgICAgICAgIG5ldyBDcm9zc0ZhZGVkQ29tcG9zaXRlQmluZGVyKGV4cHJlc3Npb24sIHR5cGUsIHVzZUludGVnZXJab29tLCB6b29tLCBTdHJ1Y3RBcnJheUxheW91dCwgbGF5ZXIuaWQpIDpcbiAgICAgICAgICAgICAgICAgICAgbmV3IFNvdXJjZUV4cHJlc3Npb25CaW5kZXIoZXhwcmVzc2lvbiwgbmFtZXMsIHR5cGUsIFN0cnVjdEFycmF5TGF5b3V0KTtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goYC9hXyR7cHJvcGVydHl9YCk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgU3RydWN0QXJyYXlMYXlvdXQgPSBsYXlvdXRUeXBlKHByb3BlcnR5LCB0eXBlLCAnY29tcG9zaXRlJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kZXJzW3Byb3BlcnR5XSA9IG5ldyBDb21wb3NpdGVFeHByZXNzaW9uQmluZGVyKGV4cHJlc3Npb24sIG5hbWVzLCB0eXBlLCB1c2VJbnRlZ2VyWm9vbSwgem9vbSwgU3RydWN0QXJyYXlMYXlvdXQpO1xuICAgICAgICAgICAgICAgIGtleXMucHVzaChgL3pfJHtwcm9wZXJ0eX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2FjaGVLZXkgPSBrZXlzLnNvcnQoKS5qb2luKCcnKTtcbiAgICB9XG5cbiAgICBnZXRNYXhWYWx1ZShwcm9wZXJ0eTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgYmluZGVyID0gdGhpcy5iaW5kZXJzW3Byb3BlcnR5XTtcbiAgICAgICAgcmV0dXJuIGJpbmRlciBpbnN0YW5jZW9mIFNvdXJjZUV4cHJlc3Npb25CaW5kZXIgfHwgYmluZGVyIGluc3RhbmNlb2YgQ29tcG9zaXRlRXhwcmVzc2lvbkJpbmRlciA/IGJpbmRlci5tYXhWYWx1ZSA6IDA7XG4gICAgfVxuXG4gICAgcG9wdWxhdGVQYWludEFycmF5cyhuZXdMZW5ndGg6IG51bWJlciwgZmVhdHVyZTogRmVhdHVyZSwgaW1hZ2VQb3NpdGlvbnM6IHtbXzogc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0sIGNhbm9uaWNhbD86IENhbm9uaWNhbFRpbGVJRCwgZm9ybWF0dGVkU2VjdGlvbj86IEZvcm1hdHRlZFNlY3Rpb24pIHtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiB0aGlzLmJpbmRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGJpbmRlciA9IHRoaXMuYmluZGVyc1twcm9wZXJ0eV07XG4gICAgICAgICAgICBpZiAoYmluZGVyIGluc3RhbmNlb2YgU291cmNlRXhwcmVzc2lvbkJpbmRlciB8fCBiaW5kZXIgaW5zdGFuY2VvZiBDb21wb3NpdGVFeHByZXNzaW9uQmluZGVyIHx8IGJpbmRlciBpbnN0YW5jZW9mIENyb3NzRmFkZWRDb21wb3NpdGVCaW5kZXIpXG4gICAgICAgICAgICAgICAgKGJpbmRlcjogQXR0cmlidXRlQmluZGVyKS5wb3B1bGF0ZVBhaW50QXJyYXkobmV3TGVuZ3RoLCBmZWF0dXJlLCBpbWFnZVBvc2l0aW9ucywgY2Fub25pY2FsLCBmb3JtYXR0ZWRTZWN0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXRDb25zdGFudFBhdHRlcm5Qb3NpdGlvbnMocG9zVG86IEltYWdlUG9zaXRpb24sIHBvc0Zyb206IEltYWdlUG9zaXRpb24pIHtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiB0aGlzLmJpbmRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGJpbmRlciA9IHRoaXMuYmluZGVyc1twcm9wZXJ0eV07XG4gICAgICAgICAgICBpZiAoYmluZGVyIGluc3RhbmNlb2YgQ3Jvc3NGYWRlZENvbnN0YW50QmluZGVyKVxuICAgICAgICAgICAgICAgIGJpbmRlci5zZXRDb25zdGFudFBhdHRlcm5Qb3NpdGlvbnMocG9zVG8sIHBvc0Zyb20pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlUGFpbnRBcnJheXMoZmVhdHVyZVN0YXRlczogRmVhdHVyZVN0YXRlcywgZmVhdHVyZU1hcDogRmVhdHVyZVBvc2l0aW9uTWFwLCB2dExheWVyOiBWZWN0b3JUaWxlTGF5ZXIsIGxheWVyOiBUeXBlZFN0eWxlTGF5ZXIsIGltYWdlUG9zaXRpb25zOiB7W186IHN0cmluZ106IEltYWdlUG9zaXRpb259KTogYm9vbGVhbiB7XG4gICAgICAgIGxldCBkaXJ0eTogYm9vbGVhbiA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIGZlYXR1cmVTdGF0ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IGZlYXR1cmVNYXAuZ2V0UG9zaXRpb25zKGlkKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBwb3Mgb2YgcG9zaXRpb25zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmVhdHVyZSA9IHZ0TGF5ZXIuZmVhdHVyZShwb3MuaW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiB0aGlzLmJpbmRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmluZGVyID0gdGhpcy5iaW5kZXJzW3Byb3BlcnR5XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChiaW5kZXIgaW5zdGFuY2VvZiBTb3VyY2VFeHByZXNzaW9uQmluZGVyIHx8IGJpbmRlciBpbnN0YW5jZW9mIENvbXBvc2l0ZUV4cHJlc3Npb25CaW5kZXIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kZXIgaW5zdGFuY2VvZiBDcm9zc0ZhZGVkQ29tcG9zaXRlQmluZGVyKSAmJiAoYmluZGVyOiBhbnkpLmV4cHJlc3Npb24uaXNTdGF0ZURlcGVuZGVudCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy9BSE06IFJlbW92ZSBhZnRlciBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvNjI1NVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBsYXllci5wYWludC5nZXQocHJvcGVydHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgKGJpbmRlcjogYW55KS5leHByZXNzaW9uID0gdmFsdWUudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAoYmluZGVyOiBBdHRyaWJ1dGVCaW5kZXIpLnVwZGF0ZVBhaW50QXJyYXkocG9zLnN0YXJ0LCBwb3MuZW5kLCBmZWF0dXJlLCBmZWF0dXJlU3RhdGVzW2lkXSwgaW1hZ2VQb3NpdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlydHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkaXJ0eTtcbiAgICB9XG5cbiAgICBkZWZpbmVzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiB0aGlzLmJpbmRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGJpbmRlciA9IHRoaXMuYmluZGVyc1twcm9wZXJ0eV07XG4gICAgICAgICAgICBpZiAoYmluZGVyIGluc3RhbmNlb2YgQ29uc3RhbnRCaW5kZXIgfHwgYmluZGVyIGluc3RhbmNlb2YgQ3Jvc3NGYWRlZENvbnN0YW50QmluZGVyKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4uYmluZGVyLnVuaWZvcm1OYW1lcy5tYXAobmFtZSA9PiBgI2RlZmluZSBIQVNfVU5JRk9STV8ke25hbWV9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZ2V0UGFpbnRWZXJ0ZXhCdWZmZXJzKCk6IEFycmF5PFZlcnRleEJ1ZmZlcj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fYnVmZmVycztcbiAgICB9XG5cbiAgICBnZXRVbmlmb3Jtcyhjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBBcnJheTxCaW5kZXJVbmlmb3JtPiB7XG4gICAgICAgIGNvbnN0IHVuaWZvcm1zID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gdGhpcy5iaW5kZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBiaW5kZXIgPSB0aGlzLmJpbmRlcnNbcHJvcGVydHldO1xuICAgICAgICAgICAgaWYgKGJpbmRlciBpbnN0YW5jZW9mIENvbnN0YW50QmluZGVyIHx8IGJpbmRlciBpbnN0YW5jZW9mIENyb3NzRmFkZWRDb25zdGFudEJpbmRlciB8fCBiaW5kZXIgaW5zdGFuY2VvZiBDb21wb3NpdGVFeHByZXNzaW9uQmluZGVyKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBuYW1lIG9mIGJpbmRlci51bmlmb3JtTmFtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmluZGluZyA9IGJpbmRlci5nZXRCaW5kaW5nKGNvbnRleHQsIGxvY2F0aW9uc1tuYW1lXSwgbmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB1bmlmb3Jtcy5wdXNoKHtuYW1lLCBwcm9wZXJ0eSwgYmluZGluZ30pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmlmb3JtcztcbiAgICB9XG5cbiAgICBzZXRVbmlmb3JtczxQcm9wZXJ0aWVzOiBPYmplY3Q+KGNvbnRleHQ6IENvbnRleHQsIGJpbmRlclVuaWZvcm1zOiBBcnJheTxCaW5kZXJVbmlmb3JtPiwgcHJvcGVydGllczogUG9zc2libHlFdmFsdWF0ZWQ8UHJvcGVydGllcz4sIGdsb2JhbHM6IEdsb2JhbFByb3BlcnRpZXMpIHtcbiAgICAgICAgLy8gVW5pZm9ybSBzdGF0ZSBiaW5kaW5ncyBhcmUgb3duZWQgYnkgdGhlIFByb2dyYW0sIGJ1dCB3ZSBzZXQgdGhlbVxuICAgICAgICAvLyBmcm9tIHdpdGhpbiB0aGUgUHJvZ3JhbUNvbmZpZ3VyYXRvbidzIGJpbmRlciBtZW1iZXJzLlxuICAgICAgICBmb3IgKGNvbnN0IHtuYW1lLCBwcm9wZXJ0eSwgYmluZGluZ30gb2YgYmluZGVyVW5pZm9ybXMpIHtcbiAgICAgICAgICAgICh0aGlzLmJpbmRlcnNbcHJvcGVydHldOiBhbnkpLnNldFVuaWZvcm0oYmluZGluZywgZ2xvYmFscywgcHJvcGVydGllcy5nZXQocHJvcGVydHkpLCBuYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZVBhaW50QnVmZmVycyhjcm9zc2ZhZGU/OiBDcm9zc2ZhZGVQYXJhbWV0ZXJzKSB7XG4gICAgICAgIHRoaXMuX2J1ZmZlcnMgPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIHRoaXMuYmluZGVycykge1xuICAgICAgICAgICAgY29uc3QgYmluZGVyID0gdGhpcy5iaW5kZXJzW3Byb3BlcnR5XTtcbiAgICAgICAgICAgIGlmIChjcm9zc2ZhZGUgJiYgYmluZGVyIGluc3RhbmNlb2YgQ3Jvc3NGYWRlZENvbXBvc2l0ZUJpbmRlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdHRlcm5WZXJ0ZXhCdWZmZXIgPSBjcm9zc2ZhZGUuZnJvbVNjYWxlID09PSAyID8gYmluZGVyLnpvb21JblBhaW50VmVydGV4QnVmZmVyIDogYmluZGVyLnpvb21PdXRQYWludFZlcnRleEJ1ZmZlcjtcbiAgICAgICAgICAgICAgICBpZiAocGF0dGVyblZlcnRleEJ1ZmZlcikgdGhpcy5fYnVmZmVycy5wdXNoKHBhdHRlcm5WZXJ0ZXhCdWZmZXIpO1xuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKChiaW5kZXIgaW5zdGFuY2VvZiBTb3VyY2VFeHByZXNzaW9uQmluZGVyIHx8IGJpbmRlciBpbnN0YW5jZW9mIENvbXBvc2l0ZUV4cHJlc3Npb25CaW5kZXIpICYmIGJpbmRlci5wYWludFZlcnRleEJ1ZmZlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2J1ZmZlcnMucHVzaChiaW5kZXIucGFpbnRWZXJ0ZXhCdWZmZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBsb2FkKGNvbnRleHQ6IENvbnRleHQpIHtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiB0aGlzLmJpbmRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGJpbmRlciA9IHRoaXMuYmluZGVyc1twcm9wZXJ0eV07XG4gICAgICAgICAgICBpZiAoYmluZGVyIGluc3RhbmNlb2YgU291cmNlRXhwcmVzc2lvbkJpbmRlciB8fCBiaW5kZXIgaW5zdGFuY2VvZiBDb21wb3NpdGVFeHByZXNzaW9uQmluZGVyIHx8IGJpbmRlciBpbnN0YW5jZW9mIENyb3NzRmFkZWRDb21wb3NpdGVCaW5kZXIpXG4gICAgICAgICAgICAgICAgYmluZGVyLnVwbG9hZChjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZVBhaW50QnVmZmVycygpO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gdGhpcy5iaW5kZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBiaW5kZXIgPSB0aGlzLmJpbmRlcnNbcHJvcGVydHldO1xuICAgICAgICAgICAgaWYgKGJpbmRlciBpbnN0YW5jZW9mIFNvdXJjZUV4cHJlc3Npb25CaW5kZXIgfHwgYmluZGVyIGluc3RhbmNlb2YgQ29tcG9zaXRlRXhwcmVzc2lvbkJpbmRlciB8fCBiaW5kZXIgaW5zdGFuY2VvZiBDcm9zc0ZhZGVkQ29tcG9zaXRlQmluZGVyKVxuICAgICAgICAgICAgICAgIGJpbmRlci5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQcm9ncmFtQ29uZmlndXJhdGlvblNldDxMYXllcjogVHlwZWRTdHlsZUxheWVyPiB7XG4gICAgcHJvZ3JhbUNvbmZpZ3VyYXRpb25zOiB7W186IHN0cmluZ106IFByb2dyYW1Db25maWd1cmF0aW9ufTtcbiAgICBuZWVkc1VwbG9hZDogYm9vbGVhbjtcbiAgICBfZmVhdHVyZU1hcDogRmVhdHVyZVBvc2l0aW9uTWFwO1xuICAgIF9idWZmZXJPZmZzZXQ6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKGxheW91dEF0dHJpYnV0ZXM6IEFycmF5PFN0cnVjdEFycmF5TWVtYmVyPiwgbGF5ZXJzOiAkUmVhZE9ubHlBcnJheTxMYXllcj4sIHpvb206IG51bWJlciwgZmlsdGVyUHJvcGVydGllczogKF86IHN0cmluZykgPT4gYm9vbGVhbiA9ICgpID0+IHRydWUpIHtcbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBsYXllciBvZiBsYXllcnMpIHtcbiAgICAgICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zW2xheWVyLmlkXSA9IG5ldyBQcm9ncmFtQ29uZmlndXJhdGlvbihsYXllciwgem9vbSwgZmlsdGVyUHJvcGVydGllcywgbGF5b3V0QXR0cmlidXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uZWVkc1VwbG9hZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9mZWF0dXJlTWFwID0gbmV3IEZlYXR1cmVQb3NpdGlvbk1hcCgpO1xuICAgICAgICB0aGlzLl9idWZmZXJPZmZzZXQgPSAwO1xuICAgIH1cblxuICAgIHBvcHVsYXRlUGFpbnRBcnJheXMobGVuZ3RoOiBudW1iZXIsIGZlYXR1cmU6IEZlYXR1cmUsIGluZGV4OiBudW1iZXIsIGltYWdlUG9zaXRpb25zOiB7W186IHN0cmluZ106IEltYWdlUG9zaXRpb259LCBjYW5vbmljYWw6IENhbm9uaWNhbFRpbGVJRCwgZm9ybWF0dGVkU2VjdGlvbj86IEZvcm1hdHRlZFNlY3Rpb24pIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zW2tleV0ucG9wdWxhdGVQYWludEFycmF5cyhsZW5ndGgsIGZlYXR1cmUsIGltYWdlUG9zaXRpb25zLCBjYW5vbmljYWwsIGZvcm1hdHRlZFNlY3Rpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZlYXR1cmUuaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fZmVhdHVyZU1hcC5hZGQoZmVhdHVyZS5pZCwgaW5kZXgsIHRoaXMuX2J1ZmZlck9mZnNldCwgbGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9idWZmZXJPZmZzZXQgPSBsZW5ndGg7XG5cbiAgICAgICAgdGhpcy5uZWVkc1VwbG9hZCA9IHRydWU7XG4gICAgfVxuXG4gICAgdXBkYXRlUGFpbnRBcnJheXMoZmVhdHVyZVN0YXRlczogRmVhdHVyZVN0YXRlcywgdnRMYXllcjogVmVjdG9yVGlsZUxheWVyLCBsYXllcnM6ICRSZWFkT25seUFycmF5PFR5cGVkU3R5bGVMYXllcj4sIGltYWdlUG9zaXRpb25zOiB7W186IHN0cmluZ106IEltYWdlUG9zaXRpb259KSB7XG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XG4gICAgICAgICAgICB0aGlzLm5lZWRzVXBsb2FkID0gdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbbGF5ZXIuaWRdLnVwZGF0ZVBhaW50QXJyYXlzKGZlYXR1cmVTdGF0ZXMsIHRoaXMuX2ZlYXR1cmVNYXAsIHZ0TGF5ZXIsIGxheWVyLCBpbWFnZVBvc2l0aW9ucykgfHwgdGhpcy5uZWVkc1VwbG9hZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldChsYXllcklkOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zW2xheWVySWRdO1xuICAgIH1cblxuICAgIHVwbG9hZChjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgIGlmICghdGhpcy5uZWVkc1VwbG9hZCkgcmV0dXJuO1xuICAgICAgICBmb3IgKGNvbnN0IGxheWVySWQgaW4gdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zW2xheWVySWRdLnVwbG9hZChjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5lZWRzVXBsb2FkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgZm9yIChjb25zdCBsYXllcklkIGluIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9uc1tsYXllcklkXS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHBhaW50QXR0cmlidXRlTmFtZXMocHJvcGVydHksIHR5cGUpIHtcbiAgICBjb25zdCBhdHRyaWJ1dGVOYW1lRXhjZXB0aW9ucyA9IHtcbiAgICAgICAgJ3RleHQtb3BhY2l0eSc6IFsnb3BhY2l0eSddLFxuICAgICAgICAnaWNvbi1vcGFjaXR5JzogWydvcGFjaXR5J10sXG4gICAgICAgICd0ZXh0LWNvbG9yJzogWydmaWxsX2NvbG9yJ10sXG4gICAgICAgICdpY29uLWNvbG9yJzogWydmaWxsX2NvbG9yJ10sXG4gICAgICAgICd0ZXh0LWhhbG8tY29sb3InOiBbJ2hhbG9fY29sb3InXSxcbiAgICAgICAgJ2ljb24taGFsby1jb2xvcic6IFsnaGFsb19jb2xvciddLFxuICAgICAgICAndGV4dC1oYWxvLWJsdXInOiBbJ2hhbG9fYmx1ciddLFxuICAgICAgICAnaWNvbi1oYWxvLWJsdXInOiBbJ2hhbG9fYmx1ciddLFxuICAgICAgICAndGV4dC1oYWxvLXdpZHRoJzogWydoYWxvX3dpZHRoJ10sXG4gICAgICAgICdpY29uLWhhbG8td2lkdGgnOiBbJ2hhbG9fd2lkdGgnXSxcbiAgICAgICAgJ2xpbmUtZ2FwLXdpZHRoJzogWydnYXB3aWR0aCddLFxuICAgICAgICAnbGluZS1wYXR0ZXJuJzogWydwYXR0ZXJuX3RvJywgJ3BhdHRlcm5fZnJvbScsICdwaXhlbF9yYXRpb190bycsICdwaXhlbF9yYXRpb19mcm9tJ10sXG4gICAgICAgICdmaWxsLXBhdHRlcm4nOiBbJ3BhdHRlcm5fdG8nLCAncGF0dGVybl9mcm9tJywgJ3BpeGVsX3JhdGlvX3RvJywgJ3BpeGVsX3JhdGlvX2Zyb20nXSxcbiAgICAgICAgJ2ZpbGwtZXh0cnVzaW9uLXBhdHRlcm4nOiBbJ3BhdHRlcm5fdG8nLCAncGF0dGVybl9mcm9tJywgJ3BpeGVsX3JhdGlvX3RvJywgJ3BpeGVsX3JhdGlvX2Zyb20nXSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIGF0dHJpYnV0ZU5hbWVFeGNlcHRpb25zW3Byb3BlcnR5XSB8fCBbcHJvcGVydHkucmVwbGFjZShgJHt0eXBlfS1gLCAnJykucmVwbGFjZSgvLS9nLCAnXycpXTtcbn1cblxuZnVuY3Rpb24gZ2V0TGF5b3V0RXhjZXB0aW9uKHByb3BlcnR5KSB7XG4gICAgY29uc3QgcHJvcGVydHlFeGNlcHRpb25zID0ge1xuICAgICAgICAnbGluZS1wYXR0ZXJuJzp7XG4gICAgICAgICAgICAnc291cmNlJzogUGF0dGVybkxheW91dEFycmF5LFxuICAgICAgICAgICAgJ2NvbXBvc2l0ZSc6IFBhdHRlcm5MYXlvdXRBcnJheVxuICAgICAgICB9LFxuICAgICAgICAnZmlsbC1wYXR0ZXJuJzoge1xuICAgICAgICAgICAgJ3NvdXJjZSc6IFBhdHRlcm5MYXlvdXRBcnJheSxcbiAgICAgICAgICAgICdjb21wb3NpdGUnOiBQYXR0ZXJuTGF5b3V0QXJyYXlcbiAgICAgICAgfSxcbiAgICAgICAgJ2ZpbGwtZXh0cnVzaW9uLXBhdHRlcm4nOntcbiAgICAgICAgICAgICdzb3VyY2UnOiBQYXR0ZXJuTGF5b3V0QXJyYXksXG4gICAgICAgICAgICAnY29tcG9zaXRlJzogUGF0dGVybkxheW91dEFycmF5XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIHByb3BlcnR5RXhjZXB0aW9uc1twcm9wZXJ0eV07XG59XG5cbmZ1bmN0aW9uIGxheW91dFR5cGUocHJvcGVydHksIHR5cGUsIGJpbmRlclR5cGUpIHtcbiAgICBjb25zdCBkZWZhdWx0TGF5b3V0cyA9IHtcbiAgICAgICAgJ2NvbG9yJzoge1xuICAgICAgICAgICAgJ3NvdXJjZSc6IFN0cnVjdEFycmF5TGF5b3V0MmY4LFxuICAgICAgICAgICAgJ2NvbXBvc2l0ZSc6IFN0cnVjdEFycmF5TGF5b3V0NGYxNlxuICAgICAgICB9LFxuICAgICAgICAnbnVtYmVyJzoge1xuICAgICAgICAgICAgJ3NvdXJjZSc6IFN0cnVjdEFycmF5TGF5b3V0MWY0LFxuICAgICAgICAgICAgJ2NvbXBvc2l0ZSc6IFN0cnVjdEFycmF5TGF5b3V0MmY4XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgbGF5b3V0RXhjZXB0aW9uID0gZ2V0TGF5b3V0RXhjZXB0aW9uKHByb3BlcnR5KTtcbiAgICByZXR1cm4gIGxheW91dEV4Y2VwdGlvbiAmJiBsYXlvdXRFeGNlcHRpb25bYmluZGVyVHlwZV0gfHwgZGVmYXVsdExheW91dHNbdHlwZV1bYmluZGVyVHlwZV07XG59XG5cbnJlZ2lzdGVyKCdDb25zdGFudEJpbmRlcicsIENvbnN0YW50QmluZGVyKTtcbnJlZ2lzdGVyKCdDcm9zc0ZhZGVkQ29uc3RhbnRCaW5kZXInLCBDcm9zc0ZhZGVkQ29uc3RhbnRCaW5kZXIpO1xucmVnaXN0ZXIoJ1NvdXJjZUV4cHJlc3Npb25CaW5kZXInLCBTb3VyY2VFeHByZXNzaW9uQmluZGVyKTtcbnJlZ2lzdGVyKCdDcm9zc0ZhZGVkQ29tcG9zaXRlQmluZGVyJywgQ3Jvc3NGYWRlZENvbXBvc2l0ZUJpbmRlcik7XG5yZWdpc3RlcignQ29tcG9zaXRlRXhwcmVzc2lvbkJpbmRlcicsIENvbXBvc2l0ZUV4cHJlc3Npb25CaW5kZXIpO1xucmVnaXN0ZXIoJ1Byb2dyYW1Db25maWd1cmF0aW9uJywgUHJvZ3JhbUNvbmZpZ3VyYXRpb24sIHtvbWl0OiBbJ19idWZmZXJzJ119KTtcbnJlZ2lzdGVyKCdQcm9ncmFtQ29uZmlndXJhdGlvblNldCcsIFByb2dyYW1Db25maWd1cmF0aW9uU2V0KTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7XG4gICAgTGluZUluZGV4QXJyYXksXG4gICAgVHJpYW5nbGVJbmRleEFycmF5LFxuICAgIExpbmVTdHJpcEluZGV4QXJyYXlcbn0gZnJvbSAnLi9hcnJheV90eXBlcyc7XG5cbi8qKlxuICogQW4gaW5kZXggYXJyYXkgc3RvcmVzIFVpbnQxNiBpbmRpY2VzIG9mIHZlcnRleGVzIGluIGEgY29ycmVzcG9uZGluZyB2ZXJ0ZXggYXJyYXkuIFdlIHVzZVxuICogdGhyZWUga2luZHMgb2YgaW5kZXggYXJyYXlzOiBhcnJheXMgc3RvcmluZyBncm91cHMgb2YgdGhyZWUgaW5kaWNlcywgZm9ybWluZyB0cmlhbmdsZXM7XG4gKiBhcnJheXMgc3RvcmluZyBwYWlycyBvZiBpbmRpY2VzLCBmb3JtaW5nIGxpbmUgc2VnbWVudHM7IGFuZCBhcnJheXMgc3RvcmluZyBzaW5nbGUgaW5kaWNlcyxcbiAqIGZvcm1pbmcgYSBsaW5lIHN0cmlwLlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IHtMaW5lSW5kZXhBcnJheSwgVHJpYW5nbGVJbmRleEFycmF5LCBMaW5lU3RyaXBJbmRleEFycmF5fTtcbiIsIi8vIEBmbG93XG5cbi8qKlxuICogVGhlIG1heGltdW0gdmFsdWUgb2YgYSBjb29yZGluYXRlIGluIHRoZSBpbnRlcm5hbCB0aWxlIGNvb3JkaW5hdGUgc3lzdGVtLiBDb29yZGluYXRlcyBvZlxuICogYWxsIHNvdXJjZSBmZWF0dXJlcyBub3JtYWxpemVkIHRvIHRoaXMgZXh0ZW50IHVwb24gbG9hZC5cbiAqXG4gKiBUaGUgdmFsdWUgaXMgYSBjb25zZXF1ZW5jZSBvZiB0aGUgZm9sbG93aW5nOlxuICpcbiAqICogVmVydGV4IGJ1ZmZlciBzdG9yZSBwb3NpdGlvbnMgYXMgc2lnbmVkIDE2IGJpdCBpbnRlZ2Vycy5cbiAqICogT25lIGJpdCBpcyBsb3N0IGZvciBzaWduZWRuZXNzIHRvIHN1cHBvcnQgdGlsZSBidWZmZXJzLlxuICogKiBPbmUgYml0IGlzIGxvc3QgYmVjYXVzZSB0aGUgbGluZSB2ZXJ0ZXggYnVmZmVyIHVzZWQgdG8gcGFjayAxIGJpdCBvZiBvdGhlciBkYXRhIGludG8gdGhlIGludC5cbiAqICogT25lIGJpdCBpcyBsb3N0IHRvIHN1cHBvcnQgZmVhdHVyZXMgZXh0ZW5kaW5nIHBhc3QgdGhlIGV4dGVudCBvbiB0aGUgcmlnaHQgZWRnZSBvZiB0aGUgdGlsZS5cbiAqICogVGhpcyBsZWF2ZXMgdXMgd2l0aCAyXjEzID0gODE5MlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmVhZG9ubHlcbiAqL1xuZXhwb3J0IGRlZmF1bHQgODE5MjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7d2Fybk9uY2UsIGNsYW1wfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuXG5pbXBvcnQgRVhURU5UIGZyb20gJy4vZXh0ZW50JztcblxuaW1wb3J0IHR5cGUgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbi8vIFRoZXNlIGJvdW5kcyBkZWZpbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gc3VwcG9ydGVkIGNvb3JkaW5hdGUgdmFsdWVzLlxuLy8gV2hpbGUgdmlzaWJsZSBjb29yZGluYXRlcyBhcmUgd2l0aGluIFswLCBFWFRFTlRdLCB0aWxlcyBtYXkgdGhlb3JldGljYWxseVxuLy8gY29udGFpbiBjb3JkaW5hdGVzIHdpdGhpbiBbLUluZmluaXR5LCBJbmZpbml0eV0uIE91ciByYW5nZSBpcyBsaW1pdGVkIGJ5IHRoZVxuLy8gbnVtYmVyIG9mIGJpdHMgdXNlZCB0byByZXByZXNlbnQgdGhlIGNvb3JkaW5hdGUuXG5mdW5jdGlvbiBjcmVhdGVCb3VuZHMoYml0cykge1xuICAgIHJldHVybiB7XG4gICAgICAgIG1pbjogLTEgKiBNYXRoLnBvdygyLCBiaXRzIC0gMSksXG4gICAgICAgIG1heDogTWF0aC5wb3coMiwgYml0cyAtIDEpIC0gMVxuICAgIH07XG59XG5cbmNvbnN0IGJvdW5kcyA9IGNyZWF0ZUJvdW5kcygxNSk7XG5cbi8qKlxuICogTG9hZHMgYSBnZW9tZXRyeSBmcm9tIGEgVmVjdG9yVGlsZUZlYXR1cmUgYW5kIHNjYWxlcyBpdCB0byB0aGUgY29tbW9uIGV4dGVudFxuICogdXNlZCBpbnRlcm5hbGx5LlxuICogQHBhcmFtIHtWZWN0b3JUaWxlRmVhdHVyZX0gZmVhdHVyZVxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbG9hZEdlb21ldHJ5KGZlYXR1cmU6IFZlY3RvclRpbGVGZWF0dXJlKTogQXJyYXk8QXJyYXk8UG9pbnQ+PiB7XG4gICAgY29uc3Qgc2NhbGUgPSBFWFRFTlQgLyBmZWF0dXJlLmV4dGVudDtcbiAgICBjb25zdCBnZW9tZXRyeSA9IGZlYXR1cmUubG9hZEdlb21ldHJ5KCk7XG4gICAgZm9yIChsZXQgciA9IDA7IHIgPCBnZW9tZXRyeS5sZW5ndGg7IHIrKykge1xuICAgICAgICBjb25zdCByaW5nID0gZ2VvbWV0cnlbcl07XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgcmluZy5sZW5ndGg7IHArKykge1xuICAgICAgICAgICAgY29uc3QgcG9pbnQgPSByaW5nW3BdO1xuICAgICAgICAgICAgLy8gcm91bmQgaGVyZSBiZWNhdXNlIG1hcGJveC1nbC1uYXRpdmUgdXNlcyBpbnRlZ2VycyB0byByZXByZXNlbnRcbiAgICAgICAgICAgIC8vIHBvaW50cyBhbmQgd2UgbmVlZCB0byBkbyB0aGUgc2FtZSB0byBhdm9pZCByZW5lcmluZyBkaWZmZXJlbmNlcy5cbiAgICAgICAgICAgIHBvaW50LnggPSBNYXRoLnJvdW5kKHBvaW50LnggKiBzY2FsZSk7XG4gICAgICAgICAgICBwb2ludC55ID0gTWF0aC5yb3VuZChwb2ludC55ICogc2NhbGUpO1xuXG4gICAgICAgICAgICBpZiAocG9pbnQueCA8IGJvdW5kcy5taW4gfHwgcG9pbnQueCA+IGJvdW5kcy5tYXggfHwgcG9pbnQueSA8IGJvdW5kcy5taW4gfHwgcG9pbnQueSA+IGJvdW5kcy5tYXgpIHtcbiAgICAgICAgICAgICAgICB3YXJuT25jZSgnR2VvbWV0cnkgZXhjZWVkcyBhbGxvd2VkIGV4dGVudCwgcmVkdWNlIHlvdXIgdmVjdG9yIHRpbGUgYnVmZmVyIHNpemUnKTtcbiAgICAgICAgICAgICAgICBwb2ludC54ID0gY2xhbXAocG9pbnQueCwgYm91bmRzLm1pbiwgYm91bmRzLm1heCk7XG4gICAgICAgICAgICAgICAgcG9pbnQueSA9IGNsYW1wKHBvaW50LnksIGJvdW5kcy5taW4sIGJvdW5kcy5tYXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBnZW9tZXRyeTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7Q2lyY2xlTGF5b3V0QXJyYXl9IGZyb20gJy4uL2FycmF5X3R5cGVzJztcblxuaW1wb3J0IHttZW1iZXJzIGFzIGxheW91dEF0dHJpYnV0ZXN9IGZyb20gJy4vY2lyY2xlX2F0dHJpYnV0ZXMnO1xuaW1wb3J0IFNlZ21lbnRWZWN0b3IgZnJvbSAnLi4vc2VnbWVudCc7XG5pbXBvcnQge1Byb2dyYW1Db25maWd1cmF0aW9uU2V0fSBmcm9tICcuLi9wcm9ncmFtX2NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtUcmlhbmdsZUluZGV4QXJyYXl9IGZyb20gJy4uL2luZGV4X2FycmF5X3R5cGUnO1xuaW1wb3J0IGxvYWRHZW9tZXRyeSBmcm9tICcuLi9sb2FkX2dlb21ldHJ5JztcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi4vZXh0ZW50JztcbmltcG9ydCB7cmVnaXN0ZXJ9IGZyb20gJy4uLy4uL3V0aWwvd2ViX3dvcmtlcl90cmFuc2Zlcic7XG5pbXBvcnQgRXZhbHVhdGlvblBhcmFtZXRlcnMgZnJvbSAnLi4vLi4vc3R5bGUvZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcblxuaW1wb3J0IHR5cGUge0Nhbm9uaWNhbFRpbGVJRH0gZnJvbSAnLi4vLi4vc291cmNlL3RpbGVfaWQnO1xuaW1wb3J0IHR5cGUge1xuICAgIEJ1Y2tldCxcbiAgICBCdWNrZXRQYXJhbWV0ZXJzLFxuICAgIEJ1Y2tldEZlYXR1cmUsXG4gICAgSW5kZXhlZEZlYXR1cmUsXG4gICAgUG9wdWxhdGVQYXJhbWV0ZXJzXG59IGZyb20gJy4uL2J1Y2tldCc7XG5pbXBvcnQgdHlwZSBDaXJjbGVTdHlsZUxheWVyIGZyb20gJy4uLy4uL3N0eWxlL3N0eWxlX2xheWVyL2NpcmNsZV9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBIZWF0bWFwU3R5bGVMYXllciBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZV9sYXllci9oZWF0bWFwX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSBJbmRleEJ1ZmZlciBmcm9tICcuLi8uLi9nbC9pbmRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUgVmVydGV4QnVmZmVyIGZyb20gJy4uLy4uL2dsL3ZlcnRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSB7RmVhdHVyZVN0YXRlc30gZnJvbSAnLi4vLi4vc291cmNlL3NvdXJjZV9zdGF0ZSc7XG5pbXBvcnQgdHlwZSB7SW1hZ2VQb3NpdGlvbn0gZnJvbSAnLi4vLi4vcmVuZGVyL2ltYWdlX2F0bGFzJztcblxuZnVuY3Rpb24gYWRkQ2lyY2xlVmVydGV4KGxheW91dFZlcnRleEFycmF5LCB4LCB5LCBleHRydWRlWCwgZXh0cnVkZVkpIHtcbiAgICBsYXlvdXRWZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhcbiAgICAgICAgKHggKiAyKSArICgoZXh0cnVkZVggKyAxKSAvIDIpLFxuICAgICAgICAoeSAqIDIpICsgKChleHRydWRlWSArIDEpIC8gMikpO1xufVxuXG4vKipcbiAqIENpcmNsZXMgYXJlIHJlcHJlc2VudGVkIGJ5IHR3byB0cmlhbmdsZXMuXG4gKlxuICogRWFjaCBjb3JuZXIgaGFzIGEgcG9zIHRoYXQgaXMgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlIGFuZCBhbiBleHRydXNpb25cbiAqIHZlY3RvciB0aGF0IGlzIHdoZXJlIGl0IHBvaW50cy5cbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIENpcmNsZUJ1Y2tldDxMYXllcjogQ2lyY2xlU3R5bGVMYXllciB8IEhlYXRtYXBTdHlsZUxheWVyPiBpbXBsZW1lbnRzIEJ1Y2tldCB7XG4gICAgaW5kZXg6IG51bWJlcjtcbiAgICB6b29tOiBudW1iZXI7XG4gICAgb3ZlcnNjYWxpbmc6IG51bWJlcjtcbiAgICBsYXllcklkczogQXJyYXk8c3RyaW5nPjtcbiAgICBsYXllcnM6IEFycmF5PExheWVyPjtcbiAgICBzdGF0ZURlcGVuZGVudExheWVyczogQXJyYXk8TGF5ZXI+O1xuICAgIHN0YXRlRGVwZW5kZW50TGF5ZXJJZHM6IEFycmF5PHN0cmluZz47XG5cbiAgICBsYXlvdXRWZXJ0ZXhBcnJheTogQ2lyY2xlTGF5b3V0QXJyYXk7XG4gICAgbGF5b3V0VmVydGV4QnVmZmVyOiBWZXJ0ZXhCdWZmZXI7XG5cbiAgICBpbmRleEFycmF5OiBUcmlhbmdsZUluZGV4QXJyYXk7XG4gICAgaW5kZXhCdWZmZXI6IEluZGV4QnVmZmVyO1xuXG4gICAgaGFzUGF0dGVybjogYm9vbGVhbjtcbiAgICBwcm9ncmFtQ29uZmlndXJhdGlvbnM6IFByb2dyYW1Db25maWd1cmF0aW9uU2V0PExheWVyPjtcbiAgICBzZWdtZW50czogU2VnbWVudFZlY3RvcjtcbiAgICB1cGxvYWRlZDogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEJ1Y2tldFBhcmFtZXRlcnM8TGF5ZXI+KSB7XG4gICAgICAgIHRoaXMuem9vbSA9IG9wdGlvbnMuem9vbTtcbiAgICAgICAgdGhpcy5vdmVyc2NhbGluZyA9IG9wdGlvbnMub3ZlcnNjYWxpbmc7XG4gICAgICAgIHRoaXMubGF5ZXJzID0gb3B0aW9ucy5sYXllcnM7XG4gICAgICAgIHRoaXMubGF5ZXJJZHMgPSB0aGlzLmxheWVycy5tYXAobGF5ZXIgPT4gbGF5ZXIuaWQpO1xuICAgICAgICB0aGlzLmluZGV4ID0gb3B0aW9ucy5pbmRleDtcbiAgICAgICAgdGhpcy5oYXNQYXR0ZXJuID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSA9IG5ldyBDaXJjbGVMYXlvdXRBcnJheSgpO1xuICAgICAgICB0aGlzLmluZGV4QXJyYXkgPSBuZXcgVHJpYW5nbGVJbmRleEFycmF5KCk7XG4gICAgICAgIHRoaXMuc2VnbWVudHMgPSBuZXcgU2VnbWVudFZlY3RvcigpO1xuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucyA9IG5ldyBQcm9ncmFtQ29uZmlndXJhdGlvblNldChsYXlvdXRBdHRyaWJ1dGVzLCBvcHRpb25zLmxheWVycywgb3B0aW9ucy56b29tKTtcbiAgICAgICAgdGhpcy5zdGF0ZURlcGVuZGVudExheWVySWRzID0gdGhpcy5sYXllcnMuZmlsdGVyKChsKSA9PiBsLmlzU3RhdGVEZXBlbmRlbnQoKSkubWFwKChsKSA9PiBsLmlkKTtcbiAgICB9XG5cbiAgICBwb3B1bGF0ZShmZWF0dXJlczogQXJyYXk8SW5kZXhlZEZlYXR1cmU+LCBvcHRpb25zOiBQb3B1bGF0ZVBhcmFtZXRlcnMsIGNhbm9uaWNhbDogQ2Fub25pY2FsVGlsZUlEKSB7XG4gICAgICAgIGNvbnN0IHN0eWxlTGF5ZXIgPSB0aGlzLmxheWVyc1swXTtcbiAgICAgICAgY29uc3QgYnVja2V0RmVhdHVyZXMgPSBbXTtcbiAgICAgICAgbGV0IGNpcmNsZVNvcnRLZXkgPSBudWxsO1xuXG4gICAgICAgIC8vIEhlYXRtYXAgbGF5ZXJzIGFyZSBoYW5kbGVkIGluIHRoaXMgYnVja2V0IGFuZCBoYXZlIG5vIGV2YWx1YXRlZCBwcm9wZXJ0aWVzLCBzbyB3ZSBjaGVjayBvdXIgYWNjZXNzXG4gICAgICAgIGlmIChzdHlsZUxheWVyLnR5cGUgPT09ICdjaXJjbGUnKSB7XG4gICAgICAgICAgICBjaXJjbGVTb3J0S2V5ID0gKChzdHlsZUxheWVyOiBhbnkpOiBDaXJjbGVTdHlsZUxheWVyKS5sYXlvdXQuZ2V0KCdjaXJjbGUtc29ydC1rZXknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3Qge2ZlYXR1cmUsIGlkLCBpbmRleCwgc291cmNlTGF5ZXJJbmRleH0gb2YgZmVhdHVyZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IG5lZWRHZW9tZXRyeSA9IHRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyLm5lZWRHZW9tZXRyeTtcbiAgICAgICAgICAgIGNvbnN0IGV2YWx1YXRpb25GZWF0dXJlID0ge3R5cGU6IGZlYXR1cmUudHlwZSxcbiAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBmZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICAgICAgICAgICAgZ2VvbWV0cnk6IG5lZWRHZW9tZXRyeSA/IGxvYWRHZW9tZXRyeShmZWF0dXJlKSA6IFtdfTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLmxheWVyc1swXS5fZmVhdHVyZUZpbHRlci5maWx0ZXIobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKHRoaXMuem9vbSksIGV2YWx1YXRpb25GZWF0dXJlLCBjYW5vbmljYWwpKSBjb250aW51ZTtcblxuICAgICAgICAgICAgaWYgKCFuZWVkR2VvbWV0cnkpICBldmFsdWF0aW9uRmVhdHVyZS5nZW9tZXRyeSA9IGxvYWRHZW9tZXRyeShmZWF0dXJlKTtcbiAgICAgICAgICAgIGNvbnN0IHNvcnRLZXkgPSBjaXJjbGVTb3J0S2V5ID9cbiAgICAgICAgICAgICAgICBjaXJjbGVTb3J0S2V5LmV2YWx1YXRlKGV2YWx1YXRpb25GZWF0dXJlLCB7fSwgY2Fub25pY2FsKSA6XG4gICAgICAgICAgICAgICAgdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICBjb25zdCBidWNrZXRGZWF0dXJlOiBCdWNrZXRGZWF0dXJlID0ge1xuICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IGZlYXR1cmUucHJvcGVydGllcyxcbiAgICAgICAgICAgICAgICB0eXBlOiBmZWF0dXJlLnR5cGUsXG4gICAgICAgICAgICAgICAgc291cmNlTGF5ZXJJbmRleCxcbiAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgICBnZW9tZXRyeSA6IGV2YWx1YXRpb25GZWF0dXJlLmdlb21ldHJ5LFxuICAgICAgICAgICAgICAgIHBhdHRlcm5zOiB7fSxcbiAgICAgICAgICAgICAgICBzb3J0S2V5XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBidWNrZXRGZWF0dXJlcy5wdXNoKGJ1Y2tldEZlYXR1cmUpO1xuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2lyY2xlU29ydEtleSkge1xuICAgICAgICAgICAgYnVja2V0RmVhdHVyZXMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGEuc29ydEtleSBpcyBhbHdheXMgYSBudW1iZXIgd2hlbiBpbiB1c2VcbiAgICAgICAgICAgICAgICByZXR1cm4gKChhLnNvcnRLZXk6IGFueSk6IG51bWJlcikgLSAoKGIuc29ydEtleTogYW55KTogbnVtYmVyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBidWNrZXRGZWF0dXJlIG9mIGJ1Y2tldEZlYXR1cmVzKSB7XG4gICAgICAgICAgICBjb25zdCB7Z2VvbWV0cnksIGluZGV4LCBzb3VyY2VMYXllckluZGV4fSA9IGJ1Y2tldEZlYXR1cmU7XG4gICAgICAgICAgICBjb25zdCBmZWF0dXJlID0gZmVhdHVyZXNbaW5kZXhdLmZlYXR1cmU7XG5cbiAgICAgICAgICAgIHRoaXMuYWRkRmVhdHVyZShidWNrZXRGZWF0dXJlLCBnZW9tZXRyeSwgaW5kZXgsIGNhbm9uaWNhbCk7XG4gICAgICAgICAgICBvcHRpb25zLmZlYXR1cmVJbmRleC5pbnNlcnQoZmVhdHVyZSwgZ2VvbWV0cnksIGluZGV4LCBzb3VyY2VMYXllckluZGV4LCB0aGlzLmluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZShzdGF0ZXM6IEZlYXR1cmVTdGF0ZXMsIHZ0TGF5ZXI6IFZlY3RvclRpbGVMYXllciwgaW1hZ2VQb3NpdGlvbnM6IHtbXzogc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0pIHtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJzLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGRhdGVQYWludEFycmF5cyhzdGF0ZXMsIHZ0TGF5ZXIsIHRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcnMsIGltYWdlUG9zaXRpb25zKTtcbiAgICB9XG5cbiAgICBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgdXBsb2FkUGVuZGluZygpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnVwbG9hZGVkIHx8IHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkO1xuICAgIH1cblxuICAgIHVwbG9hZChjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgIGlmICghdGhpcy51cGxvYWRlZCkge1xuICAgICAgICAgICAgdGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmxheW91dFZlcnRleEFycmF5LCBsYXlvdXRBdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBsb2FkKGNvbnRleHQpO1xuICAgICAgICB0aGlzLnVwbG9hZGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBpZiAoIXRoaXMubGF5b3V0VmVydGV4QnVmZmVyKSByZXR1cm47XG4gICAgICAgIHRoaXMubGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5zZWdtZW50cy5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgYWRkRmVhdHVyZShmZWF0dXJlOiBCdWNrZXRGZWF0dXJlLCBnZW9tZXRyeTogQXJyYXk8QXJyYXk8UG9pbnQ+PiwgaW5kZXg6IG51bWJlciwgY2Fub25pY2FsOiBDYW5vbmljYWxUaWxlSUQpIHtcbiAgICAgICAgZm9yIChjb25zdCByaW5nIG9mIGdlb21ldHJ5KSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBvaW50IG9mIHJpbmcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4ID0gcG9pbnQueDtcbiAgICAgICAgICAgICAgICBjb25zdCB5ID0gcG9pbnQueTtcblxuICAgICAgICAgICAgICAgIC8vIERvIG5vdCBpbmNsdWRlIHBvaW50cyB0aGF0IGFyZSBvdXRzaWRlIHRoZSB0aWxlIGJvdW5kYXJpZXMuXG4gICAgICAgICAgICAgICAgaWYgKHggPCAwIHx8IHggPj0gRVhURU5UIHx8IHkgPCAwIHx8IHkgPj0gRVhURU5UKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgZ2VvbWV0cnkgd2lsbCBiZSBvZiB0aGUgUG9pbnQgdHlwZSwgYW5kIHdlJ2xsIGRlcml2ZVxuICAgICAgICAgICAgICAgIC8vIHR3byB0cmlhbmdsZXMgZnJvbSBpdC5cbiAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgIC8vIMOiwpTCjMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCkFxuICAgICAgICAgICAgICAgIC8vIMOiwpTCgiAzICAgICAyIMOiwpTCglxuICAgICAgICAgICAgICAgIC8vIMOiwpTCgiAgICAgICAgIMOiwpTCglxuICAgICAgICAgICAgICAgIC8vIMOiwpTCgiAwICAgICAxIMOiwpTCglxuICAgICAgICAgICAgICAgIC8vIMOiwpTClMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCgMOiwpTCmFxuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VnbWVudCA9IHRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoNCwgdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgdGhpcy5pbmRleEFycmF5LCBmZWF0dXJlLnNvcnRLZXkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gc2VnbWVudC52ZXJ0ZXhMZW5ndGg7XG5cbiAgICAgICAgICAgICAgICBhZGRDaXJjbGVWZXJ0ZXgodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgeCwgeSwgLTEsIC0xKTtcbiAgICAgICAgICAgICAgICBhZGRDaXJjbGVWZXJ0ZXgodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgeCwgeSwgMSwgLTEpO1xuICAgICAgICAgICAgICAgIGFkZENpcmNsZVZlcnRleCh0aGlzLmxheW91dFZlcnRleEFycmF5LCB4LCB5LCAxLCAxKTtcbiAgICAgICAgICAgICAgICBhZGRDaXJjbGVWZXJ0ZXgodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgeCwgeSwgLTEsIDEpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5pbmRleEFycmF5LmVtcGxhY2VCYWNrKGluZGV4LCBpbmRleCArIDEsIGluZGV4ICsgMik7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmRleEFycmF5LmVtcGxhY2VCYWNrKGluZGV4LCBpbmRleCArIDMsIGluZGV4ICsgMik7XG5cbiAgICAgICAgICAgICAgICBzZWdtZW50LnZlcnRleExlbmd0aCArPSA0O1xuICAgICAgICAgICAgICAgIHNlZ21lbnQucHJpbWl0aXZlTGVuZ3RoICs9IDI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5wb3B1bGF0ZVBhaW50QXJyYXlzKHRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLCBmZWF0dXJlLCBpbmRleCwge30sIGNhbm9uaWNhbCk7XG4gICAgfVxufVxuXG5yZWdpc3RlcignQ2lyY2xlQnVja2V0JywgQ2lyY2xlQnVja2V0LCB7b21pdDogWydsYXllcnMnXX0pO1xuXG5leHBvcnQgZGVmYXVsdCBDaXJjbGVCdWNrZXQ7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2lzQ291bnRlckNsb2Nrd2lzZX0gZnJvbSAnLi91dGlsJztcblxuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG5leHBvcnQge3BvbHlnb25JbnRlcnNlY3RzQnVmZmVyZWRQb2ludCwgcG9seWdvbkludGVyc2VjdHNNdWx0aVBvbHlnb24sIHBvbHlnb25JbnRlcnNlY3RzQnVmZmVyZWRNdWx0aUxpbmUsIHBvbHlnb25JbnRlcnNlY3RzUG9seWdvbiwgZGlzdFRvU2VnbWVudFNxdWFyZWQsIHBvbHlnb25JbnRlcnNlY3RzQm94fTtcblxudHlwZSBMaW5lID0gQXJyYXk8UG9pbnQ+O1xudHlwZSBNdWx0aUxpbmUgPSBBcnJheTxMaW5lPjtcbnR5cGUgUmluZyA9IEFycmF5PFBvaW50PjtcbnR5cGUgUG9seWdvbiA9IEFycmF5PFBvaW50PjtcbnR5cGUgTXVsdGlQb2x5Z29uID0gQXJyYXk8UG9seWdvbj47XG5cbmZ1bmN0aW9uIHBvbHlnb25JbnRlcnNlY3RzUG9seWdvbihwb2x5Z29uQTogUG9seWdvbiwgcG9seWdvbkI6IFBvbHlnb24pIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvbHlnb25BLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChwb2x5Z29uQ29udGFpbnNQb2ludChwb2x5Z29uQiwgcG9seWdvbkFbaV0pKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvbHlnb25CLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChwb2x5Z29uQ29udGFpbnNQb2ludChwb2x5Z29uQSwgcG9seWdvbkJbaV0pKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobGluZUludGVyc2VjdHNMaW5lKHBvbHlnb25BLCBwb2x5Z29uQikpIHJldHVybiB0cnVlO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBwb2x5Z29uSW50ZXJzZWN0c0J1ZmZlcmVkUG9pbnQocG9seWdvbjogUG9seWdvbiwgcG9pbnQ6IFBvaW50LCByYWRpdXM6IG51bWJlcikge1xuICAgIGlmIChwb2x5Z29uQ29udGFpbnNQb2ludChwb2x5Z29uLCBwb2ludCkpIHJldHVybiB0cnVlO1xuICAgIGlmIChwb2ludEludGVyc2VjdHNCdWZmZXJlZExpbmUocG9pbnQsIHBvbHlnb24sIHJhZGl1cykpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gcG9seWdvbkludGVyc2VjdHNNdWx0aVBvbHlnb24ocG9seWdvbjogUG9seWdvbiwgbXVsdGlQb2x5Z29uOiBNdWx0aVBvbHlnb24pIHtcblxuICAgIGlmIChwb2x5Z29uLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gbXVsdGlQb2x5Z29uQ29udGFpbnNQb2ludChtdWx0aVBvbHlnb24sIHBvbHlnb25bMF0pO1xuICAgIH1cblxuICAgIGZvciAobGV0IG0gPSAwOyBtIDwgbXVsdGlQb2x5Z29uLmxlbmd0aDsgbSsrKSB7XG4gICAgICAgIGNvbnN0IHJpbmcgPSBtdWx0aVBvbHlnb25bbV07XG4gICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgcmluZy5sZW5ndGg7IG4rKykge1xuICAgICAgICAgICAgaWYgKHBvbHlnb25Db250YWluc1BvaW50KHBvbHlnb24sIHJpbmdbbl0pKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9seWdvbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAobXVsdGlQb2x5Z29uQ29udGFpbnNQb2ludChtdWx0aVBvbHlnb24sIHBvbHlnb25baV0pKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBrID0gMDsgayA8IG11bHRpUG9seWdvbi5sZW5ndGg7IGsrKykge1xuICAgICAgICBpZiAobGluZUludGVyc2VjdHNMaW5lKHBvbHlnb24sIG11bHRpUG9seWdvbltrXSkpIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gcG9seWdvbkludGVyc2VjdHNCdWZmZXJlZE11bHRpTGluZShwb2x5Z29uOiBQb2x5Z29uLCBtdWx0aUxpbmU6IE11bHRpTGluZSwgcmFkaXVzOiBudW1iZXIpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG11bHRpTGluZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBsaW5lID0gbXVsdGlMaW5lW2ldO1xuXG4gICAgICAgIGlmIChwb2x5Z29uLmxlbmd0aCA+PSAzKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGxpbmUubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgICAgICBpZiAocG9seWdvbkNvbnRhaW5zUG9pbnQocG9seWdvbiwgbGluZVtrXSkpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxpbmVJbnRlcnNlY3RzQnVmZmVyZWRMaW5lKHBvbHlnb24sIGxpbmUsIHJhZGl1cykpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGxpbmVJbnRlcnNlY3RzQnVmZmVyZWRMaW5lKGxpbmVBOiBMaW5lLCBsaW5lQjogTGluZSwgcmFkaXVzOiBudW1iZXIpIHtcblxuICAgIGlmIChsaW5lQS5sZW5ndGggPiAxKSB7XG4gICAgICAgIGlmIChsaW5lSW50ZXJzZWN0c0xpbmUobGluZUEsIGxpbmVCKSkgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgLy8gQ2hlY2sgd2hldGhlciBhbnkgcG9pbnQgaW4gZWl0aGVyIGxpbmUgaXMgd2l0aGluIHJhZGl1cyBvZiB0aGUgb3RoZXIgbGluZVxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxpbmVCLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBpZiAocG9pbnRJbnRlcnNlY3RzQnVmZmVyZWRMaW5lKGxpbmVCW2pdLCBsaW5lQSwgcmFkaXVzKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGxldCBrID0gMDsgayA8IGxpbmVBLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIGlmIChwb2ludEludGVyc2VjdHNCdWZmZXJlZExpbmUobGluZUFba10sIGxpbmVCLCByYWRpdXMpKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGxpbmVJbnRlcnNlY3RzTGluZShsaW5lQTogTGluZSwgbGluZUI6IExpbmUpIHtcbiAgICBpZiAobGluZUEubGVuZ3RoID09PSAwIHx8IGxpbmVCLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZUEubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGEwID0gbGluZUFbaV07XG4gICAgICAgIGNvbnN0IGExID0gbGluZUFbaSArIDFdO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxpbmVCLmxlbmd0aCAtIDE7IGorKykge1xuICAgICAgICAgICAgY29uc3QgYjAgPSBsaW5lQltqXTtcbiAgICAgICAgICAgIGNvbnN0IGIxID0gbGluZUJbaiArIDFdO1xuICAgICAgICAgICAgaWYgKGxpbmVTZWdtZW50SW50ZXJzZWN0c0xpbmVTZWdtZW50KGEwLCBhMSwgYjAsIGIxKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBsaW5lU2VnbWVudEludGVyc2VjdHNMaW5lU2VnbWVudChhMDogUG9pbnQsIGExOiBQb2ludCwgYjA6IFBvaW50LCBiMTogUG9pbnQpIHtcbiAgICByZXR1cm4gaXNDb3VudGVyQ2xvY2t3aXNlKGEwLCBiMCwgYjEpICE9PSBpc0NvdW50ZXJDbG9ja3dpc2UoYTEsIGIwLCBiMSkgJiZcbiAgICAgICAgaXNDb3VudGVyQ2xvY2t3aXNlKGEwLCBhMSwgYjApICE9PSBpc0NvdW50ZXJDbG9ja3dpc2UoYTAsIGExLCBiMSk7XG59XG5cbmZ1bmN0aW9uIHBvaW50SW50ZXJzZWN0c0J1ZmZlcmVkTGluZShwOiBQb2ludCwgbGluZTogTGluZSwgcmFkaXVzOiBudW1iZXIpIHtcbiAgICBjb25zdCByYWRpdXNTcXVhcmVkID0gcmFkaXVzICogcmFkaXVzO1xuXG4gICAgaWYgKGxpbmUubGVuZ3RoID09PSAxKSByZXR1cm4gcC5kaXN0U3FyKGxpbmVbMF0pIDwgcmFkaXVzU3F1YXJlZDtcblxuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbGluZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyBGaW5kIGxpbmUgc2VnbWVudHMgdGhhdCBoYXZlIGEgZGlzdGFuY2UgPD0gcmFkaXVzXjIgdG8gcFxuICAgICAgICAvLyBJbiB0aGF0IGNhc2UsIHdlIHRyZWF0IHRoZSBsaW5lIGFzIFwiY29udGFpbmluZyBwb2ludCBwXCIuXG4gICAgICAgIGNvbnN0IHYgPSBsaW5lW2kgLSAxXSwgdyA9IGxpbmVbaV07XG4gICAgICAgIGlmIChkaXN0VG9TZWdtZW50U3F1YXJlZChwLCB2LCB3KSA8IHJhZGl1c1NxdWFyZWQpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIENvZGUgZnJvbSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8xNTAxNzI1LzMzMTM3OS5cbmZ1bmN0aW9uIGRpc3RUb1NlZ21lbnRTcXVhcmVkKHA6IFBvaW50LCB2OiBQb2ludCwgdzogUG9pbnQpIHtcbiAgICBjb25zdCBsMiA9IHYuZGlzdFNxcih3KTtcbiAgICBpZiAobDIgPT09IDApIHJldHVybiBwLmRpc3RTcXIodik7XG4gICAgY29uc3QgdCA9ICgocC54IC0gdi54KSAqICh3LnggLSB2LngpICsgKHAueSAtIHYueSkgKiAody55IC0gdi55KSkgLyBsMjtcbiAgICBpZiAodCA8IDApIHJldHVybiBwLmRpc3RTcXIodik7XG4gICAgaWYgKHQgPiAxKSByZXR1cm4gcC5kaXN0U3FyKHcpO1xuICAgIHJldHVybiBwLmRpc3RTcXIody5zdWIodikuX211bHQodCkuX2FkZCh2KSk7XG59XG5cbi8vIHBvaW50IGluIHBvbHlnb24gcmF5IGNhc3RpbmcgYWxnb3JpdGhtXG5mdW5jdGlvbiBtdWx0aVBvbHlnb25Db250YWluc1BvaW50KHJpbmdzOiBBcnJheTxSaW5nPiwgcDogUG9pbnQpIHtcbiAgICBsZXQgYyA9IGZhbHNlLFxuICAgICAgICByaW5nLCBwMSwgcDI7XG5cbiAgICBmb3IgKGxldCBrID0gMDsgayA8IHJpbmdzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIHJpbmcgPSByaW5nc1trXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGogPSByaW5nLmxlbmd0aCAtIDE7IGkgPCByaW5nLmxlbmd0aDsgaiA9IGkrKykge1xuICAgICAgICAgICAgcDEgPSByaW5nW2ldO1xuICAgICAgICAgICAgcDIgPSByaW5nW2pdO1xuICAgICAgICAgICAgaWYgKCgocDEueSA+IHAueSkgIT09IChwMi55ID4gcC55KSkgJiYgKHAueCA8IChwMi54IC0gcDEueCkgKiAocC55IC0gcDEueSkgLyAocDIueSAtIHAxLnkpICsgcDEueCkpIHtcbiAgICAgICAgICAgICAgICBjID0gIWM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGM7XG59XG5cbmZ1bmN0aW9uIHBvbHlnb25Db250YWluc1BvaW50KHJpbmc6IFJpbmcsIHA6IFBvaW50KSB7XG4gICAgbGV0IGMgPSBmYWxzZTtcbiAgICBmb3IgKGxldCBpID0gMCwgaiA9IHJpbmcubGVuZ3RoIC0gMTsgaSA8IHJpbmcubGVuZ3RoOyBqID0gaSsrKSB7XG4gICAgICAgIGNvbnN0IHAxID0gcmluZ1tpXTtcbiAgICAgICAgY29uc3QgcDIgPSByaW5nW2pdO1xuICAgICAgICBpZiAoKChwMS55ID4gcC55KSAhPT0gKHAyLnkgPiBwLnkpKSAmJiAocC54IDwgKHAyLnggLSBwMS54KSAqIChwLnkgLSBwMS55KSAvIChwMi55IC0gcDEueSkgKyBwMS54KSkge1xuICAgICAgICAgICAgYyA9ICFjO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjO1xufVxuXG5mdW5jdGlvbiBwb2x5Z29uSW50ZXJzZWN0c0JveChyaW5nOiBSaW5nLCBib3hYMTogbnVtYmVyLCBib3hZMTogbnVtYmVyLCBib3hYMjogbnVtYmVyLCBib3hZMjogbnVtYmVyKSB7XG4gICAgZm9yIChjb25zdCBwIG9mIHJpbmcpIHtcbiAgICAgICAgaWYgKGJveFgxIDw9IHAueCAmJlxuICAgICAgICAgICAgYm94WTEgPD0gcC55ICYmXG4gICAgICAgICAgICBib3hYMiA+PSBwLnggJiZcbiAgICAgICAgICAgIGJveFkyID49IHAueSkgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgY29ybmVycyA9IFtcbiAgICAgICAgbmV3IFBvaW50KGJveFgxLCBib3hZMSksXG4gICAgICAgIG5ldyBQb2ludChib3hYMSwgYm94WTIpLFxuICAgICAgICBuZXcgUG9pbnQoYm94WDIsIGJveFkyKSxcbiAgICAgICAgbmV3IFBvaW50KGJveFgyLCBib3hZMSldO1xuXG4gICAgaWYgKHJpbmcubGVuZ3RoID4gMikge1xuICAgICAgICBmb3IgKGNvbnN0IGNvcm5lciBvZiBjb3JuZXJzKSB7XG4gICAgICAgICAgICBpZiAocG9seWdvbkNvbnRhaW5zUG9pbnQocmluZywgY29ybmVyKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJpbmcubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHAxID0gcmluZ1tpXTtcbiAgICAgICAgY29uc3QgcDIgPSByaW5nW2kgKyAxXTtcbiAgICAgICAgaWYgKGVkZ2VJbnRlcnNlY3RzQm94KHAxLCBwMiwgY29ybmVycykpIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZWRnZUludGVyc2VjdHNCb3goZTE6IFBvaW50LCBlMjogUG9pbnQsIGNvcm5lcnM6IEFycmF5PFBvaW50Pikge1xuICAgIGNvbnN0IHRsID0gY29ybmVyc1swXTtcbiAgICBjb25zdCBiciA9IGNvcm5lcnNbMl07XG4gICAgLy8gdGhlIGVkZ2UgYW5kIGJveCBkbyBub3QgaW50ZXJzZWN0IGluIGVpdGhlciB0aGUgeCBvciB5IGRpbWVuc2lvbnNcbiAgICBpZiAoKChlMS54IDwgdGwueCkgJiYgKGUyLnggPCB0bC54KSkgfHxcbiAgICAgICAgKChlMS54ID4gYnIueCkgJiYgKGUyLnggPiBici54KSkgfHxcbiAgICAgICAgKChlMS55IDwgdGwueSkgJiYgKGUyLnkgPCB0bC55KSkgfHxcbiAgICAgICAgKChlMS55ID4gYnIueSkgJiYgKGUyLnkgPiBici55KSkpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIGNoZWNrIGlmIGFsbCBjb3JuZXJzIG9mIHRoZSBib3ggYXJlIG9uIHRoZSBzYW1lIHNpZGUgb2YgdGhlIGVkZ2VcbiAgICBjb25zdCBkaXIgPSBpc0NvdW50ZXJDbG9ja3dpc2UoZTEsIGUyLCBjb3JuZXJzWzBdKTtcbiAgICByZXR1cm4gZGlyICE9PSBpc0NvdW50ZXJDbG9ja3dpc2UoZTEsIGUyLCBjb3JuZXJzWzFdKSB8fFxuICAgICAgICBkaXIgIT09IGlzQ291bnRlckNsb2Nrd2lzZShlMSwgZTIsIGNvcm5lcnNbMl0pIHx8XG4gICAgICAgIGRpciAhPT0gaXNDb3VudGVyQ2xvY2t3aXNlKGUxLCBlMiwgY29ybmVyc1szXSk7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbmltcG9ydCB0eXBlIHtQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWV9IGZyb20gXCIuL3Byb3BlcnRpZXNcIjtcbmltcG9ydCB0eXBlIFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgQ2lyY2xlQnVja2V0IGZyb20gJy4uL2RhdGEvYnVja2V0L2NpcmNsZV9idWNrZXQnO1xuaW1wb3J0IHR5cGUgTGluZUJ1Y2tldCBmcm9tICcuLi9kYXRhL2J1Y2tldC9saW5lX2J1Y2tldCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYXhpbXVtUGFpbnRWYWx1ZShwcm9wZXJ0eTogc3RyaW5nLCBsYXllcjogU3R5bGVMYXllciwgYnVja2V0OiBDaXJjbGVCdWNrZXQ8Kj4gfCBMaW5lQnVja2V0KTogbnVtYmVyIHtcbiAgICBjb25zdCB2YWx1ZSA9ICgobGF5ZXIucGFpbnQ6IGFueSkuZ2V0KHByb3BlcnR5KTogUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPGFueT4pLnZhbHVlO1xuICAgIGlmICh2YWx1ZS5raW5kID09PSAnY29uc3RhbnQnKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYnVja2V0LnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQobGF5ZXIuaWQpLmdldE1heFZhbHVlKHByb3BlcnR5KTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2xhdGVEaXN0YW5jZSh0cmFuc2xhdGU6IFtudW1iZXIsIG51bWJlcl0pIHtcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHRyYW5zbGF0ZVswXSAqIHRyYW5zbGF0ZVswXSArIHRyYW5zbGF0ZVsxXSAqIHRyYW5zbGF0ZVsxXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2xhdGUocXVlcnlHZW9tZXRyeTogQXJyYXk8UG9pbnQ+LFxuICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZTogW251bWJlciwgbnVtYmVyXSxcbiAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVBbmNob3I6ICd2aWV3cG9ydCcgfCAnbWFwJyxcbiAgICAgICAgICAgICAgICAgICBiZWFyaW5nOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgcGl4ZWxzVG9UaWxlVW5pdHM6IG51bWJlcikge1xuICAgIGlmICghdHJhbnNsYXRlWzBdICYmICF0cmFuc2xhdGVbMV0pIHtcbiAgICAgICAgcmV0dXJuIHF1ZXJ5R2VvbWV0cnk7XG4gICAgfVxuICAgIGNvbnN0IHB0ID0gUG9pbnQuY29udmVydCh0cmFuc2xhdGUpLl9tdWx0KHBpeGVsc1RvVGlsZVVuaXRzKTtcblxuICAgIGlmICh0cmFuc2xhdGVBbmNob3IgPT09IFwidmlld3BvcnRcIikge1xuICAgICAgICBwdC5fcm90YXRlKC1iZWFyaW5nKTtcbiAgICB9XG5cbiAgICBjb25zdCB0cmFuc2xhdGVkID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBxdWVyeUdlb21ldHJ5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHBvaW50ID0gcXVlcnlHZW9tZXRyeVtpXTtcbiAgICAgICAgdHJhbnNsYXRlZC5wdXNoKHBvaW50LnN1YihwdCkpO1xuICAgIH1cbiAgICByZXR1cm4gdHJhbnNsYXRlZDtcbn1cbiIsIi8vIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQuIEVkaXQgYnVpbGQvZ2VuZXJhdGUtc3R5bGUtY29kZS5qcywgdGhlbiBydW4gYHlhcm4gcnVuIGNvZGVnZW5gLlxuLy8gQGZsb3dcbi8qIGVzbGludC1kaXNhYmxlICovXG5cbmltcG9ydCBzdHlsZVNwZWMgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9yZWZlcmVuY2UvbGF0ZXN0JztcblxuaW1wb3J0IHtcbiAgICBQcm9wZXJ0aWVzLFxuICAgIERhdGFDb25zdGFudFByb3BlcnR5LFxuICAgIERhdGFEcml2ZW5Qcm9wZXJ0eSxcbiAgICBDcm9zc0ZhZGVkRGF0YURyaXZlblByb3BlcnR5LFxuICAgIENyb3NzRmFkZWRQcm9wZXJ0eSxcbiAgICBDb2xvclJhbXBQcm9wZXJ0eVxufSBmcm9tICcuLi9wcm9wZXJ0aWVzJztcblxuaW1wb3J0IHR5cGUgQ29sb3IgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy91dGlsL2NvbG9yJztcblxuaW1wb3J0IHR5cGUgRm9ybWF0dGVkIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9mb3JtYXR0ZWQnO1xuXG5pbXBvcnQgdHlwZSBSZXNvbHZlZEltYWdlIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5cbmV4cG9ydCB0eXBlIExheW91dFByb3BzID0ge3xcbiAgICBcImNpcmNsZS1zb3J0LWtleVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbnx9O1xuXG5jb25zdCBsYXlvdXQ6IFByb3BlcnRpZXM8TGF5b3V0UHJvcHM+ID0gbmV3IFByb3BlcnRpZXMoe1xuICAgIFwiY2lyY2xlLXNvcnQta2V5XCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X2NpcmNsZVwiXVtcImNpcmNsZS1zb3J0LWtleVwiXSksXG59KTtcblxuZXhwb3J0IHR5cGUgUGFpbnRQcm9wcyA9IHt8XG4gICAgXCJjaXJjbGUtcmFkaXVzXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiY2lyY2xlLWNvbG9yXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxDb2xvcj4sXG4gICAgXCJjaXJjbGUtYmx1clwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcImNpcmNsZS1vcGFjaXR5XCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiY2lyY2xlLXRyYW5zbGF0ZVwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxbbnVtYmVyLCBudW1iZXJdPixcbiAgICBcImNpcmNsZS10cmFuc2xhdGUtYW5jaG9yXCI6IERhdGFDb25zdGFudFByb3BlcnR5PFwibWFwXCIgfCBcInZpZXdwb3J0XCI+LFxuICAgIFwiY2lyY2xlLXBpdGNoLXNjYWxlXCI6IERhdGFDb25zdGFudFByb3BlcnR5PFwibWFwXCIgfCBcInZpZXdwb3J0XCI+LFxuICAgIFwiY2lyY2xlLXBpdGNoLWFsaWdubWVudFwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxcIm1hcFwiIHwgXCJ2aWV3cG9ydFwiPixcbiAgICBcImNpcmNsZS1zdHJva2Utd2lkdGhcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJjaXJjbGUtc3Ryb2tlLWNvbG9yXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxDb2xvcj4sXG4gICAgXCJjaXJjbGUtc3Ryb2tlLW9wYWNpdHlcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG58fTtcblxuY29uc3QgcGFpbnQ6IFByb3BlcnRpZXM8UGFpbnRQcm9wcz4gPSBuZXcgUHJvcGVydGllcyh7XG4gICAgXCJjaXJjbGUtcmFkaXVzXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfY2lyY2xlXCJdW1wiY2lyY2xlLXJhZGl1c1wiXSksXG4gICAgXCJjaXJjbGUtY29sb3JcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9jaXJjbGVcIl1bXCJjaXJjbGUtY29sb3JcIl0pLFxuICAgIFwiY2lyY2xlLWJsdXJcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9jaXJjbGVcIl1bXCJjaXJjbGUtYmx1clwiXSksXG4gICAgXCJjaXJjbGUtb3BhY2l0eVwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2NpcmNsZVwiXVtcImNpcmNsZS1vcGFjaXR5XCJdKSxcbiAgICBcImNpcmNsZS10cmFuc2xhdGVcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2NpcmNsZVwiXVtcImNpcmNsZS10cmFuc2xhdGVcIl0pLFxuICAgIFwiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3JcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2NpcmNsZVwiXVtcImNpcmNsZS10cmFuc2xhdGUtYW5jaG9yXCJdKSxcbiAgICBcImNpcmNsZS1waXRjaC1zY2FsZVwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfY2lyY2xlXCJdW1wiY2lyY2xlLXBpdGNoLXNjYWxlXCJdKSxcbiAgICBcImNpcmNsZS1waXRjaC1hbGlnbm1lbnRcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2NpcmNsZVwiXVtcImNpcmNsZS1waXRjaC1hbGlnbm1lbnRcIl0pLFxuICAgIFwiY2lyY2xlLXN0cm9rZS13aWR0aFwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2NpcmNsZVwiXVtcImNpcmNsZS1zdHJva2Utd2lkdGhcIl0pLFxuICAgIFwiY2lyY2xlLXN0cm9rZS1jb2xvclwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2NpcmNsZVwiXVtcImNpcmNsZS1zdHJva2UtY29sb3JcIl0pLFxuICAgIFwiY2lyY2xlLXN0cm9rZS1vcGFjaXR5XCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfY2lyY2xlXCJdW1wiY2lyY2xlLXN0cm9rZS1vcGFjaXR5XCJdKSxcbn0pO1xuXG4vLyBOb3RlOiB3aXRob3V0IGFkZGluZyB0aGUgZXhwbGljaXQgdHlwZSBhbm5vdGF0aW9uLCBGbG93IGluZmVycyB3ZWFrZXIgdHlwZXNcbi8vIGZvciB0aGVzZSBvYmplY3RzIGZyb20gdGhlaXIgdXNlIGluIHRoZSBjb25zdHJ1Y3RvciB0byBTdHlsZUxheWVyLCBhc1xuLy8ge2xheW91dD86IFByb3BlcnRpZXM8Li4uPiwgcGFpbnQ6IFByb3BlcnRpZXM8Li4uPn1cbmV4cG9ydCBkZWZhdWx0ICh7IHBhaW50LCBsYXlvdXQgfTogJEV4YWN0PHtcbiAgcGFpbnQ6IFByb3BlcnRpZXM8UGFpbnRQcm9wcz4sIGxheW91dDogUHJvcGVydGllczxMYXlvdXRQcm9wcz5cbn0+KTtcbiIsIi8qKlxyXG4gKiBDb21tb24gdXRpbGl0aWVzXHJcbiAqIEBtb2R1bGUgZ2xNYXRyaXhcclxuICovXG4vLyBDb25maWd1cmF0aW9uIENvbnN0YW50c1xuZXhwb3J0IHZhciBFUFNJTE9OID0gMC4wMDAwMDE7XG5leHBvcnQgdmFyIEFSUkFZX1RZUEUgPSB0eXBlb2YgRmxvYXQzMkFycmF5ICE9PSAndW5kZWZpbmVkJyA/IEZsb2F0MzJBcnJheSA6IEFycmF5O1xuZXhwb3J0IHZhciBSQU5ET00gPSBNYXRoLnJhbmRvbTtcbi8qKlxyXG4gKiBTZXRzIHRoZSB0eXBlIG9mIGFycmF5IHVzZWQgd2hlbiBjcmVhdGluZyBuZXcgdmVjdG9ycyBhbmQgbWF0cmljZXNcclxuICpcclxuICogQHBhcmFtIHtUeXBlfSB0eXBlIEFycmF5IHR5cGUsIHN1Y2ggYXMgRmxvYXQzMkFycmF5IG9yIEFycmF5XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0TWF0cml4QXJyYXlUeXBlKHR5cGUpIHtcbiAgQVJSQVlfVFlQRSA9IHR5cGU7XG59XG52YXIgZGVncmVlID0gTWF0aC5QSSAvIDE4MDtcbi8qKlxyXG4gKiBDb252ZXJ0IERlZ3JlZSBUbyBSYWRpYW5cclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IGEgQW5nbGUgaW4gRGVncmVlc1xyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRvUmFkaWFuKGEpIHtcbiAgcmV0dXJuIGEgKiBkZWdyZWU7XG59XG4vKipcclxuICogVGVzdHMgd2hldGhlciBvciBub3QgdGhlIGFyZ3VtZW50cyBoYXZlIGFwcHJveGltYXRlbHkgdGhlIHNhbWUgdmFsdWUsIHdpdGhpbiBhbiBhYnNvbHV0ZVxyXG4gKiBvciByZWxhdGl2ZSB0b2xlcmFuY2Ugb2YgZ2xNYXRyaXguRVBTSUxPTiAoYW4gYWJzb2x1dGUgdG9sZXJhbmNlIGlzIHVzZWQgZm9yIHZhbHVlcyBsZXNzXHJcbiAqIHRoYW4gb3IgZXF1YWwgdG8gMS4wLCBhbmQgYSByZWxhdGl2ZSB0b2xlcmFuY2UgaXMgdXNlZCBmb3IgbGFyZ2VyIHZhbHVlcylcclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IGEgVGhlIGZpcnN0IG51bWJlciB0byB0ZXN0LlxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBUaGUgc2Vjb25kIG51bWJlciB0byB0ZXN0LlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgbnVtYmVycyBhcmUgYXBwcm94aW1hdGVseSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFscyhhLCBiKSB7XG4gIHJldHVybiBNYXRoLmFicyhhIC0gYikgPD0gRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYSksIE1hdGguYWJzKGIpKTtcbn1cbmlmICghTWF0aC5oeXBvdCkgTWF0aC5oeXBvdCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHkgPSAwLFxuICAgICAgaSA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cbiAgd2hpbGUgKGktLSkge1xuICAgIHkgKz0gYXJndW1lbnRzW2ldICogYXJndW1lbnRzW2ldO1xuICB9XG5cbiAgcmV0dXJuIE1hdGguc3FydCh5KTtcbn07IiwiaW1wb3J0ICogYXMgZ2xNYXRyaXggZnJvbSBcIi4vY29tbW9uLmpzXCI7XG4vKipcclxuICogMngyIE1hdHJpeFxyXG4gKiBAbW9kdWxlIG1hdDJcclxuICovXG5cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IGlkZW50aXR5IG1hdDJcclxuICpcclxuICogQHJldHVybnMge21hdDJ9IGEgbmV3IDJ4MiBtYXRyaXhcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSg0KTtcblxuICBpZiAoZ2xNYXRyaXguQVJSQVlfVFlQRSAhPSBGbG9hdDMyQXJyYXkpIHtcbiAgICBvdXRbMV0gPSAwO1xuICAgIG91dFsyXSA9IDA7XG4gIH1cblxuICBvdXRbMF0gPSAxO1xuICBvdXRbM10gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgbWF0MiBpbml0aWFsaXplZCB3aXRoIHZhbHVlcyBmcm9tIGFuIGV4aXN0aW5nIG1hdHJpeFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgbWF0cml4IHRvIGNsb25lXHJcbiAqIEByZXR1cm5zIHttYXQyfSBhIG5ldyAyeDIgbWF0cml4XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY2xvbmUoYSkge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoNCk7XG4gIG91dFswXSA9IGFbMF07XG4gIG91dFsxXSA9IGFbMV07XG4gIG91dFsyXSA9IGFbMl07XG4gIG91dFszXSA9IGFbM107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIG1hdDIgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHkob3V0LCBhKSB7XG4gIG91dFswXSA9IGFbMF07XG4gIG91dFsxXSA9IGFbMV07XG4gIG91dFsyXSA9IGFbMl07XG4gIG91dFszXSA9IGFbM107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2V0IGEgbWF0MiB0byB0aGUgaWRlbnRpdHkgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eShvdXQpIHtcbiAgb3V0WzBdID0gMTtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGUgYSBuZXcgbWF0MiB3aXRoIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMCBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAwIHBvc2l0aW9uIChpbmRleCAwKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTAxIENvbXBvbmVudCBpbiBjb2x1bW4gMCwgcm93IDEgcG9zaXRpb24gKGluZGV4IDEpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTAgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggMilcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0xMSBDb21wb25lbnQgaW4gY29sdW1uIDEsIHJvdyAxIHBvc2l0aW9uIChpbmRleCAzKVxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0IEEgbmV3IDJ4MiBtYXRyaXhcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVmFsdWVzKG0wMCwgbTAxLCBtMTAsIG0xMSkge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoNCk7XG4gIG91dFswXSA9IG0wMDtcbiAgb3V0WzFdID0gbTAxO1xuICBvdXRbMl0gPSBtMTA7XG4gIG91dFszXSA9IG0xMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSBtYXQyIHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMCBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAwIHBvc2l0aW9uIChpbmRleCAwKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTAxIENvbXBvbmVudCBpbiBjb2x1bW4gMCwgcm93IDEgcG9zaXRpb24gKGluZGV4IDEpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTAgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggMilcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0xMSBDb21wb25lbnQgaW4gY29sdW1uIDEsIHJvdyAxIHBvc2l0aW9uIChpbmRleCAzKVxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0KG91dCwgbTAwLCBtMDEsIG0xMCwgbTExKSB7XG4gIG91dFswXSA9IG0wMDtcbiAgb3V0WzFdID0gbTAxO1xuICBvdXRbMl0gPSBtMTA7XG4gIG91dFszXSA9IG0xMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc3Bvc2UgdGhlIHZhbHVlcyBvZiBhIG1hdDJcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc3Bvc2Uob3V0LCBhKSB7XG4gIC8vIElmIHdlIGFyZSB0cmFuc3Bvc2luZyBvdXJzZWx2ZXMgd2UgY2FuIHNraXAgYSBmZXcgc3RlcHMgYnV0IGhhdmUgdG8gY2FjaGVcbiAgLy8gc29tZSB2YWx1ZXNcbiAgaWYgKG91dCA9PT0gYSkge1xuICAgIHZhciBhMSA9IGFbMV07XG4gICAgb3V0WzFdID0gYVsyXTtcbiAgICBvdXRbMl0gPSBhMTtcbiAgfSBlbHNlIHtcbiAgICBvdXRbMF0gPSBhWzBdO1xuICAgIG91dFsxXSA9IGFbMl07XG4gICAgb3V0WzJdID0gYVsxXTtcbiAgICBvdXRbM10gPSBhWzNdO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBJbnZlcnRzIGEgbWF0MlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGludmVydChvdXQsIGEpIHtcbiAgdmFyIGEwID0gYVswXSxcbiAgICAgIGExID0gYVsxXSxcbiAgICAgIGEyID0gYVsyXSxcbiAgICAgIGEzID0gYVszXTsgLy8gQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudFxuXG4gIHZhciBkZXQgPSBhMCAqIGEzIC0gYTIgKiBhMTtcblxuICBpZiAoIWRldCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZGV0ID0gMS4wIC8gZGV0O1xuICBvdXRbMF0gPSBhMyAqIGRldDtcbiAgb3V0WzFdID0gLWExICogZGV0O1xuICBvdXRbMl0gPSAtYTIgKiBkZXQ7XG4gIG91dFszXSA9IGEwICogZGV0O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGFkanVnYXRlIG9mIGEgbWF0MlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGFkam9pbnQob3V0LCBhKSB7XG4gIC8vIENhY2hpbmcgdGhpcyB2YWx1ZSBpcyBuZXNzZWNhcnkgaWYgb3V0ID09IGFcbiAgdmFyIGEwID0gYVswXTtcbiAgb3V0WzBdID0gYVszXTtcbiAgb3V0WzFdID0gLWFbMV07XG4gIG91dFsyXSA9IC1hWzJdO1xuICBvdXRbM10gPSBhMDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkZXRlcm1pbmFudCBvZiBhIG1hdDJcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRldGVybWluYW50IG9mIGFcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBkZXRlcm1pbmFudChhKSB7XG4gIHJldHVybiBhWzBdICogYVszXSAtIGFbMl0gKiBhWzFdO1xufVxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIG1hdDInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHttYXQyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHkob3V0LCBhLCBiKSB7XG4gIHZhciBhMCA9IGFbMF0sXG4gICAgICBhMSA9IGFbMV0sXG4gICAgICBhMiA9IGFbMl0sXG4gICAgICBhMyA9IGFbM107XG4gIHZhciBiMCA9IGJbMF0sXG4gICAgICBiMSA9IGJbMV0sXG4gICAgICBiMiA9IGJbMl0sXG4gICAgICBiMyA9IGJbM107XG4gIG91dFswXSA9IGEwICogYjAgKyBhMiAqIGIxO1xuICBvdXRbMV0gPSBhMSAqIGIwICsgYTMgKiBiMTtcbiAgb3V0WzJdID0gYTAgKiBiMiArIGEyICogYjM7XG4gIG91dFszXSA9IGExICogYjIgKyBhMyAqIGIzO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBtYXQyIGJ5IHRoZSBnaXZlbiBhbmdsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZShvdXQsIGEsIHJhZCkge1xuICB2YXIgYTAgPSBhWzBdLFxuICAgICAgYTEgPSBhWzFdLFxuICAgICAgYTIgPSBhWzJdLFxuICAgICAgYTMgPSBhWzNdO1xuICB2YXIgcyA9IE1hdGguc2luKHJhZCk7XG4gIHZhciBjID0gTWF0aC5jb3MocmFkKTtcbiAgb3V0WzBdID0gYTAgKiBjICsgYTIgKiBzO1xuICBvdXRbMV0gPSBhMSAqIGMgKyBhMyAqIHM7XG4gIG91dFsyXSA9IGEwICogLXMgKyBhMiAqIGM7XG4gIG91dFszXSA9IGExICogLXMgKyBhMyAqIGM7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2NhbGVzIHRoZSBtYXQyIGJ5IHRoZSBkaW1lbnNpb25zIGluIHRoZSBnaXZlbiB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge3ZlYzJ9IHYgdGhlIHZlYzIgdG8gc2NhbGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlKG91dCwgYSwgdikge1xuICB2YXIgYTAgPSBhWzBdLFxuICAgICAgYTEgPSBhWzFdLFxuICAgICAgYTIgPSBhWzJdLFxuICAgICAgYTMgPSBhWzNdO1xuICB2YXIgdjAgPSB2WzBdLFxuICAgICAgdjEgPSB2WzFdO1xuICBvdXRbMF0gPSBhMCAqIHYwO1xuICBvdXRbMV0gPSBhMSAqIHYwO1xuICBvdXRbMl0gPSBhMiAqIHYxO1xuICBvdXRbM10gPSBhMyAqIHYxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtYXRyaXggZnJvbSBhIGdpdmVuIGFuZ2xlXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0Mi5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDIucm90YXRlKGRlc3QsIGRlc3QsIHJhZCk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IG1hdDIgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21Sb3RhdGlvbihvdXQsIHJhZCkge1xuICB2YXIgcyA9IE1hdGguc2luKHJhZCk7XG4gIHZhciBjID0gTWF0aC5jb3MocmFkKTtcbiAgb3V0WzBdID0gYztcbiAgb3V0WzFdID0gcztcbiAgb3V0WzJdID0gLXM7XG4gIG91dFszXSA9IGM7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIGEgdmVjdG9yIHNjYWxpbmdcclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQyLmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0Mi5zY2FsZShkZXN0LCBkZXN0LCB2ZWMpO1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJ9IG91dCBtYXQyIHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7dmVjMn0gdiBTY2FsaW5nIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7bWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVNjYWxpbmcob3V0LCB2KSB7XG4gIG91dFswXSA9IHZbMF07XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IHZbMV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIG1hdDJcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBhIG1hdHJpeCB0byByZXByZXNlbnQgYXMgYSBzdHJpbmdcclxuICogQHJldHVybnMge1N0cmluZ30gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtYXRyaXhcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzdHIoYSkge1xuICByZXR1cm4gXCJtYXQyKFwiICsgYVswXSArIFwiLCBcIiArIGFbMV0gKyBcIiwgXCIgKyBhWzJdICsgXCIsIFwiICsgYVszXSArIFwiKVwiO1xufVxuLyoqXHJcbiAqIFJldHVybnMgRnJvYmVuaXVzIG5vcm0gb2YgYSBtYXQyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgbWF0cml4IHRvIGNhbGN1bGF0ZSBGcm9iZW5pdXMgbm9ybSBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBGcm9iZW5pdXMgbm9ybVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb2IoYSkge1xuICByZXR1cm4gTWF0aC5oeXBvdChhWzBdLCBhWzFdLCBhWzJdLCBhWzNdKTtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIEwsIEQgYW5kIFUgbWF0cmljZXMgKExvd2VyIHRyaWFuZ3VsYXIsIERpYWdvbmFsIGFuZCBVcHBlciB0cmlhbmd1bGFyKSBieSBmYWN0b3JpemluZyB0aGUgaW5wdXQgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gTCB0aGUgbG93ZXIgdHJpYW5ndWxhciBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBEIHRoZSBkaWFnb25hbCBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBVIHRoZSB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJ9IGEgdGhlIGlucHV0IG1hdHJpeCB0byBmYWN0b3JpemVcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBMRFUoTCwgRCwgVSwgYSkge1xuICBMWzJdID0gYVsyXSAvIGFbMF07XG4gIFVbMF0gPSBhWzBdO1xuICBVWzFdID0gYVsxXTtcbiAgVVszXSA9IGFbM10gLSBMWzJdICogVVsxXTtcbiAgcmV0dXJuIFtMLCBELCBVXTtcbn1cbi8qKlxyXG4gKiBBZGRzIHR3byBtYXQyJ3NcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSArIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gKyBiWzFdO1xuICBvdXRbMl0gPSBhWzJdICsgYlsyXTtcbiAgb3V0WzNdID0gYVszXSArIGJbM107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU3VidHJhY3RzIG1hdHJpeCBiIGZyb20gbWF0cml4IGFcclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnRyYWN0KG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdIC0gYlswXTtcbiAgb3V0WzFdID0gYVsxXSAtIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gLSBiWzJdO1xuICBvdXRbM10gPSBhWzNdIC0gYlszXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBtYXRyaWNlcyBoYXZlIGV4YWN0bHkgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgcG9zaXRpb24gKHdoZW4gY29tcGFyZWQgd2l0aCA9PT0pXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSBUaGUgZmlyc3QgbWF0cml4LlxyXG4gKiBAcGFyYW0ge21hdDJ9IGIgVGhlIHNlY29uZCBtYXRyaXguXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSBtYXRyaWNlcyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBleGFjdEVxdWFscyhhLCBiKSB7XG4gIHJldHVybiBhWzBdID09PSBiWzBdICYmIGFbMV0gPT09IGJbMV0gJiYgYVsyXSA9PT0gYlsyXSAmJiBhWzNdID09PSBiWzNdO1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIG1hdHJpY2VzIGhhdmUgYXBwcm94aW1hdGVseSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBwb3NpdGlvbi5cclxuICpcclxuICogQHBhcmFtIHttYXQyfSBhIFRoZSBmaXJzdCBtYXRyaXguXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYiBUaGUgc2Vjb25kIG1hdHJpeC5cclxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIG1hdHJpY2VzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFscyhhLCBiKSB7XG4gIHZhciBhMCA9IGFbMF0sXG4gICAgICBhMSA9IGFbMV0sXG4gICAgICBhMiA9IGFbMl0sXG4gICAgICBhMyA9IGFbM107XG4gIHZhciBiMCA9IGJbMF0sXG4gICAgICBiMSA9IGJbMV0sXG4gICAgICBiMiA9IGJbMl0sXG4gICAgICBiMyA9IGJbM107XG4gIHJldHVybiBNYXRoLmFicyhhMCAtIGIwKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMCksIE1hdGguYWJzKGIwKSkgJiYgTWF0aC5hYnMoYTEgLSBiMSkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTEpLCBNYXRoLmFicyhiMSkpICYmIE1hdGguYWJzKGEyIC0gYjIpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEyKSwgTWF0aC5hYnMoYjIpKSAmJiBNYXRoLmFicyhhMyAtIGIzKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMyksIE1hdGguYWJzKGIzKSk7XG59XG4vKipcclxuICogTXVsdGlwbHkgZWFjaCBlbGVtZW50IG9mIHRoZSBtYXRyaXggYnkgYSBzY2FsYXIuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0Mn0gYSB0aGUgbWF0cml4IHRvIHNjYWxlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBiIGFtb3VudCB0byBzY2FsZSB0aGUgbWF0cml4J3MgZWxlbWVudHMgYnlcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5U2NhbGFyKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICogYjtcbiAgb3V0WzFdID0gYVsxXSAqIGI7XG4gIG91dFsyXSA9IGFbMl0gKiBiO1xuICBvdXRbM10gPSBhWzNdICogYjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBBZGRzIHR3byBtYXQyJ3MgYWZ0ZXIgbXVsdGlwbHlpbmcgZWFjaCBlbGVtZW50IG9mIHRoZSBzZWNvbmQgb3BlcmFuZCBieSBhIHNjYWxhciB2YWx1ZS5cclxuICpcclxuICogQHBhcmFtIHttYXQyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHttYXQyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0Mn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHNjYWxlIHRoZSBhbW91bnQgdG8gc2NhbGUgYidzIGVsZW1lbnRzIGJ5IGJlZm9yZSBhZGRpbmdcclxuICogQHJldHVybnMge21hdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5U2NhbGFyQW5kQWRkKG91dCwgYSwgYiwgc2NhbGUpIHtcbiAgb3V0WzBdID0gYVswXSArIGJbMF0gKiBzY2FsZTtcbiAgb3V0WzFdID0gYVsxXSArIGJbMV0gKiBzY2FsZTtcbiAgb3V0WzJdID0gYVsyXSArIGJbMl0gKiBzY2FsZTtcbiAgb3V0WzNdID0gYVszXSArIGJbM10gKiBzY2FsZTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIG1hdDIubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBtdWwgPSBtdWx0aXBseTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIG1hdDIuc3VidHJhY3R9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzdWIgPSBzdWJ0cmFjdDsiLCJpbXBvcnQgKiBhcyBnbE1hdHJpeCBmcm9tIFwiLi9jb21tb24uanNcIjtcbi8qKlxyXG4gKiAyeDMgTWF0cml4XHJcbiAqIEBtb2R1bGUgbWF0MmRcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIEEgbWF0MmQgY29udGFpbnMgc2l4IGVsZW1lbnRzIGRlZmluZWQgYXM6XHJcbiAqIDxwcmU+XHJcbiAqIFthLCBiLFxyXG4gKiAgYywgZCxcclxuICogIHR4LCB0eV1cclxuICogPC9wcmU+XHJcbiAqIFRoaXMgaXMgYSBzaG9ydCBmb3JtIGZvciB0aGUgM3gzIG1hdHJpeDpcclxuICogPHByZT5cclxuICogW2EsIGIsIDAsXHJcbiAqICBjLCBkLCAwLFxyXG4gKiAgdHgsIHR5LCAxXVxyXG4gKiA8L3ByZT5cclxuICogVGhlIGxhc3QgY29sdW1uIGlzIGlnbm9yZWQgc28gdGhlIGFycmF5IGlzIHNob3J0ZXIgYW5kIG9wZXJhdGlvbnMgYXJlIGZhc3Rlci5cclxuICovXG5cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IGlkZW50aXR5IG1hdDJkXHJcbiAqXHJcbiAqIEByZXR1cm5zIHttYXQyZH0gYSBuZXcgMngzIG1hdHJpeFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDYpO1xuXG4gIGlmIChnbE1hdHJpeC5BUlJBWV9UWVBFICE9IEZsb2F0MzJBcnJheSkge1xuICAgIG91dFsxXSA9IDA7XG4gICAgb3V0WzJdID0gMDtcbiAgICBvdXRbNF0gPSAwO1xuICAgIG91dFs1XSA9IDA7XG4gIH1cblxuICBvdXRbMF0gPSAxO1xuICBvdXRbM10gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgbWF0MmQgaW5pdGlhbGl6ZWQgd2l0aCB2YWx1ZXMgZnJvbSBhbiBleGlzdGluZyBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gYSBtYXRyaXggdG8gY2xvbmVcclxuICogQHJldHVybnMge21hdDJkfSBhIG5ldyAyeDMgbWF0cml4XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY2xvbmUoYSkge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoNik7XG4gIG91dFswXSA9IGFbMF07XG4gIG91dFsxXSA9IGFbMV07XG4gIG91dFsyXSA9IGFbMl07XG4gIG91dFszXSA9IGFbM107XG4gIG91dFs0XSA9IGFbNF07XG4gIG91dFs1XSA9IGFbNV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIG1hdDJkIHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDJkfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KG91dCwgYSkge1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICBvdXRbMl0gPSBhWzJdO1xuICBvdXRbM10gPSBhWzNdO1xuICBvdXRbNF0gPSBhWzRdO1xuICBvdXRbNV0gPSBhWzVdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNldCBhIG1hdDJkIHRvIHRoZSBpZGVudGl0eSBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHkob3V0KSB7XG4gIG91dFswXSA9IDE7XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDE7XG4gIG91dFs0XSA9IDA7XG4gIG91dFs1XSA9IDA7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlIGEgbmV3IG1hdDJkIHdpdGggdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0gYSBDb21wb25lbnQgQSAoaW5kZXggMClcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgQ29tcG9uZW50IEIgKGluZGV4IDEpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBjIENvbXBvbmVudCBDIChpbmRleCAyKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gZCBDb21wb25lbnQgRCAoaW5kZXggMylcclxuICogQHBhcmFtIHtOdW1iZXJ9IHR4IENvbXBvbmVudCBUWCAoaW5kZXggNClcclxuICogQHBhcmFtIHtOdW1iZXJ9IHR5IENvbXBvbmVudCBUWSAoaW5kZXggNSlcclxuICogQHJldHVybnMge21hdDJkfSBBIG5ldyBtYXQyZFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21WYWx1ZXMoYSwgYiwgYywgZCwgdHgsIHR5KSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSg2KTtcbiAgb3V0WzBdID0gYTtcbiAgb3V0WzFdID0gYjtcbiAgb3V0WzJdID0gYztcbiAgb3V0WzNdID0gZDtcbiAgb3V0WzRdID0gdHg7XG4gIG91dFs1XSA9IHR5O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNldCB0aGUgY29tcG9uZW50cyBvZiBhIG1hdDJkIHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBhIENvbXBvbmVudCBBIChpbmRleCAwKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBDb21wb25lbnQgQiAoaW5kZXggMSlcclxuICogQHBhcmFtIHtOdW1iZXJ9IGMgQ29tcG9uZW50IEMgKGluZGV4IDIpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBkIENvbXBvbmVudCBEIChpbmRleCAzKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gdHggQ29tcG9uZW50IFRYIChpbmRleCA0KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gdHkgQ29tcG9uZW50IFRZIChpbmRleCA1KVxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNldChvdXQsIGEsIGIsIGMsIGQsIHR4LCB0eSkge1xuICBvdXRbMF0gPSBhO1xuICBvdXRbMV0gPSBiO1xuICBvdXRbMl0gPSBjO1xuICBvdXRbM10gPSBkO1xuICBvdXRbNF0gPSB0eDtcbiAgb3V0WzVdID0gdHk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogSW52ZXJ0cyBhIG1hdDJkXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJ0KG91dCwgYSkge1xuICB2YXIgYWEgPSBhWzBdLFxuICAgICAgYWIgPSBhWzFdLFxuICAgICAgYWMgPSBhWzJdLFxuICAgICAgYWQgPSBhWzNdO1xuICB2YXIgYXR4ID0gYVs0XSxcbiAgICAgIGF0eSA9IGFbNV07XG4gIHZhciBkZXQgPSBhYSAqIGFkIC0gYWIgKiBhYztcblxuICBpZiAoIWRldCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZGV0ID0gMS4wIC8gZGV0O1xuICBvdXRbMF0gPSBhZCAqIGRldDtcbiAgb3V0WzFdID0gLWFiICogZGV0O1xuICBvdXRbMl0gPSAtYWMgKiBkZXQ7XG4gIG91dFszXSA9IGFhICogZGV0O1xuICBvdXRbNF0gPSAoYWMgKiBhdHkgLSBhZCAqIGF0eCkgKiBkZXQ7XG4gIG91dFs1XSA9IChhYiAqIGF0eCAtIGFhICogYXR5KSAqIGRldDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkZXRlcm1pbmFudCBvZiBhIG1hdDJkXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge051bWJlcn0gZGV0ZXJtaW5hbnQgb2YgYVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGRldGVybWluYW50KGEpIHtcbiAgcmV0dXJuIGFbMF0gKiBhWzNdIC0gYVsxXSAqIGFbMl07XG59XG4vKipcclxuICogTXVsdGlwbGllcyB0d28gbWF0MmQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge21hdDJkfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5KG91dCwgYSwgYikge1xuICB2YXIgYTAgPSBhWzBdLFxuICAgICAgYTEgPSBhWzFdLFxuICAgICAgYTIgPSBhWzJdLFxuICAgICAgYTMgPSBhWzNdLFxuICAgICAgYTQgPSBhWzRdLFxuICAgICAgYTUgPSBhWzVdO1xuICB2YXIgYjAgPSBiWzBdLFxuICAgICAgYjEgPSBiWzFdLFxuICAgICAgYjIgPSBiWzJdLFxuICAgICAgYjMgPSBiWzNdLFxuICAgICAgYjQgPSBiWzRdLFxuICAgICAgYjUgPSBiWzVdO1xuICBvdXRbMF0gPSBhMCAqIGIwICsgYTIgKiBiMTtcbiAgb3V0WzFdID0gYTEgKiBiMCArIGEzICogYjE7XG4gIG91dFsyXSA9IGEwICogYjIgKyBhMiAqIGIzO1xuICBvdXRbM10gPSBhMSAqIGIyICsgYTMgKiBiMztcbiAgb3V0WzRdID0gYTAgKiBiNCArIGEyICogYjUgKyBhNDtcbiAgb3V0WzVdID0gYTEgKiBiNCArIGEzICogYjUgKyBhNTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGVzIGEgbWF0MmQgYnkgdGhlIGdpdmVuIGFuZ2xlXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlKG91dCwgYSwgcmFkKSB7XG4gIHZhciBhMCA9IGFbMF0sXG4gICAgICBhMSA9IGFbMV0sXG4gICAgICBhMiA9IGFbMl0sXG4gICAgICBhMyA9IGFbM10sXG4gICAgICBhNCA9IGFbNF0sXG4gICAgICBhNSA9IGFbNV07XG4gIHZhciBzID0gTWF0aC5zaW4ocmFkKTtcbiAgdmFyIGMgPSBNYXRoLmNvcyhyYWQpO1xuICBvdXRbMF0gPSBhMCAqIGMgKyBhMiAqIHM7XG4gIG91dFsxXSA9IGExICogYyArIGEzICogcztcbiAgb3V0WzJdID0gYTAgKiAtcyArIGEyICogYztcbiAgb3V0WzNdID0gYTEgKiAtcyArIGEzICogYztcbiAgb3V0WzRdID0gYTQ7XG4gIG91dFs1XSA9IGE1O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNjYWxlcyB0aGUgbWF0MmQgYnkgdGhlIGRpbWVuc2lvbnMgaW4gdGhlIGdpdmVuIHZlYzJcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIG1hdHJpeCB0byB0cmFuc2xhdGVcclxuICogQHBhcmFtIHt2ZWMyfSB2IHRoZSB2ZWMyIHRvIHNjYWxlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDJkfSBvdXRcclxuICoqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2NhbGUob3V0LCBhLCB2KSB7XG4gIHZhciBhMCA9IGFbMF0sXG4gICAgICBhMSA9IGFbMV0sXG4gICAgICBhMiA9IGFbMl0sXG4gICAgICBhMyA9IGFbM10sXG4gICAgICBhNCA9IGFbNF0sXG4gICAgICBhNSA9IGFbNV07XG4gIHZhciB2MCA9IHZbMF0sXG4gICAgICB2MSA9IHZbMV07XG4gIG91dFswXSA9IGEwICogdjA7XG4gIG91dFsxXSA9IGExICogdjA7XG4gIG91dFsyXSA9IGEyICogdjE7XG4gIG91dFszXSA9IGEzICogdjE7XG4gIG91dFs0XSA9IGE0O1xuICBvdXRbNV0gPSBhNTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc2xhdGVzIHRoZSBtYXQyZCBieSB0aGUgZGltZW5zaW9ucyBpbiB0aGUgZ2l2ZW4gdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgbWF0cml4IHRvIHRyYW5zbGF0ZVxyXG4gKiBAcGFyYW0ge3ZlYzJ9IHYgdGhlIHZlYzIgdG8gdHJhbnNsYXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDJkfSBvdXRcclxuICoqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNsYXRlKG91dCwgYSwgdikge1xuICB2YXIgYTAgPSBhWzBdLFxuICAgICAgYTEgPSBhWzFdLFxuICAgICAgYTIgPSBhWzJdLFxuICAgICAgYTMgPSBhWzNdLFxuICAgICAgYTQgPSBhWzRdLFxuICAgICAgYTUgPSBhWzVdO1xuICB2YXIgdjAgPSB2WzBdLFxuICAgICAgdjEgPSB2WzFdO1xuICBvdXRbMF0gPSBhMDtcbiAgb3V0WzFdID0gYTE7XG4gIG91dFsyXSA9IGEyO1xuICBvdXRbM10gPSBhMztcbiAgb3V0WzRdID0gYTAgKiB2MCArIGEyICogdjEgKyBhNDtcbiAgb3V0WzVdID0gYTEgKiB2MCArIGEzICogdjEgKyBhNTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gYSBnaXZlbiBhbmdsZVxyXG4gKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGJ1dCBtdWNoIGZhc3RlciB0aGFuKTpcclxuICpcclxuICogICAgIG1hdDJkLmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0MmQucm90YXRlKGRlc3QsIGRlc3QsIHJhZCk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCBtYXQyZCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21Sb3RhdGlvbihvdXQsIHJhZCkge1xuICB2YXIgcyA9IE1hdGguc2luKHJhZCksXG4gICAgICBjID0gTWF0aC5jb3MocmFkKTtcbiAgb3V0WzBdID0gYztcbiAgb3V0WzFdID0gcztcbiAgb3V0WzJdID0gLXM7XG4gIG91dFszXSA9IGM7XG4gIG91dFs0XSA9IDA7XG4gIG91dFs1XSA9IDA7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIGEgdmVjdG9yIHNjYWxpbmdcclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQyZC5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDJkLnNjYWxlKGRlc3QsIGRlc3QsIHZlYyk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCBtYXQyZCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IHYgU2NhbGluZyB2ZWN0b3JcclxuICogQHJldHVybnMge21hdDJkfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tU2NhbGluZyhvdXQsIHYpIHtcbiAgb3V0WzBdID0gdlswXTtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gdlsxXTtcbiAgb3V0WzRdID0gMDtcbiAgb3V0WzVdID0gMDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gYSB2ZWN0b3IgdHJhbnNsYXRpb25cclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQyZC5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDJkLnRyYW5zbGF0ZShkZXN0LCBkZXN0LCB2ZWMpO1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBvdXQgbWF0MmQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHt2ZWMyfSB2IFRyYW5zbGF0aW9uIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21UcmFuc2xhdGlvbihvdXQsIHYpIHtcbiAgb3V0WzBdID0gMTtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMTtcbiAgb3V0WzRdID0gdlswXTtcbiAgb3V0WzVdID0gdlsxXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgbWF0MmRcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gYSBtYXRyaXggdG8gcmVwcmVzZW50IGFzIGEgc3RyaW5nXHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWF0cml4XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyKGEpIHtcbiAgcmV0dXJuIFwibWF0MmQoXCIgKyBhWzBdICsgXCIsIFwiICsgYVsxXSArIFwiLCBcIiArIGFbMl0gKyBcIiwgXCIgKyBhWzNdICsgXCIsIFwiICsgYVs0XSArIFwiLCBcIiArIGFbNV0gKyBcIilcIjtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIEZyb2Jlbml1cyBub3JtIG9mIGEgbWF0MmRcclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgbWF0cml4IHRvIGNhbGN1bGF0ZSBGcm9iZW5pdXMgbm9ybSBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBGcm9iZW5pdXMgbm9ybVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb2IoYSkge1xuICByZXR1cm4gTWF0aC5oeXBvdChhWzBdLCBhWzFdLCBhWzJdLCBhWzNdLCBhWzRdLCBhWzVdLCAxKTtcbn1cbi8qKlxyXG4gKiBBZGRzIHR3byBtYXQyZCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0MmR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICsgYlswXTtcbiAgb3V0WzFdID0gYVsxXSArIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gKyBiWzJdO1xuICBvdXRbM10gPSBhWzNdICsgYlszXTtcbiAgb3V0WzRdID0gYVs0XSArIGJbNF07XG4gIG91dFs1XSA9IGFbNV0gKyBiWzVdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFN1YnRyYWN0cyBtYXRyaXggYiBmcm9tIG1hdHJpeCBhXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0MmR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHttYXQyZH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3VidHJhY3Qob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gLSBiWzBdO1xuICBvdXRbMV0gPSBhWzFdIC0gYlsxXTtcbiAgb3V0WzJdID0gYVsyXSAtIGJbMl07XG4gIG91dFszXSA9IGFbM10gLSBiWzNdO1xuICBvdXRbNF0gPSBhWzRdIC0gYls0XTtcbiAgb3V0WzVdID0gYVs1XSAtIGJbNV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTXVsdGlwbHkgZWFjaCBlbGVtZW50IG9mIHRoZSBtYXRyaXggYnkgYSBzY2FsYXIuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIHRoZSBtYXRyaXggdG8gc2NhbGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgYW1vdW50IHRvIHNjYWxlIHRoZSBtYXRyaXgncyBlbGVtZW50cyBieVxyXG4gKiBAcmV0dXJucyB7bWF0MmR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5U2NhbGFyKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICogYjtcbiAgb3V0WzFdID0gYVsxXSAqIGI7XG4gIG91dFsyXSA9IGFbMl0gKiBiO1xuICBvdXRbM10gPSBhWzNdICogYjtcbiAgb3V0WzRdID0gYVs0XSAqIGI7XG4gIG91dFs1XSA9IGFbNV0gKiBiO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEFkZHMgdHdvIG1hdDJkJ3MgYWZ0ZXIgbXVsdGlwbHlpbmcgZWFjaCBlbGVtZW50IG9mIHRoZSBzZWNvbmQgb3BlcmFuZCBieSBhIHNjYWxhciB2YWx1ZS5cclxuICpcclxuICogQHBhcmFtIHttYXQyZH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHttYXQyZH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHNjYWxlIHRoZSBhbW91bnQgdG8gc2NhbGUgYidzIGVsZW1lbnRzIGJ5IGJlZm9yZSBhZGRpbmdcclxuICogQHJldHVybnMge21hdDJkfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBseVNjYWxhckFuZEFkZChvdXQsIGEsIGIsIHNjYWxlKSB7XG4gIG91dFswXSA9IGFbMF0gKyBiWzBdICogc2NhbGU7XG4gIG91dFsxXSA9IGFbMV0gKyBiWzFdICogc2NhbGU7XG4gIG91dFsyXSA9IGFbMl0gKyBiWzJdICogc2NhbGU7XG4gIG91dFszXSA9IGFbM10gKyBiWzNdICogc2NhbGU7XG4gIG91dFs0XSA9IGFbNF0gKyBiWzRdICogc2NhbGU7XG4gIG91dFs1XSA9IGFbNV0gKyBiWzVdICogc2NhbGU7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgbWF0cmljZXMgaGF2ZSBleGFjdGx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uICh3aGVuIGNvbXBhcmVkIHdpdGggPT09KVxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDJkfSBhIFRoZSBmaXJzdCBtYXRyaXguXHJcbiAqIEBwYXJhbSB7bWF0MmR9IGIgVGhlIHNlY29uZCBtYXRyaXguXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSBtYXRyaWNlcyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBleGFjdEVxdWFscyhhLCBiKSB7XG4gIHJldHVybiBhWzBdID09PSBiWzBdICYmIGFbMV0gPT09IGJbMV0gJiYgYVsyXSA9PT0gYlsyXSAmJiBhWzNdID09PSBiWzNdICYmIGFbNF0gPT09IGJbNF0gJiYgYVs1XSA9PT0gYls1XTtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBtYXRyaWNlcyBoYXZlIGFwcHJveGltYXRlbHkgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgcG9zaXRpb24uXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0MmR9IGEgVGhlIGZpcnN0IG1hdHJpeC5cclxuICogQHBhcmFtIHttYXQyZH0gYiBUaGUgc2Vjb25kIG1hdHJpeC5cclxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIG1hdHJpY2VzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFscyhhLCBiKSB7XG4gIHZhciBhMCA9IGFbMF0sXG4gICAgICBhMSA9IGFbMV0sXG4gICAgICBhMiA9IGFbMl0sXG4gICAgICBhMyA9IGFbM10sXG4gICAgICBhNCA9IGFbNF0sXG4gICAgICBhNSA9IGFbNV07XG4gIHZhciBiMCA9IGJbMF0sXG4gICAgICBiMSA9IGJbMV0sXG4gICAgICBiMiA9IGJbMl0sXG4gICAgICBiMyA9IGJbM10sXG4gICAgICBiNCA9IGJbNF0sXG4gICAgICBiNSA9IGJbNV07XG4gIHJldHVybiBNYXRoLmFicyhhMCAtIGIwKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMCksIE1hdGguYWJzKGIwKSkgJiYgTWF0aC5hYnMoYTEgLSBiMSkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTEpLCBNYXRoLmFicyhiMSkpICYmIE1hdGguYWJzKGEyIC0gYjIpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEyKSwgTWF0aC5hYnMoYjIpKSAmJiBNYXRoLmFicyhhMyAtIGIzKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMyksIE1hdGguYWJzKGIzKSkgJiYgTWF0aC5hYnMoYTQgLSBiNCkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTQpLCBNYXRoLmFicyhiNCkpICYmIE1hdGguYWJzKGE1IC0gYjUpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGE1KSwgTWF0aC5hYnMoYjUpKTtcbn1cbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIG1hdDJkLm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbXVsID0gbXVsdGlwbHk7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBtYXQyZC5zdWJ0cmFjdH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHN1YiA9IHN1YnRyYWN0OyIsImltcG9ydCAqIGFzIGdsTWF0cml4IGZyb20gXCIuL2NvbW1vbi5qc1wiO1xuLyoqXHJcbiAqIDN4MyBNYXRyaXhcclxuICogQG1vZHVsZSBtYXQzXHJcbiAqL1xuXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBpZGVudGl0eSBtYXQzXHJcbiAqXHJcbiAqIEByZXR1cm5zIHttYXQzfSBhIG5ldyAzeDMgbWF0cml4XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlKCkge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoOSk7XG5cbiAgaWYgKGdsTWF0cml4LkFSUkFZX1RZUEUgIT0gRmxvYXQzMkFycmF5KSB7XG4gICAgb3V0WzFdID0gMDtcbiAgICBvdXRbMl0gPSAwO1xuICAgIG91dFszXSA9IDA7XG4gICAgb3V0WzVdID0gMDtcbiAgICBvdXRbNl0gPSAwO1xuICAgIG91dFs3XSA9IDA7XG4gIH1cblxuICBvdXRbMF0gPSAxO1xuICBvdXRbNF0gPSAxO1xuICBvdXRbOF0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENvcGllcyB0aGUgdXBwZXItbGVmdCAzeDMgdmFsdWVzIGludG8gdGhlIGdpdmVuIG1hdDMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgM3gzIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgICB0aGUgc291cmNlIDR4NCBtYXRyaXhcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21NYXQ0KG91dCwgYSkge1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICBvdXRbMl0gPSBhWzJdO1xuICBvdXRbM10gPSBhWzRdO1xuICBvdXRbNF0gPSBhWzVdO1xuICBvdXRbNV0gPSBhWzZdO1xuICBvdXRbNl0gPSBhWzhdO1xuICBvdXRbN10gPSBhWzldO1xuICBvdXRbOF0gPSBhWzEwXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IG1hdDMgaW5pdGlhbGl6ZWQgd2l0aCB2YWx1ZXMgZnJvbSBhbiBleGlzdGluZyBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBhIG1hdHJpeCB0byBjbG9uZVxyXG4gKiBAcmV0dXJucyB7bWF0M30gYSBuZXcgM3gzIG1hdHJpeFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNsb25lKGEpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDkpO1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICBvdXRbMl0gPSBhWzJdO1xuICBvdXRbM10gPSBhWzNdO1xuICBvdXRbNF0gPSBhWzRdO1xuICBvdXRbNV0gPSBhWzVdO1xuICBvdXRbNl0gPSBhWzZdO1xuICBvdXRbN10gPSBhWzddO1xuICBvdXRbOF0gPSBhWzhdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENvcHkgdGhlIHZhbHVlcyBmcm9tIG9uZSBtYXQzIHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KG91dCwgYSkge1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICBvdXRbMl0gPSBhWzJdO1xuICBvdXRbM10gPSBhWzNdO1xuICBvdXRbNF0gPSBhWzRdO1xuICBvdXRbNV0gPSBhWzVdO1xuICBvdXRbNl0gPSBhWzZdO1xuICBvdXRbN10gPSBhWzddO1xuICBvdXRbOF0gPSBhWzhdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZSBhIG5ldyBtYXQzIHdpdGggdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTAwIENvbXBvbmVudCBpbiBjb2x1bW4gMCwgcm93IDAgcG9zaXRpb24gKGluZGV4IDApXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMDEgQ29tcG9uZW50IGluIGNvbHVtbiAwLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggMSlcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMiBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAyIHBvc2l0aW9uIChpbmRleCAyKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTEwIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDAgcG9zaXRpb24gKGluZGV4IDMpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTEgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggNClcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0xMiBDb21wb25lbnQgaW4gY29sdW1uIDEsIHJvdyAyIHBvc2l0aW9uIChpbmRleCA1KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTIwIENvbXBvbmVudCBpbiBjb2x1bW4gMiwgcm93IDAgcG9zaXRpb24gKGluZGV4IDYpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMjEgQ29tcG9uZW50IGluIGNvbHVtbiAyLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggNylcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0yMiBDb21wb25lbnQgaW4gY29sdW1uIDIsIHJvdyAyIHBvc2l0aW9uIChpbmRleCA4KVxyXG4gKiBAcmV0dXJucyB7bWF0M30gQSBuZXcgbWF0M1xyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21WYWx1ZXMobTAwLCBtMDEsIG0wMiwgbTEwLCBtMTEsIG0xMiwgbTIwLCBtMjEsIG0yMikge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoOSk7XG4gIG91dFswXSA9IG0wMDtcbiAgb3V0WzFdID0gbTAxO1xuICBvdXRbMl0gPSBtMDI7XG4gIG91dFszXSA9IG0xMDtcbiAgb3V0WzRdID0gbTExO1xuICBvdXRbNV0gPSBtMTI7XG4gIG91dFs2XSA9IG0yMDtcbiAgb3V0WzddID0gbTIxO1xuICBvdXRbOF0gPSBtMjI7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgbWF0MyB0byB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMDAgQ29tcG9uZW50IGluIGNvbHVtbiAwLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggMClcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMSBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAxIHBvc2l0aW9uIChpbmRleCAxKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTAyIENvbXBvbmVudCBpbiBjb2x1bW4gMCwgcm93IDIgcG9zaXRpb24gKGluZGV4IDIpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTAgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggMylcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0xMSBDb21wb25lbnQgaW4gY29sdW1uIDEsIHJvdyAxIHBvc2l0aW9uIChpbmRleCA0KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTEyIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDIgcG9zaXRpb24gKGluZGV4IDUpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMjAgQ29tcG9uZW50IGluIGNvbHVtbiAyLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggNilcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0yMSBDb21wb25lbnQgaW4gY29sdW1uIDIsIHJvdyAxIHBvc2l0aW9uIChpbmRleCA3KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTIyIENvbXBvbmVudCBpbiBjb2x1bW4gMiwgcm93IDIgcG9zaXRpb24gKGluZGV4IDgpXHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXQob3V0LCBtMDAsIG0wMSwgbTAyLCBtMTAsIG0xMSwgbTEyLCBtMjAsIG0yMSwgbTIyKSB7XG4gIG91dFswXSA9IG0wMDtcbiAgb3V0WzFdID0gbTAxO1xuICBvdXRbMl0gPSBtMDI7XG4gIG91dFszXSA9IG0xMDtcbiAgb3V0WzRdID0gbTExO1xuICBvdXRbNV0gPSBtMTI7XG4gIG91dFs2XSA9IG0yMDtcbiAgb3V0WzddID0gbTIxO1xuICBvdXRbOF0gPSBtMjI7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2V0IGEgbWF0MyB0byB0aGUgaWRlbnRpdHkgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eShvdXQpIHtcbiAgb3V0WzBdID0gMTtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gMTtcbiAgb3V0WzVdID0gMDtcbiAgb3V0WzZdID0gMDtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc3Bvc2UgdGhlIHZhbHVlcyBvZiBhIG1hdDNcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc3Bvc2Uob3V0LCBhKSB7XG4gIC8vIElmIHdlIGFyZSB0cmFuc3Bvc2luZyBvdXJzZWx2ZXMgd2UgY2FuIHNraXAgYSBmZXcgc3RlcHMgYnV0IGhhdmUgdG8gY2FjaGUgc29tZSB2YWx1ZXNcbiAgaWYgKG91dCA9PT0gYSkge1xuICAgIHZhciBhMDEgPSBhWzFdLFxuICAgICAgICBhMDIgPSBhWzJdLFxuICAgICAgICBhMTIgPSBhWzVdO1xuICAgIG91dFsxXSA9IGFbM107XG4gICAgb3V0WzJdID0gYVs2XTtcbiAgICBvdXRbM10gPSBhMDE7XG4gICAgb3V0WzVdID0gYVs3XTtcbiAgICBvdXRbNl0gPSBhMDI7XG4gICAgb3V0WzddID0gYTEyO1xuICB9IGVsc2Uge1xuICAgIG91dFswXSA9IGFbMF07XG4gICAgb3V0WzFdID0gYVszXTtcbiAgICBvdXRbMl0gPSBhWzZdO1xuICAgIG91dFszXSA9IGFbMV07XG4gICAgb3V0WzRdID0gYVs0XTtcbiAgICBvdXRbNV0gPSBhWzddO1xuICAgIG91dFs2XSA9IGFbMl07XG4gICAgb3V0WzddID0gYVs1XTtcbiAgICBvdXRbOF0gPSBhWzhdO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBJbnZlcnRzIGEgbWF0M1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGludmVydChvdXQsIGEpIHtcbiAgdmFyIGEwMCA9IGFbMF0sXG4gICAgICBhMDEgPSBhWzFdLFxuICAgICAgYTAyID0gYVsyXTtcbiAgdmFyIGExMCA9IGFbM10sXG4gICAgICBhMTEgPSBhWzRdLFxuICAgICAgYTEyID0gYVs1XTtcbiAgdmFyIGEyMCA9IGFbNl0sXG4gICAgICBhMjEgPSBhWzddLFxuICAgICAgYTIyID0gYVs4XTtcbiAgdmFyIGIwMSA9IGEyMiAqIGExMSAtIGExMiAqIGEyMTtcbiAgdmFyIGIxMSA9IC1hMjIgKiBhMTAgKyBhMTIgKiBhMjA7XG4gIHZhciBiMjEgPSBhMjEgKiBhMTAgLSBhMTEgKiBhMjA7IC8vIENhbGN1bGF0ZSB0aGUgZGV0ZXJtaW5hbnRcblxuICB2YXIgZGV0ID0gYTAwICogYjAxICsgYTAxICogYjExICsgYTAyICogYjIxO1xuXG4gIGlmICghZGV0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBkZXQgPSAxLjAgLyBkZXQ7XG4gIG91dFswXSA9IGIwMSAqIGRldDtcbiAgb3V0WzFdID0gKC1hMjIgKiBhMDEgKyBhMDIgKiBhMjEpICogZGV0O1xuICBvdXRbMl0gPSAoYTEyICogYTAxIC0gYTAyICogYTExKSAqIGRldDtcbiAgb3V0WzNdID0gYjExICogZGV0O1xuICBvdXRbNF0gPSAoYTIyICogYTAwIC0gYTAyICogYTIwKSAqIGRldDtcbiAgb3V0WzVdID0gKC1hMTIgKiBhMDAgKyBhMDIgKiBhMTApICogZGV0O1xuICBvdXRbNl0gPSBiMjEgKiBkZXQ7XG4gIG91dFs3XSA9ICgtYTIxICogYTAwICsgYTAxICogYTIwKSAqIGRldDtcbiAgb3V0WzhdID0gKGExMSAqIGEwMCAtIGEwMSAqIGExMCkgKiBkZXQ7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgYWRqdWdhdGUgb2YgYSBtYXQzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYWRqb2ludChvdXQsIGEpIHtcbiAgdmFyIGEwMCA9IGFbMF0sXG4gICAgICBhMDEgPSBhWzFdLFxuICAgICAgYTAyID0gYVsyXTtcbiAgdmFyIGExMCA9IGFbM10sXG4gICAgICBhMTEgPSBhWzRdLFxuICAgICAgYTEyID0gYVs1XTtcbiAgdmFyIGEyMCA9IGFbNl0sXG4gICAgICBhMjEgPSBhWzddLFxuICAgICAgYTIyID0gYVs4XTtcbiAgb3V0WzBdID0gYTExICogYTIyIC0gYTEyICogYTIxO1xuICBvdXRbMV0gPSBhMDIgKiBhMjEgLSBhMDEgKiBhMjI7XG4gIG91dFsyXSA9IGEwMSAqIGExMiAtIGEwMiAqIGExMTtcbiAgb3V0WzNdID0gYTEyICogYTIwIC0gYTEwICogYTIyO1xuICBvdXRbNF0gPSBhMDAgKiBhMjIgLSBhMDIgKiBhMjA7XG4gIG91dFs1XSA9IGEwMiAqIGExMCAtIGEwMCAqIGExMjtcbiAgb3V0WzZdID0gYTEwICogYTIxIC0gYTExICogYTIwO1xuICBvdXRbN10gPSBhMDEgKiBhMjAgLSBhMDAgKiBhMjE7XG4gIG91dFs4XSA9IGEwMCAqIGExMSAtIGEwMSAqIGExMDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkZXRlcm1pbmFudCBvZiBhIG1hdDNcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBzb3VyY2UgbWF0cml4XHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRldGVybWluYW50IG9mIGFcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBkZXRlcm1pbmFudChhKSB7XG4gIHZhciBhMDAgPSBhWzBdLFxuICAgICAgYTAxID0gYVsxXSxcbiAgICAgIGEwMiA9IGFbMl07XG4gIHZhciBhMTAgPSBhWzNdLFxuICAgICAgYTExID0gYVs0XSxcbiAgICAgIGExMiA9IGFbNV07XG4gIHZhciBhMjAgPSBhWzZdLFxuICAgICAgYTIxID0gYVs3XSxcbiAgICAgIGEyMiA9IGFbOF07XG4gIHJldHVybiBhMDAgKiAoYTIyICogYTExIC0gYTEyICogYTIxKSArIGEwMSAqICgtYTIyICogYTEwICsgYTEyICogYTIwKSArIGEwMiAqIChhMjEgKiBhMTAgLSBhMTEgKiBhMjApO1xufVxuLyoqXHJcbiAqIE11bHRpcGxpZXMgdHdvIG1hdDMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHttYXQzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHkob3V0LCBhLCBiKSB7XG4gIHZhciBhMDAgPSBhWzBdLFxuICAgICAgYTAxID0gYVsxXSxcbiAgICAgIGEwMiA9IGFbMl07XG4gIHZhciBhMTAgPSBhWzNdLFxuICAgICAgYTExID0gYVs0XSxcbiAgICAgIGExMiA9IGFbNV07XG4gIHZhciBhMjAgPSBhWzZdLFxuICAgICAgYTIxID0gYVs3XSxcbiAgICAgIGEyMiA9IGFbOF07XG4gIHZhciBiMDAgPSBiWzBdLFxuICAgICAgYjAxID0gYlsxXSxcbiAgICAgIGIwMiA9IGJbMl07XG4gIHZhciBiMTAgPSBiWzNdLFxuICAgICAgYjExID0gYls0XSxcbiAgICAgIGIxMiA9IGJbNV07XG4gIHZhciBiMjAgPSBiWzZdLFxuICAgICAgYjIxID0gYls3XSxcbiAgICAgIGIyMiA9IGJbOF07XG4gIG91dFswXSA9IGIwMCAqIGEwMCArIGIwMSAqIGExMCArIGIwMiAqIGEyMDtcbiAgb3V0WzFdID0gYjAwICogYTAxICsgYjAxICogYTExICsgYjAyICogYTIxO1xuICBvdXRbMl0gPSBiMDAgKiBhMDIgKyBiMDEgKiBhMTIgKyBiMDIgKiBhMjI7XG4gIG91dFszXSA9IGIxMCAqIGEwMCArIGIxMSAqIGExMCArIGIxMiAqIGEyMDtcbiAgb3V0WzRdID0gYjEwICogYTAxICsgYjExICogYTExICsgYjEyICogYTIxO1xuICBvdXRbNV0gPSBiMTAgKiBhMDIgKyBiMTEgKiBhMTIgKyBiMTIgKiBhMjI7XG4gIG91dFs2XSA9IGIyMCAqIGEwMCArIGIyMSAqIGExMCArIGIyMiAqIGEyMDtcbiAgb3V0WzddID0gYjIwICogYTAxICsgYjIxICogYTExICsgYjIyICogYTIxO1xuICBvdXRbOF0gPSBiMjAgKiBhMDIgKyBiMjEgKiBhMTIgKyBiMjIgKiBhMjI7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogVHJhbnNsYXRlIGEgbWF0MyBieSB0aGUgZ2l2ZW4gdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgbWF0cml4IHRvIHRyYW5zbGF0ZVxyXG4gKiBAcGFyYW0ge3ZlYzJ9IHYgdmVjdG9yIHRvIHRyYW5zbGF0ZSBieVxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNsYXRlKG91dCwgYSwgdikge1xuICB2YXIgYTAwID0gYVswXSxcbiAgICAgIGEwMSA9IGFbMV0sXG4gICAgICBhMDIgPSBhWzJdLFxuICAgICAgYTEwID0gYVszXSxcbiAgICAgIGExMSA9IGFbNF0sXG4gICAgICBhMTIgPSBhWzVdLFxuICAgICAgYTIwID0gYVs2XSxcbiAgICAgIGEyMSA9IGFbN10sXG4gICAgICBhMjIgPSBhWzhdLFxuICAgICAgeCA9IHZbMF0sXG4gICAgICB5ID0gdlsxXTtcbiAgb3V0WzBdID0gYTAwO1xuICBvdXRbMV0gPSBhMDE7XG4gIG91dFsyXSA9IGEwMjtcbiAgb3V0WzNdID0gYTEwO1xuICBvdXRbNF0gPSBhMTE7XG4gIG91dFs1XSA9IGExMjtcbiAgb3V0WzZdID0geCAqIGEwMCArIHkgKiBhMTAgKyBhMjA7XG4gIG91dFs3XSA9IHggKiBhMDEgKyB5ICogYTExICsgYTIxO1xuICBvdXRbOF0gPSB4ICogYTAyICsgeSAqIGExMiArIGEyMjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGVzIGEgbWF0MyBieSB0aGUgZ2l2ZW4gYW5nbGVcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGUob3V0LCBhLCByYWQpIHtcbiAgdmFyIGEwMCA9IGFbMF0sXG4gICAgICBhMDEgPSBhWzFdLFxuICAgICAgYTAyID0gYVsyXSxcbiAgICAgIGExMCA9IGFbM10sXG4gICAgICBhMTEgPSBhWzRdLFxuICAgICAgYTEyID0gYVs1XSxcbiAgICAgIGEyMCA9IGFbNl0sXG4gICAgICBhMjEgPSBhWzddLFxuICAgICAgYTIyID0gYVs4XSxcbiAgICAgIHMgPSBNYXRoLnNpbihyYWQpLFxuICAgICAgYyA9IE1hdGguY29zKHJhZCk7XG4gIG91dFswXSA9IGMgKiBhMDAgKyBzICogYTEwO1xuICBvdXRbMV0gPSBjICogYTAxICsgcyAqIGExMTtcbiAgb3V0WzJdID0gYyAqIGEwMiArIHMgKiBhMTI7XG4gIG91dFszXSA9IGMgKiBhMTAgLSBzICogYTAwO1xuICBvdXRbNF0gPSBjICogYTExIC0gcyAqIGEwMTtcbiAgb3V0WzVdID0gYyAqIGExMiAtIHMgKiBhMDI7XG4gIG91dFs2XSA9IGEyMDtcbiAgb3V0WzddID0gYTIxO1xuICBvdXRbOF0gPSBhMjI7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2NhbGVzIHRoZSBtYXQzIGJ5IHRoZSBkaW1lbnNpb25zIGluIHRoZSBnaXZlbiB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge3ZlYzJ9IHYgdGhlIHZlYzIgdG8gc2NhbGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlKG91dCwgYSwgdikge1xuICB2YXIgeCA9IHZbMF0sXG4gICAgICB5ID0gdlsxXTtcbiAgb3V0WzBdID0geCAqIGFbMF07XG4gIG91dFsxXSA9IHggKiBhWzFdO1xuICBvdXRbMl0gPSB4ICogYVsyXTtcbiAgb3V0WzNdID0geSAqIGFbM107XG4gIG91dFs0XSA9IHkgKiBhWzRdO1xuICBvdXRbNV0gPSB5ICogYVs1XTtcbiAgb3V0WzZdID0gYVs2XTtcbiAgb3V0WzddID0gYVs3XTtcbiAgb3V0WzhdID0gYVs4XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gYSB2ZWN0b3IgdHJhbnNsYXRpb25cclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQzLmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0My50cmFuc2xhdGUoZGVzdCwgZGVzdCwgdmVjKTtcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgbWF0MyByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IHYgVHJhbnNsYXRpb24gdmVjdG9yXHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVHJhbnNsYXRpb24ob3V0LCB2KSB7XG4gIG91dFswXSA9IDE7XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IDE7XG4gIG91dFs1XSA9IDA7XG4gIG91dFs2XSA9IHZbMF07XG4gIG91dFs3XSA9IHZbMV07XG4gIG91dFs4XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIGEgZ2l2ZW4gYW5nbGVcclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQzLmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0My5yb3RhdGUoZGVzdCwgZGVzdCwgcmFkKTtcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgbWF0MyByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVJvdGF0aW9uKG91dCwgcmFkKSB7XG4gIHZhciBzID0gTWF0aC5zaW4ocmFkKSxcbiAgICAgIGMgPSBNYXRoLmNvcyhyYWQpO1xuICBvdXRbMF0gPSBjO1xuICBvdXRbMV0gPSBzO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAtcztcbiAgb3V0WzRdID0gYztcbiAgb3V0WzVdID0gMDtcbiAgb3V0WzZdID0gMDtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gYSB2ZWN0b3Igc2NhbGluZ1xyXG4gKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGJ1dCBtdWNoIGZhc3RlciB0aGFuKTpcclxuICpcclxuICogICAgIG1hdDMuaWRlbnRpdHkoZGVzdCk7XHJcbiAqICAgICBtYXQzLnNjYWxlKGRlc3QsIGRlc3QsIHZlYyk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IG1hdDMgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHt2ZWMyfSB2IFNjYWxpbmcgdmVjdG9yXHJcbiAqIEByZXR1cm5zIHttYXQzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tU2NhbGluZyhvdXQsIHYpIHtcbiAgb3V0WzBdID0gdlswXTtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gdlsxXTtcbiAgb3V0WzVdID0gMDtcbiAgb3V0WzZdID0gMDtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDb3BpZXMgdGhlIHZhbHVlcyBmcm9tIGEgbWF0MmQgaW50byBhIG1hdDNcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQyZH0gYSB0aGUgbWF0cml4IHRvIGNvcHlcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKiovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tTWF0MmQob3V0LCBhKSB7XG4gIG91dFswXSA9IGFbMF07XG4gIG91dFsxXSA9IGFbMV07XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IGFbMl07XG4gIG91dFs0XSA9IGFbM107XG4gIG91dFs1XSA9IDA7XG4gIG91dFs2XSA9IGFbNF07XG4gIG91dFs3XSA9IGFbNV07XG4gIG91dFs4XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyBhIDN4MyBtYXRyaXggZnJvbSB0aGUgZ2l2ZW4gcXVhdGVybmlvblxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCBtYXQzIHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7cXVhdH0gcSBRdWF0ZXJuaW9uIHRvIGNyZWF0ZSBtYXRyaXggZnJvbVxyXG4gKlxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVF1YXQob3V0LCBxKSB7XG4gIHZhciB4ID0gcVswXSxcbiAgICAgIHkgPSBxWzFdLFxuICAgICAgeiA9IHFbMl0sXG4gICAgICB3ID0gcVszXTtcbiAgdmFyIHgyID0geCArIHg7XG4gIHZhciB5MiA9IHkgKyB5O1xuICB2YXIgejIgPSB6ICsgejtcbiAgdmFyIHh4ID0geCAqIHgyO1xuICB2YXIgeXggPSB5ICogeDI7XG4gIHZhciB5eSA9IHkgKiB5MjtcbiAgdmFyIHp4ID0geiAqIHgyO1xuICB2YXIgenkgPSB6ICogeTI7XG4gIHZhciB6eiA9IHogKiB6MjtcbiAgdmFyIHd4ID0gdyAqIHgyO1xuICB2YXIgd3kgPSB3ICogeTI7XG4gIHZhciB3eiA9IHcgKiB6MjtcbiAgb3V0WzBdID0gMSAtIHl5IC0geno7XG4gIG91dFszXSA9IHl4IC0gd3o7XG4gIG91dFs2XSA9IHp4ICsgd3k7XG4gIG91dFsxXSA9IHl4ICsgd3o7XG4gIG91dFs0XSA9IDEgLSB4eCAtIHp6O1xuICBvdXRbN10gPSB6eSAtIHd4O1xuICBvdXRbMl0gPSB6eCAtIHd5O1xuICBvdXRbNV0gPSB6eSArIHd4O1xuICBvdXRbOF0gPSAxIC0geHggLSB5eTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIGEgM3gzIG5vcm1hbCBtYXRyaXggKHRyYW5zcG9zZSBpbnZlcnNlKSBmcm9tIHRoZSA0eDQgbWF0cml4XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IG1hdDMgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHttYXQ0fSBhIE1hdDQgdG8gZGVyaXZlIHRoZSBub3JtYWwgbWF0cml4IGZyb21cclxuICpcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbEZyb21NYXQ0KG91dCwgYSkge1xuICB2YXIgYTAwID0gYVswXSxcbiAgICAgIGEwMSA9IGFbMV0sXG4gICAgICBhMDIgPSBhWzJdLFxuICAgICAgYTAzID0gYVszXTtcbiAgdmFyIGExMCA9IGFbNF0sXG4gICAgICBhMTEgPSBhWzVdLFxuICAgICAgYTEyID0gYVs2XSxcbiAgICAgIGExMyA9IGFbN107XG4gIHZhciBhMjAgPSBhWzhdLFxuICAgICAgYTIxID0gYVs5XSxcbiAgICAgIGEyMiA9IGFbMTBdLFxuICAgICAgYTIzID0gYVsxMV07XG4gIHZhciBhMzAgPSBhWzEyXSxcbiAgICAgIGEzMSA9IGFbMTNdLFxuICAgICAgYTMyID0gYVsxNF0sXG4gICAgICBhMzMgPSBhWzE1XTtcbiAgdmFyIGIwMCA9IGEwMCAqIGExMSAtIGEwMSAqIGExMDtcbiAgdmFyIGIwMSA9IGEwMCAqIGExMiAtIGEwMiAqIGExMDtcbiAgdmFyIGIwMiA9IGEwMCAqIGExMyAtIGEwMyAqIGExMDtcbiAgdmFyIGIwMyA9IGEwMSAqIGExMiAtIGEwMiAqIGExMTtcbiAgdmFyIGIwNCA9IGEwMSAqIGExMyAtIGEwMyAqIGExMTtcbiAgdmFyIGIwNSA9IGEwMiAqIGExMyAtIGEwMyAqIGExMjtcbiAgdmFyIGIwNiA9IGEyMCAqIGEzMSAtIGEyMSAqIGEzMDtcbiAgdmFyIGIwNyA9IGEyMCAqIGEzMiAtIGEyMiAqIGEzMDtcbiAgdmFyIGIwOCA9IGEyMCAqIGEzMyAtIGEyMyAqIGEzMDtcbiAgdmFyIGIwOSA9IGEyMSAqIGEzMiAtIGEyMiAqIGEzMTtcbiAgdmFyIGIxMCA9IGEyMSAqIGEzMyAtIGEyMyAqIGEzMTtcbiAgdmFyIGIxMSA9IGEyMiAqIGEzMyAtIGEyMyAqIGEzMjsgLy8gQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudFxuXG4gIHZhciBkZXQgPSBiMDAgKiBiMTEgLSBiMDEgKiBiMTAgKyBiMDIgKiBiMDkgKyBiMDMgKiBiMDggLSBiMDQgKiBiMDcgKyBiMDUgKiBiMDY7XG5cbiAgaWYgKCFkZXQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGRldCA9IDEuMCAvIGRldDtcbiAgb3V0WzBdID0gKGExMSAqIGIxMSAtIGExMiAqIGIxMCArIGExMyAqIGIwOSkgKiBkZXQ7XG4gIG91dFsxXSA9IChhMTIgKiBiMDggLSBhMTAgKiBiMTEgLSBhMTMgKiBiMDcpICogZGV0O1xuICBvdXRbMl0gPSAoYTEwICogYjEwIC0gYTExICogYjA4ICsgYTEzICogYjA2KSAqIGRldDtcbiAgb3V0WzNdID0gKGEwMiAqIGIxMCAtIGEwMSAqIGIxMSAtIGEwMyAqIGIwOSkgKiBkZXQ7XG4gIG91dFs0XSA9IChhMDAgKiBiMTEgLSBhMDIgKiBiMDggKyBhMDMgKiBiMDcpICogZGV0O1xuICBvdXRbNV0gPSAoYTAxICogYjA4IC0gYTAwICogYjEwIC0gYTAzICogYjA2KSAqIGRldDtcbiAgb3V0WzZdID0gKGEzMSAqIGIwNSAtIGEzMiAqIGIwNCArIGEzMyAqIGIwMykgKiBkZXQ7XG4gIG91dFs3XSA9IChhMzIgKiBiMDIgLSBhMzAgKiBiMDUgLSBhMzMgKiBiMDEpICogZGV0O1xuICBvdXRbOF0gPSAoYTMwICogYjA0IC0gYTMxICogYjAyICsgYTMzICogYjAwKSAqIGRldDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSAyRCBwcm9qZWN0aW9uIG1hdHJpeCB3aXRoIHRoZSBnaXZlbiBib3VuZHNcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgbWF0MyBmcnVzdHVtIG1hdHJpeCB3aWxsIGJlIHdyaXR0ZW4gaW50b1xyXG4gKiBAcGFyYW0ge251bWJlcn0gd2lkdGggV2lkdGggb2YgeW91ciBnbCBjb250ZXh0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgSGVpZ2h0IG9mIGdsIGNvbnRleHRcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2plY3Rpb24ob3V0LCB3aWR0aCwgaGVpZ2h0KSB7XG4gIG91dFswXSA9IDIgLyB3aWR0aDtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gLTIgLyBoZWlnaHQ7XG4gIG91dFs1XSA9IDA7XG4gIG91dFs2XSA9IC0xO1xuICBvdXRbN10gPSAxO1xuICBvdXRbOF0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBtYXQzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gYSBtYXRyaXggdG8gcmVwcmVzZW50IGFzIGEgc3RyaW5nXHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWF0cml4XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyKGEpIHtcbiAgcmV0dXJuIFwibWF0MyhcIiArIGFbMF0gKyBcIiwgXCIgKyBhWzFdICsgXCIsIFwiICsgYVsyXSArIFwiLCBcIiArIGFbM10gKyBcIiwgXCIgKyBhWzRdICsgXCIsIFwiICsgYVs1XSArIFwiLCBcIiArIGFbNl0gKyBcIiwgXCIgKyBhWzddICsgXCIsIFwiICsgYVs4XSArIFwiKVwiO1xufVxuLyoqXHJcbiAqIFJldHVybnMgRnJvYmVuaXVzIG5vcm0gb2YgYSBtYXQzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgbWF0cml4IHRvIGNhbGN1bGF0ZSBGcm9iZW5pdXMgbm9ybSBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBGcm9iZW5pdXMgbm9ybVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb2IoYSkge1xuICByZXR1cm4gTWF0aC5oeXBvdChhWzBdLCBhWzFdLCBhWzJdLCBhWzNdLCBhWzRdLCBhWzVdLCBhWzZdLCBhWzddLCBhWzhdKTtcbn1cbi8qKlxyXG4gKiBBZGRzIHR3byBtYXQzJ3NcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0M30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSArIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gKyBiWzFdO1xuICBvdXRbMl0gPSBhWzJdICsgYlsyXTtcbiAgb3V0WzNdID0gYVszXSArIGJbM107XG4gIG91dFs0XSA9IGFbNF0gKyBiWzRdO1xuICBvdXRbNV0gPSBhWzVdICsgYls1XTtcbiAgb3V0WzZdID0gYVs2XSArIGJbNl07XG4gIG91dFs3XSA9IGFbN10gKyBiWzddO1xuICBvdXRbOF0gPSBhWzhdICsgYls4XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTdWJ0cmFjdHMgbWF0cml4IGIgZnJvbSBtYXRyaXggYVxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHttYXQzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3VidHJhY3Qob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gLSBiWzBdO1xuICBvdXRbMV0gPSBhWzFdIC0gYlsxXTtcbiAgb3V0WzJdID0gYVsyXSAtIGJbMl07XG4gIG91dFszXSA9IGFbM10gLSBiWzNdO1xuICBvdXRbNF0gPSBhWzRdIC0gYls0XTtcbiAgb3V0WzVdID0gYVs1XSAtIGJbNV07XG4gIG91dFs2XSA9IGFbNl0gLSBiWzZdO1xuICBvdXRbN10gPSBhWzddIC0gYls3XTtcbiAgb3V0WzhdID0gYVs4XSAtIGJbOF07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTXVsdGlwbHkgZWFjaCBlbGVtZW50IG9mIHRoZSBtYXRyaXggYnkgYSBzY2FsYXIuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0M30gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0M30gYSB0aGUgbWF0cml4IHRvIHNjYWxlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBiIGFtb3VudCB0byBzY2FsZSB0aGUgbWF0cml4J3MgZWxlbWVudHMgYnlcclxuICogQHJldHVybnMge21hdDN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5U2NhbGFyKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICogYjtcbiAgb3V0WzFdID0gYVsxXSAqIGI7XG4gIG91dFsyXSA9IGFbMl0gKiBiO1xuICBvdXRbM10gPSBhWzNdICogYjtcbiAgb3V0WzRdID0gYVs0XSAqIGI7XG4gIG91dFs1XSA9IGFbNV0gKiBiO1xuICBvdXRbNl0gPSBhWzZdICogYjtcbiAgb3V0WzddID0gYVs3XSAqIGI7XG4gIG91dFs4XSA9IGFbOF0gKiBiO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEFkZHMgdHdvIG1hdDMncyBhZnRlciBtdWx0aXBseWluZyBlYWNoIGVsZW1lbnQgb2YgdGhlIHNlY29uZCBvcGVyYW5kIGJ5IGEgc2NhbGFyIHZhbHVlLlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge21hdDN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHttYXQzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gc2NhbGUgdGhlIGFtb3VudCB0byBzY2FsZSBiJ3MgZWxlbWVudHMgYnkgYmVmb3JlIGFkZGluZ1xyXG4gKiBAcmV0dXJucyB7bWF0M30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHlTY2FsYXJBbmRBZGQob3V0LCBhLCBiLCBzY2FsZSkge1xuICBvdXRbMF0gPSBhWzBdICsgYlswXSAqIHNjYWxlO1xuICBvdXRbMV0gPSBhWzFdICsgYlsxXSAqIHNjYWxlO1xuICBvdXRbMl0gPSBhWzJdICsgYlsyXSAqIHNjYWxlO1xuICBvdXRbM10gPSBhWzNdICsgYlszXSAqIHNjYWxlO1xuICBvdXRbNF0gPSBhWzRdICsgYls0XSAqIHNjYWxlO1xuICBvdXRbNV0gPSBhWzVdICsgYls1XSAqIHNjYWxlO1xuICBvdXRbNl0gPSBhWzZdICsgYls2XSAqIHNjYWxlO1xuICBvdXRbN10gPSBhWzddICsgYls3XSAqIHNjYWxlO1xuICBvdXRbOF0gPSBhWzhdICsgYls4XSAqIHNjYWxlO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIG1hdHJpY2VzIGhhdmUgZXhhY3RseSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBwb3NpdGlvbiAod2hlbiBjb21wYXJlZCB3aXRoID09PSlcclxuICpcclxuICogQHBhcmFtIHttYXQzfSBhIFRoZSBmaXJzdCBtYXRyaXguXHJcbiAqIEBwYXJhbSB7bWF0M30gYiBUaGUgc2Vjb25kIG1hdHJpeC5cclxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIG1hdHJpY2VzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGV4YWN0RXF1YWxzKGEsIGIpIHtcbiAgcmV0dXJuIGFbMF0gPT09IGJbMF0gJiYgYVsxXSA9PT0gYlsxXSAmJiBhWzJdID09PSBiWzJdICYmIGFbM10gPT09IGJbM10gJiYgYVs0XSA9PT0gYls0XSAmJiBhWzVdID09PSBiWzVdICYmIGFbNl0gPT09IGJbNl0gJiYgYVs3XSA9PT0gYls3XSAmJiBhWzhdID09PSBiWzhdO1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIG1hdHJpY2VzIGhhdmUgYXBwcm94aW1hdGVseSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBwb3NpdGlvbi5cclxuICpcclxuICogQHBhcmFtIHttYXQzfSBhIFRoZSBmaXJzdCBtYXRyaXguXHJcbiAqIEBwYXJhbSB7bWF0M30gYiBUaGUgc2Vjb25kIG1hdHJpeC5cclxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIG1hdHJpY2VzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFscyhhLCBiKSB7XG4gIHZhciBhMCA9IGFbMF0sXG4gICAgICBhMSA9IGFbMV0sXG4gICAgICBhMiA9IGFbMl0sXG4gICAgICBhMyA9IGFbM10sXG4gICAgICBhNCA9IGFbNF0sXG4gICAgICBhNSA9IGFbNV0sXG4gICAgICBhNiA9IGFbNl0sXG4gICAgICBhNyA9IGFbN10sXG4gICAgICBhOCA9IGFbOF07XG4gIHZhciBiMCA9IGJbMF0sXG4gICAgICBiMSA9IGJbMV0sXG4gICAgICBiMiA9IGJbMl0sXG4gICAgICBiMyA9IGJbM10sXG4gICAgICBiNCA9IGJbNF0sXG4gICAgICBiNSA9IGJbNV0sXG4gICAgICBiNiA9IGJbNl0sXG4gICAgICBiNyA9IGJbN10sXG4gICAgICBiOCA9IGJbOF07XG4gIHJldHVybiBNYXRoLmFicyhhMCAtIGIwKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMCksIE1hdGguYWJzKGIwKSkgJiYgTWF0aC5hYnMoYTEgLSBiMSkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTEpLCBNYXRoLmFicyhiMSkpICYmIE1hdGguYWJzKGEyIC0gYjIpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEyKSwgTWF0aC5hYnMoYjIpKSAmJiBNYXRoLmFicyhhMyAtIGIzKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMyksIE1hdGguYWJzKGIzKSkgJiYgTWF0aC5hYnMoYTQgLSBiNCkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTQpLCBNYXRoLmFicyhiNCkpICYmIE1hdGguYWJzKGE1IC0gYjUpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGE1KSwgTWF0aC5hYnMoYjUpKSAmJiBNYXRoLmFicyhhNiAtIGI2KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhNiksIE1hdGguYWJzKGI2KSkgJiYgTWF0aC5hYnMoYTcgLSBiNykgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTcpLCBNYXRoLmFicyhiNykpICYmIE1hdGguYWJzKGE4IC0gYjgpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGE4KSwgTWF0aC5hYnMoYjgpKTtcbn1cbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIG1hdDMubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBtdWwgPSBtdWx0aXBseTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIG1hdDMuc3VidHJhY3R9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzdWIgPSBzdWJ0cmFjdDsiLCJpbXBvcnQgKiBhcyBnbE1hdHJpeCBmcm9tIFwiLi9jb21tb24uanNcIjtcbi8qKlxyXG4gKiA0eDQgTWF0cml4PGJyPkZvcm1hdDogY29sdW1uLW1ham9yLCB3aGVuIHR5cGVkIG91dCBpdCBsb29rcyBsaWtlIHJvdy1tYWpvcjxicj5UaGUgbWF0cmljZXMgYXJlIGJlaW5nIHBvc3QgbXVsdGlwbGllZC5cclxuICogQG1vZHVsZSBtYXQ0XHJcbiAqL1xuXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBpZGVudGl0eSBtYXQ0XHJcbiAqXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBhIG5ldyA0eDQgbWF0cml4XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlKCkge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoMTYpO1xuXG4gIGlmIChnbE1hdHJpeC5BUlJBWV9UWVBFICE9IEZsb2F0MzJBcnJheSkge1xuICAgIG91dFsxXSA9IDA7XG4gICAgb3V0WzJdID0gMDtcbiAgICBvdXRbM10gPSAwO1xuICAgIG91dFs0XSA9IDA7XG4gICAgb3V0WzZdID0gMDtcbiAgICBvdXRbN10gPSAwO1xuICAgIG91dFs4XSA9IDA7XG4gICAgb3V0WzldID0gMDtcbiAgICBvdXRbMTFdID0gMDtcbiAgICBvdXRbMTJdID0gMDtcbiAgICBvdXRbMTNdID0gMDtcbiAgICBvdXRbMTRdID0gMDtcbiAgfVxuXG4gIG91dFswXSA9IDE7XG4gIG91dFs1XSA9IDE7XG4gIG91dFsxMF0gPSAxO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IG1hdDQgaW5pdGlhbGl6ZWQgd2l0aCB2YWx1ZXMgZnJvbSBhbiBleGlzdGluZyBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBhIG1hdHJpeCB0byBjbG9uZVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gYSBuZXcgNHg0IG1hdHJpeFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNsb25lKGEpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDE2KTtcbiAgb3V0WzBdID0gYVswXTtcbiAgb3V0WzFdID0gYVsxXTtcbiAgb3V0WzJdID0gYVsyXTtcbiAgb3V0WzNdID0gYVszXTtcbiAgb3V0WzRdID0gYVs0XTtcbiAgb3V0WzVdID0gYVs1XTtcbiAgb3V0WzZdID0gYVs2XTtcbiAgb3V0WzddID0gYVs3XTtcbiAgb3V0WzhdID0gYVs4XTtcbiAgb3V0WzldID0gYVs5XTtcbiAgb3V0WzEwXSA9IGFbMTBdO1xuICBvdXRbMTFdID0gYVsxMV07XG4gIG91dFsxMl0gPSBhWzEyXTtcbiAgb3V0WzEzXSA9IGFbMTNdO1xuICBvdXRbMTRdID0gYVsxNF07XG4gIG91dFsxNV0gPSBhWzE1XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBvbmUgbWF0NCB0byBhbm90aGVyXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY29weShvdXQsIGEpIHtcbiAgb3V0WzBdID0gYVswXTtcbiAgb3V0WzFdID0gYVsxXTtcbiAgb3V0WzJdID0gYVsyXTtcbiAgb3V0WzNdID0gYVszXTtcbiAgb3V0WzRdID0gYVs0XTtcbiAgb3V0WzVdID0gYVs1XTtcbiAgb3V0WzZdID0gYVs2XTtcbiAgb3V0WzddID0gYVs3XTtcbiAgb3V0WzhdID0gYVs4XTtcbiAgb3V0WzldID0gYVs5XTtcbiAgb3V0WzEwXSA9IGFbMTBdO1xuICBvdXRbMTFdID0gYVsxMV07XG4gIG91dFsxMl0gPSBhWzEyXTtcbiAgb3V0WzEzXSA9IGFbMTNdO1xuICBvdXRbMTRdID0gYVsxNF07XG4gIG91dFsxNV0gPSBhWzE1XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGUgYSBuZXcgbWF0NCB3aXRoIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMCBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAwIHBvc2l0aW9uIChpbmRleCAwKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTAxIENvbXBvbmVudCBpbiBjb2x1bW4gMCwgcm93IDEgcG9zaXRpb24gKGluZGV4IDEpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMDIgQ29tcG9uZW50IGluIGNvbHVtbiAwLCByb3cgMiBwb3NpdGlvbiAoaW5kZXggMilcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMyBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAzIHBvc2l0aW9uIChpbmRleCAzKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTEwIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDAgcG9zaXRpb24gKGluZGV4IDQpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTEgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggNSlcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0xMiBDb21wb25lbnQgaW4gY29sdW1uIDEsIHJvdyAyIHBvc2l0aW9uIChpbmRleCA2KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTEzIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDMgcG9zaXRpb24gKGluZGV4IDcpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMjAgQ29tcG9uZW50IGluIGNvbHVtbiAyLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggOClcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0yMSBDb21wb25lbnQgaW4gY29sdW1uIDIsIHJvdyAxIHBvc2l0aW9uIChpbmRleCA5KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTIyIENvbXBvbmVudCBpbiBjb2x1bW4gMiwgcm93IDIgcG9zaXRpb24gKGluZGV4IDEwKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTIzIENvbXBvbmVudCBpbiBjb2x1bW4gMiwgcm93IDMgcG9zaXRpb24gKGluZGV4IDExKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTMwIENvbXBvbmVudCBpbiBjb2x1bW4gMywgcm93IDAgcG9zaXRpb24gKGluZGV4IDEyKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTMxIENvbXBvbmVudCBpbiBjb2x1bW4gMywgcm93IDEgcG9zaXRpb24gKGluZGV4IDEzKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTMyIENvbXBvbmVudCBpbiBjb2x1bW4gMywgcm93IDIgcG9zaXRpb24gKGluZGV4IDE0KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTMzIENvbXBvbmVudCBpbiBjb2x1bW4gMywgcm93IDMgcG9zaXRpb24gKGluZGV4IDE1KVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gQSBuZXcgbWF0NFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21WYWx1ZXMobTAwLCBtMDEsIG0wMiwgbTAzLCBtMTAsIG0xMSwgbTEyLCBtMTMsIG0yMCwgbTIxLCBtMjIsIG0yMywgbTMwLCBtMzEsIG0zMiwgbTMzKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSgxNik7XG4gIG91dFswXSA9IG0wMDtcbiAgb3V0WzFdID0gbTAxO1xuICBvdXRbMl0gPSBtMDI7XG4gIG91dFszXSA9IG0wMztcbiAgb3V0WzRdID0gbTEwO1xuICBvdXRbNV0gPSBtMTE7XG4gIG91dFs2XSA9IG0xMjtcbiAgb3V0WzddID0gbTEzO1xuICBvdXRbOF0gPSBtMjA7XG4gIG91dFs5XSA9IG0yMTtcbiAgb3V0WzEwXSA9IG0yMjtcbiAgb3V0WzExXSA9IG0yMztcbiAgb3V0WzEyXSA9IG0zMDtcbiAgb3V0WzEzXSA9IG0zMTtcbiAgb3V0WzE0XSA9IG0zMjtcbiAgb3V0WzE1XSA9IG0zMztcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSBtYXQ0IHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMCBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAwIHBvc2l0aW9uIChpbmRleCAwKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTAxIENvbXBvbmVudCBpbiBjb2x1bW4gMCwgcm93IDEgcG9zaXRpb24gKGluZGV4IDEpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMDIgQ29tcG9uZW50IGluIGNvbHVtbiAwLCByb3cgMiBwb3NpdGlvbiAoaW5kZXggMilcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0wMyBDb21wb25lbnQgaW4gY29sdW1uIDAsIHJvdyAzIHBvc2l0aW9uIChpbmRleCAzKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTEwIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDAgcG9zaXRpb24gKGluZGV4IDQpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMTEgQ29tcG9uZW50IGluIGNvbHVtbiAxLCByb3cgMSBwb3NpdGlvbiAoaW5kZXggNSlcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0xMiBDb21wb25lbnQgaW4gY29sdW1uIDEsIHJvdyAyIHBvc2l0aW9uIChpbmRleCA2KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTEzIENvbXBvbmVudCBpbiBjb2x1bW4gMSwgcm93IDMgcG9zaXRpb24gKGluZGV4IDcpXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBtMjAgQ29tcG9uZW50IGluIGNvbHVtbiAyLCByb3cgMCBwb3NpdGlvbiAoaW5kZXggOClcclxuICogQHBhcmFtIHtOdW1iZXJ9IG0yMSBDb21wb25lbnQgaW4gY29sdW1uIDIsIHJvdyAxIHBvc2l0aW9uIChpbmRleCA5KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTIyIENvbXBvbmVudCBpbiBjb2x1bW4gMiwgcm93IDIgcG9zaXRpb24gKGluZGV4IDEwKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTIzIENvbXBvbmVudCBpbiBjb2x1bW4gMiwgcm93IDMgcG9zaXRpb24gKGluZGV4IDExKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTMwIENvbXBvbmVudCBpbiBjb2x1bW4gMywgcm93IDAgcG9zaXRpb24gKGluZGV4IDEyKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTMxIENvbXBvbmVudCBpbiBjb2x1bW4gMywgcm93IDEgcG9zaXRpb24gKGluZGV4IDEzKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTMyIENvbXBvbmVudCBpbiBjb2x1bW4gMywgcm93IDIgcG9zaXRpb24gKGluZGV4IDE0KVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbTMzIENvbXBvbmVudCBpbiBjb2x1bW4gMywgcm93IDMgcG9zaXRpb24gKGluZGV4IDE1KVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0KG91dCwgbTAwLCBtMDEsIG0wMiwgbTAzLCBtMTAsIG0xMSwgbTEyLCBtMTMsIG0yMCwgbTIxLCBtMjIsIG0yMywgbTMwLCBtMzEsIG0zMiwgbTMzKSB7XG4gIG91dFswXSA9IG0wMDtcbiAgb3V0WzFdID0gbTAxO1xuICBvdXRbMl0gPSBtMDI7XG4gIG91dFszXSA9IG0wMztcbiAgb3V0WzRdID0gbTEwO1xuICBvdXRbNV0gPSBtMTE7XG4gIG91dFs2XSA9IG0xMjtcbiAgb3V0WzddID0gbTEzO1xuICBvdXRbOF0gPSBtMjA7XG4gIG91dFs5XSA9IG0yMTtcbiAgb3V0WzEwXSA9IG0yMjtcbiAgb3V0WzExXSA9IG0yMztcbiAgb3V0WzEyXSA9IG0zMDtcbiAgb3V0WzEzXSA9IG0zMTtcbiAgb3V0WzE0XSA9IG0zMjtcbiAgb3V0WzE1XSA9IG0zMztcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTZXQgYSBtYXQ0IHRvIHRoZSBpZGVudGl0eSBtYXRyaXhcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5KG91dCkge1xuICBvdXRbMF0gPSAxO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSAwO1xuICBvdXRbNV0gPSAxO1xuICBvdXRbNl0gPSAwO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSAwO1xuICBvdXRbOV0gPSAwO1xuICBvdXRbMTBdID0gMTtcbiAgb3V0WzExXSA9IDA7XG4gIG91dFsxMl0gPSAwO1xuICBvdXRbMTNdID0gMDtcbiAgb3V0WzE0XSA9IDA7XG4gIG91dFsxNV0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFRyYW5zcG9zZSB0aGUgdmFsdWVzIG9mIGEgbWF0NFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zcG9zZShvdXQsIGEpIHtcbiAgLy8gSWYgd2UgYXJlIHRyYW5zcG9zaW5nIG91cnNlbHZlcyB3ZSBjYW4gc2tpcCBhIGZldyBzdGVwcyBidXQgaGF2ZSB0byBjYWNoZSBzb21lIHZhbHVlc1xuICBpZiAob3V0ID09PSBhKSB7XG4gICAgdmFyIGEwMSA9IGFbMV0sXG4gICAgICAgIGEwMiA9IGFbMl0sXG4gICAgICAgIGEwMyA9IGFbM107XG4gICAgdmFyIGExMiA9IGFbNl0sXG4gICAgICAgIGExMyA9IGFbN107XG4gICAgdmFyIGEyMyA9IGFbMTFdO1xuICAgIG91dFsxXSA9IGFbNF07XG4gICAgb3V0WzJdID0gYVs4XTtcbiAgICBvdXRbM10gPSBhWzEyXTtcbiAgICBvdXRbNF0gPSBhMDE7XG4gICAgb3V0WzZdID0gYVs5XTtcbiAgICBvdXRbN10gPSBhWzEzXTtcbiAgICBvdXRbOF0gPSBhMDI7XG4gICAgb3V0WzldID0gYTEyO1xuICAgIG91dFsxMV0gPSBhWzE0XTtcbiAgICBvdXRbMTJdID0gYTAzO1xuICAgIG91dFsxM10gPSBhMTM7XG4gICAgb3V0WzE0XSA9IGEyMztcbiAgfSBlbHNlIHtcbiAgICBvdXRbMF0gPSBhWzBdO1xuICAgIG91dFsxXSA9IGFbNF07XG4gICAgb3V0WzJdID0gYVs4XTtcbiAgICBvdXRbM10gPSBhWzEyXTtcbiAgICBvdXRbNF0gPSBhWzFdO1xuICAgIG91dFs1XSA9IGFbNV07XG4gICAgb3V0WzZdID0gYVs5XTtcbiAgICBvdXRbN10gPSBhWzEzXTtcbiAgICBvdXRbOF0gPSBhWzJdO1xuICAgIG91dFs5XSA9IGFbNl07XG4gICAgb3V0WzEwXSA9IGFbMTBdO1xuICAgIG91dFsxMV0gPSBhWzE0XTtcbiAgICBvdXRbMTJdID0gYVszXTtcbiAgICBvdXRbMTNdID0gYVs3XTtcbiAgICBvdXRbMTRdID0gYVsxMV07XG4gICAgb3V0WzE1XSA9IGFbMTVdO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBJbnZlcnRzIGEgbWF0NFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGludmVydChvdXQsIGEpIHtcbiAgdmFyIGEwMCA9IGFbMF0sXG4gICAgICBhMDEgPSBhWzFdLFxuICAgICAgYTAyID0gYVsyXSxcbiAgICAgIGEwMyA9IGFbM107XG4gIHZhciBhMTAgPSBhWzRdLFxuICAgICAgYTExID0gYVs1XSxcbiAgICAgIGExMiA9IGFbNl0sXG4gICAgICBhMTMgPSBhWzddO1xuICB2YXIgYTIwID0gYVs4XSxcbiAgICAgIGEyMSA9IGFbOV0sXG4gICAgICBhMjIgPSBhWzEwXSxcbiAgICAgIGEyMyA9IGFbMTFdO1xuICB2YXIgYTMwID0gYVsxMl0sXG4gICAgICBhMzEgPSBhWzEzXSxcbiAgICAgIGEzMiA9IGFbMTRdLFxuICAgICAgYTMzID0gYVsxNV07XG4gIHZhciBiMDAgPSBhMDAgKiBhMTEgLSBhMDEgKiBhMTA7XG4gIHZhciBiMDEgPSBhMDAgKiBhMTIgLSBhMDIgKiBhMTA7XG4gIHZhciBiMDIgPSBhMDAgKiBhMTMgLSBhMDMgKiBhMTA7XG4gIHZhciBiMDMgPSBhMDEgKiBhMTIgLSBhMDIgKiBhMTE7XG4gIHZhciBiMDQgPSBhMDEgKiBhMTMgLSBhMDMgKiBhMTE7XG4gIHZhciBiMDUgPSBhMDIgKiBhMTMgLSBhMDMgKiBhMTI7XG4gIHZhciBiMDYgPSBhMjAgKiBhMzEgLSBhMjEgKiBhMzA7XG4gIHZhciBiMDcgPSBhMjAgKiBhMzIgLSBhMjIgKiBhMzA7XG4gIHZhciBiMDggPSBhMjAgKiBhMzMgLSBhMjMgKiBhMzA7XG4gIHZhciBiMDkgPSBhMjEgKiBhMzIgLSBhMjIgKiBhMzE7XG4gIHZhciBiMTAgPSBhMjEgKiBhMzMgLSBhMjMgKiBhMzE7XG4gIHZhciBiMTEgPSBhMjIgKiBhMzMgLSBhMjMgKiBhMzI7IC8vIENhbGN1bGF0ZSB0aGUgZGV0ZXJtaW5hbnRcblxuICB2YXIgZGV0ID0gYjAwICogYjExIC0gYjAxICogYjEwICsgYjAyICogYjA5ICsgYjAzICogYjA4IC0gYjA0ICogYjA3ICsgYjA1ICogYjA2O1xuXG4gIGlmICghZGV0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBkZXQgPSAxLjAgLyBkZXQ7XG4gIG91dFswXSA9IChhMTEgKiBiMTEgLSBhMTIgKiBiMTAgKyBhMTMgKiBiMDkpICogZGV0O1xuICBvdXRbMV0gPSAoYTAyICogYjEwIC0gYTAxICogYjExIC0gYTAzICogYjA5KSAqIGRldDtcbiAgb3V0WzJdID0gKGEzMSAqIGIwNSAtIGEzMiAqIGIwNCArIGEzMyAqIGIwMykgKiBkZXQ7XG4gIG91dFszXSA9IChhMjIgKiBiMDQgLSBhMjEgKiBiMDUgLSBhMjMgKiBiMDMpICogZGV0O1xuICBvdXRbNF0gPSAoYTEyICogYjA4IC0gYTEwICogYjExIC0gYTEzICogYjA3KSAqIGRldDtcbiAgb3V0WzVdID0gKGEwMCAqIGIxMSAtIGEwMiAqIGIwOCArIGEwMyAqIGIwNykgKiBkZXQ7XG4gIG91dFs2XSA9IChhMzIgKiBiMDIgLSBhMzAgKiBiMDUgLSBhMzMgKiBiMDEpICogZGV0O1xuICBvdXRbN10gPSAoYTIwICogYjA1IC0gYTIyICogYjAyICsgYTIzICogYjAxKSAqIGRldDtcbiAgb3V0WzhdID0gKGExMCAqIGIxMCAtIGExMSAqIGIwOCArIGExMyAqIGIwNikgKiBkZXQ7XG4gIG91dFs5XSA9IChhMDEgKiBiMDggLSBhMDAgKiBiMTAgLSBhMDMgKiBiMDYpICogZGV0O1xuICBvdXRbMTBdID0gKGEzMCAqIGIwNCAtIGEzMSAqIGIwMiArIGEzMyAqIGIwMCkgKiBkZXQ7XG4gIG91dFsxMV0gPSAoYTIxICogYjAyIC0gYTIwICogYjA0IC0gYTIzICogYjAwKSAqIGRldDtcbiAgb3V0WzEyXSA9IChhMTEgKiBiMDcgLSBhMTAgKiBiMDkgLSBhMTIgKiBiMDYpICogZGV0O1xuICBvdXRbMTNdID0gKGEwMCAqIGIwOSAtIGEwMSAqIGIwNyArIGEwMiAqIGIwNikgKiBkZXQ7XG4gIG91dFsxNF0gPSAoYTMxICogYjAxIC0gYTMwICogYjAzIC0gYTMyICogYjAwKSAqIGRldDtcbiAgb3V0WzE1XSA9IChhMjAgKiBiMDMgLSBhMjEgKiBiMDEgKyBhMjIgKiBiMDApICogZGV0O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGFkanVnYXRlIG9mIGEgbWF0NFxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIHNvdXJjZSBtYXRyaXhcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGFkam9pbnQob3V0LCBhKSB7XG4gIHZhciBhMDAgPSBhWzBdLFxuICAgICAgYTAxID0gYVsxXSxcbiAgICAgIGEwMiA9IGFbMl0sXG4gICAgICBhMDMgPSBhWzNdO1xuICB2YXIgYTEwID0gYVs0XSxcbiAgICAgIGExMSA9IGFbNV0sXG4gICAgICBhMTIgPSBhWzZdLFxuICAgICAgYTEzID0gYVs3XTtcbiAgdmFyIGEyMCA9IGFbOF0sXG4gICAgICBhMjEgPSBhWzldLFxuICAgICAgYTIyID0gYVsxMF0sXG4gICAgICBhMjMgPSBhWzExXTtcbiAgdmFyIGEzMCA9IGFbMTJdLFxuICAgICAgYTMxID0gYVsxM10sXG4gICAgICBhMzIgPSBhWzE0XSxcbiAgICAgIGEzMyA9IGFbMTVdO1xuICBvdXRbMF0gPSBhMTEgKiAoYTIyICogYTMzIC0gYTIzICogYTMyKSAtIGEyMSAqIChhMTIgKiBhMzMgLSBhMTMgKiBhMzIpICsgYTMxICogKGExMiAqIGEyMyAtIGExMyAqIGEyMik7XG4gIG91dFsxXSA9IC0oYTAxICogKGEyMiAqIGEzMyAtIGEyMyAqIGEzMikgLSBhMjEgKiAoYTAyICogYTMzIC0gYTAzICogYTMyKSArIGEzMSAqIChhMDIgKiBhMjMgLSBhMDMgKiBhMjIpKTtcbiAgb3V0WzJdID0gYTAxICogKGExMiAqIGEzMyAtIGExMyAqIGEzMikgLSBhMTEgKiAoYTAyICogYTMzIC0gYTAzICogYTMyKSArIGEzMSAqIChhMDIgKiBhMTMgLSBhMDMgKiBhMTIpO1xuICBvdXRbM10gPSAtKGEwMSAqIChhMTIgKiBhMjMgLSBhMTMgKiBhMjIpIC0gYTExICogKGEwMiAqIGEyMyAtIGEwMyAqIGEyMikgKyBhMjEgKiAoYTAyICogYTEzIC0gYTAzICogYTEyKSk7XG4gIG91dFs0XSA9IC0oYTEwICogKGEyMiAqIGEzMyAtIGEyMyAqIGEzMikgLSBhMjAgKiAoYTEyICogYTMzIC0gYTEzICogYTMyKSArIGEzMCAqIChhMTIgKiBhMjMgLSBhMTMgKiBhMjIpKTtcbiAgb3V0WzVdID0gYTAwICogKGEyMiAqIGEzMyAtIGEyMyAqIGEzMikgLSBhMjAgKiAoYTAyICogYTMzIC0gYTAzICogYTMyKSArIGEzMCAqIChhMDIgKiBhMjMgLSBhMDMgKiBhMjIpO1xuICBvdXRbNl0gPSAtKGEwMCAqIChhMTIgKiBhMzMgLSBhMTMgKiBhMzIpIC0gYTEwICogKGEwMiAqIGEzMyAtIGEwMyAqIGEzMikgKyBhMzAgKiAoYTAyICogYTEzIC0gYTAzICogYTEyKSk7XG4gIG91dFs3XSA9IGEwMCAqIChhMTIgKiBhMjMgLSBhMTMgKiBhMjIpIC0gYTEwICogKGEwMiAqIGEyMyAtIGEwMyAqIGEyMikgKyBhMjAgKiAoYTAyICogYTEzIC0gYTAzICogYTEyKTtcbiAgb3V0WzhdID0gYTEwICogKGEyMSAqIGEzMyAtIGEyMyAqIGEzMSkgLSBhMjAgKiAoYTExICogYTMzIC0gYTEzICogYTMxKSArIGEzMCAqIChhMTEgKiBhMjMgLSBhMTMgKiBhMjEpO1xuICBvdXRbOV0gPSAtKGEwMCAqIChhMjEgKiBhMzMgLSBhMjMgKiBhMzEpIC0gYTIwICogKGEwMSAqIGEzMyAtIGEwMyAqIGEzMSkgKyBhMzAgKiAoYTAxICogYTIzIC0gYTAzICogYTIxKSk7XG4gIG91dFsxMF0gPSBhMDAgKiAoYTExICogYTMzIC0gYTEzICogYTMxKSAtIGExMCAqIChhMDEgKiBhMzMgLSBhMDMgKiBhMzEpICsgYTMwICogKGEwMSAqIGExMyAtIGEwMyAqIGExMSk7XG4gIG91dFsxMV0gPSAtKGEwMCAqIChhMTEgKiBhMjMgLSBhMTMgKiBhMjEpIC0gYTEwICogKGEwMSAqIGEyMyAtIGEwMyAqIGEyMSkgKyBhMjAgKiAoYTAxICogYTEzIC0gYTAzICogYTExKSk7XG4gIG91dFsxMl0gPSAtKGExMCAqIChhMjEgKiBhMzIgLSBhMjIgKiBhMzEpIC0gYTIwICogKGExMSAqIGEzMiAtIGExMiAqIGEzMSkgKyBhMzAgKiAoYTExICogYTIyIC0gYTEyICogYTIxKSk7XG4gIG91dFsxM10gPSBhMDAgKiAoYTIxICogYTMyIC0gYTIyICogYTMxKSAtIGEyMCAqIChhMDEgKiBhMzIgLSBhMDIgKiBhMzEpICsgYTMwICogKGEwMSAqIGEyMiAtIGEwMiAqIGEyMSk7XG4gIG91dFsxNF0gPSAtKGEwMCAqIChhMTEgKiBhMzIgLSBhMTIgKiBhMzEpIC0gYTEwICogKGEwMSAqIGEzMiAtIGEwMiAqIGEzMSkgKyBhMzAgKiAoYTAxICogYTEyIC0gYTAyICogYTExKSk7XG4gIG91dFsxNV0gPSBhMDAgKiAoYTExICogYTIyIC0gYTEyICogYTIxKSAtIGExMCAqIChhMDEgKiBhMjIgLSBhMDIgKiBhMjEpICsgYTIwICogKGEwMSAqIGExMiAtIGEwMiAqIGExMSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZGV0ZXJtaW5hbnQgb2YgYSBtYXQ0XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgc291cmNlIG1hdHJpeFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkZXRlcm1pbmFudCBvZiBhXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZGV0ZXJtaW5hbnQoYSkge1xuICB2YXIgYTAwID0gYVswXSxcbiAgICAgIGEwMSA9IGFbMV0sXG4gICAgICBhMDIgPSBhWzJdLFxuICAgICAgYTAzID0gYVszXTtcbiAgdmFyIGExMCA9IGFbNF0sXG4gICAgICBhMTEgPSBhWzVdLFxuICAgICAgYTEyID0gYVs2XSxcbiAgICAgIGExMyA9IGFbN107XG4gIHZhciBhMjAgPSBhWzhdLFxuICAgICAgYTIxID0gYVs5XSxcbiAgICAgIGEyMiA9IGFbMTBdLFxuICAgICAgYTIzID0gYVsxMV07XG4gIHZhciBhMzAgPSBhWzEyXSxcbiAgICAgIGEzMSA9IGFbMTNdLFxuICAgICAgYTMyID0gYVsxNF0sXG4gICAgICBhMzMgPSBhWzE1XTtcbiAgdmFyIGIwMCA9IGEwMCAqIGExMSAtIGEwMSAqIGExMDtcbiAgdmFyIGIwMSA9IGEwMCAqIGExMiAtIGEwMiAqIGExMDtcbiAgdmFyIGIwMiA9IGEwMCAqIGExMyAtIGEwMyAqIGExMDtcbiAgdmFyIGIwMyA9IGEwMSAqIGExMiAtIGEwMiAqIGExMTtcbiAgdmFyIGIwNCA9IGEwMSAqIGExMyAtIGEwMyAqIGExMTtcbiAgdmFyIGIwNSA9IGEwMiAqIGExMyAtIGEwMyAqIGExMjtcbiAgdmFyIGIwNiA9IGEyMCAqIGEzMSAtIGEyMSAqIGEzMDtcbiAgdmFyIGIwNyA9IGEyMCAqIGEzMiAtIGEyMiAqIGEzMDtcbiAgdmFyIGIwOCA9IGEyMCAqIGEzMyAtIGEyMyAqIGEzMDtcbiAgdmFyIGIwOSA9IGEyMSAqIGEzMiAtIGEyMiAqIGEzMTtcbiAgdmFyIGIxMCA9IGEyMSAqIGEzMyAtIGEyMyAqIGEzMTtcbiAgdmFyIGIxMSA9IGEyMiAqIGEzMyAtIGEyMyAqIGEzMjsgLy8gQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudFxuXG4gIHJldHVybiBiMDAgKiBiMTEgLSBiMDEgKiBiMTAgKyBiMDIgKiBiMDkgKyBiMDMgKiBiMDggLSBiMDQgKiBiMDcgKyBiMDUgKiBiMDY7XG59XG4vKipcclxuICogTXVsdGlwbGllcyB0d28gbWF0NHNcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0NH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5KG91dCwgYSwgYikge1xuICB2YXIgYTAwID0gYVswXSxcbiAgICAgIGEwMSA9IGFbMV0sXG4gICAgICBhMDIgPSBhWzJdLFxuICAgICAgYTAzID0gYVszXTtcbiAgdmFyIGExMCA9IGFbNF0sXG4gICAgICBhMTEgPSBhWzVdLFxuICAgICAgYTEyID0gYVs2XSxcbiAgICAgIGExMyA9IGFbN107XG4gIHZhciBhMjAgPSBhWzhdLFxuICAgICAgYTIxID0gYVs5XSxcbiAgICAgIGEyMiA9IGFbMTBdLFxuICAgICAgYTIzID0gYVsxMV07XG4gIHZhciBhMzAgPSBhWzEyXSxcbiAgICAgIGEzMSA9IGFbMTNdLFxuICAgICAgYTMyID0gYVsxNF0sXG4gICAgICBhMzMgPSBhWzE1XTsgLy8gQ2FjaGUgb25seSB0aGUgY3VycmVudCBsaW5lIG9mIHRoZSBzZWNvbmQgbWF0cml4XG5cbiAgdmFyIGIwID0gYlswXSxcbiAgICAgIGIxID0gYlsxXSxcbiAgICAgIGIyID0gYlsyXSxcbiAgICAgIGIzID0gYlszXTtcbiAgb3V0WzBdID0gYjAgKiBhMDAgKyBiMSAqIGExMCArIGIyICogYTIwICsgYjMgKiBhMzA7XG4gIG91dFsxXSA9IGIwICogYTAxICsgYjEgKiBhMTEgKyBiMiAqIGEyMSArIGIzICogYTMxO1xuICBvdXRbMl0gPSBiMCAqIGEwMiArIGIxICogYTEyICsgYjIgKiBhMjIgKyBiMyAqIGEzMjtcbiAgb3V0WzNdID0gYjAgKiBhMDMgKyBiMSAqIGExMyArIGIyICogYTIzICsgYjMgKiBhMzM7XG4gIGIwID0gYls0XTtcbiAgYjEgPSBiWzVdO1xuICBiMiA9IGJbNl07XG4gIGIzID0gYls3XTtcbiAgb3V0WzRdID0gYjAgKiBhMDAgKyBiMSAqIGExMCArIGIyICogYTIwICsgYjMgKiBhMzA7XG4gIG91dFs1XSA9IGIwICogYTAxICsgYjEgKiBhMTEgKyBiMiAqIGEyMSArIGIzICogYTMxO1xuICBvdXRbNl0gPSBiMCAqIGEwMiArIGIxICogYTEyICsgYjIgKiBhMjIgKyBiMyAqIGEzMjtcbiAgb3V0WzddID0gYjAgKiBhMDMgKyBiMSAqIGExMyArIGIyICogYTIzICsgYjMgKiBhMzM7XG4gIGIwID0gYls4XTtcbiAgYjEgPSBiWzldO1xuICBiMiA9IGJbMTBdO1xuICBiMyA9IGJbMTFdO1xuICBvdXRbOF0gPSBiMCAqIGEwMCArIGIxICogYTEwICsgYjIgKiBhMjAgKyBiMyAqIGEzMDtcbiAgb3V0WzldID0gYjAgKiBhMDEgKyBiMSAqIGExMSArIGIyICogYTIxICsgYjMgKiBhMzE7XG4gIG91dFsxMF0gPSBiMCAqIGEwMiArIGIxICogYTEyICsgYjIgKiBhMjIgKyBiMyAqIGEzMjtcbiAgb3V0WzExXSA9IGIwICogYTAzICsgYjEgKiBhMTMgKyBiMiAqIGEyMyArIGIzICogYTMzO1xuICBiMCA9IGJbMTJdO1xuICBiMSA9IGJbMTNdO1xuICBiMiA9IGJbMTRdO1xuICBiMyA9IGJbMTVdO1xuICBvdXRbMTJdID0gYjAgKiBhMDAgKyBiMSAqIGExMCArIGIyICogYTIwICsgYjMgKiBhMzA7XG4gIG91dFsxM10gPSBiMCAqIGEwMSArIGIxICogYTExICsgYjIgKiBhMjEgKyBiMyAqIGEzMTtcbiAgb3V0WzE0XSA9IGIwICogYTAyICsgYjEgKiBhMTIgKyBiMiAqIGEyMiArIGIzICogYTMyO1xuICBvdXRbMTVdID0gYjAgKiBhMDMgKyBiMSAqIGExMyArIGIyICogYTIzICsgYjMgKiBhMzM7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogVHJhbnNsYXRlIGEgbWF0NCBieSB0aGUgZ2l2ZW4gdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHRyYW5zbGF0ZVxyXG4gKiBAcGFyYW0ge3ZlYzN9IHYgdmVjdG9yIHRvIHRyYW5zbGF0ZSBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNsYXRlKG91dCwgYSwgdikge1xuICB2YXIgeCA9IHZbMF0sXG4gICAgICB5ID0gdlsxXSxcbiAgICAgIHogPSB2WzJdO1xuICB2YXIgYTAwLCBhMDEsIGEwMiwgYTAzO1xuICB2YXIgYTEwLCBhMTEsIGExMiwgYTEzO1xuICB2YXIgYTIwLCBhMjEsIGEyMiwgYTIzO1xuXG4gIGlmIChhID09PSBvdXQpIHtcbiAgICBvdXRbMTJdID0gYVswXSAqIHggKyBhWzRdICogeSArIGFbOF0gKiB6ICsgYVsxMl07XG4gICAgb3V0WzEzXSA9IGFbMV0gKiB4ICsgYVs1XSAqIHkgKyBhWzldICogeiArIGFbMTNdO1xuICAgIG91dFsxNF0gPSBhWzJdICogeCArIGFbNl0gKiB5ICsgYVsxMF0gKiB6ICsgYVsxNF07XG4gICAgb3V0WzE1XSA9IGFbM10gKiB4ICsgYVs3XSAqIHkgKyBhWzExXSAqIHogKyBhWzE1XTtcbiAgfSBlbHNlIHtcbiAgICBhMDAgPSBhWzBdO1xuICAgIGEwMSA9IGFbMV07XG4gICAgYTAyID0gYVsyXTtcbiAgICBhMDMgPSBhWzNdO1xuICAgIGExMCA9IGFbNF07XG4gICAgYTExID0gYVs1XTtcbiAgICBhMTIgPSBhWzZdO1xuICAgIGExMyA9IGFbN107XG4gICAgYTIwID0gYVs4XTtcbiAgICBhMjEgPSBhWzldO1xuICAgIGEyMiA9IGFbMTBdO1xuICAgIGEyMyA9IGFbMTFdO1xuICAgIG91dFswXSA9IGEwMDtcbiAgICBvdXRbMV0gPSBhMDE7XG4gICAgb3V0WzJdID0gYTAyO1xuICAgIG91dFszXSA9IGEwMztcbiAgICBvdXRbNF0gPSBhMTA7XG4gICAgb3V0WzVdID0gYTExO1xuICAgIG91dFs2XSA9IGExMjtcbiAgICBvdXRbN10gPSBhMTM7XG4gICAgb3V0WzhdID0gYTIwO1xuICAgIG91dFs5XSA9IGEyMTtcbiAgICBvdXRbMTBdID0gYTIyO1xuICAgIG91dFsxMV0gPSBhMjM7XG4gICAgb3V0WzEyXSA9IGEwMCAqIHggKyBhMTAgKiB5ICsgYTIwICogeiArIGFbMTJdO1xuICAgIG91dFsxM10gPSBhMDEgKiB4ICsgYTExICogeSArIGEyMSAqIHogKyBhWzEzXTtcbiAgICBvdXRbMTRdID0gYTAyICogeCArIGExMiAqIHkgKyBhMjIgKiB6ICsgYVsxNF07XG4gICAgb3V0WzE1XSA9IGEwMyAqIHggKyBhMTMgKiB5ICsgYTIzICogeiArIGFbMTVdO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTY2FsZXMgdGhlIG1hdDQgYnkgdGhlIGRpbWVuc2lvbnMgaW4gdGhlIGdpdmVuIHZlYzMgbm90IHVzaW5nIHZlY3Rvcml6YXRpb25cclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBtYXRyaXggdG8gc2NhbGVcclxuICogQHBhcmFtIHt2ZWMzfSB2IHRoZSB2ZWMzIHRvIHNjYWxlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKiovXG5cbmV4cG9ydCBmdW5jdGlvbiBzY2FsZShvdXQsIGEsIHYpIHtcbiAgdmFyIHggPSB2WzBdLFxuICAgICAgeSA9IHZbMV0sXG4gICAgICB6ID0gdlsyXTtcbiAgb3V0WzBdID0gYVswXSAqIHg7XG4gIG91dFsxXSA9IGFbMV0gKiB4O1xuICBvdXRbMl0gPSBhWzJdICogeDtcbiAgb3V0WzNdID0gYVszXSAqIHg7XG4gIG91dFs0XSA9IGFbNF0gKiB5O1xuICBvdXRbNV0gPSBhWzVdICogeTtcbiAgb3V0WzZdID0gYVs2XSAqIHk7XG4gIG91dFs3XSA9IGFbN10gKiB5O1xuICBvdXRbOF0gPSBhWzhdICogejtcbiAgb3V0WzldID0gYVs5XSAqIHo7XG4gIG91dFsxMF0gPSBhWzEwXSAqIHo7XG4gIG91dFsxMV0gPSBhWzExXSAqIHo7XG4gIG91dFsxMl0gPSBhWzEyXTtcbiAgb3V0WzEzXSA9IGFbMTNdO1xuICBvdXRbMTRdID0gYVsxNF07XG4gIG91dFsxNV0gPSBhWzE1XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGVzIGEgbWF0NCBieSB0aGUgZ2l2ZW4gYW5nbGUgYXJvdW5kIHRoZSBnaXZlbiBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcGFyYW0ge3ZlYzN9IGF4aXMgdGhlIGF4aXMgdG8gcm90YXRlIGFyb3VuZFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlKG91dCwgYSwgcmFkLCBheGlzKSB7XG4gIHZhciB4ID0gYXhpc1swXSxcbiAgICAgIHkgPSBheGlzWzFdLFxuICAgICAgeiA9IGF4aXNbMl07XG4gIHZhciBsZW4gPSBNYXRoLmh5cG90KHgsIHksIHopO1xuICB2YXIgcywgYywgdDtcbiAgdmFyIGEwMCwgYTAxLCBhMDIsIGEwMztcbiAgdmFyIGExMCwgYTExLCBhMTIsIGExMztcbiAgdmFyIGEyMCwgYTIxLCBhMjIsIGEyMztcbiAgdmFyIGIwMCwgYjAxLCBiMDI7XG4gIHZhciBiMTAsIGIxMSwgYjEyO1xuICB2YXIgYjIwLCBiMjEsIGIyMjtcblxuICBpZiAobGVuIDwgZ2xNYXRyaXguRVBTSUxPTikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbGVuID0gMSAvIGxlbjtcbiAgeCAqPSBsZW47XG4gIHkgKj0gbGVuO1xuICB6ICo9IGxlbjtcbiAgcyA9IE1hdGguc2luKHJhZCk7XG4gIGMgPSBNYXRoLmNvcyhyYWQpO1xuICB0ID0gMSAtIGM7XG4gIGEwMCA9IGFbMF07XG4gIGEwMSA9IGFbMV07XG4gIGEwMiA9IGFbMl07XG4gIGEwMyA9IGFbM107XG4gIGExMCA9IGFbNF07XG4gIGExMSA9IGFbNV07XG4gIGExMiA9IGFbNl07XG4gIGExMyA9IGFbN107XG4gIGEyMCA9IGFbOF07XG4gIGEyMSA9IGFbOV07XG4gIGEyMiA9IGFbMTBdO1xuICBhMjMgPSBhWzExXTsgLy8gQ29uc3RydWN0IHRoZSBlbGVtZW50cyBvZiB0aGUgcm90YXRpb24gbWF0cml4XG5cbiAgYjAwID0geCAqIHggKiB0ICsgYztcbiAgYjAxID0geSAqIHggKiB0ICsgeiAqIHM7XG4gIGIwMiA9IHogKiB4ICogdCAtIHkgKiBzO1xuICBiMTAgPSB4ICogeSAqIHQgLSB6ICogcztcbiAgYjExID0geSAqIHkgKiB0ICsgYztcbiAgYjEyID0geiAqIHkgKiB0ICsgeCAqIHM7XG4gIGIyMCA9IHggKiB6ICogdCArIHkgKiBzO1xuICBiMjEgPSB5ICogeiAqIHQgLSB4ICogcztcbiAgYjIyID0geiAqIHogKiB0ICsgYzsgLy8gUGVyZm9ybSByb3RhdGlvbi1zcGVjaWZpYyBtYXRyaXggbXVsdGlwbGljYXRpb25cblxuICBvdXRbMF0gPSBhMDAgKiBiMDAgKyBhMTAgKiBiMDEgKyBhMjAgKiBiMDI7XG4gIG91dFsxXSA9IGEwMSAqIGIwMCArIGExMSAqIGIwMSArIGEyMSAqIGIwMjtcbiAgb3V0WzJdID0gYTAyICogYjAwICsgYTEyICogYjAxICsgYTIyICogYjAyO1xuICBvdXRbM10gPSBhMDMgKiBiMDAgKyBhMTMgKiBiMDEgKyBhMjMgKiBiMDI7XG4gIG91dFs0XSA9IGEwMCAqIGIxMCArIGExMCAqIGIxMSArIGEyMCAqIGIxMjtcbiAgb3V0WzVdID0gYTAxICogYjEwICsgYTExICogYjExICsgYTIxICogYjEyO1xuICBvdXRbNl0gPSBhMDIgKiBiMTAgKyBhMTIgKiBiMTEgKyBhMjIgKiBiMTI7XG4gIG91dFs3XSA9IGEwMyAqIGIxMCArIGExMyAqIGIxMSArIGEyMyAqIGIxMjtcbiAgb3V0WzhdID0gYTAwICogYjIwICsgYTEwICogYjIxICsgYTIwICogYjIyO1xuICBvdXRbOV0gPSBhMDEgKiBiMjAgKyBhMTEgKiBiMjEgKyBhMjEgKiBiMjI7XG4gIG91dFsxMF0gPSBhMDIgKiBiMjAgKyBhMTIgKiBiMjEgKyBhMjIgKiBiMjI7XG4gIG91dFsxMV0gPSBhMDMgKiBiMjAgKyBhMTMgKiBiMjEgKyBhMjMgKiBiMjI7XG5cbiAgaWYgKGEgIT09IG91dCkge1xuICAgIC8vIElmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRpZmZlciwgY29weSB0aGUgdW5jaGFuZ2VkIGxhc3Qgcm93XG4gICAgb3V0WzEyXSA9IGFbMTJdO1xuICAgIG91dFsxM10gPSBhWzEzXTtcbiAgICBvdXRbMTRdID0gYVsxNF07XG4gICAgb3V0WzE1XSA9IGFbMTVdO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGVzIGEgbWF0cml4IGJ5IHRoZSBnaXZlbiBhbmdsZSBhcm91bmQgdGhlIFggYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIG1hdHJpeFxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIG1hdHJpeCB0byByb3RhdGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZVgob3V0LCBhLCByYWQpIHtcbiAgdmFyIHMgPSBNYXRoLnNpbihyYWQpO1xuICB2YXIgYyA9IE1hdGguY29zKHJhZCk7XG4gIHZhciBhMTAgPSBhWzRdO1xuICB2YXIgYTExID0gYVs1XTtcbiAgdmFyIGExMiA9IGFbNl07XG4gIHZhciBhMTMgPSBhWzddO1xuICB2YXIgYTIwID0gYVs4XTtcbiAgdmFyIGEyMSA9IGFbOV07XG4gIHZhciBhMjIgPSBhWzEwXTtcbiAgdmFyIGEyMyA9IGFbMTFdO1xuXG4gIGlmIChhICE9PSBvdXQpIHtcbiAgICAvLyBJZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkaWZmZXIsIGNvcHkgdGhlIHVuY2hhbmdlZCByb3dzXG4gICAgb3V0WzBdID0gYVswXTtcbiAgICBvdXRbMV0gPSBhWzFdO1xuICAgIG91dFsyXSA9IGFbMl07XG4gICAgb3V0WzNdID0gYVszXTtcbiAgICBvdXRbMTJdID0gYVsxMl07XG4gICAgb3V0WzEzXSA9IGFbMTNdO1xuICAgIG91dFsxNF0gPSBhWzE0XTtcbiAgICBvdXRbMTVdID0gYVsxNV07XG4gIH0gLy8gUGVyZm9ybSBheGlzLXNwZWNpZmljIG1hdHJpeCBtdWx0aXBsaWNhdGlvblxuXG5cbiAgb3V0WzRdID0gYTEwICogYyArIGEyMCAqIHM7XG4gIG91dFs1XSA9IGExMSAqIGMgKyBhMjEgKiBzO1xuICBvdXRbNl0gPSBhMTIgKiBjICsgYTIyICogcztcbiAgb3V0WzddID0gYTEzICogYyArIGEyMyAqIHM7XG4gIG91dFs4XSA9IGEyMCAqIGMgLSBhMTAgKiBzO1xuICBvdXRbOV0gPSBhMjEgKiBjIC0gYTExICogcztcbiAgb3V0WzEwXSA9IGEyMiAqIGMgLSBhMTIgKiBzO1xuICBvdXRbMTFdID0gYTIzICogYyAtIGExMyAqIHM7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlcyBhIG1hdHJpeCBieSB0aGUgZ2l2ZW4gYW5nbGUgYXJvdW5kIHRoZSBZIGF4aXNcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBtYXRyaXggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGVZKG91dCwgYSwgcmFkKSB7XG4gIHZhciBzID0gTWF0aC5zaW4ocmFkKTtcbiAgdmFyIGMgPSBNYXRoLmNvcyhyYWQpO1xuICB2YXIgYTAwID0gYVswXTtcbiAgdmFyIGEwMSA9IGFbMV07XG4gIHZhciBhMDIgPSBhWzJdO1xuICB2YXIgYTAzID0gYVszXTtcbiAgdmFyIGEyMCA9IGFbOF07XG4gIHZhciBhMjEgPSBhWzldO1xuICB2YXIgYTIyID0gYVsxMF07XG4gIHZhciBhMjMgPSBhWzExXTtcblxuICBpZiAoYSAhPT0gb3V0KSB7XG4gICAgLy8gSWYgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZGlmZmVyLCBjb3B5IHRoZSB1bmNoYW5nZWQgcm93c1xuICAgIG91dFs0XSA9IGFbNF07XG4gICAgb3V0WzVdID0gYVs1XTtcbiAgICBvdXRbNl0gPSBhWzZdO1xuICAgIG91dFs3XSA9IGFbN107XG4gICAgb3V0WzEyXSA9IGFbMTJdO1xuICAgIG91dFsxM10gPSBhWzEzXTtcbiAgICBvdXRbMTRdID0gYVsxNF07XG4gICAgb3V0WzE1XSA9IGFbMTVdO1xuICB9IC8vIFBlcmZvcm0gYXhpcy1zcGVjaWZpYyBtYXRyaXggbXVsdGlwbGljYXRpb25cblxuXG4gIG91dFswXSA9IGEwMCAqIGMgLSBhMjAgKiBzO1xuICBvdXRbMV0gPSBhMDEgKiBjIC0gYTIxICogcztcbiAgb3V0WzJdID0gYTAyICogYyAtIGEyMiAqIHM7XG4gIG91dFszXSA9IGEwMyAqIGMgLSBhMjMgKiBzO1xuICBvdXRbOF0gPSBhMDAgKiBzICsgYTIwICogYztcbiAgb3V0WzldID0gYTAxICogcyArIGEyMSAqIGM7XG4gIG91dFsxMF0gPSBhMDIgKiBzICsgYTIyICogYztcbiAgb3V0WzExXSA9IGEwMyAqIHMgKyBhMjMgKiBjO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBtYXRyaXggYnkgdGhlIGdpdmVuIGFuZ2xlIGFyb3VuZCB0aGUgWiBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IHRoZSByZWNlaXZpbmcgbWF0cml4XHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlWihvdXQsIGEsIHJhZCkge1xuICB2YXIgcyA9IE1hdGguc2luKHJhZCk7XG4gIHZhciBjID0gTWF0aC5jb3MocmFkKTtcbiAgdmFyIGEwMCA9IGFbMF07XG4gIHZhciBhMDEgPSBhWzFdO1xuICB2YXIgYTAyID0gYVsyXTtcbiAgdmFyIGEwMyA9IGFbM107XG4gIHZhciBhMTAgPSBhWzRdO1xuICB2YXIgYTExID0gYVs1XTtcbiAgdmFyIGExMiA9IGFbNl07XG4gIHZhciBhMTMgPSBhWzddO1xuXG4gIGlmIChhICE9PSBvdXQpIHtcbiAgICAvLyBJZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkaWZmZXIsIGNvcHkgdGhlIHVuY2hhbmdlZCBsYXN0IHJvd1xuICAgIG91dFs4XSA9IGFbOF07XG4gICAgb3V0WzldID0gYVs5XTtcbiAgICBvdXRbMTBdID0gYVsxMF07XG4gICAgb3V0WzExXSA9IGFbMTFdO1xuICAgIG91dFsxMl0gPSBhWzEyXTtcbiAgICBvdXRbMTNdID0gYVsxM107XG4gICAgb3V0WzE0XSA9IGFbMTRdO1xuICAgIG91dFsxNV0gPSBhWzE1XTtcbiAgfSAvLyBQZXJmb3JtIGF4aXMtc3BlY2lmaWMgbWF0cml4IG11bHRpcGxpY2F0aW9uXG5cblxuICBvdXRbMF0gPSBhMDAgKiBjICsgYTEwICogcztcbiAgb3V0WzFdID0gYTAxICogYyArIGExMSAqIHM7XG4gIG91dFsyXSA9IGEwMiAqIGMgKyBhMTIgKiBzO1xuICBvdXRbM10gPSBhMDMgKiBjICsgYTEzICogcztcbiAgb3V0WzRdID0gYTEwICogYyAtIGEwMCAqIHM7XG4gIG91dFs1XSA9IGExMSAqIGMgLSBhMDEgKiBzO1xuICBvdXRbNl0gPSBhMTIgKiBjIC0gYTAyICogcztcbiAgb3V0WzddID0gYTEzICogYyAtIGEwMyAqIHM7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIGEgdmVjdG9yIHRyYW5zbGF0aW9uXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0NC5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDQudHJhbnNsYXRlKGRlc3QsIGRlc3QsIHZlYyk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHt2ZWMzfSB2IFRyYW5zbGF0aW9uIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVRyYW5zbGF0aW9uKG91dCwgdikge1xuICBvdXRbMF0gPSAxO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSAwO1xuICBvdXRbNV0gPSAxO1xuICBvdXRbNl0gPSAwO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSAwO1xuICBvdXRbOV0gPSAwO1xuICBvdXRbMTBdID0gMTtcbiAgb3V0WzExXSA9IDA7XG4gIG91dFsxMl0gPSB2WzBdO1xuICBvdXRbMTNdID0gdlsxXTtcbiAgb3V0WzE0XSA9IHZbMl07XG4gIG91dFsxNV0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtYXRyaXggZnJvbSBhIHZlY3RvciBzY2FsaW5nXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0NC5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDQuc2NhbGUoZGVzdCwgZGVzdCwgdmVjKTtcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3ZlYzN9IHYgU2NhbGluZyB2ZWN0b3JcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21TY2FsaW5nKG91dCwgdikge1xuICBvdXRbMF0gPSB2WzBdO1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSAwO1xuICBvdXRbNV0gPSB2WzFdO1xuICBvdXRbNl0gPSAwO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSAwO1xuICBvdXRbOV0gPSAwO1xuICBvdXRbMTBdID0gdlsyXTtcbiAgb3V0WzExXSA9IDA7XG4gIG91dFsxMl0gPSAwO1xuICBvdXRbMTNdID0gMDtcbiAgb3V0WzE0XSA9IDA7XG4gIG91dFsxNV0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtYXRyaXggZnJvbSBhIGdpdmVuIGFuZ2xlIGFyb3VuZCBhIGdpdmVuIGF4aXNcclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQ0LmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0NC5yb3RhdGUoZGVzdCwgZGVzdCwgcmFkLCBheGlzKTtcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcGFyYW0ge3ZlYzN9IGF4aXMgdGhlIGF4aXMgdG8gcm90YXRlIGFyb3VuZFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVJvdGF0aW9uKG91dCwgcmFkLCBheGlzKSB7XG4gIHZhciB4ID0gYXhpc1swXSxcbiAgICAgIHkgPSBheGlzWzFdLFxuICAgICAgeiA9IGF4aXNbMl07XG4gIHZhciBsZW4gPSBNYXRoLmh5cG90KHgsIHksIHopO1xuICB2YXIgcywgYywgdDtcblxuICBpZiAobGVuIDwgZ2xNYXRyaXguRVBTSUxPTikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbGVuID0gMSAvIGxlbjtcbiAgeCAqPSBsZW47XG4gIHkgKj0gbGVuO1xuICB6ICo9IGxlbjtcbiAgcyA9IE1hdGguc2luKHJhZCk7XG4gIGMgPSBNYXRoLmNvcyhyYWQpO1xuICB0ID0gMSAtIGM7IC8vIFBlcmZvcm0gcm90YXRpb24tc3BlY2lmaWMgbWF0cml4IG11bHRpcGxpY2F0aW9uXG5cbiAgb3V0WzBdID0geCAqIHggKiB0ICsgYztcbiAgb3V0WzFdID0geSAqIHggKiB0ICsgeiAqIHM7XG4gIG91dFsyXSA9IHogKiB4ICogdCAtIHkgKiBzO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSB4ICogeSAqIHQgLSB6ICogcztcbiAgb3V0WzVdID0geSAqIHkgKiB0ICsgYztcbiAgb3V0WzZdID0geiAqIHkgKiB0ICsgeCAqIHM7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9IHggKiB6ICogdCArIHkgKiBzO1xuICBvdXRbOV0gPSB5ICogeiAqIHQgLSB4ICogcztcbiAgb3V0WzEwXSA9IHogKiB6ICogdCArIGM7XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gMDtcbiAgb3V0WzEzXSA9IDA7XG4gIG91dFsxNF0gPSAwO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gdGhlIGdpdmVuIGFuZ2xlIGFyb3VuZCB0aGUgWCBheGlzXHJcbiAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byAoYnV0IG11Y2ggZmFzdGVyIHRoYW4pOlxyXG4gKlxyXG4gKiAgICAgbWF0NC5pZGVudGl0eShkZXN0KTtcclxuICogICAgIG1hdDQucm90YXRlWChkZXN0LCBkZXN0LCByYWQpO1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIHRvIHJvdGF0ZSB0aGUgbWF0cml4IGJ5XHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tWFJvdGF0aW9uKG91dCwgcmFkKSB7XG4gIHZhciBzID0gTWF0aC5zaW4ocmFkKTtcbiAgdmFyIGMgPSBNYXRoLmNvcyhyYWQpOyAvLyBQZXJmb3JtIGF4aXMtc3BlY2lmaWMgbWF0cml4IG11bHRpcGxpY2F0aW9uXG5cbiAgb3V0WzBdID0gMTtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gMDtcbiAgb3V0WzVdID0gYztcbiAgb3V0WzZdID0gcztcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gMDtcbiAgb3V0WzldID0gLXM7XG4gIG91dFsxMF0gPSBjO1xuICBvdXRbMTFdID0gMDtcbiAgb3V0WzEyXSA9IDA7XG4gIG91dFsxM10gPSAwO1xuICBvdXRbMTRdID0gMDtcbiAgb3V0WzE1XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG1hdHJpeCBmcm9tIHRoZSBnaXZlbiBhbmdsZSBhcm91bmQgdGhlIFkgYXhpc1xyXG4gKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGJ1dCBtdWNoIGZhc3RlciB0aGFuKTpcclxuICpcclxuICogICAgIG1hdDQuaWRlbnRpdHkoZGVzdCk7XHJcbiAqICAgICBtYXQ0LnJvdGF0ZVkoZGVzdCwgZGVzdCwgcmFkKTtcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIHRoZSBhbmdsZSB0byByb3RhdGUgdGhlIG1hdHJpeCBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVlSb3RhdGlvbihvdXQsIHJhZCkge1xuICB2YXIgcyA9IE1hdGguc2luKHJhZCk7XG4gIHZhciBjID0gTWF0aC5jb3MocmFkKTsgLy8gUGVyZm9ybSBheGlzLXNwZWNpZmljIG1hdHJpeCBtdWx0aXBsaWNhdGlvblxuXG4gIG91dFswXSA9IGM7XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IC1zO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSAwO1xuICBvdXRbNV0gPSAxO1xuICBvdXRbNl0gPSAwO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSBzO1xuICBvdXRbOV0gPSAwO1xuICBvdXRbMTBdID0gYztcbiAgb3V0WzExXSA9IDA7XG4gIG91dFsxMl0gPSAwO1xuICBvdXRbMTNdID0gMDtcbiAgb3V0WzE0XSA9IDA7XG4gIG91dFsxNV0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtYXRyaXggZnJvbSB0aGUgZ2l2ZW4gYW5nbGUgYXJvdW5kIHRoZSBaIGF4aXNcclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQ0LmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0NC5yb3RhdGVaKGRlc3QsIGRlc3QsIHJhZCk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCB0aGUgYW5nbGUgdG8gcm90YXRlIHRoZSBtYXRyaXggYnlcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21aUm90YXRpb24ob3V0LCByYWQpIHtcbiAgdmFyIHMgPSBNYXRoLnNpbihyYWQpO1xuICB2YXIgYyA9IE1hdGguY29zKHJhZCk7IC8vIFBlcmZvcm0gYXhpcy1zcGVjaWZpYyBtYXRyaXggbXVsdGlwbGljYXRpb25cblxuICBvdXRbMF0gPSBjO1xuICBvdXRbMV0gPSBzO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSAtcztcbiAgb3V0WzVdID0gYztcbiAgb3V0WzZdID0gMDtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gMDtcbiAgb3V0WzldID0gMDtcbiAgb3V0WzEwXSA9IDE7XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gMDtcbiAgb3V0WzEzXSA9IDA7XG4gIG91dFsxNF0gPSAwO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gYSBxdWF0ZXJuaW9uIHJvdGF0aW9uIGFuZCB2ZWN0b3IgdHJhbnNsYXRpb25cclxuICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIChidXQgbXVjaCBmYXN0ZXIgdGhhbik6XHJcbiAqXHJcbiAqICAgICBtYXQ0LmlkZW50aXR5KGRlc3QpO1xyXG4gKiAgICAgbWF0NC50cmFuc2xhdGUoZGVzdCwgdmVjKTtcclxuICogICAgIGxldCBxdWF0TWF0ID0gbWF0NC5jcmVhdGUoKTtcclxuICogICAgIHF1YXQ0LnRvTWF0NChxdWF0LCBxdWF0TWF0KTtcclxuICogICAgIG1hdDQubXVsdGlwbHkoZGVzdCwgcXVhdE1hdCk7XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtxdWF0NH0gcSBSb3RhdGlvbiBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7dmVjM30gdiBUcmFuc2xhdGlvbiB2ZWN0b3JcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKG91dCwgcSwgdikge1xuICAvLyBRdWF0ZXJuaW9uIG1hdGhcbiAgdmFyIHggPSBxWzBdLFxuICAgICAgeSA9IHFbMV0sXG4gICAgICB6ID0gcVsyXSxcbiAgICAgIHcgPSBxWzNdO1xuICB2YXIgeDIgPSB4ICsgeDtcbiAgdmFyIHkyID0geSArIHk7XG4gIHZhciB6MiA9IHogKyB6O1xuICB2YXIgeHggPSB4ICogeDI7XG4gIHZhciB4eSA9IHggKiB5MjtcbiAgdmFyIHh6ID0geCAqIHoyO1xuICB2YXIgeXkgPSB5ICogeTI7XG4gIHZhciB5eiA9IHkgKiB6MjtcbiAgdmFyIHp6ID0geiAqIHoyO1xuICB2YXIgd3ggPSB3ICogeDI7XG4gIHZhciB3eSA9IHcgKiB5MjtcbiAgdmFyIHd6ID0gdyAqIHoyO1xuICBvdXRbMF0gPSAxIC0gKHl5ICsgenopO1xuICBvdXRbMV0gPSB4eSArIHd6O1xuICBvdXRbMl0gPSB4eiAtIHd5O1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSB4eSAtIHd6O1xuICBvdXRbNV0gPSAxIC0gKHh4ICsgenopO1xuICBvdXRbNl0gPSB5eiArIHd4O1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSB4eiArIHd5O1xuICBvdXRbOV0gPSB5eiAtIHd4O1xuICBvdXRbMTBdID0gMSAtICh4eCArIHl5KTtcbiAgb3V0WzExXSA9IDA7XG4gIG91dFsxMl0gPSB2WzBdO1xuICBvdXRbMTNdID0gdlsxXTtcbiAgb3V0WzE0XSA9IHZbMl07XG4gIG91dFsxNV0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgbWF0NCBmcm9tIGEgZHVhbCBxdWF0LlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBNYXRyaXhcclxuICogQHBhcmFtIHtxdWF0Mn0gYSBEdWFsIFF1YXRlcm5pb25cclxuICogQHJldHVybnMge21hdDR9IG1hdDQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUXVhdDIob3V0LCBhKSB7XG4gIHZhciB0cmFuc2xhdGlvbiA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDMpO1xuICB2YXIgYnggPSAtYVswXSxcbiAgICAgIGJ5ID0gLWFbMV0sXG4gICAgICBieiA9IC1hWzJdLFxuICAgICAgYncgPSBhWzNdLFxuICAgICAgYXggPSBhWzRdLFxuICAgICAgYXkgPSBhWzVdLFxuICAgICAgYXogPSBhWzZdLFxuICAgICAgYXcgPSBhWzddO1xuICB2YXIgbWFnbml0dWRlID0gYnggKiBieCArIGJ5ICogYnkgKyBieiAqIGJ6ICsgYncgKiBidzsgLy9Pbmx5IHNjYWxlIGlmIGl0IG1ha2VzIHNlbnNlXG5cbiAgaWYgKG1hZ25pdHVkZSA+IDApIHtcbiAgICB0cmFuc2xhdGlvblswXSA9IChheCAqIGJ3ICsgYXcgKiBieCArIGF5ICogYnogLSBheiAqIGJ5KSAqIDIgLyBtYWduaXR1ZGU7XG4gICAgdHJhbnNsYXRpb25bMV0gPSAoYXkgKiBidyArIGF3ICogYnkgKyBheiAqIGJ4IC0gYXggKiBieikgKiAyIC8gbWFnbml0dWRlO1xuICAgIHRyYW5zbGF0aW9uWzJdID0gKGF6ICogYncgKyBhdyAqIGJ6ICsgYXggKiBieSAtIGF5ICogYngpICogMiAvIG1hZ25pdHVkZTtcbiAgfSBlbHNlIHtcbiAgICB0cmFuc2xhdGlvblswXSA9IChheCAqIGJ3ICsgYXcgKiBieCArIGF5ICogYnogLSBheiAqIGJ5KSAqIDI7XG4gICAgdHJhbnNsYXRpb25bMV0gPSAoYXkgKiBidyArIGF3ICogYnkgKyBheiAqIGJ4IC0gYXggKiBieikgKiAyO1xuICAgIHRyYW5zbGF0aW9uWzJdID0gKGF6ICogYncgKyBhdyAqIGJ6ICsgYXggKiBieSAtIGF5ICogYngpICogMjtcbiAgfVxuXG4gIGZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKG91dCwgYSwgdHJhbnNsYXRpb24pO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgdGhlIHRyYW5zbGF0aW9uIHZlY3RvciBjb21wb25lbnQgb2YgYSB0cmFuc2Zvcm1hdGlvblxyXG4gKiAgbWF0cml4LiBJZiBhIG1hdHJpeCBpcyBidWlsdCB3aXRoIGZyb21Sb3RhdGlvblRyYW5zbGF0aW9uLFxyXG4gKiAgdGhlIHJldHVybmVkIHZlY3RvciB3aWxsIGJlIHRoZSBzYW1lIGFzIHRoZSB0cmFuc2xhdGlvbiB2ZWN0b3JcclxuICogIG9yaWdpbmFsbHkgc3VwcGxpZWQuXHJcbiAqIEBwYXJhbSAge3ZlYzN9IG91dCBWZWN0b3IgdG8gcmVjZWl2ZSB0cmFuc2xhdGlvbiBjb21wb25lbnRcclxuICogQHBhcmFtICB7bWF0NH0gbWF0IE1hdHJpeCB0byBiZSBkZWNvbXBvc2VkIChpbnB1dClcclxuICogQHJldHVybiB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHJhbnNsYXRpb24ob3V0LCBtYXQpIHtcbiAgb3V0WzBdID0gbWF0WzEyXTtcbiAgb3V0WzFdID0gbWF0WzEzXTtcbiAgb3V0WzJdID0gbWF0WzE0XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBzY2FsaW5nIGZhY3RvciBjb21wb25lbnQgb2YgYSB0cmFuc2Zvcm1hdGlvblxyXG4gKiAgbWF0cml4LiBJZiBhIG1hdHJpeCBpcyBidWlsdCB3aXRoIGZyb21Sb3RhdGlvblRyYW5zbGF0aW9uU2NhbGVcclxuICogIHdpdGggYSBub3JtYWxpemVkIFF1YXRlcm5pb24gcGFyYW10ZXIsIHRoZSByZXR1cm5lZCB2ZWN0b3Igd2lsbCBiZVxyXG4gKiAgdGhlIHNhbWUgYXMgdGhlIHNjYWxpbmcgdmVjdG9yXHJcbiAqICBvcmlnaW5hbGx5IHN1cHBsaWVkLlxyXG4gKiBAcGFyYW0gIHt2ZWMzfSBvdXQgVmVjdG9yIHRvIHJlY2VpdmUgc2NhbGluZyBmYWN0b3IgY29tcG9uZW50XHJcbiAqIEBwYXJhbSAge21hdDR9IG1hdCBNYXRyaXggdG8gYmUgZGVjb21wb3NlZCAoaW5wdXQpXHJcbiAqIEByZXR1cm4ge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjYWxpbmcob3V0LCBtYXQpIHtcbiAgdmFyIG0xMSA9IG1hdFswXTtcbiAgdmFyIG0xMiA9IG1hdFsxXTtcbiAgdmFyIG0xMyA9IG1hdFsyXTtcbiAgdmFyIG0yMSA9IG1hdFs0XTtcbiAgdmFyIG0yMiA9IG1hdFs1XTtcbiAgdmFyIG0yMyA9IG1hdFs2XTtcbiAgdmFyIG0zMSA9IG1hdFs4XTtcbiAgdmFyIG0zMiA9IG1hdFs5XTtcbiAgdmFyIG0zMyA9IG1hdFsxMF07XG4gIG91dFswXSA9IE1hdGguaHlwb3QobTExLCBtMTIsIG0xMyk7XG4gIG91dFsxXSA9IE1hdGguaHlwb3QobTIxLCBtMjIsIG0yMyk7XG4gIG91dFsyXSA9IE1hdGguaHlwb3QobTMxLCBtMzIsIG0zMyk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyBhIHF1YXRlcm5pb24gcmVwcmVzZW50aW5nIHRoZSByb3RhdGlvbmFsIGNvbXBvbmVudFxyXG4gKiAgb2YgYSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXguIElmIGEgbWF0cml4IGlzIGJ1aWx0IHdpdGhcclxuICogIGZyb21Sb3RhdGlvblRyYW5zbGF0aW9uLCB0aGUgcmV0dXJuZWQgcXVhdGVybmlvbiB3aWxsIGJlIHRoZVxyXG4gKiAgc2FtZSBhcyB0aGUgcXVhdGVybmlvbiBvcmlnaW5hbGx5IHN1cHBsaWVkLlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCBRdWF0ZXJuaW9uIHRvIHJlY2VpdmUgdGhlIHJvdGF0aW9uIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge21hdDR9IG1hdCBNYXRyaXggdG8gYmUgZGVjb21wb3NlZCAoaW5wdXQpXHJcbiAqIEByZXR1cm4ge3F1YXR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJvdGF0aW9uKG91dCwgbWF0KSB7XG4gIHZhciBzY2FsaW5nID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoMyk7XG4gIGdldFNjYWxpbmcoc2NhbGluZywgbWF0KTtcbiAgdmFyIGlzMSA9IDEgLyBzY2FsaW5nWzBdO1xuICB2YXIgaXMyID0gMSAvIHNjYWxpbmdbMV07XG4gIHZhciBpczMgPSAxIC8gc2NhbGluZ1syXTtcbiAgdmFyIHNtMTEgPSBtYXRbMF0gKiBpczE7XG4gIHZhciBzbTEyID0gbWF0WzFdICogaXMyO1xuICB2YXIgc20xMyA9IG1hdFsyXSAqIGlzMztcbiAgdmFyIHNtMjEgPSBtYXRbNF0gKiBpczE7XG4gIHZhciBzbTIyID0gbWF0WzVdICogaXMyO1xuICB2YXIgc20yMyA9IG1hdFs2XSAqIGlzMztcbiAgdmFyIHNtMzEgPSBtYXRbOF0gKiBpczE7XG4gIHZhciBzbTMyID0gbWF0WzldICogaXMyO1xuICB2YXIgc20zMyA9IG1hdFsxMF0gKiBpczM7XG4gIHZhciB0cmFjZSA9IHNtMTEgKyBzbTIyICsgc20zMztcbiAgdmFyIFMgPSAwO1xuXG4gIGlmICh0cmFjZSA+IDApIHtcbiAgICBTID0gTWF0aC5zcXJ0KHRyYWNlICsgMS4wKSAqIDI7XG4gICAgb3V0WzNdID0gMC4yNSAqIFM7XG4gICAgb3V0WzBdID0gKHNtMjMgLSBzbTMyKSAvIFM7XG4gICAgb3V0WzFdID0gKHNtMzEgLSBzbTEzKSAvIFM7XG4gICAgb3V0WzJdID0gKHNtMTIgLSBzbTIxKSAvIFM7XG4gIH0gZWxzZSBpZiAoc20xMSA+IHNtMjIgJiYgc20xMSA+IHNtMzMpIHtcbiAgICBTID0gTWF0aC5zcXJ0KDEuMCArIHNtMTEgLSBzbTIyIC0gc20zMykgKiAyO1xuICAgIG91dFszXSA9IChzbTIzIC0gc20zMikgLyBTO1xuICAgIG91dFswXSA9IDAuMjUgKiBTO1xuICAgIG91dFsxXSA9IChzbTEyICsgc20yMSkgLyBTO1xuICAgIG91dFsyXSA9IChzbTMxICsgc20xMykgLyBTO1xuICB9IGVsc2UgaWYgKHNtMjIgPiBzbTMzKSB7XG4gICAgUyA9IE1hdGguc3FydCgxLjAgKyBzbTIyIC0gc20xMSAtIHNtMzMpICogMjtcbiAgICBvdXRbM10gPSAoc20zMSAtIHNtMTMpIC8gUztcbiAgICBvdXRbMF0gPSAoc20xMiArIHNtMjEpIC8gUztcbiAgICBvdXRbMV0gPSAwLjI1ICogUztcbiAgICBvdXRbMl0gPSAoc20yMyArIHNtMzIpIC8gUztcbiAgfSBlbHNlIHtcbiAgICBTID0gTWF0aC5zcXJ0KDEuMCArIHNtMzMgLSBzbTExIC0gc20yMikgKiAyO1xuICAgIG91dFszXSA9IChzbTEyIC0gc20yMSkgLyBTO1xuICAgIG91dFswXSA9IChzbTMxICsgc20xMykgLyBTO1xuICAgIG91dFsxXSA9IChzbTIzICsgc20zMikgLyBTO1xuICAgIG91dFsyXSA9IDAuMjUgKiBTO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZyb20gYSBxdWF0ZXJuaW9uIHJvdGF0aW9uLCB2ZWN0b3IgdHJhbnNsYXRpb24gYW5kIHZlY3RvciBzY2FsZVxyXG4gKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGJ1dCBtdWNoIGZhc3RlciB0aGFuKTpcclxuICpcclxuICogICAgIG1hdDQuaWRlbnRpdHkoZGVzdCk7XHJcbiAqICAgICBtYXQ0LnRyYW5zbGF0ZShkZXN0LCB2ZWMpO1xyXG4gKiAgICAgbGV0IHF1YXRNYXQgPSBtYXQ0LmNyZWF0ZSgpO1xyXG4gKiAgICAgcXVhdDQudG9NYXQ0KHF1YXQsIHF1YXRNYXQpO1xyXG4gKiAgICAgbWF0NC5tdWx0aXBseShkZXN0LCBxdWF0TWF0KTtcclxuICogICAgIG1hdDQuc2NhbGUoZGVzdCwgc2NhbGUpXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtxdWF0NH0gcSBSb3RhdGlvbiBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7dmVjM30gdiBUcmFuc2xhdGlvbiB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBzIFNjYWxpbmcgdmVjdG9yXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUm90YXRpb25UcmFuc2xhdGlvblNjYWxlKG91dCwgcSwgdiwgcykge1xuICAvLyBRdWF0ZXJuaW9uIG1hdGhcbiAgdmFyIHggPSBxWzBdLFxuICAgICAgeSA9IHFbMV0sXG4gICAgICB6ID0gcVsyXSxcbiAgICAgIHcgPSBxWzNdO1xuICB2YXIgeDIgPSB4ICsgeDtcbiAgdmFyIHkyID0geSArIHk7XG4gIHZhciB6MiA9IHogKyB6O1xuICB2YXIgeHggPSB4ICogeDI7XG4gIHZhciB4eSA9IHggKiB5MjtcbiAgdmFyIHh6ID0geCAqIHoyO1xuICB2YXIgeXkgPSB5ICogeTI7XG4gIHZhciB5eiA9IHkgKiB6MjtcbiAgdmFyIHp6ID0geiAqIHoyO1xuICB2YXIgd3ggPSB3ICogeDI7XG4gIHZhciB3eSA9IHcgKiB5MjtcbiAgdmFyIHd6ID0gdyAqIHoyO1xuICB2YXIgc3ggPSBzWzBdO1xuICB2YXIgc3kgPSBzWzFdO1xuICB2YXIgc3ogPSBzWzJdO1xuICBvdXRbMF0gPSAoMSAtICh5eSArIHp6KSkgKiBzeDtcbiAgb3V0WzFdID0gKHh5ICsgd3opICogc3g7XG4gIG91dFsyXSA9ICh4eiAtIHd5KSAqIHN4O1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSAoeHkgLSB3eikgKiBzeTtcbiAgb3V0WzVdID0gKDEgLSAoeHggKyB6eikpICogc3k7XG4gIG91dFs2XSA9ICh5eiArIHd4KSAqIHN5O1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSAoeHogKyB3eSkgKiBzejtcbiAgb3V0WzldID0gKHl6IC0gd3gpICogc3o7XG4gIG91dFsxMF0gPSAoMSAtICh4eCArIHl5KSkgKiBzejtcbiAgb3V0WzExXSA9IDA7XG4gIG91dFsxMl0gPSB2WzBdO1xuICBvdXRbMTNdID0gdlsxXTtcbiAgb3V0WzE0XSA9IHZbMl07XG4gIG91dFsxNV0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBtYXRyaXggZnJvbSBhIHF1YXRlcm5pb24gcm90YXRpb24sIHZlY3RvciB0cmFuc2xhdGlvbiBhbmQgdmVjdG9yIHNjYWxlLCByb3RhdGluZyBhbmQgc2NhbGluZyBhcm91bmQgdGhlIGdpdmVuIG9yaWdpblxyXG4gKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gKGJ1dCBtdWNoIGZhc3RlciB0aGFuKTpcclxuICpcclxuICogICAgIG1hdDQuaWRlbnRpdHkoZGVzdCk7XHJcbiAqICAgICBtYXQ0LnRyYW5zbGF0ZShkZXN0LCB2ZWMpO1xyXG4gKiAgICAgbWF0NC50cmFuc2xhdGUoZGVzdCwgb3JpZ2luKTtcclxuICogICAgIGxldCBxdWF0TWF0ID0gbWF0NC5jcmVhdGUoKTtcclxuICogICAgIHF1YXQ0LnRvTWF0NChxdWF0LCBxdWF0TWF0KTtcclxuICogICAgIG1hdDQubXVsdGlwbHkoZGVzdCwgcXVhdE1hdCk7XHJcbiAqICAgICBtYXQ0LnNjYWxlKGRlc3QsIHNjYWxlKVxyXG4gKiAgICAgbWF0NC50cmFuc2xhdGUoZGVzdCwgbmVnYXRpdmVPcmlnaW4pO1xyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7cXVhdDR9IHEgUm90YXRpb24gcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3ZlYzN9IHYgVHJhbnNsYXRpb24gdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gcyBTY2FsaW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IG8gVGhlIG9yaWdpbiB2ZWN0b3IgYXJvdW5kIHdoaWNoIHRvIHNjYWxlIGFuZCByb3RhdGVcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21Sb3RhdGlvblRyYW5zbGF0aW9uU2NhbGVPcmlnaW4ob3V0LCBxLCB2LCBzLCBvKSB7XG4gIC8vIFF1YXRlcm5pb24gbWF0aFxuICB2YXIgeCA9IHFbMF0sXG4gICAgICB5ID0gcVsxXSxcbiAgICAgIHogPSBxWzJdLFxuICAgICAgdyA9IHFbM107XG4gIHZhciB4MiA9IHggKyB4O1xuICB2YXIgeTIgPSB5ICsgeTtcbiAgdmFyIHoyID0geiArIHo7XG4gIHZhciB4eCA9IHggKiB4MjtcbiAgdmFyIHh5ID0geCAqIHkyO1xuICB2YXIgeHogPSB4ICogejI7XG4gIHZhciB5eSA9IHkgKiB5MjtcbiAgdmFyIHl6ID0geSAqIHoyO1xuICB2YXIgenogPSB6ICogejI7XG4gIHZhciB3eCA9IHcgKiB4MjtcbiAgdmFyIHd5ID0gdyAqIHkyO1xuICB2YXIgd3ogPSB3ICogejI7XG4gIHZhciBzeCA9IHNbMF07XG4gIHZhciBzeSA9IHNbMV07XG4gIHZhciBzeiA9IHNbMl07XG4gIHZhciBveCA9IG9bMF07XG4gIHZhciBveSA9IG9bMV07XG4gIHZhciBveiA9IG9bMl07XG4gIHZhciBvdXQwID0gKDEgLSAoeXkgKyB6eikpICogc3g7XG4gIHZhciBvdXQxID0gKHh5ICsgd3opICogc3g7XG4gIHZhciBvdXQyID0gKHh6IC0gd3kpICogc3g7XG4gIHZhciBvdXQ0ID0gKHh5IC0gd3opICogc3k7XG4gIHZhciBvdXQ1ID0gKDEgLSAoeHggKyB6eikpICogc3k7XG4gIHZhciBvdXQ2ID0gKHl6ICsgd3gpICogc3k7XG4gIHZhciBvdXQ4ID0gKHh6ICsgd3kpICogc3o7XG4gIHZhciBvdXQ5ID0gKHl6IC0gd3gpICogc3o7XG4gIHZhciBvdXQxMCA9ICgxIC0gKHh4ICsgeXkpKSAqIHN6O1xuICBvdXRbMF0gPSBvdXQwO1xuICBvdXRbMV0gPSBvdXQxO1xuICBvdXRbMl0gPSBvdXQyO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSBvdXQ0O1xuICBvdXRbNV0gPSBvdXQ1O1xuICBvdXRbNl0gPSBvdXQ2O1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSBvdXQ4O1xuICBvdXRbOV0gPSBvdXQ5O1xuICBvdXRbMTBdID0gb3V0MTA7XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gdlswXSArIG94IC0gKG91dDAgKiBveCArIG91dDQgKiBveSArIG91dDggKiBveik7XG4gIG91dFsxM10gPSB2WzFdICsgb3kgLSAob3V0MSAqIG94ICsgb3V0NSAqIG95ICsgb3V0OSAqIG96KTtcbiAgb3V0WzE0XSA9IHZbMl0gKyBveiAtIChvdXQyICogb3ggKyBvdXQ2ICogb3kgKyBvdXQxMCAqIG96KTtcbiAgb3V0WzE1XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyBhIDR4NCBtYXRyaXggZnJvbSB0aGUgZ2l2ZW4gcXVhdGVybmlvblxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7cXVhdH0gcSBRdWF0ZXJuaW9uIHRvIGNyZWF0ZSBtYXRyaXggZnJvbVxyXG4gKlxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVF1YXQob3V0LCBxKSB7XG4gIHZhciB4ID0gcVswXSxcbiAgICAgIHkgPSBxWzFdLFxuICAgICAgeiA9IHFbMl0sXG4gICAgICB3ID0gcVszXTtcbiAgdmFyIHgyID0geCArIHg7XG4gIHZhciB5MiA9IHkgKyB5O1xuICB2YXIgejIgPSB6ICsgejtcbiAgdmFyIHh4ID0geCAqIHgyO1xuICB2YXIgeXggPSB5ICogeDI7XG4gIHZhciB5eSA9IHkgKiB5MjtcbiAgdmFyIHp4ID0geiAqIHgyO1xuICB2YXIgenkgPSB6ICogeTI7XG4gIHZhciB6eiA9IHogKiB6MjtcbiAgdmFyIHd4ID0gdyAqIHgyO1xuICB2YXIgd3kgPSB3ICogeTI7XG4gIHZhciB3eiA9IHcgKiB6MjtcbiAgb3V0WzBdID0gMSAtIHl5IC0geno7XG4gIG91dFsxXSA9IHl4ICsgd3o7XG4gIG91dFsyXSA9IHp4IC0gd3k7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IHl4IC0gd3o7XG4gIG91dFs1XSA9IDEgLSB4eCAtIHp6O1xuICBvdXRbNl0gPSB6eSArIHd4O1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSB6eCArIHd5O1xuICBvdXRbOV0gPSB6eSAtIHd4O1xuICBvdXRbMTBdID0gMSAtIHh4IC0geXk7XG4gIG91dFsxMV0gPSAwO1xuICBvdXRbMTJdID0gMDtcbiAgb3V0WzEzXSA9IDA7XG4gIG91dFsxNF0gPSAwO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSBmcnVzdHVtIG1hdHJpeCB3aXRoIHRoZSBnaXZlbiBib3VuZHNcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCBmcnVzdHVtIG1hdHJpeCB3aWxsIGJlIHdyaXR0ZW4gaW50b1xyXG4gKiBAcGFyYW0ge051bWJlcn0gbGVmdCBMZWZ0IGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByaWdodCBSaWdodCBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYm90dG9tIEJvdHRvbSBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge051bWJlcn0gdG9wIFRvcCBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge051bWJlcn0gbmVhciBOZWFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBmYXIgRmFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEByZXR1cm5zIHttYXQ0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcnVzdHVtKG91dCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgdG9wLCBuZWFyLCBmYXIpIHtcbiAgdmFyIHJsID0gMSAvIChyaWdodCAtIGxlZnQpO1xuICB2YXIgdGIgPSAxIC8gKHRvcCAtIGJvdHRvbSk7XG4gIHZhciBuZiA9IDEgLyAobmVhciAtIGZhcik7XG4gIG91dFswXSA9IG5lYXIgKiAyICogcmw7XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IDA7XG4gIG91dFs1XSA9IG5lYXIgKiAyICogdGI7XG4gIG91dFs2XSA9IDA7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9IChyaWdodCArIGxlZnQpICogcmw7XG4gIG91dFs5XSA9ICh0b3AgKyBib3R0b20pICogdGI7XG4gIG91dFsxMF0gPSAoZmFyICsgbmVhcikgKiBuZjtcbiAgb3V0WzExXSA9IC0xO1xuICBvdXRbMTJdID0gMDtcbiAgb3V0WzEzXSA9IDA7XG4gIG91dFsxNF0gPSBmYXIgKiBuZWFyICogMiAqIG5mO1xuICBvdXRbMTVdID0gMDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSBwZXJzcGVjdGl2ZSBwcm9qZWN0aW9uIG1hdHJpeCB3aXRoIHRoZSBnaXZlbiBib3VuZHMuXHJcbiAqIFBhc3NpbmcgbnVsbC91bmRlZmluZWQvbm8gdmFsdWUgZm9yIGZhciB3aWxsIGdlbmVyYXRlIGluZmluaXRlIHByb2plY3Rpb24gbWF0cml4LlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IGZydXN0dW0gbWF0cml4IHdpbGwgYmUgd3JpdHRlbiBpbnRvXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBmb3Z5IFZlcnRpY2FsIGZpZWxkIG9mIHZpZXcgaW4gcmFkaWFuc1xyXG4gKiBAcGFyYW0ge251bWJlcn0gYXNwZWN0IEFzcGVjdCByYXRpby4gdHlwaWNhbGx5IHZpZXdwb3J0IHdpZHRoL2hlaWdodFxyXG4gKiBAcGFyYW0ge251bWJlcn0gbmVhciBOZWFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBmYXIgRmFyIGJvdW5kIG9mIHRoZSBmcnVzdHVtLCBjYW4gYmUgbnVsbCBvciBJbmZpbml0eVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcGVyc3BlY3RpdmUob3V0LCBmb3Z5LCBhc3BlY3QsIG5lYXIsIGZhcikge1xuICB2YXIgZiA9IDEuMCAvIE1hdGgudGFuKGZvdnkgLyAyKSxcbiAgICAgIG5mO1xuICBvdXRbMF0gPSBmIC8gYXNwZWN0O1xuICBvdXRbMV0gPSAwO1xuICBvdXRbMl0gPSAwO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSAwO1xuICBvdXRbNV0gPSBmO1xuICBvdXRbNl0gPSAwO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSAwO1xuICBvdXRbOV0gPSAwO1xuICBvdXRbMTFdID0gLTE7XG4gIG91dFsxMl0gPSAwO1xuICBvdXRbMTNdID0gMDtcbiAgb3V0WzE1XSA9IDA7XG5cbiAgaWYgKGZhciAhPSBudWxsICYmIGZhciAhPT0gSW5maW5pdHkpIHtcbiAgICBuZiA9IDEgLyAobmVhciAtIGZhcik7XG4gICAgb3V0WzEwXSA9IChmYXIgKyBuZWFyKSAqIG5mO1xuICAgIG91dFsxNF0gPSAyICogZmFyICogbmVhciAqIG5mO1xuICB9IGVsc2Uge1xuICAgIG91dFsxMF0gPSAtMTtcbiAgICBvdXRbMTRdID0gLTIgKiBuZWFyO1xuICB9XG5cbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSBwZXJzcGVjdGl2ZSBwcm9qZWN0aW9uIG1hdHJpeCB3aXRoIHRoZSBnaXZlbiBmaWVsZCBvZiB2aWV3LlxyXG4gKiBUaGlzIGlzIHByaW1hcmlseSB1c2VmdWwgZm9yIGdlbmVyYXRpbmcgcHJvamVjdGlvbiBtYXRyaWNlcyB0byBiZSB1c2VkXHJcbiAqIHdpdGggdGhlIHN0aWxsIGV4cGVyaWVtZW50YWwgV2ViVlIgQVBJLlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IGZydXN0dW0gbWF0cml4IHdpbGwgYmUgd3JpdHRlbiBpbnRvXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBmb3YgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZvbGxvd2luZyB2YWx1ZXM6IHVwRGVncmVlcywgZG93bkRlZ3JlZXMsIGxlZnREZWdyZWVzLCByaWdodERlZ3JlZXNcclxuICogQHBhcmFtIHtudW1iZXJ9IG5lYXIgTmVhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge251bWJlcn0gZmFyIEZhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcGVyc3BlY3RpdmVGcm9tRmllbGRPZlZpZXcob3V0LCBmb3YsIG5lYXIsIGZhcikge1xuICB2YXIgdXBUYW4gPSBNYXRoLnRhbihmb3YudXBEZWdyZWVzICogTWF0aC5QSSAvIDE4MC4wKTtcbiAgdmFyIGRvd25UYW4gPSBNYXRoLnRhbihmb3YuZG93bkRlZ3JlZXMgKiBNYXRoLlBJIC8gMTgwLjApO1xuICB2YXIgbGVmdFRhbiA9IE1hdGgudGFuKGZvdi5sZWZ0RGVncmVlcyAqIE1hdGguUEkgLyAxODAuMCk7XG4gIHZhciByaWdodFRhbiA9IE1hdGgudGFuKGZvdi5yaWdodERlZ3JlZXMgKiBNYXRoLlBJIC8gMTgwLjApO1xuICB2YXIgeFNjYWxlID0gMi4wIC8gKGxlZnRUYW4gKyByaWdodFRhbik7XG4gIHZhciB5U2NhbGUgPSAyLjAgLyAodXBUYW4gKyBkb3duVGFuKTtcbiAgb3V0WzBdID0geFNjYWxlO1xuICBvdXRbMV0gPSAwLjA7XG4gIG91dFsyXSA9IDAuMDtcbiAgb3V0WzNdID0gMC4wO1xuICBvdXRbNF0gPSAwLjA7XG4gIG91dFs1XSA9IHlTY2FsZTtcbiAgb3V0WzZdID0gMC4wO1xuICBvdXRbN10gPSAwLjA7XG4gIG91dFs4XSA9IC0oKGxlZnRUYW4gLSByaWdodFRhbikgKiB4U2NhbGUgKiAwLjUpO1xuICBvdXRbOV0gPSAodXBUYW4gLSBkb3duVGFuKSAqIHlTY2FsZSAqIDAuNTtcbiAgb3V0WzEwXSA9IGZhciAvIChuZWFyIC0gZmFyKTtcbiAgb3V0WzExXSA9IC0xLjA7XG4gIG91dFsxMl0gPSAwLjA7XG4gIG91dFsxM10gPSAwLjA7XG4gIG91dFsxNF0gPSBmYXIgKiBuZWFyIC8gKG5lYXIgLSBmYXIpO1xuICBvdXRbMTVdID0gMC4wO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIG9ydGhvZ29uYWwgcHJvamVjdGlvbiBtYXRyaXggd2l0aCB0aGUgZ2l2ZW4gYm91bmRzXHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gb3V0IG1hdDQgZnJ1c3R1bSBtYXRyaXggd2lsbCBiZSB3cml0dGVuIGludG9cclxuICogQHBhcmFtIHtudW1iZXJ9IGxlZnQgTGVmdCBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge251bWJlcn0gcmlnaHQgUmlnaHQgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtudW1iZXJ9IGJvdHRvbSBCb3R0b20gYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtudW1iZXJ9IHRvcCBUb3AgYm91bmQgb2YgdGhlIGZydXN0dW1cclxuICogQHBhcmFtIHtudW1iZXJ9IG5lYXIgTmVhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcGFyYW0ge251bWJlcn0gZmFyIEZhciBib3VuZCBvZiB0aGUgZnJ1c3R1bVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gb3J0aG8ob3V0LCBsZWZ0LCByaWdodCwgYm90dG9tLCB0b3AsIG5lYXIsIGZhcikge1xuICB2YXIgbHIgPSAxIC8gKGxlZnQgLSByaWdodCk7XG4gIHZhciBidCA9IDEgLyAoYm90dG9tIC0gdG9wKTtcbiAgdmFyIG5mID0gMSAvIChuZWFyIC0gZmFyKTtcbiAgb3V0WzBdID0gLTIgKiBscjtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMDtcbiAgb3V0WzRdID0gMDtcbiAgb3V0WzVdID0gLTIgKiBidDtcbiAgb3V0WzZdID0gMDtcbiAgb3V0WzddID0gMDtcbiAgb3V0WzhdID0gMDtcbiAgb3V0WzldID0gMDtcbiAgb3V0WzEwXSA9IDIgKiBuZjtcbiAgb3V0WzExXSA9IDA7XG4gIG91dFsxMl0gPSAobGVmdCArIHJpZ2h0KSAqIGxyO1xuICBvdXRbMTNdID0gKHRvcCArIGJvdHRvbSkgKiBidDtcbiAgb3V0WzE0XSA9IChmYXIgKyBuZWFyKSAqIG5mO1xuICBvdXRbMTVdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSBsb29rLWF0IG1hdHJpeCB3aXRoIHRoZSBnaXZlbiBleWUgcG9zaXRpb24sIGZvY2FsIHBvaW50LCBhbmQgdXAgYXhpcy5cclxuICogSWYgeW91IHdhbnQgYSBtYXRyaXggdGhhdCBhY3R1YWxseSBtYWtlcyBhbiBvYmplY3QgbG9vayBhdCBhbm90aGVyIG9iamVjdCwgeW91IHNob3VsZCB1c2UgdGFyZ2V0VG8gaW5zdGVhZC5cclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgbWF0NCBmcnVzdHVtIG1hdHJpeCB3aWxsIGJlIHdyaXR0ZW4gaW50b1xyXG4gKiBAcGFyYW0ge3ZlYzN9IGV5ZSBQb3NpdGlvbiBvZiB0aGUgdmlld2VyXHJcbiAqIEBwYXJhbSB7dmVjM30gY2VudGVyIFBvaW50IHRoZSB2aWV3ZXIgaXMgbG9va2luZyBhdFxyXG4gKiBAcGFyYW0ge3ZlYzN9IHVwIHZlYzMgcG9pbnRpbmcgdXBcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGxvb2tBdChvdXQsIGV5ZSwgY2VudGVyLCB1cCkge1xuICB2YXIgeDAsIHgxLCB4MiwgeTAsIHkxLCB5MiwgejAsIHoxLCB6MiwgbGVuO1xuICB2YXIgZXlleCA9IGV5ZVswXTtcbiAgdmFyIGV5ZXkgPSBleWVbMV07XG4gIHZhciBleWV6ID0gZXllWzJdO1xuICB2YXIgdXB4ID0gdXBbMF07XG4gIHZhciB1cHkgPSB1cFsxXTtcbiAgdmFyIHVweiA9IHVwWzJdO1xuICB2YXIgY2VudGVyeCA9IGNlbnRlclswXTtcbiAgdmFyIGNlbnRlcnkgPSBjZW50ZXJbMV07XG4gIHZhciBjZW50ZXJ6ID0gY2VudGVyWzJdO1xuXG4gIGlmIChNYXRoLmFicyhleWV4IC0gY2VudGVyeCkgPCBnbE1hdHJpeC5FUFNJTE9OICYmIE1hdGguYWJzKGV5ZXkgLSBjZW50ZXJ5KSA8IGdsTWF0cml4LkVQU0lMT04gJiYgTWF0aC5hYnMoZXlleiAtIGNlbnRlcnopIDwgZ2xNYXRyaXguRVBTSUxPTikge1xuICAgIHJldHVybiBpZGVudGl0eShvdXQpO1xuICB9XG5cbiAgejAgPSBleWV4IC0gY2VudGVyeDtcbiAgejEgPSBleWV5IC0gY2VudGVyeTtcbiAgejIgPSBleWV6IC0gY2VudGVyejtcbiAgbGVuID0gMSAvIE1hdGguaHlwb3QoejAsIHoxLCB6Mik7XG4gIHowICo9IGxlbjtcbiAgejEgKj0gbGVuO1xuICB6MiAqPSBsZW47XG4gIHgwID0gdXB5ICogejIgLSB1cHogKiB6MTtcbiAgeDEgPSB1cHogKiB6MCAtIHVweCAqIHoyO1xuICB4MiA9IHVweCAqIHoxIC0gdXB5ICogejA7XG4gIGxlbiA9IE1hdGguaHlwb3QoeDAsIHgxLCB4Mik7XG5cbiAgaWYgKCFsZW4pIHtcbiAgICB4MCA9IDA7XG4gICAgeDEgPSAwO1xuICAgIHgyID0gMDtcbiAgfSBlbHNlIHtcbiAgICBsZW4gPSAxIC8gbGVuO1xuICAgIHgwICo9IGxlbjtcbiAgICB4MSAqPSBsZW47XG4gICAgeDIgKj0gbGVuO1xuICB9XG5cbiAgeTAgPSB6MSAqIHgyIC0gejIgKiB4MTtcbiAgeTEgPSB6MiAqIHgwIC0gejAgKiB4MjtcbiAgeTIgPSB6MCAqIHgxIC0gejEgKiB4MDtcbiAgbGVuID0gTWF0aC5oeXBvdCh5MCwgeTEsIHkyKTtcblxuICBpZiAoIWxlbikge1xuICAgIHkwID0gMDtcbiAgICB5MSA9IDA7XG4gICAgeTIgPSAwO1xuICB9IGVsc2Uge1xuICAgIGxlbiA9IDEgLyBsZW47XG4gICAgeTAgKj0gbGVuO1xuICAgIHkxICo9IGxlbjtcbiAgICB5MiAqPSBsZW47XG4gIH1cblxuICBvdXRbMF0gPSB4MDtcbiAgb3V0WzFdID0geTA7XG4gIG91dFsyXSA9IHowO1xuICBvdXRbM10gPSAwO1xuICBvdXRbNF0gPSB4MTtcbiAgb3V0WzVdID0geTE7XG4gIG91dFs2XSA9IHoxO1xuICBvdXRbN10gPSAwO1xuICBvdXRbOF0gPSB4MjtcbiAgb3V0WzldID0geTI7XG4gIG91dFsxMF0gPSB6MjtcbiAgb3V0WzExXSA9IDA7XG4gIG91dFsxMl0gPSAtKHgwICogZXlleCArIHgxICogZXlleSArIHgyICogZXlleik7XG4gIG91dFsxM10gPSAtKHkwICogZXlleCArIHkxICogZXlleSArIHkyICogZXlleik7XG4gIG91dFsxNF0gPSAtKHowICogZXlleCArIHoxICogZXlleSArIHoyICogZXlleik7XG4gIG91dFsxNV0gPSAxO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIG1hdHJpeCB0aGF0IG1ha2VzIHNvbWV0aGluZyBsb29rIGF0IHNvbWV0aGluZyBlbHNlLlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCBtYXQ0IGZydXN0dW0gbWF0cml4IHdpbGwgYmUgd3JpdHRlbiBpbnRvXHJcbiAqIEBwYXJhbSB7dmVjM30gZXllIFBvc2l0aW9uIG9mIHRoZSB2aWV3ZXJcclxuICogQHBhcmFtIHt2ZWMzfSBjZW50ZXIgUG9pbnQgdGhlIHZpZXdlciBpcyBsb29raW5nIGF0XHJcbiAqIEBwYXJhbSB7dmVjM30gdXAgdmVjMyBwb2ludGluZyB1cFxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdGFyZ2V0VG8ob3V0LCBleWUsIHRhcmdldCwgdXApIHtcbiAgdmFyIGV5ZXggPSBleWVbMF0sXG4gICAgICBleWV5ID0gZXllWzFdLFxuICAgICAgZXlleiA9IGV5ZVsyXSxcbiAgICAgIHVweCA9IHVwWzBdLFxuICAgICAgdXB5ID0gdXBbMV0sXG4gICAgICB1cHogPSB1cFsyXTtcbiAgdmFyIHowID0gZXlleCAtIHRhcmdldFswXSxcbiAgICAgIHoxID0gZXlleSAtIHRhcmdldFsxXSxcbiAgICAgIHoyID0gZXlleiAtIHRhcmdldFsyXTtcbiAgdmFyIGxlbiA9IHowICogejAgKyB6MSAqIHoxICsgejIgKiB6MjtcblxuICBpZiAobGVuID4gMCkge1xuICAgIGxlbiA9IDEgLyBNYXRoLnNxcnQobGVuKTtcbiAgICB6MCAqPSBsZW47XG4gICAgejEgKj0gbGVuO1xuICAgIHoyICo9IGxlbjtcbiAgfVxuXG4gIHZhciB4MCA9IHVweSAqIHoyIC0gdXB6ICogejEsXG4gICAgICB4MSA9IHVweiAqIHowIC0gdXB4ICogejIsXG4gICAgICB4MiA9IHVweCAqIHoxIC0gdXB5ICogejA7XG4gIGxlbiA9IHgwICogeDAgKyB4MSAqIHgxICsgeDIgKiB4MjtcblxuICBpZiAobGVuID4gMCkge1xuICAgIGxlbiA9IDEgLyBNYXRoLnNxcnQobGVuKTtcbiAgICB4MCAqPSBsZW47XG4gICAgeDEgKj0gbGVuO1xuICAgIHgyICo9IGxlbjtcbiAgfVxuXG4gIG91dFswXSA9IHgwO1xuICBvdXRbMV0gPSB4MTtcbiAgb3V0WzJdID0geDI7XG4gIG91dFszXSA9IDA7XG4gIG91dFs0XSA9IHoxICogeDIgLSB6MiAqIHgxO1xuICBvdXRbNV0gPSB6MiAqIHgwIC0gejAgKiB4MjtcbiAgb3V0WzZdID0gejAgKiB4MSAtIHoxICogeDA7XG4gIG91dFs3XSA9IDA7XG4gIG91dFs4XSA9IHowO1xuICBvdXRbOV0gPSB6MTtcbiAgb3V0WzEwXSA9IHoyO1xuICBvdXRbMTFdID0gMDtcbiAgb3V0WzEyXSA9IGV5ZXg7XG4gIG91dFsxM10gPSBleWV5O1xuICBvdXRbMTRdID0gZXllejtcbiAgb3V0WzE1XSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIG1hdDRcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBhIG1hdHJpeCB0byByZXByZXNlbnQgYXMgYSBzdHJpbmdcclxuICogQHJldHVybnMge1N0cmluZ30gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtYXRyaXhcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzdHIoYSkge1xuICByZXR1cm4gXCJtYXQ0KFwiICsgYVswXSArIFwiLCBcIiArIGFbMV0gKyBcIiwgXCIgKyBhWzJdICsgXCIsIFwiICsgYVszXSArIFwiLCBcIiArIGFbNF0gKyBcIiwgXCIgKyBhWzVdICsgXCIsIFwiICsgYVs2XSArIFwiLCBcIiArIGFbN10gKyBcIiwgXCIgKyBhWzhdICsgXCIsIFwiICsgYVs5XSArIFwiLCBcIiArIGFbMTBdICsgXCIsIFwiICsgYVsxMV0gKyBcIiwgXCIgKyBhWzEyXSArIFwiLCBcIiArIGFbMTNdICsgXCIsIFwiICsgYVsxNF0gKyBcIiwgXCIgKyBhWzE1XSArIFwiKVwiO1xufVxuLyoqXHJcbiAqIFJldHVybnMgRnJvYmVuaXVzIG5vcm0gb2YgYSBtYXQ0XHJcbiAqXHJcbiAqIEBwYXJhbSB7bWF0NH0gYSB0aGUgbWF0cml4IHRvIGNhbGN1bGF0ZSBGcm9iZW5pdXMgbm9ybSBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBGcm9iZW5pdXMgbm9ybVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb2IoYSkge1xuICByZXR1cm4gTWF0aC5oeXBvdChhWzBdLCBhWzFdLCBhWzJdLCBhWzNdLCBhWzRdLCBhWzVdLCBhWzZdLCBhWzddLCBhWzhdLCBhWzldLCBhWzEwXSwgYVsxMV0sIGFbMTJdLCBhWzEzXSwgYVsxNF0sIGFbMTVdKTtcbn1cbi8qKlxyXG4gKiBBZGRzIHR3byBtYXQ0J3NcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0NH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSArIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gKyBiWzFdO1xuICBvdXRbMl0gPSBhWzJdICsgYlsyXTtcbiAgb3V0WzNdID0gYVszXSArIGJbM107XG4gIG91dFs0XSA9IGFbNF0gKyBiWzRdO1xuICBvdXRbNV0gPSBhWzVdICsgYls1XTtcbiAgb3V0WzZdID0gYVs2XSArIGJbNl07XG4gIG91dFs3XSA9IGFbN10gKyBiWzddO1xuICBvdXRbOF0gPSBhWzhdICsgYls4XTtcbiAgb3V0WzldID0gYVs5XSArIGJbOV07XG4gIG91dFsxMF0gPSBhWzEwXSArIGJbMTBdO1xuICBvdXRbMTFdID0gYVsxMV0gKyBiWzExXTtcbiAgb3V0WzEyXSA9IGFbMTJdICsgYlsxMl07XG4gIG91dFsxM10gPSBhWzEzXSArIGJbMTNdO1xuICBvdXRbMTRdID0gYVsxNF0gKyBiWzE0XTtcbiAgb3V0WzE1XSA9IGFbMTVdICsgYlsxNV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU3VidHJhY3RzIG1hdHJpeCBiIGZyb20gbWF0cml4IGFcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7bWF0NH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge21hdDR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnRyYWN0KG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdIC0gYlswXTtcbiAgb3V0WzFdID0gYVsxXSAtIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gLSBiWzJdO1xuICBvdXRbM10gPSBhWzNdIC0gYlszXTtcbiAgb3V0WzRdID0gYVs0XSAtIGJbNF07XG4gIG91dFs1XSA9IGFbNV0gLSBiWzVdO1xuICBvdXRbNl0gPSBhWzZdIC0gYls2XTtcbiAgb3V0WzddID0gYVs3XSAtIGJbN107XG4gIG91dFs4XSA9IGFbOF0gLSBiWzhdO1xuICBvdXRbOV0gPSBhWzldIC0gYls5XTtcbiAgb3V0WzEwXSA9IGFbMTBdIC0gYlsxMF07XG4gIG91dFsxMV0gPSBhWzExXSAtIGJbMTFdO1xuICBvdXRbMTJdID0gYVsxMl0gLSBiWzEyXTtcbiAgb3V0WzEzXSA9IGFbMTNdIC0gYlsxM107XG4gIG91dFsxNF0gPSBhWzE0XSAtIGJbMTRdO1xuICBvdXRbMTVdID0gYVsxNV0gLSBiWzE1XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBNdWx0aXBseSBlYWNoIGVsZW1lbnQgb2YgdGhlIG1hdHJpeCBieSBhIHNjYWxhci5cclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBvdXQgdGhlIHJlY2VpdmluZyBtYXRyaXhcclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBtYXRyaXggdG8gc2NhbGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgYW1vdW50IHRvIHNjYWxlIHRoZSBtYXRyaXgncyBlbGVtZW50cyBieVxyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHlTY2FsYXIob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKiBiO1xuICBvdXRbMV0gPSBhWzFdICogYjtcbiAgb3V0WzJdID0gYVsyXSAqIGI7XG4gIG91dFszXSA9IGFbM10gKiBiO1xuICBvdXRbNF0gPSBhWzRdICogYjtcbiAgb3V0WzVdID0gYVs1XSAqIGI7XG4gIG91dFs2XSA9IGFbNl0gKiBiO1xuICBvdXRbN10gPSBhWzddICogYjtcbiAgb3V0WzhdID0gYVs4XSAqIGI7XG4gIG91dFs5XSA9IGFbOV0gKiBiO1xuICBvdXRbMTBdID0gYVsxMF0gKiBiO1xuICBvdXRbMTFdID0gYVsxMV0gKiBiO1xuICBvdXRbMTJdID0gYVsxMl0gKiBiO1xuICBvdXRbMTNdID0gYVsxM10gKiBiO1xuICBvdXRbMTRdID0gYVsxNF0gKiBiO1xuICBvdXRbMTVdID0gYVsxNV0gKiBiO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEFkZHMgdHdvIG1hdDQncyBhZnRlciBtdWx0aXBseWluZyBlYWNoIGVsZW1lbnQgb2YgdGhlIHNlY29uZCBvcGVyYW5kIGJ5IGEgc2NhbGFyIHZhbHVlLlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge21hdDR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHttYXQ0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gc2NhbGUgdGhlIGFtb3VudCB0byBzY2FsZSBiJ3MgZWxlbWVudHMgYnkgYmVmb3JlIGFkZGluZ1xyXG4gKiBAcmV0dXJucyB7bWF0NH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHlTY2FsYXJBbmRBZGQob3V0LCBhLCBiLCBzY2FsZSkge1xuICBvdXRbMF0gPSBhWzBdICsgYlswXSAqIHNjYWxlO1xuICBvdXRbMV0gPSBhWzFdICsgYlsxXSAqIHNjYWxlO1xuICBvdXRbMl0gPSBhWzJdICsgYlsyXSAqIHNjYWxlO1xuICBvdXRbM10gPSBhWzNdICsgYlszXSAqIHNjYWxlO1xuICBvdXRbNF0gPSBhWzRdICsgYls0XSAqIHNjYWxlO1xuICBvdXRbNV0gPSBhWzVdICsgYls1XSAqIHNjYWxlO1xuICBvdXRbNl0gPSBhWzZdICsgYls2XSAqIHNjYWxlO1xuICBvdXRbN10gPSBhWzddICsgYls3XSAqIHNjYWxlO1xuICBvdXRbOF0gPSBhWzhdICsgYls4XSAqIHNjYWxlO1xuICBvdXRbOV0gPSBhWzldICsgYls5XSAqIHNjYWxlO1xuICBvdXRbMTBdID0gYVsxMF0gKyBiWzEwXSAqIHNjYWxlO1xuICBvdXRbMTFdID0gYVsxMV0gKyBiWzExXSAqIHNjYWxlO1xuICBvdXRbMTJdID0gYVsxMl0gKyBiWzEyXSAqIHNjYWxlO1xuICBvdXRbMTNdID0gYVsxM10gKyBiWzEzXSAqIHNjYWxlO1xuICBvdXRbMTRdID0gYVsxNF0gKyBiWzE0XSAqIHNjYWxlO1xuICBvdXRbMTVdID0gYVsxNV0gKyBiWzE1XSAqIHNjYWxlO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIG1hdHJpY2VzIGhhdmUgZXhhY3RseSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBwb3NpdGlvbiAod2hlbiBjb21wYXJlZCB3aXRoID09PSlcclxuICpcclxuICogQHBhcmFtIHttYXQ0fSBhIFRoZSBmaXJzdCBtYXRyaXguXHJcbiAqIEBwYXJhbSB7bWF0NH0gYiBUaGUgc2Vjb25kIG1hdHJpeC5cclxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIG1hdHJpY2VzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGV4YWN0RXF1YWxzKGEsIGIpIHtcbiAgcmV0dXJuIGFbMF0gPT09IGJbMF0gJiYgYVsxXSA9PT0gYlsxXSAmJiBhWzJdID09PSBiWzJdICYmIGFbM10gPT09IGJbM10gJiYgYVs0XSA9PT0gYls0XSAmJiBhWzVdID09PSBiWzVdICYmIGFbNl0gPT09IGJbNl0gJiYgYVs3XSA9PT0gYls3XSAmJiBhWzhdID09PSBiWzhdICYmIGFbOV0gPT09IGJbOV0gJiYgYVsxMF0gPT09IGJbMTBdICYmIGFbMTFdID09PSBiWzExXSAmJiBhWzEyXSA9PT0gYlsxMl0gJiYgYVsxM10gPT09IGJbMTNdICYmIGFbMTRdID09PSBiWzE0XSAmJiBhWzE1XSA9PT0gYlsxNV07XG59XG4vKipcclxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgbWF0cmljZXMgaGF2ZSBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0ge21hdDR9IGEgVGhlIGZpcnN0IG1hdHJpeC5cclxuICogQHBhcmFtIHttYXQ0fSBiIFRoZSBzZWNvbmQgbWF0cml4LlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgbWF0cmljZXMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxzKGEsIGIpIHtcbiAgdmFyIGEwID0gYVswXSxcbiAgICAgIGExID0gYVsxXSxcbiAgICAgIGEyID0gYVsyXSxcbiAgICAgIGEzID0gYVszXTtcbiAgdmFyIGE0ID0gYVs0XSxcbiAgICAgIGE1ID0gYVs1XSxcbiAgICAgIGE2ID0gYVs2XSxcbiAgICAgIGE3ID0gYVs3XTtcbiAgdmFyIGE4ID0gYVs4XSxcbiAgICAgIGE5ID0gYVs5XSxcbiAgICAgIGExMCA9IGFbMTBdLFxuICAgICAgYTExID0gYVsxMV07XG4gIHZhciBhMTIgPSBhWzEyXSxcbiAgICAgIGExMyA9IGFbMTNdLFxuICAgICAgYTE0ID0gYVsxNF0sXG4gICAgICBhMTUgPSBhWzE1XTtcbiAgdmFyIGIwID0gYlswXSxcbiAgICAgIGIxID0gYlsxXSxcbiAgICAgIGIyID0gYlsyXSxcbiAgICAgIGIzID0gYlszXTtcbiAgdmFyIGI0ID0gYls0XSxcbiAgICAgIGI1ID0gYls1XSxcbiAgICAgIGI2ID0gYls2XSxcbiAgICAgIGI3ID0gYls3XTtcbiAgdmFyIGI4ID0gYls4XSxcbiAgICAgIGI5ID0gYls5XSxcbiAgICAgIGIxMCA9IGJbMTBdLFxuICAgICAgYjExID0gYlsxMV07XG4gIHZhciBiMTIgPSBiWzEyXSxcbiAgICAgIGIxMyA9IGJbMTNdLFxuICAgICAgYjE0ID0gYlsxNF0sXG4gICAgICBiMTUgPSBiWzE1XTtcbiAgcmV0dXJuIE1hdGguYWJzKGEwIC0gYjApIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEwKSwgTWF0aC5hYnMoYjApKSAmJiBNYXRoLmFicyhhMSAtIGIxKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMSksIE1hdGguYWJzKGIxKSkgJiYgTWF0aC5hYnMoYTIgLSBiMikgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTIpLCBNYXRoLmFicyhiMikpICYmIE1hdGguYWJzKGEzIC0gYjMpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEzKSwgTWF0aC5hYnMoYjMpKSAmJiBNYXRoLmFicyhhNCAtIGI0KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhNCksIE1hdGguYWJzKGI0KSkgJiYgTWF0aC5hYnMoYTUgLSBiNSkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTUpLCBNYXRoLmFicyhiNSkpICYmIE1hdGguYWJzKGE2IC0gYjYpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGE2KSwgTWF0aC5hYnMoYjYpKSAmJiBNYXRoLmFicyhhNyAtIGI3KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhNyksIE1hdGguYWJzKGI3KSkgJiYgTWF0aC5hYnMoYTggLSBiOCkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTgpLCBNYXRoLmFicyhiOCkpICYmIE1hdGguYWJzKGE5IC0gYjkpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGE5KSwgTWF0aC5hYnMoYjkpKSAmJiBNYXRoLmFicyhhMTAgLSBiMTApIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGExMCksIE1hdGguYWJzKGIxMCkpICYmIE1hdGguYWJzKGExMSAtIGIxMSkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTExKSwgTWF0aC5hYnMoYjExKSkgJiYgTWF0aC5hYnMoYTEyIC0gYjEyKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMTIpLCBNYXRoLmFicyhiMTIpKSAmJiBNYXRoLmFicyhhMTMgLSBiMTMpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGExMyksIE1hdGguYWJzKGIxMykpICYmIE1hdGguYWJzKGExNCAtIGIxNCkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTE0KSwgTWF0aC5hYnMoYjE0KSkgJiYgTWF0aC5hYnMoYTE1IC0gYjE1KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMTUpLCBNYXRoLmFicyhiMTUpKTtcbn1cbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIG1hdDQubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBtdWwgPSBtdWx0aXBseTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIG1hdDQuc3VidHJhY3R9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzdWIgPSBzdWJ0cmFjdDsiLCJpbXBvcnQgKiBhcyBnbE1hdHJpeCBmcm9tIFwiLi9jb21tb24uanNcIjtcbi8qKlxyXG4gKiAzIERpbWVuc2lvbmFsIFZlY3RvclxyXG4gKiBAbW9kdWxlIHZlYzNcclxuICovXG5cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3LCBlbXB0eSB2ZWMzXHJcbiAqXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBhIG5ldyAzRCB2ZWN0b3JcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGUoKSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSgzKTtcblxuICBpZiAoZ2xNYXRyaXguQVJSQVlfVFlQRSAhPSBGbG9hdDMyQXJyYXkpIHtcbiAgICBvdXRbMF0gPSAwO1xuICAgIG91dFsxXSA9IDA7XG4gICAgb3V0WzJdID0gMDtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWMzIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gY2xvbmVcclxuICogQHJldHVybnMge3ZlYzN9IGEgbmV3IDNEIHZlY3RvclxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNsb25lKGEpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDMpO1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICBvdXRbMl0gPSBhWzJdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGxlbmd0aCBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBjYWxjdWxhdGUgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGxlbmd0aCBvZiBhXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbGVuZ3RoKGEpIHtcbiAgdmFyIHggPSBhWzBdO1xuICB2YXIgeSA9IGFbMV07XG4gIHZhciB6ID0gYVsyXTtcbiAgcmV0dXJuIE1hdGguaHlwb3QoeCwgeSwgeik7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWMzIGluaXRpYWxpemVkIHdpdGggdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0geCBYIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geSBZIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geiBaIGNvbXBvbmVudFxyXG4gKiBAcmV0dXJucyB7dmVjM30gYSBuZXcgM0QgdmVjdG9yXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVZhbHVlcyh4LCB5LCB6KSB7XG4gIHZhciBvdXQgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSgzKTtcbiAgb3V0WzBdID0geDtcbiAgb3V0WzFdID0geTtcbiAgb3V0WzJdID0gejtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBvbmUgdmVjMyB0byBhbm90aGVyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgc291cmNlIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY29weShvdXQsIGEpIHtcbiAgb3V0WzBdID0gYVswXTtcbiAgb3V0WzFdID0gYVsxXTtcbiAgb3V0WzJdID0gYVsyXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTZXQgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMzIHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNldChvdXQsIHgsIHksIHopIHtcbiAgb3V0WzBdID0geDtcbiAgb3V0WzFdID0geTtcbiAgb3V0WzJdID0gejtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBBZGRzIHR3byB2ZWMzJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSArIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gKyBiWzFdO1xuICBvdXRbMl0gPSBhWzJdICsgYlsyXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTdWJ0cmFjdHMgdmVjdG9yIGIgZnJvbSB2ZWN0b3IgYVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3VidHJhY3Qob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gLSBiWzBdO1xuICBvdXRbMV0gPSBhWzFdIC0gYlsxXTtcbiAgb3V0WzJdID0gYVsyXSAtIGJbMl07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTXVsdGlwbGllcyB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBseShvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAqIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gKiBiWzFdO1xuICBvdXRbMl0gPSBhWzJdICogYlsyXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBEaXZpZGVzIHR3byB2ZWMzJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGRpdmlkZShvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAvIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gLyBiWzFdO1xuICBvdXRbMl0gPSBhWzJdIC8gYlsyXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBNYXRoLmNlaWwgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gY2VpbFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY2VpbChvdXQsIGEpIHtcbiAgb3V0WzBdID0gTWF0aC5jZWlsKGFbMF0pO1xuICBvdXRbMV0gPSBNYXRoLmNlaWwoYVsxXSk7XG4gIG91dFsyXSA9IE1hdGguY2VpbChhWzJdKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBNYXRoLmZsb29yIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjM1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdmVjdG9yIHRvIGZsb29yXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmbG9vcihvdXQsIGEpIHtcbiAgb3V0WzBdID0gTWF0aC5mbG9vcihhWzBdKTtcbiAgb3V0WzFdID0gTWF0aC5mbG9vcihhWzFdKTtcbiAgb3V0WzJdID0gTWF0aC5mbG9vcihhWzJdKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBtaW5pbXVtIG9mIHR3byB2ZWMzJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG1pbihvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gTWF0aC5taW4oYVswXSwgYlswXSk7XG4gIG91dFsxXSA9IE1hdGgubWluKGFbMV0sIGJbMV0pO1xuICBvdXRbMl0gPSBNYXRoLm1pbihhWzJdLCBiWzJdKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBtYXhpbXVtIG9mIHR3byB2ZWMzJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG1heChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gTWF0aC5tYXgoYVswXSwgYlswXSk7XG4gIG91dFsxXSA9IE1hdGgubWF4KGFbMV0sIGJbMV0pO1xuICBvdXRbMl0gPSBNYXRoLm1heChhWzJdLCBiWzJdKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBNYXRoLnJvdW5kIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjM1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdmVjdG9yIHRvIHJvdW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3VuZChvdXQsIGEpIHtcbiAgb3V0WzBdID0gTWF0aC5yb3VuZChhWzBdKTtcbiAgb3V0WzFdID0gTWF0aC5yb3VuZChhWzFdKTtcbiAgb3V0WzJdID0gTWF0aC5yb3VuZChhWzJdKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTY2FsZXMgYSB2ZWMzIGJ5IGEgc2NhbGFyIG51bWJlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIHZlY3RvciB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIHZlY3RvciBieVxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2NhbGUob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKiBiO1xuICBvdXRbMV0gPSBhWzFdICogYjtcbiAgb3V0WzJdID0gYVsyXSAqIGI7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQWRkcyB0d28gdmVjMydzIGFmdGVyIHNjYWxpbmcgdGhlIHNlY29uZCBvcGVyYW5kIGJ5IGEgc2NhbGFyIHZhbHVlXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBzY2FsZSB0aGUgYW1vdW50IHRvIHNjYWxlIGIgYnkgYmVmb3JlIGFkZGluZ1xyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2NhbGVBbmRBZGQob3V0LCBhLCBiLCBzY2FsZSkge1xuICBvdXRbMF0gPSBhWzBdICsgYlswXSAqIHNjYWxlO1xuICBvdXRbMV0gPSBhWzFdICsgYlsxXSAqIHNjYWxlO1xuICBvdXRbMl0gPSBhWzJdICsgYlsyXSAqIHNjYWxlO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGV1Y2xpZGlhbiBkaXN0YW5jZSBiZXR3ZWVuIHR3byB2ZWMzJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZGlzdGFuY2UoYSwgYikge1xuICB2YXIgeCA9IGJbMF0gLSBhWzBdO1xuICB2YXIgeSA9IGJbMV0gLSBhWzFdO1xuICB2YXIgeiA9IGJbMl0gLSBhWzJdO1xuICByZXR1cm4gTWF0aC5oeXBvdCh4LCB5LCB6KTtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBzcXVhcmVkIGV1Y2xpZGlhbiBkaXN0YW5jZSBiZXR3ZWVuIHR3byB2ZWMzJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge051bWJlcn0gc3F1YXJlZCBkaXN0YW5jZSBiZXR3ZWVuIGEgYW5kIGJcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzcXVhcmVkRGlzdGFuY2UoYSwgYikge1xuICB2YXIgeCA9IGJbMF0gLSBhWzBdO1xuICB2YXIgeSA9IGJbMV0gLSBhWzFdO1xuICB2YXIgeiA9IGJbMl0gLSBhWzJdO1xuICByZXR1cm4geCAqIHggKyB5ICogeSArIHogKiB6O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIHNxdWFyZWQgbGVuZ3RoIG9mIGEgdmVjM1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBzcXVhcmVkIGxlbmd0aCBvZlxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBzcXVhcmVkIGxlbmd0aCBvZiBhXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3F1YXJlZExlbmd0aChhKSB7XG4gIHZhciB4ID0gYVswXTtcbiAgdmFyIHkgPSBhWzFdO1xuICB2YXIgeiA9IGFbMl07XG4gIHJldHVybiB4ICogeCArIHkgKiB5ICsgeiAqIHo7XG59XG4vKipcclxuICogTmVnYXRlcyB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzNcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byBuZWdhdGVcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG5lZ2F0ZShvdXQsIGEpIHtcbiAgb3V0WzBdID0gLWFbMF07XG4gIG91dFsxXSA9IC1hWzFdO1xuICBvdXRbMl0gPSAtYVsyXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBpbnZlcnNlIG9mIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjM1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdmVjdG9yIHRvIGludmVydFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShvdXQsIGEpIHtcbiAgb3V0WzBdID0gMS4wIC8gYVswXTtcbiAgb3V0WzFdID0gMS4wIC8gYVsxXTtcbiAgb3V0WzJdID0gMS4wIC8gYVsyXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBOb3JtYWxpemUgYSB2ZWMzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB2ZWN0b3IgdG8gbm9ybWFsaXplXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemUob3V0LCBhKSB7XG4gIHZhciB4ID0gYVswXTtcbiAgdmFyIHkgPSBhWzFdO1xuICB2YXIgeiA9IGFbMl07XG4gIHZhciBsZW4gPSB4ICogeCArIHkgKiB5ICsgeiAqIHo7XG5cbiAgaWYgKGxlbiA+IDApIHtcbiAgICAvL1RPRE86IGV2YWx1YXRlIHVzZSBvZiBnbG1faW52c3FydCBoZXJlP1xuICAgIGxlbiA9IDEgLyBNYXRoLnNxcnQobGVuKTtcbiAgfVxuXG4gIG91dFswXSA9IGFbMF0gKiBsZW47XG4gIG91dFsxXSA9IGFbMV0gKiBsZW47XG4gIG91dFsyXSA9IGFbMl0gKiBsZW47XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZG90IHByb2R1Y3Qgb2YgdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkb3QgcHJvZHVjdCBvZiBhIGFuZCBiXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZG90KGEsIGIpIHtcbiAgcmV0dXJuIGFbMF0gKiBiWzBdICsgYVsxXSAqIGJbMV0gKyBhWzJdICogYlsyXTtcbn1cbi8qKlxyXG4gKiBDb21wdXRlcyB0aGUgY3Jvc3MgcHJvZHVjdCBvZiB0d28gdmVjMydzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjcm9zcyhvdXQsIGEsIGIpIHtcbiAgdmFyIGF4ID0gYVswXSxcbiAgICAgIGF5ID0gYVsxXSxcbiAgICAgIGF6ID0gYVsyXTtcbiAgdmFyIGJ4ID0gYlswXSxcbiAgICAgIGJ5ID0gYlsxXSxcbiAgICAgIGJ6ID0gYlsyXTtcbiAgb3V0WzBdID0gYXkgKiBieiAtIGF6ICogYnk7XG4gIG91dFsxXSA9IGF6ICogYnggLSBheCAqIGJ6O1xuICBvdXRbMl0gPSBheCAqIGJ5IC0gYXkgKiBieDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBQZXJmb3JtcyBhIGxpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gdHdvIHZlYzMnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCwgaW4gdGhlIHJhbmdlIFswLTFdLCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBsZXJwKG91dCwgYSwgYiwgdCkge1xuICB2YXIgYXggPSBhWzBdO1xuICB2YXIgYXkgPSBhWzFdO1xuICB2YXIgYXogPSBhWzJdO1xuICBvdXRbMF0gPSBheCArIHQgKiAoYlswXSAtIGF4KTtcbiAgb3V0WzFdID0gYXkgKyB0ICogKGJbMV0gLSBheSk7XG4gIG91dFsyXSA9IGF6ICsgdCAqIChiWzJdIC0gYXopO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFBlcmZvcm1zIGEgaGVybWl0ZSBpbnRlcnBvbGF0aW9uIHdpdGggdHdvIGNvbnRyb2wgcG9pbnRzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYyB0aGUgdGhpcmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGQgdGhlIGZvdXJ0aCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB0IGludGVycG9sYXRpb24gYW1vdW50LCBpbiB0aGUgcmFuZ2UgWzAtMV0sIGJldHdlZW4gdGhlIHR3byBpbnB1dHNcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGhlcm1pdGUob3V0LCBhLCBiLCBjLCBkLCB0KSB7XG4gIHZhciBmYWN0b3JUaW1lczIgPSB0ICogdDtcbiAgdmFyIGZhY3RvcjEgPSBmYWN0b3JUaW1lczIgKiAoMiAqIHQgLSAzKSArIDE7XG4gIHZhciBmYWN0b3IyID0gZmFjdG9yVGltZXMyICogKHQgLSAyKSArIHQ7XG4gIHZhciBmYWN0b3IzID0gZmFjdG9yVGltZXMyICogKHQgLSAxKTtcbiAgdmFyIGZhY3RvcjQgPSBmYWN0b3JUaW1lczIgKiAoMyAtIDIgKiB0KTtcbiAgb3V0WzBdID0gYVswXSAqIGZhY3RvcjEgKyBiWzBdICogZmFjdG9yMiArIGNbMF0gKiBmYWN0b3IzICsgZFswXSAqIGZhY3RvcjQ7XG4gIG91dFsxXSA9IGFbMV0gKiBmYWN0b3IxICsgYlsxXSAqIGZhY3RvcjIgKyBjWzFdICogZmFjdG9yMyArIGRbMV0gKiBmYWN0b3I0O1xuICBvdXRbMl0gPSBhWzJdICogZmFjdG9yMSArIGJbMl0gKiBmYWN0b3IyICsgY1syXSAqIGZhY3RvcjMgKyBkWzJdICogZmFjdG9yNDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBQZXJmb3JtcyBhIGJlemllciBpbnRlcnBvbGF0aW9uIHdpdGggdHdvIGNvbnRyb2wgcG9pbnRzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjM30gYyB0aGUgdGhpcmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGQgdGhlIGZvdXJ0aCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB0IGludGVycG9sYXRpb24gYW1vdW50LCBpbiB0aGUgcmFuZ2UgWzAtMV0sIGJldHdlZW4gdGhlIHR3byBpbnB1dHNcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGJlemllcihvdXQsIGEsIGIsIGMsIGQsIHQpIHtcbiAgdmFyIGludmVyc2VGYWN0b3IgPSAxIC0gdDtcbiAgdmFyIGludmVyc2VGYWN0b3JUaW1lc1R3byA9IGludmVyc2VGYWN0b3IgKiBpbnZlcnNlRmFjdG9yO1xuICB2YXIgZmFjdG9yVGltZXMyID0gdCAqIHQ7XG4gIHZhciBmYWN0b3IxID0gaW52ZXJzZUZhY3RvclRpbWVzVHdvICogaW52ZXJzZUZhY3RvcjtcbiAgdmFyIGZhY3RvcjIgPSAzICogdCAqIGludmVyc2VGYWN0b3JUaW1lc1R3bztcbiAgdmFyIGZhY3RvcjMgPSAzICogZmFjdG9yVGltZXMyICogaW52ZXJzZUZhY3RvcjtcbiAgdmFyIGZhY3RvcjQgPSBmYWN0b3JUaW1lczIgKiB0O1xuICBvdXRbMF0gPSBhWzBdICogZmFjdG9yMSArIGJbMF0gKiBmYWN0b3IyICsgY1swXSAqIGZhY3RvcjMgKyBkWzBdICogZmFjdG9yNDtcbiAgb3V0WzFdID0gYVsxXSAqIGZhY3RvcjEgKyBiWzFdICogZmFjdG9yMiArIGNbMV0gKiBmYWN0b3IzICsgZFsxXSAqIGZhY3RvcjQ7XG4gIG91dFsyXSA9IGFbMl0gKiBmYWN0b3IxICsgYlsyXSAqIGZhY3RvcjIgKyBjWzJdICogZmFjdG9yMyArIGRbMl0gKiBmYWN0b3I0O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEdlbmVyYXRlcyBhIHJhbmRvbSB2ZWN0b3Igd2l0aCB0aGUgZ2l2ZW4gc2NhbGVcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHtOdW1iZXJ9IFtzY2FsZV0gTGVuZ3RoIG9mIHRoZSByZXN1bHRpbmcgdmVjdG9yLiBJZiBvbW1pdHRlZCwgYSB1bml0IHZlY3RvciB3aWxsIGJlIHJldHVybmVkXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByYW5kb20ob3V0LCBzY2FsZSkge1xuICBzY2FsZSA9IHNjYWxlIHx8IDEuMDtcbiAgdmFyIHIgPSBnbE1hdHJpeC5SQU5ET00oKSAqIDIuMCAqIE1hdGguUEk7XG4gIHZhciB6ID0gZ2xNYXRyaXguUkFORE9NKCkgKiAyLjAgLSAxLjA7XG4gIHZhciB6U2NhbGUgPSBNYXRoLnNxcnQoMS4wIC0geiAqIHopICogc2NhbGU7XG4gIG91dFswXSA9IE1hdGguY29zKHIpICogelNjYWxlO1xuICBvdXRbMV0gPSBNYXRoLnNpbihyKSAqIHpTY2FsZTtcbiAgb3V0WzJdID0geiAqIHNjYWxlO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzMgd2l0aCBhIG1hdDQuXHJcbiAqIDR0aCB2ZWN0b3IgY29tcG9uZW50IGlzIGltcGxpY2l0bHkgJzEnXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjM30gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDR9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1NYXQ0KG91dCwgYSwgbSkge1xuICB2YXIgeCA9IGFbMF0sXG4gICAgICB5ID0gYVsxXSxcbiAgICAgIHogPSBhWzJdO1xuICB2YXIgdyA9IG1bM10gKiB4ICsgbVs3XSAqIHkgKyBtWzExXSAqIHogKyBtWzE1XTtcbiAgdyA9IHcgfHwgMS4wO1xuICBvdXRbMF0gPSAobVswXSAqIHggKyBtWzRdICogeSArIG1bOF0gKiB6ICsgbVsxMl0pIC8gdztcbiAgb3V0WzFdID0gKG1bMV0gKiB4ICsgbVs1XSAqIHkgKyBtWzldICogeiArIG1bMTNdKSAvIHc7XG4gIG91dFsyXSA9IChtWzJdICogeCArIG1bNl0gKiB5ICsgbVsxMF0gKiB6ICsgbVsxNF0pIC8gdztcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMzIHdpdGggYSBtYXQzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cclxuICogQHBhcmFtIHttYXQzfSBtIHRoZSAzeDMgbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1NYXQzKG91dCwgYSwgbSkge1xuICB2YXIgeCA9IGFbMF0sXG4gICAgICB5ID0gYVsxXSxcbiAgICAgIHogPSBhWzJdO1xuICBvdXRbMF0gPSB4ICogbVswXSArIHkgKiBtWzNdICsgeiAqIG1bNl07XG4gIG91dFsxXSA9IHggKiBtWzFdICsgeSAqIG1bNF0gKyB6ICogbVs3XTtcbiAgb3V0WzJdID0geCAqIG1bMl0gKyB5ICogbVs1XSArIHogKiBtWzhdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzMgd2l0aCBhIHF1YXRcclxuICogQ2FuIGFsc28gYmUgdXNlZCBmb3IgZHVhbCBxdWF0ZXJuaW9ucy4gKE11bHRpcGx5IGl0IHdpdGggdGhlIHJlYWwgcGFydClcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSB2ZWN0b3IgdG8gdHJhbnNmb3JtXHJcbiAqIEBwYXJhbSB7cXVhdH0gcSBxdWF0ZXJuaW9uIHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1RdWF0KG91dCwgYSwgcSkge1xuICAvLyBiZW5jaG1hcmtzOiBodHRwczovL2pzcGVyZi5jb20vcXVhdGVybmlvbi10cmFuc2Zvcm0tdmVjMy1pbXBsZW1lbnRhdGlvbnMtZml4ZWRcbiAgdmFyIHF4ID0gcVswXSxcbiAgICAgIHF5ID0gcVsxXSxcbiAgICAgIHF6ID0gcVsyXSxcbiAgICAgIHF3ID0gcVszXTtcbiAgdmFyIHggPSBhWzBdLFxuICAgICAgeSA9IGFbMV0sXG4gICAgICB6ID0gYVsyXTsgLy8gdmFyIHF2ZWMgPSBbcXgsIHF5LCBxel07XG4gIC8vIHZhciB1diA9IHZlYzMuY3Jvc3MoW10sIHF2ZWMsIGEpO1xuXG4gIHZhciB1dnggPSBxeSAqIHogLSBxeiAqIHksXG4gICAgICB1dnkgPSBxeiAqIHggLSBxeCAqIHosXG4gICAgICB1dnogPSBxeCAqIHkgLSBxeSAqIHg7IC8vIHZhciB1dXYgPSB2ZWMzLmNyb3NzKFtdLCBxdmVjLCB1dik7XG5cbiAgdmFyIHV1dnggPSBxeSAqIHV2eiAtIHF6ICogdXZ5LFxuICAgICAgdXV2eSA9IHF6ICogdXZ4IC0gcXggKiB1dnosXG4gICAgICB1dXZ6ID0gcXggKiB1dnkgLSBxeSAqIHV2eDsgLy8gdmVjMy5zY2FsZSh1diwgdXYsIDIgKiB3KTtcblxuICB2YXIgdzIgPSBxdyAqIDI7XG4gIHV2eCAqPSB3MjtcbiAgdXZ5ICo9IHcyO1xuICB1dnogKj0gdzI7IC8vIHZlYzMuc2NhbGUodXV2LCB1dXYsIDIpO1xuXG4gIHV1dnggKj0gMjtcbiAgdXV2eSAqPSAyO1xuICB1dXZ6ICo9IDI7IC8vIHJldHVybiB2ZWMzLmFkZChvdXQsIGEsIHZlYzMuYWRkKG91dCwgdXYsIHV1dikpO1xuXG4gIG91dFswXSA9IHggKyB1dnggKyB1dXZ4O1xuICBvdXRbMV0gPSB5ICsgdXZ5ICsgdXV2eTtcbiAgb3V0WzJdID0geiArIHV2eiArIHV1dno7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlIGEgM0QgdmVjdG9yIGFyb3VuZCB0aGUgeC1heGlzXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IFRoZSByZWNlaXZpbmcgdmVjM1xyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgVGhlIHZlYzMgcG9pbnQgdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7dmVjM30gYiBUaGUgb3JpZ2luIG9mIHRoZSByb3RhdGlvblxyXG4gKiBAcGFyYW0ge051bWJlcn0gcmFkIFRoZSBhbmdsZSBvZiByb3RhdGlvbiBpbiByYWRpYW5zXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGVYKG91dCwgYSwgYiwgcmFkKSB7XG4gIHZhciBwID0gW10sXG4gICAgICByID0gW107IC8vVHJhbnNsYXRlIHBvaW50IHRvIHRoZSBvcmlnaW5cblxuICBwWzBdID0gYVswXSAtIGJbMF07XG4gIHBbMV0gPSBhWzFdIC0gYlsxXTtcbiAgcFsyXSA9IGFbMl0gLSBiWzJdOyAvL3BlcmZvcm0gcm90YXRpb25cblxuICByWzBdID0gcFswXTtcbiAgclsxXSA9IHBbMV0gKiBNYXRoLmNvcyhyYWQpIC0gcFsyXSAqIE1hdGguc2luKHJhZCk7XG4gIHJbMl0gPSBwWzFdICogTWF0aC5zaW4ocmFkKSArIHBbMl0gKiBNYXRoLmNvcyhyYWQpOyAvL3RyYW5zbGF0ZSB0byBjb3JyZWN0IHBvc2l0aW9uXG5cbiAgb3V0WzBdID0gclswXSArIGJbMF07XG4gIG91dFsxXSA9IHJbMV0gKyBiWzFdO1xuICBvdXRbMl0gPSByWzJdICsgYlsyXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGUgYSAzRCB2ZWN0b3IgYXJvdW5kIHRoZSB5LWF4aXNcclxuICogQHBhcmFtIHt2ZWMzfSBvdXQgVGhlIHJlY2VpdmluZyB2ZWMzXHJcbiAqIEBwYXJhbSB7dmVjM30gYSBUaGUgdmVjMyBwb2ludCB0byByb3RhdGVcclxuICogQHBhcmFtIHt2ZWMzfSBiIFRoZSBvcmlnaW4gb2YgdGhlIHJvdGF0aW9uXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgVGhlIGFuZ2xlIG9mIHJvdGF0aW9uIGluIHJhZGlhbnNcclxuICogQHJldHVybnMge3ZlYzN9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZVkob3V0LCBhLCBiLCByYWQpIHtcbiAgdmFyIHAgPSBbXSxcbiAgICAgIHIgPSBbXTsgLy9UcmFuc2xhdGUgcG9pbnQgdG8gdGhlIG9yaWdpblxuXG4gIHBbMF0gPSBhWzBdIC0gYlswXTtcbiAgcFsxXSA9IGFbMV0gLSBiWzFdO1xuICBwWzJdID0gYVsyXSAtIGJbMl07IC8vcGVyZm9ybSByb3RhdGlvblxuXG4gIHJbMF0gPSBwWzJdICogTWF0aC5zaW4ocmFkKSArIHBbMF0gKiBNYXRoLmNvcyhyYWQpO1xuICByWzFdID0gcFsxXTtcbiAgclsyXSA9IHBbMl0gKiBNYXRoLmNvcyhyYWQpIC0gcFswXSAqIE1hdGguc2luKHJhZCk7IC8vdHJhbnNsYXRlIHRvIGNvcnJlY3QgcG9zaXRpb25cblxuICBvdXRbMF0gPSByWzBdICsgYlswXTtcbiAgb3V0WzFdID0gclsxXSArIGJbMV07XG4gIG91dFsyXSA9IHJbMl0gKyBiWzJdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZSBhIDNEIHZlY3RvciBhcm91bmQgdGhlIHotYXhpc1xyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCBUaGUgcmVjZWl2aW5nIHZlYzNcclxuICogQHBhcmFtIHt2ZWMzfSBhIFRoZSB2ZWMzIHBvaW50IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgVGhlIG9yaWdpbiBvZiB0aGUgcm90YXRpb25cclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCBUaGUgYW5nbGUgb2Ygcm90YXRpb24gaW4gcmFkaWFuc1xyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlWihvdXQsIGEsIGIsIHJhZCkge1xuICB2YXIgcCA9IFtdLFxuICAgICAgciA9IFtdOyAvL1RyYW5zbGF0ZSBwb2ludCB0byB0aGUgb3JpZ2luXG5cbiAgcFswXSA9IGFbMF0gLSBiWzBdO1xuICBwWzFdID0gYVsxXSAtIGJbMV07XG4gIHBbMl0gPSBhWzJdIC0gYlsyXTsgLy9wZXJmb3JtIHJvdGF0aW9uXG5cbiAgclswXSA9IHBbMF0gKiBNYXRoLmNvcyhyYWQpIC0gcFsxXSAqIE1hdGguc2luKHJhZCk7XG4gIHJbMV0gPSBwWzBdICogTWF0aC5zaW4ocmFkKSArIHBbMV0gKiBNYXRoLmNvcyhyYWQpO1xuICByWzJdID0gcFsyXTsgLy90cmFuc2xhdGUgdG8gY29ycmVjdCBwb3NpdGlvblxuXG4gIG91dFswXSA9IHJbMF0gKyBiWzBdO1xuICBvdXRbMV0gPSByWzFdICsgYlsxXTtcbiAgb3V0WzJdID0gclsyXSArIGJbMl07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2V0IHRoZSBhbmdsZSBiZXR3ZWVuIHR3byAzRCB2ZWN0b3JzXHJcbiAqIEBwYXJhbSB7dmVjM30gYSBUaGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgVGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBhbmdsZSBpbiByYWRpYW5zXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYW5nbGUoYSwgYikge1xuICB2YXIgYXggPSBhWzBdLFxuICAgICAgYXkgPSBhWzFdLFxuICAgICAgYXogPSBhWzJdLFxuICAgICAgYnggPSBiWzBdLFxuICAgICAgYnkgPSBiWzFdLFxuICAgICAgYnogPSBiWzJdLFxuICAgICAgbWFnMSA9IE1hdGguc3FydChheCAqIGF4ICsgYXkgKiBheSArIGF6ICogYXopLFxuICAgICAgbWFnMiA9IE1hdGguc3FydChieCAqIGJ4ICsgYnkgKiBieSArIGJ6ICogYnopLFxuICAgICAgbWFnID0gbWFnMSAqIG1hZzIsXG4gICAgICBjb3NpbmUgPSBtYWcgJiYgZG90KGEsIGIpIC8gbWFnO1xuICByZXR1cm4gTWF0aC5hY29zKE1hdGgubWluKE1hdGgubWF4KGNvc2luZSwgLTEpLCAxKSk7XG59XG4vKipcclxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMyB0byB6ZXJvXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEByZXR1cm5zIHt2ZWMzfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB6ZXJvKG91dCkge1xuICBvdXRbMF0gPSAwLjA7XG4gIG91dFsxXSA9IDAuMDtcbiAgb3V0WzJdID0gMC4wO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSB2ZWN0b3JcclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSBhIHZlY3RvciB0byByZXByZXNlbnQgYXMgYSBzdHJpbmdcclxuICogQHJldHVybnMge1N0cmluZ30gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2ZWN0b3JcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzdHIoYSkge1xuICByZXR1cm4gXCJ2ZWMzKFwiICsgYVswXSArIFwiLCBcIiArIGFbMV0gKyBcIiwgXCIgKyBhWzJdICsgXCIpXCI7XG59XG4vKipcclxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgdmVjdG9ycyBoYXZlIGV4YWN0bHkgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgcG9zaXRpb24gKHdoZW4gY29tcGFyZWQgd2l0aCA9PT0pXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjM30gYSBUaGUgZmlyc3QgdmVjdG9yLlxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgVGhlIHNlY29uZCB2ZWN0b3IuXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSB2ZWN0b3JzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGV4YWN0RXF1YWxzKGEsIGIpIHtcbiAgcmV0dXJuIGFbMF0gPT09IGJbMF0gJiYgYVsxXSA9PT0gYlsxXSAmJiBhWzJdID09PSBiWzJdO1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHZlY3RvcnMgaGF2ZSBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IGEgVGhlIGZpcnN0IHZlY3Rvci5cclxuICogQHBhcmFtIHt2ZWMzfSBiIFRoZSBzZWNvbmQgdmVjdG9yLlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmVjdG9ycyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbHMoYSwgYikge1xuICB2YXIgYTAgPSBhWzBdLFxuICAgICAgYTEgPSBhWzFdLFxuICAgICAgYTIgPSBhWzJdO1xuICB2YXIgYjAgPSBiWzBdLFxuICAgICAgYjEgPSBiWzFdLFxuICAgICAgYjIgPSBiWzJdO1xuICByZXR1cm4gTWF0aC5hYnMoYTAgLSBiMCkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTApLCBNYXRoLmFicyhiMCkpICYmIE1hdGguYWJzKGExIC0gYjEpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGExKSwgTWF0aC5hYnMoYjEpKSAmJiBNYXRoLmFicyhhMiAtIGIyKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMiksIE1hdGguYWJzKGIyKSk7XG59XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLnN1YnRyYWN0fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc3ViID0gc3VidHJhY3Q7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLm11bHRpcGx5fVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgbXVsID0gbXVsdGlwbHk7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLmRpdmlkZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGRpdiA9IGRpdmlkZTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzMuZGlzdGFuY2V9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBkaXN0ID0gZGlzdGFuY2U7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLnNxdWFyZWREaXN0YW5jZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHNxckRpc3QgPSBzcXVhcmVkRGlzdGFuY2U7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMzLmxlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGxlbiA9IGxlbmd0aDtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzMuc3F1YXJlZExlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHNxckxlbiA9IHNxdWFyZWRMZW5ndGg7XG4vKipcclxuICogUGVyZm9ybSBzb21lIG9wZXJhdGlvbiBvdmVyIGFuIGFycmF5IG9mIHZlYzNzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0FycmF5fSBhIHRoZSBhcnJheSBvZiB2ZWN0b3JzIHRvIGl0ZXJhdGUgb3ZlclxyXG4gKiBAcGFyYW0ge051bWJlcn0gc3RyaWRlIE51bWJlciBvZiBlbGVtZW50cyBiZXR3ZWVuIHRoZSBzdGFydCBvZiBlYWNoIHZlYzMuIElmIDAgYXNzdW1lcyB0aWdodGx5IHBhY2tlZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gb2Zmc2V0IE51bWJlciBvZiBlbGVtZW50cyB0byBza2lwIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFycmF5XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBjb3VudCBOdW1iZXIgb2YgdmVjM3MgdG8gaXRlcmF0ZSBvdmVyLiBJZiAwIGl0ZXJhdGVzIG92ZXIgZW50aXJlIGFycmF5XHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggdmVjdG9yIGluIHRoZSBhcnJheVxyXG4gKiBAcGFyYW0ge09iamVjdH0gW2FyZ10gYWRkaXRpb25hbCBhcmd1bWVudCB0byBwYXNzIHRvIGZuXHJcbiAqIEByZXR1cm5zIHtBcnJheX0gYVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgZm9yRWFjaCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHZlYyA9IGNyZWF0ZSgpO1xuICByZXR1cm4gZnVuY3Rpb24gKGEsIHN0cmlkZSwgb2Zmc2V0LCBjb3VudCwgZm4sIGFyZykge1xuICAgIHZhciBpLCBsO1xuXG4gICAgaWYgKCFzdHJpZGUpIHtcbiAgICAgIHN0cmlkZSA9IDM7XG4gICAgfVxuXG4gICAgaWYgKCFvZmZzZXQpIHtcbiAgICAgIG9mZnNldCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGNvdW50KSB7XG4gICAgICBsID0gTWF0aC5taW4oY291bnQgKiBzdHJpZGUgKyBvZmZzZXQsIGEubGVuZ3RoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbCA9IGEubGVuZ3RoO1xuICAgIH1cblxuICAgIGZvciAoaSA9IG9mZnNldDsgaSA8IGw7IGkgKz0gc3RyaWRlKSB7XG4gICAgICB2ZWNbMF0gPSBhW2ldO1xuICAgICAgdmVjWzFdID0gYVtpICsgMV07XG4gICAgICB2ZWNbMl0gPSBhW2kgKyAyXTtcbiAgICAgIGZuKHZlYywgdmVjLCBhcmcpO1xuICAgICAgYVtpXSA9IHZlY1swXTtcbiAgICAgIGFbaSArIDFdID0gdmVjWzFdO1xuICAgICAgYVtpICsgMl0gPSB2ZWNbMl07XG4gICAgfVxuXG4gICAgcmV0dXJuIGE7XG4gIH07XG59KCk7IiwiaW1wb3J0ICogYXMgZ2xNYXRyaXggZnJvbSBcIi4vY29tbW9uLmpzXCI7XG4vKipcclxuICogNCBEaW1lbnNpb25hbCBWZWN0b3JcclxuICogQG1vZHVsZSB2ZWM0XHJcbiAqL1xuXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldywgZW1wdHkgdmVjNFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7dmVjNH0gYSBuZXcgNEQgdmVjdG9yXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlKCkge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoNCk7XG5cbiAgaWYgKGdsTWF0cml4LkFSUkFZX1RZUEUgIT0gRmxvYXQzMkFycmF5KSB7XG4gICAgb3V0WzBdID0gMDtcbiAgICBvdXRbMV0gPSAwO1xuICAgIG91dFsyXSA9IDA7XG4gICAgb3V0WzNdID0gMDtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWM0IGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gY2xvbmVcclxuICogQHJldHVybnMge3ZlYzR9IGEgbmV3IDREIHZlY3RvclxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNsb25lKGEpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDQpO1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICBvdXRbMl0gPSBhWzJdO1xuICBvdXRbM10gPSBhWzNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgdmVjNCBpbml0aWFsaXplZCB3aXRoIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHcgVyBjb21wb25lbnRcclxuICogQHJldHVybnMge3ZlYzR9IGEgbmV3IDREIHZlY3RvclxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21WYWx1ZXMoeCwgeSwgeiwgdykge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoNCk7XG4gIG91dFswXSA9IHg7XG4gIG91dFsxXSA9IHk7XG4gIG91dFsyXSA9IHo7XG4gIG91dFszXSA9IHc7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIHZlYzQgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIHNvdXJjZSB2ZWN0b3JcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHkob3V0LCBhKSB7XG4gIG91dFswXSA9IGFbMF07XG4gIG91dFsxXSA9IGFbMV07XG4gIG91dFsyXSA9IGFbMl07XG4gIG91dFszXSA9IGFbM107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgdmVjNCB0byB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6IFogY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB3IFcgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXQob3V0LCB4LCB5LCB6LCB3KSB7XG4gIG91dFswXSA9IHg7XG4gIG91dFsxXSA9IHk7XG4gIG91dFsyXSA9IHo7XG4gIG91dFszXSA9IHc7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQWRkcyB0d28gdmVjNCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGQob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKyBiWzBdO1xuICBvdXRbMV0gPSBhWzFdICsgYlsxXTtcbiAgb3V0WzJdID0gYVsyXSArIGJbMl07XG4gIG91dFszXSA9IGFbM10gKyBiWzNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFN1YnRyYWN0cyB2ZWN0b3IgYiBmcm9tIHZlY3RvciBhXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJ0cmFjdChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAtIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gLSBiWzFdO1xuICBvdXRbMl0gPSBhWzJdIC0gYlsyXTtcbiAgb3V0WzNdID0gYVszXSAtIGJbM107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTXVsdGlwbGllcyB0d28gdmVjNCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBseShvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAqIGJbMF07XG4gIG91dFsxXSA9IGFbMV0gKiBiWzFdO1xuICBvdXRbMl0gPSBhWzJdICogYlsyXTtcbiAgb3V0WzNdID0gYVszXSAqIGJbM107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogRGl2aWRlcyB0d28gdmVjNCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBkaXZpZGUob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gLyBiWzBdO1xuICBvdXRbMV0gPSBhWzFdIC8gYlsxXTtcbiAgb3V0WzJdID0gYVsyXSAvIGJbMl07XG4gIG91dFszXSA9IGFbM10gLyBiWzNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE1hdGguY2VpbCB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzRcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHZlY3RvciB0byBjZWlsXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjZWlsKG91dCwgYSkge1xuICBvdXRbMF0gPSBNYXRoLmNlaWwoYVswXSk7XG4gIG91dFsxXSA9IE1hdGguY2VpbChhWzFdKTtcbiAgb3V0WzJdID0gTWF0aC5jZWlsKGFbMl0pO1xuICBvdXRbM10gPSBNYXRoLmNlaWwoYVszXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTWF0aC5mbG9vciB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzRcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHZlY3RvciB0byBmbG9vclxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZmxvb3Iob3V0LCBhKSB7XG4gIG91dFswXSA9IE1hdGguZmxvb3IoYVswXSk7XG4gIG91dFsxXSA9IE1hdGguZmxvb3IoYVsxXSk7XG4gIG91dFsyXSA9IE1hdGguZmxvb3IoYVsyXSk7XG4gIG91dFszXSA9IE1hdGguZmxvb3IoYVszXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyB0aGUgbWluaW11bSBvZiB0d28gdmVjNCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtaW4ob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IE1hdGgubWluKGFbMF0sIGJbMF0pO1xuICBvdXRbMV0gPSBNYXRoLm1pbihhWzFdLCBiWzFdKTtcbiAgb3V0WzJdID0gTWF0aC5taW4oYVsyXSwgYlsyXSk7XG4gIG91dFszXSA9IE1hdGgubWluKGFbM10sIGJbM10pO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgdGhlIG1heGltdW0gb2YgdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbWF4KG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBNYXRoLm1heChhWzBdLCBiWzBdKTtcbiAgb3V0WzFdID0gTWF0aC5tYXgoYVsxXSwgYlsxXSk7XG4gIG91dFsyXSA9IE1hdGgubWF4KGFbMl0sIGJbMl0pO1xuICBvdXRbM10gPSBNYXRoLm1heChhWzNdLCBiWzNdKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBNYXRoLnJvdW5kIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjNFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdmVjdG9yIHRvIHJvdW5kXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3VuZChvdXQsIGEpIHtcbiAgb3V0WzBdID0gTWF0aC5yb3VuZChhWzBdKTtcbiAgb3V0WzFdID0gTWF0aC5yb3VuZChhWzFdKTtcbiAgb3V0WzJdID0gTWF0aC5yb3VuZChhWzJdKTtcbiAgb3V0WzNdID0gTWF0aC5yb3VuZChhWzNdKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTY2FsZXMgYSB2ZWM0IGJ5IGEgc2NhbGFyIG51bWJlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIHZlY3RvciB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIHZlY3RvciBieVxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2NhbGUob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKiBiO1xuICBvdXRbMV0gPSBhWzFdICogYjtcbiAgb3V0WzJdID0gYVsyXSAqIGI7XG4gIG91dFszXSA9IGFbM10gKiBiO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEFkZHMgdHdvIHZlYzQncyBhZnRlciBzY2FsaW5nIHRoZSBzZWNvbmQgb3BlcmFuZCBieSBhIHNjYWxhciB2YWx1ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gc2NhbGUgdGhlIGFtb3VudCB0byBzY2FsZSBiIGJ5IGJlZm9yZSBhZGRpbmdcclxuICogQHJldHVybnMge3ZlYzR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlQW5kQWRkKG91dCwgYSwgYiwgc2NhbGUpIHtcbiAgb3V0WzBdID0gYVswXSArIGJbMF0gKiBzY2FsZTtcbiAgb3V0WzFdID0gYVsxXSArIGJbMV0gKiBzY2FsZTtcbiAgb3V0WzJdID0gYVsyXSArIGJbMl0gKiBzY2FsZTtcbiAgb3V0WzNdID0gYVszXSArIGJbM10gKiBzY2FsZTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBldWNsaWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjNCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRpc3RhbmNlIGJldHdlZW4gYSBhbmQgYlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlKGEsIGIpIHtcbiAgdmFyIHggPSBiWzBdIC0gYVswXTtcbiAgdmFyIHkgPSBiWzFdIC0gYVsxXTtcbiAgdmFyIHogPSBiWzJdIC0gYVsyXTtcbiAgdmFyIHcgPSBiWzNdIC0gYVszXTtcbiAgcmV0dXJuIE1hdGguaHlwb3QoeCwgeSwgeiwgdyk7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBldWNsaWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjNCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3F1YXJlZERpc3RhbmNlKGEsIGIpIHtcbiAgdmFyIHggPSBiWzBdIC0gYVswXTtcbiAgdmFyIHkgPSBiWzFdIC0gYVsxXTtcbiAgdmFyIHogPSBiWzJdIC0gYVsyXTtcbiAgdmFyIHcgPSBiWzNdIC0gYVszXTtcbiAgcmV0dXJuIHggKiB4ICsgeSAqIHkgKyB6ICogeiArIHcgKiB3O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGxlbmd0aCBvZiBhIHZlYzRcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBhIHZlY3RvciB0byBjYWxjdWxhdGUgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGxlbmd0aCBvZiBhXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbGVuZ3RoKGEpIHtcbiAgdmFyIHggPSBhWzBdO1xuICB2YXIgeSA9IGFbMV07XG4gIHZhciB6ID0gYVsyXTtcbiAgdmFyIHcgPSBhWzNdO1xuICByZXR1cm4gTWF0aC5oeXBvdCh4LCB5LCB6LCB3KTtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBzcXVhcmVkIGxlbmd0aCBvZiBhIHZlYzRcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBhIHZlY3RvciB0byBjYWxjdWxhdGUgc3F1YXJlZCBsZW5ndGggb2ZcclxuICogQHJldHVybnMge051bWJlcn0gc3F1YXJlZCBsZW5ndGggb2YgYVxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNxdWFyZWRMZW5ndGgoYSkge1xuICB2YXIgeCA9IGFbMF07XG4gIHZhciB5ID0gYVsxXTtcbiAgdmFyIHogPSBhWzJdO1xuICB2YXIgdyA9IGFbM107XG4gIHJldHVybiB4ICogeCArIHkgKiB5ICsgeiAqIHogKyB3ICogdztcbn1cbi8qKlxyXG4gKiBOZWdhdGVzIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjNFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdmVjdG9yIHRvIG5lZ2F0ZVxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbmVnYXRlKG91dCwgYSkge1xuICBvdXRbMF0gPSAtYVswXTtcbiAgb3V0WzFdID0gLWFbMV07XG4gIG91dFsyXSA9IC1hWzJdO1xuICBvdXRbM10gPSAtYVszXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBpbnZlcnNlIG9mIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjNFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdmVjdG9yIHRvIGludmVydFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShvdXQsIGEpIHtcbiAgb3V0WzBdID0gMS4wIC8gYVswXTtcbiAgb3V0WzFdID0gMS4wIC8gYVsxXTtcbiAgb3V0WzJdID0gMS4wIC8gYVsyXTtcbiAgb3V0WzNdID0gMS4wIC8gYVszXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBOb3JtYWxpemUgYSB2ZWM0XHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB2ZWN0b3IgdG8gbm9ybWFsaXplXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemUob3V0LCBhKSB7XG4gIHZhciB4ID0gYVswXTtcbiAgdmFyIHkgPSBhWzFdO1xuICB2YXIgeiA9IGFbMl07XG4gIHZhciB3ID0gYVszXTtcbiAgdmFyIGxlbiA9IHggKiB4ICsgeSAqIHkgKyB6ICogeiArIHcgKiB3O1xuXG4gIGlmIChsZW4gPiAwKSB7XG4gICAgbGVuID0gMSAvIE1hdGguc3FydChsZW4pO1xuICB9XG5cbiAgb3V0WzBdID0geCAqIGxlbjtcbiAgb3V0WzFdID0geSAqIGxlbjtcbiAgb3V0WzJdID0geiAqIGxlbjtcbiAgb3V0WzNdID0gdyAqIGxlbjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gdmVjNCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzR9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRvdCBwcm9kdWN0IG9mIGEgYW5kIGJcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBkb3QoYSwgYikge1xuICByZXR1cm4gYVswXSAqIGJbMF0gKyBhWzFdICogYlsxXSArIGFbMl0gKiBiWzJdICsgYVszXSAqIGJbM107XG59XG4vKipcclxuICogUmV0dXJucyB0aGUgY3Jvc3MtcHJvZHVjdCBvZiB0aHJlZSB2ZWN0b3JzIGluIGEgNC1kaW1lbnNpb25hbCBzcGFjZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IHJlc3VsdCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IFUgdGhlIGZpcnN0IHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IFYgdGhlIHNlY29uZCB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBXIHRoZSB0aGlyZCB2ZWN0b3JcclxuICogQHJldHVybnMge3ZlYzR9IHJlc3VsdFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyb3NzKG91dCwgdSwgdiwgdykge1xuICB2YXIgQSA9IHZbMF0gKiB3WzFdIC0gdlsxXSAqIHdbMF0sXG4gICAgICBCID0gdlswXSAqIHdbMl0gLSB2WzJdICogd1swXSxcbiAgICAgIEMgPSB2WzBdICogd1szXSAtIHZbM10gKiB3WzBdLFxuICAgICAgRCA9IHZbMV0gKiB3WzJdIC0gdlsyXSAqIHdbMV0sXG4gICAgICBFID0gdlsxXSAqIHdbM10gLSB2WzNdICogd1sxXSxcbiAgICAgIEYgPSB2WzJdICogd1szXSAtIHZbM10gKiB3WzJdO1xuICB2YXIgRyA9IHVbMF07XG4gIHZhciBIID0gdVsxXTtcbiAgdmFyIEkgPSB1WzJdO1xuICB2YXIgSiA9IHVbM107XG4gIG91dFswXSA9IEggKiBGIC0gSSAqIEUgKyBKICogRDtcbiAgb3V0WzFdID0gLShHICogRikgKyBJICogQyAtIEogKiBCO1xuICBvdXRbMl0gPSBHICogRSAtIEggKiBDICsgSiAqIEE7XG4gIG91dFszXSA9IC0oRyAqIEQpICsgSCAqIEIgLSBJICogQTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBQZXJmb3JtcyBhIGxpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gdHdvIHZlYzQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWM0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCwgaW4gdGhlIHJhbmdlIFswLTFdLCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBsZXJwKG91dCwgYSwgYiwgdCkge1xuICB2YXIgYXggPSBhWzBdO1xuICB2YXIgYXkgPSBhWzFdO1xuICB2YXIgYXogPSBhWzJdO1xuICB2YXIgYXcgPSBhWzNdO1xuICBvdXRbMF0gPSBheCArIHQgKiAoYlswXSAtIGF4KTtcbiAgb3V0WzFdID0gYXkgKyB0ICogKGJbMV0gLSBheSk7XG4gIG91dFsyXSA9IGF6ICsgdCAqIChiWzJdIC0gYXopO1xuICBvdXRbM10gPSBhdyArIHQgKiAoYlszXSAtIGF3KTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBHZW5lcmF0ZXMgYSByYW5kb20gdmVjdG9yIHdpdGggdGhlIGdpdmVuIHNjYWxlXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBbc2NhbGVdIExlbmd0aCBvZiB0aGUgcmVzdWx0aW5nIHZlY3Rvci4gSWYgb21taXR0ZWQsIGEgdW5pdCB2ZWN0b3Igd2lsbCBiZSByZXR1cm5lZFxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcmFuZG9tKG91dCwgc2NhbGUpIHtcbiAgc2NhbGUgPSBzY2FsZSB8fCAxLjA7IC8vIE1hcnNhZ2xpYSwgR2VvcmdlLiBDaG9vc2luZyBhIFBvaW50IGZyb20gdGhlIFN1cmZhY2Ugb2YgYVxuICAvLyBTcGhlcmUuIEFubi4gTWF0aC4gU3RhdGlzdC4gNDMgKDE5NzIpLCBuby4gMiwgNjQ1LS02NDYuXG4gIC8vIGh0dHA6Ly9wcm9qZWN0ZXVjbGlkLm9yZy9ldWNsaWQuYW9tcy8xMTc3NjkyNjQ0O1xuXG4gIHZhciB2MSwgdjIsIHYzLCB2NDtcbiAgdmFyIHMxLCBzMjtcblxuICBkbyB7XG4gICAgdjEgPSBnbE1hdHJpeC5SQU5ET00oKSAqIDIgLSAxO1xuICAgIHYyID0gZ2xNYXRyaXguUkFORE9NKCkgKiAyIC0gMTtcbiAgICBzMSA9IHYxICogdjEgKyB2MiAqIHYyO1xuICB9IHdoaWxlIChzMSA+PSAxKTtcblxuICBkbyB7XG4gICAgdjMgPSBnbE1hdHJpeC5SQU5ET00oKSAqIDIgLSAxO1xuICAgIHY0ID0gZ2xNYXRyaXguUkFORE9NKCkgKiAyIC0gMTtcbiAgICBzMiA9IHYzICogdjMgKyB2NCAqIHY0O1xuICB9IHdoaWxlIChzMiA+PSAxKTtcblxuICB2YXIgZCA9IE1hdGguc3FydCgoMSAtIHMxKSAvIHMyKTtcbiAgb3V0WzBdID0gc2NhbGUgKiB2MTtcbiAgb3V0WzFdID0gc2NhbGUgKiB2MjtcbiAgb3V0WzJdID0gc2NhbGUgKiB2MyAqIGQ7XG4gIG91dFszXSA9IHNjYWxlICogdjQgKiBkO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzQgd2l0aCBhIG1hdDQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjNH0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjNH0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDR9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1NYXQ0KG91dCwgYSwgbSkge1xuICB2YXIgeCA9IGFbMF0sXG4gICAgICB5ID0gYVsxXSxcbiAgICAgIHogPSBhWzJdLFxuICAgICAgdyA9IGFbM107XG4gIG91dFswXSA9IG1bMF0gKiB4ICsgbVs0XSAqIHkgKyBtWzhdICogeiArIG1bMTJdICogdztcbiAgb3V0WzFdID0gbVsxXSAqIHggKyBtWzVdICogeSArIG1bOV0gKiB6ICsgbVsxM10gKiB3O1xuICBvdXRbMl0gPSBtWzJdICogeCArIG1bNl0gKiB5ICsgbVsxMF0gKiB6ICsgbVsxNF0gKiB3O1xuICBvdXRbM10gPSBtWzNdICogeCArIG1bN10gKiB5ICsgbVsxMV0gKiB6ICsgbVsxNV0gKiB3O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzQgd2l0aCBhIHF1YXRcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWM0fSBhIHRoZSB2ZWN0b3IgdG8gdHJhbnNmb3JtXHJcbiAqIEBwYXJhbSB7cXVhdH0gcSBxdWF0ZXJuaW9uIHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWM0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1RdWF0KG91dCwgYSwgcSkge1xuICB2YXIgeCA9IGFbMF0sXG4gICAgICB5ID0gYVsxXSxcbiAgICAgIHogPSBhWzJdO1xuICB2YXIgcXggPSBxWzBdLFxuICAgICAgcXkgPSBxWzFdLFxuICAgICAgcXogPSBxWzJdLFxuICAgICAgcXcgPSBxWzNdOyAvLyBjYWxjdWxhdGUgcXVhdCAqIHZlY1xuXG4gIHZhciBpeCA9IHF3ICogeCArIHF5ICogeiAtIHF6ICogeTtcbiAgdmFyIGl5ID0gcXcgKiB5ICsgcXogKiB4IC0gcXggKiB6O1xuICB2YXIgaXogPSBxdyAqIHogKyBxeCAqIHkgLSBxeSAqIHg7XG4gIHZhciBpdyA9IC1xeCAqIHggLSBxeSAqIHkgLSBxeiAqIHo7IC8vIGNhbGN1bGF0ZSByZXN1bHQgKiBpbnZlcnNlIHF1YXRcblxuICBvdXRbMF0gPSBpeCAqIHF3ICsgaXcgKiAtcXggKyBpeSAqIC1xeiAtIGl6ICogLXF5O1xuICBvdXRbMV0gPSBpeSAqIHF3ICsgaXcgKiAtcXkgKyBpeiAqIC1xeCAtIGl4ICogLXF6O1xuICBvdXRbMl0gPSBpeiAqIHF3ICsgaXcgKiAtcXogKyBpeCAqIC1xeSAtIGl5ICogLXF4O1xuICBvdXRbM10gPSBhWzNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNldCB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzQgdG8gemVyb1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7dmVjNH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gemVybyhvdXQpIHtcbiAgb3V0WzBdID0gMC4wO1xuICBvdXRbMV0gPSAwLjA7XG4gIG91dFsyXSA9IDAuMDtcbiAgb3V0WzNdID0gMC4wO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSB2ZWN0b3JcclxuICpcclxuICogQHBhcmFtIHt2ZWM0fSBhIHZlY3RvciB0byByZXByZXNlbnQgYXMgYSBzdHJpbmdcclxuICogQHJldHVybnMge1N0cmluZ30gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2ZWN0b3JcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzdHIoYSkge1xuICByZXR1cm4gXCJ2ZWM0KFwiICsgYVswXSArIFwiLCBcIiArIGFbMV0gKyBcIiwgXCIgKyBhWzJdICsgXCIsIFwiICsgYVszXSArIFwiKVwiO1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHZlY3RvcnMgaGF2ZSBleGFjdGx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uICh3aGVuIGNvbXBhcmVkIHdpdGggPT09KVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgVGhlIGZpcnN0IHZlY3Rvci5cclxuICogQHBhcmFtIHt2ZWM0fSBiIFRoZSBzZWNvbmQgdmVjdG9yLlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmVjdG9ycyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBleGFjdEVxdWFscyhhLCBiKSB7XG4gIHJldHVybiBhWzBdID09PSBiWzBdICYmIGFbMV0gPT09IGJbMV0gJiYgYVsyXSA9PT0gYlsyXSAmJiBhWzNdID09PSBiWzNdO1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHZlY3RvcnMgaGF2ZSBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzR9IGEgVGhlIGZpcnN0IHZlY3Rvci5cclxuICogQHBhcmFtIHt2ZWM0fSBiIFRoZSBzZWNvbmQgdmVjdG9yLlxyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmVjdG9ycyBhcmUgZXF1YWwsIGZhbHNlIG90aGVyd2lzZS5cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbHMoYSwgYikge1xuICB2YXIgYTAgPSBhWzBdLFxuICAgICAgYTEgPSBhWzFdLFxuICAgICAgYTIgPSBhWzJdLFxuICAgICAgYTMgPSBhWzNdO1xuICB2YXIgYjAgPSBiWzBdLFxuICAgICAgYjEgPSBiWzFdLFxuICAgICAgYjIgPSBiWzJdLFxuICAgICAgYjMgPSBiWzNdO1xuICByZXR1cm4gTWF0aC5hYnMoYTAgLSBiMCkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTApLCBNYXRoLmFicyhiMCkpICYmIE1hdGguYWJzKGExIC0gYjEpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGExKSwgTWF0aC5hYnMoYjEpKSAmJiBNYXRoLmFicyhhMiAtIGIyKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMiksIE1hdGguYWJzKGIyKSkgJiYgTWF0aC5hYnMoYTMgLSBiMykgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTMpLCBNYXRoLmFicyhiMykpO1xufVxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjNC5zdWJ0cmFjdH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHN1YiA9IHN1YnRyYWN0O1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjNC5tdWx0aXBseX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIG11bCA9IG11bHRpcGx5O1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjNC5kaXZpZGV9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBkaXYgPSBkaXZpZGU7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWM0LmRpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgZGlzdCA9IGRpc3RhbmNlO1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjNC5zcXVhcmVkRGlzdGFuY2V9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzcXJEaXN0ID0gc3F1YXJlZERpc3RhbmNlO1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjNC5sZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBsZW4gPSBsZW5ndGg7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWM0LnNxdWFyZWRMZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzcXJMZW4gPSBzcXVhcmVkTGVuZ3RoO1xuLyoqXHJcbiAqIFBlcmZvcm0gc29tZSBvcGVyYXRpb24gb3ZlciBhbiBhcnJheSBvZiB2ZWM0cy5cclxuICpcclxuICogQHBhcmFtIHtBcnJheX0gYSB0aGUgYXJyYXkgb2YgdmVjdG9ycyB0byBpdGVyYXRlIG92ZXJcclxuICogQHBhcmFtIHtOdW1iZXJ9IHN0cmlkZSBOdW1iZXIgb2YgZWxlbWVudHMgYmV0d2VlbiB0aGUgc3RhcnQgb2YgZWFjaCB2ZWM0LiBJZiAwIGFzc3VtZXMgdGlnaHRseSBwYWNrZWRcclxuICogQHBhcmFtIHtOdW1iZXJ9IG9mZnNldCBOdW1iZXIgb2YgZWxlbWVudHMgdG8gc2tpcCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheVxyXG4gKiBAcGFyYW0ge051bWJlcn0gY291bnQgTnVtYmVyIG9mIHZlYzRzIHRvIGl0ZXJhdGUgb3Zlci4gSWYgMCBpdGVyYXRlcyBvdmVyIGVudGlyZSBhcnJheVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBGdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIHZlY3RvciBpbiB0aGUgYXJyYXlcclxuICogQHBhcmFtIHtPYmplY3R9IFthcmddIGFkZGl0aW9uYWwgYXJndW1lbnQgdG8gcGFzcyB0byBmblxyXG4gKiBAcmV0dXJucyB7QXJyYXl9IGFcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGZvckVhY2ggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB2ZWMgPSBjcmVhdGUoKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChhLCBzdHJpZGUsIG9mZnNldCwgY291bnQsIGZuLCBhcmcpIHtcbiAgICB2YXIgaSwgbDtcblxuICAgIGlmICghc3RyaWRlKSB7XG4gICAgICBzdHJpZGUgPSA0O1xuICAgIH1cblxuICAgIGlmICghb2Zmc2V0KSB7XG4gICAgICBvZmZzZXQgPSAwO1xuICAgIH1cblxuICAgIGlmIChjb3VudCkge1xuICAgICAgbCA9IE1hdGgubWluKGNvdW50ICogc3RyaWRlICsgb2Zmc2V0LCBhLmxlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGwgPSBhLmxlbmd0aDtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSBvZmZzZXQ7IGkgPCBsOyBpICs9IHN0cmlkZSkge1xuICAgICAgdmVjWzBdID0gYVtpXTtcbiAgICAgIHZlY1sxXSA9IGFbaSArIDFdO1xuICAgICAgdmVjWzJdID0gYVtpICsgMl07XG4gICAgICB2ZWNbM10gPSBhW2kgKyAzXTtcbiAgICAgIGZuKHZlYywgdmVjLCBhcmcpO1xuICAgICAgYVtpXSA9IHZlY1swXTtcbiAgICAgIGFbaSArIDFdID0gdmVjWzFdO1xuICAgICAgYVtpICsgMl0gPSB2ZWNbMl07XG4gICAgICBhW2kgKyAzXSA9IHZlY1szXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYTtcbiAgfTtcbn0oKTsiLCJpbXBvcnQgKiBhcyBnbE1hdHJpeCBmcm9tIFwiLi9jb21tb24uanNcIjtcbmltcG9ydCAqIGFzIG1hdDMgZnJvbSBcIi4vbWF0My5qc1wiO1xuaW1wb3J0ICogYXMgdmVjMyBmcm9tIFwiLi92ZWMzLmpzXCI7XG5pbXBvcnQgKiBhcyB2ZWM0IGZyb20gXCIuL3ZlYzQuanNcIjtcbi8qKlxyXG4gKiBRdWF0ZXJuaW9uXHJcbiAqIEBtb2R1bGUgcXVhdFxyXG4gKi9cblxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgaWRlbnRpdHkgcXVhdFxyXG4gKlxyXG4gKiBAcmV0dXJucyB7cXVhdH0gYSBuZXcgcXVhdGVybmlvblxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDQpO1xuXG4gIGlmIChnbE1hdHJpeC5BUlJBWV9UWVBFICE9IEZsb2F0MzJBcnJheSkge1xuICAgIG91dFswXSA9IDA7XG4gICAgb3V0WzFdID0gMDtcbiAgICBvdXRbMl0gPSAwO1xuICB9XG5cbiAgb3V0WzNdID0gMTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTZXQgYSBxdWF0IHRvIHRoZSBpZGVudGl0eSBxdWF0ZXJuaW9uXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHkob3V0KSB7XG4gIG91dFswXSA9IDA7XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDE7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2V0cyBhIHF1YXQgZnJvbSB0aGUgZ2l2ZW4gYW5nbGUgYW5kIHJvdGF0aW9uIGF4aXMsXHJcbiAqIHRoZW4gcmV0dXJucyBpdC5cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7dmVjM30gYXhpcyB0aGUgYXhpcyBhcm91bmQgd2hpY2ggdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSByYWQgdGhlIGFuZ2xlIGluIHJhZGlhbnNcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiovXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRBeGlzQW5nbGUob3V0LCBheGlzLCByYWQpIHtcbiAgcmFkID0gcmFkICogMC41O1xuICB2YXIgcyA9IE1hdGguc2luKHJhZCk7XG4gIG91dFswXSA9IHMgKiBheGlzWzBdO1xuICBvdXRbMV0gPSBzICogYXhpc1sxXTtcbiAgb3V0WzJdID0gcyAqIGF4aXNbMl07XG4gIG91dFszXSA9IE1hdGguY29zKHJhZCk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2V0cyB0aGUgcm90YXRpb24gYXhpcyBhbmQgYW5nbGUgZm9yIGEgZ2l2ZW5cclxuICogIHF1YXRlcm5pb24uIElmIGEgcXVhdGVybmlvbiBpcyBjcmVhdGVkIHdpdGhcclxuICogIHNldEF4aXNBbmdsZSwgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gdGhlIHNhbWVcclxuICogIHZhbHVlcyBhcyBwcm92aWRpZWQgaW4gdGhlIG9yaWdpbmFsIHBhcmFtZXRlciBsaXN0XHJcbiAqICBPUiBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB2YWx1ZXMuXHJcbiAqIEV4YW1wbGU6IFRoZSBxdWF0ZXJuaW9uIGZvcm1lZCBieSBheGlzIFswLCAwLCAxXSBhbmRcclxuICogIGFuZ2xlIC05MCBpcyB0aGUgc2FtZSBhcyB0aGUgcXVhdGVybmlvbiBmb3JtZWQgYnlcclxuICogIFswLCAwLCAxXSBhbmQgMjcwLiBUaGlzIG1ldGhvZCBmYXZvcnMgdGhlIGxhdHRlci5cclxuICogQHBhcmFtICB7dmVjM30gb3V0X2F4aXMgIFZlY3RvciByZWNlaXZpbmcgdGhlIGF4aXMgb2Ygcm90YXRpb25cclxuICogQHBhcmFtICB7cXVhdH0gcSAgICAgUXVhdGVybmlvbiB0byBiZSBkZWNvbXBvc2VkXHJcbiAqIEByZXR1cm4ge051bWJlcn0gICAgIEFuZ2xlLCBpbiByYWRpYW5zLCBvZiB0aGUgcm90YXRpb25cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBeGlzQW5nbGUob3V0X2F4aXMsIHEpIHtcbiAgdmFyIHJhZCA9IE1hdGguYWNvcyhxWzNdKSAqIDIuMDtcbiAgdmFyIHMgPSBNYXRoLnNpbihyYWQgLyAyLjApO1xuXG4gIGlmIChzID4gZ2xNYXRyaXguRVBTSUxPTikge1xuICAgIG91dF9heGlzWzBdID0gcVswXSAvIHM7XG4gICAgb3V0X2F4aXNbMV0gPSBxWzFdIC8gcztcbiAgICBvdXRfYXhpc1syXSA9IHFbMl0gLyBzO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIHMgaXMgemVybywgcmV0dXJuIGFueSBheGlzIChubyByb3RhdGlvbiAtIGF4aXMgZG9lcyBub3QgbWF0dGVyKVxuICAgIG91dF9heGlzWzBdID0gMTtcbiAgICBvdXRfYXhpc1sxXSA9IDA7XG4gICAgb3V0X2F4aXNbMl0gPSAwO1xuICB9XG5cbiAgcmV0dXJuIHJhZDtcbn1cbi8qKlxyXG4gKiBHZXRzIHRoZSBhbmd1bGFyIGRpc3RhbmNlIGJldHdlZW4gdHdvIHVuaXQgcXVhdGVybmlvbnNcclxuICpcclxuICogQHBhcmFtICB7cXVhdH0gYSAgICAgT3JpZ2luIHVuaXQgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0gIHtxdWF0fSBiICAgICBEZXN0aW5hdGlvbiB1bml0IHF1YXRlcm5pb25cclxuICogQHJldHVybiB7TnVtYmVyfSAgICAgQW5nbGUsIGluIHJhZGlhbnMsIGJldHdlZW4gdGhlIHR3byBxdWF0ZXJuaW9uc1xyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFuZ2xlKGEsIGIpIHtcbiAgdmFyIGRvdHByb2R1Y3QgPSBkb3QoYSwgYik7XG4gIHJldHVybiBNYXRoLmFjb3MoMiAqIGRvdHByb2R1Y3QgKiBkb3Rwcm9kdWN0IC0gMSk7XG59XG4vKipcclxuICogTXVsdGlwbGllcyB0d28gcXVhdCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtxdWF0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHkob3V0LCBhLCBiKSB7XG4gIHZhciBheCA9IGFbMF0sXG4gICAgICBheSA9IGFbMV0sXG4gICAgICBheiA9IGFbMl0sXG4gICAgICBhdyA9IGFbM107XG4gIHZhciBieCA9IGJbMF0sXG4gICAgICBieSA9IGJbMV0sXG4gICAgICBieiA9IGJbMl0sXG4gICAgICBidyA9IGJbM107XG4gIG91dFswXSA9IGF4ICogYncgKyBhdyAqIGJ4ICsgYXkgKiBieiAtIGF6ICogYnk7XG4gIG91dFsxXSA9IGF5ICogYncgKyBhdyAqIGJ5ICsgYXogKiBieCAtIGF4ICogYno7XG4gIG91dFsyXSA9IGF6ICogYncgKyBhdyAqIGJ6ICsgYXggKiBieSAtIGF5ICogYng7XG4gIG91dFszXSA9IGF3ICogYncgLSBheCAqIGJ4IC0gYXkgKiBieSAtIGF6ICogYno7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlcyBhIHF1YXRlcm5pb24gYnkgdGhlIGdpdmVuIGFuZ2xlIGFib3V0IHRoZSBYIGF4aXNcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgcXVhdCByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdCB0byByb3RhdGVcclxuICogQHBhcmFtIHtudW1iZXJ9IHJhZCBhbmdsZSAoaW4gcmFkaWFucykgdG8gcm90YXRlXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGVYKG91dCwgYSwgcmFkKSB7XG4gIHJhZCAqPSAwLjU7XG4gIHZhciBheCA9IGFbMF0sXG4gICAgICBheSA9IGFbMV0sXG4gICAgICBheiA9IGFbMl0sXG4gICAgICBhdyA9IGFbM107XG4gIHZhciBieCA9IE1hdGguc2luKHJhZCksXG4gICAgICBidyA9IE1hdGguY29zKHJhZCk7XG4gIG91dFswXSA9IGF4ICogYncgKyBhdyAqIGJ4O1xuICBvdXRbMV0gPSBheSAqIGJ3ICsgYXogKiBieDtcbiAgb3V0WzJdID0gYXogKiBidyAtIGF5ICogYng7XG4gIG91dFszXSA9IGF3ICogYncgLSBheCAqIGJ4O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBxdWF0ZXJuaW9uIGJ5IHRoZSBnaXZlbiBhbmdsZSBhYm91dCB0aGUgWSBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHF1YXQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXQgdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByYWQgYW5nbGUgKGluIHJhZGlhbnMpIHRvIHJvdGF0ZVxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlWShvdXQsIGEsIHJhZCkge1xuICByYWQgKj0gMC41O1xuICB2YXIgYXggPSBhWzBdLFxuICAgICAgYXkgPSBhWzFdLFxuICAgICAgYXogPSBhWzJdLFxuICAgICAgYXcgPSBhWzNdO1xuICB2YXIgYnkgPSBNYXRoLnNpbihyYWQpLFxuICAgICAgYncgPSBNYXRoLmNvcyhyYWQpO1xuICBvdXRbMF0gPSBheCAqIGJ3IC0gYXogKiBieTtcbiAgb3V0WzFdID0gYXkgKiBidyArIGF3ICogYnk7XG4gIG91dFsyXSA9IGF6ICogYncgKyBheCAqIGJ5O1xuICBvdXRbM10gPSBhdyAqIGJ3IC0gYXkgKiBieTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGVzIGEgcXVhdGVybmlvbiBieSB0aGUgZ2l2ZW4gYW5nbGUgYWJvdXQgdGhlIFogYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCBxdWF0IHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge251bWJlcn0gcmFkIGFuZ2xlIChpbiByYWRpYW5zKSB0byByb3RhdGVcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZVoob3V0LCBhLCByYWQpIHtcbiAgcmFkICo9IDAuNTtcbiAgdmFyIGF4ID0gYVswXSxcbiAgICAgIGF5ID0gYVsxXSxcbiAgICAgIGF6ID0gYVsyXSxcbiAgICAgIGF3ID0gYVszXTtcbiAgdmFyIGJ6ID0gTWF0aC5zaW4ocmFkKSxcbiAgICAgIGJ3ID0gTWF0aC5jb3MocmFkKTtcbiAgb3V0WzBdID0gYXggKiBidyArIGF5ICogYno7XG4gIG91dFsxXSA9IGF5ICogYncgLSBheCAqIGJ6O1xuICBvdXRbMl0gPSBheiAqIGJ3ICsgYXcgKiBiejtcbiAgb3V0WzNdID0gYXcgKiBidyAtIGF6ICogYno7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgVyBjb21wb25lbnQgb2YgYSBxdWF0IGZyb20gdGhlIFgsIFksIGFuZCBaIGNvbXBvbmVudHMuXHJcbiAqIEFzc3VtZXMgdGhhdCBxdWF0ZXJuaW9uIGlzIDEgdW5pdCBpbiBsZW5ndGguXHJcbiAqIEFueSBleGlzdGluZyBXIGNvbXBvbmVudCB3aWxsIGJlIGlnbm9yZWQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdCB0byBjYWxjdWxhdGUgVyBjb21wb25lbnQgb2ZcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZVcob3V0LCBhKSB7XG4gIHZhciB4ID0gYVswXSxcbiAgICAgIHkgPSBhWzFdLFxuICAgICAgeiA9IGFbMl07XG4gIG91dFswXSA9IHg7XG4gIG91dFsxXSA9IHk7XG4gIG91dFsyXSA9IHo7XG4gIG91dFszXSA9IE1hdGguc3FydChNYXRoLmFicygxLjAgLSB4ICogeCAtIHkgKiB5IC0geiAqIHopKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGUgdGhlIGV4cG9uZW50aWFsIG9mIGEgdW5pdCBxdWF0ZXJuaW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXQgdG8gY2FsY3VsYXRlIHRoZSBleHBvbmVudGlhbCBvZlxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXhwKG91dCwgYSkge1xuICB2YXIgeCA9IGFbMF0sXG4gICAgICB5ID0gYVsxXSxcbiAgICAgIHogPSBhWzJdLFxuICAgICAgdyA9IGFbM107XG4gIHZhciByID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkgKyB6ICogeik7XG4gIHZhciBldCA9IE1hdGguZXhwKHcpO1xuICB2YXIgcyA9IHIgPiAwID8gZXQgKiBNYXRoLnNpbihyKSAvIHIgOiAwO1xuICBvdXRbMF0gPSB4ICogcztcbiAgb3V0WzFdID0geSAqIHM7XG4gIG91dFsyXSA9IHogKiBzO1xuICBvdXRbM10gPSBldCAqIE1hdGguY29zKHIpO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZSB0aGUgbmF0dXJhbCBsb2dhcml0aG0gb2YgYSB1bml0IHF1YXRlcm5pb24uXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdCB0byBjYWxjdWxhdGUgdGhlIGV4cG9uZW50aWFsIG9mXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBsbihvdXQsIGEpIHtcbiAgdmFyIHggPSBhWzBdLFxuICAgICAgeSA9IGFbMV0sXG4gICAgICB6ID0gYVsyXSxcbiAgICAgIHcgPSBhWzNdO1xuICB2YXIgciA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5ICsgeiAqIHopO1xuICB2YXIgdCA9IHIgPiAwID8gTWF0aC5hdGFuMihyLCB3KSAvIHIgOiAwO1xuICBvdXRbMF0gPSB4ICogdDtcbiAgb3V0WzFdID0geSAqIHQ7XG4gIG91dFsyXSA9IHogKiB0O1xuICBvdXRbM10gPSAwLjUgKiBNYXRoLmxvZyh4ICogeCArIHkgKiB5ICsgeiAqIHogKyB3ICogdyk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlIHRoZSBzY2FsYXIgcG93ZXIgb2YgYSB1bml0IHF1YXRlcm5pb24uXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdCB0byBjYWxjdWxhdGUgdGhlIGV4cG9uZW50aWFsIG9mXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBiIGFtb3VudCB0byBzY2FsZSB0aGUgcXVhdGVybmlvbiBieVxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcG93KG91dCwgYSwgYikge1xuICBsbihvdXQsIGEpO1xuICBzY2FsZShvdXQsIG91dCwgYik7XG4gIGV4cChvdXQsIG91dCk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUGVyZm9ybXMgYSBzcGhlcmljYWwgbGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiB0d28gcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7cXVhdH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQsIGluIHRoZSByYW5nZSBbMC0xXSwgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2xlcnAob3V0LCBhLCBiLCB0KSB7XG4gIC8vIGJlbmNobWFya3M6XG4gIC8vICAgIGh0dHA6Ly9qc3BlcmYuY29tL3F1YXRlcm5pb24tc2xlcnAtaW1wbGVtZW50YXRpb25zXG4gIHZhciBheCA9IGFbMF0sXG4gICAgICBheSA9IGFbMV0sXG4gICAgICBheiA9IGFbMl0sXG4gICAgICBhdyA9IGFbM107XG4gIHZhciBieCA9IGJbMF0sXG4gICAgICBieSA9IGJbMV0sXG4gICAgICBieiA9IGJbMl0sXG4gICAgICBidyA9IGJbM107XG4gIHZhciBvbWVnYSwgY29zb20sIHNpbm9tLCBzY2FsZTAsIHNjYWxlMTsgLy8gY2FsYyBjb3NpbmVcblxuICBjb3NvbSA9IGF4ICogYnggKyBheSAqIGJ5ICsgYXogKiBieiArIGF3ICogYnc7IC8vIGFkanVzdCBzaWducyAoaWYgbmVjZXNzYXJ5KVxuXG4gIGlmIChjb3NvbSA8IDAuMCkge1xuICAgIGNvc29tID0gLWNvc29tO1xuICAgIGJ4ID0gLWJ4O1xuICAgIGJ5ID0gLWJ5O1xuICAgIGJ6ID0gLWJ6O1xuICAgIGJ3ID0gLWJ3O1xuICB9IC8vIGNhbGN1bGF0ZSBjb2VmZmljaWVudHNcblxuXG4gIGlmICgxLjAgLSBjb3NvbSA+IGdsTWF0cml4LkVQU0lMT04pIHtcbiAgICAvLyBzdGFuZGFyZCBjYXNlIChzbGVycClcbiAgICBvbWVnYSA9IE1hdGguYWNvcyhjb3NvbSk7XG4gICAgc2lub20gPSBNYXRoLnNpbihvbWVnYSk7XG4gICAgc2NhbGUwID0gTWF0aC5zaW4oKDEuMCAtIHQpICogb21lZ2EpIC8gc2lub207XG4gICAgc2NhbGUxID0gTWF0aC5zaW4odCAqIG9tZWdhKSAvIHNpbm9tO1xuICB9IGVsc2Uge1xuICAgIC8vIFwiZnJvbVwiIGFuZCBcInRvXCIgcXVhdGVybmlvbnMgYXJlIHZlcnkgY2xvc2VcbiAgICAvLyAgLi4uIHNvIHdlIGNhbiBkbyBhIGxpbmVhciBpbnRlcnBvbGF0aW9uXG4gICAgc2NhbGUwID0gMS4wIC0gdDtcbiAgICBzY2FsZTEgPSB0O1xuICB9IC8vIGNhbGN1bGF0ZSBmaW5hbCB2YWx1ZXNcblxuXG4gIG91dFswXSA9IHNjYWxlMCAqIGF4ICsgc2NhbGUxICogYng7XG4gIG91dFsxXSA9IHNjYWxlMCAqIGF5ICsgc2NhbGUxICogYnk7XG4gIG91dFsyXSA9IHNjYWxlMCAqIGF6ICsgc2NhbGUxICogYno7XG4gIG91dFszXSA9IHNjYWxlMCAqIGF3ICsgc2NhbGUxICogYnc7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2VuZXJhdGVzIGEgcmFuZG9tIHVuaXQgcXVhdGVybmlvblxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbShvdXQpIHtcbiAgLy8gSW1wbGVtZW50YXRpb24gb2YgaHR0cDovL3BsYW5uaW5nLmNzLnVpdWMuZWR1L25vZGUxOTguaHRtbFxuICAvLyBUT0RPOiBDYWxsaW5nIHJhbmRvbSAzIHRpbWVzIGlzIHByb2JhYmx5IG5vdCB0aGUgZmFzdGVzdCBzb2x1dGlvblxuICB2YXIgdTEgPSBnbE1hdHJpeC5SQU5ET00oKTtcbiAgdmFyIHUyID0gZ2xNYXRyaXguUkFORE9NKCk7XG4gIHZhciB1MyA9IGdsTWF0cml4LlJBTkRPTSgpO1xuICB2YXIgc3FydDFNaW51c1UxID0gTWF0aC5zcXJ0KDEgLSB1MSk7XG4gIHZhciBzcXJ0VTEgPSBNYXRoLnNxcnQodTEpO1xuICBvdXRbMF0gPSBzcXJ0MU1pbnVzVTEgKiBNYXRoLnNpbigyLjAgKiBNYXRoLlBJICogdTIpO1xuICBvdXRbMV0gPSBzcXJ0MU1pbnVzVTEgKiBNYXRoLmNvcygyLjAgKiBNYXRoLlBJICogdTIpO1xuICBvdXRbMl0gPSBzcXJ0VTEgKiBNYXRoLnNpbigyLjAgKiBNYXRoLlBJICogdTMpO1xuICBvdXRbM10gPSBzcXJ0VTEgKiBNYXRoLmNvcygyLjAgKiBNYXRoLlBJICogdTMpO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGludmVyc2Ugb2YgYSBxdWF0XHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdCB0byBjYWxjdWxhdGUgaW52ZXJzZSBvZlxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJ0KG91dCwgYSkge1xuICB2YXIgYTAgPSBhWzBdLFxuICAgICAgYTEgPSBhWzFdLFxuICAgICAgYTIgPSBhWzJdLFxuICAgICAgYTMgPSBhWzNdO1xuICB2YXIgZG90ID0gYTAgKiBhMCArIGExICogYTEgKyBhMiAqIGEyICsgYTMgKiBhMztcbiAgdmFyIGludkRvdCA9IGRvdCA/IDEuMCAvIGRvdCA6IDA7IC8vIFRPRE86IFdvdWxkIGJlIGZhc3RlciB0byByZXR1cm4gWzAsMCwwLDBdIGltbWVkaWF0ZWx5IGlmIGRvdCA9PSAwXG5cbiAgb3V0WzBdID0gLWEwICogaW52RG90O1xuICBvdXRbMV0gPSAtYTEgKiBpbnZEb3Q7XG4gIG91dFsyXSA9IC1hMiAqIGludkRvdDtcbiAgb3V0WzNdID0gYTMgKiBpbnZEb3Q7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgY29uanVnYXRlIG9mIGEgcXVhdFxyXG4gKiBJZiB0aGUgcXVhdGVybmlvbiBpcyBub3JtYWxpemVkLCB0aGlzIGZ1bmN0aW9uIGlzIGZhc3RlciB0aGFuIHF1YXQuaW52ZXJzZSBhbmQgcHJvZHVjZXMgdGhlIHNhbWUgcmVzdWx0LlxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHF1YXQgdG8gY2FsY3VsYXRlIGNvbmp1Z2F0ZSBvZlxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY29uanVnYXRlKG91dCwgYSkge1xuICBvdXRbMF0gPSAtYVswXTtcbiAgb3V0WzFdID0gLWFbMV07XG4gIG91dFsyXSA9IC1hWzJdO1xuICBvdXRbM10gPSBhWzNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBxdWF0ZXJuaW9uIGZyb20gdGhlIGdpdmVuIDN4MyByb3RhdGlvbiBtYXRyaXguXHJcbiAqXHJcbiAqIE5PVEU6IFRoZSByZXN1bHRhbnQgcXVhdGVybmlvbiBpcyBub3Qgbm9ybWFsaXplZCwgc28geW91IHNob3VsZCBiZSBzdXJlXHJcbiAqIHRvIHJlbm9ybWFsaXplIHRoZSBxdWF0ZXJuaW9uIHlvdXJzZWxmIHdoZXJlIG5lY2Vzc2FyeS5cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7bWF0M30gbSByb3RhdGlvbiBtYXRyaXhcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tTWF0MyhvdXQsIG0pIHtcbiAgLy8gQWxnb3JpdGhtIGluIEtlbiBTaG9lbWFrZSdzIGFydGljbGUgaW4gMTk4NyBTSUdHUkFQSCBjb3Vyc2Ugbm90ZXNcbiAgLy8gYXJ0aWNsZSBcIlF1YXRlcm5pb24gQ2FsY3VsdXMgYW5kIEZhc3QgQW5pbWF0aW9uXCIuXG4gIHZhciBmVHJhY2UgPSBtWzBdICsgbVs0XSArIG1bOF07XG4gIHZhciBmUm9vdDtcblxuICBpZiAoZlRyYWNlID4gMC4wKSB7XG4gICAgLy8gfHd8ID4gMS8yLCBtYXkgYXMgd2VsbCBjaG9vc2UgdyA+IDEvMlxuICAgIGZSb290ID0gTWF0aC5zcXJ0KGZUcmFjZSArIDEuMCk7IC8vIDJ3XG5cbiAgICBvdXRbM10gPSAwLjUgKiBmUm9vdDtcbiAgICBmUm9vdCA9IDAuNSAvIGZSb290OyAvLyAxLyg0dylcblxuICAgIG91dFswXSA9IChtWzVdIC0gbVs3XSkgKiBmUm9vdDtcbiAgICBvdXRbMV0gPSAobVs2XSAtIG1bMl0pICogZlJvb3Q7XG4gICAgb3V0WzJdID0gKG1bMV0gLSBtWzNdKSAqIGZSb290O1xuICB9IGVsc2Uge1xuICAgIC8vIHx3fCA8PSAxLzJcbiAgICB2YXIgaSA9IDA7XG4gICAgaWYgKG1bNF0gPiBtWzBdKSBpID0gMTtcbiAgICBpZiAobVs4XSA+IG1baSAqIDMgKyBpXSkgaSA9IDI7XG4gICAgdmFyIGogPSAoaSArIDEpICUgMztcbiAgICB2YXIgayA9IChpICsgMikgJSAzO1xuICAgIGZSb290ID0gTWF0aC5zcXJ0KG1baSAqIDMgKyBpXSAtIG1baiAqIDMgKyBqXSAtIG1bayAqIDMgKyBrXSArIDEuMCk7XG4gICAgb3V0W2ldID0gMC41ICogZlJvb3Q7XG4gICAgZlJvb3QgPSAwLjUgLyBmUm9vdDtcbiAgICBvdXRbM10gPSAobVtqICogMyArIGtdIC0gbVtrICogMyArIGpdKSAqIGZSb290O1xuICAgIG91dFtqXSA9IChtW2ogKiAzICsgaV0gKyBtW2kgKiAzICsgal0pICogZlJvb3Q7XG4gICAgb3V0W2tdID0gKG1bayAqIDMgKyBpXSArIG1baSAqIDMgKyBrXSkgKiBmUm9vdDtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIHF1YXRlcm5pb24gZnJvbSB0aGUgZ2l2ZW4gZXVsZXIgYW5nbGUgeCwgeSwgei5cclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7eH0gQW5nbGUgdG8gcm90YXRlIGFyb3VuZCBYIGF4aXMgaW4gZGVncmVlcy5cclxuICogQHBhcmFtIHt5fSBBbmdsZSB0byByb3RhdGUgYXJvdW5kIFkgYXhpcyBpbiBkZWdyZWVzLlxyXG4gKiBAcGFyYW0ge3p9IEFuZ2xlIHRvIHJvdGF0ZSBhcm91bmQgWiBheGlzIGluIGRlZ3JlZXMuXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbUV1bGVyKG91dCwgeCwgeSwgeikge1xuICB2YXIgaGFsZlRvUmFkID0gMC41ICogTWF0aC5QSSAvIDE4MC4wO1xuICB4ICo9IGhhbGZUb1JhZDtcbiAgeSAqPSBoYWxmVG9SYWQ7XG4gIHogKj0gaGFsZlRvUmFkO1xuICB2YXIgc3ggPSBNYXRoLnNpbih4KTtcbiAgdmFyIGN4ID0gTWF0aC5jb3MoeCk7XG4gIHZhciBzeSA9IE1hdGguc2luKHkpO1xuICB2YXIgY3kgPSBNYXRoLmNvcyh5KTtcbiAgdmFyIHN6ID0gTWF0aC5zaW4oeik7XG4gIHZhciBjeiA9IE1hdGguY29zKHopO1xuICBvdXRbMF0gPSBzeCAqIGN5ICogY3ogLSBjeCAqIHN5ICogc3o7XG4gIG91dFsxXSA9IGN4ICogc3kgKiBjeiArIHN4ICogY3kgKiBzejtcbiAgb3V0WzJdID0gY3ggKiBjeSAqIHN6IC0gc3ggKiBzeSAqIGN6O1xuICBvdXRbM10gPSBjeCAqIGN5ICogY3ogKyBzeCAqIHN5ICogc3o7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHF1YXRlbmlvblxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdmVjdG9yIHRvIHJlcHJlc2VudCBhcyBhIHN0cmluZ1xyXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZlY3RvclxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cihhKSB7XG4gIHJldHVybiBcInF1YXQoXCIgKyBhWzBdICsgXCIsIFwiICsgYVsxXSArIFwiLCBcIiArIGFbMl0gKyBcIiwgXCIgKyBhWzNdICsgXCIpXCI7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBxdWF0IGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgcXVhdGVybmlvblxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgcXVhdGVybmlvbiB0byBjbG9uZVxyXG4gKiBAcmV0dXJucyB7cXVhdH0gYSBuZXcgcXVhdGVybmlvblxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgY2xvbmUgPSB2ZWM0LmNsb25lO1xuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgcXVhdCBpbml0aWFsaXplZCB3aXRoIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHcgVyBjb21wb25lbnRcclxuICogQHJldHVybnMge3F1YXR9IGEgbmV3IHF1YXRlcm5pb25cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGZyb21WYWx1ZXMgPSB2ZWM0LmZyb21WYWx1ZXM7XG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIHF1YXQgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSBzb3VyY2UgcXVhdGVybmlvblxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBjb3B5ID0gdmVjNC5jb3B5O1xuLyoqXHJcbiAqIFNldCB0aGUgY29tcG9uZW50cyBvZiBhIHF1YXQgdG8gdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHogWiBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHcgVyBjb21wb25lbnRcclxuICogQHJldHVybnMge3F1YXR9IG91dFxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc2V0ID0gdmVjNC5zZXQ7XG4vKipcclxuICogQWRkcyB0d28gcXVhdCdzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtxdWF0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBhZGQgPSB2ZWM0LmFkZDtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHF1YXQubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBtdWwgPSBtdWx0aXBseTtcbi8qKlxyXG4gKiBTY2FsZXMgYSBxdWF0IGJ5IGEgc2NhbGFyIG51bWJlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdGhlIHZlY3RvciB0byBzY2FsZVxyXG4gKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIHZlY3RvciBieVxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzY2FsZSA9IHZlYzQuc2NhbGU7XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgZG90IHByb2R1Y3Qgb2YgdHdvIHF1YXQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtxdWF0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkb3QgcHJvZHVjdCBvZiBhIGFuZCBiXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBkb3QgPSB2ZWM0LmRvdDtcbi8qKlxyXG4gKiBQZXJmb3JtcyBhIGxpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gdHdvIHF1YXQnc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXR9IG91dCB0aGUgcmVjZWl2aW5nIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7cXVhdH0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHQgaW50ZXJwb2xhdGlvbiBhbW91bnQsIGluIHRoZSByYW5nZSBbMC0xXSwgYmV0d2VlbiB0aGUgdHdvIGlucHV0c1xyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBsZXJwID0gdmVjNC5sZXJwO1xuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGxlbmd0aCBvZiBhIHF1YXRcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBhIHZlY3RvciB0byBjYWxjdWxhdGUgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGxlbmd0aCBvZiBhXHJcbiAqL1xuXG5leHBvcnQgdmFyIGxlbmd0aCA9IHZlYzQubGVuZ3RoO1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgcXVhdC5sZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBsZW4gPSBsZW5ndGg7XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBsZW5ndGggb2YgYSBxdWF0XHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSB2ZWN0b3IgdG8gY2FsY3VsYXRlIHNxdWFyZWQgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgbGVuZ3RoIG9mIGFcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHNxdWFyZWRMZW5ndGggPSB2ZWM0LnNxdWFyZWRMZW5ndGg7XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayBxdWF0LnNxdWFyZWRMZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzcXJMZW4gPSBzcXVhcmVkTGVuZ3RoO1xuLyoqXHJcbiAqIE5vcm1hbGl6ZSBhIHF1YXRcclxuICpcclxuICogQHBhcmFtIHtxdWF0fSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBxdWF0ZXJuaW9uIHRvIG5vcm1hbGl6ZVxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBub3JtYWxpemUgPSB2ZWM0Lm5vcm1hbGl6ZTtcbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBxdWF0ZXJuaW9ucyBoYXZlIGV4YWN0bHkgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgcG9zaXRpb24gKHdoZW4gY29tcGFyZWQgd2l0aCA9PT0pXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBUaGUgZmlyc3QgcXVhdGVybmlvbi5cclxuICogQHBhcmFtIHtxdWF0fSBiIFRoZSBzZWNvbmQgcXVhdGVybmlvbi5cclxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIHZlY3RvcnMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xuXG5leHBvcnQgdmFyIGV4YWN0RXF1YWxzID0gdmVjNC5leGFjdEVxdWFscztcbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBxdWF0ZXJuaW9ucyBoYXZlIGFwcHJveGltYXRlbHkgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgcG9zaXRpb24uXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gYSBUaGUgZmlyc3QgdmVjdG9yLlxyXG4gKiBAcGFyYW0ge3F1YXR9IGIgVGhlIHNlY29uZCB2ZWN0b3IuXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSB2ZWN0b3JzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IHZhciBlcXVhbHMgPSB2ZWM0LmVxdWFscztcbi8qKlxyXG4gKiBTZXRzIGEgcXVhdGVybmlvbiB0byByZXByZXNlbnQgdGhlIHNob3J0ZXN0IHJvdGF0aW9uIGZyb20gb25lXHJcbiAqIHZlY3RvciB0byBhbm90aGVyLlxyXG4gKlxyXG4gKiBCb3RoIHZlY3RvcnMgYXJlIGFzc3VtZWQgdG8gYmUgdW5pdCBsZW5ndGguXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvbi5cclxuICogQHBhcmFtIHt2ZWMzfSBhIHRoZSBpbml0aWFsIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzN9IGIgdGhlIGRlc3RpbmF0aW9uIHZlY3RvclxyXG4gKiBAcmV0dXJucyB7cXVhdH0gb3V0XHJcbiAqL1xuXG5leHBvcnQgdmFyIHJvdGF0aW9uVG8gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB0bXB2ZWMzID0gdmVjMy5jcmVhdGUoKTtcbiAgdmFyIHhVbml0VmVjMyA9IHZlYzMuZnJvbVZhbHVlcygxLCAwLCAwKTtcbiAgdmFyIHlVbml0VmVjMyA9IHZlYzMuZnJvbVZhbHVlcygwLCAxLCAwKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChvdXQsIGEsIGIpIHtcbiAgICB2YXIgZG90ID0gdmVjMy5kb3QoYSwgYik7XG5cbiAgICBpZiAoZG90IDwgLTAuOTk5OTk5KSB7XG4gICAgICB2ZWMzLmNyb3NzKHRtcHZlYzMsIHhVbml0VmVjMywgYSk7XG4gICAgICBpZiAodmVjMy5sZW4odG1wdmVjMykgPCAwLjAwMDAwMSkgdmVjMy5jcm9zcyh0bXB2ZWMzLCB5VW5pdFZlYzMsIGEpO1xuICAgICAgdmVjMy5ub3JtYWxpemUodG1wdmVjMywgdG1wdmVjMyk7XG4gICAgICBzZXRBeGlzQW5nbGUob3V0LCB0bXB2ZWMzLCBNYXRoLlBJKTtcbiAgICAgIHJldHVybiBvdXQ7XG4gICAgfSBlbHNlIGlmIChkb3QgPiAwLjk5OTk5OSkge1xuICAgICAgb3V0WzBdID0gMDtcbiAgICAgIG91dFsxXSA9IDA7XG4gICAgICBvdXRbMl0gPSAwO1xuICAgICAgb3V0WzNdID0gMTtcbiAgICAgIHJldHVybiBvdXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZlYzMuY3Jvc3ModG1wdmVjMywgYSwgYik7XG4gICAgICBvdXRbMF0gPSB0bXB2ZWMzWzBdO1xuICAgICAgb3V0WzFdID0gdG1wdmVjM1sxXTtcbiAgICAgIG91dFsyXSA9IHRtcHZlYzNbMl07XG4gICAgICBvdXRbM10gPSAxICsgZG90O1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZShvdXQsIG91dCk7XG4gICAgfVxuICB9O1xufSgpO1xuLyoqXHJcbiAqIFBlcmZvcm1zIGEgc3BoZXJpY2FsIGxpbmVhciBpbnRlcnBvbGF0aW9uIHdpdGggdHdvIGNvbnRyb2wgcG9pbnRzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdH0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtxdWF0fSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3F1YXR9IGMgdGhlIHRoaXJkIG9wZXJhbmRcclxuICogQHBhcmFtIHtxdWF0fSBkIHRoZSBmb3VydGggb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCwgaW4gdGhlIHJhbmdlIFswLTFdLCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXG5cbmV4cG9ydCB2YXIgc3FsZXJwID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGVtcDEgPSBjcmVhdGUoKTtcbiAgdmFyIHRlbXAyID0gY3JlYXRlKCk7XG4gIHJldHVybiBmdW5jdGlvbiAob3V0LCBhLCBiLCBjLCBkLCB0KSB7XG4gICAgc2xlcnAodGVtcDEsIGEsIGQsIHQpO1xuICAgIHNsZXJwKHRlbXAyLCBiLCBjLCB0KTtcbiAgICBzbGVycChvdXQsIHRlbXAxLCB0ZW1wMiwgMiAqIHQgKiAoMSAtIHQpKTtcbiAgICByZXR1cm4gb3V0O1xuICB9O1xufSgpO1xuLyoqXHJcbiAqIFNldHMgdGhlIHNwZWNpZmllZCBxdWF0ZXJuaW9uIHdpdGggdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuXHJcbiAqIGF4ZXMuIEVhY2ggYXhpcyBpcyBhIHZlYzMgYW5kIGlzIGV4cGVjdGVkIHRvIGJlIHVuaXQgbGVuZ3RoIGFuZFxyXG4gKiBwZXJwZW5kaWN1bGFyIHRvIGFsbCBvdGhlciBzcGVjaWZpZWQgYXhlcy5cclxuICpcclxuICogQHBhcmFtIHt2ZWMzfSB2aWV3ICB0aGUgdmVjdG9yIHJlcHJlc2VudGluZyB0aGUgdmlld2luZyBkaXJlY3Rpb25cclxuICogQHBhcmFtIHt2ZWMzfSByaWdodCB0aGUgdmVjdG9yIHJlcHJlc2VudGluZyB0aGUgbG9jYWwgXCJyaWdodFwiIGRpcmVjdGlvblxyXG4gKiBAcGFyYW0ge3ZlYzN9IHVwICAgIHRoZSB2ZWN0b3IgcmVwcmVzZW50aW5nIHRoZSBsb2NhbCBcInVwXCIgZGlyZWN0aW9uXHJcbiAqIEByZXR1cm5zIHtxdWF0fSBvdXRcclxuICovXG5cbmV4cG9ydCB2YXIgc2V0QXhlcyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIG1hdHIgPSBtYXQzLmNyZWF0ZSgpO1xuICByZXR1cm4gZnVuY3Rpb24gKG91dCwgdmlldywgcmlnaHQsIHVwKSB7XG4gICAgbWF0clswXSA9IHJpZ2h0WzBdO1xuICAgIG1hdHJbM10gPSByaWdodFsxXTtcbiAgICBtYXRyWzZdID0gcmlnaHRbMl07XG4gICAgbWF0clsxXSA9IHVwWzBdO1xuICAgIG1hdHJbNF0gPSB1cFsxXTtcbiAgICBtYXRyWzddID0gdXBbMl07XG4gICAgbWF0clsyXSA9IC12aWV3WzBdO1xuICAgIG1hdHJbNV0gPSAtdmlld1sxXTtcbiAgICBtYXRyWzhdID0gLXZpZXdbMl07XG4gICAgcmV0dXJuIG5vcm1hbGl6ZShvdXQsIGZyb21NYXQzKG91dCwgbWF0cikpO1xuICB9O1xufSgpOyIsImltcG9ydCAqIGFzIGdsTWF0cml4IGZyb20gXCIuL2NvbW1vbi5qc1wiO1xuaW1wb3J0ICogYXMgcXVhdCBmcm9tIFwiLi9xdWF0LmpzXCI7XG5pbXBvcnQgKiBhcyBtYXQ0IGZyb20gXCIuL21hdDQuanNcIjtcbi8qKlxyXG4gKiBEdWFsIFF1YXRlcm5pb248YnI+XHJcbiAqIEZvcm1hdDogW3JlYWwsIGR1YWxdPGJyPlxyXG4gKiBRdWF0ZXJuaW9uIGZvcm1hdDogWFlaVzxicj5cclxuICogTWFrZSBzdXJlIHRvIGhhdmUgbm9ybWFsaXplZCBkdWFsIHF1YXRlcm5pb25zLCBvdGhlcndpc2UgdGhlIGZ1bmN0aW9ucyBtYXkgbm90IHdvcmsgYXMgaW50ZW5kZWQuPGJyPlxyXG4gKiBAbW9kdWxlIHF1YXQyXHJcbiAqL1xuXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBpZGVudGl0eSBkdWFsIHF1YXRcclxuICpcclxuICogQHJldHVybnMge3F1YXQyfSBhIG5ldyBkdWFsIHF1YXRlcm5pb24gW3JlYWwgLT4gcm90YXRpb24sIGR1YWwgLT4gdHJhbnNsYXRpb25dXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlKCkge1xuICB2YXIgZHEgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSg4KTtcblxuICBpZiAoZ2xNYXRyaXguQVJSQVlfVFlQRSAhPSBGbG9hdDMyQXJyYXkpIHtcbiAgICBkcVswXSA9IDA7XG4gICAgZHFbMV0gPSAwO1xuICAgIGRxWzJdID0gMDtcbiAgICBkcVs0XSA9IDA7XG4gICAgZHFbNV0gPSAwO1xuICAgIGRxWzZdID0gMDtcbiAgICBkcVs3XSA9IDA7XG4gIH1cblxuICBkcVszXSA9IDE7XG4gIHJldHVybiBkcTtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgbmV3IHF1YXQgaW5pdGlhbGl6ZWQgd2l0aCB2YWx1ZXMgZnJvbSBhbiBleGlzdGluZyBxdWF0ZXJuaW9uXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgZHVhbCBxdWF0ZXJuaW9uIHRvIGNsb25lXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gbmV3IGR1YWwgcXVhdGVybmlvblxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZShhKSB7XG4gIHZhciBkcSA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDgpO1xuICBkcVswXSA9IGFbMF07XG4gIGRxWzFdID0gYVsxXTtcbiAgZHFbMl0gPSBhWzJdO1xuICBkcVszXSA9IGFbM107XG4gIGRxWzRdID0gYVs0XTtcbiAgZHFbNV0gPSBhWzVdO1xuICBkcVs2XSA9IGFbNl07XG4gIGRxWzddID0gYVs3XTtcbiAgcmV0dXJuIGRxO1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgZHVhbCBxdWF0IGluaXRpYWxpemVkIHdpdGggdGhlIGdpdmVuIHZhbHVlc1xyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0geDEgWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkxIFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6MSBaIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdzEgVyBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHgyIFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5MiBZIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0gejIgWiBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHcyIFcgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gbmV3IGR1YWwgcXVhdGVybmlvblxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tVmFsdWVzKHgxLCB5MSwgejEsIHcxLCB4MiwgeTIsIHoyLCB3Mikge1xuICB2YXIgZHEgPSBuZXcgZ2xNYXRyaXguQVJSQVlfVFlQRSg4KTtcbiAgZHFbMF0gPSB4MTtcbiAgZHFbMV0gPSB5MTtcbiAgZHFbMl0gPSB6MTtcbiAgZHFbM10gPSB3MTtcbiAgZHFbNF0gPSB4MjtcbiAgZHFbNV0gPSB5MjtcbiAgZHFbNl0gPSB6MjtcbiAgZHFbN10gPSB3MjtcbiAgcmV0dXJuIGRxO1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgZHVhbCBxdWF0IGZyb20gdGhlIGdpdmVuIHZhbHVlcyAocXVhdCBhbmQgdHJhbnNsYXRpb24pXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4MSBYIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geTEgWSBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHoxIFogY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB3MSBXIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0geDIgWCBjb21wb25lbnQgKHRyYW5zbGF0aW9uKVxyXG4gKiBAcGFyYW0ge051bWJlcn0geTIgWSBjb21wb25lbnQgKHRyYW5zbGF0aW9uKVxyXG4gKiBAcGFyYW0ge051bWJlcn0gejIgWiBjb21wb25lbnQgKHRyYW5zbGF0aW9uKVxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG5ldyBkdWFsIHF1YXRlcm5pb25cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVJvdGF0aW9uVHJhbnNsYXRpb25WYWx1ZXMoeDEsIHkxLCB6MSwgdzEsIHgyLCB5MiwgejIpIHtcbiAgdmFyIGRxID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoOCk7XG4gIGRxWzBdID0geDE7XG4gIGRxWzFdID0geTE7XG4gIGRxWzJdID0gejE7XG4gIGRxWzNdID0gdzE7XG4gIHZhciBheCA9IHgyICogMC41LFxuICAgICAgYXkgPSB5MiAqIDAuNSxcbiAgICAgIGF6ID0gejIgKiAwLjU7XG4gIGRxWzRdID0gYXggKiB3MSArIGF5ICogejEgLSBheiAqIHkxO1xuICBkcVs1XSA9IGF5ICogdzEgKyBheiAqIHgxIC0gYXggKiB6MTtcbiAgZHFbNl0gPSBheiAqIHcxICsgYXggKiB5MSAtIGF5ICogeDE7XG4gIGRxWzddID0gLWF4ICogeDEgLSBheSAqIHkxIC0gYXogKiB6MTtcbiAgcmV0dXJuIGRxO1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBkdWFsIHF1YXQgZnJvbSBhIHF1YXRlcm5pb24gYW5kIGEgdHJhbnNsYXRpb25cclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gZHVhbCBxdWF0ZXJuaW9uIHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBwYXJhbSB7cXVhdH0gcSBhIG5vcm1hbGl6ZWQgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3ZlYzN9IHQgdHJhbmxhdGlvbiB2ZWN0b3JcclxuICogQHJldHVybnMge3F1YXQyfSBkdWFsIHF1YXRlcm5pb24gcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24ob3V0LCBxLCB0KSB7XG4gIHZhciBheCA9IHRbMF0gKiAwLjUsXG4gICAgICBheSA9IHRbMV0gKiAwLjUsXG4gICAgICBheiA9IHRbMl0gKiAwLjUsXG4gICAgICBieCA9IHFbMF0sXG4gICAgICBieSA9IHFbMV0sXG4gICAgICBieiA9IHFbMl0sXG4gICAgICBidyA9IHFbM107XG4gIG91dFswXSA9IGJ4O1xuICBvdXRbMV0gPSBieTtcbiAgb3V0WzJdID0gYno7XG4gIG91dFszXSA9IGJ3O1xuICBvdXRbNF0gPSBheCAqIGJ3ICsgYXkgKiBieiAtIGF6ICogYnk7XG4gIG91dFs1XSA9IGF5ICogYncgKyBheiAqIGJ4IC0gYXggKiBiejtcbiAgb3V0WzZdID0gYXogKiBidyArIGF4ICogYnkgLSBheSAqIGJ4O1xuICBvdXRbN10gPSAtYXggKiBieCAtIGF5ICogYnkgLSBheiAqIGJ6O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBkdWFsIHF1YXQgZnJvbSBhIHRyYW5zbGF0aW9uXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGR1YWwgcXVhdGVybmlvbiByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3ZlYzN9IHQgdHJhbnNsYXRpb24gdmVjdG9yXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gZHVhbCBxdWF0ZXJuaW9uIHJlY2VpdmluZyBvcGVyYXRpb24gcmVzdWx0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21UcmFuc2xhdGlvbihvdXQsIHQpIHtcbiAgb3V0WzBdID0gMDtcbiAgb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gMDtcbiAgb3V0WzNdID0gMTtcbiAgb3V0WzRdID0gdFswXSAqIDAuNTtcbiAgb3V0WzVdID0gdFsxXSAqIDAuNTtcbiAgb3V0WzZdID0gdFsyXSAqIDAuNTtcbiAgb3V0WzddID0gMDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDcmVhdGVzIGEgZHVhbCBxdWF0IGZyb20gYSBxdWF0ZXJuaW9uXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGR1YWwgcXVhdGVybmlvbiByZWNlaXZpbmcgb3BlcmF0aW9uIHJlc3VsdFxyXG4gKiBAcGFyYW0ge3F1YXR9IHEgdGhlIHF1YXRlcm5pb25cclxuICogQHJldHVybnMge3F1YXQyfSBkdWFsIHF1YXRlcm5pb24gcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbVJvdGF0aW9uKG91dCwgcSkge1xuICBvdXRbMF0gPSBxWzBdO1xuICBvdXRbMV0gPSBxWzFdO1xuICBvdXRbMl0gPSBxWzJdO1xuICBvdXRbM10gPSBxWzNdO1xuICBvdXRbNF0gPSAwO1xuICBvdXRbNV0gPSAwO1xuICBvdXRbNl0gPSAwO1xuICBvdXRbN10gPSAwO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgZHVhbCBxdWF0IGZyb20gYSBtYXRyaXggKDR4NClcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSBkdWFsIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHttYXQ0fSBhIHRoZSBtYXRyaXhcclxuICogQHJldHVybnMge3F1YXQyfSBkdWFsIHF1YXQgcmVjZWl2aW5nIG9wZXJhdGlvbiByZXN1bHRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZnJvbU1hdDQob3V0LCBhKSB7XG4gIC8vVE9ETyBPcHRpbWl6ZSB0aGlzXG4gIHZhciBvdXRlciA9IHF1YXQuY3JlYXRlKCk7XG4gIG1hdDQuZ2V0Um90YXRpb24ob3V0ZXIsIGEpO1xuICB2YXIgdCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDMpO1xuICBtYXQ0LmdldFRyYW5zbGF0aW9uKHQsIGEpO1xuICBmcm9tUm90YXRpb25UcmFuc2xhdGlvbihvdXQsIG91dGVyLCB0KTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBvbmUgZHVhbCBxdWF0IHRvIGFub3RoZXJcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgZHVhbCBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgdGhlIHNvdXJjZSBkdWFsIHF1YXRlcm5pb25cclxuICogQHJldHVybnMge3F1YXQyfSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY29weShvdXQsIGEpIHtcbiAgb3V0WzBdID0gYVswXTtcbiAgb3V0WzFdID0gYVsxXTtcbiAgb3V0WzJdID0gYVsyXTtcbiAgb3V0WzNdID0gYVszXTtcbiAgb3V0WzRdID0gYVs0XTtcbiAgb3V0WzVdID0gYVs1XTtcbiAgb3V0WzZdID0gYVs2XTtcbiAgb3V0WzddID0gYVs3XTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTZXQgYSBkdWFsIHF1YXQgdG8gdGhlIGlkZW50aXR5IGR1YWwgcXVhdGVybmlvblxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHkob3V0KSB7XG4gIG91dFswXSA9IDA7XG4gIG91dFsxXSA9IDA7XG4gIG91dFsyXSA9IDA7XG4gIG91dFszXSA9IDE7XG4gIG91dFs0XSA9IDA7XG4gIG91dFs1XSA9IDA7XG4gIG91dFs2XSA9IDA7XG4gIG91dFs3XSA9IDA7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgZHVhbCBxdWF0IHRvIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge051bWJlcn0geDEgWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkxIFkgY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB6MSBaIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdzEgVyBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHgyIFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5MiBZIGNvbXBvbmVudFxyXG4gKiBAcGFyYW0ge051bWJlcn0gejIgWiBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHcyIFcgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNldChvdXQsIHgxLCB5MSwgejEsIHcxLCB4MiwgeTIsIHoyLCB3Mikge1xuICBvdXRbMF0gPSB4MTtcbiAgb3V0WzFdID0geTE7XG4gIG91dFsyXSA9IHoxO1xuICBvdXRbM10gPSB3MTtcbiAgb3V0WzRdID0geDI7XG4gIG91dFs1XSA9IHkyO1xuICBvdXRbNl0gPSB6MjtcbiAgb3V0WzddID0gdzI7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2V0cyB0aGUgcmVhbCBwYXJ0IG9mIGEgZHVhbCBxdWF0XHJcbiAqIEBwYXJhbSAge3F1YXR9IG91dCByZWFsIHBhcnRcclxuICogQHBhcmFtICB7cXVhdDJ9IGEgRHVhbCBRdWF0ZXJuaW9uXHJcbiAqIEByZXR1cm4ge3F1YXR9IHJlYWwgcGFydFxyXG4gKi9cblxuZXhwb3J0IHZhciBnZXRSZWFsID0gcXVhdC5jb3B5O1xuLyoqXHJcbiAqIEdldHMgdGhlIGR1YWwgcGFydCBvZiBhIGR1YWwgcXVhdFxyXG4gKiBAcGFyYW0gIHtxdWF0fSBvdXQgZHVhbCBwYXJ0XHJcbiAqIEBwYXJhbSAge3F1YXQyfSBhIER1YWwgUXVhdGVybmlvblxyXG4gKiBAcmV0dXJuIHtxdWF0fSBkdWFsIHBhcnRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREdWFsKG91dCwgYSkge1xuICBvdXRbMF0gPSBhWzRdO1xuICBvdXRbMV0gPSBhWzVdO1xuICBvdXRbMl0gPSBhWzZdO1xuICBvdXRbM10gPSBhWzddO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNldCB0aGUgcmVhbCBjb21wb25lbnQgb2YgYSBkdWFsIHF1YXQgdG8gdGhlIGdpdmVuIHF1YXRlcm5pb25cclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IHEgYSBxdWF0ZXJuaW9uIHJlcHJlc2VudGluZyB0aGUgcmVhbCBwYXJ0XHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzZXRSZWFsID0gcXVhdC5jb3B5O1xuLyoqXHJcbiAqIFNldCB0aGUgZHVhbCBjb21wb25lbnQgb2YgYSBkdWFsIHF1YXQgdG8gdGhlIGdpdmVuIHF1YXRlcm5pb25cclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXR9IHEgYSBxdWF0ZXJuaW9uIHJlcHJlc2VudGluZyB0aGUgZHVhbCBwYXJ0XHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNldER1YWwob3V0LCBxKSB7XG4gIG91dFs0XSA9IHFbMF07XG4gIG91dFs1XSA9IHFbMV07XG4gIG91dFs2XSA9IHFbMl07XG4gIG91dFs3XSA9IHFbM107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2V0cyB0aGUgdHJhbnNsYXRpb24gb2YgYSBub3JtYWxpemVkIGR1YWwgcXVhdFxyXG4gKiBAcGFyYW0gIHt2ZWMzfSBvdXQgdHJhbnNsYXRpb25cclxuICogQHBhcmFtICB7cXVhdDJ9IGEgRHVhbCBRdWF0ZXJuaW9uIHRvIGJlIGRlY29tcG9zZWRcclxuICogQHJldHVybiB7dmVjM30gdHJhbnNsYXRpb25cclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUcmFuc2xhdGlvbihvdXQsIGEpIHtcbiAgdmFyIGF4ID0gYVs0XSxcbiAgICAgIGF5ID0gYVs1XSxcbiAgICAgIGF6ID0gYVs2XSxcbiAgICAgIGF3ID0gYVs3XSxcbiAgICAgIGJ4ID0gLWFbMF0sXG4gICAgICBieSA9IC1hWzFdLFxuICAgICAgYnogPSAtYVsyXSxcbiAgICAgIGJ3ID0gYVszXTtcbiAgb3V0WzBdID0gKGF4ICogYncgKyBhdyAqIGJ4ICsgYXkgKiBieiAtIGF6ICogYnkpICogMjtcbiAgb3V0WzFdID0gKGF5ICogYncgKyBhdyAqIGJ5ICsgYXogKiBieCAtIGF4ICogYnopICogMjtcbiAgb3V0WzJdID0gKGF6ICogYncgKyBhdyAqIGJ6ICsgYXggKiBieSAtIGF5ICogYngpICogMjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc2xhdGVzIGEgZHVhbCBxdWF0IGJ5IHRoZSBnaXZlbiB2ZWN0b3JcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgZHVhbCBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgdGhlIGR1YWwgcXVhdGVybmlvbiB0byB0cmFuc2xhdGVcclxuICogQHBhcmFtIHt2ZWMzfSB2IHZlY3RvciB0byB0cmFuc2xhdGUgYnlcclxuICogQHJldHVybnMge3F1YXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2xhdGUob3V0LCBhLCB2KSB7XG4gIHZhciBheDEgPSBhWzBdLFxuICAgICAgYXkxID0gYVsxXSxcbiAgICAgIGF6MSA9IGFbMl0sXG4gICAgICBhdzEgPSBhWzNdLFxuICAgICAgYngxID0gdlswXSAqIDAuNSxcbiAgICAgIGJ5MSA9IHZbMV0gKiAwLjUsXG4gICAgICBiejEgPSB2WzJdICogMC41LFxuICAgICAgYXgyID0gYVs0XSxcbiAgICAgIGF5MiA9IGFbNV0sXG4gICAgICBhejIgPSBhWzZdLFxuICAgICAgYXcyID0gYVs3XTtcbiAgb3V0WzBdID0gYXgxO1xuICBvdXRbMV0gPSBheTE7XG4gIG91dFsyXSA9IGF6MTtcbiAgb3V0WzNdID0gYXcxO1xuICBvdXRbNF0gPSBhdzEgKiBieDEgKyBheTEgKiBiejEgLSBhejEgKiBieTEgKyBheDI7XG4gIG91dFs1XSA9IGF3MSAqIGJ5MSArIGF6MSAqIGJ4MSAtIGF4MSAqIGJ6MSArIGF5MjtcbiAgb3V0WzZdID0gYXcxICogYnoxICsgYXgxICogYnkxIC0gYXkxICogYngxICsgYXoyO1xuICBvdXRbN10gPSAtYXgxICogYngxIC0gYXkxICogYnkxIC0gYXoxICogYnoxICsgYXcyO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBkdWFsIHF1YXQgYXJvdW5kIHRoZSBYIGF4aXNcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgZHVhbCBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgdGhlIGR1YWwgcXVhdGVybmlvbiB0byByb3RhdGVcclxuICogQHBhcmFtIHtudW1iZXJ9IHJhZCBob3cgZmFyIHNob3VsZCB0aGUgcm90YXRpb24gYmVcclxuICogQHJldHVybnMge3F1YXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGVYKG91dCwgYSwgcmFkKSB7XG4gIHZhciBieCA9IC1hWzBdLFxuICAgICAgYnkgPSAtYVsxXSxcbiAgICAgIGJ6ID0gLWFbMl0sXG4gICAgICBidyA9IGFbM10sXG4gICAgICBheCA9IGFbNF0sXG4gICAgICBheSA9IGFbNV0sXG4gICAgICBheiA9IGFbNl0sXG4gICAgICBhdyA9IGFbN10sXG4gICAgICBheDEgPSBheCAqIGJ3ICsgYXcgKiBieCArIGF5ICogYnogLSBheiAqIGJ5LFxuICAgICAgYXkxID0gYXkgKiBidyArIGF3ICogYnkgKyBheiAqIGJ4IC0gYXggKiBieixcbiAgICAgIGF6MSA9IGF6ICogYncgKyBhdyAqIGJ6ICsgYXggKiBieSAtIGF5ICogYngsXG4gICAgICBhdzEgPSBhdyAqIGJ3IC0gYXggKiBieCAtIGF5ICogYnkgLSBheiAqIGJ6O1xuICBxdWF0LnJvdGF0ZVgob3V0LCBhLCByYWQpO1xuICBieCA9IG91dFswXTtcbiAgYnkgPSBvdXRbMV07XG4gIGJ6ID0gb3V0WzJdO1xuICBidyA9IG91dFszXTtcbiAgb3V0WzRdID0gYXgxICogYncgKyBhdzEgKiBieCArIGF5MSAqIGJ6IC0gYXoxICogYnk7XG4gIG91dFs1XSA9IGF5MSAqIGJ3ICsgYXcxICogYnkgKyBhejEgKiBieCAtIGF4MSAqIGJ6O1xuICBvdXRbNl0gPSBhejEgKiBidyArIGF3MSAqIGJ6ICsgYXgxICogYnkgLSBheTEgKiBieDtcbiAgb3V0WzddID0gYXcxICogYncgLSBheDEgKiBieCAtIGF5MSAqIGJ5IC0gYXoxICogYno7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlcyBhIGR1YWwgcXVhdCBhcm91bmQgdGhlIFkgYXhpc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBvdXQgdGhlIHJlY2VpdmluZyBkdWFsIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0Mn0gYSB0aGUgZHVhbCBxdWF0ZXJuaW9uIHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge251bWJlcn0gcmFkIGhvdyBmYXIgc2hvdWxkIHRoZSByb3RhdGlvbiBiZVxyXG4gKiBAcmV0dXJucyB7cXVhdDJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdGF0ZVkob3V0LCBhLCByYWQpIHtcbiAgdmFyIGJ4ID0gLWFbMF0sXG4gICAgICBieSA9IC1hWzFdLFxuICAgICAgYnogPSAtYVsyXSxcbiAgICAgIGJ3ID0gYVszXSxcbiAgICAgIGF4ID0gYVs0XSxcbiAgICAgIGF5ID0gYVs1XSxcbiAgICAgIGF6ID0gYVs2XSxcbiAgICAgIGF3ID0gYVs3XSxcbiAgICAgIGF4MSA9IGF4ICogYncgKyBhdyAqIGJ4ICsgYXkgKiBieiAtIGF6ICogYnksXG4gICAgICBheTEgPSBheSAqIGJ3ICsgYXcgKiBieSArIGF6ICogYnggLSBheCAqIGJ6LFxuICAgICAgYXoxID0gYXogKiBidyArIGF3ICogYnogKyBheCAqIGJ5IC0gYXkgKiBieCxcbiAgICAgIGF3MSA9IGF3ICogYncgLSBheCAqIGJ4IC0gYXkgKiBieSAtIGF6ICogYno7XG4gIHF1YXQucm90YXRlWShvdXQsIGEsIHJhZCk7XG4gIGJ4ID0gb3V0WzBdO1xuICBieSA9IG91dFsxXTtcbiAgYnogPSBvdXRbMl07XG4gIGJ3ID0gb3V0WzNdO1xuICBvdXRbNF0gPSBheDEgKiBidyArIGF3MSAqIGJ4ICsgYXkxICogYnogLSBhejEgKiBieTtcbiAgb3V0WzVdID0gYXkxICogYncgKyBhdzEgKiBieSArIGF6MSAqIGJ4IC0gYXgxICogYno7XG4gIG91dFs2XSA9IGF6MSAqIGJ3ICsgYXcxICogYnogKyBheDEgKiBieSAtIGF5MSAqIGJ4O1xuICBvdXRbN10gPSBhdzEgKiBidyAtIGF4MSAqIGJ4IC0gYXkxICogYnkgLSBhejEgKiBiejtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSb3RhdGVzIGEgZHVhbCBxdWF0IGFyb3VuZCB0aGUgWiBheGlzXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IG91dCB0aGUgcmVjZWl2aW5nIGR1YWwgcXVhdGVybmlvblxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIHRoZSBkdWFsIHF1YXRlcm5pb24gdG8gcm90YXRlXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSByYWQgaG93IGZhciBzaG91bGQgdGhlIHJvdGF0aW9uIGJlXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlWihvdXQsIGEsIHJhZCkge1xuICB2YXIgYnggPSAtYVswXSxcbiAgICAgIGJ5ID0gLWFbMV0sXG4gICAgICBieiA9IC1hWzJdLFxuICAgICAgYncgPSBhWzNdLFxuICAgICAgYXggPSBhWzRdLFxuICAgICAgYXkgPSBhWzVdLFxuICAgICAgYXogPSBhWzZdLFxuICAgICAgYXcgPSBhWzddLFxuICAgICAgYXgxID0gYXggKiBidyArIGF3ICogYnggKyBheSAqIGJ6IC0gYXogKiBieSxcbiAgICAgIGF5MSA9IGF5ICogYncgKyBhdyAqIGJ5ICsgYXogKiBieCAtIGF4ICogYnosXG4gICAgICBhejEgPSBheiAqIGJ3ICsgYXcgKiBieiArIGF4ICogYnkgLSBheSAqIGJ4LFxuICAgICAgYXcxID0gYXcgKiBidyAtIGF4ICogYnggLSBheSAqIGJ5IC0gYXogKiBiejtcbiAgcXVhdC5yb3RhdGVaKG91dCwgYSwgcmFkKTtcbiAgYnggPSBvdXRbMF07XG4gIGJ5ID0gb3V0WzFdO1xuICBieiA9IG91dFsyXTtcbiAgYncgPSBvdXRbM107XG4gIG91dFs0XSA9IGF4MSAqIGJ3ICsgYXcxICogYnggKyBheTEgKiBieiAtIGF6MSAqIGJ5O1xuICBvdXRbNV0gPSBheTEgKiBidyArIGF3MSAqIGJ5ICsgYXoxICogYnggLSBheDEgKiBiejtcbiAgb3V0WzZdID0gYXoxICogYncgKyBhdzEgKiBieiArIGF4MSAqIGJ5IC0gYXkxICogYng7XG4gIG91dFs3XSA9IGF3MSAqIGJ3IC0gYXgxICogYnggLSBheTEgKiBieSAtIGF6MSAqIGJ6O1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZXMgYSBkdWFsIHF1YXQgYnkgYSBnaXZlbiBxdWF0ZXJuaW9uIChhICogcSlcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgZHVhbCBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgdGhlIGR1YWwgcXVhdGVybmlvbiB0byByb3RhdGVcclxuICogQHBhcmFtIHtxdWF0fSBxIHF1YXRlcm5pb24gdG8gcm90YXRlIGJ5XHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlQnlRdWF0QXBwZW5kKG91dCwgYSwgcSkge1xuICB2YXIgcXggPSBxWzBdLFxuICAgICAgcXkgPSBxWzFdLFxuICAgICAgcXogPSBxWzJdLFxuICAgICAgcXcgPSBxWzNdLFxuICAgICAgYXggPSBhWzBdLFxuICAgICAgYXkgPSBhWzFdLFxuICAgICAgYXogPSBhWzJdLFxuICAgICAgYXcgPSBhWzNdO1xuICBvdXRbMF0gPSBheCAqIHF3ICsgYXcgKiBxeCArIGF5ICogcXogLSBheiAqIHF5O1xuICBvdXRbMV0gPSBheSAqIHF3ICsgYXcgKiBxeSArIGF6ICogcXggLSBheCAqIHF6O1xuICBvdXRbMl0gPSBheiAqIHF3ICsgYXcgKiBxeiArIGF4ICogcXkgLSBheSAqIHF4O1xuICBvdXRbM10gPSBhdyAqIHF3IC0gYXggKiBxeCAtIGF5ICogcXkgLSBheiAqIHF6O1xuICBheCA9IGFbNF07XG4gIGF5ID0gYVs1XTtcbiAgYXogPSBhWzZdO1xuICBhdyA9IGFbN107XG4gIG91dFs0XSA9IGF4ICogcXcgKyBhdyAqIHF4ICsgYXkgKiBxeiAtIGF6ICogcXk7XG4gIG91dFs1XSA9IGF5ICogcXcgKyBhdyAqIHF5ICsgYXogKiBxeCAtIGF4ICogcXo7XG4gIG91dFs2XSA9IGF6ICogcXcgKyBhdyAqIHF6ICsgYXggKiBxeSAtIGF5ICogcXg7XG4gIG91dFs3XSA9IGF3ICogcXcgLSBheCAqIHF4IC0gYXkgKiBxeSAtIGF6ICogcXo7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlcyBhIGR1YWwgcXVhdCBieSBhIGdpdmVuIHF1YXRlcm5pb24gKHEgKiBhKVxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBvdXQgdGhlIHJlY2VpdmluZyBkdWFsIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0fSBxIHF1YXRlcm5pb24gdG8gcm90YXRlIGJ5XHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgdGhlIGR1YWwgcXVhdGVybmlvbiB0byByb3RhdGVcclxuICogQHJldHVybnMge3F1YXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGVCeVF1YXRQcmVwZW5kKG91dCwgcSwgYSkge1xuICB2YXIgcXggPSBxWzBdLFxuICAgICAgcXkgPSBxWzFdLFxuICAgICAgcXogPSBxWzJdLFxuICAgICAgcXcgPSBxWzNdLFxuICAgICAgYnggPSBhWzBdLFxuICAgICAgYnkgPSBhWzFdLFxuICAgICAgYnogPSBhWzJdLFxuICAgICAgYncgPSBhWzNdO1xuICBvdXRbMF0gPSBxeCAqIGJ3ICsgcXcgKiBieCArIHF5ICogYnogLSBxeiAqIGJ5O1xuICBvdXRbMV0gPSBxeSAqIGJ3ICsgcXcgKiBieSArIHF6ICogYnggLSBxeCAqIGJ6O1xuICBvdXRbMl0gPSBxeiAqIGJ3ICsgcXcgKiBieiArIHF4ICogYnkgLSBxeSAqIGJ4O1xuICBvdXRbM10gPSBxdyAqIGJ3IC0gcXggKiBieCAtIHF5ICogYnkgLSBxeiAqIGJ6O1xuICBieCA9IGFbNF07XG4gIGJ5ID0gYVs1XTtcbiAgYnogPSBhWzZdO1xuICBidyA9IGFbN107XG4gIG91dFs0XSA9IHF4ICogYncgKyBxdyAqIGJ4ICsgcXkgKiBieiAtIHF6ICogYnk7XG4gIG91dFs1XSA9IHF5ICogYncgKyBxdyAqIGJ5ICsgcXogKiBieCAtIHF4ICogYno7XG4gIG91dFs2XSA9IHF6ICogYncgKyBxdyAqIGJ6ICsgcXggKiBieSAtIHF5ICogYng7XG4gIG91dFs3XSA9IHF3ICogYncgLSBxeCAqIGJ4IC0gcXkgKiBieSAtIHF6ICogYno7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUm90YXRlcyBhIGR1YWwgcXVhdCBhcm91bmQgYSBnaXZlbiBheGlzLiBEb2VzIHRoZSBub3JtYWxpc2F0aW9uIGF1dG9tYXRpY2FsbHlcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgZHVhbCBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgdGhlIGR1YWwgcXVhdGVybmlvbiB0byByb3RhdGVcclxuICogQHBhcmFtIHt2ZWMzfSBheGlzIHRoZSBheGlzIHRvIHJvdGF0ZSBhcm91bmRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCBob3cgZmFyIHRoZSByb3RhdGlvbiBzaG91bGQgYmVcclxuICogQHJldHVybnMge3F1YXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGVBcm91bmRBeGlzKG91dCwgYSwgYXhpcywgcmFkKSB7XG4gIC8vU3BlY2lhbCBjYXNlIGZvciByYWQgPSAwXG4gIGlmIChNYXRoLmFicyhyYWQpIDwgZ2xNYXRyaXguRVBTSUxPTikge1xuICAgIHJldHVybiBjb3B5KG91dCwgYSk7XG4gIH1cblxuICB2YXIgYXhpc0xlbmd0aCA9IE1hdGguaHlwb3QoYXhpc1swXSwgYXhpc1sxXSwgYXhpc1syXSk7XG4gIHJhZCA9IHJhZCAqIDAuNTtcbiAgdmFyIHMgPSBNYXRoLnNpbihyYWQpO1xuICB2YXIgYnggPSBzICogYXhpc1swXSAvIGF4aXNMZW5ndGg7XG4gIHZhciBieSA9IHMgKiBheGlzWzFdIC8gYXhpc0xlbmd0aDtcbiAgdmFyIGJ6ID0gcyAqIGF4aXNbMl0gLyBheGlzTGVuZ3RoO1xuICB2YXIgYncgPSBNYXRoLmNvcyhyYWQpO1xuICB2YXIgYXgxID0gYVswXSxcbiAgICAgIGF5MSA9IGFbMV0sXG4gICAgICBhejEgPSBhWzJdLFxuICAgICAgYXcxID0gYVszXTtcbiAgb3V0WzBdID0gYXgxICogYncgKyBhdzEgKiBieCArIGF5MSAqIGJ6IC0gYXoxICogYnk7XG4gIG91dFsxXSA9IGF5MSAqIGJ3ICsgYXcxICogYnkgKyBhejEgKiBieCAtIGF4MSAqIGJ6O1xuICBvdXRbMl0gPSBhejEgKiBidyArIGF3MSAqIGJ6ICsgYXgxICogYnkgLSBheTEgKiBieDtcbiAgb3V0WzNdID0gYXcxICogYncgLSBheDEgKiBieCAtIGF5MSAqIGJ5IC0gYXoxICogYno7XG4gIHZhciBheCA9IGFbNF0sXG4gICAgICBheSA9IGFbNV0sXG4gICAgICBheiA9IGFbNl0sXG4gICAgICBhdyA9IGFbN107XG4gIG91dFs0XSA9IGF4ICogYncgKyBhdyAqIGJ4ICsgYXkgKiBieiAtIGF6ICogYnk7XG4gIG91dFs1XSA9IGF5ICogYncgKyBhdyAqIGJ5ICsgYXogKiBieCAtIGF4ICogYno7XG4gIG91dFs2XSA9IGF6ICogYncgKyBhdyAqIGJ6ICsgYXggKiBieSAtIGF5ICogYng7XG4gIG91dFs3XSA9IGF3ICogYncgLSBheCAqIGJ4IC0gYXkgKiBieSAtIGF6ICogYno7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQWRkcyB0d28gZHVhbCBxdWF0J3NcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgZHVhbCBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtxdWF0Mn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3F1YXQyfSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkKG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICsgYlswXTtcbiAgb3V0WzFdID0gYVsxXSArIGJbMV07XG4gIG91dFsyXSA9IGFbMl0gKyBiWzJdO1xuICBvdXRbM10gPSBhWzNdICsgYlszXTtcbiAgb3V0WzRdID0gYVs0XSArIGJbNF07XG4gIG91dFs1XSA9IGFbNV0gKyBiWzVdO1xuICBvdXRbNl0gPSBhWzZdICsgYls2XTtcbiAgb3V0WzddID0gYVs3XSArIGJbN107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTXVsdGlwbGllcyB0d28gZHVhbCBxdWF0J3NcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gb3V0IHRoZSByZWNlaXZpbmcgZHVhbCBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHtxdWF0Mn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3F1YXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBseShvdXQsIGEsIGIpIHtcbiAgdmFyIGF4MCA9IGFbMF0sXG4gICAgICBheTAgPSBhWzFdLFxuICAgICAgYXowID0gYVsyXSxcbiAgICAgIGF3MCA9IGFbM10sXG4gICAgICBieDEgPSBiWzRdLFxuICAgICAgYnkxID0gYls1XSxcbiAgICAgIGJ6MSA9IGJbNl0sXG4gICAgICBidzEgPSBiWzddLFxuICAgICAgYXgxID0gYVs0XSxcbiAgICAgIGF5MSA9IGFbNV0sXG4gICAgICBhejEgPSBhWzZdLFxuICAgICAgYXcxID0gYVs3XSxcbiAgICAgIGJ4MCA9IGJbMF0sXG4gICAgICBieTAgPSBiWzFdLFxuICAgICAgYnowID0gYlsyXSxcbiAgICAgIGJ3MCA9IGJbM107XG4gIG91dFswXSA9IGF4MCAqIGJ3MCArIGF3MCAqIGJ4MCArIGF5MCAqIGJ6MCAtIGF6MCAqIGJ5MDtcbiAgb3V0WzFdID0gYXkwICogYncwICsgYXcwICogYnkwICsgYXowICogYngwIC0gYXgwICogYnowO1xuICBvdXRbMl0gPSBhejAgKiBidzAgKyBhdzAgKiBiejAgKyBheDAgKiBieTAgLSBheTAgKiBieDA7XG4gIG91dFszXSA9IGF3MCAqIGJ3MCAtIGF4MCAqIGJ4MCAtIGF5MCAqIGJ5MCAtIGF6MCAqIGJ6MDtcbiAgb3V0WzRdID0gYXgwICogYncxICsgYXcwICogYngxICsgYXkwICogYnoxIC0gYXowICogYnkxICsgYXgxICogYncwICsgYXcxICogYngwICsgYXkxICogYnowIC0gYXoxICogYnkwO1xuICBvdXRbNV0gPSBheTAgKiBidzEgKyBhdzAgKiBieTEgKyBhejAgKiBieDEgLSBheDAgKiBiejEgKyBheTEgKiBidzAgKyBhdzEgKiBieTAgKyBhejEgKiBieDAgLSBheDEgKiBiejA7XG4gIG91dFs2XSA9IGF6MCAqIGJ3MSArIGF3MCAqIGJ6MSArIGF4MCAqIGJ5MSAtIGF5MCAqIGJ4MSArIGF6MSAqIGJ3MCArIGF3MSAqIGJ6MCArIGF4MSAqIGJ5MCAtIGF5MSAqIGJ4MDtcbiAgb3V0WzddID0gYXcwICogYncxIC0gYXgwICogYngxIC0gYXkwICogYnkxIC0gYXowICogYnoxICsgYXcxICogYncwIC0gYXgxICogYngwIC0gYXkxICogYnkwIC0gYXoxICogYnowO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgcXVhdDIubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBtdWwgPSBtdWx0aXBseTtcbi8qKlxyXG4gKiBTY2FsZXMgYSBkdWFsIHF1YXQgYnkgYSBzY2FsYXIgbnVtYmVyXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IG91dCB0aGUgcmVjZWl2aW5nIGR1YWwgcXVhdFxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIHRoZSBkdWFsIHF1YXQgdG8gc2NhbGVcclxuICogQHBhcmFtIHtOdW1iZXJ9IGIgYW1vdW50IHRvIHNjYWxlIHRoZSBkdWFsIHF1YXQgYnlcclxuICogQHJldHVybnMge3F1YXQyfSBvdXRcclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc2NhbGUob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKiBiO1xuICBvdXRbMV0gPSBhWzFdICogYjtcbiAgb3V0WzJdID0gYVsyXSAqIGI7XG4gIG91dFszXSA9IGFbM10gKiBiO1xuICBvdXRbNF0gPSBhWzRdICogYjtcbiAgb3V0WzVdID0gYVs1XSAqIGI7XG4gIG91dFs2XSA9IGFbNl0gKiBiO1xuICBvdXRbN10gPSBhWzddICogYjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gZHVhbCBxdWF0J3MgKFRoZSBkb3QgcHJvZHVjdCBvZiB0aGUgcmVhbCBwYXJ0cylcclxuICpcclxuICogQHBhcmFtIHtxdWF0Mn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3F1YXQyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBkb3QgcHJvZHVjdCBvZiBhIGFuZCBiXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBkb3QgPSBxdWF0LmRvdDtcbi8qKlxyXG4gKiBQZXJmb3JtcyBhIGxpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gdHdvIGR1YWwgcXVhdHMnc1xyXG4gKiBOT1RFOiBUaGUgcmVzdWx0aW5nIGR1YWwgcXVhdGVybmlvbnMgd29uJ3QgYWx3YXlzIGJlIG5vcm1hbGl6ZWQgKFRoZSBlcnJvciBpcyBtb3N0IG5vdGljZWFibGUgd2hlbiB0ID0gMC41KVxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBvdXQgdGhlIHJlY2VpdmluZyBkdWFsIHF1YXRcclxuICogQHBhcmFtIHtxdWF0Mn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3F1YXQyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCwgaW4gdGhlIHJhbmdlIFswLTFdLCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbGVycChvdXQsIGEsIGIsIHQpIHtcbiAgdmFyIG10ID0gMSAtIHQ7XG4gIGlmIChkb3QoYSwgYikgPCAwKSB0ID0gLXQ7XG4gIG91dFswXSA9IGFbMF0gKiBtdCArIGJbMF0gKiB0O1xuICBvdXRbMV0gPSBhWzFdICogbXQgKyBiWzFdICogdDtcbiAgb3V0WzJdID0gYVsyXSAqIG10ICsgYlsyXSAqIHQ7XG4gIG91dFszXSA9IGFbM10gKiBtdCArIGJbM10gKiB0O1xuICBvdXRbNF0gPSBhWzRdICogbXQgKyBiWzRdICogdDtcbiAgb3V0WzVdID0gYVs1XSAqIG10ICsgYls1XSAqIHQ7XG4gIG91dFs2XSA9IGFbNl0gKiBtdCArIGJbNl0gKiB0O1xuICBvdXRbN10gPSBhWzddICogbXQgKyBiWzddICogdDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBpbnZlcnNlIG9mIGEgZHVhbCBxdWF0LiBJZiB0aGV5IGFyZSBub3JtYWxpemVkLCBjb25qdWdhdGUgaXMgY2hlYXBlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBvdXQgdGhlIHJlY2VpdmluZyBkdWFsIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0Mn0gYSBkdWFsIHF1YXQgdG8gY2FsY3VsYXRlIGludmVyc2Ugb2ZcclxuICogQHJldHVybnMge3F1YXQyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnQob3V0LCBhKSB7XG4gIHZhciBzcWxlbiA9IHNxdWFyZWRMZW5ndGgoYSk7XG4gIG91dFswXSA9IC1hWzBdIC8gc3FsZW47XG4gIG91dFsxXSA9IC1hWzFdIC8gc3FsZW47XG4gIG91dFsyXSA9IC1hWzJdIC8gc3FsZW47XG4gIG91dFszXSA9IGFbM10gLyBzcWxlbjtcbiAgb3V0WzRdID0gLWFbNF0gLyBzcWxlbjtcbiAgb3V0WzVdID0gLWFbNV0gLyBzcWxlbjtcbiAgb3V0WzZdID0gLWFbNl0gLyBzcWxlbjtcbiAgb3V0WzddID0gYVs3XSAvIHNxbGVuO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGNvbmp1Z2F0ZSBvZiBhIGR1YWwgcXVhdFxyXG4gKiBJZiB0aGUgZHVhbCBxdWF0ZXJuaW9uIGlzIG5vcm1hbGl6ZWQsIHRoaXMgZnVuY3Rpb24gaXMgZmFzdGVyIHRoYW4gcXVhdDIuaW52ZXJzZSBhbmQgcHJvZHVjZXMgdGhlIHNhbWUgcmVzdWx0LlxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBvdXQgdGhlIHJlY2VpdmluZyBxdWF0ZXJuaW9uXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgcXVhdCB0byBjYWxjdWxhdGUgY29uanVnYXRlIG9mXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY29uanVnYXRlKG91dCwgYSkge1xuICBvdXRbMF0gPSAtYVswXTtcbiAgb3V0WzFdID0gLWFbMV07XG4gIG91dFsyXSA9IC1hWzJdO1xuICBvdXRbM10gPSBhWzNdO1xuICBvdXRbNF0gPSAtYVs0XTtcbiAgb3V0WzVdID0gLWFbNV07XG4gIG91dFs2XSA9IC1hWzZdO1xuICBvdXRbN10gPSBhWzddO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgdGhlIGxlbmd0aCBvZiBhIGR1YWwgcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIGR1YWwgcXVhdCB0byBjYWxjdWxhdGUgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGxlbmd0aCBvZiBhXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBsZW5ndGggPSBxdWF0Lmxlbmd0aDtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHF1YXQyLmxlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGxlbiA9IGxlbmd0aDtcbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBzcXVhcmVkIGxlbmd0aCBvZiBhIGR1YWwgcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIGR1YWwgcXVhdCB0byBjYWxjdWxhdGUgc3F1YXJlZCBsZW5ndGggb2ZcclxuICogQHJldHVybnMge051bWJlcn0gc3F1YXJlZCBsZW5ndGggb2YgYVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc3F1YXJlZExlbmd0aCA9IHF1YXQuc3F1YXJlZExlbmd0aDtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHF1YXQyLnNxdWFyZWRMZW5ndGh9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzcXJMZW4gPSBzcXVhcmVkTGVuZ3RoO1xuLyoqXHJcbiAqIE5vcm1hbGl6ZSBhIGR1YWwgcXVhdFxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBvdXQgdGhlIHJlY2VpdmluZyBkdWFsIHF1YXRlcm5pb25cclxuICogQHBhcmFtIHtxdWF0Mn0gYSBkdWFsIHF1YXRlcm5pb24gdG8gbm9ybWFsaXplXHJcbiAqIEByZXR1cm5zIHtxdWF0Mn0gb3V0XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZShvdXQsIGEpIHtcbiAgdmFyIG1hZ25pdHVkZSA9IHNxdWFyZWRMZW5ndGgoYSk7XG5cbiAgaWYgKG1hZ25pdHVkZSA+IDApIHtcbiAgICBtYWduaXR1ZGUgPSBNYXRoLnNxcnQobWFnbml0dWRlKTtcbiAgICB2YXIgYTAgPSBhWzBdIC8gbWFnbml0dWRlO1xuICAgIHZhciBhMSA9IGFbMV0gLyBtYWduaXR1ZGU7XG4gICAgdmFyIGEyID0gYVsyXSAvIG1hZ25pdHVkZTtcbiAgICB2YXIgYTMgPSBhWzNdIC8gbWFnbml0dWRlO1xuICAgIHZhciBiMCA9IGFbNF07XG4gICAgdmFyIGIxID0gYVs1XTtcbiAgICB2YXIgYjIgPSBhWzZdO1xuICAgIHZhciBiMyA9IGFbN107XG4gICAgdmFyIGFfZG90X2IgPSBhMCAqIGIwICsgYTEgKiBiMSArIGEyICogYjIgKyBhMyAqIGIzO1xuICAgIG91dFswXSA9IGEwO1xuICAgIG91dFsxXSA9IGExO1xuICAgIG91dFsyXSA9IGEyO1xuICAgIG91dFszXSA9IGEzO1xuICAgIG91dFs0XSA9IChiMCAtIGEwICogYV9kb3RfYikgLyBtYWduaXR1ZGU7XG4gICAgb3V0WzVdID0gKGIxIC0gYTEgKiBhX2RvdF9iKSAvIG1hZ25pdHVkZTtcbiAgICBvdXRbNl0gPSAoYjIgLSBhMiAqIGFfZG90X2IpIC8gbWFnbml0dWRlO1xuICAgIG91dFs3XSA9IChiMyAtIGEzICogYV9kb3RfYikgLyBtYWduaXR1ZGU7XG4gIH1cblxuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBkdWFsIHF1YXRlbmlvblxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIGR1YWwgcXVhdGVybmlvbiB0byByZXByZXNlbnQgYXMgYSBzdHJpbmdcclxuICogQHJldHVybnMge1N0cmluZ30gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkdWFsIHF1YXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzdHIoYSkge1xuICByZXR1cm4gXCJxdWF0MihcIiArIGFbMF0gKyBcIiwgXCIgKyBhWzFdICsgXCIsIFwiICsgYVsyXSArIFwiLCBcIiArIGFbM10gKyBcIiwgXCIgKyBhWzRdICsgXCIsIFwiICsgYVs1XSArIFwiLCBcIiArIGFbNl0gKyBcIiwgXCIgKyBhWzddICsgXCIpXCI7XG59XG4vKipcclxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgZHVhbCBxdWF0ZXJuaW9ucyBoYXZlIGV4YWN0bHkgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgcG9zaXRpb24gKHdoZW4gY29tcGFyZWQgd2l0aCA9PT0pXHJcbiAqXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGEgdGhlIGZpcnN0IGR1YWwgcXVhdGVybmlvbi5cclxuICogQHBhcmFtIHtxdWF0Mn0gYiB0aGUgc2Vjb25kIGR1YWwgcXVhdGVybmlvbi5cclxuICogQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgdGhlIGR1YWwgcXVhdGVybmlvbnMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXhhY3RFcXVhbHMoYSwgYikge1xuICByZXR1cm4gYVswXSA9PT0gYlswXSAmJiBhWzFdID09PSBiWzFdICYmIGFbMl0gPT09IGJbMl0gJiYgYVszXSA9PT0gYlszXSAmJiBhWzRdID09PSBiWzRdICYmIGFbNV0gPT09IGJbNV0gJiYgYVs2XSA9PT0gYls2XSAmJiBhWzddID09PSBiWzddO1xufVxuLyoqXHJcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGR1YWwgcXVhdGVybmlvbnMgaGF2ZSBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIHBvc2l0aW9uLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3F1YXQyfSBhIHRoZSBmaXJzdCBkdWFsIHF1YXQuXHJcbiAqIEBwYXJhbSB7cXVhdDJ9IGIgdGhlIHNlY29uZCBkdWFsIHF1YXQuXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHRoZSBkdWFsIHF1YXRzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFscyhhLCBiKSB7XG4gIHZhciBhMCA9IGFbMF0sXG4gICAgICBhMSA9IGFbMV0sXG4gICAgICBhMiA9IGFbMl0sXG4gICAgICBhMyA9IGFbM10sXG4gICAgICBhNCA9IGFbNF0sXG4gICAgICBhNSA9IGFbNV0sXG4gICAgICBhNiA9IGFbNl0sXG4gICAgICBhNyA9IGFbN107XG4gIHZhciBiMCA9IGJbMF0sXG4gICAgICBiMSA9IGJbMV0sXG4gICAgICBiMiA9IGJbMl0sXG4gICAgICBiMyA9IGJbM10sXG4gICAgICBiNCA9IGJbNF0sXG4gICAgICBiNSA9IGJbNV0sXG4gICAgICBiNiA9IGJbNl0sXG4gICAgICBiNyA9IGJbN107XG4gIHJldHVybiBNYXRoLmFicyhhMCAtIGIwKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMCksIE1hdGguYWJzKGIwKSkgJiYgTWF0aC5hYnMoYTEgLSBiMSkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTEpLCBNYXRoLmFicyhiMSkpICYmIE1hdGguYWJzKGEyIC0gYjIpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEyKSwgTWF0aC5hYnMoYjIpKSAmJiBNYXRoLmFicyhhMyAtIGIzKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMyksIE1hdGguYWJzKGIzKSkgJiYgTWF0aC5hYnMoYTQgLSBiNCkgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTQpLCBNYXRoLmFicyhiNCkpICYmIE1hdGguYWJzKGE1IC0gYjUpIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGE1KSwgTWF0aC5hYnMoYjUpKSAmJiBNYXRoLmFicyhhNiAtIGI2KSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhNiksIE1hdGguYWJzKGI2KSkgJiYgTWF0aC5hYnMoYTcgLSBiNykgPD0gZ2xNYXRyaXguRVBTSUxPTiAqIE1hdGgubWF4KDEuMCwgTWF0aC5hYnMoYTcpLCBNYXRoLmFicyhiNykpO1xufSIsImltcG9ydCAqIGFzIGdsTWF0cml4IGZyb20gXCIuL2NvbW1vbi5qc1wiO1xuLyoqXHJcbiAqIDIgRGltZW5zaW9uYWwgVmVjdG9yXHJcbiAqIEBtb2R1bGUgdmVjMlxyXG4gKi9cblxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcsIGVtcHR5IHZlYzJcclxuICpcclxuICogQHJldHVybnMge3ZlYzJ9IGEgbmV3IDJEIHZlY3RvclxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDIpO1xuXG4gIGlmIChnbE1hdHJpeC5BUlJBWV9UWVBFICE9IEZsb2F0MzJBcnJheSkge1xuICAgIG91dFswXSA9IDA7XG4gICAgb3V0WzFdID0gMDtcbiAgfVxuXG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyB2ZWMyIGluaXRpYWxpemVkIHdpdGggdmFsdWVzIGZyb20gYW4gZXhpc3RpbmcgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB2ZWN0b3IgdG8gY2xvbmVcclxuICogQHJldHVybnMge3ZlYzJ9IGEgbmV3IDJEIHZlY3RvclxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNsb25lKGEpIHtcbiAgdmFyIG91dCA9IG5ldyBnbE1hdHJpeC5BUlJBWV9UWVBFKDIpO1xuICBvdXRbMF0gPSBhWzBdO1xuICBvdXRbMV0gPSBhWzFdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIENyZWF0ZXMgYSBuZXcgdmVjMiBpbml0aWFsaXplZCB3aXRoIHRoZSBnaXZlbiB2YWx1ZXNcclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IHggWCBjb21wb25lbnRcclxuICogQHBhcmFtIHtOdW1iZXJ9IHkgWSBjb21wb25lbnRcclxuICogQHJldHVybnMge3ZlYzJ9IGEgbmV3IDJEIHZlY3RvclxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb21WYWx1ZXMoeCwgeSkge1xuICB2YXIgb3V0ID0gbmV3IGdsTWF0cml4LkFSUkFZX1RZUEUoMik7XG4gIG91dFswXSA9IHg7XG4gIG91dFsxXSA9IHk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQ29weSB0aGUgdmFsdWVzIGZyb20gb25lIHZlYzIgdG8gYW5vdGhlclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHNvdXJjZSB2ZWN0b3JcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHkob3V0LCBhKSB7XG4gIG91dFswXSA9IGFbMF07XG4gIG91dFsxXSA9IGFbMV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMiB0byB0aGUgZ2l2ZW4gdmFsdWVzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB4IFggY29tcG9uZW50XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSB5IFkgY29tcG9uZW50XHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzZXQob3V0LCB4LCB5KSB7XG4gIG91dFswXSA9IHg7XG4gIG91dFsxXSA9IHk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogQWRkcyB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGQob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gKyBiWzBdO1xuICBvdXRbMV0gPSBhWzFdICsgYlsxXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBTdWJ0cmFjdHMgdmVjdG9yIGIgZnJvbSB2ZWN0b3IgYVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3VidHJhY3Qob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gLSBiWzBdO1xuICBvdXRbMV0gPSBhWzFdIC0gYlsxXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBNdWx0aXBsaWVzIHR3byB2ZWMyJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5KG91dCwgYSwgYikge1xuICBvdXRbMF0gPSBhWzBdICogYlswXTtcbiAgb3V0WzFdID0gYVsxXSAqIGJbMV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogRGl2aWRlcyB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBkaXZpZGUob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IGFbMF0gLyBiWzBdO1xuICBvdXRbMV0gPSBhWzFdIC8gYlsxXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBNYXRoLmNlaWwgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB2ZWN0b3IgdG8gY2VpbFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY2VpbChvdXQsIGEpIHtcbiAgb3V0WzBdID0gTWF0aC5jZWlsKGFbMF0pO1xuICBvdXRbMV0gPSBNYXRoLmNlaWwoYVsxXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogTWF0aC5mbG9vciB0aGUgY29tcG9uZW50cyBvZiBhIHZlYzJcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHZlY3RvciB0byBmbG9vclxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZmxvb3Iob3V0LCBhKSB7XG4gIG91dFswXSA9IE1hdGguZmxvb3IoYVswXSk7XG4gIG91dFsxXSA9IE1hdGguZmxvb3IoYVsxXSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogUmV0dXJucyB0aGUgbWluaW11bSBvZiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtaW4ob3V0LCBhLCBiKSB7XG4gIG91dFswXSA9IE1hdGgubWluKGFbMF0sIGJbMF0pO1xuICBvdXRbMV0gPSBNYXRoLm1pbihhWzFdLCBiWzFdKTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBtYXhpbXVtIG9mIHR3byB2ZWMyJ3NcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSBmaXJzdCBvcGVyYW5kXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiB0aGUgc2Vjb25kIG9wZXJhbmRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG1heChvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gTWF0aC5tYXgoYVswXSwgYlswXSk7XG4gIG91dFsxXSA9IE1hdGgubWF4KGFbMV0sIGJbMV0pO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIE1hdGgucm91bmQgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB2ZWN0b3IgdG8gcm91bmRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdW5kKG91dCwgYSkge1xuICBvdXRbMF0gPSBNYXRoLnJvdW5kKGFbMF0pO1xuICBvdXRbMV0gPSBNYXRoLnJvdW5kKGFbMV0pO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFNjYWxlcyBhIHZlYzIgYnkgYSBzY2FsYXIgbnVtYmVyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgdmVjdG9yIHRvIHNjYWxlXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBiIGFtb3VudCB0byBzY2FsZSB0aGUgdmVjdG9yIGJ5XHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzY2FsZShvdXQsIGEsIGIpIHtcbiAgb3V0WzBdID0gYVswXSAqIGI7XG4gIG91dFsxXSA9IGFbMV0gKiBiO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIEFkZHMgdHdvIHZlYzIncyBhZnRlciBzY2FsaW5nIHRoZSBzZWNvbmQgb3BlcmFuZCBieSBhIHNjYWxhciB2YWx1ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gc2NhbGUgdGhlIGFtb3VudCB0byBzY2FsZSBiIGJ5IGJlZm9yZSBhZGRpbmdcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHNjYWxlQW5kQWRkKG91dCwgYSwgYiwgc2NhbGUpIHtcbiAgb3V0WzBdID0gYVswXSArIGJbMF0gKiBzY2FsZTtcbiAgb3V0WzFdID0gYVsxXSArIGJbMV0gKiBzY2FsZTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBldWNsaWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRpc3RhbmNlIGJldHdlZW4gYSBhbmQgYlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlKGEsIGIpIHtcbiAgdmFyIHggPSBiWzBdIC0gYVswXSxcbiAgICAgIHkgPSBiWzFdIC0gYVsxXTtcbiAgcmV0dXJuIE1hdGguaHlwb3QoeCwgeSk7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBldWNsaWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3F1YXJlZERpc3RhbmNlKGEsIGIpIHtcbiAgdmFyIHggPSBiWzBdIC0gYVswXSxcbiAgICAgIHkgPSBiWzFdIC0gYVsxXTtcbiAgcmV0dXJuIHggKiB4ICsgeSAqIHk7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgbGVuZ3RoIG9mIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIGNhbGN1bGF0ZSBsZW5ndGggb2ZcclxuICogQHJldHVybnMge051bWJlcn0gbGVuZ3RoIG9mIGFcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBsZW5ndGgoYSkge1xuICB2YXIgeCA9IGFbMF0sXG4gICAgICB5ID0gYVsxXTtcbiAgcmV0dXJuIE1hdGguaHlwb3QoeCwgeSk7XG59XG4vKipcclxuICogQ2FsY3VsYXRlcyB0aGUgc3F1YXJlZCBsZW5ndGggb2YgYSB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB2ZWN0b3IgdG8gY2FsY3VsYXRlIHNxdWFyZWQgbGVuZ3RoIG9mXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IHNxdWFyZWQgbGVuZ3RoIG9mIGFcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBzcXVhcmVkTGVuZ3RoKGEpIHtcbiAgdmFyIHggPSBhWzBdLFxuICAgICAgeSA9IGFbMV07XG4gIHJldHVybiB4ICogeCArIHkgKiB5O1xufVxuLyoqXHJcbiAqIE5lZ2F0ZXMgdGhlIGNvbXBvbmVudHMgb2YgYSB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB2ZWN0b3IgdG8gbmVnYXRlXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGUob3V0LCBhKSB7XG4gIG91dFswXSA9IC1hWzBdO1xuICBvdXRbMV0gPSAtYVsxXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBpbnZlcnNlIG9mIHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMlxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdmVjdG9yIHRvIGludmVydFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShvdXQsIGEpIHtcbiAgb3V0WzBdID0gMS4wIC8gYVswXTtcbiAgb3V0WzFdID0gMS4wIC8gYVsxXTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBOb3JtYWxpemUgYSB2ZWMyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB2ZWN0b3IgdG8gbm9ybWFsaXplXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemUob3V0LCBhKSB7XG4gIHZhciB4ID0gYVswXSxcbiAgICAgIHkgPSBhWzFdO1xuICB2YXIgbGVuID0geCAqIHggKyB5ICogeTtcblxuICBpZiAobGVuID4gMCkge1xuICAgIC8vVE9ETzogZXZhbHVhdGUgdXNlIG9mIGdsbV9pbnZzcXJ0IGhlcmU/XG4gICAgbGVuID0gMSAvIE1hdGguc3FydChsZW4pO1xuICB9XG5cbiAgb3V0WzBdID0gYVswXSAqIGxlbjtcbiAgb3V0WzFdID0gYVsxXSAqIGxlbjtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBDYWxjdWxhdGVzIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gdmVjMidzXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgdGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IGRvdCBwcm9kdWN0IG9mIGEgYW5kIGJcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBkb3QoYSwgYikge1xuICByZXR1cm4gYVswXSAqIGJbMF0gKyBhWzFdICogYlsxXTtcbn1cbi8qKlxyXG4gKiBDb21wdXRlcyB0aGUgY3Jvc3MgcHJvZHVjdCBvZiB0d28gdmVjMidzXHJcbiAqIE5vdGUgdGhhdCB0aGUgY3Jvc3MgcHJvZHVjdCBtdXN0IGJ5IGRlZmluaXRpb24gcHJvZHVjZSBhIDNEIHZlY3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcmV0dXJucyB7dmVjM30gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY3Jvc3Mob3V0LCBhLCBiKSB7XG4gIHZhciB6ID0gYVswXSAqIGJbMV0gLSBhWzFdICogYlswXTtcbiAgb3V0WzBdID0gb3V0WzFdID0gMDtcbiAgb3V0WzJdID0gejtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBQZXJmb3JtcyBhIGxpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gdHdvIHZlYzInc1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIGZpcnN0IG9wZXJhbmRcclxuICogQHBhcmFtIHt2ZWMyfSBiIHRoZSBzZWNvbmQgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gdCBpbnRlcnBvbGF0aW9uIGFtb3VudCwgaW4gdGhlIHJhbmdlIFswLTFdLCBiZXR3ZWVuIHRoZSB0d28gaW5wdXRzXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBsZXJwKG91dCwgYSwgYiwgdCkge1xuICB2YXIgYXggPSBhWzBdLFxuICAgICAgYXkgPSBhWzFdO1xuICBvdXRbMF0gPSBheCArIHQgKiAoYlswXSAtIGF4KTtcbiAgb3V0WzFdID0gYXkgKyB0ICogKGJbMV0gLSBheSk7XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2VuZXJhdGVzIGEgcmFuZG9tIHZlY3RvciB3aXRoIHRoZSBnaXZlbiBzY2FsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge051bWJlcn0gW3NjYWxlXSBMZW5ndGggb2YgdGhlIHJlc3VsdGluZyB2ZWN0b3IuIElmIG9tbWl0dGVkLCBhIHVuaXQgdmVjdG9yIHdpbGwgYmUgcmV0dXJuZWRcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbShvdXQsIHNjYWxlKSB7XG4gIHNjYWxlID0gc2NhbGUgfHwgMS4wO1xuICB2YXIgciA9IGdsTWF0cml4LlJBTkRPTSgpICogMi4wICogTWF0aC5QSTtcbiAgb3V0WzBdID0gTWF0aC5jb3MocikgKiBzY2FsZTtcbiAgb3V0WzFdID0gTWF0aC5zaW4ocikgKiBzY2FsZTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMyIHdpdGggYSBtYXQyXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB0aGUgdmVjdG9yIHRvIHRyYW5zZm9ybVxyXG4gKiBAcGFyYW0ge21hdDJ9IG0gbWF0cml4IHRvIHRyYW5zZm9ybSB3aXRoXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1NYXQyKG91dCwgYSwgbSkge1xuICB2YXIgeCA9IGFbMF0sXG4gICAgICB5ID0gYVsxXTtcbiAgb3V0WzBdID0gbVswXSAqIHggKyBtWzJdICogeTtcbiAgb3V0WzFdID0gbVsxXSAqIHggKyBtWzNdICogeTtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBUcmFuc2Zvcm1zIHRoZSB2ZWMyIHdpdGggYSBtYXQyZFxyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cclxuICogQHBhcmFtIHttYXQyZH0gbSBtYXRyaXggdG8gdHJhbnNmb3JtIHdpdGhcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybU1hdDJkKG91dCwgYSwgbSkge1xuICB2YXIgeCA9IGFbMF0sXG4gICAgICB5ID0gYVsxXTtcbiAgb3V0WzBdID0gbVswXSAqIHggKyBtWzJdICogeSArIG1bNF07XG4gIG91dFsxXSA9IG1bMV0gKiB4ICsgbVszXSAqIHkgKyBtWzVdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFRyYW5zZm9ybXMgdGhlIHZlYzIgd2l0aCBhIG1hdDNcclxuICogM3JkIHZlY3RvciBjb21wb25lbnQgaXMgaW1wbGljaXRseSAnMSdcclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3JcclxuICogQHBhcmFtIHt2ZWMyfSBhIHRoZSB2ZWN0b3IgdG8gdHJhbnNmb3JtXHJcbiAqIEBwYXJhbSB7bWF0M30gbSBtYXRyaXggdG8gdHJhbnNmb3JtIHdpdGhcclxuICogQHJldHVybnMge3ZlYzJ9IG91dFxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybU1hdDMob3V0LCBhLCBtKSB7XG4gIHZhciB4ID0gYVswXSxcbiAgICAgIHkgPSBhWzFdO1xuICBvdXRbMF0gPSBtWzBdICogeCArIG1bM10gKiB5ICsgbVs2XTtcbiAgb3V0WzFdID0gbVsxXSAqIHggKyBtWzRdICogeSArIG1bN107XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogVHJhbnNmb3JtcyB0aGUgdmVjMiB3aXRoIGEgbWF0NFxyXG4gKiAzcmQgdmVjdG9yIGNvbXBvbmVudCBpcyBpbXBsaWNpdGx5ICcwJ1xyXG4gKiA0dGggdmVjdG9yIGNvbXBvbmVudCBpcyBpbXBsaWNpdGx5ICcxJ1xyXG4gKlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGEgdGhlIHZlY3RvciB0byB0cmFuc2Zvcm1cclxuICogQHBhcmFtIHttYXQ0fSBtIG1hdHJpeCB0byB0cmFuc2Zvcm0gd2l0aFxyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtTWF0NChvdXQsIGEsIG0pIHtcbiAgdmFyIHggPSBhWzBdO1xuICB2YXIgeSA9IGFbMV07XG4gIG91dFswXSA9IG1bMF0gKiB4ICsgbVs0XSAqIHkgKyBtWzEyXTtcbiAgb3V0WzFdID0gbVsxXSAqIHggKyBtWzVdICogeSArIG1bMTNdO1xuICByZXR1cm4gb3V0O1xufVxuLyoqXHJcbiAqIFJvdGF0ZSBhIDJEIHZlY3RvclxyXG4gKiBAcGFyYW0ge3ZlYzJ9IG91dCBUaGUgcmVjZWl2aW5nIHZlYzJcclxuICogQHBhcmFtIHt2ZWMyfSBhIFRoZSB2ZWMyIHBvaW50IHRvIHJvdGF0ZVxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgVGhlIG9yaWdpbiBvZiB0aGUgcm90YXRpb25cclxuICogQHBhcmFtIHtOdW1iZXJ9IHJhZCBUaGUgYW5nbGUgb2Ygcm90YXRpb24gaW4gcmFkaWFuc1xyXG4gKiBAcmV0dXJucyB7dmVjMn0gb3V0XHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlKG91dCwgYSwgYiwgcmFkKSB7XG4gIC8vVHJhbnNsYXRlIHBvaW50IHRvIHRoZSBvcmlnaW5cbiAgdmFyIHAwID0gYVswXSAtIGJbMF0sXG4gICAgICBwMSA9IGFbMV0gLSBiWzFdLFxuICAgICAgc2luQyA9IE1hdGguc2luKHJhZCksXG4gICAgICBjb3NDID0gTWF0aC5jb3MocmFkKTsgLy9wZXJmb3JtIHJvdGF0aW9uIGFuZCB0cmFuc2xhdGUgdG8gY29ycmVjdCBwb3NpdGlvblxuXG4gIG91dFswXSA9IHAwICogY29zQyAtIHAxICogc2luQyArIGJbMF07XG4gIG91dFsxXSA9IHAwICogc2luQyArIHAxICogY29zQyArIGJbMV07XG4gIHJldHVybiBvdXQ7XG59XG4vKipcclxuICogR2V0IHRoZSBhbmdsZSBiZXR3ZWVuIHR3byAyRCB2ZWN0b3JzXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSBUaGUgZmlyc3Qgb3BlcmFuZFxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgVGhlIHNlY29uZCBvcGVyYW5kXHJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBhbmdsZSBpbiByYWRpYW5zXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYW5nbGUoYSwgYikge1xuICB2YXIgeDEgPSBhWzBdLFxuICAgICAgeTEgPSBhWzFdLFxuICAgICAgeDIgPSBiWzBdLFxuICAgICAgeTIgPSBiWzFdLFxuICAgICAgLy8gbWFnIGlzIHRoZSBwcm9kdWN0IG9mIHRoZSBtYWduaXR1ZGVzIG9mIGEgYW5kIGJcbiAgbWFnID0gTWF0aC5zcXJ0KHgxICogeDEgKyB5MSAqIHkxKSAqIE1hdGguc3FydCh4MiAqIHgyICsgeTIgKiB5MiksXG4gICAgICAvLyBtYWcgJiYuLiBzaG9ydCBjaXJjdWl0cyBpZiBtYWcgPT0gMFxuICBjb3NpbmUgPSBtYWcgJiYgKHgxICogeDIgKyB5MSAqIHkyKSAvIG1hZzsgLy8gTWF0aC5taW4oTWF0aC5tYXgoY29zaW5lLCAtMSksIDEpIGNsYW1wcyB0aGUgY29zaW5lIGJldHdlZW4gLTEgYW5kIDFcblxuICByZXR1cm4gTWF0aC5hY29zKE1hdGgubWluKE1hdGgubWF4KGNvc2luZSwgLTEpLCAxKSk7XG59XG4vKipcclxuICogU2V0IHRoZSBjb21wb25lbnRzIG9mIGEgdmVjMiB0byB6ZXJvXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yXHJcbiAqIEByZXR1cm5zIHt2ZWMyfSBvdXRcclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB6ZXJvKG91dCkge1xuICBvdXRbMF0gPSAwLjA7XG4gIG91dFsxXSA9IDAuMDtcbiAgcmV0dXJuIG91dDtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgdmVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSB2ZWN0b3IgdG8gcmVwcmVzZW50IGFzIGEgc3RyaW5nXHJcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmVjdG9yXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gc3RyKGEpIHtcbiAgcmV0dXJuIFwidmVjMihcIiArIGFbMF0gKyBcIiwgXCIgKyBhWzFdICsgXCIpXCI7XG59XG4vKipcclxuICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgdmVjdG9ycyBleGFjdGx5IGhhdmUgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgcG9zaXRpb24gKHdoZW4gY29tcGFyZWQgd2l0aCA9PT0pXHJcbiAqXHJcbiAqIEBwYXJhbSB7dmVjMn0gYSBUaGUgZmlyc3QgdmVjdG9yLlxyXG4gKiBAcGFyYW0ge3ZlYzJ9IGIgVGhlIHNlY29uZCB2ZWN0b3IuXHJcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmIHRoZSB2ZWN0b3JzIGFyZSBlcXVhbCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGV4YWN0RXF1YWxzKGEsIGIpIHtcbiAgcmV0dXJuIGFbMF0gPT09IGJbMF0gJiYgYVsxXSA9PT0gYlsxXTtcbn1cbi8qKlxyXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSB2ZWN0b3JzIGhhdmUgYXBwcm94aW1hdGVseSB0aGUgc2FtZSBlbGVtZW50cyBpbiB0aGUgc2FtZSBwb3NpdGlvbi5cclxuICpcclxuICogQHBhcmFtIHt2ZWMyfSBhIFRoZSBmaXJzdCB2ZWN0b3IuXHJcbiAqIEBwYXJhbSB7dmVjMn0gYiBUaGUgc2Vjb25kIHZlY3Rvci5cclxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWYgdGhlIHZlY3RvcnMgYXJlIGVxdWFsLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWxzKGEsIGIpIHtcbiAgdmFyIGEwID0gYVswXSxcbiAgICAgIGExID0gYVsxXTtcbiAgdmFyIGIwID0gYlswXSxcbiAgICAgIGIxID0gYlsxXTtcbiAgcmV0dXJuIE1hdGguYWJzKGEwIC0gYjApIDw9IGdsTWF0cml4LkVQU0lMT04gKiBNYXRoLm1heCgxLjAsIE1hdGguYWJzKGEwKSwgTWF0aC5hYnMoYjApKSAmJiBNYXRoLmFicyhhMSAtIGIxKSA8PSBnbE1hdHJpeC5FUFNJTE9OICogTWF0aC5tYXgoMS4wLCBNYXRoLmFicyhhMSksIE1hdGguYWJzKGIxKSk7XG59XG4vKipcclxuICogQWxpYXMgZm9yIHtAbGluayB2ZWMyLmxlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGxlbiA9IGxlbmd0aDtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuc3VidHJhY3R9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBzdWIgPSBzdWJ0cmFjdDtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIubXVsdGlwbHl9XHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cblxuZXhwb3J0IHZhciBtdWwgPSBtdWx0aXBseTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuZGl2aWRlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgZGl2ID0gZGl2aWRlO1xuLyoqXHJcbiAqIEFsaWFzIGZvciB7QGxpbmsgdmVjMi5kaXN0YW5jZX1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIGRpc3QgPSBkaXN0YW5jZTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuc3F1YXJlZERpc3RhbmNlfVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgc3FyRGlzdCA9IHNxdWFyZWREaXN0YW5jZTtcbi8qKlxyXG4gKiBBbGlhcyBmb3Ige0BsaW5rIHZlYzIuc3F1YXJlZExlbmd0aH1cclxuICogQGZ1bmN0aW9uXHJcbiAqL1xuXG5leHBvcnQgdmFyIHNxckxlbiA9IHNxdWFyZWRMZW5ndGg7XG4vKipcclxuICogUGVyZm9ybSBzb21lIG9wZXJhdGlvbiBvdmVyIGFuIGFycmF5IG9mIHZlYzJzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge0FycmF5fSBhIHRoZSBhcnJheSBvZiB2ZWN0b3JzIHRvIGl0ZXJhdGUgb3ZlclxyXG4gKiBAcGFyYW0ge051bWJlcn0gc3RyaWRlIE51bWJlciBvZiBlbGVtZW50cyBiZXR3ZWVuIHRoZSBzdGFydCBvZiBlYWNoIHZlYzIuIElmIDAgYXNzdW1lcyB0aWdodGx5IHBhY2tlZFxyXG4gKiBAcGFyYW0ge051bWJlcn0gb2Zmc2V0IE51bWJlciBvZiBlbGVtZW50cyB0byBza2lwIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFycmF5XHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBjb3VudCBOdW1iZXIgb2YgdmVjMnMgdG8gaXRlcmF0ZSBvdmVyLiBJZiAwIGl0ZXJhdGVzIG92ZXIgZW50aXJlIGFycmF5XHJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggdmVjdG9yIGluIHRoZSBhcnJheVxyXG4gKiBAcGFyYW0ge09iamVjdH0gW2FyZ10gYWRkaXRpb25hbCBhcmd1bWVudCB0byBwYXNzIHRvIGZuXHJcbiAqIEByZXR1cm5zIHtBcnJheX0gYVxyXG4gKiBAZnVuY3Rpb25cclxuICovXG5cbmV4cG9ydCB2YXIgZm9yRWFjaCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHZlYyA9IGNyZWF0ZSgpO1xuICByZXR1cm4gZnVuY3Rpb24gKGEsIHN0cmlkZSwgb2Zmc2V0LCBjb3VudCwgZm4sIGFyZykge1xuICAgIHZhciBpLCBsO1xuXG4gICAgaWYgKCFzdHJpZGUpIHtcbiAgICAgIHN0cmlkZSA9IDI7XG4gICAgfVxuXG4gICAgaWYgKCFvZmZzZXQpIHtcbiAgICAgIG9mZnNldCA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGNvdW50KSB7XG4gICAgICBsID0gTWF0aC5taW4oY291bnQgKiBzdHJpZGUgKyBvZmZzZXQsIGEubGVuZ3RoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbCA9IGEubGVuZ3RoO1xuICAgIH1cblxuICAgIGZvciAoaSA9IG9mZnNldDsgaSA8IGw7IGkgKz0gc3RyaWRlKSB7XG4gICAgICB2ZWNbMF0gPSBhW2ldO1xuICAgICAgdmVjWzFdID0gYVtpICsgMV07XG4gICAgICBmbih2ZWMsIHZlYywgYXJnKTtcbiAgICAgIGFbaV0gPSB2ZWNbMF07XG4gICAgICBhW2kgKyAxXSA9IHZlY1sxXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYTtcbiAgfTtcbn0oKTsiLCIvLyBAZmxvd1xuXG5pbXBvcnQgU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZV9sYXllcic7XG5cbmltcG9ydCBDaXJjbGVCdWNrZXQgZnJvbSAnLi4vLi4vZGF0YS9idWNrZXQvY2lyY2xlX2J1Y2tldCc7XG5pbXBvcnQge3BvbHlnb25JbnRlcnNlY3RzQnVmZmVyZWRQb2ludH0gZnJvbSAnLi4vLi4vdXRpbC9pbnRlcnNlY3Rpb25fdGVzdHMnO1xuaW1wb3J0IHtnZXRNYXhpbXVtUGFpbnRWYWx1ZSwgdHJhbnNsYXRlRGlzdGFuY2UsIHRyYW5zbGF0ZX0gZnJvbSAnLi4vcXVlcnlfdXRpbHMnO1xuaW1wb3J0IHByb3BlcnRpZXMgZnJvbSAnLi9jaXJjbGVfc3R5bGVfbGF5ZXJfcHJvcGVydGllcyc7XG5pbXBvcnQge1RyYW5zaXRpb25hYmxlLCBUcmFuc2l0aW9uaW5nLCBMYXlvdXQsIFBvc3NpYmx5RXZhbHVhdGVkfSBmcm9tICcuLi9wcm9wZXJ0aWVzJztcbmltcG9ydCB7dmVjNH0gZnJvbSAnZ2wtbWF0cml4JztcbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcblxuaW1wb3J0IHR5cGUge0ZlYXR1cmVTdGF0ZX0gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi8uLi9nZW8vdHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIHtCdWNrZXQsIEJ1Y2tldFBhcmFtZXRlcnN9IGZyb20gJy4uLy4uL2RhdGEvYnVja2V0JztcbmltcG9ydCB0eXBlIHtMYXlvdXRQcm9wcywgUGFpbnRQcm9wc30gZnJvbSAnLi9jaXJjbGVfc3R5bGVfbGF5ZXJfcHJvcGVydGllcyc7XG5pbXBvcnQgdHlwZSB7TGF5ZXJTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuY2xhc3MgQ2lyY2xlU3R5bGVMYXllciBleHRlbmRzIFN0eWxlTGF5ZXIge1xuICAgIF91bmV2YWx1YXRlZExheW91dDogTGF5b3V0PExheW91dFByb3BzPjtcbiAgICBsYXlvdXQ6IFBvc3NpYmx5RXZhbHVhdGVkPExheW91dFByb3BzPjtcblxuICAgIF90cmFuc2l0aW9uYWJsZVBhaW50OiBUcmFuc2l0aW9uYWJsZTxQYWludFByb3BzPjtcbiAgICBfdHJhbnNpdGlvbmluZ1BhaW50OiBUcmFuc2l0aW9uaW5nPFBhaW50UHJvcHM+O1xuICAgIHBhaW50OiBQb3NzaWJseUV2YWx1YXRlZDxQYWludFByb3BzPjtcblxuICAgIGNvbnN0cnVjdG9yKGxheWVyOiBMYXllclNwZWNpZmljYXRpb24pIHtcbiAgICAgICAgc3VwZXIobGF5ZXIsIHByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIGNyZWF0ZUJ1Y2tldChwYXJhbWV0ZXJzOiBCdWNrZXRQYXJhbWV0ZXJzPCo+KSB7XG4gICAgICAgIHJldHVybiBuZXcgQ2lyY2xlQnVja2V0KHBhcmFtZXRlcnMpO1xuICAgIH1cblxuICAgIHF1ZXJ5UmFkaXVzKGJ1Y2tldDogQnVja2V0KTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgY2lyY2xlQnVja2V0OiBDaXJjbGVCdWNrZXQ8Q2lyY2xlU3R5bGVMYXllcj4gPSAoYnVja2V0OiBhbnkpO1xuICAgICAgICByZXR1cm4gZ2V0TWF4aW11bVBhaW50VmFsdWUoJ2NpcmNsZS1yYWRpdXMnLCB0aGlzLCBjaXJjbGVCdWNrZXQpICtcbiAgICAgICAgICAgIGdldE1heGltdW1QYWludFZhbHVlKCdjaXJjbGUtc3Ryb2tlLXdpZHRoJywgdGhpcywgY2lyY2xlQnVja2V0KSArXG4gICAgICAgICAgICB0cmFuc2xhdGVEaXN0YW5jZSh0aGlzLnBhaW50LmdldCgnY2lyY2xlLXRyYW5zbGF0ZScpKTtcbiAgICB9XG5cbiAgICBxdWVyeUludGVyc2VjdHNGZWF0dXJlKHF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmU6IFZlY3RvclRpbGVGZWF0dXJlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZVN0YXRlOiBGZWF0dXJlU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeTogQXJyYXk8QXJyYXk8UG9pbnQ+PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHpvb206IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxzVG9UaWxlVW5pdHM6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsUG9zTWF0cml4OiBGbG9hdDMyQXJyYXkpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdHJhbnNsYXRlZFBvbHlnb24gPSB0cmFuc2xhdGUocXVlcnlHZW9tZXRyeSxcbiAgICAgICAgICAgIHRoaXMucGFpbnQuZ2V0KCdjaXJjbGUtdHJhbnNsYXRlJyksXG4gICAgICAgICAgICB0aGlzLnBhaW50LmdldCgnY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3InKSxcbiAgICAgICAgICAgIHRyYW5zZm9ybS5hbmdsZSwgcGl4ZWxzVG9UaWxlVW5pdHMpO1xuICAgICAgICBjb25zdCByYWRpdXMgPSB0aGlzLnBhaW50LmdldCgnY2lyY2xlLXJhZGl1cycpLmV2YWx1YXRlKGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSk7XG4gICAgICAgIGNvbnN0IHN0cm9rZSA9IHRoaXMucGFpbnQuZ2V0KCdjaXJjbGUtc3Ryb2tlLXdpZHRoJykuZXZhbHVhdGUoZmVhdHVyZSwgZmVhdHVyZVN0YXRlKTtcbiAgICAgICAgY29uc3Qgc2l6ZSAgPSByYWRpdXMgKyBzdHJva2U7XG5cbiAgICAgICAgLy8gRm9yIHBpdGNoLWFsaWdubWVudDogbWFwLCBjb21wYXJlIGZlYXR1cmUgZ2VvbWV0cnkgdG8gcXVlcnkgZ2VvbWV0cnkgaW4gdGhlIHBsYW5lIG9mIHRoZSB0aWxlXG4gICAgICAgIC8vIC8vIE90aGVyd2lzZSwgY29tcGFyZSBnZW9tZXRyeSBpbiB0aGUgcGxhbmUgb2YgdGhlIHZpZXdwb3J0XG4gICAgICAgIC8vIC8vIEEgY2lyY2xlIHdpdGggZml4ZWQgc2NhbGluZyByZWxhdGl2ZSB0byB0aGUgdmlld3BvcnQgZ2V0cyBsYXJnZXIgaW4gdGlsZSBzcGFjZSBhcyBpdCBtb3ZlcyBpbnRvIHRoZSBkaXN0YW5jZVxuICAgICAgICAvLyAvLyBBIGNpcmNsZSB3aXRoIGZpeGVkIHNjYWxpbmcgcmVsYXRpdmUgdG8gdGhlIG1hcCBnZXRzIHNtYWxsZXIgaW4gdmlld3BvcnQgc3BhY2UgYXMgaXQgbW92ZXMgaW50byB0aGUgZGlzdGFuY2VcbiAgICAgICAgY29uc3QgYWxpZ25XaXRoTWFwID0gdGhpcy5wYWludC5nZXQoJ2NpcmNsZS1waXRjaC1hbGlnbm1lbnQnKSA9PT0gJ21hcCc7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkUG9seWdvbiA9IGFsaWduV2l0aE1hcCA/IHRyYW5zbGF0ZWRQb2x5Z29uIDogcHJvamVjdFF1ZXJ5R2VvbWV0cnkodHJhbnNsYXRlZFBvbHlnb24sIHBpeGVsUG9zTWF0cml4KTtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWRTaXplID0gYWxpZ25XaXRoTWFwID8gc2l6ZSAqIHBpeGVsc1RvVGlsZVVuaXRzIDogc2l6ZTtcblxuICAgICAgICBmb3IgKGNvbnN0IHJpbmcgb2YgZ2VvbWV0cnkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcG9pbnQgb2YgcmluZykge1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtZWRQb2ludCA9IGFsaWduV2l0aE1hcCA/IHBvaW50IDogcHJvamVjdFBvaW50KHBvaW50LCBwaXhlbFBvc01hdHJpeCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgYWRqdXN0ZWRTaXplID0gdHJhbnNmb3JtZWRTaXplO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb2plY3RlZENlbnRlciA9IHZlYzQudHJhbnNmb3JtTWF0NChbXSwgW3BvaW50LngsIHBvaW50LnksIDAsIDFdLCBwaXhlbFBvc01hdHJpeCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGFpbnQuZ2V0KCdjaXJjbGUtcGl0Y2gtc2NhbGUnKSA9PT0gJ3ZpZXdwb3J0JyAmJiB0aGlzLnBhaW50LmdldCgnY2lyY2xlLXBpdGNoLWFsaWdubWVudCcpID09PSAnbWFwJykge1xuICAgICAgICAgICAgICAgICAgICBhZGp1c3RlZFNpemUgKj0gcHJvamVjdGVkQ2VudGVyWzNdIC8gdHJhbnNmb3JtLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBhaW50LmdldCgnY2lyY2xlLXBpdGNoLXNjYWxlJykgPT09ICdtYXAnICYmIHRoaXMucGFpbnQuZ2V0KCdjaXJjbGUtcGl0Y2gtYWxpZ25tZW50JykgPT09ICd2aWV3cG9ydCcpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRqdXN0ZWRTaXplICo9IHRyYW5zZm9ybS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlIC8gcHJvamVjdGVkQ2VudGVyWzNdO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChwb2x5Z29uSW50ZXJzZWN0c0J1ZmZlcmVkUG9pbnQodHJhbnNmb3JtZWRQb2x5Z29uLCB0cmFuc2Zvcm1lZFBvaW50LCBhZGp1c3RlZFNpemUpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHByb2plY3RQb2ludChwOiBQb2ludCwgcGl4ZWxQb3NNYXRyaXg6IEZsb2F0MzJBcnJheSkge1xuICAgIGNvbnN0IHBvaW50ID0gdmVjNC50cmFuc2Zvcm1NYXQ0KFtdLCBbcC54LCBwLnksIDAsIDFdLCBwaXhlbFBvc01hdHJpeCk7XG4gICAgcmV0dXJuIG5ldyBQb2ludChwb2ludFswXSAvIHBvaW50WzNdLCBwb2ludFsxXSAvIHBvaW50WzNdKTtcbn1cblxuZnVuY3Rpb24gcHJvamVjdFF1ZXJ5R2VvbWV0cnkocXVlcnlHZW9tZXRyeTogQXJyYXk8UG9pbnQ+LCBwaXhlbFBvc01hdHJpeDogRmxvYXQzMkFycmF5KSB7XG4gICAgcmV0dXJuIHF1ZXJ5R2VvbWV0cnkubWFwKChwKSA9PiB7XG4gICAgICAgIHJldHVybiBwcm9qZWN0UG9pbnQocCwgcGl4ZWxQb3NNYXRyaXgpO1xuICAgIH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBDaXJjbGVTdHlsZUxheWVyO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IENpcmNsZUJ1Y2tldCBmcm9tICcuL2NpcmNsZV9idWNrZXQnO1xuXG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuLi8uLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuXG5pbXBvcnQgdHlwZSBIZWF0bWFwU3R5bGVMYXllciBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZV9sYXllci9oZWF0bWFwX3N0eWxlX2xheWVyJztcblxuY2xhc3MgSGVhdG1hcEJ1Y2tldCBleHRlbmRzIENpcmNsZUJ1Y2tldDxIZWF0bWFwU3R5bGVMYXllcj4ge1xuICAgIC8vIE5lZWRlZCBmb3IgZmxvdyB0byBhY2NlcHQgb21pdDogWydsYXllcnMnXSBiZWxvdywgZHVlIHRvXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzQyNjJcbiAgICBsYXllcnM6IEFycmF5PEhlYXRtYXBTdHlsZUxheWVyPjtcbn1cblxucmVnaXN0ZXIoJ0hlYXRtYXBCdWNrZXQnLCBIZWF0bWFwQnVja2V0LCB7b21pdDogWydsYXllcnMnXX0pO1xuXG5leHBvcnQgZGVmYXVsdCBIZWF0bWFwQnVja2V0O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuXG5leHBvcnQgdHlwZSBTaXplID0ge1xuICAgIHdpZHRoOiBudW1iZXIsXG4gICAgaGVpZ2h0OiBudW1iZXJcbn07XG5cbnR5cGUgUG9pbnQgPSB7XG4gICAgeDogbnVtYmVyLFxuICAgIHk6IG51bWJlclxufTtcblxuZnVuY3Rpb24gY3JlYXRlSW1hZ2UoaW1hZ2U6ICosIHt3aWR0aCwgaGVpZ2h0fTogU2l6ZSwgY2hhbm5lbHM6IG51bWJlciwgZGF0YT86IFVpbnQ4QXJyYXkgfCBVaW50OENsYW1wZWRBcnJheSkge1xuICAgIGlmICghZGF0YSkge1xuICAgICAgICBkYXRhID0gbmV3IFVpbnQ4QXJyYXkod2lkdGggKiBoZWlnaHQgKiBjaGFubmVscyk7XG4gICAgfSBlbHNlIGlmIChkYXRhIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpIHtcbiAgICAgICAgZGF0YSA9IG5ldyBVaW50OEFycmF5KGRhdGEuYnVmZmVyKTtcbiAgICB9IGVsc2UgaWYgKGRhdGEubGVuZ3RoICE9PSB3aWR0aCAqIGhlaWdodCAqIGNoYW5uZWxzKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdtaXNtYXRjaGVkIGltYWdlIHNpemUnKTtcbiAgICB9XG4gICAgaW1hZ2Uud2lkdGggPSB3aWR0aDtcbiAgICBpbWFnZS5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgaW1hZ2UuZGF0YSA9IGRhdGE7XG4gICAgcmV0dXJuIGltYWdlO1xufVxuXG5mdW5jdGlvbiByZXNpemVJbWFnZShpbWFnZTogKiwge3dpZHRoLCBoZWlnaHR9OiBTaXplLCBjaGFubmVsczogbnVtYmVyKSB7XG4gICAgaWYgKHdpZHRoID09PSBpbWFnZS53aWR0aCAmJiBoZWlnaHQgPT09IGltYWdlLmhlaWdodCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmV3SW1hZ2UgPSBjcmVhdGVJbWFnZSh7fSwge3dpZHRoLCBoZWlnaHR9LCBjaGFubmVscyk7XG5cbiAgICBjb3B5SW1hZ2UoaW1hZ2UsIG5ld0ltYWdlLCB7eDogMCwgeTogMH0sIHt4OiAwLCB5OiAwfSwge1xuICAgICAgICB3aWR0aDogTWF0aC5taW4oaW1hZ2Uud2lkdGgsIHdpZHRoKSxcbiAgICAgICAgaGVpZ2h0OiBNYXRoLm1pbihpbWFnZS5oZWlnaHQsIGhlaWdodClcbiAgICB9LCBjaGFubmVscyk7XG5cbiAgICBpbWFnZS53aWR0aCA9IHdpZHRoO1xuICAgIGltYWdlLmhlaWdodCA9IGhlaWdodDtcbiAgICBpbWFnZS5kYXRhID0gbmV3SW1hZ2UuZGF0YTtcbn1cblxuZnVuY3Rpb24gY29weUltYWdlKHNyY0ltZzogKiwgZHN0SW1nOiAqLCBzcmNQdDogUG9pbnQsIGRzdFB0OiBQb2ludCwgc2l6ZTogU2l6ZSwgY2hhbm5lbHM6IG51bWJlcikge1xuICAgIGlmIChzaXplLndpZHRoID09PSAwIHx8IHNpemUuaGVpZ2h0ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBkc3RJbWc7XG4gICAgfVxuXG4gICAgaWYgKHNpemUud2lkdGggPiBzcmNJbWcud2lkdGggfHxcbiAgICAgICAgc2l6ZS5oZWlnaHQgPiBzcmNJbWcuaGVpZ2h0IHx8XG4gICAgICAgIHNyY1B0LnggPiBzcmNJbWcud2lkdGggLSBzaXplLndpZHRoIHx8XG4gICAgICAgIHNyY1B0LnkgPiBzcmNJbWcuaGVpZ2h0IC0gc2l6ZS5oZWlnaHQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ291dCBvZiByYW5nZSBzb3VyY2UgY29vcmRpbmF0ZXMgZm9yIGltYWdlIGNvcHknKTtcbiAgICB9XG5cbiAgICBpZiAoc2l6ZS53aWR0aCA+IGRzdEltZy53aWR0aCB8fFxuICAgICAgICBzaXplLmhlaWdodCA+IGRzdEltZy5oZWlnaHQgfHxcbiAgICAgICAgZHN0UHQueCA+IGRzdEltZy53aWR0aCAtIHNpemUud2lkdGggfHxcbiAgICAgICAgZHN0UHQueSA+IGRzdEltZy5oZWlnaHQgLSBzaXplLmhlaWdodCkge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb3V0IG9mIHJhbmdlIGRlc3RpbmF0aW9uIGNvb3JkaW5hdGVzIGZvciBpbWFnZSBjb3B5Jyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3JjRGF0YSA9IHNyY0ltZy5kYXRhO1xuICAgIGNvbnN0IGRzdERhdGEgPSBkc3RJbWcuZGF0YTtcblxuICAgIGFzc2VydChzcmNEYXRhICE9PSBkc3REYXRhKTtcblxuICAgIGZvciAobGV0IHkgPSAwOyB5IDwgc2l6ZS5oZWlnaHQ7IHkrKykge1xuICAgICAgICBjb25zdCBzcmNPZmZzZXQgPSAoKHNyY1B0LnkgKyB5KSAqIHNyY0ltZy53aWR0aCArIHNyY1B0LngpICogY2hhbm5lbHM7XG4gICAgICAgIGNvbnN0IGRzdE9mZnNldCA9ICgoZHN0UHQueSArIHkpICogZHN0SW1nLndpZHRoICsgZHN0UHQueCkgKiBjaGFubmVscztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplLndpZHRoICogY2hhbm5lbHM7IGkrKykge1xuICAgICAgICAgICAgZHN0RGF0YVtkc3RPZmZzZXQgKyBpXSA9IHNyY0RhdGFbc3JjT2Zmc2V0ICsgaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRzdEltZztcbn1cblxuZXhwb3J0IGNsYXNzIEFscGhhSW1hZ2Uge1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgaGVpZ2h0OiBudW1iZXI7XG4gICAgZGF0YTogVWludDhBcnJheTtcblxuICAgIGNvbnN0cnVjdG9yKHNpemU6IFNpemUsIGRhdGE/OiBVaW50OEFycmF5IHwgVWludDhDbGFtcGVkQXJyYXkpIHtcbiAgICAgICAgY3JlYXRlSW1hZ2UodGhpcywgc2l6ZSwgMSwgZGF0YSk7XG4gICAgfVxuXG4gICAgcmVzaXplKHNpemU6IFNpemUpIHtcbiAgICAgICAgcmVzaXplSW1hZ2UodGhpcywgc2l6ZSwgMSk7XG4gICAgfVxuXG4gICAgY2xvbmUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWxwaGFJbWFnZSh7d2lkdGg6IHRoaXMud2lkdGgsIGhlaWdodDogdGhpcy5oZWlnaHR9LCBuZXcgVWludDhBcnJheSh0aGlzLmRhdGEpKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY29weShzcmNJbWc6IEFscGhhSW1hZ2UsIGRzdEltZzogQWxwaGFJbWFnZSwgc3JjUHQ6IFBvaW50LCBkc3RQdDogUG9pbnQsIHNpemU6IFNpemUpIHtcbiAgICAgICAgY29weUltYWdlKHNyY0ltZywgZHN0SW1nLCBzcmNQdCwgZHN0UHQsIHNpemUsIDEpO1xuICAgIH1cbn1cblxuLy8gTm90IHByZW11bHRpcGxpZWQsIGJlY2F1c2UgSW1hZ2VEYXRhIGlzIG5vdCBwcmVtdWx0aXBsaWVkLlxuLy8gVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIG11c3QgYmUgdXNlZCB3aGVuIHVwbG9hZGluZyB0byBhIHRleHR1cmUuXG5leHBvcnQgY2xhc3MgUkdCQUltYWdlIHtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xuXG4gICAgLy8gZGF0YSBtdXN0IGJlIGEgVWludDhBcnJheSBpbnN0ZWFkIG9mIFVpbnQ4Q2xhbXBlZEFycmF5IGJlY2F1c2UgdGV4SW1hZ2UyRCBkb2VzIG5vdFxuICAgIC8vIHN1cHBvcnQgVWludDhDbGFtcGVkQXJyYXkgaW4gYWxsIGJyb3dzZXJzXG4gICAgZGF0YTogVWludDhBcnJheTtcblxuICAgIGNvbnN0cnVjdG9yKHNpemU6IFNpemUsIGRhdGE/OiBVaW50OEFycmF5IHwgVWludDhDbGFtcGVkQXJyYXkpIHtcbiAgICAgICAgY3JlYXRlSW1hZ2UodGhpcywgc2l6ZSwgNCwgZGF0YSk7XG4gICAgfVxuXG4gICAgcmVzaXplKHNpemU6IFNpemUpIHtcbiAgICAgICAgcmVzaXplSW1hZ2UodGhpcywgc2l6ZSwgNCk7XG4gICAgfVxuXG4gICAgcmVwbGFjZShkYXRhOiBVaW50OEFycmF5IHwgVWludDhDbGFtcGVkQXJyYXksIGNvcHk/OiBib29sZWFuKSB7XG4gICAgICAgIGlmIChjb3B5KSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuc2V0KGRhdGEpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gbmV3IFVpbnQ4QXJyYXkoZGF0YS5idWZmZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJHQkFJbWFnZSh7d2lkdGg6IHRoaXMud2lkdGgsIGhlaWdodDogdGhpcy5oZWlnaHR9LCBuZXcgVWludDhBcnJheSh0aGlzLmRhdGEpKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY29weShzcmNJbWc6IFJHQkFJbWFnZSB8IEltYWdlRGF0YSwgZHN0SW1nOiBSR0JBSW1hZ2UsIHNyY1B0OiBQb2ludCwgZHN0UHQ6IFBvaW50LCBzaXplOiBTaXplKSB7XG4gICAgICAgIGNvcHlJbWFnZShzcmNJbWcsIGRzdEltZywgc3JjUHQsIGRzdFB0LCBzaXplLCA0KTtcbiAgICB9XG59XG5cbnJlZ2lzdGVyKCdBbHBoYUltYWdlJywgQWxwaGFJbWFnZSk7XG5yZWdpc3RlcignUkdCQUltYWdlJywgUkdCQUltYWdlKTtcbiIsIi8vIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQuIEVkaXQgYnVpbGQvZ2VuZXJhdGUtc3R5bGUtY29kZS5qcywgdGhlbiBydW4gYHlhcm4gcnVuIGNvZGVnZW5gLlxuLy8gQGZsb3dcbi8qIGVzbGludC1kaXNhYmxlICovXG5cbmltcG9ydCBzdHlsZVNwZWMgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9yZWZlcmVuY2UvbGF0ZXN0JztcblxuaW1wb3J0IHtcbiAgICBQcm9wZXJ0aWVzLFxuICAgIERhdGFDb25zdGFudFByb3BlcnR5LFxuICAgIERhdGFEcml2ZW5Qcm9wZXJ0eSxcbiAgICBDcm9zc0ZhZGVkRGF0YURyaXZlblByb3BlcnR5LFxuICAgIENyb3NzRmFkZWRQcm9wZXJ0eSxcbiAgICBDb2xvclJhbXBQcm9wZXJ0eVxufSBmcm9tICcuLi9wcm9wZXJ0aWVzJztcblxuaW1wb3J0IHR5cGUgQ29sb3IgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy91dGlsL2NvbG9yJztcblxuaW1wb3J0IHR5cGUgRm9ybWF0dGVkIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9mb3JtYXR0ZWQnO1xuXG5pbXBvcnQgdHlwZSBSZXNvbHZlZEltYWdlIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5cblxuZXhwb3J0IHR5cGUgUGFpbnRQcm9wcyA9IHt8XG4gICAgXCJoZWF0bWFwLXJhZGl1c1wiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcImhlYXRtYXAtd2VpZ2h0XCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiaGVhdG1hcC1pbnRlbnNpdHlcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbiAgICBcImhlYXRtYXAtY29sb3JcIjogQ29sb3JSYW1wUHJvcGVydHksXG4gICAgXCJoZWF0bWFwLW9wYWNpdHlcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbnx9O1xuXG5jb25zdCBwYWludDogUHJvcGVydGllczxQYWludFByb3BzPiA9IG5ldyBQcm9wZXJ0aWVzKHtcbiAgICBcImhlYXRtYXAtcmFkaXVzXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfaGVhdG1hcFwiXVtcImhlYXRtYXAtcmFkaXVzXCJdKSxcbiAgICBcImhlYXRtYXAtd2VpZ2h0XCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfaGVhdG1hcFwiXVtcImhlYXRtYXAtd2VpZ2h0XCJdKSxcbiAgICBcImhlYXRtYXAtaW50ZW5zaXR5XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9oZWF0bWFwXCJdW1wiaGVhdG1hcC1pbnRlbnNpdHlcIl0pLFxuICAgIFwiaGVhdG1hcC1jb2xvclwiOiBuZXcgQ29sb3JSYW1wUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfaGVhdG1hcFwiXVtcImhlYXRtYXAtY29sb3JcIl0pLFxuICAgIFwiaGVhdG1hcC1vcGFjaXR5XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9oZWF0bWFwXCJdW1wiaGVhdG1hcC1vcGFjaXR5XCJdKSxcbn0pO1xuXG4vLyBOb3RlOiB3aXRob3V0IGFkZGluZyB0aGUgZXhwbGljaXQgdHlwZSBhbm5vdGF0aW9uLCBGbG93IGluZmVycyB3ZWFrZXIgdHlwZXNcbi8vIGZvciB0aGVzZSBvYmplY3RzIGZyb20gdGhlaXIgdXNlIGluIHRoZSBjb25zdHJ1Y3RvciB0byBTdHlsZUxheWVyLCBhc1xuLy8ge2xheW91dD86IFByb3BlcnRpZXM8Li4uPiwgcGFpbnQ6IFByb3BlcnRpZXM8Li4uPn1cbmV4cG9ydCBkZWZhdWx0ICh7IHBhaW50IH06ICRFeGFjdDx7XG4gIHBhaW50OiBQcm9wZXJ0aWVzPFBhaW50UHJvcHM+XG59Pik7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge1JHQkFJbWFnZX0gZnJvbSAnLi9pbWFnZSc7XG5cbmltcG9ydCB0eXBlIHtTdHlsZVByb3BlcnR5RXhwcmVzc2lvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL2luZGV4JztcblxuLyoqXG4gKiBHaXZlbiBhbiBleHByZXNzaW9uIHRoYXQgc2hvdWxkIGV2YWx1YXRlIHRvIGEgY29sb3IgcmFtcCwgcmV0dXJuXG4gKiBhIDI1NngxIHB4IFJHQkEgaW1hZ2UgcmVwcmVzZW50aW5nIHRoYXQgcmFtcCBleHByZXNzaW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlbmRlckNvbG9yUmFtcChleHByZXNzaW9uOiBTdHlsZVByb3BlcnR5RXhwcmVzc2lvbiwgY29sb3JSYW1wRXZhbHVhdGlvblBhcmFtZXRlcjogc3RyaW5nKTogUkdCQUltYWdlIHtcbiAgICBjb25zdCBjb2xvclJhbXBEYXRhID0gbmV3IFVpbnQ4QXJyYXkoMjU2ICogNCk7XG4gICAgY29uc3QgZXZhbHVhdGlvbkdsb2JhbHMgPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMCwgaiA9IDA7IGkgPCAyNTY7IGkrKywgaiArPSA0KSB7XG4gICAgICAgIGV2YWx1YXRpb25HbG9iYWxzW2NvbG9yUmFtcEV2YWx1YXRpb25QYXJhbWV0ZXJdID0gaSAvIDI1NTtcbiAgICAgICAgY29uc3QgcHhDb2xvciA9IGV4cHJlc3Npb24uZXZhbHVhdGUoKGV2YWx1YXRpb25HbG9iYWxzOiBhbnkpKTtcbiAgICAgICAgLy8gdGhlIGNvbG9ycyBhcmUgYmVpbmcgdW5wcmVtdWx0aXBsaWVkIGJlY2F1c2UgQ29sb3IgdXNlc1xuICAgICAgICAvLyBwcmVtdWx0aXBsaWVkIHZhbHVlcywgYW5kIHRoZSBUZXh0dXJlIGNsYXNzIGV4cGVjdHMgdW5wcmVtdWx0aXBsaWVkIG9uZXNcbiAgICAgICAgY29sb3JSYW1wRGF0YVtqICsgMF0gPSBNYXRoLmZsb29yKHB4Q29sb3IuciAqIDI1NSAvIHB4Q29sb3IuYSk7XG4gICAgICAgIGNvbG9yUmFtcERhdGFbaiArIDFdID0gTWF0aC5mbG9vcihweENvbG9yLmcgKiAyNTUgLyBweENvbG9yLmEpO1xuICAgICAgICBjb2xvclJhbXBEYXRhW2ogKyAyXSA9IE1hdGguZmxvb3IocHhDb2xvci5iICogMjU1IC8gcHhDb2xvci5hKTtcbiAgICAgICAgY29sb3JSYW1wRGF0YVtqICsgM10gPSBNYXRoLmZsb29yKHB4Q29sb3IuYSAqIDI1NSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBSR0JBSW1hZ2Uoe3dpZHRoOiAyNTYsIGhlaWdodDogMX0sIGNvbG9yUmFtcERhdGEpO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGVfbGF5ZXInO1xuXG5pbXBvcnQgSGVhdG1hcEJ1Y2tldCBmcm9tICcuLi8uLi9kYXRhL2J1Y2tldC9oZWF0bWFwX2J1Y2tldCc7XG5pbXBvcnQge1JHQkFJbWFnZX0gZnJvbSAnLi4vLi4vdXRpbC9pbWFnZSc7XG5pbXBvcnQgcHJvcGVydGllcyBmcm9tICcuL2hlYXRtYXBfc3R5bGVfbGF5ZXJfcHJvcGVydGllcyc7XG5pbXBvcnQgcmVuZGVyQ29sb3JSYW1wIGZyb20gJy4uLy4uL3V0aWwvY29sb3JfcmFtcCc7XG5pbXBvcnQge1RyYW5zaXRpb25hYmxlLCBUcmFuc2l0aW9uaW5nLCBQb3NzaWJseUV2YWx1YXRlZH0gZnJvbSAnLi4vcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIFRleHR1cmUgZnJvbSAnLi4vLi4vcmVuZGVyL3RleHR1cmUnO1xuaW1wb3J0IHR5cGUgRnJhbWVidWZmZXIgZnJvbSAnLi4vLi4vZ2wvZnJhbWVidWZmZXInO1xuaW1wb3J0IHR5cGUge1BhaW50UHJvcHN9IGZyb20gJy4vaGVhdG1hcF9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzJztcbmltcG9ydCB0eXBlIHtMYXllclNwZWNpZmljYXRpb259IGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG5jbGFzcyBIZWF0bWFwU3R5bGVMYXllciBleHRlbmRzIFN0eWxlTGF5ZXIge1xuXG4gICAgaGVhdG1hcEZibzogP0ZyYW1lYnVmZmVyO1xuICAgIGNvbG9yUmFtcDogUkdCQUltYWdlO1xuICAgIGNvbG9yUmFtcFRleHR1cmU6ID9UZXh0dXJlO1xuXG4gICAgX3RyYW5zaXRpb25hYmxlUGFpbnQ6IFRyYW5zaXRpb25hYmxlPFBhaW50UHJvcHM+O1xuICAgIF90cmFuc2l0aW9uaW5nUGFpbnQ6IFRyYW5zaXRpb25pbmc8UGFpbnRQcm9wcz47XG4gICAgcGFpbnQ6IFBvc3NpYmx5RXZhbHVhdGVkPFBhaW50UHJvcHM+O1xuXG4gICAgY3JlYXRlQnVja2V0KG9wdGlvbnM6IGFueSkge1xuICAgICAgICByZXR1cm4gbmV3IEhlYXRtYXBCdWNrZXQob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IobGF5ZXI6IExheWVyU3BlY2lmaWNhdGlvbikge1xuICAgICAgICBzdXBlcihsYXllciwgcHJvcGVydGllcyk7XG5cbiAgICAgICAgLy8gbWFrZSBzdXJlIGNvbG9yIHJhbXAgdGV4dHVyZSBpcyBnZW5lcmF0ZWQgZm9yIGRlZmF1bHQgaGVhdG1hcCBjb2xvciB0b29cbiAgICAgICAgdGhpcy5fdXBkYXRlQ29sb3JSYW1wKCk7XG4gICAgfVxuXG4gICAgX2hhbmRsZVNwZWNpYWxQYWludFByb3BlcnR5VXBkYXRlKG5hbWU6IHN0cmluZykge1xuICAgICAgICBpZiAobmFtZSA9PT0gJ2hlYXRtYXAtY29sb3InKSB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVDb2xvclJhbXAoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF91cGRhdGVDb2xvclJhbXAoKSB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSB0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50Ll92YWx1ZXNbJ2hlYXRtYXAtY29sb3InXS52YWx1ZS5leHByZXNzaW9uO1xuICAgICAgICB0aGlzLmNvbG9yUmFtcCA9IHJlbmRlckNvbG9yUmFtcChleHByZXNzaW9uLCAnaGVhdG1hcERlbnNpdHknKTtcbiAgICAgICAgdGhpcy5jb2xvclJhbXBUZXh0dXJlID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXNpemUoKSB7XG4gICAgICAgIGlmICh0aGlzLmhlYXRtYXBGYm8pIHtcbiAgICAgICAgICAgIHRoaXMuaGVhdG1hcEZiby5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLmhlYXRtYXBGYm8gPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcXVlcnlSYWRpdXMoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcXVlcnlJbnRlcnNlY3RzRmVhdHVyZSgpOiBib29sZWFuICB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBoYXNPZmZzY3JlZW5QYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYWludC5nZXQoJ2hlYXRtYXAtb3BhY2l0eScpICE9PSAwICYmIHRoaXMudmlzaWJpbGl0eSAhPT0gJ25vbmUnO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSGVhdG1hcFN0eWxlTGF5ZXI7XG4iLCIvLyBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkLiBFZGl0IGJ1aWxkL2dlbmVyYXRlLXN0eWxlLWNvZGUuanMsIHRoZW4gcnVuIGB5YXJuIHJ1biBjb2RlZ2VuYC5cbi8vIEBmbG93XG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG5pbXBvcnQgc3R5bGVTcGVjIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvcmVmZXJlbmNlL2xhdGVzdCc7XG5cbmltcG9ydCB7XG4gICAgUHJvcGVydGllcyxcbiAgICBEYXRhQ29uc3RhbnRQcm9wZXJ0eSxcbiAgICBEYXRhRHJpdmVuUHJvcGVydHksXG4gICAgQ3Jvc3NGYWRlZERhdGFEcml2ZW5Qcm9wZXJ0eSxcbiAgICBDcm9zc0ZhZGVkUHJvcGVydHksXG4gICAgQ29sb3JSYW1wUHJvcGVydHlcbn0gZnJvbSAnLi4vcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIENvbG9yIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5cbmltcG9ydCB0eXBlIEZvcm1hdHRlZCBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvZm9ybWF0dGVkJztcblxuaW1wb3J0IHR5cGUgUmVzb2x2ZWRJbWFnZSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvcmVzb2x2ZWRfaW1hZ2UnO1xuXG5cbmV4cG9ydCB0eXBlIFBhaW50UHJvcHMgPSB7fFxuICAgIFwiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1kaXJlY3Rpb25cIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbiAgICBcImhpbGxzaGFkZS1pbGx1bWluYXRpb24tYW5jaG9yXCI6IERhdGFDb25zdGFudFByb3BlcnR5PFwibWFwXCIgfCBcInZpZXdwb3J0XCI+LFxuICAgIFwiaGlsbHNoYWRlLWV4YWdnZXJhdGlvblwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiaGlsbHNoYWRlLXNoYWRvdy1jb2xvclwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxDb2xvcj4sXG4gICAgXCJoaWxsc2hhZGUtaGlnaGxpZ2h0LWNvbG9yXCI6IERhdGFDb25zdGFudFByb3BlcnR5PENvbG9yPixcbiAgICBcImhpbGxzaGFkZS1hY2NlbnQtY29sb3JcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8Q29sb3I+LFxufH07XG5cbmNvbnN0IHBhaW50OiBQcm9wZXJ0aWVzPFBhaW50UHJvcHM+ID0gbmV3IFByb3BlcnRpZXMoe1xuICAgIFwiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1kaXJlY3Rpb25cIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2hpbGxzaGFkZVwiXVtcImhpbGxzaGFkZS1pbGx1bWluYXRpb24tZGlyZWN0aW9uXCJdKSxcbiAgICBcImhpbGxzaGFkZS1pbGx1bWluYXRpb24tYW5jaG9yXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9oaWxsc2hhZGVcIl1bXCJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWFuY2hvclwiXSksXG4gICAgXCJoaWxsc2hhZGUtZXhhZ2dlcmF0aW9uXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9oaWxsc2hhZGVcIl1bXCJoaWxsc2hhZGUtZXhhZ2dlcmF0aW9uXCJdKSxcbiAgICBcImhpbGxzaGFkZS1zaGFkb3ctY29sb3JcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2hpbGxzaGFkZVwiXVtcImhpbGxzaGFkZS1zaGFkb3ctY29sb3JcIl0pLFxuICAgIFwiaGlsbHNoYWRlLWhpZ2hsaWdodC1jb2xvclwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfaGlsbHNoYWRlXCJdW1wiaGlsbHNoYWRlLWhpZ2hsaWdodC1jb2xvclwiXSksXG4gICAgXCJoaWxsc2hhZGUtYWNjZW50LWNvbG9yXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9oaWxsc2hhZGVcIl1bXCJoaWxsc2hhZGUtYWNjZW50LWNvbG9yXCJdKSxcbn0pO1xuXG4vLyBOb3RlOiB3aXRob3V0IGFkZGluZyB0aGUgZXhwbGljaXQgdHlwZSBhbm5vdGF0aW9uLCBGbG93IGluZmVycyB3ZWFrZXIgdHlwZXNcbi8vIGZvciB0aGVzZSBvYmplY3RzIGZyb20gdGhlaXIgdXNlIGluIHRoZSBjb25zdHJ1Y3RvciB0byBTdHlsZUxheWVyLCBhc1xuLy8ge2xheW91dD86IFByb3BlcnRpZXM8Li4uPiwgcGFpbnQ6IFByb3BlcnRpZXM8Li4uPn1cbmV4cG9ydCBkZWZhdWx0ICh7IHBhaW50IH06ICRFeGFjdDx7XG4gIHBhaW50OiBQcm9wZXJ0aWVzPFBhaW50UHJvcHM+XG59Pik7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZV9sYXllcic7XG5cbmltcG9ydCBwcm9wZXJ0aWVzIGZyb20gJy4vaGlsbHNoYWRlX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuaW1wb3J0IHtUcmFuc2l0aW9uYWJsZSwgVHJhbnNpdGlvbmluZywgUG9zc2libHlFdmFsdWF0ZWR9IGZyb20gJy4uL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgdHlwZSB7UGFpbnRQcm9wc30gZnJvbSAnLi9oaWxsc2hhZGVfc3R5bGVfbGF5ZXJfcHJvcGVydGllcyc7XG5pbXBvcnQgdHlwZSB7TGF5ZXJTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuY2xhc3MgSGlsbHNoYWRlU3R5bGVMYXllciBleHRlbmRzIFN0eWxlTGF5ZXIge1xuICAgIF90cmFuc2l0aW9uYWJsZVBhaW50OiBUcmFuc2l0aW9uYWJsZTxQYWludFByb3BzPjtcbiAgICBfdHJhbnNpdGlvbmluZ1BhaW50OiBUcmFuc2l0aW9uaW5nPFBhaW50UHJvcHM+O1xuICAgIHBhaW50OiBQb3NzaWJseUV2YWx1YXRlZDxQYWludFByb3BzPjtcblxuICAgIGNvbnN0cnVjdG9yKGxheWVyOiBMYXllclNwZWNpZmljYXRpb24pIHtcbiAgICAgICAgc3VwZXIobGF5ZXIsIHByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIGhhc09mZnNjcmVlblBhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhaW50LmdldCgnaGlsbHNoYWRlLWV4YWdnZXJhdGlvbicpICE9PSAwICYmIHRoaXMudmlzaWJpbGl0eSAhPT0gJ25vbmUnO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSGlsbHNoYWRlU3R5bGVMYXllcjtcbiIsIi8vIEBmbG93XG5pbXBvcnQge2NyZWF0ZUxheW91dH0gZnJvbSAnLi4vLi4vdXRpbC9zdHJ1Y3RfYXJyYXknO1xuXG5jb25zdCBsYXlvdXQgPSBjcmVhdGVMYXlvdXQoW1xuICAgIHtuYW1lOiAnYV9wb3MnLCBjb21wb25lbnRzOiAyLCB0eXBlOiAnSW50MTYnfVxuXSwgNCk7XG5cbmV4cG9ydCBkZWZhdWx0IGxheW91dDtcbmV4cG9ydCBjb25zdCB7bWVtYmVycywgc2l6ZSwgYWxpZ25tZW50fSA9IGxheW91dDtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBlYXJjdXQ7XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gZWFyY3V0O1xuXG5mdW5jdGlvbiBlYXJjdXQoZGF0YSwgaG9sZUluZGljZXMsIGRpbSkge1xuXG4gICAgZGltID0gZGltIHx8IDI7XG5cbiAgICB2YXIgaGFzSG9sZXMgPSBob2xlSW5kaWNlcyAmJiBob2xlSW5kaWNlcy5sZW5ndGgsXG4gICAgICAgIG91dGVyTGVuID0gaGFzSG9sZXMgPyBob2xlSW5kaWNlc1swXSAqIGRpbSA6IGRhdGEubGVuZ3RoLFxuICAgICAgICBvdXRlck5vZGUgPSBsaW5rZWRMaXN0KGRhdGEsIDAsIG91dGVyTGVuLCBkaW0sIHRydWUpLFxuICAgICAgICB0cmlhbmdsZXMgPSBbXTtcblxuICAgIGlmICghb3V0ZXJOb2RlIHx8IG91dGVyTm9kZS5uZXh0ID09PSBvdXRlck5vZGUucHJldikgcmV0dXJuIHRyaWFuZ2xlcztcblxuICAgIHZhciBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZLCB4LCB5LCBpbnZTaXplO1xuXG4gICAgaWYgKGhhc0hvbGVzKSBvdXRlck5vZGUgPSBlbGltaW5hdGVIb2xlcyhkYXRhLCBob2xlSW5kaWNlcywgb3V0ZXJOb2RlLCBkaW0pO1xuXG4gICAgLy8gaWYgdGhlIHNoYXBlIGlzIG5vdCB0b28gc2ltcGxlLCB3ZSdsbCB1c2Ugei1vcmRlciBjdXJ2ZSBoYXNoIGxhdGVyOyBjYWxjdWxhdGUgcG9seWdvbiBiYm94XG4gICAgaWYgKGRhdGEubGVuZ3RoID4gODAgKiBkaW0pIHtcbiAgICAgICAgbWluWCA9IG1heFggPSBkYXRhWzBdO1xuICAgICAgICBtaW5ZID0gbWF4WSA9IGRhdGFbMV07XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGRpbTsgaSA8IG91dGVyTGVuOyBpICs9IGRpbSkge1xuICAgICAgICAgICAgeCA9IGRhdGFbaV07XG4gICAgICAgICAgICB5ID0gZGF0YVtpICsgMV07XG4gICAgICAgICAgICBpZiAoeCA8IG1pblgpIG1pblggPSB4O1xuICAgICAgICAgICAgaWYgKHkgPCBtaW5ZKSBtaW5ZID0geTtcbiAgICAgICAgICAgIGlmICh4ID4gbWF4WCkgbWF4WCA9IHg7XG4gICAgICAgICAgICBpZiAoeSA+IG1heFkpIG1heFkgPSB5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWluWCwgbWluWSBhbmQgaW52U2l6ZSBhcmUgbGF0ZXIgdXNlZCB0byB0cmFuc2Zvcm0gY29vcmRzIGludG8gaW50ZWdlcnMgZm9yIHotb3JkZXIgY2FsY3VsYXRpb25cbiAgICAgICAgaW52U2l6ZSA9IE1hdGgubWF4KG1heFggLSBtaW5YLCBtYXhZIC0gbWluWSk7XG4gICAgICAgIGludlNpemUgPSBpbnZTaXplICE9PSAwID8gMSAvIGludlNpemUgOiAwO1xuICAgIH1cblxuICAgIGVhcmN1dExpbmtlZChvdXRlck5vZGUsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplKTtcblxuICAgIHJldHVybiB0cmlhbmdsZXM7XG59XG5cbi8vIGNyZWF0ZSBhIGNpcmN1bGFyIGRvdWJseSBsaW5rZWQgbGlzdCBmcm9tIHBvbHlnb24gcG9pbnRzIGluIHRoZSBzcGVjaWZpZWQgd2luZGluZyBvcmRlclxuZnVuY3Rpb24gbGlua2VkTGlzdChkYXRhLCBzdGFydCwgZW5kLCBkaW0sIGNsb2Nrd2lzZSkge1xuICAgIHZhciBpLCBsYXN0O1xuXG4gICAgaWYgKGNsb2Nrd2lzZSA9PT0gKHNpZ25lZEFyZWEoZGF0YSwgc3RhcnQsIGVuZCwgZGltKSA+IDApKSB7XG4gICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IGRpbSkgbGFzdCA9IGluc2VydE5vZGUoaSwgZGF0YVtpXSwgZGF0YVtpICsgMV0sIGxhc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaSA9IGVuZCAtIGRpbTsgaSA+PSBzdGFydDsgaSAtPSBkaW0pIGxhc3QgPSBpbnNlcnROb2RlKGksIGRhdGFbaV0sIGRhdGFbaSArIDFdLCBsYXN0KTtcbiAgICB9XG5cbiAgICBpZiAobGFzdCAmJiBlcXVhbHMobGFzdCwgbGFzdC5uZXh0KSkge1xuICAgICAgICByZW1vdmVOb2RlKGxhc3QpO1xuICAgICAgICBsYXN0ID0gbGFzdC5uZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBsYXN0O1xufVxuXG4vLyBlbGltaW5hdGUgY29saW5lYXIgb3IgZHVwbGljYXRlIHBvaW50c1xuZnVuY3Rpb24gZmlsdGVyUG9pbnRzKHN0YXJ0LCBlbmQpIHtcbiAgICBpZiAoIXN0YXJ0KSByZXR1cm4gc3RhcnQ7XG4gICAgaWYgKCFlbmQpIGVuZCA9IHN0YXJ0O1xuXG4gICAgdmFyIHAgPSBzdGFydCxcbiAgICAgICAgYWdhaW47XG4gICAgZG8ge1xuICAgICAgICBhZ2FpbiA9IGZhbHNlO1xuXG4gICAgICAgIGlmICghcC5zdGVpbmVyICYmIChlcXVhbHMocCwgcC5uZXh0KSB8fCBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA9PT0gMCkpIHtcbiAgICAgICAgICAgIHJlbW92ZU5vZGUocCk7XG4gICAgICAgICAgICBwID0gZW5kID0gcC5wcmV2O1xuICAgICAgICAgICAgaWYgKHAgPT09IHAubmV4dCkgYnJlYWs7XG4gICAgICAgICAgICBhZ2FpbiA9IHRydWU7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHAgPSBwLm5leHQ7XG4gICAgICAgIH1cbiAgICB9IHdoaWxlIChhZ2FpbiB8fCBwICE9PSBlbmQpO1xuXG4gICAgcmV0dXJuIGVuZDtcbn1cblxuLy8gbWFpbiBlYXIgc2xpY2luZyBsb29wIHdoaWNoIHRyaWFuZ3VsYXRlcyBhIHBvbHlnb24gKGdpdmVuIGFzIGEgbGlua2VkIGxpc3QpXG5mdW5jdGlvbiBlYXJjdXRMaW5rZWQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgaW52U2l6ZSwgcGFzcykge1xuICAgIGlmICghZWFyKSByZXR1cm47XG5cbiAgICAvLyBpbnRlcmxpbmsgcG9seWdvbiBub2RlcyBpbiB6LW9yZGVyXG4gICAgaWYgKCFwYXNzICYmIGludlNpemUpIGluZGV4Q3VydmUoZWFyLCBtaW5YLCBtaW5ZLCBpbnZTaXplKTtcblxuICAgIHZhciBzdG9wID0gZWFyLFxuICAgICAgICBwcmV2LCBuZXh0O1xuXG4gICAgLy8gaXRlcmF0ZSB0aHJvdWdoIGVhcnMsIHNsaWNpbmcgdGhlbSBvbmUgYnkgb25lXG4gICAgd2hpbGUgKGVhci5wcmV2ICE9PSBlYXIubmV4dCkge1xuICAgICAgICBwcmV2ID0gZWFyLnByZXY7XG4gICAgICAgIG5leHQgPSBlYXIubmV4dDtcblxuICAgICAgICBpZiAoaW52U2l6ZSA/IGlzRWFySGFzaGVkKGVhciwgbWluWCwgbWluWSwgaW52U2l6ZSkgOiBpc0VhcihlYXIpKSB7XG4gICAgICAgICAgICAvLyBjdXQgb2ZmIHRoZSB0cmlhbmdsZVxuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2gocHJldi5pIC8gZGltKTtcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKGVhci5pIC8gZGltKTtcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKG5leHQuaSAvIGRpbSk7XG5cbiAgICAgICAgICAgIHJlbW92ZU5vZGUoZWFyKTtcblxuICAgICAgICAgICAgLy8gc2tpcHBpbmcgdGhlIG5leHQgdmVydGV4IGxlYWRzIHRvIGxlc3Mgc2xpdmVyIHRyaWFuZ2xlc1xuICAgICAgICAgICAgZWFyID0gbmV4dC5uZXh0O1xuICAgICAgICAgICAgc3RvcCA9IG5leHQubmV4dDtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBlYXIgPSBuZXh0O1xuXG4gICAgICAgIC8vIGlmIHdlIGxvb3BlZCB0aHJvdWdoIHRoZSB3aG9sZSByZW1haW5pbmcgcG9seWdvbiBhbmQgY2FuJ3QgZmluZCBhbnkgbW9yZSBlYXJzXG4gICAgICAgIGlmIChlYXIgPT09IHN0b3ApIHtcbiAgICAgICAgICAgIC8vIHRyeSBmaWx0ZXJpbmcgcG9pbnRzIGFuZCBzbGljaW5nIGFnYWluXG4gICAgICAgICAgICBpZiAoIXBhc3MpIHtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZmlsdGVyUG9pbnRzKGVhciksIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplLCAxKTtcblxuICAgICAgICAgICAgLy8gaWYgdGhpcyBkaWRuJ3Qgd29yaywgdHJ5IGN1cmluZyBhbGwgc21hbGwgc2VsZi1pbnRlcnNlY3Rpb25zIGxvY2FsbHlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFzcyA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGVhciA9IGN1cmVMb2NhbEludGVyc2VjdGlvbnMoZmlsdGVyUG9pbnRzKGVhciksIHRyaWFuZ2xlcywgZGltKTtcbiAgICAgICAgICAgICAgICBlYXJjdXRMaW5rZWQoZWFyLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgaW52U2l6ZSwgMik7XG5cbiAgICAgICAgICAgIC8vIGFzIGEgbGFzdCByZXNvcnQsIHRyeSBzcGxpdHRpbmcgdGhlIHJlbWFpbmluZyBwb2x5Z29uIGludG8gdHdvXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhc3MgPT09IDIpIHtcbiAgICAgICAgICAgICAgICBzcGxpdEVhcmN1dChlYXIsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIGNoZWNrIHdoZXRoZXIgYSBwb2x5Z29uIG5vZGUgZm9ybXMgYSB2YWxpZCBlYXIgd2l0aCBhZGphY2VudCBub2Rlc1xuZnVuY3Rpb24gaXNFYXIoZWFyKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gbm93IG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIG90aGVyIHBvaW50cyBpbnNpZGUgdGhlIHBvdGVudGlhbCBlYXJcbiAgICB2YXIgcCA9IGVhci5uZXh0Lm5leHQ7XG5cbiAgICB3aGlsZSAocCAhPT0gZWFyLnByZXYpIHtcbiAgICAgICAgaWYgKHBvaW50SW5UcmlhbmdsZShhLngsIGEueSwgYi54LCBiLnksIGMueCwgYy55LCBwLngsIHAueSkgJiZcbiAgICAgICAgICAgIGFyZWEocC5wcmV2LCBwLCBwLm5leHQpID49IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNFYXJIYXNoZWQoZWFyLCBtaW5YLCBtaW5ZLCBpbnZTaXplKSB7XG4gICAgdmFyIGEgPSBlYXIucHJldixcbiAgICAgICAgYiA9IGVhcixcbiAgICAgICAgYyA9IGVhci5uZXh0O1xuXG4gICAgaWYgKGFyZWEoYSwgYiwgYykgPj0gMCkgcmV0dXJuIGZhbHNlOyAvLyByZWZsZXgsIGNhbid0IGJlIGFuIGVhclxuXG4gICAgLy8gdHJpYW5nbGUgYmJveDsgbWluICYgbWF4IGFyZSBjYWxjdWxhdGVkIGxpa2UgdGhpcyBmb3Igc3BlZWRcbiAgICB2YXIgbWluVFggPSBhLnggPCBiLnggPyAoYS54IDwgYy54ID8gYS54IDogYy54KSA6IChiLnggPCBjLnggPyBiLnggOiBjLngpLFxuICAgICAgICBtaW5UWSA9IGEueSA8IGIueSA/IChhLnkgPCBjLnkgPyBhLnkgOiBjLnkpIDogKGIueSA8IGMueSA/IGIueSA6IGMueSksXG4gICAgICAgIG1heFRYID0gYS54ID4gYi54ID8gKGEueCA+IGMueCA/IGEueCA6IGMueCkgOiAoYi54ID4gYy54ID8gYi54IDogYy54KSxcbiAgICAgICAgbWF4VFkgPSBhLnkgPiBiLnkgPyAoYS55ID4gYy55ID8gYS55IDogYy55KSA6IChiLnkgPiBjLnkgPyBiLnkgOiBjLnkpO1xuXG4gICAgLy8gei1vcmRlciByYW5nZSBmb3IgdGhlIGN1cnJlbnQgdHJpYW5nbGUgYmJveDtcbiAgICB2YXIgbWluWiA9IHpPcmRlcihtaW5UWCwgbWluVFksIG1pblgsIG1pblksIGludlNpemUpLFxuICAgICAgICBtYXhaID0gek9yZGVyKG1heFRYLCBtYXhUWSwgbWluWCwgbWluWSwgaW52U2l6ZSk7XG5cbiAgICB2YXIgcCA9IGVhci5wcmV2WixcbiAgICAgICAgbiA9IGVhci5uZXh0WjtcblxuICAgIC8vIGxvb2sgZm9yIHBvaW50cyBpbnNpZGUgdGhlIHRyaWFuZ2xlIGluIGJvdGggZGlyZWN0aW9uc1xuICAgIHdoaWxlIChwICYmIHAueiA+PSBtaW5aICYmIG4gJiYgbi56IDw9IG1heFopIHtcbiAgICAgICAgaWYgKHAgIT09IGVhci5wcmV2ICYmIHAgIT09IGVhci5uZXh0ICYmXG4gICAgICAgICAgICBwb2ludEluVHJpYW5nbGUoYS54LCBhLnksIGIueCwgYi55LCBjLngsIGMueSwgcC54LCBwLnkpICYmXG4gICAgICAgICAgICBhcmVhKHAucHJldiwgcCwgcC5uZXh0KSA+PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHAgPSBwLnByZXZaO1xuXG4gICAgICAgIGlmIChuICE9PSBlYXIucHJldiAmJiBuICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIG4ueCwgbi55KSAmJlxuICAgICAgICAgICAgYXJlYShuLnByZXYsIG4sIG4ubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBuID0gbi5uZXh0WjtcbiAgICB9XG5cbiAgICAvLyBsb29rIGZvciByZW1haW5pbmcgcG9pbnRzIGluIGRlY3JlYXNpbmcgei1vcmRlclxuICAgIHdoaWxlIChwICYmIHAueiA+PSBtaW5aKSB7XG4gICAgICAgIGlmIChwICE9PSBlYXIucHJldiAmJiBwICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIHAueCwgcC55KSAmJlxuICAgICAgICAgICAgYXJlYShwLnByZXYsIHAsIHAubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBwID0gcC5wcmV2WjtcbiAgICB9XG5cbiAgICAvLyBsb29rIGZvciByZW1haW5pbmcgcG9pbnRzIGluIGluY3JlYXNpbmcgei1vcmRlclxuICAgIHdoaWxlIChuICYmIG4ueiA8PSBtYXhaKSB7XG4gICAgICAgIGlmIChuICE9PSBlYXIucHJldiAmJiBuICE9PSBlYXIubmV4dCAmJlxuICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGEueCwgYS55LCBiLngsIGIueSwgYy54LCBjLnksIG4ueCwgbi55KSAmJlxuICAgICAgICAgICAgYXJlYShuLnByZXYsIG4sIG4ubmV4dCkgPj0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBuID0gbi5uZXh0WjtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gZ28gdGhyb3VnaCBhbGwgcG9seWdvbiBub2RlcyBhbmQgY3VyZSBzbWFsbCBsb2NhbCBzZWxmLWludGVyc2VjdGlvbnNcbmZ1bmN0aW9uIGN1cmVMb2NhbEludGVyc2VjdGlvbnMoc3RhcnQsIHRyaWFuZ2xlcywgZGltKSB7XG4gICAgdmFyIHAgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIHZhciBhID0gcC5wcmV2LFxuICAgICAgICAgICAgYiA9IHAubmV4dC5uZXh0O1xuXG4gICAgICAgIGlmICghZXF1YWxzKGEsIGIpICYmIGludGVyc2VjdHMoYSwgcCwgcC5uZXh0LCBiKSAmJiBsb2NhbGx5SW5zaWRlKGEsIGIpICYmIGxvY2FsbHlJbnNpZGUoYiwgYSkpIHtcblxuICAgICAgICAgICAgdHJpYW5nbGVzLnB1c2goYS5pIC8gZGltKTtcbiAgICAgICAgICAgIHRyaWFuZ2xlcy5wdXNoKHAuaSAvIGRpbSk7XG4gICAgICAgICAgICB0cmlhbmdsZXMucHVzaChiLmkgLyBkaW0pO1xuXG4gICAgICAgICAgICAvLyByZW1vdmUgdHdvIG5vZGVzIGludm9sdmVkXG4gICAgICAgICAgICByZW1vdmVOb2RlKHApO1xuICAgICAgICAgICAgcmVtb3ZlTm9kZShwLm5leHQpO1xuXG4gICAgICAgICAgICBwID0gc3RhcnQgPSBiO1xuICAgICAgICB9XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGZpbHRlclBvaW50cyhwKTtcbn1cblxuLy8gdHJ5IHNwbGl0dGluZyBwb2x5Z29uIGludG8gdHdvIGFuZCB0cmlhbmd1bGF0ZSB0aGVtIGluZGVwZW5kZW50bHlcbmZ1bmN0aW9uIHNwbGl0RWFyY3V0KHN0YXJ0LCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgaW52U2l6ZSkge1xuICAgIC8vIGxvb2sgZm9yIGEgdmFsaWQgZGlhZ29uYWwgdGhhdCBkaXZpZGVzIHRoZSBwb2x5Z29uIGludG8gdHdvXG4gICAgdmFyIGEgPSBzdGFydDtcbiAgICBkbyB7XG4gICAgICAgIHZhciBiID0gYS5uZXh0Lm5leHQ7XG4gICAgICAgIHdoaWxlIChiICE9PSBhLnByZXYpIHtcbiAgICAgICAgICAgIGlmIChhLmkgIT09IGIuaSAmJiBpc1ZhbGlkRGlhZ29uYWwoYSwgYikpIHtcbiAgICAgICAgICAgICAgICAvLyBzcGxpdCB0aGUgcG9seWdvbiBpbiB0d28gYnkgdGhlIGRpYWdvbmFsXG4gICAgICAgICAgICAgICAgdmFyIGMgPSBzcGxpdFBvbHlnb24oYSwgYik7XG5cbiAgICAgICAgICAgICAgICAvLyBmaWx0ZXIgY29saW5lYXIgcG9pbnRzIGFyb3VuZCB0aGUgY3V0c1xuICAgICAgICAgICAgICAgIGEgPSBmaWx0ZXJQb2ludHMoYSwgYS5uZXh0KTtcbiAgICAgICAgICAgICAgICBjID0gZmlsdGVyUG9pbnRzKGMsIGMubmV4dCk7XG5cbiAgICAgICAgICAgICAgICAvLyBydW4gZWFyY3V0IG9uIGVhY2ggaGFsZlxuICAgICAgICAgICAgICAgIGVhcmN1dExpbmtlZChhLCB0cmlhbmdsZXMsIGRpbSwgbWluWCwgbWluWSwgaW52U2l6ZSk7XG4gICAgICAgICAgICAgICAgZWFyY3V0TGlua2VkKGMsIHRyaWFuZ2xlcywgZGltLCBtaW5YLCBtaW5ZLCBpbnZTaXplKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBiID0gYi5uZXh0O1xuICAgICAgICB9XG4gICAgICAgIGEgPSBhLm5leHQ7XG4gICAgfSB3aGlsZSAoYSAhPT0gc3RhcnQpO1xufVxuXG4vLyBsaW5rIGV2ZXJ5IGhvbGUgaW50byB0aGUgb3V0ZXIgbG9vcCwgcHJvZHVjaW5nIGEgc2luZ2xlLXJpbmcgcG9seWdvbiB3aXRob3V0IGhvbGVzXG5mdW5jdGlvbiBlbGltaW5hdGVIb2xlcyhkYXRhLCBob2xlSW5kaWNlcywgb3V0ZXJOb2RlLCBkaW0pIHtcbiAgICB2YXIgcXVldWUgPSBbXSxcbiAgICAgICAgaSwgbGVuLCBzdGFydCwgZW5kLCBsaXN0O1xuXG4gICAgZm9yIChpID0gMCwgbGVuID0gaG9sZUluZGljZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgc3RhcnQgPSBob2xlSW5kaWNlc1tpXSAqIGRpbTtcbiAgICAgICAgZW5kID0gaSA8IGxlbiAtIDEgPyBob2xlSW5kaWNlc1tpICsgMV0gKiBkaW0gOiBkYXRhLmxlbmd0aDtcbiAgICAgICAgbGlzdCA9IGxpbmtlZExpc3QoZGF0YSwgc3RhcnQsIGVuZCwgZGltLCBmYWxzZSk7XG4gICAgICAgIGlmIChsaXN0ID09PSBsaXN0Lm5leHQpIGxpc3Quc3RlaW5lciA9IHRydWU7XG4gICAgICAgIHF1ZXVlLnB1c2goZ2V0TGVmdG1vc3QobGlzdCkpO1xuICAgIH1cblxuICAgIHF1ZXVlLnNvcnQoY29tcGFyZVgpO1xuXG4gICAgLy8gcHJvY2VzcyBob2xlcyBmcm9tIGxlZnQgdG8gcmlnaHRcbiAgICBmb3IgKGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZWxpbWluYXRlSG9sZShxdWV1ZVtpXSwgb3V0ZXJOb2RlKTtcbiAgICAgICAgb3V0ZXJOb2RlID0gZmlsdGVyUG9pbnRzKG91dGVyTm9kZSwgb3V0ZXJOb2RlLm5leHQpO1xuICAgIH1cblxuICAgIHJldHVybiBvdXRlck5vZGU7XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVYKGEsIGIpIHtcbiAgICByZXR1cm4gYS54IC0gYi54O1xufVxuXG4vLyBmaW5kIGEgYnJpZGdlIGJldHdlZW4gdmVydGljZXMgdGhhdCBjb25uZWN0cyBob2xlIHdpdGggYW4gb3V0ZXIgcmluZyBhbmQgYW5kIGxpbmsgaXRcbmZ1bmN0aW9uIGVsaW1pbmF0ZUhvbGUoaG9sZSwgb3V0ZXJOb2RlKSB7XG4gICAgb3V0ZXJOb2RlID0gZmluZEhvbGVCcmlkZ2UoaG9sZSwgb3V0ZXJOb2RlKTtcbiAgICBpZiAob3V0ZXJOb2RlKSB7XG4gICAgICAgIHZhciBiID0gc3BsaXRQb2x5Z29uKG91dGVyTm9kZSwgaG9sZSk7XG5cbiAgICAgICAgLy8gZmlsdGVyIGNvbGxpbmVhciBwb2ludHMgYXJvdW5kIHRoZSBjdXRzXG4gICAgICAgIGZpbHRlclBvaW50cyhvdXRlck5vZGUsIG91dGVyTm9kZS5uZXh0KTtcbiAgICAgICAgZmlsdGVyUG9pbnRzKGIsIGIubmV4dCk7XG4gICAgfVxufVxuXG4vLyBEYXZpZCBFYmVybHkncyBhbGdvcml0aG0gZm9yIGZpbmRpbmcgYSBicmlkZ2UgYmV0d2VlbiBob2xlIGFuZCBvdXRlciBwb2x5Z29uXG5mdW5jdGlvbiBmaW5kSG9sZUJyaWRnZShob2xlLCBvdXRlck5vZGUpIHtcbiAgICB2YXIgcCA9IG91dGVyTm9kZSxcbiAgICAgICAgaHggPSBob2xlLngsXG4gICAgICAgIGh5ID0gaG9sZS55LFxuICAgICAgICBxeCA9IC1JbmZpbml0eSxcbiAgICAgICAgbTtcblxuICAgIC8vIGZpbmQgYSBzZWdtZW50IGludGVyc2VjdGVkIGJ5IGEgcmF5IGZyb20gdGhlIGhvbGUncyBsZWZ0bW9zdCBwb2ludCB0byB0aGUgbGVmdDtcbiAgICAvLyBzZWdtZW50J3MgZW5kcG9pbnQgd2l0aCBsZXNzZXIgeCB3aWxsIGJlIHBvdGVudGlhbCBjb25uZWN0aW9uIHBvaW50XG4gICAgZG8ge1xuICAgICAgICBpZiAoaHkgPD0gcC55ICYmIGh5ID49IHAubmV4dC55ICYmIHAubmV4dC55ICE9PSBwLnkpIHtcbiAgICAgICAgICAgIHZhciB4ID0gcC54ICsgKGh5IC0gcC55KSAqIChwLm5leHQueCAtIHAueCkgLyAocC5uZXh0LnkgLSBwLnkpO1xuICAgICAgICAgICAgaWYgKHggPD0gaHggJiYgeCA+IHF4KSB7XG4gICAgICAgICAgICAgICAgcXggPSB4O1xuICAgICAgICAgICAgICAgIGlmICh4ID09PSBoeCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaHkgPT09IHAueSkgcmV0dXJuIHA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoeSA9PT0gcC5uZXh0LnkpIHJldHVybiBwLm5leHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG0gPSBwLnggPCBwLm5leHQueCA/IHAgOiBwLm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBvdXRlck5vZGUpO1xuXG4gICAgaWYgKCFtKSByZXR1cm4gbnVsbDtcblxuICAgIGlmIChoeCA9PT0gcXgpIHJldHVybiBtOyAvLyBob2xlIHRvdWNoZXMgb3V0ZXIgc2VnbWVudDsgcGljayBsZWZ0bW9zdCBlbmRwb2ludFxuXG4gICAgLy8gbG9vayBmb3IgcG9pbnRzIGluc2lkZSB0aGUgdHJpYW5nbGUgb2YgaG9sZSBwb2ludCwgc2VnbWVudCBpbnRlcnNlY3Rpb24gYW5kIGVuZHBvaW50O1xuICAgIC8vIGlmIHRoZXJlIGFyZSBubyBwb2ludHMgZm91bmQsIHdlIGhhdmUgYSB2YWxpZCBjb25uZWN0aW9uO1xuICAgIC8vIG90aGVyd2lzZSBjaG9vc2UgdGhlIHBvaW50IG9mIHRoZSBtaW5pbXVtIGFuZ2xlIHdpdGggdGhlIHJheSBhcyBjb25uZWN0aW9uIHBvaW50XG5cbiAgICB2YXIgc3RvcCA9IG0sXG4gICAgICAgIG14ID0gbS54LFxuICAgICAgICBteSA9IG0ueSxcbiAgICAgICAgdGFuTWluID0gSW5maW5pdHksXG4gICAgICAgIHRhbjtcblxuICAgIHAgPSBtO1xuXG4gICAgZG8ge1xuICAgICAgICBpZiAoaHggPj0gcC54ICYmIHAueCA+PSBteCAmJiBoeCAhPT0gcC54ICYmXG4gICAgICAgICAgICAgICAgcG9pbnRJblRyaWFuZ2xlKGh5IDwgbXkgPyBoeCA6IHF4LCBoeSwgbXgsIG15LCBoeSA8IG15ID8gcXggOiBoeCwgaHksIHAueCwgcC55KSkge1xuXG4gICAgICAgICAgICB0YW4gPSBNYXRoLmFicyhoeSAtIHAueSkgLyAoaHggLSBwLngpOyAvLyB0YW5nZW50aWFsXG5cbiAgICAgICAgICAgIGlmIChsb2NhbGx5SW5zaWRlKHAsIGhvbGUpICYmXG4gICAgICAgICAgICAgICAgKHRhbiA8IHRhbk1pbiB8fCAodGFuID09PSB0YW5NaW4gJiYgKHAueCA+IG0ueCB8fCAocC54ID09PSBtLnggJiYgc2VjdG9yQ29udGFpbnNTZWN0b3IobSwgcCkpKSkpKSB7XG4gICAgICAgICAgICAgICAgbSA9IHA7XG4gICAgICAgICAgICAgICAgdGFuTWluID0gdGFuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBzdG9wKTtcblxuICAgIHJldHVybiBtO1xufVxuXG4vLyB3aGV0aGVyIHNlY3RvciBpbiB2ZXJ0ZXggbSBjb250YWlucyBzZWN0b3IgaW4gdmVydGV4IHAgaW4gdGhlIHNhbWUgY29vcmRpbmF0ZXNcbmZ1bmN0aW9uIHNlY3RvckNvbnRhaW5zU2VjdG9yKG0sIHApIHtcbiAgICByZXR1cm4gYXJlYShtLnByZXYsIG0sIHAucHJldikgPCAwICYmIGFyZWEocC5uZXh0LCBtLCBtLm5leHQpIDwgMDtcbn1cblxuLy8gaW50ZXJsaW5rIHBvbHlnb24gbm9kZXMgaW4gei1vcmRlclxuZnVuY3Rpb24gaW5kZXhDdXJ2ZShzdGFydCwgbWluWCwgbWluWSwgaW52U2l6ZSkge1xuICAgIHZhciBwID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC56ID09PSBudWxsKSBwLnogPSB6T3JkZXIocC54LCBwLnksIG1pblgsIG1pblksIGludlNpemUpO1xuICAgICAgICBwLnByZXZaID0gcC5wcmV2O1xuICAgICAgICBwLm5leHRaID0gcC5uZXh0O1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IHN0YXJ0KTtcblxuICAgIHAucHJldloubmV4dFogPSBudWxsO1xuICAgIHAucHJldlogPSBudWxsO1xuXG4gICAgc29ydExpbmtlZChwKTtcbn1cblxuLy8gU2ltb24gVGF0aGFtJ3MgbGlua2VkIGxpc3QgbWVyZ2Ugc29ydCBhbGdvcml0aG1cbi8vIGh0dHA6Ly93d3cuY2hpYXJrLmdyZWVuZW5kLm9yZy51ay9+c2d0YXRoYW0vYWxnb3JpdGhtcy9saXN0c29ydC5odG1sXG5mdW5jdGlvbiBzb3J0TGlua2VkKGxpc3QpIHtcbiAgICB2YXIgaSwgcCwgcSwgZSwgdGFpbCwgbnVtTWVyZ2VzLCBwU2l6ZSwgcVNpemUsXG4gICAgICAgIGluU2l6ZSA9IDE7XG5cbiAgICBkbyB7XG4gICAgICAgIHAgPSBsaXN0O1xuICAgICAgICBsaXN0ID0gbnVsbDtcbiAgICAgICAgdGFpbCA9IG51bGw7XG4gICAgICAgIG51bU1lcmdlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKHApIHtcbiAgICAgICAgICAgIG51bU1lcmdlcysrO1xuICAgICAgICAgICAgcSA9IHA7XG4gICAgICAgICAgICBwU2l6ZSA9IDA7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5TaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwU2l6ZSsrO1xuICAgICAgICAgICAgICAgIHEgPSBxLm5leHRaO1xuICAgICAgICAgICAgICAgIGlmICghcSkgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBxU2l6ZSA9IGluU2l6ZTtcblxuICAgICAgICAgICAgd2hpbGUgKHBTaXplID4gMCB8fCAocVNpemUgPiAwICYmIHEpKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAocFNpemUgIT09IDAgJiYgKHFTaXplID09PSAwIHx8ICFxIHx8IHAueiA8PSBxLnopKSB7XG4gICAgICAgICAgICAgICAgICAgIGUgPSBwO1xuICAgICAgICAgICAgICAgICAgICBwID0gcC5uZXh0WjtcbiAgICAgICAgICAgICAgICAgICAgcFNpemUtLTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlID0gcTtcbiAgICAgICAgICAgICAgICAgICAgcSA9IHEubmV4dFo7XG4gICAgICAgICAgICAgICAgICAgIHFTaXplLS07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRhaWwpIHRhaWwubmV4dFogPSBlO1xuICAgICAgICAgICAgICAgIGVsc2UgbGlzdCA9IGU7XG5cbiAgICAgICAgICAgICAgICBlLnByZXZaID0gdGFpbDtcbiAgICAgICAgICAgICAgICB0YWlsID0gZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcCA9IHE7XG4gICAgICAgIH1cblxuICAgICAgICB0YWlsLm5leHRaID0gbnVsbDtcbiAgICAgICAgaW5TaXplICo9IDI7XG5cbiAgICB9IHdoaWxlIChudW1NZXJnZXMgPiAxKTtcblxuICAgIHJldHVybiBsaXN0O1xufVxuXG4vLyB6LW9yZGVyIG9mIGEgcG9pbnQgZ2l2ZW4gY29vcmRzIGFuZCBpbnZlcnNlIG9mIHRoZSBsb25nZXIgc2lkZSBvZiBkYXRhIGJib3hcbmZ1bmN0aW9uIHpPcmRlcih4LCB5LCBtaW5YLCBtaW5ZLCBpbnZTaXplKSB7XG4gICAgLy8gY29vcmRzIGFyZSB0cmFuc2Zvcm1lZCBpbnRvIG5vbi1uZWdhdGl2ZSAxNS1iaXQgaW50ZWdlciByYW5nZVxuICAgIHggPSAzMjc2NyAqICh4IC0gbWluWCkgKiBpbnZTaXplO1xuICAgIHkgPSAzMjc2NyAqICh5IC0gbWluWSkgKiBpbnZTaXplO1xuXG4gICAgeCA9ICh4IHwgKHggPDwgOCkpICYgMHgwMEZGMDBGRjtcbiAgICB4ID0gKHggfCAoeCA8PCA0KSkgJiAweDBGMEYwRjBGO1xuICAgIHggPSAoeCB8ICh4IDw8IDIpKSAmIDB4MzMzMzMzMzM7XG4gICAgeCA9ICh4IHwgKHggPDwgMSkpICYgMHg1NTU1NTU1NTtcblxuICAgIHkgPSAoeSB8ICh5IDw8IDgpKSAmIDB4MDBGRjAwRkY7XG4gICAgeSA9ICh5IHwgKHkgPDwgNCkpICYgMHgwRjBGMEYwRjtcbiAgICB5ID0gKHkgfCAoeSA8PCAyKSkgJiAweDMzMzMzMzMzO1xuICAgIHkgPSAoeSB8ICh5IDw8IDEpKSAmIDB4NTU1NTU1NTU7XG5cbiAgICByZXR1cm4geCB8ICh5IDw8IDEpO1xufVxuXG4vLyBmaW5kIHRoZSBsZWZ0bW9zdCBub2RlIG9mIGEgcG9seWdvbiByaW5nXG5mdW5jdGlvbiBnZXRMZWZ0bW9zdChzdGFydCkge1xuICAgIHZhciBwID0gc3RhcnQsXG4gICAgICAgIGxlZnRtb3N0ID0gc3RhcnQ7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC54IDwgbGVmdG1vc3QueCB8fCAocC54ID09PSBsZWZ0bW9zdC54ICYmIHAueSA8IGxlZnRtb3N0LnkpKSBsZWZ0bW9zdCA9IHA7XG4gICAgICAgIHAgPSBwLm5leHQ7XG4gICAgfSB3aGlsZSAocCAhPT0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGxlZnRtb3N0O1xufVxuXG4vLyBjaGVjayBpZiBhIHBvaW50IGxpZXMgd2l0aGluIGEgY29udmV4IHRyaWFuZ2xlXG5mdW5jdGlvbiBwb2ludEluVHJpYW5nbGUoYXgsIGF5LCBieCwgYnksIGN4LCBjeSwgcHgsIHB5KSB7XG4gICAgcmV0dXJuIChjeCAtIHB4KSAqIChheSAtIHB5KSAtIChheCAtIHB4KSAqIChjeSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChheCAtIHB4KSAqIChieSAtIHB5KSAtIChieCAtIHB4KSAqIChheSAtIHB5KSA+PSAwICYmXG4gICAgICAgICAgIChieCAtIHB4KSAqIChjeSAtIHB5KSAtIChjeCAtIHB4KSAqIChieSAtIHB5KSA+PSAwO1xufVxuXG4vLyBjaGVjayBpZiBhIGRpYWdvbmFsIGJldHdlZW4gdHdvIHBvbHlnb24gbm9kZXMgaXMgdmFsaWQgKGxpZXMgaW4gcG9seWdvbiBpbnRlcmlvcilcbmZ1bmN0aW9uIGlzVmFsaWREaWFnb25hbChhLCBiKSB7XG4gICAgcmV0dXJuIGEubmV4dC5pICE9PSBiLmkgJiYgYS5wcmV2LmkgIT09IGIuaSAmJiAhaW50ZXJzZWN0c1BvbHlnb24oYSwgYikgJiYgLy8gZG9uZXMndCBpbnRlcnNlY3Qgb3RoZXIgZWRnZXNcbiAgICAgICAgICAgKGxvY2FsbHlJbnNpZGUoYSwgYikgJiYgbG9jYWxseUluc2lkZShiLCBhKSAmJiBtaWRkbGVJbnNpZGUoYSwgYikgJiYgLy8gbG9jYWxseSB2aXNpYmxlXG4gICAgICAgICAgICAoYXJlYShhLnByZXYsIGEsIGIucHJldikgfHwgYXJlYShhLCBiLnByZXYsIGIpKSB8fCAvLyBkb2VzIG5vdCBjcmVhdGUgb3Bwb3NpdGUtZmFjaW5nIHNlY3RvcnNcbiAgICAgICAgICAgIGVxdWFscyhhLCBiKSAmJiBhcmVhKGEucHJldiwgYSwgYS5uZXh0KSA+IDAgJiYgYXJlYShiLnByZXYsIGIsIGIubmV4dCkgPiAwKTsgLy8gc3BlY2lhbCB6ZXJvLWxlbmd0aCBjYXNlXG59XG5cbi8vIHNpZ25lZCBhcmVhIG9mIGEgdHJpYW5nbGVcbmZ1bmN0aW9uIGFyZWEocCwgcSwgcikge1xuICAgIHJldHVybiAocS55IC0gcC55KSAqIChyLnggLSBxLngpIC0gKHEueCAtIHAueCkgKiAoci55IC0gcS55KTtcbn1cblxuLy8gY2hlY2sgaWYgdHdvIHBvaW50cyBhcmUgZXF1YWxcbmZ1bmN0aW9uIGVxdWFscyhwMSwgcDIpIHtcbiAgICByZXR1cm4gcDEueCA9PT0gcDIueCAmJiBwMS55ID09PSBwMi55O1xufVxuXG4vLyBjaGVjayBpZiB0d28gc2VnbWVudHMgaW50ZXJzZWN0XG5mdW5jdGlvbiBpbnRlcnNlY3RzKHAxLCBxMSwgcDIsIHEyKSB7XG4gICAgdmFyIG8xID0gc2lnbihhcmVhKHAxLCBxMSwgcDIpKTtcbiAgICB2YXIgbzIgPSBzaWduKGFyZWEocDEsIHExLCBxMikpO1xuICAgIHZhciBvMyA9IHNpZ24oYXJlYShwMiwgcTIsIHAxKSk7XG4gICAgdmFyIG80ID0gc2lnbihhcmVhKHAyLCBxMiwgcTEpKTtcblxuICAgIGlmIChvMSAhPT0gbzIgJiYgbzMgIT09IG80KSByZXR1cm4gdHJ1ZTsgLy8gZ2VuZXJhbCBjYXNlXG5cbiAgICBpZiAobzEgPT09IDAgJiYgb25TZWdtZW50KHAxLCBwMiwgcTEpKSByZXR1cm4gdHJ1ZTsgLy8gcDEsIHExIGFuZCBwMiBhcmUgY29sbGluZWFyIGFuZCBwMiBsaWVzIG9uIHAxcTFcbiAgICBpZiAobzIgPT09IDAgJiYgb25TZWdtZW50KHAxLCBxMiwgcTEpKSByZXR1cm4gdHJ1ZTsgLy8gcDEsIHExIGFuZCBxMiBhcmUgY29sbGluZWFyIGFuZCBxMiBsaWVzIG9uIHAxcTFcbiAgICBpZiAobzMgPT09IDAgJiYgb25TZWdtZW50KHAyLCBwMSwgcTIpKSByZXR1cm4gdHJ1ZTsgLy8gcDIsIHEyIGFuZCBwMSBhcmUgY29sbGluZWFyIGFuZCBwMSBsaWVzIG9uIHAycTJcbiAgICBpZiAobzQgPT09IDAgJiYgb25TZWdtZW50KHAyLCBxMSwgcTIpKSByZXR1cm4gdHJ1ZTsgLy8gcDIsIHEyIGFuZCBxMSBhcmUgY29sbGluZWFyIGFuZCBxMSBsaWVzIG9uIHAycTJcblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gZm9yIGNvbGxpbmVhciBwb2ludHMgcCwgcSwgciwgY2hlY2sgaWYgcG9pbnQgcSBsaWVzIG9uIHNlZ21lbnQgcHJcbmZ1bmN0aW9uIG9uU2VnbWVudChwLCBxLCByKSB7XG4gICAgcmV0dXJuIHEueCA8PSBNYXRoLm1heChwLngsIHIueCkgJiYgcS54ID49IE1hdGgubWluKHAueCwgci54KSAmJiBxLnkgPD0gTWF0aC5tYXgocC55LCByLnkpICYmIHEueSA+PSBNYXRoLm1pbihwLnksIHIueSk7XG59XG5cbmZ1bmN0aW9uIHNpZ24obnVtKSB7XG4gICAgcmV0dXJuIG51bSA+IDAgPyAxIDogbnVtIDwgMCA/IC0xIDogMDtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGludGVyc2VjdHMgYW55IHBvbHlnb24gc2VnbWVudHNcbmZ1bmN0aW9uIGludGVyc2VjdHNQb2x5Z29uKGEsIGIpIHtcbiAgICB2YXIgcCA9IGE7XG4gICAgZG8ge1xuICAgICAgICBpZiAocC5pICE9PSBhLmkgJiYgcC5uZXh0LmkgIT09IGEuaSAmJiBwLmkgIT09IGIuaSAmJiBwLm5leHQuaSAhPT0gYi5pICYmXG4gICAgICAgICAgICAgICAgaW50ZXJzZWN0cyhwLCBwLm5leHQsIGEsIGIpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcCA9IHAubmV4dDtcbiAgICB9IHdoaWxlIChwICE9PSBhKTtcblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gY2hlY2sgaWYgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGxvY2FsbHkgaW5zaWRlIHRoZSBwb2x5Z29uXG5mdW5jdGlvbiBsb2NhbGx5SW5zaWRlKGEsIGIpIHtcbiAgICByZXR1cm4gYXJlYShhLnByZXYsIGEsIGEubmV4dCkgPCAwID9cbiAgICAgICAgYXJlYShhLCBiLCBhLm5leHQpID49IDAgJiYgYXJlYShhLCBhLnByZXYsIGIpID49IDAgOlxuICAgICAgICBhcmVhKGEsIGIsIGEucHJldikgPCAwIHx8IGFyZWEoYSwgYS5uZXh0LCBiKSA8IDA7XG59XG5cbi8vIGNoZWNrIGlmIHRoZSBtaWRkbGUgcG9pbnQgb2YgYSBwb2x5Z29uIGRpYWdvbmFsIGlzIGluc2lkZSB0aGUgcG9seWdvblxuZnVuY3Rpb24gbWlkZGxlSW5zaWRlKGEsIGIpIHtcbiAgICB2YXIgcCA9IGEsXG4gICAgICAgIGluc2lkZSA9IGZhbHNlLFxuICAgICAgICBweCA9IChhLnggKyBiLngpIC8gMixcbiAgICAgICAgcHkgPSAoYS55ICsgYi55KSAvIDI7XG4gICAgZG8ge1xuICAgICAgICBpZiAoKChwLnkgPiBweSkgIT09IChwLm5leHQueSA+IHB5KSkgJiYgcC5uZXh0LnkgIT09IHAueSAmJlxuICAgICAgICAgICAgICAgIChweCA8IChwLm5leHQueCAtIHAueCkgKiAocHkgLSBwLnkpIC8gKHAubmV4dC55IC0gcC55KSArIHAueCkpXG4gICAgICAgICAgICBpbnNpZGUgPSAhaW5zaWRlO1xuICAgICAgICBwID0gcC5uZXh0O1xuICAgIH0gd2hpbGUgKHAgIT09IGEpO1xuXG4gICAgcmV0dXJuIGluc2lkZTtcbn1cblxuLy8gbGluayB0d28gcG9seWdvbiB2ZXJ0aWNlcyB3aXRoIGEgYnJpZGdlOyBpZiB0aGUgdmVydGljZXMgYmVsb25nIHRvIHRoZSBzYW1lIHJpbmcsIGl0IHNwbGl0cyBwb2x5Z29uIGludG8gdHdvO1xuLy8gaWYgb25lIGJlbG9uZ3MgdG8gdGhlIG91dGVyIHJpbmcgYW5kIGFub3RoZXIgdG8gYSBob2xlLCBpdCBtZXJnZXMgaXQgaW50byBhIHNpbmdsZSByaW5nXG5mdW5jdGlvbiBzcGxpdFBvbHlnb24oYSwgYikge1xuICAgIHZhciBhMiA9IG5ldyBOb2RlKGEuaSwgYS54LCBhLnkpLFxuICAgICAgICBiMiA9IG5ldyBOb2RlKGIuaSwgYi54LCBiLnkpLFxuICAgICAgICBhbiA9IGEubmV4dCxcbiAgICAgICAgYnAgPSBiLnByZXY7XG5cbiAgICBhLm5leHQgPSBiO1xuICAgIGIucHJldiA9IGE7XG5cbiAgICBhMi5uZXh0ID0gYW47XG4gICAgYW4ucHJldiA9IGEyO1xuXG4gICAgYjIubmV4dCA9IGEyO1xuICAgIGEyLnByZXYgPSBiMjtcblxuICAgIGJwLm5leHQgPSBiMjtcbiAgICBiMi5wcmV2ID0gYnA7XG5cbiAgICByZXR1cm4gYjI7XG59XG5cbi8vIGNyZWF0ZSBhIG5vZGUgYW5kIG9wdGlvbmFsbHkgbGluayBpdCB3aXRoIHByZXZpb3VzIG9uZSAoaW4gYSBjaXJjdWxhciBkb3VibHkgbGlua2VkIGxpc3QpXG5mdW5jdGlvbiBpbnNlcnROb2RlKGksIHgsIHksIGxhc3QpIHtcbiAgICB2YXIgcCA9IG5ldyBOb2RlKGksIHgsIHkpO1xuXG4gICAgaWYgKCFsYXN0KSB7XG4gICAgICAgIHAucHJldiA9IHA7XG4gICAgICAgIHAubmV4dCA9IHA7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICBwLm5leHQgPSBsYXN0Lm5leHQ7XG4gICAgICAgIHAucHJldiA9IGxhc3Q7XG4gICAgICAgIGxhc3QubmV4dC5wcmV2ID0gcDtcbiAgICAgICAgbGFzdC5uZXh0ID0gcDtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU5vZGUocCkge1xuICAgIHAubmV4dC5wcmV2ID0gcC5wcmV2O1xuICAgIHAucHJldi5uZXh0ID0gcC5uZXh0O1xuXG4gICAgaWYgKHAucHJldlopIHAucHJldloubmV4dFogPSBwLm5leHRaO1xuICAgIGlmIChwLm5leHRaKSBwLm5leHRaLnByZXZaID0gcC5wcmV2Wjtcbn1cblxuZnVuY3Rpb24gTm9kZShpLCB4LCB5KSB7XG4gICAgLy8gdmVydGV4IGluZGV4IGluIGNvb3JkaW5hdGVzIGFycmF5XG4gICAgdGhpcy5pID0gaTtcblxuICAgIC8vIHZlcnRleCBjb29yZGluYXRlc1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcblxuICAgIC8vIHByZXZpb3VzIGFuZCBuZXh0IHZlcnRleCBub2RlcyBpbiBhIHBvbHlnb24gcmluZ1xuICAgIHRoaXMucHJldiA9IG51bGw7XG4gICAgdGhpcy5uZXh0ID0gbnVsbDtcblxuICAgIC8vIHotb3JkZXIgY3VydmUgdmFsdWVcbiAgICB0aGlzLnogPSBudWxsO1xuXG4gICAgLy8gcHJldmlvdXMgYW5kIG5leHQgbm9kZXMgaW4gei1vcmRlclxuICAgIHRoaXMucHJldlogPSBudWxsO1xuICAgIHRoaXMubmV4dFogPSBudWxsO1xuXG4gICAgLy8gaW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBpcyBhIHN0ZWluZXIgcG9pbnRcbiAgICB0aGlzLnN0ZWluZXIgPSBmYWxzZTtcbn1cblxuLy8gcmV0dXJuIGEgcGVyY2VudGFnZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHBvbHlnb24gYXJlYSBhbmQgaXRzIHRyaWFuZ3VsYXRpb24gYXJlYTtcbi8vIHVzZWQgdG8gdmVyaWZ5IGNvcnJlY3RuZXNzIG9mIHRyaWFuZ3VsYXRpb25cbmVhcmN1dC5kZXZpYXRpb24gPSBmdW5jdGlvbiAoZGF0YSwgaG9sZUluZGljZXMsIGRpbSwgdHJpYW5nbGVzKSB7XG4gICAgdmFyIGhhc0hvbGVzID0gaG9sZUluZGljZXMgJiYgaG9sZUluZGljZXMubGVuZ3RoO1xuICAgIHZhciBvdXRlckxlbiA9IGhhc0hvbGVzID8gaG9sZUluZGljZXNbMF0gKiBkaW0gOiBkYXRhLmxlbmd0aDtcblxuICAgIHZhciBwb2x5Z29uQXJlYSA9IE1hdGguYWJzKHNpZ25lZEFyZWEoZGF0YSwgMCwgb3V0ZXJMZW4sIGRpbSkpO1xuICAgIGlmIChoYXNIb2xlcykge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gaG9sZUluZGljZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBzdGFydCA9IGhvbGVJbmRpY2VzW2ldICogZGltO1xuICAgICAgICAgICAgdmFyIGVuZCA9IGkgPCBsZW4gLSAxID8gaG9sZUluZGljZXNbaSArIDFdICogZGltIDogZGF0YS5sZW5ndGg7XG4gICAgICAgICAgICBwb2x5Z29uQXJlYSAtPSBNYXRoLmFicyhzaWduZWRBcmVhKGRhdGEsIHN0YXJ0LCBlbmQsIGRpbSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHRyaWFuZ2xlc0FyZWEgPSAwO1xuICAgIGZvciAoaSA9IDA7IGkgPCB0cmlhbmdsZXMubGVuZ3RoOyBpICs9IDMpIHtcbiAgICAgICAgdmFyIGEgPSB0cmlhbmdsZXNbaV0gKiBkaW07XG4gICAgICAgIHZhciBiID0gdHJpYW5nbGVzW2kgKyAxXSAqIGRpbTtcbiAgICAgICAgdmFyIGMgPSB0cmlhbmdsZXNbaSArIDJdICogZGltO1xuICAgICAgICB0cmlhbmdsZXNBcmVhICs9IE1hdGguYWJzKFxuICAgICAgICAgICAgKGRhdGFbYV0gLSBkYXRhW2NdKSAqIChkYXRhW2IgKyAxXSAtIGRhdGFbYSArIDFdKSAtXG4gICAgICAgICAgICAoZGF0YVthXSAtIGRhdGFbYl0pICogKGRhdGFbYyArIDFdIC0gZGF0YVthICsgMV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9seWdvbkFyZWEgPT09IDAgJiYgdHJpYW5nbGVzQXJlYSA9PT0gMCA/IDAgOlxuICAgICAgICBNYXRoLmFicygodHJpYW5nbGVzQXJlYSAtIHBvbHlnb25BcmVhKSAvIHBvbHlnb25BcmVhKTtcbn07XG5cbmZ1bmN0aW9uIHNpZ25lZEFyZWEoZGF0YSwgc3RhcnQsIGVuZCwgZGltKSB7XG4gICAgdmFyIHN1bSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0LCBqID0gZW5kIC0gZGltOyBpIDwgZW5kOyBpICs9IGRpbSkge1xuICAgICAgICBzdW0gKz0gKGRhdGFbal0gLSBkYXRhW2ldKSAqIChkYXRhW2kgKyAxXSArIGRhdGFbaiArIDFdKTtcbiAgICAgICAgaiA9IGk7XG4gICAgfVxuICAgIHJldHVybiBzdW07XG59XG5cbi8vIHR1cm4gYSBwb2x5Z29uIGluIGEgbXVsdGktZGltZW5zaW9uYWwgYXJyYXkgZm9ybSAoZS5nLiBhcyBpbiBHZW9KU09OKSBpbnRvIGEgZm9ybSBFYXJjdXQgYWNjZXB0c1xuZWFyY3V0LmZsYXR0ZW4gPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgIHZhciBkaW0gPSBkYXRhWzBdWzBdLmxlbmd0aCxcbiAgICAgICAgcmVzdWx0ID0ge3ZlcnRpY2VzOiBbXSwgaG9sZXM6IFtdLCBkaW1lbnNpb25zOiBkaW19LFxuICAgICAgICBob2xlSW5kZXggPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZGF0YVtpXS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgZm9yICh2YXIgZCA9IDA7IGQgPCBkaW07IGQrKykgcmVzdWx0LnZlcnRpY2VzLnB1c2goZGF0YVtpXVtqXVtkXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgICBob2xlSW5kZXggKz0gZGF0YVtpIC0gMV0ubGVuZ3RoO1xuICAgICAgICAgICAgcmVzdWx0LmhvbGVzLnB1c2goaG9sZUluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcXVpY2tzZWxlY3QoYXJyLCBrLCBsZWZ0LCByaWdodCwgY29tcGFyZSkge1xuICAgIHF1aWNrc2VsZWN0U3RlcChhcnIsIGssIGxlZnQgfHwgMCwgcmlnaHQgfHwgKGFyci5sZW5ndGggLSAxKSwgY29tcGFyZSB8fCBkZWZhdWx0Q29tcGFyZSk7XG59XG5cbmZ1bmN0aW9uIHF1aWNrc2VsZWN0U3RlcChhcnIsIGssIGxlZnQsIHJpZ2h0LCBjb21wYXJlKSB7XG5cbiAgICB3aGlsZSAocmlnaHQgPiBsZWZ0KSB7XG4gICAgICAgIGlmIChyaWdodCAtIGxlZnQgPiA2MDApIHtcbiAgICAgICAgICAgIHZhciBuID0gcmlnaHQgLSBsZWZ0ICsgMTtcbiAgICAgICAgICAgIHZhciBtID0gayAtIGxlZnQgKyAxO1xuICAgICAgICAgICAgdmFyIHogPSBNYXRoLmxvZyhuKTtcbiAgICAgICAgICAgIHZhciBzID0gMC41ICogTWF0aC5leHAoMiAqIHogLyAzKTtcbiAgICAgICAgICAgIHZhciBzZCA9IDAuNSAqIE1hdGguc3FydCh6ICogcyAqIChuIC0gcykgLyBuKSAqIChtIC0gbiAvIDIgPCAwID8gLTEgOiAxKTtcbiAgICAgICAgICAgIHZhciBuZXdMZWZ0ID0gTWF0aC5tYXgobGVmdCwgTWF0aC5mbG9vcihrIC0gbSAqIHMgLyBuICsgc2QpKTtcbiAgICAgICAgICAgIHZhciBuZXdSaWdodCA9IE1hdGgubWluKHJpZ2h0LCBNYXRoLmZsb29yKGsgKyAobiAtIG0pICogcyAvIG4gKyBzZCkpO1xuICAgICAgICAgICAgcXVpY2tzZWxlY3RTdGVwKGFyciwgaywgbmV3TGVmdCwgbmV3UmlnaHQsIGNvbXBhcmUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHQgPSBhcnJba107XG4gICAgICAgIHZhciBpID0gbGVmdDtcbiAgICAgICAgdmFyIGogPSByaWdodDtcblxuICAgICAgICBzd2FwKGFyciwgbGVmdCwgayk7XG4gICAgICAgIGlmIChjb21wYXJlKGFycltyaWdodF0sIHQpID4gMCkgc3dhcChhcnIsIGxlZnQsIHJpZ2h0KTtcblxuICAgICAgICB3aGlsZSAoaSA8IGopIHtcbiAgICAgICAgICAgIHN3YXAoYXJyLCBpLCBqKTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIGotLTtcbiAgICAgICAgICAgIHdoaWxlIChjb21wYXJlKGFycltpXSwgdCkgPCAwKSBpKys7XG4gICAgICAgICAgICB3aGlsZSAoY29tcGFyZShhcnJbal0sIHQpID4gMCkgai0tO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbXBhcmUoYXJyW2xlZnRdLCB0KSA9PT0gMCkgc3dhcChhcnIsIGxlZnQsIGopO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGorKztcbiAgICAgICAgICAgIHN3YXAoYXJyLCBqLCByaWdodCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaiA8PSBrKSBsZWZ0ID0gaiArIDE7XG4gICAgICAgIGlmIChrIDw9IGopIHJpZ2h0ID0gaiAtIDE7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBzd2FwKGFyciwgaSwgaikge1xuICAgIHZhciB0bXAgPSBhcnJbaV07XG4gICAgYXJyW2ldID0gYXJyW2pdO1xuICAgIGFycltqXSA9IHRtcDtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdENvbXBhcmUoYSwgYikge1xuICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBxdWlja3NlbGVjdCBmcm9tICdxdWlja3NlbGVjdCc7XG5cbmltcG9ydCB7Y2FsY3VsYXRlU2lnbmVkQXJlYX0gZnJvbSAnLi91dGlsJztcblxuaW1wb3J0IHR5cGUgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbi8vIGNsYXNzaWZpZXMgYW4gYXJyYXkgb2YgcmluZ3MgaW50byBwb2x5Z29ucyB3aXRoIG91dGVyIHJpbmdzIGFuZCBob2xlc1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2xhc3NpZnlSaW5ncyhyaW5nczogQXJyYXk8QXJyYXk8UG9pbnQ+PiwgbWF4UmluZ3M6IG51bWJlcikge1xuICAgIGNvbnN0IGxlbiA9IHJpbmdzLmxlbmd0aDtcblxuICAgIGlmIChsZW4gPD0gMSkgcmV0dXJuIFtyaW5nc107XG5cbiAgICBjb25zdCBwb2x5Z29ucyA9IFtdO1xuICAgIGxldCBwb2x5Z29uLFxuICAgICAgICBjY3c7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGFyZWEgPSBjYWxjdWxhdGVTaWduZWRBcmVhKHJpbmdzW2ldKTtcbiAgICAgICAgaWYgKGFyZWEgPT09IDApIGNvbnRpbnVlO1xuXG4gICAgICAgIChyaW5nc1tpXTogYW55KS5hcmVhID0gTWF0aC5hYnMoYXJlYSk7XG5cbiAgICAgICAgaWYgKGNjdyA9PT0gdW5kZWZpbmVkKSBjY3cgPSBhcmVhIDwgMDtcblxuICAgICAgICBpZiAoY2N3ID09PSBhcmVhIDwgMCkge1xuICAgICAgICAgICAgaWYgKHBvbHlnb24pIHBvbHlnb25zLnB1c2gocG9seWdvbik7XG4gICAgICAgICAgICBwb2x5Z29uID0gW3JpbmdzW2ldXTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgKHBvbHlnb246IGFueSkucHVzaChyaW5nc1tpXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHBvbHlnb24pIHBvbHlnb25zLnB1c2gocG9seWdvbik7XG5cbiAgICAvLyBFYXJjdXQgcGVyZm9ybWFuY2UgZGVncmFkZXMgd2l0aCB0aGUgIyBvZiByaW5ncyBpbiBhIHBvbHlnb24uIEZvciB0aGlzXG4gICAgLy8gcmVhc29uLCB3ZSBsaW1pdCBzdHJpcCBvdXQgYWxsIGJ1dCB0aGUgYG1heFJpbmdzYCBsYXJnZXN0IHJpbmdzLlxuICAgIGlmIChtYXhSaW5ncyA+IDEpIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBwb2x5Z29ucy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgaWYgKHBvbHlnb25zW2pdLmxlbmd0aCA8PSBtYXhSaW5ncykgY29udGludWU7XG4gICAgICAgICAgICBxdWlja3NlbGVjdChwb2x5Z29uc1tqXSwgbWF4UmluZ3MsIDEsIHBvbHlnb25zW2pdLmxlbmd0aCAtIDEsIGNvbXBhcmVBcmVhcyk7XG4gICAgICAgICAgICBwb2x5Z29uc1tqXSA9IHBvbHlnb25zW2pdLnNsaWNlKDAsIG1heFJpbmdzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwb2x5Z29ucztcbn1cblxuZnVuY3Rpb24gY29tcGFyZUFyZWFzKGEsIGIpIHtcbiAgICByZXR1cm4gYi5hcmVhIC0gYS5hcmVhO1xufVxuIiwiLy8gQGZsb3dcbmltcG9ydCB0eXBlIEZpbGxTdHlsZUxheWVyIGZyb20gJy4uLy4uL3N0eWxlL3N0eWxlX2xheWVyL2ZpbGxfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgRmlsbEV4dHJ1c2lvblN0eWxlTGF5ZXIgZnJvbSAnLi4vLi4vc3R5bGUvc3R5bGVfbGF5ZXIvZmlsbF9leHRydXNpb25fc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgTGluZVN0eWxlTGF5ZXIgZnJvbSAnLi4vLi4vc3R5bGUvc3R5bGVfbGF5ZXIvbGluZV9zdHlsZV9sYXllcic7XG5cbmltcG9ydCB0eXBlIHtcbiAgICBCdWNrZXRGZWF0dXJlLFxuICAgIFBvcHVsYXRlUGFyYW1ldGVyc1xufSBmcm9tICcuLi9idWNrZXQnO1xuXG50eXBlIFBhdHRlcm5TdHlsZUxheWVycyA9XG4gICAgQXJyYXk8TGluZVN0eWxlTGF5ZXI+IHxcbiAgICBBcnJheTxGaWxsU3R5bGVMYXllcj4gfFxuICAgIEFycmF5PEZpbGxFeHRydXNpb25TdHlsZUxheWVyPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1BhdHRlcm4odHlwZTogc3RyaW5nLCBsYXllcnM6IFBhdHRlcm5TdHlsZUxheWVycywgb3B0aW9uczogUG9wdWxhdGVQYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgcGF0dGVybnMgPSBvcHRpb25zLnBhdHRlcm5EZXBlbmRlbmNpZXM7XG4gICAgbGV0IGhhc1BhdHRlcm4gPSBmYWxzZTtcblxuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm5Qcm9wZXJ0eSA9IGxheWVyLnBhaW50LmdldChgJHt0eXBlfS1wYXR0ZXJuYCk7XG4gICAgICAgIGlmICghcGF0dGVyblByb3BlcnR5LmlzQ29uc3RhbnQoKSkge1xuICAgICAgICAgICAgaGFzUGF0dGVybiA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb25zdGFudFBhdHRlcm4gPSBwYXR0ZXJuUHJvcGVydHkuY29uc3RhbnRPcihudWxsKTtcbiAgICAgICAgaWYgKGNvbnN0YW50UGF0dGVybikge1xuICAgICAgICAgICAgaGFzUGF0dGVybiA9IHRydWU7XG4gICAgICAgICAgICBwYXR0ZXJuc1tjb25zdGFudFBhdHRlcm4udG9dID0gIHRydWU7XG4gICAgICAgICAgICBwYXR0ZXJuc1tjb25zdGFudFBhdHRlcm4uZnJvbV0gPSAgdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoYXNQYXR0ZXJuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkUGF0dGVybkRlcGVuZGVuY2llcyh0eXBlOiBzdHJpbmcsIGxheWVyczogUGF0dGVyblN0eWxlTGF5ZXJzLCBwYXR0ZXJuRmVhdHVyZTogQnVja2V0RmVhdHVyZSwgem9vbTogbnVtYmVyLCBvcHRpb25zOiBQb3B1bGF0ZVBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBwYXR0ZXJucyA9IG9wdGlvbnMucGF0dGVybkRlcGVuZGVuY2llcztcbiAgICBmb3IgKGNvbnN0IGxheWVyIG9mIGxheWVycykge1xuICAgICAgICBjb25zdCBwYXR0ZXJuUHJvcGVydHkgPSBsYXllci5wYWludC5nZXQoYCR7dHlwZX0tcGF0dGVybmApO1xuXG4gICAgICAgIGNvbnN0IHBhdHRlcm5Qcm9wZXJ0eVZhbHVlID0gcGF0dGVyblByb3BlcnR5LnZhbHVlO1xuICAgICAgICBpZiAocGF0dGVyblByb3BlcnR5VmFsdWUua2luZCAhPT0gXCJjb25zdGFudFwiKSB7XG4gICAgICAgICAgICBsZXQgbWluID0gcGF0dGVyblByb3BlcnR5VmFsdWUuZXZhbHVhdGUoe3pvb206IHpvb20gLSAxfSwgcGF0dGVybkZlYXR1cmUsIHt9LCBvcHRpb25zLmF2YWlsYWJsZUltYWdlcyk7XG4gICAgICAgICAgICBsZXQgbWlkID0gcGF0dGVyblByb3BlcnR5VmFsdWUuZXZhbHVhdGUoe3pvb219LCBwYXR0ZXJuRmVhdHVyZSwge30sIG9wdGlvbnMuYXZhaWxhYmxlSW1hZ2VzKTtcbiAgICAgICAgICAgIGxldCBtYXggPSBwYXR0ZXJuUHJvcGVydHlWYWx1ZS5ldmFsdWF0ZSh7em9vbTogem9vbSArIDF9LCBwYXR0ZXJuRmVhdHVyZSwge30sIG9wdGlvbnMuYXZhaWxhYmxlSW1hZ2VzKTtcbiAgICAgICAgICAgIG1pbiA9IG1pbiAmJiBtaW4ubmFtZSA/IG1pbi5uYW1lIDogbWluO1xuICAgICAgICAgICAgbWlkID0gbWlkICYmIG1pZC5uYW1lID8gbWlkLm5hbWUgOiBtaWQ7XG4gICAgICAgICAgICBtYXggPSBtYXggJiYgbWF4Lm5hbWUgPyBtYXgubmFtZSA6IG1heDtcbiAgICAgICAgICAgIC8vIGFkZCB0byBwYXR0ZXJuRGVwZW5kZW5jaWVzXG4gICAgICAgICAgICBwYXR0ZXJuc1ttaW5dID0gdHJ1ZTtcbiAgICAgICAgICAgIHBhdHRlcm5zW21pZF0gPSB0cnVlO1xuICAgICAgICAgICAgcGF0dGVybnNbbWF4XSA9IHRydWU7XG5cbiAgICAgICAgICAgIC8vIHNhdmUgZm9yIGxheW91dFxuICAgICAgICAgICAgcGF0dGVybkZlYXR1cmUucGF0dGVybnNbbGF5ZXIuaWRdID0ge21pbiwgbWlkLCBtYXh9O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwYXR0ZXJuRmVhdHVyZTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7RmlsbExheW91dEFycmF5fSBmcm9tICcuLi9hcnJheV90eXBlcyc7XG5cbmltcG9ydCB7bWVtYmVycyBhcyBsYXlvdXRBdHRyaWJ1dGVzfSBmcm9tICcuL2ZpbGxfYXR0cmlidXRlcyc7XG5pbXBvcnQgU2VnbWVudFZlY3RvciBmcm9tICcuLi9zZWdtZW50JztcbmltcG9ydCB7UHJvZ3JhbUNvbmZpZ3VyYXRpb25TZXR9IGZyb20gJy4uL3Byb2dyYW1fY29uZmlndXJhdGlvbic7XG5pbXBvcnQge0xpbmVJbmRleEFycmF5LCBUcmlhbmdsZUluZGV4QXJyYXl9IGZyb20gJy4uL2luZGV4X2FycmF5X3R5cGUnO1xuaW1wb3J0IGVhcmN1dCBmcm9tICdlYXJjdXQnO1xuaW1wb3J0IGNsYXNzaWZ5UmluZ3MgZnJvbSAnLi4vLi4vdXRpbC9jbGFzc2lmeV9yaW5ncyc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5jb25zdCBFQVJDVVRfTUFYX1JJTkdTID0gNTAwO1xuaW1wb3J0IHtyZWdpc3Rlcn0gZnJvbSAnLi4vLi4vdXRpbC93ZWJfd29ya2VyX3RyYW5zZmVyJztcbmltcG9ydCB7aGFzUGF0dGVybiwgYWRkUGF0dGVybkRlcGVuZGVuY2llc30gZnJvbSAnLi9wYXR0ZXJuX2J1Y2tldF9mZWF0dXJlcyc7XG5pbXBvcnQgbG9hZEdlb21ldHJ5IGZyb20gJy4uL2xvYWRfZ2VvbWV0cnknO1xuaW1wb3J0IEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4uLy4uL3N0eWxlL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5cbmltcG9ydCB0eXBlIHtDYW5vbmljYWxUaWxlSUR9IGZyb20gJy4uLy4uL3NvdXJjZS90aWxlX2lkJztcbmltcG9ydCB0eXBlIHtcbiAgICBCdWNrZXQsXG4gICAgQnVja2V0UGFyYW1ldGVycyxcbiAgICBCdWNrZXRGZWF0dXJlLFxuICAgIEluZGV4ZWRGZWF0dXJlLFxuICAgIFBvcHVsYXRlUGFyYW1ldGVyc1xufSBmcm9tICcuLi9idWNrZXQnO1xuaW1wb3J0IHR5cGUgRmlsbFN0eWxlTGF5ZXIgZnJvbSAnLi4vLi4vc3R5bGUvc3R5bGVfbGF5ZXIvZmlsbF9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uLy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgSW5kZXhCdWZmZXIgZnJvbSAnLi4vLi4vZ2wvaW5kZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIFZlcnRleEJ1ZmZlciBmcm9tICcuLi8uLi9nbC92ZXJ0ZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IHR5cGUge0ZlYXR1cmVTdGF0ZXN9IGZyb20gJy4uLy4uL3NvdXJjZS9zb3VyY2Vfc3RhdGUnO1xuaW1wb3J0IHR5cGUge0ltYWdlUG9zaXRpb259IGZyb20gJy4uLy4uL3JlbmRlci9pbWFnZV9hdGxhcyc7XG5cbmNsYXNzIEZpbGxCdWNrZXQgaW1wbGVtZW50cyBCdWNrZXQge1xuICAgIGluZGV4OiBudW1iZXI7XG4gICAgem9vbTogbnVtYmVyO1xuICAgIG92ZXJzY2FsaW5nOiBudW1iZXI7XG4gICAgbGF5ZXJzOiBBcnJheTxGaWxsU3R5bGVMYXllcj47XG4gICAgbGF5ZXJJZHM6IEFycmF5PHN0cmluZz47XG4gICAgc3RhdGVEZXBlbmRlbnRMYXllcnM6IEFycmF5PEZpbGxTdHlsZUxheWVyPjtcbiAgICBzdGF0ZURlcGVuZGVudExheWVySWRzOiBBcnJheTxzdHJpbmc+O1xuICAgIHBhdHRlcm5GZWF0dXJlczogQXJyYXk8QnVja2V0RmVhdHVyZT47XG5cbiAgICBsYXlvdXRWZXJ0ZXhBcnJheTogRmlsbExheW91dEFycmF5O1xuICAgIGxheW91dFZlcnRleEJ1ZmZlcjogVmVydGV4QnVmZmVyO1xuXG4gICAgaW5kZXhBcnJheTogVHJpYW5nbGVJbmRleEFycmF5O1xuICAgIGluZGV4QnVmZmVyOiBJbmRleEJ1ZmZlcjtcblxuICAgIGluZGV4QXJyYXkyOiBMaW5lSW5kZXhBcnJheTtcbiAgICBpbmRleEJ1ZmZlcjI6IEluZGV4QnVmZmVyO1xuXG4gICAgaGFzUGF0dGVybjogYm9vbGVhbjtcbiAgICBwcm9ncmFtQ29uZmlndXJhdGlvbnM6IFByb2dyYW1Db25maWd1cmF0aW9uU2V0PEZpbGxTdHlsZUxheWVyPjtcbiAgICBzZWdtZW50czogU2VnbWVudFZlY3RvcjtcbiAgICBzZWdtZW50czI6IFNlZ21lbnRWZWN0b3I7XG4gICAgdXBsb2FkZWQ6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBCdWNrZXRQYXJhbWV0ZXJzPEZpbGxTdHlsZUxheWVyPikge1xuICAgICAgICB0aGlzLnpvb20gPSBvcHRpb25zLnpvb207XG4gICAgICAgIHRoaXMub3ZlcnNjYWxpbmcgPSBvcHRpb25zLm92ZXJzY2FsaW5nO1xuICAgICAgICB0aGlzLmxheWVycyA9IG9wdGlvbnMubGF5ZXJzO1xuICAgICAgICB0aGlzLmxheWVySWRzID0gdGhpcy5sYXllcnMubWFwKGxheWVyID0+IGxheWVyLmlkKTtcbiAgICAgICAgdGhpcy5pbmRleCA9IG9wdGlvbnMuaW5kZXg7XG4gICAgICAgIHRoaXMuaGFzUGF0dGVybiA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBhdHRlcm5GZWF0dXJlcyA9IFtdO1xuXG4gICAgICAgIHRoaXMubGF5b3V0VmVydGV4QXJyYXkgPSBuZXcgRmlsbExheW91dEFycmF5KCk7XG4gICAgICAgIHRoaXMuaW5kZXhBcnJheSA9IG5ldyBUcmlhbmdsZUluZGV4QXJyYXkoKTtcbiAgICAgICAgdGhpcy5pbmRleEFycmF5MiA9IG5ldyBMaW5lSW5kZXhBcnJheSgpO1xuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucyA9IG5ldyBQcm9ncmFtQ29uZmlndXJhdGlvblNldChsYXlvdXRBdHRyaWJ1dGVzLCBvcHRpb25zLmxheWVycywgb3B0aW9ucy56b29tKTtcbiAgICAgICAgdGhpcy5zZWdtZW50cyA9IG5ldyBTZWdtZW50VmVjdG9yKCk7XG4gICAgICAgIHRoaXMuc2VnbWVudHMyID0gbmV3IFNlZ21lbnRWZWN0b3IoKTtcbiAgICAgICAgdGhpcy5zdGF0ZURlcGVuZGVudExheWVySWRzID0gdGhpcy5sYXllcnMuZmlsdGVyKChsKSA9PiBsLmlzU3RhdGVEZXBlbmRlbnQoKSkubWFwKChsKSA9PiBsLmlkKTtcbiAgICB9XG5cbiAgICBwb3B1bGF0ZShmZWF0dXJlczogQXJyYXk8SW5kZXhlZEZlYXR1cmU+LCBvcHRpb25zOiBQb3B1bGF0ZVBhcmFtZXRlcnMsIGNhbm9uaWNhbDogQ2Fub25pY2FsVGlsZUlEKSB7XG4gICAgICAgIHRoaXMuaGFzUGF0dGVybiA9IGhhc1BhdHRlcm4oJ2ZpbGwnLCB0aGlzLmxheWVycywgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGZpbGxTb3J0S2V5ID0gdGhpcy5sYXllcnNbMF0ubGF5b3V0LmdldCgnZmlsbC1zb3J0LWtleScpO1xuICAgICAgICBjb25zdCBidWNrZXRGZWF0dXJlcyA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3Qge2ZlYXR1cmUsIGlkLCBpbmRleCwgc291cmNlTGF5ZXJJbmRleH0gb2YgZmVhdHVyZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IG5lZWRHZW9tZXRyeSA9IHRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyLm5lZWRHZW9tZXRyeTtcbiAgICAgICAgICAgIGNvbnN0IGV2YWx1YXRpb25GZWF0dXJlID0ge3R5cGU6IGZlYXR1cmUudHlwZSxcbiAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBmZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICAgICAgICAgICAgZ2VvbWV0cnk6IG5lZWRHZW9tZXRyeSA/IGxvYWRHZW9tZXRyeShmZWF0dXJlKSA6IFtdfTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLmxheWVyc1swXS5fZmVhdHVyZUZpbHRlci5maWx0ZXIobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKHRoaXMuem9vbSksIGV2YWx1YXRpb25GZWF0dXJlLCBjYW5vbmljYWwpKSBjb250aW51ZTtcblxuICAgICAgICAgICAgaWYgKCFuZWVkR2VvbWV0cnkpICBldmFsdWF0aW9uRmVhdHVyZS5nZW9tZXRyeSA9IGxvYWRHZW9tZXRyeShmZWF0dXJlKTtcblxuICAgICAgICAgICAgY29uc3Qgc29ydEtleSA9IGZpbGxTb3J0S2V5ID9cbiAgICAgICAgICAgICAgICBmaWxsU29ydEtleS5ldmFsdWF0ZShldmFsdWF0aW9uRmVhdHVyZSwge30sIGNhbm9uaWNhbCwgb3B0aW9ucy5hdmFpbGFibGVJbWFnZXMpIDpcbiAgICAgICAgICAgICAgICB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgIGNvbnN0IGJ1Y2tldEZlYXR1cmU6IEJ1Y2tldEZlYXR1cmUgPSB7XG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczogZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAgIHR5cGU6IGZlYXR1cmUudHlwZSxcbiAgICAgICAgICAgICAgICBzb3VyY2VMYXllckluZGV4LFxuICAgICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICAgIGdlb21ldHJ5OiBldmFsdWF0aW9uRmVhdHVyZS5nZW9tZXRyeSxcbiAgICAgICAgICAgICAgICBwYXR0ZXJuczoge30sXG4gICAgICAgICAgICAgICAgc29ydEtleVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgYnVja2V0RmVhdHVyZXMucHVzaChidWNrZXRGZWF0dXJlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWxsU29ydEtleSkge1xuICAgICAgICAgICAgYnVja2V0RmVhdHVyZXMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGEuc29ydEtleSBpcyBhbHdheXMgYSBudW1iZXIgd2hlbiBpbiB1c2VcbiAgICAgICAgICAgICAgICByZXR1cm4gKChhLnNvcnRLZXk6IGFueSk6IG51bWJlcikgLSAoKGIuc29ydEtleTogYW55KTogbnVtYmVyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBidWNrZXRGZWF0dXJlIG9mIGJ1Y2tldEZlYXR1cmVzKSB7XG4gICAgICAgICAgICBjb25zdCB7Z2VvbWV0cnksIGluZGV4LCBzb3VyY2VMYXllckluZGV4fSA9IGJ1Y2tldEZlYXR1cmU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmhhc1BhdHRlcm4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXR0ZXJuRmVhdHVyZSA9IGFkZFBhdHRlcm5EZXBlbmRlbmNpZXMoJ2ZpbGwnLCB0aGlzLmxheWVycywgYnVja2V0RmVhdHVyZSwgdGhpcy56b29tLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAvLyBwYXR0ZXJuIGZlYXR1cmVzIGFyZSBhZGRlZCBvbmx5IG9uY2UgdGhlIHBhdHRlcm4gaXMgbG9hZGVkIGludG8gdGhlIGltYWdlIGF0bGFzXG4gICAgICAgICAgICAgICAgLy8gc28gYXJlIHN0b3JlZCBkdXJpbmcgcG9wdWxhdGUgdW50aWwgbGF0ZXIgdXBkYXRlZCB3aXRoIHBvc2l0aW9ucyBieSB0aWxlIHdvcmtlciBpbiBhZGRGZWF0dXJlc1xuICAgICAgICAgICAgICAgIHRoaXMucGF0dGVybkZlYXR1cmVzLnB1c2gocGF0dGVybkZlYXR1cmUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEZlYXR1cmUoYnVja2V0RmVhdHVyZSwgZ2VvbWV0cnksIGluZGV4LCBjYW5vbmljYWwsIHt9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZmVhdHVyZSA9IGZlYXR1cmVzW2luZGV4XS5mZWF0dXJlO1xuICAgICAgICAgICAgb3B0aW9ucy5mZWF0dXJlSW5kZXguaW5zZXJ0KGZlYXR1cmUsIGdlb21ldHJ5LCBpbmRleCwgc291cmNlTGF5ZXJJbmRleCwgdGhpcy5pbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGUoc3RhdGVzOiBGZWF0dXJlU3RhdGVzLCB2dExheWVyOiBWZWN0b3JUaWxlTGF5ZXIsIGltYWdlUG9zaXRpb25zOiB7W186IHN0cmluZ106IEltYWdlUG9zaXRpb259KSB7XG4gICAgICAgIGlmICghdGhpcy5zdGF0ZURlcGVuZGVudExheWVycy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBkYXRlUGFpbnRBcnJheXMoc3RhdGVzLCB2dExheWVyLCB0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJzLCBpbWFnZVBvc2l0aW9ucyk7XG4gICAgfVxuXG4gICAgYWRkRmVhdHVyZXMob3B0aW9uczogUG9wdWxhdGVQYXJhbWV0ZXJzLCBjYW5vbmljYWw6IENhbm9uaWNhbFRpbGVJRCwgaW1hZ2VQb3NpdGlvbnM6IHtbXzogc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0pIHtcbiAgICAgICAgZm9yIChjb25zdCBmZWF0dXJlIG9mIHRoaXMucGF0dGVybkZlYXR1cmVzKSB7XG4gICAgICAgICAgICB0aGlzLmFkZEZlYXR1cmUoZmVhdHVyZSwgZmVhdHVyZS5nZW9tZXRyeSwgZmVhdHVyZS5pbmRleCwgY2Fub25pY2FsLCBpbWFnZVBvc2l0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgdXBsb2FkUGVuZGluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnVwbG9hZGVkIHx8IHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkO1xuICAgIH1cbiAgICB1cGxvYWQoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgICBpZiAoIXRoaXMudXBsb2FkZWQpIHtcbiAgICAgICAgICAgIHRoaXMubGF5b3V0VmVydGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgbGF5b3V0QXR0cmlidXRlcyk7XG4gICAgICAgICAgICB0aGlzLmluZGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXkpO1xuICAgICAgICAgICAgdGhpcy5pbmRleEJ1ZmZlcjIgPSBjb250ZXh0LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheTIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwbG9hZChjb250ZXh0KTtcbiAgICAgICAgdGhpcy51cGxvYWRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxheW91dFZlcnRleEJ1ZmZlcikgcmV0dXJuO1xuICAgICAgICB0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmluZGV4QnVmZmVyMi5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5zZWdtZW50cy5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuc2VnbWVudHMyLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBhZGRGZWF0dXJlKGZlYXR1cmU6IEJ1Y2tldEZlYXR1cmUsIGdlb21ldHJ5OiBBcnJheTxBcnJheTxQb2ludD4+LCBpbmRleDogbnVtYmVyLCBjYW5vbmljYWw6IENhbm9uaWNhbFRpbGVJRCwgaW1hZ2VQb3NpdGlvbnM6IHtbXzogc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0pIHtcbiAgICAgICAgZm9yIChjb25zdCBwb2x5Z29uIG9mIGNsYXNzaWZ5UmluZ3MoZ2VvbWV0cnksIEVBUkNVVF9NQVhfUklOR1MpKSB7XG4gICAgICAgICAgICBsZXQgbnVtVmVydGljZXMgPSAwO1xuICAgICAgICAgICAgZm9yIChjb25zdCByaW5nIG9mIHBvbHlnb24pIHtcbiAgICAgICAgICAgICAgICBudW1WZXJ0aWNlcyArPSByaW5nLmxlbmd0aDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdHJpYW5nbGVTZWdtZW50ID0gdGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudChudW1WZXJ0aWNlcywgdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgdGhpcy5pbmRleEFycmF5KTtcbiAgICAgICAgICAgIGNvbnN0IHRyaWFuZ2xlSW5kZXggPSB0cmlhbmdsZVNlZ21lbnQudmVydGV4TGVuZ3RoO1xuXG4gICAgICAgICAgICBjb25zdCBmbGF0dGVuZWQgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IGhvbGVJbmRpY2VzID0gW107XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgcmluZyBvZiBwb2x5Z29uKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChyaW5nICE9PSBwb2x5Z29uWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgIGhvbGVJbmRpY2VzLnB1c2goZmxhdHRlbmVkLmxlbmd0aCAvIDIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVTZWdtZW50ID0gdGhpcy5zZWdtZW50czIucHJlcGFyZVNlZ21lbnQocmluZy5sZW5ndGgsIHRoaXMubGF5b3V0VmVydGV4QXJyYXksIHRoaXMuaW5kZXhBcnJheTIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVJbmRleCA9IGxpbmVTZWdtZW50LnZlcnRleExlbmd0aDtcblxuICAgICAgICAgICAgICAgIHRoaXMubGF5b3V0VmVydGV4QXJyYXkuZW1wbGFjZUJhY2socmluZ1swXS54LCByaW5nWzBdLnkpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5kZXhBcnJheTIuZW1wbGFjZUJhY2sobGluZUluZGV4ICsgcmluZy5sZW5ndGggLSAxLCBsaW5lSW5kZXgpO1xuICAgICAgICAgICAgICAgIGZsYXR0ZW5lZC5wdXNoKHJpbmdbMF0ueCk7XG4gICAgICAgICAgICAgICAgZmxhdHRlbmVkLnB1c2gocmluZ1swXS55KTtcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxheW91dFZlcnRleEFycmF5LmVtcGxhY2VCYWNrKHJpbmdbaV0ueCwgcmluZ1tpXS55KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleEFycmF5Mi5lbXBsYWNlQmFjayhsaW5lSW5kZXggKyBpIC0gMSwgbGluZUluZGV4ICsgaSk7XG4gICAgICAgICAgICAgICAgICAgIGZsYXR0ZW5lZC5wdXNoKHJpbmdbaV0ueCk7XG4gICAgICAgICAgICAgICAgICAgIGZsYXR0ZW5lZC5wdXNoKHJpbmdbaV0ueSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGluZVNlZ21lbnQudmVydGV4TGVuZ3RoICs9IHJpbmcubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGxpbmVTZWdtZW50LnByaW1pdGl2ZUxlbmd0aCArPSByaW5nLmxlbmd0aDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgaW5kaWNlcyA9IGVhcmN1dChmbGF0dGVuZWQsIGhvbGVJbmRpY2VzKTtcbiAgICAgICAgICAgIGFzc2VydChpbmRpY2VzLmxlbmd0aCAlIDMgPT09IDApO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGljZXMubGVuZ3RoOyBpICs9IDMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2soXG4gICAgICAgICAgICAgICAgICAgIHRyaWFuZ2xlSW5kZXggKyBpbmRpY2VzW2ldLFxuICAgICAgICAgICAgICAgICAgICB0cmlhbmdsZUluZGV4ICsgaW5kaWNlc1tpICsgMV0sXG4gICAgICAgICAgICAgICAgICAgIHRyaWFuZ2xlSW5kZXggKyBpbmRpY2VzW2kgKyAyXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRyaWFuZ2xlU2VnbWVudC52ZXJ0ZXhMZW5ndGggKz0gbnVtVmVydGljZXM7XG4gICAgICAgICAgICB0cmlhbmdsZVNlZ21lbnQucHJpbWl0aXZlTGVuZ3RoICs9IGluZGljZXMubGVuZ3RoIC8gMztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5wb3B1bGF0ZVBhaW50QXJyYXlzKHRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLCBmZWF0dXJlLCBpbmRleCwgaW1hZ2VQb3NpdGlvbnMsIGNhbm9uaWNhbCk7XG4gICAgfVxufVxuXG5yZWdpc3RlcignRmlsbEJ1Y2tldCcsIEZpbGxCdWNrZXQsIHtvbWl0OiBbJ2xheWVycycsICdwYXR0ZXJuRmVhdHVyZXMnXX0pO1xuXG5leHBvcnQgZGVmYXVsdCBGaWxsQnVja2V0O1xuIiwiLy8gVGhpcyBmaWxlIGlzIGdlbmVyYXRlZC4gRWRpdCBidWlsZC9nZW5lcmF0ZS1zdHlsZS1jb2RlLmpzLCB0aGVuIHJ1biBgeWFybiBydW4gY29kZWdlbmAuXG4vLyBAZmxvd1xuLyogZXNsaW50LWRpc2FibGUgKi9cblxuaW1wb3J0IHN0eWxlU3BlYyBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3JlZmVyZW5jZS9sYXRlc3QnO1xuXG5pbXBvcnQge1xuICAgIFByb3BlcnRpZXMsXG4gICAgRGF0YUNvbnN0YW50UHJvcGVydHksXG4gICAgRGF0YURyaXZlblByb3BlcnR5LFxuICAgIENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHksXG4gICAgQ3Jvc3NGYWRlZFByb3BlcnR5LFxuICAgIENvbG9yUmFtcFByb3BlcnR5XG59IGZyb20gJy4uL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgdHlwZSBDb2xvciBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuXG5pbXBvcnQgdHlwZSBGb3JtYXR0ZWQgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL2Zvcm1hdHRlZCc7XG5cbmltcG9ydCB0eXBlIFJlc29sdmVkSW1hZ2UgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL3Jlc29sdmVkX2ltYWdlJztcblxuZXhwb3J0IHR5cGUgTGF5b3V0UHJvcHMgPSB7fFxuICAgIFwiZmlsbC1zb3J0LWtleVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbnx9O1xuXG5jb25zdCBsYXlvdXQ6IFByb3BlcnRpZXM8TGF5b3V0UHJvcHM+ID0gbmV3IFByb3BlcnRpZXMoe1xuICAgIFwiZmlsbC1zb3J0LWtleVwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9maWxsXCJdW1wiZmlsbC1zb3J0LWtleVwiXSksXG59KTtcblxuZXhwb3J0IHR5cGUgUGFpbnRQcm9wcyA9IHt8XG4gICAgXCJmaWxsLWFudGlhbGlhc1wiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxib29sZWFuPixcbiAgICBcImZpbGwtb3BhY2l0eVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcImZpbGwtY29sb3JcIjogRGF0YURyaXZlblByb3BlcnR5PENvbG9yPixcbiAgICBcImZpbGwtb3V0bGluZS1jb2xvclwiOiBEYXRhRHJpdmVuUHJvcGVydHk8Q29sb3I+LFxuICAgIFwiZmlsbC10cmFuc2xhdGVcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8W251bWJlciwgbnVtYmVyXT4sXG4gICAgXCJmaWxsLXRyYW5zbGF0ZS1hbmNob3JcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJtYXBcIiB8IFwidmlld3BvcnRcIj4sXG4gICAgXCJmaWxsLXBhdHRlcm5cIjogQ3Jvc3NGYWRlZERhdGFEcml2ZW5Qcm9wZXJ0eTxSZXNvbHZlZEltYWdlPixcbnx9O1xuXG5jb25zdCBwYWludDogUHJvcGVydGllczxQYWludFByb3BzPiA9IG5ldyBQcm9wZXJ0aWVzKHtcbiAgICBcImZpbGwtYW50aWFsaWFzXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9maWxsXCJdW1wiZmlsbC1hbnRpYWxpYXNcIl0pLFxuICAgIFwiZmlsbC1vcGFjaXR5XCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbFwiXVtcImZpbGwtb3BhY2l0eVwiXSksXG4gICAgXCJmaWxsLWNvbG9yXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbFwiXVtcImZpbGwtY29sb3JcIl0pLFxuICAgIFwiZmlsbC1vdXRsaW5lLWNvbG9yXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbFwiXVtcImZpbGwtb3V0bGluZS1jb2xvclwiXSksXG4gICAgXCJmaWxsLXRyYW5zbGF0ZVwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbFwiXVtcImZpbGwtdHJhbnNsYXRlXCJdKSxcbiAgICBcImZpbGwtdHJhbnNsYXRlLWFuY2hvclwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbFwiXVtcImZpbGwtdHJhbnNsYXRlLWFuY2hvclwiXSksXG4gICAgXCJmaWxsLXBhdHRlcm5cIjogbmV3IENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbFwiXVtcImZpbGwtcGF0dGVyblwiXSksXG59KTtcblxuLy8gTm90ZTogd2l0aG91dCBhZGRpbmcgdGhlIGV4cGxpY2l0IHR5cGUgYW5ub3RhdGlvbiwgRmxvdyBpbmZlcnMgd2Vha2VyIHR5cGVzXG4vLyBmb3IgdGhlc2Ugb2JqZWN0cyBmcm9tIHRoZWlyIHVzZSBpbiB0aGUgY29uc3RydWN0b3IgdG8gU3R5bGVMYXllciwgYXNcbi8vIHtsYXlvdXQ/OiBQcm9wZXJ0aWVzPC4uLj4sIHBhaW50OiBQcm9wZXJ0aWVzPC4uLj59XG5leHBvcnQgZGVmYXVsdCAoeyBwYWludCwgbGF5b3V0IH06ICRFeGFjdDx7XG4gIHBhaW50OiBQcm9wZXJ0aWVzPFBhaW50UHJvcHM+LCBsYXlvdXQ6IFByb3BlcnRpZXM8TGF5b3V0UHJvcHM+XG59Pik7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZV9sYXllcic7XG5cbmltcG9ydCBGaWxsQnVja2V0IGZyb20gJy4uLy4uL2RhdGEvYnVja2V0L2ZpbGxfYnVja2V0JztcbmltcG9ydCB7cG9seWdvbkludGVyc2VjdHNNdWx0aVBvbHlnb259IGZyb20gJy4uLy4uL3V0aWwvaW50ZXJzZWN0aW9uX3Rlc3RzJztcbmltcG9ydCB7dHJhbnNsYXRlRGlzdGFuY2UsIHRyYW5zbGF0ZX0gZnJvbSAnLi4vcXVlcnlfdXRpbHMnO1xuaW1wb3J0IHByb3BlcnRpZXMgZnJvbSAnLi9maWxsX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuaW1wb3J0IHtUcmFuc2l0aW9uYWJsZSwgVHJhbnNpdGlvbmluZywgTGF5b3V0LCBQb3NzaWJseUV2YWx1YXRlZH0gZnJvbSAnLi4vcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIHtGZWF0dXJlU3RhdGV9IGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSB7QnVja2V0UGFyYW1ldGVyc30gZnJvbSAnLi4vLi4vZGF0YS9idWNrZXQnO1xuaW1wb3J0IHR5cGUgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSB7TGF5b3V0UHJvcHMsIFBhaW50UHJvcHN9IGZyb20gJy4vZmlsbF9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzJztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4uL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5pbXBvcnQgdHlwZSBUcmFuc2Zvcm0gZnJvbSAnLi4vLi4vZ2VvL3RyYW5zZm9ybSc7XG5pbXBvcnQgdHlwZSB7TGF5ZXJTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuY2xhc3MgRmlsbFN0eWxlTGF5ZXIgZXh0ZW5kcyBTdHlsZUxheWVyIHtcbiAgICBfdW5ldmFsdWF0ZWRMYXlvdXQ6IExheW91dDxMYXlvdXRQcm9wcz47XG4gICAgbGF5b3V0OiBQb3NzaWJseUV2YWx1YXRlZDxMYXlvdXRQcm9wcz47XG5cbiAgICBfdHJhbnNpdGlvbmFibGVQYWludDogVHJhbnNpdGlvbmFibGU8UGFpbnRQcm9wcz47XG4gICAgX3RyYW5zaXRpb25pbmdQYWludDogVHJhbnNpdGlvbmluZzxQYWludFByb3BzPjtcbiAgICBwYWludDogUG9zc2libHlFdmFsdWF0ZWQ8UGFpbnRQcm9wcz47XG5cbiAgICBjb25zdHJ1Y3RvcihsYXllcjogTGF5ZXJTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHN1cGVyKGxheWVyLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICByZWNhbGN1bGF0ZShwYXJhbWV0ZXJzOiBFdmFsdWF0aW9uUGFyYW1ldGVycywgYXZhaWxhYmxlSW1hZ2VzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIHN1cGVyLnJlY2FsY3VsYXRlKHBhcmFtZXRlcnMsIGF2YWlsYWJsZUltYWdlcyk7XG5cbiAgICAgICAgY29uc3Qgb3V0bGluZUNvbG9yID0gdGhpcy5wYWludC5fdmFsdWVzWydmaWxsLW91dGxpbmUtY29sb3InXTtcbiAgICAgICAgaWYgKG91dGxpbmVDb2xvci52YWx1ZS5raW5kID09PSAnY29uc3RhbnQnICYmIG91dGxpbmVDb2xvci52YWx1ZS52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnBhaW50Ll92YWx1ZXNbJ2ZpbGwtb3V0bGluZS1jb2xvciddID0gdGhpcy5wYWludC5fdmFsdWVzWydmaWxsLWNvbG9yJ107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjcmVhdGVCdWNrZXQocGFyYW1ldGVyczogQnVja2V0UGFyYW1ldGVyczwqPikge1xuICAgICAgICByZXR1cm4gbmV3IEZpbGxCdWNrZXQocGFyYW1ldGVycyk7XG4gICAgfVxuXG4gICAgcXVlcnlSYWRpdXMoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZURpc3RhbmNlKHRoaXMucGFpbnQuZ2V0KCdmaWxsLXRyYW5zbGF0ZScpKTtcbiAgICB9XG5cbiAgICBxdWVyeUludGVyc2VjdHNGZWF0dXJlKHF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmU6IFZlY3RvclRpbGVGZWF0dXJlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZVN0YXRlOiBGZWF0dXJlU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeTogQXJyYXk8QXJyYXk8UG9pbnQ+PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHpvb206IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxzVG9UaWxlVW5pdHM6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB0cmFuc2xhdGVkUG9seWdvbiA9IHRyYW5zbGF0ZShxdWVyeUdlb21ldHJ5LFxuICAgICAgICAgICAgdGhpcy5wYWludC5nZXQoJ2ZpbGwtdHJhbnNsYXRlJyksXG4gICAgICAgICAgICB0aGlzLnBhaW50LmdldCgnZmlsbC10cmFuc2xhdGUtYW5jaG9yJyksXG4gICAgICAgICAgICB0cmFuc2Zvcm0uYW5nbGUsIHBpeGVsc1RvVGlsZVVuaXRzKTtcbiAgICAgICAgcmV0dXJuIHBvbHlnb25JbnRlcnNlY3RzTXVsdGlQb2x5Z29uKHRyYW5zbGF0ZWRQb2x5Z29uLCBnZW9tZXRyeSk7XG4gICAgfVxuXG4gICAgaXNUaWxlQ2xpcHBlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBGaWxsU3R5bGVMYXllcjtcbiIsIi8vIEBmbG93XG5pbXBvcnQge2NyZWF0ZUxheW91dH0gZnJvbSAnLi4vLi4vdXRpbC9zdHJ1Y3RfYXJyYXknO1xuXG5jb25zdCBsYXlvdXQgPSBjcmVhdGVMYXlvdXQoW1xuICAgIHtuYW1lOiAnYV9wb3MnLCAgICAgICAgICBjb21wb25lbnRzOiAyLCB0eXBlOiAnSW50MTYnfSxcbiAgICB7bmFtZTogJ2Ffbm9ybWFsX2VkJywgICAgY29tcG9uZW50czogNCwgdHlwZTogJ0ludDE2J30sXG5dLCA0KTtcblxuZXhwb3J0IGRlZmF1bHQgbGF5b3V0O1xuZXhwb3J0IGNvbnN0IHttZW1iZXJzLCBzaXplLCBhbGlnbm1lbnR9ID0gbGF5b3V0O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgUG9pbnQgPSByZXF1aXJlKCdAbWFwYm94L3BvaW50LWdlb21ldHJ5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gVmVjdG9yVGlsZUZlYXR1cmU7XG5cbmZ1bmN0aW9uIFZlY3RvclRpbGVGZWF0dXJlKHBiZiwgZW5kLCBleHRlbnQsIGtleXMsIHZhbHVlcykge1xuICAgIC8vIFB1YmxpY1xuICAgIHRoaXMucHJvcGVydGllcyA9IHt9O1xuICAgIHRoaXMuZXh0ZW50ID0gZXh0ZW50O1xuICAgIHRoaXMudHlwZSA9IDA7XG5cbiAgICAvLyBQcml2YXRlXG4gICAgdGhpcy5fcGJmID0gcGJmO1xuICAgIHRoaXMuX2dlb21ldHJ5ID0gLTE7XG4gICAgdGhpcy5fa2V5cyA9IGtleXM7XG4gICAgdGhpcy5fdmFsdWVzID0gdmFsdWVzO1xuXG4gICAgcGJmLnJlYWRGaWVsZHMocmVhZEZlYXR1cmUsIHRoaXMsIGVuZCk7XG59XG5cbmZ1bmN0aW9uIHJlYWRGZWF0dXJlKHRhZywgZmVhdHVyZSwgcGJmKSB7XG4gICAgaWYgKHRhZyA9PSAxKSBmZWF0dXJlLmlkID0gcGJmLnJlYWRWYXJpbnQoKTtcbiAgICBlbHNlIGlmICh0YWcgPT0gMikgcmVhZFRhZyhwYmYsIGZlYXR1cmUpO1xuICAgIGVsc2UgaWYgKHRhZyA9PSAzKSBmZWF0dXJlLnR5cGUgPSBwYmYucmVhZFZhcmludCgpO1xuICAgIGVsc2UgaWYgKHRhZyA9PSA0KSBmZWF0dXJlLl9nZW9tZXRyeSA9IHBiZi5wb3M7XG59XG5cbmZ1bmN0aW9uIHJlYWRUYWcocGJmLCBmZWF0dXJlKSB7XG4gICAgdmFyIGVuZCA9IHBiZi5yZWFkVmFyaW50KCkgKyBwYmYucG9zO1xuXG4gICAgd2hpbGUgKHBiZi5wb3MgPCBlbmQpIHtcbiAgICAgICAgdmFyIGtleSA9IGZlYXR1cmUuX2tleXNbcGJmLnJlYWRWYXJpbnQoKV0sXG4gICAgICAgICAgICB2YWx1ZSA9IGZlYXR1cmUuX3ZhbHVlc1twYmYucmVhZFZhcmludCgpXTtcbiAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzW2tleV0gPSB2YWx1ZTtcbiAgICB9XG59XG5cblZlY3RvclRpbGVGZWF0dXJlLnR5cGVzID0gWydVbmtub3duJywgJ1BvaW50JywgJ0xpbmVTdHJpbmcnLCAnUG9seWdvbiddO1xuXG5WZWN0b3JUaWxlRmVhdHVyZS5wcm90b3R5cGUubG9hZEdlb21ldHJ5ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHBiZiA9IHRoaXMuX3BiZjtcbiAgICBwYmYucG9zID0gdGhpcy5fZ2VvbWV0cnk7XG5cbiAgICB2YXIgZW5kID0gcGJmLnJlYWRWYXJpbnQoKSArIHBiZi5wb3MsXG4gICAgICAgIGNtZCA9IDEsXG4gICAgICAgIGxlbmd0aCA9IDAsXG4gICAgICAgIHggPSAwLFxuICAgICAgICB5ID0gMCxcbiAgICAgICAgbGluZXMgPSBbXSxcbiAgICAgICAgbGluZTtcblxuICAgIHdoaWxlIChwYmYucG9zIDwgZW5kKSB7XG4gICAgICAgIGlmIChsZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgdmFyIGNtZExlbiA9IHBiZi5yZWFkVmFyaW50KCk7XG4gICAgICAgICAgICBjbWQgPSBjbWRMZW4gJiAweDc7XG4gICAgICAgICAgICBsZW5ndGggPSBjbWRMZW4gPj4gMztcbiAgICAgICAgfVxuXG4gICAgICAgIGxlbmd0aC0tO1xuXG4gICAgICAgIGlmIChjbWQgPT09IDEgfHwgY21kID09PSAyKSB7XG4gICAgICAgICAgICB4ICs9IHBiZi5yZWFkU1ZhcmludCgpO1xuICAgICAgICAgICAgeSArPSBwYmYucmVhZFNWYXJpbnQoKTtcblxuICAgICAgICAgICAgaWYgKGNtZCA9PT0gMSkgeyAvLyBtb3ZlVG9cbiAgICAgICAgICAgICAgICBpZiAobGluZSkgbGluZXMucHVzaChsaW5lKTtcbiAgICAgICAgICAgICAgICBsaW5lID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxpbmUucHVzaChuZXcgUG9pbnQoeCwgeSkpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY21kID09PSA3KSB7XG5cbiAgICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwbmlrLXZlY3Rvci10aWxlL2lzc3Vlcy85MFxuICAgICAgICAgICAgaWYgKGxpbmUpIHtcbiAgICAgICAgICAgICAgICBsaW5lLnB1c2gobGluZVswXS5jbG9uZSgpKTsgLy8gY2xvc2VQb2x5Z29uXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBjb21tYW5kICcgKyBjbWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGxpbmUpIGxpbmVzLnB1c2gobGluZSk7XG5cbiAgICByZXR1cm4gbGluZXM7XG59O1xuXG5WZWN0b3JUaWxlRmVhdHVyZS5wcm90b3R5cGUuYmJveCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBwYmYgPSB0aGlzLl9wYmY7XG4gICAgcGJmLnBvcyA9IHRoaXMuX2dlb21ldHJ5O1xuXG4gICAgdmFyIGVuZCA9IHBiZi5yZWFkVmFyaW50KCkgKyBwYmYucG9zLFxuICAgICAgICBjbWQgPSAxLFxuICAgICAgICBsZW5ndGggPSAwLFxuICAgICAgICB4ID0gMCxcbiAgICAgICAgeSA9IDAsXG4gICAgICAgIHgxID0gSW5maW5pdHksXG4gICAgICAgIHgyID0gLUluZmluaXR5LFxuICAgICAgICB5MSA9IEluZmluaXR5LFxuICAgICAgICB5MiA9IC1JbmZpbml0eTtcblxuICAgIHdoaWxlIChwYmYucG9zIDwgZW5kKSB7XG4gICAgICAgIGlmIChsZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgdmFyIGNtZExlbiA9IHBiZi5yZWFkVmFyaW50KCk7XG4gICAgICAgICAgICBjbWQgPSBjbWRMZW4gJiAweDc7XG4gICAgICAgICAgICBsZW5ndGggPSBjbWRMZW4gPj4gMztcbiAgICAgICAgfVxuXG4gICAgICAgIGxlbmd0aC0tO1xuXG4gICAgICAgIGlmIChjbWQgPT09IDEgfHwgY21kID09PSAyKSB7XG4gICAgICAgICAgICB4ICs9IHBiZi5yZWFkU1ZhcmludCgpO1xuICAgICAgICAgICAgeSArPSBwYmYucmVhZFNWYXJpbnQoKTtcbiAgICAgICAgICAgIGlmICh4IDwgeDEpIHgxID0geDtcbiAgICAgICAgICAgIGlmICh4ID4geDIpIHgyID0geDtcbiAgICAgICAgICAgIGlmICh5IDwgeTEpIHkxID0geTtcbiAgICAgICAgICAgIGlmICh5ID4geTIpIHkyID0geTtcblxuICAgICAgICB9IGVsc2UgaWYgKGNtZCAhPT0gNykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGNvbW1hbmQgJyArIGNtZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gW3gxLCB5MSwgeDIsIHkyXTtcbn07XG5cblZlY3RvclRpbGVGZWF0dXJlLnByb3RvdHlwZS50b0dlb0pTT04gPSBmdW5jdGlvbih4LCB5LCB6KSB7XG4gICAgdmFyIHNpemUgPSB0aGlzLmV4dGVudCAqIE1hdGgucG93KDIsIHopLFxuICAgICAgICB4MCA9IHRoaXMuZXh0ZW50ICogeCxcbiAgICAgICAgeTAgPSB0aGlzLmV4dGVudCAqIHksXG4gICAgICAgIGNvb3JkcyA9IHRoaXMubG9hZEdlb21ldHJ5KCksXG4gICAgICAgIHR5cGUgPSBWZWN0b3JUaWxlRmVhdHVyZS50eXBlc1t0aGlzLnR5cGVdLFxuICAgICAgICBpLCBqO1xuXG4gICAgZnVuY3Rpb24gcHJvamVjdChsaW5lKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGluZS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgdmFyIHAgPSBsaW5lW2pdLCB5MiA9IDE4MCAtIChwLnkgKyB5MCkgKiAzNjAgLyBzaXplO1xuICAgICAgICAgICAgbGluZVtqXSA9IFtcbiAgICAgICAgICAgICAgICAocC54ICsgeDApICogMzYwIC8gc2l6ZSAtIDE4MCxcbiAgICAgICAgICAgICAgICAzNjAgLyBNYXRoLlBJICogTWF0aC5hdGFuKE1hdGguZXhwKHkyICogTWF0aC5QSSAvIDE4MCkpIC0gOTBcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgIGNhc2UgMTpcbiAgICAgICAgdmFyIHBvaW50cyA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29vcmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBwb2ludHNbaV0gPSBjb29yZHNbaV1bMF07XG4gICAgICAgIH1cbiAgICAgICAgY29vcmRzID0gcG9pbnRzO1xuICAgICAgICBwcm9qZWN0KGNvb3Jkcyk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAyOlxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29vcmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBwcm9qZWN0KGNvb3Jkc1tpXSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIDM6XG4gICAgICAgIGNvb3JkcyA9IGNsYXNzaWZ5UmluZ3MoY29vcmRzKTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvb3Jkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGNvb3Jkc1tpXS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIHByb2plY3QoY29vcmRzW2ldW2pdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoY29vcmRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBjb29yZHMgPSBjb29yZHNbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdHlwZSA9ICdNdWx0aScgKyB0eXBlO1xuICAgIH1cblxuICAgIHZhciByZXN1bHQgPSB7XG4gICAgICAgIHR5cGU6IFwiRmVhdHVyZVwiLFxuICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICAgIGNvb3JkaW5hdGVzOiBjb29yZHNcbiAgICAgICAgfSxcbiAgICAgICAgcHJvcGVydGllczogdGhpcy5wcm9wZXJ0aWVzXG4gICAgfTtcblxuICAgIGlmICgnaWQnIGluIHRoaXMpIHtcbiAgICAgICAgcmVzdWx0LmlkID0gdGhpcy5pZDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gY2xhc3NpZmllcyBhbiBhcnJheSBvZiByaW5ncyBpbnRvIHBvbHlnb25zIHdpdGggb3V0ZXIgcmluZ3MgYW5kIGhvbGVzXG5cbmZ1bmN0aW9uIGNsYXNzaWZ5UmluZ3MocmluZ3MpIHtcbiAgICB2YXIgbGVuID0gcmluZ3MubGVuZ3RoO1xuXG4gICAgaWYgKGxlbiA8PSAxKSByZXR1cm4gW3JpbmdzXTtcblxuICAgIHZhciBwb2x5Z29ucyA9IFtdLFxuICAgICAgICBwb2x5Z29uLFxuICAgICAgICBjY3c7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHZhciBhcmVhID0gc2lnbmVkQXJlYShyaW5nc1tpXSk7XG4gICAgICAgIGlmIChhcmVhID09PSAwKSBjb250aW51ZTtcblxuICAgICAgICBpZiAoY2N3ID09PSB1bmRlZmluZWQpIGNjdyA9IGFyZWEgPCAwO1xuXG4gICAgICAgIGlmIChjY3cgPT09IGFyZWEgPCAwKSB7XG4gICAgICAgICAgICBpZiAocG9seWdvbikgcG9seWdvbnMucHVzaChwb2x5Z29uKTtcbiAgICAgICAgICAgIHBvbHlnb24gPSBbcmluZ3NbaV1dO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwb2x5Z29uLnB1c2gocmluZ3NbaV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChwb2x5Z29uKSBwb2x5Z29ucy5wdXNoKHBvbHlnb24pO1xuXG4gICAgcmV0dXJuIHBvbHlnb25zO1xufVxuXG5mdW5jdGlvbiBzaWduZWRBcmVhKHJpbmcpIHtcbiAgICB2YXIgc3VtID0gMDtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gcmluZy5sZW5ndGgsIGogPSBsZW4gLSAxLCBwMSwgcDI7IGkgPCBsZW47IGogPSBpKyspIHtcbiAgICAgICAgcDEgPSByaW5nW2ldO1xuICAgICAgICBwMiA9IHJpbmdbal07XG4gICAgICAgIHN1bSArPSAocDIueCAtIHAxLngpICogKHAxLnkgKyBwMi55KTtcbiAgICB9XG4gICAgcmV0dXJuIHN1bTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFZlY3RvclRpbGVGZWF0dXJlID0gcmVxdWlyZSgnLi92ZWN0b3J0aWxlZmVhdHVyZS5qcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFZlY3RvclRpbGVMYXllcjtcblxuZnVuY3Rpb24gVmVjdG9yVGlsZUxheWVyKHBiZiwgZW5kKSB7XG4gICAgLy8gUHVibGljXG4gICAgdGhpcy52ZXJzaW9uID0gMTtcbiAgICB0aGlzLm5hbWUgPSBudWxsO1xuICAgIHRoaXMuZXh0ZW50ID0gNDA5NjtcbiAgICB0aGlzLmxlbmd0aCA9IDA7XG5cbiAgICAvLyBQcml2YXRlXG4gICAgdGhpcy5fcGJmID0gcGJmO1xuICAgIHRoaXMuX2tleXMgPSBbXTtcbiAgICB0aGlzLl92YWx1ZXMgPSBbXTtcbiAgICB0aGlzLl9mZWF0dXJlcyA9IFtdO1xuXG4gICAgcGJmLnJlYWRGaWVsZHMocmVhZExheWVyLCB0aGlzLCBlbmQpO1xuXG4gICAgdGhpcy5sZW5ndGggPSB0aGlzLl9mZWF0dXJlcy5sZW5ndGg7XG59XG5cbmZ1bmN0aW9uIHJlYWRMYXllcih0YWcsIGxheWVyLCBwYmYpIHtcbiAgICBpZiAodGFnID09PSAxNSkgbGF5ZXIudmVyc2lvbiA9IHBiZi5yZWFkVmFyaW50KCk7XG4gICAgZWxzZSBpZiAodGFnID09PSAxKSBsYXllci5uYW1lID0gcGJmLnJlYWRTdHJpbmcoKTtcbiAgICBlbHNlIGlmICh0YWcgPT09IDUpIGxheWVyLmV4dGVudCA9IHBiZi5yZWFkVmFyaW50KCk7XG4gICAgZWxzZSBpZiAodGFnID09PSAyKSBsYXllci5fZmVhdHVyZXMucHVzaChwYmYucG9zKTtcbiAgICBlbHNlIGlmICh0YWcgPT09IDMpIGxheWVyLl9rZXlzLnB1c2gocGJmLnJlYWRTdHJpbmcoKSk7XG4gICAgZWxzZSBpZiAodGFnID09PSA0KSBsYXllci5fdmFsdWVzLnB1c2gocmVhZFZhbHVlTWVzc2FnZShwYmYpKTtcbn1cblxuZnVuY3Rpb24gcmVhZFZhbHVlTWVzc2FnZShwYmYpIHtcbiAgICB2YXIgdmFsdWUgPSBudWxsLFxuICAgICAgICBlbmQgPSBwYmYucmVhZFZhcmludCgpICsgcGJmLnBvcztcblxuICAgIHdoaWxlIChwYmYucG9zIDwgZW5kKSB7XG4gICAgICAgIHZhciB0YWcgPSBwYmYucmVhZFZhcmludCgpID4+IDM7XG5cbiAgICAgICAgdmFsdWUgPSB0YWcgPT09IDEgPyBwYmYucmVhZFN0cmluZygpIDpcbiAgICAgICAgICAgIHRhZyA9PT0gMiA/IHBiZi5yZWFkRmxvYXQoKSA6XG4gICAgICAgICAgICB0YWcgPT09IDMgPyBwYmYucmVhZERvdWJsZSgpIDpcbiAgICAgICAgICAgIHRhZyA9PT0gNCA/IHBiZi5yZWFkVmFyaW50NjQoKSA6XG4gICAgICAgICAgICB0YWcgPT09IDUgPyBwYmYucmVhZFZhcmludCgpIDpcbiAgICAgICAgICAgIHRhZyA9PT0gNiA/IHBiZi5yZWFkU1ZhcmludCgpIDpcbiAgICAgICAgICAgIHRhZyA9PT0gNyA/IHBiZi5yZWFkQm9vbGVhbigpIDogbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG59XG5cbi8vIHJldHVybiBmZWF0dXJlIGBpYCBmcm9tIHRoaXMgbGF5ZXIgYXMgYSBgVmVjdG9yVGlsZUZlYXR1cmVgXG5WZWN0b3JUaWxlTGF5ZXIucHJvdG90eXBlLmZlYXR1cmUgPSBmdW5jdGlvbihpKSB7XG4gICAgaWYgKGkgPCAwIHx8IGkgPj0gdGhpcy5fZmVhdHVyZXMubGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IoJ2ZlYXR1cmUgaW5kZXggb3V0IG9mIGJvdW5kcycpO1xuXG4gICAgdGhpcy5fcGJmLnBvcyA9IHRoaXMuX2ZlYXR1cmVzW2ldO1xuXG4gICAgdmFyIGVuZCA9IHRoaXMuX3BiZi5yZWFkVmFyaW50KCkgKyB0aGlzLl9wYmYucG9zO1xuICAgIHJldHVybiBuZXcgVmVjdG9yVGlsZUZlYXR1cmUodGhpcy5fcGJmLCBlbmQsIHRoaXMuZXh0ZW50LCB0aGlzLl9rZXlzLCB0aGlzLl92YWx1ZXMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFZlY3RvclRpbGVMYXllciA9IHJlcXVpcmUoJy4vdmVjdG9ydGlsZWxheWVyJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gVmVjdG9yVGlsZTtcblxuZnVuY3Rpb24gVmVjdG9yVGlsZShwYmYsIGVuZCkge1xuICAgIHRoaXMubGF5ZXJzID0gcGJmLnJlYWRGaWVsZHMocmVhZFRpbGUsIHt9LCBlbmQpO1xufVxuXG5mdW5jdGlvbiByZWFkVGlsZSh0YWcsIGxheWVycywgcGJmKSB7XG4gICAgaWYgKHRhZyA9PT0gMykge1xuICAgICAgICB2YXIgbGF5ZXIgPSBuZXcgVmVjdG9yVGlsZUxheWVyKHBiZiwgcGJmLnJlYWRWYXJpbnQoKSArIHBiZi5wb3MpO1xuICAgICAgICBpZiAobGF5ZXIubGVuZ3RoKSBsYXllcnNbbGF5ZXIubmFtZV0gPSBsYXllcjtcbiAgICB9XG59XG5cbiIsIm1vZHVsZS5leHBvcnRzLlZlY3RvclRpbGUgPSByZXF1aXJlKCcuL2xpYi92ZWN0b3J0aWxlLmpzJyk7XG5tb2R1bGUuZXhwb3J0cy5WZWN0b3JUaWxlRmVhdHVyZSA9IHJlcXVpcmUoJy4vbGliL3ZlY3RvcnRpbGVmZWF0dXJlLmpzJyk7XG5tb2R1bGUuZXhwb3J0cy5WZWN0b3JUaWxlTGF5ZXIgPSByZXF1aXJlKCcuL2xpYi92ZWN0b3J0aWxlbGF5ZXIuanMnKTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7RmlsbEV4dHJ1c2lvbkxheW91dEFycmF5fSBmcm9tICcuLi9hcnJheV90eXBlcyc7XG5cbmltcG9ydCB7bWVtYmVycyBhcyBsYXlvdXRBdHRyaWJ1dGVzfSBmcm9tICcuL2ZpbGxfZXh0cnVzaW9uX2F0dHJpYnV0ZXMnO1xuaW1wb3J0IFNlZ21lbnRWZWN0b3IgZnJvbSAnLi4vc2VnbWVudCc7XG5pbXBvcnQge1Byb2dyYW1Db25maWd1cmF0aW9uU2V0fSBmcm9tICcuLi9wcm9ncmFtX2NvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtUcmlhbmdsZUluZGV4QXJyYXl9IGZyb20gJy4uL2luZGV4X2FycmF5X3R5cGUnO1xuaW1wb3J0IEVYVEVOVCBmcm9tICcuLi9leHRlbnQnO1xuaW1wb3J0IGVhcmN1dCBmcm9tICdlYXJjdXQnO1xuaW1wb3J0IG12dCBmcm9tICdAbWFwYm94L3ZlY3Rvci10aWxlJztcbmNvbnN0IHZlY3RvclRpbGVGZWF0dXJlVHlwZXMgPSBtdnQuVmVjdG9yVGlsZUZlYXR1cmUudHlwZXM7XG5pbXBvcnQgY2xhc3NpZnlSaW5ncyBmcm9tICcuLi8uLi91dGlsL2NsYXNzaWZ5X3JpbmdzJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmNvbnN0IEVBUkNVVF9NQVhfUklOR1MgPSA1MDA7XG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuLi8uLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuaW1wb3J0IHtoYXNQYXR0ZXJuLCBhZGRQYXR0ZXJuRGVwZW5kZW5jaWVzfSBmcm9tICcuL3BhdHRlcm5fYnVja2V0X2ZlYXR1cmVzJztcbmltcG9ydCBsb2FkR2VvbWV0cnkgZnJvbSAnLi4vbG9hZF9nZW9tZXRyeSc7XG5pbXBvcnQgRXZhbHVhdGlvblBhcmFtZXRlcnMgZnJvbSAnLi4vLi4vc3R5bGUvZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcblxuaW1wb3J0IHR5cGUge0Nhbm9uaWNhbFRpbGVJRH0gZnJvbSAnLi4vLi4vc291cmNlL3RpbGVfaWQnO1xuaW1wb3J0IHR5cGUge1xuICAgIEJ1Y2tldCxcbiAgICBCdWNrZXRQYXJhbWV0ZXJzLFxuICAgIEJ1Y2tldEZlYXR1cmUsXG4gICAgSW5kZXhlZEZlYXR1cmUsXG4gICAgUG9wdWxhdGVQYXJhbWV0ZXJzXG59IGZyb20gJy4uL2J1Y2tldCc7XG5cbmltcG9ydCB0eXBlIEZpbGxFeHRydXNpb25TdHlsZUxheWVyIGZyb20gJy4uLy4uL3N0eWxlL3N0eWxlX2xheWVyL2ZpbGxfZXh0cnVzaW9uX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSBJbmRleEJ1ZmZlciBmcm9tICcuLi8uLi9nbC9pbmRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUgVmVydGV4QnVmZmVyIGZyb20gJy4uLy4uL2dsL3ZlcnRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSB7RmVhdHVyZVN0YXRlc30gZnJvbSAnLi4vLi4vc291cmNlL3NvdXJjZV9zdGF0ZSc7XG5pbXBvcnQgdHlwZSB7SW1hZ2VQb3NpdGlvbn0gZnJvbSAnLi4vLi4vcmVuZGVyL2ltYWdlX2F0bGFzJztcblxuY29uc3QgRkFDVE9SID0gTWF0aC5wb3coMiwgMTMpO1xuXG5mdW5jdGlvbiBhZGRWZXJ0ZXgodmVydGV4QXJyYXksIHgsIHksIG54LCBueSwgbnosIHQsIGUpIHtcbiAgICB2ZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhcbiAgICAgICAgLy8gYV9wb3NcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgLy8gYV9ub3JtYWxfZWQ6IDMtY29tcG9uZW50IG5vcm1hbCBhbmQgMS1jb21wb25lbnQgZWRnZWRpc3RhbmNlXG4gICAgICAgIE1hdGguZmxvb3IobnggKiBGQUNUT1IpICogMiArIHQsXG4gICAgICAgIG55ICogRkFDVE9SICogMixcbiAgICAgICAgbnogKiBGQUNUT1IgKiAyLFxuICAgICAgICAvLyBlZGdlZGlzdGFuY2UgKHVzZWQgZm9yIHdyYXBwaW5nIHBhdHRlcm5zIGFyb3VuZCBleHRydXNpb24gc2lkZXMpXG4gICAgICAgIE1hdGgucm91bmQoZSlcbiAgICApO1xufVxuXG5jbGFzcyBGaWxsRXh0cnVzaW9uQnVja2V0IGltcGxlbWVudHMgQnVja2V0IHtcbiAgICBpbmRleDogbnVtYmVyO1xuICAgIHpvb206IG51bWJlcjtcbiAgICBvdmVyc2NhbGluZzogbnVtYmVyO1xuICAgIGxheWVyczogQXJyYXk8RmlsbEV4dHJ1c2lvblN0eWxlTGF5ZXI+O1xuICAgIGxheWVySWRzOiBBcnJheTxzdHJpbmc+O1xuICAgIHN0YXRlRGVwZW5kZW50TGF5ZXJzOiBBcnJheTxGaWxsRXh0cnVzaW9uU3R5bGVMYXllcj47XG4gICAgc3RhdGVEZXBlbmRlbnRMYXllcklkczogQXJyYXk8c3RyaW5nPjtcblxuICAgIGxheW91dFZlcnRleEFycmF5OiBGaWxsRXh0cnVzaW9uTGF5b3V0QXJyYXk7XG4gICAgbGF5b3V0VmVydGV4QnVmZmVyOiBWZXJ0ZXhCdWZmZXI7XG5cbiAgICBpbmRleEFycmF5OiBUcmlhbmdsZUluZGV4QXJyYXk7XG4gICAgaW5kZXhCdWZmZXI6IEluZGV4QnVmZmVyO1xuXG4gICAgaGFzUGF0dGVybjogYm9vbGVhbjtcbiAgICBwcm9ncmFtQ29uZmlndXJhdGlvbnM6IFByb2dyYW1Db25maWd1cmF0aW9uU2V0PEZpbGxFeHRydXNpb25TdHlsZUxheWVyPjtcbiAgICBzZWdtZW50czogU2VnbWVudFZlY3RvcjtcbiAgICB1cGxvYWRlZDogYm9vbGVhbjtcbiAgICBmZWF0dXJlczogQXJyYXk8QnVja2V0RmVhdHVyZT47XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBCdWNrZXRQYXJhbWV0ZXJzPEZpbGxFeHRydXNpb25TdHlsZUxheWVyPikge1xuICAgICAgICB0aGlzLnpvb20gPSBvcHRpb25zLnpvb207XG4gICAgICAgIHRoaXMub3ZlcnNjYWxpbmcgPSBvcHRpb25zLm92ZXJzY2FsaW5nO1xuICAgICAgICB0aGlzLmxheWVycyA9IG9wdGlvbnMubGF5ZXJzO1xuICAgICAgICB0aGlzLmxheWVySWRzID0gdGhpcy5sYXllcnMubWFwKGxheWVyID0+IGxheWVyLmlkKTtcbiAgICAgICAgdGhpcy5pbmRleCA9IG9wdGlvbnMuaW5kZXg7XG4gICAgICAgIHRoaXMuaGFzUGF0dGVybiA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMubGF5b3V0VmVydGV4QXJyYXkgPSBuZXcgRmlsbEV4dHJ1c2lvbkxheW91dEFycmF5KCk7XG4gICAgICAgIHRoaXMuaW5kZXhBcnJheSA9IG5ldyBUcmlhbmdsZUluZGV4QXJyYXkoKTtcbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMgPSBuZXcgUHJvZ3JhbUNvbmZpZ3VyYXRpb25TZXQobGF5b3V0QXR0cmlidXRlcywgb3B0aW9ucy5sYXllcnMsIG9wdGlvbnMuem9vbSk7XG4gICAgICAgIHRoaXMuc2VnbWVudHMgPSBuZXcgU2VnbWVudFZlY3RvcigpO1xuICAgICAgICB0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJJZHMgPSB0aGlzLmxheWVycy5maWx0ZXIoKGwpID0+IGwuaXNTdGF0ZURlcGVuZGVudCgpKS5tYXAoKGwpID0+IGwuaWQpO1xuXG4gICAgfVxuXG4gICAgcG9wdWxhdGUoZmVhdHVyZXM6IEFycmF5PEluZGV4ZWRGZWF0dXJlPiwgb3B0aW9uczogUG9wdWxhdGVQYXJhbWV0ZXJzLCBjYW5vbmljYWw6IENhbm9uaWNhbFRpbGVJRCkge1xuICAgICAgICB0aGlzLmZlYXR1cmVzID0gW107XG4gICAgICAgIHRoaXMuaGFzUGF0dGVybiA9IGhhc1BhdHRlcm4oJ2ZpbGwtZXh0cnVzaW9uJywgdGhpcy5sYXllcnMsIG9wdGlvbnMpO1xuXG4gICAgICAgIGZvciAoY29uc3Qge2ZlYXR1cmUsIGlkLCBpbmRleCwgc291cmNlTGF5ZXJJbmRleH0gb2YgZmVhdHVyZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IG5lZWRHZW9tZXRyeSA9IHRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyLm5lZWRHZW9tZXRyeTtcbiAgICAgICAgICAgIGNvbnN0IGV2YWx1YXRpb25GZWF0dXJlID0ge3R5cGU6IGZlYXR1cmUudHlwZSxcbiAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBmZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICAgICAgICAgICAgZ2VvbWV0cnk6IG5lZWRHZW9tZXRyeSA/IGxvYWRHZW9tZXRyeShmZWF0dXJlKSA6IFtdfTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLmxheWVyc1swXS5fZmVhdHVyZUZpbHRlci5maWx0ZXIobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKHRoaXMuem9vbSksIGV2YWx1YXRpb25GZWF0dXJlLCBjYW5vbmljYWwpKSBjb250aW51ZTtcblxuICAgICAgICAgICAgY29uc3QgcGF0dGVybkZlYXR1cmU6IEJ1Y2tldEZlYXR1cmUgPSB7XG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgc291cmNlTGF5ZXJJbmRleCxcbiAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgICBnZW9tZXRyeTogbmVlZEdlb21ldHJ5ID8gZXZhbHVhdGlvbkZlYXR1cmUuZ2VvbWV0cnkgOiBsb2FkR2VvbWV0cnkoZmVhdHVyZSksXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczogZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAgIHR5cGU6IGZlYXR1cmUudHlwZSxcbiAgICAgICAgICAgICAgICBwYXR0ZXJuczoge31cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgZmVhdHVyZS5pZCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBwYXR0ZXJuRmVhdHVyZS5pZCA9IGZlYXR1cmUuaWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmhhc1BhdHRlcm4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZlYXR1cmVzLnB1c2goYWRkUGF0dGVybkRlcGVuZGVuY2llcygnZmlsbC1leHRydXNpb24nLCB0aGlzLmxheWVycywgcGF0dGVybkZlYXR1cmUsIHRoaXMuem9vbSwgb3B0aW9ucykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEZlYXR1cmUocGF0dGVybkZlYXR1cmUsIHBhdHRlcm5GZWF0dXJlLmdlb21ldHJ5LCBpbmRleCwgY2Fub25pY2FsLCB7fSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG9wdGlvbnMuZmVhdHVyZUluZGV4Lmluc2VydChmZWF0dXJlLCBwYXR0ZXJuRmVhdHVyZS5nZW9tZXRyeSwgaW5kZXgsIHNvdXJjZUxheWVySW5kZXgsIHRoaXMuaW5kZXgsIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkRmVhdHVyZXMob3B0aW9uczogUG9wdWxhdGVQYXJhbWV0ZXJzLCBjYW5vbmljYWw6IENhbm9uaWNhbFRpbGVJRCwgaW1hZ2VQb3NpdGlvbnM6IHtbXzogc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0pIHtcbiAgICAgICAgZm9yIChjb25zdCBmZWF0dXJlIG9mIHRoaXMuZmVhdHVyZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHtnZW9tZXRyeX0gPSBmZWF0dXJlO1xuICAgICAgICAgICAgdGhpcy5hZGRGZWF0dXJlKGZlYXR1cmUsIGdlb21ldHJ5LCBmZWF0dXJlLmluZGV4LCBjYW5vbmljYWwsIGltYWdlUG9zaXRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZShzdGF0ZXM6IEZlYXR1cmVTdGF0ZXMsIHZ0TGF5ZXI6IFZlY3RvclRpbGVMYXllciwgaW1hZ2VQb3NpdGlvbnM6IHtbXzogc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0pIHtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJzLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGRhdGVQYWludEFycmF5cyhzdGF0ZXMsIHZ0TGF5ZXIsIHRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcnMsIGltYWdlUG9zaXRpb25zKTtcbiAgICB9XG5cbiAgICBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgdXBsb2FkUGVuZGluZygpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnVwbG9hZGVkIHx8IHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkO1xuICAgIH1cblxuICAgIHVwbG9hZChjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgIGlmICghdGhpcy51cGxvYWRlZCkge1xuICAgICAgICAgICAgdGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmxheW91dFZlcnRleEFycmF5LCBsYXlvdXRBdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBsb2FkKGNvbnRleHQpO1xuICAgICAgICB0aGlzLnVwbG9hZGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBpZiAoIXRoaXMubGF5b3V0VmVydGV4QnVmZmVyKSByZXR1cm47XG4gICAgICAgIHRoaXMubGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5zZWdtZW50cy5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgYWRkRmVhdHVyZShmZWF0dXJlOiBCdWNrZXRGZWF0dXJlLCBnZW9tZXRyeTogQXJyYXk8QXJyYXk8UG9pbnQ+PiwgaW5kZXg6IG51bWJlciwgY2Fub25pY2FsOiBDYW5vbmljYWxUaWxlSUQsIGltYWdlUG9zaXRpb25zOiB7W186IHN0cmluZ106IEltYWdlUG9zaXRpb259KSB7XG4gICAgICAgIGZvciAoY29uc3QgcG9seWdvbiBvZiBjbGFzc2lmeVJpbmdzKGdlb21ldHJ5LCBFQVJDVVRfTUFYX1JJTkdTKSkge1xuICAgICAgICAgICAgbGV0IG51bVZlcnRpY2VzID0gMDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmluZyBvZiBwb2x5Z29uKSB7XG4gICAgICAgICAgICAgICAgbnVtVmVydGljZXMgKz0gcmluZy5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgc2VnbWVudCA9IHRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoNCwgdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgdGhpcy5pbmRleEFycmF5KTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCByaW5nIG9mIHBvbHlnb24pIHtcbiAgICAgICAgICAgICAgICBpZiAocmluZy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGlzRW50aXJlbHlPdXRzaWRlKHJpbmcpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBlZGdlRGlzdGFuY2UgPSAwO1xuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCByaW5nLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHAxID0gcmluZ1twXTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAocCA+PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwMiA9IHJpbmdbcCAtIDFdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQm91bmRhcnlFZGdlKHAxLCBwMikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VnbWVudC52ZXJ0ZXhMZW5ndGggKyA0ID4gU2VnbWVudFZlY3Rvci5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50ID0gdGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCg0LCB0aGlzLmxheW91dFZlcnRleEFycmF5LCB0aGlzLmluZGV4QXJyYXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBlcnAgPSBwMS5zdWIocDIpLl9wZXJwKCkuX3VuaXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXN0ID0gcDIuZGlzdChwMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVkZ2VEaXN0YW5jZSArIGRpc3QgPiAzMjc2OCkgZWRnZURpc3RhbmNlID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFZlcnRleCh0aGlzLmxheW91dFZlcnRleEFycmF5LCBwMS54LCBwMS55LCBwZXJwLngsIHBlcnAueSwgMCwgMCwgZWRnZURpc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRWZXJ0ZXgodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgcDEueCwgcDEueSwgcGVycC54LCBwZXJwLnksIDAsIDEsIGVkZ2VEaXN0YW5jZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlRGlzdGFuY2UgKz0gZGlzdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFZlcnRleCh0aGlzLmxheW91dFZlcnRleEFycmF5LCBwMi54LCBwMi55LCBwZXJwLngsIHBlcnAueSwgMCwgMCwgZWRnZURpc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRWZXJ0ZXgodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgcDIueCwgcDIueSwgcGVycC54LCBwZXJwLnksIDAsIDEsIGVkZ2VEaXN0YW5jZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib3R0b21SaWdodCA9IHNlZ21lbnQudmVydGV4TGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gw6LClMKMw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKQXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gw6LClMKCIDAgIDEgw6LClMKCIENvdW50ZXItY2xvY2t3aXNlIHdpbmRpbmcgb3JkZXIuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gw6LClMKCICAgICAgw6LClMKCIFRyaWFuZ2xlIDE6IDAgPT4gMiA9PiAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gw6LClMKCIDIgIDMgw6LClMKCIFRyaWFuZ2xlIDI6IDEgPT4gMiA9PiAzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gw6LClMKUw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKAw6LClMKYXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleEFycmF5LmVtcGxhY2VCYWNrKGJvdHRvbVJpZ2h0LCBib3R0b21SaWdodCArIDIsIGJvdHRvbVJpZ2h0ICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleEFycmF5LmVtcGxhY2VCYWNrKGJvdHRvbVJpZ2h0ICsgMSwgYm90dG9tUmlnaHQgKyAyLCBib3R0b21SaWdodCArIDMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudC52ZXJ0ZXhMZW5ndGggKz0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50LnByaW1pdGl2ZUxlbmd0aCArPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2VnbWVudC52ZXJ0ZXhMZW5ndGggKyBudW1WZXJ0aWNlcyA+IFNlZ21lbnRWZWN0b3IuTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEgpIHtcbiAgICAgICAgICAgICAgICBzZWdtZW50ID0gdGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudChudW1WZXJ0aWNlcywgdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgdGhpcy5pbmRleEFycmF5KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy9Pbmx5IHRyaWFuZ3VsYXRlIGFuZCBkcmF3IHRoZSBhcmVhIG9mIHRoZSBmZWF0dXJlIGlmIGl0IGlzIGEgcG9seWdvblxuICAgICAgICAgICAgLy9PdGhlciBmZWF0dXJlIHR5cGVzIChlLmcuIExpbmVTdHJpbmcpIGRvIG5vdCBoYXZlIGFyZWEsIHNvIHRyaWFuZ3VsYXRpb24gaXMgcG9pbnRsZXNzIC8gdW5kZWZpbmVkXG4gICAgICAgICAgICBpZiAodmVjdG9yVGlsZUZlYXR1cmVUeXBlc1tmZWF0dXJlLnR5cGVdICE9PSAnUG9seWdvbicpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgICAgIGNvbnN0IGZsYXR0ZW5lZCA9IFtdO1xuICAgICAgICAgICAgY29uc3QgaG9sZUluZGljZXMgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IHRyaWFuZ2xlSW5kZXggPSBzZWdtZW50LnZlcnRleExlbmd0aDtcblxuICAgICAgICAgICAgZm9yIChjb25zdCByaW5nIG9mIHBvbHlnb24pIHtcbiAgICAgICAgICAgICAgICBpZiAocmluZy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJpbmcgIT09IHBvbHlnb25bMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgaG9sZUluZGljZXMucHVzaChmbGF0dGVuZWQubGVuZ3RoIC8gMik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHAgPSByaW5nW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgIGFkZFZlcnRleCh0aGlzLmxheW91dFZlcnRleEFycmF5LCBwLngsIHAueSwgMCwgMCwgMSwgMSwgMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgZmxhdHRlbmVkLnB1c2gocC54KTtcbiAgICAgICAgICAgICAgICAgICAgZmxhdHRlbmVkLnB1c2gocC55KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGluZGljZXMgPSBlYXJjdXQoZmxhdHRlbmVkLCBob2xlSW5kaWNlcyk7XG4gICAgICAgICAgICBhc3NlcnQoaW5kaWNlcy5sZW5ndGggJSAzID09PSAwKTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpbmRpY2VzLmxlbmd0aDsgaiArPSAzKSB7XG4gICAgICAgICAgICAgICAgLy8gQ291bnRlci1jbG9ja3dpc2Ugd2luZGluZyBvcmRlci5cbiAgICAgICAgICAgICAgICB0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2soXG4gICAgICAgICAgICAgICAgICAgIHRyaWFuZ2xlSW5kZXggKyBpbmRpY2VzW2pdLFxuICAgICAgICAgICAgICAgICAgICB0cmlhbmdsZUluZGV4ICsgaW5kaWNlc1tqICsgMl0sXG4gICAgICAgICAgICAgICAgICAgIHRyaWFuZ2xlSW5kZXggKyBpbmRpY2VzW2ogKyAxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNlZ21lbnQucHJpbWl0aXZlTGVuZ3RoICs9IGluZGljZXMubGVuZ3RoIC8gMztcbiAgICAgICAgICAgIHNlZ21lbnQudmVydGV4TGVuZ3RoICs9IG51bVZlcnRpY2VzO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMucG9wdWxhdGVQYWludEFycmF5cyh0aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCwgZmVhdHVyZSwgaW5kZXgsIGltYWdlUG9zaXRpb25zLCBjYW5vbmljYWwpO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ0ZpbGxFeHRydXNpb25CdWNrZXQnLCBGaWxsRXh0cnVzaW9uQnVja2V0LCB7b21pdDogWydsYXllcnMnLCAnZmVhdHVyZXMnXX0pO1xuXG5leHBvcnQgZGVmYXVsdCBGaWxsRXh0cnVzaW9uQnVja2V0O1xuXG5mdW5jdGlvbiBpc0JvdW5kYXJ5RWRnZShwMSwgcDIpIHtcbiAgICByZXR1cm4gKHAxLnggPT09IHAyLnggJiYgKHAxLnggPCAwIHx8IHAxLnggPiBFWFRFTlQpKSB8fFxuICAgICAgICAocDEueSA9PT0gcDIueSAmJiAocDEueSA8IDAgfHwgcDEueSA+IEVYVEVOVCkpO1xufVxuXG5mdW5jdGlvbiBpc0VudGlyZWx5T3V0c2lkZShyaW5nKSB7XG4gICAgcmV0dXJuIHJpbmcuZXZlcnkocCA9PiBwLnggPCAwKSB8fFxuICAgICAgICByaW5nLmV2ZXJ5KHAgPT4gcC54ID4gRVhURU5UKSB8fFxuICAgICAgICByaW5nLmV2ZXJ5KHAgPT4gcC55IDwgMCkgfHxcbiAgICAgICAgcmluZy5ldmVyeShwID0+IHAueSA+IEVYVEVOVCk7XG59XG4iLCIvLyBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkLiBFZGl0IGJ1aWxkL2dlbmVyYXRlLXN0eWxlLWNvZGUuanMsIHRoZW4gcnVuIGB5YXJuIHJ1biBjb2RlZ2VuYC5cbi8vIEBmbG93XG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG5pbXBvcnQgc3R5bGVTcGVjIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvcmVmZXJlbmNlL2xhdGVzdCc7XG5cbmltcG9ydCB7XG4gICAgUHJvcGVydGllcyxcbiAgICBEYXRhQ29uc3RhbnRQcm9wZXJ0eSxcbiAgICBEYXRhRHJpdmVuUHJvcGVydHksXG4gICAgQ3Jvc3NGYWRlZERhdGFEcml2ZW5Qcm9wZXJ0eSxcbiAgICBDcm9zc0ZhZGVkUHJvcGVydHksXG4gICAgQ29sb3JSYW1wUHJvcGVydHlcbn0gZnJvbSAnLi4vcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIENvbG9yIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5cbmltcG9ydCB0eXBlIEZvcm1hdHRlZCBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvZm9ybWF0dGVkJztcblxuaW1wb3J0IHR5cGUgUmVzb2x2ZWRJbWFnZSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvcmVzb2x2ZWRfaW1hZ2UnO1xuXG5cbmV4cG9ydCB0eXBlIFBhaW50UHJvcHMgPSB7fFxuICAgIFwiZmlsbC1leHRydXNpb24tb3BhY2l0eVwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiZmlsbC1leHRydXNpb24tY29sb3JcIjogRGF0YURyaXZlblByb3BlcnR5PENvbG9yPixcbiAgICBcImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZVwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxbbnVtYmVyLCBudW1iZXJdPixcbiAgICBcImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZS1hbmNob3JcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJtYXBcIiB8IFwidmlld3BvcnRcIj4sXG4gICAgXCJmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuXCI6IENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHk8UmVzb2x2ZWRJbWFnZT4sXG4gICAgXCJmaWxsLWV4dHJ1c2lvbi1oZWlnaHRcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJmaWxsLWV4dHJ1c2lvbi1iYXNlXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiZmlsbC1leHRydXNpb24tdmVydGljYWwtZ3JhZGllbnRcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8Ym9vbGVhbj4sXG58fTtcblxuY29uc3QgcGFpbnQ6IFByb3BlcnRpZXM8UGFpbnRQcm9wcz4gPSBuZXcgUHJvcGVydGllcyh7XG4gICAgXCJmaWxsLWV4dHJ1c2lvbi1vcGFjaXR5XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9maWxsLWV4dHJ1c2lvblwiXVtcImZpbGwtZXh0cnVzaW9uLW9wYWNpdHlcIl0pLFxuICAgIFwiZmlsbC1leHRydXNpb24tY29sb3JcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9maWxsLWV4dHJ1c2lvblwiXVtcImZpbGwtZXh0cnVzaW9uLWNvbG9yXCJdKSxcbiAgICBcImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZVwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbC1leHRydXNpb25cIl1bXCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGVcIl0pLFxuICAgIFwiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlLWFuY2hvclwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbC1leHRydXNpb25cIl1bXCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUtYW5jaG9yXCJdKSxcbiAgICBcImZpbGwtZXh0cnVzaW9uLXBhdHRlcm5cIjogbmV3IENyb3NzRmFkZWREYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfZmlsbC1leHRydXNpb25cIl1bXCJmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuXCJdKSxcbiAgICBcImZpbGwtZXh0cnVzaW9uLWhlaWdodFwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2ZpbGwtZXh0cnVzaW9uXCJdW1wiZmlsbC1leHRydXNpb24taGVpZ2h0XCJdKSxcbiAgICBcImZpbGwtZXh0cnVzaW9uLWJhc2VcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9maWxsLWV4dHJ1c2lvblwiXVtcImZpbGwtZXh0cnVzaW9uLWJhc2VcIl0pLFxuICAgIFwiZmlsbC1leHRydXNpb24tdmVydGljYWwtZ3JhZGllbnRcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2ZpbGwtZXh0cnVzaW9uXCJdW1wiZmlsbC1leHRydXNpb24tdmVydGljYWwtZ3JhZGllbnRcIl0pLFxufSk7XG5cbi8vIE5vdGU6IHdpdGhvdXQgYWRkaW5nIHRoZSBleHBsaWNpdCB0eXBlIGFubm90YXRpb24sIEZsb3cgaW5mZXJzIHdlYWtlciB0eXBlc1xuLy8gZm9yIHRoZXNlIG9iamVjdHMgZnJvbSB0aGVpciB1c2UgaW4gdGhlIGNvbnN0cnVjdG9yIHRvIFN0eWxlTGF5ZXIsIGFzXG4vLyB7bGF5b3V0PzogUHJvcGVydGllczwuLi4+LCBwYWludDogUHJvcGVydGllczwuLi4+fVxuZXhwb3J0IGRlZmF1bHQgKHsgcGFpbnQgfTogJEV4YWN0PHtcbiAgcGFpbnQ6IFByb3BlcnRpZXM8UGFpbnRQcm9wcz5cbn0+KTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlX2xheWVyJztcblxuaW1wb3J0IEZpbGxFeHRydXNpb25CdWNrZXQgZnJvbSAnLi4vLi4vZGF0YS9idWNrZXQvZmlsbF9leHRydXNpb25fYnVja2V0JztcbmltcG9ydCB7cG9seWdvbkludGVyc2VjdHNQb2x5Z29uLCBwb2x5Z29uSW50ZXJzZWN0c011bHRpUG9seWdvbn0gZnJvbSAnLi4vLi4vdXRpbC9pbnRlcnNlY3Rpb25fdGVzdHMnO1xuaW1wb3J0IHt0cmFuc2xhdGVEaXN0YW5jZSwgdHJhbnNsYXRlfSBmcm9tICcuLi9xdWVyeV91dGlscyc7XG5pbXBvcnQgcHJvcGVydGllcyBmcm9tICcuL2ZpbGxfZXh0cnVzaW9uX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuaW1wb3J0IHtUcmFuc2l0aW9uYWJsZSwgVHJhbnNpdGlvbmluZywgUG9zc2libHlFdmFsdWF0ZWR9IGZyb20gJy4uL3Byb3BlcnRpZXMnO1xuaW1wb3J0IHt2ZWM0fSBmcm9tICdnbC1tYXRyaXgnO1xuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG5pbXBvcnQgdHlwZSB7RmVhdHVyZVN0YXRlfSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUge0J1Y2tldFBhcmFtZXRlcnN9IGZyb20gJy4uLy4uL2RhdGEvYnVja2V0JztcbmltcG9ydCB0eXBlIHtQYWludFByb3BzfSBmcm9tICcuL2ZpbGxfZXh0cnVzaW9uX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuaW1wb3J0IHR5cGUgVHJhbnNmb3JtIGZyb20gJy4uLy4uL2dlby90cmFuc2Zvcm0nO1xuaW1wb3J0IHR5cGUge0xheWVyU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmNsYXNzIEZpbGxFeHRydXNpb25TdHlsZUxheWVyIGV4dGVuZHMgU3R5bGVMYXllciB7XG4gICAgX3RyYW5zaXRpb25hYmxlUGFpbnQ6IFRyYW5zaXRpb25hYmxlPFBhaW50UHJvcHM+O1xuICAgIF90cmFuc2l0aW9uaW5nUGFpbnQ6IFRyYW5zaXRpb25pbmc8UGFpbnRQcm9wcz47XG4gICAgcGFpbnQ6IFBvc3NpYmx5RXZhbHVhdGVkPFBhaW50UHJvcHM+O1xuXG4gICAgY29uc3RydWN0b3IobGF5ZXI6IExheWVyU3BlY2lmaWNhdGlvbikge1xuICAgICAgICBzdXBlcihsYXllciwgcHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgY3JlYXRlQnVja2V0KHBhcmFtZXRlcnM6IEJ1Y2tldFBhcmFtZXRlcnM8RmlsbEV4dHJ1c2lvblN0eWxlTGF5ZXI+KSB7XG4gICAgICAgIHJldHVybiBuZXcgRmlsbEV4dHJ1c2lvbkJ1Y2tldChwYXJhbWV0ZXJzKTtcbiAgICB9XG5cbiAgICBxdWVyeVJhZGl1cygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdHJhbnNsYXRlRGlzdGFuY2UodGhpcy5wYWludC5nZXQoJ2ZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZScpKTtcbiAgICB9XG5cbiAgICBpczNEKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBxdWVyeUludGVyc2VjdHNGZWF0dXJlKHF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmU6IFZlY3RvclRpbGVGZWF0dXJlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZVN0YXRlOiBGZWF0dXJlU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeTogQXJyYXk8QXJyYXk8UG9pbnQ+PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHpvb206IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxzVG9UaWxlVW5pdHM6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsUG9zTWF0cml4OiBGbG9hdDMyQXJyYXkpOiBib29sZWFuIHwgbnVtYmVyIHtcblxuICAgICAgICBjb25zdCB0cmFuc2xhdGVkUG9seWdvbiA9IHRyYW5zbGF0ZShxdWVyeUdlb21ldHJ5LFxuICAgICAgICAgICAgdGhpcy5wYWludC5nZXQoJ2ZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZScpLFxuICAgICAgICAgICAgdGhpcy5wYWludC5nZXQoJ2ZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZS1hbmNob3InKSxcbiAgICAgICAgICAgIHRyYW5zZm9ybS5hbmdsZSwgcGl4ZWxzVG9UaWxlVW5pdHMpO1xuXG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMucGFpbnQuZ2V0KCdmaWxsLWV4dHJ1c2lvbi1oZWlnaHQnKS5ldmFsdWF0ZShmZWF0dXJlLCBmZWF0dXJlU3RhdGUpO1xuICAgICAgICBjb25zdCBiYXNlID0gdGhpcy5wYWludC5nZXQoJ2ZpbGwtZXh0cnVzaW9uLWJhc2UnKS5ldmFsdWF0ZShmZWF0dXJlLCBmZWF0dXJlU3RhdGUpO1xuXG4gICAgICAgIGNvbnN0IHByb2plY3RlZFF1ZXJ5R2VvbWV0cnkgPSBwcm9qZWN0UXVlcnlHZW9tZXRyeSh0cmFuc2xhdGVkUG9seWdvbiwgcGl4ZWxQb3NNYXRyaXgsIHRyYW5zZm9ybSwgMCk7XG5cbiAgICAgICAgY29uc3QgcHJvamVjdGVkID0gcHJvamVjdEV4dHJ1c2lvbihnZW9tZXRyeSwgYmFzZSwgaGVpZ2h0LCBwaXhlbFBvc01hdHJpeCk7XG4gICAgICAgIGNvbnN0IHByb2plY3RlZEJhc2UgPSBwcm9qZWN0ZWRbMF07XG4gICAgICAgIGNvbnN0IHByb2plY3RlZFRvcCA9IHByb2plY3RlZFsxXTtcbiAgICAgICAgcmV0dXJuIGNoZWNrSW50ZXJzZWN0aW9uKHByb2plY3RlZEJhc2UsIHByb2plY3RlZFRvcCwgcHJvamVjdGVkUXVlcnlHZW9tZXRyeSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkb3QoYSwgYikge1xuICAgIHJldHVybiBhLnggKiBiLnggKyBhLnkgKiBiLnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnRlcnNlY3Rpb25EaXN0YW5jZShwcm9qZWN0ZWRRdWVyeUdlb21ldHJ5OiBBcnJheTxQb2ludD4sIHByb2plY3RlZEZhY2U6IEFycmF5PFBvaW50Pikge1xuXG4gICAgaWYgKHByb2plY3RlZFF1ZXJ5R2VvbWV0cnkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIC8vIEZvciBwb2ludCBxdWVyaWVzIGNhbGN1bGF0ZSB0aGUgeiBhdCB3aGljaCB0aGUgcG9pbnQgaW50ZXJzZWN0cyB0aGUgZmFjZVxuICAgICAgICAvLyB1c2luZyBiYXJ5Y2VudHJpYyBjb29yZGluYXRlcy5cblxuICAgICAgICAvLyBGaW5kIHRoZSBiYXJ5Y2VudHJpYyBjb29yZGluYXRlcyBvZiB0aGUgcHJvamVjdGVkIHBvaW50IHdpdGhpbiB0aGUgZmlyc3RcbiAgICAgICAgLy8gdHJpYW5nbGUgb2YgdGhlIGZhY2UsIHVzaW5nIG9ubHkgdGhlIHh5IHBsYW5lLiBJdCBkb2Vzbid0IG1hdHRlciBpZiB0aGVcbiAgICAgICAgLy8gcG9pbnQgaXMgb3V0c2lkZSB0aGUgZmlyc3QgdHJpYW5nbGUgYmVjYXVzZSBhbGwgdGhlIHRyaWFuZ2xlcyBpbiB0aGUgZmFjZVxuICAgICAgICAvLyBhcmUgaW4gdGhlIHNhbWUgcGxhbmUuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIENoZWNrIHdoZXRoZXIgcG9pbnRzIGFyZSBjb2luY2lkZW50IGFuZCB1c2Ugb3RoZXIgcG9pbnRzIGlmIHRoZXkgYXJlLlxuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIGNvbnN0IGEgPSBwcm9qZWN0ZWRGYWNlW2krK107XG4gICAgICAgIGxldCBiO1xuICAgICAgICB3aGlsZSAoIWIgfHwgYS5lcXVhbHMoYikpIHtcbiAgICAgICAgICAgIGIgPSBwcm9qZWN0ZWRGYWNlW2krK107XG4gICAgICAgICAgICBpZiAoIWIpIHJldHVybiBJbmZpbml0eTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIExvb3AgdW50aWwgcG9pbnQgYGNgIGlzIG5vdCBjb2xpbmVhciB3aXRoIHBvaW50cyBgYWAgYW5kIGBiYC5cbiAgICAgICAgZm9yICg7IGkgPCBwcm9qZWN0ZWRGYWNlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gcHJvamVjdGVkRmFjZVtpXTtcblxuICAgICAgICAgICAgY29uc3QgcCA9IHByb2plY3RlZFF1ZXJ5R2VvbWV0cnlbMF07XG5cbiAgICAgICAgICAgIGNvbnN0IGFiID0gYi5zdWIoYSk7XG4gICAgICAgICAgICBjb25zdCBhYyA9IGMuc3ViKGEpO1xuICAgICAgICAgICAgY29uc3QgYXAgPSBwLnN1YihhKTtcblxuICAgICAgICAgICAgY29uc3QgZG90QUJBQiA9IGRvdChhYiwgYWIpO1xuICAgICAgICAgICAgY29uc3QgZG90QUJBQyA9IGRvdChhYiwgYWMpO1xuICAgICAgICAgICAgY29uc3QgZG90QUNBQyA9IGRvdChhYywgYWMpO1xuICAgICAgICAgICAgY29uc3QgZG90QVBBQiA9IGRvdChhcCwgYWIpO1xuICAgICAgICAgICAgY29uc3QgZG90QVBBQyA9IGRvdChhcCwgYWMpO1xuICAgICAgICAgICAgY29uc3QgZGVub20gPSBkb3RBQkFCICogZG90QUNBQyAtIGRvdEFCQUMgKiBkb3RBQkFDO1xuXG4gICAgICAgICAgICBjb25zdCB2ID0gKGRvdEFDQUMgKiBkb3RBUEFCIC0gZG90QUJBQyAqIGRvdEFQQUMpIC8gZGVub207XG4gICAgICAgICAgICBjb25zdCB3ID0gKGRvdEFCQUIgKiBkb3RBUEFDIC0gZG90QUJBQyAqIGRvdEFQQUIpIC8gZGVub207XG4gICAgICAgICAgICBjb25zdCB1ID0gMSAtIHYgLSB3O1xuXG4gICAgICAgICAgICAvLyBVc2UgdGhlIGJhcnljZW50cmljIHdlaWdodGluZyBhbG9uZyB3aXRoIHRoZSBvcmlnaW5hbCB0cmlhbmdsZSB6IGNvb3JkaW5hdGVzIHRvIGdldCB0aGUgcG9pbnQgb2YgaW50ZXJzZWN0aW9uLlxuICAgICAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBhLnogKiB1ICsgYi56ICogdiArIGMueiAqIHc7XG5cbiAgICAgICAgICAgIGlmIChpc0Zpbml0ZShkaXN0YW5jZSkpIHJldHVybiBkaXN0YW5jZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBJbmZpbml0eTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoZSBjb3VudHMgYXMgY2xvc2VzdCBpcyBsZXNzIGNsZWFyIHdoZW4gdGhlIHF1ZXJ5IGlzIGEgYm94LiBUaGlzXG4gICAgICAgIC8vIHJldHVybnMgdGhlIGRpc3RhbmNlIHRvIHRoZSBuZWFyZXN0IHBvaW50IG9uIHRoZSBmYWNlLCB3aGV0aGVyIGl0IGlzXG4gICAgICAgIC8vIHdpdGhpbiB0aGUgcXVlcnkgb3Igbm90LiBJdCBjb3VsZCBiZSBtb3JlIGNvcnJlY3QgdG8gcmV0dXJuIHRoZVxuICAgICAgICAvLyBkaXN0YW5jZSB0byB0aGUgY2xvc2VzdCBwb2ludCB3aXRoaW4gdGhlIHF1ZXJ5IGJveCBidXQgdGhpcyB3b3VsZCBiZVxuICAgICAgICAvLyBtb3JlIGNvbXBsaWNhdGVkIGFuZCBleHBlbnNpdmUgdG8gY2FsY3VsYXRlIHdpdGggbGl0dGxlIGJlbmVmaXQuXG4gICAgICAgIGxldCBjbG9zZXN0RGlzdGFuY2UgPSBJbmZpbml0eTtcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIHByb2plY3RlZEZhY2UpIHtcbiAgICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZSA9IE1hdGgubWluKGNsb3Nlc3REaXN0YW5jZSwgcC56KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvc2VzdERpc3RhbmNlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tJbnRlcnNlY3Rpb24ocHJvamVjdGVkQmFzZTogQXJyYXk8UG9pbnQ+LCBwcm9qZWN0ZWRUb3A6IEFycmF5PFBvaW50PiwgcHJvamVjdGVkUXVlcnlHZW9tZXRyeTogQXJyYXk8UG9pbnQ+KSB7XG4gICAgbGV0IGNsb3Nlc3REaXN0YW5jZSA9IEluZmluaXR5O1xuXG4gICAgaWYgKHBvbHlnb25JbnRlcnNlY3RzTXVsdGlQb2x5Z29uKHByb2plY3RlZFF1ZXJ5R2VvbWV0cnksIHByb2plY3RlZFRvcCkpIHtcbiAgICAgICAgY2xvc2VzdERpc3RhbmNlID0gZ2V0SW50ZXJzZWN0aW9uRGlzdGFuY2UocHJvamVjdGVkUXVlcnlHZW9tZXRyeSwgcHJvamVjdGVkVG9wWzBdKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCByID0gMDsgciA8IHByb2plY3RlZFRvcC5sZW5ndGg7IHIrKykge1xuICAgICAgICBjb25zdCByaW5nVG9wID0gcHJvamVjdGVkVG9wW3JdO1xuICAgICAgICBjb25zdCByaW5nQmFzZSA9IHByb2plY3RlZEJhc2Vbcl07XG4gICAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgcmluZ1RvcC5sZW5ndGggLSAxOyBwKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHRvcEEgPSByaW5nVG9wW3BdO1xuICAgICAgICAgICAgY29uc3QgdG9wQiA9IHJpbmdUb3BbcCArIDFdO1xuICAgICAgICAgICAgY29uc3QgYmFzZUEgPSByaW5nQmFzZVtwXTtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VCID0gcmluZ0Jhc2VbcCArIDFdO1xuICAgICAgICAgICAgY29uc3QgZmFjZSA9IFt0b3BBLCB0b3BCLCBiYXNlQiwgYmFzZUEsIHRvcEFdO1xuICAgICAgICAgICAgaWYgKHBvbHlnb25JbnRlcnNlY3RzUG9seWdvbihwcm9qZWN0ZWRRdWVyeUdlb21ldHJ5LCBmYWNlKSkge1xuICAgICAgICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZSA9IE1hdGgubWluKGNsb3Nlc3REaXN0YW5jZSwgZ2V0SW50ZXJzZWN0aW9uRGlzdGFuY2UocHJvamVjdGVkUXVlcnlHZW9tZXRyeSwgZmFjZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsb3Nlc3REaXN0YW5jZSA9PT0gSW5maW5pdHkgPyBmYWxzZSA6IGNsb3Nlc3REaXN0YW5jZTtcbn1cblxuLypcbiAqIFByb2plY3QgdGhlIGdlb21ldHJ5IHVzaW5nIG1hdHJpeCBgbWAuIFRoaXMgaXMgZXNzZW50aWFsbHkgZG9pbmdcbiAqIGB2ZWM0LnRyYW5zZm9ybU1hdDQoW10sIFtwLngsIHAueSwgeiwgMV0sIG0pYCBidXQgdGhlIG11bHRpcGxpY2F0aW9uXG4gKiBpcyBpbmxpbmVkIHNvIHRoYXQgcGFydHMgb2YgdGhlIHByb2plY3Rpb24gdGhhdCBhcmUgdGhlIHNhbWUgYWNyb3NzXG4gKiBkaWZmZXJlbnQgcG9pbnRzIGNhbiBvbmx5IGJlIGRvbmUgb25jZS4gVGhpcyBwcm9kdWNlZCBhIG1lYXN1cmFibGVcbiAqIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50LlxuICovXG5mdW5jdGlvbiBwcm9qZWN0RXh0cnVzaW9uKGdlb21ldHJ5OiBBcnJheTxBcnJheTxQb2ludD4+LCB6QmFzZTogbnVtYmVyLCB6VG9wOiBudW1iZXIsIG06IEZsb2F0MzJBcnJheSkge1xuICAgIGNvbnN0IHByb2plY3RlZEJhc2UgPSBbXTtcbiAgICBjb25zdCBwcm9qZWN0ZWRUb3AgPSBbXTtcblxuICAgIGNvbnN0IGJhc2VYWiA9IG1bOF0gKiB6QmFzZTtcbiAgICBjb25zdCBiYXNlWVogPSBtWzldICogekJhc2U7XG4gICAgY29uc3QgYmFzZVpaID0gbVsxMF0gKiB6QmFzZTtcbiAgICBjb25zdCBiYXNlV1ogPSBtWzExXSAqIHpCYXNlO1xuICAgIGNvbnN0IHRvcFhaID0gbVs4XSAqIHpUb3A7XG4gICAgY29uc3QgdG9wWVogPSBtWzldICogelRvcDtcbiAgICBjb25zdCB0b3BaWiA9IG1bMTBdICogelRvcDtcbiAgICBjb25zdCB0b3BXWiA9IG1bMTFdICogelRvcDtcblxuICAgIGZvciAoY29uc3QgciBvZiBnZW9tZXRyeSkge1xuICAgICAgICBjb25zdCByaW5nQmFzZSA9IFtdO1xuICAgICAgICBjb25zdCByaW5nVG9wID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiByKSB7XG4gICAgICAgICAgICBjb25zdCB4ID0gcC54O1xuICAgICAgICAgICAgY29uc3QgeSA9IHAueTtcblxuICAgICAgICAgICAgY29uc3Qgc1ggPSBtWzBdICogeCArIG1bNF0gKiB5ICsgbVsxMl07XG4gICAgICAgICAgICBjb25zdCBzWSA9IG1bMV0gKiB4ICsgbVs1XSAqIHkgKyBtWzEzXTtcbiAgICAgICAgICAgIGNvbnN0IHNaID0gbVsyXSAqIHggKyBtWzZdICogeSArIG1bMTRdO1xuICAgICAgICAgICAgY29uc3Qgc1cgPSBtWzNdICogeCArIG1bN10gKiB5ICsgbVsxNV07XG5cbiAgICAgICAgICAgIGNvbnN0IGJhc2VYID0gc1ggKyBiYXNlWFo7XG4gICAgICAgICAgICBjb25zdCBiYXNlWSA9IHNZICsgYmFzZVlaO1xuICAgICAgICAgICAgY29uc3QgYmFzZVogPSBzWiArIGJhc2VaWjtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VXID0gc1cgKyBiYXNlV1o7XG5cbiAgICAgICAgICAgIGNvbnN0IHRvcFggPSBzWCArIHRvcFhaO1xuICAgICAgICAgICAgY29uc3QgdG9wWSA9IHNZICsgdG9wWVo7XG4gICAgICAgICAgICBjb25zdCB0b3BaID0gc1ogKyB0b3BaWjtcbiAgICAgICAgICAgIGNvbnN0IHRvcFcgPSBzVyArIHRvcFdaO1xuXG4gICAgICAgICAgICBjb25zdCBiID0gbmV3IFBvaW50KGJhc2VYIC8gYmFzZVcsIGJhc2VZIC8gYmFzZVcpO1xuICAgICAgICAgICAgYi56ID0gYmFzZVogLyBiYXNlVztcbiAgICAgICAgICAgIHJpbmdCYXNlLnB1c2goYik7XG5cbiAgICAgICAgICAgIGNvbnN0IHQgPSBuZXcgUG9pbnQodG9wWCAvIHRvcFcsIHRvcFkgLyB0b3BXKTtcbiAgICAgICAgICAgIHQueiA9IHRvcFogLyB0b3BXO1xuICAgICAgICAgICAgcmluZ1RvcC5wdXNoKHQpO1xuICAgICAgICB9XG4gICAgICAgIHByb2plY3RlZEJhc2UucHVzaChyaW5nQmFzZSk7XG4gICAgICAgIHByb2plY3RlZFRvcC5wdXNoKHJpbmdUb3ApO1xuICAgIH1cbiAgICByZXR1cm4gW3Byb2plY3RlZEJhc2UsIHByb2plY3RlZFRvcF07XG59XG5cbmZ1bmN0aW9uIHByb2plY3RRdWVyeUdlb21ldHJ5KHF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50PiwgcGl4ZWxQb3NNYXRyaXg6IEZsb2F0MzJBcnJheSwgdHJhbnNmb3JtOiBUcmFuc2Zvcm0sIHo6IG51bWJlcikge1xuICAgIGNvbnN0IHByb2plY3RlZFF1ZXJ5R2VvbWV0cnkgPSBbXTtcbiAgICBmb3IgKGNvbnN0IHAgb2YgcXVlcnlHZW9tZXRyeSkge1xuICAgICAgICBjb25zdCB2ID0gW3AueCwgcC55LCB6LCAxXTtcbiAgICAgICAgdmVjNC50cmFuc2Zvcm1NYXQ0KHYsIHYsIHBpeGVsUG9zTWF0cml4KTtcbiAgICAgICAgcHJvamVjdGVkUXVlcnlHZW9tZXRyeS5wdXNoKG5ldyBQb2ludCh2WzBdIC8gdlszXSwgdlsxXSAvIHZbM10pKTtcbiAgICB9XG4gICAgcmV0dXJuIHByb2plY3RlZFF1ZXJ5R2VvbWV0cnk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZpbGxFeHRydXNpb25TdHlsZUxheWVyO1xuIiwiLy8gQGZsb3dcbmltcG9ydCB7Y3JlYXRlTGF5b3V0fSBmcm9tICcuLi8uLi91dGlsL3N0cnVjdF9hcnJheSc7XG5cbmNvbnN0IGxpbmVMYXlvdXRBdHRyaWJ1dGVzID0gY3JlYXRlTGF5b3V0KFtcbiAgICB7bmFtZTogJ2FfcG9zX25vcm1hbCcsIGNvbXBvbmVudHM6IDIsIHR5cGU6ICdJbnQxNid9LFxuICAgIHtuYW1lOiAnYV9kYXRhJywgY29tcG9uZW50czogNCwgdHlwZTogJ1VpbnQ4J31cbl0sIDQpO1xuXG5leHBvcnQgZGVmYXVsdCBsaW5lTGF5b3V0QXR0cmlidXRlcztcbmV4cG9ydCBjb25zdCB7bWVtYmVycywgc2l6ZSwgYWxpZ25tZW50fSA9IGxpbmVMYXlvdXRBdHRyaWJ1dGVzO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtMaW5lTGF5b3V0QXJyYXl9IGZyb20gJy4uL2FycmF5X3R5cGVzJztcblxuaW1wb3J0IHttZW1iZXJzIGFzIGxheW91dEF0dHJpYnV0ZXN9IGZyb20gJy4vbGluZV9hdHRyaWJ1dGVzJztcbmltcG9ydCBTZWdtZW50VmVjdG9yIGZyb20gJy4uL3NlZ21lbnQnO1xuaW1wb3J0IHtQcm9ncmFtQ29uZmlndXJhdGlvblNldH0gZnJvbSAnLi4vcHJvZ3JhbV9jb25maWd1cmF0aW9uJztcbmltcG9ydCB7VHJpYW5nbGVJbmRleEFycmF5fSBmcm9tICcuLi9pbmRleF9hcnJheV90eXBlJztcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi4vZXh0ZW50JztcbmltcG9ydCBtdnQgZnJvbSAnQG1hcGJveC92ZWN0b3ItdGlsZSc7XG5jb25zdCB2ZWN0b3JUaWxlRmVhdHVyZVR5cGVzID0gbXZ0LlZlY3RvclRpbGVGZWF0dXJlLnR5cGVzO1xuaW1wb3J0IHtyZWdpc3Rlcn0gZnJvbSAnLi4vLi4vdXRpbC93ZWJfd29ya2VyX3RyYW5zZmVyJztcbmltcG9ydCB7aGFzUGF0dGVybiwgYWRkUGF0dGVybkRlcGVuZGVuY2llc30gZnJvbSAnLi9wYXR0ZXJuX2J1Y2tldF9mZWF0dXJlcyc7XG5pbXBvcnQgbG9hZEdlb21ldHJ5IGZyb20gJy4uL2xvYWRfZ2VvbWV0cnknO1xuaW1wb3J0IEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4uLy4uL3N0eWxlL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5cbmltcG9ydCB0eXBlIHtDYW5vbmljYWxUaWxlSUR9IGZyb20gJy4uLy4uL3NvdXJjZS90aWxlX2lkJztcbmltcG9ydCB0eXBlIHtcbiAgICBCdWNrZXQsXG4gICAgQnVja2V0UGFyYW1ldGVycyxcbiAgICBCdWNrZXRGZWF0dXJlLFxuICAgIEluZGV4ZWRGZWF0dXJlLFxuICAgIFBvcHVsYXRlUGFyYW1ldGVyc1xufSBmcm9tICcuLi9idWNrZXQnO1xuaW1wb3J0IHR5cGUgTGluZVN0eWxlTGF5ZXIgZnJvbSAnLi4vLi4vc3R5bGUvc3R5bGVfbGF5ZXIvbGluZV9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB0eXBlIHtTZWdtZW50fSBmcm9tICcuLi9zZWdtZW50JztcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSBJbmRleEJ1ZmZlciBmcm9tICcuLi8uLi9nbC9pbmRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUgVmVydGV4QnVmZmVyIGZyb20gJy4uLy4uL2dsL3ZlcnRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUge0ZlYXR1cmVTdGF0ZXN9IGZyb20gJy4uLy4uL3NvdXJjZS9zb3VyY2Vfc3RhdGUnO1xuaW1wb3J0IHR5cGUge0ltYWdlUG9zaXRpb259IGZyb20gJy4uLy4uL3JlbmRlci9pbWFnZV9hdGxhcyc7XG5cbi8vIE5PVEUgT04gRVhUUlVERSBTQ0FMRTpcbi8vIHNjYWxlIHRoZSBleHRydXNpb24gdmVjdG9yIHNvIHRoYXQgdGhlIG5vcm1hbCBsZW5ndGggaXMgdGhpcyB2YWx1ZS5cbi8vIGNvbnRhaW5zIHRoZSBcInRleHR1cmVcIiBub3JtYWxzICgtMS4uMSkuIHRoaXMgaXMgZGlzdGluY3QgZnJvbSB0aGUgZXh0cnVkZVxuLy8gbm9ybWFscyBmb3IgbGluZSBqb2lucywgYmVjYXVzZSB0aGUgeC12YWx1ZSByZW1haW5zIDAgZm9yIHRoZSB0ZXh0dXJlXG4vLyBub3JtYWwgYXJyYXksIHdoaWxlIHRoZSBleHRydWRlIG5vcm1hbCBhY3R1YWxseSBtb3ZlcyB0aGUgdmVydGV4IHRvIGNyZWF0ZVxuLy8gdGhlIGFjdXRlL2JldmVsbGVkIGxpbmUgam9pbi5cbmNvbnN0IEVYVFJVREVfU0NBTEUgPSA2MztcblxuLypcbiAqIFNoYXJwIGNvcm5lcnMgY2F1c2UgZGFzaGVkIGxpbmVzIHRvIHRpbHQgYmVjYXVzZSB0aGUgZGlzdGFuY2UgYWxvbmcgdGhlIGxpbmVcbiAqIGlzIHRoZSBzYW1lIGF0IGJvdGggdGhlIGlubmVyIGFuZCBvdXRlciBjb3JuZXJzLiBUbyBpbXByb3ZlIHRoZSBhcHBlYXJhbmNlIG9mXG4gKiBkYXNoZWQgbGluZXMgd2UgYWRkIGV4dHJhIHBvaW50cyBuZWFyIHNoYXJwIGNvcm5lcnMgc28gdGhhdCBhIHNtYWxsZXIgcGFydFxuICogb2YgdGhlIGxpbmUgaXMgdGlsdGVkLlxuICpcbiAqIENPU19IQUxGX1NIQVJQX0NPUk5FUiBjb250cm9scyBob3cgc2hhcnAgYSBjb3JuZXIgaGFzIHRvIGJlIGZvciB1cyB0byBhZGQgYW5cbiAqIGV4dHJhIHZlcnRleC4gVGhlIGRlZmF1bHQgaXMgNzUgZGVncmVlcy5cbiAqXG4gKiBUaGUgbmV3bHkgY3JlYXRlZCB2ZXJ0aWNlcyBhcmUgcGxhY2VkIFNIQVJQX0NPUk5FUl9PRkZTRVQgcGl4ZWxzIGZyb20gdGhlIGNvcm5lci5cbiAqL1xuY29uc3QgQ09TX0hBTEZfU0hBUlBfQ09STkVSID0gTWF0aC5jb3MoNzUgLyAyICogKE1hdGguUEkgLyAxODApKTtcbmNvbnN0IFNIQVJQX0NPUk5FUl9PRkZTRVQgPSAxNTtcblxuLy8gQW5nbGUgcGVyIHRyaWFuZ2xlIGZvciBhcHByb3hpbWF0aW5nIHJvdW5kIGxpbmUgam9pbnMuXG5jb25zdCBERUdfUEVSX1RSSUFOR0xFID0gMjA7XG5cbi8vIFRoZSBudW1iZXIgb2YgYml0cyB0aGF0IGlzIHVzZWQgdG8gc3RvcmUgdGhlIGxpbmUgZGlzdGFuY2UgaW4gdGhlIGJ1ZmZlci5cbmNvbnN0IExJTkVfRElTVEFOQ0VfQlVGRkVSX0JJVFMgPSAxNTtcblxuLy8gV2UgZG9uJ3QgaGF2ZSBlbm91Z2ggYml0cyBmb3IgdGhlIGxpbmUgZGlzdGFuY2UgYXMgd2UnZCBsaWtlIHRvIGhhdmUsIHNvXG4vLyB1c2UgdGhpcyB2YWx1ZSB0byBzY2FsZSB0aGUgbGluZSBkaXN0YW5jZSAoaW4gdGlsZSB1bml0cykgZG93biB0byBhIHNtYWxsZXJcbi8vIHZhbHVlLiBUaGlzIGxldHMgdXMgc3RvcmUgbG9uZ2VyIGRpc3RhbmNlcyB3aGlsZSBzYWNyaWZpY2luZyBwcmVjaXNpb24uXG5jb25zdCBMSU5FX0RJU1RBTkNFX1NDQUxFID0gMSAvIDI7XG5cbi8vIFRoZSBtYXhpbXVtIGxpbmUgZGlzdGFuY2UsIGluIHRpbGUgdW5pdHMsIHRoYXQgZml0cyBpbiB0aGUgYnVmZmVyLlxuY29uc3QgTUFYX0xJTkVfRElTVEFOQ0UgPSBNYXRoLnBvdygyLCBMSU5FX0RJU1RBTkNFX0JVRkZFUl9CSVRTIC0gMSkgLyBMSU5FX0RJU1RBTkNFX1NDQUxFO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIExpbmVCdWNrZXQgaW1wbGVtZW50cyBCdWNrZXQge1xuICAgIGRpc3RhbmNlOiBudW1iZXI7XG4gICAgdG90YWxEaXN0YW5jZTogbnVtYmVyO1xuICAgIHNjYWxlZERpc3RhbmNlOiBudW1iZXI7XG4gICAgY2xpcFN0YXJ0OiBudW1iZXI7XG4gICAgY2xpcEVuZDogbnVtYmVyO1xuXG4gICAgZTE6IG51bWJlcjtcbiAgICBlMjogbnVtYmVyO1xuXG4gICAgaW5kZXg6IG51bWJlcjtcbiAgICB6b29tOiBudW1iZXI7XG4gICAgb3ZlcnNjYWxpbmc6IG51bWJlcjtcbiAgICBsYXllcnM6IEFycmF5PExpbmVTdHlsZUxheWVyPjtcbiAgICBsYXllcklkczogQXJyYXk8c3RyaW5nPjtcbiAgICBzdGF0ZURlcGVuZGVudExheWVyczogQXJyYXk8YW55PjtcbiAgICBzdGF0ZURlcGVuZGVudExheWVySWRzOiBBcnJheTxzdHJpbmc+O1xuICAgIHBhdHRlcm5GZWF0dXJlczogQXJyYXk8QnVja2V0RmVhdHVyZT47XG5cbiAgICBsYXlvdXRWZXJ0ZXhBcnJheTogTGluZUxheW91dEFycmF5O1xuICAgIGxheW91dFZlcnRleEJ1ZmZlcjogVmVydGV4QnVmZmVyO1xuXG4gICAgaW5kZXhBcnJheTogVHJpYW5nbGVJbmRleEFycmF5O1xuICAgIGluZGV4QnVmZmVyOiBJbmRleEJ1ZmZlcjtcblxuICAgIGhhc1BhdHRlcm46IGJvb2xlYW47XG4gICAgcHJvZ3JhbUNvbmZpZ3VyYXRpb25zOiBQcm9ncmFtQ29uZmlndXJhdGlvblNldDxMaW5lU3R5bGVMYXllcj47XG4gICAgc2VnbWVudHM6IFNlZ21lbnRWZWN0b3I7XG4gICAgdXBsb2FkZWQ6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBCdWNrZXRQYXJhbWV0ZXJzPExpbmVTdHlsZUxheWVyPikge1xuICAgICAgICB0aGlzLnpvb20gPSBvcHRpb25zLnpvb207XG4gICAgICAgIHRoaXMub3ZlcnNjYWxpbmcgPSBvcHRpb25zLm92ZXJzY2FsaW5nO1xuICAgICAgICB0aGlzLmxheWVycyA9IG9wdGlvbnMubGF5ZXJzO1xuICAgICAgICB0aGlzLmxheWVySWRzID0gdGhpcy5sYXllcnMubWFwKGxheWVyID0+IGxheWVyLmlkKTtcbiAgICAgICAgdGhpcy5pbmRleCA9IG9wdGlvbnMuaW5kZXg7XG4gICAgICAgIHRoaXMuaGFzUGF0dGVybiA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBhdHRlcm5GZWF0dXJlcyA9IFtdO1xuXG4gICAgICAgIHRoaXMubGF5b3V0VmVydGV4QXJyYXkgPSBuZXcgTGluZUxheW91dEFycmF5KCk7XG4gICAgICAgIHRoaXMuaW5kZXhBcnJheSA9IG5ldyBUcmlhbmdsZUluZGV4QXJyYXkoKTtcbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMgPSBuZXcgUHJvZ3JhbUNvbmZpZ3VyYXRpb25TZXQobGF5b3V0QXR0cmlidXRlcywgb3B0aW9ucy5sYXllcnMsIG9wdGlvbnMuem9vbSk7XG4gICAgICAgIHRoaXMuc2VnbWVudHMgPSBuZXcgU2VnbWVudFZlY3RvcigpO1xuXG4gICAgICAgIHRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcklkcyA9IHRoaXMubGF5ZXJzLmZpbHRlcigobCkgPT4gbC5pc1N0YXRlRGVwZW5kZW50KCkpLm1hcCgobCkgPT4gbC5pZCk7XG4gICAgfVxuXG4gICAgcG9wdWxhdGUoZmVhdHVyZXM6IEFycmF5PEluZGV4ZWRGZWF0dXJlPiwgb3B0aW9uczogUG9wdWxhdGVQYXJhbWV0ZXJzLCBjYW5vbmljYWw6IENhbm9uaWNhbFRpbGVJRCkge1xuICAgICAgICB0aGlzLmhhc1BhdHRlcm4gPSBoYXNQYXR0ZXJuKCdsaW5lJywgdGhpcy5sYXllcnMsIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBsaW5lU29ydEtleSA9IHRoaXMubGF5ZXJzWzBdLmxheW91dC5nZXQoJ2xpbmUtc29ydC1rZXknKTtcbiAgICAgICAgY29uc3QgYnVja2V0RmVhdHVyZXMgPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IHtmZWF0dXJlLCBpZCwgaW5kZXgsIHNvdXJjZUxheWVySW5kZXh9IG9mIGZlYXR1cmVzKSB7XG4gICAgICAgICAgICBjb25zdCBuZWVkR2VvbWV0cnkgPSB0aGlzLmxheWVyc1swXS5fZmVhdHVyZUZpbHRlci5uZWVkR2VvbWV0cnk7XG4gICAgICAgICAgICBjb25zdCBldmFsdWF0aW9uRmVhdHVyZSA9IHt0eXBlOiBmZWF0dXJlLnR5cGUsXG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczogZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAgIGdlb21ldHJ5OiBuZWVkR2VvbWV0cnkgPyBsb2FkR2VvbWV0cnkoZmVhdHVyZSkgOiBbXX07XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5sYXllcnNbMF0uX2ZlYXR1cmVGaWx0ZXIuZmlsdGVyKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyh0aGlzLnpvb20pLCBldmFsdWF0aW9uRmVhdHVyZSwgY2Fub25pY2FsKSkgY29udGludWU7XG5cbiAgICAgICAgICAgIGlmICghbmVlZEdlb21ldHJ5KSAgZXZhbHVhdGlvbkZlYXR1cmUuZ2VvbWV0cnkgPSBsb2FkR2VvbWV0cnkoZmVhdHVyZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHNvcnRLZXkgPSBsaW5lU29ydEtleSA/XG4gICAgICAgICAgICAgICAgbGluZVNvcnRLZXkuZXZhbHVhdGUoZXZhbHVhdGlvbkZlYXR1cmUsIHt9LCBjYW5vbmljYWwpIDpcbiAgICAgICAgICAgICAgICB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgIGNvbnN0IGJ1Y2tldEZlYXR1cmU6IEJ1Y2tldEZlYXR1cmUgPSB7XG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczogZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAgIHR5cGU6IGZlYXR1cmUudHlwZSxcbiAgICAgICAgICAgICAgICBzb3VyY2VMYXllckluZGV4LFxuICAgICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICAgIGdlb21ldHJ5OiBldmFsdWF0aW9uRmVhdHVyZS5nZW9tZXRyeSxcbiAgICAgICAgICAgICAgICBwYXR0ZXJuczoge30sXG4gICAgICAgICAgICAgICAgc29ydEtleVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgYnVja2V0RmVhdHVyZXMucHVzaChidWNrZXRGZWF0dXJlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaW5lU29ydEtleSkge1xuICAgICAgICAgICAgYnVja2V0RmVhdHVyZXMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGEuc29ydEtleSBpcyBhbHdheXMgYSBudW1iZXIgd2hlbiBpbiB1c2VcbiAgICAgICAgICAgICAgICByZXR1cm4gKChhLnNvcnRLZXk6IGFueSk6IG51bWJlcikgLSAoKGIuc29ydEtleTogYW55KTogbnVtYmVyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBidWNrZXRGZWF0dXJlIG9mIGJ1Y2tldEZlYXR1cmVzKSB7XG4gICAgICAgICAgICBjb25zdCB7Z2VvbWV0cnksIGluZGV4LCBzb3VyY2VMYXllckluZGV4fSA9IGJ1Y2tldEZlYXR1cmU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmhhc1BhdHRlcm4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXR0ZXJuQnVja2V0RmVhdHVyZSA9IGFkZFBhdHRlcm5EZXBlbmRlbmNpZXMoJ2xpbmUnLCB0aGlzLmxheWVycywgYnVja2V0RmVhdHVyZSwgdGhpcy56b29tLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAvLyBwYXR0ZXJuIGZlYXR1cmVzIGFyZSBhZGRlZCBvbmx5IG9uY2UgdGhlIHBhdHRlcm4gaXMgbG9hZGVkIGludG8gdGhlIGltYWdlIGF0bGFzXG4gICAgICAgICAgICAgICAgLy8gc28gYXJlIHN0b3JlZCBkdXJpbmcgcG9wdWxhdGUgdW50aWwgbGF0ZXIgdXBkYXRlZCB3aXRoIHBvc2l0aW9ucyBieSB0aWxlIHdvcmtlciBpbiBhZGRGZWF0dXJlc1xuICAgICAgICAgICAgICAgIHRoaXMucGF0dGVybkZlYXR1cmVzLnB1c2gocGF0dGVybkJ1Y2tldEZlYXR1cmUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEZlYXR1cmUoYnVja2V0RmVhdHVyZSwgZ2VvbWV0cnksIGluZGV4LCBjYW5vbmljYWwsIHt9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZmVhdHVyZSA9IGZlYXR1cmVzW2luZGV4XS5mZWF0dXJlO1xuICAgICAgICAgICAgb3B0aW9ucy5mZWF0dXJlSW5kZXguaW5zZXJ0KGZlYXR1cmUsIGdlb21ldHJ5LCBpbmRleCwgc291cmNlTGF5ZXJJbmRleCwgdGhpcy5pbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGUoc3RhdGVzOiBGZWF0dXJlU3RhdGVzLCB2dExheWVyOiBWZWN0b3JUaWxlTGF5ZXIsIGltYWdlUG9zaXRpb25zOiB7W186IHN0cmluZ106IEltYWdlUG9zaXRpb259KSB7XG4gICAgICAgIGlmICghdGhpcy5zdGF0ZURlcGVuZGVudExheWVycy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBkYXRlUGFpbnRBcnJheXMoc3RhdGVzLCB2dExheWVyLCB0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJzLCBpbWFnZVBvc2l0aW9ucyk7XG4gICAgfVxuXG4gICAgYWRkRmVhdHVyZXMob3B0aW9uczogUG9wdWxhdGVQYXJhbWV0ZXJzLCBjYW5vbmljYWw6IENhbm9uaWNhbFRpbGVJRCwgaW1hZ2VQb3NpdGlvbnM6IHtbXzogc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0pIHtcbiAgICAgICAgZm9yIChjb25zdCBmZWF0dXJlIG9mIHRoaXMucGF0dGVybkZlYXR1cmVzKSB7XG4gICAgICAgICAgICB0aGlzLmFkZEZlYXR1cmUoZmVhdHVyZSwgZmVhdHVyZS5nZW9tZXRyeSwgZmVhdHVyZS5pbmRleCwgY2Fub25pY2FsLCBpbWFnZVBvc2l0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgdXBsb2FkUGVuZGluZygpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnVwbG9hZGVkIHx8IHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkO1xuICAgIH1cblxuICAgIHVwbG9hZChjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgIGlmICghdGhpcy51cGxvYWRlZCkge1xuICAgICAgICAgICAgdGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmxheW91dFZlcnRleEFycmF5LCBsYXlvdXRBdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBsb2FkKGNvbnRleHQpO1xuICAgICAgICB0aGlzLnVwbG9hZGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBpZiAoIXRoaXMubGF5b3V0VmVydGV4QnVmZmVyKSByZXR1cm47XG4gICAgICAgIHRoaXMubGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5zZWdtZW50cy5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgYWRkRmVhdHVyZShmZWF0dXJlOiBCdWNrZXRGZWF0dXJlLCBnZW9tZXRyeTogQXJyYXk8QXJyYXk8UG9pbnQ+PiwgaW5kZXg6IG51bWJlciwgY2Fub25pY2FsOiBDYW5vbmljYWxUaWxlSUQsIGltYWdlUG9zaXRpb25zOiB7W186IHN0cmluZ106IEltYWdlUG9zaXRpb259KSB7XG4gICAgICAgIGNvbnN0IGxheW91dCA9IHRoaXMubGF5ZXJzWzBdLmxheW91dDtcbiAgICAgICAgY29uc3Qgam9pbiA9IGxheW91dC5nZXQoJ2xpbmUtam9pbicpLmV2YWx1YXRlKGZlYXR1cmUsIHt9KTtcbiAgICAgICAgY29uc3QgY2FwID0gbGF5b3V0LmdldCgnbGluZS1jYXAnKTtcbiAgICAgICAgY29uc3QgbWl0ZXJMaW1pdCA9IGxheW91dC5nZXQoJ2xpbmUtbWl0ZXItbGltaXQnKTtcbiAgICAgICAgY29uc3Qgcm91bmRMaW1pdCA9IGxheW91dC5nZXQoJ2xpbmUtcm91bmQtbGltaXQnKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgZ2VvbWV0cnkpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkTGluZShsaW5lLCBmZWF0dXJlLCBqb2luLCBjYXAsIG1pdGVyTGltaXQsIHJvdW5kTGltaXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMucG9wdWxhdGVQYWludEFycmF5cyh0aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCwgZmVhdHVyZSwgaW5kZXgsIGltYWdlUG9zaXRpb25zLCBjYW5vbmljYWwpO1xuICAgIH1cblxuICAgIGFkZExpbmUodmVydGljZXM6IEFycmF5PFBvaW50PiwgZmVhdHVyZTogQnVja2V0RmVhdHVyZSwgam9pbjogc3RyaW5nLCBjYXA6IHN0cmluZywgbWl0ZXJMaW1pdDogbnVtYmVyLCByb3VuZExpbWl0OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5kaXN0YW5jZSA9IDA7XG4gICAgICAgIHRoaXMuc2NhbGVkRGlzdGFuY2UgPSAwO1xuICAgICAgICB0aGlzLnRvdGFsRGlzdGFuY2UgPSAwO1xuXG4gICAgICAgIGlmICghIWZlYXR1cmUucHJvcGVydGllcyAmJlxuICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KCdtYXBib3hfY2xpcF9zdGFydCcpICYmXG4gICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoJ21hcGJveF9jbGlwX2VuZCcpKSB7XG5cbiAgICAgICAgICAgIHRoaXMuY2xpcFN0YXJ0ID0gK2ZlYXR1cmUucHJvcGVydGllc1snbWFwYm94X2NsaXBfc3RhcnQnXTtcbiAgICAgICAgICAgIHRoaXMuY2xpcEVuZCA9ICtmZWF0dXJlLnByb3BlcnRpZXNbJ21hcGJveF9jbGlwX2VuZCddO1xuXG4gICAgICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIHRvdGFsIGRpc3RhbmNlLCBpbiB0aWxlIHVuaXRzLCBvZiB0aGlzIHRpbGVkIGxpbmUgZmVhdHVyZVxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2ZXJ0aWNlcy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsRGlzdGFuY2UgKz0gdmVydGljZXNbaV0uZGlzdCh2ZXJ0aWNlc1tpICsgMV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy51cGRhdGVTY2FsZWREaXN0YW5jZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNQb2x5Z29uID0gdmVjdG9yVGlsZUZlYXR1cmVUeXBlc1tmZWF0dXJlLnR5cGVdID09PSAnUG9seWdvbic7XG5cbiAgICAgICAgLy8gSWYgdGhlIGxpbmUgaGFzIGR1cGxpY2F0ZSB2ZXJ0aWNlcyBhdCB0aGUgZW5kcywgYWRqdXN0IHN0YXJ0L2xlbmd0aCB0byByZW1vdmUgdGhlbS5cbiAgICAgICAgbGV0IGxlbiA9IHZlcnRpY2VzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGxlbiA+PSAyICYmIHZlcnRpY2VzW2xlbiAtIDFdLmVxdWFscyh2ZXJ0aWNlc1tsZW4gLSAyXSkpIHtcbiAgICAgICAgICAgIGxlbi0tO1xuICAgICAgICB9XG4gICAgICAgIGxldCBmaXJzdCA9IDA7XG4gICAgICAgIHdoaWxlIChmaXJzdCA8IGxlbiAtIDEgJiYgdmVydGljZXNbZmlyc3RdLmVxdWFscyh2ZXJ0aWNlc1tmaXJzdCArIDFdKSkge1xuICAgICAgICAgICAgZmlyc3QrKztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElnbm9yZSBpbnZhbGlkIGdlb21ldHJ5LlxuICAgICAgICBpZiAobGVuIDwgKGlzUG9seWdvbiA/IDMgOiAyKSkgcmV0dXJuO1xuXG4gICAgICAgIGlmIChqb2luID09PSAnYmV2ZWwnKSBtaXRlckxpbWl0ID0gMS4wNTtcblxuICAgICAgICBjb25zdCBzaGFycENvcm5lck9mZnNldCA9IHRoaXMub3ZlcnNjYWxpbmcgPD0gMTYgP1xuICAgICAgICAgICAgU0hBUlBfQ09STkVSX09GRlNFVCAqIEVYVEVOVCAvICg1MTIgKiB0aGlzLm92ZXJzY2FsaW5nKSA6XG4gICAgICAgICAgICAwO1xuXG4gICAgICAgIC8vIHdlIGNvdWxkIGJlIG1vcmUgcHJlY2lzZSwgYnV0IGl0IHdvdWxkIG9ubHkgc2F2ZSBhIG5lZ2xpZ2libGUgYW1vdW50IG9mIHNwYWNlXG4gICAgICAgIGNvbnN0IHNlZ21lbnQgPSB0aGlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KGxlbiAqIDEwLCB0aGlzLmxheW91dFZlcnRleEFycmF5LCB0aGlzLmluZGV4QXJyYXkpO1xuXG4gICAgICAgIGxldCBjdXJyZW50VmVydGV4O1xuICAgICAgICBsZXQgcHJldlZlcnRleCA9ICgodW5kZWZpbmVkOiBhbnkpOiBQb2ludCk7XG4gICAgICAgIGxldCBuZXh0VmVydGV4ID0gKCh1bmRlZmluZWQ6IGFueSk6IFBvaW50KTtcbiAgICAgICAgbGV0IHByZXZOb3JtYWwgPSAoKHVuZGVmaW5lZDogYW55KTogUG9pbnQpO1xuICAgICAgICBsZXQgbmV4dE5vcm1hbCA9ICgodW5kZWZpbmVkOiBhbnkpOiBQb2ludCk7XG5cbiAgICAgICAgLy8gdGhlIGxhc3QgdHdvIHZlcnRpY2VzIGFkZGVkXG4gICAgICAgIHRoaXMuZTEgPSB0aGlzLmUyID0gLTE7XG5cbiAgICAgICAgaWYgKGlzUG9seWdvbikge1xuICAgICAgICAgICAgY3VycmVudFZlcnRleCA9IHZlcnRpY2VzW2xlbiAtIDJdO1xuICAgICAgICAgICAgbmV4dE5vcm1hbCA9IHZlcnRpY2VzW2ZpcnN0XS5zdWIoY3VycmVudFZlcnRleCkuX3VuaXQoKS5fcGVycCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IGZpcnN0OyBpIDwgbGVuOyBpKyspIHtcblxuICAgICAgICAgICAgbmV4dFZlcnRleCA9IGkgPT09IGxlbiAtIDEgP1xuICAgICAgICAgICAgICAgIChpc1BvbHlnb24gPyB2ZXJ0aWNlc1tmaXJzdCArIDFdIDogKHVuZGVmaW5lZDogYW55KSkgOiAvLyBpZiBpdCdzIGEgcG9seWdvbiwgdHJlYXQgdGhlIGxhc3QgdmVydGV4IGxpa2UgdGhlIGZpcnN0XG4gICAgICAgICAgICAgICAgdmVydGljZXNbaSArIDFdOyAvLyBqdXN0IHRoZSBuZXh0IHZlcnRleFxuXG4gICAgICAgICAgICAvLyBpZiB0d28gY29uc2VjdXRpdmUgdmVydGljZXMgZXhpc3QsIHNraXAgdGhlIGN1cnJlbnQgb25lXG4gICAgICAgICAgICBpZiAobmV4dFZlcnRleCAmJiB2ZXJ0aWNlc1tpXS5lcXVhbHMobmV4dFZlcnRleCkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBpZiAobmV4dE5vcm1hbCkgcHJldk5vcm1hbCA9IG5leHROb3JtYWw7XG4gICAgICAgICAgICBpZiAoY3VycmVudFZlcnRleCkgcHJldlZlcnRleCA9IGN1cnJlbnRWZXJ0ZXg7XG5cbiAgICAgICAgICAgIGN1cnJlbnRWZXJ0ZXggPSB2ZXJ0aWNlc1tpXTtcblxuICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBub3JtYWwgdG93YXJkcyB0aGUgbmV4dCB2ZXJ0ZXggaW4gdGhpcyBsaW5lLiBJbiBjYXNlXG4gICAgICAgICAgICAvLyB0aGVyZSBpcyBubyBuZXh0IHZlcnRleCwgcHJldGVuZCB0aGF0IHRoZSBsaW5lIGlzIGNvbnRpbnVpbmcgc3RyYWlnaHQsXG4gICAgICAgICAgICAvLyBtZWFuaW5nIHRoYXQgd2UgYXJlIGp1c3QgdXNpbmcgdGhlIHByZXZpb3VzIG5vcm1hbC5cbiAgICAgICAgICAgIG5leHROb3JtYWwgPSBuZXh0VmVydGV4ID8gbmV4dFZlcnRleC5zdWIoY3VycmVudFZlcnRleCkuX3VuaXQoKS5fcGVycCgpIDogcHJldk5vcm1hbDtcblxuICAgICAgICAgICAgLy8gSWYgd2Ugc3RpbGwgZG9uJ3QgaGF2ZSBhIHByZXZpb3VzIG5vcm1hbCwgdGhpcyBpcyB0aGUgYmVnaW5uaW5nIG9mIGFcbiAgICAgICAgICAgIC8vIG5vbi1jbG9zZWQgbGluZSwgc28gd2UncmUgZG9pbmcgYSBzdHJhaWdodCBcImpvaW5cIi5cbiAgICAgICAgICAgIHByZXZOb3JtYWwgPSBwcmV2Tm9ybWFsIHx8IG5leHROb3JtYWw7XG5cbiAgICAgICAgICAgIC8vIERldGVybWluZSB0aGUgbm9ybWFsIG9mIHRoZSBqb2luIGV4dHJ1c2lvbi4gSXQgaXMgdGhlIGFuZ2xlIGJpc2VjdG9yXG4gICAgICAgICAgICAvLyBvZiB0aGUgc2VnbWVudHMgYmV0d2VlbiB0aGUgcHJldmlvdXMgbGluZSBhbmQgdGhlIG5leHQgbGluZS5cbiAgICAgICAgICAgIC8vIEluIHRoZSBjYXNlIG9mIDE4MMOCwrAgYW5nbGVzLCB0aGUgcHJldiBhbmQgbmV4dCBub3JtYWxzIGNhbmNlbCBlYWNoIG90aGVyIG91dDpcbiAgICAgICAgICAgIC8vIHByZXZOb3JtYWwgKyBuZXh0Tm9ybWFsID0gKDAsIDApLCBpdHMgbWFnbml0dWRlIGlzIDAsIHNvIHRoZSB1bml0IHZlY3RvciB3b3VsZCBiZVxuICAgICAgICAgICAgLy8gdW5kZWZpbmVkLiBJbiB0aGF0IGNhc2UsIHdlJ3JlIGtlZXBpbmcgdGhlIGpvaW5Ob3JtYWwgYXQgKDAsIDApLCBzbyB0aGF0IHRoZSBjb3NIYWxmQW5nbGVcbiAgICAgICAgICAgIC8vIGJlbG93IHdpbGwgYWxzbyBiZWNvbWUgMCBhbmQgbWl0ZXJMZW5ndGggd2lsbCBiZWNvbWUgSW5maW5pdHkuXG4gICAgICAgICAgICBsZXQgam9pbk5vcm1hbCA9IHByZXZOb3JtYWwuYWRkKG5leHROb3JtYWwpO1xuICAgICAgICAgICAgaWYgKGpvaW5Ob3JtYWwueCAhPT0gMCB8fCBqb2luTm9ybWFsLnkgIT09IDApIHtcbiAgICAgICAgICAgICAgICBqb2luTm9ybWFsLl91bml0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKiAgam9pbk5vcm1hbCAgICAgcHJldk5vcm1hbFxuICAgICAgICAgICAgICogICAgICAgICAgICAgw6LChsKWICAgICAgw6LChsKRXG4gICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAuX19fX19fX18uIHByZXZWZXJ0ZXhcbiAgICAgICAgICAgICAqICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICAgICAqIG5leHROb3JtYWwgIMOiwobCkCAgfCAgY3VycmVudFZlcnRleFxuICAgICAgICAgICAgICogICAgICAgICAgICAgICAgfFxuICAgICAgICAgICAgICogICAgIG5leHRWZXJ0ZXggIVxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICAvLyBjYWxjdWxhdGUgY29zaW5lcyBvZiB0aGUgYW5nbGUgKGFuZCBpdHMgaGFsZikgdXNpbmcgZG90IHByb2R1Y3RcbiAgICAgICAgICAgIGNvbnN0IGNvc0FuZ2xlID0gcHJldk5vcm1hbC54ICogbmV4dE5vcm1hbC54ICsgcHJldk5vcm1hbC55ICogbmV4dE5vcm1hbC55O1xuICAgICAgICAgICAgY29uc3QgY29zSGFsZkFuZ2xlID0gam9pbk5vcm1hbC54ICogbmV4dE5vcm1hbC54ICsgam9pbk5vcm1hbC55ICogbmV4dE5vcm1hbC55O1xuXG4gICAgICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiB0aGUgbWl0ZXIgKHRoZSByYXRpbyBvZiB0aGUgbWl0ZXIgdG8gdGhlIHdpZHRoKVxuICAgICAgICAgICAgLy8gYXMgdGhlIGludmVyc2Ugb2YgY29zaW5lIG9mIHRoZSBhbmdsZSBiZXR3ZWVuIG5leHQgYW5kIGpvaW4gbm9ybWFsc1xuICAgICAgICAgICAgY29uc3QgbWl0ZXJMZW5ndGggPSBjb3NIYWxmQW5nbGUgIT09IDAgPyAxIC8gY29zSGFsZkFuZ2xlIDogSW5maW5pdHk7XG5cbiAgICAgICAgICAgIC8vIGFwcHJveGltYXRlIGFuZ2xlIGZyb20gY29zaW5lXG4gICAgICAgICAgICBjb25zdCBhcHByb3hBbmdsZSA9IDIgKiBNYXRoLnNxcnQoMiAtIDIgKiBjb3NIYWxmQW5nbGUpO1xuXG4gICAgICAgICAgICBjb25zdCBpc1NoYXJwQ29ybmVyID0gY29zSGFsZkFuZ2xlIDwgQ09TX0hBTEZfU0hBUlBfQ09STkVSICYmIHByZXZWZXJ0ZXggJiYgbmV4dFZlcnRleDtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVUdXJuc0xlZnQgPSBwcmV2Tm9ybWFsLnggKiBuZXh0Tm9ybWFsLnkgLSBwcmV2Tm9ybWFsLnkgKiBuZXh0Tm9ybWFsLnggPiAwO1xuXG4gICAgICAgICAgICBpZiAoaXNTaGFycENvcm5lciAmJiBpID4gZmlyc3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2U2VnbWVudExlbmd0aCA9IGN1cnJlbnRWZXJ0ZXguZGlzdChwcmV2VmVydGV4KTtcbiAgICAgICAgICAgICAgICBpZiAocHJldlNlZ21lbnRMZW5ndGggPiAyICogc2hhcnBDb3JuZXJPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3UHJldlZlcnRleCA9IGN1cnJlbnRWZXJ0ZXguc3ViKGN1cnJlbnRWZXJ0ZXguc3ViKHByZXZWZXJ0ZXgpLl9tdWx0KHNoYXJwQ29ybmVyT2Zmc2V0IC8gcHJldlNlZ21lbnRMZW5ndGgpLl9yb3VuZCgpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVEaXN0YW5jZShwcmV2VmVydGV4LCBuZXdQcmV2VmVydGV4KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDdXJyZW50VmVydGV4KG5ld1ByZXZWZXJ0ZXgsIHByZXZOb3JtYWwsIDAsIDAsIHNlZ21lbnQpO1xuICAgICAgICAgICAgICAgICAgICBwcmV2VmVydGV4ID0gbmV3UHJldlZlcnRleDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFRoZSBqb2luIGlmIGEgbWlkZGxlIHZlcnRleCwgb3RoZXJ3aXNlIHRoZSBjYXAuXG4gICAgICAgICAgICBjb25zdCBtaWRkbGVWZXJ0ZXggPSBwcmV2VmVydGV4ICYmIG5leHRWZXJ0ZXg7XG4gICAgICAgICAgICBsZXQgY3VycmVudEpvaW4gPSBtaWRkbGVWZXJ0ZXggPyBqb2luIDogaXNQb2x5Z29uID8gJ2J1dHQnIDogY2FwO1xuXG4gICAgICAgICAgICBpZiAobWlkZGxlVmVydGV4ICYmIGN1cnJlbnRKb2luID09PSAncm91bmQnKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1pdGVyTGVuZ3RoIDwgcm91bmRMaW1pdCkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Sm9pbiA9ICdtaXRlcic7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtaXRlckxlbmd0aCA8PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRKb2luID0gJ2Zha2Vyb3VuZCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY3VycmVudEpvaW4gPT09ICdtaXRlcicgJiYgbWl0ZXJMZW5ndGggPiBtaXRlckxpbWl0KSB7XG4gICAgICAgICAgICAgICAgY3VycmVudEpvaW4gPSAnYmV2ZWwnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY3VycmVudEpvaW4gPT09ICdiZXZlbCcpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgbWF4aW11bSBleHRydWRlIGxlbmd0aCBpcyAxMjggLyA2MyA9IDIgdGltZXMgdGhlIHdpZHRoIG9mIHRoZSBsaW5lXG4gICAgICAgICAgICAgICAgLy8gc28gaWYgbWl0ZXJMZW5ndGggPj0gMiB3ZSBuZWVkIHRvIGRyYXcgYSBkaWZmZXJlbnQgdHlwZSBvZiBiZXZlbCBoZXJlLlxuICAgICAgICAgICAgICAgIGlmIChtaXRlckxlbmd0aCA+IDIpIGN1cnJlbnRKb2luID0gJ2ZsaXBiZXZlbCc7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgbWl0ZXJMZW5ndGggaXMgcmVhbGx5IHNtYWxsIGFuZCB0aGUgbGluZSBiZXZlbCB3b3VsZG4ndCBiZSB2aXNpYmxlLFxuICAgICAgICAgICAgICAgIC8vIGp1c3QgZHJhdyBhIG1pdGVyIGpvaW4gdG8gc2F2ZSBhIHRyaWFuZ2xlLlxuICAgICAgICAgICAgICAgIGlmIChtaXRlckxlbmd0aCA8IG1pdGVyTGltaXQpIGN1cnJlbnRKb2luID0gJ21pdGVyJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIGhvdyBmYXIgYWxvbmcgdGhlIGxpbmUgdGhlIGN1cnJlbnRWZXJ0ZXggaXNcbiAgICAgICAgICAgIGlmIChwcmV2VmVydGV4KSB0aGlzLnVwZGF0ZURpc3RhbmNlKHByZXZWZXJ0ZXgsIGN1cnJlbnRWZXJ0ZXgpO1xuXG4gICAgICAgICAgICBpZiAoY3VycmVudEpvaW4gPT09ICdtaXRlcicpIHtcblxuICAgICAgICAgICAgICAgIGpvaW5Ob3JtYWwuX211bHQobWl0ZXJMZW5ndGgpO1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkQ3VycmVudFZlcnRleChjdXJyZW50VmVydGV4LCBqb2luTm9ybWFsLCAwLCAwLCBzZWdtZW50KTtcblxuICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50Sm9pbiA9PT0gJ2ZsaXBiZXZlbCcpIHtcbiAgICAgICAgICAgICAgICAvLyBtaXRlciBpcyB0b28gYmlnLCBmbGlwIHRoZSBkaXJlY3Rpb24gdG8gbWFrZSBhIGJldmVsZWQgam9pblxuXG4gICAgICAgICAgICAgICAgaWYgKG1pdGVyTGVuZ3RoID4gMTAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFsbW9zdCBwYXJhbGxlbCBsaW5lc1xuICAgICAgICAgICAgICAgICAgICBqb2luTm9ybWFsID0gbmV4dE5vcm1hbC5tdWx0KC0xKTtcblxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJldmVsTGVuZ3RoID0gbWl0ZXJMZW5ndGggKiBwcmV2Tm9ybWFsLmFkZChuZXh0Tm9ybWFsKS5tYWcoKSAvIHByZXZOb3JtYWwuc3ViKG5leHROb3JtYWwpLm1hZygpO1xuICAgICAgICAgICAgICAgICAgICBqb2luTm9ybWFsLl9wZXJwKCkuX211bHQoYmV2ZWxMZW5ndGggKiAobGluZVR1cm5zTGVmdCA/IC0xIDogMSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoY3VycmVudFZlcnRleCwgam9pbk5vcm1hbCwgMCwgMCwgc2VnbWVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRDdXJyZW50VmVydGV4KGN1cnJlbnRWZXJ0ZXgsIGpvaW5Ob3JtYWwubXVsdCgtMSksIDAsIDAsIHNlZ21lbnQpO1xuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRKb2luID09PSAnYmV2ZWwnIHx8IGN1cnJlbnRKb2luID09PSAnZmFrZXJvdW5kJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IC1NYXRoLnNxcnQobWl0ZXJMZW5ndGggKiBtaXRlckxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldEEgPSBsaW5lVHVybnNMZWZ0ID8gb2Zmc2V0IDogMDtcbiAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXRCID0gbGluZVR1cm5zTGVmdCA/IDAgOiBvZmZzZXQ7XG5cbiAgICAgICAgICAgICAgICAvLyBDbG9zZSBwcmV2aW91cyBzZWdtZW50IHdpdGggYSBiZXZlbFxuICAgICAgICAgICAgICAgIGlmIChwcmV2VmVydGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ3VycmVudFZlcnRleChjdXJyZW50VmVydGV4LCBwcmV2Tm9ybWFsLCBvZmZzZXRBLCBvZmZzZXRCLCBzZWdtZW50KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEpvaW4gPT09ICdmYWtlcm91bmQnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBqb2luIGFuZ2xlIGlzIHNoYXJwIGVub3VnaCB0aGF0IGEgcm91bmQgam9pbiB3b3VsZCBiZSB2aXNpYmxlLlxuICAgICAgICAgICAgICAgICAgICAvLyBCZXZlbCBqb2lucyBmaWxsIHRoZSBnYXAgYmV0d2VlbiBzZWdtZW50cyB3aXRoIGEgc2luZ2xlIHBpZSBzbGljZSB0cmlhbmdsZS5cbiAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgcm91bmQgam9pbiBieSBhZGRpbmcgbXVsdGlwbGUgcGllIHNsaWNlcy4gVGhlIGpvaW4gaXNuJ3QgYWN0dWFsbHkgcm91bmQsIGJ1dFxuICAgICAgICAgICAgICAgICAgICAvLyBpdCBsb29rcyBsaWtlIGl0IGlzIGF0IHRoZSBzaXplcyB3ZSByZW5kZXIgbGluZXMgYXQuXG5cbiAgICAgICAgICAgICAgICAgICAgLy8gcGljayB0aGUgbnVtYmVyIG9mIHRyaWFuZ2xlcyBmb3IgYXBwcm94aW1hdGluZyByb3VuZCBqb2luIGJ5IGJhc2VkIG9uIHRoZSBhbmdsZSBiZXR3ZWVuIG5vcm1hbHNcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbiA9IE1hdGgucm91bmQoKGFwcHJveEFuZ2xlICogMTgwIC8gTWF0aC5QSSkgLyBERUdfUEVSX1RSSUFOR0xFKTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBtID0gMTsgbSA8IG47IG0rKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHQgPSBtIC8gbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ICE9PSAwLjUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhcHByb3hpbWF0ZSBzcGhlcmljYWwgaW50ZXJwb2xhdGlvbiBodHRwczovL29ic2VydmFibGVocS5jb20vQG1vdXJuZXIvYXBwcm94aW1hdGluZy1nZW9tZXRyaWMtc2xlcnBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0MiA9IHQgLSAwLjU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQSA9IDEuMDkwNCArIGNvc0FuZ2xlICogKC0zLjI0NTIgKyBjb3NBbmdsZSAqICgzLjU1NjQ1IC0gY29zQW5nbGUgKiAxLjQzNTE5KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQiA9IDAuODQ4MDEzICsgY29zQW5nbGUgKiAoLTEuMDYwMjEgKyBjb3NBbmdsZSAqIDAuMjE1NjM4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gdCArIHQgKiB0MiAqICh0IC0gMSkgKiAoQSAqIHQyICogdDIgKyBCKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4dHJ1ZGUgPSBuZXh0Tm9ybWFsLnN1YihwcmV2Tm9ybWFsKS5fbXVsdCh0KS5fYWRkKHByZXZOb3JtYWwpLl91bml0KCkuX211bHQobGluZVR1cm5zTGVmdCA/IC0xIDogMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEhhbGZWZXJ0ZXgoY3VycmVudFZlcnRleCwgZXh0cnVkZS54LCBleHRydWRlLnksIGZhbHNlLCBsaW5lVHVybnNMZWZ0LCAwLCBzZWdtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChuZXh0VmVydGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFN0YXJ0IG5leHQgc2VnbWVudFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoY3VycmVudFZlcnRleCwgbmV4dE5vcm1hbCwgLW9mZnNldEEsIC1vZmZzZXRCLCBzZWdtZW50KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudEpvaW4gPT09ICdidXR0Jykge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkQ3VycmVudFZlcnRleChjdXJyZW50VmVydGV4LCBqb2luTm9ybWFsLCAwLCAwLCBzZWdtZW50KTsgLy8gYnV0dCBjYXBcblxuICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50Sm9pbiA9PT0gJ3NxdWFyZScpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPSBwcmV2VmVydGV4ID8gMSA6IC0xOyAvLyBjbG9zaW5nIG9yIHN0YXJ0aW5nIHNxdWFyZSBjYXBcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoY3VycmVudFZlcnRleCwgam9pbk5vcm1hbCwgb2Zmc2V0LCBvZmZzZXQsIHNlZ21lbnQpO1xuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRKb2luID09PSAncm91bmQnKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAocHJldlZlcnRleCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBDbG9zZSBwcmV2aW91cyBzZWdtZW50IHdpdGggYnV0dFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoY3VycmVudFZlcnRleCwgcHJldk5vcm1hbCwgMCwgMCwgc2VnbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHJvdW5kIGNhcCBvciBsaW5lam9pbiBhdCBlbmQgb2Ygc2VnbWVudFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoY3VycmVudFZlcnRleCwgcHJldk5vcm1hbCwgMSwgMSwgc2VnbWVudCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChuZXh0VmVydGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFkZCByb3VuZCBjYXAgYmVmb3JlIGZpcnN0IHNlZ21lbnRcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDdXJyZW50VmVydGV4KGN1cnJlbnRWZXJ0ZXgsIG5leHROb3JtYWwsIC0xLCAtMSwgc2VnbWVudCwgdHJ1ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gU3RhcnQgbmV4dCBzZWdtZW50IHdpdGggYSBidXR0XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ3VycmVudFZlcnRleChjdXJyZW50VmVydGV4LCBuZXh0Tm9ybWFsLCAwLCAwLCBzZWdtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpc1NoYXJwQ29ybmVyICYmIGkgPCBsZW4gLSAxKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dFNlZ21lbnRMZW5ndGggPSBjdXJyZW50VmVydGV4LmRpc3QobmV4dFZlcnRleCk7XG4gICAgICAgICAgICAgICAgaWYgKG5leHRTZWdtZW50TGVuZ3RoID4gMiAqIHNoYXJwQ29ybmVyT2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0N1cnJlbnRWZXJ0ZXggPSBjdXJyZW50VmVydGV4LmFkZChuZXh0VmVydGV4LnN1YihjdXJyZW50VmVydGV4KS5fbXVsdChzaGFycENvcm5lck9mZnNldCAvIG5leHRTZWdtZW50TGVuZ3RoKS5fcm91bmQoKSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRGlzdGFuY2UoY3VycmVudFZlcnRleCwgbmV3Q3VycmVudFZlcnRleCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkQ3VycmVudFZlcnRleChuZXdDdXJyZW50VmVydGV4LCBuZXh0Tm9ybWFsLCAwLCAwLCBzZWdtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFZlcnRleCA9IG5ld0N1cnJlbnRWZXJ0ZXg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkIHR3byB2ZXJ0aWNlcyB0byB0aGUgYnVmZmVycy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwIHRoZSBsaW5lIHZlcnRleCB0byBhZGQgYnVmZmVyIHZlcnRpY2VzIGZvclxuICAgICAqIEBwYXJhbSBub3JtYWwgdmVydGV4IG5vcm1hbFxuICAgICAqIEBwYXJhbSBlbmRMZWZ0IGV4dHJ1ZGUgdG8gc2hpZnQgdGhlIGxlZnQgdmVydGV4IGFsb25nIHRoZSBsaW5lXG4gICAgICogQHBhcmFtIGVuZFJpZ2h0IGV4dHJ1ZGUgdG8gc2hpZnQgdGhlIGxlZnQgdmVydGV4IGFsb25nIHRoZSBsaW5lXG4gICAgICogQHBhcmFtIHNlZ21lbnQgdGhlIHNlZ21lbnQgb2JqZWN0IHRvIGFkZCB0aGUgdmVydGV4IHRvXG4gICAgICogQHBhcmFtIHJvdW5kIHdoZXRoZXIgdGhpcyBpcyBhIHJvdW5kIGNhcFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgYWRkQ3VycmVudFZlcnRleChwOiBQb2ludCwgbm9ybWFsOiBQb2ludCwgZW5kTGVmdDogbnVtYmVyLCBlbmRSaWdodDogbnVtYmVyLCBzZWdtZW50OiBTZWdtZW50LCByb3VuZDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIC8vIGxlZnQgYW5kIHJpZ2h0IGV4dHJ1ZGUgdmVjdG9ycywgcGVycGVuZGljdWxhcmx5IHNoaWZ0ZWQgYnkgZW5kTGVmdC9lbmRSaWdodFxuICAgICAgICBjb25zdCBsZWZ0WCA9IG5vcm1hbC54ICsgbm9ybWFsLnkgKiBlbmRMZWZ0O1xuICAgICAgICBjb25zdCBsZWZ0WSA9IG5vcm1hbC55IC0gbm9ybWFsLnggKiBlbmRMZWZ0O1xuICAgICAgICBjb25zdCByaWdodFggPSAtbm9ybWFsLnggKyBub3JtYWwueSAqIGVuZFJpZ2h0O1xuICAgICAgICBjb25zdCByaWdodFkgPSAtbm9ybWFsLnkgLSBub3JtYWwueCAqIGVuZFJpZ2h0O1xuXG4gICAgICAgIHRoaXMuYWRkSGFsZlZlcnRleChwLCBsZWZ0WCwgbGVmdFksIHJvdW5kLCBmYWxzZSwgZW5kTGVmdCwgc2VnbWVudCk7XG4gICAgICAgIHRoaXMuYWRkSGFsZlZlcnRleChwLCByaWdodFgsIHJpZ2h0WSwgcm91bmQsIHRydWUsIC1lbmRSaWdodCwgc2VnbWVudCk7XG5cbiAgICAgICAgLy8gVGhlcmUgaXMgYSBtYXhpbXVtIFwiZGlzdGFuY2UgYWxvbmcgdGhlIGxpbmVcIiB0aGF0IHdlIGNhbiBzdG9yZSBpbiB0aGUgYnVmZmVycy5cbiAgICAgICAgLy8gV2hlbiB3ZSBnZXQgY2xvc2UgdG8gdGhlIGRpc3RhbmNlLCByZXNldCBpdCB0byB6ZXJvIGFuZCBhZGQgdGhlIHZlcnRleCBhZ2FpbiB3aXRoXG4gICAgICAgIC8vIGEgZGlzdGFuY2Ugb2YgemVyby4gVGhlIG1heCBkaXN0YW5jZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBudW1iZXIgb2YgYml0cyB3ZSBhbGxvY2F0ZVxuICAgICAgICAvLyB0byBgbGluZXNvZmFyYC5cbiAgICAgICAgaWYgKHRoaXMuZGlzdGFuY2UgPiBNQVhfTElORV9ESVNUQU5DRSAvIDIgJiYgdGhpcy50b3RhbERpc3RhbmNlID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmRpc3RhbmNlID0gMDtcbiAgICAgICAgICAgIHRoaXMuYWRkQ3VycmVudFZlcnRleChwLCBub3JtYWwsIGVuZExlZnQsIGVuZFJpZ2h0LCBzZWdtZW50LCByb3VuZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRIYWxmVmVydGV4KHt4LCB5fTogUG9pbnQsIGV4dHJ1ZGVYOiBudW1iZXIsIGV4dHJ1ZGVZOiBudW1iZXIsIHJvdW5kOiBib29sZWFuLCB1cDogYm9vbGVhbiwgZGlyOiBudW1iZXIsIHNlZ21lbnQ6IFNlZ21lbnQpIHtcbiAgICAgICAgLy8gc2NhbGUgZG93biBzbyB0aGF0IHdlIGNhbiBzdG9yZSBsb25nZXIgZGlzdGFuY2VzIHdoaWxlIHNhY3JpZmljaW5nIHByZWNpc2lvbi5cbiAgICAgICAgY29uc3QgbGluZXNvZmFyID0gdGhpcy5zY2FsZWREaXN0YW5jZSAqIExJTkVfRElTVEFOQ0VfU0NBTEU7XG5cbiAgICAgICAgdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhcbiAgICAgICAgICAgIC8vIGFfcG9zX25vcm1hbFxuICAgICAgICAgICAgLy8gRW5jb2RlIHJvdW5kL3VwIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXRzXG4gICAgICAgICAgICAoeCA8PCAxKSArIChyb3VuZCA/IDEgOiAwKSxcbiAgICAgICAgICAgICh5IDw8IDEpICsgKHVwID8gMSA6IDApLFxuICAgICAgICAgICAgLy8gYV9kYXRhXG4gICAgICAgICAgICAvLyBhZGQgMTI4IHRvIHN0b3JlIGEgYnl0ZSBpbiBhbiB1bnNpZ25lZCBieXRlXG4gICAgICAgICAgICBNYXRoLnJvdW5kKEVYVFJVREVfU0NBTEUgKiBleHRydWRlWCkgKyAxMjgsXG4gICAgICAgICAgICBNYXRoLnJvdW5kKEVYVFJVREVfU0NBTEUgKiBleHRydWRlWSkgKyAxMjgsXG4gICAgICAgICAgICAvLyBFbmNvZGUgdGhlIC0xLzAvMSBkaXJlY3Rpb24gdmFsdWUgaW50byB0aGUgZmlyc3QgdHdvIGJpdHMgb2YgLnogb2YgYV9kYXRhLlxuICAgICAgICAgICAgLy8gQ29tYmluZSBpdCB3aXRoIHRoZSBsb3dlciA2IGJpdHMgb2YgYGxpbmVzb2ZhcmAgKHNoaWZ0ZWQgYnkgMiBiaXRlcyB0byBtYWtlXG4gICAgICAgICAgICAvLyByb29tIGZvciB0aGUgZGlyZWN0aW9uIHZhbHVlKS4gVGhlIHVwcGVyIDggYml0cyBvZiBgbGluZXNvZmFyYCBhcmUgcGxhY2VkIGluXG4gICAgICAgICAgICAvLyB0aGUgYHdgIGNvbXBvbmVudC5cbiAgICAgICAgICAgICgoZGlyID09PSAwID8gMCA6IChkaXIgPCAwID8gLTEgOiAxKSkgKyAxKSB8ICgobGluZXNvZmFyICYgMHgzRikgPDwgMiksXG4gICAgICAgICAgICBsaW5lc29mYXIgPj4gNik7XG5cbiAgICAgICAgY29uc3QgZSA9IHNlZ21lbnQudmVydGV4TGVuZ3RoKys7XG4gICAgICAgIGlmICh0aGlzLmUxID49IDAgJiYgdGhpcy5lMiA+PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2sodGhpcy5lMSwgdGhpcy5lMiwgZSk7XG4gICAgICAgICAgICBzZWdtZW50LnByaW1pdGl2ZUxlbmd0aCsrO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1cCkge1xuICAgICAgICAgICAgdGhpcy5lMiA9IGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmUxID0gZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZVNjYWxlZERpc3RhbmNlKCkge1xuICAgICAgICAvLyBLbm93aW5nIHRoZSByYXRpbyBvZiB0aGUgZnVsbCBsaW5lc3RyaW5nIGNvdmVyZWQgYnkgdGhpcyB0aWxlZCBmZWF0dXJlLCBhcyB3ZWxsXG4gICAgICAgIC8vIGFzIHRoZSB0b3RhbCBkaXN0YW5jZSAoaW4gdGlsZSB1bml0cykgb2YgdGhpcyB0aWxlZCBmZWF0dXJlLCBhbmQgdGhlIGRpc3RhbmNlXG4gICAgICAgIC8vIChpbiB0aWxlIHVuaXRzKSBvZiB0aGUgY3VycmVudCB2ZXJ0ZXgsIHdlIGNhbiBkZXRlcm1pbmUgdGhlIHJlbGF0aXZlIGRpc3RhbmNlXG4gICAgICAgIC8vIG9mIHRoaXMgdmVydGV4IGFsb25nIHRoZSBmdWxsIGxpbmVzdHJpbmcgZmVhdHVyZSBhbmQgc2NhbGUgaXQgdG8gWzAsIDJeMTUpXG4gICAgICAgIHRoaXMuc2NhbGVkRGlzdGFuY2UgPSB0aGlzLnRvdGFsRGlzdGFuY2UgPiAwID9cbiAgICAgICAgICAgICh0aGlzLmNsaXBTdGFydCArICh0aGlzLmNsaXBFbmQgLSB0aGlzLmNsaXBTdGFydCkgKiB0aGlzLmRpc3RhbmNlIC8gdGhpcy50b3RhbERpc3RhbmNlKSAgKiAoTUFYX0xJTkVfRElTVEFOQ0UgLSAxKSA6XG4gICAgICAgICAgICB0aGlzLmRpc3RhbmNlO1xuICAgIH1cblxuICAgIHVwZGF0ZURpc3RhbmNlKHByZXY6IFBvaW50LCBuZXh0OiBQb2ludCkge1xuICAgICAgICB0aGlzLmRpc3RhbmNlICs9IHByZXYuZGlzdChuZXh0KTtcbiAgICAgICAgdGhpcy51cGRhdGVTY2FsZWREaXN0YW5jZSgpO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ0xpbmVCdWNrZXQnLCBMaW5lQnVja2V0LCB7b21pdDogWydsYXllcnMnLCAncGF0dGVybkZlYXR1cmVzJ119KTtcblxuZXhwb3J0IGRlZmF1bHQgTGluZUJ1Y2tldDtcbiIsIi8vIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQuIEVkaXQgYnVpbGQvZ2VuZXJhdGUtc3R5bGUtY29kZS5qcywgdGhlbiBydW4gYHlhcm4gcnVuIGNvZGVnZW5gLlxuLy8gQGZsb3dcbi8qIGVzbGludC1kaXNhYmxlICovXG5cbmltcG9ydCBzdHlsZVNwZWMgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9yZWZlcmVuY2UvbGF0ZXN0JztcblxuaW1wb3J0IHtcbiAgICBQcm9wZXJ0aWVzLFxuICAgIERhdGFDb25zdGFudFByb3BlcnR5LFxuICAgIERhdGFEcml2ZW5Qcm9wZXJ0eSxcbiAgICBDcm9zc0ZhZGVkRGF0YURyaXZlblByb3BlcnR5LFxuICAgIENyb3NzRmFkZWRQcm9wZXJ0eSxcbiAgICBDb2xvclJhbXBQcm9wZXJ0eVxufSBmcm9tICcuLi9wcm9wZXJ0aWVzJztcblxuaW1wb3J0IHR5cGUgQ29sb3IgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy91dGlsL2NvbG9yJztcblxuaW1wb3J0IHR5cGUgRm9ybWF0dGVkIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9mb3JtYXR0ZWQnO1xuXG5pbXBvcnQgdHlwZSBSZXNvbHZlZEltYWdlIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5cbmV4cG9ydCB0eXBlIExheW91dFByb3BzID0ge3xcbiAgICBcImxpbmUtY2FwXCI6IERhdGFDb25zdGFudFByb3BlcnR5PFwiYnV0dFwiIHwgXCJyb3VuZFwiIHwgXCJzcXVhcmVcIj4sXG4gICAgXCJsaW5lLWpvaW5cIjogRGF0YURyaXZlblByb3BlcnR5PFwiYmV2ZWxcIiB8IFwicm91bmRcIiB8IFwibWl0ZXJcIj4sXG4gICAgXCJsaW5lLW1pdGVyLWxpbWl0XCI6IERhdGFDb25zdGFudFByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJsaW5lLXJvdW5kLWxpbWl0XCI6IERhdGFDb25zdGFudFByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJsaW5lLXNvcnQta2V5XCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxufH07XG5cbmNvbnN0IGxheW91dDogUHJvcGVydGllczxMYXlvdXRQcm9wcz4gPSBuZXcgUHJvcGVydGllcyh7XG4gICAgXCJsaW5lLWNhcFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X2xpbmVcIl1bXCJsaW5lLWNhcFwiXSksXG4gICAgXCJsaW5lLWpvaW5cIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfbGluZVwiXVtcImxpbmUtam9pblwiXSksXG4gICAgXCJsaW5lLW1pdGVyLWxpbWl0XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfbGluZVwiXVtcImxpbmUtbWl0ZXItbGltaXRcIl0pLFxuICAgIFwibGluZS1yb3VuZC1saW1pdFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X2xpbmVcIl1bXCJsaW5lLXJvdW5kLWxpbWl0XCJdKSxcbiAgICBcImxpbmUtc29ydC1rZXlcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfbGluZVwiXVtcImxpbmUtc29ydC1rZXlcIl0pLFxufSk7XG5cbmV4cG9ydCB0eXBlIFBhaW50UHJvcHMgPSB7fFxuICAgIFwibGluZS1vcGFjaXR5XCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwibGluZS1jb2xvclwiOiBEYXRhRHJpdmVuUHJvcGVydHk8Q29sb3I+LFxuICAgIFwibGluZS10cmFuc2xhdGVcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8W251bWJlciwgbnVtYmVyXT4sXG4gICAgXCJsaW5lLXRyYW5zbGF0ZS1hbmNob3JcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJtYXBcIiB8IFwidmlld3BvcnRcIj4sXG4gICAgXCJsaW5lLXdpZHRoXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwibGluZS1nYXAtd2lkdGhcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJsaW5lLW9mZnNldFwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcImxpbmUtYmx1clwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcImxpbmUtZGFzaGFycmF5XCI6IENyb3NzRmFkZWRQcm9wZXJ0eTxBcnJheTxudW1iZXI+PixcbiAgICBcImxpbmUtcGF0dGVyblwiOiBDcm9zc0ZhZGVkRGF0YURyaXZlblByb3BlcnR5PFJlc29sdmVkSW1hZ2U+LFxuICAgIFwibGluZS1ncmFkaWVudFwiOiBDb2xvclJhbXBQcm9wZXJ0eSxcbnx9O1xuXG5jb25zdCBwYWludDogUHJvcGVydGllczxQYWludFByb3BzPiA9IG5ldyBQcm9wZXJ0aWVzKHtcbiAgICBcImxpbmUtb3BhY2l0eVwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2xpbmVcIl1bXCJsaW5lLW9wYWNpdHlcIl0pLFxuICAgIFwibGluZS1jb2xvclwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2xpbmVcIl1bXCJsaW5lLWNvbG9yXCJdKSxcbiAgICBcImxpbmUtdHJhbnNsYXRlXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9saW5lXCJdW1wibGluZS10cmFuc2xhdGVcIl0pLFxuICAgIFwibGluZS10cmFuc2xhdGUtYW5jaG9yXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9saW5lXCJdW1wibGluZS10cmFuc2xhdGUtYW5jaG9yXCJdKSxcbiAgICBcImxpbmUtd2lkdGhcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9saW5lXCJdW1wibGluZS13aWR0aFwiXSksXG4gICAgXCJsaW5lLWdhcC13aWR0aFwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2xpbmVcIl1bXCJsaW5lLWdhcC13aWR0aFwiXSksXG4gICAgXCJsaW5lLW9mZnNldFwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2xpbmVcIl1bXCJsaW5lLW9mZnNldFwiXSksXG4gICAgXCJsaW5lLWJsdXJcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9saW5lXCJdW1wibGluZS1ibHVyXCJdKSxcbiAgICBcImxpbmUtZGFzaGFycmF5XCI6IG5ldyBDcm9zc0ZhZGVkUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfbGluZVwiXVtcImxpbmUtZGFzaGFycmF5XCJdKSxcbiAgICBcImxpbmUtcGF0dGVyblwiOiBuZXcgQ3Jvc3NGYWRlZERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9saW5lXCJdW1wibGluZS1wYXR0ZXJuXCJdKSxcbiAgICBcImxpbmUtZ3JhZGllbnRcIjogbmV3IENvbG9yUmFtcFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2xpbmVcIl1bXCJsaW5lLWdyYWRpZW50XCJdKSxcbn0pO1xuXG4vLyBOb3RlOiB3aXRob3V0IGFkZGluZyB0aGUgZXhwbGljaXQgdHlwZSBhbm5vdGF0aW9uLCBGbG93IGluZmVycyB3ZWFrZXIgdHlwZXNcbi8vIGZvciB0aGVzZSBvYmplY3RzIGZyb20gdGhlaXIgdXNlIGluIHRoZSBjb25zdHJ1Y3RvciB0byBTdHlsZUxheWVyLCBhc1xuLy8ge2xheW91dD86IFByb3BlcnRpZXM8Li4uPiwgcGFpbnQ6IFByb3BlcnRpZXM8Li4uPn1cbmV4cG9ydCBkZWZhdWx0ICh7IHBhaW50LCBsYXlvdXQgfTogJEV4YWN0PHtcbiAgcGFpbnQ6IFByb3BlcnRpZXM8UGFpbnRQcm9wcz4sIGxheW91dDogUHJvcGVydGllczxMYXlvdXRQcm9wcz5cbn0+KTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcblxuaW1wb3J0IFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGVfbGF5ZXInO1xuaW1wb3J0IExpbmVCdWNrZXQgZnJvbSAnLi4vLi4vZGF0YS9idWNrZXQvbGluZV9idWNrZXQnO1xuaW1wb3J0IHtSR0JBSW1hZ2V9IGZyb20gJy4uLy4uL3V0aWwvaW1hZ2UnO1xuaW1wb3J0IHtwb2x5Z29uSW50ZXJzZWN0c0J1ZmZlcmVkTXVsdGlMaW5lfSBmcm9tICcuLi8uLi91dGlsL2ludGVyc2VjdGlvbl90ZXN0cyc7XG5pbXBvcnQge2dldE1heGltdW1QYWludFZhbHVlLCB0cmFuc2xhdGVEaXN0YW5jZSwgdHJhbnNsYXRlfSBmcm9tICcuLi9xdWVyeV91dGlscyc7XG5pbXBvcnQgcHJvcGVydGllcyBmcm9tICcuL2xpbmVfc3R5bGVfbGF5ZXJfcHJvcGVydGllcyc7XG5pbXBvcnQge2V4dGVuZH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCBFdmFsdWF0aW9uUGFyYW1ldGVycyBmcm9tICcuLi9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuaW1wb3J0IHJlbmRlckNvbG9yUmFtcCBmcm9tICcuLi8uLi91dGlsL2NvbG9yX3JhbXAnO1xuaW1wb3J0IHtUcmFuc2l0aW9uYWJsZSwgVHJhbnNpdGlvbmluZywgTGF5b3V0LCBQb3NzaWJseUV2YWx1YXRlZCwgRGF0YURyaXZlblByb3BlcnR5fSBmcm9tICcuLi9wcm9wZXJ0aWVzJztcblxuaW1wb3J0IHR5cGUge0ZlYXR1cmVTdGF0ZX0gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uJztcbmltcG9ydCB0eXBlIHtCdWNrZXQsIEJ1Y2tldFBhcmFtZXRlcnN9IGZyb20gJy4uLy4uL2RhdGEvYnVja2V0JztcbmltcG9ydCB0eXBlIHtMYXlvdXRQcm9wcywgUGFpbnRQcm9wc30gZnJvbSAnLi9saW5lX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuaW1wb3J0IHR5cGUgVHJhbnNmb3JtIGZyb20gJy4uLy4uL2dlby90cmFuc2Zvcm0nO1xuaW1wb3J0IHR5cGUgVGV4dHVyZSBmcm9tICcuLi8uLi9yZW5kZXIvdGV4dHVyZSc7XG5pbXBvcnQgdHlwZSB7TGF5ZXJTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuY2xhc3MgTGluZUZsb29yd2lkdGhQcm9wZXJ0eSBleHRlbmRzIERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+IHtcbiAgICB1c2VJbnRlZ2VyWm9vbTogdHJ1ZTtcblxuICAgIHBvc3NpYmx5RXZhbHVhdGUodmFsdWUsIHBhcmFtZXRlcnMpIHtcbiAgICAgICAgcGFyYW1ldGVycyA9IG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyhNYXRoLmZsb29yKHBhcmFtZXRlcnMuem9vbSksIHtcbiAgICAgICAgICAgIG5vdzogcGFyYW1ldGVycy5ub3csXG4gICAgICAgICAgICBmYWRlRHVyYXRpb246IHBhcmFtZXRlcnMuZmFkZUR1cmF0aW9uLFxuICAgICAgICAgICAgem9vbUhpc3Rvcnk6IHBhcmFtZXRlcnMuem9vbUhpc3RvcnksXG4gICAgICAgICAgICB0cmFuc2l0aW9uOiBwYXJhbWV0ZXJzLnRyYW5zaXRpb25cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdXBlci5wb3NzaWJseUV2YWx1YXRlKHZhbHVlLCBwYXJhbWV0ZXJzKTtcbiAgICB9XG5cbiAgICBldmFsdWF0ZSh2YWx1ZSwgZ2xvYmFscywgZmVhdHVyZSwgZmVhdHVyZVN0YXRlKSB7XG4gICAgICAgIGdsb2JhbHMgPSBleHRlbmQoe30sIGdsb2JhbHMsIHt6b29tOiBNYXRoLmZsb29yKGdsb2JhbHMuem9vbSl9KTtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmV2YWx1YXRlKHZhbHVlLCBnbG9iYWxzLCBmZWF0dXJlLCBmZWF0dXJlU3RhdGUpO1xuICAgIH1cbn1cblxuY29uc3QgbGluZUZsb29yd2lkdGhQcm9wZXJ0eSA9IG5ldyBMaW5lRmxvb3J3aWR0aFByb3BlcnR5KHByb3BlcnRpZXMucGFpbnQucHJvcGVydGllc1snbGluZS13aWR0aCddLnNwZWNpZmljYXRpb24pO1xubGluZUZsb29yd2lkdGhQcm9wZXJ0eS51c2VJbnRlZ2VyWm9vbSA9IHRydWU7XG5cbmNsYXNzIExpbmVTdHlsZUxheWVyIGV4dGVuZHMgU3R5bGVMYXllciB7XG4gICAgX3VuZXZhbHVhdGVkTGF5b3V0OiBMYXlvdXQ8TGF5b3V0UHJvcHM+O1xuICAgIGxheW91dDogUG9zc2libHlFdmFsdWF0ZWQ8TGF5b3V0UHJvcHM+O1xuXG4gICAgZ3JhZGllbnQ6ID9SR0JBSW1hZ2U7XG4gICAgZ3JhZGllbnRUZXh0dXJlOiA/VGV4dHVyZTtcblxuICAgIF90cmFuc2l0aW9uYWJsZVBhaW50OiBUcmFuc2l0aW9uYWJsZTxQYWludFByb3BzPjtcbiAgICBfdHJhbnNpdGlvbmluZ1BhaW50OiBUcmFuc2l0aW9uaW5nPFBhaW50UHJvcHM+O1xuICAgIHBhaW50OiBQb3NzaWJseUV2YWx1YXRlZDxQYWludFByb3BzPjtcblxuICAgIGNvbnN0cnVjdG9yKGxheWVyOiBMYXllclNwZWNpZmljYXRpb24pIHtcbiAgICAgICAgc3VwZXIobGF5ZXIsIHByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIF9oYW5kbGVTcGVjaWFsUGFpbnRQcm9wZXJ0eVVwZGF0ZShuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKG5hbWUgPT09ICdsaW5lLWdyYWRpZW50Jykge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlR3JhZGllbnQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF91cGRhdGVHcmFkaWVudCgpIHtcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbiA9IHRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuX3ZhbHVlc1snbGluZS1ncmFkaWVudCddLnZhbHVlLmV4cHJlc3Npb247XG4gICAgICAgIHRoaXMuZ3JhZGllbnQgPSByZW5kZXJDb2xvclJhbXAoZXhwcmVzc2lvbiwgJ2xpbmVQcm9ncmVzcycpO1xuICAgICAgICB0aGlzLmdyYWRpZW50VGV4dHVyZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmVjYWxjdWxhdGUocGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMsIGF2YWlsYWJsZUltYWdlczogQXJyYXk8c3RyaW5nPikge1xuICAgICAgICBzdXBlci5yZWNhbGN1bGF0ZShwYXJhbWV0ZXJzLCBhdmFpbGFibGVJbWFnZXMpO1xuXG4gICAgICAgICh0aGlzLnBhaW50Ll92YWx1ZXM6IGFueSlbJ2xpbmUtZmxvb3J3aWR0aCddID1cbiAgICAgICAgICAgIGxpbmVGbG9vcndpZHRoUHJvcGVydHkucG9zc2libHlFdmFsdWF0ZSh0aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQuX3ZhbHVlc1snbGluZS13aWR0aCddLnZhbHVlLCBwYXJhbWV0ZXJzKTtcbiAgICB9XG5cbiAgICBjcmVhdGVCdWNrZXQocGFyYW1ldGVyczogQnVja2V0UGFyYW1ldGVyczwqPikge1xuICAgICAgICByZXR1cm4gbmV3IExpbmVCdWNrZXQocGFyYW1ldGVycyk7XG4gICAgfVxuXG4gICAgcXVlcnlSYWRpdXMoYnVja2V0OiBCdWNrZXQpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBsaW5lQnVja2V0OiBMaW5lQnVja2V0ID0gKGJ1Y2tldDogYW55KTtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBnZXRMaW5lV2lkdGgoXG4gICAgICAgICAgICBnZXRNYXhpbXVtUGFpbnRWYWx1ZSgnbGluZS13aWR0aCcsIHRoaXMsIGxpbmVCdWNrZXQpLFxuICAgICAgICAgICAgZ2V0TWF4aW11bVBhaW50VmFsdWUoJ2xpbmUtZ2FwLXdpZHRoJywgdGhpcywgbGluZUJ1Y2tldCkpO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBnZXRNYXhpbXVtUGFpbnRWYWx1ZSgnbGluZS1vZmZzZXQnLCB0aGlzLCBsaW5lQnVja2V0KTtcbiAgICAgICAgcmV0dXJuIHdpZHRoIC8gMiArIE1hdGguYWJzKG9mZnNldCkgKyB0cmFuc2xhdGVEaXN0YW5jZSh0aGlzLnBhaW50LmdldCgnbGluZS10cmFuc2xhdGUnKSk7XG4gICAgfVxuXG4gICAgcXVlcnlJbnRlcnNlY3RzRmVhdHVyZShxdWVyeUdlb21ldHJ5OiBBcnJheTxQb2ludD4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlOiBWZWN0b3JUaWxlRmVhdHVyZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVTdGF0ZTogRmVhdHVyZVN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnk6IEFycmF5PEFycmF5PFBvaW50Pj4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB6b29tOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IFRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsc1RvVGlsZVVuaXRzOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdHJhbnNsYXRlZFBvbHlnb24gPSB0cmFuc2xhdGUocXVlcnlHZW9tZXRyeSxcbiAgICAgICAgICAgIHRoaXMucGFpbnQuZ2V0KCdsaW5lLXRyYW5zbGF0ZScpLFxuICAgICAgICAgICAgdGhpcy5wYWludC5nZXQoJ2xpbmUtdHJhbnNsYXRlLWFuY2hvcicpLFxuICAgICAgICAgICAgdHJhbnNmb3JtLmFuZ2xlLCBwaXhlbHNUb1RpbGVVbml0cyk7XG4gICAgICAgIGNvbnN0IGhhbGZXaWR0aCA9IHBpeGVsc1RvVGlsZVVuaXRzIC8gMiAqIGdldExpbmVXaWR0aChcbiAgICAgICAgICAgIHRoaXMucGFpbnQuZ2V0KCdsaW5lLXdpZHRoJykuZXZhbHVhdGUoZmVhdHVyZSwgZmVhdHVyZVN0YXRlKSxcbiAgICAgICAgICAgIHRoaXMucGFpbnQuZ2V0KCdsaW5lLWdhcC13aWR0aCcpLmV2YWx1YXRlKGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSkpO1xuICAgICAgICBjb25zdCBsaW5lT2Zmc2V0ID0gdGhpcy5wYWludC5nZXQoJ2xpbmUtb2Zmc2V0JykuZXZhbHVhdGUoZmVhdHVyZSwgZmVhdHVyZVN0YXRlKTtcbiAgICAgICAgaWYgKGxpbmVPZmZzZXQpIHtcbiAgICAgICAgICAgIGdlb21ldHJ5ID0gb2Zmc2V0TGluZShnZW9tZXRyeSwgbGluZU9mZnNldCAqIHBpeGVsc1RvVGlsZVVuaXRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwb2x5Z29uSW50ZXJzZWN0c0J1ZmZlcmVkTXVsdGlMaW5lKHRyYW5zbGF0ZWRQb2x5Z29uLCBnZW9tZXRyeSwgaGFsZldpZHRoKTtcbiAgICB9XG5cbiAgICBpc1RpbGVDbGlwcGVkKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpbmVTdHlsZUxheWVyO1xuXG5mdW5jdGlvbiBnZXRMaW5lV2lkdGgobGluZVdpZHRoLCBsaW5lR2FwV2lkdGgpIHtcbiAgICBpZiAobGluZUdhcFdpZHRoID4gMCkge1xuICAgICAgICByZXR1cm4gbGluZUdhcFdpZHRoICsgMiAqIGxpbmVXaWR0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbGluZVdpZHRoO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gb2Zmc2V0TGluZShyaW5ncywgb2Zmc2V0KSB7XG4gICAgY29uc3QgbmV3UmluZ3MgPSBbXTtcbiAgICBjb25zdCB6ZXJvID0gbmV3IFBvaW50KDAsIDApO1xuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgcmluZ3MubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgY29uc3QgcmluZyA9IHJpbmdzW2tdO1xuICAgICAgICBjb25zdCBuZXdSaW5nID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgYSA9IHJpbmdbaSAtIDFdO1xuICAgICAgICAgICAgY29uc3QgYiA9IHJpbmdbaV07XG4gICAgICAgICAgICBjb25zdCBjID0gcmluZ1tpICsgMV07XG4gICAgICAgICAgICBjb25zdCBhVG9CID0gaSA9PT0gMCA/IHplcm8gOiBiLnN1YihhKS5fdW5pdCgpLl9wZXJwKCk7XG4gICAgICAgICAgICBjb25zdCBiVG9DID0gaSA9PT0gcmluZy5sZW5ndGggLSAxID8gemVybyA6IGMuc3ViKGIpLl91bml0KCkuX3BlcnAoKTtcbiAgICAgICAgICAgIGNvbnN0IGV4dHJ1ZGUgPSBhVG9CLl9hZGQoYlRvQykuX3VuaXQoKTtcblxuICAgICAgICAgICAgY29uc3QgY29zSGFsZkFuZ2xlID0gZXh0cnVkZS54ICogYlRvQy54ICsgZXh0cnVkZS55ICogYlRvQy55O1xuICAgICAgICAgICAgZXh0cnVkZS5fbXVsdCgxIC8gY29zSGFsZkFuZ2xlKTtcblxuICAgICAgICAgICAgbmV3UmluZy5wdXNoKGV4dHJ1ZGUuX211bHQob2Zmc2V0KS5fYWRkKGIpKTtcbiAgICAgICAgfVxuICAgICAgICBuZXdSaW5ncy5wdXNoKG5ld1JpbmcpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3UmluZ3M7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2NyZWF0ZUxheW91dH0gZnJvbSAnLi4vLi4vdXRpbC9zdHJ1Y3RfYXJyYXknO1xuXG5leHBvcnQgY29uc3Qgc3ltYm9sTGF5b3V0QXR0cmlidXRlcyA9IGNyZWF0ZUxheW91dChbXG4gICAge25hbWU6ICdhX3Bvc19vZmZzZXQnLCAgY29tcG9uZW50czogNCwgdHlwZTogJ0ludDE2J30sXG4gICAge25hbWU6ICdhX2RhdGEnLCAgICAgICAgY29tcG9uZW50czogNCwgdHlwZTogJ1VpbnQxNid9LFxuICAgIHtuYW1lOiAnYV9waXhlbG9mZnNldCcsICAgICAgICBjb21wb25lbnRzOiA0LCB0eXBlOiAnSW50MTYnfVxuXSwgNCk7XG5cbmV4cG9ydCBjb25zdCBkeW5hbWljTGF5b3V0QXR0cmlidXRlcyA9IGNyZWF0ZUxheW91dChbXG4gICAge25hbWU6ICdhX3Byb2plY3RlZF9wb3MnLCBjb21wb25lbnRzOiAzLCB0eXBlOiAnRmxvYXQzMid9XG5dLCA0KTtcblxuZXhwb3J0IGNvbnN0IHBsYWNlbWVudE9wYWNpdHlBdHRyaWJ1dGVzID0gY3JlYXRlTGF5b3V0KFtcbiAgICB7bmFtZTogJ2FfZmFkZV9vcGFjaXR5JywgY29tcG9uZW50czogMSwgdHlwZTogJ1VpbnQzMid9XG5dLCA0KTtcblxuZXhwb3J0IGNvbnN0IGNvbGxpc2lvblZlcnRleEF0dHJpYnV0ZXMgPSBjcmVhdGVMYXlvdXQoW1xuICAgIHtuYW1lOiAnYV9wbGFjZWQnLCBjb21wb25lbnRzOiAyLCB0eXBlOiAnVWludDgnfSxcbiAgICB7bmFtZTogJ2Ffc2hpZnQnLCBjb21wb25lbnRzOiAyLCB0eXBlOiAnRmxvYXQzMid9XG5dKTtcblxuZXhwb3J0IGNvbnN0IGNvbGxpc2lvbkJveCA9IGNyZWF0ZUxheW91dChbXG4gICAgLy8gdGhlIGJveCBpcyBjZW50ZXJlZCBhcm91bmQgdGhlIGFuY2hvciBwb2ludFxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAnYW5jaG9yUG9pbnRYJ30sXG4gICAge3R5cGU6ICdJbnQxNicsIG5hbWU6ICdhbmNob3JQb2ludFknfSxcblxuICAgIC8vIGRpc3RhbmNlcyB0byB0aGUgZWRnZXMgZnJvbSB0aGUgYW5jaG9yXG4gICAge3R5cGU6ICdJbnQxNicsIG5hbWU6ICd4MSd9LFxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAneTEnfSxcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ3gyJ30sXG4gICAge3R5cGU6ICdJbnQxNicsIG5hbWU6ICd5Mid9LFxuXG4gICAgLy8gdGhlIGluZGV4IG9mIHRoZSBmZWF0dXJlIGluIHRoZSBvcmlnaW5hbCB2ZWN0b3J0aWxlXG4gICAge3R5cGU6ICdVaW50MzInLCBuYW1lOiAnZmVhdHVyZUluZGV4J30sXG4gICAgLy8gdGhlIHNvdXJjZSBsYXllciB0aGUgZmVhdHVyZSBhcHBlYXJzIGluXG4gICAge3R5cGU6ICdVaW50MTYnLCBuYW1lOiAnc291cmNlTGF5ZXJJbmRleCd9LFxuICAgIC8vIHRoZSBidWNrZXQgdGhlIGZlYXR1cmUgYXBwZWFycyBpblxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ2J1Y2tldEluZGV4J30sXG5dKTtcblxuZXhwb3J0IGNvbnN0IGNvbGxpc2lvbkJveExheW91dCA9IGNyZWF0ZUxheW91dChbIC8vIHVzZWQgdG8gcmVuZGVyIGNvbGxpc2lvbiBib3hlcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzXG4gICAge25hbWU6ICdhX3BvcycsICAgICAgICBjb21wb25lbnRzOiAyLCB0eXBlOiAnSW50MTYnfSxcbiAgICB7bmFtZTogJ2FfYW5jaG9yX3BvcycsIGNvbXBvbmVudHM6IDIsIHR5cGU6ICdJbnQxNid9LFxuICAgIHtuYW1lOiAnYV9leHRydWRlJywgICAgY29tcG9uZW50czogMiwgdHlwZTogJ0ludDE2J31cbl0sIDQpO1xuXG5leHBvcnQgY29uc3QgY29sbGlzaW9uQ2lyY2xlTGF5b3V0ID0gY3JlYXRlTGF5b3V0KFsgLy8gdXNlZCB0byByZW5kZXIgY29sbGlzaW9uIGNpcmNsZXMgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlc1xuICAgIHtuYW1lOiAnYV9wb3MnLCAgICAgICAgY29tcG9uZW50czogMiwgdHlwZTogJ0Zsb2F0MzInfSxcbiAgICB7bmFtZTogJ2FfcmFkaXVzJywgICAgIGNvbXBvbmVudHM6IDEsIHR5cGU6ICdGbG9hdDMyJ30sXG4gICAge25hbWU6ICdhX2ZsYWdzJywgICAgICBjb21wb25lbnRzOiAyLCB0eXBlOiAnSW50MTYnfVxuXSwgNCk7XG5cbmV4cG9ydCBjb25zdCBxdWFkVHJpYW5nbGUgPSBjcmVhdGVMYXlvdXQoW1xuICAgIHtuYW1lOiAndHJpYW5nbGUnLCBjb21wb25lbnRzOiAzLCB0eXBlOiAnVWludDE2J30sXG5dKTtcblxuZXhwb3J0IGNvbnN0IHBsYWNlbWVudCA9IGNyZWF0ZUxheW91dChbXG4gICAge3R5cGU6ICdJbnQxNicsIG5hbWU6ICdhbmNob3JYJ30sXG4gICAge3R5cGU6ICdJbnQxNicsIG5hbWU6ICdhbmNob3JZJ30sXG4gICAge3R5cGU6ICdVaW50MTYnLCBuYW1lOiAnZ2x5cGhTdGFydEluZGV4J30sXG4gICAge3R5cGU6ICdVaW50MTYnLCBuYW1lOiAnbnVtR2x5cGhzJ30sXG4gICAge3R5cGU6ICdVaW50MzInLCBuYW1lOiAndmVydGV4U3RhcnRJbmRleCd9LFxuICAgIHt0eXBlOiAnVWludDMyJywgbmFtZTogJ2xpbmVTdGFydEluZGV4J30sXG4gICAge3R5cGU6ICdVaW50MzInLCBuYW1lOiAnbGluZUxlbmd0aCd9LFxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ3NlZ21lbnQnfSxcbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICdsb3dlclNpemUnfSxcbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICd1cHBlclNpemUnfSxcbiAgICB7dHlwZTogJ0Zsb2F0MzInLCBuYW1lOiAnbGluZU9mZnNldFgnfSxcbiAgICB7dHlwZTogJ0Zsb2F0MzInLCBuYW1lOiAnbGluZU9mZnNldFknfSxcbiAgICB7dHlwZTogJ1VpbnQ4JywgbmFtZTogJ3dyaXRpbmdNb2RlJ30sXG4gICAge3R5cGU6ICdVaW50OCcsIG5hbWU6ICdwbGFjZWRPcmllbnRhdGlvbid9LFxuICAgIHt0eXBlOiAnVWludDgnLCBuYW1lOiAnaGlkZGVuJ30sXG4gICAge3R5cGU6ICdVaW50MzInLCBuYW1lOiAnY3Jvc3NUaWxlSUQnfSxcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ2Fzc29jaWF0ZWRJY29uSW5kZXgnfVxuXSk7XG5cbmV4cG9ydCBjb25zdCBzeW1ib2xJbnN0YW5jZSA9IGNyZWF0ZUxheW91dChbXG4gICAge3R5cGU6ICdJbnQxNicsIG5hbWU6ICdhbmNob3JYJ30sXG4gICAge3R5cGU6ICdJbnQxNicsIG5hbWU6ICdhbmNob3JZJ30sXG4gICAge3R5cGU6ICdJbnQxNicsIG5hbWU6ICdyaWdodEp1c3RpZmllZFRleHRTeW1ib2xJbmRleCd9LFxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAnY2VudGVySnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4J30sXG4gICAge3R5cGU6ICdJbnQxNicsIG5hbWU6ICdsZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4J30sXG4gICAge3R5cGU6ICdJbnQxNicsIG5hbWU6ICd2ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleCd9LFxuICAgIHt0eXBlOiAnSW50MTYnLCBuYW1lOiAncGxhY2VkSWNvblN5bWJvbEluZGV4J30sXG4gICAge3R5cGU6ICdJbnQxNicsIG5hbWU6ICd2ZXJ0aWNhbFBsYWNlZEljb25TeW1ib2xJbmRleCd9LFxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ2tleSd9LFxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ3RleHRCb3hTdGFydEluZGV4J30sXG4gICAge3R5cGU6ICdVaW50MTYnLCBuYW1lOiAndGV4dEJveEVuZEluZGV4J30sXG4gICAge3R5cGU6ICdVaW50MTYnLCBuYW1lOiAndmVydGljYWxUZXh0Qm94U3RhcnRJbmRleCd9LFxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ3ZlcnRpY2FsVGV4dEJveEVuZEluZGV4J30sXG4gICAge3R5cGU6ICdVaW50MTYnLCBuYW1lOiAnaWNvbkJveFN0YXJ0SW5kZXgnfSxcbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICdpY29uQm94RW5kSW5kZXgnfSxcbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICd2ZXJ0aWNhbEljb25Cb3hTdGFydEluZGV4J30sXG4gICAge3R5cGU6ICdVaW50MTYnLCBuYW1lOiAndmVydGljYWxJY29uQm94RW5kSW5kZXgnfSxcbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICdmZWF0dXJlSW5kZXgnfSxcbiAgICB7dHlwZTogJ1VpbnQxNicsIG5hbWU6ICdudW1Ib3Jpem9udGFsR2x5cGhWZXJ0aWNlcyd9LFxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ251bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcyd9LFxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ251bUljb25WZXJ0aWNlcyd9LFxuICAgIHt0eXBlOiAnVWludDE2JywgbmFtZTogJ251bVZlcnRpY2FsSWNvblZlcnRpY2VzJ30sXG4gICAge3R5cGU6ICdVaW50MTYnLCBuYW1lOiAndXNlUnVudGltZUNvbGxpc2lvbkNpcmNsZXMnfSxcbiAgICB7dHlwZTogJ1VpbnQzMicsIG5hbWU6ICdjcm9zc1RpbGVJRCd9LFxuICAgIHt0eXBlOiAnRmxvYXQzMicsIG5hbWU6ICd0ZXh0Qm94U2NhbGUnfSxcbiAgICB7dHlwZTogJ0Zsb2F0MzInLCBjb21wb25lbnRzOiAyLCBuYW1lOiAndGV4dE9mZnNldCd9LFxuICAgIHt0eXBlOiAnRmxvYXQzMicsIG5hbWU6ICdjb2xsaXNpb25DaXJjbGVEaWFtZXRlcid9LFxuXSk7XG5cbmV4cG9ydCBjb25zdCBnbHlwaE9mZnNldCA9IGNyZWF0ZUxheW91dChbXG4gICAge3R5cGU6ICdGbG9hdDMyJywgbmFtZTogJ29mZnNldFgnfVxuXSk7XG5cbmV4cG9ydCBjb25zdCBsaW5lVmVydGV4ID0gY3JlYXRlTGF5b3V0KFtcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ3gnfSxcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ3knfSxcbiAgICB7dHlwZTogJ0ludDE2JywgbmFtZTogJ3RpbGVVbml0RGlzdGFuY2VGcm9tQW5jaG9yJ31cbl0pO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtwbHVnaW4gYXMgcnRsVGV4dFBsdWdpbn0gZnJvbSAnLi4vc291cmNlL3J0bF90ZXh0X3BsdWdpbic7XG5cbmltcG9ydCB0eXBlIFN5bWJvbFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXIvc3ltYm9sX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIHtGZWF0dXJlfSBmcm9tICcuLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24nO1xuaW1wb3J0IEZvcm1hdHRlZCBmcm9tICcuLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvZm9ybWF0dGVkJztcblxuZnVuY3Rpb24gdHJhbnNmb3JtVGV4dCh0ZXh0OiBzdHJpbmcsIGxheWVyOiBTeW1ib2xTdHlsZUxheWVyLCBmZWF0dXJlOiBGZWF0dXJlKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gbGF5ZXIubGF5b3V0LmdldCgndGV4dC10cmFuc2Zvcm0nKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSk7XG4gICAgaWYgKHRyYW5zZm9ybSA9PT0gJ3VwcGVyY2FzZScpIHtcbiAgICAgICAgdGV4dCA9IHRleHQudG9Mb2NhbGVVcHBlckNhc2UoKTtcbiAgICB9IGVsc2UgaWYgKHRyYW5zZm9ybSA9PT0gJ2xvd2VyY2FzZScpIHtcbiAgICAgICAgdGV4dCA9IHRleHQudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBpZiAocnRsVGV4dFBsdWdpbi5hcHBseUFyYWJpY1NoYXBpbmcpIHtcbiAgICAgICAgdGV4dCA9IHJ0bFRleHRQbHVnaW4uYXBwbHlBcmFiaWNTaGFwaW5nKHRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXh0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0ZXh0OiBGb3JtYXR0ZWQsIGxheWVyOiBTeW1ib2xTdHlsZUxheWVyLCBmZWF0dXJlOiBGZWF0dXJlKTogRm9ybWF0dGVkIHtcbiAgICB0ZXh0LnNlY3Rpb25zLmZvckVhY2goc2VjdGlvbiA9PiB7XG4gICAgICAgIHNlY3Rpb24udGV4dCA9IHRyYW5zZm9ybVRleHQoc2VjdGlvbi50ZXh0LCBsYXllciwgZmVhdHVyZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRleHQ7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgdHlwZSB7U3ltYm9sRmVhdHVyZX0gZnJvbSAnLi4vZGF0YS9idWNrZXQvc3ltYm9sX2J1Y2tldCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChmZWF0dXJlczogQXJyYXk8U3ltYm9sRmVhdHVyZT4pOiBBcnJheTxTeW1ib2xGZWF0dXJlPiB7XG4gICAgY29uc3QgbGVmdEluZGV4OiB7W186IHN0cmluZ106IG51bWJlcn0gPSB7fTtcbiAgICBjb25zdCByaWdodEluZGV4OiB7W186IHN0cmluZ106IG51bWJlcn0gPSB7fTtcbiAgICBjb25zdCBtZXJnZWRGZWF0dXJlcyA9IFtdO1xuICAgIGxldCBtZXJnZWRJbmRleCA9IDA7XG5cbiAgICBmdW5jdGlvbiBhZGQoaykge1xuICAgICAgICBtZXJnZWRGZWF0dXJlcy5wdXNoKGZlYXR1cmVzW2tdKTtcbiAgICAgICAgbWVyZ2VkSW5kZXgrKztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtZXJnZUZyb21SaWdodChsZWZ0S2V5OiBzdHJpbmcsIHJpZ2h0S2V5OiBzdHJpbmcsIGdlb20pIHtcbiAgICAgICAgY29uc3QgaSA9IHJpZ2h0SW5kZXhbbGVmdEtleV07XG4gICAgICAgIGRlbGV0ZSByaWdodEluZGV4W2xlZnRLZXldO1xuICAgICAgICByaWdodEluZGV4W3JpZ2h0S2V5XSA9IGk7XG5cbiAgICAgICAgbWVyZ2VkRmVhdHVyZXNbaV0uZ2VvbWV0cnlbMF0ucG9wKCk7XG4gICAgICAgIG1lcmdlZEZlYXR1cmVzW2ldLmdlb21ldHJ5WzBdID0gbWVyZ2VkRmVhdHVyZXNbaV0uZ2VvbWV0cnlbMF0uY29uY2F0KGdlb21bMF0pO1xuICAgICAgICByZXR1cm4gaTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtZXJnZUZyb21MZWZ0KGxlZnRLZXk6IHN0cmluZywgcmlnaHRLZXk6IHN0cmluZywgZ2VvbSkge1xuICAgICAgICBjb25zdCBpID0gbGVmdEluZGV4W3JpZ2h0S2V5XTtcbiAgICAgICAgZGVsZXRlIGxlZnRJbmRleFtyaWdodEtleV07XG4gICAgICAgIGxlZnRJbmRleFtsZWZ0S2V5XSA9IGk7XG5cbiAgICAgICAgbWVyZ2VkRmVhdHVyZXNbaV0uZ2VvbWV0cnlbMF0uc2hpZnQoKTtcbiAgICAgICAgbWVyZ2VkRmVhdHVyZXNbaV0uZ2VvbWV0cnlbMF0gPSBnZW9tWzBdLmNvbmNhdChtZXJnZWRGZWF0dXJlc1tpXS5nZW9tZXRyeVswXSk7XG4gICAgICAgIHJldHVybiBpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEtleSh0ZXh0LCBnZW9tLCBvblJpZ2h0KSB7XG4gICAgICAgIGNvbnN0IHBvaW50ID0gb25SaWdodCA/IGdlb21bMF1bZ2VvbVswXS5sZW5ndGggLSAxXSA6IGdlb21bMF1bMF07XG4gICAgICAgIHJldHVybiBgJHt0ZXh0fToke3BvaW50Lnh9OiR7cG9pbnQueX1gO1xuICAgIH1cblxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgZmVhdHVyZXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgY29uc3QgZmVhdHVyZSA9IGZlYXR1cmVzW2tdO1xuICAgICAgICBjb25zdCBnZW9tID0gZmVhdHVyZS5nZW9tZXRyeTtcbiAgICAgICAgY29uc3QgdGV4dCA9IGZlYXR1cmUudGV4dCA/IGZlYXR1cmUudGV4dC50b1N0cmluZygpIDogbnVsbDtcblxuICAgICAgICBpZiAoIXRleHQpIHtcbiAgICAgICAgICAgIGFkZChrKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGVmdEtleSA9IGdldEtleSh0ZXh0LCBnZW9tKSxcbiAgICAgICAgICAgIHJpZ2h0S2V5ID0gZ2V0S2V5KHRleHQsIGdlb20sIHRydWUpO1xuXG4gICAgICAgIGlmICgobGVmdEtleSBpbiByaWdodEluZGV4KSAmJiAocmlnaHRLZXkgaW4gbGVmdEluZGV4KSAmJiAocmlnaHRJbmRleFtsZWZ0S2V5XSAhPT0gbGVmdEluZGV4W3JpZ2h0S2V5XSkpIHtcbiAgICAgICAgICAgIC8vIGZvdW5kIGxpbmVzIHdpdGggdGhlIHNhbWUgdGV4dCBhZGphY2VudCB0byBib3RoIGVuZHMgb2YgdGhlIGN1cnJlbnQgbGluZSwgbWVyZ2UgYWxsIHRocmVlXG4gICAgICAgICAgICBjb25zdCBqID0gbWVyZ2VGcm9tTGVmdChsZWZ0S2V5LCByaWdodEtleSwgZ2VvbSk7XG4gICAgICAgICAgICBjb25zdCBpID0gbWVyZ2VGcm9tUmlnaHQobGVmdEtleSwgcmlnaHRLZXksIG1lcmdlZEZlYXR1cmVzW2pdLmdlb21ldHJ5KTtcblxuICAgICAgICAgICAgZGVsZXRlIGxlZnRJbmRleFtsZWZ0S2V5XTtcbiAgICAgICAgICAgIGRlbGV0ZSByaWdodEluZGV4W3JpZ2h0S2V5XTtcblxuICAgICAgICAgICAgcmlnaHRJbmRleFtnZXRLZXkodGV4dCwgbWVyZ2VkRmVhdHVyZXNbaV0uZ2VvbWV0cnksIHRydWUpXSA9IGk7XG4gICAgICAgICAgICBtZXJnZWRGZWF0dXJlc1tqXS5nZW9tZXRyeSA9IChudWxsOiBhbnkpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAobGVmdEtleSBpbiByaWdodEluZGV4KSB7XG4gICAgICAgICAgICAvLyBmb3VuZCBtZXJnZWFibGUgbGluZSBhZGphY2VudCB0byB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgbGluZSwgbWVyZ2VcbiAgICAgICAgICAgIG1lcmdlRnJvbVJpZ2h0KGxlZnRLZXksIHJpZ2h0S2V5LCBnZW9tKTtcblxuICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0S2V5IGluIGxlZnRJbmRleCkge1xuICAgICAgICAgICAgLy8gZm91bmQgbWVyZ2VhYmxlIGxpbmUgYWRqYWNlbnQgdG8gdGhlIGVuZCBvZiB0aGUgY3VycmVudCBsaW5lLCBtZXJnZVxuICAgICAgICAgICAgbWVyZ2VGcm9tTGVmdChsZWZ0S2V5LCByaWdodEtleSwgZ2VvbSk7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIG5vIGFkamFjZW50IGxpbmVzLCBhZGQgYXMgYSBuZXcgaXRlbVxuICAgICAgICAgICAgYWRkKGspO1xuICAgICAgICAgICAgbGVmdEluZGV4W2xlZnRLZXldID0gbWVyZ2VkSW5kZXggLSAxO1xuICAgICAgICAgICAgcmlnaHRJbmRleFtyaWdodEtleV0gPSBtZXJnZWRJbmRleCAtIDE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2VkRmVhdHVyZXMuZmlsdGVyKChmKSA9PiBmLmdlb21ldHJ5KTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7XG4gICAgY2hhckhhc1JvdGF0ZWRWZXJ0aWNhbE9yaWVudGF0aW9uLFxufSBmcm9tICcuL3NjcmlwdF9kZXRlY3Rpb24nO1xuXG5leHBvcnQgY29uc3QgdmVydGljYWxpemVkQ2hhcmFjdGVyTWFwID0ge1xuICAgICchJzogJ8OvwrjClScsXG4gICAgJyMnOiAnw6/CvMKDJyxcbiAgICAnJCc6ICfDr8K8woQnLFxuICAgICclJzogJ8OvwrzChScsXG4gICAgJyYnOiAnw6/CvMKGJyxcbiAgICAnKCc6ICfDr8K4wrUnLFxuICAgICcpJzogJ8OvwrjCticsXG4gICAgJyonOiAnw6/CvMKKJyxcbiAgICAnKyc6ICfDr8K8wosnLFxuICAgICcsJzogJ8OvwrjCkCcsXG4gICAgJy0nOiAnw6/CuMKyJyxcbiAgICAnLic6ICfDo8KDwrsnLFxuICAgICcvJzogJ8OvwrzCjycsXG4gICAgJzonOiAnw6/CuMKTJyxcbiAgICAnOyc6ICfDr8K4wpQnLFxuICAgICc8JzogJ8OvwrjCvycsXG4gICAgJz0nOiAnw6/CvMKdJyxcbiAgICAnPic6ICfDr8K5woAnLFxuICAgICc/JzogJ8OvwrjClicsXG4gICAgJ0AnOiAnw6/CvMKgJyxcbiAgICAnWyc6ICfDr8K5wocnLFxuICAgICdcXFxcJzogJ8OvwrzCvCcsXG4gICAgJ10nOiAnw6/CucKIJyxcbiAgICAnXic6ICfDr8K8wr4nLFxuICAgICdfJzogJ8OvwrjCsycsXG4gICAgJ2AnOiAnw6/CvcKAJyxcbiAgICAneyc6ICfDr8K4wrcnLFxuICAgICd8JzogJ8OiwoDClScsXG4gICAgJ30nOiAnw6/CuMK4JyxcbiAgICAnfic6ICfDr8K9wp4nLFxuICAgICfDgsKiJzogJ8Ovwr/CoCcsXG4gICAgJ8OCwqMnOiAnw6/Cv8KhJyxcbiAgICAnw4LCpSc6ICfDr8K/wqUnLFxuICAgICfDgsKmJzogJ8Ovwr/CpCcsXG4gICAgJ8OCwqwnOiAnw6/Cv8KiJyxcbiAgICAnw4LCryc6ICfDr8K/wqMnLFxuICAgICfDosKAwpMnOiAnw6/CuMKyJyxcbiAgICAnw6LCgMKUJzogJ8OvwrjCsScsXG4gICAgJ8OiwoDCmCc6ICfDr8K5woMnLFxuICAgICfDosKAwpknOiAnw6/CucKEJyxcbiAgICAnw6LCgMKcJzogJ8OvwrnCgScsXG4gICAgJ8OiwoDCnSc6ICfDr8K5woInLFxuICAgICfDosKAwqYnOiAnw6/CuMKZJyxcbiAgICAnw6LCgMKnJzogJ8OjwoPCuycsXG4gICAgJ8OiwoLCqSc6ICfDr8K/wqYnLFxuICAgICfDo8KAwoEnOiAnw6/CuMKRJyxcbiAgICAnw6PCgMKCJzogJ8OvwrjCkicsXG4gICAgJ8OjwoDCiCc6ICfDr8K4wr8nLFxuICAgICfDo8KAwoknOiAnw6/CucKAJyxcbiAgICAnw6PCgMKKJzogJ8OvwrjCvScsXG4gICAgJ8OjwoDCiyc6ICfDr8K4wr4nLFxuICAgICfDo8KAwownOiAnw6/CucKBJyxcbiAgICAnw6PCgMKNJzogJ8OvwrnCgicsXG4gICAgJ8OjwoDCjic6ICfDr8K5woMnLFxuICAgICfDo8KAwo8nOiAnw6/CucKEJyxcbiAgICAnw6PCgMKQJzogJ8OvwrjCuycsXG4gICAgJ8OjwoDCkSc6ICfDr8K4wrwnLFxuICAgICfDo8KAwpQnOiAnw6/CuMK5JyxcbiAgICAnw6PCgMKVJzogJ8OvwrjCuicsXG4gICAgJ8OjwoDClic6ICfDr8K4wpcnLFxuICAgICfDo8KAwpcnOiAnw6/CuMKYJyxcbiAgICAnw6/CvMKBJzogJ8OvwrjClScsXG4gICAgJ8OvwrzCiCc6ICfDr8K4wrUnLFxuICAgICfDr8K8woknOiAnw6/CuMK2JyxcbiAgICAnw6/CvMKMJzogJ8OvwrjCkCcsXG4gICAgJ8OvwrzCjSc6ICfDr8K4wrInLFxuICAgICfDr8K8wo4nOiAnw6PCg8K7JyxcbiAgICAnw6/CvMKaJzogJ8OvwrjCkycsXG4gICAgJ8OvwrzCmyc6ICfDr8K4wpQnLFxuICAgICfDr8K8wpwnOiAnw6/CuMK/JyxcbiAgICAnw6/CvMKeJzogJ8OvwrnCgCcsXG4gICAgJ8OvwrzCnyc6ICfDr8K4wpYnLFxuICAgICfDr8K8wrsnOiAnw6/CucKHJyxcbiAgICAnw6/CvMK9JzogJ8OvwrnCiCcsXG4gICAgJ8OvwrzCvyc6ICfDr8K4wrMnLFxuICAgICfDr8K9wpsnOiAnw6/CuMK3JyxcbiAgICAnw6/CvcKcJzogJ8OiwoDClScsXG4gICAgJ8Ovwr3CnSc6ICfDr8K4wrgnLFxuICAgICfDr8K9wp8nOiAnw6/CuMK1JyxcbiAgICAnw6/CvcKgJzogJ8OvwrjCticsXG4gICAgJ8Ovwr3CoSc6ICfDr8K4wpInLFxuICAgICfDr8K9wqInOiAnw6/CucKBJyxcbiAgICAnw6/CvcKjJzogJ8OvwrnCgidcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZlcnRpY2FsaXplUHVuY3R1YXRpb24oaW5wdXQ6IHN0cmluZykge1xuICAgIGxldCBvdXRwdXQgPSAnJztcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgbmV4dENoYXJDb2RlID0gaW5wdXQuY2hhckNvZGVBdChpICsgMSkgfHwgbnVsbDtcbiAgICAgICAgY29uc3QgcHJldkNoYXJDb2RlID0gaW5wdXQuY2hhckNvZGVBdChpIC0gMSkgfHwgbnVsbDtcblxuICAgICAgICBjb25zdCBjYW5SZXBsYWNlUHVuY3R1YXRpb24gPSAoXG4gICAgICAgICAgICAoIW5leHRDaGFyQ29kZSB8fCAhY2hhckhhc1JvdGF0ZWRWZXJ0aWNhbE9yaWVudGF0aW9uKG5leHRDaGFyQ29kZSkgfHwgdmVydGljYWxpemVkQ2hhcmFjdGVyTWFwW2lucHV0W2kgKyAxXV0pICYmXG4gICAgICAgICAgICAoIXByZXZDaGFyQ29kZSB8fCAhY2hhckhhc1JvdGF0ZWRWZXJ0aWNhbE9yaWVudGF0aW9uKHByZXZDaGFyQ29kZSkgfHwgdmVydGljYWxpemVkQ2hhcmFjdGVyTWFwW2lucHV0W2kgLSAxXV0pXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGNhblJlcGxhY2VQdW5jdHVhdGlvbiAmJiB2ZXJ0aWNhbGl6ZWRDaGFyYWN0ZXJNYXBbaW5wdXRbaV1dKSB7XG4gICAgICAgICAgICBvdXRwdXQgKz0gdmVydGljYWxpemVkQ2hhcmFjdGVyTWFwW2lucHV0W2ldXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dHB1dCArPSBpbnB1dFtpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvdXRwdXQ7XG59XG5cbiIsIi8vIEBmbG93XG4vLyBPTkVfRU0gY29uc3RhbnQgdXNlZCB0byBnbyBiZXR3ZWVuIFwiZW1cIiB1bml0cyB1c2VkIGluIHN0eWxlIHNwZWMgYW5kIFwicG9pbnRzXCIgdXNlZCBpbnRlcm5hbGx5IGZvciBsYXlvdXRcblxuZXhwb3J0IGRlZmF1bHQgMjQ7XG4iLCJleHBvcnRzLnJlYWQgPSBmdW5jdGlvbiAoYnVmZmVyLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbVxuICB2YXIgZUxlbiA9IChuQnl0ZXMgKiA4KSAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgbkJpdHMgPSAtN1xuICB2YXIgaSA9IGlzTEUgPyAobkJ5dGVzIC0gMSkgOiAwXG4gIHZhciBkID0gaXNMRSA/IC0xIDogMVxuICB2YXIgcyA9IGJ1ZmZlcltvZmZzZXQgKyBpXVxuXG4gIGkgKz0gZFxuXG4gIGUgPSBzICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIHMgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IGVMZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IChlICogMjU2KSArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIG0gPSBlICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIGUgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IG1MZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgbSA9IChtICogMjU2KSArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIGlmIChlID09PSAwKSB7XG4gICAgZSA9IDEgLSBlQmlhc1xuICB9IGVsc2UgaWYgKGUgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbSA/IE5hTiA6ICgocyA/IC0xIDogMSkgKiBJbmZpbml0eSlcbiAgfSBlbHNlIHtcbiAgICBtID0gbSArIE1hdGgucG93KDIsIG1MZW4pXG4gICAgZSA9IGUgLSBlQmlhc1xuICB9XG4gIHJldHVybiAocyA/IC0xIDogMSkgKiBtICogTWF0aC5wb3coMiwgZSAtIG1MZW4pXG59XG5cbmV4cG9ydHMud3JpdGUgPSBmdW5jdGlvbiAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG0sIGNcbiAgdmFyIGVMZW4gPSAobkJ5dGVzICogOCkgLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIHJ0ID0gKG1MZW4gPT09IDIzID8gTWF0aC5wb3coMiwgLTI0KSAtIE1hdGgucG93KDIsIC03NykgOiAwKVxuICB2YXIgaSA9IGlzTEUgPyAwIDogKG5CeXRlcyAtIDEpXG4gIHZhciBkID0gaXNMRSA/IDEgOiAtMVxuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCAodmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCkgPyAxIDogMFxuXG4gIHZhbHVlID0gTWF0aC5hYnModmFsdWUpXG5cbiAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICBtID0gaXNOYU4odmFsdWUpID8gMSA6IDBcbiAgICBlID0gZU1heFxuICB9IGVsc2Uge1xuICAgIGUgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbHVlKSAvIE1hdGguTE4yKVxuICAgIGlmICh2YWx1ZSAqIChjID0gTWF0aC5wb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLVxuICAgICAgYyAqPSAyXG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogTWF0aC5wb3coMiwgMSAtIGVCaWFzKVxuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrK1xuICAgICAgYyAvPSAyXG4gICAgfVxuXG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMFxuICAgICAgZSA9IGVNYXhcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKCh2YWx1ZSAqIGMpIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IGUgKyBlQmlhc1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gdmFsdWUgKiBNYXRoLnBvdygyLCBlQmlhcyAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSAwXG4gICAgfVxuICB9XG5cbiAgZm9yICg7IG1MZW4gPj0gODsgYnVmZmVyW29mZnNldCArIGldID0gbSAmIDB4ZmYsIGkgKz0gZCwgbSAvPSAyNTYsIG1MZW4gLT0gOCkge31cblxuICBlID0gKGUgPDwgbUxlbikgfCBtXG4gIGVMZW4gKz0gbUxlblxuICBmb3IgKDsgZUxlbiA+IDA7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IGUgJiAweGZmLCBpICs9IGQsIGUgLz0gMjU2LCBlTGVuIC09IDgpIHt9XG5cbiAgYnVmZmVyW29mZnNldCArIGkgLSBkXSB8PSBzICogMTI4XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUGJmO1xuXG52YXIgaWVlZTc1NCA9IHJlcXVpcmUoJ2llZWU3NTQnKTtcblxuZnVuY3Rpb24gUGJmKGJ1Zikge1xuICAgIHRoaXMuYnVmID0gQXJyYXlCdWZmZXIuaXNWaWV3ICYmIEFycmF5QnVmZmVyLmlzVmlldyhidWYpID8gYnVmIDogbmV3IFVpbnQ4QXJyYXkoYnVmIHx8IDApO1xuICAgIHRoaXMucG9zID0gMDtcbiAgICB0aGlzLnR5cGUgPSAwO1xuICAgIHRoaXMubGVuZ3RoID0gdGhpcy5idWYubGVuZ3RoO1xufVxuXG5QYmYuVmFyaW50ICA9IDA7IC8vIHZhcmludDogaW50MzIsIGludDY0LCB1aW50MzIsIHVpbnQ2NCwgc2ludDMyLCBzaW50NjQsIGJvb2wsIGVudW1cblBiZi5GaXhlZDY0ID0gMTsgLy8gNjQtYml0OiBkb3VibGUsIGZpeGVkNjQsIHNmaXhlZDY0XG5QYmYuQnl0ZXMgICA9IDI7IC8vIGxlbmd0aC1kZWxpbWl0ZWQ6IHN0cmluZywgYnl0ZXMsIGVtYmVkZGVkIG1lc3NhZ2VzLCBwYWNrZWQgcmVwZWF0ZWQgZmllbGRzXG5QYmYuRml4ZWQzMiA9IDU7IC8vIDMyLWJpdDogZmxvYXQsIGZpeGVkMzIsIHNmaXhlZDMyXG5cbnZhciBTSElGVF9MRUZUXzMyID0gKDEgPDwgMTYpICogKDEgPDwgMTYpLFxuICAgIFNISUZUX1JJR0hUXzMyID0gMSAvIFNISUZUX0xFRlRfMzI7XG5cbi8vIFRocmVzaG9sZCBjaG9zZW4gYmFzZWQgb24gYm90aCBiZW5jaG1hcmtpbmcgYW5kIGtub3dsZWRnZSBhYm91dCBicm93c2VyIHN0cmluZ1xuLy8gZGF0YSBzdHJ1Y3R1cmVzICh3aGljaCBjdXJyZW50bHkgc3dpdGNoIHN0cnVjdHVyZSB0eXBlcyBhdCAxMiBieXRlcyBvciBtb3JlKVxudmFyIFRFWFRfREVDT0RFUl9NSU5fTEVOR1RIID0gMTI7XG52YXIgdXRmOFRleHREZWNvZGVyID0gdHlwZW9mIFRleHREZWNvZGVyID09PSAndW5kZWZpbmVkJyA/IG51bGwgOiBuZXcgVGV4dERlY29kZXIoJ3V0ZjgnKTtcblxuUGJmLnByb3RvdHlwZSA9IHtcblxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLmJ1ZiA9IG51bGw7XG4gICAgfSxcblxuICAgIC8vID09PSBSRUFESU5HID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgICByZWFkRmllbGRzOiBmdW5jdGlvbihyZWFkRmllbGQsIHJlc3VsdCwgZW5kKSB7XG4gICAgICAgIGVuZCA9IGVuZCB8fCB0aGlzLmxlbmd0aDtcblxuICAgICAgICB3aGlsZSAodGhpcy5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIHZhciB2YWwgPSB0aGlzLnJlYWRWYXJpbnQoKSxcbiAgICAgICAgICAgICAgICB0YWcgPSB2YWwgPj4gMyxcbiAgICAgICAgICAgICAgICBzdGFydFBvcyA9IHRoaXMucG9zO1xuXG4gICAgICAgICAgICB0aGlzLnR5cGUgPSB2YWwgJiAweDc7XG4gICAgICAgICAgICByZWFkRmllbGQodGFnLCByZXN1bHQsIHRoaXMpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5wb3MgPT09IHN0YXJ0UG9zKSB0aGlzLnNraXAodmFsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICByZWFkTWVzc2FnZTogZnVuY3Rpb24ocmVhZEZpZWxkLCByZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZEZpZWxkcyhyZWFkRmllbGQsIHJlc3VsdCwgdGhpcy5yZWFkVmFyaW50KCkgKyB0aGlzLnBvcyk7XG4gICAgfSxcblxuICAgIHJlYWRGaXhlZDMyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHZhbCA9IHJlYWRVSW50MzIodGhpcy5idWYsIHRoaXMucG9zKTtcbiAgICAgICAgdGhpcy5wb3MgKz0gNDtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9LFxuXG4gICAgcmVhZFNGaXhlZDMyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHZhbCA9IHJlYWRJbnQzMih0aGlzLmJ1ZiwgdGhpcy5wb3MpO1xuICAgICAgICB0aGlzLnBvcyArPSA0O1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH0sXG5cbiAgICAvLyA2NC1iaXQgaW50IGhhbmRsaW5nIGlzIGJhc2VkIG9uIGdpdGh1Yi5jb20vZHB3L25vZGUtYnVmZmVyLW1vcmUtaW50cyAoTUlULWxpY2Vuc2VkKVxuXG4gICAgcmVhZEZpeGVkNjQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgdmFsID0gcmVhZFVJbnQzMih0aGlzLmJ1ZiwgdGhpcy5wb3MpICsgcmVhZFVJbnQzMih0aGlzLmJ1ZiwgdGhpcy5wb3MgKyA0KSAqIFNISUZUX0xFRlRfMzI7XG4gICAgICAgIHRoaXMucG9zICs9IDg7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfSxcblxuICAgIHJlYWRTRml4ZWQ2NDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB2YWwgPSByZWFkVUludDMyKHRoaXMuYnVmLCB0aGlzLnBvcykgKyByZWFkSW50MzIodGhpcy5idWYsIHRoaXMucG9zICsgNCkgKiBTSElGVF9MRUZUXzMyO1xuICAgICAgICB0aGlzLnBvcyArPSA4O1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH0sXG5cbiAgICByZWFkRmxvYXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgdmFsID0gaWVlZTc1NC5yZWFkKHRoaXMuYnVmLCB0aGlzLnBvcywgdHJ1ZSwgMjMsIDQpO1xuICAgICAgICB0aGlzLnBvcyArPSA0O1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH0sXG5cbiAgICByZWFkRG91YmxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHZhbCA9IGllZWU3NTQucmVhZCh0aGlzLmJ1ZiwgdGhpcy5wb3MsIHRydWUsIDUyLCA4KTtcbiAgICAgICAgdGhpcy5wb3MgKz0gODtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9LFxuXG4gICAgcmVhZFZhcmludDogZnVuY3Rpb24oaXNTaWduZWQpIHtcbiAgICAgICAgdmFyIGJ1ZiA9IHRoaXMuYnVmLFxuICAgICAgICAgICAgdmFsLCBiO1xuXG4gICAgICAgIGIgPSBidWZbdGhpcy5wb3MrK107IHZhbCAgPSAgYiAmIDB4N2Y7ICAgICAgICBpZiAoYiA8IDB4ODApIHJldHVybiB2YWw7XG4gICAgICAgIGIgPSBidWZbdGhpcy5wb3MrK107IHZhbCB8PSAoYiAmIDB4N2YpIDw8IDc7ICBpZiAoYiA8IDB4ODApIHJldHVybiB2YWw7XG4gICAgICAgIGIgPSBidWZbdGhpcy5wb3MrK107IHZhbCB8PSAoYiAmIDB4N2YpIDw8IDE0OyBpZiAoYiA8IDB4ODApIHJldHVybiB2YWw7XG4gICAgICAgIGIgPSBidWZbdGhpcy5wb3MrK107IHZhbCB8PSAoYiAmIDB4N2YpIDw8IDIxOyBpZiAoYiA8IDB4ODApIHJldHVybiB2YWw7XG4gICAgICAgIGIgPSBidWZbdGhpcy5wb3NdOyAgIHZhbCB8PSAoYiAmIDB4MGYpIDw8IDI4O1xuXG4gICAgICAgIHJldHVybiByZWFkVmFyaW50UmVtYWluZGVyKHZhbCwgaXNTaWduZWQsIHRoaXMpO1xuICAgIH0sXG5cbiAgICByZWFkVmFyaW50NjQ6IGZ1bmN0aW9uKCkgeyAvLyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHYyLjAuMVxuICAgICAgICByZXR1cm4gdGhpcy5yZWFkVmFyaW50KHRydWUpO1xuICAgIH0sXG5cbiAgICByZWFkU1ZhcmludDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBudW0gPSB0aGlzLnJlYWRWYXJpbnQoKTtcbiAgICAgICAgcmV0dXJuIG51bSAlIDIgPT09IDEgPyAobnVtICsgMSkgLyAtMiA6IG51bSAvIDI7IC8vIHppZ3phZyBlbmNvZGluZ1xuICAgIH0sXG5cbiAgICByZWFkQm9vbGVhbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKHRoaXMucmVhZFZhcmludCgpKTtcbiAgICB9LFxuXG4gICAgcmVhZFN0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBlbmQgPSB0aGlzLnJlYWRWYXJpbnQoKSArIHRoaXMucG9zO1xuICAgICAgICB2YXIgcG9zID0gdGhpcy5wb3M7XG4gICAgICAgIHRoaXMucG9zID0gZW5kO1xuXG4gICAgICAgIGlmIChlbmQgLSBwb3MgPj0gVEVYVF9ERUNPREVSX01JTl9MRU5HVEggJiYgdXRmOFRleHREZWNvZGVyKSB7XG4gICAgICAgICAgICAvLyBsb25nZXIgc3RyaW5ncyBhcmUgZmFzdCB3aXRoIHRoZSBidWlsdC1pbiBicm93c2VyIFRleHREZWNvZGVyIEFQSVxuICAgICAgICAgICAgcmV0dXJuIHJlYWRVdGY4VGV4dERlY29kZXIodGhpcy5idWYsIHBvcywgZW5kKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzaG9ydCBzdHJpbmdzIGFyZSBmYXN0IHdpdGggb3VyIGN1c3RvbSBpbXBsZW1lbnRhdGlvblxuICAgICAgICByZXR1cm4gcmVhZFV0ZjgodGhpcy5idWYsIHBvcywgZW5kKTtcbiAgICB9LFxuXG4gICAgcmVhZEJ5dGVzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGVuZCA9IHRoaXMucmVhZFZhcmludCgpICsgdGhpcy5wb3MsXG4gICAgICAgICAgICBidWZmZXIgPSB0aGlzLmJ1Zi5zdWJhcnJheSh0aGlzLnBvcywgZW5kKTtcbiAgICAgICAgdGhpcy5wb3MgPSBlbmQ7XG4gICAgICAgIHJldHVybiBidWZmZXI7XG4gICAgfSxcblxuICAgIC8vIHZlcmJvc2UgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnM7IGRvZXNuJ3QgYWZmZWN0IGd6aXBwZWQgc2l6ZVxuXG4gICAgcmVhZFBhY2tlZFZhcmludDogZnVuY3Rpb24oYXJyLCBpc1NpZ25lZCkge1xuICAgICAgICBpZiAodGhpcy50eXBlICE9PSBQYmYuQnl0ZXMpIHJldHVybiBhcnIucHVzaCh0aGlzLnJlYWRWYXJpbnQoaXNTaWduZWQpKTtcbiAgICAgICAgdmFyIGVuZCA9IHJlYWRQYWNrZWRFbmQodGhpcyk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgd2hpbGUgKHRoaXMucG9zIDwgZW5kKSBhcnIucHVzaCh0aGlzLnJlYWRWYXJpbnQoaXNTaWduZWQpKTtcbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9LFxuICAgIHJlYWRQYWNrZWRTVmFyaW50OiBmdW5jdGlvbihhcnIpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSAhPT0gUGJmLkJ5dGVzKSByZXR1cm4gYXJyLnB1c2godGhpcy5yZWFkU1ZhcmludCgpKTtcbiAgICAgICAgdmFyIGVuZCA9IHJlYWRQYWNrZWRFbmQodGhpcyk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgd2hpbGUgKHRoaXMucG9zIDwgZW5kKSBhcnIucHVzaCh0aGlzLnJlYWRTVmFyaW50KCkpO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH0sXG4gICAgcmVhZFBhY2tlZEJvb2xlYW46IGZ1bmN0aW9uKGFycikge1xuICAgICAgICBpZiAodGhpcy50eXBlICE9PSBQYmYuQnl0ZXMpIHJldHVybiBhcnIucHVzaCh0aGlzLnJlYWRCb29sZWFuKCkpO1xuICAgICAgICB2YXIgZW5kID0gcmVhZFBhY2tlZEVuZCh0aGlzKTtcbiAgICAgICAgYXJyID0gYXJyIHx8IFtdO1xuICAgICAgICB3aGlsZSAodGhpcy5wb3MgPCBlbmQpIGFyci5wdXNoKHRoaXMucmVhZEJvb2xlYW4oKSk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfSxcbiAgICByZWFkUGFja2VkRmxvYXQ6IGZ1bmN0aW9uKGFycikge1xuICAgICAgICBpZiAodGhpcy50eXBlICE9PSBQYmYuQnl0ZXMpIHJldHVybiBhcnIucHVzaCh0aGlzLnJlYWRGbG9hdCgpKTtcbiAgICAgICAgdmFyIGVuZCA9IHJlYWRQYWNrZWRFbmQodGhpcyk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgd2hpbGUgKHRoaXMucG9zIDwgZW5kKSBhcnIucHVzaCh0aGlzLnJlYWRGbG9hdCgpKTtcbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9LFxuICAgIHJlYWRQYWNrZWREb3VibGU6IGZ1bmN0aW9uKGFycikge1xuICAgICAgICBpZiAodGhpcy50eXBlICE9PSBQYmYuQnl0ZXMpIHJldHVybiBhcnIucHVzaCh0aGlzLnJlYWREb3VibGUoKSk7XG4gICAgICAgIHZhciBlbmQgPSByZWFkUGFja2VkRW5kKHRoaXMpO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHdoaWxlICh0aGlzLnBvcyA8IGVuZCkgYXJyLnB1c2godGhpcy5yZWFkRG91YmxlKCkpO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH0sXG4gICAgcmVhZFBhY2tlZEZpeGVkMzI6IGZ1bmN0aW9uKGFycikge1xuICAgICAgICBpZiAodGhpcy50eXBlICE9PSBQYmYuQnl0ZXMpIHJldHVybiBhcnIucHVzaCh0aGlzLnJlYWRGaXhlZDMyKCkpO1xuICAgICAgICB2YXIgZW5kID0gcmVhZFBhY2tlZEVuZCh0aGlzKTtcbiAgICAgICAgYXJyID0gYXJyIHx8IFtdO1xuICAgICAgICB3aGlsZSAodGhpcy5wb3MgPCBlbmQpIGFyci5wdXNoKHRoaXMucmVhZEZpeGVkMzIoKSk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfSxcbiAgICByZWFkUGFja2VkU0ZpeGVkMzI6IGZ1bmN0aW9uKGFycikge1xuICAgICAgICBpZiAodGhpcy50eXBlICE9PSBQYmYuQnl0ZXMpIHJldHVybiBhcnIucHVzaCh0aGlzLnJlYWRTRml4ZWQzMigpKTtcbiAgICAgICAgdmFyIGVuZCA9IHJlYWRQYWNrZWRFbmQodGhpcyk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgd2hpbGUgKHRoaXMucG9zIDwgZW5kKSBhcnIucHVzaCh0aGlzLnJlYWRTRml4ZWQzMigpKTtcbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9LFxuICAgIHJlYWRQYWNrZWRGaXhlZDY0OiBmdW5jdGlvbihhcnIpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSAhPT0gUGJmLkJ5dGVzKSByZXR1cm4gYXJyLnB1c2godGhpcy5yZWFkRml4ZWQ2NCgpKTtcbiAgICAgICAgdmFyIGVuZCA9IHJlYWRQYWNrZWRFbmQodGhpcyk7XG4gICAgICAgIGFyciA9IGFyciB8fCBbXTtcbiAgICAgICAgd2hpbGUgKHRoaXMucG9zIDwgZW5kKSBhcnIucHVzaCh0aGlzLnJlYWRGaXhlZDY0KCkpO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH0sXG4gICAgcmVhZFBhY2tlZFNGaXhlZDY0OiBmdW5jdGlvbihhcnIpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSAhPT0gUGJmLkJ5dGVzKSByZXR1cm4gYXJyLnB1c2godGhpcy5yZWFkU0ZpeGVkNjQoKSk7XG4gICAgICAgIHZhciBlbmQgPSByZWFkUGFja2VkRW5kKHRoaXMpO1xuICAgICAgICBhcnIgPSBhcnIgfHwgW107XG4gICAgICAgIHdoaWxlICh0aGlzLnBvcyA8IGVuZCkgYXJyLnB1c2godGhpcy5yZWFkU0ZpeGVkNjQoKSk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgfSxcblxuICAgIHNraXA6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICB2YXIgdHlwZSA9IHZhbCAmIDB4NztcbiAgICAgICAgaWYgKHR5cGUgPT09IFBiZi5WYXJpbnQpIHdoaWxlICh0aGlzLmJ1Zlt0aGlzLnBvcysrXSA+IDB4N2YpIHt9XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IFBiZi5CeXRlcykgdGhpcy5wb3MgPSB0aGlzLnJlYWRWYXJpbnQoKSArIHRoaXMucG9zO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09PSBQYmYuRml4ZWQzMikgdGhpcy5wb3MgKz0gNDtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gUGJmLkZpeGVkNjQpIHRoaXMucG9zICs9IDg7XG4gICAgICAgIGVsc2UgdGhyb3cgbmV3IEVycm9yKCdVbmltcGxlbWVudGVkIHR5cGU6ICcgKyB0eXBlKTtcbiAgICB9LFxuXG4gICAgLy8gPT09IFdSSVRJTkcgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAgIHdyaXRlVGFnOiBmdW5jdGlvbih0YWcsIHR5cGUpIHtcbiAgICAgICAgdGhpcy53cml0ZVZhcmludCgodGFnIDw8IDMpIHwgdHlwZSk7XG4gICAgfSxcblxuICAgIHJlYWxsb2M6IGZ1bmN0aW9uKG1pbikge1xuICAgICAgICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGggfHwgMTY7XG5cbiAgICAgICAgd2hpbGUgKGxlbmd0aCA8IHRoaXMucG9zICsgbWluKSBsZW5ndGggKj0gMjtcblxuICAgICAgICBpZiAobGVuZ3RoICE9PSB0aGlzLmxlbmd0aCkge1xuICAgICAgICAgICAgdmFyIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7XG4gICAgICAgICAgICBidWYuc2V0KHRoaXMuYnVmKTtcbiAgICAgICAgICAgIHRoaXMuYnVmID0gYnVmO1xuICAgICAgICAgICAgdGhpcy5sZW5ndGggPSBsZW5ndGg7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgZmluaXNoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5sZW5ndGggPSB0aGlzLnBvcztcbiAgICAgICAgdGhpcy5wb3MgPSAwO1xuICAgICAgICByZXR1cm4gdGhpcy5idWYuc3ViYXJyYXkoMCwgdGhpcy5sZW5ndGgpO1xuICAgIH0sXG5cbiAgICB3cml0ZUZpeGVkMzI6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICB0aGlzLnJlYWxsb2MoNCk7XG4gICAgICAgIHdyaXRlSW50MzIodGhpcy5idWYsIHZhbCwgdGhpcy5wb3MpO1xuICAgICAgICB0aGlzLnBvcyArPSA0O1xuICAgIH0sXG5cbiAgICB3cml0ZVNGaXhlZDMyOiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgdGhpcy5yZWFsbG9jKDQpO1xuICAgICAgICB3cml0ZUludDMyKHRoaXMuYnVmLCB2YWwsIHRoaXMucG9zKTtcbiAgICAgICAgdGhpcy5wb3MgKz0gNDtcbiAgICB9LFxuXG4gICAgd3JpdGVGaXhlZDY0OiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgdGhpcy5yZWFsbG9jKDgpO1xuICAgICAgICB3cml0ZUludDMyKHRoaXMuYnVmLCB2YWwgJiAtMSwgdGhpcy5wb3MpO1xuICAgICAgICB3cml0ZUludDMyKHRoaXMuYnVmLCBNYXRoLmZsb29yKHZhbCAqIFNISUZUX1JJR0hUXzMyKSwgdGhpcy5wb3MgKyA0KTtcbiAgICAgICAgdGhpcy5wb3MgKz0gODtcbiAgICB9LFxuXG4gICAgd3JpdGVTRml4ZWQ2NDogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgIHRoaXMucmVhbGxvYyg4KTtcbiAgICAgICAgd3JpdGVJbnQzMih0aGlzLmJ1ZiwgdmFsICYgLTEsIHRoaXMucG9zKTtcbiAgICAgICAgd3JpdGVJbnQzMih0aGlzLmJ1ZiwgTWF0aC5mbG9vcih2YWwgKiBTSElGVF9SSUdIVF8zMiksIHRoaXMucG9zICsgNCk7XG4gICAgICAgIHRoaXMucG9zICs9IDg7XG4gICAgfSxcblxuICAgIHdyaXRlVmFyaW50OiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgdmFsID0gK3ZhbCB8fCAwO1xuXG4gICAgICAgIGlmICh2YWwgPiAweGZmZmZmZmYgfHwgdmFsIDwgMCkge1xuICAgICAgICAgICAgd3JpdGVCaWdWYXJpbnQodmFsLCB0aGlzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVhbGxvYyg0KTtcblxuICAgICAgICB0aGlzLmJ1Zlt0aGlzLnBvcysrXSA9ICAgICAgICAgICB2YWwgJiAweDdmICB8ICh2YWwgPiAweDdmID8gMHg4MCA6IDApOyBpZiAodmFsIDw9IDB4N2YpIHJldHVybjtcbiAgICAgICAgdGhpcy5idWZbdGhpcy5wb3MrK10gPSAoKHZhbCA+Pj49IDcpICYgMHg3ZikgfCAodmFsID4gMHg3ZiA/IDB4ODAgOiAwKTsgaWYgKHZhbCA8PSAweDdmKSByZXR1cm47XG4gICAgICAgIHRoaXMuYnVmW3RoaXMucG9zKytdID0gKCh2YWwgPj4+PSA3KSAmIDB4N2YpIHwgKHZhbCA+IDB4N2YgPyAweDgwIDogMCk7IGlmICh2YWwgPD0gMHg3ZikgcmV0dXJuO1xuICAgICAgICB0aGlzLmJ1Zlt0aGlzLnBvcysrXSA9ICAgKHZhbCA+Pj4gNykgJiAweDdmO1xuICAgIH0sXG5cbiAgICB3cml0ZVNWYXJpbnQ6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICB0aGlzLndyaXRlVmFyaW50KHZhbCA8IDAgPyAtdmFsICogMiAtIDEgOiB2YWwgKiAyKTtcbiAgICB9LFxuXG4gICAgd3JpdGVCb29sZWFuOiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgdGhpcy53cml0ZVZhcmludChCb29sZWFuKHZhbCkpO1xuICAgIH0sXG5cbiAgICB3cml0ZVN0cmluZzogZnVuY3Rpb24oc3RyKSB7XG4gICAgICAgIHN0ciA9IFN0cmluZyhzdHIpO1xuICAgICAgICB0aGlzLnJlYWxsb2Moc3RyLmxlbmd0aCAqIDQpO1xuXG4gICAgICAgIHRoaXMucG9zKys7IC8vIHJlc2VydmUgMSBieXRlIGZvciBzaG9ydCBzdHJpbmcgbGVuZ3RoXG5cbiAgICAgICAgdmFyIHN0YXJ0UG9zID0gdGhpcy5wb3M7XG4gICAgICAgIC8vIHdyaXRlIHRoZSBzdHJpbmcgZGlyZWN0bHkgdG8gdGhlIGJ1ZmZlciBhbmQgc2VlIGhvdyBtdWNoIHdhcyB3cml0dGVuXG4gICAgICAgIHRoaXMucG9zID0gd3JpdGVVdGY4KHRoaXMuYnVmLCBzdHIsIHRoaXMucG9zKTtcbiAgICAgICAgdmFyIGxlbiA9IHRoaXMucG9zIC0gc3RhcnRQb3M7XG5cbiAgICAgICAgaWYgKGxlbiA+PSAweDgwKSBtYWtlUm9vbUZvckV4dHJhTGVuZ3RoKHN0YXJ0UG9zLCBsZW4sIHRoaXMpO1xuXG4gICAgICAgIC8vIGZpbmFsbHksIHdyaXRlIHRoZSBtZXNzYWdlIGxlbmd0aCBpbiB0aGUgcmVzZXJ2ZWQgcGxhY2UgYW5kIHJlc3RvcmUgdGhlIHBvc2l0aW9uXG4gICAgICAgIHRoaXMucG9zID0gc3RhcnRQb3MgLSAxO1xuICAgICAgICB0aGlzLndyaXRlVmFyaW50KGxlbik7XG4gICAgICAgIHRoaXMucG9zICs9IGxlbjtcbiAgICB9LFxuXG4gICAgd3JpdGVGbG9hdDogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgIHRoaXMucmVhbGxvYyg0KTtcbiAgICAgICAgaWVlZTc1NC53cml0ZSh0aGlzLmJ1ZiwgdmFsLCB0aGlzLnBvcywgdHJ1ZSwgMjMsIDQpO1xuICAgICAgICB0aGlzLnBvcyArPSA0O1xuICAgIH0sXG5cbiAgICB3cml0ZURvdWJsZTogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgIHRoaXMucmVhbGxvYyg4KTtcbiAgICAgICAgaWVlZTc1NC53cml0ZSh0aGlzLmJ1ZiwgdmFsLCB0aGlzLnBvcywgdHJ1ZSwgNTIsIDgpO1xuICAgICAgICB0aGlzLnBvcyArPSA4O1xuICAgIH0sXG5cbiAgICB3cml0ZUJ5dGVzOiBmdW5jdGlvbihidWZmZXIpIHtcbiAgICAgICAgdmFyIGxlbiA9IGJ1ZmZlci5sZW5ndGg7XG4gICAgICAgIHRoaXMud3JpdGVWYXJpbnQobGVuKTtcbiAgICAgICAgdGhpcy5yZWFsbG9jKGxlbik7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHRoaXMuYnVmW3RoaXMucG9zKytdID0gYnVmZmVyW2ldO1xuICAgIH0sXG5cbiAgICB3cml0ZVJhd01lc3NhZ2U6IGZ1bmN0aW9uKGZuLCBvYmopIHtcbiAgICAgICAgdGhpcy5wb3MrKzsgLy8gcmVzZXJ2ZSAxIGJ5dGUgZm9yIHNob3J0IG1lc3NhZ2UgbGVuZ3RoXG5cbiAgICAgICAgLy8gd3JpdGUgdGhlIG1lc3NhZ2UgZGlyZWN0bHkgdG8gdGhlIGJ1ZmZlciBhbmQgc2VlIGhvdyBtdWNoIHdhcyB3cml0dGVuXG4gICAgICAgIHZhciBzdGFydFBvcyA9IHRoaXMucG9zO1xuICAgICAgICBmbihvYmosIHRoaXMpO1xuICAgICAgICB2YXIgbGVuID0gdGhpcy5wb3MgLSBzdGFydFBvcztcblxuICAgICAgICBpZiAobGVuID49IDB4ODApIG1ha2VSb29tRm9yRXh0cmFMZW5ndGgoc3RhcnRQb3MsIGxlbiwgdGhpcyk7XG5cbiAgICAgICAgLy8gZmluYWxseSwgd3JpdGUgdGhlIG1lc3NhZ2UgbGVuZ3RoIGluIHRoZSByZXNlcnZlZCBwbGFjZSBhbmQgcmVzdG9yZSB0aGUgcG9zaXRpb25cbiAgICAgICAgdGhpcy5wb3MgPSBzdGFydFBvcyAtIDE7XG4gICAgICAgIHRoaXMud3JpdGVWYXJpbnQobGVuKTtcbiAgICAgICAgdGhpcy5wb3MgKz0gbGVuO1xuICAgIH0sXG5cbiAgICB3cml0ZU1lc3NhZ2U6IGZ1bmN0aW9uKHRhZywgZm4sIG9iaikge1xuICAgICAgICB0aGlzLndyaXRlVGFnKHRhZywgUGJmLkJ5dGVzKTtcbiAgICAgICAgdGhpcy53cml0ZVJhd01lc3NhZ2UoZm4sIG9iaik7XG4gICAgfSxcblxuICAgIHdyaXRlUGFja2VkVmFyaW50OiAgIGZ1bmN0aW9uKHRhZywgYXJyKSB7IGlmIChhcnIubGVuZ3RoKSB0aGlzLndyaXRlTWVzc2FnZSh0YWcsIHdyaXRlUGFja2VkVmFyaW50LCBhcnIpOyAgIH0sXG4gICAgd3JpdGVQYWNrZWRTVmFyaW50OiAgZnVuY3Rpb24odGFnLCBhcnIpIHsgaWYgKGFyci5sZW5ndGgpIHRoaXMud3JpdGVNZXNzYWdlKHRhZywgd3JpdGVQYWNrZWRTVmFyaW50LCBhcnIpOyAgfSxcbiAgICB3cml0ZVBhY2tlZEJvb2xlYW46ICBmdW5jdGlvbih0YWcsIGFycikgeyBpZiAoYXJyLmxlbmd0aCkgdGhpcy53cml0ZU1lc3NhZ2UodGFnLCB3cml0ZVBhY2tlZEJvb2xlYW4sIGFycik7ICB9LFxuICAgIHdyaXRlUGFja2VkRmxvYXQ6ICAgIGZ1bmN0aW9uKHRhZywgYXJyKSB7IGlmIChhcnIubGVuZ3RoKSB0aGlzLndyaXRlTWVzc2FnZSh0YWcsIHdyaXRlUGFja2VkRmxvYXQsIGFycik7ICAgIH0sXG4gICAgd3JpdGVQYWNrZWREb3VibGU6ICAgZnVuY3Rpb24odGFnLCBhcnIpIHsgaWYgKGFyci5sZW5ndGgpIHRoaXMud3JpdGVNZXNzYWdlKHRhZywgd3JpdGVQYWNrZWREb3VibGUsIGFycik7ICAgfSxcbiAgICB3cml0ZVBhY2tlZEZpeGVkMzI6ICBmdW5jdGlvbih0YWcsIGFycikgeyBpZiAoYXJyLmxlbmd0aCkgdGhpcy53cml0ZU1lc3NhZ2UodGFnLCB3cml0ZVBhY2tlZEZpeGVkMzIsIGFycik7ICB9LFxuICAgIHdyaXRlUGFja2VkU0ZpeGVkMzI6IGZ1bmN0aW9uKHRhZywgYXJyKSB7IGlmIChhcnIubGVuZ3RoKSB0aGlzLndyaXRlTWVzc2FnZSh0YWcsIHdyaXRlUGFja2VkU0ZpeGVkMzIsIGFycik7IH0sXG4gICAgd3JpdGVQYWNrZWRGaXhlZDY0OiAgZnVuY3Rpb24odGFnLCBhcnIpIHsgaWYgKGFyci5sZW5ndGgpIHRoaXMud3JpdGVNZXNzYWdlKHRhZywgd3JpdGVQYWNrZWRGaXhlZDY0LCBhcnIpOyAgfSxcbiAgICB3cml0ZVBhY2tlZFNGaXhlZDY0OiBmdW5jdGlvbih0YWcsIGFycikgeyBpZiAoYXJyLmxlbmd0aCkgdGhpcy53cml0ZU1lc3NhZ2UodGFnLCB3cml0ZVBhY2tlZFNGaXhlZDY0LCBhcnIpOyB9LFxuXG4gICAgd3JpdGVCeXRlc0ZpZWxkOiBmdW5jdGlvbih0YWcsIGJ1ZmZlcikge1xuICAgICAgICB0aGlzLndyaXRlVGFnKHRhZywgUGJmLkJ5dGVzKTtcbiAgICAgICAgdGhpcy53cml0ZUJ5dGVzKGJ1ZmZlcik7XG4gICAgfSxcbiAgICB3cml0ZUZpeGVkMzJGaWVsZDogZnVuY3Rpb24odGFnLCB2YWwpIHtcbiAgICAgICAgdGhpcy53cml0ZVRhZyh0YWcsIFBiZi5GaXhlZDMyKTtcbiAgICAgICAgdGhpcy53cml0ZUZpeGVkMzIodmFsKTtcbiAgICB9LFxuICAgIHdyaXRlU0ZpeGVkMzJGaWVsZDogZnVuY3Rpb24odGFnLCB2YWwpIHtcbiAgICAgICAgdGhpcy53cml0ZVRhZyh0YWcsIFBiZi5GaXhlZDMyKTtcbiAgICAgICAgdGhpcy53cml0ZVNGaXhlZDMyKHZhbCk7XG4gICAgfSxcbiAgICB3cml0ZUZpeGVkNjRGaWVsZDogZnVuY3Rpb24odGFnLCB2YWwpIHtcbiAgICAgICAgdGhpcy53cml0ZVRhZyh0YWcsIFBiZi5GaXhlZDY0KTtcbiAgICAgICAgdGhpcy53cml0ZUZpeGVkNjQodmFsKTtcbiAgICB9LFxuICAgIHdyaXRlU0ZpeGVkNjRGaWVsZDogZnVuY3Rpb24odGFnLCB2YWwpIHtcbiAgICAgICAgdGhpcy53cml0ZVRhZyh0YWcsIFBiZi5GaXhlZDY0KTtcbiAgICAgICAgdGhpcy53cml0ZVNGaXhlZDY0KHZhbCk7XG4gICAgfSxcbiAgICB3cml0ZVZhcmludEZpZWxkOiBmdW5jdGlvbih0YWcsIHZhbCkge1xuICAgICAgICB0aGlzLndyaXRlVGFnKHRhZywgUGJmLlZhcmludCk7XG4gICAgICAgIHRoaXMud3JpdGVWYXJpbnQodmFsKTtcbiAgICB9LFxuICAgIHdyaXRlU1ZhcmludEZpZWxkOiBmdW5jdGlvbih0YWcsIHZhbCkge1xuICAgICAgICB0aGlzLndyaXRlVGFnKHRhZywgUGJmLlZhcmludCk7XG4gICAgICAgIHRoaXMud3JpdGVTVmFyaW50KHZhbCk7XG4gICAgfSxcbiAgICB3cml0ZVN0cmluZ0ZpZWxkOiBmdW5jdGlvbih0YWcsIHN0cikge1xuICAgICAgICB0aGlzLndyaXRlVGFnKHRhZywgUGJmLkJ5dGVzKTtcbiAgICAgICAgdGhpcy53cml0ZVN0cmluZyhzdHIpO1xuICAgIH0sXG4gICAgd3JpdGVGbG9hdEZpZWxkOiBmdW5jdGlvbih0YWcsIHZhbCkge1xuICAgICAgICB0aGlzLndyaXRlVGFnKHRhZywgUGJmLkZpeGVkMzIpO1xuICAgICAgICB0aGlzLndyaXRlRmxvYXQodmFsKTtcbiAgICB9LFxuICAgIHdyaXRlRG91YmxlRmllbGQ6IGZ1bmN0aW9uKHRhZywgdmFsKSB7XG4gICAgICAgIHRoaXMud3JpdGVUYWcodGFnLCBQYmYuRml4ZWQ2NCk7XG4gICAgICAgIHRoaXMud3JpdGVEb3VibGUodmFsKTtcbiAgICB9LFxuICAgIHdyaXRlQm9vbGVhbkZpZWxkOiBmdW5jdGlvbih0YWcsIHZhbCkge1xuICAgICAgICB0aGlzLndyaXRlVmFyaW50RmllbGQodGFnLCBCb29sZWFuKHZhbCkpO1xuICAgIH1cbn07XG5cbmZ1bmN0aW9uIHJlYWRWYXJpbnRSZW1haW5kZXIobCwgcywgcCkge1xuICAgIHZhciBidWYgPSBwLmJ1ZixcbiAgICAgICAgaCwgYjtcblxuICAgIGIgPSBidWZbcC5wb3MrK107IGggID0gKGIgJiAweDcwKSA+PiA0OyAgaWYgKGIgPCAweDgwKSByZXR1cm4gdG9OdW0obCwgaCwgcyk7XG4gICAgYiA9IGJ1ZltwLnBvcysrXTsgaCB8PSAoYiAmIDB4N2YpIDw8IDM7ICBpZiAoYiA8IDB4ODApIHJldHVybiB0b051bShsLCBoLCBzKTtcbiAgICBiID0gYnVmW3AucG9zKytdOyBoIHw9IChiICYgMHg3ZikgPDwgMTA7IGlmIChiIDwgMHg4MCkgcmV0dXJuIHRvTnVtKGwsIGgsIHMpO1xuICAgIGIgPSBidWZbcC5wb3MrK107IGggfD0gKGIgJiAweDdmKSA8PCAxNzsgaWYgKGIgPCAweDgwKSByZXR1cm4gdG9OdW0obCwgaCwgcyk7XG4gICAgYiA9IGJ1ZltwLnBvcysrXTsgaCB8PSAoYiAmIDB4N2YpIDw8IDI0OyBpZiAoYiA8IDB4ODApIHJldHVybiB0b051bShsLCBoLCBzKTtcbiAgICBiID0gYnVmW3AucG9zKytdOyBoIHw9IChiICYgMHgwMSkgPDwgMzE7IGlmIChiIDwgMHg4MCkgcmV0dXJuIHRvTnVtKGwsIGgsIHMpO1xuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB2YXJpbnQgbm90IG1vcmUgdGhhbiAxMCBieXRlcycpO1xufVxuXG5mdW5jdGlvbiByZWFkUGFja2VkRW5kKHBiZikge1xuICAgIHJldHVybiBwYmYudHlwZSA9PT0gUGJmLkJ5dGVzID9cbiAgICAgICAgcGJmLnJlYWRWYXJpbnQoKSArIHBiZi5wb3MgOiBwYmYucG9zICsgMTtcbn1cblxuZnVuY3Rpb24gdG9OdW0obG93LCBoaWdoLCBpc1NpZ25lZCkge1xuICAgIGlmIChpc1NpZ25lZCkge1xuICAgICAgICByZXR1cm4gaGlnaCAqIDB4MTAwMDAwMDAwICsgKGxvdyA+Pj4gMCk7XG4gICAgfVxuXG4gICAgcmV0dXJuICgoaGlnaCA+Pj4gMCkgKiAweDEwMDAwMDAwMCkgKyAobG93ID4+PiAwKTtcbn1cblxuZnVuY3Rpb24gd3JpdGVCaWdWYXJpbnQodmFsLCBwYmYpIHtcbiAgICB2YXIgbG93LCBoaWdoO1xuXG4gICAgaWYgKHZhbCA+PSAwKSB7XG4gICAgICAgIGxvdyAgPSAodmFsICUgMHgxMDAwMDAwMDApIHwgMDtcbiAgICAgICAgaGlnaCA9ICh2YWwgLyAweDEwMDAwMDAwMCkgfCAwO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxvdyAgPSB+KC12YWwgJSAweDEwMDAwMDAwMCk7XG4gICAgICAgIGhpZ2ggPSB+KC12YWwgLyAweDEwMDAwMDAwMCk7XG5cbiAgICAgICAgaWYgKGxvdyBeIDB4ZmZmZmZmZmYpIHtcbiAgICAgICAgICAgIGxvdyA9IChsb3cgKyAxKSB8IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb3cgPSAwO1xuICAgICAgICAgICAgaGlnaCA9IChoaWdoICsgMSkgfCAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZhbCA+PSAweDEwMDAwMDAwMDAwMDAwMDAwIHx8IHZhbCA8IC0weDEwMDAwMDAwMDAwMDAwMDAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignR2l2ZW4gdmFyaW50IGRvZXNuXFwndCBmaXQgaW50byAxMCBieXRlcycpO1xuICAgIH1cblxuICAgIHBiZi5yZWFsbG9jKDEwKTtcblxuICAgIHdyaXRlQmlnVmFyaW50TG93KGxvdywgaGlnaCwgcGJmKTtcbiAgICB3cml0ZUJpZ1ZhcmludEhpZ2goaGlnaCwgcGJmKTtcbn1cblxuZnVuY3Rpb24gd3JpdGVCaWdWYXJpbnRMb3cobG93LCBoaWdoLCBwYmYpIHtcbiAgICBwYmYuYnVmW3BiZi5wb3MrK10gPSBsb3cgJiAweDdmIHwgMHg4MDsgbG93ID4+Pj0gNztcbiAgICBwYmYuYnVmW3BiZi5wb3MrK10gPSBsb3cgJiAweDdmIHwgMHg4MDsgbG93ID4+Pj0gNztcbiAgICBwYmYuYnVmW3BiZi5wb3MrK10gPSBsb3cgJiAweDdmIHwgMHg4MDsgbG93ID4+Pj0gNztcbiAgICBwYmYuYnVmW3BiZi5wb3MrK10gPSBsb3cgJiAweDdmIHwgMHg4MDsgbG93ID4+Pj0gNztcbiAgICBwYmYuYnVmW3BiZi5wb3NdICAgPSBsb3cgJiAweDdmO1xufVxuXG5mdW5jdGlvbiB3cml0ZUJpZ1ZhcmludEhpZ2goaGlnaCwgcGJmKSB7XG4gICAgdmFyIGxzYiA9IChoaWdoICYgMHgwNykgPDwgNDtcblxuICAgIHBiZi5idWZbcGJmLnBvcysrXSB8PSBsc2IgICAgICAgICB8ICgoaGlnaCA+Pj49IDMpID8gMHg4MCA6IDApOyBpZiAoIWhpZ2gpIHJldHVybjtcbiAgICBwYmYuYnVmW3BiZi5wb3MrK10gID0gaGlnaCAmIDB4N2YgfCAoKGhpZ2ggPj4+PSA3KSA/IDB4ODAgOiAwKTsgaWYgKCFoaWdoKSByZXR1cm47XG4gICAgcGJmLmJ1ZltwYmYucG9zKytdICA9IGhpZ2ggJiAweDdmIHwgKChoaWdoID4+Pj0gNykgPyAweDgwIDogMCk7IGlmICghaGlnaCkgcmV0dXJuO1xuICAgIHBiZi5idWZbcGJmLnBvcysrXSAgPSBoaWdoICYgMHg3ZiB8ICgoaGlnaCA+Pj49IDcpID8gMHg4MCA6IDApOyBpZiAoIWhpZ2gpIHJldHVybjtcbiAgICBwYmYuYnVmW3BiZi5wb3MrK10gID0gaGlnaCAmIDB4N2YgfCAoKGhpZ2ggPj4+PSA3KSA/IDB4ODAgOiAwKTsgaWYgKCFoaWdoKSByZXR1cm47XG4gICAgcGJmLmJ1ZltwYmYucG9zKytdICA9IGhpZ2ggJiAweDdmO1xufVxuXG5mdW5jdGlvbiBtYWtlUm9vbUZvckV4dHJhTGVuZ3RoKHN0YXJ0UG9zLCBsZW4sIHBiZikge1xuICAgIHZhciBleHRyYUxlbiA9XG4gICAgICAgIGxlbiA8PSAweDNmZmYgPyAxIDpcbiAgICAgICAgbGVuIDw9IDB4MWZmZmZmID8gMiA6XG4gICAgICAgIGxlbiA8PSAweGZmZmZmZmYgPyAzIDogTWF0aC5mbG9vcihNYXRoLmxvZyhsZW4pIC8gKE1hdGguTE4yICogNykpO1xuXG4gICAgLy8gaWYgMSBieXRlIGlzbid0IGVub3VnaCBmb3IgZW5jb2RpbmcgbWVzc2FnZSBsZW5ndGgsIHNoaWZ0IHRoZSBkYXRhIHRvIHRoZSByaWdodFxuICAgIHBiZi5yZWFsbG9jKGV4dHJhTGVuKTtcbiAgICBmb3IgKHZhciBpID0gcGJmLnBvcyAtIDE7IGkgPj0gc3RhcnRQb3M7IGktLSkgcGJmLmJ1ZltpICsgZXh0cmFMZW5dID0gcGJmLmJ1ZltpXTtcbn1cblxuZnVuY3Rpb24gd3JpdGVQYWNrZWRWYXJpbnQoYXJyLCBwYmYpICAgeyBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgcGJmLndyaXRlVmFyaW50KGFycltpXSk7ICAgfVxuZnVuY3Rpb24gd3JpdGVQYWNrZWRTVmFyaW50KGFyciwgcGJmKSAgeyBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgcGJmLndyaXRlU1ZhcmludChhcnJbaV0pOyAgfVxuZnVuY3Rpb24gd3JpdGVQYWNrZWRGbG9hdChhcnIsIHBiZikgICAgeyBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgcGJmLndyaXRlRmxvYXQoYXJyW2ldKTsgICAgfVxuZnVuY3Rpb24gd3JpdGVQYWNrZWREb3VibGUoYXJyLCBwYmYpICAgeyBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgcGJmLndyaXRlRG91YmxlKGFycltpXSk7ICAgfVxuZnVuY3Rpb24gd3JpdGVQYWNrZWRCb29sZWFuKGFyciwgcGJmKSAgeyBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgcGJmLndyaXRlQm9vbGVhbihhcnJbaV0pOyAgfVxuZnVuY3Rpb24gd3JpdGVQYWNrZWRGaXhlZDMyKGFyciwgcGJmKSAgeyBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgcGJmLndyaXRlRml4ZWQzMihhcnJbaV0pOyAgfVxuZnVuY3Rpb24gd3JpdGVQYWNrZWRTRml4ZWQzMihhcnIsIHBiZikgeyBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgcGJmLndyaXRlU0ZpeGVkMzIoYXJyW2ldKTsgfVxuZnVuY3Rpb24gd3JpdGVQYWNrZWRGaXhlZDY0KGFyciwgcGJmKSAgeyBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgcGJmLndyaXRlRml4ZWQ2NChhcnJbaV0pOyAgfVxuZnVuY3Rpb24gd3JpdGVQYWNrZWRTRml4ZWQ2NChhcnIsIHBiZikgeyBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgcGJmLndyaXRlU0ZpeGVkNjQoYXJyW2ldKTsgfVxuXG4vLyBCdWZmZXIgY29kZSBiZWxvdyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyLCBNSVQtbGljZW5zZWRcblxuZnVuY3Rpb24gcmVhZFVJbnQzMihidWYsIHBvcykge1xuICAgIHJldHVybiAoKGJ1Zltwb3NdKSB8XG4gICAgICAgIChidWZbcG9zICsgMV0gPDwgOCkgfFxuICAgICAgICAoYnVmW3BvcyArIDJdIDw8IDE2KSkgK1xuICAgICAgICAoYnVmW3BvcyArIDNdICogMHgxMDAwMDAwKTtcbn1cblxuZnVuY3Rpb24gd3JpdGVJbnQzMihidWYsIHZhbCwgcG9zKSB7XG4gICAgYnVmW3Bvc10gPSB2YWw7XG4gICAgYnVmW3BvcyArIDFdID0gKHZhbCA+Pj4gOCk7XG4gICAgYnVmW3BvcyArIDJdID0gKHZhbCA+Pj4gMTYpO1xuICAgIGJ1Zltwb3MgKyAzXSA9ICh2YWwgPj4+IDI0KTtcbn1cblxuZnVuY3Rpb24gcmVhZEludDMyKGJ1ZiwgcG9zKSB7XG4gICAgcmV0dXJuICgoYnVmW3Bvc10pIHxcbiAgICAgICAgKGJ1Zltwb3MgKyAxXSA8PCA4KSB8XG4gICAgICAgIChidWZbcG9zICsgMl0gPDwgMTYpKSArXG4gICAgICAgIChidWZbcG9zICsgM10gPDwgMjQpO1xufVxuXG5mdW5jdGlvbiByZWFkVXRmOChidWYsIHBvcywgZW5kKSB7XG4gICAgdmFyIHN0ciA9ICcnO1xuICAgIHZhciBpID0gcG9zO1xuXG4gICAgd2hpbGUgKGkgPCBlbmQpIHtcbiAgICAgICAgdmFyIGIwID0gYnVmW2ldO1xuICAgICAgICB2YXIgYyA9IG51bGw7IC8vIGNvZGVwb2ludFxuICAgICAgICB2YXIgYnl0ZXNQZXJTZXF1ZW5jZSA9XG4gICAgICAgICAgICBiMCA+IDB4RUYgPyA0IDpcbiAgICAgICAgICAgIGIwID4gMHhERiA/IDMgOlxuICAgICAgICAgICAgYjAgPiAweEJGID8gMiA6IDE7XG5cbiAgICAgICAgaWYgKGkgKyBieXRlc1BlclNlcXVlbmNlID4gZW5kKSBicmVhaztcblxuICAgICAgICB2YXIgYjEsIGIyLCBiMztcblxuICAgICAgICBpZiAoYnl0ZXNQZXJTZXF1ZW5jZSA9PT0gMSkge1xuICAgICAgICAgICAgaWYgKGIwIDwgMHg4MCkge1xuICAgICAgICAgICAgICAgIGMgPSBiMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChieXRlc1BlclNlcXVlbmNlID09PSAyKSB7XG4gICAgICAgICAgICBiMSA9IGJ1ZltpICsgMV07XG4gICAgICAgICAgICBpZiAoKGIxICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgICAgICBjID0gKGIwICYgMHgxRikgPDwgMHg2IHwgKGIxICYgMHgzRik7XG4gICAgICAgICAgICAgICAgaWYgKGMgPD0gMHg3Rikge1xuICAgICAgICAgICAgICAgICAgICBjID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoYnl0ZXNQZXJTZXF1ZW5jZSA9PT0gMykge1xuICAgICAgICAgICAgYjEgPSBidWZbaSArIDFdO1xuICAgICAgICAgICAgYjIgPSBidWZbaSArIDJdO1xuICAgICAgICAgICAgaWYgKChiMSAmIDB4QzApID09PSAweDgwICYmIChiMiAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICAgICAgYyA9IChiMCAmIDB4RikgPDwgMHhDIHwgKGIxICYgMHgzRikgPDwgMHg2IHwgKGIyICYgMHgzRik7XG4gICAgICAgICAgICAgICAgaWYgKGMgPD0gMHg3RkYgfHwgKGMgPj0gMHhEODAwICYmIGMgPD0gMHhERkZGKSkge1xuICAgICAgICAgICAgICAgICAgICBjID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoYnl0ZXNQZXJTZXF1ZW5jZSA9PT0gNCkge1xuICAgICAgICAgICAgYjEgPSBidWZbaSArIDFdO1xuICAgICAgICAgICAgYjIgPSBidWZbaSArIDJdO1xuICAgICAgICAgICAgYjMgPSBidWZbaSArIDNdO1xuICAgICAgICAgICAgaWYgKChiMSAmIDB4QzApID09PSAweDgwICYmIChiMiAmIDB4QzApID09PSAweDgwICYmIChiMyAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICAgICAgYyA9IChiMCAmIDB4RikgPDwgMHgxMiB8IChiMSAmIDB4M0YpIDw8IDB4QyB8IChiMiAmIDB4M0YpIDw8IDB4NiB8IChiMyAmIDB4M0YpO1xuICAgICAgICAgICAgICAgIGlmIChjIDw9IDB4RkZGRiB8fCBjID49IDB4MTEwMDAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGMgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjID09PSBudWxsKSB7XG4gICAgICAgICAgICBjID0gMHhGRkZEO1xuICAgICAgICAgICAgYnl0ZXNQZXJTZXF1ZW5jZSA9IDE7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjID4gMHhGRkZGKSB7XG4gICAgICAgICAgICBjIC09IDB4MTAwMDA7XG4gICAgICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKTtcbiAgICAgICAgICAgIGMgPSAweERDMDAgfCBjICYgMHgzRkY7XG4gICAgICAgIH1cblxuICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjKTtcbiAgICAgICAgaSArPSBieXRlc1BlclNlcXVlbmNlO1xuICAgIH1cblxuICAgIHJldHVybiBzdHI7XG59XG5cbmZ1bmN0aW9uIHJlYWRVdGY4VGV4dERlY29kZXIoYnVmLCBwb3MsIGVuZCkge1xuICAgIHJldHVybiB1dGY4VGV4dERlY29kZXIuZGVjb2RlKGJ1Zi5zdWJhcnJheShwb3MsIGVuZCkpO1xufVxuXG5mdW5jdGlvbiB3cml0ZVV0ZjgoYnVmLCBzdHIsIHBvcykge1xuICAgIGZvciAodmFyIGkgPSAwLCBjLCBsZWFkOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGMgPSBzdHIuY2hhckNvZGVBdChpKTsgLy8gY29kZSBwb2ludFxuXG4gICAgICAgIGlmIChjID4gMHhEN0ZGICYmIGMgPCAweEUwMDApIHtcbiAgICAgICAgICAgIGlmIChsZWFkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGMgPCAweERDMDApIHtcbiAgICAgICAgICAgICAgICAgICAgYnVmW3BvcysrXSA9IDB4RUY7XG4gICAgICAgICAgICAgICAgICAgIGJ1Zltwb3MrK10gPSAweEJGO1xuICAgICAgICAgICAgICAgICAgICBidWZbcG9zKytdID0gMHhCRDtcbiAgICAgICAgICAgICAgICAgICAgbGVhZCA9IGM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGMgPSBsZWFkIC0gMHhEODAwIDw8IDEwIHwgYyAtIDB4REMwMCB8IDB4MTAwMDA7XG4gICAgICAgICAgICAgICAgICAgIGxlYWQgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGMgPiAweERCRkYgfHwgKGkgKyAxID09PSBzdHIubGVuZ3RoKSkge1xuICAgICAgICAgICAgICAgICAgICBidWZbcG9zKytdID0gMHhFRjtcbiAgICAgICAgICAgICAgICAgICAgYnVmW3BvcysrXSA9IDB4QkY7XG4gICAgICAgICAgICAgICAgICAgIGJ1Zltwb3MrK10gPSAweEJEO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxlYWQgPSBjO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChsZWFkKSB7XG4gICAgICAgICAgICBidWZbcG9zKytdID0gMHhFRjtcbiAgICAgICAgICAgIGJ1Zltwb3MrK10gPSAweEJGO1xuICAgICAgICAgICAgYnVmW3BvcysrXSA9IDB4QkQ7XG4gICAgICAgICAgICBsZWFkID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjIDwgMHg4MCkge1xuICAgICAgICAgICAgYnVmW3BvcysrXSA9IGM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoYyA8IDB4ODAwKSB7XG4gICAgICAgICAgICAgICAgYnVmW3BvcysrXSA9IGMgPj4gMHg2IHwgMHhDMDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGMgPCAweDEwMDAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1Zltwb3MrK10gPSBjID4+IDB4QyB8IDB4RTA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnVmW3BvcysrXSA9IGMgPj4gMHgxMiB8IDB4RjA7XG4gICAgICAgICAgICAgICAgICAgIGJ1Zltwb3MrK10gPSBjID4+IDB4QyAmIDB4M0YgfCAweDgwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBidWZbcG9zKytdID0gYyA+PiAweDYgJiAweDNGIHwgMHg4MDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJ1Zltwb3MrK10gPSBjICYgMHgzRiB8IDB4ODA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBvcztcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7QWxwaGFJbWFnZX0gZnJvbSAnLi4vdXRpbC9pbWFnZSc7XG5cbmltcG9ydCBQcm90b2J1ZiBmcm9tICdwYmYnO1xuY29uc3QgYm9yZGVyID0gMztcblxuaW1wb3J0IHR5cGUge1N0eWxlR2x5cGh9IGZyb20gJy4vc3R5bGVfZ2x5cGgnO1xuXG5mdW5jdGlvbiByZWFkRm9udHN0YWNrcyh0YWc6IG51bWJlciwgZ2x5cGhzOiBBcnJheTxTdHlsZUdseXBoPiwgcGJmOiBQcm90b2J1Zikge1xuICAgIGlmICh0YWcgPT09IDEpIHtcbiAgICAgICAgcGJmLnJlYWRNZXNzYWdlKHJlYWRGb250c3RhY2ssIGdseXBocyk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiByZWFkRm9udHN0YWNrKHRhZzogbnVtYmVyLCBnbHlwaHM6IEFycmF5PFN0eWxlR2x5cGg+LCBwYmY6IFByb3RvYnVmKSB7XG4gICAgaWYgKHRhZyA9PT0gMykge1xuICAgICAgICBjb25zdCB7aWQsIGJpdG1hcCwgd2lkdGgsIGhlaWdodCwgbGVmdCwgdG9wLCBhZHZhbmNlfSA9IHBiZi5yZWFkTWVzc2FnZShyZWFkR2x5cGgsIHt9KTtcbiAgICAgICAgZ2x5cGhzLnB1c2goe1xuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICBiaXRtYXA6IG5ldyBBbHBoYUltYWdlKHtcbiAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGggKyAyICogYm9yZGVyLFxuICAgICAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0ICsgMiAqIGJvcmRlclxuICAgICAgICAgICAgfSwgYml0bWFwKSxcbiAgICAgICAgICAgIG1ldHJpY3M6IHt3aWR0aCwgaGVpZ2h0LCBsZWZ0LCB0b3AsIGFkdmFuY2V9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcmVhZEdseXBoKHRhZzogbnVtYmVyLCBnbHlwaDogT2JqZWN0LCBwYmY6IFByb3RvYnVmKSB7XG4gICAgaWYgKHRhZyA9PT0gMSkgZ2x5cGguaWQgPSBwYmYucmVhZFZhcmludCgpO1xuICAgIGVsc2UgaWYgKHRhZyA9PT0gMikgZ2x5cGguYml0bWFwID0gcGJmLnJlYWRCeXRlcygpO1xuICAgIGVsc2UgaWYgKHRhZyA9PT0gMykgZ2x5cGgud2lkdGggPSBwYmYucmVhZFZhcmludCgpO1xuICAgIGVsc2UgaWYgKHRhZyA9PT0gNCkgZ2x5cGguaGVpZ2h0ID0gcGJmLnJlYWRWYXJpbnQoKTtcbiAgICBlbHNlIGlmICh0YWcgPT09IDUpIGdseXBoLmxlZnQgPSBwYmYucmVhZFNWYXJpbnQoKTtcbiAgICBlbHNlIGlmICh0YWcgPT09IDYpIGdseXBoLnRvcCA9IHBiZi5yZWFkU1ZhcmludCgpO1xuICAgIGVsc2UgaWYgKHRhZyA9PT0gNykgZ2x5cGguYWR2YW5jZSA9IHBiZi5yZWFkVmFyaW50KCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChkYXRhOiBBcnJheUJ1ZmZlciB8IFVpbnQ4QXJyYXkpOiBBcnJheTxTdHlsZUdseXBoPiB7XG4gICAgcmV0dXJuIG5ldyBQcm90b2J1ZihkYXRhKS5yZWFkRmllbGRzKHJlYWRGb250c3RhY2tzLCBbXSk7XG59XG5cbmV4cG9ydCBjb25zdCBHTFlQSF9QQkZfQk9SREVSID0gYm9yZGVyO1xuIiwiXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwb3RwYWNrKGJveGVzKSB7XG5cbiAgICAvLyBjYWxjdWxhdGUgdG90YWwgYm94IGFyZWEgYW5kIG1heGltdW0gYm94IHdpZHRoXG4gICAgbGV0IGFyZWEgPSAwO1xuICAgIGxldCBtYXhXaWR0aCA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IGJveCBvZiBib3hlcykge1xuICAgICAgICBhcmVhICs9IGJveC53ICogYm94Lmg7XG4gICAgICAgIG1heFdpZHRoID0gTWF0aC5tYXgobWF4V2lkdGgsIGJveC53KTtcbiAgICB9XG5cbiAgICAvLyBzb3J0IHRoZSBib3hlcyBmb3IgaW5zZXJ0aW9uIGJ5IGhlaWdodCwgZGVzY2VuZGluZ1xuICAgIGJveGVzLnNvcnQoKGEsIGIpID0+IGIuaCAtIGEuaCk7XG5cbiAgICAvLyBhaW0gZm9yIGEgc3F1YXJpc2ggcmVzdWx0aW5nIGNvbnRhaW5lcixcbiAgICAvLyBzbGlnaHRseSBhZGp1c3RlZCBmb3Igc3ViLTEwMCUgc3BhY2UgdXRpbGl6YXRpb25cbiAgICBjb25zdCBzdGFydFdpZHRoID0gTWF0aC5tYXgoTWF0aC5jZWlsKE1hdGguc3FydChhcmVhIC8gMC45NSkpLCBtYXhXaWR0aCk7XG5cbiAgICAvLyBzdGFydCB3aXRoIGEgc2luZ2xlIGVtcHR5IHNwYWNlLCB1bmJvdW5kZWQgYXQgdGhlIGJvdHRvbVxuICAgIGNvbnN0IHNwYWNlcyA9IFt7eDogMCwgeTogMCwgdzogc3RhcnRXaWR0aCwgaDogSW5maW5pdHl9XTtcblxuICAgIGxldCB3aWR0aCA9IDA7XG4gICAgbGV0IGhlaWdodCA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IGJveCBvZiBib3hlcykge1xuICAgICAgICAvLyBsb29rIHRocm91Z2ggc3BhY2VzIGJhY2t3YXJkcyBzbyB0aGF0IHdlIGNoZWNrIHNtYWxsZXIgc3BhY2VzIGZpcnN0XG4gICAgICAgIGZvciAobGV0IGkgPSBzcGFjZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IHNwYWNlID0gc3BhY2VzW2ldO1xuXG4gICAgICAgICAgICAvLyBsb29rIGZvciBlbXB0eSBzcGFjZXMgdGhhdCBjYW4gYWNjb21tb2RhdGUgdGhlIGN1cnJlbnQgYm94XG4gICAgICAgICAgICBpZiAoYm94LncgPiBzcGFjZS53IHx8IGJveC5oID4gc3BhY2UuaCkgY29udGludWU7XG5cbiAgICAgICAgICAgIC8vIGZvdW5kIHRoZSBzcGFjZTsgYWRkIHRoZSBib3ggdG8gaXRzIHRvcC1sZWZ0IGNvcm5lclxuICAgICAgICAgICAgLy8gfC0tLS0tLS18LS0tLS0tLXxcbiAgICAgICAgICAgIC8vIHwgIGJveCAgfCAgICAgICB8XG4gICAgICAgICAgICAvLyB8X19fX19fX3wgICAgICAgfFxuICAgICAgICAgICAgLy8gfCAgICAgICAgIHNwYWNlIHxcbiAgICAgICAgICAgIC8vIHxfX19fX19fX19fX19fX198XG4gICAgICAgICAgICBib3gueCA9IHNwYWNlLng7XG4gICAgICAgICAgICBib3gueSA9IHNwYWNlLnk7XG5cbiAgICAgICAgICAgIGhlaWdodCA9IE1hdGgubWF4KGhlaWdodCwgYm94LnkgKyBib3guaCk7XG4gICAgICAgICAgICB3aWR0aCA9IE1hdGgubWF4KHdpZHRoLCBib3gueCArIGJveC53KTtcblxuICAgICAgICAgICAgaWYgKGJveC53ID09PSBzcGFjZS53ICYmIGJveC5oID09PSBzcGFjZS5oKSB7XG4gICAgICAgICAgICAgICAgLy8gc3BhY2UgbWF0Y2hlcyB0aGUgYm94IGV4YWN0bHk7IHJlbW92ZSBpdFxuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3QgPSBzcGFjZXMucG9wKCk7XG4gICAgICAgICAgICAgICAgaWYgKGkgPCBzcGFjZXMubGVuZ3RoKSBzcGFjZXNbaV0gPSBsYXN0O1xuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGJveC5oID09PSBzcGFjZS5oKSB7XG4gICAgICAgICAgICAgICAgLy8gc3BhY2UgbWF0Y2hlcyB0aGUgYm94IGhlaWdodDsgdXBkYXRlIGl0IGFjY29yZGluZ2x5XG4gICAgICAgICAgICAgICAgLy8gfC0tLS0tLS18LS0tLS0tLS0tLS0tLS0tfFxuICAgICAgICAgICAgICAgIC8vIHwgIGJveCAgfCB1cGRhdGVkIHNwYWNlIHxcbiAgICAgICAgICAgICAgICAvLyB8X19fX19fX3xfX19fX19fX19fX19fX198XG4gICAgICAgICAgICAgICAgc3BhY2UueCArPSBib3gudztcbiAgICAgICAgICAgICAgICBzcGFjZS53IC09IGJveC53O1xuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGJveC53ID09PSBzcGFjZS53KSB7XG4gICAgICAgICAgICAgICAgLy8gc3BhY2UgbWF0Y2hlcyB0aGUgYm94IHdpZHRoOyB1cGRhdGUgaXQgYWNjb3JkaW5nbHlcbiAgICAgICAgICAgICAgICAvLyB8LS0tLS0tLS0tLS0tLS0tfFxuICAgICAgICAgICAgICAgIC8vIHwgICAgICBib3ggICAgICB8XG4gICAgICAgICAgICAgICAgLy8gfF9fX19fX19fX19fX19fX3xcbiAgICAgICAgICAgICAgICAvLyB8IHVwZGF0ZWQgc3BhY2UgfFxuICAgICAgICAgICAgICAgIC8vIHxfX19fX19fX19fX19fX198XG4gICAgICAgICAgICAgICAgc3BhY2UueSArPSBib3guaDtcbiAgICAgICAgICAgICAgICBzcGFjZS5oIC09IGJveC5oO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSB0aGUgYm94IHNwbGl0cyB0aGUgc3BhY2UgaW50byB0d28gc3BhY2VzXG4gICAgICAgICAgICAgICAgLy8gfC0tLS0tLS18LS0tLS0tLS0tLS18XG4gICAgICAgICAgICAgICAgLy8gfCAgYm94ICB8IG5ldyBzcGFjZSB8XG4gICAgICAgICAgICAgICAgLy8gfF9fX19fX198X19fX19fX19fX198XG4gICAgICAgICAgICAgICAgLy8gfCB1cGRhdGVkIHNwYWNlICAgICB8XG4gICAgICAgICAgICAgICAgLy8gfF9fX19fX19fX19fX19fX19fX198XG4gICAgICAgICAgICAgICAgc3BhY2VzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICB4OiBzcGFjZS54ICsgYm94LncsXG4gICAgICAgICAgICAgICAgICAgIHk6IHNwYWNlLnksXG4gICAgICAgICAgICAgICAgICAgIHc6IHNwYWNlLncgLSBib3gudyxcbiAgICAgICAgICAgICAgICAgICAgaDogYm94LmhcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzcGFjZS55ICs9IGJveC5oO1xuICAgICAgICAgICAgICAgIHNwYWNlLmggLT0gYm94Lmg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHc6IHdpZHRoLCAvLyBjb250YWluZXIgd2lkdGhcbiAgICAgICAgaDogaGVpZ2h0LCAvLyBjb250YWluZXIgaGVpZ2h0XG4gICAgICAgIGZpbGw6IChhcmVhIC8gKHdpZHRoICogaGVpZ2h0KSkgfHwgMCAvLyBzcGFjZSB1dGlsaXphdGlvblxuICAgIH07XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge1JHQkFJbWFnZX0gZnJvbSAnLi4vdXRpbC9pbWFnZSc7XG5pbXBvcnQge3JlZ2lzdGVyfSBmcm9tICcuLi91dGlsL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuaW1wb3J0IHBvdHBhY2sgZnJvbSAncG90cGFjayc7XG5cbmltcG9ydCB0eXBlIHtTdHlsZUltYWdlfSBmcm9tICcuLi9zdHlsZS9zdHlsZV9pbWFnZSc7XG5pbXBvcnQgdHlwZSBJbWFnZU1hbmFnZXIgZnJvbSAnLi9pbWFnZV9tYW5hZ2VyJztcbmltcG9ydCB0eXBlIFRleHR1cmUgZnJvbSAnLi90ZXh0dXJlJztcblxuY29uc3QgSU1BR0VfUEFERElORzogbnVtYmVyID0gMTtcbmV4cG9ydCB7SU1BR0VfUEFERElOR307XG5cbnR5cGUgUmVjdCA9IHtcbiAgICB4OiBudW1iZXIsXG4gICAgeTogbnVtYmVyLFxuICAgIHc6IG51bWJlcixcbiAgICBoOiBudW1iZXJcbn07XG5cbmV4cG9ydCBjbGFzcyBJbWFnZVBvc2l0aW9uIHtcbiAgICBwYWRkZWRSZWN0OiBSZWN0O1xuICAgIHBpeGVsUmF0aW86IG51bWJlcjtcbiAgICB2ZXJzaW9uOiBudW1iZXI7XG4gICAgc3RyZXRjaFk6ID9BcnJheTxbbnVtYmVyLCBudW1iZXJdPjtcbiAgICBzdHJldGNoWDogP0FycmF5PFtudW1iZXIsIG51bWJlcl0+O1xuICAgIGNvbnRlbnQ6ID9bbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcblxuICAgIGNvbnN0cnVjdG9yKHBhZGRlZFJlY3Q6IFJlY3QsIHtwaXhlbFJhdGlvLCB2ZXJzaW9uLCBzdHJldGNoWCwgc3RyZXRjaFksIGNvbnRlbnR9OiBTdHlsZUltYWdlKSB7XG4gICAgICAgIHRoaXMucGFkZGVkUmVjdCA9IHBhZGRlZFJlY3Q7XG4gICAgICAgIHRoaXMucGl4ZWxSYXRpbyA9IHBpeGVsUmF0aW87XG4gICAgICAgIHRoaXMuc3RyZXRjaFggPSBzdHJldGNoWDtcbiAgICAgICAgdGhpcy5zdHJldGNoWSA9IHN0cmV0Y2hZO1xuICAgICAgICB0aGlzLmNvbnRlbnQgPSBjb250ZW50O1xuICAgICAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9uO1xuICAgIH1cblxuICAgIGdldCB0bCgpOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHRoaXMucGFkZGVkUmVjdC54ICsgSU1BR0VfUEFERElORyxcbiAgICAgICAgICAgIHRoaXMucGFkZGVkUmVjdC55ICsgSU1BR0VfUEFERElOR1xuICAgICAgICBdO1xuICAgIH1cblxuICAgIGdldCBicigpOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHRoaXMucGFkZGVkUmVjdC54ICsgdGhpcy5wYWRkZWRSZWN0LncgLSBJTUFHRV9QQURESU5HLFxuICAgICAgICAgICAgdGhpcy5wYWRkZWRSZWN0LnkgKyB0aGlzLnBhZGRlZFJlY3QuaCAtIElNQUdFX1BBRERJTkdcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBnZXQgdGxicigpOiBBcnJheTxudW1iZXI+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGwuY29uY2F0KHRoaXMuYnIpO1xuICAgIH1cblxuICAgIGdldCBkaXNwbGF5U2l6ZSgpOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICh0aGlzLnBhZGRlZFJlY3QudyAtIElNQUdFX1BBRERJTkcgKiAyKSAvIHRoaXMucGl4ZWxSYXRpbyxcbiAgICAgICAgICAgICh0aGlzLnBhZGRlZFJlY3QuaCAtIElNQUdFX1BBRERJTkcgKiAyKSAvIHRoaXMucGl4ZWxSYXRpb1xuICAgICAgICBdO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW1hZ2VBdGxhcyB7XG4gICAgaW1hZ2U6IFJHQkFJbWFnZTtcbiAgICBpY29uUG9zaXRpb25zOiB7W186IHN0cmluZ106IEltYWdlUG9zaXRpb259O1xuICAgIHBhdHRlcm5Qb3NpdGlvbnM6IHtbXzogc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn07XG4gICAgaGF2ZVJlbmRlckNhbGxiYWNrczogQXJyYXk8c3RyaW5nPjtcbiAgICB1cGxvYWRlZDogP2Jvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihpY29uczoge1tfOiBzdHJpbmddOiBTdHlsZUltYWdlfSwgcGF0dGVybnM6IHtbXzogc3RyaW5nXTogU3R5bGVJbWFnZX0pIHtcbiAgICAgICAgY29uc3QgaWNvblBvc2l0aW9ucyA9IHt9LCBwYXR0ZXJuUG9zaXRpb25zID0ge307XG4gICAgICAgIHRoaXMuaGF2ZVJlbmRlckNhbGxiYWNrcyA9IFtdO1xuXG4gICAgICAgIGNvbnN0IGJpbnMgPSBbXTtcblxuICAgICAgICB0aGlzLmFkZEltYWdlcyhpY29ucywgaWNvblBvc2l0aW9ucywgYmlucyk7XG4gICAgICAgIHRoaXMuYWRkSW1hZ2VzKHBhdHRlcm5zLCBwYXR0ZXJuUG9zaXRpb25zLCBiaW5zKTtcblxuICAgICAgICBjb25zdCB7dywgaH0gPSBwb3RwYWNrKGJpbnMpO1xuICAgICAgICBjb25zdCBpbWFnZSA9IG5ldyBSR0JBSW1hZ2Uoe3dpZHRoOiB3IHx8IDEsIGhlaWdodDogaCB8fCAxfSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiBpY29ucykge1xuICAgICAgICAgICAgY29uc3Qgc3JjID0gaWNvbnNbaWRdO1xuICAgICAgICAgICAgY29uc3QgYmluID0gaWNvblBvc2l0aW9uc1tpZF0ucGFkZGVkUmVjdDtcbiAgICAgICAgICAgIFJHQkFJbWFnZS5jb3B5KHNyYy5kYXRhLCBpbWFnZSwge3g6IDAsIHk6IDB9LCB7eDogYmluLnggKyBJTUFHRV9QQURESU5HLCB5OiBiaW4ueSArIElNQUdFX1BBRERJTkd9LCBzcmMuZGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHBhdHRlcm5zKSB7XG4gICAgICAgICAgICBjb25zdCBzcmMgPSBwYXR0ZXJuc1tpZF07XG4gICAgICAgICAgICBjb25zdCBiaW4gPSBwYXR0ZXJuUG9zaXRpb25zW2lkXS5wYWRkZWRSZWN0O1xuICAgICAgICAgICAgY29uc3QgeCA9IGJpbi54ICsgSU1BR0VfUEFERElORyxcbiAgICAgICAgICAgICAgICB5ID0gYmluLnkgKyBJTUFHRV9QQURESU5HLFxuICAgICAgICAgICAgICAgIHcgPSBzcmMuZGF0YS53aWR0aCxcbiAgICAgICAgICAgICAgICBoID0gc3JjLmRhdGEuaGVpZ2h0O1xuXG4gICAgICAgICAgICBSR0JBSW1hZ2UuY29weShzcmMuZGF0YSwgaW1hZ2UsIHt4OiAwLCB5OiAwfSwge3gsIHl9LCBzcmMuZGF0YSk7XG4gICAgICAgICAgICAvLyBBZGQgMSBwaXhlbCB3cmFwcGVkIHBhZGRpbmcgb24gZWFjaCBzaWRlIG9mIHRoZSBpbWFnZS5cbiAgICAgICAgICAgIFJHQkFJbWFnZS5jb3B5KHNyYy5kYXRhLCBpbWFnZSwge3g6IDAsIHk6IGggLSAxfSwge3gsIHk6IHkgLSAxfSwge3dpZHRoOiB3LCBoZWlnaHQ6IDF9KTsgLy8gVFxuICAgICAgICAgICAgUkdCQUltYWdlLmNvcHkoc3JjLmRhdGEsIGltYWdlLCB7eDogMCwgeTogICAgIDB9LCB7eCwgeTogeSArIGh9LCB7d2lkdGg6IHcsIGhlaWdodDogMX0pOyAvLyBCXG4gICAgICAgICAgICBSR0JBSW1hZ2UuY29weShzcmMuZGF0YSwgaW1hZ2UsIHt4OiB3IC0gMSwgeTogMH0sIHt4OiB4IC0gMSwgeX0sIHt3aWR0aDogMSwgaGVpZ2h0OiBofSk7IC8vIExcbiAgICAgICAgICAgIFJHQkFJbWFnZS5jb3B5KHNyYy5kYXRhLCBpbWFnZSwge3g6IDAsICAgICB5OiAwfSwge3g6IHggKyB3LCB5fSwge3dpZHRoOiAxLCBoZWlnaHQ6IGh9KTsgLy8gUlxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbWFnZSA9IGltYWdlO1xuICAgICAgICB0aGlzLmljb25Qb3NpdGlvbnMgPSBpY29uUG9zaXRpb25zO1xuICAgICAgICB0aGlzLnBhdHRlcm5Qb3NpdGlvbnMgPSBwYXR0ZXJuUG9zaXRpb25zO1xuICAgIH1cblxuICAgIGFkZEltYWdlcyhpbWFnZXM6IHtbXzogc3RyaW5nXTogU3R5bGVJbWFnZX0sIHBvc2l0aW9uczoge1tfOiBzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSwgYmluczogQXJyYXk8UmVjdD4pIHtcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiBpbWFnZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNyYyA9IGltYWdlc1tpZF07XG4gICAgICAgICAgICBjb25zdCBiaW4gPSB7XG4gICAgICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgICAgICB5OiAwLFxuICAgICAgICAgICAgICAgIHc6IHNyYy5kYXRhLndpZHRoICsgMiAqIElNQUdFX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgaDogc3JjLmRhdGEuaGVpZ2h0ICsgMiAqIElNQUdFX1BBRERJTkcsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYmlucy5wdXNoKGJpbik7XG4gICAgICAgICAgICBwb3NpdGlvbnNbaWRdID0gbmV3IEltYWdlUG9zaXRpb24oYmluLCBzcmMpO1xuXG4gICAgICAgICAgICBpZiAoc3JjLmhhc1JlbmRlckNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYXZlUmVuZGVyQ2FsbGJhY2tzLnB1c2goaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcGF0Y2hVcGRhdGVkSW1hZ2VzKGltYWdlTWFuYWdlcjogSW1hZ2VNYW5hZ2VyLCB0ZXh0dXJlOiBUZXh0dXJlKSB7XG4gICAgICAgIGltYWdlTWFuYWdlci5kaXNwYXRjaFJlbmRlckNhbGxiYWNrcyh0aGlzLmhhdmVSZW5kZXJDYWxsYmFja3MpO1xuICAgICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gaW1hZ2VNYW5hZ2VyLnVwZGF0ZWRJbWFnZXMpIHtcbiAgICAgICAgICAgIHRoaXMucGF0Y2hVcGRhdGVkSW1hZ2UodGhpcy5pY29uUG9zaXRpb25zW25hbWVdLCBpbWFnZU1hbmFnZXIuZ2V0SW1hZ2UobmFtZSksIHRleHR1cmUpO1xuICAgICAgICAgICAgdGhpcy5wYXRjaFVwZGF0ZWRJbWFnZSh0aGlzLnBhdHRlcm5Qb3NpdGlvbnNbbmFtZV0sIGltYWdlTWFuYWdlci5nZXRJbWFnZShuYW1lKSwgdGV4dHVyZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwYXRjaFVwZGF0ZWRJbWFnZShwb3NpdGlvbjogP0ltYWdlUG9zaXRpb24sIGltYWdlOiA/U3R5bGVJbWFnZSwgdGV4dHVyZTogVGV4dHVyZSkge1xuICAgICAgICBpZiAoIXBvc2l0aW9uIHx8ICFpbWFnZSkgcmV0dXJuO1xuXG4gICAgICAgIGlmIChwb3NpdGlvbi52ZXJzaW9uID09PSBpbWFnZS52ZXJzaW9uKSByZXR1cm47XG5cbiAgICAgICAgcG9zaXRpb24udmVyc2lvbiA9IGltYWdlLnZlcnNpb247XG4gICAgICAgIGNvbnN0IFt4LCB5XSA9IHBvc2l0aW9uLnRsO1xuICAgICAgICB0ZXh0dXJlLnVwZGF0ZShpbWFnZS5kYXRhLCB1bmRlZmluZWQsIHt4LCB5fSk7XG4gICAgfVxuXG59XG5cbnJlZ2lzdGVyKCdJbWFnZVBvc2l0aW9uJywgSW1hZ2VQb3NpdGlvbik7XG5yZWdpc3RlcignSW1hZ2VBdGxhcycsIEltYWdlQXRsYXMpO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHtcbiAgICBjaGFySGFzVXByaWdodFZlcnRpY2FsT3JpZW50YXRpb24sXG4gICAgY2hhckFsbG93c0lkZW9ncmFwaGljQnJlYWtpbmcsXG4gICAgY2hhckluQ29tcGxleFNoYXBpbmdTY3JpcHRcbn0gZnJvbSAnLi4vdXRpbC9zY3JpcHRfZGV0ZWN0aW9uJztcbmltcG9ydCB2ZXJ0aWNhbGl6ZVB1bmN0dWF0aW9uIGZyb20gJy4uL3V0aWwvdmVydGljYWxpemVfcHVuY3R1YXRpb24nO1xuaW1wb3J0IHtwbHVnaW4gYXMgcnRsVGV4dFBsdWdpbn0gZnJvbSAnLi4vc291cmNlL3J0bF90ZXh0X3BsdWdpbic7XG5pbXBvcnQgT05FX0VNIGZyb20gJy4vb25lX2VtJztcbmltcG9ydCB7d2Fybk9uY2V9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5cbmltcG9ydCB0eXBlIHtTdHlsZUdseXBoLCBHbHlwaE1ldHJpY3N9IGZyb20gJy4uL3N0eWxlL3N0eWxlX2dseXBoJztcbmltcG9ydCB7R0xZUEhfUEJGX0JPUkRFUn0gZnJvbSAnLi4vc3R5bGUvcGFyc2VfZ2x5cGhfcGJmJztcbmltcG9ydCB0eXBlIHtJbWFnZVBvc2l0aW9ufSBmcm9tICcuLi9yZW5kZXIvaW1hZ2VfYXRsYXMnO1xuaW1wb3J0IHtJTUFHRV9QQURESU5HfSBmcm9tICcuLi9yZW5kZXIvaW1hZ2VfYXRsYXMnO1xuaW1wb3J0IHR5cGUge1JlY3QsIEdseXBoUG9zaXRpb259IGZyb20gJy4uL3JlbmRlci9nbHlwaF9hdGxhcyc7XG5pbXBvcnQgRm9ybWF0dGVkLCB7Rm9ybWF0dGVkU2VjdGlvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL2Zvcm1hdHRlZCc7XG5cbmNvbnN0IFdyaXRpbmdNb2RlID0ge1xuICAgIGhvcml6b250YWw6IDEsXG4gICAgdmVydGljYWw6IDIsXG4gICAgaG9yaXpvbnRhbE9ubHk6IDNcbn07XG5cbmNvbnN0IFNIQVBJTkdfREVGQVVMVF9PRkZTRVQgPSAtMTc7XG5leHBvcnQge3NoYXBlVGV4dCwgc2hhcGVJY29uLCBmaXRJY29uVG9UZXh0LCBnZXRBbmNob3JBbGlnbm1lbnQsIFdyaXRpbmdNb2RlLCBTSEFQSU5HX0RFRkFVTFRfT0ZGU0VUfTtcblxuLy8gVGhlIHBvc2l0aW9uIG9mIGEgZ2x5cGggcmVsYXRpdmUgdG8gdGhlIHRleHQncyBhbmNob3IgcG9pbnQuXG5leHBvcnQgdHlwZSBQb3NpdGlvbmVkR2x5cGggPSB7XG4gICAgZ2x5cGg6IG51bWJlcixcbiAgICBpbWFnZU5hbWU6IHN0cmluZyB8IG51bGwsXG4gICAgeDogbnVtYmVyLFxuICAgIHk6IG51bWJlcixcbiAgICB2ZXJ0aWNhbDogYm9vbGVhbixcbiAgICBzY2FsZTogbnVtYmVyLFxuICAgIGZvbnRTdGFjazogc3RyaW5nLFxuICAgIHNlY3Rpb25JbmRleDogbnVtYmVyLFxuICAgIG1ldHJpY3M6IEdseXBoTWV0cmljcyxcbiAgICByZWN0OiBSZWN0IHwgbnVsbFxufTtcblxuZXhwb3J0IHR5cGUgUG9zaXRpb25lZExpbmUgPSB7XG4gICAgcG9zaXRpb25lZEdseXBoczogQXJyYXk8UG9zaXRpb25lZEdseXBoPixcbiAgICBsaW5lT2Zmc2V0OiBudW1iZXJcbn07XG5cbi8vIEEgY29sbGVjdGlvbiBvZiBwb3NpdGlvbmVkIGdseXBocyBhbmQgc29tZSBtZXRhZGF0YVxuZXhwb3J0IHR5cGUgU2hhcGluZyA9IHtcbiAgICBwb3NpdGlvbmVkTGluZXM6IEFycmF5PFBvc2l0aW9uZWRMaW5lPixcbiAgICB0b3A6IG51bWJlcixcbiAgICBib3R0b206IG51bWJlcixcbiAgICBsZWZ0OiBudW1iZXIsXG4gICAgcmlnaHQ6IG51bWJlcixcbiAgICB3cml0aW5nTW9kZTogMSB8IDIsXG4gICAgdGV4dDogc3RyaW5nLFxuICAgIGljb25zSW5UZXh0OiBib29sZWFuLFxuICAgIHZlcnRpY2FsaXphYmxlOiBib29sZWFuXG59O1xuXG5mdW5jdGlvbiBpc0VtcHR5KHBvc2l0aW9uZWRMaW5lczogQXJyYXk8UG9zaXRpb25lZExpbmU+KSB7XG4gICAgZm9yIChjb25zdCBsaW5lIG9mIHBvc2l0aW9uZWRMaW5lcykge1xuICAgICAgICBpZiAobGluZS5wb3NpdGlvbmVkR2x5cGhzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgdHlwZSBTeW1ib2xBbmNob3IgPSAnY2VudGVyJyB8ICdsZWZ0JyB8ICdyaWdodCcgfCAndG9wJyB8ICdib3R0b20nIHwgJ3RvcC1sZWZ0JyB8ICd0b3AtcmlnaHQnIHwgJ2JvdHRvbS1sZWZ0JyB8ICdib3R0b20tcmlnaHQnO1xuZXhwb3J0IHR5cGUgVGV4dEp1c3RpZnkgPSAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCc7XG5cbi8vIE1heCBudW1iZXIgb2YgaW1hZ2VzIGluIGxhYmVsIGlzIDY0MDEgVStFMDAww6LCgMKTVStGOEZGIHRoYXQgY292ZXJzXG4vLyBCYXNpYyBNdWx0aWxpbmd1YWwgUGxhbmUgVW5pY29kZSBQcml2YXRlIFVzZSBBcmVhIChQVUEpLlxuY29uc3QgUFVBYmVnaW4gPSAweEUwMDA7XG5jb25zdCBQVUFlbmQgPSAweEY4RkY7XG5cbmNsYXNzIFNlY3Rpb25PcHRpb25zIHtcbiAgICAvLyBUZXh0IG9wdGlvbnNcbiAgICBzY2FsZTogbnVtYmVyO1xuICAgIGZvbnRTdGFjazogc3RyaW5nO1xuICAgIC8vIEltYWdlIG9wdGlvbnNcbiAgICBpbWFnZU5hbWU6IHN0cmluZyB8IG51bGw7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5zY2FsZSA9IDEuMDtcbiAgICAgICAgdGhpcy5mb250U3RhY2sgPSBcIlwiO1xuICAgICAgICB0aGlzLmltYWdlTmFtZSA9IG51bGw7XG4gICAgfVxuXG4gICAgc3RhdGljIGZvclRleHQoc2NhbGU6IG51bWJlciB8IG51bGwsIGZvbnRTdGFjazogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHRleHRPcHRpb25zID0gbmV3IFNlY3Rpb25PcHRpb25zKCk7XG4gICAgICAgIHRleHRPcHRpb25zLnNjYWxlID0gc2NhbGUgfHwgMTtcbiAgICAgICAgdGV4dE9wdGlvbnMuZm9udFN0YWNrID0gZm9udFN0YWNrO1xuICAgICAgICByZXR1cm4gdGV4dE9wdGlvbnM7XG4gICAgfVxuXG4gICAgc3RhdGljIGZvckltYWdlKGltYWdlTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGltYWdlT3B0aW9ucyA9IG5ldyBTZWN0aW9uT3B0aW9ucygpO1xuICAgICAgICBpbWFnZU9wdGlvbnMuaW1hZ2VOYW1lID0gaW1hZ2VOYW1lO1xuICAgICAgICByZXR1cm4gaW1hZ2VPcHRpb25zO1xuICAgIH1cblxufVxuXG5jbGFzcyBUYWdnZWRTdHJpbmcge1xuICAgIHRleHQ6IHN0cmluZztcbiAgICBzZWN0aW9uSW5kZXg6IEFycmF5PG51bWJlcj4gLy8gbWFwcyBlYWNoIGNoYXJhY3RlciBpbiAndGV4dCcgdG8gaXRzIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gJ3NlY3Rpb25zJ1xuICAgIHNlY3Rpb25zOiBBcnJheTxTZWN0aW9uT3B0aW9ucz5cbiAgICBpbWFnZVNlY3Rpb25JRDogbnVtYmVyIHwgbnVsbDtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnRleHQgPSBcIlwiO1xuICAgICAgICB0aGlzLnNlY3Rpb25JbmRleCA9IFtdO1xuICAgICAgICB0aGlzLnNlY3Rpb25zID0gW107XG4gICAgICAgIHRoaXMuaW1hZ2VTZWN0aW9uSUQgPSBudWxsO1xuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tRmVhdHVyZSh0ZXh0OiBGb3JtYXR0ZWQsIGRlZmF1bHRGb250U3RhY2s6IHN0cmluZykge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgVGFnZ2VkU3RyaW5nKCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dC5zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbiA9IHRleHQuc2VjdGlvbnNbaV07XG4gICAgICAgICAgICBpZiAoIXNlY3Rpb24uaW1hZ2UpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuYWRkVGV4dFNlY3Rpb24oc2VjdGlvbiwgZGVmYXVsdEZvbnRTdGFjayk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRJbWFnZVNlY3Rpb24oc2VjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBsZW5ndGgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dC5sZW5ndGg7XG4gICAgfVxuXG4gICAgZ2V0U2VjdGlvbihpbmRleDogbnVtYmVyKTogU2VjdGlvbk9wdGlvbnMge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWN0aW9uc1t0aGlzLnNlY3Rpb25JbmRleFtpbmRleF1dO1xuICAgIH1cblxuICAgIGdldFNlY3Rpb25JbmRleChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VjdGlvbkluZGV4W2luZGV4XTtcbiAgICB9XG5cbiAgICBnZXRDaGFyQ29kZShpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dC5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICB9XG5cbiAgICB2ZXJ0aWNhbGl6ZVB1bmN0dWF0aW9uKCkge1xuICAgICAgICB0aGlzLnRleHQgPSB2ZXJ0aWNhbGl6ZVB1bmN0dWF0aW9uKHRoaXMudGV4dCk7XG4gICAgfVxuXG4gICAgdHJpbSgpIHtcbiAgICAgICAgbGV0IGJlZ2lubmluZ1doaXRlc3BhY2UgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDtcbiAgICAgICAgICAgIGkgPCB0aGlzLnRleHQubGVuZ3RoICYmIHdoaXRlc3BhY2VbdGhpcy50ZXh0LmNoYXJDb2RlQXQoaSldO1xuICAgICAgICAgICAgaSsrKSB7XG4gICAgICAgICAgICBiZWdpbm5pbmdXaGl0ZXNwYWNlKys7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHRyYWlsaW5nV2hpdGVzcGFjZSA9IHRoaXMudGV4dC5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLnRleHQubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGkgPj0gMCAmJiBpID49IGJlZ2lubmluZ1doaXRlc3BhY2UgJiYgd2hpdGVzcGFjZVt0aGlzLnRleHQuY2hhckNvZGVBdChpKV07XG4gICAgICAgICAgICBpLS0pIHtcbiAgICAgICAgICAgIHRyYWlsaW5nV2hpdGVzcGFjZS0tO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGV4dCA9IHRoaXMudGV4dC5zdWJzdHJpbmcoYmVnaW5uaW5nV2hpdGVzcGFjZSwgdHJhaWxpbmdXaGl0ZXNwYWNlKTtcbiAgICAgICAgdGhpcy5zZWN0aW9uSW5kZXggPSB0aGlzLnNlY3Rpb25JbmRleC5zbGljZShiZWdpbm5pbmdXaGl0ZXNwYWNlLCB0cmFpbGluZ1doaXRlc3BhY2UpO1xuICAgIH1cblxuICAgIHN1YnN0cmluZyhzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IFRhZ2dlZFN0cmluZyB7XG4gICAgICAgIGNvbnN0IHN1YnN0cmluZyA9IG5ldyBUYWdnZWRTdHJpbmcoKTtcbiAgICAgICAgc3Vic3RyaW5nLnRleHQgPSB0aGlzLnRleHQuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpO1xuICAgICAgICBzdWJzdHJpbmcuc2VjdGlvbkluZGV4ID0gdGhpcy5zZWN0aW9uSW5kZXguc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgICAgIHN1YnN0cmluZy5zZWN0aW9ucyA9IHRoaXMuc2VjdGlvbnM7XG4gICAgICAgIHJldHVybiBzdWJzdHJpbmc7XG4gICAgfVxuXG4gICAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dDtcbiAgICB9XG5cbiAgICBnZXRNYXhTY2FsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VjdGlvbkluZGV4LnJlZHVjZSgobWF4LCBpbmRleCkgPT4gTWF0aC5tYXgobWF4LCB0aGlzLnNlY3Rpb25zW2luZGV4XS5zY2FsZSksIDApO1xuICAgIH1cblxuICAgIGFkZFRleHRTZWN0aW9uKHNlY3Rpb246IEZvcm1hdHRlZFNlY3Rpb24sIGRlZmF1bHRGb250U3RhY2s6IHN0cmluZykge1xuICAgICAgICB0aGlzLnRleHQgKz0gc2VjdGlvbi50ZXh0O1xuICAgICAgICB0aGlzLnNlY3Rpb25zLnB1c2goU2VjdGlvbk9wdGlvbnMuZm9yVGV4dChzZWN0aW9uLnNjYWxlLCBzZWN0aW9uLmZvbnRTdGFjayB8fCBkZWZhdWx0Rm9udFN0YWNrKSk7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zZWN0aW9ucy5sZW5ndGggLSAxO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlY3Rpb24udGV4dC5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5zZWN0aW9uSW5kZXgucHVzaChpbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRJbWFnZVNlY3Rpb24oc2VjdGlvbjogRm9ybWF0dGVkU2VjdGlvbikge1xuICAgICAgICBjb25zdCBpbWFnZU5hbWUgPSBzZWN0aW9uLmltYWdlID8gc2VjdGlvbi5pbWFnZS5uYW1lIDogJyc7XG4gICAgICAgIGlmIChpbWFnZU5hbWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB3YXJuT25jZShgQ2FuJ3QgYWRkIEZvcm1hdHRlZFNlY3Rpb24gd2l0aCBhbiBlbXB0eSBpbWFnZS5gKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5leHRJbWFnZVNlY3Rpb25DaGFyQ29kZSA9IHRoaXMuZ2V0TmV4dEltYWdlU2VjdGlvbkNoYXJDb2RlKCk7XG4gICAgICAgIGlmICghbmV4dEltYWdlU2VjdGlvbkNoYXJDb2RlKSB7XG4gICAgICAgICAgICB3YXJuT25jZShgUmVhY2hlZCBtYXhpbXVtIG51bWJlciBvZiBpbWFnZXMgJHtQVUFlbmQgLSBQVUFiZWdpbiArIDJ9YCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRleHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShuZXh0SW1hZ2VTZWN0aW9uQ2hhckNvZGUpO1xuICAgICAgICB0aGlzLnNlY3Rpb25zLnB1c2goU2VjdGlvbk9wdGlvbnMuZm9ySW1hZ2UoaW1hZ2VOYW1lKSk7XG4gICAgICAgIHRoaXMuc2VjdGlvbkluZGV4LnB1c2godGhpcy5zZWN0aW9ucy5sZW5ndGggLSAxKTtcbiAgICB9XG5cbiAgICBnZXROZXh0SW1hZ2VTZWN0aW9uQ2hhckNvZGUoKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgICAgIGlmICghdGhpcy5pbWFnZVNlY3Rpb25JRCkge1xuICAgICAgICAgICAgdGhpcy5pbWFnZVNlY3Rpb25JRCA9IFBVQWJlZ2luO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2VTZWN0aW9uSUQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pbWFnZVNlY3Rpb25JRCA+PSBQVUFlbmQpIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gKyt0aGlzLmltYWdlU2VjdGlvbklEO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gYnJlYWtMaW5lcyhpbnB1dDogVGFnZ2VkU3RyaW5nLCBsaW5lQnJlYWtQb2ludHM6IEFycmF5PG51bWJlcj4pOiBBcnJheTxUYWdnZWRTdHJpbmc+IHtcbiAgICBjb25zdCBsaW5lcyA9IFtdO1xuICAgIGNvbnN0IHRleHQgPSBpbnB1dC50ZXh0O1xuICAgIGxldCBzdGFydCA9IDA7XG4gICAgZm9yIChjb25zdCBsaW5lQnJlYWsgb2YgbGluZUJyZWFrUG9pbnRzKSB7XG4gICAgICAgIGxpbmVzLnB1c2goaW5wdXQuc3Vic3RyaW5nKHN0YXJ0LCBsaW5lQnJlYWspKTtcbiAgICAgICAgc3RhcnQgPSBsaW5lQnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0IDwgdGV4dC5sZW5ndGgpIHtcbiAgICAgICAgbGluZXMucHVzaChpbnB1dC5zdWJzdHJpbmcoc3RhcnQsIHRleHQubGVuZ3RoKSk7XG4gICAgfVxuICAgIHJldHVybiBsaW5lcztcbn1cblxuZnVuY3Rpb24gc2hhcGVUZXh0KHRleHQ6IEZvcm1hdHRlZCxcbiAgICAgICAgICAgICAgICAgICBnbHlwaE1hcDoge1tfOiBzdHJpbmddOiB7W186IG51bWJlcl06ID9TdHlsZUdseXBofX0sXG4gICAgICAgICAgICAgICAgICAgZ2x5cGhQb3NpdGlvbnM6IHtbXzogc3RyaW5nXToge1tfOiBudW1iZXJdOiBHbHlwaFBvc2l0aW9ufX0sXG4gICAgICAgICAgICAgICAgICAgaW1hZ2VQb3NpdGlvbnM6IHtbXzogc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0sXG4gICAgICAgICAgICAgICAgICAgZGVmYXVsdEZvbnRTdGFjazogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgbGluZUhlaWdodDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgIHRleHRBbmNob3I6IFN5bWJvbEFuY2hvcixcbiAgICAgICAgICAgICAgICAgICB0ZXh0SnVzdGlmeTogVGV4dEp1c3RpZnksXG4gICAgICAgICAgICAgICAgICAgc3BhY2luZzogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZTogW251bWJlciwgbnVtYmVyXSxcbiAgICAgICAgICAgICAgICAgICB3cml0aW5nTW9kZTogMSB8IDIsXG4gICAgICAgICAgICAgICAgICAgYWxsb3dWZXJ0aWNhbFBsYWNlbWVudDogYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICBzeW1ib2xQbGFjZW1lbnQ6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXh0U2l6ZTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgIGxheW91dFRleHRTaXplVGhpc1pvb206IG51bWJlcik6IFNoYXBpbmcgfCBmYWxzZSB7XG4gICAgY29uc3QgbG9naWNhbElucHV0ID0gVGFnZ2VkU3RyaW5nLmZyb21GZWF0dXJlKHRleHQsIGRlZmF1bHRGb250U3RhY2spO1xuXG4gICAgaWYgKHdyaXRpbmdNb2RlID09PSBXcml0aW5nTW9kZS52ZXJ0aWNhbCkge1xuICAgICAgICBsb2dpY2FsSW5wdXQudmVydGljYWxpemVQdW5jdHVhdGlvbigpO1xuICAgIH1cblxuICAgIGxldCBsaW5lczogQXJyYXk8VGFnZ2VkU3RyaW5nPjtcblxuICAgIGNvbnN0IHtwcm9jZXNzQmlkaXJlY3Rpb25hbFRleHQsIHByb2Nlc3NTdHlsZWRCaWRpcmVjdGlvbmFsVGV4dH0gPSBydGxUZXh0UGx1Z2luO1xuICAgIGlmIChwcm9jZXNzQmlkaXJlY3Rpb25hbFRleHQgJiYgbG9naWNhbElucHV0LnNlY3Rpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAvLyBCaWRpIGRvZXNuJ3QgaGF2ZSB0byBiZSBzdHlsZS1hd2FyZVxuICAgICAgICBsaW5lcyA9IFtdO1xuICAgICAgICBjb25zdCB1bnRhZ2dlZExpbmVzID1cbiAgICAgICAgICAgIHByb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dChsb2dpY2FsSW5wdXQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVMaW5lQnJlYWtzKGxvZ2ljYWxJbnB1dCwgc3BhY2luZywgbWF4V2lkdGgsIGdseXBoTWFwLCBpbWFnZVBvc2l0aW9ucywgc3ltYm9sUGxhY2VtZW50LCBsYXlvdXRUZXh0U2l6ZSkpO1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgdW50YWdnZWRMaW5lcykge1xuICAgICAgICAgICAgY29uc3QgdGFnZ2VkTGluZSA9IG5ldyBUYWdnZWRTdHJpbmcoKTtcbiAgICAgICAgICAgIHRhZ2dlZExpbmUudGV4dCA9IGxpbmU7XG4gICAgICAgICAgICB0YWdnZWRMaW5lLnNlY3Rpb25zID0gbG9naWNhbElucHV0LnNlY3Rpb25zO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGFnZ2VkTGluZS5zZWN0aW9uSW5kZXgucHVzaCgwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxpbmVzLnB1c2godGFnZ2VkTGluZSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb2Nlc3NTdHlsZWRCaWRpcmVjdGlvbmFsVGV4dCkge1xuICAgICAgICAvLyBOZWVkIHZlcnNpb24gb2YgbWFwYm94LWdsLXJ0bC10ZXh0IHdpdGggc3R5bGUgc3VwcG9ydCBmb3IgY29tYmluaW5nIFJUTCB0ZXh0XG4gICAgICAgIC8vIHdpdGggZm9ybWF0dGluZ1xuICAgICAgICBsaW5lcyA9IFtdO1xuICAgICAgICBjb25zdCBwcm9jZXNzZWRMaW5lcyA9XG4gICAgICAgICAgICBwcm9jZXNzU3R5bGVkQmlkaXJlY3Rpb25hbFRleHQobG9naWNhbElucHV0LnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naWNhbElucHV0LnNlY3Rpb25JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVMaW5lQnJlYWtzKGxvZ2ljYWxJbnB1dCwgc3BhY2luZywgbWF4V2lkdGgsIGdseXBoTWFwLCBpbWFnZVBvc2l0aW9ucywgc3ltYm9sUGxhY2VtZW50LCBsYXlvdXRUZXh0U2l6ZSkpO1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgcHJvY2Vzc2VkTGluZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhZ2dlZExpbmUgPSBuZXcgVGFnZ2VkU3RyaW5nKCk7XG4gICAgICAgICAgICB0YWdnZWRMaW5lLnRleHQgPSBsaW5lWzBdO1xuICAgICAgICAgICAgdGFnZ2VkTGluZS5zZWN0aW9uSW5kZXggPSBsaW5lWzFdO1xuICAgICAgICAgICAgdGFnZ2VkTGluZS5zZWN0aW9ucyA9IGxvZ2ljYWxJbnB1dC5zZWN0aW9ucztcbiAgICAgICAgICAgIGxpbmVzLnB1c2godGFnZ2VkTGluZSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBsaW5lcyA9IGJyZWFrTGluZXMobG9naWNhbElucHV0LCBkZXRlcm1pbmVMaW5lQnJlYWtzKGxvZ2ljYWxJbnB1dCwgc3BhY2luZywgbWF4V2lkdGgsIGdseXBoTWFwLCBpbWFnZVBvc2l0aW9ucywgc3ltYm9sUGxhY2VtZW50LCBsYXlvdXRUZXh0U2l6ZSkpO1xuICAgIH1cblxuICAgIGNvbnN0IHBvc2l0aW9uZWRMaW5lcyA9IFtdO1xuICAgIGNvbnN0IHNoYXBpbmcgPSB7XG4gICAgICAgIHBvc2l0aW9uZWRMaW5lcyxcbiAgICAgICAgdGV4dDogbG9naWNhbElucHV0LnRvU3RyaW5nKCksXG4gICAgICAgIHRvcDogdHJhbnNsYXRlWzFdLFxuICAgICAgICBib3R0b206IHRyYW5zbGF0ZVsxXSxcbiAgICAgICAgbGVmdDogdHJhbnNsYXRlWzBdLFxuICAgICAgICByaWdodDogdHJhbnNsYXRlWzBdLFxuICAgICAgICB3cml0aW5nTW9kZSxcbiAgICAgICAgaWNvbnNJblRleHQ6IGZhbHNlLFxuICAgICAgICB2ZXJ0aWNhbGl6YWJsZTogZmFsc2VcbiAgICB9O1xuXG4gICAgc2hhcGVMaW5lcyhzaGFwaW5nLCBnbHlwaE1hcCwgZ2x5cGhQb3NpdGlvbnMsIGltYWdlUG9zaXRpb25zLCBsaW5lcywgbGluZUhlaWdodCwgdGV4dEFuY2hvciwgdGV4dEp1c3RpZnksIHdyaXRpbmdNb2RlLCBzcGFjaW5nLCBhbGxvd1ZlcnRpY2FsUGxhY2VtZW50LCBsYXlvdXRUZXh0U2l6ZVRoaXNab29tKTtcbiAgICBpZiAoaXNFbXB0eShwb3NpdGlvbmVkTGluZXMpKSByZXR1cm4gZmFsc2U7XG5cbiAgICByZXR1cm4gc2hhcGluZztcbn1cblxuLy8gdXNpbmcgY29tcHV0ZWQgcHJvcGVydGllcyBkdWUgdG8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzM4MFxuLyogZXNsaW50IG5vLXVzZWxlc3MtY29tcHV0ZWQta2V5OiAwICovXG5cbmNvbnN0IHdoaXRlc3BhY2U6IHtbXzogbnVtYmVyXTogYm9vbGVhbn0gPSB7XG4gICAgWzB4MDldOiB0cnVlLCAvLyB0YWJcbiAgICBbMHgwYV06IHRydWUsIC8vIG5ld2xpbmVcbiAgICBbMHgwYl06IHRydWUsIC8vIHZlcnRpY2FsIHRhYlxuICAgIFsweDBjXTogdHJ1ZSwgLy8gZm9ybSBmZWVkXG4gICAgWzB4MGRdOiB0cnVlLCAvLyBjYXJyaWFnZSByZXR1cm5cbiAgICBbMHgyMF06IHRydWUsIC8vIHNwYWNlXG59O1xuXG5jb25zdCBicmVha2FibGU6IHtbXzogbnVtYmVyXTogYm9vbGVhbn0gPSB7XG4gICAgWzB4MGFdOiAgIHRydWUsIC8vIG5ld2xpbmVcbiAgICBbMHgyMF06ICAgdHJ1ZSwgLy8gc3BhY2VcbiAgICBbMHgyNl06ICAgdHJ1ZSwgLy8gYW1wZXJzYW5kXG4gICAgWzB4MjhdOiAgIHRydWUsIC8vIGxlZnQgcGFyZW50aGVzaXNcbiAgICBbMHgyOV06ICAgdHJ1ZSwgLy8gcmlnaHQgcGFyZW50aGVzaXNcbiAgICBbMHgyYl06ICAgdHJ1ZSwgLy8gcGx1cyBzaWduXG4gICAgWzB4MmRdOiAgIHRydWUsIC8vIGh5cGhlbi1taW51c1xuICAgIFsweDJmXTogICB0cnVlLCAvLyBzb2xpZHVzXG4gICAgWzB4YWRdOiAgIHRydWUsIC8vIHNvZnQgaHlwaGVuXG4gICAgWzB4YjddOiAgIHRydWUsIC8vIG1pZGRsZSBkb3RcbiAgICBbMHgyMDBiXTogdHJ1ZSwgLy8gemVyby13aWR0aCBzcGFjZVxuICAgIFsweDIwMTBdOiB0cnVlLCAvLyBoeXBoZW5cbiAgICBbMHgyMDEzXTogdHJ1ZSwgLy8gZW4gZGFzaFxuICAgIFsweDIwMjddOiB0cnVlICAvLyBpbnRlcnB1bmN0XG4gICAgLy8gTWFueSBvdGhlciBjaGFyYWN0ZXJzIG1heSBiZSByZWFzb25hYmxlIGJyZWFrcG9pbnRzXG4gICAgLy8gQ29uc2lkZXIgXCJuZXV0cmFsIG9yaWVudGF0aW9uXCIgY2hhcmFjdGVycyBhdCBzY3JpcHREZXRlY3Rpb24uY2hhckhhc05ldXRyYWxWZXJ0aWNhbE9yaWVudGF0aW9uXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy8zNjU4XG59O1xuXG5mdW5jdGlvbiBnZXRHbHlwaEFkdmFuY2UoY29kZVBvaW50OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogU2VjdGlvbk9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhNYXA6IHtbXzogc3RyaW5nXToge1tfOiBudW1iZXJdOiA/U3R5bGVHbHlwaH19LFxuICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlUG9zaXRpb25zOiB7W186IHN0cmluZ106IEltYWdlUG9zaXRpb259LFxuICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNpbmc6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXh0U2l6ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAoIXNlY3Rpb24uaW1hZ2VOYW1lKSB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IGdseXBoTWFwW3NlY3Rpb24uZm9udFN0YWNrXTtcbiAgICAgICAgY29uc3QgZ2x5cGggPSBwb3NpdGlvbnMgJiYgcG9zaXRpb25zW2NvZGVQb2ludF07XG4gICAgICAgIGlmICghZ2x5cGgpIHJldHVybiAwO1xuICAgICAgICByZXR1cm4gZ2x5cGgubWV0cmljcy5hZHZhbmNlICogc2VjdGlvbi5zY2FsZSArIHNwYWNpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgaW1hZ2VQb3NpdGlvbiA9IGltYWdlUG9zaXRpb25zW3NlY3Rpb24uaW1hZ2VOYW1lXTtcbiAgICAgICAgaWYgKCFpbWFnZVBvc2l0aW9uKSByZXR1cm4gMDtcbiAgICAgICAgcmV0dXJuIGltYWdlUG9zaXRpb24uZGlzcGxheVNpemVbMF0gKiBzZWN0aW9uLnNjYWxlICogT05FX0VNIC8gbGF5b3V0VGV4dFNpemUgKyBzcGFjaW5nO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZGV0ZXJtaW5lQXZlcmFnZUxpbmVXaWR0aChsb2dpY2FsSW5wdXQ6IFRhZ2dlZFN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2luZzogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaE1hcDoge1tfOiBzdHJpbmddOiB7W186IG51bWJlcl06ID9TdHlsZUdseXBofX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlUG9zaXRpb25zOiB7W186IHN0cmluZ106IEltYWdlUG9zaXRpb259LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXh0U2l6ZTogbnVtYmVyKSB7XG4gICAgbGV0IHRvdGFsV2lkdGggPSAwO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxvZ2ljYWxJbnB1dC5sZW5ndGgoKTsgaW5kZXgrKykge1xuICAgICAgICBjb25zdCBzZWN0aW9uID0gbG9naWNhbElucHV0LmdldFNlY3Rpb24oaW5kZXgpO1xuICAgICAgICB0b3RhbFdpZHRoICs9IGdldEdseXBoQWR2YW5jZShsb2dpY2FsSW5wdXQuZ2V0Q2hhckNvZGUoaW5kZXgpLCBzZWN0aW9uLCBnbHlwaE1hcCwgaW1hZ2VQb3NpdGlvbnMsIHNwYWNpbmcsIGxheW91dFRleHRTaXplKTtcbiAgICB9XG5cbiAgICBjb25zdCBsaW5lQ291bnQgPSBNYXRoLm1heCgxLCBNYXRoLmNlaWwodG90YWxXaWR0aCAvIG1heFdpZHRoKSk7XG4gICAgcmV0dXJuIHRvdGFsV2lkdGggLyBsaW5lQ291bnQ7XG59XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZUJhZG5lc3MobGluZVdpZHRoOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFdpZHRoOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBlbmFsdHk6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNMYXN0QnJlYWs6IGJvb2xlYW4pIHtcbiAgICBjb25zdCByYWdnZWRuZXNzID0gTWF0aC5wb3cobGluZVdpZHRoIC0gdGFyZ2V0V2lkdGgsIDIpO1xuICAgIGlmIChpc0xhc3RCcmVhaykge1xuICAgICAgICAvLyBGYXZvciBmaW5hbHMgbGluZXMgc2hvcnRlciB0aGFuIGF2ZXJhZ2Ugb3ZlciBsb25nZXIgdGhhbiBhdmVyYWdlXG4gICAgICAgIGlmIChsaW5lV2lkdGggPCB0YXJnZXRXaWR0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHJhZ2dlZG5lc3MgLyAyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHJhZ2dlZG5lc3MgKiAyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJhZ2dlZG5lc3MgKyBNYXRoLmFicyhwZW5hbHR5KSAqIHBlbmFsdHk7XG59XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZVBlbmFsdHkoY29kZVBvaW50OiBudW1iZXIsIG5leHRDb2RlUG9pbnQ6IG51bWJlciwgcGVuYWxpemFibGVJZGVvZ3JhcGhpY0JyZWFrOiBib29sZWFuKSB7XG4gICAgbGV0IHBlbmFsdHkgPSAwO1xuICAgIC8vIEZvcmNlIGJyZWFrIG9uIG5ld2xpbmVcbiAgICBpZiAoY29kZVBvaW50ID09PSAweDBhKSB7XG4gICAgICAgIHBlbmFsdHkgLT0gMTAwMDA7XG4gICAgfVxuICAgIC8vIFBlbmFsaXplIGJyZWFrcyBiZXR3ZWVuIGNoYXJhY3RlcnMgdGhhdCBhbGxvdyBpZGVvZ3JhcGhpYyBicmVha2luZyBiZWNhdXNlXG4gICAgLy8gdGhleSBhcmUgbGVzcyBwcmVmZXJhYmxlIHRoYW4gYnJlYWtzIGF0IHNwYWNlcyAob3IgemVybyB3aWR0aCBzcGFjZXMpLlxuICAgIGlmIChwZW5hbGl6YWJsZUlkZW9ncmFwaGljQnJlYWspIHtcbiAgICAgICAgcGVuYWx0eSArPSAxNTA7XG4gICAgfVxuXG4gICAgLy8gUGVuYWxpemUgb3BlbiBwYXJlbnRoZXNpcyBhdCBlbmQgb2YgbGluZVxuICAgIGlmIChjb2RlUG9pbnQgPT09IDB4MjggfHwgY29kZVBvaW50ID09PSAweGZmMDgpIHtcbiAgICAgICAgcGVuYWx0eSArPSA1MDtcbiAgICB9XG5cbiAgICAvLyBQZW5hbGl6ZSBjbG9zZSBwYXJlbnRoZXNpcyBhdCBiZWdpbm5pbmcgb2YgbGluZVxuICAgIGlmIChuZXh0Q29kZVBvaW50ID09PSAweDI5IHx8IG5leHRDb2RlUG9pbnQgPT09IDB4ZmYwOSkge1xuICAgICAgICBwZW5hbHR5ICs9IDUwO1xuICAgIH1cbiAgICByZXR1cm4gcGVuYWx0eTtcbn1cblxudHlwZSBCcmVhayA9IHtcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIHg6IG51bWJlcixcbiAgICBwcmlvckJyZWFrOiA/QnJlYWssXG4gICAgYmFkbmVzczogbnVtYmVyXG59O1xuXG5mdW5jdGlvbiBldmFsdWF0ZUJyZWFrKGJyZWFrSW5kZXg6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtYOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFdpZHRoOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgIHBvdGVudGlhbEJyZWFrczogQXJyYXk8QnJlYWs+LFxuICAgICAgICAgICAgICAgICAgICAgICBwZW5hbHR5OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgIGlzTGFzdEJyZWFrOiBib29sZWFuKTogQnJlYWsge1xuICAgIC8vIFdlIGNvdWxkIHNraXAgZXZhbHVhdGluZyBicmVha3Mgd2hlcmUgdGhlIGxpbmUgbGVuZ3RoIChicmVha1ggLSBwcmlvckJyZWFrLngpID4gbWF4V2lkdGhcbiAgICAvLyAgLi4uYnV0IGluIGZhY3Qgd2UgYWxsb3cgbGluZXMgbG9uZ2VyIHRoYW4gbWF4V2lkdGggKGlmIHRoZXJlJ3Mgbm8gYnJlYWsgcG9pbnRzKVxuICAgIC8vICAuLi5hbmQgd2hlbiB0YXJnZXRXaWR0aCBhbmQgbWF4V2lkdGggYXJlIGNsb3NlLCBzdHJpY3RseSBlbmZvcmNpbmcgbWF4V2lkdGggY2FuIGdpdmVcbiAgICAvLyAgICAgbW9yZSBsb3BzaWRlZCByZXN1bHRzLlxuXG4gICAgbGV0IGJlc3RQcmlvckJyZWFrOiA/QnJlYWsgPSBudWxsO1xuICAgIGxldCBiZXN0QnJlYWtCYWRuZXNzID0gY2FsY3VsYXRlQmFkbmVzcyhicmVha1gsIHRhcmdldFdpZHRoLCBwZW5hbHR5LCBpc0xhc3RCcmVhayk7XG5cbiAgICBmb3IgKGNvbnN0IHBvdGVudGlhbEJyZWFrIG9mIHBvdGVudGlhbEJyZWFrcykge1xuICAgICAgICBjb25zdCBsaW5lV2lkdGggPSBicmVha1ggLSBwb3RlbnRpYWxCcmVhay54O1xuICAgICAgICBjb25zdCBicmVha0JhZG5lc3MgPVxuICAgICAgICAgICAgY2FsY3VsYXRlQmFkbmVzcyhsaW5lV2lkdGgsIHRhcmdldFdpZHRoLCBwZW5hbHR5LCBpc0xhc3RCcmVhaykgKyBwb3RlbnRpYWxCcmVhay5iYWRuZXNzO1xuICAgICAgICBpZiAoYnJlYWtCYWRuZXNzIDw9IGJlc3RCcmVha0JhZG5lc3MpIHtcbiAgICAgICAgICAgIGJlc3RQcmlvckJyZWFrID0gcG90ZW50aWFsQnJlYWs7XG4gICAgICAgICAgICBiZXN0QnJlYWtCYWRuZXNzID0gYnJlYWtCYWRuZXNzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgaW5kZXg6IGJyZWFrSW5kZXgsXG4gICAgICAgIHg6IGJyZWFrWCxcbiAgICAgICAgcHJpb3JCcmVhazogYmVzdFByaW9yQnJlYWssXG4gICAgICAgIGJhZG5lc3M6IGJlc3RCcmVha0JhZG5lc3NcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBsZWFzdEJhZEJyZWFrcyhsYXN0TGluZUJyZWFrOiA/QnJlYWspOiBBcnJheTxudW1iZXI+IHtcbiAgICBpZiAoIWxhc3RMaW5lQnJlYWspIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4gbGVhc3RCYWRCcmVha3MobGFzdExpbmVCcmVhay5wcmlvckJyZWFrKS5jb25jYXQobGFzdExpbmVCcmVhay5pbmRleCk7XG59XG5cbmZ1bmN0aW9uIGRldGVybWluZUxpbmVCcmVha3MobG9naWNhbElucHV0OiBUYWdnZWRTdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNpbmc6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhNYXA6IHtbXzogc3RyaW5nXToge1tfOiBudW1iZXJdOiA/U3R5bGVHbHlwaH19LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZVBvc2l0aW9uczoge1tfOiBzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sUGxhY2VtZW50OiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dFRleHRTaXplOiBudW1iZXIpOiBBcnJheTxudW1iZXI+IHtcbiAgICBpZiAoc3ltYm9sUGxhY2VtZW50ICE9PSAncG9pbnQnKVxuICAgICAgICByZXR1cm4gW107XG5cbiAgICBpZiAoIWxvZ2ljYWxJbnB1dClcbiAgICAgICAgcmV0dXJuIFtdO1xuXG4gICAgY29uc3QgcG90ZW50aWFsTGluZUJyZWFrcyA9IFtdO1xuICAgIGNvbnN0IHRhcmdldFdpZHRoID0gZGV0ZXJtaW5lQXZlcmFnZUxpbmVXaWR0aChsb2dpY2FsSW5wdXQsIHNwYWNpbmcsIG1heFdpZHRoLCBnbHlwaE1hcCwgaW1hZ2VQb3NpdGlvbnMsIGxheW91dFRleHRTaXplKTtcblxuICAgIGNvbnN0IGhhc1NlcnZlclN1Z2dlc3RlZEJyZWFrcG9pbnRzID0gbG9naWNhbElucHV0LnRleHQuaW5kZXhPZihcIlxcdTIwMGJcIikgPj0gMDtcblxuICAgIGxldCBjdXJyZW50WCA9IDA7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxvZ2ljYWxJbnB1dC5sZW5ndGgoKTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHNlY3Rpb24gPSBsb2dpY2FsSW5wdXQuZ2V0U2VjdGlvbihpKTtcbiAgICAgICAgY29uc3QgY29kZVBvaW50ID0gbG9naWNhbElucHV0LmdldENoYXJDb2RlKGkpO1xuICAgICAgICBpZiAoIXdoaXRlc3BhY2VbY29kZVBvaW50XSkgY3VycmVudFggKz0gZ2V0R2x5cGhBZHZhbmNlKGNvZGVQb2ludCwgc2VjdGlvbiwgZ2x5cGhNYXAsIGltYWdlUG9zaXRpb25zLCBzcGFjaW5nLCBsYXlvdXRUZXh0U2l6ZSk7XG5cbiAgICAgICAgLy8gSWRlb2dyYXBoaWMgY2hhcmFjdGVycywgc3BhY2VzLCBhbmQgd29yZC1icmVha2luZyBwdW5jdHVhdGlvbiB0aGF0IG9mdGVuIGFwcGVhciB3aXRob3V0XG4gICAgICAgIC8vIHN1cnJvdW5kaW5nIHNwYWNlcy5cbiAgICAgICAgaWYgKChpIDwgbG9naWNhbElucHV0Lmxlbmd0aCgpIC0gMSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGlkZW9ncmFwaGljQnJlYWsgPSBjaGFyQWxsb3dzSWRlb2dyYXBoaWNCcmVha2luZyhjb2RlUG9pbnQpO1xuICAgICAgICAgICAgaWYgKGJyZWFrYWJsZVtjb2RlUG9pbnRdIHx8IGlkZW9ncmFwaGljQnJlYWsgfHwgc2VjdGlvbi5pbWFnZU5hbWUpIHtcblxuICAgICAgICAgICAgICAgIHBvdGVudGlhbExpbmVCcmVha3MucHVzaChcbiAgICAgICAgICAgICAgICAgICAgZXZhbHVhdGVCcmVhayhcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgKyAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFgsXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvdGVudGlhbExpbmVCcmVha3MsXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxjdWxhdGVQZW5hbHR5KGNvZGVQb2ludCwgbG9naWNhbElucHV0LmdldENoYXJDb2RlKGkgKyAxKSwgaWRlb2dyYXBoaWNCcmVhayAmJiBoYXNTZXJ2ZXJTdWdnZXN0ZWRCcmVha3BvaW50cyksXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGxlYXN0QmFkQnJlYWtzKFxuICAgICAgICBldmFsdWF0ZUJyZWFrKFxuICAgICAgICAgICAgbG9naWNhbElucHV0Lmxlbmd0aCgpLFxuICAgICAgICAgICAgY3VycmVudFgsXG4gICAgICAgICAgICB0YXJnZXRXaWR0aCxcbiAgICAgICAgICAgIHBvdGVudGlhbExpbmVCcmVha3MsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgdHJ1ZSkpO1xufVxuXG5mdW5jdGlvbiBnZXRBbmNob3JBbGlnbm1lbnQoYW5jaG9yOiBTeW1ib2xBbmNob3IpIHtcbiAgICBsZXQgaG9yaXpvbnRhbEFsaWduID0gMC41LCB2ZXJ0aWNhbEFsaWduID0gMC41O1xuXG4gICAgc3dpdGNoIChhbmNob3IpIHtcbiAgICBjYXNlICdyaWdodCc6XG4gICAgY2FzZSAndG9wLXJpZ2h0JzpcbiAgICBjYXNlICdib3R0b20tcmlnaHQnOlxuICAgICAgICBob3Jpem9udGFsQWxpZ24gPSAxO1xuICAgICAgICBicmVhaztcbiAgICBjYXNlICdsZWZ0JzpcbiAgICBjYXNlICd0b3AtbGVmdCc6XG4gICAgY2FzZSAnYm90dG9tLWxlZnQnOlxuICAgICAgICBob3Jpem9udGFsQWxpZ24gPSAwO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGFuY2hvcikge1xuICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgY2FzZSAnYm90dG9tLXJpZ2h0JzpcbiAgICBjYXNlICdib3R0b20tbGVmdCc6XG4gICAgICAgIHZlcnRpY2FsQWxpZ24gPSAxO1xuICAgICAgICBicmVhaztcbiAgICBjYXNlICd0b3AnOlxuICAgIGNhc2UgJ3RvcC1yaWdodCc6XG4gICAgY2FzZSAndG9wLWxlZnQnOlxuICAgICAgICB2ZXJ0aWNhbEFsaWduID0gMDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtob3Jpem9udGFsQWxpZ24sIHZlcnRpY2FsQWxpZ259O1xufVxuXG5mdW5jdGlvbiBzaGFwZUxpbmVzKHNoYXBpbmc6IFNoYXBpbmcsXG4gICAgICAgICAgICAgICAgICAgIGdseXBoTWFwOiB7W186IHN0cmluZ106IHtbXzogbnVtYmVyXTogP1N0eWxlR2x5cGh9fSxcbiAgICAgICAgICAgICAgICAgICAgZ2x5cGhQb3NpdGlvbnM6IHtbXzogc3RyaW5nXToge1tfOiBudW1iZXJdOiBHbHlwaFBvc2l0aW9ufX0sXG4gICAgICAgICAgICAgICAgICAgIGltYWdlUG9zaXRpb25zOiB7W186IHN0cmluZ106IEltYWdlUG9zaXRpb259LFxuICAgICAgICAgICAgICAgICAgICBsaW5lczogQXJyYXk8VGFnZ2VkU3RyaW5nPixcbiAgICAgICAgICAgICAgICAgICAgbGluZUhlaWdodDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0QW5jaG9yOiBTeW1ib2xBbmNob3IsXG4gICAgICAgICAgICAgICAgICAgIHRleHRKdXN0aWZ5OiBUZXh0SnVzdGlmeSxcbiAgICAgICAgICAgICAgICAgICAgd3JpdGluZ01vZGU6IDEgfCAyLFxuICAgICAgICAgICAgICAgICAgICBzcGFjaW5nOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgIGFsbG93VmVydGljYWxQbGFjZW1lbnQ6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgIGxheW91dFRleHRTaXplVGhpc1pvb206IG51bWJlcikge1xuXG4gICAgbGV0IHggPSAwO1xuICAgIGxldCB5ID0gU0hBUElOR19ERUZBVUxUX09GRlNFVDtcblxuICAgIGxldCBtYXhMaW5lTGVuZ3RoID0gMDtcbiAgICBsZXQgbWF4TGluZUhlaWdodCA9IDA7XG5cbiAgICBjb25zdCBqdXN0aWZ5ID1cbiAgICAgICAgdGV4dEp1c3RpZnkgPT09ICdyaWdodCcgPyAxIDpcbiAgICAgICAgdGV4dEp1c3RpZnkgPT09ICdsZWZ0JyA/IDAgOiAwLjU7XG5cbiAgICBsZXQgbGluZUluZGV4ID0gMDtcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgICAgbGluZS50cmltKCk7XG5cbiAgICAgICAgY29uc3QgbGluZU1heFNjYWxlID0gbGluZS5nZXRNYXhTY2FsZSgpO1xuICAgICAgICBjb25zdCBtYXhMaW5lT2Zmc2V0ID0gKGxpbmVNYXhTY2FsZSAtIDEpICogT05FX0VNO1xuICAgICAgICBjb25zdCBwb3NpdGlvbmVkTGluZSA9IHtwb3NpdGlvbmVkR2x5cGhzOiBbXSwgbGluZU9mZnNldDogMH07XG4gICAgICAgIHNoYXBpbmcucG9zaXRpb25lZExpbmVzW2xpbmVJbmRleF0gPSBwb3NpdGlvbmVkTGluZTtcbiAgICAgICAgY29uc3QgcG9zaXRpb25lZEdseXBocyA9IHBvc2l0aW9uZWRMaW5lLnBvc2l0aW9uZWRHbHlwaHM7XG4gICAgICAgIGxldCBsaW5lT2Zmc2V0ID0gMC4wO1xuXG4gICAgICAgIGlmICghbGluZS5sZW5ndGgoKSkge1xuICAgICAgICAgICAgeSArPSBsaW5lSGVpZ2h0OyAvLyBTdGlsbCBuZWVkIGEgbGluZSBmZWVkIGFmdGVyIGVtcHR5IGxpbmVcbiAgICAgICAgICAgICsrbGluZUluZGV4O1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmUubGVuZ3RoKCk7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbiA9IGxpbmUuZ2V0U2VjdGlvbihpKTtcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25JbmRleCA9IGxpbmUuZ2V0U2VjdGlvbkluZGV4KGkpO1xuICAgICAgICAgICAgY29uc3QgY29kZVBvaW50ID0gbGluZS5nZXRDaGFyQ29kZShpKTtcbiAgICAgICAgICAgIGxldCBiYXNlbGluZU9mZnNldCA9IDAuMDtcbiAgICAgICAgICAgIGxldCBtZXRyaWNzID0gbnVsbDtcbiAgICAgICAgICAgIGxldCByZWN0ID0gbnVsbDtcbiAgICAgICAgICAgIGxldCBpbWFnZU5hbWUgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHZlcnRpY2FsQWR2YW5jZSA9IE9ORV9FTTtcbiAgICAgICAgICAgIGNvbnN0IHZlcnRpY2FsID0gISh3cml0aW5nTW9kZSA9PT0gV3JpdGluZ01vZGUuaG9yaXpvbnRhbCB8fFxuICAgICAgICAgICAgICAgIC8vIERvbid0IHZlcnRpY2FsaXplIGdseXBocyB0aGF0IGhhdmUgbm8gdXByaWdodCBvcmllbnRhdGlvbiBpZiB2ZXJ0aWNhbCBwbGFjZW1lbnQgaXMgZGlzYWJsZWQuXG4gICAgICAgICAgICAgICAgKCFhbGxvd1ZlcnRpY2FsUGxhY2VtZW50ICYmICFjaGFySGFzVXByaWdodFZlcnRpY2FsT3JpZW50YXRpb24oY29kZVBvaW50KSkgfHxcbiAgICAgICAgICAgICAgICAvLyBJZiB2ZXJ0aWNhbCBwbGFjZW1lbnQgaXMgZW5hYmxlZCwgZG9uJ3QgdmVydGljYWxpemUgZ2x5cGhzIHRoYXRcbiAgICAgICAgICAgICAgICAvLyBhcmUgZnJvbSBjb21wbGV4IHRleHQgbGF5b3V0IHNjcmlwdCwgb3Igd2hpdGVzcGFjZXMuXG4gICAgICAgICAgICAgICAgKGFsbG93VmVydGljYWxQbGFjZW1lbnQgJiYgKHdoaXRlc3BhY2VbY29kZVBvaW50XSB8fCBjaGFySW5Db21wbGV4U2hhcGluZ1NjcmlwdChjb2RlUG9pbnQpKSkpO1xuXG4gICAgICAgICAgICBpZiAoIXNlY3Rpb24uaW1hZ2VOYW1lKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9zaXRpb25zID0gZ2x5cGhQb3NpdGlvbnNbc2VjdGlvbi5mb250U3RhY2tdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdseXBoUG9zaXRpb24gPSBwb3NpdGlvbnMgJiYgcG9zaXRpb25zW2NvZGVQb2ludF07XG4gICAgICAgICAgICAgICAgaWYgKGdseXBoUG9zaXRpb24gJiYgZ2x5cGhQb3NpdGlvbi5yZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlY3QgPSBnbHlwaFBvc2l0aW9uLnJlY3Q7XG4gICAgICAgICAgICAgICAgICAgIG1ldHJpY3MgPSBnbHlwaFBvc2l0aW9uLm1ldHJpY3M7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2x5cGhzID0gZ2x5cGhNYXBbc2VjdGlvbi5mb250U3RhY2tdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBnbHlwaCA9IGdseXBocyAmJiBnbHlwaHNbY29kZVBvaW50XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFnbHlwaCkgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIG1ldHJpY3MgPSBnbHlwaC5tZXRyaWNzO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IGtub3cgdGhlIGJhc2VsaW5lLCBidXQgc2luY2Ugd2UncmUgbGF5aW5nIG91dFxuICAgICAgICAgICAgICAgIC8vIGF0IDI0IHBvaW50cywgd2UgY2FuIGNhbGN1bGF0ZSBob3cgbXVjaCBpdCB3aWxsIG1vdmUgd2hlblxuICAgICAgICAgICAgICAgIC8vIHdlIHNjYWxlIHVwIG9yIGRvd24uXG4gICAgICAgICAgICAgICAgYmFzZWxpbmVPZmZzZXQgPSAobGluZU1heFNjYWxlIC0gc2VjdGlvbi5zY2FsZSkgKiBPTkVfRU07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlUG9zaXRpb24gPSBpbWFnZVBvc2l0aW9uc1tzZWN0aW9uLmltYWdlTmFtZV07XG4gICAgICAgICAgICAgICAgaWYgKCFpbWFnZVBvc2l0aW9uKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBpbWFnZU5hbWUgPSBzZWN0aW9uLmltYWdlTmFtZTtcbiAgICAgICAgICAgICAgICBzaGFwaW5nLmljb25zSW5UZXh0ID0gc2hhcGluZy5pY29uc0luVGV4dCB8fCB0cnVlO1xuICAgICAgICAgICAgICAgIHJlY3QgPSBpbWFnZVBvc2l0aW9uLnBhZGRlZFJlY3Q7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2l6ZSA9IGltYWdlUG9zaXRpb24uZGlzcGxheVNpemU7XG4gICAgICAgICAgICAgICAgLy8gSWYgbmVlZGVkLCBhbGxvdyB0byBzZXQgc2NhbGUgZmFjdG9yIGZvciBhbiBpbWFnZSB1c2luZ1xuICAgICAgICAgICAgICAgIC8vIGFsaWFzIFwiaW1hZ2Utc2NhbGVcIiB0aGF0IGNvdWxkIGJlIGFsaWFzIGZvciBcImZvbnQtc2NhbGVcIlxuICAgICAgICAgICAgICAgIC8vIHdoZW4gRm9ybWF0dGVkU2VjdGlvbiBpcyBhbiBpbWFnZSBzZWN0aW9uLlxuICAgICAgICAgICAgICAgIHNlY3Rpb24uc2NhbGUgPSBzZWN0aW9uLnNjYWxlICogT05FX0VNIC8gbGF5b3V0VGV4dFNpemVUaGlzWm9vbTtcblxuICAgICAgICAgICAgICAgIG1ldHJpY3MgPSB7d2lkdGg6IHNpemVbMF0sXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogc2l6ZVsxXSxcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogSU1BR0VfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgdG9wOiAtR0xZUEhfUEJGX0JPUkRFUixcbiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZTogdmVydGljYWwgPyBzaXplWzFdIDogc2l6ZVswXX07XG5cbiAgICAgICAgICAgICAgICAvLyBEaWZmZXJlbmNlIGJldHdlZW4gb25lIEVNIGFuZCBhbiBpbWFnZSBzaXplLlxuICAgICAgICAgICAgICAgIC8vIEFsaWducyBib3R0b20gb2YgYW4gaW1hZ2UgdG8gYSBiYXNlbGluZSBsZXZlbC5cbiAgICAgICAgICAgICAgICBjb25zdCBpbWFnZU9mZnNldCA9IE9ORV9FTSAtIHNpemVbMV0gKiBzZWN0aW9uLnNjYWxlO1xuICAgICAgICAgICAgICAgIGJhc2VsaW5lT2Zmc2V0ID0gbWF4TGluZU9mZnNldCArIGltYWdlT2Zmc2V0O1xuICAgICAgICAgICAgICAgIHZlcnRpY2FsQWR2YW5jZSA9IG1ldHJpY3MuYWR2YW5jZTtcblxuICAgICAgICAgICAgICAgIC8vIERpZmZlcmVuY2UgYmV0d2VlbiBoZWlnaHQgb2YgYW4gaW1hZ2UgYW5kIG9uZSBFTSBhdCBtYXggbGluZSBzY2FsZS5cbiAgICAgICAgICAgICAgICAvLyBQdXNoZXMgY3VycmVudCBsaW5lIGRvd24gaWYgYW4gaW1hZ2Ugc2l6ZSBpcyBvdmVyIDEgRU0gYXQgbWF4IGxpbmUgc2NhbGUuXG4gICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gdmVydGljYWwgPyBzaXplWzBdICogc2VjdGlvbi5zY2FsZSAtIE9ORV9FTSAqIGxpbmVNYXhTY2FsZSA6XG4gICAgICAgICAgICAgICAgICAgIHNpemVbMV0gKiBzZWN0aW9uLnNjYWxlIC0gT05FX0VNICogbGluZU1heFNjYWxlO1xuICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgPiAwICYmIG9mZnNldCA+IGxpbmVPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGluZU9mZnNldCA9IG9mZnNldDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdmVydGljYWwpIHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbmVkR2x5cGhzLnB1c2goe2dseXBoOiBjb2RlUG9pbnQsIGltYWdlTmFtZSwgeCwgeTogeSArIGJhc2VsaW5lT2Zmc2V0LCB2ZXJ0aWNhbCwgc2NhbGU6IHNlY3Rpb24uc2NhbGUsIGZvbnRTdGFjazogc2VjdGlvbi5mb250U3RhY2ssIHNlY3Rpb25JbmRleCwgbWV0cmljcywgcmVjdH0pO1xuICAgICAgICAgICAgICAgIHggKz0gbWV0cmljcy5hZHZhbmNlICogc2VjdGlvbi5zY2FsZSArIHNwYWNpbmc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNoYXBpbmcudmVydGljYWxpemFibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uZWRHbHlwaHMucHVzaCh7Z2x5cGg6IGNvZGVQb2ludCwgaW1hZ2VOYW1lLCB4LCB5OiB5ICsgYmFzZWxpbmVPZmZzZXQsIHZlcnRpY2FsLCBzY2FsZTogc2VjdGlvbi5zY2FsZSwgZm9udFN0YWNrOiBzZWN0aW9uLmZvbnRTdGFjaywgc2VjdGlvbkluZGV4LCBtZXRyaWNzLCByZWN0fSk7XG4gICAgICAgICAgICAgICAgeCArPSB2ZXJ0aWNhbEFkdmFuY2UgKiBzZWN0aW9uLnNjYWxlICsgc3BhY2luZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9ubHkganVzdGlmeSBpZiB3ZSBwbGFjZWQgYXQgbGVhc3Qgb25lIGdseXBoXG4gICAgICAgIGlmIChwb3NpdGlvbmVkR2x5cGhzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgY29uc3QgbGluZUxlbmd0aCA9IHggLSBzcGFjaW5nO1xuICAgICAgICAgICAgbWF4TGluZUxlbmd0aCA9IE1hdGgubWF4KGxpbmVMZW5ndGgsIG1heExpbmVMZW5ndGgpO1xuICAgICAgICAgICAganVzdGlmeUxpbmUocG9zaXRpb25lZEdseXBocywgMCwgcG9zaXRpb25lZEdseXBocy5sZW5ndGggLSAxLCBqdXN0aWZ5LCBsaW5lT2Zmc2V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHggPSAwO1xuICAgICAgICBjb25zdCBjdXJyZW50TGluZUhlaWdodCA9IGxpbmVIZWlnaHQgKiBsaW5lTWF4U2NhbGUgKyBsaW5lT2Zmc2V0O1xuICAgICAgICBwb3NpdGlvbmVkTGluZS5saW5lT2Zmc2V0ID0gTWF0aC5tYXgobGluZU9mZnNldCwgbWF4TGluZU9mZnNldCk7XG4gICAgICAgIHkgKz0gY3VycmVudExpbmVIZWlnaHQ7XG4gICAgICAgIG1heExpbmVIZWlnaHQgPSBNYXRoLm1heChjdXJyZW50TGluZUhlaWdodCwgbWF4TGluZUhlaWdodCk7XG4gICAgICAgICsrbGluZUluZGV4O1xuICAgIH1cblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgYm91bmRpbmcgYm94IGFuZCBqdXN0aWZ5IC8gYWxpZ24gdGV4dCBibG9jay5cbiAgICBjb25zdCBoZWlnaHQgPSB5IC0gU0hBUElOR19ERUZBVUxUX09GRlNFVDtcbiAgICBjb25zdCB7aG9yaXpvbnRhbEFsaWduLCB2ZXJ0aWNhbEFsaWdufSA9IGdldEFuY2hvckFsaWdubWVudCh0ZXh0QW5jaG9yKTtcbiAgICBhbGlnbihzaGFwaW5nLnBvc2l0aW9uZWRMaW5lcywganVzdGlmeSwgaG9yaXpvbnRhbEFsaWduLCB2ZXJ0aWNhbEFsaWduLCBtYXhMaW5lTGVuZ3RoLCBtYXhMaW5lSGVpZ2h0LCBsaW5lSGVpZ2h0LCBoZWlnaHQsIGxpbmVzLmxlbmd0aCk7XG5cbiAgICBzaGFwaW5nLnRvcCArPSAtdmVydGljYWxBbGlnbiAqIGhlaWdodDtcbiAgICBzaGFwaW5nLmJvdHRvbSA9IHNoYXBpbmcudG9wICsgaGVpZ2h0O1xuICAgIHNoYXBpbmcubGVmdCArPSAtaG9yaXpvbnRhbEFsaWduICogbWF4TGluZUxlbmd0aDtcbiAgICBzaGFwaW5nLnJpZ2h0ID0gc2hhcGluZy5sZWZ0ICsgbWF4TGluZUxlbmd0aDtcbn1cblxuLy8ganVzdGlmeSByaWdodCA9IDEsIGxlZnQgPSAwLCBjZW50ZXIgPSAwLjVcbmZ1bmN0aW9uIGp1c3RpZnlMaW5lKHBvc2l0aW9uZWRHbHlwaHM6IEFycmF5PFBvc2l0aW9uZWRHbHlwaD4sXG4gICAgICAgICAgICAgICAgICAgICBzdGFydDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgZW5kOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICBqdXN0aWZ5OiAxIHwgMCB8IDAuNSxcbiAgICAgICAgICAgICAgICAgICAgIGxpbmVPZmZzZXQ6IG51bWJlcikge1xuICAgIGlmICghanVzdGlmeSAmJiAhbGluZU9mZnNldClcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgY29uc3QgbGFzdFBvc2l0aW9uZWRHbHlwaCA9IHBvc2l0aW9uZWRHbHlwaHNbZW5kXTtcbiAgICBjb25zdCBsYXN0QWR2YW5jZSA9IGxhc3RQb3NpdGlvbmVkR2x5cGgubWV0cmljcy5hZHZhbmNlICogbGFzdFBvc2l0aW9uZWRHbHlwaC5zY2FsZTtcbiAgICBjb25zdCBsaW5lSW5kZW50ID0gKHBvc2l0aW9uZWRHbHlwaHNbZW5kXS54ICsgbGFzdEFkdmFuY2UpICoganVzdGlmeTtcblxuICAgIGZvciAobGV0IGogPSBzdGFydDsgaiA8PSBlbmQ7IGorKykge1xuICAgICAgICBwb3NpdGlvbmVkR2x5cGhzW2pdLnggLT0gbGluZUluZGVudDtcbiAgICAgICAgcG9zaXRpb25lZEdseXBoc1tqXS55ICs9IGxpbmVPZmZzZXQ7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBhbGlnbihwb3NpdGlvbmVkTGluZXM6IEFycmF5PFBvc2l0aW9uZWRMaW5lPixcbiAgICAgICAgICAgICAgIGp1c3RpZnk6IG51bWJlcixcbiAgICAgICAgICAgICAgIGhvcml6b250YWxBbGlnbjogbnVtYmVyLFxuICAgICAgICAgICAgICAgdmVydGljYWxBbGlnbjogbnVtYmVyLFxuICAgICAgICAgICAgICAgbWF4TGluZUxlbmd0aDogbnVtYmVyLFxuICAgICAgICAgICAgICAgbWF4TGluZUhlaWdodDogbnVtYmVyLFxuICAgICAgICAgICAgICAgbGluZUhlaWdodDogbnVtYmVyLFxuICAgICAgICAgICAgICAgYmxvY2tIZWlnaHQ6IG51bWJlcixcbiAgICAgICAgICAgICAgIGxpbmVDb3VudDogbnVtYmVyKSB7XG4gICAgY29uc3Qgc2hpZnRYID0gKGp1c3RpZnkgLSBob3Jpem9udGFsQWxpZ24pICogbWF4TGluZUxlbmd0aDtcbiAgICBsZXQgc2hpZnRZID0gMDtcblxuICAgIGlmIChtYXhMaW5lSGVpZ2h0ICE9PSBsaW5lSGVpZ2h0KSB7XG4gICAgICAgIHNoaWZ0WSA9IC1ibG9ja0hlaWdodCAqIHZlcnRpY2FsQWxpZ24gLSBTSEFQSU5HX0RFRkFVTFRfT0ZGU0VUO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHNoaWZ0WSA9ICgtdmVydGljYWxBbGlnbiAqIGxpbmVDb3VudCArIDAuNSkgKiBsaW5lSGVpZ2h0O1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgbGluZSBvZiBwb3NpdGlvbmVkTGluZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBwb3NpdGlvbmVkR2x5cGggb2YgbGluZS5wb3NpdGlvbmVkR2x5cGhzKSB7XG4gICAgICAgICAgICBwb3NpdGlvbmVkR2x5cGgueCArPSBzaGlmdFg7XG4gICAgICAgICAgICBwb3NpdGlvbmVkR2x5cGgueSArPSBzaGlmdFk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCB0eXBlIFBvc2l0aW9uZWRJY29uID0ge1xuICAgIGltYWdlOiBJbWFnZVBvc2l0aW9uLFxuICAgIHRvcDogbnVtYmVyLFxuICAgIGJvdHRvbTogbnVtYmVyLFxuICAgIGxlZnQ6IG51bWJlcixcbiAgICByaWdodDogbnVtYmVyLFxuICAgIGNvbGxpc2lvblBhZGRpbmc/OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXVxufTtcblxuZnVuY3Rpb24gc2hhcGVJY29uKGltYWdlOiBJbWFnZVBvc2l0aW9uLCBpY29uT2Zmc2V0OiBbbnVtYmVyLCBudW1iZXJdLCBpY29uQW5jaG9yOiBTeW1ib2xBbmNob3IpOiBQb3NpdGlvbmVkSWNvbiB7XG4gICAgY29uc3Qge2hvcml6b250YWxBbGlnbiwgdmVydGljYWxBbGlnbn0gPSBnZXRBbmNob3JBbGlnbm1lbnQoaWNvbkFuY2hvcik7XG4gICAgY29uc3QgZHggPSBpY29uT2Zmc2V0WzBdO1xuICAgIGNvbnN0IGR5ID0gaWNvbk9mZnNldFsxXTtcbiAgICBjb25zdCB4MSA9IGR4IC0gaW1hZ2UuZGlzcGxheVNpemVbMF0gKiBob3Jpem9udGFsQWxpZ247XG4gICAgY29uc3QgeDIgPSB4MSArIGltYWdlLmRpc3BsYXlTaXplWzBdO1xuICAgIGNvbnN0IHkxID0gZHkgLSBpbWFnZS5kaXNwbGF5U2l6ZVsxXSAqIHZlcnRpY2FsQWxpZ247XG4gICAgY29uc3QgeTIgPSB5MSArIGltYWdlLmRpc3BsYXlTaXplWzFdO1xuICAgIHJldHVybiB7aW1hZ2UsIHRvcDogeTEsIGJvdHRvbTogeTIsIGxlZnQ6IHgxLCByaWdodDogeDJ9O1xufVxuXG5mdW5jdGlvbiBmaXRJY29uVG9UZXh0KHNoYXBlZEljb246IFBvc2l0aW9uZWRJY29uLCBzaGFwZWRUZXh0OiBTaGFwaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Rml0OiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFsgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyIF0sXG4gICAgICAgICAgICAgICAgICAgICAgIGljb25PZmZzZXQ6IFsgbnVtYmVyLCBudW1iZXIgXSwgZm9udFNjYWxlOiBudW1iZXIpOiBQb3NpdGlvbmVkSWNvbiB7XG4gICAgYXNzZXJ0KHRleHRGaXQgIT09ICdub25lJyk7XG4gICAgYXNzZXJ0KEFycmF5LmlzQXJyYXkocGFkZGluZykgJiYgcGFkZGluZy5sZW5ndGggPT09IDQpO1xuICAgIGFzc2VydChBcnJheS5pc0FycmF5KGljb25PZmZzZXQpICYmIGljb25PZmZzZXQubGVuZ3RoID09PSAyKTtcblxuICAgIGNvbnN0IGltYWdlID0gc2hhcGVkSWNvbi5pbWFnZTtcblxuICAgIGxldCBjb2xsaXNpb25QYWRkaW5nO1xuICAgIGlmIChpbWFnZS5jb250ZW50KSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBpbWFnZS5jb250ZW50O1xuICAgICAgICBjb25zdCBwaXhlbFJhdGlvID0gaW1hZ2UucGl4ZWxSYXRpbyB8fCAxO1xuICAgICAgICBjb2xsaXNpb25QYWRkaW5nID0gW1xuICAgICAgICAgICAgY29udGVudFswXSAvIHBpeGVsUmF0aW8sXG4gICAgICAgICAgICBjb250ZW50WzFdIC8gcGl4ZWxSYXRpbyxcbiAgICAgICAgICAgIGltYWdlLmRpc3BsYXlTaXplWzBdIC0gY29udGVudFsyXSAvIHBpeGVsUmF0aW8sXG4gICAgICAgICAgICBpbWFnZS5kaXNwbGF5U2l6ZVsxXSAtIGNvbnRlbnRbM10gLyBwaXhlbFJhdGlvXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgLy8gV2UgZG9uJ3QgcmVzcGVjdCB0aGUgaWNvbi1hbmNob3IsIGJlY2F1c2UgaWNvbi10ZXh0LWZpdCBpcyBzZXQuIEluc3RlYWQsXG4gICAgLy8gdGhlIGljb24gd2lsbCBiZSBjZW50ZXJlZCBvbiB0aGUgdGV4dCwgdGhlbiBzdHJldGNoZWQgaW4gdGhlIGdpdmVuXG4gICAgLy8gZGltZW5zaW9ucy5cblxuICAgIGNvbnN0IHRleHRMZWZ0ID0gc2hhcGVkVGV4dC5sZWZ0ICogZm9udFNjYWxlO1xuICAgIGNvbnN0IHRleHRSaWdodCA9IHNoYXBlZFRleHQucmlnaHQgKiBmb250U2NhbGU7XG5cbiAgICBsZXQgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0O1xuICAgIGlmICh0ZXh0Rml0ID09PSAnd2lkdGgnIHx8IHRleHRGaXQgPT09ICdib3RoJykge1xuICAgICAgICAvLyBTdHJldGNoZWQgaG9yaXpvbnRhbGx5IHRvIHRoZSB0ZXh0IHdpZHRoXG4gICAgICAgIGxlZnQgPSBpY29uT2Zmc2V0WzBdICsgdGV4dExlZnQgLSBwYWRkaW5nWzNdO1xuICAgICAgICByaWdodCA9IGljb25PZmZzZXRbMF0gKyB0ZXh0UmlnaHQgKyBwYWRkaW5nWzFdO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENlbnRlcmVkIG9uIHRoZSB0ZXh0XG4gICAgICAgIGxlZnQgPSBpY29uT2Zmc2V0WzBdICsgKHRleHRMZWZ0ICsgdGV4dFJpZ2h0IC0gaW1hZ2UuZGlzcGxheVNpemVbMF0pIC8gMjtcbiAgICAgICAgcmlnaHQgPSBsZWZ0ICsgaW1hZ2UuZGlzcGxheVNpemVbMF07XG4gICAgfVxuXG4gICAgY29uc3QgdGV4dFRvcCA9IHNoYXBlZFRleHQudG9wICogZm9udFNjYWxlO1xuICAgIGNvbnN0IHRleHRCb3R0b20gPSBzaGFwZWRUZXh0LmJvdHRvbSAqIGZvbnRTY2FsZTtcbiAgICBpZiAodGV4dEZpdCA9PT0gJ2hlaWdodCcgfHwgdGV4dEZpdCA9PT0gJ2JvdGgnKSB7XG4gICAgICAgIC8vIFN0cmV0Y2hlZCB2ZXJ0aWNhbGx5IHRvIHRoZSB0ZXh0IGhlaWdodFxuICAgICAgICB0b3AgPSBpY29uT2Zmc2V0WzFdICsgdGV4dFRvcCAtIHBhZGRpbmdbMF07XG4gICAgICAgIGJvdHRvbSA9IGljb25PZmZzZXRbMV0gKyB0ZXh0Qm90dG9tICsgcGFkZGluZ1syXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDZW50ZXJlZCBvbiB0aGUgdGV4dFxuICAgICAgICB0b3AgPSBpY29uT2Zmc2V0WzFdICsgKHRleHRUb3AgKyB0ZXh0Qm90dG9tIC0gaW1hZ2UuZGlzcGxheVNpemVbMV0pIC8gMjtcbiAgICAgICAgYm90dG9tID0gdG9wICsgaW1hZ2UuZGlzcGxheVNpemVbMV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtpbWFnZSwgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCBjb2xsaXNpb25QYWRkaW5nfTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcblxuaW1wb3J0IHtyZWdpc3Rlcn0gZnJvbSAnLi4vdXRpbC93ZWJfd29ya2VyX3RyYW5zZmVyJztcblxuY2xhc3MgQW5jaG9yIGV4dGVuZHMgUG9pbnQge1xuICAgIGFuZ2xlOiBhbnk7XG4gICAgc2VnbWVudDogbnVtYmVyIHwgdm9pZDtcblxuICAgIGNvbnN0cnVjdG9yKHg6IG51bWJlciwgeTogbnVtYmVyLCBhbmdsZTogbnVtYmVyLCBzZWdtZW50PzogbnVtYmVyKSB7XG4gICAgICAgIHN1cGVyKHgsIHkpO1xuICAgICAgICB0aGlzLmFuZ2xlID0gYW5nbGU7XG4gICAgICAgIGlmIChzZWdtZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VnbWVudCA9IHNlZ21lbnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9uZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBbmNob3IodGhpcy54LCB0aGlzLnksIHRoaXMuYW5nbGUsIHRoaXMuc2VnbWVudCk7XG4gICAgfVxufVxuXG5yZWdpc3RlcignQW5jaG9yJywgQW5jaG9yKTtcblxuZXhwb3J0IGRlZmF1bHQgQW5jaG9yO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtudW1iZXIgYXMgaW50ZXJwb2xhdGV9IGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9pbnRlcnBvbGF0ZSc7XG5pbXBvcnQgSW50ZXJwb2xhdGUgZnJvbSAnLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL2ludGVycG9sYXRlJztcbmltcG9ydCB7Y2xhbXB9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgRXZhbHVhdGlvblBhcmFtZXRlcnMgZnJvbSAnLi4vc3R5bGUvZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcblxuaW1wb3J0IHR5cGUge1Byb3BlcnR5VmFsdWUsIFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZX0gZnJvbSAnLi4vc3R5bGUvcHJvcGVydGllcyc7XG5pbXBvcnQgdHlwZSB7SW50ZXJwb2xhdGlvblR5cGV9IGZyb20gJy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9pbnRlcnBvbGF0ZSc7XG5cbmNvbnN0IFNJWkVfUEFDS19GQUNUT1IgPSAxMjg7XG5cbmV4cG9ydCB7Z2V0U2l6ZURhdGEsIGV2YWx1YXRlU2l6ZUZvckZlYXR1cmUsIGV2YWx1YXRlU2l6ZUZvclpvb20sIFNJWkVfUEFDS19GQUNUT1J9O1xuXG5leHBvcnQgdHlwZSBTaXplRGF0YSA9IHtcbiAgICBraW5kOiAnY29uc3RhbnQnLFxuICAgIGxheW91dFNpemU6IG51bWJlclxufSB8IHtcbiAgICBraW5kOiAnc291cmNlJ1xufSB8IHtcbiAgICBraW5kOiAnY2FtZXJhJyxcbiAgICBtaW5ab29tOiBudW1iZXIsXG4gICAgbWF4Wm9vbTogbnVtYmVyLFxuICAgIG1pblNpemU6IG51bWJlcixcbiAgICBtYXhTaXplOiBudW1iZXIsXG4gICAgaW50ZXJwb2xhdGlvblR5cGU6ID9JbnRlcnBvbGF0aW9uVHlwZVxufSB8IHtcbiAgICBraW5kOiAnY29tcG9zaXRlJyxcbiAgICBtaW5ab29tOiBudW1iZXIsXG4gICAgbWF4Wm9vbTogbnVtYmVyLFxuICAgIGludGVycG9sYXRpb25UeXBlOiA/SW50ZXJwb2xhdGlvblR5cGVcbn07XG5cbi8vIEZvciB7dGV4dCxpY29ufS1zaXplLCBnZXQgdGhlIGJ1Y2tldC1sZXZlbCBkYXRhIHRoYXQgd2lsbCBiZSBuZWVkZWQgYnlcbi8vIHRoZSBwYWludGVyIHRvIHNldCBzeW1ib2wtc2l6ZS1yZWxhdGVkIHVuaWZvcm1zXG5mdW5jdGlvbiBnZXRTaXplRGF0YSh0aWxlWm9vbTogbnVtYmVyLCB2YWx1ZTogUHJvcGVydHlWYWx1ZTxudW1iZXIsIFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxudW1iZXI+Pik6IFNpemVEYXRhIHtcbiAgICBjb25zdCB7ZXhwcmVzc2lvbn0gPSB2YWx1ZTtcblxuICAgIGlmIChleHByZXNzaW9uLmtpbmQgPT09ICdjb25zdGFudCcpIHtcbiAgICAgICAgY29uc3QgbGF5b3V0U2l6ZSA9IGV4cHJlc3Npb24uZXZhbHVhdGUobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKHRpbGVab29tICsgMSkpO1xuICAgICAgICByZXR1cm4ge2tpbmQ6ICdjb25zdGFudCcsIGxheW91dFNpemV9O1xuXG4gICAgfSBlbHNlIGlmIChleHByZXNzaW9uLmtpbmQgPT09ICdzb3VyY2UnKSB7XG4gICAgICAgIHJldHVybiB7a2luZDogJ3NvdXJjZSd9O1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qge3pvb21TdG9wcywgaW50ZXJwb2xhdGlvblR5cGV9ID0gZXhwcmVzc2lvbjtcblxuICAgICAgICAvLyBjYWxjdWxhdGUgY292ZXJpbmcgem9vbSBzdG9wcyBmb3Igem9vbS1kZXBlbmRlbnQgdmFsdWVzXG4gICAgICAgIGxldCBsb3dlciA9IDA7XG4gICAgICAgIHdoaWxlIChsb3dlciA8IHpvb21TdG9wcy5sZW5ndGggJiYgem9vbVN0b3BzW2xvd2VyXSA8PSB0aWxlWm9vbSkgbG93ZXIrKztcbiAgICAgICAgbG93ZXIgPSBNYXRoLm1heCgwLCBsb3dlciAtIDEpO1xuICAgICAgICBsZXQgdXBwZXIgPSBsb3dlcjtcbiAgICAgICAgd2hpbGUgKHVwcGVyIDwgem9vbVN0b3BzLmxlbmd0aCAmJiB6b29tU3RvcHNbdXBwZXJdIDwgdGlsZVpvb20gKyAxKSB1cHBlcisrO1xuICAgICAgICB1cHBlciA9IE1hdGgubWluKHpvb21TdG9wcy5sZW5ndGggLSAxLCB1cHBlcik7XG5cbiAgICAgICAgY29uc3QgbWluWm9vbSA9IHpvb21TdG9wc1tsb3dlcl07XG4gICAgICAgIGNvbnN0IG1heFpvb20gPSB6b29tU3RvcHNbdXBwZXJdO1xuXG4gICAgICAgIC8vIFdlJ2QgbGlrZSB0byBiZSBhYmxlIHRvIHVzZSBDYW1lcmFFeHByZXNzaW9uIG9yIENvbXBvc2l0ZUV4cHJlc3Npb24gaW4gdGhlc2VcbiAgICAgICAgLy8gcmV0dXJuIHR5cGVzIHJhdGhlciB0aGFuIEV4cHJlc3Npb25TcGVjaWZpY2F0aW9uLCBidXQgdGhlIGZvcm1lciBhcmUgbm90XG4gICAgICAgIC8vIHRyYW5zZmVycmFibGUgYWNyb3NzIFdlYiBXb3JrZXIgYm91bmRhcmllcy5cbiAgICAgICAgaWYgKGV4cHJlc3Npb24ua2luZCA9PT0gJ2NvbXBvc2l0ZScpIHtcbiAgICAgICAgICAgIHJldHVybiB7a2luZDogJ2NvbXBvc2l0ZScsIG1pblpvb20sIG1heFpvb20sIGludGVycG9sYXRpb25UeXBlfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGZvciBjYW1lcmEgZnVuY3Rpb25zLCBhbHNvIHNhdmUgb2ZmIHRoZSBmdW5jdGlvbiB2YWx1ZXNcbiAgICAgICAgLy8gZXZhbHVhdGVkIGF0IHRoZSBjb3ZlcmluZyB6b29tIGxldmVsc1xuICAgICAgICBjb25zdCBtaW5TaXplID0gZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgRXZhbHVhdGlvblBhcmFtZXRlcnMobWluWm9vbSkpO1xuICAgICAgICBjb25zdCBtYXhTaXplID0gZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgRXZhbHVhdGlvblBhcmFtZXRlcnMobWF4Wm9vbSkpO1xuXG4gICAgICAgIHJldHVybiB7a2luZDogJ2NhbWVyYScsIG1pblpvb20sIG1heFpvb20sIG1pblNpemUsIG1heFNpemUsIGludGVycG9sYXRpb25UeXBlfTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGV2YWx1YXRlU2l6ZUZvckZlYXR1cmUoc2l6ZURhdGE6IFNpemVEYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dVNpemUsIHVTaXplVH06IHsgdVNpemU6IG51bWJlciwgdVNpemVUOiBudW1iZXIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2xvd2VyU2l6ZSwgdXBwZXJTaXplfTogeyBsb3dlclNpemU6IG51bWJlciwgdXBwZXJTaXplOiBudW1iZXJ9KSB7XG4gICAgaWYgKHNpemVEYXRhLmtpbmQgPT09ICdzb3VyY2UnKSB7XG4gICAgICAgIHJldHVybiBsb3dlclNpemUgLyBTSVpFX1BBQ0tfRkFDVE9SO1xuICAgIH0gZWxzZSBpZiAoc2l6ZURhdGEua2luZCA9PT0gJ2NvbXBvc2l0ZScpIHtcbiAgICAgICAgcmV0dXJuIGludGVycG9sYXRlKGxvd2VyU2l6ZSAvIFNJWkVfUEFDS19GQUNUT1IsIHVwcGVyU2l6ZSAvIFNJWkVfUEFDS19GQUNUT1IsIHVTaXplVCk7XG4gICAgfVxuICAgIHJldHVybiB1U2l6ZTtcbn1cblxuZnVuY3Rpb24gZXZhbHVhdGVTaXplRm9yWm9vbShzaXplRGF0YTogU2l6ZURhdGEsIHpvb206IG51bWJlcikge1xuICAgIGxldCB1U2l6ZVQgPSAwO1xuICAgIGxldCB1U2l6ZSA9IDA7XG5cbiAgICBpZiAoc2l6ZURhdGEua2luZCA9PT0gJ2NvbnN0YW50Jykge1xuICAgICAgICB1U2l6ZSA9IHNpemVEYXRhLmxheW91dFNpemU7XG5cbiAgICB9IGVsc2UgaWYgKHNpemVEYXRhLmtpbmQgIT09ICdzb3VyY2UnKSB7XG4gICAgICAgIGNvbnN0IHtpbnRlcnBvbGF0aW9uVHlwZSwgbWluWm9vbSwgbWF4Wm9vbX0gPSBzaXplRGF0YTtcblxuICAgICAgICAvLyBFdmVuIHRob3VnaCB3ZSBjb3VsZCBnZXQgdGhlIGV4YWN0IHZhbHVlIG9mIHRoZSBjYW1lcmEgZnVuY3Rpb25cbiAgICAgICAgLy8gYXQgeiA9IHRyLnpvb20sIHdlIGludGVudGlvbmFsbHkgZG8gbm90OiBpbnN0ZWFkLCB3ZSBpbnRlcnBvbGF0ZVxuICAgICAgICAvLyBiZXR3ZWVuIHRoZSBjYW1lcmEgZnVuY3Rpb24gdmFsdWVzIGF0IGEgcGFpciBvZiB6b29tIHN0b3BzIGNvdmVyaW5nXG4gICAgICAgIC8vIFt0aWxlWm9vbSwgdGlsZVpvb20gKyAxXSBpbiBvcmRlciB0byBiZSBjb25zaXN0ZW50IHdpdGggdGhpc1xuICAgICAgICAvLyByZXN0cmljdGlvbiBvbiBjb21wb3NpdGUgZnVuY3Rpb25zXG4gICAgICAgIGNvbnN0IHQgPSAhaW50ZXJwb2xhdGlvblR5cGUgPyAwIDogY2xhbXAoXG4gICAgICAgICAgICBJbnRlcnBvbGF0ZS5pbnRlcnBvbGF0aW9uRmFjdG9yKGludGVycG9sYXRpb25UeXBlLCB6b29tLCBtaW5ab29tLCBtYXhab29tKSwgMCwgMSk7XG5cbiAgICAgICAgaWYgKHNpemVEYXRhLmtpbmQgPT09ICdjYW1lcmEnKSB7XG4gICAgICAgICAgICB1U2l6ZSA9IGludGVycG9sYXRlKHNpemVEYXRhLm1pblNpemUsIHNpemVEYXRhLm1heFNpemUsIHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdVNpemVUID0gdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7dVNpemVULCB1U2l6ZX07XG59XG4iLCIvLyBAZmxvd1xuXG5leHBvcnQgZGVmYXVsdCBjaGVja01heEFuZ2xlO1xuXG5pbXBvcnQgdHlwZSBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB0eXBlIEFuY2hvciBmcm9tICcuL2FuY2hvcic7XG5cbi8qKlxuICogTGFiZWxzIHBsYWNlZCBhcm91bmQgcmVhbGx5IHNoYXJwIGFuZ2xlcyBhcmVuJ3QgcmVhZGFibGUuIENoZWNrIGlmIGFueVxuICogcGFydCBvZiB0aGUgcG90ZW50aWFsIGxhYmVsIGhhcyBhIGNvbWJpbmVkIGFuZ2xlIHRoYXQgaXMgdG9vIGJpZy5cbiAqXG4gKiBAcGFyYW0gbGluZVxuICogQHBhcmFtIGFuY2hvciBUaGUgcG9pbnQgb24gdGhlIGxpbmUgYXJvdW5kIHdoaWNoIHRoZSBsYWJlbCBpcyBhbmNob3JlZC5cbiAqIEBwYXJhbSBsYWJlbExlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSBsYWJlbCBpbiBnZW9tZXRyeSB1bml0cy5cbiAqIEBwYXJhbSB3aW5kb3dTaXplIFRoZSBjaGVjayBmYWlscyBpZiB0aGUgY29tYmluZWQgYW5nbGVzIHdpdGhpbiBhIHBhcnQgb2YgdGhlIGxpbmUgdGhhdCBpcyBgd2luZG93U2l6ZWAgbG9uZyBpcyB0b28gYmlnLlxuICogQHBhcmFtIG1heEFuZ2xlIFRoZSBtYXhpbXVtIGNvbWJpbmVkIGFuZ2xlIHRoYXQgYW55IHdpbmRvdyBhbG9uZyB0aGUgbGFiZWwgaXMgYWxsb3dlZCB0byBoYXZlLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSB3aGV0aGVyIHRoZSBsYWJlbCBzaG91bGQgYmUgcGxhY2VkXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjaGVja01heEFuZ2xlKGxpbmU6IEFycmF5PFBvaW50PiwgYW5jaG9yOiBBbmNob3IsIGxhYmVsTGVuZ3RoOiBudW1iZXIsIHdpbmRvd1NpemU6IG51bWJlciwgbWF4QW5nbGU6IG51bWJlcikge1xuXG4gICAgLy8gaG9yaXpvbnRhbCBsYWJlbHMgYWx3YXlzIHBhc3NcbiAgICBpZiAoYW5jaG9yLnNlZ21lbnQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XG5cbiAgICBsZXQgcCA9IGFuY2hvcjtcbiAgICBsZXQgaW5kZXggPSBhbmNob3Iuc2VnbWVudCArIDE7XG4gICAgbGV0IGFuY2hvckRpc3RhbmNlID0gMDtcblxuICAgIC8vIG1vdmUgYmFja3dhcmRzIGFsb25nIHRoZSBsaW5lIHRvIHRoZSBmaXJzdCBzZWdtZW50IHRoZSBsYWJlbCBhcHBlYXJzIG9uXG4gICAgd2hpbGUgKGFuY2hvckRpc3RhbmNlID4gLWxhYmVsTGVuZ3RoIC8gMikge1xuICAgICAgICBpbmRleC0tO1xuXG4gICAgICAgIC8vIHRoZXJlIGlzbid0IGVub3VnaCByb29tIGZvciB0aGUgbGFiZWwgYWZ0ZXIgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZVxuICAgICAgICBpZiAoaW5kZXggPCAwKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgYW5jaG9yRGlzdGFuY2UgLT0gbGluZVtpbmRleF0uZGlzdChwKTtcbiAgICAgICAgcCA9IGxpbmVbaW5kZXhdO1xuICAgIH1cblxuICAgIGFuY2hvckRpc3RhbmNlICs9IGxpbmVbaW5kZXhdLmRpc3QobGluZVtpbmRleCArIDFdKTtcbiAgICBpbmRleCsrO1xuXG4gICAgLy8gc3RvcmUgcmVjZW50IGNvcm5lcnMgYW5kIHRoZWlyIHRvdGFsIGFuZ2xlIGRpZmZlcmVuY2VcbiAgICBjb25zdCByZWNlbnRDb3JuZXJzID0gW107XG4gICAgbGV0IHJlY2VudEFuZ2xlRGVsdGEgPSAwO1xuXG4gICAgLy8gbW92ZSBmb3J3YXJkcyBieSB0aGUgbGVuZ3RoIG9mIHRoZSBsYWJlbCBhbmQgY2hlY2sgYW5nbGVzIGFsb25nIHRoZSB3YXlcbiAgICB3aGlsZSAoYW5jaG9yRGlzdGFuY2UgPCBsYWJlbExlbmd0aCAvIDIpIHtcbiAgICAgICAgY29uc3QgcHJldiA9IGxpbmVbaW5kZXggLSAxXTtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IGxpbmVbaW5kZXhdO1xuICAgICAgICBjb25zdCBuZXh0ID0gbGluZVtpbmRleCArIDFdO1xuXG4gICAgICAgIC8vIHRoZXJlIGlzbid0IGVub3VnaCByb29tIGZvciB0aGUgbGFiZWwgYmVmb3JlIHRoZSBlbmQgb2YgdGhlIGxpbmVcbiAgICAgICAgaWYgKCFuZXh0KSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgbGV0IGFuZ2xlRGVsdGEgPSBwcmV2LmFuZ2xlVG8oY3VycmVudCkgLSBjdXJyZW50LmFuZ2xlVG8obmV4dCk7XG4gICAgICAgIC8vIHJlc3RyaWN0IGFuZ2xlIHRvIC1waS4ucGkgcmFuZ2VcbiAgICAgICAgYW5nbGVEZWx0YSA9IE1hdGguYWJzKCgoYW5nbGVEZWx0YSArIDMgKiBNYXRoLlBJKSAlIChNYXRoLlBJICogMikpIC0gTWF0aC5QSSk7XG5cbiAgICAgICAgcmVjZW50Q29ybmVycy5wdXNoKHtcbiAgICAgICAgICAgIGRpc3RhbmNlOiBhbmNob3JEaXN0YW5jZSxcbiAgICAgICAgICAgIGFuZ2xlRGVsdGFcbiAgICAgICAgfSk7XG4gICAgICAgIHJlY2VudEFuZ2xlRGVsdGEgKz0gYW5nbGVEZWx0YTtcblxuICAgICAgICAvLyByZW1vdmUgY29ybmVycyB0aGF0IGFyZSBmYXIgZW5vdWdoIGF3YXkgZnJvbSB0aGUgbGlzdCBvZiByZWNlbnQgYW5jaG9yc1xuICAgICAgICB3aGlsZSAoYW5jaG9yRGlzdGFuY2UgLSByZWNlbnRDb3JuZXJzWzBdLmRpc3RhbmNlID4gd2luZG93U2l6ZSkge1xuICAgICAgICAgICAgcmVjZW50QW5nbGVEZWx0YSAtPSByZWNlbnRDb3JuZXJzLnNoaWZ0KCkuYW5nbGVEZWx0YTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRoZSBzdW0gb2YgYW5nbGVzIHdpdGhpbiB0aGUgd2luZG93IGFyZWEgZXhjZWVkcyB0aGUgbWF4aW11bSBhbGxvd2VkIHZhbHVlLiBjaGVjayBmYWlscy5cbiAgICAgICAgaWYgKHJlY2VudEFuZ2xlRGVsdGEgPiBtYXhBbmdsZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGluZGV4Kys7XG4gICAgICAgIGFuY2hvckRpc3RhbmNlICs9IGN1cnJlbnQuZGlzdChuZXh0KTtcbiAgICB9XG5cbiAgICAvLyBubyBwYXJ0IG9mIHRoZSBsaW5lIGhhZCBhbiBhbmdsZSBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gYWxsb3dlZC4gY2hlY2sgcGFzc2VzLlxuICAgIHJldHVybiB0cnVlO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtudW1iZXIgYXMgaW50ZXJwb2xhdGV9IGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9pbnRlcnBvbGF0ZSc7XG5cbmltcG9ydCBBbmNob3IgZnJvbSAnLi4vc3ltYm9sL2FuY2hvcic7XG5pbXBvcnQgY2hlY2tNYXhBbmdsZSBmcm9tICcuL2NoZWNrX21heF9hbmdsZSc7XG5cbmltcG9ydCB0eXBlIFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IHR5cGUge1NoYXBpbmcsIFBvc2l0aW9uZWRJY29ufSBmcm9tICcuL3NoYXBpbmcnO1xuXG5leHBvcnQge2dldEFuY2hvcnMsIGdldENlbnRlckFuY2hvcn07XG5cbmZ1bmN0aW9uIGdldExpbmVMZW5ndGgobGluZTogQXJyYXk8UG9pbnQ+KTogbnVtYmVyIHtcbiAgICBsZXQgbGluZUxlbmd0aCA9IDA7XG4gICAgZm9yIChsZXQgayA9IDA7IGsgPCBsaW5lLmxlbmd0aCAtIDE7IGsrKykge1xuICAgICAgICBsaW5lTGVuZ3RoICs9IGxpbmVba10uZGlzdChsaW5lW2sgKyAxXSk7XG4gICAgfVxuICAgIHJldHVybiBsaW5lTGVuZ3RoO1xufVxuXG5mdW5jdGlvbiBnZXRBbmdsZVdpbmRvd1NpemUoc2hhcGVkVGV4dDogP1NoYXBpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhTaXplOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm94U2NhbGU6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHNoYXBlZFRleHQgP1xuICAgICAgICAzIC8gNSAqIGdseXBoU2l6ZSAqIGJveFNjYWxlIDpcbiAgICAgICAgMDtcbn1cblxuZnVuY3Rpb24gZ2V0U2hhcGVkTGFiZWxMZW5ndGgoc2hhcGVkVGV4dDogP1NoYXBpbmcsIHNoYXBlZEljb246ID9Qb3NpdGlvbmVkSWNvbik6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgICBzaGFwZWRUZXh0ID8gc2hhcGVkVGV4dC5yaWdodCAtIHNoYXBlZFRleHQubGVmdCA6IDAsXG4gICAgICAgIHNoYXBlZEljb24gPyBzaGFwZWRJY29uLnJpZ2h0IC0gc2hhcGVkSWNvbi5sZWZ0IDogMCk7XG59XG5cbmZ1bmN0aW9uIGdldENlbnRlckFuY2hvcihsaW5lOiBBcnJheTxQb2ludD4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgbWF4QW5nbGU6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZWRUZXh0OiA/U2hhcGluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZWRJY29uOiA/UG9zaXRpb25lZEljb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhTaXplOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgYm94U2NhbGU6IG51bWJlcikge1xuICAgIGNvbnN0IGFuZ2xlV2luZG93U2l6ZSA9IGdldEFuZ2xlV2luZG93U2l6ZShzaGFwZWRUZXh0LCBnbHlwaFNpemUsIGJveFNjYWxlKTtcbiAgICBjb25zdCBsYWJlbExlbmd0aCA9IGdldFNoYXBlZExhYmVsTGVuZ3RoKHNoYXBlZFRleHQsIHNoYXBlZEljb24pICogYm94U2NhbGU7XG5cbiAgICBsZXQgcHJldkRpc3RhbmNlID0gMDtcbiAgICBjb25zdCBjZW50ZXJEaXN0YW5jZSA9IGdldExpbmVMZW5ndGgobGluZSkgLyAyO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lLmxlbmd0aCAtIDE7IGkrKykge1xuXG4gICAgICAgIGNvbnN0IGEgPSBsaW5lW2ldLFxuICAgICAgICAgICAgYiA9IGxpbmVbaSArIDFdO1xuXG4gICAgICAgIGNvbnN0IHNlZ21lbnREaXN0YW5jZSA9IGEuZGlzdChiKTtcblxuICAgICAgICBpZiAocHJldkRpc3RhbmNlICsgc2VnbWVudERpc3RhbmNlID4gY2VudGVyRGlzdGFuY2UpIHtcbiAgICAgICAgICAgIC8vIFRoZSBjZW50ZXIgaXMgb24gdGhpcyBzZWdtZW50XG4gICAgICAgICAgICBjb25zdCB0ID0gKGNlbnRlckRpc3RhbmNlIC0gcHJldkRpc3RhbmNlKSAvIHNlZ21lbnREaXN0YW5jZSxcbiAgICAgICAgICAgICAgICB4ID0gaW50ZXJwb2xhdGUoYS54LCBiLngsIHQpLFxuICAgICAgICAgICAgICAgIHkgPSBpbnRlcnBvbGF0ZShhLnksIGIueSwgdCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGFuY2hvciA9IG5ldyBBbmNob3IoeCwgeSwgYi5hbmdsZVRvKGEpLCBpKTtcbiAgICAgICAgICAgIGFuY2hvci5fcm91bmQoKTtcbiAgICAgICAgICAgIGlmICghYW5nbGVXaW5kb3dTaXplIHx8IGNoZWNrTWF4QW5nbGUobGluZSwgYW5jaG9yLCBsYWJlbExlbmd0aCwgYW5nbGVXaW5kb3dTaXplLCBtYXhBbmdsZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYW5jaG9yO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2RGlzdGFuY2UgKz0gc2VnbWVudERpc3RhbmNlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0QW5jaG9ycyhsaW5lOiBBcnJheTxQb2ludD4sXG4gICAgICAgICAgICAgICAgICAgIHNwYWNpbmc6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgbWF4QW5nbGU6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgc2hhcGVkVGV4dDogP1NoYXBpbmcsXG4gICAgICAgICAgICAgICAgICAgIHNoYXBlZEljb246ID9Qb3NpdGlvbmVkSWNvbixcbiAgICAgICAgICAgICAgICAgICAgZ2x5cGhTaXplOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgIGJveFNjYWxlOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgIG92ZXJzY2FsaW5nOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgIHRpbGVFeHRlbnQ6IG51bWJlcikge1xuXG4gICAgLy8gUmVzYW1wbGUgYSBsaW5lIHRvIGdldCBhbmNob3IgcG9pbnRzIGZvciBsYWJlbHMgYW5kIGNoZWNrIHRoYXQgZWFjaFxuICAgIC8vIHBvdGVudGlhbCBsYWJlbCBwYXNzZXMgdGV4dC1tYXgtYW5nbGUgY2hlY2sgYW5kIGhhcyBlbm91Z2ggZnJvb20gdG8gZml0XG4gICAgLy8gb24gdGhlIGxpbmUuXG5cbiAgICBjb25zdCBhbmdsZVdpbmRvd1NpemUgPSBnZXRBbmdsZVdpbmRvd1NpemUoc2hhcGVkVGV4dCwgZ2x5cGhTaXplLCBib3hTY2FsZSk7XG4gICAgY29uc3Qgc2hhcGVkTGFiZWxMZW5ndGggPSBnZXRTaGFwZWRMYWJlbExlbmd0aChzaGFwZWRUZXh0LCBzaGFwZWRJY29uKTtcbiAgICBjb25zdCBsYWJlbExlbmd0aCA9IHNoYXBlZExhYmVsTGVuZ3RoICogYm94U2NhbGU7XG5cbiAgICAvLyBJcyB0aGUgbGluZSBjb250aW51ZWQgZnJvbSBvdXRzaWRlIHRoZSB0aWxlIGJvdW5kYXJ5P1xuICAgIGNvbnN0IGlzTGluZUNvbnRpbnVlZCA9IGxpbmVbMF0ueCA9PT0gMCB8fCBsaW5lWzBdLnggPT09IHRpbGVFeHRlbnQgfHwgbGluZVswXS55ID09PSAwIHx8IGxpbmVbMF0ueSA9PT0gdGlsZUV4dGVudDtcblxuICAgIC8vIElzIHRoZSBsYWJlbCBsb25nLCByZWxhdGl2ZSB0byB0aGUgc3BhY2luZz9cbiAgICAvLyBJZiBzbywgYWRqdXN0IHRoZSBzcGFjaW5nIHNvIHRoZXJlIGlzIGFsd2F5cyBhIG1pbmltdW0gc3BhY2Ugb2YgYHNwYWNpbmcgLyA0YCBiZXR3ZWVuIGxhYmVsIGVkZ2VzLlxuICAgIGlmIChzcGFjaW5nIC0gbGFiZWxMZW5ndGggPCBzcGFjaW5nIC8gNCkge1xuICAgICAgICBzcGFjaW5nID0gbGFiZWxMZW5ndGggKyBzcGFjaW5nIC8gNDtcbiAgICB9XG5cbiAgICAvLyBPZmZzZXQgdGhlIGZpcnN0IGFuY2hvciBieTpcbiAgICAvLyBFaXRoZXIgaGFsZiB0aGUgbGFiZWwgbGVuZ3RoIHBsdXMgYSBmaXhlZCBleHRyYSBvZmZzZXQgaWYgdGhlIGxpbmUgaXMgbm90IGNvbnRpbnVlZFxuICAgIC8vIE9yIGhhbGYgdGhlIHNwYWNpbmcgaWYgdGhlIGxpbmUgaXMgY29udGludWVkLlxuXG4gICAgLy8gRm9yIG5vbi1jb250aW51ZWQgbGluZXMsIGFkZCBhIGJpdCBvZiBmaXhlZCBleHRyYSBvZmZzZXQgdG8gYXZvaWQgY29sbGlzaW9ucyBhdCBUIGludGVyc2VjdGlvbnMuXG4gICAgY29uc3QgZml4ZWRFeHRyYU9mZnNldCA9IGdseXBoU2l6ZSAqIDI7XG5cbiAgICBjb25zdCBvZmZzZXQgPSAhaXNMaW5lQ29udGludWVkID9cbiAgICAgICAgKChzaGFwZWRMYWJlbExlbmd0aCAvIDIgKyBmaXhlZEV4dHJhT2Zmc2V0KSAqIGJveFNjYWxlICogb3ZlcnNjYWxpbmcpICUgc3BhY2luZyA6XG4gICAgICAgIChzcGFjaW5nIC8gMiAqIG92ZXJzY2FsaW5nKSAlIHNwYWNpbmc7XG5cbiAgICByZXR1cm4gcmVzYW1wbGUobGluZSwgb2Zmc2V0LCBzcGFjaW5nLCBhbmdsZVdpbmRvd1NpemUsIG1heEFuZ2xlLCBsYWJlbExlbmd0aCwgaXNMaW5lQ29udGludWVkLCBmYWxzZSwgdGlsZUV4dGVudCk7XG59XG5cbmZ1bmN0aW9uIHJlc2FtcGxlKGxpbmUsIG9mZnNldCwgc3BhY2luZywgYW5nbGVXaW5kb3dTaXplLCBtYXhBbmdsZSwgbGFiZWxMZW5ndGgsIGlzTGluZUNvbnRpbnVlZCwgcGxhY2VBdE1pZGRsZSwgdGlsZUV4dGVudCkge1xuXG4gICAgY29uc3QgaGFsZkxhYmVsTGVuZ3RoID0gbGFiZWxMZW5ndGggLyAyO1xuICAgIGNvbnN0IGxpbmVMZW5ndGggPSBnZXRMaW5lTGVuZ3RoKGxpbmUpO1xuXG4gICAgbGV0IGRpc3RhbmNlID0gMCxcbiAgICAgICAgbWFya2VkRGlzdGFuY2UgPSBvZmZzZXQgLSBzcGFjaW5nO1xuXG4gICAgbGV0IGFuY2hvcnMgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZS5sZW5ndGggLSAxOyBpKyspIHtcblxuICAgICAgICBjb25zdCBhID0gbGluZVtpXSxcbiAgICAgICAgICAgIGIgPSBsaW5lW2kgKyAxXTtcblxuICAgICAgICBjb25zdCBzZWdtZW50RGlzdCA9IGEuZGlzdChiKSxcbiAgICAgICAgICAgIGFuZ2xlID0gYi5hbmdsZVRvKGEpO1xuXG4gICAgICAgIHdoaWxlIChtYXJrZWREaXN0YW5jZSArIHNwYWNpbmcgPCBkaXN0YW5jZSArIHNlZ21lbnREaXN0KSB7XG4gICAgICAgICAgICBtYXJrZWREaXN0YW5jZSArPSBzcGFjaW5nO1xuXG4gICAgICAgICAgICBjb25zdCB0ID0gKG1hcmtlZERpc3RhbmNlIC0gZGlzdGFuY2UpIC8gc2VnbWVudERpc3QsXG4gICAgICAgICAgICAgICAgeCA9IGludGVycG9sYXRlKGEueCwgYi54LCB0KSxcbiAgICAgICAgICAgICAgICB5ID0gaW50ZXJwb2xhdGUoYS55LCBiLnksIHQpO1xuXG4gICAgICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBwb2ludCBpcyB3aXRoaW4gdGhlIHRpbGUgYm91bmRhcmllcyBhbmQgdGhhdFxuICAgICAgICAgICAgLy8gdGhlIGxhYmVsIHdvdWxkIGZpdCBiZWZvcmUgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSBsaW5lXG4gICAgICAgICAgICAvLyBpZiBwbGFjZWQgYXQgdGhpcyBwb2ludC5cbiAgICAgICAgICAgIGlmICh4ID49IDAgJiYgeCA8IHRpbGVFeHRlbnQgJiYgeSA+PSAwICYmIHkgPCB0aWxlRXh0ZW50ICYmXG4gICAgICAgICAgICAgICAgICAgIG1hcmtlZERpc3RhbmNlIC0gaGFsZkxhYmVsTGVuZ3RoID49IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgbWFya2VkRGlzdGFuY2UgKyBoYWxmTGFiZWxMZW5ndGggPD0gbGluZUxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFuY2hvciA9IG5ldyBBbmNob3IoeCwgeSwgYW5nbGUsIGkpO1xuICAgICAgICAgICAgICAgIGFuY2hvci5fcm91bmQoKTtcblxuICAgICAgICAgICAgICAgIGlmICghYW5nbGVXaW5kb3dTaXplIHx8IGNoZWNrTWF4QW5nbGUobGluZSwgYW5jaG9yLCBsYWJlbExlbmd0aCwgYW5nbGVXaW5kb3dTaXplLCBtYXhBbmdsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYW5jaG9ycy5wdXNoKGFuY2hvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZGlzdGFuY2UgKz0gc2VnbWVudERpc3Q7XG4gICAgfVxuXG4gICAgaWYgKCFwbGFjZUF0TWlkZGxlICYmICFhbmNob3JzLmxlbmd0aCAmJiAhaXNMaW5lQ29udGludWVkKSB7XG4gICAgICAgIC8vIFRoZSBmaXJzdCBhdHRlbXB0IGF0IGZpbmRpbmcgYW5jaG9ycyBhdCB3aGljaCBsYWJlbHMgY2FuIGJlIHBsYWNlZCBmYWlsZWQuXG4gICAgICAgIC8vIFRyeSBhZ2FpbiwgYnV0IHRoaXMgdGltZSBqdXN0IHRyeSBwbGFjaW5nIG9uZSBhbmNob3IgYXQgdGhlIG1pZGRsZSBvZiB0aGUgbGluZS5cbiAgICAgICAgLy8gVGhpcyBoYXMgdGhlIG1vc3QgZWZmZWN0IGZvciBzaG9ydCBsaW5lcyBpbiBvdmVyc2NhbGVkIHRpbGVzLCBzaW5jZSB0aGVcbiAgICAgICAgLy8gaW5pdGlhbCBvZmZzZXQgdXNlZCBpbiBvdmVyc2NhbGVkIHRpbGVzIGlzIGNhbGN1bGF0ZWQgdG8gYWxpZ24gbGFiZWxzIHdpdGggcG9zaXRpb25zIGluXG4gICAgICAgIC8vIHBhcmVudCB0aWxlcyBpbnN0ZWFkIG9mIHBsYWNpbmcgdGhlIGxhYmVsIGFzIGNsb3NlIHRvIHRoZSBiZWdpbm5pbmcgYXMgcG9zc2libGUuXG4gICAgICAgIGFuY2hvcnMgPSByZXNhbXBsZShsaW5lLCBkaXN0YW5jZSAvIDIsIHNwYWNpbmcsIGFuZ2xlV2luZG93U2l6ZSwgbWF4QW5nbGUsIGxhYmVsTGVuZ3RoLCBpc0xpbmVDb250aW51ZWQsIHRydWUsIHRpbGVFeHRlbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBhbmNob3JzO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG5leHBvcnQgZGVmYXVsdCBjbGlwTGluZTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBwYXJ0IG9mIGEgbXVsdGlsaW5lIHRoYXQgaW50ZXJzZWN0cyB3aXRoIHRoZSBwcm92aWRlZCByZWN0YW5ndWxhciBib3guXG4gKlxuICogQHBhcmFtIGxpbmVzXG4gKiBAcGFyYW0geDEgdGhlIGxlZnQgZWRnZSBvZiB0aGUgYm94XG4gKiBAcGFyYW0geTEgdGhlIHRvcCBlZGdlIG9mIHRoZSBib3hcbiAqIEBwYXJhbSB4MiB0aGUgcmlnaHQgZWRnZSBvZiB0aGUgYm94XG4gKiBAcGFyYW0geTIgdGhlIGJvdHRvbSBlZGdlIG9mIHRoZSBib3hcbiAqIEByZXR1cm5zIGxpbmVzXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjbGlwTGluZShsaW5lczogQXJyYXk8QXJyYXk8UG9pbnQ+PiwgeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlcik6IEFycmF5PEFycmF5PFBvaW50Pj4ge1xuICAgIGNvbnN0IGNsaXBwZWRMaW5lcyA9IFtdO1xuXG4gICAgZm9yIChsZXQgbCA9IDA7IGwgPCBsaW5lcy5sZW5ndGg7IGwrKykge1xuICAgICAgICBjb25zdCBsaW5lID0gbGluZXNbbF07XG4gICAgICAgIGxldCBjbGlwcGVkTGluZTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmUubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgcDAgPSBsaW5lW2ldO1xuICAgICAgICAgICAgbGV0IHAxID0gbGluZVtpICsgMV07XG5cbiAgICAgICAgICAgIGlmIChwMC54IDwgeDEgJiYgcDEueCA8IHgxKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHAwLnggPCB4MSkge1xuICAgICAgICAgICAgICAgIHAwID0gbmV3IFBvaW50KHgxLCBwMC55ICsgKHAxLnkgLSBwMC55KSAqICgoeDEgLSBwMC54KSAvIChwMS54IC0gcDAueCkpKS5fcm91bmQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocDEueCA8IHgxKSB7XG4gICAgICAgICAgICAgICAgcDEgPSBuZXcgUG9pbnQoeDEsIHAwLnkgKyAocDEueSAtIHAwLnkpICogKCh4MSAtIHAwLngpIC8gKHAxLnggLSBwMC54KSkpLl9yb3VuZCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocDAueSA8IHkxICYmIHAxLnkgPCB5MSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwMC55IDwgeTEpIHtcbiAgICAgICAgICAgICAgICBwMCA9IG5ldyBQb2ludChwMC54ICsgKHAxLnggLSBwMC54KSAqICgoeTEgLSBwMC55KSAvIChwMS55IC0gcDAueSkpLCB5MSkuX3JvdW5kKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHAxLnkgPCB5MSkge1xuICAgICAgICAgICAgICAgIHAxID0gbmV3IFBvaW50KHAwLnggKyAocDEueCAtIHAwLngpICogKCh5MSAtIHAwLnkpIC8gKHAxLnkgLSBwMC55KSksIHkxKS5fcm91bmQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHAwLnggPj0geDIgJiYgcDEueCA+PSB4Mikge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwMC54ID49IHgyKSB7XG4gICAgICAgICAgICAgICAgcDAgPSBuZXcgUG9pbnQoeDIsIHAwLnkgKyAocDEueSAtIHAwLnkpICogKCh4MiAtIHAwLngpIC8gKHAxLnggLSBwMC54KSkpLl9yb3VuZCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwMS54ID49IHgyKSB7XG4gICAgICAgICAgICAgICAgcDEgPSBuZXcgUG9pbnQoeDIsIHAwLnkgKyAocDEueSAtIHAwLnkpICogKCh4MiAtIHAwLngpIC8gKHAxLnggLSBwMC54KSkpLl9yb3VuZCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocDAueSA+PSB5MiAmJiBwMS55ID49IHkyKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHAwLnkgPj0geTIpIHtcbiAgICAgICAgICAgICAgICBwMCA9IG5ldyBQb2ludChwMC54ICsgKHAxLnggLSBwMC54KSAqICgoeTIgLSBwMC55KSAvIChwMS55IC0gcDAueSkpLCB5MikuX3JvdW5kKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHAxLnkgPj0geTIpIHtcbiAgICAgICAgICAgICAgICBwMSA9IG5ldyBQb2ludChwMC54ICsgKHAxLnggLSBwMC54KSAqICgoeTIgLSBwMC55KSAvIChwMS55IC0gcDAueSkpLCB5MikuX3JvdW5kKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghY2xpcHBlZExpbmUgfHwgIXAwLmVxdWFscyhjbGlwcGVkTGluZVtjbGlwcGVkTGluZS5sZW5ndGggLSAxXSkpIHtcbiAgICAgICAgICAgICAgICBjbGlwcGVkTGluZSA9IFtwMF07XG4gICAgICAgICAgICAgICAgY2xpcHBlZExpbmVzLnB1c2goY2xpcHBlZExpbmUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjbGlwcGVkTGluZS5wdXNoKHAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjbGlwcGVkTGluZXM7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbmltcG9ydCB7R0xZUEhfUEJGX0JPUkRFUn0gZnJvbSAnLi4vc3R5bGUvcGFyc2VfZ2x5cGhfcGJmJztcblxuaW1wb3J0IHR5cGUgQW5jaG9yIGZyb20gJy4vYW5jaG9yJztcbmltcG9ydCB0eXBlIHtQb3NpdGlvbmVkSWNvbiwgU2hhcGluZ30gZnJvbSAnLi9zaGFwaW5nJztcbmltcG9ydCB7U0hBUElOR19ERUZBVUxUX09GRlNFVH0gZnJvbSAnLi9zaGFwaW5nJztcbmltcG9ydCB7SU1BR0VfUEFERElOR30gZnJvbSAnLi4vcmVuZGVyL2ltYWdlX2F0bGFzJztcbmltcG9ydCB0eXBlIFN5bWJvbFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXIvc3ltYm9sX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIHtGZWF0dXJlfSBmcm9tICcuLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUge1N0eWxlSW1hZ2V9IGZyb20gJy4uL3N0eWxlL3N0eWxlX2ltYWdlJztcbmltcG9ydCBPTkVfRU0gZnJvbSAnLi9vbmVfZW0nO1xuXG4vKipcbiAqIEEgdGV4dHVyZWQgcXVhZCBmb3IgcmVuZGVyaW5nIGEgc2luZ2xlIGljb24gb3IgZ2x5cGguXG4gKlxuICogVGhlIHpvb20gcmFuZ2UgdGhlIGdseXBoIGNhbiBiZSBzaG93biBpcyBkZWZpbmVkIGJ5IG1pblNjYWxlIGFuZCBtYXhTY2FsZS5cbiAqXG4gKiBAcGFyYW0gdGwgVGhlIG9mZnNldCBvZiB0aGUgdG9wIGxlZnQgY29ybmVyIGZyb20gdGhlIGFuY2hvci5cbiAqIEBwYXJhbSB0ciBUaGUgb2Zmc2V0IG9mIHRoZSB0b3AgcmlnaHQgY29ybmVyIGZyb20gdGhlIGFuY2hvci5cbiAqIEBwYXJhbSBibCBUaGUgb2Zmc2V0IG9mIHRoZSBib3R0b20gbGVmdCBjb3JuZXIgZnJvbSB0aGUgYW5jaG9yLlxuICogQHBhcmFtIGJyIFRoZSBvZmZzZXQgb2YgdGhlIGJvdHRvbSByaWdodCBjb3JuZXIgZnJvbSB0aGUgYW5jaG9yLlxuICogQHBhcmFtIHRleCBUaGUgdGV4dHVyZSBjb29yZGluYXRlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgdHlwZSBTeW1ib2xRdWFkID0ge1xuICAgIHRsOiBQb2ludCxcbiAgICB0cjogUG9pbnQsXG4gICAgYmw6IFBvaW50LFxuICAgIGJyOiBQb2ludCxcbiAgICB0ZXg6IHtcbiAgICAgICAgeDogbnVtYmVyLFxuICAgICAgICB5OiBudW1iZXIsXG4gICAgICAgIHc6IG51bWJlcixcbiAgICAgICAgaDogbnVtYmVyXG4gICAgfSxcbiAgICBwaXhlbE9mZnNldFRMOiBQb2ludCxcbiAgICBwaXhlbE9mZnNldEJSOiBQb2ludCxcbiAgICB3cml0aW5nTW9kZTogYW55IHwgdm9pZCxcbiAgICBnbHlwaE9mZnNldDogW251bWJlciwgbnVtYmVyXSxcbiAgICBzZWN0aW9uSW5kZXg6IG51bWJlcixcbiAgICBpc1NERjogYm9vbGVhbixcbiAgICBtaW5Gb250U2NhbGVYOiBudW1iZXIsXG4gICAgbWluRm9udFNjYWxlWTogbnVtYmVyXG59O1xuXG4vLyBJZiB5b3UgaGF2ZSBhIDEwcHggaWNvbiB0aGF0IGlzbid0IHBlcmZlY3RseSBhbGlnbmVkIHRvIHRoZSBwaXhlbCBncmlkIGl0IHdpbGwgY292ZXIgMTEgYWN0dWFsXG4vLyBwaXhlbHMuIFRoZSBxdWFkIG5lZWRzIHRvIGJlIHBhZGRlZCB0byBhY2NvdW50IGZvciB0aGlzLCBvdGhlcndpc2UgdGhleSdsbCBsb29rIHNsaWdodGx5IGNsaXBwZWRcbi8vIG9uIG9uZSBlZGdlIGluIHNvbWUgY2FzZXMuXG5jb25zdCBib3JkZXIgPSBJTUFHRV9QQURESU5HO1xuXG4vKipcbiAqIENyZWF0ZSB0aGUgcXVhZHMgdXNlZCBmb3IgcmVuZGVyaW5nIGFuIGljb24uXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SWNvblF1YWRzKFxuICAgICAgICAgICAgICAgICAgICAgIHNoYXBlZEljb246IFBvc2l0aW9uZWRJY29uLFxuICAgICAgICAgICAgICAgICAgICAgIGljb25Sb3RhdGU6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICBpc1NERkljb246IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgaGFzSWNvblRleHRGaXQ6IGJvb2xlYW4pOiBBcnJheTxTeW1ib2xRdWFkPiB7XG4gICAgY29uc3QgcXVhZHMgPSBbXTtcblxuICAgIGNvbnN0IGltYWdlID0gc2hhcGVkSWNvbi5pbWFnZTtcbiAgICBjb25zdCBwaXhlbFJhdGlvID0gaW1hZ2UucGl4ZWxSYXRpbztcbiAgICBjb25zdCBpbWFnZVdpZHRoID0gaW1hZ2UucGFkZGVkUmVjdC53IC0gMiAqIGJvcmRlcjtcbiAgICBjb25zdCBpbWFnZUhlaWdodCA9IGltYWdlLnBhZGRlZFJlY3QuaCAtIDIgKiBib3JkZXI7XG5cbiAgICBjb25zdCBpY29uV2lkdGggPSBzaGFwZWRJY29uLnJpZ2h0IC0gc2hhcGVkSWNvbi5sZWZ0O1xuICAgIGNvbnN0IGljb25IZWlnaHQgPSBzaGFwZWRJY29uLmJvdHRvbSAtIHNoYXBlZEljb24udG9wO1xuXG4gICAgY29uc3Qgc3RyZXRjaFggPSBpbWFnZS5zdHJldGNoWCB8fCBbWzAsIGltYWdlV2lkdGhdXTtcbiAgICBjb25zdCBzdHJldGNoWSA9IGltYWdlLnN0cmV0Y2hZIHx8IFtbMCwgaW1hZ2VIZWlnaHRdXTtcblxuICAgIGNvbnN0IHJlZHVjZVJhbmdlcyA9IChzdW0sIHJhbmdlKSA9PiBzdW0gKyByYW5nZVsxXSAtIHJhbmdlWzBdO1xuICAgIGNvbnN0IHN0cmV0Y2hXaWR0aCA9IHN0cmV0Y2hYLnJlZHVjZShyZWR1Y2VSYW5nZXMsIDApO1xuICAgIGNvbnN0IHN0cmV0Y2hIZWlnaHQgPSBzdHJldGNoWS5yZWR1Y2UocmVkdWNlUmFuZ2VzLCAwKTtcbiAgICBjb25zdCBmaXhlZFdpZHRoID0gaW1hZ2VXaWR0aCAtIHN0cmV0Y2hXaWR0aDtcbiAgICBjb25zdCBmaXhlZEhlaWdodCA9IGltYWdlSGVpZ2h0IC0gc3RyZXRjaEhlaWdodDtcblxuICAgIGxldCBzdHJldGNoT2Zmc2V0WCA9IDA7XG4gICAgbGV0IHN0cmV0Y2hDb250ZW50V2lkdGggPSBzdHJldGNoV2lkdGg7XG4gICAgbGV0IHN0cmV0Y2hPZmZzZXRZID0gMDtcbiAgICBsZXQgc3RyZXRjaENvbnRlbnRIZWlnaHQgPSBzdHJldGNoSGVpZ2h0O1xuICAgIGxldCBmaXhlZE9mZnNldFggPSAwO1xuICAgIGxldCBmaXhlZENvbnRlbnRXaWR0aCA9IGZpeGVkV2lkdGg7XG4gICAgbGV0IGZpeGVkT2Zmc2V0WSA9IDA7XG4gICAgbGV0IGZpeGVkQ29udGVudEhlaWdodCA9IGZpeGVkSGVpZ2h0O1xuXG4gICAgaWYgKGltYWdlLmNvbnRlbnQgJiYgaGFzSWNvblRleHRGaXQpIHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IGltYWdlLmNvbnRlbnQ7XG4gICAgICAgIHN0cmV0Y2hPZmZzZXRYID0gc3VtV2l0aGluUmFuZ2Uoc3RyZXRjaFgsIDAsIGNvbnRlbnRbMF0pO1xuICAgICAgICBzdHJldGNoT2Zmc2V0WSA9IHN1bVdpdGhpblJhbmdlKHN0cmV0Y2hZLCAwLCBjb250ZW50WzFdKTtcbiAgICAgICAgc3RyZXRjaENvbnRlbnRXaWR0aCA9IHN1bVdpdGhpblJhbmdlKHN0cmV0Y2hYLCBjb250ZW50WzBdLCBjb250ZW50WzJdKTtcbiAgICAgICAgc3RyZXRjaENvbnRlbnRIZWlnaHQgPSBzdW1XaXRoaW5SYW5nZShzdHJldGNoWSwgY29udGVudFsxXSwgY29udGVudFszXSk7XG4gICAgICAgIGZpeGVkT2Zmc2V0WCA9IGNvbnRlbnRbMF0gLSBzdHJldGNoT2Zmc2V0WDtcbiAgICAgICAgZml4ZWRPZmZzZXRZID0gY29udGVudFsxXSAtIHN0cmV0Y2hPZmZzZXRZO1xuICAgICAgICBmaXhlZENvbnRlbnRXaWR0aCA9IGNvbnRlbnRbMl0gLSBjb250ZW50WzBdIC0gc3RyZXRjaENvbnRlbnRXaWR0aDtcbiAgICAgICAgZml4ZWRDb250ZW50SGVpZ2h0ID0gY29udGVudFszXSAtIGNvbnRlbnRbMV0gLSBzdHJldGNoQ29udGVudEhlaWdodDtcbiAgICB9XG5cbiAgICBjb25zdCBtYWtlQm94ID0gKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSkgPT4ge1xuXG4gICAgICAgIGNvbnN0IGxlZnRFbSA9IGdldEVtT2Zmc2V0KGxlZnQuc3RyZXRjaCAtIHN0cmV0Y2hPZmZzZXRYLCBzdHJldGNoQ29udGVudFdpZHRoLCBpY29uV2lkdGgsIHNoYXBlZEljb24ubGVmdCk7XG4gICAgICAgIGNvbnN0IGxlZnRQeCA9IGdldFB4T2Zmc2V0KGxlZnQuZml4ZWQgLSBmaXhlZE9mZnNldFgsIGZpeGVkQ29udGVudFdpZHRoLCBsZWZ0LnN0cmV0Y2gsIHN0cmV0Y2hXaWR0aCk7XG5cbiAgICAgICAgY29uc3QgdG9wRW0gPSBnZXRFbU9mZnNldCh0b3Auc3RyZXRjaCAtIHN0cmV0Y2hPZmZzZXRZLCBzdHJldGNoQ29udGVudEhlaWdodCwgaWNvbkhlaWdodCwgc2hhcGVkSWNvbi50b3ApO1xuICAgICAgICBjb25zdCB0b3BQeCA9IGdldFB4T2Zmc2V0KHRvcC5maXhlZCAtIGZpeGVkT2Zmc2V0WSwgZml4ZWRDb250ZW50SGVpZ2h0LCB0b3Auc3RyZXRjaCwgc3RyZXRjaEhlaWdodCk7XG5cbiAgICAgICAgY29uc3QgcmlnaHRFbSA9IGdldEVtT2Zmc2V0KHJpZ2h0LnN0cmV0Y2ggLSBzdHJldGNoT2Zmc2V0WCwgc3RyZXRjaENvbnRlbnRXaWR0aCwgaWNvbldpZHRoLCBzaGFwZWRJY29uLmxlZnQpO1xuICAgICAgICBjb25zdCByaWdodFB4ID0gZ2V0UHhPZmZzZXQocmlnaHQuZml4ZWQgLSBmaXhlZE9mZnNldFgsIGZpeGVkQ29udGVudFdpZHRoLCByaWdodC5zdHJldGNoLCBzdHJldGNoV2lkdGgpO1xuXG4gICAgICAgIGNvbnN0IGJvdHRvbUVtID0gZ2V0RW1PZmZzZXQoYm90dG9tLnN0cmV0Y2ggLSBzdHJldGNoT2Zmc2V0WSwgc3RyZXRjaENvbnRlbnRIZWlnaHQsIGljb25IZWlnaHQsIHNoYXBlZEljb24udG9wKTtcbiAgICAgICAgY29uc3QgYm90dG9tUHggPSBnZXRQeE9mZnNldChib3R0b20uZml4ZWQgLSBmaXhlZE9mZnNldFksIGZpeGVkQ29udGVudEhlaWdodCwgYm90dG9tLnN0cmV0Y2gsIHN0cmV0Y2hIZWlnaHQpO1xuXG4gICAgICAgIGNvbnN0IHRsID0gbmV3IFBvaW50KGxlZnRFbSwgdG9wRW0pO1xuICAgICAgICBjb25zdCB0ciA9IG5ldyBQb2ludChyaWdodEVtLCB0b3BFbSk7XG4gICAgICAgIGNvbnN0IGJyID0gbmV3IFBvaW50KHJpZ2h0RW0sIGJvdHRvbUVtKTtcbiAgICAgICAgY29uc3QgYmwgPSBuZXcgUG9pbnQobGVmdEVtLCBib3R0b21FbSk7XG4gICAgICAgIGNvbnN0IHBpeGVsT2Zmc2V0VEwgPSBuZXcgUG9pbnQobGVmdFB4IC8gcGl4ZWxSYXRpbywgdG9wUHggLyBwaXhlbFJhdGlvKTtcbiAgICAgICAgY29uc3QgcGl4ZWxPZmZzZXRCUiA9IG5ldyBQb2ludChyaWdodFB4IC8gcGl4ZWxSYXRpbywgYm90dG9tUHggLyBwaXhlbFJhdGlvKTtcblxuICAgICAgICBjb25zdCBhbmdsZSA9IGljb25Sb3RhdGUgKiBNYXRoLlBJIC8gMTgwO1xuXG4gICAgICAgIGlmIChhbmdsZSkge1xuICAgICAgICAgICAgY29uc3Qgc2luID0gTWF0aC5zaW4oYW5nbGUpLFxuICAgICAgICAgICAgICAgIGNvcyA9IE1hdGguY29zKGFuZ2xlKSxcbiAgICAgICAgICAgICAgICBtYXRyaXggPSBbY29zLCAtc2luLCBzaW4sIGNvc107XG5cbiAgICAgICAgICAgIHRsLl9tYXRNdWx0KG1hdHJpeCk7XG4gICAgICAgICAgICB0ci5fbWF0TXVsdChtYXRyaXgpO1xuICAgICAgICAgICAgYmwuX21hdE11bHQobWF0cml4KTtcbiAgICAgICAgICAgIGJyLl9tYXRNdWx0KG1hdHJpeCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB4MSA9IGxlZnQuc3RyZXRjaCArIGxlZnQuZml4ZWQ7XG4gICAgICAgIGNvbnN0IHgyID0gcmlnaHQuc3RyZXRjaCArIHJpZ2h0LmZpeGVkO1xuICAgICAgICBjb25zdCB5MSA9IHRvcC5zdHJldGNoICsgdG9wLmZpeGVkO1xuICAgICAgICBjb25zdCB5MiA9IGJvdHRvbS5zdHJldGNoICsgYm90dG9tLmZpeGVkO1xuXG4gICAgICAgIGNvbnN0IHN1YlJlY3QgPSB7XG4gICAgICAgICAgICB4OiBpbWFnZS5wYWRkZWRSZWN0LnggKyBib3JkZXIgKyB4MSxcbiAgICAgICAgICAgIHk6IGltYWdlLnBhZGRlZFJlY3QueSArIGJvcmRlciArIHkxLFxuICAgICAgICAgICAgdzogeDIgLSB4MSxcbiAgICAgICAgICAgIGg6IHkyIC0geTFcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBtaW5Gb250U2NhbGVYID0gZml4ZWRDb250ZW50V2lkdGggLyBwaXhlbFJhdGlvIC8gaWNvbldpZHRoO1xuICAgICAgICBjb25zdCBtaW5Gb250U2NhbGVZID0gZml4ZWRDb250ZW50SGVpZ2h0IC8gcGl4ZWxSYXRpbyAvIGljb25IZWlnaHQ7XG5cbiAgICAgICAgLy8gSWNvbiBxdWFkIGlzIHBhZGRlZCwgc28gdGV4dHVyZSBjb29yZGluYXRlcyBhbHNvIG5lZWQgdG8gYmUgcGFkZGVkLlxuICAgICAgICByZXR1cm4ge3RsLCB0ciwgYmwsIGJyLCB0ZXg6IHN1YlJlY3QsIHdyaXRpbmdNb2RlOiB1bmRlZmluZWQsIGdseXBoT2Zmc2V0OiBbMCwgMF0sIHNlY3Rpb25JbmRleDogMCwgcGl4ZWxPZmZzZXRUTCwgcGl4ZWxPZmZzZXRCUiwgbWluRm9udFNjYWxlWCwgbWluRm9udFNjYWxlWSwgaXNTREY6IGlzU0RGSWNvbn07XG4gICAgfTtcblxuICAgIGlmICghaGFzSWNvblRleHRGaXQgfHwgKCFpbWFnZS5zdHJldGNoWCAmJiAhaW1hZ2Uuc3RyZXRjaFkpKSB7XG4gICAgICAgIHF1YWRzLnB1c2gobWFrZUJveChcbiAgICAgICAgICAgIHtmaXhlZDogMCwgc3RyZXRjaDogLTF9LFxuICAgICAgICAgICAge2ZpeGVkOiAwLCBzdHJldGNoOiAtMX0sXG4gICAgICAgICAgICB7Zml4ZWQ6IDAsIHN0cmV0Y2g6IGltYWdlV2lkdGggKyAxfSxcbiAgICAgICAgICAgIHtmaXhlZDogMCwgc3RyZXRjaDogaW1hZ2VIZWlnaHQgKyAxfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHhDdXRzID0gc3RyZXRjaFpvbmVzVG9DdXRzKHN0cmV0Y2hYLCBmaXhlZFdpZHRoLCBzdHJldGNoV2lkdGgpO1xuICAgICAgICBjb25zdCB5Q3V0cyA9IHN0cmV0Y2hab25lc1RvQ3V0cyhzdHJldGNoWSwgZml4ZWRIZWlnaHQsIHN0cmV0Y2hIZWlnaHQpO1xuXG4gICAgICAgIGZvciAobGV0IHhpID0gMDsgeGkgPCB4Q3V0cy5sZW5ndGggLSAxOyB4aSsrKSB7XG4gICAgICAgICAgICBjb25zdCB4MSA9IHhDdXRzW3hpXTtcbiAgICAgICAgICAgIGNvbnN0IHgyID0geEN1dHNbeGkgKyAxXTtcbiAgICAgICAgICAgIGZvciAobGV0IHlpID0gMDsgeWkgPCB5Q3V0cy5sZW5ndGggLSAxOyB5aSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeTEgPSB5Q3V0c1t5aV07XG4gICAgICAgICAgICAgICAgY29uc3QgeTIgPSB5Q3V0c1t5aSArIDFdO1xuICAgICAgICAgICAgICAgIHF1YWRzLnB1c2gobWFrZUJveCh4MSwgeTEsIHgyLCB5MikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHF1YWRzO1xufVxuXG5mdW5jdGlvbiBzdW1XaXRoaW5SYW5nZShyYW5nZXMsIG1pbiwgbWF4KSB7XG4gICAgbGV0IHN1bSA9IDA7XG4gICAgZm9yIChjb25zdCByYW5nZSBvZiByYW5nZXMpIHtcbiAgICAgICAgc3VtICs9IE1hdGgubWF4KG1pbiwgTWF0aC5taW4obWF4LCByYW5nZVsxXSkpIC0gTWF0aC5tYXgobWluLCBNYXRoLm1pbihtYXgsIHJhbmdlWzBdKSk7XG4gICAgfVxuICAgIHJldHVybiBzdW07XG59XG5cbmZ1bmN0aW9uIHN0cmV0Y2hab25lc1RvQ3V0cyhzdHJldGNoWm9uZXMsIGZpeGVkU2l6ZSwgc3RyZXRjaFNpemUpIHtcbiAgICBjb25zdCBjdXRzID0gW3tmaXhlZDogLWJvcmRlciwgc3RyZXRjaDogMH1dO1xuXG4gICAgZm9yIChjb25zdCBbYzEsIGMyXSBvZiBzdHJldGNoWm9uZXMpIHtcbiAgICAgICAgY29uc3QgbGFzdCA9IGN1dHNbY3V0cy5sZW5ndGggLSAxXTtcbiAgICAgICAgY3V0cy5wdXNoKHtcbiAgICAgICAgICAgIGZpeGVkOiBjMSAtIGxhc3Quc3RyZXRjaCxcbiAgICAgICAgICAgIHN0cmV0Y2g6IGxhc3Quc3RyZXRjaFxuICAgICAgICB9KTtcbiAgICAgICAgY3V0cy5wdXNoKHtcbiAgICAgICAgICAgIGZpeGVkOiBjMSAtIGxhc3Quc3RyZXRjaCxcbiAgICAgICAgICAgIHN0cmV0Y2g6IGxhc3Quc3RyZXRjaCArIChjMiAtIGMxKVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY3V0cy5wdXNoKHtcbiAgICAgICAgZml4ZWQ6IGZpeGVkU2l6ZSArIGJvcmRlcixcbiAgICAgICAgc3RyZXRjaDogc3RyZXRjaFNpemVcbiAgICB9KTtcbiAgICByZXR1cm4gY3V0cztcbn1cblxuZnVuY3Rpb24gZ2V0RW1PZmZzZXQoc3RyZXRjaE9mZnNldCwgc3RyZXRjaFNpemUsIGljb25TaXplLCBpY29uT2Zmc2V0KSB7XG4gICAgcmV0dXJuIHN0cmV0Y2hPZmZzZXQgLyBzdHJldGNoU2l6ZSAqIGljb25TaXplICsgaWNvbk9mZnNldDtcbn1cblxuZnVuY3Rpb24gZ2V0UHhPZmZzZXQoZml4ZWRPZmZzZXQsIGZpeGVkU2l6ZSwgc3RyZXRjaE9mZnNldCwgc3RyZXRjaFNpemUpIHtcbiAgICByZXR1cm4gZml4ZWRPZmZzZXQgLSBmaXhlZFNpemUgKiBzdHJldGNoT2Zmc2V0IC8gc3RyZXRjaFNpemU7XG59XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBxdWFkcyB1c2VkIGZvciByZW5kZXJpbmcgYSB0ZXh0IGxhYmVsLlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEdseXBoUXVhZHMoYW5jaG9yOiBBbmNob3IsXG4gICAgICAgICAgICAgICAgICAgICAgIHNoYXBpbmc6IFNoYXBpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgIHRleHRPZmZzZXQ6IFtudW1iZXIsIG51bWJlcl0sXG4gICAgICAgICAgICAgICAgICAgICAgIGxheWVyOiBTeW1ib2xTdHlsZUxheWVyLFxuICAgICAgICAgICAgICAgICAgICAgICBhbG9uZ0xpbmU6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmU6IEZlYXR1cmUsXG4gICAgICAgICAgICAgICAgICAgICAgIGltYWdlTWFwOiB7W186IHN0cmluZ106IFN0eWxlSW1hZ2V9LFxuICAgICAgICAgICAgICAgICAgICAgICBhbGxvd1ZlcnRpY2FsUGxhY2VtZW50OiBib29sZWFuKTogQXJyYXk8U3ltYm9sUXVhZD4ge1xuXG4gICAgY29uc3QgdGV4dFJvdGF0ZSA9IGxheWVyLmxheW91dC5nZXQoJ3RleHQtcm90YXRlJykuZXZhbHVhdGUoZmVhdHVyZSwge30pICogTWF0aC5QSSAvIDE4MDtcbiAgICBjb25zdCBxdWFkcyA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBsaW5lIG9mIHNoYXBpbmcucG9zaXRpb25lZExpbmVzKSB7XG4gICAgICAgIGZvciAoY29uc3QgcG9zaXRpb25lZEdseXBoIG9mIGxpbmUucG9zaXRpb25lZEdseXBocykge1xuICAgICAgICAgICAgaWYgKCFwb3NpdGlvbmVkR2x5cGgucmVjdCkgY29udGludWU7XG4gICAgICAgICAgICBjb25zdCB0ZXh0dXJlUmVjdCA9IHBvc2l0aW9uZWRHbHlwaC5yZWN0IHx8IHt9O1xuXG4gICAgICAgICAgICAvLyBUaGUgcmVjdHMgaGF2ZSBhbiBhZGRpdGlvbmFsIGJ1ZmZlciB0aGF0IGlzIG5vdCBpbmNsdWRlZCBpbiB0aGVpciBzaXplLlxuICAgICAgICAgICAgY29uc3QgZ2x5cGhQYWRkaW5nID0gMS4wO1xuICAgICAgICAgICAgbGV0IHJlY3RCdWZmZXIgPSBHTFlQSF9QQkZfQk9SREVSICsgZ2x5cGhQYWRkaW5nO1xuICAgICAgICAgICAgbGV0IGlzU0RGID0gdHJ1ZTtcbiAgICAgICAgICAgIGxldCBwaXhlbFJhdGlvID0gMS4wO1xuICAgICAgICAgICAgbGV0IGxpbmVPZmZzZXQgPSAwLjA7XG5cbiAgICAgICAgICAgIGNvbnN0IHJvdGF0ZVZlcnRpY2FsR2x5cGggPSAoYWxvbmdMaW5lIHx8IGFsbG93VmVydGljYWxQbGFjZW1lbnQpICYmIHBvc2l0aW9uZWRHbHlwaC52ZXJ0aWNhbDtcbiAgICAgICAgICAgIGNvbnN0IGhhbGZBZHZhbmNlID0gcG9zaXRpb25lZEdseXBoLm1ldHJpY3MuYWR2YW5jZSAqIHBvc2l0aW9uZWRHbHlwaC5zY2FsZSAvIDI7XG5cbiAgICAgICAgICAgIC8vIEFsaWduIGltYWdlcyBhbmQgc2NhbGVkIGdseXBocyBpbiB0aGUgbWlkZGxlIG9mIGEgdmVydGljYWwgbGluZS5cbiAgICAgICAgICAgIGlmIChhbGxvd1ZlcnRpY2FsUGxhY2VtZW50ICYmIHNoYXBpbmcudmVydGljYWxpemFibGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzY2FsZWRHbHlwaE9mZnNldCA9IChwb3NpdGlvbmVkR2x5cGguc2NhbGUgLSAxKSAqIE9ORV9FTTtcbiAgICAgICAgICAgICAgICBjb25zdCBpbWFnZU9mZnNldCA9IChPTkVfRU0gLSBwb3NpdGlvbmVkR2x5cGgubWV0cmljcy53aWR0aCAqIHBvc2l0aW9uZWRHbHlwaC5zY2FsZSkgLyAyO1xuICAgICAgICAgICAgICAgIGxpbmVPZmZzZXQgPSBsaW5lLmxpbmVPZmZzZXQgLyAyIC0gKHBvc2l0aW9uZWRHbHlwaC5pbWFnZU5hbWUgPyAtaW1hZ2VPZmZzZXQgOiBzY2FsZWRHbHlwaE9mZnNldCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwb3NpdGlvbmVkR2x5cGguaW1hZ2VOYW1lKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW1hZ2UgPSBpbWFnZU1hcFtwb3NpdGlvbmVkR2x5cGguaW1hZ2VOYW1lXTtcbiAgICAgICAgICAgICAgICBpc1NERiA9IGltYWdlLnNkZjtcbiAgICAgICAgICAgICAgICBwaXhlbFJhdGlvID0gaW1hZ2UucGl4ZWxSYXRpbztcbiAgICAgICAgICAgICAgICByZWN0QnVmZmVyID0gSU1BR0VfUEFERElORyAvIHBpeGVsUmF0aW87XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGdseXBoT2Zmc2V0ID0gYWxvbmdMaW5lID9cbiAgICAgICAgICAgICAgICBbcG9zaXRpb25lZEdseXBoLnggKyBoYWxmQWR2YW5jZSwgcG9zaXRpb25lZEdseXBoLnldIDpcbiAgICAgICAgICAgICAgICBbMCwgMF07XG5cbiAgICAgICAgICAgIGxldCBidWlsdEluT2Zmc2V0ID0gYWxvbmdMaW5lID9cbiAgICAgICAgICAgICAgICBbMCwgMF0gOlxuICAgICAgICAgICAgICAgIFtwb3NpdGlvbmVkR2x5cGgueCArIGhhbGZBZHZhbmNlICsgdGV4dE9mZnNldFswXSwgcG9zaXRpb25lZEdseXBoLnkgKyB0ZXh0T2Zmc2V0WzFdIC0gbGluZU9mZnNldF07XG5cbiAgICAgICAgICAgIGxldCB2ZXJ0aWNhbGl6ZWRMYWJlbE9mZnNldCA9IFswLCAwXTtcbiAgICAgICAgICAgIGlmIChyb3RhdGVWZXJ0aWNhbEdseXBoKSB7XG4gICAgICAgICAgICAgICAgLy8gVmVydGljYWwgUE9JIGxhYmVscyB0aGF0IGFyZSByb3RhdGVkIDkwZGVnIENXIGFuZCB3aG9zZSBnbHlwaHMgbXVzdCBwcmVzZXJ2ZSB1cHJpZ2h0IG9yaWVudGF0aW9uXG4gICAgICAgICAgICAgICAgLy8gbmVlZCB0byBiZSByb3RhdGVkIDkwZGVnIENDVy4gQWZ0ZXIgYSBxdWFkIGlzIHJvdGF0ZWQsIGl0IGlzIHRyYW5zbGF0ZWQgdG8gdGhlIG9yaWdpbmFsIGJ1aWx0LWluIG9mZnNldC5cbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbGl6ZWRMYWJlbE9mZnNldCA9IGJ1aWx0SW5PZmZzZXQ7XG4gICAgICAgICAgICAgICAgYnVpbHRJbk9mZnNldCA9IFswLCAwXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgeDEgPSAocG9zaXRpb25lZEdseXBoLm1ldHJpY3MubGVmdCAtIHJlY3RCdWZmZXIpICogcG9zaXRpb25lZEdseXBoLnNjYWxlIC0gaGFsZkFkdmFuY2UgKyBidWlsdEluT2Zmc2V0WzBdO1xuICAgICAgICAgICAgY29uc3QgeTEgPSAoLXBvc2l0aW9uZWRHbHlwaC5tZXRyaWNzLnRvcCAtIHJlY3RCdWZmZXIpICogcG9zaXRpb25lZEdseXBoLnNjYWxlICsgYnVpbHRJbk9mZnNldFsxXTtcbiAgICAgICAgICAgIGNvbnN0IHgyID0geDEgKyB0ZXh0dXJlUmVjdC53ICogcG9zaXRpb25lZEdseXBoLnNjYWxlIC8gcGl4ZWxSYXRpbztcbiAgICAgICAgICAgIGNvbnN0IHkyID0geTEgKyB0ZXh0dXJlUmVjdC5oICogcG9zaXRpb25lZEdseXBoLnNjYWxlIC8gcGl4ZWxSYXRpbztcblxuICAgICAgICAgICAgY29uc3QgdGwgPSBuZXcgUG9pbnQoeDEsIHkxKTtcbiAgICAgICAgICAgIGNvbnN0IHRyID0gbmV3IFBvaW50KHgyLCB5MSk7XG4gICAgICAgICAgICBjb25zdCBibCA9IG5ldyBQb2ludCh4MSwgeTIpO1xuICAgICAgICAgICAgY29uc3QgYnIgPSBuZXcgUG9pbnQoeDIsIHkyKTtcblxuICAgICAgICAgICAgaWYgKHJvdGF0ZVZlcnRpY2FsR2x5cGgpIHtcbiAgICAgICAgICAgICAgICAvLyBWZXJ0aWNhbC1zdXBwb3J0aW5nIGdseXBocyBhcmUgbGFpZCBvdXQgaW4gMjR4MjQgcG9pbnQgYm94ZXMgKDEgc3F1YXJlIGVtKVxuICAgICAgICAgICAgICAgIC8vIEluIGhvcml6b250YWwgb3JpZW50YXRpb24sIHRoZSB5IHZhbHVlcyBmb3IgZ2x5cGhzIGFyZSBiZWxvdyB0aGUgbWlkbGluZVxuICAgICAgICAgICAgICAgIC8vIGFuZCB3ZSB1c2UgYSBcInlPZmZzZXRcIiBvZiAtMTcgdG8gcHVsbCB0aGVtIHVwIHRvIHRoZSBtaWRkbGUuXG4gICAgICAgICAgICAgICAgLy8gQnkgcm90YXRpbmcgY291bnRlci1jbG9ja3dpc2UgYXJvdW5kIHRoZSBwb2ludCBhdCB0aGUgY2VudGVyIG9mIHRoZSBsZWZ0XG4gICAgICAgICAgICAgICAgLy8gZWRnZSBvZiBhIDI0eDI0IGxheW91dCBib3ggY2VudGVyZWQgYmVsb3cgdGhlIG1pZGxpbmUsIHdlIGFsaWduIHRoZSBjZW50ZXJcbiAgICAgICAgICAgICAgICAvLyBvZiB0aGUgZ2x5cGhzIHdpdGggdGhlIGhvcml6b250YWwgbWlkbGluZSwgc28gdGhlIHlPZmZzZXQgaXMgbm8gbG9uZ2VyXG4gICAgICAgICAgICAgICAgLy8gbmVjZXNzYXJ5LCBidXQgd2UgYWxzbyBwdWxsIHRoZSBnbHlwaCB0byB0aGUgbGVmdCBhbG9uZyB0aGUgeCBheGlzLlxuICAgICAgICAgICAgICAgIC8vIFRoZSB5IGNvb3JkaW5hdGUgaW5jbHVkZXMgYmFzZWxpbmUgeU9mZnNldCwgdGh1cyBuZWVkcyB0byBiZSBhY2NvdW50ZWRcbiAgICAgICAgICAgICAgICAvLyBmb3Igd2hlbiBnbHlwaCBpcyByb3RhdGVkIGFuZCB0cmFuc2xhdGVkLlxuICAgICAgICAgICAgICAgIGNvbnN0IGNlbnRlciA9IG5ldyBQb2ludCgtaGFsZkFkdmFuY2UsIGhhbGZBZHZhbmNlIC0gU0hBUElOR19ERUZBVUxUX09GRlNFVCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmVydGljYWxSb3RhdGlvbiA9IC1NYXRoLlBJIC8gMjtcblxuICAgICAgICAgICAgICAgIC8vIHhIYWxmV2lkdGhPZmZzZXRDb3JyZWN0aW9uIGlzIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIGZ1bGwtd2lkdGggYW5kIGhhbGYtd2lkdGhcbiAgICAgICAgICAgICAgICAvLyBhZHZhbmNlLCBzaG91bGQgYmUgMCBmb3IgZnVsbC13aWR0aCBnbHlwaHMgYW5kIHdpbGwgcHVsbCB1cCBoYWxmLXdpZHRoIGdseXBocy5cbiAgICAgICAgICAgICAgICBjb25zdCB4SGFsZldpZHRoT2Zmc2V0Q29ycmVjdGlvbiA9IE9ORV9FTSAvIDIgLSBoYWxmQWR2YW5jZTtcbiAgICAgICAgICAgICAgICBjb25zdCB5SW1hZ2VPZmZzZXRDb3JyZWN0aW9uID0gcG9zaXRpb25lZEdseXBoLmltYWdlTmFtZSA/IHhIYWxmV2lkdGhPZmZzZXRDb3JyZWN0aW9uIDogMC4wO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhbGZXaWR0aE9mZnNldENvcnJlY3Rpb24gPSBuZXcgUG9pbnQoNSAtIFNIQVBJTkdfREVGQVVMVF9PRkZTRVQgLSB4SGFsZldpZHRoT2Zmc2V0Q29ycmVjdGlvbiwgLXlJbWFnZU9mZnNldENvcnJlY3Rpb24pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZlcnRpY2FsT2Zmc2V0Q29ycmVjdGlvbiA9IG5ldyBQb2ludCguLi52ZXJ0aWNhbGl6ZWRMYWJlbE9mZnNldCk7XG4gICAgICAgICAgICAgICAgdGwuX3JvdGF0ZUFyb3VuZCh2ZXJ0aWNhbFJvdGF0aW9uLCBjZW50ZXIpLl9hZGQoaGFsZldpZHRoT2Zmc2V0Q29ycmVjdGlvbikuX2FkZCh2ZXJ0aWNhbE9mZnNldENvcnJlY3Rpb24pO1xuICAgICAgICAgICAgICAgIHRyLl9yb3RhdGVBcm91bmQodmVydGljYWxSb3RhdGlvbiwgY2VudGVyKS5fYWRkKGhhbGZXaWR0aE9mZnNldENvcnJlY3Rpb24pLl9hZGQodmVydGljYWxPZmZzZXRDb3JyZWN0aW9uKTtcbiAgICAgICAgICAgICAgICBibC5fcm90YXRlQXJvdW5kKHZlcnRpY2FsUm90YXRpb24sIGNlbnRlcikuX2FkZChoYWxmV2lkdGhPZmZzZXRDb3JyZWN0aW9uKS5fYWRkKHZlcnRpY2FsT2Zmc2V0Q29ycmVjdGlvbik7XG4gICAgICAgICAgICAgICAgYnIuX3JvdGF0ZUFyb3VuZCh2ZXJ0aWNhbFJvdGF0aW9uLCBjZW50ZXIpLl9hZGQoaGFsZldpZHRoT2Zmc2V0Q29ycmVjdGlvbikuX2FkZCh2ZXJ0aWNhbE9mZnNldENvcnJlY3Rpb24pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGV4dFJvdGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNpbiA9IE1hdGguc2luKHRleHRSb3RhdGUpLFxuICAgICAgICAgICAgICAgICAgICBjb3MgPSBNYXRoLmNvcyh0ZXh0Um90YXRlKSxcbiAgICAgICAgICAgICAgICAgICAgbWF0cml4ID0gW2NvcywgLXNpbiwgc2luLCBjb3NdO1xuXG4gICAgICAgICAgICAgICAgdGwuX21hdE11bHQobWF0cml4KTtcbiAgICAgICAgICAgICAgICB0ci5fbWF0TXVsdChtYXRyaXgpO1xuICAgICAgICAgICAgICAgIGJsLl9tYXRNdWx0KG1hdHJpeCk7XG4gICAgICAgICAgICAgICAgYnIuX21hdE11bHQobWF0cml4KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcGl4ZWxPZmZzZXRUTCA9IG5ldyBQb2ludCgwLCAwKTtcbiAgICAgICAgICAgIGNvbnN0IHBpeGVsT2Zmc2V0QlIgPSBuZXcgUG9pbnQoMCwgMCk7XG4gICAgICAgICAgICBjb25zdCBtaW5Gb250U2NhbGVYID0gMDtcbiAgICAgICAgICAgIGNvbnN0IG1pbkZvbnRTY2FsZVkgPSAwO1xuICAgICAgICAgICAgcXVhZHMucHVzaCh7dGwsIHRyLCBibCwgYnIsIHRleDogdGV4dHVyZVJlY3QsIHdyaXRpbmdNb2RlOiBzaGFwaW5nLndyaXRpbmdNb2RlLCBnbHlwaE9mZnNldCwgc2VjdGlvbkluZGV4OiBwb3NpdGlvbmVkR2x5cGguc2VjdGlvbkluZGV4LCBpc1NERiwgcGl4ZWxPZmZzZXRUTCwgcGl4ZWxPZmZzZXRCUiwgbWluRm9udFNjYWxlWCwgbWluRm9udFNjYWxlWX0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHF1YWRzO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHR5cGUge0NvbGxpc2lvbkJveEFycmF5fSBmcm9tICcuLi9kYXRhL2FycmF5X3R5cGVzJztcbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB0eXBlIEFuY2hvciBmcm9tICcuL2FuY2hvcic7XG5cbi8qKlxuICogQSBDb2xsaXNpb25GZWF0dXJlIHJlcHJlc2VudHMgdGhlIGFyZWEgb2YgdGhlIHRpbGUgY292ZXJlZCBieSBhIHNpbmdsZSBsYWJlbC5cbiAqIEl0IGlzIHVzZWQgd2l0aCBDb2xsaXNpb25JbmRleCB0byBjaGVjayBpZiB0aGUgbGFiZWwgb3ZlcmxhcHMgd2l0aCBhbnlcbiAqIHByZXZpb3VzIGxhYmVscy4gQSBDb2xsaXNpb25GZWF0dXJlIGlzIG1vc3RseSBqdXN0IGEgc2V0IG9mIENvbGxpc2lvbkJveFxuICogb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBDb2xsaXNpb25GZWF0dXJlIHtcbiAgICBib3hTdGFydEluZGV4OiBudW1iZXI7XG4gICAgYm94RW5kSW5kZXg6IG51bWJlcjtcbiAgICBjaXJjbGVEaWFtZXRlcjogP251bWJlcjtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIENvbGxpc2lvbkZlYXR1cmUsIGFkZGluZyBpdHMgY29sbGlzaW9uIGJveCBkYXRhIHRvIHRoZSBnaXZlbiBjb2xsaXNpb25Cb3hBcnJheSBpbiB0aGUgcHJvY2Vzcy5cbiAgICAgKiBGb3IgbGluZSBhbGlnbmVkIGxhYmVscyBhIGNvbGxpc2lvbiBjaXJjbGUgZGlhbWV0ZXIgaXMgY29tcHV0ZWQgaW5zdGVhZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhbmNob3IgVGhlIHBvaW50IGFsb25nIHRoZSBsaW5lIGFyb3VuZCB3aGljaCB0aGUgbGFiZWwgaXMgYW5jaG9yZWQuXG4gICAgICogQHBhcmFtIHNoYXBlZCBUaGUgdGV4dCBvciBpY29uIHNoYXBpbmcgcmVzdWx0cy5cbiAgICAgKiBAcGFyYW0gYm94U2NhbGUgQSBtYWdpYyBudW1iZXIgdXNlZCB0byBjb252ZXJ0IGZyb20gZ2x5cGggbWV0cmljcyB1bml0cyB0byBnZW9tZXRyeSB1bml0cy5cbiAgICAgKiBAcGFyYW0gcGFkZGluZyBUaGUgYW1vdW50IG9mIHBhZGRpbmcgdG8gYWRkIGFyb3VuZCB0aGUgbGFiZWwgZWRnZXMuXG4gICAgICogQHBhcmFtIGFsaWduTGluZSBXaGV0aGVyIHRoZSBsYWJlbCBpcyBhbGlnbmVkIHdpdGggdGhlIGxpbmUgb3IgdGhlIHZpZXdwb3J0LlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY29sbGlzaW9uQm94QXJyYXk6IENvbGxpc2lvbkJveEFycmF5LFxuICAgICAgICAgICAgICAgIGFuY2hvcjogQW5jaG9yLFxuICAgICAgICAgICAgICAgIGZlYXR1cmVJbmRleDogbnVtYmVyLFxuICAgICAgICAgICAgICAgIHNvdXJjZUxheWVySW5kZXg6IG51bWJlcixcbiAgICAgICAgICAgICAgICBidWNrZXRJbmRleDogbnVtYmVyLFxuICAgICAgICAgICAgICAgIHNoYXBlZDogT2JqZWN0LFxuICAgICAgICAgICAgICAgIGJveFNjYWxlOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgcGFkZGluZzogbnVtYmVyLFxuICAgICAgICAgICAgICAgIGFsaWduTGluZTogYm9vbGVhbixcbiAgICAgICAgICAgICAgICByb3RhdGU6IG51bWJlcikge1xuXG4gICAgICAgIHRoaXMuYm94U3RhcnRJbmRleCA9IGNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aDtcblxuICAgICAgICBpZiAoYWxpZ25MaW5lKSB7XG4gICAgICAgICAgICAvLyBDb21wdXRlIGhlaWdodCBvZiB0aGUgc2hhcGUgaW4gZ2x5cGggbWV0cmljcyBhbmQgYXBwbHkgY29sbGlzaW9uIHBhZGRpbmcuXG4gICAgICAgICAgICAvLyBOb3RlIHRoYXQgdGhlIHBpeGVsIGJhc2VkICd0ZXh0LXBhZGRpbmcnIGlzIGFwcGxpZWQgYXQgcnVudGltZVxuICAgICAgICAgICAgbGV0IHRvcCA9IHNoYXBlZC50b3A7XG4gICAgICAgICAgICBsZXQgYm90dG9tID0gc2hhcGVkLmJvdHRvbTtcbiAgICAgICAgICAgIGNvbnN0IGNvbGxpc2lvblBhZGRpbmcgPSBzaGFwZWQuY29sbGlzaW9uUGFkZGluZztcblxuICAgICAgICAgICAgaWYgKGNvbGxpc2lvblBhZGRpbmcpIHtcbiAgICAgICAgICAgICAgICB0b3AgLT0gY29sbGlzaW9uUGFkZGluZ1sxXTtcbiAgICAgICAgICAgICAgICBib3R0b20gKz0gY29sbGlzaW9uUGFkZGluZ1szXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGhlaWdodCA9IGJvdHRvbSAtIHRvcDtcblxuICAgICAgICAgICAgaWYgKGhlaWdodCA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBzZXQgbWluaW11bSBib3ggaGVpZ2h0IHRvIGF2b2lkIHZlcnkgbWFueSBzbWFsbCBsYWJlbHNcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSBNYXRoLm1heCgxMCwgaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmNpcmNsZURpYW1ldGVyID0gaGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHkxID0gc2hhcGVkLnRvcCAqIGJveFNjYWxlIC0gcGFkZGluZztcbiAgICAgICAgICAgIGxldCB5MiA9IHNoYXBlZC5ib3R0b20gKiBib3hTY2FsZSArIHBhZGRpbmc7XG4gICAgICAgICAgICBsZXQgeDEgPSBzaGFwZWQubGVmdCAqIGJveFNjYWxlIC0gcGFkZGluZztcbiAgICAgICAgICAgIGxldCB4MiA9IHNoYXBlZC5yaWdodCAqIGJveFNjYWxlICsgcGFkZGluZztcblxuICAgICAgICAgICAgY29uc3QgY29sbGlzaW9uUGFkZGluZyA9IHNoYXBlZC5jb2xsaXNpb25QYWRkaW5nO1xuICAgICAgICAgICAgaWYgKGNvbGxpc2lvblBhZGRpbmcpIHtcbiAgICAgICAgICAgICAgICB4MSAtPSBjb2xsaXNpb25QYWRkaW5nWzBdICogYm94U2NhbGU7XG4gICAgICAgICAgICAgICAgeTEgLT0gY29sbGlzaW9uUGFkZGluZ1sxXSAqIGJveFNjYWxlO1xuICAgICAgICAgICAgICAgIHgyICs9IGNvbGxpc2lvblBhZGRpbmdbMl0gKiBib3hTY2FsZTtcbiAgICAgICAgICAgICAgICB5MiArPSBjb2xsaXNpb25QYWRkaW5nWzNdICogYm94U2NhbGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyb3RhdGUpIHtcbiAgICAgICAgICAgICAgICAvLyBBY2NvdW50IGZvciAqLXJvdGF0ZSBpbiBwb2ludCBjb2xsaXNpb24gYm94ZXNcbiAgICAgICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzYwNzVcbiAgICAgICAgICAgICAgICAvLyBEb2Vzbid0IGFjY291bnQgZm9yIGljb24tdGV4dC1maXRcblxuICAgICAgICAgICAgICAgIGNvbnN0IHRsID0gbmV3IFBvaW50KHgxLCB5MSk7XG4gICAgICAgICAgICAgICAgY29uc3QgdHIgPSBuZXcgUG9pbnQoeDIsIHkxKTtcbiAgICAgICAgICAgICAgICBjb25zdCBibCA9IG5ldyBQb2ludCh4MSwgeTIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJyID0gbmV3IFBvaW50KHgyLCB5Mik7XG5cbiAgICAgICAgICAgICAgICBjb25zdCByb3RhdGVSYWRpYW5zID0gcm90YXRlICogTWF0aC5QSSAvIDE4MDtcblxuICAgICAgICAgICAgICAgIHRsLl9yb3RhdGUocm90YXRlUmFkaWFucyk7XG4gICAgICAgICAgICAgICAgdHIuX3JvdGF0ZShyb3RhdGVSYWRpYW5zKTtcbiAgICAgICAgICAgICAgICBibC5fcm90YXRlKHJvdGF0ZVJhZGlhbnMpO1xuICAgICAgICAgICAgICAgIGJyLl9yb3RhdGUocm90YXRlUmFkaWFucyk7XG5cbiAgICAgICAgICAgICAgICAvLyBDb2xsaXNpb24gZmVhdHVyZXMgcmVxdWlyZSBhbiBcIm9uLWF4aXNcIiBnZW9tZXRyeSxcbiAgICAgICAgICAgICAgICAvLyBzbyB0YWtlIHRoZSBlbnZlbG9wZSBvZiB0aGUgcm90YXRlZCBnZW9tZXRyeVxuICAgICAgICAgICAgICAgIC8vIChtYXkgYmUgcXVpdGUgbGFyZ2UgZm9yIHdpZGUgbGFiZWxzIHJvdGF0ZWQgNDUgZGVncmVlcylcbiAgICAgICAgICAgICAgICB4MSA9IE1hdGgubWluKHRsLngsIHRyLngsIGJsLngsIGJyLngpO1xuICAgICAgICAgICAgICAgIHgyID0gTWF0aC5tYXgodGwueCwgdHIueCwgYmwueCwgYnIueCk7XG4gICAgICAgICAgICAgICAgeTEgPSBNYXRoLm1pbih0bC55LCB0ci55LCBibC55LCBici55KTtcbiAgICAgICAgICAgICAgICB5MiA9IE1hdGgubWF4KHRsLnksIHRyLnksIGJsLnksIGJyLnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29sbGlzaW9uQm94QXJyYXkuZW1wbGFjZUJhY2soYW5jaG9yLngsIGFuY2hvci55LCB4MSwgeTEsIHgyLCB5MiwgZmVhdHVyZUluZGV4LCBzb3VyY2VMYXllckluZGV4LCBidWNrZXRJbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJveEVuZEluZGV4ID0gY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29sbGlzaW9uRmVhdHVyZTtcbiIsIlxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGlueVF1ZXVlIHtcbiAgICBjb25zdHJ1Y3RvcihkYXRhID0gW10sIGNvbXBhcmUgPSBkZWZhdWx0Q29tcGFyZSkge1xuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMuZGF0YS5sZW5ndGg7XG4gICAgICAgIHRoaXMuY29tcGFyZSA9IGNvbXBhcmU7XG5cbiAgICAgICAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9ICh0aGlzLmxlbmd0aCA+PiAxKSAtIDE7IGkgPj0gMDsgaS0tKSB0aGlzLl9kb3duKGkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVzaChpdGVtKSB7XG4gICAgICAgIHRoaXMuZGF0YS5wdXNoKGl0ZW0pO1xuICAgICAgICB0aGlzLmxlbmd0aCsrO1xuICAgICAgICB0aGlzLl91cCh0aGlzLmxlbmd0aCAtIDEpO1xuICAgIH1cblxuICAgIHBvcCgpIHtcbiAgICAgICAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgICAgIGNvbnN0IHRvcCA9IHRoaXMuZGF0YVswXTtcbiAgICAgICAgY29uc3QgYm90dG9tID0gdGhpcy5kYXRhLnBvcCgpO1xuICAgICAgICB0aGlzLmxlbmd0aC0tO1xuXG4gICAgICAgIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVswXSA9IGJvdHRvbTtcbiAgICAgICAgICAgIHRoaXMuX2Rvd24oMCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdG9wO1xuICAgIH1cblxuICAgIHBlZWsoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFbMF07XG4gICAgfVxuXG4gICAgX3VwKHBvcykge1xuICAgICAgICBjb25zdCB7ZGF0YSwgY29tcGFyZX0gPSB0aGlzO1xuICAgICAgICBjb25zdCBpdGVtID0gZGF0YVtwb3NdO1xuXG4gICAgICAgIHdoaWxlIChwb3MgPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnQgPSAocG9zIC0gMSkgPj4gMTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBkYXRhW3BhcmVudF07XG4gICAgICAgICAgICBpZiAoY29tcGFyZShpdGVtLCBjdXJyZW50KSA+PSAwKSBicmVhaztcbiAgICAgICAgICAgIGRhdGFbcG9zXSA9IGN1cnJlbnQ7XG4gICAgICAgICAgICBwb3MgPSBwYXJlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBkYXRhW3Bvc10gPSBpdGVtO1xuICAgIH1cblxuICAgIF9kb3duKHBvcykge1xuICAgICAgICBjb25zdCB7ZGF0YSwgY29tcGFyZX0gPSB0aGlzO1xuICAgICAgICBjb25zdCBoYWxmTGVuZ3RoID0gdGhpcy5sZW5ndGggPj4gMTtcbiAgICAgICAgY29uc3QgaXRlbSA9IGRhdGFbcG9zXTtcblxuICAgICAgICB3aGlsZSAocG9zIDwgaGFsZkxlbmd0aCkge1xuICAgICAgICAgICAgbGV0IGxlZnQgPSAocG9zIDw8IDEpICsgMTtcbiAgICAgICAgICAgIGxldCBiZXN0ID0gZGF0YVtsZWZ0XTtcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0ID0gbGVmdCArIDE7XG5cbiAgICAgICAgICAgIGlmIChyaWdodCA8IHRoaXMubGVuZ3RoICYmIGNvbXBhcmUoZGF0YVtyaWdodF0sIGJlc3QpIDwgMCkge1xuICAgICAgICAgICAgICAgIGxlZnQgPSByaWdodDtcbiAgICAgICAgICAgICAgICBiZXN0ID0gZGF0YVtyaWdodF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29tcGFyZShiZXN0LCBpdGVtKSA+PSAwKSBicmVhaztcblxuICAgICAgICAgICAgZGF0YVtwb3NdID0gYmVzdDtcbiAgICAgICAgICAgIHBvcyA9IGxlZnQ7XG4gICAgICAgIH1cblxuICAgICAgICBkYXRhW3Bvc10gPSBpdGVtO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZGVmYXVsdENvbXBhcmUoYSwgYikge1xuICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBRdWV1ZSBmcm9tICd0aW55cXVldWUnO1xuXG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQge2Rpc3RUb1NlZ21lbnRTcXVhcmVkfSBmcm9tICcuL2ludGVyc2VjdGlvbl90ZXN0cyc7XG5cbi8qKlxuICogRmluZHMgYW4gYXBwcm94aW1hdGlvbiBvZiBhIHBvbHlnb24ncyBQb2xlIE9mIEluYWNjZXNzaWJpbGl5IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1BvbGVfb2ZfaW5hY2Nlc3NpYmlsaXR5XG4gKiBUaGlzIGlzIGEgY29weSBvZiBodHRwOi8vZ2l0aHViLmNvbS9tYXBib3gvcG9seWxhYmVsIGFkYXB0ZWQgdG8gdXNlIFBvaW50c1xuICpcbiAqIEBwYXJhbSBwb2x5Z29uUmluZ3MgZmlyc3QgaXRlbSBpbiBhcnJheSBpcyB0aGUgb3V0ZXIgcmluZyBmb2xsb3dlZCBvcHRpb25hbGx5IGJ5IHRoZSBsaXN0IG9mIGhvbGVzLCBzaG91bGQgYmUgYW4gZWxlbWVudCBvZiB0aGUgcmVzdWx0IG9mIHV0aWwvY2xhc3NpZnlfcmluZ3NcbiAqIEBwYXJhbSBwcmVjaXNpb24gU3BlY2lmaWVkIGluIGlucHV0IGNvb3JkaW5hdGUgdW5pdHMuIElmIDAgcmV0dXJucyBhZnRlciBmaXJzdCBydW4sIGlmID4gMCByZXBlYXRlZGx5IG5hcnJvd3MgdGhlIHNlYXJjaCBzcGFjZSB1bnRpbCB0aGUgcmFkaXVzIG9mIHRoZSBhcmVhIHNlYXJjaGVkIGZvciB0aGUgYmVzdCBwb2xlIGlzIGxlc3MgdGhhbiBwcmVjaXNpb25cbiAqIEBwYXJhbSBkZWJ1ZyBQcmludCBzb21lIHN0YXRpc3RpY3MgdG8gdGhlIGNvbnNvbGUgZHVyaW5nIGV4ZWN1dGlvblxuICogQHJldHVybnMgUG9sZSBvZiBJbmFjY2Vzc2liaWxpeS5cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChwb2x5Z29uUmluZ3M6IEFycmF5PEFycmF5PFBvaW50Pj4sIHByZWNpc2lvbj86IG51bWJlciA9IDEsIGRlYnVnPzogYm9vbGVhbiA9IGZhbHNlKTogUG9pbnQge1xuICAgIC8vIGZpbmQgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgb3V0ZXIgcmluZ1xuICAgIGxldCBtaW5YID0gSW5maW5pdHksIG1pblkgPSBJbmZpbml0eSwgbWF4WCA9IC1JbmZpbml0eSwgbWF4WSA9IC1JbmZpbml0eTtcbiAgICBjb25zdCBvdXRlclJpbmcgPSBwb2x5Z29uUmluZ3NbMF07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXRlclJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcCA9IG91dGVyUmluZ1tpXTtcbiAgICAgICAgaWYgKCFpIHx8IHAueCA8IG1pblgpIG1pblggPSBwLng7XG4gICAgICAgIGlmICghaSB8fCBwLnkgPCBtaW5ZKSBtaW5ZID0gcC55O1xuICAgICAgICBpZiAoIWkgfHwgcC54ID4gbWF4WCkgbWF4WCA9IHAueDtcbiAgICAgICAgaWYgKCFpIHx8IHAueSA+IG1heFkpIG1heFkgPSBwLnk7XG4gICAgfVxuXG4gICAgY29uc3Qgd2lkdGggPSBtYXhYIC0gbWluWDtcbiAgICBjb25zdCBoZWlnaHQgPSBtYXhZIC0gbWluWTtcbiAgICBjb25zdCBjZWxsU2l6ZSA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpO1xuICAgIGxldCBoID0gY2VsbFNpemUgLyAyO1xuXG4gICAgLy8gYSBwcmlvcml0eSBxdWV1ZSBvZiBjZWxscyBpbiBvcmRlciBvZiB0aGVpciBcInBvdGVudGlhbFwiIChtYXggZGlzdGFuY2UgdG8gcG9seWdvbilcbiAgICBjb25zdCBjZWxsUXVldWUgPSBuZXcgUXVldWUoW10sIGNvbXBhcmVNYXgpO1xuXG4gICAgaWYgKGNlbGxTaXplID09PSAwKSByZXR1cm4gbmV3IFBvaW50KG1pblgsIG1pblkpO1xuXG4gICAgLy8gY292ZXIgcG9seWdvbiB3aXRoIGluaXRpYWwgY2VsbHNcbiAgICBmb3IgKGxldCB4ID0gbWluWDsgeCA8IG1heFg7IHggKz0gY2VsbFNpemUpIHtcbiAgICAgICAgZm9yIChsZXQgeSA9IG1pblk7IHkgPCBtYXhZOyB5ICs9IGNlbGxTaXplKSB7XG4gICAgICAgICAgICBjZWxsUXVldWUucHVzaChuZXcgQ2VsbCh4ICsgaCwgeSArIGgsIGgsIHBvbHlnb25SaW5ncykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gdGFrZSBjZW50cm9pZCBhcyB0aGUgZmlyc3QgYmVzdCBndWVzc1xuICAgIGxldCBiZXN0Q2VsbCA9IGdldENlbnRyb2lkQ2VsbChwb2x5Z29uUmluZ3MpO1xuICAgIGxldCBudW1Qcm9iZXMgPSBjZWxsUXVldWUubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGNlbGxRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgLy8gcGljayB0aGUgbW9zdCBwcm9taXNpbmcgY2VsbCBmcm9tIHRoZSBxdWV1ZVxuICAgICAgICBjb25zdCBjZWxsID0gY2VsbFF1ZXVlLnBvcCgpO1xuXG4gICAgICAgIC8vIHVwZGF0ZSB0aGUgYmVzdCBjZWxsIGlmIHdlIGZvdW5kIGEgYmV0dGVyIG9uZVxuICAgICAgICBpZiAoY2VsbC5kID4gYmVzdENlbGwuZCB8fCAhYmVzdENlbGwuZCkge1xuICAgICAgICAgICAgYmVzdENlbGwgPSBjZWxsO1xuICAgICAgICAgICAgaWYgKGRlYnVnKSBjb25zb2xlLmxvZygnZm91bmQgYmVzdCAlZCBhZnRlciAlZCBwcm9iZXMnLCBNYXRoLnJvdW5kKDFlNCAqIGNlbGwuZCkgLyAxZTQsIG51bVByb2Jlcyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkbyBub3QgZHJpbGwgZG93biBmdXJ0aGVyIGlmIHRoZXJlJ3Mgbm8gY2hhbmNlIG9mIGEgYmV0dGVyIHNvbHV0aW9uXG4gICAgICAgIGlmIChjZWxsLm1heCAtIGJlc3RDZWxsLmQgPD0gcHJlY2lzaW9uKSBjb250aW51ZTtcblxuICAgICAgICAvLyBzcGxpdCB0aGUgY2VsbCBpbnRvIGZvdXIgY2VsbHNcbiAgICAgICAgaCA9IGNlbGwuaCAvIDI7XG4gICAgICAgIGNlbGxRdWV1ZS5wdXNoKG5ldyBDZWxsKGNlbGwucC54IC0gaCwgY2VsbC5wLnkgLSBoLCBoLCBwb2x5Z29uUmluZ3MpKTtcbiAgICAgICAgY2VsbFF1ZXVlLnB1c2gobmV3IENlbGwoY2VsbC5wLnggKyBoLCBjZWxsLnAueSAtIGgsIGgsIHBvbHlnb25SaW5ncykpO1xuICAgICAgICBjZWxsUXVldWUucHVzaChuZXcgQ2VsbChjZWxsLnAueCAtIGgsIGNlbGwucC55ICsgaCwgaCwgcG9seWdvblJpbmdzKSk7XG4gICAgICAgIGNlbGxRdWV1ZS5wdXNoKG5ldyBDZWxsKGNlbGwucC54ICsgaCwgY2VsbC5wLnkgKyBoLCBoLCBwb2x5Z29uUmluZ3MpKTtcbiAgICAgICAgbnVtUHJvYmVzICs9IDQ7XG4gICAgfVxuXG4gICAgaWYgKGRlYnVnKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBudW0gcHJvYmVzOiAke251bVByb2Jlc31gKTtcbiAgICAgICAgY29uc29sZS5sb2coYGJlc3QgZGlzdGFuY2U6ICR7YmVzdENlbGwuZH1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmVzdENlbGwucDtcbn1cblxuZnVuY3Rpb24gY29tcGFyZU1heChhLCBiKSB7XG4gICAgcmV0dXJuIGIubWF4IC0gYS5tYXg7XG59XG5cbmZ1bmN0aW9uIENlbGwoeCwgeSwgaCwgcG9seWdvbikge1xuICAgIHRoaXMucCA9IG5ldyBQb2ludCh4LCB5KTtcbiAgICB0aGlzLmggPSBoOyAvLyBoYWxmIHRoZSBjZWxsIHNpemVcbiAgICB0aGlzLmQgPSBwb2ludFRvUG9seWdvbkRpc3QodGhpcy5wLCBwb2x5Z29uKTsgLy8gZGlzdGFuY2UgZnJvbSBjZWxsIGNlbnRlciB0byBwb2x5Z29uXG4gICAgdGhpcy5tYXggPSB0aGlzLmQgKyB0aGlzLmggKiBNYXRoLlNRUlQyOyAvLyBtYXggZGlzdGFuY2UgdG8gcG9seWdvbiB3aXRoaW4gYSBjZWxsXG59XG5cbi8vIHNpZ25lZCBkaXN0YW5jZSBmcm9tIHBvaW50IHRvIHBvbHlnb24gb3V0bGluZSAobmVnYXRpdmUgaWYgcG9pbnQgaXMgb3V0c2lkZSlcbmZ1bmN0aW9uIHBvaW50VG9Qb2x5Z29uRGlzdChwLCBwb2x5Z29uKSB7XG4gICAgbGV0IGluc2lkZSA9IGZhbHNlO1xuICAgIGxldCBtaW5EaXN0U3EgPSBJbmZpbml0eTtcblxuICAgIGZvciAobGV0IGsgPSAwOyBrIDwgcG9seWdvbi5sZW5ndGg7IGsrKykge1xuICAgICAgICBjb25zdCByaW5nID0gcG9seWdvbltrXTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gcmluZy5sZW5ndGgsIGogPSBsZW4gLSAxOyBpIDwgbGVuOyBqID0gaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBhID0gcmluZ1tpXTtcbiAgICAgICAgICAgIGNvbnN0IGIgPSByaW5nW2pdO1xuXG4gICAgICAgICAgICBpZiAoKGEueSA+IHAueSAhPT0gYi55ID4gcC55KSAmJlxuICAgICAgICAgICAgICAgIChwLnggPCAoYi54IC0gYS54KSAqIChwLnkgLSBhLnkpIC8gKGIueSAtIGEueSkgKyBhLngpKSBpbnNpZGUgPSAhaW5zaWRlO1xuXG4gICAgICAgICAgICBtaW5EaXN0U3EgPSBNYXRoLm1pbihtaW5EaXN0U3EsIGRpc3RUb1NlZ21lbnRTcXVhcmVkKHAsIGEsIGIpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoaW5zaWRlID8gMSA6IC0xKSAqIE1hdGguc3FydChtaW5EaXN0U3EpO1xufVxuXG4vLyBnZXQgcG9seWdvbiBjZW50cm9pZFxuZnVuY3Rpb24gZ2V0Q2VudHJvaWRDZWxsKHBvbHlnb24pIHtcbiAgICBsZXQgYXJlYSA9IDA7XG4gICAgbGV0IHggPSAwO1xuICAgIGxldCB5ID0gMDtcbiAgICBjb25zdCBwb2ludHMgPSBwb2x5Z29uWzBdO1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBwb2ludHMubGVuZ3RoLCBqID0gbGVuIC0gMTsgaSA8IGxlbjsgaiA9IGkrKykge1xuICAgICAgICBjb25zdCBhID0gcG9pbnRzW2ldO1xuICAgICAgICBjb25zdCBiID0gcG9pbnRzW2pdO1xuICAgICAgICBjb25zdCBmID0gYS54ICogYi55IC0gYi54ICogYS55O1xuICAgICAgICB4ICs9IChhLnggKyBiLngpICogZjtcbiAgICAgICAgeSArPSAoYS55ICsgYi55KSAqIGY7XG4gICAgICAgIGFyZWEgKz0gZiAqIDM7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQ2VsbCh4IC8gYXJlYSwgeSAvIGFyZWEsIDAsIHBvbHlnb24pO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IEFuY2hvciBmcm9tICcuL2FuY2hvcic7XG5cbmltcG9ydCB7Z2V0QW5jaG9ycywgZ2V0Q2VudGVyQW5jaG9yfSBmcm9tICcuL2dldF9hbmNob3JzJztcbmltcG9ydCBjbGlwTGluZSBmcm9tICcuL2NsaXBfbGluZSc7XG5pbXBvcnQge3NoYXBlVGV4dCwgc2hhcGVJY29uLCBXcml0aW5nTW9kZSwgZml0SWNvblRvVGV4dH0gZnJvbSAnLi9zaGFwaW5nJztcbmltcG9ydCB7Z2V0R2x5cGhRdWFkcywgZ2V0SWNvblF1YWRzfSBmcm9tICcuL3F1YWRzJztcbmltcG9ydCBDb2xsaXNpb25GZWF0dXJlIGZyb20gJy4vY29sbGlzaW9uX2ZlYXR1cmUnO1xuaW1wb3J0IHt3YXJuT25jZX0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7XG4gICAgYWxsb3dzVmVydGljYWxXcml0aW5nTW9kZSxcbiAgICBhbGxvd3NMZXR0ZXJTcGFjaW5nXG59IGZyb20gJy4uL3V0aWwvc2NyaXB0X2RldGVjdGlvbic7XG5pbXBvcnQgZmluZFBvbGVPZkluYWNjZXNzaWJpbGl0eSBmcm9tICcuLi91dGlsL2ZpbmRfcG9sZV9vZl9pbmFjY2Vzc2liaWxpdHknO1xuaW1wb3J0IGNsYXNzaWZ5UmluZ3MgZnJvbSAnLi4vdXRpbC9jbGFzc2lmeV9yaW5ncyc7XG5pbXBvcnQgRVhURU5UIGZyb20gJy4uL2RhdGEvZXh0ZW50JztcbmltcG9ydCBTeW1ib2xCdWNrZXQgZnJvbSAnLi4vZGF0YS9idWNrZXQvc3ltYm9sX2J1Y2tldCc7XG5pbXBvcnQgRXZhbHVhdGlvblBhcmFtZXRlcnMgZnJvbSAnLi4vc3R5bGUvZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcbmltcG9ydCB7U0laRV9QQUNLX0ZBQ1RPUn0gZnJvbSAnLi9zeW1ib2xfc2l6ZSc7XG5pbXBvcnQgT05FX0VNIGZyb20gJy4vb25lX2VtJztcbmltcG9ydCB0eXBlIHtDYW5vbmljYWxUaWxlSUR9IGZyb20gJy4uL3NvdXJjZS90aWxlX2lkJztcbmltcG9ydCB0eXBlIHtTaGFwaW5nLCBQb3NpdGlvbmVkSWNvbiwgVGV4dEp1c3RpZnl9IGZyb20gJy4vc2hhcGluZyc7XG5pbXBvcnQgdHlwZSB7Q29sbGlzaW9uQm94QXJyYXl9IGZyb20gJy4uL2RhdGEvYXJyYXlfdHlwZXMnO1xuaW1wb3J0IHR5cGUge1N5bWJvbEZlYXR1cmV9IGZyb20gJy4uL2RhdGEvYnVja2V0L3N5bWJvbF9idWNrZXQnO1xuaW1wb3J0IHR5cGUge1N0eWxlSW1hZ2V9IGZyb20gJy4uL3N0eWxlL3N0eWxlX2ltYWdlJztcbmltcG9ydCB0eXBlIHtTdHlsZUdseXBofSBmcm9tICcuLi9zdHlsZS9zdHlsZV9nbHlwaCc7XG5pbXBvcnQgdHlwZSBTeW1ib2xTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyL3N5bWJvbF9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSB7SW1hZ2VQb3NpdGlvbn0gZnJvbSAnLi4vcmVuZGVyL2ltYWdlX2F0bGFzJztcbmltcG9ydCB0eXBlIHtHbHlwaFBvc2l0aW9ufSBmcm9tICcuLi9yZW5kZXIvZ2x5cGhfYXRsYXMnO1xuaW1wb3J0IHR5cGUge1Bvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZX0gZnJvbSAnLi4vc3R5bGUvcHJvcGVydGllcyc7XG5cbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCBtdXJtdXIzIGZyb20gJ211cm11cmhhc2gtanMnO1xuXG4vLyBUaGUgc3ltYm9sIGxheW91dCBwcm9jZXNzIG5lZWRzIGB0ZXh0LXNpemVgIGV2YWx1YXRlZCBhdCB1cCB0byBmaXZlIGRpZmZlcmVudCB6b29tIGxldmVscywgYW5kXG4vLyBgaWNvbi1zaXplYCBhdCB1cCB0byB0aHJlZTpcbi8vXG4vLyAgIDEuIGB0ZXh0LXNpemVgIGF0IHRoZSB6b29tIGxldmVsIG9mIHRoZSBidWNrZXQuIFVzZWQgdG8gY2FsY3VsYXRlIGEgcGVyLWZlYXR1cmUgc2l6ZSBmb3Igc291cmNlIGB0ZXh0LXNpemVgXG4vLyAgICAgICBleHByZXNzaW9ucywgYW5kIHRvIGNhbGN1bGF0ZSB0aGUgYm94IGRpbWVuc2lvbnMgZm9yIGljb24tdGV4dC1maXQuXG4vLyAgIDIuIGBpY29uLXNpemVgIGF0IHRoZSB6b29tIGxldmVsIG9mIHRoZSBidWNrZXQuIFVzZWQgdG8gY2FsY3VsYXRlIGEgcGVyLWZlYXR1cmUgc2l6ZSBmb3Igc291cmNlIGBpY29uLXNpemVgXG4vLyAgICAgICBleHByZXNzaW9ucy5cbi8vICAgMy4gYHRleHQtc2l6ZWAgYW5kIGBpY29uLXNpemVgIGF0IHRoZSB6b29tIGxldmVsIG9mIHRoZSBidWNrZXQsIHBsdXMgb25lLiBVc2VkIHRvIGNhbGN1bGF0ZSBjb2xsaXNpb24gYm94ZXMuXG4vLyAgIDQuIGB0ZXh0LXNpemVgIGF0IHpvb20gbGV2ZWwgMTguIFVzZWQgZm9yIHNvbWV0aGluZyBsaW5lLXN5bWJvbC1wbGFjZW1lbnQtcmVsYXRlZC5cbi8vICAgNS4gIEZvciBjb21wb3NpdGUgYCotc2l6ZWAgZXhwcmVzc2lvbnM6IHR3byB6b29tIGxldmVscyBvZiBjdXJ2ZSBzdG9wcyB0aGF0IFwiY292ZXJcIiB0aGUgem9vbSBsZXZlbCBvZiB0aGVcbi8vICAgICAgIGJ1Y2tldC4gVGhlc2UgZ28gaW50byBhIHZlcnRleCBidWZmZXIgYW5kIGFyZSB1c2VkIGJ5IHRoZSBzaGFkZXIgdG8gaW50ZXJwb2xhdGUgdGhlIHNpemUgYXQgcmVuZGVyIHRpbWUuXG4vL1xuLy8gKDEpIGFuZCAoMikgYXJlIHN0b3JlZCBpbiBgYnVja2V0LmxheWVyc1swXS5sYXlvdXRgLiBUaGUgcmVtYWluZGVyIGFyZSBiZWxvdy5cbi8vXG50eXBlIFNpemVzID0ge1xuICAgIGxheW91dFRleHRTaXplOiBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8bnVtYmVyPiwgLy8gKDMpXG4gICAgbGF5b3V0SWNvblNpemU6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxudW1iZXI+LCAvLyAoMylcbiAgICB0ZXh0TWF4U2l6ZTogUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlPG51bWJlcj4sICAgIC8vICg0KVxuICAgIGNvbXBvc2l0ZVRleHRTaXplczogW1Bvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxudW1iZXI+LCBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8bnVtYmVyPl0sIC8vICg1KVxuICAgIGNvbXBvc2l0ZUljb25TaXplczogW1Bvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxudW1iZXI+LCBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8bnVtYmVyPl0sIC8vICg1KVxufTtcblxuZXhwb3J0IHR5cGUgVGV4dEFuY2hvciA9ICdjZW50ZXInIHwgJ2xlZnQnIHwgJ3JpZ2h0JyB8ICd0b3AnIHwgJ2JvdHRvbScgfCAndG9wLWxlZnQnIHwgJ3RvcC1yaWdodCcgfCAnYm90dG9tLWxlZnQnIHwgJ2JvdHRvbS1yaWdodCc7XG5cbi8vIFRoZSByYWRpYWwgb2Zmc2V0IGlzIHRvIHRoZSBlZGdlIG9mIHRoZSB0ZXh0IGJveFxuLy8gSW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uLCB0aGUgZWRnZSBvZiB0aGUgdGV4dCBib3ggaXMgd2hlcmUgZ2x5cGhzIHN0YXJ0XG4vLyBCdXQgaW4gdGhlIHZlcnRpY2FsIGRpcmVjdGlvbiwgdGhlIGdseXBocyBhcHBlYXIgdG8gXCJzdGFydFwiIGF0IHRoZSBiYXNlbGluZVxuLy8gV2UgZG9uJ3QgYWN0dWFsbHkgbG9hZCBiYXNlbGluZSBkYXRhLCBidXQgd2UgYXNzdW1lIGFuIG9mZnNldCBvZiBPTkVfRU0gLSAxN1xuLy8gKHNlZSBcInlPZmZzZXRcIiBpbiBzaGFwaW5nLmpzKVxuY29uc3QgYmFzZWxpbmVPZmZzZXQgPSA3O1xuY29uc3QgSU5WQUxJRF9URVhUX09GRlNFVCA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcblxuZXhwb3J0IGZ1bmN0aW9uIGV2YWx1YXRlVmFyaWFibGVPZmZzZXQoYW5jaG9yOiBUZXh0QW5jaG9yLCBvZmZzZXQ6IFtudW1iZXIsIG51bWJlcl0pIHtcblxuICAgIGZ1bmN0aW9uIGZyb21SYWRpYWxPZmZzZXQoYW5jaG9yOiBUZXh0QW5jaG9yLCByYWRpYWxPZmZzZXQ6IG51bWJlcikge1xuICAgICAgICBsZXQgeCA9IDAsIHkgPSAwO1xuICAgICAgICBpZiAocmFkaWFsT2Zmc2V0IDwgMCkgcmFkaWFsT2Zmc2V0ID0gMDsgLy8gSWdub3JlIG5lZ2F0aXZlIG9mZnNldC5cbiAgICAgICAgLy8gc29sdmUgZm9yIHIgd2hlcmUgcl4yICsgcl4yID0gcmFkaWFsT2Zmc2V0XjJcbiAgICAgICAgY29uc3QgaHlwb3RlbnVzZSA9IHJhZGlhbE9mZnNldCAvIE1hdGguc3FydCgyKTtcbiAgICAgICAgc3dpdGNoIChhbmNob3IpIHtcbiAgICAgICAgY2FzZSAndG9wLXJpZ2h0JzpcbiAgICAgICAgY2FzZSAndG9wLWxlZnQnOlxuICAgICAgICAgICAgeSA9IGh5cG90ZW51c2UgLSBiYXNlbGluZU9mZnNldDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdib3R0b20tcmlnaHQnOlxuICAgICAgICBjYXNlICdib3R0b20tbGVmdCc6XG4gICAgICAgICAgICB5ID0gLWh5cG90ZW51c2UgKyBiYXNlbGluZU9mZnNldDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgICAgeSA9IC1yYWRpYWxPZmZzZXQgKyBiYXNlbGluZU9mZnNldDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgICAgeSA9IHJhZGlhbE9mZnNldCAtIGJhc2VsaW5lT2Zmc2V0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKGFuY2hvcikge1xuICAgICAgICBjYXNlICd0b3AtcmlnaHQnOlxuICAgICAgICBjYXNlICdib3R0b20tcmlnaHQnOlxuICAgICAgICAgICAgeCA9IC1oeXBvdGVudXNlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3RvcC1sZWZ0JzpcbiAgICAgICAgY2FzZSAnYm90dG9tLWxlZnQnOlxuICAgICAgICAgICAgeCA9IGh5cG90ZW51c2U7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgICAgICB4ID0gcmFkaWFsT2Zmc2V0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICAgIHggPSAtcmFkaWFsT2Zmc2V0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW3gsIHldO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZyb21UZXh0T2Zmc2V0KGFuY2hvcjogVGV4dEFuY2hvciwgb2Zmc2V0WDogbnVtYmVyLCBvZmZzZXRZOiBudW1iZXIpIHtcbiAgICAgICAgbGV0IHggPSAwLCB5ID0gMDtcbiAgICAgICAgLy8gVXNlIGFic29sdXRlIG9mZnNldCB2YWx1ZXMuXG4gICAgICAgIG9mZnNldFggPSBNYXRoLmFicyhvZmZzZXRYKTtcbiAgICAgICAgb2Zmc2V0WSA9IE1hdGguYWJzKG9mZnNldFkpO1xuXG4gICAgICAgIHN3aXRjaCAoYW5jaG9yKSB7XG4gICAgICAgIGNhc2UgJ3RvcC1yaWdodCc6XG4gICAgICAgIGNhc2UgJ3RvcC1sZWZ0JzpcbiAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgICAgIHkgPSBvZmZzZXRZIC0gYmFzZWxpbmVPZmZzZXQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYm90dG9tLXJpZ2h0JzpcbiAgICAgICAgY2FzZSAnYm90dG9tLWxlZnQnOlxuICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgICAgeSA9IC1vZmZzZXRZICsgYmFzZWxpbmVPZmZzZXQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAoYW5jaG9yKSB7XG4gICAgICAgIGNhc2UgJ3RvcC1yaWdodCc6XG4gICAgICAgIGNhc2UgJ2JvdHRvbS1yaWdodCc6XG4gICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICAgIHggPSAtb2Zmc2V0WDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd0b3AtbGVmdCc6XG4gICAgICAgIGNhc2UgJ2JvdHRvbS1sZWZ0JzpcbiAgICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgICAgICB4ID0gb2Zmc2V0WDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFt4LCB5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gKG9mZnNldFsxXSAhPT0gSU5WQUxJRF9URVhUX09GRlNFVCkgPyBmcm9tVGV4dE9mZnNldChhbmNob3IsIG9mZnNldFswXSwgb2Zmc2V0WzFdKSA6IGZyb21SYWRpYWxPZmZzZXQoYW5jaG9yLCBvZmZzZXRbMF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGVyZm9ybVN5bWJvbExheW91dChidWNrZXQ6IFN5bWJvbEJ1Y2tldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhNYXA6IHtbXzogc3RyaW5nXToge1tudW1iZXJdOiA/U3R5bGVHbHlwaH19LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaFBvc2l0aW9uczoge1tfOiBzdHJpbmddOiB7W251bWJlcl06IEdseXBoUG9zaXRpb259fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VNYXA6IHtbXzogc3RyaW5nXTogU3R5bGVJbWFnZX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlUG9zaXRpb25zOiB7W186IHN0cmluZ106IEltYWdlUG9zaXRpb259LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93Q29sbGlzaW9uQm94ZXM6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbm9uaWNhbDogQ2Fub25pY2FsVGlsZUlEKSB7XG4gICAgYnVja2V0LmNyZWF0ZUFycmF5cygpO1xuXG4gICAgY29uc3QgdGlsZVNpemUgPSA1MTIgKiBidWNrZXQub3ZlcnNjYWxpbmc7XG4gICAgYnVja2V0LnRpbGVQaXhlbFJhdGlvID0gRVhURU5UIC8gdGlsZVNpemU7XG4gICAgYnVja2V0LmNvbXBhcmVUZXh0ID0ge307XG4gICAgYnVja2V0Lmljb25zTmVlZExpbmVhciA9IGZhbHNlO1xuXG4gICAgY29uc3QgbGF5b3V0ID0gYnVja2V0LmxheWVyc1swXS5sYXlvdXQ7XG4gICAgY29uc3QgdW5ldmFsdWF0ZWRMYXlvdXRWYWx1ZXMgPSBidWNrZXQubGF5ZXJzWzBdLl91bmV2YWx1YXRlZExheW91dC5fdmFsdWVzO1xuXG4gICAgY29uc3Qgc2l6ZXMgPSB7fTtcblxuICAgIGlmIChidWNrZXQudGV4dFNpemVEYXRhLmtpbmQgPT09ICdjb21wb3NpdGUnKSB7XG4gICAgICAgIGNvbnN0IHttaW5ab29tLCBtYXhab29tfSA9IGJ1Y2tldC50ZXh0U2l6ZURhdGE7XG4gICAgICAgIHNpemVzLmNvbXBvc2l0ZVRleHRTaXplcyA9IFtcbiAgICAgICAgICAgIHVuZXZhbHVhdGVkTGF5b3V0VmFsdWVzWyd0ZXh0LXNpemUnXS5wb3NzaWJseUV2YWx1YXRlKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyhtaW5ab29tKSwgY2Fub25pY2FsKSxcbiAgICAgICAgICAgIHVuZXZhbHVhdGVkTGF5b3V0VmFsdWVzWyd0ZXh0LXNpemUnXS5wb3NzaWJseUV2YWx1YXRlKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyhtYXhab29tKSwgY2Fub25pY2FsKVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGlmIChidWNrZXQuaWNvblNpemVEYXRhLmtpbmQgPT09ICdjb21wb3NpdGUnKSB7XG4gICAgICAgIGNvbnN0IHttaW5ab29tLCBtYXhab29tfSA9IGJ1Y2tldC5pY29uU2l6ZURhdGE7XG4gICAgICAgIHNpemVzLmNvbXBvc2l0ZUljb25TaXplcyA9IFtcbiAgICAgICAgICAgIHVuZXZhbHVhdGVkTGF5b3V0VmFsdWVzWydpY29uLXNpemUnXS5wb3NzaWJseUV2YWx1YXRlKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyhtaW5ab29tKSwgY2Fub25pY2FsKSxcbiAgICAgICAgICAgIHVuZXZhbHVhdGVkTGF5b3V0VmFsdWVzWydpY29uLXNpemUnXS5wb3NzaWJseUV2YWx1YXRlKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyhtYXhab29tKSwgY2Fub25pY2FsKVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHNpemVzLmxheW91dFRleHRTaXplID0gdW5ldmFsdWF0ZWRMYXlvdXRWYWx1ZXNbJ3RleHQtc2l6ZSddLnBvc3NpYmx5RXZhbHVhdGUobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKGJ1Y2tldC56b29tICsgMSksIGNhbm9uaWNhbCk7XG4gICAgc2l6ZXMubGF5b3V0SWNvblNpemUgPSB1bmV2YWx1YXRlZExheW91dFZhbHVlc1snaWNvbi1zaXplJ10ucG9zc2libHlFdmFsdWF0ZShuZXcgRXZhbHVhdGlvblBhcmFtZXRlcnMoYnVja2V0Lnpvb20gKyAxKSwgY2Fub25pY2FsKTtcbiAgICBzaXplcy50ZXh0TWF4U2l6ZSA9IHVuZXZhbHVhdGVkTGF5b3V0VmFsdWVzWyd0ZXh0LXNpemUnXS5wb3NzaWJseUV2YWx1YXRlKG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycygxOCkpO1xuXG4gICAgY29uc3QgbGluZUhlaWdodCA9IGxheW91dC5nZXQoJ3RleHQtbGluZS1oZWlnaHQnKSAqIE9ORV9FTTtcbiAgICBjb25zdCB0ZXh0QWxvbmdMaW5lID0gbGF5b3V0LmdldCgndGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQnKSA9PT0gJ21hcCcgJiYgbGF5b3V0LmdldCgnc3ltYm9sLXBsYWNlbWVudCcpICE9PSAncG9pbnQnO1xuICAgIGNvbnN0IGtlZXBVcHJpZ2h0ID0gbGF5b3V0LmdldCgndGV4dC1rZWVwLXVwcmlnaHQnKTtcbiAgICBjb25zdCB0ZXh0U2l6ZSA9IGxheW91dC5nZXQoJ3RleHQtc2l6ZScpO1xuXG4gICAgZm9yIChjb25zdCBmZWF0dXJlIG9mIGJ1Y2tldC5mZWF0dXJlcykge1xuICAgICAgICBjb25zdCBmb250c3RhY2sgPSBsYXlvdXQuZ2V0KCd0ZXh0LWZvbnQnKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSwgY2Fub25pY2FsKS5qb2luKCcsJyk7XG4gICAgICAgIGNvbnN0IGxheW91dFRleHRTaXplVGhpc1pvb20gPSB0ZXh0U2l6ZS5ldmFsdWF0ZShmZWF0dXJlLCB7fSwgY2Fub25pY2FsKTtcbiAgICAgICAgY29uc3QgbGF5b3V0VGV4dFNpemUgPSBzaXplcy5sYXlvdXRUZXh0U2l6ZS5ldmFsdWF0ZShmZWF0dXJlLCB7fSwgY2Fub25pY2FsKTtcbiAgICAgICAgY29uc3QgbGF5b3V0SWNvblNpemUgPSBzaXplcy5sYXlvdXRJY29uU2l6ZS5ldmFsdWF0ZShmZWF0dXJlLCB7fSwgY2Fub25pY2FsKTtcblxuICAgICAgICBjb25zdCBzaGFwZWRUZXh0T3JpZW50YXRpb25zID0ge1xuICAgICAgICAgICAgaG9yaXpvbnRhbDoge30sXG4gICAgICAgICAgICB2ZXJ0aWNhbDogdW5kZWZpbmVkXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHRleHQgPSBmZWF0dXJlLnRleHQ7XG4gICAgICAgIGxldCB0ZXh0T2Zmc2V0OiBbbnVtYmVyLCBudW1iZXJdID0gWzAsIDBdO1xuICAgICAgICBpZiAodGV4dCkge1xuICAgICAgICAgICAgY29uc3QgdW5mb3JtYXR0ZWRUZXh0ID0gdGV4dC50b1N0cmluZygpO1xuICAgICAgICAgICAgY29uc3Qgc3BhY2luZyA9IGxheW91dC5nZXQoJ3RleHQtbGV0dGVyLXNwYWNpbmcnKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSwgY2Fub25pY2FsKSAqIE9ORV9FTTtcbiAgICAgICAgICAgIGNvbnN0IHNwYWNpbmdJZkFsbG93ZWQgPSBhbGxvd3NMZXR0ZXJTcGFjaW5nKHVuZm9ybWF0dGVkVGV4dCkgPyBzcGFjaW5nIDogMDtcblxuICAgICAgICAgICAgY29uc3QgdGV4dEFuY2hvciA9IGxheW91dC5nZXQoJ3RleHQtYW5jaG9yJykuZXZhbHVhdGUoZmVhdHVyZSwge30sIGNhbm9uaWNhbCk7XG4gICAgICAgICAgICBjb25zdCB2YXJpYWJsZVRleHRBbmNob3IgPSBsYXlvdXQuZ2V0KCd0ZXh0LXZhcmlhYmxlLWFuY2hvcicpO1xuXG4gICAgICAgICAgICBpZiAoIXZhcmlhYmxlVGV4dEFuY2hvcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhZGlhbE9mZnNldCA9IGxheW91dC5nZXQoJ3RleHQtcmFkaWFsLW9mZnNldCcpLmV2YWx1YXRlKGZlYXR1cmUsIHt9LCBjYW5vbmljYWwpO1xuICAgICAgICAgICAgICAgIC8vIExheWVycyB3aXRoIHZhcmlhYmxlIGFuY2hvcnMgdXNlIHRoZSBgdGV4dC1yYWRpYWwtb2Zmc2V0YCBwcm9wZXJ0eSBhbmQgdGhlIFt4LCB5XSBvZmZzZXQgdmVjdG9yXG4gICAgICAgICAgICAgICAgLy8gaXMgY2FsY3VsYXRlZCBhdCBwbGFjZW1lbnQgdGltZSBpbnN0ZWFkIG9mIGxheW91dCB0aW1lXG4gICAgICAgICAgICAgICAgaWYgKHJhZGlhbE9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGUgc3R5bGUgc3BlYyBzYXlzIGRvbid0IHVzZSBgdGV4dC1vZmZzZXRgIGFuZCBgdGV4dC1yYWRpYWwtb2Zmc2V0YCB0b2dldGhlclxuICAgICAgICAgICAgICAgICAgICAvLyBidXQgZG9lc24ndCBhY3R1YWxseSBzcGVjaWZ5IHdoYXQgaGFwcGVucyBpZiB5b3UgdXNlIGJvdGguIFdlIGdvIHdpdGggdGhlIHJhZGlhbCBvZmZzZXQuXG4gICAgICAgICAgICAgICAgICAgIHRleHRPZmZzZXQgPSBldmFsdWF0ZVZhcmlhYmxlT2Zmc2V0KHRleHRBbmNob3IsIFtyYWRpYWxPZmZzZXQgKiBPTkVfRU0sIElOVkFMSURfVEVYVF9PRkZTRVRdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0T2Zmc2V0ID0gKGxheW91dC5nZXQoJ3RleHQtb2Zmc2V0JykuZXZhbHVhdGUoZmVhdHVyZSwge30sIGNhbm9uaWNhbCkubWFwKHQgPT4gdCAqIE9ORV9FTSk6IGFueSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgdGV4dEp1c3RpZnkgPSB0ZXh0QWxvbmdMaW5lID9cbiAgICAgICAgICAgICAgICBcImNlbnRlclwiIDpcbiAgICAgICAgICAgICAgICBsYXlvdXQuZ2V0KCd0ZXh0LWp1c3RpZnknKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSwgY2Fub25pY2FsKTtcblxuICAgICAgICAgICAgY29uc3Qgc3ltYm9sUGxhY2VtZW50ID0gbGF5b3V0LmdldCgnc3ltYm9sLXBsYWNlbWVudCcpO1xuICAgICAgICAgICAgY29uc3QgbWF4V2lkdGggPSBzeW1ib2xQbGFjZW1lbnQgPT09ICdwb2ludCcgP1xuICAgICAgICAgICAgICAgIGxheW91dC5nZXQoJ3RleHQtbWF4LXdpZHRoJykuZXZhbHVhdGUoZmVhdHVyZSwge30sIGNhbm9uaWNhbCkgKiBPTkVfRU0gOlxuICAgICAgICAgICAgICAgIDA7XG5cbiAgICAgICAgICAgIGNvbnN0IGFkZFZlcnRpY2FsU2hhcGluZ0ZvclBvaW50TGFiZWxJZk5lZWRlZCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYnVja2V0LmFsbG93VmVydGljYWxQbGFjZW1lbnQgJiYgYWxsb3dzVmVydGljYWxXcml0aW5nTW9kZSh1bmZvcm1hdHRlZFRleHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFZlcnRpY2FsIFBPSSBsYWJlbCBwbGFjZW1lbnQgaXMgbWVhbnQgdG8gYmUgdXNlZCBmb3Igc2NyaXB0cyB0aGF0IHN1cHBvcnQgdmVydGljYWxcbiAgICAgICAgICAgICAgICAgICAgLy8gd3JpdGluZyBtb2RlLCB0aHVzLCBkZWZhdWx0IGxlZnQganVzdGlmaWNhdGlvbiBpcyB1c2VkLiBJZiBMYXRpblxuICAgICAgICAgICAgICAgICAgICAvLyBzY3JpcHRzIHdvdWxkIG5lZWQgdG8gYmUgc3VwcG9ydGVkLCB0aGlzIHNob3VsZCB0YWtlIGludG8gYWNjb3VudCBvdGhlciBqdXN0aWZpY2F0aW9ucy5cbiAgICAgICAgICAgICAgICAgICAgc2hhcGVkVGV4dE9yaWVudGF0aW9ucy52ZXJ0aWNhbCA9IHNoYXBlVGV4dCh0ZXh0LCBnbHlwaE1hcCwgZ2x5cGhQb3NpdGlvbnMsIGltYWdlUG9zaXRpb25zLCBmb250c3RhY2ssIG1heFdpZHRoLCBsaW5lSGVpZ2h0LCB0ZXh0QW5jaG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsZWZ0Jywgc3BhY2luZ0lmQWxsb3dlZCwgdGV4dE9mZnNldCwgV3JpdGluZ01vZGUudmVydGljYWwsIHRydWUsIHN5bWJvbFBsYWNlbWVudCwgbGF5b3V0VGV4dFNpemUsIGxheW91dFRleHRTaXplVGhpc1pvb20pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIC8vIElmIHRoaXMgbGF5ZXIgdXNlcyB0ZXh0LXZhcmlhYmxlLWFuY2hvciwgZ2VuZXJhdGUgc2hhcGluZ3MgZm9yIGFsbCBqdXN0aWZpY2F0aW9uIHBvc3NpYmlsaXRpZXMuXG4gICAgICAgICAgICBpZiAoIXRleHRBbG9uZ0xpbmUgJiYgdmFyaWFibGVUZXh0QW5jaG9yKSB7XG4gICAgICAgICAgICAgICAgY29uc3QganVzdGlmaWNhdGlvbnMgPSB0ZXh0SnVzdGlmeSA9PT0gXCJhdXRvXCIgP1xuICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZVRleHRBbmNob3IubWFwKGEgPT4gZ2V0QW5jaG9ySnVzdGlmaWNhdGlvbihhKSkgOlxuICAgICAgICAgICAgICAgICAgICBbdGV4dEp1c3RpZnldO1xuXG4gICAgICAgICAgICAgICAgbGV0IHNpbmdsZUxpbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGp1c3RpZmljYXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGp1c3RpZmljYXRpb246IFRleHRKdXN0aWZ5ID0ganVzdGlmaWNhdGlvbnNbaV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaGFwZWRUZXh0T3JpZW50YXRpb25zLmhvcml6b250YWxbanVzdGlmaWNhdGlvbl0pIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2luZ2xlTGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHNoYXBpbmcgZm9yIHRoZSBmaXJzdCBqdXN0aWZpY2F0aW9uIHdhcyBvbmx5IGEgc2luZ2xlIGxpbmUsIHdlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW4gcmUtdXNlIGl0IGZvciB0aGUgb3RoZXIganVzdGlmaWNhdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlZFRleHRPcmllbnRhdGlvbnMuaG9yaXpvbnRhbFtqdXN0aWZpY2F0aW9uXSA9IHNoYXBlZFRleHRPcmllbnRhdGlvbnMuaG9yaXpvbnRhbFswXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHVzaW5nIHRleHQtdmFyaWFibGUtYW5jaG9yIGZvciB0aGUgbGF5ZXIsIHdlIHVzZSBhIGNlbnRlciBhbmNob3IgZm9yIGFsbCBzaGFwaW5ncyBhbmQgYXBwbHlcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBvZmZzZXRzIGZvciB0aGUgYW5jaG9yIGluIHRoZSBwbGFjZW1lbnQgc3RlcC5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNoYXBpbmcgPSBzaGFwZVRleHQodGV4dCwgZ2x5cGhNYXAsIGdseXBoUG9zaXRpb25zLCBpbWFnZVBvc2l0aW9ucywgZm9udHN0YWNrLCBtYXhXaWR0aCwgbGluZUhlaWdodCwgJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1c3RpZmljYXRpb24sIHNwYWNpbmdJZkFsbG93ZWQsIHRleHRPZmZzZXQsIFdyaXRpbmdNb2RlLmhvcml6b250YWwsIGZhbHNlLCBzeW1ib2xQbGFjZW1lbnQsIGxheW91dFRleHRTaXplLCBsYXlvdXRUZXh0U2l6ZVRoaXNab29tKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaGFwaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGVkVGV4dE9yaWVudGF0aW9ucy5ob3Jpem9udGFsW2p1c3RpZmljYXRpb25dID0gc2hhcGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVMaW5lID0gc2hhcGluZy5wb3NpdGlvbmVkTGluZXMubGVuZ3RoID09PSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYWRkVmVydGljYWxTaGFwaW5nRm9yUG9pbnRMYWJlbElmTmVlZGVkKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0ZXh0SnVzdGlmeSA9PT0gXCJhdXRvXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dEp1c3RpZnkgPSBnZXRBbmNob3JKdXN0aWZpY2F0aW9uKHRleHRBbmNob3IpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIEhvcml6b250YWwgcG9pbnQgb3IgbGluZSBsYWJlbC5cbiAgICAgICAgICAgICAgICBjb25zdCBzaGFwaW5nID0gc2hhcGVUZXh0KHRleHQsIGdseXBoTWFwLCBnbHlwaFBvc2l0aW9ucywgaW1hZ2VQb3NpdGlvbnMsIGZvbnRzdGFjaywgbWF4V2lkdGgsIGxpbmVIZWlnaHQsIHRleHRBbmNob3IsIHRleHRKdXN0aWZ5LCBzcGFjaW5nSWZBbGxvd2VkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dE9mZnNldCwgV3JpdGluZ01vZGUuaG9yaXpvbnRhbCwgZmFsc2UsIHN5bWJvbFBsYWNlbWVudCwgbGF5b3V0VGV4dFNpemUsIGxheW91dFRleHRTaXplVGhpc1pvb20pO1xuICAgICAgICAgICAgICAgIGlmIChzaGFwaW5nKSBzaGFwZWRUZXh0T3JpZW50YXRpb25zLmhvcml6b250YWxbdGV4dEp1c3RpZnldID0gc2hhcGluZztcblxuICAgICAgICAgICAgICAgIC8vIFZlcnRpY2FsIHBvaW50IGxhYmVsIChpZiBhbGxvd1ZlcnRpY2FsUGxhY2VtZW50IGlzIGVuYWJsZWQpLlxuICAgICAgICAgICAgICAgIGFkZFZlcnRpY2FsU2hhcGluZ0ZvclBvaW50TGFiZWxJZk5lZWRlZCgpO1xuXG4gICAgICAgICAgICAgICAgLy8gVmVydGljYWxpemVkIGxpbmUgbGFiZWwuXG4gICAgICAgICAgICAgICAgaWYgKGFsbG93c1ZlcnRpY2FsV3JpdGluZ01vZGUodW5mb3JtYXR0ZWRUZXh0KSAmJiB0ZXh0QWxvbmdMaW5lICYmIGtlZXBVcHJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNoYXBlZFRleHRPcmllbnRhdGlvbnMudmVydGljYWwgPSBzaGFwZVRleHQodGV4dCwgZ2x5cGhNYXAsIGdseXBoUG9zaXRpb25zLCBpbWFnZVBvc2l0aW9ucywgZm9udHN0YWNrLCBtYXhXaWR0aCwgbGluZUhlaWdodCwgdGV4dEFuY2hvciwgdGV4dEp1c3RpZnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2luZ0lmQWxsb3dlZCwgdGV4dE9mZnNldCwgV3JpdGluZ01vZGUudmVydGljYWwsIGZhbHNlLCBzeW1ib2xQbGFjZW1lbnQsIGxheW91dFRleHRTaXplLCBsYXlvdXRUZXh0U2l6ZVRoaXNab29tKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc2hhcGVkSWNvbjtcbiAgICAgICAgbGV0IGlzU0RGSWNvbiA9IGZhbHNlO1xuICAgICAgICBpZiAoZmVhdHVyZS5pY29uICYmIGZlYXR1cmUuaWNvbi5uYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBpbWFnZSA9IGltYWdlTWFwW2ZlYXR1cmUuaWNvbi5uYW1lXTtcbiAgICAgICAgICAgIGlmIChpbWFnZSkge1xuICAgICAgICAgICAgICAgIHNoYXBlZEljb24gPSBzaGFwZUljb24oXG4gICAgICAgICAgICAgICAgICAgIGltYWdlUG9zaXRpb25zW2ZlYXR1cmUuaWNvbi5uYW1lXSxcbiAgICAgICAgICAgICAgICAgICAgbGF5b3V0LmdldCgnaWNvbi1vZmZzZXQnKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSwgY2Fub25pY2FsKSxcbiAgICAgICAgICAgICAgICAgICAgbGF5b3V0LmdldCgnaWNvbi1hbmNob3InKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSwgY2Fub25pY2FsKSk7XG4gICAgICAgICAgICAgICAgaXNTREZJY29uID0gaW1hZ2Uuc2RmO1xuICAgICAgICAgICAgICAgIGlmIChidWNrZXQuc2RmSWNvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBidWNrZXQuc2RmSWNvbnMgPSBpbWFnZS5zZGY7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChidWNrZXQuc2RmSWNvbnMgIT09IGltYWdlLnNkZikge1xuICAgICAgICAgICAgICAgICAgICB3YXJuT25jZSgnU3R5bGUgc2hlZXQgd2FybmluZzogQ2Fubm90IG1peCBTREYgYW5kIG5vbi1TREYgaWNvbnMgaW4gb25lIGJ1ZmZlcicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaW1hZ2UucGl4ZWxSYXRpbyAhPT0gYnVja2V0LnBpeGVsUmF0aW8pIHtcbiAgICAgICAgICAgICAgICAgICAgYnVja2V0Lmljb25zTmVlZExpbmVhciA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsYXlvdXQuZ2V0KCdpY29uLXJvdGF0ZScpLmNvbnN0YW50T3IoMSkgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYnVja2V0Lmljb25zTmVlZExpbmVhciA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2hhcGVkVGV4dCA9IGdldERlZmF1bHRIb3Jpem9udGFsU2hhcGluZyhzaGFwZWRUZXh0T3JpZW50YXRpb25zLmhvcml6b250YWwpIHx8IHNoYXBlZFRleHRPcmllbnRhdGlvbnMudmVydGljYWw7XG4gICAgICAgIGJ1Y2tldC5pY29uc0luVGV4dCA9IHNoYXBlZFRleHQgPyBzaGFwZWRUZXh0Lmljb25zSW5UZXh0IDogZmFsc2U7XG4gICAgICAgIGlmIChzaGFwZWRUZXh0IHx8IHNoYXBlZEljb24pIHtcbiAgICAgICAgICAgIGFkZEZlYXR1cmUoYnVja2V0LCBmZWF0dXJlLCBzaGFwZWRUZXh0T3JpZW50YXRpb25zLCBzaGFwZWRJY29uLCBpbWFnZU1hcCwgc2l6ZXMsIGxheW91dFRleHRTaXplLCBsYXlvdXRJY29uU2l6ZSwgdGV4dE9mZnNldCwgaXNTREZJY29uLCBjYW5vbmljYWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNob3dDb2xsaXNpb25Cb3hlcykge1xuICAgICAgICBidWNrZXQuZ2VuZXJhdGVDb2xsaXNpb25EZWJ1Z0J1ZmZlcnMoKTtcbiAgICB9XG59XG5cbi8vIENob29zZSB0aGUganVzdGlmaWNhdGlvbiB0aGF0IG1hdGNoZXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgVGV4dEFuY2hvclxuZXhwb3J0IGZ1bmN0aW9uIGdldEFuY2hvckp1c3RpZmljYXRpb24oYW5jaG9yOiBUZXh0QW5jaG9yKTogVGV4dEp1c3RpZnkgIHtcbiAgICBzd2l0Y2ggKGFuY2hvcikge1xuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICBjYXNlICd0b3AtcmlnaHQnOlxuICAgIGNhc2UgJ2JvdHRvbS1yaWdodCc6XG4gICAgICAgIHJldHVybiAncmlnaHQnO1xuICAgIGNhc2UgJ2xlZnQnOlxuICAgIGNhc2UgJ3RvcC1sZWZ0JzpcbiAgICBjYXNlICdib3R0b20tbGVmdCc6XG4gICAgICAgIHJldHVybiAnbGVmdCc7XG4gICAgfVxuICAgIHJldHVybiAnY2VudGVyJztcbn1cblxuLyoqXG4gKiBHaXZlbiBhIGZlYXR1cmUgYW5kIGl0cyBzaGFwZWQgdGV4dCBhbmQgaWNvbiBkYXRhLCBhZGQgYSAnc3ltYm9sXG4gKiBpbnN0YW5jZScgZm9yIGVhY2ggX3Bvc3NpYmxlXyBwbGFjZW1lbnQgb2YgdGhlIHN5bWJvbCBmZWF0dXJlLlxuICogKEF0IHJlbmRlciB0aW1lUGxhY2VTeW1ib2xzI3BsYWNlKCkgc2VsZWN0cyB3aGljaCBvZiB0aGVzZSBpbnN0YW5jZXMgdG9cbiAqIHNob3cgb3IgaGlkZSBiYXNlZCBvbiBjb2xsaXNpb25zIHdpdGggc3ltYm9scyBpbiBvdGhlciBsYXllcnMuKVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYWRkRmVhdHVyZShidWNrZXQ6IFN5bWJvbEJ1Y2tldCxcbiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZTogU3ltYm9sRmVhdHVyZSxcbiAgICAgICAgICAgICAgICAgICAgc2hhcGVkVGV4dE9yaWVudGF0aW9uczogYW55LFxuICAgICAgICAgICAgICAgICAgICBzaGFwZWRJY29uOiBQb3NpdGlvbmVkSWNvbiB8IHZvaWQsXG4gICAgICAgICAgICAgICAgICAgIGltYWdlTWFwOiB7W186IHN0cmluZ106IFN0eWxlSW1hZ2V9LFxuICAgICAgICAgICAgICAgICAgICBzaXplczogU2l6ZXMsXG4gICAgICAgICAgICAgICAgICAgIGxheW91dFRleHRTaXplOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgIGxheW91dEljb25TaXplOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgIHRleHRPZmZzZXQ6IFtudW1iZXIsIG51bWJlcl0sXG4gICAgICAgICAgICAgICAgICAgIGlzU0RGSWNvbjogYm9vbGVhbiwgY2Fub25pY2FsOiBDYW5vbmljYWxUaWxlSUQpIHtcbiAgICAvLyBUbyByZWR1Y2UgdGhlIG51bWJlciBvZiBsYWJlbHMgdGhhdCBqdW1wIGFyb3VuZCB3aGVuIHpvb21pbmcgd2UgbmVlZFxuICAgIC8vIHRvIHVzZSBhIHRleHQtc2l6ZSB2YWx1ZSB0aGF0IGlzIHRoZSBzYW1lIGZvciBhbGwgem9vbSBsZXZlbHMuXG4gICAgLy8gYnVja2V0IGNhbGN1bGF0ZXMgdGV4dC1zaXplIGF0IGEgaGlnaCB6b29tIGxldmVsIHNvIHRoYXQgYWxsIHRpbGVzIGNhblxuICAgIC8vIHVzZSB0aGUgc2FtZSB2YWx1ZSB3aGVuIGNhbGN1bGF0aW5nIGFuY2hvciBwb3NpdGlvbnMuXG4gICAgbGV0IHRleHRNYXhTaXplID0gc2l6ZXMudGV4dE1heFNpemUuZXZhbHVhdGUoZmVhdHVyZSwge30pO1xuICAgIGlmICh0ZXh0TWF4U2l6ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRleHRNYXhTaXplID0gbGF5b3V0VGV4dFNpemU7XG4gICAgfVxuICAgIGNvbnN0IGxheW91dCA9IGJ1Y2tldC5sYXllcnNbMF0ubGF5b3V0O1xuICAgIGNvbnN0IGljb25PZmZzZXQgPSBsYXlvdXQuZ2V0KCdpY29uLW9mZnNldCcpLmV2YWx1YXRlKGZlYXR1cmUsIHt9LCBjYW5vbmljYWwpO1xuICAgIGNvbnN0IGRlZmF1bHRIb3Jpem9udGFsU2hhcGluZyA9IGdldERlZmF1bHRIb3Jpem9udGFsU2hhcGluZyhzaGFwZWRUZXh0T3JpZW50YXRpb25zLmhvcml6b250YWwpO1xuICAgIGNvbnN0IGdseXBoU2l6ZSA9IDI0LFxuICAgICAgICBmb250U2NhbGUgPSBsYXlvdXRUZXh0U2l6ZSAvIGdseXBoU2l6ZSxcbiAgICAgICAgdGV4dEJveFNjYWxlID0gYnVja2V0LnRpbGVQaXhlbFJhdGlvICogZm9udFNjYWxlLFxuICAgICAgICB0ZXh0TWF4Qm94U2NhbGUgPSBidWNrZXQudGlsZVBpeGVsUmF0aW8gKiB0ZXh0TWF4U2l6ZSAvIGdseXBoU2l6ZSxcbiAgICAgICAgaWNvbkJveFNjYWxlID0gYnVja2V0LnRpbGVQaXhlbFJhdGlvICogbGF5b3V0SWNvblNpemUsXG4gICAgICAgIHN5bWJvbE1pbkRpc3RhbmNlID0gYnVja2V0LnRpbGVQaXhlbFJhdGlvICogbGF5b3V0LmdldCgnc3ltYm9sLXNwYWNpbmcnKSxcbiAgICAgICAgdGV4dFBhZGRpbmcgPSBsYXlvdXQuZ2V0KCd0ZXh0LXBhZGRpbmcnKSAqIGJ1Y2tldC50aWxlUGl4ZWxSYXRpbyxcbiAgICAgICAgaWNvblBhZGRpbmcgPSBsYXlvdXQuZ2V0KCdpY29uLXBhZGRpbmcnKSAqIGJ1Y2tldC50aWxlUGl4ZWxSYXRpbyxcbiAgICAgICAgdGV4dE1heEFuZ2xlID0gbGF5b3V0LmdldCgndGV4dC1tYXgtYW5nbGUnKSAvIDE4MCAqIE1hdGguUEksXG4gICAgICAgIHRleHRBbG9uZ0xpbmUgPSBsYXlvdXQuZ2V0KCd0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCcpID09PSAnbWFwJyAmJiBsYXlvdXQuZ2V0KCdzeW1ib2wtcGxhY2VtZW50JykgIT09ICdwb2ludCcsXG4gICAgICAgIGljb25BbG9uZ0xpbmUgPSBsYXlvdXQuZ2V0KCdpY29uLXJvdGF0aW9uLWFsaWdubWVudCcpID09PSAnbWFwJyAmJiBsYXlvdXQuZ2V0KCdzeW1ib2wtcGxhY2VtZW50JykgIT09ICdwb2ludCcsXG4gICAgICAgIHN5bWJvbFBsYWNlbWVudCA9IGxheW91dC5nZXQoJ3N5bWJvbC1wbGFjZW1lbnQnKSxcbiAgICAgICAgdGV4dFJlcGVhdERpc3RhbmNlID0gc3ltYm9sTWluRGlzdGFuY2UgLyAyO1xuXG4gICAgY29uc3QgaWNvblRleHRGaXQgPSBsYXlvdXQuZ2V0KCdpY29uLXRleHQtZml0Jyk7XG4gICAgbGV0IHZlcnRpY2FsbHlTaGFwZWRJY29uO1xuICAgIC8vIEFkanVzdCBzaGFwZWQgaWNvbiBzaXplIHdoZW4gaWNvbi10ZXh0LWZpdCBpcyB1c2VkLlxuICAgIGlmIChzaGFwZWRJY29uICYmIGljb25UZXh0Rml0ICE9PSAnbm9uZScpIHtcbiAgICAgICAgaWYgKGJ1Y2tldC5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50ICYmIHNoYXBlZFRleHRPcmllbnRhdGlvbnMudmVydGljYWwpIHtcbiAgICAgICAgICAgIHZlcnRpY2FsbHlTaGFwZWRJY29uID0gZml0SWNvblRvVGV4dChzaGFwZWRJY29uLCBzaGFwZWRUZXh0T3JpZW50YXRpb25zLnZlcnRpY2FsLCBpY29uVGV4dEZpdCxcbiAgICAgICAgICAgICAgICBsYXlvdXQuZ2V0KCdpY29uLXRleHQtZml0LXBhZGRpbmcnKSwgaWNvbk9mZnNldCwgZm9udFNjYWxlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVmYXVsdEhvcml6b250YWxTaGFwaW5nKSB7XG4gICAgICAgICAgICBzaGFwZWRJY29uID0gZml0SWNvblRvVGV4dChzaGFwZWRJY29uLCBkZWZhdWx0SG9yaXpvbnRhbFNoYXBpbmcsIGljb25UZXh0Rml0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0LmdldCgnaWNvbi10ZXh0LWZpdC1wYWRkaW5nJyksIGljb25PZmZzZXQsIGZvbnRTY2FsZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBhZGRTeW1ib2xBdEFuY2hvciA9IChsaW5lLCBhbmNob3IpID0+IHtcbiAgICAgICAgaWYgKGFuY2hvci54IDwgMCB8fCBhbmNob3IueCA+PSBFWFRFTlQgfHwgYW5jaG9yLnkgPCAwIHx8IGFuY2hvci55ID49IEVYVEVOVCkge1xuICAgICAgICAgICAgLy8gU3ltYm9sIGxheWVycyBhcmUgZHJhd24gYWNyb3NzIHRpbGUgYm91bmRhcmllcywgV2UgZmlsdGVyIG91dCBzeW1ib2xzXG4gICAgICAgICAgICAvLyBvdXRzaWRlIG91ciB0aWxlIGJvdW5kYXJpZXMgKHdoaWNoIG1heSBiZSBpbmNsdWRlZCBpbiB2ZWN0b3IgdGlsZSBidWZmZXJzKVxuICAgICAgICAgICAgLy8gdG8gcHJldmVudCBkb3VibGUtZHJhd2luZyBzeW1ib2xzLlxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgYWRkU3ltYm9sKGJ1Y2tldCwgYW5jaG9yLCBsaW5lLCBzaGFwZWRUZXh0T3JpZW50YXRpb25zLCBzaGFwZWRJY29uLCBpbWFnZU1hcCwgdmVydGljYWxseVNoYXBlZEljb24sIGJ1Y2tldC5sYXllcnNbMF0sXG4gICAgICAgICAgICBidWNrZXQuY29sbGlzaW9uQm94QXJyYXksIGZlYXR1cmUuaW5kZXgsIGZlYXR1cmUuc291cmNlTGF5ZXJJbmRleCwgYnVja2V0LmluZGV4LFxuICAgICAgICAgICAgdGV4dEJveFNjYWxlLCB0ZXh0UGFkZGluZywgdGV4dEFsb25nTGluZSwgdGV4dE9mZnNldCxcbiAgICAgICAgICAgIGljb25Cb3hTY2FsZSwgaWNvblBhZGRpbmcsIGljb25BbG9uZ0xpbmUsIGljb25PZmZzZXQsXG4gICAgICAgICAgICBmZWF0dXJlLCBzaXplcywgaXNTREZJY29uLCBjYW5vbmljYWwsIGxheW91dFRleHRTaXplKTtcbiAgICB9O1xuXG4gICAgaWYgKHN5bWJvbFBsYWNlbWVudCA9PT0gJ2xpbmUnKSB7XG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBjbGlwTGluZShmZWF0dXJlLmdlb21ldHJ5LCAwLCAwLCBFWFRFTlQsIEVYVEVOVCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGFuY2hvcnMgPSBnZXRBbmNob3JzKFxuICAgICAgICAgICAgICAgIGxpbmUsXG4gICAgICAgICAgICAgICAgc3ltYm9sTWluRGlzdGFuY2UsXG4gICAgICAgICAgICAgICAgdGV4dE1heEFuZ2xlLFxuICAgICAgICAgICAgICAgIHNoYXBlZFRleHRPcmllbnRhdGlvbnMudmVydGljYWwgfHwgZGVmYXVsdEhvcml6b250YWxTaGFwaW5nLFxuICAgICAgICAgICAgICAgIHNoYXBlZEljb24sXG4gICAgICAgICAgICAgICAgZ2x5cGhTaXplLFxuICAgICAgICAgICAgICAgIHRleHRNYXhCb3hTY2FsZSxcbiAgICAgICAgICAgICAgICBidWNrZXQub3ZlcnNjYWxpbmcsXG4gICAgICAgICAgICAgICAgRVhURU5UXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZm9yIChjb25zdCBhbmNob3Igb2YgYW5jaG9ycykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNoYXBlZFRleHQgPSBkZWZhdWx0SG9yaXpvbnRhbFNoYXBpbmc7XG4gICAgICAgICAgICAgICAgaWYgKCFzaGFwZWRUZXh0IHx8ICFhbmNob3JJc1Rvb0Nsb3NlKGJ1Y2tldCwgc2hhcGVkVGV4dC50ZXh0LCB0ZXh0UmVwZWF0RGlzdGFuY2UsIGFuY2hvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkU3ltYm9sQXRBbmNob3IobGluZSwgYW5jaG9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN5bWJvbFBsYWNlbWVudCA9PT0gJ2xpbmUtY2VudGVyJykge1xuICAgICAgICAvLyBObyBjbGlwcGluZywgbXVsdGlwbGUgbGluZXMgcGVyIGZlYXR1cmUgYXJlIGFsbG93ZWRcbiAgICAgICAgLy8gXCJsaW5lc1wiIHdpdGggb25seSBvbmUgcG9pbnQgYXJlIGlnbm9yZWQgYXMgaW4gY2xpcExpbmVzXG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBmZWF0dXJlLmdlb21ldHJ5KSB7XG4gICAgICAgICAgICBpZiAobGluZS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYW5jaG9yID0gZ2V0Q2VudGVyQW5jaG9yKFxuICAgICAgICAgICAgICAgICAgICBsaW5lLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0TWF4QW5nbGUsXG4gICAgICAgICAgICAgICAgICAgIHNoYXBlZFRleHRPcmllbnRhdGlvbnMudmVydGljYWwgfHwgZGVmYXVsdEhvcml6b250YWxTaGFwaW5nLFxuICAgICAgICAgICAgICAgICAgICBzaGFwZWRJY29uLFxuICAgICAgICAgICAgICAgICAgICBnbHlwaFNpemUsXG4gICAgICAgICAgICAgICAgICAgIHRleHRNYXhCb3hTY2FsZSk7XG4gICAgICAgICAgICAgICAgaWYgKGFuY2hvcikge1xuICAgICAgICAgICAgICAgICAgICBhZGRTeW1ib2xBdEFuY2hvcihsaW5lLCBhbmNob3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZmVhdHVyZS50eXBlID09PSAnUG9seWdvbicpIHtcbiAgICAgICAgZm9yIChjb25zdCBwb2x5Z29uIG9mIGNsYXNzaWZ5UmluZ3MoZmVhdHVyZS5nZW9tZXRyeSwgMCkpIHtcbiAgICAgICAgICAgIC8vIDE2IGhlcmUgcmVwcmVzZW50cyAyIHBpeGVsc1xuICAgICAgICAgICAgY29uc3QgcG9pID0gZmluZFBvbGVPZkluYWNjZXNzaWJpbGl0eShwb2x5Z29uLCAxNik7XG4gICAgICAgICAgICBhZGRTeW1ib2xBdEFuY2hvcihwb2x5Z29uWzBdLCBuZXcgQW5jaG9yKHBvaS54LCBwb2kueSwgMCkpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChmZWF0dXJlLnR5cGUgPT09ICdMaW5lU3RyaW5nJykge1xuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvMzgwOFxuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgZmVhdHVyZS5nZW9tZXRyeSkge1xuICAgICAgICAgICAgYWRkU3ltYm9sQXRBbmNob3IobGluZSwgbmV3IEFuY2hvcihsaW5lWzBdLngsIGxpbmVbMF0ueSwgMCkpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChmZWF0dXJlLnR5cGUgPT09ICdQb2ludCcpIHtcbiAgICAgICAgZm9yIChjb25zdCBwb2ludHMgb2YgZmVhdHVyZS5nZW9tZXRyeSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBwb2ludCBvZiBwb2ludHMpIHtcbiAgICAgICAgICAgICAgICBhZGRTeW1ib2xBdEFuY2hvcihbcG9pbnRdLCBuZXcgQW5jaG9yKHBvaW50LngsIHBvaW50LnksIDApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuY29uc3QgTUFYX0dMWVBIX0lDT05fU0laRSA9IDI1NTtcbmNvbnN0IE1BWF9QQUNLRURfU0laRSA9IE1BWF9HTFlQSF9JQ09OX1NJWkUgKiBTSVpFX1BBQ0tfRkFDVE9SO1xuZXhwb3J0IHtNQVhfUEFDS0VEX1NJWkV9O1xuXG5mdW5jdGlvbiBhZGRUZXh0VmVydGljZXMoYnVja2V0OiBTeW1ib2xCdWNrZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yOiBQb2ludCxcbiAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZWRUZXh0OiBTaGFwaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlTWFwOiB7W186IHN0cmluZ106IFN0eWxlSW1hZ2V9LFxuICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyOiBTeW1ib2xTdHlsZUxheWVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbG9uZ0xpbmU6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZTogU3ltYm9sRmVhdHVyZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0T2Zmc2V0OiBbbnVtYmVyLCBudW1iZXJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVBcnJheToge2xpbmVTdGFydEluZGV4OiBudW1iZXIsIGxpbmVMZW5ndGg6IG51bWJlcn0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGluZ01vZGU6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnRUeXBlczogQXJyYXk8J3ZlcnRpY2FsJyB8ICdjZW50ZXInIHwgJ2xlZnQnIHwgJ3JpZ2h0Jz4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VkVGV4dFN5bWJvbEluZGljZXM6IHtbXzogc3RyaW5nXTogbnVtYmVyfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWRJY29uSW5kZXg6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICBzaXplczogU2l6ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgY2Fub25pY2FsOiBDYW5vbmljYWxUaWxlSUQpIHtcbiAgICBjb25zdCBnbHlwaFF1YWRzID0gZ2V0R2x5cGhRdWFkcyhhbmNob3IsIHNoYXBlZFRleHQsIHRleHRPZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXIsIHRleHRBbG9uZ0xpbmUsIGZlYXR1cmUsIGltYWdlTWFwLCBidWNrZXQuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCk7XG5cbiAgICBjb25zdCBzaXplRGF0YSA9IGJ1Y2tldC50ZXh0U2l6ZURhdGE7XG4gICAgbGV0IHRleHRTaXplRGF0YSA9IG51bGw7XG5cbiAgICBpZiAoc2l6ZURhdGEua2luZCA9PT0gJ3NvdXJjZScpIHtcbiAgICAgICAgdGV4dFNpemVEYXRhID0gW1xuICAgICAgICAgICAgU0laRV9QQUNLX0ZBQ1RPUiAqIGxheWVyLmxheW91dC5nZXQoJ3RleHQtc2l6ZScpLmV2YWx1YXRlKGZlYXR1cmUsIHt9KVxuICAgICAgICBdO1xuICAgICAgICBpZiAodGV4dFNpemVEYXRhWzBdID4gTUFYX1BBQ0tFRF9TSVpFKSB7XG4gICAgICAgICAgICB3YXJuT25jZShgJHtidWNrZXQubGF5ZXJJZHNbMF19OiBWYWx1ZSBmb3IgXCJ0ZXh0LXNpemVcIiBpcyA+PSAke01BWF9HTFlQSF9JQ09OX1NJWkV9LiBSZWR1Y2UgeW91ciBcInRleHQtc2l6ZVwiLmApO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChzaXplRGF0YS5raW5kID09PSAnY29tcG9zaXRlJykge1xuICAgICAgICB0ZXh0U2l6ZURhdGEgPSBbXG4gICAgICAgICAgICBTSVpFX1BBQ0tfRkFDVE9SICogc2l6ZXMuY29tcG9zaXRlVGV4dFNpemVzWzBdLmV2YWx1YXRlKGZlYXR1cmUsIHt9LCBjYW5vbmljYWwpLFxuICAgICAgICAgICAgU0laRV9QQUNLX0ZBQ1RPUiAqIHNpemVzLmNvbXBvc2l0ZVRleHRTaXplc1sxXS5ldmFsdWF0ZShmZWF0dXJlLCB7fSwgY2Fub25pY2FsKVxuICAgICAgICBdO1xuICAgICAgICBpZiAodGV4dFNpemVEYXRhWzBdID4gTUFYX1BBQ0tFRF9TSVpFIHx8IHRleHRTaXplRGF0YVsxXSA+IE1BWF9QQUNLRURfU0laRSkge1xuICAgICAgICAgICAgd2Fybk9uY2UoYCR7YnVja2V0LmxheWVySWRzWzBdfTogVmFsdWUgZm9yIFwidGV4dC1zaXplXCIgaXMgPj0gJHtNQVhfR0xZUEhfSUNPTl9TSVpFfS4gUmVkdWNlIHlvdXIgXCJ0ZXh0LXNpemVcIi5gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGJ1Y2tldC5hZGRTeW1ib2xzKFxuICAgICAgICBidWNrZXQudGV4dCxcbiAgICAgICAgZ2x5cGhRdWFkcyxcbiAgICAgICAgdGV4dFNpemVEYXRhLFxuICAgICAgICB0ZXh0T2Zmc2V0LFxuICAgICAgICB0ZXh0QWxvbmdMaW5lLFxuICAgICAgICBmZWF0dXJlLFxuICAgICAgICB3cml0aW5nTW9kZSxcbiAgICAgICAgYW5jaG9yLFxuICAgICAgICBsaW5lQXJyYXkubGluZVN0YXJ0SW5kZXgsXG4gICAgICAgIGxpbmVBcnJheS5saW5lTGVuZ3RoLFxuICAgICAgICBwbGFjZWRJY29uSW5kZXgsXG4gICAgICAgIGNhbm9uaWNhbCk7XG5cbiAgICAvLyBUaGUgcGxhY2VkU3ltYm9sQXJyYXkgaXMgdXNlZCBhdCByZW5kZXIgdGltZSBpbiBkcmF3VGlsZVN5bWJvbHNcbiAgICAvLyBUaGVzZSBpbmRpY2VzIGFsbG93IGFjY2VzcyB0byB0aGUgYXJyYXkgYXQgY29sbGlzaW9uIGRldGVjdGlvbiB0aW1lXG4gICAgZm9yIChjb25zdCBwbGFjZW1lbnRUeXBlIG9mIHBsYWNlbWVudFR5cGVzKSB7XG4gICAgICAgIHBsYWNlZFRleHRTeW1ib2xJbmRpY2VzW3BsYWNlbWVudFR5cGVdID0gYnVja2V0LnRleHQucGxhY2VkU3ltYm9sQXJyYXkubGVuZ3RoIC0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2x5cGhRdWFkcy5sZW5ndGggKiA0O1xufVxuXG5mdW5jdGlvbiBnZXREZWZhdWx0SG9yaXpvbnRhbFNoYXBpbmcoaG9yaXpvbnRhbFNoYXBpbmc6IHtbXzogVGV4dEp1c3RpZnldOiBTaGFwaW5nfSk6IFNoYXBpbmcgfCBudWxsIHtcbiAgICAvLyBXZSBkb24ndCBjYXJlIHdoaWNoIHNoYXBpbmcgd2UgZ2V0IGJlY2F1c2UgdGhpcyBpcyB1c2VkIGZvciBjb2xsaXNpb24gcHVycG9zZXNcbiAgICAvLyBhbmQgYWxsIHRoZSBqdXN0aWZpY2F0aW9ucyBoYXZlIHRoZSBzYW1lIGNvbGxpc2lvbiBib3hcbiAgICBmb3IgKGNvbnN0IGp1c3RpZmljYXRpb246IGFueSBpbiBob3Jpem9udGFsU2hhcGluZykge1xuICAgICAgICByZXR1cm4gaG9yaXpvbnRhbFNoYXBpbmdbanVzdGlmaWNhdGlvbl07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEFkZCBhIHNpbmdsZSBsYWJlbCAmIGljb24gcGxhY2VtZW50LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGFkZFN5bWJvbChidWNrZXQ6IFN5bWJvbEJ1Y2tldCxcbiAgICAgICAgICAgICAgICAgICBhbmNob3I6IEFuY2hvcixcbiAgICAgICAgICAgICAgICAgICBsaW5lOiBBcnJheTxQb2ludD4sXG4gICAgICAgICAgICAgICAgICAgc2hhcGVkVGV4dE9yaWVudGF0aW9uczogYW55LFxuICAgICAgICAgICAgICAgICAgIHNoYXBlZEljb246IFBvc2l0aW9uZWRJY29uIHwgdm9pZCxcbiAgICAgICAgICAgICAgICAgICBpbWFnZU1hcDoge1tfOiBzdHJpbmddOiBTdHlsZUltYWdlfSxcbiAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbGx5U2hhcGVkSWNvbjogUG9zaXRpb25lZEljb24gfCB2b2lkLFxuICAgICAgICAgICAgICAgICAgIGxheWVyOiBTeW1ib2xTdHlsZUxheWVyLFxuICAgICAgICAgICAgICAgICAgIGNvbGxpc2lvbkJveEFycmF5OiBDb2xsaXNpb25Cb3hBcnJheSxcbiAgICAgICAgICAgICAgICAgICBmZWF0dXJlSW5kZXg6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICBzb3VyY2VMYXllckluZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgYnVja2V0SW5kZXg6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICB0ZXh0Qm94U2NhbGU6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICB0ZXh0UGFkZGluZzogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgIHRleHRBbG9uZ0xpbmU6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgdGV4dE9mZnNldDogW251bWJlciwgbnVtYmVyXSxcbiAgICAgICAgICAgICAgICAgICBpY29uQm94U2NhbGU6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICBpY29uUGFkZGluZzogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgIGljb25BbG9uZ0xpbmU6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgaWNvbk9mZnNldDogW251bWJlciwgbnVtYmVyXSxcbiAgICAgICAgICAgICAgICAgICBmZWF0dXJlOiBTeW1ib2xGZWF0dXJlLFxuICAgICAgICAgICAgICAgICAgIHNpemVzOiBTaXplcyxcbiAgICAgICAgICAgICAgICAgICBpc1NERkljb246IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgY2Fub25pY2FsOiBDYW5vbmljYWxUaWxlSUQsXG4gICAgICAgICAgICAgICAgICAgbGF5b3V0VGV4dFNpemU6IG51bWJlcikge1xuICAgIGNvbnN0IGxpbmVBcnJheSA9IGJ1Y2tldC5hZGRUb0xpbmVWZXJ0ZXhBcnJheShhbmNob3IsIGxpbmUpO1xuXG4gICAgbGV0IHRleHRDb2xsaXNpb25GZWF0dXJlLCBpY29uQ29sbGlzaW9uRmVhdHVyZSwgdmVydGljYWxUZXh0Q29sbGlzaW9uRmVhdHVyZSwgdmVydGljYWxJY29uQ29sbGlzaW9uRmVhdHVyZTtcblxuICAgIGxldCBudW1JY29uVmVydGljZXMgPSAwO1xuICAgIGxldCBudW1WZXJ0aWNhbEljb25WZXJ0aWNlcyA9IDA7XG4gICAgbGV0IG51bUhvcml6b250YWxHbHlwaFZlcnRpY2VzID0gMDtcbiAgICBsZXQgbnVtVmVydGljYWxHbHlwaFZlcnRpY2VzID0gMDtcbiAgICBsZXQgcGxhY2VkSWNvblN5bWJvbEluZGV4ID0gLTE7XG4gICAgbGV0IHZlcnRpY2FsUGxhY2VkSWNvblN5bWJvbEluZGV4ID0gLTE7XG4gICAgY29uc3QgcGxhY2VkVGV4dFN5bWJvbEluZGljZXMgPSB7fTtcbiAgICBsZXQga2V5ID0gbXVybXVyMygnJyk7XG5cbiAgICBsZXQgdGV4dE9mZnNldDAgPSAwO1xuICAgIGxldCB0ZXh0T2Zmc2V0MSA9IDA7XG4gICAgaWYgKGxheWVyLl91bmV2YWx1YXRlZExheW91dC5nZXRWYWx1ZSgndGV4dC1yYWRpYWwtb2Zmc2V0JykgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBbdGV4dE9mZnNldDAsIHRleHRPZmZzZXQxXSA9IChsYXllci5sYXlvdXQuZ2V0KCd0ZXh0LW9mZnNldCcpLmV2YWx1YXRlKGZlYXR1cmUsIHt9LCBjYW5vbmljYWwpLm1hcCh0ID0+IHQgKiBPTkVfRU0pOiBhbnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRleHRPZmZzZXQwID0gbGF5ZXIubGF5b3V0LmdldCgndGV4dC1yYWRpYWwtb2Zmc2V0JykuZXZhbHVhdGUoZmVhdHVyZSwge30sIGNhbm9uaWNhbCkgKiBPTkVfRU07XG4gICAgICAgIHRleHRPZmZzZXQxID0gSU5WQUxJRF9URVhUX09GRlNFVDtcbiAgICB9XG5cbiAgICBpZiAoYnVja2V0LmFsbG93VmVydGljYWxQbGFjZW1lbnQgJiYgc2hhcGVkVGV4dE9yaWVudGF0aW9ucy52ZXJ0aWNhbCkge1xuICAgICAgICBjb25zdCB0ZXh0Um90YXRpb24gPSBsYXllci5sYXlvdXQuZ2V0KCd0ZXh0LXJvdGF0ZScpLmV2YWx1YXRlKGZlYXR1cmUsIHt9LCBjYW5vbmljYWwpO1xuICAgICAgICBjb25zdCB2ZXJ0aWNhbFRleHRSb3RhdGlvbiA9IHRleHRSb3RhdGlvbiArIDkwLjA7XG4gICAgICAgIGNvbnN0IHZlcnRpY2FsU2hhcGluZyA9IHNoYXBlZFRleHRPcmllbnRhdGlvbnMudmVydGljYWw7XG4gICAgICAgIHZlcnRpY2FsVGV4dENvbGxpc2lvbkZlYXR1cmUgPSBuZXcgQ29sbGlzaW9uRmVhdHVyZShjb2xsaXNpb25Cb3hBcnJheSwgYW5jaG9yLCBmZWF0dXJlSW5kZXgsIHNvdXJjZUxheWVySW5kZXgsIGJ1Y2tldEluZGV4LCB2ZXJ0aWNhbFNoYXBpbmcsIHRleHRCb3hTY2FsZSwgdGV4dFBhZGRpbmcsIHRleHRBbG9uZ0xpbmUsIHZlcnRpY2FsVGV4dFJvdGF0aW9uKTtcblxuICAgICAgICBpZiAodmVydGljYWxseVNoYXBlZEljb24pIHtcbiAgICAgICAgICAgIHZlcnRpY2FsSWNvbkNvbGxpc2lvbkZlYXR1cmUgPSBuZXcgQ29sbGlzaW9uRmVhdHVyZShjb2xsaXNpb25Cb3hBcnJheSwgYW5jaG9yLCBmZWF0dXJlSW5kZXgsIHNvdXJjZUxheWVySW5kZXgsIGJ1Y2tldEluZGV4LCB2ZXJ0aWNhbGx5U2hhcGVkSWNvbiwgaWNvbkJveFNjYWxlLCBpY29uUGFkZGluZywgdGV4dEFsb25nTGluZSwgdmVydGljYWxUZXh0Um90YXRpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy9QbGFjZSBpY29uIGZpcnN0LCBzbyB0ZXh0IGNhbiBoYXZlIGEgcmVmZXJlbmNlIHRvIGl0cyBpbmRleCBpbiB0aGUgcGxhY2VkIHN5bWJvbCBhcnJheS5cbiAgICAvL1RleHQgc3ltYm9scyBjYW4gbGF6aWx5IHNoaWZ0IGF0IHJlbmRlci10aW1lIGJlY2F1c2Ugb2YgdmFyaWFibGUgYW5jaG9yIHBsYWNlbWVudC5cbiAgICAvL0lmIHRoZSBzdHlsZSBzcGVjaWZpZXMgYW4gYGljb24tdGV4dC1maXRgIHRoZW4gdGhlIGljb24gd291bGQgaGF2ZSB0byBzaGlmdCBhbG9uZyB3aXRoIGl0LlxuICAgIC8vIEZvciBtb3JlIGluZm8gY2hlY2sgYHVwZGF0ZVZhcmlhYmxlQW5jaG9yc2AgaW4gYGRyYXdfc3ltYm9sLmpzYCAuXG4gICAgaWYgKHNoYXBlZEljb24pIHtcbiAgICAgICAgY29uc3QgaWNvblJvdGF0ZSA9IGxheWVyLmxheW91dC5nZXQoJ2ljb24tcm90YXRlJykuZXZhbHVhdGUoZmVhdHVyZSwge30pO1xuICAgICAgICBjb25zdCBoYXNJY29uVGV4dEZpdCA9IGxheWVyLmxheW91dC5nZXQoJ2ljb24tdGV4dC1maXQnKSAhPT0gJ25vbmUnO1xuICAgICAgICBjb25zdCBpY29uUXVhZHMgPSBnZXRJY29uUXVhZHMoc2hhcGVkSWNvbiwgaWNvblJvdGF0ZSwgaXNTREZJY29uLCBoYXNJY29uVGV4dEZpdCk7XG4gICAgICAgIGNvbnN0IHZlcnRpY2FsSWNvblF1YWRzID0gdmVydGljYWxseVNoYXBlZEljb24gPyBnZXRJY29uUXVhZHModmVydGljYWxseVNoYXBlZEljb24sIGljb25Sb3RhdGUsIGlzU0RGSWNvbiwgaGFzSWNvblRleHRGaXQpIDogdW5kZWZpbmVkO1xuICAgICAgICBpY29uQ29sbGlzaW9uRmVhdHVyZSA9IG5ldyBDb2xsaXNpb25GZWF0dXJlKGNvbGxpc2lvbkJveEFycmF5LCBhbmNob3IsIGZlYXR1cmVJbmRleCwgc291cmNlTGF5ZXJJbmRleCwgYnVja2V0SW5kZXgsIHNoYXBlZEljb24sIGljb25Cb3hTY2FsZSwgaWNvblBhZGRpbmcsIC8qYWxpZ24gYm94ZXMgdG8gbGluZSovZmFsc2UsIGljb25Sb3RhdGUpO1xuXG4gICAgICAgIG51bUljb25WZXJ0aWNlcyA9IGljb25RdWFkcy5sZW5ndGggKiA0O1xuXG4gICAgICAgIGNvbnN0IHNpemVEYXRhID0gYnVja2V0Lmljb25TaXplRGF0YTtcbiAgICAgICAgbGV0IGljb25TaXplRGF0YSA9IG51bGw7XG5cbiAgICAgICAgaWYgKHNpemVEYXRhLmtpbmQgPT09ICdzb3VyY2UnKSB7XG4gICAgICAgICAgICBpY29uU2l6ZURhdGEgPSBbXG4gICAgICAgICAgICAgICAgU0laRV9QQUNLX0ZBQ1RPUiAqIGxheWVyLmxheW91dC5nZXQoJ2ljb24tc2l6ZScpLmV2YWx1YXRlKGZlYXR1cmUsIHt9KVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGlmIChpY29uU2l6ZURhdGFbMF0gPiBNQVhfUEFDS0VEX1NJWkUpIHtcbiAgICAgICAgICAgICAgICB3YXJuT25jZShgJHtidWNrZXQubGF5ZXJJZHNbMF19OiBWYWx1ZSBmb3IgXCJpY29uLXNpemVcIiBpcyA+PSAke01BWF9HTFlQSF9JQ09OX1NJWkV9LiBSZWR1Y2UgeW91ciBcImljb24tc2l6ZVwiLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHNpemVEYXRhLmtpbmQgPT09ICdjb21wb3NpdGUnKSB7XG4gICAgICAgICAgICBpY29uU2l6ZURhdGEgPSBbXG4gICAgICAgICAgICAgICAgU0laRV9QQUNLX0ZBQ1RPUiAqIHNpemVzLmNvbXBvc2l0ZUljb25TaXplc1swXS5ldmFsdWF0ZShmZWF0dXJlLCB7fSwgY2Fub25pY2FsKSxcbiAgICAgICAgICAgICAgICBTSVpFX1BBQ0tfRkFDVE9SICogc2l6ZXMuY29tcG9zaXRlSWNvblNpemVzWzFdLmV2YWx1YXRlKGZlYXR1cmUsIHt9LCBjYW5vbmljYWwpXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgaWYgKGljb25TaXplRGF0YVswXSA+IE1BWF9QQUNLRURfU0laRSB8fCBpY29uU2l6ZURhdGFbMV0gPiBNQVhfUEFDS0VEX1NJWkUpIHtcbiAgICAgICAgICAgICAgICB3YXJuT25jZShgJHtidWNrZXQubGF5ZXJJZHNbMF19OiBWYWx1ZSBmb3IgXCJpY29uLXNpemVcIiBpcyA+PSAke01BWF9HTFlQSF9JQ09OX1NJWkV9LiBSZWR1Y2UgeW91ciBcImljb24tc2l6ZVwiLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnVja2V0LmFkZFN5bWJvbHMoXG4gICAgICAgICAgICBidWNrZXQuaWNvbixcbiAgICAgICAgICAgIGljb25RdWFkcyxcbiAgICAgICAgICAgIGljb25TaXplRGF0YSxcbiAgICAgICAgICAgIGljb25PZmZzZXQsXG4gICAgICAgICAgICBpY29uQWxvbmdMaW5lLFxuICAgICAgICAgICAgZmVhdHVyZSxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgYW5jaG9yLFxuICAgICAgICAgICAgbGluZUFycmF5LmxpbmVTdGFydEluZGV4LFxuICAgICAgICAgICAgbGluZUFycmF5LmxpbmVMZW5ndGgsXG4gICAgICAgICAgICAvLyBUaGUgaWNvbiBpdHNlbGYgZG9lcyBub3QgaGF2ZSBhbiBhc3NvY2lhdGVkIHN5bWJvbCBzaW5jZSB0aGUgdGV4dCBpc250IHBsYWNlZCB5ZXRcbiAgICAgICAgICAgIC0xLCBjYW5vbmljYWwpO1xuXG4gICAgICAgIHBsYWNlZEljb25TeW1ib2xJbmRleCA9IGJ1Y2tldC5pY29uLnBsYWNlZFN5bWJvbEFycmF5Lmxlbmd0aCAtIDE7XG5cbiAgICAgICAgaWYgKHZlcnRpY2FsSWNvblF1YWRzKSB7XG4gICAgICAgICAgICBudW1WZXJ0aWNhbEljb25WZXJ0aWNlcyA9IHZlcnRpY2FsSWNvblF1YWRzLmxlbmd0aCAqIDQ7XG5cbiAgICAgICAgICAgIGJ1Y2tldC5hZGRTeW1ib2xzKFxuICAgICAgICAgICAgICAgIGJ1Y2tldC5pY29uLFxuICAgICAgICAgICAgICAgIHZlcnRpY2FsSWNvblF1YWRzLFxuICAgICAgICAgICAgICAgIGljb25TaXplRGF0YSxcbiAgICAgICAgICAgICAgICBpY29uT2Zmc2V0LFxuICAgICAgICAgICAgICAgIGljb25BbG9uZ0xpbmUsXG4gICAgICAgICAgICAgICAgZmVhdHVyZSxcbiAgICAgICAgICAgICAgICBXcml0aW5nTW9kZS52ZXJ0aWNhbCxcbiAgICAgICAgICAgICAgICBhbmNob3IsXG4gICAgICAgICAgICAgICAgbGluZUFycmF5LmxpbmVTdGFydEluZGV4LFxuICAgICAgICAgICAgICAgIGxpbmVBcnJheS5saW5lTGVuZ3RoLFxuICAgICAgICAgICAgICAgIC8vIFRoZSBpY29uIGl0c2VsZiBkb2VzIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgc3ltYm9sIHNpbmNlIHRoZSB0ZXh0IGlzbnQgcGxhY2VkIHlldFxuICAgICAgICAgICAgICAgIC0xLCBjYW5vbmljYWwpO1xuXG4gICAgICAgICAgICB2ZXJ0aWNhbFBsYWNlZEljb25TeW1ib2xJbmRleCA9IGJ1Y2tldC5pY29uLnBsYWNlZFN5bWJvbEFycmF5Lmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGp1c3RpZmljYXRpb246IGFueSBpbiBzaGFwZWRUZXh0T3JpZW50YXRpb25zLmhvcml6b250YWwpIHtcbiAgICAgICAgY29uc3Qgc2hhcGluZyA9IHNoYXBlZFRleHRPcmllbnRhdGlvbnMuaG9yaXpvbnRhbFtqdXN0aWZpY2F0aW9uXTtcblxuICAgICAgICBpZiAoIXRleHRDb2xsaXNpb25GZWF0dXJlKSB7XG4gICAgICAgICAgICBrZXkgPSBtdXJtdXIzKHNoYXBpbmcudGV4dCk7XG4gICAgICAgICAgICBjb25zdCB0ZXh0Um90YXRlID0gbGF5ZXIubGF5b3V0LmdldCgndGV4dC1yb3RhdGUnKS5ldmFsdWF0ZShmZWF0dXJlLCB7fSwgY2Fub25pY2FsKTtcbiAgICAgICAgICAgIC8vIEFzIGEgY29sbGlzaW9uIGFwcHJveGltYXRpb24sIHdlIGNhbiB1c2UgZWl0aGVyIHRoZSB2ZXJ0aWNhbCBvciBhbnkgb2YgdGhlIGhvcml6b250YWwgdmVyc2lvbnMgb2YgdGhlIGZlYXR1cmVcbiAgICAgICAgICAgIC8vIFdlJ3JlIGNvdW50aW5nIG9uIGFsbCB2ZXJzaW9ucyBoYXZpbmcgc2ltaWxhciBkaW1lbnNpb25zXG4gICAgICAgICAgICB0ZXh0Q29sbGlzaW9uRmVhdHVyZSA9IG5ldyBDb2xsaXNpb25GZWF0dXJlKGNvbGxpc2lvbkJveEFycmF5LCBhbmNob3IsIGZlYXR1cmVJbmRleCwgc291cmNlTGF5ZXJJbmRleCwgYnVja2V0SW5kZXgsIHNoYXBpbmcsIHRleHRCb3hTY2FsZSwgdGV4dFBhZGRpbmcsIHRleHRBbG9uZ0xpbmUsIHRleHRSb3RhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2luZ2xlTGluZSA9IHNoYXBpbmcucG9zaXRpb25lZExpbmVzLmxlbmd0aCA9PT0gMTtcbiAgICAgICAgbnVtSG9yaXpvbnRhbEdseXBoVmVydGljZXMgKz0gYWRkVGV4dFZlcnRpY2VzKFxuICAgICAgICAgICAgYnVja2V0LCBhbmNob3IsIHNoYXBpbmcsIGltYWdlTWFwLCBsYXllciwgdGV4dEFsb25nTGluZSwgZmVhdHVyZSwgdGV4dE9mZnNldCwgbGluZUFycmF5LFxuICAgICAgICAgICAgc2hhcGVkVGV4dE9yaWVudGF0aW9ucy52ZXJ0aWNhbCA/IFdyaXRpbmdNb2RlLmhvcml6b250YWwgOiBXcml0aW5nTW9kZS5ob3Jpem9udGFsT25seSxcbiAgICAgICAgICAgIHNpbmdsZUxpbmUgPyAoT2JqZWN0LmtleXMoc2hhcGVkVGV4dE9yaWVudGF0aW9ucy5ob3Jpem9udGFsKTogYW55KSA6IFtqdXN0aWZpY2F0aW9uXSxcbiAgICAgICAgICAgIHBsYWNlZFRleHRTeW1ib2xJbmRpY2VzLCBwbGFjZWRJY29uU3ltYm9sSW5kZXgsIHNpemVzLCBjYW5vbmljYWwpO1xuXG4gICAgICAgIGlmIChzaW5nbGVMaW5lKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaGFwZWRUZXh0T3JpZW50YXRpb25zLnZlcnRpY2FsKSB7XG4gICAgICAgIG51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcyArPSBhZGRUZXh0VmVydGljZXMoXG4gICAgICAgICAgICBidWNrZXQsIGFuY2hvciwgc2hhcGVkVGV4dE9yaWVudGF0aW9ucy52ZXJ0aWNhbCwgaW1hZ2VNYXAsIGxheWVyLCB0ZXh0QWxvbmdMaW5lLCBmZWF0dXJlLFxuICAgICAgICAgICAgdGV4dE9mZnNldCwgbGluZUFycmF5LCBXcml0aW5nTW9kZS52ZXJ0aWNhbCwgWyd2ZXJ0aWNhbCddLCBwbGFjZWRUZXh0U3ltYm9sSW5kaWNlcywgdmVydGljYWxQbGFjZWRJY29uU3ltYm9sSW5kZXgsIHNpemVzLCBjYW5vbmljYWwpO1xuICAgIH1cblxuICAgIGNvbnN0IHRleHRCb3hTdGFydEluZGV4ID0gdGV4dENvbGxpc2lvbkZlYXR1cmUgPyB0ZXh0Q29sbGlzaW9uRmVhdHVyZS5ib3hTdGFydEluZGV4IDogYnVja2V0LmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aDtcbiAgICBjb25zdCB0ZXh0Qm94RW5kSW5kZXggPSB0ZXh0Q29sbGlzaW9uRmVhdHVyZSA/IHRleHRDb2xsaXNpb25GZWF0dXJlLmJveEVuZEluZGV4IDogYnVja2V0LmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aDtcblxuICAgIGNvbnN0IHZlcnRpY2FsVGV4dEJveFN0YXJ0SW5kZXggPSB2ZXJ0aWNhbFRleHRDb2xsaXNpb25GZWF0dXJlID8gdmVydGljYWxUZXh0Q29sbGlzaW9uRmVhdHVyZS5ib3hTdGFydEluZGV4IDogYnVja2V0LmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aDtcbiAgICBjb25zdCB2ZXJ0aWNhbFRleHRCb3hFbmRJbmRleCA9IHZlcnRpY2FsVGV4dENvbGxpc2lvbkZlYXR1cmUgPyB2ZXJ0aWNhbFRleHRDb2xsaXNpb25GZWF0dXJlLmJveEVuZEluZGV4IDogYnVja2V0LmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aDtcblxuICAgIGNvbnN0IGljb25Cb3hTdGFydEluZGV4ID0gaWNvbkNvbGxpc2lvbkZlYXR1cmUgPyBpY29uQ29sbGlzaW9uRmVhdHVyZS5ib3hTdGFydEluZGV4IDogYnVja2V0LmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aDtcbiAgICBjb25zdCBpY29uQm94RW5kSW5kZXggPSBpY29uQ29sbGlzaW9uRmVhdHVyZSA/IGljb25Db2xsaXNpb25GZWF0dXJlLmJveEVuZEluZGV4IDogYnVja2V0LmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aDtcblxuICAgIGNvbnN0IHZlcnRpY2FsSWNvbkJveFN0YXJ0SW5kZXggPSB2ZXJ0aWNhbEljb25Db2xsaXNpb25GZWF0dXJlID8gdmVydGljYWxJY29uQ29sbGlzaW9uRmVhdHVyZS5ib3hTdGFydEluZGV4IDogYnVja2V0LmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aDtcbiAgICBjb25zdCB2ZXJ0aWNhbEljb25Cb3hFbmRJbmRleCA9IHZlcnRpY2FsSWNvbkNvbGxpc2lvbkZlYXR1cmUgPyB2ZXJ0aWNhbEljb25Db2xsaXNpb25GZWF0dXJlLmJveEVuZEluZGV4IDogYnVja2V0LmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aDtcblxuICAgIC8vIENoZWNrIGlmIHJ1bnRpbWUgY29sbGlzaW9uIGNpcmNsZXMgc2hvdWxkIGJlIHVzZWQgZm9yIGFueSBvZiB0aGUgY29sbGlzaW9uIGZlYXR1cmVzLlxuICAgIC8vIEl0IGlzIGVub3VnaCB0byBjaG9vc2UgdGhlIHRhbGxlc3QgZmVhdHVyZSBzaGFwZSBhcyBjaXJjbGVzIGFyZSBhbHdheXMgcGxhY2VkIG9uIGEgbGluZS5cbiAgICAvLyBBbGwgbWVhc3VyZW1lbnRzIGFyZSBpbiBnbHlwaCBtZXRyaWNzIGFuZCBsYXRlciBjb252ZXJ0ZWQgaW50byBwaXhlbHMgdXNpbmcgcHJvcGVyIGZvbnQgc2l6ZSBcImxheW91dFRleHRTaXplXCJcbiAgICBsZXQgY29sbGlzaW9uQ2lyY2xlRGlhbWV0ZXIgPSAtMTtcblxuICAgIGNvbnN0IGdldENvbGxpc2lvbkNpcmNsZUhlaWdodCA9IChmZWF0dXJlOiA/Q29sbGlzaW9uRmVhdHVyZSwgcHJldkhlaWdodDogbnVtYmVyKTogbnVtYmVyID0+IHtcbiAgICAgICAgaWYgKGZlYXR1cmUgJiYgZmVhdHVyZS5jaXJjbGVEaWFtZXRlcilcbiAgICAgICAgICAgIHJldHVybiBNYXRoLm1heChmZWF0dXJlLmNpcmNsZURpYW1ldGVyLCBwcmV2SGVpZ2h0KTtcbiAgICAgICAgcmV0dXJuIHByZXZIZWlnaHQ7XG4gICAgfTtcblxuICAgIGNvbGxpc2lvbkNpcmNsZURpYW1ldGVyID0gZ2V0Q29sbGlzaW9uQ2lyY2xlSGVpZ2h0KHRleHRDb2xsaXNpb25GZWF0dXJlLCBjb2xsaXNpb25DaXJjbGVEaWFtZXRlcik7XG4gICAgY29sbGlzaW9uQ2lyY2xlRGlhbWV0ZXIgPSBnZXRDb2xsaXNpb25DaXJjbGVIZWlnaHQodmVydGljYWxUZXh0Q29sbGlzaW9uRmVhdHVyZSwgY29sbGlzaW9uQ2lyY2xlRGlhbWV0ZXIpO1xuICAgIGNvbGxpc2lvbkNpcmNsZURpYW1ldGVyID0gZ2V0Q29sbGlzaW9uQ2lyY2xlSGVpZ2h0KGljb25Db2xsaXNpb25GZWF0dXJlLCBjb2xsaXNpb25DaXJjbGVEaWFtZXRlcik7XG4gICAgY29sbGlzaW9uQ2lyY2xlRGlhbWV0ZXIgPSBnZXRDb2xsaXNpb25DaXJjbGVIZWlnaHQodmVydGljYWxJY29uQ29sbGlzaW9uRmVhdHVyZSwgY29sbGlzaW9uQ2lyY2xlRGlhbWV0ZXIpO1xuICAgIGNvbnN0IHVzZVJ1bnRpbWVDb2xsaXNpb25DaXJjbGVzID0gKGNvbGxpc2lvbkNpcmNsZURpYW1ldGVyID4gLTEpID8gMSA6IDA7XG5cbiAgICAvLyBDb252ZXJ0IGNpcmNsZSBjb2xsaXNpb24gaGVpZ2h0IGludG8gcGl4ZWxzXG4gICAgaWYgKHVzZVJ1bnRpbWVDb2xsaXNpb25DaXJjbGVzKVxuICAgICAgICBjb2xsaXNpb25DaXJjbGVEaWFtZXRlciAqPSBsYXlvdXRUZXh0U2l6ZSAvIE9ORV9FTTtcblxuICAgIGlmIChidWNrZXQuZ2x5cGhPZmZzZXRBcnJheS5sZW5ndGggPj0gU3ltYm9sQnVja2V0Lk1BWF9HTFlQSFMpIHdhcm5PbmNlKFxuICAgICAgICBcIlRvbyBtYW55IGdseXBocyBiZWluZyByZW5kZXJlZCBpbiBhIHRpbGUuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvMjkwN1wiXG4gICAgKTtcblxuICAgIGlmIChmZWF0dXJlLnNvcnRLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBidWNrZXQuYWRkVG9Tb3J0S2V5UmFuZ2VzKGJ1Y2tldC5zeW1ib2xJbnN0YW5jZXMubGVuZ3RoLCBmZWF0dXJlLnNvcnRLZXkpO1xuICAgIH1cblxuICAgIGJ1Y2tldC5zeW1ib2xJbnN0YW5jZXMuZW1wbGFjZUJhY2soXG4gICAgICAgIGFuY2hvci54LFxuICAgICAgICBhbmNob3IueSxcbiAgICAgICAgcGxhY2VkVGV4dFN5bWJvbEluZGljZXMucmlnaHQgPj0gMCA/IHBsYWNlZFRleHRTeW1ib2xJbmRpY2VzLnJpZ2h0IDogLTEsXG4gICAgICAgIHBsYWNlZFRleHRTeW1ib2xJbmRpY2VzLmNlbnRlciA+PSAwID8gcGxhY2VkVGV4dFN5bWJvbEluZGljZXMuY2VudGVyIDogLTEsXG4gICAgICAgIHBsYWNlZFRleHRTeW1ib2xJbmRpY2VzLmxlZnQgPj0gMCA/IHBsYWNlZFRleHRTeW1ib2xJbmRpY2VzLmxlZnQgOiAtMSxcbiAgICAgICAgcGxhY2VkVGV4dFN5bWJvbEluZGljZXMudmVydGljYWwgfHwgLTEsXG4gICAgICAgIHBsYWNlZEljb25TeW1ib2xJbmRleCxcbiAgICAgICAgdmVydGljYWxQbGFjZWRJY29uU3ltYm9sSW5kZXgsXG4gICAgICAgIGtleSxcbiAgICAgICAgdGV4dEJveFN0YXJ0SW5kZXgsXG4gICAgICAgIHRleHRCb3hFbmRJbmRleCxcbiAgICAgICAgdmVydGljYWxUZXh0Qm94U3RhcnRJbmRleCxcbiAgICAgICAgdmVydGljYWxUZXh0Qm94RW5kSW5kZXgsXG4gICAgICAgIGljb25Cb3hTdGFydEluZGV4LFxuICAgICAgICBpY29uQm94RW5kSW5kZXgsXG4gICAgICAgIHZlcnRpY2FsSWNvbkJveFN0YXJ0SW5kZXgsXG4gICAgICAgIHZlcnRpY2FsSWNvbkJveEVuZEluZGV4LFxuICAgICAgICBmZWF0dXJlSW5kZXgsXG4gICAgICAgIG51bUhvcml6b250YWxHbHlwaFZlcnRpY2VzLFxuICAgICAgICBudW1WZXJ0aWNhbEdseXBoVmVydGljZXMsXG4gICAgICAgIG51bUljb25WZXJ0aWNlcyxcbiAgICAgICAgbnVtVmVydGljYWxJY29uVmVydGljZXMsXG4gICAgICAgIHVzZVJ1bnRpbWVDb2xsaXNpb25DaXJjbGVzLFxuICAgICAgICAwLFxuICAgICAgICB0ZXh0Qm94U2NhbGUsXG4gICAgICAgIHRleHRPZmZzZXQwLFxuICAgICAgICB0ZXh0T2Zmc2V0MSxcbiAgICAgICAgY29sbGlzaW9uQ2lyY2xlRGlhbWV0ZXIpO1xufVxuXG5mdW5jdGlvbiBhbmNob3JJc1Rvb0Nsb3NlKGJ1Y2tldDogYW55LCB0ZXh0OiBzdHJpbmcsIHJlcGVhdERpc3RhbmNlOiBudW1iZXIsIGFuY2hvcjogUG9pbnQpIHtcbiAgICBjb25zdCBjb21wYXJlVGV4dCA9IGJ1Y2tldC5jb21wYXJlVGV4dDtcbiAgICBpZiAoISh0ZXh0IGluIGNvbXBhcmVUZXh0KSkge1xuICAgICAgICBjb21wYXJlVGV4dFt0ZXh0XSA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG90aGVyQW5jaG9ycyA9IGNvbXBhcmVUZXh0W3RleHRdO1xuICAgICAgICBmb3IgKGxldCBrID0gb3RoZXJBbmNob3JzLmxlbmd0aCAtIDE7IGsgPj0gMDsgay0tKSB7XG4gICAgICAgICAgICBpZiAoYW5jaG9yLmRpc3Qob3RoZXJBbmNob3JzW2tdKSA8IHJlcGVhdERpc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgaXQncyB3aXRoaW4gcmVwZWF0RGlzdGFuY2Ugb2Ygb25lIGFuY2hvciwgc3RvcCBsb29raW5nXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gSWYgYW5jaG9yIGlzIG5vdCB3aXRoaW4gcmVwZWF0RGlzdGFuY2Ugb2YgYW55IG90aGVyIGFuY2hvciwgYWRkIHRvIGFycmF5XG4gICAgY29tcGFyZVRleHRbdGV4dF0ucHVzaChhbmNob3IpO1xuICAgIHJldHVybiBmYWxzZTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7c3ltYm9sTGF5b3V0QXR0cmlidXRlcyxcbiAgICBjb2xsaXNpb25WZXJ0ZXhBdHRyaWJ1dGVzLFxuICAgIGNvbGxpc2lvbkJveExheW91dCxcbiAgICBkeW5hbWljTGF5b3V0QXR0cmlidXRlc1xufSBmcm9tICcuL3N5bWJvbF9hdHRyaWJ1dGVzJztcblxuaW1wb3J0IHtTeW1ib2xMYXlvdXRBcnJheSxcbiAgICBTeW1ib2xEeW5hbWljTGF5b3V0QXJyYXksXG4gICAgU3ltYm9sT3BhY2l0eUFycmF5LFxuICAgIENvbGxpc2lvbkJveExheW91dEFycmF5LFxuICAgIENvbGxpc2lvblZlcnRleEFycmF5LFxuICAgIFBsYWNlZFN5bWJvbEFycmF5LFxuICAgIFN5bWJvbEluc3RhbmNlQXJyYXksXG4gICAgR2x5cGhPZmZzZXRBcnJheSxcbiAgICBTeW1ib2xMaW5lVmVydGV4QXJyYXlcbn0gZnJvbSAnLi4vYXJyYXlfdHlwZXMnO1xuXG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgU2VnbWVudFZlY3RvciBmcm9tICcuLi9zZWdtZW50JztcbmltcG9ydCB7UHJvZ3JhbUNvbmZpZ3VyYXRpb25TZXR9IGZyb20gJy4uL3Byb2dyYW1fY29uZmlndXJhdGlvbic7XG5pbXBvcnQge1RyaWFuZ2xlSW5kZXhBcnJheSwgTGluZUluZGV4QXJyYXl9IGZyb20gJy4uL2luZGV4X2FycmF5X3R5cGUnO1xuaW1wb3J0IHRyYW5zZm9ybVRleHQgZnJvbSAnLi4vLi4vc3ltYm9sL3RyYW5zZm9ybV90ZXh0JztcbmltcG9ydCBtZXJnZUxpbmVzIGZyb20gJy4uLy4uL3N5bWJvbC9tZXJnZWxpbmVzJztcbmltcG9ydCB7YWxsb3dzVmVydGljYWxXcml0aW5nTW9kZSwgc3RyaW5nQ29udGFpbnNSVExUZXh0fSBmcm9tICcuLi8uLi91dGlsL3NjcmlwdF9kZXRlY3Rpb24nO1xuaW1wb3J0IHtXcml0aW5nTW9kZX0gZnJvbSAnLi4vLi4vc3ltYm9sL3NoYXBpbmcnO1xuaW1wb3J0IGxvYWRHZW9tZXRyeSBmcm9tICcuLi9sb2FkX2dlb21ldHJ5JztcbmltcG9ydCBtdnQgZnJvbSAnQG1hcGJveC92ZWN0b3ItdGlsZSc7XG5jb25zdCB2ZWN0b3JUaWxlRmVhdHVyZVR5cGVzID0gbXZ0LlZlY3RvclRpbGVGZWF0dXJlLnR5cGVzO1xuaW1wb3J0IHt2ZXJ0aWNhbGl6ZWRDaGFyYWN0ZXJNYXB9IGZyb20gJy4uLy4uL3V0aWwvdmVydGljYWxpemVfcHVuY3R1YXRpb24nO1xuaW1wb3J0IEFuY2hvciBmcm9tICcuLi8uLi9zeW1ib2wvYW5jaG9yJztcbmltcG9ydCB7Z2V0U2l6ZURhdGF9IGZyb20gJy4uLy4uL3N5bWJvbC9zeW1ib2xfc2l6ZSc7XG5pbXBvcnQge01BWF9QQUNLRURfU0laRX0gZnJvbSAnLi4vLi4vc3ltYm9sL3N5bWJvbF9sYXlvdXQnO1xuaW1wb3J0IHtyZWdpc3Rlcn0gZnJvbSAnLi4vLi4vdXRpbC93ZWJfd29ya2VyX3RyYW5zZmVyJztcbmltcG9ydCBFdmFsdWF0aW9uUGFyYW1ldGVycyBmcm9tICcuLi8uLi9zdHlsZS9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuaW1wb3J0IEZvcm1hdHRlZCBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvZm9ybWF0dGVkJztcbmltcG9ydCBSZXNvbHZlZEltYWdlIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5pbXBvcnQge3BsdWdpbiBhcyBnbG9iYWxSVExUZXh0UGx1Z2luLCBnZXRSVExUZXh0UGx1Z2luU3RhdHVzfSBmcm9tICcuLi8uLi9zb3VyY2UvcnRsX3RleHRfcGx1Z2luJztcbmltcG9ydCB7bWF0NH0gZnJvbSAnZ2wtbWF0cml4JztcblxuaW1wb3J0IHR5cGUge0Nhbm9uaWNhbFRpbGVJRH0gZnJvbSAnLi4vLi4vc291cmNlL3RpbGVfaWQnO1xuaW1wb3J0IHR5cGUge1xuICAgIEJ1Y2tldCxcbiAgICBCdWNrZXRQYXJhbWV0ZXJzLFxuICAgIEluZGV4ZWRGZWF0dXJlLFxuICAgIFBvcHVsYXRlUGFyYW1ldGVyc1xufSBmcm9tICcuLi9idWNrZXQnO1xuaW1wb3J0IHR5cGUge0NvbGxpc2lvbkJveEFycmF5LCBDb2xsaXNpb25Cb3gsIFN5bWJvbEluc3RhbmNlfSBmcm9tICcuLi9hcnJheV90eXBlcyc7XG5pbXBvcnQgdHlwZSB7U3RydWN0QXJyYXksIFN0cnVjdEFycmF5TWVtYmVyfSBmcm9tICcuLi8uLi91dGlsL3N0cnVjdF9hcnJheSc7XG5pbXBvcnQgU3ltYm9sU3R5bGVMYXllciBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZV9sYXllci9zeW1ib2xfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi8uLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIEluZGV4QnVmZmVyIGZyb20gJy4uLy4uL2dsL2luZGV4X2J1ZmZlcic7XG5pbXBvcnQgdHlwZSBWZXJ0ZXhCdWZmZXIgZnJvbSAnLi4vLi4vZ2wvdmVydGV4X2J1ZmZlcic7XG5pbXBvcnQgdHlwZSB7U3ltYm9sUXVhZH0gZnJvbSAnLi4vLi4vc3ltYm9sL3F1YWRzJztcbmltcG9ydCB0eXBlIHtTaXplRGF0YX0gZnJvbSAnLi4vLi4vc3ltYm9sL3N5bWJvbF9zaXplJztcbmltcG9ydCB0eXBlIHtGZWF0dXJlU3RhdGVzfSBmcm9tICcuLi8uLi9zb3VyY2Uvc291cmNlX3N0YXRlJztcbmltcG9ydCB0eXBlIHtJbWFnZVBvc2l0aW9ufSBmcm9tICcuLi8uLi9yZW5kZXIvaW1hZ2VfYXRsYXMnO1xuXG5leHBvcnQgdHlwZSBTaW5nbGVDb2xsaXNpb25Cb3ggPSB7XG4gICAgeDE6IG51bWJlcjtcbiAgICB5MTogbnVtYmVyO1xuICAgIHgyOiBudW1iZXI7XG4gICAgeTI6IG51bWJlcjtcbiAgICBhbmNob3JQb2ludFg6IG51bWJlcjtcbiAgICBhbmNob3JQb2ludFk6IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIENvbGxpc2lvbkFycmF5cyA9IHtcbiAgICB0ZXh0Qm94PzogU2luZ2xlQ29sbGlzaW9uQm94O1xuICAgIHZlcnRpY2FsVGV4dEJveD86IFNpbmdsZUNvbGxpc2lvbkJveDtcbiAgICBpY29uQm94PzogU2luZ2xlQ29sbGlzaW9uQm94O1xuICAgIHZlcnRpY2FsSWNvbkJveD86IFNpbmdsZUNvbGxpc2lvbkJveDtcbiAgICB0ZXh0RmVhdHVyZUluZGV4PzogbnVtYmVyO1xuICAgIHZlcnRpY2FsVGV4dEZlYXR1cmVJbmRleD86IG51bWJlcjtcbiAgICBpY29uRmVhdHVyZUluZGV4PzogbnVtYmVyO1xuICAgIHZlcnRpY2FsSWNvbkZlYXR1cmVJbmRleD86IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIFN5bWJvbEZlYXR1cmUgPSB7fFxuICAgIHNvcnRLZXk6IG51bWJlciB8IHZvaWQsXG4gICAgdGV4dDogRm9ybWF0dGVkIHwgdm9pZCxcbiAgICBpY29uOiA/UmVzb2x2ZWRJbWFnZSxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIHNvdXJjZUxheWVySW5kZXg6IG51bWJlcixcbiAgICBnZW9tZXRyeTogQXJyYXk8QXJyYXk8UG9pbnQ+PixcbiAgICBwcm9wZXJ0aWVzOiBPYmplY3QsXG4gICAgdHlwZTogJ1BvaW50JyB8ICdMaW5lU3RyaW5nJyB8ICdQb2x5Z29uJyxcbiAgICBpZD86IGFueVxufH07XG5cbmV4cG9ydCB0eXBlIFNvcnRLZXlSYW5nZSA9IHtcbiAgICBzb3J0S2V5OiBudW1iZXIsXG4gICAgc3ltYm9sSW5zdGFuY2VTdGFydDogbnVtYmVyLFxuICAgIHN5bWJvbEluc3RhbmNlRW5kOiBudW1iZXJcbn07XG5cbi8vIE9wYWNpdHkgYXJyYXlzIGFyZSBmcmVxdWVudGx5IHVwZGF0ZWQgYnV0IGRvbid0IGNvbnRhaW4gYSBsb3Qgb2YgaW5mb3JtYXRpb24sIHNvIHdlIHBhY2sgdGhlbVxuLy8gdGlnaHQuIEVhY2ggVWludDMyIGlzIGFjdHVhbGx5IGZvdXIgZHVwbGljYXRlIFVpbnQ4cyBmb3IgdGhlIGZvdXIgY29ybmVycyBvZiBhIGdseXBoXG4vLyA3IGJpdHMgYXJlIGZvciB0aGUgY3VycmVudCBvcGFjaXR5LCBhbmQgdGhlIGxvd2VzdCBiaXQgaXMgdGhlIHRhcmdldCBvcGFjaXR5XG5cbi8vIGFjdHVhbGx5IGRlZmluZWQgaW4gc3ltYm9sX2F0dHJpYnV0ZXMuanNcbi8vIGNvbnN0IHBsYWNlbWVudE9wYWNpdHlBdHRyaWJ1dGVzID0gW1xuLy8gICAgIHsgbmFtZTogJ2FfZmFkZV9vcGFjaXR5JywgY29tcG9uZW50czogMSwgdHlwZTogJ1VpbnQzMicgfVxuLy8gXTtcbmNvbnN0IHNoYWRlck9wYWNpdHlBdHRyaWJ1dGVzID0gW1xuICAgIHtuYW1lOiAnYV9mYWRlX29wYWNpdHknLCBjb21wb25lbnRzOiAxLCB0eXBlOiAnVWludDgnLCBvZmZzZXQ6IDB9XG5dO1xuXG5mdW5jdGlvbiBhZGRWZXJ0ZXgoYXJyYXksIGFuY2hvclgsIGFuY2hvclksIG94LCBveSwgdHgsIHR5LCBzaXplVmVydGV4LCBpc1NERjogYm9vbGVhbiwgcGl4ZWxPZmZzZXRYLCBwaXhlbE9mZnNldFksIG1pbkZvbnRTY2FsZVgsIG1pbkZvbnRTY2FsZVkpIHtcbiAgICBjb25zdCBhU2l6ZVggPSBzaXplVmVydGV4ID8gTWF0aC5taW4oTUFYX1BBQ0tFRF9TSVpFLCBNYXRoLnJvdW5kKHNpemVWZXJ0ZXhbMF0pKSA6IDA7XG4gICAgY29uc3QgYVNpemVZID0gc2l6ZVZlcnRleCA/IE1hdGgubWluKE1BWF9QQUNLRURfU0laRSwgTWF0aC5yb3VuZChzaXplVmVydGV4WzFdKSkgOiAwO1xuICAgIGFycmF5LmVtcGxhY2VCYWNrKFxuICAgICAgICAvLyBhX3Bvc19vZmZzZXRcbiAgICAgICAgYW5jaG9yWCxcbiAgICAgICAgYW5jaG9yWSxcbiAgICAgICAgTWF0aC5yb3VuZChveCAqIDMyKSxcbiAgICAgICAgTWF0aC5yb3VuZChveSAqIDMyKSxcblxuICAgICAgICAvLyBhX2RhdGFcbiAgICAgICAgdHgsIC8vIHggY29vcmRpbmF0ZSBvZiBzeW1ib2wgb24gZ2x5cGggYXRsYXMgdGV4dHVyZVxuICAgICAgICB0eSwgLy8geSBjb29yZGluYXRlIG9mIHN5bWJvbCBvbiBnbHlwaCBhdGxhcyB0ZXh0dXJlXG4gICAgICAgIChhU2l6ZVggPDwgMSkgKyAoaXNTREYgPyAxIDogMCksXG4gICAgICAgIGFTaXplWSxcbiAgICAgICAgcGl4ZWxPZmZzZXRYICogMTYsXG4gICAgICAgIHBpeGVsT2Zmc2V0WSAqIDE2LFxuICAgICAgICBtaW5Gb250U2NhbGVYICogMjU2LFxuICAgICAgICBtaW5Gb250U2NhbGVZICogMjU2XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gYWRkRHluYW1pY0F0dHJpYnV0ZXMoZHluYW1pY0xheW91dFZlcnRleEFycmF5OiBTdHJ1Y3RBcnJheSwgcDogUG9pbnQsIGFuZ2xlOiBudW1iZXIpIHtcbiAgICBkeW5hbWljTGF5b3V0VmVydGV4QXJyYXkuZW1wbGFjZUJhY2socC54LCBwLnksIGFuZ2xlKTtcbiAgICBkeW5hbWljTGF5b3V0VmVydGV4QXJyYXkuZW1wbGFjZUJhY2socC54LCBwLnksIGFuZ2xlKTtcbiAgICBkeW5hbWljTGF5b3V0VmVydGV4QXJyYXkuZW1wbGFjZUJhY2socC54LCBwLnksIGFuZ2xlKTtcbiAgICBkeW5hbWljTGF5b3V0VmVydGV4QXJyYXkuZW1wbGFjZUJhY2socC54LCBwLnksIGFuZ2xlKTtcbn1cblxuZnVuY3Rpb24gY29udGFpbnNSVExUZXh0KGZvcm1hdHRlZFRleHQ6IEZvcm1hdHRlZCk6IGJvb2xlYW4ge1xuICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBmb3JtYXR0ZWRUZXh0LnNlY3Rpb25zKSB7XG4gICAgICAgIGlmIChzdHJpbmdDb250YWluc1JUTFRleHQoc2VjdGlvbi50ZXh0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgY2xhc3MgU3ltYm9sQnVmZmVycyB7XG4gICAgbGF5b3V0VmVydGV4QXJyYXk6IFN5bWJvbExheW91dEFycmF5O1xuICAgIGxheW91dFZlcnRleEJ1ZmZlcjogVmVydGV4QnVmZmVyO1xuXG4gICAgaW5kZXhBcnJheTogVHJpYW5nbGVJbmRleEFycmF5O1xuICAgIGluZGV4QnVmZmVyOiBJbmRleEJ1ZmZlcjtcblxuICAgIHByb2dyYW1Db25maWd1cmF0aW9uczogUHJvZ3JhbUNvbmZpZ3VyYXRpb25TZXQ8U3ltYm9sU3R5bGVMYXllcj47XG4gICAgc2VnbWVudHM6IFNlZ21lbnRWZWN0b3I7XG5cbiAgICBkeW5hbWljTGF5b3V0VmVydGV4QXJyYXk6IFN5bWJvbER5bmFtaWNMYXlvdXRBcnJheTtcbiAgICBkeW5hbWljTGF5b3V0VmVydGV4QnVmZmVyOiBWZXJ0ZXhCdWZmZXI7XG5cbiAgICBvcGFjaXR5VmVydGV4QXJyYXk6IFN5bWJvbE9wYWNpdHlBcnJheTtcbiAgICBvcGFjaXR5VmVydGV4QnVmZmVyOiBWZXJ0ZXhCdWZmZXI7XG5cbiAgICBjb2xsaXNpb25WZXJ0ZXhBcnJheTogQ29sbGlzaW9uVmVydGV4QXJyYXk7XG4gICAgY29sbGlzaW9uVmVydGV4QnVmZmVyOiBWZXJ0ZXhCdWZmZXI7XG5cbiAgICBwbGFjZWRTeW1ib2xBcnJheTogUGxhY2VkU3ltYm9sQXJyYXk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9ncmFtQ29uZmlndXJhdGlvbnM6IFByb2dyYW1Db25maWd1cmF0aW9uU2V0PFN5bWJvbFN0eWxlTGF5ZXI+KSB7XG4gICAgICAgIHRoaXMubGF5b3V0VmVydGV4QXJyYXkgPSBuZXcgU3ltYm9sTGF5b3V0QXJyYXkoKTtcbiAgICAgICAgdGhpcy5pbmRleEFycmF5ID0gbmV3IFRyaWFuZ2xlSW5kZXhBcnJheSgpO1xuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucyA9IHByb2dyYW1Db25maWd1cmF0aW9ucztcbiAgICAgICAgdGhpcy5zZWdtZW50cyA9IG5ldyBTZWdtZW50VmVjdG9yKCk7XG4gICAgICAgIHRoaXMuZHluYW1pY0xheW91dFZlcnRleEFycmF5ID0gbmV3IFN5bWJvbER5bmFtaWNMYXlvdXRBcnJheSgpO1xuICAgICAgICB0aGlzLm9wYWNpdHlWZXJ0ZXhBcnJheSA9IG5ldyBTeW1ib2xPcGFjaXR5QXJyYXkoKTtcbiAgICAgICAgdGhpcy5wbGFjZWRTeW1ib2xBcnJheSA9IG5ldyBQbGFjZWRTeW1ib2xBcnJheSgpO1xuICAgIH1cblxuICAgIGlzRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgICAgdGhpcy5pbmRleEFycmF5Lmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgICAgdGhpcy5keW5hbWljTGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICB0aGlzLm9wYWNpdHlWZXJ0ZXhBcnJheS5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgdXBsb2FkKGNvbnRleHQ6IENvbnRleHQsIGR5bmFtaWNJbmRleEJ1ZmZlcjogYm9vbGVhbiwgdXBsb2FkPzogYm9vbGVhbiwgdXBkYXRlPzogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1cGxvYWQpIHtcbiAgICAgICAgICAgIHRoaXMubGF5b3V0VmVydGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSwgc3ltYm9sTGF5b3V0QXR0cmlidXRlcy5tZW1iZXJzKTtcbiAgICAgICAgICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSwgZHluYW1pY0luZGV4QnVmZmVyKTtcbiAgICAgICAgICAgIHRoaXMuZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuZHluYW1pY0xheW91dFZlcnRleEFycmF5LCBkeW5hbWljTGF5b3V0QXR0cmlidXRlcy5tZW1iZXJzLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMub3BhY2l0eVZlcnRleEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMub3BhY2l0eVZlcnRleEFycmF5LCBzaGFkZXJPcGFjaXR5QXR0cmlidXRlcywgdHJ1ZSk7XG4gICAgICAgICAgICAvLyBUaGlzIGlzIGEgcGVyZm9ybWFuY2UgaGFjayBzbyB0aGF0IHdlIGNhbiB3cml0ZSB0byBvcGFjaXR5VmVydGV4QXJyYXkgd2l0aCB1aW50MzJzXG4gICAgICAgICAgICAvLyBldmVuIHRob3VnaCB0aGUgc2hhZGVycyByZWFkIHVpbnQ4c1xuICAgICAgICAgICAgdGhpcy5vcGFjaXR5VmVydGV4QnVmZmVyLml0ZW1TaXplID0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXBsb2FkIHx8IHVwZGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBsb2FkKGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxheW91dFZlcnRleEJ1ZmZlcikgcmV0dXJuO1xuICAgICAgICB0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuc2VnbWVudHMuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLm9wYWNpdHlWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ1N5bWJvbEJ1ZmZlcnMnLCBTeW1ib2xCdWZmZXJzKTtcblxuY2xhc3MgQ29sbGlzaW9uQnVmZmVycyB7XG4gICAgbGF5b3V0VmVydGV4QXJyYXk6IFN0cnVjdEFycmF5O1xuICAgIGxheW91dEF0dHJpYnV0ZXM6IEFycmF5PFN0cnVjdEFycmF5TWVtYmVyPjtcbiAgICBsYXlvdXRWZXJ0ZXhCdWZmZXI6IFZlcnRleEJ1ZmZlcjtcblxuICAgIGluZGV4QXJyYXk6IFRyaWFuZ2xlSW5kZXhBcnJheSB8IExpbmVJbmRleEFycmF5O1xuICAgIGluZGV4QnVmZmVyOiBJbmRleEJ1ZmZlcjtcblxuICAgIHNlZ21lbnRzOiBTZWdtZW50VmVjdG9yO1xuXG4gICAgY29sbGlzaW9uVmVydGV4QXJyYXk6IENvbGxpc2lvblZlcnRleEFycmF5O1xuICAgIGNvbGxpc2lvblZlcnRleEJ1ZmZlcjogVmVydGV4QnVmZmVyO1xuXG4gICAgY29uc3RydWN0b3IoTGF5b3V0QXJyYXk6IENsYXNzPFN0cnVjdEFycmF5PixcbiAgICAgICAgICAgICAgICBsYXlvdXRBdHRyaWJ1dGVzOiBBcnJheTxTdHJ1Y3RBcnJheU1lbWJlcj4sXG4gICAgICAgICAgICAgICAgSW5kZXhBcnJheTogQ2xhc3M8VHJpYW5nbGVJbmRleEFycmF5IHwgTGluZUluZGV4QXJyYXk+KSB7XG4gICAgICAgIHRoaXMubGF5b3V0VmVydGV4QXJyYXkgPSBuZXcgTGF5b3V0QXJyYXkoKTtcbiAgICAgICAgdGhpcy5sYXlvdXRBdHRyaWJ1dGVzID0gbGF5b3V0QXR0cmlidXRlcztcbiAgICAgICAgdGhpcy5pbmRleEFycmF5ID0gbmV3IEluZGV4QXJyYXkoKTtcbiAgICAgICAgdGhpcy5zZWdtZW50cyA9IG5ldyBTZWdtZW50VmVjdG9yKCk7XG4gICAgICAgIHRoaXMuY29sbGlzaW9uVmVydGV4QXJyYXkgPSBuZXcgQ29sbGlzaW9uVmVydGV4QXJyYXkoKTtcbiAgICB9XG5cbiAgICB1cGxvYWQoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgICB0aGlzLmxheW91dFZlcnRleEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMubGF5b3V0VmVydGV4QXJyYXksIHRoaXMubGF5b3V0QXR0cmlidXRlcyk7XG4gICAgICAgIHRoaXMuaW5kZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSk7XG4gICAgICAgIHRoaXMuY29sbGlzaW9uVmVydGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5jb2xsaXNpb25WZXJ0ZXhBcnJheSwgY29sbGlzaW9uVmVydGV4QXR0cmlidXRlcy5tZW1iZXJzLCB0cnVlKTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBpZiAoIXRoaXMubGF5b3V0VmVydGV4QnVmZmVyKSByZXR1cm47XG4gICAgICAgIHRoaXMubGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuc2VnbWVudHMuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmNvbGxpc2lvblZlcnRleEJ1ZmZlci5kZXN0cm95KCk7XG4gICAgfVxufVxuXG5yZWdpc3RlcignQ29sbGlzaW9uQnVmZmVycycsIENvbGxpc2lvbkJ1ZmZlcnMpO1xuXG4vKipcbiAqIFVubGlrZSBvdGhlciBidWNrZXRzLCB3aGljaCBzaW1wbHkgaW1wbGVtZW50ICNhZGRGZWF0dXJlIHdpdGggdHlwZS1zcGVjaWZpY1xuICogbG9naWMgZm9yIChlc3NlbnRpYWxseSkgdHJpYW5ndWxhdGluZyBmZWF0dXJlIGdlb21ldHJpZXMsIFN5bWJvbEJ1Y2tldFxuICogcmVxdWlyZXMgc3BlY2lhbGl6ZWQgYmVoYXZpb3I6XG4gKlxuICogMS4gV29ya2VyVGlsZSNwYXJzZSgpLCB0aGUgbG9naWNhbCBvd25lciBvZiB0aGUgYnVja2V0IGNyZWF0aW9uIHByb2Nlc3MsXG4gKiAgICBjYWxscyBTeW1ib2xCdWNrZXQjcG9wdWxhdGUoKSwgd2hpY2ggcmVzb2x2ZXMgdGV4dCBhbmQgaWNvbiB0b2tlbnMgb25cbiAqICAgIGVhY2ggZmVhdHVyZSwgYWRkcyBlYWNoIGdseXBocyBhbmQgc3ltYm9scyBuZWVkZWQgdG8gdGhlIHBhc3NlZC1pblxuICogICAgY29sbGVjdGlvbnMgb3B0aW9ucy5nbHlwaERlcGVuZGVuY2llcyBhbmQgb3B0aW9ucy5pY29uRGVwZW5kZW5jaWVzLCBhbmRcbiAqICAgIHN0b3JlcyB0aGUgZmVhdHVyZSBkYXRhIGZvciB1c2UgaW4gc3Vic2VxdWVudCBzdGVwICh0aGlzLmZlYXR1cmVzKS5cbiAqXG4gKiAyLiBXb3JrZXJUaWxlIGFzeW5jaHJvbm91c2x5IHJlcXVlc3RzIGZyb20gdGhlIG1haW4gdGhyZWFkIGFsbCBvZiB0aGUgZ2x5cGhzXG4gKiAgICBhbmQgaWNvbnMgbmVlZGVkIChieSB0aGlzIGJ1Y2tldCBhbmQgYW55IG90aGVycykuIFdoZW4gZ2x5cGhzIGFuZCBpY29uc1xuICogICAgaGF2ZSBiZWVuIHJlY2VpdmVkLCB0aGUgV29ya2VyVGlsZSBjcmVhdGVzIGEgQ29sbGlzaW9uSW5kZXggYW5kIGludm9rZXM6XG4gKlxuICogMy4gcGVyZm9ybVN5bWJvbExheW91dChidWNrZXQsIHN0YWNrcywgaWNvbnMpIHBlcmZvcm0gdGV4dHMgc2hhcGluZyBhbmRcbiAqICAgIGxheW91dCBvbiBhIFN5bWJvbCBCdWNrZXQuIFRoaXMgc3RlcCBwb3B1bGF0ZXM6XG4gKiAgICAgIGB0aGlzLnN5bWJvbEluc3RhbmNlc2A6IG1ldGFkYXRhIG9uIGdlbmVyYXRlZCBzeW1ib2xzXG4gKiAgICAgIGB0aGlzLmNvbGxpc2lvbkJveEFycmF5YDogY29sbGlzaW9uIGRhdGEgZm9yIHVzZSBieSBmb3JlZ3JvdW5kXG4gKiAgICAgIGB0aGlzLnRleHRgOiBTeW1ib2xCdWZmZXJzIGZvciB0ZXh0IHN5bWJvbHNcbiAqICAgICAgYHRoaXMuaWNvbnNgOiBTeW1ib2xCdWZmZXJzIGZvciBpY29uc1xuICogICAgICBgdGhpcy5pY29uQ29sbGlzaW9uQm94YDogRGVidWcgU3ltYm9sQnVmZmVycyBmb3IgaWNvbiBjb2xsaXNpb24gYm94ZXNcbiAqICAgICAgYHRoaXMudGV4dENvbGxpc2lvbkJveGA6IERlYnVnIFN5bWJvbEJ1ZmZlcnMgZm9yIHRleHQgY29sbGlzaW9uIGJveGVzXG4gKiAgICBUaGUgcmVzdWx0cyBhcmUgc2VudCB0byB0aGUgZm9yZWdyb3VuZCBmb3IgcmVuZGVyaW5nXG4gKlxuICogNC4gcGVyZm9ybVN5bWJvbFBsYWNlbWVudChidWNrZXQsIGNvbGxpc2lvbkluZGV4KSBpcyBydW4gb24gdGhlIGZvcmVncm91bmQsXG4gKiAgICBhbmQgdXNlcyB0aGUgQ29sbGlzaW9uSW5kZXggYWxvbmcgd2l0aCBjdXJyZW50IGNhbWVyYSBzZXR0aW5ncyB0byBkZXRlcm1pbmVcbiAqICAgIHdoaWNoIHN5bWJvbHMgY2FuIGFjdHVhbGx5IHNob3cgb24gdGhlIG1hcC4gQ29sbGlkZWQgc3ltYm9scyBhcmUgaGlkZGVuXG4gKiAgICB1c2luZyBhIGR5bmFtaWMgXCJPcGFjaXR5VmVydGV4QXJyYXlcIi5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBTeW1ib2xCdWNrZXQgaW1wbGVtZW50cyBCdWNrZXQge1xuICAgIHN0YXRpYyBNQVhfR0xZUEhTOiBudW1iZXI7XG4gICAgc3RhdGljIGFkZER5bmFtaWNBdHRyaWJ1dGVzOiB0eXBlb2YgYWRkRHluYW1pY0F0dHJpYnV0ZXM7XG5cbiAgICBjb2xsaXNpb25Cb3hBcnJheTogQ29sbGlzaW9uQm94QXJyYXk7XG4gICAgem9vbTogbnVtYmVyO1xuICAgIG92ZXJzY2FsaW5nOiBudW1iZXI7XG4gICAgbGF5ZXJzOiBBcnJheTxTeW1ib2xTdHlsZUxheWVyPjtcbiAgICBsYXllcklkczogQXJyYXk8c3RyaW5nPjtcbiAgICBzdGF0ZURlcGVuZGVudExheWVyczogQXJyYXk8U3ltYm9sU3R5bGVMYXllcj47XG4gICAgc3RhdGVEZXBlbmRlbnRMYXllcklkczogQXJyYXk8c3RyaW5nPjtcblxuICAgIGluZGV4OiBudW1iZXI7XG4gICAgc2RmSWNvbnM6IGJvb2xlYW47XG4gICAgaWNvbnNJblRleHQ6IGJvb2xlYW47XG4gICAgaWNvbnNOZWVkTGluZWFyOiBib29sZWFuO1xuICAgIGJ1Y2tldEluc3RhbmNlSWQ6IG51bWJlcjtcbiAgICBqdXN0UmVsb2FkZWQ6IGJvb2xlYW47XG4gICAgaGFzUGF0dGVybjogYm9vbGVhbjtcblxuICAgIHRleHRTaXplRGF0YTogU2l6ZURhdGE7XG4gICAgaWNvblNpemVEYXRhOiBTaXplRGF0YTtcblxuICAgIGdseXBoT2Zmc2V0QXJyYXk6IEdseXBoT2Zmc2V0QXJyYXk7XG4gICAgbGluZVZlcnRleEFycmF5OiBTeW1ib2xMaW5lVmVydGV4QXJyYXk7XG4gICAgZmVhdHVyZXM6IEFycmF5PFN5bWJvbEZlYXR1cmU+O1xuICAgIHN5bWJvbEluc3RhbmNlczogU3ltYm9sSW5zdGFuY2VBcnJheTtcbiAgICBjb2xsaXNpb25BcnJheXM6IEFycmF5PENvbGxpc2lvbkFycmF5cz47XG4gICAgc29ydEtleVJhbmdlczogQXJyYXk8U29ydEtleVJhbmdlPjtcbiAgICBwaXhlbFJhdGlvOiBudW1iZXI7XG4gICAgdGlsZVBpeGVsUmF0aW86IG51bWJlcjtcbiAgICBjb21wYXJlVGV4dDoge1tfOiBzdHJpbmddOiBBcnJheTxQb2ludD59O1xuICAgIGZhZGVTdGFydFRpbWU6IG51bWJlcjtcbiAgICBzb3J0RmVhdHVyZXNCeUtleTogYm9vbGVhbjtcbiAgICBzb3J0RmVhdHVyZXNCeVk6IGJvb2xlYW47XG4gICAgc29ydGVkQW5nbGU6IG51bWJlcjtcbiAgICBmZWF0dXJlU29ydE9yZGVyOiBBcnJheTxudW1iZXI+O1xuXG4gICAgY29sbGlzaW9uQ2lyY2xlQXJyYXk6IEFycmF5PG51bWJlcj47XG4gICAgcGxhY2VtZW50SW52UHJvak1hdHJpeDogbWF0NDtcbiAgICBwbGFjZW1lbnRWaWV3cG9ydE1hdHJpeDogbWF0NDtcblxuICAgIHRleHQ6IFN5bWJvbEJ1ZmZlcnM7XG4gICAgaWNvbjogU3ltYm9sQnVmZmVycztcbiAgICB0ZXh0Q29sbGlzaW9uQm94OiBDb2xsaXNpb25CdWZmZXJzO1xuICAgIGljb25Db2xsaXNpb25Cb3g6IENvbGxpc2lvbkJ1ZmZlcnM7XG4gICAgdXBsb2FkZWQ6IGJvb2xlYW47XG4gICAgc291cmNlTGF5ZXJJbmRleDogbnVtYmVyO1xuICAgIHNvdXJjZUlEOiBzdHJpbmc7XG4gICAgc3ltYm9sSW5zdGFuY2VJbmRleGVzOiBBcnJheTxudW1iZXI+O1xuICAgIHdyaXRpbmdNb2RlczogQXJyYXk8bnVtYmVyPjtcbiAgICBhbGxvd1ZlcnRpY2FsUGxhY2VtZW50OiBib29sZWFuO1xuICAgIGhhc1JUTFRleHQ6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBCdWNrZXRQYXJhbWV0ZXJzPFN5bWJvbFN0eWxlTGF5ZXI+KSB7XG4gICAgICAgIHRoaXMuY29sbGlzaW9uQm94QXJyYXkgPSBvcHRpb25zLmNvbGxpc2lvbkJveEFycmF5O1xuICAgICAgICB0aGlzLnpvb20gPSBvcHRpb25zLnpvb207XG4gICAgICAgIHRoaXMub3ZlcnNjYWxpbmcgPSBvcHRpb25zLm92ZXJzY2FsaW5nO1xuICAgICAgICB0aGlzLmxheWVycyA9IG9wdGlvbnMubGF5ZXJzO1xuICAgICAgICB0aGlzLmxheWVySWRzID0gdGhpcy5sYXllcnMubWFwKGxheWVyID0+IGxheWVyLmlkKTtcbiAgICAgICAgdGhpcy5pbmRleCA9IG9wdGlvbnMuaW5kZXg7XG4gICAgICAgIHRoaXMucGl4ZWxSYXRpbyA9IG9wdGlvbnMucGl4ZWxSYXRpbztcbiAgICAgICAgdGhpcy5zb3VyY2VMYXllckluZGV4ID0gb3B0aW9ucy5zb3VyY2VMYXllckluZGV4O1xuICAgICAgICB0aGlzLmhhc1BhdHRlcm4gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5oYXNSVExUZXh0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc29ydEtleVJhbmdlcyA9IFtdO1xuXG4gICAgICAgIHRoaXMuY29sbGlzaW9uQ2lyY2xlQXJyYXkgPSBbXTtcbiAgICAgICAgdGhpcy5wbGFjZW1lbnRJbnZQcm9qTWF0cml4ID0gbWF0NC5pZGVudGl0eShbXSk7XG4gICAgICAgIHRoaXMucGxhY2VtZW50Vmlld3BvcnRNYXRyaXggPSBtYXQ0LmlkZW50aXR5KFtdKTtcblxuICAgICAgICBjb25zdCBsYXllciA9IHRoaXMubGF5ZXJzWzBdO1xuICAgICAgICBjb25zdCB1bmV2YWx1YXRlZExheW91dFZhbHVlcyA9IGxheWVyLl91bmV2YWx1YXRlZExheW91dC5fdmFsdWVzO1xuXG4gICAgICAgIHRoaXMudGV4dFNpemVEYXRhID0gZ2V0U2l6ZURhdGEodGhpcy56b29tLCB1bmV2YWx1YXRlZExheW91dFZhbHVlc1sndGV4dC1zaXplJ10pO1xuICAgICAgICB0aGlzLmljb25TaXplRGF0YSA9IGdldFNpemVEYXRhKHRoaXMuem9vbSwgdW5ldmFsdWF0ZWRMYXlvdXRWYWx1ZXNbJ2ljb24tc2l6ZSddKTtcblxuICAgICAgICBjb25zdCBsYXlvdXQgPSB0aGlzLmxheWVyc1swXS5sYXlvdXQ7XG4gICAgICAgIGNvbnN0IHNvcnRLZXkgPSBsYXlvdXQuZ2V0KCdzeW1ib2wtc29ydC1rZXknKTtcbiAgICAgICAgY29uc3Qgek9yZGVyID0gbGF5b3V0LmdldCgnc3ltYm9sLXotb3JkZXInKTtcbiAgICAgICAgdGhpcy5zb3J0RmVhdHVyZXNCeUtleSA9IHpPcmRlciAhPT0gJ3ZpZXdwb3J0LXknICYmIHNvcnRLZXkuY29uc3RhbnRPcigxKSAhPT0gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCB6T3JkZXJCeVZpZXdwb3J0WSA9IHpPcmRlciA9PT0gJ3ZpZXdwb3J0LXknIHx8ICh6T3JkZXIgPT09ICdhdXRvJyAmJiAhdGhpcy5zb3J0RmVhdHVyZXNCeUtleSk7XG4gICAgICAgIHRoaXMuc29ydEZlYXR1cmVzQnlZID0gek9yZGVyQnlWaWV3cG9ydFkgJiYgKGxheW91dC5nZXQoJ3RleHQtYWxsb3ctb3ZlcmxhcCcpIHx8IGxheW91dC5nZXQoJ2ljb24tYWxsb3ctb3ZlcmxhcCcpIHx8XG4gICAgICAgICAgICBsYXlvdXQuZ2V0KCd0ZXh0LWlnbm9yZS1wbGFjZW1lbnQnKSB8fCBsYXlvdXQuZ2V0KCdpY29uLWlnbm9yZS1wbGFjZW1lbnQnKSk7XG5cbiAgICAgICAgaWYgKGxheW91dC5nZXQoJ3N5bWJvbC1wbGFjZW1lbnQnKSA9PT0gJ3BvaW50Jykge1xuICAgICAgICAgICAgdGhpcy53cml0aW5nTW9kZXMgPSBsYXlvdXQuZ2V0KCd0ZXh0LXdyaXRpbmctbW9kZScpLm1hcCh3bSA9PiBXcml0aW5nTW9kZVt3bV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdGF0ZURlcGVuZGVudExheWVySWRzID0gdGhpcy5sYXllcnMuZmlsdGVyKChsKSA9PiBsLmlzU3RhdGVEZXBlbmRlbnQoKSkubWFwKChsKSA9PiBsLmlkKTtcblxuICAgICAgICB0aGlzLnNvdXJjZUlEID0gb3B0aW9ucy5zb3VyY2VJRDtcbiAgICB9XG5cbiAgICBjcmVhdGVBcnJheXMoKSB7XG4gICAgICAgIHRoaXMudGV4dCA9IG5ldyBTeW1ib2xCdWZmZXJzKG5ldyBQcm9ncmFtQ29uZmlndXJhdGlvblNldChzeW1ib2xMYXlvdXRBdHRyaWJ1dGVzLm1lbWJlcnMsIHRoaXMubGF5ZXJzLCB0aGlzLnpvb20sIHByb3BlcnR5ID0+IC9edGV4dC8udGVzdChwcm9wZXJ0eSkpKTtcbiAgICAgICAgdGhpcy5pY29uID0gbmV3IFN5bWJvbEJ1ZmZlcnMobmV3IFByb2dyYW1Db25maWd1cmF0aW9uU2V0KHN5bWJvbExheW91dEF0dHJpYnV0ZXMubWVtYmVycywgdGhpcy5sYXllcnMsIHRoaXMuem9vbSwgcHJvcGVydHkgPT4gL15pY29uLy50ZXN0KHByb3BlcnR5KSkpO1xuXG4gICAgICAgIHRoaXMuZ2x5cGhPZmZzZXRBcnJheSA9IG5ldyBHbHlwaE9mZnNldEFycmF5KCk7XG4gICAgICAgIHRoaXMubGluZVZlcnRleEFycmF5ID0gbmV3IFN5bWJvbExpbmVWZXJ0ZXhBcnJheSgpO1xuICAgICAgICB0aGlzLnN5bWJvbEluc3RhbmNlcyA9IG5ldyBTeW1ib2xJbnN0YW5jZUFycmF5KCk7XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlR2x5cGhEZXBlbmRlbmNpZXModGV4dDogc3RyaW5nLCBzdGFjazoge1tfOiBudW1iZXJdOiBib29sZWFufSwgdGV4dEFsb25nTGluZTogYm9vbGVhbiwgYWxsb3dWZXJ0aWNhbFBsYWNlbWVudDogYm9vbGVhbiwgZG9lc0FsbG93VmVydGljYWxXcml0aW5nTW9kZTogYm9vbGVhbikge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHN0YWNrW3RleHQuY2hhckNvZGVBdChpKV0gPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCh0ZXh0QWxvbmdMaW5lIHx8IGFsbG93VmVydGljYWxQbGFjZW1lbnQpICYmIGRvZXNBbGxvd1ZlcnRpY2FsV3JpdGluZ01vZGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2ZXJ0aWNhbENoYXIgPSB2ZXJ0aWNhbGl6ZWRDaGFyYWN0ZXJNYXBbdGV4dC5jaGFyQXQoaSldO1xuICAgICAgICAgICAgICAgIGlmICh2ZXJ0aWNhbENoYXIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhY2tbdmVydGljYWxDaGFyLmNoYXJDb2RlQXQoMCldID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwb3B1bGF0ZShmZWF0dXJlczogQXJyYXk8SW5kZXhlZEZlYXR1cmU+LCBvcHRpb25zOiBQb3B1bGF0ZVBhcmFtZXRlcnMsIGNhbm9uaWNhbDogQ2Fub25pY2FsVGlsZUlEKSB7XG4gICAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5sYXllcnNbMF07XG4gICAgICAgIGNvbnN0IGxheW91dCA9IGxheWVyLmxheW91dDtcblxuICAgICAgICBjb25zdCB0ZXh0Rm9udCA9IGxheW91dC5nZXQoJ3RleHQtZm9udCcpO1xuICAgICAgICBjb25zdCB0ZXh0RmllbGQgPSBsYXlvdXQuZ2V0KCd0ZXh0LWZpZWxkJyk7XG4gICAgICAgIGNvbnN0IGljb25JbWFnZSA9IGxheW91dC5nZXQoJ2ljb24taW1hZ2UnKTtcbiAgICAgICAgY29uc3QgaGFzVGV4dCA9XG4gICAgICAgICAgICAodGV4dEZpZWxkLnZhbHVlLmtpbmQgIT09ICdjb25zdGFudCcgfHxcbiAgICAgICAgICAgICAgICAodGV4dEZpZWxkLnZhbHVlLnZhbHVlIGluc3RhbmNlb2YgRm9ybWF0dGVkICYmICF0ZXh0RmllbGQudmFsdWUudmFsdWUuaXNFbXB0eSgpKSB8fFxuICAgICAgICAgICAgICAgIHRleHRGaWVsZC52YWx1ZS52YWx1ZS50b1N0cmluZygpLmxlbmd0aCA+IDApICYmXG4gICAgICAgICAgICAodGV4dEZvbnQudmFsdWUua2luZCAhPT0gJ2NvbnN0YW50JyB8fCB0ZXh0Rm9udC52YWx1ZS52YWx1ZS5sZW5ndGggPiAwKTtcbiAgICAgICAgLy8gd2Ugc2hvdWxkIGFsd2F5cyByZXNvbHZlIHRoZSBpY29uLWltYWdlIHZhbHVlIGlmIHRoZSBwcm9wZXJ0eSB3YXMgZGVmaW5lZCBpbiB0aGUgc3R5bGVcbiAgICAgICAgLy8gdGhpcyBhbGxvd3MgdXMgdG8gZmlyZSB0aGUgc3R5bGVpbWFnZW1pc3NpbmcgZXZlbnQgaWYgaW1hZ2UgZXZhbHVhdGlvbiByZXR1cm5zIG51bGxcbiAgICAgICAgLy8gdGhlIG9ubHkgd2F5IHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gbnVsbCByZXR1cm5lZCBmcm9tIGEgY29hbGVzY2Ugc3RhdGVtZW50IHdpdGggbm8gdmFsaWQgaW1hZ2VzXG4gICAgICAgIC8vIGFuZCBudWxsIHJldHVybmVkIGJlY2F1c2UgaWNvbi1pbWFnZSB3YXNuJ3QgZGVmaW5lZCBpcyB0byBjaGVjayB3aGV0aGVyIG9yIG5vdCBpY29uSW1hZ2UucGFyYW1ldGVycyBpcyBhbiBlbXB0eSBvYmplY3RcbiAgICAgICAgY29uc3QgaGFzSWNvbiA9IGljb25JbWFnZS52YWx1ZS5raW5kICE9PSAnY29uc3RhbnQnIHx8ICEhaWNvbkltYWdlLnZhbHVlLnZhbHVlIHx8IE9iamVjdC5rZXlzKGljb25JbWFnZS5wYXJhbWV0ZXJzKS5sZW5ndGggPiAwO1xuICAgICAgICBjb25zdCBzeW1ib2xTb3J0S2V5ID0gbGF5b3V0LmdldCgnc3ltYm9sLXNvcnQta2V5Jyk7XG5cbiAgICAgICAgdGhpcy5mZWF0dXJlcyA9IFtdO1xuXG4gICAgICAgIGlmICghaGFzVGV4dCAmJiAhaGFzSWNvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaWNvbnMgPSBvcHRpb25zLmljb25EZXBlbmRlbmNpZXM7XG4gICAgICAgIGNvbnN0IHN0YWNrcyA9IG9wdGlvbnMuZ2x5cGhEZXBlbmRlbmNpZXM7XG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZUltYWdlcyA9IG9wdGlvbnMuYXZhaWxhYmxlSW1hZ2VzO1xuICAgICAgICBjb25zdCBnbG9iYWxQcm9wZXJ0aWVzID0gbmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKHRoaXMuem9vbSk7XG5cbiAgICAgICAgZm9yIChjb25zdCB7ZmVhdHVyZSwgaWQsIGluZGV4LCBzb3VyY2VMYXllckluZGV4fSBvZiBmZWF0dXJlcykge1xuXG4gICAgICAgICAgICBjb25zdCBuZWVkR2VvbWV0cnkgPSBsYXllci5fZmVhdHVyZUZpbHRlci5uZWVkR2VvbWV0cnk7XG4gICAgICAgICAgICBjb25zdCBldmFsdWF0aW9uRmVhdHVyZSA9IHt0eXBlOiBmZWF0dXJlLnR5cGUsXG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczogZmVhdHVyZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAgIGdlb21ldHJ5OiBuZWVkR2VvbWV0cnkgPyBsb2FkR2VvbWV0cnkoZmVhdHVyZSkgOiBbXX07XG5cbiAgICAgICAgICAgIGlmICghbGF5ZXIuX2ZlYXR1cmVGaWx0ZXIuZmlsdGVyKGdsb2JhbFByb3BlcnRpZXMsIGV2YWx1YXRpb25GZWF0dXJlLCBjYW5vbmljYWwpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghbmVlZEdlb21ldHJ5KSAgZXZhbHVhdGlvbkZlYXR1cmUuZ2VvbWV0cnkgPSBsb2FkR2VvbWV0cnkoZmVhdHVyZSk7XG5cbiAgICAgICAgICAgIGxldCB0ZXh0OiBGb3JtYXR0ZWQgfCB2b2lkO1xuICAgICAgICAgICAgaWYgKGhhc1RleHQpIHtcbiAgICAgICAgICAgICAgICAvLyBFeHByZXNzaW9uIGV2YWx1YXRpb24gd2lsbCBhdXRvbWF0aWNhbGx5IGNvZXJjZSB0byBGb3JtYXR0ZWRcbiAgICAgICAgICAgICAgICAvLyBidXQgcGxhaW4gc3RyaW5nIHRva2VuIGV2YWx1YXRpb24gc2tpcHMgdGhhdCBwYXRod2F5IHNvIGRvIHRoZVxuICAgICAgICAgICAgICAgIC8vIGNvbnZlcnNpb24gaGVyZS5cbiAgICAgICAgICAgICAgICBjb25zdCByZXNvbHZlZFRva2VucyA9IGxheWVyLmdldFZhbHVlQW5kUmVzb2x2ZVRva2VucygndGV4dC1maWVsZCcsIGV2YWx1YXRpb25GZWF0dXJlLCBjYW5vbmljYWwsIGF2YWlsYWJsZUltYWdlcyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkVGV4dCA9IEZvcm1hdHRlZC5mYWN0b3J5KHJlc29sdmVkVG9rZW5zKTtcbiAgICAgICAgICAgICAgICBpZiAoY29udGFpbnNSVExUZXh0KGZvcm1hdHRlZFRleHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzUlRMVGV4dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgIXRoaXMuaGFzUlRMVGV4dCB8fCAvLyBub24tcnRsIHRleHQgc28gY2FuIHByb2NlZWQgc2FmZWx5XG4gICAgICAgICAgICAgICAgICAgIGdldFJUTFRleHRQbHVnaW5TdGF0dXMoKSA9PT0gJ3VuYXZhaWxhYmxlJyB8fCAvLyBXZSBkb24ndCBpbnRlbmQgdG8gbGF6eS1sb2FkIHRoZSBydGwgdGV4dCBwbHVnaW4sIHNvIHByb2NlZWQgd2l0aCBpbmNvcnJlY3Qgc2hhcGluZ1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc1JUTFRleHQgJiYgZ2xvYmFsUlRMVGV4dFBsdWdpbi5pc1BhcnNlZCgpIC8vIFVzZSB0aGUgcnRsVGV4dCBwbHVnaW4gdG8gc2hhcGUgdGV4dFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gdHJhbnNmb3JtVGV4dChmb3JtYXR0ZWRUZXh0LCBsYXllciwgZXZhbHVhdGlvbkZlYXR1cmUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGljb246ID9SZXNvbHZlZEltYWdlO1xuICAgICAgICAgICAgaWYgKGhhc0ljb24pIHtcbiAgICAgICAgICAgICAgICAvLyBFeHByZXNzaW9uIGV2YWx1YXRpb24gd2lsbCBhdXRvbWF0aWNhbGx5IGNvZXJjZSB0byBJbWFnZVxuICAgICAgICAgICAgICAgIC8vIGJ1dCBwbGFpbiBzdHJpbmcgdG9rZW4gZXZhbHVhdGlvbiBza2lwcyB0aGF0IHBhdGh3YXkgc28gZG8gdGhlXG4gICAgICAgICAgICAgICAgLy8gY29udmVyc2lvbiBoZXJlLlxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkVG9rZW5zID0gbGF5ZXIuZ2V0VmFsdWVBbmRSZXNvbHZlVG9rZW5zKCdpY29uLWltYWdlJywgZXZhbHVhdGlvbkZlYXR1cmUsIGNhbm9uaWNhbCwgYXZhaWxhYmxlSW1hZ2VzKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZWRUb2tlbnMgaW5zdGFuY2VvZiBSZXNvbHZlZEltYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGljb24gPSByZXNvbHZlZFRva2VucztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpY29uID0gUmVzb2x2ZWRJbWFnZS5mcm9tU3RyaW5nKHJlc29sdmVkVG9rZW5zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGV4dCAmJiAhaWNvbikge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc29ydEtleSA9IHRoaXMuc29ydEZlYXR1cmVzQnlLZXkgP1xuICAgICAgICAgICAgICAgIHN5bWJvbFNvcnRLZXkuZXZhbHVhdGUoZXZhbHVhdGlvbkZlYXR1cmUsIHt9LCBjYW5vbmljYWwpIDpcbiAgICAgICAgICAgICAgICB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgIGNvbnN0IHN5bWJvbEZlYXR1cmU6IFN5bWJvbEZlYXR1cmUgPSB7XG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgICAgICBpY29uLFxuICAgICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICAgIHNvdXJjZUxheWVySW5kZXgsXG4gICAgICAgICAgICAgICAgZ2VvbWV0cnk6IGxvYWRHZW9tZXRyeShmZWF0dXJlKSxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBmZWF0dXJlLnByb3BlcnRpZXMsXG4gICAgICAgICAgICAgICAgdHlwZTogdmVjdG9yVGlsZUZlYXR1cmVUeXBlc1tmZWF0dXJlLnR5cGVdLFxuICAgICAgICAgICAgICAgIHNvcnRLZXlcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLmZlYXR1cmVzLnB1c2goc3ltYm9sRmVhdHVyZSk7XG5cbiAgICAgICAgICAgIGlmIChpY29uKSB7XG4gICAgICAgICAgICAgICAgaWNvbnNbaWNvbi5uYW1lXSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0ZXh0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9udFN0YWNrID0gdGV4dEZvbnQuZXZhbHVhdGUoZXZhbHVhdGlvbkZlYXR1cmUsIHt9LCBjYW5vbmljYWwpLmpvaW4oJywnKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0QWxvbmdMaW5lID0gbGF5b3V0LmdldCgndGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQnKSA9PT0gJ21hcCcgJiYgbGF5b3V0LmdldCgnc3ltYm9sLXBsYWNlbWVudCcpICE9PSAncG9pbnQnO1xuICAgICAgICAgICAgICAgIHRoaXMuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCA9IHRoaXMud3JpdGluZ01vZGVzICYmIHRoaXMud3JpdGluZ01vZGVzLmluZGV4T2YoV3JpdGluZ01vZGUudmVydGljYWwpID49IDA7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBzZWN0aW9uIG9mIHRleHQuc2VjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWN0aW9uLmltYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb2VzQWxsb3dWZXJ0aWNhbFdyaXRpbmdNb2RlID0gYWxsb3dzVmVydGljYWxXcml0aW5nTW9kZSh0ZXh0LnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VjdGlvbkZvbnQgPSBzZWN0aW9uLmZvbnRTdGFjayB8fCBmb250U3RhY2s7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWN0aW9uU3RhY2sgPSBzdGFja3Nbc2VjdGlvbkZvbnRdID0gc3RhY2tzW3NlY3Rpb25Gb250XSB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlR2x5cGhEZXBlbmRlbmNpZXMoc2VjdGlvbi50ZXh0LCBzZWN0aW9uU3RhY2ssIHRleHRBbG9uZ0xpbmUsIHRoaXMuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCwgZG9lc0FsbG93VmVydGljYWxXcml0aW5nTW9kZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgc2VjdGlvbiBpbWFnZSB0byB0aGUgbGlzdCBvZiBkZXBlbmRlbmNpZXMuXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uc1tzZWN0aW9uLmltYWdlLm5hbWVdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsYXlvdXQuZ2V0KCdzeW1ib2wtcGxhY2VtZW50JykgPT09ICdsaW5lJykge1xuICAgICAgICAgICAgLy8gTWVyZ2UgYWRqYWNlbnQgbGluZXMgd2l0aCB0aGUgc2FtZSB0ZXh0IHRvIGltcHJvdmUgbGFiZWxsaW5nLlxuICAgICAgICAgICAgLy8gSXQncyBiZXR0ZXIgdG8gcGxhY2UgbGFiZWxzIG9uIG9uZSBsb25nIGxpbmUgdGhhbiBvbiBtYW55IHNob3J0IHNlZ21lbnRzLlxuICAgICAgICAgICAgdGhpcy5mZWF0dXJlcyA9IG1lcmdlTGluZXModGhpcy5mZWF0dXJlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zb3J0RmVhdHVyZXNCeUtleSkge1xuICAgICAgICAgICAgdGhpcy5mZWF0dXJlcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gYS5zb3J0S2V5IGlzIGFsd2F5cyBhIG51bWJlciB3aGVuIHNvcnRGZWF0dXJlc0J5S2V5IGlzIHRydWVcbiAgICAgICAgICAgICAgICByZXR1cm4gKChhLnNvcnRLZXk6IGFueSk6IG51bWJlcikgLSAoKGIuc29ydEtleTogYW55KTogbnVtYmVyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlKHN0YXRlczogRmVhdHVyZVN0YXRlcywgdnRMYXllcjogVmVjdG9yVGlsZUxheWVyLCBpbWFnZVBvc2l0aW9uczoge1tfOiBzdHJpbmddOiBJbWFnZVBvc2l0aW9ufSkge1xuICAgICAgICBpZiAoIXRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcnMubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIHRoaXMudGV4dC5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBkYXRlUGFpbnRBcnJheXMoc3RhdGVzLCB2dExheWVyLCB0aGlzLmxheWVycywgaW1hZ2VQb3NpdGlvbnMpO1xuICAgICAgICB0aGlzLmljb24ucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwZGF0ZVBhaW50QXJyYXlzKHN0YXRlcywgdnRMYXllciwgdGhpcy5sYXllcnMsIGltYWdlUG9zaXRpb25zKTtcbiAgICB9XG5cbiAgICBpc0VtcHR5KCkge1xuICAgICAgICAvLyBXaGVuIHRoZSBidWNrZXQgZW5jb3VudGVycyBvbmx5IHJ0bC10ZXh0IGJ1dCB0aGUgcGx1Z2luIGlzbnQgbG9hZGVkLCBubyBzeW1ib2wgaW5zdGFuY2VzIHdpbGwgYmUgY3JlYXRlZC5cbiAgICAgICAgLy8gSW4gb3JkZXIgZm9yIHRoZSBidWNrZXQgdG8gYmUgc2VyaWFsaXplZCwgYW5kIG5vdCBkaXNjYXJkZWQgYXMgYW4gZW1wdHkgYnVja2V0IGJvdGggY2hlY2tzIGFyZSBuZWNlc3NhcnkuXG4gICAgICAgIHJldHVybiB0aGlzLnN5bWJvbEluc3RhbmNlcy5sZW5ndGggPT09IDAgJiYgIXRoaXMuaGFzUlRMVGV4dDtcbiAgICB9XG5cbiAgICB1cGxvYWRQZW5kaW5nKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMudXBsb2FkZWQgfHwgdGhpcy50ZXh0LnByb2dyYW1Db25maWd1cmF0aW9ucy5uZWVkc1VwbG9hZCB8fCB0aGlzLmljb24ucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkO1xuICAgIH1cblxuICAgIHVwbG9hZChjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgIGlmICghdGhpcy51cGxvYWRlZCAmJiB0aGlzLmhhc0RlYnVnRGF0YSgpKSB7XG4gICAgICAgICAgICB0aGlzLnRleHRDb2xsaXNpb25Cb3gudXBsb2FkKGNvbnRleHQpO1xuICAgICAgICAgICAgdGhpcy5pY29uQ29sbGlzaW9uQm94LnVwbG9hZChjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRleHQudXBsb2FkKGNvbnRleHQsIHRoaXMuc29ydEZlYXR1cmVzQnlZLCAhdGhpcy51cGxvYWRlZCwgdGhpcy50ZXh0LnByb2dyYW1Db25maWd1cmF0aW9ucy5uZWVkc1VwbG9hZCk7XG4gICAgICAgIHRoaXMuaWNvbi51cGxvYWQoY29udGV4dCwgdGhpcy5zb3J0RmVhdHVyZXNCeVksICF0aGlzLnVwbG9hZGVkLCB0aGlzLmljb24ucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkKTtcbiAgICAgICAgdGhpcy51cGxvYWRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgZGVzdHJveURlYnVnRGF0YSgpIHtcbiAgICAgICAgdGhpcy50ZXh0Q29sbGlzaW9uQm94LmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5pY29uQ29sbGlzaW9uQm94LmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICB0aGlzLnRleHQuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmljb24uZGVzdHJveSgpO1xuXG4gICAgICAgIGlmICh0aGlzLmhhc0RlYnVnRGF0YSgpKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3lEZWJ1Z0RhdGEoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFkZFRvTGluZVZlcnRleEFycmF5KGFuY2hvcjogQW5jaG9yLCBsaW5lOiBhbnkpIHtcbiAgICAgICAgY29uc3QgbGluZVN0YXJ0SW5kZXggPSB0aGlzLmxpbmVWZXJ0ZXhBcnJheS5sZW5ndGg7XG4gICAgICAgIGlmIChhbmNob3Iuc2VnbWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsZXQgc3VtRm9yd2FyZExlbmd0aCA9IGFuY2hvci5kaXN0KGxpbmVbYW5jaG9yLnNlZ21lbnQgKyAxXSk7XG4gICAgICAgICAgICBsZXQgc3VtQmFja3dhcmRMZW5ndGggPSBhbmNob3IuZGlzdChsaW5lW2FuY2hvci5zZWdtZW50XSk7XG4gICAgICAgICAgICBjb25zdCB2ZXJ0aWNlcyA9IHt9O1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGFuY2hvci5zZWdtZW50ICsgMTsgaSA8IGxpbmUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2ZXJ0aWNlc1tpXSA9IHt4OiBsaW5lW2ldLngsIHk6IGxpbmVbaV0ueSwgdGlsZVVuaXREaXN0YW5jZUZyb21BbmNob3I6IHN1bUZvcndhcmRMZW5ndGh9O1xuICAgICAgICAgICAgICAgIGlmIChpIDwgbGluZS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1bUZvcndhcmRMZW5ndGggKz0gbGluZVtpICsgMV0uZGlzdChsaW5lW2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gYW5jaG9yLnNlZ21lbnQgfHwgMDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICB2ZXJ0aWNlc1tpXSA9IHt4OiBsaW5lW2ldLngsIHk6IGxpbmVbaV0ueSwgdGlsZVVuaXREaXN0YW5jZUZyb21BbmNob3I6IHN1bUJhY2t3YXJkTGVuZ3RofTtcbiAgICAgICAgICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgc3VtQmFja3dhcmRMZW5ndGggKz0gbGluZVtpIC0gMV0uZGlzdChsaW5lW2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2ZXJ0ZXggPSB2ZXJ0aWNlc1tpXTtcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmVWZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayh2ZXJ0ZXgueCwgdmVydGV4LnksIHZlcnRleC50aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxpbmVTdGFydEluZGV4LFxuICAgICAgICAgICAgbGluZUxlbmd0aDogdGhpcy5saW5lVmVydGV4QXJyYXkubGVuZ3RoIC0gbGluZVN0YXJ0SW5kZXhcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhZGRTeW1ib2xzKGFycmF5czogU3ltYm9sQnVmZmVycyxcbiAgICAgICAgICAgICAgIHF1YWRzOiBBcnJheTxTeW1ib2xRdWFkPixcbiAgICAgICAgICAgICAgIHNpemVWZXJ0ZXg6IGFueSxcbiAgICAgICAgICAgICAgIGxpbmVPZmZzZXQ6IFtudW1iZXIsIG51bWJlcl0sXG4gICAgICAgICAgICAgICBhbG9uZ0xpbmU6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICBmZWF0dXJlOiBTeW1ib2xGZWF0dXJlLFxuICAgICAgICAgICAgICAgd3JpdGluZ01vZGU6IGFueSxcbiAgICAgICAgICAgICAgIGxhYmVsQW5jaG9yOiBBbmNob3IsXG4gICAgICAgICAgICAgICBsaW5lU3RhcnRJbmRleDogbnVtYmVyLFxuICAgICAgICAgICAgICAgbGluZUxlbmd0aDogbnVtYmVyLFxuICAgICAgICAgICAgICAgYXNzb2NpYXRlZEljb25JbmRleDogbnVtYmVyLFxuICAgICAgICAgICAgICAgY2Fub25pY2FsOiBDYW5vbmljYWxUaWxlSUQpIHtcbiAgICAgICAgY29uc3QgaW5kZXhBcnJheSA9IGFycmF5cy5pbmRleEFycmF5O1xuICAgICAgICBjb25zdCBsYXlvdXRWZXJ0ZXhBcnJheSA9IGFycmF5cy5sYXlvdXRWZXJ0ZXhBcnJheTtcblxuICAgICAgICBjb25zdCBzZWdtZW50ID0gYXJyYXlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KDQgKiBxdWFkcy5sZW5ndGgsIGxheW91dFZlcnRleEFycmF5LCBpbmRleEFycmF5LCBmZWF0dXJlLnNvcnRLZXkpO1xuICAgICAgICBjb25zdCBnbHlwaE9mZnNldEFycmF5U3RhcnQgPSB0aGlzLmdseXBoT2Zmc2V0QXJyYXkubGVuZ3RoO1xuICAgICAgICBjb25zdCB2ZXJ0ZXhTdGFydEluZGV4ID0gc2VnbWVudC52ZXJ0ZXhMZW5ndGg7XG5cbiAgICAgICAgY29uc3QgYW5nbGUgPSAodGhpcy5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50ICYmIHdyaXRpbmdNb2RlID09PSBXcml0aW5nTW9kZS52ZXJ0aWNhbCkgPyBNYXRoLlBJIC8gMiA6IDA7XG5cbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSBmZWF0dXJlLnRleHQgJiYgZmVhdHVyZS50ZXh0LnNlY3Rpb25zO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcXVhZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHt0bCwgdHIsIGJsLCBiciwgdGV4LCBwaXhlbE9mZnNldFRMLCBwaXhlbE9mZnNldEJSLCBtaW5Gb250U2NhbGVYLCBtaW5Gb250U2NhbGVZLCBnbHlwaE9mZnNldCwgaXNTREYsIHNlY3Rpb25JbmRleH0gPSBxdWFkc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gc2VnbWVudC52ZXJ0ZXhMZW5ndGg7XG5cbiAgICAgICAgICAgIGNvbnN0IHkgPSBnbHlwaE9mZnNldFsxXTtcbiAgICAgICAgICAgIGFkZFZlcnRleChsYXlvdXRWZXJ0ZXhBcnJheSwgbGFiZWxBbmNob3IueCwgbGFiZWxBbmNob3IueSwgdGwueCwgeSArIHRsLnksIHRleC54LCB0ZXgueSwgc2l6ZVZlcnRleCwgaXNTREYsIHBpeGVsT2Zmc2V0VEwueCwgcGl4ZWxPZmZzZXRUTC55LCBtaW5Gb250U2NhbGVYLCBtaW5Gb250U2NhbGVZKTtcbiAgICAgICAgICAgIGFkZFZlcnRleChsYXlvdXRWZXJ0ZXhBcnJheSwgbGFiZWxBbmNob3IueCwgbGFiZWxBbmNob3IueSwgdHIueCwgeSArIHRyLnksIHRleC54ICsgdGV4LncsIHRleC55LCBzaXplVmVydGV4LCBpc1NERiwgcGl4ZWxPZmZzZXRCUi54LCBwaXhlbE9mZnNldFRMLnksIG1pbkZvbnRTY2FsZVgsIG1pbkZvbnRTY2FsZVkpO1xuICAgICAgICAgICAgYWRkVmVydGV4KGxheW91dFZlcnRleEFycmF5LCBsYWJlbEFuY2hvci54LCBsYWJlbEFuY2hvci55LCBibC54LCB5ICsgYmwueSwgdGV4LngsIHRleC55ICsgdGV4LmgsIHNpemVWZXJ0ZXgsIGlzU0RGLCBwaXhlbE9mZnNldFRMLngsIHBpeGVsT2Zmc2V0QlIueSwgbWluRm9udFNjYWxlWCwgbWluRm9udFNjYWxlWSk7XG4gICAgICAgICAgICBhZGRWZXJ0ZXgobGF5b3V0VmVydGV4QXJyYXksIGxhYmVsQW5jaG9yLngsIGxhYmVsQW5jaG9yLnksIGJyLngsIHkgKyBici55LCB0ZXgueCArIHRleC53LCB0ZXgueSArIHRleC5oLCBzaXplVmVydGV4LCBpc1NERiwgcGl4ZWxPZmZzZXRCUi54LCBwaXhlbE9mZnNldEJSLnksIG1pbkZvbnRTY2FsZVgsIG1pbkZvbnRTY2FsZVkpO1xuXG4gICAgICAgICAgICBhZGREeW5hbWljQXR0cmlidXRlcyhhcnJheXMuZHluYW1pY0xheW91dFZlcnRleEFycmF5LCBsYWJlbEFuY2hvciwgYW5nbGUpO1xuXG4gICAgICAgICAgICBpbmRleEFycmF5LmVtcGxhY2VCYWNrKGluZGV4LCBpbmRleCArIDEsIGluZGV4ICsgMik7XG4gICAgICAgICAgICBpbmRleEFycmF5LmVtcGxhY2VCYWNrKGluZGV4ICsgMSwgaW5kZXggKyAyLCBpbmRleCArIDMpO1xuXG4gICAgICAgICAgICBzZWdtZW50LnZlcnRleExlbmd0aCArPSA0O1xuICAgICAgICAgICAgc2VnbWVudC5wcmltaXRpdmVMZW5ndGggKz0gMjtcblxuICAgICAgICAgICAgdGhpcy5nbHlwaE9mZnNldEFycmF5LmVtcGxhY2VCYWNrKGdseXBoT2Zmc2V0WzBdKTtcblxuICAgICAgICAgICAgaWYgKGkgPT09IHF1YWRzLmxlbmd0aCAtIDEgfHwgc2VjdGlvbkluZGV4ICE9PSBxdWFkc1tpICsgMV0uc2VjdGlvbkluZGV4KSB7XG4gICAgICAgICAgICAgICAgYXJyYXlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5wb3B1bGF0ZVBhaW50QXJyYXlzKGxheW91dFZlcnRleEFycmF5Lmxlbmd0aCwgZmVhdHVyZSwgZmVhdHVyZS5pbmRleCwge30sIGNhbm9uaWNhbCwgc2VjdGlvbnMgJiYgc2VjdGlvbnNbc2VjdGlvbkluZGV4XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhcnJheXMucGxhY2VkU3ltYm9sQXJyYXkuZW1wbGFjZUJhY2sobGFiZWxBbmNob3IueCwgbGFiZWxBbmNob3IueSxcbiAgICAgICAgICAgIGdseXBoT2Zmc2V0QXJyYXlTdGFydCwgdGhpcy5nbHlwaE9mZnNldEFycmF5Lmxlbmd0aCAtIGdseXBoT2Zmc2V0QXJyYXlTdGFydCwgdmVydGV4U3RhcnRJbmRleCxcbiAgICAgICAgICAgIGxpbmVTdGFydEluZGV4LCBsaW5lTGVuZ3RoLCAobGFiZWxBbmNob3Iuc2VnbWVudDogYW55KSxcbiAgICAgICAgICAgIHNpemVWZXJ0ZXggPyBzaXplVmVydGV4WzBdIDogMCwgc2l6ZVZlcnRleCA/IHNpemVWZXJ0ZXhbMV0gOiAwLFxuICAgICAgICAgICAgbGluZU9mZnNldFswXSwgbGluZU9mZnNldFsxXSxcbiAgICAgICAgICAgIHdyaXRpbmdNb2RlLFxuICAgICAgICAgICAgLy8gcGxhY2VkT3JpZW50YXRpb24gaXMgbnVsbCBpbml0aWFsbHk7IHdpbGwgYmUgdXBkYXRlZCB0byBob3Jpem9udGFsKDEpL3ZlcnRpY2FsKDIpIGlmIHBsYWNlZFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIChmYWxzZTogYW55KSxcbiAgICAgICAgICAgIC8vIFRoZSBjcm9zc1RpbGVJRCBpcyBvbmx5IGZpbGxlZC91c2VkIG9uIHRoZSBmb3JlZ3JvdW5kIGZvciBkeW5hbWljIHRleHQgYW5jaG9yc1xuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIGFzc29jaWF0ZWRJY29uSW5kZXhcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBfYWRkQ29sbGlzaW9uRGVidWdWZXJ0ZXgobGF5b3V0VmVydGV4QXJyYXk6IFN0cnVjdEFycmF5LCBjb2xsaXNpb25WZXJ0ZXhBcnJheTogU3RydWN0QXJyYXksIHBvaW50OiBQb2ludCwgYW5jaG9yWDogbnVtYmVyLCBhbmNob3JZOiBudW1iZXIsIGV4dHJ1ZGU6IFBvaW50KSB7XG4gICAgICAgIGNvbGxpc2lvblZlcnRleEFycmF5LmVtcGxhY2VCYWNrKDAsIDApO1xuICAgICAgICByZXR1cm4gbGF5b3V0VmVydGV4QXJyYXkuZW1wbGFjZUJhY2soXG4gICAgICAgICAgICAvLyBwb3NcbiAgICAgICAgICAgIHBvaW50LngsXG4gICAgICAgICAgICBwb2ludC55LFxuICAgICAgICAgICAgLy8gYV9hbmNob3JfcG9zXG4gICAgICAgICAgICBhbmNob3JYLFxuICAgICAgICAgICAgYW5jaG9yWSxcbiAgICAgICAgICAgIC8vIGV4dHJ1ZGVcbiAgICAgICAgICAgIE1hdGgucm91bmQoZXh0cnVkZS54KSxcbiAgICAgICAgICAgIE1hdGgucm91bmQoZXh0cnVkZS55KSk7XG4gICAgfVxuXG4gICAgYWRkQ29sbGlzaW9uRGVidWdWZXJ0aWNlcyh4MTogbnVtYmVyLCB5MTogbnVtYmVyLCB4MjogbnVtYmVyLCB5MjogbnVtYmVyLCBhcnJheXM6IENvbGxpc2lvbkJ1ZmZlcnMsIGJveEFuY2hvclBvaW50OiBQb2ludCwgc3ltYm9sSW5zdGFuY2U6IFN5bWJvbEluc3RhbmNlKSB7XG4gICAgICAgIGNvbnN0IHNlZ21lbnQgPSBhcnJheXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoNCwgYXJyYXlzLmxheW91dFZlcnRleEFycmF5LCBhcnJheXMuaW5kZXhBcnJheSk7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gc2VnbWVudC52ZXJ0ZXhMZW5ndGg7XG5cbiAgICAgICAgY29uc3QgbGF5b3V0VmVydGV4QXJyYXkgPSBhcnJheXMubGF5b3V0VmVydGV4QXJyYXk7XG4gICAgICAgIGNvbnN0IGNvbGxpc2lvblZlcnRleEFycmF5ID0gYXJyYXlzLmNvbGxpc2lvblZlcnRleEFycmF5O1xuXG4gICAgICAgIGNvbnN0IGFuY2hvclggPSBzeW1ib2xJbnN0YW5jZS5hbmNob3JYO1xuICAgICAgICBjb25zdCBhbmNob3JZID0gc3ltYm9sSW5zdGFuY2UuYW5jaG9yWTtcblxuICAgICAgICB0aGlzLl9hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRleChsYXlvdXRWZXJ0ZXhBcnJheSwgY29sbGlzaW9uVmVydGV4QXJyYXksIGJveEFuY2hvclBvaW50LCBhbmNob3JYLCBhbmNob3JZLCBuZXcgUG9pbnQoeDEsIHkxKSk7XG4gICAgICAgIHRoaXMuX2FkZENvbGxpc2lvbkRlYnVnVmVydGV4KGxheW91dFZlcnRleEFycmF5LCBjb2xsaXNpb25WZXJ0ZXhBcnJheSwgYm94QW5jaG9yUG9pbnQsIGFuY2hvclgsIGFuY2hvclksIG5ldyBQb2ludCh4MiwgeTEpKTtcbiAgICAgICAgdGhpcy5fYWRkQ29sbGlzaW9uRGVidWdWZXJ0ZXgobGF5b3V0VmVydGV4QXJyYXksIGNvbGxpc2lvblZlcnRleEFycmF5LCBib3hBbmNob3JQb2ludCwgYW5jaG9yWCwgYW5jaG9yWSwgbmV3IFBvaW50KHgyLCB5MikpO1xuICAgICAgICB0aGlzLl9hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRleChsYXlvdXRWZXJ0ZXhBcnJheSwgY29sbGlzaW9uVmVydGV4QXJyYXksIGJveEFuY2hvclBvaW50LCBhbmNob3JYLCBhbmNob3JZLCBuZXcgUG9pbnQoeDEsIHkyKSk7XG5cbiAgICAgICAgc2VnbWVudC52ZXJ0ZXhMZW5ndGggKz0gNDtcblxuICAgICAgICBjb25zdCBpbmRleEFycmF5OiBMaW5lSW5kZXhBcnJheSA9IChhcnJheXMuaW5kZXhBcnJheTogYW55KTtcbiAgICAgICAgaW5kZXhBcnJheS5lbXBsYWNlQmFjayhpbmRleCwgaW5kZXggKyAxKTtcbiAgICAgICAgaW5kZXhBcnJheS5lbXBsYWNlQmFjayhpbmRleCArIDEsIGluZGV4ICsgMik7XG4gICAgICAgIGluZGV4QXJyYXkuZW1wbGFjZUJhY2soaW5kZXggKyAyLCBpbmRleCArIDMpO1xuICAgICAgICBpbmRleEFycmF5LmVtcGxhY2VCYWNrKGluZGV4ICsgMywgaW5kZXgpO1xuXG4gICAgICAgIHNlZ21lbnQucHJpbWl0aXZlTGVuZ3RoICs9IDQ7XG4gICAgfVxuXG4gICAgYWRkRGVidWdDb2xsaXNpb25Cb3hlcyhzdGFydEluZGV4OiBudW1iZXIsIGVuZEluZGV4OiBudW1iZXIsIHN5bWJvbEluc3RhbmNlOiBTeW1ib2xJbnN0YW5jZSwgaXNUZXh0OiBib29sZWFuKSB7XG4gICAgICAgIGZvciAobGV0IGIgPSBzdGFydEluZGV4OyBiIDwgZW5kSW5kZXg7IGIrKykge1xuICAgICAgICAgICAgY29uc3QgYm94OiBDb2xsaXNpb25Cb3ggPSAodGhpcy5jb2xsaXNpb25Cb3hBcnJheS5nZXQoYik6IGFueSk7XG4gICAgICAgICAgICBjb25zdCB4MSA9IGJveC54MTtcbiAgICAgICAgICAgIGNvbnN0IHkxID0gYm94LnkxO1xuICAgICAgICAgICAgY29uc3QgeDIgPSBib3gueDI7XG4gICAgICAgICAgICBjb25zdCB5MiA9IGJveC55MjtcblxuICAgICAgICAgICAgdGhpcy5hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRpY2VzKHgxLCB5MSwgeDIsIHkyLFxuICAgICAgICAgICAgICAgIGlzVGV4dCA/IHRoaXMudGV4dENvbGxpc2lvbkJveCA6IHRoaXMuaWNvbkNvbGxpc2lvbkJveCxcbiAgICAgICAgICAgICAgICBib3guYW5jaG9yUG9pbnQsIHN5bWJvbEluc3RhbmNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdlbmVyYXRlQ29sbGlzaW9uRGVidWdCdWZmZXJzKCkge1xuICAgICAgICBpZiAodGhpcy5oYXNEZWJ1Z0RhdGEoKSkge1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95RGVidWdEYXRhKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRleHRDb2xsaXNpb25Cb3ggPSBuZXcgQ29sbGlzaW9uQnVmZmVycyhDb2xsaXNpb25Cb3hMYXlvdXRBcnJheSwgY29sbGlzaW9uQm94TGF5b3V0Lm1lbWJlcnMsIExpbmVJbmRleEFycmF5KTtcbiAgICAgICAgdGhpcy5pY29uQ29sbGlzaW9uQm94ID0gbmV3IENvbGxpc2lvbkJ1ZmZlcnMoQ29sbGlzaW9uQm94TGF5b3V0QXJyYXksIGNvbGxpc2lvbkJveExheW91dC5tZW1iZXJzLCBMaW5lSW5kZXhBcnJheSk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnN5bWJvbEluc3RhbmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgc3ltYm9sSW5zdGFuY2UgPSB0aGlzLnN5bWJvbEluc3RhbmNlcy5nZXQoaSk7XG4gICAgICAgICAgICB0aGlzLmFkZERlYnVnQ29sbGlzaW9uQm94ZXMoc3ltYm9sSW5zdGFuY2UudGV4dEJveFN0YXJ0SW5kZXgsIHN5bWJvbEluc3RhbmNlLnRleHRCb3hFbmRJbmRleCwgc3ltYm9sSW5zdGFuY2UsIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5hZGREZWJ1Z0NvbGxpc2lvbkJveGVzKHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsVGV4dEJveFN0YXJ0SW5kZXgsIHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsVGV4dEJveEVuZEluZGV4LCBzeW1ib2xJbnN0YW5jZSwgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmFkZERlYnVnQ29sbGlzaW9uQm94ZXMoc3ltYm9sSW5zdGFuY2UuaWNvbkJveFN0YXJ0SW5kZXgsIHN5bWJvbEluc3RhbmNlLmljb25Cb3hFbmRJbmRleCwgc3ltYm9sSW5zdGFuY2UsIGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuYWRkRGVidWdDb2xsaXNpb25Cb3hlcyhzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbEljb25Cb3hTdGFydEluZGV4LCBzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbEljb25Cb3hFbmRJbmRleCwgc3ltYm9sSW5zdGFuY2UsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoZXNlIGZsYXQgYXJyYXlzIGFyZSBtZWFudCB0byBiZSBxdWlja2VyIHRvIGl0ZXJhdGUgb3ZlciB0aGFuIHRoZSBzb3VyY2VcbiAgICAvLyBDb2xsaXNpb25Cb3hBcnJheVxuICAgIF9kZXNlcmlhbGl6ZUNvbGxpc2lvbkJveGVzRm9yU3ltYm9sKGNvbGxpc2lvbkJveEFycmF5OiBDb2xsaXNpb25Cb3hBcnJheSxcbiAgICAgICAgdGV4dFN0YXJ0SW5kZXg6IG51bWJlciwgdGV4dEVuZEluZGV4OiBudW1iZXIsXG4gICAgICAgIHZlcnRpY2FsVGV4dFN0YXJ0SW5kZXg6IG51bWJlciwgdmVydGljYWxUZXh0RW5kSW5kZXg6IG51bWJlcixcbiAgICAgICAgaWNvblN0YXJ0SW5kZXg6IG51bWJlciwgaWNvbkVuZEluZGV4OiBudW1iZXIsXG4gICAgICAgIHZlcnRpY2FsSWNvblN0YXJ0SW5kZXg6IG51bWJlciwgdmVydGljYWxJY29uRW5kSW5kZXg6IG51bWJlcik6IENvbGxpc2lvbkFycmF5cyB7XG5cbiAgICAgICAgY29uc3QgY29sbGlzaW9uQXJyYXlzID0ge307XG4gICAgICAgIGZvciAobGV0IGsgPSB0ZXh0U3RhcnRJbmRleDsgayA8IHRleHRFbmRJbmRleDsgaysrKSB7XG4gICAgICAgICAgICBjb25zdCBib3g6IENvbGxpc2lvbkJveCA9IChjb2xsaXNpb25Cb3hBcnJheS5nZXQoayk6IGFueSk7XG4gICAgICAgICAgICBjb2xsaXNpb25BcnJheXMudGV4dEJveCA9IHt4MTogYm94LngxLCB5MTogYm94LnkxLCB4MjogYm94LngyLCB5MjogYm94LnkyLCBhbmNob3JQb2ludFg6IGJveC5hbmNob3JQb2ludFgsIGFuY2hvclBvaW50WTogYm94LmFuY2hvclBvaW50WX07XG4gICAgICAgICAgICBjb2xsaXNpb25BcnJheXMudGV4dEZlYXR1cmVJbmRleCA9IGJveC5mZWF0dXJlSW5kZXg7XG4gICAgICAgICAgICBicmVhazsgLy8gT25seSBvbmUgYm94IGFsbG93ZWQgcGVyIGluc3RhbmNlXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgayA9IHZlcnRpY2FsVGV4dFN0YXJ0SW5kZXg7IGsgPCB2ZXJ0aWNhbFRleHRFbmRJbmRleDsgaysrKSB7XG4gICAgICAgICAgICBjb25zdCBib3g6IENvbGxpc2lvbkJveCA9IChjb2xsaXNpb25Cb3hBcnJheS5nZXQoayk6IGFueSk7XG4gICAgICAgICAgICBjb2xsaXNpb25BcnJheXMudmVydGljYWxUZXh0Qm94ID0ge3gxOiBib3gueDEsIHkxOiBib3gueTEsIHgyOiBib3gueDIsIHkyOiBib3gueTIsIGFuY2hvclBvaW50WDogYm94LmFuY2hvclBvaW50WCwgYW5jaG9yUG9pbnRZOiBib3guYW5jaG9yUG9pbnRZfTtcbiAgICAgICAgICAgIGNvbGxpc2lvbkFycmF5cy52ZXJ0aWNhbFRleHRGZWF0dXJlSW5kZXggPSBib3guZmVhdHVyZUluZGV4O1xuICAgICAgICAgICAgYnJlYWs7IC8vIE9ubHkgb25lIGJveCBhbGxvd2VkIHBlciBpbnN0YW5jZVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGsgPSBpY29uU3RhcnRJbmRleDsgayA8IGljb25FbmRJbmRleDsgaysrKSB7XG4gICAgICAgICAgICAvLyBBbiBpY29uIGNhbiBvbmx5IGhhdmUgb25lIGJveCBub3csIHNvIHRoaXMgaW5kZXhpbmcgaXMgYSBiaXQgdmVzdGlnaWFsLi4uXG4gICAgICAgICAgICBjb25zdCBib3g6IENvbGxpc2lvbkJveCA9IChjb2xsaXNpb25Cb3hBcnJheS5nZXQoayk6IGFueSk7XG4gICAgICAgICAgICBjb2xsaXNpb25BcnJheXMuaWNvbkJveCA9IHt4MTogYm94LngxLCB5MTogYm94LnkxLCB4MjogYm94LngyLCB5MjogYm94LnkyLCBhbmNob3JQb2ludFg6IGJveC5hbmNob3JQb2ludFgsIGFuY2hvclBvaW50WTogYm94LmFuY2hvclBvaW50WX07XG4gICAgICAgICAgICBjb2xsaXNpb25BcnJheXMuaWNvbkZlYXR1cmVJbmRleCA9IGJveC5mZWF0dXJlSW5kZXg7XG4gICAgICAgICAgICBicmVhazsgLy8gT25seSBvbmUgYm94IGFsbG93ZWQgcGVyIGluc3RhbmNlXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgayA9IHZlcnRpY2FsSWNvblN0YXJ0SW5kZXg7IGsgPCB2ZXJ0aWNhbEljb25FbmRJbmRleDsgaysrKSB7XG4gICAgICAgICAgICAvLyBBbiBpY29uIGNhbiBvbmx5IGhhdmUgb25lIGJveCBub3csIHNvIHRoaXMgaW5kZXhpbmcgaXMgYSBiaXQgdmVzdGlnaWFsLi4uXG4gICAgICAgICAgICBjb25zdCBib3g6IENvbGxpc2lvbkJveCA9IChjb2xsaXNpb25Cb3hBcnJheS5nZXQoayk6IGFueSk7XG4gICAgICAgICAgICBjb2xsaXNpb25BcnJheXMudmVydGljYWxJY29uQm94ID0ge3gxOiBib3gueDEsIHkxOiBib3gueTEsIHgyOiBib3gueDIsIHkyOiBib3gueTIsIGFuY2hvclBvaW50WDogYm94LmFuY2hvclBvaW50WCwgYW5jaG9yUG9pbnRZOiBib3guYW5jaG9yUG9pbnRZfTtcbiAgICAgICAgICAgIGNvbGxpc2lvbkFycmF5cy52ZXJ0aWNhbEljb25GZWF0dXJlSW5kZXggPSBib3guZmVhdHVyZUluZGV4O1xuICAgICAgICAgICAgYnJlYWs7IC8vIE9ubHkgb25lIGJveCBhbGxvd2VkIHBlciBpbnN0YW5jZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2xsaXNpb25BcnJheXM7XG4gICAgfVxuXG4gICAgZGVzZXJpYWxpemVDb2xsaXNpb25Cb3hlcyhjb2xsaXNpb25Cb3hBcnJheTogQ29sbGlzaW9uQm94QXJyYXkpIHtcbiAgICAgICAgdGhpcy5jb2xsaXNpb25BcnJheXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnN5bWJvbEluc3RhbmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgc3ltYm9sSW5zdGFuY2UgPSB0aGlzLnN5bWJvbEluc3RhbmNlcy5nZXQoaSk7XG4gICAgICAgICAgICB0aGlzLmNvbGxpc2lvbkFycmF5cy5wdXNoKHRoaXMuX2Rlc2VyaWFsaXplQ29sbGlzaW9uQm94ZXNGb3JTeW1ib2woXG4gICAgICAgICAgICAgICAgY29sbGlzaW9uQm94QXJyYXksXG4gICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UudGV4dEJveFN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UudGV4dEJveEVuZEluZGV4LFxuICAgICAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsVGV4dEJveFN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UudmVydGljYWxUZXh0Qm94RW5kSW5kZXgsXG4gICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UuaWNvbkJveFN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UuaWNvbkJveEVuZEluZGV4LFxuICAgICAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsSWNvbkJveFN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UudmVydGljYWxJY29uQm94RW5kSW5kZXhcbiAgICAgICAgICAgICkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFzVGV4dERhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHQuc2VnbWVudHMuZ2V0KCkubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBoYXNJY29uRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWNvbi5zZWdtZW50cy5nZXQoKS5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIGhhc0RlYnVnRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dENvbGxpc2lvbkJveCAmJiB0aGlzLmljb25Db2xsaXNpb25Cb3g7XG4gICAgfVxuXG4gICAgaGFzVGV4dENvbGxpc2lvbkJveERhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhc0RlYnVnRGF0YSgpICYmIHRoaXMudGV4dENvbGxpc2lvbkJveC5zZWdtZW50cy5nZXQoKS5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIGhhc0ljb25Db2xsaXNpb25Cb3hEYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNEZWJ1Z0RhdGEoKSAmJiB0aGlzLmljb25Db2xsaXNpb25Cb3guc2VnbWVudHMuZ2V0KCkubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBhZGRJbmRpY2VzRm9yUGxhY2VkU3ltYm9sKGljb25PclRleHQ6IFN5bWJvbEJ1ZmZlcnMsIHBsYWNlZFN5bWJvbEluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgcGxhY2VkU3ltYm9sID0gaWNvbk9yVGV4dC5wbGFjZWRTeW1ib2xBcnJheS5nZXQocGxhY2VkU3ltYm9sSW5kZXgpO1xuXG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gcGxhY2VkU3ltYm9sLnZlcnRleFN0YXJ0SW5kZXggKyBwbGFjZWRTeW1ib2wubnVtR2x5cGhzICogNDtcbiAgICAgICAgZm9yIChsZXQgdmVydGV4SW5kZXggPSBwbGFjZWRTeW1ib2wudmVydGV4U3RhcnRJbmRleDsgdmVydGV4SW5kZXggPCBlbmRJbmRleDsgdmVydGV4SW5kZXggKz0gNCkge1xuICAgICAgICAgICAgaWNvbk9yVGV4dC5pbmRleEFycmF5LmVtcGxhY2VCYWNrKHZlcnRleEluZGV4LCB2ZXJ0ZXhJbmRleCArIDEsIHZlcnRleEluZGV4ICsgMik7XG4gICAgICAgICAgICBpY29uT3JUZXh0LmluZGV4QXJyYXkuZW1wbGFjZUJhY2sodmVydGV4SW5kZXggKyAxLCB2ZXJ0ZXhJbmRleCArIDIsIHZlcnRleEluZGV4ICsgMyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRTb3J0ZWRTeW1ib2xJbmRleGVzKGFuZ2xlOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuc29ydGVkQW5nbGUgPT09IGFuZ2xlICYmIHRoaXMuc3ltYm9sSW5zdGFuY2VJbmRleGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN5bWJvbEluc3RhbmNlSW5kZXhlcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzaW4gPSBNYXRoLnNpbihhbmdsZSk7XG4gICAgICAgIGNvbnN0IGNvcyA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICAgICAgY29uc3Qgcm90YXRlZFlzID0gW107XG4gICAgICAgIGNvbnN0IGZlYXR1cmVJbmRleGVzID0gW107XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zeW1ib2xJbnN0YW5jZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGkpO1xuICAgICAgICAgICAgY29uc3Qgc3ltYm9sSW5zdGFuY2UgPSB0aGlzLnN5bWJvbEluc3RhbmNlcy5nZXQoaSk7XG4gICAgICAgICAgICByb3RhdGVkWXMucHVzaChNYXRoLnJvdW5kKHNpbiAqIHN5bWJvbEluc3RhbmNlLmFuY2hvclggKyBjb3MgKiBzeW1ib2xJbnN0YW5jZS5hbmNob3JZKSB8IDApO1xuICAgICAgICAgICAgZmVhdHVyZUluZGV4ZXMucHVzaChzeW1ib2xJbnN0YW5jZS5mZWF0dXJlSW5kZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0LnNvcnQoKGFJbmRleCwgYkluZGV4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKHJvdGF0ZWRZc1thSW5kZXhdIC0gcm90YXRlZFlzW2JJbmRleF0pIHx8XG4gICAgICAgICAgICAgICAgICAgKGZlYXR1cmVJbmRleGVzW2JJbmRleF0gLSBmZWF0dXJlSW5kZXhlc1thSW5kZXhdKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBhZGRUb1NvcnRLZXlSYW5nZXMoc3ltYm9sSW5zdGFuY2VJbmRleDogbnVtYmVyLCBzb3J0S2V5OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbGFzdCA9IHRoaXMuc29ydEtleVJhbmdlc1t0aGlzLnNvcnRLZXlSYW5nZXMubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmIChsYXN0ICYmIGxhc3Quc29ydEtleSA9PT0gc29ydEtleSkge1xuICAgICAgICAgICAgbGFzdC5zeW1ib2xJbnN0YW5jZUVuZCA9IHN5bWJvbEluc3RhbmNlSW5kZXggKyAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zb3J0S2V5UmFuZ2VzLnB1c2goe1xuICAgICAgICAgICAgICAgIHNvcnRLZXksXG4gICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2VTdGFydDogc3ltYm9sSW5zdGFuY2VJbmRleCxcbiAgICAgICAgICAgICAgICBzeW1ib2xJbnN0YW5jZUVuZDogc3ltYm9sSW5zdGFuY2VJbmRleCArIDFcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc29ydEZlYXR1cmVzKGFuZ2xlOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNvcnRGZWF0dXJlc0J5WSkgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5zb3J0ZWRBbmdsZSA9PT0gYW5nbGUpIHJldHVybjtcblxuICAgICAgICAvLyBUaGUgY3VycmVudCBhcHByb2FjaCB0byBzb3J0aW5nIGRvZXNuJ3Qgc29ydCBhY3Jvc3Mgc2VnbWVudHMgc28gZG9uJ3QgdHJ5LlxuICAgICAgICAvLyBTb3J0aW5nIHdpdGhpbiBzZWdtZW50cyBzZXBhcmF0ZWx5IHNlZW1lZCBub3QgdG8gYmUgd29ydGggdGhlIGNvbXBsZXhpdHkuXG4gICAgICAgIGlmICh0aGlzLnRleHQuc2VnbWVudHMuZ2V0KCkubGVuZ3RoID4gMSB8fCB0aGlzLmljb24uc2VnbWVudHMuZ2V0KCkubGVuZ3RoID4gMSkgcmV0dXJuO1xuXG4gICAgICAgIC8vIElmIHRoZSBzeW1ib2xzIGFyZSBhbGxvd2VkIHRvIG92ZXJsYXAgc29ydCB0aGVtIGJ5IHRoZWlyIHZlcnRpY2FsIHNjcmVlbiBwb3NpdGlvbi5cbiAgICAgICAgLy8gVGhlIGluZGV4IGFycmF5IGJ1ZmZlciBpcyByZXdyaXR0ZW4gdG8gcmVmZXJlbmNlIHRoZSAodW5jaGFuZ2VkKSB2ZXJ0aWNlcyBpbiB0aGVcbiAgICAgICAgLy8gc29ydGVkIG9yZGVyLlxuXG4gICAgICAgIC8vIFRvIGF2b2lkIHNvcnRpbmcgdGhlIGFjdHVhbCBzeW1ib2xJbnN0YW5jZSBhcnJheSB3ZSBzb3J0IGFuIGFycmF5IG9mIGluZGV4ZXMuXG4gICAgICAgIHRoaXMuc3ltYm9sSW5zdGFuY2VJbmRleGVzID0gdGhpcy5nZXRTb3J0ZWRTeW1ib2xJbmRleGVzKGFuZ2xlKTtcbiAgICAgICAgdGhpcy5zb3J0ZWRBbmdsZSA9IGFuZ2xlO1xuXG4gICAgICAgIHRoaXMudGV4dC5pbmRleEFycmF5LmNsZWFyKCk7XG4gICAgICAgIHRoaXMuaWNvbi5pbmRleEFycmF5LmNsZWFyKCk7XG5cbiAgICAgICAgdGhpcy5mZWF0dXJlU29ydE9yZGVyID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBpIG9mIHRoaXMuc3ltYm9sSW5zdGFuY2VJbmRleGVzKSB7XG4gICAgICAgICAgICBjb25zdCBzeW1ib2xJbnN0YW5jZSA9IHRoaXMuc3ltYm9sSW5zdGFuY2VzLmdldChpKTtcbiAgICAgICAgICAgIHRoaXMuZmVhdHVyZVNvcnRPcmRlci5wdXNoKHN5bWJvbEluc3RhbmNlLmZlYXR1cmVJbmRleCk7XG5cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBzeW1ib2xJbnN0YW5jZS5yaWdodEp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxcbiAgICAgICAgICAgICAgICBzeW1ib2xJbnN0YW5jZS5jZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsXG4gICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UubGVmdEp1c3RpZmllZFRleHRTeW1ib2xJbmRleFxuICAgICAgICAgICAgXS5mb3JFYWNoKChpbmRleCwgaSwgYXJyYXkpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBPbmx5IGFkZCBhIGdpdmVuIGluZGV4IHRoZSBmaXJzdCB0aW1lIGl0IHNob3dzIHVwLFxuICAgICAgICAgICAgICAgIC8vIHRvIGF2b2lkIGR1cGxpY2F0ZSBvcGFjaXR5IGVudHJpZXMgd2hlbiBtdWx0aXBsZSBqdXN0aWZpY2F0aW9uc1xuICAgICAgICAgICAgICAgIC8vIHNoYXJlIHRoZSBzYW1lIGdseXBocy5cbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gMCAmJiBhcnJheS5pbmRleE9mKGluZGV4KSA9PT0gaSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEluZGljZXNGb3JQbGFjZWRTeW1ib2wodGhpcy50ZXh0LCBpbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRJbmRpY2VzRm9yUGxhY2VkU3ltYm9sKHRoaXMudGV4dCwgc3ltYm9sSW5zdGFuY2UudmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3ltYm9sSW5zdGFuY2UucGxhY2VkSWNvblN5bWJvbEluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEluZGljZXNGb3JQbGFjZWRTeW1ib2wodGhpcy5pY29uLCBzeW1ib2xJbnN0YW5jZS5wbGFjZWRJY29uU3ltYm9sSW5kZXgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3ltYm9sSW5zdGFuY2UudmVydGljYWxQbGFjZWRJY29uU3ltYm9sSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkSW5kaWNlc0ZvclBsYWNlZFN5bWJvbCh0aGlzLmljb24sIHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsUGxhY2VkSWNvblN5bWJvbEluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnRleHQuaW5kZXhCdWZmZXIpIHRoaXMudGV4dC5pbmRleEJ1ZmZlci51cGRhdGVEYXRhKHRoaXMudGV4dC5pbmRleEFycmF5KTtcbiAgICAgICAgaWYgKHRoaXMuaWNvbi5pbmRleEJ1ZmZlcikgdGhpcy5pY29uLmluZGV4QnVmZmVyLnVwZGF0ZURhdGEodGhpcy5pY29uLmluZGV4QXJyYXkpO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ1N5bWJvbEJ1Y2tldCcsIFN5bWJvbEJ1Y2tldCwge1xuICAgIG9taXQ6IFsnbGF5ZXJzJywgJ2NvbGxpc2lvbkJveEFycmF5JywgJ2ZlYXR1cmVzJywgJ2NvbXBhcmVUZXh0J11cbn0pO1xuXG4vLyB0aGlzIGNvbnN0YW50IGlzIGJhc2VkIG9uIHRoZSBzaXplIG9mIFN0cnVjdEFycmF5IGluZGV4ZXMgdXNlZCBpbiBhIHN5bWJvbFxuLy8gYnVja2V0LS1uYW1lbHksIGdseXBoT2Zmc2V0QXJyYXlTdGFydFxuLy8gZWcgdGhlIG1heCB2YWxpZCBVSW50MTYgaXMgNjUsNTM1XG4vLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzI5MDcgZm9yIG1vdGl2YXRpb25cbi8vIGxpbmVTdGFydEluZGV4IGFuZCB0ZXh0Qm94U3RhcnRJbmRleCBjb3VsZCBwb3RlbnRpYWxseSBiZSBjb25jZXJuc1xuLy8gYnV0IHdlIGV4cGVjdCB0aGVyZSB0byBiZSBtYW55IGZld2VyIGJveGVzL2xpbmVzIHRoYW4gZ2x5cGhzXG5TeW1ib2xCdWNrZXQuTUFYX0dMWVBIUyA9IDY1NTM1O1xuXG5TeW1ib2xCdWNrZXQuYWRkRHluYW1pY0F0dHJpYnV0ZXMgPSBhZGREeW5hbWljQXR0cmlidXRlcztcblxuZXhwb3J0IGRlZmF1bHQgU3ltYm9sQnVja2V0O1xuZXhwb3J0IHthZGREeW5hbWljQXR0cmlidXRlc307XG4iLCIvLyBAZmxvd1xuZXhwb3J0IGRlZmF1bHQgcmVzb2x2ZVRva2VucztcblxuLyoqXG4gKiBSZXBsYWNlIHRva2VucyBpbiBhIHN0cmluZyB0ZW1wbGF0ZSB3aXRoIHZhbHVlcyBpbiBhbiBvYmplY3RcbiAqXG4gKiBAcGFyYW0gcHJvcGVydGllcyBhIGtleS92YWx1ZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0b2tlbnMgYW5kIHJlcGxhY2VtZW50c1xuICogQHBhcmFtIHRleHQgdGhlIHRlbXBsYXRlIHN0cmluZ1xuICogQHJldHVybnMgdGhlIHRlbXBsYXRlIHdpdGggdG9rZW5zIHJlcGxhY2VkXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiByZXNvbHZlVG9rZW5zKHByb3BlcnRpZXM6IHsrW3N0cmluZ106IG1peGVkfSwgdGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGV4dC5yZXBsYWNlKC97KFtee31dKyl9L2csIChtYXRjaCwga2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIGtleSBpbiBwcm9wZXJ0aWVzID8gU3RyaW5nKHByb3BlcnRpZXNba2V5XSkgOiAnJztcbiAgICB9KTtcbn1cbiIsIi8vIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQuIEVkaXQgYnVpbGQvZ2VuZXJhdGUtc3R5bGUtY29kZS5qcywgdGhlbiBydW4gYHlhcm4gcnVuIGNvZGVnZW5gLlxuLy8gQGZsb3dcbi8qIGVzbGludC1kaXNhYmxlICovXG5cbmltcG9ydCBzdHlsZVNwZWMgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9yZWZlcmVuY2UvbGF0ZXN0JztcblxuaW1wb3J0IHtcbiAgICBQcm9wZXJ0aWVzLFxuICAgIERhdGFDb25zdGFudFByb3BlcnR5LFxuICAgIERhdGFEcml2ZW5Qcm9wZXJ0eSxcbiAgICBDcm9zc0ZhZGVkRGF0YURyaXZlblByb3BlcnR5LFxuICAgIENyb3NzRmFkZWRQcm9wZXJ0eSxcbiAgICBDb2xvclJhbXBQcm9wZXJ0eVxufSBmcm9tICcuLi9wcm9wZXJ0aWVzJztcblxuaW1wb3J0IHR5cGUgQ29sb3IgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy91dGlsL2NvbG9yJztcblxuaW1wb3J0IHR5cGUgRm9ybWF0dGVkIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9mb3JtYXR0ZWQnO1xuXG5pbXBvcnQgdHlwZSBSZXNvbHZlZEltYWdlIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5cbmltcG9ydCB7XG4gICAgQ29sb3JUeXBlXG59IGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIExheW91dFByb3BzID0ge3xcbiAgICBcInN5bWJvbC1wbGFjZW1lbnRcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJwb2ludFwiIHwgXCJsaW5lXCIgfCBcImxpbmUtY2VudGVyXCI+LFxuICAgIFwic3ltYm9sLXNwYWNpbmdcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbiAgICBcInN5bWJvbC1hdm9pZC1lZGdlc1wiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxib29sZWFuPixcbiAgICBcInN5bWJvbC1zb3J0LWtleVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcInN5bWJvbC16LW9yZGVyXCI6IERhdGFDb25zdGFudFByb3BlcnR5PFwiYXV0b1wiIHwgXCJ2aWV3cG9ydC15XCIgfCBcInNvdXJjZVwiPixcbiAgICBcImljb24tYWxsb3ctb3ZlcmxhcFwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxib29sZWFuPixcbiAgICBcImljb24taWdub3JlLXBsYWNlbWVudFwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxib29sZWFuPixcbiAgICBcImljb24tb3B0aW9uYWxcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8Ym9vbGVhbj4sXG4gICAgXCJpY29uLXJvdGF0aW9uLWFsaWdubWVudFwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxcIm1hcFwiIHwgXCJ2aWV3cG9ydFwiIHwgXCJhdXRvXCI+LFxuICAgIFwiaWNvbi1zaXplXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiaWNvbi10ZXh0LWZpdFwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxcIm5vbmVcIiB8IFwid2lkdGhcIiB8IFwiaGVpZ2h0XCIgfCBcImJvdGhcIj4sXG4gICAgXCJpY29uLXRleHQtZml0LXBhZGRpbmdcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8W251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0+LFxuICAgIFwiaWNvbi1pbWFnZVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8UmVzb2x2ZWRJbWFnZT4sXG4gICAgXCJpY29uLXJvdGF0ZVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcImljb24tcGFkZGluZ1wiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiaWNvbi1rZWVwLXVwcmlnaHRcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8Ym9vbGVhbj4sXG4gICAgXCJpY29uLW9mZnNldFwiOiBEYXRhRHJpdmVuUHJvcGVydHk8W251bWJlciwgbnVtYmVyXT4sXG4gICAgXCJpY29uLWFuY2hvclwiOiBEYXRhRHJpdmVuUHJvcGVydHk8XCJjZW50ZXJcIiB8IFwibGVmdFwiIHwgXCJyaWdodFwiIHwgXCJ0b3BcIiB8IFwiYm90dG9tXCIgfCBcInRvcC1sZWZ0XCIgfCBcInRvcC1yaWdodFwiIHwgXCJib3R0b20tbGVmdFwiIHwgXCJib3R0b20tcmlnaHRcIj4sXG4gICAgXCJpY29uLXBpdGNoLWFsaWdubWVudFwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxcIm1hcFwiIHwgXCJ2aWV3cG9ydFwiIHwgXCJhdXRvXCI+LFxuICAgIFwidGV4dC1waXRjaC1hbGlnbm1lbnRcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJtYXBcIiB8IFwidmlld3BvcnRcIiB8IFwiYXV0b1wiPixcbiAgICBcInRleHQtcm90YXRpb24tYWxpZ25tZW50XCI6IERhdGFDb25zdGFudFByb3BlcnR5PFwibWFwXCIgfCBcInZpZXdwb3J0XCIgfCBcImF1dG9cIj4sXG4gICAgXCJ0ZXh0LWZpZWxkXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxGb3JtYXR0ZWQ+LFxuICAgIFwidGV4dC1mb250XCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxBcnJheTxzdHJpbmc+PixcbiAgICBcInRleHQtc2l6ZVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcInRleHQtbWF4LXdpZHRoXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwidGV4dC1saW5lLWhlaWdodFwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwidGV4dC1sZXR0ZXItc3BhY2luZ1wiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcInRleHQtanVzdGlmeVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8XCJhdXRvXCIgfCBcImxlZnRcIiB8IFwiY2VudGVyXCIgfCBcInJpZ2h0XCI+LFxuICAgIFwidGV4dC1yYWRpYWwtb2Zmc2V0XCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwidGV4dC12YXJpYWJsZS1hbmNob3JcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8QXJyYXk8XCJjZW50ZXJcIiB8IFwibGVmdFwiIHwgXCJyaWdodFwiIHwgXCJ0b3BcIiB8IFwiYm90dG9tXCIgfCBcInRvcC1sZWZ0XCIgfCBcInRvcC1yaWdodFwiIHwgXCJib3R0b20tbGVmdFwiIHwgXCJib3R0b20tcmlnaHRcIj4+LFxuICAgIFwidGV4dC1hbmNob3JcIjogRGF0YURyaXZlblByb3BlcnR5PFwiY2VudGVyXCIgfCBcImxlZnRcIiB8IFwicmlnaHRcIiB8IFwidG9wXCIgfCBcImJvdHRvbVwiIHwgXCJ0b3AtbGVmdFwiIHwgXCJ0b3AtcmlnaHRcIiB8IFwiYm90dG9tLWxlZnRcIiB8IFwiYm90dG9tLXJpZ2h0XCI+LFxuICAgIFwidGV4dC1tYXgtYW5nbGVcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbiAgICBcInRleHQtd3JpdGluZy1tb2RlXCI6IERhdGFDb25zdGFudFByb3BlcnR5PEFycmF5PFwiaG9yaXpvbnRhbFwiIHwgXCJ2ZXJ0aWNhbFwiPj4sXG4gICAgXCJ0ZXh0LXJvdGF0ZVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcInRleHQtcGFkZGluZ1wiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwidGV4dC1rZWVwLXVwcmlnaHRcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8Ym9vbGVhbj4sXG4gICAgXCJ0ZXh0LXRyYW5zZm9ybVwiOiBEYXRhRHJpdmVuUHJvcGVydHk8XCJub25lXCIgfCBcInVwcGVyY2FzZVwiIHwgXCJsb3dlcmNhc2VcIj4sXG4gICAgXCJ0ZXh0LW9mZnNldFwiOiBEYXRhRHJpdmVuUHJvcGVydHk8W251bWJlciwgbnVtYmVyXT4sXG4gICAgXCJ0ZXh0LWFsbG93LW92ZXJsYXBcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8Ym9vbGVhbj4sXG4gICAgXCJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnRcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8Ym9vbGVhbj4sXG4gICAgXCJ0ZXh0LW9wdGlvbmFsXCI6IERhdGFDb25zdGFudFByb3BlcnR5PGJvb2xlYW4+LFxufH07XG5cbmNvbnN0IGxheW91dDogUHJvcGVydGllczxMYXlvdXRQcm9wcz4gPSBuZXcgUHJvcGVydGllcyh7XG4gICAgXCJzeW1ib2wtcGxhY2VtZW50XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1wic3ltYm9sLXBsYWNlbWVudFwiXSksXG4gICAgXCJzeW1ib2wtc3BhY2luZ1wiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInN5bWJvbC1zcGFjaW5nXCJdKSxcbiAgICBcInN5bWJvbC1hdm9pZC1lZGdlc1wiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInN5bWJvbC1hdm9pZC1lZGdlc1wiXSksXG4gICAgXCJzeW1ib2wtc29ydC1rZXlcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1wic3ltYm9sLXNvcnQta2V5XCJdKSxcbiAgICBcInN5bWJvbC16LW9yZGVyXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1wic3ltYm9sLXotb3JkZXJcIl0pLFxuICAgIFwiaWNvbi1hbGxvdy1vdmVybGFwXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1wiaWNvbi1hbGxvdy1vdmVybGFwXCJdKSxcbiAgICBcImljb24taWdub3JlLXBsYWNlbWVudFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcImljb24taWdub3JlLXBsYWNlbWVudFwiXSksXG4gICAgXCJpY29uLW9wdGlvbmFsXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1wiaWNvbi1vcHRpb25hbFwiXSksXG4gICAgXCJpY29uLXJvdGF0aW9uLWFsaWdubWVudFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcImljb24tcm90YXRpb24tYWxpZ25tZW50XCJdKSxcbiAgICBcImljb24tc2l6ZVwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJpY29uLXNpemVcIl0pLFxuICAgIFwiaWNvbi10ZXh0LWZpdFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcImljb24tdGV4dC1maXRcIl0pLFxuICAgIFwiaWNvbi10ZXh0LWZpdC1wYWRkaW5nXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1wiaWNvbi10ZXh0LWZpdC1wYWRkaW5nXCJdKSxcbiAgICBcImljb24taW1hZ2VcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1wiaWNvbi1pbWFnZVwiXSksXG4gICAgXCJpY29uLXJvdGF0ZVwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJpY29uLXJvdGF0ZVwiXSksXG4gICAgXCJpY29uLXBhZGRpbmdcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJpY29uLXBhZGRpbmdcIl0pLFxuICAgIFwiaWNvbi1rZWVwLXVwcmlnaHRcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJpY29uLWtlZXAtdXByaWdodFwiXSksXG4gICAgXCJpY29uLW9mZnNldFwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJpY29uLW9mZnNldFwiXSksXG4gICAgXCJpY29uLWFuY2hvclwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJpY29uLWFuY2hvclwiXSksXG4gICAgXCJpY29uLXBpdGNoLWFsaWdubWVudFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcImljb24tcGl0Y2gtYWxpZ25tZW50XCJdKSxcbiAgICBcInRleHQtcGl0Y2gtYWxpZ25tZW50XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1waXRjaC1hbGlnbm1lbnRcIl0pLFxuICAgIFwidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnRcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudFwiXSksXG4gICAgXCJ0ZXh0LWZpZWxkXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtZmllbGRcIl0pLFxuICAgIFwidGV4dC1mb250XCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtZm9udFwiXSksXG4gICAgXCJ0ZXh0LXNpemVcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1zaXplXCJdKSxcbiAgICBcInRleHQtbWF4LXdpZHRoXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtbWF4LXdpZHRoXCJdKSxcbiAgICBcInRleHQtbGluZS1oZWlnaHRcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJ0ZXh0LWxpbmUtaGVpZ2h0XCJdKSxcbiAgICBcInRleHQtbGV0dGVyLXNwYWNpbmdcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1sZXR0ZXItc3BhY2luZ1wiXSksXG4gICAgXCJ0ZXh0LWp1c3RpZnlcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1qdXN0aWZ5XCJdKSxcbiAgICBcInRleHQtcmFkaWFsLW9mZnNldFwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJ0ZXh0LXJhZGlhbC1vZmZzZXRcIl0pLFxuICAgIFwidGV4dC12YXJpYWJsZS1hbmNob3JcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJ0ZXh0LXZhcmlhYmxlLWFuY2hvclwiXSksXG4gICAgXCJ0ZXh0LWFuY2hvclwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcImxheW91dF9zeW1ib2xcIl1bXCJ0ZXh0LWFuY2hvclwiXSksXG4gICAgXCJ0ZXh0LW1heC1hbmdsZVwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtbWF4LWFuZ2xlXCJdKSxcbiAgICBcInRleHQtd3JpdGluZy1tb2RlXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC13cml0aW5nLW1vZGVcIl0pLFxuICAgIFwidGV4dC1yb3RhdGVcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1yb3RhdGVcIl0pLFxuICAgIFwidGV4dC1wYWRkaW5nXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1wYWRkaW5nXCJdKSxcbiAgICBcInRleHQta2VlcC11cHJpZ2h0XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1rZWVwLXVwcmlnaHRcIl0pLFxuICAgIFwidGV4dC10cmFuc2Zvcm1cIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC10cmFuc2Zvcm1cIl0pLFxuICAgIFwidGV4dC1vZmZzZXRcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1vZmZzZXRcIl0pLFxuICAgIFwidGV4dC1hbGxvdy1vdmVybGFwXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1hbGxvdy1vdmVybGFwXCJdKSxcbiAgICBcInRleHQtaWdub3JlLXBsYWNlbWVudFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wibGF5b3V0X3N5bWJvbFwiXVtcInRleHQtaWdub3JlLXBsYWNlbWVudFwiXSksXG4gICAgXCJ0ZXh0LW9wdGlvbmFsXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJsYXlvdXRfc3ltYm9sXCJdW1widGV4dC1vcHRpb25hbFwiXSksXG59KTtcblxuZXhwb3J0IHR5cGUgUGFpbnRQcm9wcyA9IHt8XG4gICAgXCJpY29uLW9wYWNpdHlcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJpY29uLWNvbG9yXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxDb2xvcj4sXG4gICAgXCJpY29uLWhhbG8tY29sb3JcIjogRGF0YURyaXZlblByb3BlcnR5PENvbG9yPixcbiAgICBcImljb24taGFsby13aWR0aFwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcImljb24taGFsby1ibHVyXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwiaWNvbi10cmFuc2xhdGVcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8W251bWJlciwgbnVtYmVyXT4sXG4gICAgXCJpY29uLXRyYW5zbGF0ZS1hbmNob3JcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJtYXBcIiB8IFwidmlld3BvcnRcIj4sXG4gICAgXCJ0ZXh0LW9wYWNpdHlcIjogRGF0YURyaXZlblByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJ0ZXh0LWNvbG9yXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxDb2xvcj4sXG4gICAgXCJ0ZXh0LWhhbG8tY29sb3JcIjogRGF0YURyaXZlblByb3BlcnR5PENvbG9yPixcbiAgICBcInRleHQtaGFsby13aWR0aFwiOiBEYXRhRHJpdmVuUHJvcGVydHk8bnVtYmVyPixcbiAgICBcInRleHQtaGFsby1ibHVyXCI6IERhdGFEcml2ZW5Qcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwidGV4dC10cmFuc2xhdGVcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8W251bWJlciwgbnVtYmVyXT4sXG4gICAgXCJ0ZXh0LXRyYW5zbGF0ZS1hbmNob3JcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJtYXBcIiB8IFwidmlld3BvcnRcIj4sXG58fTtcblxuY29uc3QgcGFpbnQ6IFByb3BlcnRpZXM8UGFpbnRQcm9wcz4gPSBuZXcgUHJvcGVydGllcyh7XG4gICAgXCJpY29uLW9wYWNpdHlcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9zeW1ib2xcIl1bXCJpY29uLW9wYWNpdHlcIl0pLFxuICAgIFwiaWNvbi1jb2xvclwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3N5bWJvbFwiXVtcImljb24tY29sb3JcIl0pLFxuICAgIFwiaWNvbi1oYWxvLWNvbG9yXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfc3ltYm9sXCJdW1wiaWNvbi1oYWxvLWNvbG9yXCJdKSxcbiAgICBcImljb24taGFsby13aWR0aFwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3N5bWJvbFwiXVtcImljb24taGFsby13aWR0aFwiXSksXG4gICAgXCJpY29uLWhhbG8tYmx1clwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3N5bWJvbFwiXVtcImljb24taGFsby1ibHVyXCJdKSxcbiAgICBcImljb24tdHJhbnNsYXRlXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9zeW1ib2xcIl1bXCJpY29uLXRyYW5zbGF0ZVwiXSksXG4gICAgXCJpY29uLXRyYW5zbGF0ZS1hbmNob3JcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3N5bWJvbFwiXVtcImljb24tdHJhbnNsYXRlLWFuY2hvclwiXSksXG4gICAgXCJ0ZXh0LW9wYWNpdHlcIjogbmV3IERhdGFEcml2ZW5Qcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9zeW1ib2xcIl1bXCJ0ZXh0LW9wYWNpdHlcIl0pLFxuICAgIFwidGV4dC1jb2xvclwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3N5bWJvbFwiXVtcInRleHQtY29sb3JcIl0sIHsgcnVudGltZVR5cGU6IENvbG9yVHlwZSwgZ2V0T3ZlcnJpZGU6IChvKSA9PiBvLnRleHRDb2xvciwgaGFzT3ZlcnJpZGU6IChvKSA9PiAhIW8udGV4dENvbG9yIH0pLFxuICAgIFwidGV4dC1oYWxvLWNvbG9yXCI6IG5ldyBEYXRhRHJpdmVuUHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfc3ltYm9sXCJdW1widGV4dC1oYWxvLWNvbG9yXCJdKSxcbiAgICBcInRleHQtaGFsby13aWR0aFwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3N5bWJvbFwiXVtcInRleHQtaGFsby13aWR0aFwiXSksXG4gICAgXCJ0ZXh0LWhhbG8tYmx1clwiOiBuZXcgRGF0YURyaXZlblByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3N5bWJvbFwiXVtcInRleHQtaGFsby1ibHVyXCJdKSxcbiAgICBcInRleHQtdHJhbnNsYXRlXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9zeW1ib2xcIl1bXCJ0ZXh0LXRyYW5zbGF0ZVwiXSksXG4gICAgXCJ0ZXh0LXRyYW5zbGF0ZS1hbmNob3JcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3N5bWJvbFwiXVtcInRleHQtdHJhbnNsYXRlLWFuY2hvclwiXSksXG59KTtcblxuLy8gTm90ZTogd2l0aG91dCBhZGRpbmcgdGhlIGV4cGxpY2l0IHR5cGUgYW5ub3RhdGlvbiwgRmxvdyBpbmZlcnMgd2Vha2VyIHR5cGVzXG4vLyBmb3IgdGhlc2Ugb2JqZWN0cyBmcm9tIHRoZWlyIHVzZSBpbiB0aGUgY29uc3RydWN0b3IgdG8gU3R5bGVMYXllciwgYXNcbi8vIHtsYXlvdXQ/OiBQcm9wZXJ0aWVzPC4uLj4sIHBhaW50OiBQcm9wZXJ0aWVzPC4uLj59XG5leHBvcnQgZGVmYXVsdCAoeyBwYWludCwgbGF5b3V0IH06ICRFeGFjdDx7XG4gIHBhaW50OiBQcm9wZXJ0aWVzPFBhaW50UHJvcHM+LCBsYXlvdXQ6IFByb3BlcnRpZXM8TGF5b3V0UHJvcHM+XG59Pik7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi4vZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSBFdmFsdWF0aW9uQ29udGV4dCBmcm9tICcuLi9ldmFsdWF0aW9uX2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1R5cGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHtab29tQ29uc3RhbnRFeHByZXNzaW9ufSBmcm9tICcuLi8uLi9leHByZXNzaW9uJztcbmltcG9ydCB7TnVsbFR5cGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7UG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlfSBmcm9tICcuLi8uLi8uLi9zdHlsZS9wcm9wZXJ0aWVzJztcbmltcG9ydCB7cmVnaXN0ZXJ9IGZyb20gJy4uLy4uLy4uL3V0aWwvd2ViX3dvcmtlcl90cmFuc2Zlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZvcm1hdFNlY3Rpb25PdmVycmlkZTxUPiBpbXBsZW1lbnRzIEV4cHJlc3Npb24ge1xuICAgIHR5cGU6IFR5cGU7XG4gICAgZGVmYXVsdFZhbHVlOiBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWU8VD47XG5cbiAgICBjb25zdHJ1Y3RvcihkZWZhdWx0VmFsdWU6IFBvc3NpYmx5RXZhbHVhdGVkUHJvcGVydHlWYWx1ZTxUPikge1xuICAgICAgICBhc3NlcnQoZGVmYXVsdFZhbHVlLnByb3BlcnR5Lm92ZXJyaWRlcyAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgdGhpcy50eXBlID0gZGVmYXVsdFZhbHVlLnByb3BlcnR5Lm92ZXJyaWRlcyA/IGRlZmF1bHRWYWx1ZS5wcm9wZXJ0eS5vdmVycmlkZXMucnVudGltZVR5cGUgOiBOdWxsVHlwZTtcbiAgICAgICAgdGhpcy5kZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgZXZhbHVhdGUoY3R4OiBFdmFsdWF0aW9uQ29udGV4dCkge1xuICAgICAgICBpZiAoY3R4LmZvcm1hdHRlZFNlY3Rpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IG92ZXJyaWRlcyA9IHRoaXMuZGVmYXVsdFZhbHVlLnByb3BlcnR5Lm92ZXJyaWRlcztcbiAgICAgICAgICAgIGlmIChvdmVycmlkZXMgJiYgb3ZlcnJpZGVzLmhhc092ZXJyaWRlKGN0eC5mb3JtYXR0ZWRTZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvdmVycmlkZXMuZ2V0T3ZlcnJpZGUoY3R4LmZvcm1hdHRlZFNlY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN0eC5mZWF0dXJlICYmIGN0eC5mZWF0dXJlU3RhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRWYWx1ZS5ldmFsdWF0ZShjdHguZmVhdHVyZSwgY3R4LmZlYXR1cmVTdGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0VmFsdWUucHJvcGVydHkuc3BlY2lmaWNhdGlvbi5kZWZhdWx0O1xuICAgIH1cblxuICAgIGVhY2hDaGlsZChmbjogKF86IEV4cHJlc3Npb24pID0+IHZvaWQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRlZmF1bHRWYWx1ZS5pc0NvbnN0YW50KCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cHI6IFpvb21Db25zdGFudEV4cHJlc3Npb248J3NvdXJjZSc+ID0gKCh0aGlzLmRlZmF1bHRWYWx1ZS52YWx1ZSk6IGFueSk7XG4gICAgICAgICAgICBmbihleHByLl9zdHlsZUV4cHJlc3Npb24uZXhwcmVzc2lvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDYW5ub3QgYmUgc3RhdGljYWxseSBldmFsdWF0ZWQsIGFzIHRoZSBvdXRwdXQgZGVwZW5kcyBvbiB0aGUgZXZhbHVhdGlvbiBjb250ZXh0LlxuICAgIG91dHB1dERlZmluZWQoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ0Zvcm1hdFNlY3Rpb25PdmVycmlkZScsIEZvcm1hdFNlY3Rpb25PdmVycmlkZSwge29taXQ6IFsnZGVmYXVsdFZhbHVlJ119KTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlX2xheWVyJztcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IFN5bWJvbEJ1Y2tldCBmcm9tICcuLi8uLi9kYXRhL2J1Y2tldC9zeW1ib2xfYnVja2V0JztcbmltcG9ydCByZXNvbHZlVG9rZW5zIGZyb20gJy4uLy4uL3V0aWwvcmVzb2x2ZV90b2tlbnMnO1xuaW1wb3J0IHByb3BlcnRpZXMgZnJvbSAnLi9zeW1ib2xfc3R5bGVfbGF5ZXJfcHJvcGVydGllcyc7XG5cbmltcG9ydCB7XG4gICAgVHJhbnNpdGlvbmFibGUsXG4gICAgVHJhbnNpdGlvbmluZyxcbiAgICBMYXlvdXQsXG4gICAgUG9zc2libHlFdmFsdWF0ZWQsXG4gICAgUG9zc2libHlFdmFsdWF0ZWRQcm9wZXJ0eVZhbHVlLFxuICAgIFByb3BlcnR5VmFsdWVcbn0gZnJvbSAnLi4vcHJvcGVydGllcyc7XG5cbmltcG9ydCB7XG4gICAgaXNFeHByZXNzaW9uLFxuICAgIFN0eWxlRXhwcmVzc2lvbixcbiAgICBab29tQ29uc3RhbnRFeHByZXNzaW9uLFxuICAgIFpvb21EZXBlbmRlbnRFeHByZXNzaW9uXG59IGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbic7XG5cbmltcG9ydCB0eXBlIHtCdWNrZXRQYXJhbWV0ZXJzfSBmcm9tICcuLi8uLi9kYXRhL2J1Y2tldCc7XG5pbXBvcnQgdHlwZSB7TGF5b3V0UHJvcHMsIFBhaW50UHJvcHN9IGZyb20gJy4vc3ltYm9sX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvblBhcmFtZXRlcnMgZnJvbSAnLi4vZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcbmltcG9ydCB0eXBlIHtMYXllclNwZWNpZmljYXRpb259IGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuaW1wb3J0IHR5cGUge0ZlYXR1cmUsIFNvdXJjZUV4cHJlc3Npb24sIENvbXBvc2l0ZUV4cHJlc3Npb259IGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbic7XG5pbXBvcnQgdHlwZSB7RXhwcmVzc2lvbn0gZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL2V4cHJlc3Npb24nO1xuaW1wb3J0IHR5cGUge0Nhbm9uaWNhbFRpbGVJRH0gZnJvbSAnLi4vLi4vc291cmNlL3RpbGVfaWQnO1xuaW1wb3J0IHtGb3JtYXR0ZWRUeXBlfSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMnO1xuaW1wb3J0IHt0eXBlT2Z9IGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi92YWx1ZXMnO1xuaW1wb3J0IEZvcm1hdHRlZCBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvZm9ybWF0dGVkJztcbmltcG9ydCBGb3JtYXRTZWN0aW9uT3ZlcnJpZGUgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL2Zvcm1hdF9zZWN0aW9uX292ZXJyaWRlJztcbmltcG9ydCBGb3JtYXRFeHByZXNzaW9uIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi9kZWZpbml0aW9ucy9mb3JtYXQnO1xuaW1wb3J0IExpdGVyYWwgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL2RlZmluaXRpb25zL2xpdGVyYWwnO1xuXG5jbGFzcyBTeW1ib2xTdHlsZUxheWVyIGV4dGVuZHMgU3R5bGVMYXllciB7XG4gICAgX3VuZXZhbHVhdGVkTGF5b3V0OiBMYXlvdXQ8TGF5b3V0UHJvcHM+O1xuICAgIGxheW91dDogUG9zc2libHlFdmFsdWF0ZWQ8TGF5b3V0UHJvcHM+O1xuXG4gICAgX3RyYW5zaXRpb25hYmxlUGFpbnQ6IFRyYW5zaXRpb25hYmxlPFBhaW50UHJvcHM+O1xuICAgIF90cmFuc2l0aW9uaW5nUGFpbnQ6IFRyYW5zaXRpb25pbmc8UGFpbnRQcm9wcz47XG4gICAgcGFpbnQ6IFBvc3NpYmx5RXZhbHVhdGVkPFBhaW50UHJvcHM+O1xuXG4gICAgY29uc3RydWN0b3IobGF5ZXI6IExheWVyU3BlY2lmaWNhdGlvbikge1xuICAgICAgICBzdXBlcihsYXllciwgcHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgcmVjYWxjdWxhdGUocGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMsIGF2YWlsYWJsZUltYWdlczogQXJyYXk8c3RyaW5nPikge1xuICAgICAgICBzdXBlci5yZWNhbGN1bGF0ZShwYXJhbWV0ZXJzLCBhdmFpbGFibGVJbWFnZXMpO1xuXG4gICAgICAgIGlmICh0aGlzLmxheW91dC5nZXQoJ2ljb24tcm90YXRpb24tYWxpZ25tZW50JykgPT09ICdhdXRvJykge1xuICAgICAgICAgICAgaWYgKHRoaXMubGF5b3V0LmdldCgnc3ltYm9sLXBsYWNlbWVudCcpICE9PSAncG9pbnQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXlvdXQuX3ZhbHVlc1snaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQnXSA9ICdtYXAnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxheW91dC5fdmFsdWVzWydpY29uLXJvdGF0aW9uLWFsaWdubWVudCddID0gJ3ZpZXdwb3J0JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmxheW91dC5nZXQoJ3RleHQtcm90YXRpb24tYWxpZ25tZW50JykgPT09ICdhdXRvJykge1xuICAgICAgICAgICAgaWYgKHRoaXMubGF5b3V0LmdldCgnc3ltYm9sLXBsYWNlbWVudCcpICE9PSAncG9pbnQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXlvdXQuX3ZhbHVlc1sndGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQnXSA9ICdtYXAnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxheW91dC5fdmFsdWVzWyd0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCddID0gJ3ZpZXdwb3J0JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHVuc3BlY2lmaWVkLCBgKi1waXRjaC1hbGlnbm1lbnRgIGluaGVyaXRzIGAqLXJvdGF0aW9uLWFsaWdubWVudGBcbiAgICAgICAgaWYgKHRoaXMubGF5b3V0LmdldCgndGV4dC1waXRjaC1hbGlnbm1lbnQnKSA9PT0gJ2F1dG8nKSB7XG4gICAgICAgICAgICB0aGlzLmxheW91dC5fdmFsdWVzWyd0ZXh0LXBpdGNoLWFsaWdubWVudCddID0gdGhpcy5sYXlvdXQuZ2V0KCd0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmxheW91dC5nZXQoJ2ljb24tcGl0Y2gtYWxpZ25tZW50JykgPT09ICdhdXRvJykge1xuICAgICAgICAgICAgdGhpcy5sYXlvdXQuX3ZhbHVlc1snaWNvbi1waXRjaC1hbGlnbm1lbnQnXSA9IHRoaXMubGF5b3V0LmdldCgnaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmxheW91dC5nZXQoJ3N5bWJvbC1wbGFjZW1lbnQnKSA9PT0gJ3BvaW50Jykge1xuICAgICAgICAgICAgY29uc3Qgd3JpdGluZ01vZGVzID0gdGhpcy5sYXlvdXQuZ2V0KCd0ZXh0LXdyaXRpbmctbW9kZScpO1xuICAgICAgICAgICAgaWYgKHdyaXRpbmdNb2Rlcykge1xuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBkdXBsaWNhdGVzLCBwcmVzZXJ2aW5nIG9yZGVyXG4gICAgICAgICAgICAgICAgY29uc3QgZGVkdXBlZCA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbSBvZiB3cml0aW5nTW9kZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlZHVwZWQuaW5kZXhPZihtKSA8IDApIGRlZHVwZWQucHVzaChtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5sYXlvdXQuX3ZhbHVlc1sndGV4dC13cml0aW5nLW1vZGUnXSA9IGRlZHVwZWQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubGF5b3V0Ll92YWx1ZXNbJ3RleHQtd3JpdGluZy1tb2RlJ10gPSBbJ2hvcml6b250YWwnXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NldFBhaW50T3ZlcnJpZGVzKCk7XG4gICAgfVxuXG4gICAgZ2V0VmFsdWVBbmRSZXNvbHZlVG9rZW5zKG5hbWU6ICosIGZlYXR1cmU6IEZlYXR1cmUsIGNhbm9uaWNhbDogQ2Fub25pY2FsVGlsZUlELCBhdmFpbGFibGVJbWFnZXM6IEFycmF5PHN0cmluZz4pIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmxheW91dC5nZXQobmFtZSkuZXZhbHVhdGUoZmVhdHVyZSwge30sIGNhbm9uaWNhbCwgYXZhaWxhYmxlSW1hZ2VzKTtcbiAgICAgICAgY29uc3QgdW5ldmFsdWF0ZWQgPSB0aGlzLl91bmV2YWx1YXRlZExheW91dC5fdmFsdWVzW25hbWVdO1xuICAgICAgICBpZiAoIXVuZXZhbHVhdGVkLmlzRGF0YURyaXZlbigpICYmICFpc0V4cHJlc3Npb24odW5ldmFsdWF0ZWQudmFsdWUpICYmIHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZVRva2VucyhmZWF0dXJlLnByb3BlcnRpZXMsIHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBjcmVhdGVCdWNrZXQocGFyYW1ldGVyczogQnVja2V0UGFyYW1ldGVyczwqPikge1xuICAgICAgICByZXR1cm4gbmV3IFN5bWJvbEJ1Y2tldChwYXJhbWV0ZXJzKTtcbiAgICB9XG5cbiAgICBxdWVyeVJhZGl1cygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBxdWVyeUludGVyc2VjdHNGZWF0dXJlKCk6IGJvb2xlYW4ge1xuICAgICAgICBhc3NlcnQoZmFsc2UpOyAvLyBTaG91bGQgdGFrZSBhIGRpZmZlcmVudCBwYXRoIGluIEZlYXR1cmVJbmRleFxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgX3NldFBhaW50T3ZlcnJpZGVzKCkge1xuICAgICAgICBmb3IgKGNvbnN0IG92ZXJyaWRhYmxlIG9mIHByb3BlcnRpZXMucGFpbnQub3ZlcnJpZGFibGVQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBpZiAoIVN5bWJvbFN0eWxlTGF5ZXIuaGFzUGFpbnRPdmVycmlkZSh0aGlzLmxheW91dCwgb3ZlcnJpZGFibGUpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBvdmVycmlkZW4gPSB0aGlzLnBhaW50LmdldChvdmVycmlkYWJsZSk7XG4gICAgICAgICAgICBjb25zdCBvdmVycmlkZSA9IG5ldyBGb3JtYXRTZWN0aW9uT3ZlcnJpZGUob3ZlcnJpZGVuKTtcbiAgICAgICAgICAgIGNvbnN0IHN0eWxlRXhwcmVzc2lvbiA9IG5ldyBTdHlsZUV4cHJlc3Npb24ob3ZlcnJpZGUsIG92ZXJyaWRlbi5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uKTtcbiAgICAgICAgICAgIGxldCBleHByZXNzaW9uID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChvdmVycmlkZW4udmFsdWUua2luZCA9PT0gJ2NvbnN0YW50JyB8fCBvdmVycmlkZW4udmFsdWUua2luZCA9PT0gJ3NvdXJjZScpIHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uID0gKG5ldyBab29tQ29uc3RhbnRFeHByZXNzaW9uKCdzb3VyY2UnLCBzdHlsZUV4cHJlc3Npb24pOiBTb3VyY2VFeHByZXNzaW9uKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbiA9IChuZXcgWm9vbURlcGVuZGVudEV4cHJlc3Npb24oJ2NvbXBvc2l0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVFeHByZXNzaW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlbi52YWx1ZS56b29tU3RvcHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGVuLnZhbHVlLl9pbnRlcnBvbGF0aW9uVHlwZSk6IENvbXBvc2l0ZUV4cHJlc3Npb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wYWludC5fdmFsdWVzW292ZXJyaWRhYmxlXSA9IG5ldyBQb3NzaWJseUV2YWx1YXRlZFByb3BlcnR5VmFsdWUob3ZlcnJpZGVuLnByb3BlcnR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlbi5wYXJhbWV0ZXJzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9oYW5kbGVPdmVycmlkYWJsZVBhaW50UHJvcGVydHlVcGRhdGU8VCwgUj4obmFtZTogc3RyaW5nLCBvbGRWYWx1ZTogUHJvcGVydHlWYWx1ZTxULCBSPiwgbmV3VmFsdWU6IFByb3BlcnR5VmFsdWU8VCwgUj4pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0aGlzLmxheW91dCB8fCBvbGRWYWx1ZS5pc0RhdGFEcml2ZW4oKSB8fCBuZXdWYWx1ZS5pc0RhdGFEcml2ZW4oKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBTeW1ib2xTdHlsZUxheWVyLmhhc1BhaW50T3ZlcnJpZGUodGhpcy5sYXlvdXQsIG5hbWUpO1xuICAgIH1cblxuICAgIHN0YXRpYyBoYXNQYWludE92ZXJyaWRlKGxheW91dDogUG9zc2libHlFdmFsdWF0ZWQ8TGF5b3V0UHJvcHM+LCBwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB0ZXh0RmllbGQgPSBsYXlvdXQuZ2V0KCd0ZXh0LWZpZWxkJyk7XG4gICAgICAgIGNvbnN0IHByb3BlcnR5ID0gcHJvcGVydGllcy5wYWludC5wcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV07XG4gICAgICAgIGxldCBoYXNPdmVycmlkZXMgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBjaGVja1NlY3Rpb25zID0gKHNlY3Rpb25zKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2Ygc2VjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkub3ZlcnJpZGVzICYmIHByb3BlcnR5Lm92ZXJyaWRlcy5oYXNPdmVycmlkZShzZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICBoYXNPdmVycmlkZXMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0ZXh0RmllbGQudmFsdWUua2luZCA9PT0gJ2NvbnN0YW50JyAmJiB0ZXh0RmllbGQudmFsdWUudmFsdWUgaW5zdGFuY2VvZiBGb3JtYXR0ZWQpIHtcbiAgICAgICAgICAgIGNoZWNrU2VjdGlvbnModGV4dEZpZWxkLnZhbHVlLnZhbHVlLnNlY3Rpb25zKTtcbiAgICAgICAgfSBlbHNlIGlmICh0ZXh0RmllbGQudmFsdWUua2luZCA9PT0gJ3NvdXJjZScpIHtcblxuICAgICAgICAgICAgY29uc3QgY2hlY2tFeHByZXNzaW9uID0gKGV4cHJlc3Npb246IEV4cHJlc3Npb24pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzT3ZlcnJpZGVzKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICBpZiAoZXhwcmVzc2lvbiBpbnN0YW5jZW9mIExpdGVyYWwgJiYgdHlwZU9mKGV4cHJlc3Npb24udmFsdWUpID09PSBGb3JtYXR0ZWRUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZDogRm9ybWF0dGVkID0gKChleHByZXNzaW9uLnZhbHVlKTogYW55KTtcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tTZWN0aW9ucyhmb3JtYXR0ZWQuc2VjdGlvbnMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbiBpbnN0YW5jZW9mIEZvcm1hdEV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tTZWN0aW9ucyhleHByZXNzaW9uLnNlY3Rpb25zKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uLmVhY2hDaGlsZChjaGVja0V4cHJlc3Npb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGV4cHI6IFpvb21Db25zdGFudEV4cHJlc3Npb248J3NvdXJjZSc+ID0gKCh0ZXh0RmllbGQudmFsdWUpOiBhbnkpO1xuICAgICAgICAgICAgaWYgKGV4cHIuX3N0eWxlRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgICAgIGNoZWNrRXhwcmVzc2lvbihleHByLl9zdHlsZUV4cHJlc3Npb24uZXhwcmVzc2lvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaGFzT3ZlcnJpZGVzO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3ltYm9sU3R5bGVMYXllcjtcbiIsIi8vIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQuIEVkaXQgYnVpbGQvZ2VuZXJhdGUtc3R5bGUtY29kZS5qcywgdGhlbiBydW4gYHlhcm4gcnVuIGNvZGVnZW5gLlxuLy8gQGZsb3dcbi8qIGVzbGludC1kaXNhYmxlICovXG5cbmltcG9ydCBzdHlsZVNwZWMgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9yZWZlcmVuY2UvbGF0ZXN0JztcblxuaW1wb3J0IHtcbiAgICBQcm9wZXJ0aWVzLFxuICAgIERhdGFDb25zdGFudFByb3BlcnR5LFxuICAgIERhdGFEcml2ZW5Qcm9wZXJ0eSxcbiAgICBDcm9zc0ZhZGVkRGF0YURyaXZlblByb3BlcnR5LFxuICAgIENyb3NzRmFkZWRQcm9wZXJ0eSxcbiAgICBDb2xvclJhbXBQcm9wZXJ0eVxufSBmcm9tICcuLi9wcm9wZXJ0aWVzJztcblxuaW1wb3J0IHR5cGUgQ29sb3IgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy91dGlsL2NvbG9yJztcblxuaW1wb3J0IHR5cGUgRm9ybWF0dGVkIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9mb3JtYXR0ZWQnO1xuXG5pbXBvcnQgdHlwZSBSZXNvbHZlZEltYWdlIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5cblxuZXhwb3J0IHR5cGUgUGFpbnRQcm9wcyA9IHt8XG4gICAgXCJiYWNrZ3JvdW5kLWNvbG9yXCI6IERhdGFDb25zdGFudFByb3BlcnR5PENvbG9yPixcbiAgICBcImJhY2tncm91bmQtcGF0dGVyblwiOiBDcm9zc0ZhZGVkUHJvcGVydHk8UmVzb2x2ZWRJbWFnZT4sXG4gICAgXCJiYWNrZ3JvdW5kLW9wYWNpdHlcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbnx9O1xuXG5jb25zdCBwYWludDogUHJvcGVydGllczxQYWludFByb3BzPiA9IG5ldyBQcm9wZXJ0aWVzKHtcbiAgICBcImJhY2tncm91bmQtY29sb3JcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2JhY2tncm91bmRcIl1bXCJiYWNrZ3JvdW5kLWNvbG9yXCJdKSxcbiAgICBcImJhY2tncm91bmQtcGF0dGVyblwiOiBuZXcgQ3Jvc3NGYWRlZFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X2JhY2tncm91bmRcIl1bXCJiYWNrZ3JvdW5kLXBhdHRlcm5cIl0pLFxuICAgIFwiYmFja2dyb3VuZC1vcGFjaXR5XCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9iYWNrZ3JvdW5kXCJdW1wiYmFja2dyb3VuZC1vcGFjaXR5XCJdKSxcbn0pO1xuXG4vLyBOb3RlOiB3aXRob3V0IGFkZGluZyB0aGUgZXhwbGljaXQgdHlwZSBhbm5vdGF0aW9uLCBGbG93IGluZmVycyB3ZWFrZXIgdHlwZXNcbi8vIGZvciB0aGVzZSBvYmplY3RzIGZyb20gdGhlaXIgdXNlIGluIHRoZSBjb25zdHJ1Y3RvciB0byBTdHlsZUxheWVyLCBhc1xuLy8ge2xheW91dD86IFByb3BlcnRpZXM8Li4uPiwgcGFpbnQ6IFByb3BlcnRpZXM8Li4uPn1cbmV4cG9ydCBkZWZhdWx0ICh7IHBhaW50IH06ICRFeGFjdDx7XG4gIHBhaW50OiBQcm9wZXJ0aWVzPFBhaW50UHJvcHM+XG59Pik7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZV9sYXllcic7XG5cbmltcG9ydCBwcm9wZXJ0aWVzIGZyb20gJy4vYmFja2dyb3VuZF9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzJztcbmltcG9ydCB7VHJhbnNpdGlvbmFibGUsIFRyYW5zaXRpb25pbmcsIFBvc3NpYmx5RXZhbHVhdGVkfSBmcm9tICcuLi9wcm9wZXJ0aWVzJztcblxuaW1wb3J0IHR5cGUge1BhaW50UHJvcHN9IGZyb20gJy4vYmFja2dyb3VuZF9zdHlsZV9sYXllcl9wcm9wZXJ0aWVzJztcbmltcG9ydCB0eXBlIHtMYXllclNwZWNpZmljYXRpb259IGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG5jbGFzcyBCYWNrZ3JvdW5kU3R5bGVMYXllciBleHRlbmRzIFN0eWxlTGF5ZXIge1xuICAgIF90cmFuc2l0aW9uYWJsZVBhaW50OiBUcmFuc2l0aW9uYWJsZTxQYWludFByb3BzPjtcbiAgICBfdHJhbnNpdGlvbmluZ1BhaW50OiBUcmFuc2l0aW9uaW5nPFBhaW50UHJvcHM+O1xuICAgIHBhaW50OiBQb3NzaWJseUV2YWx1YXRlZDxQYWludFByb3BzPjtcblxuICAgIGNvbnN0cnVjdG9yKGxheWVyOiBMYXllclNwZWNpZmljYXRpb24pIHtcbiAgICAgICAgc3VwZXIobGF5ZXIsIHByb3BlcnRpZXMpO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQmFja2dyb3VuZFN0eWxlTGF5ZXI7XG4iLCIvLyBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkLiBFZGl0IGJ1aWxkL2dlbmVyYXRlLXN0eWxlLWNvZGUuanMsIHRoZW4gcnVuIGB5YXJuIHJ1biBjb2RlZ2VuYC5cbi8vIEBmbG93XG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG5pbXBvcnQgc3R5bGVTcGVjIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvcmVmZXJlbmNlL2xhdGVzdCc7XG5cbmltcG9ydCB7XG4gICAgUHJvcGVydGllcyxcbiAgICBEYXRhQ29uc3RhbnRQcm9wZXJ0eSxcbiAgICBEYXRhRHJpdmVuUHJvcGVydHksXG4gICAgQ3Jvc3NGYWRlZERhdGFEcml2ZW5Qcm9wZXJ0eSxcbiAgICBDcm9zc0ZhZGVkUHJvcGVydHksXG4gICAgQ29sb3JSYW1wUHJvcGVydHlcbn0gZnJvbSAnLi4vcHJvcGVydGllcyc7XG5cbmltcG9ydCB0eXBlIENvbG9yIGZyb20gJy4uLy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5cbmltcG9ydCB0eXBlIEZvcm1hdHRlZCBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvZm9ybWF0dGVkJztcblxuaW1wb3J0IHR5cGUgUmVzb2x2ZWRJbWFnZSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvcmVzb2x2ZWRfaW1hZ2UnO1xuXG5cbmV4cG9ydCB0eXBlIFBhaW50UHJvcHMgPSB7fFxuICAgIFwicmFzdGVyLW9wYWNpdHlcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbiAgICBcInJhc3Rlci1odWUtcm90YXRlXCI6IERhdGFDb25zdGFudFByb3BlcnR5PG51bWJlcj4sXG4gICAgXCJyYXN0ZXItYnJpZ2h0bmVzcy1taW5cIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbiAgICBcInJhc3Rlci1icmlnaHRuZXNzLW1heFwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwicmFzdGVyLXNhdHVyYXRpb25cIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbiAgICBcInJhc3Rlci1jb250cmFzdFwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxudW1iZXI+LFxuICAgIFwicmFzdGVyLXJlc2FtcGxpbmdcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJsaW5lYXJcIiB8IFwibmVhcmVzdFwiPixcbiAgICBcInJhc3Rlci1mYWRlLWR1cmF0aW9uXCI6IERhdGFDb25zdGFudFByb3BlcnR5PG51bWJlcj4sXG58fTtcblxuY29uc3QgcGFpbnQ6IFByb3BlcnRpZXM8UGFpbnRQcm9wcz4gPSBuZXcgUHJvcGVydGllcyh7XG4gICAgXCJyYXN0ZXItb3BhY2l0eVwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfcmFzdGVyXCJdW1wicmFzdGVyLW9wYWNpdHlcIl0pLFxuICAgIFwicmFzdGVyLWh1ZS1yb3RhdGVcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3Jhc3RlclwiXVtcInJhc3Rlci1odWUtcm90YXRlXCJdKSxcbiAgICBcInJhc3Rlci1icmlnaHRuZXNzLW1pblwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfcmFzdGVyXCJdW1wicmFzdGVyLWJyaWdodG5lc3MtbWluXCJdKSxcbiAgICBcInJhc3Rlci1icmlnaHRuZXNzLW1heFwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfcmFzdGVyXCJdW1wicmFzdGVyLWJyaWdodG5lc3MtbWF4XCJdKSxcbiAgICBcInJhc3Rlci1zYXR1cmF0aW9uXCI6IG5ldyBEYXRhQ29uc3RhbnRQcm9wZXJ0eShzdHlsZVNwZWNbXCJwYWludF9yYXN0ZXJcIl1bXCJyYXN0ZXItc2F0dXJhdGlvblwiXSksXG4gICAgXCJyYXN0ZXItY29udHJhc3RcIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3Jhc3RlclwiXVtcInJhc3Rlci1jb250cmFzdFwiXSksXG4gICAgXCJyYXN0ZXItcmVzYW1wbGluZ1wiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjW1wicGFpbnRfcmFzdGVyXCJdW1wicmFzdGVyLXJlc2FtcGxpbmdcIl0pLFxuICAgIFwicmFzdGVyLWZhZGUtZHVyYXRpb25cIjogbmV3IERhdGFDb25zdGFudFByb3BlcnR5KHN0eWxlU3BlY1tcInBhaW50X3Jhc3RlclwiXVtcInJhc3Rlci1mYWRlLWR1cmF0aW9uXCJdKSxcbn0pO1xuXG4vLyBOb3RlOiB3aXRob3V0IGFkZGluZyB0aGUgZXhwbGljaXQgdHlwZSBhbm5vdGF0aW9uLCBGbG93IGluZmVycyB3ZWFrZXIgdHlwZXNcbi8vIGZvciB0aGVzZSBvYmplY3RzIGZyb20gdGhlaXIgdXNlIGluIHRoZSBjb25zdHJ1Y3RvciB0byBTdHlsZUxheWVyLCBhc1xuLy8ge2xheW91dD86IFByb3BlcnRpZXM8Li4uPiwgcGFpbnQ6IFByb3BlcnRpZXM8Li4uPn1cbmV4cG9ydCBkZWZhdWx0ICh7IHBhaW50IH06ICRFeGFjdDx7XG4gIHBhaW50OiBQcm9wZXJ0aWVzPFBhaW50UHJvcHM+XG59Pik7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZV9sYXllcic7XG5cbmltcG9ydCBwcm9wZXJ0aWVzIGZyb20gJy4vcmFzdGVyX3N0eWxlX2xheWVyX3Byb3BlcnRpZXMnO1xuaW1wb3J0IHtUcmFuc2l0aW9uYWJsZSwgVHJhbnNpdGlvbmluZywgUG9zc2libHlFdmFsdWF0ZWR9IGZyb20gJy4uL3Byb3BlcnRpZXMnO1xuXG5pbXBvcnQgdHlwZSB7UGFpbnRQcm9wc30gZnJvbSAnLi9yYXN0ZXJfc3R5bGVfbGF5ZXJfcHJvcGVydGllcyc7XG5pbXBvcnQgdHlwZSB7TGF5ZXJTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuY2xhc3MgUmFzdGVyU3R5bGVMYXllciBleHRlbmRzIFN0eWxlTGF5ZXIge1xuICAgIF90cmFuc2l0aW9uYWJsZVBhaW50OiBUcmFuc2l0aW9uYWJsZTxQYWludFByb3BzPjtcbiAgICBfdHJhbnNpdGlvbmluZ1BhaW50OiBUcmFuc2l0aW9uaW5nPFBhaW50UHJvcHM+O1xuICAgIHBhaW50OiBQb3NzaWJseUV2YWx1YXRlZDxQYWludFByb3BzPjtcblxuICAgIGNvbnN0cnVjdG9yKGxheWVyOiBMYXllclNwZWNpZmljYXRpb24pIHtcbiAgICAgICAgc3VwZXIobGF5ZXIsIHByb3BlcnRpZXMpO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUmFzdGVyU3R5bGVMYXllcjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi8uLi91aS9tYXAnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG50eXBlIEN1c3RvbVJlbmRlck1ldGhvZCA9IChnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0LCBtYXRyaXg6IEFycmF5PG51bWJlcj4pID0+IHZvaWQ7XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBjdXN0b20gc3R5bGUgbGF5ZXJzLiBUaGlzIGlzIGEgc3BlY2lmaWNhdGlvbiBmb3JcbiAqIGltcGxlbWVudGVycyB0byBtb2RlbDogaXQgaXMgbm90IGFuIGV4cG9ydGVkIG1ldGhvZCBvciBjbGFzcy5cbiAqXG4gKiBDdXN0b20gbGF5ZXJzIGFsbG93IGEgdXNlciB0byByZW5kZXIgZGlyZWN0bHkgaW50byB0aGUgbWFwJ3MgR0wgY29udGV4dCB1c2luZyB0aGUgbWFwJ3MgY2FtZXJhLlxuICogVGhlc2UgbGF5ZXJzIGNhbiBiZSBhZGRlZCBiZXR3ZWVuIGFueSByZWd1bGFyIGxheWVycyB1c2luZyB7QGxpbmsgTWFwI2FkZExheWVyfS5cbiAqXG4gKiBDdXN0b20gbGF5ZXJzIG11c3QgaGF2ZSBhIHVuaXF1ZSBgaWRgIGFuZCBtdXN0IGhhdmUgdGhlIGB0eXBlYCBvZiBgXCJjdXN0b21cImAuXG4gKiBUaGV5IG11c3QgaW1wbGVtZW50IGByZW5kZXJgIGFuZCBtYXkgaW1wbGVtZW50IGBwcmVyZW5kZXJgLCBgb25BZGRgIGFuZCBgb25SZW1vdmVgLlxuICogVGhleSBjYW4gdHJpZ2dlciByZW5kZXJpbmcgdXNpbmcge0BsaW5rIE1hcCN0cmlnZ2VyUmVwYWludH1cbiAqIGFuZCB0aGV5IHNob3VsZCBhcHByb3ByaWF0ZWx5IGhhbmRsZSB7QGxpbmsgTWFwLmV2ZW50OndlYmdsY29udGV4dGxvc3R9IGFuZFxuICoge0BsaW5rIE1hcC5ldmVudDp3ZWJnbGNvbnRleHRyZXN0b3JlZH0uXG4gKlxuICogVGhlIGByZW5kZXJpbmdNb2RlYCBwcm9wZXJ0eSBjb250cm9scyB3aGV0aGVyIHRoZSBsYXllciBpcyB0cmVhdGVkIGFzIGEgYFwiMmRcImAgb3IgYFwiM2RcImAgbWFwIGxheWVyLiBVc2U6XG4gKiAtIGBcInJlbmRlcmluZ01vZGVcIjogXCIzZFwiYCB0byB1c2UgdGhlIGRlcHRoIGJ1ZmZlciBhbmQgc2hhcmUgaXQgd2l0aCBvdGhlciBsYXllcnNcbiAqIC0gYFwicmVuZGVyaW5nTW9kZVwiOiBcIjJkXCJgIHRvIGFkZCBhIGxheWVyIHdpdGggbm8gZGVwdGguIElmIHlvdSBuZWVkIHRvIHVzZSB0aGUgZGVwdGggYnVmZmVyIGZvciBhIGBcIjJkXCJgIGxheWVyIHlvdSBtdXN0IHVzZSBhbiBvZmZzY3JlZW5cbiAqICAgZnJhbWVidWZmZXIgYW5kIHtAbGluayBDdXN0b21MYXllckludGVyZmFjZSNwcmVyZW5kZXJ9XG4gKlxuICogQGludGVyZmFjZSBDdXN0b21MYXllckludGVyZmFjZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlkIEEgdW5pcXVlIGxheWVyIGlkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGUgVGhlIGxheWVyJ3MgdHlwZS4gTXVzdCBiZSBgXCJjdXN0b21cImAuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcmVuZGVyaW5nTW9kZSBFaXRoZXIgYFwiMmRcImAgb3IgYFwiM2RcImAuIERlZmF1bHRzIHRvIGBcIjJkXCJgLlxuICogQGV4YW1wbGVcbiAqIC8vIEN1c3RvbSBsYXllciBpbXBsZW1lbnRlZCBhcyBFUzYgY2xhc3NcbiAqIGNsYXNzIE51bGxJc2xhbmRMYXllciB7XG4gKiAgICAgY29uc3RydWN0b3IoKSB7XG4gKiAgICAgICAgIHRoaXMuaWQgPSAnbnVsbC1pc2xhbmQnO1xuICogICAgICAgICB0aGlzLnR5cGUgPSAnY3VzdG9tJztcbiAqICAgICAgICAgdGhpcy5yZW5kZXJpbmdNb2RlID0gJzJkJztcbiAqICAgICB9XG4gKlxuICogICAgIG9uQWRkKG1hcCwgZ2wpIHtcbiAqICAgICAgICAgY29uc3QgdmVydGV4U291cmNlID0gYFxuICogICAgICAgICB1bmlmb3JtIG1hdDQgdV9tYXRyaXg7XG4gKiAgICAgICAgIHZvaWQgbWFpbigpIHtcbiAqICAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiB2ZWM0KDAuNSwgMC41LCAwLjAsIDEuMCk7XG4gKiAgICAgICAgICAgICBnbF9Qb2ludFNpemUgPSAyMC4wO1xuICogICAgICAgICB9YDtcbiAqXG4gKiAgICAgICAgIGNvbnN0IGZyYWdtZW50U291cmNlID0gYFxuICogICAgICAgICB2b2lkIG1haW4oKSB7XG4gKiAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCwgMC4wLCAwLjAsIDEuMCk7XG4gKiAgICAgICAgIH1gO1xuICpcbiAqICAgICAgICAgY29uc3QgdmVydGV4U2hhZGVyID0gZ2wuY3JlYXRlU2hhZGVyKGdsLlZFUlRFWF9TSEFERVIpO1xuICogICAgICAgICBnbC5zaGFkZXJTb3VyY2UodmVydGV4U2hhZGVyLCB2ZXJ0ZXhTb3VyY2UpO1xuICogICAgICAgICBnbC5jb21waWxlU2hhZGVyKHZlcnRleFNoYWRlcik7XG4gKiAgICAgICAgIGNvbnN0IGZyYWdtZW50U2hhZGVyID0gZ2wuY3JlYXRlU2hhZGVyKGdsLkZSQUdNRU5UX1NIQURFUik7XG4gKiAgICAgICAgIGdsLnNoYWRlclNvdXJjZShmcmFnbWVudFNoYWRlciwgZnJhZ21lbnRTb3VyY2UpO1xuICogICAgICAgICBnbC5jb21waWxlU2hhZGVyKGZyYWdtZW50U2hhZGVyKTtcbiAqXG4gKiAgICAgICAgIHRoaXMucHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTtcbiAqICAgICAgICAgZ2wuYXR0YWNoU2hhZGVyKHRoaXMucHJvZ3JhbSwgdmVydGV4U2hhZGVyKTtcbiAqICAgICAgICAgZ2wuYXR0YWNoU2hhZGVyKHRoaXMucHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXIpO1xuICogICAgICAgICBnbC5saW5rUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xuICogICAgIH1cbiAqXG4gKiAgICAgcmVuZGVyKGdsLCBtYXRyaXgpIHtcbiAqICAgICAgICAgZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xuICogICAgICAgICBnbC51bmlmb3JtTWF0cml4NGZ2KGdsLmdldFVuaWZvcm1Mb2NhdGlvbih0aGlzLnByb2dyYW0sIFwidV9tYXRyaXhcIiksIGZhbHNlLCBtYXRyaXgpO1xuICogICAgICAgICBnbC5kcmF3QXJyYXlzKGdsLlBPSU5UUywgMCwgMSk7XG4gKiAgICAgfVxuICogfVxuICpcbiAqIG1hcC5vbignbG9hZCcsIGZ1bmN0aW9uKCkge1xuICogICAgIG1hcC5hZGRMYXllcihuZXcgTnVsbElzbGFuZExheWVyKCkpO1xuICogfSk7XG4gKi9cblxuLyoqXG4gKiBPcHRpb25hbCBtZXRob2QgY2FsbGVkIHdoZW4gdGhlIGxheWVyIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBNYXAgd2l0aCB7QGxpbmsgTWFwI2FkZExheWVyfS4gVGhpc1xuICogZ2l2ZXMgdGhlIGxheWVyIGEgY2hhbmNlIHRvIGluaXRpYWxpemUgZ2wgcmVzb3VyY2VzIGFuZCByZWdpc3RlciBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgQ3VzdG9tTGF5ZXJJbnRlcmZhY2VcbiAqIEBpbnN0YW5jZVxuICogQG5hbWUgb25BZGRcbiAqIEBwYXJhbSB7TWFwfSBtYXAgVGhlIE1hcCB0aGlzIGN1c3RvbSBsYXllciB3YXMganVzdCBhZGRlZCB0by5cbiAqIEBwYXJhbSB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgZ2wgY29udGV4dCBmb3IgdGhlIG1hcC5cbiAqL1xuXG4vKipcbiAqIE9wdGlvbmFsIG1ldGhvZCBjYWxsZWQgd2hlbiB0aGUgbGF5ZXIgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBNYXAgd2l0aCB7QGxpbmsgTWFwI3JlbW92ZUxheWVyfS4gVGhpc1xuICogZ2l2ZXMgdGhlIGxheWVyIGEgY2hhbmNlIHRvIGNsZWFuIHVwIGdsIHJlc291cmNlcyBhbmQgZXZlbnQgbGlzdGVuZXJzLlxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIEN1c3RvbUxheWVySW50ZXJmYWNlXG4gKiBAaW5zdGFuY2VcbiAqIEBuYW1lIG9uUmVtb3ZlXG4gKiBAcGFyYW0ge01hcH0gbWFwIFRoZSBNYXAgdGhpcyBjdXN0b20gbGF5ZXIgd2FzIGp1c3QgYWRkZWQgdG8uXG4gKiBAcGFyYW0ge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIGdsIGNvbnRleHQgZm9yIHRoZSBtYXAuXG4gKi9cblxuLyoqXG4gKiBPcHRpb25hbCBtZXRob2QgY2FsbGVkIGR1cmluZyBhIHJlbmRlciBmcmFtZSB0byBhbGxvdyBhIGxheWVyIHRvIHByZXBhcmUgcmVzb3VyY2VzIG9yIHJlbmRlciBpbnRvIGEgdGV4dHVyZS5cbiAqXG4gKiBUaGUgbGF5ZXIgY2Fubm90IG1ha2UgYW55IGFzc3VtcHRpb25zIGFib3V0IHRoZSBjdXJyZW50IEdMIHN0YXRlIGFuZCBtdXN0IGJpbmQgYSBmcmFtZWJ1ZmZlciBiZWZvcmUgcmVuZGVyaW5nLlxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIEN1c3RvbUxheWVySW50ZXJmYWNlXG4gKiBAaW5zdGFuY2VcbiAqIEBuYW1lIHByZXJlbmRlclxuICogQHBhcmFtIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBtYXAncyBnbCBjb250ZXh0LlxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBtYXRyaXggVGhlIG1hcCdzIGNhbWVyYSBtYXRyaXguIEl0IHByb2plY3RzIHNwaGVyaWNhbCBtZXJjYXRvclxuICogY29vcmRpbmF0ZXMgdG8gZ2wgY29vcmRpbmF0ZXMuIFRoZSBtZXJjYXRvciBjb29yZGluYXRlIGBbMCwgMF1gIHJlcHJlc2VudHMgdGhlXG4gKiB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIG1lcmNhdG9yIHdvcmxkIGFuZCBgWzEsIDFdYCByZXByZXNlbnRzIHRoZSBib3R0b20gcmlnaHQgY29ybmVyLiBXaGVuXG4gKiB0aGUgYHJlbmRlcmluZ01vZGVgIGlzIGBcIjNkXCJgLCB0aGUgeiBjb29yZGluYXRlIGlzIGNvbmZvcm1hbC4gQSBib3ggd2l0aCBpZGVudGljYWwgeCwgeSwgYW5kIHpcbiAqIGxlbmd0aHMgaW4gbWVyY2F0b3IgdW5pdHMgd291bGQgYmUgcmVuZGVyZWQgYXMgYSBjdWJlLiB7QGxpbmsgTWVyY2F0b3JDb29yZGluYXRlfS5mcm9tTGF0TG5nXG4gKiBjYW4gYmUgdXNlZCB0byBwcm9qZWN0IGEgYExuZ0xhdGAgdG8gYSBtZXJjYXRvciBjb29yZGluYXRlLlxuICovXG5cbi8qKlxuICogQ2FsbGVkIGR1cmluZyBhIHJlbmRlciBmcmFtZSBhbGxvd2luZyB0aGUgbGF5ZXIgdG8gZHJhdyBpbnRvIHRoZSBHTCBjb250ZXh0LlxuICpcbiAqIFRoZSBsYXllciBjYW4gYXNzdW1lIGJsZW5kaW5nIGFuZCBkZXB0aCBzdGF0ZSBpcyBzZXQgdG8gYWxsb3cgdGhlIGxheWVyIHRvIHByb3Blcmx5XG4gKiBibGVuZCBhbmQgY2xpcCBvdGhlciBsYXllcnMuIFRoZSBsYXllciBjYW5ub3QgbWFrZSBhbnkgb3RoZXIgYXNzdW1wdGlvbnMgYWJvdXQgdGhlXG4gKiBjdXJyZW50IEdMIHN0YXRlLlxuICpcbiAqIElmIHRoZSBsYXllciBuZWVkcyB0byByZW5kZXIgdG8gYSB0ZXh0dXJlLCBpdCBzaG91bGQgaW1wbGVtZW50IHRoZSBgcHJlcmVuZGVyYCBtZXRob2RcbiAqIHRvIGRvIHRoaXMgYW5kIG9ubHkgdXNlIHRoZSBgcmVuZGVyYCBtZXRob2QgZm9yIGRyYXdpbmcgZGlyZWN0bHkgaW50byB0aGUgbWFpbiBmcmFtZWJ1ZmZlci5cbiAqXG4gKiBUaGUgYmxlbmQgZnVuY3Rpb24gaXMgc2V0IHRvIGBnbC5ibGVuZEZ1bmMoZ2wuT05FLCBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBKWAuIFRoaXMgZXhwZWN0c1xuICogY29sb3JzIHRvIGJlIHByb3ZpZGVkIGluIHByZW11bHRpcGxpZWQgYWxwaGEgZm9ybSB3aGVyZSB0aGUgYHJgLCBgZ2AgYW5kIGBiYCB2YWx1ZXMgYXJlIGFscmVhZHlcbiAqIG11bHRpcGxpZWQgYnkgdGhlIGBhYCB2YWx1ZS4gSWYgeW91IGFyZSB1bmFibGUgdG8gcHJvdmlkZSBjb2xvcnMgaW4gcHJlbXVsdGlwbGllZCBmb3JtIHlvdVxuICogbWF5IHdhbnQgdG8gY2hhbmdlIHRoZSBibGVuZCBmdW5jdGlvbiB0b1xuICogYGdsLmJsZW5kRnVuY1NlcGFyYXRlKGdsLlNSQ19BTFBIQSwgZ2wuT05FX01JTlVTX1NSQ19BTFBIQSwgZ2wuT05FLCBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBKWAuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgQ3VzdG9tTGF5ZXJJbnRlcmZhY2VcbiAqIEBpbnN0YW5jZVxuICogQG5hbWUgcmVuZGVyXG4gKiBAcGFyYW0ge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIG1hcCdzIGdsIGNvbnRleHQuXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IG1hdHJpeCBUaGUgbWFwJ3MgY2FtZXJhIG1hdHJpeC4gSXQgcHJvamVjdHMgc3BoZXJpY2FsIG1lcmNhdG9yXG4gKiBjb29yZGluYXRlcyB0byBnbCBjb29yZGluYXRlcy4gVGhlIHNwaGVyaWNhbCBtZXJjYXRvciBjb29yZGluYXRlIGBbMCwgMF1gIHJlcHJlc2VudHMgdGhlXG4gKiB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIG1lcmNhdG9yIHdvcmxkIGFuZCBgWzEsIDFdYCByZXByZXNlbnRzIHRoZSBib3R0b20gcmlnaHQgY29ybmVyLiBXaGVuXG4gKiB0aGUgYHJlbmRlcmluZ01vZGVgIGlzIGBcIjNkXCJgLCB0aGUgeiBjb29yZGluYXRlIGlzIGNvbmZvcm1hbC4gQSBib3ggd2l0aCBpZGVudGljYWwgeCwgeSwgYW5kIHpcbiAqIGxlbmd0aHMgaW4gbWVyY2F0b3IgdW5pdHMgd291bGQgYmUgcmVuZGVyZWQgYXMgYSBjdWJlLiB7QGxpbmsgTWVyY2F0b3JDb29yZGluYXRlfS5mcm9tTGF0TG5nXG4gKiBjYW4gYmUgdXNlZCB0byBwcm9qZWN0IGEgYExuZ0xhdGAgdG8gYSBtZXJjYXRvciBjb29yZGluYXRlLlxuICovXG5leHBvcnQgdHlwZSBDdXN0b21MYXllckludGVyZmFjZSA9IHtcbiAgICBpZDogc3RyaW5nLFxuICAgIHR5cGU6IFwiY3VzdG9tXCIsXG4gICAgcmVuZGVyaW5nTW9kZTogXCIyZFwiIHwgXCIzZFwiLFxuICAgIHJlbmRlcjogQ3VzdG9tUmVuZGVyTWV0aG9kLFxuICAgIHByZXJlbmRlcjogP0N1c3RvbVJlbmRlck1ldGhvZCxcbiAgICBvbkFkZDogPyhtYXA6IE1hcCwgZ2w6IFdlYkdMUmVuZGVyaW5nQ29udGV4dCkgPT4gdm9pZCxcbiAgICBvblJlbW92ZTogPyhtYXA6IE1hcCwgZ2w6IFdlYkdMUmVuZGVyaW5nQ29udGV4dCkgPT4gdm9pZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVDdXN0b21TdHlsZUxheWVyKGxheWVyT2JqZWN0OiBDdXN0b21MYXllckludGVyZmFjZSkge1xuICAgIGNvbnN0IGVycm9ycyA9IFtdO1xuICAgIGNvbnN0IGlkID0gbGF5ZXJPYmplY3QuaWQ7XG5cbiAgICBpZiAoaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlcnJvcnMucHVzaCh7XG4gICAgICAgICAgICBtZXNzYWdlOiBgbGF5ZXJzLiR7aWR9OiBtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5IFwiaWRcImBcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGxheWVyT2JqZWN0LnJlbmRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBsYXllcnMuJHtpZH06IG1pc3NpbmcgcmVxdWlyZWQgbWV0aG9kIFwicmVuZGVyXCJgXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChsYXllck9iamVjdC5yZW5kZXJpbmdNb2RlICYmXG4gICAgICAgIGxheWVyT2JqZWN0LnJlbmRlcmluZ01vZGUgIT09ICcyZCcgJiZcbiAgICAgICAgbGF5ZXJPYmplY3QucmVuZGVyaW5nTW9kZSAhPT0gJzNkJykge1xuICAgICAgICBlcnJvcnMucHVzaCh7XG4gICAgICAgICAgICBtZXNzYWdlOiBgbGF5ZXJzLiR7aWR9OiBwcm9wZXJ0eSBcInJlbmRlcmluZ01vZGVcIiBtdXN0IGJlIGVpdGhlciBcIjJkXCIgb3IgXCIzZFwiYFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xufVxuXG5jbGFzcyBDdXN0b21TdHlsZUxheWVyIGV4dGVuZHMgU3R5bGVMYXllciB7XG5cbiAgICBpbXBsZW1lbnRhdGlvbjogQ3VzdG9tTGF5ZXJJbnRlcmZhY2U7XG5cbiAgICBjb25zdHJ1Y3RvcihpbXBsZW1lbnRhdGlvbjogQ3VzdG9tTGF5ZXJJbnRlcmZhY2UpIHtcbiAgICAgICAgc3VwZXIoaW1wbGVtZW50YXRpb24sIHt9KTtcbiAgICAgICAgdGhpcy5pbXBsZW1lbnRhdGlvbiA9IGltcGxlbWVudGF0aW9uO1xuICAgIH1cblxuICAgIGlzM0QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmltcGxlbWVudGF0aW9uLnJlbmRlcmluZ01vZGUgPT09ICczZCc7XG4gICAgfVxuXG4gICAgaGFzT2Zmc2NyZWVuUGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW1wbGVtZW50YXRpb24ucHJlcmVuZGVyICE9PSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmVjYWxjdWxhdGUoKSB7fVxuICAgIHVwZGF0ZVRyYW5zaXRpb25zKCkge31cbiAgICBoYXNUcmFuc2l0aW9uKCkge31cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgYXNzZXJ0KGZhbHNlLCBcIkN1c3RvbSBsYXllcnMgY2Fubm90IGJlIHNlcmlhbGl6ZWRcIik7XG4gICAgfVxuXG4gICAgb25BZGQobWFwOiBNYXApIHtcbiAgICAgICAgaWYgKHRoaXMuaW1wbGVtZW50YXRpb24ub25BZGQpIHtcbiAgICAgICAgICAgIHRoaXMuaW1wbGVtZW50YXRpb24ub25BZGQobWFwLCBtYXAucGFpbnRlci5jb250ZXh0LmdsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUmVtb3ZlKG1hcDogTWFwKSB7XG4gICAgICAgIGlmICh0aGlzLmltcGxlbWVudGF0aW9uLm9uUmVtb3ZlKSB7XG4gICAgICAgICAgICB0aGlzLmltcGxlbWVudGF0aW9uLm9uUmVtb3ZlKG1hcCwgbWFwLnBhaW50ZXIuY29udGV4dC5nbCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEN1c3RvbVN0eWxlTGF5ZXI7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgY2lyY2xlIGZyb20gJy4vc3R5bGVfbGF5ZXIvY2lyY2xlX3N0eWxlX2xheWVyJztcbmltcG9ydCBoZWF0bWFwIGZyb20gJy4vc3R5bGVfbGF5ZXIvaGVhdG1hcF9zdHlsZV9sYXllcic7XG5pbXBvcnQgaGlsbHNoYWRlIGZyb20gJy4vc3R5bGVfbGF5ZXIvaGlsbHNoYWRlX3N0eWxlX2xheWVyJztcbmltcG9ydCBmaWxsIGZyb20gJy4vc3R5bGVfbGF5ZXIvZmlsbF9zdHlsZV9sYXllcic7XG5pbXBvcnQgZmlsbEV4dHJ1c2lvbiBmcm9tICcuL3N0eWxlX2xheWVyL2ZpbGxfZXh0cnVzaW9uX3N0eWxlX2xheWVyJztcbmltcG9ydCBsaW5lIGZyb20gJy4vc3R5bGVfbGF5ZXIvbGluZV9zdHlsZV9sYXllcic7XG5pbXBvcnQgc3ltYm9sIGZyb20gJy4vc3R5bGVfbGF5ZXIvc3ltYm9sX3N0eWxlX2xheWVyJztcbmltcG9ydCBiYWNrZ3JvdW5kIGZyb20gJy4vc3R5bGVfbGF5ZXIvYmFja2dyb3VuZF9zdHlsZV9sYXllcic7XG5pbXBvcnQgcmFzdGVyIGZyb20gJy4vc3R5bGVfbGF5ZXIvcmFzdGVyX3N0eWxlX2xheWVyJztcbmltcG9ydCBDdXN0b21TdHlsZUxheWVyIGZyb20gJy4vc3R5bGVfbGF5ZXIvY3VzdG9tX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIHtDdXN0b21MYXllckludGVyZmFjZX0gZnJvbSAnLi9zdHlsZV9sYXllci9jdXN0b21fc3R5bGVfbGF5ZXInO1xuXG5pbXBvcnQgdHlwZSB7TGF5ZXJTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuY29uc3Qgc3ViY2xhc3NlcyA9IHtcbiAgICBjaXJjbGUsXG4gICAgaGVhdG1hcCxcbiAgICBoaWxsc2hhZGUsXG4gICAgZmlsbCxcbiAgICAnZmlsbC1leHRydXNpb24nOiBmaWxsRXh0cnVzaW9uLFxuICAgIGxpbmUsXG4gICAgc3ltYm9sLFxuICAgIGJhY2tncm91bmQsXG4gICAgcmFzdGVyXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVTdHlsZUxheWVyKGxheWVyOiBMYXllclNwZWNpZmljYXRpb24gfCBDdXN0b21MYXllckludGVyZmFjZSkge1xuICAgIGlmIChsYXllci50eXBlID09PSAnY3VzdG9tJykge1xuICAgICAgICByZXR1cm4gbmV3IEN1c3RvbVN0eWxlTGF5ZXIobGF5ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgc3ViY2xhc3Nlc1tsYXllci50eXBlXShsYXllcik7XG4gICAgfVxufVxuXG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgd2luZG93IGZyb20gJy4uL3V0aWwvd2luZG93JztcbmNvbnN0IHtIVE1MSW1hZ2VFbGVtZW50LCBIVE1MQ2FudmFzRWxlbWVudCwgSFRNTFZpZGVvRWxlbWVudCwgSW1hZ2VEYXRhLCBJbWFnZUJpdG1hcH0gPSB3aW5kb3c7XG5cbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7UkdCQUltYWdlLCBBbHBoYUltYWdlfSBmcm9tICcuLi91dGlsL2ltYWdlJztcblxuZXhwb3J0IHR5cGUgVGV4dHVyZUZvcm1hdCA9XG4gICAgfCAkUHJvcGVydHlUeXBlPFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgJ1JHQkEnPlxuICAgIHwgJFByb3BlcnR5VHlwZTxXZWJHTFJlbmRlcmluZ0NvbnRleHQsICdBTFBIQSc+O1xuZXhwb3J0IHR5cGUgVGV4dHVyZUZpbHRlciA9XG4gICAgfCAkUHJvcGVydHlUeXBlPFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgJ0xJTkVBUic+XG4gICAgfCAkUHJvcGVydHlUeXBlPFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgJ0xJTkVBUl9NSVBNQVBfTkVBUkVTVCc+XG4gICAgfCAkUHJvcGVydHlUeXBlPFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgJ05FQVJFU1QnPjtcbmV4cG9ydCB0eXBlIFRleHR1cmVXcmFwID1cbiAgICB8ICRQcm9wZXJ0eVR5cGU8V2ViR0xSZW5kZXJpbmdDb250ZXh0LCAnUkVQRUFUJz5cbiAgICB8ICRQcm9wZXJ0eVR5cGU8V2ViR0xSZW5kZXJpbmdDb250ZXh0LCAnQ0xBTVBfVE9fRURHRSc+XG4gICAgfCAkUHJvcGVydHlUeXBlPFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgJ01JUlJPUkVEX1JFUEVBVCc+O1xuXG50eXBlIEVtcHR5SW1hZ2UgPSB7XG4gICAgd2lkdGg6IG51bWJlcixcbiAgICBoZWlnaHQ6IG51bWJlcixcbiAgICBkYXRhOiBudWxsXG59XG5cbmV4cG9ydCB0eXBlIFRleHR1cmVJbWFnZSA9XG4gICAgfCBSR0JBSW1hZ2VcbiAgICB8IEFscGhhSW1hZ2VcbiAgICB8IEhUTUxJbWFnZUVsZW1lbnRcbiAgICB8IEhUTUxDYW52YXNFbGVtZW50XG4gICAgfCBIVE1MVmlkZW9FbGVtZW50XG4gICAgfCBJbWFnZURhdGFcbiAgICB8IEVtcHR5SW1hZ2VcbiAgICB8IEltYWdlQml0bWFwO1xuXG5jbGFzcyBUZXh0dXJlIHtcbiAgICBjb250ZXh0OiBDb250ZXh0O1xuICAgIHNpemU6IFtudW1iZXIsIG51bWJlcl07XG4gICAgdGV4dHVyZTogV2ViR0xUZXh0dXJlO1xuICAgIGZvcm1hdDogVGV4dHVyZUZvcm1hdDtcbiAgICBmaWx0ZXI6ID9UZXh0dXJlRmlsdGVyO1xuICAgIHdyYXA6ID9UZXh0dXJlV3JhcDtcbiAgICB1c2VNaXBtYXA6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCBpbWFnZTogVGV4dHVyZUltYWdlLCBmb3JtYXQ6IFRleHR1cmVGb3JtYXQsIG9wdGlvbnM6ID97IHByZW11bHRpcGx5PzogYm9vbGVhbiwgdXNlTWlwbWFwPzogYm9vbGVhbiB9KSB7XG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICAgIHRoaXMuZm9ybWF0ID0gZm9ybWF0O1xuICAgICAgICB0aGlzLnRleHR1cmUgPSBjb250ZXh0LmdsLmNyZWF0ZVRleHR1cmUoKTtcbiAgICAgICAgdGhpcy51cGRhdGUoaW1hZ2UsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHVwZGF0ZShpbWFnZTogVGV4dHVyZUltYWdlLCBvcHRpb25zOiA/e3ByZW11bHRpcGx5PzogYm9vbGVhbiwgdXNlTWlwbWFwPzogYm9vbGVhbn0sIHBvc2l0aW9uPzogeyB4OiBudW1iZXIsIHk6IG51bWJlciB9KSB7XG4gICAgICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IGltYWdlO1xuICAgICAgICBjb25zdCByZXNpemUgPSAoIXRoaXMuc2l6ZSB8fCB0aGlzLnNpemVbMF0gIT09IHdpZHRoIHx8IHRoaXMuc2l6ZVsxXSAhPT0gaGVpZ2h0KSAmJiAhcG9zaXRpb247XG4gICAgICAgIGNvbnN0IHtjb250ZXh0fSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHtnbH0gPSBjb250ZXh0O1xuXG4gICAgICAgIHRoaXMudXNlTWlwbWFwID0gQm9vbGVhbihvcHRpb25zICYmIG9wdGlvbnMudXNlTWlwbWFwKTtcbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGhpcy50ZXh0dXJlKTtcblxuICAgICAgICBjb250ZXh0LnBpeGVsU3RvcmVVbnBhY2tGbGlwWS5zZXQoZmFsc2UpO1xuICAgICAgICBjb250ZXh0LnBpeGVsU3RvcmVVbnBhY2suc2V0KDEpO1xuICAgICAgICBjb250ZXh0LnBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhLnNldCh0aGlzLmZvcm1hdCA9PT0gZ2wuUkdCQSAmJiAoIW9wdGlvbnMgfHwgb3B0aW9ucy5wcmVtdWx0aXBseSAhPT0gZmFsc2UpKTtcblxuICAgICAgICBpZiAocmVzaXplKSB7XG4gICAgICAgICAgICB0aGlzLnNpemUgPSBbd2lkdGgsIGhlaWdodF07XG5cbiAgICAgICAgICAgIGlmIChpbWFnZSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQgfHwgaW1hZ2UgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCB8fCBpbWFnZSBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnQgfHwgaW1hZ2UgaW5zdGFuY2VvZiBJbWFnZURhdGEgfHwgKEltYWdlQml0bWFwICYmIGltYWdlIGluc3RhbmNlb2YgSW1hZ2VCaXRtYXApKSB7XG4gICAgICAgICAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgdGhpcy5mb3JtYXQsIGdsLlVOU0lHTkVEX0JZVEUsIGltYWdlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB0aGlzLmZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgdGhpcy5mb3JtYXQsIGdsLlVOU0lHTkVEX0JZVEUsIGltYWdlLmRhdGEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB7eCwgeX0gPSBwb3NpdGlvbiB8fCB7eDogMCwgeTogMH07XG4gICAgICAgICAgICBpZiAoaW1hZ2UgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50IHx8IGltYWdlIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQgfHwgaW1hZ2UgaW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50IHx8IGltYWdlIGluc3RhbmNlb2YgSW1hZ2VEYXRhIHx8IChJbWFnZUJpdG1hcCAmJiBpbWFnZSBpbnN0YW5jZW9mIEltYWdlQml0bWFwKSkge1xuICAgICAgICAgICAgICAgIGdsLnRleFN1YkltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgeCwgeSwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgaW1hZ2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBnbC50ZXhTdWJJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGltYWdlLmRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudXNlTWlwbWFwICYmIHRoaXMuaXNTaXplUG93ZXJPZlR3bygpKSB7XG4gICAgICAgICAgICBnbC5nZW5lcmF0ZU1pcG1hcChnbC5URVhUVVJFXzJEKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGJpbmQoZmlsdGVyOiBUZXh0dXJlRmlsdGVyLCB3cmFwOiBUZXh0dXJlV3JhcCwgbWluRmlsdGVyOiA/VGV4dHVyZUZpbHRlcikge1xuICAgICAgICBjb25zdCB7Y29udGV4dH0gPSB0aGlzO1xuICAgICAgICBjb25zdCB7Z2x9ID0gY29udGV4dDtcbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGhpcy50ZXh0dXJlKTtcblxuICAgICAgICBpZiAobWluRmlsdGVyID09PSBnbC5MSU5FQVJfTUlQTUFQX05FQVJFU1QgJiYgIXRoaXMuaXNTaXplUG93ZXJPZlR3bygpKSB7XG4gICAgICAgICAgICBtaW5GaWx0ZXIgPSBnbC5MSU5FQVI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsdGVyICE9PSB0aGlzLmZpbHRlcikge1xuICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGZpbHRlcik7XG4gICAgICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgbWluRmlsdGVyIHx8IGZpbHRlcik7XG4gICAgICAgICAgICB0aGlzLmZpbHRlciA9IGZpbHRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh3cmFwICE9PSB0aGlzLndyYXApIHtcbiAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIHdyYXApO1xuICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgd3JhcCk7XG4gICAgICAgICAgICB0aGlzLndyYXAgPSB3cmFwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNTaXplUG93ZXJPZlR3bygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2l6ZVswXSA9PT0gdGhpcy5zaXplWzFdICYmIChNYXRoLmxvZyh0aGlzLnNpemVbMF0pIC8gTWF0aC5MTjIpICUgMSA9PT0gMDtcbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBjb25zdCB7Z2x9ID0gdGhpcy5jb250ZXh0O1xuICAgICAgICBnbC5kZWxldGVUZXh0dXJlKHRoaXMudGV4dHVyZSk7XG4gICAgICAgIHRoaXMudGV4dHVyZSA9IChudWxsOiBhbnkpO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVGV4dHVyZTtcbiIsIi8vIEBmbG93XG5cbi8qKlxuICogSW52b2tlcyB0aGUgd3JhcHBlZCBmdW5jdGlvbiBpbiBhIG5vbi1ibG9ja2luZyB3YXkgd2hlbiB0cmlnZ2VyKCkgaXMgY2FsbGVkLiBJbnZvY2F0aW9uIHJlcXVlc3RzXG4gKiBhcmUgaWdub3JlZCB1bnRpbCB0aGUgZnVuY3Rpb24gd2FzIGFjdHVhbGx5IGludm9rZWQuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgVGhyb3R0bGVkSW52b2tlciB7XG4gICAgX2NoYW5uZWw6IE1lc3NhZ2VDaGFubmVsO1xuICAgIF90cmlnZ2VyZWQ6IGJvb2xlYW47XG4gICAgX2NhbGxiYWNrOiBGdW5jdGlvblxuXG4gICAgY29uc3RydWN0b3IoY2FsbGJhY2s6IEZ1bmN0aW9uKSB7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgIHRoaXMuX3RyaWdnZXJlZCA9IGZhbHNlO1xuICAgICAgICBpZiAodHlwZW9mIE1lc3NhZ2VDaGFubmVsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgICAgICAgICAgdGhpcy5fY2hhbm5lbC5wb3J0Mi5vbm1lc3NhZ2UgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlcmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0cmlnZ2VyKCkge1xuICAgICAgICBpZiAoIXRoaXMuX3RyaWdnZXJlZCkge1xuICAgICAgICAgICAgdGhpcy5fdHJpZ2dlcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbC5wb3J0MS5wb3N0TWVzc2FnZSh0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVtb3ZlKCkge1xuICAgICAgICBkZWxldGUgdGhpcy5fY2hhbm5lbDtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2sgPSAoKSA9PiB7fTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRocm90dGxlZEludm9rZXI7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2JpbmRBbGwsIGlzV29ya2VyLCBpc1NhZmFyaX0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB3aW5kb3cgZnJvbSAnLi93aW5kb3cnO1xuaW1wb3J0IHtzZXJpYWxpemUsIGRlc2VyaWFsaXplfSBmcm9tICcuL3dlYl93b3JrZXJfdHJhbnNmZXInO1xuaW1wb3J0IFRocm90dGxlZEludm9rZXIgZnJvbSAnLi90aHJvdHRsZWRfaW52b2tlcic7XG5cbmltcG9ydCB0eXBlIHtUcmFuc2ZlcmFibGV9IGZyb20gJy4uL3R5cGVzL3RyYW5zZmVyYWJsZSc7XG5pbXBvcnQgdHlwZSB7Q2FuY2VsYWJsZX0gZnJvbSAnLi4vdHlwZXMvY2FuY2VsYWJsZSc7XG5cbi8qKlxuICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFtBY3RvciBkZXNpZ24gcGF0dGVybl0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9BY3Rvcl9tb2RlbClcbiAqIHRoYXQgbWFpbnRhaW5zIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBhc3luY2hyb25vdXMgdGFza3MgYW5kIHRoZSBvYmplY3RzXG4gKiB0aGF0IHNwaW4gdGhlbSBvZmYgLSBpbiB0aGlzIGNhc2UsIHRhc2tzIGxpa2UgcGFyc2luZyBwYXJ0cyBvZiBzdHlsZXMsXG4gKiBvd25lZCBieSB0aGUgc3R5bGVzXG4gKlxuICogQHBhcmFtIHtXZWJXb3JrZXJ9IHRhcmdldFxuICogQHBhcmFtIHtXZWJXb3JrZXJ9IHBhcmVudFxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBtYXBJZCBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgTWFwIGluc3RhbmNlIHVzaW5nIHRoaXMgQWN0b3IuXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBBY3RvciB7XG4gICAgdGFyZ2V0OiBhbnk7XG4gICAgcGFyZW50OiBhbnk7XG4gICAgbWFwSWQ6ID9udW1iZXI7XG4gICAgY2FsbGJhY2tzOiB7IG51bWJlcjogYW55IH07XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHRhc2tzOiB7IG51bWJlcjogYW55IH07XG4gICAgdGFza1F1ZXVlOiBBcnJheTxudW1iZXI+O1xuICAgIGNhbmNlbENhbGxiYWNrczogeyBudW1iZXI6IENhbmNlbGFibGUgfTtcbiAgICBpbnZva2VyOiBUaHJvdHRsZWRJbnZva2VyO1xuICAgIGdsb2JhbFNjb3BlOiBhbnk7XG5cbiAgICBjb25zdHJ1Y3Rvcih0YXJnZXQ6IGFueSwgcGFyZW50OiBhbnksIG1hcElkOiA/bnVtYmVyKSB7XG4gICAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgdGhpcy5tYXBJZCA9IG1hcElkO1xuICAgICAgICB0aGlzLmNhbGxiYWNrcyA9IHt9O1xuICAgICAgICB0aGlzLnRhc2tzID0ge307XG4gICAgICAgIHRoaXMudGFza1F1ZXVlID0gW107XG4gICAgICAgIHRoaXMuY2FuY2VsQ2FsbGJhY2tzID0ge307XG4gICAgICAgIGJpbmRBbGwoWydyZWNlaXZlJywgJ3Byb2Nlc3MnXSwgdGhpcyk7XG4gICAgICAgIHRoaXMuaW52b2tlciA9IG5ldyBUaHJvdHRsZWRJbnZva2VyKHRoaXMucHJvY2Vzcyk7XG4gICAgICAgIHRoaXMudGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLnJlY2VpdmUsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5nbG9iYWxTY29wZSA9IGlzV29ya2VyKCkgPyB0YXJnZXQgOiB3aW5kb3c7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VuZHMgYSBtZXNzYWdlIGZyb20gYSBtYWluLXRocmVhZCBtYXAgdG8gYSBXb3JrZXIgb3IgZnJvbSBhIFdvcmtlciBiYWNrIHRvXG4gICAgICogYSBtYWluLXRocmVhZCBtYXAgaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdHlwZSBUaGUgbmFtZSBvZiB0aGUgdGFyZ2V0IG1ldGhvZCB0byBpbnZva2Ugb3IgJ1tzb3VyY2UtdHlwZV0uW3NvdXJjZS1uYW1lXS5uYW1lJyBmb3IgYSBtZXRob2Qgb24gYSBXb3JrZXJTb3VyY2UuXG4gICAgICogQHBhcmFtIHRhcmdldE1hcElkIEEgcGFydGljdWxhciBtYXBJZCB0byB3aGljaCB0byBzZW5kIHRoaXMgbWVzc2FnZS5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHNlbmQodHlwZTogc3RyaW5nLCBkYXRhOiBtaXhlZCwgY2FsbGJhY2s6ID9GdW5jdGlvbiwgdGFyZ2V0TWFwSWQ6ID9zdHJpbmcsIG11c3RRdWV1ZTogYm9vbGVhbiA9IGZhbHNlKTogP0NhbmNlbGFibGUge1xuICAgICAgICAvLyBXZSdyZSB1c2luZyBhIHN0cmluZyBJRCBpbnN0ZWFkIG9mIG51bWJlcnMgYmVjYXVzZSB0aGV5IGFyZSBiZWluZyB1c2VkIGFzIG9iamVjdCBrZXlzXG4gICAgICAgIC8vIGFueXdheSwgYW5kIHRodXMgc3RyaW5naWZpZWQgaW1wbGljaXRseS4gV2UgdXNlIHJhbmRvbSBJRHMgYmVjYXVzZSBhbiBhY3RvciBtYXkgcmVjZWl2ZVxuICAgICAgICAvLyBtZXNzYWdlIGZyb20gbXVsdGlwbGUgb3RoZXIgYWN0b3JzIHdoaWNoIGNvdWxkIHJ1biBpbiBkaWZmZXJlbnQgZXhlY3V0aW9uIGNvbnRleHQuIEFcbiAgICAgICAgLy8gbGluZWFybHkgaW5jcmVhc2luZyBJRCBjb3VsZCBwcm9kdWNlIGNvbGxpc2lvbnMuXG4gICAgICAgIGNvbnN0IGlkID0gTWF0aC5yb3VuZCgoTWF0aC5yYW5kb20oKSAqIDFlMTgpKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDAsIDEwKTtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrc1tpZF0gPSBjYWxsYmFjaztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBidWZmZXJzOiA/QXJyYXk8VHJhbnNmZXJhYmxlPiA9IGlzU2FmYXJpKHRoaXMuZ2xvYmFsU2NvcGUpID8gdW5kZWZpbmVkIDogW107XG4gICAgICAgIHRoaXMudGFyZ2V0LnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIGhhc0NhbGxiYWNrOiAhIWNhbGxiYWNrLFxuICAgICAgICAgICAgdGFyZ2V0TWFwSWQsXG4gICAgICAgICAgICBtdXN0UXVldWUsXG4gICAgICAgICAgICBzb3VyY2VNYXBJZDogdGhpcy5tYXBJZCxcbiAgICAgICAgICAgIGRhdGE6IHNlcmlhbGl6ZShkYXRhLCBidWZmZXJzKVxuICAgICAgICB9LCBidWZmZXJzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNhbmNlbDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIGNhbGxiYWNrIHRvIG51bGwgc28gdGhhdCBpdCBuZXZlciBmaXJlcyBhZnRlciB0aGUgcmVxdWVzdCBpcyBhYm9ydGVkLlxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5jYWxsYmFja3NbaWRdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnRhcmdldC5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnPGNhbmNlbD4nLFxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRNYXBJZCxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlTWFwSWQ6IHRoaXMubWFwSWRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICByZWNlaXZlKG1lc3NhZ2U6IE9iamVjdCkge1xuICAgICAgICBjb25zdCBkYXRhID0gbWVzc2FnZS5kYXRhLFxuICAgICAgICAgICAgaWQgPSBkYXRhLmlkO1xuXG4gICAgICAgIGlmICghaWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkYXRhLnRhcmdldE1hcElkICYmIHRoaXMubWFwSWQgIT09IGRhdGEudGFyZ2V0TWFwSWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09ICc8Y2FuY2VsPicpIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgb3JpZ2luYWwgcmVxdWVzdCBmcm9tIHRoZSBxdWV1ZS4gVGhpcyBpcyBvbmx5IHBvc3NpYmxlIGlmIGl0XG4gICAgICAgICAgICAvLyBoYXNuJ3QgYmVlbiBraWNrZWQgb2ZmIHlldC4gVGhlIGlkIHdpbGwgcmVtYWluIGluIHRoZSBxdWV1ZSwgYnV0IGJlY2F1c2VcbiAgICAgICAgICAgIC8vIHRoZXJlIGlzIG5vIGFzc29jaWF0ZWQgdGFzaywgaXQgd2lsbCBiZSBkcm9wcGVkIG9uY2UgaXQncyB0aW1lIHRvIGV4ZWN1dGUgaXQuXG4gICAgICAgICAgICBkZWxldGUgdGhpcy50YXNrc1tpZF07XG4gICAgICAgICAgICBjb25zdCBjYW5jZWwgPSB0aGlzLmNhbmNlbENhbGxiYWNrc1tpZF07XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5jYW5jZWxDYWxsYmFja3NbaWRdO1xuICAgICAgICAgICAgaWYgKGNhbmNlbCkge1xuICAgICAgICAgICAgICAgIGNhbmNlbCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGlzV29ya2VyKCkgfHwgZGF0YS5tdXN0UXVldWUpIHtcbiAgICAgICAgICAgICAgICAvLyBJbiB3b3JrZXJzLCBzdG9yZSB0aGUgdGFza3MgdGhhdCB3ZSBuZWVkIHRvIHByb2Nlc3MgYmVmb3JlIGFjdHVhbGx5IHByb2Nlc3NpbmcgdGhlbS4gVGhpc1xuICAgICAgICAgICAgICAgIC8vIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHdlIHdhbnQgdG8ga2VlcCByZWNlaXZpbmcgbWVzc2FnZXMsIGFuZCBpbiBwYXJ0aWN1bGFyLFxuICAgICAgICAgICAgICAgIC8vIDxjYW5jZWw+IG1lc3NhZ2VzLiBTb21lIHRhc2tzIG1heSB0YWtlIGEgd2hpbGUgaW4gdGhlIHdvcmtlciB0aHJlYWQsIHNvIGJlZm9yZVxuICAgICAgICAgICAgICAgIC8vIGV4ZWN1dGluZyB0aGUgbmV4dCB0YXNrIGluIG91ciBxdWV1ZSwgcG9zdE1lc3NhZ2UgcHJlZW1wdHMgdGhpcyBhbmQgPGNhbmNlbD5cbiAgICAgICAgICAgICAgICAvLyBtZXNzYWdlcyBjYW4gYmUgcHJvY2Vzc2VkLiBXZSdyZSB1c2luZyBhIE1lc3NhZ2VDaGFubmVsIG9iamVjdCB0byBnZXQgdGhyb3R0bGUgdGhlXG4gICAgICAgICAgICAgICAgLy8gcHJvY2VzcygpIGZsb3cgdG8gb25lIGF0IGEgdGltZS5cbiAgICAgICAgICAgICAgICB0aGlzLnRhc2tzW2lkXSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgdGhpcy50YXNrUXVldWUucHVzaChpZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnZva2VyLnRyaWdnZXIoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gSW4gdGhlIG1haW4gdGhyZWFkLCBwcm9jZXNzIG1lc3NhZ2VzIGltbWVkaWF0ZWx5IHNvIHRoYXQgb3RoZXIgd29yayBkb2VzIG5vdCBzbGlwIGluXG4gICAgICAgICAgICAgICAgLy8gYmV0d2VlbiBnZXR0aW5nIHBhcnRpYWwgZGF0YSBiYWNrIGZyb20gd29ya2Vycy5cbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NUYXNrKGlkLCBkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb2Nlc3MoKSB7XG4gICAgICAgIGlmICghdGhpcy50YXNrUXVldWUubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLnRhc2tRdWV1ZS5zaGlmdCgpO1xuICAgICAgICBjb25zdCB0YXNrID0gdGhpcy50YXNrc1tpZF07XG4gICAgICAgIGRlbGV0ZSB0aGlzLnRhc2tzW2lkXTtcbiAgICAgICAgLy8gU2NoZWR1bGUgYW5vdGhlciBwcm9jZXNzIGNhbGwgaWYgd2Uga25vdyB0aGVyZSdzIG1vcmUgdG8gcHJvY2VzcyBfYmVmb3JlXyBpbnZva2luZyB0aGVcbiAgICAgICAgLy8gY3VycmVudCB0YXNrLiBUaGlzIGlzIG5lY2Vzc2FyeSBzbyB0aGF0IHByb2Nlc3NpbmcgY29udGludWVzIGV2ZW4gaWYgdGhlIGN1cnJlbnQgdGFza1xuICAgICAgICAvLyBkb2Vzbid0IGV4ZWN1dGUgc3VjY2Vzc2Z1bGx5LlxuICAgICAgICBpZiAodGhpcy50YXNrUXVldWUubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmludm9rZXIudHJpZ2dlcigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFzaykge1xuICAgICAgICAgICAgLy8gSWYgdGhlIHRhc2sgSUQgZG9lc24ndCBoYXZlIGFzc29jaWF0ZWQgdGFzayBkYXRhIGFueW1vcmUsIGl0IHdhcyBjYW5jZWxlZC5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJvY2Vzc1Rhc2soaWQsIHRhc2spO1xuICAgIH1cblxuICAgIHByb2Nlc3NUYXNrKGlkOiBudW1iZXIsIHRhc2s6IGFueSkge1xuICAgICAgICBpZiAodGFzay50eXBlID09PSAnPHJlc3BvbnNlPicpIHtcbiAgICAgICAgICAgIC8vIFRoZSBkb25lKCkgZnVuY3Rpb24gaW4gdGhlIGNvdW50ZXJwYXJ0IGhhcyBiZWVuIGNhbGxlZCwgYW5kIHdlIGFyZSBub3dcbiAgICAgICAgICAgIC8vIGZpcmluZyB0aGUgY2FsbGJhY2sgaW4gdGhlIG9yaWdpbmF0aW5nIGFjdG9yLCBpZiB0aGVyZSBpcyBvbmUuXG4gICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IHRoaXMuY2FsbGJhY2tzW2lkXTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNhbGxiYWNrc1tpZF07XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBnZXQgYSByZXNwb25zZSwgYnV0IGRvbid0IGhhdmUgYSBjYWxsYmFjaywgdGhlIHJlcXVlc3Qgd2FzIGNhbmNlbGVkLlxuICAgICAgICAgICAgICAgIGlmICh0YXNrLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGRlc2VyaWFsaXplKHRhc2suZXJyb3IpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCBkZXNlcmlhbGl6ZSh0YXNrLmRhdGEpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgY29tcGxldGVkID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBidWZmZXJzOiA/QXJyYXk8VHJhbnNmZXJhYmxlPiA9IGlzU2FmYXJpKHRoaXMuZ2xvYmFsU2NvcGUpID8gdW5kZWZpbmVkIDogW107XG4gICAgICAgICAgICBjb25zdCBkb25lID0gdGFzay5oYXNDYWxsYmFjayA/IChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICBjb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNhbmNlbENhbGxiYWNrc1tpZF07XG4gICAgICAgICAgICAgICAgdGhpcy50YXJnZXQucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJzxyZXNwb25zZT4nLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VNYXBJZDogdGhpcy5tYXBJZCxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVyciA/IHNlcmlhbGl6ZShlcnIpIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogc2VyaWFsaXplKGRhdGEsIGJ1ZmZlcnMpXG4gICAgICAgICAgICAgICAgfSwgYnVmZmVycyk7XG4gICAgICAgICAgICB9IDogKF8pID0+IHtcbiAgICAgICAgICAgICAgICBjb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbGV0IGNhbGxiYWNrID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IChkZXNlcmlhbGl6ZSh0YXNrLmRhdGEpOiBhbnkpO1xuICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50W3Rhc2sudHlwZV0pIHtcbiAgICAgICAgICAgICAgICAvLyB0YXNrLnR5cGUgPT0gJ2xvYWRUaWxlJywgJ3JlbW92ZVRpbGUnLCBldGMuXG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSB0aGlzLnBhcmVudFt0YXNrLnR5cGVdKHRhc2suc291cmNlTWFwSWQsIHBhcmFtcywgZG9uZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucGFyZW50LmdldFdvcmtlclNvdXJjZSkge1xuICAgICAgICAgICAgICAgIC8vIHRhc2sudHlwZSA9PSBzb3VyY2V0eXBlLm1ldGhvZFxuICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSB0YXNrLnR5cGUuc3BsaXQoJy4nKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzY29wZSA9ICh0aGlzLnBhcmVudDogYW55KS5nZXRXb3JrZXJTb3VyY2UodGFzay5zb3VyY2VNYXBJZCwga2V5c1swXSwgcGFyYW1zLnNvdXJjZSk7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBzY29wZVtrZXlzWzFdXShwYXJhbXMsIGRvbmUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBObyBmdW5jdGlvbiB3YXMgZm91bmQuXG4gICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIGZ1bmN0aW9uICR7dGFzay50eXBlfWApKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFjb21wbGV0ZWQgJiYgY2FsbGJhY2sgJiYgY2FsbGJhY2suY2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgLy8gQWxsb3dzIGNhbmNlbGluZyB0aGUgdGFzayBhcyBsb25nIGFzIGl0IGhhc24ndCBiZWVuIGNvbXBsZXRlZCB5ZXQuXG4gICAgICAgICAgICAgICAgdGhpcy5jYW5jZWxDYWxsYmFja3NbaWRdID0gY2FsbGJhY2suY2FuY2VsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVtb3ZlKCkge1xuICAgICAgICB0aGlzLmludm9rZXIucmVtb3ZlKCk7XG4gICAgICAgIHRoaXMudGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLnJlY2VpdmUsIGZhbHNlKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEFjdG9yO1xuIiwiZXhwb3J0IHsgZ2V0VVJMLCBnZXRUaWxlQkJveCwgZ2V0TWVyY0Nvb3JkcyB9O1xuXG5cbi8qKlxuICogZ2V0VVJMXG4gKlxuICogQHBhcmFtICAgIHtTdHJpbmd9ICBiYXNlVXJsICBCYXNlIHVybCBvZiB0aGUgV01TIHNlcnZlclxuICogQHBhcmFtICAgIHtTdHJpbmd9ICBsYXllciAgICBMYXllciBuYW1lXG4gKiBAcGFyYW0gICAge051bWJlcn0gIHggICAgICAgIFRpbGUgY29vcmRpbmF0ZSB4XG4gKiBAcGFyYW0gICAge051bWJlcn0gIHkgICAgICAgIFRpbGUgY29vcmRpbmF0ZSB5XG4gKiBAcGFyYW0gICAge051bWJlcn0gIHogICAgICAgIFRpbGUgem9vbVxuICogQHBhcmFtICAgIHtPYmplY3R9ICBbb3B0aW9uc11cbiAqIEBwYXJhbSAgICB7U3RyaW5nfSAgW29wdGlvbnMuZm9ybWF0PSdpbWFnZS9wbmcnXVxuICogQHBhcmFtICAgIHtTdHJpbmd9ICBbb3B0aW9ucy5zZXJ2aWNlPSdXTVMnXVxuICogQHBhcmFtICAgIHtTdHJpbmd9ICBbb3B0aW9ucy52ZXJzaW9uPScxLjEuMSddXG4gKiBAcGFyYW0gICAge1N0cmluZ30gIFtvcHRpb25zLnJlcXVlc3Q9J0dldE1hcCddXG4gKiBAcGFyYW0gICAge1N0cmluZ30gIFtvcHRpb25zLnNycz0nRVBTRzozODU3J11cbiAqIEBwYXJhbSAgICB7TnVtYmVyfSAgW29wdGlvbnMud2lkdGg9JzI1NiddXG4gKiBAcGFyYW0gICAge051bWJlcn0gIFtvcHRpb25zLmhlaWdodD0nMjU2J11cbiAqIEByZXR1cm5zICB7U3RyaW5nfSAgdXJsXG4gKiBAZXhhbXBsZVxuICogdmFyIGJhc2VVcmwgPSAnaHR0cDovL2dlb2RhdGEuc3RhdGUubmoudXMvaW1hZ2VyeXdtcy9OYXR1cmFsMjAxNSc7XG4gKiB2YXIgbGF5ZXIgPSAnTmF0dXJhbDIwMTUnO1xuICogdmFyIHVybCA9IHdob290cy5nZXRVUkwoYmFzZVVybCwgbGF5ZXIsIDE1NDMwOCwgMTk3MTY3LCAxOSk7XG4gKi9cbmZ1bmN0aW9uIGdldFVSTChiYXNlVXJsLCBsYXllciwgeCwgeSwgeiwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgdmFyIHVybCA9IGJhc2VVcmwgKyAnPycgKyBbXG4gICAgICAgICdiYm94PScgICAgKyBnZXRUaWxlQkJveCh4LCB5LCB6KSxcbiAgICAgICAgJ2Zvcm1hdD0nICArIChvcHRpb25zLmZvcm1hdCB8fCAnaW1hZ2UvcG5nJyksXG4gICAgICAgICdzZXJ2aWNlPScgKyAob3B0aW9ucy5zZXJ2aWNlIHx8ICdXTVMnKSxcbiAgICAgICAgJ3ZlcnNpb249JyArIChvcHRpb25zLnZlcnNpb24gfHwgJzEuMS4xJyksXG4gICAgICAgICdyZXF1ZXN0PScgKyAob3B0aW9ucy5yZXF1ZXN0IHx8ICdHZXRNYXAnKSxcbiAgICAgICAgJ3Nycz0nICAgICArIChvcHRpb25zLnNycyB8fCAnRVBTRzozODU3JyksXG4gICAgICAgICd3aWR0aD0nICAgKyAob3B0aW9ucy53aWR0aCB8fCAyNTYpLFxuICAgICAgICAnaGVpZ2h0PScgICsgKG9wdGlvbnMuaGVpZ2h0IHx8IDI1NiksXG4gICAgICAgICdsYXllcnM9JyAgKyBsYXllclxuICAgIF0uam9pbignJicpO1xuXG4gICAgcmV0dXJuIHVybDtcbn1cblxuXG4vKipcbiAqIGdldFRpbGVCQm94XG4gKlxuICogQHBhcmFtICAgIHtOdW1iZXJ9ICB4ICBUaWxlIGNvb3JkaW5hdGUgeFxuICogQHBhcmFtICAgIHtOdW1iZXJ9ICB5ICBUaWxlIGNvb3JkaW5hdGUgeVxuICogQHBhcmFtICAgIHtOdW1iZXJ9ICB6ICBUaWxlIHpvb21cbiAqIEByZXR1cm5zICB7U3RyaW5nfSAgU3RyaW5nIG9mIHRoZSBib3VuZGluZyBib3hcbiAqL1xuZnVuY3Rpb24gZ2V0VGlsZUJCb3goeCwgeSwgeikge1xuICAgIC8vIGZvciBHb29nbGUvT1NNIHRpbGUgc2NoZW1lIHdlIG5lZWQgdG8gYWx0ZXIgdGhlIHlcbiAgICB5ID0gKE1hdGgucG93KDIsIHopIC0geSAtIDEpO1xuXG4gICAgdmFyIG1pbiA9IGdldE1lcmNDb29yZHMoeCAqIDI1NiwgeSAqIDI1NiwgeiksXG4gICAgICAgIG1heCA9IGdldE1lcmNDb29yZHMoKHggKyAxKSAqIDI1NiwgKHkgKyAxKSAqIDI1Niwgeik7XG5cbiAgICByZXR1cm4gbWluWzBdICsgJywnICsgbWluWzFdICsgJywnICsgbWF4WzBdICsgJywnICsgbWF4WzFdO1xufVxuXG5cbi8qKlxuICogZ2V0TWVyY0Nvb3Jkc1xuICpcbiAqIEBwYXJhbSAgICB7TnVtYmVyfSAgeCAgUGl4ZWwgY29vcmRpbmF0ZSB4XG4gKiBAcGFyYW0gICAge051bWJlcn0gIHkgIFBpeGVsIGNvb3JkaW5hdGUgeVxuICogQHBhcmFtICAgIHtOdW1iZXJ9ICB6ICBUaWxlIHpvb21cbiAqIEByZXR1cm5zICB7QXJyYXl9ICAgW3gsIHldXG4gKi9cbmZ1bmN0aW9uIGdldE1lcmNDb29yZHMoeCwgeSwgeikge1xuICAgIHZhciByZXNvbHV0aW9uID0gKDIgKiBNYXRoLlBJICogNjM3ODEzNyAvIDI1NikgLyBNYXRoLnBvdygyLCB6KSxcbiAgICAgICAgbWVyY194ID0gKHggKiByZXNvbHV0aW9uIC0gMiAqIE1hdGguUEkgICogNjM3ODEzNyAvIDIuMCksXG4gICAgICAgIG1lcmNfeSA9ICh5ICogcmVzb2x1dGlvbiAtIDIgKiBNYXRoLlBJICAqIDYzNzgxMzcgLyAyLjApO1xuXG4gICAgcmV0dXJuIFttZXJjX3gsIG1lcmNfeV07XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgTG5nTGF0IGZyb20gJy4vbG5nX2xhdCc7XG5cbmltcG9ydCB0eXBlIHtMbmdMYXRMaWtlfSBmcm9tICcuL2xuZ19sYXQnO1xuXG4vKipcbiAqIEEgYExuZ0xhdEJvdW5kc2Agb2JqZWN0IHJlcHJlc2VudHMgYSBnZW9ncmFwaGljYWwgYm91bmRpbmcgYm94LFxuICogZGVmaW5lZCBieSBpdHMgc291dGh3ZXN0IGFuZCBub3J0aGVhc3QgcG9pbnRzIGluIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUuXG4gKlxuICogSWYgbm8gYXJndW1lbnRzIGFyZSBwcm92aWRlZCB0byB0aGUgY29uc3RydWN0b3IsIGEgYG51bGxgIGJvdW5kaW5nIGJveCBpcyBjcmVhdGVkLlxuICpcbiAqIE5vdGUgdGhhdCBhbnkgTWFwYm94IEdMIG1ldGhvZCB0aGF0IGFjY2VwdHMgYSBgTG5nTGF0Qm91bmRzYCBvYmplY3QgYXMgYW4gYXJndW1lbnQgb3Igb3B0aW9uXG4gKiBjYW4gYWxzbyBhY2NlcHQgYW4gYEFycmF5YCBvZiB0d28ge0BsaW5rIExuZ0xhdExpa2V9IGNvbnN0cnVjdHMgYW5kIHdpbGwgcGVyZm9ybSBhbiBpbXBsaWNpdCBjb252ZXJzaW9uLlxuICogVGhpcyBmbGV4aWJsZSB0eXBlIGlzIGRvY3VtZW50ZWQgYXMge0BsaW5rIExuZ0xhdEJvdW5kc0xpa2V9LlxuICpcbiAqIEBwYXJhbSB7TG5nTGF0TGlrZX0gW3N3XSBUaGUgc291dGh3ZXN0IGNvcm5lciBvZiB0aGUgYm91bmRpbmcgYm94LlxuICogQHBhcmFtIHtMbmdMYXRMaWtlfSBbbmVdIFRoZSBub3J0aGVhc3QgY29ybmVyIG9mIHRoZSBib3VuZGluZyBib3guXG4gKiBAZXhhbXBsZVxuICogdmFyIHN3ID0gbmV3IG1hcGJveGdsLkxuZ0xhdCgtNzMuOTg3NiwgNDAuNzY2MSk7XG4gKiB2YXIgbmUgPSBuZXcgbWFwYm94Z2wuTG5nTGF0KC03My45Mzk3LCA0MC44MDAyKTtcbiAqIHZhciBsbGIgPSBuZXcgbWFwYm94Z2wuTG5nTGF0Qm91bmRzKHN3LCBuZSk7XG4gKi9cbmNsYXNzIExuZ0xhdEJvdW5kcyB7XG4gICAgX25lOiBMbmdMYXQ7XG4gICAgX3N3OiBMbmdMYXQ7XG5cbiAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIGlzIHRvbyBmbGV4aWJsZSB0byB0eXBlLiBJdCBzaG91bGQgbm90IGJlIHNvIGZsZXhpYmxlLlxuICAgIGNvbnN0cnVjdG9yKHN3OiBhbnksIG5lOiBhbnkpIHtcbiAgICAgICAgaWYgKCFzdykge1xuICAgICAgICAgICAgLy8gbm9vcFxuICAgICAgICB9IGVsc2UgaWYgKG5lKSB7XG4gICAgICAgICAgICB0aGlzLnNldFNvdXRoV2VzdChzdykuc2V0Tm9ydGhFYXN0KG5lKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdy5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U291dGhXZXN0KFtzd1swXSwgc3dbMV1dKS5zZXROb3J0aEVhc3QoW3N3WzJdLCBzd1szXV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRTb3V0aFdlc3Qoc3dbMF0pLnNldE5vcnRoRWFzdChzd1sxXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIG5vcnRoZWFzdCBjb3JuZXIgb2YgdGhlIGJvdW5kaW5nIGJveFxuICAgICAqXG4gICAgICogQHBhcmFtIHtMbmdMYXRMaWtlfSBuZSBhIHtAbGluayBMbmdMYXRMaWtlfSBvYmplY3QgZGVzY3JpYmluZyB0aGUgbm9ydGhlYXN0IGNvcm5lciBvZiB0aGUgYm91bmRpbmcgYm94LlxuICAgICAqIEByZXR1cm5zIHtMbmdMYXRCb3VuZHN9IGB0aGlzYFxuICAgICAqL1xuICAgIHNldE5vcnRoRWFzdChuZTogTG5nTGF0TGlrZSkge1xuICAgICAgICB0aGlzLl9uZSA9IG5lIGluc3RhbmNlb2YgTG5nTGF0ID8gbmV3IExuZ0xhdChuZS5sbmcsIG5lLmxhdCkgOiBMbmdMYXQuY29udmVydChuZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgc291dGh3ZXN0IGNvcm5lciBvZiB0aGUgYm91bmRpbmcgYm94XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0xuZ0xhdExpa2V9IHN3IGEge0BsaW5rIExuZ0xhdExpa2V9IG9iamVjdCBkZXNjcmliaW5nIHRoZSBzb3V0aHdlc3QgY29ybmVyIG9mIHRoZSBib3VuZGluZyBib3guXG4gICAgICogQHJldHVybnMge0xuZ0xhdEJvdW5kc30gYHRoaXNgXG4gICAgICovXG4gICAgc2V0U291dGhXZXN0KHN3OiBMbmdMYXRMaWtlKSB7XG4gICAgICAgIHRoaXMuX3N3ID0gc3cgaW5zdGFuY2VvZiBMbmdMYXQgPyBuZXcgTG5nTGF0KHN3LmxuZywgc3cubGF0KSA6IExuZ0xhdC5jb252ZXJ0KHN3KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXh0ZW5kIHRoZSBib3VuZHMgdG8gaW5jbHVkZSBhIGdpdmVuIExuZ0xhdExpa2Ugb3IgTG5nTGF0Qm91bmRzTGlrZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7TG5nTGF0TGlrZXxMbmdMYXRCb3VuZHNMaWtlfSBvYmogb2JqZWN0IHRvIGV4dGVuZCB0b1xuICAgICAqIEByZXR1cm5zIHtMbmdMYXRCb3VuZHN9IGB0aGlzYFxuICAgICAqL1xuICAgIGV4dGVuZChvYmo6IExuZ0xhdExpa2UgfCBMbmdMYXRCb3VuZHNMaWtlKSB7XG4gICAgICAgIGNvbnN0IHN3ID0gdGhpcy5fc3csXG4gICAgICAgICAgICBuZSA9IHRoaXMuX25lO1xuICAgICAgICBsZXQgc3cyLCBuZTI7XG5cbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIExuZ0xhdCkge1xuICAgICAgICAgICAgc3cyID0gb2JqO1xuICAgICAgICAgICAgbmUyID0gb2JqO1xuXG4gICAgICAgIH0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgTG5nTGF0Qm91bmRzKSB7XG4gICAgICAgICAgICBzdzIgPSBvYmouX3N3O1xuICAgICAgICAgICAgbmUyID0gb2JqLl9uZTtcblxuICAgICAgICAgICAgaWYgKCFzdzIgfHwgIW5lMikgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICAgICAgICBpZiAob2JqLmxlbmd0aCA9PT0gNCB8fCBvYmouZXZlcnkoQXJyYXkuaXNBcnJheSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbG5nTGF0Qm91bmRzT2JqID0gKChvYmo6IGFueSk6IExuZ0xhdEJvdW5kc0xpa2UpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5leHRlbmQoTG5nTGF0Qm91bmRzLmNvbnZlcnQobG5nTGF0Qm91bmRzT2JqKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbG5nTGF0T2JqID0gKChvYmo6IGFueSk6IExuZ0xhdExpa2UpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5leHRlbmQoTG5nTGF0LmNvbnZlcnQobG5nTGF0T2JqKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXN3ICYmICFuZSkge1xuICAgICAgICAgICAgdGhpcy5fc3cgPSBuZXcgTG5nTGF0KHN3Mi5sbmcsIHN3Mi5sYXQpO1xuICAgICAgICAgICAgdGhpcy5fbmUgPSBuZXcgTG5nTGF0KG5lMi5sbmcsIG5lMi5sYXQpO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdy5sbmcgPSBNYXRoLm1pbihzdzIubG5nLCBzdy5sbmcpO1xuICAgICAgICAgICAgc3cubGF0ID0gTWF0aC5taW4oc3cyLmxhdCwgc3cubGF0KTtcbiAgICAgICAgICAgIG5lLmxuZyA9IE1hdGgubWF4KG5lMi5sbmcsIG5lLmxuZyk7XG4gICAgICAgICAgICBuZS5sYXQgPSBNYXRoLm1heChuZTIubGF0LCBuZS5sYXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZ2VvZ3JhcGhpY2FsIGNvb3JkaW5hdGUgZXF1aWRpc3RhbnQgZnJvbSB0aGUgYm91bmRpbmcgYm94J3MgY29ybmVycy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtMbmdMYXR9IFRoZSBib3VuZGluZyBib3gncyBjZW50ZXIuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgbGxiID0gbmV3IG1hcGJveGdsLkxuZ0xhdEJvdW5kcyhbLTczLjk4NzYsIDQwLjc2NjFdLCBbLTczLjkzOTcsIDQwLjgwMDJdKTtcbiAgICAgKiBsbGIuZ2V0Q2VudGVyKCk7IC8vID0gTG5nTGF0IHtsbmc6IC03My45NjM2NSwgbGF0OiA0MC43ODMxNX1cbiAgICAgKi9cbiAgICBnZXRDZW50ZXIoKTogTG5nTGF0IHtcbiAgICAgICAgcmV0dXJuIG5ldyBMbmdMYXQoKHRoaXMuX3N3LmxuZyArIHRoaXMuX25lLmxuZykgLyAyLCAodGhpcy5fc3cubGF0ICsgdGhpcy5fbmUubGF0KSAvIDIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHNvdXRod2VzdCBjb3JuZXIgb2YgdGhlIGJvdW5kaW5nIGJveC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtMbmdMYXR9IFRoZSBzb3V0aHdlc3QgY29ybmVyIG9mIHRoZSBib3VuZGluZyBib3guXG4gICAgICovXG4gICAgZ2V0U291dGhXZXN0KCk6IExuZ0xhdCB7IHJldHVybiB0aGlzLl9zdzsgfVxuXG4gICAgLyoqXG4gICAgKiBSZXR1cm5zIHRoZSBub3J0aGVhc3QgY29ybmVyIG9mIHRoZSBib3VuZGluZyBib3guXG4gICAgKlxuICAgICogQHJldHVybnMge0xuZ0xhdH0gVGhlIG5vcnRoZWFzdCBjb3JuZXIgb2YgdGhlIGJvdW5kaW5nIGJveC5cbiAgICAgKi9cbiAgICBnZXROb3J0aEVhc3QoKTogTG5nTGF0IHsgcmV0dXJuIHRoaXMuX25lOyB9XG5cbiAgICAvKipcbiAgICAqIFJldHVybnMgdGhlIG5vcnRod2VzdCBjb3JuZXIgb2YgdGhlIGJvdW5kaW5nIGJveC5cbiAgICAqXG4gICAgKiBAcmV0dXJucyB7TG5nTGF0fSBUaGUgbm9ydGh3ZXN0IGNvcm5lciBvZiB0aGUgYm91bmRpbmcgYm94LlxuICAgICAqL1xuICAgIGdldE5vcnRoV2VzdCgpOiBMbmdMYXQgeyByZXR1cm4gbmV3IExuZ0xhdCh0aGlzLmdldFdlc3QoKSwgdGhpcy5nZXROb3J0aCgpKTsgfVxuXG4gICAgLyoqXG4gICAgKiBSZXR1cm5zIHRoZSBzb3V0aGVhc3QgY29ybmVyIG9mIHRoZSBib3VuZGluZyBib3guXG4gICAgKlxuICAgICogQHJldHVybnMge0xuZ0xhdH0gVGhlIHNvdXRoZWFzdCBjb3JuZXIgb2YgdGhlIGJvdW5kaW5nIGJveC5cbiAgICAgKi9cbiAgICBnZXRTb3V0aEVhc3QoKTogTG5nTGF0IHsgcmV0dXJuIG5ldyBMbmdMYXQodGhpcy5nZXRFYXN0KCksIHRoaXMuZ2V0U291dGgoKSk7IH1cblxuICAgIC8qKlxuICAgICogUmV0dXJucyB0aGUgd2VzdCBlZGdlIG9mIHRoZSBib3VuZGluZyBib3guXG4gICAgKlxuICAgICogQHJldHVybnMge251bWJlcn0gVGhlIHdlc3QgZWRnZSBvZiB0aGUgYm91bmRpbmcgYm94LlxuICAgICAqL1xuICAgIGdldFdlc3QoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuX3N3LmxuZzsgfVxuXG4gICAgLyoqXG4gICAgKiBSZXR1cm5zIHRoZSBzb3V0aCBlZGdlIG9mIHRoZSBib3VuZGluZyBib3guXG4gICAgKlxuICAgICogQHJldHVybnMge251bWJlcn0gVGhlIHNvdXRoIGVkZ2Ugb2YgdGhlIGJvdW5kaW5nIGJveC5cbiAgICAgKi9cbiAgICBnZXRTb3V0aCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5fc3cubGF0OyB9XG5cbiAgICAvKipcbiAgICAqIFJldHVybnMgdGhlIGVhc3QgZWRnZSBvZiB0aGUgYm91bmRpbmcgYm94LlxuICAgICpcbiAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBlYXN0IGVkZ2Ugb2YgdGhlIGJvdW5kaW5nIGJveC5cbiAgICAgKi9cbiAgICBnZXRFYXN0KCk6IG51bWJlciB7IHJldHVybiB0aGlzLl9uZS5sbmc7IH1cblxuICAgIC8qKlxuICAgICogUmV0dXJucyB0aGUgbm9ydGggZWRnZSBvZiB0aGUgYm91bmRpbmcgYm94LlxuICAgICpcbiAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBub3J0aCBlZGdlIG9mIHRoZSBib3VuZGluZyBib3guXG4gICAgICovXG4gICAgZ2V0Tm9ydGgoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuX25lLmxhdDsgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYm91bmRpbmcgYm94IHJlcHJlc2VudGVkIGFzIGFuIGFycmF5LlxuICAgICAqXG4gICAgICogQHJldHVybnMge0FycmF5PEFycmF5PG51bWJlcj4+fSBUaGUgYm91bmRpbmcgYm94IHJlcHJlc2VudGVkIGFzIGFuIGFycmF5LCBjb25zaXN0aW5nIG9mIHRoZVxuICAgICAqICAgc291dGh3ZXN0IGFuZCBub3J0aGVhc3QgY29vcmRpbmF0ZXMgb2YgdGhlIGJvdW5kaW5nIHJlcHJlc2VudGVkIGFzIGFycmF5cyBvZiBudW1iZXJzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIGxsYiA9IG5ldyBtYXBib3hnbC5MbmdMYXRCb3VuZHMoWy03My45ODc2LCA0MC43NjYxXSwgWy03My45Mzk3LCA0MC44MDAyXSk7XG4gICAgICogbGxiLnRvQXJyYXkoKTsgLy8gPSBbWy03My45ODc2LCA0MC43NjYxXSwgWy03My45Mzk3LCA0MC44MDAyXV1cbiAgICAgKi9cbiAgICB0b0FycmF5KCkge1xuICAgICAgICByZXR1cm4gW3RoaXMuX3N3LnRvQXJyYXkoKSwgdGhpcy5fbmUudG9BcnJheSgpXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIGJvdW5kaW5nIGJveCByZXByZXNlbnRlZCBhcyBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBib3VuZGluZyBib3ggcmVwcmVzZW50cyBhcyBhIHN0cmluZyBvZiB0aGUgZm9ybWF0XG4gICAgICogICBgJ0xuZ0xhdEJvdW5kcyhMbmdMYXQobG5nLCBsYXQpLCBMbmdMYXQobG5nLCBsYXQpKSdgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIGxsYiA9IG5ldyBtYXBib3hnbC5MbmdMYXRCb3VuZHMoWy03My45ODc2LCA0MC43NjYxXSwgWy03My45Mzk3LCA0MC44MDAyXSk7XG4gICAgICogbGxiLnRvU3RyaW5nKCk7IC8vID0gXCJMbmdMYXRCb3VuZHMoTG5nTGF0KC03My45ODc2LCA0MC43NjYxKSwgTG5nTGF0KC03My45Mzk3LCA0MC44MDAyKSlcIlxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gYExuZ0xhdEJvdW5kcygke3RoaXMuX3N3LnRvU3RyaW5nKCl9LCAke3RoaXMuX25lLnRvU3RyaW5nKCl9KWA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgdGhlIGJvdW5kaW5nIGJveCBpcyBhbiBlbXB0eS9gbnVsbGAtdHlwZSBib3guXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBib3VuZHMgaGF2ZSBiZWVuIGRlZmluZWQsIG90aGVyd2lzZSBmYWxzZS5cbiAgICAgKi9cbiAgICBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gISh0aGlzLl9zdyAmJiB0aGlzLl9uZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBDaGVjayBpZiB0aGUgcG9pbnQgaXMgd2l0aGluIHRoZSBib3VuZGluZyBib3guXG4gICAgKlxuICAgICogQHBhcmFtIHtMbmdMYXRMaWtlfSBsbmdsYXQgZ2VvZ3JhcGhpYyBwb2ludCB0byBjaGVjayBhZ2FpbnN0LlxuICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHBvaW50IGlzIHdpdGhpbiB0aGUgYm91bmRpbmcgYm94LlxuICAgICogQGV4YW1wbGVcbiAgICAqIHZhciBsbGIgPSBuZXcgbWFwYm94Z2wuTG5nTGF0Qm91bmRzKFxuICAgICogICBuZXcgbWFwYm94Z2wuTG5nTGF0KC03My45ODc2LCA0MC43NjYxKSxcbiAgICAqICAgbmV3IG1hcGJveGdsLkxuZ0xhdCgtNzMuOTM5NywgNDAuODAwMilcbiAgICAqICk7XG4gICAgKlxuICAgICogdmFyIGxsID0gbmV3IG1hcGJveGdsLkxuZ0xhdCgtNzMuOTU2NywgNDAuNzc4OSk7XG4gICAgKlxuICAgICogY29uc29sZS5sb2cobGxiLmNvbnRhaW5zKGxsKSk7IC8vID0gdHJ1ZVxuICAgICovXG4gICAgY29udGFpbnMobG5nbGF0OiBMbmdMYXRMaWtlKSB7XG4gICAgICAgIGNvbnN0IHtsbmcsIGxhdH0gPSBMbmdMYXQuY29udmVydChsbmdsYXQpO1xuXG4gICAgICAgIGNvbnN0IGNvbnRhaW5zTGF0aXR1ZGUgPSB0aGlzLl9zdy5sYXQgPD0gbGF0ICYmIGxhdCA8PSB0aGlzLl9uZS5sYXQ7XG4gICAgICAgIGxldCBjb250YWluc0xvbmdpdHVkZSA9IHRoaXMuX3N3LmxuZyA8PSBsbmcgJiYgbG5nIDw9IHRoaXMuX25lLmxuZztcbiAgICAgICAgaWYgKHRoaXMuX3N3LmxuZyA+IHRoaXMuX25lLmxuZykgeyAvLyB3cmFwcGVkIGNvb3JkaW5hdGVzXG4gICAgICAgICAgICBjb250YWluc0xvbmdpdHVkZSA9IHRoaXMuX3N3LmxuZyA+PSBsbmcgJiYgbG5nID49IHRoaXMuX25lLmxuZztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250YWluc0xhdGl0dWRlICYmIGNvbnRhaW5zTG9uZ2l0dWRlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGFuIGFycmF5IHRvIGEgYExuZ0xhdEJvdW5kc2Agb2JqZWN0LlxuICAgICAqXG4gICAgICogSWYgYSBgTG5nTGF0Qm91bmRzYCBvYmplY3QgaXMgcGFzc2VkIGluLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpdCB1bmNoYW5nZWQuXG4gICAgICpcbiAgICAgKiBJbnRlcm5hbGx5LCB0aGUgZnVuY3Rpb24gY2FsbHMgYExuZ0xhdCNjb252ZXJ0YCB0byBjb252ZXJ0IGFycmF5cyB0byBgTG5nTGF0YCB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0xuZ0xhdEJvdW5kc0xpa2V9IGlucHV0IEFuIGFycmF5IG9mIHR3byBjb29yZGluYXRlcyB0byBjb252ZXJ0LCBvciBhIGBMbmdMYXRCb3VuZHNgIG9iamVjdCB0byByZXR1cm4uXG4gICAgICogQHJldHVybnMge0xuZ0xhdEJvdW5kc30gQSBuZXcgYExuZ0xhdEJvdW5kc2Agb2JqZWN0LCBpZiBhIGNvbnZlcnNpb24gb2NjdXJyZWQsIG9yIHRoZSBvcmlnaW5hbCBgTG5nTGF0Qm91bmRzYCBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgYXJyID0gW1stNzMuOTg3NiwgNDAuNzY2MV0sIFstNzMuOTM5NywgNDAuODAwMl1dO1xuICAgICAqIHZhciBsbGIgPSBtYXBib3hnbC5MbmdMYXRCb3VuZHMuY29udmVydChhcnIpO1xuICAgICAqIGxsYjsgICAvLyA9IExuZ0xhdEJvdW5kcyB7X3N3OiBMbmdMYXQge2xuZzogLTczLjk4NzYsIGxhdDogNDAuNzY2MX0sIF9uZTogTG5nTGF0IHtsbmc6IC03My45Mzk3LCBsYXQ6IDQwLjgwMDJ9fVxuICAgICAqL1xuICAgIHN0YXRpYyBjb252ZXJ0KGlucHV0OiBMbmdMYXRCb3VuZHNMaWtlKTogTG5nTGF0Qm91bmRzIHtcbiAgICAgICAgaWYgKCFpbnB1dCB8fCBpbnB1dCBpbnN0YW5jZW9mIExuZ0xhdEJvdW5kcykgcmV0dXJuIGlucHV0O1xuICAgICAgICByZXR1cm4gbmV3IExuZ0xhdEJvdW5kcyhpbnB1dCk7XG4gICAgfVxufVxuXG4vKipcbiAqIEEge0BsaW5rIExuZ0xhdEJvdW5kc30gb2JqZWN0LCBhbiBhcnJheSBvZiB7QGxpbmsgTG5nTGF0TGlrZX0gb2JqZWN0cyBpbiBbc3csIG5lXSBvcmRlcixcbiAqIG9yIGFuIGFycmF5IG9mIG51bWJlcnMgaW4gW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gb3JkZXIuXG4gKlxuICogQHR5cGVkZWYge0xuZ0xhdEJvdW5kcyB8IFtMbmdMYXRMaWtlLCBMbmdMYXRMaWtlXSB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdfSBMbmdMYXRCb3VuZHNMaWtlXG4gKiBAZXhhbXBsZVxuICogdmFyIHYxID0gbmV3IG1hcGJveGdsLkxuZ0xhdEJvdW5kcyhcbiAqICAgbmV3IG1hcGJveGdsLkxuZ0xhdCgtNzMuOTg3NiwgNDAuNzY2MSksXG4gKiAgIG5ldyBtYXBib3hnbC5MbmdMYXQoLTczLjkzOTcsIDQwLjgwMDIpXG4gKiApO1xuICogdmFyIHYyID0gbmV3IG1hcGJveGdsLkxuZ0xhdEJvdW5kcyhbLTczLjk4NzYsIDQwLjc2NjFdLCBbLTczLjkzOTcsIDQwLjgwMDJdKVxuICogdmFyIHYzID0gW1stNzMuOTg3NiwgNDAuNzY2MV0sIFstNzMuOTM5NywgNDAuODAwMl1dO1xuICovXG5leHBvcnQgdHlwZSBMbmdMYXRCb3VuZHNMaWtlID0gTG5nTGF0Qm91bmRzIHwgW0xuZ0xhdExpa2UsIExuZ0xhdExpa2VdIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG5cbmV4cG9ydCBkZWZhdWx0IExuZ0xhdEJvdW5kcztcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7d3JhcH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCBMbmdMYXRCb3VuZHMgZnJvbSAnLi9sbmdfbGF0X2JvdW5kcyc7XG5cbi8qXG4qIEFwcHJveGltYXRlIHJhZGl1cyBvZiB0aGUgZWFydGggaW4gbWV0ZXJzLlxuKiBVc2VzIHRoZSBXR1MtODQgYXBwcm94aW1hdGlvbi4gVGhlIHJhZGl1cyBhdCB0aGUgZXF1YXRvciBpcyB+NjM3ODEzNyBhbmQgYXQgdGhlIHBvbGVzIGlzIH42MzU2NzUyLiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Xb3JsZF9HZW9kZXRpY19TeXN0ZW0jV0dTODRcbiogNjM3MTAwOC44IGlzIG9uZSBwdWJsaXNoZWQgXCJhdmVyYWdlIHJhZGl1c1wiIHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FYXJ0aF9yYWRpdXMjTWVhbl9yYWRpdXMsIG9yIGZ0cDovL2F0aGVuYS5mc3YuY3Z1dC5jei9aRkcvZ3JzODAtTW9yaXR6LnBkZiBwLjRcbiovXG5leHBvcnQgY29uc3QgZWFydGhSYWRpdXMgPSA2MzcxMDA4Ljg7XG5cbi8qKlxuICogQSBgTG5nTGF0YCBvYmplY3QgcmVwcmVzZW50cyBhIGdpdmVuIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUgY29vcmRpbmF0ZSwgbWVhc3VyZWQgaW4gZGVncmVlcy5cbiAqIFRoZXNlIGNvb3JkaW5hdGVzIGFyZSBiYXNlZCBvbiB0aGUgW1dHUzg0IChFUFNHOjQzMjYpIHN0YW5kYXJkXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Xb3JsZF9HZW9kZXRpY19TeXN0ZW0jV0dTODQpLlxuICpcbiAqIE1hcGJveCBHTCB1c2VzIGxvbmdpdHVkZSwgbGF0aXR1ZGUgY29vcmRpbmF0ZSBvcmRlciAoYXMgb3Bwb3NlZCB0byBsYXRpdHVkZSwgbG9uZ2l0dWRlKSB0byBtYXRjaCB0aGVcbiAqIFtHZW9KU09OIHNwZWNpZmljYXRpb25dKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3OTQ2KS5cbiAqXG4gKiBOb3RlIHRoYXQgYW55IE1hcGJveCBHTCBtZXRob2QgdGhhdCBhY2NlcHRzIGEgYExuZ0xhdGAgb2JqZWN0IGFzIGFuIGFyZ3VtZW50IG9yIG9wdGlvblxuICogY2FuIGFsc28gYWNjZXB0IGFuIGBBcnJheWAgb2YgdHdvIG51bWJlcnMgYW5kIHdpbGwgcGVyZm9ybSBhbiBpbXBsaWNpdCBjb252ZXJzaW9uLlxuICogVGhpcyBmbGV4aWJsZSB0eXBlIGlzIGRvY3VtZW50ZWQgYXMge0BsaW5rIExuZ0xhdExpa2V9LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBsbmcgTG9uZ2l0dWRlLCBtZWFzdXJlZCBpbiBkZWdyZWVzLlxuICogQHBhcmFtIHtudW1iZXJ9IGxhdCBMYXRpdHVkZSwgbWVhc3VyZWQgaW4gZGVncmVlcy5cbiAqIEBleGFtcGxlXG4gKiB2YXIgbGwgPSBuZXcgbWFwYm94Z2wuTG5nTGF0KC0xMjMuOTc0OSwgNDAuNzczNik7XG4gKiBsbC5sbmc7IC8vID0gLTEyMy45NzQ5XG4gKiBAc2VlIFtHZXQgY29vcmRpbmF0ZXMgb2YgdGhlIG1vdXNlIHBvaW50ZXJdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvbW91c2UtcG9zaXRpb24vKVxuICogQHNlZSBbRGlzcGxheSBhIHBvcHVwXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3BvcHVwLylcbiAqIEBzZWUgW0hpZ2hsaWdodCBmZWF0dXJlcyB3aXRoaW4gYSBib3VuZGluZyBib3hdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvdXNpbmctYm94LXF1ZXJ5cmVuZGVyZWRmZWF0dXJlcy8pXG4gKiBAc2VlIFtDcmVhdGUgYSB0aW1lbGluZSBhbmltYXRpb25dKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvdGltZWxpbmUtYW5pbWF0aW9uLylcbiAqL1xuY2xhc3MgTG5nTGF0IHtcbiAgICBsbmc6IG51bWJlcjtcbiAgICBsYXQ6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKGxuZzogbnVtYmVyLCBsYXQ6IG51bWJlcikge1xuICAgICAgICBpZiAoaXNOYU4obG5nKSB8fCBpc05hTihsYXQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgTG5nTGF0IG9iamVjdDogKCR7bG5nfSwgJHtsYXR9KWApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG5nID0gK2xuZztcbiAgICAgICAgdGhpcy5sYXQgPSArbGF0O1xuICAgICAgICBpZiAodGhpcy5sYXQgPiA5MCB8fCB0aGlzLmxhdCA8IC05MCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIExuZ0xhdCBsYXRpdHVkZSB2YWx1ZTogbXVzdCBiZSBiZXR3ZWVuIC05MCBhbmQgOTAnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBuZXcgYExuZ0xhdGAgb2JqZWN0IHdob3NlIGxvbmdpdHVkZSBpcyB3cmFwcGVkIHRvIHRoZSByYW5nZSAoLTE4MCwgMTgwKS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtMbmdMYXR9IFRoZSB3cmFwcGVkIGBMbmdMYXRgIG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBsbCA9IG5ldyBtYXBib3hnbC5MbmdMYXQoMjg2LjAyNTEsIDQwLjc3MzYpO1xuICAgICAqIHZhciB3cmFwcGVkID0gbGwud3JhcCgpO1xuICAgICAqIHdyYXBwZWQubG5nOyAvLyA9IC03My45NzQ5XG4gICAgICovXG4gICAgd3JhcCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMbmdMYXQod3JhcCh0aGlzLmxuZywgLTE4MCwgMTgwKSwgdGhpcy5sYXQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNvb3JkaW5hdGVzIHJlcHJlc2VudGVkIGFzIGFuIGFycmF5IG9mIHR3byBudW1iZXJzLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0FycmF5PG51bWJlcj59IFRoZSBjb29yZGluYXRlcyByZXByZXNldGVkIGFzIGFuIGFycmF5IG9mIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgbGwgPSBuZXcgbWFwYm94Z2wuTG5nTGF0KC03My45NzQ5LCA0MC43NzM2KTtcbiAgICAgKiBsbC50b0FycmF5KCk7IC8vID0gWy03My45NzQ5LCA0MC43NzM2XVxuICAgICAqL1xuICAgIHRvQXJyYXkoKSB7XG4gICAgICAgIHJldHVybiBbdGhpcy5sbmcsIHRoaXMubGF0XTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjb29yZGluYXRlcyByZXByZXNlbnQgYXMgYSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29vcmRpbmF0ZXMgcmVwcmVzZW50ZWQgYXMgYSBzdHJpbmcgb2YgdGhlIGZvcm1hdCBgJ0xuZ0xhdChsbmcsIGxhdCknYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBsbCA9IG5ldyBtYXBib3hnbC5MbmdMYXQoLTczLjk3NDksIDQwLjc3MzYpO1xuICAgICAqIGxsLnRvU3RyaW5nKCk7IC8vID0gXCJMbmdMYXQoLTczLjk3NDksIDQwLjc3MzYpXCJcbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIGBMbmdMYXQoJHt0aGlzLmxuZ30sICR7dGhpcy5sYXR9KWA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYXBwcm94aW1hdGUgZGlzdGFuY2UgYmV0d2VlbiBhIHBhaXIgb2YgY29vcmRpbmF0ZXMgaW4gbWV0ZXJzXG4gICAgICogVXNlcyB0aGUgSGF2ZXJzaW5lIEZvcm11bGEgKGZyb20gUi5XLiBTaW5ub3R0LCBcIlZpcnR1ZXMgb2YgdGhlIEhhdmVyc2luZVwiLCBTa3kgYW5kIFRlbGVzY29wZSwgdm9sLiA2OCwgbm8uIDIsIDE5ODQsIHAuIDE1OSlcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7TG5nTGF0fSBsbmdMYXQgY29vcmRpbmF0ZXMgdG8gY29tcHV0ZSB0aGUgZGlzdGFuY2UgdG9cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBEaXN0YW5jZSBpbiBtZXRlcnMgYmV0d2VlbiB0aGUgdHdvIGNvb3JkaW5hdGVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIG5ld195b3JrID0gbmV3IG1hcGJveGdsLkxuZ0xhdCgtNzQuMDA2MCwgNDAuNzEyOCk7XG4gICAgICogdmFyIGxvc19hbmdlbGVzID0gbmV3IG1hcGJveGdsLkxuZ0xhdCgtMTE4LjI0MzcsIDM0LjA1MjIpO1xuICAgICAqIG5ld195b3JrLmRpc3RhbmNlVG8obG9zX2FuZ2VsZXMpOyAvLyA9IDM5MzU3NTEuNjkwODkzOTg3LCBcInRydWUgZGlzdGFuY2VcIiB1c2luZyBhIG5vbi1zcGhlcmljYWwgYXBwcm94aW1hdGlvbiBpcyB+Mzk2NmttXG4gICAgICovXG4gICAgZGlzdGFuY2VUbyhsbmdMYXQ6IExuZ0xhdCkge1xuICAgICAgICBjb25zdCByYWQgPSBNYXRoLlBJIC8gMTgwO1xuICAgICAgICBjb25zdCBsYXQxID0gdGhpcy5sYXQgKiByYWQ7XG4gICAgICAgIGNvbnN0IGxhdDIgPSBsbmdMYXQubGF0ICogcmFkO1xuICAgICAgICBjb25zdCBhID0gTWF0aC5zaW4obGF0MSkgKiBNYXRoLnNpbihsYXQyKSArIE1hdGguY29zKGxhdDEpICogTWF0aC5jb3MobGF0MikgKiBNYXRoLmNvcygobG5nTGF0LmxuZyAtIHRoaXMubG5nKSAqIHJhZCk7XG5cbiAgICAgICAgY29uc3QgbWF4TWV0ZXJzID0gZWFydGhSYWRpdXMgKiBNYXRoLmFjb3MoTWF0aC5taW4oYSwgMSkpO1xuICAgICAgICByZXR1cm4gbWF4TWV0ZXJzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBgTG5nTGF0Qm91bmRzYCBmcm9tIHRoZSBjb29yZGluYXRlcyBleHRlbmRlZCBieSBhIGdpdmVuIGByYWRpdXNgLiBUaGUgcmV0dXJuZWQgYExuZ0xhdEJvdW5kc2AgY29tcGxldGVseSBjb250YWlucyB0aGUgYHJhZGl1c2AuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3JhZGl1cz0wXSBEaXN0YW5jZSBpbiBtZXRlcnMgZnJvbSB0aGUgY29vcmRpbmF0ZXMgdG8gZXh0ZW5kIHRoZSBib3VuZHMuXG4gICAgICogQHJldHVybnMge0xuZ0xhdEJvdW5kc30gQSBuZXcgYExuZ0xhdEJvdW5kc2Agb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY29vcmRpbmF0ZXMgZXh0ZW5kZWQgYnkgdGhlIGByYWRpdXNgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIGxsID0gbmV3IG1hcGJveGdsLkxuZ0xhdCgtNzMuOTc0OSwgNDAuNzczNik7XG4gICAgICogbGwudG9Cb3VuZHMoMTAwKS50b0FycmF5KCk7IC8vID0gW1stNzMuOTc1MDE4NjIxNDEzMjgsIDQwLjc3MzUxMDE2ODQ3MjI5XSwgWy03My45NzQ3ODEzNzg1ODY3MywgNDAuNzczNjg5ODMxNTI3NzFdXVxuICAgICAqL1xuICAgIHRvQm91bmRzKHJhZGl1cz86IG51bWJlciA9IDApIHtcbiAgICAgICAgY29uc3QgZWFydGhDaXJjdW1mZXJlbmNlSW5NZXRlcnNBdEVxdWF0b3IgPSA0MDA3NTAxNztcbiAgICAgICAgY29uc3QgbGF0QWNjdXJhY3kgPSAzNjAgKiByYWRpdXMgLyBlYXJ0aENpcmN1bWZlcmVuY2VJbk1ldGVyc0F0RXF1YXRvcixcbiAgICAgICAgICAgIGxuZ0FjY3VyYWN5ID0gbGF0QWNjdXJhY3kgLyBNYXRoLmNvcygoTWF0aC5QSSAvIDE4MCkgKiB0aGlzLmxhdCk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBMbmdMYXRCb3VuZHMobmV3IExuZ0xhdCh0aGlzLmxuZyAtIGxuZ0FjY3VyYWN5LCB0aGlzLmxhdCAtIGxhdEFjY3VyYWN5KSxcbiAgICAgICAgICAgIG5ldyBMbmdMYXQodGhpcy5sbmcgKyBsbmdBY2N1cmFjeSwgdGhpcy5sYXQgKyBsYXRBY2N1cmFjeSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGFuIGFycmF5IG9mIHR3byBudW1iZXJzIG9yIGFuIG9iamVjdCB3aXRoIGBsbmdgIGFuZCBgbGF0YCBvciBgbG9uYCBhbmQgYGxhdGAgcHJvcGVydGllc1xuICAgICAqIHRvIGEgYExuZ0xhdGAgb2JqZWN0LlxuICAgICAqXG4gICAgICogSWYgYSBgTG5nTGF0YCBvYmplY3QgaXMgcGFzc2VkIGluLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBpdCB1bmNoYW5nZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0xuZ0xhdExpa2V9IGlucHV0IEFuIGFycmF5IG9mIHR3byBudW1iZXJzIG9yIG9iamVjdCB0byBjb252ZXJ0LCBvciBhIGBMbmdMYXRgIG9iamVjdCB0byByZXR1cm4uXG4gICAgICogQHJldHVybnMge0xuZ0xhdH0gQSBuZXcgYExuZ0xhdGAgb2JqZWN0LCBpZiBhIGNvbnZlcnNpb24gb2NjdXJyZWQsIG9yIHRoZSBvcmlnaW5hbCBgTG5nTGF0YCBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgYXJyID0gWy03My45NzQ5LCA0MC43NzM2XTtcbiAgICAgKiB2YXIgbGwgPSBtYXBib3hnbC5MbmdMYXQuY29udmVydChhcnIpO1xuICAgICAqIGxsOyAgIC8vID0gTG5nTGF0IHtsbmc6IC03My45NzQ5LCBsYXQ6IDQwLjc3MzZ9XG4gICAgICovXG4gICAgc3RhdGljIGNvbnZlcnQoaW5wdXQ6IExuZ0xhdExpa2UpOiBMbmdMYXQge1xuICAgICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBMbmdMYXQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkgJiYgKGlucHV0Lmxlbmd0aCA9PT0gMiB8fCBpbnB1dC5sZW5ndGggPT09IDMpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IExuZ0xhdChOdW1iZXIoaW5wdXRbMF0pLCBOdW1iZXIoaW5wdXRbMV0pKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW5wdXQpICYmIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiYgaW5wdXQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTG5nTGF0KFxuICAgICAgICAgICAgICAgIC8vIGZsb3cgY2FuJ3QgcmVmaW5lIHRoaXMgdG8gaGF2ZSBvbmUgb2YgbG5nIG9yIGxhdCwgc28gd2UgaGF2ZSB0byBjYXN0IHRvIGFueVxuICAgICAgICAgICAgICAgIE51bWJlcignbG5nJyBpbiBpbnB1dCA/IChpbnB1dDogYW55KS5sbmcgOiAoaW5wdXQ6IGFueSkubG9uKSxcbiAgICAgICAgICAgICAgICBOdW1iZXIoaW5wdXQubGF0KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJgTG5nTGF0TGlrZWAgYXJndW1lbnQgbXVzdCBiZSBzcGVjaWZpZWQgYXMgYSBMbmdMYXQgaW5zdGFuY2UsIGFuIG9iamVjdCB7bG5nOiA8bG5nPiwgbGF0OiA8bGF0Pn0sIGFuIG9iamVjdCB7bG9uOiA8bG5nPiwgbGF0OiA8bGF0Pn0sIG9yIGFuIGFycmF5IG9mIFs8bG5nPiwgPGxhdD5dXCIpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBBIHtAbGluayBMbmdMYXR9IG9iamVjdCwgYW4gYXJyYXkgb2YgdHdvIG51bWJlcnMgcmVwcmVzZW50aW5nIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUsXG4gKiBvciBhbiBvYmplY3Qgd2l0aCBgbG5nYCBhbmQgYGxhdGAgb3IgYGxvbmAgYW5kIGBsYXRgIHByb3BlcnRpZXMuXG4gKlxuICogQHR5cGVkZWYge0xuZ0xhdCB8IHtsbmc6IG51bWJlciwgbGF0OiBudW1iZXJ9IHwge2xvbjogbnVtYmVyLCBsYXQ6IG51bWJlcn0gfCBbbnVtYmVyLCBudW1iZXJdfSBMbmdMYXRMaWtlXG4gKiBAZXhhbXBsZVxuICogdmFyIHYxID0gbmV3IG1hcGJveGdsLkxuZ0xhdCgtMTIyLjQyMDY3OSwgMzcuNzcyNTM3KTtcbiAqIHZhciB2MiA9IFstMTIyLjQyMDY3OSwgMzcuNzcyNTM3XTtcbiAqIHZhciB2MyA9IHtsb246IC0xMjIuNDIwNjc5LCBsYXQ6IDM3Ljc3MjUzN307XG4gKi9cbmV4cG9ydCB0eXBlIExuZ0xhdExpa2UgPSBMbmdMYXQgfCB7bG5nOiBudW1iZXIsIGxhdDogbnVtYmVyfSB8IHtsb246IG51bWJlciwgbGF0OiBudW1iZXJ9IHwgW251bWJlciwgbnVtYmVyXTtcblxuZXhwb3J0IGRlZmF1bHQgTG5nTGF0O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IExuZ0xhdCwge2VhcnRoUmFkaXVzfSBmcm9tICcuLi9nZW8vbG5nX2xhdCc7XG5pbXBvcnQgdHlwZSB7TG5nTGF0TGlrZX0gZnJvbSAnLi4vZ2VvL2xuZ19sYXQnO1xuXG4vKlxuICogVGhlIGF2ZXJhZ2UgY2lyY3VtZmVyZW5jZSBvZiB0aGUgd29ybGQgaW4gbWV0ZXJzLlxuICovXG5jb25zdCBlYXJ0aENpcmN1bWZyZW5jZSA9IDIgKiBNYXRoLlBJICogZWFydGhSYWRpdXM7IC8vIG1ldGVyc1xuXG4vKlxuICogVGhlIGNpcmN1bWZlcmVuY2UgYXQgYSBsaW5lIG9mIGxhdGl0dWRlIGluIG1ldGVycy5cbiAqL1xuZnVuY3Rpb24gY2lyY3VtZmVyZW5jZUF0TGF0aXR1ZGUobGF0aXR1ZGU6IG51bWJlcikge1xuICAgIHJldHVybiBlYXJ0aENpcmN1bWZyZW5jZSAqIE1hdGguY29zKGxhdGl0dWRlICogTWF0aC5QSSAvIDE4MCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJjYXRvclhmcm9tTG5nKGxuZzogbnVtYmVyKSB7XG4gICAgcmV0dXJuICgxODAgKyBsbmcpIC8gMzYwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyY2F0b3JZZnJvbUxhdChsYXQ6IG51bWJlcikge1xuICAgIHJldHVybiAoMTgwIC0gKDE4MCAvIE1hdGguUEkgKiBNYXRoLmxvZyhNYXRoLnRhbihNYXRoLlBJIC8gNCArIGxhdCAqIE1hdGguUEkgLyAzNjApKSkpIC8gMzYwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyY2F0b3JaZnJvbUFsdGl0dWRlKGFsdGl0dWRlOiBudW1iZXIsIGxhdDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGFsdGl0dWRlIC8gY2lyY3VtZmVyZW5jZUF0TGF0aXR1ZGUobGF0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxuZ0Zyb21NZXJjYXRvclgoeDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHggKiAzNjAgLSAxODA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXRGcm9tTWVyY2F0b3JZKHk6IG51bWJlcikge1xuICAgIGNvbnN0IHkyID0gMTgwIC0geSAqIDM2MDtcbiAgICByZXR1cm4gMzYwIC8gTWF0aC5QSSAqIE1hdGguYXRhbihNYXRoLmV4cCh5MiAqIE1hdGguUEkgLyAxODApKSAtIDkwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWx0aXR1ZGVGcm9tTWVyY2F0b3JaKHo6IG51bWJlciwgeTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHogKiBjaXJjdW1mZXJlbmNlQXRMYXRpdHVkZShsYXRGcm9tTWVyY2F0b3JZKHkpKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgdGhlIE1lcmNhdG9yIHNjYWxlIGZhY3RvciBmb3IgYSBnaXZlbiBsYXRpdHVkZSwgc2VlXG4gKiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NZXJjYXRvcl9wcm9qZWN0aW9uI1NjYWxlX2ZhY3RvclxuICpcbiAqIEF0IHRoZSBlcXVhdG9yIHRoZSBzY2FsZSBmYWN0b3Igd2lsbCBiZSAxLCB3aGljaCBpbmNyZWFzZXMgYXQgaGlnaGVyIGxhdGl0dWRlcy5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gbGF0IExhdGl0dWRlXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBzY2FsZSBmYWN0b3JcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJjYXRvclNjYWxlKGxhdDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIDEgLyBNYXRoLmNvcyhsYXQgKiBNYXRoLlBJIC8gMTgwKTtcbn1cblxuLyoqXG4gKiBBIGBNZXJjYXRvckNvb3JkaW5hdGVgIG9iamVjdCByZXByZXNlbnRzIGEgcHJvamVjdGVkIHRocmVlIGRpbWVuc2lvbmFsIHBvc2l0aW9uLlxuICpcbiAqIGBNZXJjYXRvckNvb3JkaW5hdGVgIHVzZXMgdGhlIHdlYiBtZXJjYXRvciBwcm9qZWN0aW9uIChbRVBTRzozODU3XShodHRwczovL2Vwc2cuaW8vMzg1NykpIHdpdGggc2xpZ2h0bHkgZGlmZmVyZW50IHVuaXRzOlxuICogLSB0aGUgc2l6ZSBvZiAxIHVuaXQgaXMgdGhlIHdpZHRoIG9mIHRoZSBwcm9qZWN0ZWQgd29ybGQgaW5zdGVhZCBvZiB0aGUgXCJtZXJjYXRvciBtZXRlclwiXG4gKiAtIHRoZSBvcmlnaW4gb2YgdGhlIGNvb3JkaW5hdGUgc3BhY2UgaXMgYXQgdGhlIG5vcnRoLXdlc3QgY29ybmVyIGluc3RlYWQgb2YgdGhlIG1pZGRsZVxuICpcbiAqIEZvciBleGFtcGxlLCBgTWVyY2F0b3JDb29yZGluYXRlKDAsIDAsIDApYCBpcyB0aGUgbm9ydGgtd2VzdCBjb3JuZXIgb2YgdGhlIG1lcmNhdG9yIHdvcmxkIGFuZFxuICogYE1lcmNhdG9yQ29vcmRpbmF0ZSgxLCAxLCAwKWAgaXMgdGhlIHNvdXRoLWVhc3QgY29ybmVyLiBJZiB5b3UgYXJlIGZhbWlsaWFyIHdpdGhcbiAqIFt2ZWN0b3IgdGlsZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvdmVjdG9yLXRpbGUtc3BlYykgaXQgbWF5IGJlIGhlbHBmdWwgdG8gdGhpbmtcbiAqIG9mIHRoZSBjb29yZGluYXRlIHNwYWNlIGFzIHRoZSBgMC8wLzBgIHRpbGUgd2l0aCBhbiBleHRlbnQgb2YgYDFgLlxuICpcbiAqIFRoZSBgemAgZGltZW5zaW9uIG9mIGBNZXJjYXRvckNvb3JkaW5hdGVgIGlzIGNvbmZvcm1hbC4gQSBjdWJlIGluIHRoZSBtZXJjYXRvciBjb29yZGluYXRlIHNwYWNlIHdvdWxkIGJlIHJlbmRlcmVkIGFzIGEgY3ViZS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geCBUaGUgeCBjb21wb25lbnQgb2YgdGhlIHBvc2l0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IHkgVGhlIHkgY29tcG9uZW50IG9mIHRoZSBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSB6IFRoZSB6IGNvbXBvbmVudCBvZiB0aGUgcG9zaXRpb24uXG4gKiBAZXhhbXBsZVxuICogdmFyIG51bGxJc2xhbmQgPSBuZXcgbWFwYm94Z2wuTWVyY2F0b3JDb29yZGluYXRlKDAuNSwgMC41LCAwKTtcbiAqXG4gKiBAc2VlIFtBZGQgYSBjdXN0b20gc3R5bGUgbGF5ZXJdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvY3VzdG9tLXN0eWxlLWxheWVyLylcbiAqL1xuY2xhc3MgTWVyY2F0b3JDb29yZGluYXRlIHtcbiAgICB4OiBudW1iZXI7XG4gICAgeTogbnVtYmVyO1xuICAgIHo6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIgPSAwKSB7XG4gICAgICAgIHRoaXMueCA9ICt4O1xuICAgICAgICB0aGlzLnkgPSAreTtcbiAgICAgICAgdGhpcy56ID0gK3o7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvamVjdCBhIGBMbmdMYXRgIHRvIGEgYE1lcmNhdG9yQ29vcmRpbmF0ZWAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0xuZ0xhdExpa2V9IGxuZ0xhdExpa2UgVGhlIGxvY2F0aW9uIHRvIHByb2plY3QuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGFsdGl0dWRlIFRoZSBhbHRpdHVkZSBpbiBtZXRlcnMgb2YgdGhlIHBvc2l0aW9uLlxuICAgICAqIEByZXR1cm5zIHtNZXJjYXRvckNvb3JkaW5hdGV9IFRoZSBwcm9qZWN0ZWQgbWVyY2F0b3IgY29vcmRpbmF0ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBjb29yZCA9IG1hcGJveGdsLk1lcmNhdG9yQ29vcmRpbmF0ZS5mcm9tTG5nTGF0KHsgbG5nOiAwLCBsYXQ6IDB9LCAwKTtcbiAgICAgKiBjb29yZDsgLy8gTWVyY2F0b3JDb29yZGluYXRlKDAuNSwgMC41LCAwKVxuICAgICAqL1xuICAgIHN0YXRpYyBmcm9tTG5nTGF0KGxuZ0xhdExpa2U6IExuZ0xhdExpa2UsIGFsdGl0dWRlOiBudW1iZXIgPSAwKSB7XG4gICAgICAgIGNvbnN0IGxuZ0xhdCA9IExuZ0xhdC5jb252ZXJ0KGxuZ0xhdExpa2UpO1xuXG4gICAgICAgIHJldHVybiBuZXcgTWVyY2F0b3JDb29yZGluYXRlKFxuICAgICAgICAgICAgICAgIG1lcmNhdG9yWGZyb21MbmcobG5nTGF0LmxuZyksXG4gICAgICAgICAgICAgICAgbWVyY2F0b3JZZnJvbUxhdChsbmdMYXQubGF0KSxcbiAgICAgICAgICAgICAgICBtZXJjYXRvclpmcm9tQWx0aXR1ZGUoYWx0aXR1ZGUsIGxuZ0xhdC5sYXQpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBgTG5nTGF0YCBmb3IgdGhlIGNvb3JkaW5hdGUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7TG5nTGF0fSBUaGUgYExuZ0xhdGAgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIGNvb3JkID0gbmV3IG1hcGJveGdsLk1lcmNhdG9yQ29vcmRpbmF0ZSgwLjUsIDAuNSwgMCk7XG4gICAgICogdmFyIGxhdExuZyA9IGNvb3JkLnRvTG5nTGF0KCk7IC8vIExuZ0xhdCgwLCAwKVxuICAgICAqL1xuICAgIHRvTG5nTGF0KCkge1xuICAgICAgICByZXR1cm4gbmV3IExuZ0xhdChcbiAgICAgICAgICAgICAgICBsbmdGcm9tTWVyY2F0b3JYKHRoaXMueCksXG4gICAgICAgICAgICAgICAgbGF0RnJvbU1lcmNhdG9yWSh0aGlzLnkpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBhbHRpdHVkZSBpbiBtZXRlcnMgb2YgdGhlIGNvb3JkaW5hdGUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgYWx0aXR1ZGUgaW4gbWV0ZXJzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIGNvb3JkID0gbmV3IG1hcGJveGdsLk1lcmNhdG9yQ29vcmRpbmF0ZSgwLCAwLCAwLjAyKTtcbiAgICAgKiBjb29yZC50b0FsdGl0dWRlKCk7IC8vIDY5MTQuMjgxOTU2Mjk1MzM5XG4gICAgICovXG4gICAgdG9BbHRpdHVkZSgpIHtcbiAgICAgICAgcmV0dXJuIGFsdGl0dWRlRnJvbU1lcmNhdG9yWih0aGlzLnosIHRoaXMueSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZGlzdGFuY2Ugb2YgMSBtZXRlciBpbiBgTWVyY2F0b3JDb29yZGluYXRlYCB1bml0cyBhdCB0aGlzIGxhdGl0dWRlLlxuICAgICAqXG4gICAgICogRm9yIGNvb3JkaW5hdGVzIGluIHJlYWwgd29ybGQgdW5pdHMgdXNpbmcgbWV0ZXJzLCB0aGlzIG5hdHVyYWxseSBwcm92aWRlcyB0aGUgc2NhbGVcbiAgICAgKiB0byB0cmFuc2Zvcm0gaW50byBgTWVyY2F0b3JDb29yZGluYXRlYHMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBEaXN0YW5jZSBvZiAxIG1ldGVyIGluIGBNZXJjYXRvckNvb3JkaW5hdGVgIHVuaXRzLlxuICAgICAqL1xuICAgIG1ldGVySW5NZXJjYXRvckNvb3JkaW5hdGVVbml0cygpIHtcbiAgICAgICAgLy8gMSBtZXRlciAvIGNpcmN1bWZlcmVuY2UgYXQgZXF1YXRvciBpbiBtZXRlcnMgKiBNZXJjYXRvciBwcm9qZWN0aW9uIHNjYWxlIGZhY3RvciBhdCB0aGlzIGxhdGl0dWRlXG4gICAgICAgIHJldHVybiAxIC8gZWFydGhDaXJjdW1mcmVuY2UgKiBtZXJjYXRvclNjYWxlKGxhdEZyb21NZXJjYXRvclkodGhpcy55KSk7XG4gICAgfVxuXG59XG5cbmV4cG9ydCBkZWZhdWx0IE1lcmNhdG9yQ29vcmRpbmF0ZTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7Z2V0VGlsZUJCb3h9IGZyb20gJ0BtYXBib3gvd2hvb3RzLWpzJztcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi4vZGF0YS9leHRlbnQnO1xuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IE1lcmNhdG9yQ29vcmRpbmF0ZSBmcm9tICcuLi9nZW8vbWVyY2F0b3JfY29vcmRpbmF0ZSc7XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7cmVnaXN0ZXJ9IGZyb20gJy4uL3V0aWwvd2ViX3dvcmtlcl90cmFuc2Zlcic7XG5cbmV4cG9ydCBjbGFzcyBDYW5vbmljYWxUaWxlSUQge1xuICAgIHo6IG51bWJlcjtcbiAgICB4OiBudW1iZXI7XG4gICAgeTogbnVtYmVyO1xuICAgIGtleTogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoejogbnVtYmVyLCB4OiBudW1iZXIsIHk6IG51bWJlcikge1xuICAgICAgICBhc3NlcnQoeiA+PSAwICYmIHogPD0gMjUpO1xuICAgICAgICBhc3NlcnQoeCA+PSAwICYmIHggPCBNYXRoLnBvdygyLCB6KSk7XG4gICAgICAgIGFzc2VydCh5ID49IDAgJiYgeSA8IE1hdGgucG93KDIsIHopKTtcbiAgICAgICAgdGhpcy56ID0gejtcbiAgICAgICAgdGhpcy54ID0geDtcbiAgICAgICAgdGhpcy55ID0geTtcbiAgICAgICAgdGhpcy5rZXkgPSBjYWxjdWxhdGVLZXkoMCwgeiwgeiwgeCwgeSk7XG4gICAgfVxuXG4gICAgZXF1YWxzKGlkOiBDYW5vbmljYWxUaWxlSUQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueiA9PT0gaWQueiAmJiB0aGlzLnggPT09IGlkLnggJiYgdGhpcy55ID09PSBpZC55O1xuICAgIH1cblxuICAgIC8vIGdpdmVuIGEgbGlzdCBvZiB1cmxzLCBjaG9vc2UgYSB1cmwgdGVtcGxhdGUgYW5kIHJldHVybiBhIHRpbGUgVVJMXG4gICAgdXJsKHVybHM6IEFycmF5PHN0cmluZz4sIHNjaGVtZTogP3N0cmluZykge1xuICAgICAgICBjb25zdCBiYm94ID0gZ2V0VGlsZUJCb3godGhpcy54LCB0aGlzLnksIHRoaXMueik7XG4gICAgICAgIGNvbnN0IHF1YWRrZXkgPSBnZXRRdWFka2V5KHRoaXMueiwgdGhpcy54LCB0aGlzLnkpO1xuXG4gICAgICAgIHJldHVybiB1cmxzWyh0aGlzLnggKyB0aGlzLnkpICUgdXJscy5sZW5ndGhdXG4gICAgICAgICAgICAucmVwbGFjZSgne3ByZWZpeH0nLCAodGhpcy54ICUgMTYpLnRvU3RyaW5nKDE2KSArICh0aGlzLnkgJSAxNikudG9TdHJpbmcoMTYpKVxuICAgICAgICAgICAgLnJlcGxhY2UoJ3t6fScsIFN0cmluZyh0aGlzLnopKVxuICAgICAgICAgICAgLnJlcGxhY2UoJ3t4fScsIFN0cmluZyh0aGlzLngpKVxuICAgICAgICAgICAgLnJlcGxhY2UoJ3t5fScsIFN0cmluZyhzY2hlbWUgPT09ICd0bXMnID8gKE1hdGgucG93KDIsIHRoaXMueikgLSB0aGlzLnkgLSAxKSA6IHRoaXMueSkpXG4gICAgICAgICAgICAucmVwbGFjZSgne3F1YWRrZXl9JywgcXVhZGtleSlcbiAgICAgICAgICAgIC5yZXBsYWNlKCd7YmJveC1lcHNnLTM4NTd9JywgYmJveCk7XG4gICAgfVxuXG4gICAgZ2V0VGlsZVBvaW50KGNvb3JkOiBNZXJjYXRvckNvb3JkaW5hdGUpIHtcbiAgICAgICAgY29uc3QgdGlsZXNBdFpvb20gPSBNYXRoLnBvdygyLCB0aGlzLnopO1xuICAgICAgICByZXR1cm4gbmV3IFBvaW50KFxuICAgICAgICAgICAgKGNvb3JkLnggKiB0aWxlc0F0Wm9vbSAtIHRoaXMueCkgKiBFWFRFTlQsXG4gICAgICAgICAgICAoY29vcmQueSAqIHRpbGVzQXRab29tIC0gdGhpcy55KSAqIEVYVEVOVCk7XG4gICAgfVxuXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLnp9LyR7dGhpcy54fS8ke3RoaXMueX1gO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVud3JhcHBlZFRpbGVJRCB7XG4gICAgd3JhcDogbnVtYmVyO1xuICAgIGNhbm9uaWNhbDogQ2Fub25pY2FsVGlsZUlEO1xuICAgIGtleTogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3Iod3JhcDogbnVtYmVyLCBjYW5vbmljYWw6IENhbm9uaWNhbFRpbGVJRCkge1xuICAgICAgICB0aGlzLndyYXAgPSB3cmFwO1xuICAgICAgICB0aGlzLmNhbm9uaWNhbCA9IGNhbm9uaWNhbDtcbiAgICAgICAgdGhpcy5rZXkgPSBjYWxjdWxhdGVLZXkod3JhcCwgY2Fub25pY2FsLnosIGNhbm9uaWNhbC56LCBjYW5vbmljYWwueCwgY2Fub25pY2FsLnkpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE92ZXJzY2FsZWRUaWxlSUQge1xuICAgIG92ZXJzY2FsZWRaOiBudW1iZXI7XG4gICAgd3JhcDogbnVtYmVyO1xuICAgIGNhbm9uaWNhbDogQ2Fub25pY2FsVGlsZUlEO1xuICAgIGtleTogc3RyaW5nO1xuICAgIHBvc01hdHJpeDogRmxvYXQzMkFycmF5O1xuXG4gICAgY29uc3RydWN0b3Iob3ZlcnNjYWxlZFo6IG51bWJlciwgd3JhcDogbnVtYmVyLCB6OiBudW1iZXIsIHg6IG51bWJlciwgeTogbnVtYmVyKSB7XG4gICAgICAgIGFzc2VydChvdmVyc2NhbGVkWiA+PSB6KTtcbiAgICAgICAgdGhpcy5vdmVyc2NhbGVkWiA9IG92ZXJzY2FsZWRaO1xuICAgICAgICB0aGlzLndyYXAgPSB3cmFwO1xuICAgICAgICB0aGlzLmNhbm9uaWNhbCA9IG5ldyBDYW5vbmljYWxUaWxlSUQoeiwgK3gsICt5KTtcbiAgICAgICAgdGhpcy5rZXkgPSBjYWxjdWxhdGVLZXkod3JhcCwgb3ZlcnNjYWxlZFosIHosIHgsIHkpO1xuICAgIH1cblxuICAgIGVxdWFscyhpZDogT3ZlcnNjYWxlZFRpbGVJRCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vdmVyc2NhbGVkWiA9PT0gaWQub3ZlcnNjYWxlZFogJiYgdGhpcy53cmFwID09PSBpZC53cmFwICYmIHRoaXMuY2Fub25pY2FsLmVxdWFscyhpZC5jYW5vbmljYWwpO1xuICAgIH1cblxuICAgIHNjYWxlZFRvKHRhcmdldFo6IG51bWJlcikge1xuICAgICAgICBhc3NlcnQodGFyZ2V0WiA8PSB0aGlzLm92ZXJzY2FsZWRaKTtcbiAgICAgICAgY29uc3QgekRpZmZlcmVuY2UgPSB0aGlzLmNhbm9uaWNhbC56IC0gdGFyZ2V0WjtcbiAgICAgICAgaWYgKHRhcmdldFogPiB0aGlzLmNhbm9uaWNhbC56KSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE92ZXJzY2FsZWRUaWxlSUQodGFyZ2V0WiwgdGhpcy53cmFwLCB0aGlzLmNhbm9uaWNhbC56LCB0aGlzLmNhbm9uaWNhbC54LCB0aGlzLmNhbm9uaWNhbC55KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3ZlcnNjYWxlZFRpbGVJRCh0YXJnZXRaLCB0aGlzLndyYXAsIHRhcmdldFosIHRoaXMuY2Fub25pY2FsLnggPj4gekRpZmZlcmVuY2UsIHRoaXMuY2Fub25pY2FsLnkgPj4gekRpZmZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBjYWxjdWxhdGVTY2FsZWRLZXkgaXMgYW4gb3B0aW1pemF0aW9uOlxuICAgICAqIHdoZW4gd2l0aFdyYXAgPT0gdHJ1ZSwgaW1wbGVtZW50cyB0aGUgc2FtZSBhcyB0aGlzLnNjYWxlZFRvKHopLmtleSxcbiAgICAgKiB3aGVuIHdpdGhXcmFwID09IGZhbHNlLCBpbXBsZW1lbnRzIHRoZSBzYW1lIGFzIHRoaXMuc2NhbGVkVG8oeikud3JhcHBlZCgpLmtleS5cbiAgICAgKi9cbiAgICBjYWxjdWxhdGVTY2FsZWRLZXkodGFyZ2V0WjogbnVtYmVyLCB3aXRoV3JhcDogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgICAgIGFzc2VydCh0YXJnZXRaIDw9IHRoaXMub3ZlcnNjYWxlZFopO1xuICAgICAgICBjb25zdCB6RGlmZmVyZW5jZSA9IHRoaXMuY2Fub25pY2FsLnogLSB0YXJnZXRaO1xuICAgICAgICBpZiAodGFyZ2V0WiA+IHRoaXMuY2Fub25pY2FsLnopIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxjdWxhdGVLZXkodGhpcy53cmFwICogK3dpdGhXcmFwLCB0YXJnZXRaLCB0aGlzLmNhbm9uaWNhbC56LCB0aGlzLmNhbm9uaWNhbC54LCB0aGlzLmNhbm9uaWNhbC55KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxjdWxhdGVLZXkodGhpcy53cmFwICogK3dpdGhXcmFwLCB0YXJnZXRaLCB0YXJnZXRaLCB0aGlzLmNhbm9uaWNhbC54ID4+IHpEaWZmZXJlbmNlLCB0aGlzLmNhbm9uaWNhbC55ID4+IHpEaWZmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzQ2hpbGRPZihwYXJlbnQ6IE92ZXJzY2FsZWRUaWxlSUQpIHtcbiAgICAgICAgaWYgKHBhcmVudC53cmFwICE9PSB0aGlzLndyYXApIHtcbiAgICAgICAgICAgIC8vIFdlIGNhbid0IGJlIGEgY2hpbGQgaWYgd2UncmUgaW4gYSBkaWZmZXJlbnQgd29ybGQgY29weVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHpEaWZmZXJlbmNlID0gdGhpcy5jYW5vbmljYWwueiAtIHBhcmVudC5jYW5vbmljYWwuejtcbiAgICAgICAgLy8gV2UncmUgZmlyc3QgdGVzdGluZyBmb3IgeiA9PSAwLCB0byBhdm9pZCBhIDMyIGJpdCBzaGlmdCwgd2hpY2ggaXMgdW5kZWZpbmVkLlxuICAgICAgICByZXR1cm4gcGFyZW50Lm92ZXJzY2FsZWRaID09PSAwIHx8IChcbiAgICAgICAgICAgIHBhcmVudC5vdmVyc2NhbGVkWiA8IHRoaXMub3ZlcnNjYWxlZFogJiZcbiAgICAgICAgICAgICAgICBwYXJlbnQuY2Fub25pY2FsLnggPT09ICh0aGlzLmNhbm9uaWNhbC54ID4+IHpEaWZmZXJlbmNlKSAmJlxuICAgICAgICAgICAgICAgIHBhcmVudC5jYW5vbmljYWwueSA9PT0gKHRoaXMuY2Fub25pY2FsLnkgPj4gekRpZmZlcmVuY2UpKTtcbiAgICB9XG5cbiAgICBjaGlsZHJlbihzb3VyY2VNYXhab29tOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMub3ZlcnNjYWxlZFogPj0gc291cmNlTWF4Wm9vbSkge1xuICAgICAgICAgICAgLy8gcmV0dXJuIGEgc2luZ2xlIHRpbGUgY29vcmQgcmVwcmVzZW50aW5nIGEgYW4gb3ZlcnNjYWxlZCB0aWxlXG4gICAgICAgICAgICByZXR1cm4gW25ldyBPdmVyc2NhbGVkVGlsZUlEKHRoaXMub3ZlcnNjYWxlZFogKyAxLCB0aGlzLndyYXAsIHRoaXMuY2Fub25pY2FsLnosIHRoaXMuY2Fub25pY2FsLngsIHRoaXMuY2Fub25pY2FsLnkpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHogPSB0aGlzLmNhbm9uaWNhbC56ICsgMTtcbiAgICAgICAgY29uc3QgeCA9IHRoaXMuY2Fub25pY2FsLnggKiAyO1xuICAgICAgICBjb25zdCB5ID0gdGhpcy5jYW5vbmljYWwueSAqIDI7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgT3ZlcnNjYWxlZFRpbGVJRCh6LCB0aGlzLndyYXAsIHosIHgsIHkpLFxuICAgICAgICAgICAgbmV3IE92ZXJzY2FsZWRUaWxlSUQoeiwgdGhpcy53cmFwLCB6LCB4ICsgMSwgeSksXG4gICAgICAgICAgICBuZXcgT3ZlcnNjYWxlZFRpbGVJRCh6LCB0aGlzLndyYXAsIHosIHgsIHkgKyAxKSxcbiAgICAgICAgICAgIG5ldyBPdmVyc2NhbGVkVGlsZUlEKHosIHRoaXMud3JhcCwgeiwgeCArIDEsIHkgKyAxKVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGlzTGVzc1RoYW4ocmhzOiBPdmVyc2NhbGVkVGlsZUlEKSB7XG4gICAgICAgIGlmICh0aGlzLndyYXAgPCByaHMud3JhcCkgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICh0aGlzLndyYXAgPiByaHMud3JhcCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGlmICh0aGlzLm92ZXJzY2FsZWRaIDwgcmhzLm92ZXJzY2FsZWRaKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMub3ZlcnNjYWxlZFogPiByaHMub3ZlcnNjYWxlZFopIHJldHVybiBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy5jYW5vbmljYWwueCA8IHJocy5jYW5vbmljYWwueCkgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICh0aGlzLmNhbm9uaWNhbC54ID4gcmhzLmNhbm9uaWNhbC54KSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMuY2Fub25pY2FsLnkgPCByaHMuY2Fub25pY2FsLnkpIHJldHVybiB0cnVlO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgd3JhcHBlZCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPdmVyc2NhbGVkVGlsZUlEKHRoaXMub3ZlcnNjYWxlZFosIDAsIHRoaXMuY2Fub25pY2FsLnosIHRoaXMuY2Fub25pY2FsLngsIHRoaXMuY2Fub25pY2FsLnkpO1xuICAgIH1cblxuICAgIHVud3JhcFRvKHdyYXA6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gbmV3IE92ZXJzY2FsZWRUaWxlSUQodGhpcy5vdmVyc2NhbGVkWiwgd3JhcCwgdGhpcy5jYW5vbmljYWwueiwgdGhpcy5jYW5vbmljYWwueCwgdGhpcy5jYW5vbmljYWwueSk7XG4gICAgfVxuXG4gICAgb3ZlcnNjYWxlRmFjdG9yKCkge1xuICAgICAgICByZXR1cm4gTWF0aC5wb3coMiwgdGhpcy5vdmVyc2NhbGVkWiAtIHRoaXMuY2Fub25pY2FsLnopO1xuICAgIH1cblxuICAgIHRvVW53cmFwcGVkKCkge1xuICAgICAgICByZXR1cm4gbmV3IFVud3JhcHBlZFRpbGVJRCh0aGlzLndyYXAsIHRoaXMuY2Fub25pY2FsKTtcbiAgICB9XG5cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMub3ZlcnNjYWxlZFp9LyR7dGhpcy5jYW5vbmljYWwueH0vJHt0aGlzLmNhbm9uaWNhbC55fWA7XG4gICAgfVxuXG4gICAgZ2V0VGlsZVBvaW50KGNvb3JkOiBNZXJjYXRvckNvb3JkaW5hdGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2Fub25pY2FsLmdldFRpbGVQb2ludChuZXcgTWVyY2F0b3JDb29yZGluYXRlKGNvb3JkLnggLSB0aGlzLndyYXAsIGNvb3JkLnkpKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZUtleSh3cmFwOiBudW1iZXIsIG92ZXJzY2FsZWRaOiBudW1iZXIsIHo6IG51bWJlciwgeDogbnVtYmVyLCB5OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHdyYXAgKj0gMjtcbiAgICBpZiAod3JhcCA8IDApIHdyYXAgPSB3cmFwICogLTEgLSAxO1xuICAgIGNvbnN0IGRpbSA9IDEgPDwgejtcbiAgICByZXR1cm4gKGRpbSAqIGRpbSAqIHdyYXAgKyBkaW0gKiB5ICsgeCkudG9TdHJpbmcoMzYpICsgei50b1N0cmluZygzNikgKyBvdmVyc2NhbGVkWi50b1N0cmluZygzNik7XG59XG5cbmZ1bmN0aW9uIGdldFF1YWRrZXkoeiwgeCwgeSkge1xuICAgIGxldCBxdWFka2V5ID0gJycsIG1hc2s7XG4gICAgZm9yIChsZXQgaSA9IHo7IGkgPiAwOyBpLS0pIHtcbiAgICAgICAgbWFzayA9IDEgPDwgKGkgLSAxKTtcbiAgICAgICAgcXVhZGtleSArPSAoKHggJiBtYXNrID8gMSA6IDApICsgKHkgJiBtYXNrID8gMiA6IDApKTtcbiAgICB9XG4gICAgcmV0dXJuIHF1YWRrZXk7XG59XG5cbnJlZ2lzdGVyKCdDYW5vbmljYWxUaWxlSUQnLCBDYW5vbmljYWxUaWxlSUQpO1xucmVnaXN0ZXIoJ092ZXJzY2FsZWRUaWxlSUQnLCBPdmVyc2NhbGVkVGlsZUlELCB7b21pdDogWydwb3NNYXRyaXgnXX0pO1xuIiwiLy8gQGZsb3dcbmltcG9ydCB7UkdCQUltYWdlfSBmcm9tICcuLi91dGlsL2ltYWdlJztcblxuaW1wb3J0IHt3YXJuT25jZX0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7cmVnaXN0ZXJ9IGZyb20gJy4uL3V0aWwvd2ViX3dvcmtlcl90cmFuc2Zlcic7XG5cbi8vIERFTURhdGEgaXMgYSBkYXRhIHN0cnVjdHVyZSBmb3IgZGVjb2RpbmcsIGJhY2tmaWxsaW5nLCBhbmQgc3RvcmluZyBlbGV2YXRpb24gZGF0YSBmb3IgcHJvY2Vzc2luZyBpbiB0aGUgaGlsbHNoYWRlIHNoYWRlcnNcbi8vIGRhdGEgY2FuIGJlIHBvcHVsYXRlZCBlaXRoZXIgZnJvbSBhIHBuZ3JhdyBpbWFnZSB0aWxlIG9yIGZyb20gc2VybGlhemVkIGRhdGEgc2VudCBiYWNrIGZyb20gYSB3b3JrZXIuIFdoZW4gZGF0YSBpcyBpbml0aWFsbHlcbi8vIGxvYWRlZCBmcm9tIGEgaW1hZ2UgdGlsZSwgd2UgZGVjb2RlIHRoZSBwaXhlbCB2YWx1ZXMgdXNpbmcgdGhlIGFwcHJvcHJpYXRlIGRlY29kaW5nIGZvcm11bGEsIGJ1dCB3ZSBzdG9yZSB0aGVcbi8vIGVsZXZhdGlvbiBkYXRhIGFzIGFuIEludDMyIHZhbHVlLiB3ZSBhZGQgNjU1MzYgKDJeMTYpIHRvIGVsaW1pbmF0ZSBuZWdhdGl2ZSB2YWx1ZXMgYW5kIGVuYWJsZSB0aGUgdXNlIG9mXG4vLyBpbnRlZ2VyIG92ZXJmbG93IHdoZW4gY3JlYXRpbmcgdGhlIHRleHR1cmUgdXNlZCBpbiB0aGUgaGlsbHNoYWRlUHJlcGFyZSBzdGVwLlxuXG4vLyBERU1EYXRhIGFsc28gaGFuZGxlcyB0aGUgYmFja2ZpbGxpbmcgb2YgZGF0YSBmcm9tIGEgdGlsZSdzIG5laWdoYm9yaW5nIHRpbGVzLiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHdlIHVzZSBhIHBpeGVsJ3MgOFxuLy8gc3Vycm91bmRpbmcgcGl4ZWwgdmFsdWVzIHRvIGNvbXB1dGUgdGhlIHNsb3BlIGF0IHRoYXQgcGl4ZWwsIGFuZCB3ZSBjYW5ub3QgYWNjdXJhdGVseSBjYWxjdWxhdGUgdGhlIHNsb3BlIGF0IHBpeGVscyBvbiBhXG4vLyB0aWxlJ3MgZWRnZSB3aXRob3V0IGJhY2tmaWxsaW5nIGZyb20gbmVpZ2hib3JpbmcgdGlsZXMuXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERFTURhdGEge1xuICAgIHVpZDogc3RyaW5nO1xuICAgIGRhdGE6IFVpbnQzMkFycmF5O1xuICAgIHN0cmlkZTogbnVtYmVyO1xuICAgIGRpbTogbnVtYmVyO1xuICAgIGVuY29kaW5nOiBcIm1hcGJveFwiIHwgXCJ0ZXJyYXJpdW1cIjtcblxuICAgIC8vIFJHQkFJbWFnZSBkYXRhIGhhcyB1bmlmb3JtIDFweCBwYWRkaW5nIG9uIGFsbCBzaWRlczogc3F1YXJlIHRpbGUgZWRnZSBzaXplIGRlZmluZXMgc3RyaWRlXG4gICAgLy8gYW5kIGRpbSBpcyBjYWxjdWxhdGVkIGFzIHN0cmlkZSAtIDIuXG4gICAgY29uc3RydWN0b3IodWlkOiBzdHJpbmcsIGRhdGE6IFJHQkFJbWFnZSwgZW5jb2Rpbmc6IFwibWFwYm94XCIgfCBcInRlcnJhcml1bVwiKSB7XG4gICAgICAgIHRoaXMudWlkID0gdWlkO1xuICAgICAgICBpZiAoZGF0YS5oZWlnaHQgIT09IGRhdGEud2lkdGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdERU0gdGlsZXMgbXVzdCBiZSBzcXVhcmUnKTtcbiAgICAgICAgaWYgKGVuY29kaW5nICYmIGVuY29kaW5nICE9PSBcIm1hcGJveFwiICYmIGVuY29kaW5nICE9PSBcInRlcnJhcml1bVwiKSByZXR1cm4gd2Fybk9uY2UoXG4gICAgICAgICAgICBgXCIke2VuY29kaW5nfVwiIGlzIG5vdCBhIHZhbGlkIGVuY29kaW5nIHR5cGUuIFZhbGlkIHR5cGVzIGluY2x1ZGUgXCJtYXBib3hcIiBhbmQgXCJ0ZXJyYXJpdW1cIi5gXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc3RyaWRlID0gZGF0YS5oZWlnaHQ7XG4gICAgICAgIGNvbnN0IGRpbSA9IHRoaXMuZGltID0gZGF0YS5oZWlnaHQgLSAyO1xuICAgICAgICB0aGlzLmRhdGEgPSBuZXcgVWludDMyQXJyYXkoZGF0YS5kYXRhLmJ1ZmZlcik7XG4gICAgICAgIHRoaXMuZW5jb2RpbmcgPSBlbmNvZGluZyB8fCAnbWFwYm94JztcblxuICAgICAgICAvLyBpbiBvcmRlciB0byBhdm9pZCBmbGFzaGluZyBzZWFtcyBiZXR3ZWVuIHRpbGVzLCBoZXJlIHdlIGFyZSBpbml0aWFsbHkgcG9wdWxhdGluZyBhIDFweCBib3JkZXIgb2YgcGl4ZWxzIGFyb3VuZCB0aGUgaW1hZ2VcbiAgICAgICAgLy8gd2l0aCB0aGUgZGF0YSBvZiB0aGUgbmVhcmVzdCBwaXhlbCBmcm9tIHRoZSBpbWFnZS4gdGhpcyBkYXRhIGlzIGV2ZW50dWFsbHkgcmVwbGFjZWQgd2hlbiB0aGUgdGlsZSdzIG5laWdoYm9yaW5nXG4gICAgICAgIC8vIHRpbGVzIGFyZSBsb2FkZWQgYW5kIHRoZSBhY2N1cmF0ZSBkYXRhIGNhbiBiZSBiYWNrZmlsbGVkIHVzaW5nIERFTURhdGEjYmFja2ZpbGxCb3JkZXJcbiAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCBkaW07IHgrKykge1xuICAgICAgICAgICAgLy8gbGVmdCB2ZXJ0aWNhbCBib3JkZXJcbiAgICAgICAgICAgIHRoaXMuZGF0YVt0aGlzLl9pZHgoLTEsIHgpXSA9IHRoaXMuZGF0YVt0aGlzLl9pZHgoMCwgeCldO1xuICAgICAgICAgICAgLy8gcmlnaHQgdmVydGljYWwgYm9yZGVyXG4gICAgICAgICAgICB0aGlzLmRhdGFbdGhpcy5faWR4KGRpbSwgeCldID0gdGhpcy5kYXRhW3RoaXMuX2lkeChkaW0gLSAxLCB4KV07XG4gICAgICAgICAgICAvLyBsZWZ0IGhvcml6b250YWwgYm9yZGVyXG4gICAgICAgICAgICB0aGlzLmRhdGFbdGhpcy5faWR4KHgsIC0xKV0gPSB0aGlzLmRhdGFbdGhpcy5faWR4KHgsIDApXTtcbiAgICAgICAgICAgIC8vIHJpZ2h0IGhvcml6b250YWwgYm9yZGVyXG4gICAgICAgICAgICB0aGlzLmRhdGFbdGhpcy5faWR4KHgsIGRpbSldID0gdGhpcy5kYXRhW3RoaXMuX2lkeCh4LCBkaW0gLSAxKV07XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29ybmVyc1xuICAgICAgICB0aGlzLmRhdGFbdGhpcy5faWR4KC0xLCAtMSldID0gdGhpcy5kYXRhW3RoaXMuX2lkeCgwLCAwKV07XG4gICAgICAgIHRoaXMuZGF0YVt0aGlzLl9pZHgoZGltLCAtMSldID0gdGhpcy5kYXRhW3RoaXMuX2lkeChkaW0gLSAxLCAwKV07XG4gICAgICAgIHRoaXMuZGF0YVt0aGlzLl9pZHgoLTEsIGRpbSldID0gdGhpcy5kYXRhW3RoaXMuX2lkeCgwLCBkaW0gLSAxKV07XG4gICAgICAgIHRoaXMuZGF0YVt0aGlzLl9pZHgoZGltLCBkaW0pXSA9IHRoaXMuZGF0YVt0aGlzLl9pZHgoZGltIC0gMSwgZGltIC0gMSldO1xuICAgIH1cblxuICAgIGdldCh4OiBudW1iZXIsIHk6IG51bWJlcikge1xuICAgICAgICBjb25zdCBwaXhlbHMgPSBuZXcgVWludDhBcnJheSh0aGlzLmRhdGEuYnVmZmVyKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9pZHgoeCwgeSkgKiA0O1xuICAgICAgICBjb25zdCB1bnBhY2sgPSB0aGlzLmVuY29kaW5nID09PSBcInRlcnJhcml1bVwiID8gdGhpcy5fdW5wYWNrVGVycmFyaXVtIDogdGhpcy5fdW5wYWNrTWFwYm94O1xuICAgICAgICByZXR1cm4gdW5wYWNrKHBpeGVsc1tpbmRleF0sIHBpeGVsc1tpbmRleCArIDFdLCBwaXhlbHNbaW5kZXggKyAyXSk7XG4gICAgfVxuXG4gICAgZ2V0VW5wYWNrVmVjdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbmNvZGluZyA9PT0gXCJ0ZXJyYXJpdW1cIiA/IFsyNTYuMCwgMS4wLCAxLjAgLyAyNTYuMCwgMzI3NjguMF0gOiBbNjU1My42LCAyNS42LCAwLjEsIDEwMDAwLjBdO1xuICAgIH1cblxuICAgIF9pZHgoeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHggPCAtMSB8fCB4ID49IHRoaXMuZGltICsgMSB8fCAgeSA8IC0xIHx8IHkgPj0gdGhpcy5kaW0gKyAxKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb3V0IG9mIHJhbmdlIHNvdXJjZSBjb29yZGluYXRlcyBmb3IgREVNIGRhdGEnKTtcbiAgICAgICAgcmV0dXJuICh5ICsgMSkgKiB0aGlzLnN0cmlkZSArICh4ICsgMSk7XG4gICAgfVxuXG4gICAgX3VucGFja01hcGJveChyOiBudW1iZXIsIGc6IG51bWJlciwgYjogbnVtYmVyKSB7XG4gICAgICAgIC8vIHVucGFja2luZyBmb3JtdWxhIGZvciBtYXBib3gudGVycmFpbi1yZ2I6XG4gICAgICAgIC8vIGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vaGVscC9hY2Nlc3MtZWxldmF0aW9uLWRhdGEvI21hcGJveC10ZXJyYWluLXJnYlxuICAgICAgICByZXR1cm4gKChyICogMjU2ICogMjU2ICsgZyAqIDI1Ni4wICsgYikgLyAxMC4wIC0gMTAwMDAuMCk7XG4gICAgfVxuXG4gICAgX3VucGFja1RlcnJhcml1bShyOiBudW1iZXIsIGc6IG51bWJlciwgYjogbnVtYmVyKSB7XG4gICAgICAgIC8vIHVucGFja2luZyBmb3JtdWxhIGZvciBtYXB6ZW4gdGVycmFyaXVtOlxuICAgICAgICAvLyBodHRwczovL2F3cy5hbWF6b24uY29tL3B1YmxpYy1kYXRhc2V0cy90ZXJyYWluL1xuICAgICAgICByZXR1cm4gKChyICogMjU2ICsgZyArIGIgLyAyNTYpIC0gMzI3NjguMCk7XG4gICAgfVxuXG4gICAgZ2V0UGl4ZWxzKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJHQkFJbWFnZSh7d2lkdGg6IHRoaXMuc3RyaWRlLCBoZWlnaHQ6IHRoaXMuc3RyaWRlfSwgbmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhLmJ1ZmZlcikpO1xuICAgIH1cblxuICAgIGJhY2tmaWxsQm9yZGVyKGJvcmRlclRpbGU6IERFTURhdGEsIGR4OiBudW1iZXIsIGR5OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuZGltICE9PSBib3JkZXJUaWxlLmRpbSkgdGhyb3cgbmV3IEVycm9yKCdkZW0gZGltZW5zaW9uIG1pc21hdGNoJyk7XG5cbiAgICAgICAgbGV0IHhNaW4gPSBkeCAqIHRoaXMuZGltLFxuICAgICAgICAgICAgeE1heCA9IGR4ICogdGhpcy5kaW0gKyB0aGlzLmRpbSxcbiAgICAgICAgICAgIHlNaW4gPSBkeSAqIHRoaXMuZGltLFxuICAgICAgICAgICAgeU1heCA9IGR5ICogdGhpcy5kaW0gKyB0aGlzLmRpbTtcblxuICAgICAgICBzd2l0Y2ggKGR4KSB7XG4gICAgICAgIGNhc2UgLTE6XG4gICAgICAgICAgICB4TWluID0geE1heCAtIDE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgeE1heCA9IHhNaW4gKyAxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKGR5KSB7XG4gICAgICAgIGNhc2UgLTE6XG4gICAgICAgICAgICB5TWluID0geU1heCAtIDE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgeU1heCA9IHlNaW4gKyAxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBveCA9IC1keCAqIHRoaXMuZGltO1xuICAgICAgICBjb25zdCBveSA9IC1keSAqIHRoaXMuZGltO1xuICAgICAgICBmb3IgKGxldCB5ID0geU1pbjsgeSA8IHlNYXg7IHkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgeCA9IHhNaW47IHggPCB4TWF4OyB4KyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFbdGhpcy5faWR4KHgsIHkpXSA9IGJvcmRlclRpbGUuZGF0YVt0aGlzLl9pZHgoeCArIG94LCB5ICsgb3kpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxucmVnaXN0ZXIoJ0RFTURhdGEnLCBERU1EYXRhKTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB0eXBlIHtDb2xsaXNpb25Cb3hBcnJheX0gZnJvbSAnLi9hcnJheV90eXBlcyc7XG5pbXBvcnQgdHlwZSBTdHlsZSBmcm9tICcuLi9zdHlsZS9zdHlsZSc7XG5pbXBvcnQgdHlwZSB7VHlwZWRTdHlsZUxheWVyfSBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllci90eXBlZF9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBGZWF0dXJlSW5kZXggZnJvbSAnLi9mZWF0dXJlX2luZGV4JztcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7RmVhdHVyZVN0YXRlc30gZnJvbSAnLi4vc291cmNlL3NvdXJjZV9zdGF0ZSc7XG5pbXBvcnQgdHlwZSB7SW1hZ2VQb3NpdGlvbn0gZnJvbSAnLi4vcmVuZGVyL2ltYWdlX2F0bGFzJztcbmltcG9ydCB0eXBlIHtDYW5vbmljYWxUaWxlSUR9IGZyb20gJy4uL3NvdXJjZS90aWxlX2lkJztcblxuZXhwb3J0IHR5cGUgQnVja2V0UGFyYW1ldGVyczxMYXllcjogVHlwZWRTdHlsZUxheWVyPiA9IHtcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGxheWVyczogQXJyYXk8TGF5ZXI+LFxuICAgIHpvb206IG51bWJlcixcbiAgICBwaXhlbFJhdGlvOiBudW1iZXIsXG4gICAgb3ZlcnNjYWxpbmc6IG51bWJlcixcbiAgICBjb2xsaXNpb25Cb3hBcnJheTogQ29sbGlzaW9uQm94QXJyYXksXG4gICAgc291cmNlTGF5ZXJJbmRleDogbnVtYmVyLFxuICAgIHNvdXJjZUlEOiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgUG9wdWxhdGVQYXJhbWV0ZXJzID0ge1xuICAgIGZlYXR1cmVJbmRleDogRmVhdHVyZUluZGV4LFxuICAgIGljb25EZXBlbmRlbmNpZXM6IHt9LFxuICAgIHBhdHRlcm5EZXBlbmRlbmNpZXM6IHt9LFxuICAgIGdseXBoRGVwZW5kZW5jaWVzOiB7fSxcbiAgICBhdmFpbGFibGVJbWFnZXM6IEFycmF5PHN0cmluZz5cbn1cblxuZXhwb3J0IHR5cGUgSW5kZXhlZEZlYXR1cmUgPSB7XG4gICAgZmVhdHVyZTogVmVjdG9yVGlsZUZlYXR1cmUsXG4gICAgaWQ6IG51bWJlciB8IHN0cmluZyxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIHNvdXJjZUxheWVySW5kZXg6IG51bWJlcixcbn1cblxuZXhwb3J0IHR5cGUgQnVja2V0RmVhdHVyZSA9IHt8XG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBzb3VyY2VMYXllckluZGV4OiBudW1iZXIsXG4gICAgZ2VvbWV0cnk6IEFycmF5PEFycmF5PFBvaW50Pj4sXG4gICAgcHJvcGVydGllczogT2JqZWN0LFxuICAgIHR5cGU6IDEgfCAyIHwgMyxcbiAgICBpZD86IGFueSxcbiAgICArcGF0dGVybnM6IHtbXzogc3RyaW5nXToge1wibWluXCI6IHN0cmluZywgXCJtaWRcIjogc3RyaW5nLCBcIm1heFwiOiBzdHJpbmd9fSxcbiAgICBzb3J0S2V5PzogbnVtYmVyXG58fTtcblxuLyoqXG4gKiBUaGUgYEJ1Y2tldGAgaW50ZXJmYWNlIGlzIHRoZSBzaW5nbGUgcG9pbnQgb2Yga25vd2xlZGdlIGFib3V0IHR1cm5pbmcgdmVjdG9yXG4gKiB0aWxlcyBpbnRvIFdlYkdMIGJ1ZmZlcnMuXG4gKlxuICogYEJ1Y2tldGAgaXMgYW4gYWJzdHJhY3QgaW50ZXJmYWNlLiBBbiBpbXBsZW1lbnRhdGlvbiBleGlzdHMgZm9yIGVhY2ggc3R5bGUgbGF5ZXIgdHlwZS5cbiAqIENyZWF0ZSBhIGJ1Y2tldCB2aWEgdGhlIGBTdHlsZUxheWVyI2NyZWF0ZUJ1Y2tldGAgbWV0aG9kLlxuICpcbiAqIFRoZSBjb25jcmV0ZSBidWNrZXQgdHlwZXMsIHVzaW5nIGxheW91dCBvcHRpb25zIGZyb20gdGhlIHN0eWxlIGxheWVyLFxuICogdHJhbnNmb3JtIGZlYXR1cmUgZ2VvbWV0cmllcyBpbnRvIHZlcnRleCBhbmQgaW5kZXggZGF0YSBmb3IgdXNlIGJ5IHRoZVxuICogdmVydGV4IHNoYWRlci4gIFRoZXkgYWxzbyAodmlhIGBQcm9ncmFtQ29uZmlndXJhdGlvbmApIHVzZSBmZWF0dXJlXG4gKiBwcm9wZXJ0aWVzIGFuZCB0aGUgem9vbSBsZXZlbCB0byBwb3B1bGF0ZSB0aGUgYXR0cmlidXRlcyBuZWVkZWQgZm9yXG4gKiBkYXRhLWRyaXZlbiBzdHlsaW5nLlxuICpcbiAqIEJ1Y2tldHMgYXJlIGRlc2lnbmVkIHRvIGJlIGJ1aWx0IG9uIGEgd29ya2VyIHRocmVhZCBhbmQgdGhlbiBzZXJpYWxpemVkIGFuZFxuICogdHJhbnNmZXJyZWQgYmFjayB0byB0aGUgbWFpbiB0aHJlYWQgZm9yIHJlbmRlcmluZy4gIE9uIHRoZSB3b3JrZXIgc2lkZSwgYVxuICogYnVja2V0J3MgdmVydGV4LCBpbmRleCwgYW5kIGF0dHJpYnV0ZSBkYXRhIGlzIHN0b3JlZCBpbiBgYnVja2V0LmFycmF5czpcbiAqIEFycmF5R3JvdXBgLiAgV2hlbiBhIGJ1Y2tldCdzIGRhdGEgaXMgc2VyaWFsaXplZCBhbmQgc2VudCBiYWNrIHRvIHRoZSBtYWluXG4gKiB0aHJlYWQsIGlzIGdldHMgZGVzZXJpYWxpemVkICh1c2luZyBgbmV3IEJ1Y2tldChzZXJpYWxpemVkQnVja2V0RGF0YSlgLCB3aXRoXG4gKiB0aGUgYXJyYXkgZGF0YSBub3cgc3RvcmVkIGluIGBidWNrZXQuYnVmZmVyczogQnVmZmVyR3JvdXBgLiAgQnVmZmVyR3JvdXBzXG4gKiBob2xkIHRoZSBzYW1lIGRhdGEgYXMgQXJyYXlHcm91cHMsIGJ1dCBhcmUgdHVuZWQgZm9yIGNvbnN1bXB0aW9uIGJ5IFdlYkdMLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVja2V0IHtcbiAgICBsYXllcklkczogQXJyYXk8c3RyaW5nPjtcbiAgICBoYXNQYXR0ZXJuOiBib29sZWFuO1xuICAgICtsYXllcnM6IEFycmF5PGFueT47XG4gICAgK3N0YXRlRGVwZW5kZW50TGF5ZXJzOiBBcnJheTxhbnk+O1xuICAgICtzdGF0ZURlcGVuZGVudExheWVySWRzOiBBcnJheTxzdHJpbmc+O1xuICAgIHBvcHVsYXRlKGZlYXR1cmVzOiBBcnJheTxJbmRleGVkRmVhdHVyZT4sIG9wdGlvbnM6IFBvcHVsYXRlUGFyYW1ldGVycywgY2Fub25pY2FsOiBDYW5vbmljYWxUaWxlSUQpOiB2b2lkO1xuICAgIHVwZGF0ZShzdGF0ZXM6IEZlYXR1cmVTdGF0ZXMsIHZ0TGF5ZXI6IFZlY3RvclRpbGVMYXllciwgaW1hZ2VQb3NpdGlvbnM6IHtbXzogc3RyaW5nXTogSW1hZ2VQb3NpdGlvbn0pOiB2b2lkO1xuICAgIGlzRW1wdHkoKTogYm9vbGVhbjtcblxuICAgIHVwbG9hZChjb250ZXh0OiBDb250ZXh0KTogdm9pZDtcbiAgICB1cGxvYWRQZW5kaW5nKCk6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBSZWxlYXNlIHRoZSBXZWJHTCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBidWZmZXJzLiBOb3RlIHRoYXQgYmVjYXVzZVxuICAgICAqIGJ1Y2tldHMgYXJlIHNoYXJlZCBiZXR3ZWVuIGxheWVycyBoYXZpbmcgdGhlIHNhbWUgbGF5b3V0IHByb3BlcnRpZXMsIHRoZXlcbiAgICAgKiBtdXN0IGJlIGRlc3Ryb3llZCBpbiBncm91cHMgKGFsbCBidWNrZXRzIGZvciBhIHRpbGUsIG9yIGFsbCBzeW1ib2wgYnVja2V0cykuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGRlc3Ryb3koKTogdm9pZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlc2VyaWFsaXplKGlucHV0OiBBcnJheTxCdWNrZXQ+LCBzdHlsZTogU3R5bGUpOiB7W186IHN0cmluZ106IEJ1Y2tldH0ge1xuICAgIGNvbnN0IG91dHB1dCA9IHt9O1xuXG4gICAgLy8gR3VhcmQgYWdhaW5zdCB0aGUgY2FzZSB3aGVyZSB0aGUgbWFwJ3Mgc3R5bGUgaGFzIGJlZW4gc2V0IHRvIG51bGwgd2hpbGVcbiAgICAvLyB0aGlzIGJ1Y2tldCBoYXMgYmVlbiBwYXJzaW5nLlxuICAgIGlmICghc3R5bGUpIHJldHVybiBvdXRwdXQ7XG5cbiAgICBmb3IgKGNvbnN0IGJ1Y2tldCBvZiBpbnB1dCkge1xuICAgICAgICBjb25zdCBsYXllcnMgPSBidWNrZXQubGF5ZXJJZHNcbiAgICAgICAgICAgIC5tYXAoKGlkKSA9PiBzdHlsZS5nZXRMYXllcihpZCkpXG4gICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pO1xuXG4gICAgICAgIGlmIChsYXllcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGxvb2sgdXAgU3R5bGVMYXllciBvYmplY3RzIGZyb20gbGF5ZXIgaWRzIChzaW5jZSB3ZSBkb24ndFxuICAgICAgICAvLyB3YW50IHRvIHdhc3RlIHRpbWUgc2VyaWFsaXppbmcvY29weWluZyB0aGVtIGZyb20gdGhlIHdvcmtlcilcbiAgICAgICAgKGJ1Y2tldDogYW55KS5sYXllcnMgPSBsYXllcnM7XG4gICAgICAgIGlmICgoYnVja2V0OiBhbnkpLnN0YXRlRGVwZW5kZW50TGF5ZXJJZHMpIHtcbiAgICAgICAgICAgIChidWNrZXQ6IGFueSkuc3RhdGVEZXBlbmRlbnRMYXllcnMgPSAoYnVja2V0OiBhbnkpLnN0YXRlRGVwZW5kZW50TGF5ZXJJZHMubWFwKChsSWQpID0+IGxheWVycy5maWx0ZXIoKGwpID0+IGwuaWQgPT09IGxJZClbMF0pO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XG4gICAgICAgICAgICBvdXRwdXRbbGF5ZXIuaWRdID0gYnVja2V0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dHB1dDtcbn1cbiIsIi8vIEBmbG93IHN0cmljdFxuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmNsYXNzIERpY3Rpb25hcnlDb2RlciB7XG4gICAgX3N0cmluZ1RvTnVtYmVyOiB7W186IHN0cmluZ106IG51bWJlciB9O1xuICAgIF9udW1iZXJUb1N0cmluZzogQXJyYXk8c3RyaW5nPjtcblxuICAgIGNvbnN0cnVjdG9yKHN0cmluZ3M6IEFycmF5PHN0cmluZz4pIHtcbiAgICAgICAgdGhpcy5fc3RyaW5nVG9OdW1iZXIgPSB7fTtcbiAgICAgICAgdGhpcy5fbnVtYmVyVG9TdHJpbmcgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzdHJpbmcgPSBzdHJpbmdzW2ldO1xuICAgICAgICAgICAgdGhpcy5fc3RyaW5nVG9OdW1iZXJbc3RyaW5nXSA9IGk7XG4gICAgICAgICAgICB0aGlzLl9udW1iZXJUb1N0cmluZ1tpXSA9IHN0cmluZztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVuY29kZShzdHJpbmc6IHN0cmluZykge1xuICAgICAgICBhc3NlcnQoc3RyaW5nIGluIHRoaXMuX3N0cmluZ1RvTnVtYmVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0cmluZ1RvTnVtYmVyW3N0cmluZ107XG4gICAgfVxuXG4gICAgZGVjb2RlKG46IG51bWJlcikge1xuICAgICAgICBhc3NlcnQobiA8IHRoaXMuX251bWJlclRvU3RyaW5nLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9udW1iZXJUb1N0cmluZ1tuXTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERpY3Rpb25hcnlDb2RlcjtcbiIsIi8vIEBmbG93XG5pbXBvcnQgdHlwZSB7R2VvSlNPTkdlb21ldHJ5fSBmcm9tICdAbWFwYm94L2dlb2pzb24tdHlwZXMnO1xuXG5jbGFzcyBGZWF0dXJlIHtcbiAgICB0eXBlOiAnRmVhdHVyZSc7XG4gICAgX2dlb21ldHJ5OiA/R2VvSlNPTkdlb21ldHJ5O1xuICAgIHByb3BlcnRpZXM6IHt9O1xuICAgIGlkOiBudW1iZXIgfCBzdHJpbmcgfCB2b2lkO1xuXG4gICAgX3ZlY3RvclRpbGVGZWF0dXJlOiBWZWN0b3JUaWxlRmVhdHVyZTtcblxuICAgIGNvbnN0cnVjdG9yKHZlY3RvclRpbGVGZWF0dXJlOiBWZWN0b3JUaWxlRmVhdHVyZSwgejogbnVtYmVyLCB4OiBudW1iZXIsIHk6IG51bWJlciwgaWQ6IHN0cmluZyB8IG51bWJlciB8IHZvaWQpIHtcbiAgICAgICAgdGhpcy50eXBlID0gJ0ZlYXR1cmUnO1xuXG4gICAgICAgIHRoaXMuX3ZlY3RvclRpbGVGZWF0dXJlID0gdmVjdG9yVGlsZUZlYXR1cmU7XG4gICAgICAgICh2ZWN0b3JUaWxlRmVhdHVyZTogYW55KS5feiA9IHo7XG4gICAgICAgICh2ZWN0b3JUaWxlRmVhdHVyZTogYW55KS5feCA9IHg7XG4gICAgICAgICh2ZWN0b3JUaWxlRmVhdHVyZTogYW55KS5feSA9IHk7XG5cbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gdmVjdG9yVGlsZUZlYXR1cmUucHJvcGVydGllcztcbiAgICAgICAgdGhpcy5pZCA9IGlkO1xuICAgIH1cblxuICAgIGdldCBnZW9tZXRyeSgpOiA/R2VvSlNPTkdlb21ldHJ5IHtcbiAgICAgICAgaWYgKHRoaXMuX2dlb21ldHJ5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2dlb21ldHJ5ID0gdGhpcy5fdmVjdG9yVGlsZUZlYXR1cmUudG9HZW9KU09OKFxuICAgICAgICAgICAgICAgICh0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZTogYW55KS5feCxcbiAgICAgICAgICAgICAgICAodGhpcy5fdmVjdG9yVGlsZUZlYXR1cmU6IGFueSkuX3ksXG4gICAgICAgICAgICAgICAgKHRoaXMuX3ZlY3RvclRpbGVGZWF0dXJlOiBhbnkpLl96KS5nZW9tZXRyeTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZ2VvbWV0cnk7XG4gICAgfVxuXG4gICAgc2V0IGdlb21ldHJ5KGc6ID9HZW9KU09OR2VvbWV0cnkpIHtcbiAgICAgICAgdGhpcy5fZ2VvbWV0cnkgPSBnO1xuICAgIH1cblxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgY29uc3QganNvbiA9IHtcbiAgICAgICAgICAgIGdlb21ldHJ5OiB0aGlzLmdlb21ldHJ5XG4gICAgICAgIH07XG4gICAgICAgIGZvciAoY29uc3QgaSBpbiB0aGlzKSB7XG4gICAgICAgICAgICBpZiAoaSA9PT0gJ19nZW9tZXRyeScgfHwgaSA9PT0gJ192ZWN0b3JUaWxlRmVhdHVyZScpIGNvbnRpbnVlO1xuICAgICAgICAgICAganNvbltpXSA9ICh0aGlzOiBhbnkpW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBqc29uO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRmVhdHVyZTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7ZXh0ZW5kfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IFRpbGUgZnJvbSAnLi90aWxlJztcbmltcG9ydCB0eXBlIHtGZWF0dXJlU3RhdGV9IGZyb20gJy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbic7XG5cbmV4cG9ydCB0eXBlIEZlYXR1cmVTdGF0ZXMgPSB7W2ZlYXR1cmVfaWQ6IHN0cmluZ106IEZlYXR1cmVTdGF0ZX07XG5leHBvcnQgdHlwZSBMYXllckZlYXR1cmVTdGF0ZXMgPSB7W2xheWVyOiBzdHJpbmddOiBGZWF0dXJlU3RhdGVzfTtcblxuLyoqXG4gKiBTb3VyY2VGZWF0dXJlU3RhdGUgbWFuYWdlcyB0aGUgc3RhdGUgYW5kIHBlbmRpbmcgY2hhbmdlc1xuICogdG8gZmVhdHVyZXMgaW4gYSBzb3VyY2UsIHNlcGFyYXRlZCBieSBzb3VyY2UgbGF5ZXIuXG4gKiBzdGF0ZUNoYW5nZXMgYW5kIGRlbGV0ZWRTdGF0ZXMgYmF0Y2ggYWxsIGNoYW5nZXMgdG8gdGhlIHRpbGUgKHVwZGF0ZXMgYW5kIHJlbW92ZXMsIHJlc3BlY3RpdmVseSlcbiAqIGJldHdlZW4gY29hbGVzY2UoKSBldmVudHMuIGFkZEZlYXR1cmVTdGF0ZSgpIGFuZCByZW1vdmVGZWF0dXJlU3RhdGUoKSBhbHNvIHVwZGF0ZSB0aGVpciBjb3VudGVycGFydCdzXG4gKiBsaXN0IG9mIGNoYW5nZXMsIHN1Y2ggdGhhdCBjb2FsZXNjZSgpIGNhbiBhcHBseSB0aGUgcHJvcGVyIHN0YXRlIGNoYW5nZXMgd2hpbGUgYWdub3N0aWMgdG8gdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMuXG4gKiBJbiBkZWxldGVkU3RhdGVzLCBhbGwgbnVsbCdzIGRlbm90ZSBjb21wbGV0ZSByZW1vdmFsIG9mIHN0YXRlIGF0IHRoYXQgc2NvcGVcbiAqIEBwcml2YXRlXG4qL1xuY2xhc3MgU291cmNlRmVhdHVyZVN0YXRlIHtcbiAgICBzdGF0ZTogTGF5ZXJGZWF0dXJlU3RhdGVzO1xuICAgIHN0YXRlQ2hhbmdlczogTGF5ZXJGZWF0dXJlU3RhdGVzO1xuICAgIGRlbGV0ZWRTdGF0ZXM6IHt9O1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSB7fTtcbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMgPSB7fTtcbiAgICAgICAgdGhpcy5kZWxldGVkU3RhdGVzID0ge307XG4gICAgfVxuXG4gICAgdXBkYXRlU3RhdGUoc291cmNlTGF5ZXI6IHN0cmluZywgZmVhdHVyZUlkOiBudW1iZXIgfCBzdHJpbmcsIG5ld1N0YXRlOiBPYmplY3QpIHtcbiAgICAgICAgY29uc3QgZmVhdHVyZSA9IFN0cmluZyhmZWF0dXJlSWQpO1xuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlc1tzb3VyY2VMYXllcl0gPSB0aGlzLnN0YXRlQ2hhbmdlc1tzb3VyY2VMYXllcl0gfHwge307XG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzW3NvdXJjZUxheWVyXVtmZWF0dXJlXSA9IHRoaXMuc3RhdGVDaGFuZ2VzW3NvdXJjZUxheWVyXVtmZWF0dXJlXSB8fCB7fTtcbiAgICAgICAgZXh0ZW5kKHRoaXMuc3RhdGVDaGFuZ2VzW3NvdXJjZUxheWVyXVtmZWF0dXJlXSwgbmV3U3RhdGUpO1xuXG4gICAgICAgIGlmICh0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdID0ge307XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZ0IGluIHRoaXMuc3RhdGVbc291cmNlTGF5ZXJdKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZ0ICE9PSBmZWF0dXJlKSB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdW2Z0XSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBmZWF0dXJlRGVsZXRpb25RdWV1ZWQgPSB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdICYmIHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl1bZmVhdHVyZV0gPT09IG51bGw7XG4gICAgICAgICAgICBpZiAoZmVhdHVyZURlbGV0aW9uUXVldWVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXVtmZWF0dXJlXSA9IHt9O1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiB0aGlzLnN0YXRlW3NvdXJjZUxheWVyXVtmZWF0dXJlXSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW5ld1N0YXRlW3Byb3BdKSB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVdW3Byb3BdID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIG5ld1N0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlbGV0aW9uSW5RdWV1ZSA9IHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl0gJiYgdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXVtmZWF0dXJlXSAmJiB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVdW2tleV0gPT09IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWxldGlvbkluUXVldWUpIGRlbGV0ZSB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVdW2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVtb3ZlRmVhdHVyZVN0YXRlKHNvdXJjZUxheWVyOiBzdHJpbmcsIGZlYXR1cmVJZD86IG51bWJlciB8IHN0cmluZywga2V5Pzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHNvdXJjZUxheWVyRGVsZXRlZCA9IHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl0gPT09IG51bGw7XG4gICAgICAgIGlmIChzb3VyY2VMYXllckRlbGV0ZWQpIHJldHVybjtcblxuICAgICAgICBjb25zdCBmZWF0dXJlID0gU3RyaW5nKGZlYXR1cmVJZCk7XG5cbiAgICAgICAgdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXSA9IHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl0gfHwge307XG5cbiAgICAgICAgaWYgKGtleSAmJiBmZWF0dXJlSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl1bZmVhdHVyZV0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVdID0gdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXVtmZWF0dXJlXSB8fCB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVdW2tleV0gPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGZlYXR1cmVJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVJblF1ZXVlID0gdGhpcy5zdGF0ZUNoYW5nZXNbc291cmNlTGF5ZXJdICYmIHRoaXMuc3RhdGVDaGFuZ2VzW3NvdXJjZUxheWVyXVtmZWF0dXJlXTtcbiAgICAgICAgICAgIGlmICh1cGRhdGVJblF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXVtmZWF0dXJlXSA9IHt9O1xuICAgICAgICAgICAgICAgIGZvciAoa2V5IGluIHRoaXMuc3RhdGVDaGFuZ2VzW3NvdXJjZUxheWVyXVtmZWF0dXJlXSkgdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXVtmZWF0dXJlXVtrZXldID0gbnVsbDtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVdID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl0gPSBudWxsO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBnZXRTdGF0ZShzb3VyY2VMYXllcjogc3RyaW5nLCBmZWF0dXJlSWQ6IG51bWJlciB8IHN0cmluZykge1xuICAgICAgICBjb25zdCBmZWF0dXJlID0gU3RyaW5nKGZlYXR1cmVJZCk7XG4gICAgICAgIGNvbnN0IGJhc2UgPSB0aGlzLnN0YXRlW3NvdXJjZUxheWVyXSB8fCB7fTtcbiAgICAgICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuc3RhdGVDaGFuZ2VzW3NvdXJjZUxheWVyXSB8fCB7fTtcblxuICAgICAgICBjb25zdCByZWNvbmNpbGVkU3RhdGUgPSBleHRlbmQoe30sIGJhc2VbZmVhdHVyZV0sIGNoYW5nZXNbZmVhdHVyZV0pO1xuXG4gICAgICAgIC8vcmV0dXJuIGVtcHR5IG9iamVjdCBpZiB0aGUgd2hvbGUgc291cmNlIGxheWVyIGlzIGF3YWl0aW5nIGRlbGV0aW9uXG4gICAgICAgIGlmICh0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdID09PSBudWxsKSByZXR1cm4ge307XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl0pIHtcbiAgICAgICAgICAgIGNvbnN0IGZlYXR1cmVEZWxldGlvbnMgPSB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVJZF07XG4gICAgICAgICAgICBpZiAoZmVhdHVyZURlbGV0aW9ucyA9PT0gbnVsbCkgcmV0dXJuIHt9O1xuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIGZlYXR1cmVEZWxldGlvbnMpIGRlbGV0ZSByZWNvbmNpbGVkU3RhdGVbcHJvcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlY29uY2lsZWRTdGF0ZTtcbiAgICB9XG5cbiAgICBpbml0aWFsaXplVGlsZVN0YXRlKHRpbGU6IFRpbGUsIHBhaW50ZXI6IGFueSkge1xuICAgICAgICB0aWxlLnNldEZlYXR1cmVTdGF0ZSh0aGlzLnN0YXRlLCBwYWludGVyKTtcbiAgICB9XG5cbiAgICBjb2FsZXNjZUNoYW5nZXModGlsZXM6IHtbXzogYW55XTogVGlsZX0sIHBhaW50ZXI6IGFueSkge1xuICAgICAgICAvL3RyYWNrIGNoYW5nZXMgd2l0aCBmdWxsIHN0YXRlIG9iamVjdHMsIGJ1dCBvbmx5IGZvciBmZWF0dXJlcyB0aGF0IGdvdCBtb2RpZmllZFxuICAgICAgICBjb25zdCBmZWF0dXJlc0NoYW5nZWQ6IExheWVyRmVhdHVyZVN0YXRlcyA9IHt9O1xuXG4gICAgICAgIGZvciAoY29uc3Qgc291cmNlTGF5ZXIgaW4gdGhpcy5zdGF0ZUNoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVbc291cmNlTGF5ZXJdICA9IHRoaXMuc3RhdGVbc291cmNlTGF5ZXJdIHx8IHt9O1xuICAgICAgICAgICAgY29uc3QgbGF5ZXJTdGF0ZXMgPSB7fTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmVhdHVyZSBpbiB0aGlzLnN0YXRlQ2hhbmdlc1tzb3VyY2VMYXllcl0pIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc3RhdGVbc291cmNlTGF5ZXJdW2ZlYXR1cmVdKSB0aGlzLnN0YXRlW3NvdXJjZUxheWVyXVtmZWF0dXJlXSA9IHt9O1xuICAgICAgICAgICAgICAgIGV4dGVuZCh0aGlzLnN0YXRlW3NvdXJjZUxheWVyXVtmZWF0dXJlXSwgdGhpcy5zdGF0ZUNoYW5nZXNbc291cmNlTGF5ZXJdW2ZlYXR1cmVdKTtcbiAgICAgICAgICAgICAgICBsYXllclN0YXRlc1tmZWF0dXJlXSA9IHRoaXMuc3RhdGVbc291cmNlTGF5ZXJdW2ZlYXR1cmVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmVhdHVyZXNDaGFuZ2VkW3NvdXJjZUxheWVyXSA9IGxheWVyU3RhdGVzO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBzb3VyY2VMYXllciBpbiB0aGlzLmRlbGV0ZWRTdGF0ZXMpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVbc291cmNlTGF5ZXJdICA9IHRoaXMuc3RhdGVbc291cmNlTGF5ZXJdIHx8IHt9O1xuICAgICAgICAgICAgY29uc3QgbGF5ZXJTdGF0ZXMgPSB7fTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl0gPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZ0IGluIHRoaXMuc3RhdGVbc291cmNlTGF5ZXJdKSB7XG4gICAgICAgICAgICAgICAgICAgIGxheWVyU3RhdGVzW2Z0XSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlW3NvdXJjZUxheWVyXVtmdF0gPSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmVhdHVyZSBpbiB0aGlzLmRlbGV0ZWRTdGF0ZXNbc291cmNlTGF5ZXJdKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlbGV0ZVdob2xlRmVhdHVyZVN0YXRlID0gdGhpcy5kZWxldGVkU3RhdGVzW3NvdXJjZUxheWVyXVtmZWF0dXJlXSA9PT0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlbGV0ZVdob2xlRmVhdHVyZVN0YXRlKSB0aGlzLnN0YXRlW3NvdXJjZUxheWVyXVtmZWF0dXJlXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMuZGVsZXRlZFN0YXRlc1tzb3VyY2VMYXllcl1bZmVhdHVyZV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuc3RhdGVbc291cmNlTGF5ZXJdW2ZlYXR1cmVdW2tleV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbGF5ZXJTdGF0ZXNbZmVhdHVyZV0gPSB0aGlzLnN0YXRlW3NvdXJjZUxheWVyXVtmZWF0dXJlXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZlYXR1cmVzQ2hhbmdlZFtzb3VyY2VMYXllcl0gPSBmZWF0dXJlc0NoYW5nZWRbc291cmNlTGF5ZXJdIHx8IHt9O1xuICAgICAgICAgICAgZXh0ZW5kKGZlYXR1cmVzQ2hhbmdlZFtzb3VyY2VMYXllcl0sIGxheWVyU3RhdGVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzID0ge307XG4gICAgICAgIHRoaXMuZGVsZXRlZFN0YXRlcyA9IHt9O1xuXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhmZWF0dXJlc0NoYW5nZWQpLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGlsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbGUgPSB0aWxlc1tpZF07XG4gICAgICAgICAgICB0aWxlLnNldEZlYXR1cmVTdGF0ZShmZWF0dXJlc0NoYW5nZWQsIHBhaW50ZXIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTb3VyY2VGZWF0dXJlU3RhdGU7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbmltcG9ydCBsb2FkR2VvbWV0cnkgZnJvbSAnLi9sb2FkX2dlb21ldHJ5JztcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi9leHRlbnQnO1xuaW1wb3J0IGZlYXR1cmVGaWx0ZXIgZnJvbSAnLi4vc3R5bGUtc3BlYy9mZWF0dXJlX2ZpbHRlcic7XG5pbXBvcnQgR3JpZCBmcm9tICdncmlkLWluZGV4JztcbmltcG9ydCBEaWN0aW9uYXJ5Q29kZXIgZnJvbSAnLi4vdXRpbC9kaWN0aW9uYXJ5X2NvZGVyJztcbmltcG9ydCB2dCBmcm9tICdAbWFwYm94L3ZlY3Rvci10aWxlJztcbmltcG9ydCBQcm90b2J1ZiBmcm9tICdwYmYnO1xuaW1wb3J0IEdlb0pTT05GZWF0dXJlIGZyb20gJy4uL3V0aWwvdmVjdG9ydGlsZV90b19nZW9qc29uJztcbmltcG9ydCB7YXJyYXlzSW50ZXJzZWN0LCBtYXBPYmplY3R9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uL3NvdXJjZS90aWxlX2lkJztcbmltcG9ydCB7cmVnaXN0ZXJ9IGZyb20gJy4uL3V0aWwvd2ViX3dvcmtlcl90cmFuc2Zlcic7XG5pbXBvcnQgRXZhbHVhdGlvblBhcmFtZXRlcnMgZnJvbSAnLi4vc3R5bGUvZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcbmltcG9ydCBTb3VyY2VGZWF0dXJlU3RhdGUgZnJvbSAnLi4vc291cmNlL3NvdXJjZV9zdGF0ZSc7XG5pbXBvcnQge3BvbHlnb25JbnRlcnNlY3RzQm94fSBmcm9tICcuLi91dGlsL2ludGVyc2VjdGlvbl90ZXN0cyc7XG5pbXBvcnQge1Bvc3NpYmx5RXZhbHVhdGVkfSBmcm9tICcuLi9zdHlsZS9wcm9wZXJ0aWVzJztcblxuaW1wb3J0IHR5cGUgU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSB7RmVhdHVyZUZpbHRlcn0gZnJvbSAnLi4vc3R5bGUtc3BlYy9mZWF0dXJlX2ZpbHRlcic7XG5pbXBvcnQgdHlwZSBUcmFuc2Zvcm0gZnJvbSAnLi4vZ2VvL3RyYW5zZm9ybSc7XG5pbXBvcnQgdHlwZSB7RmlsdGVyU3BlY2lmaWNhdGlvbiwgUHJvbW90ZUlkU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmltcG9ydCB7RmVhdHVyZUluZGV4QXJyYXl9IGZyb20gJy4vYXJyYXlfdHlwZXMnO1xuXG50eXBlIFF1ZXJ5UGFyYW1ldGVycyA9IHtcbiAgICBzY2FsZTogbnVtYmVyLFxuICAgIHBpeGVsUG9zTWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgdHJhbnNmb3JtOiBUcmFuc2Zvcm0sXG4gICAgdGlsZVNpemU6IG51bWJlcixcbiAgICBxdWVyeUdlb21ldHJ5OiBBcnJheTxQb2ludD4sXG4gICAgY2FtZXJhUXVlcnlHZW9tZXRyeTogQXJyYXk8UG9pbnQ+LFxuICAgIHF1ZXJ5UGFkZGluZzogbnVtYmVyLFxuICAgIHBhcmFtczoge1xuICAgICAgICBmaWx0ZXI6IEZpbHRlclNwZWNpZmljYXRpb24sXG4gICAgICAgIGxheWVyczogQXJyYXk8c3RyaW5nPixcbiAgICAgICAgYXZhaWxhYmxlSW1hZ2VzOiBBcnJheTxzdHJpbmc+XG4gICAgfVxufVxuXG5jbGFzcyBGZWF0dXJlSW5kZXgge1xuICAgIHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRDtcbiAgICB4OiBudW1iZXI7XG4gICAgeTogbnVtYmVyO1xuICAgIHo6IG51bWJlcjtcbiAgICBncmlkOiBHcmlkO1xuICAgIGdyaWQzRDogR3JpZDtcbiAgICBmZWF0dXJlSW5kZXhBcnJheTogRmVhdHVyZUluZGV4QXJyYXk7XG4gICAgcHJvbW90ZUlkOiA/UHJvbW90ZUlkU3BlY2lmaWNhdGlvbjtcblxuICAgIHJhd1RpbGVEYXRhOiBBcnJheUJ1ZmZlcjtcbiAgICBidWNrZXRMYXllcklEczogQXJyYXk8QXJyYXk8c3RyaW5nPj47XG5cbiAgICB2dExheWVyczoge1tfOiBzdHJpbmddOiBWZWN0b3JUaWxlTGF5ZXJ9O1xuICAgIHNvdXJjZUxheWVyQ29kZXI6IERpY3Rpb25hcnlDb2RlcjtcblxuICAgIGNvbnN0cnVjdG9yKHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCwgcHJvbW90ZUlkPzogP1Byb21vdGVJZFNwZWNpZmljYXRpb24pIHtcbiAgICAgICAgdGhpcy50aWxlSUQgPSB0aWxlSUQ7XG4gICAgICAgIHRoaXMueCA9IHRpbGVJRC5jYW5vbmljYWwueDtcbiAgICAgICAgdGhpcy55ID0gdGlsZUlELmNhbm9uaWNhbC55O1xuICAgICAgICB0aGlzLnogPSB0aWxlSUQuY2Fub25pY2FsLno7XG4gICAgICAgIHRoaXMuZ3JpZCA9IG5ldyBHcmlkKEVYVEVOVCwgMTYsIDApO1xuICAgICAgICB0aGlzLmdyaWQzRCA9IG5ldyBHcmlkKEVYVEVOVCwgMTYsIDApO1xuICAgICAgICB0aGlzLmZlYXR1cmVJbmRleEFycmF5ID0gbmV3IEZlYXR1cmVJbmRleEFycmF5KCk7XG4gICAgICAgIHRoaXMucHJvbW90ZUlkID0gcHJvbW90ZUlkO1xuICAgIH1cblxuICAgIGluc2VydChmZWF0dXJlOiBWZWN0b3JUaWxlRmVhdHVyZSwgZ2VvbWV0cnk6IEFycmF5PEFycmF5PFBvaW50Pj4sIGZlYXR1cmVJbmRleDogbnVtYmVyLCBzb3VyY2VMYXllckluZGV4OiBudW1iZXIsIGJ1Y2tldEluZGV4OiBudW1iZXIsIGlzM0Q/OiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZmVhdHVyZUluZGV4QXJyYXkubGVuZ3RoO1xuICAgICAgICB0aGlzLmZlYXR1cmVJbmRleEFycmF5LmVtcGxhY2VCYWNrKGZlYXR1cmVJbmRleCwgc291cmNlTGF5ZXJJbmRleCwgYnVja2V0SW5kZXgpO1xuXG4gICAgICAgIGNvbnN0IGdyaWQgPSBpczNEID8gdGhpcy5ncmlkM0QgOiB0aGlzLmdyaWQ7XG5cbiAgICAgICAgZm9yIChsZXQgciA9IDA7IHIgPCBnZW9tZXRyeS5sZW5ndGg7IHIrKykge1xuICAgICAgICAgICAgY29uc3QgcmluZyA9IGdlb21ldHJ5W3JdO1xuXG4gICAgICAgICAgICBjb25zdCBiYm94ID0gW0luZmluaXR5LCBJbmZpbml0eSwgLUluZmluaXR5LCAtSW5maW5pdHldO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcCA9IHJpbmdbaV07XG4gICAgICAgICAgICAgICAgYmJveFswXSA9IE1hdGgubWluKGJib3hbMF0sIHAueCk7XG4gICAgICAgICAgICAgICAgYmJveFsxXSA9IE1hdGgubWluKGJib3hbMV0sIHAueSk7XG4gICAgICAgICAgICAgICAgYmJveFsyXSA9IE1hdGgubWF4KGJib3hbMl0sIHAueCk7XG4gICAgICAgICAgICAgICAgYmJveFszXSA9IE1hdGgubWF4KGJib3hbM10sIHAueSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChiYm94WzBdIDwgRVhURU5UICYmXG4gICAgICAgICAgICAgICAgYmJveFsxXSA8IEVYVEVOVCAmJlxuICAgICAgICAgICAgICAgIGJib3hbMl0gPj0gMCAmJlxuICAgICAgICAgICAgICAgIGJib3hbM10gPj0gMCkge1xuICAgICAgICAgICAgICAgIGdyaWQuaW5zZXJ0KGtleSwgYmJveFswXSwgYmJveFsxXSwgYmJveFsyXSwgYmJveFszXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsb2FkVlRMYXllcnMoKToge1tfOiBzdHJpbmddOiBWZWN0b3JUaWxlTGF5ZXJ9IHtcbiAgICAgICAgaWYgKCF0aGlzLnZ0TGF5ZXJzKSB7XG4gICAgICAgICAgICB0aGlzLnZ0TGF5ZXJzID0gbmV3IHZ0LlZlY3RvclRpbGUobmV3IFByb3RvYnVmKHRoaXMucmF3VGlsZURhdGEpKS5sYXllcnM7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZUxheWVyQ29kZXIgPSBuZXcgRGljdGlvbmFyeUNvZGVyKHRoaXMudnRMYXllcnMgPyBPYmplY3Qua2V5cyh0aGlzLnZ0TGF5ZXJzKS5zb3J0KCkgOiBbJ19nZW9qc29uVGlsZUxheWVyJ10pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnZ0TGF5ZXJzO1xuICAgIH1cblxuICAgIC8vIEZpbmRzIG5vbi1zeW1ib2wgZmVhdHVyZXMgaW4gdGhpcyB0aWxlIGF0IGEgcGFydGljdWxhciBwb3NpdGlvbi5cbiAgICBxdWVyeShhcmdzOiBRdWVyeVBhcmFtZXRlcnMsIHN0eWxlTGF5ZXJzOiB7W186IHN0cmluZ106IFN0eWxlTGF5ZXJ9LCBzZXJpYWxpemVkTGF5ZXJzOiB7W186IHN0cmluZ106IE9iamVjdH0sIHNvdXJjZUZlYXR1cmVTdGF0ZTogU291cmNlRmVhdHVyZVN0YXRlKToge1tfOiBzdHJpbmddOiBBcnJheTx7IGZlYXR1cmVJbmRleDogbnVtYmVyLCBmZWF0dXJlOiBHZW9KU09ORmVhdHVyZSB9Pn0ge1xuICAgICAgICB0aGlzLmxvYWRWVExheWVycygpO1xuXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IGFyZ3MucGFyYW1zIHx8IHt9LFxuICAgICAgICAgICAgcGl4ZWxzVG9UaWxlVW5pdHMgPSBFWFRFTlQgLyBhcmdzLnRpbGVTaXplIC8gYXJncy5zY2FsZSxcbiAgICAgICAgICAgIGZpbHRlciA9IGZlYXR1cmVGaWx0ZXIocGFyYW1zLmZpbHRlcik7XG5cbiAgICAgICAgY29uc3QgcXVlcnlHZW9tZXRyeSA9IGFyZ3MucXVlcnlHZW9tZXRyeTtcbiAgICAgICAgY29uc3QgcXVlcnlQYWRkaW5nID0gYXJncy5xdWVyeVBhZGRpbmcgKiBwaXhlbHNUb1RpbGVVbml0cztcblxuICAgICAgICBjb25zdCBib3VuZHMgPSBnZXRCb3VuZHMocXVlcnlHZW9tZXRyeSk7XG4gICAgICAgIGNvbnN0IG1hdGNoaW5nID0gdGhpcy5ncmlkLnF1ZXJ5KGJvdW5kcy5taW5YIC0gcXVlcnlQYWRkaW5nLCBib3VuZHMubWluWSAtIHF1ZXJ5UGFkZGluZywgYm91bmRzLm1heFggKyBxdWVyeVBhZGRpbmcsIGJvdW5kcy5tYXhZICsgcXVlcnlQYWRkaW5nKTtcblxuICAgICAgICBjb25zdCBjYW1lcmFCb3VuZHMgPSBnZXRCb3VuZHMoYXJncy5jYW1lcmFRdWVyeUdlb21ldHJ5KTtcbiAgICAgICAgY29uc3QgbWF0Y2hpbmczRCA9IHRoaXMuZ3JpZDNELnF1ZXJ5KFxuICAgICAgICAgICAgICAgIGNhbWVyYUJvdW5kcy5taW5YIC0gcXVlcnlQYWRkaW5nLCBjYW1lcmFCb3VuZHMubWluWSAtIHF1ZXJ5UGFkZGluZywgY2FtZXJhQm91bmRzLm1heFggKyBxdWVyeVBhZGRpbmcsIGNhbWVyYUJvdW5kcy5tYXhZICsgcXVlcnlQYWRkaW5nLFxuICAgICAgICAgICAgICAgIChieDEsIGJ5MSwgYngyLCBieTIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvbHlnb25JbnRlcnNlY3RzQm94KGFyZ3MuY2FtZXJhUXVlcnlHZW9tZXRyeSwgYngxIC0gcXVlcnlQYWRkaW5nLCBieTEgLSBxdWVyeVBhZGRpbmcsIGJ4MiArIHF1ZXJ5UGFkZGluZywgYnkyICsgcXVlcnlQYWRkaW5nKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBtYXRjaGluZzNEKSB7XG4gICAgICAgICAgICBtYXRjaGluZy5wdXNoKGtleSk7XG4gICAgICAgIH1cblxuICAgICAgICBtYXRjaGluZy5zb3J0KHRvcERvd25GZWF0dXJlQ29tcGFyYXRvcik7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgIGxldCBwcmV2aW91c0luZGV4O1xuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IG1hdGNoaW5nLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IG1hdGNoaW5nW2tdO1xuXG4gICAgICAgICAgICAvLyBkb24ndCBjaGVjayB0aGUgc2FtZSBmZWF0dXJlIG1vcmUgdGhhbiBvbmNlXG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IHByZXZpb3VzSW5kZXgpIGNvbnRpbnVlO1xuICAgICAgICAgICAgcHJldmlvdXNJbmRleCA9IGluZGV4O1xuXG4gICAgICAgICAgICBjb25zdCBtYXRjaCA9IHRoaXMuZmVhdHVyZUluZGV4QXJyYXkuZ2V0KGluZGV4KTtcbiAgICAgICAgICAgIGxldCBmZWF0dXJlR2VvbWV0cnkgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5sb2FkTWF0Y2hpbmdGZWF0dXJlKFxuICAgICAgICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICAgICAgICBtYXRjaC5idWNrZXRJbmRleCxcbiAgICAgICAgICAgICAgICBtYXRjaC5zb3VyY2VMYXllckluZGV4LFxuICAgICAgICAgICAgICAgIG1hdGNoLmZlYXR1cmVJbmRleCxcbiAgICAgICAgICAgICAgICBmaWx0ZXIsXG4gICAgICAgICAgICAgICAgcGFyYW1zLmxheWVycyxcbiAgICAgICAgICAgICAgICBwYXJhbXMuYXZhaWxhYmxlSW1hZ2VzLFxuICAgICAgICAgICAgICAgIHN0eWxlTGF5ZXJzLFxuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWRMYXllcnMsXG4gICAgICAgICAgICAgICAgc291cmNlRmVhdHVyZVN0YXRlLFxuICAgICAgICAgICAgICAgIChmZWF0dXJlOiBWZWN0b3JUaWxlRmVhdHVyZSwgc3R5bGVMYXllcjogU3R5bGVMYXllciwgZmVhdHVyZVN0YXRlOiBPYmplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmZWF0dXJlR2VvbWV0cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVHZW9tZXRyeSA9IGxvYWRHZW9tZXRyeShmZWF0dXJlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHlsZUxheWVyLnF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmUocXVlcnlHZW9tZXRyeSwgZmVhdHVyZSwgZmVhdHVyZVN0YXRlLCBmZWF0dXJlR2VvbWV0cnksIHRoaXMueiwgYXJncy50cmFuc2Zvcm0sIHBpeGVsc1RvVGlsZVVuaXRzLCBhcmdzLnBpeGVsUG9zTWF0cml4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBsb2FkTWF0Y2hpbmdGZWF0dXJlKFxuICAgICAgICByZXN1bHQ6IHtbXzogc3RyaW5nXTogQXJyYXk8eyBmZWF0dXJlSW5kZXg6IG51bWJlciwgZmVhdHVyZTogR2VvSlNPTkZlYXR1cmUgfT59LFxuICAgICAgICBidWNrZXRJbmRleDogbnVtYmVyLFxuICAgICAgICBzb3VyY2VMYXllckluZGV4OiBudW1iZXIsXG4gICAgICAgIGZlYXR1cmVJbmRleDogbnVtYmVyLFxuICAgICAgICBmaWx0ZXI6IEZlYXR1cmVGaWx0ZXIsXG4gICAgICAgIGZpbHRlckxheWVySURzOiBBcnJheTxzdHJpbmc+LFxuICAgICAgICBhdmFpbGFibGVJbWFnZXM6IEFycmF5PHN0cmluZz4sXG4gICAgICAgIHN0eWxlTGF5ZXJzOiB7W186IHN0cmluZ106IFN0eWxlTGF5ZXJ9LFxuICAgICAgICBzZXJpYWxpemVkTGF5ZXJzOiB7W186IHN0cmluZ106IE9iamVjdH0sXG4gICAgICAgIHNvdXJjZUZlYXR1cmVTdGF0ZT86IFNvdXJjZUZlYXR1cmVTdGF0ZSxcbiAgICAgICAgaW50ZXJzZWN0aW9uVGVzdD86IChmZWF0dXJlOiBWZWN0b3JUaWxlRmVhdHVyZSwgc3R5bGVMYXllcjogU3R5bGVMYXllciwgZmVhdHVyZVN0YXRlOiBPYmplY3QsIGlkOiBzdHJpbmcgfCBudW1iZXIgfCB2b2lkKSA9PiBib29sZWFuIHwgbnVtYmVyKSB7XG5cbiAgICAgICAgY29uc3QgbGF5ZXJJRHMgPSB0aGlzLmJ1Y2tldExheWVySURzW2J1Y2tldEluZGV4XTtcbiAgICAgICAgaWYgKGZpbHRlckxheWVySURzICYmICFhcnJheXNJbnRlcnNlY3QoZmlsdGVyTGF5ZXJJRHMsIGxheWVySURzKSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCBzb3VyY2VMYXllck5hbWUgPSB0aGlzLnNvdXJjZUxheWVyQ29kZXIuZGVjb2RlKHNvdXJjZUxheWVySW5kZXgpO1xuICAgICAgICBjb25zdCBzb3VyY2VMYXllciA9IHRoaXMudnRMYXllcnNbc291cmNlTGF5ZXJOYW1lXTtcbiAgICAgICAgY29uc3QgZmVhdHVyZSA9IHNvdXJjZUxheWVyLmZlYXR1cmUoZmVhdHVyZUluZGV4KTtcblxuICAgICAgICBpZiAoIWZpbHRlci5maWx0ZXIobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKHRoaXMudGlsZUlELm92ZXJzY2FsZWRaKSwgZmVhdHVyZSkpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLmdldElkKGZlYXR1cmUsIHNvdXJjZUxheWVyTmFtZSk7XG5cbiAgICAgICAgZm9yIChsZXQgbCA9IDA7IGwgPCBsYXllcklEcy5sZW5ndGg7IGwrKykge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXJJRCA9IGxheWVySURzW2xdO1xuXG4gICAgICAgICAgICBpZiAoZmlsdGVyTGF5ZXJJRHMgJiYgZmlsdGVyTGF5ZXJJRHMuaW5kZXhPZihsYXllcklEKSA8IDApIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc3R5bGVMYXllciA9IHN0eWxlTGF5ZXJzW2xheWVySURdO1xuXG4gICAgICAgICAgICBpZiAoIXN0eWxlTGF5ZXIpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBsZXQgZmVhdHVyZVN0YXRlID0ge307XG4gICAgICAgICAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCAmJiBzb3VyY2VGZWF0dXJlU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAvLyBgZmVhdHVyZS1zdGF0ZWAgZXhwcmVzc2lvbiBldmFsdWF0aW9uIHJlcXVpcmVzIGZlYXR1cmUgc3RhdGUgdG8gYmUgYXZhaWxhYmxlXG4gICAgICAgICAgICAgICAgZmVhdHVyZVN0YXRlID0gc291cmNlRmVhdHVyZVN0YXRlLmdldFN0YXRlKHN0eWxlTGF5ZXIuc291cmNlTGF5ZXIgfHwgJ19nZW9qc29uVGlsZUxheWVyJywgaWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzZXJpYWxpemVkTGF5ZXIgPSBzZXJpYWxpemVkTGF5ZXJzW2xheWVySURdO1xuXG4gICAgICAgICAgICBzZXJpYWxpemVkTGF5ZXIucGFpbnQgPSBldmFsdWF0ZVByb3BlcnRpZXMoc2VyaWFsaXplZExheWVyLnBhaW50LCBzdHlsZUxheWVyLnBhaW50LCBmZWF0dXJlLCBmZWF0dXJlU3RhdGUsIGF2YWlsYWJsZUltYWdlcyk7XG4gICAgICAgICAgICBzZXJpYWxpemVkTGF5ZXIubGF5b3V0ID0gZXZhbHVhdGVQcm9wZXJ0aWVzKHNlcmlhbGl6ZWRMYXllci5sYXlvdXQsIHN0eWxlTGF5ZXIubGF5b3V0LCBmZWF0dXJlLCBmZWF0dXJlU3RhdGUsIGF2YWlsYWJsZUltYWdlcyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGludGVyc2VjdGlvblogPSAhaW50ZXJzZWN0aW9uVGVzdCB8fCBpbnRlcnNlY3Rpb25UZXN0KGZlYXR1cmUsIHN0eWxlTGF5ZXIsIGZlYXR1cmVTdGF0ZSk7XG4gICAgICAgICAgICBpZiAoIWludGVyc2VjdGlvblopIHtcbiAgICAgICAgICAgICAgICAvLyBPbmx5IGFwcGxpZWQgZm9yIG5vbi1zeW1ib2wgZmVhdHVyZXNcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZ2VvanNvbkZlYXR1cmUgPSBuZXcgR2VvSlNPTkZlYXR1cmUoZmVhdHVyZSwgdGhpcy56LCB0aGlzLngsIHRoaXMueSwgaWQpO1xuICAgICAgICAgICAgKGdlb2pzb25GZWF0dXJlOiBhbnkpLmxheWVyID0gc2VyaWFsaXplZExheWVyO1xuICAgICAgICAgICAgbGV0IGxheWVyUmVzdWx0ID0gcmVzdWx0W2xheWVySURdO1xuICAgICAgICAgICAgaWYgKGxheWVyUmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBsYXllclJlc3VsdCA9IHJlc3VsdFtsYXllcklEXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGF5ZXJSZXN1bHQucHVzaCh7ZmVhdHVyZUluZGV4LCBmZWF0dXJlOiBnZW9qc29uRmVhdHVyZSwgaW50ZXJzZWN0aW9uWn0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gR2l2ZW4gYSBzZXQgb2Ygc3ltYm9sIGluZGV4ZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBsb29rZWQgdXAsXG4gICAgLy8gcmV0dXJuIGEgbWF0Y2hpbmcgc2V0IG9mIEdlb0pTT05GZWF0dXJlc1xuICAgIGxvb2t1cFN5bWJvbEZlYXR1cmVzKHN5bWJvbEZlYXR1cmVJbmRleGVzOiBBcnJheTxudW1iZXI+LFxuICAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWRMYXllcnM6IHtbc3RyaW5nXTogU3R5bGVMYXllcn0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgYnVja2V0SW5kZXg6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VMYXllckluZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyU3BlYzogRmlsdGVyU3BlY2lmaWNhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJMYXllcklEczogQXJyYXk8c3RyaW5nPixcbiAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGVJbWFnZXM6IEFycmF5PHN0cmluZz4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVMYXllcnM6IHtbXzogc3RyaW5nXTogU3R5bGVMYXllcn0pIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgIHRoaXMubG9hZFZUTGF5ZXJzKCk7XG5cbiAgICAgICAgY29uc3QgZmlsdGVyID0gZmVhdHVyZUZpbHRlcihmaWx0ZXJTcGVjKTtcblxuICAgICAgICBmb3IgKGNvbnN0IHN5bWJvbEZlYXR1cmVJbmRleCBvZiBzeW1ib2xGZWF0dXJlSW5kZXhlcykge1xuICAgICAgICAgICAgdGhpcy5sb2FkTWF0Y2hpbmdGZWF0dXJlKFxuICAgICAgICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICAgICAgICBidWNrZXRJbmRleCxcbiAgICAgICAgICAgICAgICBzb3VyY2VMYXllckluZGV4LFxuICAgICAgICAgICAgICAgIHN5bWJvbEZlYXR1cmVJbmRleCxcbiAgICAgICAgICAgICAgICBmaWx0ZXIsXG4gICAgICAgICAgICAgICAgZmlsdGVyTGF5ZXJJRHMsXG4gICAgICAgICAgICAgICAgYXZhaWxhYmxlSW1hZ2VzLFxuICAgICAgICAgICAgICAgIHN0eWxlTGF5ZXJzLFxuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWRMYXllcnNcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGhhc0xheWVyKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgZm9yIChjb25zdCBsYXllcklEcyBvZiB0aGlzLmJ1Y2tldExheWVySURzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGxheWVySUQgb2YgbGF5ZXJJRHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoaWQgPT09IGxheWVySUQpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGdldElkKGZlYXR1cmU6IFZlY3RvclRpbGVGZWF0dXJlLCBzb3VyY2VMYXllcklkOiBzdHJpbmcpOiBzdHJpbmcgfCBudW1iZXIgfCB2b2lkIHtcbiAgICAgICAgbGV0IGlkID0gZmVhdHVyZS5pZDtcbiAgICAgICAgaWYgKHRoaXMucHJvbW90ZUlkKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wTmFtZSA9IHR5cGVvZiB0aGlzLnByb21vdGVJZCA9PT0gJ3N0cmluZycgPyB0aGlzLnByb21vdGVJZCA6IHRoaXMucHJvbW90ZUlkW3NvdXJjZUxheWVySWRdO1xuICAgICAgICAgICAgaWQgPSBmZWF0dXJlLnByb3BlcnRpZXNbcHJvcE5hbWVdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpZCA9PT0gJ2Jvb2xlYW4nKSBpZCA9ICBOdW1iZXIoaWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpZDtcbiAgICB9XG59XG5cbnJlZ2lzdGVyKFxuICAgICdGZWF0dXJlSW5kZXgnLFxuICAgIEZlYXR1cmVJbmRleCxcbiAgICB7b21pdDogWydyYXdUaWxlRGF0YScsICdzb3VyY2VMYXllckNvZGVyJ119XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBGZWF0dXJlSW5kZXg7XG5cbmZ1bmN0aW9uIGV2YWx1YXRlUHJvcGVydGllcyhzZXJpYWxpemVkUHJvcGVydGllcywgc3R5bGVMYXllclByb3BlcnRpZXMsIGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSwgYXZhaWxhYmxlSW1hZ2VzKSB7XG4gICAgcmV0dXJuIG1hcE9iamVjdChzZXJpYWxpemVkUHJvcGVydGllcywgKHByb3BlcnR5LCBrZXkpID0+IHtcbiAgICAgICAgY29uc3QgcHJvcCA9IHN0eWxlTGF5ZXJQcm9wZXJ0aWVzIGluc3RhbmNlb2YgUG9zc2libHlFdmFsdWF0ZWQgPyBzdHlsZUxheWVyUHJvcGVydGllcy5nZXQoa2V5KSA6IG51bGw7XG4gICAgICAgIHJldHVybiBwcm9wICYmIHByb3AuZXZhbHVhdGUgPyBwcm9wLmV2YWx1YXRlKGZlYXR1cmUsIGZlYXR1cmVTdGF0ZSwgYXZhaWxhYmxlSW1hZ2VzKSA6IHByb3A7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kcyhnZW9tZXRyeTogQXJyYXk8UG9pbnQ+KSB7XG4gICAgbGV0IG1pblggPSBJbmZpbml0eTtcbiAgICBsZXQgbWluWSA9IEluZmluaXR5O1xuICAgIGxldCBtYXhYID0gLUluZmluaXR5O1xuICAgIGxldCBtYXhZID0gLUluZmluaXR5O1xuICAgIGZvciAoY29uc3QgcCBvZiBnZW9tZXRyeSkge1xuICAgICAgICBtaW5YID0gTWF0aC5taW4obWluWCwgcC54KTtcbiAgICAgICAgbWluWSA9IE1hdGgubWluKG1pblksIHAueSk7XG4gICAgICAgIG1heFggPSBNYXRoLm1heChtYXhYLCBwLngpO1xuICAgICAgICBtYXhZID0gTWF0aC5tYXgobWF4WSwgcC55KTtcbiAgICB9XG4gICAgcmV0dXJuIHttaW5YLCBtaW5ZLCBtYXhYLCBtYXhZfTtcbn1cblxuZnVuY3Rpb24gdG9wRG93bkZlYXR1cmVDb21wYXJhdG9yKGEsIGIpIHtcbiAgICByZXR1cm4gYiAtIGE7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge3VuaXF1ZUlkLCBwYXJzZUNhY2hlQ29udHJvbH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7ZGVzZXJpYWxpemUgYXMgZGVzZXJpYWxpemVCdWNrZXR9IGZyb20gJy4uL2RhdGEvYnVja2V0JztcbmltcG9ydCBGZWF0dXJlSW5kZXggZnJvbSAnLi4vZGF0YS9mZWF0dXJlX2luZGV4JztcbmltcG9ydCBHZW9KU09ORmVhdHVyZSBmcm9tICcuLi91dGlsL3ZlY3RvcnRpbGVfdG9fZ2VvanNvbic7XG5pbXBvcnQgZmVhdHVyZUZpbHRlciBmcm9tICcuLi9zdHlsZS1zcGVjL2ZlYXR1cmVfZmlsdGVyJztcbmltcG9ydCBTeW1ib2xCdWNrZXQgZnJvbSAnLi4vZGF0YS9idWNrZXQvc3ltYm9sX2J1Y2tldCc7XG5pbXBvcnQge0NvbGxpc2lvbkJveEFycmF5fSBmcm9tICcuLi9kYXRhL2FycmF5X3R5cGVzJztcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4uL3JlbmRlci90ZXh0dXJlJztcbmltcG9ydCBicm93c2VyIGZyb20gJy4uL3V0aWwvYnJvd3Nlcic7XG5pbXBvcnQgRXZhbHVhdGlvblBhcmFtZXRlcnMgZnJvbSAnLi4vc3R5bGUvZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcbmltcG9ydCBTb3VyY2VGZWF0dXJlU3RhdGUgZnJvbSAnLi4vc291cmNlL3NvdXJjZV9zdGF0ZSc7XG5pbXBvcnQge2xhenlMb2FkUlRMVGV4dFBsdWdpbn0gZnJvbSAnLi9ydGxfdGV4dF9wbHVnaW4nO1xuXG5jb25zdCBDTE9DS19TS0VXX1JFVFJZX1RJTUVPVVQgPSAzMDAwMDtcblxuaW1wb3J0IHR5cGUge0J1Y2tldH0gZnJvbSAnLi4vZGF0YS9idWNrZXQnO1xuaW1wb3J0IHR5cGUgU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSB7V29ya2VyVGlsZVJlc3VsdH0gZnJvbSAnLi93b3JrZXJfc291cmNlJztcbmltcG9ydCB0eXBlIEFjdG9yIGZyb20gJy4uL3V0aWwvYWN0b3InO1xuaW1wb3J0IHR5cGUgREVNRGF0YSBmcm9tICcuLi9kYXRhL2RlbV9kYXRhJztcbmltcG9ydCB0eXBlIHtBbHBoYUltYWdlfSBmcm9tICcuLi91dGlsL2ltYWdlJztcbmltcG9ydCB0eXBlIEltYWdlQXRsYXMgZnJvbSAnLi4vcmVuZGVyL2ltYWdlX2F0bGFzJztcbmltcG9ydCB0eXBlIEltYWdlTWFuYWdlciBmcm9tICcuLi9yZW5kZXIvaW1hZ2VfbWFuYWdlcic7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4vdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSBGcmFtZWJ1ZmZlciBmcm9tICcuLi9nbC9mcmFtZWJ1ZmZlcic7XG5pbXBvcnQgdHlwZSBUcmFuc2Zvcm0gZnJvbSAnLi4vZ2VvL3RyYW5zZm9ybSc7XG5pbXBvcnQgdHlwZSB7TGF5ZXJGZWF0dXJlU3RhdGVzfSBmcm9tICcuL3NvdXJjZV9zdGF0ZSc7XG5pbXBvcnQgdHlwZSB7Q2FuY2VsYWJsZX0gZnJvbSAnLi4vdHlwZXMvY2FuY2VsYWJsZSc7XG5pbXBvcnQgdHlwZSB7RmlsdGVyU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIFRpbGVTdGF0ZSA9XG4gICAgfCAnbG9hZGluZycgICAvLyBUaWxlIGRhdGEgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgbG9hZGluZy5cbiAgICB8ICdsb2FkZWQnICAgIC8vIFRpbGUgZGF0YSBoYXMgYmVlbiBsb2FkZWQuIFRpbGUgY2FuIGJlIHJlbmRlcmVkLlxuICAgIHwgJ3JlbG9hZGluZycgLy8gVGlsZSBkYXRhIGhhcyBiZWVuIGxvYWRlZCBhbmQgaXMgYmVpbmcgdXBkYXRlZC4gVGlsZSBjYW4gYmUgcmVuZGVyZWQuXG4gICAgfCAndW5sb2FkZWQnICAvLyBUaWxlIGRhdGEgaGFzIGJlZW4gZGVsZXRlZC5cbiAgICB8ICdlcnJvcmVkJyAgIC8vIFRpbGUgZGF0YSB3YXMgbm90IGxvYWRlZCBiZWNhdXNlIG9mIGFuIGVycm9yLlxuICAgIHwgJ2V4cGlyZWQnOyAgLyogVGlsZSBkYXRhIHdhcyBwcmV2aW91c2x5IGxvYWRlZCwgYnV0IGhhcyBleHBpcmVkIHBlciBpdHNcbiAgICAgICAgICAgICAgICAgICAqIEhUVFAgaGVhZGVycyBhbmQgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgcmVmcmVzaGluZy4gKi9cblxuLyoqXG4gKiBBIHRpbGUgb2JqZWN0IGlzIHRoZSBjb21iaW5hdGlvbiBvZiBhIENvb3JkaW5hdGUsIHdoaWNoIGRlZmluZXNcbiAqIGl0cyBwbGFjZSwgYXMgd2VsbCBhcyBhIHVuaXF1ZSBJRCBhbmQgZGF0YSB0cmFja2luZyBmb3IgaXRzIGNvbnRlbnRcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBUaWxlIHtcbiAgICB0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQ7XG4gICAgdWlkOiBudW1iZXI7XG4gICAgdXNlczogbnVtYmVyO1xuICAgIHRpbGVTaXplOiBudW1iZXI7XG4gICAgYnVja2V0czoge1tfOiBzdHJpbmddOiBCdWNrZXR9O1xuICAgIGxhdGVzdEZlYXR1cmVJbmRleDogP0ZlYXR1cmVJbmRleDtcbiAgICBsYXRlc3RSYXdUaWxlRGF0YTogP0FycmF5QnVmZmVyO1xuICAgIGltYWdlQXRsYXM6ID9JbWFnZUF0bGFzO1xuICAgIGltYWdlQXRsYXNUZXh0dXJlOiBUZXh0dXJlO1xuICAgIGdseXBoQXRsYXNJbWFnZTogP0FscGhhSW1hZ2U7XG4gICAgZ2x5cGhBdGxhc1RleHR1cmU6IFRleHR1cmU7XG4gICAgZXhwaXJhdGlvblRpbWU6IGFueTtcbiAgICBleHBpcmVkUmVxdWVzdENvdW50OiBudW1iZXI7XG4gICAgc3RhdGU6IFRpbGVTdGF0ZTtcbiAgICB0aW1lQWRkZWQ6IGFueTtcbiAgICBmYWRlRW5kVGltZTogYW55O1xuICAgIGNvbGxpc2lvbkJveEFycmF5OiA/Q29sbGlzaW9uQm94QXJyYXk7XG4gICAgcmVkb1doZW5Eb25lOiBib29sZWFuO1xuICAgIHNob3dDb2xsaXNpb25Cb3hlczogYm9vbGVhbjtcbiAgICBwbGFjZW1lbnRTb3VyY2U6IGFueTtcbiAgICBhY3RvcjogP0FjdG9yO1xuICAgIHZ0TGF5ZXJzOiB7W186IHN0cmluZ106IFZlY3RvclRpbGVMYXllcn07XG5cbiAgICBuZWlnaGJvcmluZ1RpbGVzOiA/T2JqZWN0O1xuICAgIGRlbTogP0RFTURhdGE7XG4gICAgYWJvcnRlZDogP2Jvb2xlYW47XG4gICAgbmVlZHNIaWxsc2hhZGVQcmVwYXJlOiA/Ym9vbGVhbjtcbiAgICByZXF1ZXN0OiA/Q2FuY2VsYWJsZTtcbiAgICB0ZXh0dXJlOiBhbnk7XG4gICAgZmJvOiA/RnJhbWVidWZmZXI7XG4gICAgZGVtVGV4dHVyZTogP1RleHR1cmU7XG4gICAgcmVmcmVzaGVkVXBvbkV4cGlyYXRpb246IGJvb2xlYW47XG4gICAgcmVsb2FkQ2FsbGJhY2s6IGFueTtcbiAgICByZXNvdXJjZVRpbWluZzogP0FycmF5PFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmc+O1xuICAgIHF1ZXJ5UGFkZGluZzogbnVtYmVyO1xuXG4gICAgc3ltYm9sRmFkZUhvbGRVbnRpbDogP251bWJlcjtcbiAgICBoYXNTeW1ib2xCdWNrZXRzOiBib29sZWFuO1xuICAgIGhhc1JUTFRleHQ6IGJvb2xlYW47XG4gICAgZGVwZW5kZW5jaWVzOiBPYmplY3Q7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge092ZXJzY2FsZWRUaWxlSUR9IHRpbGVJRFxuICAgICAqIEBwYXJhbSBzaXplXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcih0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQsIHNpemU6IG51bWJlcikge1xuICAgICAgICB0aGlzLnRpbGVJRCA9IHRpbGVJRDtcbiAgICAgICAgdGhpcy51aWQgPSB1bmlxdWVJZCgpO1xuICAgICAgICB0aGlzLnVzZXMgPSAwO1xuICAgICAgICB0aGlzLnRpbGVTaXplID0gc2l6ZTtcbiAgICAgICAgdGhpcy5idWNrZXRzID0ge307XG4gICAgICAgIHRoaXMuZXhwaXJhdGlvblRpbWUgPSBudWxsO1xuICAgICAgICB0aGlzLnF1ZXJ5UGFkZGluZyA9IDA7XG4gICAgICAgIHRoaXMuaGFzU3ltYm9sQnVja2V0cyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmhhc1JUTFRleHQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kZXBlbmRlbmNpZXMgPSB7fTtcblxuICAgICAgICAvLyBDb3VudHMgdGhlIG51bWJlciBvZiB0aW1lcyBhIHJlc3BvbnNlIHdhcyBhbHJlYWR5IGV4cGlyZWQgd2hlblxuICAgICAgICAvLyByZWNlaXZlZC4gV2UncmUgdXNpbmcgdGhpcyB0byBhZGQgYSBkZWxheSB3aGVuIG1ha2luZyBhIG5ldyByZXF1ZXN0XG4gICAgICAgIC8vIHNvIHdlIGRvbid0IGhhdmUgdG8ga2VlcCByZXRyeWluZyBpbW1lZGlhdGVseSBpbiBjYXNlIG9mIGEgc2VydmVyXG4gICAgICAgIC8vIHNlcnZpbmcgZXhwaXJlZCB0aWxlcy5cbiAgICAgICAgdGhpcy5leHBpcmVkUmVxdWVzdENvdW50ID0gMDtcblxuICAgICAgICB0aGlzLnN0YXRlID0gJ2xvYWRpbmcnO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyRmFkZUR1cmF0aW9uKGR1cmF0aW9uOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgZmFkZUVuZFRpbWUgPSBkdXJhdGlvbiArIHRoaXMudGltZUFkZGVkO1xuICAgICAgICBpZiAoZmFkZUVuZFRpbWUgPCBicm93c2VyLm5vdygpKSByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLmZhZGVFbmRUaW1lICYmIGZhZGVFbmRUaW1lIDwgdGhpcy5mYWRlRW5kVGltZSkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuZmFkZUVuZFRpbWUgPSBmYWRlRW5kVGltZTtcbiAgICB9XG5cbiAgICB3YXNSZXF1ZXN0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlID09PSAnZXJyb3JlZCcgfHwgdGhpcy5zdGF0ZSA9PT0gJ2xvYWRlZCcgfHwgdGhpcy5zdGF0ZSA9PT0gJ3JlbG9hZGluZyc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2l2ZW4gYSBkYXRhIG9iamVjdCB3aXRoIGEgJ2J1ZmZlcnMnIHByb3BlcnR5LCBsb2FkIGl0IGludG9cbiAgICAgKiB0aGlzIHRpbGUncyBlbGVtZW50R3JvdXBzIGFuZCBidWZmZXJzIHByb3BlcnRpZXMgYW5kIHNldCBsb2FkZWRcbiAgICAgKiB0byB0cnVlLiBJZiB0aGUgZGF0YSBpcyBudWxsLCBsaWtlIGluIHRoZSBjYXNlIG9mIGFuIGVtcHR5XG4gICAgICogR2VvSlNPTiB0aWxlLCBuby1vcCBidXQgc3RpbGwgc2V0IGxvYWRlZCB0byB0cnVlLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhXG4gICAgICogQHBhcmFtIHBhaW50ZXJcbiAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgbG9hZFZlY3RvckRhdGEoZGF0YTogV29ya2VyVGlsZVJlc3VsdCwgcGFpbnRlcjogYW55LCBqdXN0UmVsb2FkZWQ6ID9ib29sZWFuKSB7XG4gICAgICAgIGlmICh0aGlzLmhhc0RhdGEoKSkge1xuICAgICAgICAgICAgdGhpcy51bmxvYWRWZWN0b3JEYXRhKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0YXRlID0gJ2xvYWRlZCc7XG5cbiAgICAgICAgLy8gZW1wdHkgR2VvSlNPTiB0aWxlXG4gICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5jb2xsaXNpb25Cb3hBcnJheSA9IG5ldyBDb2xsaXNpb25Cb3hBcnJheSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRhdGEuZmVhdHVyZUluZGV4KSB7XG4gICAgICAgICAgICB0aGlzLmxhdGVzdEZlYXR1cmVJbmRleCA9IGRhdGEuZmVhdHVyZUluZGV4O1xuICAgICAgICAgICAgaWYgKGRhdGEucmF3VGlsZURhdGEpIHtcbiAgICAgICAgICAgICAgICAvLyBPbmx5IHZlY3RvciB0aWxlcyBoYXZlIHJhd1RpbGVEYXRhLCBhbmQgdGhleSB3b24ndCB1cGRhdGUgaXQgZm9yXG4gICAgICAgICAgICAgICAgLy8gJ3JlbG9hZFRpbGUnXG4gICAgICAgICAgICAgICAgdGhpcy5sYXRlc3RSYXdUaWxlRGF0YSA9IGRhdGEucmF3VGlsZURhdGE7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucmF3VGlsZURhdGEgPSBkYXRhLnJhd1RpbGVEYXRhO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxhdGVzdFJhd1RpbGVEYXRhKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgcmF3VGlsZURhdGEgaGFzbid0IHVwZGF0ZWQsIGhvbGQgb250byBhIHBvaW50ZXIgdG8gdGhlIGxhc3RcbiAgICAgICAgICAgICAgICAvLyBvbmUgd2UgcmVjZWl2ZWRcbiAgICAgICAgICAgICAgICB0aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5yYXdUaWxlRGF0YSA9IHRoaXMubGF0ZXN0UmF3VGlsZURhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb2xsaXNpb25Cb3hBcnJheSA9IGRhdGEuY29sbGlzaW9uQm94QXJyYXk7XG4gICAgICAgIHRoaXMuYnVja2V0cyA9IGRlc2VyaWFsaXplQnVja2V0KGRhdGEuYnVja2V0cywgcGFpbnRlci5zdHlsZSk7XG5cbiAgICAgICAgdGhpcy5oYXNTeW1ib2xCdWNrZXRzID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5idWNrZXRzKSB7XG4gICAgICAgICAgICBjb25zdCBidWNrZXQgPSB0aGlzLmJ1Y2tldHNbaWRdO1xuICAgICAgICAgICAgaWYgKGJ1Y2tldCBpbnN0YW5jZW9mIFN5bWJvbEJ1Y2tldCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzU3ltYm9sQnVja2V0cyA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKGp1c3RSZWxvYWRlZCkge1xuICAgICAgICAgICAgICAgICAgICBidWNrZXQuanVzdFJlbG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhhc1JUTFRleHQgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuaGFzU3ltYm9sQnVja2V0cykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLmJ1Y2tldHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBidWNrZXQgPSB0aGlzLmJ1Y2tldHNbaWRdO1xuICAgICAgICAgICAgICAgIGlmIChidWNrZXQgaW5zdGFuY2VvZiBTeW1ib2xCdWNrZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJ1Y2tldC5oYXNSVExUZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc1JUTFRleHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGF6eUxvYWRSVExUZXh0UGx1Z2luKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucXVlcnlQYWRkaW5nID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLmJ1Y2tldHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGJ1Y2tldCA9IHRoaXMuYnVja2V0c1tpZF07XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5UGFkZGluZyA9IE1hdGgubWF4KHRoaXMucXVlcnlQYWRkaW5nLCBwYWludGVyLnN0eWxlLmdldExheWVyKGlkKS5xdWVyeVJhZGl1cyhidWNrZXQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkYXRhLmltYWdlQXRsYXMpIHtcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VBdGxhcyA9IGRhdGEuaW1hZ2VBdGxhcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YS5nbHlwaEF0bGFzSW1hZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuZ2x5cGhBdGxhc0ltYWdlID0gZGF0YS5nbHlwaEF0bGFzSW1hZ2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWxlYXNlIGFueSBkYXRhIG9yIFdlYkdMIHJlc291cmNlcyByZWZlcmVuY2VkIGJ5IHRoaXMgdGlsZS5cbiAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdW5sb2FkVmVjdG9yRGF0YSgpIHtcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLmJ1Y2tldHMpIHtcbiAgICAgICAgICAgIHRoaXMuYnVja2V0c1tpZF0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYnVja2V0cyA9IHt9O1xuXG4gICAgICAgIGlmICh0aGlzLmltYWdlQXRsYXNUZXh0dXJlKSB7XG4gICAgICAgICAgICB0aGlzLmltYWdlQXRsYXNUZXh0dXJlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmltYWdlQXRsYXMpIHtcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VBdGxhcyA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5nbHlwaEF0bGFzVGV4dHVyZSkge1xuICAgICAgICAgICAgdGhpcy5nbHlwaEF0bGFzVGV4dHVyZS5kZXN0cm95KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxhdGVzdEZlYXR1cmVJbmRleCA9IG51bGw7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAndW5sb2FkZWQnO1xuICAgIH1cblxuICAgIGdldEJ1Y2tldChsYXllcjogU3R5bGVMYXllcikge1xuICAgICAgICByZXR1cm4gdGhpcy5idWNrZXRzW2xheWVyLmlkXTtcbiAgICB9XG5cbiAgICB1cGxvYWQoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuYnVja2V0cykge1xuICAgICAgICAgICAgY29uc3QgYnVja2V0ID0gdGhpcy5idWNrZXRzW2lkXTtcbiAgICAgICAgICAgIGlmIChidWNrZXQudXBsb2FkUGVuZGluZygpKSB7XG4gICAgICAgICAgICAgICAgYnVja2V0LnVwbG9hZChjb250ZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VBdGxhcyAmJiAhdGhpcy5pbWFnZUF0bGFzLnVwbG9hZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmltYWdlQXRsYXNUZXh0dXJlID0gbmV3IFRleHR1cmUoY29udGV4dCwgdGhpcy5pbWFnZUF0bGFzLmltYWdlLCBnbC5SR0JBKTtcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VBdGxhcy51cGxvYWRlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5nbHlwaEF0bGFzSW1hZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuZ2x5cGhBdGxhc1RleHR1cmUgPSBuZXcgVGV4dHVyZShjb250ZXh0LCB0aGlzLmdseXBoQXRsYXNJbWFnZSwgZ2wuQUxQSEEpO1xuICAgICAgICAgICAgdGhpcy5nbHlwaEF0bGFzSW1hZ2UgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJlcGFyZShpbWFnZU1hbmFnZXI6IEltYWdlTWFuYWdlcikge1xuICAgICAgICBpZiAodGhpcy5pbWFnZUF0bGFzKSB7XG4gICAgICAgICAgICB0aGlzLmltYWdlQXRsYXMucGF0Y2hVcGRhdGVkSW1hZ2VzKGltYWdlTWFuYWdlciwgdGhpcy5pbWFnZUF0bGFzVGV4dHVyZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBRdWVyaWVzIG5vbi1zeW1ib2wgZmVhdHVyZXMgcmVuZGVyZWQgZm9yIHRoaXMgdGlsZS5cbiAgICAvLyBTeW1ib2wgZmVhdHVyZXMgYXJlIHF1ZXJpZWQgZ2xvYmFsbHlcbiAgICBxdWVyeVJlbmRlcmVkRmVhdHVyZXMobGF5ZXJzOiB7W186IHN0cmluZ106IFN0eWxlTGF5ZXJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVkTGF5ZXJzOiB7W3N0cmluZ106IE9iamVjdH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUZlYXR1cmVTdGF0ZTogU291cmNlRmVhdHVyZVN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeUdlb21ldHJ5OiBBcnJheTxQb2ludD4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhbWVyYVF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGU6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7IGZpbHRlcjogRmlsdGVyU3BlY2lmaWNhdGlvbiwgbGF5ZXJzOiBBcnJheTxzdHJpbmc+LCBhdmFpbGFibGVJbWFnZXM6IEFycmF5PHN0cmluZz4gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBUcmFuc2Zvcm0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1heFBpdGNoU2NhbGVGYWN0b3I6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxQb3NNYXRyaXg6IEZsb2F0MzJBcnJheSk6IHtbXzogc3RyaW5nXTogQXJyYXk8eyBmZWF0dXJlSW5kZXg6IG51bWJlciwgZmVhdHVyZTogR2VvSlNPTkZlYXR1cmUgfT59IHtcbiAgICAgICAgaWYgKCF0aGlzLmxhdGVzdEZlYXR1cmVJbmRleCB8fCAhdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucmF3VGlsZURhdGEpXG4gICAgICAgICAgICByZXR1cm4ge307XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4LnF1ZXJ5KHtcbiAgICAgICAgICAgIHF1ZXJ5R2VvbWV0cnksXG4gICAgICAgICAgICBjYW1lcmFRdWVyeUdlb21ldHJ5LFxuICAgICAgICAgICAgc2NhbGUsXG4gICAgICAgICAgICB0aWxlU2l6ZTogdGhpcy50aWxlU2l6ZSxcbiAgICAgICAgICAgIHBpeGVsUG9zTWF0cml4LFxuICAgICAgICAgICAgdHJhbnNmb3JtLFxuICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgcXVlcnlQYWRkaW5nOiB0aGlzLnF1ZXJ5UGFkZGluZyAqIG1heFBpdGNoU2NhbGVGYWN0b3JcbiAgICAgICAgfSwgbGF5ZXJzLCBzZXJpYWxpemVkTGF5ZXJzLCBzb3VyY2VGZWF0dXJlU3RhdGUpO1xuICAgIH1cblxuICAgIHF1ZXJ5U291cmNlRmVhdHVyZXMocmVzdWx0OiBBcnJheTxHZW9KU09ORmVhdHVyZT4sIHBhcmFtczogYW55KSB7XG4gICAgICAgIGNvbnN0IGZlYXR1cmVJbmRleCA9IHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4O1xuICAgICAgICBpZiAoIWZlYXR1cmVJbmRleCB8fCAhZmVhdHVyZUluZGV4LnJhd1RpbGVEYXRhKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgdnRMYXllcnMgPSBmZWF0dXJlSW5kZXgubG9hZFZUTGF5ZXJzKCk7XG5cbiAgICAgICAgY29uc3Qgc291cmNlTGF5ZXIgPSBwYXJhbXMgPyBwYXJhbXMuc291cmNlTGF5ZXIgOiAnJztcbiAgICAgICAgY29uc3QgbGF5ZXIgPSB2dExheWVycy5fZ2VvanNvblRpbGVMYXllciB8fCB2dExheWVyc1tzb3VyY2VMYXllcl07XG5cbiAgICAgICAgaWYgKCFsYXllcikgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGZpbHRlciA9IGZlYXR1cmVGaWx0ZXIocGFyYW1zICYmIHBhcmFtcy5maWx0ZXIpO1xuICAgICAgICBjb25zdCB7eiwgeCwgeX0gPSB0aGlzLnRpbGVJRC5jYW5vbmljYWw7XG4gICAgICAgIGNvbnN0IGNvb3JkID0ge3osIHgsIHl9O1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGF5ZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGZlYXR1cmUgPSBsYXllci5mZWF0dXJlKGkpO1xuICAgICAgICAgICAgaWYgKGZpbHRlci5maWx0ZXIobmV3IEV2YWx1YXRpb25QYXJhbWV0ZXJzKHRoaXMudGlsZUlELm92ZXJzY2FsZWRaKSwgZmVhdHVyZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9IGZlYXR1cmVJbmRleC5nZXRJZChmZWF0dXJlLCBzb3VyY2VMYXllcik7XG4gICAgICAgICAgICAgICAgY29uc3QgZ2VvanNvbkZlYXR1cmUgPSBuZXcgR2VvSlNPTkZlYXR1cmUoZmVhdHVyZSwgeiwgeCwgeSwgaWQpO1xuICAgICAgICAgICAgICAgIChnZW9qc29uRmVhdHVyZTogYW55KS50aWxlID0gY29vcmQ7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZ2VvanNvbkZlYXR1cmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUgPT09ICdsb2FkZWQnIHx8IHRoaXMuc3RhdGUgPT09ICdyZWxvYWRpbmcnIHx8IHRoaXMuc3RhdGUgPT09ICdleHBpcmVkJztcbiAgICB9XG5cbiAgICBwYXR0ZXJuc0xvYWRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2VBdGxhcyAmJiAhIU9iamVjdC5rZXlzKHRoaXMuaW1hZ2VBdGxhcy5wYXR0ZXJuUG9zaXRpb25zKS5sZW5ndGg7XG4gICAgfVxuXG4gICAgc2V0RXhwaXJ5RGF0YShkYXRhOiBhbnkpIHtcbiAgICAgICAgY29uc3QgcHJpb3IgPSB0aGlzLmV4cGlyYXRpb25UaW1lO1xuXG4gICAgICAgIGlmIChkYXRhLmNhY2hlQ29udHJvbCkge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkQ0MgPSBwYXJzZUNhY2hlQ29udHJvbChkYXRhLmNhY2hlQ29udHJvbCk7XG4gICAgICAgICAgICBpZiAocGFyc2VkQ0NbJ21heC1hZ2UnXSkgdGhpcy5leHBpcmF0aW9uVGltZSA9IERhdGUubm93KCkgKyBwYXJzZWRDQ1snbWF4LWFnZSddICogMTAwMDtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLmV4cGlyZXMpIHtcbiAgICAgICAgICAgIHRoaXMuZXhwaXJhdGlvblRpbWUgPSBuZXcgRGF0ZShkYXRhLmV4cGlyZXMpLmdldFRpbWUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmV4cGlyYXRpb25UaW1lKSB7XG4gICAgICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgbGV0IGlzRXhwaXJlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5leHBpcmF0aW9uVGltZSA+IG5vdykge1xuICAgICAgICAgICAgICAgIGlzRXhwaXJlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghcHJpb3IpIHtcbiAgICAgICAgICAgICAgICBpc0V4cGlyZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmV4cGlyYXRpb25UaW1lIDwgcHJpb3IpIHtcbiAgICAgICAgICAgICAgICAvLyBFeHBpcmluZyBkYXRlIGlzIGdvaW5nIGJhY2t3YXJkczpcbiAgICAgICAgICAgICAgICAvLyBmYWxsIGJhY2sgdG8gZXhwb25lbnRpYWwgYmFja29mZlxuICAgICAgICAgICAgICAgIGlzRXhwaXJlZCA9IHRydWU7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVsdGEgPSB0aGlzLmV4cGlyYXRpb25UaW1lIC0gcHJpb3I7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWRlbHRhKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNlcnZlciBpcyBzZXJ2aW5nIHRoZSBzYW1lIGV4cGlyZWQgcmVzb3VyY2Ugb3ZlciBhbmQgb3ZlcjogZmFsbFxuICAgICAgICAgICAgICAgICAgICAvLyBiYWNrIHRvIGV4cG9uZW50aWFsIGJhY2tvZmYuXG4gICAgICAgICAgICAgICAgICAgIGlzRXhwaXJlZCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBBc3N1bWUgdGhhdCBlaXRoZXIgdGhlIGNsaWVudCBvciB0aGUgc2VydmVyIGNsb2NrIGlzIHdyb25nIGFuZFxuICAgICAgICAgICAgICAgICAgICAvLyB0cnkgdG8gaW50ZXJwb2xhdGUgYSB2YWxpZCBleHBpcmF0aW9uIGRhdGUgKGZyb20gdGhlIGNsaWVudCBQT1YpXG4gICAgICAgICAgICAgICAgICAgIC8vIG9ic2VydmluZyBhIG1pbmltdW0gdGltZW91dC5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBpcmF0aW9uVGltZSA9IG5vdyArIE1hdGgubWF4KGRlbHRhLCBDTE9DS19TS0VXX1JFVFJZX1RJTUVPVVQpO1xuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXNFeHBpcmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5leHBpcmVkUmVxdWVzdENvdW50Kys7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9ICdleHBpcmVkJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5leHBpcmVkUmVxdWVzdENvdW50ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEV4cGlyeVRpbWVvdXQoKSB7XG4gICAgICAgIGlmICh0aGlzLmV4cGlyYXRpb25UaW1lKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5leHBpcmVkUmVxdWVzdENvdW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDEwMDAgKiAoMSA8PCBNYXRoLm1pbih0aGlzLmV4cGlyZWRSZXF1ZXN0Q291bnQgLSAxLCAzMSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBNYXggdmFsdWUgZm9yIGBzZXRUaW1lb3V0YCBpbXBsZW1lbnRhdGlvbnMgaXMgYSAzMiBiaXQgaW50ZWdlcjsgY2FwIHRoaXMgYWNjb3JkaW5nbHlcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5taW4odGhpcy5leHBpcmF0aW9uVGltZSAtIG5ldyBEYXRlKCkuZ2V0VGltZSgpLCBNYXRoLnBvdygyLCAzMSkgLSAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldEZlYXR1cmVTdGF0ZShzdGF0ZXM6IExheWVyRmVhdHVyZVN0YXRlcywgcGFpbnRlcjogYW55KSB7XG4gICAgICAgIGlmICghdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXggfHxcbiAgICAgICAgICAgICF0aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5yYXdUaWxlRGF0YSB8fFxuICAgICAgICAgICAgT2JqZWN0LmtleXMoc3RhdGVzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZ0TGF5ZXJzID0gdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgubG9hZFZUTGF5ZXJzKCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLmJ1Y2tldHMpIHtcbiAgICAgICAgICAgIGlmICghcGFpbnRlci5zdHlsZS5oYXNMYXllcihpZCkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBjb25zdCBidWNrZXQgPSB0aGlzLmJ1Y2tldHNbaWRdO1xuICAgICAgICAgICAgLy8gQnVja2V0cyBhcmUgZ3JvdXBlZCBieSBjb21tb24gc291cmNlLWxheWVyXG4gICAgICAgICAgICBjb25zdCBzb3VyY2VMYXllcklkID0gYnVja2V0LmxheWVyc1swXVsnc291cmNlTGF5ZXInXSB8fCAnX2dlb2pzb25UaWxlTGF5ZXInO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlTGF5ZXIgPSB2dExheWVyc1tzb3VyY2VMYXllcklkXTtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUxheWVyU3RhdGVzID0gc3RhdGVzW3NvdXJjZUxheWVySWRdO1xuICAgICAgICAgICAgaWYgKCFzb3VyY2VMYXllciB8fCAhc291cmNlTGF5ZXJTdGF0ZXMgfHwgT2JqZWN0LmtleXMoc291cmNlTGF5ZXJTdGF0ZXMpLmxlbmd0aCA9PT0gMCkgY29udGludWU7XG5cbiAgICAgICAgICAgIGJ1Y2tldC51cGRhdGUoc291cmNlTGF5ZXJTdGF0ZXMsIHNvdXJjZUxheWVyLCB0aGlzLmltYWdlQXRsYXMgJiYgdGhpcy5pbWFnZUF0bGFzLnBhdHRlcm5Qb3NpdGlvbnMgfHwge30pO1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSBwYWludGVyICYmIHBhaW50ZXIuc3R5bGUgJiYgcGFpbnRlci5zdHlsZS5nZXRMYXllcihpZCk7XG4gICAgICAgICAgICBpZiAobGF5ZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5UGFkZGluZyA9IE1hdGgubWF4KHRoaXMucXVlcnlQYWRkaW5nLCBsYXllci5xdWVyeVJhZGl1cyhidWNrZXQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhvbGRpbmdGb3JGYWRlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zeW1ib2xGYWRlSG9sZFVudGlsICE9PSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgc3ltYm9sRmFkZUZpbmlzaGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuc3ltYm9sRmFkZUhvbGRVbnRpbCB8fCB0aGlzLnN5bWJvbEZhZGVIb2xkVW50aWwgPCBicm93c2VyLm5vdygpO1xuICAgIH1cblxuICAgIGNsZWFyRmFkZUhvbGQoKSB7XG4gICAgICAgIHRoaXMuc3ltYm9sRmFkZUhvbGRVbnRpbCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBzZXRIb2xkRHVyYXRpb24oZHVyYXRpb246IG51bWJlcikge1xuICAgICAgICB0aGlzLnN5bWJvbEZhZGVIb2xkVW50aWwgPSBicm93c2VyLm5vdygpICsgZHVyYXRpb247XG4gICAgfVxuXG4gICAgc2V0RGVwZW5kZW5jaWVzKG5hbWVzcGFjZTogc3RyaW5nLCBkZXBlbmRlbmNpZXM6IEFycmF5PHN0cmluZz4pIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBkZXAgb2YgZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgICBpbmRleFtkZXBdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRlcGVuZGVuY2llc1tuYW1lc3BhY2VdID0gaW5kZXg7XG4gICAgfVxuXG4gICAgaGFzRGVwZW5kZW5jeShuYW1lc3BhY2VzOiBBcnJheTxzdHJpbmc+LCBrZXlzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIGZvciAoY29uc3QgbmFtZXNwYWNlIG9mIG5hbWVzcGFjZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlcGVuZGVuY2llcyA9IHRoaXMuZGVwZW5kZW5jaWVzW25hbWVzcGFjZV07XG4gICAgICAgICAgICBpZiAoZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGVwZW5kZW5jaWVzW2tleV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRpbGU7XG4iLCJcbmV4cG9ydCBkZWZhdWx0IFsndHlwZScsICdzb3VyY2UnLCAnc291cmNlLWxheWVyJywgJ21pbnpvb20nLCAnbWF4em9vbScsICdmaWx0ZXInLCAnbGF5b3V0J107XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgd2luZG93IGZyb20gJy4uL3V0aWwvd2luZG93JztcbmltcG9ydCB0eXBlIHtSZXF1ZXN0UGFyYW1ldGVyc30gZnJvbSAnLi4vdXRpbC9hamF4JztcblxuY29uc3QgcGVyZm9ybWFuY2UgPSB3aW5kb3cucGVyZm9ybWFuY2U7XG5cbmV4cG9ydCB0eXBlIFBlcmZvcm1hbmNlTWV0cmljcyA9IHtcbiAgICBsb2FkVGltZTogbnVtYmVyLFxuICAgIGZ1bGxMb2FkVGltZTogbnVtYmVyLFxuICAgIGZwczogbnVtYmVyLFxuICAgIHBlcmNlbnREcm9wcGVkRnJhbWVzOiBudW1iZXJcbn1cblxuZXhwb3J0IGNvbnN0IFBlcmZvcm1hbmNlTWFya2VycyA9IHtcbiAgICBjcmVhdGU6ICdjcmVhdGUnLFxuICAgIGxvYWQ6ICdsb2FkJyxcbiAgICBmdWxsTG9hZDogJ2Z1bGxMb2FkJ1xufTtcblxubGV0IGxhc3RGcmFtZVRpbWUgPSBudWxsO1xubGV0IGZyYW1lVGltZXMgPSBbXTtcblxuY29uc3QgbWluRnJhbWVyYXRlVGFyZ2V0ID0gMzA7XG5jb25zdCBmcmFtZVRpbWVUYXJnZXQgPSAxMDAwIC8gbWluRnJhbWVyYXRlVGFyZ2V0O1xuXG5leHBvcnQgY29uc3QgUGVyZm9ybWFuY2VVdGlscyA9IHtcbiAgICBtYXJrKG1hcmtlcjogJEtleXM8dHlwZW9mIFBlcmZvcm1hbmNlTWFya2Vycz4pIHtcbiAgICAgICAgcGVyZm9ybWFuY2UubWFyayhtYXJrZXIpO1xuICAgIH0sXG4gICAgZnJhbWUodGltZXN0YW1wOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgY3VyclRpbWVzdGFtcCA9IHRpbWVzdGFtcDtcbiAgICAgICAgaWYgKGxhc3RGcmFtZVRpbWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgZnJhbWVUaW1lID0gY3VyclRpbWVzdGFtcCAtIGxhc3RGcmFtZVRpbWU7XG4gICAgICAgICAgICBmcmFtZVRpbWVzLnB1c2goZnJhbWVUaW1lKTtcbiAgICAgICAgfVxuICAgICAgICBsYXN0RnJhbWVUaW1lID0gY3VyclRpbWVzdGFtcDtcbiAgICB9LFxuICAgIGNsZWFyTWV0cmljcygpIHtcbiAgICAgICAgbGFzdEZyYW1lVGltZSA9IG51bGw7XG4gICAgICAgIGZyYW1lVGltZXMgPSBbXTtcbiAgICAgICAgcGVyZm9ybWFuY2UuY2xlYXJNZWFzdXJlcygnbG9hZFRpbWUnKTtcbiAgICAgICAgcGVyZm9ybWFuY2UuY2xlYXJNZWFzdXJlcygnZnVsbExvYWRUaW1lJyk7XG5cbiAgICAgICAgZm9yIChjb25zdCBtYXJrZXIgaW4gUGVyZm9ybWFuY2VNYXJrZXJzKSB7XG4gICAgICAgICAgICBwZXJmb3JtYW5jZS5jbGVhck1hcmtzKFBlcmZvcm1hbmNlTWFya2Vyc1ttYXJrZXJdKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgZ2V0UGVyZm9ybWFuY2VNZXRyaWNzKCk6IFBlcmZvcm1hbmNlTWV0cmljcyB7XG4gICAgICAgIGNvbnN0IGxvYWRUaW1lID0gcGVyZm9ybWFuY2UubWVhc3VyZSgnbG9hZFRpbWUnLCBQZXJmb3JtYW5jZU1hcmtlcnMuY3JlYXRlLCBQZXJmb3JtYW5jZU1hcmtlcnMubG9hZCkuZHVyYXRpb247XG4gICAgICAgIGNvbnN0IGZ1bGxMb2FkVGltZSA9IHBlcmZvcm1hbmNlLm1lYXN1cmUoJ2Z1bGxMb2FkVGltZScsIFBlcmZvcm1hbmNlTWFya2Vycy5jcmVhdGUsIFBlcmZvcm1hbmNlTWFya2Vycy5mdWxsTG9hZCkuZHVyYXRpb247XG4gICAgICAgIGNvbnN0IHRvdGFsRnJhbWVzID0gZnJhbWVUaW1lcy5sZW5ndGg7XG5cbiAgICAgICAgY29uc3QgYXZnRnJhbWVUaW1lID0gZnJhbWVUaW1lcy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHByZXYgKyBjdXJyLCAwKSAvIHRvdGFsRnJhbWVzIC8gMTAwMDtcbiAgICAgICAgY29uc3QgZnBzID0gMSAvIGF2Z0ZyYW1lVGltZTtcblxuICAgICAgICAvLyBjb3VudCBmcmFtZXMgdGhhdCBtaXNzZWQgb3VyIGZyYW1lcmF0ZSB0YXJnZXRcbiAgICAgICAgY29uc3QgZHJvcHBlZEZyYW1lcyA9IGZyYW1lVGltZXNcbiAgICAgICAgICAgIC5maWx0ZXIoKGZyYW1lVGltZSkgPT4gZnJhbWVUaW1lID4gZnJhbWVUaW1lVGFyZ2V0KVxuICAgICAgICAgICAgLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYyArIChjdXJyIC0gIGZyYW1lVGltZVRhcmdldCkgLyBmcmFtZVRpbWVUYXJnZXQ7XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgY29uc3QgcGVyY2VudERyb3BwZWRGcmFtZXMgPSAoZHJvcHBlZEZyYW1lcyAvICh0b3RhbEZyYW1lcyArIGRyb3BwZWRGcmFtZXMpKSAqIDEwMDtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbG9hZFRpbWUsXG4gICAgICAgICAgICBmdWxsTG9hZFRpbWUsXG4gICAgICAgICAgICBmcHMsXG4gICAgICAgICAgICBwZXJjZW50RHJvcHBlZEZyYW1lc1xuICAgICAgICB9O1xuICAgIH1cbn07XG5cbi8qKlxuICogU2FmZSB3cmFwcGVyIGZvciB0aGUgcGVyZm9ybWFuY2UgcmVzb3VyY2UgdGltaW5nIEFQSSBpbiB3ZWIgd29ya2VycyB3aXRoIGdyYWNlZnVsIGRlZ3JhZGF0aW9uXG4gKlxuICogQHBhcmFtIHtSZXF1ZXN0UGFyYW1ldGVyc30gcmVxdWVzdFxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIFJlcXVlc3RQZXJmb3JtYW5jZSB7XG4gICAgX21hcmtzOiB7c3RhcnQ6IHN0cmluZywgZW5kOiBzdHJpbmcsIG1lYXN1cmU6IHN0cmluZ307XG5cbiAgICBjb25zdHJ1Y3RvciAocmVxdWVzdDogUmVxdWVzdFBhcmFtZXRlcnMpIHtcbiAgICAgICAgdGhpcy5fbWFya3MgPSB7XG4gICAgICAgICAgICBzdGFydDogW3JlcXVlc3QudXJsLCAnc3RhcnQnXS5qb2luKCcjJyksXG4gICAgICAgICAgICBlbmQ6IFtyZXF1ZXN0LnVybCwgJ2VuZCddLmpvaW4oJyMnKSxcbiAgICAgICAgICAgIG1lYXN1cmU6IHJlcXVlc3QudXJsLnRvU3RyaW5nKClcbiAgICAgICAgfTtcblxuICAgICAgICBwZXJmb3JtYW5jZS5tYXJrKHRoaXMuX21hcmtzLnN0YXJ0KTtcbiAgICB9XG5cbiAgICBmaW5pc2goKSB7XG4gICAgICAgIHBlcmZvcm1hbmNlLm1hcmsodGhpcy5fbWFya3MuZW5kKTtcbiAgICAgICAgbGV0IHJlc291cmNlVGltaW5nRGF0YSA9IHBlcmZvcm1hbmNlLmdldEVudHJpZXNCeU5hbWUodGhpcy5fbWFya3MubWVhc3VyZSk7XG5cbiAgICAgICAgLy8gZmFsbGJhY2sgaWYgd2ViIHdvcmtlciBpbXBsZW1lbnRhdGlvbiBvZiBwZXJmLmdldEVudHJpZXNCeU5hbWUgcmV0dXJucyBlbXB0eVxuICAgICAgICBpZiAocmVzb3VyY2VUaW1pbmdEYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcGVyZm9ybWFuY2UubWVhc3VyZSh0aGlzLl9tYXJrcy5tZWFzdXJlLCB0aGlzLl9tYXJrcy5zdGFydCwgdGhpcy5fbWFya3MuZW5kKTtcbiAgICAgICAgICAgIHJlc291cmNlVGltaW5nRGF0YSA9IHBlcmZvcm1hbmNlLmdldEVudHJpZXNCeU5hbWUodGhpcy5fbWFya3MubWVhc3VyZSk7XG5cbiAgICAgICAgICAgIC8vIGNsZWFudXBcbiAgICAgICAgICAgIHBlcmZvcm1hbmNlLmNsZWFyTWFya3ModGhpcy5fbWFya3Muc3RhcnQpO1xuICAgICAgICAgICAgcGVyZm9ybWFuY2UuY2xlYXJNYXJrcyh0aGlzLl9tYXJrcy5lbmQpO1xuICAgICAgICAgICAgcGVyZm9ybWFuY2UuY2xlYXJNZWFzdXJlcyh0aGlzLl9tYXJrcy5tZWFzdXJlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXNvdXJjZVRpbWluZ0RhdGE7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBwZXJmb3JtYW5jZTtcbiIsIlxuaW1wb3J0IHJlZlByb3BlcnRpZXMgZnJvbSAnLi91dGlsL3JlZl9wcm9wZXJ0aWVzJztcblxuZnVuY3Rpb24gc3RyaW5naWZ5KG9iaikge1xuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2Ygb2JqO1xuICAgIGlmICh0eXBlID09PSAnbnVtYmVyJyB8fCB0eXBlID09PSAnYm9vbGVhbicgfHwgdHlwZSA9PT0gJ3N0cmluZycgfHwgb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsKVxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqKTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgbGV0IHN0ciA9ICdbJztcbiAgICAgICAgZm9yIChjb25zdCB2YWwgb2Ygb2JqKSB7XG4gICAgICAgICAgICBzdHIgKz0gYCR7c3RyaW5naWZ5KHZhbCl9LGA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAke3N0cn1dYDtcbiAgICB9XG5cbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKS5zb3J0KCk7XG5cbiAgICBsZXQgc3RyID0gJ3snO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBzdHIgKz0gYCR7SlNPTi5zdHJpbmdpZnkoa2V5c1tpXSl9OiR7c3RyaW5naWZ5KG9ialtrZXlzW2ldXSl9LGA7XG4gICAgfVxuICAgIHJldHVybiBgJHtzdHJ9fWA7XG59XG5cbmZ1bmN0aW9uIGdldEtleShsYXllcikge1xuICAgIGxldCBrZXkgPSAnJztcbiAgICBmb3IgKGNvbnN0IGsgb2YgcmVmUHJvcGVydGllcykge1xuICAgICAgICBrZXkgKz0gYC8ke3N0cmluZ2lmeShsYXllcltrXSl9YDtcbiAgICB9XG4gICAgcmV0dXJuIGtleTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZ3JvdXBCeUxheW91dDtcblxuLyoqXG4gKiBHaXZlbiBhbiBhcnJheSBvZiBsYXllcnMsIHJldHVybiBhbiBhcnJheSBvZiBhcnJheXMgb2YgbGF5ZXJzIHdoZXJlIGFsbFxuICogbGF5ZXJzIGluIGVhY2ggZ3JvdXAgaGF2ZSBpZGVudGljYWwgbGF5b3V0LWFmZmVjdGluZyBwcm9wZXJ0aWVzLiBUaGVzZVxuICogYXJlIHRoZSBwcm9wZXJ0aWVzIHRoYXQgd2VyZSBmb3JtZXJseSB1c2VkIGJ5IGV4cGxpY2l0IGByZWZgIG1lY2hhbmlzbVxuICogZm9yIGxheWVyczogJ3R5cGUnLCAnc291cmNlJywgJ3NvdXJjZS1sYXllcicsICdtaW56b29tJywgJ21heHpvb20nLFxuICogJ2ZpbHRlcicsIGFuZCAnbGF5b3V0Jy5cbiAqXG4gKiBUaGUgaW5wdXQgaXMgbm90IG1vZGlmaWVkLiBUaGUgb3V0cHV0IGxheWVycyBhcmUgcmVmZXJlbmNlcyB0byB0aGVcbiAqIGlucHV0IGxheWVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheTxMYXllcj59IGxheWVyc1xuICogQHBhcmFtIHtPYmplY3R9IFtjYWNoZWRLZXlzXSAtIGFuIG9iamVjdCB0byBrZWVwIGFscmVhZHkgY2FsY3VsYXRlZCBrZXlzLlxuICogQHJldHVybnMge0FycmF5PEFycmF5PExheWVyPj59XG4gKi9cbmZ1bmN0aW9uIGdyb3VwQnlMYXlvdXQobGF5ZXJzLCBjYWNoZWRLZXlzKSB7XG4gICAgY29uc3QgZ3JvdXBzID0ge307XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxheWVycy5sZW5ndGg7IGkrKykge1xuXG4gICAgICAgIGNvbnN0IGsgPSAoY2FjaGVkS2V5cyAmJiBjYWNoZWRLZXlzW2xheWVyc1tpXS5pZF0pIHx8IGdldEtleShsYXllcnNbaV0pO1xuICAgICAgICAvLyB1cGRhdGUgdGhlIGNhY2hlIGlmIHRoZXJlIGlzIG9uZVxuICAgICAgICBpZiAoY2FjaGVkS2V5cylcbiAgICAgICAgICAgIGNhY2hlZEtleXNbbGF5ZXJzW2ldLmlkXSA9IGs7XG5cbiAgICAgICAgbGV0IGdyb3VwID0gZ3JvdXBzW2tdO1xuICAgICAgICBpZiAoIWdyb3VwKSB7XG4gICAgICAgICAgICBncm91cCA9IGdyb3Vwc1trXSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGdyb3VwLnB1c2gobGF5ZXJzW2ldKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBbXTtcblxuICAgIGZvciAoY29uc3QgayBpbiBncm91cHMpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZ3JvdXBzW2tdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFN0eWxlTGF5ZXIgZnJvbSAnLi9zdHlsZV9sYXllcic7XG5pbXBvcnQgY3JlYXRlU3R5bGVMYXllciBmcm9tICcuL2NyZWF0ZV9zdHlsZV9sYXllcic7XG5cbmltcG9ydCB7dmFsdWVzfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IGZlYXR1cmVGaWx0ZXIgZnJvbSAnLi4vc3R5bGUtc3BlYy9mZWF0dXJlX2ZpbHRlcic7XG5pbXBvcnQgZ3JvdXBCeUxheW91dCBmcm9tICcuLi9zdHlsZS1zcGVjL2dyb3VwX2J5X2xheW91dCc7XG5cbmltcG9ydCB0eXBlIHtUeXBlZFN0eWxlTGF5ZXJ9IGZyb20gJy4vc3R5bGVfbGF5ZXIvdHlwZWRfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUge0xheWVyU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIExheWVyQ29uZmlncyA9IHtbXzogc3RyaW5nXTogTGF5ZXJTcGVjaWZpY2F0aW9uIH07XG5leHBvcnQgdHlwZSBGYW1pbHk8TGF5ZXI6IFR5cGVkU3R5bGVMYXllcj4gPSBBcnJheTxMYXllcj47XG5cbmNsYXNzIFN0eWxlTGF5ZXJJbmRleCB7XG4gICAgZmFtaWxpZXNCeVNvdXJjZTogeyBbc291cmNlOiBzdHJpbmddOiB7IFtzb3VyY2VMYXllcjogc3RyaW5nXTogQXJyYXk8RmFtaWx5PCo+PiB9IH07XG4gICAga2V5Q2FjaGU6IHsgW3NvdXJjZTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgICBfbGF5ZXJDb25maWdzOiBMYXllckNvbmZpZ3M7XG4gICAgX2xheWVyczoge1tfOiBzdHJpbmddOiBTdHlsZUxheWVyIH07XG5cbiAgICBjb25zdHJ1Y3RvcihsYXllckNvbmZpZ3M6ID9BcnJheTxMYXllclNwZWNpZmljYXRpb24+KSB7XG4gICAgICAgIHRoaXMua2V5Q2FjaGUgPSB7fTtcbiAgICAgICAgaWYgKGxheWVyQ29uZmlncykge1xuICAgICAgICAgICAgdGhpcy5yZXBsYWNlKGxheWVyQ29uZmlncyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXBsYWNlKGxheWVyQ29uZmlnczogQXJyYXk8TGF5ZXJTcGVjaWZpY2F0aW9uPikge1xuICAgICAgICB0aGlzLl9sYXllckNvbmZpZ3MgPSB7fTtcbiAgICAgICAgdGhpcy5fbGF5ZXJzID0ge307XG4gICAgICAgIHRoaXMudXBkYXRlKGxheWVyQ29uZmlncywgW10pO1xuICAgIH1cblxuICAgIHVwZGF0ZShsYXllckNvbmZpZ3M6IEFycmF5PExheWVyU3BlY2lmaWNhdGlvbj4sIHJlbW92ZWRJZHM6IEFycmF5PHN0cmluZz4pIHtcbiAgICAgICAgZm9yIChjb25zdCBsYXllckNvbmZpZyBvZiBsYXllckNvbmZpZ3MpIHtcbiAgICAgICAgICAgIHRoaXMuX2xheWVyQ29uZmlnc1tsYXllckNvbmZpZy5pZF0gPSBsYXllckNvbmZpZztcblxuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllcnNbbGF5ZXJDb25maWcuaWRdID0gY3JlYXRlU3R5bGVMYXllcihsYXllckNvbmZpZyk7XG4gICAgICAgICAgICBsYXllci5fZmVhdHVyZUZpbHRlciA9IGZlYXR1cmVGaWx0ZXIobGF5ZXIuZmlsdGVyKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmtleUNhY2hlW2xheWVyQ29uZmlnLmlkXSlcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5rZXlDYWNoZVtsYXllckNvbmZpZy5pZF07XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBpZCBvZiByZW1vdmVkSWRzKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5rZXlDYWNoZVtpZF07XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fbGF5ZXJDb25maWdzW2lkXTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9sYXllcnNbaWRdO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5mYW1pbGllc0J5U291cmNlID0ge307XG5cbiAgICAgICAgY29uc3QgZ3JvdXBzID0gZ3JvdXBCeUxheW91dCh2YWx1ZXModGhpcy5fbGF5ZXJDb25maWdzKSwgdGhpcy5rZXlDYWNoZSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBsYXllckNvbmZpZ3Mgb2YgZ3JvdXBzKSB7XG4gICAgICAgICAgICBjb25zdCBsYXllcnMgPSBsYXllckNvbmZpZ3MubWFwKChsYXllckNvbmZpZykgPT4gdGhpcy5fbGF5ZXJzW2xheWVyQ29uZmlnLmlkXSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gbGF5ZXJzWzBdO1xuICAgICAgICAgICAgaWYgKGxheWVyLnZpc2liaWxpdHkgPT09ICdub25lJykge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzb3VyY2VJZCA9IGxheWVyLnNvdXJjZSB8fCAnJztcbiAgICAgICAgICAgIGxldCBzb3VyY2VHcm91cCA9IHRoaXMuZmFtaWxpZXNCeVNvdXJjZVtzb3VyY2VJZF07XG4gICAgICAgICAgICBpZiAoIXNvdXJjZUdyb3VwKSB7XG4gICAgICAgICAgICAgICAgc291cmNlR3JvdXAgPSB0aGlzLmZhbWlsaWVzQnlTb3VyY2Vbc291cmNlSWRdID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUxheWVySWQgPSBsYXllci5zb3VyY2VMYXllciB8fCAnX2dlb2pzb25UaWxlTGF5ZXInO1xuICAgICAgICAgICAgbGV0IHNvdXJjZUxheWVyRmFtaWxpZXMgPSBzb3VyY2VHcm91cFtzb3VyY2VMYXllcklkXTtcbiAgICAgICAgICAgIGlmICghc291cmNlTGF5ZXJGYW1pbGllcykge1xuICAgICAgICAgICAgICAgIHNvdXJjZUxheWVyRmFtaWxpZXMgPSBzb3VyY2VHcm91cFtzb3VyY2VMYXllcklkXSA9IFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzb3VyY2VMYXllckZhbWlsaWVzLnB1c2gobGF5ZXJzKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3R5bGVMYXllckluZGV4O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtBbHBoYUltYWdlfSBmcm9tICcuLi91dGlsL2ltYWdlJztcbmltcG9ydCB7cmVnaXN0ZXJ9IGZyb20gJy4uL3V0aWwvd2ViX3dvcmtlcl90cmFuc2Zlcic7XG5pbXBvcnQgcG90cGFjayBmcm9tICdwb3RwYWNrJztcblxuaW1wb3J0IHR5cGUge0dseXBoTWV0cmljcywgU3R5bGVHbHlwaH0gZnJvbSAnLi4vc3R5bGUvc3R5bGVfZ2x5cGgnO1xuXG5jb25zdCBwYWRkaW5nID0gMTtcblxuZXhwb3J0IHR5cGUgUmVjdCA9IHtcbiAgICB4OiBudW1iZXIsXG4gICAgeTogbnVtYmVyLFxuICAgIHc6IG51bWJlcixcbiAgICBoOiBudW1iZXJcbn07XG5cbmV4cG9ydCB0eXBlIEdseXBoUG9zaXRpb24gPSB7XG4gICAgcmVjdDogUmVjdCxcbiAgICBtZXRyaWNzOiBHbHlwaE1ldHJpY3Ncbn07XG5cbmV4cG9ydCB0eXBlIEdseXBoUG9zaXRpb25zID0ge1tfOiBzdHJpbmddOiB7W186IG51bWJlcl06IEdseXBoUG9zaXRpb24gfSB9XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdseXBoQXRsYXMge1xuICAgIGltYWdlOiBBbHBoYUltYWdlO1xuICAgIHBvc2l0aW9uczogR2x5cGhQb3NpdGlvbnM7XG5cbiAgICBjb25zdHJ1Y3RvcihzdGFja3M6IHtbXzogc3RyaW5nXToge1tfOiBudW1iZXJdOiA/U3R5bGVHbHlwaCB9IH0pIHtcbiAgICAgICAgY29uc3QgcG9zaXRpb25zID0ge307XG4gICAgICAgIGNvbnN0IGJpbnMgPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IHN0YWNrIGluIHN0YWNrcykge1xuICAgICAgICAgICAgY29uc3QgZ2x5cGhzID0gc3RhY2tzW3N0YWNrXTtcbiAgICAgICAgICAgIGNvbnN0IHN0YWNrUG9zaXRpb25zID0gcG9zaXRpb25zW3N0YWNrXSA9IHt9O1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkIGluIGdseXBocykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNyYyA9IGdseXBoc1sraWRdO1xuICAgICAgICAgICAgICAgIGlmICghc3JjIHx8IHNyYy5iaXRtYXAud2lkdGggPT09IDAgfHwgc3JjLmJpdG1hcC5oZWlnaHQgPT09IDApIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgYmluID0ge1xuICAgICAgICAgICAgICAgICAgICB4OiAwLFxuICAgICAgICAgICAgICAgICAgICB5OiAwLFxuICAgICAgICAgICAgICAgICAgICB3OiBzcmMuYml0bWFwLndpZHRoICsgMiAqIHBhZGRpbmcsXG4gICAgICAgICAgICAgICAgICAgIGg6IHNyYy5iaXRtYXAuaGVpZ2h0ICsgMiAqIHBhZGRpbmdcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJpbnMucHVzaChiaW4pO1xuICAgICAgICAgICAgICAgIHN0YWNrUG9zaXRpb25zW2lkXSA9IHtyZWN0OiBiaW4sIG1ldHJpY3M6IHNyYy5tZXRyaWNzfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHt3LCBofSA9IHBvdHBhY2soYmlucyk7XG4gICAgICAgIGNvbnN0IGltYWdlID0gbmV3IEFscGhhSW1hZ2Uoe3dpZHRoOiB3IHx8IDEsIGhlaWdodDogaCB8fCAxfSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBzdGFjayBpbiBzdGFja3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGdseXBocyA9IHN0YWNrc1tzdGFja107XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgaW4gZ2x5cGhzKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3JjID0gZ2x5cGhzWytpZF07XG4gICAgICAgICAgICAgICAgaWYgKCFzcmMgfHwgc3JjLmJpdG1hcC53aWR0aCA9PT0gMCB8fCBzcmMuYml0bWFwLmhlaWdodCA9PT0gMCkgY29udGludWU7XG4gICAgICAgICAgICAgICAgY29uc3QgYmluID0gcG9zaXRpb25zW3N0YWNrXVtpZF0ucmVjdDtcbiAgICAgICAgICAgICAgICBBbHBoYUltYWdlLmNvcHkoc3JjLmJpdG1hcCwgaW1hZ2UsIHt4OiAwLCB5OiAwfSwge3g6IGJpbi54ICsgcGFkZGluZywgeTogYmluLnkgKyBwYWRkaW5nfSwgc3JjLmJpdG1hcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmltYWdlID0gaW1hZ2U7XG4gICAgICAgIHRoaXMucG9zaXRpb25zID0gcG9zaXRpb25zO1xuICAgIH1cbn1cblxucmVnaXN0ZXIoJ0dseXBoQXRsYXMnLCBHbHlwaEF0bGFzKTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBGZWF0dXJlSW5kZXggZnJvbSAnLi4vZGF0YS9mZWF0dXJlX2luZGV4JztcblxuaW1wb3J0IHtwZXJmb3JtU3ltYm9sTGF5b3V0fSBmcm9tICcuLi9zeW1ib2wvc3ltYm9sX2xheW91dCc7XG5pbXBvcnQge0NvbGxpc2lvbkJveEFycmF5fSBmcm9tICcuLi9kYXRhL2FycmF5X3R5cGVzJztcbmltcG9ydCBEaWN0aW9uYXJ5Q29kZXIgZnJvbSAnLi4vdXRpbC9kaWN0aW9uYXJ5X2NvZGVyJztcbmltcG9ydCBTeW1ib2xCdWNrZXQgZnJvbSAnLi4vZGF0YS9idWNrZXQvc3ltYm9sX2J1Y2tldCc7XG5pbXBvcnQgTGluZUJ1Y2tldCBmcm9tICcuLi9kYXRhL2J1Y2tldC9saW5lX2J1Y2tldCc7XG5pbXBvcnQgRmlsbEJ1Y2tldCBmcm9tICcuLi9kYXRhL2J1Y2tldC9maWxsX2J1Y2tldCc7XG5pbXBvcnQgRmlsbEV4dHJ1c2lvbkJ1Y2tldCBmcm9tICcuLi9kYXRhL2J1Y2tldC9maWxsX2V4dHJ1c2lvbl9idWNrZXQnO1xuaW1wb3J0IHt3YXJuT25jZSwgbWFwT2JqZWN0LCB2YWx1ZXN9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgSW1hZ2VBdGxhcyBmcm9tICcuLi9yZW5kZXIvaW1hZ2VfYXRsYXMnO1xuaW1wb3J0IEdseXBoQXRsYXMgZnJvbSAnLi4vcmVuZGVyL2dseXBoX2F0bGFzJztcbmltcG9ydCBFdmFsdWF0aW9uUGFyYW1ldGVycyBmcm9tICcuLi9zdHlsZS9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuaW1wb3J0IHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuL3RpbGVfaWQnO1xuXG5pbXBvcnQgdHlwZSB7QnVja2V0fSBmcm9tICcuLi9kYXRhL2J1Y2tldCc7XG5pbXBvcnQgdHlwZSBBY3RvciBmcm9tICcuLi91dGlsL2FjdG9yJztcbmltcG9ydCB0eXBlIFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgU3R5bGVMYXllckluZGV4IGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyX2luZGV4JztcbmltcG9ydCB0eXBlIHtTdHlsZUltYWdlfSBmcm9tICcuLi9zdHlsZS9zdHlsZV9pbWFnZSc7XG5pbXBvcnQgdHlwZSB7U3R5bGVHbHlwaH0gZnJvbSAnLi4vc3R5bGUvc3R5bGVfZ2x5cGgnO1xuaW1wb3J0IHR5cGUge1xuICAgIFdvcmtlclRpbGVQYXJhbWV0ZXJzLFxuICAgIFdvcmtlclRpbGVDYWxsYmFjayxcbn0gZnJvbSAnLi4vc291cmNlL3dvcmtlcl9zb3VyY2UnO1xuaW1wb3J0IHR5cGUge1Byb21vdGVJZFNwZWNpZmljYXRpb259IGZyb20gJy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG5jbGFzcyBXb3JrZXJUaWxlIHtcbiAgICB0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQ7XG4gICAgdWlkOiBzdHJpbmc7XG4gICAgem9vbTogbnVtYmVyO1xuICAgIHBpeGVsUmF0aW86IG51bWJlcjtcbiAgICB0aWxlU2l6ZTogbnVtYmVyO1xuICAgIHNvdXJjZTogc3RyaW5nO1xuICAgIHByb21vdGVJZDogP1Byb21vdGVJZFNwZWNpZmljYXRpb247XG4gICAgb3ZlcnNjYWxpbmc6IG51bWJlcjtcbiAgICBzaG93Q29sbGlzaW9uQm94ZXM6IGJvb2xlYW47XG4gICAgY29sbGVjdFJlc291cmNlVGltaW5nOiBib29sZWFuO1xuICAgIHJldHVybkRlcGVuZGVuY2llczogYm9vbGVhbjtcblxuICAgIHN0YXR1czogJ3BhcnNpbmcnIHwgJ2RvbmUnO1xuICAgIGRhdGE6IFZlY3RvclRpbGU7XG4gICAgY29sbGlzaW9uQm94QXJyYXk6IENvbGxpc2lvbkJveEFycmF5O1xuXG4gICAgYWJvcnQ6ID8oKSA9PiB2b2lkO1xuICAgIHJlbG9hZENhbGxiYWNrOiBXb3JrZXJUaWxlQ2FsbGJhY2s7XG4gICAgdmVjdG9yVGlsZTogVmVjdG9yVGlsZTtcblxuICAgIGNvbnN0cnVjdG9yKHBhcmFtczogV29ya2VyVGlsZVBhcmFtZXRlcnMpIHtcbiAgICAgICAgdGhpcy50aWxlSUQgPSBuZXcgT3ZlcnNjYWxlZFRpbGVJRChwYXJhbXMudGlsZUlELm92ZXJzY2FsZWRaLCBwYXJhbXMudGlsZUlELndyYXAsIHBhcmFtcy50aWxlSUQuY2Fub25pY2FsLnosIHBhcmFtcy50aWxlSUQuY2Fub25pY2FsLngsIHBhcmFtcy50aWxlSUQuY2Fub25pY2FsLnkpO1xuICAgICAgICB0aGlzLnVpZCA9IHBhcmFtcy51aWQ7XG4gICAgICAgIHRoaXMuem9vbSA9IHBhcmFtcy56b29tO1xuICAgICAgICB0aGlzLnBpeGVsUmF0aW8gPSBwYXJhbXMucGl4ZWxSYXRpbztcbiAgICAgICAgdGhpcy50aWxlU2l6ZSA9IHBhcmFtcy50aWxlU2l6ZTtcbiAgICAgICAgdGhpcy5zb3VyY2UgPSBwYXJhbXMuc291cmNlO1xuICAgICAgICB0aGlzLm92ZXJzY2FsaW5nID0gdGhpcy50aWxlSUQub3ZlcnNjYWxlRmFjdG9yKCk7XG4gICAgICAgIHRoaXMuc2hvd0NvbGxpc2lvbkJveGVzID0gcGFyYW1zLnNob3dDb2xsaXNpb25Cb3hlcztcbiAgICAgICAgdGhpcy5jb2xsZWN0UmVzb3VyY2VUaW1pbmcgPSAhIXBhcmFtcy5jb2xsZWN0UmVzb3VyY2VUaW1pbmc7XG4gICAgICAgIHRoaXMucmV0dXJuRGVwZW5kZW5jaWVzID0gISFwYXJhbXMucmV0dXJuRGVwZW5kZW5jaWVzO1xuICAgICAgICB0aGlzLnByb21vdGVJZCA9IHBhcmFtcy5wcm9tb3RlSWQ7XG4gICAgfVxuXG4gICAgcGFyc2UoZGF0YTogVmVjdG9yVGlsZSwgbGF5ZXJJbmRleDogU3R5bGVMYXllckluZGV4LCBhdmFpbGFibGVJbWFnZXM6IEFycmF5PHN0cmluZz4sIGFjdG9yOiBBY3RvciwgY2FsbGJhY2s6IFdvcmtlclRpbGVDYWxsYmFjaykge1xuICAgICAgICB0aGlzLnN0YXR1cyA9ICdwYXJzaW5nJztcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcblxuICAgICAgICB0aGlzLmNvbGxpc2lvbkJveEFycmF5ID0gbmV3IENvbGxpc2lvbkJveEFycmF5KCk7XG4gICAgICAgIGNvbnN0IHNvdXJjZUxheWVyQ29kZXIgPSBuZXcgRGljdGlvbmFyeUNvZGVyKE9iamVjdC5rZXlzKGRhdGEubGF5ZXJzKS5zb3J0KCkpO1xuXG4gICAgICAgIGNvbnN0IGZlYXR1cmVJbmRleCA9IG5ldyBGZWF0dXJlSW5kZXgodGhpcy50aWxlSUQsIHRoaXMucHJvbW90ZUlkKTtcbiAgICAgICAgZmVhdHVyZUluZGV4LmJ1Y2tldExheWVySURzID0gW107XG5cbiAgICAgICAgY29uc3QgYnVja2V0czoge1tfOiBzdHJpbmddOiBCdWNrZXR9ID0ge307XG5cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGZlYXR1cmVJbmRleCxcbiAgICAgICAgICAgIGljb25EZXBlbmRlbmNpZXM6IHt9LFxuICAgICAgICAgICAgcGF0dGVybkRlcGVuZGVuY2llczoge30sXG4gICAgICAgICAgICBnbHlwaERlcGVuZGVuY2llczoge30sXG4gICAgICAgICAgICBhdmFpbGFibGVJbWFnZXNcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBsYXllckZhbWlsaWVzID0gbGF5ZXJJbmRleC5mYW1pbGllc0J5U291cmNlW3RoaXMuc291cmNlXTtcbiAgICAgICAgZm9yIChjb25zdCBzb3VyY2VMYXllcklkIGluIGxheWVyRmFtaWxpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUxheWVyID0gZGF0YS5sYXllcnNbc291cmNlTGF5ZXJJZF07XG4gICAgICAgICAgICBpZiAoIXNvdXJjZUxheWVyKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzb3VyY2VMYXllci52ZXJzaW9uID09PSAxKSB7XG4gICAgICAgICAgICAgICAgd2Fybk9uY2UoYFZlY3RvciB0aWxlIHNvdXJjZSBcIiR7dGhpcy5zb3VyY2V9XCIgbGF5ZXIgXCIke3NvdXJjZUxheWVySWR9XCIgYCArXG4gICAgICAgICAgICAgICAgICAgIGBkb2VzIG5vdCB1c2UgdmVjdG9yIHRpbGUgc3BlYyB2MiBhbmQgdGhlcmVmb3JlIG1heSBoYXZlIHNvbWUgcmVuZGVyaW5nIGVycm9ycy5gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc291cmNlTGF5ZXJJbmRleCA9IHNvdXJjZUxheWVyQ29kZXIuZW5jb2RlKHNvdXJjZUxheWVySWQpO1xuICAgICAgICAgICAgY29uc3QgZmVhdHVyZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBzb3VyY2VMYXllci5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlID0gc291cmNlTGF5ZXIuZmVhdHVyZShpbmRleCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaWQgPSBmZWF0dXJlSW5kZXguZ2V0SWQoZmVhdHVyZSwgc291cmNlTGF5ZXJJZCk7XG4gICAgICAgICAgICAgICAgZmVhdHVyZXMucHVzaCh7ZmVhdHVyZSwgaWQsIGluZGV4LCBzb3VyY2VMYXllckluZGV4fSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgZmFtaWx5IG9mIGxheWVyRmFtaWxpZXNbc291cmNlTGF5ZXJJZF0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYXllciA9IGZhbWlseVswXTtcblxuICAgICAgICAgICAgICAgIGFzc2VydChsYXllci5zb3VyY2UgPT09IHRoaXMuc291cmNlKTtcbiAgICAgICAgICAgICAgICBpZiAobGF5ZXIubWluem9vbSAmJiB0aGlzLnpvb20gPCBNYXRoLmZsb29yKGxheWVyLm1pbnpvb20pKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBpZiAobGF5ZXIubWF4em9vbSAmJiB0aGlzLnpvb20gPj0gbGF5ZXIubWF4em9vbSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgaWYgKGxheWVyLnZpc2liaWxpdHkgPT09ICdub25lJykgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICByZWNhbGN1bGF0ZUxheWVycyhmYW1pbHksIHRoaXMuem9vbSwgYXZhaWxhYmxlSW1hZ2VzKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGJ1Y2tldCA9IGJ1Y2tldHNbbGF5ZXIuaWRdID0gbGF5ZXIuY3JlYXRlQnVja2V0KHtcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGZlYXR1cmVJbmRleC5idWNrZXRMYXllcklEcy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgIGxheWVyczogZmFtaWx5LFxuICAgICAgICAgICAgICAgICAgICB6b29tOiB0aGlzLnpvb20sXG4gICAgICAgICAgICAgICAgICAgIHBpeGVsUmF0aW86IHRoaXMucGl4ZWxSYXRpbyxcbiAgICAgICAgICAgICAgICAgICAgb3ZlcnNjYWxpbmc6IHRoaXMub3ZlcnNjYWxpbmcsXG4gICAgICAgICAgICAgICAgICAgIGNvbGxpc2lvbkJveEFycmF5OiB0aGlzLmNvbGxpc2lvbkJveEFycmF5LFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VMYXllckluZGV4LFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VJRDogdGhpcy5zb3VyY2VcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGJ1Y2tldC5wb3B1bGF0ZShmZWF0dXJlcywgb3B0aW9ucywgdGhpcy50aWxlSUQuY2Fub25pY2FsKTtcbiAgICAgICAgICAgICAgICBmZWF0dXJlSW5kZXguYnVja2V0TGF5ZXJJRHMucHVzaChmYW1pbHkubWFwKChsKSA9PiBsLmlkKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZXJyb3I6ID9FcnJvcjtcbiAgICAgICAgbGV0IGdseXBoTWFwOiA/e1tfOiBzdHJpbmddOiB7W186IG51bWJlcl06ID9TdHlsZUdseXBofX07XG4gICAgICAgIGxldCBpY29uTWFwOiA/e1tfOiBzdHJpbmddOiBTdHlsZUltYWdlfTtcbiAgICAgICAgbGV0IHBhdHRlcm5NYXA6ID97W186IHN0cmluZ106IFN0eWxlSW1hZ2V9O1xuXG4gICAgICAgIGNvbnN0IHN0YWNrcyA9IG1hcE9iamVjdChvcHRpb25zLmdseXBoRGVwZW5kZW5jaWVzLCAoZ2x5cGhzKSA9PiBPYmplY3Qua2V5cyhnbHlwaHMpLm1hcChOdW1iZXIpKTtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHN0YWNrcykubGVuZ3RoKSB7XG4gICAgICAgICAgICBhY3Rvci5zZW5kKCdnZXRHbHlwaHMnLCB7dWlkOiB0aGlzLnVpZCwgc3RhY2tzfSwgKGVyciwgcmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICAgICAgZ2x5cGhNYXAgPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIG1heWJlUHJlcGFyZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2x5cGhNYXAgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGljb25zID0gT2JqZWN0LmtleXMob3B0aW9ucy5pY29uRGVwZW5kZW5jaWVzKTtcbiAgICAgICAgaWYgKGljb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgYWN0b3Iuc2VuZCgnZ2V0SW1hZ2VzJywge2ljb25zLCBzb3VyY2U6IHRoaXMuc291cmNlLCB0aWxlSUQ6IHRoaXMudGlsZUlELCB0eXBlOiAnaWNvbnMnfSwgKGVyciwgcmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICAgICAgaWNvbk1hcCA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgbWF5YmVQcmVwYXJlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpY29uTWFwID0ge307XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXR0ZXJucyA9IE9iamVjdC5rZXlzKG9wdGlvbnMucGF0dGVybkRlcGVuZGVuY2llcyk7XG4gICAgICAgIGlmIChwYXR0ZXJucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFjdG9yLnNlbmQoJ2dldEltYWdlcycsIHtpY29uczogcGF0dGVybnMsIHNvdXJjZTogdGhpcy5zb3VyY2UsIHRpbGVJRDogdGhpcy50aWxlSUQsIHR5cGU6ICdwYXR0ZXJucyd9LCAoZXJyLCByZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuTWFwID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICBtYXliZVByZXBhcmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhdHRlcm5NYXAgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1heWJlUHJlcGFyZS5jYWxsKHRoaXMpO1xuXG4gICAgICAgIGZ1bmN0aW9uIG1heWJlUHJlcGFyZSgpIHtcbiAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGdseXBoTWFwICYmIGljb25NYXAgJiYgcGF0dGVybk1hcCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdseXBoQXRsYXMgPSBuZXcgR2x5cGhBdGxhcyhnbHlwaE1hcCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaW1hZ2VBdGxhcyA9IG5ldyBJbWFnZUF0bGFzKGljb25NYXAsIHBhdHRlcm5NYXApO1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gYnVja2V0cykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBidWNrZXQgPSBidWNrZXRzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChidWNrZXQgaW5zdGFuY2VvZiBTeW1ib2xCdWNrZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY2FsY3VsYXRlTGF5ZXJzKGJ1Y2tldC5sYXllcnMsIHRoaXMuem9vbSwgYXZhaWxhYmxlSW1hZ2VzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlcmZvcm1TeW1ib2xMYXlvdXQoYnVja2V0LCBnbHlwaE1hcCwgZ2x5cGhBdGxhcy5wb3NpdGlvbnMsIGljb25NYXAsIGltYWdlQXRsYXMuaWNvblBvc2l0aW9ucywgdGhpcy5zaG93Q29sbGlzaW9uQm94ZXMsIHRoaXMudGlsZUlELmNhbm9uaWNhbCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYnVja2V0Lmhhc1BhdHRlcm4gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIChidWNrZXQgaW5zdGFuY2VvZiBMaW5lQnVja2V0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgYnVja2V0IGluc3RhbmNlb2YgRmlsbEJ1Y2tldCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldCBpbnN0YW5jZW9mIEZpbGxFeHRydXNpb25CdWNrZXQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWNhbGN1bGF0ZUxheWVycyhidWNrZXQubGF5ZXJzLCB0aGlzLnpvb20sIGF2YWlsYWJsZUltYWdlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBidWNrZXQuYWRkRmVhdHVyZXMob3B0aW9ucywgdGhpcy50aWxlSUQuY2Fub25pY2FsLCBpbWFnZUF0bGFzLnBhdHRlcm5Qb3NpdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSAnZG9uZSc7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwge1xuICAgICAgICAgICAgICAgICAgICBidWNrZXRzOiB2YWx1ZXMoYnVja2V0cykuZmlsdGVyKGIgPT4gIWIuaXNFbXB0eSgpKSxcbiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZUluZGV4LFxuICAgICAgICAgICAgICAgICAgICBjb2xsaXNpb25Cb3hBcnJheTogdGhpcy5jb2xsaXNpb25Cb3hBcnJheSxcbiAgICAgICAgICAgICAgICAgICAgZ2x5cGhBdGxhc0ltYWdlOiBnbHlwaEF0bGFzLmltYWdlLFxuICAgICAgICAgICAgICAgICAgICBpbWFnZUF0bGFzLFxuICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IHVzZWQgZm9yIGJlbmNobWFya2luZzpcbiAgICAgICAgICAgICAgICAgICAgZ2x5cGhNYXA6IHRoaXMucmV0dXJuRGVwZW5kZW5jaWVzID8gZ2x5cGhNYXAgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBpY29uTWFwOiB0aGlzLnJldHVybkRlcGVuZGVuY2llcyA/IGljb25NYXAgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBnbHlwaFBvc2l0aW9uczogdGhpcy5yZXR1cm5EZXBlbmRlbmNpZXMgPyBnbHlwaEF0bGFzLnBvc2l0aW9ucyA6IG51bGxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gcmVjYWxjdWxhdGVMYXllcnMobGF5ZXJzOiAkUmVhZE9ubHlBcnJheTxTdHlsZUxheWVyPiwgem9vbTogbnVtYmVyLCBhdmFpbGFibGVJbWFnZXM6IEFycmF5PHN0cmluZz4pIHtcbiAgICAvLyBMYXllcnMgYXJlIHNoYXJlZCBhbmQgbWF5IGhhdmUgYmVlbiB1c2VkIGJ5IGEgV29ya2VyVGlsZSB3aXRoIGEgZGlmZmVyZW50IHpvb20uXG4gICAgY29uc3QgcGFyYW1ldGVycyA9IG5ldyBFdmFsdWF0aW9uUGFyYW1ldGVycyh6b29tKTtcbiAgICBmb3IgKGNvbnN0IGxheWVyIG9mIGxheWVycykge1xuICAgICAgICBsYXllci5yZWNhbGN1bGF0ZShwYXJhbWV0ZXJzLCBhdmFpbGFibGVJbWFnZXMpO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgV29ya2VyVGlsZTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7Z2V0QXJyYXlCdWZmZXJ9IGZyb20gJy4uL3V0aWwvYWpheCc7XG5cbmltcG9ydCB2dCBmcm9tICdAbWFwYm94L3ZlY3Rvci10aWxlJztcbmltcG9ydCBQcm90b2J1ZiBmcm9tICdwYmYnO1xuaW1wb3J0IFdvcmtlclRpbGUgZnJvbSAnLi93b3JrZXJfdGlsZSc7XG5pbXBvcnQge2V4dGVuZH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7UmVxdWVzdFBlcmZvcm1hbmNlfSBmcm9tICcuLi91dGlsL3BlcmZvcm1hbmNlJztcblxuaW1wb3J0IHR5cGUge1xuICAgIFdvcmtlclNvdXJjZSxcbiAgICBXb3JrZXJUaWxlUGFyYW1ldGVycyxcbiAgICBXb3JrZXJUaWxlQ2FsbGJhY2ssXG4gICAgVGlsZVBhcmFtZXRlcnNcbn0gZnJvbSAnLi4vc291cmNlL3dvcmtlcl9zb3VyY2UnO1xuXG5pbXBvcnQgdHlwZSBBY3RvciBmcm9tICcuLi91dGlsL2FjdG9yJztcbmltcG9ydCB0eXBlIFN0eWxlTGF5ZXJJbmRleCBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllcl9pbmRleCc7XG5pbXBvcnQgdHlwZSB7Q2FsbGJhY2t9IGZyb20gJy4uL3R5cGVzL2NhbGxiYWNrJztcblxuZXhwb3J0IHR5cGUgTG9hZFZlY3RvclRpbGVSZXN1bHQgPSB7XG4gICAgdmVjdG9yVGlsZTogVmVjdG9yVGlsZTtcbiAgICByYXdEYXRhOiBBcnJheUJ1ZmZlcjtcbiAgICBleHBpcmVzPzogYW55O1xuICAgIGNhY2hlQ29udHJvbD86IGFueTtcbiAgICByZXNvdXJjZVRpbWluZz86IEFycmF5PFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmc+O1xufTtcblxuLyoqXG4gKiBAY2FsbGJhY2sgTG9hZFZlY3RvckRhdGFDYWxsYmFja1xuICogQHBhcmFtIGVycm9yXG4gKiBAcGFyYW0gdmVjdG9yVGlsZVxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IHR5cGUgTG9hZFZlY3RvckRhdGFDYWxsYmFjayA9IENhbGxiYWNrPD9Mb2FkVmVjdG9yVGlsZVJlc3VsdD47XG5cbmV4cG9ydCB0eXBlIEFib3J0VmVjdG9yRGF0YSA9ICgpID0+IHZvaWQ7XG5leHBvcnQgdHlwZSBMb2FkVmVjdG9yRGF0YSA9IChwYXJhbXM6IFdvcmtlclRpbGVQYXJhbWV0ZXJzLCBjYWxsYmFjazogTG9hZFZlY3RvckRhdGFDYWxsYmFjaykgPT4gP0Fib3J0VmVjdG9yRGF0YTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBsb2FkVmVjdG9yVGlsZShwYXJhbXM6IFdvcmtlclRpbGVQYXJhbWV0ZXJzLCBjYWxsYmFjazogTG9hZFZlY3RvckRhdGFDYWxsYmFjaykge1xuICAgIGNvbnN0IHJlcXVlc3QgPSBnZXRBcnJheUJ1ZmZlcihwYXJhbXMucmVxdWVzdCwgKGVycjogP0Vycm9yLCBkYXRhOiA/QXJyYXlCdWZmZXIsIGNhY2hlQ29udHJvbDogP3N0cmluZywgZXhwaXJlczogP3N0cmluZykgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHtcbiAgICAgICAgICAgICAgICB2ZWN0b3JUaWxlOiBuZXcgdnQuVmVjdG9yVGlsZShuZXcgUHJvdG9idWYoZGF0YSkpLFxuICAgICAgICAgICAgICAgIHJhd0RhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgY2FjaGVDb250cm9sLFxuICAgICAgICAgICAgICAgIGV4cGlyZXNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgcmVxdWVzdC5jYW5jZWwoKTtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICB9O1xufVxuXG4vKipcbiAqIFRoZSB7QGxpbmsgV29ya2VyU291cmNlfSBpbXBsZW1lbnRhdGlvbiB0aGF0IHN1cHBvcnRzIHtAbGluayBWZWN0b3JUaWxlU291cmNlfS5cbiAqIFRoaXMgY2xhc3MgaXMgZGVzaWduZWQgdG8gYmUgZWFzaWx5IHJldXNlZCB0byBzdXBwb3J0IGN1c3RvbSBzb3VyY2UgdHlwZXNcbiAqIGZvciBkYXRhIGZvcm1hdHMgdGhhdCBjYW4gYmUgcGFyc2VkL2NvbnZlcnRlZCBpbnRvIGFuIGluLW1lbW9yeSBWZWN0b3JUaWxlXG4gKiByZXByZXNlbnRhdGlvbi4gIFRvIGRvIHNvLCBjcmVhdGUgaXQgd2l0aFxuICogYG5ldyBWZWN0b3JUaWxlV29ya2VyU291cmNlKGFjdG9yLCBzdHlsZUxheWVycywgY3VzdG9tTG9hZFZlY3RvckRhdGFGdW5jdGlvbilgLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFZlY3RvclRpbGVXb3JrZXJTb3VyY2UgaW1wbGVtZW50cyBXb3JrZXJTb3VyY2Uge1xuICAgIGFjdG9yOiBBY3RvcjtcbiAgICBsYXllckluZGV4OiBTdHlsZUxheWVySW5kZXg7XG4gICAgYXZhaWxhYmxlSW1hZ2VzOiBBcnJheTxzdHJpbmc+O1xuICAgIGxvYWRWZWN0b3JEYXRhOiBMb2FkVmVjdG9yRGF0YTtcbiAgICBsb2FkaW5nOiB7W186IHN0cmluZ106IFdvcmtlclRpbGUgfTtcbiAgICBsb2FkZWQ6IHtbXzogc3RyaW5nXTogV29ya2VyVGlsZSB9O1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIFtsb2FkVmVjdG9yRGF0YV0gT3B0aW9uYWwgbWV0aG9kIGZvciBjdXN0b20gbG9hZGluZyBvZiBhIFZlY3RvclRpbGVcbiAgICAgKiBvYmplY3QgYmFzZWQgb24gcGFyYW1ldGVycyBwYXNzZWQgZnJvbSB0aGUgbWFpbi10aHJlYWQgU291cmNlLiBTZWVcbiAgICAgKiB7QGxpbmsgVmVjdG9yVGlsZVdvcmtlclNvdXJjZSNsb2FkVGlsZX0uIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHNpbXBseVxuICAgICAqIGxvYWRzIHRoZSBwYmYgYXQgYHBhcmFtcy51cmxgLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoYWN0b3I6IEFjdG9yLCBsYXllckluZGV4OiBTdHlsZUxheWVySW5kZXgsIGF2YWlsYWJsZUltYWdlczogQXJyYXk8c3RyaW5nPiwgbG9hZFZlY3RvckRhdGE6ID9Mb2FkVmVjdG9yRGF0YSkge1xuICAgICAgICB0aGlzLmFjdG9yID0gYWN0b3I7XG4gICAgICAgIHRoaXMubGF5ZXJJbmRleCA9IGxheWVySW5kZXg7XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlSW1hZ2VzID0gYXZhaWxhYmxlSW1hZ2VzO1xuICAgICAgICB0aGlzLmxvYWRWZWN0b3JEYXRhID0gbG9hZFZlY3RvckRhdGEgfHwgbG9hZFZlY3RvclRpbGU7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IHt9O1xuICAgICAgICB0aGlzLmxvYWRlZCA9IHt9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEltcGxlbWVudHMge0BsaW5rIFdvcmtlclNvdXJjZSNsb2FkVGlsZX0uIERlbGVnYXRlcyB0b1xuICAgICAqIHtAbGluayBWZWN0b3JUaWxlV29ya2VyU291cmNlI2xvYWRWZWN0b3JEYXRhfSAod2hpY2ggYnkgZGVmYXVsdCBleHBlY3RzXG4gICAgICogYSBgcGFyYW1zLnVybGAgcHJvcGVydHkpIGZvciBmZXRjaGluZyBhbmQgcHJvZHVjaW5nIGEgVmVjdG9yVGlsZSBvYmplY3QuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBsb2FkVGlsZShwYXJhbXM6IFdvcmtlclRpbGVQYXJhbWV0ZXJzLCBjYWxsYmFjazogV29ya2VyVGlsZUNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IHVpZCA9IHBhcmFtcy51aWQ7XG5cbiAgICAgICAgaWYgKCF0aGlzLmxvYWRpbmcpXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB7fTtcblxuICAgICAgICBjb25zdCBwZXJmID0gKHBhcmFtcyAmJiBwYXJhbXMucmVxdWVzdCAmJiBwYXJhbXMucmVxdWVzdC5jb2xsZWN0UmVzb3VyY2VUaW1pbmcpID9cbiAgICAgICAgICAgIG5ldyBSZXF1ZXN0UGVyZm9ybWFuY2UocGFyYW1zLnJlcXVlc3QpIDogZmFsc2U7XG5cbiAgICAgICAgY29uc3Qgd29ya2VyVGlsZSA9IHRoaXMubG9hZGluZ1t1aWRdID0gbmV3IFdvcmtlclRpbGUocGFyYW1zKTtcbiAgICAgICAgd29ya2VyVGlsZS5hYm9ydCA9IHRoaXMubG9hZFZlY3RvckRhdGEocGFyYW1zLCAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMubG9hZGluZ1t1aWRdO1xuXG4gICAgICAgICAgICBpZiAoZXJyIHx8ICFyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHdvcmtlclRpbGUuc3RhdHVzID0gJ2RvbmUnO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGVkW3VpZF0gPSB3b3JrZXJUaWxlO1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByYXdUaWxlRGF0YSA9IHJlc3BvbnNlLnJhd0RhdGE7XG4gICAgICAgICAgICBjb25zdCBjYWNoZUNvbnRyb2wgPSB7fTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5leHBpcmVzKSBjYWNoZUNvbnRyb2wuZXhwaXJlcyA9IHJlc3BvbnNlLmV4cGlyZXM7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuY2FjaGVDb250cm9sKSBjYWNoZUNvbnRyb2wuY2FjaGVDb250cm9sID0gcmVzcG9uc2UuY2FjaGVDb250cm9sO1xuXG4gICAgICAgICAgICBjb25zdCByZXNvdXJjZVRpbWluZyA9IHt9O1xuICAgICAgICAgICAgaWYgKHBlcmYpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNvdXJjZVRpbWluZ0RhdGEgPSBwZXJmLmZpbmlzaCgpO1xuICAgICAgICAgICAgICAgIC8vIGl0J3MgbmVjZXNzYXJ5IHRvIGV2YWwgdGhlIHJlc3VsdCBvZiBnZXRFbnRyaWVzQnlOYW1lKCkgaGVyZSB2aWEgcGFyc2Uvc3RyaW5naWZ5XG4gICAgICAgICAgICAgICAgLy8gbGF0ZSBldmFsdWF0aW9uIGluIHRoZSBtYWluIHRocmVhZCBjYXVzZXMgVHlwZUVycm9yOiBpbGxlZ2FsIGludm9jYXRpb25cbiAgICAgICAgICAgICAgICBpZiAocmVzb3VyY2VUaW1pbmdEYXRhKVxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZVRpbWluZy5yZXNvdXJjZVRpbWluZyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocmVzb3VyY2VUaW1pbmdEYXRhKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHdvcmtlclRpbGUudmVjdG9yVGlsZSA9IHJlc3BvbnNlLnZlY3RvclRpbGU7XG4gICAgICAgICAgICB3b3JrZXJUaWxlLnBhcnNlKHJlc3BvbnNlLnZlY3RvclRpbGUsIHRoaXMubGF5ZXJJbmRleCwgdGhpcy5hdmFpbGFibGVJbWFnZXMsIHRoaXMuYWN0b3IsIChlcnIsIHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIgfHwgIXJlc3VsdCkgcmV0dXJuIGNhbGxiYWNrKGVycik7XG5cbiAgICAgICAgICAgICAgICAvLyBUcmFuc2ZlcnJpbmcgYSBjb3B5IG9mIHJhd1RpbGVEYXRhIGJlY2F1c2UgdGhlIHdvcmtlciBuZWVkcyB0byByZXRhaW4gaXRzIGNvcHkuXG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgZXh0ZW5kKHtyYXdUaWxlRGF0YTogcmF3VGlsZURhdGEuc2xpY2UoMCl9LCByZXN1bHQsIGNhY2hlQ29udHJvbCwgcmVzb3VyY2VUaW1pbmcpKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmxvYWRlZCA9IHRoaXMubG9hZGVkIHx8IHt9O1xuICAgICAgICAgICAgdGhpcy5sb2FkZWRbdWlkXSA9IHdvcmtlclRpbGU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEltcGxlbWVudHMge0BsaW5rIFdvcmtlclNvdXJjZSNyZWxvYWRUaWxlfS5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHJlbG9hZFRpbGUocGFyYW1zOiBXb3JrZXJUaWxlUGFyYW1ldGVycywgY2FsbGJhY2s6IFdvcmtlclRpbGVDYWxsYmFjaykge1xuICAgICAgICBjb25zdCBsb2FkZWQgPSB0aGlzLmxvYWRlZCxcbiAgICAgICAgICAgIHVpZCA9IHBhcmFtcy51aWQsXG4gICAgICAgICAgICB2dFNvdXJjZSA9IHRoaXM7XG4gICAgICAgIGlmIChsb2FkZWQgJiYgbG9hZGVkW3VpZF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHdvcmtlclRpbGUgPSBsb2FkZWRbdWlkXTtcbiAgICAgICAgICAgIHdvcmtlclRpbGUuc2hvd0NvbGxpc2lvbkJveGVzID0gcGFyYW1zLnNob3dDb2xsaXNpb25Cb3hlcztcblxuICAgICAgICAgICAgY29uc3QgZG9uZSA9IChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWxvYWRDYWxsYmFjayA9IHdvcmtlclRpbGUucmVsb2FkQ2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgaWYgKHJlbG9hZENhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB3b3JrZXJUaWxlLnJlbG9hZENhbGxiYWNrO1xuICAgICAgICAgICAgICAgICAgICB3b3JrZXJUaWxlLnBhcnNlKHdvcmtlclRpbGUudmVjdG9yVGlsZSwgdnRTb3VyY2UubGF5ZXJJbmRleCwgdGhpcy5hdmFpbGFibGVJbWFnZXMsIHZ0U291cmNlLmFjdG9yLCByZWxvYWRDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVyciwgZGF0YSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAod29ya2VyVGlsZS5zdGF0dXMgPT09ICdwYXJzaW5nJykge1xuICAgICAgICAgICAgICAgIHdvcmtlclRpbGUucmVsb2FkQ2FsbGJhY2sgPSBkb25lO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh3b3JrZXJUaWxlLnN0YXR1cyA9PT0gJ2RvbmUnKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUgd2FzIG5vIHZlY3RvciB0aWxlIGRhdGEgb24gdGhlIGluaXRpYWwgbG9hZCwgZG9uJ3QgdHJ5IGFuZCByZS1wYXJzZSB0aWxlXG4gICAgICAgICAgICAgICAgaWYgKHdvcmtlclRpbGUudmVjdG9yVGlsZSkge1xuICAgICAgICAgICAgICAgICAgICB3b3JrZXJUaWxlLnBhcnNlKHdvcmtlclRpbGUudmVjdG9yVGlsZSwgdGhpcy5sYXllckluZGV4LCB0aGlzLmF2YWlsYWJsZUltYWdlcywgdGhpcy5hY3RvciwgZG9uZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEltcGxlbWVudHMge0BsaW5rIFdvcmtlclNvdXJjZSNhYm9ydFRpbGV9LlxuICAgICAqXG4gICAgICogQHBhcmFtIHBhcmFtc1xuICAgICAqIEBwYXJhbSBwYXJhbXMudWlkIFRoZSBVSUQgZm9yIHRoaXMgdGlsZS5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGFib3J0VGlsZShwYXJhbXM6IFRpbGVQYXJhbWV0ZXJzLCBjYWxsYmFjazogV29ya2VyVGlsZUNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IGxvYWRpbmcgPSB0aGlzLmxvYWRpbmcsXG4gICAgICAgICAgICB1aWQgPSBwYXJhbXMudWlkO1xuICAgICAgICBpZiAobG9hZGluZyAmJiBsb2FkaW5nW3VpZF0gJiYgbG9hZGluZ1t1aWRdLmFib3J0KSB7XG4gICAgICAgICAgICBsb2FkaW5nW3VpZF0uYWJvcnQoKTtcbiAgICAgICAgICAgIGRlbGV0ZSBsb2FkaW5nW3VpZF07XG4gICAgICAgIH1cbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbXBsZW1lbnRzIHtAbGluayBXb3JrZXJTb3VyY2UjcmVtb3ZlVGlsZX0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGFyYW1zXG4gICAgICogQHBhcmFtIHBhcmFtcy51aWQgVGhlIFVJRCBmb3IgdGhpcyB0aWxlLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcmVtb3ZlVGlsZShwYXJhbXM6IFRpbGVQYXJhbWV0ZXJzLCBjYWxsYmFjazogV29ya2VyVGlsZUNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IGxvYWRlZCA9IHRoaXMubG9hZGVkLFxuICAgICAgICAgICAgdWlkID0gcGFyYW1zLnVpZDtcbiAgICAgICAgaWYgKGxvYWRlZCAmJiBsb2FkZWRbdWlkXSkge1xuICAgICAgICAgICAgZGVsZXRlIGxvYWRlZFt1aWRdO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWZWN0b3JUaWxlV29ya2VyU291cmNlO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IERFTURhdGEgZnJvbSAnLi4vZGF0YS9kZW1fZGF0YSc7XG5pbXBvcnQge1JHQkFJbWFnZX0gZnJvbSAnLi4vdXRpbC9pbWFnZSc7XG5pbXBvcnQgd2luZG93IGZyb20gJy4uL3V0aWwvd2luZG93JztcblxuaW1wb3J0IHR5cGUgQWN0b3IgZnJvbSAnLi4vdXRpbC9hY3Rvcic7XG5pbXBvcnQgdHlwZSB7XG4gICAgV29ya2VyREVNVGlsZVBhcmFtZXRlcnMsXG4gICAgV29ya2VyREVNVGlsZUNhbGxiYWNrLFxuICAgIFRpbGVQYXJhbWV0ZXJzXG59IGZyb20gJy4vd29ya2VyX3NvdXJjZSc7XG5jb25zdCB7SW1hZ2VCaXRtYXB9ID0gd2luZG93O1xuXG5jbGFzcyBSYXN0ZXJERU1UaWxlV29ya2VyU291cmNlIHtcbiAgICBhY3RvcjogQWN0b3I7XG4gICAgbG9hZGVkOiB7W186IHN0cmluZ106IERFTURhdGF9O1xuICAgIG9mZnNjcmVlbkNhbnZhczogT2Zmc2NyZWVuQ2FudmFzO1xuICAgIG9mZnNjcmVlbkNhbnZhc0NvbnRleHQ6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmxvYWRlZCA9IHt9O1xuICAgIH1cblxuICAgIGxvYWRUaWxlKHBhcmFtczogV29ya2VyREVNVGlsZVBhcmFtZXRlcnMsIGNhbGxiYWNrOiBXb3JrZXJERU1UaWxlQ2FsbGJhY2spIHtcbiAgICAgICAgY29uc3Qge3VpZCwgZW5jb2RpbmcsIHJhd0ltYWdlRGF0YX0gPSBwYXJhbXM7XG4gICAgICAgIC8vIE1haW4gdGhyZWFkIHdpbGwgdHJhbnNmZXIgSW1hZ2VCaXRtYXAgaWYgb2Zmc2NyZWVuIGRlY29kZSB3aXRoIE9mZnNjcmVlbkNhbnZhcyBpcyBzdXBwb3J0ZWQsIGVsc2UgaXQgd2lsbCB0cmFuc2ZlciBhbiBhbHJlYWR5IGRlY29kZWQgaW1hZ2UuXG4gICAgICAgIGNvbnN0IGltYWdlUGl4ZWxzID0gKEltYWdlQml0bWFwICYmIHJhd0ltYWdlRGF0YSBpbnN0YW5jZW9mIEltYWdlQml0bWFwKSA/IHRoaXMuZ2V0SW1hZ2VEYXRhKHJhd0ltYWdlRGF0YSkgOiByYXdJbWFnZURhdGE7XG4gICAgICAgIGNvbnN0IGRlbSA9IG5ldyBERU1EYXRhKHVpZCwgaW1hZ2VQaXhlbHMsIGVuY29kaW5nKTtcbiAgICAgICAgdGhpcy5sb2FkZWQgPSB0aGlzLmxvYWRlZCB8fCB7fTtcbiAgICAgICAgdGhpcy5sb2FkZWRbdWlkXSA9IGRlbTtcbiAgICAgICAgY2FsbGJhY2sobnVsbCwgZGVtKTtcbiAgICB9XG5cbiAgICBnZXRJbWFnZURhdGEoaW1nQml0bWFwOiBJbWFnZUJpdG1hcCk6IFJHQkFJbWFnZSB7XG4gICAgICAgIC8vIExhemlseSBpbml0aWFsaXplIE9mZnNjcmVlbkNhbnZhc1xuICAgICAgICBpZiAoIXRoaXMub2Zmc2NyZWVuQ2FudmFzIHx8ICF0aGlzLm9mZnNjcmVlbkNhbnZhc0NvbnRleHQpIHtcbiAgICAgICAgICAgIC8vIERlbSB0aWxlcyBhcmUgdHlwaWNhbGx5IDI1NngyNTZcbiAgICAgICAgICAgIHRoaXMub2Zmc2NyZWVuQ2FudmFzID0gbmV3IE9mZnNjcmVlbkNhbnZhcyhpbWdCaXRtYXAud2lkdGgsIGltZ0JpdG1hcC5oZWlnaHQpO1xuICAgICAgICAgICAgdGhpcy5vZmZzY3JlZW5DYW52YXNDb250ZXh0ID0gdGhpcy5vZmZzY3JlZW5DYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub2Zmc2NyZWVuQ2FudmFzLndpZHRoID0gaW1nQml0bWFwLndpZHRoO1xuICAgICAgICB0aGlzLm9mZnNjcmVlbkNhbnZhcy5oZWlnaHQgPSBpbWdCaXRtYXAuaGVpZ2h0O1xuXG4gICAgICAgIHRoaXMub2Zmc2NyZWVuQ2FudmFzQ29udGV4dC5kcmF3SW1hZ2UoaW1nQml0bWFwLCAwLCAwLCBpbWdCaXRtYXAud2lkdGgsIGltZ0JpdG1hcC5oZWlnaHQpO1xuICAgICAgICAvLyBJbnNlcnQgYW4gYWRkaXRpb25hbCAxcHggcGFkZGluZyBhcm91bmQgdGhlIGltYWdlIHRvIGFsbG93IGJhY2tmaWxsaW5nIGZvciBuZWlnaGJvcmluZyBkYXRhLlxuICAgICAgICBjb25zdCBpbWdEYXRhID0gdGhpcy5vZmZzY3JlZW5DYW52YXNDb250ZXh0LmdldEltYWdlRGF0YSgtMSwgLTEsIGltZ0JpdG1hcC53aWR0aCArIDIsIGltZ0JpdG1hcC5oZWlnaHQgKyAyKTtcbiAgICAgICAgdGhpcy5vZmZzY3JlZW5DYW52YXNDb250ZXh0LmNsZWFyUmVjdCgwLCAwLCB0aGlzLm9mZnNjcmVlbkNhbnZhcy53aWR0aCwgdGhpcy5vZmZzY3JlZW5DYW52YXMuaGVpZ2h0KTtcbiAgICAgICAgcmV0dXJuIG5ldyBSR0JBSW1hZ2Uoe3dpZHRoOiBpbWdEYXRhLndpZHRoLCBoZWlnaHQ6IGltZ0RhdGEuaGVpZ2h0fSwgaW1nRGF0YS5kYXRhKTtcbiAgICB9XG5cbiAgICByZW1vdmVUaWxlKHBhcmFtczogVGlsZVBhcmFtZXRlcnMpIHtcbiAgICAgICAgY29uc3QgbG9hZGVkID0gdGhpcy5sb2FkZWQsXG4gICAgICAgICAgICB1aWQgPSBwYXJhbXMudWlkO1xuICAgICAgICBpZiAobG9hZGVkICYmIGxvYWRlZFt1aWRdKSB7XG4gICAgICAgICAgICBkZWxldGUgbG9hZGVkW3VpZF07XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJhc3RlckRFTVRpbGVXb3JrZXJTb3VyY2U7XG4iLCJcbm1vZHVsZS5leHBvcnRzID0gcmV3aW5kO1xuXG5mdW5jdGlvbiByZXdpbmQoZ2osIG91dGVyKSB7XG4gICAgdmFyIHR5cGUgPSBnaiAmJiBnai50eXBlLCBpO1xuXG4gICAgaWYgKHR5cGUgPT09ICdGZWF0dXJlQ29sbGVjdGlvbicpIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGdqLmZlYXR1cmVzLmxlbmd0aDsgaSsrKSByZXdpbmQoZ2ouZmVhdHVyZXNbaV0sIG91dGVyKTtcblxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ0dlb21ldHJ5Q29sbGVjdGlvbicpIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGdqLmdlb21ldHJpZXMubGVuZ3RoOyBpKyspIHJld2luZChnai5nZW9tZXRyaWVzW2ldLCBvdXRlcik7XG5cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdGZWF0dXJlJykge1xuICAgICAgICByZXdpbmQoZ2ouZ2VvbWV0cnksIG91dGVyKTtcblxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ1BvbHlnb24nKSB7XG4gICAgICAgIHJld2luZFJpbmdzKGdqLmNvb3JkaW5hdGVzLCBvdXRlcik7XG5cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdNdWx0aVBvbHlnb24nKSB7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBnai5jb29yZGluYXRlcy5sZW5ndGg7IGkrKykgcmV3aW5kUmluZ3MoZ2ouY29vcmRpbmF0ZXNbaV0sIG91dGVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2o7XG59XG5cbmZ1bmN0aW9uIHJld2luZFJpbmdzKHJpbmdzLCBvdXRlcikge1xuICAgIGlmIChyaW5ncy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgIHJld2luZFJpbmcocmluZ3NbMF0sIG91dGVyKTtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHJpbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJld2luZFJpbmcocmluZ3NbaV0sICFvdXRlcik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiByZXdpbmRSaW5nKHJpbmcsIGRpcikge1xuICAgIHZhciBhcmVhID0gMDtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gcmluZy5sZW5ndGgsIGogPSBsZW4gLSAxOyBpIDwgbGVuOyBqID0gaSsrKSB7XG4gICAgICAgIGFyZWEgKz0gKHJpbmdbaV1bMF0gLSByaW5nW2pdWzBdKSAqIChyaW5nW2pdWzFdICsgcmluZ1tpXVsxXSk7XG4gICAgfVxuICAgIGlmIChhcmVhID49IDAgIT09ICEhZGlyKSByaW5nLnJldmVyc2UoKTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcblxuaW1wb3J0IG12dCBmcm9tICdAbWFwYm94L3ZlY3Rvci10aWxlJztcbmNvbnN0IHRvR2VvSlNPTiA9IG12dC5WZWN0b3JUaWxlRmVhdHVyZS5wcm90b3R5cGUudG9HZW9KU09OO1xuaW1wb3J0IEVYVEVOVCBmcm9tICcuLi9kYXRhL2V4dGVudCc7XG5cbi8vIFRoZSBmZWF0dXJlIHR5cGUgdXNlZCBieSBnZW9qc29uLXZ0IGFuZCBzdXBlcmNsdXN0ZXIuIFNob3VsZCBiZSBleHRyYWN0ZWQgdG9cbi8vIGdsb2JhbCB0eXBlIGFuZCB1c2VkIGluIG1vZHVsZSBkZWZpbml0aW9ucyBmb3IgdGhvc2UgdHdvIG1vZHVsZXMuXG50eXBlIEZlYXR1cmUgPSB7XG4gICAgdHlwZTogMSxcbiAgICBpZDogbWl4ZWQsXG4gICAgdGFnczoge1tfOiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFufSxcbiAgICBnZW9tZXRyeTogQXJyYXk8W251bWJlciwgbnVtYmVyXT4sXG59IHwge1xuICAgIHR5cGU6IDIgfCAzLFxuICAgIGlkOiBtaXhlZCxcbiAgICB0YWdzOiB7W186IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW59LFxuICAgIGdlb21ldHJ5OiBBcnJheTxBcnJheTxbbnVtYmVyLCBudW1iZXJdPj4sXG59XG5cbmNsYXNzIEZlYXR1cmVXcmFwcGVyIGltcGxlbWVudHMgVmVjdG9yVGlsZUZlYXR1cmUge1xuICAgIF9mZWF0dXJlOiBGZWF0dXJlO1xuXG4gICAgZXh0ZW50OiBudW1iZXI7XG4gICAgdHlwZTogMSB8IDIgfCAzO1xuICAgIGlkOiBudW1iZXI7XG4gICAgcHJvcGVydGllczoge1tfOiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFufTtcblxuICAgIGNvbnN0cnVjdG9yKGZlYXR1cmU6IEZlYXR1cmUpIHtcbiAgICAgICAgdGhpcy5fZmVhdHVyZSA9IGZlYXR1cmU7XG5cbiAgICAgICAgdGhpcy5leHRlbnQgPSBFWFRFTlQ7XG4gICAgICAgIHRoaXMudHlwZSA9IGZlYXR1cmUudHlwZTtcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gZmVhdHVyZS50YWdzO1xuXG4gICAgICAgIC8vIElmIHRoZSBmZWF0dXJlIGhhcyBhIHRvcC1sZXZlbCBgaWRgIHByb3BlcnR5LCBjb3B5IGl0IG92ZXIsIGJ1dCBvbmx5XG4gICAgICAgIC8vIGlmIGl0IGNhbiBiZSBjb2VyY2VkIHRvIGFuIGludGVnZXIsIGJlY2F1c2UgdGhpcyB3cmFwcGVyIGlzIHVzZWQgZm9yXG4gICAgICAgIC8vIHNlcmlhbGl6aW5nIGdlb2pzb24gZmVhdHVyZSBkYXRhIGludG8gdmVjdG9yIHRpbGUgUEJGIGRhdGEsIGFuZCB0aGVcbiAgICAgICAgLy8gdmVjdG9yIHRpbGUgc3BlYyBvbmx5IHN1cHBvcnRzIGludGVnZXIgdmFsdWVzIGZvciBmZWF0dXJlIGlkcyAtLVxuICAgICAgICAvLyBhbGxvd2luZyBub24taW50ZWdlciB2YWx1ZXMgaGVyZSByZXN1bHRzIGluIGEgbm9uLWNvbXBsaWFudCBQQkZcbiAgICAgICAgLy8gdGhhdCBjYXVzZXMgYW4gZXhjZXB0aW9uIHdoZW4gaXQgaXMgcGFyc2VkIHdpdGggdmVjdG9yLXRpbGUtanNcbiAgICAgICAgaWYgKCdpZCcgaW4gZmVhdHVyZSAmJiAhaXNOYU4oZmVhdHVyZS5pZCkpIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSBwYXJzZUludChmZWF0dXJlLmlkLCAxMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsb2FkR2VvbWV0cnkoKSB7XG4gICAgICAgIGlmICh0aGlzLl9mZWF0dXJlLnR5cGUgPT09IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGdlb21ldHJ5ID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBvaW50IG9mIHRoaXMuX2ZlYXR1cmUuZ2VvbWV0cnkpIHtcbiAgICAgICAgICAgICAgICBnZW9tZXRyeS5wdXNoKFtuZXcgUG9pbnQocG9pbnRbMF0sIHBvaW50WzFdKV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGdlb21ldHJ5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZ2VvbWV0cnkgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmluZyBvZiB0aGlzLl9mZWF0dXJlLmdlb21ldHJ5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3UmluZyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcG9pbnQgb2YgcmluZykge1xuICAgICAgICAgICAgICAgICAgICBuZXdSaW5nLnB1c2gobmV3IFBvaW50KHBvaW50WzBdLCBwb2ludFsxXSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBnZW9tZXRyeS5wdXNoKG5ld1JpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGdlb21ldHJ5O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdG9HZW9KU09OKHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRvR2VvSlNPTi5jYWxsKHRoaXMsIHgsIHksIHopO1xuICAgIH1cbn1cblxuY2xhc3MgR2VvSlNPTldyYXBwZXIgaW1wbGVtZW50cyBWZWN0b3JUaWxlLCBWZWN0b3JUaWxlTGF5ZXIge1xuICAgIGxheWVyczoge1tfOiBzdHJpbmddOiBWZWN0b3JUaWxlTGF5ZXJ9O1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBleHRlbnQ6IG51bWJlcjtcbiAgICBsZW5ndGg6IG51bWJlcjtcbiAgICBfZmVhdHVyZXM6IEFycmF5PEZlYXR1cmU+O1xuXG4gICAgY29uc3RydWN0b3IoZmVhdHVyZXM6IEFycmF5PEZlYXR1cmU+KSB7XG4gICAgICAgIHRoaXMubGF5ZXJzID0geydfZ2VvanNvblRpbGVMYXllcic6IHRoaXN9O1xuICAgICAgICB0aGlzLm5hbWUgPSAnX2dlb2pzb25UaWxlTGF5ZXInO1xuICAgICAgICB0aGlzLmV4dGVudCA9IEVYVEVOVDtcbiAgICAgICAgdGhpcy5sZW5ndGggPSBmZWF0dXJlcy5sZW5ndGg7XG4gICAgICAgIHRoaXMuX2ZlYXR1cmVzID0gZmVhdHVyZXM7XG4gICAgfVxuXG4gICAgZmVhdHVyZShpOiBudW1iZXIpOiBWZWN0b3JUaWxlRmVhdHVyZSB7XG4gICAgICAgIHJldHVybiBuZXcgRmVhdHVyZVdyYXBwZXIodGhpcy5fZmVhdHVyZXNbaV0pO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgR2VvSlNPTldyYXBwZXI7XG4iLCIndXNlIHN0cmljdCdcblxudmFyIFBvaW50ID0gcmVxdWlyZSgnQG1hcGJveC9wb2ludC1nZW9tZXRyeScpXG52YXIgVmVjdG9yVGlsZUZlYXR1cmUgPSByZXF1aXJlKCdAbWFwYm94L3ZlY3Rvci10aWxlJykuVmVjdG9yVGlsZUZlYXR1cmVcblxubW9kdWxlLmV4cG9ydHMgPSBHZW9KU09OV3JhcHBlclxuXG4vLyBjb25mb3JtIHRvIHZlY3RvcnRpbGUgYXBpXG5mdW5jdGlvbiBHZW9KU09OV3JhcHBlciAoZmVhdHVyZXMsIG9wdGlvbnMpIHtcbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuICB0aGlzLmZlYXR1cmVzID0gZmVhdHVyZXNcbiAgdGhpcy5sZW5ndGggPSBmZWF0dXJlcy5sZW5ndGhcbn1cblxuR2VvSlNPTldyYXBwZXIucHJvdG90eXBlLmZlYXR1cmUgPSBmdW5jdGlvbiAoaSkge1xuICByZXR1cm4gbmV3IEZlYXR1cmVXcmFwcGVyKHRoaXMuZmVhdHVyZXNbaV0sIHRoaXMub3B0aW9ucy5leHRlbnQpXG59XG5cbmZ1bmN0aW9uIEZlYXR1cmVXcmFwcGVyIChmZWF0dXJlLCBleHRlbnQpIHtcbiAgdGhpcy5pZCA9IHR5cGVvZiBmZWF0dXJlLmlkID09PSAnbnVtYmVyJyA/IGZlYXR1cmUuaWQgOiB1bmRlZmluZWRcbiAgdGhpcy50eXBlID0gZmVhdHVyZS50eXBlXG4gIHRoaXMucmF3R2VvbWV0cnkgPSBmZWF0dXJlLnR5cGUgPT09IDEgPyBbZmVhdHVyZS5nZW9tZXRyeV0gOiBmZWF0dXJlLmdlb21ldHJ5XG4gIHRoaXMucHJvcGVydGllcyA9IGZlYXR1cmUudGFnc1xuICB0aGlzLmV4dGVudCA9IGV4dGVudCB8fCA0MDk2XG59XG5cbkZlYXR1cmVXcmFwcGVyLnByb3RvdHlwZS5sb2FkR2VvbWV0cnkgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciByaW5ncyA9IHRoaXMucmF3R2VvbWV0cnlcbiAgdGhpcy5nZW9tZXRyeSA9IFtdXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByaW5ncy5sZW5ndGg7IGkrKykge1xuICAgIHZhciByaW5nID0gcmluZ3NbaV1cbiAgICB2YXIgbmV3UmluZyA9IFtdXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCByaW5nLmxlbmd0aDsgaisrKSB7XG4gICAgICBuZXdSaW5nLnB1c2gobmV3IFBvaW50KHJpbmdbal1bMF0sIHJpbmdbal1bMV0pKVxuICAgIH1cbiAgICB0aGlzLmdlb21ldHJ5LnB1c2gobmV3UmluZylcbiAgfVxuICByZXR1cm4gdGhpcy5nZW9tZXRyeVxufVxuXG5GZWF0dXJlV3JhcHBlci5wcm90b3R5cGUuYmJveCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKCF0aGlzLmdlb21ldHJ5KSB0aGlzLmxvYWRHZW9tZXRyeSgpXG5cbiAgdmFyIHJpbmdzID0gdGhpcy5nZW9tZXRyeVxuICB2YXIgeDEgPSBJbmZpbml0eVxuICB2YXIgeDIgPSAtSW5maW5pdHlcbiAgdmFyIHkxID0gSW5maW5pdHlcbiAgdmFyIHkyID0gLUluZmluaXR5XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByaW5ncy5sZW5ndGg7IGkrKykge1xuICAgIHZhciByaW5nID0gcmluZ3NbaV1cblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgcmluZy5sZW5ndGg7IGorKykge1xuICAgICAgdmFyIGNvb3JkID0gcmluZ1tqXVxuXG4gICAgICB4MSA9IE1hdGgubWluKHgxLCBjb29yZC54KVxuICAgICAgeDIgPSBNYXRoLm1heCh4MiwgY29vcmQueClcbiAgICAgIHkxID0gTWF0aC5taW4oeTEsIGNvb3JkLnkpXG4gICAgICB5MiA9IE1hdGgubWF4KHkyLCBjb29yZC55KVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBbeDEsIHkxLCB4MiwgeTJdXG59XG5cbkZlYXR1cmVXcmFwcGVyLnByb3RvdHlwZS50b0dlb0pTT04gPSBWZWN0b3JUaWxlRmVhdHVyZS5wcm90b3R5cGUudG9HZW9KU09OXG4iLCJ2YXIgUGJmID0gcmVxdWlyZSgncGJmJylcbnZhciBHZW9KU09OV3JhcHBlciA9IHJlcXVpcmUoJy4vbGliL2dlb2pzb25fd3JhcHBlcicpXG5cbm1vZHVsZS5leHBvcnRzID0gZnJvbVZlY3RvclRpbGVKc1xubW9kdWxlLmV4cG9ydHMuZnJvbVZlY3RvclRpbGVKcyA9IGZyb21WZWN0b3JUaWxlSnNcbm1vZHVsZS5leHBvcnRzLmZyb21HZW9qc29uVnQgPSBmcm9tR2VvanNvblZ0XG5tb2R1bGUuZXhwb3J0cy5HZW9KU09OV3JhcHBlciA9IEdlb0pTT05XcmFwcGVyXG5cbi8qKlxuICogU2VyaWFsaXplIGEgdmVjdG9yLXRpbGUtanMtY3JlYXRlZCB0aWxlIHRvIHBiZlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB0aWxlXG4gKiBAcmV0dXJuIHtCdWZmZXJ9IHVuY29tcHJlc3NlZCwgcGJmLXNlcmlhbGl6ZWQgdGlsZSBkYXRhXG4gKi9cbmZ1bmN0aW9uIGZyb21WZWN0b3JUaWxlSnMgKHRpbGUpIHtcbiAgdmFyIG91dCA9IG5ldyBQYmYoKVxuICB3cml0ZVRpbGUodGlsZSwgb3V0KVxuICByZXR1cm4gb3V0LmZpbmlzaCgpXG59XG5cbi8qKlxuICogU2VyaWFsaXplZCBhIGdlb2pzb24tdnQtY3JlYXRlZCB0aWxlIHRvIHBiZi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gbGF5ZXJzIC0gQW4gb2JqZWN0IG1hcHBpbmcgbGF5ZXIgbmFtZXMgdG8gZ2VvanNvbi12dC1jcmVhdGVkIHZlY3RvciB0aWxlIG9iamVjdHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBBbiBvYmplY3Qgc3BlY2lmeWluZyB0aGUgdmVjdG9yLXRpbGUgc3BlY2lmaWNhdGlvbiB2ZXJzaW9uIGFuZCBleHRlbnQgdGhhdCB3ZXJlIHVzZWQgdG8gY3JlYXRlIGBsYXllcnNgLlxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLnZlcnNpb249MV0gLSBWZXJzaW9uIG9mIHZlY3Rvci10aWxlIHNwZWMgdXNlZFxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLmV4dGVudD00MDk2XSAtIEV4dGVudCBvZiB0aGUgdmVjdG9yIHRpbGVcbiAqIEByZXR1cm4ge0J1ZmZlcn0gdW5jb21wcmVzc2VkLCBwYmYtc2VyaWFsaXplZCB0aWxlIGRhdGFcbiAqL1xuZnVuY3Rpb24gZnJvbUdlb2pzb25WdCAobGF5ZXJzLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG4gIHZhciBsID0ge31cbiAgZm9yICh2YXIgayBpbiBsYXllcnMpIHtcbiAgICBsW2tdID0gbmV3IEdlb0pTT05XcmFwcGVyKGxheWVyc1trXS5mZWF0dXJlcywgb3B0aW9ucylcbiAgICBsW2tdLm5hbWUgPSBrXG4gICAgbFtrXS52ZXJzaW9uID0gb3B0aW9ucy52ZXJzaW9uXG4gICAgbFtrXS5leHRlbnQgPSBvcHRpb25zLmV4dGVudFxuICB9XG4gIHJldHVybiBmcm9tVmVjdG9yVGlsZUpzKHtsYXllcnM6IGx9KVxufVxuXG5mdW5jdGlvbiB3cml0ZVRpbGUgKHRpbGUsIHBiZikge1xuICBmb3IgKHZhciBrZXkgaW4gdGlsZS5sYXllcnMpIHtcbiAgICBwYmYud3JpdGVNZXNzYWdlKDMsIHdyaXRlTGF5ZXIsIHRpbGUubGF5ZXJzW2tleV0pXG4gIH1cbn1cblxuZnVuY3Rpb24gd3JpdGVMYXllciAobGF5ZXIsIHBiZikge1xuICBwYmYud3JpdGVWYXJpbnRGaWVsZCgxNSwgbGF5ZXIudmVyc2lvbiB8fCAxKVxuICBwYmYud3JpdGVTdHJpbmdGaWVsZCgxLCBsYXllci5uYW1lIHx8ICcnKVxuICBwYmYud3JpdGVWYXJpbnRGaWVsZCg1LCBsYXllci5leHRlbnQgfHwgNDA5NilcblxuICB2YXIgaVxuICB2YXIgY29udGV4dCA9IHtcbiAgICBrZXlzOiBbXSxcbiAgICB2YWx1ZXM6IFtdLFxuICAgIGtleWNhY2hlOiB7fSxcbiAgICB2YWx1ZWNhY2hlOiB7fVxuICB9XG5cbiAgZm9yIChpID0gMDsgaSA8IGxheWVyLmxlbmd0aDsgaSsrKSB7XG4gICAgY29udGV4dC5mZWF0dXJlID0gbGF5ZXIuZmVhdHVyZShpKVxuICAgIHBiZi53cml0ZU1lc3NhZ2UoMiwgd3JpdGVGZWF0dXJlLCBjb250ZXh0KVxuICB9XG5cbiAgdmFyIGtleXMgPSBjb250ZXh0LmtleXNcbiAgZm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBwYmYud3JpdGVTdHJpbmdGaWVsZCgzLCBrZXlzW2ldKVxuICB9XG5cbiAgdmFyIHZhbHVlcyA9IGNvbnRleHQudmFsdWVzXG4gIGZvciAoaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICBwYmYud3JpdGVNZXNzYWdlKDQsIHdyaXRlVmFsdWUsIHZhbHVlc1tpXSlcbiAgfVxufVxuXG5mdW5jdGlvbiB3cml0ZUZlYXR1cmUgKGNvbnRleHQsIHBiZikge1xuICB2YXIgZmVhdHVyZSA9IGNvbnRleHQuZmVhdHVyZVxuXG4gIGlmIChmZWF0dXJlLmlkICE9PSB1bmRlZmluZWQpIHtcbiAgICBwYmYud3JpdGVWYXJpbnRGaWVsZCgxLCBmZWF0dXJlLmlkKVxuICB9XG5cbiAgcGJmLndyaXRlTWVzc2FnZSgyLCB3cml0ZVByb3BlcnRpZXMsIGNvbnRleHQpXG4gIHBiZi53cml0ZVZhcmludEZpZWxkKDMsIGZlYXR1cmUudHlwZSlcbiAgcGJmLndyaXRlTWVzc2FnZSg0LCB3cml0ZUdlb21ldHJ5LCBmZWF0dXJlKVxufVxuXG5mdW5jdGlvbiB3cml0ZVByb3BlcnRpZXMgKGNvbnRleHQsIHBiZikge1xuICB2YXIgZmVhdHVyZSA9IGNvbnRleHQuZmVhdHVyZVxuICB2YXIga2V5cyA9IGNvbnRleHQua2V5c1xuICB2YXIgdmFsdWVzID0gY29udGV4dC52YWx1ZXNcbiAgdmFyIGtleWNhY2hlID0gY29udGV4dC5rZXljYWNoZVxuICB2YXIgdmFsdWVjYWNoZSA9IGNvbnRleHQudmFsdWVjYWNoZVxuXG4gIGZvciAodmFyIGtleSBpbiBmZWF0dXJlLnByb3BlcnRpZXMpIHtcbiAgICB2YXIga2V5SW5kZXggPSBrZXljYWNoZVtrZXldXG4gICAgaWYgKHR5cGVvZiBrZXlJbmRleCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGtleXMucHVzaChrZXkpXG4gICAgICBrZXlJbmRleCA9IGtleXMubGVuZ3RoIC0gMVxuICAgICAga2V5Y2FjaGVba2V5XSA9IGtleUluZGV4XG4gICAgfVxuICAgIHBiZi53cml0ZVZhcmludChrZXlJbmRleClcblxuICAgIHZhciB2YWx1ZSA9IGZlYXR1cmUucHJvcGVydGllc1trZXldXG4gICAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWVcbiAgICBpZiAodHlwZSAhPT0gJ3N0cmluZycgJiYgdHlwZSAhPT0gJ2Jvb2xlYW4nICYmIHR5cGUgIT09ICdudW1iZXInKSB7XG4gICAgICB2YWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKVxuICAgIH1cbiAgICB2YXIgdmFsdWVLZXkgPSB0eXBlICsgJzonICsgdmFsdWVcbiAgICB2YXIgdmFsdWVJbmRleCA9IHZhbHVlY2FjaGVbdmFsdWVLZXldXG4gICAgaWYgKHR5cGVvZiB2YWx1ZUluZGV4ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdmFsdWVzLnB1c2godmFsdWUpXG4gICAgICB2YWx1ZUluZGV4ID0gdmFsdWVzLmxlbmd0aCAtIDFcbiAgICAgIHZhbHVlY2FjaGVbdmFsdWVLZXldID0gdmFsdWVJbmRleFxuICAgIH1cbiAgICBwYmYud3JpdGVWYXJpbnQodmFsdWVJbmRleClcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21tYW5kIChjbWQsIGxlbmd0aCkge1xuICByZXR1cm4gKGxlbmd0aCA8PCAzKSArIChjbWQgJiAweDcpXG59XG5cbmZ1bmN0aW9uIHppZ3phZyAobnVtKSB7XG4gIHJldHVybiAobnVtIDw8IDEpIF4gKG51bSA+PiAzMSlcbn1cblxuZnVuY3Rpb24gd3JpdGVHZW9tZXRyeSAoZmVhdHVyZSwgcGJmKSB7XG4gIHZhciBnZW9tZXRyeSA9IGZlYXR1cmUubG9hZEdlb21ldHJ5KClcbiAgdmFyIHR5cGUgPSBmZWF0dXJlLnR5cGVcbiAgdmFyIHggPSAwXG4gIHZhciB5ID0gMFxuICB2YXIgcmluZ3MgPSBnZW9tZXRyeS5sZW5ndGhcbiAgZm9yICh2YXIgciA9IDA7IHIgPCByaW5nczsgcisrKSB7XG4gICAgdmFyIHJpbmcgPSBnZW9tZXRyeVtyXVxuICAgIHZhciBjb3VudCA9IDFcbiAgICBpZiAodHlwZSA9PT0gMSkge1xuICAgICAgY291bnQgPSByaW5nLmxlbmd0aFxuICAgIH1cbiAgICBwYmYud3JpdGVWYXJpbnQoY29tbWFuZCgxLCBjb3VudCkpIC8vIG1vdmV0b1xuICAgIC8vIGRvIG5vdCB3cml0ZSBwb2x5Z29uIGNsb3NpbmcgcGF0aCBhcyBsaW5ldG9cbiAgICB2YXIgbGluZUNvdW50ID0gdHlwZSA9PT0gMyA/IHJpbmcubGVuZ3RoIC0gMSA6IHJpbmcubGVuZ3RoXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lQ291bnQ7IGkrKykge1xuICAgICAgaWYgKGkgPT09IDEgJiYgdHlwZSAhPT0gMSkge1xuICAgICAgICBwYmYud3JpdGVWYXJpbnQoY29tbWFuZCgyLCBsaW5lQ291bnQgLSAxKSkgLy8gbGluZXRvXG4gICAgICB9XG4gICAgICB2YXIgZHggPSByaW5nW2ldLnggLSB4XG4gICAgICB2YXIgZHkgPSByaW5nW2ldLnkgLSB5XG4gICAgICBwYmYud3JpdGVWYXJpbnQoemlnemFnKGR4KSlcbiAgICAgIHBiZi53cml0ZVZhcmludCh6aWd6YWcoZHkpKVxuICAgICAgeCArPSBkeFxuICAgICAgeSArPSBkeVxuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gMykge1xuICAgICAgcGJmLndyaXRlVmFyaW50KGNvbW1hbmQoNywgMSkpIC8vIGNsb3NlcGF0aFxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB3cml0ZVZhbHVlICh2YWx1ZSwgcGJmKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlXG4gIGlmICh0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHBiZi53cml0ZVN0cmluZ0ZpZWxkKDEsIHZhbHVlKVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdib29sZWFuJykge1xuICAgIHBiZi53cml0ZUJvb2xlYW5GaWVsZCg3LCB2YWx1ZSlcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnbnVtYmVyJykge1xuICAgIGlmICh2YWx1ZSAlIDEgIT09IDApIHtcbiAgICAgIHBiZi53cml0ZURvdWJsZUZpZWxkKDMsIHZhbHVlKVxuICAgIH0gZWxzZSBpZiAodmFsdWUgPCAwKSB7XG4gICAgICBwYmYud3JpdGVTVmFyaW50RmllbGQoNiwgdmFsdWUpXG4gICAgfSBlbHNlIHtcbiAgICAgIHBiZi53cml0ZVZhcmludEZpZWxkKDUsIHZhbHVlKVxuICAgIH1cbiAgfVxufVxuIiwiXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzb3J0S0QoaWRzLCBjb29yZHMsIG5vZGVTaXplLCBsZWZ0LCByaWdodCwgZGVwdGgpIHtcbiAgICBpZiAocmlnaHQgLSBsZWZ0IDw9IG5vZGVTaXplKSByZXR1cm47XG5cbiAgICBjb25zdCBtID0gKGxlZnQgKyByaWdodCkgPj4gMTtcblxuICAgIHNlbGVjdChpZHMsIGNvb3JkcywgbSwgbGVmdCwgcmlnaHQsIGRlcHRoICUgMik7XG5cbiAgICBzb3J0S0QoaWRzLCBjb29yZHMsIG5vZGVTaXplLCBsZWZ0LCBtIC0gMSwgZGVwdGggKyAxKTtcbiAgICBzb3J0S0QoaWRzLCBjb29yZHMsIG5vZGVTaXplLCBtICsgMSwgcmlnaHQsIGRlcHRoICsgMSk7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdChpZHMsIGNvb3JkcywgaywgbGVmdCwgcmlnaHQsIGluYykge1xuXG4gICAgd2hpbGUgKHJpZ2h0ID4gbGVmdCkge1xuICAgICAgICBpZiAocmlnaHQgLSBsZWZ0ID4gNjAwKSB7XG4gICAgICAgICAgICBjb25zdCBuID0gcmlnaHQgLSBsZWZ0ICsgMTtcbiAgICAgICAgICAgIGNvbnN0IG0gPSBrIC0gbGVmdCArIDE7XG4gICAgICAgICAgICBjb25zdCB6ID0gTWF0aC5sb2cobik7XG4gICAgICAgICAgICBjb25zdCBzID0gMC41ICogTWF0aC5leHAoMiAqIHogLyAzKTtcbiAgICAgICAgICAgIGNvbnN0IHNkID0gMC41ICogTWF0aC5zcXJ0KHogKiBzICogKG4gLSBzKSAvIG4pICogKG0gLSBuIC8gMiA8IDAgPyAtMSA6IDEpO1xuICAgICAgICAgICAgY29uc3QgbmV3TGVmdCA9IE1hdGgubWF4KGxlZnQsIE1hdGguZmxvb3IoayAtIG0gKiBzIC8gbiArIHNkKSk7XG4gICAgICAgICAgICBjb25zdCBuZXdSaWdodCA9IE1hdGgubWluKHJpZ2h0LCBNYXRoLmZsb29yKGsgKyAobiAtIG0pICogcyAvIG4gKyBzZCkpO1xuICAgICAgICAgICAgc2VsZWN0KGlkcywgY29vcmRzLCBrLCBuZXdMZWZ0LCBuZXdSaWdodCwgaW5jKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHQgPSBjb29yZHNbMiAqIGsgKyBpbmNdO1xuICAgICAgICBsZXQgaSA9IGxlZnQ7XG4gICAgICAgIGxldCBqID0gcmlnaHQ7XG5cbiAgICAgICAgc3dhcEl0ZW0oaWRzLCBjb29yZHMsIGxlZnQsIGspO1xuICAgICAgICBpZiAoY29vcmRzWzIgKiByaWdodCArIGluY10gPiB0KSBzd2FwSXRlbShpZHMsIGNvb3JkcywgbGVmdCwgcmlnaHQpO1xuXG4gICAgICAgIHdoaWxlIChpIDwgaikge1xuICAgICAgICAgICAgc3dhcEl0ZW0oaWRzLCBjb29yZHMsIGksIGopO1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgai0tO1xuICAgICAgICAgICAgd2hpbGUgKGNvb3Jkc1syICogaSArIGluY10gPCB0KSBpKys7XG4gICAgICAgICAgICB3aGlsZSAoY29vcmRzWzIgKiBqICsgaW5jXSA+IHQpIGotLTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb29yZHNbMiAqIGxlZnQgKyBpbmNdID09PSB0KSBzd2FwSXRlbShpZHMsIGNvb3JkcywgbGVmdCwgaik7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaisrO1xuICAgICAgICAgICAgc3dhcEl0ZW0oaWRzLCBjb29yZHMsIGosIHJpZ2h0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChqIDw9IGspIGxlZnQgPSBqICsgMTtcbiAgICAgICAgaWYgKGsgPD0gaikgcmlnaHQgPSBqIC0gMTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHN3YXBJdGVtKGlkcywgY29vcmRzLCBpLCBqKSB7XG4gICAgc3dhcChpZHMsIGksIGopO1xuICAgIHN3YXAoY29vcmRzLCAyICogaSwgMiAqIGopO1xuICAgIHN3YXAoY29vcmRzLCAyICogaSArIDEsIDIgKiBqICsgMSk7XG59XG5cbmZ1bmN0aW9uIHN3YXAoYXJyLCBpLCBqKSB7XG4gICAgY29uc3QgdG1wID0gYXJyW2ldO1xuICAgIGFycltpXSA9IGFycltqXTtcbiAgICBhcnJbal0gPSB0bXA7XG59XG4iLCJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJhbmdlKGlkcywgY29vcmRzLCBtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZLCBub2RlU2l6ZSkge1xuICAgIGNvbnN0IHN0YWNrID0gWzAsIGlkcy5sZW5ndGggLSAxLCAwXTtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBsZXQgeCwgeTtcblxuICAgIHdoaWxlIChzdGFjay5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgYXhpcyA9IHN0YWNrLnBvcCgpO1xuICAgICAgICBjb25zdCByaWdodCA9IHN0YWNrLnBvcCgpO1xuICAgICAgICBjb25zdCBsZWZ0ID0gc3RhY2sucG9wKCk7XG5cbiAgICAgICAgaWYgKHJpZ2h0IC0gbGVmdCA8PSBub2RlU2l6ZSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGxlZnQ7IGkgPD0gcmlnaHQ7IGkrKykge1xuICAgICAgICAgICAgICAgIHggPSBjb29yZHNbMiAqIGldO1xuICAgICAgICAgICAgICAgIHkgPSBjb29yZHNbMiAqIGkgKyAxXTtcbiAgICAgICAgICAgICAgICBpZiAoeCA+PSBtaW5YICYmIHggPD0gbWF4WCAmJiB5ID49IG1pblkgJiYgeSA8PSBtYXhZKSByZXN1bHQucHVzaChpZHNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtID0gTWF0aC5mbG9vcigobGVmdCArIHJpZ2h0KSAvIDIpO1xuXG4gICAgICAgIHggPSBjb29yZHNbMiAqIG1dO1xuICAgICAgICB5ID0gY29vcmRzWzIgKiBtICsgMV07XG5cbiAgICAgICAgaWYgKHggPj0gbWluWCAmJiB4IDw9IG1heFggJiYgeSA+PSBtaW5ZICYmIHkgPD0gbWF4WSkgcmVzdWx0LnB1c2goaWRzW21dKTtcblxuICAgICAgICBjb25zdCBuZXh0QXhpcyA9IChheGlzICsgMSkgJSAyO1xuXG4gICAgICAgIGlmIChheGlzID09PSAwID8gbWluWCA8PSB4IDogbWluWSA8PSB5KSB7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGxlZnQpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChtIC0gMSk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKG5leHRBeGlzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXhpcyA9PT0gMCA/IG1heFggPj0geCA6IG1heFkgPj0geSkge1xuICAgICAgICAgICAgc3RhY2sucHVzaChtICsgMSk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKHJpZ2h0KTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gobmV4dEF4aXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsIlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gd2l0aGluKGlkcywgY29vcmRzLCBxeCwgcXksIHIsIG5vZGVTaXplKSB7XG4gICAgY29uc3Qgc3RhY2sgPSBbMCwgaWRzLmxlbmd0aCAtIDEsIDBdO1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGNvbnN0IHIyID0gciAqIHI7XG5cbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGF4aXMgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgY29uc3QgcmlnaHQgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgY29uc3QgbGVmdCA9IHN0YWNrLnBvcCgpO1xuXG4gICAgICAgIGlmIChyaWdodCAtIGxlZnQgPD0gbm9kZVNpemUpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBsZWZ0OyBpIDw9IHJpZ2h0OyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoc3FEaXN0KGNvb3Jkc1syICogaV0sIGNvb3Jkc1syICogaSArIDFdLCBxeCwgcXkpIDw9IHIyKSByZXN1bHQucHVzaChpZHNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtID0gTWF0aC5mbG9vcigobGVmdCArIHJpZ2h0KSAvIDIpO1xuXG4gICAgICAgIGNvbnN0IHggPSBjb29yZHNbMiAqIG1dO1xuICAgICAgICBjb25zdCB5ID0gY29vcmRzWzIgKiBtICsgMV07XG5cbiAgICAgICAgaWYgKHNxRGlzdCh4LCB5LCBxeCwgcXkpIDw9IHIyKSByZXN1bHQucHVzaChpZHNbbV0pO1xuXG4gICAgICAgIGNvbnN0IG5leHRBeGlzID0gKGF4aXMgKyAxKSAlIDI7XG5cbiAgICAgICAgaWYgKGF4aXMgPT09IDAgPyBxeCAtIHIgPD0geCA6IHF5IC0gciA8PSB5KSB7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGxlZnQpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChtIC0gMSk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKG5leHRBeGlzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXhpcyA9PT0gMCA/IHF4ICsgciA+PSB4IDogcXkgKyByID49IHkpIHtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gobSArIDEpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChyaWdodCk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKG5leHRBeGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHNxRGlzdChheCwgYXksIGJ4LCBieSkge1xuICAgIGNvbnN0IGR4ID0gYXggLSBieDtcbiAgICBjb25zdCBkeSA9IGF5IC0gYnk7XG4gICAgcmV0dXJuIGR4ICogZHggKyBkeSAqIGR5O1xufVxuIiwiXG5pbXBvcnQgc29ydCBmcm9tICcuL3NvcnQnO1xuaW1wb3J0IHJhbmdlIGZyb20gJy4vcmFuZ2UnO1xuaW1wb3J0IHdpdGhpbiBmcm9tICcuL3dpdGhpbic7XG5cbmNvbnN0IGRlZmF1bHRHZXRYID0gcCA9PiBwWzBdO1xuY29uc3QgZGVmYXVsdEdldFkgPSBwID0+IHBbMV07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEtEQnVzaCB7XG4gICAgY29uc3RydWN0b3IocG9pbnRzLCBnZXRYID0gZGVmYXVsdEdldFgsIGdldFkgPSBkZWZhdWx0R2V0WSwgbm9kZVNpemUgPSA2NCwgQXJyYXlUeXBlID0gRmxvYXQ2NEFycmF5KSB7XG4gICAgICAgIHRoaXMubm9kZVNpemUgPSBub2RlU2l6ZTtcbiAgICAgICAgdGhpcy5wb2ludHMgPSBwb2ludHM7XG5cbiAgICAgICAgY29uc3QgSW5kZXhBcnJheVR5cGUgPSBwb2ludHMubGVuZ3RoIDwgNjU1MzYgPyBVaW50MTZBcnJheSA6IFVpbnQzMkFycmF5O1xuXG4gICAgICAgIGNvbnN0IGlkcyA9IHRoaXMuaWRzID0gbmV3IEluZGV4QXJyYXlUeXBlKHBvaW50cy5sZW5ndGgpO1xuICAgICAgICBjb25zdCBjb29yZHMgPSB0aGlzLmNvb3JkcyA9IG5ldyBBcnJheVR5cGUocG9pbnRzLmxlbmd0aCAqIDIpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZHNbaV0gPSBpO1xuICAgICAgICAgICAgY29vcmRzWzIgKiBpXSA9IGdldFgocG9pbnRzW2ldKTtcbiAgICAgICAgICAgIGNvb3Jkc1syICogaSArIDFdID0gZ2V0WShwb2ludHNbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgc29ydChpZHMsIGNvb3Jkcywgbm9kZVNpemUsIDAsIGlkcy5sZW5ndGggLSAxLCAwKTtcbiAgICB9XG5cbiAgICByYW5nZShtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZKSB7XG4gICAgICAgIHJldHVybiByYW5nZSh0aGlzLmlkcywgdGhpcy5jb29yZHMsIG1pblgsIG1pblksIG1heFgsIG1heFksIHRoaXMubm9kZVNpemUpO1xuICAgIH1cblxuICAgIHdpdGhpbih4LCB5LCByKSB7XG4gICAgICAgIHJldHVybiB3aXRoaW4odGhpcy5pZHMsIHRoaXMuY29vcmRzLCB4LCB5LCByLCB0aGlzLm5vZGVTaXplKTtcbiAgICB9XG59XG4iLCJcbmltcG9ydCBLREJ1c2ggZnJvbSAna2RidXNoJztcblxuY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgbWluWm9vbTogMCwgICAvLyBtaW4gem9vbSB0byBnZW5lcmF0ZSBjbHVzdGVycyBvblxuICAgIG1heFpvb206IDE2LCAgLy8gbWF4IHpvb20gbGV2ZWwgdG8gY2x1c3RlciB0aGUgcG9pbnRzIG9uXG4gICAgcmFkaXVzOiA0MCwgICAvLyBjbHVzdGVyIHJhZGl1cyBpbiBwaXhlbHNcbiAgICBleHRlbnQ6IDUxMiwgIC8vIHRpbGUgZXh0ZW50IChyYWRpdXMgaXMgY2FsY3VsYXRlZCByZWxhdGl2ZSB0byBpdClcbiAgICBub2RlU2l6ZTogNjQsIC8vIHNpemUgb2YgdGhlIEtELXRyZWUgbGVhZiBub2RlLCBhZmZlY3RzIHBlcmZvcm1hbmNlXG4gICAgbG9nOiBmYWxzZSwgICAvLyB3aGV0aGVyIHRvIGxvZyB0aW1pbmcgaW5mb1xuXG4gICAgLy8gd2hldGhlciB0byBnZW5lcmF0ZSBudW1lcmljIGlkcyBmb3IgaW5wdXQgZmVhdHVyZXMgdGhhdCBkb24ndCBoYXZlIHRoZW1cbiAgICBnZW5lcmF0ZUlkOiBmYWxzZSxcblxuICAgIC8vIGEgcmVkdWNlIGZ1bmN0aW9uIGZvciBjYWxjdWxhdGluZyBjdXN0b20gY2x1c3RlciBwcm9wZXJ0aWVzXG4gICAgcmVkdWNlOiBudWxsLCAvLyAoYWNjdW11bGF0ZWQsIHByb3BzKSA9PiB7IGFjY3VtdWxhdGVkLnN1bSArPSBwcm9wcy5zdW07IH1cblxuICAgIC8vIHByb3BlcnRpZXMgdG8gdXNlIGZvciBpbmRpdmlkdWFsIHBvaW50cyB3aGVuIHJ1bm5pbmcgdGhlIHJlZHVjZXJcbiAgICBtYXA6IHByb3BzID0+IHByb3BzIC8vIHByb3BzID0+ICh7c3VtOiBwcm9wcy5teV92YWx1ZX0pXG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdXBlcmNsdXN0ZXIge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gZXh0ZW5kKE9iamVjdC5jcmVhdGUoZGVmYXVsdE9wdGlvbnMpLCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy50cmVlcyA9IG5ldyBBcnJheSh0aGlzLm9wdGlvbnMubWF4Wm9vbSArIDEpO1xuICAgIH1cblxuICAgIGxvYWQocG9pbnRzKSB7XG4gICAgICAgIGNvbnN0IHtsb2csIG1pblpvb20sIG1heFpvb20sIG5vZGVTaXplfSA9IHRoaXMub3B0aW9ucztcblxuICAgICAgICBpZiAobG9nKSBjb25zb2xlLnRpbWUoJ3RvdGFsIHRpbWUnKTtcblxuICAgICAgICBjb25zdCB0aW1lcklkID0gYHByZXBhcmUgJHsgIHBvaW50cy5sZW5ndGggIH0gcG9pbnRzYDtcbiAgICAgICAgaWYgKGxvZykgY29uc29sZS50aW1lKHRpbWVySWQpO1xuXG4gICAgICAgIHRoaXMucG9pbnRzID0gcG9pbnRzO1xuXG4gICAgICAgIC8vIGdlbmVyYXRlIGEgY2x1c3RlciBvYmplY3QgZm9yIGVhY2ggcG9pbnQgYW5kIGluZGV4IGlucHV0IHBvaW50cyBpbnRvIGEgS0QtdHJlZVxuICAgICAgICBsZXQgY2x1c3RlcnMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghcG9pbnRzW2ldLmdlb21ldHJ5KSBjb250aW51ZTtcbiAgICAgICAgICAgIGNsdXN0ZXJzLnB1c2goY3JlYXRlUG9pbnRDbHVzdGVyKHBvaW50c1tpXSwgaSkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudHJlZXNbbWF4Wm9vbSArIDFdID0gbmV3IEtEQnVzaChjbHVzdGVycywgZ2V0WCwgZ2V0WSwgbm9kZVNpemUsIEZsb2F0MzJBcnJheSk7XG5cbiAgICAgICAgaWYgKGxvZykgY29uc29sZS50aW1lRW5kKHRpbWVySWQpO1xuXG4gICAgICAgIC8vIGNsdXN0ZXIgcG9pbnRzIG9uIG1heCB6b29tLCB0aGVuIGNsdXN0ZXIgdGhlIHJlc3VsdHMgb24gcHJldmlvdXMgem9vbSwgZXRjLjtcbiAgICAgICAgLy8gcmVzdWx0cyBpbiBhIGNsdXN0ZXIgaGllcmFyY2h5IGFjcm9zcyB6b29tIGxldmVsc1xuICAgICAgICBmb3IgKGxldCB6ID0gbWF4Wm9vbTsgeiA+PSBtaW5ab29tOyB6LS0pIHtcbiAgICAgICAgICAgIGNvbnN0IG5vdyA9ICtEYXRlLm5vdygpO1xuXG4gICAgICAgICAgICAvLyBjcmVhdGUgYSBuZXcgc2V0IG9mIGNsdXN0ZXJzIGZvciB0aGUgem9vbSBhbmQgaW5kZXggdGhlbSB3aXRoIGEgS0QtdHJlZVxuICAgICAgICAgICAgY2x1c3RlcnMgPSB0aGlzLl9jbHVzdGVyKGNsdXN0ZXJzLCB6KTtcbiAgICAgICAgICAgIHRoaXMudHJlZXNbel0gPSBuZXcgS0RCdXNoKGNsdXN0ZXJzLCBnZXRYLCBnZXRZLCBub2RlU2l6ZSwgRmxvYXQzMkFycmF5KTtcblxuICAgICAgICAgICAgaWYgKGxvZykgY29uc29sZS5sb2coJ3olZDogJWQgY2x1c3RlcnMgaW4gJWRtcycsIHosIGNsdXN0ZXJzLmxlbmd0aCwgK0RhdGUubm93KCkgLSBub3cpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxvZykgY29uc29sZS50aW1lRW5kKCd0b3RhbCB0aW1lJyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZ2V0Q2x1c3RlcnMoYmJveCwgem9vbSkge1xuICAgICAgICBsZXQgbWluTG5nID0gKChiYm94WzBdICsgMTgwKSAlIDM2MCArIDM2MCkgJSAzNjAgLSAxODA7XG4gICAgICAgIGNvbnN0IG1pbkxhdCA9IE1hdGgubWF4KC05MCwgTWF0aC5taW4oOTAsIGJib3hbMV0pKTtcbiAgICAgICAgbGV0IG1heExuZyA9IGJib3hbMl0gPT09IDE4MCA/IDE4MCA6ICgoYmJveFsyXSArIDE4MCkgJSAzNjAgKyAzNjApICUgMzYwIC0gMTgwO1xuICAgICAgICBjb25zdCBtYXhMYXQgPSBNYXRoLm1heCgtOTAsIE1hdGgubWluKDkwLCBiYm94WzNdKSk7XG5cbiAgICAgICAgaWYgKGJib3hbMl0gLSBiYm94WzBdID49IDM2MCkge1xuICAgICAgICAgICAgbWluTG5nID0gLTE4MDtcbiAgICAgICAgICAgIG1heExuZyA9IDE4MDtcbiAgICAgICAgfSBlbHNlIGlmIChtaW5MbmcgPiBtYXhMbmcpIHtcbiAgICAgICAgICAgIGNvbnN0IGVhc3Rlcm5IZW0gPSB0aGlzLmdldENsdXN0ZXJzKFttaW5MbmcsIG1pbkxhdCwgMTgwLCBtYXhMYXRdLCB6b29tKTtcbiAgICAgICAgICAgIGNvbnN0IHdlc3Rlcm5IZW0gPSB0aGlzLmdldENsdXN0ZXJzKFstMTgwLCBtaW5MYXQsIG1heExuZywgbWF4TGF0XSwgem9vbSk7XG4gICAgICAgICAgICByZXR1cm4gZWFzdGVybkhlbS5jb25jYXQod2VzdGVybkhlbSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0cmVlID0gdGhpcy50cmVlc1t0aGlzLl9saW1pdFpvb20oem9vbSldO1xuICAgICAgICBjb25zdCBpZHMgPSB0cmVlLnJhbmdlKGxuZ1gobWluTG5nKSwgbGF0WShtYXhMYXQpLCBsbmdYKG1heExuZyksIGxhdFkobWluTGF0KSk7XG4gICAgICAgIGNvbnN0IGNsdXN0ZXJzID0gW107XG4gICAgICAgIGZvciAoY29uc3QgaWQgb2YgaWRzKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gdHJlZS5wb2ludHNbaWRdO1xuICAgICAgICAgICAgY2x1c3RlcnMucHVzaChjLm51bVBvaW50cyA/IGdldENsdXN0ZXJKU09OKGMpIDogdGhpcy5wb2ludHNbYy5pbmRleF0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbHVzdGVycztcbiAgICB9XG5cbiAgICBnZXRDaGlsZHJlbihjbHVzdGVySWQpIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luSWQgPSB0aGlzLl9nZXRPcmlnaW5JZChjbHVzdGVySWQpO1xuICAgICAgICBjb25zdCBvcmlnaW5ab29tID0gdGhpcy5fZ2V0T3JpZ2luWm9vbShjbHVzdGVySWQpO1xuICAgICAgICBjb25zdCBlcnJvck1zZyA9ICdObyBjbHVzdGVyIHdpdGggdGhlIHNwZWNpZmllZCBpZC4nO1xuXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy50cmVlc1tvcmlnaW5ab29tXTtcbiAgICAgICAgaWYgKCFpbmRleCkgdGhyb3cgbmV3IEVycm9yKGVycm9yTXNnKTtcblxuICAgICAgICBjb25zdCBvcmlnaW4gPSBpbmRleC5wb2ludHNbb3JpZ2luSWRdO1xuICAgICAgICBpZiAoIW9yaWdpbikgdGhyb3cgbmV3IEVycm9yKGVycm9yTXNnKTtcblxuICAgICAgICBjb25zdCByID0gdGhpcy5vcHRpb25zLnJhZGl1cyAvICh0aGlzLm9wdGlvbnMuZXh0ZW50ICogTWF0aC5wb3coMiwgb3JpZ2luWm9vbSAtIDEpKTtcbiAgICAgICAgY29uc3QgaWRzID0gaW5kZXgud2l0aGluKG9yaWdpbi54LCBvcmlnaW4ueSwgcik7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gW107XG4gICAgICAgIGZvciAoY29uc3QgaWQgb2YgaWRzKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gaW5kZXgucG9pbnRzW2lkXTtcbiAgICAgICAgICAgIGlmIChjLnBhcmVudElkID09PSBjbHVzdGVySWQpIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKGMubnVtUG9pbnRzID8gZ2V0Q2x1c3RlckpTT04oYykgOiB0aGlzLnBvaW50c1tjLmluZGV4XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNc2cpO1xuXG4gICAgICAgIHJldHVybiBjaGlsZHJlbjtcbiAgICB9XG5cbiAgICBnZXRMZWF2ZXMoY2x1c3RlcklkLCBsaW1pdCwgb2Zmc2V0KSB7XG4gICAgICAgIGxpbWl0ID0gbGltaXQgfHwgMTA7XG4gICAgICAgIG9mZnNldCA9IG9mZnNldCB8fCAwO1xuXG4gICAgICAgIGNvbnN0IGxlYXZlcyA9IFtdO1xuICAgICAgICB0aGlzLl9hcHBlbmRMZWF2ZXMobGVhdmVzLCBjbHVzdGVySWQsIGxpbWl0LCBvZmZzZXQsIDApO1xuXG4gICAgICAgIHJldHVybiBsZWF2ZXM7XG4gICAgfVxuXG4gICAgZ2V0VGlsZSh6LCB4LCB5KSB7XG4gICAgICAgIGNvbnN0IHRyZWUgPSB0aGlzLnRyZWVzW3RoaXMuX2xpbWl0Wm9vbSh6KV07XG4gICAgICAgIGNvbnN0IHoyID0gTWF0aC5wb3coMiwgeik7XG4gICAgICAgIGNvbnN0IHtleHRlbnQsIHJhZGl1c30gPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHAgPSByYWRpdXMgLyBleHRlbnQ7XG4gICAgICAgIGNvbnN0IHRvcCA9ICh5IC0gcCkgLyB6MjtcbiAgICAgICAgY29uc3QgYm90dG9tID0gKHkgKyAxICsgcCkgLyB6MjtcblxuICAgICAgICBjb25zdCB0aWxlID0ge1xuICAgICAgICAgICAgZmVhdHVyZXM6IFtdXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fYWRkVGlsZUZlYXR1cmVzKFxuICAgICAgICAgICAgdHJlZS5yYW5nZSgoeCAtIHApIC8gejIsIHRvcCwgKHggKyAxICsgcCkgLyB6MiwgYm90dG9tKSxcbiAgICAgICAgICAgIHRyZWUucG9pbnRzLCB4LCB5LCB6MiwgdGlsZSk7XG5cbiAgICAgICAgaWYgKHggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2FkZFRpbGVGZWF0dXJlcyhcbiAgICAgICAgICAgICAgICB0cmVlLnJhbmdlKDEgLSBwIC8gejIsIHRvcCwgMSwgYm90dG9tKSxcbiAgICAgICAgICAgICAgICB0cmVlLnBvaW50cywgejIsIHksIHoyLCB0aWxlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoeCA9PT0gejIgLSAxKSB7XG4gICAgICAgICAgICB0aGlzLl9hZGRUaWxlRmVhdHVyZXMoXG4gICAgICAgICAgICAgICAgdHJlZS5yYW5nZSgwLCB0b3AsIHAgLyB6MiwgYm90dG9tKSxcbiAgICAgICAgICAgICAgICB0cmVlLnBvaW50cywgLTEsIHksIHoyLCB0aWxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aWxlLmZlYXR1cmVzLmxlbmd0aCA/IHRpbGUgOiBudWxsO1xuICAgIH1cblxuICAgIGdldENsdXN0ZXJFeHBhbnNpb25ab29tKGNsdXN0ZXJJZCkge1xuICAgICAgICBsZXQgZXhwYW5zaW9uWm9vbSA9IHRoaXMuX2dldE9yaWdpblpvb20oY2x1c3RlcklkKSAtIDE7XG4gICAgICAgIHdoaWxlIChleHBhbnNpb25ab29tIDw9IHRoaXMub3B0aW9ucy5tYXhab29tKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZ2V0Q2hpbGRyZW4oY2x1c3RlcklkKTtcbiAgICAgICAgICAgIGV4cGFuc2lvblpvb20rKztcbiAgICAgICAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGggIT09IDEpIGJyZWFrO1xuICAgICAgICAgICAgY2x1c3RlcklkID0gY2hpbGRyZW5bMF0ucHJvcGVydGllcy5jbHVzdGVyX2lkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBleHBhbnNpb25ab29tO1xuICAgIH1cblxuICAgIF9hcHBlbmRMZWF2ZXMocmVzdWx0LCBjbHVzdGVySWQsIGxpbWl0LCBvZmZzZXQsIHNraXBwZWQpIHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmdldENoaWxkcmVuKGNsdXN0ZXJJZCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgICAgICAgY29uc3QgcHJvcHMgPSBjaGlsZC5wcm9wZXJ0aWVzO1xuXG4gICAgICAgICAgICBpZiAocHJvcHMgJiYgcHJvcHMuY2x1c3Rlcikge1xuICAgICAgICAgICAgICAgIGlmIChza2lwcGVkICsgcHJvcHMucG9pbnRfY291bnQgPD0gb2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNraXAgdGhlIHdob2xlIGNsdXN0ZXJcbiAgICAgICAgICAgICAgICAgICAgc2tpcHBlZCArPSBwcm9wcy5wb2ludF9jb3VudDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBlbnRlciB0aGUgY2x1c3RlclxuICAgICAgICAgICAgICAgICAgICBza2lwcGVkID0gdGhpcy5fYXBwZW5kTGVhdmVzKHJlc3VsdCwgcHJvcHMuY2x1c3Rlcl9pZCwgbGltaXQsIG9mZnNldCwgc2tpcHBlZCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGV4aXQgdGhlIGNsdXN0ZXJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNraXBwZWQgPCBvZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAvLyBza2lwIGEgc2luZ2xlIHBvaW50XG4gICAgICAgICAgICAgICAgc2tpcHBlZCsrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBhZGQgYSBzaW5nbGUgcG9pbnRcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChjaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA9PT0gbGltaXQpIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNraXBwZWQ7XG4gICAgfVxuXG4gICAgX2FkZFRpbGVGZWF0dXJlcyhpZHMsIHBvaW50cywgeCwgeSwgejIsIHRpbGUpIHtcbiAgICAgICAgZm9yIChjb25zdCBpIG9mIGlkcykge1xuICAgICAgICAgICAgY29uc3QgYyA9IHBvaW50c1tpXTtcbiAgICAgICAgICAgIGNvbnN0IGlzQ2x1c3RlciA9IGMubnVtUG9pbnRzO1xuICAgICAgICAgICAgY29uc3QgZiA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAxLFxuICAgICAgICAgICAgICAgIGdlb21ldHJ5OiBbW1xuICAgICAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKHRoaXMub3B0aW9ucy5leHRlbnQgKiAoYy54ICogejIgLSB4KSksXG4gICAgICAgICAgICAgICAgICAgIE1hdGgucm91bmQodGhpcy5vcHRpb25zLmV4dGVudCAqIChjLnkgKiB6MiAtIHkpKVxuICAgICAgICAgICAgICAgIF1dLFxuICAgICAgICAgICAgICAgIHRhZ3M6IGlzQ2x1c3RlciA/IGdldENsdXN0ZXJQcm9wZXJ0aWVzKGMpIDogdGhpcy5wb2ludHNbYy5pbmRleF0ucHJvcGVydGllc1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8gYXNzaWduIGlkXG4gICAgICAgICAgICBsZXQgaWQ7XG4gICAgICAgICAgICBpZiAoaXNDbHVzdGVyKSB7XG4gICAgICAgICAgICAgICAgaWQgPSBjLmlkO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuZ2VuZXJhdGVJZCkge1xuICAgICAgICAgICAgICAgIC8vIG9wdGlvbmFsbHkgZ2VuZXJhdGUgaWRcbiAgICAgICAgICAgICAgICBpZCA9IGMuaW5kZXg7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucG9pbnRzW2MuaW5kZXhdLmlkKSB7XG4gICAgICAgICAgICAgICAgLy8ga2VlcCBpZCBpZiBhbHJlYWR5IGFzc2lnbmVkXG4gICAgICAgICAgICAgICAgaWQgPSB0aGlzLnBvaW50c1tjLmluZGV4XS5pZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlkICE9PSB1bmRlZmluZWQpIGYuaWQgPSBpZDtcblxuICAgICAgICAgICAgdGlsZS5mZWF0dXJlcy5wdXNoKGYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2xpbWl0Wm9vbSh6KSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1heCh0aGlzLm9wdGlvbnMubWluWm9vbSwgTWF0aC5taW4oeiwgdGhpcy5vcHRpb25zLm1heFpvb20gKyAxKSk7XG4gICAgfVxuXG4gICAgX2NsdXN0ZXIocG9pbnRzLCB6b29tKSB7XG4gICAgICAgIGNvbnN0IGNsdXN0ZXJzID0gW107XG4gICAgICAgIGNvbnN0IHtyYWRpdXMsIGV4dGVudCwgcmVkdWNlfSA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3QgciA9IHJhZGl1cyAvIChleHRlbnQgKiBNYXRoLnBvdygyLCB6b29tKSk7XG5cbiAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGVhY2ggcG9pbnRcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBwb2ludHNbaV07XG4gICAgICAgICAgICAvLyBpZiB3ZSd2ZSBhbHJlYWR5IHZpc2l0ZWQgdGhlIHBvaW50IGF0IHRoaXMgem9vbSBsZXZlbCwgc2tpcCBpdFxuICAgICAgICAgICAgaWYgKHAuem9vbSA8PSB6b29tKSBjb250aW51ZTtcbiAgICAgICAgICAgIHAuem9vbSA9IHpvb207XG5cbiAgICAgICAgICAgIC8vIGZpbmQgYWxsIG5lYXJieSBwb2ludHNcbiAgICAgICAgICAgIGNvbnN0IHRyZWUgPSB0aGlzLnRyZWVzW3pvb20gKyAxXTtcbiAgICAgICAgICAgIGNvbnN0IG5laWdoYm9ySWRzID0gdHJlZS53aXRoaW4ocC54LCBwLnksIHIpO1xuXG4gICAgICAgICAgICBsZXQgbnVtUG9pbnRzID0gcC5udW1Qb2ludHMgfHwgMTtcbiAgICAgICAgICAgIGxldCB3eCA9IHAueCAqIG51bVBvaW50cztcbiAgICAgICAgICAgIGxldCB3eSA9IHAueSAqIG51bVBvaW50cztcblxuICAgICAgICAgICAgbGV0IGNsdXN0ZXJQcm9wZXJ0aWVzID0gcmVkdWNlICYmIG51bVBvaW50cyA+IDEgPyB0aGlzLl9tYXAocCwgdHJ1ZSkgOiBudWxsO1xuXG4gICAgICAgICAgICAvLyBlbmNvZGUgYm90aCB6b29tIGFuZCBwb2ludCBpbmRleCBvbiB3aGljaCB0aGUgY2x1c3RlciBvcmlnaW5hdGVkIC0tIG9mZnNldCBieSB0b3RhbCBsZW5ndGggb2YgZmVhdHVyZXNcbiAgICAgICAgICAgIGNvbnN0IGlkID0gKGkgPDwgNSkgKyAoem9vbSArIDEpICsgdGhpcy5wb2ludHMubGVuZ3RoO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG5laWdoYm9ySWQgb2YgbmVpZ2hib3JJZHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBiID0gdHJlZS5wb2ludHNbbmVpZ2hib3JJZF07XG4gICAgICAgICAgICAgICAgLy8gZmlsdGVyIG91dCBuZWlnaGJvcnMgdGhhdCBhcmUgYWxyZWFkeSBwcm9jZXNzZWRcbiAgICAgICAgICAgICAgICBpZiAoYi56b29tIDw9IHpvb20pIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGIuem9vbSA9IHpvb207IC8vIHNhdmUgdGhlIHpvb20gKHNvIGl0IGRvZXNuJ3QgZ2V0IHByb2Nlc3NlZCB0d2ljZSlcblxuICAgICAgICAgICAgICAgIGNvbnN0IG51bVBvaW50czIgPSBiLm51bVBvaW50cyB8fCAxO1xuICAgICAgICAgICAgICAgIHd4ICs9IGIueCAqIG51bVBvaW50czI7IC8vIGFjY3VtdWxhdGUgY29vcmRpbmF0ZXMgZm9yIGNhbGN1bGF0aW5nIHdlaWdodGVkIGNlbnRlclxuICAgICAgICAgICAgICAgIHd5ICs9IGIueSAqIG51bVBvaW50czI7XG5cbiAgICAgICAgICAgICAgICBudW1Qb2ludHMgKz0gbnVtUG9pbnRzMjtcbiAgICAgICAgICAgICAgICBiLnBhcmVudElkID0gaWQ7XG5cbiAgICAgICAgICAgICAgICBpZiAocmVkdWNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY2x1c3RlclByb3BlcnRpZXMpIGNsdXN0ZXJQcm9wZXJ0aWVzID0gdGhpcy5fbWFwKHAsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICByZWR1Y2UoY2x1c3RlclByb3BlcnRpZXMsIHRoaXMuX21hcChiKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobnVtUG9pbnRzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgY2x1c3RlcnMucHVzaChwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcC5wYXJlbnRJZCA9IGlkO1xuICAgICAgICAgICAgICAgIGNsdXN0ZXJzLnB1c2goY3JlYXRlQ2x1c3Rlcih3eCAvIG51bVBvaW50cywgd3kgLyBudW1Qb2ludHMsIGlkLCBudW1Qb2ludHMsIGNsdXN0ZXJQcm9wZXJ0aWVzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2x1c3RlcnM7XG4gICAgfVxuXG4gICAgLy8gZ2V0IGluZGV4IG9mIHRoZSBwb2ludCBmcm9tIHdoaWNoIHRoZSBjbHVzdGVyIG9yaWdpbmF0ZWRcbiAgICBfZ2V0T3JpZ2luSWQoY2x1c3RlcklkKSB7XG4gICAgICAgIHJldHVybiAoY2x1c3RlcklkIC0gdGhpcy5wb2ludHMubGVuZ3RoKSA+PiA1O1xuICAgIH1cblxuICAgIC8vIGdldCB6b29tIG9mIHRoZSBwb2ludCBmcm9tIHdoaWNoIHRoZSBjbHVzdGVyIG9yaWdpbmF0ZWRcbiAgICBfZ2V0T3JpZ2luWm9vbShjbHVzdGVySWQpIHtcbiAgICAgICAgcmV0dXJuIChjbHVzdGVySWQgLSB0aGlzLnBvaW50cy5sZW5ndGgpICUgMzI7XG4gICAgfVxuXG4gICAgX21hcChwb2ludCwgY2xvbmUpIHtcbiAgICAgICAgaWYgKHBvaW50Lm51bVBvaW50cykge1xuICAgICAgICAgICAgcmV0dXJuIGNsb25lID8gZXh0ZW5kKHt9LCBwb2ludC5wcm9wZXJ0aWVzKSA6IHBvaW50LnByb3BlcnRpZXM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3JpZ2luYWwgPSB0aGlzLnBvaW50c1twb2ludC5pbmRleF0ucHJvcGVydGllcztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5vcHRpb25zLm1hcChvcmlnaW5hbCk7XG4gICAgICAgIHJldHVybiBjbG9uZSAmJiByZXN1bHQgPT09IG9yaWdpbmFsID8gZXh0ZW5kKHt9LCByZXN1bHQpIDogcmVzdWx0O1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQ2x1c3Rlcih4LCB5LCBpZCwgbnVtUG9pbnRzLCBwcm9wZXJ0aWVzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeCwgLy8gd2VpZ2h0ZWQgY2x1c3RlciBjZW50ZXJcbiAgICAgICAgeSxcbiAgICAgICAgem9vbTogSW5maW5pdHksIC8vIHRoZSBsYXN0IHpvb20gdGhlIGNsdXN0ZXIgd2FzIHByb2Nlc3NlZCBhdFxuICAgICAgICBpZCwgLy8gZW5jb2RlcyBpbmRleCBvZiB0aGUgZmlyc3QgY2hpbGQgb2YgdGhlIGNsdXN0ZXIgYW5kIGl0cyB6b29tIGxldmVsXG4gICAgICAgIHBhcmVudElkOiAtMSwgLy8gcGFyZW50IGNsdXN0ZXIgaWRcbiAgICAgICAgbnVtUG9pbnRzLFxuICAgICAgICBwcm9wZXJ0aWVzXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUG9pbnRDbHVzdGVyKHAsIGlkKSB7XG4gICAgY29uc3QgW3gsIHldID0gcC5nZW9tZXRyeS5jb29yZGluYXRlcztcbiAgICByZXR1cm4ge1xuICAgICAgICB4OiBsbmdYKHgpLCAvLyBwcm9qZWN0ZWQgcG9pbnQgY29vcmRpbmF0ZXNcbiAgICAgICAgeTogbGF0WSh5KSxcbiAgICAgICAgem9vbTogSW5maW5pdHksIC8vIHRoZSBsYXN0IHpvb20gdGhlIHBvaW50IHdhcyBwcm9jZXNzZWQgYXRcbiAgICAgICAgaW5kZXg6IGlkLCAvLyBpbmRleCBvZiB0aGUgc291cmNlIGZlYXR1cmUgaW4gdGhlIG9yaWdpbmFsIGlucHV0IGFycmF5LFxuICAgICAgICBwYXJlbnRJZDogLTEgLy8gcGFyZW50IGNsdXN0ZXIgaWRcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBnZXRDbHVzdGVySlNPTihjbHVzdGVyKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogJ0ZlYXR1cmUnLFxuICAgICAgICBpZDogY2x1c3Rlci5pZCxcbiAgICAgICAgcHJvcGVydGllczogZ2V0Q2x1c3RlclByb3BlcnRpZXMoY2x1c3RlciksXG4gICAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgICAgICAgY29vcmRpbmF0ZXM6IFt4TG5nKGNsdXN0ZXIueCksIHlMYXQoY2x1c3Rlci55KV1cbiAgICAgICAgfVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIGdldENsdXN0ZXJQcm9wZXJ0aWVzKGNsdXN0ZXIpIHtcbiAgICBjb25zdCBjb3VudCA9IGNsdXN0ZXIubnVtUG9pbnRzO1xuICAgIGNvbnN0IGFiYnJldiA9XG4gICAgICAgIGNvdW50ID49IDEwMDAwID8gYCR7TWF0aC5yb3VuZChjb3VudCAvIDEwMDApICB9a2AgOlxuICAgICAgICBjb3VudCA+PSAxMDAwID8gYCR7TWF0aC5yb3VuZChjb3VudCAvIDEwMCkgLyAxMCAgfWtgIDogY291bnQ7XG4gICAgcmV0dXJuIGV4dGVuZChleHRlbmQoe30sIGNsdXN0ZXIucHJvcGVydGllcyksIHtcbiAgICAgICAgY2x1c3RlcjogdHJ1ZSxcbiAgICAgICAgY2x1c3Rlcl9pZDogY2x1c3Rlci5pZCxcbiAgICAgICAgcG9pbnRfY291bnQ6IGNvdW50LFxuICAgICAgICBwb2ludF9jb3VudF9hYmJyZXZpYXRlZDogYWJicmV2XG4gICAgfSk7XG59XG5cbi8vIGxvbmdpdHVkZS9sYXRpdHVkZSB0byBzcGhlcmljYWwgbWVyY2F0b3IgaW4gWzAuLjFdIHJhbmdlXG5mdW5jdGlvbiBsbmdYKGxuZykge1xuICAgIHJldHVybiBsbmcgLyAzNjAgKyAwLjU7XG59XG5mdW5jdGlvbiBsYXRZKGxhdCkge1xuICAgIGNvbnN0IHNpbiA9IE1hdGguc2luKGxhdCAqIE1hdGguUEkgLyAxODApO1xuICAgIGNvbnN0IHkgPSAoMC41IC0gMC4yNSAqIE1hdGgubG9nKCgxICsgc2luKSAvICgxIC0gc2luKSkgLyBNYXRoLlBJKTtcbiAgICByZXR1cm4geSA8IDAgPyAwIDogeSA+IDEgPyAxIDogeTtcbn1cblxuLy8gc3BoZXJpY2FsIG1lcmNhdG9yIHRvIGxvbmdpdHVkZS9sYXRpdHVkZVxuZnVuY3Rpb24geExuZyh4KSB7XG4gICAgcmV0dXJuICh4IC0gMC41KSAqIDM2MDtcbn1cbmZ1bmN0aW9uIHlMYXQoeSkge1xuICAgIGNvbnN0IHkyID0gKDE4MCAtIHkgKiAzNjApICogTWF0aC5QSSAvIDE4MDtcbiAgICByZXR1cm4gMzYwICogTWF0aC5hdGFuKE1hdGguZXhwKHkyKSkgLyBNYXRoLlBJIC0gOTA7XG59XG5cbmZ1bmN0aW9uIGV4dGVuZChkZXN0LCBzcmMpIHtcbiAgICBmb3IgKGNvbnN0IGlkIGluIHNyYykgZGVzdFtpZF0gPSBzcmNbaWRdO1xuICAgIHJldHVybiBkZXN0O1xufVxuXG5mdW5jdGlvbiBnZXRYKHApIHtcbiAgICByZXR1cm4gcC54O1xufVxuZnVuY3Rpb24gZ2V0WShwKSB7XG4gICAgcmV0dXJuIHAueTtcbn1cbiIsIlxuLy8gY2FsY3VsYXRlIHNpbXBsaWZpY2F0aW9uIGRhdGEgdXNpbmcgb3B0aW1pemVkIERvdWdsYXMtUGV1Y2tlciBhbGdvcml0aG1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2ltcGxpZnkoY29vcmRzLCBmaXJzdCwgbGFzdCwgc3FUb2xlcmFuY2UpIHtcbiAgICB2YXIgbWF4U3FEaXN0ID0gc3FUb2xlcmFuY2U7XG4gICAgdmFyIG1pZCA9IChsYXN0IC0gZmlyc3QpID4+IDE7XG4gICAgdmFyIG1pblBvc1RvTWlkID0gbGFzdCAtIGZpcnN0O1xuICAgIHZhciBpbmRleDtcblxuICAgIHZhciBheCA9IGNvb3Jkc1tmaXJzdF07XG4gICAgdmFyIGF5ID0gY29vcmRzW2ZpcnN0ICsgMV07XG4gICAgdmFyIGJ4ID0gY29vcmRzW2xhc3RdO1xuICAgIHZhciBieSA9IGNvb3Jkc1tsYXN0ICsgMV07XG5cbiAgICBmb3IgKHZhciBpID0gZmlyc3QgKyAzOyBpIDwgbGFzdDsgaSArPSAzKSB7XG4gICAgICAgIHZhciBkID0gZ2V0U3FTZWdEaXN0KGNvb3Jkc1tpXSwgY29vcmRzW2kgKyAxXSwgYXgsIGF5LCBieCwgYnkpO1xuXG4gICAgICAgIGlmIChkID4gbWF4U3FEaXN0KSB7XG4gICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICBtYXhTcURpc3QgPSBkO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoZCA9PT0gbWF4U3FEaXN0KSB7XG4gICAgICAgICAgICAvLyBhIHdvcmthcm91bmQgdG8gZW5zdXJlIHdlIGNob29zZSBhIHBpdm90IGNsb3NlIHRvIHRoZSBtaWRkbGUgb2YgdGhlIGxpc3QsXG4gICAgICAgICAgICAvLyByZWR1Y2luZyByZWN1cnNpb24gZGVwdGgsIGZvciBjZXJ0YWluIGRlZ2VuZXJhdGUgaW5wdXRzXG4gICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L2dlb2pzb24tdnQvaXNzdWVzLzEwNFxuICAgICAgICAgICAgdmFyIHBvc1RvTWlkID0gTWF0aC5hYnMoaSAtIG1pZCk7XG4gICAgICAgICAgICBpZiAocG9zVG9NaWQgPCBtaW5Qb3NUb01pZCkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gaTtcbiAgICAgICAgICAgICAgICBtaW5Qb3NUb01pZCA9IHBvc1RvTWlkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1heFNxRGlzdCA+IHNxVG9sZXJhbmNlKSB7XG4gICAgICAgIGlmIChpbmRleCAtIGZpcnN0ID4gMykgc2ltcGxpZnkoY29vcmRzLCBmaXJzdCwgaW5kZXgsIHNxVG9sZXJhbmNlKTtcbiAgICAgICAgY29vcmRzW2luZGV4ICsgMl0gPSBtYXhTcURpc3Q7XG4gICAgICAgIGlmIChsYXN0IC0gaW5kZXggPiAzKSBzaW1wbGlmeShjb29yZHMsIGluZGV4LCBsYXN0LCBzcVRvbGVyYW5jZSk7XG4gICAgfVxufVxuXG4vLyBzcXVhcmUgZGlzdGFuY2UgZnJvbSBhIHBvaW50IHRvIGEgc2VnbWVudFxuZnVuY3Rpb24gZ2V0U3FTZWdEaXN0KHB4LCBweSwgeCwgeSwgYngsIGJ5KSB7XG5cbiAgICB2YXIgZHggPSBieCAtIHg7XG4gICAgdmFyIGR5ID0gYnkgLSB5O1xuXG4gICAgaWYgKGR4ICE9PSAwIHx8IGR5ICE9PSAwKSB7XG5cbiAgICAgICAgdmFyIHQgPSAoKHB4IC0geCkgKiBkeCArIChweSAtIHkpICogZHkpIC8gKGR4ICogZHggKyBkeSAqIGR5KTtcblxuICAgICAgICBpZiAodCA+IDEpIHtcbiAgICAgICAgICAgIHggPSBieDtcbiAgICAgICAgICAgIHkgPSBieTtcblxuICAgICAgICB9IGVsc2UgaWYgKHQgPiAwKSB7XG4gICAgICAgICAgICB4ICs9IGR4ICogdDtcbiAgICAgICAgICAgIHkgKz0gZHkgKiB0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZHggPSBweCAtIHg7XG4gICAgZHkgPSBweSAtIHk7XG5cbiAgICByZXR1cm4gZHggKiBkeCArIGR5ICogZHk7XG59XG4iLCJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZUZlYXR1cmUoaWQsIHR5cGUsIGdlb20sIHRhZ3MpIHtcbiAgICB2YXIgZmVhdHVyZSA9IHtcbiAgICAgICAgaWQ6IHR5cGVvZiBpZCA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogaWQsXG4gICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgIGdlb21ldHJ5OiBnZW9tLFxuICAgICAgICB0YWdzOiB0YWdzLFxuICAgICAgICBtaW5YOiBJbmZpbml0eSxcbiAgICAgICAgbWluWTogSW5maW5pdHksXG4gICAgICAgIG1heFg6IC1JbmZpbml0eSxcbiAgICAgICAgbWF4WTogLUluZmluaXR5XG4gICAgfTtcbiAgICBjYWxjQkJveChmZWF0dXJlKTtcbiAgICByZXR1cm4gZmVhdHVyZTtcbn1cblxuZnVuY3Rpb24gY2FsY0JCb3goZmVhdHVyZSkge1xuICAgIHZhciBnZW9tID0gZmVhdHVyZS5nZW9tZXRyeTtcbiAgICB2YXIgdHlwZSA9IGZlYXR1cmUudHlwZTtcblxuICAgIGlmICh0eXBlID09PSAnUG9pbnQnIHx8IHR5cGUgPT09ICdNdWx0aVBvaW50JyB8fCB0eXBlID09PSAnTGluZVN0cmluZycpIHtcbiAgICAgICAgY2FsY0xpbmVCQm94KGZlYXR1cmUsIGdlb20pO1xuXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnUG9seWdvbicgfHwgdHlwZSA9PT0gJ011bHRpTGluZVN0cmluZycpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBnZW9tLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjYWxjTGluZUJCb3goZmVhdHVyZSwgZ2VvbVtpXSk7XG4gICAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ011bHRpUG9seWdvbicpIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGdlb20ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZ2VvbVtpXS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGNhbGNMaW5lQkJveChmZWF0dXJlLCBnZW9tW2ldW2pdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gY2FsY0xpbmVCQm94KGZlYXR1cmUsIGdlb20pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdlb20ubGVuZ3RoOyBpICs9IDMpIHtcbiAgICAgICAgZmVhdHVyZS5taW5YID0gTWF0aC5taW4oZmVhdHVyZS5taW5YLCBnZW9tW2ldKTtcbiAgICAgICAgZmVhdHVyZS5taW5ZID0gTWF0aC5taW4oZmVhdHVyZS5taW5ZLCBnZW9tW2kgKyAxXSk7XG4gICAgICAgIGZlYXR1cmUubWF4WCA9IE1hdGgubWF4KGZlYXR1cmUubWF4WCwgZ2VvbVtpXSk7XG4gICAgICAgIGZlYXR1cmUubWF4WSA9IE1hdGgubWF4KGZlYXR1cmUubWF4WSwgZ2VvbVtpICsgMV0pO1xuICAgIH1cbn1cbiIsIlxuaW1wb3J0IHNpbXBsaWZ5IGZyb20gJy4vc2ltcGxpZnknO1xuaW1wb3J0IGNyZWF0ZUZlYXR1cmUgZnJvbSAnLi9mZWF0dXJlJztcblxuLy8gY29udmVydHMgR2VvSlNPTiBmZWF0dXJlIGludG8gYW4gaW50ZXJtZWRpYXRlIHByb2plY3RlZCBKU09OIHZlY3RvciBmb3JtYXQgd2l0aCBzaW1wbGlmaWNhdGlvbiBkYXRhXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbnZlcnQoZGF0YSwgb3B0aW9ucykge1xuICAgIHZhciBmZWF0dXJlcyA9IFtdO1xuICAgIGlmIChkYXRhLnR5cGUgPT09ICdGZWF0dXJlQ29sbGVjdGlvbicpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLmZlYXR1cmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb252ZXJ0RmVhdHVyZShmZWF0dXJlcywgZGF0YS5mZWF0dXJlc1tpXSwgb3B0aW9ucywgaSk7XG4gICAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAoZGF0YS50eXBlID09PSAnRmVhdHVyZScpIHtcbiAgICAgICAgY29udmVydEZlYXR1cmUoZmVhdHVyZXMsIGRhdGEsIG9wdGlvbnMpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gc2luZ2xlIGdlb21ldHJ5IG9yIGEgZ2VvbWV0cnkgY29sbGVjdGlvblxuICAgICAgICBjb252ZXJ0RmVhdHVyZShmZWF0dXJlcywge2dlb21ldHJ5OiBkYXRhfSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZlYXR1cmVzO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0RmVhdHVyZShmZWF0dXJlcywgZ2VvanNvbiwgb3B0aW9ucywgaW5kZXgpIHtcbiAgICBpZiAoIWdlb2pzb24uZ2VvbWV0cnkpIHJldHVybjtcblxuICAgIHZhciBjb29yZHMgPSBnZW9qc29uLmdlb21ldHJ5LmNvb3JkaW5hdGVzO1xuICAgIHZhciB0eXBlID0gZ2VvanNvbi5nZW9tZXRyeS50eXBlO1xuICAgIHZhciB0b2xlcmFuY2UgPSBNYXRoLnBvdyhvcHRpb25zLnRvbGVyYW5jZSAvICgoMSA8PCBvcHRpb25zLm1heFpvb20pICogb3B0aW9ucy5leHRlbnQpLCAyKTtcbiAgICB2YXIgZ2VvbWV0cnkgPSBbXTtcbiAgICB2YXIgaWQgPSBnZW9qc29uLmlkO1xuICAgIGlmIChvcHRpb25zLnByb21vdGVJZCkge1xuICAgICAgICBpZCA9IGdlb2pzb24ucHJvcGVydGllc1tvcHRpb25zLnByb21vdGVJZF07XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmdlbmVyYXRlSWQpIHtcbiAgICAgICAgaWQgPSBpbmRleCB8fCAwO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gJ1BvaW50Jykge1xuICAgICAgICBjb252ZXJ0UG9pbnQoY29vcmRzLCBnZW9tZXRyeSk7XG5cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdNdWx0aVBvaW50Jykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvb3Jkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29udmVydFBvaW50KGNvb3Jkc1tpXSwgZ2VvbWV0cnkpO1xuICAgICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdMaW5lU3RyaW5nJykge1xuICAgICAgICBjb252ZXJ0TGluZShjb29yZHMsIGdlb21ldHJ5LCB0b2xlcmFuY2UsIGZhbHNlKTtcblxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ011bHRpTGluZVN0cmluZycpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMubGluZU1ldHJpY3MpIHtcbiAgICAgICAgICAgIC8vIGV4cGxvZGUgaW50byBsaW5lc3RyaW5ncyB0byBiZSBhYmxlIHRvIHRyYWNrIG1ldHJpY3NcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb29yZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBnZW9tZXRyeSA9IFtdO1xuICAgICAgICAgICAgICAgIGNvbnZlcnRMaW5lKGNvb3Jkc1tpXSwgZ2VvbWV0cnksIHRvbGVyYW5jZSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIGZlYXR1cmVzLnB1c2goY3JlYXRlRmVhdHVyZShpZCwgJ0xpbmVTdHJpbmcnLCBnZW9tZXRyeSwgZ2VvanNvbi5wcm9wZXJ0aWVzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb252ZXJ0TGluZXMoY29vcmRzLCBnZW9tZXRyeSwgdG9sZXJhbmNlLCBmYWxzZSk7XG4gICAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ1BvbHlnb24nKSB7XG4gICAgICAgIGNvbnZlcnRMaW5lcyhjb29yZHMsIGdlb21ldHJ5LCB0b2xlcmFuY2UsIHRydWUpO1xuXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnTXVsdGlQb2x5Z29uJykge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29vcmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgcG9seWdvbiA9IFtdO1xuICAgICAgICAgICAgY29udmVydExpbmVzKGNvb3Jkc1tpXSwgcG9seWdvbiwgdG9sZXJhbmNlLCB0cnVlKTtcbiAgICAgICAgICAgIGdlb21ldHJ5LnB1c2gocG9seWdvbik7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdHZW9tZXRyeUNvbGxlY3Rpb24nKSB7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBnZW9qc29uLmdlb21ldHJ5Lmdlb21ldHJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnZlcnRGZWF0dXJlKGZlYXR1cmVzLCB7XG4gICAgICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgICAgIGdlb21ldHJ5OiBnZW9qc29uLmdlb21ldHJ5Lmdlb21ldHJpZXNbaV0sXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczogZ2VvanNvbi5wcm9wZXJ0aWVzXG4gICAgICAgICAgICB9LCBvcHRpb25zLCBpbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW5wdXQgZGF0YSBpcyBub3QgYSB2YWxpZCBHZW9KU09OIG9iamVjdC4nKTtcbiAgICB9XG5cbiAgICBmZWF0dXJlcy5wdXNoKGNyZWF0ZUZlYXR1cmUoaWQsIHR5cGUsIGdlb21ldHJ5LCBnZW9qc29uLnByb3BlcnRpZXMpKTtcbn1cblxuZnVuY3Rpb24gY29udmVydFBvaW50KGNvb3Jkcywgb3V0KSB7XG4gICAgb3V0LnB1c2gocHJvamVjdFgoY29vcmRzWzBdKSk7XG4gICAgb3V0LnB1c2gocHJvamVjdFkoY29vcmRzWzFdKSk7XG4gICAgb3V0LnB1c2goMCk7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRMaW5lKHJpbmcsIG91dCwgdG9sZXJhbmNlLCBpc1BvbHlnb24pIHtcbiAgICB2YXIgeDAsIHkwO1xuICAgIHZhciBzaXplID0gMDtcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgcmluZy5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIgeCA9IHByb2plY3RYKHJpbmdbal1bMF0pO1xuICAgICAgICB2YXIgeSA9IHByb2plY3RZKHJpbmdbal1bMV0pO1xuXG4gICAgICAgIG91dC5wdXNoKHgpO1xuICAgICAgICBvdXQucHVzaCh5KTtcbiAgICAgICAgb3V0LnB1c2goMCk7XG5cbiAgICAgICAgaWYgKGogPiAwKSB7XG4gICAgICAgICAgICBpZiAoaXNQb2x5Z29uKSB7XG4gICAgICAgICAgICAgICAgc2l6ZSArPSAoeDAgKiB5IC0geCAqIHkwKSAvIDI7IC8vIGFyZWFcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2l6ZSArPSBNYXRoLnNxcnQoTWF0aC5wb3coeCAtIHgwLCAyKSArIE1hdGgucG93KHkgLSB5MCwgMikpOyAvLyBsZW5ndGhcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB4MCA9IHg7XG4gICAgICAgIHkwID0geTtcbiAgICB9XG5cbiAgICB2YXIgbGFzdCA9IG91dC5sZW5ndGggLSAzO1xuICAgIG91dFsyXSA9IDE7XG4gICAgc2ltcGxpZnkob3V0LCAwLCBsYXN0LCB0b2xlcmFuY2UpO1xuICAgIG91dFtsYXN0ICsgMl0gPSAxO1xuXG4gICAgb3V0LnNpemUgPSBNYXRoLmFicyhzaXplKTtcbiAgICBvdXQuc3RhcnQgPSAwO1xuICAgIG91dC5lbmQgPSBvdXQuc2l6ZTtcbn1cblxuZnVuY3Rpb24gY29udmVydExpbmVzKHJpbmdzLCBvdXQsIHRvbGVyYW5jZSwgaXNQb2x5Z29uKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByaW5ncy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZ2VvbSA9IFtdO1xuICAgICAgICBjb252ZXJ0TGluZShyaW5nc1tpXSwgZ2VvbSwgdG9sZXJhbmNlLCBpc1BvbHlnb24pO1xuICAgICAgICBvdXQucHVzaChnZW9tKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHByb2plY3RYKHgpIHtcbiAgICByZXR1cm4geCAvIDM2MCArIDAuNTtcbn1cblxuZnVuY3Rpb24gcHJvamVjdFkoeSkge1xuICAgIHZhciBzaW4gPSBNYXRoLnNpbih5ICogTWF0aC5QSSAvIDE4MCk7XG4gICAgdmFyIHkyID0gMC41IC0gMC4yNSAqIE1hdGgubG9nKCgxICsgc2luKSAvICgxIC0gc2luKSkgLyBNYXRoLlBJO1xuICAgIHJldHVybiB5MiA8IDAgPyAwIDogeTIgPiAxID8gMSA6IHkyO1xufVxuIiwiXG5pbXBvcnQgY3JlYXRlRmVhdHVyZSBmcm9tICcuL2ZlYXR1cmUnO1xuXG4vKiBjbGlwIGZlYXR1cmVzIGJldHdlZW4gdHdvIGF4aXMtcGFyYWxsZWwgbGluZXM6XG4gKiAgICAgfCAgICAgICAgfFxuICogIF9fX3xfX18gICAgIHwgICAgIC9cbiAqIC8gICB8ICAgXFxfX19ffF9fX18vXG4gKiAgICAgfCAgICAgICAgfFxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNsaXAoZmVhdHVyZXMsIHNjYWxlLCBrMSwgazIsIGF4aXMsIG1pbkFsbCwgbWF4QWxsLCBvcHRpb25zKSB7XG5cbiAgICBrMSAvPSBzY2FsZTtcbiAgICBrMiAvPSBzY2FsZTtcblxuICAgIGlmIChtaW5BbGwgPj0gazEgJiYgbWF4QWxsIDwgazIpIHJldHVybiBmZWF0dXJlczsgLy8gdHJpdmlhbCBhY2NlcHRcbiAgICBlbHNlIGlmIChtYXhBbGwgPCBrMSB8fCBtaW5BbGwgPj0gazIpIHJldHVybiBudWxsOyAvLyB0cml2aWFsIHJlamVjdFxuXG4gICAgdmFyIGNsaXBwZWQgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcblxuICAgICAgICB2YXIgZmVhdHVyZSA9IGZlYXR1cmVzW2ldO1xuICAgICAgICB2YXIgZ2VvbWV0cnkgPSBmZWF0dXJlLmdlb21ldHJ5O1xuICAgICAgICB2YXIgdHlwZSA9IGZlYXR1cmUudHlwZTtcblxuICAgICAgICB2YXIgbWluID0gYXhpcyA9PT0gMCA/IGZlYXR1cmUubWluWCA6IGZlYXR1cmUubWluWTtcbiAgICAgICAgdmFyIG1heCA9IGF4aXMgPT09IDAgPyBmZWF0dXJlLm1heFggOiBmZWF0dXJlLm1heFk7XG5cbiAgICAgICAgaWYgKG1pbiA+PSBrMSAmJiBtYXggPCBrMikgeyAvLyB0cml2aWFsIGFjY2VwdFxuICAgICAgICAgICAgY2xpcHBlZC5wdXNoKGZlYXR1cmUpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSBpZiAobWF4IDwgazEgfHwgbWluID49IGsyKSB7IC8vIHRyaXZpYWwgcmVqZWN0XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBuZXdHZW9tZXRyeSA9IFtdO1xuXG4gICAgICAgIGlmICh0eXBlID09PSAnUG9pbnQnIHx8IHR5cGUgPT09ICdNdWx0aVBvaW50Jykge1xuICAgICAgICAgICAgY2xpcFBvaW50cyhnZW9tZXRyeSwgbmV3R2VvbWV0cnksIGsxLCBrMiwgYXhpcyk7XG5cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnTGluZVN0cmluZycpIHtcbiAgICAgICAgICAgIGNsaXBMaW5lKGdlb21ldHJ5LCBuZXdHZW9tZXRyeSwgazEsIGsyLCBheGlzLCBmYWxzZSwgb3B0aW9ucy5saW5lTWV0cmljcyk7XG5cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnTXVsdGlMaW5lU3RyaW5nJykge1xuICAgICAgICAgICAgY2xpcExpbmVzKGdlb21ldHJ5LCBuZXdHZW9tZXRyeSwgazEsIGsyLCBheGlzLCBmYWxzZSk7XG5cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnUG9seWdvbicpIHtcbiAgICAgICAgICAgIGNsaXBMaW5lcyhnZW9tZXRyeSwgbmV3R2VvbWV0cnksIGsxLCBrMiwgYXhpcywgdHJ1ZSk7XG5cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnTXVsdGlQb2x5Z29uJykge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBnZW9tZXRyeS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIHZhciBwb2x5Z29uID0gW107XG4gICAgICAgICAgICAgICAgY2xpcExpbmVzKGdlb21ldHJ5W2pdLCBwb2x5Z29uLCBrMSwgazIsIGF4aXMsIHRydWUpO1xuICAgICAgICAgICAgICAgIGlmIChwb2x5Z29uLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBuZXdHZW9tZXRyeS5wdXNoKHBvbHlnb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXdHZW9tZXRyeS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmxpbmVNZXRyaWNzICYmIHR5cGUgPT09ICdMaW5lU3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBuZXdHZW9tZXRyeS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBjbGlwcGVkLnB1c2goY3JlYXRlRmVhdHVyZShmZWF0dXJlLmlkLCB0eXBlLCBuZXdHZW9tZXRyeVtqXSwgZmVhdHVyZS50YWdzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gJ0xpbmVTdHJpbmcnIHx8IHR5cGUgPT09ICdNdWx0aUxpbmVTdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5ld0dlb21ldHJ5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICB0eXBlID0gJ0xpbmVTdHJpbmcnO1xuICAgICAgICAgICAgICAgICAgICBuZXdHZW9tZXRyeSA9IG5ld0dlb21ldHJ5WzBdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSAnTXVsdGlMaW5lU3RyaW5nJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gJ1BvaW50JyB8fCB0eXBlID09PSAnTXVsdGlQb2ludCcpIHtcbiAgICAgICAgICAgICAgICB0eXBlID0gbmV3R2VvbWV0cnkubGVuZ3RoID09PSAzID8gJ1BvaW50JyA6ICdNdWx0aVBvaW50JztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2xpcHBlZC5wdXNoKGNyZWF0ZUZlYXR1cmUoZmVhdHVyZS5pZCwgdHlwZSwgbmV3R2VvbWV0cnksIGZlYXR1cmUudGFncykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsaXBwZWQubGVuZ3RoID8gY2xpcHBlZCA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIGNsaXBQb2ludHMoZ2VvbSwgbmV3R2VvbSwgazEsIGsyLCBheGlzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBnZW9tLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgICAgIHZhciBhID0gZ2VvbVtpICsgYXhpc107XG5cbiAgICAgICAgaWYgKGEgPj0gazEgJiYgYSA8PSBrMikge1xuICAgICAgICAgICAgbmV3R2VvbS5wdXNoKGdlb21baV0pO1xuICAgICAgICAgICAgbmV3R2VvbS5wdXNoKGdlb21baSArIDFdKTtcbiAgICAgICAgICAgIG5ld0dlb20ucHVzaChnZW9tW2kgKyAyXSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNsaXBMaW5lKGdlb20sIG5ld0dlb20sIGsxLCBrMiwgYXhpcywgaXNQb2x5Z29uLCB0cmFja01ldHJpY3MpIHtcblxuICAgIHZhciBzbGljZSA9IG5ld1NsaWNlKGdlb20pO1xuICAgIHZhciBpbnRlcnNlY3QgPSBheGlzID09PSAwID8gaW50ZXJzZWN0WCA6IGludGVyc2VjdFk7XG4gICAgdmFyIGxlbiA9IGdlb20uc3RhcnQ7XG4gICAgdmFyIHNlZ0xlbiwgdDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ2VvbS5sZW5ndGggLSAzOyBpICs9IDMpIHtcbiAgICAgICAgdmFyIGF4ID0gZ2VvbVtpXTtcbiAgICAgICAgdmFyIGF5ID0gZ2VvbVtpICsgMV07XG4gICAgICAgIHZhciBheiA9IGdlb21baSArIDJdO1xuICAgICAgICB2YXIgYnggPSBnZW9tW2kgKyAzXTtcbiAgICAgICAgdmFyIGJ5ID0gZ2VvbVtpICsgNF07XG4gICAgICAgIHZhciBhID0gYXhpcyA9PT0gMCA/IGF4IDogYXk7XG4gICAgICAgIHZhciBiID0gYXhpcyA9PT0gMCA/IGJ4IDogYnk7XG4gICAgICAgIHZhciBleGl0ZWQgPSBmYWxzZTtcblxuICAgICAgICBpZiAodHJhY2tNZXRyaWNzKSBzZWdMZW4gPSBNYXRoLnNxcnQoTWF0aC5wb3coYXggLSBieCwgMikgKyBNYXRoLnBvdyhheSAtIGJ5LCAyKSk7XG5cbiAgICAgICAgaWYgKGEgPCBrMSkge1xuICAgICAgICAgICAgLy8gLS0tfC0tPiAgfCAobGluZSBlbnRlcnMgdGhlIGNsaXAgcmVnaW9uIGZyb20gdGhlIGxlZnQpXG4gICAgICAgICAgICBpZiAoYiA+IGsxKSB7XG4gICAgICAgICAgICAgICAgdCA9IGludGVyc2VjdChzbGljZSwgYXgsIGF5LCBieCwgYnksIGsxKTtcbiAgICAgICAgICAgICAgICBpZiAodHJhY2tNZXRyaWNzKSBzbGljZS5zdGFydCA9IGxlbiArIHNlZ0xlbiAqIHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoYSA+IGsyKSB7XG4gICAgICAgICAgICAvLyB8ICA8LS18LS0tIChsaW5lIGVudGVycyB0aGUgY2xpcCByZWdpb24gZnJvbSB0aGUgcmlnaHQpXG4gICAgICAgICAgICBpZiAoYiA8IGsyKSB7XG4gICAgICAgICAgICAgICAgdCA9IGludGVyc2VjdChzbGljZSwgYXgsIGF5LCBieCwgYnksIGsyKTtcbiAgICAgICAgICAgICAgICBpZiAodHJhY2tNZXRyaWNzKSBzbGljZS5zdGFydCA9IGxlbiArIHNlZ0xlbiAqIHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhZGRQb2ludChzbGljZSwgYXgsIGF5LCBheik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGIgPCBrMSAmJiBhID49IGsxKSB7XG4gICAgICAgICAgICAvLyA8LS18LS0tICB8IG9yIDwtLXwtLS0tLXwtLS0gKGxpbmUgZXhpdHMgdGhlIGNsaXAgcmVnaW9uIG9uIHRoZSBsZWZ0KVxuICAgICAgICAgICAgdCA9IGludGVyc2VjdChzbGljZSwgYXgsIGF5LCBieCwgYnksIGsxKTtcbiAgICAgICAgICAgIGV4aXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGIgPiBrMiAmJiBhIDw9IGsyKSB7XG4gICAgICAgICAgICAvLyB8ICAtLS18LS0+IG9yIC0tLXwtLS0tLXwtLT4gKGxpbmUgZXhpdHMgdGhlIGNsaXAgcmVnaW9uIG9uIHRoZSByaWdodClcbiAgICAgICAgICAgIHQgPSBpbnRlcnNlY3Qoc2xpY2UsIGF4LCBheSwgYngsIGJ5LCBrMik7XG4gICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc1BvbHlnb24gJiYgZXhpdGVkKSB7XG4gICAgICAgICAgICBpZiAodHJhY2tNZXRyaWNzKSBzbGljZS5lbmQgPSBsZW4gKyBzZWdMZW4gKiB0O1xuICAgICAgICAgICAgbmV3R2VvbS5wdXNoKHNsaWNlKTtcbiAgICAgICAgICAgIHNsaWNlID0gbmV3U2xpY2UoZ2VvbSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHJhY2tNZXRyaWNzKSBsZW4gKz0gc2VnTGVuO1xuICAgIH1cblxuICAgIC8vIGFkZCB0aGUgbGFzdCBwb2ludFxuICAgIHZhciBsYXN0ID0gZ2VvbS5sZW5ndGggLSAzO1xuICAgIGF4ID0gZ2VvbVtsYXN0XTtcbiAgICBheSA9IGdlb21bbGFzdCArIDFdO1xuICAgIGF6ID0gZ2VvbVtsYXN0ICsgMl07XG4gICAgYSA9IGF4aXMgPT09IDAgPyBheCA6IGF5O1xuICAgIGlmIChhID49IGsxICYmIGEgPD0gazIpIGFkZFBvaW50KHNsaWNlLCBheCwgYXksIGF6KTtcblxuICAgIC8vIGNsb3NlIHRoZSBwb2x5Z29uIGlmIGl0cyBlbmRwb2ludHMgYXJlIG5vdCB0aGUgc2FtZSBhZnRlciBjbGlwcGluZ1xuICAgIGxhc3QgPSBzbGljZS5sZW5ndGggLSAzO1xuICAgIGlmIChpc1BvbHlnb24gJiYgbGFzdCA+PSAzICYmIChzbGljZVtsYXN0XSAhPT0gc2xpY2VbMF0gfHwgc2xpY2VbbGFzdCArIDFdICE9PSBzbGljZVsxXSkpIHtcbiAgICAgICAgYWRkUG9pbnQoc2xpY2UsIHNsaWNlWzBdLCBzbGljZVsxXSwgc2xpY2VbMl0pO1xuICAgIH1cblxuICAgIC8vIGFkZCB0aGUgZmluYWwgc2xpY2VcbiAgICBpZiAoc2xpY2UubGVuZ3RoKSB7XG4gICAgICAgIG5ld0dlb20ucHVzaChzbGljZSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBuZXdTbGljZShsaW5lKSB7XG4gICAgdmFyIHNsaWNlID0gW107XG4gICAgc2xpY2Uuc2l6ZSA9IGxpbmUuc2l6ZTtcbiAgICBzbGljZS5zdGFydCA9IGxpbmUuc3RhcnQ7XG4gICAgc2xpY2UuZW5kID0gbGluZS5lbmQ7XG4gICAgcmV0dXJuIHNsaWNlO1xufVxuXG5mdW5jdGlvbiBjbGlwTGluZXMoZ2VvbSwgbmV3R2VvbSwgazEsIGsyLCBheGlzLCBpc1BvbHlnb24pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdlb20ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY2xpcExpbmUoZ2VvbVtpXSwgbmV3R2VvbSwgazEsIGsyLCBheGlzLCBpc1BvbHlnb24sIGZhbHNlKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGFkZFBvaW50KG91dCwgeCwgeSwgeikge1xuICAgIG91dC5wdXNoKHgpO1xuICAgIG91dC5wdXNoKHkpO1xuICAgIG91dC5wdXNoKHopO1xufVxuXG5mdW5jdGlvbiBpbnRlcnNlY3RYKG91dCwgYXgsIGF5LCBieCwgYnksIHgpIHtcbiAgICB2YXIgdCA9ICh4IC0gYXgpIC8gKGJ4IC0gYXgpO1xuICAgIG91dC5wdXNoKHgpO1xuICAgIG91dC5wdXNoKGF5ICsgKGJ5IC0gYXkpICogdCk7XG4gICAgb3V0LnB1c2goMSk7XG4gICAgcmV0dXJuIHQ7XG59XG5cbmZ1bmN0aW9uIGludGVyc2VjdFkob3V0LCBheCwgYXksIGJ4LCBieSwgeSkge1xuICAgIHZhciB0ID0gKHkgLSBheSkgLyAoYnkgLSBheSk7XG4gICAgb3V0LnB1c2goYXggKyAoYnggLSBheCkgKiB0KTtcbiAgICBvdXQucHVzaCh5KTtcbiAgICBvdXQucHVzaCgxKTtcbiAgICByZXR1cm4gdDtcbn1cbiIsIlxuaW1wb3J0IGNsaXAgZnJvbSAnLi9jbGlwJztcbmltcG9ydCBjcmVhdGVGZWF0dXJlIGZyb20gJy4vZmVhdHVyZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHdyYXAoZmVhdHVyZXMsIG9wdGlvbnMpIHtcbiAgICB2YXIgYnVmZmVyID0gb3B0aW9ucy5idWZmZXIgLyBvcHRpb25zLmV4dGVudDtcbiAgICB2YXIgbWVyZ2VkID0gZmVhdHVyZXM7XG4gICAgdmFyIGxlZnQgID0gY2xpcChmZWF0dXJlcywgMSwgLTEgLSBidWZmZXIsIGJ1ZmZlciwgICAgIDAsIC0xLCAyLCBvcHRpb25zKTsgLy8gbGVmdCB3b3JsZCBjb3B5XG4gICAgdmFyIHJpZ2h0ID0gY2xpcChmZWF0dXJlcywgMSwgIDEgLSBidWZmZXIsIDIgKyBidWZmZXIsIDAsIC0xLCAyLCBvcHRpb25zKTsgLy8gcmlnaHQgd29ybGQgY29weVxuXG4gICAgaWYgKGxlZnQgfHwgcmlnaHQpIHtcbiAgICAgICAgbWVyZ2VkID0gY2xpcChmZWF0dXJlcywgMSwgLWJ1ZmZlciwgMSArIGJ1ZmZlciwgMCwgLTEsIDIsIG9wdGlvbnMpIHx8IFtdOyAvLyBjZW50ZXIgd29ybGQgY29weVxuXG4gICAgICAgIGlmIChsZWZ0KSBtZXJnZWQgPSBzaGlmdEZlYXR1cmVDb29yZHMobGVmdCwgMSkuY29uY2F0KG1lcmdlZCk7IC8vIG1lcmdlIGxlZnQgaW50byBjZW50ZXJcbiAgICAgICAgaWYgKHJpZ2h0KSBtZXJnZWQgPSBtZXJnZWQuY29uY2F0KHNoaWZ0RmVhdHVyZUNvb3JkcyhyaWdodCwgLTEpKTsgLy8gbWVyZ2UgcmlnaHQgaW50byBjZW50ZXJcbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2VkO1xufVxuXG5mdW5jdGlvbiBzaGlmdEZlYXR1cmVDb29yZHMoZmVhdHVyZXMsIG9mZnNldCkge1xuICAgIHZhciBuZXdGZWF0dXJlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmZWF0dXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZmVhdHVyZSA9IGZlYXR1cmVzW2ldLFxuICAgICAgICAgICAgdHlwZSA9IGZlYXR1cmUudHlwZTtcblxuICAgICAgICB2YXIgbmV3R2VvbWV0cnk7XG5cbiAgICAgICAgaWYgKHR5cGUgPT09ICdQb2ludCcgfHwgdHlwZSA9PT0gJ011bHRpUG9pbnQnIHx8IHR5cGUgPT09ICdMaW5lU3RyaW5nJykge1xuICAgICAgICAgICAgbmV3R2VvbWV0cnkgPSBzaGlmdENvb3JkcyhmZWF0dXJlLmdlb21ldHJ5LCBvZmZzZXQpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ011bHRpTGluZVN0cmluZycgfHwgdHlwZSA9PT0gJ1BvbHlnb24nKSB7XG4gICAgICAgICAgICBuZXdHZW9tZXRyeSA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBmZWF0dXJlLmdlb21ldHJ5Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgbmV3R2VvbWV0cnkucHVzaChzaGlmdENvb3JkcyhmZWF0dXJlLmdlb21ldHJ5W2pdLCBvZmZzZXQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnTXVsdGlQb2x5Z29uJykge1xuICAgICAgICAgICAgbmV3R2VvbWV0cnkgPSBbXTtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBmZWF0dXJlLmdlb21ldHJ5Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5ld1BvbHlnb24gPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGZlYXR1cmUuZ2VvbWV0cnlbal0ubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3UG9seWdvbi5wdXNoKHNoaWZ0Q29vcmRzKGZlYXR1cmUuZ2VvbWV0cnlbal1ba10sIG9mZnNldCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuZXdHZW9tZXRyeS5wdXNoKG5ld1BvbHlnb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbmV3RmVhdHVyZXMucHVzaChjcmVhdGVGZWF0dXJlKGZlYXR1cmUuaWQsIHR5cGUsIG5ld0dlb21ldHJ5LCBmZWF0dXJlLnRhZ3MpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3RmVhdHVyZXM7XG59XG5cbmZ1bmN0aW9uIHNoaWZ0Q29vcmRzKHBvaW50cywgb2Zmc2V0KSB7XG4gICAgdmFyIG5ld1BvaW50cyA9IFtdO1xuICAgIG5ld1BvaW50cy5zaXplID0gcG9pbnRzLnNpemU7XG5cbiAgICBpZiAocG9pbnRzLnN0YXJ0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbmV3UG9pbnRzLnN0YXJ0ID0gcG9pbnRzLnN0YXJ0O1xuICAgICAgICBuZXdQb2ludHMuZW5kID0gcG9pbnRzLmVuZDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkgKz0gMykge1xuICAgICAgICBuZXdQb2ludHMucHVzaChwb2ludHNbaV0gKyBvZmZzZXQsIHBvaW50c1tpICsgMV0sIHBvaW50c1tpICsgMl0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3UG9pbnRzO1xufVxuIiwiXG4vLyBUcmFuc2Zvcm1zIHRoZSBjb29yZGluYXRlcyBvZiBlYWNoIGZlYXR1cmUgaW4gdGhlIGdpdmVuIHRpbGUgZnJvbVxuLy8gbWVyY2F0b3ItcHJvamVjdGVkIHNwYWNlIGludG8gKGV4dGVudCB4IGV4dGVudCkgdGlsZSBzcGFjZS5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRyYW5zZm9ybVRpbGUodGlsZSwgZXh0ZW50KSB7XG4gICAgaWYgKHRpbGUudHJhbnNmb3JtZWQpIHJldHVybiB0aWxlO1xuXG4gICAgdmFyIHoyID0gMSA8PCB0aWxlLnosXG4gICAgICAgIHR4ID0gdGlsZS54LFxuICAgICAgICB0eSA9IHRpbGUueSxcbiAgICAgICAgaSwgaiwgaztcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0aWxlLmZlYXR1cmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBmZWF0dXJlID0gdGlsZS5mZWF0dXJlc1tpXSxcbiAgICAgICAgICAgIGdlb20gPSBmZWF0dXJlLmdlb21ldHJ5LFxuICAgICAgICAgICAgdHlwZSA9IGZlYXR1cmUudHlwZTtcblxuICAgICAgICBmZWF0dXJlLmdlb21ldHJ5ID0gW107XG5cbiAgICAgICAgaWYgKHR5cGUgPT09IDEpIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBnZW9tLmxlbmd0aDsgaiArPSAyKSB7XG4gICAgICAgICAgICAgICAgZmVhdHVyZS5nZW9tZXRyeS5wdXNoKHRyYW5zZm9ybVBvaW50KGdlb21bal0sIGdlb21baiArIDFdLCBleHRlbnQsIHoyLCB0eCwgdHkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBnZW9tLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJpbmcgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgZ2VvbVtqXS5sZW5ndGg7IGsgKz0gMikge1xuICAgICAgICAgICAgICAgICAgICByaW5nLnB1c2godHJhbnNmb3JtUG9pbnQoZ2VvbVtqXVtrXSwgZ2VvbVtqXVtrICsgMV0sIGV4dGVudCwgejIsIHR4LCB0eSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmZWF0dXJlLmdlb21ldHJ5LnB1c2gocmluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aWxlLnRyYW5zZm9ybWVkID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aWxlO1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Qb2ludCh4LCB5LCBleHRlbnQsIHoyLCB0eCwgdHkpIHtcbiAgICByZXR1cm4gW1xuICAgICAgICBNYXRoLnJvdW5kKGV4dGVudCAqICh4ICogejIgLSB0eCkpLFxuICAgICAgICBNYXRoLnJvdW5kKGV4dGVudCAqICh5ICogejIgLSB0eSkpXTtcbn1cbiIsIlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlVGlsZShmZWF0dXJlcywgeiwgdHgsIHR5LCBvcHRpb25zKSB7XG4gICAgdmFyIHRvbGVyYW5jZSA9IHogPT09IG9wdGlvbnMubWF4Wm9vbSA/IDAgOiBvcHRpb25zLnRvbGVyYW5jZSAvICgoMSA8PCB6KSAqIG9wdGlvbnMuZXh0ZW50KTtcbiAgICB2YXIgdGlsZSA9IHtcbiAgICAgICAgZmVhdHVyZXM6IFtdLFxuICAgICAgICBudW1Qb2ludHM6IDAsXG4gICAgICAgIG51bVNpbXBsaWZpZWQ6IDAsXG4gICAgICAgIG51bUZlYXR1cmVzOiAwLFxuICAgICAgICBzb3VyY2U6IG51bGwsXG4gICAgICAgIHg6IHR4LFxuICAgICAgICB5OiB0eSxcbiAgICAgICAgejogeixcbiAgICAgICAgdHJhbnNmb3JtZWQ6IGZhbHNlLFxuICAgICAgICBtaW5YOiAyLFxuICAgICAgICBtaW5ZOiAxLFxuICAgICAgICBtYXhYOiAtMSxcbiAgICAgICAgbWF4WTogMFxuICAgIH07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmZWF0dXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aWxlLm51bUZlYXR1cmVzKys7XG4gICAgICAgIGFkZEZlYXR1cmUodGlsZSwgZmVhdHVyZXNbaV0sIHRvbGVyYW5jZSwgb3B0aW9ucyk7XG5cbiAgICAgICAgdmFyIG1pblggPSBmZWF0dXJlc1tpXS5taW5YO1xuICAgICAgICB2YXIgbWluWSA9IGZlYXR1cmVzW2ldLm1pblk7XG4gICAgICAgIHZhciBtYXhYID0gZmVhdHVyZXNbaV0ubWF4WDtcbiAgICAgICAgdmFyIG1heFkgPSBmZWF0dXJlc1tpXS5tYXhZO1xuXG4gICAgICAgIGlmIChtaW5YIDwgdGlsZS5taW5YKSB0aWxlLm1pblggPSBtaW5YO1xuICAgICAgICBpZiAobWluWSA8IHRpbGUubWluWSkgdGlsZS5taW5ZID0gbWluWTtcbiAgICAgICAgaWYgKG1heFggPiB0aWxlLm1heFgpIHRpbGUubWF4WCA9IG1heFg7XG4gICAgICAgIGlmIChtYXhZID4gdGlsZS5tYXhZKSB0aWxlLm1heFkgPSBtYXhZO1xuICAgIH1cbiAgICByZXR1cm4gdGlsZTtcbn1cblxuZnVuY3Rpb24gYWRkRmVhdHVyZSh0aWxlLCBmZWF0dXJlLCB0b2xlcmFuY2UsIG9wdGlvbnMpIHtcblxuICAgIHZhciBnZW9tID0gZmVhdHVyZS5nZW9tZXRyeSxcbiAgICAgICAgdHlwZSA9IGZlYXR1cmUudHlwZSxcbiAgICAgICAgc2ltcGxpZmllZCA9IFtdO1xuXG4gICAgaWYgKHR5cGUgPT09ICdQb2ludCcgfHwgdHlwZSA9PT0gJ011bHRpUG9pbnQnKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ2VvbS5sZW5ndGg7IGkgKz0gMykge1xuICAgICAgICAgICAgc2ltcGxpZmllZC5wdXNoKGdlb21baV0pO1xuICAgICAgICAgICAgc2ltcGxpZmllZC5wdXNoKGdlb21baSArIDFdKTtcbiAgICAgICAgICAgIHRpbGUubnVtUG9pbnRzKys7XG4gICAgICAgICAgICB0aWxlLm51bVNpbXBsaWZpZWQrKztcbiAgICAgICAgfVxuXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnTGluZVN0cmluZycpIHtcbiAgICAgICAgYWRkTGluZShzaW1wbGlmaWVkLCBnZW9tLCB0aWxlLCB0b2xlcmFuY2UsIGZhbHNlLCBmYWxzZSk7XG5cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdNdWx0aUxpbmVTdHJpbmcnIHx8IHR5cGUgPT09ICdQb2x5Z29uJykge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZ2VvbS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYWRkTGluZShzaW1wbGlmaWVkLCBnZW9tW2ldLCB0aWxlLCB0b2xlcmFuY2UsIHR5cGUgPT09ICdQb2x5Z29uJywgaSA9PT0gMCk7XG4gICAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ011bHRpUG9seWdvbicpIHtcblxuICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGdlb20ubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIHZhciBwb2x5Z29uID0gZ2VvbVtrXTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwb2x5Z29uLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgYWRkTGluZShzaW1wbGlmaWVkLCBwb2x5Z29uW2ldLCB0aWxlLCB0b2xlcmFuY2UsIHRydWUsIGkgPT09IDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNpbXBsaWZpZWQubGVuZ3RoKSB7XG4gICAgICAgIHZhciB0YWdzID0gZmVhdHVyZS50YWdzIHx8IG51bGw7XG4gICAgICAgIGlmICh0eXBlID09PSAnTGluZVN0cmluZycgJiYgb3B0aW9ucy5saW5lTWV0cmljcykge1xuICAgICAgICAgICAgdGFncyA9IHt9O1xuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGZlYXR1cmUudGFncykgdGFnc1trZXldID0gZmVhdHVyZS50YWdzW2tleV07XG4gICAgICAgICAgICB0YWdzWydtYXBib3hfY2xpcF9zdGFydCddID0gZ2VvbS5zdGFydCAvIGdlb20uc2l6ZTtcbiAgICAgICAgICAgIHRhZ3NbJ21hcGJveF9jbGlwX2VuZCddID0gZ2VvbS5lbmQgLyBnZW9tLnNpemU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRpbGVGZWF0dXJlID0ge1xuICAgICAgICAgICAgZ2VvbWV0cnk6IHNpbXBsaWZpZWQsXG4gICAgICAgICAgICB0eXBlOiB0eXBlID09PSAnUG9seWdvbicgfHwgdHlwZSA9PT0gJ011bHRpUG9seWdvbicgPyAzIDpcbiAgICAgICAgICAgICAgICB0eXBlID09PSAnTGluZVN0cmluZycgfHwgdHlwZSA9PT0gJ011bHRpTGluZVN0cmluZycgPyAyIDogMSxcbiAgICAgICAgICAgIHRhZ3M6IHRhZ3NcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGZlYXR1cmUuaWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHRpbGVGZWF0dXJlLmlkID0gZmVhdHVyZS5pZDtcbiAgICAgICAgfVxuICAgICAgICB0aWxlLmZlYXR1cmVzLnB1c2godGlsZUZlYXR1cmUpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gYWRkTGluZShyZXN1bHQsIGdlb20sIHRpbGUsIHRvbGVyYW5jZSwgaXNQb2x5Z29uLCBpc091dGVyKSB7XG4gICAgdmFyIHNxVG9sZXJhbmNlID0gdG9sZXJhbmNlICogdG9sZXJhbmNlO1xuXG4gICAgaWYgKHRvbGVyYW5jZSA+IDAgJiYgKGdlb20uc2l6ZSA8IChpc1BvbHlnb24gPyBzcVRvbGVyYW5jZSA6IHRvbGVyYW5jZSkpKSB7XG4gICAgICAgIHRpbGUubnVtUG9pbnRzICs9IGdlb20ubGVuZ3RoIC8gMztcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciByaW5nID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdlb20ubGVuZ3RoOyBpICs9IDMpIHtcbiAgICAgICAgaWYgKHRvbGVyYW5jZSA9PT0gMCB8fCBnZW9tW2kgKyAyXSA+IHNxVG9sZXJhbmNlKSB7XG4gICAgICAgICAgICB0aWxlLm51bVNpbXBsaWZpZWQrKztcbiAgICAgICAgICAgIHJpbmcucHVzaChnZW9tW2ldKTtcbiAgICAgICAgICAgIHJpbmcucHVzaChnZW9tW2kgKyAxXSk7XG4gICAgICAgIH1cbiAgICAgICAgdGlsZS5udW1Qb2ludHMrKztcbiAgICB9XG5cbiAgICBpZiAoaXNQb2x5Z29uKSByZXdpbmQocmluZywgaXNPdXRlcik7XG5cbiAgICByZXN1bHQucHVzaChyaW5nKTtcbn1cblxuZnVuY3Rpb24gcmV3aW5kKHJpbmcsIGNsb2Nrd2lzZSkge1xuICAgIHZhciBhcmVhID0gMDtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gcmluZy5sZW5ndGgsIGogPSBsZW4gLSAyOyBpIDwgbGVuOyBqID0gaSwgaSArPSAyKSB7XG4gICAgICAgIGFyZWEgKz0gKHJpbmdbaV0gLSByaW5nW2pdKSAqIChyaW5nW2kgKyAxXSArIHJpbmdbaiArIDFdKTtcbiAgICB9XG4gICAgaWYgKGFyZWEgPiAwID09PSBjbG9ja3dpc2UpIHtcbiAgICAgICAgZm9yIChpID0gMCwgbGVuID0gcmluZy5sZW5ndGg7IGkgPCBsZW4gLyAyOyBpICs9IDIpIHtcbiAgICAgICAgICAgIHZhciB4ID0gcmluZ1tpXTtcbiAgICAgICAgICAgIHZhciB5ID0gcmluZ1tpICsgMV07XG4gICAgICAgICAgICByaW5nW2ldID0gcmluZ1tsZW4gLSAyIC0gaV07XG4gICAgICAgICAgICByaW5nW2kgKyAxXSA9IHJpbmdbbGVuIC0gMSAtIGldO1xuICAgICAgICAgICAgcmluZ1tsZW4gLSAyIC0gaV0gPSB4O1xuICAgICAgICAgICAgcmluZ1tsZW4gLSAxIC0gaV0gPSB5O1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiXG5pbXBvcnQgY29udmVydCBmcm9tICcuL2NvbnZlcnQnOyAgICAgLy8gR2VvSlNPTiBjb252ZXJzaW9uIGFuZCBwcmVwcm9jZXNzaW5nXG5pbXBvcnQgY2xpcCBmcm9tICcuL2NsaXAnOyAgICAgICAgICAgLy8gc3RyaXBlIGNsaXBwaW5nIGFsZ29yaXRobVxuaW1wb3J0IHdyYXAgZnJvbSAnLi93cmFwJzsgICAgICAgICAgIC8vIGRhdGUgbGluZSBwcm9jZXNzaW5nXG5pbXBvcnQgdHJhbnNmb3JtIGZyb20gJy4vdHJhbnNmb3JtJzsgLy8gY29vcmRpbmF0ZSB0cmFuc2Zvcm1hdGlvblxuaW1wb3J0IGNyZWF0ZVRpbGUgZnJvbSAnLi90aWxlJzsgICAgIC8vIGZpbmFsIHNpbXBsaWZpZWQgdGlsZSBnZW5lcmF0aW9uXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdlb2pzb252dChkYXRhLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBHZW9KU09OVlQoZGF0YSwgb3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIEdlb0pTT05WVChkYXRhLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyA9IGV4dGVuZChPYmplY3QuY3JlYXRlKHRoaXMub3B0aW9ucyksIG9wdGlvbnMpO1xuXG4gICAgdmFyIGRlYnVnID0gb3B0aW9ucy5kZWJ1ZztcblxuICAgIGlmIChkZWJ1ZykgY29uc29sZS50aW1lKCdwcmVwcm9jZXNzIGRhdGEnKTtcblxuICAgIGlmIChvcHRpb25zLm1heFpvb20gPCAwIHx8IG9wdGlvbnMubWF4Wm9vbSA+IDI0KSB0aHJvdyBuZXcgRXJyb3IoJ21heFpvb20gc2hvdWxkIGJlIGluIHRoZSAwLTI0IHJhbmdlJyk7XG4gICAgaWYgKG9wdGlvbnMucHJvbW90ZUlkICYmIG9wdGlvbnMuZ2VuZXJhdGVJZCkgdGhyb3cgbmV3IEVycm9yKCdwcm9tb3RlSWQgYW5kIGdlbmVyYXRlSWQgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIuJyk7XG5cbiAgICB2YXIgZmVhdHVyZXMgPSBjb252ZXJ0KGRhdGEsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy50aWxlcyA9IHt9O1xuICAgIHRoaXMudGlsZUNvb3JkcyA9IFtdO1xuXG4gICAgaWYgKGRlYnVnKSB7XG4gICAgICAgIGNvbnNvbGUudGltZUVuZCgncHJlcHJvY2VzcyBkYXRhJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdpbmRleDogbWF4Wm9vbTogJWQsIG1heFBvaW50czogJWQnLCBvcHRpb25zLmluZGV4TWF4Wm9vbSwgb3B0aW9ucy5pbmRleE1heFBvaW50cyk7XG4gICAgICAgIGNvbnNvbGUudGltZSgnZ2VuZXJhdGUgdGlsZXMnKTtcbiAgICAgICAgdGhpcy5zdGF0cyA9IHt9O1xuICAgICAgICB0aGlzLnRvdGFsID0gMDtcbiAgICB9XG5cbiAgICBmZWF0dXJlcyA9IHdyYXAoZmVhdHVyZXMsIG9wdGlvbnMpO1xuXG4gICAgLy8gc3RhcnQgc2xpY2luZyBmcm9tIHRoZSB0b3AgdGlsZSBkb3duXG4gICAgaWYgKGZlYXR1cmVzLmxlbmd0aCkgdGhpcy5zcGxpdFRpbGUoZmVhdHVyZXMsIDAsIDAsIDApO1xuXG4gICAgaWYgKGRlYnVnKSB7XG4gICAgICAgIGlmIChmZWF0dXJlcy5sZW5ndGgpIGNvbnNvbGUubG9nKCdmZWF0dXJlczogJWQsIHBvaW50czogJWQnLCB0aGlzLnRpbGVzWzBdLm51bUZlYXR1cmVzLCB0aGlzLnRpbGVzWzBdLm51bVBvaW50cyk7XG4gICAgICAgIGNvbnNvbGUudGltZUVuZCgnZ2VuZXJhdGUgdGlsZXMnKTtcbiAgICAgICAgY29uc29sZS5sb2coJ3RpbGVzIGdlbmVyYXRlZDonLCB0aGlzLnRvdGFsLCBKU09OLnN0cmluZ2lmeSh0aGlzLnN0YXRzKSk7XG4gICAgfVxufVxuXG5HZW9KU09OVlQucHJvdG90eXBlLm9wdGlvbnMgPSB7XG4gICAgbWF4Wm9vbTogMTQsICAgICAgICAgICAgLy8gbWF4IHpvb20gdG8gcHJlc2VydmUgZGV0YWlsIG9uXG4gICAgaW5kZXhNYXhab29tOiA1LCAgICAgICAgLy8gbWF4IHpvb20gaW4gdGhlIHRpbGUgaW5kZXhcbiAgICBpbmRleE1heFBvaW50czogMTAwMDAwLCAvLyBtYXggbnVtYmVyIG9mIHBvaW50cyBwZXIgdGlsZSBpbiB0aGUgdGlsZSBpbmRleFxuICAgIHRvbGVyYW5jZTogMywgICAgICAgICAgIC8vIHNpbXBsaWZpY2F0aW9uIHRvbGVyYW5jZSAoaGlnaGVyIG1lYW5zIHNpbXBsZXIpXG4gICAgZXh0ZW50OiA0MDk2LCAgICAgICAgICAgLy8gdGlsZSBleHRlbnRcbiAgICBidWZmZXI6IDY0LCAgICAgICAgICAgICAvLyB0aWxlIGJ1ZmZlciBvbiBlYWNoIHNpZGVcbiAgICBsaW5lTWV0cmljczogZmFsc2UsICAgICAvLyB3aGV0aGVyIHRvIGNhbGN1bGF0ZSBsaW5lIG1ldHJpY3NcbiAgICBwcm9tb3RlSWQ6IG51bGwsICAgICAgICAvLyBuYW1lIG9mIGEgZmVhdHVyZSBwcm9wZXJ0eSB0byBiZSBwcm9tb3RlZCB0byBmZWF0dXJlLmlkXG4gICAgZ2VuZXJhdGVJZDogZmFsc2UsICAgICAgLy8gd2hldGhlciB0byBnZW5lcmF0ZSBmZWF0dXJlIGlkcy4gQ2Fubm90IGJlIHVzZWQgd2l0aCBwcm9tb3RlSWRcbiAgICBkZWJ1ZzogMCAgICAgICAgICAgICAgICAvLyBsb2dnaW5nIGxldmVsICgwLCAxIG9yIDIpXG59O1xuXG5HZW9KU09OVlQucHJvdG90eXBlLnNwbGl0VGlsZSA9IGZ1bmN0aW9uIChmZWF0dXJlcywgeiwgeCwgeSwgY3osIGN4LCBjeSkge1xuXG4gICAgdmFyIHN0YWNrID0gW2ZlYXR1cmVzLCB6LCB4LCB5XSxcbiAgICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyxcbiAgICAgICAgZGVidWcgPSBvcHRpb25zLmRlYnVnO1xuXG4gICAgLy8gYXZvaWQgcmVjdXJzaW9uIGJ5IHVzaW5nIGEgcHJvY2Vzc2luZyBxdWV1ZVxuICAgIHdoaWxlIChzdGFjay5sZW5ndGgpIHtcbiAgICAgICAgeSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICB4ID0gc3RhY2sucG9wKCk7XG4gICAgICAgIHogPSBzdGFjay5wb3AoKTtcbiAgICAgICAgZmVhdHVyZXMgPSBzdGFjay5wb3AoKTtcblxuICAgICAgICB2YXIgejIgPSAxIDw8IHosXG4gICAgICAgICAgICBpZCA9IHRvSUQoeiwgeCwgeSksXG4gICAgICAgICAgICB0aWxlID0gdGhpcy50aWxlc1tpZF07XG5cbiAgICAgICAgaWYgKCF0aWxlKSB7XG4gICAgICAgICAgICBpZiAoZGVidWcgPiAxKSBjb25zb2xlLnRpbWUoJ2NyZWF0aW9uJyk7XG5cbiAgICAgICAgICAgIHRpbGUgPSB0aGlzLnRpbGVzW2lkXSA9IGNyZWF0ZVRpbGUoZmVhdHVyZXMsIHosIHgsIHksIG9wdGlvbnMpO1xuICAgICAgICAgICAgdGhpcy50aWxlQ29vcmRzLnB1c2goe3o6IHosIHg6IHgsIHk6IHl9KTtcblxuICAgICAgICAgICAgaWYgKGRlYnVnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRlYnVnID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygndGlsZSB6JWQtJWQtJWQgKGZlYXR1cmVzOiAlZCwgcG9pbnRzOiAlZCwgc2ltcGxpZmllZDogJWQpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHosIHgsIHksIHRpbGUubnVtRmVhdHVyZXMsIHRpbGUubnVtUG9pbnRzLCB0aWxlLm51bVNpbXBsaWZpZWQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLnRpbWVFbmQoJ2NyZWF0aW9uJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBrZXkgPSAneicgKyB6O1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdHNba2V5XSA9ICh0aGlzLnN0YXRzW2tleV0gfHwgMCkgKyAxO1xuICAgICAgICAgICAgICAgIHRoaXMudG90YWwrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNhdmUgcmVmZXJlbmNlIHRvIG9yaWdpbmFsIGdlb21ldHJ5IGluIHRpbGUgc28gdGhhdCB3ZSBjYW4gZHJpbGwgZG93biBsYXRlciBpZiB3ZSBzdG9wIG5vd1xuICAgICAgICB0aWxlLnNvdXJjZSA9IGZlYXR1cmVzO1xuXG4gICAgICAgIC8vIGlmIGl0J3MgdGhlIGZpcnN0LXBhc3MgdGlsaW5nXG4gICAgICAgIGlmICghY3opIHtcbiAgICAgICAgICAgIC8vIHN0b3AgdGlsaW5nIGlmIHdlIHJlYWNoZWQgbWF4IHpvb20sIG9yIGlmIHRoZSB0aWxlIGlzIHRvbyBzaW1wbGVcbiAgICAgICAgICAgIGlmICh6ID09PSBvcHRpb25zLmluZGV4TWF4Wm9vbSB8fCB0aWxlLm51bVBvaW50cyA8PSBvcHRpb25zLmluZGV4TWF4UG9pbnRzKSBjb250aW51ZTtcblxuICAgICAgICAvLyBpZiBhIGRyaWxsZG93biB0byBhIHNwZWNpZmljIHRpbGVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHN0b3AgdGlsaW5nIGlmIHdlIHJlYWNoZWQgYmFzZSB6b29tIG9yIG91ciB0YXJnZXQgdGlsZSB6b29tXG4gICAgICAgICAgICBpZiAoeiA9PT0gb3B0aW9ucy5tYXhab29tIHx8IHogPT09IGN6KSBjb250aW51ZTtcblxuICAgICAgICAgICAgLy8gc3RvcCB0aWxpbmcgaWYgaXQncyBub3QgYW4gYW5jZXN0b3Igb2YgdGhlIHRhcmdldCB0aWxlXG4gICAgICAgICAgICB2YXIgbSA9IDEgPDwgKGN6IC0geik7XG4gICAgICAgICAgICBpZiAoeCAhPT0gTWF0aC5mbG9vcihjeCAvIG0pIHx8IHkgIT09IE1hdGguZmxvb3IoY3kgLyBtKSkgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB3ZSBzbGljZSBmdXJ0aGVyIGRvd24sIG5vIG5lZWQgdG8ga2VlcCBzb3VyY2UgZ2VvbWV0cnlcbiAgICAgICAgdGlsZS5zb3VyY2UgPSBudWxsO1xuXG4gICAgICAgIGlmIChmZWF0dXJlcy5sZW5ndGggPT09IDApIGNvbnRpbnVlO1xuXG4gICAgICAgIGlmIChkZWJ1ZyA+IDEpIGNvbnNvbGUudGltZSgnY2xpcHBpbmcnKTtcblxuICAgICAgICAvLyB2YWx1ZXMgd2UnbGwgdXNlIGZvciBjbGlwcGluZ1xuICAgICAgICB2YXIgazEgPSAwLjUgKiBvcHRpb25zLmJ1ZmZlciAvIG9wdGlvbnMuZXh0ZW50LFxuICAgICAgICAgICAgazIgPSAwLjUgLSBrMSxcbiAgICAgICAgICAgIGszID0gMC41ICsgazEsXG4gICAgICAgICAgICBrNCA9IDEgKyBrMSxcbiAgICAgICAgICAgIHRsLCBibCwgdHIsIGJyLCBsZWZ0LCByaWdodDtcblxuICAgICAgICB0bCA9IGJsID0gdHIgPSBiciA9IG51bGw7XG5cbiAgICAgICAgbGVmdCAgPSBjbGlwKGZlYXR1cmVzLCB6MiwgeCAtIGsxLCB4ICsgazMsIDAsIHRpbGUubWluWCwgdGlsZS5tYXhYLCBvcHRpb25zKTtcbiAgICAgICAgcmlnaHQgPSBjbGlwKGZlYXR1cmVzLCB6MiwgeCArIGsyLCB4ICsgazQsIDAsIHRpbGUubWluWCwgdGlsZS5tYXhYLCBvcHRpb25zKTtcbiAgICAgICAgZmVhdHVyZXMgPSBudWxsO1xuXG4gICAgICAgIGlmIChsZWZ0KSB7XG4gICAgICAgICAgICB0bCA9IGNsaXAobGVmdCwgejIsIHkgLSBrMSwgeSArIGszLCAxLCB0aWxlLm1pblksIHRpbGUubWF4WSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBibCA9IGNsaXAobGVmdCwgejIsIHkgKyBrMiwgeSArIGs0LCAxLCB0aWxlLm1pblksIHRpbGUubWF4WSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBsZWZ0ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyaWdodCkge1xuICAgICAgICAgICAgdHIgPSBjbGlwKHJpZ2h0LCB6MiwgeSAtIGsxLCB5ICsgazMsIDEsIHRpbGUubWluWSwgdGlsZS5tYXhZLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGJyID0gY2xpcChyaWdodCwgejIsIHkgKyBrMiwgeSArIGs0LCAxLCB0aWxlLm1pblksIHRpbGUubWF4WSwgb3B0aW9ucyk7XG4gICAgICAgICAgICByaWdodCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVidWcgPiAxKSBjb25zb2xlLnRpbWVFbmQoJ2NsaXBwaW5nJyk7XG5cbiAgICAgICAgc3RhY2sucHVzaCh0bCB8fCBbXSwgeiArIDEsIHggKiAyLCAgICAgeSAqIDIpO1xuICAgICAgICBzdGFjay5wdXNoKGJsIHx8IFtdLCB6ICsgMSwgeCAqIDIsICAgICB5ICogMiArIDEpO1xuICAgICAgICBzdGFjay5wdXNoKHRyIHx8IFtdLCB6ICsgMSwgeCAqIDIgKyAxLCB5ICogMik7XG4gICAgICAgIHN0YWNrLnB1c2goYnIgfHwgW10sIHogKyAxLCB4ICogMiArIDEsIHkgKiAyICsgMSk7XG4gICAgfVxufTtcblxuR2VvSlNPTlZULnByb3RvdHlwZS5nZXRUaWxlID0gZnVuY3Rpb24gKHosIHgsIHkpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyxcbiAgICAgICAgZXh0ZW50ID0gb3B0aW9ucy5leHRlbnQsXG4gICAgICAgIGRlYnVnID0gb3B0aW9ucy5kZWJ1ZztcblxuICAgIGlmICh6IDwgMCB8fCB6ID4gMjQpIHJldHVybiBudWxsO1xuXG4gICAgdmFyIHoyID0gMSA8PCB6O1xuICAgIHggPSAoKHggJSB6MikgKyB6MikgJSB6MjsgLy8gd3JhcCB0aWxlIHggY29vcmRpbmF0ZVxuXG4gICAgdmFyIGlkID0gdG9JRCh6LCB4LCB5KTtcbiAgICBpZiAodGhpcy50aWxlc1tpZF0pIHJldHVybiB0cmFuc2Zvcm0odGhpcy50aWxlc1tpZF0sIGV4dGVudCk7XG5cbiAgICBpZiAoZGVidWcgPiAxKSBjb25zb2xlLmxvZygnZHJpbGxpbmcgZG93biB0byB6JWQtJWQtJWQnLCB6LCB4LCB5KTtcblxuICAgIHZhciB6MCA9IHosXG4gICAgICAgIHgwID0geCxcbiAgICAgICAgeTAgPSB5LFxuICAgICAgICBwYXJlbnQ7XG5cbiAgICB3aGlsZSAoIXBhcmVudCAmJiB6MCA+IDApIHtcbiAgICAgICAgejAtLTtcbiAgICAgICAgeDAgPSBNYXRoLmZsb29yKHgwIC8gMik7XG4gICAgICAgIHkwID0gTWF0aC5mbG9vcih5MCAvIDIpO1xuICAgICAgICBwYXJlbnQgPSB0aGlzLnRpbGVzW3RvSUQoejAsIHgwLCB5MCldO1xuICAgIH1cblxuICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQuc291cmNlKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIGlmIHdlIGZvdW5kIGEgcGFyZW50IHRpbGUgY29udGFpbmluZyB0aGUgb3JpZ2luYWwgZ2VvbWV0cnksIHdlIGNhbiBkcmlsbCBkb3duIGZyb20gaXRcbiAgICBpZiAoZGVidWcgPiAxKSBjb25zb2xlLmxvZygnZm91bmQgcGFyZW50IHRpbGUgeiVkLSVkLSVkJywgejAsIHgwLCB5MCk7XG5cbiAgICBpZiAoZGVidWcgPiAxKSBjb25zb2xlLnRpbWUoJ2RyaWxsaW5nIGRvd24nKTtcbiAgICB0aGlzLnNwbGl0VGlsZShwYXJlbnQuc291cmNlLCB6MCwgeDAsIHkwLCB6LCB4LCB5KTtcbiAgICBpZiAoZGVidWcgPiAxKSBjb25zb2xlLnRpbWVFbmQoJ2RyaWxsaW5nIGRvd24nKTtcblxuICAgIHJldHVybiB0aGlzLnRpbGVzW2lkXSA/IHRyYW5zZm9ybSh0aGlzLnRpbGVzW2lkXSwgZXh0ZW50KSA6IG51bGw7XG59O1xuXG5mdW5jdGlvbiB0b0lEKHosIHgsIHkpIHtcbiAgICByZXR1cm4gKCgoMSA8PCB6KSAqIHkgKyB4KSAqIDMyKSArIHo7XG59XG5cbmZ1bmN0aW9uIGV4dGVuZChkZXN0LCBzcmMpIHtcbiAgICBmb3IgKHZhciBpIGluIHNyYykgZGVzdFtpXSA9IHNyY1tpXTtcbiAgICByZXR1cm4gZGVzdDtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7Z2V0SlNPTn0gZnJvbSAnLi4vdXRpbC9hamF4JztcblxuaW1wb3J0IHtSZXF1ZXN0UGVyZm9ybWFuY2V9IGZyb20gJy4uL3V0aWwvcGVyZm9ybWFuY2UnO1xuaW1wb3J0IHJld2luZCBmcm9tICdAbWFwYm94L2dlb2pzb24tcmV3aW5kJztcbmltcG9ydCBHZW9KU09OV3JhcHBlciBmcm9tICcuL2dlb2pzb25fd3JhcHBlcic7XG5pbXBvcnQgdnRwYmYgZnJvbSAndnQtcGJmJztcbmltcG9ydCBTdXBlcmNsdXN0ZXIgZnJvbSAnc3VwZXJjbHVzdGVyJztcbmltcG9ydCBnZW9qc29udnQgZnJvbSAnZ2VvanNvbi12dCc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgVmVjdG9yVGlsZVdvcmtlclNvdXJjZSBmcm9tICcuL3ZlY3Rvcl90aWxlX3dvcmtlcl9zb3VyY2UnO1xuaW1wb3J0IHtjcmVhdGVFeHByZXNzaW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24nO1xuXG5pbXBvcnQgdHlwZSB7XG4gICAgV29ya2VyVGlsZVBhcmFtZXRlcnMsXG4gICAgV29ya2VyVGlsZUNhbGxiYWNrLFxufSBmcm9tICcuLi9zb3VyY2Uvd29ya2VyX3NvdXJjZSc7XG5cbmltcG9ydCB0eXBlIEFjdG9yIGZyb20gJy4uL3V0aWwvYWN0b3InO1xuaW1wb3J0IHR5cGUgU3R5bGVMYXllckluZGV4IGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyX2luZGV4JztcblxuaW1wb3J0IHR5cGUge0xvYWRWZWN0b3JEYXRhQ2FsbGJhY2t9IGZyb20gJy4vdmVjdG9yX3RpbGVfd29ya2VyX3NvdXJjZSc7XG5pbXBvcnQgdHlwZSB7UmVxdWVzdFBhcmFtZXRlcnMsIFJlc3BvbnNlQ2FsbGJhY2t9IGZyb20gJy4uL3V0aWwvYWpheCc7XG5pbXBvcnQgdHlwZSB7Q2FsbGJhY2t9IGZyb20gJy4uL3R5cGVzL2NhbGxiYWNrJztcbmltcG9ydCB0eXBlIHtHZW9KU09ORmVhdHVyZX0gZnJvbSAnQG1hcGJveC9nZW9qc29uLXR5cGVzJztcblxuZXhwb3J0IHR5cGUgTG9hZEdlb0pTT05QYXJhbWV0ZXJzID0ge1xuICAgIHJlcXVlc3Q/OiBSZXF1ZXN0UGFyYW1ldGVycyxcbiAgICBkYXRhPzogc3RyaW5nLFxuICAgIHNvdXJjZTogc3RyaW5nLFxuICAgIGNsdXN0ZXI6IGJvb2xlYW4sXG4gICAgc3VwZXJjbHVzdGVyT3B0aW9ucz86IE9iamVjdCxcbiAgICBnZW9qc29uVnRPcHRpb25zPzogT2JqZWN0LFxuICAgIGNsdXN0ZXJQcm9wZXJ0aWVzPzogT2JqZWN0XG59O1xuXG5leHBvcnQgdHlwZSBMb2FkR2VvSlNPTiA9IChwYXJhbXM6IExvYWRHZW9KU09OUGFyYW1ldGVycywgY2FsbGJhY2s6IFJlc3BvbnNlQ2FsbGJhY2s8T2JqZWN0PikgPT4gdm9pZDtcblxuZXhwb3J0IGludGVyZmFjZSBHZW9KU09OSW5kZXgge1xuICAgIGdldFRpbGUoejogbnVtYmVyLCB4OiBudW1iZXIsIHk6IG51bWJlcik6IE9iamVjdDtcblxuICAgIC8vIHN1cGVyY2x1c3RlciBtZXRob2RzXG4gICAgZ2V0Q2x1c3RlckV4cGFuc2lvblpvb20oY2x1c3RlcklkOiBudW1iZXIpOiBudW1iZXI7XG4gICAgZ2V0Q2hpbGRyZW4oY2x1c3RlcklkOiBudW1iZXIpOiBBcnJheTxHZW9KU09ORmVhdHVyZT47XG4gICAgZ2V0TGVhdmVzKGNsdXN0ZXJJZDogbnVtYmVyLCBsaW1pdDogbnVtYmVyLCBvZmZzZXQ6IG51bWJlcik6IEFycmF5PEdlb0pTT05GZWF0dXJlPjtcbn1cblxuZnVuY3Rpb24gbG9hZEdlb0pTT05UaWxlKHBhcmFtczogV29ya2VyVGlsZVBhcmFtZXRlcnMsIGNhbGxiYWNrOiBMb2FkVmVjdG9yRGF0YUNhbGxiYWNrKSB7XG4gICAgY29uc3QgY2Fub25pY2FsID0gcGFyYW1zLnRpbGVJRC5jYW5vbmljYWw7XG5cbiAgICBpZiAoIXRoaXMuX2dlb0pTT05JbmRleCkge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgbnVsbCk7ICAvLyB3ZSBjb3VsZG4ndCBsb2FkIHRoZSBmaWxlXG4gICAgfVxuXG4gICAgY29uc3QgZ2VvSlNPTlRpbGUgPSB0aGlzLl9nZW9KU09OSW5kZXguZ2V0VGlsZShjYW5vbmljYWwueiwgY2Fub25pY2FsLngsIGNhbm9uaWNhbC55KTtcbiAgICBpZiAoIWdlb0pTT05UaWxlKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCBudWxsKTsgLy8gbm90aGluZyBpbiB0aGUgZ2l2ZW4gdGlsZVxuICAgIH1cblxuICAgIGNvbnN0IGdlb2pzb25XcmFwcGVyID0gbmV3IEdlb0pTT05XcmFwcGVyKGdlb0pTT05UaWxlLmZlYXR1cmVzKTtcblxuICAgIC8vIEVuY29kZSB0aGUgZ2VvanNvbi12dCB0aWxlIGludG8gYmluYXJ5IHZlY3RvciB0aWxlIGZvcm0uICBUaGlzXG4gICAgLy8gaXMgYSBjb252ZW5pZW5jZSB0aGF0IGFsbG93cyBgRmVhdHVyZUluZGV4YCB0byBvcGVyYXRlIHRoZSBzYW1lIHdheVxuICAgIC8vIGFjcm9zcyBgVmVjdG9yVGlsZVNvdXJjZWAgYW5kIGBHZW9KU09OU291cmNlYCBkYXRhLlxuICAgIGxldCBwYmYgPSB2dHBiZihnZW9qc29uV3JhcHBlcik7XG4gICAgaWYgKHBiZi5ieXRlT2Zmc2V0ICE9PSAwIHx8IHBiZi5ieXRlTGVuZ3RoICE9PSBwYmYuYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgLy8gQ29tcGF0aWJpbGl0eSB3aXRoIG5vZGUgQnVmZmVyIChodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L3BiZi9pc3N1ZXMvMzUpXG4gICAgICAgIHBiZiA9IG5ldyBVaW50OEFycmF5KHBiZik7XG4gICAgfVxuXG4gICAgY2FsbGJhY2sobnVsbCwge1xuICAgICAgICB2ZWN0b3JUaWxlOiBnZW9qc29uV3JhcHBlcixcbiAgICAgICAgcmF3RGF0YTogcGJmLmJ1ZmZlclxuICAgIH0pO1xufVxuXG5leHBvcnQgdHlwZSBTb3VyY2VTdGF0ZSA9XG4gICAgfCAnSWRsZScgICAgICAgICAgICAvLyBTb3VyY2UgZW1wdHkgb3IgZGF0YSBsb2FkZWRcbiAgICB8ICdDb2FsZXNjaW5nJyAgICAgIC8vIERhdGEgZmluaXNoZWQgbG9hZGluZywgYnV0IGRpc2NhcmQgJ2xvYWREYXRhJyBtZXNzYWdlcyB1bnRpbCByZWNlaXZpbmcgJ2NvYWxlc2NlZCdcbiAgICB8ICdOZWVkc0xvYWREYXRhJzsgIC8vICdsb2FkRGF0YScgcmVjZWl2ZWQgd2hpbGUgY29hbGVzY2luZywgdHJpZ2dlciBvbmUgbW9yZSAnbG9hZERhdGEnIG9uIHJlY2VpdmluZyAnY29hbGVzY2VkJ1xuXG4vKipcbiAqIFRoZSB7QGxpbmsgV29ya2VyU291cmNlfSBpbXBsZW1lbnRhdGlvbiB0aGF0IHN1cHBvcnRzIHtAbGluayBHZW9KU09OU291cmNlfS5cbiAqIFRoaXMgY2xhc3MgaXMgZGVzaWduZWQgdG8gYmUgZWFzaWx5IHJldXNlZCB0byBzdXBwb3J0IGN1c3RvbSBzb3VyY2UgdHlwZXNcbiAqIGZvciBkYXRhIGZvcm1hdHMgdGhhdCBjYW4gYmUgcGFyc2VkL2NvbnZlcnRlZCBpbnRvIGFuIGluLW1lbW9yeSBHZW9KU09OXG4gKiByZXByZXNlbnRhdGlvbi4gIFRvIGRvIHNvLCBjcmVhdGUgaXQgd2l0aFxuICogYG5ldyBHZW9KU09OV29ya2VyU291cmNlKGFjdG9yLCBsYXllckluZGV4LCBjdXN0b21Mb2FkR2VvSlNPTkZ1bmN0aW9uKWAuXG4gKiBGb3IgYSBmdWxsIGV4YW1wbGUsIHNlZSBbbWFwYm94LWdsLXRvcG9qc29uXShodHRwczovL2dpdGh1Yi5jb20vZGV2ZWxvcG1lbnRzZWVkL21hcGJveC1nbC10b3BvanNvbikuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgR2VvSlNPTldvcmtlclNvdXJjZSBleHRlbmRzIFZlY3RvclRpbGVXb3JrZXJTb3VyY2Uge1xuICAgIGxvYWRHZW9KU09OOiBMb2FkR2VvSlNPTjtcbiAgICBfc3RhdGU6IFNvdXJjZVN0YXRlO1xuICAgIF9wZW5kaW5nQ2FsbGJhY2s6IENhbGxiYWNrPHtcbiAgICAgICAgcmVzb3VyY2VUaW1pbmc/OiB7W186IHN0cmluZ106IEFycmF5PFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmc+fSxcbiAgICAgICAgYWJhbmRvbmVkPzogYm9vbGVhbiB9PjtcbiAgICBfcGVuZGluZ0xvYWREYXRhUGFyYW1zOiBMb2FkR2VvSlNPTlBhcmFtZXRlcnM7XG4gICAgX2dlb0pTT05JbmRleDogR2VvSlNPTkluZGV4XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gW2xvYWRHZW9KU09OXSBPcHRpb25hbCBtZXRob2QgZm9yIGN1c3RvbSBsb2FkaW5nL3BhcnNpbmcgb2ZcbiAgICAgKiBHZW9KU09OIGJhc2VkIG9uIHBhcmFtZXRlcnMgcGFzc2VkIGZyb20gdGhlIG1haW4tdGhyZWFkIFNvdXJjZS5cbiAgICAgKiBTZWUge0BsaW5rIEdlb0pTT05Xb3JrZXJTb3VyY2UjbG9hZEdlb0pTT059LlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoYWN0b3I6IEFjdG9yLCBsYXllckluZGV4OiBTdHlsZUxheWVySW5kZXgsIGF2YWlsYWJsZUltYWdlczogQXJyYXk8c3RyaW5nPiwgbG9hZEdlb0pTT046ID9Mb2FkR2VvSlNPTikge1xuICAgICAgICBzdXBlcihhY3RvciwgbGF5ZXJJbmRleCwgYXZhaWxhYmxlSW1hZ2VzLCBsb2FkR2VvSlNPTlRpbGUpO1xuICAgICAgICBpZiAobG9hZEdlb0pTT04pIHtcbiAgICAgICAgICAgIHRoaXMubG9hZEdlb0pTT04gPSBsb2FkR2VvSlNPTjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZldGNoZXMgKGlmIGFwcHJvcHJpYXRlKSwgcGFyc2VzLCBhbmQgaW5kZXggZ2VvanNvbiBkYXRhIGludG8gdGlsZXMuIFRoaXNcbiAgICAgKiBwcmVwYXJhdG9yeSBtZXRob2QgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIHtAbGluayBHZW9KU09OV29ya2VyU291cmNlI2xvYWRUaWxlfVxuICAgICAqIGNhbiBjb3JyZWN0bHkgc2VydmUgdXAgdGlsZXMuXG4gICAgICpcbiAgICAgKiBEZWZlcnMgdG8ge0BsaW5rIEdlb0pTT05Xb3JrZXJTb3VyY2UjbG9hZEdlb0pTT059IGZvciB0aGUgZmV0Y2hpbmcvcGFyc2luZyxcbiAgICAgKiBleHBlY3RpbmcgYGNhbGxiYWNrKGVycm9yLCBkYXRhKWAgdG8gYmUgY2FsbGVkIHdpdGggZWl0aGVyIGFuIGVycm9yIG9yIGFcbiAgICAgKiBwYXJzZWQgR2VvSlNPTiBvYmplY3QuXG4gICAgICpcbiAgICAgKiBXaGVuIGBsb2FkRGF0YWAgcmVxdWVzdHMgY29tZSBpbiBmYXN0ZXIgdGhhbiB0aGV5IGNhbiBiZSBwcm9jZXNzZWQsXG4gICAgICogdGhleSBhcmUgY29hbGVzY2VkIGludG8gYSBzaW5nbGUgcmVxdWVzdCB1c2luZyB0aGUgbGF0ZXN0IGRhdGEuXG4gICAgICogU2VlIHtAbGluayBHZW9KU09OV29ya2VyU291cmNlI2NvYWxlc2NlfVxuICAgICAqXG4gICAgICogQHBhcmFtIHBhcmFtc1xuICAgICAqIEBwYXJhbSBjYWxsYmFja1xuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgbG9hZERhdGEocGFyYW1zOiBMb2FkR2VvSlNPTlBhcmFtZXRlcnMsIGNhbGxiYWNrOiBDYWxsYmFjazx7XG4gICAgICAgIHJlc291cmNlVGltaW5nPzoge1tfOiBzdHJpbmddOiBBcnJheTxQZXJmb3JtYW5jZVJlc291cmNlVGltaW5nPn0sXG4gICAgICAgIGFiYW5kb25lZD86IGJvb2xlYW4gfT4pIHtcbiAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmdDYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gVGVsbCB0aGUgZm9yZWdyb3VuZCB0aGUgcHJldmlvdXMgY2FsbCBoYXMgYmVlbiBhYmFuZG9uZWRcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdDYWxsYmFjayhudWxsLCB7YWJhbmRvbmVkOiB0cnVlfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcGVuZGluZ0NhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgIHRoaXMuX3BlbmRpbmdMb2FkRGF0YVBhcmFtcyA9IHBhcmFtcztcblxuICAgICAgICBpZiAodGhpcy5fc3RhdGUgJiZcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlICE9PSAnSWRsZScpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gJ05lZWRzTG9hZERhdGEnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAnQ29hbGVzY2luZyc7XG4gICAgICAgICAgICB0aGlzLl9sb2FkRGF0YSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgaW1wbGVtZW50YXRpb246IGNhbGxlZCBkaXJlY3RseSBieSBgbG9hZERhdGFgXG4gICAgICogb3IgYnkgYGNvYWxlc2NlYCB1c2luZyBzdG9yZWQgcGFyYW1ldGVycy5cbiAgICAgKi9cbiAgICBfbG9hZERhdGEoKSB7XG4gICAgICAgIGlmICghdGhpcy5fcGVuZGluZ0NhbGxiYWNrIHx8ICF0aGlzLl9wZW5kaW5nTG9hZERhdGFQYXJhbXMpIHtcbiAgICAgICAgICAgIGFzc2VydChmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2FsbGJhY2sgPSB0aGlzLl9wZW5kaW5nQ2FsbGJhY2s7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuX3BlbmRpbmdMb2FkRGF0YVBhcmFtcztcbiAgICAgICAgZGVsZXRlIHRoaXMuX3BlbmRpbmdDYWxsYmFjaztcbiAgICAgICAgZGVsZXRlIHRoaXMuX3BlbmRpbmdMb2FkRGF0YVBhcmFtcztcblxuICAgICAgICBjb25zdCBwZXJmID0gKHBhcmFtcyAmJiBwYXJhbXMucmVxdWVzdCAmJiBwYXJhbXMucmVxdWVzdC5jb2xsZWN0UmVzb3VyY2VUaW1pbmcpID9cbiAgICAgICAgICAgIG5ldyBSZXF1ZXN0UGVyZm9ybWFuY2UocGFyYW1zLnJlcXVlc3QpIDogZmFsc2U7XG5cbiAgICAgICAgdGhpcy5sb2FkR2VvSlNPTihwYXJhbXMsIChlcnI6ID9FcnJvciwgZGF0YTogP09iamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKGVyciB8fCAhZGF0YSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobmV3IEVycm9yKGBJbnB1dCBkYXRhIGdpdmVuIHRvICcke3BhcmFtcy5zb3VyY2V9JyBpcyBub3QgYSB2YWxpZCBHZW9KU09OIG9iamVjdC5gKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJld2luZChkYXRhLCB0cnVlKTtcblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2dlb0pTT05JbmRleCA9IHBhcmFtcy5jbHVzdGVyID9cbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTdXBlcmNsdXN0ZXIoZ2V0U3VwZXJjbHVzdGVyT3B0aW9ucyhwYXJhbXMpKS5sb2FkKGRhdGEuZmVhdHVyZXMpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlb2pzb252dChkYXRhLCBwYXJhbXMuZ2VvanNvblZ0T3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMubG9hZGVkID0ge307XG5cbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgICAgICAgICBpZiAocGVyZikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNvdXJjZVRpbWluZ0RhdGEgPSBwZXJmLmZpbmlzaCgpO1xuICAgICAgICAgICAgICAgICAgICAvLyBpdCdzIG5lY2Vzc2FyeSB0byBldmFsIHRoZSByZXN1bHQgb2YgZ2V0RW50cmllc0J5TmFtZSgpIGhlcmUgdmlhIHBhcnNlL3N0cmluZ2lmeVxuICAgICAgICAgICAgICAgICAgICAvLyBsYXRlIGV2YWx1YXRpb24gaW4gdGhlIG1haW4gdGhyZWFkIGNhdXNlcyBUeXBlRXJyb3I6IGlsbGVnYWwgaW52b2NhdGlvblxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzb3VyY2VUaW1pbmdEYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucmVzb3VyY2VUaW1pbmcgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5yZXNvdXJjZVRpbWluZ1twYXJhbXMuc291cmNlXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocmVzb3VyY2VUaW1pbmdEYXRhKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hpbGUgcHJvY2Vzc2luZyBgbG9hZERhdGFgLCB3ZSBjb2FsZXNjZSBhbGwgZnVydGhlclxuICAgICAqIGBsb2FkRGF0YWAgbWVzc2FnZXMgaW50byBhIHNpbmdsZSBjYWxsIHRvIF9sb2FkRGF0YVxuICAgICAqIHRoYXQgd2lsbCBoYXBwZW4gb25jZSB3ZSd2ZSBmaW5pc2hlZCBwcm9jZXNzaW5nIHRoZVxuICAgICAqIGZpcnN0IG1lc3NhZ2UuIHtAbGluayBHZW9KU09OU291cmNlI191cGRhdGVXb3JrZXJEYXRhfVxuICAgICAqIGlzIHJlc3BvbnNpYmxlIGZvciBzZW5kaW5nIHVzIHRoZSBgY29hbGVzY2VgIG1lc3NhZ2VcbiAgICAgKiBhdCB0aGUgdGltZSBpdCByZWNlaXZlcyBhIHJlc3BvbnNlIGZyb20gYGxvYWREYXRhYFxuICAgICAqXG4gICAgICogICAgICAgICAgU3RhdGU6IElkbGVcbiAgICAgKiAgICAgICAgICDDosKGwpEgICAgICAgICAgfFxuICAgICAqICAgICAnY29hbGVzY2UnICAgJ2xvYWREYXRhJ1xuICAgICAqICAgICAgICAgIHwgICAgICh0cmlnZ2VycyBsb2FkKVxuICAgICAqICAgICAgICAgIHwgICAgICAgICAgw6LChsKTXG4gICAgICogICAgICAgIFN0YXRlOiBDb2FsZXNjaW5nXG4gICAgICogICAgICAgICAgw6LChsKRICAgICAgICAgIHxcbiAgICAgKiAgICh0cmlnZ2VycyBsb2FkKSAgIHxcbiAgICAgKiAgICAgJ2NvYWxlc2NlJyAgICdsb2FkRGF0YSdcbiAgICAgKiAgICAgICAgICB8ICAgICAgICAgIMOiwobCk1xuICAgICAqICAgICAgICBTdGF0ZTogTmVlZHNMb2FkRGF0YVxuICAgICAqL1xuICAgIGNvYWxlc2NlKCkge1xuICAgICAgICBpZiAodGhpcy5fc3RhdGUgPT09ICdDb2FsZXNjaW5nJykge1xuICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAnSWRsZSc7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fc3RhdGUgPT09ICdOZWVkc0xvYWREYXRhJykge1xuICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAnQ29hbGVzY2luZyc7XG4gICAgICAgICAgICB0aGlzLl9sb2FkRGF0YSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBJbXBsZW1lbnRzIHtAbGluayBXb3JrZXJTb3VyY2UjcmVsb2FkVGlsZX0uXG4gICAgKlxuICAgICogSWYgdGhlIHRpbGUgaXMgbG9hZGVkLCB1c2VzIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBWZWN0b3JUaWxlV29ya2VyU291cmNlLlxuICAgICogT3RoZXJ3aXNlLCBzdWNoIGFzIGFmdGVyIGEgc2V0RGF0YSgpIGNhbGwsIHdlIGxvYWQgdGhlIHRpbGUgZnJlc2guXG4gICAgKlxuICAgICogQHBhcmFtIHBhcmFtc1xuICAgICogQHBhcmFtIHBhcmFtcy51aWQgVGhlIFVJRCBmb3IgdGhpcyB0aWxlLlxuICAgICogQHByaXZhdGVcbiAgICAqL1xuICAgIHJlbG9hZFRpbGUocGFyYW1zOiBXb3JrZXJUaWxlUGFyYW1ldGVycywgY2FsbGJhY2s6IFdvcmtlclRpbGVDYWxsYmFjaykge1xuICAgICAgICBjb25zdCBsb2FkZWQgPSB0aGlzLmxvYWRlZCxcbiAgICAgICAgICAgIHVpZCA9IHBhcmFtcy51aWQ7XG5cbiAgICAgICAgaWYgKGxvYWRlZCAmJiBsb2FkZWRbdWlkXSkge1xuICAgICAgICAgICAgcmV0dXJuIHN1cGVyLnJlbG9hZFRpbGUocGFyYW1zLCBjYWxsYmFjayk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkVGlsZShwYXJhbXMsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZldGNoIGFuZCBwYXJzZSBHZW9KU09OIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gcGFyYW1zLiAgQ2FsbHMgYGNhbGxiYWNrYFxuICAgICAqIHdpdGggYChlcnIsIGRhdGEpYCwgd2hlcmUgYGRhdGFgIGlzIGEgcGFyc2VkIEdlb0pTT04gb2JqZWN0LlxuICAgICAqXG4gICAgICogR2VvSlNPTiBpcyBsb2FkZWQgYW5kIHBhcnNlZCBmcm9tIGBwYXJhbXMudXJsYCBpZiBpdCBleGlzdHMsIG9yIGVsc2VcbiAgICAgKiBleHBlY3RlZCBhcyBhIGxpdGVyYWwgKHN0cmluZyBvciBvYmplY3QpIGBwYXJhbXMuZGF0YWAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGFyYW1zXG4gICAgICogQHBhcmFtIFtwYXJhbXMudXJsXSBBIFVSTCB0byB0aGUgcmVtb3RlIEdlb0pTT04gZGF0YS5cbiAgICAgKiBAcGFyYW0gW3BhcmFtcy5kYXRhXSBMaXRlcmFsIEdlb0pTT04gZGF0YS4gTXVzdCBiZSBwcm92aWRlZCBpZiBgcGFyYW1zLnVybGAgaXMgbm90LlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgbG9hZEdlb0pTT04ocGFyYW1zOiBMb2FkR2VvSlNPTlBhcmFtZXRlcnMsIGNhbGxiYWNrOiBSZXNwb25zZUNhbGxiYWNrPE9iamVjdD4pIHtcbiAgICAgICAgLy8gQmVjYXVzZSBvZiBzYW1lIG9yaWdpbiBpc3N1ZXMsIHVybHMgbXVzdCBlaXRoZXIgaW5jbHVkZSBhbiBleHBsaWNpdFxuICAgICAgICAvLyBvcmlnaW4gb3IgYWJzb2x1dGUgcGF0aC5cbiAgICAgICAgLy8gaWU6IC9mb28vYmFyLmpzb24gb3IgaHR0cDovL2V4YW1wbGUuY29tL2Jhci5qc29uXG4gICAgICAgIC8vIGJ1dCBub3QgLi4vZm9vL2Jhci5qc29uXG4gICAgICAgIGlmIChwYXJhbXMucmVxdWVzdCkge1xuICAgICAgICAgICAgZ2V0SlNPTihwYXJhbXMucmVxdWVzdCwgY2FsbGJhY2spO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBwYXJhbXMuZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIEpTT04ucGFyc2UocGFyYW1zLmRhdGEpKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobmV3IEVycm9yKGBJbnB1dCBkYXRhIGdpdmVuIHRvICcke3BhcmFtcy5zb3VyY2V9JyBpcyBub3QgYSB2YWxpZCBHZW9KU09OIG9iamVjdC5gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobmV3IEVycm9yKGBJbnB1dCBkYXRhIGdpdmVuIHRvICcke3BhcmFtcy5zb3VyY2V9JyBpcyBub3QgYSB2YWxpZCBHZW9KU09OIG9iamVjdC5gKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW1vdmVTb3VyY2UocGFyYW1zOiB7c291cmNlOiBzdHJpbmd9LCBjYWxsYmFjazogQ2FsbGJhY2s8bWl4ZWQ+KSB7XG4gICAgICAgIGlmICh0aGlzLl9wZW5kaW5nQ2FsbGJhY2spIHtcbiAgICAgICAgICAgIC8vIERvbid0IGxlYWsgY2FsbGJhY2tzXG4gICAgICAgICAgICB0aGlzLl9wZW5kaW5nQ2FsbGJhY2sobnVsbCwge2FiYW5kb25lZDogdHJ1ZX0pO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgZ2V0Q2x1c3RlckV4cGFuc2lvblpvb20ocGFyYW1zOiB7Y2x1c3RlcklkOiBudW1iZXJ9LCBjYWxsYmFjazogQ2FsbGJhY2s8bnVtYmVyPikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgdGhpcy5fZ2VvSlNPTkluZGV4LmdldENsdXN0ZXJFeHBhbnNpb25ab29tKHBhcmFtcy5jbHVzdGVySWQpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY2FsbGJhY2soZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRDbHVzdGVyQ2hpbGRyZW4ocGFyYW1zOiB7Y2x1c3RlcklkOiBudW1iZXJ9LCBjYWxsYmFjazogQ2FsbGJhY2s8QXJyYXk8R2VvSlNPTkZlYXR1cmU+Pikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgdGhpcy5fZ2VvSlNPTkluZGV4LmdldENoaWxkcmVuKHBhcmFtcy5jbHVzdGVySWQpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY2FsbGJhY2soZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRDbHVzdGVyTGVhdmVzKHBhcmFtczoge2NsdXN0ZXJJZDogbnVtYmVyLCBsaW1pdDogbnVtYmVyLCBvZmZzZXQ6IG51bWJlcn0sIGNhbGxiYWNrOiBDYWxsYmFjazxBcnJheTxHZW9KU09ORmVhdHVyZT4+KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCB0aGlzLl9nZW9KU09OSW5kZXguZ2V0TGVhdmVzKHBhcmFtcy5jbHVzdGVySWQsIHBhcmFtcy5saW1pdCwgcGFyYW1zLm9mZnNldCkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0U3VwZXJjbHVzdGVyT3B0aW9ucyh7c3VwZXJjbHVzdGVyT3B0aW9ucywgY2x1c3RlclByb3BlcnRpZXN9KSB7XG4gICAgaWYgKCFjbHVzdGVyUHJvcGVydGllcyB8fCAhc3VwZXJjbHVzdGVyT3B0aW9ucykgcmV0dXJuIHN1cGVyY2x1c3Rlck9wdGlvbnM7XG5cbiAgICBjb25zdCBtYXBFeHByZXNzaW9ucyA9IHt9O1xuICAgIGNvbnN0IHJlZHVjZUV4cHJlc3Npb25zID0ge307XG4gICAgY29uc3QgZ2xvYmFscyA9IHthY2N1bXVsYXRlZDogbnVsbCwgem9vbTogMH07XG4gICAgY29uc3QgZmVhdHVyZSA9IHtwcm9wZXJ0aWVzOiBudWxsfTtcbiAgICBjb25zdCBwcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmtleXMoY2x1c3RlclByb3BlcnRpZXMpO1xuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgcHJvcGVydHlOYW1lcykge1xuICAgICAgICBjb25zdCBbb3BlcmF0b3IsIG1hcEV4cHJlc3Npb25dID0gY2x1c3RlclByb3BlcnRpZXNba2V5XTtcblxuICAgICAgICBjb25zdCBtYXBFeHByZXNzaW9uUGFyc2VkID0gY3JlYXRlRXhwcmVzc2lvbihtYXBFeHByZXNzaW9uKTtcbiAgICAgICAgY29uc3QgcmVkdWNlRXhwcmVzc2lvblBhcnNlZCA9IGNyZWF0ZUV4cHJlc3Npb24oXG4gICAgICAgICAgICB0eXBlb2Ygb3BlcmF0b3IgPT09ICdzdHJpbmcnID8gW29wZXJhdG9yLCBbJ2FjY3VtdWxhdGVkJ10sIFsnZ2V0Jywga2V5XV0gOiBvcGVyYXRvcik7XG5cbiAgICAgICAgYXNzZXJ0KG1hcEV4cHJlc3Npb25QYXJzZWQucmVzdWx0ID09PSAnc3VjY2VzcycpO1xuICAgICAgICBhc3NlcnQocmVkdWNlRXhwcmVzc2lvblBhcnNlZC5yZXN1bHQgPT09ICdzdWNjZXNzJyk7XG5cbiAgICAgICAgbWFwRXhwcmVzc2lvbnNba2V5XSA9IG1hcEV4cHJlc3Npb25QYXJzZWQudmFsdWU7XG4gICAgICAgIHJlZHVjZUV4cHJlc3Npb25zW2tleV0gPSByZWR1Y2VFeHByZXNzaW9uUGFyc2VkLnZhbHVlO1xuICAgIH1cblxuICAgIHN1cGVyY2x1c3Rlck9wdGlvbnMubWFwID0gKHBvaW50UHJvcGVydGllcykgPT4ge1xuICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMgPSBwb2ludFByb3BlcnRpZXM7XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgcHJvcGVydHlOYW1lcykge1xuICAgICAgICAgICAgcHJvcGVydGllc1trZXldID0gbWFwRXhwcmVzc2lvbnNba2V5XS5ldmFsdWF0ZShnbG9iYWxzLCBmZWF0dXJlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcGVydGllcztcbiAgICB9O1xuICAgIHN1cGVyY2x1c3Rlck9wdGlvbnMucmVkdWNlID0gKGFjY3VtdWxhdGVkLCBjbHVzdGVyUHJvcGVydGllcykgPT4ge1xuICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMgPSBjbHVzdGVyUHJvcGVydGllcztcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgcHJvcGVydHlOYW1lcykge1xuICAgICAgICAgICAgZ2xvYmFscy5hY2N1bXVsYXRlZCA9IGFjY3VtdWxhdGVkW2tleV07XG4gICAgICAgICAgICBhY2N1bXVsYXRlZFtrZXldID0gcmVkdWNlRXhwcmVzc2lvbnNba2V5XS5ldmFsdWF0ZShnbG9iYWxzLCBmZWF0dXJlKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gc3VwZXJjbHVzdGVyT3B0aW9ucztcbn1cblxuZXhwb3J0IGRlZmF1bHQgR2VvSlNPTldvcmtlclNvdXJjZTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBBY3RvciBmcm9tICcuLi91dGlsL2FjdG9yJztcblxuaW1wb3J0IFN0eWxlTGF5ZXJJbmRleCBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllcl9pbmRleCc7XG5pbXBvcnQgVmVjdG9yVGlsZVdvcmtlclNvdXJjZSBmcm9tICcuL3ZlY3Rvcl90aWxlX3dvcmtlcl9zb3VyY2UnO1xuaW1wb3J0IFJhc3RlckRFTVRpbGVXb3JrZXJTb3VyY2UgZnJvbSAnLi9yYXN0ZXJfZGVtX3RpbGVfd29ya2VyX3NvdXJjZSc7XG5pbXBvcnQgR2VvSlNPTldvcmtlclNvdXJjZSBmcm9tICcuL2dlb2pzb25fd29ya2VyX3NvdXJjZSc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQge3BsdWdpbiBhcyBnbG9iYWxSVExUZXh0UGx1Z2lufSBmcm9tICcuL3J0bF90ZXh0X3BsdWdpbic7XG5pbXBvcnQge2VuZm9yY2VDYWNoZVNpemVMaW1pdH0gZnJvbSAnLi4vdXRpbC90aWxlX3JlcXVlc3RfY2FjaGUnO1xuXG5pbXBvcnQgdHlwZSB7XG4gICAgV29ya2VyU291cmNlLFxuICAgIFdvcmtlclRpbGVQYXJhbWV0ZXJzLFxuICAgIFdvcmtlckRFTVRpbGVQYXJhbWV0ZXJzLFxuICAgIFdvcmtlclRpbGVDYWxsYmFjayxcbiAgICBXb3JrZXJERU1UaWxlQ2FsbGJhY2ssXG4gICAgVGlsZVBhcmFtZXRlcnNcbn0gZnJvbSAnLi4vc291cmNlL3dvcmtlcl9zb3VyY2UnO1xuXG5pbXBvcnQgdHlwZSB7V29ya2VyR2xvYmFsU2NvcGVJbnRlcmZhY2V9IGZyb20gJy4uL3V0aWwvd2ViX3dvcmtlcic7XG5pbXBvcnQgdHlwZSB7Q2FsbGJhY2t9IGZyb20gJy4uL3R5cGVzL2NhbGxiYWNrJztcbmltcG9ydCB0eXBlIHtMYXllclNwZWNpZmljYXRpb259IGZyb20gJy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuaW1wb3J0IHR5cGUge1BsdWdpblN0YXRlfSBmcm9tICcuL3J0bF90ZXh0X3BsdWdpbic7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV29ya2VyIHtcbiAgICBzZWxmOiBXb3JrZXJHbG9iYWxTY29wZUludGVyZmFjZTtcbiAgICBhY3RvcjogQWN0b3I7XG4gICAgbGF5ZXJJbmRleGVzOiB7W186IHN0cmluZ106IFN0eWxlTGF5ZXJJbmRleCB9O1xuICAgIGF2YWlsYWJsZUltYWdlczoge1tfOiBzdHJpbmddOiBBcnJheTxzdHJpbmc+IH07XG4gICAgd29ya2VyU291cmNlVHlwZXM6IHtbXzogc3RyaW5nXTogQ2xhc3M8V29ya2VyU291cmNlPiB9O1xuICAgIHdvcmtlclNvdXJjZXM6IHtbXzogc3RyaW5nXToge1tfOiBzdHJpbmddOiB7W186IHN0cmluZ106IFdvcmtlclNvdXJjZSB9IH0gfTtcbiAgICBkZW1Xb3JrZXJTb3VyY2VzOiB7W186IHN0cmluZ106IHtbXzogc3RyaW5nXTogUmFzdGVyREVNVGlsZVdvcmtlclNvdXJjZSB9IH07XG4gICAgcmVmZXJyZXI6ID9zdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcihzZWxmOiBXb3JrZXJHbG9iYWxTY29wZUludGVyZmFjZSkge1xuICAgICAgICB0aGlzLnNlbGYgPSBzZWxmO1xuICAgICAgICB0aGlzLmFjdG9yID0gbmV3IEFjdG9yKHNlbGYsIHRoaXMpO1xuXG4gICAgICAgIHRoaXMubGF5ZXJJbmRleGVzID0ge307XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlSW1hZ2VzID0ge307XG5cbiAgICAgICAgdGhpcy53b3JrZXJTb3VyY2VUeXBlcyA9IHtcbiAgICAgICAgICAgIHZlY3RvcjogVmVjdG9yVGlsZVdvcmtlclNvdXJjZSxcbiAgICAgICAgICAgIGdlb2pzb246IEdlb0pTT05Xb3JrZXJTb3VyY2VcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBbbWFwSWRdW3NvdXJjZVR5cGVdW3NvdXJjZU5hbWVdID0+IHdvcmtlciBzb3VyY2UgaW5zdGFuY2VcbiAgICAgICAgdGhpcy53b3JrZXJTb3VyY2VzID0ge307XG4gICAgICAgIHRoaXMuZGVtV29ya2VyU291cmNlcyA9IHt9O1xuXG4gICAgICAgIHRoaXMuc2VsZi5yZWdpc3RlcldvcmtlclNvdXJjZSA9IChuYW1lOiBzdHJpbmcsIFdvcmtlclNvdXJjZTogQ2xhc3M8V29ya2VyU291cmNlPikgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMud29ya2VyU291cmNlVHlwZXNbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFdvcmtlciBzb3VyY2Ugd2l0aCBuYW1lIFwiJHtuYW1lfVwiIGFscmVhZHkgcmVnaXN0ZXJlZC5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMud29ya2VyU291cmNlVHlwZXNbbmFtZV0gPSBXb3JrZXJTb3VyY2U7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gVGhpcyBpcyBpbnZva2VkIGJ5IHRoZSBSVEwgdGV4dCBwbHVnaW4gd2hlbiB0aGUgZG93bmxvYWQgdmlhIHRoZSBgaW1wb3J0U2NyaXB0c2AgY2FsbCBoYXMgZmluaXNoZWQsIGFuZCB0aGUgY29kZSBoYXMgYmVlbiBwYXJzZWQuXG4gICAgICAgIHRoaXMuc2VsZi5yZWdpc3RlclJUTFRleHRQbHVnaW4gPSAocnRsVGV4dFBsdWdpbjoge2FwcGx5QXJhYmljU2hhcGluZzogRnVuY3Rpb24sIHByb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dDogRnVuY3Rpb24sIHByb2Nlc3NTdHlsZWRCaWRpcmVjdGlvbmFsVGV4dD86IEZ1bmN0aW9ufSkgPT4ge1xuICAgICAgICAgICAgaWYgKGdsb2JhbFJUTFRleHRQbHVnaW4uaXNQYXJzZWQoKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUlRMIHRleHQgcGx1Z2luIGFscmVhZHkgcmVnaXN0ZXJlZC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGdsb2JhbFJUTFRleHRQbHVnaW5bJ2FwcGx5QXJhYmljU2hhcGluZyddID0gcnRsVGV4dFBsdWdpbi5hcHBseUFyYWJpY1NoYXBpbmc7XG4gICAgICAgICAgICBnbG9iYWxSVExUZXh0UGx1Z2luWydwcm9jZXNzQmlkaXJlY3Rpb25hbFRleHQnXSA9IHJ0bFRleHRQbHVnaW4ucHJvY2Vzc0JpZGlyZWN0aW9uYWxUZXh0O1xuICAgICAgICAgICAgZ2xvYmFsUlRMVGV4dFBsdWdpblsncHJvY2Vzc1N0eWxlZEJpZGlyZWN0aW9uYWxUZXh0J10gPSBydGxUZXh0UGx1Z2luLnByb2Nlc3NTdHlsZWRCaWRpcmVjdGlvbmFsVGV4dDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBzZXRSZWZlcnJlcihtYXBJRDogc3RyaW5nLCByZWZlcnJlcjogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMucmVmZXJyZXIgPSByZWZlcnJlcjtcbiAgICB9XG5cbiAgICBzZXRJbWFnZXMobWFwSWQ6IHN0cmluZywgaW1hZ2VzOiBBcnJheTxzdHJpbmc+LCBjYWxsYmFjazogV29ya2VyVGlsZUNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlSW1hZ2VzW21hcElkXSA9IGltYWdlcztcbiAgICAgICAgZm9yIChjb25zdCB3b3JrZXJTb3VyY2UgaW4gdGhpcy53b3JrZXJTb3VyY2VzW21hcElkXSkge1xuICAgICAgICAgICAgY29uc3Qgd3MgPSB0aGlzLndvcmtlclNvdXJjZXNbbWFwSWRdW3dvcmtlclNvdXJjZV07XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNvdXJjZSBpbiB3cykge1xuICAgICAgICAgICAgICAgIHdzW3NvdXJjZV0uYXZhaWxhYmxlSW1hZ2VzID0gaW1hZ2VzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgc2V0TGF5ZXJzKG1hcElkOiBzdHJpbmcsIGxheWVyczogQXJyYXk8TGF5ZXJTcGVjaWZpY2F0aW9uPiwgY2FsbGJhY2s6IFdvcmtlclRpbGVDYWxsYmFjaykge1xuICAgICAgICB0aGlzLmdldExheWVySW5kZXgobWFwSWQpLnJlcGxhY2UobGF5ZXJzKTtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG5cbiAgICB1cGRhdGVMYXllcnMobWFwSWQ6IHN0cmluZywgcGFyYW1zOiB7bGF5ZXJzOiBBcnJheTxMYXllclNwZWNpZmljYXRpb24+LCByZW1vdmVkSWRzOiBBcnJheTxzdHJpbmc+fSwgY2FsbGJhY2s6IFdvcmtlclRpbGVDYWxsYmFjaykge1xuICAgICAgICB0aGlzLmdldExheWVySW5kZXgobWFwSWQpLnVwZGF0ZShwYXJhbXMubGF5ZXJzLCBwYXJhbXMucmVtb3ZlZElkcyk7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgbG9hZFRpbGUobWFwSWQ6IHN0cmluZywgcGFyYW1zOiBXb3JrZXJUaWxlUGFyYW1ldGVycyAmIHt0eXBlOiBzdHJpbmd9LCBjYWxsYmFjazogV29ya2VyVGlsZUNhbGxiYWNrKSB7XG4gICAgICAgIGFzc2VydChwYXJhbXMudHlwZSk7XG4gICAgICAgIHRoaXMuZ2V0V29ya2VyU291cmNlKG1hcElkLCBwYXJhbXMudHlwZSwgcGFyYW1zLnNvdXJjZSkubG9hZFRpbGUocGFyYW1zLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgbG9hZERFTVRpbGUobWFwSWQ6IHN0cmluZywgcGFyYW1zOiBXb3JrZXJERU1UaWxlUGFyYW1ldGVycywgY2FsbGJhY2s6IFdvcmtlckRFTVRpbGVDYWxsYmFjaykge1xuICAgICAgICB0aGlzLmdldERFTVdvcmtlclNvdXJjZShtYXBJZCwgcGFyYW1zLnNvdXJjZSkubG9hZFRpbGUocGFyYW1zLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcmVsb2FkVGlsZShtYXBJZDogc3RyaW5nLCBwYXJhbXM6IFdvcmtlclRpbGVQYXJhbWV0ZXJzICYge3R5cGU6IHN0cmluZ30sIGNhbGxiYWNrOiBXb3JrZXJUaWxlQ2FsbGJhY2spIHtcbiAgICAgICAgYXNzZXJ0KHBhcmFtcy50eXBlKTtcbiAgICAgICAgdGhpcy5nZXRXb3JrZXJTb3VyY2UobWFwSWQsIHBhcmFtcy50eXBlLCBwYXJhbXMuc291cmNlKS5yZWxvYWRUaWxlKHBhcmFtcywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIGFib3J0VGlsZShtYXBJZDogc3RyaW5nLCBwYXJhbXM6IFRpbGVQYXJhbWV0ZXJzICYge3R5cGU6IHN0cmluZ30sIGNhbGxiYWNrOiBXb3JrZXJUaWxlQ2FsbGJhY2spIHtcbiAgICAgICAgYXNzZXJ0KHBhcmFtcy50eXBlKTtcbiAgICAgICAgdGhpcy5nZXRXb3JrZXJTb3VyY2UobWFwSWQsIHBhcmFtcy50eXBlLCBwYXJhbXMuc291cmNlKS5hYm9ydFRpbGUocGFyYW1zLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcmVtb3ZlVGlsZShtYXBJZDogc3RyaW5nLCBwYXJhbXM6IFRpbGVQYXJhbWV0ZXJzICYge3R5cGU6IHN0cmluZ30sIGNhbGxiYWNrOiBXb3JrZXJUaWxlQ2FsbGJhY2spIHtcbiAgICAgICAgYXNzZXJ0KHBhcmFtcy50eXBlKTtcbiAgICAgICAgdGhpcy5nZXRXb3JrZXJTb3VyY2UobWFwSWQsIHBhcmFtcy50eXBlLCBwYXJhbXMuc291cmNlKS5yZW1vdmVUaWxlKHBhcmFtcywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHJlbW92ZURFTVRpbGUobWFwSWQ6IHN0cmluZywgcGFyYW1zOiBUaWxlUGFyYW1ldGVycykge1xuICAgICAgICB0aGlzLmdldERFTVdvcmtlclNvdXJjZShtYXBJZCwgcGFyYW1zLnNvdXJjZSkucmVtb3ZlVGlsZShwYXJhbXMpO1xuICAgIH1cblxuICAgIHJlbW92ZVNvdXJjZShtYXBJZDogc3RyaW5nLCBwYXJhbXM6IHtzb3VyY2U6IHN0cmluZ30gJiB7dHlwZTogc3RyaW5nfSwgY2FsbGJhY2s6IFdvcmtlclRpbGVDYWxsYmFjaykge1xuICAgICAgICBhc3NlcnQocGFyYW1zLnR5cGUpO1xuICAgICAgICBhc3NlcnQocGFyYW1zLnNvdXJjZSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLndvcmtlclNvdXJjZXNbbWFwSWRdIHx8XG4gICAgICAgICAgICAhdGhpcy53b3JrZXJTb3VyY2VzW21hcElkXVtwYXJhbXMudHlwZV0gfHxcbiAgICAgICAgICAgICF0aGlzLndvcmtlclNvdXJjZXNbbWFwSWRdW3BhcmFtcy50eXBlXVtwYXJhbXMuc291cmNlXSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgd29ya2VyID0gdGhpcy53b3JrZXJTb3VyY2VzW21hcElkXVtwYXJhbXMudHlwZV1bcGFyYW1zLnNvdXJjZV07XG4gICAgICAgIGRlbGV0ZSB0aGlzLndvcmtlclNvdXJjZXNbbWFwSWRdW3BhcmFtcy50eXBlXVtwYXJhbXMuc291cmNlXTtcblxuICAgICAgICBpZiAod29ya2VyLnJlbW92ZVNvdXJjZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB3b3JrZXIucmVtb3ZlU291cmNlKHBhcmFtcywgY2FsbGJhY2spO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvYWQgYSB7QGxpbmsgV29ya2VyU291cmNlfSBzY3JpcHQgYXQgcGFyYW1zLnVybC4gIFRoZSBzY3JpcHQgaXMgcnVuXG4gICAgICogKHVzaW5nIGltcG9ydFNjcmlwdHMpIHdpdGggYHJlZ2lzdGVyV29ya2VyU291cmNlYCBpbiBzY29wZSwgd2hpY2ggaXMgYVxuICAgICAqIGZ1bmN0aW9uIHRha2luZyBgKG5hbWUsIHdvcmtlclNvdXJjZU9iamVjdClgLlxuICAgICAqICBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGxvYWRXb3JrZXJTb3VyY2UobWFwOiBzdHJpbmcsIHBhcmFtczogeyB1cmw6IHN0cmluZyB9LCBjYWxsYmFjazogQ2FsbGJhY2s8dm9pZD4pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZi5pbXBvcnRTY3JpcHRzKHBhcmFtcy51cmwpO1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY2FsbGJhY2soZS50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN5bmNSVExQbHVnaW5TdGF0ZShtYXA6IHN0cmluZywgc3RhdGU6IFBsdWdpblN0YXRlLCBjYWxsYmFjazogQ2FsbGJhY2s8Ym9vbGVhbj4pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGdsb2JhbFJUTFRleHRQbHVnaW4uc2V0U3RhdGUoc3RhdGUpO1xuICAgICAgICAgICAgY29uc3QgcGx1Z2luVVJMID0gZ2xvYmFsUlRMVGV4dFBsdWdpbi5nZXRQbHVnaW5VUkwoKTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBnbG9iYWxSVExUZXh0UGx1Z2luLmlzTG9hZGVkKCkgJiZcbiAgICAgICAgICAgICAgICAhZ2xvYmFsUlRMVGV4dFBsdWdpbi5pc1BhcnNlZCgpICYmXG4gICAgICAgICAgICAgICAgcGx1Z2luVVJMICE9IG51bGwgLy8gTm90IHBvc3NpYmxlIHdoZW4gYGlzTG9hZGVkYCBpcyB0cnVlLCBidXQga2VlcHMgZmxvdyBoYXBweVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxmLmltcG9ydFNjcmlwdHMocGx1Z2luVVJMKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21wbGV0ZSA9IGdsb2JhbFJUTFRleHRQbHVnaW4uaXNQYXJzZWQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IGNvbXBsZXRlID8gdW5kZWZpbmVkIDogbmV3IEVycm9yKGBSVEwgVGV4dCBQbHVnaW4gZmFpbGVkIHRvIGltcG9ydCBzY3JpcHRzIGZyb20gJHtwbHVnaW5VUkx9YCk7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IsIGNvbXBsZXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY2FsbGJhY2soZS50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEF2YWlsYWJsZUltYWdlcyhtYXBJZDogc3RyaW5nKSB7XG4gICAgICAgIGxldCBhdmFpbGFibGVJbWFnZXMgPSB0aGlzLmF2YWlsYWJsZUltYWdlc1ttYXBJZF07XG5cbiAgICAgICAgaWYgKCFhdmFpbGFibGVJbWFnZXMpIHtcbiAgICAgICAgICAgIGF2YWlsYWJsZUltYWdlcyA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGF2YWlsYWJsZUltYWdlcztcbiAgICB9XG5cbiAgICBnZXRMYXllckluZGV4KG1hcElkOiBzdHJpbmcpIHtcbiAgICAgICAgbGV0IGxheWVySW5kZXhlcyA9IHRoaXMubGF5ZXJJbmRleGVzW21hcElkXTtcbiAgICAgICAgaWYgKCFsYXllckluZGV4ZXMpIHtcbiAgICAgICAgICAgIGxheWVySW5kZXhlcyA9IHRoaXMubGF5ZXJJbmRleGVzW21hcElkXSA9IG5ldyBTdHlsZUxheWVySW5kZXgoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGF5ZXJJbmRleGVzO1xuICAgIH1cblxuICAgIGdldFdvcmtlclNvdXJjZShtYXBJZDogc3RyaW5nLCB0eXBlOiBzdHJpbmcsIHNvdXJjZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICghdGhpcy53b3JrZXJTb3VyY2VzW21hcElkXSlcbiAgICAgICAgICAgIHRoaXMud29ya2VyU291cmNlc1ttYXBJZF0gPSB7fTtcbiAgICAgICAgaWYgKCF0aGlzLndvcmtlclNvdXJjZXNbbWFwSWRdW3R5cGVdKVxuICAgICAgICAgICAgdGhpcy53b3JrZXJTb3VyY2VzW21hcElkXVt0eXBlXSA9IHt9O1xuXG4gICAgICAgIGlmICghdGhpcy53b3JrZXJTb3VyY2VzW21hcElkXVt0eXBlXVtzb3VyY2VdKSB7XG4gICAgICAgICAgICAvLyB1c2UgYSB3cmFwcGVkIGFjdG9yIHNvIHRoYXQgd2UgY2FuIGF0dGFjaCBhIHRhcmdldCBtYXBJZCBwYXJhbVxuICAgICAgICAgICAgLy8gdG8gYW55IG1lc3NhZ2VzIGludm9rZWQgYnkgdGhlIFdvcmtlclNvdXJjZVxuICAgICAgICAgICAgY29uc3QgYWN0b3IgPSB7XG4gICAgICAgICAgICAgICAgc2VuZDogKHR5cGUsIGRhdGEsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0b3Iuc2VuZCh0eXBlLCBkYXRhLCBjYWxsYmFjaywgbWFwSWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLndvcmtlclNvdXJjZXNbbWFwSWRdW3R5cGVdW3NvdXJjZV0gPSBuZXcgKHRoaXMud29ya2VyU291cmNlVHlwZXNbdHlwZV06IGFueSkoKGFjdG9yOiBhbnkpLCB0aGlzLmdldExheWVySW5kZXgobWFwSWQpLCB0aGlzLmdldEF2YWlsYWJsZUltYWdlcyhtYXBJZCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMud29ya2VyU291cmNlc1ttYXBJZF1bdHlwZV1bc291cmNlXTtcbiAgICB9XG5cbiAgICBnZXRERU1Xb3JrZXJTb3VyY2UobWFwSWQ6IHN0cmluZywgc291cmNlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRlbVdvcmtlclNvdXJjZXNbbWFwSWRdKVxuICAgICAgICAgICAgdGhpcy5kZW1Xb3JrZXJTb3VyY2VzW21hcElkXSA9IHt9O1xuXG4gICAgICAgIGlmICghdGhpcy5kZW1Xb3JrZXJTb3VyY2VzW21hcElkXVtzb3VyY2VdKSB7XG4gICAgICAgICAgICB0aGlzLmRlbVdvcmtlclNvdXJjZXNbbWFwSWRdW3NvdXJjZV0gPSBuZXcgUmFzdGVyREVNVGlsZVdvcmtlclNvdXJjZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVtV29ya2VyU291cmNlc1ttYXBJZF1bc291cmNlXTtcbiAgICB9XG5cbiAgICBlbmZvcmNlQ2FjaGVTaXplTGltaXQobWFwSWQ6IHN0cmluZywgbGltaXQ6IG51bWJlcikge1xuICAgICAgICBlbmZvcmNlQ2FjaGVTaXplTGltaXQobGltaXQpO1xuICAgIH1cbn1cblxuLyogZ2xvYmFsIHNlbGYsIFdvcmtlckdsb2JhbFNjb3BlICovXG5pZiAodHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSkge1xuICAgIHNlbGYud29ya2VyID0gbmV3IFdvcmtlcihzZWxmKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBpc1N1cHBvcnRlZDtcbn0gZWxzZSBpZiAod2luZG93KSB7XG4gICAgd2luZG93Lm1hcGJveGdsID0gd2luZG93Lm1hcGJveGdsIHx8IHt9O1xuICAgIHdpbmRvdy5tYXBib3hnbC5zdXBwb3J0ZWQgPSBpc1N1cHBvcnRlZDtcbiAgICB3aW5kb3cubWFwYm94Z2wubm90U3VwcG9ydGVkUmVhc29uID0gbm90U3VwcG9ydGVkUmVhc29uO1xufVxuXG4vKipcbiAqIFRlc3Qgd2hldGhlciB0aGUgY3VycmVudCBicm93c2VyIHN1cHBvcnRzIE1hcGJveCBHTCBKU1xuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdD1mYWxzZV0gUmV0dXJuIGBmYWxzZWBcbiAqICAgaWYgdGhlIHBlcmZvcm1hbmNlIG9mIE1hcGJveCBHTCBKUyB3b3VsZCBiZSBkcmFtYXRpY2FsbHkgd29yc2UgdGhhblxuICogICBleHBlY3RlZCAoaS5lLiBhIHNvZnR3YXJlIHJlbmRlcmVyIGlzIHdvdWxkIGJlIHVzZWQpXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1N1cHBvcnRlZChvcHRpb25zKSB7XG4gICAgcmV0dXJuICFub3RTdXBwb3J0ZWRSZWFzb24ob3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIG5vdFN1cHBvcnRlZFJlYXNvbihvcHRpb25zKSB7XG4gICAgaWYgKCFpc0Jyb3dzZXIoKSkgcmV0dXJuICdub3QgYSBicm93c2VyJztcbiAgICBpZiAoIWlzQXJyYXlTdXBwb3J0ZWQoKSkgcmV0dXJuICdpbnN1ZmZpY2VudCBBcnJheSBzdXBwb3J0JztcbiAgICBpZiAoIWlzRnVuY3Rpb25TdXBwb3J0ZWQoKSkgcmV0dXJuICdpbnN1ZmZpY2llbnQgRnVuY3Rpb24gc3VwcG9ydCc7XG4gICAgaWYgKCFpc09iamVjdFN1cHBvcnRlZCgpKSByZXR1cm4gJ2luc3VmZmljaWVudCBPYmplY3Qgc3VwcG9ydCc7XG4gICAgaWYgKCFpc0pTT05TdXBwb3J0ZWQoKSkgcmV0dXJuICdpbnN1ZmZpY2llbnQgSlNPTiBzdXBwb3J0JztcbiAgICBpZiAoIWlzV29ya2VyU3VwcG9ydGVkKCkpIHJldHVybiAnaW5zdWZmaWNpZW50IHdvcmtlciBzdXBwb3J0JztcbiAgICBpZiAoIWlzVWludDhDbGFtcGVkQXJyYXlTdXBwb3J0ZWQoKSkgcmV0dXJuICdpbnN1ZmZpY2llbnQgVWludDhDbGFtcGVkQXJyYXkgc3VwcG9ydCc7XG4gICAgaWYgKCFpc0FycmF5QnVmZmVyU3VwcG9ydGVkKCkpIHJldHVybiAnaW5zdWZmaWNpZW50IEFycmF5QnVmZmVyIHN1cHBvcnQnO1xuICAgIGlmICghaXNDYW52YXNHZXRJbWFnZURhdGFTdXBwb3J0ZWQoKSkgcmV0dXJuICdpbnN1ZmZpY2llbnQgQ2FudmFzL2dldEltYWdlRGF0YSBzdXBwb3J0JztcbiAgICBpZiAoIWlzV2ViR0xTdXBwb3J0ZWRDYWNoZWQob3B0aW9ucyAmJiBvcHRpb25zLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQpKSByZXR1cm4gJ2luc3VmZmljaWVudCBXZWJHTCBzdXBwb3J0Jztcbn1cblxuZnVuY3Rpb24gaXNCcm93c2VyKCkge1xuICAgIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xufVxuXG5mdW5jdGlvbiBpc0FycmF5U3VwcG9ydGVkKCkge1xuICAgIHJldHVybiAoXG4gICAgICAgIEFycmF5LnByb3RvdHlwZSAmJlxuICAgICAgICBBcnJheS5wcm90b3R5cGUuZXZlcnkgJiZcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLmZpbHRlciAmJlxuICAgICAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaCAmJlxuICAgICAgICBBcnJheS5wcm90b3R5cGUuaW5kZXhPZiAmJlxuICAgICAgICBBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YgJiZcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLm1hcCAmJlxuICAgICAgICBBcnJheS5wcm90b3R5cGUuc29tZSAmJlxuICAgICAgICBBcnJheS5wcm90b3R5cGUucmVkdWNlICYmXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodCAmJlxuICAgICAgICBBcnJheS5pc0FycmF5XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gaXNGdW5jdGlvblN1cHBvcnRlZCgpIHtcbiAgICByZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlICYmIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO1xufVxuXG5mdW5jdGlvbiBpc09iamVjdFN1cHBvcnRlZCgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgICBPYmplY3Qua2V5cyAmJlxuICAgICAgICBPYmplY3QuY3JlYXRlICYmXG4gICAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZiAmJlxuICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyAmJlxuICAgICAgICBPYmplY3QuaXNTZWFsZWQgJiZcbiAgICAgICAgT2JqZWN0LmlzRnJvemVuICYmXG4gICAgICAgIE9iamVjdC5pc0V4dGVuc2libGUgJiZcbiAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJlxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiZcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgJiZcbiAgICAgICAgT2JqZWN0LnNlYWwgJiZcbiAgICAgICAgT2JqZWN0LmZyZWV6ZSAmJlxuICAgICAgICBPYmplY3QucHJldmVudEV4dGVuc2lvbnNcbiAgICApO1xufVxuXG5mdW5jdGlvbiBpc0pTT05TdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuICdKU09OJyBpbiB3aW5kb3cgJiYgJ3BhcnNlJyBpbiBKU09OICYmICdzdHJpbmdpZnknIGluIEpTT047XG59XG5cbmZ1bmN0aW9uIGlzV29ya2VyU3VwcG9ydGVkKCkge1xuICAgIGlmICghKCdXb3JrZXInIGluIHdpbmRvdyAmJiAnQmxvYicgaW4gd2luZG93ICYmICdVUkwnIGluIHdpbmRvdykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBibG9iID0gbmV3IEJsb2IoWycnXSwgeyB0eXBlOiAndGV4dC9qYXZhc2NyaXB0JyB9KTtcbiAgICB2YXIgd29ya2VyVVJMID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICB2YXIgc3VwcG9ydGVkO1xuICAgIHZhciB3b3JrZXI7XG5cbiAgICB0cnkge1xuICAgICAgICB3b3JrZXIgPSBuZXcgV29ya2VyKHdvcmtlclVSTCk7XG4gICAgICAgIHN1cHBvcnRlZCA9IHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBzdXBwb3J0ZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAod29ya2VyKSB7XG4gICAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICB9XG4gICAgVVJMLnJldm9rZU9iamVjdFVSTCh3b3JrZXJVUkwpO1xuXG4gICAgcmV0dXJuIHN1cHBvcnRlZDtcbn1cblxuLy8gSUUxMSBvbmx5IHN1cHBvcnRzIGBVaW50OENsYW1wZWRBcnJheWAgYXMgb2YgdmVyc2lvblxuLy8gW0tCMjkyOTQzN10oaHR0cHM6Ly9zdXBwb3J0Lm1pY3Jvc29mdC5jb20vZW4tdXMva2IvMjkyOTQzNylcbmZ1bmN0aW9uIGlzVWludDhDbGFtcGVkQXJyYXlTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuICdVaW50OENsYW1wZWRBcnJheScgaW4gd2luZG93O1xufVxuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1zdXBwb3J0ZWQvaXNzdWVzLzE5XG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyU3VwcG9ydGVkKCkge1xuICAgIHJldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXc7XG59XG5cbi8vIFNvbWUgYnJvd3NlcnMgb3IgYnJvd3NlciBleHRlbnNpb25zIGJsb2NrIGFjY2VzcyB0byBjYW52YXMgZGF0YSB0byBwcmV2ZW50IGZpbmdlcnByaW50aW5nLlxuLy8gTWFwYm94IEdMIHVzZXMgdGhpcyBBUEkgdG8gbG9hZCBzcHJpdGVzIGFuZCBpbWFnZXMgaW4gZ2VuZXJhbC5cbmZ1bmN0aW9uIGlzQ2FudmFzR2V0SW1hZ2VEYXRhU3VwcG9ydGVkKCkge1xuICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgIGNhbnZhcy53aWR0aCA9IGNhbnZhcy5oZWlnaHQgPSAxO1xuICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBpbWFnZURhdGEgPSBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCAxLCAxKTtcbiAgICByZXR1cm4gaW1hZ2VEYXRhICYmIGltYWdlRGF0YS53aWR0aCA9PT0gY2FudmFzLndpZHRoO1xufVxuXG52YXIgaXNXZWJHTFN1cHBvcnRlZENhY2hlID0ge307XG5mdW5jdGlvbiBpc1dlYkdMU3VwcG9ydGVkQ2FjaGVkKGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQpIHtcblxuICAgIGlmIChpc1dlYkdMU3VwcG9ydGVkQ2FjaGVbZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpc1dlYkdMU3VwcG9ydGVkQ2FjaGVbZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdF0gPSBpc1dlYkdMU3VwcG9ydGVkKGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQpO1xuICAgIH1cblxuICAgIHJldHVybiBpc1dlYkdMU3VwcG9ydGVkQ2FjaGVbZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdF07XG59XG5cbmlzU3VwcG9ydGVkLndlYkdMQ29udGV4dEF0dHJpYnV0ZXMgPSB7XG4gICAgYW50aWFsaWFzOiBmYWxzZSxcbiAgICBhbHBoYTogdHJ1ZSxcbiAgICBzdGVuY2lsOiB0cnVlLFxuICAgIGRlcHRoOiB0cnVlXG59O1xuXG5mdW5jdGlvbiBnZXRXZWJHTENvbnRleHQoZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCkge1xuICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIHZhciBhdHRyaWJ1dGVzID0gT2JqZWN0LmNyZWF0ZShpc1N1cHBvcnRlZC53ZWJHTENvbnRleHRBdHRyaWJ1dGVzKTtcbiAgICBhdHRyaWJ1dGVzLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQgPSBmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0O1xuXG4gICAgaWYgKGNhbnZhcy5wcm9iYWJseVN1cHBvcnRzQ29udGV4dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgY2FudmFzLnByb2JhYmx5U3VwcG9ydHNDb250ZXh0KCd3ZWJnbCcsIGF0dHJpYnV0ZXMpIHx8XG4gICAgICAgICAgICBjYW52YXMucHJvYmFibHlTdXBwb3J0c0NvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIGF0dHJpYnV0ZXMpXG4gICAgICAgICk7XG5cbiAgICB9IGVsc2UgaWYgKGNhbnZhcy5zdXBwb3J0c0NvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGNhbnZhcy5zdXBwb3J0c0NvbnRleHQoJ3dlYmdsJywgYXR0cmlidXRlcykgfHxcbiAgICAgICAgICAgIGNhbnZhcy5zdXBwb3J0c0NvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIGF0dHJpYnV0ZXMpXG4gICAgICAgICk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJywgYXR0cmlidXRlcykgfHxcbiAgICAgICAgICAgIGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnLCBhdHRyaWJ1dGVzKVxuICAgICAgICApO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNXZWJHTFN1cHBvcnRlZChmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0KSB7XG4gICAgY29uc3QgZ2wgPSBnZXRXZWJHTENvbnRleHQoZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCk7XG4gICAgaWYgKCFnbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVHJ5IGNvbXBpbGluZyBhIHNoYWRlciBhbmQgZ2V0IGl0cyBjb21waWxlIHN0YXR1cy4gU29tZSBicm93c2VycyBsaWtlIEJyYXZlIGJsb2NrIHRoaXMgQVBJXG4gICAgLy8gdG8gcHJldmVudCBmaW5nZXJwcmludGluZy4gVW5mb3J0dW5hdGVseSwgdGhpcyBhbHNvIG1lYW5zIHRoYXQgTWFwYm94IEdMIHdvbid0IHdvcmsuXG4gICAgY29uc3Qgc2hhZGVyID0gZ2wuY3JlYXRlU2hhZGVyKGdsLlZFUlRFWF9TSEFERVIpO1xuICAgIGlmICghc2hhZGVyIHx8IGdsLmlzQ29udGV4dExvc3QoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGdsLnNoYWRlclNvdXJjZShzaGFkZXIsICd2b2lkIG1haW4oKSB7fScpO1xuICAgIGdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTtcbiAgICByZXR1cm4gZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgZ2wuQ09NUElMRV9TVEFUVVMpID09PSB0cnVlO1xufVxuIiwiLy8gQGZsb3cgc3RyaWN0XG5cbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcblxuaW1wb3J0IHdpbmRvdyBmcm9tICcuL3dpbmRvdyc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmNvbnN0IERPTSA9IHt9O1xuZXhwb3J0IGRlZmF1bHQgRE9NO1xuXG5ET00uY3JlYXRlID0gZnVuY3Rpb24gKHRhZ05hbWU6IHN0cmluZywgY2xhc3NOYW1lOiA/c3RyaW5nLCBjb250YWluZXI/OiBIVE1MRWxlbWVudCkge1xuICAgIGNvbnN0IGVsID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gICAgaWYgKGNsYXNzTmFtZSAhPT0gdW5kZWZpbmVkKSBlbC5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gICAgaWYgKGNvbnRhaW5lcikgY29udGFpbmVyLmFwcGVuZENoaWxkKGVsKTtcbiAgICByZXR1cm4gZWw7XG59O1xuXG5ET00uY3JlYXRlTlMgPSBmdW5jdGlvbiAobmFtZXNwYWNlVVJJOiBzdHJpbmcsIHRhZ05hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGVsID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhuYW1lc3BhY2VVUkksIHRhZ05hbWUpO1xuICAgIHJldHVybiBlbDtcbn07XG5cbmNvbnN0IGRvY1N0eWxlID0gd2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZTtcblxuZnVuY3Rpb24gdGVzdFByb3AocHJvcHMpIHtcbiAgICBpZiAoIWRvY1N0eWxlKSByZXR1cm4gcHJvcHNbMF07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAocHJvcHNbaV0gaW4gZG9jU3R5bGUpIHtcbiAgICAgICAgICAgIHJldHVybiBwcm9wc1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJvcHNbMF07XG59XG5cbmNvbnN0IHNlbGVjdFByb3AgPSB0ZXN0UHJvcChbJ3VzZXJTZWxlY3QnLCAnTW96VXNlclNlbGVjdCcsICdXZWJraXRVc2VyU2VsZWN0JywgJ21zVXNlclNlbGVjdCddKTtcbmxldCB1c2VyU2VsZWN0O1xuXG5ET00uZGlzYWJsZURyYWcgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGRvY1N0eWxlICYmIHNlbGVjdFByb3ApIHtcbiAgICAgICAgdXNlclNlbGVjdCA9IGRvY1N0eWxlW3NlbGVjdFByb3BdO1xuICAgICAgICBkb2NTdHlsZVtzZWxlY3RQcm9wXSA9ICdub25lJztcbiAgICB9XG59O1xuXG5ET00uZW5hYmxlRHJhZyA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZG9jU3R5bGUgJiYgc2VsZWN0UHJvcCkge1xuICAgICAgICBkb2NTdHlsZVtzZWxlY3RQcm9wXSA9IHVzZXJTZWxlY3Q7XG4gICAgfVxufTtcblxuY29uc3QgdHJhbnNmb3JtUHJvcCA9IHRlc3RQcm9wKFsndHJhbnNmb3JtJywgJ1dlYmtpdFRyYW5zZm9ybSddKTtcblxuRE9NLnNldFRyYW5zZm9ybSA9IGZ1bmN0aW9uKGVsOiBIVE1MRWxlbWVudCwgdmFsdWU6IHN0cmluZykge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy83NzU0XG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIGVsLnN0eWxlW3RyYW5zZm9ybVByb3BdID0gdmFsdWU7XG59O1xuXG4vLyBGZWF0dXJlIGRldGVjdGlvbiBmb3Ige3Bhc3NpdmU6IGZhbHNlfSBzdXBwb3J0IGluIGFkZC9yZW1vdmVFdmVudExpc3RlbmVyLlxubGV0IHBhc3NpdmVTdXBwb3J0ZWQgPSBmYWxzZTtcblxudHJ5IHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvMjg1XG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIGNvbnN0IG9wdGlvbnMgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIFwicGFzc2l2ZVwiLCB7XG4gICAgICAgIGdldCgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgICAgICAgcGFzc2l2ZVN1cHBvcnRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInRlc3RcIiwgb3B0aW9ucywgb3B0aW9ucyk7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0ZXN0XCIsIG9wdGlvbnMsIG9wdGlvbnMpO1xufSBjYXRjaCAoZXJyKSB7XG4gICAgcGFzc2l2ZVN1cHBvcnRlZCA9IGZhbHNlO1xufVxuXG5ET00uYWRkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKHRhcmdldDogKiwgdHlwZTogKiwgY2FsbGJhY2s6ICosIG9wdGlvbnM6IHtwYXNzaXZlPzogYm9vbGVhbiwgY2FwdHVyZT86IGJvb2xlYW59ID0ge30pIHtcbiAgICBpZiAoJ3Bhc3NpdmUnIGluIG9wdGlvbnMgJiYgcGFzc2l2ZVN1cHBvcnRlZCkge1xuICAgICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBjYWxsYmFjaywgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgY2FsbGJhY2ssIG9wdGlvbnMuY2FwdHVyZSk7XG4gICAgfVxufTtcblxuRE9NLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbih0YXJnZXQ6ICosIHR5cGU6ICosIGNhbGxiYWNrOiAqLCBvcHRpb25zOiB7cGFzc2l2ZT86IGJvb2xlYW4sIGNhcHR1cmU/OiBib29sZWFufSA9IHt9KSB7XG4gICAgaWYgKCdwYXNzaXZlJyBpbiBvcHRpb25zICYmIHBhc3NpdmVTdXBwb3J0ZWQpIHtcbiAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgY2FsbGJhY2ssIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGNhbGxiYWNrLCBvcHRpb25zLmNhcHR1cmUpO1xuICAgIH1cbn07XG5cbi8vIFN1cHByZXNzIHRoZSBuZXh0IGNsaWNrLCBidXQgb25seSBpZiBpdCdzIGltbWVkaWF0ZS5cbmNvbnN0IHN1cHByZXNzQ2xpY2s6IE1vdXNlRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIChlKSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc3VwcHJlc3NDbGljaywgdHJ1ZSk7XG59O1xuXG5ET00uc3VwcHJlc3NDbGljayA9IGZ1bmN0aW9uKCkge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHN1cHByZXNzQ2xpY2ssIHRydWUpO1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc3VwcHJlc3NDbGljaywgdHJ1ZSk7XG4gICAgfSwgMCk7XG59O1xuXG5ET00ubW91c2VQb3MgPSBmdW5jdGlvbiAoZWw6IEhUTUxFbGVtZW50LCBlOiBNb3VzZUV2ZW50IHwgd2luZG93LlRvdWNoRXZlbnQgfCBUb3VjaCkge1xuICAgIGNvbnN0IHJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICByZXR1cm4gbmV3IFBvaW50KFxuICAgICAgICBlLmNsaWVudFggLSByZWN0LmxlZnQgLSBlbC5jbGllbnRMZWZ0LFxuICAgICAgICBlLmNsaWVudFkgLSByZWN0LnRvcCAtIGVsLmNsaWVudFRvcFxuICAgICk7XG59O1xuXG5ET00udG91Y2hQb3MgPSBmdW5jdGlvbiAoZWw6IEhUTUxFbGVtZW50LCB0b3VjaGVzOiBUb3VjaExpc3QpIHtcbiAgICBjb25zdCByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICAgIHBvaW50cyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG91Y2hlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBwb2ludHMucHVzaChuZXcgUG9pbnQoXG4gICAgICAgICAgICB0b3VjaGVzW2ldLmNsaWVudFggLSByZWN0LmxlZnQgLSBlbC5jbGllbnRMZWZ0LFxuICAgICAgICAgICAgdG91Y2hlc1tpXS5jbGllbnRZIC0gcmVjdC50b3AgLSBlbC5jbGllbnRUb3BcbiAgICAgICAgKSk7XG4gICAgfVxuICAgIHJldHVybiBwb2ludHM7XG59O1xuXG5ET00ubW91c2VCdXR0b24gPSBmdW5jdGlvbiAoZTogTW91c2VFdmVudCkge1xuICAgIGFzc2VydChlLnR5cGUgPT09ICdtb3VzZWRvd24nIHx8IGUudHlwZSA9PT0gJ21vdXNldXAnKTtcbiAgICBpZiAodHlwZW9mIHdpbmRvdy5JbnN0YWxsVHJpZ2dlciAhPT0gJ3VuZGVmaW5lZCcgJiYgZS5idXR0b24gPT09IDIgJiYgZS5jdHJsS2V5ICYmXG4gICAgICAgIHdpbmRvdy5uYXZpZ2F0b3IucGxhdGZvcm0udG9VcHBlckNhc2UoKS5pbmRleE9mKCdNQUMnKSA+PSAwKSB7XG4gICAgICAgIC8vIEZpeCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzMxMzE6XG4gICAgICAgIC8vIEZpcmVmb3ggKGRldGVjdGVkIGJ5IEluc3RhbGxUcmlnZ2VyKSBvbiBNYWMgZGV0ZXJtaW5lcyBlLmJ1dHRvbiA9IDIgd2hlblxuICAgICAgICAvLyB1c2luZyBDb250cm9sICsgbGVmdCBjbGlja1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgcmV0dXJuIGUuYnV0dG9uO1xufTtcblxuRE9NLnJlbW92ZSA9IGZ1bmN0aW9uKG5vZGU6IEhUTUxFbGVtZW50KSB7XG4gICAgaWYgKG5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7XG4gICAgfVxufTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7Z2V0SlNPTiwgZ2V0SW1hZ2UsIFJlc291cmNlVHlwZX0gZnJvbSAnLi4vdXRpbC9hamF4JztcblxuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vdXRpbC9icm93c2VyJztcbmltcG9ydCB7UkdCQUltYWdlfSBmcm9tICcuLi91dGlsL2ltYWdlJztcblxuaW1wb3J0IHR5cGUge1N0eWxlSW1hZ2V9IGZyb20gJy4vc3R5bGVfaW1hZ2UnO1xuaW1wb3J0IHR5cGUge1JlcXVlc3RNYW5hZ2VyfSBmcm9tICcuLi91dGlsL21hcGJveCc7XG5pbXBvcnQgdHlwZSB7Q2FsbGJhY2t9IGZyb20gJy4uL3R5cGVzL2NhbGxiYWNrJztcbmltcG9ydCB0eXBlIHtDYW5jZWxhYmxlfSBmcm9tICcuLi90eXBlcy9jYW5jZWxhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYmFzZVVSTDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0TWFuYWdlcjogUmVxdWVzdE1hbmFnZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBDYWxsYmFjazx7W186IHN0cmluZ106IFN0eWxlSW1hZ2V9Pik6IENhbmNlbGFibGUge1xuICAgIGxldCBqc29uOiBhbnksIGltYWdlLCBlcnJvcjtcbiAgICBjb25zdCBmb3JtYXQgPSBicm93c2VyLmRldmljZVBpeGVsUmF0aW8gPiAxID8gJ0AyeCcgOiAnJztcblxuICAgIGxldCBqc29uUmVxdWVzdCA9IGdldEpTT04ocmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdChyZXF1ZXN0TWFuYWdlci5ub3JtYWxpemVTcHJpdGVVUkwoYmFzZVVSTCwgZm9ybWF0LCAnLmpzb24nKSwgUmVzb3VyY2VUeXBlLlNwcml0ZUpTT04pLCAoZXJyOiA/RXJyb3IsIGRhdGE6ID9PYmplY3QpID0+IHtcbiAgICAgICAganNvblJlcXVlc3QgPSBudWxsO1xuICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICBlcnJvciA9IGVycjtcbiAgICAgICAgICAgIGpzb24gPSBkYXRhO1xuICAgICAgICAgICAgbWF5YmVDb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBsZXQgaW1hZ2VSZXF1ZXN0ID0gZ2V0SW1hZ2UocmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdChyZXF1ZXN0TWFuYWdlci5ub3JtYWxpemVTcHJpdGVVUkwoYmFzZVVSTCwgZm9ybWF0LCAnLnBuZycpLCBSZXNvdXJjZVR5cGUuU3ByaXRlSW1hZ2UpLCAoZXJyLCBpbWcpID0+IHtcbiAgICAgICAgaW1hZ2VSZXF1ZXN0ID0gbnVsbDtcbiAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICBpbWFnZSA9IGltZztcbiAgICAgICAgICAgIG1heWJlQ29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gbWF5YmVDb21wbGV0ZSgpIHtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgIH0gZWxzZSBpZiAoanNvbiAmJiBpbWFnZSkge1xuICAgICAgICAgICAgY29uc3QgaW1hZ2VEYXRhID0gYnJvd3Nlci5nZXRJbWFnZURhdGEoaW1hZ2UpO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgaW4ganNvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0LCB4LCB5LCBzZGYsIHBpeGVsUmF0aW8sIHN0cmV0Y2hYLCBzdHJldGNoWSwgY29udGVudH0gPSBqc29uW2lkXTtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gbmV3IFJHQkFJbWFnZSh7d2lkdGgsIGhlaWdodH0pO1xuICAgICAgICAgICAgICAgIFJHQkFJbWFnZS5jb3B5KGltYWdlRGF0YSwgZGF0YSwge3gsIHl9LCB7eDogMCwgeTogMH0sIHt3aWR0aCwgaGVpZ2h0fSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2lkXSA9IHtkYXRhLCBwaXhlbFJhdGlvLCBzZGYsIHN0cmV0Y2hYLCBzdHJldGNoWSwgY29udGVudH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBjYW5jZWwoKSB7XG4gICAgICAgICAgICBpZiAoanNvblJlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICBqc29uUmVxdWVzdC5jYW5jZWwoKTtcbiAgICAgICAgICAgICAgICBqc29uUmVxdWVzdCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW1hZ2VSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgaW1hZ2VSZXF1ZXN0LmNhbmNlbCgpO1xuICAgICAgICAgICAgICAgIGltYWdlUmVxdWVzdCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtSR0JBSW1hZ2V9IGZyb20gJy4uL3V0aWwvaW1hZ2UnO1xuXG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vdWkvbWFwJztcblxuZXhwb3J0IHR5cGUgU3R5bGVJbWFnZURhdGEgPSB7XG4gICAgZGF0YTogUkdCQUltYWdlLFxuICAgIHZlcnNpb246IG51bWJlcixcbiAgICBoYXNSZW5kZXJDYWxsYmFjaz86IGJvb2xlYW4sXG4gICAgdXNlckltYWdlPzogU3R5bGVJbWFnZUludGVyZmFjZVxufTtcblxuZXhwb3J0IHR5cGUgU3R5bGVJbWFnZU1ldGFkYXRhID0ge1xuICAgIHBpeGVsUmF0aW86IG51bWJlcixcbiAgICBzZGY6IGJvb2xlYW4sXG4gICAgc3RyZXRjaFg/OiBBcnJheTxbbnVtYmVyLCBudW1iZXJdPixcbiAgICBzdHJldGNoWT86IEFycmF5PFtudW1iZXIsIG51bWJlcl0+LFxuICAgIGNvbnRlbnQ/OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXVxufTtcblxuZXhwb3J0IHR5cGUgU3R5bGVJbWFnZSA9IFN0eWxlSW1hZ2VEYXRhICYgU3R5bGVJbWFnZU1ldGFkYXRhO1xuXG5leHBvcnQgdHlwZSBTdHlsZUltYWdlSW50ZXJmYWNlID0ge1xuICAgIHdpZHRoOiBudW1iZXIsXG4gICAgaGVpZ2h0OiBudW1iZXIsXG4gICAgZGF0YTogVWludDhBcnJheSB8IFVpbnQ4Q2xhbXBlZEFycmF5LFxuICAgIHJlbmRlcj86ICgpID0+IHZvaWQsXG4gICAgb25BZGQ/OiAobWFwOiBNYXAsIGlkOiBzdHJpbmcpID0+IHZvaWQsXG4gICAgb25SZW1vdmU/OiAoKSA9PiB2b2lkXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyU3R5bGVJbWFnZShpbWFnZTogU3R5bGVJbWFnZSkge1xuICAgIGNvbnN0IHt1c2VySW1hZ2V9ID0gaW1hZ2U7XG4gICAgaWYgKHVzZXJJbWFnZSAmJiB1c2VySW1hZ2UucmVuZGVyKSB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWQgPSB1c2VySW1hZ2UucmVuZGVyKCk7XG4gICAgICAgIGlmICh1cGRhdGVkKSB7XG4gICAgICAgICAgICBpbWFnZS5kYXRhLnJlcGxhY2UobmV3IFVpbnQ4QXJyYXkodXNlckltYWdlLmRhdGEuYnVmZmVyKSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBkeW5hbWljYWxseSBnZW5lcmF0ZWQgc3R5bGUgaW1hZ2VzLiBUaGlzIGlzIGEgc3BlY2lmaWNhdGlvbiBmb3JcbiAqIGltcGxlbWVudGVycyB0byBtb2RlbDogaXQgaXMgbm90IGFuIGV4cG9ydGVkIG1ldGhvZCBvciBjbGFzcy5cbiAqXG4gKiBJbWFnZXMgaW1wbGVtZW50aW5nIHRoaXMgaW50ZXJmYWNlIGNhbiBiZSByZWRyYXduIGZvciBldmVyeSBmcmFtZS4gVGhleSBjYW4gYmUgdXNlZCB0byBhbmltYXRlXG4gKiBpY29ucyBhbmQgcGF0dGVybnMgb3IgbWFrZSB0aGVtIHJlc3BvbmQgdG8gdXNlciBpbnB1dC4gU3R5bGUgaW1hZ2VzIGNhbiBpbXBsZW1lbnQgYVxuICoge0BsaW5rIFN0eWxlSW1hZ2VJbnRlcmZhY2UjcmVuZGVyfSBtZXRob2QuIFRoZSBtZXRob2QgaXMgY2FsbGVkIGV2ZXJ5IGZyYW1lIGFuZFxuICogY2FuIGJlIHVzZWQgdG8gdXBkYXRlIHRoZSBpbWFnZS5cbiAqXG4gKiBAaW50ZXJmYWNlIFN0eWxlSW1hZ2VJbnRlcmZhY2VcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB3aWR0aFxuICogQHByb3BlcnR5IHtudW1iZXJ9IGhlaWdodFxuICogQHByb3BlcnR5IHtVaW50OEFycmF5IHwgVWludDhDbGFtcGVkQXJyYXl9IGRhdGFcbiAqXG4gKiBAc2VlIFtBZGQgYW4gYW5pbWF0ZWQgaWNvbiB0byB0aGUgbWFwLl0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvYWRkLWltYWdlLWFuaW1hdGVkLylcbiAqXG4gKiBAZXhhbXBsZVxuICogdmFyIGZsYXNoaW5nU3F1YXJlID0ge1xuICogICAgIHdpZHRoOiA2NCxcbiAqICAgICBoZWlnaHQ6IDY0LFxuICogICAgIGRhdGE6IG5ldyBVaW50OEFycmF5KDY0ICogNjQgKiA0KSxcbiAqXG4gKiAgICAgb25BZGQ6IGZ1bmN0aW9uKG1hcCkge1xuICogICAgICAgICB0aGlzLm1hcCA9IG1hcDtcbiAqICAgICB9LFxuICpcbiAqICAgICByZW5kZXI6IGZ1bmN0aW9uKCkge1xuICogICAgICAgICAvLyBrZWVwIHJlcGFpbnRpbmcgd2hpbGUgdGhlIGljb24gaXMgb24gdGhlIG1hcFxuICogICAgICAgICB0aGlzLm1hcC50cmlnZ2VyUmVwYWludCgpO1xuICpcbiAqICAgICAgICAgLy8gYWx0ZXJuYXRlIGJldHdlZW4gYmxhY2sgYW5kIHdoaXRlIGJhc2VkIG9uIHRoZSB0aW1lXG4gKiAgICAgICAgIHZhciB2YWx1ZSA9IE1hdGgucm91bmQoRGF0ZS5ub3coKSAvIDEwMDApICUgMiA9PT0gMCAgPyAyNTUgOiAwO1xuICpcbiAqICAgICAgICAgLy8gY2hlY2sgaWYgaW1hZ2UgbmVlZHMgdG8gYmUgY2hhbmdlZFxuICogICAgICAgICBpZiAodmFsdWUgIT09IHRoaXMucHJldmlvdXNWYWx1ZSkge1xuICogICAgICAgICAgICAgdGhpcy5wcmV2aW91c1ZhbHVlID0gdmFsdWU7XG4gKlxuICogICAgICAgICAgICAgdmFyIGJ5dGVzUGVyUGl4ZWwgPSA0O1xuICogICAgICAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCB0aGlzLndpZHRoOyB4KyspIHtcbiAqICAgICAgICAgICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IHRoaXMuaGVpZ2h0OyB5KyspIHtcbiAqICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9ICh5ICogdGhpcy53aWR0aCArIHgpICogYnl0ZXNQZXJQaXhlbDtcbiAqICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhW29mZnNldCArIDBdID0gdmFsdWU7XG4gKiAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtvZmZzZXQgKyAxXSA9IHZhbHVlO1xuICogICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFbb2Zmc2V0ICsgMl0gPSB2YWx1ZTtcbiAqICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhW29mZnNldCArIDNdID0gMjU1O1xuICogICAgICAgICAgICAgICAgIH1cbiAqICAgICAgICAgICAgIH1cbiAqXG4gKiAgICAgICAgICAgICAvLyByZXR1cm4gdHJ1ZSB0byBpbmRpY2F0ZSB0aGF0IHRoZSBpbWFnZSBjaGFuZ2VkXG4gKiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAqICAgICAgICAgfVxuICogICAgIH1cbiAqICB9XG4gKlxuICogIG1hcC5hZGRJbWFnZSgnZmxhc2hpbmdfc3F1YXJlJywgZmxhc2hpbmdTcXVhcmUpO1xuICovXG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uY2UgYmVmb3JlIGV2ZXJ5IGZyYW1lIHdoZXJlIHRoZSBpY29uIHdpbGwgYmUgdXNlZC5cbiAqIFRoZSBtZXRob2QgY2FuIG9wdGlvbmFsbHkgdXBkYXRlIHRoZSBpbWFnZSdzIGBkYXRhYCBtZW1iZXIgd2l0aCBhIG5ldyBpbWFnZS5cbiAqXG4gKiBJZiB0aGUgbWV0aG9kIHVwZGF0ZXMgdGhlIGltYWdlIGl0IG11c3QgcmV0dXJuIGB0cnVlYCB0byBjb21taXQgdGhlIGNoYW5nZS5cbiAqIElmIHRoZSBtZXRob2QgcmV0dXJucyBgZmFsc2VgIG9yIG5vdGhpbmcgdGhlIGltYWdlIGlzIGFzc3VtZWQgdG8gbm90IGhhdmUgY2hhbmdlZC5cbiAqXG4gKiBJZiB1cGRhdGVzIGFyZSBpbmZyZXF1ZW50IGl0IG1heWJlIGVhc2llciB0byB1c2Uge0BsaW5rIE1hcCN1cGRhdGVJbWFnZX0gdG8gdXBkYXRlXG4gKiB0aGUgaW1hZ2UgaW5zdGVhZCBvZiBpbXBsZW1lbnRpbmcgdGhpcyBtZXRob2QuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgU3R5bGVJbWFnZUludGVyZmFjZVxuICogQGluc3RhbmNlXG4gKiBAbmFtZSByZW5kZXJcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGlzIG1ldGhvZCB1cGRhdGVkIHRoZSBpbWFnZS4gYGZhbHNlYCBpZiB0aGUgaW1hZ2Ugd2FzIG5vdCBjaGFuZ2VkLlxuICovXG5cbi8qKlxuICogT3B0aW9uYWwgbWV0aG9kIGNhbGxlZCB3aGVuIHRoZSBsYXllciBoYXMgYmVlbiBhZGRlZCB0byB0aGUgTWFwIHdpdGgge0BsaW5rIE1hcCNhZGRJbWFnZX0uXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgU3R5bGVJbWFnZUludGVyZmFjZVxuICogQGluc3RhbmNlXG4gKiBAbmFtZSBvbkFkZFxuICogQHBhcmFtIHtNYXB9IG1hcCBUaGUgTWFwIHRoaXMgY3VzdG9tIGxheWVyIHdhcyBqdXN0IGFkZGVkIHRvLlxuICovXG5cbi8qKlxuICogT3B0aW9uYWwgbWV0aG9kIGNhbGxlZCB3aGVuIHRoZSBpY29uIGlzIHJlbW92ZWQgZnJvbSB0aGUgbWFwIHdpdGgge0BsaW5rIE1hcCNyZW1vdmVJbWFnZX0uXG4gKiBUaGlzIGdpdmVzIHRoZSBpbWFnZSBhIGNoYW5jZSB0byBjbGVhbiB1cCByZXNvdXJjZXMgYW5kIGV2ZW50IGxpc3RlbmVycy5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBTdHlsZUltYWdlSW50ZXJmYWNlXG4gKiBAaW5zdGFuY2VcbiAqIEBuYW1lIG9uUmVtb3ZlXG4gKi9cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBwb3RwYWNrIGZyb20gJ3BvdHBhY2snO1xuXG5pbXBvcnQge0V2ZW50LCBFcnJvckV2ZW50LCBFdmVudGVkfSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IHtSR0JBSW1hZ2V9IGZyb20gJy4uL3V0aWwvaW1hZ2UnO1xuaW1wb3J0IHtJbWFnZVBvc2l0aW9ufSBmcm9tICcuL2ltYWdlX2F0bGFzJztcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4vdGV4dHVyZSc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQge3JlbmRlclN0eWxlSW1hZ2V9IGZyb20gJy4uL3N0eWxlL3N0eWxlX2ltYWdlJztcbmltcG9ydCB7d2Fybk9uY2V9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5cbmltcG9ydCB0eXBlIHtTdHlsZUltYWdlfSBmcm9tICcuLi9zdHlsZS9zdHlsZV9pbWFnZSc7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge0Jpbn0gZnJvbSAncG90cGFjayc7XG5pbXBvcnQgdHlwZSB7Q2FsbGJhY2t9IGZyb20gJy4uL3R5cGVzL2NhbGxiYWNrJztcblxudHlwZSBQYXR0ZXJuID0ge1xuICAgIGJpbjogQmluLFxuICAgIHBvc2l0aW9uOiBJbWFnZVBvc2l0aW9uXG59O1xuXG4vLyBXaGVuIGNvcGllZCBpbnRvIHRoZSBhdGxhcyB0ZXh0dXJlLCBpbWFnZSBkYXRhIGlzIHBhZGRlZCBieSBvbmUgcGl4ZWwgb24gZWFjaCBzaWRlLiBJY29uXG4vLyBpbWFnZXMgYXJlIHBhZGRlZCB3aXRoIGZ1bGx5IHRyYW5zcGFyZW50IHBpeGVscywgd2hpbGUgcGF0dGVybiBpbWFnZXMgYXJlIHBhZGRlZCB3aXRoIGFcbi8vIGNvcHkgb2YgdGhlIGltYWdlIGRhdGEgd3JhcHBlZCBmcm9tIHRoZSBvcHBvc2l0ZSBzaWRlLiBJbiBib3RoIGNhc2VzLCB0aGlzIGVuc3VyZXMgdGhlXG4vLyBjb3JyZWN0IGJlaGF2aW9yIG9mIEdMX0xJTkVBUiB0ZXh0dXJlIHNhbXBsaW5nIG1vZGUuXG5jb25zdCBwYWRkaW5nID0gMTtcblxuLypcbiAgICBJbWFnZU1hbmFnZXIgZG9lcyB0aHJlZSB0aGluZ3M6XG5cbiAgICAgICAgMS4gVHJhY2tzIHJlcXVlc3RzIGZvciBpY29uIGltYWdlcyBmcm9tIHRpbGUgd29ya2VycyBhbmQgc2VuZHMgcmVzcG9uc2VzIHdoZW4gdGhlIHJlcXVlc3RzIGFyZSBmdWxmaWxsZWQuXG4gICAgICAgIDIuIEJ1aWxkcyBhIHRleHR1cmUgYXRsYXMgZm9yIHBhdHRlcm4gaW1hZ2VzLlxuICAgICAgICAzLiBSZXJlbmRlcnMgcmVuZGVyYWJsZSBpbWFnZXMgb25jZSBwZXIgZnJhbWVcblxuICAgIFRoZXNlIGFyZSBkaXNwYXJhdGUgcmVzcG9uc2liaWxpdGllcyBhbmQgc2hvdWxkIGV2ZW50dWFsbHkgYmUgaGFuZGxlZCBieSBkaWZmZXJlbnQgY2xhc3Nlcy4gV2hlbiB3ZSBpbXBsZW1lbnRcbiAgICBkYXRhLWRyaXZlbiBzdXBwb3J0IGZvciBgKi1wYXR0ZXJuYCwgd2UnbGwgbGlrZWx5IHVzZSBwZXItYnVja2V0IHBhdHRlcm4gYXRsYXNlcywgYW5kIHRoYXQgd291bGQgYmUgYSBnb29kIHRpbWVcbiAgICB0byByZWZhY3RvciB0aGlzLlxuKi9cbmNsYXNzIEltYWdlTWFuYWdlciBleHRlbmRzIEV2ZW50ZWQge1xuICAgIGltYWdlczoge1tfOiBzdHJpbmddOiBTdHlsZUltYWdlfTtcbiAgICB1cGRhdGVkSW1hZ2VzOiB7W186IHN0cmluZ106IGJvb2xlYW59O1xuICAgIGNhbGxiYWNrRGlzcGF0Y2hlZFRoaXNGcmFtZToge1tfOiBzdHJpbmddOiBib29sZWFufTtcbiAgICBsb2FkZWQ6IGJvb2xlYW47XG4gICAgcmVxdWVzdG9yczogQXJyYXk8e2lkczogQXJyYXk8c3RyaW5nPiwgY2FsbGJhY2s6IENhbGxiYWNrPHtbXzogc3RyaW5nXTogU3R5bGVJbWFnZX0+fT47XG5cbiAgICBwYXR0ZXJuczoge1tfOiBzdHJpbmddOiBQYXR0ZXJufTtcbiAgICBhdGxhc0ltYWdlOiBSR0JBSW1hZ2U7XG4gICAgYXRsYXNUZXh0dXJlOiA/VGV4dHVyZTtcbiAgICBkaXJ0eTogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmltYWdlcyA9IHt9O1xuICAgICAgICB0aGlzLnVwZGF0ZWRJbWFnZXMgPSB7fTtcbiAgICAgICAgdGhpcy5jYWxsYmFja0Rpc3BhdGNoZWRUaGlzRnJhbWUgPSB7fTtcbiAgICAgICAgdGhpcy5sb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZXF1ZXN0b3JzID0gW107XG5cbiAgICAgICAgdGhpcy5wYXR0ZXJucyA9IHt9O1xuICAgICAgICB0aGlzLmF0bGFzSW1hZ2UgPSBuZXcgUkdCQUltYWdlKHt3aWR0aDogMSwgaGVpZ2h0OiAxfSk7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIH1cblxuICAgIGlzTG9hZGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2FkZWQ7XG4gICAgfVxuXG4gICAgc2V0TG9hZGVkKGxvYWRlZDogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5sb2FkZWQgPT09IGxvYWRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sb2FkZWQgPSBsb2FkZWQ7XG5cbiAgICAgICAgaWYgKGxvYWRlZCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCB7aWRzLCBjYWxsYmFja30gb2YgdGhpcy5yZXF1ZXN0b3JzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZ5KGlkcywgY2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZXF1ZXN0b3JzID0gW107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRJbWFnZShpZDogc3RyaW5nKTogP1N0eWxlSW1hZ2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5pbWFnZXNbaWRdO1xuICAgIH1cblxuICAgIGFkZEltYWdlKGlkOiBzdHJpbmcsIGltYWdlOiBTdHlsZUltYWdlKSB7XG4gICAgICAgIGFzc2VydCghdGhpcy5pbWFnZXNbaWRdKTtcbiAgICAgICAgaWYgKHRoaXMuX3ZhbGlkYXRlKGlkLCBpbWFnZSkpIHtcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VzW2lkXSA9IGltYWdlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3ZhbGlkYXRlKGlkOiBzdHJpbmcsIGltYWdlOiBTdHlsZUltYWdlKSB7XG4gICAgICAgIGxldCB2YWxpZCA9IHRydWU7XG4gICAgICAgIGlmICghdGhpcy5fdmFsaWRhdGVTdHJldGNoKGltYWdlLnN0cmV0Y2hYLCBpbWFnZS5kYXRhICYmIGltYWdlLmRhdGEud2lkdGgpKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBJbWFnZSBcIiR7aWR9XCIgaGFzIGludmFsaWQgXCJzdHJldGNoWFwiIHZhbHVlYCkpKTtcbiAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl92YWxpZGF0ZVN0cmV0Y2goaW1hZ2Uuc3RyZXRjaFksIGltYWdlLmRhdGEgJiYgaW1hZ2UuZGF0YS5oZWlnaHQpKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBJbWFnZSBcIiR7aWR9XCIgaGFzIGludmFsaWQgXCJzdHJldGNoWVwiIHZhbHVlYCkpKTtcbiAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl92YWxpZGF0ZUNvbnRlbnQoaW1hZ2UuY29udGVudCwgaW1hZ2UpKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBJbWFnZSBcIiR7aWR9XCIgaGFzIGludmFsaWQgXCJjb250ZW50XCIgdmFsdWVgKSkpO1xuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsaWQ7XG4gICAgfVxuXG4gICAgX3ZhbGlkYXRlU3RyZXRjaChzdHJldGNoOiA/QXJyYXk8W251bWJlciwgbnVtYmVyXT4gfCB2b2lkLCBzaXplOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKCFzdHJldGNoKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgbGV0IGxhc3QgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IHBhcnQgb2Ygc3RyZXRjaCkge1xuICAgICAgICAgICAgaWYgKHBhcnRbMF0gPCBsYXN0IHx8IHBhcnRbMV0gPCBwYXJ0WzBdIHx8IHNpemUgPCBwYXJ0WzFdKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBsYXN0ID0gcGFydFsxXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBfdmFsaWRhdGVDb250ZW50KGNvbnRlbnQ6ID9bbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSB8IHZvaWQsIGltYWdlOiBTdHlsZUltYWdlKSB7XG4gICAgICAgIGlmICghY29udGVudCkgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmIChjb250ZW50Lmxlbmd0aCAhPT0gNCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoY29udGVudFswXSA8IDAgfHwgaW1hZ2UuZGF0YS53aWR0aCA8IGNvbnRlbnRbMF0pIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGNvbnRlbnRbMV0gPCAwIHx8IGltYWdlLmRhdGEuaGVpZ2h0IDwgY29udGVudFsxXSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoY29udGVudFsyXSA8IDAgfHwgaW1hZ2UuZGF0YS53aWR0aCA8IGNvbnRlbnRbMl0pIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGNvbnRlbnRbM10gPCAwIHx8IGltYWdlLmRhdGEuaGVpZ2h0IDwgY29udGVudFszXSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoY29udGVudFsyXSA8IGNvbnRlbnRbMF0pIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGNvbnRlbnRbM10gPCBjb250ZW50WzFdKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHVwZGF0ZUltYWdlKGlkOiBzdHJpbmcsIGltYWdlOiBTdHlsZUltYWdlKSB7XG4gICAgICAgIGNvbnN0IG9sZEltYWdlID0gdGhpcy5pbWFnZXNbaWRdO1xuICAgICAgICBhc3NlcnQob2xkSW1hZ2UpO1xuICAgICAgICBhc3NlcnQob2xkSW1hZ2UuZGF0YS53aWR0aCA9PT0gaW1hZ2UuZGF0YS53aWR0aCk7XG4gICAgICAgIGFzc2VydChvbGRJbWFnZS5kYXRhLmhlaWdodCA9PT0gaW1hZ2UuZGF0YS5oZWlnaHQpO1xuICAgICAgICBpbWFnZS52ZXJzaW9uID0gb2xkSW1hZ2UudmVyc2lvbiArIDE7XG4gICAgICAgIHRoaXMuaW1hZ2VzW2lkXSA9IGltYWdlO1xuICAgICAgICB0aGlzLnVwZGF0ZWRJbWFnZXNbaWRdID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZW1vdmVJbWFnZShpZDogc3RyaW5nKSB7XG4gICAgICAgIGFzc2VydCh0aGlzLmltYWdlc1tpZF0pO1xuICAgICAgICBjb25zdCBpbWFnZSA9IHRoaXMuaW1hZ2VzW2lkXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuaW1hZ2VzW2lkXTtcbiAgICAgICAgZGVsZXRlIHRoaXMucGF0dGVybnNbaWRdO1xuXG4gICAgICAgIGlmIChpbWFnZS51c2VySW1hZ2UgJiYgaW1hZ2UudXNlckltYWdlLm9uUmVtb3ZlKSB7XG4gICAgICAgICAgICBpbWFnZS51c2VySW1hZ2Uub25SZW1vdmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxpc3RJbWFnZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmltYWdlcyk7XG4gICAgfVxuXG4gICAgZ2V0SW1hZ2VzKGlkczogQXJyYXk8c3RyaW5nPiwgY2FsbGJhY2s6IENhbGxiYWNrPHtbXzogc3RyaW5nXTogU3R5bGVJbWFnZX0+KSB7XG4gICAgICAgIC8vIElmIHRoZSBzcHJpdGUgaGFzIGJlZW4gbG9hZGVkLCBvciBpZiBhbGwgdGhlIGljb24gZGVwZW5kZW5jaWVzIGFyZSBhbHJlYWR5IHByZXNlbnRcbiAgICAgICAgLy8gKGkuZS4gaWYgdGhleSd2ZSBiZWVuIGFkZGVkIHZpYSBydW50aW1lIHN0eWxpbmcpLCB0aGVuIG5vdGlmeSB0aGUgcmVxdWVzdG9yIGltbWVkaWF0ZWx5LlxuICAgICAgICAvLyBPdGhlcndpc2UsIGRlbGF5IG5vdGlmaWNhdGlvbiB1bnRpbCB0aGUgc3ByaXRlIGlzIGxvYWRlZC4gQXQgdGhhdCBwb2ludCwgaWYgYW55IG9mIHRoZVxuICAgICAgICAvLyBkZXBlbmRlbmNpZXMgYXJlIHN0aWxsIHVuYXZhaWxhYmxlLCB3ZSdsbCBqdXN0IGFzc3VtZSB0aGV5IGFyZSBwZXJtYW5lbnRseSBtaXNzaW5nLlxuICAgICAgICBsZXQgaGFzQWxsRGVwZW5kZW5jaWVzID0gdHJ1ZTtcbiAgICAgICAgaWYgKCF0aGlzLmlzTG9hZGVkKCkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgb2YgaWRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmltYWdlc1tpZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzQWxsRGVwZW5kZW5jaWVzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzTG9hZGVkKCkgfHwgaGFzQWxsRGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZnkoaWRzLCBjYWxsYmFjayk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlcXVlc3RvcnMucHVzaCh7aWRzLCBjYWxsYmFja30pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX25vdGlmeShpZHM6IEFycmF5PHN0cmluZz4sIGNhbGxiYWNrOiBDYWxsYmFjazx7W186IHN0cmluZ106IFN0eWxlSW1hZ2V9Pikge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IHt9O1xuXG4gICAgICAgIGZvciAoY29uc3QgaWQgb2YgaWRzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaW1hZ2VzW2lkXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3N0eWxlaW1hZ2VtaXNzaW5nJywge2lkfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaW1hZ2UgPSB0aGlzLmltYWdlc1tpZF07XG4gICAgICAgICAgICBpZiAoaW1hZ2UpIHtcbiAgICAgICAgICAgICAgICAvLyBDbG9uZSB0aGUgaW1hZ2Ugc28gdGhhdCBvdXIgb3duIGNvcHkgb2YgaXRzIEFycmF5QnVmZmVyIGRvZXNuJ3QgZ2V0IHRyYW5zZmVycmVkLlxuICAgICAgICAgICAgICAgIHJlc3BvbnNlW2lkXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogaW1hZ2UuZGF0YS5jbG9uZSgpLFxuICAgICAgICAgICAgICAgICAgICBwaXhlbFJhdGlvOiBpbWFnZS5waXhlbFJhdGlvLFxuICAgICAgICAgICAgICAgICAgICBzZGY6IGltYWdlLnNkZixcbiAgICAgICAgICAgICAgICAgICAgdmVyc2lvbjogaW1hZ2UudmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgc3RyZXRjaFg6IGltYWdlLnN0cmV0Y2hYLFxuICAgICAgICAgICAgICAgICAgICBzdHJldGNoWTogaW1hZ2Uuc3RyZXRjaFksXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGltYWdlLmNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgIGhhc1JlbmRlckNhbGxiYWNrOiBCb29sZWFuKGltYWdlLnVzZXJJbWFnZSAmJiBpbWFnZS51c2VySW1hZ2UucmVuZGVyKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHdhcm5PbmNlKGBJbWFnZSBcIiR7aWR9XCIgY291bGQgbm90IGJlIGxvYWRlZC4gUGxlYXNlIG1ha2Ugc3VyZSB5b3UgaGF2ZSBhZGRlZCB0aGUgaW1hZ2Ugd2l0aCBtYXAuYWRkSW1hZ2UoKSBvciBhIFwic3ByaXRlXCIgcHJvcGVydHkgaW4geW91ciBzdHlsZS4gWW91IGNhbiBwcm92aWRlIG1pc3NpbmcgaW1hZ2VzIGJ5IGxpc3RlbmluZyBmb3IgdGhlIFwic3R5bGVpbWFnZW1pc3NpbmdcIiBtYXAgZXZlbnQuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZSk7XG4gICAgfVxuXG4gICAgLy8gUGF0dGVybiBzdHVmZlxuXG4gICAgZ2V0UGl4ZWxTaXplKCkge1xuICAgICAgICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSB0aGlzLmF0bGFzSW1hZ2U7XG4gICAgICAgIHJldHVybiB7d2lkdGgsIGhlaWdodH07XG4gICAgfVxuXG4gICAgZ2V0UGF0dGVybihpZDogc3RyaW5nKTogP0ltYWdlUG9zaXRpb24ge1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gdGhpcy5wYXR0ZXJuc1tpZF07XG5cbiAgICAgICAgY29uc3QgaW1hZ2UgPSB0aGlzLmdldEltYWdlKGlkKTtcbiAgICAgICAgaWYgKCFpbWFnZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGF0dGVybiAmJiBwYXR0ZXJuLnBvc2l0aW9uLnZlcnNpb24gPT09IGltYWdlLnZlcnNpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBwYXR0ZXJuLnBvc2l0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFwYXR0ZXJuKSB7XG4gICAgICAgICAgICBjb25zdCB3ID0gaW1hZ2UuZGF0YS53aWR0aCArIHBhZGRpbmcgKiAyO1xuICAgICAgICAgICAgY29uc3QgaCA9IGltYWdlLmRhdGEuaGVpZ2h0ICsgcGFkZGluZyAqIDI7XG4gICAgICAgICAgICBjb25zdCBiaW4gPSB7dywgaCwgeDogMCwgeTogMH07XG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IG5ldyBJbWFnZVBvc2l0aW9uKGJpbiwgaW1hZ2UpO1xuICAgICAgICAgICAgdGhpcy5wYXR0ZXJuc1tpZF0gPSB7YmluLCBwb3NpdGlvbn07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXR0ZXJuLnBvc2l0aW9uLnZlcnNpb24gPSBpbWFnZS52ZXJzaW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdXBkYXRlUGF0dGVybkF0bGFzKCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucGF0dGVybnNbaWRdLnBvc2l0aW9uO1xuICAgIH1cblxuICAgIGJpbmQoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgICAgIGlmICghdGhpcy5hdGxhc1RleHR1cmUpIHtcbiAgICAgICAgICAgIHRoaXMuYXRsYXNUZXh0dXJlID0gbmV3IFRleHR1cmUoY29udGV4dCwgdGhpcy5hdGxhc0ltYWdlLCBnbC5SR0JBKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRpcnR5KSB7XG4gICAgICAgICAgICB0aGlzLmF0bGFzVGV4dHVyZS51cGRhdGUodGhpcy5hdGxhc0ltYWdlKTtcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYXRsYXNUZXh0dXJlLmJpbmQoZ2wuTElORUFSLCBnbC5DTEFNUF9UT19FREdFKTtcbiAgICB9XG5cbiAgICBfdXBkYXRlUGF0dGVybkF0bGFzKCkge1xuICAgICAgICBjb25zdCBiaW5zID0gW107XG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5wYXR0ZXJucykge1xuICAgICAgICAgICAgYmlucy5wdXNoKHRoaXMucGF0dGVybnNbaWRdLmJpbik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7dywgaH0gPSBwb3RwYWNrKGJpbnMpO1xuXG4gICAgICAgIGNvbnN0IGRzdCA9IHRoaXMuYXRsYXNJbWFnZTtcbiAgICAgICAgZHN0LnJlc2l6ZSh7d2lkdGg6IHcgfHwgMSwgaGVpZ2h0OiBoIHx8IDF9KTtcblxuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMucGF0dGVybnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHtiaW59ID0gdGhpcy5wYXR0ZXJuc1tpZF07XG4gICAgICAgICAgICBjb25zdCB4ID0gYmluLnggKyBwYWRkaW5nO1xuICAgICAgICAgICAgY29uc3QgeSA9IGJpbi55ICsgcGFkZGluZztcbiAgICAgICAgICAgIGNvbnN0IHNyYyA9IHRoaXMuaW1hZ2VzW2lkXS5kYXRhO1xuICAgICAgICAgICAgY29uc3QgdyA9IHNyYy53aWR0aDtcbiAgICAgICAgICAgIGNvbnN0IGggPSBzcmMuaGVpZ2h0O1xuXG4gICAgICAgICAgICBSR0JBSW1hZ2UuY29weShzcmMsIGRzdCwge3g6IDAsIHk6IDB9LCB7eCwgeX0sIHt3aWR0aDogdywgaGVpZ2h0OiBofSk7XG5cbiAgICAgICAgICAgIC8vIEFkZCAxIHBpeGVsIHdyYXBwZWQgcGFkZGluZyBvbiBlYWNoIHNpZGUgb2YgdGhlIGltYWdlLlxuICAgICAgICAgICAgUkdCQUltYWdlLmNvcHkoc3JjLCBkc3QsIHt4OiAwLCB5OiBoIC0gMX0sIHt4LCB5OiB5IC0gMX0sIHt3aWR0aDogdywgaGVpZ2h0OiAxfSk7IC8vIFRcbiAgICAgICAgICAgIFJHQkFJbWFnZS5jb3B5KHNyYywgZHN0LCB7eDogMCwgeTogICAgIDB9LCB7eCwgeTogeSArIGh9LCB7d2lkdGg6IHcsIGhlaWdodDogMX0pOyAvLyBCXG4gICAgICAgICAgICBSR0JBSW1hZ2UuY29weShzcmMsIGRzdCwge3g6IHcgLSAxLCB5OiAwfSwge3g6IHggLSAxLCB5fSwge3dpZHRoOiAxLCBoZWlnaHQ6IGh9KTsgLy8gTFxuICAgICAgICAgICAgUkdCQUltYWdlLmNvcHkoc3JjLCBkc3QsIHt4OiAwLCAgICAgeTogMH0sIHt4OiB4ICsgdywgeX0sIHt3aWR0aDogMSwgaGVpZ2h0OiBofSk7IC8vIFJcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgIH1cblxuICAgIGJlZ2luRnJhbWUoKSB7XG4gICAgICAgIHRoaXMuY2FsbGJhY2tEaXNwYXRjaGVkVGhpc0ZyYW1lID0ge307XG4gICAgfVxuXG4gICAgZGlzcGF0Y2hSZW5kZXJDYWxsYmFja3MoaWRzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIGZvciAoY29uc3QgaWQgb2YgaWRzKSB7XG5cbiAgICAgICAgICAgIC8vIHRoZSBjYWxsYmFjayBmb3IgdGhlIGltYWdlIHdhcyBhbHJlYWR5IGRpc3BhdGNoZWQgZm9yIGEgZGlmZmVyZW50IGZyYW1lXG4gICAgICAgICAgICBpZiAodGhpcy5jYWxsYmFja0Rpc3BhdGNoZWRUaGlzRnJhbWVbaWRdKSBjb250aW51ZTtcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tEaXNwYXRjaGVkVGhpc0ZyYW1lW2lkXSA9IHRydWU7XG5cbiAgICAgICAgICAgIGNvbnN0IGltYWdlID0gdGhpcy5pbWFnZXNbaWRdO1xuICAgICAgICAgICAgYXNzZXJ0KGltYWdlKTtcblxuICAgICAgICAgICAgY29uc3QgdXBkYXRlZCA9IHJlbmRlclN0eWxlSW1hZ2UoaW1hZ2UpO1xuICAgICAgICAgICAgaWYgKHVwZGF0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUltYWdlKGlkLCBpbWFnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEltYWdlTWFuYWdlcjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7Z2V0QXJyYXlCdWZmZXIsIFJlc291cmNlVHlwZX0gZnJvbSAnLi4vdXRpbC9hamF4JztcblxuaW1wb3J0IHBhcnNlR2x5cGhQQkYgZnJvbSAnLi9wYXJzZV9nbHlwaF9wYmYnO1xuXG5pbXBvcnQgdHlwZSB7U3R5bGVHbHlwaH0gZnJvbSAnLi9zdHlsZV9nbHlwaCc7XG5pbXBvcnQgdHlwZSB7UmVxdWVzdE1hbmFnZXJ9IGZyb20gJy4uL3V0aWwvbWFwYm94JztcbmltcG9ydCB0eXBlIHtDYWxsYmFja30gZnJvbSAnLi4vdHlwZXMvY2FsbGJhY2snO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoZm9udHN0YWNrOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsVGVtcGxhdGU6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RNYW5hZ2VyOiBSZXF1ZXN0TWFuYWdlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBDYWxsYmFjazx7W186IG51bWJlcl06IFN0eWxlR2x5cGggfCBudWxsfT4pIHtcbiAgICBjb25zdCBiZWdpbiA9IHJhbmdlICogMjU2O1xuICAgIGNvbnN0IGVuZCA9IGJlZ2luICsgMjU1O1xuXG4gICAgY29uc3QgcmVxdWVzdCA9IHJlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QoXG4gICAgICAgIHJlcXVlc3RNYW5hZ2VyLm5vcm1hbGl6ZUdseXBoc1VSTCh1cmxUZW1wbGF0ZSlcbiAgICAgICAgICAgIC5yZXBsYWNlKCd7Zm9udHN0YWNrfScsIGZvbnRzdGFjaylcbiAgICAgICAgICAgIC5yZXBsYWNlKCd7cmFuZ2V9JywgYCR7YmVnaW59LSR7ZW5kfWApLFxuICAgICAgICBSZXNvdXJjZVR5cGUuR2x5cGhzKTtcblxuICAgIGdldEFycmF5QnVmZmVyKHJlcXVlc3QsIChlcnI6ID9FcnJvciwgZGF0YTogP0FycmF5QnVmZmVyKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YSkge1xuICAgICAgICAgICAgY29uc3QgZ2x5cGhzID0ge307XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgZ2x5cGggb2YgcGFyc2VHbHlwaFBCRihkYXRhKSkge1xuICAgICAgICAgICAgICAgIGdseXBoc1tnbHlwaC5pZF0gPSBnbHlwaDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgZ2x5cGhzKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFRpbnlTREY7XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gVGlueVNERjtcblxudmFyIElORiA9IDFlMjA7XG5cbmZ1bmN0aW9uIFRpbnlTREYoZm9udFNpemUsIGJ1ZmZlciwgcmFkaXVzLCBjdXRvZmYsIGZvbnRGYW1pbHksIGZvbnRXZWlnaHQpIHtcbiAgICB0aGlzLmZvbnRTaXplID0gZm9udFNpemUgfHwgMjQ7XG4gICAgdGhpcy5idWZmZXIgPSBidWZmZXIgPT09IHVuZGVmaW5lZCA/IDMgOiBidWZmZXI7XG4gICAgdGhpcy5jdXRvZmYgPSBjdXRvZmYgfHwgMC4yNTtcbiAgICB0aGlzLmZvbnRGYW1pbHkgPSBmb250RmFtaWx5IHx8ICdzYW5zLXNlcmlmJztcbiAgICB0aGlzLmZvbnRXZWlnaHQgPSBmb250V2VpZ2h0IHx8ICdub3JtYWwnO1xuICAgIHRoaXMucmFkaXVzID0gcmFkaXVzIHx8IDg7XG4gICAgdmFyIHNpemUgPSB0aGlzLnNpemUgPSB0aGlzLmZvbnRTaXplICsgdGhpcy5idWZmZXIgKiAyO1xuXG4gICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuY2FudmFzLmhlaWdodCA9IHNpemU7XG5cbiAgICB0aGlzLmN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgdGhpcy5jdHguZm9udCA9IHRoaXMuZm9udFdlaWdodCArICcgJyArIHRoaXMuZm9udFNpemUgKyAncHggJyArIHRoaXMuZm9udEZhbWlseTtcbiAgICB0aGlzLmN0eC50ZXh0QmFzZWxpbmUgPSAnbWlkZGxlJztcbiAgICB0aGlzLmN0eC5maWxsU3R5bGUgPSAnYmxhY2snO1xuXG4gICAgLy8gdGVtcG9yYXJ5IGFycmF5cyBmb3IgdGhlIGRpc3RhbmNlIHRyYW5zZm9ybVxuICAgIHRoaXMuZ3JpZE91dGVyID0gbmV3IEZsb2F0NjRBcnJheShzaXplICogc2l6ZSk7XG4gICAgdGhpcy5ncmlkSW5uZXIgPSBuZXcgRmxvYXQ2NEFycmF5KHNpemUgKiBzaXplKTtcbiAgICB0aGlzLmYgPSBuZXcgRmxvYXQ2NEFycmF5KHNpemUpO1xuICAgIHRoaXMuZCA9IG5ldyBGbG9hdDY0QXJyYXkoc2l6ZSk7XG4gICAgdGhpcy56ID0gbmV3IEZsb2F0NjRBcnJheShzaXplICsgMSk7XG4gICAgdGhpcy52ID0gbmV3IEludDE2QXJyYXkoc2l6ZSk7XG5cbiAgICAvLyBoYWNrIGFyb3VuZCBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD03Mzc4NTJcbiAgICB0aGlzLm1pZGRsZSA9IE1hdGgucm91bmQoKHNpemUgLyAyKSAqIChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0dlY2tvLycpID49IDAgPyAxLjIgOiAxKSk7XG59XG5cblRpbnlTREYucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbiAoY2hhcikge1xuICAgIHRoaXMuY3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLnNpemUsIHRoaXMuc2l6ZSk7XG4gICAgdGhpcy5jdHguZmlsbFRleHQoY2hhciwgdGhpcy5idWZmZXIsIHRoaXMubWlkZGxlKTtcblxuICAgIHZhciBpbWdEYXRhID0gdGhpcy5jdHguZ2V0SW1hZ2VEYXRhKDAsIDAsIHRoaXMuc2l6ZSwgdGhpcy5zaXplKTtcbiAgICB2YXIgYWxwaGFDaGFubmVsID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHRoaXMuc2l6ZSAqIHRoaXMuc2l6ZSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc2l6ZSAqIHRoaXMuc2l6ZTsgaSsrKSB7XG4gICAgICAgIHZhciBhID0gaW1nRGF0YS5kYXRhW2kgKiA0ICsgM10gLyAyNTU7IC8vIGFscGhhIHZhbHVlXG4gICAgICAgIHRoaXMuZ3JpZE91dGVyW2ldID0gYSA9PT0gMSA/IDAgOiBhID09PSAwID8gSU5GIDogTWF0aC5wb3coTWF0aC5tYXgoMCwgMC41IC0gYSksIDIpO1xuICAgICAgICB0aGlzLmdyaWRJbm5lcltpXSA9IGEgPT09IDEgPyBJTkYgOiBhID09PSAwID8gMCA6IE1hdGgucG93KE1hdGgubWF4KDAsIGEgLSAwLjUpLCAyKTtcbiAgICB9XG5cbiAgICBlZHQodGhpcy5ncmlkT3V0ZXIsIHRoaXMuc2l6ZSwgdGhpcy5zaXplLCB0aGlzLmYsIHRoaXMuZCwgdGhpcy52LCB0aGlzLnopO1xuICAgIGVkdCh0aGlzLmdyaWRJbm5lciwgdGhpcy5zaXplLCB0aGlzLnNpemUsIHRoaXMuZiwgdGhpcy5kLCB0aGlzLnYsIHRoaXMueik7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5zaXplICogdGhpcy5zaXplOyBpKyspIHtcbiAgICAgICAgdmFyIGQgPSB0aGlzLmdyaWRPdXRlcltpXSAtIHRoaXMuZ3JpZElubmVyW2ldO1xuICAgICAgICBhbHBoYUNoYW5uZWxbaV0gPSBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQoMjU1IC0gMjU1ICogKGQgLyB0aGlzLnJhZGl1cyArIHRoaXMuY3V0b2ZmKSkpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWxwaGFDaGFubmVsO1xufTtcblxuLy8gMkQgRXVjbGlkZWFuIGRpc3RhbmNlIHRyYW5zZm9ybSBieSBGZWx6ZW5zendhbGIgJiBIdXR0ZW5sb2NoZXIgaHR0cHM6Ly9jcy5icm93bi5lZHUvfnBmZi9wYXBlcnMvZHQtZmluYWwucGRmXG5mdW5jdGlvbiBlZHQoZGF0YSwgd2lkdGgsIGhlaWdodCwgZiwgZCwgdiwgeikge1xuICAgIGZvciAodmFyIHggPSAwOyB4IDwgd2lkdGg7IHgrKykge1xuICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7XG4gICAgICAgICAgICBmW3ldID0gZGF0YVt5ICogd2lkdGggKyB4XTtcbiAgICAgICAgfVxuICAgICAgICBlZHQxZChmLCBkLCB2LCB6LCBoZWlnaHQpO1xuICAgICAgICBmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHtcbiAgICAgICAgICAgIGRhdGFbeSAqIHdpZHRoICsgeF0gPSBkW3ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAoeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykge1xuICAgICAgICBmb3IgKHggPSAwOyB4IDwgd2lkdGg7IHgrKykge1xuICAgICAgICAgICAgZlt4XSA9IGRhdGFbeSAqIHdpZHRoICsgeF07XG4gICAgICAgIH1cbiAgICAgICAgZWR0MWQoZiwgZCwgdiwgeiwgd2lkdGgpO1xuICAgICAgICBmb3IgKHggPSAwOyB4IDwgd2lkdGg7IHgrKykge1xuICAgICAgICAgICAgZGF0YVt5ICogd2lkdGggKyB4XSA9IE1hdGguc3FydChkW3hdKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gMUQgc3F1YXJlZCBkaXN0YW5jZSB0cmFuc2Zvcm1cbmZ1bmN0aW9uIGVkdDFkKGYsIGQsIHYsIHosIG4pIHtcbiAgICB2WzBdID0gMDtcbiAgICB6WzBdID0gLUlORjtcbiAgICB6WzFdID0gK0lORjtcblxuICAgIGZvciAodmFyIHEgPSAxLCBrID0gMDsgcSA8IG47IHErKykge1xuICAgICAgICB2YXIgcyA9ICgoZltxXSArIHEgKiBxKSAtIChmW3Zba11dICsgdltrXSAqIHZba10pKSAvICgyICogcSAtIDIgKiB2W2tdKTtcbiAgICAgICAgd2hpbGUgKHMgPD0geltrXSkge1xuICAgICAgICAgICAgay0tO1xuICAgICAgICAgICAgcyA9ICgoZltxXSArIHEgKiBxKSAtIChmW3Zba11dICsgdltrXSAqIHZba10pKSAvICgyICogcSAtIDIgKiB2W2tdKTtcbiAgICAgICAgfVxuICAgICAgICBrKys7XG4gICAgICAgIHZba10gPSBxO1xuICAgICAgICB6W2tdID0gcztcbiAgICAgICAgeltrICsgMV0gPSArSU5GO1xuICAgIH1cblxuICAgIGZvciAocSA9IDAsIGsgPSAwOyBxIDwgbjsgcSsrKSB7XG4gICAgICAgIHdoaWxlICh6W2sgKyAxXSA8IHEpIGsrKztcbiAgICAgICAgZFtxXSA9IChxIC0gdltrXSkgKiAocSAtIHZba10pICsgZlt2W2tdXTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgbG9hZEdseXBoUmFuZ2UgZnJvbSAnLi4vc3R5bGUvbG9hZF9nbHlwaF9yYW5nZSc7XG5cbmltcG9ydCBUaW55U0RGIGZyb20gJ0BtYXBib3gvdGlueS1zZGYnO1xuaW1wb3J0IGlzQ2hhciBmcm9tICcuLi91dGlsL2lzX2NoYXJfaW5fdW5pY29kZV9ibG9jayc7XG5pbXBvcnQge2FzeW5jQWxsfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHtBbHBoYUltYWdlfSBmcm9tICcuLi91dGlsL2ltYWdlJztcblxuaW1wb3J0IHR5cGUge1N0eWxlR2x5cGh9IGZyb20gJy4uL3N0eWxlL3N0eWxlX2dseXBoJztcbmltcG9ydCB0eXBlIHtSZXF1ZXN0TWFuYWdlcn0gZnJvbSAnLi4vdXRpbC9tYXBib3gnO1xuaW1wb3J0IHR5cGUge0NhbGxiYWNrfSBmcm9tICcuLi90eXBlcy9jYWxsYmFjayc7XG5cbnR5cGUgRW50cnkgPSB7XG4gICAgLy8gbnVsbCBtZWFucyB3ZSd2ZSByZXF1ZXN0ZWQgdGhlIHJhbmdlLCBidXQgdGhlIGdseXBoIHdhc24ndCBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0LlxuICAgIGdseXBoczoge1tpZDogbnVtYmVyXTogU3R5bGVHbHlwaCB8IG51bGx9LFxuICAgIHJlcXVlc3RzOiB7W3JhbmdlOiBudW1iZXJdOiBBcnJheTxDYWxsYmFjazx7W186IG51bWJlcl06IFN0eWxlR2x5cGggfCBudWxsfT4+fSxcbiAgICByYW5nZXM6IHtbcmFuZ2U6IG51bWJlcl06IGJvb2xlYW4gfCBudWxsfSxcbiAgICB0aW55U0RGPzogVGlueVNERlxufTtcblxuY2xhc3MgR2x5cGhNYW5hZ2VyIHtcbiAgICByZXF1ZXN0TWFuYWdlcjogUmVxdWVzdE1hbmFnZXI7XG4gICAgbG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5OiA/c3RyaW5nO1xuICAgIGVudHJpZXM6IHtbXzogc3RyaW5nXTogRW50cnl9O1xuICAgIHVybDogP3N0cmluZztcblxuICAgIC8vIGV4cG9zZWQgYXMgc3RhdGljcyB0byBlbmFibGUgc3R1YmJpbmcgaW4gdW5pdCB0ZXN0c1xuICAgIHN0YXRpYyBsb2FkR2x5cGhSYW5nZTogdHlwZW9mIGxvYWRHbHlwaFJhbmdlO1xuICAgIHN0YXRpYyBUaW55U0RGOiBDbGFzczxUaW55U0RGPjtcblxuICAgIGNvbnN0cnVjdG9yKHJlcXVlc3RNYW5hZ2VyOiBSZXF1ZXN0TWFuYWdlciwgbG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5OiA/c3RyaW5nKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdE1hbmFnZXIgPSByZXF1ZXN0TWFuYWdlcjtcbiAgICAgICAgdGhpcy5sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHkgPSBsb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk7XG4gICAgICAgIHRoaXMuZW50cmllcyA9IHt9O1xuICAgIH1cblxuICAgIHNldFVSTCh1cmw6ID9zdHJpbmcpIHtcbiAgICAgICAgdGhpcy51cmwgPSB1cmw7XG4gICAgfVxuXG4gICAgZ2V0R2x5cGhzKGdseXBoczoge1tzdGFjazogc3RyaW5nXTogQXJyYXk8bnVtYmVyPn0sIGNhbGxiYWNrOiBDYWxsYmFjazx7W3N0YWNrOiBzdHJpbmddOiB7W2lkOiBudW1iZXJdOiA/U3R5bGVHbHlwaH19Pikge1xuICAgICAgICBjb25zdCBhbGwgPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IHN0YWNrIGluIGdseXBocykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBpZCBvZiBnbHlwaHNbc3RhY2tdKSB7XG4gICAgICAgICAgICAgICAgYWxsLnB1c2goe3N0YWNrLCBpZH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYXN5bmNBbGwoYWxsLCAoe3N0YWNrLCBpZH0sIGNhbGxiYWNrOiBDYWxsYmFjazx7c3RhY2s6IHN0cmluZywgaWQ6IG51bWJlciwgZ2x5cGg6ID9TdHlsZUdseXBofT4pID0+IHtcbiAgICAgICAgICAgIGxldCBlbnRyeSA9IHRoaXMuZW50cmllc1tzdGFja107XG4gICAgICAgICAgICBpZiAoIWVudHJ5KSB7XG4gICAgICAgICAgICAgICAgZW50cnkgPSB0aGlzLmVudHJpZXNbc3RhY2tdID0ge1xuICAgICAgICAgICAgICAgICAgICBnbHlwaHM6IHt9LFxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0czoge30sXG4gICAgICAgICAgICAgICAgICAgIHJhbmdlczoge31cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgZ2x5cGggPSBlbnRyeS5nbHlwaHNbaWRdO1xuICAgICAgICAgICAgaWYgKGdseXBoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsLCB7c3RhY2ssIGlkLCBnbHlwaH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2x5cGggPSB0aGlzLl90aW55U0RGKGVudHJ5LCBzdGFjaywgaWQpO1xuICAgICAgICAgICAgaWYgKGdseXBoKSB7XG4gICAgICAgICAgICAgICAgZW50cnkuZ2x5cGhzW2lkXSA9IGdseXBoO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHtzdGFjaywgaWQsIGdseXBofSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IE1hdGguZmxvb3IoaWQgLyAyNTYpO1xuICAgICAgICAgICAgaWYgKHJhbmdlICogMjU2ID4gNjU1MzUpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoJ2dseXBocyA+IDY1NTM1IG5vdCBzdXBwb3J0ZWQnKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZW50cnkucmFuZ2VzW3JhbmdlXSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHtzdGFjaywgaWQsIGdseXBofSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgcmVxdWVzdHMgPSBlbnRyeS5yZXF1ZXN0c1tyYW5nZV07XG4gICAgICAgICAgICBpZiAoIXJlcXVlc3RzKSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdHMgPSBlbnRyeS5yZXF1ZXN0c1tyYW5nZV0gPSBbXTtcbiAgICAgICAgICAgICAgICBHbHlwaE1hbmFnZXIubG9hZEdseXBoUmFuZ2Uoc3RhY2ssIHJhbmdlLCAodGhpcy51cmw6IGFueSksIHRoaXMucmVxdWVzdE1hbmFnZXIsXG4gICAgICAgICAgICAgICAgICAgIChlcnIsIHJlc3BvbnNlOiA/e1tfOiBudW1iZXJdOiBTdHlsZUdseXBoIHwgbnVsbH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaWQgaW4gcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9kb2VzQ2hhclN1cHBvcnRMb2NhbEdseXBoKCtpZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LmdseXBoc1sraWRdID0gcmVzcG9uc2VbK2lkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5yYW5nZXNbcmFuZ2VdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY2Igb2YgcmVxdWVzdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYihlcnIsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBlbnRyeS5yZXF1ZXN0c1tyYW5nZV07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXF1ZXN0cy5wdXNoKChlcnIsIHJlc3VsdDogP3tbXzogbnVtYmVyXTogU3R5bGVHbHlwaCB8IG51bGx9KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHtzdGFjaywgaWQsIGdseXBoOiByZXN1bHRbaWRdIHx8IG51bGx9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgKGVyciwgZ2x5cGhzOiA/QXJyYXk8e3N0YWNrOiBzdHJpbmcsIGlkOiBudW1iZXIsIGdseXBoOiA/U3R5bGVHbHlwaH0+KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZ2x5cGhzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHtzdGFjaywgaWQsIGdseXBofSBvZiBnbHlwaHMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2xvbmUgdGhlIGdseXBoIHNvIHRoYXQgb3VyIG93biBjb3B5IG9mIGl0cyBBcnJheUJ1ZmZlciBkb2Vzbid0IGdldCB0cmFuc2ZlcnJlZC5cbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdFtzdGFja10gfHwgKHJlc3VsdFtzdGFja10gPSB7fSkpW2lkXSA9IGdseXBoICYmIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBnbHlwaC5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcDogZ2x5cGguYml0bWFwLmNsb25lKCksXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRyaWNzOiBnbHlwaC5tZXRyaWNzXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX2RvZXNDaGFyU3VwcG9ydExvY2FsR2x5cGgoaWQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuZXctY2FwICovXG4gICAgICAgIHJldHVybiAhIXRoaXMubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5ICYmXG4gICAgICAgICAgICAoaXNDaGFyWydDSksgVW5pZmllZCBJZGVvZ3JhcGhzJ10oaWQpIHx8XG4gICAgICAgICAgICAgICAgaXNDaGFyWydIYW5ndWwgU3lsbGFibGVzJ10oaWQpIHx8XG4gICAgICAgICAgICAgICAgaXNDaGFyWydIaXJhZ2FuYSddKGlkKSB8fFxuICAgICAgICAgICAgICAgIGlzQ2hhclsnS2F0YWthbmEnXShpZCkpO1xuICAgICAgICAvKiBlc2xpbnQtZW5hYmxlIG5ldy1jYXAgKi9cbiAgICB9XG5cbiAgICBfdGlueVNERihlbnRyeTogRW50cnksIHN0YWNrOiBzdHJpbmcsIGlkOiBudW1iZXIpOiA/U3R5bGVHbHlwaCB7XG4gICAgICAgIGNvbnN0IGZhbWlseSA9IHRoaXMubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5O1xuICAgICAgICBpZiAoIWZhbWlseSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9kb2VzQ2hhclN1cHBvcnRMb2NhbEdseXBoKGlkKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHRpbnlTREYgPSBlbnRyeS50aW55U0RGO1xuICAgICAgICBpZiAoIXRpbnlTREYpIHtcbiAgICAgICAgICAgIGxldCBmb250V2VpZ2h0ID0gJzQwMCc7XG4gICAgICAgICAgICBpZiAoL2JvbGQvaS50ZXN0KHN0YWNrKSkge1xuICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQgPSAnOTAwJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoL21lZGl1bS9pLnRlc3Qoc3RhY2spKSB7XG4gICAgICAgICAgICAgICAgZm9udFdlaWdodCA9ICc1MDAnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgvbGlnaHQvaS50ZXN0KHN0YWNrKSkge1xuICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQgPSAnMjAwJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRpbnlTREYgPSBlbnRyeS50aW55U0RGID0gbmV3IEdseXBoTWFuYWdlci5UaW55U0RGKDI0LCAzLCA4LCAuMjUsIGZhbWlseSwgZm9udFdlaWdodCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICBiaXRtYXA6IG5ldyBBbHBoYUltYWdlKHt3aWR0aDogMzAsIGhlaWdodDogMzB9LCB0aW55U0RGLmRyYXcoU3RyaW5nLmZyb21DaGFyQ29kZShpZCkpKSxcbiAgICAgICAgICAgIG1ldHJpY3M6IHtcbiAgICAgICAgICAgICAgICB3aWR0aDogMjQsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAyNCxcbiAgICAgICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgICAgIHRvcDogLTgsXG4gICAgICAgICAgICAgICAgYWR2YW5jZTogMjRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG59XG5cbkdseXBoTWFuYWdlci5sb2FkR2x5cGhSYW5nZSA9IGxvYWRHbHlwaFJhbmdlO1xuR2x5cGhNYW5hZ2VyLlRpbnlTREYgPSBUaW55U0RGO1xuXG5leHBvcnQgZGVmYXVsdCBHbHlwaE1hbmFnZXI7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgc3R5bGVTcGVjIGZyb20gJy4uL3N0eWxlLXNwZWMvcmVmZXJlbmNlL2xhdGVzdCc7XG5cbmltcG9ydCB7ZW5kc1dpdGgsIGV4dGVuZCwgc3BoZXJpY2FsVG9DYXJ0ZXNpYW59IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQge0V2ZW50ZWR9IGZyb20gJy4uL3V0aWwvZXZlbnRlZCc7XG5pbXBvcnQge1xuICAgIHZhbGlkYXRlU3R5bGUsXG4gICAgdmFsaWRhdGVMaWdodCxcbiAgICBlbWl0VmFsaWRhdGlvbkVycm9yc1xufSBmcm9tICcuL3ZhbGlkYXRlX3N0eWxlJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuaW1wb3J0IHtudW1iZXIgYXMgaW50ZXJwb2xhdGV9IGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9pbnRlcnBvbGF0ZSc7XG5cbmltcG9ydCB0eXBlIHtTdHlsZVByb3BlcnR5U3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy9zdHlsZS1zcGVjJztcbmltcG9ydCB0eXBlIEV2YWx1YXRpb25QYXJhbWV0ZXJzIGZyb20gJy4vZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcbmltcG9ydCB0eXBlIHtTdHlsZVNldHRlck9wdGlvbnN9IGZyb20gJy4uL3N0eWxlL3N0eWxlJztcbmltcG9ydCB7UHJvcGVydGllcywgVHJhbnNpdGlvbmFibGUsIFRyYW5zaXRpb25pbmcsIFBvc3NpYmx5RXZhbHVhdGVkLCBEYXRhQ29uc3RhbnRQcm9wZXJ0eX0gZnJvbSAnLi9wcm9wZXJ0aWVzJztcblxuaW1wb3J0IHR5cGUge1xuICAgIFByb3BlcnR5LFxuICAgIFByb3BlcnR5VmFsdWUsXG4gICAgVHJhbnNpdGlvblBhcmFtZXRlcnNcbn0gZnJvbSAnLi9wcm9wZXJ0aWVzJztcblxuaW1wb3J0IHR5cGUge0xpZ2h0U3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbnR5cGUgTGlnaHRQb3NpdGlvbiA9IHtcbiAgICB4OiBudW1iZXIsXG4gICAgeTogbnVtYmVyLFxuICAgIHo6IG51bWJlclxufTtcblxuY2xhc3MgTGlnaHRQb3NpdGlvblByb3BlcnR5IGltcGxlbWVudHMgUHJvcGVydHk8W251bWJlciwgbnVtYmVyLCBudW1iZXJdLCBMaWdodFBvc2l0aW9uPiB7XG4gICAgc3BlY2lmaWNhdGlvbjogU3R5bGVQcm9wZXJ0eVNwZWNpZmljYXRpb247XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5zcGVjaWZpY2F0aW9uID0gc3R5bGVTcGVjLmxpZ2h0LnBvc2l0aW9uO1xuICAgIH1cblxuICAgIHBvc3NpYmx5RXZhbHVhdGUodmFsdWU6IFByb3BlcnR5VmFsdWU8W251bWJlciwgbnVtYmVyLCBudW1iZXJdLCBMaWdodFBvc2l0aW9uPiwgcGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMpOiBMaWdodFBvc2l0aW9uIHtcbiAgICAgICAgcmV0dXJuIHNwaGVyaWNhbFRvQ2FydGVzaWFuKHZhbHVlLmV4cHJlc3Npb24uZXZhbHVhdGUocGFyYW1ldGVycykpO1xuICAgIH1cblxuICAgIGludGVycG9sYXRlKGE6IExpZ2h0UG9zaXRpb24sIGI6IExpZ2h0UG9zaXRpb24sIHQ6IG51bWJlcik6IExpZ2h0UG9zaXRpb24ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogaW50ZXJwb2xhdGUoYS54LCBiLngsIHQpLFxuICAgICAgICAgICAgeTogaW50ZXJwb2xhdGUoYS55LCBiLnksIHQpLFxuICAgICAgICAgICAgejogaW50ZXJwb2xhdGUoYS56LCBiLnosIHQpLFxuICAgICAgICB9O1xuICAgIH1cbn1cblxudHlwZSBQcm9wcyA9IHt8XG4gICAgXCJhbmNob3JcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8XCJtYXBcIiB8IFwidmlld3BvcnRcIj4sXG4gICAgXCJwb3NpdGlvblwiOiBMaWdodFBvc2l0aW9uUHJvcGVydHksXG4gICAgXCJjb2xvclwiOiBEYXRhQ29uc3RhbnRQcm9wZXJ0eTxDb2xvcj4sXG4gICAgXCJpbnRlbnNpdHlcIjogRGF0YUNvbnN0YW50UHJvcGVydHk8bnVtYmVyPixcbnx9O1xuXG5jb25zdCBwcm9wZXJ0aWVzOiBQcm9wZXJ0aWVzPFByb3BzPiA9IG5ldyBQcm9wZXJ0aWVzKHtcbiAgICBcImFuY2hvclwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjLmxpZ2h0LmFuY2hvciksXG4gICAgXCJwb3NpdGlvblwiOiBuZXcgTGlnaHRQb3NpdGlvblByb3BlcnR5KCksXG4gICAgXCJjb2xvclwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjLmxpZ2h0LmNvbG9yKSxcbiAgICBcImludGVuc2l0eVwiOiBuZXcgRGF0YUNvbnN0YW50UHJvcGVydHkoc3R5bGVTcGVjLmxpZ2h0LmludGVuc2l0eSksXG59KTtcblxuY29uc3QgVFJBTlNJVElPTl9TVUZGSVggPSAnLXRyYW5zaXRpb24nO1xuXG4vKlxuICogUmVwcmVzZW50cyB0aGUgbGlnaHQgdXNlZCB0byBsaWdodCBleHRydWRlZCBmZWF0dXJlcy5cbiAqL1xuY2xhc3MgTGlnaHQgZXh0ZW5kcyBFdmVudGVkIHtcbiAgICBfdHJhbnNpdGlvbmFibGU6IFRyYW5zaXRpb25hYmxlPFByb3BzPjtcbiAgICBfdHJhbnNpdGlvbmluZzogVHJhbnNpdGlvbmluZzxQcm9wcz47XG4gICAgcHJvcGVydGllczogUG9zc2libHlFdmFsdWF0ZWQ8UHJvcHM+O1xuXG4gICAgY29uc3RydWN0b3IobGlnaHRPcHRpb25zPzogTGlnaHRTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX3RyYW5zaXRpb25hYmxlID0gbmV3IFRyYW5zaXRpb25hYmxlKHByb3BlcnRpZXMpO1xuICAgICAgICB0aGlzLnNldExpZ2h0KGxpZ2h0T3B0aW9ucyk7XG4gICAgICAgIHRoaXMuX3RyYW5zaXRpb25pbmcgPSB0aGlzLl90cmFuc2l0aW9uYWJsZS51bnRyYW5zaXRpb25lZCgpO1xuICAgIH1cblxuICAgIGdldExpZ2h0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNpdGlvbmFibGUuc2VyaWFsaXplKCk7XG4gICAgfVxuXG4gICAgc2V0TGlnaHQobGlnaHQ/OiBMaWdodFNwZWNpZmljYXRpb24sIG9wdGlvbnM6IFN0eWxlU2V0dGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIGlmICh0aGlzLl92YWxpZGF0ZSh2YWxpZGF0ZUxpZ2h0LCBsaWdodCwgb3B0aW9ucykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBpbiBsaWdodCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBsaWdodFtuYW1lXTtcbiAgICAgICAgICAgIGlmIChlbmRzV2l0aChuYW1lLCBUUkFOU0lUSU9OX1NVRkZJWCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2l0aW9uYWJsZS5zZXRUcmFuc2l0aW9uKG5hbWUuc2xpY2UoMCwgLVRSQU5TSVRJT05fU1VGRklYLmxlbmd0aCksIHZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNpdGlvbmFibGUuc2V0VmFsdWUobmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlVHJhbnNpdGlvbnMocGFyYW1ldGVyczogVHJhbnNpdGlvblBhcmFtZXRlcnMpIHtcbiAgICAgICAgdGhpcy5fdHJhbnNpdGlvbmluZyA9IHRoaXMuX3RyYW5zaXRpb25hYmxlLnRyYW5zaXRpb25lZChwYXJhbWV0ZXJzLCB0aGlzLl90cmFuc2l0aW9uaW5nKTtcbiAgICB9XG5cbiAgICBoYXNUcmFuc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNpdGlvbmluZy5oYXNUcmFuc2l0aW9uKCk7XG4gICAgfVxuXG4gICAgcmVjYWxjdWxhdGUocGFyYW1ldGVyczogRXZhbHVhdGlvblBhcmFtZXRlcnMpIHtcbiAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gdGhpcy5fdHJhbnNpdGlvbmluZy5wb3NzaWJseUV2YWx1YXRlKHBhcmFtZXRlcnMpO1xuICAgIH1cblxuICAgIF92YWxpZGF0ZSh2YWxpZGF0ZTogRnVuY3Rpb24sIHZhbHVlOiBtaXhlZCwgb3B0aW9ucz86IHt2YWxpZGF0ZT86IGJvb2xlYW59KSB7XG4gICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMudmFsaWRhdGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZW1pdFZhbGlkYXRpb25FcnJvcnModGhpcywgdmFsaWRhdGUuY2FsbCh2YWxpZGF0ZVN0eWxlLCBleHRlbmQoe1xuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvMjQwN1xuICAgICAgICAgICAgc3R5bGU6IHtnbHlwaHM6IHRydWUsIHNwcml0ZTogdHJ1ZX0sXG4gICAgICAgICAgICBzdHlsZVNwZWNcbiAgICAgICAgfSkpKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpZ2h0O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHt3YXJuT25jZX0gZnJvbSAnLi4vdXRpbC91dGlsJztcblxuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi9nbC9jb250ZXh0JztcblxuLyoqXG4gKiBBIExpbmVBdGxhcyBsZXRzIHVzIHJldXNlIHJlbmRlcmVkIGRhc2hlZCBsaW5lc1xuICogYnkgd3JpdGluZyBtYW55IG9mIHRoZW0gdG8gYSB0ZXh0dXJlIGFuZCB0aGVuIGZldGNoaW5nIHRoZWlyIHBvc2l0aW9uc1xuICogdXNpbmcgLmdldERhc2guXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoXG4gKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0XG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBMaW5lQXRsYXMge1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgaGVpZ2h0OiBudW1iZXI7XG4gICAgbmV4dFJvdzogbnVtYmVyO1xuICAgIGJ5dGVzOiBudW1iZXI7XG4gICAgZGF0YTogVWludDhBcnJheTtcbiAgICBkYXNoRW50cnk6IHtbXzogc3RyaW5nXTogYW55fTtcbiAgICBkaXJ0eTogYm9vbGVhbjtcbiAgICB0ZXh0dXJlOiBXZWJHTFRleHR1cmU7XG5cbiAgICBjb25zdHJ1Y3Rvcih3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICB0aGlzLm5leHRSb3cgPSAwO1xuXG4gICAgICAgIHRoaXMuZGF0YSA9IG5ldyBVaW50OEFycmF5KHRoaXMud2lkdGggKiB0aGlzLmhlaWdodCk7XG5cbiAgICAgICAgdGhpcy5kYXNoRW50cnkgPSB7fTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgb3IgY3JlYXRlIGEgZGFzaCBsaW5lIHBhdHRlcm4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IGRhc2hhcnJheVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gcm91bmQgd2hldGhlciB0byBhZGQgY2lyY2xlIGNhcHMgaW4gYmV0d2VlbiBkYXNoIHNlZ21lbnRzXG4gICAgICogQHJldHVybnMge09iamVjdH0gcG9zaXRpb24gb2YgZGFzaCB0ZXh0dXJlIGluIHsgeSwgaGVpZ2h0LCB3aWR0aCB9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBnZXREYXNoKGRhc2hhcnJheTogQXJyYXk8bnVtYmVyPiwgcm91bmQ6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3Qga2V5ID0gZGFzaGFycmF5LmpvaW4oXCIsXCIpICsgU3RyaW5nKHJvdW5kKTtcblxuICAgICAgICBpZiAoIXRoaXMuZGFzaEVudHJ5W2tleV0pIHtcbiAgICAgICAgICAgIHRoaXMuZGFzaEVudHJ5W2tleV0gPSB0aGlzLmFkZERhc2goZGFzaGFycmF5LCByb3VuZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGFzaEVudHJ5W2tleV07XG4gICAgfVxuXG4gICAgZ2V0RGFzaFJhbmdlcyhkYXNoYXJyYXk6IEFycmF5PG51bWJlcj4sIGxpbmVBdGxhc1dpZHRoOiBudW1iZXIsIHN0cmV0Y2g6IG51bWJlcikge1xuICAgICAgICAvLyBJZiBkYXNoYXJyYXkgaGFzIGFuIG9kZCBsZW5ndGgsIGJvdGggdGhlIGZpcnN0IGFuZCBsYXN0IHBhcnRzXG4gICAgICAgIC8vIGFyZSBkYXNoZXMgYW5kIHNob3VsZCBiZSBqb2luZWQgc2VhbWxlc3NseS5cbiAgICAgICAgY29uc3Qgb2RkRGFzaEFycmF5ID0gZGFzaGFycmF5Lmxlbmd0aCAlIDIgPT09IDE7XG5cbiAgICAgICAgY29uc3QgcmFuZ2VzID0gW107XG5cbiAgICAgICAgbGV0IGxlZnQgPSBvZGREYXNoQXJyYXkgPyAtZGFzaGFycmF5W2Rhc2hhcnJheS5sZW5ndGggLSAxXSAqIHN0cmV0Y2ggOiAwO1xuICAgICAgICBsZXQgcmlnaHQgPSBkYXNoYXJyYXlbMF0gKiBzdHJldGNoO1xuICAgICAgICBsZXQgaXNEYXNoID0gdHJ1ZTtcblxuICAgICAgICByYW5nZXMucHVzaCh7bGVmdCwgcmlnaHQsIGlzRGFzaCwgemVyb0xlbmd0aDogZGFzaGFycmF5WzBdID09PSAwfSk7XG5cbiAgICAgICAgbGV0IGN1cnJlbnREYXNoTGVuZ3RoID0gZGFzaGFycmF5WzBdO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGRhc2hhcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaXNEYXNoID0gIWlzRGFzaDtcblxuICAgICAgICAgICAgY29uc3QgZGFzaExlbmd0aCA9IGRhc2hhcnJheVtpXTtcbiAgICAgICAgICAgIGxlZnQgPSBjdXJyZW50RGFzaExlbmd0aCAqIHN0cmV0Y2g7XG4gICAgICAgICAgICBjdXJyZW50RGFzaExlbmd0aCArPSBkYXNoTGVuZ3RoO1xuICAgICAgICAgICAgcmlnaHQgPSBjdXJyZW50RGFzaExlbmd0aCAqIHN0cmV0Y2g7XG5cbiAgICAgICAgICAgIHJhbmdlcy5wdXNoKHtsZWZ0LCByaWdodCwgaXNEYXNoLCB6ZXJvTGVuZ3RoOiBkYXNoTGVuZ3RoID09PSAwfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmFuZ2VzO1xuICAgIH1cblxuICAgIGFkZFJvdW5kRGFzaChyYW5nZXM6IE9iamVjdCwgc3RyZXRjaDogbnVtYmVyLCBuOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaGFsZlN0cmV0Y2ggPSBzdHJldGNoIC8gMjtcblxuICAgICAgICBmb3IgKGxldCB5ID0gLW47IHkgPD0gbjsgeSsrKSB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLm5leHRSb3cgKyBuICsgeTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy53aWR0aCAqIHJvdztcbiAgICAgICAgICAgIGxldCBjdXJySW5kZXggPSAwO1xuICAgICAgICAgICAgbGV0IHJhbmdlID0gcmFuZ2VzW2N1cnJJbmRleF07XG5cbiAgICAgICAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgdGhpcy53aWR0aDsgeCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHggLyByYW5nZS5yaWdodCA+IDEpIHsgcmFuZ2UgPSByYW5nZXNbKytjdXJySW5kZXhdOyB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBkaXN0TGVmdCA9IE1hdGguYWJzKHggLSByYW5nZS5sZWZ0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXN0UmlnaHQgPSBNYXRoLmFicyh4IC0gcmFuZ2UucmlnaHQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1pbkRpc3QgPSBNYXRoLm1pbihkaXN0TGVmdCwgZGlzdFJpZ2h0KTtcbiAgICAgICAgICAgICAgICBsZXQgc2lnbmVkRGlzdGFuY2U7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBkaXN0TWlkZGxlID0gIHkgLyBuICogKGhhbGZTdHJldGNoICsgMSk7XG4gICAgICAgICAgICAgICAgaWYgKHJhbmdlLmlzRGFzaCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXN0RWRnZSA9IGhhbGZTdHJldGNoIC0gTWF0aC5hYnMoZGlzdE1pZGRsZSk7XG4gICAgICAgICAgICAgICAgICAgIHNpZ25lZERpc3RhbmNlID0gTWF0aC5zcXJ0KG1pbkRpc3QgKiBtaW5EaXN0ICsgZGlzdEVkZ2UgKiBkaXN0RWRnZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2lnbmVkRGlzdGFuY2UgPSBoYWxmU3RyZXRjaCAtIE1hdGguc3FydChtaW5EaXN0ICogbWluRGlzdCArIGRpc3RNaWRkbGUgKiBkaXN0TWlkZGxlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFbaW5kZXggKyB4XSA9IE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgc2lnbmVkRGlzdGFuY2UgKyAxMjgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFkZFJlZ3VsYXJEYXNoKHJhbmdlczogT2JqZWN0KSB7XG5cbiAgICAgICAgLy8gQ29sbGFwc2UgYW55IHplcm8tbGVuZ3RoIHJhbmdlXG4gICAgICAgIC8vIENvbGxhcHNlIG5laWdoYm91cmluZyBzYW1lLXR5cGUgcGFydHMgaW50byBhIHNpbmdsZSBwYXJ0XG4gICAgICAgIGZvciAobGV0IGkgPSByYW5nZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnQgPSByYW5nZXNbaV07XG4gICAgICAgICAgICBjb25zdCBuZXh0ID0gcmFuZ2VzW2kgKyAxXTtcbiAgICAgICAgICAgIGlmIChwYXJ0Lnplcm9MZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByYW5nZXMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChuZXh0ICYmIG5leHQuaXNEYXNoID09PSBwYXJ0LmlzRGFzaCkge1xuICAgICAgICAgICAgICAgIG5leHQubGVmdCA9IHBhcnQubGVmdDtcbiAgICAgICAgICAgICAgICByYW5nZXMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29tYmluZSB0aGUgZmlyc3QgYW5kIGxhc3QgcGFydHMgaWYgcG9zc2libGVcbiAgICAgICAgY29uc3QgZmlyc3QgPSByYW5nZXNbMF07XG4gICAgICAgIGNvbnN0IGxhc3QgPSByYW5nZXNbcmFuZ2VzLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAoZmlyc3QuaXNEYXNoID09PSBsYXN0LmlzRGFzaCkge1xuICAgICAgICAgICAgZmlyc3QubGVmdCA9IGxhc3QubGVmdCAtIHRoaXMud2lkdGg7XG4gICAgICAgICAgICBsYXN0LnJpZ2h0ID0gZmlyc3QucmlnaHQgKyB0aGlzLndpZHRoO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLndpZHRoICogdGhpcy5uZXh0Um93O1xuICAgICAgICBsZXQgY3VyckluZGV4ID0gMDtcbiAgICAgICAgbGV0IHJhbmdlID0gcmFuZ2VzW2N1cnJJbmRleF07XG5cbiAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCB0aGlzLndpZHRoOyB4KyspIHtcbiAgICAgICAgICAgIGlmICh4IC8gcmFuZ2UucmlnaHQgPiAxKSB7XG4gICAgICAgICAgICAgICAgcmFuZ2UgPSByYW5nZXNbKytjdXJySW5kZXhdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBkaXN0TGVmdCA9IE1hdGguYWJzKHggLSByYW5nZS5sZWZ0KTtcbiAgICAgICAgICAgIGNvbnN0IGRpc3RSaWdodCA9IE1hdGguYWJzKHggLSByYW5nZS5yaWdodCk7XG5cbiAgICAgICAgICAgIGNvbnN0IG1pbkRpc3QgPSBNYXRoLm1pbihkaXN0TGVmdCwgZGlzdFJpZ2h0KTtcbiAgICAgICAgICAgIGNvbnN0IHNpZ25lZERpc3RhbmNlID0gcmFuZ2UuaXNEYXNoID8gbWluRGlzdCA6IC1taW5EaXN0O1xuXG4gICAgICAgICAgICB0aGlzLmRhdGFbaW5kZXggKyB4XSA9IE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgc2lnbmVkRGlzdGFuY2UgKyAxMjgpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFkZERhc2goZGFzaGFycmF5OiBBcnJheTxudW1iZXI+LCByb3VuZDogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBuID0gcm91bmQgPyA3IDogMDtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gMiAqIG4gKyAxO1xuXG4gICAgICAgIGlmICh0aGlzLm5leHRSb3cgKyBoZWlnaHQgPiB0aGlzLmhlaWdodCkge1xuICAgICAgICAgICAgd2Fybk9uY2UoJ0xpbmVBdGxhcyBvdXQgb2Ygc3BhY2UnKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxlbmd0aCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGFzaGFycmF5Lmxlbmd0aDsgaSsrKSB7IGxlbmd0aCArPSBkYXNoYXJyYXlbaV07IH1cblxuICAgICAgICBpZiAobGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBzdHJldGNoID0gdGhpcy53aWR0aCAvIGxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlcyA9IHRoaXMuZ2V0RGFzaFJhbmdlcyhkYXNoYXJyYXksIHRoaXMud2lkdGgsIHN0cmV0Y2gpO1xuXG4gICAgICAgICAgICBpZiAocm91bmQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFJvdW5kRGFzaChyYW5nZXMsIHN0cmV0Y2gsIG4pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFJlZ3VsYXJEYXNoKHJhbmdlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXNoRW50cnkgPSB7XG4gICAgICAgICAgICB5OiAodGhpcy5uZXh0Um93ICsgbiArIDAuNSkgLyB0aGlzLmhlaWdodCxcbiAgICAgICAgICAgIGhlaWdodDogMiAqIG4gLyB0aGlzLmhlaWdodCxcbiAgICAgICAgICAgIHdpZHRoOiBsZW5ndGhcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLm5leHRSb3cgKz0gaGVpZ2h0O1xuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gZGFzaEVudHJ5O1xuICAgIH1cblxuICAgIGJpbmQoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgICAgIGlmICghdGhpcy50ZXh0dXJlKSB7XG4gICAgICAgICAgICB0aGlzLnRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0aGlzLnRleHR1cmUpO1xuICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuUkVQRUFUKTtcbiAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1QsIGdsLlJFUEVBVCk7XG4gICAgICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZ2wuTElORUFSKTtcbiAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBnbC5MSU5FQVIpO1xuICAgICAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5BTFBIQSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQsIDAsIGdsLkFMUEhBLCBnbC5VTlNJR05FRF9CWVRFLCB0aGlzLmRhdGEpO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0aGlzLnRleHR1cmUpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5kaXJ0eSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBnbC50ZXhTdWJJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIDAsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCBnbC5BTFBIQSwgZ2wuVU5TSUdORURfQllURSwgdGhpcy5kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGluZUF0bGFzO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHt1bmlxdWVJZCwgYXN5bmNBbGx9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgQWN0b3IgZnJvbSAnLi9hY3Rvcic7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB0eXBlIFdvcmtlclBvb2wgZnJvbSAnLi93b3JrZXJfcG9vbCc7XG5cbi8qKlxuICogUmVzcG9uc2libGUgZm9yIHNlbmRpbmcgbWVzc2FnZXMgZnJvbSBhIHtAbGluayBTb3VyY2V9IHRvIGFuIGFzc29jaWF0ZWRcbiAqIHtAbGluayBXb3JrZXJTb3VyY2V9LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIERpc3BhdGNoZXIge1xuICAgIHdvcmtlclBvb2w6IFdvcmtlclBvb2w7XG4gICAgYWN0b3JzOiBBcnJheTxBY3Rvcj47XG4gICAgY3VycmVudEFjdG9yOiBudW1iZXI7XG4gICAgaWQ6IG51bWJlcjtcblxuICAgIC8vIGV4cG9zZWQgdG8gYWxsb3cgc3R1YmJpbmcgaW4gdW5pdCB0ZXN0c1xuICAgIHN0YXRpYyBBY3RvcjogQ2xhc3M8QWN0b3I+O1xuXG4gICAgY29uc3RydWN0b3Iod29ya2VyUG9vbDogV29ya2VyUG9vbCwgcGFyZW50OiBhbnkpIHtcbiAgICAgICAgdGhpcy53b3JrZXJQb29sID0gd29ya2VyUG9vbDtcbiAgICAgICAgdGhpcy5hY3RvcnMgPSBbXTtcbiAgICAgICAgdGhpcy5jdXJyZW50QWN0b3IgPSAwO1xuICAgICAgICB0aGlzLmlkID0gdW5pcXVlSWQoKTtcbiAgICAgICAgY29uc3Qgd29ya2VycyA9IHRoaXMud29ya2VyUG9vbC5hY3F1aXJlKHRoaXMuaWQpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHdvcmtlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHdvcmtlciA9IHdvcmtlcnNbaV07XG4gICAgICAgICAgICBjb25zdCBhY3RvciA9IG5ldyBEaXNwYXRjaGVyLkFjdG9yKHdvcmtlciwgcGFyZW50LCB0aGlzLmlkKTtcbiAgICAgICAgICAgIGFjdG9yLm5hbWUgPSBgV29ya2VyICR7aX1gO1xuICAgICAgICAgICAgdGhpcy5hY3RvcnMucHVzaChhY3Rvcik7XG4gICAgICAgIH1cbiAgICAgICAgYXNzZXJ0KHRoaXMuYWN0b3JzLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnJvYWRjYXN0IGEgbWVzc2FnZSB0byBhbGwgV29ya2Vycy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGJyb2FkY2FzdCh0eXBlOiBzdHJpbmcsIGRhdGE6IG1peGVkLCBjYj86IEZ1bmN0aW9uKSB7XG4gICAgICAgIGFzc2VydCh0aGlzLmFjdG9ycy5sZW5ndGgpO1xuICAgICAgICBjYiA9IGNiIHx8IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgICBhc3luY0FsbCh0aGlzLmFjdG9ycywgKGFjdG9yLCBkb25lKSA9PiB7XG4gICAgICAgICAgICBhY3Rvci5zZW5kKHR5cGUsIGRhdGEsIGRvbmUpO1xuICAgICAgICB9LCBjYik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWNxdWlyZXMgYW4gYWN0b3IgdG8gZGlzcGF0Y2ggbWVzc2FnZXMgdG8uIFRoZSBhY3RvcnMgYXJlIGRpc3RyaWJ1dGVkIGluIHJvdW5kLXJvYmluIGZhc2hpb24uXG4gICAgICogQHJldHVybnMgQW4gYWN0b3Igb2JqZWN0IGJhY2tlZCBieSBhIHdlYiB3b3JrZXIgZm9yIHByb2Nlc3NpbmcgbWVzc2FnZXMuXG4gICAgICovXG4gICAgZ2V0QWN0b3IoKTogQWN0b3Ige1xuICAgICAgICBhc3NlcnQodGhpcy5hY3RvcnMubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5jdXJyZW50QWN0b3IgPSAodGhpcy5jdXJyZW50QWN0b3IgKyAxKSAlIHRoaXMuYWN0b3JzLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0b3JzW3RoaXMuY3VycmVudEFjdG9yXTtcbiAgICB9XG5cbiAgICByZW1vdmUoKSB7XG4gICAgICAgIHRoaXMuYWN0b3JzLmZvckVhY2goKGFjdG9yKSA9PiB7IGFjdG9yLnJlbW92ZSgpOyB9KTtcbiAgICAgICAgdGhpcy5hY3RvcnMgPSBbXTtcbiAgICAgICAgdGhpcy53b3JrZXJQb29sLnJlbGVhc2UodGhpcy5pZCk7XG4gICAgfVxufVxuXG5EaXNwYXRjaGVyLkFjdG9yID0gQWN0b3I7XG5cbmV4cG9ydCBkZWZhdWx0IERpc3BhdGNoZXI7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge3BpY2ssIGV4dGVuZH0gZnJvbSAnLi4vdXRpbC91dGlsJztcblxuaW1wb3J0IHtnZXRKU09OLCBSZXNvdXJjZVR5cGV9IGZyb20gJy4uL3V0aWwvYWpheCc7XG5pbXBvcnQgYnJvd3NlciBmcm9tICcuLi91dGlsL2Jyb3dzZXInO1xuXG5pbXBvcnQgdHlwZSB7UmVxdWVzdE1hbmFnZXJ9IGZyb20gJy4uL3V0aWwvbWFwYm94JztcbmltcG9ydCB0eXBlIHtDYWxsYmFja30gZnJvbSAnLi4vdHlwZXMvY2FsbGJhY2snO1xuaW1wb3J0IHR5cGUge1RpbGVKU09OfSBmcm9tICcuLi90eXBlcy90aWxlanNvbic7XG5pbXBvcnQgdHlwZSB7Q2FuY2VsYWJsZX0gZnJvbSAnLi4vdHlwZXMvY2FuY2VsYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG9wdGlvbnM6IGFueSwgcmVxdWVzdE1hbmFnZXI6IFJlcXVlc3RNYW5hZ2VyLCBjYWxsYmFjazogQ2FsbGJhY2s8VGlsZUpTT04+KTogQ2FuY2VsYWJsZSB7XG4gICAgY29uc3QgbG9hZGVkID0gZnVuY3Rpb24oZXJyOiA/RXJyb3IsIHRpbGVKU09OOiA/T2JqZWN0KSB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9IGVsc2UgaWYgKHRpbGVKU09OKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQ6IGFueSA9IHBpY2soXG4gICAgICAgICAgICAgICAgLy8gZXhwbGljaXQgc291cmNlIG9wdGlvbnMgdGFrZSBwcmVjZWRlbmNlIG92ZXIgVGlsZUpTT05cbiAgICAgICAgICAgICAgICBleHRlbmQodGlsZUpTT04sIG9wdGlvbnMpLFxuICAgICAgICAgICAgICAgIFsndGlsZXMnLCAnbWluem9vbScsICdtYXh6b29tJywgJ2F0dHJpYnV0aW9uJywgJ21hcGJveF9sb2dvJywgJ2JvdW5kcycsICdzY2hlbWUnLCAndGlsZVNpemUnLCAnZW5jb2RpbmcnXVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKHRpbGVKU09OLnZlY3Rvcl9sYXllcnMpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQudmVjdG9yTGF5ZXJzID0gdGlsZUpTT04udmVjdG9yX2xheWVycztcbiAgICAgICAgICAgICAgICByZXN1bHQudmVjdG9yTGF5ZXJJZHMgPSByZXN1bHQudmVjdG9yTGF5ZXJzLm1hcCgobGF5ZXIpID0+IHsgcmV0dXJuIGxheWVyLmlkOyB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzdWx0LnRpbGVzID0gcmVxdWVzdE1hbmFnZXIuY2Fub25pY2FsaXplVGlsZXNldChyZXN1bHQsIG9wdGlvbnMudXJsKTtcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKG9wdGlvbnMudXJsKSB7XG4gICAgICAgIHJldHVybiBnZXRKU09OKHJlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QocmVxdWVzdE1hbmFnZXIubm9ybWFsaXplU291cmNlVVJMKG9wdGlvbnMudXJsKSwgUmVzb3VyY2VUeXBlLlNvdXJjZSksIGxvYWRlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGJyb3dzZXIuZnJhbWUoKCkgPT4gbG9hZGVkKG51bGwsIG9wdGlvbnMpKTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgTG5nTGF0Qm91bmRzIGZyb20gJy4uL2dlby9sbmdfbGF0X2JvdW5kcyc7XG5pbXBvcnQge21lcmNhdG9yWGZyb21MbmcsIG1lcmNhdG9yWWZyb21MYXR9IGZyb20gJy4uL2dlby9tZXJjYXRvcl9jb29yZGluYXRlJztcblxuaW1wb3J0IHR5cGUge0Nhbm9uaWNhbFRpbGVJRH0gZnJvbSAnLi90aWxlX2lkJztcblxuY2xhc3MgVGlsZUJvdW5kcyB7XG4gICAgYm91bmRzOiBMbmdMYXRCb3VuZHM7XG4gICAgbWluem9vbTogbnVtYmVyO1xuICAgIG1heHpvb206IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKGJvdW5kczogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIG1pbnpvb206ID9udW1iZXIsIG1heHpvb206ID9udW1iZXIpIHtcbiAgICAgICAgdGhpcy5ib3VuZHMgPSBMbmdMYXRCb3VuZHMuY29udmVydCh0aGlzLnZhbGlkYXRlQm91bmRzKGJvdW5kcykpO1xuICAgICAgICB0aGlzLm1pbnpvb20gPSBtaW56b29tIHx8IDA7XG4gICAgICAgIHRoaXMubWF4em9vbSA9IG1heHpvb20gfHwgMjQ7XG4gICAgfVxuXG4gICAgdmFsaWRhdGVCb3VuZHMoYm91bmRzOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSkge1xuICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIGJvdW5kcyBwcm9wZXJ0eSBjb250YWlucyB2YWxpZCBsb25naXR1ZGUgYW5kIGxhdGl0dWRlc1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYm91bmRzKSB8fCBib3VuZHMubGVuZ3RoICE9PSA0KSByZXR1cm4gWy0xODAsIC05MCwgMTgwLCA5MF07XG4gICAgICAgIHJldHVybiBbTWF0aC5tYXgoLTE4MCwgYm91bmRzWzBdKSwgTWF0aC5tYXgoLTkwLCBib3VuZHNbMV0pLCBNYXRoLm1pbigxODAsIGJvdW5kc1syXSksIE1hdGgubWluKDkwLCBib3VuZHNbM10pXTtcbiAgICB9XG5cbiAgICBjb250YWlucyh0aWxlSUQ6IENhbm9uaWNhbFRpbGVJRCkge1xuICAgICAgICBjb25zdCB3b3JsZFNpemUgPSBNYXRoLnBvdygyLCB0aWxlSUQueik7XG4gICAgICAgIGNvbnN0IGxldmVsID0ge1xuICAgICAgICAgICAgbWluWDogTWF0aC5mbG9vcihtZXJjYXRvclhmcm9tTG5nKHRoaXMuYm91bmRzLmdldFdlc3QoKSkgKiB3b3JsZFNpemUpLFxuICAgICAgICAgICAgbWluWTogTWF0aC5mbG9vcihtZXJjYXRvcllmcm9tTGF0KHRoaXMuYm91bmRzLmdldE5vcnRoKCkpICogd29ybGRTaXplKSxcbiAgICAgICAgICAgIG1heFg6IE1hdGguY2VpbChtZXJjYXRvclhmcm9tTG5nKHRoaXMuYm91bmRzLmdldEVhc3QoKSkgKiB3b3JsZFNpemUpLFxuICAgICAgICAgICAgbWF4WTogTWF0aC5jZWlsKG1lcmNhdG9yWWZyb21MYXQodGhpcy5ib3VuZHMuZ2V0U291dGgoKSkgKiB3b3JsZFNpemUpXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGhpdCA9IHRpbGVJRC54ID49IGxldmVsLm1pblggJiYgdGlsZUlELnggPCBsZXZlbC5tYXhYICYmIHRpbGVJRC55ID49IGxldmVsLm1pblkgJiYgdGlsZUlELnkgPCBsZXZlbC5tYXhZO1xuICAgICAgICByZXR1cm4gaGl0O1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVGlsZUJvdW5kcztcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7RXZlbnQsIEVycm9yRXZlbnQsIEV2ZW50ZWR9IGZyb20gJy4uL3V0aWwvZXZlbnRlZCc7XG5cbmltcG9ydCB7ZXh0ZW5kLCBwaWNrfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IGxvYWRUaWxlSlNPTiBmcm9tICcuL2xvYWRfdGlsZWpzb24nO1xuaW1wb3J0IHtwb3N0VHVybnN0aWxlRXZlbnQsIHBvc3RNYXBMb2FkRXZlbnR9IGZyb20gJy4uL3V0aWwvbWFwYm94JztcbmltcG9ydCBUaWxlQm91bmRzIGZyb20gJy4vdGlsZV9ib3VuZHMnO1xuaW1wb3J0IHtSZXNvdXJjZVR5cGV9IGZyb20gJy4uL3V0aWwvYWpheCc7XG5pbXBvcnQgYnJvd3NlciBmcm9tICcuLi91dGlsL2Jyb3dzZXInO1xuaW1wb3J0IHtjYWNoZUVudHJ5UG9zc2libHlBZGRlZH0gZnJvbSAnLi4vdXRpbC90aWxlX3JlcXVlc3RfY2FjaGUnO1xuXG5pbXBvcnQgdHlwZSB7U291cmNlfSBmcm9tICcuL3NvdXJjZSc7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi90aWxlX2lkJztcbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi91aS9tYXAnO1xuaW1wb3J0IHR5cGUgRGlzcGF0Y2hlciBmcm9tICcuLi91dGlsL2Rpc3BhdGNoZXInO1xuaW1wb3J0IHR5cGUgVGlsZSBmcm9tICcuL3RpbGUnO1xuaW1wb3J0IHR5cGUge0NhbGxiYWNrfSBmcm9tICcuLi90eXBlcy9jYWxsYmFjayc7XG5pbXBvcnQgdHlwZSB7Q2FuY2VsYWJsZX0gZnJvbSAnLi4vdHlwZXMvY2FuY2VsYWJsZSc7XG5pbXBvcnQgdHlwZSB7VmVjdG9yU291cmNlU3BlY2lmaWNhdGlvbiwgUHJvbW90ZUlkU3BlY2lmaWNhdGlvbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmNsYXNzIFZlY3RvclRpbGVTb3VyY2UgZXh0ZW5kcyBFdmVudGVkIGltcGxlbWVudHMgU291cmNlIHtcbiAgICB0eXBlOiAndmVjdG9yJztcbiAgICBpZDogc3RyaW5nO1xuICAgIG1pbnpvb206IG51bWJlcjtcbiAgICBtYXh6b29tOiBudW1iZXI7XG4gICAgdXJsOiBzdHJpbmc7XG4gICAgc2NoZW1lOiBzdHJpbmc7XG4gICAgdGlsZVNpemU6IG51bWJlcjtcbiAgICBwcm9tb3RlSWQ6ID9Qcm9tb3RlSWRTcGVjaWZpY2F0aW9uO1xuXG4gICAgX29wdGlvbnM6IFZlY3RvclNvdXJjZVNwZWNpZmljYXRpb247XG4gICAgX2NvbGxlY3RSZXNvdXJjZVRpbWluZzogYm9vbGVhbjtcbiAgICBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyO1xuICAgIG1hcDogTWFwO1xuICAgIGJvdW5kczogP1tudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICAgIHRpbGVzOiBBcnJheTxzdHJpbmc+O1xuICAgIHRpbGVCb3VuZHM6IFRpbGVCb3VuZHM7XG4gICAgcmVwYXJzZU92ZXJzY2FsZWQ6IGJvb2xlYW47XG4gICAgaXNUaWxlQ2xpcHBlZDogYm9vbGVhbjtcbiAgICBfdGlsZUpTT05SZXF1ZXN0OiA/Q2FuY2VsYWJsZTtcbiAgICBfbG9hZGVkOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoaWQ6IHN0cmluZywgb3B0aW9uczogVmVjdG9yU291cmNlU3BlY2lmaWNhdGlvbiAmIHtjb2xsZWN0UmVzb3VyY2VUaW1pbmc6IGJvb2xlYW59LCBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyLCBldmVudGVkUGFyZW50OiBFdmVudGVkKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICAgICAgdGhpcy5kaXNwYXRjaGVyID0gZGlzcGF0Y2hlcjtcblxuICAgICAgICB0aGlzLnR5cGUgPSAndmVjdG9yJztcbiAgICAgICAgdGhpcy5taW56b29tID0gMDtcbiAgICAgICAgdGhpcy5tYXh6b29tID0gMjI7XG4gICAgICAgIHRoaXMuc2NoZW1lID0gJ3h5eic7XG4gICAgICAgIHRoaXMudGlsZVNpemUgPSA1MTI7XG4gICAgICAgIHRoaXMucmVwYXJzZU92ZXJzY2FsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmlzVGlsZUNsaXBwZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9sb2FkZWQgPSBmYWxzZTtcblxuICAgICAgICBleHRlbmQodGhpcywgcGljayhvcHRpb25zLCBbJ3VybCcsICdzY2hlbWUnLCAndGlsZVNpemUnLCAncHJvbW90ZUlkJ10pKTtcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IGV4dGVuZCh7dHlwZTogJ3ZlY3Rvcid9LCBvcHRpb25zKTtcblxuICAgICAgICB0aGlzLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmcgPSBvcHRpb25zLmNvbGxlY3RSZXNvdXJjZVRpbWluZztcblxuICAgICAgICBpZiAodGhpcy50aWxlU2l6ZSAhPT0gNTEyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3ZlY3RvciB0aWxlIHNvdXJjZXMgbXVzdCBoYXZlIGEgdGlsZVNpemUgb2YgNTEyJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldEV2ZW50ZWRQYXJlbnQoZXZlbnRlZFBhcmVudCk7XG4gICAgfVxuXG4gICAgbG9hZCgpIHtcbiAgICAgICAgdGhpcy5fbG9hZGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGFsb2FkaW5nJywge2RhdGFUeXBlOiAnc291cmNlJ30pKTtcbiAgICAgICAgdGhpcy5fdGlsZUpTT05SZXF1ZXN0ID0gbG9hZFRpbGVKU09OKHRoaXMuX29wdGlvbnMsIHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlciwgKGVyciwgdGlsZUpTT04pID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3RpbGVKU09OUmVxdWVzdCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9sb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChlcnIpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGlsZUpTT04pIHtcbiAgICAgICAgICAgICAgICBleHRlbmQodGhpcywgdGlsZUpTT04pO1xuICAgICAgICAgICAgICAgIGlmICh0aWxlSlNPTi5ib3VuZHMpIHRoaXMudGlsZUJvdW5kcyA9IG5ldyBUaWxlQm91bmRzKHRpbGVKU09OLmJvdW5kcywgdGhpcy5taW56b29tLCB0aGlzLm1heHpvb20pO1xuICAgICAgICAgICAgICAgIHBvc3RUdXJuc3RpbGVFdmVudCh0aWxlSlNPTi50aWxlcywgdGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLl9jdXN0b21BY2Nlc3NUb2tlbik7XG4gICAgICAgICAgICAgICAgcG9zdE1hcExvYWRFdmVudCh0aWxlSlNPTi50aWxlcywgdGhpcy5tYXAuX2dldE1hcElkKCksIHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci5fc2t1VG9rZW4sIHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci5fY3VzdG9tQWNjZXNzVG9rZW4pO1xuXG4gICAgICAgICAgICAgICAgLy8gYGNvbnRlbnRgIGlzIGluY2x1ZGVkIGhlcmUgdG8gcHJldmVudCBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIGBTdHlsZSNfdXBkYXRlU291cmNlc2AgaXMgY2FsbGVkXG4gICAgICAgICAgICAgICAgLy8gYmVmb3JlIHRoZSBUaWxlSlNPTiBhcnJpdmVzLiB0aGlzIG1ha2VzIHN1cmUgdGhlIHRpbGVzIG5lZWRlZCBhcmUgbG9hZGVkIG9uY2UgVGlsZUpTT04gYXJyaXZlc1xuICAgICAgICAgICAgICAgIC8vIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvcHVsbC80MzQ3I2Rpc2N1c3Npb25fcjEwNDQxODA4OFxuICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGEnLCB7ZGF0YVR5cGU6ICdzb3VyY2UnLCBzb3VyY2VEYXRhVHlwZTogJ21ldGFkYXRhJ30pKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhJywge2RhdGFUeXBlOiAnc291cmNlJywgc291cmNlRGF0YVR5cGU6ICdjb250ZW50J30pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbG9hZGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGVkO1xuICAgIH1cblxuICAgIGhhc1RpbGUodGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy50aWxlQm91bmRzIHx8IHRoaXMudGlsZUJvdW5kcy5jb250YWlucyh0aWxlSUQuY2Fub25pY2FsKTtcbiAgICB9XG5cbiAgICBvbkFkZChtYXA6IE1hcCkge1xuICAgICAgICB0aGlzLm1hcCA9IG1hcDtcbiAgICAgICAgdGhpcy5sb2FkKCk7XG4gICAgfVxuXG4gICAgb25SZW1vdmUoKSB7XG4gICAgICAgIGlmICh0aGlzLl90aWxlSlNPTlJlcXVlc3QpIHtcbiAgICAgICAgICAgIHRoaXMuX3RpbGVKU09OUmVxdWVzdC5jYW5jZWwoKTtcbiAgICAgICAgICAgIHRoaXMuX3RpbGVKU09OUmVxdWVzdCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIHJldHVybiBleHRlbmQoe30sIHRoaXMuX29wdGlvbnMpO1xuICAgIH1cblxuICAgIGxvYWRUaWxlKHRpbGU6IFRpbGUsIGNhbGxiYWNrOiBDYWxsYmFjazx2b2lkPikge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIubm9ybWFsaXplVGlsZVVSTCh0aWxlLnRpbGVJRC5jYW5vbmljYWwudXJsKHRoaXMudGlsZXMsIHRoaXMuc2NoZW1lKSk7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgIHJlcXVlc3Q6IHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KHVybCwgUmVzb3VyY2VUeXBlLlRpbGUpLFxuICAgICAgICAgICAgdWlkOiB0aWxlLnVpZCxcbiAgICAgICAgICAgIHRpbGVJRDogdGlsZS50aWxlSUQsXG4gICAgICAgICAgICB6b29tOiB0aWxlLnRpbGVJRC5vdmVyc2NhbGVkWixcbiAgICAgICAgICAgIHRpbGVTaXplOiB0aGlzLnRpbGVTaXplICogdGlsZS50aWxlSUQub3ZlcnNjYWxlRmFjdG9yKCksXG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICBzb3VyY2U6IHRoaXMuaWQsXG4gICAgICAgICAgICBwaXhlbFJhdGlvOiBicm93c2VyLmRldmljZVBpeGVsUmF0aW8sXG4gICAgICAgICAgICBzaG93Q29sbGlzaW9uQm94ZXM6IHRoaXMubWFwLnNob3dDb2xsaXNpb25Cb3hlcyxcbiAgICAgICAgICAgIHByb21vdGVJZDogdGhpcy5wcm9tb3RlSWRcbiAgICAgICAgfTtcbiAgICAgICAgcGFyYW1zLnJlcXVlc3QuY29sbGVjdFJlc291cmNlVGltaW5nID0gdGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nO1xuXG4gICAgICAgIGlmICghdGlsZS5hY3RvciB8fCB0aWxlLnN0YXRlID09PSAnZXhwaXJlZCcpIHtcbiAgICAgICAgICAgIHRpbGUuYWN0b3IgPSB0aGlzLmRpc3BhdGNoZXIuZ2V0QWN0b3IoKTtcbiAgICAgICAgICAgIHRpbGUucmVxdWVzdCA9IHRpbGUuYWN0b3Iuc2VuZCgnbG9hZFRpbGUnLCBwYXJhbXMsIGRvbmUuYmluZCh0aGlzKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGlsZS5zdGF0ZSA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgICAgICAgICAvLyBzY2hlZHVsZSB0aWxlIHJlbG9hZGluZyBhZnRlciBpdCBoYXMgYmVlbiBsb2FkZWRcbiAgICAgICAgICAgIHRpbGUucmVsb2FkQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRpbGUucmVxdWVzdCA9IHRpbGUuYWN0b3Iuc2VuZCgncmVsb2FkVGlsZScsIHBhcmFtcywgZG9uZS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGRvbmUoZXJyLCBkYXRhKSB7XG4gICAgICAgICAgICBkZWxldGUgdGlsZS5yZXF1ZXN0O1xuXG4gICAgICAgICAgICBpZiAodGlsZS5hYm9ydGVkKVxuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcblxuICAgICAgICAgICAgaWYgKGVyciAmJiBlcnIuc3RhdHVzICE9PSA0MDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5yZXNvdXJjZVRpbWluZylcbiAgICAgICAgICAgICAgICB0aWxlLnJlc291cmNlVGltaW5nID0gZGF0YS5yZXNvdXJjZVRpbWluZztcblxuICAgICAgICAgICAgaWYgKHRoaXMubWFwLl9yZWZyZXNoRXhwaXJlZFRpbGVzICYmIGRhdGEpIHRpbGUuc2V0RXhwaXJ5RGF0YShkYXRhKTtcbiAgICAgICAgICAgIHRpbGUubG9hZFZlY3RvckRhdGEoZGF0YSwgdGhpcy5tYXAucGFpbnRlcik7XG5cbiAgICAgICAgICAgIGNhY2hlRW50cnlQb3NzaWJseUFkZGVkKHRoaXMuZGlzcGF0Y2hlcik7XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuXG4gICAgICAgICAgICBpZiAodGlsZS5yZWxvYWRDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZFRpbGUodGlsZSwgdGlsZS5yZWxvYWRDYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgdGlsZS5yZWxvYWRDYWxsYmFjayA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhYm9ydFRpbGUodGlsZTogVGlsZSkge1xuICAgICAgICBpZiAodGlsZS5yZXF1ZXN0KSB7XG4gICAgICAgICAgICB0aWxlLnJlcXVlc3QuY2FuY2VsKCk7XG4gICAgICAgICAgICBkZWxldGUgdGlsZS5yZXF1ZXN0O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aWxlLmFjdG9yKSB7XG4gICAgICAgICAgICB0aWxlLmFjdG9yLnNlbmQoJ2Fib3J0VGlsZScsIHt1aWQ6IHRpbGUudWlkLCB0eXBlOiB0aGlzLnR5cGUsIHNvdXJjZTogdGhpcy5pZH0sIHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1bmxvYWRUaWxlKHRpbGU6IFRpbGUpIHtcbiAgICAgICAgdGlsZS51bmxvYWRWZWN0b3JEYXRhKCk7XG4gICAgICAgIGlmICh0aWxlLmFjdG9yKSB7XG4gICAgICAgICAgICB0aWxlLmFjdG9yLnNlbmQoJ3JlbW92ZVRpbGUnLCB7dWlkOiB0aWxlLnVpZCwgdHlwZTogdGhpcy50eXBlLCBzb3VyY2U6IHRoaXMuaWR9LCB1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFzVHJhbnNpdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVmVjdG9yVGlsZVNvdXJjZTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7ZXh0ZW5kLCBwaWNrfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuXG5pbXBvcnQge2dldEltYWdlLCBSZXNvdXJjZVR5cGV9IGZyb20gJy4uL3V0aWwvYWpheCc7XG5pbXBvcnQge0V2ZW50LCBFcnJvckV2ZW50LCBFdmVudGVkfSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IGxvYWRUaWxlSlNPTiBmcm9tICcuL2xvYWRfdGlsZWpzb24nO1xuaW1wb3J0IHtwb3N0VHVybnN0aWxlRXZlbnQsIHBvc3RNYXBMb2FkRXZlbnR9IGZyb20gJy4uL3V0aWwvbWFwYm94JztcbmltcG9ydCBUaWxlQm91bmRzIGZyb20gJy4vdGlsZV9ib3VuZHMnO1xuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi4vcmVuZGVyL3RleHR1cmUnO1xuXG5pbXBvcnQge2NhY2hlRW50cnlQb3NzaWJseUFkZGVkfSBmcm9tICcuLi91dGlsL3RpbGVfcmVxdWVzdF9jYWNoZSc7XG5cbmltcG9ydCB0eXBlIHtTb3VyY2V9IGZyb20gJy4vc291cmNlJztcbmltcG9ydCB0eXBlIHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuL3RpbGVfaWQnO1xuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL3VpL21hcCc7XG5pbXBvcnQgdHlwZSBEaXNwYXRjaGVyIGZyb20gJy4uL3V0aWwvZGlzcGF0Y2hlcic7XG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4vdGlsZSc7XG5pbXBvcnQgdHlwZSB7Q2FsbGJhY2t9IGZyb20gJy4uL3R5cGVzL2NhbGxiYWNrJztcbmltcG9ydCB0eXBlIHtDYW5jZWxhYmxlfSBmcm9tICcuLi90eXBlcy9jYW5jZWxhYmxlJztcbmltcG9ydCB0eXBlIHtcbiAgICBSYXN0ZXJTb3VyY2VTcGVjaWZpY2F0aW9uLFxuICAgIFJhc3RlckRFTVNvdXJjZVNwZWNpZmljYXRpb25cbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbmNsYXNzIFJhc3RlclRpbGVTb3VyY2UgZXh0ZW5kcyBFdmVudGVkIGltcGxlbWVudHMgU291cmNlIHtcbiAgICB0eXBlOiAncmFzdGVyJyB8ICdyYXN0ZXItZGVtJztcbiAgICBpZDogc3RyaW5nO1xuICAgIG1pbnpvb206IG51bWJlcjtcbiAgICBtYXh6b29tOiBudW1iZXI7XG4gICAgdXJsOiBzdHJpbmc7XG4gICAgc2NoZW1lOiBzdHJpbmc7XG4gICAgdGlsZVNpemU6IG51bWJlcjtcblxuICAgIGJvdW5kczogP1tudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICAgIHRpbGVCb3VuZHM6IFRpbGVCb3VuZHM7XG4gICAgcm91bmRab29tOiBib29sZWFuO1xuICAgIGRpc3BhdGNoZXI6IERpc3BhdGNoZXI7XG4gICAgbWFwOiBNYXA7XG4gICAgdGlsZXM6IEFycmF5PHN0cmluZz47XG5cbiAgICBfbG9hZGVkOiBib29sZWFuO1xuICAgIF9vcHRpb25zOiBSYXN0ZXJTb3VyY2VTcGVjaWZpY2F0aW9uIHwgUmFzdGVyREVNU291cmNlU3BlY2lmaWNhdGlvbjtcbiAgICBfdGlsZUpTT05SZXF1ZXN0OiA/Q2FuY2VsYWJsZTtcblxuICAgIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIG9wdGlvbnM6IFJhc3RlclNvdXJjZVNwZWNpZmljYXRpb24gfCBSYXN0ZXJERU1Tb3VyY2VTcGVjaWZpY2F0aW9uLCBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyLCBldmVudGVkUGFyZW50OiBFdmVudGVkKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICAgICAgdGhpcy5kaXNwYXRjaGVyID0gZGlzcGF0Y2hlcjtcbiAgICAgICAgdGhpcy5zZXRFdmVudGVkUGFyZW50KGV2ZW50ZWRQYXJlbnQpO1xuXG4gICAgICAgIHRoaXMudHlwZSA9ICdyYXN0ZXInO1xuICAgICAgICB0aGlzLm1pbnpvb20gPSAwO1xuICAgICAgICB0aGlzLm1heHpvb20gPSAyMjtcbiAgICAgICAgdGhpcy5yb3VuZFpvb20gPSB0cnVlO1xuICAgICAgICB0aGlzLnNjaGVtZSA9ICd4eXonO1xuICAgICAgICB0aGlzLnRpbGVTaXplID0gNTEyO1xuICAgICAgICB0aGlzLl9sb2FkZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLl9vcHRpb25zID0gZXh0ZW5kKHt0eXBlOiAncmFzdGVyJ30sIG9wdGlvbnMpO1xuICAgICAgICBleHRlbmQodGhpcywgcGljayhvcHRpb25zLCBbJ3VybCcsICdzY2hlbWUnLCAndGlsZVNpemUnXSkpO1xuICAgIH1cblxuICAgIGxvYWQoKSB7XG4gICAgICAgIHRoaXMuX2xvYWRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhbG9hZGluZycsIHtkYXRhVHlwZTogJ3NvdXJjZSd9KSk7XG4gICAgICAgIHRoaXMuX3RpbGVKU09OUmVxdWVzdCA9IGxvYWRUaWxlSlNPTih0aGlzLl9vcHRpb25zLCB0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIsIChlcnIsIHRpbGVKU09OKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl90aWxlSlNPTlJlcXVlc3QgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fbG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQoZXJyKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRpbGVKU09OKSB7XG4gICAgICAgICAgICAgICAgZXh0ZW5kKHRoaXMsIHRpbGVKU09OKTtcbiAgICAgICAgICAgICAgICBpZiAodGlsZUpTT04uYm91bmRzKSB0aGlzLnRpbGVCb3VuZHMgPSBuZXcgVGlsZUJvdW5kcyh0aWxlSlNPTi5ib3VuZHMsIHRoaXMubWluem9vbSwgdGhpcy5tYXh6b29tKTtcblxuICAgICAgICAgICAgICAgIHBvc3RUdXJuc3RpbGVFdmVudCh0aWxlSlNPTi50aWxlcyk7XG4gICAgICAgICAgICAgICAgcG9zdE1hcExvYWRFdmVudCh0aWxlSlNPTi50aWxlcywgdGhpcy5tYXAuX2dldE1hcElkKCksIHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci5fc2t1VG9rZW4pO1xuXG4gICAgICAgICAgICAgICAgLy8gYGNvbnRlbnRgIGlzIGluY2x1ZGVkIGhlcmUgdG8gcHJldmVudCBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIGBTdHlsZSNfdXBkYXRlU291cmNlc2AgaXMgY2FsbGVkXG4gICAgICAgICAgICAgICAgLy8gYmVmb3JlIHRoZSBUaWxlSlNPTiBhcnJpdmVzLiB0aGlzIG1ha2VzIHN1cmUgdGhlIHRpbGVzIG5lZWRlZCBhcmUgbG9hZGVkIG9uY2UgVGlsZUpTT04gYXJyaXZlc1xuICAgICAgICAgICAgICAgIC8vIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvcHVsbC80MzQ3I2Rpc2N1c3Npb25fcjEwNDQxODA4OFxuICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGEnLCB7ZGF0YVR5cGU6ICdzb3VyY2UnLCBzb3VyY2VEYXRhVHlwZTogJ21ldGFkYXRhJ30pKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhJywge2RhdGFUeXBlOiAnc291cmNlJywgc291cmNlRGF0YVR5cGU6ICdjb250ZW50J30pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbG9hZGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGVkO1xuICAgIH1cblxuICAgIG9uQWRkKG1hcDogTWFwKSB7XG4gICAgICAgIHRoaXMubWFwID0gbWFwO1xuICAgICAgICB0aGlzLmxvYWQoKTtcbiAgICB9XG5cbiAgICBvblJlbW92ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3RpbGVKU09OUmVxdWVzdCkge1xuICAgICAgICAgICAgdGhpcy5fdGlsZUpTT05SZXF1ZXN0LmNhbmNlbCgpO1xuICAgICAgICAgICAgdGhpcy5fdGlsZUpTT05SZXF1ZXN0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgcmV0dXJuIGV4dGVuZCh7fSwgdGhpcy5fb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaGFzVGlsZSh0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnRpbGVCb3VuZHMgfHwgdGhpcy50aWxlQm91bmRzLmNvbnRhaW5zKHRpbGVJRC5jYW5vbmljYWwpO1xuICAgIH1cblxuICAgIGxvYWRUaWxlKHRpbGU6IFRpbGUsIGNhbGxiYWNrOiBDYWxsYmFjazx2b2lkPikge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIubm9ybWFsaXplVGlsZVVSTCh0aWxlLnRpbGVJRC5jYW5vbmljYWwudXJsKHRoaXMudGlsZXMsIHRoaXMuc2NoZW1lKSwgdGhpcy50aWxlU2l6ZSk7XG4gICAgICAgIHRpbGUucmVxdWVzdCA9IGdldEltYWdlKHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KHVybCwgUmVzb3VyY2VUeXBlLlRpbGUpLCAoZXJyLCBpbWcpID0+IHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aWxlLnJlcXVlc3Q7XG5cbiAgICAgICAgICAgIGlmICh0aWxlLmFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aWxlLnN0YXRlID0gJ3VubG9hZGVkJztcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdGlsZS5zdGF0ZSA9ICdlcnJvcmVkJztcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpbWcpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXAuX3JlZnJlc2hFeHBpcmVkVGlsZXMpIHRpbGUuc2V0RXhwaXJ5RGF0YShpbWcpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSAoaW1nOiBhbnkpLmNhY2hlQ29udHJvbDtcbiAgICAgICAgICAgICAgICBkZWxldGUgKGltZzogYW55KS5leHBpcmVzO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMubWFwLnBhaW50ZXIuY29udGV4dDtcbiAgICAgICAgICAgICAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgICAgICAgICAgICAgdGlsZS50ZXh0dXJlID0gdGhpcy5tYXAucGFpbnRlci5nZXRUaWxlVGV4dHVyZShpbWcud2lkdGgpO1xuICAgICAgICAgICAgICAgIGlmICh0aWxlLnRleHR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGlsZS50ZXh0dXJlLnVwZGF0ZShpbWcsIHt1c2VNaXBtYXA6IHRydWV9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aWxlLnRleHR1cmUgPSBuZXcgVGV4dHVyZShjb250ZXh0LCBpbWcsIGdsLlJHQkEsIHt1c2VNaXBtYXA6IHRydWV9KTtcbiAgICAgICAgICAgICAgICAgICAgdGlsZS50ZXh0dXJlLmJpbmQoZ2wuTElORUFSLCBnbC5DTEFNUF9UT19FREdFLCBnbC5MSU5FQVJfTUlQTUFQX05FQVJFU1QpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyZihnbC5URVhUVVJFXzJELCBjb250ZXh0LmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCwgY29udGV4dC5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWNNYXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGlsZS5zdGF0ZSA9ICdsb2FkZWQnO1xuXG4gICAgICAgICAgICAgICAgY2FjaGVFbnRyeVBvc3NpYmx5QWRkZWQodGhpcy5kaXNwYXRjaGVyKTtcblxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhYm9ydFRpbGUodGlsZTogVGlsZSwgY2FsbGJhY2s6IENhbGxiYWNrPHZvaWQ+KSB7XG4gICAgICAgIGlmICh0aWxlLnJlcXVlc3QpIHtcbiAgICAgICAgICAgIHRpbGUucmVxdWVzdC5jYW5jZWwoKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aWxlLnJlcXVlc3Q7XG4gICAgICAgIH1cbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG5cbiAgICB1bmxvYWRUaWxlKHRpbGU6IFRpbGUsIGNhbGxiYWNrOiBDYWxsYmFjazx2b2lkPikge1xuICAgICAgICBpZiAodGlsZS50ZXh0dXJlKSB0aGlzLm1hcC5wYWludGVyLnNhdmVUaWxlVGV4dHVyZSh0aWxlLnRleHR1cmUpO1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgIH1cblxuICAgIGhhc1RyYW5zaXRpb24oKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJhc3RlclRpbGVTb3VyY2U7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2dldEltYWdlLCBSZXNvdXJjZVR5cGV9IGZyb20gJy4uL3V0aWwvYWpheCc7XG5pbXBvcnQge2V4dGVuZH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7RXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCBicm93c2VyIGZyb20gJy4uL3V0aWwvYnJvd3Nlcic7XG5pbXBvcnQgd2luZG93IGZyb20gJy4uL3V0aWwvd2luZG93JztcbmltcG9ydCBvZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQgZnJvbSAnLi4vdXRpbC9vZmZzY3JlZW5fY2FudmFzX3N1cHBvcnRlZCc7XG5pbXBvcnQge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4vdGlsZV9pZCc7XG5pbXBvcnQgUmFzdGVyVGlsZVNvdXJjZSBmcm9tICcuL3Jhc3Rlcl90aWxlX3NvdXJjZSc7XG4vLyBlbnN1cmUgREVNRGF0YSBpcyByZWdpc3RlcmVkIGZvciB3b3JrZXIgdHJhbnNmZXIgb24gbWFpbiB0aHJlYWQ6XG5pbXBvcnQgJy4uL2RhdGEvZGVtX2RhdGEnO1xuXG5pbXBvcnQgdHlwZSB7U291cmNlfSBmcm9tICcuL3NvdXJjZSc7XG5pbXBvcnQgdHlwZSBEaXNwYXRjaGVyIGZyb20gJy4uL3V0aWwvZGlzcGF0Y2hlcic7XG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4vdGlsZSc7XG5pbXBvcnQgdHlwZSB7Q2FsbGJhY2t9IGZyb20gJy4uL3R5cGVzL2NhbGxiYWNrJztcbmltcG9ydCB0eXBlIHtSYXN0ZXJERU1Tb3VyY2VTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuY2xhc3MgUmFzdGVyREVNVGlsZVNvdXJjZSBleHRlbmRzIFJhc3RlclRpbGVTb3VyY2UgaW1wbGVtZW50cyBTb3VyY2Uge1xuICAgIGVuY29kaW5nOiBcIm1hcGJveFwiIHwgXCJ0ZXJyYXJpdW1cIjtcblxuICAgIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIG9wdGlvbnM6IFJhc3RlckRFTVNvdXJjZVNwZWNpZmljYXRpb24sIGRpc3BhdGNoZXI6IERpc3BhdGNoZXIsIGV2ZW50ZWRQYXJlbnQ6IEV2ZW50ZWQpIHtcbiAgICAgICAgc3VwZXIoaWQsIG9wdGlvbnMsIGRpc3BhdGNoZXIsIGV2ZW50ZWRQYXJlbnQpO1xuICAgICAgICB0aGlzLnR5cGUgPSAncmFzdGVyLWRlbSc7XG4gICAgICAgIHRoaXMubWF4em9vbSA9IDIyO1xuICAgICAgICB0aGlzLl9vcHRpb25zID0gZXh0ZW5kKHt0eXBlOiAncmFzdGVyLWRlbSd9LCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5lbmNvZGluZyA9IG9wdGlvbnMuZW5jb2RpbmcgfHwgXCJtYXBib3hcIjtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAncmFzdGVyLWRlbScsXG4gICAgICAgICAgICB1cmw6IHRoaXMudXJsLFxuICAgICAgICAgICAgdGlsZVNpemU6IHRoaXMudGlsZVNpemUsXG4gICAgICAgICAgICB0aWxlczogdGhpcy50aWxlcyxcbiAgICAgICAgICAgIGJvdW5kczogdGhpcy5ib3VuZHMsXG4gICAgICAgICAgICBlbmNvZGluZzogdGhpcy5lbmNvZGluZ1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGxvYWRUaWxlKHRpbGU6IFRpbGUsIGNhbGxiYWNrOiBDYWxsYmFjazx2b2lkPikge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIubm9ybWFsaXplVGlsZVVSTCh0aWxlLnRpbGVJRC5jYW5vbmljYWwudXJsKHRoaXMudGlsZXMsIHRoaXMuc2NoZW1lKSwgdGhpcy50aWxlU2l6ZSk7XG4gICAgICAgIHRpbGUucmVxdWVzdCA9IGdldEltYWdlKHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KHVybCwgUmVzb3VyY2VUeXBlLlRpbGUpLCBpbWFnZUxvYWRlZC5iaW5kKHRoaXMpKTtcblxuICAgICAgICB0aWxlLm5laWdoYm9yaW5nVGlsZXMgPSB0aGlzLl9nZXROZWlnaGJvcmluZ1RpbGVzKHRpbGUudGlsZUlEKTtcbiAgICAgICAgZnVuY3Rpb24gaW1hZ2VMb2FkZWQoZXJyLCBpbWcpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aWxlLnJlcXVlc3Q7XG4gICAgICAgICAgICBpZiAodGlsZS5hYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgdGlsZS5zdGF0ZSA9ICd1bmxvYWRlZCc7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHRpbGUuc3RhdGUgPSAnZXJyb3JlZCc7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW1nKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWFwLl9yZWZyZXNoRXhwaXJlZFRpbGVzKSB0aWxlLnNldEV4cGlyeURhdGEoaW1nKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgKGltZzogYW55KS5jYWNoZUNvbnRyb2w7XG4gICAgICAgICAgICAgICAgZGVsZXRlIChpbWc6IGFueSkuZXhwaXJlcztcbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2ZlciA9IHdpbmRvdy5JbWFnZUJpdG1hcCAmJiBpbWcgaW5zdGFuY2VvZiB3aW5kb3cuSW1hZ2VCaXRtYXAgJiYgb2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmF3SW1hZ2VEYXRhID0gdHJhbnNmZXIgPyBpbWcgOiBicm93c2VyLmdldEltYWdlRGF0YShpbWcsIDEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgdWlkOiB0aWxlLnVpZCxcbiAgICAgICAgICAgICAgICAgICAgY29vcmQ6IHRpbGUudGlsZUlELFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IHRoaXMuaWQsXG4gICAgICAgICAgICAgICAgICAgIHJhd0ltYWdlRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IHRoaXMuZW5jb2RpbmdcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0aWxlLmFjdG9yIHx8IHRpbGUuc3RhdGUgPT09ICdleHBpcmVkJykge1xuICAgICAgICAgICAgICAgICAgICB0aWxlLmFjdG9yID0gdGhpcy5kaXNwYXRjaGVyLmdldEFjdG9yKCk7XG4gICAgICAgICAgICAgICAgICAgIHRpbGUuYWN0b3Iuc2VuZCgnbG9hZERFTVRpbGUnLCBwYXJhbXMsIGRvbmUuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZG9uZShlcnIsIGRlbSkge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHRpbGUuc3RhdGUgPSAnZXJyb3JlZCc7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRlbSkge1xuICAgICAgICAgICAgICAgIHRpbGUuZGVtID0gZGVtO1xuICAgICAgICAgICAgICAgIHRpbGUubmVlZHNIaWxsc2hhZGVQcmVwYXJlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aWxlLnN0YXRlID0gJ2xvYWRlZCc7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfZ2V0TmVpZ2hib3JpbmdUaWxlcyh0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQpIHtcbiAgICAgICAgY29uc3QgY2Fub25pY2FsID0gdGlsZUlELmNhbm9uaWNhbDtcbiAgICAgICAgY29uc3QgZGltID0gTWF0aC5wb3coMiwgY2Fub25pY2FsLnopO1xuXG4gICAgICAgIGNvbnN0IHB4ID0gKGNhbm9uaWNhbC54IC0gMSArIGRpbSkgJSBkaW07XG4gICAgICAgIGNvbnN0IHB4dyA9IGNhbm9uaWNhbC54ID09PSAwID8gdGlsZUlELndyYXAgLSAxIDogdGlsZUlELndyYXA7XG4gICAgICAgIGNvbnN0IG54ID0gKGNhbm9uaWNhbC54ICsgMSArIGRpbSkgJSBkaW07XG4gICAgICAgIGNvbnN0IG54dyA9IGNhbm9uaWNhbC54ICsgMSA9PT0gZGltID8gdGlsZUlELndyYXAgKyAxIDogdGlsZUlELndyYXA7XG5cbiAgICAgICAgY29uc3QgbmVpZ2hib3JpbmdUaWxlcyA9IHt9O1xuICAgICAgICAvLyBhZGQgYWRqYWNlbnQgdGlsZXNcbiAgICAgICAgbmVpZ2hib3JpbmdUaWxlc1tuZXcgT3ZlcnNjYWxlZFRpbGVJRCh0aWxlSUQub3ZlcnNjYWxlZFosIHB4dywgY2Fub25pY2FsLnosIHB4LCBjYW5vbmljYWwueSkua2V5XSA9IHtiYWNrZmlsbGVkOiBmYWxzZX07XG4gICAgICAgIG5laWdoYm9yaW5nVGlsZXNbbmV3IE92ZXJzY2FsZWRUaWxlSUQodGlsZUlELm92ZXJzY2FsZWRaLCBueHcsIGNhbm9uaWNhbC56LCBueCwgY2Fub25pY2FsLnkpLmtleV0gPSB7YmFja2ZpbGxlZDogZmFsc2V9O1xuXG4gICAgICAgIC8vIEFkZCB1cHBlciBuZWlnaGJvcmluZ1RpbGVzXG4gICAgICAgIGlmIChjYW5vbmljYWwueSA+IDApIHtcbiAgICAgICAgICAgIG5laWdoYm9yaW5nVGlsZXNbbmV3IE92ZXJzY2FsZWRUaWxlSUQodGlsZUlELm92ZXJzY2FsZWRaLCBweHcsIGNhbm9uaWNhbC56LCBweCwgY2Fub25pY2FsLnkgLSAxKS5rZXldID0ge2JhY2tmaWxsZWQ6IGZhbHNlfTtcbiAgICAgICAgICAgIG5laWdoYm9yaW5nVGlsZXNbbmV3IE92ZXJzY2FsZWRUaWxlSUQodGlsZUlELm92ZXJzY2FsZWRaLCB0aWxlSUQud3JhcCwgY2Fub25pY2FsLnosIGNhbm9uaWNhbC54LCBjYW5vbmljYWwueSAtIDEpLmtleV0gPSB7YmFja2ZpbGxlZDogZmFsc2V9O1xuICAgICAgICAgICAgbmVpZ2hib3JpbmdUaWxlc1tuZXcgT3ZlcnNjYWxlZFRpbGVJRCh0aWxlSUQub3ZlcnNjYWxlZFosIG54dywgY2Fub25pY2FsLnosIG54LCBjYW5vbmljYWwueSAtIDEpLmtleV0gPSB7YmFja2ZpbGxlZDogZmFsc2V9O1xuICAgICAgICB9XG4gICAgICAgIC8vIEFkZCBsb3dlciBuZWlnaGJvcmluZ1RpbGVzXG4gICAgICAgIGlmIChjYW5vbmljYWwueSArIDEgPCBkaW0pIHtcbiAgICAgICAgICAgIG5laWdoYm9yaW5nVGlsZXNbbmV3IE92ZXJzY2FsZWRUaWxlSUQodGlsZUlELm92ZXJzY2FsZWRaLCBweHcsIGNhbm9uaWNhbC56LCBweCwgY2Fub25pY2FsLnkgKyAxKS5rZXldID0ge2JhY2tmaWxsZWQ6IGZhbHNlfTtcbiAgICAgICAgICAgIG5laWdoYm9yaW5nVGlsZXNbbmV3IE92ZXJzY2FsZWRUaWxlSUQodGlsZUlELm92ZXJzY2FsZWRaLCB0aWxlSUQud3JhcCwgY2Fub25pY2FsLnosIGNhbm9uaWNhbC54LCBjYW5vbmljYWwueSArIDEpLmtleV0gPSB7YmFja2ZpbGxlZDogZmFsc2V9O1xuICAgICAgICAgICAgbmVpZ2hib3JpbmdUaWxlc1tuZXcgT3ZlcnNjYWxlZFRpbGVJRCh0aWxlSUQub3ZlcnNjYWxlZFosIG54dywgY2Fub25pY2FsLnosIG54LCBjYW5vbmljYWwueSArIDEpLmtleV0gPSB7YmFja2ZpbGxlZDogZmFsc2V9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5laWdoYm9yaW5nVGlsZXM7XG4gICAgfVxuXG4gICAgdW5sb2FkVGlsZSh0aWxlOiBUaWxlKSB7XG4gICAgICAgIGlmICh0aWxlLmRlbVRleHR1cmUpIHRoaXMubWFwLnBhaW50ZXIuc2F2ZVRpbGVUZXh0dXJlKHRpbGUuZGVtVGV4dHVyZSk7XG4gICAgICAgIGlmICh0aWxlLmZibykge1xuICAgICAgICAgICAgdGlsZS5mYm8uZGVzdHJveSgpO1xuICAgICAgICAgICAgZGVsZXRlIHRpbGUuZmJvO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aWxlLmRlbSkgZGVsZXRlIHRpbGUuZGVtO1xuICAgICAgICBkZWxldGUgdGlsZS5uZWlnaGJvcmluZ1RpbGVzO1xuXG4gICAgICAgIHRpbGUuc3RhdGUgPSAndW5sb2FkZWQnO1xuICAgICAgICBpZiAodGlsZS5hY3Rvcikge1xuICAgICAgICAgICAgdGlsZS5hY3Rvci5zZW5kKCdyZW1vdmVERU1UaWxlJywge3VpZDogdGlsZS51aWQsIHNvdXJjZTogdGhpcy5pZH0pO1xuICAgICAgICB9XG4gICAgfVxuXG59XG5cbmV4cG9ydCBkZWZhdWx0IFJhc3RlckRFTVRpbGVTb3VyY2U7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge0V2ZW50LCBFcnJvckV2ZW50LCBFdmVudGVkfSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuXG5pbXBvcnQge2V4dGVuZH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi4vZGF0YS9leHRlbnQnO1xuaW1wb3J0IHtSZXNvdXJjZVR5cGV9IGZyb20gJy4uL3V0aWwvYWpheCc7XG5pbXBvcnQgYnJvd3NlciBmcm9tICcuLi91dGlsL2Jyb3dzZXInO1xuXG5pbXBvcnQgdHlwZSB7U291cmNlfSBmcm9tICcuL3NvdXJjZSc7XG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vdWkvbWFwJztcbmltcG9ydCB0eXBlIERpc3BhdGNoZXIgZnJvbSAnLi4vdXRpbC9kaXNwYXRjaGVyJztcbmltcG9ydCB0eXBlIFRpbGUgZnJvbSAnLi90aWxlJztcbmltcG9ydCB0eXBlIEFjdG9yIGZyb20gJy4uL3V0aWwvYWN0b3InO1xuaW1wb3J0IHR5cGUge0NhbGxiYWNrfSBmcm9tICcuLi90eXBlcy9jYWxsYmFjayc7XG5pbXBvcnQgdHlwZSB7R2VvSlNPTiwgR2VvSlNPTkZlYXR1cmV9IGZyb20gJ0BtYXBib3gvZ2VvanNvbi10eXBlcyc7XG5pbXBvcnQgdHlwZSB7R2VvSlNPTlNvdXJjZVNwZWNpZmljYXRpb24sIFByb21vdGVJZFNwZWNpZmljYXRpb259IGZyb20gJy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG4vKipcbiAqIEEgc291cmNlIGNvbnRhaW5pbmcgR2VvSlNPTi5cbiAqIChTZWUgdGhlIFtTdHlsZSBTcGVjaWZpY2F0aW9uXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1zdHlsZS1zcGVjLyNzb3VyY2VzLWdlb2pzb24pIGZvciBkZXRhaWxlZCBkb2N1bWVudGF0aW9uIG9mIG9wdGlvbnMuKVxuICpcbiAqIEBleGFtcGxlXG4gKiBtYXAuYWRkU291cmNlKCdzb21lIGlkJywge1xuICogICAgIHR5cGU6ICdnZW9qc29uJyxcbiAqICAgICBkYXRhOiAnaHR0cHM6Ly9kMmFkNmI0dXI3eXZwcS5jbG91ZGZyb250Lm5ldC9uYXR1cmFsZWFydGgtMy4zLjAvbmVfMTBtX3BvcnRzLmdlb2pzb24nXG4gKiB9KTtcbiAqXG4gKiBAZXhhbXBsZVxuICogbWFwLmFkZFNvdXJjZSgnc29tZSBpZCcsIHtcbiAqICAgIHR5cGU6ICdnZW9qc29uJyxcbiAqICAgIGRhdGE6IHtcbiAqICAgICAgICBcInR5cGVcIjogXCJGZWF0dXJlQ29sbGVjdGlvblwiLFxuICogICAgICAgIFwiZmVhdHVyZXNcIjogW3tcbiAqICAgICAgICAgICAgXCJ0eXBlXCI6IFwiRmVhdHVyZVwiLFxuICogICAgICAgICAgICBcInByb3BlcnRpZXNcIjoge30sXG4gKiAgICAgICAgICAgIFwiZ2VvbWV0cnlcIjoge1xuICogICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiUG9pbnRcIixcbiAqICAgICAgICAgICAgICAgIFwiY29vcmRpbmF0ZXNcIjogW1xuICogICAgICAgICAgICAgICAgICAgIC03Ni41MzA2MzI5NzI3MTcyOSxcbiAqICAgICAgICAgICAgICAgICAgICAzOS4xODE3NDA3Nzk5NDEwOFxuICogICAgICAgICAgICAgICAgXVxuICogICAgICAgICAgICB9XG4gKiAgICAgICAgfV1cbiAqICAgIH1cbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiBtYXAuZ2V0U291cmNlKCdzb21lIGlkJykuc2V0RGF0YSh7XG4gKiAgIFwidHlwZVwiOiBcIkZlYXR1cmVDb2xsZWN0aW9uXCIsXG4gKiAgIFwiZmVhdHVyZXNcIjogW3tcbiAqICAgICAgIFwidHlwZVwiOiBcIkZlYXR1cmVcIixcbiAqICAgICAgIFwicHJvcGVydGllc1wiOiB7IFwibmFtZVwiOiBcIk51bGwgSXNsYW5kXCIgfSxcbiAqICAgICAgIFwiZ2VvbWV0cnlcIjoge1xuICogICAgICAgICAgIFwidHlwZVwiOiBcIlBvaW50XCIsXG4gKiAgICAgICAgICAgXCJjb29yZGluYXRlc1wiOiBbIDAsIDAgXVxuICogICAgICAgfVxuICogICB9XVxuICogfSk7XG4gKiBAc2VlIFtEcmF3IEdlb0pTT04gcG9pbnRzXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2dlb2pzb24tbWFya2Vycy8pXG4gKiBAc2VlIFtBZGQgYSBHZW9KU09OIGxpbmVdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZ2VvanNvbi1saW5lLylcbiAqIEBzZWUgW0NyZWF0ZSBhIGhlYXRtYXAgZnJvbSBwb2ludHNdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvaGVhdG1hcC8pXG4gKiBAc2VlIFtDcmVhdGUgYW5kIHN0eWxlIGNsdXN0ZXJzXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2NsdXN0ZXIvKVxuICovXG5jbGFzcyBHZW9KU09OU291cmNlIGV4dGVuZHMgRXZlbnRlZCBpbXBsZW1lbnRzIFNvdXJjZSB7XG4gICAgdHlwZTogJ2dlb2pzb24nO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbWluem9vbTogbnVtYmVyO1xuICAgIG1heHpvb206IG51bWJlcjtcbiAgICB0aWxlU2l6ZTogbnVtYmVyO1xuICAgIGF0dHJpYnV0aW9uOiBzdHJpbmc7XG4gICAgcHJvbW90ZUlkOiA/UHJvbW90ZUlkU3BlY2lmaWNhdGlvbjtcblxuICAgIGlzVGlsZUNsaXBwZWQ6IGJvb2xlYW47XG4gICAgcmVwYXJzZU92ZXJzY2FsZWQ6IGJvb2xlYW47XG4gICAgX2RhdGE6IEdlb0pTT04gfCBzdHJpbmc7XG4gICAgX29wdGlvbnM6IGFueTtcbiAgICB3b3JrZXJPcHRpb25zOiBhbnk7XG4gICAgbWFwOiBNYXA7XG4gICAgYWN0b3I6IEFjdG9yO1xuICAgIF9sb2FkZWQ6IGJvb2xlYW47XG4gICAgX2NvbGxlY3RSZXNvdXJjZVRpbWluZzogYm9vbGVhbjtcbiAgICBfcmVzb3VyY2VUaW1pbmc6IEFycmF5PFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmc+O1xuICAgIF9yZW1vdmVkOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihpZDogc3RyaW5nLCBvcHRpb25zOiBHZW9KU09OU291cmNlU3BlY2lmaWNhdGlvbiAmIHt3b3JrZXJPcHRpb25zPzogYW55LCBjb2xsZWN0UmVzb3VyY2VUaW1pbmc6IGJvb2xlYW59LCBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyLCBldmVudGVkUGFyZW50OiBFdmVudGVkKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5pZCA9IGlkO1xuXG4gICAgICAgIC8vIGB0eXBlYCBpcyBhIHByb3BlcnR5IHJhdGhlciB0aGFuIGEgY29uc3RhbnQgdG8gbWFrZSBpdCBlYXN5IGZvciAzcmRcbiAgICAgICAgLy8gcGFydGllcyB0byB1c2UgR2VvSlNPTlNvdXJjZSB0byBidWlsZCB0aGVpciBvd24gc291cmNlIHR5cGVzLlxuICAgICAgICB0aGlzLnR5cGUgPSAnZ2VvanNvbic7XG5cbiAgICAgICAgdGhpcy5taW56b29tID0gMDtcbiAgICAgICAgdGhpcy5tYXh6b29tID0gMTg7XG4gICAgICAgIHRoaXMudGlsZVNpemUgPSA1MTI7XG4gICAgICAgIHRoaXMuaXNUaWxlQ2xpcHBlZCA9IHRydWU7XG4gICAgICAgIHRoaXMucmVwYXJzZU92ZXJzY2FsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9yZW1vdmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2xvYWRlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuYWN0b3IgPSBkaXNwYXRjaGVyLmdldEFjdG9yKCk7XG4gICAgICAgIHRoaXMuc2V0RXZlbnRlZFBhcmVudChldmVudGVkUGFyZW50KTtcblxuICAgICAgICB0aGlzLl9kYXRhID0gKG9wdGlvbnMuZGF0YTogYW55KTtcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IGV4dGVuZCh7fSwgb3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nID0gb3B0aW9ucy5jb2xsZWN0UmVzb3VyY2VUaW1pbmc7XG4gICAgICAgIHRoaXMuX3Jlc291cmNlVGltaW5nID0gW107XG5cbiAgICAgICAgaWYgKG9wdGlvbnMubWF4em9vbSAhPT0gdW5kZWZpbmVkKSB0aGlzLm1heHpvb20gPSBvcHRpb25zLm1heHpvb207XG4gICAgICAgIGlmIChvcHRpb25zLnR5cGUpIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcbiAgICAgICAgaWYgKG9wdGlvbnMuYXR0cmlidXRpb24pIHRoaXMuYXR0cmlidXRpb24gPSBvcHRpb25zLmF0dHJpYnV0aW9uO1xuICAgICAgICB0aGlzLnByb21vdGVJZCA9IG9wdGlvbnMucHJvbW90ZUlkO1xuXG4gICAgICAgIGNvbnN0IHNjYWxlID0gRVhURU5UIC8gdGhpcy50aWxlU2l6ZTtcblxuICAgICAgICAvLyBzZW50IHRvIHRoZSB3b3JrZXIsIGFsb25nIHdpdGggYHVybDogLi4uYCBvciBgZGF0YTogbGl0ZXJhbCBnZW9qc29uYCxcbiAgICAgICAgLy8gc28gdGhhdCBpdCBjYW4gbG9hZC9wYXJzZS9pbmRleCB0aGUgZ2VvanNvbiBkYXRhXG4gICAgICAgIC8vIGV4dGVuZGluZyB3aXRoIGBvcHRpb25zLndvcmtlck9wdGlvbnNgIGhlbHBzIHRvIG1ha2UgaXQgZWFzeSBmb3JcbiAgICAgICAgLy8gdGhpcmQtcGFydHkgc291cmNlcyB0byBoYWNrL3JldXNlIEdlb0pTT05Tb3VyY2UuXG4gICAgICAgIHRoaXMud29ya2VyT3B0aW9ucyA9IGV4dGVuZCh7XG4gICAgICAgICAgICBzb3VyY2U6IHRoaXMuaWQsXG4gICAgICAgICAgICBjbHVzdGVyOiBvcHRpb25zLmNsdXN0ZXIgfHwgZmFsc2UsXG4gICAgICAgICAgICBnZW9qc29uVnRPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgYnVmZmVyOiAob3B0aW9ucy5idWZmZXIgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuYnVmZmVyIDogMTI4KSAqIHNjYWxlLFxuICAgICAgICAgICAgICAgIHRvbGVyYW5jZTogKG9wdGlvbnMudG9sZXJhbmNlICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLnRvbGVyYW5jZSA6IDAuMzc1KSAqIHNjYWxlLFxuICAgICAgICAgICAgICAgIGV4dGVudDogRVhURU5ULFxuICAgICAgICAgICAgICAgIG1heFpvb206IHRoaXMubWF4em9vbSxcbiAgICAgICAgICAgICAgICBsaW5lTWV0cmljczogb3B0aW9ucy5saW5lTWV0cmljcyB8fCBmYWxzZSxcbiAgICAgICAgICAgICAgICBnZW5lcmF0ZUlkOiBvcHRpb25zLmdlbmVyYXRlSWQgfHwgZmFsc2VcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdXBlcmNsdXN0ZXJPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgbWF4Wm9vbTogb3B0aW9ucy5jbHVzdGVyTWF4Wm9vbSAhPT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgICAgICAgICAgTWF0aC5taW4ob3B0aW9ucy5jbHVzdGVyTWF4Wm9vbSwgdGhpcy5tYXh6b29tIC0gMSkgOlxuICAgICAgICAgICAgICAgICAgICAodGhpcy5tYXh6b29tIC0gMSksXG4gICAgICAgICAgICAgICAgZXh0ZW50OiBFWFRFTlQsXG4gICAgICAgICAgICAgICAgcmFkaXVzOiAob3B0aW9ucy5jbHVzdGVyUmFkaXVzIHx8IDUwKSAqIHNjYWxlLFxuICAgICAgICAgICAgICAgIGxvZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgZ2VuZXJhdGVJZDogb3B0aW9ucy5nZW5lcmF0ZUlkIHx8IGZhbHNlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2x1c3RlclByb3BlcnRpZXM6IG9wdGlvbnMuY2x1c3RlclByb3BlcnRpZXNcbiAgICAgICAgfSwgb3B0aW9ucy53b3JrZXJPcHRpb25zKTtcbiAgICB9XG5cbiAgICBsb2FkKCkge1xuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhbG9hZGluZycsIHtkYXRhVHlwZTogJ3NvdXJjZSd9KSk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVdvcmtlckRhdGEoKGVycikgPT4ge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChlcnIpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGRhdGE6IE9iamVjdCA9IHtkYXRhVHlwZTogJ3NvdXJjZScsIHNvdXJjZURhdGFUeXBlOiAnbWV0YWRhdGEnfTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmcgJiYgdGhpcy5fcmVzb3VyY2VUaW1pbmcgJiYgKHRoaXMuX3Jlc291cmNlVGltaW5nLmxlbmd0aCA+IDApKSB7XG4gICAgICAgICAgICAgICAgZGF0YS5yZXNvdXJjZVRpbWluZyA9IHRoaXMuX3Jlc291cmNlVGltaW5nO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Jlc291cmNlVGltaW5nID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGFsdGhvdWdoIEdlb0pTT04gc291cmNlcyBjb250YWluIG5vIG1ldGFkYXRhLCB3ZSBmaXJlIHRoaXMgZXZlbnQgdG8gbGV0IHRoZSBTb3VyY2VDYWNoZVxuICAgICAgICAgICAgLy8ga25vdyBpdHMgb2sgdG8gc3RhcnQgcmVxdWVzdGluZyB0aWxlcy5cbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGEnLCBkYXRhKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uQWRkKG1hcDogTWFwKSB7XG4gICAgICAgIHRoaXMubWFwID0gbWFwO1xuICAgICAgICB0aGlzLmxvYWQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBHZW9KU09OIGRhdGEgYW5kIHJlLXJlbmRlcnMgdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fHN0cmluZ30gZGF0YSBBIEdlb0pTT04gZGF0YSBvYmplY3Qgb3IgYSBVUkwgdG8gb25lLiBUaGUgbGF0dGVyIGlzIHByZWZlcmFibGUgaW4gdGhlIGNhc2Ugb2YgbGFyZ2UgR2VvSlNPTiBmaWxlcy5cbiAgICAgKiBAcmV0dXJucyB7R2VvSlNPTlNvdXJjZX0gdGhpc1xuICAgICAqL1xuICAgIHNldERhdGEoZGF0YTogR2VvSlNPTiB8IHN0cmluZykge1xuICAgICAgICB0aGlzLl9kYXRhID0gZGF0YTtcbiAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZGF0YWxvYWRpbmcnLCB7ZGF0YVR5cGU6ICdzb3VyY2UnfSkpO1xuICAgICAgICB0aGlzLl91cGRhdGVXb3JrZXJEYXRhKChlcnIpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQoZXJyKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBkYXRhOiBPYmplY3QgPSB7ZGF0YVR5cGU6ICdzb3VyY2UnLCBzb3VyY2VEYXRhVHlwZTogJ2NvbnRlbnQnfTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmcgJiYgdGhpcy5fcmVzb3VyY2VUaW1pbmcgJiYgKHRoaXMuX3Jlc291cmNlVGltaW5nLmxlbmd0aCA+IDApKSB7XG4gICAgICAgICAgICAgICAgZGF0YS5yZXNvdXJjZVRpbWluZyA9IHRoaXMuX3Jlc291cmNlVGltaW5nO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Jlc291cmNlVGltaW5nID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhJywgZGF0YSkpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGb3IgY2x1c3RlcmVkIHNvdXJjZXMsIGZldGNoZXMgdGhlIHpvb20gYXQgd2hpY2ggdGhlIGdpdmVuIGNsdXN0ZXIgZXhwYW5kcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjbHVzdGVySWQgVGhlIHZhbHVlIG9mIHRoZSBjbHVzdGVyJ3MgYGNsdXN0ZXJfaWRgIHByb3BlcnR5LlxuICAgICAqIEBwYXJhbSBjYWxsYmFjayBBIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSB6b29tIHZhbHVlIGlzIHJldHJpZXZlZCAoYChlcnJvciwgem9vbSkgPT4geyAuLi4gfWApLlxuICAgICAqIEByZXR1cm5zIHtHZW9KU09OU291cmNlfSB0aGlzXG4gICAgICovXG4gICAgZ2V0Q2x1c3RlckV4cGFuc2lvblpvb20oY2x1c3RlcklkOiBudW1iZXIsIGNhbGxiYWNrOiBDYWxsYmFjazxudW1iZXI+KSB7XG4gICAgICAgIHRoaXMuYWN0b3Iuc2VuZCgnZ2VvanNvbi5nZXRDbHVzdGVyRXhwYW5zaW9uWm9vbScsIHtjbHVzdGVySWQsIHNvdXJjZTogdGhpcy5pZH0sIGNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9yIGNsdXN0ZXJlZCBzb3VyY2VzLCBmZXRjaGVzIHRoZSBjaGlsZHJlbiBvZiB0aGUgZ2l2ZW4gY2x1c3RlciBvbiB0aGUgbmV4dCB6b29tIGxldmVsIChhcyBhbiBhcnJheSBvZiBHZW9KU09OIGZlYXR1cmVzKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjbHVzdGVySWQgVGhlIHZhbHVlIG9mIHRoZSBjbHVzdGVyJ3MgYGNsdXN0ZXJfaWRgIHByb3BlcnR5LlxuICAgICAqIEBwYXJhbSBjYWxsYmFjayBBIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBmZWF0dXJlcyBhcmUgcmV0cmlldmVkIChgKGVycm9yLCBmZWF0dXJlcykgPT4geyAuLi4gfWApLlxuICAgICAqIEByZXR1cm5zIHtHZW9KU09OU291cmNlfSB0aGlzXG4gICAgICovXG4gICAgZ2V0Q2x1c3RlckNoaWxkcmVuKGNsdXN0ZXJJZDogbnVtYmVyLCBjYWxsYmFjazogQ2FsbGJhY2s8QXJyYXk8R2VvSlNPTkZlYXR1cmU+Pikge1xuICAgICAgICB0aGlzLmFjdG9yLnNlbmQoJ2dlb2pzb24uZ2V0Q2x1c3RlckNoaWxkcmVuJywge2NsdXN0ZXJJZCwgc291cmNlOiB0aGlzLmlkfSwgY2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGb3IgY2x1c3RlcmVkIHNvdXJjZXMsIGZldGNoZXMgdGhlIG9yaWdpbmFsIHBvaW50cyB0aGF0IGJlbG9uZyB0byB0aGUgY2x1c3RlciAoYXMgYW4gYXJyYXkgb2YgR2VvSlNPTiBmZWF0dXJlcykuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2x1c3RlcklkIFRoZSB2YWx1ZSBvZiB0aGUgY2x1c3RlcidzIGBjbHVzdGVyX2lkYCBwcm9wZXJ0eS5cbiAgICAgKiBAcGFyYW0gbGltaXQgVGhlIG1heGltdW0gbnVtYmVyIG9mIGZlYXR1cmVzIHRvIHJldHVybi5cbiAgICAgKiBAcGFyYW0gb2Zmc2V0IFRoZSBudW1iZXIgb2YgZmVhdHVyZXMgdG8gc2tpcCAoZS5nLiBmb3IgcGFnaW5hdGlvbikuXG4gICAgICogQHBhcmFtIGNhbGxiYWNrIEEgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGZlYXR1cmVzIGFyZSByZXRyaWV2ZWQgKGAoZXJyb3IsIGZlYXR1cmVzKSA9PiB7IC4uLiB9YCkuXG4gICAgICogQHJldHVybnMge0dlb0pTT05Tb3VyY2V9IHRoaXNcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIFJldHJpZXZlIGNsdXN0ZXIgbGVhdmVzIG9uIGNsaWNrXG4gICAgICogbWFwLm9uKCdjbGljaycsICdjbHVzdGVycycsIGZ1bmN0aW9uKGUpIHtcbiAgICAgKiAgIHZhciBmZWF0dXJlcyA9IG1hcC5xdWVyeVJlbmRlcmVkRmVhdHVyZXMoZS5wb2ludCwge1xuICAgICAqICAgICBsYXllcnM6IFsnY2x1c3RlcnMnXVxuICAgICAqICAgfSk7XG4gICAgICpcbiAgICAgKiAgIHZhciBjbHVzdGVySWQgPSBmZWF0dXJlc1swXS5wcm9wZXJ0aWVzLmNsdXN0ZXJfaWQ7XG4gICAgICogICB2YXIgcG9pbnRDb3VudCA9IGZlYXR1cmVzWzBdLnByb3BlcnRpZXMucG9pbnRfY291bnQ7XG4gICAgICogICB2YXIgY2x1c3RlclNvdXJjZSA9IG1hcC5nZXRTb3VyY2UoJ2NsdXN0ZXJzJyk7XG4gICAgICpcbiAgICAgKiAgIGNsdXN0ZXJTb3VyY2UuZ2V0Q2x1c3RlckxlYXZlcyhjbHVzdGVySWQsIHBvaW50Q291bnQsIDAsIGZ1bmN0aW9uKGVycm9yLCBmZWF0dXJlcykge1xuICAgICAqICAgICAvLyBQcmludCBjbHVzdGVyIGxlYXZlcyBpbiB0aGUgY29uc29sZVxuICAgICAqICAgICBjb25zb2xlLmxvZygnQ2x1c3RlciBsZWF2ZXM6JywgZXJyb3IsIGZlYXR1cmVzKTtcbiAgICAgKiAgIH0pXG4gICAgICogfSk7XG4gICAgICovXG4gICAgZ2V0Q2x1c3RlckxlYXZlcyhjbHVzdGVySWQ6IG51bWJlciwgbGltaXQ6IG51bWJlciwgb2Zmc2V0OiBudW1iZXIsIGNhbGxiYWNrOiBDYWxsYmFjazxBcnJheTxHZW9KU09ORmVhdHVyZT4+KSB7XG4gICAgICAgIHRoaXMuYWN0b3Iuc2VuZCgnZ2VvanNvbi5nZXRDbHVzdGVyTGVhdmVzJywge1xuICAgICAgICAgICAgc291cmNlOiB0aGlzLmlkLFxuICAgICAgICAgICAgY2x1c3RlcklkLFxuICAgICAgICAgICAgbGltaXQsXG4gICAgICAgICAgICBvZmZzZXRcbiAgICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIFJlc3BvbnNpYmxlIGZvciBpbnZva2luZyBXb3JrZXJTb3VyY2UncyBnZW9qc29uLmxvYWREYXRhIHRhcmdldCwgd2hpY2hcbiAgICAgKiBoYW5kbGVzIGxvYWRpbmcgdGhlIGdlb2pzb24gZGF0YSBhbmQgcHJlcGFyaW5nIHRvIHNlcnZlIGl0IHVwIGFzIHRpbGVzLFxuICAgICAqIHVzaW5nIGdlb2pzb24tdnQgb3Igc3VwZXJjbHVzdGVyIGFzIGFwcHJvcHJpYXRlLlxuICAgICAqL1xuICAgIF91cGRhdGVXb3JrZXJEYXRhKGNhbGxiYWNrOiBDYWxsYmFjazx2b2lkPikge1xuICAgICAgICB0aGlzLl9sb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGV4dGVuZCh7fSwgdGhpcy53b3JrZXJPcHRpb25zKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuX2RhdGE7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIG9wdGlvbnMucmVxdWVzdCA9IHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KGJyb3dzZXIucmVzb2x2ZVVSTChkYXRhKSwgUmVzb3VyY2VUeXBlLlNvdXJjZSk7XG4gICAgICAgICAgICBvcHRpb25zLnJlcXVlc3QuY29sbGVjdFJlc291cmNlVGltaW5nID0gdGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3B0aW9ucy5kYXRhID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0YXJnZXQge3RoaXMudHlwZX0ubG9hZERhdGEgcmF0aGVyIHRoYW4gbGl0ZXJhbGx5IGdlb2pzb24ubG9hZERhdGEsXG4gICAgICAgIC8vIHNvIHRoYXQgb3RoZXIgZ2VvanNvbi1saWtlIHNvdXJjZSB0eXBlcyBjYW4gZWFzaWx5IHJldXNlIHRoaXNcbiAgICAgICAgLy8gaW1wbGVtZW50YXRpb25cbiAgICAgICAgdGhpcy5hY3Rvci5zZW5kKGAke3RoaXMudHlwZX0ubG9hZERhdGFgLCBvcHRpb25zLCAoZXJyLCByZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9yZW1vdmVkIHx8IChyZXN1bHQgJiYgcmVzdWx0LmFiYW5kb25lZCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2xvYWRlZCA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LnJlc291cmNlVGltaW5nICYmIHJlc3VsdC5yZXNvdXJjZVRpbWluZ1t0aGlzLmlkXSlcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXNvdXJjZVRpbWluZyA9IHJlc3VsdC5yZXNvdXJjZVRpbWluZ1t0aGlzLmlkXS5zbGljZSgwKTtcbiAgICAgICAgICAgIC8vIEFueSBgbG9hZERhdGFgIGNhbGxzIHRoYXQgcGlsZWQgdXAgd2hpbGUgd2Ugd2VyZSBwcm9jZXNzaW5nXG4gICAgICAgICAgICAvLyB0aGlzIG9uZSB3aWxsIGdldCBjb2FsZXNjZWQgaW50byBhIHNpbmdsZSBjYWxsIHdoZW4gdGhpc1xuICAgICAgICAgICAgLy8gJ2NvYWxlc2NlJyBtZXNzYWdlIGlzIHByb2Nlc3NlZC5cbiAgICAgICAgICAgIC8vIFdlIHdvdWxkIHNlbGYtc2VuZCBmcm9tIHRoZSB3b3JrZXIgaWYgd2UgaGFkIGFjY2VzcyB0byBpdHNcbiAgICAgICAgICAgIC8vIG1lc3NhZ2UgcXVldWUuIFdhaXRpbmcgaW5zdGVhZCBmb3IgdGhlICdjb2FsZXNjZScgdG8gcm91bmQtdHJpcFxuICAgICAgICAgICAgLy8gdGhyb3VnaCB0aGUgZm9yZWdyb3VuZCBqdXN0IG1lYW5zIHdlJ3JlIHRocm90dGxpbmcgdGhlIHdvcmtlclxuICAgICAgICAgICAgLy8gdG8gcnVuIGF0IGEgbGl0dGxlIGxlc3MgdGhhbiBmdWxsLXRocm90dGxlLlxuICAgICAgICAgICAgdGhpcy5hY3Rvci5zZW5kKGAke3RoaXMudHlwZX0uY29hbGVzY2VgLCB7c291cmNlOiBvcHRpb25zLnNvdXJjZX0sIG51bGwpO1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbG9hZGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGVkO1xuICAgIH1cblxuICAgIGxvYWRUaWxlKHRpbGU6IFRpbGUsIGNhbGxiYWNrOiBDYWxsYmFjazx2b2lkPikge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gIXRpbGUuYWN0b3IgPyAnbG9hZFRpbGUnIDogJ3JlbG9hZFRpbGUnO1xuICAgICAgICB0aWxlLmFjdG9yID0gdGhpcy5hY3RvcjtcbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgdWlkOiB0aWxlLnVpZCxcbiAgICAgICAgICAgIHRpbGVJRDogdGlsZS50aWxlSUQsXG4gICAgICAgICAgICB6b29tOiB0aWxlLnRpbGVJRC5vdmVyc2NhbGVkWixcbiAgICAgICAgICAgIG1heFpvb206IHRoaXMubWF4em9vbSxcbiAgICAgICAgICAgIHRpbGVTaXplOiB0aGlzLnRpbGVTaXplLFxuICAgICAgICAgICAgc291cmNlOiB0aGlzLmlkLFxuICAgICAgICAgICAgcGl4ZWxSYXRpbzogYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLFxuICAgICAgICAgICAgc2hvd0NvbGxpc2lvbkJveGVzOiB0aGlzLm1hcC5zaG93Q29sbGlzaW9uQm94ZXMsXG4gICAgICAgICAgICBwcm9tb3RlSWQ6IHRoaXMucHJvbW90ZUlkXG4gICAgICAgIH07XG5cbiAgICAgICAgdGlsZS5yZXF1ZXN0ID0gdGhpcy5hY3Rvci5zZW5kKG1lc3NhZ2UsIHBhcmFtcywgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICAgICAgZGVsZXRlIHRpbGUucmVxdWVzdDtcbiAgICAgICAgICAgIHRpbGUudW5sb2FkVmVjdG9yRGF0YSgpO1xuXG4gICAgICAgICAgICBpZiAodGlsZS5hYm9ydGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRpbGUubG9hZFZlY3RvckRhdGEoZGF0YSwgdGhpcy5tYXAucGFpbnRlciwgbWVzc2FnZSA9PT0gJ3JlbG9hZFRpbGUnKTtcblxuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhYm9ydFRpbGUodGlsZTogVGlsZSkge1xuICAgICAgICBpZiAodGlsZS5yZXF1ZXN0KSB7XG4gICAgICAgICAgICB0aWxlLnJlcXVlc3QuY2FuY2VsKCk7XG4gICAgICAgICAgICBkZWxldGUgdGlsZS5yZXF1ZXN0O1xuICAgICAgICB9XG4gICAgICAgIHRpbGUuYWJvcnRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgdW5sb2FkVGlsZSh0aWxlOiBUaWxlKSB7XG4gICAgICAgIHRpbGUudW5sb2FkVmVjdG9yRGF0YSgpO1xuICAgICAgICB0aGlzLmFjdG9yLnNlbmQoJ3JlbW92ZVRpbGUnLCB7dWlkOiB0aWxlLnVpZCwgdHlwZTogdGhpcy50eXBlLCBzb3VyY2U6IHRoaXMuaWR9KTtcbiAgICB9XG5cbiAgICBvblJlbW92ZSgpIHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuYWN0b3Iuc2VuZCgncmVtb3ZlU291cmNlJywge3R5cGU6IHRoaXMudHlwZSwgc291cmNlOiB0aGlzLmlkfSk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCkge1xuICAgICAgICByZXR1cm4gZXh0ZW5kKHt9LCB0aGlzLl9vcHRpb25zLCB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICBkYXRhOiB0aGlzLl9kYXRhXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGhhc1RyYW5zaXRpb24oKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEdlb0pTT05Tb3VyY2U7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHtjcmVhdGVMYXlvdXR9IGZyb20gJy4uL3V0aWwvc3RydWN0X2FycmF5JztcblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlTGF5b3V0KFtcbiAgICB7bmFtZTogJ2FfcG9zJywgdHlwZTogJ0ludDE2JywgY29tcG9uZW50czogMn0sXG4gICAge25hbWU6ICdhX3RleHR1cmVfcG9zJywgdHlwZTogJ0ludDE2JywgY29tcG9uZW50czogMn1cbl0pO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtDYW5vbmljYWxUaWxlSUR9IGZyb20gJy4vdGlsZV9pZCc7XG5pbXBvcnQge0V2ZW50LCBFcnJvckV2ZW50LCBFdmVudGVkfSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IHtnZXRJbWFnZSwgUmVzb3VyY2VUeXBlfSBmcm9tICcuLi91dGlsL2FqYXgnO1xuaW1wb3J0IEVYVEVOVCBmcm9tICcuLi9kYXRhL2V4dGVudCc7XG5pbXBvcnQge1Jhc3RlckJvdW5kc0FycmF5fSBmcm9tICcuLi9kYXRhL2FycmF5X3R5cGVzJztcbmltcG9ydCByYXN0ZXJCb3VuZHNBdHRyaWJ1dGVzIGZyb20gJy4uL2RhdGEvcmFzdGVyX2JvdW5kc19hdHRyaWJ1dGVzJztcbmltcG9ydCBTZWdtZW50VmVjdG9yIGZyb20gJy4uL2RhdGEvc2VnbWVudCc7XG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9yZW5kZXIvdGV4dHVyZSc7XG5pbXBvcnQgTWVyY2F0b3JDb29yZGluYXRlIGZyb20gJy4uL2dlby9tZXJjYXRvcl9jb29yZGluYXRlJztcblxuaW1wb3J0IHR5cGUge1NvdXJjZX0gZnJvbSAnLi9zb3VyY2UnO1xuaW1wb3J0IHR5cGUge0NhbnZhc1NvdXJjZVNwZWNpZmljYXRpb259IGZyb20gJy4vY2FudmFzX3NvdXJjZSc7XG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vdWkvbWFwJztcbmltcG9ydCB0eXBlIERpc3BhdGNoZXIgZnJvbSAnLi4vdXRpbC9kaXNwYXRjaGVyJztcbmltcG9ydCB0eXBlIFRpbGUgZnJvbSAnLi90aWxlJztcbmltcG9ydCB0eXBlIHtDYWxsYmFja30gZnJvbSAnLi4vdHlwZXMvY2FsbGJhY2snO1xuaW1wb3J0IHR5cGUgVmVydGV4QnVmZmVyIGZyb20gJy4uL2dsL3ZlcnRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUge1xuICAgIEltYWdlU291cmNlU3BlY2lmaWNhdGlvbixcbiAgICBWaWRlb1NvdXJjZVNwZWNpZmljYXRpb25cbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5cbnR5cGUgQ29vcmRpbmF0ZXMgPSBbW251bWJlciwgbnVtYmVyXSwgW251bWJlciwgbnVtYmVyXSwgW251bWJlciwgbnVtYmVyXSwgW251bWJlciwgbnVtYmVyXV07XG5cbi8qKlxuICogQSBkYXRhIHNvdXJjZSBjb250YWluaW5nIGFuIGltYWdlLlxuICogKFNlZSB0aGUgW1N0eWxlIFNwZWNpZmljYXRpb25dKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLXN0eWxlLXNwZWMvI3NvdXJjZXMtaW1hZ2UpIGZvciBkZXRhaWxlZCBkb2N1bWVudGF0aW9uIG9mIG9wdGlvbnMuKVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBhZGQgdG8gbWFwXG4gKiBtYXAuYWRkU291cmNlKCdzb21lIGlkJywge1xuICogICAgdHlwZTogJ2ltYWdlJyxcbiAqICAgIHVybDogJ2h0dHBzOi8vd3d3Lm1hcGJveC5jb20vaW1hZ2VzL2Zvby5wbmcnLFxuICogICAgY29vcmRpbmF0ZXM6IFtcbiAqICAgICAgICBbLTc2LjU0LCAzOS4xOF0sXG4gKiAgICAgICAgWy03Ni41MiwgMzkuMThdLFxuICogICAgICAgIFstNzYuNTIsIDM5LjE3XSxcbiAqICAgICAgICBbLTc2LjU0LCAzOS4xN11cbiAqICAgIF1cbiAqIH0pO1xuICpcbiAqIC8vIHVwZGF0ZSBjb29yZGluYXRlc1xuICogdmFyIG15U291cmNlID0gbWFwLmdldFNvdXJjZSgnc29tZSBpZCcpO1xuICogbXlTb3VyY2Uuc2V0Q29vcmRpbmF0ZXMoW1xuICogICAgIFstNzYuNTQzMzU3MzcyMjgzOTQsIDM5LjE4NTc5OTA3MjI5NzQ4XSxcbiAqICAgICBbLTc2LjUyODAzNjU5NDM5MDg3LCAzOS4xODM4MzY0ODQ3NTg3XSxcbiAqICAgICBbLTc2LjUyOTUzODYzMTQzOTIsIDM5LjE3NjgzMzkyNTA3NjA2XSxcbiAqICAgICBbLTc2LjU0NTIwMjczMjA4NjE4LCAzOS4xNzg3NjM0NDEwNjY0Ml1cbiAqIF0pO1xuICpcbiAqIC8vIHVwZGF0ZSB1cmwgYW5kIGNvb3JkaW5hdGVzIHNpbXVsdGFuZW91c2x5XG4gKiBteVNvdXJjZS51cGRhdGVJbWFnZSh7XG4gKiAgICB1cmw6ICdodHRwczovL3d3dy5tYXBib3guY29tL2ltYWdlcy9iYXIucG5nJyxcbiAqICAgIGNvb3JkaW5hdGVzOiBbXG4gKiAgICAgICAgWy03Ni41NDMzNTczNzIyODM5NCwgMzkuMTg1Nzk5MDcyMjk3NDhdLFxuICogICAgICAgIFstNzYuNTI4MDM2NTk0MzkwODcsIDM5LjE4MzgzNjQ4NDc1ODddLFxuICogICAgICAgIFstNzYuNTI5NTM4NjMxNDM5MiwgMzkuMTc2ODMzOTI1MDc2MDZdLFxuICogICAgICAgIFstNzYuNTQ1MjAyNzMyMDg2MTgsIDM5LjE3ODc2MzQ0MTA2NjQyXVxuICogICAgXVxuICogfSlcbiAqXG4gKiBtYXAucmVtb3ZlU291cmNlKCdzb21lIGlkJyk7ICAvLyByZW1vdmVcbiAqIEBzZWUgW0FkZCBhbiBpbWFnZV0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9pbWFnZS1vbi1hLW1hcC8pXG4gKi9cbmNsYXNzIEltYWdlU291cmNlIGV4dGVuZHMgRXZlbnRlZCBpbXBsZW1lbnRzIFNvdXJjZSB7XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbWluem9vbTogbnVtYmVyO1xuICAgIG1heHpvb206IG51bWJlcjtcbiAgICB0aWxlU2l6ZTogbnVtYmVyO1xuICAgIHVybDogc3RyaW5nO1xuXG4gICAgY29vcmRpbmF0ZXM6IENvb3JkaW5hdGVzO1xuICAgIHRpbGVzOiB7W186IHN0cmluZ106IFRpbGV9O1xuICAgIG9wdGlvbnM6IGFueTtcbiAgICBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyO1xuICAgIG1hcDogTWFwO1xuICAgIHRleHR1cmU6IFRleHR1cmUgfCBudWxsO1xuICAgIGltYWdlOiBIVE1MSW1hZ2VFbGVtZW50IHwgSW1hZ2VCaXRtYXA7XG4gICAgdGlsZUlEOiBDYW5vbmljYWxUaWxlSUQ7XG4gICAgX2JvdW5kc0FycmF5OiBSYXN0ZXJCb3VuZHNBcnJheTtcbiAgICBib3VuZHNCdWZmZXI6IFZlcnRleEJ1ZmZlcjtcbiAgICBib3VuZHNTZWdtZW50czogU2VnbWVudFZlY3RvcjtcbiAgICBfbG9hZGVkOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihpZDogc3RyaW5nLCBvcHRpb25zOiBJbWFnZVNvdXJjZVNwZWNpZmljYXRpb24gfCBWaWRlb1NvdXJjZVNwZWNpZmljYXRpb24gfCBDYW52YXNTb3VyY2VTcGVjaWZpY2F0aW9uLCBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyLCBldmVudGVkUGFyZW50OiBFdmVudGVkKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICAgICAgdGhpcy5kaXNwYXRjaGVyID0gZGlzcGF0Y2hlcjtcbiAgICAgICAgdGhpcy5jb29yZGluYXRlcyA9IG9wdGlvbnMuY29vcmRpbmF0ZXM7XG5cbiAgICAgICAgdGhpcy50eXBlID0gJ2ltYWdlJztcbiAgICAgICAgdGhpcy5taW56b29tID0gMDtcbiAgICAgICAgdGhpcy5tYXh6b29tID0gMjI7XG4gICAgICAgIHRoaXMudGlsZVNpemUgPSA1MTI7XG4gICAgICAgIHRoaXMudGlsZXMgPSB7fTtcbiAgICAgICAgdGhpcy5fbG9hZGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5zZXRFdmVudGVkUGFyZW50KGV2ZW50ZWRQYXJlbnQpO1xuXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfVxuXG4gICAgbG9hZChuZXdDb29yZGluYXRlcz86IENvb3JkaW5hdGVzLCBzdWNjZXNzQ2FsbGJhY2s/OiAoKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMuX2xvYWRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhbG9hZGluZycsIHtkYXRhVHlwZTogJ3NvdXJjZSd9KSk7XG5cbiAgICAgICAgdGhpcy51cmwgPSB0aGlzLm9wdGlvbnMudXJsO1xuXG4gICAgICAgIGdldEltYWdlKHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KHRoaXMudXJsLCBSZXNvdXJjZVR5cGUuSW1hZ2UpLCAoZXJyLCBpbWFnZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQoZXJyKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGltYWdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbWFnZSA9IGltYWdlO1xuICAgICAgICAgICAgICAgIGlmIChuZXdDb29yZGluYXRlcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvb3JkaW5hdGVzID0gbmV3Q29vcmRpbmF0ZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbmlzaExvYWRpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbG9hZGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIGltYWdlIFVSTCBhbmQsIG9wdGlvbmFsbHksIHRoZSBjb29yZGluYXRlcy4gVG8gYXZvaWQgaGF2aW5nIHRoZSBpbWFnZSBmbGFzaCBhZnRlciBjaGFuZ2luZyxcbiAgICAgKiBzZXQgdGhlIGByYXN0ZXItZmFkZS1kdXJhdGlvbmAgcGFpbnQgcHJvcGVydHkgb24gdGhlIHJhc3RlciBsYXllciB0byAwLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgT3B0aW9ucyBvYmplY3QuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnVybF0gUmVxdWlyZWQgaW1hZ2UgVVJMLlxuICAgICAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8bnVtYmVyPj59IFtvcHRpb25zLmNvb3JkaW5hdGVzXSBGb3VyIGdlb2dyYXBoaWNhbCBjb29yZGluYXRlcyxcbiAgICAgKiAgIHJlcHJlc2VudGVkIGFzIGFycmF5cyBvZiBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIG51bWJlcnMsIHdoaWNoIGRlZmluZSB0aGUgY29ybmVycyBvZiB0aGUgaW1hZ2UuXG4gICAgICogICBUaGUgY29vcmRpbmF0ZXMgc3RhcnQgYXQgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgaW1hZ2UgYW5kIHByb2NlZWQgaW4gY2xvY2t3aXNlIG9yZGVyLlxuICAgICAqICAgVGhleSBkbyBub3QgaGF2ZSB0byByZXByZXNlbnQgYSByZWN0YW5nbGUuXG4gICAgICogQHJldHVybnMge0ltYWdlU291cmNlfSB0aGlzXG4gICAgICovXG4gICAgdXBkYXRlSW1hZ2Uob3B0aW9uczoge3VybDogc3RyaW5nLCBjb29yZGluYXRlcz86IENvb3JkaW5hdGVzfSkge1xuICAgICAgICBpZiAoIXRoaXMuaW1hZ2UgfHwgIW9wdGlvbnMudXJsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9wdGlvbnMudXJsID0gb3B0aW9ucy51cmw7XG4gICAgICAgIHRoaXMubG9hZChvcHRpb25zLmNvb3JkaW5hdGVzLCAoKSA9PiB7IHRoaXMudGV4dHVyZSA9IG51bGw7IH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBfZmluaXNoTG9hZGluZygpIHtcbiAgICAgICAgaWYgKHRoaXMubWFwKSB7XG4gICAgICAgICAgICB0aGlzLnNldENvb3JkaW5hdGVzKHRoaXMuY29vcmRpbmF0ZXMpO1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZGF0YScsIHtkYXRhVHlwZTogJ3NvdXJjZScsIHNvdXJjZURhdGFUeXBlOiAnbWV0YWRhdGEnfSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25BZGQobWFwOiBNYXApIHtcbiAgICAgICAgdGhpcy5tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMubG9hZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGltYWdlJ3MgY29vcmRpbmF0ZXMgYW5kIHJlLXJlbmRlcnMgdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8bnVtYmVyPj59IGNvb3JkaW5hdGVzIEZvdXIgZ2VvZ3JhcGhpY2FsIGNvb3JkaW5hdGVzLFxuICAgICAqICAgcmVwcmVzZW50ZWQgYXMgYXJyYXlzIG9mIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUgbnVtYmVycywgd2hpY2ggZGVmaW5lIHRoZSBjb3JuZXJzIG9mIHRoZSBpbWFnZS5cbiAgICAgKiAgIFRoZSBjb29yZGluYXRlcyBzdGFydCBhdCB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBpbWFnZSBhbmQgcHJvY2VlZCBpbiBjbG9ja3dpc2Ugb3JkZXIuXG4gICAgICogICBUaGV5IGRvIG5vdCBoYXZlIHRvIHJlcHJlc2VudCBhIHJlY3RhbmdsZS5cbiAgICAgKiBAcmV0dXJucyB7SW1hZ2VTb3VyY2V9IHRoaXNcbiAgICAgKi9cbiAgICBzZXRDb29yZGluYXRlcyhjb29yZGluYXRlczogQ29vcmRpbmF0ZXMpIHtcbiAgICAgICAgdGhpcy5jb29yZGluYXRlcyA9IGNvb3JkaW5hdGVzO1xuXG4gICAgICAgIC8vIENhbGN1bGF0ZSB3aGljaCBtZXJjYXRvciB0aWxlIGlzIHN1aXRhYmxlIGZvciByZW5kZXJpbmcgdGhlIHZpZGVvIGluXG4gICAgICAgIC8vIGFuZCBjcmVhdGUgYSBidWZmZXIgd2l0aCB0aGUgY29ybmVyIGNvb3JkaW5hdGVzLiBUaGVzZSBjb29yZGluYXRlc1xuICAgICAgICAvLyBtYXkgYmUgb3V0c2lkZSB0aGUgdGlsZSwgYmVjYXVzZSByYXN0ZXIgdGlsZXMgYXJlbid0IGNsaXBwZWQgd2hlbiByZW5kZXJpbmcuXG5cbiAgICAgICAgLy8gdHJhbnNmb3JtIHRoZSBnZW8gY29vcmRpbmF0ZXMgaW50byAoem9vbSAwKSB0aWxlIHNwYWNlIGNvb3JkaW5hdGVzXG4gICAgICAgIGNvbnN0IGNvcm5lckNvb3JkcyA9IGNvb3JkaW5hdGVzLm1hcChNZXJjYXRvckNvb3JkaW5hdGUuZnJvbUxuZ0xhdCk7XG5cbiAgICAgICAgLy8gQ29tcHV0ZSB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHRpbGUgd2UnbGwgdXNlIHRvIGhvbGQgdGhpcyBpbWFnZSdzXG4gICAgICAgIC8vIHJlbmRlciBkYXRhXG4gICAgICAgIHRoaXMudGlsZUlEID0gZ2V0Q29vcmRpbmF0ZXNDZW50ZXJUaWxlSUQoY29ybmVyQ29vcmRzKTtcblxuICAgICAgICAvLyBDb25zdHJhaW4gbWluL21heCB6b29tIHRvIG91ciB0aWxlJ3Mgem9vbSBsZXZlbCBpbiBvcmRlciB0byBmb3JjZVxuICAgICAgICAvLyBTb3VyY2VDYWNoZSB0byByZXF1ZXN0IHRoaXMgdGlsZSAobm8gbWF0dGVyIHdoYXQgdGhlIG1hcCdzIHpvb21cbiAgICAgICAgLy8gbGV2ZWwpXG4gICAgICAgIHRoaXMubWluem9vbSA9IHRoaXMubWF4em9vbSA9IHRoaXMudGlsZUlELno7XG5cbiAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSBjb3JuZXIgY29vcmRpbmF0ZXMgaW50byB0aGUgY29vcmRpbmF0ZSBzcGFjZSBvZiBvdXJcbiAgICAgICAgLy8gdGlsZS5cbiAgICAgICAgY29uc3QgdGlsZUNvb3JkcyA9IGNvcm5lckNvb3Jkcy5tYXAoKGNvb3JkKSA9PiB0aGlzLnRpbGVJRC5nZXRUaWxlUG9pbnQoY29vcmQpLl9yb3VuZCgpKTtcblxuICAgICAgICB0aGlzLl9ib3VuZHNBcnJheSA9IG5ldyBSYXN0ZXJCb3VuZHNBcnJheSgpO1xuICAgICAgICB0aGlzLl9ib3VuZHNBcnJheS5lbXBsYWNlQmFjayh0aWxlQ29vcmRzWzBdLngsIHRpbGVDb29yZHNbMF0ueSwgMCwgMCk7XG4gICAgICAgIHRoaXMuX2JvdW5kc0FycmF5LmVtcGxhY2VCYWNrKHRpbGVDb29yZHNbMV0ueCwgdGlsZUNvb3Jkc1sxXS55LCBFWFRFTlQsIDApO1xuICAgICAgICB0aGlzLl9ib3VuZHNBcnJheS5lbXBsYWNlQmFjayh0aWxlQ29vcmRzWzNdLngsIHRpbGVDb29yZHNbM10ueSwgMCwgRVhURU5UKTtcbiAgICAgICAgdGhpcy5fYm91bmRzQXJyYXkuZW1wbGFjZUJhY2sodGlsZUNvb3Jkc1syXS54LCB0aWxlQ29vcmRzWzJdLnksIEVYVEVOVCwgRVhURU5UKTtcblxuICAgICAgICBpZiAodGhpcy5ib3VuZHNCdWZmZXIpIHtcbiAgICAgICAgICAgIHRoaXMuYm91bmRzQnVmZmVyLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmJvdW5kc0J1ZmZlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGEnLCB7ZGF0YVR5cGU6J3NvdXJjZScsIHNvdXJjZURhdGFUeXBlOiAnY29udGVudCd9KSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHByZXBhcmUoKSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLnRpbGVzKS5sZW5ndGggPT09IDAgfHwgIXRoaXMuaW1hZ2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLm1hcC5wYWludGVyLmNvbnRleHQ7XG4gICAgICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcblxuICAgICAgICBpZiAoIXRoaXMuYm91bmRzQnVmZmVyKSB7XG4gICAgICAgICAgICB0aGlzLmJvdW5kc0J1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuX2JvdW5kc0FycmF5LCByYXN0ZXJCb3VuZHNBdHRyaWJ1dGVzLm1lbWJlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmJvdW5kc1NlZ21lbnRzKSB7XG4gICAgICAgICAgICB0aGlzLmJvdW5kc1NlZ21lbnRzID0gU2VnbWVudFZlY3Rvci5zaW1wbGVTZWdtZW50KDAsIDAsIDQsIDIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnRleHR1cmUpIHtcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZSA9IG5ldyBUZXh0dXJlKGNvbnRleHQsIHRoaXMuaW1hZ2UsIGdsLlJHQkEpO1xuICAgICAgICAgICAgdGhpcy50ZXh0dXJlLmJpbmQoZ2wuTElORUFSLCBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgdyBpbiB0aGlzLnRpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCB0aWxlID0gdGhpcy50aWxlc1t3XTtcbiAgICAgICAgICAgIGlmICh0aWxlLnN0YXRlICE9PSAnbG9hZGVkJykge1xuICAgICAgICAgICAgICAgIHRpbGUuc3RhdGUgPSAnbG9hZGVkJztcbiAgICAgICAgICAgICAgICB0aWxlLnRleHR1cmUgPSB0aGlzLnRleHR1cmU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsb2FkVGlsZSh0aWxlOiBUaWxlLCBjYWxsYmFjazogQ2FsbGJhY2s8dm9pZD4pIHtcbiAgICAgICAgLy8gV2UgaGF2ZSBhIHNpbmdsZSB0aWxlIC0tIHdob29zZSBjb29yZGluYXRlcyBhcmUgdGhpcy50aWxlSUQgLS0gdGhhdFxuICAgICAgICAvLyBjb3ZlcnMgdGhlIGltYWdlIHdlIHdhbnQgdG8gcmVuZGVyLiAgSWYgdGhhdCdzIHRoZSBvbmUgYmVpbmdcbiAgICAgICAgLy8gcmVxdWVzdGVkLCBzZXQgaXQgdXAgd2l0aCB0aGUgaW1hZ2U7IG90aGVyd2lzZSwgbWFyayB0aGUgdGlsZSBhc1xuICAgICAgICAvLyBgZXJyb3JlZGAgdG8gaW5kaWNhdGUgdGhhdCB3ZSBoYXZlIG5vIGRhdGEgZm9yIGl0LlxuICAgICAgICAvLyBJZiB0aGUgd29ybGQgd3JhcHMsIHdlIG1heSBoYXZlIG11bHRpcGxlIFwid3JhcHBlZFwiIGNvcGllcyBvZiB0aGVcbiAgICAgICAgLy8gc2luZ2xlIHRpbGUuXG4gICAgICAgIGlmICh0aGlzLnRpbGVJRCAmJiB0aGlzLnRpbGVJRC5lcXVhbHModGlsZS50aWxlSUQuY2Fub25pY2FsKSkge1xuICAgICAgICAgICAgdGhpcy50aWxlc1tTdHJpbmcodGlsZS50aWxlSUQud3JhcCldID0gdGlsZTtcbiAgICAgICAgICAgIHRpbGUuYnVja2V0cyA9IHt9O1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aWxlLnN0YXRlID0gJ2Vycm9yZWQnO1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKTogT2JqZWN0IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdpbWFnZScsXG4gICAgICAgICAgICB1cmw6IHRoaXMub3B0aW9ucy51cmwsXG4gICAgICAgICAgICBjb29yZGluYXRlczogdGhpcy5jb29yZGluYXRlc1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGhhc1RyYW5zaXRpb24oKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbi8qKlxuICogR2l2ZW4gYSBsaXN0IG9mIGNvb3JkaW5hdGVzLCBnZXQgdGhlaXIgY2VudGVyIGFzIGEgY29vcmRpbmF0ZS5cbiAqXG4gKiBAcmV0dXJucyBjZW50ZXJwb2ludFxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvb3JkaW5hdGVzQ2VudGVyVGlsZUlEKGNvb3JkczogQXJyYXk8TWVyY2F0b3JDb29yZGluYXRlPikge1xuICAgIGxldCBtaW5YID0gSW5maW5pdHk7XG4gICAgbGV0IG1pblkgPSBJbmZpbml0eTtcbiAgICBsZXQgbWF4WCA9IC1JbmZpbml0eTtcbiAgICBsZXQgbWF4WSA9IC1JbmZpbml0eTtcblxuICAgIGZvciAoY29uc3QgY29vcmQgb2YgY29vcmRzKSB7XG4gICAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCBjb29yZC54KTtcbiAgICAgICAgbWluWSA9IE1hdGgubWluKG1pblksIGNvb3JkLnkpO1xuICAgICAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgY29vcmQueCk7XG4gICAgICAgIG1heFkgPSBNYXRoLm1heChtYXhZLCBjb29yZC55KTtcbiAgICB9XG5cbiAgICBjb25zdCBkeCA9IG1heFggLSBtaW5YO1xuICAgIGNvbnN0IGR5ID0gbWF4WSAtIG1pblk7XG4gICAgY29uc3QgZE1heCA9IE1hdGgubWF4KGR4LCBkeSk7XG4gICAgY29uc3Qgem9vbSA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3IoLU1hdGgubG9nKGRNYXgpIC8gTWF0aC5MTjIpKTtcbiAgICBjb25zdCB0aWxlc0F0Wm9vbSA9IE1hdGgucG93KDIsIHpvb20pO1xuXG4gICAgcmV0dXJuIG5ldyBDYW5vbmljYWxUaWxlSUQoXG4gICAgICAgICAgICB6b29tLFxuICAgICAgICAgICAgTWF0aC5mbG9vcigobWluWCArIG1heFgpIC8gMiAqIHRpbGVzQXRab29tKSxcbiAgICAgICAgICAgIE1hdGguZmxvb3IoKG1pblkgKyBtYXhZKSAvIDIgKiB0aWxlc0F0Wm9vbSkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBJbWFnZVNvdXJjZTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7Z2V0VmlkZW8sIFJlc291cmNlVHlwZX0gZnJvbSAnLi4vdXRpbC9hamF4JztcblxuaW1wb3J0IEltYWdlU291cmNlIGZyb20gJy4vaW1hZ2Vfc291cmNlJztcbmltcG9ydCByYXN0ZXJCb3VuZHNBdHRyaWJ1dGVzIGZyb20gJy4uL2RhdGEvcmFzdGVyX2JvdW5kc19hdHRyaWJ1dGVzJztcbmltcG9ydCBTZWdtZW50VmVjdG9yIGZyb20gJy4uL2RhdGEvc2VnbWVudCc7XG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuLi9yZW5kZXIvdGV4dHVyZSc7XG5pbXBvcnQge0Vycm9yRXZlbnR9IGZyb20gJy4uL3V0aWwvZXZlbnRlZCc7XG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4uL3N0eWxlLXNwZWMvZXJyb3IvdmFsaWRhdGlvbl9lcnJvcic7XG5cbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi91aS9tYXAnO1xuaW1wb3J0IHR5cGUgRGlzcGF0Y2hlciBmcm9tICcuLi91dGlsL2Rpc3BhdGNoZXInO1xuaW1wb3J0IHR5cGUge0V2ZW50ZWR9IGZyb20gJy4uL3V0aWwvZXZlbnRlZCc7XG5pbXBvcnQgdHlwZSB7VmlkZW9Tb3VyY2VTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuLyoqXG4gKiBBIGRhdGEgc291cmNlIGNvbnRhaW5pbmcgdmlkZW8uXG4gKiAoU2VlIHRoZSBbU3R5bGUgU3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtc3R5bGUtc3BlYy8jc291cmNlcy12aWRlbykgZm9yIGRldGFpbGVkIGRvY3VtZW50YXRpb24gb2Ygb3B0aW9ucy4pXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIGFkZCB0byBtYXBcbiAqIG1hcC5hZGRTb3VyY2UoJ3NvbWUgaWQnLCB7XG4gKiAgICB0eXBlOiAndmlkZW8nLFxuICogICAgdXJsOiBbXG4gKiAgICAgICAgJ2h0dHBzOi8vd3d3Lm1hcGJveC5jb20vYmxvZy9hc3NldHMvYmFsdGltb3JlLXNtb2tlLm1wNCcsXG4gKiAgICAgICAgJ2h0dHBzOi8vd3d3Lm1hcGJveC5jb20vYmxvZy9hc3NldHMvYmFsdGltb3JlLXNtb2tlLndlYm0nXG4gKiAgICBdLFxuICogICAgY29vcmRpbmF0ZXM6IFtcbiAqICAgICAgICBbLTc2LjU0LCAzOS4xOF0sXG4gKiAgICAgICAgWy03Ni41MiwgMzkuMThdLFxuICogICAgICAgIFstNzYuNTIsIDM5LjE3XSxcbiAqICAgICAgICBbLTc2LjU0LCAzOS4xN11cbiAqICAgIF1cbiAqIH0pO1xuICpcbiAqIC8vIHVwZGF0ZVxuICogdmFyIG15U291cmNlID0gbWFwLmdldFNvdXJjZSgnc29tZSBpZCcpO1xuICogbXlTb3VyY2Uuc2V0Q29vcmRpbmF0ZXMoW1xuICogICAgIFstNzYuNTQzMzU3MzcyMjgzOTQsIDM5LjE4NTc5OTA3MjI5NzQ4XSxcbiAqICAgICBbLTc2LjUyODAzNjU5NDM5MDg3LCAzOS4xODM4MzY0ODQ3NTg3XSxcbiAqICAgICBbLTc2LjUyOTUzODYzMTQzOTIsIDM5LjE3NjgzMzkyNTA3NjA2XSxcbiAqICAgICBbLTc2LjU0NTIwMjczMjA4NjE4LCAzOS4xNzg3NjM0NDEwNjY0Ml1cbiAqIF0pO1xuICpcbiAqIG1hcC5yZW1vdmVTb3VyY2UoJ3NvbWUgaWQnKTsgIC8vIHJlbW92ZVxuICogQHNlZSBbQWRkIGEgdmlkZW9dKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvdmlkZW8tb24tYS1tYXAvKVxuICovXG5jbGFzcyBWaWRlb1NvdXJjZSBleHRlbmRzIEltYWdlU291cmNlIHtcbiAgICBvcHRpb25zOiBWaWRlb1NvdXJjZVNwZWNpZmljYXRpb247XG4gICAgdXJsczogQXJyYXk8c3RyaW5nPjtcbiAgICB2aWRlbzogSFRNTFZpZGVvRWxlbWVudDtcbiAgICByb3VuZFpvb206IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIG9wdGlvbnM6IFZpZGVvU291cmNlU3BlY2lmaWNhdGlvbiwgZGlzcGF0Y2hlcjogRGlzcGF0Y2hlciwgZXZlbnRlZFBhcmVudDogRXZlbnRlZCkge1xuICAgICAgICBzdXBlcihpZCwgb3B0aW9ucywgZGlzcGF0Y2hlciwgZXZlbnRlZFBhcmVudCk7XG4gICAgICAgIHRoaXMucm91bmRab29tID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50eXBlID0gJ3ZpZGVvJztcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB9XG5cbiAgICBsb2FkKCkge1xuICAgICAgICB0aGlzLl9sb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuICAgICAgICB0aGlzLnVybHMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCB1cmwgb2Ygb3B0aW9ucy51cmxzKSB7XG4gICAgICAgICAgICB0aGlzLnVybHMucHVzaCh0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdCh1cmwsIFJlc291cmNlVHlwZS5Tb3VyY2UpLnVybCk7XG4gICAgICAgIH1cblxuICAgICAgICBnZXRWaWRlbyh0aGlzLnVybHMsIChlcnIsIHZpZGVvKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChlcnIpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmlkZW8pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZpZGVvID0gdmlkZW87XG4gICAgICAgICAgICAgICAgdGhpcy52aWRlby5sb29wID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHJlcGFpbnRpbmcgd2hlbiB2aWRlbyBzdGFydHMgcGxheWluZy4gaGFzVHJhbnNpdGlvbigpIHdpbGwgdGhlbiByZXR1cm5cbiAgICAgICAgICAgICAgICAvLyB0cnVlIHRvIHRyaWdnZXIgYWRkaXRpb25hbCBmcmFtZXMgYXMgbG9uZyBhcyB0aGUgdmlkZW9zIGNvbnRpbnVlcyBwbGF5aW5nLlxuICAgICAgICAgICAgICAgIHRoaXMudmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigncGxheWluZycsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXAudHJpZ2dlclJlcGFpbnQoKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hcCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZGVvLnBsYXkoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9maW5pc2hMb2FkaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhdXNlcyB0aGUgdmlkZW8uXG4gICAgICovXG4gICAgcGF1c2UoKSB7XG4gICAgICAgIGlmICh0aGlzLnZpZGVvKSB7XG4gICAgICAgICAgICB0aGlzLnZpZGVvLnBhdXNlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQbGF5cyB0aGUgdmlkZW8uXG4gICAgICovXG4gICAgcGxheSgpIHtcbiAgICAgICAgaWYgKHRoaXMudmlkZW8pIHtcbiAgICAgICAgICAgIHRoaXMudmlkZW8ucGxheSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBwbGF5YmFjayB0byBhIHRpbWVzdGFtcCwgaW4gc2Vjb25kcy5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHNlZWsoc2Vjb25kczogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLnZpZGVvKSB7XG4gICAgICAgICAgICBjb25zdCBzZWVrYWJsZVJhbmdlID0gdGhpcy52aWRlby5zZWVrYWJsZTtcbiAgICAgICAgICAgIGlmIChzZWNvbmRzIDwgc2Vla2FibGVSYW5nZS5zdGFydCgwKSB8fCBzZWNvbmRzID4gc2Vla2FibGVSYW5nZS5lbmQoMCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IFZhbGlkYXRpb25FcnJvcihgc291cmNlcy4ke3RoaXMuaWR9YCwgbnVsbCwgYFBsYXliYWNrIGZvciB0aGlzIHZpZGVvIGNhbiBiZSBzZXQgb25seSBiZXR3ZWVuIHRoZSAke3NlZWthYmxlUmFuZ2Uuc3RhcnQoMCl9IGFuZCAke3NlZWthYmxlUmFuZ2UuZW5kKDApfS1zZWNvbmQgbWFyay5gKSkpO1xuICAgICAgICAgICAgfSBlbHNlIHRoaXMudmlkZW8uY3VycmVudFRpbWUgPSBzZWNvbmRzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgSFRNTCBgdmlkZW9gIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7SFRNTFZpZGVvRWxlbWVudH0gVGhlIEhUTUwgYHZpZGVvYCBlbGVtZW50LlxuICAgICAqL1xuICAgIGdldFZpZGVvKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52aWRlbztcbiAgICB9XG5cbiAgICBvbkFkZChtYXA6IE1hcCkge1xuICAgICAgICBpZiAodGhpcy5tYXApIHJldHVybjtcbiAgICAgICAgdGhpcy5tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMubG9hZCgpO1xuICAgICAgICBpZiAodGhpcy52aWRlbykge1xuICAgICAgICAgICAgdGhpcy52aWRlby5wbGF5KCk7XG4gICAgICAgICAgICB0aGlzLnNldENvb3JkaW5hdGVzKHRoaXMuY29vcmRpbmF0ZXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdmlkZW8ncyBjb29yZGluYXRlcyBhbmQgcmUtcmVuZGVycyB0aGUgbWFwLlxuICAgICAqXG4gICAgICogQG1ldGhvZCBzZXRDb29yZGluYXRlc1xuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBtZW1iZXJvZiBWaWRlb1NvdXJjZVxuICAgICAqIEByZXR1cm5zIHtWaWRlb1NvdXJjZX0gdGhpc1xuICAgICAqL1xuICAgIC8vIHNldENvb3JkaW5hdGVzIGluaGVyaXRlZCBmcm9tIEltYWdlU291cmNlXG5cbiAgICBwcmVwYXJlKCkge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy50aWxlcykubGVuZ3RoID09PSAwIHx8IHRoaXMudmlkZW8ucmVhZHlTdGF0ZSA8IDIpIHtcbiAgICAgICAgICAgIHJldHVybjsgLy8gbm90IGVub3VnaCBkYXRhIGZvciBjdXJyZW50IHBvc2l0aW9uXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5tYXAucGFpbnRlci5jb250ZXh0O1xuICAgICAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG5cbiAgICAgICAgaWYgKCF0aGlzLmJvdW5kc0J1ZmZlcikge1xuICAgICAgICAgICAgdGhpcy5ib3VuZHNCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLl9ib3VuZHNBcnJheSwgcmFzdGVyQm91bmRzQXR0cmlidXRlcy5tZW1iZXJzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5ib3VuZHNTZWdtZW50cykge1xuICAgICAgICAgICAgdGhpcy5ib3VuZHNTZWdtZW50cyA9IFNlZ21lbnRWZWN0b3Iuc2ltcGxlU2VnbWVudCgwLCAwLCA0LCAyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy50ZXh0dXJlKSB7XG4gICAgICAgICAgICB0aGlzLnRleHR1cmUgPSBuZXcgVGV4dHVyZShjb250ZXh0LCB0aGlzLnZpZGVvLCBnbC5SR0JBKTtcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZS5iaW5kKGdsLkxJTkVBUiwgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMudmlkZW8ucGF1c2VkKSB7XG4gICAgICAgICAgICB0aGlzLnRleHR1cmUuYmluZChnbC5MSU5FQVIsIGdsLkNMQU1QX1RPX0VER0UpO1xuICAgICAgICAgICAgZ2wudGV4U3ViSW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCAwLCAwLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB0aGlzLnZpZGVvKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgdyBpbiB0aGlzLnRpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCB0aWxlID0gdGhpcy50aWxlc1t3XTtcbiAgICAgICAgICAgIGlmICh0aWxlLnN0YXRlICE9PSAnbG9hZGVkJykge1xuICAgICAgICAgICAgICAgIHRpbGUuc3RhdGUgPSAnbG9hZGVkJztcbiAgICAgICAgICAgICAgICB0aWxlLnRleHR1cmUgPSB0aGlzLnRleHR1cmU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAndmlkZW8nLFxuICAgICAgICAgICAgdXJsczogdGhpcy51cmxzLFxuICAgICAgICAgICAgY29vcmRpbmF0ZXM6IHRoaXMuY29vcmRpbmF0ZXNcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBoYXNUcmFuc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52aWRlbyAmJiAhdGhpcy52aWRlby5wYXVzZWQ7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWaWRlb1NvdXJjZTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBJbWFnZVNvdXJjZSBmcm9tICcuL2ltYWdlX3NvdXJjZSc7XG5cbmltcG9ydCB3aW5kb3cgZnJvbSAnLi4vdXRpbC93aW5kb3cnO1xuaW1wb3J0IHJhc3RlckJvdW5kc0F0dHJpYnV0ZXMgZnJvbSAnLi4vZGF0YS9yYXN0ZXJfYm91bmRzX2F0dHJpYnV0ZXMnO1xuaW1wb3J0IFNlZ21lbnRWZWN0b3IgZnJvbSAnLi4vZGF0YS9zZWdtZW50JztcbmltcG9ydCBUZXh0dXJlIGZyb20gJy4uL3JlbmRlci90ZXh0dXJlJztcbmltcG9ydCB7RXJyb3JFdmVudH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCBWYWxpZGF0aW9uRXJyb3IgZnJvbSAnLi4vc3R5bGUtc3BlYy9lcnJvci92YWxpZGF0aW9uX2Vycm9yJztcblxuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL3VpL21hcCc7XG5pbXBvcnQgdHlwZSBEaXNwYXRjaGVyIGZyb20gJy4uL3V0aWwvZGlzcGF0Y2hlcic7XG5pbXBvcnQgdHlwZSB7RXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcblxuZXhwb3J0IHR5cGUgQ2FudmFzU291cmNlU3BlY2lmaWNhdGlvbiA9IHt8XG4gICAgXCJ0eXBlXCI6IFwiY2FudmFzXCIsXG4gICAgXCJjb29yZGluYXRlc1wiOiBbW251bWJlciwgbnVtYmVyXSwgW251bWJlciwgbnVtYmVyXSwgW251bWJlciwgbnVtYmVyXSwgW251bWJlciwgbnVtYmVyXV0sXG4gICAgXCJhbmltYXRlXCI/OiBib29sZWFuLFxuICAgIFwiY2FudmFzXCI6IHN0cmluZyB8IEhUTUxDYW52YXNFbGVtZW50XG58fTtcblxuLyoqXG4gKiBPcHRpb25zIHRvIGFkZCBhIGNhbnZhcyBzb3VyY2UgdHlwZSB0byB0aGUgbWFwLlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENhbnZhc1NvdXJjZU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlIFNvdXJjZSB0eXBlLiBNdXN0IGJlIGBcImNhbnZhc1wiYC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfEhUTUxDYW52YXNFbGVtZW50fSBjYW52YXMgQ2FudmFzIHNvdXJjZSBmcm9tIHdoaWNoIHRvIHJlYWQgcGl4ZWxzLiBDYW4gYmUgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBJRCBvZiB0aGUgY2FudmFzIGVsZW1lbnQsIG9yIHRoZSBgSFRNTENhbnZhc0VsZW1lbnRgIGl0c2VsZi5cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8QXJyYXk8bnVtYmVyPj59IGNvb3JkaW5hdGVzIEZvdXIgZ2VvZ3JhcGhpY2FsIGNvb3JkaW5hdGVzIGRlbm90aW5nIHdoZXJlIHRvIHBsYWNlIHRoZSBjb3JuZXJzIG9mIHRoZSBjYW52YXMsIHNwZWNpZmllZCBpbiBgW2xvbmdpdHVkZSwgbGF0aXR1ZGVdYCBwYWlycy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2FuaW1hdGU9dHJ1ZV0gV2hldGhlciB0aGUgY2FudmFzIHNvdXJjZSBpcyBhbmltYXRlZC4gSWYgdGhlIGNhbnZhcyBpcyBzdGF0aWMgKGkuZS4gcGl4ZWxzIGRvIG5vdCBuZWVkIHRvIGJlIHJlLXJlYWQgb24gZXZlcnkgZnJhbWUpLCBgYW5pbWF0ZWAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuXG4gKi9cblxuLyoqXG4gKiBBIGRhdGEgc291cmNlIGNvbnRhaW5pbmcgdGhlIGNvbnRlbnRzIG9mIGFuIEhUTUwgY2FudmFzLiBTZWUge0BsaW5rIENhbnZhc1NvdXJjZU9wdGlvbnN9IGZvciBkZXRhaWxlZCBkb2N1bWVudGF0aW9uIG9mIG9wdGlvbnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIGFkZCB0byBtYXBcbiAqIG1hcC5hZGRTb3VyY2UoJ3NvbWUgaWQnLCB7XG4gKiAgICB0eXBlOiAnY2FudmFzJyxcbiAqICAgIGNhbnZhczogJ2lkT2ZNeUhUTUxDYW52YXMnLFxuICogICAgYW5pbWF0ZTogdHJ1ZSxcbiAqICAgIGNvb3JkaW5hdGVzOiBbXG4gKiAgICAgICAgWy03Ni41NCwgMzkuMThdLFxuICogICAgICAgIFstNzYuNTIsIDM5LjE4XSxcbiAqICAgICAgICBbLTc2LjUyLCAzOS4xN10sXG4gKiAgICAgICAgWy03Ni41NCwgMzkuMTddXG4gKiAgICBdXG4gKiB9KTtcbiAqXG4gKiAvLyB1cGRhdGVcbiAqIHZhciBteVNvdXJjZSA9IG1hcC5nZXRTb3VyY2UoJ3NvbWUgaWQnKTtcbiAqIG15U291cmNlLnNldENvb3JkaW5hdGVzKFtcbiAqICAgICBbLTc2LjU0MzM1NzM3MjI4Mzk0LCAzOS4xODU3OTkwNzIyOTc0OF0sXG4gKiAgICAgWy03Ni41MjgwMzY1OTQzOTA4NywgMzkuMTgzODM2NDg0NzU4N10sXG4gKiAgICAgWy03Ni41Mjk1Mzg2MzE0MzkyLCAzOS4xNzY4MzM5MjUwNzYwNl0sXG4gKiAgICAgWy03Ni41NDUyMDI3MzIwODYxOCwgMzkuMTc4NzYzNDQxMDY2NDJdXG4gKiBdKTtcbiAqXG4gKiBtYXAucmVtb3ZlU291cmNlKCdzb21lIGlkJyk7ICAvLyByZW1vdmVcbiAqL1xuY2xhc3MgQ2FudmFzU291cmNlIGV4dGVuZHMgSW1hZ2VTb3VyY2Uge1xuICAgIG9wdGlvbnM6IENhbnZhc1NvdXJjZVNwZWNpZmljYXRpb247XG4gICAgYW5pbWF0ZTogYm9vbGVhbjtcbiAgICBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50O1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgaGVpZ2h0OiBudW1iZXI7XG4gICAgcGxheTogKCkgPT4gdm9pZDtcbiAgICBwYXVzZTogKCkgPT4gdm9pZDtcbiAgICBfcGxheWluZzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoaWQ6IHN0cmluZywgb3B0aW9uczogQ2FudmFzU291cmNlU3BlY2lmaWNhdGlvbiwgZGlzcGF0Y2hlcjogRGlzcGF0Y2hlciwgZXZlbnRlZFBhcmVudDogRXZlbnRlZCkge1xuICAgICAgICBzdXBlcihpZCwgb3B0aW9ucywgZGlzcGF0Y2hlciwgZXZlbnRlZFBhcmVudCk7XG5cbiAgICAgICAgLy8gV2UgYnVpbGQgaW4gc29tZSB2YWxpZGF0aW9uIGhlcmUsIHNpbmNlIGNhbnZhcyBzb3VyY2VzIGFyZW4ndCBpbmNsdWRlZCBpbiB0aGUgc3R5bGUgc3BlYzpcbiAgICAgICAgaWYgKCFvcHRpb25zLmNvb3JkaW5hdGVzKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IFZhbGlkYXRpb25FcnJvcihgc291cmNlcy4ke2lkfWAsIG51bGwsICdtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5IFwiY29vcmRpbmF0ZXNcIicpKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkob3B0aW9ucy5jb29yZGluYXRlcykgfHwgb3B0aW9ucy5jb29yZGluYXRlcy5sZW5ndGggIT09IDQgfHxcbiAgICAgICAgICAgICAgICBvcHRpb25zLmNvb3JkaW5hdGVzLnNvbWUoYyA9PiAhQXJyYXkuaXNBcnJheShjKSB8fCBjLmxlbmd0aCAhPT0gMiB8fCBjLnNvbWUobCA9PiB0eXBlb2YgbCAhPT0gJ251bWJlcicpKSkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBWYWxpZGF0aW9uRXJyb3IoYHNvdXJjZXMuJHtpZH1gLCBudWxsLCAnXCJjb29yZGluYXRlc1wiIHByb3BlcnR5IG11c3QgYmUgYW4gYXJyYXkgb2YgNCBsb25naXR1ZGUvbGF0aXR1ZGUgYXJyYXkgcGFpcnMnKSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuYW5pbWF0ZSAmJiB0eXBlb2Ygb3B0aW9ucy5hbmltYXRlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgVmFsaWRhdGlvbkVycm9yKGBzb3VyY2VzLiR7aWR9YCwgbnVsbCwgJ29wdGlvbmFsIFwiYW5pbWF0ZVwiIHByb3BlcnR5IG11c3QgYmUgYSBib29sZWFuIHZhbHVlJykpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghb3B0aW9ucy5jYW52YXMpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgVmFsaWRhdGlvbkVycm9yKGBzb3VyY2VzLiR7aWR9YCwgbnVsbCwgJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgXCJjYW52YXNcIicpKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMuY2FudmFzICE9PSAnc3RyaW5nJyAmJiAhKG9wdGlvbnMuY2FudmFzIGluc3RhbmNlb2Ygd2luZG93LkhUTUxDYW52YXNFbGVtZW50KSkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBWYWxpZGF0aW9uRXJyb3IoYHNvdXJjZXMuJHtpZH1gLCBudWxsLCAnXCJjYW52YXNcIiBtdXN0IGJlIGVpdGhlciBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIElEIG9mIHRoZSBjYW52YXMgZWxlbWVudCBmcm9tIHdoaWNoIHRvIHJlYWQsIG9yIGFuIEhUTUxDYW52YXNFbGVtZW50IGluc3RhbmNlJykpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIHRoaXMuYW5pbWF0ZSA9IG9wdGlvbnMuYW5pbWF0ZSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5hbmltYXRlIDogdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzIGFuaW1hdGlvbi4gVGhlIGltYWdlIHdpbGwgYmUgY29waWVkIGZyb20gdGhlIGNhbnZhcyB0byB0aGUgbWFwIG9uIGVhY2ggZnJhbWUuXG4gICAgICogQG1ldGhvZCBwbGF5XG4gICAgICogQGluc3RhbmNlXG4gICAgICogQG1lbWJlcm9mIENhbnZhc1NvdXJjZVxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMgYW5pbWF0aW9uLiBUaGUgbWFwIHdpbGwgZGlzcGxheSBhIHN0YXRpYyBjb3B5IG9mIHRoZSBjYW52YXMgaW1hZ2UuXG4gICAgICogQG1ldGhvZCBwYXVzZVxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBtZW1iZXJvZiBDYW52YXNTb3VyY2VcbiAgICAgKi9cblxuICAgIGxvYWQoKSB7XG4gICAgICAgIHRoaXMuX2xvYWRlZCA9IHRydWU7XG4gICAgICAgIGlmICghdGhpcy5jYW52YXMpIHtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzID0gKHRoaXMub3B0aW9ucy5jYW52YXMgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTENhbnZhc0VsZW1lbnQpID9cbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuY2FudmFzIDpcbiAgICAgICAgICAgICAgICB3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5vcHRpb25zLmNhbnZhcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoO1xuICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodDtcblxuICAgICAgICBpZiAodGhpcy5faGFzSW52YWxpZERpbWVuc2lvbnMoKSkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcignQ2FudmFzIGRpbWVuc2lvbnMgY2Fubm90IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB6ZXJvLicpKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBsYXkgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHRoaXMuX3BsYXlpbmcgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5tYXAudHJpZ2dlclJlcGFpbnQoKTtcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnBhdXNlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fcGxheWluZykge1xuICAgICAgICAgICAgICAgIHRoaXMucHJlcGFyZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3BsYXlpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLl9maW5pc2hMb2FkaW5nKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgSFRNTCBgY2FudmFzYCBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHJldHVybnMge0hUTUxDYW52YXNFbGVtZW50fSBUaGUgSFRNTCBgY2FudmFzYCBlbGVtZW50LlxuICAgICAqL1xuICAgIGdldENhbnZhcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FudmFzO1xuICAgIH1cblxuICAgIG9uQWRkKG1hcDogTWFwKSB7XG4gICAgICAgIHRoaXMubWFwID0gbWFwO1xuICAgICAgICB0aGlzLmxvYWQoKTtcbiAgICAgICAgaWYgKHRoaXMuY2FudmFzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hbmltYXRlKSB0aGlzLnBsYXkoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUmVtb3ZlKCkge1xuICAgICAgICB0aGlzLnBhdXNlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY2FudmFzJ3MgY29vcmRpbmF0ZXMgYW5kIHJlLXJlbmRlcnMgdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIEBtZXRob2Qgc2V0Q29vcmRpbmF0ZXNcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAbWVtYmVyb2YgQ2FudmFzU291cmNlXG4gICAgICogQHBhcmFtIHtBcnJheTxBcnJheTxudW1iZXI+Pn0gY29vcmRpbmF0ZXMgRm91ciBnZW9ncmFwaGljYWwgY29vcmRpbmF0ZXMsXG4gICAgICogICByZXByZXNlbnRlZCBhcyBhcnJheXMgb2YgbG9uZ2l0dWRlIGFuZCBsYXRpdHVkZSBudW1iZXJzLCB3aGljaCBkZWZpbmUgdGhlIGNvcm5lcnMgb2YgdGhlIGNhbnZhcy5cbiAgICAgKiAgIFRoZSBjb29yZGluYXRlcyBzdGFydCBhdCB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBjYW52YXMgYW5kIHByb2NlZWQgaW4gY2xvY2t3aXNlIG9yZGVyLlxuICAgICAqICAgVGhleSBkbyBub3QgaGF2ZSB0byByZXByZXNlbnQgYSByZWN0YW5nbGUuXG4gICAgICogQHJldHVybnMge0NhbnZhc1NvdXJjZX0gdGhpc1xuICAgICAqL1xuICAgIC8vIHNldENvb3JkaW5hdGVzIGluaGVyaXRlZCBmcm9tIEltYWdlU291cmNlXG5cbiAgICBwcmVwYXJlKCkge1xuICAgICAgICBsZXQgcmVzaXplID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmNhbnZhcy53aWR0aCAhPT0gdGhpcy53aWR0aCkge1xuICAgICAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMuY2FudmFzLndpZHRoO1xuICAgICAgICAgICAgcmVzaXplID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jYW52YXMuaGVpZ2h0ICE9PSB0aGlzLmhlaWdodCkge1xuICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLmNhbnZhcy5oZWlnaHQ7XG4gICAgICAgICAgICByZXNpemUgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2hhc0ludmFsaWREaW1lbnNpb25zKCkpIHJldHVybjtcblxuICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy50aWxlcykubGVuZ3RoID09PSAwKSByZXR1cm47IC8vIG5vdCBlbm91Z2ggZGF0YSBmb3IgY3VycmVudCBwb3NpdGlvblxuXG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLm1hcC5wYWludGVyLmNvbnRleHQ7XG4gICAgICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcblxuICAgICAgICBpZiAoIXRoaXMuYm91bmRzQnVmZmVyKSB7XG4gICAgICAgICAgICB0aGlzLmJvdW5kc0J1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuX2JvdW5kc0FycmF5LCByYXN0ZXJCb3VuZHNBdHRyaWJ1dGVzLm1lbWJlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmJvdW5kc1NlZ21lbnRzKSB7XG4gICAgICAgICAgICB0aGlzLmJvdW5kc1NlZ21lbnRzID0gU2VnbWVudFZlY3Rvci5zaW1wbGVTZWdtZW50KDAsIDAsIDQsIDIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnRleHR1cmUpIHtcbiAgICAgICAgICAgIHRoaXMudGV4dHVyZSA9IG5ldyBUZXh0dXJlKGNvbnRleHQsIHRoaXMuY2FudmFzLCBnbC5SR0JBLCB7cHJlbXVsdGlwbHk6IHRydWV9KTtcbiAgICAgICAgfSBlbHNlIGlmIChyZXNpemUgfHwgdGhpcy5fcGxheWluZykge1xuICAgICAgICAgICAgdGhpcy50ZXh0dXJlLnVwZGF0ZSh0aGlzLmNhbnZhcywge3ByZW11bHRpcGx5OiB0cnVlfSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHcgaW4gdGhpcy50aWxlcykge1xuICAgICAgICAgICAgY29uc3QgdGlsZSA9IHRoaXMudGlsZXNbd107XG4gICAgICAgICAgICBpZiAodGlsZS5zdGF0ZSAhPT0gJ2xvYWRlZCcpIHtcbiAgICAgICAgICAgICAgICB0aWxlLnN0YXRlID0gJ2xvYWRlZCc7XG4gICAgICAgICAgICAgICAgdGlsZS50ZXh0dXJlID0gdGhpcy50ZXh0dXJlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCk6IE9iamVjdCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnY2FudmFzJyxcbiAgICAgICAgICAgIGNvb3JkaW5hdGVzOiB0aGlzLmNvb3JkaW5hdGVzXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgaGFzVHJhbnNpdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXlpbmc7XG4gICAgfVxuXG4gICAgX2hhc0ludmFsaWREaW1lbnNpb25zKCkge1xuICAgICAgICBmb3IgKGNvbnN0IHggb2YgW3RoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHRdKSB7XG4gICAgICAgICAgICBpZiAoaXNOYU4oeCkgfHwgeCA8PSAwKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDYW52YXNTb3VyY2U7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2JpbmRBbGx9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5cbmltcG9ydCB0eXBlIERpc3BhdGNoZXIgZnJvbSAnLi4vdXRpbC9kaXNwYXRjaGVyJztcbmltcG9ydCB0eXBlIHtFdmVudCwgRXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi91aS9tYXAnO1xuaW1wb3J0IHR5cGUgVGlsZSBmcm9tICcuL3RpbGUnO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4vdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSB7Q2FsbGJhY2t9IGZyb20gJy4uL3R5cGVzL2NhbGxiYWNrJztcbmltcG9ydCB7Q2Fub25pY2FsVGlsZUlEfSBmcm9tICcuL3RpbGVfaWQnO1xuXG4vKipcbiAqIFRoZSBgU291cmNlYCBpbnRlcmZhY2UgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIHNvdXJjZSB0eXBlLCBpbmNsdWRpbmcgXCJjb3JlXCIgdHlwZXMgKGB2ZWN0b3JgLCBgcmFzdGVyYCxcbiAqIGB2aWRlb2AsIGV0Yy4pIGFuZCBhbGwgY3VzdG9tLCB0aGlyZC1wYXJ0eSB0eXBlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBpZCBUaGUgaWQgZm9yIHRoZSBzb3VyY2UuIE11c3Qgbm90IGJlIHVzZWQgYnkgYW55IGV4aXN0aW5nIHNvdXJjZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIFNvdXJjZSBvcHRpb25zLCBzcGVjaWZpYyB0byB0aGUgc291cmNlIHR5cGUgKGV4Y2VwdCBmb3IgYG9wdGlvbnMudHlwZWAsIHdoaWNoIGlzIGFsd2F5c1xuICogcmVxdWlyZWQpLlxuICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMudHlwZSBUaGUgc291cmNlIHR5cGUsIG1hdGNoaW5nIHRoZSB2YWx1ZSBvZiBgbmFtZWAgdXNlZCBpbiB7QGxpbmsgU3R5bGUjYWRkU291cmNlVHlwZX0uXG4gKiBAcGFyYW0ge0Rpc3BhdGNoZXJ9IGRpc3BhdGNoZXIgQSB7QGxpbmsgRGlzcGF0Y2hlcn0gaW5zdGFuY2UsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHNlbmQgbWVzc2FnZXMgdG8gdGhlIHdvcmtlcnMuXG4gKlxuICogQGZpcmVzIGRhdGEgd2l0aCBge2RhdGFUeXBlOiAnc291cmNlJywgc291cmNlRGF0YVR5cGU6ICdtZXRhZGF0YSd9YCB0byBpbmRpY2F0ZSB0aGF0IGFueSBuZWNlc3NhcnkgbWV0YWRhdGFcbiAqIGhhcyBiZWVuIGxvYWRlZCBzbyB0aGF0IGl0J3Mgb2theSB0byBjYWxsIGBsb2FkVGlsZWA7IGFuZCB3aXRoIGB7ZGF0YVR5cGU6ICdzb3VyY2UnLCBzb3VyY2VEYXRhVHlwZTogJ2NvbnRlbnQnfWBcbiAqIHRvIGluZGljYXRlIHRoYXQgdGhlIHNvdXJjZSBkYXRhIGhhcyBjaGFuZ2VkLCBzbyB0aGF0IGFueSBjdXJyZW50IGNhY2hlcyBzaG91bGQgYmUgZmx1c2hlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZCBUaGUgaWQgZm9yIHRoZSBzb3VyY2UuICBNdXN0IG1hdGNoIHRoZSBpZCBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IG1pbnpvb21cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBtYXh6b29tXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzVGlsZUNsaXBwZWQgYGZhbHNlYCBpZiB0aWxlcyBjYW4gYmUgZHJhd24gb3V0c2lkZSB0aGVpciBib3VuZGFyaWVzLCBgdHJ1ZWAgaWYgdGhleSBjYW5ub3QuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlcGFyc2VPdmVyc2NhbGVkIGB0cnVlYCBpZiB0aWxlcyBzaG91bGQgYmUgc2VudCBiYWNrIHRvIHRoZSB3b3JrZXIgZm9yIGVhY2ggb3Zlcnpvb21lZCB6b29tXG4gKiBsZXZlbCwgYGZhbHNlYCBpZiBub3QuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJvdW5kWm9vbSBgdHJ1ZWAgaWYgem9vbSBsZXZlbHMgYXJlIHJvdW5kZWQgdG8gdGhlIG5lYXJlc3QgaW50ZWdlciBpbiB0aGUgc291cmNlIGRhdGEsIGBmYWxzZWBcbiAqIGlmIHRoZXkgYXJlIGZsb29yLWVkIHRvIHRoZSBuZWFyZXN0IGludGVnZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU291cmNlIHtcbiAgICArdHlwZTogc3RyaW5nO1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbWluem9vbTogbnVtYmVyLFxuICAgIG1heHpvb206IG51bWJlcixcbiAgICB0aWxlU2l6ZTogbnVtYmVyLFxuICAgIGF0dHJpYnV0aW9uPzogc3RyaW5nLFxuXG4gICAgcm91bmRab29tPzogYm9vbGVhbixcbiAgICBpc1RpbGVDbGlwcGVkPzogYm9vbGVhbixcbiAgICBtYXBib3hfbG9nbz86IGJvb2xlYW4sXG4gICAgdGlsZUlEPzogQ2Fub25pY2FsVGlsZUlEO1xuICAgIHJlcGFyc2VPdmVyc2NhbGVkPzogYm9vbGVhbixcbiAgICB2ZWN0b3JMYXllcklkcz86IEFycmF5PHN0cmluZz4sXG5cbiAgICBoYXNUcmFuc2l0aW9uKCk6IGJvb2xlYW47XG4gICAgbG9hZGVkKCk6IGJvb2xlYW47XG5cbiAgICBmaXJlKGV2ZW50OiBFdmVudCk6IG1peGVkO1xuXG4gICAgK29uQWRkPzogKG1hcDogTWFwKSA9PiB2b2lkO1xuICAgICtvblJlbW92ZT86IChtYXA6IE1hcCkgPT4gdm9pZDtcblxuICAgIGxvYWRUaWxlKHRpbGU6IFRpbGUsIGNhbGxiYWNrOiBDYWxsYmFjazx2b2lkPik6IHZvaWQ7XG4gICAgK2hhc1RpbGU/OiAodGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEKSA9PiBib29sZWFuO1xuICAgICthYm9ydFRpbGU/OiAodGlsZTogVGlsZSwgY2FsbGJhY2s6IENhbGxiYWNrPHZvaWQ+KSA9PiB2b2lkO1xuICAgICt1bmxvYWRUaWxlPzogKHRpbGU6IFRpbGUsIGNhbGxiYWNrOiBDYWxsYmFjazx2b2lkPikgPT4gdm9pZDtcblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIEEgcGxhaW4gKHN0cmluZ2lmaWFibGUpIEpTIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHNvdXJjZS5cbiAgICAgKiBDcmVhdGluZyBhIHNvdXJjZSB1c2luZyB0aGUgcmV0dXJuZWQgb2JqZWN0IGFzIHRoZSBgb3B0aW9uc2Agc2hvdWxkIHJlc3VsdCBpbiBhIFNvdXJjZSB0aGF0IGlzXG4gICAgICogZXF1aXZhbGVudCB0byB0aGlzIG9uZS5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHNlcmlhbGl6ZSgpOiBPYmplY3Q7XG5cbiAgICArcHJlcGFyZT86ICgpID0+IHZvaWQ7XG59XG5cbnR5cGUgU291cmNlU3RhdGljcyA9IHtcbiAgICAvKlxuICAgICAqIEFuIG9wdGlvbmFsIFVSTCB0byBhIHNjcmlwdCB3aGljaCwgd2hlbiBydW4gYnkgYSBXb3JrZXIsIHJlZ2lzdGVycyBhIHtAbGluayBXb3JrZXJTb3VyY2V9XG4gICAgICogaW1wbGVtZW50YXRpb24gZm9yIHRoaXMgU291cmNlIHR5cGUgYnkgY2FsbGluZyBgc2VsZi5yZWdpc3RlcldvcmtlclNvdXJjZSh3b3JrZXJTb3VyY2U6IFdvcmtlclNvdXJjZSlgLlxuICAgICAqL1xuICAgIHdvcmtlclNvdXJjZVVSTD86IFVSTDtcbn07XG5cbmV4cG9ydCB0eXBlIFNvdXJjZUNsYXNzID0gQ2xhc3M8U291cmNlPiAmIFNvdXJjZVN0YXRpY3M7XG5cbmltcG9ydCB2ZWN0b3IgZnJvbSAnLi4vc291cmNlL3ZlY3Rvcl90aWxlX3NvdXJjZSc7XG5pbXBvcnQgcmFzdGVyIGZyb20gJy4uL3NvdXJjZS9yYXN0ZXJfdGlsZV9zb3VyY2UnO1xuaW1wb3J0IHJhc3RlckRlbSBmcm9tICcuLi9zb3VyY2UvcmFzdGVyX2RlbV90aWxlX3NvdXJjZSc7XG5pbXBvcnQgZ2VvanNvbiBmcm9tICcuLi9zb3VyY2UvZ2VvanNvbl9zb3VyY2UnO1xuaW1wb3J0IHZpZGVvIGZyb20gJy4uL3NvdXJjZS92aWRlb19zb3VyY2UnO1xuaW1wb3J0IGltYWdlIGZyb20gJy4uL3NvdXJjZS9pbWFnZV9zb3VyY2UnO1xuaW1wb3J0IGNhbnZhcyBmcm9tICcuLi9zb3VyY2UvY2FudmFzX3NvdXJjZSc7XG5cbmltcG9ydCB0eXBlIHtTb3VyY2VTcGVjaWZpY2F0aW9ufSBmcm9tICcuLi9zdHlsZS1zcGVjL3R5cGVzJztcblxuY29uc3Qgc291cmNlVHlwZXMgPSB7XG4gICAgdmVjdG9yLFxuICAgIHJhc3RlcixcbiAgICAncmFzdGVyLWRlbSc6IHJhc3RlckRlbSxcbiAgICBnZW9qc29uLFxuICAgIHZpZGVvLFxuICAgIGltYWdlLFxuICAgIGNhbnZhc1xufTtcblxuLypcbiAqIENyZWF0ZXMgYSB0aWxlZCBkYXRhIHNvdXJjZSBpbnN0YW5jZSBnaXZlbiBhbiBvcHRpb25zIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gaWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgQSBzb3VyY2UgZGVmaW5pdGlvbiBvYmplY3QgY29tcGxpYW50IHdpdGhcbiAqIFtgbWFwYm94LWdsLXN0eWxlLXNwZWNgXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1zdHlsZS1zcGVjLyNzb3VyY2VzKSBvciwgZm9yIGEgdGhpcmQtcGFydHkgc291cmNlIHR5cGUsXG4gICogd2l0aCB0aGF0IHR5cGUncyByZXF1aXJlbWVudHMuXG4gKiBAcGFyYW0ge0Rpc3BhdGNoZXJ9IGRpc3BhdGNoZXJcbiAqIEByZXR1cm5zIHtTb3VyY2V9XG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGUgPSBmdW5jdGlvbihpZDogc3RyaW5nLCBzcGVjaWZpY2F0aW9uOiBTb3VyY2VTcGVjaWZpY2F0aW9uLCBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyLCBldmVudGVkUGFyZW50OiBFdmVudGVkKSB7XG4gICAgY29uc3Qgc291cmNlID0gbmV3IHNvdXJjZVR5cGVzW3NwZWNpZmljYXRpb24udHlwZV0oaWQsIChzcGVjaWZpY2F0aW9uOiBhbnkpLCBkaXNwYXRjaGVyLCBldmVudGVkUGFyZW50KTtcblxuICAgIGlmIChzb3VyY2UuaWQgIT09IGlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgU291cmNlIGlkIHRvIGJlICR7aWR9IGluc3RlYWQgb2YgJHtzb3VyY2UuaWR9YCk7XG4gICAgfVxuXG4gICAgYmluZEFsbChbJ2xvYWQnLCAnYWJvcnQnLCAndW5sb2FkJywgJ3NlcmlhbGl6ZScsICdwcmVwYXJlJ10sIHNvdXJjZSk7XG4gICAgcmV0dXJuIHNvdXJjZTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUeXBlID0gZnVuY3Rpb24gKG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBzb3VyY2VUeXBlc1tuYW1lXTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRUeXBlID0gZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgdHlwZTogQ2xhc3M8U291cmNlPikge1xuICAgIHNvdXJjZVR5cGVzW25hbWVdID0gdHlwZTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0b3Ige1xuICAgIHNlbmQodHlwZTogc3RyaW5nLCBkYXRhOiBPYmplY3QsIGNhbGxiYWNrOiBDYWxsYmFjazxhbnk+KTogdm9pZDtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB0eXBlIFNvdXJjZUNhY2hlIGZyb20gJy4vc291cmNlX2NhY2hlJztcbmltcG9ydCB0eXBlIFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgQ29sbGlzaW9uSW5kZXggZnJvbSAnLi4vc3ltYm9sL2NvbGxpc2lvbl9pbmRleCc7XG5pbXBvcnQgdHlwZSBUcmFuc2Zvcm0gZnJvbSAnLi4vZ2VvL3RyYW5zZm9ybSc7XG5pbXBvcnQgdHlwZSB7UmV0YWluZWRRdWVyeURhdGF9IGZyb20gJy4uL3N5bWJvbC9wbGFjZW1lbnQnO1xuaW1wb3J0IHR5cGUge0ZpbHRlclNwZWNpZmljYXRpb259IGZyb20gJy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHttYXQ0fSBmcm9tICdnbC1tYXRyaXgnO1xuXG4vKlxuICogUmV0dXJucyBhIG1hdHJpeCB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgZnJvbSB0aWxlIGNvb3JkaW5hdGVzIHRvIHZpZXdwb3J0IHBpeGVsIGNvb3JkaW5hdGVzLlxuICovXG5mdW5jdGlvbiBnZXRQaXhlbFBvc01hdHJpeCh0cmFuc2Zvcm0sIHRpbGVJRCkge1xuICAgIGNvbnN0IHQgPSBtYXQ0LmlkZW50aXR5KFtdKTtcbiAgICBtYXQ0LnRyYW5zbGF0ZSh0LCB0LCBbMSwgMSwgMF0pO1xuICAgIG1hdDQuc2NhbGUodCwgdCwgW3RyYW5zZm9ybS53aWR0aCAqIDAuNSwgdHJhbnNmb3JtLmhlaWdodCAqIDAuNSwgMV0pO1xuICAgIHJldHVybiBtYXQ0Lm11bHRpcGx5KHQsIHQsIHRyYW5zZm9ybS5jYWxjdWxhdGVQb3NNYXRyaXgodGlsZUlELnRvVW53cmFwcGVkKCkpKTtcbn1cblxuZnVuY3Rpb24gcXVlcnlJbmNsdWRlczNETGF5ZXIobGF5ZXJzPzogQXJyYXk8c3RyaW5nPiwgc3R5bGVMYXllcnM6IHtbXzogc3RyaW5nXTogU3R5bGVMYXllcn0sIHNvdXJjZUlEOiBzdHJpbmcpIHtcbiAgICBpZiAobGF5ZXJzKSB7XG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJJRCBvZiBsYXllcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gc3R5bGVMYXllcnNbbGF5ZXJJRF07XG4gICAgICAgICAgICBpZiAobGF5ZXIgJiYgbGF5ZXIuc291cmNlID09PSBzb3VyY2VJRCAmJiBsYXllci50eXBlID09PSAnZmlsbC1leHRydXNpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzdHlsZUxheWVycykge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSBzdHlsZUxheWVyc1trZXldO1xuICAgICAgICAgICAgaWYgKGxheWVyLnNvdXJjZSA9PT0gc291cmNlSUQgJiYgbGF5ZXIudHlwZSA9PT0gJ2ZpbGwtZXh0cnVzaW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhzb3VyY2VDYWNoZTogU291cmNlQ2FjaGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVMYXllcnM6IHtbXzogc3RyaW5nXTogU3R5bGVMYXllcn0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplZExheWVyczoge1tfOiBzdHJpbmddOiBPYmplY3R9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHsgZmlsdGVyOiBGaWx0ZXJTcGVjaWZpY2F0aW9uLCBsYXllcnM6IEFycmF5PHN0cmluZz4sIGF2YWlsYWJsZUltYWdlczogQXJyYXk8c3RyaW5nPiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtKSB7XG5cbiAgICBjb25zdCBoYXMzRExheWVyID0gcXVlcnlJbmNsdWRlczNETGF5ZXIocGFyYW1zICYmIHBhcmFtcy5sYXllcnMsIHN0eWxlTGF5ZXJzLCBzb3VyY2VDYWNoZS5pZCk7XG4gICAgY29uc3QgbWF4UGl0Y2hTY2FsZUZhY3RvciA9IHRyYW5zZm9ybS5tYXhQaXRjaFNjYWxlRmFjdG9yKCk7XG4gICAgY29uc3QgdGlsZXNJbiA9IHNvdXJjZUNhY2hlLnRpbGVzSW4ocXVlcnlHZW9tZXRyeSwgbWF4UGl0Y2hTY2FsZUZhY3RvciwgaGFzM0RMYXllcik7XG5cbiAgICB0aWxlc0luLnNvcnQoc29ydFRpbGVzSW4pO1xuICAgIGNvbnN0IHJlbmRlcmVkRmVhdHVyZUxheWVycyA9IFtdO1xuICAgIGZvciAoY29uc3QgdGlsZUluIG9mIHRpbGVzSW4pIHtcbiAgICAgICAgcmVuZGVyZWRGZWF0dXJlTGF5ZXJzLnB1c2goe1xuICAgICAgICAgICAgd3JhcHBlZFRpbGVJRDogdGlsZUluLnRpbGVJRC53cmFwcGVkKCkua2V5LFxuICAgICAgICAgICAgcXVlcnlSZXN1bHRzOiB0aWxlSW4udGlsZS5xdWVyeVJlbmRlcmVkRmVhdHVyZXMoXG4gICAgICAgICAgICAgICAgc3R5bGVMYXllcnMsXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZExheWVycyxcbiAgICAgICAgICAgICAgICBzb3VyY2VDYWNoZS5fc3RhdGUsXG4gICAgICAgICAgICAgICAgdGlsZUluLnF1ZXJ5R2VvbWV0cnksXG4gICAgICAgICAgICAgICAgdGlsZUluLmNhbWVyYVF1ZXJ5R2VvbWV0cnksXG4gICAgICAgICAgICAgICAgdGlsZUluLnNjYWxlLFxuICAgICAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm0sXG4gICAgICAgICAgICAgICAgbWF4UGl0Y2hTY2FsZUZhY3RvcixcbiAgICAgICAgICAgICAgICBnZXRQaXhlbFBvc01hdHJpeChzb3VyY2VDYWNoZS50cmFuc2Zvcm0sIHRpbGVJbi50aWxlSUQpKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBtZXJnZVJlbmRlcmVkRmVhdHVyZUxheWVycyhyZW5kZXJlZEZlYXR1cmVMYXllcnMpO1xuXG4gICAgLy8gTWVyZ2Ugc3RhdGUgZnJvbSBTb3VyY2VDYWNoZSBpbnRvIHRoZSByZXN1bHRzXG4gICAgZm9yIChjb25zdCBsYXllcklEIGluIHJlc3VsdCkge1xuICAgICAgICByZXN1bHRbbGF5ZXJJRF0uZm9yRWFjaCgoZmVhdHVyZVdyYXBwZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlV3JhcHBlci5mZWF0dXJlO1xuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSBzb3VyY2VDYWNoZS5nZXRGZWF0dXJlU3RhdGUoZmVhdHVyZS5sYXllclsnc291cmNlLWxheWVyJ10sIGZlYXR1cmUuaWQpO1xuICAgICAgICAgICAgZmVhdHVyZS5zb3VyY2UgPSBmZWF0dXJlLmxheWVyLnNvdXJjZTtcbiAgICAgICAgICAgIGlmIChmZWF0dXJlLmxheWVyWydzb3VyY2UtbGF5ZXInXSkge1xuICAgICAgICAgICAgICAgIGZlYXR1cmUuc291cmNlTGF5ZXIgPSBmZWF0dXJlLmxheWVyWydzb3VyY2UtbGF5ZXInXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZlYXR1cmUuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeVJlbmRlcmVkU3ltYm9scyhzdHlsZUxheWVyczoge1tfOiBzdHJpbmddOiBTdHlsZUxheWVyfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVkTGF5ZXJzOiB7W186IHN0cmluZ106IFN0eWxlTGF5ZXJ9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUNhY2hlczoge1tfOiBzdHJpbmddOiBTb3VyY2VDYWNoZX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlHZW9tZXRyeTogQXJyYXk8UG9pbnQ+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogeyBmaWx0ZXI6IEZpbHRlclNwZWNpZmljYXRpb24sIGxheWVyczogQXJyYXk8c3RyaW5nPiwgYXZhaWxhYmxlSW1hZ2VzOiBBcnJheTxzdHJpbmc+IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGlzaW9uSW5kZXg6IENvbGxpc2lvbkluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldGFpbmVkUXVlcnlEYXRhOiB7W186IG51bWJlcl06IFJldGFpbmVkUXVlcnlEYXRhfSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGNvbnN0IHJlbmRlcmVkU3ltYm9scyA9IGNvbGxpc2lvbkluZGV4LnF1ZXJ5UmVuZGVyZWRTeW1ib2xzKHF1ZXJ5R2VvbWV0cnkpO1xuICAgIGNvbnN0IGJ1Y2tldFF1ZXJ5RGF0YSA9IFtdO1xuICAgIGZvciAoY29uc3QgYnVja2V0SW5zdGFuY2VJZCBvZiBPYmplY3Qua2V5cyhyZW5kZXJlZFN5bWJvbHMpLm1hcChOdW1iZXIpKSB7XG4gICAgICAgIGJ1Y2tldFF1ZXJ5RGF0YS5wdXNoKHJldGFpbmVkUXVlcnlEYXRhW2J1Y2tldEluc3RhbmNlSWRdKTtcbiAgICB9XG4gICAgYnVja2V0UXVlcnlEYXRhLnNvcnQoc29ydFRpbGVzSW4pO1xuXG4gICAgZm9yIChjb25zdCBxdWVyeURhdGEgb2YgYnVja2V0UXVlcnlEYXRhKSB7XG4gICAgICAgIGNvbnN0IGJ1Y2tldFN5bWJvbHMgPSBxdWVyeURhdGEuZmVhdHVyZUluZGV4Lmxvb2t1cFN5bWJvbEZlYXR1cmVzKFxuICAgICAgICAgICAgICAgIHJlbmRlcmVkU3ltYm9sc1txdWVyeURhdGEuYnVja2V0SW5zdGFuY2VJZF0sXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZExheWVycyxcbiAgICAgICAgICAgICAgICBxdWVyeURhdGEuYnVja2V0SW5kZXgsXG4gICAgICAgICAgICAgICAgcXVlcnlEYXRhLnNvdXJjZUxheWVySW5kZXgsXG4gICAgICAgICAgICAgICAgcGFyYW1zLmZpbHRlcixcbiAgICAgICAgICAgICAgICBwYXJhbXMubGF5ZXJzLFxuICAgICAgICAgICAgICAgIHBhcmFtcy5hdmFpbGFibGVJbWFnZXMsXG4gICAgICAgICAgICAgICAgc3R5bGVMYXllcnMpO1xuXG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJJRCBpbiBidWNrZXRTeW1ib2xzKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHRGZWF0dXJlcyA9IHJlc3VsdFtsYXllcklEXSA9IHJlc3VsdFtsYXllcklEXSB8fCBbXTtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyU3ltYm9scyA9IGJ1Y2tldFN5bWJvbHNbbGF5ZXJJRF07XG4gICAgICAgICAgICBsYXllclN5bWJvbHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIE1hdGNoIHRvcERvd25GZWF0dXJlQ29tcGFyYXRvciBmcm9tIEZlYXR1cmVJbmRleCwgYnV0IHVzaW5nXG4gICAgICAgICAgICAgICAgLy8gbW9zdCByZWNlbnQgc29ydGluZyBvZiBmZWF0dXJlcyBmcm9tIGJ1Y2tldC5zb3J0RmVhdHVyZXNcbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlU29ydE9yZGVyID0gcXVlcnlEYXRhLmZlYXR1cmVTb3J0T3JkZXI7XG4gICAgICAgICAgICAgICAgaWYgKGZlYXR1cmVTb3J0T3JkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcXVlcnlSZW5kZXJlZFN5bWJvbHMgZG9jdW1lbnRhdGlvbiBzYXlzIHdlJ2xsIHJldHVybiBmZWF0dXJlcyBpblxuICAgICAgICAgICAgICAgICAgICAvLyBcInRvcC10by1ib3R0b21cIiByZW5kZXJpbmcgb3JkZXIgKGFrYSBsYXN0LXRvLWZpcnN0KS5cbiAgICAgICAgICAgICAgICAgICAgLy8gQWN0dWFsbHkgdGhlcmUgY2FuIGJlIG11bHRpcGxlIHN5bWJvbCBpbnN0YW5jZXMgcGVyIGZlYXR1cmUsIHNvXG4gICAgICAgICAgICAgICAgICAgIC8vIHdlIHNvcnQgZWFjaCBmZWF0dXJlIGJhc2VkIG9uIHRoZSBmaXJzdCBtYXRjaGluZyBzeW1ib2wgaW5zdGFuY2UuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNvcnRlZEEgPSBmZWF0dXJlU29ydE9yZGVyLmluZGV4T2YoYS5mZWF0dXJlSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzb3J0ZWRCID0gZmVhdHVyZVNvcnRPcmRlci5pbmRleE9mKGIuZmVhdHVyZUluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHNvcnRlZEEgPj0gMCk7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChzb3J0ZWRCID49IDApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc29ydGVkQiAtIHNvcnRlZEE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQnVja2V0IGhhc24ndCBiZWVuIHJlLXNvcnRlZCBiYXNlZCBvbiBhbmdsZSwgc28gdXNlIHRoZVxuICAgICAgICAgICAgICAgICAgICAvLyByZXZlcnNlIG9mIHRoZSBvcmRlciB0aGUgZmVhdHVyZXMgYXBwZWFyZWQgaW4gdGhlIGRhdGEuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBiLmZlYXR1cmVJbmRleCAtIGEuZmVhdHVyZUluZGV4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9yIChjb25zdCBzeW1ib2xGZWF0dXJlIG9mIGxheWVyU3ltYm9scykge1xuICAgICAgICAgICAgICAgIHJlc3VsdEZlYXR1cmVzLnB1c2goc3ltYm9sRmVhdHVyZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNZXJnZSBzdGF0ZSBmcm9tIFNvdXJjZUNhY2hlIGludG8gdGhlIHJlc3VsdHNcbiAgICBmb3IgKGNvbnN0IGxheWVyTmFtZSBpbiByZXN1bHQpIHtcbiAgICAgICAgcmVzdWx0W2xheWVyTmFtZV0uZm9yRWFjaCgoZmVhdHVyZVdyYXBwZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlV3JhcHBlci5mZWF0dXJlO1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSBzdHlsZUxheWVyc1tsYXllck5hbWVdO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlQ2FjaGUgPSBzb3VyY2VDYWNoZXNbbGF5ZXIuc291cmNlXTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gc291cmNlQ2FjaGUuZ2V0RmVhdHVyZVN0YXRlKGZlYXR1cmUubGF5ZXJbJ3NvdXJjZS1sYXllciddLCBmZWF0dXJlLmlkKTtcbiAgICAgICAgICAgIGZlYXR1cmUuc291cmNlID0gZmVhdHVyZS5sYXllci5zb3VyY2U7XG4gICAgICAgICAgICBpZiAoZmVhdHVyZS5sYXllclsnc291cmNlLWxheWVyJ10pIHtcbiAgICAgICAgICAgICAgICBmZWF0dXJlLnNvdXJjZUxheWVyID0gZmVhdHVyZS5sYXllclsnc291cmNlLWxheWVyJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmZWF0dXJlLnN0YXRlID0gc3RhdGU7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlTb3VyY2VGZWF0dXJlcyhzb3VyY2VDYWNoZTogU291cmNlQ2FjaGUsIHBhcmFtczogYW55KSB7XG4gICAgY29uc3QgdGlsZXMgPSBzb3VyY2VDYWNoZS5nZXRSZW5kZXJhYmxlSWRzKCkubWFwKChpZCkgPT4ge1xuICAgICAgICByZXR1cm4gc291cmNlQ2FjaGUuZ2V0VGlsZUJ5SUQoaWQpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgICBjb25zdCBkYXRhVGlsZXMgPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHRpbGUgPSB0aWxlc1tpXTtcbiAgICAgICAgY29uc3QgZGF0YUlEID0gdGlsZS50aWxlSUQuY2Fub25pY2FsLmtleTtcbiAgICAgICAgaWYgKCFkYXRhVGlsZXNbZGF0YUlEXSkge1xuICAgICAgICAgICAgZGF0YVRpbGVzW2RhdGFJRF0gPSB0cnVlO1xuICAgICAgICAgICAgdGlsZS5xdWVyeVNvdXJjZUZlYXR1cmVzKHJlc3VsdCwgcGFyYW1zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHNvcnRUaWxlc0luKGEsIGIpIHtcbiAgICBjb25zdCBpZEEgPSBhLnRpbGVJRDtcbiAgICBjb25zdCBpZEIgPSBiLnRpbGVJRDtcbiAgICByZXR1cm4gKGlkQS5vdmVyc2NhbGVkWiAtIGlkQi5vdmVyc2NhbGVkWikgfHwgKGlkQS5jYW5vbmljYWwueSAtIGlkQi5jYW5vbmljYWwueSkgfHwgKGlkQS53cmFwIC0gaWRCLndyYXApIHx8IChpZEEuY2Fub25pY2FsLnggLSBpZEIuY2Fub25pY2FsLngpO1xufVxuXG5mdW5jdGlvbiBtZXJnZVJlbmRlcmVkRmVhdHVyZUxheWVycyh0aWxlcykge1xuICAgIC8vIE1lcmdlIHJlc3VsdHMgZnJvbSBhbGwgdGlsZXMsIGJ1dCBpZiB0d28gdGlsZXMgc2hhcmUgdGhlIHNhbWVcbiAgICAvLyB3cmFwcGVkIElELCBkb24ndCBkdXBsaWNhdGUgZmVhdHVyZXMgYmV0d2VlbiB0aGUgdHdvIHRpbGVzXG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgY29uc3Qgd3JhcHBlZElETGF5ZXJNYXAgPSB7fTtcbiAgICBmb3IgKGNvbnN0IHRpbGUgb2YgdGlsZXMpIHtcbiAgICAgICAgY29uc3QgcXVlcnlSZXN1bHRzID0gdGlsZS5xdWVyeVJlc3VsdHM7XG4gICAgICAgIGNvbnN0IHdyYXBwZWRJRCA9IHRpbGUud3JhcHBlZFRpbGVJRDtcbiAgICAgICAgY29uc3Qgd3JhcHBlZElETGF5ZXJzID0gd3JhcHBlZElETGF5ZXJNYXBbd3JhcHBlZElEXSA9IHdyYXBwZWRJRExheWVyTWFwW3dyYXBwZWRJRF0gfHwge307XG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJJRCBpbiBxdWVyeVJlc3VsdHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbGVGZWF0dXJlcyA9IHF1ZXJ5UmVzdWx0c1tsYXllcklEXTtcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZWRJREZlYXR1cmVzID0gd3JhcHBlZElETGF5ZXJzW2xheWVySURdID0gd3JhcHBlZElETGF5ZXJzW2xheWVySURdIHx8IHt9O1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0RmVhdHVyZXMgPSByZXN1bHRbbGF5ZXJJRF0gPSByZXN1bHRbbGF5ZXJJRF0gfHwgW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHRpbGVGZWF0dXJlIG9mIHRpbGVGZWF0dXJlcykge1xuICAgICAgICAgICAgICAgIGlmICghd3JhcHBlZElERmVhdHVyZXNbdGlsZUZlYXR1cmUuZmVhdHVyZUluZGV4XSkge1xuICAgICAgICAgICAgICAgICAgICB3cmFwcGVkSURGZWF0dXJlc1t0aWxlRmVhdHVyZS5mZWF0dXJlSW5kZXhdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0RmVhdHVyZXMucHVzaCh0aWxlRmVhdHVyZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4vdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4vdGlsZSc7XG5cbi8qKlxuICogQSBbbGVhc3QtcmVjZW50bHktdXNlZCBjYWNoZV0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DYWNoZV9hbGdvcml0aG1zKVxuICogd2l0aCBoYXNoIGxvb2t1cCBtYWRlIHBvc3NpYmxlIGJ5IGtlZXBpbmcgYSBsaXN0IG9mIGtleXMgaW4gcGFyYWxsZWwgdG9cbiAqIGFuIGFycmF5IG9mIGRpY3Rpb25hcnkgb2YgdmFsdWVzXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgVGlsZUNhY2hlIHtcbiAgICBtYXg6IG51bWJlcjtcbiAgICBkYXRhOiB7W2tleTogc3RyaW5nXTogQXJyYXk8eyB2YWx1ZTogVGlsZSwgdGltZW91dDogP1RpbWVvdXRJRH0+fTtcbiAgICBvcmRlcjogQXJyYXk8c3RyaW5nPjtcbiAgICBvblJlbW92ZTogKGVsZW1lbnQ6IFRpbGUpID0+IHZvaWQ7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG1heCBudW1iZXIgb2YgcGVybWl0dGVkIHZhbHVlc1xuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IG9uUmVtb3ZlIGNhbGxiYWNrIGNhbGxlZCB3aXRoIGl0ZW1zIHdoZW4gdGhleSBleHBpcmVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihtYXg6IG51bWJlciwgb25SZW1vdmU6IChlbGVtZW50OiBUaWxlKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMubWF4ID0gbWF4O1xuICAgICAgICB0aGlzLm9uUmVtb3ZlID0gb25SZW1vdmU7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhciB0aGUgY2FjaGVcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtUaWxlQ2FjaGV9IHRoaXMgY2FjaGVcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHJlc2V0KCkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmVtb3ZlZERhdGEgb2YgdGhpcy5kYXRhW2tleV0pIHtcbiAgICAgICAgICAgICAgICBpZiAocmVtb3ZlZERhdGEudGltZW91dCkgY2xlYXJUaW1lb3V0KHJlbW92ZWREYXRhLnRpbWVvdXQpO1xuICAgICAgICAgICAgICAgIHRoaXMub25SZW1vdmUocmVtb3ZlZERhdGEudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kYXRhID0ge307XG4gICAgICAgIHRoaXMub3JkZXIgPSBbXTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgYSBrZXksIHZhbHVlIGNvbWJpbmF0aW9uIHRvIHRoZSBjYWNoZSwgdHJpbW1pbmcgaXRzIHNpemUgaWYgdGhpcyBwdXNoZXNcbiAgICAgKiBpdCBvdmVyIG1heCBsZW5ndGguXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge092ZXJzY2FsZWRUaWxlSUR9IHRpbGVJRCBsb29rdXAga2V5IGZvciB0aGUgaXRlbVxuICAgICAqIEBwYXJhbSB7Kn0gZGF0YSBhbnkgdmFsdWVcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtUaWxlQ2FjaGV9IHRoaXMgY2FjaGVcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGFkZCh0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQsIGRhdGE6IFRpbGUsIGV4cGlyeVRpbWVvdXQ6IG51bWJlciB8IHZvaWQpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGlsZUlELndyYXBwZWQoKS5rZXk7XG4gICAgICAgIGlmICh0aGlzLmRhdGFba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFba2V5XSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YVdyYXBwZXIgPSB7XG4gICAgICAgICAgICB2YWx1ZTogZGF0YSxcbiAgICAgICAgICAgIHRpbWVvdXQ6IHVuZGVmaW5lZFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChleHBpcnlUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGRhdGFXcmFwcGVyLnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZSh0aWxlSUQsIGRhdGFXcmFwcGVyKTtcbiAgICAgICAgICAgIH0sIGV4cGlyeVRpbWVvdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kYXRhW2tleV0ucHVzaChkYXRhV3JhcHBlcik7XG4gICAgICAgIHRoaXMub3JkZXIucHVzaChrZXkpO1xuXG4gICAgICAgIGlmICh0aGlzLm9yZGVyLmxlbmd0aCA+IHRoaXMubWF4KSB7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVkRGF0YSA9IHRoaXMuX2dldEFuZFJlbW92ZUJ5S2V5KHRoaXMub3JkZXJbMF0pO1xuICAgICAgICAgICAgaWYgKHJlbW92ZWREYXRhKSB0aGlzLm9uUmVtb3ZlKHJlbW92ZWREYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERldGVybWluZSB3aGV0aGVyIHRoZSB2YWx1ZSBhdHRhY2hlZCB0byBga2V5YCBpcyBwcmVzZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge092ZXJzY2FsZWRUaWxlSUR9IHRpbGVJRCB0aGUga2V5IHRvIGJlIGxvb2tlZC11cFxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSB3aGV0aGVyIHRoZSBjYWNoZSBoYXMgdGhpcyB2YWx1ZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgaGFzKHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGlsZUlELndyYXBwZWQoKS5rZXkgaW4gdGhpcy5kYXRhO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgdmFsdWUgYXR0YWNoZWQgdG8gYSBzcGVjaWZpYyBrZXkgYW5kIHJlbW92ZSBkYXRhIGZyb20gY2FjaGUuXG4gICAgICogSWYgdGhlIGtleSBpcyBub3QgZm91bmQsIHJldHVybnMgYG51bGxgXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge092ZXJzY2FsZWRUaWxlSUR9IHRpbGVJRCB0aGUga2V5IHRvIGxvb2sgdXBcbiAgICAgKiBAcmV0dXJucyB7Kn0gdGhlIGRhdGEsIG9yIG51bGwgaWYgaXQgaXNuJ3QgZm91bmRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGdldEFuZFJlbW92ZSh0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQpOiA/VGlsZSB7XG4gICAgICAgIGlmICghdGhpcy5oYXModGlsZUlEKSkgeyByZXR1cm4gbnVsbDsgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0QW5kUmVtb3ZlQnlLZXkodGlsZUlELndyYXBwZWQoKS5rZXkpO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogR2V0IGFuZCByZW1vdmUgdGhlIHZhbHVlIHdpdGggdGhlIHNwZWNpZmllZCBrZXkuXG4gICAgICovXG4gICAgX2dldEFuZFJlbW92ZUJ5S2V5KGtleTogc3RyaW5nKTogP1RpbGUge1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhW2tleV0uc2hpZnQoKTtcbiAgICAgICAgaWYgKGRhdGEudGltZW91dCkgY2xlYXJUaW1lb3V0KGRhdGEudGltZW91dCk7XG5cbiAgICAgICAgaWYgKHRoaXMuZGF0YVtrZXldLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuZGF0YVtrZXldO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3JkZXIuc3BsaWNlKHRoaXMub3JkZXIuaW5kZXhPZihrZXkpLCAxKTtcblxuICAgICAgICByZXR1cm4gZGF0YS52YWx1ZTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIEdldCB0aGUgdmFsdWUgd2l0aCB0aGUgc3BlY2lmaWVkICh3cmFwcGVkIHRpbGUpIGtleS5cbiAgICAgKi9cbiAgICBnZXRCeUtleShrZXk6IHN0cmluZyk6ID9UaWxlIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YVtrZXldO1xuICAgICAgICByZXR1cm4gZGF0YSA/IGRhdGFbMF0udmFsdWUgOiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgdmFsdWUgYXR0YWNoZWQgdG8gYSBzcGVjaWZpYyBrZXkgd2l0aG91dCByZW1vdmluZyBkYXRhXG4gICAgICogZnJvbSB0aGUgY2FjaGUuIElmIHRoZSBrZXkgaXMgbm90IGZvdW5kLCByZXR1cm5zIGBudWxsYFxuICAgICAqXG4gICAgICogQHBhcmFtIHtPdmVyc2NhbGVkVGlsZUlEfSB0aWxlSUQgdGhlIGtleSB0byBsb29rIHVwXG4gICAgICogQHJldHVybnMgeyp9IHRoZSBkYXRhLCBvciBudWxsIGlmIGl0IGlzbid0IGZvdW5kXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBnZXQodGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEKTogP1RpbGUge1xuICAgICAgICBpZiAoIXRoaXMuaGFzKHRpbGVJRCkpIHsgcmV0dXJuIG51bGw7IH1cblxuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhW3RpbGVJRC53cmFwcGVkKCkua2V5XVswXTtcbiAgICAgICAgcmV0dXJuIGRhdGEudmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGEga2V5L3ZhbHVlIGNvbWJpbmF0aW9uIGZyb20gdGhlIGNhY2hlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtPdmVyc2NhbGVkVGlsZUlEfSB0aWxlSUQgdGhlIGtleSBmb3IgdGhlIHBhaXIgdG8gZGVsZXRlXG4gICAgICogQHBhcmFtIHtUaWxlfSB2YWx1ZSBJZiBhIHZhbHVlIGlzIHByb3ZpZGVkLCByZW1vdmUgdGhhdCBleGFjdCB2ZXJzaW9uIG9mIHRoZSB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyB7VGlsZUNhY2hlfSB0aGlzIGNhY2hlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICByZW1vdmUodGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlELCB2YWx1ZTogP3sgdmFsdWU6IFRpbGUsIHRpbWVvdXQ6ID9UaW1lb3V0SUR9KSB7XG4gICAgICAgIGlmICghdGhpcy5oYXModGlsZUlEKSkgeyByZXR1cm4gdGhpczsgfVxuICAgICAgICBjb25zdCBrZXkgPSB0aWxlSUQud3JhcHBlZCgpLmtleTtcblxuICAgICAgICBjb25zdCBkYXRhSW5kZXggPSB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gMCA6IHRoaXMuZGF0YVtrZXldLmluZGV4T2YodmFsdWUpO1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhW2tleV1bZGF0YUluZGV4XTtcbiAgICAgICAgdGhpcy5kYXRhW2tleV0uc3BsaWNlKGRhdGFJbmRleCwgMSk7XG4gICAgICAgIGlmIChkYXRhLnRpbWVvdXQpIGNsZWFyVGltZW91dChkYXRhLnRpbWVvdXQpO1xuICAgICAgICBpZiAodGhpcy5kYXRhW2tleV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5kYXRhW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vblJlbW92ZShkYXRhLnZhbHVlKTtcbiAgICAgICAgdGhpcy5vcmRlci5zcGxpY2UodGhpcy5vcmRlci5pbmRleE9mKGtleSksIDEpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoYW5nZSB0aGUgbWF4IHNpemUgb2YgdGhlIGNhY2hlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG1heCB0aGUgbWF4IHNpemUgb2YgdGhlIGNhY2hlXG4gICAgICogQHJldHVybnMge1RpbGVDYWNoZX0gdGhpcyBjYWNoZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgc2V0TWF4U2l6ZShtYXg6IG51bWJlcik6IFRpbGVDYWNoZSB7XG4gICAgICAgIHRoaXMubWF4ID0gbWF4O1xuXG4gICAgICAgIHdoaWxlICh0aGlzLm9yZGVyLmxlbmd0aCA+IHRoaXMubWF4KSB7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVkRGF0YSA9IHRoaXMuX2dldEFuZFJlbW92ZUJ5S2V5KHRoaXMub3JkZXJbMF0pO1xuICAgICAgICAgICAgaWYgKHJlbW92ZWREYXRhKSB0aGlzLm9uUmVtb3ZlKHJlbW92ZWREYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBlbnRyaWVzIHRoYXQgZG8gbm90IHBhc3MgYSBmaWx0ZXIgZnVuY3Rpb24uIFVzZWQgZm9yIHJlbW92aW5nXG4gICAgICogc3RhbGUgdGlsZXMgZnJvbSB0aGUgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBmaWx0ZXJGbiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHRpbGUgaXMgZmlsdGVyZWQuIElmIHRoZSBzdXBwbGllZCBmdW5jdGlvbiByZXR1cm5zIGZhbHNlLCB0aGUgdGlsZSB3aWxsIGJlIGZpbHRlcmVkIG91dC5cbiAgICAgKi9cbiAgICBmaWx0ZXIoZmlsdGVyRm46ICh0aWxlOiBUaWxlKSA9PiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IHJlbW92ZWQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZGF0YVtrZXldKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFmaWx0ZXJGbihlbnRyeS52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZC5wdXNoKGVudHJ5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCByIG9mIHJlbW92ZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlKHIudmFsdWUudGlsZUlELCByKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVGlsZUNhY2hlO1xuIiwiLy8gQGZsb3dcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHR5cGUge1N0cnVjdEFycmF5fSBmcm9tICcuLi91dGlsL3N0cnVjdF9hcnJheSc7XG5pbXBvcnQgdHlwZSB7VHJpYW5nbGVJbmRleEFycmF5LCBMaW5lSW5kZXhBcnJheSwgTGluZVN0cmlwSW5kZXhBcnJheX0gZnJvbSAnLi4vZGF0YS9pbmRleF9hcnJheV90eXBlJztcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vZ2wvY29udGV4dCc7XG5cbmNsYXNzIEluZGV4QnVmZmVyIHtcbiAgICBjb250ZXh0OiBDb250ZXh0O1xuICAgIGJ1ZmZlcjogV2ViR0xCdWZmZXI7XG4gICAgZHluYW1pY0RyYXc6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCBhcnJheTogVHJpYW5nbGVJbmRleEFycmF5IHwgTGluZUluZGV4QXJyYXkgfCBMaW5lU3RyaXBJbmRleEFycmF5LCBkeW5hbWljRHJhdz86IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuICAgICAgICB0aGlzLmJ1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgICAgICB0aGlzLmR5bmFtaWNEcmF3ID0gQm9vbGVhbihkeW5hbWljRHJhdyk7XG5cbiAgICAgICAgLy8gVGhlIGJvdW5kIGluZGV4IGJ1ZmZlciBpcyBwYXJ0IG9mIHZlcnRleCBhcnJheSBvYmplY3Qgc3RhdGUuIFdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gbW9kaWZ5IHdoYXRldmVyIFZBTyBoYXBwZW5zIHRvIGJlIGN1cnJlbnRseSBib3VuZCwgc28gbWFrZSBzdXJlIHRoZSBkZWZhdWx0XG4gICAgICAgIC8vIHZlcnRleCBhcnJheSBwcm92aWRlZCBieSB0aGUgY29udGV4dCBpcyBib3VuZCBpbnN0ZWFkLlxuICAgICAgICB0aGlzLmNvbnRleHQudW5iaW5kVkFPKCk7XG5cbiAgICAgICAgY29udGV4dC5iaW5kRWxlbWVudEJ1ZmZlci5zZXQodGhpcy5idWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBhcnJheS5hcnJheUJ1ZmZlciwgdGhpcy5keW5hbWljRHJhdyA/IGdsLkRZTkFNSUNfRFJBVyA6IGdsLlNUQVRJQ19EUkFXKTtcblxuICAgICAgICBpZiAoIXRoaXMuZHluYW1pY0RyYXcpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBhcnJheS5hcnJheUJ1ZmZlcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGJpbmQoKSB7XG4gICAgICAgIHRoaXMuY29udGV4dC5iaW5kRWxlbWVudEJ1ZmZlci5zZXQodGhpcy5idWZmZXIpO1xuICAgIH1cblxuICAgIHVwZGF0ZURhdGEoYXJyYXk6IFN0cnVjdEFycmF5KSB7XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5jb250ZXh0LmdsO1xuICAgICAgICBhc3NlcnQodGhpcy5keW5hbWljRHJhdyk7XG4gICAgICAgIC8vIFRoZSByaWdodCBWQU8gd2lsbCBnZXQgdGhpcyBidWZmZXIgcmUtYm91bmQgbGF0ZXIgaW4gVmVydGV4QXJyYXlPYmplY3QjYmluZFxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzU2MjBcbiAgICAgICAgdGhpcy5jb250ZXh0LnVuYmluZFZBTygpO1xuICAgICAgICB0aGlzLmJpbmQoKTtcbiAgICAgICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgMCwgYXJyYXkuYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5jb250ZXh0LmdsO1xuICAgICAgICBpZiAodGhpcy5idWZmZXIpIHtcbiAgICAgICAgICAgIGdsLmRlbGV0ZUJ1ZmZlcih0aGlzLmJ1ZmZlcik7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5idWZmZXI7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEluZGV4QnVmZmVyO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgdHlwZSB7XG4gICAgU3RydWN0QXJyYXksXG4gICAgU3RydWN0QXJyYXlNZW1iZXJcbn0gZnJvbSAnLi4vdXRpbC9zdHJ1Y3RfYXJyYXknO1xuXG5pbXBvcnQgdHlwZSBQcm9ncmFtIGZyb20gJy4uL3JlbmRlci9wcm9ncmFtJztcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vZ2wvY29udGV4dCc7XG5cbi8qKlxuICogQGVudW0ge3N0cmluZ30gQXR0cmlidXRlVHlwZVxuICogQHByaXZhdGVcbiAqIEByZWFkb25seVxuICovXG5jb25zdCBBdHRyaWJ1dGVUeXBlID0ge1xuICAgIEludDg6ICAgJ0JZVEUnLFxuICAgIFVpbnQ4OiAgJ1VOU0lHTkVEX0JZVEUnLFxuICAgIEludDE2OiAgJ1NIT1JUJyxcbiAgICBVaW50MTY6ICdVTlNJR05FRF9TSE9SVCcsXG4gICAgSW50MzI6ICAnSU5UJyxcbiAgICBVaW50MzI6ICdVTlNJR05FRF9JTlQnLFxuICAgIEZsb2F0MzI6ICdGTE9BVCdcbn07XG5cbi8qKlxuICogVGhlIGBWZXJ0ZXhCdWZmZXJgIGNsYXNzIHR1cm5zIGEgYFN0cnVjdEFycmF5YCBpbnRvIGEgV2ViR0wgYnVmZmVyLiBFYWNoIG1lbWJlciBvZiB0aGUgU3RydWN0QXJyYXknc1xuICogU3RydWN0IHR5cGUgaXMgY29udmVydGVkIHRvIGEgV2ViR0wgYXRyaWJ1dGUuXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBWZXJ0ZXhCdWZmZXIge1xuICAgIGxlbmd0aDogbnVtYmVyO1xuICAgIGF0dHJpYnV0ZXM6ICRSZWFkT25seUFycmF5PFN0cnVjdEFycmF5TWVtYmVyPjtcbiAgICBpdGVtU2l6ZTogbnVtYmVyO1xuICAgIGR5bmFtaWNEcmF3OiA/Ym9vbGVhbjtcbiAgICBjb250ZXh0OiBDb250ZXh0O1xuICAgIGJ1ZmZlcjogV2ViR0xCdWZmZXI7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gZHluYW1pY0RyYXcgV2hldGhlciB0aGlzIGJ1ZmZlciB3aWxsIGJlIHJlcGVhdGVkbHkgdXBkYXRlZC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQsIGFycmF5OiBTdHJ1Y3RBcnJheSwgYXR0cmlidXRlczogJFJlYWRPbmx5QXJyYXk8U3RydWN0QXJyYXlNZW1iZXI+LCBkeW5hbWljRHJhdz86IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5sZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7XG4gICAgICAgIHRoaXMuaXRlbVNpemUgPSBhcnJheS5ieXRlc1BlckVsZW1lbnQ7XG4gICAgICAgIHRoaXMuZHluYW1pY0RyYXcgPSBkeW5hbWljRHJhdztcblxuICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgICAgIHRoaXMuYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgICAgIGNvbnRleHQuYmluZFZlcnRleEJ1ZmZlci5zZXQodGhpcy5idWZmZXIpO1xuICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgYXJyYXkuYXJyYXlCdWZmZXIsIHRoaXMuZHluYW1pY0RyYXcgPyBnbC5EWU5BTUlDX0RSQVcgOiBnbC5TVEFUSUNfRFJBVyk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmR5bmFtaWNEcmF3KSB7XG4gICAgICAgICAgICBkZWxldGUgYXJyYXkuYXJyYXlCdWZmZXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBiaW5kKCkge1xuICAgICAgICB0aGlzLmNvbnRleHQuYmluZFZlcnRleEJ1ZmZlci5zZXQodGhpcy5idWZmZXIpO1xuICAgIH1cblxuICAgIHVwZGF0ZURhdGEoYXJyYXk6IFN0cnVjdEFycmF5KSB7XG4gICAgICAgIGFzc2VydChhcnJheS5sZW5ndGggPT09IHRoaXMubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmNvbnRleHQuZ2w7XG4gICAgICAgIHRoaXMuYmluZCgpO1xuICAgICAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgYXJyYXkuYXJyYXlCdWZmZXIpO1xuICAgIH1cblxuICAgIGVuYWJsZUF0dHJpYnV0ZXMoZ2w6IFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgcHJvZ3JhbTogUHJvZ3JhbTwqPikge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuYXR0cmlidXRlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgY29uc3QgbWVtYmVyID0gdGhpcy5hdHRyaWJ1dGVzW2pdO1xuICAgICAgICAgICAgY29uc3QgYXR0cmliSW5kZXg6IG51bWJlciB8IHZvaWQgPSBwcm9ncmFtLmF0dHJpYnV0ZXNbbWVtYmVyLm5hbWVdO1xuICAgICAgICAgICAgaWYgKGF0dHJpYkluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShhdHRyaWJJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIGF0dHJpYnV0ZSBwb2ludGVycyBpbiBhIFdlYkdMIGNvbnRleHRcbiAgICAgKiBAcGFyYW0gZ2wgVGhlIFdlYkdMIGNvbnRleHRcbiAgICAgKiBAcGFyYW0gcHJvZ3JhbSBUaGUgYWN0aXZlIFdlYkdMIHByb2dyYW1cbiAgICAgKiBAcGFyYW0gdmVydGV4T2Zmc2V0IEluZGV4IG9mIHRoZSBzdGFydGluZyB2ZXJ0ZXggb2YgdGhlIHNlZ21lbnRcbiAgICAgKi9cbiAgICBzZXRWZXJ0ZXhBdHRyaWJQb2ludGVycyhnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0LCBwcm9ncmFtOiBQcm9ncmFtPCo+LCB2ZXJ0ZXhPZmZzZXQ6ID9udW1iZXIpIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmF0dHJpYnV0ZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG1lbWJlciA9IHRoaXMuYXR0cmlidXRlc1tqXTtcbiAgICAgICAgICAgIGNvbnN0IGF0dHJpYkluZGV4OiBudW1iZXIgfCB2b2lkID0gcHJvZ3JhbS5hdHRyaWJ1dGVzW21lbWJlci5uYW1lXTtcblxuICAgICAgICAgICAgaWYgKGF0dHJpYkluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKFxuICAgICAgICAgICAgICAgICAgICBhdHRyaWJJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgbWVtYmVyLmNvbXBvbmVudHMsXG4gICAgICAgICAgICAgICAgICAgIChnbDogYW55KVtBdHRyaWJ1dGVUeXBlW21lbWJlci50eXBlXV0sXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1TaXplLFxuICAgICAgICAgICAgICAgICAgICBtZW1iZXIub2Zmc2V0ICsgKHRoaXMuaXRlbVNpemUgKiAodmVydGV4T2Zmc2V0IHx8IDApKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXN0cm95IHRoZSBHTCBidWZmZXIgYm91bmQgdG8gdGhlIGdpdmVuIFdlYkdMIGNvbnRleHRcbiAgICAgKi9cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuY29udGV4dC5nbDtcbiAgICAgICAgaWYgKHRoaXMuYnVmZmVyKSB7XG4gICAgICAgICAgICBnbC5kZWxldGVCdWZmZXIodGhpcy5idWZmZXIpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuYnVmZmVyO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWZXJ0ZXhCdWZmZXI7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgQ29sb3IgZnJvbSAnLi4vc3R5bGUtc3BlYy91dGlsL2NvbG9yJztcblxuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1xuICAgIEJsZW5kRnVuY1R5cGUsXG4gICAgQmxlbmRFcXVhdGlvblR5cGUsXG4gICAgQ29sb3JNYXNrVHlwZSxcbiAgICBEZXB0aFJhbmdlVHlwZSxcbiAgICBEZXB0aE1hc2tUeXBlLFxuICAgIFN0ZW5jaWxGdW5jVHlwZSxcbiAgICBTdGVuY2lsT3BUeXBlLFxuICAgIERlcHRoRnVuY1R5cGUsXG4gICAgVGV4dHVyZVVuaXRUeXBlLFxuICAgIFZpZXdwb3J0VHlwZSxcbiAgICBDdWxsRmFjZU1vZGVUeXBlLFxuICAgIEZyb250RmFjZVR5cGUsXG59IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZhbHVlPFQ+IHtcbiAgICBjdXJyZW50OiBUO1xuICAgIGRlZmF1bHQ6IFQ7XG4gICAgZGlydHk6IGJvb2xlYW47XG4gICAgZ2V0KCk6IFQ7XG4gICAgc2V0RGVmYXVsdCgpOiB2b2lkO1xuICAgIHNldCh2YWx1ZTogVCk6IHZvaWQ7XG59XG5cbmNsYXNzIEJhc2VWYWx1ZTxUPiBpbXBsZW1lbnRzIFZhbHVlPFQ+IHtcbiAgICBnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0O1xuICAgIGN1cnJlbnQ6IFQ7XG4gICAgZGVmYXVsdDogVDtcbiAgICBkaXJ0eTogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQpIHtcbiAgICAgICAgdGhpcy5nbCA9IGNvbnRleHQuZ2w7XG4gICAgICAgIHRoaXMuZGVmYXVsdCA9IHRoaXMuZ2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLmRlZmF1bHQ7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXQoKTogVCB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnQ7XG4gICAgfVxuICAgIHNldCh2YWx1ZTogVCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAgIC8vIG92ZXJyaWRkZW4gaW4gY2hpbGQgY2xhc3NlcztcbiAgICB9XG5cbiAgICBnZXREZWZhdWx0KCk6IFQge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0OyAvLyBvdmVycmlkZW4gaW4gY2hpbGQgY2xhc3Nlc1xuICAgIH1cbiAgICBzZXREZWZhdWx0KCkge1xuICAgICAgICB0aGlzLnNldCh0aGlzLmRlZmF1bHQpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENsZWFyQ29sb3IgZXh0ZW5kcyBCYXNlVmFsdWU8Q29sb3I+IHtcbiAgICBnZXREZWZhdWx0KCk6IENvbG9yIHtcbiAgICAgICAgcmV0dXJuIENvbG9yLnRyYW5zcGFyZW50O1xuICAgIH1cbiAgICBzZXQodjogQ29sb3IpIHtcbiAgICAgICAgY29uc3QgYyA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgaWYgKHYuciA9PT0gYy5yICYmIHYuZyA9PT0gYy5nICYmIHYuYiA9PT0gYy5iICYmIHYuYSA9PT0gYy5hICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuZ2wuY2xlYXJDb2xvcih2LnIsIHYuZywgdi5iLCB2LmEpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2xlYXJEZXB0aCBleHRlbmRzIEJhc2VWYWx1ZTxudW1iZXI+IHtcbiAgICBnZXREZWZhdWx0KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBzZXQodjogbnVtYmVyKSB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5nbC5jbGVhckRlcHRoKHYpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2xlYXJTdGVuY2lsIGV4dGVuZHMgQmFzZVZhbHVlPG51bWJlcj4ge1xuICAgIGdldERlZmF1bHQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIHNldCh2OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmdsLmNsZWFyU3RlbmNpbCh2KTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbG9yTWFzayBleHRlbmRzIEJhc2VWYWx1ZTxDb2xvck1hc2tUeXBlPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBDb2xvck1hc2tUeXBlIHtcbiAgICAgICAgcmV0dXJuIFt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlXTtcbiAgICB9XG4gICAgc2V0KHY6IENvbG9yTWFza1R5cGUpIHtcbiAgICAgICAgY29uc3QgYyA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgaWYgKHZbMF0gPT09IGNbMF0gJiYgdlsxXSA9PT0gY1sxXSAmJiB2WzJdID09PSBjWzJdICYmIHZbM10gPT09IGNbM10gJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5nbC5jb2xvck1hc2sodlswXSwgdlsxXSwgdlsyXSwgdlszXSk7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEZXB0aE1hc2sgZXh0ZW5kcyBCYXNlVmFsdWU8RGVwdGhNYXNrVHlwZT4ge1xuICAgIGdldERlZmF1bHQoKTogRGVwdGhNYXNrVHlwZSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBzZXQodjogRGVwdGhNYXNrVHlwZSk6IHZvaWQge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuZ2wuZGVwdGhNYXNrKHYpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3RlbmNpbE1hc2sgZXh0ZW5kcyBCYXNlVmFsdWU8bnVtYmVyPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gMHhGRjtcbiAgICB9XG4gICAgc2V0KHY6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuZ2wuc3RlbmNpbE1hc2sodik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdGVuY2lsRnVuYyBleHRlbmRzIEJhc2VWYWx1ZTxTdGVuY2lsRnVuY1R5cGU+IHtcbiAgICBnZXREZWZhdWx0KCk6IFN0ZW5jaWxGdW5jVHlwZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmdW5jOiB0aGlzLmdsLkFMV0FZUyxcbiAgICAgICAgICAgIHJlZjogMCxcbiAgICAgICAgICAgIG1hc2s6IDB4RkZcbiAgICAgICAgfTtcbiAgICB9XG4gICAgc2V0KHY6IFN0ZW5jaWxGdW5jVHlwZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBjID0gdGhpcy5jdXJyZW50O1xuICAgICAgICBpZiAodi5mdW5jID09PSBjLmZ1bmMgJiYgdi5yZWYgPT09IGMucmVmICYmIHYubWFzayA9PT0gYy5tYXNrICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuZ2wuc3RlbmNpbEZ1bmModi5mdW5jLCB2LnJlZiwgdi5tYXNrKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN0ZW5jaWxPcCBleHRlbmRzIEJhc2VWYWx1ZTxTdGVuY2lsT3BUeXBlPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBTdGVuY2lsT3BUeXBlIHtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmdsO1xuICAgICAgICByZXR1cm4gW2dsLktFRVAsIGdsLktFRVAsIGdsLktFRVBdO1xuICAgIH1cbiAgICBzZXQodjogU3RlbmNpbE9wVHlwZSkge1xuICAgICAgICBjb25zdCBjID0gdGhpcy5jdXJyZW50O1xuICAgICAgICBpZiAodlswXSA9PT0gY1swXSAmJiB2WzFdID09PSBjWzFdICYmIHZbMl0gPT09IGNbMl0gJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5nbC5zdGVuY2lsT3AodlswXSwgdlsxXSwgdlsyXSk7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdGVuY2lsVGVzdCBleHRlbmRzIEJhc2VWYWx1ZTxib29sZWFuPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBzZXQodjogYm9vbGVhbikge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgIGdsLmVuYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2wuZGlzYWJsZShnbC5TVEVOQ0lMX1RFU1QpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEZXB0aFJhbmdlIGV4dGVuZHMgQmFzZVZhbHVlPERlcHRoUmFuZ2VUeXBlPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBEZXB0aFJhbmdlVHlwZSB7XG4gICAgICAgIHJldHVybiBbMCwgMV07XG4gICAgfVxuICAgIHNldCh2OiBEZXB0aFJhbmdlVHlwZSkge1xuICAgICAgICBjb25zdCBjID0gdGhpcy5jdXJyZW50O1xuICAgICAgICBpZiAodlswXSA9PT0gY1swXSAmJiB2WzFdID09PSBjWzFdICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuZ2wuZGVwdGhSYW5nZSh2WzBdLCB2WzFdKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERlcHRoVGVzdCBleHRlbmRzIEJhc2VWYWx1ZTxib29sZWFuPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBzZXQodjogYm9vbGVhbikge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgIGdsLmVuYWJsZShnbC5ERVBUSF9URVNUKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdsLmRpc2FibGUoZ2wuREVQVEhfVEVTVCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERlcHRoRnVuYyBleHRlbmRzIEJhc2VWYWx1ZTxEZXB0aEZ1bmNUeXBlPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBEZXB0aEZ1bmNUeXBlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2wuTEVTUztcbiAgICB9XG4gICAgc2V0KHY6IERlcHRoRnVuY1R5cGUpIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmdsLmRlcHRoRnVuYyh2KTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJsZW5kIGV4dGVuZHMgQmFzZVZhbHVlPGJvb2xlYW4+IHtcbiAgICBnZXREZWZhdWx0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHNldCh2OiBib29sZWFuKSB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmdsO1xuICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgZ2wuZW5hYmxlKGdsLkJMRU5EKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdsLmRpc2FibGUoZ2wuQkxFTkQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCbGVuZEZ1bmMgZXh0ZW5kcyBCYXNlVmFsdWU8QmxlbmRGdW5jVHlwZT4ge1xuICAgIGdldERlZmF1bHQoKTogQmxlbmRGdW5jVHlwZSB7XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgcmV0dXJuIFtnbC5PTkUsIGdsLlpFUk9dO1xuICAgIH1cbiAgICBzZXQodjogQmxlbmRGdW5jVHlwZSkge1xuICAgICAgICBjb25zdCBjID0gdGhpcy5jdXJyZW50O1xuICAgICAgICBpZiAodlswXSA9PT0gY1swXSAmJiB2WzFdID09PSBjWzFdICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuZ2wuYmxlbmRGdW5jKHZbMF0sIHZbMV0pO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmxlbmRDb2xvciBleHRlbmRzIEJhc2VWYWx1ZTxDb2xvcj4ge1xuICAgIGdldERlZmF1bHQoKTogQ29sb3Ige1xuICAgICAgICByZXR1cm4gQ29sb3IudHJhbnNwYXJlbnQ7XG4gICAgfVxuICAgIHNldCh2OiBDb2xvcikge1xuICAgICAgICBjb25zdCBjID0gdGhpcy5jdXJyZW50O1xuICAgICAgICBpZiAodi5yID09PSBjLnIgJiYgdi5nID09PSBjLmcgJiYgdi5iID09PSBjLmIgJiYgdi5hID09PSBjLmEgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5nbC5ibGVuZENvbG9yKHYuciwgdi5nLCB2LmIsIHYuYSk7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCbGVuZEVxdWF0aW9uIGV4dGVuZHMgQmFzZVZhbHVlPEJsZW5kRXF1YXRpb25UeXBlPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBCbGVuZEVxdWF0aW9uVHlwZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdsLkZVTkNfQUREO1xuICAgIH1cbiAgICBzZXQodjogQmxlbmRFcXVhdGlvblR5cGUpIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmdsLmJsZW5kRXF1YXRpb24odik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDdWxsRmFjZSBleHRlbmRzIEJhc2VWYWx1ZTxib29sZWFuPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBzZXQodjogYm9vbGVhbikge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgIGdsLmVuYWJsZShnbC5DVUxMX0ZBQ0UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2wuZGlzYWJsZShnbC5DVUxMX0ZBQ0UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDdWxsRmFjZVNpZGUgZXh0ZW5kcyBCYXNlVmFsdWU8Q3VsbEZhY2VNb2RlVHlwZT4ge1xuICAgIGdldERlZmF1bHQoKTogQ3VsbEZhY2VNb2RlVHlwZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdsLkJBQ0s7XG4gICAgfVxuICAgIHNldCh2OiBDdWxsRmFjZU1vZGVUeXBlKSB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5nbC5jdWxsRmFjZSh2KTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEZyb250RmFjZSBleHRlbmRzIEJhc2VWYWx1ZTxGcm9udEZhY2VUeXBlPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBGcm9udEZhY2VUeXBlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2wuQ0NXO1xuICAgIH1cbiAgICBzZXQodjogRnJvbnRGYWNlVHlwZSkge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIHRoaXMuZ2wuZnJvbnRGYWNlKHYpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUHJvZ3JhbSBleHRlbmRzIEJhc2VWYWx1ZTw/V2ViR0xQcm9ncmFtPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBXZWJHTFByb2dyYW0ge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgc2V0KHY6ID9XZWJHTFByb2dyYW0pIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmdsLnVzZVByb2dyYW0odik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBY3RpdmVUZXh0dXJlVW5pdCBleHRlbmRzIEJhc2VWYWx1ZTxUZXh0dXJlVW5pdFR5cGU+IHtcbiAgICBnZXREZWZhdWx0KCk6IFRleHR1cmVVbml0VHlwZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdsLlRFWFRVUkUwO1xuICAgIH1cbiAgICBzZXQodjogVGV4dHVyZVVuaXRUeXBlKSB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5nbC5hY3RpdmVUZXh0dXJlKHYpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVmlld3BvcnQgZXh0ZW5kcyBCYXNlVmFsdWU8Vmlld3BvcnRUeXBlPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBWaWV3cG9ydFR5cGUge1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuZ2w7XG4gICAgICAgIHJldHVybiBbMCwgMCwgZ2wuZHJhd2luZ0J1ZmZlcldpZHRoLCBnbC5kcmF3aW5nQnVmZmVySGVpZ2h0XTtcbiAgICB9XG4gICAgc2V0KHY6IFZpZXdwb3J0VHlwZSkge1xuICAgICAgICBjb25zdCBjID0gdGhpcy5jdXJyZW50O1xuICAgICAgICBpZiAodlswXSA9PT0gY1swXSAmJiB2WzFdID09PSBjWzFdICYmIHZbMl0gPT09IGNbMl0gJiYgdlszXSA9PT0gY1szXSAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICB0aGlzLmdsLnZpZXdwb3J0KHZbMF0sIHZbMV0sIHZbMl0sIHZbM10pO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmluZEZyYW1lYnVmZmVyIGV4dGVuZHMgQmFzZVZhbHVlPD9XZWJHTEZyYW1lYnVmZmVyPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBXZWJHTEZyYW1lYnVmZmVyIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHNldCh2OiA/V2ViR0xGcmFtZWJ1ZmZlcikge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCB2KTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJpbmRSZW5kZXJidWZmZXIgZXh0ZW5kcyBCYXNlVmFsdWU8P1dlYkdMUmVuZGVyYnVmZmVyPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBXZWJHTFJlbmRlcmJ1ZmZlciB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBzZXQodjogP1dlYkdMUmVuZGVyYnVmZmVyKSB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmdsO1xuICAgICAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgdik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCaW5kVGV4dHVyZSBleHRlbmRzIEJhc2VWYWx1ZTw/V2ViR0xUZXh0dXJlPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBXZWJHTFRleHR1cmUge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgc2V0KHY6ID9XZWJHTFRleHR1cmUpIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuZ2w7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHYpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmluZFZlcnRleEJ1ZmZlciBleHRlbmRzIEJhc2VWYWx1ZTw/V2ViR0xCdWZmZXI+IHtcbiAgICBnZXREZWZhdWx0KCk6IFdlYkdMQnVmZmVyIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHNldCh2OiA/V2ViR0xCdWZmZXIpIHtcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuY3VycmVudCAmJiAhdGhpcy5kaXJ0eSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuZ2w7XG4gICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB2KTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJpbmRFbGVtZW50QnVmZmVyIGV4dGVuZHMgQmFzZVZhbHVlPD9XZWJHTEJ1ZmZlcj4ge1xuICAgIGdldERlZmF1bHQoKTogV2ViR0xCdWZmZXIge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgc2V0KHY6ID9XZWJHTEJ1ZmZlcikge1xuICAgICAgICAvLyBBbHdheXMgcmViaW5kXG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgdik7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCaW5kVmVydGV4QXJyYXlPRVMgZXh0ZW5kcyBCYXNlVmFsdWU8YW55PiB7XG4gICAgdmFvOiBhbnk7XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgIHN1cGVyKGNvbnRleHQpO1xuICAgICAgICB0aGlzLnZhbyA9IGNvbnRleHQuZXh0VmVydGV4QXJyYXlPYmplY3Q7XG4gICAgfVxuICAgIGdldERlZmF1bHQoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHNldCh2OiBhbnkpIHtcbiAgICAgICAgaWYgKCF0aGlzLnZhbyB8fCB2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy52YW8uYmluZFZlcnRleEFycmF5T0VTKHYpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGl4ZWxTdG9yZVVucGFjayBleHRlbmRzIEJhc2VWYWx1ZTxudW1iZXI+IHtcbiAgICBnZXREZWZhdWx0KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiA0O1xuICAgIH1cbiAgICBzZXQodjogbnVtYmVyKSB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmdsO1xuICAgICAgICBnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfQUxJR05NRU5ULCB2KTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhIGV4dGVuZHMgQmFzZVZhbHVlPGJvb2xlYW4+IHtcbiAgICBnZXREZWZhdWx0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHNldCh2OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmdsO1xuICAgICAgICBnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsICh2OiBhbnkpKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdjtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBpeGVsU3RvcmVVbnBhY2tGbGlwWSBleHRlbmRzIEJhc2VWYWx1ZTxib29sZWFuPiB7XG4gICAgZ2V0RGVmYXVsdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBzZXQodjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodiA9PT0gdGhpcy5jdXJyZW50ICYmICF0aGlzLmRpcnR5KSByZXR1cm47XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX0ZMSVBfWV9XRUJHTCwgKHY6IGFueSkpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuXG5jbGFzcyBGcmFtZWJ1ZmZlckF0dGFjaG1lbnQ8VD4gZXh0ZW5kcyBCYXNlVmFsdWU8P1Q+IHtcbiAgICBwYXJlbnQ6IFdlYkdMRnJhbWVidWZmZXI7XG4gICAgY29udGV4dDogQ29udGV4dDtcblxuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQsIHBhcmVudDogV2ViR0xGcmFtZWJ1ZmZlcikge1xuICAgICAgICBzdXBlcihjb250ZXh0KTtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgfVxuICAgIGdldERlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbG9yQXR0YWNobWVudCBleHRlbmRzIEZyYW1lYnVmZmVyQXR0YWNobWVudDxXZWJHTFRleHR1cmU+IHtcbiAgICBzZXREaXJ0eSgpIHtcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgfVxuICAgIHNldCh2OiA/V2ViR0xUZXh0dXJlKTogdm9pZCB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5jb250ZXh0LmJpbmRGcmFtZWJ1ZmZlci5zZXQodGhpcy5wYXJlbnQpO1xuICAgICAgICAvLyBub3RlOiBpdCdzIHBvc3NpYmxlIHRvIGF0dGFjaCBhIHJlbmRlcmJ1ZmZlciB0byB0aGUgY29sb3JcbiAgICAgICAgLy8gYXR0YWNobWVudCBwb2ludCwgYnV0IHRodXMgZmFyIE1CR0wgb25seSB1c2VzIHRleHR1cmVzIGZvciBjb2xvclxuICAgICAgICBjb25zdCBnbCA9IHRoaXMuZ2w7XG4gICAgICAgIGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV8yRCwgdiwgMCk7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IHY7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEZXB0aEF0dGFjaG1lbnQgZXh0ZW5kcyBGcmFtZWJ1ZmZlckF0dGFjaG1lbnQ8V2ViR0xSZW5kZXJidWZmZXI+IHtcbiAgICBzZXQodjogP1dlYkdMUmVuZGVyYnVmZmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh2ID09PSB0aGlzLmN1cnJlbnQgJiYgIXRoaXMuZGlydHkpIHJldHVybjtcbiAgICAgICAgdGhpcy5jb250ZXh0LmJpbmRGcmFtZWJ1ZmZlci5zZXQodGhpcy5wYXJlbnQpO1xuICAgICAgICAvLyBub3RlOiBpdCdzIHBvc3NpYmxlIHRvIGF0dGFjaCBhIHRleHR1cmUgdG8gdGhlIGRlcHRoIGF0dGFjaG1lbnRcbiAgICAgICAgLy8gcG9pbnQsIGJ1dCB0aHVzIGZhciBNQkdMIG9ubHkgdXNlcyByZW5kZXJidWZmZXJzIGZvciBkZXB0aFxuICAgICAgICBjb25zdCBnbCA9IHRoaXMuZ2w7XG4gICAgICAgIGdsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBnbC5ERVBUSF9BVFRBQ0hNRU5ULCBnbC5SRU5ERVJCVUZGRVIsIHYpO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB2O1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcbmltcG9ydCB7Q29sb3JBdHRhY2htZW50LCBEZXB0aEF0dGFjaG1lbnR9IGZyb20gJy4vdmFsdWUnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4vY29udGV4dCc7XG5cbmNsYXNzIEZyYW1lYnVmZmVyIHtcbiAgICBjb250ZXh0OiBDb250ZXh0O1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgaGVpZ2h0OiBudW1iZXI7XG4gICAgZnJhbWVidWZmZXI6IFdlYkdMRnJhbWVidWZmZXI7XG4gICAgY29sb3JBdHRhY2htZW50OiBDb2xvckF0dGFjaG1lbnQ7XG4gICAgZGVwdGhBdHRhY2htZW50OiBEZXB0aEF0dGFjaG1lbnQ7XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgaGFzRGVwdGg6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuICAgICAgICBjb25zdCBmYm8gPSB0aGlzLmZyYW1lYnVmZmVyID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTtcblxuICAgICAgICB0aGlzLmNvbG9yQXR0YWNobWVudCA9IG5ldyBDb2xvckF0dGFjaG1lbnQoY29udGV4dCwgZmJvKTtcbiAgICAgICAgaWYgKGhhc0RlcHRoKSB7XG4gICAgICAgICAgICB0aGlzLmRlcHRoQXR0YWNobWVudCA9IG5ldyBEZXB0aEF0dGFjaG1lbnQoY29udGV4dCwgZmJvKTtcbiAgICAgICAgfVxuICAgICAgICBhc3NlcnQoZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgPT09IGdsLkZSQU1FQlVGRkVSX0NPTVBMRVRFKTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuY29udGV4dC5nbDtcblxuICAgICAgICBjb25zdCB0ZXh0dXJlID0gdGhpcy5jb2xvckF0dGFjaG1lbnQuZ2V0KCk7XG4gICAgICAgIGlmICh0ZXh0dXJlKSBnbC5kZWxldGVUZXh0dXJlKHRleHR1cmUpO1xuXG4gICAgICAgIGlmICh0aGlzLmRlcHRoQXR0YWNobWVudCkge1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyYnVmZmVyID0gdGhpcy5kZXB0aEF0dGFjaG1lbnQuZ2V0KCk7XG4gICAgICAgICAgICBpZiAocmVuZGVyYnVmZmVyKSBnbC5kZWxldGVSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGdsLmRlbGV0ZUZyYW1lYnVmZmVyKHRoaXMuZnJhbWVidWZmZXIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRnJhbWVidWZmZXI7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IHR5cGUge0RlcHRoRnVuY1R5cGUsIERlcHRoTWFza1R5cGUsIERlcHRoUmFuZ2VUeXBlfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgQUxXQVlTID0gMHgwMjA3O1xuXG5jbGFzcyBEZXB0aE1vZGUge1xuICAgIGZ1bmM6IERlcHRoRnVuY1R5cGU7XG4gICAgbWFzazogRGVwdGhNYXNrVHlwZTtcbiAgICByYW5nZTogRGVwdGhSYW5nZVR5cGU7XG5cbiAgICAvLyBEZXB0aE1hc2sgZW51bXNcbiAgICBzdGF0aWMgUmVhZE9ubHk6IGJvb2xlYW47XG4gICAgc3RhdGljIFJlYWRXcml0ZTogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKGRlcHRoRnVuYzogRGVwdGhGdW5jVHlwZSwgZGVwdGhNYXNrOiBEZXB0aE1hc2tUeXBlLCBkZXB0aFJhbmdlOiBEZXB0aFJhbmdlVHlwZSkge1xuICAgICAgICB0aGlzLmZ1bmMgPSBkZXB0aEZ1bmM7XG4gICAgICAgIHRoaXMubWFzayA9IGRlcHRoTWFzaztcbiAgICAgICAgdGhpcy5yYW5nZSA9IGRlcHRoUmFuZ2U7XG4gICAgfVxuXG4gICAgc3RhdGljIGRpc2FibGVkOiAkUmVhZE9ubHk8RGVwdGhNb2RlPjtcbn1cblxuRGVwdGhNb2RlLlJlYWRPbmx5ID0gZmFsc2U7XG5EZXB0aE1vZGUuUmVhZFdyaXRlID0gdHJ1ZTtcblxuRGVwdGhNb2RlLmRpc2FibGVkID0gbmV3IERlcHRoTW9kZShBTFdBWVMsIERlcHRoTW9kZS5SZWFkT25seSwgWzAsIDFdKTtcblxuZXhwb3J0IGRlZmF1bHQgRGVwdGhNb2RlO1xuIiwiLy8gQGZsb3dcbmltcG9ydCB0eXBlIHtTdGVuY2lsT3BDb25zdGFudCwgU3RlbmNpbFRlc3R9IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBBTFdBWVMgPSAweDAyMDc7XG5jb25zdCBLRUVQID0gMHgxRTAwO1xuXG5jbGFzcyBTdGVuY2lsTW9kZSB7XG4gICAgdGVzdDogU3RlbmNpbFRlc3Q7XG4gICAgcmVmOiBudW1iZXI7XG4gICAgbWFzazogbnVtYmVyO1xuICAgIGZhaWw6IFN0ZW5jaWxPcENvbnN0YW50O1xuICAgIGRlcHRoRmFpbDogU3RlbmNpbE9wQ29uc3RhbnQ7XG4gICAgcGFzczogU3RlbmNpbE9wQ29uc3RhbnQ7XG5cbiAgICBjb25zdHJ1Y3Rvcih0ZXN0OiBTdGVuY2lsVGVzdCwgcmVmOiBudW1iZXIsIG1hc2s6IG51bWJlciwgZmFpbDogU3RlbmNpbE9wQ29uc3RhbnQsXG4gICAgICAgIGRlcHRoRmFpbDogU3RlbmNpbE9wQ29uc3RhbnQsIHBhc3M6IFN0ZW5jaWxPcENvbnN0YW50KSB7XG4gICAgICAgIHRoaXMudGVzdCA9IHRlc3Q7XG4gICAgICAgIHRoaXMucmVmID0gcmVmO1xuICAgICAgICB0aGlzLm1hc2sgPSBtYXNrO1xuICAgICAgICB0aGlzLmZhaWwgPSBmYWlsO1xuICAgICAgICB0aGlzLmRlcHRoRmFpbCA9IGRlcHRoRmFpbDtcbiAgICAgICAgdGhpcy5wYXNzID0gcGFzcztcbiAgICB9XG5cbiAgICBzdGF0aWMgZGlzYWJsZWQ6ICRSZWFkT25seTxTdGVuY2lsTW9kZT47XG59XG5cblN0ZW5jaWxNb2RlLmRpc2FibGVkID0gbmV3IFN0ZW5jaWxNb2RlKHtmdW5jOiBBTFdBWVMsIG1hc2s6IDB9LCAwLCAwLCBLRUVQLCBLRUVQLCBLRUVQKTtcblxuZXhwb3J0IGRlZmF1bHQgU3RlbmNpbE1vZGU7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IENvbG9yIGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5cbmltcG9ydCB0eXBlIHtCbGVuZEZ1bmNUeXBlLCBDb2xvck1hc2tUeXBlfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgWkVSTyA9IDB4MDAwMDtcbmNvbnN0IE9ORSA9IDB4MDAwMTtcbmNvbnN0IE9ORV9NSU5VU19TUkNfQUxQSEEgPSAweDAzMDM7XG5cbmNsYXNzIENvbG9yTW9kZSB7XG4gICAgYmxlbmRGdW5jdGlvbjogQmxlbmRGdW5jVHlwZTtcbiAgICBibGVuZENvbG9yOiBDb2xvcjtcbiAgICBtYXNrOiBDb2xvck1hc2tUeXBlO1xuXG4gICAgY29uc3RydWN0b3IoYmxlbmRGdW5jdGlvbjogQmxlbmRGdW5jVHlwZSwgYmxlbmRDb2xvcjogQ29sb3IsIG1hc2s6IENvbG9yTWFza1R5cGUpIHtcbiAgICAgICAgdGhpcy5ibGVuZEZ1bmN0aW9uID0gYmxlbmRGdW5jdGlvbjtcbiAgICAgICAgdGhpcy5ibGVuZENvbG9yID0gYmxlbmRDb2xvcjtcbiAgICAgICAgdGhpcy5tYXNrID0gbWFzaztcbiAgICB9XG5cbiAgICBzdGF0aWMgUmVwbGFjZTogQmxlbmRGdW5jVHlwZTtcblxuICAgIHN0YXRpYyBkaXNhYmxlZDogJFJlYWRPbmx5PENvbG9yTW9kZT47XG4gICAgc3RhdGljIHVuYmxlbmRlZDogJFJlYWRPbmx5PENvbG9yTW9kZT47XG4gICAgc3RhdGljIGFscGhhQmxlbmRlZDogJFJlYWRPbmx5PENvbG9yTW9kZT47XG59XG5cbkNvbG9yTW9kZS5SZXBsYWNlID0gW09ORSwgWkVST107XG5cbkNvbG9yTW9kZS5kaXNhYmxlZCA9IG5ldyBDb2xvck1vZGUoQ29sb3JNb2RlLlJlcGxhY2UsIENvbG9yLnRyYW5zcGFyZW50LCBbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdKTtcbkNvbG9yTW9kZS51bmJsZW5kZWQgPSBuZXcgQ29sb3JNb2RlKENvbG9yTW9kZS5SZXBsYWNlLCBDb2xvci50cmFuc3BhcmVudCwgW3RydWUsIHRydWUsIHRydWUsIHRydWVdKTtcbkNvbG9yTW9kZS5hbHBoYUJsZW5kZWQgPSBuZXcgQ29sb3JNb2RlKFtPTkUsIE9ORV9NSU5VU19TUkNfQUxQSEFdLCBDb2xvci50cmFuc3BhcmVudCwgW3RydWUsIHRydWUsIHRydWUsIHRydWVdKTtcblxuZXhwb3J0IGRlZmF1bHQgQ29sb3JNb2RlO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHR5cGUge0N1bGxGYWNlTW9kZVR5cGUsIEZyb250RmFjZVR5cGV9IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBCQUNLID0gMHgwNDA1O1xuY29uc3QgQ0NXID0gMHgwOTAxO1xuXG5jbGFzcyBDdWxsRmFjZU1vZGUge1xuICAgIGVuYWJsZTogYm9vbGVhbjtcbiAgICBtb2RlOiBDdWxsRmFjZU1vZGVUeXBlO1xuICAgIGZyb250RmFjZTogRnJvbnRGYWNlVHlwZTtcblxuICAgIGNvbnN0cnVjdG9yKGVuYWJsZTogYm9vbGVhbiwgbW9kZTogQ3VsbEZhY2VNb2RlVHlwZSwgZnJvbnRGYWNlOiBGcm9udEZhY2VUeXBlKSB7XG4gICAgICAgIHRoaXMuZW5hYmxlID0gZW5hYmxlO1xuICAgICAgICB0aGlzLm1vZGUgPSBtb2RlO1xuICAgICAgICB0aGlzLmZyb250RmFjZSA9IGZyb250RmFjZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZGlzYWJsZWQ6ICRSZWFkT25seTxDdWxsRmFjZU1vZGU+O1xuICAgIHN0YXRpYyBiYWNrQ0NXOiAkUmVhZE9ubHk8Q3VsbEZhY2VNb2RlPjtcbn1cblxuQ3VsbEZhY2VNb2RlLmRpc2FibGVkID0gbmV3IEN1bGxGYWNlTW9kZShmYWxzZSwgQkFDSywgQ0NXKTtcbkN1bGxGYWNlTW9kZS5iYWNrQ0NXID0gbmV3IEN1bGxGYWNlTW9kZSh0cnVlLCBCQUNLLCBDQ1cpO1xuXG5leHBvcnQgZGVmYXVsdCBDdWxsRmFjZU1vZGU7XG4iLCIvLyBAZmxvd1xuaW1wb3J0IEluZGV4QnVmZmVyIGZyb20gJy4vaW5kZXhfYnVmZmVyJztcblxuaW1wb3J0IFZlcnRleEJ1ZmZlciBmcm9tICcuL3ZlcnRleF9idWZmZXInO1xuaW1wb3J0IEZyYW1lYnVmZmVyIGZyb20gJy4vZnJhbWVidWZmZXInO1xuaW1wb3J0IERlcHRoTW9kZSBmcm9tICcuL2RlcHRoX21vZGUnO1xuaW1wb3J0IFN0ZW5jaWxNb2RlIGZyb20gJy4vc3RlbmNpbF9tb2RlJztcbmltcG9ydCBDb2xvck1vZGUgZnJvbSAnLi9jb2xvcl9tb2RlJztcbmltcG9ydCBDdWxsRmFjZU1vZGUgZnJvbSAnLi9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQge2RlZXBFcXVhbH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7Q2xlYXJDb2xvciwgQ2xlYXJEZXB0aCwgQ2xlYXJTdGVuY2lsLCBDb2xvck1hc2ssIERlcHRoTWFzaywgU3RlbmNpbE1hc2ssIFN0ZW5jaWxGdW5jLCBTdGVuY2lsT3AsIFN0ZW5jaWxUZXN0LCBEZXB0aFJhbmdlLCBEZXB0aFRlc3QsIERlcHRoRnVuYywgQmxlbmQsIEJsZW5kRnVuYywgQmxlbmRDb2xvciwgQmxlbmRFcXVhdGlvbiwgQ3VsbEZhY2UsIEN1bGxGYWNlU2lkZSwgRnJvbnRGYWNlLCBQcm9ncmFtLCBBY3RpdmVUZXh0dXJlVW5pdCwgVmlld3BvcnQsIEJpbmRGcmFtZWJ1ZmZlciwgQmluZFJlbmRlcmJ1ZmZlciwgQmluZFRleHR1cmUsIEJpbmRWZXJ0ZXhCdWZmZXIsIEJpbmRFbGVtZW50QnVmZmVyLCBCaW5kVmVydGV4QXJyYXlPRVMsIFBpeGVsU3RvcmVVbnBhY2ssIFBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhLCBQaXhlbFN0b3JlVW5wYWNrRmxpcFl9IGZyb20gJy4vdmFsdWUnO1xuXG5pbXBvcnQgdHlwZSB7VHJpYW5nbGVJbmRleEFycmF5LCBMaW5lSW5kZXhBcnJheSwgTGluZVN0cmlwSW5kZXhBcnJheX0gZnJvbSAnLi4vZGF0YS9pbmRleF9hcnJheV90eXBlJztcbmltcG9ydCB0eXBlIHtcbiAgICBTdHJ1Y3RBcnJheSxcbiAgICBTdHJ1Y3RBcnJheU1lbWJlclxufSBmcm9tICcuLi91dGlsL3N0cnVjdF9hcnJheSc7XG5pbXBvcnQgdHlwZSBDb2xvciBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuXG50eXBlIENsZWFyQXJncyA9IHtcbiAgICBjb2xvcj86IENvbG9yLFxuICAgIGRlcHRoPzogbnVtYmVyLFxuICAgIHN0ZW5jaWw/OiBudW1iZXJcbn07XG5cbmNsYXNzIENvbnRleHQge1xuICAgIGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ7XG4gICAgZXh0VmVydGV4QXJyYXlPYmplY3Q6IGFueTtcbiAgICBjdXJyZW50TnVtQXR0cmlidXRlczogP251bWJlcjtcblxuICAgIGNsZWFyQ29sb3I6IENsZWFyQ29sb3I7XG4gICAgY2xlYXJEZXB0aDogQ2xlYXJEZXB0aDtcbiAgICBjbGVhclN0ZW5jaWw6IENsZWFyU3RlbmNpbDtcbiAgICBjb2xvck1hc2s6IENvbG9yTWFzaztcbiAgICBkZXB0aE1hc2s6IERlcHRoTWFzaztcbiAgICBzdGVuY2lsTWFzazogU3RlbmNpbE1hc2s7XG4gICAgc3RlbmNpbEZ1bmM6IFN0ZW5jaWxGdW5jO1xuICAgIHN0ZW5jaWxPcDogU3RlbmNpbE9wO1xuICAgIHN0ZW5jaWxUZXN0OiBTdGVuY2lsVGVzdDtcbiAgICBkZXB0aFJhbmdlOiBEZXB0aFJhbmdlO1xuICAgIGRlcHRoVGVzdDogRGVwdGhUZXN0O1xuICAgIGRlcHRoRnVuYzogRGVwdGhGdW5jO1xuICAgIGJsZW5kOiBCbGVuZDtcbiAgICBibGVuZEZ1bmM6IEJsZW5kRnVuYztcbiAgICBibGVuZENvbG9yOiBCbGVuZENvbG9yO1xuICAgIGJsZW5kRXF1YXRpb246IEJsZW5kRXF1YXRpb247XG4gICAgY3VsbEZhY2U6IEN1bGxGYWNlO1xuICAgIGN1bGxGYWNlU2lkZTogQ3VsbEZhY2VTaWRlO1xuICAgIGZyb250RmFjZTogRnJvbnRGYWNlO1xuICAgIHByb2dyYW06IFByb2dyYW07XG4gICAgYWN0aXZlVGV4dHVyZTogQWN0aXZlVGV4dHVyZVVuaXQ7XG4gICAgdmlld3BvcnQ6IFZpZXdwb3J0O1xuICAgIGJpbmRGcmFtZWJ1ZmZlcjogQmluZEZyYW1lYnVmZmVyO1xuICAgIGJpbmRSZW5kZXJidWZmZXI6IEJpbmRSZW5kZXJidWZmZXI7XG4gICAgYmluZFRleHR1cmU6IEJpbmRUZXh0dXJlO1xuICAgIGJpbmRWZXJ0ZXhCdWZmZXI6IEJpbmRWZXJ0ZXhCdWZmZXI7XG4gICAgYmluZEVsZW1lbnRCdWZmZXI6IEJpbmRFbGVtZW50QnVmZmVyO1xuICAgIGJpbmRWZXJ0ZXhBcnJheU9FUzogQmluZFZlcnRleEFycmF5T0VTO1xuICAgIHBpeGVsU3RvcmVVbnBhY2s6IFBpeGVsU3RvcmVVbnBhY2s7XG4gICAgcGl4ZWxTdG9yZVVucGFja1ByZW11bHRpcGx5QWxwaGE6IFBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhO1xuICAgIHBpeGVsU3RvcmVVbnBhY2tGbGlwWTogUGl4ZWxTdG9yZVVucGFja0ZsaXBZO1xuXG4gICAgZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljOiBhbnk7XG4gICAgZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljTWF4OiBhbnk7XG4gICAgZXh0VGV4dHVyZUhhbGZGbG9hdDogYW55O1xuICAgIGV4dFJlbmRlclRvVGV4dHVyZUhhbGZGbG9hdDogYW55O1xuICAgIGV4dFRpbWVyUXVlcnk6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKGdsOiBXZWJHTFJlbmRlcmluZ0NvbnRleHQpIHtcbiAgICAgICAgdGhpcy5nbCA9IGdsO1xuICAgICAgICB0aGlzLmV4dFZlcnRleEFycmF5T2JqZWN0ID0gdGhpcy5nbC5nZXRFeHRlbnNpb24oJ09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Jyk7XG5cbiAgICAgICAgdGhpcy5jbGVhckNvbG9yID0gbmV3IENsZWFyQ29sb3IodGhpcyk7XG4gICAgICAgIHRoaXMuY2xlYXJEZXB0aCA9IG5ldyBDbGVhckRlcHRoKHRoaXMpO1xuICAgICAgICB0aGlzLmNsZWFyU3RlbmNpbCA9IG5ldyBDbGVhclN0ZW5jaWwodGhpcyk7XG4gICAgICAgIHRoaXMuY29sb3JNYXNrID0gbmV3IENvbG9yTWFzayh0aGlzKTtcbiAgICAgICAgdGhpcy5kZXB0aE1hc2sgPSBuZXcgRGVwdGhNYXNrKHRoaXMpO1xuICAgICAgICB0aGlzLnN0ZW5jaWxNYXNrID0gbmV3IFN0ZW5jaWxNYXNrKHRoaXMpO1xuICAgICAgICB0aGlzLnN0ZW5jaWxGdW5jID0gbmV3IFN0ZW5jaWxGdW5jKHRoaXMpO1xuICAgICAgICB0aGlzLnN0ZW5jaWxPcCA9IG5ldyBTdGVuY2lsT3AodGhpcyk7XG4gICAgICAgIHRoaXMuc3RlbmNpbFRlc3QgPSBuZXcgU3RlbmNpbFRlc3QodGhpcyk7XG4gICAgICAgIHRoaXMuZGVwdGhSYW5nZSA9IG5ldyBEZXB0aFJhbmdlKHRoaXMpO1xuICAgICAgICB0aGlzLmRlcHRoVGVzdCA9IG5ldyBEZXB0aFRlc3QodGhpcyk7XG4gICAgICAgIHRoaXMuZGVwdGhGdW5jID0gbmV3IERlcHRoRnVuYyh0aGlzKTtcbiAgICAgICAgdGhpcy5ibGVuZCA9IG5ldyBCbGVuZCh0aGlzKTtcbiAgICAgICAgdGhpcy5ibGVuZEZ1bmMgPSBuZXcgQmxlbmRGdW5jKHRoaXMpO1xuICAgICAgICB0aGlzLmJsZW5kQ29sb3IgPSBuZXcgQmxlbmRDb2xvcih0aGlzKTtcbiAgICAgICAgdGhpcy5ibGVuZEVxdWF0aW9uID0gbmV3IEJsZW5kRXF1YXRpb24odGhpcyk7XG4gICAgICAgIHRoaXMuY3VsbEZhY2UgPSBuZXcgQ3VsbEZhY2UodGhpcyk7XG4gICAgICAgIHRoaXMuY3VsbEZhY2VTaWRlID0gbmV3IEN1bGxGYWNlU2lkZSh0aGlzKTtcbiAgICAgICAgdGhpcy5mcm9udEZhY2UgPSBuZXcgRnJvbnRGYWNlKHRoaXMpO1xuICAgICAgICB0aGlzLnByb2dyYW0gPSBuZXcgUHJvZ3JhbSh0aGlzKTtcbiAgICAgICAgdGhpcy5hY3RpdmVUZXh0dXJlID0gbmV3IEFjdGl2ZVRleHR1cmVVbml0KHRoaXMpO1xuICAgICAgICB0aGlzLnZpZXdwb3J0ID0gbmV3IFZpZXdwb3J0KHRoaXMpO1xuICAgICAgICB0aGlzLmJpbmRGcmFtZWJ1ZmZlciA9IG5ldyBCaW5kRnJhbWVidWZmZXIodGhpcyk7XG4gICAgICAgIHRoaXMuYmluZFJlbmRlcmJ1ZmZlciA9IG5ldyBCaW5kUmVuZGVyYnVmZmVyKHRoaXMpO1xuICAgICAgICB0aGlzLmJpbmRUZXh0dXJlID0gbmV3IEJpbmRUZXh0dXJlKHRoaXMpO1xuICAgICAgICB0aGlzLmJpbmRWZXJ0ZXhCdWZmZXIgPSBuZXcgQmluZFZlcnRleEJ1ZmZlcih0aGlzKTtcbiAgICAgICAgdGhpcy5iaW5kRWxlbWVudEJ1ZmZlciA9IG5ldyBCaW5kRWxlbWVudEJ1ZmZlcih0aGlzKTtcbiAgICAgICAgdGhpcy5iaW5kVmVydGV4QXJyYXlPRVMgPSB0aGlzLmV4dFZlcnRleEFycmF5T2JqZWN0ICYmIG5ldyBCaW5kVmVydGV4QXJyYXlPRVModGhpcyk7XG4gICAgICAgIHRoaXMucGl4ZWxTdG9yZVVucGFjayA9IG5ldyBQaXhlbFN0b3JlVW5wYWNrKHRoaXMpO1xuICAgICAgICB0aGlzLnBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhID0gbmV3IFBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhKHRoaXMpO1xuICAgICAgICB0aGlzLnBpeGVsU3RvcmVVbnBhY2tGbGlwWSA9IG5ldyBQaXhlbFN0b3JlVW5wYWNrRmxpcFkodGhpcyk7XG5cbiAgICAgICAgdGhpcy5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMgPSAoXG4gICAgICAgICAgICBnbC5nZXRFeHRlbnNpb24oJ0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYycpIHx8XG4gICAgICAgICAgICBnbC5nZXRFeHRlbnNpb24oJ01PWl9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMnKSB8fFxuICAgICAgICAgICAgZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJLSVRfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJylcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRoaXMuZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKSB7XG4gICAgICAgICAgICB0aGlzLmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpY01heCA9IGdsLmdldFBhcmFtZXRlcih0aGlzLmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5NQVhfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5leHRUZXh0dXJlSGFsZkZsb2F0ID0gZ2wuZ2V0RXh0ZW5zaW9uKCdPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Jyk7XG4gICAgICAgIGlmICh0aGlzLmV4dFRleHR1cmVIYWxmRmxvYXQpIHtcbiAgICAgICAgICAgIGdsLmdldEV4dGVuc2lvbignT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXInKTtcbiAgICAgICAgICAgIHRoaXMuZXh0UmVuZGVyVG9UZXh0dXJlSGFsZkZsb2F0ID0gZ2wuZ2V0RXh0ZW5zaW9uKCdFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZXh0VGltZXJRdWVyeSA9IGdsLmdldEV4dGVuc2lvbignRVhUX2Rpc2pvaW50X3RpbWVyX3F1ZXJ5Jyk7XG4gICAgfVxuXG4gICAgc2V0RGVmYXVsdCgpIHtcbiAgICAgICAgdGhpcy51bmJpbmRWQU8oKTtcblxuICAgICAgICB0aGlzLmNsZWFyQ29sb3Iuc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmNsZWFyRGVwdGguc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmNsZWFyU3RlbmNpbC5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuY29sb3JNYXNrLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5kZXB0aE1hc2suc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnN0ZW5jaWxNYXNrLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5zdGVuY2lsRnVuYy5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuc3RlbmNpbE9wLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5zdGVuY2lsVGVzdC5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuZGVwdGhSYW5nZS5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuZGVwdGhUZXN0LnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5kZXB0aEZ1bmMuc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmJsZW5kLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5ibGVuZEZ1bmMuc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmJsZW5kQ29sb3Iuc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmJsZW5kRXF1YXRpb24uc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmN1bGxGYWNlLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5jdWxsRmFjZVNpZGUuc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmZyb250RmFjZS5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMucHJvZ3JhbS5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuYWN0aXZlVGV4dHVyZS5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuYmluZEZyYW1lYnVmZmVyLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5waXhlbFN0b3JlVW5wYWNrLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5waXhlbFN0b3JlVW5wYWNrUHJlbXVsdGlwbHlBbHBoYS5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMucGl4ZWxTdG9yZVVucGFja0ZsaXBZLnNldERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBzZXREaXJ0eSgpIHtcbiAgICAgICAgdGhpcy5jbGVhckNvbG9yLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jbGVhckRlcHRoLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jbGVhclN0ZW5jaWwuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmNvbG9yTWFzay5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuZGVwdGhNYXNrLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdGVuY2lsTWFzay5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RlbmNpbEZ1bmMuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0ZW5jaWxPcC5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RlbmNpbFRlc3QuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmRlcHRoUmFuZ2UuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmRlcHRoVGVzdC5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuZGVwdGhGdW5jLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5ibGVuZC5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuYmxlbmRGdW5jLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5ibGVuZENvbG9yLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5ibGVuZEVxdWF0aW9uLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jdWxsRmFjZS5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMuY3VsbEZhY2VTaWRlLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5mcm9udEZhY2UuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLnByb2dyYW0uZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmFjdGl2ZVRleHR1cmUuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLnZpZXdwb3J0LmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5iaW5kRnJhbWVidWZmZXIuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmJpbmRSZW5kZXJidWZmZXIuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmJpbmRUZXh0dXJlLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5iaW5kVmVydGV4QnVmZmVyLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5iaW5kRWxlbWVudEJ1ZmZlci5kaXJ0eSA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLmV4dFZlcnRleEFycmF5T2JqZWN0KSB7XG4gICAgICAgICAgICB0aGlzLmJpbmRWZXJ0ZXhBcnJheU9FUy5kaXJ0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5waXhlbFN0b3JlVW5wYWNrLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5waXhlbFN0b3JlVW5wYWNrUHJlbXVsdGlwbHlBbHBoYS5kaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMucGl4ZWxTdG9yZVVucGFja0ZsaXBZLmRpcnR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjcmVhdGVJbmRleEJ1ZmZlcihhcnJheTogVHJpYW5nbGVJbmRleEFycmF5IHwgTGluZUluZGV4QXJyYXkgfCBMaW5lU3RyaXBJbmRleEFycmF5LCBkeW5hbWljRHJhdz86IGJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJbmRleEJ1ZmZlcih0aGlzLCBhcnJheSwgZHluYW1pY0RyYXcpO1xuICAgIH1cblxuICAgIGNyZWF0ZVZlcnRleEJ1ZmZlcihhcnJheTogU3RydWN0QXJyYXksIGF0dHJpYnV0ZXM6ICRSZWFkT25seUFycmF5PFN0cnVjdEFycmF5TWVtYmVyPiwgZHluYW1pY0RyYXc/OiBib29sZWFuKSB7XG4gICAgICAgIHJldHVybiBuZXcgVmVydGV4QnVmZmVyKHRoaXMsIGFycmF5LCBhdHRyaWJ1dGVzLCBkeW5hbWljRHJhdyk7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyYnVmZmVyKHN0b3JhZ2VGb3JtYXQ6IG51bWJlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmdsO1xuXG4gICAgICAgIGNvbnN0IHJibyA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpO1xuICAgICAgICB0aGlzLmJpbmRSZW5kZXJidWZmZXIuc2V0KHJibyk7XG4gICAgICAgIGdsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wuUkVOREVSQlVGRkVSLCBzdG9yYWdlRm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5iaW5kUmVuZGVyYnVmZmVyLnNldChudWxsKTtcblxuICAgICAgICByZXR1cm4gcmJvO1xuICAgIH1cblxuICAgIGNyZWF0ZUZyYW1lYnVmZmVyKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBoYXNEZXB0aDogYm9vbGVhbikge1xuICAgICAgICByZXR1cm4gbmV3IEZyYW1lYnVmZmVyKHRoaXMsIHdpZHRoLCBoZWlnaHQsIGhhc0RlcHRoKTtcbiAgICB9XG5cbiAgICBjbGVhcih7Y29sb3IsIGRlcHRofTogQ2xlYXJBcmdzKSB7XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5nbDtcbiAgICAgICAgbGV0IG1hc2sgPSAwO1xuXG4gICAgICAgIGlmIChjb2xvcikge1xuICAgICAgICAgICAgbWFzayB8PSBnbC5DT0xPUl9CVUZGRVJfQklUO1xuICAgICAgICAgICAgdGhpcy5jbGVhckNvbG9yLnNldChjb2xvcik7XG4gICAgICAgICAgICB0aGlzLmNvbG9yTWFzay5zZXQoW3RydWUsIHRydWUsIHRydWUsIHRydWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgZGVwdGggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBtYXNrIHw9IGdsLkRFUFRIX0JVRkZFUl9CSVQ7XG5cbiAgICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIHBsYXRmb3JtcyB3aGVyZSBjbGVhckRlcHRoIGRvZXNuJ3Qgc2VlbSB0byB3b3JrXG4gICAgICAgICAgICAvLyB3aXRob3V0IHJlc2V0aW5nIHRoZSBkZXB0aFJhbmdlLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzM0MzdcbiAgICAgICAgICAgIHRoaXMuZGVwdGhSYW5nZS5zZXQoWzAsIDFdKTtcblxuICAgICAgICAgICAgdGhpcy5jbGVhckRlcHRoLnNldChkZXB0aCk7XG4gICAgICAgICAgICB0aGlzLmRlcHRoTWFzay5zZXQodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZWUgbm90ZSBpbiBQYWludGVyI2NsZWFyU3RlbmNpbDogaW1wbGVtZW50IHRoaXMgdGhlIGVhc3kgd2F5IG9uY2UgR1BVIGJ1Zy93b3JrYXJvdW5kIGlzIGZpeGVkIHVwc3RyZWFtXG4gICAgICAgIC8vIGlmICh0eXBlb2Ygc3RlbmNpbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgLy8gICAgIG1hc2sgfD0gZ2wuU1RFTkNJTF9CVUZGRVJfQklUO1xuICAgICAgICAvLyAgICAgdGhpcy5jbGVhclN0ZW5jaWwuc2V0KHN0ZW5jaWwpO1xuICAgICAgICAvLyAgICAgdGhpcy5zdGVuY2lsTWFzay5zZXQoMHhGRik7XG4gICAgICAgIC8vIH1cblxuICAgICAgICBnbC5jbGVhcihtYXNrKTtcbiAgICB9XG5cbiAgICBzZXRDdWxsRmFjZShjdWxsRmFjZU1vZGU6ICRSZWFkT25seTxDdWxsRmFjZU1vZGU+KSB7XG4gICAgICAgIGlmIChjdWxsRmFjZU1vZGUuZW5hYmxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhpcy5jdWxsRmFjZS5zZXQoZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdWxsRmFjZS5zZXQodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmN1bGxGYWNlU2lkZS5zZXQoY3VsbEZhY2VNb2RlLm1vZGUpO1xuICAgICAgICAgICAgdGhpcy5mcm9udEZhY2Uuc2V0KGN1bGxGYWNlTW9kZS5mcm9udEZhY2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0RGVwdGhNb2RlKGRlcHRoTW9kZTogJFJlYWRPbmx5PERlcHRoTW9kZT4pIHtcbiAgICAgICAgaWYgKGRlcHRoTW9kZS5mdW5jID09PSB0aGlzLmdsLkFMV0FZUyAmJiAhZGVwdGhNb2RlLm1hc2spIHtcbiAgICAgICAgICAgIHRoaXMuZGVwdGhUZXN0LnNldChmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlcHRoVGVzdC5zZXQodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmRlcHRoRnVuYy5zZXQoZGVwdGhNb2RlLmZ1bmMpO1xuICAgICAgICAgICAgdGhpcy5kZXB0aE1hc2suc2V0KGRlcHRoTW9kZS5tYXNrKTtcbiAgICAgICAgICAgIHRoaXMuZGVwdGhSYW5nZS5zZXQoZGVwdGhNb2RlLnJhbmdlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldFN0ZW5jaWxNb2RlKHN0ZW5jaWxNb2RlOiAkUmVhZE9ubHk8U3RlbmNpbE1vZGU+KSB7XG4gICAgICAgIGlmIChzdGVuY2lsTW9kZS50ZXN0LmZ1bmMgPT09IHRoaXMuZ2wuQUxXQVlTICYmICFzdGVuY2lsTW9kZS5tYXNrKSB7XG4gICAgICAgICAgICB0aGlzLnN0ZW5jaWxUZXN0LnNldChmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0ZW5jaWxUZXN0LnNldCh0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuc3RlbmNpbE1hc2suc2V0KHN0ZW5jaWxNb2RlLm1hc2spO1xuICAgICAgICAgICAgdGhpcy5zdGVuY2lsT3Auc2V0KFtzdGVuY2lsTW9kZS5mYWlsLCBzdGVuY2lsTW9kZS5kZXB0aEZhaWwsIHN0ZW5jaWxNb2RlLnBhc3NdKTtcbiAgICAgICAgICAgIHRoaXMuc3RlbmNpbEZ1bmMuc2V0KHtcbiAgICAgICAgICAgICAgICBmdW5jOiBzdGVuY2lsTW9kZS50ZXN0LmZ1bmMsXG4gICAgICAgICAgICAgICAgcmVmOiBzdGVuY2lsTW9kZS5yZWYsXG4gICAgICAgICAgICAgICAgbWFzazogc3RlbmNpbE1vZGUudGVzdC5tYXNrXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldENvbG9yTW9kZShjb2xvck1vZGU6ICRSZWFkT25seTxDb2xvck1vZGU+KSB7XG4gICAgICAgIGlmIChkZWVwRXF1YWwoY29sb3JNb2RlLmJsZW5kRnVuY3Rpb24sIENvbG9yTW9kZS5SZXBsYWNlKSkge1xuICAgICAgICAgICAgdGhpcy5ibGVuZC5zZXQoZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ibGVuZC5zZXQodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmJsZW5kRnVuYy5zZXQoY29sb3JNb2RlLmJsZW5kRnVuY3Rpb24pO1xuICAgICAgICAgICAgdGhpcy5ibGVuZENvbG9yLnNldChjb2xvck1vZGUuYmxlbmRDb2xvcik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbG9yTWFzay5zZXQoY29sb3JNb2RlLm1hc2spO1xuICAgIH1cblxuICAgIHVuYmluZFZBTygpIHtcbiAgICAgICAgLy8gVW5iaW5kaW5nIHRoZSBWQU8gcHJldmVudHMgb3RoZXIgdGhpbmdzIChjdXN0b20gbGF5ZXJzLCBuZXcgYnVmZmVyIGNyZWF0aW9uKSBmcm9tXG4gICAgICAgIC8vIHVuaW50ZW50aW9uYWxseSBjaGFuZ2luZyB0aGUgc3RhdGUgb2YgdGhlIGxhc3QgVkFPIHVzZWQuXG4gICAgICAgIGlmICh0aGlzLmV4dFZlcnRleEFycmF5T2JqZWN0KSB7XG4gICAgICAgICAgICB0aGlzLmJpbmRWZXJ0ZXhBcnJheU9FUy5zZXQobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbnRleHQ7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2NyZWF0ZSBhcyBjcmVhdGVTb3VyY2V9IGZyb20gJy4vc291cmNlJztcblxuaW1wb3J0IFRpbGUgZnJvbSAnLi90aWxlJztcbmltcG9ydCB7RXZlbnQsIEVycm9yRXZlbnQsIEV2ZW50ZWR9IGZyb20gJy4uL3V0aWwvZXZlbnRlZCc7XG5pbXBvcnQgVGlsZUNhY2hlIGZyb20gJy4vdGlsZV9jYWNoZSc7XG5pbXBvcnQgTWVyY2F0b3JDb29yZGluYXRlIGZyb20gJy4uL2dlby9tZXJjYXRvcl9jb29yZGluYXRlJztcbmltcG9ydCB7a2V5c0RpZmZlcmVuY2UsIHZhbHVlc30gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi4vZGF0YS9leHRlbnQnO1xuaW1wb3J0IENvbnRleHQgZnJvbSAnLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgYnJvd3NlciBmcm9tICcuLi91dGlsL2Jyb3dzZXInO1xuaW1wb3J0IHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuL3RpbGVfaWQnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IFNvdXJjZUZlYXR1cmVTdGF0ZSBmcm9tICcuL3NvdXJjZV9zdGF0ZSc7XG5cbmltcG9ydCB0eXBlIHtTb3VyY2V9IGZyb20gJy4vc291cmNlJztcbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi91aS9tYXAnO1xuaW1wb3J0IHR5cGUgU3R5bGUgZnJvbSAnLi4vc3R5bGUvc3R5bGUnO1xuaW1wb3J0IHR5cGUgRGlzcGF0Y2hlciBmcm9tICcuLi91dGlsL2Rpc3BhdGNoZXInO1xuaW1wb3J0IHR5cGUgVHJhbnNmb3JtIGZyb20gJy4uL2dlby90cmFuc2Zvcm0nO1xuaW1wb3J0IHR5cGUge1RpbGVTdGF0ZX0gZnJvbSAnLi90aWxlJztcbmltcG9ydCB0eXBlIHtDYWxsYmFja30gZnJvbSAnLi4vdHlwZXMvY2FsbGJhY2snO1xuaW1wb3J0IHR5cGUge1NvdXJjZVNwZWNpZmljYXRpb259IGZyb20gJy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG4vKipcbiAqIGBTb3VyY2VDYWNoZWAgaXMgcmVzcG9uc2libGUgZm9yXG4gKlxuICogIC0gY3JlYXRpbmcgYW4gaW5zdGFuY2Ugb2YgYFNvdXJjZWBcbiAqICAtIGZvcndhcmRpbmcgZXZlbnRzIGZyb20gYFNvdXJjZWBcbiAqICAtIGNhY2hpbmcgdGlsZXMgbG9hZGVkIGZyb20gYW4gaW5zdGFuY2Ugb2YgYFNvdXJjZWBcbiAqICAtIGxvYWRpbmcgdGhlIHRpbGVzIG5lZWRlZCB0byByZW5kZXIgYSBnaXZlbiB2aWV3cG9ydFxuICogIC0gdW5sb2FkaW5nIHRoZSBjYWNoZWQgdGlsZXMgbm90IG5lZWRlZCB0byByZW5kZXIgYSBnaXZlbiB2aWV3cG9ydFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFNvdXJjZUNhY2hlIGV4dGVuZHMgRXZlbnRlZCB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBkaXNwYXRjaGVyOiBEaXNwYXRjaGVyO1xuICAgIG1hcDogTWFwO1xuICAgIHN0eWxlOiBTdHlsZTtcblxuICAgIF9zb3VyY2U6IFNvdXJjZTtcbiAgICBfc291cmNlTG9hZGVkOiBib29sZWFuO1xuICAgIF9zb3VyY2VFcnJvcmVkOiBib29sZWFuO1xuICAgIF90aWxlczoge1tfOiBzdHJpbmddOiBUaWxlfTtcbiAgICBfcHJldkxuZzogbnVtYmVyIHwgdm9pZDtcbiAgICBfY2FjaGU6IFRpbGVDYWNoZTtcbiAgICBfdGltZXJzOiB7W186IGFueV06IFRpbWVvdXRJRH07XG4gICAgX2NhY2hlVGltZXJzOiB7W186IGFueV06IFRpbWVvdXRJRH07XG4gICAgX21heFRpbGVDYWNoZVNpemU6ID9udW1iZXI7XG4gICAgX3BhdXNlZDogYm9vbGVhbjtcbiAgICBfc2hvdWxkUmVsb2FkT25SZXN1bWU6IGJvb2xlYW47XG4gICAgX2NvdmVyZWRUaWxlczoge1tfOiBzdHJpbmddOiBib29sZWFufTtcbiAgICB0cmFuc2Zvcm06IFRyYW5zZm9ybTtcbiAgICBfaXNJZFJlbmRlcmFibGU6IChpZDogc3RyaW5nLCBzeW1ib2xMYXllcj86IGJvb2xlYW4pID0+IGJvb2xlYW47XG4gICAgdXNlZDogYm9vbGVhbjtcbiAgICBfc3RhdGU6IFNvdXJjZUZlYXR1cmVTdGF0ZTtcbiAgICBfbG9hZGVkUGFyZW50VGlsZXM6IHtbXzogc3RyaW5nXTogP1RpbGV9O1xuXG4gICAgc3RhdGljIG1heFVuZGVyem9vbWluZzogbnVtYmVyO1xuICAgIHN0YXRpYyBtYXhPdmVyem9vbWluZzogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IoaWQ6IHN0cmluZywgb3B0aW9uczogU291cmNlU3BlY2lmaWNhdGlvbiwgZGlzcGF0Y2hlcjogRGlzcGF0Y2hlcikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmlkID0gaWQ7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlciA9IGRpc3BhdGNoZXI7XG5cbiAgICAgICAgdGhpcy5vbignZGF0YScsIChlKSA9PiB7XG4gICAgICAgICAgICAvLyB0aGlzLl9zb3VyY2VMb2FkZWQgc2lnbmlmaWVzIHRoYXQgdGhlIFRpbGVKU09OIGlzIGxvYWRlZCBpZiBhcHBsaWNhYmxlLlxuICAgICAgICAgICAgLy8gaWYgdGhlIHNvdXJjZSB0eXBlIGRvZXMgbm90IGNvbWUgd2l0aCBhIFRpbGVKU09OLCB0aGUgZmxhZyBzaWduaWZpZXMgdGhlXG4gICAgICAgICAgICAvLyBzb3VyY2UgZGF0YSBoYXMgbG9hZGVkIChpLmUgZ2VvanNvbiBoYXMgYmVlbiB0aWxlZCBvbiB0aGUgd29ya2VyIGFuZCBpcyByZWFkeSlcbiAgICAgICAgICAgIGlmIChlLmRhdGFUeXBlID09PSAnc291cmNlJyAmJiBlLnNvdXJjZURhdGFUeXBlID09PSAnbWV0YWRhdGEnKSB0aGlzLl9zb3VyY2VMb2FkZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAvLyBmb3Igc291cmNlcyB3aXRoIG11dGFibGUgZGF0YSwgdGhpcyBldmVudCBmaXJlcyB3aGVuIHRoZSB1bmRlcmx5aW5nIGRhdGFcbiAgICAgICAgICAgIC8vIHRvIGEgc291cmNlIGlzIGNoYW5nZWQuIChpLmUuIEdlb0pTT05Tb3VyY2Ujc2V0RGF0YSBhbmQgSW1hZ2VTb3VyY2Ujc2VyQ29vcmRpbmF0ZXMpXG4gICAgICAgICAgICBpZiAodGhpcy5fc291cmNlTG9hZGVkICYmICF0aGlzLl9wYXVzZWQgJiYgZS5kYXRhVHlwZSA9PT0gXCJzb3VyY2VcIiAmJiBlLnNvdXJjZURhdGFUeXBlID09PSAnY29udGVudCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRyYW5zZm9ybSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLnRyYW5zZm9ybSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm9uKCdlcnJvcicsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZUVycm9yZWQgPSB0cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9zb3VyY2UgPSBjcmVhdGVTb3VyY2UoaWQsIG9wdGlvbnMsIGRpc3BhdGNoZXIsIHRoaXMpO1xuXG4gICAgICAgIHRoaXMuX3RpbGVzID0ge307XG4gICAgICAgIHRoaXMuX2NhY2hlID0gbmV3IFRpbGVDYWNoZSgwLCB0aGlzLl91bmxvYWRUaWxlLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLl90aW1lcnMgPSB7fTtcbiAgICAgICAgdGhpcy5fY2FjaGVUaW1lcnMgPSB7fTtcbiAgICAgICAgdGhpcy5fbWF4VGlsZUNhY2hlU2l6ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuX2xvYWRlZFBhcmVudFRpbGVzID0ge307XG5cbiAgICAgICAgdGhpcy5fY292ZXJlZFRpbGVzID0ge307XG4gICAgICAgIHRoaXMuX3N0YXRlID0gbmV3IFNvdXJjZUZlYXR1cmVTdGF0ZSgpO1xuICAgIH1cblxuICAgIG9uQWRkKG1hcDogTWFwKSB7XG4gICAgICAgIHRoaXMubWFwID0gbWFwO1xuICAgICAgICB0aGlzLl9tYXhUaWxlQ2FjaGVTaXplID0gbWFwID8gbWFwLl9tYXhUaWxlQ2FjaGVTaXplIDogbnVsbDtcbiAgICAgICAgaWYgKHRoaXMuX3NvdXJjZSAmJiB0aGlzLl9zb3VyY2Uub25BZGQpIHtcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5vbkFkZChtYXApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25SZW1vdmUobWFwOiBNYXApIHtcbiAgICAgICAgaWYgKHRoaXMuX3NvdXJjZSAmJiB0aGlzLl9zb3VyY2Uub25SZW1vdmUpIHtcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5vblJlbW92ZShtYXApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRydWUgaWYgbm8gdGlsZSBkYXRhIGlzIHBlbmRpbmcsIHRpbGVzIHdpbGwgbm90IGNoYW5nZSB1bmxlc3NcbiAgICAgKiBhbiBhZGRpdGlvbmFsIEFQSSBjYWxsIGlzIHJlY2VpdmVkLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgbG9hZGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5fc291cmNlRXJyb3JlZCkgeyByZXR1cm4gdHJ1ZTsgfVxuICAgICAgICBpZiAoIXRoaXMuX3NvdXJjZUxvYWRlZCkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgICAgaWYgKCF0aGlzLl9zb3VyY2UubG9hZGVkKCkpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICAgIGZvciAoY29uc3QgdCBpbiB0aGlzLl90aWxlcykge1xuICAgICAgICAgICAgY29uc3QgdGlsZSA9IHRoaXMuX3RpbGVzW3RdO1xuICAgICAgICAgICAgaWYgKHRpbGUuc3RhdGUgIT09ICdsb2FkZWQnICYmIHRpbGUuc3RhdGUgIT09ICdlcnJvcmVkJylcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZ2V0U291cmNlKCk6IFNvdXJjZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2U7XG4gICAgfVxuXG4gICAgcGF1c2UoKSB7XG4gICAgICAgIHRoaXMuX3BhdXNlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcmVzdW1lKCkge1xuICAgICAgICBpZiAoIXRoaXMuX3BhdXNlZCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBzaG91bGRSZWxvYWQgPSB0aGlzLl9zaG91bGRSZWxvYWRPblJlc3VtZTtcbiAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3Nob3VsZFJlbG9hZE9uUmVzdW1lID0gZmFsc2U7XG4gICAgICAgIGlmIChzaG91bGRSZWxvYWQpIHRoaXMucmVsb2FkKCk7XG4gICAgICAgIGlmICh0aGlzLnRyYW5zZm9ybSkgdGhpcy51cGRhdGUodGhpcy50cmFuc2Zvcm0pO1xuICAgIH1cblxuICAgIF9sb2FkVGlsZSh0aWxlOiBUaWxlLCBjYWxsYmFjazogQ2FsbGJhY2s8dm9pZD4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZS5sb2FkVGlsZSh0aWxlLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgX3VubG9hZFRpbGUodGlsZTogVGlsZSkge1xuICAgICAgICBpZiAodGhpcy5fc291cmNlLnVubG9hZFRpbGUpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlLnVubG9hZFRpbGUodGlsZSwgKCkgPT4ge30pO1xuICAgIH1cblxuICAgIF9hYm9ydFRpbGUodGlsZTogVGlsZSkge1xuICAgICAgICBpZiAodGhpcy5fc291cmNlLmFib3J0VGlsZSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2UuYWJvcnRUaWxlKHRpbGUsICgpID0+IHt9KTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2Uuc2VyaWFsaXplKCk7XG4gICAgfVxuXG4gICAgcHJlcGFyZShjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICAgIGlmICAodGhpcy5fc291cmNlLnByZXBhcmUpIHtcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5wcmVwYXJlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zdGF0ZS5jb2FsZXNjZUNoYW5nZXModGhpcy5fdGlsZXMsIHRoaXMubWFwID8gdGhpcy5tYXAucGFpbnRlciA6IG51bGwpO1xuICAgICAgICBmb3IgKGNvbnN0IGkgaW4gdGhpcy5fdGlsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbGUgPSB0aGlzLl90aWxlc1tpXTtcbiAgICAgICAgICAgIHRpbGUudXBsb2FkKGNvbnRleHQpO1xuICAgICAgICAgICAgdGlsZS5wcmVwYXJlKHRoaXMubWFwLnN0eWxlLmltYWdlTWFuYWdlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYWxsIHRpbGUgaWRzIG9yZGVyZWQgd2l0aCB6LW9yZGVyLCBhbmQgY2FzdCB0byBudW1iZXJzXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBnZXRJZHMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiAodmFsdWVzKHRoaXMuX3RpbGVzKTogYW55KS5tYXAoKHRpbGU6IFRpbGUpID0+IHRpbGUudGlsZUlEKS5zb3J0KGNvbXBhcmVUaWxlSWQpLm1hcChpZCA9PiBpZC5rZXkpO1xuICAgIH1cblxuICAgIGdldFJlbmRlcmFibGVJZHMoc3ltYm9sTGF5ZXI/OiBib29sZWFuKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IHJlbmRlcmFibGVzOiBBcnJheTxUaWxlPiA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuX3RpbGVzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5faXNJZFJlbmRlcmFibGUoaWQsIHN5bWJvbExheWVyKSkgcmVuZGVyYWJsZXMucHVzaCh0aGlzLl90aWxlc1tpZF0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzeW1ib2xMYXllcikge1xuICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmFibGVzLnNvcnQoKGFfOiBUaWxlLCBiXzogVGlsZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGEgPSBhXy50aWxlSUQ7XG4gICAgICAgICAgICAgICAgY29uc3QgYiA9IGJfLnRpbGVJRDtcbiAgICAgICAgICAgICAgICBjb25zdCByb3RhdGVkQSA9IChuZXcgUG9pbnQoYS5jYW5vbmljYWwueCwgYS5jYW5vbmljYWwueSkpLl9yb3RhdGUodGhpcy50cmFuc2Zvcm0uYW5nbGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvdGF0ZWRCID0gKG5ldyBQb2ludChiLmNhbm9uaWNhbC54LCBiLmNhbm9uaWNhbC55KSkuX3JvdGF0ZSh0aGlzLnRyYW5zZm9ybS5hbmdsZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEub3ZlcnNjYWxlZFogLSBiLm92ZXJzY2FsZWRaIHx8IHJvdGF0ZWRCLnkgLSByb3RhdGVkQS55IHx8IHJvdGF0ZWRCLnggLSByb3RhdGVkQS54O1xuICAgICAgICAgICAgfSkubWFwKHRpbGUgPT4gdGlsZS50aWxlSUQua2V5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVuZGVyYWJsZXMubWFwKHRpbGUgPT4gdGlsZS50aWxlSUQpLnNvcnQoY29tcGFyZVRpbGVJZCkubWFwKGlkID0+IGlkLmtleSk7XG4gICAgfVxuXG4gICAgaGFzUmVuZGVyYWJsZVBhcmVudCh0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQpIHtcbiAgICAgICAgY29uc3QgcGFyZW50VGlsZSA9IHRoaXMuZmluZExvYWRlZFBhcmVudCh0aWxlSUQsIDApO1xuICAgICAgICBpZiAocGFyZW50VGlsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzSWRSZW5kZXJhYmxlKHBhcmVudFRpbGUudGlsZUlELmtleSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIF9pc0lkUmVuZGVyYWJsZShpZDogc3RyaW5nLCBzeW1ib2xMYXllcj86IGJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RpbGVzW2lkXSAmJiB0aGlzLl90aWxlc1tpZF0uaGFzRGF0YSgpICYmXG4gICAgICAgICAgICAhdGhpcy5fY292ZXJlZFRpbGVzW2lkXSAmJiAoc3ltYm9sTGF5ZXIgfHwgIXRoaXMuX3RpbGVzW2lkXS5ob2xkaW5nRm9yRmFkZSgpKTtcbiAgICB9XG5cbiAgICByZWxvYWQoKSB7XG4gICAgICAgIGlmICh0aGlzLl9wYXVzZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3Nob3VsZFJlbG9hZE9uUmVzdW1lID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NhY2hlLnJlc2V0KCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBpIGluIHRoaXMuX3RpbGVzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdGlsZXNbaV0uc3RhdGUgIT09IFwiZXJyb3JlZFwiKSB0aGlzLl9yZWxvYWRUaWxlKGksICdyZWxvYWRpbmcnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9yZWxvYWRUaWxlKGlkOiBzdHJpbmcsIHN0YXRlOiBUaWxlU3RhdGUpIHtcbiAgICAgICAgY29uc3QgdGlsZSA9IHRoaXMuX3RpbGVzW2lkXTtcblxuICAgICAgICAvLyB0aGlzIHBvdGVudGlhbGx5IGRvZXMgbm90IGFkZHJlc3MgYWxsIHVuZGVybHlpbmdcbiAgICAgICAgLy8gaXNzdWVzIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy80MjUyXG4gICAgICAgIC8vIC0gaGFyZCB0byB0ZWxsIHdpdGhvdXQgcmVwcm8gc3RlcHNcbiAgICAgICAgaWYgKCF0aWxlKSByZXR1cm47XG5cbiAgICAgICAgLy8gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBcImxvYWRpbmdcIiB0aWxlcyBhbmQgXCJyZWxvYWRpbmdcIiBvciBcImV4cGlyZWRcIlxuICAgICAgICAvLyB0aWxlcyBpcyB0aGF0IFwicmVsb2FkaW5nXCIvXCJleHBpcmVkXCIgdGlsZXMgYXJlIFwicmVuZGVyYWJsZVwiLlxuICAgICAgICAvLyBUaGVyZWZvcmUsIGEgXCJsb2FkaW5nXCIgdGlsZSBjYW5ub3QgYmVjb21lIGEgXCJyZWxvYWRpbmdcIiB0aWxlIHdpdGhvdXRcbiAgICAgICAgLy8gZmlyc3QgYmVjb21pbmcgYSBcImxvYWRlZFwiIHRpbGUuXG4gICAgICAgIGlmICh0aWxlLnN0YXRlICE9PSAnbG9hZGluZycpIHtcbiAgICAgICAgICAgIHRpbGUuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvYWRUaWxlKHRpbGUsIHRoaXMuX3RpbGVMb2FkZWQuYmluZCh0aGlzLCB0aWxlLCBpZCwgc3RhdGUpKTtcbiAgICB9XG5cbiAgICBfdGlsZUxvYWRlZCh0aWxlOiBUaWxlLCBpZDogc3RyaW5nLCBwcmV2aW91c1N0YXRlOiBUaWxlU3RhdGUsIGVycjogP0Vycm9yKSB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHRpbGUuc3RhdGUgPSAnZXJyb3JlZCc7XG4gICAgICAgICAgICBpZiAoKGVycjogYW55KS5zdGF0dXMgIT09IDQwNCkgdGhpcy5fc291cmNlLmZpcmUobmV3IEVycm9yRXZlbnQoZXJyLCB7dGlsZX0pKTtcbiAgICAgICAgICAgIC8vIGNvbnRpbnVlIHRvIHRyeSBsb2FkaW5nIHBhcmVudC9jaGlsZHJlbiB0aWxlcyBpZiBhIHRpbGUgZG9lc24ndCBleGlzdCAoNDA0KVxuICAgICAgICAgICAgZWxzZSB0aGlzLnVwZGF0ZSh0aGlzLnRyYW5zZm9ybSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aWxlLnRpbWVBZGRlZCA9IGJyb3dzZXIubm93KCk7XG4gICAgICAgIGlmIChwcmV2aW91c1N0YXRlID09PSAnZXhwaXJlZCcpIHRpbGUucmVmcmVzaGVkVXBvbkV4cGlyYXRpb24gPSB0cnVlO1xuICAgICAgICB0aGlzLl9zZXRUaWxlUmVsb2FkVGltZXIoaWQsIHRpbGUpO1xuICAgICAgICBpZiAodGhpcy5nZXRTb3VyY2UoKS50eXBlID09PSAncmFzdGVyLWRlbScgJiYgdGlsZS5kZW0pIHRoaXMuX2JhY2tmaWxsREVNKHRpbGUpO1xuICAgICAgICB0aGlzLl9zdGF0ZS5pbml0aWFsaXplVGlsZVN0YXRlKHRpbGUsIHRoaXMubWFwID8gdGhpcy5tYXAucGFpbnRlciA6IG51bGwpO1xuXG4gICAgICAgIHRoaXMuX3NvdXJjZS5maXJlKG5ldyBFdmVudCgnZGF0YScsIHtkYXRhVHlwZTogJ3NvdXJjZScsIHRpbGUsIGNvb3JkOiB0aWxlLnRpbGVJRH0pKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEZvciByYXN0ZXIgdGVycmFpbiBzb3VyY2UsIGJhY2tmaWxsIERFTSB0byBlbGltaW5hdGUgdmlzaWJsZSB0aWxlIGJvdW5kYXJpZXNcbiAgICAqIEBwcml2YXRlXG4gICAgKi9cbiAgICBfYmFja2ZpbGxERU0odGlsZTogVGlsZSkge1xuICAgICAgICBjb25zdCByZW5kZXJhYmxlcyA9IHRoaXMuZ2V0UmVuZGVyYWJsZUlkcygpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlcmFibGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBib3JkZXJJZCA9IHJlbmRlcmFibGVzW2ldO1xuICAgICAgICAgICAgaWYgKHRpbGUubmVpZ2hib3JpbmdUaWxlcyAmJiB0aWxlLm5laWdoYm9yaW5nVGlsZXNbYm9yZGVySWRdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYm9yZGVyVGlsZSA9IHRoaXMuZ2V0VGlsZUJ5SUQoYm9yZGVySWQpO1xuICAgICAgICAgICAgICAgIGZpbGxCb3JkZXIodGlsZSwgYm9yZGVyVGlsZSk7XG4gICAgICAgICAgICAgICAgZmlsbEJvcmRlcihib3JkZXJUaWxlLCB0aWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGZpbGxCb3JkZXIodGlsZSwgYm9yZGVyVGlsZSkge1xuICAgICAgICAgICAgdGlsZS5uZWVkc0hpbGxzaGFkZVByZXBhcmUgPSB0cnVlO1xuICAgICAgICAgICAgbGV0IGR4ID0gYm9yZGVyVGlsZS50aWxlSUQuY2Fub25pY2FsLnggLSB0aWxlLnRpbGVJRC5jYW5vbmljYWwueDtcbiAgICAgICAgICAgIGNvbnN0IGR5ID0gYm9yZGVyVGlsZS50aWxlSUQuY2Fub25pY2FsLnkgLSB0aWxlLnRpbGVJRC5jYW5vbmljYWwueTtcbiAgICAgICAgICAgIGNvbnN0IGRpbSA9IE1hdGgucG93KDIsIHRpbGUudGlsZUlELmNhbm9uaWNhbC56KTtcbiAgICAgICAgICAgIGNvbnN0IGJvcmRlcklkID0gYm9yZGVyVGlsZS50aWxlSUQua2V5O1xuICAgICAgICAgICAgaWYgKGR4ID09PSAwICYmIGR5ID09PSAwKSByZXR1cm47XG5cbiAgICAgICAgICAgIGlmIChNYXRoLmFicyhkeSkgPiAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGR4KSA+IDEpIHtcbiAgICAgICAgICAgICAgICAvLyBBZGp1c3QgdGhlIGRlbHRhIGNvb3JkaW5hdGUgZm9yIHdvcmxkIHdyYXBhcm91bmQuXG4gICAgICAgICAgICAgICAgaWYgKE1hdGguYWJzKGR4ICsgZGltKSA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBkeCArPSBkaW07XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChNYXRoLmFicyhkeCAtIGRpbSkgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZHggLT0gZGltO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghYm9yZGVyVGlsZS5kZW0gfHwgIXRpbGUuZGVtKSByZXR1cm47XG4gICAgICAgICAgICB0aWxlLmRlbS5iYWNrZmlsbEJvcmRlcihib3JkZXJUaWxlLmRlbSwgZHgsIGR5KTtcbiAgICAgICAgICAgIGlmICh0aWxlLm5laWdoYm9yaW5nVGlsZXMgJiYgdGlsZS5uZWlnaGJvcmluZ1RpbGVzW2JvcmRlcklkXSlcbiAgICAgICAgICAgICAgICB0aWxlLm5laWdoYm9yaW5nVGlsZXNbYm9yZGVySWRdLmJhY2tmaWxsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldCBhIHNwZWNpZmljIHRpbGUgYnkgVGlsZUlEXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBnZXRUaWxlKHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCk6IFRpbGUge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUaWxlQnlJRCh0aWxlSUQua2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgYSBzcGVjaWZpYyB0aWxlIGJ5IGlkXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBnZXRUaWxlQnlJRChpZDogc3RyaW5nKTogVGlsZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90aWxlc1tpZF07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9yIGEgZ2l2ZW4gc2V0IG9mIHRpbGVzLCByZXRhaW4gY2hpbGRyZW4gdGhhdCBhcmUgbG9hZGVkIGFuZCBoYXZlIGEgem9vbVxuICAgICAqIGJldHdlZW4gYHpvb21gIChleGNsdXNpdmUpIGFuZCBgbWF4Q292ZXJpbmdab29tYCAoaW5jbHVzaXZlKVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX3JldGFpbkxvYWRlZENoaWxkcmVuKFxuICAgICAgICBpZGVhbFRpbGVzOiB7W186IGFueV06IE92ZXJzY2FsZWRUaWxlSUR9LFxuICAgICAgICB6b29tOiBudW1iZXIsXG4gICAgICAgIG1heENvdmVyaW5nWm9vbTogbnVtYmVyLFxuICAgICAgICByZXRhaW46IHtbXzogYW55XTogT3ZlcnNjYWxlZFRpbGVJRH1cbiAgICApIHtcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLl90aWxlcykge1xuICAgICAgICAgICAgbGV0IHRpbGUgPSB0aGlzLl90aWxlc1tpZF07XG5cbiAgICAgICAgICAgIC8vIG9ubHkgY29uc2lkZXIgcmVuZGVyYWJsZSB0aWxlcyB1cCB0byBtYXhDb3ZlcmluZ1pvb21cbiAgICAgICAgICAgIGlmIChyZXRhaW5baWRdIHx8XG4gICAgICAgICAgICAgICAgIXRpbGUuaGFzRGF0YSgpIHx8XG4gICAgICAgICAgICAgICAgdGlsZS50aWxlSUQub3ZlcnNjYWxlZFogPD0gem9vbSB8fFxuICAgICAgICAgICAgICAgIHRpbGUudGlsZUlELm92ZXJzY2FsZWRaID4gbWF4Q292ZXJpbmdab29tXG4gICAgICAgICAgICApIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAvLyBsb29wIHRocm91Z2ggcGFyZW50cyBhbmQgcmV0YWluIHRoZSB0b3Btb3N0IGxvYWRlZCBvbmUgaWYgZm91bmRcbiAgICAgICAgICAgIGxldCB0b3Btb3N0TG9hZGVkSUQgPSB0aWxlLnRpbGVJRDtcbiAgICAgICAgICAgIHdoaWxlICh0aWxlICYmIHRpbGUudGlsZUlELm92ZXJzY2FsZWRaID4gem9vbSArIDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJRCA9IHRpbGUudGlsZUlELnNjYWxlZFRvKHRpbGUudGlsZUlELm92ZXJzY2FsZWRaIC0gMSk7XG5cbiAgICAgICAgICAgICAgICB0aWxlID0gdGhpcy5fdGlsZXNbcGFyZW50SUQua2V5XTtcblxuICAgICAgICAgICAgICAgIGlmICh0aWxlICYmIHRpbGUuaGFzRGF0YSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvcG1vc3RMb2FkZWRJRCA9IHBhcmVudElEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gbG9vcCB0aHJvdWdoIGFuY2VzdG9ycyBvZiB0aGUgdG9wbW9zdCBsb2FkZWQgY2hpbGQgdG8gc2VlIGlmIHRoZXJlJ3Mgb25lIHRoYXQgbmVlZGVkIGl0XG4gICAgICAgICAgICBsZXQgdGlsZUlEID0gdG9wbW9zdExvYWRlZElEO1xuICAgICAgICAgICAgd2hpbGUgKHRpbGVJRC5vdmVyc2NhbGVkWiA+IHpvb20pIHtcbiAgICAgICAgICAgICAgICB0aWxlSUQgPSB0aWxlSUQuc2NhbGVkVG8odGlsZUlELm92ZXJzY2FsZWRaIC0gMSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoaWRlYWxUaWxlc1t0aWxlSUQua2V5XSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBmb3VuZCBhIHBhcmVudCB0aGF0IG5lZWRlZCBhIGxvYWRlZCBjaGlsZDsgcmV0YWluIHRoYXQgY2hpbGRcbiAgICAgICAgICAgICAgICAgICAgcmV0YWluW3RvcG1vc3RMb2FkZWRJRC5rZXldID0gdG9wbW9zdExvYWRlZElEO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kIGEgbG9hZGVkIHBhcmVudCBvZiB0aGUgZ2l2ZW4gdGlsZSAodXAgdG8gbWluQ292ZXJpbmdab29tKVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgZmluZExvYWRlZFBhcmVudCh0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQsIG1pbkNvdmVyaW5nWm9vbTogbnVtYmVyKTogP1RpbGUge1xuICAgICAgICBpZiAodGlsZUlELmtleSBpbiB0aGlzLl9sb2FkZWRQYXJlbnRUaWxlcykge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5fbG9hZGVkUGFyZW50VGlsZXNbdGlsZUlELmtleV07XG4gICAgICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC50aWxlSUQub3ZlcnNjYWxlZFogPj0gbWluQ292ZXJpbmdab29tKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgeiA9IHRpbGVJRC5vdmVyc2NhbGVkWiAtIDE7IHogPj0gbWluQ292ZXJpbmdab29tOyB6LS0pIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudFRpbGVJRCA9IHRpbGVJRC5zY2FsZWRUbyh6KTtcbiAgICAgICAgICAgIGNvbnN0IHRpbGUgPSB0aGlzLl9nZXRMb2FkZWRUaWxlKHBhcmVudFRpbGVJRCk7XG4gICAgICAgICAgICBpZiAodGlsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2dldExvYWRlZFRpbGUodGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlEKTogP1RpbGUge1xuICAgICAgICBjb25zdCB0aWxlID0gdGhpcy5fdGlsZXNbdGlsZUlELmtleV07XG4gICAgICAgIGlmICh0aWxlICYmIHRpbGUuaGFzRGF0YSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGlsZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaWxlQ2FjaGUgaWdub3JlcyB3cmFwIGluIGxvb2t1cC5cbiAgICAgICAgY29uc3QgY2FjaGVkVGlsZSA9IHRoaXMuX2NhY2hlLmdldEJ5S2V5KHRpbGVJRC53cmFwcGVkKCkua2V5KTtcbiAgICAgICAgcmV0dXJuIGNhY2hlZFRpbGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzaXplcyB0aGUgdGlsZSBjYWNoZSBiYXNlZCBvbiB0aGUgY3VycmVudCB2aWV3cG9ydCdzIHNpemVcbiAgICAgKiBvciB0aGUgbWF4VGlsZUNhY2hlU2l6ZSBvcHRpb24gcGFzc2VkIGR1cmluZyBtYXAgY3JlYXRpb25cbiAgICAgKlxuICAgICAqIExhcmdlciB2aWV3cG9ydHMgdXNlIG1vcmUgdGlsZXMgYW5kIG5lZWQgbGFyZ2VyIGNhY2hlcy4gTGFyZ2VyIHZpZXdwb3J0c1xuICAgICAqIGFyZSBtb3JlIGxpa2VseSB0byBiZSBmb3VuZCBvbiBkZXZpY2VzIHdpdGggbW9yZSBtZW1vcnkgYW5kIG9uIHBhZ2VzIHdoZXJlXG4gICAgICogdGhlIG1hcCBpcyBtb3JlIGltcG9ydGFudC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHVwZGF0ZUNhY2hlU2l6ZSh0cmFuc2Zvcm06IFRyYW5zZm9ybSkge1xuICAgICAgICBjb25zdCB3aWR0aEluVGlsZXMgPSBNYXRoLmNlaWwodHJhbnNmb3JtLndpZHRoIC8gdGhpcy5fc291cmNlLnRpbGVTaXplKSArIDE7XG4gICAgICAgIGNvbnN0IGhlaWdodEluVGlsZXMgPSBNYXRoLmNlaWwodHJhbnNmb3JtLmhlaWdodCAvIHRoaXMuX3NvdXJjZS50aWxlU2l6ZSkgKyAxO1xuICAgICAgICBjb25zdCBhcHByb3hUaWxlc0luVmlldyA9IHdpZHRoSW5UaWxlcyAqIGhlaWdodEluVGlsZXM7XG4gICAgICAgIGNvbnN0IGNvbW1vblpvb21SYW5nZSA9IDU7XG5cbiAgICAgICAgY29uc3Qgdmlld0RlcGVuZGVudE1heFNpemUgPSBNYXRoLmZsb29yKGFwcHJveFRpbGVzSW5WaWV3ICogY29tbW9uWm9vbVJhbmdlKTtcbiAgICAgICAgY29uc3QgbWF4U2l6ZSA9IHR5cGVvZiB0aGlzLl9tYXhUaWxlQ2FjaGVTaXplID09PSAnbnVtYmVyJyA/IE1hdGgubWluKHRoaXMuX21heFRpbGVDYWNoZVNpemUsIHZpZXdEZXBlbmRlbnRNYXhTaXplKSA6IHZpZXdEZXBlbmRlbnRNYXhTaXplO1xuXG4gICAgICAgIHRoaXMuX2NhY2hlLnNldE1heFNpemUobWF4U2l6ZSk7XG4gICAgfVxuXG4gICAgaGFuZGxlV3JhcEp1bXAobG5nOiBudW1iZXIpIHtcbiAgICAgICAgLy8gT24gdG9wIG9mIHRoZSByZWd1bGFyIHoveC95IHZhbHVlcywgVGlsZUlEcyBoYXZlIGEgYHdyYXBgIHZhbHVlIHRoYXQgc3BlY2lmeVxuICAgICAgICAvLyB3aGljaCBjcHB5IG9mIHRoZSB3b3JsZCB0aGUgdGlsZSBiZWxvbmdzIHRvLiBGb3IgZXhhbXBsZSwgYXQgYGxuZzogMTBgIHlvdVxuICAgICAgICAvLyBtaWdodCByZW5kZXIgei94L3kvMCB3aGlsZSBhdCBgbG5nOiAzNzBgIHlvdSB3b3VsZCByZW5kZXIgei94L3kvMS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gV2hlbiBsbmcgdmFsdWVzIGdldCB3cmFwcGVkIChnb2luZyBmcm9tIGBsbmc6IDM3MGAgdG8gYGxvbmc6IDEwYCkgeW91IGV4cGVjdFxuICAgICAgICAvLyB0byBzZWUgdGhlIHNhbWUgdGhpbmcgb24gdGhlIHNjcmVlbiAoMzcwIGRlZ3JlZXMgYW5kIDEwIGRlZ3JlZXMgaXMgdGhlIHNhbWVcbiAgICAgICAgLy8gcGxhY2UgaW4gdGhlIHdvcmxkKSBidXQgYWxsIHRoZSBUaWxlSURzIHdpbGwgaGF2ZSBkaWZmZXJlbnQgd3JhcCB2YWx1ZXMuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEluIG9yZGVyIHRvIG1ha2UgdGhpcyB0cmFuc2l0aW9uIHNlYW1sZXNzLCB3ZSBjYWxjdWxhdGUgdGhlIHJvdW5kZWQgZGlmZmVyZW5jZSBvZlxuICAgICAgICAvLyBcIndvcmxkc1wiIGJldHdlZW4gdGhlIGxhc3QgZnJhbWUgYW5kIHRoZSBjdXJyZW50IGZyYW1lLiBJZiB0aGUgbWFwIHBhbm5lZCBieVxuICAgICAgICAvLyBhIHdvcmxkLCB0aGVuIHdlIGNhbiBhc3NpZ24gYWxsIHRoZSB0aWxlcyBuZXcgVGlsZUlEcyB3aXRoIHVwZGF0ZWQgd3JhcCB2YWx1ZXMuXG4gICAgICAgIC8vIEZvciBleGFtcGxlLCBhc3NpZ24gei94L3kvMSBhIG5ldyBpZDogei94L3kvMC4gSXQgaXMgdGhlIHNhbWUgdGlsZSwganVzdCByZW5kZXJlZFxuICAgICAgICAvLyBpbiBhIGRpZmZlcmVudCBwb3NpdGlvbi5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gVGhpcyBlbmFibGVzIHVzIHRvIHJldXNlIHRoZSB0aWxlcyBhdCBtb3JlIGlkZWFsIGxvY2F0aW9ucyBhbmQgcHJldmVudCBmbGlja2VyaW5nLlxuICAgICAgICBjb25zdCBwcmV2TG5nID0gdGhpcy5fcHJldkxuZyA9PT0gdW5kZWZpbmVkID8gbG5nIDogdGhpcy5fcHJldkxuZztcbiAgICAgICAgY29uc3QgbG5nRGlmZmVyZW5jZSA9IGxuZyAtIHByZXZMbmc7XG4gICAgICAgIGNvbnN0IHdvcmxkRGlmZmVyZW5jZSA9IGxuZ0RpZmZlcmVuY2UgLyAzNjA7XG4gICAgICAgIGNvbnN0IHdyYXBEZWx0YSA9IE1hdGgucm91bmQod29ybGREaWZmZXJlbmNlKTtcbiAgICAgICAgdGhpcy5fcHJldkxuZyA9IGxuZztcblxuICAgICAgICBpZiAod3JhcERlbHRhKSB7XG4gICAgICAgICAgICBjb25zdCB0aWxlczoge1tfOiBzdHJpbmddOiBUaWxlfSA9IHt9O1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5fdGlsZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aWxlID0gdGhpcy5fdGlsZXNba2V5XTtcbiAgICAgICAgICAgICAgICB0aWxlLnRpbGVJRCA9IHRpbGUudGlsZUlELnVud3JhcFRvKHRpbGUudGlsZUlELndyYXAgKyB3cmFwRGVsdGEpO1xuICAgICAgICAgICAgICAgIHRpbGVzW3RpbGUudGlsZUlELmtleV0gPSB0aWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdGlsZXMgPSB0aWxlcztcblxuICAgICAgICAgICAgLy8gUmVzZXQgdGlsZSByZWxvYWQgdGltZXJzXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuX3RpbWVycykge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lcnNbaWRdKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fdGltZXJzW2lkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5fdGlsZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aWxlID0gdGhpcy5fdGlsZXNbaWRdO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldFRpbGVSZWxvYWRUaW1lcihpZCwgdGlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRpbGVzIHRoYXQgYXJlIG91dHNpZGUgdGhlIHZpZXdwb3J0IGFuZCBhZGRzIG5ldyB0aWxlcyB0aGF0XG4gICAgICogYXJlIGluc2lkZSB0aGUgdmlld3BvcnQuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB1cGRhdGUodHJhbnNmb3JtOiBUcmFuc2Zvcm0pIHtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG4gICAgICAgIGlmICghdGhpcy5fc291cmNlTG9hZGVkIHx8IHRoaXMuX3BhdXNlZCkgeyByZXR1cm47IH1cblxuICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlU2l6ZSh0cmFuc2Zvcm0pO1xuICAgICAgICB0aGlzLmhhbmRsZVdyYXBKdW1wKHRoaXMudHJhbnNmb3JtLmNlbnRlci5sbmcpO1xuXG4gICAgICAgIC8vIENvdmVyZWQgaXMgYSBsaXN0IG9mIHJldGFpbmVkIHRpbGVzIHdobydzIGFyZWFzIGFyZSBmdWxseSBjb3ZlcmVkIGJ5IG90aGVyLFxuICAgICAgICAvLyBiZXR0ZXIsIHJldGFpbmVkIHRpbGVzLiBUaGV5IGFyZSBub3QgZHJhd24gc2VwYXJhdGVseS5cbiAgICAgICAgdGhpcy5fY292ZXJlZFRpbGVzID0ge307XG5cbiAgICAgICAgbGV0IGlkZWFsVGlsZUlEcztcbiAgICAgICAgaWYgKCF0aGlzLnVzZWQpIHtcbiAgICAgICAgICAgIGlkZWFsVGlsZUlEcyA9IFtdO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3NvdXJjZS50aWxlSUQpIHtcbiAgICAgICAgICAgIGlkZWFsVGlsZUlEcyA9IHRyYW5zZm9ybS5nZXRWaXNpYmxlVW53cmFwcGVkQ29vcmRpbmF0ZXModGhpcy5fc291cmNlLnRpbGVJRClcbiAgICAgICAgICAgICAgICAubWFwKCh1bndyYXBwZWQpID0+IG5ldyBPdmVyc2NhbGVkVGlsZUlEKHVud3JhcHBlZC5jYW5vbmljYWwueiwgdW53cmFwcGVkLndyYXAsIHVud3JhcHBlZC5jYW5vbmljYWwueiwgdW53cmFwcGVkLmNhbm9uaWNhbC54LCB1bndyYXBwZWQuY2Fub25pY2FsLnkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlkZWFsVGlsZUlEcyA9IHRyYW5zZm9ybS5jb3ZlcmluZ1RpbGVzKHtcbiAgICAgICAgICAgICAgICB0aWxlU2l6ZTogdGhpcy5fc291cmNlLnRpbGVTaXplLFxuICAgICAgICAgICAgICAgIG1pbnpvb206IHRoaXMuX3NvdXJjZS5taW56b29tLFxuICAgICAgICAgICAgICAgIG1heHpvb206IHRoaXMuX3NvdXJjZS5tYXh6b29tLFxuICAgICAgICAgICAgICAgIHJvdW5kWm9vbTogdGhpcy5fc291cmNlLnJvdW5kWm9vbSxcbiAgICAgICAgICAgICAgICByZXBhcnNlT3ZlcnNjYWxlZDogdGhpcy5fc291cmNlLnJlcGFyc2VPdmVyc2NhbGVkXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZS5oYXNUaWxlKSB7XG4gICAgICAgICAgICAgICAgaWRlYWxUaWxlSURzID0gaWRlYWxUaWxlSURzLmZpbHRlcigoY29vcmQpID0+ICh0aGlzLl9zb3VyY2UuaGFzVGlsZTogYW55KShjb29yZCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBvdmVyem9vbWluZy91bmRlcnpvb21pbmcgYW1vdW50cy5cbiAgICAgICAgY29uc3Qgem9vbSA9IHRyYW5zZm9ybS5jb3ZlcmluZ1pvb21MZXZlbCh0aGlzLl9zb3VyY2UpO1xuICAgICAgICBjb25zdCBtaW5Db3ZlcmluZ1pvb20gPSBNYXRoLm1heCh6b29tIC0gU291cmNlQ2FjaGUubWF4T3Zlcnpvb21pbmcsIHRoaXMuX3NvdXJjZS5taW56b29tKTtcbiAgICAgICAgY29uc3QgbWF4Q292ZXJpbmdab29tID0gTWF0aC5tYXgoem9vbSArIFNvdXJjZUNhY2hlLm1heFVuZGVyem9vbWluZywgIHRoaXMuX3NvdXJjZS5taW56b29tKTtcblxuICAgICAgICAvLyBSZXRhaW4gaXMgYSBsaXN0IG9mIHRpbGVzIHRoYXQgd2Ugc2hvdWxkbid0IGRlbGV0ZSwgZXZlbiBpZiB0aGV5IGFyZSBub3RcbiAgICAgICAgLy8gdGhlIG1vc3QgaWRlYWwgdGlsZSBmb3IgdGhlIGN1cnJlbnQgdmlld3BvcnQuIFRoaXMgbWF5IGluY2x1ZGUgdGlsZXMgbGlrZVxuICAgICAgICAvLyBwYXJlbnQgb3IgY2hpbGQgdGlsZXMgdGhhdCBhcmUgKmFscmVhZHkqIGxvYWRlZC5cbiAgICAgICAgY29uc3QgcmV0YWluID0gdGhpcy5fdXBkYXRlUmV0YWluZWRUaWxlcyhpZGVhbFRpbGVJRHMsIHpvb20pO1xuXG4gICAgICAgIGlmIChpc1Jhc3RlclR5cGUodGhpcy5fc291cmNlLnR5cGUpKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRzRm9yRmFkaW5nOiB7W186IHN0cmluZ106IE92ZXJzY2FsZWRUaWxlSUR9ID0ge307XG4gICAgICAgICAgICBjb25zdCBmYWRpbmdUaWxlcyA9IHt9O1xuICAgICAgICAgICAgY29uc3QgaWRzID0gT2JqZWN0LmtleXMocmV0YWluKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgb2YgaWRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGlsZUlEID0gcmV0YWluW2lkXTtcbiAgICAgICAgICAgICAgICBhc3NlcnQodGlsZUlELmtleSA9PT0gaWQpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdGlsZSA9IHRoaXMuX3RpbGVzW2lkXTtcbiAgICAgICAgICAgICAgICBpZiAoIXRpbGUgfHwgdGlsZS5mYWRlRW5kVGltZSAmJiB0aWxlLmZhZGVFbmRUaW1lIDw9IGJyb3dzZXIubm93KCkpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlIHRpbGUgaXMgbG9hZGVkIGJ1dCBzdGlsbCBmYWRpbmcgaW4sIGZpbmQgcGFyZW50cyB0byBjcm9zcy1mYWRlIHdpdGggaXRcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRUaWxlID0gdGhpcy5maW5kTG9hZGVkUGFyZW50KHRpbGVJRCwgbWluQ292ZXJpbmdab29tKTtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50VGlsZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGRUaWxlKHBhcmVudFRpbGUudGlsZUlEKTtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50c0ZvckZhZGluZ1twYXJlbnRUaWxlLnRpbGVJRC5rZXldID0gcGFyZW50VGlsZS50aWxlSUQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZmFkaW5nVGlsZXNbaWRdID0gdGlsZUlEO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBmb3IgdGlsZXMgdGhhdCBhcmUgc3RpbGwgZmFkaW5nIGluLCBhbHNvIGZpbmQgY2hpbGRyZW4gdG8gY3Jvc3MtZmFkZSB3aXRoXG4gICAgICAgICAgICB0aGlzLl9yZXRhaW5Mb2FkZWRDaGlsZHJlbihmYWRpbmdUaWxlcywgem9vbSwgbWF4Q292ZXJpbmdab29tLCByZXRhaW4pO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHBhcmVudHNGb3JGYWRpbmcpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXJldGFpbltpZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgYSB0aWxlIGlzIG9ubHkgbmVlZGVkIGZvciBmYWRpbmcsIG1hcmsgaXQgYXMgY292ZXJlZCBzbyB0aGF0IGl0IGlzbid0IHJlbmRlcmVkIG9uIGl0J3Mgb3duLlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb3ZlcmVkVGlsZXNbaWRdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0YWluW2lkXSA9IHBhcmVudHNGb3JGYWRpbmdbaWRdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgcmV0YWluZWRJZCBpbiByZXRhaW4pIHtcbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSByZXRhaW5lZCB0aWxlcyBhbHdheXMgY2xlYXIgYW55IGV4aXN0aW5nIGZhZGUgaG9sZHNcbiAgICAgICAgICAgIC8vIHNvIHRoYXQgaWYgdGhleSdyZSByZW1vdmVkIGFnYWluIHRoZWlyIGZhZGUgdGltZXIgc3RhcnRzIGZyZXNoLlxuICAgICAgICAgICAgdGhpcy5fdGlsZXNbcmV0YWluZWRJZF0uY2xlYXJGYWRlSG9sZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVtb3ZlIHRoZSB0aWxlcyB3ZSBkb24ndCBuZWVkIGFueW1vcmUuXG4gICAgICAgIGNvbnN0IHJlbW92ZSA9IGtleXNEaWZmZXJlbmNlKHRoaXMuX3RpbGVzLCByZXRhaW4pO1xuICAgICAgICBmb3IgKGNvbnN0IHRpbGVJRCBvZiByZW1vdmUpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbGUgPSB0aGlzLl90aWxlc1t0aWxlSURdO1xuICAgICAgICAgICAgaWYgKHRpbGUuaGFzU3ltYm9sQnVja2V0cyAmJiAhdGlsZS5ob2xkaW5nRm9yRmFkZSgpKSB7XG4gICAgICAgICAgICAgICAgdGlsZS5zZXRIb2xkRHVyYXRpb24odGhpcy5tYXAuX2ZhZGVEdXJhdGlvbik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aWxlLmhhc1N5bWJvbEJ1Y2tldHMgfHwgdGlsZS5zeW1ib2xGYWRlRmluaXNoZWQoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZVRpbGUodGlsZUlEKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbnN0cnVjdCBhIGNhY2hlIG9mIGxvYWRlZCBwYXJlbnRzXG4gICAgICAgIHRoaXMuX3VwZGF0ZUxvYWRlZFBhcmVudFRpbGVDYWNoZSgpO1xuICAgIH1cblxuICAgIHJlbGVhc2VTeW1ib2xGYWRlVGlsZXMoKSB7XG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5fdGlsZXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl90aWxlc1tpZF0uaG9sZGluZ0ZvckZhZGUoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZVRpbGUoaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3VwZGF0ZVJldGFpbmVkVGlsZXMoaWRlYWxUaWxlSURzOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPiwgem9vbTogbnVtYmVyKToge1tfOiBzdHJpbmddOiBPdmVyc2NhbGVkVGlsZUlEfSB7XG4gICAgICAgIGNvbnN0IHJldGFpbjoge1tfOiBzdHJpbmddOiBPdmVyc2NhbGVkVGlsZUlEfSA9IHt9O1xuICAgICAgICBjb25zdCBjaGVja2VkOiB7W186IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9O1xuICAgICAgICBjb25zdCBtaW5Db3ZlcmluZ1pvb20gPSBNYXRoLm1heCh6b29tIC0gU291cmNlQ2FjaGUubWF4T3Zlcnpvb21pbmcsIHRoaXMuX3NvdXJjZS5taW56b29tKTtcbiAgICAgICAgY29uc3QgbWF4Q292ZXJpbmdab29tID0gTWF0aC5tYXgoem9vbSArIFNvdXJjZUNhY2hlLm1heFVuZGVyem9vbWluZywgIHRoaXMuX3NvdXJjZS5taW56b29tKTtcblxuICAgICAgICBjb25zdCBtaXNzaW5nVGlsZXMgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCB0aWxlSUQgb2YgaWRlYWxUaWxlSURzKSB7XG4gICAgICAgICAgICBjb25zdCB0aWxlID0gdGhpcy5fYWRkVGlsZSh0aWxlSUQpO1xuXG4gICAgICAgICAgICAvLyByZXRhaW4gdGhlIHRpbGUgZXZlbiBpZiBpdCdzIG5vdCBsb2FkZWQgYmVjYXVzZSBpdCdzIGFuIGlkZWFsIHRpbGUuXG4gICAgICAgICAgICByZXRhaW5bdGlsZUlELmtleV0gPSB0aWxlSUQ7XG5cbiAgICAgICAgICAgIGlmICh0aWxlLmhhc0RhdGEoKSkgY29udGludWU7XG5cbiAgICAgICAgICAgIGlmICh6b29tIDwgdGhpcy5fc291cmNlLm1heHpvb20pIHtcbiAgICAgICAgICAgICAgICAvLyBzYXZlIG1pc3NpbmcgdGlsZXMgdGhhdCBwb3RlbnRpYWxseSBoYXZlIGxvYWRlZCBjaGlsZHJlblxuICAgICAgICAgICAgICAgIG1pc3NpbmdUaWxlc1t0aWxlSUQua2V5XSA9IHRpbGVJRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJldGFpbiBhbnkgbG9hZGVkIGNoaWxkcmVuIG9mIGlkZWFsIHRpbGVzIHVwIHRvIG1heENvdmVyaW5nWm9vbVxuICAgICAgICB0aGlzLl9yZXRhaW5Mb2FkZWRDaGlsZHJlbihtaXNzaW5nVGlsZXMsIHpvb20sIG1heENvdmVyaW5nWm9vbSwgcmV0YWluKTtcblxuICAgICAgICBmb3IgKGNvbnN0IHRpbGVJRCBvZiBpZGVhbFRpbGVJRHMpIHtcbiAgICAgICAgICAgIGxldCB0aWxlID0gdGhpcy5fdGlsZXNbdGlsZUlELmtleV07XG5cbiAgICAgICAgICAgIGlmICh0aWxlLmhhc0RhdGEoKSkgY29udGludWU7XG5cbiAgICAgICAgICAgIC8vIFRoZSB0aWxlIHdlIHJlcXVpcmUgaXMgbm90IHlldCBsb2FkZWQgb3IgZG9lcyBub3QgZXhpc3Q7XG4gICAgICAgICAgICAvLyBBdHRlbXB0IHRvIGZpbmQgY2hpbGRyZW4gdGhhdCBmdWxseSBjb3ZlciBpdC5cblxuICAgICAgICAgICAgaWYgKHpvb20gKyAxID4gdGhpcy5fc291cmNlLm1heHpvb20pIHtcbiAgICAgICAgICAgICAgICAvLyBXZSdyZSBsb29raW5nIGZvciBhbiBvdmVyem9vbWVkIGNoaWxkIHRpbGUuXG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRDb29yZCA9IHRpbGVJRC5jaGlsZHJlbih0aGlzLl9zb3VyY2UubWF4em9vbSlbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRUaWxlID0gdGhpcy5nZXRUaWxlKGNoaWxkQ29vcmQpO1xuICAgICAgICAgICAgICAgIGlmICghIWNoaWxkVGlsZSAmJiBjaGlsZFRpbGUuaGFzRGF0YSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldGFpbltjaGlsZENvb3JkLmtleV0gPSBjaGlsZENvb3JkO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLy8gdGlsZSBpcyBjb3ZlcmVkIGJ5IG92ZXJ6b29tZWQgY2hpbGRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIGFsbCA0IGltbWVkaWF0ZSBjaGlsZHJlbiBhcmUgbG9hZGVkIChpLmUuIHRoZSBtaXNzaW5nIGlkZWFsIHRpbGUgaXMgY292ZXJlZClcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRpbGVJRC5jaGlsZHJlbih0aGlzLl9zb3VyY2UubWF4em9vbSk7XG5cbiAgICAgICAgICAgICAgICBpZiAocmV0YWluW2NoaWxkcmVuWzBdLmtleV0gJiZcbiAgICAgICAgICAgICAgICAgICAgcmV0YWluW2NoaWxkcmVuWzFdLmtleV0gJiZcbiAgICAgICAgICAgICAgICAgICAgcmV0YWluW2NoaWxkcmVuWzJdLmtleV0gJiZcbiAgICAgICAgICAgICAgICAgICAgcmV0YWluW2NoaWxkcmVuWzNdLmtleV0pIGNvbnRpbnVlOyAvLyB0aWxlIGlzIGNvdmVyZWQgYnkgY2hpbGRyZW5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gV2UgY291bGRuJ3QgZmluZCBjaGlsZCB0aWxlcyB0aGF0IGVudGlyZWx5IGNvdmVyIHRoZSBpZGVhbCB0aWxlOyBsb29rIGZvciBwYXJlbnRzIG5vdy5cblxuICAgICAgICAgICAgLy8gQXMgd2UgYXNjZW5kIHVwIHRoZSB0aWxlIHB5cmFtaWQgb2YgdGhlIGlkZWFsIHRpbGUsIHdlIGNoZWNrIHdoZXRoZXIgdGhlIHBhcmVudFxuICAgICAgICAgICAgLy8gdGlsZSBoYXMgYmVlbiBwcmV2aW91c2x5IHJlcXVlc3RlZCAoYW5kIGVycm9yZWQgYmVjYXVzZSB3ZSBvbmx5IGxvb3Agb3ZlciB0aWxlcyB3aXRoIG5vIGRhdGEpXG4gICAgICAgICAgICAvLyBpbiBvcmRlciB0byBkZXRlcm1pbmUgaWYgd2UgbmVlZCB0byByZXF1ZXN0IGl0cyBwYXJlbnQuXG4gICAgICAgICAgICBsZXQgcGFyZW50V2FzUmVxdWVzdGVkID0gdGlsZS53YXNSZXF1ZXN0ZWQoKTtcblxuICAgICAgICAgICAgZm9yIChsZXQgb3ZlcnNjYWxlZFogPSB0aWxlSUQub3ZlcnNjYWxlZFogLSAxOyBvdmVyc2NhbGVkWiA+PSBtaW5Db3ZlcmluZ1pvb207IC0tb3ZlcnNjYWxlZFopIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHRpbGVJRC5zY2FsZWRUbyhvdmVyc2NhbGVkWik7XG5cbiAgICAgICAgICAgICAgICAvLyBCcmVhayBwYXJlbnQgdGlsZSBhc2NlbnQgaWYgdGhpcyByb3V0ZSBoYXMgYmVlbiBwcmV2aW91c2x5IGNoZWNrZWQgYnkgYW5vdGhlciBjaGlsZC5cbiAgICAgICAgICAgICAgICBpZiAoY2hlY2tlZFtwYXJlbnRJZC5rZXldKSBicmVhaztcbiAgICAgICAgICAgICAgICBjaGVja2VkW3BhcmVudElkLmtleV0gPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgdGlsZSA9IHRoaXMuZ2V0VGlsZShwYXJlbnRJZCk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aWxlICYmIHBhcmVudFdhc1JlcXVlc3RlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aWxlID0gdGhpcy5fYWRkVGlsZShwYXJlbnRJZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldGFpbltwYXJlbnRJZC5rZXldID0gcGFyZW50SWQ7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNhdmUgdGhlIGN1cnJlbnQgdmFsdWVzLCBzaW5jZSB0aGV5J3JlIHRoZSBwYXJlbnQgb2YgdGhlIG5leHQgaXRlcmF0aW9uXG4gICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBwYXJlbnQgdGlsZSBhc2NlbnQgbG9vcC5cbiAgICAgICAgICAgICAgICAgICAgcGFyZW50V2FzUmVxdWVzdGVkID0gdGlsZS53YXNSZXF1ZXN0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRpbGUuaGFzRGF0YSgpKSBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmV0YWluO1xuICAgIH1cblxuICAgIF91cGRhdGVMb2FkZWRQYXJlbnRUaWxlQ2FjaGUoKSB7XG4gICAgICAgIHRoaXMuX2xvYWRlZFBhcmVudFRpbGVzID0ge307XG5cbiAgICAgICAgZm9yIChjb25zdCB0aWxlS2V5IGluIHRoaXMuX3RpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gW107XG4gICAgICAgICAgICBsZXQgcGFyZW50VGlsZTogP1RpbGU7XG4gICAgICAgICAgICBsZXQgY3VycmVudElkID0gdGhpcy5fdGlsZXNbdGlsZUtleV0udGlsZUlEO1xuXG4gICAgICAgICAgICAvLyBGaW5kIHRoZSBjbG9zZXN0IGxvYWRlZCBhbmNlc3RvciBieSB0cmF2ZXJzaW5nIHRoZSB0aWxlIHRyZWUgdG93YXJkcyB0aGUgcm9vdCBhbmRcbiAgICAgICAgICAgIC8vIGNhY2hpbmcgcmVzdWx0cyBhbG9uZyB0aGUgd2F5XG4gICAgICAgICAgICB3aGlsZSAoY3VycmVudElkLm92ZXJzY2FsZWRaID4gMCkge1xuXG4gICAgICAgICAgICAgICAgLy8gRG8gd2UgaGF2ZSBhIGNhY2hlZCByZXN1bHQgZnJvbSBwcmV2aW91cyB0cmF2ZXJzYWxzP1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50SWQua2V5IGluIHRoaXMuX2xvYWRlZFBhcmVudFRpbGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudFRpbGUgPSB0aGlzLl9sb2FkZWRQYXJlbnRUaWxlc1tjdXJyZW50SWQua2V5XTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcGF0aC5wdXNoKGN1cnJlbnRJZC5rZXkpO1xuXG4gICAgICAgICAgICAgICAgLy8gSXMgdGhlIHBhcmVudCBsb2FkZWQ/XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50SWQgPSBjdXJyZW50SWQuc2NhbGVkVG8oY3VycmVudElkLm92ZXJzY2FsZWRaIC0gMSk7XG4gICAgICAgICAgICAgICAgcGFyZW50VGlsZSA9IHRoaXMuX2dldExvYWRlZFRpbGUocGFyZW50SWQpO1xuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRUaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGN1cnJlbnRJZCA9IHBhcmVudElkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDYWNoZSB0aGUgcmVzdWx0IG9mIHRoaXMgdHJhdmVyc2FsIHRvIGFsbCBuZXdseSB2aXNpdGVkIHRpbGVzXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBwYXRoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9hZGVkUGFyZW50VGlsZXNba2V5XSA9IHBhcmVudFRpbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgYSB0aWxlLCBnaXZlbiBpdHMgY29vcmRpbmF0ZSwgdG8gdGhlIHB5cmFtaWQuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfYWRkVGlsZSh0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQpOiBUaWxlIHtcbiAgICAgICAgbGV0IHRpbGUgPSB0aGlzLl90aWxlc1t0aWxlSUQua2V5XTtcbiAgICAgICAgaWYgKHRpbGUpXG4gICAgICAgICAgICByZXR1cm4gdGlsZTtcblxuICAgICAgICB0aWxlID0gdGhpcy5fY2FjaGUuZ2V0QW5kUmVtb3ZlKHRpbGVJRCk7XG4gICAgICAgIGlmICh0aWxlKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRUaWxlUmVsb2FkVGltZXIodGlsZUlELmtleSwgdGlsZSk7XG4gICAgICAgICAgICAvLyBzZXQgdGhlIHRpbGVJRCBiZWNhdXNlIHRoZSBjYWNoZWQgdGlsZSBjb3VsZCBoYXZlIGhhZCBhIGRpZmZlcmVudCB3cmFwIHZhbHVlXG4gICAgICAgICAgICB0aWxlLnRpbGVJRCA9IHRpbGVJRDtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlLmluaXRpYWxpemVUaWxlU3RhdGUodGlsZSwgdGhpcy5tYXAgPyB0aGlzLm1hcC5wYWludGVyIDogbnVsbCk7XG4gICAgICAgICAgICBpZiAodGhpcy5fY2FjaGVUaW1lcnNbdGlsZUlELmtleV0pIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fY2FjaGVUaW1lcnNbdGlsZUlELmtleV0pO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jYWNoZVRpbWVyc1t0aWxlSUQua2V5XTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRUaWxlUmVsb2FkVGltZXIodGlsZUlELmtleSwgdGlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjYWNoZWQgPSBCb29sZWFuKHRpbGUpO1xuICAgICAgICBpZiAoIWNhY2hlZCkge1xuICAgICAgICAgICAgdGlsZSA9IG5ldyBUaWxlKHRpbGVJRCwgdGhpcy5fc291cmNlLnRpbGVTaXplICogdGlsZUlELm92ZXJzY2FsZUZhY3RvcigpKTtcbiAgICAgICAgICAgIHRoaXMuX2xvYWRUaWxlKHRpbGUsIHRoaXMuX3RpbGVMb2FkZWQuYmluZCh0aGlzLCB0aWxlLCB0aWxlSUQua2V5LCB0aWxlLnN0YXRlKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbXBvc3NpYmxlLCBidXQgc2lsZW5jZSBmbG93LlxuICAgICAgICBpZiAoIXRpbGUpIHJldHVybiAobnVsbDogYW55KTtcblxuICAgICAgICB0aWxlLnVzZXMrKztcbiAgICAgICAgdGhpcy5fdGlsZXNbdGlsZUlELmtleV0gPSB0aWxlO1xuICAgICAgICBpZiAoIWNhY2hlZCkgdGhpcy5fc291cmNlLmZpcmUobmV3IEV2ZW50KCdkYXRhbG9hZGluZycsIHt0aWxlLCBjb29yZDogdGlsZS50aWxlSUQsIGRhdGFUeXBlOiAnc291cmNlJ30pKTtcblxuICAgICAgICByZXR1cm4gdGlsZTtcbiAgICB9XG5cbiAgICBfc2V0VGlsZVJlbG9hZFRpbWVyKGlkOiBzdHJpbmcsIHRpbGU6IFRpbGUpIHtcbiAgICAgICAgaWYgKGlkIGluIHRoaXMuX3RpbWVycykge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyc1tpZF0pO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3RpbWVyc1tpZF07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBleHBpcnlUaW1lb3V0ID0gdGlsZS5nZXRFeHBpcnlUaW1lb3V0KCk7XG4gICAgICAgIGlmIChleHBpcnlUaW1lb3V0KSB7XG4gICAgICAgICAgICB0aGlzLl90aW1lcnNbaWRdID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVsb2FkVGlsZShpZCwgJ2V4cGlyZWQnKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fdGltZXJzW2lkXTtcbiAgICAgICAgICAgIH0sIGV4cGlyeVRpbWVvdXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGEgdGlsZSwgZ2l2ZW4gaXRzIGlkLCBmcm9tIHRoZSBweXJhbWlkXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfcmVtb3ZlVGlsZShpZDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHRpbGUgPSB0aGlzLl90aWxlc1tpZF07XG4gICAgICAgIGlmICghdGlsZSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICB0aWxlLnVzZXMtLTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3RpbGVzW2lkXTtcbiAgICAgICAgaWYgKHRoaXMuX3RpbWVyc1tpZF0pIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lcnNbaWRdKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl90aW1lcnNbaWRdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRpbGUudXNlcyA+IDApXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgaWYgKHRpbGUuaGFzRGF0YSgpICYmIHRpbGUuc3RhdGUgIT09ICdyZWxvYWRpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLl9jYWNoZS5hZGQodGlsZS50aWxlSUQsIHRpbGUsIHRpbGUuZ2V0RXhwaXJ5VGltZW91dCgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRpbGUuYWJvcnRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9hYm9ydFRpbGUodGlsZSk7XG4gICAgICAgICAgICB0aGlzLl91bmxvYWRUaWxlKHRpbGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFsbCB0aWxlcyBmcm9tIHRoaXMgcHlyYW1pZFxuICAgICAqL1xuICAgIGNsZWFyVGlsZXMoKSB7XG4gICAgICAgIHRoaXMuX3Nob3VsZFJlbG9hZE9uUmVzdW1lID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5fdGlsZXMpXG4gICAgICAgICAgICB0aGlzLl9yZW1vdmVUaWxlKGlkKTtcblxuICAgICAgICB0aGlzLl9jYWNoZS5yZXNldCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlYXJjaCB0aHJvdWdoIG91ciBjdXJyZW50IHRpbGVzIGFuZCBhdHRlbXB0IHRvIGZpbmQgdGhlIHRpbGVzIHRoYXRcbiAgICAgKiBjb3ZlciB0aGUgZ2l2ZW4gYm91bmRzLlxuICAgICAqIEBwYXJhbSBwb2ludFF1ZXJ5R2VvbWV0cnkgY29vcmRpbmF0ZXMgb2YgdGhlIGNvcm5lcnMgb2YgYm91bmRpbmcgcmVjdGFuZ2xlXG4gICAgICogQHJldHVybnMge0FycmF5PE9iamVjdD59IHJlc3VsdCBpdGVtcyBoYXZlIHt0aWxlLCBtaW5YLCBtYXhYLCBtaW5ZLCBtYXhZfSwgd2hlcmUgbWluL21heCBib3VuZGluZyB2YWx1ZXMgYXJlIHRoZSBnaXZlbiBib3VuZHMgdHJhbnNmb3JtZWQgaW4gaW50byB0aGUgY29vcmRpbmF0ZSBzcGFjZSBvZiB0aGlzIHRpbGUuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB0aWxlc0luKHBvaW50UXVlcnlHZW9tZXRyeTogQXJyYXk8UG9pbnQ+LCBtYXhQaXRjaFNjYWxlRmFjdG9yOiBudW1iZXIsIGhhczNETGF5ZXI6IGJvb2xlYW4pIHtcblxuICAgICAgICBjb25zdCB0aWxlUmVzdWx0cyA9IFtdO1xuXG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IHRoaXMudHJhbnNmb3JtO1xuICAgICAgICBpZiAoIXRyYW5zZm9ybSkgcmV0dXJuIHRpbGVSZXN1bHRzO1xuXG4gICAgICAgIGNvbnN0IGNhbWVyYVBvaW50UXVlcnlHZW9tZXRyeSA9IGhhczNETGF5ZXIgP1xuICAgICAgICAgICAgdHJhbnNmb3JtLmdldENhbWVyYVF1ZXJ5R2VvbWV0cnkocG9pbnRRdWVyeUdlb21ldHJ5KSA6XG4gICAgICAgICAgICBwb2ludFF1ZXJ5R2VvbWV0cnk7XG5cbiAgICAgICAgY29uc3QgcXVlcnlHZW9tZXRyeSA9IHBvaW50UXVlcnlHZW9tZXRyeS5tYXAoKHApID0+IHRyYW5zZm9ybS5wb2ludENvb3JkaW5hdGUocCkpO1xuICAgICAgICBjb25zdCBjYW1lcmFRdWVyeUdlb21ldHJ5ID0gY2FtZXJhUG9pbnRRdWVyeUdlb21ldHJ5Lm1hcCgocCkgPT4gdHJhbnNmb3JtLnBvaW50Q29vcmRpbmF0ZShwKSk7XG5cbiAgICAgICAgY29uc3QgaWRzID0gdGhpcy5nZXRJZHMoKTtcblxuICAgICAgICBsZXQgbWluWCA9IEluZmluaXR5O1xuICAgICAgICBsZXQgbWluWSA9IEluZmluaXR5O1xuICAgICAgICBsZXQgbWF4WCA9IC1JbmZpbml0eTtcbiAgICAgICAgbGV0IG1heFkgPSAtSW5maW5pdHk7XG5cbiAgICAgICAgZm9yIChjb25zdCBwIG9mIGNhbWVyYVF1ZXJ5R2VvbWV0cnkpIHtcbiAgICAgICAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCBwLngpO1xuICAgICAgICAgICAgbWluWSA9IE1hdGgubWluKG1pblksIHAueSk7XG4gICAgICAgICAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgcC54KTtcbiAgICAgICAgICAgIG1heFkgPSBNYXRoLm1heChtYXhZLCBwLnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbGUgPSB0aGlzLl90aWxlc1tpZHNbaV1dO1xuICAgICAgICAgICAgaWYgKHRpbGUuaG9sZGluZ0ZvckZhZGUoKSkge1xuICAgICAgICAgICAgICAgIC8vIFRpbGVzIGhlbGQgZm9yIGZhZGluZyBhcmUgY292ZXJlZCBieSB0aWxlcyB0aGF0IGFyZSBjbG9zZXIgdG8gaWRlYWxcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRpbGVJRCA9IHRpbGUudGlsZUlEO1xuICAgICAgICAgICAgY29uc3Qgc2NhbGUgPSBNYXRoLnBvdygyLCB0cmFuc2Zvcm0uem9vbSAtIHRpbGUudGlsZUlELm92ZXJzY2FsZWRaKTtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFkZGluZyA9IG1heFBpdGNoU2NhbGVGYWN0b3IgKiB0aWxlLnF1ZXJ5UGFkZGluZyAqIEVYVEVOVCAvIHRpbGUudGlsZVNpemUgLyBzY2FsZTtcblxuICAgICAgICAgICAgY29uc3QgdGlsZVNwYWNlQm91bmRzID0gW1xuICAgICAgICAgICAgICAgIHRpbGVJRC5nZXRUaWxlUG9pbnQobmV3IE1lcmNhdG9yQ29vcmRpbmF0ZShtaW5YLCBtaW5ZKSksXG4gICAgICAgICAgICAgICAgdGlsZUlELmdldFRpbGVQb2ludChuZXcgTWVyY2F0b3JDb29yZGluYXRlKG1heFgsIG1heFkpKVxuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgaWYgKHRpbGVTcGFjZUJvdW5kc1swXS54IC0gcXVlcnlQYWRkaW5nIDwgRVhURU5UICYmIHRpbGVTcGFjZUJvdW5kc1swXS55IC0gcXVlcnlQYWRkaW5nIDwgRVhURU5UICYmXG4gICAgICAgICAgICAgICAgdGlsZVNwYWNlQm91bmRzWzFdLnggKyBxdWVyeVBhZGRpbmcgPj0gMCAmJiB0aWxlU3BhY2VCb3VuZHNbMV0ueSArIHF1ZXJ5UGFkZGluZyA+PSAwKSB7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0aWxlU3BhY2VRdWVyeUdlb21ldHJ5OiBBcnJheTxQb2ludD4gPSBxdWVyeUdlb21ldHJ5Lm1hcCgoYykgPT4gdGlsZUlELmdldFRpbGVQb2ludChjKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGlsZVNwYWNlQ2FtZXJhUXVlcnlHZW9tZXRyeSA9IGNhbWVyYVF1ZXJ5R2VvbWV0cnkubWFwKChjKSA9PiB0aWxlSUQuZ2V0VGlsZVBvaW50KGMpKTtcblxuICAgICAgICAgICAgICAgIHRpbGVSZXN1bHRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICB0aWxlLFxuICAgICAgICAgICAgICAgICAgICB0aWxlSUQsXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5R2VvbWV0cnk6IHRpbGVTcGFjZVF1ZXJ5R2VvbWV0cnksXG4gICAgICAgICAgICAgICAgICAgIGNhbWVyYVF1ZXJ5R2VvbWV0cnk6IHRpbGVTcGFjZUNhbWVyYVF1ZXJ5R2VvbWV0cnksXG4gICAgICAgICAgICAgICAgICAgIHNjYWxlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGlsZVJlc3VsdHM7XG4gICAgfVxuXG4gICAgZ2V0VmlzaWJsZUNvb3JkaW5hdGVzKHN5bWJvbExheWVyPzogYm9vbGVhbik6IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+IHtcbiAgICAgICAgY29uc3QgY29vcmRzID0gdGhpcy5nZXRSZW5kZXJhYmxlSWRzKHN5bWJvbExheWVyKS5tYXAoKGlkKSA9PiB0aGlzLl90aWxlc1tpZF0udGlsZUlEKTtcbiAgICAgICAgZm9yIChjb25zdCBjb29yZCBvZiBjb29yZHMpIHtcbiAgICAgICAgICAgIGNvb3JkLnBvc01hdHJpeCA9IHRoaXMudHJhbnNmb3JtLmNhbGN1bGF0ZVBvc01hdHJpeChjb29yZC50b1Vud3JhcHBlZCgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29vcmRzO1xuICAgIH1cblxuICAgIGhhc1RyYW5zaXRpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLl9zb3VyY2UuaGFzVHJhbnNpdGlvbigpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1Jhc3RlclR5cGUodGhpcy5fc291cmNlLnR5cGUpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuX3RpbGVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGlsZSA9IHRoaXMuX3RpbGVzW2lkXTtcbiAgICAgICAgICAgICAgICBpZiAodGlsZS5mYWRlRW5kVGltZSAhPT0gdW5kZWZpbmVkICYmIHRpbGUuZmFkZUVuZFRpbWUgPj0gYnJvd3Nlci5ub3coKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSB2YWx1ZSBvZiBhIHBhcnRpY3VsYXIgc3RhdGUgZm9yIGEgZmVhdHVyZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgc2V0RmVhdHVyZVN0YXRlKHNvdXJjZUxheWVyPzogc3RyaW5nLCBmZWF0dXJlSWQ6IG51bWJlciB8IHN0cmluZywgc3RhdGU6IE9iamVjdCkge1xuICAgICAgICBzb3VyY2VMYXllciA9IHNvdXJjZUxheWVyIHx8ICdfZ2VvanNvblRpbGVMYXllcic7XG4gICAgICAgIHRoaXMuX3N0YXRlLnVwZGF0ZVN0YXRlKHNvdXJjZUxheWVyLCBmZWF0dXJlSWQsIHN0YXRlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNldHMgdGhlIHZhbHVlIG9mIGEgcGFydGljdWxhciBzdGF0ZSBrZXkgZm9yIGEgZmVhdHVyZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcmVtb3ZlRmVhdHVyZVN0YXRlKHNvdXJjZUxheWVyPzogc3RyaW5nLCBmZWF0dXJlSWQ/OiBudW1iZXIgfCBzdHJpbmcsIGtleT86IHN0cmluZykge1xuICAgICAgICBzb3VyY2VMYXllciA9IHNvdXJjZUxheWVyIHx8ICdfZ2VvanNvblRpbGVMYXllcic7XG4gICAgICAgIHRoaXMuX3N0YXRlLnJlbW92ZUZlYXR1cmVTdGF0ZShzb3VyY2VMYXllciwgZmVhdHVyZUlkLCBrZXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgZW50aXJlIHN0YXRlIG9iamVjdCBmb3IgYSBmZWF0dXJlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBnZXRGZWF0dXJlU3RhdGUoc291cmNlTGF5ZXI/OiBzdHJpbmcsIGZlYXR1cmVJZDogbnVtYmVyIHwgc3RyaW5nKSB7XG4gICAgICAgIHNvdXJjZUxheWVyID0gc291cmNlTGF5ZXIgfHwgJ19nZW9qc29uVGlsZUxheWVyJztcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlLmdldFN0YXRlKHNvdXJjZUxheWVyLCBmZWF0dXJlSWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHNldCBvZiBrZXlzIHRoYXQgdGhlIHRpbGUgZGVwZW5kcyBvbi4gVGhpcyBhbGxvd3MgdGlsZXMgdG9cbiAgICAgKiBiZSByZWxvYWRlZCB3aGVuIHRoZWlyIGRlcGVuZGVuY2llcyBjaGFuZ2UuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBzZXREZXBlbmRlbmNpZXModGlsZUtleTogc3RyaW5nLCBuYW1lc3BhY2U6IHN0cmluZywgZGVwZW5kZW5jaWVzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIGNvbnN0IHRpbGUgPSB0aGlzLl90aWxlc1t0aWxlS2V5XTtcbiAgICAgICAgaWYgKHRpbGUpIHtcbiAgICAgICAgICAgIHRpbGUuc2V0RGVwZW5kZW5jaWVzKG5hbWVzcGFjZSwgZGVwZW5kZW5jaWVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbG9hZHMgYWxsIHRpbGVzIHRoYXQgZGVwZW5kIG9uIHRoZSBnaXZlbiBrZXlzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcmVsb2FkVGlsZXNGb3JEZXBlbmRlbmNpZXMobmFtZXNwYWNlczogQXJyYXk8c3RyaW5nPiwga2V5czogQXJyYXk8c3RyaW5nPikge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuX3RpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCB0aWxlID0gdGhpcy5fdGlsZXNbaWRdO1xuICAgICAgICAgICAgaWYgKHRpbGUuaGFzRGVwZW5kZW5jeShuYW1lc3BhY2VzLCBrZXlzKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbG9hZFRpbGUoaWQsICdyZWxvYWRpbmcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jYWNoZS5maWx0ZXIodGlsZSA9PiAhdGlsZS5oYXNEZXBlbmRlbmN5KG5hbWVzcGFjZXMsIGtleXMpKTtcbiAgICB9XG59XG5cblNvdXJjZUNhY2hlLm1heE92ZXJ6b29taW5nID0gMTA7XG5Tb3VyY2VDYWNoZS5tYXhVbmRlcnpvb21pbmcgPSAzO1xuXG5mdW5jdGlvbiBjb21wYXJlVGlsZUlkKGE6IE92ZXJzY2FsZWRUaWxlSUQsIGI6IE92ZXJzY2FsZWRUaWxlSUQpOiBudW1iZXIge1xuICAgIC8vIERpZmZlcmVudCBjb3BpZXMgb2YgdGhlIHdvcmxkIGFyZSBzb3J0ZWQgYmFzZWQgb24gdGhlaXIgZGlzdGFuY2UgdG8gdGhlIGNlbnRlci5cbiAgICAvLyBXcmFwIHZhbHVlcyBhcmUgY29udmVydGVkIHRvIHVuc2lnbmVkIGRpc3RhbmNlcyBieSByZXNlcnZpbmcgb2RkIG51bWJlciBmb3IgY29waWVzXG4gICAgLy8gd2l0aCBuZWdhdGl2ZSB3cmFwIGFuZCBldmVuIG51bWJlcnMgZm9yIGNvcGllcyB3aXRoIHBvc2l0aXZlIHdyYXAuXG4gICAgY29uc3QgYVdyYXAgPSBNYXRoLmFicyhhLndyYXAgKiAyKSAtICsoYS53cmFwIDwgMCk7XG4gICAgY29uc3QgYldyYXAgPSBNYXRoLmFicyhiLndyYXAgKiAyKSAtICsoYi53cmFwIDwgMCk7XG4gICAgcmV0dXJuIGEub3ZlcnNjYWxlZFogLSBiLm92ZXJzY2FsZWRaIHx8IGJXcmFwIC0gYVdyYXAgfHwgYi5jYW5vbmljYWwueSAtIGEuY2Fub25pY2FsLnkgfHwgYi5jYW5vbmljYWwueCAtIGEuY2Fub25pY2FsLng7XG59XG5cbmZ1bmN0aW9uIGlzUmFzdGVyVHlwZSh0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgPT09ICdyYXN0ZXInIHx8IHR5cGUgPT09ICdpbWFnZScgfHwgdHlwZSA9PT0gJ3ZpZGVvJztcbn1cblxuZXhwb3J0IGRlZmF1bHQgU291cmNlQ2FjaGU7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgd2luZG93IGZyb20gJy4uL3dpbmRvdyc7XG5pbXBvcnQgbWFwYm94Z2wgZnJvbSAnLi4vLi4vJztcblxuaW1wb3J0IHR5cGUge1dvcmtlckludGVyZmFjZX0gZnJvbSAnLi4vd2ViX3dvcmtlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpOiBXb3JrZXJJbnRlcmZhY2Uge1xuICAgIHJldHVybiAobmV3IHdpbmRvdy5Xb3JrZXIobWFwYm94Z2wud29ya2VyVXJsKTogYW55KTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBXZWJXb3JrZXIgZnJvbSAnLi93ZWJfd29ya2VyJztcbmltcG9ydCB0eXBlIHtXb3JrZXJJbnRlcmZhY2V9IGZyb20gJy4vd2ViX3dvcmtlcic7XG5pbXBvcnQgYnJvd3NlciBmcm9tICcuL2Jyb3dzZXInO1xuXG5leHBvcnQgY29uc3QgUFJFTE9BRF9QT09MX0lEID0gJ21hcGJveGdsX3ByZWxvYWRlZF93b3JrZXJfcG9vbCc7XG5cbi8qKlxuICogQ29uc3RydWN0cyBhIHdvcmtlciBwb29sLlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV29ya2VyUG9vbCB7XG4gICAgc3RhdGljIHdvcmtlckNvdW50OiBudW1iZXI7XG5cbiAgICBhY3RpdmU6IHtbXzogbnVtYmVyIHwgc3RyaW5nXTogYm9vbGVhbn07XG4gICAgd29ya2VyczogQXJyYXk8V29ya2VySW50ZXJmYWNlPjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IHt9O1xuICAgIH1cblxuICAgIGFjcXVpcmUobWFwSWQ6IG51bWJlciB8IHN0cmluZyk6IEFycmF5PFdvcmtlckludGVyZmFjZT4ge1xuICAgICAgICBpZiAoIXRoaXMud29ya2Vycykge1xuICAgICAgICAgICAgLy8gTGF6aWx5IGxvb2sgdXAgdGhlIHZhbHVlIG9mIG1hcGJveGdsLndvcmtlckNvdW50IHNvIHRoYXRcbiAgICAgICAgICAgIC8vIGNsaWVudCBjb2RlIGhhcyBoYWQgYSBjaGFuY2UgdG8gc2V0IGl0LlxuICAgICAgICAgICAgdGhpcy53b3JrZXJzID0gW107XG4gICAgICAgICAgICB3aGlsZSAodGhpcy53b3JrZXJzLmxlbmd0aCA8IFdvcmtlclBvb2wud29ya2VyQ291bnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLndvcmtlcnMucHVzaChuZXcgV2ViV29ya2VyKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hY3RpdmVbbWFwSWRdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMud29ya2Vycy5zbGljZSgpO1xuICAgIH1cblxuICAgIHJlbGVhc2UobWFwSWQ6IG51bWJlciB8IHN0cmluZykge1xuICAgICAgICBkZWxldGUgdGhpcy5hY3RpdmVbbWFwSWRdO1xuICAgICAgICBpZiAodGhpcy5udW1BY3RpdmUoKSA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy53b3JrZXJzLmZvckVhY2goKHcpID0+IHtcbiAgICAgICAgICAgICAgICB3LnRlcm1pbmF0ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLndvcmtlcnMgPSAobnVsbDogYW55KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzUHJlbG9hZGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmFjdGl2ZVtQUkVMT0FEX1BPT0xfSURdO1xuICAgIH1cblxuICAgIG51bUFjdGl2ZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5hY3RpdmUpLmxlbmd0aDtcbiAgICB9XG59XG5cbmNvbnN0IGF2YWlsYWJsZUxvZ2ljYWxQcm9jZXNzb3JzID0gTWF0aC5mbG9vcihicm93c2VyLmhhcmR3YXJlQ29uY3VycmVuY3kgLyAyKTtcbldvcmtlclBvb2wud29ya2VyQ291bnQgPSBNYXRoLm1heChNYXRoLm1pbihhdmFpbGFibGVMb2dpY2FsUHJvY2Vzc29ycywgNiksIDEpO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFdvcmtlclBvb2wsIHtQUkVMT0FEX1BPT0xfSUR9IGZyb20gJy4vd29ya2VyX3Bvb2wnO1xuXG5sZXQgZ2xvYmFsV29ya2VyUG9vbDtcblxuLyoqXG4gKiBDcmVhdGVzIChpZiBuZWNlc3NhcnkpIGFuZCByZXR1cm5zIHRoZSBzaW5nbGUsIGdsb2JhbCBXb3JrZXJQb29sIGluc3RhbmNlXG4gKiB0byBiZSBzaGFyZWQgYWNyb3NzIGVhY2ggTWFwXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRHbG9iYWxXb3JrZXJQb29sICgpIHtcbiAgICBpZiAoIWdsb2JhbFdvcmtlclBvb2wpIHtcbiAgICAgICAgZ2xvYmFsV29ya2VyUG9vbCA9IG5ldyBXb3JrZXJQb29sKCk7XG4gICAgfVxuICAgIHJldHVybiBnbG9iYWxXb3JrZXJQb29sO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJld2FybSgpIHtcbiAgICBjb25zdCB3b3JrZXJQb29sID0gZ2V0R2xvYmFsV29ya2VyUG9vbCgpO1xuICAgIHdvcmtlclBvb2wuYWNxdWlyZShQUkVMT0FEX1BPT0xfSUQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJQcmV3YXJtZWRSZXNvdXJjZXMoKSB7XG4gICAgY29uc3QgcG9vbCA9IGdsb2JhbFdvcmtlclBvb2w7XG4gICAgaWYgKHBvb2wpIHtcbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBwb29sIG9ubHkgaWYgYWxsIG1hcHMgdGhhdCByZWZlcmVuY2VkIHRoZSBwcmVsb2FkZWQgZ2xvYmFsIHdvcmtlciBwb29sIGhhdmUgYmVlbiByZW1vdmVkLlxuICAgICAgICBpZiAocG9vbC5pc1ByZWxvYWRlZCgpICYmIHBvb2wubnVtQWN0aXZlKCkgPT09IDEpIHtcbiAgICAgICAgICAgIHBvb2wucmVsZWFzZShQUkVMT0FEX1BPT0xfSUQpO1xuICAgICAgICAgICAgZ2xvYmFsV29ya2VyUG9vbCA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0NvdWxkIG5vdCBjbGVhciBXZWJXb3JrZXJzIHNpbmNlIHRoZXJlIGFyZSBhY3RpdmUgTWFwIGluc3RhbmNlcyB0aGF0IHN0aWxsIHJlZmVyZW5jZSBpdC4gVGhlIHByZS13YXJtZWQgV2ViV29ya2VyIHBvb2wgY2FuIG9ubHkgYmUgY2xlYXJlZCB3aGVuIGFsbCBtYXAgaW5zdGFuY2VzIGhhdmUgYmVlbiByZW1vdmVkIHdpdGggbWFwLnJlbW92ZSgpJyk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJcbmltcG9ydCByZWZQcm9wZXJ0aWVzIGZyb20gJy4vdXRpbC9yZWZfcHJvcGVydGllcyc7XG5cbmZ1bmN0aW9uIGRlcmVmKGxheWVyLCBwYXJlbnQpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcblxuICAgIGZvciAoY29uc3QgayBpbiBsYXllcikge1xuICAgICAgICBpZiAoayAhPT0gJ3JlZicpIHtcbiAgICAgICAgICAgIHJlc3VsdFtrXSA9IGxheWVyW2tdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVmUHJvcGVydGllcy5mb3JFYWNoKChrKSA9PiB7XG4gICAgICAgIGlmIChrIGluIHBhcmVudCkge1xuICAgICAgICAgICAgcmVzdWx0W2tdID0gcGFyZW50W2tdO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBkZXJlZkxheWVycztcblxuLyoqXG4gKiBHaXZlbiBhbiBhcnJheSBvZiBsYXllcnMsIHNvbWUgb2Ygd2hpY2ggbWF5IGNvbnRhaW4gYHJlZmAgcHJvcGVydGllc1xuICogd2hvc2UgdmFsdWUgaXMgdGhlIGBpZGAgb2YgYW5vdGhlciBwcm9wZXJ0eSwgcmV0dXJuIGEgbmV3IGFycmF5IHdoZXJlXG4gKiBzdWNoIGxheWVycyBoYXZlIGJlZW4gYXVnbWVudGVkIHdpdGggdGhlICd0eXBlJywgJ3NvdXJjZScsIGV0Yy4gcHJvcGVydGllc1xuICogZnJvbSB0aGUgcGFyZW50IGxheWVyLCBhbmQgdGhlIGByZWZgIHByb3BlcnR5IGhhcyBiZWVuIHJlbW92ZWQuXG4gKlxuICogVGhlIGlucHV0IGlzIG5vdCBtb2RpZmllZC4gVGhlIG91dHB1dCBtYXkgY29udGFpbiByZWZlcmVuY2VzIHRvIHBvcnRpb25zXG4gKiBvZiB0aGUgaW5wdXQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXk8TGF5ZXI+fSBsYXllcnNcbiAqIEByZXR1cm5zIHtBcnJheTxMYXllcj59XG4gKi9cbmZ1bmN0aW9uIGRlcmVmTGF5ZXJzKGxheWVycykge1xuICAgIGxheWVycyA9IGxheWVycy5zbGljZSgpO1xuXG4gICAgY29uc3QgbWFwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxheWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBtYXBbbGF5ZXJzW2ldLmlkXSA9IGxheWVyc1tpXTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxheWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoJ3JlZicgaW4gbGF5ZXJzW2ldKSB7XG4gICAgICAgICAgICBsYXllcnNbaV0gPSBkZXJlZihsYXllcnNbaV0sIG1hcFtsYXllcnNbaV0ucmVmXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGF5ZXJzO1xufVxuIiwiaW1wb3J0IGxhdGVzdCBmcm9tICcuL3JlZmVyZW5jZS9sYXRlc3QnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBlbXB0eVN0eWxlKCkge1xuICAgIGNvbnN0IHN0eWxlID0ge307XG5cbiAgICBjb25zdCB2ZXJzaW9uID0gbGF0ZXN0WyckdmVyc2lvbiddO1xuICAgIGZvciAoY29uc3Qgc3R5bGVLZXkgaW4gbGF0ZXN0Wyckcm9vdCddKSB7XG4gICAgICAgIGNvbnN0IHNwZWMgPSBsYXRlc3RbJyRyb290J11bc3R5bGVLZXldO1xuXG4gICAgICAgIGlmIChzcGVjLnJlcXVpcmVkKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgaWYgKHN0eWxlS2V5ID09PSAndmVyc2lvbicpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZlcnNpb247XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChzcGVjLnR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBbXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBzdHlsZVtzdHlsZUtleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdHlsZTtcbn1cbiIsIlxuaW1wb3J0IGlzRXF1YWwgZnJvbSAnLi91dGlsL2RlZXBfZXF1YWwnO1xuXG5jb25zdCBvcGVyYXRpb25zID0ge1xuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRTdHlsZScsIGFyZ3M6IFtzdHlsZXNoZWV0XSB9XG4gICAgICovXG4gICAgc2V0U3R5bGU6ICdzZXRTdHlsZScsXG5cbiAgICAvKlxuICAgICAqIHsgY29tbWFuZDogJ2FkZExheWVyJywgYXJnczogW2xheWVyLCAnYmVmb3JlTGF5ZXJJZCddIH1cbiAgICAgKi9cbiAgICBhZGRMYXllcjogJ2FkZExheWVyJyxcblxuICAgIC8qXG4gICAgICogeyBjb21tYW5kOiAncmVtb3ZlTGF5ZXInLCBhcmdzOiBbJ2xheWVySWQnXSB9XG4gICAgICovXG4gICAgcmVtb3ZlTGF5ZXI6ICdyZW1vdmVMYXllcicsXG5cbiAgICAvKlxuICAgICAqIHsgY29tbWFuZDogJ3NldFBhaW50UHJvcGVydHknLCBhcmdzOiBbJ2xheWVySWQnLCAncHJvcCcsIHZhbHVlXSB9XG4gICAgICovXG4gICAgc2V0UGFpbnRQcm9wZXJ0eTogJ3NldFBhaW50UHJvcGVydHknLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRMYXlvdXRQcm9wZXJ0eScsIGFyZ3M6IFsnbGF5ZXJJZCcsICdwcm9wJywgdmFsdWVdIH1cbiAgICAgKi9cbiAgICBzZXRMYXlvdXRQcm9wZXJ0eTogJ3NldExheW91dFByb3BlcnR5JyxcblxuICAgIC8qXG4gICAgICogeyBjb21tYW5kOiAnc2V0RmlsdGVyJywgYXJnczogWydsYXllcklkJywgZmlsdGVyXSB9XG4gICAgICovXG4gICAgc2V0RmlsdGVyOiAnc2V0RmlsdGVyJyxcblxuICAgIC8qXG4gICAgICogeyBjb21tYW5kOiAnYWRkU291cmNlJywgYXJnczogWydzb3VyY2VJZCcsIHNvdXJjZV0gfVxuICAgICAqL1xuICAgIGFkZFNvdXJjZTogJ2FkZFNvdXJjZScsXG5cbiAgICAvKlxuICAgICAqIHsgY29tbWFuZDogJ3JlbW92ZVNvdXJjZScsIGFyZ3M6IFsnc291cmNlSWQnXSB9XG4gICAgICovXG4gICAgcmVtb3ZlU291cmNlOiAncmVtb3ZlU291cmNlJyxcblxuICAgIC8qXG4gICAgICogeyBjb21tYW5kOiAnc2V0R2VvSlNPTlNvdXJjZURhdGEnLCBhcmdzOiBbJ3NvdXJjZUlkJywgZGF0YV0gfVxuICAgICAqL1xuICAgIHNldEdlb0pTT05Tb3VyY2VEYXRhOiAnc2V0R2VvSlNPTlNvdXJjZURhdGEnLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRMYXllclpvb21SYW5nZScsIGFyZ3M6IFsnbGF5ZXJJZCcsIDAsIDIyXSB9XG4gICAgICovXG4gICAgc2V0TGF5ZXJab29tUmFuZ2U6ICdzZXRMYXllclpvb21SYW5nZScsXG5cbiAgICAvKlxuICAgICAqIHsgY29tbWFuZDogJ3NldExheWVyUHJvcGVydHknLCBhcmdzOiBbJ2xheWVySWQnLCAncHJvcCcsIHZhbHVlXSB9XG4gICAgICovXG4gICAgc2V0TGF5ZXJQcm9wZXJ0eTogJ3NldExheWVyUHJvcGVydHknLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRDZW50ZXInLCBhcmdzOiBbW2xvbiwgbGF0XV0gfVxuICAgICAqL1xuICAgIHNldENlbnRlcjogJ3NldENlbnRlcicsXG5cbiAgICAvKlxuICAgICAqIHsgY29tbWFuZDogJ3NldFpvb20nLCBhcmdzOiBbem9vbV0gfVxuICAgICAqL1xuICAgIHNldFpvb206ICdzZXRab29tJyxcblxuICAgIC8qXG4gICAgICogeyBjb21tYW5kOiAnc2V0QmVhcmluZycsIGFyZ3M6IFtiZWFyaW5nXSB9XG4gICAgICovXG4gICAgc2V0QmVhcmluZzogJ3NldEJlYXJpbmcnLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRQaXRjaCcsIGFyZ3M6IFtwaXRjaF0gfVxuICAgICAqL1xuICAgIHNldFBpdGNoOiAnc2V0UGl0Y2gnLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRTcHJpdGUnLCBhcmdzOiBbJ3Nwcml0ZVVybCddIH1cbiAgICAgKi9cbiAgICBzZXRTcHJpdGU6ICdzZXRTcHJpdGUnLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRHbHlwaHMnLCBhcmdzOiBbJ2dseXBoc1VybCddIH1cbiAgICAgKi9cbiAgICBzZXRHbHlwaHM6ICdzZXRHbHlwaHMnLFxuXG4gICAgLypcbiAgICAgKiB7IGNvbW1hbmQ6ICdzZXRUcmFuc2l0aW9uJywgYXJnczogW3RyYW5zaXRpb25dIH1cbiAgICAgKi9cbiAgICBzZXRUcmFuc2l0aW9uOiAnc2V0VHJhbnNpdGlvbicsXG5cbiAgICAvKlxuICAgICAqIHsgY29tbWFuZDogJ3NldExpZ2h0aW5nJywgYXJnczogW2xpZ2h0UHJvcGVydGllc10gfVxuICAgICAqL1xuICAgIHNldExpZ2h0OiAnc2V0TGlnaHQnXG5cbn07XG5cbmZ1bmN0aW9uIGFkZFNvdXJjZShzb3VyY2VJZCwgYWZ0ZXIsIGNvbW1hbmRzKSB7XG4gICAgY29tbWFuZHMucHVzaCh7Y29tbWFuZDogb3BlcmF0aW9ucy5hZGRTb3VyY2UsIGFyZ3M6IFtzb3VyY2VJZCwgYWZ0ZXJbc291cmNlSWRdXX0pO1xufVxuXG5mdW5jdGlvbiByZW1vdmVTb3VyY2Uoc291cmNlSWQsIGNvbW1hbmRzLCBzb3VyY2VzUmVtb3ZlZCkge1xuICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMucmVtb3ZlU291cmNlLCBhcmdzOiBbc291cmNlSWRdfSk7XG4gICAgc291cmNlc1JlbW92ZWRbc291cmNlSWRdID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU291cmNlKHNvdXJjZUlkLCBhZnRlciwgY29tbWFuZHMsIHNvdXJjZXNSZW1vdmVkKSB7XG4gICAgcmVtb3ZlU291cmNlKHNvdXJjZUlkLCBjb21tYW5kcywgc291cmNlc1JlbW92ZWQpO1xuICAgIGFkZFNvdXJjZShzb3VyY2VJZCwgYWZ0ZXIsIGNvbW1hbmRzKTtcbn1cblxuZnVuY3Rpb24gY2FuVXBkYXRlR2VvSlNPTihiZWZvcmUsIGFmdGVyLCBzb3VyY2VJZCkge1xuICAgIGxldCBwcm9wO1xuICAgIGZvciAocHJvcCBpbiBiZWZvcmVbc291cmNlSWRdKSB7XG4gICAgICAgIGlmICghYmVmb3JlW3NvdXJjZUlkXS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgY29udGludWU7XG4gICAgICAgIGlmIChwcm9wICE9PSAnZGF0YScgJiYgIWlzRXF1YWwoYmVmb3JlW3NvdXJjZUlkXVtwcm9wXSwgYWZ0ZXJbc291cmNlSWRdW3Byb3BdKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAocHJvcCBpbiBhZnRlcltzb3VyY2VJZF0pIHtcbiAgICAgICAgaWYgKCFhZnRlcltzb3VyY2VJZF0uaGFzT3duUHJvcGVydHkocHJvcCkpIGNvbnRpbnVlO1xuICAgICAgICBpZiAocHJvcCAhPT0gJ2RhdGEnICYmICFpc0VxdWFsKGJlZm9yZVtzb3VyY2VJZF1bcHJvcF0sIGFmdGVyW3NvdXJjZUlkXVtwcm9wXSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZGlmZlNvdXJjZXMoYmVmb3JlLCBhZnRlciwgY29tbWFuZHMsIHNvdXJjZXNSZW1vdmVkKSB7XG4gICAgYmVmb3JlID0gYmVmb3JlIHx8IHt9O1xuICAgIGFmdGVyID0gYWZ0ZXIgfHwge307XG5cbiAgICBsZXQgc291cmNlSWQ7XG5cbiAgICAvLyBsb29rIGZvciBzb3VyY2VzIHRvIHJlbW92ZVxuICAgIGZvciAoc291cmNlSWQgaW4gYmVmb3JlKSB7XG4gICAgICAgIGlmICghYmVmb3JlLmhhc093blByb3BlcnR5KHNvdXJjZUlkKSkgY29udGludWU7XG4gICAgICAgIGlmICghYWZ0ZXIuaGFzT3duUHJvcGVydHkoc291cmNlSWQpKSB7XG4gICAgICAgICAgICByZW1vdmVTb3VyY2Uoc291cmNlSWQsIGNvbW1hbmRzLCBzb3VyY2VzUmVtb3ZlZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBsb29rIGZvciBzb3VyY2VzIHRvIGFkZC91cGRhdGVcbiAgICBmb3IgKHNvdXJjZUlkIGluIGFmdGVyKSB7XG4gICAgICAgIGlmICghYWZ0ZXIuaGFzT3duUHJvcGVydHkoc291cmNlSWQpKSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFiZWZvcmUuaGFzT3duUHJvcGVydHkoc291cmNlSWQpKSB7XG4gICAgICAgICAgICBhZGRTb3VyY2Uoc291cmNlSWQsIGFmdGVyLCBjb21tYW5kcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzRXF1YWwoYmVmb3JlW3NvdXJjZUlkXSwgYWZ0ZXJbc291cmNlSWRdKSkge1xuICAgICAgICAgICAgaWYgKGJlZm9yZVtzb3VyY2VJZF0udHlwZSA9PT0gJ2dlb2pzb24nICYmIGFmdGVyW3NvdXJjZUlkXS50eXBlID09PSAnZ2VvanNvbicgJiYgY2FuVXBkYXRlR2VvSlNPTihiZWZvcmUsIGFmdGVyLCBzb3VyY2VJZCkpIHtcbiAgICAgICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnNldEdlb0pTT05Tb3VyY2VEYXRhLCBhcmdzOiBbc291cmNlSWQsIGFmdGVyW3NvdXJjZUlkXS5kYXRhXX0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBubyB1cGRhdGUgY29tbWFuZCwgbXVzdCByZW1vdmUgdGhlbiBhZGRcbiAgICAgICAgICAgICAgICB1cGRhdGVTb3VyY2Uoc291cmNlSWQsIGFmdGVyLCBjb21tYW5kcywgc291cmNlc1JlbW92ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkaWZmTGF5ZXJQcm9wZXJ0eUNoYW5nZXMoYmVmb3JlLCBhZnRlciwgY29tbWFuZHMsIGxheWVySWQsIGtsYXNzLCBjb21tYW5kKSB7XG4gICAgYmVmb3JlID0gYmVmb3JlIHx8IHt9O1xuICAgIGFmdGVyID0gYWZ0ZXIgfHwge307XG5cbiAgICBsZXQgcHJvcDtcblxuICAgIGZvciAocHJvcCBpbiBiZWZvcmUpIHtcbiAgICAgICAgaWYgKCFiZWZvcmUuaGFzT3duUHJvcGVydHkocHJvcCkpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoIWlzRXF1YWwoYmVmb3JlW3Byb3BdLCBhZnRlcltwcm9wXSkpIHtcbiAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQsIGFyZ3M6IFtsYXllcklkLCBwcm9wLCBhZnRlcltwcm9wXSwga2xhc3NdfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yIChwcm9wIGluIGFmdGVyKSB7XG4gICAgICAgIGlmICghYWZ0ZXIuaGFzT3duUHJvcGVydHkocHJvcCkgfHwgYmVmb3JlLmhhc093blByb3BlcnR5KHByb3ApKSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFpc0VxdWFsKGJlZm9yZVtwcm9wXSwgYWZ0ZXJbcHJvcF0pKSB7XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kLCBhcmdzOiBbbGF5ZXJJZCwgcHJvcCwgYWZ0ZXJbcHJvcF0sIGtsYXNzXX0pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBwbHVja0lkKGxheWVyKSB7XG4gICAgcmV0dXJuIGxheWVyLmlkO1xufVxuZnVuY3Rpb24gaW5kZXhCeUlkKGdyb3VwLCBsYXllcikge1xuICAgIGdyb3VwW2xheWVyLmlkXSA9IGxheWVyO1xuICAgIHJldHVybiBncm91cDtcbn1cblxuZnVuY3Rpb24gZGlmZkxheWVycyhiZWZvcmUsIGFmdGVyLCBjb21tYW5kcykge1xuICAgIGJlZm9yZSA9IGJlZm9yZSB8fCBbXTtcbiAgICBhZnRlciA9IGFmdGVyIHx8IFtdO1xuXG4gICAgLy8gb3JkZXIgb2YgbGF5ZXJzIGJ5IGlkXG4gICAgY29uc3QgYmVmb3JlT3JkZXIgPSBiZWZvcmUubWFwKHBsdWNrSWQpO1xuICAgIGNvbnN0IGFmdGVyT3JkZXIgPSBhZnRlci5tYXAocGx1Y2tJZCk7XG5cbiAgICAvLyBpbmRleCBvZiBsYXllciBieSBpZFxuICAgIGNvbnN0IGJlZm9yZUluZGV4ID0gYmVmb3JlLnJlZHVjZShpbmRleEJ5SWQsIHt9KTtcbiAgICBjb25zdCBhZnRlckluZGV4ID0gYWZ0ZXIucmVkdWNlKGluZGV4QnlJZCwge30pO1xuXG4gICAgLy8gdHJhY2sgb3JkZXIgb2YgbGF5ZXJzIGFzIGlmIHRoZXkgaGF2ZSBiZWVuIG11dGF0ZWRcbiAgICBjb25zdCB0cmFja2VyID0gYmVmb3JlT3JkZXIuc2xpY2UoKTtcblxuICAgIC8vIGxheWVycyB0aGF0IGhhdmUgYmVlbiBhZGRlZCBkbyBub3QgbmVlZCB0byBiZSBkaWZmZWRcbiAgICBjb25zdCBjbGVhbiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICBsZXQgaSwgZCwgbGF5ZXJJZCwgYmVmb3JlTGF5ZXIsIGFmdGVyTGF5ZXIsIGluc2VydEJlZm9yZUxheWVySWQsIHByb3A7XG5cbiAgICAvLyByZW1vdmUgbGF5ZXJzXG4gICAgZm9yIChpID0gMCwgZCA9IDA7IGkgPCBiZWZvcmVPcmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICBsYXllcklkID0gYmVmb3JlT3JkZXJbaV07XG4gICAgICAgIGlmICghYWZ0ZXJJbmRleC5oYXNPd25Qcm9wZXJ0eShsYXllcklkKSkge1xuICAgICAgICAgICAgY29tbWFuZHMucHVzaCh7Y29tbWFuZDogb3BlcmF0aW9ucy5yZW1vdmVMYXllciwgYXJnczogW2xheWVySWRdfSk7XG4gICAgICAgICAgICB0cmFja2VyLnNwbGljZSh0cmFja2VyLmluZGV4T2YobGF5ZXJJZCwgZCksIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gbGltaXQgd2hlcmUgaW4gdHJhY2tlciB3ZSBuZWVkIHRvIGxvb2sgZm9yIGEgbWF0Y2hcbiAgICAgICAgICAgIGQrKztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFkZC9yZW9yZGVyIGxheWVyc1xuICAgIGZvciAoaSA9IDAsIGQgPSAwOyBpIDwgYWZ0ZXJPcmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyB3b3JrIGJhY2t3YXJkcyBhcyBpbnNlcnQgaXMgYmVmb3JlIGFuIGV4aXN0aW5nIGxheWVyXG4gICAgICAgIGxheWVySWQgPSBhZnRlck9yZGVyW2FmdGVyT3JkZXIubGVuZ3RoIC0gMSAtIGldO1xuXG4gICAgICAgIGlmICh0cmFja2VyW3RyYWNrZXIubGVuZ3RoIC0gMSAtIGldID09PSBsYXllcklkKSBjb250aW51ZTtcblxuICAgICAgICBpZiAoYmVmb3JlSW5kZXguaGFzT3duUHJvcGVydHkobGF5ZXJJZCkpIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgbGF5ZXIgYmVmb3JlIHdlIGluc2VydCBhdCB0aGUgY29ycmVjdCBwb3NpdGlvblxuICAgICAgICAgICAgY29tbWFuZHMucHVzaCh7Y29tbWFuZDogb3BlcmF0aW9ucy5yZW1vdmVMYXllciwgYXJnczogW2xheWVySWRdfSk7XG4gICAgICAgICAgICB0cmFja2VyLnNwbGljZSh0cmFja2VyLmxhc3RJbmRleE9mKGxheWVySWQsIHRyYWNrZXIubGVuZ3RoIC0gZCksIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gbGltaXQgd2hlcmUgaW4gdHJhY2tlciB3ZSBuZWVkIHRvIGxvb2sgZm9yIGEgbWF0Y2hcbiAgICAgICAgICAgIGQrKztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFkZCBsYXllciBhdCBjb3JyZWN0IHBvc2l0aW9uXG4gICAgICAgIGluc2VydEJlZm9yZUxheWVySWQgPSB0cmFja2VyW3RyYWNrZXIubGVuZ3RoIC0gaV07XG4gICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMuYWRkTGF5ZXIsIGFyZ3M6IFthZnRlckluZGV4W2xheWVySWRdLCBpbnNlcnRCZWZvcmVMYXllcklkXX0pO1xuICAgICAgICB0cmFja2VyLnNwbGljZSh0cmFja2VyLmxlbmd0aCAtIGksIDAsIGxheWVySWQpO1xuICAgICAgICBjbGVhbltsYXllcklkXSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIGxheWVyc1xuICAgIGZvciAoaSA9IDA7IGkgPCBhZnRlck9yZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxheWVySWQgPSBhZnRlck9yZGVyW2ldO1xuICAgICAgICBiZWZvcmVMYXllciA9IGJlZm9yZUluZGV4W2xheWVySWRdO1xuICAgICAgICBhZnRlckxheWVyID0gYWZ0ZXJJbmRleFtsYXllcklkXTtcblxuICAgICAgICAvLyBubyBuZWVkIHRvIHVwZGF0ZSBpZiBwcmV2aW91c2x5IGFkZGVkIChuZXcgb3IgbW92ZWQpXG4gICAgICAgIGlmIChjbGVhbltsYXllcklkXSB8fCBpc0VxdWFsKGJlZm9yZUxheWVyLCBhZnRlckxheWVyKSkgY29udGludWU7XG5cbiAgICAgICAgLy8gSWYgc291cmNlLCBzb3VyY2UtbGF5ZXIsIG9yIHR5cGUgaGF2ZSBjaGFuZ2VzLCB0aGVuIHJlbW92ZSB0aGUgbGF5ZXJcbiAgICAgICAgLy8gYW5kIGFkZCBpdCBiYWNrICdmcm9tIHNjcmF0Y2gnLlxuICAgICAgICBpZiAoIWlzRXF1YWwoYmVmb3JlTGF5ZXIuc291cmNlLCBhZnRlckxheWVyLnNvdXJjZSkgfHwgIWlzRXF1YWwoYmVmb3JlTGF5ZXJbJ3NvdXJjZS1sYXllciddLCBhZnRlckxheWVyWydzb3VyY2UtbGF5ZXInXSkgfHwgIWlzRXF1YWwoYmVmb3JlTGF5ZXIudHlwZSwgYWZ0ZXJMYXllci50eXBlKSkge1xuICAgICAgICAgICAgY29tbWFuZHMucHVzaCh7Y29tbWFuZDogb3BlcmF0aW9ucy5yZW1vdmVMYXllciwgYXJnczogW2xheWVySWRdfSk7XG4gICAgICAgICAgICAvLyB3ZSBhZGQgdGhlIGxheWVyIGJhY2sgYXQgdGhlIHNhbWUgcG9zaXRpb24gaXQgd2FzIGFscmVhZHkgaW4sIHNvXG4gICAgICAgICAgICAvLyB0aGVyZSdzIG5vIG5lZWQgdG8gdXBkYXRlIHRoZSBgdHJhY2tlcmBcbiAgICAgICAgICAgIGluc2VydEJlZm9yZUxheWVySWQgPSB0cmFja2VyW3RyYWNrZXIubGFzdEluZGV4T2YobGF5ZXJJZCkgKyAxXTtcbiAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMuYWRkTGF5ZXIsIGFyZ3M6IFthZnRlckxheWVyLCBpbnNlcnRCZWZvcmVMYXllcklkXX0pO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBsYXlvdXQsIHBhaW50LCBmaWx0ZXIsIG1pbnpvb20sIG1heHpvb21cbiAgICAgICAgZGlmZkxheWVyUHJvcGVydHlDaGFuZ2VzKGJlZm9yZUxheWVyLmxheW91dCwgYWZ0ZXJMYXllci5sYXlvdXQsIGNvbW1hbmRzLCBsYXllcklkLCBudWxsLCBvcGVyYXRpb25zLnNldExheW91dFByb3BlcnR5KTtcbiAgICAgICAgZGlmZkxheWVyUHJvcGVydHlDaGFuZ2VzKGJlZm9yZUxheWVyLnBhaW50LCBhZnRlckxheWVyLnBhaW50LCBjb21tYW5kcywgbGF5ZXJJZCwgbnVsbCwgb3BlcmF0aW9ucy5zZXRQYWludFByb3BlcnR5KTtcbiAgICAgICAgaWYgKCFpc0VxdWFsKGJlZm9yZUxheWVyLmZpbHRlciwgYWZ0ZXJMYXllci5maWx0ZXIpKSB7XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnNldEZpbHRlciwgYXJnczogW2xheWVySWQsIGFmdGVyTGF5ZXIuZmlsdGVyXX0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFcXVhbChiZWZvcmVMYXllci5taW56b29tLCBhZnRlckxheWVyLm1pbnpvb20pIHx8ICFpc0VxdWFsKGJlZm9yZUxheWVyLm1heHpvb20sIGFmdGVyTGF5ZXIubWF4em9vbSkpIHtcbiAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMuc2V0TGF5ZXJab29tUmFuZ2UsIGFyZ3M6IFtsYXllcklkLCBhZnRlckxheWVyLm1pbnpvb20sIGFmdGVyTGF5ZXIubWF4em9vbV19KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGhhbmRsZSBhbGwgb3RoZXIgbGF5ZXIgcHJvcHMsIGluY2x1ZGluZyBwYWludC4qXG4gICAgICAgIGZvciAocHJvcCBpbiBiZWZvcmVMYXllcikge1xuICAgICAgICAgICAgaWYgKCFiZWZvcmVMYXllci5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgY29udGludWU7XG4gICAgICAgICAgICBpZiAocHJvcCA9PT0gJ2xheW91dCcgfHwgcHJvcCA9PT0gJ3BhaW50JyB8fCBwcm9wID09PSAnZmlsdGVyJyB8fFxuICAgICAgICAgICAgICAgIHByb3AgPT09ICdtZXRhZGF0YScgfHwgcHJvcCA9PT0gJ21pbnpvb20nIHx8IHByb3AgPT09ICdtYXh6b29tJykgY29udGludWU7XG4gICAgICAgICAgICBpZiAocHJvcC5pbmRleE9mKCdwYWludC4nKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGRpZmZMYXllclByb3BlcnR5Q2hhbmdlcyhiZWZvcmVMYXllcltwcm9wXSwgYWZ0ZXJMYXllcltwcm9wXSwgY29tbWFuZHMsIGxheWVySWQsIHByb3Auc2xpY2UoNiksIG9wZXJhdGlvbnMuc2V0UGFpbnRQcm9wZXJ0eSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFpc0VxdWFsKGJlZm9yZUxheWVyW3Byb3BdLCBhZnRlckxheWVyW3Byb3BdKSkge1xuICAgICAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMuc2V0TGF5ZXJQcm9wZXJ0eSwgYXJnczogW2xheWVySWQsIHByb3AsIGFmdGVyTGF5ZXJbcHJvcF1dfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChwcm9wIGluIGFmdGVyTGF5ZXIpIHtcbiAgICAgICAgICAgIGlmICghYWZ0ZXJMYXllci5oYXNPd25Qcm9wZXJ0eShwcm9wKSB8fCBiZWZvcmVMYXllci5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgY29udGludWU7XG4gICAgICAgICAgICBpZiAocHJvcCA9PT0gJ2xheW91dCcgfHwgcHJvcCA9PT0gJ3BhaW50JyB8fCBwcm9wID09PSAnZmlsdGVyJyB8fFxuICAgICAgICAgICAgICAgIHByb3AgPT09ICdtZXRhZGF0YScgfHwgcHJvcCA9PT0gJ21pbnpvb20nIHx8IHByb3AgPT09ICdtYXh6b29tJykgY29udGludWU7XG4gICAgICAgICAgICBpZiAocHJvcC5pbmRleE9mKCdwYWludC4nKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGRpZmZMYXllclByb3BlcnR5Q2hhbmdlcyhiZWZvcmVMYXllcltwcm9wXSwgYWZ0ZXJMYXllcltwcm9wXSwgY29tbWFuZHMsIGxheWVySWQsIHByb3Auc2xpY2UoNiksIG9wZXJhdGlvbnMuc2V0UGFpbnRQcm9wZXJ0eSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFpc0VxdWFsKGJlZm9yZUxheWVyW3Byb3BdLCBhZnRlckxheWVyW3Byb3BdKSkge1xuICAgICAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMuc2V0TGF5ZXJQcm9wZXJ0eSwgYXJnczogW2xheWVySWQsIHByb3AsIGFmdGVyTGF5ZXJbcHJvcF1dfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogRGlmZiB0d28gc3R5bGVzaGVldFxuICpcbiAqIENyZWF0ZXMgc2VtYW50aWNseSBhd2FyZSBkaWZmcyB0aGF0IGNhbiBlYXNpbHkgYmUgYXBwbGllZCBhdCBydW50aW1lLlxuICogT3BlcmF0aW9ucyBwcm9kdWNlZCBieSB0aGUgZGlmZiBjbG9zZWx5IHJlc2VtYmxlIHRoZSBtYXBib3gtZ2wtanMgQVBJLiBBbnlcbiAqIGVycm9yIGNyZWF0aW5nIHRoZSBkaWZmIHdpbGwgZmFsbCBiYWNrIHRvIHRoZSAnc2V0U3R5bGUnIG9wZXJhdGlvbi5cbiAqXG4gKiBFeGFtcGxlIGRpZmY6XG4gKiBbXG4gKiAgICAgeyBjb21tYW5kOiAnc2V0Q29uc3RhbnQnLCBhcmdzOiBbJ0B3YXRlcicsICcjMDAwMEZGJ10gfSxcbiAqICAgICB7IGNvbW1hbmQ6ICdzZXRQYWludFByb3BlcnR5JywgYXJnczogWydiYWNrZ3JvdW5kJywgJ2JhY2tncm91bmQtY29sb3InLCAnYmxhY2snXSB9XG4gKiBdXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gW2JlZm9yZV0gc3R5bGVzaGVldCB0byBjb21wYXJlIGZyb21cbiAqIEBwYXJhbSB7Kn0gYWZ0ZXIgc3R5bGVzaGVldCB0byBjb21wYXJlIHRvXG4gKiBAcmV0dXJucyBBcnJheSBsaXN0IG9mIGNoYW5nZXNcbiAqL1xuZnVuY3Rpb24gZGlmZlN0eWxlcyhiZWZvcmUsIGFmdGVyKSB7XG4gICAgaWYgKCFiZWZvcmUpIHJldHVybiBbe2NvbW1hbmQ6IG9wZXJhdGlvbnMuc2V0U3R5bGUsIGFyZ3M6IFthZnRlcl19XTtcblxuICAgIGxldCBjb21tYW5kcyA9IFtdO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgLy8gSGFuZGxlIGNoYW5nZXMgdG8gdG9wLWxldmVsIHByb3BlcnRpZXNcbiAgICAgICAgaWYgKCFpc0VxdWFsKGJlZm9yZS52ZXJzaW9uLCBhZnRlci52ZXJzaW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIFt7Y29tbWFuZDogb3BlcmF0aW9ucy5zZXRTdHlsZSwgYXJnczogW2FmdGVyXX1dO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFcXVhbChiZWZvcmUuY2VudGVyLCBhZnRlci5jZW50ZXIpKSB7XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnNldENlbnRlciwgYXJnczogW2FmdGVyLmNlbnRlcl19KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzRXF1YWwoYmVmb3JlLnpvb20sIGFmdGVyLnpvb20pKSB7XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnNldFpvb20sIGFyZ3M6IFthZnRlci56b29tXX0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFcXVhbChiZWZvcmUuYmVhcmluZywgYWZ0ZXIuYmVhcmluZykpIHtcbiAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMuc2V0QmVhcmluZywgYXJnczogW2FmdGVyLmJlYXJpbmddfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0VxdWFsKGJlZm9yZS5waXRjaCwgYWZ0ZXIucGl0Y2gpKSB7XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnNldFBpdGNoLCBhcmdzOiBbYWZ0ZXIucGl0Y2hdfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0VxdWFsKGJlZm9yZS5zcHJpdGUsIGFmdGVyLnNwcml0ZSkpIHtcbiAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMuc2V0U3ByaXRlLCBhcmdzOiBbYWZ0ZXIuc3ByaXRlXX0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFcXVhbChiZWZvcmUuZ2x5cGhzLCBhZnRlci5nbHlwaHMpKSB7XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnNldEdseXBocywgYXJnczogW2FmdGVyLmdseXBoc119KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzRXF1YWwoYmVmb3JlLnRyYW5zaXRpb24sIGFmdGVyLnRyYW5zaXRpb24pKSB7XG4gICAgICAgICAgICBjb21tYW5kcy5wdXNoKHtjb21tYW5kOiBvcGVyYXRpb25zLnNldFRyYW5zaXRpb24sIGFyZ3M6IFthZnRlci50cmFuc2l0aW9uXX0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFcXVhbChiZWZvcmUubGlnaHQsIGFmdGVyLmxpZ2h0KSkge1xuICAgICAgICAgICAgY29tbWFuZHMucHVzaCh7Y29tbWFuZDogb3BlcmF0aW9ucy5zZXRMaWdodCwgYXJnczogW2FmdGVyLmxpZ2h0XX0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZGxlIGNoYW5nZXMgdG8gYHNvdXJjZXNgXG4gICAgICAgIC8vIElmIGEgc291cmNlIGlzIHRvIGJlIHJlbW92ZWQsIHdlIGFsc28tLWJlZm9yZSB0aGUgcmVtb3ZlU291cmNlXG4gICAgICAgIC8vIGNvbW1hbmQtLW5lZWQgdG8gcmVtb3ZlIGFsbCB0aGUgc3R5bGUgbGF5ZXJzIHRoYXQgZGVwZW5kIG9uIGl0LlxuICAgICAgICBjb25zdCBzb3VyY2VzUmVtb3ZlZCA9IHt9O1xuXG4gICAgICAgIC8vIEZpcnN0IGNvbGxlY3QgdGhlIHthZGQscmVtb3ZlfVNvdXJjZSBjb21tYW5kc1xuICAgICAgICBjb25zdCByZW1vdmVPckFkZFNvdXJjZUNvbW1hbmRzID0gW107XG4gICAgICAgIGRpZmZTb3VyY2VzKGJlZm9yZS5zb3VyY2VzLCBhZnRlci5zb3VyY2VzLCByZW1vdmVPckFkZFNvdXJjZUNvbW1hbmRzLCBzb3VyY2VzUmVtb3ZlZCk7XG5cbiAgICAgICAgLy8gUHVzaCBhIHJlbW92ZUxheWVyIGNvbW1hbmQgZm9yIGVhY2ggc3R5bGUgbGF5ZXIgdGhhdCBkZXBlbmRzIG9uIGFcbiAgICAgICAgLy8gc291cmNlIHRoYXQncyBiZWluZyByZW1vdmVkLlxuICAgICAgICAvLyBBbHNvLCBleGNsdWRlIGFueSBzdWNoIGxheWVycyB0aGVtIGZyb20gdGhlIGlucHV0IHRvIGBkaWZmTGF5ZXJzYFxuICAgICAgICAvLyBiZWxvdywgc28gdGhhdCBkaWZmTGF5ZXJzIHByb2R1Y2VzIHRoZSBhcHByb3ByaWF0ZSBgYWRkTGF5ZXJzYFxuICAgICAgICAvLyBjb21tYW5kXG4gICAgICAgIGNvbnN0IGJlZm9yZUxheWVycyA9IFtdO1xuICAgICAgICBpZiAoYmVmb3JlLmxheWVycykge1xuICAgICAgICAgICAgYmVmb3JlLmxheWVycy5mb3JFYWNoKChsYXllcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzb3VyY2VzUmVtb3ZlZFtsYXllci5zb3VyY2VdKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzLnB1c2goe2NvbW1hbmQ6IG9wZXJhdGlvbnMucmVtb3ZlTGF5ZXIsIGFyZ3M6IFtsYXllci5pZF19KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBiZWZvcmVMYXllcnMucHVzaChsYXllcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29tbWFuZHMgPSBjb21tYW5kcy5jb25jYXQocmVtb3ZlT3JBZGRTb3VyY2VDb21tYW5kcyk7XG5cbiAgICAgICAgLy8gSGFuZGxlIGNoYW5nZXMgdG8gYGxheWVyc2BcbiAgICAgICAgZGlmZkxheWVycyhiZWZvcmVMYXllcnMsIGFmdGVyLmxheWVycywgY29tbWFuZHMpO1xuXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBmYWxsIGJhY2sgdG8gc2V0U3R5bGVcbiAgICAgICAgY29uc29sZS53YXJuKCdVbmFibGUgdG8gY29tcHV0ZSBzdHlsZSBkaWZmOicsIGUpO1xuICAgICAgICBjb21tYW5kcyA9IFt7Y29tbWFuZDogb3BlcmF0aW9ucy5zZXRTdHlsZSwgYXJnczogW2FmdGVyXX1dO1xuICAgIH1cblxuICAgIHJldHVybiBjb21tYW5kcztcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGlmZlN0eWxlcztcbmV4cG9ydCB7b3BlcmF0aW9uc307XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2NsYW1wfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5jbGFzcyBQYXRoSW50ZXJwb2xhdG9yIHtcbiAgICBwb2ludHM6IEFycmF5PFBvaW50PjtcbiAgICBsZW5ndGg6IG51bWJlcjtcbiAgICBwYWRkZWRMZW5ndGg6IG51bWJlcjtcbiAgICBwYWRkaW5nOiBudW1iZXI7XG4gICAgX2Rpc3RhbmNlczogQXJyYXk8bnVtYmVyPjtcblxuICAgIGNvbnN0cnVjdG9yKHBvaW50c186ID9BcnJheTxQb2ludD4sIHBhZGRpbmdfOiA/bnVtYmVyKSB7XG4gICAgICAgIHRoaXMucmVzZXQocG9pbnRzXywgcGFkZGluZ18pO1xuICAgIH1cblxuICAgIHJlc2V0KHBvaW50c186ID9BcnJheTxQb2ludD4sIHBhZGRpbmdfOiA/bnVtYmVyKSB7XG4gICAgICAgIHRoaXMucG9pbnRzID0gcG9pbnRzXyB8fCBbXTtcblxuICAgICAgICAvLyBDb21wdXRlIGN1bXVsYXRpdmUgZGlzdGFuY2UgZnJvbSBmaXJzdCBwb2ludCB0byBldmVyeSBvdGhlciBwb2ludCBpbiB0aGUgc2VnbWVudC5cbiAgICAgICAgLy8gTGFzdCBlbnRyeSBpbiB0aGUgYXJyYXkgaXMgdG90YWwgbGVuZ3RoIG9mIHRoZSBwYXRoXG4gICAgICAgIHRoaXMuX2Rpc3RhbmNlcyA9IFswLjBdO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgdGhpcy5wb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuX2Rpc3RhbmNlc1tpXSA9IHRoaXMuX2Rpc3RhbmNlc1tpIC0gMV0gKyB0aGlzLnBvaW50c1tpXS5kaXN0KHRoaXMucG9pbnRzW2kgLSAxXSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMuX2Rpc3RhbmNlc1t0aGlzLl9kaXN0YW5jZXMubGVuZ3RoIC0gMV07XG4gICAgICAgIHRoaXMucGFkZGluZyA9IE1hdGgubWluKHBhZGRpbmdfIHx8IDAsIHRoaXMubGVuZ3RoICogMC41KTtcbiAgICAgICAgdGhpcy5wYWRkZWRMZW5ndGggPSB0aGlzLmxlbmd0aCAtIHRoaXMucGFkZGluZyAqIDIuMDtcbiAgICB9XG5cbiAgICBsZXJwKHQ6IG51bWJlcik6IFBvaW50IHtcbiAgICAgICAgYXNzZXJ0KHRoaXMucG9pbnRzLmxlbmd0aCA+IDApO1xuICAgICAgICBpZiAodGhpcy5wb2ludHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wb2ludHNbMF07XG4gICAgICAgIH1cblxuICAgICAgICB0ID0gY2xhbXAodCwgMCwgMSk7XG5cbiAgICAgICAgLy8gRmluZCB0aGUgY29ycmVjdCBzZWdtZW50IFtwMCwgcDFdIHdoZXJlIHAwIDw9IHggPCBwMVxuICAgICAgICBsZXQgY3VycmVudEluZGV4ID0gMTtcbiAgICAgICAgbGV0IGRpc3RPZkN1cnJlbnRJZHggPSB0aGlzLl9kaXN0YW5jZXNbY3VycmVudEluZGV4XTtcbiAgICAgICAgY29uc3QgZGlzdFRvVGFyZ2V0ID0gdCAqIHRoaXMucGFkZGVkTGVuZ3RoICsgdGhpcy5wYWRkaW5nO1xuXG4gICAgICAgIHdoaWxlIChkaXN0T2ZDdXJyZW50SWR4IDwgZGlzdFRvVGFyZ2V0ICYmIGN1cnJlbnRJbmRleCA8IHRoaXMuX2Rpc3RhbmNlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGRpc3RPZkN1cnJlbnRJZHggPSB0aGlzLl9kaXN0YW5jZXNbKytjdXJyZW50SW5kZXhdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSW50ZXJwb2xhdGUgYmV0d2VlbiB0aGUgdHdvIHBvaW50cyBvZiB0aGUgc2VnbWVudFxuICAgICAgICBjb25zdCBpZHhPZlByZXZQb2ludCA9IGN1cnJlbnRJbmRleCAtIDE7XG4gICAgICAgIGNvbnN0IGRpc3RPZlByZXZJZHggPSB0aGlzLl9kaXN0YW5jZXNbaWR4T2ZQcmV2UG9pbnRdO1xuICAgICAgICBjb25zdCBzZWdtZW50TGVuZ3RoID0gZGlzdE9mQ3VycmVudElkeCAtIGRpc3RPZlByZXZJZHg7XG4gICAgICAgIGNvbnN0IHNlZ21lbnRUID0gc2VnbWVudExlbmd0aCA+IDAgPyAoZGlzdFRvVGFyZ2V0IC0gZGlzdE9mUHJldklkeCkgLyBzZWdtZW50TGVuZ3RoIDogMDtcblxuICAgICAgICByZXR1cm4gdGhpcy5wb2ludHNbaWR4T2ZQcmV2UG9pbnRdLm11bHQoMS4wIC0gc2VnbWVudFQpLmFkZCh0aGlzLnBvaW50c1tjdXJyZW50SW5kZXhdLm11bHQoc2VnbWVudFQpKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFBhdGhJbnRlcnBvbGF0b3I7XG4iLCIvLyBAZmxvd1xuXG4vKipcbiAqIEdyaWRJbmRleCBpcyBhIGRhdGEgc3RydWN0dXJlIGZvciB0ZXN0aW5nIHRoZSBpbnRlcnNlY3Rpb24gb2ZcbiAqIGNpcmNsZXMgYW5kIHJlY3RhbmdsZXMgaW4gYSAyZCBwbGFuZS5cbiAqIEl0IGlzIG9wdGltaXplZCBmb3IgcmFwaWQgaW5zZXJ0aW9uIGFuZCBxdWVyeWluZy5cbiAqIEdyaWRJbmRleCBzcGxpdHMgdGhlIHBsYW5lIGludG8gYSBzZXQgb2YgXCJjZWxsc1wiIGFuZCBrZWVwcyB0cmFja1xuICogb2Ygd2hpY2ggZ2VvbWV0cmllcyBpbnRlcnNlY3Qgd2l0aCBlYWNoIGNlbGwuIEF0IHF1ZXJ5IHRpbWUsXG4gKiBmdWxsIGdlb21ldHJ5IGNvbXBhcmlzb25zIGFyZSBvbmx5IGRvbmUgZm9yIGl0ZW1zIHRoYXQgc2hhcmVcbiAqIGF0IGxlYXN0IG9uZSBjZWxsLiBBcyBsb25nIGFzIHRoZSBnZW9tZXRyaWVzIGFyZSByZWxhdGl2ZWx5XG4gKiB1bmlmb3JtbHkgZGlzdHJpYnV0ZWQgYWNyb3NzIHRoZSBwbGFuZSwgdGhpcyBncmVhdGx5IHJlZHVjZXNcbiAqIHRoZSBudW1iZXIgb2YgY29tcGFyaXNvbnMgbmVjZXNzYXJ5LlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIEdyaWRJbmRleCB7XG4gICAgY2lyY2xlS2V5czogQXJyYXk8YW55PjtcbiAgICBib3hLZXlzOiBBcnJheTxhbnk+O1xuICAgIGJveENlbGxzOiBBcnJheTxBcnJheTxudW1iZXI+PjtcbiAgICBjaXJjbGVDZWxsczogQXJyYXk8QXJyYXk8bnVtYmVyPj47XG4gICAgYmJveGVzOiBBcnJheTxudW1iZXI+O1xuICAgIGNpcmNsZXM6IEFycmF5PG51bWJlcj47XG4gICAgeENlbGxDb3VudDogbnVtYmVyO1xuICAgIHlDZWxsQ291bnQ6IG51bWJlcjtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xuICAgIHhTY2FsZTogbnVtYmVyO1xuICAgIHlTY2FsZTogbnVtYmVyO1xuICAgIGJveFVpZDogbnVtYmVyO1xuICAgIGNpcmNsZVVpZDogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IgKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBjZWxsU2l6ZTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGJveENlbGxzID0gdGhpcy5ib3hDZWxscyA9IFtdO1xuICAgICAgICBjb25zdCBjaXJjbGVDZWxscyA9IHRoaXMuY2lyY2xlQ2VsbHMgPSBbXTtcblxuICAgICAgICAvLyBNb3JlIGNlbGxzIC0+IGZld2VyIGdlb21ldHJpZXMgdG8gY2hlY2sgcGVyIGNlbGwsIGJ1dCBpdGVtcyB0ZW5kXG4gICAgICAgIC8vIHRvIGJlIHNwbGl0IGFjcm9zcyBtb3JlIGNlbGxzLlxuICAgICAgICAvLyBTd2VldCBzcG90IGFsbG93cyBtb3N0IHNtYWxsIGl0ZW1zIHRvIGZpdCBpbiBvbmUgY2VsbFxuICAgICAgICB0aGlzLnhDZWxsQ291bnQgPSBNYXRoLmNlaWwod2lkdGggLyBjZWxsU2l6ZSk7XG4gICAgICAgIHRoaXMueUNlbGxDb3VudCA9IE1hdGguY2VpbChoZWlnaHQgLyBjZWxsU2l6ZSk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnhDZWxsQ291bnQgKiB0aGlzLnlDZWxsQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgYm94Q2VsbHMucHVzaChbXSk7XG4gICAgICAgICAgICBjaXJjbGVDZWxscy5wdXNoKFtdKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNpcmNsZUtleXMgPSBbXTtcbiAgICAgICAgdGhpcy5ib3hLZXlzID0gW107XG4gICAgICAgIHRoaXMuYmJveGVzID0gW107XG4gICAgICAgIHRoaXMuY2lyY2xlcyA9IFtdO1xuXG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIHRoaXMueFNjYWxlID0gdGhpcy54Q2VsbENvdW50IC8gd2lkdGg7XG4gICAgICAgIHRoaXMueVNjYWxlID0gdGhpcy55Q2VsbENvdW50IC8gaGVpZ2h0O1xuICAgICAgICB0aGlzLmJveFVpZCA9IDA7XG4gICAgICAgIHRoaXMuY2lyY2xlVWlkID0gMDtcbiAgICB9XG5cbiAgICBrZXlzTGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ib3hLZXlzLmxlbmd0aCArIHRoaXMuY2lyY2xlS2V5cy5sZW5ndGg7XG4gICAgfVxuXG4gICAgaW5zZXJ0KGtleTogYW55LCB4MTogbnVtYmVyLCB5MTogbnVtYmVyLCB4MjogbnVtYmVyLCB5MjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2ZvckVhY2hDZWxsKHgxLCB5MSwgeDIsIHkyLCB0aGlzLl9pbnNlcnRCb3hDZWxsLCB0aGlzLmJveFVpZCsrKTtcbiAgICAgICAgdGhpcy5ib3hLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgdGhpcy5iYm94ZXMucHVzaCh4MSk7XG4gICAgICAgIHRoaXMuYmJveGVzLnB1c2goeTEpO1xuICAgICAgICB0aGlzLmJib3hlcy5wdXNoKHgyKTtcbiAgICAgICAgdGhpcy5iYm94ZXMucHVzaCh5Mik7XG4gICAgfVxuXG4gICAgaW5zZXJ0Q2lyY2xlKGtleTogYW55LCB4OiBudW1iZXIsIHk6IG51bWJlciwgcmFkaXVzOiBudW1iZXIpIHtcbiAgICAgICAgLy8gSW5zZXJ0IGNpcmNsZSBpbnRvIGdyaWQgZm9yIGFsbCBjZWxscyBpbiB0aGUgY2lyY3Vtc2NyaWJpbmcgc3F1YXJlXG4gICAgICAgIC8vIEl0J3MgbW9yZSB0aGFuIG5lY2Vzc2FyeSAoYnkgYSBmYWN0b3Igb2YgNC9QSSksIGJ1dCBmYXN0IHRvIGluc2VydFxuICAgICAgICB0aGlzLl9mb3JFYWNoQ2VsbCh4IC0gcmFkaXVzLCB5IC0gcmFkaXVzLCB4ICsgcmFkaXVzLCB5ICsgcmFkaXVzLCB0aGlzLl9pbnNlcnRDaXJjbGVDZWxsLCB0aGlzLmNpcmNsZVVpZCsrKTtcbiAgICAgICAgdGhpcy5jaXJjbGVLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgdGhpcy5jaXJjbGVzLnB1c2goeCk7XG4gICAgICAgIHRoaXMuY2lyY2xlcy5wdXNoKHkpO1xuICAgICAgICB0aGlzLmNpcmNsZXMucHVzaChyYWRpdXMpO1xuICAgIH1cblxuICAgIF9pbnNlcnRCb3hDZWxsKHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIsIGNlbGxJbmRleDogbnVtYmVyLCB1aWQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLmJveENlbGxzW2NlbGxJbmRleF0ucHVzaCh1aWQpO1xuICAgIH1cblxuICAgIF9pbnNlcnRDaXJjbGVDZWxsKHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIsIGNlbGxJbmRleDogbnVtYmVyLCB1aWQ6IG51bWJlcikgIHtcbiAgICAgICAgdGhpcy5jaXJjbGVDZWxsc1tjZWxsSW5kZXhdLnB1c2godWlkKTtcbiAgICB9XG5cbiAgICBfcXVlcnkoeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlciwgaGl0VGVzdDogYm9vbGVhbiwgcHJlZGljYXRlPzogYW55KSB7XG4gICAgICAgIGlmICh4MiA8IDAgfHwgeDEgPiB0aGlzLndpZHRoIHx8IHkyIDwgMCB8fCB5MSA+IHRoaXMuaGVpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm4gaGl0VGVzdCA/IGZhbHNlIDogW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGlmICh4MSA8PSAwICYmIHkxIDw9IDAgJiYgdGhpcy53aWR0aCA8PSB4MiAmJiB0aGlzLmhlaWdodCA8PSB5Mikge1xuICAgICAgICAgICAgaWYgKGhpdFRlc3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGJveFVpZCA9IDA7IGJveFVpZCA8IHRoaXMuYm94S2V5cy5sZW5ndGg7IGJveFVpZCsrKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBrZXk6IHRoaXMuYm94S2V5c1tib3hVaWRdLFxuICAgICAgICAgICAgICAgICAgICB4MTogdGhpcy5iYm94ZXNbYm94VWlkICogNF0sXG4gICAgICAgICAgICAgICAgICAgIHkxOiB0aGlzLmJib3hlc1tib3hVaWQgKiA0ICsgMV0sXG4gICAgICAgICAgICAgICAgICAgIHgyOiB0aGlzLmJib3hlc1tib3hVaWQgKiA0ICsgMl0sXG4gICAgICAgICAgICAgICAgICAgIHkyOiB0aGlzLmJib3hlc1tib3hVaWQgKiA0ICsgM11cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGNpcmNsZVVpZCA9IDA7IGNpcmNsZVVpZCA8IHRoaXMuY2lyY2xlS2V5cy5sZW5ndGg7IGNpcmNsZVVpZCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeCA9IHRoaXMuY2lyY2xlc1tjaXJjbGVVaWQgKiAzXTtcbiAgICAgICAgICAgICAgICBjb25zdCB5ID0gdGhpcy5jaXJjbGVzW2NpcmNsZVVpZCAqIDMgKyAxXTtcbiAgICAgICAgICAgICAgICBjb25zdCByYWRpdXMgPSB0aGlzLmNpcmNsZXNbY2lyY2xlVWlkICogMyArIDJdO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiB0aGlzLmNpcmNsZUtleXNbY2lyY2xlVWlkXSxcbiAgICAgICAgICAgICAgICAgICAgeDE6IHggLSByYWRpdXMsXG4gICAgICAgICAgICAgICAgICAgIHkxOiB5IC0gcmFkaXVzLFxuICAgICAgICAgICAgICAgICAgICB4MjogeCArIHJhZGl1cyxcbiAgICAgICAgICAgICAgICAgICAgeTI6IHkgKyByYWRpdXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwcmVkaWNhdGUgPyByZXN1bHQuZmlsdGVyKHByZWRpY2F0ZSkgOiByZXN1bHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBxdWVyeUFyZ3MgPSB7XG4gICAgICAgICAgICAgICAgaGl0VGVzdCxcbiAgICAgICAgICAgICAgICBzZWVuVWlkczoge2JveDoge30sIGNpcmNsZToge319XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5fZm9yRWFjaENlbGwoeDEsIHkxLCB4MiwgeTIsIHRoaXMuX3F1ZXJ5Q2VsbCwgcmVzdWx0LCBxdWVyeUFyZ3MsIHByZWRpY2F0ZSk7XG4gICAgICAgICAgICByZXR1cm4gaGl0VGVzdCA/IHJlc3VsdC5sZW5ndGggPiAwIDogcmVzdWx0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3F1ZXJ5Q2lyY2xlKHg6IG51bWJlciwgeTogbnVtYmVyLCByYWRpdXM6IG51bWJlciwgaGl0VGVzdDogYm9vbGVhbiwgcHJlZGljYXRlPzogYW55KSB7XG4gICAgICAgIC8vIEluc2VydCBjaXJjbGUgaW50byBncmlkIGZvciBhbGwgY2VsbHMgaW4gdGhlIGNpcmN1bXNjcmliaW5nIHNxdWFyZVxuICAgICAgICAvLyBJdCdzIG1vcmUgdGhhbiBuZWNlc3NhcnkgKGJ5IGEgZmFjdG9yIG9mIDQvUEkpLCBidXQgZmFzdCB0byBpbnNlcnRcbiAgICAgICAgY29uc3QgeDEgPSB4IC0gcmFkaXVzO1xuICAgICAgICBjb25zdCB4MiA9IHggKyByYWRpdXM7XG4gICAgICAgIGNvbnN0IHkxID0geSAtIHJhZGl1cztcbiAgICAgICAgY29uc3QgeTIgPSB5ICsgcmFkaXVzO1xuICAgICAgICBpZiAoeDIgPCAwIHx8IHgxID4gdGhpcy53aWR0aCB8fCB5MiA8IDAgfHwgeTEgPiB0aGlzLmhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuIGhpdFRlc3QgPyBmYWxzZSA6IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQm94IHF1ZXJ5IGVhcmx5IGV4aXRzIGlmIHRoZSBib3VuZGluZyBib3ggaXMgbGFyZ2VyIHRoYW4gdGhlIGdyaWQsIGJ1dCB3ZSBkb24ndCBkb1xuICAgICAgICAvLyB0aGUgZXF1aXZhbGVudCBjYWxjdWxhdGlvbiBmb3IgY2lyY2xlIHF1ZXJpZXMgYmVjYXVzZSBlYXJseSBleGl0IGlzIGxlc3MgbGlrZWx5XG4gICAgICAgIC8vIGFuZCB0aGUgY2FsY3VsYXRpb24gaXMgbW9yZSBleHBlbnNpdmVcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGNvbnN0IHF1ZXJ5QXJncyA9IHtcbiAgICAgICAgICAgIGhpdFRlc3QsXG4gICAgICAgICAgICBjaXJjbGU6IHt4LCB5LCByYWRpdXN9LFxuICAgICAgICAgICAgc2VlblVpZHM6IHtib3g6IHt9LCBjaXJjbGU6IHt9fVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLl9mb3JFYWNoQ2VsbCh4MSwgeTEsIHgyLCB5MiwgdGhpcy5fcXVlcnlDZWxsQ2lyY2xlLCByZXN1bHQsIHF1ZXJ5QXJncywgcHJlZGljYXRlKTtcbiAgICAgICAgcmV0dXJuIGhpdFRlc3QgPyByZXN1bHQubGVuZ3RoID4gMCA6IHJlc3VsdDtcbiAgICB9XG5cbiAgICBxdWVyeSh4MTogbnVtYmVyLCB5MTogbnVtYmVyLCB4MjogbnVtYmVyLCB5MjogbnVtYmVyLCBwcmVkaWNhdGU/OiBhbnkpOiBBcnJheTxhbnk+IHtcbiAgICAgICAgcmV0dXJuICh0aGlzLl9xdWVyeSh4MSwgeTEsIHgyLCB5MiwgZmFsc2UsIHByZWRpY2F0ZSk6IGFueSk7XG4gICAgfVxuXG4gICAgaGl0VGVzdCh4MTogbnVtYmVyLCB5MTogbnVtYmVyLCB4MjogbnVtYmVyLCB5MjogbnVtYmVyLCBwcmVkaWNhdGU/OiBhbnkpOiBib29sZWFuICB7XG4gICAgICAgIHJldHVybiAodGhpcy5fcXVlcnkoeDEsIHkxLCB4MiwgeTIsIHRydWUsIHByZWRpY2F0ZSk6IGFueSk7XG4gICAgfVxuXG4gICAgaGl0VGVzdENpcmNsZSh4OiBudW1iZXIsIHk6IG51bWJlciwgcmFkaXVzOiBudW1iZXIsIHByZWRpY2F0ZT86IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKHRoaXMuX3F1ZXJ5Q2lyY2xlKHgsIHksIHJhZGl1cywgdHJ1ZSwgcHJlZGljYXRlKTogYW55KTtcbiAgICB9XG5cbiAgICBfcXVlcnlDZWxsKHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIsIGNlbGxJbmRleDogbnVtYmVyLCByZXN1bHQ6IGFueSwgcXVlcnlBcmdzOiBhbnksIHByZWRpY2F0ZT86IGFueSkge1xuICAgICAgICBjb25zdCBzZWVuVWlkcyA9IHF1ZXJ5QXJncy5zZWVuVWlkcztcbiAgICAgICAgY29uc3QgYm94Q2VsbCA9IHRoaXMuYm94Q2VsbHNbY2VsbEluZGV4XTtcbiAgICAgICAgaWYgKGJveENlbGwgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGJib3hlcyA9IHRoaXMuYmJveGVzO1xuICAgICAgICAgICAgZm9yIChjb25zdCBib3hVaWQgb2YgYm94Q2VsbCkge1xuICAgICAgICAgICAgICAgIGlmICghc2VlblVpZHMuYm94W2JveFVpZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgc2VlblVpZHMuYm94W2JveFVpZF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPSBib3hVaWQgKiA0O1xuICAgICAgICAgICAgICAgICAgICBpZiAoKHgxIDw9IGJib3hlc1tvZmZzZXQgKyAyXSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICh5MSA8PSBiYm94ZXNbb2Zmc2V0ICsgM10pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoeDIgPj0gYmJveGVzW29mZnNldCArIDBdKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKHkyID49IGJib3hlc1tvZmZzZXQgKyAxXSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICghcHJlZGljYXRlIHx8IHByZWRpY2F0ZSh0aGlzLmJveEtleXNbYm94VWlkXSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVlcnlBcmdzLmhpdFRlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IHRoaXMuYm94S2V5c1tib3hVaWRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MTogYmJveGVzW29mZnNldF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxOiBiYm94ZXNbb2Zmc2V0ICsgMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyOiBiYm94ZXNbb2Zmc2V0ICsgMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkyOiBiYm94ZXNbb2Zmc2V0ICsgM11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaXJjbGVDZWxsID0gdGhpcy5jaXJjbGVDZWxsc1tjZWxsSW5kZXhdO1xuICAgICAgICBpZiAoY2lyY2xlQ2VsbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgY2lyY2xlcyA9IHRoaXMuY2lyY2xlcztcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2lyY2xlVWlkIG9mIGNpcmNsZUNlbGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXNlZW5VaWRzLmNpcmNsZVtjaXJjbGVVaWRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlZW5VaWRzLmNpcmNsZVtjaXJjbGVVaWRdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gY2lyY2xlVWlkICogMztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NpcmNsZUFuZFJlY3RDb2xsaWRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlc1tvZmZzZXRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlc1tvZmZzZXQgKyAxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZXNbb2Zmc2V0ICsgMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICB4MSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHkxLFxuICAgICAgICAgICAgICAgICAgICAgICAgeDIsXG4gICAgICAgICAgICAgICAgICAgICAgICB5MikgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICghcHJlZGljYXRlIHx8IHByZWRpY2F0ZSh0aGlzLmNpcmNsZUtleXNbY2lyY2xlVWlkXSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVlcnlBcmdzLmhpdFRlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeCA9IGNpcmNsZXNbb2Zmc2V0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB5ID0gY2lyY2xlc1tvZmZzZXQgKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByYWRpdXMgPSBjaXJjbGVzW29mZnNldCArIDJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiB0aGlzLmNpcmNsZUtleXNbY2lyY2xlVWlkXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDE6IHggLSByYWRpdXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxOiB5IC0gcmFkaXVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MjogeCArIHJhZGl1cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTI6IHkgKyByYWRpdXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9xdWVyeUNlbGxDaXJjbGUoeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlciwgY2VsbEluZGV4OiBudW1iZXIsIHJlc3VsdDogYW55LCBxdWVyeUFyZ3M6IGFueSwgcHJlZGljYXRlPzogYW55KSB7XG4gICAgICAgIGNvbnN0IGNpcmNsZSA9IHF1ZXJ5QXJncy5jaXJjbGU7XG4gICAgICAgIGNvbnN0IHNlZW5VaWRzID0gcXVlcnlBcmdzLnNlZW5VaWRzO1xuICAgICAgICBjb25zdCBib3hDZWxsID0gdGhpcy5ib3hDZWxsc1tjZWxsSW5kZXhdO1xuICAgICAgICBpZiAoYm94Q2VsbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgYmJveGVzID0gdGhpcy5iYm94ZXM7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGJveFVpZCBvZiBib3hDZWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzZWVuVWlkcy5ib3hbYm94VWlkXSkge1xuICAgICAgICAgICAgICAgICAgICBzZWVuVWlkcy5ib3hbYm94VWlkXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IGJveFVpZCAqIDQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaXJjbGVBbmRSZWN0Q29sbGlkZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZS54LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlLnksXG4gICAgICAgICAgICAgICAgICAgICAgICBjaXJjbGUucmFkaXVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmJveGVzW29mZnNldCArIDBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmJveGVzW29mZnNldCArIDFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmJveGVzW29mZnNldCArIDJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmJveGVzW29mZnNldCArIDNdKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKCFwcmVkaWNhdGUgfHwgcHJlZGljYXRlKHRoaXMuYm94S2V5c1tib3hVaWRdKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjaXJjbGVDZWxsID0gdGhpcy5jaXJjbGVDZWxsc1tjZWxsSW5kZXhdO1xuICAgICAgICBpZiAoY2lyY2xlQ2VsbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgY2lyY2xlcyA9IHRoaXMuY2lyY2xlcztcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2lyY2xlVWlkIG9mIGNpcmNsZUNlbGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXNlZW5VaWRzLmNpcmNsZVtjaXJjbGVVaWRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlZW5VaWRzLmNpcmNsZVtjaXJjbGVVaWRdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gY2lyY2xlVWlkICogMztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NpcmNsZXNDb2xsaWRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlc1tvZmZzZXRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlc1tvZmZzZXQgKyAxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZXNbb2Zmc2V0ICsgMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjaXJjbGUueCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZS55LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlLnJhZGl1cykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICghcHJlZGljYXRlIHx8IHByZWRpY2F0ZSh0aGlzLmNpcmNsZUtleXNbY2lyY2xlVWlkXSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2ZvckVhY2hDZWxsKHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIsIGZuOiBhbnksIGFyZzE6IGFueSwgYXJnMj86IGFueSwgcHJlZGljYXRlPzogYW55KSB7XG4gICAgICAgIGNvbnN0IGN4MSA9IHRoaXMuX2NvbnZlcnRUb1hDZWxsQ29vcmQoeDEpO1xuICAgICAgICBjb25zdCBjeTEgPSB0aGlzLl9jb252ZXJ0VG9ZQ2VsbENvb3JkKHkxKTtcbiAgICAgICAgY29uc3QgY3gyID0gdGhpcy5fY29udmVydFRvWENlbGxDb29yZCh4Mik7XG4gICAgICAgIGNvbnN0IGN5MiA9IHRoaXMuX2NvbnZlcnRUb1lDZWxsQ29vcmQoeTIpO1xuXG4gICAgICAgIGZvciAobGV0IHggPSBjeDE7IHggPD0gY3gyOyB4KyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IHkgPSBjeTE7IHkgPD0gY3kyOyB5KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsSW5kZXggPSB0aGlzLnhDZWxsQ291bnQgKiB5ICsgeDtcbiAgICAgICAgICAgICAgICBpZiAoZm4uY2FsbCh0aGlzLCB4MSwgeTEsIHgyLCB5MiwgY2VsbEluZGV4LCBhcmcxLCBhcmcyLCBwcmVkaWNhdGUpKSByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfY29udmVydFRvWENlbGxDb29yZCh4OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKHRoaXMueENlbGxDb3VudCAtIDEsIE1hdGguZmxvb3IoeCAqIHRoaXMueFNjYWxlKSkpO1xuICAgIH1cblxuICAgIF9jb252ZXJ0VG9ZQ2VsbENvb3JkKHk6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4odGhpcy55Q2VsbENvdW50IC0gMSwgTWF0aC5mbG9vcih5ICogdGhpcy55U2NhbGUpKSk7XG4gICAgfVxuXG4gICAgX2NpcmNsZXNDb2xsaWRlKHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHIxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIsIHIyOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZHggPSB4MiAtIHgxO1xuICAgICAgICBjb25zdCBkeSA9IHkyIC0geTE7XG4gICAgICAgIGNvbnN0IGJvdGhSYWRpaSA9IHIxICsgcjI7XG4gICAgICAgIHJldHVybiAoYm90aFJhZGlpICogYm90aFJhZGlpKSA+IChkeCAqIGR4ICsgZHkgKiBkeSk7XG4gICAgfVxuXG4gICAgX2NpcmNsZUFuZFJlY3RDb2xsaWRlKGNpcmNsZVg6IG51bWJlciwgY2lyY2xlWTogbnVtYmVyLCByYWRpdXM6IG51bWJlciwgeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBoYWxmUmVjdFdpZHRoID0gKHgyIC0geDEpIC8gMjtcbiAgICAgICAgY29uc3QgZGlzdFggPSBNYXRoLmFicyhjaXJjbGVYIC0gKHgxICsgaGFsZlJlY3RXaWR0aCkpO1xuICAgICAgICBpZiAoZGlzdFggPiAoaGFsZlJlY3RXaWR0aCArIHJhZGl1cykpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhhbGZSZWN0SGVpZ2h0ID0gKHkyIC0geTEpIC8gMjtcbiAgICAgICAgY29uc3QgZGlzdFkgPSBNYXRoLmFicyhjaXJjbGVZIC0gKHkxICsgaGFsZlJlY3RIZWlnaHQpKTtcbiAgICAgICAgaWYgKGRpc3RZID4gKGhhbGZSZWN0SGVpZ2h0ICsgcmFkaXVzKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpc3RYIDw9IGhhbGZSZWN0V2lkdGggfHwgZGlzdFkgPD0gaGFsZlJlY3RIZWlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZHggPSBkaXN0WCAtIGhhbGZSZWN0V2lkdGg7XG4gICAgICAgIGNvbnN0IGR5ID0gZGlzdFkgLSBoYWxmUmVjdEhlaWdodDtcbiAgICAgICAgcmV0dXJuIChkeCAqIGR4ICsgZHkgKiBkeSA8PSAocmFkaXVzICogcmFkaXVzKSk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBHcmlkSW5kZXg7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbmltcG9ydCB7bWF0NCwgdmVjNH0gZnJvbSAnZ2wtbWF0cml4JztcbmltcG9ydCAqIGFzIHN5bWJvbFNpemUgZnJvbSAnLi9zeW1ib2xfc2l6ZSc7XG5pbXBvcnQge2FkZER5bmFtaWNBdHRyaWJ1dGVzfSBmcm9tICcuLi9kYXRhL2J1Y2tldC9zeW1ib2xfYnVja2V0JztcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuLi9yZW5kZXIvcGFpbnRlcic7XG5pbXBvcnQgdHlwZSBUcmFuc2Zvcm0gZnJvbSAnLi4vZ2VvL3RyYW5zZm9ybSc7XG5pbXBvcnQgdHlwZSBTeW1ib2xCdWNrZXQgZnJvbSAnLi4vZGF0YS9idWNrZXQvc3ltYm9sX2J1Y2tldCc7XG5pbXBvcnQgdHlwZSB7XG4gICAgR2x5cGhPZmZzZXRBcnJheSxcbiAgICBTeW1ib2xMaW5lVmVydGV4QXJyYXksXG4gICAgU3ltYm9sRHluYW1pY0xheW91dEFycmF5XG59IGZyb20gJy4uL2RhdGEvYXJyYXlfdHlwZXMnO1xuaW1wb3J0IHtXcml0aW5nTW9kZX0gZnJvbSAnLi4vc3ltYm9sL3NoYXBpbmcnO1xuXG5leHBvcnQge3VwZGF0ZUxpbmVMYWJlbHMsIGhpZGVHbHlwaHMsIGdldExhYmVsUGxhbmVNYXRyaXgsIGdldEdsQ29vcmRNYXRyaXgsIHByb2plY3QsIGdldFBlcnNwZWN0aXZlUmF0aW8sIHBsYWNlRmlyc3RBbmRMYXN0R2x5cGgsIHBsYWNlR2x5cGhBbG9uZ0xpbmUsIHh5VHJhbnNmb3JtTWF0NH07XG5cbi8qXG4gKiAjIE92ZXJ2aWV3IG9mIGNvb3JkaW5hdGUgc3BhY2VzXG4gKlxuICogIyMgVGlsZSBjb29yZGluYXRlIHNwYWNlc1xuICogRWFjaCBsYWJlbCBoYXMgYW4gYW5jaG9yLiBTb21lIGxhYmVscyBoYXZlIGNvcnJlc3BvbmRpbmcgbGluZSBnZW9tZXRyaWVzLlxuICogVGhlIHBvaW50cyBmb3IgYm90aCBhbmNob3JzIGFuZCBsaW5lcyBhcmUgc3RvcmVkIGluIHRpbGUgdW5pdHMuIEVhY2ggdGlsZSBoYXMgaXQncyBvd25cbiAqIGNvb3JkaW5hdGUgc3BhY2UgZ29pbmcgZnJvbSAoMCwgMCkgYXQgdGhlIHRvcCBsZWZ0IHRvIChFWFRFTlQsIEVYVEVOVCkgYXQgdGhlIGJvdHRvbSByaWdodC5cbiAqXG4gKiAjIyBHTCBjb29yZGluYXRlIHNwYWNlXG4gKiBBdCB0aGUgZW5kIG9mIGV2ZXJ5dGhpbmcsIHRoZSB2ZXJ0ZXggc2hhZGVyIG5lZWRzIHRvIHByb2R1Y2UgYSBwb3NpdGlvbiBpbiBHTCBjb29yZGluYXRlIHNwYWNlLFxuICogd2hpY2ggaXMgKC0xLCAxKSBhdCB0aGUgdG9wIGxlZnQgYW5kICgxLCAtMSkgaW4gdGhlIGJvdHRvbSByaWdodC5cbiAqXG4gKiAjIyBNYXAgcGl4ZWwgY29vcmRpbmF0ZSBzcGFjZXNcbiAqIEVhY2ggdGlsZSBoYXMgYSBwaXhlbCBjb29yZGluYXRlIHNwYWNlLiBJdCdzIGp1c3QgdGhlIHRpbGUgdW5pdHMgc2NhbGVkIHNvIHRoYXQgb25lIHVuaXQgaXNcbiAqIHdoYXRldmVyIGNvdW50cyBhcyAxIHBpeGVsIGF0IHRoZSBjdXJyZW50IHpvb20uXG4gKiBUaGlzIHNwYWNlIGlzIHVzZWQgZm9yIHBpdGNoLWFsaWdubWVudD1tYXAsIHJvdGF0aW9uLWFsaWdubWVudD1tYXBcbiAqXG4gKiAjIyBSb3RhdGVkIG1hcCBwaXhlbCBjb29yZGluYXRlIHNwYWNlc1xuICogTGlrZSB0aGUgYWJvdmUsIGJ1dCByb3RhdGVkIHNvIGF4aXMgb2YgdGhlIHNwYWNlIGFyZSBhbGlnbmVkIHdpdGggdGhlIHZpZXdwb3J0IGluc3RlYWQgb2YgdGhlIHRpbGUuXG4gKiBUaGlzIHNwYWNlIGlzIHVzZWQgZm9yIHBpdGNoLWFsaWdubWVudD1tYXAsIHJvdGF0aW9uLWFsaWdubWVudD12aWV3cG9ydFxuICpcbiAqICMjIFZpZXdwb3J0IHBpeGVsIGNvb3JkaW5hdGUgc3BhY2VcbiAqICgwLCAwKSBpcyBhdCB0aGUgdG9wIGxlZnQgb2YgdGhlIGNhbnZhcyBhbmQgKHBpeGVsV2lkdGgsIHBpeGVsSGVpZ2h0KSBpcyBhdCB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lclxuICogb2YgdGhlIGNhbnZhcy4gVGhpcyBzcGFjZSBpcyB1c2VkIGZvciBwaXRjaC1hbGlnbm1lbnQ9dmlld3BvcnRcbiAqXG4gKlxuICogIyBWZXJ0ZXggcHJvamVjdGlvblxuICogSXQgZ29lcyByb3VnaGx5IGxpa2UgdGhpczpcbiAqIDEuIHByb2plY3QgdGhlIGFuY2hvciBhbmQgbGluZSBmcm9tIHRpbGUgdW5pdHMgaW50byB0aGUgY29ycmVjdCBsYWJlbCBjb29yZGluYXRlIHNwYWNlXG4gKiAgICAgIC0gbWFwIHBpeGVsIHNwYWNlICAgICAgICAgICBwaXRjaC1hbGlnbm1lbnQ9bWFwICAgICAgICAgcm90YXRpb24tYWxpZ25tZW50PW1hcFxuICogICAgICAtIHJvdGF0ZWQgbWFwIHBpeGVsIHNwYWNlICAgcGl0Y2gtYWxpZ25tZW50PW1hcCAgICAgICAgIHJvdGF0aW9uLWFsaWdubWVudD12aWV3cG9ydFxuICogICAgICAtIHZpZXdwb3J0IHBpeGVsIHNwYWNlICAgICAgcGl0Y2gtYWxpZ25tZW50PXZpZXdwb3J0ICAgIHJvdGF0aW9uLWFsaWdubWVudD0qXG4gKiAyLiBpZiB0aGUgbGFiZWwgZm9sbG93cyBhIGxpbmUsIGZpbmQgdGhlIHBvaW50IGFsb25nIHRoZSBsaW5lIHRoYXQgaXMgdGhlIGNvcnJlY3QgZGlzdGFuY2UgZnJvbSB0aGUgYW5jaG9yLlxuICogMy4gYWRkIHRoZSBnbHlwaCdzIGNvcm5lciBvZmZzZXQgdG8gdGhlIHBvaW50IGZyb20gc3RlcCAzXG4gKiA0LiBjb252ZXJ0IGZyb20gdGhlIGxhYmVsIGNvb3JkaW5hdGUgc3BhY2UgdG8gZ2wgY29vcmRpbmF0ZXNcbiAqXG4gKiBGb3IgaG9yaXpvbnRhbCBsYWJlbHMgd2Ugd2FudCB0byBkbyBzdGVwIDEgaW4gdGhlIHNoYWRlciBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyAobm8gY3B1IHdvcmspLlxuICogICAgICBUaGlzIGlzIHdoYXQgYHVfbGFiZWxfcGxhbmVfbWF0cml4YCBpcyB1c2VkIGZvci5cbiAqIEZvciBsYWJlbHMgYWxpZ25lZCB3aXRoIGxpbmVzIHdlIGhhdmUgdG8gc3RlcHMgMSBhbmQgMiBvbiB0aGUgY3B1IHNpbmNlIHdlIG5lZWQgYWNjZXNzIHRvIHRoZSBsaW5lIGdlb21ldHJ5LlxuICogICAgICBUaGlzIGlzIHdoYXQgYHVwZGF0ZUxpbmVMYWJlbHMoLi4uKWAgZG9lcy5cbiAqICAgICAgU2luY2UgdGhlIGNvbnZlcnNpb24gaXMgaGFuZGxlZCBvbiB0aGUgY3B1IHdlIGp1c3Qgc2V0IGB1X2xhYmVsX3BsYW5lX21hdHJpeGAgdG8gYW4gaWRlbnRpdHkgbWF0cml4LlxuICpcbiAqIFN0ZXBzIDMgYW5kIDQgYXJlIGRvbmUgaW4gdGhlIHNoYWRlcnMgZm9yIGFsbCBsYWJlbHMuXG4gKi9cblxuLypcbiAqIFJldHVybnMgYSBtYXRyaXggZm9yIGNvbnZlcnRpbmcgZnJvbSB0aWxlIHVuaXRzIHRvIHRoZSBjb3JyZWN0IGxhYmVsIGNvb3JkaW5hdGUgc3BhY2UuXG4gKi9cbmZ1bmN0aW9uIGdldExhYmVsUGxhbmVNYXRyaXgocG9zTWF0cml4OiBtYXQ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXRjaFdpdGhNYXA6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZVdpdGhNYXA6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbHNUb1RpbGVVbml0czogbnVtYmVyKSB7XG4gICAgY29uc3QgbSA9IG1hdDQuY3JlYXRlKCk7XG4gICAgaWYgKHBpdGNoV2l0aE1hcCkge1xuICAgICAgICBtYXQ0LnNjYWxlKG0sIG0sIFsxIC8gcGl4ZWxzVG9UaWxlVW5pdHMsIDEgLyBwaXhlbHNUb1RpbGVVbml0cywgMV0pO1xuICAgICAgICBpZiAoIXJvdGF0ZVdpdGhNYXApIHtcbiAgICAgICAgICAgIG1hdDQucm90YXRlWihtLCBtLCB0cmFuc2Zvcm0uYW5nbGUpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbWF0NC5tdWx0aXBseShtLCB0cmFuc2Zvcm0ubGFiZWxQbGFuZU1hdHJpeCwgcG9zTWF0cml4KTtcbiAgICB9XG4gICAgcmV0dXJuIG07XG59XG5cbi8qXG4gKiBSZXR1cm5zIGEgbWF0cml4IGZvciBjb252ZXJ0aW5nIGZyb20gdGhlIGNvcnJlY3QgbGFiZWwgY29vcmRpbmF0ZSBzcGFjZSB0byBnbCBjb29yZHMuXG4gKi9cbmZ1bmN0aW9uIGdldEdsQ29vcmRNYXRyaXgocG9zTWF0cml4OiBtYXQ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwaXRjaFdpdGhNYXA6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZVdpdGhNYXA6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbHNUb1RpbGVVbml0czogbnVtYmVyKSB7XG4gICAgaWYgKHBpdGNoV2l0aE1hcCkge1xuICAgICAgICBjb25zdCBtID0gbWF0NC5jbG9uZShwb3NNYXRyaXgpO1xuICAgICAgICBtYXQ0LnNjYWxlKG0sIG0sIFtwaXhlbHNUb1RpbGVVbml0cywgcGl4ZWxzVG9UaWxlVW5pdHMsIDFdKTtcbiAgICAgICAgaWYgKCFyb3RhdGVXaXRoTWFwKSB7XG4gICAgICAgICAgICBtYXQ0LnJvdGF0ZVoobSwgbSwgLXRyYW5zZm9ybS5hbmdsZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRyYW5zZm9ybS5nbENvb3JkTWF0cml4O1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcHJvamVjdChwb2ludDogUG9pbnQsIG1hdHJpeDogbWF0NCkge1xuICAgIGNvbnN0IHBvcyA9IFtwb2ludC54LCBwb2ludC55LCAwLCAxXTtcbiAgICB4eVRyYW5zZm9ybU1hdDQocG9zLCBwb3MsIG1hdHJpeCk7XG4gICAgY29uc3QgdyA9IHBvc1szXTtcbiAgICByZXR1cm4ge1xuICAgICAgICBwb2ludDogbmV3IFBvaW50KHBvc1swXSAvIHcsIHBvc1sxXSAvIHcpLFxuICAgICAgICBzaWduZWREaXN0YW5jZUZyb21DYW1lcmE6IHdcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBnZXRQZXJzcGVjdGl2ZVJhdGlvKGNhbWVyYVRvQ2VudGVyRGlzdGFuY2U6IG51bWJlciwgc2lnbmVkRGlzdGFuY2VGcm9tQ2FtZXJhOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiAwLjUgKyAwLjUgKiAoY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSAvIHNpZ25lZERpc3RhbmNlRnJvbUNhbWVyYSk7XG59XG5cbmZ1bmN0aW9uIGlzVmlzaWJsZShhbmNob3JQb3M6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICAgICAgICAgICAgICAgICAgIGNsaXBwaW5nQnVmZmVyOiBbbnVtYmVyLCBudW1iZXJdKSB7XG4gICAgY29uc3QgeCA9IGFuY2hvclBvc1swXSAvIGFuY2hvclBvc1szXTtcbiAgICBjb25zdCB5ID0gYW5jaG9yUG9zWzFdIC8gYW5jaG9yUG9zWzNdO1xuICAgIGNvbnN0IGluUGFkZGVkVmlld3BvcnQgPSAoXG4gICAgICAgIHggPj0gLWNsaXBwaW5nQnVmZmVyWzBdICYmXG4gICAgICAgIHggPD0gY2xpcHBpbmdCdWZmZXJbMF0gJiZcbiAgICAgICAgeSA+PSAtY2xpcHBpbmdCdWZmZXJbMV0gJiZcbiAgICAgICAgeSA8PSBjbGlwcGluZ0J1ZmZlclsxXSk7XG4gICAgcmV0dXJuIGluUGFkZGVkVmlld3BvcnQ7XG59XG5cbi8qXG4gKiAgVXBkYXRlIHRoZSBgZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlcmAgZm9yIHRoZSBidWZmZXIgd2l0aCB0aGUgY29ycmVjdCBnbHlwaCBwb3NpdGlvbnMgZm9yIHRoZSBjdXJyZW50IG1hcCB2aWV3LlxuICogIFRoaXMgaXMgb25seSBydW4gb24gbGFiZWxzIHRoYXQgYXJlIGFsaWduZWQgd2l0aCBsaW5lcy4gSG9yaXpvbnRhbCBsYWJlbHMgYXJlIGhhbmRsZWQgZW50aXJlbHkgaW4gdGhlIHNoYWRlci5cbiAqL1xuZnVuY3Rpb24gdXBkYXRlTGluZUxhYmVscyhidWNrZXQ6IFN5bWJvbEJ1Y2tldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zTWF0cml4OiBtYXQ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwYWludGVyOiBQYWludGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpc1RleHQ6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsUGxhbmVNYXRyaXg6IG1hdDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGdsQ29vcmRNYXRyaXg6IG1hdDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBpdGNoV2l0aE1hcDogYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAga2VlcFVwcmlnaHQ6IGJvb2xlYW4pIHtcblxuICAgIGNvbnN0IHNpemVEYXRhID0gaXNUZXh0ID8gYnVja2V0LnRleHRTaXplRGF0YSA6IGJ1Y2tldC5pY29uU2l6ZURhdGE7XG4gICAgY29uc3QgcGFydGlhbGx5RXZhbHVhdGVkU2l6ZSA9IHN5bWJvbFNpemUuZXZhbHVhdGVTaXplRm9yWm9vbShzaXplRGF0YSwgcGFpbnRlci50cmFuc2Zvcm0uem9vbSk7XG5cbiAgICBjb25zdCBjbGlwcGluZ0J1ZmZlciA9IFsyNTYgLyBwYWludGVyLndpZHRoICogMiArIDEsIDI1NiAvIHBhaW50ZXIuaGVpZ2h0ICogMiArIDFdO1xuXG4gICAgY29uc3QgZHluYW1pY0xheW91dFZlcnRleEFycmF5ID0gaXNUZXh0ID9cbiAgICAgICAgYnVja2V0LnRleHQuZHluYW1pY0xheW91dFZlcnRleEFycmF5IDpcbiAgICAgICAgYnVja2V0Lmljb24uZHluYW1pY0xheW91dFZlcnRleEFycmF5O1xuICAgIGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheS5jbGVhcigpO1xuXG4gICAgY29uc3QgbGluZVZlcnRleEFycmF5ID0gYnVja2V0LmxpbmVWZXJ0ZXhBcnJheTtcbiAgICBjb25zdCBwbGFjZWRTeW1ib2xzID0gaXNUZXh0ID8gYnVja2V0LnRleHQucGxhY2VkU3ltYm9sQXJyYXkgOiBidWNrZXQuaWNvbi5wbGFjZWRTeW1ib2xBcnJheTtcblxuICAgIGNvbnN0IGFzcGVjdFJhdGlvID0gcGFpbnRlci50cmFuc2Zvcm0ud2lkdGggLyBwYWludGVyLnRyYW5zZm9ybS5oZWlnaHQ7XG5cbiAgICBsZXQgdXNlVmVydGljYWwgPSBmYWxzZTtcblxuICAgIGZvciAobGV0IHMgPSAwOyBzIDwgcGxhY2VkU3ltYm9scy5sZW5ndGg7IHMrKykge1xuICAgICAgICBjb25zdCBzeW1ib2w6IGFueSA9IHBsYWNlZFN5bWJvbHMuZ2V0KHMpO1xuXG4gICAgICAgIC8vIERvbid0IGRvIGNhbGN1bGF0aW9ucyBmb3IgdmVydGljYWwgZ2x5cGhzIHVubGVzcyB0aGUgcHJldmlvdXMgc3ltYm9sIHdhcyBob3Jpem9udGFsXG4gICAgICAgIC8vIGFuZCB3ZSBkZXRlcm1pbmVkIHRoYXQgdmVydGljYWwgZ2x5cGhzIHdlcmUgbmVjZXNzYXJ5LlxuICAgICAgICAvLyBBbHNvIGRvbid0IGRvIGNhbGN1bGF0aW9ucyBmb3Igc3ltYm9scyB0aGF0IGFyZSBjb2xsaWRlZCBhbmQgZnVsbHkgZmFkZWQgb3V0XG4gICAgICAgIGlmIChzeW1ib2wuaGlkZGVuIHx8IHN5bWJvbC53cml0aW5nTW9kZSA9PT0gV3JpdGluZ01vZGUudmVydGljYWwgJiYgIXVzZVZlcnRpY2FsKSB7XG4gICAgICAgICAgICBoaWRlR2x5cGhzKHN5bWJvbC5udW1HbHlwaHMsIGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBd2t3YXJkLi4uIGJ1dCB3ZSdyZSBjb3VudGluZyBvbiB0aGUgcGFpcmVkIFwidmVydGljYWxcIiBzeW1ib2wgY29taW5nIGltbWVkaWF0ZWx5IGFmdGVyIGl0cyBob3Jpem9udGFsIGNvdW50ZXJwYXJ0XG4gICAgICAgIHVzZVZlcnRpY2FsID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgYW5jaG9yUG9zID0gW3N5bWJvbC5hbmNob3JYLCBzeW1ib2wuYW5jaG9yWSwgMCwgMV07XG4gICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NChhbmNob3JQb3MsIGFuY2hvclBvcywgcG9zTWF0cml4KTtcblxuICAgICAgICAvLyBEb24ndCBib3RoZXIgY2FsY3VsYXRpbmcgdGhlIGNvcnJlY3QgcG9pbnQgZm9yIGludmlzaWJsZSBsYWJlbHMuXG4gICAgICAgIGlmICghaXNWaXNpYmxlKGFuY2hvclBvcywgY2xpcHBpbmdCdWZmZXIpKSB7XG4gICAgICAgICAgICBoaWRlR2x5cGhzKHN5bWJvbC5udW1HbHlwaHMsIGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNhbWVyYVRvQW5jaG9yRGlzdGFuY2UgPSBhbmNob3JQb3NbM107XG4gICAgICAgIGNvbnN0IHBlcnNwZWN0aXZlUmF0aW8gPSBnZXRQZXJzcGVjdGl2ZVJhdGlvKHBhaW50ZXIudHJhbnNmb3JtLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UsIGNhbWVyYVRvQW5jaG9yRGlzdGFuY2UpO1xuXG4gICAgICAgIGNvbnN0IGZvbnRTaXplID0gc3ltYm9sU2l6ZS5ldmFsdWF0ZVNpemVGb3JGZWF0dXJlKHNpemVEYXRhLCBwYXJ0aWFsbHlFdmFsdWF0ZWRTaXplLCBzeW1ib2wpO1xuICAgICAgICBjb25zdCBwaXRjaFNjYWxlZEZvbnRTaXplID0gcGl0Y2hXaXRoTWFwID8gZm9udFNpemUgLyBwZXJzcGVjdGl2ZVJhdGlvIDogZm9udFNpemUgKiBwZXJzcGVjdGl2ZVJhdGlvO1xuXG4gICAgICAgIGNvbnN0IHRpbGVBbmNob3JQb2ludCA9IG5ldyBQb2ludChzeW1ib2wuYW5jaG9yWCwgc3ltYm9sLmFuY2hvclkpO1xuICAgICAgICBjb25zdCBhbmNob3JQb2ludCA9IHByb2plY3QodGlsZUFuY2hvclBvaW50LCBsYWJlbFBsYW5lTWF0cml4KS5wb2ludDtcbiAgICAgICAgY29uc3QgcHJvamVjdGlvbkNhY2hlID0ge307XG5cbiAgICAgICAgY29uc3QgcGxhY2VVbmZsaXBwZWQ6IGFueSA9IHBsYWNlR2x5cGhzQWxvbmdMaW5lKHN5bWJvbCwgcGl0Y2hTY2FsZWRGb250U2l6ZSwgZmFsc2UgLyp1bmZsaXBwZWQqLywga2VlcFVwcmlnaHQsIHBvc01hdHJpeCwgbGFiZWxQbGFuZU1hdHJpeCwgZ2xDb29yZE1hdHJpeCxcbiAgICAgICAgICAgIGJ1Y2tldC5nbHlwaE9mZnNldEFycmF5LCBsaW5lVmVydGV4QXJyYXksIGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSwgYW5jaG9yUG9pbnQsIHRpbGVBbmNob3JQb2ludCwgcHJvamVjdGlvbkNhY2hlLCBhc3BlY3RSYXRpbyk7XG5cbiAgICAgICAgdXNlVmVydGljYWwgPSBwbGFjZVVuZmxpcHBlZC51c2VWZXJ0aWNhbDtcblxuICAgICAgICBpZiAocGxhY2VVbmZsaXBwZWQubm90RW5vdWdoUm9vbSB8fCB1c2VWZXJ0aWNhbCB8fFxuICAgICAgICAgICAgKHBsYWNlVW5mbGlwcGVkLm5lZWRzRmxpcHBpbmcgJiZcbiAgICAgICAgICAgICBwbGFjZUdseXBoc0Fsb25nTGluZShzeW1ib2wsIHBpdGNoU2NhbGVkRm9udFNpemUsIHRydWUgLypmbGlwcGVkKi8sIGtlZXBVcHJpZ2h0LCBwb3NNYXRyaXgsIGxhYmVsUGxhbmVNYXRyaXgsIGdsQ29vcmRNYXRyaXgsXG4gICAgICAgICAgICAgICAgIGJ1Y2tldC5nbHlwaE9mZnNldEFycmF5LCBsaW5lVmVydGV4QXJyYXksIGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSwgYW5jaG9yUG9pbnQsIHRpbGVBbmNob3JQb2ludCwgcHJvamVjdGlvbkNhY2hlLCBhc3BlY3RSYXRpbykubm90RW5vdWdoUm9vbSkpIHtcbiAgICAgICAgICAgIGhpZGVHbHlwaHMoc3ltYm9sLm51bUdseXBocywgZHluYW1pY0xheW91dFZlcnRleEFycmF5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc1RleHQpIHtcbiAgICAgICAgYnVja2V0LnRleHQuZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYnVja2V0Lmljb24uZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBwbGFjZUZpcnN0QW5kTGFzdEdseXBoKGZvbnRTY2FsZTogbnVtYmVyLCBnbHlwaE9mZnNldEFycmF5OiBHbHlwaE9mZnNldEFycmF5LCBsaW5lT2Zmc2V0WDogbnVtYmVyLCBsaW5lT2Zmc2V0WTogbnVtYmVyLCBmbGlwOiBib29sZWFuLCBhbmNob3JQb2ludDogUG9pbnQsIHRpbGVBbmNob3JQb2ludDogUG9pbnQsIHN5bWJvbDogYW55LCBsaW5lVmVydGV4QXJyYXk6IFN5bWJvbExpbmVWZXJ0ZXhBcnJheSwgbGFiZWxQbGFuZU1hdHJpeDogbWF0NCwgcHJvamVjdGlvbkNhY2hlOiBhbnkpIHtcbiAgICBjb25zdCBnbHlwaEVuZEluZGV4ID0gc3ltYm9sLmdseXBoU3RhcnRJbmRleCArIHN5bWJvbC5udW1HbHlwaHM7XG4gICAgY29uc3QgbGluZVN0YXJ0SW5kZXggPSBzeW1ib2wubGluZVN0YXJ0SW5kZXg7XG4gICAgY29uc3QgbGluZUVuZEluZGV4ID0gc3ltYm9sLmxpbmVTdGFydEluZGV4ICsgc3ltYm9sLmxpbmVMZW5ndGg7XG5cbiAgICBjb25zdCBmaXJzdEdseXBoT2Zmc2V0ID0gZ2x5cGhPZmZzZXRBcnJheS5nZXRvZmZzZXRYKHN5bWJvbC5nbHlwaFN0YXJ0SW5kZXgpO1xuICAgIGNvbnN0IGxhc3RHbHlwaE9mZnNldCA9IGdseXBoT2Zmc2V0QXJyYXkuZ2V0b2Zmc2V0WChnbHlwaEVuZEluZGV4IC0gMSk7XG5cbiAgICBjb25zdCBmaXJzdFBsYWNlZEdseXBoID0gcGxhY2VHbHlwaEFsb25nTGluZShmb250U2NhbGUgKiBmaXJzdEdseXBoT2Zmc2V0LCBsaW5lT2Zmc2V0WCwgbGluZU9mZnNldFksIGZsaXAsIGFuY2hvclBvaW50LCB0aWxlQW5jaG9yUG9pbnQsIHN5bWJvbC5zZWdtZW50LFxuICAgICAgICBsaW5lU3RhcnRJbmRleCwgbGluZUVuZEluZGV4LCBsaW5lVmVydGV4QXJyYXksIGxhYmVsUGxhbmVNYXRyaXgsIHByb2plY3Rpb25DYWNoZSk7XG4gICAgaWYgKCFmaXJzdFBsYWNlZEdseXBoKVxuICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGxhc3RQbGFjZWRHbHlwaCA9IHBsYWNlR2x5cGhBbG9uZ0xpbmUoZm9udFNjYWxlICogbGFzdEdseXBoT2Zmc2V0LCBsaW5lT2Zmc2V0WCwgbGluZU9mZnNldFksIGZsaXAsIGFuY2hvclBvaW50LCB0aWxlQW5jaG9yUG9pbnQsIHN5bWJvbC5zZWdtZW50LFxuICAgICAgICBsaW5lU3RhcnRJbmRleCwgbGluZUVuZEluZGV4LCBsaW5lVmVydGV4QXJyYXksIGxhYmVsUGxhbmVNYXRyaXgsIHByb2plY3Rpb25DYWNoZSk7XG4gICAgaWYgKCFsYXN0UGxhY2VkR2x5cGgpXG4gICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIHtmaXJzdDogZmlyc3RQbGFjZWRHbHlwaCwgbGFzdDogbGFzdFBsYWNlZEdseXBofTtcbn1cblxuZnVuY3Rpb24gcmVxdWlyZXNPcmllbnRhdGlvbkNoYW5nZSh3cml0aW5nTW9kZSwgZmlyc3RQb2ludCwgbGFzdFBvaW50LCBhc3BlY3RSYXRpbykge1xuICAgIGlmICh3cml0aW5nTW9kZSA9PT0gV3JpdGluZ01vZGUuaG9yaXpvbnRhbCkge1xuICAgICAgICAvLyBPbiB0b3Agb2YgY2hvb3Npbmcgd2hldGhlciB0byBmbGlwLCBjaG9vc2Ugd2hldGhlciB0byByZW5kZXIgdGhpcyB2ZXJzaW9uIG9mIHRoZSBnbHlwaHMgb3IgdGhlIGFsdGVybmF0ZVxuICAgICAgICAvLyB2ZXJ0aWNhbCBnbHlwaHMuIFdlIGNhbid0IGp1c3QgZmlsdGVyIG91dCB2ZXJ0aWNhbCBnbHlwaHMgaW4gdGhlIGhvcml6b250YWwgcmFuZ2UgYmVjYXVzZSB0aGUgaG9yaXpvbnRhbFxuICAgICAgICAvLyBhbmQgdmVydGljYWwgdmVyc2lvbnMgY2FuIGhhdmUgc2xpZ2h0bHkgZGlmZmVyZW50IHByb2plY3Rpb25zIHdoaWNoIGNvdWxkIGxlYWQgdG8gYW5nbGVzIHdoZXJlIGJvdGggb3JcbiAgICAgICAgLy8gbmVpdGhlciBzaG93ZWQuXG4gICAgICAgIGNvbnN0IHJpc2UgPSBNYXRoLmFicyhsYXN0UG9pbnQueSAtIGZpcnN0UG9pbnQueSk7XG4gICAgICAgIGNvbnN0IHJ1biA9IE1hdGguYWJzKGxhc3RQb2ludC54IC0gZmlyc3RQb2ludC54KSAqIGFzcGVjdFJhdGlvO1xuICAgICAgICBpZiAocmlzZSA+IHJ1bikge1xuICAgICAgICAgICAgcmV0dXJuIHt1c2VWZXJ0aWNhbDogdHJ1ZX07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod3JpdGluZ01vZGUgPT09IFdyaXRpbmdNb2RlLnZlcnRpY2FsID8gZmlyc3RQb2ludC55IDwgbGFzdFBvaW50LnkgOiBmaXJzdFBvaW50LnggPiBsYXN0UG9pbnQueCkge1xuICAgICAgICAvLyBJbmNsdWRlcyBcImhvcml6b250YWxPbmx5XCIgY2FzZSBmb3IgbGFiZWxzIHdpdGhvdXQgdmVydGljYWwgZ2x5cGhzXG4gICAgICAgIHJldHVybiB7bmVlZHNGbGlwcGluZzogdHJ1ZX07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHBsYWNlR2x5cGhzQWxvbmdMaW5lKHN5bWJvbCwgZm9udFNpemUsIGZsaXAsIGtlZXBVcHJpZ2h0LCBwb3NNYXRyaXgsIGxhYmVsUGxhbmVNYXRyaXgsIGdsQ29vcmRNYXRyaXgsIGdseXBoT2Zmc2V0QXJyYXksIGxpbmVWZXJ0ZXhBcnJheSwgZHluYW1pY0xheW91dFZlcnRleEFycmF5LCBhbmNob3JQb2ludCwgdGlsZUFuY2hvclBvaW50LCBwcm9qZWN0aW9uQ2FjaGUsIGFzcGVjdFJhdGlvKSB7XG4gICAgY29uc3QgZm9udFNjYWxlID0gZm9udFNpemUgLyAyNDtcbiAgICBjb25zdCBsaW5lT2Zmc2V0WCA9IHN5bWJvbC5saW5lT2Zmc2V0WCAqIGZvbnRTY2FsZTtcbiAgICBjb25zdCBsaW5lT2Zmc2V0WSA9IHN5bWJvbC5saW5lT2Zmc2V0WSAqIGZvbnRTY2FsZTtcblxuICAgIGxldCBwbGFjZWRHbHlwaHM7XG4gICAgaWYgKHN5bWJvbC5udW1HbHlwaHMgPiAxKSB7XG4gICAgICAgIGNvbnN0IGdseXBoRW5kSW5kZXggPSBzeW1ib2wuZ2x5cGhTdGFydEluZGV4ICsgc3ltYm9sLm51bUdseXBocztcbiAgICAgICAgY29uc3QgbGluZVN0YXJ0SW5kZXggPSBzeW1ib2wubGluZVN0YXJ0SW5kZXg7XG4gICAgICAgIGNvbnN0IGxpbmVFbmRJbmRleCA9IHN5bWJvbC5saW5lU3RhcnRJbmRleCArIHN5bWJvbC5saW5lTGVuZ3RoO1xuXG4gICAgICAgIC8vIFBsYWNlIHRoZSBmaXJzdCBhbmQgdGhlIGxhc3QgZ2x5cGggaW4gdGhlIGxhYmVsIGZpcnN0LCBzbyB3ZSBjYW4gZmlndXJlIG91dFxuICAgICAgICAvLyB0aGUgb3ZlcmFsbCBvcmllbnRhdGlvbiBvZiB0aGUgbGFiZWwgYW5kIGRldGVybWluZSB3aGV0aGVyIGl0IG5lZWRzIHRvIGJlIGZsaXBwZWQgaW4ga2VlcFVwcmlnaHQgbW9kZVxuICAgICAgICBjb25zdCBmaXJzdEFuZExhc3RHbHlwaCA9IHBsYWNlRmlyc3RBbmRMYXN0R2x5cGgoZm9udFNjYWxlLCBnbHlwaE9mZnNldEFycmF5LCBsaW5lT2Zmc2V0WCwgbGluZU9mZnNldFksIGZsaXAsIGFuY2hvclBvaW50LCB0aWxlQW5jaG9yUG9pbnQsIHN5bWJvbCwgbGluZVZlcnRleEFycmF5LCBsYWJlbFBsYW5lTWF0cml4LCBwcm9qZWN0aW9uQ2FjaGUpO1xuICAgICAgICBpZiAoIWZpcnN0QW5kTGFzdEdseXBoKSB7XG4gICAgICAgICAgICByZXR1cm4ge25vdEVub3VnaFJvb206IHRydWV9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpcnN0UG9pbnQgPSBwcm9qZWN0KGZpcnN0QW5kTGFzdEdseXBoLmZpcnN0LnBvaW50LCBnbENvb3JkTWF0cml4KS5wb2ludDtcbiAgICAgICAgY29uc3QgbGFzdFBvaW50ID0gcHJvamVjdChmaXJzdEFuZExhc3RHbHlwaC5sYXN0LnBvaW50LCBnbENvb3JkTWF0cml4KS5wb2ludDtcblxuICAgICAgICBpZiAoa2VlcFVwcmlnaHQgJiYgIWZsaXApIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWVudGF0aW9uQ2hhbmdlID0gcmVxdWlyZXNPcmllbnRhdGlvbkNoYW5nZShzeW1ib2wud3JpdGluZ01vZGUsIGZpcnN0UG9pbnQsIGxhc3RQb2ludCwgYXNwZWN0UmF0aW8pO1xuICAgICAgICAgICAgaWYgKG9yaWVudGF0aW9uQ2hhbmdlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9yaWVudGF0aW9uQ2hhbmdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcGxhY2VkR2x5cGhzID0gW2ZpcnN0QW5kTGFzdEdseXBoLmZpcnN0XTtcbiAgICAgICAgZm9yIChsZXQgZ2x5cGhJbmRleCA9IHN5bWJvbC5nbHlwaFN0YXJ0SW5kZXggKyAxOyBnbHlwaEluZGV4IDwgZ2x5cGhFbmRJbmRleCAtIDE7IGdseXBoSW5kZXgrKykge1xuICAgICAgICAgICAgLy8gU2luY2UgZmlyc3QgYW5kIGxhc3QgZ2x5cGggZml0IG9uIHRoZSBsaW5lLCB3ZSdyZSBzdXJlIHRoYXQgdGhlIHJlc3Qgb2YgdGhlIGdseXBocyBjYW4gYmUgcGxhY2VkXG4gICAgICAgICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICAgICAgICBwbGFjZWRHbHlwaHMucHVzaChwbGFjZUdseXBoQWxvbmdMaW5lKGZvbnRTY2FsZSAqIGdseXBoT2Zmc2V0QXJyYXkuZ2V0b2Zmc2V0WChnbHlwaEluZGV4KSwgbGluZU9mZnNldFgsIGxpbmVPZmZzZXRZLCBmbGlwLCBhbmNob3JQb2ludCwgdGlsZUFuY2hvclBvaW50LCBzeW1ib2wuc2VnbWVudCxcbiAgICAgICAgICAgICAgICBsaW5lU3RhcnRJbmRleCwgbGluZUVuZEluZGV4LCBsaW5lVmVydGV4QXJyYXksIGxhYmVsUGxhbmVNYXRyaXgsIHByb2plY3Rpb25DYWNoZSkpO1xuICAgICAgICB9XG4gICAgICAgIHBsYWNlZEdseXBocy5wdXNoKGZpcnN0QW5kTGFzdEdseXBoLmxhc3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE9ubHkgYSBzaW5nbGUgZ2x5cGggdG8gcGxhY2VcbiAgICAgICAgLy8gU28sIGRldGVybWluZSB3aGV0aGVyIHRvIGZsaXAgYmFzZWQgb24gcHJvamVjdGVkIGFuZ2xlIG9mIHRoZSBsaW5lIHNlZ21lbnQgaXQncyBvblxuICAgICAgICBpZiAoa2VlcFVwcmlnaHQgJiYgIWZsaXApIHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSBwcm9qZWN0KHRpbGVBbmNob3JQb2ludCwgcG9zTWF0cml4KS5wb2ludDtcbiAgICAgICAgICAgIGNvbnN0IHRpbGVWZXJ0ZXhJbmRleCA9IChzeW1ib2wubGluZVN0YXJ0SW5kZXggKyBzeW1ib2wuc2VnbWVudCArIDEpO1xuICAgICAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICAgICAgY29uc3QgdGlsZVNlZ21lbnRFbmQgPSBuZXcgUG9pbnQobGluZVZlcnRleEFycmF5LmdldHgodGlsZVZlcnRleEluZGV4KSwgbGluZVZlcnRleEFycmF5LmdldHkodGlsZVZlcnRleEluZGV4KSk7XG4gICAgICAgICAgICBjb25zdCBwcm9qZWN0ZWRWZXJ0ZXggPSBwcm9qZWN0KHRpbGVTZWdtZW50RW5kLCBwb3NNYXRyaXgpO1xuICAgICAgICAgICAgLy8gV2Uga25vdyB0aGUgYW5jaG9yIHdpbGwgYmUgaW4gdGhlIHZpZXdwb3J0LCBidXQgdGhlIGVuZCBvZiB0aGUgbGluZSBzZWdtZW50IG1heSBiZVxuICAgICAgICAgICAgLy8gYmVoaW5kIHRoZSBwbGFuZSBvZiB0aGUgY2FtZXJhLCBpbiB3aGljaCBjYXNlIHdlIGNhbiB1c2UgYSBwb2ludCBhdCBhbnkgYXJiaXRyYXJ5IChjbG9zZXIpXG4gICAgICAgICAgICAvLyBwb2ludCBvbiB0aGUgc2VnbWVudC5cbiAgICAgICAgICAgIGNvbnN0IGIgPSAocHJvamVjdGVkVmVydGV4LnNpZ25lZERpc3RhbmNlRnJvbUNhbWVyYSA+IDApID9cbiAgICAgICAgICAgICAgICBwcm9qZWN0ZWRWZXJ0ZXgucG9pbnQgOlxuICAgICAgICAgICAgICAgIHByb2plY3RUcnVuY2F0ZWRMaW5lU2VnbWVudCh0aWxlQW5jaG9yUG9pbnQsIHRpbGVTZWdtZW50RW5kLCBhLCAxLCBwb3NNYXRyaXgpO1xuXG4gICAgICAgICAgICBjb25zdCBvcmllbnRhdGlvbkNoYW5nZSA9IHJlcXVpcmVzT3JpZW50YXRpb25DaGFuZ2Uoc3ltYm9sLndyaXRpbmdNb2RlLCBhLCBiLCBhc3BlY3RSYXRpbyk7XG4gICAgICAgICAgICBpZiAob3JpZW50YXRpb25DaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZW50YXRpb25DaGFuZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICBjb25zdCBzaW5nbGVHbHlwaCA9IHBsYWNlR2x5cGhBbG9uZ0xpbmUoZm9udFNjYWxlICogZ2x5cGhPZmZzZXRBcnJheS5nZXRvZmZzZXRYKHN5bWJvbC5nbHlwaFN0YXJ0SW5kZXgpLCBsaW5lT2Zmc2V0WCwgbGluZU9mZnNldFksIGZsaXAsIGFuY2hvclBvaW50LCB0aWxlQW5jaG9yUG9pbnQsIHN5bWJvbC5zZWdtZW50LFxuICAgICAgICAgICAgc3ltYm9sLmxpbmVTdGFydEluZGV4LCBzeW1ib2wubGluZVN0YXJ0SW5kZXggKyBzeW1ib2wubGluZUxlbmd0aCwgbGluZVZlcnRleEFycmF5LCBsYWJlbFBsYW5lTWF0cml4LCBwcm9qZWN0aW9uQ2FjaGUpO1xuICAgICAgICBpZiAoIXNpbmdsZUdseXBoKVxuICAgICAgICAgICAgcmV0dXJuIHtub3RFbm91Z2hSb29tOiB0cnVlfTtcblxuICAgICAgICBwbGFjZWRHbHlwaHMgPSBbc2luZ2xlR2x5cGhdO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgZ2x5cGg6IGFueSBvZiBwbGFjZWRHbHlwaHMpIHtcbiAgICAgICAgYWRkRHluYW1pY0F0dHJpYnV0ZXMoZHluYW1pY0xheW91dFZlcnRleEFycmF5LCBnbHlwaC5wb2ludCwgZ2x5cGguYW5nbGUpO1xuICAgIH1cbiAgICByZXR1cm4ge307XG59XG5cbmZ1bmN0aW9uIHByb2plY3RUcnVuY2F0ZWRMaW5lU2VnbWVudChwcmV2aW91c1RpbGVQb2ludDogUG9pbnQsIGN1cnJlbnRUaWxlUG9pbnQ6IFBvaW50LCBwcmV2aW91c1Byb2plY3RlZFBvaW50OiBQb2ludCwgbWluaW11bUxlbmd0aDogbnVtYmVyLCBwcm9qZWN0aW9uTWF0cml4OiBtYXQ0KSB7XG4gICAgLy8gV2UgYXJlIGFzc3VtaW5nIFwicHJldmlvdXNUaWxlUG9pbnRcIiB3b24ndCBwcm9qZWN0IHRvIGEgcG9pbnQgd2l0aGluIG9uZSB1bml0IG9mIHRoZSBjYW1lcmEgcGxhbmVcbiAgICAvLyBJZiBpdCBkaWQsIHRoYXQgd291bGQgbWVhbiBvdXIgbGFiZWwgZXh0ZW5kZWQgYWxsIHRoZSB3YXkgb3V0IGZyb20gd2l0aGluIHRoZSB2aWV3cG9ydCB0byBhICh2ZXJ5IGRpc3RhbnQpXG4gICAgLy8gcG9pbnQgbmVhciB0aGUgcGxhbmUgb2YgdGhlIGNhbWVyYS4gV2Ugd291bGRuJ3QgYmUgYWJsZSB0byByZW5kZXIgdGhlIGxhYmVsIGFueXdheSBvbmNlIGl0IGNyb3NzZWQgdGhlXG4gICAgLy8gcGxhbmUgb2YgdGhlIGNhbWVyYS5cbiAgICBjb25zdCBwcm9qZWN0ZWRVbml0VmVydGV4ID0gcHJvamVjdChwcmV2aW91c1RpbGVQb2ludC5hZGQocHJldmlvdXNUaWxlUG9pbnQuc3ViKGN1cnJlbnRUaWxlUG9pbnQpLl91bml0KCkpLCBwcm9qZWN0aW9uTWF0cml4KS5wb2ludDtcbiAgICBjb25zdCBwcm9qZWN0ZWRVbml0U2VnbWVudCA9IHByZXZpb3VzUHJvamVjdGVkUG9pbnQuc3ViKHByb2plY3RlZFVuaXRWZXJ0ZXgpO1xuXG4gICAgcmV0dXJuIHByZXZpb3VzUHJvamVjdGVkUG9pbnQuYWRkKHByb2plY3RlZFVuaXRTZWdtZW50Ll9tdWx0KG1pbmltdW1MZW5ndGggLyBwcm9qZWN0ZWRVbml0U2VnbWVudC5tYWcoKSkpO1xufVxuXG5mdW5jdGlvbiBwbGFjZUdseXBoQWxvbmdMaW5lKG9mZnNldFg6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU9mZnNldFg6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZU9mZnNldFk6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxpcDogYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yUG9pbnQ6IFBvaW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWxlQW5jaG9yUG9pbnQ6IFBvaW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JTZWdtZW50OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVTdGFydEluZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVFbmRJbmRleDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lVmVydGV4QXJyYXk6IFN5bWJvbExpbmVWZXJ0ZXhBcnJheSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxQbGFuZU1hdHJpeDogbWF0NCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdGlvbkNhY2hlOiB7W186IG51bWJlcl06IFBvaW50fSkge1xuXG4gICAgY29uc3QgY29tYmluZWRPZmZzZXRYID0gZmxpcCA/XG4gICAgICAgIG9mZnNldFggLSBsaW5lT2Zmc2V0WCA6XG4gICAgICAgIG9mZnNldFggKyBsaW5lT2Zmc2V0WDtcblxuICAgIGxldCBkaXIgPSBjb21iaW5lZE9mZnNldFggPiAwID8gMSA6IC0xO1xuXG4gICAgbGV0IGFuZ2xlID0gMDtcbiAgICBpZiAoZmxpcCkge1xuICAgICAgICAvLyBUaGUgbGFiZWwgbmVlZHMgdG8gYmUgZmxpcHBlZCB0byBrZWVwIHRleHQgdXByaWdodC5cbiAgICAgICAgLy8gSXRlcmF0ZSBpbiB0aGUgcmV2ZXJzZSBkaXJlY3Rpb24uXG4gICAgICAgIGRpciAqPSAtMTtcbiAgICAgICAgYW5nbGUgPSBNYXRoLlBJO1xuICAgIH1cblxuICAgIGlmIChkaXIgPCAwKSBhbmdsZSArPSBNYXRoLlBJO1xuXG4gICAgbGV0IGN1cnJlbnRJbmRleCA9IGRpciA+IDAgP1xuICAgICAgICBsaW5lU3RhcnRJbmRleCArIGFuY2hvclNlZ21lbnQgOlxuICAgICAgICBsaW5lU3RhcnRJbmRleCArIGFuY2hvclNlZ21lbnQgKyAxO1xuXG4gICAgbGV0IGN1cnJlbnQgPSBhbmNob3JQb2ludDtcbiAgICBsZXQgcHJldiA9IGFuY2hvclBvaW50O1xuICAgIGxldCBkaXN0YW5jZVRvUHJldiA9IDA7XG4gICAgbGV0IGN1cnJlbnRTZWdtZW50RGlzdGFuY2UgPSAwO1xuICAgIGNvbnN0IGFic09mZnNldFggPSBNYXRoLmFicyhjb21iaW5lZE9mZnNldFgpO1xuICAgIGNvbnN0IHBhdGhWZXJ0aWNlcyA9IFtdO1xuXG4gICAgd2hpbGUgKGRpc3RhbmNlVG9QcmV2ICsgY3VycmVudFNlZ21lbnREaXN0YW5jZSA8PSBhYnNPZmZzZXRYKSB7XG4gICAgICAgIGN1cnJlbnRJbmRleCArPSBkaXI7XG5cbiAgICAgICAgLy8gb2Zmc2V0IGRvZXMgbm90IGZpdCBvbiB0aGUgcHJvamVjdGVkIGxpbmVcbiAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA8IGxpbmVTdGFydEluZGV4IHx8IGN1cnJlbnRJbmRleCA+PSBsaW5lRW5kSW5kZXgpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgICBwcmV2ID0gY3VycmVudDtcbiAgICAgICAgcGF0aFZlcnRpY2VzLnB1c2goY3VycmVudCk7XG5cbiAgICAgICAgY3VycmVudCA9IHByb2plY3Rpb25DYWNoZVtjdXJyZW50SW5kZXhdO1xuICAgICAgICBpZiAoY3VycmVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VmVydGV4ID0gbmV3IFBvaW50KGxpbmVWZXJ0ZXhBcnJheS5nZXR4KGN1cnJlbnRJbmRleCksIGxpbmVWZXJ0ZXhBcnJheS5nZXR5KGN1cnJlbnRJbmRleCkpO1xuICAgICAgICAgICAgY29uc3QgcHJvamVjdGlvbiA9IHByb2plY3QoY3VycmVudFZlcnRleCwgbGFiZWxQbGFuZU1hdHJpeCk7XG4gICAgICAgICAgICBpZiAocHJvamVjdGlvbi5zaWduZWREaXN0YW5jZUZyb21DYW1lcmEgPiAwKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudCA9IHByb2plY3Rpb25DYWNoZVtjdXJyZW50SW5kZXhdID0gcHJvamVjdGlvbi5wb2ludDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIHZlcnRleCBpcyBiZWhpbmQgdGhlIHBsYW5lIG9mIHRoZSBjYW1lcmEsIHNvIHdlIGNhbid0IHByb2plY3QgaXRcbiAgICAgICAgICAgICAgICAvLyBJbnN0ZWFkLCB3ZSdsbCBjcmVhdGUgYSB2ZXJ0ZXggYWxvbmcgdGhlIGxpbmUgdGhhdCdzIGZhciBlbm91Z2ggdG8gaW5jbHVkZSB0aGUgZ2x5cGhcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0xpbmVWZXJ0ZXhJbmRleCA9IGN1cnJlbnRJbmRleCAtIGRpcjtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c1RpbGVQb2ludCA9IGRpc3RhbmNlVG9QcmV2ID09PSAwID9cbiAgICAgICAgICAgICAgICAgICAgdGlsZUFuY2hvclBvaW50IDpcbiAgICAgICAgICAgICAgICAgICAgbmV3IFBvaW50KGxpbmVWZXJ0ZXhBcnJheS5nZXR4KHByZXZpb3VzTGluZVZlcnRleEluZGV4KSwgbGluZVZlcnRleEFycmF5LmdldHkocHJldmlvdXNMaW5lVmVydGV4SW5kZXgpKTtcbiAgICAgICAgICAgICAgICAvLyBEb24ndCBjYWNoZSBiZWNhdXNlIHRoZSBuZXcgdmVydGV4IG1pZ2h0IG5vdCBiZSBmYXIgZW5vdWdoIG91dCBmb3IgZnV0dXJlIGdseXBocyBvbiB0aGUgc2FtZSBzZWdtZW50XG4gICAgICAgICAgICAgICAgY3VycmVudCA9IHByb2plY3RUcnVuY2F0ZWRMaW5lU2VnbWVudChwcmV2aW91c1RpbGVQb2ludCwgY3VycmVudFZlcnRleCwgcHJldiwgYWJzT2Zmc2V0WCAtIGRpc3RhbmNlVG9QcmV2ICsgMSwgbGFiZWxQbGFuZU1hdHJpeCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkaXN0YW5jZVRvUHJldiArPSBjdXJyZW50U2VnbWVudERpc3RhbmNlO1xuICAgICAgICBjdXJyZW50U2VnbWVudERpc3RhbmNlID0gcHJldi5kaXN0KGN1cnJlbnQpO1xuICAgIH1cblxuICAgIC8vIFRoZSBwb2ludCBpcyBvbiB0aGUgY3VycmVudCBzZWdtZW50LiBJbnRlcnBvbGF0ZSB0byBmaW5kIGl0LlxuICAgIGNvbnN0IHNlZ21lbnRJbnRlcnBvbGF0aW9uVCA9IChhYnNPZmZzZXRYIC0gZGlzdGFuY2VUb1ByZXYpIC8gY3VycmVudFNlZ21lbnREaXN0YW5jZTtcbiAgICBjb25zdCBwcmV2VG9DdXJyZW50ID0gY3VycmVudC5zdWIocHJldik7XG4gICAgY29uc3QgcCA9IHByZXZUb0N1cnJlbnQubXVsdChzZWdtZW50SW50ZXJwb2xhdGlvblQpLl9hZGQocHJldik7XG5cbiAgICAvLyBvZmZzZXQgdGhlIHBvaW50IGZyb20gdGhlIGxpbmUgdG8gdGV4dC1vZmZzZXQgYW5kIGljb24tb2Zmc2V0XG4gICAgcC5fYWRkKHByZXZUb0N1cnJlbnQuX3VuaXQoKS5fcGVycCgpLl9tdWx0KGxpbmVPZmZzZXRZICogZGlyKSk7XG5cbiAgICBjb25zdCBzZWdtZW50QW5nbGUgPSBhbmdsZSArIE1hdGguYXRhbjIoY3VycmVudC55IC0gcHJldi55LCBjdXJyZW50LnggLSBwcmV2LngpO1xuXG4gICAgcGF0aFZlcnRpY2VzLnB1c2gocCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBwb2ludDogcCxcbiAgICAgICAgYW5nbGU6IHNlZ21lbnRBbmdsZSxcbiAgICAgICAgcGF0aDogcGF0aFZlcnRpY2VzXG4gICAgfTtcbn1cblxuY29uc3QgaGlkZGVuR2x5cGhBdHRyaWJ1dGVzID0gbmV3IEZsb2F0MzJBcnJheShbLUluZmluaXR5LCAtSW5maW5pdHksIDAsIC1JbmZpbml0eSwgLUluZmluaXR5LCAwLCAtSW5maW5pdHksIC1JbmZpbml0eSwgMCwgLUluZmluaXR5LCAtSW5maW5pdHksIDBdKTtcblxuLy8gSGlkZSB0aGVtIGJ5IG1vdmluZyB0aGVtIG9mZnNjcmVlbi4gV2Ugc3RpbGwgbmVlZCB0byBhZGQgdGhlbSB0byB0aGUgYnVmZmVyXG4vLyBiZWNhdXNlIHRoZSBkeW5hbWljIGJ1ZmZlciBpcyBwYWlyZWQgd2l0aCBhIHN0YXRpYyBidWZmZXIgdGhhdCBkb2Vzbid0IGdldCB1cGRhdGVkLlxuZnVuY3Rpb24gaGlkZUdseXBocyhudW06IG51bWJlciwgZHluYW1pY0xheW91dFZlcnRleEFycmF5OiBTeW1ib2xEeW5hbWljTGF5b3V0QXJyYXkpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGg7XG4gICAgICAgIGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheS5yZXNpemUob2Zmc2V0ICsgNCk7XG4gICAgICAgIC8vIFNpbmNlIGFsbCBoaWRkZW4gZ2x5cGhzIGhhdmUgdGhlIHNhbWUgYXR0cmlidXRlcywgd2UgY2FuIGJ1aWxkIHVwIHRoZSBhcnJheSBmYXN0ZXIgd2l0aCBhIHNpbmdsZSBjYWxsIHRvIEZsb2F0MzJBcnJheS5zZXRcbiAgICAgICAgLy8gZm9yIGVhY2ggc2V0IG9mIGZvdXIgdmVydGljZXMsIGluc3RlYWQgb2YgY2FsbGluZyBhZGREeW5hbWljQXR0cmlidXRlcyBmb3IgZWFjaCB2ZXJ0ZXguXG4gICAgICAgIGR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheS5mbG9hdDMyLnNldChoaWRkZW5HbHlwaEF0dHJpYnV0ZXMsIG9mZnNldCAqIDMpO1xuICAgIH1cbn1cblxuLy8gRm9yIGxpbmUgbGFiZWwgbGF5b3V0LCB3ZSdyZSBub3QgdXNpbmcgeiBvdXRwdXQgYW5kIG91ciB3IGlucHV0IGlzIGFsd2F5cyAxXG4vLyBUaGlzIGN1c3RvbSBtYXRyaXggdHJhbnNmb3JtYXRpb24gaWdub3JlcyB0aG9zZSBjb21wb25lbnRzIHRvIG1ha2UgcHJvamVjdGlvbiBmYXN0ZXJcbmZ1bmN0aW9uIHh5VHJhbnNmb3JtTWF0NChvdXQ6IHZlYzQsIGE6IHZlYzQsIG06IG1hdDQpIHtcbiAgICBjb25zdCB4ID0gYVswXSwgeSA9IGFbMV07XG4gICAgb3V0WzBdID0gbVswXSAqIHggKyBtWzRdICogeSArIG1bMTJdO1xuICAgIG91dFsxXSA9IG1bMV0gKiB4ICsgbVs1XSAqIHkgKyBtWzEzXTtcbiAgICBvdXRbM10gPSBtWzNdICogeCArIG1bN10gKiB5ICsgbVsxNV07XG4gICAgcmV0dXJuIG91dDtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCBjbGlwTGluZSBmcm9tICcuL2NsaXBfbGluZSc7XG5pbXBvcnQgUGF0aEludGVycG9sYXRvciBmcm9tICcuL3BhdGhfaW50ZXJwb2xhdG9yJztcblxuaW1wb3J0ICogYXMgaW50ZXJzZWN0aW9uVGVzdHMgZnJvbSAnLi4vdXRpbC9pbnRlcnNlY3Rpb25fdGVzdHMnO1xuaW1wb3J0IEdyaWQgZnJvbSAnLi9ncmlkX2luZGV4JztcbmltcG9ydCB7bWF0NH0gZnJvbSAnZ2wtbWF0cml4JztcbmltcG9ydCBPTkVfRU0gZnJvbSAnLi4vc3ltYm9sL29uZV9lbSc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCAqIGFzIHByb2plY3Rpb24gZnJvbSAnLi4vc3ltYm9sL3Byb2plY3Rpb24nO1xuXG5pbXBvcnQgdHlwZSBUcmFuc2Zvcm0gZnJvbSAnLi4vZ2VvL3RyYW5zZm9ybSc7XG5pbXBvcnQgdHlwZSB7U2luZ2xlQ29sbGlzaW9uQm94fSBmcm9tICcuLi9kYXRhL2J1Y2tldC9zeW1ib2xfYnVja2V0JztcbmltcG9ydCB0eXBlIHtcbiAgICBHbHlwaE9mZnNldEFycmF5LFxuICAgIFN5bWJvbExpbmVWZXJ0ZXhBcnJheVxufSBmcm9tICcuLi9kYXRhL2FycmF5X3R5cGVzJztcblxuLy8gV2hlbiBhIHN5bWJvbCBjcm9zc2VzIHRoZSBlZGdlIHRoYXQgY2F1c2VzIGl0IHRvIGJlIGluY2x1ZGVkIGluXG4vLyBjb2xsaXNpb24gZGV0ZWN0aW9uLCBpdCB3aWxsIGNhdXNlIGNoYW5nZXMgaW4gdGhlIHN5bWJvbHMgYXJvdW5kXG4vLyBpdC4gVGhpcyBjb25zdGFudCBzcGVjaWZpZXMgaG93IG1hbnkgcGl4ZWxzIHRvIHBhZCB0aGUgZWRnZSBvZlxuLy8gdGhlIHZpZXdwb3J0IGZvciBjb2xsaXNpb24gZGV0ZWN0aW9uIHNvIHRoYXQgdGhlIGJ1bGsgb2YgdGhlIGNoYW5nZXNcbi8vIG9jY3VyIG9mZnNjcmVlbi4gTWFraW5nIHRoaXMgY29uc3RhbnQgZ3JlYXRlciBpbmNyZWFzZXMgbGFiZWxcbi8vIHN0YWJpbGl0eSwgYnV0IGl0J3MgZXhwZW5zaXZlLlxuY29uc3Qgdmlld3BvcnRQYWRkaW5nID0gMTAwO1xuXG4vKipcbiAqIEEgY29sbGlzaW9uIGluZGV4IHVzZWQgdG8gcHJldmVudCBzeW1ib2xzIGZyb20gb3ZlcmxhcHBpbmcuIEl0IGtlZXAgdHJhY2tzIG9mXG4gKiB3aGVyZSBwcmV2aW91cyBzeW1ib2xzIGhhdmUgYmVlbiBwbGFjZWQgYW5kIGlzIHVzZWQgdG8gY2hlY2sgaWYgYSBuZXdcbiAqIHN5bWJvbCBvdmVybGFwcyB3aXRoIGFueSBwcmV2aW91c2x5IGFkZGVkIHN5bWJvbHMuXG4gKlxuICogVGhlcmUgYXJlIHR3byBzdGVwcyB0byBpbnNlcnRpb246IGZpcnN0IHBsYWNlQ29sbGlzaW9uQm94L0NpcmNsZXMgY2hlY2tzIGlmXG4gKiB0aGVyZSdzIHJvb20gZm9yIGEgc3ltYm9sLCB0aGVuIGluc2VydENvbGxpc2lvbkJveC9DaXJjbGVzIGFjdHVhbGx5IHB1dHMgdGhlXG4gKiBzeW1ib2wgaW4gdGhlIGluZGV4LiBUaGUgdHdvIHN0ZXAgcHJvY2VzcyBhbGxvd3MgcGFpcmVkIHN5bWJvbHMgdG8gYmUgaW5zZXJ0ZWRcbiAqIHRvZ2V0aGVyIGV2ZW4gaWYgdGhleSBvdmVybGFwLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIENvbGxpc2lvbkluZGV4IHtcbiAgICBncmlkOiBHcmlkO1xuICAgIGlnbm9yZWRHcmlkOiBHcmlkO1xuICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtO1xuICAgIHBpdGNoZmFjdG9yOiBudW1iZXI7XG4gICAgc2NyZWVuUmlnaHRCb3VuZGFyeTogbnVtYmVyO1xuICAgIHNjcmVlbkJvdHRvbUJvdW5kYXJ5OiBudW1iZXI7XG4gICAgZ3JpZFJpZ2h0Qm91bmRhcnk6IG51bWJlcjtcbiAgICBncmlkQm90dG9tQm91bmRhcnk6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICB0cmFuc2Zvcm06IFRyYW5zZm9ybSxcbiAgICAgICAgZ3JpZDogR3JpZCA9IG5ldyBHcmlkKHRyYW5zZm9ybS53aWR0aCArIDIgKiB2aWV3cG9ydFBhZGRpbmcsIHRyYW5zZm9ybS5oZWlnaHQgKyAyICogdmlld3BvcnRQYWRkaW5nLCAyNSksXG4gICAgICAgIGlnbm9yZWRHcmlkOiBHcmlkID0gbmV3IEdyaWQodHJhbnNmb3JtLndpZHRoICsgMiAqIHZpZXdwb3J0UGFkZGluZywgdHJhbnNmb3JtLmhlaWdodCArIDIgKiB2aWV3cG9ydFBhZGRpbmcsIDI1KVxuICAgICkge1xuICAgICAgICB0aGlzLnRyYW5zZm9ybSA9IHRyYW5zZm9ybTtcblxuICAgICAgICB0aGlzLmdyaWQgPSBncmlkO1xuICAgICAgICB0aGlzLmlnbm9yZWRHcmlkID0gaWdub3JlZEdyaWQ7XG4gICAgICAgIHRoaXMucGl0Y2hmYWN0b3IgPSBNYXRoLmNvcyh0cmFuc2Zvcm0uX3BpdGNoKSAqIHRyYW5zZm9ybS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlO1xuXG4gICAgICAgIHRoaXMuc2NyZWVuUmlnaHRCb3VuZGFyeSA9IHRyYW5zZm9ybS53aWR0aCArIHZpZXdwb3J0UGFkZGluZztcbiAgICAgICAgdGhpcy5zY3JlZW5Cb3R0b21Cb3VuZGFyeSA9IHRyYW5zZm9ybS5oZWlnaHQgKyB2aWV3cG9ydFBhZGRpbmc7XG4gICAgICAgIHRoaXMuZ3JpZFJpZ2h0Qm91bmRhcnkgPSB0cmFuc2Zvcm0ud2lkdGggKyAyICogdmlld3BvcnRQYWRkaW5nO1xuICAgICAgICB0aGlzLmdyaWRCb3R0b21Cb3VuZGFyeSA9IHRyYW5zZm9ybS5oZWlnaHQgKyAyICogdmlld3BvcnRQYWRkaW5nO1xuICAgIH1cblxuICAgIHBsYWNlQ29sbGlzaW9uQm94KGNvbGxpc2lvbkJveDogU2luZ2xlQ29sbGlzaW9uQm94LCBhbGxvd092ZXJsYXA6IGJvb2xlYW4sIHRleHRQaXhlbFJhdGlvOiBudW1iZXIsIHBvc01hdHJpeDogbWF0NCwgY29sbGlzaW9uR3JvdXBQcmVkaWNhdGU/OiBhbnkpOiB7IGJveDogQXJyYXk8bnVtYmVyPiwgb2Zmc2NyZWVuOiBib29sZWFuIH0ge1xuICAgICAgICBjb25zdCBwcm9qZWN0ZWRQb2ludCA9IHRoaXMucHJvamVjdEFuZEdldFBlcnNwZWN0aXZlUmF0aW8ocG9zTWF0cml4LCBjb2xsaXNpb25Cb3guYW5jaG9yUG9pbnRYLCBjb2xsaXNpb25Cb3guYW5jaG9yUG9pbnRZKTtcbiAgICAgICAgY29uc3QgdGlsZVRvVmlld3BvcnQgPSB0ZXh0UGl4ZWxSYXRpbyAqIHByb2plY3RlZFBvaW50LnBlcnNwZWN0aXZlUmF0aW87XG4gICAgICAgIGNvbnN0IHRsWCA9IGNvbGxpc2lvbkJveC54MSAqIHRpbGVUb1ZpZXdwb3J0ICsgcHJvamVjdGVkUG9pbnQucG9pbnQueDtcbiAgICAgICAgY29uc3QgdGxZID0gY29sbGlzaW9uQm94LnkxICogdGlsZVRvVmlld3BvcnQgKyBwcm9qZWN0ZWRQb2ludC5wb2ludC55O1xuICAgICAgICBjb25zdCBiclggPSBjb2xsaXNpb25Cb3gueDIgKiB0aWxlVG9WaWV3cG9ydCArIHByb2plY3RlZFBvaW50LnBvaW50Lng7XG4gICAgICAgIGNvbnN0IGJyWSA9IGNvbGxpc2lvbkJveC55MiAqIHRpbGVUb1ZpZXdwb3J0ICsgcHJvamVjdGVkUG9pbnQucG9pbnQueTtcblxuICAgICAgICBpZiAoIXRoaXMuaXNJbnNpZGVHcmlkKHRsWCwgdGxZLCBiclgsIGJyWSkgfHxcbiAgICAgICAgICAgICghYWxsb3dPdmVybGFwICYmIHRoaXMuZ3JpZC5oaXRUZXN0KHRsWCwgdGxZLCBiclgsIGJyWSwgY29sbGlzaW9uR3JvdXBQcmVkaWNhdGUpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBib3g6IFtdLFxuICAgICAgICAgICAgICAgIG9mZnNjcmVlbjogZmFsc2VcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYm94OiBbdGxYLCB0bFksIGJyWCwgYnJZXSxcbiAgICAgICAgICAgIG9mZnNjcmVlbjogdGhpcy5pc09mZnNjcmVlbih0bFgsIHRsWSwgYnJYLCBiclkpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcGxhY2VDb2xsaXNpb25DaXJjbGVzKGFsbG93T3ZlcmxhcDogYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sOiBhbnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVWZXJ0ZXhBcnJheTogU3ltYm9sTGluZVZlcnRleEFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaE9mZnNldEFycmF5OiBHbHlwaE9mZnNldEFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NNYXRyaXg6IG1hdDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsUGxhbmVNYXRyaXg6IG1hdDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsVG9TY3JlZW5NYXRyaXg/OiBtYXQ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93Q29sbGlzaW9uQ2lyY2xlczogYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGl0Y2hXaXRoTWFwOiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsaXNpb25Hcm91cFByZWRpY2F0ZT86IGFueSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlUGl4ZWxEaWFtZXRlcjogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0UGl4ZWxQYWRkaW5nOiBudW1iZXIpOiB7IGNpcmNsZXM6IEFycmF5PG51bWJlcj4sIG9mZnNjcmVlbjogYm9vbGVhbiwgY29sbGlzaW9uRGV0ZWN0ZWQ6IGJvb2xlYW4gfSB7XG4gICAgICAgIGNvbnN0IHBsYWNlZENvbGxpc2lvbkNpcmNsZXMgPSBbXTtcblxuICAgICAgICBjb25zdCB0aWxlVW5pdEFuY2hvclBvaW50ID0gbmV3IFBvaW50KHN5bWJvbC5hbmNob3JYLCBzeW1ib2wuYW5jaG9yWSk7XG4gICAgICAgIGNvbnN0IHNjcmVlbkFuY2hvclBvaW50ID0gcHJvamVjdGlvbi5wcm9qZWN0KHRpbGVVbml0QW5jaG9yUG9pbnQsIHBvc01hdHJpeCk7XG4gICAgICAgIGNvbnN0IHBlcnNwZWN0aXZlUmF0aW8gPSBwcm9qZWN0aW9uLmdldFBlcnNwZWN0aXZlUmF0aW8odGhpcy50cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSwgc2NyZWVuQW5jaG9yUG9pbnQuc2lnbmVkRGlzdGFuY2VGcm9tQ2FtZXJhKTtcbiAgICAgICAgY29uc3QgbGFiZWxQbGFuZUZvbnRTaXplID0gcGl0Y2hXaXRoTWFwID8gZm9udFNpemUgLyBwZXJzcGVjdGl2ZVJhdGlvIDogZm9udFNpemUgKiBwZXJzcGVjdGl2ZVJhdGlvO1xuICAgICAgICBjb25zdCBsYWJlbFBsYW5lRm9udFNjYWxlID0gbGFiZWxQbGFuZUZvbnRTaXplIC8gT05FX0VNO1xuXG4gICAgICAgIGNvbnN0IGxhYmVsUGxhbmVBbmNob3JQb2ludCA9IHByb2plY3Rpb24ucHJvamVjdCh0aWxlVW5pdEFuY2hvclBvaW50LCBsYWJlbFBsYW5lTWF0cml4KS5wb2ludDtcblxuICAgICAgICBjb25zdCBwcm9qZWN0aW9uQ2FjaGUgPSB7fTtcbiAgICAgICAgY29uc3QgbGluZU9mZnNldFggPSBzeW1ib2wubGluZU9mZnNldFggKiBsYWJlbFBsYW5lRm9udFNjYWxlO1xuICAgICAgICBjb25zdCBsaW5lT2Zmc2V0WSA9IHN5bWJvbC5saW5lT2Zmc2V0WSAqIGxhYmVsUGxhbmVGb250U2NhbGU7XG5cbiAgICAgICAgY29uc3QgZmlyc3RBbmRMYXN0R2x5cGggPSBwcm9qZWN0aW9uLnBsYWNlRmlyc3RBbmRMYXN0R2x5cGgoXG4gICAgICAgICAgICBsYWJlbFBsYW5lRm9udFNjYWxlLFxuICAgICAgICAgICAgZ2x5cGhPZmZzZXRBcnJheSxcbiAgICAgICAgICAgIGxpbmVPZmZzZXRYLFxuICAgICAgICAgICAgbGluZU9mZnNldFksXG4gICAgICAgICAgICAvKmZsaXAqLyBmYWxzZSxcbiAgICAgICAgICAgIGxhYmVsUGxhbmVBbmNob3JQb2ludCxcbiAgICAgICAgICAgIHRpbGVVbml0QW5jaG9yUG9pbnQsXG4gICAgICAgICAgICBzeW1ib2wsXG4gICAgICAgICAgICBsaW5lVmVydGV4QXJyYXksXG4gICAgICAgICAgICBsYWJlbFBsYW5lTWF0cml4LFxuICAgICAgICAgICAgcHJvamVjdGlvbkNhY2hlKTtcblxuICAgICAgICBsZXQgY29sbGlzaW9uRGV0ZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgbGV0IGluR3JpZCA9IGZhbHNlO1xuICAgICAgICBsZXQgZW50aXJlbHlPZmZzY3JlZW4gPSB0cnVlO1xuXG4gICAgICAgIGlmIChmaXJzdEFuZExhc3RHbHlwaCkge1xuICAgICAgICAgICAgY29uc3QgcmFkaXVzID0gY2lyY2xlUGl4ZWxEaWFtZXRlciAqIDAuNSAqIHBlcnNwZWN0aXZlUmF0aW8gKyB0ZXh0UGl4ZWxQYWRkaW5nO1xuICAgICAgICAgICAgY29uc3Qgc2NyZWVuUGxhbmVNaW4gPSBuZXcgUG9pbnQoLXZpZXdwb3J0UGFkZGluZywgLXZpZXdwb3J0UGFkZGluZyk7XG4gICAgICAgICAgICBjb25zdCBzY3JlZW5QbGFuZU1heCA9IG5ldyBQb2ludCh0aGlzLnNjcmVlblJpZ2h0Qm91bmRhcnksIHRoaXMuc2NyZWVuQm90dG9tQm91bmRhcnkpO1xuICAgICAgICAgICAgY29uc3QgaW50ZXJwb2xhdG9yID0gbmV3IFBhdGhJbnRlcnBvbGF0b3IoKTtcblxuICAgICAgICAgICAgLy8gQ29uc3RydWN0IGEgcHJvamVjdGVkIHBhdGggZnJvbSBwcm9qZWN0ZWQgbGluZSB2ZXJ0aWNlcy4gQW5jaG9yIHBvaW50cyBhcmUgaWdub3JlZCBhbmQgcmVtb3ZlZFxuICAgICAgICAgICAgY29uc3QgZmlyc3QgPSBmaXJzdEFuZExhc3RHbHlwaC5maXJzdDtcbiAgICAgICAgICAgIGNvbnN0IGxhc3QgPSBmaXJzdEFuZExhc3RHbHlwaC5sYXN0O1xuXG4gICAgICAgICAgICBsZXQgcHJvamVjdGVkUGF0aCA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGZpcnN0LnBhdGgubGVuZ3RoIC0gMTsgaSA+PSAxOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBwcm9qZWN0ZWRQYXRoLnB1c2goZmlyc3QucGF0aFtpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGxhc3QucGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHByb2plY3RlZFBhdGgucHVzaChsYXN0LnBhdGhbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXNzZXJ0KHByb2plY3RlZFBhdGgubGVuZ3RoID49IDIpO1xuXG4gICAgICAgICAgICAvLyBUb2xlcmF0ZSBhIHNsaWdodGx5IGxvbmdlciBkaXN0YW5jZSB0aGFuIG9uZSBkaWFtZXRlciBiZXR3ZWVuIHR3byBhZGphY2VudCBjaXJjbGVzXG4gICAgICAgICAgICBjb25zdCBjaXJjbGVEaXN0ID0gcmFkaXVzICogMi41O1xuXG4gICAgICAgICAgICAvLyBUaGUgcGF0aCBtaWdodCBuZWVkIHRvIGJlIGNvbnZlcnRlZCBpbnRvIHNjcmVlbiBzcGFjZSBpZiBhIHBpdGNoZWQgbWFwIGlzIHVzZWQgYXMgdGhlIGxhYmVsIHNwYWNlXG4gICAgICAgICAgICBpZiAobGFiZWxUb1NjcmVlbk1hdHJpeCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjcmVlblNwYWNlUGF0aCA9IHByb2plY3RlZFBhdGgubWFwKHAgPT4gcHJvamVjdGlvbi5wcm9qZWN0KHAsIGxhYmVsVG9TY3JlZW5NYXRyaXgpKTtcblxuICAgICAgICAgICAgICAgIC8vIERvIG5vdCB0cnkgdG8gcGxhY2UgY29sbGlzaW9uIGNpcmNsZXMgaWYgZXZlbiBvZiB0aGUgcG9pbnRzIGlzIGJlaGluZCB0aGUgY2FtZXJhLlxuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBwbGF1c2libGUgc2NlbmFyaW8gd2l0aCBiaWcgY2FtZXJhIHBpdGNoIGFuZ2xlc1xuICAgICAgICAgICAgICAgIGlmIChzY3JlZW5TcGFjZVBhdGguc29tZShwb2ludCA9PiBwb2ludC5zaWduZWREaXN0YW5jZUZyb21DYW1lcmEgPD0gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvamVjdGVkUGF0aCA9IFtdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2plY3RlZFBhdGggPSBzY3JlZW5TcGFjZVBhdGgubWFwKHAgPT4gcC5wb2ludCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgc2VnbWVudHMgPSBbXTtcblxuICAgICAgICAgICAgaWYgKHByb2plY3RlZFBhdGgubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIFF1aWNrbHkgY2hlY2sgaWYgdGhlIHBhdGggaXMgZnVsbHkgaW5zaWRlIG9yIG91dHNpZGUgb2YgdGhlIHBhZGRlZCBjb2xsaXNpb24gcmVnaW9uLlxuICAgICAgICAgICAgICAgIC8vIEZvciBvdmVybGFwcGluZyBwYXRocyB3ZSdsbCBvbmx5IGNyZWF0ZSBjb2xsaXNpb24gY2lyY2xlcyBmb3IgdGhlIHZpc2libGUgc2VnbWVudHNcbiAgICAgICAgICAgICAgICBjb25zdCBtaW5Qb2ludCA9IHByb2plY3RlZFBhdGhbMF0uY2xvbmUoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXhQb2ludCA9IHByb2plY3RlZFBhdGhbMF0uY2xvbmUoKTtcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcHJvamVjdGVkUGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBtaW5Qb2ludC54ID0gTWF0aC5taW4obWluUG9pbnQueCwgcHJvamVjdGVkUGF0aFtpXS54KTtcbiAgICAgICAgICAgICAgICAgICAgbWluUG9pbnQueSA9IE1hdGgubWluKG1pblBvaW50LnksIHByb2plY3RlZFBhdGhbaV0ueSk7XG4gICAgICAgICAgICAgICAgICAgIG1heFBvaW50LnggPSBNYXRoLm1heChtYXhQb2ludC54LCBwcm9qZWN0ZWRQYXRoW2ldLngpO1xuICAgICAgICAgICAgICAgICAgICBtYXhQb2ludC55ID0gTWF0aC5tYXgobWF4UG9pbnQueSwgcHJvamVjdGVkUGF0aFtpXS55KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobWluUG9pbnQueCA+PSBzY3JlZW5QbGFuZU1pbi54ICYmIG1heFBvaW50LnggPD0gc2NyZWVuUGxhbmVNYXgueCAmJlxuICAgICAgICAgICAgICAgICAgICBtaW5Qb2ludC55ID49IHNjcmVlblBsYW5lTWluLnkgJiYgbWF4UG9pbnQueSA8PSBzY3JlZW5QbGFuZU1heC55KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFF1YWQgZnVsbHkgdmlzaWJsZVxuICAgICAgICAgICAgICAgICAgICBzZWdtZW50cyA9IFtwcm9qZWN0ZWRQYXRoXTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1heFBvaW50LnggPCBzY3JlZW5QbGFuZU1pbi54IHx8IG1pblBvaW50LnggPiBzY3JlZW5QbGFuZU1heC54IHx8XG4gICAgICAgICAgICAgICAgICAgIG1heFBvaW50LnkgPCBzY3JlZW5QbGFuZU1pbi55IHx8IG1pblBvaW50LnkgPiBzY3JlZW5QbGFuZU1heC55KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIE5vdCB2aXNpYmxlXG4gICAgICAgICAgICAgICAgICAgIHNlZ21lbnRzID0gW107XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2VnbWVudHMgPSBjbGlwTGluZShbcHJvamVjdGVkUGF0aF0sIHNjcmVlblBsYW5lTWluLngsIHNjcmVlblBsYW5lTWluLnksIHNjcmVlblBsYW5lTWF4LngsIHNjcmVlblBsYW5lTWF4LnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBzZWcgb2Ygc2VnbWVudHMpIHtcbiAgICAgICAgICAgICAgICAvLyBpbnRlcnBvbGF0ZSBwb3NpdGlvbnMgZm9yIGNvbGxpc2lvbiBjaXJjbGVzLiBBZGQgYSBzbWFsbCBwYWRkaW5nIHRvIGJvdGggZW5kcyBvZiB0aGUgc2VnbWVudFxuICAgICAgICAgICAgICAgIGFzc2VydChzZWcubGVuZ3RoID4gMCk7XG4gICAgICAgICAgICAgICAgaW50ZXJwb2xhdG9yLnJlc2V0KHNlZywgcmFkaXVzICogMC4yNSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgbnVtQ2lyY2xlcyA9IDA7XG5cbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJwb2xhdG9yLmxlbmd0aCA8PSAwLjUgKiByYWRpdXMpIHtcbiAgICAgICAgICAgICAgICAgICAgbnVtQ2lyY2xlcyA9IDE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbnVtQ2lyY2xlcyA9IE1hdGguY2VpbChpbnRlcnBvbGF0b3IucGFkZGVkTGVuZ3RoIC8gY2lyY2xlRGlzdCkgKyAxO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtQ2lyY2xlczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHQgPSBpIC8gTWF0aC5tYXgobnVtQ2lyY2xlcyAtIDEsIDEpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaXJjbGVQb3NpdGlvbiA9IGludGVycG9sYXRvci5sZXJwKHQpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGFkZCB2aWV3cG9ydCBwYWRkaW5nIHRvIHRoZSBwb3NpdGlvbiBhbmQgcGVyZm9ybSBpbml0aWFsIGNvbGxpc2lvbiBjaGVja1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjZW50ZXJYID0gY2lyY2xlUG9zaXRpb24ueCArIHZpZXdwb3J0UGFkZGluZztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VudGVyWSA9IGNpcmNsZVBvc2l0aW9uLnkgKyB2aWV3cG9ydFBhZGRpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgcGxhY2VkQ29sbGlzaW9uQ2lyY2xlcy5wdXNoKGNlbnRlclgsIGNlbnRlclksIHJhZGl1cywgMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeDEgPSBjZW50ZXJYIC0gcmFkaXVzO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB5MSA9IGNlbnRlclkgLSByYWRpdXM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHgyID0gY2VudGVyWCArIHJhZGl1cztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeTIgPSBjZW50ZXJZICsgcmFkaXVzO1xuXG4gICAgICAgICAgICAgICAgICAgIGVudGlyZWx5T2Zmc2NyZWVuID0gZW50aXJlbHlPZmZzY3JlZW4gJiYgdGhpcy5pc09mZnNjcmVlbih4MSwgeTEsIHgyLCB5Mik7XG4gICAgICAgICAgICAgICAgICAgIGluR3JpZCA9IGluR3JpZCB8fCB0aGlzLmlzSW5zaWRlR3JpZCh4MSwgeTEsIHgyLCB5Mik7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhbGxvd092ZXJsYXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuaGl0VGVzdENpcmNsZShjZW50ZXJYLCBjZW50ZXJZLCByYWRpdXMsIGNvbGxpc2lvbkdyb3VwUHJlZGljYXRlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IGVhcmx5IGV4aXQgaWYgd2UncmUgc2hvd2luZyB0aGUgZGVidWcgY2lyY2xlcyBiZWNhdXNlIHdlIHN0aWxsIHdhbnQgdG8gY2FsY3VsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggY2lyY2xlcyBhcmUgaW4gdXNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGlzaW9uRGV0ZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2hvd0NvbGxpc2lvbkNpcmNsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZXM6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2NyZWVuOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxpc2lvbkRldGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNpcmNsZXM6ICgoIXNob3dDb2xsaXNpb25DaXJjbGVzICYmIGNvbGxpc2lvbkRldGVjdGVkKSB8fCAhaW5HcmlkKSA/IFtdIDogcGxhY2VkQ29sbGlzaW9uQ2lyY2xlcyxcbiAgICAgICAgICAgIG9mZnNjcmVlbjogZW50aXJlbHlPZmZzY3JlZW4sXG4gICAgICAgICAgICBjb2xsaXNpb25EZXRlY3RlZFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJlY2F1c2UgdGhlIGdlb21ldHJpZXMgaW4gdGhlIENvbGxpc2lvbkluZGV4IGFyZSBhbiBhcHByb3hpbWF0aW9uIG9mIHRoZSBzaGFwZSBvZlxuICAgICAqIHN5bWJvbHMgb24gdGhlIG1hcCwgd2UgdXNlIHRoZSBDb2xsaXNpb25JbmRleCB0byBsb29rIHVwIHRoZSBzeW1ib2wgcGFydCBvZlxuICAgICAqIGBxdWVyeVJlbmRlcmVkRmVhdHVyZXNgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBxdWVyeVJlbmRlcmVkU3ltYm9scyh2aWV3cG9ydFF1ZXJ5R2VvbWV0cnk6IEFycmF5PFBvaW50Pikge1xuICAgICAgICBpZiAodmlld3BvcnRRdWVyeUdlb21ldHJ5Lmxlbmd0aCA9PT0gMCB8fCAodGhpcy5ncmlkLmtleXNMZW5ndGgoKSA9PT0gMCAmJiB0aGlzLmlnbm9yZWRHcmlkLmtleXNMZW5ndGgoKSA9PT0gMCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gW107XG4gICAgICAgIGxldCBtaW5YID0gSW5maW5pdHk7XG4gICAgICAgIGxldCBtaW5ZID0gSW5maW5pdHk7XG4gICAgICAgIGxldCBtYXhYID0gLUluZmluaXR5O1xuICAgICAgICBsZXQgbWF4WSA9IC1JbmZpbml0eTtcbiAgICAgICAgZm9yIChjb25zdCBwb2ludCBvZiB2aWV3cG9ydFF1ZXJ5R2VvbWV0cnkpIHtcbiAgICAgICAgICAgIGNvbnN0IGdyaWRQb2ludCA9IG5ldyBQb2ludChwb2ludC54ICsgdmlld3BvcnRQYWRkaW5nLCBwb2ludC55ICsgdmlld3BvcnRQYWRkaW5nKTtcbiAgICAgICAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCBncmlkUG9pbnQueCk7XG4gICAgICAgICAgICBtaW5ZID0gTWF0aC5taW4obWluWSwgZ3JpZFBvaW50LnkpO1xuICAgICAgICAgICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIGdyaWRQb2ludC54KTtcbiAgICAgICAgICAgIG1heFkgPSBNYXRoLm1heChtYXhZLCBncmlkUG9pbnQueSk7XG4gICAgICAgICAgICBxdWVyeS5wdXNoKGdyaWRQb2ludCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmZWF0dXJlcyA9IHRoaXMuZ3JpZC5xdWVyeShtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZKVxuICAgICAgICAgICAgLmNvbmNhdCh0aGlzLmlnbm9yZWRHcmlkLnF1ZXJ5KG1pblgsIG1pblksIG1heFgsIG1heFkpKTtcblxuICAgICAgICBjb25zdCBzZWVuRmVhdHVyZXMgPSB7fTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG5cbiAgICAgICAgZm9yIChjb25zdCBmZWF0dXJlIG9mIGZlYXR1cmVzKSB7XG4gICAgICAgICAgICBjb25zdCBmZWF0dXJlS2V5ID0gZmVhdHVyZS5rZXk7XG4gICAgICAgICAgICAvLyBTa2lwIGFscmVhZHkgc2VlbiBmZWF0dXJlcy5cbiAgICAgICAgICAgIGlmIChzZWVuRmVhdHVyZXNbZmVhdHVyZUtleS5idWNrZXRJbnN0YW5jZUlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgc2VlbkZlYXR1cmVzW2ZlYXR1cmVLZXkuYnVja2V0SW5zdGFuY2VJZF0gPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWVuRmVhdHVyZXNbZmVhdHVyZUtleS5idWNrZXRJbnN0YW5jZUlkXVtmZWF0dXJlS2V5LmZlYXR1cmVJbmRleF0pIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgcXVlcnkgaW50ZXJzZWN0cyB3aXRoIHRoZSBmZWF0dXJlIGJveFxuICAgICAgICAgICAgLy8gXCJDb2xsaXNpb24gQ2lyY2xlc1wiIGZvciBsaW5lIGxhYmVscyBhcmUgdHJlYXRlZCBhcyBib3hlcyBoZXJlXG4gICAgICAgICAgICAvLyBTaW5jZSB0aGVyZSdzIG5vIGFjdHVhbCBjb2xsaXNpb24gdGFraW5nIHBsYWNlLCB0aGUgY2lyY2xlIHZzLiBzcXVhcmVcbiAgICAgICAgICAgIC8vIGRpc3RpbmN0aW9uIGRvZXNuJ3QgbWF0dGVyIGFzIG11Y2gsIGFuZCBib3ggZ2VvbWV0cnkgaXMgZWFzaWVyXG4gICAgICAgICAgICAvLyB0byB3b3JrIHdpdGguXG4gICAgICAgICAgICBjb25zdCBiYm94ID0gW1xuICAgICAgICAgICAgICAgIG5ldyBQb2ludChmZWF0dXJlLngxLCBmZWF0dXJlLnkxKSxcbiAgICAgICAgICAgICAgICBuZXcgUG9pbnQoZmVhdHVyZS54MiwgZmVhdHVyZS55MSksXG4gICAgICAgICAgICAgICAgbmV3IFBvaW50KGZlYXR1cmUueDIsIGZlYXR1cmUueTIpLFxuICAgICAgICAgICAgICAgIG5ldyBQb2ludChmZWF0dXJlLngxLCBmZWF0dXJlLnkyKVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGlmICghaW50ZXJzZWN0aW9uVGVzdHMucG9seWdvbkludGVyc2VjdHNQb2x5Z29uKHF1ZXJ5LCBiYm94KSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZWVuRmVhdHVyZXNbZmVhdHVyZUtleS5idWNrZXRJbnN0YW5jZUlkXVtmZWF0dXJlS2V5LmZlYXR1cmVJbmRleF0gPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHJlc3VsdFtmZWF0dXJlS2V5LmJ1Y2tldEluc3RhbmNlSWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRbZmVhdHVyZUtleS5idWNrZXRJbnN0YW5jZUlkXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0W2ZlYXR1cmVLZXkuYnVja2V0SW5zdGFuY2VJZF0ucHVzaChmZWF0dXJlS2V5LmZlYXR1cmVJbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGluc2VydENvbGxpc2lvbkJveChjb2xsaXNpb25Cb3g6IEFycmF5PG51bWJlcj4sIGlnbm9yZVBsYWNlbWVudDogYm9vbGVhbiwgYnVja2V0SW5zdGFuY2VJZDogbnVtYmVyLCBmZWF0dXJlSW5kZXg6IG51bWJlciwgY29sbGlzaW9uR3JvdXBJRDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSBpZ25vcmVQbGFjZW1lbnQgPyB0aGlzLmlnbm9yZWRHcmlkIDogdGhpcy5ncmlkO1xuXG4gICAgICAgIGNvbnN0IGtleSA9IHtidWNrZXRJbnN0YW5jZUlkLCBmZWF0dXJlSW5kZXgsIGNvbGxpc2lvbkdyb3VwSUR9O1xuICAgICAgICBncmlkLmluc2VydChrZXksIGNvbGxpc2lvbkJveFswXSwgY29sbGlzaW9uQm94WzFdLCBjb2xsaXNpb25Cb3hbMl0sIGNvbGxpc2lvbkJveFszXSk7XG4gICAgfVxuXG4gICAgaW5zZXJ0Q29sbGlzaW9uQ2lyY2xlcyhjb2xsaXNpb25DaXJjbGVzOiBBcnJheTxudW1iZXI+LCBpZ25vcmVQbGFjZW1lbnQ6IGJvb2xlYW4sIGJ1Y2tldEluc3RhbmNlSWQ6IG51bWJlciwgZmVhdHVyZUluZGV4OiBudW1iZXIsIGNvbGxpc2lvbkdyb3VwSUQ6IG51bWJlcikge1xuICAgICAgICBjb25zdCBncmlkID0gaWdub3JlUGxhY2VtZW50ID8gdGhpcy5pZ25vcmVkR3JpZCA6IHRoaXMuZ3JpZDtcblxuICAgICAgICBjb25zdCBrZXkgPSB7YnVja2V0SW5zdGFuY2VJZCwgZmVhdHVyZUluZGV4LCBjb2xsaXNpb25Hcm91cElEfTtcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBjb2xsaXNpb25DaXJjbGVzLmxlbmd0aDsgayArPSA0KSB7XG4gICAgICAgICAgICBncmlkLmluc2VydENpcmNsZShrZXksIGNvbGxpc2lvbkNpcmNsZXNba10sIGNvbGxpc2lvbkNpcmNsZXNbayArIDFdLCBjb2xsaXNpb25DaXJjbGVzW2sgKyAyXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm9qZWN0QW5kR2V0UGVyc3BlY3RpdmVSYXRpbyhwb3NNYXRyaXg6IG1hdDQsIHg6IG51bWJlciwgeTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHAgPSBbeCwgeSwgMCwgMV07XG4gICAgICAgIHByb2plY3Rpb24ueHlUcmFuc2Zvcm1NYXQ0KHAsIHAsIHBvc01hdHJpeCk7XG4gICAgICAgIGNvbnN0IGEgPSBuZXcgUG9pbnQoXG4gICAgICAgICAgICAoKChwWzBdIC8gcFszXSArIDEpIC8gMikgKiB0aGlzLnRyYW5zZm9ybS53aWR0aCkgKyB2aWV3cG9ydFBhZGRpbmcsXG4gICAgICAgICAgICAoKCgtcFsxXSAvIHBbM10gKyAxKSAvIDIpICogdGhpcy50cmFuc2Zvcm0uaGVpZ2h0KSArIHZpZXdwb3J0UGFkZGluZ1xuICAgICAgICApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcG9pbnQ6IGEsXG4gICAgICAgICAgICAvLyBTZWUgcGVyc3BlY3RpdmUgcmF0aW8gY29tbWVudCBpbiBzeW1ib2xfc2RmLnZlcnRleFxuICAgICAgICAgICAgLy8gV2UncmUgZG9pbmcgY29sbGlzaW9uIGRldGVjdGlvbiBpbiB2aWV3cG9ydCBzcGFjZSBzbyB3ZSBuZWVkXG4gICAgICAgICAgICAvLyB0byBzY2FsZSBkb3duIGJveGVzIGluIHRoZSBkaXN0YW5jZVxuICAgICAgICAgICAgcGVyc3BlY3RpdmVSYXRpbzogMC41ICsgMC41ICogKHRoaXMudHJhbnNmb3JtLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UgLyBwWzNdKVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGlzT2Zmc2NyZWVuKHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHgyIDwgdmlld3BvcnRQYWRkaW5nIHx8IHgxID49IHRoaXMuc2NyZWVuUmlnaHRCb3VuZGFyeSB8fCB5MiA8IHZpZXdwb3J0UGFkZGluZyB8fCB5MSA+IHRoaXMuc2NyZWVuQm90dG9tQm91bmRhcnk7XG4gICAgfVxuXG4gICAgaXNJbnNpZGVHcmlkKHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHgyID49IDAgJiYgeDEgPCB0aGlzLmdyaWRSaWdodEJvdW5kYXJ5ICYmIHkyID49IDAgJiYgeTEgPCB0aGlzLmdyaWRCb3R0b21Cb3VuZGFyeTtcbiAgICB9XG5cbiAgICAvKlxuICAgICogUmV0dXJucyBhIG1hdHJpeCBmb3IgdHJhbnNmb3JtaW5nIGNvbGxpc2lvbiBzaGFwZXMgdG8gdmlld3BvcnQgY29vcmRpbmF0ZSBzcGFjZS5cbiAgICAqIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHJlbmRlciBlLmcuIGNvbGxpc2lvbiBjaXJjbGVzIG9uIHRoZSBzY3JlZW4uXG4gICAgKiAgIGV4YW1wbGUgdHJhbnNmb3JtYXRpb246IGNsaXBQb3MgPSBnbENvb3JkTWF0cml4ICogdmlld3BvcnRNYXRyaXggKiBjaXJjbGVfcG9zXG4gICAgKi9cbiAgICBnZXRWaWV3cG9ydE1hdHJpeCgpOiBtYXQ0IHtcbiAgICAgICAgY29uc3QgbSA9IG1hdDQuaWRlbnRpdHkoW10pO1xuICAgICAgICBtYXQ0LnRyYW5zbGF0ZShtLCBtLCBbLXZpZXdwb3J0UGFkZGluZywgLXZpZXdwb3J0UGFkZGluZywgMC4wXSk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29sbGlzaW9uSW5kZXg7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgRVhURU5UIGZyb20gJy4uL2RhdGEvZXh0ZW50JztcblxuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4vdGlsZV9pZCc7XG5cbi8qKlxuICogQ29udmVydHMgYSBwaXhlbCB2YWx1ZSBhdCBhIHRoZSBnaXZlbiB6b29tIGxldmVsIHRvIHRpbGUgdW5pdHMuXG4gKlxuICogVGhlIHNoYWRlcnMgbW9zdGx5IGNhbGN1bGF0ZSBldmVyeXRoaW5nIGluIHRpbGUgdW5pdHMgc28gc3R5bGVcbiAqIHByb3BlcnRpZXMgbmVlZCB0byBiZSBjb252ZXJ0ZWQgZnJvbSBwaXhlbHMgdG8gdGlsZSB1bml0cyB1c2luZyB0aGlzLlxuICpcbiAqIEZvciBleGFtcGxlLCBhIHRyYW5zbGF0aW9uIGJ5IDMwIHBpeGVscyBhdCB6b29tIDYuNSB3aWxsIGJlIGFcbiAqIHRyYW5zbGF0aW9uIGJ5IHBpeGVsc1RvVGlsZVVuaXRzKDMwLCA2LjUpIHRpbGUgdW5pdHMuXG4gKlxuICogQHJldHVybnMgdmFsdWUgaW4gdGlsZSB1bml0c1xuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odGlsZToge3RpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCwgdGlsZVNpemU6IG51bWJlcn0sIHBpeGVsVmFsdWU6IG51bWJlciwgejogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGl4ZWxWYWx1ZSAqIChFWFRFTlQgLyAodGlsZS50aWxlU2l6ZSAqIE1hdGgucG93KDIsIHogLSB0aWxlLnRpbGVJRC5vdmVyc2NhbGVkWikpKTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBDb2xsaXNpb25JbmRleCBmcm9tICcuL2NvbGxpc2lvbl9pbmRleCc7XG5pbXBvcnQgRVhURU5UIGZyb20gJy4uL2RhdGEvZXh0ZW50JztcbmltcG9ydCAqIGFzIHN5bWJvbFNpemUgZnJvbSAnLi9zeW1ib2xfc2l6ZSc7XG5pbXBvcnQgKiBhcyBwcm9qZWN0aW9uIGZyb20gJy4vcHJvamVjdGlvbic7XG5pbXBvcnQge2dldEFuY2hvckp1c3RpZmljYXRpb24sIGV2YWx1YXRlVmFyaWFibGVPZmZzZXR9IGZyb20gJy4vc3ltYm9sX2xheW91dCc7XG5pbXBvcnQge2dldEFuY2hvckFsaWdubWVudCwgV3JpdGluZ01vZGV9IGZyb20gJy4vc2hhcGluZyc7XG5pbXBvcnQge21hdDR9IGZyb20gJ2dsLW1hdHJpeCc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgcGl4ZWxzVG9UaWxlVW5pdHMgZnJvbSAnLi4vc291cmNlL3BpeGVsc190b190aWxlX3VuaXRzJztcbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi9nZW8vdHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXInO1xuXG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4uL3NvdXJjZS90aWxlJztcbmltcG9ydCB0eXBlIFN5bWJvbEJ1Y2tldCwge0NvbGxpc2lvbkFycmF5cywgU2luZ2xlQ29sbGlzaW9uQm94fSBmcm9tICcuLi9kYXRhL2J1Y2tldC9zeW1ib2xfYnVja2V0JztcbmltcG9ydCB0eXBlIHtDb2xsaXNpb25Cb3hBcnJheSwgQ29sbGlzaW9uVmVydGV4QXJyYXksIFN5bWJvbEluc3RhbmNlfSBmcm9tICcuLi9kYXRhL2FycmF5X3R5cGVzJztcbmltcG9ydCB0eXBlIEZlYXR1cmVJbmRleCBmcm9tICcuLi9kYXRhL2ZlYXR1cmVfaW5kZXgnO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uL3NvdXJjZS90aWxlX2lkJztcbmltcG9ydCB0eXBlIHtUZXh0QW5jaG9yfSBmcm9tICcuL3N5bWJvbF9sYXlvdXQnO1xuXG5jbGFzcyBPcGFjaXR5U3RhdGUge1xuICAgIG9wYWNpdHk6IG51bWJlcjtcbiAgICBwbGFjZWQ6IGJvb2xlYW47XG4gICAgY29uc3RydWN0b3IocHJldlN0YXRlOiA/T3BhY2l0eVN0YXRlLCBpbmNyZW1lbnQ6IG51bWJlciwgcGxhY2VkOiBib29sZWFuLCBza2lwRmFkZTogP2Jvb2xlYW4pIHtcbiAgICAgICAgaWYgKHByZXZTdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5vcGFjaXR5ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgcHJldlN0YXRlLm9wYWNpdHkgKyAocHJldlN0YXRlLnBsYWNlZCA/IGluY3JlbWVudCA6IC1pbmNyZW1lbnQpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9wYWNpdHkgPSAoc2tpcEZhZGUgJiYgcGxhY2VkKSA/IDEgOiAwO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGxhY2VkID0gcGxhY2VkO1xuICAgIH1cbiAgICBpc0hpZGRlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3BhY2l0eSA9PT0gMCAmJiAhdGhpcy5wbGFjZWQ7XG4gICAgfVxufVxuXG5jbGFzcyBKb2ludE9wYWNpdHlTdGF0ZSB7XG4gICAgdGV4dDogT3BhY2l0eVN0YXRlO1xuICAgIGljb246IE9wYWNpdHlTdGF0ZTtcbiAgICBjb25zdHJ1Y3RvcihwcmV2U3RhdGU6ID9Kb2ludE9wYWNpdHlTdGF0ZSwgaW5jcmVtZW50OiBudW1iZXIsIHBsYWNlZFRleHQ6IGJvb2xlYW4sIHBsYWNlZEljb246IGJvb2xlYW4sIHNraXBGYWRlOiA/Ym9vbGVhbikge1xuICAgICAgICB0aGlzLnRleHQgPSBuZXcgT3BhY2l0eVN0YXRlKHByZXZTdGF0ZSA/IHByZXZTdGF0ZS50ZXh0IDogbnVsbCwgaW5jcmVtZW50LCBwbGFjZWRUZXh0LCBza2lwRmFkZSk7XG4gICAgICAgIHRoaXMuaWNvbiA9IG5ldyBPcGFjaXR5U3RhdGUocHJldlN0YXRlID8gcHJldlN0YXRlLmljb24gOiBudWxsLCBpbmNyZW1lbnQsIHBsYWNlZEljb24sIHNraXBGYWRlKTtcbiAgICB9XG4gICAgaXNIaWRkZW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHQuaXNIaWRkZW4oKSAmJiB0aGlzLmljb24uaXNIaWRkZW4oKTtcbiAgICB9XG59XG5cbmNsYXNzIEpvaW50UGxhY2VtZW50IHtcbiAgICB0ZXh0OiBib29sZWFuO1xuICAgIGljb246IGJvb2xlYW47XG4gICAgLy8gc2tpcEZhZGUgPSBvdXRzaWRlIHZpZXdwb3J0LCBidXQgd2l0aGluIENvbGxpc2lvbkluZGV4Ojp2aWV3cG9ydFBhZGRpbmcgcHggb2YgdGhlIGVkZ2VcbiAgICAvLyBCZWNhdXNlIHRoZXNlIHN5bWJvbHMgYXJlbid0IG9uc2NyZWVuIHlldCwgd2UgY2FuIHNraXAgdGhlIFwiZmFkZSBpblwiIGFuaW1hdGlvbixcbiAgICAvLyBhbmQgaWYgYSBzdWJzZXF1ZW50IHZpZXdwb3J0IGNoYW5nZSBicmluZ3MgdGhlbSBpbnRvIHZpZXcsIHRoZXknbGwgYmUgZnVsbHlcbiAgICAvLyB2aXNpYmxlIHJpZ2h0IGF3YXkuXG4gICAgc2tpcEZhZGU6IGJvb2xlYW47XG4gICAgY29uc3RydWN0b3IodGV4dDogYm9vbGVhbiwgaWNvbjogYm9vbGVhbiwgc2tpcEZhZGU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICAgICAgdGhpcy5pY29uID0gaWNvbjtcbiAgICAgICAgdGhpcy5za2lwRmFkZSA9IHNraXBGYWRlO1xuICAgIH1cbn1cblxuY2xhc3MgQ29sbGlzaW9uQ2lyY2xlQXJyYXkge1xuICAgIC8vIFN0b3JlcyBjb2xsaXNpb24gY2lyY2xlcyBhbmQgcGxhY2VtZW50IG1hdHJpY2VzIG9mIGEgYnVja2V0IGZvciBkZWJ1ZyByZW5kZXJpbmcuXG4gICAgaW52UHJvak1hdHJpeDogbWF0NDtcbiAgICB2aWV3cG9ydE1hdHJpeDogbWF0NDtcbiAgICBjaXJjbGVzOiBBcnJheTxudW1iZXI+O1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuaW52UHJvak1hdHJpeCA9IG1hdDQuY3JlYXRlKCk7XG4gICAgICAgIHRoaXMudmlld3BvcnRNYXRyaXggPSBtYXQ0LmNyZWF0ZSgpO1xuICAgICAgICB0aGlzLmNpcmNsZXMgPSBbXTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSZXRhaW5lZFF1ZXJ5RGF0YSB7XG4gICAgYnVja2V0SW5zdGFuY2VJZDogbnVtYmVyO1xuICAgIGZlYXR1cmVJbmRleDogRmVhdHVyZUluZGV4O1xuICAgIHNvdXJjZUxheWVySW5kZXg6IG51bWJlcjtcbiAgICBidWNrZXRJbmRleDogbnVtYmVyO1xuICAgIHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRDtcbiAgICBmZWF0dXJlU29ydE9yZGVyOiA/QXJyYXk8bnVtYmVyPlxuICAgIGNvbnN0cnVjdG9yKGJ1Y2tldEluc3RhbmNlSWQ6IG51bWJlcixcbiAgICAgICAgICAgICAgICBmZWF0dXJlSW5kZXg6IEZlYXR1cmVJbmRleCxcbiAgICAgICAgICAgICAgICBzb3VyY2VMYXllckluZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgYnVja2V0SW5kZXg6IG51bWJlcixcbiAgICAgICAgICAgICAgICB0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQpIHtcbiAgICAgICAgdGhpcy5idWNrZXRJbnN0YW5jZUlkID0gYnVja2V0SW5zdGFuY2VJZDtcbiAgICAgICAgdGhpcy5mZWF0dXJlSW5kZXggPSBmZWF0dXJlSW5kZXg7XG4gICAgICAgIHRoaXMuc291cmNlTGF5ZXJJbmRleCA9IHNvdXJjZUxheWVySW5kZXg7XG4gICAgICAgIHRoaXMuYnVja2V0SW5kZXggPSBidWNrZXRJbmRleDtcbiAgICAgICAgdGhpcy50aWxlSUQgPSB0aWxlSUQ7XG4gICAgfVxufVxuXG50eXBlIENvbGxpc2lvbkdyb3VwID0geyBJRDogbnVtYmVyLCBwcmVkaWNhdGU/OiBhbnkgfTtcblxuY2xhc3MgQ29sbGlzaW9uR3JvdXBzIHtcbiAgICBjb2xsaXNpb25Hcm91cHM6IHtbZ3JvdXBOYW1lOiBzdHJpbmddOiBDb2xsaXNpb25Hcm91cH07XG4gICAgbWF4R3JvdXBJRDogbnVtYmVyO1xuICAgIGNyb3NzU291cmNlQ29sbGlzaW9uczogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKGNyb3NzU291cmNlQ29sbGlzaW9uczogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmNyb3NzU291cmNlQ29sbGlzaW9ucyA9IGNyb3NzU291cmNlQ29sbGlzaW9ucztcbiAgICAgICAgdGhpcy5tYXhHcm91cElEID0gMDtcbiAgICAgICAgdGhpcy5jb2xsaXNpb25Hcm91cHMgPSB7fTtcbiAgICB9XG5cbiAgICBnZXQoc291cmNlSUQ6IHN0cmluZykge1xuICAgICAgICAvLyBUaGUgcHJlZGljYXRlL2dyb3VwSUQgbWVjaGFuaXNtIGFsbG93cyBmb3IgYXJiaXRyYXJ5IGdyb3VwaW5nLFxuICAgICAgICAvLyBidXQgdGhlIGN1cnJlbnQgaW50ZXJmYWNlIGRlZmluZXMgb25lIHNvdXJjZSA9PSBvbmUgZ3JvdXAgd2hlblxuICAgICAgICAvLyBjcm9zc1NvdXJjZUNvbGxpc2lvbnMgPT0gdHJ1ZS5cbiAgICAgICAgaWYgKCF0aGlzLmNyb3NzU291cmNlQ29sbGlzaW9ucykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNvbGxpc2lvbkdyb3Vwc1tzb3VyY2VJRF0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0R3JvdXBJRCA9ICsrdGhpcy5tYXhHcm91cElEO1xuICAgICAgICAgICAgICAgIHRoaXMuY29sbGlzaW9uR3JvdXBzW3NvdXJjZUlEXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgSUQ6IG5leHRHcm91cElELFxuICAgICAgICAgICAgICAgICAgICBwcmVkaWNhdGU6IChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBrZXkuY29sbGlzaW9uR3JvdXBJRCA9PT0gbmV4dEdyb3VwSUQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sbGlzaW9uR3JvdXBzW3NvdXJjZUlEXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7SUQ6IDAsIHByZWRpY2F0ZTogbnVsbH07XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZVZhcmlhYmxlTGF5b3V0U2hpZnQoYW5jaG9yOiBUZXh0QW5jaG9yLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgdGV4dE9mZnNldDogW251bWJlciwgbnVtYmVyXSwgdGV4dEJveFNjYWxlOiBudW1iZXIpOiBQb2ludCB7XG4gICAgY29uc3Qge2hvcml6b250YWxBbGlnbiwgdmVydGljYWxBbGlnbn0gPSBnZXRBbmNob3JBbGlnbm1lbnQoYW5jaG9yKTtcbiAgICBjb25zdCBzaGlmdFggPSAtKGhvcml6b250YWxBbGlnbiAtIDAuNSkgKiB3aWR0aDtcbiAgICBjb25zdCBzaGlmdFkgPSAtKHZlcnRpY2FsQWxpZ24gLSAwLjUpICogaGVpZ2h0O1xuICAgIGNvbnN0IG9mZnNldCA9IGV2YWx1YXRlVmFyaWFibGVPZmZzZXQoYW5jaG9yLCB0ZXh0T2Zmc2V0KTtcbiAgICByZXR1cm4gbmV3IFBvaW50KFxuICAgICAgICBzaGlmdFggKyBvZmZzZXRbMF0gKiB0ZXh0Qm94U2NhbGUsXG4gICAgICAgIHNoaWZ0WSArIG9mZnNldFsxXSAqIHRleHRCb3hTY2FsZVxuICAgICk7XG59XG5cbmZ1bmN0aW9uIHNoaWZ0VmFyaWFibGVDb2xsaXNpb25Cb3goY29sbGlzaW9uQm94OiBTaW5nbGVDb2xsaXNpb25Cb3gsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnRYOiBudW1iZXIsIHNoaWZ0WTogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZVdpdGhNYXA6IGJvb2xlYW4sIHBpdGNoV2l0aE1hcDogYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZTogbnVtYmVyKSB7XG4gICAgY29uc3Qge3gxLCB4MiwgeTEsIHkyLCBhbmNob3JQb2ludFgsIGFuY2hvclBvaW50WX0gPSBjb2xsaXNpb25Cb3g7XG4gICAgY29uc3Qgcm90YXRlZE9mZnNldCA9IG5ldyBQb2ludChzaGlmdFgsIHNoaWZ0WSk7XG4gICAgaWYgKHJvdGF0ZVdpdGhNYXApIHtcbiAgICAgICAgcm90YXRlZE9mZnNldC5fcm90YXRlKHBpdGNoV2l0aE1hcCA/IGFuZ2xlIDogLWFuZ2xlKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeDE6IHgxICsgcm90YXRlZE9mZnNldC54LFxuICAgICAgICB5MTogeTEgKyByb3RhdGVkT2Zmc2V0LnksXG4gICAgICAgIHgyOiB4MiArIHJvdGF0ZWRPZmZzZXQueCxcbiAgICAgICAgeTI6IHkyICsgcm90YXRlZE9mZnNldC55LFxuICAgICAgICAvLyBzeW1ib2wgYW5jaG9yIHBvaW50IHN0YXlzIHRoZSBzYW1lIHJlZ2FyZGxlc3Mgb2YgdGV4dC1hbmNob3JcbiAgICAgICAgYW5jaG9yUG9pbnRYLFxuICAgICAgICBhbmNob3JQb2ludFlcbiAgICB9O1xufVxuXG5leHBvcnQgdHlwZSBWYXJpYWJsZU9mZnNldCA9IHtcbiAgICB0ZXh0T2Zmc2V0OiBbbnVtYmVyLCBudW1iZXJdLFxuICAgIHdpZHRoOiBudW1iZXIsXG4gICAgaGVpZ2h0OiBudW1iZXIsXG4gICAgYW5jaG9yOiBUZXh0QW5jaG9yLFxuICAgIHRleHRCb3hTY2FsZTogbnVtYmVyLFxuICAgIHByZXZBbmNob3I/OiBUZXh0QW5jaG9yXG59O1xuXG50eXBlIFRpbGVMYXllclBhcmFtZXRlcnMgPSB7XG4gICAgYnVja2V0OiBTeW1ib2xCdWNrZXQsXG4gICAgbGF5b3V0OiBhbnksXG4gICAgcG9zTWF0cml4OiBtYXQ0LFxuICAgIHRleHRMYWJlbFBsYW5lTWF0cml4OiBtYXQ0LFxuICAgIGxhYmVsVG9TY3JlZW5NYXRyaXg6IG1hdDQsXG4gICAgc2NhbGU6IG51bWJlcixcbiAgICB0ZXh0UGl4ZWxSYXRpbzogbnVtYmVyLFxuICAgIGhvbGRpbmdGb3JGYWRlOiBib29sZWFuLFxuICAgIGNvbGxpc2lvbkJveEFycmF5OiA/Q29sbGlzaW9uQm94QXJyYXksXG4gICAgcGFydGlhbGx5RXZhbHVhdGVkVGV4dFNpemU6IGFueSxcbiAgICBjb2xsaXNpb25Hcm91cDogYW55XG59O1xuXG5leHBvcnQgdHlwZSBCdWNrZXRQYXJ0ID0ge1xuICAgIHNvcnRLZXk/OiBudW1iZXIgfCB2b2lkLFxuICAgIHN5bWJvbEluc3RhbmNlU3RhcnQ6IG51bWJlcixcbiAgICBzeW1ib2xJbnN0YW5jZUVuZDogbnVtYmVyLFxuICAgIHBhcmFtZXRlcnM6IFRpbGVMYXllclBhcmFtZXRlcnNcbn07XG5cbmV4cG9ydCB0eXBlIENyb3NzVGlsZUlEID0gc3RyaW5nIHwgbnVtYmVyO1xuXG5leHBvcnQgY2xhc3MgUGxhY2VtZW50IHtcbiAgICB0cmFuc2Zvcm06IFRyYW5zZm9ybTtcbiAgICBjb2xsaXNpb25JbmRleDogQ29sbGlzaW9uSW5kZXg7XG4gICAgcGxhY2VtZW50czogeyBbXzogQ3Jvc3NUaWxlSURdOiBKb2ludFBsYWNlbWVudCB9O1xuICAgIG9wYWNpdGllczogeyBbXzogQ3Jvc3NUaWxlSURdOiBKb2ludE9wYWNpdHlTdGF0ZSB9O1xuICAgIHZhcmlhYmxlT2Zmc2V0czoge1tfOiBDcm9zc1RpbGVJRF06IFZhcmlhYmxlT2Zmc2V0IH07XG4gICAgcGxhY2VkT3JpZW50YXRpb25zOiB7W186IENyb3NzVGlsZUlEXTogbnVtYmVyIH07XG4gICAgY29tbWl0VGltZTogbnVtYmVyO1xuICAgIHByZXZab29tQWRqdXN0bWVudDogbnVtYmVyO1xuICAgIGxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lOiBudW1iZXI7XG4gICAgc3RhbGU6IGJvb2xlYW47XG4gICAgZmFkZUR1cmF0aW9uOiBudW1iZXI7XG4gICAgcmV0YWluZWRRdWVyeURhdGE6IHtbXzogbnVtYmVyXTogUmV0YWluZWRRdWVyeURhdGF9O1xuICAgIGNvbGxpc2lvbkdyb3VwczogQ29sbGlzaW9uR3JvdXBzO1xuICAgIHByZXZQbGFjZW1lbnQ6ID9QbGFjZW1lbnQ7XG4gICAgem9vbUF0TGFzdFJlY2VuY3lDaGVjazogbnVtYmVyO1xuICAgIGNvbGxpc2lvbkNpcmNsZUFycmF5czoge1thbnldOiBDb2xsaXNpb25DaXJjbGVBcnJheX07XG5cbiAgICBjb25zdHJ1Y3Rvcih0cmFuc2Zvcm06IFRyYW5zZm9ybSwgZmFkZUR1cmF0aW9uOiBudW1iZXIsIGNyb3NzU291cmNlQ29sbGlzaW9uczogYm9vbGVhbiwgcHJldlBsYWNlbWVudD86IFBsYWNlbWVudCkge1xuICAgICAgICB0aGlzLnRyYW5zZm9ybSA9IHRyYW5zZm9ybS5jbG9uZSgpO1xuICAgICAgICB0aGlzLmNvbGxpc2lvbkluZGV4ID0gbmV3IENvbGxpc2lvbkluZGV4KHRoaXMudHJhbnNmb3JtKTtcbiAgICAgICAgdGhpcy5wbGFjZW1lbnRzID0ge307XG4gICAgICAgIHRoaXMub3BhY2l0aWVzID0ge307XG4gICAgICAgIHRoaXMudmFyaWFibGVPZmZzZXRzID0ge307XG4gICAgICAgIHRoaXMuc3RhbGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jb21taXRUaW1lID0gMDtcbiAgICAgICAgdGhpcy5mYWRlRHVyYXRpb24gPSBmYWRlRHVyYXRpb247XG4gICAgICAgIHRoaXMucmV0YWluZWRRdWVyeURhdGEgPSB7fTtcbiAgICAgICAgdGhpcy5jb2xsaXNpb25Hcm91cHMgPSBuZXcgQ29sbGlzaW9uR3JvdXBzKGNyb3NzU291cmNlQ29sbGlzaW9ucyk7XG4gICAgICAgIHRoaXMuY29sbGlzaW9uQ2lyY2xlQXJyYXlzID0ge307XG5cbiAgICAgICAgdGhpcy5wcmV2UGxhY2VtZW50ID0gcHJldlBsYWNlbWVudDtcbiAgICAgICAgaWYgKHByZXZQbGFjZW1lbnQpIHtcbiAgICAgICAgICAgIHByZXZQbGFjZW1lbnQucHJldlBsYWNlbWVudCA9IHVuZGVmaW5lZDsgLy8gT25seSBob2xkIG9uIHRvIG9uZSBwbGFjZW1lbnQgYmFja1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wbGFjZWRPcmllbnRhdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICBnZXRCdWNrZXRQYXJ0cyhyZXN1bHRzOiBBcnJheTxCdWNrZXRQYXJ0Piwgc3R5bGVMYXllcjogU3R5bGVMYXllciwgdGlsZTogVGlsZSwgc29ydEFjcm9zc1RpbGVzOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IHN5bWJvbEJ1Y2tldCA9ICgodGlsZS5nZXRCdWNrZXQoc3R5bGVMYXllcik6IGFueSk6IFN5bWJvbEJ1Y2tldCk7XG4gICAgICAgIGNvbnN0IGJ1Y2tldEZlYXR1cmVJbmRleCA9IHRpbGUubGF0ZXN0RmVhdHVyZUluZGV4O1xuICAgICAgICBpZiAoIXN5bWJvbEJ1Y2tldCB8fCAhYnVja2V0RmVhdHVyZUluZGV4IHx8IHN0eWxlTGF5ZXIuaWQgIT09IHN5bWJvbEJ1Y2tldC5sYXllcklkc1swXSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjb25zdCBjb2xsaXNpb25Cb3hBcnJheSA9IHRpbGUuY29sbGlzaW9uQm94QXJyYXk7XG5cbiAgICAgICAgY29uc3QgbGF5b3V0ID0gc3ltYm9sQnVja2V0LmxheWVyc1swXS5sYXlvdXQ7XG5cbiAgICAgICAgY29uc3Qgc2NhbGUgPSBNYXRoLnBvdygyLCB0aGlzLnRyYW5zZm9ybS56b29tIC0gdGlsZS50aWxlSUQub3ZlcnNjYWxlZFopO1xuICAgICAgICBjb25zdCB0ZXh0UGl4ZWxSYXRpbyA9IHRpbGUudGlsZVNpemUgLyBFWFRFTlQ7XG5cbiAgICAgICAgY29uc3QgcG9zTWF0cml4ID0gdGhpcy50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KHRpbGUudGlsZUlELnRvVW53cmFwcGVkKCkpO1xuXG4gICAgICAgIGNvbnN0IHBpdGNoV2l0aE1hcCA9IGxheW91dC5nZXQoJ3RleHQtcGl0Y2gtYWxpZ25tZW50JykgPT09ICdtYXAnO1xuICAgICAgICBjb25zdCByb3RhdGVXaXRoTWFwID0gbGF5b3V0LmdldCgndGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQnKSA9PT0gJ21hcCc7XG4gICAgICAgIGNvbnN0IHBpeGVsc1RvVGlsZXMgPSBwaXhlbHNUb1RpbGVVbml0cyh0aWxlLCAxLCB0aGlzLnRyYW5zZm9ybS56b29tKTtcblxuICAgICAgICBjb25zdCB0ZXh0TGFiZWxQbGFuZU1hdHJpeCA9IHByb2plY3Rpb24uZ2V0TGFiZWxQbGFuZU1hdHJpeChwb3NNYXRyaXgsXG4gICAgICAgICAgICAgICAgcGl0Y2hXaXRoTWFwLFxuICAgICAgICAgICAgICAgIHJvdGF0ZVdpdGhNYXAsXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0sXG4gICAgICAgICAgICAgICAgcGl4ZWxzVG9UaWxlcyk7XG5cbiAgICAgICAgbGV0IGxhYmVsVG9TY3JlZW5NYXRyaXggPSBudWxsO1xuXG4gICAgICAgIGlmIChwaXRjaFdpdGhNYXApIHtcbiAgICAgICAgICAgIGNvbnN0IGdsTWF0cml4ID0gcHJvamVjdGlvbi5nZXRHbENvb3JkTWF0cml4KFxuICAgICAgICAgICAgICAgIHBvc01hdHJpeCxcbiAgICAgICAgICAgICAgICBwaXRjaFdpdGhNYXAsXG4gICAgICAgICAgICAgICAgcm90YXRlV2l0aE1hcCxcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICBwaXhlbHNUb1RpbGVzKTtcblxuICAgICAgICAgICAgbGFiZWxUb1NjcmVlbk1hdHJpeCA9IG1hdDQubXVsdGlwbHkoW10sIHRoaXMudHJhbnNmb3JtLmxhYmVsUGxhbmVNYXRyaXgsIGdsTWF0cml4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFzIGxvbmcgYXMgdGhpcyBwbGFjZW1lbnQgbGl2ZXMsIHdlIGhhdmUgdG8gaG9sZCBvbnRvIHRoaXMgYnVja2V0J3NcbiAgICAgICAgLy8gbWF0Y2hpbmcgRmVhdHVyZUluZGV4L2RhdGEgZm9yIHF1ZXJ5aW5nIHB1cnBvc2VzXG4gICAgICAgIHRoaXMucmV0YWluZWRRdWVyeURhdGFbc3ltYm9sQnVja2V0LmJ1Y2tldEluc3RhbmNlSWRdID0gbmV3IFJldGFpbmVkUXVlcnlEYXRhKFxuICAgICAgICAgICAgc3ltYm9sQnVja2V0LmJ1Y2tldEluc3RhbmNlSWQsXG4gICAgICAgICAgICBidWNrZXRGZWF0dXJlSW5kZXgsXG4gICAgICAgICAgICBzeW1ib2xCdWNrZXQuc291cmNlTGF5ZXJJbmRleCxcbiAgICAgICAgICAgIHN5bWJvbEJ1Y2tldC5pbmRleCxcbiAgICAgICAgICAgIHRpbGUudGlsZUlEXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgcGFyYW1ldGVycyA9IHtcbiAgICAgICAgICAgIGJ1Y2tldDogc3ltYm9sQnVja2V0LFxuICAgICAgICAgICAgbGF5b3V0LFxuICAgICAgICAgICAgcG9zTWF0cml4LFxuICAgICAgICAgICAgdGV4dExhYmVsUGxhbmVNYXRyaXgsXG4gICAgICAgICAgICBsYWJlbFRvU2NyZWVuTWF0cml4LFxuICAgICAgICAgICAgc2NhbGUsXG4gICAgICAgICAgICB0ZXh0UGl4ZWxSYXRpbyxcbiAgICAgICAgICAgIGhvbGRpbmdGb3JGYWRlOiB0aWxlLmhvbGRpbmdGb3JGYWRlKCksXG4gICAgICAgICAgICBjb2xsaXNpb25Cb3hBcnJheSxcbiAgICAgICAgICAgIHBhcnRpYWxseUV2YWx1YXRlZFRleHRTaXplOiBzeW1ib2xTaXplLmV2YWx1YXRlU2l6ZUZvclpvb20oc3ltYm9sQnVja2V0LnRleHRTaXplRGF0YSwgdGhpcy50cmFuc2Zvcm0uem9vbSksXG4gICAgICAgICAgICBjb2xsaXNpb25Hcm91cDogdGhpcy5jb2xsaXNpb25Hcm91cHMuZ2V0KHN5bWJvbEJ1Y2tldC5zb3VyY2VJRClcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoc29ydEFjcm9zc1RpbGVzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJhbmdlIG9mIHN5bWJvbEJ1Y2tldC5zb3J0S2V5UmFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qge3NvcnRLZXksIHN5bWJvbEluc3RhbmNlU3RhcnQsIHN5bWJvbEluc3RhbmNlRW5kfSA9IHJhbmdlO1xuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCh7c29ydEtleSwgc3ltYm9sSW5zdGFuY2VTdGFydCwgc3ltYm9sSW5zdGFuY2VFbmQsIHBhcmFtZXRlcnN9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaCh7XG4gICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2VTdGFydDogMCxcbiAgICAgICAgICAgICAgICBzeW1ib2xJbnN0YW5jZUVuZDogc3ltYm9sQnVja2V0LnN5bWJvbEluc3RhbmNlcy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhdHRlbXB0QW5jaG9yUGxhY2VtZW50KGFuY2hvcjogVGV4dEFuY2hvciwgdGV4dEJveDogU2luZ2xlQ29sbGlzaW9uQm94LCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRCb3hTY2FsZTogbnVtYmVyLCByb3RhdGVXaXRoTWFwOiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl0Y2hXaXRoTWFwOiBib29sZWFuLCB0ZXh0UGl4ZWxSYXRpbzogbnVtYmVyLCBwb3NNYXRyaXg6IG1hdDQsIGNvbGxpc2lvbkdyb3VwOiBDb2xsaXNpb25Hcm91cCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGxvd092ZXJsYXA6IGJvb2xlYW4sIHN5bWJvbEluc3RhbmNlOiBTeW1ib2xJbnN0YW5jZSwgYnVja2V0OiBTeW1ib2xCdWNrZXQsIG9yaWVudGF0aW9uOiBudW1iZXIsIGljb25Cb3g6ID9TaW5nbGVDb2xsaXNpb25Cb3gpOiA/eyBzaGlmdDogUG9pbnQsIHBsYWNlZEdseXBoQm94ZXM6IHsgYm94OiBBcnJheTxudW1iZXI+LCBvZmZzY3JlZW46IGJvb2xlYW4gfSB9ICB7XG5cbiAgICAgICAgY29uc3QgdGV4dE9mZnNldCA9IFtzeW1ib2xJbnN0YW5jZS50ZXh0T2Zmc2V0MCwgc3ltYm9sSW5zdGFuY2UudGV4dE9mZnNldDFdO1xuICAgICAgICBjb25zdCBzaGlmdCA9IGNhbGN1bGF0ZVZhcmlhYmxlTGF5b3V0U2hpZnQoYW5jaG9yLCB3aWR0aCwgaGVpZ2h0LCB0ZXh0T2Zmc2V0LCB0ZXh0Qm94U2NhbGUpO1xuXG4gICAgICAgIGNvbnN0IHBsYWNlZEdseXBoQm94ZXMgPSB0aGlzLmNvbGxpc2lvbkluZGV4LnBsYWNlQ29sbGlzaW9uQm94KFxuICAgICAgICAgICAgc2hpZnRWYXJpYWJsZUNvbGxpc2lvbkJveChcbiAgICAgICAgICAgICAgICB0ZXh0Qm94LCBzaGlmdC54LCBzaGlmdC55LFxuICAgICAgICAgICAgICAgIHJvdGF0ZVdpdGhNYXAsIHBpdGNoV2l0aE1hcCwgdGhpcy50cmFuc2Zvcm0uYW5nbGUpLFxuICAgICAgICAgICAgdGV4dEFsbG93T3ZlcmxhcCwgdGV4dFBpeGVsUmF0aW8sIHBvc01hdHJpeCwgY29sbGlzaW9uR3JvdXAucHJlZGljYXRlKTtcblxuICAgICAgICBpZiAoaWNvbkJveCkge1xuICAgICAgICAgICAgY29uc3QgcGxhY2VkSWNvbkJveGVzID0gdGhpcy5jb2xsaXNpb25JbmRleC5wbGFjZUNvbGxpc2lvbkJveChcbiAgICAgICAgICAgICAgICBzaGlmdFZhcmlhYmxlQ29sbGlzaW9uQm94KFxuICAgICAgICAgICAgICAgICAgICBpY29uQm94LCBzaGlmdC54LCBzaGlmdC55LFxuICAgICAgICAgICAgICAgICAgICByb3RhdGVXaXRoTWFwLCBwaXRjaFdpdGhNYXAsIHRoaXMudHJhbnNmb3JtLmFuZ2xlKSxcbiAgICAgICAgICAgICAgICB0ZXh0QWxsb3dPdmVybGFwLCB0ZXh0UGl4ZWxSYXRpbywgcG9zTWF0cml4LCBjb2xsaXNpb25Hcm91cC5wcmVkaWNhdGUpO1xuICAgICAgICAgICAgaWYgKHBsYWNlZEljb25Cb3hlcy5ib3gubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGxhY2VkR2x5cGhCb3hlcy5ib3gubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbGV0IHByZXZBbmNob3I7XG4gICAgICAgICAgICAvLyBJZiB0aGlzIGxhYmVsIHdhcyBwbGFjZWQgaW4gdGhlIHByZXZpb3VzIHBsYWNlbWVudCwgcmVjb3JkIHRoZSBhbmNob3IgcG9zaXRpb25cbiAgICAgICAgICAgIC8vIHRvIGFsbG93IHVzIHRvIGFuaW1hdGUgdGhlIHRyYW5zaXRpb25cbiAgICAgICAgICAgIGlmICh0aGlzLnByZXZQbGFjZW1lbnQgJiZcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZQbGFjZW1lbnQudmFyaWFibGVPZmZzZXRzW3N5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEXSAmJlxuICAgICAgICAgICAgICAgIHRoaXMucHJldlBsYWNlbWVudC5wbGFjZW1lbnRzW3N5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEXSAmJlxuICAgICAgICAgICAgICAgIHRoaXMucHJldlBsYWNlbWVudC5wbGFjZW1lbnRzW3N5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEXS50ZXh0KSB7XG4gICAgICAgICAgICAgICAgcHJldkFuY2hvciA9IHRoaXMucHJldlBsYWNlbWVudC52YXJpYWJsZU9mZnNldHNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdLmFuY2hvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzc2VydChzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRCAhPT0gMCk7XG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlT2Zmc2V0c1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF0gPSB7XG4gICAgICAgICAgICAgICAgdGV4dE9mZnNldCxcbiAgICAgICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICAgICAgYW5jaG9yLFxuICAgICAgICAgICAgICAgIHRleHRCb3hTY2FsZSxcbiAgICAgICAgICAgICAgICBwcmV2QW5jaG9yXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5tYXJrVXNlZEp1c3RpZmljYXRpb24oYnVja2V0LCBhbmNob3IsIHN5bWJvbEluc3RhbmNlLCBvcmllbnRhdGlvbik7XG5cbiAgICAgICAgICAgIGlmIChidWNrZXQuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMubWFya1VzZWRPcmllbnRhdGlvbihidWNrZXQsIG9yaWVudGF0aW9uLCBzeW1ib2xJbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5wbGFjZWRPcmllbnRhdGlvbnNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdID0gb3JpZW50YXRpb247XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB7c2hpZnQsIHBsYWNlZEdseXBoQm94ZXN9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcGxhY2VMYXllckJ1Y2tldFBhcnQoYnVja2V0UGFydDogT2JqZWN0LCBzZWVuQ3Jvc3NUaWxlSURzOiB7IFtzdHJpbmcgfCBudW1iZXJdOiBib29sZWFuIH0sIHNob3dDb2xsaXNpb25Cb3hlczogYm9vbGVhbikge1xuXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGJ1Y2tldCxcbiAgICAgICAgICAgIGxheW91dCxcbiAgICAgICAgICAgIHBvc01hdHJpeCxcbiAgICAgICAgICAgIHRleHRMYWJlbFBsYW5lTWF0cml4LFxuICAgICAgICAgICAgbGFiZWxUb1NjcmVlbk1hdHJpeCxcbiAgICAgICAgICAgIHRleHRQaXhlbFJhdGlvLFxuICAgICAgICAgICAgaG9sZGluZ0ZvckZhZGUsXG4gICAgICAgICAgICBjb2xsaXNpb25Cb3hBcnJheSxcbiAgICAgICAgICAgIHBhcnRpYWxseUV2YWx1YXRlZFRleHRTaXplLFxuICAgICAgICAgICAgY29sbGlzaW9uR3JvdXBcbiAgICAgICAgfSA9IGJ1Y2tldFBhcnQucGFyYW1ldGVycztcblxuICAgICAgICBjb25zdCB0ZXh0T3B0aW9uYWwgPSBsYXlvdXQuZ2V0KCd0ZXh0LW9wdGlvbmFsJyk7XG4gICAgICAgIGNvbnN0IGljb25PcHRpb25hbCA9IGxheW91dC5nZXQoJ2ljb24tb3B0aW9uYWwnKTtcbiAgICAgICAgY29uc3QgdGV4dEFsbG93T3ZlcmxhcCA9IGxheW91dC5nZXQoJ3RleHQtYWxsb3ctb3ZlcmxhcCcpO1xuICAgICAgICBjb25zdCBpY29uQWxsb3dPdmVybGFwID0gbGF5b3V0LmdldCgnaWNvbi1hbGxvdy1vdmVybGFwJyk7XG4gICAgICAgIGNvbnN0IHJvdGF0ZVdpdGhNYXAgPSBsYXlvdXQuZ2V0KCd0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCcpID09PSAnbWFwJztcbiAgICAgICAgY29uc3QgcGl0Y2hXaXRoTWFwID0gbGF5b3V0LmdldCgndGV4dC1waXRjaC1hbGlnbm1lbnQnKSA9PT0gJ21hcCc7XG4gICAgICAgIGNvbnN0IGhhc0ljb25UZXh0Rml0ID0gbGF5b3V0LmdldCgnaWNvbi10ZXh0LWZpdCcpICE9PSAnbm9uZSc7XG4gICAgICAgIGNvbnN0IHpPcmRlckJ5Vmlld3BvcnRZID0gbGF5b3V0LmdldCgnc3ltYm9sLXotb3JkZXInKSA9PT0gJ3ZpZXdwb3J0LXknO1xuXG4gICAgICAgIC8vIFRoaXMgbG9naWMgaXMgc2ltaWxhciB0byB0aGUgXCJkZWZhdWx0T3BhY2l0eVN0YXRlXCIgbG9naWMgYmVsb3cgaW4gdXBkYXRlQnVja2V0T3BhY2l0aWVzXG4gICAgICAgIC8vIElmIHdlIGtub3cgYSBzeW1ib2wgaXMgYWx3YXlzIHN1cHBvc2VkIHRvIHNob3csIGZvcmNlIGl0IHRvIGJlIG1hcmtlZCB2aXNpYmxlIGV2ZW4gaWZcbiAgICAgICAgLy8gaXQgd2Fzbid0IHBsYWNlZCBpbnRvIHRoZSBjb2xsaXNpb24gaW5kZXggKGJlY2F1c2Ugc29tZSBvciBhbGwgb2YgaXQgd2FzIG91dHNpZGUgdGhlIHJhbmdlXG4gICAgICAgIC8vIG9mIHRoZSBjb2xsaXNpb24gZ3JpZCkuXG4gICAgICAgIC8vIFRoZXJlIGlzIGEgc3VidGxlIGVkZ2UgY2FzZSBoZXJlIHdlJ3JlIGFjY2VwdGluZzpcbiAgICAgICAgLy8gIFN5bWJvbCBBIGhhcyB0ZXh0LWFsbG93LW92ZXJsYXA6IHRydWUsIGljb24tYWxsb3ctb3ZlcmxhcDogdHJ1ZSwgaWNvbi1vcHRpb25hbDogZmFsc2VcbiAgICAgICAgLy8gIEEncyBpY29uIGlzIG91dHNpZGUgdGhlIGdyaWQsIHNvIGRvZXNuJ3QgZ2V0IHBsYWNlZFxuICAgICAgICAvLyAgQSdzIHRleHQgd291bGQgYmUgaW5zaWRlIGdyaWQsIGJ1dCBkb2Vzbid0IGdldCBwbGFjZWQgYmVjYXVzZSBvZiBpY29uLW9wdGlvbmFsOiBmYWxzZVxuICAgICAgICAvLyAgV2Ugc3RpbGwgc2hvdyBBIGJlY2F1c2Ugb2YgdGhlIGFsbG93LW92ZXJsYXAgc2V0dGluZ3MuXG4gICAgICAgIC8vICBTeW1ib2wgQiBoYXMgYWxsb3ctb3ZlcmxhcDogZmFsc2UsIGFuZCBnZXRzIHBsYWNlZCB3aGVyZSBBJ3MgdGV4dCB3b3VsZCBiZVxuICAgICAgICAvLyAgT24gcGFubmluZyBpbiwgdGhlcmUgaXMgYSBzaG9ydCBwZXJpb2Qgd2hlbiBTeW1ib2wgQiBhbmQgU3ltYm9sIEEgd2lsbCBvdmVybGFwXG4gICAgICAgIC8vICBUaGlzIGlzIHRoZSByZXZlcnNlIG9mIG91ciBub3JtYWwgcG9saWN5IG9mIFwiZmFkZSBpbiBvbiBwYW5cIiwgYnV0IHNob3VsZCBsb29rIGxpa2UgYW55IG90aGVyXG4gICAgICAgIC8vICBjb2xsaXNpb24gYW5kIGhvcGVmdWxseSBub3QgYmUgdG9vIG5vdGljZWFibGUuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvNzE3MlxuICAgICAgICBjb25zdCBhbHdheXNTaG93VGV4dCA9IHRleHRBbGxvd092ZXJsYXAgJiYgKGljb25BbGxvd092ZXJsYXAgfHwgIWJ1Y2tldC5oYXNJY29uRGF0YSgpIHx8IGljb25PcHRpb25hbCk7XG4gICAgICAgIGNvbnN0IGFsd2F5c1Nob3dJY29uID0gaWNvbkFsbG93T3ZlcmxhcCAmJiAodGV4dEFsbG93T3ZlcmxhcCB8fCAhYnVja2V0Lmhhc1RleHREYXRhKCkgfHwgdGV4dE9wdGlvbmFsKTtcblxuICAgICAgICBpZiAoIWJ1Y2tldC5jb2xsaXNpb25BcnJheXMgJiYgY29sbGlzaW9uQm94QXJyYXkpIHtcbiAgICAgICAgICAgIGJ1Y2tldC5kZXNlcmlhbGl6ZUNvbGxpc2lvbkJveGVzKGNvbGxpc2lvbkJveEFycmF5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBsYWNlU3ltYm9sID0gKHN5bWJvbEluc3RhbmNlOiBTeW1ib2xJbnN0YW5jZSwgY29sbGlzaW9uQXJyYXlzOiBDb2xsaXNpb25BcnJheXMpID0+IHtcbiAgICAgICAgICAgIGlmIChzZWVuQ3Jvc3NUaWxlSURzW3N5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEXSkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKGhvbGRpbmdGb3JGYWRlKSB7XG4gICAgICAgICAgICAgICAgLy8gTWFyayBhbGwgc3ltYm9scyBmcm9tIHRoaXMgdGlsZSBhcyBcIm5vdCBwbGFjZWRcIiwgYnV0IGRvbid0IGFkZCB0byBzZWVuQ3Jvc3NUaWxlSURzLCBiZWNhdXNlIHdlIGRvbid0XG4gICAgICAgICAgICAgICAgLy8ga25vdyB5ZXQgaWYgd2UgaGF2ZSBhIGR1cGxpY2F0ZSBpbiBhIHBhcmVudCB0aWxlIHRoYXQgX3Nob3VsZF8gYmUgcGxhY2VkLlxuICAgICAgICAgICAgICAgIHRoaXMucGxhY2VtZW50c1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF0gPSBuZXcgSm9pbnRQbGFjZW1lbnQoZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgcGxhY2VUZXh0ID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgcGxhY2VJY29uID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgb2Zmc2NyZWVuID0gdHJ1ZTtcbiAgICAgICAgICAgIGxldCBzaGlmdCA9IG51bGw7XG5cbiAgICAgICAgICAgIGxldCBwbGFjZWQgPSB7Ym94OiBudWxsLCBvZmZzY3JlZW46IG51bGx9O1xuICAgICAgICAgICAgbGV0IHBsYWNlZFZlcnRpY2FsVGV4dCA9IHtib3g6IG51bGwsIG9mZnNjcmVlbjogbnVsbH07XG5cbiAgICAgICAgICAgIGxldCBwbGFjZWRHbHlwaEJveGVzID0gbnVsbDtcbiAgICAgICAgICAgIGxldCBwbGFjZWRHbHlwaENpcmNsZXMgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHBsYWNlZEljb25Cb3hlcyA9IG51bGw7XG4gICAgICAgICAgICBsZXQgdGV4dEZlYXR1cmVJbmRleCA9IDA7XG4gICAgICAgICAgICBsZXQgdmVydGljYWxUZXh0RmVhdHVyZUluZGV4ID0gMDtcbiAgICAgICAgICAgIGxldCBpY29uRmVhdHVyZUluZGV4ID0gMDtcblxuICAgICAgICAgICAgaWYgKGNvbGxpc2lvbkFycmF5cy50ZXh0RmVhdHVyZUluZGV4KSB7XG4gICAgICAgICAgICAgICAgdGV4dEZlYXR1cmVJbmRleCA9IGNvbGxpc2lvbkFycmF5cy50ZXh0RmVhdHVyZUluZGV4O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzeW1ib2xJbnN0YW5jZS51c2VSdW50aW1lQ29sbGlzaW9uQ2lyY2xlcykge1xuICAgICAgICAgICAgICAgIHRleHRGZWF0dXJlSW5kZXggPSBzeW1ib2xJbnN0YW5jZS5mZWF0dXJlSW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29sbGlzaW9uQXJyYXlzLnZlcnRpY2FsVGV4dEZlYXR1cmVJbmRleCkge1xuICAgICAgICAgICAgICAgIHZlcnRpY2FsVGV4dEZlYXR1cmVJbmRleCA9IGNvbGxpc2lvbkFycmF5cy52ZXJ0aWNhbFRleHRGZWF0dXJlSW5kZXg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHRleHRCb3ggPSBjb2xsaXNpb25BcnJheXMudGV4dEJveDtcbiAgICAgICAgICAgIGlmICh0ZXh0Qm94KSB7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVQcmV2aW91c09yaWVudGF0aW9uSWZOb3RQbGFjZWQgPSAoaXNQbGFjZWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByZXZpb3VzT3JpZW50YXRpb24gPSBXcml0aW5nTW9kZS5ob3Jpem9udGFsO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYnVja2V0LmFsbG93VmVydGljYWxQbGFjZW1lbnQgJiYgIWlzUGxhY2VkICYmIHRoaXMucHJldlBsYWNlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldlBsYWNlZE9yaWVudGF0aW9uID0gdGhpcy5wcmV2UGxhY2VtZW50LnBsYWNlZE9yaWVudGF0aW9uc1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldlBsYWNlZE9yaWVudGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wbGFjZWRPcmllbnRhdGlvbnNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdID0gcHJldlBsYWNlZE9yaWVudGF0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzT3JpZW50YXRpb24gPSBwcmV2UGxhY2VkT3JpZW50YXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXJrVXNlZE9yaWVudGF0aW9uKGJ1Y2tldCwgcHJldmlvdXNPcmllbnRhdGlvbiwgc3ltYm9sSW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c09yaWVudGF0aW9uO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwbGFjZVRleHRGb3JQbGFjZW1lbnRNb2RlcyA9IChwbGFjZUhvcml6b250YWxGbiwgcGxhY2VWZXJ0aWNhbEZuKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChidWNrZXQuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCAmJiBzeW1ib2xJbnN0YW5jZS5udW1WZXJ0aWNhbEdseXBoVmVydGljZXMgPiAwICYmIGNvbGxpc2lvbkFycmF5cy52ZXJ0aWNhbFRleHRCb3gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcGxhY2VtZW50TW9kZSBvZiBidWNrZXQud3JpdGluZ01vZGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBsYWNlbWVudE1vZGUgPT09IFdyaXRpbmdNb2RlLnZlcnRpY2FsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlZCA9IHBsYWNlVmVydGljYWxGbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWRWZXJ0aWNhbFRleHQgPSBwbGFjZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VkID0gcGxhY2VIb3Jpem9udGFsRm4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBsYWNlZCAmJiBwbGFjZWQuYm94ICYmIHBsYWNlZC5ib3gubGVuZ3RoKSBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlZCA9IHBsYWNlSG9yaXpvbnRhbEZuKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKCFsYXlvdXQuZ2V0KCd0ZXh0LXZhcmlhYmxlLWFuY2hvcicpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlQm94ID0gKGNvbGxpc2lvblRleHRCb3gsIG9yaWVudGF0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwbGFjZWRGZWF0dXJlID0gdGhpcy5jb2xsaXNpb25JbmRleC5wbGFjZUNvbGxpc2lvbkJveChjb2xsaXNpb25UZXh0Qm94LCB0ZXh0QWxsb3dPdmVybGFwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRQaXhlbFJhdGlvLCBwb3NNYXRyaXgsIGNvbGxpc2lvbkdyb3VwLnByZWRpY2F0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGxhY2VkRmVhdHVyZSAmJiBwbGFjZWRGZWF0dXJlLmJveCAmJiBwbGFjZWRGZWF0dXJlLmJveC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcmtVc2VkT3JpZW50YXRpb24oYnVja2V0LCBvcmllbnRhdGlvbiwgc3ltYm9sSW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGxhY2VkT3JpZW50YXRpb25zW3N5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEXSA9IG9yaWVudGF0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBsYWNlZEZlYXR1cmU7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGxhY2VIb3Jpem9udGFsID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBsYWNlQm94KHRleHRCb3gsIFdyaXRpbmdNb2RlLmhvcml6b250YWwpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlVmVydGljYWwgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZXJ0aWNhbFRleHRCb3ggPSBjb2xsaXNpb25BcnJheXMudmVydGljYWxUZXh0Qm94O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1Y2tldC5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50ICYmIHN5bWJvbEluc3RhbmNlLm51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcyA+IDAgJiYgdmVydGljYWxUZXh0Qm94KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBsYWNlQm94KHZlcnRpY2FsVGV4dEJveCwgV3JpdGluZ01vZGUudmVydGljYWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtib3g6IG51bGwsIG9mZnNjcmVlbjogbnVsbH07XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcGxhY2VUZXh0Rm9yUGxhY2VtZW50TW9kZXMocGxhY2VIb3Jpem9udGFsLCBwbGFjZVZlcnRpY2FsKTtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlUHJldmlvdXNPcmllbnRhdGlvbklmTm90UGxhY2VkKHBsYWNlZCAmJiBwbGFjZWQuYm94ICYmIHBsYWNlZC5ib3gubGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBhbmNob3JzID0gbGF5b3V0LmdldCgndGV4dC12YXJpYWJsZS1hbmNob3InKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIHN5bWJvbCB3YXMgaW4gdGhlIGxhc3QgcGxhY2VtZW50LCBzaGlmdCB0aGUgcHJldmlvdXNseSB1c2VkXG4gICAgICAgICAgICAgICAgICAgIC8vIGFuY2hvciB0byB0aGUgZnJvbnQgb2YgdGhlIGFuY2hvciBsaXN0LCBvbmx5IGlmIHRoZSBwcmV2aW91cyBhbmNob3JcbiAgICAgICAgICAgICAgICAgICAgLy8gaXMgc3RpbGwgaW4gdGhlIGFuY2hvciBsaXN0XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnByZXZQbGFjZW1lbnQgJiYgdGhpcy5wcmV2UGxhY2VtZW50LnZhcmlhYmxlT2Zmc2V0c1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZPZmZzZXRzID0gdGhpcy5wcmV2UGxhY2VtZW50LnZhcmlhYmxlT2Zmc2V0c1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYW5jaG9ycy5pbmRleE9mKHByZXZPZmZzZXRzLmFuY2hvcikgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9ycyA9IGFuY2hvcnMuZmlsdGVyKGFuY2hvciA9PiBhbmNob3IgIT09IHByZXZPZmZzZXRzLmFuY2hvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9ycy51bnNoaWZ0KHByZXZPZmZzZXRzLmFuY2hvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwbGFjZUJveEZvclZhcmlhYmxlQW5jaG9ycyA9IChjb2xsaXNpb25UZXh0Qm94LCBjb2xsaXNpb25JY29uQm94LCBvcmllbnRhdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBjb2xsaXNpb25UZXh0Qm94LngyIC0gY29sbGlzaW9uVGV4dEJveC54MTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IGNvbGxpc2lvblRleHRCb3gueTIgLSBjb2xsaXNpb25UZXh0Qm94LnkxO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dEJveFNjYWxlID0gc3ltYm9sSW5zdGFuY2UudGV4dEJveFNjYWxlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YXJpYWJsZUljb25Cb3ggPSBoYXNJY29uVGV4dEZpdCAmJiAhaWNvbkFsbG93T3ZlcmxhcCA/IGNvbGxpc2lvbkljb25Cb3ggOiBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGxhY2VkQm94OiA/eyBib3g6IEFycmF5PG51bWJlcj4sIG9mZnNjcmVlbjogYm9vbGVhbiB9ICA9IHtib3g6IFtdLCBvZmZzY3JlZW46IGZhbHNlfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlbWVudEF0dGVtcHRzID0gdGV4dEFsbG93T3ZlcmxhcCA/IGFuY2hvcnMubGVuZ3RoICogMiA6IGFuY2hvcnMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbGFjZW1lbnRBdHRlbXB0czsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYW5jaG9yID0gYW5jaG9yc1tpICUgYW5jaG9ycy5sZW5ndGhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFsbG93T3ZlcmxhcCA9IChpID49IGFuY2hvcnMubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmF0dGVtcHRBbmNob3JQbGFjZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvciwgY29sbGlzaW9uVGV4dEJveCwgd2lkdGgsIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEJveFNjYWxlLCByb3RhdGVXaXRoTWFwLCBwaXRjaFdpdGhNYXAsIHRleHRQaXhlbFJhdGlvLCBwb3NNYXRyaXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxpc2lvbkdyb3VwLCBhbGxvd092ZXJsYXAsIHN5bWJvbEluc3RhbmNlLCBidWNrZXQsIG9yaWVudGF0aW9uLCB2YXJpYWJsZUljb25Cb3gpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWRCb3ggPSByZXN1bHQucGxhY2VkR2x5cGhCb3hlcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBsYWNlZEJveCAmJiBwbGFjZWRCb3guYm94ICYmIHBsYWNlZEJveC5ib3gubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZVRleHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnQgPSByZXN1bHQuc2hpZnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBsYWNlZEJveDtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwbGFjZUhvcml6b250YWwgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGxhY2VCb3hGb3JWYXJpYWJsZUFuY2hvcnModGV4dEJveCwgY29sbGlzaW9uQXJyYXlzLmljb25Cb3gsIFdyaXRpbmdNb2RlLmhvcml6b250YWwpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlVmVydGljYWwgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZXJ0aWNhbFRleHRCb3ggPSBjb2xsaXNpb25BcnJheXMudmVydGljYWxUZXh0Qm94O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2FzUGxhY2VkID0gcGxhY2VkICYmIHBsYWNlZC5ib3ggJiYgcGxhY2VkLmJveC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVja2V0LmFsbG93VmVydGljYWxQbGFjZW1lbnQgJiYgIXdhc1BsYWNlZCAmJiBzeW1ib2xJbnN0YW5jZS5udW1WZXJ0aWNhbEdseXBoVmVydGljZXMgPiAwICYmIHZlcnRpY2FsVGV4dEJveCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwbGFjZUJveEZvclZhcmlhYmxlQW5jaG9ycyh2ZXJ0aWNhbFRleHRCb3gsIGNvbGxpc2lvbkFycmF5cy52ZXJ0aWNhbEljb25Cb3gsIFdyaXRpbmdNb2RlLnZlcnRpY2FsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7Ym94OiBudWxsLCBvZmZzY3JlZW46IG51bGx9O1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlVGV4dEZvclBsYWNlbWVudE1vZGVzKHBsYWNlSG9yaXpvbnRhbCwgcGxhY2VWZXJ0aWNhbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHBsYWNlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VUZXh0ID0gcGxhY2VkLmJveDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNjcmVlbiA9IHBsYWNlZC5vZmZzY3JlZW47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2T3JpZW50YXRpb24gPSB1cGRhdGVQcmV2aW91c09yaWVudGF0aW9uSWZOb3RQbGFjZWQocGxhY2VkICYmIHBsYWNlZC5ib3gpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGRpZG4ndCBnZXQgcGxhY2VkLCB3ZSBzdGlsbCBuZWVkIHRvIGNvcHkgb3VyIHBvc2l0aW9uIGZyb20gdGhlIGxhc3QgcGxhY2VtZW50IGZvclxuICAgICAgICAgICAgICAgICAgICAvLyBmYWRlIGFuaW1hdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwbGFjZVRleHQgJiYgdGhpcy5wcmV2UGxhY2VtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2T2Zmc2V0ID0gdGhpcy5wcmV2UGxhY2VtZW50LnZhcmlhYmxlT2Zmc2V0c1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldk9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFyaWFibGVPZmZzZXRzW3N5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEXSA9IHByZXZPZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXJrVXNlZEp1c3RpZmljYXRpb24oYnVja2V0LCBwcmV2T2Zmc2V0LmFuY2hvciwgc3ltYm9sSW5zdGFuY2UsIHByZXZPcmllbnRhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcGxhY2VkR2x5cGhCb3hlcyA9IHBsYWNlZDtcbiAgICAgICAgICAgIHBsYWNlVGV4dCA9IHBsYWNlZEdseXBoQm94ZXMgJiYgcGxhY2VkR2x5cGhCb3hlcy5ib3ggJiYgcGxhY2VkR2x5cGhCb3hlcy5ib3gubGVuZ3RoID4gMDtcblxuICAgICAgICAgICAgb2Zmc2NyZWVuID0gcGxhY2VkR2x5cGhCb3hlcyAmJiBwbGFjZWRHbHlwaEJveGVzLm9mZnNjcmVlbjtcblxuICAgICAgICAgICAgaWYgKHN5bWJvbEluc3RhbmNlLnVzZVJ1bnRpbWVDb2xsaXNpb25DaXJjbGVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGxhY2VkU3ltYm9sID0gYnVja2V0LnRleHQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KHN5bWJvbEluc3RhbmNlLmNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9udFNpemUgPSBzeW1ib2xTaXplLmV2YWx1YXRlU2l6ZUZvckZlYXR1cmUoYnVja2V0LnRleHRTaXplRGF0YSwgcGFydGlhbGx5RXZhbHVhdGVkVGV4dFNpemUsIHBsYWNlZFN5bWJvbCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0UGl4ZWxQYWRkaW5nID0gbGF5b3V0LmdldCgndGV4dC1wYWRkaW5nJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgY2lyY2xlUGl4ZWxEaWFtZXRlciA9IHN5bWJvbEluc3RhbmNlLmNvbGxpc2lvbkNpcmNsZURpYW1ldGVyO1xuXG4gICAgICAgICAgICAgICAgcGxhY2VkR2x5cGhDaXJjbGVzID0gdGhpcy5jb2xsaXNpb25JbmRleC5wbGFjZUNvbGxpc2lvbkNpcmNsZXModGV4dEFsbG93T3ZlcmxhcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlZFN5bWJvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldC5saW5lVmVydGV4QXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICBidWNrZXQuZ2x5cGhPZmZzZXRBcnJheSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zTWF0cml4LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dExhYmVsUGxhbmVNYXRyaXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbFRvU2NyZWVuTWF0cml4LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0NvbGxpc2lvbkJveGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGl0Y2hXaXRoTWFwLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sbGlzaW9uR3JvdXAucHJlZGljYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlUGl4ZWxEaWFtZXRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRQaXhlbFBhZGRpbmcpO1xuXG4gICAgICAgICAgICAgICAgYXNzZXJ0KCFwbGFjZWRHbHlwaENpcmNsZXMuY2lyY2xlcy5sZW5ndGggfHwgKCFwbGFjZWRHbHlwaENpcmNsZXMuY29sbGlzaW9uRGV0ZWN0ZWQgfHwgc2hvd0NvbGxpc2lvbkJveGVzKSk7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGV4dC1hbGxvdy1vdmVybGFwIGlzIHNldCwgZm9yY2UgXCJwbGFjZWRDaXJjbGVzXCIgdG8gdHJ1ZVxuICAgICAgICAgICAgICAgIC8vIEluIHRoZW9yeSB0aGVyZSBzaG91bGQgYWx3YXlzIGJlIGF0IGxlYXN0IG9uZSBjaXJjbGUgcGxhY2VkXG4gICAgICAgICAgICAgICAgLy8gaW4gdGhpcyBjYXNlLCBidXQgZm9yIG5vdyBxdWlya3MgaW4gdGV4dC1hbmNob3JcbiAgICAgICAgICAgICAgICAvLyBhbmQgdGV4dC1vZmZzZXQgbWF5IHByZXZlbnQgdGhhdCBmcm9tIGJlaW5nIHRydWUuXG4gICAgICAgICAgICAgICAgcGxhY2VUZXh0ID0gdGV4dEFsbG93T3ZlcmxhcCB8fCAocGxhY2VkR2x5cGhDaXJjbGVzLmNpcmNsZXMubGVuZ3RoID4gMCAmJiAhcGxhY2VkR2x5cGhDaXJjbGVzLmNvbGxpc2lvbkRldGVjdGVkKTtcbiAgICAgICAgICAgICAgICBvZmZzY3JlZW4gPSBvZmZzY3JlZW4gJiYgcGxhY2VkR2x5cGhDaXJjbGVzLm9mZnNjcmVlbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbGxpc2lvbkFycmF5cy5pY29uRmVhdHVyZUluZGV4KSB7XG4gICAgICAgICAgICAgICAgaWNvbkZlYXR1cmVJbmRleCA9IGNvbGxpc2lvbkFycmF5cy5pY29uRmVhdHVyZUluZGV4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29sbGlzaW9uQXJyYXlzLmljb25Cb3gpIHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlSWNvbkZlYXR1cmUgPSBpY29uQm94ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hpZnRlZEljb25Cb3ggPSBoYXNJY29uVGV4dEZpdCAmJiBzaGlmdCA/XG4gICAgICAgICAgICAgICAgICAgICAgICBzaGlmdFZhcmlhYmxlQ29sbGlzaW9uQm94KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25Cb3gsIHNoaWZ0LngsIHNoaWZ0LnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlV2l0aE1hcCwgcGl0Y2hXaXRoTWFwLCB0aGlzLnRyYW5zZm9ybS5hbmdsZSkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbkJveDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sbGlzaW9uSW5kZXgucGxhY2VDb2xsaXNpb25Cb3goc2hpZnRlZEljb25Cb3gsXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uQWxsb3dPdmVybGFwLCB0ZXh0UGl4ZWxSYXRpbywgcG9zTWF0cml4LCBjb2xsaXNpb25Hcm91cC5wcmVkaWNhdGUpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocGxhY2VkVmVydGljYWxUZXh0ICYmIHBsYWNlZFZlcnRpY2FsVGV4dC5ib3ggJiYgcGxhY2VkVmVydGljYWxUZXh0LmJveC5sZW5ndGggJiYgY29sbGlzaW9uQXJyYXlzLnZlcnRpY2FsSWNvbkJveCkge1xuICAgICAgICAgICAgICAgICAgICBwbGFjZWRJY29uQm94ZXMgPSBwbGFjZUljb25GZWF0dXJlKGNvbGxpc2lvbkFycmF5cy52ZXJ0aWNhbEljb25Cb3gpO1xuICAgICAgICAgICAgICAgICAgICBwbGFjZUljb24gPSBwbGFjZWRJY29uQm94ZXMuYm94Lmxlbmd0aCA+IDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGxhY2VkSWNvbkJveGVzID0gcGxhY2VJY29uRmVhdHVyZShjb2xsaXNpb25BcnJheXMuaWNvbkJveCk7XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlSWNvbiA9IHBsYWNlZEljb25Cb3hlcy5ib3gubGVuZ3RoID4gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb2Zmc2NyZWVuID0gb2Zmc2NyZWVuICYmIHBsYWNlZEljb25Cb3hlcy5vZmZzY3JlZW47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGljb25XaXRob3V0VGV4dCA9IHRleHRPcHRpb25hbCB8fFxuICAgICAgICAgICAgICAgIChzeW1ib2xJbnN0YW5jZS5udW1Ib3Jpem9udGFsR2x5cGhWZXJ0aWNlcyA9PT0gMCAmJiBzeW1ib2xJbnN0YW5jZS5udW1WZXJ0aWNhbEdseXBoVmVydGljZXMgPT09IDApO1xuICAgICAgICAgICAgY29uc3QgdGV4dFdpdGhvdXRJY29uID0gaWNvbk9wdGlvbmFsIHx8IHN5bWJvbEluc3RhbmNlLm51bUljb25WZXJ0aWNlcyA9PT0gMDtcblxuICAgICAgICAgICAgLy8gQ29tYmluZSB0aGUgc2NhbGVzIGZvciBpY29ucyBhbmQgdGV4dC5cbiAgICAgICAgICAgIGlmICghaWNvbldpdGhvdXRUZXh0ICYmICF0ZXh0V2l0aG91dEljb24pIHtcbiAgICAgICAgICAgICAgICBwbGFjZUljb24gPSBwbGFjZVRleHQgPSBwbGFjZUljb24gJiYgcGxhY2VUZXh0O1xuICAgICAgICAgICAgfSBlbHNlIGlmICghdGV4dFdpdGhvdXRJY29uKSB7XG4gICAgICAgICAgICAgICAgcGxhY2VUZXh0ID0gcGxhY2VJY29uICYmIHBsYWNlVGV4dDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWljb25XaXRob3V0VGV4dCkge1xuICAgICAgICAgICAgICAgIHBsYWNlSWNvbiA9IHBsYWNlSWNvbiAmJiBwbGFjZVRleHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwbGFjZVRleHQgJiYgcGxhY2VkR2x5cGhCb3hlcyAmJiBwbGFjZWRHbHlwaEJveGVzLmJveCkge1xuICAgICAgICAgICAgICAgIGlmIChwbGFjZWRWZXJ0aWNhbFRleHQgJiYgcGxhY2VkVmVydGljYWxUZXh0LmJveCAmJiB2ZXJ0aWNhbFRleHRGZWF0dXJlSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2xsaXNpb25JbmRleC5pbnNlcnRDb2xsaXNpb25Cb3gocGxhY2VkR2x5cGhCb3hlcy5ib3gsIGxheW91dC5nZXQoJ3RleHQtaWdub3JlLXBsYWNlbWVudCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYnVja2V0LmJ1Y2tldEluc3RhbmNlSWQsIHZlcnRpY2FsVGV4dEZlYXR1cmVJbmRleCwgY29sbGlzaW9uR3JvdXAuSUQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29sbGlzaW9uSW5kZXguaW5zZXJ0Q29sbGlzaW9uQm94KHBsYWNlZEdseXBoQm94ZXMuYm94LCBsYXlvdXQuZ2V0KCd0ZXh0LWlnbm9yZS1wbGFjZW1lbnQnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldC5idWNrZXRJbnN0YW5jZUlkLCB0ZXh0RmVhdHVyZUluZGV4LCBjb2xsaXNpb25Hcm91cC5JRCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGxhY2VJY29uICYmIHBsYWNlZEljb25Cb3hlcykge1xuICAgICAgICAgICAgICAgIHRoaXMuY29sbGlzaW9uSW5kZXguaW5zZXJ0Q29sbGlzaW9uQm94KHBsYWNlZEljb25Cb3hlcy5ib3gsIGxheW91dC5nZXQoJ2ljb24taWdub3JlLXBsYWNlbWVudCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYnVja2V0LmJ1Y2tldEluc3RhbmNlSWQsIGljb25GZWF0dXJlSW5kZXgsIGNvbGxpc2lvbkdyb3VwLklEKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwbGFjZWRHbHlwaENpcmNsZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAocGxhY2VUZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29sbGlzaW9uSW5kZXguaW5zZXJ0Q29sbGlzaW9uQ2lyY2xlcyhwbGFjZWRHbHlwaENpcmNsZXMuY2lyY2xlcywgbGF5b3V0LmdldCgndGV4dC1pZ25vcmUtcGxhY2VtZW50JyksXG4gICAgICAgICAgICAgICAgICAgICAgICBidWNrZXQuYnVja2V0SW5zdGFuY2VJZCwgdGV4dEZlYXR1cmVJbmRleCwgY29sbGlzaW9uR3JvdXAuSUQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzaG93Q29sbGlzaW9uQm94ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWQgPSBidWNrZXQuYnVja2V0SW5zdGFuY2VJZDtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNpcmNsZUFycmF5ID0gdGhpcy5jb2xsaXNpb25DaXJjbGVBcnJheXNbaWRdO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIEdyb3VwIGNvbGxpc2lvbiBjaXJjbGVzIHRvZ2V0aGVyIGJ5IGJ1Y2tldC4gQ2lyY2xlcyBjYW4ndCBiZSBwdXNoZWQgZm9yd2FyZCBmb3IgcmVuZGVyaW5nIHlldCBhcyB0aGUgc3ltYm9sIHBsYWNlbWVudFxuICAgICAgICAgICAgICAgICAgICAvLyBmb3IgYSBidWNrZXQgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgY29tcGxldGUgYmVmb3JlIHRoZSBjb21taXQtZnVuY3Rpb24gaGFzIGJlZW4gY2FsbGVkXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaXJjbGVBcnJheSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlQXJyYXkgPSB0aGlzLmNvbGxpc2lvbkNpcmNsZUFycmF5c1tpZF0gPSBuZXcgQ29sbGlzaW9uQ2lyY2xlQXJyYXkoKTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBsYWNlZEdseXBoQ2lyY2xlcy5jaXJjbGVzLmxlbmd0aDsgaSArPSA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaXJjbGVBcnJheS5jaXJjbGVzLnB1c2gocGxhY2VkR2x5cGhDaXJjbGVzLmNpcmNsZXNbaSArIDBdKTsgICAgICAgICAgICAgIC8vIHhcbiAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZUFycmF5LmNpcmNsZXMucHVzaChwbGFjZWRHbHlwaENpcmNsZXMuY2lyY2xlc1tpICsgMV0pOyAgICAgICAgICAgICAgLy8geVxuICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlQXJyYXkuY2lyY2xlcy5wdXNoKHBsYWNlZEdseXBoQ2lyY2xlcy5jaXJjbGVzW2kgKyAyXSk7ICAgICAgICAgICAgICAvLyByYWRpdXNcbiAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZUFycmF5LmNpcmNsZXMucHVzaChwbGFjZWRHbHlwaENpcmNsZXMuY29sbGlzaW9uRGV0ZWN0ZWQgPyAxIDogMCk7ICAgLy8gY29sbGlzaW9uRGV0ZWN0ZWQtZmxhZ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3NlcnQoc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSUQgIT09IDApO1xuICAgICAgICAgICAgYXNzZXJ0KGJ1Y2tldC5idWNrZXRJbnN0YW5jZUlkICE9PSAwKTtcblxuICAgICAgICAgICAgdGhpcy5wbGFjZW1lbnRzW3N5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEXSA9IG5ldyBKb2ludFBsYWNlbWVudChwbGFjZVRleHQgfHwgYWx3YXlzU2hvd1RleHQsIHBsYWNlSWNvbiB8fCBhbHdheXNTaG93SWNvbiwgb2Zmc2NyZWVuIHx8IGJ1Y2tldC5qdXN0UmVsb2FkZWQpO1xuICAgICAgICAgICAgc2VlbkNyb3NzVGlsZUlEc1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF0gPSB0cnVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh6T3JkZXJCeVZpZXdwb3J0WSkge1xuICAgICAgICAgICAgYXNzZXJ0KGJ1Y2tldFBhcnQuc3ltYm9sSW5zdGFuY2VTdGFydCA9PT0gMCk7XG4gICAgICAgICAgICBjb25zdCBzeW1ib2xJbmRleGVzID0gYnVja2V0LmdldFNvcnRlZFN5bWJvbEluZGV4ZXModGhpcy50cmFuc2Zvcm0uYW5nbGUpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHN5bWJvbEluZGV4ZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzeW1ib2xJbmRleCA9IHN5bWJvbEluZGV4ZXNbaV07XG4gICAgICAgICAgICAgICAgcGxhY2VTeW1ib2woYnVja2V0LnN5bWJvbEluc3RhbmNlcy5nZXQoc3ltYm9sSW5kZXgpLCBidWNrZXQuY29sbGlzaW9uQXJyYXlzW3N5bWJvbEluZGV4XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gYnVja2V0UGFydC5zeW1ib2xJbnN0YW5jZVN0YXJ0OyBpIDwgYnVja2V0UGFydC5zeW1ib2xJbnN0YW5jZUVuZDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcGxhY2VTeW1ib2woYnVja2V0LnN5bWJvbEluc3RhbmNlcy5nZXQoaSksIGJ1Y2tldC5jb2xsaXNpb25BcnJheXNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3dDb2xsaXNpb25Cb3hlcyAmJiBidWNrZXQuYnVja2V0SW5zdGFuY2VJZCBpbiB0aGlzLmNvbGxpc2lvbkNpcmNsZUFycmF5cykge1xuICAgICAgICAgICAgY29uc3QgY2lyY2xlQXJyYXkgPSB0aGlzLmNvbGxpc2lvbkNpcmNsZUFycmF5c1tidWNrZXQuYnVja2V0SW5zdGFuY2VJZF07XG5cbiAgICAgICAgICAgIC8vIFN0b3JlIHZpZXdwb3J0IGFuZCBpbnZlcnNlIHByb2plY3Rpb24gbWF0cmljZXMgcGVyIGJ1Y2tldFxuICAgICAgICAgICAgbWF0NC5pbnZlcnQoY2lyY2xlQXJyYXkuaW52UHJvak1hdHJpeCwgcG9zTWF0cml4KTtcbiAgICAgICAgICAgIGNpcmNsZUFycmF5LnZpZXdwb3J0TWF0cml4ID0gdGhpcy5jb2xsaXNpb25JbmRleC5nZXRWaWV3cG9ydE1hdHJpeCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnVja2V0Lmp1c3RSZWxvYWRlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIG1hcmtVc2VkSnVzdGlmaWNhdGlvbihidWNrZXQ6IFN5bWJvbEJ1Y2tldCwgcGxhY2VkQW5jaG9yOiBUZXh0QW5jaG9yLCBzeW1ib2xJbnN0YW5jZTogU3ltYm9sSW5zdGFuY2UsIG9yaWVudGF0aW9uOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QganVzdGlmaWNhdGlvbnMgPSB7XG4gICAgICAgICAgICBcImxlZnRcIjogc3ltYm9sSW5zdGFuY2UubGVmdEp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxcbiAgICAgICAgICAgIFwiY2VudGVyXCI6IHN5bWJvbEluc3RhbmNlLmNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxcbiAgICAgICAgICAgIFwicmlnaHRcIjogc3ltYm9sSW5zdGFuY2UucmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXhcbiAgICAgICAgfTtcblxuICAgICAgICBsZXQgYXV0b0luZGV4O1xuICAgICAgICBpZiAob3JpZW50YXRpb24gPT09IFdyaXRpbmdNb2RlLnZlcnRpY2FsKSB7XG4gICAgICAgICAgICBhdXRvSW5kZXggPSBzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGF1dG9JbmRleCA9IGp1c3RpZmljYXRpb25zW2dldEFuY2hvckp1c3RpZmljYXRpb24ocGxhY2VkQW5jaG9yKV07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbmRleGVzID0gW1xuICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UubGVmdEp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxcbiAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLmNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxcbiAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLnJpZ2h0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LFxuICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UudmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXhcbiAgICAgICAgXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGluZGV4IG9mIGluZGV4ZXMpIHtcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKGF1dG9JbmRleCA+PSAwICYmIGluZGV4ICE9PSBhdXRvSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlcmUgYXJlIG11bHRpcGxlIGp1c3RpZmljYXRpb25zIGFuZCB0aGlzIG9uZSBpc24ndCBpdDogc2hpZnQgb2Zmc2NyZWVuXG4gICAgICAgICAgICAgICAgICAgIGJ1Y2tldC50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldChpbmRleCkuY3Jvc3NUaWxlSUQgPSAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEVpdGhlciB0aGlzIGlzIHRoZSBjaG9zZW4ganVzdGlmaWNhdGlvbiBvciB0aGUganVzdGlmaWNhdGlvbiBpcyBoYXJkd2lyZWQ6IHVzZSB0aGlzIG9uZVxuICAgICAgICAgICAgICAgICAgICBidWNrZXQudGV4dC5wbGFjZWRTeW1ib2xBcnJheS5nZXQoaW5kZXgpLmNyb3NzVGlsZUlEID0gc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbWFya1VzZWRPcmllbnRhdGlvbihidWNrZXQ6IFN5bWJvbEJ1Y2tldCwgb3JpZW50YXRpb246IG51bWJlciwgc3ltYm9sSW5zdGFuY2U6IFN5bWJvbEluc3RhbmNlKSB7XG4gICAgICAgIGNvbnN0IGhvcml6b250YWwgPSAob3JpZW50YXRpb24gPT09IFdyaXRpbmdNb2RlLmhvcml6b250YWwgfHwgb3JpZW50YXRpb24gPT09IFdyaXRpbmdNb2RlLmhvcml6b250YWxPbmx5KSA/IG9yaWVudGF0aW9uIDogMDtcbiAgICAgICAgY29uc3QgdmVydGljYWwgPSBvcmllbnRhdGlvbiA9PT0gV3JpdGluZ01vZGUudmVydGljYWwgPyBvcmllbnRhdGlvbiA6IDA7XG5cbiAgICAgICAgY29uc3QgaG9yaXpvbnRhbEluZGV4ZXMgPSBbXG4gICAgICAgICAgICBzeW1ib2xJbnN0YW5jZS5sZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LFxuICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UuY2VudGVySnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LFxuICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UucmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXhcbiAgICAgICAgXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGluZGV4IG9mIGhvcml6b250YWxJbmRleGVzKSB7XG4gICAgICAgICAgICBidWNrZXQudGV4dC5wbGFjZWRTeW1ib2xBcnJheS5nZXQoaW5kZXgpLnBsYWNlZE9yaWVudGF0aW9uID0gaG9yaXpvbnRhbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleCkge1xuICAgICAgICAgICAgYnVja2V0LnRleHQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4KS5wbGFjZWRPcmllbnRhdGlvbiA9IHZlcnRpY2FsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29tbWl0KG5vdzogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29tbWl0VGltZSA9IG5vdztcbiAgICAgICAgdGhpcy56b29tQXRMYXN0UmVjZW5jeUNoZWNrID0gdGhpcy50cmFuc2Zvcm0uem9vbTtcblxuICAgICAgICBjb25zdCBwcmV2UGxhY2VtZW50ID0gdGhpcy5wcmV2UGxhY2VtZW50O1xuICAgICAgICBsZXQgcGxhY2VtZW50Q2hhbmdlZCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMucHJldlpvb21BZGp1c3RtZW50ID0gcHJldlBsYWNlbWVudCA/IHByZXZQbGFjZW1lbnQuem9vbUFkanVzdG1lbnQodGhpcy50cmFuc2Zvcm0uem9vbSkgOiAwO1xuICAgICAgICBjb25zdCBpbmNyZW1lbnQgPSBwcmV2UGxhY2VtZW50ID8gcHJldlBsYWNlbWVudC5zeW1ib2xGYWRlQ2hhbmdlKG5vdykgOiAxO1xuXG4gICAgICAgIGNvbnN0IHByZXZPcGFjaXRpZXMgPSBwcmV2UGxhY2VtZW50ID8gcHJldlBsYWNlbWVudC5vcGFjaXRpZXMgOiB7fTtcbiAgICAgICAgY29uc3QgcHJldk9mZnNldHMgPSBwcmV2UGxhY2VtZW50ID8gcHJldlBsYWNlbWVudC52YXJpYWJsZU9mZnNldHMgOiB7fTtcbiAgICAgICAgY29uc3QgcHJldk9yaWVudGF0aW9ucyA9IHByZXZQbGFjZW1lbnQgPyBwcmV2UGxhY2VtZW50LnBsYWNlZE9yaWVudGF0aW9ucyA6IHt9O1xuXG4gICAgICAgIC8vIGFkZCB0aGUgb3BhY2l0aWVzIGZyb20gdGhlIGN1cnJlbnQgcGxhY2VtZW50LCBhbmQgY29weSB0aGVpciBjdXJyZW50IHZhbHVlcyBmcm9tIHRoZSBwcmV2aW91cyBwbGFjZW1lbnRcbiAgICAgICAgZm9yIChjb25zdCBjcm9zc1RpbGVJRCBpbiB0aGlzLnBsYWNlbWVudHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGpvaW50UGxhY2VtZW50ID0gdGhpcy5wbGFjZW1lbnRzW2Nyb3NzVGlsZUlEXTtcbiAgICAgICAgICAgIGNvbnN0IHByZXZPcGFjaXR5ID0gcHJldk9wYWNpdGllc1tjcm9zc1RpbGVJRF07XG4gICAgICAgICAgICBpZiAocHJldk9wYWNpdHkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wYWNpdGllc1tjcm9zc1RpbGVJRF0gPSBuZXcgSm9pbnRPcGFjaXR5U3RhdGUocHJldk9wYWNpdHksIGluY3JlbWVudCwgam9pbnRQbGFjZW1lbnQudGV4dCwgam9pbnRQbGFjZW1lbnQuaWNvbik7XG4gICAgICAgICAgICAgICAgcGxhY2VtZW50Q2hhbmdlZCA9IHBsYWNlbWVudENoYW5nZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgam9pbnRQbGFjZW1lbnQudGV4dCAhPT0gcHJldk9wYWNpdHkudGV4dC5wbGFjZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgam9pbnRQbGFjZW1lbnQuaWNvbiAhPT0gcHJldk9wYWNpdHkuaWNvbi5wbGFjZWQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMub3BhY2l0aWVzW2Nyb3NzVGlsZUlEXSA9IG5ldyBKb2ludE9wYWNpdHlTdGF0ZShudWxsLCBpbmNyZW1lbnQsIGpvaW50UGxhY2VtZW50LnRleHQsIGpvaW50UGxhY2VtZW50Lmljb24sIGpvaW50UGxhY2VtZW50LnNraXBGYWRlKTtcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnRDaGFuZ2VkID0gcGxhY2VtZW50Q2hhbmdlZCB8fCBqb2ludFBsYWNlbWVudC50ZXh0IHx8IGpvaW50UGxhY2VtZW50Lmljb247XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjb3B5IGFuZCB1cGRhdGUgdmFsdWVzIGZyb20gdGhlIHByZXZpb3VzIHBsYWNlbWVudCB0aGF0IGFyZW4ndCBpbiB0aGUgY3VycmVudCBwbGFjZW1lbnQgYnV0IGhhdmVuJ3QgZmluaXNoZWQgZmFkaW5nXG4gICAgICAgIGZvciAoY29uc3QgY3Jvc3NUaWxlSUQgaW4gcHJldk9wYWNpdGllcykge1xuICAgICAgICAgICAgY29uc3QgcHJldk9wYWNpdHkgPSBwcmV2T3BhY2l0aWVzW2Nyb3NzVGlsZUlEXTtcbiAgICAgICAgICAgIGlmICghdGhpcy5vcGFjaXRpZXNbY3Jvc3NUaWxlSURdKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgam9pbnRPcGFjaXR5ID0gbmV3IEpvaW50T3BhY2l0eVN0YXRlKHByZXZPcGFjaXR5LCBpbmNyZW1lbnQsIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFqb2ludE9wYWNpdHkuaXNIaWRkZW4oKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wYWNpdGllc1tjcm9zc1RpbGVJRF0gPSBqb2ludE9wYWNpdHk7XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudENoYW5nZWQgPSBwbGFjZW1lbnRDaGFuZ2VkIHx8IHByZXZPcGFjaXR5LnRleHQucGxhY2VkIHx8IHByZXZPcGFjaXR5Lmljb24ucGxhY2VkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGNyb3NzVGlsZUlEIGluIHByZXZPZmZzZXRzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMudmFyaWFibGVPZmZzZXRzW2Nyb3NzVGlsZUlEXSAmJiB0aGlzLm9wYWNpdGllc1tjcm9zc1RpbGVJRF0gJiYgIXRoaXMub3BhY2l0aWVzW2Nyb3NzVGlsZUlEXS5pc0hpZGRlbigpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YXJpYWJsZU9mZnNldHNbY3Jvc3NUaWxlSURdID0gcHJldk9mZnNldHNbY3Jvc3NUaWxlSURdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBjcm9zc1RpbGVJRCBpbiBwcmV2T3JpZW50YXRpb25zKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucGxhY2VkT3JpZW50YXRpb25zW2Nyb3NzVGlsZUlEXSAmJiB0aGlzLm9wYWNpdGllc1tjcm9zc1RpbGVJRF0gJiYgIXRoaXMub3BhY2l0aWVzW2Nyb3NzVGlsZUlEXS5pc0hpZGRlbigpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wbGFjZWRPcmllbnRhdGlvbnNbY3Jvc3NUaWxlSURdID0gcHJldk9yaWVudGF0aW9uc1tjcm9zc1RpbGVJRF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0aGlzLmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lIGlzIHRoZSB0aW1lIG9mIHRoZSBsYXN0IGNvbW1pdCgpIHRoYXRcbiAgICAgICAgLy8gcmVzdWx0ZWQgaW4gYSBwbGFjZW1lbnQgY2hhbmdlIC0tIGluIG90aGVyIHdvcmRzLCB0aGUgc3RhcnQgdGltZSBvZlxuICAgICAgICAvLyB0aGUgbGFzdCBzeW1ib2wgZmFkZSBhbmltYXRpb25cbiAgICAgICAgYXNzZXJ0KCFwcmV2UGxhY2VtZW50IHx8IHByZXZQbGFjZW1lbnQubGFzdFBsYWNlbWVudENoYW5nZVRpbWUgIT09IHVuZGVmaW5lZCk7XG4gICAgICAgIGlmIChwbGFjZW1lbnRDaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lID0gbm93O1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgdGhpcy5sYXN0UGxhY2VtZW50Q2hhbmdlVGltZSA9IHByZXZQbGFjZW1lbnQgPyBwcmV2UGxhY2VtZW50Lmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lIDogbm93O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlTGF5ZXJPcGFjaXRpZXMoc3R5bGVMYXllcjogU3R5bGVMYXllciwgdGlsZXM6IEFycmF5PFRpbGU+KSB7XG4gICAgICAgIGNvbnN0IHNlZW5Dcm9zc1RpbGVJRHMgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCB0aWxlIG9mIHRpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCBzeW1ib2xCdWNrZXQgPSAoKHRpbGUuZ2V0QnVja2V0KHN0eWxlTGF5ZXIpOiBhbnkpOiBTeW1ib2xCdWNrZXQpO1xuICAgICAgICAgICAgaWYgKHN5bWJvbEJ1Y2tldCAmJiB0aWxlLmxhdGVzdEZlYXR1cmVJbmRleCAmJiBzdHlsZUxheWVyLmlkID09PSBzeW1ib2xCdWNrZXQubGF5ZXJJZHNbMF0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUJ1Y2tldE9wYWNpdGllcyhzeW1ib2xCdWNrZXQsIHNlZW5Dcm9zc1RpbGVJRHMsIHRpbGUuY29sbGlzaW9uQm94QXJyYXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlQnVja2V0T3BhY2l0aWVzKGJ1Y2tldDogU3ltYm9sQnVja2V0LCBzZWVuQ3Jvc3NUaWxlSURzOiB7IFtzdHJpbmcgfCBudW1iZXJdOiBib29sZWFuIH0sIGNvbGxpc2lvbkJveEFycmF5OiA/Q29sbGlzaW9uQm94QXJyYXkpIHtcbiAgICAgICAgaWYgKGJ1Y2tldC5oYXNUZXh0RGF0YSgpKSBidWNrZXQudGV4dC5vcGFjaXR5VmVydGV4QXJyYXkuY2xlYXIoKTtcbiAgICAgICAgaWYgKGJ1Y2tldC5oYXNJY29uRGF0YSgpKSBidWNrZXQuaWNvbi5vcGFjaXR5VmVydGV4QXJyYXkuY2xlYXIoKTtcbiAgICAgICAgaWYgKGJ1Y2tldC5oYXNJY29uQ29sbGlzaW9uQm94RGF0YSgpKSBidWNrZXQuaWNvbkNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheS5jbGVhcigpO1xuICAgICAgICBpZiAoYnVja2V0Lmhhc1RleHRDb2xsaXNpb25Cb3hEYXRhKCkpIGJ1Y2tldC50ZXh0Q29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5LmNsZWFyKCk7XG5cbiAgICAgICAgY29uc3QgbGF5b3V0ID0gYnVja2V0LmxheWVyc1swXS5sYXlvdXQ7XG4gICAgICAgIGNvbnN0IGR1cGxpY2F0ZU9wYWNpdHlTdGF0ZSA9IG5ldyBKb2ludE9wYWNpdHlTdGF0ZShudWxsLCAwLCBmYWxzZSwgZmFsc2UsIHRydWUpO1xuICAgICAgICBjb25zdCB0ZXh0QWxsb3dPdmVybGFwID0gbGF5b3V0LmdldCgndGV4dC1hbGxvdy1vdmVybGFwJyk7XG4gICAgICAgIGNvbnN0IGljb25BbGxvd092ZXJsYXAgPSBsYXlvdXQuZ2V0KCdpY29uLWFsbG93LW92ZXJsYXAnKTtcbiAgICAgICAgY29uc3QgdmFyaWFibGVQbGFjZW1lbnQgPSBsYXlvdXQuZ2V0KCd0ZXh0LXZhcmlhYmxlLWFuY2hvcicpO1xuICAgICAgICBjb25zdCByb3RhdGVXaXRoTWFwID0gbGF5b3V0LmdldCgndGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQnKSA9PT0gJ21hcCc7XG4gICAgICAgIGNvbnN0IHBpdGNoV2l0aE1hcCA9IGxheW91dC5nZXQoJ3RleHQtcGl0Y2gtYWxpZ25tZW50JykgPT09ICdtYXAnO1xuICAgICAgICBjb25zdCBoYXNJY29uVGV4dEZpdCA9IGxheW91dC5nZXQoJ2ljb24tdGV4dC1maXQnKSAhPT0gJ25vbmUnO1xuICAgICAgICAvLyBJZiBhbGxvdy1vdmVybGFwIGlzIHRydWUsIHdlIGNhbiBzaG93IHN5bWJvbHMgYmVmb3JlIHBsYWNlbWVudCBydW5zIG9uIHRoZW1cbiAgICAgICAgLy8gQnV0IHdlIGhhdmUgdG8gd2FpdCBmb3IgcGxhY2VtZW50IGlmIHdlIHBvdGVudGlhbGx5IGRlcGVuZCBvbiBhIHBhaXJlZCBpY29uL3RleHRcbiAgICAgICAgLy8gd2l0aCBhbGxvdy1vdmVybGFwOiBmYWxzZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy83MDMyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRPcGFjaXR5U3RhdGUgPSBuZXcgSm9pbnRPcGFjaXR5U3RhdGUobnVsbCwgMCxcbiAgICAgICAgICAgICAgICB0ZXh0QWxsb3dPdmVybGFwICYmIChpY29uQWxsb3dPdmVybGFwIHx8ICFidWNrZXQuaGFzSWNvbkRhdGEoKSB8fCBsYXlvdXQuZ2V0KCdpY29uLW9wdGlvbmFsJykpLFxuICAgICAgICAgICAgICAgIGljb25BbGxvd092ZXJsYXAgJiYgKHRleHRBbGxvd092ZXJsYXAgfHwgIWJ1Y2tldC5oYXNUZXh0RGF0YSgpIHx8IGxheW91dC5nZXQoJ3RleHQtb3B0aW9uYWwnKSksXG4gICAgICAgICAgICAgICAgdHJ1ZSk7XG5cbiAgICAgICAgaWYgKCFidWNrZXQuY29sbGlzaW9uQXJyYXlzICYmIGNvbGxpc2lvbkJveEFycmF5ICYmICgoYnVja2V0Lmhhc0ljb25Db2xsaXNpb25Cb3hEYXRhKCkgfHwgYnVja2V0Lmhhc1RleHRDb2xsaXNpb25Cb3hEYXRhKCkpKSkge1xuICAgICAgICAgICAgYnVja2V0LmRlc2VyaWFsaXplQ29sbGlzaW9uQm94ZXMoY29sbGlzaW9uQm94QXJyYXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWRkT3BhY2l0aWVzID0gKGljb25PclRleHQsIG51bVZlcnRpY2VzOiBudW1iZXIsIG9wYWNpdHk6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1WZXJ0aWNlcyAvIDQ7IGkrKykge1xuICAgICAgICAgICAgICAgIGljb25PclRleHQub3BhY2l0eVZlcnRleEFycmF5LmVtcGxhY2VCYWNrKG9wYWNpdHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgYnVja2V0LnN5bWJvbEluc3RhbmNlcy5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgY29uc3Qgc3ltYm9sSW5zdGFuY2UgPSBidWNrZXQuc3ltYm9sSW5zdGFuY2VzLmdldChzKTtcbiAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICBudW1Ib3Jpem9udGFsR2x5cGhWZXJ0aWNlcyxcbiAgICAgICAgICAgICAgICBudW1WZXJ0aWNhbEdseXBoVmVydGljZXMsXG4gICAgICAgICAgICAgICAgY3Jvc3NUaWxlSURcbiAgICAgICAgICAgIH0gPSBzeW1ib2xJbnN0YW5jZTtcblxuICAgICAgICAgICAgY29uc3QgaXNEdXBsaWNhdGUgPSBzZWVuQ3Jvc3NUaWxlSURzW2Nyb3NzVGlsZUlEXTtcblxuICAgICAgICAgICAgbGV0IG9wYWNpdHlTdGF0ZSA9IHRoaXMub3BhY2l0aWVzW2Nyb3NzVGlsZUlEXTtcbiAgICAgICAgICAgIGlmIChpc0R1cGxpY2F0ZSkge1xuICAgICAgICAgICAgICAgIG9wYWNpdHlTdGF0ZSA9IGR1cGxpY2F0ZU9wYWNpdHlTdGF0ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIW9wYWNpdHlTdGF0ZSkge1xuICAgICAgICAgICAgICAgIG9wYWNpdHlTdGF0ZSA9IGRlZmF1bHRPcGFjaXR5U3RhdGU7XG4gICAgICAgICAgICAgICAgLy8gc3RvcmUgdGhlIHN0YXRlIHNvIHRoYXQgZnV0dXJlIHBsYWNlbWVudHMgdXNlIGl0IGFzIGEgc3RhcnRpbmcgcG9pbnRcbiAgICAgICAgICAgICAgICB0aGlzLm9wYWNpdGllc1tjcm9zc1RpbGVJRF0gPSBvcGFjaXR5U3RhdGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNlZW5Dcm9zc1RpbGVJRHNbY3Jvc3NUaWxlSURdID0gdHJ1ZTtcblxuICAgICAgICAgICAgY29uc3QgaGFzVGV4dCA9IG51bUhvcml6b250YWxHbHlwaFZlcnRpY2VzID4gMCB8fCBudW1WZXJ0aWNhbEdseXBoVmVydGljZXMgPiAwO1xuICAgICAgICAgICAgY29uc3QgaGFzSWNvbiA9IHN5bWJvbEluc3RhbmNlLm51bUljb25WZXJ0aWNlcyA+IDA7XG5cbiAgICAgICAgICAgIGNvbnN0IHBsYWNlZE9yaWVudGF0aW9uID0gdGhpcy5wbGFjZWRPcmllbnRhdGlvbnNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdO1xuICAgICAgICAgICAgY29uc3QgaG9yaXpvbnRhbEhpZGRlbiA9IHBsYWNlZE9yaWVudGF0aW9uID09PSBXcml0aW5nTW9kZS52ZXJ0aWNhbDtcbiAgICAgICAgICAgIGNvbnN0IHZlcnRpY2FsSGlkZGVuID0gcGxhY2VkT3JpZW50YXRpb24gPT09IFdyaXRpbmdNb2RlLmhvcml6b250YWwgfHwgcGxhY2VkT3JpZW50YXRpb24gPT09IFdyaXRpbmdNb2RlLmhvcml6b250YWxPbmx5O1xuXG4gICAgICAgICAgICBpZiAoaGFzVGV4dCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhY2tlZE9wYWNpdHkgPSBwYWNrT3BhY2l0eShvcGFjaXR5U3RhdGUudGV4dCk7XG4gICAgICAgICAgICAgICAgLy8gVmVydGljYWwgdGV4dCBmYWRlcyBpbi9vdXQgb24gY29sbGlzaW9uIHRoZSBzYW1lIHdheSBhcyBjb3JyZXNwb25kaW5nXG4gICAgICAgICAgICAgICAgLy8gaG9yaXpvbnRhbCB0ZXh0LiBTd2l0Y2ggYmV0d2VlbiB2ZXJ0aWNhbC9ob3Jpem9udGFsIHNob3VsZCBiZSBpbnN0YW50YW5lb3VzXG4gICAgICAgICAgICAgICAgY29uc3QgaG9yaXpvbnRhbE9wYWNpdHkgPSBob3Jpem9udGFsSGlkZGVuID8gUEFDS0VEX0hJRERFTl9PUEFDSVRZIDogcGFja2VkT3BhY2l0eTtcbiAgICAgICAgICAgICAgICBhZGRPcGFjaXRpZXMoYnVja2V0LnRleHQsIG51bUhvcml6b250YWxHbHlwaFZlcnRpY2VzLCBob3Jpem9udGFsT3BhY2l0eSk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmVydGljYWxPcGFjaXR5ID0gdmVydGljYWxIaWRkZW4gPyBQQUNLRURfSElEREVOX09QQUNJVFkgOiBwYWNrZWRPcGFjaXR5O1xuICAgICAgICAgICAgICAgIGFkZE9wYWNpdGllcyhidWNrZXQudGV4dCwgbnVtVmVydGljYWxHbHlwaFZlcnRpY2VzLCB2ZXJ0aWNhbE9wYWNpdHkpO1xuXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBsYWJlbCBpcyBjb21wbGV0ZWx5IGZhZGVkLCBtYXJrIGl0IHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBjYWxjdWxhdGVcbiAgICAgICAgICAgICAgICAvLyBpdHMgcG9zaXRpb24gYXQgcmVuZGVyIHRpbWUuIElmIHRoaXMgbGF5ZXIgaGFzIHZhcmlhYmxlIHBsYWNlbWVudCwgc2hpZnQgdGhlIHZhcmlvdXNcbiAgICAgICAgICAgICAgICAvLyBzeW1ib2wgaW5zdGFuY2VzIGFwcHJvcHJpYXRlbHkgc28gdGhhdCBzeW1ib2xzIGZyb20gYnVja2V0cyB0aGF0IGhhdmUgeWV0IHRvIGJlIHBsYWNlZFxuICAgICAgICAgICAgICAgIC8vIG9mZnNldCBhcHByb3ByaWF0ZWx5LlxuICAgICAgICAgICAgICAgIGNvbnN0IHN5bWJvbEhpZGRlbiA9IG9wYWNpdHlTdGF0ZS50ZXh0LmlzSGlkZGVuKCk7XG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBzeW1ib2xJbnN0YW5jZS5yaWdodEp1c3RpZmllZFRleHRTeW1ib2xJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UuY2VudGVySnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LFxuICAgICAgICAgICAgICAgICAgICBzeW1ib2xJbnN0YW5jZS5sZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4XG4gICAgICAgICAgICAgICAgXS5mb3JFYWNoKGluZGV4ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1Y2tldC50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldChpbmRleCkuaGlkZGVuID0gc3ltYm9sSGlkZGVuIHx8IGhvcml6b250YWxIaWRkZW4gPyAxIDogMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYnVja2V0LnRleHQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4KS5oaWRkZW4gPSBzeW1ib2xIaWRkZW4gfHwgdmVydGljYWxIaWRkZW4gPyAxIDogMDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2T2Zmc2V0ID0gdGhpcy52YXJpYWJsZU9mZnNldHNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdO1xuICAgICAgICAgICAgICAgIGlmIChwcmV2T2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFya1VzZWRKdXN0aWZpY2F0aW9uKGJ1Y2tldCwgcHJldk9mZnNldC5hbmNob3IsIHN5bWJvbEluc3RhbmNlLCBwbGFjZWRPcmllbnRhdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgcHJldk9yaWVudGF0aW9uID0gdGhpcy5wbGFjZWRPcmllbnRhdGlvbnNbc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdO1xuICAgICAgICAgICAgICAgIGlmIChwcmV2T3JpZW50YXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXJrVXNlZEp1c3RpZmljYXRpb24oYnVja2V0LCAnbGVmdCcsIHN5bWJvbEluc3RhbmNlLCBwcmV2T3JpZW50YXRpb24pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcmtVc2VkT3JpZW50YXRpb24oYnVja2V0LCBwcmV2T3JpZW50YXRpb24sIHN5bWJvbEluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChoYXNJY29uKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFja2VkT3BhY2l0eSA9IHBhY2tPcGFjaXR5KG9wYWNpdHlTdGF0ZS5pY29uKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHVzZUhvcml6b250YWwgPSAhKGhhc0ljb25UZXh0Rml0ICYmIHN5bWJvbEluc3RhbmNlLnZlcnRpY2FsUGxhY2VkSWNvblN5bWJvbEluZGV4ICYmIGhvcml6b250YWxIaWRkZW4pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHN5bWJvbEluc3RhbmNlLnBsYWNlZEljb25TeW1ib2xJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhvcml6b250YWxPcGFjaXR5ID0gdXNlSG9yaXpvbnRhbCA/IHBhY2tlZE9wYWNpdHkgOiBQQUNLRURfSElEREVOX09QQUNJVFk7XG4gICAgICAgICAgICAgICAgICAgIGFkZE9wYWNpdGllcyhidWNrZXQuaWNvbiwgc3ltYm9sSW5zdGFuY2UubnVtSWNvblZlcnRpY2VzLCBob3Jpem9udGFsT3BhY2l0eSk7XG4gICAgICAgICAgICAgICAgICAgIGJ1Y2tldC5pY29uLnBsYWNlZFN5bWJvbEFycmF5LmdldChzeW1ib2xJbnN0YW5jZS5wbGFjZWRJY29uU3ltYm9sSW5kZXgpLmhpZGRlbiA9XG4gICAgICAgICAgICAgICAgICAgICAgICAob3BhY2l0eVN0YXRlLmljb24uaXNIaWRkZW4oKTogYW55KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc3ltYm9sSW5zdGFuY2UudmVydGljYWxQbGFjZWRJY29uU3ltYm9sSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZXJ0aWNhbE9wYWNpdHkgPSAhdXNlSG9yaXpvbnRhbCA/IHBhY2tlZE9wYWNpdHkgOiBQQUNLRURfSElEREVOX09QQUNJVFk7XG4gICAgICAgICAgICAgICAgICAgIGFkZE9wYWNpdGllcyhidWNrZXQuaWNvbiwgc3ltYm9sSW5zdGFuY2UubnVtVmVydGljYWxJY29uVmVydGljZXMsIHZlcnRpY2FsT3BhY2l0eSk7XG4gICAgICAgICAgICAgICAgICAgIGJ1Y2tldC5pY29uLnBsYWNlZFN5bWJvbEFycmF5LmdldChzeW1ib2xJbnN0YW5jZS52ZXJ0aWNhbFBsYWNlZEljb25TeW1ib2xJbmRleCkuaGlkZGVuID1cbiAgICAgICAgICAgICAgICAgICAgICAgIChvcGFjaXR5U3RhdGUuaWNvbi5pc0hpZGRlbigpOiBhbnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGJ1Y2tldC5oYXNJY29uQ29sbGlzaW9uQm94RGF0YSgpIHx8IGJ1Y2tldC5oYXNUZXh0Q29sbGlzaW9uQm94RGF0YSgpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sbGlzaW9uQXJyYXlzID0gYnVja2V0LmNvbGxpc2lvbkFycmF5c1tzXTtcbiAgICAgICAgICAgICAgICBpZiAoY29sbGlzaW9uQXJyYXlzKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBzaGlmdCA9IG5ldyBQb2ludCgwLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbGxpc2lvbkFycmF5cy50ZXh0Qm94IHx8IGNvbGxpc2lvbkFycmF5cy52ZXJ0aWNhbFRleHRCb3gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZVBsYWNlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhcmlhYmxlT2Zmc2V0ID0gdGhpcy52YXJpYWJsZU9mZnNldHNbY3Jvc3NUaWxlSURdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZU9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHdpbGwgc2hvdyBlaXRoZXIgdGhlIGN1cnJlbnRseSBwbGFjZWQgcG9zaXRpb24gb3IgdGhlIGxhc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3VjY2Vzc2Z1bGx5IHBsYWNlZCBwb3NpdGlvbiAoc28geW91IGNhbiB2aXN1YWxpemUgd2hhdCBjb2xsaXNpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8ganVzdCBtYWRlIHRoZSBzeW1ib2wgZGlzYXBwZWFyLCBhbmQgdGhlIG1vc3QgbGlrZWx5IHBsYWNlIGZvciB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3ltYm9sIHRvIGNvbWUgYmFjaylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnQgPSBjYWxjdWxhdGVWYXJpYWJsZUxheW91dFNoaWZ0KHZhcmlhYmxlT2Zmc2V0LmFuY2hvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVPZmZzZXQud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlT2Zmc2V0LmhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVPZmZzZXQudGV4dE9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVPZmZzZXQudGV4dEJveFNjYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvdGF0ZVdpdGhNYXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0Ll9yb3RhdGUocGl0Y2hXaXRoTWFwID8gdGhpcy50cmFuc2Zvcm0uYW5nbGUgOiAtdGhpcy50cmFuc2Zvcm0uYW5nbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm8gb2Zmc2V0IC0+IHRoaXMgc3ltYm9sIGhhc24ndCBiZWVuIHBsYWNlZCBzaW5jZSBjb21pbmcgb24tc2NyZWVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIHNpbmdsZSBib3ggaXMgcGFydGljdWxhcmx5IG1lYW5pbmdmdWwgYW5kIGFsbCBvZiB0aGVtIHdvdWxkIGJlIHRvbyBub2lzeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2UgdGhlIGNlbnRlciBib3gganVzdCB0byBzaG93IHNvbWV0aGluZydzIHRoZXJlLCBidXQgbWFyayBpdCBcIm5vdCB1c2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbGxpc2lvbkFycmF5cy50ZXh0Qm94KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQ29sbGlzaW9uVmVydGljZXMoYnVja2V0LnRleHRDb2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QXJyYXksIG9wYWNpdHlTdGF0ZS50ZXh0LnBsYWNlZCwgIXVzZWQgfHwgaG9yaXpvbnRhbEhpZGRlbiwgc2hpZnQueCwgc2hpZnQueSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29sbGlzaW9uQXJyYXlzLnZlcnRpY2FsVGV4dEJveCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNvbGxpc2lvblZlcnRpY2VzKGJ1Y2tldC50ZXh0Q29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5LCBvcGFjaXR5U3RhdGUudGV4dC5wbGFjZWQsICF1c2VkIHx8IHZlcnRpY2FsSGlkZGVuLCBzaGlmdC54LCBzaGlmdC55KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlcnRpY2FsSWNvblVzZWQgPSBCb29sZWFuKCF2ZXJ0aWNhbEhpZGRlbiAmJiBjb2xsaXNpb25BcnJheXMudmVydGljYWxJY29uQm94KTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY29sbGlzaW9uQXJyYXlzLmljb25Cb3gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNvbGxpc2lvblZlcnRpY2VzKGJ1Y2tldC5pY29uQ29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5LCBvcGFjaXR5U3RhdGUuaWNvbi5wbGFjZWQsIHZlcnRpY2FsSWNvblVzZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzSWNvblRleHRGaXQgPyBzaGlmdC54IDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNJY29uVGV4dEZpdCA/IHNoaWZ0LnkgOiAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2xsaXNpb25BcnJheXMudmVydGljYWxJY29uQm94KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVDb2xsaXNpb25WZXJ0aWNlcyhidWNrZXQuaWNvbkNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheSwgb3BhY2l0eVN0YXRlLmljb24ucGxhY2VkLCAhdmVydGljYWxJY29uVXNlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNJY29uVGV4dEZpdCA/IHNoaWZ0LnggOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0ljb25UZXh0Rml0ID8gc2hpZnQueSA6IDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnVja2V0LnNvcnRGZWF0dXJlcyh0aGlzLnRyYW5zZm9ybS5hbmdsZSk7XG4gICAgICAgIGlmICh0aGlzLnJldGFpbmVkUXVlcnlEYXRhW2J1Y2tldC5idWNrZXRJbnN0YW5jZUlkXSkge1xuICAgICAgICAgICAgdGhpcy5yZXRhaW5lZFF1ZXJ5RGF0YVtidWNrZXQuYnVja2V0SW5zdGFuY2VJZF0uZmVhdHVyZVNvcnRPcmRlciA9IGJ1Y2tldC5mZWF0dXJlU29ydE9yZGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJ1Y2tldC5oYXNUZXh0RGF0YSgpICYmIGJ1Y2tldC50ZXh0Lm9wYWNpdHlWZXJ0ZXhCdWZmZXIpIHtcbiAgICAgICAgICAgIGJ1Y2tldC50ZXh0Lm9wYWNpdHlWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShidWNrZXQudGV4dC5vcGFjaXR5VmVydGV4QXJyYXkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChidWNrZXQuaGFzSWNvbkRhdGEoKSAmJiBidWNrZXQuaWNvbi5vcGFjaXR5VmVydGV4QnVmZmVyKSB7XG4gICAgICAgICAgICBidWNrZXQuaWNvbi5vcGFjaXR5VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoYnVja2V0Lmljb24ub3BhY2l0eVZlcnRleEFycmF5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYnVja2V0Lmhhc0ljb25Db2xsaXNpb25Cb3hEYXRhKCkgJiYgYnVja2V0Lmljb25Db2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QnVmZmVyKSB7XG4gICAgICAgICAgICBidWNrZXQuaWNvbkNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShidWNrZXQuaWNvbkNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJ1Y2tldC5oYXNUZXh0Q29sbGlzaW9uQm94RGF0YSgpICYmIGJ1Y2tldC50ZXh0Q29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEJ1ZmZlcikge1xuICAgICAgICAgICAgYnVja2V0LnRleHRDb2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoYnVja2V0LnRleHRDb2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QXJyYXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXNzZXJ0KGJ1Y2tldC50ZXh0Lm9wYWNpdHlWZXJ0ZXhBcnJheS5sZW5ndGggPT09IGJ1Y2tldC50ZXh0LmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCAvIDQpO1xuICAgICAgICBhc3NlcnQoYnVja2V0Lmljb24ub3BhY2l0eVZlcnRleEFycmF5Lmxlbmd0aCA9PT0gYnVja2V0Lmljb24ubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoIC8gNCk7XG5cbiAgICAgICAgLy8gUHVzaCBnZW5lcmF0ZWQgY29sbGlzaW9uIGNpcmNsZXMgdG8gdGhlIGJ1Y2tldCBmb3IgZGVidWcgcmVuZGVyaW5nXG4gICAgICAgIGlmIChidWNrZXQuYnVja2V0SW5zdGFuY2VJZCBpbiB0aGlzLmNvbGxpc2lvbkNpcmNsZUFycmF5cykge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmNvbGxpc2lvbkNpcmNsZUFycmF5c1tidWNrZXQuYnVja2V0SW5zdGFuY2VJZF07XG5cbiAgICAgICAgICAgIGJ1Y2tldC5wbGFjZW1lbnRJbnZQcm9qTWF0cml4ID0gaW5zdGFuY2UuaW52UHJvak1hdHJpeDtcbiAgICAgICAgICAgIGJ1Y2tldC5wbGFjZW1lbnRWaWV3cG9ydE1hdHJpeCA9IGluc3RhbmNlLnZpZXdwb3J0TWF0cml4O1xuICAgICAgICAgICAgYnVja2V0LmNvbGxpc2lvbkNpcmNsZUFycmF5ID0gaW5zdGFuY2UuY2lyY2xlcztcblxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuY29sbGlzaW9uQ2lyY2xlQXJyYXlzW2J1Y2tldC5idWNrZXRJbnN0YW5jZUlkXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN5bWJvbEZhZGVDaGFuZ2Uobm93OiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmFkZUR1cmF0aW9uID09PSAwID9cbiAgICAgICAgICAgIDEgOlxuICAgICAgICAgICAgKChub3cgLSB0aGlzLmNvbW1pdFRpbWUpIC8gdGhpcy5mYWRlRHVyYXRpb24gKyB0aGlzLnByZXZab29tQWRqdXN0bWVudCk7XG4gICAgfVxuXG4gICAgem9vbUFkanVzdG1lbnQoem9vbTogbnVtYmVyKSB7XG4gICAgICAgIC8vIFdoZW4gem9vbWluZyBvdXQgcXVpY2tseSwgbGFiZWxzIGNhbiBvdmVybGFwIGVhY2ggb3RoZXIuIFRoaXNcbiAgICAgICAgLy8gYWRqdXN0bWVudCBpcyB1c2VkIHRvIHJlZHVjZSB0aGUgaW50ZXJ2YWwgYmV0d2VlbiBwbGFjZW1lbnQgY2FsY3VsYXRpb25zXG4gICAgICAgIC8vIGFuZCB0byByZWR1Y2UgdGhlIGZhZGUgZHVyYXRpb24gd2hlbiB6b29taW5nIG91dCBxdWlja2x5LiBEaXNjb3ZlcmluZyB0aGVcbiAgICAgICAgLy8gY29sbGlzaW9ucyBtb3JlIHF1aWNrbHkgYW5kIGZhZGluZyB0aGVtIG1vcmUgcXVpY2tseSByZWR1Y2VzIHRoZSB1bndhbnRlZCBlZmZlY3QuXG4gICAgICAgIHJldHVybiBNYXRoLm1heCgwLCAodGhpcy50cmFuc2Zvcm0uem9vbSAtIHpvb20pIC8gMS41KTtcbiAgICB9XG5cbiAgICBoYXNUcmFuc2l0aW9ucyhub3c6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGFsZSB8fFxuICAgICAgICAgICAgbm93IC0gdGhpcy5sYXN0UGxhY2VtZW50Q2hhbmdlVGltZSA8IHRoaXMuZmFkZUR1cmF0aW9uO1xuICAgIH1cblxuICAgIHN0aWxsUmVjZW50KG5vdzogbnVtYmVyLCB6b29tOiBudW1iZXIpIHtcbiAgICAgICAgLy8gVGhlIGFkanVzdG1lbnQgbWFrZXMgcGxhY2VtZW50IG1vcmUgZnJlcXVlbnQgd2hlbiB6b29taW5nLlxuICAgICAgICAvLyBUaGlzIGNvbmRpdGlvbiBhcHBsaWVzIHRoZSBhZGp1c3RtZW50IG9ubHkgYWZ0ZXIgdGhlIG1hcCBoYXNcbiAgICAgICAgLy8gc3RvcHBlZCB6b29taW5nLiBUaGlzIGF2b2lkcyBhZGRpbmcgZXh0cmEgamFuayB3aGlsZSB6b29taW5nLlxuICAgICAgICBjb25zdCBkdXJhdGlvbkFkanVzdG1lbnQgPSB0aGlzLnpvb21BdExhc3RSZWNlbmN5Q2hlY2sgPT09IHpvb20gP1xuICAgICAgICAgICAgKDEgLSB0aGlzLnpvb21BZGp1c3RtZW50KHpvb20pKSA6XG4gICAgICAgICAgICAxO1xuICAgICAgICB0aGlzLnpvb21BdExhc3RSZWNlbmN5Q2hlY2sgPSB6b29tO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmNvbW1pdFRpbWUgKyB0aGlzLmZhZGVEdXJhdGlvbiAqIGR1cmF0aW9uQWRqdXN0bWVudCA+IG5vdztcbiAgICB9XG5cbiAgICBzZXRTdGFsZSgpIHtcbiAgICAgICAgdGhpcy5zdGFsZSA9IHRydWU7XG4gICAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVDb2xsaXNpb25WZXJ0aWNlcyhjb2xsaXNpb25WZXJ0ZXhBcnJheTogQ29sbGlzaW9uVmVydGV4QXJyYXksIHBsYWNlZDogYm9vbGVhbiwgbm90VXNlZDogYm9vbGVhbiB8IG51bWJlciwgc2hpZnRYPzogbnVtYmVyLCBzaGlmdFk/OiBudW1iZXIpIHtcbiAgICBjb2xsaXNpb25WZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhwbGFjZWQgPyAxIDogMCwgbm90VXNlZCA/IDEgOiAwLCBzaGlmdFggfHwgMCwgc2hpZnRZIHx8IDApO1xuICAgIGNvbGxpc2lvblZlcnRleEFycmF5LmVtcGxhY2VCYWNrKHBsYWNlZCA/IDEgOiAwLCBub3RVc2VkID8gMSA6IDAsIHNoaWZ0WCB8fCAwLCBzaGlmdFkgfHwgMCk7XG4gICAgY29sbGlzaW9uVmVydGV4QXJyYXkuZW1wbGFjZUJhY2socGxhY2VkID8gMSA6IDAsIG5vdFVzZWQgPyAxIDogMCwgc2hpZnRYIHx8IDAsIHNoaWZ0WSB8fCAwKTtcbiAgICBjb2xsaXNpb25WZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayhwbGFjZWQgPyAxIDogMCwgbm90VXNlZCA/IDEgOiAwLCBzaGlmdFggfHwgMCwgc2hpZnRZIHx8IDApO1xufVxuXG4vLyBBbGwgZm91ciB2ZXJ0aWNlcyBmb3IgYSBnbHlwaCB3aWxsIGhhdmUgdGhlIHNhbWUgb3BhY2l0eSBzdGF0ZVxuLy8gU28gd2UgcGFjayB0aGUgb3BhY2l0eSBpbnRvIGEgdWludDgsIGFuZCB0aGVuIHJlcGVhdCBpdCBmb3VyIHRpbWVzXG4vLyB0byBtYWtlIGEgc2luZ2xlIHVpbnQzMiB0aGF0IHdlIGNhbiB1cGxvYWQgZm9yIGVhY2ggZ2x5cGggaW4gdGhlXG4vLyBsYWJlbC5cbmNvbnN0IHNoaWZ0MjUgPSBNYXRoLnBvdygyLCAyNSk7XG5jb25zdCBzaGlmdDI0ID0gTWF0aC5wb3coMiwgMjQpO1xuY29uc3Qgc2hpZnQxNyA9IE1hdGgucG93KDIsIDE3KTtcbmNvbnN0IHNoaWZ0MTYgPSBNYXRoLnBvdygyLCAxNik7XG5jb25zdCBzaGlmdDkgPSBNYXRoLnBvdygyLCA5KTtcbmNvbnN0IHNoaWZ0OCA9IE1hdGgucG93KDIsIDgpO1xuY29uc3Qgc2hpZnQxID0gTWF0aC5wb3coMiwgMSk7XG5mdW5jdGlvbiBwYWNrT3BhY2l0eShvcGFjaXR5U3RhdGU6IE9wYWNpdHlTdGF0ZSk6IG51bWJlciB7XG4gICAgaWYgKG9wYWNpdHlTdGF0ZS5vcGFjaXR5ID09PSAwICYmICFvcGFjaXR5U3RhdGUucGxhY2VkKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH0gZWxzZSBpZiAob3BhY2l0eVN0YXRlLm9wYWNpdHkgPT09IDEgJiYgb3BhY2l0eVN0YXRlLnBsYWNlZCkge1xuICAgICAgICByZXR1cm4gNDI5NDk2NzI5NTtcbiAgICB9XG4gICAgY29uc3QgdGFyZ2V0Qml0ID0gb3BhY2l0eVN0YXRlLnBsYWNlZCA/IDEgOiAwO1xuICAgIGNvbnN0IG9wYWNpdHlCaXRzID0gTWF0aC5mbG9vcihvcGFjaXR5U3RhdGUub3BhY2l0eSAqIDEyNyk7XG4gICAgcmV0dXJuIG9wYWNpdHlCaXRzICogc2hpZnQyNSArIHRhcmdldEJpdCAqIHNoaWZ0MjQgK1xuICAgICAgICBvcGFjaXR5Qml0cyAqIHNoaWZ0MTcgKyB0YXJnZXRCaXQgKiBzaGlmdDE2ICtcbiAgICAgICAgb3BhY2l0eUJpdHMgKiBzaGlmdDkgKyB0YXJnZXRCaXQgKiBzaGlmdDggK1xuICAgICAgICBvcGFjaXR5Qml0cyAqIHNoaWZ0MSArIHRhcmdldEJpdDtcbn1cblxuY29uc3QgUEFDS0VEX0hJRERFTl9PUEFDSVRZID0gMDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBicm93c2VyIGZyb20gJy4uL3V0aWwvYnJvd3Nlcic7XG5cbmltcG9ydCB7UGxhY2VtZW50fSBmcm9tICcuLi9zeW1ib2wvcGxhY2VtZW50JztcblxuaW1wb3J0IHR5cGUgVHJhbnNmb3JtIGZyb20gJy4uL2dlby90cmFuc2Zvcm0nO1xuaW1wb3J0IHR5cGUgU3R5bGVMYXllciBmcm9tICcuL3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIFN5bWJvbFN0eWxlTGF5ZXIgZnJvbSAnLi9zdHlsZV9sYXllci9zeW1ib2xfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgVGlsZSBmcm9tICcuLi9zb3VyY2UvdGlsZSc7XG5pbXBvcnQgdHlwZSB7QnVja2V0UGFydH0gZnJvbSAnLi4vc3ltYm9sL3BsYWNlbWVudCc7XG5cbmNsYXNzIExheWVyUGxhY2VtZW50IHtcbiAgICBfc29ydEFjcm9zc1RpbGVzOiBib29sZWFuO1xuICAgIF9jdXJyZW50VGlsZUluZGV4OiBudW1iZXI7XG4gICAgX2N1cnJlbnRQYXJ0SW5kZXg6IG51bWJlcjtcbiAgICBfc2VlbkNyb3NzVGlsZUlEczogeyBbc3RyaW5nIHwgbnVtYmVyXTogYm9vbGVhbiB9O1xuICAgIF9idWNrZXRQYXJ0czogQXJyYXk8QnVja2V0UGFydD47XG5cbiAgICBjb25zdHJ1Y3RvcihzdHlsZUxheWVyOiBTeW1ib2xTdHlsZUxheWVyKSB7XG4gICAgICAgIHRoaXMuX3NvcnRBY3Jvc3NUaWxlcyA9IHN0eWxlTGF5ZXIubGF5b3V0LmdldCgnc3ltYm9sLXotb3JkZXInKSAhPT0gJ3ZpZXdwb3J0LXknICYmXG4gICAgICAgICAgICBzdHlsZUxheWVyLmxheW91dC5nZXQoJ3N5bWJvbC1zb3J0LWtleScpLmNvbnN0YW50T3IoMSkgIT09IHVuZGVmaW5lZDtcblxuICAgICAgICB0aGlzLl9jdXJyZW50VGlsZUluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5fY3VycmVudFBhcnRJbmRleCA9IDA7XG4gICAgICAgIHRoaXMuX3NlZW5Dcm9zc1RpbGVJRHMgPSB7fTtcbiAgICAgICAgdGhpcy5fYnVja2V0UGFydHMgPSBbXTtcbiAgICB9XG5cbiAgICBjb250aW51ZVBsYWNlbWVudCh0aWxlczogQXJyYXk8VGlsZT4sIHBsYWNlbWVudDogUGxhY2VtZW50LCBzaG93Q29sbGlzaW9uQm94ZXM6IGJvb2xlYW4sIHN0eWxlTGF5ZXI6IFN0eWxlTGF5ZXIsIHNob3VsZFBhdXNlUGxhY2VtZW50OiAoKSA9PiBib29sZWFuKSB7XG5cbiAgICAgICAgY29uc3QgYnVja2V0UGFydHMgPSB0aGlzLl9idWNrZXRQYXJ0cztcblxuICAgICAgICB3aGlsZSAodGhpcy5fY3VycmVudFRpbGVJbmRleCA8IHRpbGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgdGlsZSA9IHRpbGVzW3RoaXMuX2N1cnJlbnRUaWxlSW5kZXhdO1xuICAgICAgICAgICAgcGxhY2VtZW50LmdldEJ1Y2tldFBhcnRzKGJ1Y2tldFBhcnRzLCBzdHlsZUxheWVyLCB0aWxlLCB0aGlzLl9zb3J0QWNyb3NzVGlsZXMpO1xuXG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50VGlsZUluZGV4Kys7XG4gICAgICAgICAgICBpZiAoc2hvdWxkUGF1c2VQbGFjZW1lbnQoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX3NvcnRBY3Jvc3NUaWxlcykge1xuICAgICAgICAgICAgdGhpcy5fc29ydEFjcm9zc1RpbGVzID0gZmFsc2U7XG4gICAgICAgICAgICBidWNrZXRQYXJ0cy5zb3J0KChhLCBiKSA9PiAoKGEuc29ydEtleTogYW55KTogbnVtYmVyKSAtICgoYi5zb3J0S2V5OiBhbnkpOiBudW1iZXIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlICh0aGlzLl9jdXJyZW50UGFydEluZGV4IDwgYnVja2V0UGFydHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBidWNrZXRQYXJ0ID0gYnVja2V0UGFydHNbdGhpcy5fY3VycmVudFBhcnRJbmRleF07XG4gICAgICAgICAgICBwbGFjZW1lbnQucGxhY2VMYXllckJ1Y2tldFBhcnQoYnVja2V0UGFydCwgdGhpcy5fc2VlbkNyb3NzVGlsZUlEcywgc2hvd0NvbGxpc2lvbkJveGVzKTtcblxuICAgICAgICAgICAgdGhpcy5fY3VycmVudFBhcnRJbmRleCsrO1xuICAgICAgICAgICAgaWYgKHNob3VsZFBhdXNlUGxhY2VtZW50KCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5jbGFzcyBQYXVzZWFibGVQbGFjZW1lbnQge1xuICAgIHBsYWNlbWVudDogUGxhY2VtZW50O1xuICAgIF9kb25lOiBib29sZWFuO1xuICAgIF9jdXJyZW50UGxhY2VtZW50SW5kZXg6IG51bWJlcjtcbiAgICBfZm9yY2VGdWxsUGxhY2VtZW50OiBib29sZWFuO1xuICAgIF9zaG93Q29sbGlzaW9uQm94ZXM6IGJvb2xlYW47XG4gICAgX2luUHJvZ3Jlc3NMYXllcjogP0xheWVyUGxhY2VtZW50O1xuXG4gICAgY29uc3RydWN0b3IodHJhbnNmb3JtOiBUcmFuc2Zvcm0sIG9yZGVyOiBBcnJheTxzdHJpbmc+LFxuICAgICAgICAgICAgICAgIGZvcmNlRnVsbFBsYWNlbWVudDogYm9vbGVhbixcbiAgICAgICAgICAgICAgICBzaG93Q29sbGlzaW9uQm94ZXM6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgZmFkZUR1cmF0aW9uOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgY3Jvc3NTb3VyY2VDb2xsaXNpb25zOiBib29sZWFuLFxuICAgICAgICAgICAgICAgIHByZXZQbGFjZW1lbnQ/OiBQbGFjZW1lbnQpIHtcblxuICAgICAgICB0aGlzLnBsYWNlbWVudCA9IG5ldyBQbGFjZW1lbnQodHJhbnNmb3JtLCBmYWRlRHVyYXRpb24sIGNyb3NzU291cmNlQ29sbGlzaW9ucywgcHJldlBsYWNlbWVudCk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRQbGFjZW1lbnRJbmRleCA9IG9yZGVyLmxlbmd0aCAtIDE7XG4gICAgICAgIHRoaXMuX2ZvcmNlRnVsbFBsYWNlbWVudCA9IGZvcmNlRnVsbFBsYWNlbWVudDtcbiAgICAgICAgdGhpcy5fc2hvd0NvbGxpc2lvbkJveGVzID0gc2hvd0NvbGxpc2lvbkJveGVzO1xuICAgICAgICB0aGlzLl9kb25lID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaXNEb25lKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZG9uZTtcbiAgICB9XG5cbiAgICBjb250aW51ZVBsYWNlbWVudChvcmRlcjogQXJyYXk8c3RyaW5nPiwgbGF5ZXJzOiB7W186IHN0cmluZ106IFN0eWxlTGF5ZXJ9LCBsYXllclRpbGVzOiB7W186IHN0cmluZ106IEFycmF5PFRpbGU+fSkge1xuICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBicm93c2VyLm5vdygpO1xuXG4gICAgICAgIGNvbnN0IHNob3VsZFBhdXNlUGxhY2VtZW50ID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWxhcHNlZFRpbWUgPSBicm93c2VyLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZvcmNlRnVsbFBsYWNlbWVudCA/IGZhbHNlIDogZWxhcHNlZFRpbWUgPiAyO1xuICAgICAgICB9O1xuXG4gICAgICAgIHdoaWxlICh0aGlzLl9jdXJyZW50UGxhY2VtZW50SW5kZXggPj0gMCkge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXJJZCA9IG9yZGVyW3RoaXMuX2N1cnJlbnRQbGFjZW1lbnRJbmRleF07XG4gICAgICAgICAgICBjb25zdCBsYXllciA9IGxheWVyc1tsYXllcklkXTtcbiAgICAgICAgICAgIGNvbnN0IHBsYWNlbWVudFpvb20gPSB0aGlzLnBsYWNlbWVudC5jb2xsaXNpb25JbmRleC50cmFuc2Zvcm0uem9vbTtcbiAgICAgICAgICAgIGlmIChsYXllci50eXBlID09PSAnc3ltYm9sJyAmJlxuICAgICAgICAgICAgICAgICghbGF5ZXIubWluem9vbSB8fCBsYXllci5taW56b29tIDw9IHBsYWNlbWVudFpvb20pICYmXG4gICAgICAgICAgICAgICAgKCFsYXllci5tYXh6b29tIHx8IGxheWVyLm1heHpvb20gPiBwbGFjZW1lbnRab29tKSkge1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9pblByb2dyZXNzTGF5ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5Qcm9ncmVzc0xheWVyID0gbmV3IExheWVyUGxhY2VtZW50KCgobGF5ZXI6IGFueSk6IFN5bWJvbFN0eWxlTGF5ZXIpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwYXVzZVBsYWNlbWVudCA9IHRoaXMuX2luUHJvZ3Jlc3NMYXllci5jb250aW51ZVBsYWNlbWVudChsYXllclRpbGVzW2xheWVyLnNvdXJjZV0sIHRoaXMucGxhY2VtZW50LCB0aGlzLl9zaG93Q29sbGlzaW9uQm94ZXMsIGxheWVyLCBzaG91bGRQYXVzZVBsYWNlbWVudCk7XG5cbiAgICAgICAgICAgICAgICBpZiAocGF1c2VQbGFjZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gV2UgZGlkbid0IGZpbmlzaCBwbGFjaW5nIGFsbCBsYXllcnMgd2l0aGluIDJtcyxcbiAgICAgICAgICAgICAgICAgICAgLy8gYnV0IHdlIGNhbiBrZWVwIHJlbmRlcmluZyB3aXRoIGEgcGFydGlhbCBwbGFjZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgLy8gV2UnbGwgcmVzdW1lIGhlcmUgb24gdGhlIG5leHQgZnJhbWVcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9pblByb2dyZXNzTGF5ZXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRQbGFjZW1lbnRJbmRleC0tO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZG9uZSA9IHRydWU7XG4gICAgfVxuXG4gICAgY29tbWl0KG5vdzogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMucGxhY2VtZW50LmNvbW1pdChub3cpO1xuICAgICAgICByZXR1cm4gdGhpcy5wbGFjZW1lbnQ7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBQYXVzZWFibGVQbGFjZW1lbnQ7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgRVhURU5UIGZyb20gJy4uL2RhdGEvZXh0ZW50JztcblxuaW1wb3J0IHtTeW1ib2xJbnN0YW5jZUFycmF5fSBmcm9tICcuLi9kYXRhL2FycmF5X3R5cGVzJztcblxuaW1wb3J0IHR5cGUge1N5bWJvbEluc3RhbmNlfSBmcm9tICcuLi9kYXRhL2FycmF5X3R5cGVzJztcbmltcG9ydCB0eXBlIHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuLi9zb3VyY2UvdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSBTeW1ib2xCdWNrZXQgZnJvbSAnLi4vZGF0YS9idWNrZXQvc3ltYm9sX2J1Y2tldCc7XG5pbXBvcnQgdHlwZSBTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIFRpbGUgZnJvbSAnLi4vc291cmNlL3RpbGUnO1xuXG4vKlxuICAgIFRoZSBDcm9zc1RpbGVTeW1ib2xJbmRleCBnZW5lcmFsbHkgd29ya3Mgb24gdGhlIGFzc3VtcHRpb24gdGhhdFxuICAgIGEgY29uY2VwdHVhbCBcInVuaXF1ZSBzeW1ib2xcIiBjYW4gYmUgaWRlbnRpZmllZCBieSB0aGUgdGV4dCBvZlxuICAgIHRoZSBsYWJlbCBjb21iaW5lZCB3aXRoIHRoZSBhbmNob3IgcG9pbnQuIFRoZSBnb2FsIGlzIHRvIGFzc2lnblxuICAgIHRoZXNlIGNvbmNlcHR1YWwgXCJ1bmlxdWUgc3ltYm9sc1wiIGEgc2hhcmVkIGNyb3NzVGlsZUlEIHRoYXQgY2FuIGJlXG4gICAgdXNlZCBieSBQbGFjZW1lbnQgdG8ga2VlcCBmYWRpbmcgb3BhY2l0eSBzdGF0ZXMgY29uc2lzdGVudCBhbmQgdG9cbiAgICBkZWR1cGxpY2F0ZSBsYWJlbHMuXG5cbiAgICBUaGUgQ3Jvc3NUaWxlU3ltYm9sSW5kZXggaW5kZXhlcyBhbGwgdGhlIGN1cnJlbnQgc3ltYm9sIGluc3RhbmNlcyBhbmRcbiAgICB0aGVpciBjcm9zc1RpbGVJRHMuIFdoZW4gYSBzeW1ib2wgYnVja2V0IGdldHMgYWRkZWQgb3IgdXBkYXRlZCwgdGhlXG4gICAgaW5kZXggYXNzaWducyBhIGNyb3NzVGlsZUlEIHRvIGVhY2ggb2YgaXQncyBzeW1ib2wgaW5zdGFuY2VzIGJ5IGVpdGhlclxuICAgIG1hdGNoaW5nIGl0IHdpdGggYW4gZXhpc3RpbmcgaWQgb3IgYXNzaWduaW5nIGEgbmV3IG9uZS5cbiovXG5cbi8vIFJvdW5kIGFuY2hvciBwb3NpdGlvbnMgdG8gcm91Z2hseSA0IHBpeGVsIGdyaWRcbmNvbnN0IHJvdW5kaW5nRmFjdG9yID0gNTEyIC8gRVhURU5UIC8gMjtcblxuY2xhc3MgVGlsZUxheWVySW5kZXgge1xuICAgIHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRDtcbiAgICBpbmRleGVkU3ltYm9sSW5zdGFuY2VzOiB7W186IG51bWJlcl06IEFycmF5PHtcbiAgICAgICAgY3Jvc3NUaWxlSUQ6IG51bWJlcixcbiAgICAgICAgY29vcmQ6IHtcbiAgICAgICAgICAgIHg6IG51bWJlcixcbiAgICAgICAgICAgIHk6IG51bWJlclxuICAgICAgICB9XG4gICAgfT59O1xuICAgIGJ1Y2tldEluc3RhbmNlSWQ6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCwgc3ltYm9sSW5zdGFuY2VzOiBTeW1ib2xJbnN0YW5jZUFycmF5LCBidWNrZXRJbnN0YW5jZUlkOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy50aWxlSUQgPSB0aWxlSUQ7XG4gICAgICAgIHRoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlcyA9IHt9O1xuICAgICAgICB0aGlzLmJ1Y2tldEluc3RhbmNlSWQgPSBidWNrZXRJbnN0YW5jZUlkO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3ltYm9sSW5zdGFuY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzeW1ib2xJbnN0YW5jZSA9IHN5bWJvbEluc3RhbmNlcy5nZXQoaSk7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBzeW1ib2xJbnN0YW5jZS5rZXk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlc1trZXldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmRleGVkU3ltYm9sSW5zdGFuY2VzW2tleV0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFRoaXMgdGlsZSBtYXkgaGF2ZSBtdWx0aXBsZSBzeW1ib2wgaW5zdGFuY2VzIHdpdGggdGhlIHNhbWUga2V5XG4gICAgICAgICAgICAvLyBTdG9yZSBlYWNoIG9uZSBhbG9uZyB3aXRoIGl0cyBjb29yZGluYXRlc1xuICAgICAgICAgICAgdGhpcy5pbmRleGVkU3ltYm9sSW5zdGFuY2VzW2tleV0ucHVzaCh7XG4gICAgICAgICAgICAgICAgY3Jvc3NUaWxlSUQ6IHN5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlELFxuICAgICAgICAgICAgICAgIGNvb3JkOiB0aGlzLmdldFNjYWxlZENvb3JkaW5hdGVzKHN5bWJvbEluc3RhbmNlLCB0aWxlSUQpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENvbnZlcnRzIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgaW5wdXQgc3ltYm9sIGluc3RhbmNlIGludG8gY29vcmRpbmF0ZXMgdGhhdCBiZSBjYW4gY29tcGFyZWRcbiAgICAvLyBhZ2FpbnN0IG90aGVyIHN5bWJvbHMgaW4gdGhpcyBpbmRleC4gQ29vcmRpbmF0ZXMgYXJlOlxuICAgIC8vICgxKSB3b3JsZC1iYXNlZCAoc28gYWZ0ZXIgY29udmVyc2lvbiB0aGUgc291cmNlIHRpbGUgaXMgaXJyZWxldmFudClcbiAgICAvLyAoMikgY29udmVydGVkIHRvIHRoZSB6LXNjYWxlIG9mIHRoaXMgVGlsZUxheWVySW5kZXhcbiAgICAvLyAoMykgZG93bi1zYW1wbGVkIGJ5IFwicm91bmRpbmdGYWN0b3JcIiBmcm9tIHRpbGUgY29vcmRpbmF0ZSBwcmVjaXNpb24gaW4gb3JkZXIgdG8gYmVcbiAgICAvLyAgICAgbW9yZSB0b2xlcmFudCBvZiBzbWFsbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRpbGVzLlxuICAgIGdldFNjYWxlZENvb3JkaW5hdGVzKHN5bWJvbEluc3RhbmNlOiBTeW1ib2xJbnN0YW5jZSwgY2hpbGRUaWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQpIHtcbiAgICAgICAgY29uc3QgekRpZmZlcmVuY2UgPSBjaGlsZFRpbGVJRC5jYW5vbmljYWwueiAtIHRoaXMudGlsZUlELmNhbm9uaWNhbC56O1xuICAgICAgICBjb25zdCBzY2FsZSA9IHJvdW5kaW5nRmFjdG9yIC8gTWF0aC5wb3coMiwgekRpZmZlcmVuY2UpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogTWF0aC5mbG9vcigoY2hpbGRUaWxlSUQuY2Fub25pY2FsLnggKiBFWFRFTlQgKyBzeW1ib2xJbnN0YW5jZS5hbmNob3JYKSAqIHNjYWxlKSxcbiAgICAgICAgICAgIHk6IE1hdGguZmxvb3IoKGNoaWxkVGlsZUlELmNhbm9uaWNhbC55ICogRVhURU5UICsgc3ltYm9sSW5zdGFuY2UuYW5jaG9yWSkgKiBzY2FsZSlcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmaW5kTWF0Y2hlcyhzeW1ib2xJbnN0YW5jZXM6IFN5bWJvbEluc3RhbmNlQXJyYXksIG5ld1RpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCwgem9vbUNyb3NzVGlsZUlEczoge1tjcm9zc1RpbGVJRDogbnVtYmVyXTogYm9vbGVhbn0pIHtcbiAgICAgICAgY29uc3QgdG9sZXJhbmNlID0gdGhpcy50aWxlSUQuY2Fub25pY2FsLnogPCBuZXdUaWxlSUQuY2Fub25pY2FsLnogPyAxIDogTWF0aC5wb3coMiwgdGhpcy50aWxlSUQuY2Fub25pY2FsLnogLSBuZXdUaWxlSUQuY2Fub25pY2FsLnopO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3ltYm9sSW5zdGFuY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzeW1ib2xJbnN0YW5jZSA9IHN5bWJvbEluc3RhbmNlcy5nZXQoaSk7XG4gICAgICAgICAgICBpZiAoc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSUQpIHtcbiAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IGhhcyBhIG1hdGNoLCBza2lwXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGluZGV4ZWRJbnN0YW5jZXMgPSB0aGlzLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXNbc3ltYm9sSW5zdGFuY2Uua2V5XTtcbiAgICAgICAgICAgIGlmICghaW5kZXhlZEluc3RhbmNlcykge1xuICAgICAgICAgICAgICAgIC8vIE5vIHN5bWJvbCB3aXRoIHRoaXMga2V5IGluIHRoaXMgYnVja2V0XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNjYWxlZFN5bWJvbENvb3JkID0gdGhpcy5nZXRTY2FsZWRDb29yZGluYXRlcyhzeW1ib2xJbnN0YW5jZSwgbmV3VGlsZUlEKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCB0aGlzVGlsZVN5bWJvbCBvZiBpbmRleGVkSW5zdGFuY2VzKSB7XG4gICAgICAgICAgICAgICAgLy8gUmV0dXJuIGFueSBzeW1ib2wgd2l0aCB0aGUgc2FtZSBrZXlzIHdob3NlIGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4gMVxuICAgICAgICAgICAgICAgIC8vIGdyaWQgdW5pdC4gKHdpdGggYSA0cHggZ3JpZCwgdGhpcyBjb3ZlcnMgYSAxMnB4IGJ5IDEycHggYXJlYSlcbiAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnModGhpc1RpbGVTeW1ib2wuY29vcmQueCAtIHNjYWxlZFN5bWJvbENvb3JkLngpIDw9IHRvbGVyYW5jZSAmJlxuICAgICAgICAgICAgICAgICAgICBNYXRoLmFicyh0aGlzVGlsZVN5bWJvbC5jb29yZC55IC0gc2NhbGVkU3ltYm9sQ29vcmQueSkgPD0gdG9sZXJhbmNlICYmXG4gICAgICAgICAgICAgICAgICAgICF6b29tQ3Jvc3NUaWxlSURzW3RoaXNUaWxlU3ltYm9sLmNyb3NzVGlsZUlEXSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBPbmNlIHdlJ3ZlIG1hcmtlZCBvdXJzZWx2ZXMgZHVwbGljYXRlIGFnYWluc3QgdGhpcyBwYXJlbnQgc3ltYm9sLFxuICAgICAgICAgICAgICAgICAgICAvLyBkb24ndCBsZXQgYW55IG90aGVyIHN5bWJvbHMgYXQgdGhlIHNhbWUgem9vbSBsZXZlbCBkdXBsaWNhdGUgYWdhaW5zdFxuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgc2FtZSBwYXJlbnQgKHNlZSBpc3N1ZSAjNTk5MylcbiAgICAgICAgICAgICAgICAgICAgem9vbUNyb3NzVGlsZUlEc1t0aGlzVGlsZVN5bWJvbC5jcm9zc1RpbGVJRF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRCA9IHRoaXNUaWxlU3ltYm9sLmNyb3NzVGlsZUlEO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIENyb3NzVGlsZUlEcyB7XG4gICAgbWF4Q3Jvc3NUaWxlSUQ6IG51bWJlcjtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5tYXhDcm9zc1RpbGVJRCA9IDA7XG4gICAgfVxuICAgIGdlbmVyYXRlKCkge1xuICAgICAgICByZXR1cm4gKyt0aGlzLm1heENyb3NzVGlsZUlEO1xuICAgIH1cbn1cblxuY2xhc3MgQ3Jvc3NUaWxlU3ltYm9sTGF5ZXJJbmRleCB7XG4gICAgaW5kZXhlczoge1t6b29tOiBzdHJpbmcgfCBudW1iZXJdOiB7W3RpbGVJZDogc3RyaW5nIHwgbnVtYmVyXTogVGlsZUxheWVySW5kZXh9fTtcbiAgICB1c2VkQ3Jvc3NUaWxlSURzOiB7W3pvb206IHN0cmluZyB8IG51bWJlcl06IHtbY3Jvc3NUaWxlSUQ6IG51bWJlcl06IGJvb2xlYW59fTtcbiAgICBsbmc6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmluZGV4ZXMgPSB7fTtcbiAgICAgICAgdGhpcy51c2VkQ3Jvc3NUaWxlSURzID0ge307XG4gICAgICAgIHRoaXMubG5nID0gMDtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIFNvbWV0aW1lcyB3aGVuIGEgdXNlciBwYW5zIGFjcm9zcyB0aGUgYW50aW1lcmlkaWFuIHRoZSBsb25naXR1ZGUgdmFsdWUgZ2V0cyB3cmFwcGVkLlxuICAgICAqIFRvIHByZXZlbnQgbGFiZWxzIGZyb20gZmxhc2hpbmcgb3V0IGFuZCBpbiB3ZSBhZGp1c3QgdGhlIHRpbGVJRCB2YWx1ZXMgaW4gdGhlIGluZGV4ZXNcbiAgICAgKiBzbyB0aGF0IHRoZXkgbWF0Y2ggdGhlIG5ldyB3cmFwcGVkIHZlcnNpb24gb2YgdGhlIG1hcC5cbiAgICAgKi9cbiAgICBoYW5kbGVXcmFwSnVtcChsbmc6IG51bWJlcikge1xuICAgICAgICBjb25zdCB3cmFwRGVsdGEgPSBNYXRoLnJvdW5kKChsbmcgLSB0aGlzLmxuZykgLyAzNjApO1xuICAgICAgICBpZiAod3JhcERlbHRhICE9PSAwKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHpvb20gaW4gdGhpcy5pbmRleGVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgem9vbUluZGV4ZXMgPSB0aGlzLmluZGV4ZXNbem9vbV07XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Wm9vbUluZGV4ID0ge307XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gem9vbUluZGV4ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlIHRoZSB0aWxlSUQncyB3cmFwIGFuZCBhZGQgaXQgdG8gYSBuZXcgaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB6b29tSW5kZXhlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICBpbmRleC50aWxlSUQgPSBpbmRleC50aWxlSUQudW53cmFwVG8oaW5kZXgudGlsZUlELndyYXAgKyB3cmFwRGVsdGEpO1xuICAgICAgICAgICAgICAgICAgICBuZXdab29tSW5kZXhbaW5kZXgudGlsZUlELmtleV0gPSBpbmRleDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5pbmRleGVzW3pvb21dID0gbmV3Wm9vbUluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubG5nID0gbG5nO1xuICAgIH1cblxuICAgIGFkZEJ1Y2tldCh0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQsIGJ1Y2tldDogU3ltYm9sQnVja2V0LCBjcm9zc1RpbGVJRHM6IENyb3NzVGlsZUlEcykge1xuICAgICAgICBpZiAodGhpcy5pbmRleGVzW3RpbGVJRC5vdmVyc2NhbGVkWl0gJiZcbiAgICAgICAgICAgIHRoaXMuaW5kZXhlc1t0aWxlSUQub3ZlcnNjYWxlZFpdW3RpbGVJRC5rZXldKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pbmRleGVzW3RpbGVJRC5vdmVyc2NhbGVkWl1bdGlsZUlELmtleV0uYnVja2V0SW5zdGFuY2VJZCA9PT1cbiAgICAgICAgICAgICAgICBidWNrZXQuYnVja2V0SW5zdGFuY2VJZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gV2UncmUgcmVwbGFjaW5nIHRoaXMgYnVja2V0IHdpdGggYW4gdXBkYXRlZCB2ZXJzaW9uXG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBvbGQgYnVja2V0J3MgXCJ1c2VkIGNyb3NzVGlsZUlEc1wiIG5vdyBzbyB0aGF0XG4gICAgICAgICAgICAgICAgLy8gdGhlIG5ldyBidWNrZXQgY2FuIGNsYWltIHRoZW0uXG4gICAgICAgICAgICAgICAgLy8gVGhlIG9sZCBpbmRleCBlbnRyaWVzIHRoZW1zZWx2ZXMgc3RpY2sgYXJvdW5kIHVudGlsXG4gICAgICAgICAgICAgICAgLy8gJ3JlbW92ZVN0YWxlQnVja2V0cycgaXMgY2FsbGVkLlxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlQnVja2V0Q3Jvc3NUaWxlSURzKHRpbGVJRC5vdmVyc2NhbGVkWixcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleGVzW3RpbGVJRC5vdmVyc2NhbGVkWl1bdGlsZUlELmtleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWNrZXQuc3ltYm9sSW5zdGFuY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzeW1ib2xJbnN0YW5jZSA9IGJ1Y2tldC5zeW1ib2xJbnN0YW5jZXMuZ2V0KGkpO1xuICAgICAgICAgICAgc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSUQgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnVzZWRDcm9zc1RpbGVJRHNbdGlsZUlELm92ZXJzY2FsZWRaXSkge1xuICAgICAgICAgICAgdGhpcy51c2VkQ3Jvc3NUaWxlSURzW3RpbGVJRC5vdmVyc2NhbGVkWl0gPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB6b29tQ3Jvc3NUaWxlSURzID0gdGhpcy51c2VkQ3Jvc3NUaWxlSURzW3RpbGVJRC5vdmVyc2NhbGVkWl07XG5cbiAgICAgICAgZm9yIChjb25zdCB6b29tIGluIHRoaXMuaW5kZXhlcykge1xuICAgICAgICAgICAgY29uc3Qgem9vbUluZGV4ZXMgPSB0aGlzLmluZGV4ZXNbem9vbV07XG4gICAgICAgICAgICBpZiAoTnVtYmVyKHpvb20pID4gdGlsZUlELm92ZXJzY2FsZWRaKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpZCBpbiB6b29tSW5kZXhlcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEluZGV4ID0gem9vbUluZGV4ZXNbaWRdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRJbmRleC50aWxlSUQuaXNDaGlsZE9mKHRpbGVJRCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkSW5kZXguZmluZE1hdGNoZXMoYnVja2V0LnN5bWJvbEluc3RhbmNlcywgdGlsZUlELCB6b29tQ3Jvc3NUaWxlSURzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50Q29vcmQgPSB0aWxlSUQuc2NhbGVkVG8oTnVtYmVyKHpvb20pKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJbmRleCA9IHpvb21JbmRleGVzW3BhcmVudENvb3JkLmtleV07XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudEluZGV4LmZpbmRNYXRjaGVzKGJ1Y2tldC5zeW1ib2xJbnN0YW5jZXMsIHRpbGVJRCwgem9vbUNyb3NzVGlsZUlEcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWNrZXQuc3ltYm9sSW5zdGFuY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzeW1ib2xJbnN0YW5jZSA9IGJ1Y2tldC5zeW1ib2xJbnN0YW5jZXMuZ2V0KGkpO1xuICAgICAgICAgICAgaWYgKCFzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRCkge1xuICAgICAgICAgICAgICAgIC8vIHN5bWJvbCBkaWQgbm90IG1hdGNoIGFueSBrbm93biBzeW1ib2wsIGFzc2lnbiBhIG5ldyBpZFxuICAgICAgICAgICAgICAgIHN5bWJvbEluc3RhbmNlLmNyb3NzVGlsZUlEID0gY3Jvc3NUaWxlSURzLmdlbmVyYXRlKCk7XG4gICAgICAgICAgICAgICAgem9vbUNyb3NzVGlsZUlEc1tzeW1ib2xJbnN0YW5jZS5jcm9zc1RpbGVJRF0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaW5kZXhlc1t0aWxlSUQub3ZlcnNjYWxlZFpdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5kZXhlc1t0aWxlSUQub3ZlcnNjYWxlZFpdID0ge307XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbmRleGVzW3RpbGVJRC5vdmVyc2NhbGVkWl1bdGlsZUlELmtleV0gPSBuZXcgVGlsZUxheWVySW5kZXgodGlsZUlELCBidWNrZXQuc3ltYm9sSW5zdGFuY2VzLCBidWNrZXQuYnVja2V0SW5zdGFuY2VJZCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmVtb3ZlQnVja2V0Q3Jvc3NUaWxlSURzKHpvb206IHN0cmluZyB8IG51bWJlciwgcmVtb3ZlZEJ1Y2tldDogVGlsZUxheWVySW5kZXgpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcmVtb3ZlZEJ1Y2tldC5pbmRleGVkU3ltYm9sSW5zdGFuY2VzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHN5bWJvbEluc3RhbmNlIG9mIHJlbW92ZWRCdWNrZXQuaW5kZXhlZFN5bWJvbEluc3RhbmNlc1soa2V5OiBhbnkpXSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnVzZWRDcm9zc1RpbGVJRHNbem9vbV1bc3ltYm9sSW5zdGFuY2UuY3Jvc3NUaWxlSURdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVtb3ZlU3RhbGVCdWNrZXRzKGN1cnJlbnRJRHM6IHsgW3N0cmluZyB8IG51bWJlcl06IGJvb2xlYW4gfSkge1xuICAgICAgICBsZXQgdGlsZXNDaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgeiBpbiB0aGlzLmluZGV4ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHpvb21JbmRleGVzID0gdGhpcy5pbmRleGVzW3pdO1xuICAgICAgICAgICAgZm9yIChjb25zdCB0aWxlS2V5IGluIHpvb21JbmRleGVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50SURzW3pvb21JbmRleGVzW3RpbGVLZXldLmJ1Y2tldEluc3RhbmNlSWRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlQnVja2V0Q3Jvc3NUaWxlSURzKHosIHpvb21JbmRleGVzW3RpbGVLZXldKTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHpvb21JbmRleGVzW3RpbGVLZXldO1xuICAgICAgICAgICAgICAgICAgICB0aWxlc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGlsZXNDaGFuZ2VkO1xuICAgIH1cbn1cblxuY2xhc3MgQ3Jvc3NUaWxlU3ltYm9sSW5kZXgge1xuICAgIGxheWVySW5kZXhlczoge1tsYXllcklkOiBzdHJpbmddOiBDcm9zc1RpbGVTeW1ib2xMYXllckluZGV4fTtcbiAgICBjcm9zc1RpbGVJRHM6IENyb3NzVGlsZUlEcztcbiAgICBtYXhCdWNrZXRJbnN0YW5jZUlkOiBudW1iZXI7XG4gICAgYnVja2V0c0luQ3VycmVudFBsYWNlbWVudDoge1tfOiBudW1iZXJdOiBib29sZWFufTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmxheWVySW5kZXhlcyA9IHt9O1xuICAgICAgICB0aGlzLmNyb3NzVGlsZUlEcyA9IG5ldyBDcm9zc1RpbGVJRHMoKTtcbiAgICAgICAgdGhpcy5tYXhCdWNrZXRJbnN0YW5jZUlkID0gMDtcbiAgICAgICAgdGhpcy5idWNrZXRzSW5DdXJyZW50UGxhY2VtZW50ID0ge307XG4gICAgfVxuXG4gICAgYWRkTGF5ZXIoc3R5bGVMYXllcjogU3R5bGVMYXllciwgdGlsZXM6IEFycmF5PFRpbGU+LCBsbmc6IG51bWJlcikge1xuICAgICAgICBsZXQgbGF5ZXJJbmRleCA9IHRoaXMubGF5ZXJJbmRleGVzW3N0eWxlTGF5ZXIuaWRdO1xuICAgICAgICBpZiAobGF5ZXJJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsYXllckluZGV4ID0gdGhpcy5sYXllckluZGV4ZXNbc3R5bGVMYXllci5pZF0gPSBuZXcgQ3Jvc3NUaWxlU3ltYm9sTGF5ZXJJbmRleCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHN5bWJvbEJ1Y2tldHNDaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRCdWNrZXRJRHMgPSB7fTtcblxuICAgICAgICBsYXllckluZGV4LmhhbmRsZVdyYXBKdW1wKGxuZyk7XG5cbiAgICAgICAgZm9yIChjb25zdCB0aWxlIG9mIHRpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCBzeW1ib2xCdWNrZXQgPSAoKHRpbGUuZ2V0QnVja2V0KHN0eWxlTGF5ZXIpOiBhbnkpOiBTeW1ib2xCdWNrZXQpO1xuICAgICAgICAgICAgaWYgKCFzeW1ib2xCdWNrZXQgfHwgc3R5bGVMYXllci5pZCAhPT0gc3ltYm9sQnVja2V0LmxheWVySWRzWzBdKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBpZiAoIXN5bWJvbEJ1Y2tldC5idWNrZXRJbnN0YW5jZUlkKSB7XG4gICAgICAgICAgICAgICAgc3ltYm9sQnVja2V0LmJ1Y2tldEluc3RhbmNlSWQgPSArK3RoaXMubWF4QnVja2V0SW5zdGFuY2VJZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGxheWVySW5kZXguYWRkQnVja2V0KHRpbGUudGlsZUlELCBzeW1ib2xCdWNrZXQsIHRoaXMuY3Jvc3NUaWxlSURzKSkge1xuICAgICAgICAgICAgICAgIHN5bWJvbEJ1Y2tldHNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnJlbnRCdWNrZXRJRHNbc3ltYm9sQnVja2V0LmJ1Y2tldEluc3RhbmNlSWRdID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsYXllckluZGV4LnJlbW92ZVN0YWxlQnVja2V0cyhjdXJyZW50QnVja2V0SURzKSkge1xuICAgICAgICAgICAgc3ltYm9sQnVja2V0c0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN5bWJvbEJ1Y2tldHNDaGFuZ2VkO1xuICAgIH1cblxuICAgIHBydW5lVW51c2VkTGF5ZXJzKHVzZWRMYXllcnM6IEFycmF5PHN0cmluZz4pIHtcbiAgICAgICAgY29uc3QgdXNlZExheWVyTWFwID0ge307XG4gICAgICAgIHVzZWRMYXllcnMuZm9yRWFjaCgodXNlZExheWVyKSA9PiB7XG4gICAgICAgICAgICB1c2VkTGF5ZXJNYXBbdXNlZExheWVyXSA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICBmb3IgKGNvbnN0IGxheWVySWQgaW4gdGhpcy5sYXllckluZGV4ZXMpIHtcbiAgICAgICAgICAgIGlmICghdXNlZExheWVyTWFwW2xheWVySWRdKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMubGF5ZXJJbmRleGVzW2xheWVySWRdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDcm9zc1RpbGVTeW1ib2xJbmRleDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IHtFdmVudCwgRXJyb3JFdmVudCwgRXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCBTdHlsZUxheWVyIGZyb20gJy4vc3R5bGVfbGF5ZXInO1xuaW1wb3J0IGNyZWF0ZVN0eWxlTGF5ZXIgZnJvbSAnLi9jcmVhdGVfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IGxvYWRTcHJpdGUgZnJvbSAnLi9sb2FkX3Nwcml0ZSc7XG5pbXBvcnQgSW1hZ2VNYW5hZ2VyIGZyb20gJy4uL3JlbmRlci9pbWFnZV9tYW5hZ2VyJztcbmltcG9ydCBHbHlwaE1hbmFnZXIgZnJvbSAnLi4vcmVuZGVyL2dseXBoX21hbmFnZXInO1xuaW1wb3J0IExpZ2h0IGZyb20gJy4vbGlnaHQnO1xuaW1wb3J0IExpbmVBdGxhcyBmcm9tICcuLi9yZW5kZXIvbGluZV9hdGxhcyc7XG5pbXBvcnQge3BpY2ssIGNsb25lLCBleHRlbmQsIGRlZXBFcXVhbCwgZmlsdGVyT2JqZWN0LCBtYXBPYmplY3R9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQge2dldEpTT04sIGdldFJlZmVycmVyLCBtYWtlUmVxdWVzdCwgUmVzb3VyY2VUeXBlfSBmcm9tICcuLi91dGlsL2FqYXgnO1xuaW1wb3J0IHtpc01hcGJveFVSTH0gZnJvbSAnLi4vdXRpbC9tYXBib3gnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vdXRpbC9icm93c2VyJztcbmltcG9ydCBEaXNwYXRjaGVyIGZyb20gJy4uL3V0aWwvZGlzcGF0Y2hlcic7XG5pbXBvcnQge3ZhbGlkYXRlU3R5bGUsIGVtaXRWYWxpZGF0aW9uRXJyb3JzIGFzIF9lbWl0VmFsaWRhdGlvbkVycm9yc30gZnJvbSAnLi92YWxpZGF0ZV9zdHlsZSc7XG5pbXBvcnQge1xuICAgIGdldFR5cGUgYXMgZ2V0U291cmNlVHlwZSxcbiAgICBzZXRUeXBlIGFzIHNldFNvdXJjZVR5cGUsXG4gICAgdHlwZSBTb3VyY2VDbGFzc1xufSBmcm9tICcuLi9zb3VyY2Uvc291cmNlJztcbmltcG9ydCB7cXVlcnlSZW5kZXJlZEZlYXR1cmVzLCBxdWVyeVJlbmRlcmVkU3ltYm9scywgcXVlcnlTb3VyY2VGZWF0dXJlc30gZnJvbSAnLi4vc291cmNlL3F1ZXJ5X2ZlYXR1cmVzJztcbmltcG9ydCBTb3VyY2VDYWNoZSBmcm9tICcuLi9zb3VyY2Uvc291cmNlX2NhY2hlJztcbmltcG9ydCBHZW9KU09OU291cmNlIGZyb20gJy4uL3NvdXJjZS9nZW9qc29uX3NvdXJjZSc7XG5pbXBvcnQgc3R5bGVTcGVjIGZyb20gJy4uL3N0eWxlLXNwZWMvcmVmZXJlbmNlL2xhdGVzdCc7XG5pbXBvcnQgZ2V0V29ya2VyUG9vbCBmcm9tICcuLi91dGlsL2dsb2JhbF93b3JrZXJfcG9vbCc7XG5pbXBvcnQgZGVyZWYgZnJvbSAnLi4vc3R5bGUtc3BlYy9kZXJlZic7XG5pbXBvcnQgZW1wdHlTdHlsZSBmcm9tICcuLi9zdHlsZS1zcGVjL2VtcHR5JztcbmltcG9ydCBkaWZmU3R5bGVzLCB7b3BlcmF0aW9ucyBhcyBkaWZmT3BlcmF0aW9uc30gZnJvbSAnLi4vc3R5bGUtc3BlYy9kaWZmJztcbmltcG9ydCB7XG4gICAgcmVnaXN0ZXJGb3JQbHVnaW5TdGF0ZUNoYW5nZSxcbiAgICBldmVudGVkIGFzIHJ0bFRleHRQbHVnaW5FdmVudGVkLFxuICAgIHRyaWdnZXJQbHVnaW5Db21wbGV0aW9uRXZlbnRcbn0gZnJvbSAnLi4vc291cmNlL3J0bF90ZXh0X3BsdWdpbic7XG5pbXBvcnQgUGF1c2VhYmxlUGxhY2VtZW50IGZyb20gJy4vcGF1c2VhYmxlX3BsYWNlbWVudCc7XG5pbXBvcnQgWm9vbUhpc3RvcnkgZnJvbSAnLi96b29tX2hpc3RvcnknO1xuaW1wb3J0IENyb3NzVGlsZVN5bWJvbEluZGV4IGZyb20gJy4uL3N5bWJvbC9jcm9zc190aWxlX3N5bWJvbF9pbmRleCc7XG5pbXBvcnQge3ZhbGlkYXRlQ3VzdG9tU3R5bGVMYXllcn0gZnJvbSAnLi9zdHlsZV9sYXllci9jdXN0b21fc3R5bGVfbGF5ZXInO1xuXG4vLyBXZSdyZSBza2lwcGluZyB2YWxpZGF0aW9uIGVycm9ycyB3aXRoIHRoZSBgc291cmNlLmNhbnZhc2AgaWRlbnRpZmllciBpbiBvcmRlclxuLy8gdG8gY29udGludWUgdG8gYWxsb3cgY2FudmFzIHNvdXJjZXMgdG8gYmUgYWRkZWQgYXQgcnVudGltZS91cGRhdGVkIGluXG4vLyBzbWFydCBzZXRTdHlsZSAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL3B1bGwvNjQyNCk6XG5jb25zdCBlbWl0VmFsaWRhdGlvbkVycm9ycyA9IChldmVudGVkOiBFdmVudGVkLCBlcnJvcnM6ID8kUmVhZE9ubHlBcnJheTx7bWVzc2FnZTogc3RyaW5nLCBpZGVudGlmaWVyPzogc3RyaW5nfT4pID0+XG4gICAgX2VtaXRWYWxpZGF0aW9uRXJyb3JzKGV2ZW50ZWQsIGVycm9ycyAmJiBlcnJvcnMuZmlsdGVyKGVycm9yID0+IGVycm9yLmlkZW50aWZpZXIgIT09ICdzb3VyY2UuY2FudmFzJykpO1xuXG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vdWkvbWFwJztcbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi9nZW8vdHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIHtTdHlsZUltYWdlfSBmcm9tICcuL3N0eWxlX2ltYWdlJztcbmltcG9ydCB0eXBlIHtTdHlsZUdseXBofSBmcm9tICcuL3N0eWxlX2dseXBoJztcbmltcG9ydCB0eXBlIHtDYWxsYmFja30gZnJvbSAnLi4vdHlwZXMvY2FsbGJhY2snO1xuaW1wb3J0IHR5cGUgRXZhbHVhdGlvblBhcmFtZXRlcnMgZnJvbSAnLi9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuaW1wb3J0IHR5cGUge1BsYWNlbWVudH0gZnJvbSAnLi4vc3ltYm9sL3BsYWNlbWVudCc7XG5pbXBvcnQgdHlwZSB7Q2FuY2VsYWJsZX0gZnJvbSAnLi4vdHlwZXMvY2FuY2VsYWJsZSc7XG5pbXBvcnQgdHlwZSB7UmVxdWVzdFBhcmFtZXRlcnMsIFJlc3BvbnNlQ2FsbGJhY2t9IGZyb20gJy4uL3V0aWwvYWpheCc7XG5pbXBvcnQgdHlwZSB7R2VvSlNPTn0gZnJvbSAnQG1hcGJveC9nZW9qc29uLXR5cGVzJztcbmltcG9ydCB0eXBlIHtcbiAgICBMYXllclNwZWNpZmljYXRpb24sXG4gICAgRmlsdGVyU3BlY2lmaWNhdGlvbixcbiAgICBTdHlsZVNwZWNpZmljYXRpb24sXG4gICAgTGlnaHRTcGVjaWZpY2F0aW9uLFxuICAgIFNvdXJjZVNwZWNpZmljYXRpb25cbn0gZnJvbSAnLi4vc3R5bGUtc3BlYy90eXBlcyc7XG5pbXBvcnQgdHlwZSB7Q3VzdG9tTGF5ZXJJbnRlcmZhY2V9IGZyb20gJy4vc3R5bGVfbGF5ZXIvY3VzdG9tX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIHtWYWxpZGF0b3J9IGZyb20gJy4vdmFsaWRhdGVfc3R5bGUnO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uL3NvdXJjZS90aWxlX2lkJztcblxuY29uc3Qgc3VwcG9ydGVkRGlmZk9wZXJhdGlvbnMgPSBwaWNrKGRpZmZPcGVyYXRpb25zLCBbXG4gICAgJ2FkZExheWVyJyxcbiAgICAncmVtb3ZlTGF5ZXInLFxuICAgICdzZXRQYWludFByb3BlcnR5JyxcbiAgICAnc2V0TGF5b3V0UHJvcGVydHknLFxuICAgICdzZXRGaWx0ZXInLFxuICAgICdhZGRTb3VyY2UnLFxuICAgICdyZW1vdmVTb3VyY2UnLFxuICAgICdzZXRMYXllclpvb21SYW5nZScsXG4gICAgJ3NldExpZ2h0JyxcbiAgICAnc2V0VHJhbnNpdGlvbicsXG4gICAgJ3NldEdlb0pTT05Tb3VyY2VEYXRhJ1xuICAgIC8vICdzZXRHbHlwaHMnLFxuICAgIC8vICdzZXRTcHJpdGUnLFxuXSk7XG5cbmNvbnN0IGlnbm9yZWREaWZmT3BlcmF0aW9ucyA9IHBpY2soZGlmZk9wZXJhdGlvbnMsIFtcbiAgICAnc2V0Q2VudGVyJyxcbiAgICAnc2V0Wm9vbScsXG4gICAgJ3NldEJlYXJpbmcnLFxuICAgICdzZXRQaXRjaCdcbl0pO1xuXG5jb25zdCBlbXB0eSA9IGVtcHR5U3R5bGUoKTtcblxuZXhwb3J0IHR5cGUgU3R5bGVPcHRpb25zID0ge1xuICAgIHZhbGlkYXRlPzogYm9vbGVhbixcbiAgICBsb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk/OiBzdHJpbmdcbn07XG5cbmV4cG9ydCB0eXBlIFN0eWxlU2V0dGVyT3B0aW9ucyA9IHtcbiAgICB2YWxpZGF0ZT86IGJvb2xlYW5cbn07XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFN0eWxlIGV4dGVuZHMgRXZlbnRlZCB7XG4gICAgbWFwOiBNYXA7XG4gICAgc3R5bGVzaGVldDogU3R5bGVTcGVjaWZpY2F0aW9uO1xuICAgIGRpc3BhdGNoZXI6IERpc3BhdGNoZXI7XG4gICAgaW1hZ2VNYW5hZ2VyOiBJbWFnZU1hbmFnZXI7XG4gICAgZ2x5cGhNYW5hZ2VyOiBHbHlwaE1hbmFnZXI7XG4gICAgbGluZUF0bGFzOiBMaW5lQXRsYXM7XG4gICAgbGlnaHQ6IExpZ2h0O1xuXG4gICAgX3JlcXVlc3Q6ID9DYW5jZWxhYmxlO1xuICAgIF9zcHJpdGVSZXF1ZXN0OiA/Q2FuY2VsYWJsZTtcbiAgICBfbGF5ZXJzOiB7W186IHN0cmluZ106IFN0eWxlTGF5ZXJ9O1xuICAgIF9zZXJpYWxpemVkTGF5ZXJzOiB7W186IHN0cmluZ106IE9iamVjdH07XG4gICAgX29yZGVyOiBBcnJheTxzdHJpbmc+O1xuICAgIHNvdXJjZUNhY2hlczoge1tfOiBzdHJpbmddOiBTb3VyY2VDYWNoZX07XG4gICAgem9vbUhpc3Rvcnk6IFpvb21IaXN0b3J5O1xuICAgIF9sb2FkZWQ6IGJvb2xlYW47XG4gICAgX3J0bFRleHRQbHVnaW5DYWxsYmFjazogRnVuY3Rpb247XG4gICAgX2NoYW5nZWQ6IGJvb2xlYW47XG4gICAgX3VwZGF0ZWRTb3VyY2VzOiB7W186IHN0cmluZ106ICdjbGVhcicgfCAncmVsb2FkJ307XG4gICAgX3VwZGF0ZWRMYXllcnM6IHtbXzogc3RyaW5nXTogdHJ1ZX07XG4gICAgX3JlbW92ZWRMYXllcnM6IHtbXzogc3RyaW5nXTogU3R5bGVMYXllcn07XG4gICAgX2NoYW5nZWRJbWFnZXM6IHtbXzogc3RyaW5nXTogdHJ1ZX07XG4gICAgX3VwZGF0ZWRQYWludFByb3BzOiB7W2xheWVyOiBzdHJpbmddOiB0cnVlfTtcbiAgICBfbGF5ZXJPcmRlckNoYW5nZWQ6IGJvb2xlYW47XG4gICAgX2F2YWlsYWJsZUltYWdlczogQXJyYXk8c3RyaW5nPjtcblxuICAgIGNyb3NzVGlsZVN5bWJvbEluZGV4OiBDcm9zc1RpbGVTeW1ib2xJbmRleDtcbiAgICBwYXVzZWFibGVQbGFjZW1lbnQ6IFBhdXNlYWJsZVBsYWNlbWVudDtcbiAgICBwbGFjZW1lbnQ6IFBsYWNlbWVudDtcbiAgICB6OiBudW1iZXI7XG5cbiAgICAvLyBleHBvc2VkIHRvIGFsbG93IHN0dWJiaW5nIGJ5IHVuaXQgdGVzdHNcbiAgICBzdGF0aWMgZ2V0U291cmNlVHlwZTogdHlwZW9mIGdldFNvdXJjZVR5cGU7XG4gICAgc3RhdGljIHNldFNvdXJjZVR5cGU6IHR5cGVvZiBzZXRTb3VyY2VUeXBlO1xuICAgIHN0YXRpYyByZWdpc3RlckZvclBsdWdpblN0YXRlQ2hhbmdlOiB0eXBlb2YgcmVnaXN0ZXJGb3JQbHVnaW5TdGF0ZUNoYW5nZTtcblxuICAgIGNvbnN0cnVjdG9yKG1hcDogTWFwLCBvcHRpb25zOiBTdHlsZU9wdGlvbnMgPSB7fSkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIHRoaXMubWFwID0gbWFwO1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIgPSBuZXcgRGlzcGF0Y2hlcihnZXRXb3JrZXJQb29sKCksIHRoaXMpO1xuICAgICAgICB0aGlzLmltYWdlTWFuYWdlciA9IG5ldyBJbWFnZU1hbmFnZXIoKTtcbiAgICAgICAgdGhpcy5pbWFnZU1hbmFnZXIuc2V0RXZlbnRlZFBhcmVudCh0aGlzKTtcbiAgICAgICAgdGhpcy5nbHlwaE1hbmFnZXIgPSBuZXcgR2x5cGhNYW5hZ2VyKG1hcC5fcmVxdWVzdE1hbmFnZXIsIG9wdGlvbnMubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5KTtcbiAgICAgICAgdGhpcy5saW5lQXRsYXMgPSBuZXcgTGluZUF0bGFzKDI1NiwgNTEyKTtcbiAgICAgICAgdGhpcy5jcm9zc1RpbGVTeW1ib2xJbmRleCA9IG5ldyBDcm9zc1RpbGVTeW1ib2xJbmRleCgpO1xuXG4gICAgICAgIHRoaXMuX2xheWVycyA9IHt9O1xuICAgICAgICB0aGlzLl9zZXJpYWxpemVkTGF5ZXJzID0ge307XG4gICAgICAgIHRoaXMuX29yZGVyICA9IFtdO1xuICAgICAgICB0aGlzLnNvdXJjZUNhY2hlcyA9IHt9O1xuICAgICAgICB0aGlzLnpvb21IaXN0b3J5ID0gbmV3IFpvb21IaXN0b3J5KCk7XG4gICAgICAgIHRoaXMuX2xvYWRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9hdmFpbGFibGVJbWFnZXMgPSBbXTtcblxuICAgICAgICB0aGlzLl9yZXNldFVwZGF0ZXMoKTtcblxuICAgICAgICB0aGlzLmRpc3BhdGNoZXIuYnJvYWRjYXN0KCdzZXRSZWZlcnJlcicsIGdldFJlZmVycmVyKCkpO1xuXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICB0aGlzLl9ydGxUZXh0UGx1Z2luQ2FsbGJhY2sgPSBTdHlsZS5yZWdpc3RlckZvclBsdWdpblN0YXRlQ2hhbmdlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgcGx1Z2luU3RhdHVzOiBldmVudC5wbHVnaW5TdGF0dXMsXG4gICAgICAgICAgICAgICAgcGx1Z2luVVJMOiBldmVudC5wbHVnaW5VUkxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBzZWxmLmRpc3BhdGNoZXIuYnJvYWRjYXN0KCdzeW5jUlRMUGx1Z2luU3RhdGUnLCBzdGF0ZSwgKGVyciwgcmVzdWx0cykgPT4ge1xuICAgICAgICAgICAgICAgIHRyaWdnZXJQbHVnaW5Db21wbGV0aW9uRXZlbnQoZXJyKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0cykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhbGxDb21wbGV0ZSA9IHJlc3VsdHMuZXZlcnkoKGVsZW0pID0+IGVsZW0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWxsQ29tcGxldGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaWQgaW4gc2VsZi5zb3VyY2VDYWNoZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNvdXJjZUNhY2hlc1tpZF0ucmVsb2FkKCk7IC8vIFNob3VsZCBiZSBhIG5vLW9wIGlmIHRoZSBwbHVnaW4gbG9hZHMgYmVmb3JlIGFueSB0aWxlcyBsb2FkXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm9uKCdkYXRhJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuZGF0YVR5cGUgIT09ICdzb3VyY2UnIHx8IGV2ZW50LnNvdXJjZURhdGFUeXBlICE9PSAnbWV0YWRhdGEnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzb3VyY2VDYWNoZSA9IHRoaXMuc291cmNlQ2FjaGVzW2V2ZW50LnNvdXJjZUlkXTtcbiAgICAgICAgICAgIGlmICghc291cmNlQ2FjaGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IHNvdXJjZUNhY2hlLmdldFNvdXJjZSgpO1xuICAgICAgICAgICAgaWYgKCFzb3VyY2UgfHwgIXNvdXJjZS52ZWN0b3JMYXllcklkcykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBsYXllcklkIGluIHRoaXMuX2xheWVycykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJzW2xheWVySWRdO1xuICAgICAgICAgICAgICAgIGlmIChsYXllci5zb3VyY2UgPT09IHNvdXJjZS5pZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWxpZGF0ZUxheWVyKGxheWVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGxvYWRVUkwodXJsOiBzdHJpbmcsIG9wdGlvbnM6IHtcbiAgICAgICAgdmFsaWRhdGU/OiBib29sZWFuLFxuICAgICAgICBhY2Nlc3NUb2tlbj86IHN0cmluZ1xuICAgIH0gPSB7fSkge1xuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhbG9hZGluZycsIHtkYXRhVHlwZTogJ3N0eWxlJ30pKTtcblxuICAgICAgICBjb25zdCB2YWxpZGF0ZSA9IHR5cGVvZiBvcHRpb25zLnZhbGlkYXRlID09PSAnYm9vbGVhbicgP1xuICAgICAgICAgICAgb3B0aW9ucy52YWxpZGF0ZSA6ICFpc01hcGJveFVSTCh1cmwpO1xuXG4gICAgICAgIHVybCA9IHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci5ub3JtYWxpemVTdHlsZVVSTCh1cmwsIG9wdGlvbnMuYWNjZXNzVG9rZW4pO1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QodXJsLCBSZXNvdXJjZVR5cGUuU3R5bGUpO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0ID0gZ2V0SlNPTihyZXF1ZXN0LCAoZXJyb3I6ID9FcnJvciwganNvbjogP09iamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fcmVxdWVzdCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQoZXJyb3IpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoanNvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWQoanNvbiwgdmFsaWRhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBsb2FkSlNPTihqc29uOiBTdHlsZVNwZWNpZmljYXRpb24sIG9wdGlvbnM6IFN0eWxlU2V0dGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGFsb2FkaW5nJywge2RhdGFUeXBlOiAnc3R5bGUnfSkpO1xuXG4gICAgICAgIHRoaXMuX3JlcXVlc3QgPSBicm93c2VyLmZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3JlcXVlc3QgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5fbG9hZChqc29uLCBvcHRpb25zLnZhbGlkYXRlICE9PSBmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGxvYWRFbXB0eSgpIHtcbiAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZGF0YWxvYWRpbmcnLCB7ZGF0YVR5cGU6ICdzdHlsZSd9KSk7XG4gICAgICAgIHRoaXMuX2xvYWQoZW1wdHksIGZhbHNlKTtcbiAgICB9XG5cbiAgICBfbG9hZChqc29uOiBTdHlsZVNwZWNpZmljYXRpb24sIHZhbGlkYXRlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh2YWxpZGF0ZSAmJiBlbWl0VmFsaWRhdGlvbkVycm9ycyh0aGlzLCB2YWxpZGF0ZVN0eWxlKGpzb24pKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdHlsZXNoZWV0ID0ganNvbjtcblxuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIGpzb24uc291cmNlcykge1xuICAgICAgICAgICAgdGhpcy5hZGRTb3VyY2UoaWQsIGpzb24uc291cmNlc1tpZF0sIHt2YWxpZGF0ZTogZmFsc2V9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChqc29uLnNwcml0ZSkge1xuICAgICAgICAgICAgdGhpcy5fbG9hZFNwcml0ZShqc29uLnNwcml0ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmltYWdlTWFuYWdlci5zZXRMb2FkZWQodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdseXBoTWFuYWdlci5zZXRVUkwoanNvbi5nbHlwaHMpO1xuXG4gICAgICAgIGNvbnN0IGxheWVycyA9IGRlcmVmKHRoaXMuc3R5bGVzaGVldC5sYXllcnMpO1xuXG4gICAgICAgIHRoaXMuX29yZGVyID0gbGF5ZXJzLm1hcCgobGF5ZXIpID0+IGxheWVyLmlkKTtcblxuICAgICAgICB0aGlzLl9sYXllcnMgPSB7fTtcbiAgICAgICAgdGhpcy5fc2VyaWFsaXplZExheWVycyA9IHt9O1xuICAgICAgICBmb3IgKGxldCBsYXllciBvZiBsYXllcnMpIHtcbiAgICAgICAgICAgIGxheWVyID0gY3JlYXRlU3R5bGVMYXllcihsYXllcik7XG4gICAgICAgICAgICBsYXllci5zZXRFdmVudGVkUGFyZW50KHRoaXMsIHtsYXllcjoge2lkOiBsYXllci5pZH19KTtcbiAgICAgICAgICAgIHRoaXMuX2xheWVyc1tsYXllci5pZF0gPSBsYXllcjtcbiAgICAgICAgICAgIHRoaXMuX3NlcmlhbGl6ZWRMYXllcnNbbGF5ZXIuaWRdID0gbGF5ZXIuc2VyaWFsaXplKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kaXNwYXRjaGVyLmJyb2FkY2FzdCgnc2V0TGF5ZXJzJywgdGhpcy5fc2VyaWFsaXplTGF5ZXJzKHRoaXMuX29yZGVyKSk7XG5cbiAgICAgICAgdGhpcy5saWdodCA9IG5ldyBMaWdodCh0aGlzLnN0eWxlc2hlZXQubGlnaHQpO1xuXG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGEnLCB7ZGF0YVR5cGU6ICdzdHlsZSd9KSk7XG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3N0eWxlLmxvYWQnKSk7XG4gICAgfVxuXG4gICAgX2xvYWRTcHJpdGUodXJsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fc3ByaXRlUmVxdWVzdCA9IGxvYWRTcHJpdGUodXJsLCB0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIsIChlcnIsIGltYWdlcykgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc3ByaXRlUmVxdWVzdCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KGVycikpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpbWFnZXMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGlkIGluIGltYWdlcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmltYWdlTWFuYWdlci5hZGRJbWFnZShpZCwgaW1hZ2VzW2lkXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmltYWdlTWFuYWdlci5zZXRMb2FkZWQodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLl9hdmFpbGFibGVJbWFnZXMgPSB0aGlzLmltYWdlTWFuYWdlci5saXN0SW1hZ2VzKCk7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoZXIuYnJvYWRjYXN0KCdzZXRJbWFnZXMnLCB0aGlzLl9hdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZGF0YScsIHtkYXRhVHlwZTogJ3N0eWxlJ30pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX3ZhbGlkYXRlTGF5ZXIobGF5ZXI6IFN0eWxlTGF5ZXIpIHtcbiAgICAgICAgY29uc3Qgc291cmNlQ2FjaGUgPSB0aGlzLnNvdXJjZUNhY2hlc1tsYXllci5zb3VyY2VdO1xuICAgICAgICBpZiAoIXNvdXJjZUNhY2hlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzb3VyY2VMYXllciA9IGxheWVyLnNvdXJjZUxheWVyO1xuICAgICAgICBpZiAoIXNvdXJjZUxheWVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzb3VyY2UgPSBzb3VyY2VDYWNoZS5nZXRTb3VyY2UoKTtcbiAgICAgICAgaWYgKHNvdXJjZS50eXBlID09PSAnZ2VvanNvbicgfHwgKHNvdXJjZS52ZWN0b3JMYXllcklkcyAmJiBzb3VyY2UudmVjdG9yTGF5ZXJJZHMuaW5kZXhPZihzb3VyY2VMYXllcikgPT09IC0xKSkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgU291cmNlIGxheWVyIFwiJHtzb3VyY2VMYXllcn1cIiBgICtcbiAgICAgICAgICAgICAgICBgZG9lcyBub3QgZXhpc3Qgb24gc291cmNlIFwiJHtzb3VyY2UuaWR9XCIgYCArXG4gICAgICAgICAgICAgICAgYGFzIHNwZWNpZmllZCBieSBzdHlsZSBsYXllciBcIiR7bGF5ZXIuaWR9XCJgXG4gICAgICAgICAgICApKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsb2FkZWQoKSB7XG4gICAgICAgIGlmICghdGhpcy5fbG9hZGVkKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLl91cGRhdGVkU291cmNlcykubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5zb3VyY2VDYWNoZXMpXG4gICAgICAgICAgICBpZiAoIXRoaXMuc291cmNlQ2FjaGVzW2lkXS5sb2FkZWQoKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgaWYgKCF0aGlzLmltYWdlTWFuYWdlci5pc0xvYWRlZCgpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIF9zZXJpYWxpemVMYXllcnMoaWRzOiBBcnJheTxzdHJpbmc+KTogQXJyYXk8T2JqZWN0PiB7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZWRMYXllcnMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBpZCBvZiBpZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJzW2lkXTtcbiAgICAgICAgICAgIGlmIChsYXllci50eXBlICE9PSAnY3VzdG9tJykge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWRMYXllcnMucHVzaChsYXllci5zZXJpYWxpemUoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZWRMYXllcnM7XG4gICAgfVxuXG4gICAgaGFzVHJhbnNpdGlvbnMoKSB7XG4gICAgICAgIGlmICh0aGlzLmxpZ2h0ICYmIHRoaXMubGlnaHQuaGFzVHJhbnNpdGlvbigpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5zb3VyY2VDYWNoZXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZUNhY2hlc1tpZF0uaGFzVHJhbnNpdGlvbigpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuX2xheWVycykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2xheWVyc1tpZF0uaGFzVHJhbnNpdGlvbigpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgX2NoZWNrTG9hZGVkKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2xvYWRlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdHlsZSBpcyBub3QgZG9uZSBsb2FkaW5nJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBcHBseSBxdWV1ZWQgc3R5bGUgdXBkYXRlcyBpbiBhIGJhdGNoIGFuZCByZWNhbGN1bGF0ZSB6b29tLWRlcGVuZGVudCBwYWludCBwcm9wZXJ0aWVzLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdXBkYXRlKHBhcmFtZXRlcnM6IEV2YWx1YXRpb25QYXJhbWV0ZXJzKSB7XG4gICAgICAgIGlmICghdGhpcy5fbG9hZGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy5fY2hhbmdlZDtcbiAgICAgICAgaWYgKHRoaXMuX2NoYW5nZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRJZHMgPSBPYmplY3Qua2V5cyh0aGlzLl91cGRhdGVkTGF5ZXJzKTtcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZWRJZHMgPSBPYmplY3Qua2V5cyh0aGlzLl9yZW1vdmVkTGF5ZXJzKTtcblxuICAgICAgICAgICAgaWYgKHVwZGF0ZWRJZHMubGVuZ3RoIHx8IHJlbW92ZWRJZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlV29ya2VyTGF5ZXJzKHVwZGF0ZWRJZHMsIHJlbW92ZWRJZHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLl91cGRhdGVkU291cmNlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuX3VwZGF0ZWRTb3VyY2VzW2lkXTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoYWN0aW9uID09PSAncmVsb2FkJyB8fCBhY3Rpb24gPT09ICdjbGVhcicpO1xuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24gPT09ICdyZWxvYWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbG9hZFNvdXJjZShpZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICdjbGVhcicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2xlYXJTb3VyY2UoaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlVGlsZXNGb3JDaGFuZ2VkSW1hZ2VzKCk7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5fdXBkYXRlZFBhaW50UHJvcHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sYXllcnNbaWRdLnVwZGF0ZVRyYW5zaXRpb25zKHBhcmFtZXRlcnMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmxpZ2h0LnVwZGF0ZVRyYW5zaXRpb25zKHBhcmFtZXRlcnMpO1xuXG4gICAgICAgICAgICB0aGlzLl9yZXNldFVwZGF0ZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3Qgc291cmNlSWQgaW4gdGhpcy5zb3VyY2VDYWNoZXMpIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVzW3NvdXJjZUlkXS51c2VkID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGxheWVySWQgb2YgdGhpcy5fb3JkZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gdGhpcy5fbGF5ZXJzW2xheWVySWRdO1xuXG4gICAgICAgICAgICBsYXllci5yZWNhbGN1bGF0ZShwYXJhbWV0ZXJzLCB0aGlzLl9hdmFpbGFibGVJbWFnZXMpO1xuICAgICAgICAgICAgaWYgKCFsYXllci5pc0hpZGRlbihwYXJhbWV0ZXJzLnpvb20pICYmIGxheWVyLnNvdXJjZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVzW2xheWVyLnNvdXJjZV0udXNlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxpZ2h0LnJlY2FsY3VsYXRlKHBhcmFtZXRlcnMpO1xuICAgICAgICB0aGlzLnogPSBwYXJhbWV0ZXJzLnpvb207XG5cbiAgICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGEnLCB7ZGF0YVR5cGU6ICdzdHlsZSd9KSk7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIC8qXG4gICAgICogQXBwbHkgYW55IHF1ZXVlZCBpbWFnZSBjaGFuZ2VzLlxuICAgICAqL1xuICAgIF91cGRhdGVUaWxlc0ZvckNoYW5nZWRJbWFnZXMoKSB7XG4gICAgICAgIGNvbnN0IGNoYW5nZWRJbWFnZXMgPSBPYmplY3Qua2V5cyh0aGlzLl9jaGFuZ2VkSW1hZ2VzKTtcbiAgICAgICAgaWYgKGNoYW5nZWRJbWFnZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gdGhpcy5zb3VyY2VDYWNoZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZUNhY2hlc1tuYW1lXS5yZWxvYWRUaWxlc0ZvckRlcGVuZGVuY2llcyhbJ2ljb25zJywgJ3BhdHRlcm5zJ10sIGNoYW5nZWRJbWFnZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fY2hhbmdlZEltYWdlcyA9IHt9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3VwZGF0ZVdvcmtlckxheWVycyh1cGRhdGVkSWRzOiBBcnJheTxzdHJpbmc+LCByZW1vdmVkSWRzOiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlci5icm9hZGNhc3QoJ3VwZGF0ZUxheWVycycsIHtcbiAgICAgICAgICAgIGxheWVyczogdGhpcy5fc2VyaWFsaXplTGF5ZXJzKHVwZGF0ZWRJZHMpLFxuICAgICAgICAgICAgcmVtb3ZlZElkc1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfcmVzZXRVcGRhdGVzKCkge1xuICAgICAgICB0aGlzLl9jaGFuZ2VkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5fdXBkYXRlZExheWVycyA9IHt9O1xuICAgICAgICB0aGlzLl9yZW1vdmVkTGF5ZXJzID0ge307XG5cbiAgICAgICAgdGhpcy5fdXBkYXRlZFNvdXJjZXMgPSB7fTtcbiAgICAgICAgdGhpcy5fdXBkYXRlZFBhaW50UHJvcHMgPSB7fTtcblxuICAgICAgICB0aGlzLl9jaGFuZ2VkSW1hZ2VzID0ge307XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlIHRoaXMgc3R5bGUncyBzdGF0ZSB0byBtYXRjaCB0aGUgZ2l2ZW4gc3R5bGUgSlNPTiwgcGVyZm9ybWluZyBvbmx5XG4gICAgICogdGhlIG5lY2Vzc2FyeSBtdXRhdGlvbnMuXG4gICAgICpcbiAgICAgKiBNYXkgdGhyb3cgYW4gRXJyb3IgKCdVbmltcGxlbWVudGVkOiBNRVRIT0QnKSBpZiB0aGUgbWFwYm94LWdsLXN0eWxlLXNwZWNcbiAgICAgKiBkaWZmIGFsZ29yaXRobSBwcm9kdWNlcyBhbiBvcGVyYXRpb24gdGhhdCBpcyBub3Qgc3VwcG9ydGVkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgYW55IGNoYW5nZXMgd2VyZSBtYWRlOyBmYWxzZSBvdGhlcndpc2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHNldFN0YXRlKG5leHRTdGF0ZTogU3R5bGVTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIHRoaXMuX2NoZWNrTG9hZGVkKCk7XG5cbiAgICAgICAgaWYgKGVtaXRWYWxpZGF0aW9uRXJyb3JzKHRoaXMsIHZhbGlkYXRlU3R5bGUobmV4dFN0YXRlKSkpIHJldHVybiBmYWxzZTtcblxuICAgICAgICBuZXh0U3RhdGUgPSBjbG9uZShuZXh0U3RhdGUpO1xuICAgICAgICBuZXh0U3RhdGUubGF5ZXJzID0gZGVyZWYobmV4dFN0YXRlLmxheWVycyk7XG5cbiAgICAgICAgY29uc3QgY2hhbmdlcyA9IGRpZmZTdHlsZXModGhpcy5zZXJpYWxpemUoKSwgbmV4dFN0YXRlKVxuICAgICAgICAgICAgLmZpbHRlcihvcCA9PiAhKG9wLmNvbW1hbmQgaW4gaWdub3JlZERpZmZPcGVyYXRpb25zKSk7XG5cbiAgICAgICAgaWYgKGNoYW5nZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1bmltcGxlbWVudGVkT3BzID0gY2hhbmdlcy5maWx0ZXIob3AgPT4gIShvcC5jb21tYW5kIGluIHN1cHBvcnRlZERpZmZPcGVyYXRpb25zKSk7XG4gICAgICAgIGlmICh1bmltcGxlbWVudGVkT3BzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDogJHt1bmltcGxlbWVudGVkT3BzLm1hcChvcCA9PiBvcC5jb21tYW5kKS5qb2luKCcsICcpfS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoYW5nZXMuZm9yRWFjaCgob3ApID0+IHtcbiAgICAgICAgICAgIGlmIChvcC5jb21tYW5kID09PSAnc2V0VHJhbnNpdGlvbicpIHtcbiAgICAgICAgICAgICAgICAvLyBgdHJhbnNpdGlvbmAgaXMgYWx3YXlzIHJlYWQgZGlyZWN0bHkgb2ZmIG9mXG4gICAgICAgICAgICAgICAgLy8gYHRoaXMuc3R5bGVzaGVldGAsIHdoaWNoIHdlIHVwZGF0ZSBiZWxvd1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICh0aGlzOiBhbnkpW29wLmNvbW1hbmRdLmFwcGx5KHRoaXMsIG9wLmFyZ3MpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnN0eWxlc2hlZXQgPSBuZXh0U3RhdGU7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgYWRkSW1hZ2UoaWQ6IHN0cmluZywgaW1hZ2U6IFN0eWxlSW1hZ2UpIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0SW1hZ2UoaWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcignQW4gaW1hZ2Ugd2l0aCB0aGlzIG5hbWUgYWxyZWFkeSBleGlzdHMuJykpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmltYWdlTWFuYWdlci5hZGRJbWFnZShpZCwgaW1hZ2UpO1xuICAgICAgICB0aGlzLl9hdmFpbGFibGVJbWFnZXMgPSB0aGlzLmltYWdlTWFuYWdlci5saXN0SW1hZ2VzKCk7XG4gICAgICAgIHRoaXMuX2NoYW5nZWRJbWFnZXNbaWRdID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2RhdGEnLCB7ZGF0YVR5cGU6ICdzdHlsZSd9KSk7XG4gICAgfVxuXG4gICAgdXBkYXRlSW1hZ2UoaWQ6IHN0cmluZywgaW1hZ2U6IFN0eWxlSW1hZ2UpIHtcbiAgICAgICAgdGhpcy5pbWFnZU1hbmFnZXIudXBkYXRlSW1hZ2UoaWQsIGltYWdlKTtcbiAgICB9XG5cbiAgICBnZXRJbWFnZShpZDogc3RyaW5nKTogP1N0eWxlSW1hZ2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5pbWFnZU1hbmFnZXIuZ2V0SW1hZ2UoaWQpO1xuICAgIH1cblxuICAgIHJlbW92ZUltYWdlKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCF0aGlzLmdldEltYWdlKGlkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoJ05vIGltYWdlIHdpdGggdGhpcyBuYW1lIGV4aXN0cy4nKSkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW1hZ2VNYW5hZ2VyLnJlbW92ZUltYWdlKGlkKTtcbiAgICAgICAgdGhpcy5fYXZhaWxhYmxlSW1hZ2VzID0gdGhpcy5pbWFnZU1hbmFnZXIubGlzdEltYWdlcygpO1xuICAgICAgICB0aGlzLl9jaGFuZ2VkSW1hZ2VzW2lkXSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NoYW5nZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdkYXRhJywge2RhdGFUeXBlOiAnc3R5bGUnfSkpO1xuICAgIH1cblxuICAgIGxpc3RJbWFnZXMoKSB7XG4gICAgICAgIHRoaXMuX2NoZWNrTG9hZGVkKCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2VNYW5hZ2VyLmxpc3RJbWFnZXMoKTtcbiAgICB9XG5cbiAgICBhZGRTb3VyY2UoaWQ6IHN0cmluZywgc291cmNlOiBTb3VyY2VTcGVjaWZpY2F0aW9uLCBvcHRpb25zOiBTdHlsZVNldHRlck9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLl9jaGVja0xvYWRlZCgpO1xuXG4gICAgICAgIGlmICh0aGlzLnNvdXJjZUNhY2hlc1tpZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGVyZSBpcyBhbHJlYWR5IGEgc291cmNlIHdpdGggdGhpcyBJRCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzb3VyY2UudHlwZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgdHlwZSBwcm9wZXJ0eSBtdXN0IGJlIGRlZmluZWQsIGJ1dCB0aGUgb25seSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMgd2VyZSBnaXZlbjogJHtPYmplY3Qua2V5cyhzb3VyY2UpLmpvaW4oJywgJyl9LmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnVpbHRJbnMgPSBbJ3ZlY3RvcicsICdyYXN0ZXInLCAnZ2VvanNvbicsICd2aWRlbycsICdpbWFnZSddO1xuICAgICAgICBjb25zdCBzaG91bGRWYWxpZGF0ZSA9IGJ1aWx0SW5zLmluZGV4T2Yoc291cmNlLnR5cGUpID49IDA7XG4gICAgICAgIGlmIChzaG91bGRWYWxpZGF0ZSAmJiB0aGlzLl92YWxpZGF0ZSh2YWxpZGF0ZVN0eWxlLnNvdXJjZSwgYHNvdXJjZXMuJHtpZH1gLCBzb3VyY2UsIG51bGwsIG9wdGlvbnMpKSByZXR1cm47XG5cbiAgICAgICAgaWYgKHRoaXMubWFwICYmIHRoaXMubWFwLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmcpIChzb3VyY2U6IGFueSkuY29sbGVjdFJlc291cmNlVGltaW5nID0gdHJ1ZTtcbiAgICAgICAgY29uc3Qgc291cmNlQ2FjaGUgPSB0aGlzLnNvdXJjZUNhY2hlc1tpZF0gPSBuZXcgU291cmNlQ2FjaGUoaWQsIHNvdXJjZSwgdGhpcy5kaXNwYXRjaGVyKTtcbiAgICAgICAgc291cmNlQ2FjaGUuc3R5bGUgPSB0aGlzO1xuICAgICAgICBzb3VyY2VDYWNoZS5zZXRFdmVudGVkUGFyZW50KHRoaXMsICgpID0+ICh7XG4gICAgICAgICAgICBpc1NvdXJjZUxvYWRlZDogdGhpcy5sb2FkZWQoKSxcbiAgICAgICAgICAgIHNvdXJjZTogc291cmNlQ2FjaGUuc2VyaWFsaXplKCksXG4gICAgICAgICAgICBzb3VyY2VJZDogaWRcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHNvdXJjZUNhY2hlLm9uQWRkKHRoaXMubWFwKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGEgc291cmNlIGZyb20gdGhpcyBzdHlsZXNoZWV0LCBnaXZlbiBpdHMgaWQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIGlkIG9mIHRoZSBzb3VyY2UgdG8gcmVtb3ZlXG4gICAgICogQHRocm93cyB7RXJyb3J9IGlmIG5vIHNvdXJjZSBpcyBmb3VuZCB3aXRoIHRoZSBnaXZlbiBJRFxuICAgICAqIEByZXR1cm5zIHtNYXB9IFRoZSB7QGxpbmsgTWFwfSBvYmplY3QuXG4gICAgICovXG4gICAgcmVtb3ZlU291cmNlKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcblxuICAgICAgICBpZiAodGhpcy5zb3VyY2VDYWNoZXNbaWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlcmUgaXMgbm8gc291cmNlIHdpdGggdGhpcyBJRCcpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJJZCBpbiB0aGlzLl9sYXllcnMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9sYXllcnNbbGF5ZXJJZF0uc291cmNlID09PSBpZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBTb3VyY2UgXCIke2lkfVwiIGNhbm5vdCBiZSByZW1vdmVkIHdoaWxlIGxheWVyIFwiJHtsYXllcklkfVwiIGlzIHVzaW5nIGl0LmApKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzb3VyY2VDYWNoZSA9IHRoaXMuc291cmNlQ2FjaGVzW2lkXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuc291cmNlQ2FjaGVzW2lkXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3VwZGF0ZWRTb3VyY2VzW2lkXTtcbiAgICAgICAgc291cmNlQ2FjaGUuZmlyZShuZXcgRXZlbnQoJ2RhdGEnLCB7c291cmNlRGF0YVR5cGU6ICdtZXRhZGF0YScsIGRhdGFUeXBlOidzb3VyY2UnLCBzb3VyY2VJZDogaWR9KSk7XG4gICAgICAgIHNvdXJjZUNhY2hlLnNldEV2ZW50ZWRQYXJlbnQobnVsbCk7XG4gICAgICAgIHNvdXJjZUNhY2hlLmNsZWFyVGlsZXMoKTtcblxuICAgICAgICBpZiAoc291cmNlQ2FjaGUub25SZW1vdmUpIHNvdXJjZUNhY2hlLm9uUmVtb3ZlKHRoaXMubWFwKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBTZXQgdGhlIGRhdGEgb2YgYSBHZW9KU09OIHNvdXJjZSwgZ2l2ZW4gaXRzIGlkLlxuICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIGlkIG9mIHRoZSBzb3VyY2VcbiAgICAqIEBwYXJhbSB7R2VvSlNPTnxzdHJpbmd9IGRhdGEgR2VvSlNPTiBzb3VyY2VcbiAgICAqL1xuICAgIHNldEdlb0pTT05Tb3VyY2VEYXRhKGlkOiBzdHJpbmcsIGRhdGE6IEdlb0pTT04gfCBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcblxuICAgICAgICBhc3NlcnQodGhpcy5zb3VyY2VDYWNoZXNbaWRdICE9PSB1bmRlZmluZWQsICdUaGVyZSBpcyBubyBzb3VyY2Ugd2l0aCB0aGlzIElEJyk7XG4gICAgICAgIGNvbnN0IGdlb2pzb25Tb3VyY2U6IEdlb0pTT05Tb3VyY2UgPSAodGhpcy5zb3VyY2VDYWNoZXNbaWRdLmdldFNvdXJjZSgpOiBhbnkpO1xuICAgICAgICBhc3NlcnQoZ2VvanNvblNvdXJjZS50eXBlID09PSAnZ2VvanNvbicpO1xuXG4gICAgICAgIGdlb2pzb25Tb3VyY2Uuc2V0RGF0YShkYXRhKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGEgc291cmNlIGJ5IGlkLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBpZCBvZiB0aGUgZGVzaXJlZCBzb3VyY2VcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBzb3VyY2VcbiAgICAgKi9cbiAgICBnZXRTb3VyY2UoaWQ6IHN0cmluZyk6IE9iamVjdCB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvdXJjZUNhY2hlc1tpZF0gJiYgdGhpcy5zb3VyY2VDYWNoZXNbaWRdLmdldFNvdXJjZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCBhIGxheWVyIHRvIHRoZSBtYXAgc3R5bGUuIFRoZSBsYXllciB3aWxsIGJlIGluc2VydGVkIGJlZm9yZSB0aGUgbGF5ZXIgd2l0aFxuICAgICAqIElEIGBiZWZvcmVgLCBvciBhcHBlbmRlZCBpZiBgYmVmb3JlYCBpcyBvbWl0dGVkLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0IHwgQ3VzdG9tTGF5ZXJJbnRlcmZhY2V9IGxheWVyT2JqZWN0IFRoZSBzdHlsZSBsYXllciB0byBhZGQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtiZWZvcmVdIElEIG9mIGFuIGV4aXN0aW5nIGxheWVyIHRvIGluc2VydCBiZWZvcmVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBTdHlsZSBzZXR0ZXIgb3B0aW9ucy5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBUaGUge0BsaW5rIE1hcH0gb2JqZWN0LlxuICAgICAqL1xuICAgIGFkZExheWVyKGxheWVyT2JqZWN0OiBMYXllclNwZWNpZmljYXRpb24gfCBDdXN0b21MYXllckludGVyZmFjZSwgYmVmb3JlPzogc3RyaW5nLCBvcHRpb25zOiBTdHlsZVNldHRlck9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLl9jaGVja0xvYWRlZCgpO1xuXG4gICAgICAgIGNvbnN0IGlkID0gbGF5ZXJPYmplY3QuaWQ7XG5cbiAgICAgICAgaWYgKHRoaXMuZ2V0TGF5ZXIoaWQpKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBMYXllciB3aXRoIGlkIFwiJHtpZH1cIiBhbHJlYWR5IGV4aXN0cyBvbiB0aGlzIG1hcGApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbGF5ZXI7XG4gICAgICAgIGlmIChsYXllck9iamVjdC50eXBlID09PSAnY3VzdG9tJykge1xuXG4gICAgICAgICAgICBpZiAoZW1pdFZhbGlkYXRpb25FcnJvcnModGhpcywgdmFsaWRhdGVDdXN0b21TdHlsZUxheWVyKGxheWVyT2JqZWN0KSkpIHJldHVybjtcblxuICAgICAgICAgICAgbGF5ZXIgPSBjcmVhdGVTdHlsZUxheWVyKGxheWVyT2JqZWN0KTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBsYXllck9iamVjdC5zb3VyY2UgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRTb3VyY2UoaWQsIGxheWVyT2JqZWN0LnNvdXJjZSk7XG4gICAgICAgICAgICAgICAgbGF5ZXJPYmplY3QgPSBjbG9uZShsYXllck9iamVjdCk7XG4gICAgICAgICAgICAgICAgbGF5ZXJPYmplY3QgPSAoZXh0ZW5kKGxheWVyT2JqZWN0LCB7c291cmNlOiBpZH0pOiBhbnkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyB0aGlzIGxheWVyIGlzIG5vdCBpbiB0aGUgc3R5bGUubGF5ZXJzIGFycmF5LCBzbyB3ZSBwYXNzIGFuIGltcG9zc2libGUgYXJyYXkgaW5kZXhcbiAgICAgICAgICAgIGlmICh0aGlzLl92YWxpZGF0ZSh2YWxpZGF0ZVN0eWxlLmxheWVyLFxuICAgICAgICAgICAgICAgIGBsYXllcnMuJHtpZH1gLCBsYXllck9iamVjdCwge2FycmF5SW5kZXg6IC0xfSwgb3B0aW9ucykpIHJldHVybjtcblxuICAgICAgICAgICAgbGF5ZXIgPSBjcmVhdGVTdHlsZUxheWVyKGxheWVyT2JqZWN0KTtcbiAgICAgICAgICAgIHRoaXMuX3ZhbGlkYXRlTGF5ZXIobGF5ZXIpO1xuXG4gICAgICAgICAgICBsYXllci5zZXRFdmVudGVkUGFyZW50KHRoaXMsIHtsYXllcjoge2lkfX0pO1xuICAgICAgICAgICAgdGhpcy5fc2VyaWFsaXplZExheWVyc1tsYXllci5pZF0gPSBsYXllci5zZXJpYWxpemUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluZGV4ID0gYmVmb3JlID8gdGhpcy5fb3JkZXIuaW5kZXhPZihiZWZvcmUpIDogdGhpcy5fb3JkZXIubGVuZ3RoO1xuICAgICAgICBpZiAoYmVmb3JlICYmIGluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgTGF5ZXIgd2l0aCBpZCBcIiR7YmVmb3JlfVwiIGRvZXMgbm90IGV4aXN0IG9uIHRoaXMgbWFwLmApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9vcmRlci5zcGxpY2UoaW5kZXgsIDAsIGlkKTtcbiAgICAgICAgdGhpcy5fbGF5ZXJPcmRlckNoYW5nZWQgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuX2xheWVyc1tpZF0gPSBsYXllcjtcblxuICAgICAgICBpZiAodGhpcy5fcmVtb3ZlZExheWVyc1tpZF0gJiYgbGF5ZXIuc291cmNlICYmIGxheWVyLnR5cGUgIT09ICdjdXN0b20nKSB7XG4gICAgICAgICAgICAvLyBJZiwgaW4gdGhlIGN1cnJlbnQgYmF0Y2gsIHdlIGhhdmUgYWxyZWFkeSByZW1vdmVkIHRoaXMgbGF5ZXJcbiAgICAgICAgICAgIC8vIGFuZCB3ZSBhcmUgbm93IHJlLWFkZGluZyBpdCB3aXRoIGEgZGlmZmVyZW50IGB0eXBlYCwgdGhlbiB3ZVxuICAgICAgICAgICAgLy8gbmVlZCB0byBjbGVhciAocmF0aGVyIHRoYW4ganVzdCByZWxvYWQpIHRoZSB1bmRlcnlsaW5nIHNvdXJjZSdzXG4gICAgICAgICAgICAvLyB0aWxlcy4gIE90aGVyd2lzZSwgdGlsZXMgbWFya2VkICdyZWxvYWRpbmcnIHdpbGwgaGF2ZSBidWNrZXRzIC9cbiAgICAgICAgICAgIC8vIGJ1ZmZlcnMgdGhhdCBhcmUgc2V0IHVwIGZvciB0aGUgX3ByZXZpb3VzXyB2ZXJzaW9uIG9mIHRoaXNcbiAgICAgICAgICAgIC8vIGxheWVyLCBjYXVzaW5nLCBlLmcuOlxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzM2MzNcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZWQgPSB0aGlzLl9yZW1vdmVkTGF5ZXJzW2lkXTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9yZW1vdmVkTGF5ZXJzW2lkXTtcbiAgICAgICAgICAgIGlmIChyZW1vdmVkLnR5cGUgIT09IGxheWVyLnR5cGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVkU291cmNlc1tsYXllci5zb3VyY2VdID0gJ2NsZWFyJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlZFNvdXJjZXNbbGF5ZXIuc291cmNlXSA9ICdyZWxvYWQnO1xuICAgICAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVzW2xheWVyLnNvdXJjZV0ucGF1c2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl91cGRhdGVMYXllcihsYXllcik7XG5cbiAgICAgICAgaWYgKGxheWVyLm9uQWRkKSB7XG4gICAgICAgICAgICBsYXllci5vbkFkZCh0aGlzLm1hcCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNb3ZlcyBhIGxheWVyIHRvIGEgZGlmZmVyZW50IHotcG9zaXRpb24uIFRoZSBsYXllciB3aWxsIGJlIGluc2VydGVkIGJlZm9yZSB0aGUgbGF5ZXIgd2l0aFxuICAgICAqIElEIGBiZWZvcmVgLCBvciBhcHBlbmRlZCBpZiBgYmVmb3JlYCBpcyBvbWl0dGVkLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCAgSUQgb2YgdGhlIGxheWVyIHRvIG1vdmVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2JlZm9yZV0gSUQgb2YgYW4gZXhpc3RpbmcgbGF5ZXIgdG8gaW5zZXJ0IGJlZm9yZVxuICAgICAqL1xuICAgIG1vdmVMYXllcihpZDogc3RyaW5nLCBiZWZvcmU/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlZCA9IHRydWU7XG5cbiAgICAgICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllcnNbaWRdO1xuICAgICAgICBpZiAoIWxheWVyKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBUaGUgbGF5ZXIgJyR7aWR9JyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSBtb3ZlZC5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlkID09PSBiZWZvcmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fb3JkZXIuaW5kZXhPZihpZCk7XG4gICAgICAgIHRoaXMuX29yZGVyLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICAgICAgY29uc3QgbmV3SW5kZXggPSBiZWZvcmUgPyB0aGlzLl9vcmRlci5pbmRleE9mKGJlZm9yZSkgOiB0aGlzLl9vcmRlci5sZW5ndGg7XG4gICAgICAgIGlmIChiZWZvcmUgJiYgbmV3SW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBMYXllciB3aXRoIGlkIFwiJHtiZWZvcmV9XCIgZG9lcyBub3QgZXhpc3Qgb24gdGhpcyBtYXAuYCkpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9vcmRlci5zcGxpY2UobmV3SW5kZXgsIDAsIGlkKTtcblxuICAgICAgICB0aGlzLl9sYXllck9yZGVyQ2hhbmdlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIHRoZSBsYXllciB3aXRoIHRoZSBnaXZlbiBpZCBmcm9tIHRoZSBzdHlsZS5cbiAgICAgKlxuICAgICAqIElmIG5vIHN1Y2ggbGF5ZXIgZXhpc3RzLCBhbiBgZXJyb3JgIGV2ZW50IGlzIGZpcmVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIGlkIG9mIHRoZSBsYXllciB0byByZW1vdmVcbiAgICAgKiBAZmlyZXMgZXJyb3JcbiAgICAgKi9cbiAgICByZW1vdmVMYXllcihpZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2NoZWNrTG9hZGVkKCk7XG5cbiAgICAgICAgY29uc3QgbGF5ZXIgPSB0aGlzLl9sYXllcnNbaWRdO1xuICAgICAgICBpZiAoIWxheWVyKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBUaGUgbGF5ZXIgJyR7aWR9JyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSByZW1vdmVkLmApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsYXllci5zZXRFdmVudGVkUGFyZW50KG51bGwpO1xuXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fb3JkZXIuaW5kZXhPZihpZCk7XG4gICAgICAgIHRoaXMuX29yZGVyLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICAgICAgdGhpcy5fbGF5ZXJPcmRlckNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fcmVtb3ZlZExheWVyc1tpZF0gPSBsYXllcjtcbiAgICAgICAgZGVsZXRlIHRoaXMuX2xheWVyc1tpZF07XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9zZXJpYWxpemVkTGF5ZXJzW2lkXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3VwZGF0ZWRMYXllcnNbaWRdO1xuICAgICAgICBkZWxldGUgdGhpcy5fdXBkYXRlZFBhaW50UHJvcHNbaWRdO1xuXG4gICAgICAgIGlmIChsYXllci5vblJlbW92ZSkge1xuICAgICAgICAgICAgbGF5ZXIub25SZW1vdmUodGhpcy5tYXApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBzdHlsZSBsYXllciBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gYGlkYC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIGlkIG9mIHRoZSBkZXNpcmVkIGxheWVyXG4gICAgICogQHJldHVybnMgez9PYmplY3R9IGEgbGF5ZXIsIGlmIG9uZSB3aXRoIHRoZSBnaXZlbiBgaWRgIGV4aXN0c1xuICAgICAqL1xuICAgIGdldExheWVyKGlkOiBzdHJpbmcpOiBPYmplY3Qge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGF5ZXJzW2lkXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjaGVja3MgaWYgYSBzcGVjaWZpYyBsYXllciBpcyBwcmVzZW50IHdpdGhpbiB0aGUgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBpZCBvZiB0aGUgZGVzaXJlZCBsYXllclxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBhIGJvb2xlYW4gc3BlY2lmeWluZyBpZiB0aGUgZ2l2ZW4gbGF5ZXIgaXMgcHJlc2VudFxuICAgICAqL1xuICAgIGhhc0xheWVyKGlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGlkIGluIHRoaXMuX2xheWVycztcbiAgICB9XG5cbiAgICBzZXRMYXllclpvb21SYW5nZShsYXllcklkOiBzdHJpbmcsIG1pbnpvb206ID9udW1iZXIsIG1heHpvb206ID9udW1iZXIpIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcblxuICAgICAgICBjb25zdCBsYXllciA9IHRoaXMuZ2V0TGF5ZXIobGF5ZXJJZCk7XG4gICAgICAgIGlmICghbGF5ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYFRoZSBsYXllciAnJHtsYXllcklkfScgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgaGF2ZSB6b29tIGV4dGVudC5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxheWVyLm1pbnpvb20gPT09IG1pbnpvb20gJiYgbGF5ZXIubWF4em9vbSA9PT0gbWF4em9vbSkgcmV0dXJuO1xuXG4gICAgICAgIGlmIChtaW56b29tICE9IG51bGwpIHtcbiAgICAgICAgICAgIGxheWVyLm1pbnpvb20gPSBtaW56b29tO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXh6b29tICE9IG51bGwpIHtcbiAgICAgICAgICAgIGxheWVyLm1heHpvb20gPSBtYXh6b29tO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3VwZGF0ZUxheWVyKGxheWVyKTtcbiAgICB9XG5cbiAgICBzZXRGaWx0ZXIobGF5ZXJJZDogc3RyaW5nLCBmaWx0ZXI6ID9GaWx0ZXJTcGVjaWZpY2F0aW9uLCAgb3B0aW9uczogU3R5bGVTZXR0ZXJPcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcblxuICAgICAgICBjb25zdCBsYXllciA9IHRoaXMuZ2V0TGF5ZXIobGF5ZXJJZCk7XG4gICAgICAgIGlmICghbGF5ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYFRoZSBsYXllciAnJHtsYXllcklkfScgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgYmUgZmlsdGVyZWQuYCkpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZWVwRXF1YWwobGF5ZXIuZmlsdGVyLCBmaWx0ZXIpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsdGVyID09PSBudWxsIHx8IGZpbHRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsYXllci5maWx0ZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVMYXllcihsYXllcik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fdmFsaWRhdGUodmFsaWRhdGVTdHlsZS5maWx0ZXIsIGBsYXllcnMuJHtsYXllci5pZH0uZmlsdGVyYCwgZmlsdGVyLCBudWxsLCBvcHRpb25zKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGF5ZXIuZmlsdGVyID0gY2xvbmUoZmlsdGVyKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlTGF5ZXIobGF5ZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBhIGxheWVyJ3MgZmlsdGVyIG9iamVjdFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllciB0aGUgbGF5ZXIgdG8gaW5zcGVjdFxuICAgICAqIEByZXR1cm5zIHsqfSB0aGUgbGF5ZXIncyBmaWx0ZXIsIGlmIGFueVxuICAgICAqL1xuICAgIGdldEZpbHRlcihsYXllcjogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBjbG9uZSh0aGlzLmdldExheWVyKGxheWVyKS5maWx0ZXIpO1xuICAgIH1cblxuICAgIHNldExheW91dFByb3BlcnR5KGxheWVySWQ6IHN0cmluZywgbmFtZTogc3RyaW5nLCB2YWx1ZTogYW55LCAgb3B0aW9uczogU3R5bGVTZXR0ZXJPcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcblxuICAgICAgICBjb25zdCBsYXllciA9IHRoaXMuZ2V0TGF5ZXIobGF5ZXJJZCk7XG4gICAgICAgIGlmICghbGF5ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYFRoZSBsYXllciAnJHtsYXllcklkfScgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgYmUgc3R5bGVkLmApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVlcEVxdWFsKGxheWVyLmdldExheW91dFByb3BlcnR5KG5hbWUpLCB2YWx1ZSkpIHJldHVybjtcblxuICAgICAgICBsYXllci5zZXRMYXlvdXRQcm9wZXJ0eShuYW1lLCB2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUxheWVyKGxheWVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgYSBsYXlvdXQgcHJvcGVydHkncyB2YWx1ZSBmcm9tIGEgZ2l2ZW4gbGF5ZXJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJJZCB0aGUgbGF5ZXIgdG8gaW5zcGVjdFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBsYXlvdXQgcHJvcGVydHlcbiAgICAgKiBAcmV0dXJucyB7Kn0gdGhlIHByb3BlcnR5IHZhbHVlXG4gICAgICovXG4gICAgZ2V0TGF5b3V0UHJvcGVydHkobGF5ZXJJZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgbGF5ZXIgPSB0aGlzLmdldExheWVyKGxheWVySWQpO1xuICAgICAgICBpZiAoIWxheWVyKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBUaGUgbGF5ZXIgJyR7bGF5ZXJJZH0nIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZS5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxheWVyLmdldExheW91dFByb3BlcnR5KG5hbWUpO1xuICAgIH1cblxuICAgIHNldFBhaW50UHJvcGVydHkobGF5ZXJJZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksIG9wdGlvbnM6IFN0eWxlU2V0dGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMuX2NoZWNrTG9hZGVkKCk7XG5cbiAgICAgICAgY29uc3QgbGF5ZXIgPSB0aGlzLmdldExheWVyKGxheWVySWQpO1xuICAgICAgICBpZiAoIWxheWVyKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBUaGUgbGF5ZXIgJyR7bGF5ZXJJZH0nIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGJlIHN0eWxlZC5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlZXBFcXVhbChsYXllci5nZXRQYWludFByb3BlcnR5KG5hbWUpLCB2YWx1ZSkpIHJldHVybjtcblxuICAgICAgICBjb25zdCByZXF1aXJlc1JlbGF5b3V0ID0gbGF5ZXIuc2V0UGFpbnRQcm9wZXJ0eShuYW1lLCB2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICAgIGlmIChyZXF1aXJlc1JlbGF5b3V0KSB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVMYXllcihsYXllcik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fdXBkYXRlZFBhaW50UHJvcHNbbGF5ZXJJZF0gPSB0cnVlO1xuICAgIH1cblxuICAgIGdldFBhaW50UHJvcGVydHkobGF5ZXI6IHN0cmluZywgbmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldExheWVyKGxheWVyKS5nZXRQYWludFByb3BlcnR5KG5hbWUpO1xuICAgIH1cblxuICAgIHNldEZlYXR1cmVTdGF0ZSh0YXJnZXQ6IHsgc291cmNlOiBzdHJpbmc7IHNvdXJjZUxheWVyPzogc3RyaW5nOyBpZDogc3RyaW5nIHwgbnVtYmVyOyB9LCBzdGF0ZTogT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuX2NoZWNrTG9hZGVkKCk7XG4gICAgICAgIGNvbnN0IHNvdXJjZUlkID0gdGFyZ2V0LnNvdXJjZTtcbiAgICAgICAgY29uc3Qgc291cmNlTGF5ZXIgPSB0YXJnZXQuc291cmNlTGF5ZXI7XG4gICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlID0gdGhpcy5zb3VyY2VDYWNoZXNbc291cmNlSWRdO1xuXG4gICAgICAgIGlmIChzb3VyY2VDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBUaGUgc291cmNlICcke3NvdXJjZUlkfScgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlLmApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc291cmNlVHlwZSA9IHNvdXJjZUNhY2hlLmdldFNvdXJjZSgpLnR5cGU7XG4gICAgICAgIGlmIChzb3VyY2VUeXBlID09PSAnZ2VvanNvbicgJiYgc291cmNlTGF5ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYEdlb0pTT04gc291cmNlcyBjYW5ub3QgaGF2ZSBhIHNvdXJjZUxheWVyIHBhcmFtZXRlci5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzb3VyY2VUeXBlID09PSAndmVjdG9yJyAmJiAhc291cmNlTGF5ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYFRoZSBzb3VyY2VMYXllciBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZCBmb3IgdmVjdG9yIHNvdXJjZSB0eXBlcy5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0YXJnZXQuaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgVGhlIGZlYXR1cmUgaWQgcGFyYW1ldGVyIG11c3QgYmUgcHJvdmlkZWQuYCkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNvdXJjZUNhY2hlLnNldEZlYXR1cmVTdGF0ZShzb3VyY2VMYXllciwgdGFyZ2V0LmlkLCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlRmVhdHVyZVN0YXRlKHRhcmdldDogeyBzb3VyY2U6IHN0cmluZzsgc291cmNlTGF5ZXI/OiBzdHJpbmc7IGlkPzogc3RyaW5nIHwgbnVtYmVyOyB9LCBrZXk/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcbiAgICAgICAgY29uc3Qgc291cmNlSWQgPSB0YXJnZXQuc291cmNlO1xuICAgICAgICBjb25zdCBzb3VyY2VDYWNoZSA9IHRoaXMuc291cmNlQ2FjaGVzW3NvdXJjZUlkXTtcblxuICAgICAgICBpZiAoc291cmNlQ2FjaGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgVGhlIHNvdXJjZSAnJHtzb3VyY2VJZH0nIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZS5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc291cmNlVHlwZSA9IHNvdXJjZUNhY2hlLmdldFNvdXJjZSgpLnR5cGU7XG4gICAgICAgIGNvbnN0IHNvdXJjZUxheWVyID0gc291cmNlVHlwZSA9PT0gJ3ZlY3RvcicgPyB0YXJnZXQuc291cmNlTGF5ZXIgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKHNvdXJjZVR5cGUgPT09ICd2ZWN0b3InICYmICFzb3VyY2VMYXllcikge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgVGhlIHNvdXJjZUxheWVyIHBhcmFtZXRlciBtdXN0IGJlIHByb3ZpZGVkIGZvciB2ZWN0b3Igc291cmNlIHR5cGVzLmApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5ICYmICh0eXBlb2YgdGFyZ2V0LmlkICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgdGFyZ2V0LmlkICE9PSAnbnVtYmVyJykpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYEEgZmVhdHVyZSBpZCBpcyByZXF1cmVkIHRvIHJlbW92ZSBpdHMgc3BlY2lmaWMgc3RhdGUgcHJvcGVydHkuYCkpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHNvdXJjZUNhY2hlLnJlbW92ZUZlYXR1cmVTdGF0ZShzb3VyY2VMYXllciwgdGFyZ2V0LmlkLCBrZXkpO1xuICAgIH1cblxuICAgIGdldEZlYXR1cmVTdGF0ZSh0YXJnZXQ6IHsgc291cmNlOiBzdHJpbmc7IHNvdXJjZUxheWVyPzogc3RyaW5nOyBpZDogc3RyaW5nIHwgbnVtYmVyOyB9KSB7XG4gICAgICAgIHRoaXMuX2NoZWNrTG9hZGVkKCk7XG4gICAgICAgIGNvbnN0IHNvdXJjZUlkID0gdGFyZ2V0LnNvdXJjZTtcbiAgICAgICAgY29uc3Qgc291cmNlTGF5ZXIgPSB0YXJnZXQuc291cmNlTGF5ZXI7XG4gICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlID0gdGhpcy5zb3VyY2VDYWNoZXNbc291cmNlSWRdO1xuXG4gICAgICAgIGlmIChzb3VyY2VDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBUaGUgc291cmNlICcke3NvdXJjZUlkfScgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlLmApKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc291cmNlVHlwZSA9IHNvdXJjZUNhY2hlLmdldFNvdXJjZSgpLnR5cGU7XG4gICAgICAgIGlmIChzb3VyY2VUeXBlID09PSAndmVjdG9yJyAmJiAhc291cmNlTGF5ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoYFRoZSBzb3VyY2VMYXllciBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZCBmb3IgdmVjdG9yIHNvdXJjZSB0eXBlcy5gKSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0YXJnZXQuaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgVGhlIGZlYXR1cmUgaWQgcGFyYW1ldGVyIG11c3QgYmUgcHJvdmlkZWQuYCkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzb3VyY2VDYWNoZS5nZXRGZWF0dXJlU3RhdGUoc291cmNlTGF5ZXIsIHRhcmdldC5pZCk7XG4gICAgfVxuXG4gICAgZ2V0VHJhbnNpdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGV4dGVuZCh7ZHVyYXRpb246IDMwMCwgZGVsYXk6IDB9LCB0aGlzLnN0eWxlc2hlZXQgJiYgdGhpcy5zdHlsZXNoZWV0LnRyYW5zaXRpb24pO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlck9iamVjdCh7XG4gICAgICAgICAgICB2ZXJzaW9uOiB0aGlzLnN0eWxlc2hlZXQudmVyc2lvbixcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuc3R5bGVzaGVldC5uYW1lLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHRoaXMuc3R5bGVzaGVldC5tZXRhZGF0YSxcbiAgICAgICAgICAgIGxpZ2h0OiB0aGlzLnN0eWxlc2hlZXQubGlnaHQsXG4gICAgICAgICAgICBjZW50ZXI6IHRoaXMuc3R5bGVzaGVldC5jZW50ZXIsXG4gICAgICAgICAgICB6b29tOiB0aGlzLnN0eWxlc2hlZXQuem9vbSxcbiAgICAgICAgICAgIGJlYXJpbmc6IHRoaXMuc3R5bGVzaGVldC5iZWFyaW5nLFxuICAgICAgICAgICAgcGl0Y2g6IHRoaXMuc3R5bGVzaGVldC5waXRjaCxcbiAgICAgICAgICAgIHNwcml0ZTogdGhpcy5zdHlsZXNoZWV0LnNwcml0ZSxcbiAgICAgICAgICAgIGdseXBoczogdGhpcy5zdHlsZXNoZWV0LmdseXBocyxcbiAgICAgICAgICAgIHRyYW5zaXRpb246IHRoaXMuc3R5bGVzaGVldC50cmFuc2l0aW9uLFxuICAgICAgICAgICAgc291cmNlczogbWFwT2JqZWN0KHRoaXMuc291cmNlQ2FjaGVzLCAoc291cmNlKSA9PiBzb3VyY2Uuc2VyaWFsaXplKCkpLFxuICAgICAgICAgICAgbGF5ZXJzOiB0aGlzLl9zZXJpYWxpemVMYXllcnModGhpcy5fb3JkZXIpXG4gICAgICAgIH0sICh2YWx1ZSkgPT4geyByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZDsgfSk7XG4gICAgfVxuXG4gICAgX3VwZGF0ZUxheWVyKGxheWVyOiBTdHlsZUxheWVyKSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZWRMYXllcnNbbGF5ZXIuaWRdID0gdHJ1ZTtcbiAgICAgICAgaWYgKGxheWVyLnNvdXJjZSAmJiAhdGhpcy5fdXBkYXRlZFNvdXJjZXNbbGF5ZXIuc291cmNlXSAmJlxuICAgICAgICAgICAgLy9Ta2lwIGZvciByYXN0ZXIgbGF5ZXJzIChodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L21hcGJveC1nbC1qcy9pc3N1ZXMvNzg2NSlcbiAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVzW2xheWVyLnNvdXJjZV0uZ2V0U291cmNlKCkudHlwZSAhPT0gJ3Jhc3RlcicpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZWRTb3VyY2VzW2xheWVyLnNvdXJjZV0gPSAncmVsb2FkJztcbiAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVzW2xheWVyLnNvdXJjZV0ucGF1c2UoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBfZmxhdHRlbkFuZFNvcnRSZW5kZXJlZEZlYXR1cmVzKHNvdXJjZVJlc3VsdHM6IEFycmF5PGFueT4pIHtcbiAgICAgICAgLy8gRmVhdHVyZSBvcmRlciBpcyBjb21wbGljYXRlZC5cbiAgICAgICAgLy8gVGhlIG9yZGVyIGJldHdlZW4gZmVhdHVyZXMgaW4gdHdvIDJEIGxheWVycyBpcyBhbHdheXMgZGV0ZXJtaW5lZCBieSBsYXllciBvcmRlci5cbiAgICAgICAgLy8gVGhlIG9yZGVyIGJldHdlZW4gZmVhdHVyZXMgaW4gdHdvIDNEIGxheWVycyBpcyBhbHdheXMgZGV0ZXJtaW5lZCBieSBkZXB0aC5cbiAgICAgICAgLy8gVGhlIG9yZGVyIGJldHdlZW4gYSBmZWF0dXJlIGluIGEgMkQgbGF5ZXIgYW5kIGEgM0QgbGF5ZXIgaXMgdHJpY2t5OlxuICAgICAgICAvLyAgICAgIE1vc3Qgb2Z0ZW4gbGF5ZXIgb3JkZXIgZGV0ZXJtaW5lcyB0aGUgZmVhdHVyZSBvcmRlciBpbiB0aGlzIGNhc2UuIElmXG4gICAgICAgIC8vICAgICAgYSBsaW5lIGxheWVyIGlzIGFib3ZlIGEgZXh0cnVzaW9uIGxheWVyIHRoZSBsaW5lIGZlYXR1cmUgd2lsbCBiZSByZW5kZXJlZFxuICAgICAgICAvLyAgICAgIGFib3ZlIHRoZSBleHRydXNpb24uIElmIHRoZSBsaW5lIGxheWVyIGlzIGJlbG93IHRoZSBleHRydXNpb24gbGF5ZXIsXG4gICAgICAgIC8vICAgICAgaXQgd2lsbCBiZSByZW5kZXJlZCBiZWxvdyBpdC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgICBUaGVyZSBpcyBhIHdlaXJkIGNhc2UgdGhvdWdoLlxuICAgICAgICAvLyAgICAgIFlvdSBoYXZlIGxheWVycyBpbiB0aGlzIG9yZGVyOiBleHRydXNpb25fbGF5ZXJfYSwgbGluZV9sYXllciwgZXh0cnVzaW9uX2xheWVyX2JcbiAgICAgICAgLy8gICAgICBFYWNoIGxheWVyIGhhcyBhIGZlYXR1cmUgdGhhdCBvdmVybGFwcyB0aGUgb3RoZXIgZmVhdHVyZXMuXG4gICAgICAgIC8vICAgICAgVGhlIGZlYXR1cmUgaW4gZXh0cnVzaW9uX2xheWVyX2EgaXMgY2xvc2VyIHRoYW4gdGhlIGZlYXR1cmUgaW4gZXh0cnVzaW9uX2xheWVyX2Igc28gaXQgaXMgcmVuZGVyZWQgYWJvdmUuXG4gICAgICAgIC8vICAgICAgVGhlIGZlYXR1cmUgaW4gbGluZV9sYXllciBpcyByZW5kZXJlZCBhYm92ZSBleHRydXNpb25fbGF5ZXJfYS5cbiAgICAgICAgLy8gICAgICBUaGlzIG1lYW5zIHRoYXQgdGhhdCB0aGUgbGluZV9sYXllciBmZWF0dXJlIGlzIGFib3ZlIHRoZSBleHRydXNpb25fbGF5ZXJfYiBmZWF0dXJlIGRlc3BpdGVcbiAgICAgICAgLy8gICAgICBpdCBiZWluZyBpbiBhbiBlYXJsaWVyIGxheWVyLlxuXG4gICAgICAgIGNvbnN0IGlzTGF5ZXIzRCA9IGxheWVySWQgPT4gdGhpcy5fbGF5ZXJzW2xheWVySWRdLnR5cGUgPT09ICdmaWxsLWV4dHJ1c2lvbic7XG5cbiAgICAgICAgY29uc3QgbGF5ZXJJbmRleCA9IHt9O1xuICAgICAgICBjb25zdCBmZWF0dXJlczNEID0gW107XG4gICAgICAgIGZvciAobGV0IGwgPSB0aGlzLl9vcmRlci5sZW5ndGggLSAxOyBsID49IDA7IGwtLSkge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXJJZCA9IHRoaXMuX29yZGVyW2xdO1xuICAgICAgICAgICAgaWYgKGlzTGF5ZXIzRChsYXllcklkKSkge1xuICAgICAgICAgICAgICAgIGxheWVySW5kZXhbbGF5ZXJJZF0gPSBsO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc291cmNlUmVzdWx0IG9mIHNvdXJjZVJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGF5ZXJGZWF0dXJlcyA9IHNvdXJjZVJlc3VsdFtsYXllcklkXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxheWVyRmVhdHVyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmVhdHVyZVdyYXBwZXIgb2YgbGF5ZXJGZWF0dXJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzM0QucHVzaChmZWF0dXJlV3JhcHBlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmZWF0dXJlczNELnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBiLmludGVyc2VjdGlvblogLSBhLmludGVyc2VjdGlvblo7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGZlYXR1cmVzID0gW107XG4gICAgICAgIGZvciAobGV0IGwgPSB0aGlzLl9vcmRlci5sZW5ndGggLSAxOyBsID49IDA7IGwtLSkge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXJJZCA9IHRoaXMuX29yZGVyW2xdO1xuXG4gICAgICAgICAgICBpZiAoaXNMYXllcjNEKGxheWVySWQpKSB7XG4gICAgICAgICAgICAgICAgLy8gYWRkIGFsbCAzRCBmZWF0dXJlcyB0aGF0IGFyZSBpbiBvciBhYm92ZSB0aGUgY3VycmVudCBsYXllclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBmZWF0dXJlczNELmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvcG1vc3QzRCA9IGZlYXR1cmVzM0RbaV0uZmVhdHVyZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxheWVySW5kZXhbdG9wbW9zdDNELmxheWVyLmlkXSA8IGwpIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcy5wdXNoKHRvcG1vc3QzRCk7XG4gICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzM0QucG9wKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHNvdXJjZVJlc3VsdCBvZiBzb3VyY2VSZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxheWVyRmVhdHVyZXMgPSBzb3VyY2VSZXN1bHRbbGF5ZXJJZF07XG4gICAgICAgICAgICAgICAgICAgIGlmIChsYXllckZlYXR1cmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZlYXR1cmVXcmFwcGVyIG9mIGxheWVyRmVhdHVyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcy5wdXNoKGZlYXR1cmVXcmFwcGVyLmZlYXR1cmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZlYXR1cmVzO1xuICAgIH1cblxuICAgIHF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhxdWVyeUdlb21ldHJ5OiBhbnksIHBhcmFtczogYW55LCB0cmFuc2Zvcm06IFRyYW5zZm9ybSkge1xuICAgICAgICBpZiAocGFyYW1zICYmIHBhcmFtcy5maWx0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbGlkYXRlKHZhbGlkYXRlU3R5bGUuZmlsdGVyLCAncXVlcnlSZW5kZXJlZEZlYXR1cmVzLmZpbHRlcicsIHBhcmFtcy5maWx0ZXIsIG51bGwsIHBhcmFtcyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbmNsdWRlZFNvdXJjZXMgPSB7fTtcbiAgICAgICAgaWYgKHBhcmFtcyAmJiBwYXJhbXMubGF5ZXJzKSB7XG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocGFyYW1zLmxheWVycykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKCdwYXJhbWV0ZXJzLmxheWVycyBtdXN0IGJlIGFuIEFycmF5LicpKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCBsYXllcklkIG9mIHBhcmFtcy5sYXllcnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYXllciA9IHRoaXMuX2xheWVyc1tsYXllcklkXTtcbiAgICAgICAgICAgICAgICBpZiAoIWxheWVyKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgbGF5ZXIgaXMgbm90IGluIHRoZSBzdHlsZS5sYXllcnMgYXJyYXlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihgVGhlIGxheWVyICcke2xheWVySWR9JyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSBxdWVyaWVkIGZvciBmZWF0dXJlcy5gKSkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGluY2x1ZGVkU291cmNlc1tsYXllci5zb3VyY2VdID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNvdXJjZVJlc3VsdHMgPSBbXTtcblxuICAgICAgICBwYXJhbXMuYXZhaWxhYmxlSW1hZ2VzID0gdGhpcy5fYXZhaWxhYmxlSW1hZ2VzO1xuXG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5zb3VyY2VDYWNoZXMpIHtcbiAgICAgICAgICAgIGlmIChwYXJhbXMubGF5ZXJzICYmICFpbmNsdWRlZFNvdXJjZXNbaWRdKSBjb250aW51ZTtcbiAgICAgICAgICAgIHNvdXJjZVJlc3VsdHMucHVzaChcbiAgICAgICAgICAgICAgICBxdWVyeVJlbmRlcmVkRmVhdHVyZXMoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlQ2FjaGVzW2lkXSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGF5ZXJzLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXJpYWxpemVkTGF5ZXJzLFxuICAgICAgICAgICAgICAgICAgICBxdWVyeUdlb21ldHJ5LFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wbGFjZW1lbnQpIHtcbiAgICAgICAgICAgIC8vIElmIGEgcGxhY2VtZW50IGhhcyBydW4sIHF1ZXJ5IGFnYWluc3QgaXRzIENvbGxpc2lvbkluZGV4XG4gICAgICAgICAgICAvLyBmb3Igc3ltYm9sIHJlc3VsdHMsIGFuZCB0cmVhdCBpdCBhcyBhbiBleHRyYSBzb3VyY2UgdG8gbWVyZ2VcbiAgICAgICAgICAgIHNvdXJjZVJlc3VsdHMucHVzaChcbiAgICAgICAgICAgICAgICBxdWVyeVJlbmRlcmVkU3ltYm9scyhcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGF5ZXJzLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXJpYWxpemVkTGF5ZXJzLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZUNhY2hlcyxcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlHZW9tZXRyeSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsYWNlbWVudC5jb2xsaXNpb25JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbGFjZW1lbnQucmV0YWluZWRRdWVyeURhdGEpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZsYXR0ZW5BbmRTb3J0UmVuZGVyZWRGZWF0dXJlcyhzb3VyY2VSZXN1bHRzKTtcbiAgICB9XG5cbiAgICBxdWVyeVNvdXJjZUZlYXR1cmVzKHNvdXJjZUlEOiBzdHJpbmcsIHBhcmFtczogP3tzb3VyY2VMYXllcjogP3N0cmluZywgZmlsdGVyOiA/QXJyYXk8YW55PiwgdmFsaWRhdGU/OiBib29sZWFufSkge1xuICAgICAgICBpZiAocGFyYW1zICYmIHBhcmFtcy5maWx0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbGlkYXRlKHZhbGlkYXRlU3R5bGUuZmlsdGVyLCAncXVlcnlTb3VyY2VGZWF0dXJlcy5maWx0ZXInLCBwYXJhbXMuZmlsdGVyLCBudWxsLCBwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlID0gdGhpcy5zb3VyY2VDYWNoZXNbc291cmNlSURdO1xuICAgICAgICByZXR1cm4gc291cmNlQ2FjaGUgPyBxdWVyeVNvdXJjZUZlYXR1cmVzKHNvdXJjZUNhY2hlLCBwYXJhbXMpIDogW107XG4gICAgfVxuXG4gICAgYWRkU291cmNlVHlwZShuYW1lOiBzdHJpbmcsIFNvdXJjZVR5cGU6IFNvdXJjZUNsYXNzLCBjYWxsYmFjazogQ2FsbGJhY2s8dm9pZD4pIHtcbiAgICAgICAgaWYgKFN0eWxlLmdldFNvdXJjZVR5cGUobmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3IoYEEgc291cmNlIHR5cGUgY2FsbGVkIFwiJHtuYW1lfVwiIGFscmVhZHkgZXhpc3RzLmApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIFN0eWxlLnNldFNvdXJjZVR5cGUobmFtZSwgU291cmNlVHlwZSk7XG5cbiAgICAgICAgaWYgKCFTb3VyY2VUeXBlLndvcmtlclNvdXJjZVVSTCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kaXNwYXRjaGVyLmJyb2FkY2FzdCgnbG9hZFdvcmtlclNvdXJjZScsIHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB1cmw6IFNvdXJjZVR5cGUud29ya2VyU291cmNlVVJMXG4gICAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBnZXRMaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGlnaHQuZ2V0TGlnaHQoKTtcbiAgICB9XG5cbiAgICBzZXRMaWdodChsaWdodE9wdGlvbnM6IExpZ2h0U3BlY2lmaWNhdGlvbiwgb3B0aW9uczogU3R5bGVTZXR0ZXJPcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5fY2hlY2tMb2FkZWQoKTtcblxuICAgICAgICBjb25zdCBsaWdodCA9IHRoaXMubGlnaHQuZ2V0TGlnaHQoKTtcbiAgICAgICAgbGV0IF91cGRhdGUgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbGlnaHRPcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAoIWRlZXBFcXVhbChsaWdodE9wdGlvbnNba2V5XSwgbGlnaHRba2V5XSkpIHtcbiAgICAgICAgICAgICAgICBfdXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIV91cGRhdGUpIHJldHVybjtcblxuICAgICAgICBjb25zdCBwYXJhbWV0ZXJzID0ge1xuICAgICAgICAgICAgbm93OiBicm93c2VyLm5vdygpLFxuICAgICAgICAgICAgdHJhbnNpdGlvbjogZXh0ZW5kKHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwLFxuICAgICAgICAgICAgICAgIGRlbGF5OiAwXG4gICAgICAgICAgICB9LCB0aGlzLnN0eWxlc2hlZXQudHJhbnNpdGlvbilcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmxpZ2h0LnNldExpZ2h0KGxpZ2h0T3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMubGlnaHQudXBkYXRlVHJhbnNpdGlvbnMocGFyYW1ldGVycyk7XG4gICAgfVxuXG4gICAgX3ZhbGlkYXRlKHZhbGlkYXRlOiBWYWxpZGF0b3IsIGtleTogc3RyaW5nLCB2YWx1ZTogYW55LCBwcm9wczogYW55LCBvcHRpb25zOiB7IHZhbGlkYXRlPzogYm9vbGVhbiB9ID0ge30pIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy52YWxpZGF0ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW1pdFZhbGlkYXRpb25FcnJvcnModGhpcywgdmFsaWRhdGUuY2FsbCh2YWxpZGF0ZVN0eWxlLCBleHRlbmQoe1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgc3R5bGU6IHRoaXMuc2VyaWFsaXplKCksXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIHN0eWxlU3BlY1xuICAgICAgICB9LCBwcm9wcykpKTtcbiAgICB9XG5cbiAgICBfcmVtb3ZlKCkge1xuICAgICAgICBpZiAodGhpcy5fcmVxdWVzdCkge1xuICAgICAgICAgICAgdGhpcy5fcmVxdWVzdC5jYW5jZWwoKTtcbiAgICAgICAgICAgIHRoaXMuX3JlcXVlc3QgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9zcHJpdGVSZXF1ZXN0KSB7XG4gICAgICAgICAgICB0aGlzLl9zcHJpdGVSZXF1ZXN0LmNhbmNlbCgpO1xuICAgICAgICAgICAgdGhpcy5fc3ByaXRlUmVxdWVzdCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcnRsVGV4dFBsdWdpbkV2ZW50ZWQub2ZmKCdwbHVnaW5TdGF0ZUNoYW5nZScsIHRoaXMuX3J0bFRleHRQbHVnaW5DYWxsYmFjayk7XG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJJZCBpbiB0aGlzLl9sYXllcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyOiBTdHlsZUxheWVyID0gdGhpcy5fbGF5ZXJzW2xheWVySWRdO1xuICAgICAgICAgICAgbGF5ZXIuc2V0RXZlbnRlZFBhcmVudChudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuc291cmNlQ2FjaGVzKSB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZUNhY2hlc1tpZF0uY2xlYXJUaWxlcygpO1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VDYWNoZXNbaWRdLnNldEV2ZW50ZWRQYXJlbnQobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbWFnZU1hbmFnZXIuc2V0RXZlbnRlZFBhcmVudChudWxsKTtcbiAgICAgICAgdGhpcy5zZXRFdmVudGVkUGFyZW50KG51bGwpO1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIucmVtb3ZlKCk7XG4gICAgfVxuXG4gICAgX2NsZWFyU291cmNlKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zb3VyY2VDYWNoZXNbaWRdLmNsZWFyVGlsZXMoKTtcbiAgICB9XG5cbiAgICBfcmVsb2FkU291cmNlKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zb3VyY2VDYWNoZXNbaWRdLnJlc3VtZSgpO1xuICAgICAgICB0aGlzLnNvdXJjZUNhY2hlc1tpZF0ucmVsb2FkKCk7XG4gICAgfVxuXG4gICAgX3VwZGF0ZVNvdXJjZXModHJhbnNmb3JtOiBUcmFuc2Zvcm0pIHtcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLnNvdXJjZUNhY2hlcykge1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VDYWNoZXNbaWRdLnVwZGF0ZSh0cmFuc2Zvcm0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2dlbmVyYXRlQ29sbGlzaW9uQm94ZXMoKSB7XG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5zb3VyY2VDYWNoZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbG9hZFNvdXJjZShpZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfdXBkYXRlUGxhY2VtZW50KHRyYW5zZm9ybTogVHJhbnNmb3JtLCBzaG93Q29sbGlzaW9uQm94ZXM6IGJvb2xlYW4sIGZhZGVEdXJhdGlvbjogbnVtYmVyLCBjcm9zc1NvdXJjZUNvbGxpc2lvbnM6IGJvb2xlYW4sIGZvcmNlRnVsbFBsYWNlbWVudDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIGxldCBzeW1ib2xCdWNrZXRzQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICBsZXQgcGxhY2VtZW50Q29tbWl0dGVkID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgbGF5ZXJUaWxlcyA9IHt9O1xuXG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJJRCBvZiB0aGlzLl9vcmRlcikge1xuICAgICAgICAgICAgY29uc3Qgc3R5bGVMYXllciA9IHRoaXMuX2xheWVyc1tsYXllcklEXTtcbiAgICAgICAgICAgIGlmIChzdHlsZUxheWVyLnR5cGUgIT09ICdzeW1ib2wnKSBjb250aW51ZTtcblxuICAgICAgICAgICAgaWYgKCFsYXllclRpbGVzW3N0eWxlTGF5ZXIuc291cmNlXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlID0gdGhpcy5zb3VyY2VDYWNoZXNbc3R5bGVMYXllci5zb3VyY2VdO1xuICAgICAgICAgICAgICAgIGxheWVyVGlsZXNbc3R5bGVMYXllci5zb3VyY2VdID0gc291cmNlQ2FjaGUuZ2V0UmVuZGVyYWJsZUlkcyh0cnVlKVxuICAgICAgICAgICAgICAgICAgICAubWFwKChpZCkgPT4gc291cmNlQ2FjaGUuZ2V0VGlsZUJ5SUQoaWQpKVxuICAgICAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gKGIudGlsZUlELm92ZXJzY2FsZWRaIC0gYS50aWxlSUQub3ZlcnNjYWxlZFopIHx8IChhLnRpbGVJRC5pc0xlc3NUaGFuKGIudGlsZUlEKSA/IC0xIDogMSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBsYXllckJ1Y2tldHNDaGFuZ2VkID0gdGhpcy5jcm9zc1RpbGVTeW1ib2xJbmRleC5hZGRMYXllcihzdHlsZUxheWVyLCBsYXllclRpbGVzW3N0eWxlTGF5ZXIuc291cmNlXSwgdHJhbnNmb3JtLmNlbnRlci5sbmcpO1xuICAgICAgICAgICAgc3ltYm9sQnVja2V0c0NoYW5nZWQgPSBzeW1ib2xCdWNrZXRzQ2hhbmdlZCB8fCBsYXllckJ1Y2tldHNDaGFuZ2VkO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3Jvc3NUaWxlU3ltYm9sSW5kZXgucHJ1bmVVbnVzZWRMYXllcnModGhpcy5fb3JkZXIpO1xuXG4gICAgICAgIC8vIEFueXRoaW5nIHRoYXQgY2hhbmdlcyBvdXIgXCJpbiBwcm9ncmVzc1wiIGxheWVyIGFuZCB0aWxlIGluZGljZXMgcmVxdWlyZXMgdXNcbiAgICAgICAgLy8gdG8gc3RhcnQgb3Zlci4gV2hlbiB3ZSBzdGFydCBvdmVyLCB3ZSBkbyBhIGZ1bGwgcGxhY2VtZW50IGluc3RlYWQgb2YgaW5jcmVtZW50YWxcbiAgICAgICAgLy8gdG8gcHJldmVudCBzdGFydmF0aW9uLlxuICAgICAgICAvLyBXZSBuZWVkIHRvIHJlc3RhcnQgcGxhY2VtZW50IHRvIGtlZXAgbGF5ZXIgaW5kaWNlcyBpbiBzeW5jLlxuICAgICAgICAvLyBBbHNvIGZvcmNlIGZ1bGwgcGxhY2VtZW50IHdoZW4gZmFkZUR1cmF0aW9uID09PSAwIHRvIGVuc3VyZSB0aGF0IG5ld2x5IGxvYWRlZFxuICAgICAgICAvLyB0aWxlcyB3aWxsIGZ1bGx5IGRpc3BsYXkgc3ltYm9scyBpbiB0aGVpciBmaXJzdCBmcmFtZVxuICAgICAgICBmb3JjZUZ1bGxQbGFjZW1lbnQgPSBmb3JjZUZ1bGxQbGFjZW1lbnQgfHwgdGhpcy5fbGF5ZXJPcmRlckNoYW5nZWQgfHwgZmFkZUR1cmF0aW9uID09PSAwO1xuXG4gICAgICAgIGlmIChmb3JjZUZ1bGxQbGFjZW1lbnQgfHwgIXRoaXMucGF1c2VhYmxlUGxhY2VtZW50IHx8ICh0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5pc0RvbmUoKSAmJiAhdGhpcy5wbGFjZW1lbnQuc3RpbGxSZWNlbnQoYnJvd3Nlci5ub3coKSwgdHJhbnNmb3JtLnpvb20pKSkge1xuICAgICAgICAgICAgdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQgPSBuZXcgUGF1c2VhYmxlUGxhY2VtZW50KHRyYW5zZm9ybSwgdGhpcy5fb3JkZXIsIGZvcmNlRnVsbFBsYWNlbWVudCwgc2hvd0NvbGxpc2lvbkJveGVzLCBmYWRlRHVyYXRpb24sIGNyb3NzU291cmNlQ29sbGlzaW9ucywgdGhpcy5wbGFjZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5fbGF5ZXJPcmRlckNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5pc0RvbmUoKSkge1xuICAgICAgICAgICAgLy8gdGhlIGxhc3QgcGxhY2VtZW50IGZpbmlzaGVkIHJ1bm5pbmcsIGJ1dCB0aGUgbmV4dCBvbmUgaGFzbsOiwoDCmXRcbiAgICAgICAgICAgIC8vIHN0YXJ0ZWQgeWV0IGJlY2F1c2Ugb2YgdGhlIGBzdGlsbFJlY2VudGAgY2hlY2sgaW1tZWRpYXRlbHlcbiAgICAgICAgICAgIC8vIGFib3ZlLCBzbyBtYXJrIGl0IHN0YWxlIHRvIGVuc3VyZSB0aGF0IHdlIHJlcXVlc3QgYW5vdGhlclxuICAgICAgICAgICAgLy8gcmVuZGVyIGZyYW1lXG4gICAgICAgICAgICB0aGlzLnBsYWNlbWVudC5zZXRTdGFsZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuY29udGludWVQbGFjZW1lbnQodGhpcy5fb3JkZXIsIHRoaXMuX2xheWVycywgbGF5ZXJUaWxlcyk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5pc0RvbmUoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGxhY2VtZW50ID0gdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuY29tbWl0KGJyb3dzZXIubm93KCkpO1xuICAgICAgICAgICAgICAgIHBsYWNlbWVudENvbW1pdHRlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzeW1ib2xCdWNrZXRzQ2hhbmdlZCkge1xuICAgICAgICAgICAgICAgIC8vIHNpbmNlIHRoZSBwbGFjZW1lbnQgZ2V0cyBzcGxpdCBvdmVyIG11bHRpcGxlIGZyYW1lcyBpdCBpcyBwb3NzaWJsZVxuICAgICAgICAgICAgICAgIC8vIHRoZXNlIGJ1Y2tldHMgd2VyZSBwcm9jZXNzZWQgYmVmb3JlIHRoZXkgd2VyZSBjaGFuZ2VkIGFuZCBzbyB0aGVcbiAgICAgICAgICAgICAgICAvLyBwbGFjZW1lbnQgaXMgYWxyZWFkeSBzdGFsZSB3aGlsZSBpdCBpcyBpbiBwcm9ncmVzc1xuICAgICAgICAgICAgICAgIHRoaXMucGF1c2VhYmxlUGxhY2VtZW50LnBsYWNlbWVudC5zZXRTdGFsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBsYWNlbWVudENvbW1pdHRlZCB8fCBzeW1ib2xCdWNrZXRzQ2hhbmdlZCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBsYXllcklEIG9mIHRoaXMuX29yZGVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3R5bGVMYXllciA9IHRoaXMuX2xheWVyc1tsYXllcklEXTtcbiAgICAgICAgICAgICAgICBpZiAoc3R5bGVMYXllci50eXBlICE9PSAnc3ltYm9sJykgY29udGludWU7XG4gICAgICAgICAgICAgICAgdGhpcy5wbGFjZW1lbnQudXBkYXRlTGF5ZXJPcGFjaXRpZXMoc3R5bGVMYXllciwgbGF5ZXJUaWxlc1tzdHlsZUxheWVyLnNvdXJjZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gbmVlZHNSZW5kZXIgaXMgZmFsc2Ugd2hlbiB3ZSBoYXZlIGp1c3QgZmluaXNoZWQgYSBwbGFjZW1lbnQgdGhhdCBkaWRuJ3QgY2hhbmdlIHRoZSB2aXNpYmlsaXR5IG9mIGFueSBzeW1ib2xzXG4gICAgICAgIGNvbnN0IG5lZWRzUmVyZW5kZXIgPSAhdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuaXNEb25lKCkgfHwgdGhpcy5wbGFjZW1lbnQuaGFzVHJhbnNpdGlvbnMoYnJvd3Nlci5ub3coKSk7XG4gICAgICAgIHJldHVybiBuZWVkc1JlcmVuZGVyO1xuICAgIH1cblxuICAgIF9yZWxlYXNlU3ltYm9sRmFkZVRpbGVzKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuc291cmNlQ2FjaGVzKSB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZUNhY2hlc1tpZF0ucmVsZWFzZVN5bWJvbEZhZGVUaWxlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2FsbGJhY2tzIGZyb20gd2ViIHdvcmtlcnNcblxuICAgIGdldEltYWdlcyhtYXBJZDogc3RyaW5nLCBwYXJhbXM6IHtpY29uczogQXJyYXk8c3RyaW5nPiwgc291cmNlOiBzdHJpbmcsIHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCwgdHlwZTogc3RyaW5nfSwgY2FsbGJhY2s6IENhbGxiYWNrPHtbXzogc3RyaW5nXTogU3R5bGVJbWFnZX0+KSB7XG5cbiAgICAgICAgdGhpcy5pbWFnZU1hbmFnZXIuZ2V0SW1hZ2VzKHBhcmFtcy5pY29ucywgY2FsbGJhY2spO1xuXG4gICAgICAgIC8vIEFwcGx5IHF1ZXVlZCBpbWFnZSBjaGFuZ2VzIGJlZm9yZSBzZXR0aW5nIHRoZSB0aWxlJ3MgZGVwZW5kZW5jaWVzIHNvIHRoYXQgdGhlIHRpbGVcbiAgICAgICAgLy8gaXMgbm90IHJlbG9hZGVkIHVuZWNlc3NhcmlseS4gV2l0aG91dCB0aGlzIGZvcmNlZCB1cGRhdGUgdGhlIHJlbG9hZCBjb3VsZCBoYXBwZW4gaW4gY2FzZXNcbiAgICAgICAgLy8gbGlrZSB0aGlzIG9uZTpcbiAgICAgICAgLy8gLSBpY29ucyBjb250YWlucyBcIm15LWltYWdlXCJcbiAgICAgICAgLy8gLSBpbWFnZU1hbmFnZXIuZ2V0SW1hZ2VzKC4uLikgdHJpZ2dlcnMgYG9uc3R5bGVpbWFnZW1pc3NpbmdgXG4gICAgICAgIC8vIC0gdGhlIHVzZXIgYWRkcyBcIm15LWltYWdlXCIgd2l0aGluIHRoZSBjYWxsYmFja1xuICAgICAgICAvLyAtIGFkZEltYWdlIGFkZHMgXCJteS1pbWFnZVwiIHRvIHRoaXMuX2NoYW5nZWRJbWFnZXNcbiAgICAgICAgLy8gLSB0aGUgbmV4dCBmcmFtZSB0cmlnZ2VycyBhIHJlbG9hZCBvZiB0aGlzIHRpbGUgZXZlbiB0aG91Z2ggaXQgYWxyZWFkeSBoYXMgdGhlIGxhdGVzdCB2ZXJzaW9uXG4gICAgICAgIHRoaXMuX3VwZGF0ZVRpbGVzRm9yQ2hhbmdlZEltYWdlcygpO1xuXG4gICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlID0gdGhpcy5zb3VyY2VDYWNoZXNbcGFyYW1zLnNvdXJjZV07XG4gICAgICAgIGlmIChzb3VyY2VDYWNoZSkge1xuICAgICAgICAgICAgc291cmNlQ2FjaGUuc2V0RGVwZW5kZW5jaWVzKHBhcmFtcy50aWxlSUQua2V5LCBwYXJhbXMudHlwZSwgcGFyYW1zLmljb25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEdseXBocyhtYXBJZDogc3RyaW5nLCBwYXJhbXM6IHtzdGFja3M6IHtbXzogc3RyaW5nXTogQXJyYXk8bnVtYmVyPn19LCBjYWxsYmFjazogQ2FsbGJhY2s8e1tfOiBzdHJpbmddOiB7W186IG51bWJlcl06ID9TdHlsZUdseXBofX0+KSB7XG4gICAgICAgIHRoaXMuZ2x5cGhNYW5hZ2VyLmdldEdseXBocyhwYXJhbXMuc3RhY2tzLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgZ2V0UmVzb3VyY2UobWFwSWQ6IHN0cmluZywgcGFyYW1zOiBSZXF1ZXN0UGFyYW1ldGVycywgY2FsbGJhY2s6IFJlc3BvbnNlQ2FsbGJhY2s8YW55Pik6IENhbmNlbGFibGUge1xuICAgICAgICByZXR1cm4gbWFrZVJlcXVlc3QocGFyYW1zLCBjYWxsYmFjayk7XG4gICAgfVxufVxuXG5TdHlsZS5nZXRTb3VyY2VUeXBlID0gZ2V0U291cmNlVHlwZTtcblN0eWxlLnNldFNvdXJjZVR5cGUgPSBzZXRTb3VyY2VUeXBlO1xuU3R5bGUucmVnaXN0ZXJGb3JQbHVnaW5TdGF0ZUNoYW5nZSA9IHJlZ2lzdGVyRm9yUGx1Z2luU3RhdGVDaGFuZ2U7XG5cbmV4cG9ydCBkZWZhdWx0IFN0eWxlO1xuIiwiLy8gQGZsb3dcbmltcG9ydCB7Y3JlYXRlTGF5b3V0fSBmcm9tICcuLi91dGlsL3N0cnVjdF9hcnJheSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUxheW91dChbXG4gICAge25hbWU6ICdhX3BvcycsIHR5cGU6ICdJbnQxNicsIGNvbXBvbmVudHM6IDJ9XG5dKTtcbiIsIlxuLy8gRGlzYWJsZSBGbG93IGFubm90YXRpb25zIGhlcmUgYmVjYXVzZSBGbG93IGRvZXNuJ3Qgc3VwcG9ydCBpbXBvcnRpbmcgR0xTTCBmaWxlc1xuLyogZXNsaW50LWRpc2FibGUgZmxvd3R5cGUvcmVxdWlyZS12YWxpZC1maWxlLWFubm90YXRpb24gKi9cblxuaW1wb3J0IHByZWx1ZGVGcmFnIGZyb20gJy4vX3ByZWx1ZGUuZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgcHJlbHVkZVZlcnQgZnJvbSAnLi9fcHJlbHVkZS52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgYmFja2dyb3VuZEZyYWcgZnJvbSAnLi9iYWNrZ3JvdW5kLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGJhY2tncm91bmRWZXJ0IGZyb20gJy4vYmFja2dyb3VuZC52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgYmFja2dyb3VuZFBhdHRlcm5GcmFnIGZyb20gJy4vYmFja2dyb3VuZF9wYXR0ZXJuLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGJhY2tncm91bmRQYXR0ZXJuVmVydCBmcm9tICcuL2JhY2tncm91bmRfcGF0dGVybi52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgY2lyY2xlRnJhZyBmcm9tICcuL2NpcmNsZS5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBjaXJjbGVWZXJ0IGZyb20gJy4vY2lyY2xlLnZlcnRleC5nbHNsJztcbmltcG9ydCBjbGlwcGluZ01hc2tGcmFnIGZyb20gJy4vY2xpcHBpbmdfbWFzay5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBjbGlwcGluZ01hc2tWZXJ0IGZyb20gJy4vY2xpcHBpbmdfbWFzay52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgaGVhdG1hcEZyYWcgZnJvbSAnLi9oZWF0bWFwLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGhlYXRtYXBWZXJ0IGZyb20gJy4vaGVhdG1hcC52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgaGVhdG1hcFRleHR1cmVGcmFnIGZyb20gJy4vaGVhdG1hcF90ZXh0dXJlLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGhlYXRtYXBUZXh0dXJlVmVydCBmcm9tICcuL2hlYXRtYXBfdGV4dHVyZS52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgY29sbGlzaW9uQm94RnJhZyBmcm9tICcuL2NvbGxpc2lvbl9ib3guZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgY29sbGlzaW9uQm94VmVydCBmcm9tICcuL2NvbGxpc2lvbl9ib3gudmVydGV4Lmdsc2wnO1xuaW1wb3J0IGNvbGxpc2lvbkNpcmNsZUZyYWcgZnJvbSAnLi9jb2xsaXNpb25fY2lyY2xlLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGNvbGxpc2lvbkNpcmNsZVZlcnQgZnJvbSAnLi9jb2xsaXNpb25fY2lyY2xlLnZlcnRleC5nbHNsJztcbmltcG9ydCBkZWJ1Z0ZyYWcgZnJvbSAnLi9kZWJ1Zy5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBkZWJ1Z1ZlcnQgZnJvbSAnLi9kZWJ1Zy52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgZmlsbEZyYWcgZnJvbSAnLi9maWxsLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGZpbGxWZXJ0IGZyb20gJy4vZmlsbC52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgZmlsbE91dGxpbmVGcmFnIGZyb20gJy4vZmlsbF9vdXRsaW5lLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGZpbGxPdXRsaW5lVmVydCBmcm9tICcuL2ZpbGxfb3V0bGluZS52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgZmlsbE91dGxpbmVQYXR0ZXJuRnJhZyBmcm9tICcuL2ZpbGxfb3V0bGluZV9wYXR0ZXJuLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGZpbGxPdXRsaW5lUGF0dGVyblZlcnQgZnJvbSAnLi9maWxsX291dGxpbmVfcGF0dGVybi52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgZmlsbFBhdHRlcm5GcmFnIGZyb20gJy4vZmlsbF9wYXR0ZXJuLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGZpbGxQYXR0ZXJuVmVydCBmcm9tICcuL2ZpbGxfcGF0dGVybi52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgZmlsbEV4dHJ1c2lvbkZyYWcgZnJvbSAnLi9maWxsX2V4dHJ1c2lvbi5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBmaWxsRXh0cnVzaW9uVmVydCBmcm9tICcuL2ZpbGxfZXh0cnVzaW9uLnZlcnRleC5nbHNsJztcbmltcG9ydCBmaWxsRXh0cnVzaW9uUGF0dGVybkZyYWcgZnJvbSAnLi9maWxsX2V4dHJ1c2lvbl9wYXR0ZXJuLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGZpbGxFeHRydXNpb25QYXR0ZXJuVmVydCBmcm9tICcuL2ZpbGxfZXh0cnVzaW9uX3BhdHRlcm4udmVydGV4Lmdsc2wnO1xuaW1wb3J0IGhpbGxzaGFkZVByZXBhcmVGcmFnIGZyb20gJy4vaGlsbHNoYWRlX3ByZXBhcmUuZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgaGlsbHNoYWRlUHJlcGFyZVZlcnQgZnJvbSAnLi9oaWxsc2hhZGVfcHJlcGFyZS52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgaGlsbHNoYWRlRnJhZyBmcm9tICcuL2hpbGxzaGFkZS5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBoaWxsc2hhZGVWZXJ0IGZyb20gJy4vaGlsbHNoYWRlLnZlcnRleC5nbHNsJztcbmltcG9ydCBsaW5lRnJhZyBmcm9tICcuL2xpbmUuZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgbGluZVZlcnQgZnJvbSAnLi9saW5lLnZlcnRleC5nbHNsJztcbmltcG9ydCBsaW5lR3JhZGllbnRGcmFnIGZyb20gJy4vbGluZV9ncmFkaWVudC5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBsaW5lR3JhZGllbnRWZXJ0IGZyb20gJy4vbGluZV9ncmFkaWVudC52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgbGluZVBhdHRlcm5GcmFnIGZyb20gJy4vbGluZV9wYXR0ZXJuLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IGxpbmVQYXR0ZXJuVmVydCBmcm9tICcuL2xpbmVfcGF0dGVybi52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgbGluZVNERkZyYWcgZnJvbSAnLi9saW5lX3NkZi5mcmFnbWVudC5nbHNsJztcbmltcG9ydCBsaW5lU0RGVmVydCBmcm9tICcuL2xpbmVfc2RmLnZlcnRleC5nbHNsJztcbmltcG9ydCByYXN0ZXJGcmFnIGZyb20gJy4vcmFzdGVyLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IHJhc3RlclZlcnQgZnJvbSAnLi9yYXN0ZXIudmVydGV4Lmdsc2wnO1xuaW1wb3J0IHN5bWJvbEljb25GcmFnIGZyb20gJy4vc3ltYm9sX2ljb24uZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgc3ltYm9sSWNvblZlcnQgZnJvbSAnLi9zeW1ib2xfaWNvbi52ZXJ0ZXguZ2xzbCc7XG5pbXBvcnQgc3ltYm9sU0RGRnJhZyBmcm9tICcuL3N5bWJvbF9zZGYuZnJhZ21lbnQuZ2xzbCc7XG5pbXBvcnQgc3ltYm9sU0RGVmVydCBmcm9tICcuL3N5bWJvbF9zZGYudmVydGV4Lmdsc2wnO1xuaW1wb3J0IHN5bWJvbFRleHRBbmRJY29uRnJhZyBmcm9tICcuL3N5bWJvbF90ZXh0X2FuZF9pY29uLmZyYWdtZW50Lmdsc2wnO1xuaW1wb3J0IHN5bWJvbFRleHRBbmRJY29uVmVydCBmcm9tICcuL3N5bWJvbF90ZXh0X2FuZF9pY29uLnZlcnRleC5nbHNsJztcblxuZXhwb3J0IGNvbnN0IHByZWx1ZGUgPSBjb21waWxlKHByZWx1ZGVGcmFnLCBwcmVsdWRlVmVydCk7XG5leHBvcnQgY29uc3QgYmFja2dyb3VuZCA9IGNvbXBpbGUoYmFja2dyb3VuZEZyYWcsIGJhY2tncm91bmRWZXJ0KTtcbmV4cG9ydCBjb25zdCBiYWNrZ3JvdW5kUGF0dGVybiA9IGNvbXBpbGUoYmFja2dyb3VuZFBhdHRlcm5GcmFnLCBiYWNrZ3JvdW5kUGF0dGVyblZlcnQpO1xuZXhwb3J0IGNvbnN0IGNpcmNsZSA9IGNvbXBpbGUoY2lyY2xlRnJhZywgY2lyY2xlVmVydCk7XG5leHBvcnQgY29uc3QgY2xpcHBpbmdNYXNrID0gY29tcGlsZShjbGlwcGluZ01hc2tGcmFnLCBjbGlwcGluZ01hc2tWZXJ0KTtcbmV4cG9ydCBjb25zdCBoZWF0bWFwID0gY29tcGlsZShoZWF0bWFwRnJhZywgaGVhdG1hcFZlcnQpO1xuZXhwb3J0IGNvbnN0IGhlYXRtYXBUZXh0dXJlID0gY29tcGlsZShoZWF0bWFwVGV4dHVyZUZyYWcsIGhlYXRtYXBUZXh0dXJlVmVydCk7XG5leHBvcnQgY29uc3QgY29sbGlzaW9uQm94ID0gY29tcGlsZShjb2xsaXNpb25Cb3hGcmFnLCBjb2xsaXNpb25Cb3hWZXJ0KTtcbmV4cG9ydCBjb25zdCBjb2xsaXNpb25DaXJjbGUgPSBjb21waWxlKGNvbGxpc2lvbkNpcmNsZUZyYWcsIGNvbGxpc2lvbkNpcmNsZVZlcnQpO1xuZXhwb3J0IGNvbnN0IGRlYnVnID0gY29tcGlsZShkZWJ1Z0ZyYWcsIGRlYnVnVmVydCk7XG5leHBvcnQgY29uc3QgZmlsbCA9IGNvbXBpbGUoZmlsbEZyYWcsIGZpbGxWZXJ0KTtcbmV4cG9ydCBjb25zdCBmaWxsT3V0bGluZSA9IGNvbXBpbGUoZmlsbE91dGxpbmVGcmFnLCBmaWxsT3V0bGluZVZlcnQpO1xuZXhwb3J0IGNvbnN0IGZpbGxPdXRsaW5lUGF0dGVybiA9IGNvbXBpbGUoZmlsbE91dGxpbmVQYXR0ZXJuRnJhZywgZmlsbE91dGxpbmVQYXR0ZXJuVmVydCk7XG5leHBvcnQgY29uc3QgZmlsbFBhdHRlcm4gPSBjb21waWxlKGZpbGxQYXR0ZXJuRnJhZywgZmlsbFBhdHRlcm5WZXJ0KTtcbmV4cG9ydCBjb25zdCBmaWxsRXh0cnVzaW9uID0gY29tcGlsZShmaWxsRXh0cnVzaW9uRnJhZywgZmlsbEV4dHJ1c2lvblZlcnQpO1xuZXhwb3J0IGNvbnN0IGZpbGxFeHRydXNpb25QYXR0ZXJuID0gY29tcGlsZShmaWxsRXh0cnVzaW9uUGF0dGVybkZyYWcsIGZpbGxFeHRydXNpb25QYXR0ZXJuVmVydCk7XG5leHBvcnQgY29uc3QgaGlsbHNoYWRlUHJlcGFyZSA9IGNvbXBpbGUoaGlsbHNoYWRlUHJlcGFyZUZyYWcsIGhpbGxzaGFkZVByZXBhcmVWZXJ0KTtcbmV4cG9ydCBjb25zdCBoaWxsc2hhZGUgPSBjb21waWxlKGhpbGxzaGFkZUZyYWcsIGhpbGxzaGFkZVZlcnQpO1xuZXhwb3J0IGNvbnN0IGxpbmUgPSBjb21waWxlKGxpbmVGcmFnLCBsaW5lVmVydCk7XG5leHBvcnQgY29uc3QgbGluZUdyYWRpZW50ID0gY29tcGlsZShsaW5lR3JhZGllbnRGcmFnLCBsaW5lR3JhZGllbnRWZXJ0KTtcbmV4cG9ydCBjb25zdCBsaW5lUGF0dGVybiA9IGNvbXBpbGUobGluZVBhdHRlcm5GcmFnLCBsaW5lUGF0dGVyblZlcnQpO1xuZXhwb3J0IGNvbnN0IGxpbmVTREYgPSBjb21waWxlKGxpbmVTREZGcmFnLCBsaW5lU0RGVmVydCk7XG5leHBvcnQgY29uc3QgcmFzdGVyID0gY29tcGlsZShyYXN0ZXJGcmFnLCByYXN0ZXJWZXJ0KTtcbmV4cG9ydCBjb25zdCBzeW1ib2xJY29uID0gY29tcGlsZShzeW1ib2xJY29uRnJhZywgc3ltYm9sSWNvblZlcnQpO1xuZXhwb3J0IGNvbnN0IHN5bWJvbFNERiA9IGNvbXBpbGUoc3ltYm9sU0RGRnJhZywgc3ltYm9sU0RGVmVydCk7XG5leHBvcnQgY29uc3Qgc3ltYm9sVGV4dEFuZEljb24gPSBjb21waWxlKHN5bWJvbFRleHRBbmRJY29uRnJhZywgc3ltYm9sVGV4dEFuZEljb25WZXJ0KTtcblxuLy8gRXhwYW5kICNwcmFnbWFzIHRvICNpZmRlZnMuXG5cbmZ1bmN0aW9uIGNvbXBpbGUoZnJhZ21lbnRTb3VyY2UsIHZlcnRleFNvdXJjZSkge1xuICAgIGNvbnN0IHJlID0gLyNwcmFnbWEgbWFwYm94OiAoW1xcd10rKSAoW1xcd10rKSAoW1xcd10rKSAoW1xcd10rKS9nO1xuXG4gICAgY29uc3QgZnJhZ21lbnRQcmFnbWFzID0ge307XG5cbiAgICBmcmFnbWVudFNvdXJjZSA9IGZyYWdtZW50U291cmNlLnJlcGxhY2UocmUsIChtYXRjaCwgb3BlcmF0aW9uLCBwcmVjaXNpb24sIHR5cGUsIG5hbWUpID0+IHtcbiAgICAgICAgZnJhZ21lbnRQcmFnbWFzW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJ2RlZmluZScpIHtcbiAgICAgICAgICAgIHJldHVybiBgXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfJHtuYW1lfVxudmFyeWluZyAke3ByZWNpc2lvbn0gJHt0eXBlfSAke25hbWV9O1xuI2Vsc2VcbnVuaWZvcm0gJHtwcmVjaXNpb259ICR7dHlwZX0gdV8ke25hbWV9O1xuI2VuZGlmXG5gO1xuICAgICAgICB9IGVsc2UgLyogaWYgKG9wZXJhdGlvbiA9PT0gJ2luaXRpYWxpemUnKSAqLyB7XG4gICAgICAgICAgICByZXR1cm4gYFxuI2lmZGVmIEhBU19VTklGT1JNX3VfJHtuYW1lfVxuICAgICR7cHJlY2lzaW9ufSAke3R5cGV9ICR7bmFtZX0gPSB1XyR7bmFtZX07XG4jZW5kaWZcbmA7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHZlcnRleFNvdXJjZSA9IHZlcnRleFNvdXJjZS5yZXBsYWNlKHJlLCAobWF0Y2gsIG9wZXJhdGlvbiwgcHJlY2lzaW9uLCB0eXBlLCBuYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IGF0dHJUeXBlID0gdHlwZSA9PT0gJ2Zsb2F0JyA/ICd2ZWMyJyA6ICd2ZWM0JztcbiAgICAgICAgY29uc3QgdW5wYWNrVHlwZSA9IG5hbWUubWF0Y2goL2NvbG9yLykgPyAnY29sb3InIDogYXR0clR5cGU7XG5cbiAgICAgICAgaWYgKGZyYWdtZW50UHJhZ21hc1tuYW1lXSkge1xuICAgICAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJ2RlZmluZScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYFxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyR7bmFtZX1cbnVuaWZvcm0gbG93cCBmbG9hdCB1XyR7bmFtZX1fdDtcbmF0dHJpYnV0ZSAke3ByZWNpc2lvbn0gJHthdHRyVHlwZX0gYV8ke25hbWV9O1xudmFyeWluZyAke3ByZWNpc2lvbn0gJHt0eXBlfSAke25hbWV9O1xuI2Vsc2VcbnVuaWZvcm0gJHtwcmVjaXNpb259ICR7dHlwZX0gdV8ke25hbWV9O1xuI2VuZGlmXG5gO1xuICAgICAgICAgICAgfSBlbHNlIC8qIGlmIChvcGVyYXRpb24gPT09ICdpbml0aWFsaXplJykgKi8ge1xuICAgICAgICAgICAgICAgIGlmICh1bnBhY2tUeXBlID09PSAndmVjNCcpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdmVjNCBhdHRyaWJ1dGVzIGFyZSBvbmx5IHVzZWQgZm9yIGNyb3NzLWZhZGVkIHByb3BlcnRpZXMsIGFuZCBhcmUgbm90IHBhY2tlZFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyR7bmFtZX1cbiAgICAke25hbWV9ID0gYV8ke25hbWV9O1xuI2Vsc2VcbiAgICAke3ByZWNpc2lvbn0gJHt0eXBlfSAke25hbWV9ID0gdV8ke25hbWV9O1xuI2VuZGlmXG5gO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfJHtuYW1lfVxuICAgICR7bmFtZX0gPSB1bnBhY2tfbWl4XyR7dW5wYWNrVHlwZX0oYV8ke25hbWV9LCB1XyR7bmFtZX1fdCk7XG4jZWxzZVxuICAgICR7cHJlY2lzaW9ufSAke3R5cGV9ICR7bmFtZX0gPSB1XyR7bmFtZX07XG4jZW5kaWZcbmA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJ2RlZmluZScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYFxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyR7bmFtZX1cbnVuaWZvcm0gbG93cCBmbG9hdCB1XyR7bmFtZX1fdDtcbmF0dHJpYnV0ZSAke3ByZWNpc2lvbn0gJHthdHRyVHlwZX0gYV8ke25hbWV9O1xuI2Vsc2VcbnVuaWZvcm0gJHtwcmVjaXNpb259ICR7dHlwZX0gdV8ke25hbWV9O1xuI2VuZGlmXG5gO1xuICAgICAgICAgICAgfSBlbHNlIC8qIGlmIChvcGVyYXRpb24gPT09ICdpbml0aWFsaXplJykgKi8ge1xuICAgICAgICAgICAgICAgIGlmICh1bnBhY2tUeXBlID09PSAndmVjNCcpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdmVjNCBhdHRyaWJ1dGVzIGFyZSBvbmx5IHVzZWQgZm9yIGNyb3NzLWZhZGVkIHByb3BlcnRpZXMsIGFuZCBhcmUgbm90IHBhY2tlZFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYFxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyR7bmFtZX1cbiAgICAke3ByZWNpc2lvbn0gJHt0eXBlfSAke25hbWV9ID0gYV8ke25hbWV9O1xuI2Vsc2VcbiAgICAke3ByZWNpc2lvbn0gJHt0eXBlfSAke25hbWV9ID0gdV8ke25hbWV9O1xuI2VuZGlmXG5gO1xuICAgICAgICAgICAgICAgIH0gZWxzZSAvKiAqL3tcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcbiNpZm5kZWYgSEFTX1VOSUZPUk1fdV8ke25hbWV9XG4gICAgJHtwcmVjaXNpb259ICR7dHlwZX0gJHtuYW1lfSA9IHVucGFja19taXhfJHt1bnBhY2tUeXBlfShhXyR7bmFtZX0sIHVfJHtuYW1lfV90KTtcbiNlbHNlXG4gICAgJHtwcmVjaXNpb259ICR7dHlwZX0gJHtuYW1lfSA9IHVfJHtuYW1lfTtcbiNlbmRpZlxuYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB7ZnJhZ21lbnRTb3VyY2UsIHZlcnRleFNvdXJjZX07XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB0eXBlIFByb2dyYW0gZnJvbSAnLi9wcm9ncmFtJztcbmltcG9ydCB0eXBlIFZlcnRleEJ1ZmZlciBmcm9tICcuLi9nbC92ZXJ0ZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIEluZGV4QnVmZmVyIGZyb20gJy4uL2dsL2luZGV4X2J1ZmZlcic7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uL2dsL2NvbnRleHQnO1xuXG5jbGFzcyBWZXJ0ZXhBcnJheU9iamVjdCB7XG4gICAgY29udGV4dDogQ29udGV4dDtcbiAgICBib3VuZFByb2dyYW06ID9Qcm9ncmFtPCo+O1xuICAgIGJvdW5kTGF5b3V0VmVydGV4QnVmZmVyOiA/VmVydGV4QnVmZmVyO1xuICAgIGJvdW5kUGFpbnRWZXJ0ZXhCdWZmZXJzOiBBcnJheTxWZXJ0ZXhCdWZmZXI+O1xuICAgIGJvdW5kSW5kZXhCdWZmZXI6ID9JbmRleEJ1ZmZlcjtcbiAgICBib3VuZFZlcnRleE9mZnNldDogP251bWJlcjtcbiAgICBib3VuZER5bmFtaWNWZXJ0ZXhCdWZmZXI6ID9WZXJ0ZXhCdWZmZXI7XG4gICAgYm91bmREeW5hbWljVmVydGV4QnVmZmVyMjogP1ZlcnRleEJ1ZmZlcjtcbiAgICB2YW86IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmJvdW5kUHJvZ3JhbSA9IG51bGw7XG4gICAgICAgIHRoaXMuYm91bmRMYXlvdXRWZXJ0ZXhCdWZmZXIgPSBudWxsO1xuICAgICAgICB0aGlzLmJvdW5kUGFpbnRWZXJ0ZXhCdWZmZXJzID0gW107XG4gICAgICAgIHRoaXMuYm91bmRJbmRleEJ1ZmZlciA9IG51bGw7XG4gICAgICAgIHRoaXMuYm91bmRWZXJ0ZXhPZmZzZXQgPSBudWxsO1xuICAgICAgICB0aGlzLmJvdW5kRHluYW1pY1ZlcnRleEJ1ZmZlciA9IG51bGw7XG4gICAgICAgIHRoaXMudmFvID0gbnVsbDtcbiAgICB9XG5cbiAgICBiaW5kKGNvbnRleHQ6IENvbnRleHQsXG4gICAgICAgICBwcm9ncmFtOiBQcm9ncmFtPCo+LFxuICAgICAgICAgbGF5b3V0VmVydGV4QnVmZmVyOiBWZXJ0ZXhCdWZmZXIsXG4gICAgICAgICBwYWludFZlcnRleEJ1ZmZlcnM6IEFycmF5PFZlcnRleEJ1ZmZlcj4sXG4gICAgICAgICBpbmRleEJ1ZmZlcjogP0luZGV4QnVmZmVyLFxuICAgICAgICAgdmVydGV4T2Zmc2V0OiA/bnVtYmVyLFxuICAgICAgICAgZHluYW1pY1ZlcnRleEJ1ZmZlcjogP1ZlcnRleEJ1ZmZlcixcbiAgICAgICAgIGR5bmFtaWNWZXJ0ZXhCdWZmZXIyOiA/VmVydGV4QnVmZmVyKSB7XG5cbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcblxuICAgICAgICBsZXQgcGFpbnRCdWZmZXJzRGlmZmVyID0gdGhpcy5ib3VuZFBhaW50VmVydGV4QnVmZmVycy5sZW5ndGggIT09IHBhaW50VmVydGV4QnVmZmVycy5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyAhcGFpbnRCdWZmZXJzRGlmZmVyICYmIGkgPCBwYWludFZlcnRleEJ1ZmZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmJvdW5kUGFpbnRWZXJ0ZXhCdWZmZXJzW2ldICE9PSBwYWludFZlcnRleEJ1ZmZlcnNbaV0pIHtcbiAgICAgICAgICAgICAgICBwYWludEJ1ZmZlcnNEaWZmZXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNGcmVzaEJpbmRSZXF1aXJlZCA9IChcbiAgICAgICAgICAgICF0aGlzLnZhbyB8fFxuICAgICAgICAgICAgdGhpcy5ib3VuZFByb2dyYW0gIT09IHByb2dyYW0gfHxcbiAgICAgICAgICAgIHRoaXMuYm91bmRMYXlvdXRWZXJ0ZXhCdWZmZXIgIT09IGxheW91dFZlcnRleEJ1ZmZlciB8fFxuICAgICAgICAgICAgcGFpbnRCdWZmZXJzRGlmZmVyIHx8XG4gICAgICAgICAgICB0aGlzLmJvdW5kSW5kZXhCdWZmZXIgIT09IGluZGV4QnVmZmVyIHx8XG4gICAgICAgICAgICB0aGlzLmJvdW5kVmVydGV4T2Zmc2V0ICE9PSB2ZXJ0ZXhPZmZzZXQgfHxcbiAgICAgICAgICAgIHRoaXMuYm91bmREeW5hbWljVmVydGV4QnVmZmVyICE9PSBkeW5hbWljVmVydGV4QnVmZmVyIHx8XG4gICAgICAgICAgICB0aGlzLmJvdW5kRHluYW1pY1ZlcnRleEJ1ZmZlcjIgIT09IGR5bmFtaWNWZXJ0ZXhCdWZmZXIyXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFjb250ZXh0LmV4dFZlcnRleEFycmF5T2JqZWN0IHx8IGlzRnJlc2hCaW5kUmVxdWlyZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZnJlc2hCaW5kKHByb2dyYW0sIGxheW91dFZlcnRleEJ1ZmZlciwgcGFpbnRWZXJ0ZXhCdWZmZXJzLCBpbmRleEJ1ZmZlciwgdmVydGV4T2Zmc2V0LCBkeW5hbWljVmVydGV4QnVmZmVyLCBkeW5hbWljVmVydGV4QnVmZmVyMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250ZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUy5zZXQodGhpcy52YW8pO1xuXG4gICAgICAgICAgICBpZiAoZHluYW1pY1ZlcnRleEJ1ZmZlcikge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBidWZmZXIgbWF5IGhhdmUgYmVlbiB1cGRhdGVkLiBSZWJpbmQgdG8gdXBsb2FkIGRhdGEuXG4gICAgICAgICAgICAgICAgZHluYW1pY1ZlcnRleEJ1ZmZlci5iaW5kKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpbmRleEJ1ZmZlciAmJiBpbmRleEJ1ZmZlci5keW5hbWljRHJhdykge1xuICAgICAgICAgICAgICAgIGluZGV4QnVmZmVyLmJpbmQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGR5bmFtaWNWZXJ0ZXhCdWZmZXIyKSB7XG4gICAgICAgICAgICAgICAgZHluYW1pY1ZlcnRleEJ1ZmZlcjIuYmluZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnJlc2hCaW5kKHByb2dyYW06IFByb2dyYW08Kj4sXG4gICAgICAgICAgICAgIGxheW91dFZlcnRleEJ1ZmZlcjogVmVydGV4QnVmZmVyLFxuICAgICAgICAgICAgICBwYWludFZlcnRleEJ1ZmZlcnM6IEFycmF5PFZlcnRleEJ1ZmZlcj4sXG4gICAgICAgICAgICAgIGluZGV4QnVmZmVyOiA/SW5kZXhCdWZmZXIsXG4gICAgICAgICAgICAgIHZlcnRleE9mZnNldDogP251bWJlcixcbiAgICAgICAgICAgICAgZHluYW1pY1ZlcnRleEJ1ZmZlcjogP1ZlcnRleEJ1ZmZlcixcbiAgICAgICAgICAgICAgZHluYW1pY1ZlcnRleEJ1ZmZlcjI6ID9WZXJ0ZXhCdWZmZXIpIHtcbiAgICAgICAgbGV0IG51bVByZXZBdHRyaWJ1dGVzO1xuICAgICAgICBjb25zdCBudW1OZXh0QXR0cmlidXRlcyA9IHByb2dyYW0ubnVtQXR0cmlidXRlcztcblxuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jb250ZXh0O1xuICAgICAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG5cbiAgICAgICAgaWYgKGNvbnRleHQuZXh0VmVydGV4QXJyYXlPYmplY3QpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbykgdGhpcy5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLnZhbyA9IGNvbnRleHQuZXh0VmVydGV4QXJyYXlPYmplY3QuY3JlYXRlVmVydGV4QXJyYXlPRVMoKTtcbiAgICAgICAgICAgIGNvbnRleHQuYmluZFZlcnRleEFycmF5T0VTLnNldCh0aGlzLnZhbyk7XG4gICAgICAgICAgICBudW1QcmV2QXR0cmlidXRlcyA9IDA7XG5cbiAgICAgICAgICAgIC8vIHN0b3JlIHRoZSBhcmd1bWVudHMgc28gdGhhdCB3ZSBjYW4gdmVyaWZ5IHRoZW0gd2hlbiB0aGUgdmFvIGlzIGJvdW5kIGFnYWluXG4gICAgICAgICAgICB0aGlzLmJvdW5kUHJvZ3JhbSA9IHByb2dyYW07XG4gICAgICAgICAgICB0aGlzLmJvdW5kTGF5b3V0VmVydGV4QnVmZmVyID0gbGF5b3V0VmVydGV4QnVmZmVyO1xuICAgICAgICAgICAgdGhpcy5ib3VuZFBhaW50VmVydGV4QnVmZmVycyA9IHBhaW50VmVydGV4QnVmZmVycztcbiAgICAgICAgICAgIHRoaXMuYm91bmRJbmRleEJ1ZmZlciA9IGluZGV4QnVmZmVyO1xuICAgICAgICAgICAgdGhpcy5ib3VuZFZlcnRleE9mZnNldCA9IHZlcnRleE9mZnNldDtcbiAgICAgICAgICAgIHRoaXMuYm91bmREeW5hbWljVmVydGV4QnVmZmVyID0gZHluYW1pY1ZlcnRleEJ1ZmZlcjtcbiAgICAgICAgICAgIHRoaXMuYm91bmREeW5hbWljVmVydGV4QnVmZmVyMiA9IGR5bmFtaWNWZXJ0ZXhCdWZmZXIyO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBudW1QcmV2QXR0cmlidXRlcyA9IGNvbnRleHQuY3VycmVudE51bUF0dHJpYnV0ZXMgfHwgMDtcblxuICAgICAgICAgICAgLy8gRGlzYWJsZSBhbGwgYXR0cmlidXRlcyBmcm9tIHRoZSBwcmV2aW91cyBwcm9ncmFtIHRoYXQgYXJlbid0IHVzZWQgaW5cbiAgICAgICAgICAgIC8vIHRoZSBuZXcgcHJvZ3JhbS4gTm90ZTogYXR0cmlidXRlIGluZGljZXMgYXJlICpub3QqIHByb2dyYW0gc3BlY2lmaWMhXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gbnVtTmV4dEF0dHJpYnV0ZXM7IGkgPCBudW1QcmV2QXR0cmlidXRlczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgLy8gV2ViR0wgYnJlYWtzIGlmIHlvdSBkaXNhYmxlIGF0dHJpYnV0ZSAwLlxuICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjAzMDUyMzFcbiAgICAgICAgICAgICAgICBhc3NlcnQoaSAhPT0gMCk7XG4gICAgICAgICAgICAgICAgZ2wuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGF5b3V0VmVydGV4QnVmZmVyLmVuYWJsZUF0dHJpYnV0ZXMoZ2wsIHByb2dyYW0pO1xuICAgICAgICBmb3IgKGNvbnN0IHZlcnRleEJ1ZmZlciBvZiBwYWludFZlcnRleEJ1ZmZlcnMpIHtcbiAgICAgICAgICAgIHZlcnRleEJ1ZmZlci5lbmFibGVBdHRyaWJ1dGVzKGdsLCBwcm9ncmFtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkeW5hbWljVmVydGV4QnVmZmVyKSB7XG4gICAgICAgICAgICBkeW5hbWljVmVydGV4QnVmZmVyLmVuYWJsZUF0dHJpYnV0ZXMoZ2wsIHByb2dyYW0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkeW5hbWljVmVydGV4QnVmZmVyMikge1xuICAgICAgICAgICAgZHluYW1pY1ZlcnRleEJ1ZmZlcjIuZW5hYmxlQXR0cmlidXRlcyhnbCwgcHJvZ3JhbSk7XG4gICAgICAgIH1cblxuICAgICAgICBsYXlvdXRWZXJ0ZXhCdWZmZXIuYmluZCgpO1xuICAgICAgICBsYXlvdXRWZXJ0ZXhCdWZmZXIuc2V0VmVydGV4QXR0cmliUG9pbnRlcnMoZ2wsIHByb2dyYW0sIHZlcnRleE9mZnNldCk7XG4gICAgICAgIGZvciAoY29uc3QgdmVydGV4QnVmZmVyIG9mIHBhaW50VmVydGV4QnVmZmVycykge1xuICAgICAgICAgICAgdmVydGV4QnVmZmVyLmJpbmQoKTtcbiAgICAgICAgICAgIHZlcnRleEJ1ZmZlci5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycyhnbCwgcHJvZ3JhbSwgdmVydGV4T2Zmc2V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkeW5hbWljVmVydGV4QnVmZmVyKSB7XG4gICAgICAgICAgICBkeW5hbWljVmVydGV4QnVmZmVyLmJpbmQoKTtcbiAgICAgICAgICAgIGR5bmFtaWNWZXJ0ZXhCdWZmZXIuc2V0VmVydGV4QXR0cmliUG9pbnRlcnMoZ2wsIHByb2dyYW0sIHZlcnRleE9mZnNldCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZGV4QnVmZmVyKSB7XG4gICAgICAgICAgICBpbmRleEJ1ZmZlci5iaW5kKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGR5bmFtaWNWZXJ0ZXhCdWZmZXIyKSB7XG4gICAgICAgICAgICBkeW5hbWljVmVydGV4QnVmZmVyMi5iaW5kKCk7XG4gICAgICAgICAgICBkeW5hbWljVmVydGV4QnVmZmVyMi5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycyhnbCwgcHJvZ3JhbSwgdmVydGV4T2Zmc2V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQuY3VycmVudE51bUF0dHJpYnV0ZXMgPSBudW1OZXh0QXR0cmlidXRlcztcbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy52YW8pIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5leHRWZXJ0ZXhBcnJheU9iamVjdC5kZWxldGVWZXJ0ZXhBcnJheU9FUyh0aGlzLnZhbyk7XG4gICAgICAgICAgICB0aGlzLnZhbyA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZlcnRleEFycmF5T2JqZWN0O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtwcmVsdWRlfSBmcm9tICcuLi9zaGFkZXJzJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBQcm9ncmFtQ29uZmlndXJhdGlvbiBmcm9tICcuLi9kYXRhL3Byb2dyYW1fY29uZmlndXJhdGlvbic7XG5pbXBvcnQgVmVydGV4QXJyYXlPYmplY3QgZnJvbSAnLi92ZXJ0ZXhfYXJyYXlfb2JqZWN0JztcbmltcG9ydCBDb250ZXh0IGZyb20gJy4uL2dsL2NvbnRleHQnO1xuXG5pbXBvcnQgdHlwZSBTZWdtZW50VmVjdG9yIGZyb20gJy4uL2RhdGEvc2VnbWVudCc7XG5pbXBvcnQgdHlwZSBWZXJ0ZXhCdWZmZXIgZnJvbSAnLi4vZ2wvdmVydGV4X2J1ZmZlcic7XG5pbXBvcnQgdHlwZSBJbmRleEJ1ZmZlciBmcm9tICcuLi9nbC9pbmRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUgRGVwdGhNb2RlIGZyb20gJy4uL2dsL2RlcHRoX21vZGUnO1xuaW1wb3J0IHR5cGUgU3RlbmNpbE1vZGUgZnJvbSAnLi4vZ2wvc3RlbmNpbF9tb2RlJztcbmltcG9ydCB0eXBlIENvbG9yTW9kZSBmcm9tICcuLi9nbC9jb2xvcl9tb2RlJztcbmltcG9ydCB0eXBlIEN1bGxGYWNlTW9kZSBmcm9tICcuLi9nbC9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQgdHlwZSB7VW5pZm9ybUJpbmRpbmdzLCBVbmlmb3JtVmFsdWVzLCBVbmlmb3JtTG9jYXRpb25zfSBmcm9tICcuL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQgdHlwZSB7QmluZGVyVW5pZm9ybX0gZnJvbSAnLi4vZGF0YS9wcm9ncmFtX2NvbmZpZ3VyYXRpb24nO1xuXG5leHBvcnQgdHlwZSBEcmF3TW9kZSA9XG4gICAgfCAkUHJvcGVydHlUeXBlPFdlYkdMUmVuZGVyaW5nQ29udGV4dCwgJ0xJTkVTJz5cbiAgICB8ICRQcm9wZXJ0eVR5cGU8V2ViR0xSZW5kZXJpbmdDb250ZXh0LCAnVFJJQU5HTEVTJz5cbiAgICB8ICRQcm9wZXJ0eVR5cGU8V2ViR0xSZW5kZXJpbmdDb250ZXh0LCAnTElORV9TVFJJUCc+O1xuXG5jbGFzcyBQcm9ncmFtPFVzOiBVbmlmb3JtQmluZGluZ3M+IHtcbiAgICBwcm9ncmFtOiBXZWJHTFByb2dyYW07XG4gICAgYXR0cmlidXRlczoge1tfOiBzdHJpbmddOiBudW1iZXJ9O1xuICAgIG51bUF0dHJpYnV0ZXM6IG51bWJlcjtcbiAgICBmaXhlZFVuaWZvcm1zOiBVcztcbiAgICBiaW5kZXJVbmlmb3JtczogQXJyYXk8QmluZGVyVW5pZm9ybT47XG4gICAgZmFpbGVkVG9DcmVhdGU6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LFxuICAgICAgICAgICAgICAgIHNvdXJjZToge2ZyYWdtZW50U291cmNlOiBzdHJpbmcsIHZlcnRleFNvdXJjZTogc3RyaW5nfSxcbiAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uOiA/UHJvZ3JhbUNvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgICAgICAgZml4ZWRVbmlmb3JtczogKENvbnRleHQsIFVuaWZvcm1Mb2NhdGlvbnMpID0+IFVzLFxuICAgICAgICAgICAgICAgIHNob3dPdmVyZHJhd0luc3BlY3RvcjogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgICAgIHRoaXMucHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTtcblxuICAgICAgICBjb25zdCBkZWZpbmVzID0gY29uZmlndXJhdGlvbiA/IGNvbmZpZ3VyYXRpb24uZGVmaW5lcygpIDogW107XG4gICAgICAgIGlmIChzaG93T3ZlcmRyYXdJbnNwZWN0b3IpIHtcbiAgICAgICAgICAgIGRlZmluZXMucHVzaCgnI2RlZmluZSBPVkVSRFJBV19JTlNQRUNUT1I7Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmcmFnbWVudFNvdXJjZSA9IGRlZmluZXMuY29uY2F0KHByZWx1ZGUuZnJhZ21lbnRTb3VyY2UsIHNvdXJjZS5mcmFnbWVudFNvdXJjZSkuam9pbignXFxuJyk7XG4gICAgICAgIGNvbnN0IHZlcnRleFNvdXJjZSA9IGRlZmluZXMuY29uY2F0KHByZWx1ZGUudmVydGV4U291cmNlLCBzb3VyY2UudmVydGV4U291cmNlKS5qb2luKCdcXG4nKTtcbiAgICAgICAgY29uc3QgZnJhZ21lbnRTaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIoZ2wuRlJBR01FTlRfU0hBREVSKTtcbiAgICAgICAgaWYgKGdsLmlzQ29udGV4dExvc3QoKSkge1xuICAgICAgICAgICAgdGhpcy5mYWlsZWRUb0NyZWF0ZSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZ2wuc2hhZGVyU291cmNlKGZyYWdtZW50U2hhZGVyLCBmcmFnbWVudFNvdXJjZSk7XG4gICAgICAgIGdsLmNvbXBpbGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpO1xuICAgICAgICBhc3NlcnQoZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKGZyYWdtZW50U2hhZGVyLCBnbC5DT01QSUxFX1NUQVRVUyksIChnbC5nZXRTaGFkZXJJbmZvTG9nKGZyYWdtZW50U2hhZGVyKTogYW55KSk7XG4gICAgICAgIGdsLmF0dGFjaFNoYWRlcih0aGlzLnByb2dyYW0sIGZyYWdtZW50U2hhZGVyKTtcblxuICAgICAgICBjb25zdCB2ZXJ0ZXhTaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIoZ2wuVkVSVEVYX1NIQURFUik7XG4gICAgICAgIGlmIChnbC5pc0NvbnRleHRMb3N0KCkpIHtcbiAgICAgICAgICAgIHRoaXMuZmFpbGVkVG9DcmVhdGUgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGdsLnNoYWRlclNvdXJjZSh2ZXJ0ZXhTaGFkZXIsIHZlcnRleFNvdXJjZSk7XG4gICAgICAgIGdsLmNvbXBpbGVTaGFkZXIodmVydGV4U2hhZGVyKTtcbiAgICAgICAgYXNzZXJ0KGdsLmdldFNoYWRlclBhcmFtZXRlcih2ZXJ0ZXhTaGFkZXIsIGdsLkNPTVBJTEVfU1RBVFVTKSwgKGdsLmdldFNoYWRlckluZm9Mb2codmVydGV4U2hhZGVyKTogYW55KSk7XG4gICAgICAgIGdsLmF0dGFjaFNoYWRlcih0aGlzLnByb2dyYW0sIHZlcnRleFNoYWRlcik7XG5cbiAgICAgICAgLy8gTWFudWFsbHkgYmluZCBsYXlvdXQgYXR0cmlidXRlcyBpbiB0aGUgb3JkZXIgZGVmaW5lZCBieSB0aGVpclxuICAgICAgICAvLyBQcm9ncmFtSW50ZXJmYWNlIHNvIHRoYXQgd2UgZG9uJ3QgZHluYW1pY2FsbHkgbGluayBhbiB1bnVzZWRcbiAgICAgICAgLy8gYXR0cmlidXRlIGF0IHBvc2l0aW9uIDAsIHdoaWNoIGNhbiBjYXVzZSByZW5kZXJpbmcgdG8gZmFpbCBmb3IgYW5cbiAgICAgICAgLy8gZW50aXJlIGxheWVyIChzZWUgIzQ2MDcsICM0NzI4KVxuICAgICAgICBjb25zdCBsYXlvdXRBdHRyaWJ1dGVzID0gY29uZmlndXJhdGlvbiA/IGNvbmZpZ3VyYXRpb24ubGF5b3V0QXR0cmlidXRlcyA6IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxheW91dEF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGdsLmJpbmRBdHRyaWJMb2NhdGlvbih0aGlzLnByb2dyYW0sIGksIGxheW91dEF0dHJpYnV0ZXNbaV0ubmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBnbC5saW5rUHJvZ3JhbSh0aGlzLnByb2dyYW0pO1xuICAgICAgICBhc3NlcnQoZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0aGlzLnByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSwgKGdsLmdldFByb2dyYW1JbmZvTG9nKHRoaXMucHJvZ3JhbSk6IGFueSkpO1xuXG4gICAgICAgIGdsLmRlbGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpO1xuICAgICAgICBnbC5kZWxldGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpO1xuXG4gICAgICAgIHRoaXMubnVtQXR0cmlidXRlcyA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIodGhpcy5wcm9ncmFtLCBnbC5BQ1RJVkVfQVRUUklCVVRFUyk7XG5cbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzID0ge307XG4gICAgICAgIGNvbnN0IHVuaWZvcm1Mb2NhdGlvbnMgPSB7fTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubnVtQXR0cmlidXRlczsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGUgPSBnbC5nZXRBY3RpdmVBdHRyaWIodGhpcy5wcm9ncmFtLCBpKTtcbiAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXNbYXR0cmlidXRlLm5hbWVdID0gZ2wuZ2V0QXR0cmliTG9jYXRpb24odGhpcy5wcm9ncmFtLCBhdHRyaWJ1dGUubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBudW1Vbmlmb3JtcyA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIodGhpcy5wcm9ncmFtLCBnbC5BQ1RJVkVfVU5JRk9STVMpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVVuaWZvcm1zOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHVuaWZvcm0gPSBnbC5nZXRBY3RpdmVVbmlmb3JtKHRoaXMucHJvZ3JhbSwgaSk7XG4gICAgICAgICAgICBpZiAodW5pZm9ybSkge1xuICAgICAgICAgICAgICAgIHVuaWZvcm1Mb2NhdGlvbnNbdW5pZm9ybS5uYW1lXSA9IGdsLmdldFVuaWZvcm1Mb2NhdGlvbih0aGlzLnByb2dyYW0sIHVuaWZvcm0ubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZpeGVkVW5pZm9ybXMgPSBmaXhlZFVuaWZvcm1zKGNvbnRleHQsIHVuaWZvcm1Mb2NhdGlvbnMpO1xuICAgICAgICB0aGlzLmJpbmRlclVuaWZvcm1zID0gY29uZmlndXJhdGlvbiA/IGNvbmZpZ3VyYXRpb24uZ2V0VW5pZm9ybXMoY29udGV4dCwgdW5pZm9ybUxvY2F0aW9ucykgOiBbXTtcbiAgICB9XG5cbiAgICBkcmF3KGNvbnRleHQ6IENvbnRleHQsXG4gICAgICAgICBkcmF3TW9kZTogRHJhd01vZGUsXG4gICAgICAgICBkZXB0aE1vZGU6ICRSZWFkT25seTxEZXB0aE1vZGU+LFxuICAgICAgICAgc3RlbmNpbE1vZGU6ICRSZWFkT25seTxTdGVuY2lsTW9kZT4sXG4gICAgICAgICBjb2xvck1vZGU6ICRSZWFkT25seTxDb2xvck1vZGU+LFxuICAgICAgICAgY3VsbEZhY2VNb2RlOiAkUmVhZE9ubHk8Q3VsbEZhY2VNb2RlPixcbiAgICAgICAgIHVuaWZvcm1WYWx1ZXM6IFVuaWZvcm1WYWx1ZXM8VXM+LFxuICAgICAgICAgbGF5ZXJJRDogc3RyaW5nLFxuICAgICAgICAgbGF5b3V0VmVydGV4QnVmZmVyOiBWZXJ0ZXhCdWZmZXIsXG4gICAgICAgICBpbmRleEJ1ZmZlcjogSW5kZXhCdWZmZXIsXG4gICAgICAgICBzZWdtZW50czogU2VnbWVudFZlY3RvcixcbiAgICAgICAgIGN1cnJlbnRQcm9wZXJ0aWVzOiBhbnksXG4gICAgICAgICB6b29tOiA/bnVtYmVyLFxuICAgICAgICAgY29uZmlndXJhdGlvbjogP1Byb2dyYW1Db25maWd1cmF0aW9uLFxuICAgICAgICAgZHluYW1pY0xheW91dEJ1ZmZlcjogP1ZlcnRleEJ1ZmZlcixcbiAgICAgICAgIGR5bmFtaWNMYXlvdXRCdWZmZXIyOiA/VmVydGV4QnVmZmVyKSB7XG5cbiAgICAgICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuXG4gICAgICAgIGlmICh0aGlzLmZhaWxlZFRvQ3JlYXRlKSByZXR1cm47XG5cbiAgICAgICAgY29udGV4dC5wcm9ncmFtLnNldCh0aGlzLnByb2dyYW0pO1xuICAgICAgICBjb250ZXh0LnNldERlcHRoTW9kZShkZXB0aE1vZGUpO1xuICAgICAgICBjb250ZXh0LnNldFN0ZW5jaWxNb2RlKHN0ZW5jaWxNb2RlKTtcbiAgICAgICAgY29udGV4dC5zZXRDb2xvck1vZGUoY29sb3JNb2RlKTtcbiAgICAgICAgY29udGV4dC5zZXRDdWxsRmFjZShjdWxsRmFjZU1vZGUpO1xuXG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBpbiB0aGlzLmZpeGVkVW5pZm9ybXMpIHtcbiAgICAgICAgICAgIHRoaXMuZml4ZWRVbmlmb3Jtc1tuYW1lXS5zZXQodW5pZm9ybVZhbHVlc1tuYW1lXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgY29uZmlndXJhdGlvbi5zZXRVbmlmb3Jtcyhjb250ZXh0LCB0aGlzLmJpbmRlclVuaWZvcm1zLCBjdXJyZW50UHJvcGVydGllcywge3pvb206ICh6b29tOiBhbnkpfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcmltaXRpdmVTaXplID0ge1xuICAgICAgICAgICAgW2dsLkxJTkVTXTogMixcbiAgICAgICAgICAgIFtnbC5UUklBTkdMRVNdOiAzLFxuICAgICAgICAgICAgW2dsLkxJTkVfU1RSSVBdOiAxXG4gICAgICAgIH1bZHJhd01vZGVdO1xuXG4gICAgICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBzZWdtZW50cy5nZXQoKSkge1xuICAgICAgICAgICAgY29uc3QgdmFvcyA9IHNlZ21lbnQudmFvcyB8fCAoc2VnbWVudC52YW9zID0ge30pO1xuICAgICAgICAgICAgY29uc3QgdmFvOiBWZXJ0ZXhBcnJheU9iamVjdCA9IHZhb3NbbGF5ZXJJRF0gfHwgKHZhb3NbbGF5ZXJJRF0gPSBuZXcgVmVydGV4QXJyYXlPYmplY3QoKSk7XG5cbiAgICAgICAgICAgIHZhby5iaW5kKFxuICAgICAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBsYXlvdXRWZXJ0ZXhCdWZmZXIsXG4gICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiA/IGNvbmZpZ3VyYXRpb24uZ2V0UGFpbnRWZXJ0ZXhCdWZmZXJzKCkgOiBbXSxcbiAgICAgICAgICAgICAgICBpbmRleEJ1ZmZlcixcbiAgICAgICAgICAgICAgICBzZWdtZW50LnZlcnRleE9mZnNldCxcbiAgICAgICAgICAgICAgICBkeW5hbWljTGF5b3V0QnVmZmVyLFxuICAgICAgICAgICAgICAgIGR5bmFtaWNMYXlvdXRCdWZmZXIyXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBnbC5kcmF3RWxlbWVudHMoXG4gICAgICAgICAgICAgICAgZHJhd01vZGUsXG4gICAgICAgICAgICAgICAgc2VnbWVudC5wcmltaXRpdmVMZW5ndGggKiBwcmltaXRpdmVTaXplLFxuICAgICAgICAgICAgICAgIGdsLlVOU0lHTkVEX1NIT1JULFxuICAgICAgICAgICAgICAgIHNlZ21lbnQucHJpbWl0aXZlT2Zmc2V0ICogcHJpbWl0aXZlU2l6ZSAqIDIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBQcm9ncmFtO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHtcbiAgICBVbmlmb3JtMWksXG4gICAgVW5pZm9ybTFmLFxuICAgIFVuaWZvcm0yZixcbiAgICBVbmlmb3JtM2Zcbn0gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCBwaXhlbHNUb1RpbGVVbml0cyBmcm9tICcuLi8uLi9zb3VyY2UvcGl4ZWxzX3RvX3RpbGVfdW5pdHMnO1xuXG5pbXBvcnQgdHlwZSBQYWludGVyIGZyb20gJy4uL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uLy4uL3NvdXJjZS90aWxlX2lkJztcbmltcG9ydCB0eXBlIHtDcm9zc0ZhZGVkfSBmcm9tICcuLi8uLi9zdHlsZS9wcm9wZXJ0aWVzJztcbmltcG9ydCB0eXBlIHtDcm9zc2ZhZGVQYXJhbWV0ZXJzfSBmcm9tICcuLi8uLi9zdHlsZS9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuaW1wb3J0IHR5cGUge1VuaWZvcm1WYWx1ZXN9IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4uLy4uL3NvdXJjZS90aWxlJztcbmltcG9ydCB0eXBlIFJlc29sdmVkSW1hZ2UgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy9leHByZXNzaW9uL3R5cGVzL3Jlc29sdmVkX2ltYWdlJztcblxudHlwZSBCYWNrZ3JvdW5kUGF0dGVyblVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfaW1hZ2UnOiBVbmlmb3JtMWksXG4gICAgJ3VfcGF0dGVybl90bF9hJzogVW5pZm9ybTJmLFxuICAgICd1X3BhdHRlcm5fYnJfYSc6IFVuaWZvcm0yZixcbiAgICAndV9wYXR0ZXJuX3RsX2InOiBVbmlmb3JtMmYsXG4gICAgJ3VfcGF0dGVybl9icl9iJzogVW5pZm9ybTJmLFxuICAgICd1X3RleHNpemUnOiBVbmlmb3JtMmYsXG4gICAgJ3VfbWl4JzogVW5pZm9ybTFmLFxuICAgICd1X3BhdHRlcm5fc2l6ZV9hJzogVW5pZm9ybTJmLFxuICAgICd1X3BhdHRlcm5fc2l6ZV9iJzogVW5pZm9ybTJmLFxuICAgICd1X3NjYWxlX2EnOiBVbmlmb3JtMWYsXG4gICAgJ3Vfc2NhbGVfYic6IFVuaWZvcm0xZixcbiAgICAndV9waXhlbF9jb29yZF91cHBlcic6IFVuaWZvcm0yZixcbiAgICAndV9waXhlbF9jb29yZF9sb3dlcic6IFVuaWZvcm0yZixcbiAgICAndV90aWxlX3VuaXRzX3RvX3BpeGVscyc6IFVuaWZvcm0xZlxufH07XG5cbmV4cG9ydCB0eXBlIFBhdHRlcm5Vbmlmb3Jtc1R5cGUgPSB7fFxuICAgIC8vIHBhdHRlcm4gdW5pZm9ybXM6XG4gICAgJ3VfaW1hZ2UnOiBVbmlmb3JtMWksXG4gICAgJ3VfdGV4c2l6ZSc6IFVuaWZvcm0yZixcbiAgICAndV9zY2FsZSc6IFVuaWZvcm0zZixcbiAgICAndV9mYWRlJzogVW5pZm9ybTFmLFxuICAgICd1X3BpeGVsX2Nvb3JkX3VwcGVyJzogVW5pZm9ybTJmLFxuICAgICd1X3BpeGVsX2Nvb3JkX2xvd2VyJzogVW5pZm9ybTJmXG58fTtcblxuZnVuY3Rpb24gcGF0dGVyblVuaWZvcm1WYWx1ZXMoY3Jvc3NmYWRlOiBDcm9zc2ZhZGVQYXJhbWV0ZXJzLCBwYWludGVyOiBQYWludGVyLFxuICAgICAgICB0aWxlOiBUaWxlXG4pOiBVbmlmb3JtVmFsdWVzPFBhdHRlcm5Vbmlmb3Jtc1R5cGU+IHtcblxuICAgIGNvbnN0IHRpbGVSYXRpbyA9IDEgLyBwaXhlbHNUb1RpbGVVbml0cyh0aWxlLCAxLCBwYWludGVyLnRyYW5zZm9ybS50aWxlWm9vbSk7XG5cbiAgICBjb25zdCBudW1UaWxlcyA9IE1hdGgucG93KDIsIHRpbGUudGlsZUlELm92ZXJzY2FsZWRaKTtcbiAgICBjb25zdCB0aWxlU2l6ZUF0TmVhcmVzdFpvb20gPSB0aWxlLnRpbGVTaXplICogTWF0aC5wb3coMiwgcGFpbnRlci50cmFuc2Zvcm0udGlsZVpvb20pIC8gbnVtVGlsZXM7XG5cbiAgICBjb25zdCBwaXhlbFggPSB0aWxlU2l6ZUF0TmVhcmVzdFpvb20gKiAodGlsZS50aWxlSUQuY2Fub25pY2FsLnggKyB0aWxlLnRpbGVJRC53cmFwICogbnVtVGlsZXMpO1xuICAgIGNvbnN0IHBpeGVsWSA9IHRpbGVTaXplQXROZWFyZXN0Wm9vbSAqIHRpbGUudGlsZUlELmNhbm9uaWNhbC55O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ3VfaW1hZ2UnOiAwLFxuICAgICAgICAndV90ZXhzaXplJzogdGlsZS5pbWFnZUF0bGFzVGV4dHVyZS5zaXplLFxuICAgICAgICAndV9zY2FsZSc6IFt0aWxlUmF0aW8sIGNyb3NzZmFkZS5mcm9tU2NhbGUsIGNyb3NzZmFkZS50b1NjYWxlXSxcbiAgICAgICAgJ3VfZmFkZSc6IGNyb3NzZmFkZS50LFxuICAgICAgICAvLyBzcGxpdCB0aGUgcGl4ZWwgY29vcmQgaW50byB0d28gcGFpcnMgb2YgMTYgYml0IG51bWJlcnMuIFRoZSBnbHNsIHNwZWMgb25seSBndWFyYW50ZWVzIDE2IGJpdHMgb2YgcHJlY2lzaW9uLlxuICAgICAgICAndV9waXhlbF9jb29yZF91cHBlcic6IFtwaXhlbFggPj4gMTYsIHBpeGVsWSA+PiAxNl0sXG4gICAgICAgICd1X3BpeGVsX2Nvb3JkX2xvd2VyJzogW3BpeGVsWCAmIDB4RkZGRiwgcGl4ZWxZICYgMHhGRkZGXVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIGJnUGF0dGVyblVuaWZvcm1WYWx1ZXMoaW1hZ2U6IENyb3NzRmFkZWQ8UmVzb2x2ZWRJbWFnZT4sIGNyb3NzZmFkZTogQ3Jvc3NmYWRlUGFyYW1ldGVycywgcGFpbnRlcjogUGFpbnRlcixcbiAgICAgICAgdGlsZToge3RpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCwgdGlsZVNpemU6IG51bWJlcn1cbik6IFVuaWZvcm1WYWx1ZXM8QmFja2dyb3VuZFBhdHRlcm5Vbmlmb3Jtc1R5cGU+IHtcbiAgICBjb25zdCBpbWFnZVBvc0EgPSBwYWludGVyLmltYWdlTWFuYWdlci5nZXRQYXR0ZXJuKGltYWdlLmZyb20udG9TdHJpbmcoKSk7XG4gICAgY29uc3QgaW1hZ2VQb3NCID0gcGFpbnRlci5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybihpbWFnZS50by50b1N0cmluZygpKTtcbiAgICBhc3NlcnQoaW1hZ2VQb3NBICYmIGltYWdlUG9zQik7XG4gICAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gcGFpbnRlci5pbWFnZU1hbmFnZXIuZ2V0UGl4ZWxTaXplKCk7XG5cbiAgICBjb25zdCBudW1UaWxlcyA9IE1hdGgucG93KDIsIHRpbGUudGlsZUlELm92ZXJzY2FsZWRaKTtcbiAgICBjb25zdCB0aWxlU2l6ZUF0TmVhcmVzdFpvb20gPSB0aWxlLnRpbGVTaXplICogTWF0aC5wb3coMiwgcGFpbnRlci50cmFuc2Zvcm0udGlsZVpvb20pIC8gbnVtVGlsZXM7XG5cbiAgICBjb25zdCBwaXhlbFggPSB0aWxlU2l6ZUF0TmVhcmVzdFpvb20gKiAodGlsZS50aWxlSUQuY2Fub25pY2FsLnggKyB0aWxlLnRpbGVJRC53cmFwICogbnVtVGlsZXMpO1xuICAgIGNvbnN0IHBpeGVsWSA9IHRpbGVTaXplQXROZWFyZXN0Wm9vbSAqIHRpbGUudGlsZUlELmNhbm9uaWNhbC55O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ3VfaW1hZ2UnOiAwLFxuICAgICAgICAndV9wYXR0ZXJuX3RsX2EnOiAoaW1hZ2VQb3NBOiBhbnkpLnRsLFxuICAgICAgICAndV9wYXR0ZXJuX2JyX2EnOiAoaW1hZ2VQb3NBOiBhbnkpLmJyLFxuICAgICAgICAndV9wYXR0ZXJuX3RsX2InOiAoaW1hZ2VQb3NCOiBhbnkpLnRsLFxuICAgICAgICAndV9wYXR0ZXJuX2JyX2InOiAoaW1hZ2VQb3NCOiBhbnkpLmJyLFxuICAgICAgICAndV90ZXhzaXplJzogW3dpZHRoLCBoZWlnaHRdLFxuICAgICAgICAndV9taXgnOiBjcm9zc2ZhZGUudCxcbiAgICAgICAgJ3VfcGF0dGVybl9zaXplX2EnOiAoaW1hZ2VQb3NBOiBhbnkpLmRpc3BsYXlTaXplLFxuICAgICAgICAndV9wYXR0ZXJuX3NpemVfYic6IChpbWFnZVBvc0I6IGFueSkuZGlzcGxheVNpemUsXG4gICAgICAgICd1X3NjYWxlX2EnOiBjcm9zc2ZhZGUuZnJvbVNjYWxlLFxuICAgICAgICAndV9zY2FsZV9iJzogY3Jvc3NmYWRlLnRvU2NhbGUsXG4gICAgICAgICd1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzJzogMSAvIHBpeGVsc1RvVGlsZVVuaXRzKHRpbGUsIDEsIHBhaW50ZXIudHJhbnNmb3JtLnRpbGVab29tKSxcbiAgICAgICAgLy8gc3BsaXQgdGhlIHBpeGVsIGNvb3JkIGludG8gdHdvIHBhaXJzIG9mIDE2IGJpdCBudW1iZXJzLiBUaGUgZ2xzbCBzcGVjIG9ubHkgZ3VhcmFudGVlcyAxNiBiaXRzIG9mIHByZWNpc2lvbi5cbiAgICAgICAgJ3VfcGl4ZWxfY29vcmRfdXBwZXInOiBbcGl4ZWxYID4+IDE2LCBwaXhlbFkgPj4gMTZdLFxuICAgICAgICAndV9waXhlbF9jb29yZF9sb3dlcic6IFtwaXhlbFggJiAweEZGRkYsIHBpeGVsWSAmIDB4RkZGRl1cbiAgICB9O1xufVxuZXhwb3J0IHtiZ1BhdHRlcm5Vbmlmb3JtVmFsdWVzLCBwYXR0ZXJuVW5pZm9ybVZhbHVlc307XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge3BhdHRlcm5Vbmlmb3JtVmFsdWVzfSBmcm9tICcuL3BhdHRlcm4nO1xuaW1wb3J0IHtcbiAgICBVbmlmb3JtMWksXG4gICAgVW5pZm9ybTFmLFxuICAgIFVuaWZvcm0yZixcbiAgICBVbmlmb3JtM2YsXG4gICAgVW5pZm9ybU1hdHJpeDRmXG59IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5cbmltcG9ydCB7bWF0MywgdmVjM30gZnJvbSAnZ2wtbWF0cml4JztcbmltcG9ydCB7ZXh0ZW5kfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuXG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uLy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuLi9wYWludGVyJztcbmltcG9ydCB0eXBlIHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuLi8uLi9zb3VyY2UvdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSB7VW5pZm9ybVZhbHVlcywgVW5pZm9ybUxvY2F0aW9uc30gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCB0eXBlIHtDcm9zc2ZhZGVQYXJhbWV0ZXJzfSBmcm9tICcuLi8uLi9zdHlsZS9ldmFsdWF0aW9uX3BhcmFtZXRlcnMnO1xuaW1wb3J0IHR5cGUgVGlsZSBmcm9tICcuLi8uLi9zb3VyY2UvdGlsZSc7XG5cbmV4cG9ydCB0eXBlIEZpbGxFeHRydXNpb25Vbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9saWdodHBvcyc6IFVuaWZvcm0zZixcbiAgICAndV9saWdodGludGVuc2l0eSc6IFVuaWZvcm0xZixcbiAgICAndV9saWdodGNvbG9yJzogVW5pZm9ybTNmLFxuICAgICd1X3ZlcnRpY2FsX2dyYWRpZW50JzogVW5pZm9ybTFmLFxuICAgICd1X29wYWNpdHknOiBVbmlmb3JtMWZcbnx9O1xuXG5leHBvcnQgdHlwZSBGaWxsRXh0cnVzaW9uUGF0dGVyblVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X2xpZ2h0cG9zJzogVW5pZm9ybTNmLFxuICAgICd1X2xpZ2h0aW50ZW5zaXR5JzogVW5pZm9ybTFmLFxuICAgICd1X2xpZ2h0Y29sb3InOiBVbmlmb3JtM2YsXG4gICAgJ3VfaGVpZ2h0X2ZhY3Rvcic6IFVuaWZvcm0xZixcbiAgICAndV92ZXJ0aWNhbF9ncmFkaWVudCc6IFVuaWZvcm0xZixcbiAgICAvLyBwYXR0ZXJuIHVuaWZvcm1zOlxuICAgICd1X3RleHNpemUnOiBVbmlmb3JtMmYsXG4gICAgJ3VfaW1hZ2UnOiBVbmlmb3JtMWksXG4gICAgJ3VfcGl4ZWxfY29vcmRfdXBwZXInOiBVbmlmb3JtMmYsXG4gICAgJ3VfcGl4ZWxfY29vcmRfbG93ZXInOiBVbmlmb3JtMmYsXG4gICAgJ3Vfc2NhbGUnOiBVbmlmb3JtM2YsXG4gICAgJ3VfZmFkZSc6IFVuaWZvcm0xZixcbiAgICAndV9vcGFjaXR5JzogVW5pZm9ybTFmXG58fTtcblxuY29uc3QgZmlsbEV4dHJ1c2lvblVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IEZpbGxFeHRydXNpb25Vbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeCksXG4gICAgJ3VfbGlnaHRwb3MnOiBuZXcgVW5pZm9ybTNmKGNvbnRleHQsIGxvY2F0aW9ucy51X2xpZ2h0cG9zKSxcbiAgICAndV9saWdodGludGVuc2l0eSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfbGlnaHRpbnRlbnNpdHkpLFxuICAgICd1X2xpZ2h0Y29sb3InOiBuZXcgVW5pZm9ybTNmKGNvbnRleHQsIGxvY2F0aW9ucy51X2xpZ2h0Y29sb3IpLFxuICAgICd1X3ZlcnRpY2FsX2dyYWRpZW50JzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV92ZXJ0aWNhbF9ncmFkaWVudCksXG4gICAgJ3Vfb3BhY2l0eSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfb3BhY2l0eSlcbn0pO1xuXG5jb25zdCBmaWxsRXh0cnVzaW9uUGF0dGVyblVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IEZpbGxFeHRydXNpb25QYXR0ZXJuVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X2xpZ2h0cG9zJzogbmV3IFVuaWZvcm0zZihjb250ZXh0LCBsb2NhdGlvbnMudV9saWdodHBvcyksXG4gICAgJ3VfbGlnaHRpbnRlbnNpdHknOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2xpZ2h0aW50ZW5zaXR5KSxcbiAgICAndV9saWdodGNvbG9yJzogbmV3IFVuaWZvcm0zZihjb250ZXh0LCBsb2NhdGlvbnMudV9saWdodGNvbG9yKSxcbiAgICAndV92ZXJ0aWNhbF9ncmFkaWVudCc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfdmVydGljYWxfZ3JhZGllbnQpLFxuICAgICd1X2hlaWdodF9mYWN0b3InOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2hlaWdodF9mYWN0b3IpLFxuICAgIC8vIHBhdHRlcm4gdW5pZm9ybXNcbiAgICAndV9pbWFnZSc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaW1hZ2UpLFxuICAgICd1X3RleHNpemUnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3RleHNpemUpLFxuICAgICd1X3BpeGVsX2Nvb3JkX3VwcGVyJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV9waXhlbF9jb29yZF91cHBlciksXG4gICAgJ3VfcGl4ZWxfY29vcmRfbG93ZXInOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3BpeGVsX2Nvb3JkX2xvd2VyKSxcbiAgICAndV9zY2FsZSc6IG5ldyBVbmlmb3JtM2YoY29udGV4dCwgbG9jYXRpb25zLnVfc2NhbGUpLFxuICAgICd1X2ZhZGUnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2ZhZGUpLFxuICAgICd1X29wYWNpdHknOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X29wYWNpdHkpXG59KTtcblxuY29uc3QgZmlsbEV4dHJ1c2lvblVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgbWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgcGFpbnRlcjogUGFpbnRlcixcbiAgICBzaG91bGRVc2VWZXJ0aWNhbEdyYWRpZW50OiBib29sZWFuLFxuICAgIG9wYWNpdHk6IG51bWJlclxuKTogVW5pZm9ybVZhbHVlczxGaWxsRXh0cnVzaW9uVW5pZm9ybXNUeXBlPiA9PiB7XG4gICAgY29uc3QgbGlnaHQgPSBwYWludGVyLnN0eWxlLmxpZ2h0O1xuICAgIGNvbnN0IF9scCA9IGxpZ2h0LnByb3BlcnRpZXMuZ2V0KCdwb3NpdGlvbicpO1xuICAgIGNvbnN0IGxpZ2h0UG9zID0gW19scC54LCBfbHAueSwgX2xwLnpdO1xuICAgIGNvbnN0IGxpZ2h0TWF0ID0gbWF0My5jcmVhdGUoKTtcbiAgICBpZiAobGlnaHQucHJvcGVydGllcy5nZXQoJ2FuY2hvcicpID09PSAndmlld3BvcnQnKSB7XG4gICAgICAgIG1hdDMuZnJvbVJvdGF0aW9uKGxpZ2h0TWF0LCAtcGFpbnRlci50cmFuc2Zvcm0uYW5nbGUpO1xuICAgIH1cbiAgICB2ZWMzLnRyYW5zZm9ybU1hdDMobGlnaHRQb3MsIGxpZ2h0UG9zLCBsaWdodE1hdCk7XG5cbiAgICBjb25zdCBsaWdodENvbG9yID0gbGlnaHQucHJvcGVydGllcy5nZXQoJ2NvbG9yJyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICAndV9tYXRyaXgnOiBtYXRyaXgsXG4gICAgICAgICd1X2xpZ2h0cG9zJzogbGlnaHRQb3MsXG4gICAgICAgICd1X2xpZ2h0aW50ZW5zaXR5JzogbGlnaHQucHJvcGVydGllcy5nZXQoJ2ludGVuc2l0eScpLFxuICAgICAgICAndV9saWdodGNvbG9yJzogW2xpZ2h0Q29sb3IuciwgbGlnaHRDb2xvci5nLCBsaWdodENvbG9yLmJdLFxuICAgICAgICAndV92ZXJ0aWNhbF9ncmFkaWVudCc6ICtzaG91bGRVc2VWZXJ0aWNhbEdyYWRpZW50LFxuICAgICAgICAndV9vcGFjaXR5Jzogb3BhY2l0eVxuICAgIH07XG59O1xuXG5jb25zdCBmaWxsRXh0cnVzaW9uUGF0dGVyblVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgbWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgcGFpbnRlcjogUGFpbnRlcixcbiAgICBzaG91bGRVc2VWZXJ0aWNhbEdyYWRpZW50OiBib29sZWFuLFxuICAgIG9wYWNpdHk6IG51bWJlcixcbiAgICBjb29yZDogT3ZlcnNjYWxlZFRpbGVJRCxcbiAgICBjcm9zc2ZhZGU6IENyb3NzZmFkZVBhcmFtZXRlcnMsXG4gICAgdGlsZTogVGlsZVxuKTogVW5pZm9ybVZhbHVlczxGaWxsRXh0cnVzaW9uUGF0dGVyblVuaWZvcm1zVHlwZT4gPT4ge1xuICAgIHJldHVybiBleHRlbmQoZmlsbEV4dHJ1c2lvblVuaWZvcm1WYWx1ZXMobWF0cml4LCBwYWludGVyLCBzaG91bGRVc2VWZXJ0aWNhbEdyYWRpZW50LCBvcGFjaXR5KSxcbiAgICAgICAgcGF0dGVyblVuaWZvcm1WYWx1ZXMoY3Jvc3NmYWRlLCBwYWludGVyLCB0aWxlKSxcbiAgICAgICAge1xuICAgICAgICAgICAgJ3VfaGVpZ2h0X2ZhY3Rvcic6IC1NYXRoLnBvdygyLCBjb29yZC5vdmVyc2NhbGVkWikgLyB0aWxlLnRpbGVTaXplIC8gOFxuICAgICAgICB9KTtcbn07XG5cbmV4cG9ydCB7XG4gICAgZmlsbEV4dHJ1c2lvblVuaWZvcm1zLFxuICAgIGZpbGxFeHRydXNpb25QYXR0ZXJuVW5pZm9ybXMsXG4gICAgZmlsbEV4dHJ1c2lvblVuaWZvcm1WYWx1ZXMsXG4gICAgZmlsbEV4dHJ1c2lvblBhdHRlcm5Vbmlmb3JtVmFsdWVzXG59O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtwYXR0ZXJuVW5pZm9ybVZhbHVlc30gZnJvbSAnLi9wYXR0ZXJuJztcbmltcG9ydCB7XG4gICAgVW5pZm9ybTFpLFxuICAgIFVuaWZvcm0xZixcbiAgICBVbmlmb3JtMmYsXG4gICAgVW5pZm9ybTNmLFxuICAgIFVuaWZvcm1NYXRyaXg0ZlxufSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHtleHRlbmR9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5cbmltcG9ydCB0eXBlIFBhaW50ZXIgZnJvbSAnLi4vcGFpbnRlcic7XG5pbXBvcnQgdHlwZSB7VW5pZm9ybVZhbHVlcywgVW5pZm9ybUxvY2F0aW9uc30gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7Q3Jvc3NmYWRlUGFyYW1ldGVyc30gZnJvbSAnLi4vLi4vc3R5bGUvZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcbmltcG9ydCB0eXBlIFRpbGUgZnJvbSAnLi4vLi4vc291cmNlL3RpbGUnO1xuXG5leHBvcnQgdHlwZSBGaWxsVW5pZm9ybXNUeXBlID0ge3xcbiAgICAndV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGZcbnx9O1xuXG5leHBvcnQgdHlwZSBGaWxsT3V0bGluZVVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X3dvcmxkJzogVW5pZm9ybTJmXG58fTtcblxuZXhwb3J0IHR5cGUgRmlsbFBhdHRlcm5Vbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAvLyBwYXR0ZXJuIHVuaWZvcm1zOlxuICAgICd1X3RleHNpemUnOiBVbmlmb3JtMmYsXG4gICAgJ3VfaW1hZ2UnOiBVbmlmb3JtMWksXG4gICAgJ3VfcGl4ZWxfY29vcmRfdXBwZXInOiBVbmlmb3JtMmYsXG4gICAgJ3VfcGl4ZWxfY29vcmRfbG93ZXInOiBVbmlmb3JtMmYsXG4gICAgJ3Vfc2NhbGUnOiBVbmlmb3JtM2YsXG4gICAgJ3VfZmFkZSc6IFVuaWZvcm0xZlxufH07XG5cbmV4cG9ydCB0eXBlIEZpbGxPdXRsaW5lUGF0dGVyblVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X3dvcmxkJzogVW5pZm9ybTJmLFxuICAgIC8vIHBhdHRlcm4gdW5pZm9ybXM6XG4gICAgJ3VfdGV4c2l6ZSc6IFVuaWZvcm0yZixcbiAgICAndV9pbWFnZSc6IFVuaWZvcm0xaSxcbiAgICAndV9waXhlbF9jb29yZF91cHBlcic6IFVuaWZvcm0yZixcbiAgICAndV9waXhlbF9jb29yZF9sb3dlcic6IFVuaWZvcm0yZixcbiAgICAndV9zY2FsZSc6IFVuaWZvcm0zZixcbiAgICAndV9mYWRlJzogVW5pZm9ybTFmXG58fTtcblxuY29uc3QgZmlsbFVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IEZpbGxVbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeClcbn0pO1xuXG5jb25zdCBmaWxsUGF0dGVyblVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IEZpbGxQYXR0ZXJuVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X2ltYWdlJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pbWFnZSksXG4gICAgJ3VfdGV4c2l6ZSc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfdGV4c2l6ZSksXG4gICAgJ3VfcGl4ZWxfY29vcmRfdXBwZXInOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3BpeGVsX2Nvb3JkX3VwcGVyKSxcbiAgICAndV9waXhlbF9jb29yZF9sb3dlcic6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfcGl4ZWxfY29vcmRfbG93ZXIpLFxuICAgICd1X3NjYWxlJzogbmV3IFVuaWZvcm0zZihjb250ZXh0LCBsb2NhdGlvbnMudV9zY2FsZSksXG4gICAgJ3VfZmFkZSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfZmFkZSlcblxufSk7XG5cbmNvbnN0IGZpbGxPdXRsaW5lVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogRmlsbE91dGxpbmVVbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeCksXG4gICAgJ3Vfd29ybGQnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3dvcmxkKVxufSk7XG5cbmNvbnN0IGZpbGxPdXRsaW5lUGF0dGVyblVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IEZpbGxPdXRsaW5lUGF0dGVyblVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KSxcbiAgICAndV93b3JsZCc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfd29ybGQpLFxuICAgICd1X2ltYWdlJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pbWFnZSksXG4gICAgJ3VfdGV4c2l6ZSc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfdGV4c2l6ZSksXG4gICAgJ3VfcGl4ZWxfY29vcmRfdXBwZXInOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3BpeGVsX2Nvb3JkX3VwcGVyKSxcbiAgICAndV9waXhlbF9jb29yZF9sb3dlcic6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfcGl4ZWxfY29vcmRfbG93ZXIpLFxuICAgICd1X3NjYWxlJzogbmV3IFVuaWZvcm0zZihjb250ZXh0LCBsb2NhdGlvbnMudV9zY2FsZSksXG4gICAgJ3VfZmFkZSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfZmFkZSlcbn0pO1xuXG5jb25zdCBmaWxsVW5pZm9ybVZhbHVlcyA9IChtYXRyaXg6IEZsb2F0MzJBcnJheSk6IFVuaWZvcm1WYWx1ZXM8RmlsbFVuaWZvcm1zVHlwZT4gPT4gKHtcbiAgICAndV9tYXRyaXgnOiBtYXRyaXhcbn0pO1xuXG5jb25zdCBmaWxsUGF0dGVyblVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgbWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgcGFpbnRlcjogUGFpbnRlcixcbiAgICBjcm9zc2ZhZGU6IENyb3NzZmFkZVBhcmFtZXRlcnMsXG4gICAgdGlsZTogVGlsZVxuKTogVW5pZm9ybVZhbHVlczxGaWxsUGF0dGVyblVuaWZvcm1zVHlwZT4gPT4gZXh0ZW5kKFxuICAgIGZpbGxVbmlmb3JtVmFsdWVzKG1hdHJpeCksXG4gICAgcGF0dGVyblVuaWZvcm1WYWx1ZXMoY3Jvc3NmYWRlLCBwYWludGVyLCB0aWxlKVxuKTtcblxuY29uc3QgZmlsbE91dGxpbmVVbmlmb3JtVmFsdWVzID0gKFxuICAgIG1hdHJpeDogRmxvYXQzMkFycmF5LFxuICAgIGRyYXdpbmdCdWZmZXJTaXplOiBbbnVtYmVyLCBudW1iZXJdXG4pOiBVbmlmb3JtVmFsdWVzPEZpbGxPdXRsaW5lVW5pZm9ybXNUeXBlPiA9PiAoe1xuICAgICd1X21hdHJpeCc6IG1hdHJpeCxcbiAgICAndV93b3JsZCc6IGRyYXdpbmdCdWZmZXJTaXplXG59KTtcblxuY29uc3QgZmlsbE91dGxpbmVQYXR0ZXJuVW5pZm9ybVZhbHVlcyA9IChcbiAgICBtYXRyaXg6IEZsb2F0MzJBcnJheSxcbiAgICBwYWludGVyOiBQYWludGVyLFxuICAgIGNyb3NzZmFkZTogQ3Jvc3NmYWRlUGFyYW1ldGVycyxcbiAgICB0aWxlOiBUaWxlLFxuICAgIGRyYXdpbmdCdWZmZXJTaXplOiBbbnVtYmVyLCBudW1iZXJdXG4pOiBVbmlmb3JtVmFsdWVzPEZpbGxPdXRsaW5lUGF0dGVyblVuaWZvcm1zVHlwZT4gPT4gZXh0ZW5kKFxuICAgIGZpbGxQYXR0ZXJuVW5pZm9ybVZhbHVlcyhtYXRyaXgsIHBhaW50ZXIsIGNyb3NzZmFkZSwgdGlsZSksXG4gICAge1xuICAgICAgICAndV93b3JsZCc6IGRyYXdpbmdCdWZmZXJTaXplXG4gICAgfVxuKTtcblxuZXhwb3J0IHtcbiAgICBmaWxsVW5pZm9ybXMsXG4gICAgZmlsbFBhdHRlcm5Vbmlmb3JtcyxcbiAgICBmaWxsT3V0bGluZVVuaWZvcm1zLFxuICAgIGZpbGxPdXRsaW5lUGF0dGVyblVuaWZvcm1zLFxuICAgIGZpbGxVbmlmb3JtVmFsdWVzLFxuICAgIGZpbGxQYXR0ZXJuVW5pZm9ybVZhbHVlcyxcbiAgICBmaWxsT3V0bGluZVVuaWZvcm1WYWx1ZXMsXG4gICAgZmlsbE91dGxpbmVQYXR0ZXJuVW5pZm9ybVZhbHVlc1xufTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7XG4gICAgVW5pZm9ybTFpLFxuICAgIFVuaWZvcm0xZixcbiAgICBVbmlmb3JtMmYsXG4gICAgVW5pZm9ybU1hdHJpeDRmXG59IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQgcGl4ZWxzVG9UaWxlVW5pdHMgZnJvbSAnLi4vLi4vc291cmNlL3BpeGVsc190b190aWxlX3VuaXRzJztcblxuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi8uLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtVbmlmb3JtVmFsdWVzLCBVbmlmb3JtTG9jYXRpb25zfSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uLy4uL3NvdXJjZS90aWxlX2lkJztcbmltcG9ydCB0eXBlIFRpbGUgZnJvbSAnLi4vLi4vc291cmNlL3RpbGUnO1xuaW1wb3J0IHR5cGUgQ2lyY2xlU3R5bGVMYXllciBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZV9sYXllci9jaXJjbGVfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuLi9wYWludGVyJztcbmltcG9ydCBicm93c2VyIGZyb20gJy4uLy4uL3V0aWwvYnJvd3Nlcic7XG5cbmV4cG9ydCB0eXBlIENpcmNsZVVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSc6IFVuaWZvcm0xZixcbiAgICAndV9zY2FsZV93aXRoX21hcCc6IFVuaWZvcm0xaSxcbiAgICAndV9waXRjaF93aXRoX21hcCc6IFVuaWZvcm0xaSxcbiAgICAndV9leHRydWRlX3NjYWxlJzogVW5pZm9ybTJmLFxuICAgICd1X2RldmljZV9waXhlbF9yYXRpbyc6IFVuaWZvcm0xZixcbiAgICAndV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGZcbnx9O1xuXG5jb25zdCBjaXJjbGVVbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBDaXJjbGVVbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlKSxcbiAgICAndV9zY2FsZV93aXRoX21hcCc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfc2NhbGVfd2l0aF9tYXApLFxuICAgICd1X3BpdGNoX3dpdGhfbWFwJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9waXRjaF93aXRoX21hcCksXG4gICAgJ3VfZXh0cnVkZV9zY2FsZSc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfZXh0cnVkZV9zY2FsZSksXG4gICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9kZXZpY2VfcGl4ZWxfcmF0aW8pLFxuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KVxufSk7XG5cbmNvbnN0IGNpcmNsZVVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgcGFpbnRlcjogUGFpbnRlcixcbiAgICBjb29yZDogT3ZlcnNjYWxlZFRpbGVJRCxcbiAgICB0aWxlOiBUaWxlLFxuICAgIGxheWVyOiBDaXJjbGVTdHlsZUxheWVyXG4pOiBVbmlmb3JtVmFsdWVzPENpcmNsZVVuaWZvcm1zVHlwZT4gPT4ge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IHBhaW50ZXIudHJhbnNmb3JtO1xuXG4gICAgbGV0IHBpdGNoV2l0aE1hcDogYm9vbGVhbiwgZXh0cnVkZVNjYWxlOiBbbnVtYmVyLCBudW1iZXJdO1xuICAgIGlmIChsYXllci5wYWludC5nZXQoJ2NpcmNsZS1waXRjaC1hbGlnbm1lbnQnKSA9PT0gJ21hcCcpIHtcbiAgICAgICAgY29uc3QgcGl4ZWxSYXRpbyA9IHBpeGVsc1RvVGlsZVVuaXRzKHRpbGUsIDEsIHRyYW5zZm9ybS56b29tKTtcbiAgICAgICAgcGl0Y2hXaXRoTWFwID0gdHJ1ZTtcbiAgICAgICAgZXh0cnVkZVNjYWxlID0gW3BpeGVsUmF0aW8sIHBpeGVsUmF0aW9dO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHBpdGNoV2l0aE1hcCA9IGZhbHNlO1xuICAgICAgICBleHRydWRlU2NhbGUgPSB0cmFuc2Zvcm0ucGl4ZWxzVG9HTFVuaXRzO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgICd1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UnOiB0cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSxcbiAgICAgICAgJ3Vfc2NhbGVfd2l0aF9tYXAnOiArKGxheWVyLnBhaW50LmdldCgnY2lyY2xlLXBpdGNoLXNjYWxlJykgPT09ICdtYXAnKSxcbiAgICAgICAgJ3VfbWF0cml4JzogcGFpbnRlci50cmFuc2xhdGVQb3NNYXRyaXgoXG4gICAgICAgICAgICBjb29yZC5wb3NNYXRyaXgsXG4gICAgICAgICAgICB0aWxlLFxuICAgICAgICAgICAgbGF5ZXIucGFpbnQuZ2V0KCdjaXJjbGUtdHJhbnNsYXRlJyksXG4gICAgICAgICAgICBsYXllci5wYWludC5nZXQoJ2NpcmNsZS10cmFuc2xhdGUtYW5jaG9yJykpLFxuICAgICAgICAndV9waXRjaF93aXRoX21hcCc6ICsocGl0Y2hXaXRoTWFwKSxcbiAgICAgICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLFxuICAgICAgICAndV9leHRydWRlX3NjYWxlJzogZXh0cnVkZVNjYWxlXG4gICAgfTtcbn07XG5cbmV4cG9ydCB7Y2lyY2xlVW5pZm9ybXMsIGNpcmNsZVVuaWZvcm1WYWx1ZXN9O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtcbiAgICBVbmlmb3JtMWYsXG4gICAgVW5pZm9ybTJmLFxuICAgIFVuaWZvcm1NYXRyaXg0ZlxufSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHBpeGVsc1RvVGlsZVVuaXRzIGZyb20gJy4uLy4uL3NvdXJjZS9waXhlbHNfdG9fdGlsZV91bml0cyc7XG5cbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VW5pZm9ybVZhbHVlcywgVW5pZm9ybUxvY2F0aW9uc30gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi8uLi9nZW8vdHJhbnNmb3JtJztcbmltcG9ydCB0eXBlIFRpbGUgZnJvbSAnLi4vLi4vc291cmNlL3RpbGUnO1xuXG5leHBvcnQgdHlwZSBDb2xsaXNpb25Vbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlJzogVW5pZm9ybTFmLFxuICAgICd1X3BpeGVsc190b190aWxlX3VuaXRzJzogVW5pZm9ybTFmLFxuICAgICd1X2V4dHJ1ZGVfc2NhbGUnOiBVbmlmb3JtMmYsXG4gICAgJ3Vfb3ZlcnNjYWxlX2ZhY3Rvcic6IFVuaWZvcm0xZlxufH07XG5cbmV4cG9ydCB0eXBlIENvbGxpc2lvbkNpcmNsZVVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X2ludl9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGYsXG4gICAgJ3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSc6IFVuaWZvcm0xZixcbiAgICAndV92aWV3cG9ydF9zaXplJzogVW5pZm9ybTJmXG58fTtcblxuY29uc3QgY29sbGlzaW9uVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogQ29sbGlzaW9uVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UpLFxuICAgICd1X3BpeGVsc190b190aWxlX3VuaXRzJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9waXhlbHNfdG9fdGlsZV91bml0cyksXG4gICAgJ3VfZXh0cnVkZV9zY2FsZSc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfZXh0cnVkZV9zY2FsZSksXG4gICAgJ3Vfb3ZlcnNjYWxlX2ZhY3Rvcic6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfb3ZlcnNjYWxlX2ZhY3Rvcilcbn0pO1xuXG5jb25zdCBjb2xsaXNpb25DaXJjbGVVbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBDb2xsaXNpb25DaXJjbGVVbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeCksXG4gICAgJ3VfaW52X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfaW52X21hdHJpeCksXG4gICAgJ3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSksXG4gICAgJ3Vfdmlld3BvcnRfc2l6ZSc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfdmlld3BvcnRfc2l6ZSlcbn0pO1xuXG5jb25zdCBjb2xsaXNpb25Vbmlmb3JtVmFsdWVzID0gKFxuICAgIG1hdHJpeDogRmxvYXQzMkFycmF5LFxuICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtLFxuICAgIHRpbGU6IFRpbGVcbik6IFVuaWZvcm1WYWx1ZXM8Q29sbGlzaW9uVW5pZm9ybXNUeXBlPiA9PiB7XG4gICAgY29uc3QgcGl4ZWxSYXRpbyA9IHBpeGVsc1RvVGlsZVVuaXRzKHRpbGUsIDEsIHRyYW5zZm9ybS56b29tKTtcbiAgICBjb25zdCBzY2FsZSA9IE1hdGgucG93KDIsIHRyYW5zZm9ybS56b29tIC0gdGlsZS50aWxlSUQub3ZlcnNjYWxlZFopO1xuICAgIGNvbnN0IG92ZXJzY2FsZUZhY3RvciA9IHRpbGUudGlsZUlELm92ZXJzY2FsZUZhY3RvcigpO1xuICAgIHJldHVybiB7XG4gICAgICAgICd1X21hdHJpeCc6IG1hdHJpeCxcbiAgICAgICAgJ3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSc6IHRyYW5zZm9ybS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlLFxuICAgICAgICAndV9waXhlbHNfdG9fdGlsZV91bml0cyc6IHBpeGVsUmF0aW8sXG4gICAgICAgICd1X2V4dHJ1ZGVfc2NhbGUnOiBbdHJhbnNmb3JtLnBpeGVsc1RvR0xVbml0c1swXSAvIChwaXhlbFJhdGlvICogc2NhbGUpLFxuICAgICAgICAgICAgdHJhbnNmb3JtLnBpeGVsc1RvR0xVbml0c1sxXSAvIChwaXhlbFJhdGlvICogc2NhbGUpXSxcbiAgICAgICAgJ3Vfb3ZlcnNjYWxlX2ZhY3Rvcic6IG92ZXJzY2FsZUZhY3RvclxuICAgIH07XG59O1xuXG5jb25zdCBjb2xsaXNpb25DaXJjbGVVbmlmb3JtVmFsdWVzID0gKFxuICAgIG1hdHJpeDogRmxvYXQzMkFycmF5LFxuICAgIGludk1hdHJpeDogRmxvYXQzMkFycmF5LFxuICAgIHRyYW5zZm9ybTogVHJhbnNmb3JtXG4pOiBVbmlmb3JtVmFsdWVzPENvbGxpc2lvbkNpcmNsZVVuaWZvcm1zVHlwZT4gPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAgICd1X21hdHJpeCc6IG1hdHJpeCxcbiAgICAgICAgJ3VfaW52X21hdHJpeCc6IGludk1hdHJpeCxcbiAgICAgICAgJ3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSc6IHRyYW5zZm9ybS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlLFxuICAgICAgICAndV92aWV3cG9ydF9zaXplJzogW3RyYW5zZm9ybS53aWR0aCwgdHJhbnNmb3JtLmhlaWdodF1cbiAgICB9O1xufTtcblxuZXhwb3J0IHtjb2xsaXNpb25Vbmlmb3JtcywgY29sbGlzaW9uVW5pZm9ybVZhbHVlcywgY29sbGlzaW9uQ2lyY2xlVW5pZm9ybXMsIGNvbGxpc2lvbkNpcmNsZVVuaWZvcm1WYWx1ZXN9O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtcbiAgICBVbmlmb3JtQ29sb3IsXG4gICAgVW5pZm9ybU1hdHJpeDRmLFxuICAgIFVuaWZvcm0xaSxcbiAgICBVbmlmb3JtMWZcbn0gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcblxuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi8uLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtVbmlmb3JtVmFsdWVzLCBVbmlmb3JtTG9jYXRpb25zfSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHR5cGUgQ29sb3IgZnJvbSAnLi4vLi4vc3R5bGUtc3BlYy91dGlsL2NvbG9yJztcblxuZXhwb3J0IHR5cGUgRGVidWdVbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X2NvbG9yJzogVW5pZm9ybUNvbG9yLFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9vdmVybGF5JzogVW5pZm9ybTFpLFxuICAgICd1X292ZXJsYXlfc2NhbGUnOiBVbmlmb3JtMWZcbnx9O1xuXG5jb25zdCBkZWJ1Z1VuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IERlYnVnVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfY29sb3InOiBuZXcgVW5pZm9ybUNvbG9yKGNvbnRleHQsIGxvY2F0aW9ucy51X2NvbG9yKSxcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeCksXG4gICAgJ3Vfb3ZlcmxheSc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfb3ZlcmxheSksXG4gICAgJ3Vfb3ZlcmxheV9zY2FsZSc6ICBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X292ZXJsYXlfc2NhbGUpLFxufSk7XG5cbmNvbnN0IGRlYnVnVW5pZm9ybVZhbHVlcyA9IChtYXRyaXg6IEZsb2F0MzJBcnJheSwgY29sb3I6IENvbG9yLCBzY2FsZVJhdGlvOiBudW1iZXIgPSAxKTogVW5pZm9ybVZhbHVlczxEZWJ1Z1VuaWZvcm1zVHlwZT4gPT4gKHtcbiAgICAndV9tYXRyaXgnOiBtYXRyaXgsXG4gICAgJ3VfY29sb3InOiBjb2xvcixcbiAgICAndV9vdmVybGF5JzogMCxcbiAgICAndV9vdmVybGF5X3NjYWxlJzogc2NhbGVSYXRpb1xufSk7XG5cbmV4cG9ydCB7ZGVidWdVbmlmb3JtcywgZGVidWdVbmlmb3JtVmFsdWVzfTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7VW5pZm9ybU1hdHJpeDRmfSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuXG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uLy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1VuaWZvcm1WYWx1ZXMsIFVuaWZvcm1Mb2NhdGlvbnN9IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5cbmV4cG9ydCB0eXBlIENsaXBwaW5nTWFza1VuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmXG58fTtcblxuY29uc3QgY2xpcHBpbmdNYXNrVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogQ2xpcHBpbmdNYXNrVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpXG59KTtcblxuY29uc3QgY2xpcHBpbmdNYXNrVW5pZm9ybVZhbHVlcyA9IChtYXRyaXg6IEZsb2F0MzJBcnJheSk6IFVuaWZvcm1WYWx1ZXM8Q2xpcHBpbmdNYXNrVW5pZm9ybXNUeXBlPiA9PiAoe1xuICAgICd1X21hdHJpeCc6IG1hdHJpeFxufSk7XG5cbmV4cG9ydCB7Y2xpcHBpbmdNYXNrVW5pZm9ybXMsIGNsaXBwaW5nTWFza1VuaWZvcm1WYWx1ZXN9O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHttYXQ0fSBmcm9tICdnbC1tYXRyaXgnO1xuXG5pbXBvcnQge1xuICAgIFVuaWZvcm0xaSxcbiAgICBVbmlmb3JtMWYsXG4gICAgVW5pZm9ybTJmLFxuICAgIFVuaWZvcm1NYXRyaXg0ZlxufSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHBpeGVsc1RvVGlsZVVuaXRzIGZyb20gJy4uLy4uL3NvdXJjZS9waXhlbHNfdG9fdGlsZV91bml0cyc7XG5cbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSBUaWxlIGZyb20gJy4uLy4uL3NvdXJjZS90aWxlJztcbmltcG9ydCB0eXBlIHtVbmlmb3JtVmFsdWVzLCBVbmlmb3JtTG9jYXRpb25zfSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuLi9wYWludGVyJztcbmltcG9ydCB0eXBlIEhlYXRtYXBTdHlsZUxheWVyIGZyb20gJy4uLy4uL3N0eWxlL3N0eWxlX2xheWVyL2hlYXRtYXBfc3R5bGVfbGF5ZXInO1xuXG5leHBvcnQgdHlwZSBIZWF0bWFwVW5pZm9ybXNUeXBlID0ge3xcbiAgICAndV9leHRydWRlX3NjYWxlJzogVW5pZm9ybTFmLFxuICAgICd1X2ludGVuc2l0eSc6IFVuaWZvcm0xZixcbiAgICAndV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGZcbnx9O1xuXG5leHBvcnQgdHlwZSBIZWF0bWFwVGV4dHVyZVVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X3dvcmxkJzogVW5pZm9ybTJmLFxuICAgICd1X2ltYWdlJzogVW5pZm9ybTFpLFxuICAgICd1X2NvbG9yX3JhbXAnOiBVbmlmb3JtMWksXG4gICAgJ3Vfb3BhY2l0eSc6IFVuaWZvcm0xZlxufH07XG5cbmNvbnN0IGhlYXRtYXBVbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBIZWF0bWFwVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfZXh0cnVkZV9zY2FsZSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfZXh0cnVkZV9zY2FsZSksXG4gICAgJ3VfaW50ZW5zaXR5JzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9pbnRlbnNpdHkpLFxuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KVxufSk7XG5cbmNvbnN0IGhlYXRtYXBUZXh0dXJlVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogSGVhdG1hcFRleHR1cmVVbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeCksXG4gICAgJ3Vfd29ybGQnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3dvcmxkKSxcbiAgICAndV9pbWFnZSc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaW1hZ2UpLFxuICAgICd1X2NvbG9yX3JhbXAnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X2NvbG9yX3JhbXApLFxuICAgICd1X29wYWNpdHknOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X29wYWNpdHkpXG59KTtcblxuY29uc3QgaGVhdG1hcFVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgbWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgdGlsZTogVGlsZSxcbiAgICB6b29tOiBudW1iZXIsXG4gICAgaW50ZW5zaXR5OiBudW1iZXJcbik6IFVuaWZvcm1WYWx1ZXM8SGVhdG1hcFVuaWZvcm1zVHlwZT4gPT4gKHtcbiAgICAndV9tYXRyaXgnOiBtYXRyaXgsXG4gICAgJ3VfZXh0cnVkZV9zY2FsZSc6IHBpeGVsc1RvVGlsZVVuaXRzKHRpbGUsIDEsIHpvb20pLFxuICAgICd1X2ludGVuc2l0eSc6IGludGVuc2l0eVxufSk7XG5cbmNvbnN0IGhlYXRtYXBUZXh0dXJlVW5pZm9ybVZhbHVlcyA9IChcbiAgICBwYWludGVyOiBQYWludGVyLFxuICAgIGxheWVyOiBIZWF0bWFwU3R5bGVMYXllcixcbiAgICB0ZXh0dXJlVW5pdDogbnVtYmVyLFxuICAgIGNvbG9yUmFtcFVuaXQ6IG51bWJlclxuKTogVW5pZm9ybVZhbHVlczxIZWF0bWFwVGV4dHVyZVVuaWZvcm1zVHlwZT4gPT4ge1xuICAgIGNvbnN0IG1hdHJpeCA9IG1hdDQuY3JlYXRlKCk7XG4gICAgbWF0NC5vcnRobyhtYXRyaXgsIDAsIHBhaW50ZXIud2lkdGgsIHBhaW50ZXIuaGVpZ2h0LCAwLCAwLCAxKTtcblxuICAgIGNvbnN0IGdsID0gcGFpbnRlci5jb250ZXh0LmdsO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ3VfbWF0cml4JzogbWF0cml4LFxuICAgICAgICAndV93b3JsZCc6IFtnbC5kcmF3aW5nQnVmZmVyV2lkdGgsIGdsLmRyYXdpbmdCdWZmZXJIZWlnaHRdLFxuICAgICAgICAndV9pbWFnZSc6IHRleHR1cmVVbml0LFxuICAgICAgICAndV9jb2xvcl9yYW1wJzogY29sb3JSYW1wVW5pdCxcbiAgICAgICAgJ3Vfb3BhY2l0eSc6IGxheWVyLnBhaW50LmdldCgnaGVhdG1hcC1vcGFjaXR5JylcbiAgICB9O1xufTtcblxuZXhwb3J0IHtcbiAgICBoZWF0bWFwVW5pZm9ybXMsXG4gICAgaGVhdG1hcFRleHR1cmVVbmlmb3JtcyxcbiAgICBoZWF0bWFwVW5pZm9ybVZhbHVlcyxcbiAgICBoZWF0bWFwVGV4dHVyZVVuaWZvcm1WYWx1ZXNcbn07XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge21hdDR9IGZyb20gJ2dsLW1hdHJpeCc7XG5cbmltcG9ydCB7XG4gICAgVW5pZm9ybTFpLFxuICAgIFVuaWZvcm0xZixcbiAgICBVbmlmb3JtMmYsXG4gICAgVW5pZm9ybUNvbG9yLFxuICAgIFVuaWZvcm1NYXRyaXg0ZixcbiAgICBVbmlmb3JtNGZcbn0gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi4vLi4vZGF0YS9leHRlbnQnO1xuaW1wb3J0IE1lcmNhdG9yQ29vcmRpbmF0ZSBmcm9tICcuLi8uLi9nZW8vbWVyY2F0b3JfY29vcmRpbmF0ZSc7XG5cbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSB7VW5pZm9ybVZhbHVlcywgVW5pZm9ybUxvY2F0aW9uc30gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCB0eXBlIFRpbGUgZnJvbSAnLi4vLi4vc291cmNlL3RpbGUnO1xuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuLi9wYWludGVyJztcbmltcG9ydCB0eXBlIEhpbGxzaGFkZVN0eWxlTGF5ZXIgZnJvbSAnLi4vLi4vc3R5bGUvc3R5bGVfbGF5ZXIvaGlsbHNoYWRlX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIERFTURhdGEgZnJvbSAnLi4vLi4vZGF0YS9kZW1fZGF0YSc7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi4vLi4vc291cmNlL3RpbGVfaWQnO1xuXG5leHBvcnQgdHlwZSBIaWxsc2hhZGVVbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9pbWFnZSc6IFVuaWZvcm0xaSxcbiAgICAndV9sYXRyYW5nZSc6IFVuaWZvcm0yZixcbiAgICAndV9saWdodCc6IFVuaWZvcm0yZixcbiAgICAndV9zaGFkb3cnOiBVbmlmb3JtQ29sb3IsXG4gICAgJ3VfaGlnaGxpZ2h0JzogVW5pZm9ybUNvbG9yLFxuICAgICd1X2FjY2VudCc6IFVuaWZvcm1Db2xvclxufH07XG5cbmV4cG9ydCB0eXBlIEhpbGxzaGFkZVByZXBhcmVVbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9pbWFnZSc6IFVuaWZvcm0xaSxcbiAgICAndV9kaW1lbnNpb24nOiBVbmlmb3JtMmYsXG4gICAgJ3Vfem9vbSc6IFVuaWZvcm0xZixcbiAgICAndV9tYXh6b29tJzogVW5pZm9ybTFmLFxuICAgICd1X3VucGFjayc6IFVuaWZvcm00ZlxufH07XG5cbmNvbnN0IGhpbGxzaGFkZVVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IEhpbGxzaGFkZVVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KSxcbiAgICAndV9pbWFnZSc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaW1hZ2UpLFxuICAgICd1X2xhdHJhbmdlJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV9sYXRyYW5nZSksXG4gICAgJ3VfbGlnaHQnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X2xpZ2h0KSxcbiAgICAndV9zaGFkb3cnOiBuZXcgVW5pZm9ybUNvbG9yKGNvbnRleHQsIGxvY2F0aW9ucy51X3NoYWRvdyksXG4gICAgJ3VfaGlnaGxpZ2h0JzogbmV3IFVuaWZvcm1Db2xvcihjb250ZXh0LCBsb2NhdGlvbnMudV9oaWdobGlnaHQpLFxuICAgICd1X2FjY2VudCc6IG5ldyBVbmlmb3JtQ29sb3IoY29udGV4dCwgbG9jYXRpb25zLnVfYWNjZW50KVxufSk7XG5cbmNvbnN0IGhpbGxzaGFkZVByZXBhcmVVbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBIaWxsc2hhZGVQcmVwYXJlVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X2ltYWdlJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pbWFnZSksXG4gICAgJ3VfZGltZW5zaW9uJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV9kaW1lbnNpb24pLFxuICAgICd1X3pvb20nOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3pvb20pLFxuICAgICd1X21heHpvb20nOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X21heHpvb20pLFxuICAgICd1X3VucGFjayc6IG5ldyBVbmlmb3JtNGYoY29udGV4dCwgbG9jYXRpb25zLnVfdW5wYWNrKVxufSk7XG5cbmNvbnN0IGhpbGxzaGFkZVVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgcGFpbnRlcjogUGFpbnRlcixcbiAgICB0aWxlOiBUaWxlLFxuICAgIGxheWVyOiBIaWxsc2hhZGVTdHlsZUxheWVyXG4pOiBVbmlmb3JtVmFsdWVzPEhpbGxzaGFkZVVuaWZvcm1zVHlwZT4gPT4ge1xuICAgIGNvbnN0IHNoYWRvdyA9IGxheWVyLnBhaW50LmdldChcImhpbGxzaGFkZS1zaGFkb3ctY29sb3JcIik7XG4gICAgY29uc3QgaGlnaGxpZ2h0ID0gbGF5ZXIucGFpbnQuZ2V0KFwiaGlsbHNoYWRlLWhpZ2hsaWdodC1jb2xvclwiKTtcbiAgICBjb25zdCBhY2NlbnQgPSBsYXllci5wYWludC5nZXQoXCJoaWxsc2hhZGUtYWNjZW50LWNvbG9yXCIpO1xuXG4gICAgbGV0IGF6aW11dGhhbCA9IGxheWVyLnBhaW50LmdldCgnaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1kaXJlY3Rpb24nKSAqIChNYXRoLlBJIC8gMTgwKTtcbiAgICAvLyBtb2RpZnkgYXppbXV0aGFsIGFuZ2xlIGJ5IG1hcCByb3RhdGlvbiBpZiBsaWdodCBpcyBhbmNob3JlZCBhdCB0aGUgdmlld3BvcnRcbiAgICBpZiAobGF5ZXIucGFpbnQuZ2V0KCdoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWFuY2hvcicpID09PSAndmlld3BvcnQnKSB7XG4gICAgICAgIGF6aW11dGhhbCAtPSBwYWludGVyLnRyYW5zZm9ybS5hbmdsZTtcbiAgICB9XG4gICAgY29uc3QgYWxpZ24gPSAhcGFpbnRlci5vcHRpb25zLm1vdmluZztcbiAgICByZXR1cm4ge1xuICAgICAgICAndV9tYXRyaXgnOiBwYWludGVyLnRyYW5zZm9ybS5jYWxjdWxhdGVQb3NNYXRyaXgodGlsZS50aWxlSUQudG9VbndyYXBwZWQoKSwgYWxpZ24pLFxuICAgICAgICAndV9pbWFnZSc6IDAsXG4gICAgICAgICd1X2xhdHJhbmdlJzogZ2V0VGlsZUxhdFJhbmdlKHBhaW50ZXIsIHRpbGUudGlsZUlEKSxcbiAgICAgICAgJ3VfbGlnaHQnOiBbbGF5ZXIucGFpbnQuZ2V0KCdoaWxsc2hhZGUtZXhhZ2dlcmF0aW9uJyksIGF6aW11dGhhbF0sXG4gICAgICAgICd1X3NoYWRvdyc6IHNoYWRvdyxcbiAgICAgICAgJ3VfaGlnaGxpZ2h0JzogaGlnaGxpZ2h0LFxuICAgICAgICAndV9hY2NlbnQnOiBhY2NlbnRcbiAgICB9O1xufTtcblxuY29uc3QgaGlsbHNoYWRlVW5pZm9ybVByZXBhcmVWYWx1ZXMgPSAoXG4gICAgdGlsZUlEOiBPdmVyc2NhbGVkVGlsZUlELCBkZW06IERFTURhdGEsIG1heHpvb206IG51bWJlclxuKTogVW5pZm9ybVZhbHVlczxIaWxsc2hhZGVQcmVwYXJlVW5pZm9ybXNUeXBlPiA9PiB7XG5cbiAgICBjb25zdCBzdHJpZGUgPSBkZW0uc3RyaWRlO1xuICAgIGNvbnN0IG1hdHJpeCA9IG1hdDQuY3JlYXRlKCk7XG4gICAgLy8gRmxpcCByZW5kZXJpbmcgYXQgeSBheGlzLlxuICAgIG1hdDQub3J0aG8obWF0cml4LCAwLCBFWFRFTlQsIC1FWFRFTlQsIDAsIDAsIDEpO1xuICAgIG1hdDQudHJhbnNsYXRlKG1hdHJpeCwgbWF0cml4LCBbMCwgLUVYVEVOVCwgMF0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ3VfbWF0cml4JzogbWF0cml4LFxuICAgICAgICAndV9pbWFnZSc6IDEsXG4gICAgICAgICd1X2RpbWVuc2lvbic6IFtzdHJpZGUsIHN0cmlkZV0sXG4gICAgICAgICd1X3pvb20nOiB0aWxlSUQub3ZlcnNjYWxlZFosXG4gICAgICAgICd1X21heHpvb20nOiBtYXh6b29tLFxuICAgICAgICAndV91bnBhY2snOiBkZW0uZ2V0VW5wYWNrVmVjdG9yKClcbiAgICB9O1xufTtcblxuZnVuY3Rpb24gZ2V0VGlsZUxhdFJhbmdlKHBhaW50ZXI6IFBhaW50ZXIsIHRpbGVJRDogT3ZlcnNjYWxlZFRpbGVJRCkge1xuICAgIC8vIGZvciBzY2FsaW5nIHRoZSBtYWduaXR1ZGUgb2YgYSBwb2ludHMgc2xvcGUgYnkgaXRzIGxhdGl0dWRlXG4gICAgY29uc3QgdGlsZXNBdFpvb20gPSBNYXRoLnBvdygyLCB0aWxlSUQuY2Fub25pY2FsLnopO1xuICAgIGNvbnN0IHkgPSB0aWxlSUQuY2Fub25pY2FsLnk7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgbmV3IE1lcmNhdG9yQ29vcmRpbmF0ZSgwLCB5IC8gdGlsZXNBdFpvb20pLnRvTG5nTGF0KCkubGF0LFxuICAgICAgICBuZXcgTWVyY2F0b3JDb29yZGluYXRlKDAsICh5ICsgMSkgLyB0aWxlc0F0Wm9vbSkudG9MbmdMYXQoKS5sYXRdO1xufVxuXG5leHBvcnQge1xuICAgIGhpbGxzaGFkZVVuaWZvcm1zLFxuICAgIGhpbGxzaGFkZVByZXBhcmVVbmlmb3JtcyxcbiAgICBoaWxsc2hhZGVVbmlmb3JtVmFsdWVzLFxuICAgIGhpbGxzaGFkZVVuaWZvcm1QcmVwYXJlVmFsdWVzXG59O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtcbiAgICBVbmlmb3JtMWksXG4gICAgVW5pZm9ybTFmLFxuICAgIFVuaWZvcm0yZixcbiAgICBVbmlmb3JtM2YsXG4gICAgVW5pZm9ybU1hdHJpeDRmXG59IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQgcGl4ZWxzVG9UaWxlVW5pdHMgZnJvbSAnLi4vLi4vc291cmNlL3BpeGVsc190b190aWxlX3VuaXRzJztcbmltcG9ydCB7ZXh0ZW5kfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vLi4vdXRpbC9icm93c2VyJztcblxuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi8uLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIHtVbmlmb3JtVmFsdWVzLCBVbmlmb3JtTG9jYXRpb25zfSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHR5cGUgVHJhbnNmb3JtIGZyb20gJy4uLy4uL2dlby90cmFuc2Zvcm0nO1xuaW1wb3J0IHR5cGUgVGlsZSBmcm9tICcuLi8uLi9zb3VyY2UvdGlsZSc7XG5pbXBvcnQgdHlwZSB7Q3Jvc3NGYWRlZH0gZnJvbSAnLi4vLi4vc3R5bGUvcHJvcGVydGllcyc7XG5pbXBvcnQgdHlwZSBMaW5lU3R5bGVMYXllciBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZV9sYXllci9saW5lX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIFBhaW50ZXIgZnJvbSAnLi4vcGFpbnRlcic7XG5pbXBvcnQgdHlwZSB7Q3Jvc3NmYWRlUGFyYW1ldGVyc30gZnJvbSAnLi4vLi4vc3R5bGUvZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcblxuZXhwb3J0IHR5cGUgTGluZVVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X3JhdGlvJzogVW5pZm9ybTFmLFxuICAgICd1X2RldmljZV9waXhlbF9yYXRpbyc6IFVuaWZvcm0xZixcbiAgICAndV91bml0c190b19waXhlbHMnOiBVbmlmb3JtMmZcbnx9O1xuXG5leHBvcnQgdHlwZSBMaW5lR3JhZGllbnRVbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9yYXRpbyc6IFVuaWZvcm0xZixcbiAgICAndV9kZXZpY2VfcGl4ZWxfcmF0aW8nOiBVbmlmb3JtMWYsXG4gICAgJ3VfdW5pdHNfdG9fcGl4ZWxzJzogVW5pZm9ybTJmLFxuICAgICd1X2ltYWdlJzogVW5pZm9ybTFpXG58fTtcblxuZXhwb3J0IHR5cGUgTGluZVBhdHRlcm5Vbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV90ZXhzaXplJzogVW5pZm9ybTJmLFxuICAgICd1X3JhdGlvJzogVW5pZm9ybTFmLFxuICAgICd1X2RldmljZV9waXhlbF9yYXRpbyc6IFVuaWZvcm0xZixcbiAgICAndV91bml0c190b19waXhlbHMnOiBVbmlmb3JtMmYsXG4gICAgJ3VfaW1hZ2UnOiBVbmlmb3JtMWksXG4gICAgJ3Vfc2NhbGUnOiBVbmlmb3JtM2YsXG4gICAgJ3VfZmFkZSc6IFVuaWZvcm0xZlxufH07XG5cbmV4cG9ydCB0eXBlIExpbmVTREZVbmlmb3Jtc1R5cGUgPSB7fFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9yYXRpbyc6IFVuaWZvcm0xZixcbiAgICAndV9kZXZpY2VfcGl4ZWxfcmF0aW8nOiBVbmlmb3JtMWYsXG4gICAgJ3VfdW5pdHNfdG9fcGl4ZWxzJzogVW5pZm9ybTJmLFxuICAgICd1X3BhdHRlcm5zY2FsZV9hJzogVW5pZm9ybTJmLFxuICAgICd1X3BhdHRlcm5zY2FsZV9iJzogVW5pZm9ybTJmLFxuICAgICd1X3NkZmdhbW1hJzogVW5pZm9ybTFmLFxuICAgICd1X2ltYWdlJzogVW5pZm9ybTFpLFxuICAgICd1X3RleF95X2EnOiBVbmlmb3JtMWYsXG4gICAgJ3VfdGV4X3lfYic6IFVuaWZvcm0xZixcbiAgICAndV9taXgnOiBVbmlmb3JtMWZcbnx9O1xuXG5jb25zdCBsaW5lVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogTGluZVVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KSxcbiAgICAndV9yYXRpbyc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfcmF0aW8pLFxuICAgICd1X2RldmljZV9waXhlbF9yYXRpbyc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfZGV2aWNlX3BpeGVsX3JhdGlvKSxcbiAgICAndV91bml0c190b19waXhlbHMnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3VuaXRzX3RvX3BpeGVscylcbn0pO1xuXG5jb25zdCBsaW5lR3JhZGllbnRVbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBMaW5lR3JhZGllbnRVbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeCksXG4gICAgJ3VfcmF0aW8nOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3JhdGlvKSxcbiAgICAndV9kZXZpY2VfcGl4ZWxfcmF0aW8nOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2RldmljZV9waXhlbF9yYXRpbyksXG4gICAgJ3VfdW5pdHNfdG9fcGl4ZWxzJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV91bml0c190b19waXhlbHMpLFxuICAgICd1X2ltYWdlJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pbWFnZSlcbn0pO1xuXG5jb25zdCBsaW5lUGF0dGVyblVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IExpbmVQYXR0ZXJuVW5pZm9ybXNUeXBlID0+ICh7XG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X3RleHNpemUnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3RleHNpemUpLFxuICAgICd1X3JhdGlvJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9yYXRpbyksXG4gICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9kZXZpY2VfcGl4ZWxfcmF0aW8pLFxuICAgICd1X2ltYWdlJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pbWFnZSksXG4gICAgJ3VfdW5pdHNfdG9fcGl4ZWxzJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV91bml0c190b19waXhlbHMpLFxuICAgICd1X3NjYWxlJzogbmV3IFVuaWZvcm0zZihjb250ZXh0LCBsb2NhdGlvbnMudV9zY2FsZSksXG4gICAgJ3VfZmFkZSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfZmFkZSlcbn0pO1xuXG5jb25zdCBsaW5lU0RGVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogTGluZVNERlVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KSxcbiAgICAndV9yYXRpbyc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfcmF0aW8pLFxuICAgICd1X2RldmljZV9waXhlbF9yYXRpbyc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfZGV2aWNlX3BpeGVsX3JhdGlvKSxcbiAgICAndV91bml0c190b19waXhlbHMnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3VuaXRzX3RvX3BpeGVscyksXG4gICAgJ3VfcGF0dGVybnNjYWxlX2EnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3BhdHRlcm5zY2FsZV9hKSxcbiAgICAndV9wYXR0ZXJuc2NhbGVfYic6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfcGF0dGVybnNjYWxlX2IpLFxuICAgICd1X3NkZmdhbW1hJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9zZGZnYW1tYSksXG4gICAgJ3VfaW1hZ2UnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X2ltYWdlKSxcbiAgICAndV90ZXhfeV9hJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV90ZXhfeV9hKSxcbiAgICAndV90ZXhfeV9iJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV90ZXhfeV9iKSxcbiAgICAndV9taXgnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X21peClcbn0pO1xuXG5jb25zdCBsaW5lVW5pZm9ybVZhbHVlcyA9IChcbiAgICBwYWludGVyOiBQYWludGVyLFxuICAgIHRpbGU6IFRpbGUsXG4gICAgbGF5ZXI6IExpbmVTdHlsZUxheWVyXG4pOiBVbmlmb3JtVmFsdWVzPExpbmVVbmlmb3Jtc1R5cGU+ID0+IHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBwYWludGVyLnRyYW5zZm9ybTtcblxuICAgIHJldHVybiB7XG4gICAgICAgICd1X21hdHJpeCc6IGNhbGN1bGF0ZU1hdHJpeChwYWludGVyLCB0aWxlLCBsYXllciksXG4gICAgICAgICd1X3JhdGlvJzogMSAvIHBpeGVsc1RvVGlsZVVuaXRzKHRpbGUsIDEsIHRyYW5zZm9ybS56b29tKSxcbiAgICAgICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLFxuICAgICAgICAndV91bml0c190b19waXhlbHMnOiBbXG4gICAgICAgICAgICAxIC8gdHJhbnNmb3JtLnBpeGVsc1RvR0xVbml0c1swXSxcbiAgICAgICAgICAgIDEgLyB0cmFuc2Zvcm0ucGl4ZWxzVG9HTFVuaXRzWzFdXG4gICAgICAgIF1cbiAgICB9O1xufTtcblxuY29uc3QgbGluZUdyYWRpZW50VW5pZm9ybVZhbHVlcyA9IChcbiAgICBwYWludGVyOiBQYWludGVyLFxuICAgIHRpbGU6IFRpbGUsXG4gICAgbGF5ZXI6IExpbmVTdHlsZUxheWVyXG4pOiBVbmlmb3JtVmFsdWVzPExpbmVHcmFkaWVudFVuaWZvcm1zVHlwZT4gPT4ge1xuICAgIHJldHVybiBleHRlbmQobGluZVVuaWZvcm1WYWx1ZXMocGFpbnRlciwgdGlsZSwgbGF5ZXIpLCB7XG4gICAgICAgICd1X2ltYWdlJzogMFxuICAgIH0pO1xufTtcblxuY29uc3QgbGluZVBhdHRlcm5Vbmlmb3JtVmFsdWVzID0gKFxuICAgIHBhaW50ZXI6IFBhaW50ZXIsXG4gICAgdGlsZTogVGlsZSxcbiAgICBsYXllcjogTGluZVN0eWxlTGF5ZXIsXG4gICAgY3Jvc3NmYWRlOiBDcm9zc2ZhZGVQYXJhbWV0ZXJzXG4pOiBVbmlmb3JtVmFsdWVzPExpbmVQYXR0ZXJuVW5pZm9ybXNUeXBlPiA9PiB7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gcGFpbnRlci50cmFuc2Zvcm07XG4gICAgY29uc3QgdGlsZVpvb21SYXRpbyA9IGNhbGN1bGF0ZVRpbGVSYXRpbyh0aWxlLCB0cmFuc2Zvcm0pO1xuICAgIHJldHVybiB7XG4gICAgICAgICd1X21hdHJpeCc6IGNhbGN1bGF0ZU1hdHJpeChwYWludGVyLCB0aWxlLCBsYXllciksXG4gICAgICAgICd1X3RleHNpemUnOiB0aWxlLmltYWdlQXRsYXNUZXh0dXJlLnNpemUsXG4gICAgICAgIC8vIGNhbWVyYSB6b29tIHJhdGlvXG4gICAgICAgICd1X3JhdGlvJzogMSAvIHBpeGVsc1RvVGlsZVVuaXRzKHRpbGUsIDEsIHRyYW5zZm9ybS56b29tKSxcbiAgICAgICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLFxuICAgICAgICAndV9pbWFnZSc6IDAsXG4gICAgICAgICd1X3NjYWxlJzogW3RpbGVab29tUmF0aW8sIGNyb3NzZmFkZS5mcm9tU2NhbGUsIGNyb3NzZmFkZS50b1NjYWxlXSxcbiAgICAgICAgJ3VfZmFkZSc6IGNyb3NzZmFkZS50LFxuICAgICAgICAndV91bml0c190b19waXhlbHMnOiBbXG4gICAgICAgICAgICAxIC8gdHJhbnNmb3JtLnBpeGVsc1RvR0xVbml0c1swXSxcbiAgICAgICAgICAgIDEgLyB0cmFuc2Zvcm0ucGl4ZWxzVG9HTFVuaXRzWzFdXG4gICAgICAgIF1cbiAgICB9O1xufTtcblxuY29uc3QgbGluZVNERlVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgcGFpbnRlcjogUGFpbnRlcixcbiAgICB0aWxlOiBUaWxlLFxuICAgIGxheWVyOiBMaW5lU3R5bGVMYXllcixcbiAgICBkYXNoYXJyYXk6IENyb3NzRmFkZWQ8QXJyYXk8bnVtYmVyPj4sXG4gICAgY3Jvc3NmYWRlOiBDcm9zc2ZhZGVQYXJhbWV0ZXJzXG4pOiBVbmlmb3JtVmFsdWVzPExpbmVTREZVbmlmb3Jtc1R5cGU+ID0+IHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBwYWludGVyLnRyYW5zZm9ybTtcbiAgICBjb25zdCBsaW5lQXRsYXMgPSBwYWludGVyLmxpbmVBdGxhcztcbiAgICBjb25zdCB0aWxlUmF0aW8gPSBjYWxjdWxhdGVUaWxlUmF0aW8odGlsZSwgdHJhbnNmb3JtKTtcblxuICAgIGNvbnN0IHJvdW5kID0gbGF5ZXIubGF5b3V0LmdldCgnbGluZS1jYXAnKSA9PT0gJ3JvdW5kJztcblxuICAgIGNvbnN0IHBvc0EgPSBsaW5lQXRsYXMuZ2V0RGFzaChkYXNoYXJyYXkuZnJvbSwgcm91bmQpO1xuICAgIGNvbnN0IHBvc0IgPSBsaW5lQXRsYXMuZ2V0RGFzaChkYXNoYXJyYXkudG8sIHJvdW5kKTtcblxuICAgIGNvbnN0IHdpZHRoQSA9IHBvc0Eud2lkdGggKiBjcm9zc2ZhZGUuZnJvbVNjYWxlO1xuICAgIGNvbnN0IHdpZHRoQiA9IHBvc0Iud2lkdGggKiBjcm9zc2ZhZGUudG9TY2FsZTtcblxuICAgIHJldHVybiBleHRlbmQobGluZVVuaWZvcm1WYWx1ZXMocGFpbnRlciwgdGlsZSwgbGF5ZXIpLCB7XG4gICAgICAgICd1X3BhdHRlcm5zY2FsZV9hJzogW3RpbGVSYXRpbyAvIHdpZHRoQSwgLXBvc0EuaGVpZ2h0IC8gMl0sXG4gICAgICAgICd1X3BhdHRlcm5zY2FsZV9iJzogW3RpbGVSYXRpbyAvIHdpZHRoQiwgLXBvc0IuaGVpZ2h0IC8gMl0sXG4gICAgICAgICd1X3NkZmdhbW1hJzogbGluZUF0bGFzLndpZHRoIC8gKE1hdGgubWluKHdpZHRoQSwgd2lkdGhCKSAqIDI1NiAqIGJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbykgLyAyLFxuICAgICAgICAndV9pbWFnZSc6IDAsXG4gICAgICAgICd1X3RleF95X2EnOiBwb3NBLnksXG4gICAgICAgICd1X3RleF95X2InOiBwb3NCLnksXG4gICAgICAgICd1X21peCc6IGNyb3NzZmFkZS50XG4gICAgfSk7XG59O1xuXG5mdW5jdGlvbiBjYWxjdWxhdGVUaWxlUmF0aW8odGlsZTogVGlsZSwgdHJhbnNmb3JtOiBUcmFuc2Zvcm0pIHtcbiAgICByZXR1cm4gMSAvIHBpeGVsc1RvVGlsZVVuaXRzKHRpbGUsIDEsIHRyYW5zZm9ybS50aWxlWm9vbSk7XG59XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZU1hdHJpeChwYWludGVyLCB0aWxlLCBsYXllcikge1xuICAgIHJldHVybiBwYWludGVyLnRyYW5zbGF0ZVBvc01hdHJpeChcbiAgICAgICAgdGlsZS50aWxlSUQucG9zTWF0cml4LFxuICAgICAgICB0aWxlLFxuICAgICAgICBsYXllci5wYWludC5nZXQoJ2xpbmUtdHJhbnNsYXRlJyksXG4gICAgICAgIGxheWVyLnBhaW50LmdldCgnbGluZS10cmFuc2xhdGUtYW5jaG9yJylcbiAgICApO1xufVxuXG5leHBvcnQge1xuICAgIGxpbmVVbmlmb3JtcyxcbiAgICBsaW5lR3JhZGllbnRVbmlmb3JtcyxcbiAgICBsaW5lUGF0dGVyblVuaWZvcm1zLFxuICAgIGxpbmVTREZVbmlmb3JtcyxcbiAgICBsaW5lVW5pZm9ybVZhbHVlcyxcbiAgICBsaW5lR3JhZGllbnRVbmlmb3JtVmFsdWVzLFxuICAgIGxpbmVQYXR0ZXJuVW5pZm9ybVZhbHVlcyxcbiAgICBsaW5lU0RGVW5pZm9ybVZhbHVlc1xufTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7XG4gICAgVW5pZm9ybTFpLFxuICAgIFVuaWZvcm0xZixcbiAgICBVbmlmb3JtMmYsXG4gICAgVW5pZm9ybTNmLFxuICAgIFVuaWZvcm1NYXRyaXg0ZlxufSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuXG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gJy4uLy4uL2dsL2NvbnRleHQnO1xuaW1wb3J0IHR5cGUge1VuaWZvcm1WYWx1ZXMsIFVuaWZvcm1Mb2NhdGlvbnN9IGZyb20gJy4uL3VuaWZvcm1fYmluZGluZyc7XG5pbXBvcnQgdHlwZSBSYXN0ZXJTdHlsZUxheWVyIGZyb20gJy4uLy4uL3N0eWxlL3N0eWxlX2xheWVyL3Jhc3Rlcl9zdHlsZV9sYXllcic7XG5cbmV4cG9ydCB0eXBlIFJhc3RlclVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X3RsX3BhcmVudCc6IFVuaWZvcm0yZixcbiAgICAndV9zY2FsZV9wYXJlbnQnOiBVbmlmb3JtMWYsXG4gICAgJ3VfYnVmZmVyX3NjYWxlJzogVW5pZm9ybTFmLFxuICAgICd1X2ZhZGVfdCc6IFVuaWZvcm0xZixcbiAgICAndV9vcGFjaXR5JzogVW5pZm9ybTFmLFxuICAgICd1X2ltYWdlMCc6IFVuaWZvcm0xaSxcbiAgICAndV9pbWFnZTEnOiBVbmlmb3JtMWksXG4gICAgJ3VfYnJpZ2h0bmVzc19sb3cnOiBVbmlmb3JtMWYsXG4gICAgJ3VfYnJpZ2h0bmVzc19oaWdoJzogVW5pZm9ybTFmLFxuICAgICd1X3NhdHVyYXRpb25fZmFjdG9yJzogVW5pZm9ybTFmLFxuICAgICd1X2NvbnRyYXN0X2ZhY3Rvcic6IFVuaWZvcm0xZixcbiAgICAndV9zcGluX3dlaWdodHMnOiBVbmlmb3JtM2Zcbnx9O1xuXG5jb25zdCByYXN0ZXJVbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBSYXN0ZXJVbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X21hdHJpeCksXG4gICAgJ3VfdGxfcGFyZW50JzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV90bF9wYXJlbnQpLFxuICAgICd1X3NjYWxlX3BhcmVudCc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfc2NhbGVfcGFyZW50KSxcbiAgICAndV9idWZmZXJfc2NhbGUnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2J1ZmZlcl9zY2FsZSksXG4gICAgJ3VfZmFkZV90JzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9mYWRlX3QpLFxuICAgICd1X29wYWNpdHknOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X29wYWNpdHkpLFxuICAgICd1X2ltYWdlMCc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaW1hZ2UwKSxcbiAgICAndV9pbWFnZTEnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X2ltYWdlMSksXG4gICAgJ3VfYnJpZ2h0bmVzc19sb3cnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2JyaWdodG5lc3NfbG93KSxcbiAgICAndV9icmlnaHRuZXNzX2hpZ2gnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2JyaWdodG5lc3NfaGlnaCksXG4gICAgJ3Vfc2F0dXJhdGlvbl9mYWN0b3InOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3NhdHVyYXRpb25fZmFjdG9yKSxcbiAgICAndV9jb250cmFzdF9mYWN0b3InOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2NvbnRyYXN0X2ZhY3RvciksXG4gICAgJ3Vfc3Bpbl93ZWlnaHRzJzogbmV3IFVuaWZvcm0zZihjb250ZXh0LCBsb2NhdGlvbnMudV9zcGluX3dlaWdodHMpXG59KTtcblxuY29uc3QgcmFzdGVyVW5pZm9ybVZhbHVlcyA9IChcbiAgICBtYXRyaXg6IEZsb2F0MzJBcnJheSxcbiAgICBwYXJlbnRUTDogW251bWJlciwgbnVtYmVyXSxcbiAgICBwYXJlbnRTY2FsZUJ5OiBudW1iZXIsXG4gICAgZmFkZToge21peDogbnVtYmVyLCBvcGFjaXR5OiBudW1iZXJ9LFxuICAgIGxheWVyOiBSYXN0ZXJTdHlsZUxheWVyXG4pOiBVbmlmb3JtVmFsdWVzPFJhc3RlclVuaWZvcm1zVHlwZT4gPT4gKHtcbiAgICAndV9tYXRyaXgnOiBtYXRyaXgsXG4gICAgJ3VfdGxfcGFyZW50JzogcGFyZW50VEwsXG4gICAgJ3Vfc2NhbGVfcGFyZW50JzogcGFyZW50U2NhbGVCeSxcbiAgICAndV9idWZmZXJfc2NhbGUnOiAxLFxuICAgICd1X2ZhZGVfdCc6IGZhZGUubWl4LFxuICAgICd1X29wYWNpdHknOiBmYWRlLm9wYWNpdHkgKiBsYXllci5wYWludC5nZXQoJ3Jhc3Rlci1vcGFjaXR5JyksXG4gICAgJ3VfaW1hZ2UwJzogMCxcbiAgICAndV9pbWFnZTEnOiAxLFxuICAgICd1X2JyaWdodG5lc3NfbG93JzogbGF5ZXIucGFpbnQuZ2V0KCdyYXN0ZXItYnJpZ2h0bmVzcy1taW4nKSxcbiAgICAndV9icmlnaHRuZXNzX2hpZ2gnOiBsYXllci5wYWludC5nZXQoJ3Jhc3Rlci1icmlnaHRuZXNzLW1heCcpLFxuICAgICd1X3NhdHVyYXRpb25fZmFjdG9yJzogc2F0dXJhdGlvbkZhY3RvcihsYXllci5wYWludC5nZXQoJ3Jhc3Rlci1zYXR1cmF0aW9uJykpLFxuICAgICd1X2NvbnRyYXN0X2ZhY3Rvcic6IGNvbnRyYXN0RmFjdG9yKGxheWVyLnBhaW50LmdldCgncmFzdGVyLWNvbnRyYXN0JykpLFxuICAgICd1X3NwaW5fd2VpZ2h0cyc6IHNwaW5XZWlnaHRzKGxheWVyLnBhaW50LmdldCgncmFzdGVyLWh1ZS1yb3RhdGUnKSlcbn0pO1xuXG5mdW5jdGlvbiBzcGluV2VpZ2h0cyhhbmdsZSkge1xuICAgIGFuZ2xlICo9IE1hdGguUEkgLyAxODA7XG4gICAgY29uc3QgcyA9IE1hdGguc2luKGFuZ2xlKTtcbiAgICBjb25zdCBjID0gTWF0aC5jb3MoYW5nbGUpO1xuICAgIHJldHVybiBbXG4gICAgICAgICgyICogYyArIDEpIC8gMyxcbiAgICAgICAgKC1NYXRoLnNxcnQoMykgKiBzIC0gYyArIDEpIC8gMyxcbiAgICAgICAgKE1hdGguc3FydCgzKSAqIHMgLSBjICsgMSkgLyAzXG4gICAgXTtcbn1cblxuZnVuY3Rpb24gY29udHJhc3RGYWN0b3IoY29udHJhc3QpIHtcbiAgICByZXR1cm4gY29udHJhc3QgPiAwID9cbiAgICAgICAgMSAvICgxIC0gY29udHJhc3QpIDpcbiAgICAgICAgMSArIGNvbnRyYXN0O1xufVxuXG5mdW5jdGlvbiBzYXR1cmF0aW9uRmFjdG9yKHNhdHVyYXRpb24pIHtcbiAgICByZXR1cm4gc2F0dXJhdGlvbiA+IDAgP1xuICAgICAgICAxIC0gMSAvICgxLjAwMSAtIHNhdHVyYXRpb24pIDpcbiAgICAgICAgLXNhdHVyYXRpb247XG59XG5cbmV4cG9ydCB7cmFzdGVyVW5pZm9ybXMsIHJhc3RlclVuaWZvcm1WYWx1ZXN9O1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtcbiAgICBVbmlmb3JtMWksXG4gICAgVW5pZm9ybTFmLFxuICAgIFVuaWZvcm0yZixcbiAgICBVbmlmb3JtTWF0cml4NGZcbn0gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCB7ZXh0ZW5kfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vLi4vdXRpbC9icm93c2VyJztcblxuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tICcuLi8uLi9nbC9jb250ZXh0JztcbmltcG9ydCB0eXBlIFBhaW50ZXIgZnJvbSAnLi4vcGFpbnRlcic7XG5pbXBvcnQgdHlwZSB7VW5pZm9ybVZhbHVlcywgVW5pZm9ybUxvY2F0aW9uc30gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcblxuZXhwb3J0IHR5cGUgU3ltYm9sSWNvblVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfaXNfc2l6ZV96b29tX2NvbnN0YW50JzogVW5pZm9ybTFpLFxuICAgICd1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCc6IFVuaWZvcm0xaSxcbiAgICAndV9zaXplX3QnOiBVbmlmb3JtMWYsXG4gICAgJ3Vfc2l6ZSc6IFVuaWZvcm0xZixcbiAgICAndV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlJzogVW5pZm9ybTFmLFxuICAgICd1X3BpdGNoJzogVW5pZm9ybTFmLFxuICAgICd1X3JvdGF0ZV9zeW1ib2wnOiBVbmlmb3JtMWksXG4gICAgJ3VfYXNwZWN0X3JhdGlvJzogVW5pZm9ybTFmLFxuICAgICd1X2ZhZGVfY2hhbmdlJzogVW5pZm9ybTFmLFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9sYWJlbF9wbGFuZV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGYsXG4gICAgJ3VfY29vcmRfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X2lzX3RleHQnOiBVbmlmb3JtMWksXG4gICAgJ3VfcGl0Y2hfd2l0aF9tYXAnOiBVbmlmb3JtMWksXG4gICAgJ3VfdGV4c2l6ZSc6IFVuaWZvcm0yZixcbiAgICAndV90ZXh0dXJlJzogVW5pZm9ybTFpXG58fTtcblxuZXhwb3J0IHR5cGUgU3ltYm9sU0RGVW5pZm9ybXNUeXBlID0ge3xcbiAgICAndV9pc19zaXplX3pvb21fY29uc3RhbnQnOiBVbmlmb3JtMWksXG4gICAgJ3VfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50JzogVW5pZm9ybTFpLFxuICAgICd1X3NpemVfdCc6IFVuaWZvcm0xZixcbiAgICAndV9zaXplJzogVW5pZm9ybTFmLFxuICAgICd1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UnOiBVbmlmb3JtMWYsXG4gICAgJ3VfcGl0Y2gnOiBVbmlmb3JtMWYsXG4gICAgJ3Vfcm90YXRlX3N5bWJvbCc6IFVuaWZvcm0xaSxcbiAgICAndV9hc3BlY3RfcmF0aW8nOiBVbmlmb3JtMWYsXG4gICAgJ3VfZmFkZV9jaGFuZ2UnOiBVbmlmb3JtMWYsXG4gICAgJ3VfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X2xhYmVsX3BsYW5lX21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9jb29yZF9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGYsXG4gICAgJ3VfaXNfdGV4dCc6IFVuaWZvcm0xaSxcbiAgICAndV9waXRjaF93aXRoX21hcCc6IFVuaWZvcm0xaSxcbiAgICAndV90ZXhzaXplJzogVW5pZm9ybTJmLFxuICAgICd1X3RleHR1cmUnOiBVbmlmb3JtMWksXG4gICAgJ3VfZ2FtbWFfc2NhbGUnOiBVbmlmb3JtMWYsXG4gICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogVW5pZm9ybTFmLFxuICAgICd1X2lzX2hhbG8nOiBVbmlmb3JtMWlcbnx9O1xuXG5leHBvcnQgdHlwZSBzeW1ib2xUZXh0QW5kSWNvblVuaWZvcm1zVHlwZSA9IHt8XG4gICAgJ3VfaXNfc2l6ZV96b29tX2NvbnN0YW50JzogVW5pZm9ybTFpLFxuICAgICd1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCc6IFVuaWZvcm0xaSxcbiAgICAndV9zaXplX3QnOiBVbmlmb3JtMWYsXG4gICAgJ3Vfc2l6ZSc6IFVuaWZvcm0xZixcbiAgICAndV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlJzogVW5pZm9ybTFmLFxuICAgICd1X3BpdGNoJzogVW5pZm9ybTFmLFxuICAgICd1X3JvdGF0ZV9zeW1ib2wnOiBVbmlmb3JtMWksXG4gICAgJ3VfYXNwZWN0X3JhdGlvJzogVW5pZm9ybTFmLFxuICAgICd1X2ZhZGVfY2hhbmdlJzogVW5pZm9ybTFmLFxuICAgICd1X21hdHJpeCc6IFVuaWZvcm1NYXRyaXg0ZixcbiAgICAndV9sYWJlbF9wbGFuZV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGYsXG4gICAgJ3VfY29vcmRfbWF0cml4JzogVW5pZm9ybU1hdHJpeDRmLFxuICAgICd1X2lzX3RleHQnOiBVbmlmb3JtMWksXG4gICAgJ3VfcGl0Y2hfd2l0aF9tYXAnOiBVbmlmb3JtMWksXG4gICAgJ3VfdGV4c2l6ZSc6IFVuaWZvcm0yZixcbiAgICAndV90ZXhzaXplX2ljb24nOiBVbmlmb3JtMmYsXG4gICAgJ3VfdGV4dHVyZSc6IFVuaWZvcm0xaSxcbiAgICAndV90ZXh0dXJlX2ljb24nOiBVbmlmb3JtMWksXG4gICAgJ3VfZ2FtbWFfc2NhbGUnOiBVbmlmb3JtMWYsXG4gICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogVW5pZm9ybTFmLFxuICAgICd1X2lzX2hhbG8nOiBVbmlmb3JtMWlcbnx9O1xuXG5jb25zdCBzeW1ib2xJY29uVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogU3ltYm9sSWNvblVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X2lzX3NpemVfem9vbV9jb25zdGFudCc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaXNfc2l6ZV96b29tX2NvbnN0YW50KSxcbiAgICAndV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCksXG4gICAgJ3Vfc2l6ZV90JzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9zaXplX3QpLFxuICAgICd1X3NpemUnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3NpemUpLFxuICAgICd1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UpLFxuICAgICd1X3BpdGNoJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9waXRjaCksXG4gICAgJ3Vfcm90YXRlX3N5bWJvbCc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfcm90YXRlX3N5bWJvbCksXG4gICAgJ3VfYXNwZWN0X3JhdGlvJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9hc3BlY3RfcmF0aW8pLFxuICAgICd1X2ZhZGVfY2hhbmdlJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9mYWRlX2NoYW5nZSksXG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X2xhYmVsX3BsYW5lX21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbGFiZWxfcGxhbmVfbWF0cml4KSxcbiAgICAndV9jb29yZF9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X2Nvb3JkX21hdHJpeCksXG4gICAgJ3VfaXNfdGV4dCc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaXNfdGV4dCksXG4gICAgJ3VfcGl0Y2hfd2l0aF9tYXAnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X3BpdGNoX3dpdGhfbWFwKSxcbiAgICAndV90ZXhzaXplJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV90ZXhzaXplKSxcbiAgICAndV90ZXh0dXJlJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV90ZXh0dXJlKVxufSk7XG5cbmNvbnN0IHN5bWJvbFNERlVuaWZvcm1zID0gKGNvbnRleHQ6IENvbnRleHQsIGxvY2F0aW9uczogVW5pZm9ybUxvY2F0aW9ucyk6IFN5bWJvbFNERlVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X2lzX3NpemVfem9vbV9jb25zdGFudCc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaXNfc2l6ZV96b29tX2NvbnN0YW50KSxcbiAgICAndV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCksXG4gICAgJ3Vfc2l6ZV90JzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9zaXplX3QpLFxuICAgICd1X3NpemUnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3NpemUpLFxuICAgICd1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UpLFxuICAgICd1X3BpdGNoJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9waXRjaCksXG4gICAgJ3Vfcm90YXRlX3N5bWJvbCc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfcm90YXRlX3N5bWJvbCksXG4gICAgJ3VfYXNwZWN0X3JhdGlvJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9hc3BlY3RfcmF0aW8pLFxuICAgICd1X2ZhZGVfY2hhbmdlJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9mYWRlX2NoYW5nZSksXG4gICAgJ3VfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9tYXRyaXgpLFxuICAgICd1X2xhYmVsX3BsYW5lX21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbGFiZWxfcGxhbmVfbWF0cml4KSxcbiAgICAndV9jb29yZF9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X2Nvb3JkX21hdHJpeCksXG4gICAgJ3VfaXNfdGV4dCc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaXNfdGV4dCksXG4gICAgJ3VfcGl0Y2hfd2l0aF9tYXAnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X3BpdGNoX3dpdGhfbWFwKSxcbiAgICAndV90ZXhzaXplJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV90ZXhzaXplKSxcbiAgICAndV90ZXh0dXJlJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV90ZXh0dXJlKSxcbiAgICAndV9nYW1tYV9zY2FsZSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfZ2FtbWFfc2NhbGUpLFxuICAgICd1X2RldmljZV9waXhlbF9yYXRpbyc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfZGV2aWNlX3BpeGVsX3JhdGlvKSxcbiAgICAndV9pc19oYWxvJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pc19oYWxvKVxufSk7XG5cbmNvbnN0IHN5bWJvbFRleHRBbmRJY29uVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogc3ltYm9sVGV4dEFuZEljb25Vbmlmb3Jtc1R5cGUgPT4gKHtcbiAgICAndV9pc19zaXplX3pvb21fY29uc3RhbnQnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X2lzX3NpemVfem9vbV9jb25zdGFudCksXG4gICAgJ3VfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50JzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQpLFxuICAgICd1X3NpemVfdCc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfc2l6ZV90KSxcbiAgICAndV9zaXplJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9zaXplKSxcbiAgICAndV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlJzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlKSxcbiAgICAndV9waXRjaCc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfcGl0Y2gpLFxuICAgICd1X3JvdGF0ZV9zeW1ib2wnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X3JvdGF0ZV9zeW1ib2wpLFxuICAgICd1X2FzcGVjdF9yYXRpbyc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfYXNwZWN0X3JhdGlvKSxcbiAgICAndV9mYWRlX2NoYW5nZSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfZmFkZV9jaGFuZ2UpLFxuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KSxcbiAgICAndV9sYWJlbF9wbGFuZV9tYXRyaXgnOiBuZXcgVW5pZm9ybU1hdHJpeDRmKGNvbnRleHQsIGxvY2F0aW9ucy51X2xhYmVsX3BsYW5lX21hdHJpeCksXG4gICAgJ3VfY29vcmRfbWF0cml4JzogbmV3IFVuaWZvcm1NYXRyaXg0Zihjb250ZXh0LCBsb2NhdGlvbnMudV9jb29yZF9tYXRyaXgpLFxuICAgICd1X2lzX3RleHQnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X2lzX3RleHQpLFxuICAgICd1X3BpdGNoX3dpdGhfbWFwJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9waXRjaF93aXRoX21hcCksXG4gICAgJ3VfdGV4c2l6ZSc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfdGV4c2l6ZSksXG4gICAgJ3VfdGV4c2l6ZV9pY29uJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV90ZXhzaXplX2ljb24pLFxuICAgICd1X3RleHR1cmUnOiBuZXcgVW5pZm9ybTFpKGNvbnRleHQsIGxvY2F0aW9ucy51X3RleHR1cmUpLFxuICAgICd1X3RleHR1cmVfaWNvbic6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfdGV4dHVyZV9pY29uKSxcbiAgICAndV9nYW1tYV9zY2FsZSc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfZ2FtbWFfc2NhbGUpLFxuICAgICd1X2RldmljZV9waXhlbF9yYXRpbyc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfZGV2aWNlX3BpeGVsX3JhdGlvKSxcbiAgICAndV9pc19oYWxvJzogbmV3IFVuaWZvcm0xaShjb250ZXh0LCBsb2NhdGlvbnMudV9pc19oYWxvKVxufSk7XG5cbmNvbnN0IHN5bWJvbEljb25Vbmlmb3JtVmFsdWVzID0gKFxuICAgIGZ1bmN0aW9uVHlwZTogc3RyaW5nLFxuICAgIHNpemU6ID97dVNpemVUOiBudW1iZXIsIHVTaXplOiBudW1iZXJ9LFxuICAgIHJvdGF0ZUluU2hhZGVyOiBib29sZWFuLFxuICAgIHBpdGNoV2l0aE1hcDogYm9vbGVhbixcbiAgICBwYWludGVyOiBQYWludGVyLFxuICAgIG1hdHJpeDogRmxvYXQzMkFycmF5LFxuICAgIGxhYmVsUGxhbmVNYXRyaXg6IEZsb2F0MzJBcnJheSxcbiAgICBnbENvb3JkTWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgaXNUZXh0OiBib29sZWFuLFxuICAgIHRleFNpemU6IFtudW1iZXIsIG51bWJlcl1cbik6IFVuaWZvcm1WYWx1ZXM8U3ltYm9sSWNvblVuaWZvcm1zVHlwZT4gPT4ge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IHBhaW50ZXIudHJhbnNmb3JtO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ3VfaXNfc2l6ZV96b29tX2NvbnN0YW50JzogKyhmdW5jdGlvblR5cGUgPT09ICdjb25zdGFudCcgfHwgZnVuY3Rpb25UeXBlID09PSAnc291cmNlJyksXG4gICAgICAgICd1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCc6ICsoZnVuY3Rpb25UeXBlID09PSAnY29uc3RhbnQnIHx8IGZ1bmN0aW9uVHlwZSA9PT0gJ2NhbWVyYScpLFxuICAgICAgICAndV9zaXplX3QnOiBzaXplID8gc2l6ZS51U2l6ZVQgOiAwLFxuICAgICAgICAndV9zaXplJzogc2l6ZSA/IHNpemUudVNpemUgOiAwLFxuICAgICAgICAndV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlJzogdHJhbnNmb3JtLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UsXG4gICAgICAgICd1X3BpdGNoJzogdHJhbnNmb3JtLnBpdGNoIC8gMzYwICogMiAqIE1hdGguUEksXG4gICAgICAgICd1X3JvdGF0ZV9zeW1ib2wnOiArcm90YXRlSW5TaGFkZXIsXG4gICAgICAgICd1X2FzcGVjdF9yYXRpbyc6IHRyYW5zZm9ybS53aWR0aCAvIHRyYW5zZm9ybS5oZWlnaHQsXG4gICAgICAgICd1X2ZhZGVfY2hhbmdlJzogcGFpbnRlci5vcHRpb25zLmZhZGVEdXJhdGlvbiA/IHBhaW50ZXIuc3ltYm9sRmFkZUNoYW5nZSA6IDEsXG4gICAgICAgICd1X21hdHJpeCc6IG1hdHJpeCxcbiAgICAgICAgJ3VfbGFiZWxfcGxhbmVfbWF0cml4JzogbGFiZWxQbGFuZU1hdHJpeCxcbiAgICAgICAgJ3VfY29vcmRfbWF0cml4JzogZ2xDb29yZE1hdHJpeCxcbiAgICAgICAgJ3VfaXNfdGV4dCc6ICtpc1RleHQsXG4gICAgICAgICd1X3BpdGNoX3dpdGhfbWFwJzogK3BpdGNoV2l0aE1hcCxcbiAgICAgICAgJ3VfdGV4c2l6ZSc6IHRleFNpemUsXG4gICAgICAgICd1X3RleHR1cmUnOiAwXG4gICAgfTtcbn07XG5cbmNvbnN0IHN5bWJvbFNERlVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgZnVuY3Rpb25UeXBlOiBzdHJpbmcsXG4gICAgc2l6ZTogP3t1U2l6ZVQ6IG51bWJlciwgdVNpemU6IG51bWJlcn0sXG4gICAgcm90YXRlSW5TaGFkZXI6IGJvb2xlYW4sXG4gICAgcGl0Y2hXaXRoTWFwOiBib29sZWFuLFxuICAgIHBhaW50ZXI6IFBhaW50ZXIsXG4gICAgbWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgbGFiZWxQbGFuZU1hdHJpeDogRmxvYXQzMkFycmF5LFxuICAgIGdsQ29vcmRNYXRyaXg6IEZsb2F0MzJBcnJheSxcbiAgICBpc1RleHQ6IGJvb2xlYW4sXG4gICAgdGV4U2l6ZTogW251bWJlciwgbnVtYmVyXSxcbiAgICBpc0hhbG86IGJvb2xlYW5cbik6IFVuaWZvcm1WYWx1ZXM8U3ltYm9sU0RGVW5pZm9ybXNUeXBlPiA9PiB7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gcGFpbnRlci50cmFuc2Zvcm07XG5cbiAgICByZXR1cm4gZXh0ZW5kKHN5bWJvbEljb25Vbmlmb3JtVmFsdWVzKGZ1bmN0aW9uVHlwZSwgc2l6ZSxcbiAgICAgICAgcm90YXRlSW5TaGFkZXIsIHBpdGNoV2l0aE1hcCwgcGFpbnRlciwgbWF0cml4LCBsYWJlbFBsYW5lTWF0cml4LFxuICAgICAgICBnbENvb3JkTWF0cml4LCBpc1RleHQsIHRleFNpemUpLCB7XG4gICAgICAgICd1X2dhbW1hX3NjYWxlJzogKHBpdGNoV2l0aE1hcCA/IE1hdGguY29zKHRyYW5zZm9ybS5fcGl0Y2gpICogdHJhbnNmb3JtLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UgOiAxKSxcbiAgICAgICAgJ3VfZGV2aWNlX3BpeGVsX3JhdGlvJzogYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLFxuICAgICAgICAndV9pc19oYWxvJzogK2lzSGFsb1xuICAgIH0pO1xufTtcblxuY29uc3Qgc3ltYm9sVGV4dEFuZEljb25Vbmlmb3JtVmFsdWVzID0gKFxuICAgIGZ1bmN0aW9uVHlwZTogc3RyaW5nLFxuICAgIHNpemU6ID97dVNpemVUOiBudW1iZXIsIHVTaXplOiBudW1iZXJ9LFxuICAgIHJvdGF0ZUluU2hhZGVyOiBib29sZWFuLFxuICAgIHBpdGNoV2l0aE1hcDogYm9vbGVhbixcbiAgICBwYWludGVyOiBQYWludGVyLFxuICAgIG1hdHJpeDogRmxvYXQzMkFycmF5LFxuICAgIGxhYmVsUGxhbmVNYXRyaXg6IEZsb2F0MzJBcnJheSxcbiAgICBnbENvb3JkTWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgdGV4U2l6ZVNERjogW251bWJlciwgbnVtYmVyXSxcbiAgICB0ZXhTaXplSWNvbjogW251bWJlciwgbnVtYmVyXVxuKTogVW5pZm9ybVZhbHVlczxTeW1ib2xJY29uVW5pZm9ybXNUeXBlPiA9PiB7XG4gICAgcmV0dXJuIGV4dGVuZChzeW1ib2xTREZVbmlmb3JtVmFsdWVzKGZ1bmN0aW9uVHlwZSwgc2l6ZSxcbiAgICAgICAgcm90YXRlSW5TaGFkZXIsIHBpdGNoV2l0aE1hcCwgcGFpbnRlciwgbWF0cml4LCBsYWJlbFBsYW5lTWF0cml4LFxuICAgICAgICBnbENvb3JkTWF0cml4LCB0cnVlLCB0ZXhTaXplU0RGLCB0cnVlKSwge1xuICAgICAgICAndV90ZXhzaXplX2ljb24nOiB0ZXhTaXplSWNvbixcbiAgICAgICAgJ3VfdGV4dHVyZV9pY29uJzogMVxuICAgIH0pO1xufTtcblxuZXhwb3J0IHtzeW1ib2xJY29uVW5pZm9ybXMsIHN5bWJvbFNERlVuaWZvcm1zLCBzeW1ib2xJY29uVW5pZm9ybVZhbHVlcywgc3ltYm9sU0RGVW5pZm9ybVZhbHVlcywgc3ltYm9sVGV4dEFuZEljb25Vbmlmb3JtVmFsdWVzLCBzeW1ib2xUZXh0QW5kSWNvblVuaWZvcm1zfTtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7YmdQYXR0ZXJuVW5pZm9ybVZhbHVlc30gZnJvbSAnLi9wYXR0ZXJuJztcbmltcG9ydCB7XG4gICAgVW5pZm9ybTFpLFxuICAgIFVuaWZvcm0xZixcbiAgICBVbmlmb3JtMmYsXG4gICAgVW5pZm9ybUNvbG9yLFxuICAgIFVuaWZvcm1NYXRyaXg0ZlxufSBmcm9tICcuLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHtleHRlbmR9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5cbmltcG9ydCB0eXBlIFBhaW50ZXIgZnJvbSAnLi4vcGFpbnRlcic7XG5pbXBvcnQgdHlwZSB7VW5pZm9ybVZhbHVlcywgVW5pZm9ybUxvY2F0aW9uc30gZnJvbSAnLi4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSAnLi4vLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgdHlwZSBDb2xvciBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuaW1wb3J0IHR5cGUge0Nyb3NzRmFkZWR9IGZyb20gJy4uLy4uL3N0eWxlL3Byb3BlcnRpZXMnO1xuaW1wb3J0IHR5cGUge0Nyb3NzZmFkZVBhcmFtZXRlcnN9IGZyb20gJy4uLy4uL3N0eWxlL2V2YWx1YXRpb25fcGFyYW1ldGVycyc7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi4vLi4vc291cmNlL3RpbGVfaWQnO1xuaW1wb3J0IHR5cGUgUmVzb2x2ZWRJbWFnZSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL2V4cHJlc3Npb24vdHlwZXMvcmVzb2x2ZWRfaW1hZ2UnO1xuXG5leHBvcnQgdHlwZSBCYWNrZ3JvdW5kVW5pZm9ybXNUeXBlID0ge3xcbiAgICAndV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGYsXG4gICAgJ3Vfb3BhY2l0eSc6IFVuaWZvcm0xZixcbiAgICAndV9jb2xvcic6IFVuaWZvcm1Db2xvclxufH07XG5cbmV4cG9ydCB0eXBlIEJhY2tncm91bmRQYXR0ZXJuVW5pZm9ybXNUeXBlID0ge3xcbiAgICAndV9tYXRyaXgnOiBVbmlmb3JtTWF0cml4NGYsXG4gICAgJ3Vfb3BhY2l0eSc6IFVuaWZvcm0xZixcbiAgICAvLyBwYXR0ZXJuIHVuaWZvcm1zOlxuICAgICd1X2ltYWdlJzogVW5pZm9ybTFpLFxuICAgICd1X3BhdHRlcm5fdGxfYSc6IFVuaWZvcm0yZixcbiAgICAndV9wYXR0ZXJuX2JyX2EnOiBVbmlmb3JtMmYsXG4gICAgJ3VfcGF0dGVybl90bF9iJzogVW5pZm9ybTJmLFxuICAgICd1X3BhdHRlcm5fYnJfYic6IFVuaWZvcm0yZixcbiAgICAndV90ZXhzaXplJzogVW5pZm9ybTJmLFxuICAgICd1X21peCc6IFVuaWZvcm0xZixcbiAgICAndV9wYXR0ZXJuX3NpemVfYSc6IFVuaWZvcm0yZixcbiAgICAndV9wYXR0ZXJuX3NpemVfYic6IFVuaWZvcm0yZixcbiAgICAndV9zY2FsZV9hJzogVW5pZm9ybTFmLFxuICAgICd1X3NjYWxlX2InOiBVbmlmb3JtMWYsXG4gICAgJ3VfcGl4ZWxfY29vcmRfdXBwZXInOiBVbmlmb3JtMmYsXG4gICAgJ3VfcGl4ZWxfY29vcmRfbG93ZXInOiBVbmlmb3JtMmYsXG4gICAgJ3VfdGlsZV91bml0c190b19waXhlbHMnOiBVbmlmb3JtMWZcbnx9O1xuXG5jb25zdCBiYWNrZ3JvdW5kVW5pZm9ybXMgPSAoY29udGV4dDogQ29udGV4dCwgbG9jYXRpb25zOiBVbmlmb3JtTG9jYXRpb25zKTogQmFja2dyb3VuZFVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KSxcbiAgICAndV9vcGFjaXR5JzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9vcGFjaXR5KSxcbiAgICAndV9jb2xvcic6IG5ldyBVbmlmb3JtQ29sb3IoY29udGV4dCwgbG9jYXRpb25zLnVfY29sb3IpXG59KTtcblxuY29uc3QgYmFja2dyb3VuZFBhdHRlcm5Vbmlmb3JtcyA9IChjb250ZXh0OiBDb250ZXh0LCBsb2NhdGlvbnM6IFVuaWZvcm1Mb2NhdGlvbnMpOiBCYWNrZ3JvdW5kUGF0dGVyblVuaWZvcm1zVHlwZSA9PiAoe1xuICAgICd1X21hdHJpeCc6IG5ldyBVbmlmb3JtTWF0cml4NGYoY29udGV4dCwgbG9jYXRpb25zLnVfbWF0cml4KSxcbiAgICAndV9vcGFjaXR5JzogbmV3IFVuaWZvcm0xZihjb250ZXh0LCBsb2NhdGlvbnMudV9vcGFjaXR5KSxcbiAgICAndV9pbWFnZSc6IG5ldyBVbmlmb3JtMWkoY29udGV4dCwgbG9jYXRpb25zLnVfaW1hZ2UpLFxuICAgICd1X3BhdHRlcm5fdGxfYSc6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfcGF0dGVybl90bF9hKSxcbiAgICAndV9wYXR0ZXJuX2JyX2EnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3BhdHRlcm5fYnJfYSksXG4gICAgJ3VfcGF0dGVybl90bF9iJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV9wYXR0ZXJuX3RsX2IpLFxuICAgICd1X3BhdHRlcm5fYnJfYic6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfcGF0dGVybl9icl9iKSxcbiAgICAndV90ZXhzaXplJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV90ZXhzaXplKSxcbiAgICAndV9taXgnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X21peCksXG4gICAgJ3VfcGF0dGVybl9zaXplX2EnOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3BhdHRlcm5fc2l6ZV9hKSxcbiAgICAndV9wYXR0ZXJuX3NpemVfYic6IG5ldyBVbmlmb3JtMmYoY29udGV4dCwgbG9jYXRpb25zLnVfcGF0dGVybl9zaXplX2IpLFxuICAgICd1X3NjYWxlX2EnOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3NjYWxlX2EpLFxuICAgICd1X3NjYWxlX2InOiBuZXcgVW5pZm9ybTFmKGNvbnRleHQsIGxvY2F0aW9ucy51X3NjYWxlX2IpLFxuICAgICd1X3BpeGVsX2Nvb3JkX3VwcGVyJzogbmV3IFVuaWZvcm0yZihjb250ZXh0LCBsb2NhdGlvbnMudV9waXhlbF9jb29yZF91cHBlciksXG4gICAgJ3VfcGl4ZWxfY29vcmRfbG93ZXInOiBuZXcgVW5pZm9ybTJmKGNvbnRleHQsIGxvY2F0aW9ucy51X3BpeGVsX2Nvb3JkX2xvd2VyKSxcbiAgICAndV90aWxlX3VuaXRzX3RvX3BpeGVscyc6IG5ldyBVbmlmb3JtMWYoY29udGV4dCwgbG9jYXRpb25zLnVfdGlsZV91bml0c190b19waXhlbHMpXG59KTtcblxuY29uc3QgYmFja2dyb3VuZFVuaWZvcm1WYWx1ZXMgPSAoXG4gICAgbWF0cml4OiBGbG9hdDMyQXJyYXksXG4gICAgb3BhY2l0eTogbnVtYmVyLFxuICAgIGNvbG9yOiBDb2xvclxuKTogVW5pZm9ybVZhbHVlczxCYWNrZ3JvdW5kVW5pZm9ybXNUeXBlPiA9PiAoe1xuICAgICd1X21hdHJpeCc6IG1hdHJpeCxcbiAgICAndV9vcGFjaXR5Jzogb3BhY2l0eSxcbiAgICAndV9jb2xvcic6IGNvbG9yXG59KTtcblxuY29uc3QgYmFja2dyb3VuZFBhdHRlcm5Vbmlmb3JtVmFsdWVzID0gKFxuICAgIG1hdHJpeDogRmxvYXQzMkFycmF5LFxuICAgIG9wYWNpdHk6IG51bWJlcixcbiAgICBwYWludGVyOiBQYWludGVyLFxuICAgIGltYWdlOiBDcm9zc0ZhZGVkPFJlc29sdmVkSW1hZ2U+LFxuICAgIHRpbGU6IHt0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQsIHRpbGVTaXplOiBudW1iZXJ9LFxuICAgIGNyb3NzZmFkZTogQ3Jvc3NmYWRlUGFyYW1ldGVyc1xuKTogVW5pZm9ybVZhbHVlczxCYWNrZ3JvdW5kUGF0dGVyblVuaWZvcm1zVHlwZT4gPT4gZXh0ZW5kKFxuICAgIGJnUGF0dGVyblVuaWZvcm1WYWx1ZXMoaW1hZ2UsIGNyb3NzZmFkZSwgcGFpbnRlciwgdGlsZSksXG4gICAge1xuICAgICAgICAndV9tYXRyaXgnOiBtYXRyaXgsXG4gICAgICAgICd1X29wYWNpdHknOiBvcGFjaXR5XG4gICAgfVxuKTtcblxuZXhwb3J0IHtcbiAgICBiYWNrZ3JvdW5kVW5pZm9ybXMsXG4gICAgYmFja2dyb3VuZFBhdHRlcm5Vbmlmb3JtcyxcbiAgICBiYWNrZ3JvdW5kVW5pZm9ybVZhbHVlcyxcbiAgICBiYWNrZ3JvdW5kUGF0dGVyblVuaWZvcm1WYWx1ZXNcbn07XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2ZpbGxFeHRydXNpb25Vbmlmb3JtcywgZmlsbEV4dHJ1c2lvblBhdHRlcm5Vbmlmb3Jtc30gZnJvbSAnLi9maWxsX2V4dHJ1c2lvbl9wcm9ncmFtJztcbmltcG9ydCB7ZmlsbFVuaWZvcm1zLCBmaWxsUGF0dGVyblVuaWZvcm1zLCBmaWxsT3V0bGluZVVuaWZvcm1zLCBmaWxsT3V0bGluZVBhdHRlcm5Vbmlmb3Jtc30gZnJvbSAnLi9maWxsX3Byb2dyYW0nO1xuaW1wb3J0IHtjaXJjbGVVbmlmb3Jtc30gZnJvbSAnLi9jaXJjbGVfcHJvZ3JhbSc7XG5pbXBvcnQge2NvbGxpc2lvblVuaWZvcm1zLCBjb2xsaXNpb25DaXJjbGVVbmlmb3Jtc30gZnJvbSAnLi9jb2xsaXNpb25fcHJvZ3JhbSc7XG5pbXBvcnQge2RlYnVnVW5pZm9ybXN9IGZyb20gJy4vZGVidWdfcHJvZ3JhbSc7XG5pbXBvcnQge2NsaXBwaW5nTWFza1VuaWZvcm1zfSBmcm9tICcuL2NsaXBwaW5nX21hc2tfcHJvZ3JhbSc7XG5pbXBvcnQge2hlYXRtYXBVbmlmb3JtcywgaGVhdG1hcFRleHR1cmVVbmlmb3Jtc30gZnJvbSAnLi9oZWF0bWFwX3Byb2dyYW0nO1xuaW1wb3J0IHtoaWxsc2hhZGVVbmlmb3JtcywgaGlsbHNoYWRlUHJlcGFyZVVuaWZvcm1zfSBmcm9tICcuL2hpbGxzaGFkZV9wcm9ncmFtJztcbmltcG9ydCB7bGluZVVuaWZvcm1zLCBsaW5lR3JhZGllbnRVbmlmb3JtcywgbGluZVBhdHRlcm5Vbmlmb3JtcywgbGluZVNERlVuaWZvcm1zfSBmcm9tICcuL2xpbmVfcHJvZ3JhbSc7XG5pbXBvcnQge3Jhc3RlclVuaWZvcm1zfSBmcm9tICcuL3Jhc3Rlcl9wcm9ncmFtJztcbmltcG9ydCB7c3ltYm9sSWNvblVuaWZvcm1zLCBzeW1ib2xTREZVbmlmb3Jtcywgc3ltYm9sVGV4dEFuZEljb25Vbmlmb3Jtc30gZnJvbSAnLi9zeW1ib2xfcHJvZ3JhbSc7XG5pbXBvcnQge2JhY2tncm91bmRVbmlmb3JtcywgYmFja2dyb3VuZFBhdHRlcm5Vbmlmb3Jtc30gZnJvbSAnLi9iYWNrZ3JvdW5kX3Byb2dyYW0nO1xuXG5leHBvcnQgY29uc3QgcHJvZ3JhbVVuaWZvcm1zID0ge1xuICAgIGZpbGxFeHRydXNpb246IGZpbGxFeHRydXNpb25Vbmlmb3JtcyxcbiAgICBmaWxsRXh0cnVzaW9uUGF0dGVybjogZmlsbEV4dHJ1c2lvblBhdHRlcm5Vbmlmb3JtcyxcbiAgICBmaWxsOiBmaWxsVW5pZm9ybXMsXG4gICAgZmlsbFBhdHRlcm46IGZpbGxQYXR0ZXJuVW5pZm9ybXMsXG4gICAgZmlsbE91dGxpbmU6IGZpbGxPdXRsaW5lVW5pZm9ybXMsXG4gICAgZmlsbE91dGxpbmVQYXR0ZXJuOiBmaWxsT3V0bGluZVBhdHRlcm5Vbmlmb3JtcyxcbiAgICBjaXJjbGU6IGNpcmNsZVVuaWZvcm1zLFxuICAgIGNvbGxpc2lvbkJveDogY29sbGlzaW9uVW5pZm9ybXMsXG4gICAgY29sbGlzaW9uQ2lyY2xlOiBjb2xsaXNpb25DaXJjbGVVbmlmb3JtcyxcbiAgICBkZWJ1ZzogZGVidWdVbmlmb3JtcyxcbiAgICBjbGlwcGluZ01hc2s6IGNsaXBwaW5nTWFza1VuaWZvcm1zLFxuICAgIGhlYXRtYXA6IGhlYXRtYXBVbmlmb3JtcyxcbiAgICBoZWF0bWFwVGV4dHVyZTogaGVhdG1hcFRleHR1cmVVbmlmb3JtcyxcbiAgICBoaWxsc2hhZGU6IGhpbGxzaGFkZVVuaWZvcm1zLFxuICAgIGhpbGxzaGFkZVByZXBhcmU6IGhpbGxzaGFkZVByZXBhcmVVbmlmb3JtcyxcbiAgICBsaW5lOiBsaW5lVW5pZm9ybXMsXG4gICAgbGluZUdyYWRpZW50OiBsaW5lR3JhZGllbnRVbmlmb3JtcyxcbiAgICBsaW5lUGF0dGVybjogbGluZVBhdHRlcm5Vbmlmb3JtcyxcbiAgICBsaW5lU0RGOiBsaW5lU0RGVW5pZm9ybXMsXG4gICAgcmFzdGVyOiByYXN0ZXJVbmlmb3JtcyxcbiAgICBzeW1ib2xJY29uOiBzeW1ib2xJY29uVW5pZm9ybXMsXG4gICAgc3ltYm9sU0RGOiBzeW1ib2xTREZVbmlmb3JtcyxcbiAgICBzeW1ib2xUZXh0QW5kSWNvbjogc3ltYm9sVGV4dEFuZEljb25Vbmlmb3JtcyxcbiAgICBiYWNrZ3JvdW5kOiBiYWNrZ3JvdW5kVW5pZm9ybXMsXG4gICAgYmFja2dyb3VuZFBhdHRlcm46IGJhY2tncm91bmRQYXR0ZXJuVW5pZm9ybXNcbn07XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgdHlwZSBQYWludGVyIGZyb20gJy4vcGFpbnRlcic7XG5pbXBvcnQgdHlwZSBTb3VyY2VDYWNoZSBmcm9tICcuLi9zb3VyY2Uvc291cmNlX2NhY2hlJztcbmltcG9ydCB0eXBlIFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uL3NvdXJjZS90aWxlX2lkJztcbmltcG9ydCB0eXBlIFN5bWJvbEJ1Y2tldCBmcm9tICcuLi9kYXRhL2J1Y2tldC9zeW1ib2xfYnVja2V0JztcbmltcG9ydCBEZXB0aE1vZGUgZnJvbSAnLi4vZ2wvZGVwdGhfbW9kZSc7XG5pbXBvcnQgU3RlbmNpbE1vZGUgZnJvbSAnLi4vZ2wvc3RlbmNpbF9tb2RlJztcbmltcG9ydCBDdWxsRmFjZU1vZGUgZnJvbSAnLi4vZ2wvY3VsbF9mYWNlX21vZGUnO1xuaW1wb3J0IHtjb2xsaXNpb25Vbmlmb3JtVmFsdWVzLCBjb2xsaXNpb25DaXJjbGVVbmlmb3JtVmFsdWVzfSBmcm9tICcuL3Byb2dyYW0vY29sbGlzaW9uX3Byb2dyYW0nO1xuXG5pbXBvcnQge1F1YWRUcmlhbmdsZUFycmF5LCBDb2xsaXNpb25DaXJjbGVMYXlvdXRBcnJheX0gZnJvbSAnLi4vZGF0YS9hcnJheV90eXBlcyc7XG5pbXBvcnQge2NvbGxpc2lvbkNpcmNsZUxheW91dH0gZnJvbSAnLi4vZGF0YS9idWNrZXQvc3ltYm9sX2F0dHJpYnV0ZXMnO1xuaW1wb3J0IFNlZ21lbnRWZWN0b3IgZnJvbSAnLi4vZGF0YS9zZWdtZW50JztcbmltcG9ydCB7bWF0NH0gZnJvbSAnZ2wtbWF0cml4JztcbmltcG9ydCBWZXJ0ZXhCdWZmZXIgZnJvbSAnLi4vZ2wvdmVydGV4X2J1ZmZlcic7XG5pbXBvcnQgSW5kZXhCdWZmZXIgZnJvbSAnLi4vZ2wvaW5kZXhfYnVmZmVyJztcblxuZXhwb3J0IGRlZmF1bHQgZHJhd0NvbGxpc2lvbkRlYnVnO1xuXG50eXBlIFRpbGVCYXRjaCA9IHtcbiAgICBjaXJjbGVBcnJheTogQXJyYXk8bnVtYmVyPixcbiAgICBjaXJjbGVPZmZzZXQ6IG51bWJlcixcbiAgICB0cmFuc2Zvcm06IG1hdDQsXG4gICAgaW52VHJhbnNmb3JtOiBtYXQ0XG59O1xuXG5sZXQgcXVhZFRyaWFuZ2xlczogP1F1YWRUcmlhbmdsZUFycmF5O1xuXG5mdW5jdGlvbiBkcmF3Q29sbGlzaW9uRGVidWcocGFpbnRlcjogUGFpbnRlciwgc291cmNlQ2FjaGU6IFNvdXJjZUNhY2hlLCBsYXllcjogU3R5bGVMYXllciwgY29vcmRzOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPiwgdHJhbnNsYXRlOiBbbnVtYmVyLCBudW1iZXJdLCB0cmFuc2xhdGVBbmNob3I6ICdtYXAnIHwgJ3ZpZXdwb3J0JywgaXNUZXh0OiBib29sZWFuKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgY29uc3QgcHJvZ3JhbSA9IHBhaW50ZXIudXNlUHJvZ3JhbSgnY29sbGlzaW9uQm94Jyk7XG4gICAgY29uc3QgdGlsZUJhdGNoZXM6IEFycmF5PFRpbGVCYXRjaD4gPSBbXTtcbiAgICBsZXQgY2lyY2xlQ291bnQgPSAwO1xuICAgIGxldCBjaXJjbGVPZmZzZXQgPSAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29yZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY29vcmQgPSBjb29yZHNbaV07XG4gICAgICAgIGNvbnN0IHRpbGUgPSBzb3VyY2VDYWNoZS5nZXRUaWxlKGNvb3JkKTtcbiAgICAgICAgY29uc3QgYnVja2V0OiA/U3ltYm9sQnVja2V0ID0gKHRpbGUuZ2V0QnVja2V0KGxheWVyKTogYW55KTtcbiAgICAgICAgaWYgKCFidWNrZXQpIGNvbnRpbnVlO1xuICAgICAgICBsZXQgcG9zTWF0cml4ID0gY29vcmQucG9zTWF0cml4O1xuICAgICAgICBpZiAodHJhbnNsYXRlWzBdICE9PSAwIHx8IHRyYW5zbGF0ZVsxXSAhPT0gMCkge1xuICAgICAgICAgICAgcG9zTWF0cml4ID0gcGFpbnRlci50cmFuc2xhdGVQb3NNYXRyaXgoY29vcmQucG9zTWF0cml4LCB0aWxlLCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUFuY2hvcik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYnVmZmVycyA9IGlzVGV4dCA/IGJ1Y2tldC50ZXh0Q29sbGlzaW9uQm94IDogYnVja2V0Lmljb25Db2xsaXNpb25Cb3g7XG4gICAgICAgIC8vIEdldCBjb2xsaXNpb24gY2lyY2xlIGRhdGEgb2YgdGhpcyBidWNrZXRcbiAgICAgICAgY29uc3QgY2lyY2xlQXJyYXk6IEFycmF5PG51bWJlcj4gPSBidWNrZXQuY29sbGlzaW9uQ2lyY2xlQXJyYXk7XG4gICAgICAgIGlmIChjaXJjbGVBcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGtub3cgdGhlIHByb2plY3Rpb24gbWF0cml4IHRoYXQgd2FzIHVzZWQgZm9yIHByb2plY3RpbmcgY29sbGlzaW9uIGNpcmNsZXMgdG8gdGhlIHNjcmVlbi5cbiAgICAgICAgICAgIC8vIFRoaXMgbWlnaHQgdmFyeSBiZXR3ZWVuIGJ1Y2tldHMgYXMgdGhlIHN5bWJvbCBwbGFjZW1lbnQgaXMgYSBjb250aW5vdXMgcHJvY2Vzcy4gVGhpcyBtYXRyaXggaXNcbiAgICAgICAgICAgIC8vIHJlcXVpcmVkIGZvciB0cmFuc2Zvcm1pbmcgcG9pbnRzIGZyb20gcHJldmlvdXMgc2NyZWVuIHNwYWNlIHRvIHRoZSBjdXJyZW50IG9uZVxuICAgICAgICAgICAgY29uc3QgaW52VHJhbnNmb3JtID0gbWF0NC5jcmVhdGUoKTtcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IHBvc01hdHJpeDtcblxuICAgICAgICAgICAgbWF0NC5tdWwoaW52VHJhbnNmb3JtLCBidWNrZXQucGxhY2VtZW50SW52UHJvak1hdHJpeCwgcGFpbnRlci50cmFuc2Zvcm0uZ2xDb29yZE1hdHJpeCk7XG4gICAgICAgICAgICBtYXQ0Lm11bChpbnZUcmFuc2Zvcm0sIGludlRyYW5zZm9ybSwgYnVja2V0LnBsYWNlbWVudFZpZXdwb3J0TWF0cml4KTtcblxuICAgICAgICAgICAgdGlsZUJhdGNoZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgY2lyY2xlQXJyYXksXG4gICAgICAgICAgICAgICAgY2lyY2xlT2Zmc2V0LFxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICBpbnZUcmFuc2Zvcm1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjaXJjbGVDb3VudCArPSBjaXJjbGVBcnJheS5sZW5ndGggLyA0OyAgLy8gNCB2YWx1ZXMgcGVyIGNpcmNsZVxuICAgICAgICAgICAgY2lyY2xlT2Zmc2V0ID0gY2lyY2xlQ291bnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFidWZmZXJzKSBjb250aW51ZTtcbiAgICAgICAgcHJvZ3JhbS5kcmF3KGNvbnRleHQsIGdsLkxJTkVTLFxuICAgICAgICAgICAgRGVwdGhNb2RlLmRpc2FibGVkLCBTdGVuY2lsTW9kZS5kaXNhYmxlZCxcbiAgICAgICAgICAgIHBhaW50ZXIuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpLFxuICAgICAgICAgICAgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLFxuICAgICAgICAgICAgY29sbGlzaW9uVW5pZm9ybVZhbHVlcyhcbiAgICAgICAgICAgICAgICBwb3NNYXRyaXgsXG4gICAgICAgICAgICAgICAgcGFpbnRlci50cmFuc2Zvcm0sXG4gICAgICAgICAgICAgICAgdGlsZSksXG4gICAgICAgICAgICBsYXllci5pZCwgYnVmZmVycy5sYXlvdXRWZXJ0ZXhCdWZmZXIsIGJ1ZmZlcnMuaW5kZXhCdWZmZXIsXG4gICAgICAgICAgICBidWZmZXJzLnNlZ21lbnRzLCBudWxsLCBwYWludGVyLnRyYW5zZm9ybS56b29tLCBudWxsLCBudWxsLFxuICAgICAgICAgICAgYnVmZmVycy5jb2xsaXNpb25WZXJ0ZXhCdWZmZXIpO1xuICAgIH1cblxuICAgIGlmICghaXNUZXh0IHx8ICF0aWxlQmF0Y2hlcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFJlbmRlciBjb2xsaXNpb24gY2lyY2xlc1xuICAgIGNvbnN0IGNpcmNsZVByb2dyYW0gPSBwYWludGVyLnVzZVByb2dyYW0oJ2NvbGxpc2lvbkNpcmNsZScpO1xuXG4gICAgLy8gQ29uc3RydWN0IHZlcnRleCBkYXRhXG4gICAgY29uc3QgdmVydGV4RGF0YSA9IG5ldyBDb2xsaXNpb25DaXJjbGVMYXlvdXRBcnJheSgpO1xuICAgIHZlcnRleERhdGEucmVzaXplKGNpcmNsZUNvdW50ICogNCk7XG4gICAgdmVydGV4RGF0YS5fdHJpbSgpO1xuXG4gICAgbGV0IHZlcnRleE9mZnNldCA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IGJhdGNoIG9mIHRpbGVCYXRjaGVzKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmF0Y2guY2lyY2xlQXJyYXkubGVuZ3RoIC8gNDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjaXJjbGVJZHggPSBpICogNDtcbiAgICAgICAgICAgIGNvbnN0IHggPSBiYXRjaC5jaXJjbGVBcnJheVtjaXJjbGVJZHggKyAwXTtcbiAgICAgICAgICAgIGNvbnN0IHkgPSBiYXRjaC5jaXJjbGVBcnJheVtjaXJjbGVJZHggKyAxXTtcbiAgICAgICAgICAgIGNvbnN0IHJhZGl1cyA9IGJhdGNoLmNpcmNsZUFycmF5W2NpcmNsZUlkeCArIDJdO1xuICAgICAgICAgICAgY29uc3QgY29sbGlzaW9uID0gYmF0Y2guY2lyY2xlQXJyYXlbY2lyY2xlSWR4ICsgM107XG5cbiAgICAgICAgICAgIC8vIDQgZmxvYXRzIHBlciB2ZXJ0ZXgsIDQgdmVydGljZXMgcGVyIHF1YWRcbiAgICAgICAgICAgIHZlcnRleERhdGEuZW1wbGFjZSh2ZXJ0ZXhPZmZzZXQrKywgeCwgeSwgcmFkaXVzLCBjb2xsaXNpb24sIDApO1xuICAgICAgICAgICAgdmVydGV4RGF0YS5lbXBsYWNlKHZlcnRleE9mZnNldCsrLCB4LCB5LCByYWRpdXMsIGNvbGxpc2lvbiwgMSk7XG4gICAgICAgICAgICB2ZXJ0ZXhEYXRhLmVtcGxhY2UodmVydGV4T2Zmc2V0KyssIHgsIHksIHJhZGl1cywgY29sbGlzaW9uLCAyKTtcbiAgICAgICAgICAgIHZlcnRleERhdGEuZW1wbGFjZSh2ZXJ0ZXhPZmZzZXQrKywgeCwgeSwgcmFkaXVzLCBjb2xsaXNpb24sIDMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICghcXVhZFRyaWFuZ2xlcyB8fCBxdWFkVHJpYW5nbGVzLmxlbmd0aCA8IGNpcmNsZUNvdW50ICogMikge1xuICAgICAgICBxdWFkVHJpYW5nbGVzID0gY3JlYXRlUXVhZFRyaWFuZ2xlcyhjaXJjbGVDb3VudCk7XG4gICAgfVxuXG4gICAgY29uc3QgaW5kZXhCdWZmZXI6IEluZGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVJbmRleEJ1ZmZlcihxdWFkVHJpYW5nbGVzLCB0cnVlKTtcbiAgICBjb25zdCB2ZXJ0ZXhCdWZmZXI6IFZlcnRleEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHZlcnRleERhdGEsIGNvbGxpc2lvbkNpcmNsZUxheW91dC5tZW1iZXJzLCB0cnVlKTtcblxuICAgIC8vIFJlbmRlciBiYXRjaGVzXG4gICAgZm9yIChjb25zdCBiYXRjaCBvZiB0aWxlQmF0Y2hlcykge1xuICAgICAgICBjb25zdCB1bmlmb3JtcyA9IGNvbGxpc2lvbkNpcmNsZVVuaWZvcm1WYWx1ZXMoXG4gICAgICAgICAgICBiYXRjaC50cmFuc2Zvcm0sXG4gICAgICAgICAgICBiYXRjaC5pbnZUcmFuc2Zvcm0sXG4gICAgICAgICAgICBwYWludGVyLnRyYW5zZm9ybVxuICAgICAgICApO1xuXG4gICAgICAgIGNpcmNsZVByb2dyYW0uZHJhdyhcbiAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICBnbC5UUklBTkdMRVMsXG4gICAgICAgICAgICBEZXB0aE1vZGUuZGlzYWJsZWQsXG4gICAgICAgICAgICBTdGVuY2lsTW9kZS5kaXNhYmxlZCxcbiAgICAgICAgICAgIHBhaW50ZXIuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpLFxuICAgICAgICAgICAgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLFxuICAgICAgICAgICAgdW5pZm9ybXMsXG4gICAgICAgICAgICBsYXllci5pZCxcbiAgICAgICAgICAgIHZlcnRleEJ1ZmZlcixcbiAgICAgICAgICAgIGluZGV4QnVmZmVyLFxuICAgICAgICAgICAgU2VnbWVudFZlY3Rvci5zaW1wbGVTZWdtZW50KDAsIGJhdGNoLmNpcmNsZU9mZnNldCAqIDIsIGJhdGNoLmNpcmNsZUFycmF5Lmxlbmd0aCwgYmF0Y2guY2lyY2xlQXJyYXkubGVuZ3RoIC8gMiksXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgcGFpbnRlci50cmFuc2Zvcm0uem9vbSxcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgbnVsbCk7XG4gICAgfVxuXG4gICAgdmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcbiAgICBpbmRleEJ1ZmZlci5kZXN0cm95KCk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVF1YWRUcmlhbmdsZXMocXVhZENvdW50OiBudW1iZXIpOiBRdWFkVHJpYW5nbGVBcnJheSB7XG4gICAgY29uc3QgdHJpQ291bnQgPSBxdWFkQ291bnQgKiAyO1xuICAgIGNvbnN0IGFycmF5ID0gbmV3IFF1YWRUcmlhbmdsZUFycmF5KCk7XG5cbiAgICBhcnJheS5yZXNpemUodHJpQ291bnQpO1xuICAgIGFycmF5Ll90cmltKCk7XG5cbiAgICAvLyBUd28gdHJpYW5nbGVzIGFuZCA0IHZlcnRpY2VzIHBlciBxdWFkLlxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHJpQ291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCBpZHggPSBpICogNjtcblxuICAgICAgICBhcnJheS51aW50MTZbaWR4ICsgMF0gPSBpICogNCArIDA7XG4gICAgICAgIGFycmF5LnVpbnQxNltpZHggKyAxXSA9IGkgKiA0ICsgMTtcbiAgICAgICAgYXJyYXkudWludDE2W2lkeCArIDJdID0gaSAqIDQgKyAyO1xuICAgICAgICBhcnJheS51aW50MTZbaWR4ICsgM10gPSBpICogNCArIDI7XG4gICAgICAgIGFycmF5LnVpbnQxNltpZHggKyA0XSA9IGkgKiA0ICsgMztcbiAgICAgICAgYXJyYXkudWludDE2W2lkeCArIDVdID0gaSAqIDQgKyAwO1xuICAgIH1cblxuICAgIHJldHVybiBhcnJheTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCBkcmF3Q29sbGlzaW9uRGVidWcgZnJvbSAnLi9kcmF3X2NvbGxpc2lvbl9kZWJ1Zyc7XG5cbmltcG9ydCBTZWdtZW50VmVjdG9yIGZyb20gJy4uL2RhdGEvc2VnbWVudCc7XG5pbXBvcnQgcGl4ZWxzVG9UaWxlVW5pdHMgZnJvbSAnLi4vc291cmNlL3BpeGVsc190b190aWxlX3VuaXRzJztcbmltcG9ydCAqIGFzIHN5bWJvbFByb2plY3Rpb24gZnJvbSAnLi4vc3ltYm9sL3Byb2plY3Rpb24nO1xuaW1wb3J0ICogYXMgc3ltYm9sU2l6ZSBmcm9tICcuLi9zeW1ib2wvc3ltYm9sX3NpemUnO1xuaW1wb3J0IHttYXQ0fSBmcm9tICdnbC1tYXRyaXgnO1xuY29uc3QgaWRlbnRpdHlNYXQ0ID0gbWF0NC5pZGVudGl0eShuZXcgRmxvYXQzMkFycmF5KDE2KSk7XG5pbXBvcnQgU3RlbmNpbE1vZGUgZnJvbSAnLi4vZ2wvc3RlbmNpbF9tb2RlJztcbmltcG9ydCBEZXB0aE1vZGUgZnJvbSAnLi4vZ2wvZGVwdGhfbW9kZSc7XG5pbXBvcnQgQ3VsbEZhY2VNb2RlIGZyb20gJy4uL2dsL2N1bGxfZmFjZV9tb2RlJztcbmltcG9ydCB7YWRkRHluYW1pY0F0dHJpYnV0ZXN9IGZyb20gJy4uL2RhdGEvYnVja2V0L3N5bWJvbF9idWNrZXQnO1xuXG5pbXBvcnQge2dldEFuY2hvckFsaWdubWVudCwgV3JpdGluZ01vZGV9IGZyb20gJy4uL3N5bWJvbC9zaGFwaW5nJztcbmltcG9ydCBPTkVfRU0gZnJvbSAnLi4vc3ltYm9sL29uZV9lbSc7XG5pbXBvcnQge2V2YWx1YXRlVmFyaWFibGVPZmZzZXR9IGZyb20gJy4uL3N5bWJvbC9zeW1ib2xfbGF5b3V0JztcblxuaW1wb3J0IHtcbiAgICBzeW1ib2xJY29uVW5pZm9ybVZhbHVlcyxcbiAgICBzeW1ib2xTREZVbmlmb3JtVmFsdWVzLFxuICAgIHN5bWJvbFRleHRBbmRJY29uVW5pZm9ybVZhbHVlc1xufSBmcm9tICcuL3Byb2dyYW0vc3ltYm9sX3Byb2dyYW0nO1xuXG5pbXBvcnQgdHlwZSBQYWludGVyIGZyb20gJy4vcGFpbnRlcic7XG5pbXBvcnQgdHlwZSBTb3VyY2VDYWNoZSBmcm9tICcuLi9zb3VyY2Uvc291cmNlX2NhY2hlJztcbmltcG9ydCB0eXBlIFN5bWJvbFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXIvc3ltYm9sX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIFN5bWJvbEJ1Y2tldCwge1N5bWJvbEJ1ZmZlcnN9IGZyb20gJy4uL2RhdGEvYnVja2V0L3N5bWJvbF9idWNrZXQnO1xuaW1wb3J0IHR5cGUgVGV4dHVyZSBmcm9tICcuLi9yZW5kZXIvdGV4dHVyZSc7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi4vc291cmNlL3RpbGVfaWQnO1xuaW1wb3J0IHR5cGUge1VuaWZvcm1WYWx1ZXN9IGZyb20gJy4vdW5pZm9ybV9iaW5kaW5nJztcbmltcG9ydCB0eXBlIHtTeW1ib2xTREZVbmlmb3Jtc1R5cGV9IGZyb20gJy4uL3JlbmRlci9wcm9ncmFtL3N5bWJvbF9wcm9ncmFtJztcbmltcG9ydCB0eXBlIHtDcm9zc1RpbGVJRCwgVmFyaWFibGVPZmZzZXR9IGZyb20gJy4uL3N5bWJvbC9wbGFjZW1lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBkcmF3U3ltYm9scztcblxudHlwZSBTeW1ib2xUaWxlUmVuZGVyU3RhdGUgPSB7XG4gICAgc2VnbWVudHM6IFNlZ21lbnRWZWN0b3IsXG4gICAgc29ydEtleTogbnVtYmVyLFxuICAgIHN0YXRlOiB7XG4gICAgICAgIHByb2dyYW06IGFueSxcbiAgICAgICAgYnVmZmVyczogU3ltYm9sQnVmZmVycyxcbiAgICAgICAgdW5pZm9ybVZhbHVlczogYW55LFxuICAgICAgICBhdGxhc1RleHR1cmU6IFRleHR1cmUsXG4gICAgICAgIGF0bGFzVGV4dHVyZUljb246IFRleHR1cmUgfCBudWxsLFxuICAgICAgICBhdGxhc0ludGVycG9sYXRpb246IGFueSxcbiAgICAgICAgYXRsYXNJbnRlcnBvbGF0aW9uSWNvbjogYW55LFxuICAgICAgICBpc1NERjogYm9vbGVhbixcbiAgICAgICAgaGFzSGFsbzogYm9vbGVhblxuICAgIH1cbn07XG5cbmZ1bmN0aW9uIGRyYXdTeW1ib2xzKHBhaW50ZXI6IFBhaW50ZXIsIHNvdXJjZUNhY2hlOiBTb3VyY2VDYWNoZSwgbGF5ZXI6IFN5bWJvbFN0eWxlTGF5ZXIsIGNvb3JkczogQXJyYXk8T3ZlcnNjYWxlZFRpbGVJRD4sIHZhcmlhYmxlT2Zmc2V0czoge1tfOiBDcm9zc1RpbGVJRF06IFZhcmlhYmxlT2Zmc2V0fSkge1xuICAgIGlmIChwYWludGVyLnJlbmRlclBhc3MgIT09ICd0cmFuc2x1Y2VudCcpIHJldHVybjtcblxuICAgIC8vIERpc2FibGUgdGhlIHN0ZW5jaWwgdGVzdCBzbyB0aGF0IGxhYmVscyBhcmVuJ3QgY2xpcHBlZCB0byB0aWxlIGJvdW5kYXJpZXMuXG4gICAgY29uc3Qgc3RlbmNpbE1vZGUgPSBTdGVuY2lsTW9kZS5kaXNhYmxlZDtcbiAgICBjb25zdCBjb2xvck1vZGUgPSBwYWludGVyLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKTtcbiAgICBjb25zdCB2YXJpYWJsZVBsYWNlbWVudCA9IGxheWVyLmxheW91dC5nZXQoJ3RleHQtdmFyaWFibGUtYW5jaG9yJyk7XG5cbiAgICAvL0NvbXB1dGUgdmFyaWFibGUtb2Zmc2V0cyBiZWZvcmUgcGFpbnRpbmcgc2luY2UgaWNvbnMgYW5kIHRleHQgZGF0YSBwb3NpdGlvbmluZ1xuICAgIC8vZGVwZW5kIG9uIGVhY2ggb3RoZXIgaW4gdGhpcyBjYXNlLlxuICAgIGlmICh2YXJpYWJsZVBsYWNlbWVudCkge1xuICAgICAgICB1cGRhdGVWYXJpYWJsZUFuY2hvcnMoY29vcmRzLCBwYWludGVyLCBsYXllciwgc291cmNlQ2FjaGUsXG4gICAgICAgICAgICBsYXllci5sYXlvdXQuZ2V0KCd0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCcpLFxuICAgICAgICAgICAgbGF5ZXIubGF5b3V0LmdldCgndGV4dC1waXRjaC1hbGlnbm1lbnQnKSxcbiAgICAgICAgICAgIHZhcmlhYmxlT2Zmc2V0c1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChsYXllci5wYWludC5nZXQoJ2ljb24tb3BhY2l0eScpLmNvbnN0YW50T3IoMSkgIT09IDApIHtcbiAgICAgICAgZHJhd0xheWVyU3ltYm9scyhwYWludGVyLCBzb3VyY2VDYWNoZSwgbGF5ZXIsIGNvb3JkcywgZmFsc2UsXG4gICAgICAgICAgICBsYXllci5wYWludC5nZXQoJ2ljb24tdHJhbnNsYXRlJyksXG4gICAgICAgICAgICBsYXllci5wYWludC5nZXQoJ2ljb24tdHJhbnNsYXRlLWFuY2hvcicpLFxuICAgICAgICAgICAgbGF5ZXIubGF5b3V0LmdldCgnaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQnKSxcbiAgICAgICAgICAgIGxheWVyLmxheW91dC5nZXQoJ2ljb24tcGl0Y2gtYWxpZ25tZW50JyksXG4gICAgICAgICAgICBsYXllci5sYXlvdXQuZ2V0KCdpY29uLWtlZXAtdXByaWdodCcpLFxuICAgICAgICAgICAgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGlmIChsYXllci5wYWludC5nZXQoJ3RleHQtb3BhY2l0eScpLmNvbnN0YW50T3IoMSkgIT09IDApIHtcbiAgICAgICAgZHJhd0xheWVyU3ltYm9scyhwYWludGVyLCBzb3VyY2VDYWNoZSwgbGF5ZXIsIGNvb3JkcywgdHJ1ZSxcbiAgICAgICAgICAgIGxheWVyLnBhaW50LmdldCgndGV4dC10cmFuc2xhdGUnKSxcbiAgICAgICAgICAgIGxheWVyLnBhaW50LmdldCgndGV4dC10cmFuc2xhdGUtYW5jaG9yJyksXG4gICAgICAgICAgICBsYXllci5sYXlvdXQuZ2V0KCd0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCcpLFxuICAgICAgICAgICAgbGF5ZXIubGF5b3V0LmdldCgndGV4dC1waXRjaC1hbGlnbm1lbnQnKSxcbiAgICAgICAgICAgIGxheWVyLmxheW91dC5nZXQoJ3RleHQta2VlcC11cHJpZ2h0JyksXG4gICAgICAgICAgICBzdGVuY2lsTW9kZSwgY29sb3JNb2RlXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHNvdXJjZUNhY2hlLm1hcC5zaG93Q29sbGlzaW9uQm94ZXMpIHtcbiAgICAgICAgZHJhd0NvbGxpc2lvbkRlYnVnKHBhaW50ZXIsIHNvdXJjZUNhY2hlLCBsYXllciwgY29vcmRzLCBsYXllci5wYWludC5nZXQoJ3RleHQtdHJhbnNsYXRlJyksXG4gICAgICAgICAgICBsYXllci5wYWludC5nZXQoJ3RleHQtdHJhbnNsYXRlLWFuY2hvcicpLCB0cnVlKTtcbiAgICAgICAgZHJhd0NvbGxpc2lvbkRlYnVnKHBhaW50ZXIsIHNvdXJjZUNhY2hlLCBsYXllciwgY29vcmRzLCBsYXllci5wYWludC5nZXQoJ2ljb24tdHJhbnNsYXRlJyksXG4gICAgICAgICAgICBsYXllci5wYWludC5nZXQoJ2ljb24tdHJhbnNsYXRlLWFuY2hvcicpLCBmYWxzZSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVWYXJpYWJsZVJlbmRlclNoaWZ0KGFuY2hvciwgd2lkdGgsIGhlaWdodCwgdGV4dE9mZnNldCwgdGV4dEJveFNjYWxlLCByZW5kZXJUZXh0U2l6ZSk6IFBvaW50IHtcbiAgICBjb25zdCB7aG9yaXpvbnRhbEFsaWduLCB2ZXJ0aWNhbEFsaWdufSA9IGdldEFuY2hvckFsaWdubWVudChhbmNob3IpO1xuICAgIGNvbnN0IHNoaWZ0WCA9IC0oaG9yaXpvbnRhbEFsaWduIC0gMC41KSAqIHdpZHRoO1xuICAgIGNvbnN0IHNoaWZ0WSA9IC0odmVydGljYWxBbGlnbiAtIDAuNSkgKiBoZWlnaHQ7XG4gICAgY29uc3QgdmFyaWFibGVPZmZzZXQgPSBldmFsdWF0ZVZhcmlhYmxlT2Zmc2V0KGFuY2hvciwgdGV4dE9mZnNldCk7XG4gICAgcmV0dXJuIG5ldyBQb2ludChcbiAgICAgICAgKHNoaWZ0WCAvIHRleHRCb3hTY2FsZSArIHZhcmlhYmxlT2Zmc2V0WzBdKSAqIHJlbmRlclRleHRTaXplLFxuICAgICAgICAoc2hpZnRZIC8gdGV4dEJveFNjYWxlICsgdmFyaWFibGVPZmZzZXRbMV0pICogcmVuZGVyVGV4dFNpemVcbiAgICApO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVWYXJpYWJsZUFuY2hvcnMoY29vcmRzLCBwYWludGVyLCBsYXllciwgc291cmNlQ2FjaGUsIHJvdGF0aW9uQWxpZ25tZW50LCBwaXRjaEFsaWdubWVudCwgdmFyaWFibGVPZmZzZXRzKSB7XG4gICAgY29uc3QgdHIgPSBwYWludGVyLnRyYW5zZm9ybTtcbiAgICBjb25zdCByb3RhdGVXaXRoTWFwID0gcm90YXRpb25BbGlnbm1lbnQgPT09ICdtYXAnO1xuICAgIGNvbnN0IHBpdGNoV2l0aE1hcCA9IHBpdGNoQWxpZ25tZW50ID09PSAnbWFwJztcblxuICAgIGZvciAoY29uc3QgY29vcmQgb2YgY29vcmRzKSB7XG4gICAgICAgIGNvbnN0IHRpbGUgPSBzb3VyY2VDYWNoZS5nZXRUaWxlKGNvb3JkKTtcbiAgICAgICAgY29uc3QgYnVja2V0OiBTeW1ib2xCdWNrZXQgPSAodGlsZS5nZXRCdWNrZXQobGF5ZXIpOiBhbnkpO1xuICAgICAgICBpZiAoIWJ1Y2tldCB8fCAhYnVja2V0LnRleHQgfHwgIWJ1Y2tldC50ZXh0LnNlZ21lbnRzLmdldCgpLmxlbmd0aCkgY29udGludWU7XG5cbiAgICAgICAgY29uc3Qgc2l6ZURhdGEgPSBidWNrZXQudGV4dFNpemVEYXRhO1xuICAgICAgICBjb25zdCBzaXplID0gc3ltYm9sU2l6ZS5ldmFsdWF0ZVNpemVGb3Jab29tKHNpemVEYXRhLCB0ci56b29tKTtcblxuICAgICAgICBjb25zdCBwaXhlbFRvVGlsZVNjYWxlID0gcGl4ZWxzVG9UaWxlVW5pdHModGlsZSwgMSwgcGFpbnRlci50cmFuc2Zvcm0uem9vbSk7XG4gICAgICAgIGNvbnN0IGxhYmVsUGxhbmVNYXRyaXggPSBzeW1ib2xQcm9qZWN0aW9uLmdldExhYmVsUGxhbmVNYXRyaXgoY29vcmQucG9zTWF0cml4LCBwaXRjaFdpdGhNYXAsIHJvdGF0ZVdpdGhNYXAsIHBhaW50ZXIudHJhbnNmb3JtLCBwaXhlbFRvVGlsZVNjYWxlKTtcbiAgICAgICAgY29uc3QgdXBkYXRlVGV4dEZpdEljb24gPSBsYXllci5sYXlvdXQuZ2V0KCdpY29uLXRleHQtZml0JykgIT09ICdub25lJyAmJiAgYnVja2V0Lmhhc0ljb25EYXRhKCk7XG5cbiAgICAgICAgaWYgKHNpemUpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbGVTY2FsZSA9IE1hdGgucG93KDIsIHRyLnpvb20gLSB0aWxlLnRpbGVJRC5vdmVyc2NhbGVkWik7XG4gICAgICAgICAgICB1cGRhdGVWYXJpYWJsZUFuY2hvcnNGb3JCdWNrZXQoYnVja2V0LCByb3RhdGVXaXRoTWFwLCBwaXRjaFdpdGhNYXAsIHZhcmlhYmxlT2Zmc2V0cywgc3ltYm9sU2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ciwgbGFiZWxQbGFuZU1hdHJpeCwgY29vcmQucG9zTWF0cml4LCB0aWxlU2NhbGUsIHNpemUsIHVwZGF0ZVRleHRGaXRJY29uKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlVmFyaWFibGVBbmNob3JzRm9yQnVja2V0KGJ1Y2tldCwgcm90YXRlV2l0aE1hcCwgcGl0Y2hXaXRoTWFwLCB2YXJpYWJsZU9mZnNldHMsIHN5bWJvbFNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtLCBsYWJlbFBsYW5lTWF0cml4LCBwb3NNYXRyaXgsIHRpbGVTY2FsZSwgc2l6ZSwgdXBkYXRlVGV4dEZpdEljb24pIHtcbiAgICBjb25zdCBwbGFjZWRTeW1ib2xzID0gYnVja2V0LnRleHQucGxhY2VkU3ltYm9sQXJyYXk7XG4gICAgY29uc3QgZHluYW1pY1RleHRMYXlvdXRWZXJ0ZXhBcnJheSA9IGJ1Y2tldC50ZXh0LmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheTtcbiAgICBjb25zdCBkeW5hbWljSWNvbkxheW91dFZlcnRleEFycmF5ID0gYnVja2V0Lmljb24uZHluYW1pY0xheW91dFZlcnRleEFycmF5O1xuICAgIGNvbnN0IHBsYWNlZFRleHRTaGlmdHMgPSB7fTtcblxuICAgIGR5bmFtaWNUZXh0TGF5b3V0VmVydGV4QXJyYXkuY2xlYXIoKTtcbiAgICBmb3IgKGxldCBzID0gMDsgcyA8IHBsYWNlZFN5bWJvbHMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgY29uc3Qgc3ltYm9sOiBhbnkgPSBwbGFjZWRTeW1ib2xzLmdldChzKTtcbiAgICAgICAgY29uc3Qgc2tpcE9yaWVudGF0aW9uID0gYnVja2V0LmFsbG93VmVydGljYWxQbGFjZW1lbnQgJiYgIXN5bWJvbC5wbGFjZWRPcmllbnRhdGlvbjtcbiAgICAgICAgY29uc3QgdmFyaWFibGVPZmZzZXQgPSAoIXN5bWJvbC5oaWRkZW4gJiYgc3ltYm9sLmNyb3NzVGlsZUlEICYmICFza2lwT3JpZW50YXRpb24pID8gdmFyaWFibGVPZmZzZXRzW3N5bWJvbC5jcm9zc1RpbGVJRF0gOiBudWxsO1xuXG4gICAgICAgIGlmICghdmFyaWFibGVPZmZzZXQpIHtcbiAgICAgICAgICAgIC8vIFRoZXNlIHN5bWJvbHMgYXJlIGZyb20gYSBqdXN0aWZpY2F0aW9uIHRoYXQgaXMgbm90IGJlaW5nIHVzZWQsIG9yIGEgbGFiZWwgdGhhdCB3YXNuJ3QgcGxhY2VkXG4gICAgICAgICAgICAvLyBzbyB3ZSBkb24ndCBuZWVkIHRvIGRvIHRoZSBleHRyYSBtYXRoIHRvIGZpZ3VyZSBvdXQgd2hhdCBpbmNyZW1lbnRhbCBzaGlmdCB0byBhcHBseS5cbiAgICAgICAgICAgIHN5bWJvbFByb2plY3Rpb24uaGlkZUdseXBocyhzeW1ib2wubnVtR2x5cGhzLCBkeW5hbWljVGV4dExheW91dFZlcnRleEFycmF5KTtcbiAgICAgICAgfSBlbHNlICB7XG4gICAgICAgICAgICBjb25zdCB0aWxlQW5jaG9yID0gbmV3IFBvaW50KHN5bWJvbC5hbmNob3JYLCBzeW1ib2wuYW5jaG9yWSk7XG4gICAgICAgICAgICBjb25zdCBwcm9qZWN0ZWRBbmNob3IgPSBzeW1ib2xQcm9qZWN0aW9uLnByb2plY3QodGlsZUFuY2hvciwgcGl0Y2hXaXRoTWFwID8gcG9zTWF0cml4IDogbGFiZWxQbGFuZU1hdHJpeCk7XG4gICAgICAgICAgICBjb25zdCBwZXJzcGVjdGl2ZVJhdGlvID0gc3ltYm9sUHJvamVjdGlvbi5nZXRQZXJzcGVjdGl2ZVJhdGlvKHRyYW5zZm9ybS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlLCBwcm9qZWN0ZWRBbmNob3Iuc2lnbmVkRGlzdGFuY2VGcm9tQ2FtZXJhKTtcbiAgICAgICAgICAgIGxldCByZW5kZXJUZXh0U2l6ZSA9IHN5bWJvbFNpemUuZXZhbHVhdGVTaXplRm9yRmVhdHVyZShidWNrZXQudGV4dFNpemVEYXRhLCBzaXplLCBzeW1ib2wpICogcGVyc3BlY3RpdmVSYXRpbyAvIE9ORV9FTTtcbiAgICAgICAgICAgIGlmIChwaXRjaFdpdGhNYXApIHtcbiAgICAgICAgICAgICAgICAvLyBHbyBmcm9tIHNpemUgaW4gcGl4ZWxzIHRvIGVxdWl2YWxlbnQgc2l6ZSBpbiB0aWxlIHVuaXRzXG4gICAgICAgICAgICAgICAgcmVuZGVyVGV4dFNpemUgKj0gYnVja2V0LnRpbGVQaXhlbFJhdGlvIC8gdGlsZVNjYWxlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB7d2lkdGgsIGhlaWdodCwgYW5jaG9yLCB0ZXh0T2Zmc2V0LCB0ZXh0Qm94U2NhbGV9ID0gdmFyaWFibGVPZmZzZXQ7XG5cbiAgICAgICAgICAgIGNvbnN0IHNoaWZ0ID0gY2FsY3VsYXRlVmFyaWFibGVSZW5kZXJTaGlmdChcbiAgICAgICAgICAgICAgICBhbmNob3IsIHdpZHRoLCBoZWlnaHQsIHRleHRPZmZzZXQsIHRleHRCb3hTY2FsZSwgcmVuZGVyVGV4dFNpemUpO1xuXG4gICAgICAgICAgICAvLyBVc3VhbCBjYXNlIGlzIHRoYXQgd2UgdGFrZSB0aGUgcHJvamVjdGVkIGFuY2hvciBhbmQgYWRkIHRoZSBwaXhlbC1iYXNlZCBzaGlmdFxuICAgICAgICAgICAgLy8gY2FsY3VsYXRlZCBhYm92ZS4gSW4gdGhlIChzb21ld2hhdCB3ZWlyZCkgY2FzZSBvZiBwaXRjaC1hbGlnbmVkIHRleHQsIHdlIGFkZCBhbiBlcXVpdmFsZW50XG4gICAgICAgICAgICAvLyB0aWxlLXVuaXQgYmFzZWQgc2hpZnQgdG8gdGhlIGFuY2hvciBiZWZvcmUgcHJvamVjdGluZyB0byB0aGUgbGFiZWwgcGxhbmUuXG4gICAgICAgICAgICBjb25zdCBzaGlmdGVkQW5jaG9yID0gcGl0Y2hXaXRoTWFwID9cbiAgICAgICAgICAgICAgICBzeW1ib2xQcm9qZWN0aW9uLnByb2plY3QodGlsZUFuY2hvci5hZGQoc2hpZnQpLCBsYWJlbFBsYW5lTWF0cml4KS5wb2ludCA6XG4gICAgICAgICAgICAgICAgcHJvamVjdGVkQW5jaG9yLnBvaW50LmFkZChyb3RhdGVXaXRoTWFwID9cbiAgICAgICAgICAgICAgICAgICAgc2hpZnQucm90YXRlKC10cmFuc2Zvcm0uYW5nbGUpIDpcbiAgICAgICAgICAgICAgICAgICAgc2hpZnQpO1xuXG4gICAgICAgICAgICBjb25zdCBhbmdsZSA9IChidWNrZXQuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCAmJiBzeW1ib2wucGxhY2VkT3JpZW50YXRpb24gPT09IFdyaXRpbmdNb2RlLnZlcnRpY2FsKSA/IE1hdGguUEkgLyAyIDogMDtcbiAgICAgICAgICAgIGZvciAobGV0IGcgPSAwOyBnIDwgc3ltYm9sLm51bUdseXBoczsgZysrKSB7XG4gICAgICAgICAgICAgICAgYWRkRHluYW1pY0F0dHJpYnV0ZXMoZHluYW1pY1RleHRMYXlvdXRWZXJ0ZXhBcnJheSwgc2hpZnRlZEFuY2hvciwgYW5nbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9Pbmx5IG9mZnNldCBob3Jpem9udGFsIHRleHQgaWNvbnNcbiAgICAgICAgICAgIGlmICh1cGRhdGVUZXh0Rml0SWNvbiAmJiBzeW1ib2wuYXNzb2NpYXRlZEljb25JbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgcGxhY2VkVGV4dFNoaWZ0c1tzeW1ib2wuYXNzb2NpYXRlZEljb25JbmRleF0gPSB7c2hpZnRlZEFuY2hvciwgYW5nbGV9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHVwZGF0ZVRleHRGaXRJY29uKSB7XG4gICAgICAgIGR5bmFtaWNJY29uTGF5b3V0VmVydGV4QXJyYXkuY2xlYXIoKTtcbiAgICAgICAgY29uc3QgcGxhY2VkSWNvbnMgPSBidWNrZXQuaWNvbi5wbGFjZWRTeW1ib2xBcnJheTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbGFjZWRJY29ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcGxhY2VkSWNvbiA9IHBsYWNlZEljb25zLmdldChpKTtcbiAgICAgICAgICAgIGlmIChwbGFjZWRJY29uLmhpZGRlbikge1xuICAgICAgICAgICAgICAgIHN5bWJvbFByb2plY3Rpb24uaGlkZUdseXBocyhwbGFjZWRJY29uLm51bUdseXBocywgZHluYW1pY0ljb25MYXlvdXRWZXJ0ZXhBcnJheSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNoaWZ0ID0gcGxhY2VkVGV4dFNoaWZ0c1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoIXNoaWZ0KSB7XG4gICAgICAgICAgICAgICAgICAgIHN5bWJvbFByb2plY3Rpb24uaGlkZUdseXBocyhwbGFjZWRJY29uLm51bUdseXBocywgZHluYW1pY0ljb25MYXlvdXRWZXJ0ZXhBcnJheSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgZyA9IDA7IGcgPCBwbGFjZWRJY29uLm51bUdseXBoczsgZysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGREeW5hbWljQXR0cmlidXRlcyhkeW5hbWljSWNvbkxheW91dFZlcnRleEFycmF5LCBzaGlmdC5zaGlmdGVkQW5jaG9yLCBzaGlmdC5hbmdsZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnVja2V0Lmljb24uZHluYW1pY0xheW91dFZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKGR5bmFtaWNJY29uTGF5b3V0VmVydGV4QXJyYXkpO1xuICAgIH1cbiAgICBidWNrZXQudGV4dC5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoZHluYW1pY1RleHRMYXlvdXRWZXJ0ZXhBcnJheSk7XG59XG5cbmZ1bmN0aW9uIGdldFN5bWJvbFByb2dyYW1OYW1lKGlzU0RGOiBib29sZWFuLCBpc1RleHQ6IGJvb2xlYW4sIGJ1Y2tldDogU3ltYm9sQnVja2V0KSB7XG4gICAgaWYgKGJ1Y2tldC5pY29uc0luVGV4dCAmJiBpc1RleHQpIHtcbiAgICAgICAgcmV0dXJuICdzeW1ib2xUZXh0QW5kSWNvbic7XG4gICAgfSBlbHNlIGlmIChpc1NERikge1xuICAgICAgICByZXR1cm4gJ3N5bWJvbFNERic7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICdzeW1ib2xJY29uJztcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYXdMYXllclN5bWJvbHMocGFpbnRlciwgc291cmNlQ2FjaGUsIGxheWVyLCBjb29yZHMsIGlzVGV4dCwgdHJhbnNsYXRlLCB0cmFuc2xhdGVBbmNob3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uQWxpZ25tZW50LCBwaXRjaEFsaWdubWVudCwga2VlcFVwcmlnaHQsIHN0ZW5jaWxNb2RlLCBjb2xvck1vZGUpIHtcblxuICAgIGNvbnN0IGNvbnRleHQgPSBwYWludGVyLmNvbnRleHQ7XG4gICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuICAgIGNvbnN0IHRyID0gcGFpbnRlci50cmFuc2Zvcm07XG5cbiAgICBjb25zdCByb3RhdGVXaXRoTWFwID0gcm90YXRpb25BbGlnbm1lbnQgPT09ICdtYXAnO1xuICAgIGNvbnN0IHBpdGNoV2l0aE1hcCA9IHBpdGNoQWxpZ25tZW50ID09PSAnbWFwJztcbiAgICBjb25zdCBhbG9uZ0xpbmUgPSByb3RhdGVXaXRoTWFwICYmIGxheWVyLmxheW91dC5nZXQoJ3N5bWJvbC1wbGFjZW1lbnQnKSAhPT0gJ3BvaW50JztcbiAgICAvLyBMaW5lIGxhYmVsIHJvdGF0aW9uIGhhcHBlbnMgaW4gYHVwZGF0ZUxpbmVMYWJlbHNgXG4gICAgLy8gUGl0Y2hlZCBwb2ludCBsYWJlbHMgYXJlIGF1dG9tYXRpY2FsbHkgcm90YXRlZCBieSB0aGUgbGFiZWxQbGFuZU1hdHJpeCBwcm9qZWN0aW9uXG4gICAgLy8gVW5waXRjaGVkIHBvaW50IGxhYmVscyBuZWVkIHRvIGhhdmUgdGhlaXIgcm90YXRpb24gYXBwbGllZCBhZnRlciBwcm9qZWN0aW9uXG4gICAgY29uc3Qgcm90YXRlSW5TaGFkZXIgPSByb3RhdGVXaXRoTWFwICYmICFwaXRjaFdpdGhNYXAgJiYgIWFsb25nTGluZTtcblxuICAgIGNvbnN0IHNvcnRGZWF0dXJlc0J5S2V5ID0gbGF5ZXIubGF5b3V0LmdldCgnc3ltYm9sLXNvcnQta2V5JykuY29uc3RhbnRPcigxKSAhPT0gdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgZGVwdGhNb2RlID0gcGFpbnRlci5kZXB0aE1vZGVGb3JTdWJsYXllcigwLCBEZXB0aE1vZGUuUmVhZE9ubHkpO1xuXG4gICAgY29uc3QgdmFyaWFibGVQbGFjZW1lbnQgPSBsYXllci5sYXlvdXQuZ2V0KCd0ZXh0LXZhcmlhYmxlLWFuY2hvcicpO1xuXG4gICAgY29uc3QgdGlsZVJlbmRlclN0YXRlOiBBcnJheTxTeW1ib2xUaWxlUmVuZGVyU3RhdGU+ID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGNvb3JkIG9mIGNvb3Jkcykge1xuICAgICAgICBjb25zdCB0aWxlID0gc291cmNlQ2FjaGUuZ2V0VGlsZShjb29yZCk7XG4gICAgICAgIGNvbnN0IGJ1Y2tldDogU3ltYm9sQnVja2V0ID0gKHRpbGUuZ2V0QnVja2V0KGxheWVyKTogYW55KTtcbiAgICAgICAgaWYgKCFidWNrZXQpIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBidWZmZXJzID0gaXNUZXh0ID8gYnVja2V0LnRleHQgOiBidWNrZXQuaWNvbjtcbiAgICAgICAgaWYgKCFidWZmZXJzIHx8ICFidWZmZXJzLnNlZ21lbnRzLmdldCgpLmxlbmd0aCkgY29udGludWU7XG4gICAgICAgIGNvbnN0IHByb2dyYW1Db25maWd1cmF0aW9uID0gYnVmZmVycy5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KGxheWVyLmlkKTtcblxuICAgICAgICBjb25zdCBpc1NERiA9IGlzVGV4dCB8fCBidWNrZXQuc2RmSWNvbnM7XG5cbiAgICAgICAgY29uc3Qgc2l6ZURhdGEgPSBpc1RleHQgPyBidWNrZXQudGV4dFNpemVEYXRhIDogYnVja2V0Lmljb25TaXplRGF0YTtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWQgPSBwaXRjaFdpdGhNYXAgfHwgdHIucGl0Y2ggIT09IDA7XG5cbiAgICAgICAgY29uc3QgcHJvZ3JhbSA9IHBhaW50ZXIudXNlUHJvZ3JhbShnZXRTeW1ib2xQcm9ncmFtTmFtZShpc1NERiwgaXNUZXh0LCBidWNrZXQpLCBwcm9ncmFtQ29uZmlndXJhdGlvbik7XG4gICAgICAgIGNvbnN0IHNpemUgPSBzeW1ib2xTaXplLmV2YWx1YXRlU2l6ZUZvclpvb20oc2l6ZURhdGEsIHRyLnpvb20pO1xuXG4gICAgICAgIGxldCB0ZXhTaXplOiBbbnVtYmVyLCBudW1iZXJdO1xuICAgICAgICBsZXQgdGV4U2l6ZUljb246IFtudW1iZXIsIG51bWJlcl0gPSBbMCwgMF07XG4gICAgICAgIGxldCBhdGxhc1RleHR1cmU7XG4gICAgICAgIGxldCBhdGxhc0ludGVycG9sYXRpb247XG4gICAgICAgIGxldCBhdGxhc1RleHR1cmVJY29uID0gbnVsbDtcbiAgICAgICAgbGV0IGF0bGFzSW50ZXJwb2xhdGlvbkljb247XG4gICAgICAgIGlmIChpc1RleHQpIHtcbiAgICAgICAgICAgIGF0bGFzVGV4dHVyZSA9IHRpbGUuZ2x5cGhBdGxhc1RleHR1cmU7XG4gICAgICAgICAgICBhdGxhc0ludGVycG9sYXRpb24gPSBnbC5MSU5FQVI7XG4gICAgICAgICAgICB0ZXhTaXplID0gdGlsZS5nbHlwaEF0bGFzVGV4dHVyZS5zaXplO1xuICAgICAgICAgICAgaWYgKGJ1Y2tldC5pY29uc0luVGV4dCkge1xuICAgICAgICAgICAgICAgIHRleFNpemVJY29uID0gdGlsZS5pbWFnZUF0bGFzVGV4dHVyZS5zaXplO1xuICAgICAgICAgICAgICAgIGF0bGFzVGV4dHVyZUljb24gPSB0aWxlLmltYWdlQXRsYXNUZXh0dXJlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHpvb21EZXBlbmRlbnRTaXplID0gc2l6ZURhdGEua2luZCA9PT0gJ2NvbXBvc2l0ZScgfHwgc2l6ZURhdGEua2luZCA9PT0gJ2NhbWVyYSc7XG4gICAgICAgICAgICAgICAgYXRsYXNJbnRlcnBvbGF0aW9uSWNvbiA9IHRyYW5zZm9ybWVkIHx8IHBhaW50ZXIub3B0aW9ucy5yb3RhdGluZyB8fCBwYWludGVyLm9wdGlvbnMuem9vbWluZyB8fCB6b29tRGVwZW5kZW50U2l6ZSA/IGdsLkxJTkVBUiA6IGdsLk5FQVJFU1Q7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpY29uU2NhbGVkID0gbGF5ZXIubGF5b3V0LmdldCgnaWNvbi1zaXplJykuY29uc3RhbnRPcigwKSAhPT0gMSB8fCBidWNrZXQuaWNvbnNOZWVkTGluZWFyO1xuICAgICAgICAgICAgYXRsYXNUZXh0dXJlID0gdGlsZS5pbWFnZUF0bGFzVGV4dHVyZTtcbiAgICAgICAgICAgIGF0bGFzSW50ZXJwb2xhdGlvbiA9IGlzU0RGIHx8IHBhaW50ZXIub3B0aW9ucy5yb3RhdGluZyB8fCBwYWludGVyLm9wdGlvbnMuem9vbWluZyB8fCBpY29uU2NhbGVkIHx8IHRyYW5zZm9ybWVkID9cbiAgICAgICAgICAgICAgICBnbC5MSU5FQVIgOlxuICAgICAgICAgICAgICAgIGdsLk5FQVJFU1Q7XG4gICAgICAgICAgICB0ZXhTaXplID0gdGlsZS5pbWFnZUF0bGFzVGV4dHVyZS5zaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcyA9IHBpeGVsc1RvVGlsZVVuaXRzKHRpbGUsIDEsIHBhaW50ZXIudHJhbnNmb3JtLnpvb20pO1xuICAgICAgICBjb25zdCBsYWJlbFBsYW5lTWF0cml4ID0gc3ltYm9sUHJvamVjdGlvbi5nZXRMYWJlbFBsYW5lTWF0cml4KGNvb3JkLnBvc01hdHJpeCwgcGl0Y2hXaXRoTWFwLCByb3RhdGVXaXRoTWFwLCBwYWludGVyLnRyYW5zZm9ybSwgcyk7XG4gICAgICAgIGNvbnN0IGdsQ29vcmRNYXRyaXggPSBzeW1ib2xQcm9qZWN0aW9uLmdldEdsQ29vcmRNYXRyaXgoY29vcmQucG9zTWF0cml4LCBwaXRjaFdpdGhNYXAsIHJvdGF0ZVdpdGhNYXAsIHBhaW50ZXIudHJhbnNmb3JtLCBzKTtcblxuICAgICAgICBjb25zdCBoYXNWYXJpYWJsZUFuY2hvcnMgPSB2YXJpYWJsZVBsYWNlbWVudCAmJiBidWNrZXQuaGFzVGV4dERhdGEoKTtcbiAgICAgICAgY29uc3QgdXBkYXRlVGV4dEZpdEljb24gPSBsYXllci5sYXlvdXQuZ2V0KCdpY29uLXRleHQtZml0JykgIT09ICdub25lJyAmJlxuICAgICAgICAgICAgaGFzVmFyaWFibGVBbmNob3JzICYmXG4gICAgICAgICAgICBidWNrZXQuaGFzSWNvbkRhdGEoKTtcblxuICAgICAgICBpZiAoYWxvbmdMaW5lKSB7XG4gICAgICAgICAgICBzeW1ib2xQcm9qZWN0aW9uLnVwZGF0ZUxpbmVMYWJlbHMoYnVja2V0LCBjb29yZC5wb3NNYXRyaXgsIHBhaW50ZXIsIGlzVGV4dCwgbGFiZWxQbGFuZU1hdHJpeCwgZ2xDb29yZE1hdHJpeCwgcGl0Y2hXaXRoTWFwLCBrZWVwVXByaWdodCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtYXRyaXggPSBwYWludGVyLnRyYW5zbGF0ZVBvc01hdHJpeChjb29yZC5wb3NNYXRyaXgsIHRpbGUsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlQW5jaG9yKSxcbiAgICAgICAgICAgIHVMYWJlbFBsYW5lTWF0cml4ID0gKGFsb25nTGluZSB8fCAoaXNUZXh0ICYmIHZhcmlhYmxlUGxhY2VtZW50KSB8fCB1cGRhdGVUZXh0Rml0SWNvbikgPyBpZGVudGl0eU1hdDQgOiBsYWJlbFBsYW5lTWF0cml4LFxuICAgICAgICAgICAgdWdsQ29vcmRNYXRyaXggPSBwYWludGVyLnRyYW5zbGF0ZVBvc01hdHJpeChnbENvb3JkTWF0cml4LCB0aWxlLCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUFuY2hvciwgdHJ1ZSk7XG5cbiAgICAgICAgY29uc3QgaGFzSGFsbyA9IGlzU0RGICYmIGxheWVyLnBhaW50LmdldChpc1RleHQgPyAndGV4dC1oYWxvLXdpZHRoJyA6ICdpY29uLWhhbG8td2lkdGgnKS5jb25zdGFudE9yKDEpICE9PSAwO1xuXG4gICAgICAgIGxldCB1bmlmb3JtVmFsdWVzO1xuICAgICAgICBpZiAoaXNTREYpIHtcbiAgICAgICAgICAgIGlmICghYnVja2V0Lmljb25zSW5UZXh0KSB7XG4gICAgICAgICAgICAgICAgdW5pZm9ybVZhbHVlcyA9IHN5bWJvbFNERlVuaWZvcm1WYWx1ZXMoc2l6ZURhdGEua2luZCxcbiAgICAgICAgICAgICAgICBzaXplLCByb3RhdGVJblNoYWRlciwgcGl0Y2hXaXRoTWFwLCBwYWludGVyLCBtYXRyaXgsXG4gICAgICAgICAgICAgICAgdUxhYmVsUGxhbmVNYXRyaXgsIHVnbENvb3JkTWF0cml4LCBpc1RleHQsIHRleFNpemUsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB1bmlmb3JtVmFsdWVzID0gc3ltYm9sVGV4dEFuZEljb25Vbmlmb3JtVmFsdWVzKHNpemVEYXRhLmtpbmQsXG4gICAgICAgICAgICAgICAgc2l6ZSwgcm90YXRlSW5TaGFkZXIsIHBpdGNoV2l0aE1hcCwgcGFpbnRlciwgbWF0cml4LFxuICAgICAgICAgICAgICAgIHVMYWJlbFBsYW5lTWF0cml4LCB1Z2xDb29yZE1hdHJpeCwgdGV4U2l6ZSwgdGV4U2l6ZUljb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdW5pZm9ybVZhbHVlcyA9IHN5bWJvbEljb25Vbmlmb3JtVmFsdWVzKHNpemVEYXRhLmtpbmQsXG4gICAgICAgICAgICAgICAgc2l6ZSwgcm90YXRlSW5TaGFkZXIsIHBpdGNoV2l0aE1hcCwgcGFpbnRlciwgbWF0cml4LFxuICAgICAgICAgICAgICAgIHVMYWJlbFBsYW5lTWF0cml4LCB1Z2xDb29yZE1hdHJpeCwgaXNUZXh0LCB0ZXhTaXplKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0YXRlID0ge1xuICAgICAgICAgICAgcHJvZ3JhbSxcbiAgICAgICAgICAgIGJ1ZmZlcnMsXG4gICAgICAgICAgICB1bmlmb3JtVmFsdWVzLFxuICAgICAgICAgICAgYXRsYXNUZXh0dXJlLFxuICAgICAgICAgICAgYXRsYXNUZXh0dXJlSWNvbixcbiAgICAgICAgICAgIGF0bGFzSW50ZXJwb2xhdGlvbixcbiAgICAgICAgICAgIGF0bGFzSW50ZXJwb2xhdGlvbkljb24sXG4gICAgICAgICAgICBpc1NERixcbiAgICAgICAgICAgIGhhc0hhbG9cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoc29ydEZlYXR1cmVzQnlLZXkpIHtcbiAgICAgICAgICAgIGNvbnN0IG9sZFNlZ21lbnRzID0gYnVmZmVycy5zZWdtZW50cy5nZXQoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2VnbWVudCBvZiBvbGRTZWdtZW50cykge1xuICAgICAgICAgICAgICAgIHRpbGVSZW5kZXJTdGF0ZS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgc2VnbWVudHM6IG5ldyBTZWdtZW50VmVjdG9yKFtzZWdtZW50XSksXG4gICAgICAgICAgICAgICAgICAgIHNvcnRLZXk6ICgoc2VnbWVudC5zb3J0S2V5OiBhbnkpOiBudW1iZXIpLFxuICAgICAgICAgICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGlsZVJlbmRlclN0YXRlLnB1c2goe1xuICAgICAgICAgICAgICAgIHNlZ21lbnRzOiBidWZmZXJzLnNlZ21lbnRzLFxuICAgICAgICAgICAgICAgIHNvcnRLZXk6IDAsXG4gICAgICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNvcnRGZWF0dXJlc0J5S2V5KSB7XG4gICAgICAgIHRpbGVSZW5kZXJTdGF0ZS5zb3J0KChhLCBiKSA9PiBhLnNvcnRLZXkgLSBiLnNvcnRLZXkpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc2VnbWVudFN0YXRlIG9mIHRpbGVSZW5kZXJTdGF0ZSkge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHNlZ21lbnRTdGF0ZS5zdGF0ZTtcblxuICAgICAgICBjb250ZXh0LmFjdGl2ZVRleHR1cmUuc2V0KGdsLlRFWFRVUkUwKTtcbiAgICAgICAgc3RhdGUuYXRsYXNUZXh0dXJlLmJpbmQoc3RhdGUuYXRsYXNJbnRlcnBvbGF0aW9uLCBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgaWYgKHN0YXRlLmF0bGFzVGV4dHVyZUljb24pIHtcbiAgICAgICAgICAgIGNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQoZ2wuVEVYVFVSRTEpO1xuICAgICAgICAgICAgaWYgKHN0YXRlLmF0bGFzVGV4dHVyZUljb24pIHtcbiAgICAgICAgICAgICAgICBzdGF0ZS5hdGxhc1RleHR1cmVJY29uLmJpbmQoc3RhdGUuYXRsYXNJbnRlcnBvbGF0aW9uSWNvbiwgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGUuaXNTREYpIHtcbiAgICAgICAgICAgIGNvbnN0IHVuaWZvcm1WYWx1ZXMgPSAoKHN0YXRlLnVuaWZvcm1WYWx1ZXM6IGFueSk6IFVuaWZvcm1WYWx1ZXM8U3ltYm9sU0RGVW5pZm9ybXNUeXBlPik7XG4gICAgICAgICAgICBpZiAoc3RhdGUuaGFzSGFsbykge1xuICAgICAgICAgICAgICAgIHVuaWZvcm1WYWx1ZXNbJ3VfaXNfaGFsbyddID0gMTtcbiAgICAgICAgICAgICAgICBkcmF3U3ltYm9sRWxlbWVudHMoc3RhdGUuYnVmZmVycywgc2VnbWVudFN0YXRlLnNlZ21lbnRzLCBsYXllciwgcGFpbnRlciwgc3RhdGUucHJvZ3JhbSwgZGVwdGhNb2RlLCBzdGVuY2lsTW9kZSwgY29sb3JNb2RlLCB1bmlmb3JtVmFsdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVuaWZvcm1WYWx1ZXNbJ3VfaXNfaGFsbyddID0gMDtcbiAgICAgICAgfVxuICAgICAgICBkcmF3U3ltYm9sRWxlbWVudHMoc3RhdGUuYnVmZmVycywgc2VnbWVudFN0YXRlLnNlZ21lbnRzLCBsYXllciwgcGFpbnRlciwgc3RhdGUucHJvZ3JhbSwgZGVwdGhNb2RlLCBzdGVuY2lsTW9kZSwgY29sb3JNb2RlLCBzdGF0ZS51bmlmb3JtVmFsdWVzKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYXdTeW1ib2xFbGVtZW50cyhidWZmZXJzLCBzZWdtZW50cywgbGF5ZXIsIHBhaW50ZXIsIHByb2dyYW0sIGRlcHRoTW9kZSwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSwgdW5pZm9ybVZhbHVlcykge1xuICAgIGNvbnN0IGNvbnRleHQgPSBwYWludGVyLmNvbnRleHQ7XG4gICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuICAgIHByb2dyYW0uZHJhdyhjb250ZXh0LCBnbC5UUklBTkdMRVMsIGRlcHRoTW9kZSwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLFxuICAgICAgICB1bmlmb3JtVmFsdWVzLCBsYXllci5pZCwgYnVmZmVycy5sYXlvdXRWZXJ0ZXhCdWZmZXIsXG4gICAgICAgIGJ1ZmZlcnMuaW5kZXhCdWZmZXIsIHNlZ21lbnRzLCBsYXllci5wYWludCxcbiAgICAgICAgcGFpbnRlci50cmFuc2Zvcm0uem9vbSwgYnVmZmVycy5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KGxheWVyLmlkKSxcbiAgICAgICAgYnVmZmVycy5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyLCBidWZmZXJzLm9wYWNpdHlWZXJ0ZXhCdWZmZXIpO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFN0ZW5jaWxNb2RlIGZyb20gJy4uL2dsL3N0ZW5jaWxfbW9kZSc7XG5pbXBvcnQgRGVwdGhNb2RlIGZyb20gJy4uL2dsL2RlcHRoX21vZGUnO1xuaW1wb3J0IEN1bGxGYWNlTW9kZSBmcm9tICcuLi9nbC9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQgUHJvZ3JhbSBmcm9tICcuL3Byb2dyYW0nO1xuaW1wb3J0IHtjaXJjbGVVbmlmb3JtVmFsdWVzfSBmcm9tICcuL3Byb2dyYW0vY2lyY2xlX3Byb2dyYW0nO1xuaW1wb3J0IFNlZ21lbnRWZWN0b3IgZnJvbSAnLi4vZGF0YS9zZWdtZW50JztcbmltcG9ydCB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi4vc291cmNlL3RpbGVfaWQnO1xuXG5pbXBvcnQgdHlwZSBQYWludGVyIGZyb20gJy4vcGFpbnRlcic7XG5pbXBvcnQgdHlwZSBTb3VyY2VDYWNoZSBmcm9tICcuLi9zb3VyY2Uvc291cmNlX2NhY2hlJztcbmltcG9ydCB0eXBlIENpcmNsZVN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXIvY2lyY2xlX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIENpcmNsZUJ1Y2tldCBmcm9tICcuLi9kYXRhL2J1Y2tldC9jaXJjbGVfYnVja2V0JztcbmltcG9ydCB0eXBlIFByb2dyYW1Db25maWd1cmF0aW9uIGZyb20gJy4uL2RhdGEvcHJvZ3JhbV9jb25maWd1cmF0aW9uJztcbmltcG9ydCB0eXBlIFZlcnRleEJ1ZmZlciBmcm9tICcuLi9nbC92ZXJ0ZXhfYnVmZmVyJztcbmltcG9ydCB0eXBlIEluZGV4QnVmZmVyIGZyb20gJy4uL2dsL2luZGV4X2J1ZmZlcic7XG5pbXBvcnQgdHlwZSB7VW5pZm9ybVZhbHVlc30gZnJvbSAnLi91bmlmb3JtX2JpbmRpbmcnO1xuaW1wb3J0IHR5cGUge0NpcmNsZVVuaWZvcm1zVHlwZX0gZnJvbSAnLi9wcm9ncmFtL2NpcmNsZV9wcm9ncmFtJztcblxuZXhwb3J0IGRlZmF1bHQgZHJhd0NpcmNsZXM7XG5cbnR5cGUgVGlsZVJlbmRlclN0YXRlID0ge1xuICAgIHByb2dyYW1Db25maWd1cmF0aW9uOiBQcm9ncmFtQ29uZmlndXJhdGlvbixcbiAgICBwcm9ncmFtOiBQcm9ncmFtPCo+LFxuICAgIGxheW91dFZlcnRleEJ1ZmZlcjogVmVydGV4QnVmZmVyLFxuICAgIGluZGV4QnVmZmVyOiBJbmRleEJ1ZmZlcixcbiAgICB1bmlmb3JtVmFsdWVzOiBVbmlmb3JtVmFsdWVzPENpcmNsZVVuaWZvcm1zVHlwZT5cbn07XG5cbnR5cGUgU2VnbWVudHNUaWxlUmVuZGVyU3RhdGUgPSB7XG4gICAgc2VnbWVudHM6IFNlZ21lbnRWZWN0b3IsXG4gICAgc29ydEtleTogbnVtYmVyLFxuICAgIHN0YXRlOiBUaWxlUmVuZGVyU3RhdGVcbn07XG5cbmZ1bmN0aW9uIGRyYXdDaXJjbGVzKHBhaW50ZXI6IFBhaW50ZXIsIHNvdXJjZUNhY2hlOiBTb3VyY2VDYWNoZSwgbGF5ZXI6IENpcmNsZVN0eWxlTGF5ZXIsIGNvb3JkczogQXJyYXk8T3ZlcnNjYWxlZFRpbGVJRD4pIHtcbiAgICBpZiAocGFpbnRlci5yZW5kZXJQYXNzICE9PSAndHJhbnNsdWNlbnQnKSByZXR1cm47XG5cbiAgICBjb25zdCBvcGFjaXR5ID0gbGF5ZXIucGFpbnQuZ2V0KCdjaXJjbGUtb3BhY2l0eScpO1xuICAgIGNvbnN0IHN0cm9rZVdpZHRoID0gbGF5ZXIucGFpbnQuZ2V0KCdjaXJjbGUtc3Ryb2tlLXdpZHRoJyk7XG4gICAgY29uc3Qgc3Ryb2tlT3BhY2l0eSA9IGxheWVyLnBhaW50LmdldCgnY2lyY2xlLXN0cm9rZS1vcGFjaXR5Jyk7XG4gICAgY29uc3Qgc29ydEZlYXR1cmVzQnlLZXkgPSBsYXllci5sYXlvdXQuZ2V0KCdjaXJjbGUtc29ydC1rZXknKS5jb25zdGFudE9yKDEpICE9PSB1bmRlZmluZWQ7XG5cbiAgICBpZiAob3BhY2l0eS5jb25zdGFudE9yKDEpID09PSAwICYmIChzdHJva2VXaWR0aC5jb25zdGFudE9yKDEpID09PSAwIHx8IHN0cm9rZU9wYWNpdHkuY29uc3RhbnRPcigxKSA9PT0gMCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRleHQgPSBwYWludGVyLmNvbnRleHQ7XG4gICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuXG4gICAgY29uc3QgZGVwdGhNb2RlID0gcGFpbnRlci5kZXB0aE1vZGVGb3JTdWJsYXllcigwLCBEZXB0aE1vZGUuUmVhZE9ubHkpO1xuICAgIC8vIFR1cm4gb2ZmIHN0ZW5jaWwgdGVzdGluZyB0byBhbGxvdyBjaXJjbGVzIHRvIGJlIGRyYXduIGFjcm9zcyBib3VuZGFyaWVzLFxuICAgIC8vIHNvIHRoYXQgbGFyZ2UgY2lyY2xlcyBhcmUgbm90IGNsaXBwZWQgdG8gdGlsZXNcbiAgICBjb25zdCBzdGVuY2lsTW9kZSA9IFN0ZW5jaWxNb2RlLmRpc2FibGVkO1xuICAgIGNvbnN0IGNvbG9yTW9kZSA9IHBhaW50ZXIuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpO1xuXG4gICAgY29uc3Qgc2VnbWVudHNSZW5kZXJTdGF0ZXM6IEFycmF5PFNlZ21lbnRzVGlsZVJlbmRlclN0YXRlPiA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29yZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY29vcmQgPSBjb29yZHNbaV07XG5cbiAgICAgICAgY29uc3QgdGlsZSA9IHNvdXJjZUNhY2hlLmdldFRpbGUoY29vcmQpO1xuICAgICAgICBjb25zdCBidWNrZXQ6ID9DaXJjbGVCdWNrZXQ8Kj4gPSAodGlsZS5nZXRCdWNrZXQobGF5ZXIpOiBhbnkpO1xuICAgICAgICBpZiAoIWJ1Y2tldCkgY29udGludWU7XG5cbiAgICAgICAgY29uc3QgcHJvZ3JhbUNvbmZpZ3VyYXRpb24gPSBidWNrZXQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChsYXllci5pZCk7XG4gICAgICAgIGNvbnN0IHByb2dyYW0gPSBwYWludGVyLnVzZVByb2dyYW0oJ2NpcmNsZScsIHByb2dyYW1Db25maWd1cmF0aW9uKTtcbiAgICAgICAgY29uc3QgbGF5b3V0VmVydGV4QnVmZmVyID0gYnVja2V0LmxheW91dFZlcnRleEJ1ZmZlcjtcbiAgICAgICAgY29uc3QgaW5kZXhCdWZmZXIgPSBidWNrZXQuaW5kZXhCdWZmZXI7XG4gICAgICAgIGNvbnN0IHVuaWZvcm1WYWx1ZXMgPSBjaXJjbGVVbmlmb3JtVmFsdWVzKHBhaW50ZXIsIGNvb3JkLCB0aWxlLCBsYXllcik7XG5cbiAgICAgICAgY29uc3Qgc3RhdGU6IFRpbGVSZW5kZXJTdGF0ZSA9IHtcbiAgICAgICAgICAgIHByb2dyYW1Db25maWd1cmF0aW9uLFxuICAgICAgICAgICAgcHJvZ3JhbSxcbiAgICAgICAgICAgIGxheW91dFZlcnRleEJ1ZmZlcixcbiAgICAgICAgICAgIGluZGV4QnVmZmVyLFxuICAgICAgICAgICAgdW5pZm9ybVZhbHVlcyxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoc29ydEZlYXR1cmVzQnlLZXkpIHtcbiAgICAgICAgICAgIGNvbnN0IG9sZFNlZ21lbnRzID0gYnVja2V0LnNlZ21lbnRzLmdldCgpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBzZWdtZW50IG9mIG9sZFNlZ21lbnRzKSB7XG4gICAgICAgICAgICAgICAgc2VnbWVudHNSZW5kZXJTdGF0ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHNlZ21lbnRzOiBuZXcgU2VnbWVudFZlY3Rvcihbc2VnbWVudF0pLFxuICAgICAgICAgICAgICAgICAgICBzb3J0S2V5OiAoKHNlZ21lbnQuc29ydEtleTogYW55KTogbnVtYmVyKSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlZ21lbnRzUmVuZGVyU3RhdGVzLnB1c2goe1xuICAgICAgICAgICAgICAgIHNlZ21lbnRzOiBidWNrZXQuc2VnbWVudHMsXG4gICAgICAgICAgICAgICAgc29ydEtleTogMCxcbiAgICAgICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIGlmIChzb3J0RmVhdHVyZXNCeUtleSkge1xuICAgICAgICBzZWdtZW50c1JlbmRlclN0YXRlcy5zb3J0KChhLCBiKSA9PiBhLnNvcnRLZXkgLSBiLnNvcnRLZXkpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc2VnbWVudHNTdGF0ZSBvZiBzZWdtZW50c1JlbmRlclN0YXRlcykge1xuICAgICAgICBjb25zdCB7cHJvZ3JhbUNvbmZpZ3VyYXRpb24sIHByb2dyYW0sIGxheW91dFZlcnRleEJ1ZmZlciwgaW5kZXhCdWZmZXIsIHVuaWZvcm1WYWx1ZXN9ID0gc2VnbWVudHNTdGF0ZS5zdGF0ZTtcbiAgICAgICAgY29uc3Qgc2VnbWVudHMgPSBzZWdtZW50c1N0YXRlLnNlZ21lbnRzO1xuXG4gICAgICAgIHByb2dyYW0uZHJhdyhjb250ZXh0LCBnbC5UUklBTkdMRVMsIGRlcHRoTW9kZSwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLFxuICAgICAgICAgICAgdW5pZm9ybVZhbHVlcywgbGF5ZXIuaWQsXG4gICAgICAgICAgICBsYXlvdXRWZXJ0ZXhCdWZmZXIsIGluZGV4QnVmZmVyLCBzZWdtZW50cyxcbiAgICAgICAgICAgIGxheWVyLnBhaW50LCBwYWludGVyLnRyYW5zZm9ybS56b29tLCBwcm9ncmFtQ29uZmlndXJhdGlvbik7XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFRleHR1cmUgZnJvbSAnLi90ZXh0dXJlJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuaW1wb3J0IERlcHRoTW9kZSBmcm9tICcuLi9nbC9kZXB0aF9tb2RlJztcbmltcG9ydCBTdGVuY2lsTW9kZSBmcm9tICcuLi9nbC9zdGVuY2lsX21vZGUnO1xuaW1wb3J0IENvbG9yTW9kZSBmcm9tICcuLi9nbC9jb2xvcl9tb2RlJztcbmltcG9ydCBDdWxsRmFjZU1vZGUgZnJvbSAnLi4vZ2wvY3VsbF9mYWNlX21vZGUnO1xuaW1wb3J0IHtcbiAgICBoZWF0bWFwVW5pZm9ybVZhbHVlcyxcbiAgICBoZWF0bWFwVGV4dHVyZVVuaWZvcm1WYWx1ZXNcbn0gZnJvbSAnLi9wcm9ncmFtL2hlYXRtYXBfcHJvZ3JhbSc7XG5cbmltcG9ydCB0eXBlIFBhaW50ZXIgZnJvbSAnLi9wYWludGVyJztcbmltcG9ydCB0eXBlIFNvdXJjZUNhY2hlIGZyb20gJy4uL3NvdXJjZS9zb3VyY2VfY2FjaGUnO1xuaW1wb3J0IHR5cGUgSGVhdG1hcFN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXIvaGVhdG1hcF9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSBIZWF0bWFwQnVja2V0IGZyb20gJy4uL2RhdGEvYnVja2V0L2hlYXRtYXBfYnVja2V0JztcbmltcG9ydCB0eXBlIHtPdmVyc2NhbGVkVGlsZUlEfSBmcm9tICcuLi9zb3VyY2UvdGlsZV9pZCc7XG5cbmV4cG9ydCBkZWZhdWx0IGRyYXdIZWF0bWFwO1xuXG5mdW5jdGlvbiBkcmF3SGVhdG1hcChwYWludGVyOiBQYWludGVyLCBzb3VyY2VDYWNoZTogU291cmNlQ2FjaGUsIGxheWVyOiBIZWF0bWFwU3R5bGVMYXllciwgY29vcmRzOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPikge1xuICAgIGlmIChsYXllci5wYWludC5nZXQoJ2hlYXRtYXAtb3BhY2l0eScpID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocGFpbnRlci5yZW5kZXJQYXNzID09PSAnb2Zmc2NyZWVuJykge1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gcGFpbnRlci5jb250ZXh0O1xuICAgICAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG5cbiAgICAgICAgLy8gQWxsb3cga2VybmVscyB0byBiZSBkcmF3biBhY3Jvc3MgYm91bmRhcmllcywgc28gdGhhdFxuICAgICAgICAvLyBsYXJnZSBrZXJuZWxzIGFyZSBub3QgY2xpcHBlZCB0byB0aWxlc1xuICAgICAgICBjb25zdCBzdGVuY2lsTW9kZSA9IFN0ZW5jaWxNb2RlLmRpc2FibGVkO1xuICAgICAgICAvLyBUdXJuIG9uIGFkZGl0aXZlIGJsZW5kaW5nIGZvciBrZXJuZWxzLCB3aGljaCBpcyBhIGtleSBhc3BlY3Qgb2Yga2VybmVsIGRlbnNpdHkgZXN0aW1hdGlvbiBmb3JtdWxhXG4gICAgICAgIGNvbnN0IGNvbG9yTW9kZSA9IG5ldyBDb2xvck1vZGUoW2dsLk9ORSwgZ2wuT05FXSwgQ29sb3IudHJhbnNwYXJlbnQsIFt0cnVlLCB0cnVlLCB0cnVlLCB0cnVlXSk7XG5cbiAgICAgICAgYmluZEZyYW1lYnVmZmVyKGNvbnRleHQsIHBhaW50ZXIsIGxheWVyKTtcblxuICAgICAgICBjb250ZXh0LmNsZWFyKHtjb2xvcjogQ29sb3IudHJhbnNwYXJlbnR9KTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvb3Jkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY29vcmQgPSBjb29yZHNbaV07XG5cbiAgICAgICAgICAgIC8vIFNraXAgdGlsZXMgdGhhdCBoYXZlIHVuY292ZXJlZCBwYXJlbnRzIHRvIGF2b2lkIGZsaWNrZXJpbmc7IHdlIGRvbid0IG5lZWRcbiAgICAgICAgICAgIC8vIHRvIHVzZSBjb21wbGV4IHRpbGUgbWFza2luZyBoZXJlIGJlY2F1c2UgdGhlIGNoYW5nZSBiZXR3ZWVuIHpvb20gbGV2ZWxzIGlzIHN1YnRsZSxcbiAgICAgICAgICAgIC8vIHNvIGl0J3MgZmluZSB0byBzaW1wbHkgcmVuZGVyIHRoZSBwYXJlbnQgdW50aWwgYWxsIGl0cyA0IGNoaWxkcmVuIGFyZSBsb2FkZWRcbiAgICAgICAgICAgIGlmIChzb3VyY2VDYWNoZS5oYXNSZW5kZXJhYmxlUGFyZW50KGNvb3JkKSkgY29udGludWU7XG5cbiAgICAgICAgICAgIGNvbnN0IHRpbGUgPSBzb3VyY2VDYWNoZS5nZXRUaWxlKGNvb3JkKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1Y2tldDogP0hlYXRtYXBCdWNrZXQgPSAodGlsZS5nZXRCdWNrZXQobGF5ZXIpOiBhbnkpO1xuICAgICAgICAgICAgaWYgKCFidWNrZXQpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBjb25zdCBwcm9ncmFtQ29uZmlndXJhdGlvbiA9IGJ1Y2tldC5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KGxheWVyLmlkKTtcbiAgICAgICAgICAgIGNvbnN0IHByb2dyYW0gPSBwYWludGVyLnVzZVByb2dyYW0oJ2hlYXRtYXAnLCBwcm9ncmFtQ29uZmlndXJhdGlvbik7XG4gICAgICAgICAgICBjb25zdCB7em9vbX0gPSBwYWludGVyLnRyYW5zZm9ybTtcblxuICAgICAgICAgICAgcHJvZ3JhbS5kcmF3KGNvbnRleHQsIGdsLlRSSUFOR0xFUywgRGVwdGhNb2RlLmRpc2FibGVkLCBzdGVuY2lsTW9kZSwgY29sb3JNb2RlLCBDdWxsRmFjZU1vZGUuZGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgaGVhdG1hcFVuaWZvcm1WYWx1ZXMoY29vcmQucG9zTWF0cml4LFxuICAgICAgICAgICAgICAgICAgICB0aWxlLCB6b29tLCBsYXllci5wYWludC5nZXQoJ2hlYXRtYXAtaW50ZW5zaXR5JykpLFxuICAgICAgICAgICAgICAgIGxheWVyLmlkLCBidWNrZXQubGF5b3V0VmVydGV4QnVmZmVyLCBidWNrZXQuaW5kZXhCdWZmZXIsXG4gICAgICAgICAgICAgICAgYnVja2V0LnNlZ21lbnRzLCBsYXllci5wYWludCwgcGFpbnRlci50cmFuc2Zvcm0uem9vbSxcbiAgICAgICAgICAgICAgICBwcm9ncmFtQ29uZmlndXJhdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0LnZpZXdwb3J0LnNldChbMCwgMCwgcGFpbnRlci53aWR0aCwgcGFpbnRlci5oZWlnaHRdKTtcblxuICAgIH0gZWxzZSBpZiAocGFpbnRlci5yZW5kZXJQYXNzID09PSAndHJhbnNsdWNlbnQnKSB7XG4gICAgICAgIHBhaW50ZXIuY29udGV4dC5zZXRDb2xvck1vZGUocGFpbnRlci5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpO1xuICAgICAgICByZW5kZXJUZXh0dXJlVG9NYXAocGFpbnRlciwgbGF5ZXIpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gYmluZEZyYW1lYnVmZmVyKGNvbnRleHQsIHBhaW50ZXIsIGxheWVyKSB7XG4gICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuICAgIGNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQoZ2wuVEVYVFVSRTEpO1xuXG4gICAgLy8gVXNlIGEgNHggZG93bnNjYWxlZCBzY3JlZW4gdGV4dHVyZSBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlXG4gICAgY29udGV4dC52aWV3cG9ydC5zZXQoWzAsIDAsIHBhaW50ZXIud2lkdGggLyA0LCBwYWludGVyLmhlaWdodCAvIDRdKTtcblxuICAgIGxldCBmYm8gPSBsYXllci5oZWF0bWFwRmJvO1xuXG4gICAgaWYgKCFmYm8pIHtcbiAgICAgICAgY29uc3QgdGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTtcbiAgICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZSk7XG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGdsLkNMQU1QX1RPX0VER0UpO1xuICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9ULCBnbC5DTEFNUF9UT19FREdFKTtcbiAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGdsLkxJTkVBUik7XG4gICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBnbC5MSU5FQVIpO1xuXG4gICAgICAgIGZibyA9IGxheWVyLmhlYXRtYXBGYm8gPSBjb250ZXh0LmNyZWF0ZUZyYW1lYnVmZmVyKHBhaW50ZXIud2lkdGggLyA0LCBwYWludGVyLmhlaWdodCAvIDQsIGZhbHNlKTtcblxuICAgICAgICBiaW5kVGV4dHVyZVRvRnJhbWVidWZmZXIoY29udGV4dCwgcGFpbnRlciwgdGV4dHVyZSwgZmJvKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGZiby5jb2xvckF0dGFjaG1lbnQuZ2V0KCkpO1xuICAgICAgICBjb250ZXh0LmJpbmRGcmFtZWJ1ZmZlci5zZXQoZmJvLmZyYW1lYnVmZmVyKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGJpbmRUZXh0dXJlVG9GcmFtZWJ1ZmZlcihjb250ZXh0LCBwYWludGVyLCB0ZXh0dXJlLCBmYm8pIHtcbiAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgLy8gVXNlIHRoZSBoaWdoZXIgcHJlY2lzaW9uIGhhbGYtZmxvYXQgdGV4dHVyZSB3aGVyZSBhdmFpbGFibGUgKHByb2R1Y2luZyBtdWNoIHNtb290aGVyIGxvb2tpbmcgaGVhdG1hcHMpO1xuICAgIC8vIE90aGVyd2lzZSwgZmFsbCBiYWNrIHRvIGEgbG93IHByZWNpc2lvbiB0ZXh0dXJlXG4gICAgY29uc3QgaW50ZXJuYWxGb3JtYXQgPSBjb250ZXh0LmV4dFJlbmRlclRvVGV4dHVyZUhhbGZGbG9hdCA/IGNvbnRleHQuZXh0VGV4dHVyZUhhbGZGbG9hdC5IQUxGX0ZMT0FUX09FUyA6IGdsLlVOU0lHTkVEX0JZVEU7XG4gICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCBwYWludGVyLndpZHRoIC8gNCwgcGFpbnRlci5oZWlnaHQgLyA0LCAwLCBnbC5SR0JBLCBpbnRlcm5hbEZvcm1hdCwgbnVsbCk7XG4gICAgZmJvLmNvbG9yQXR0YWNobWVudC5zZXQodGV4dHVyZSk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclRleHR1cmVUb01hcChwYWludGVyLCBsYXllcikge1xuICAgIGNvbnN0IGNvbnRleHQgPSBwYWludGVyLmNvbnRleHQ7XG4gICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuXG4gICAgLy8gSGVyZSB3ZSBiaW5kIHR3byBkaWZmZXJlbnQgdGV4dHVyZXMgZnJvbSB3aGljaCB3ZSdsbCBzYW1wbGUgaW4gZHJhd2luZ1xuICAgIC8vIGhlYXRtYXBzOiB0aGUga2VybmVsIHRleHR1cmUsIHByZXBhcmVkIGluIHRoZSBvZmZzY3JlZW4gcGFzcywgYW5kIGFcbiAgICAvLyBjb2xvciByYW1wIHRleHR1cmUuXG4gICAgY29uc3QgZmJvID0gbGF5ZXIuaGVhdG1hcEZibztcbiAgICBpZiAoIWZibykgcmV0dXJuO1xuICAgIGNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQoZ2wuVEVYVFVSRTApO1xuICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIGZiby5jb2xvckF0dGFjaG1lbnQuZ2V0KCkpO1xuXG4gICAgY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldChnbC5URVhUVVJFMSk7XG4gICAgbGV0IGNvbG9yUmFtcFRleHR1cmUgPSBsYXllci5jb2xvclJhbXBUZXh0dXJlO1xuICAgIGlmICghY29sb3JSYW1wVGV4dHVyZSkge1xuICAgICAgICBjb2xvclJhbXBUZXh0dXJlID0gbGF5ZXIuY29sb3JSYW1wVGV4dHVyZSA9IG5ldyBUZXh0dXJlKGNvbnRleHQsIGxheWVyLmNvbG9yUmFtcCwgZ2wuUkdCQSk7XG4gICAgfVxuICAgIGNvbG9yUmFtcFRleHR1cmUuYmluZChnbC5MSU5FQVIsIGdsLkNMQU1QX1RPX0VER0UpO1xuXG4gICAgcGFpbnRlci51c2VQcm9ncmFtKCdoZWF0bWFwVGV4dHVyZScpLmRyYXcoY29udGV4dCwgZ2wuVFJJQU5HTEVTLFxuICAgICAgICBEZXB0aE1vZGUuZGlzYWJsZWQsIFN0ZW5jaWxNb2RlLmRpc2FibGVkLCBwYWludGVyLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLFxuICAgICAgICBoZWF0bWFwVGV4dHVyZVVuaWZvcm1WYWx1ZXMocGFpbnRlciwgbGF5ZXIsIDAsIDEpLFxuICAgICAgICBsYXllci5pZCwgcGFpbnRlci52aWV3cG9ydEJ1ZmZlciwgcGFpbnRlci5xdWFkVHJpYW5nbGVJbmRleEJ1ZmZlcixcbiAgICAgICAgcGFpbnRlci52aWV3cG9ydFNlZ21lbnRzLCBsYXllci5wYWludCwgcGFpbnRlci50cmFuc2Zvcm0uem9vbSk7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgRGVwdGhNb2RlIGZyb20gJy4uL2dsL2RlcHRoX21vZGUnO1xuaW1wb3J0IEN1bGxGYWNlTW9kZSBmcm9tICcuLi9nbC9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuL3RleHR1cmUnO1xuaW1wb3J0IHtcbiAgICBsaW5lVW5pZm9ybVZhbHVlcyxcbiAgICBsaW5lUGF0dGVyblVuaWZvcm1WYWx1ZXMsXG4gICAgbGluZVNERlVuaWZvcm1WYWx1ZXMsXG4gICAgbGluZUdyYWRpZW50VW5pZm9ybVZhbHVlc1xufSBmcm9tICcuL3Byb2dyYW0vbGluZV9wcm9ncmFtJztcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUgU291cmNlQ2FjaGUgZnJvbSAnLi4vc291cmNlL3NvdXJjZV9jYWNoZSc7XG5pbXBvcnQgdHlwZSBMaW5lU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllci9saW5lX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIExpbmVCdWNrZXQgZnJvbSAnLi4vZGF0YS9idWNrZXQvbGluZV9idWNrZXQnO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uL3NvdXJjZS90aWxlX2lkJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZHJhd0xpbmUocGFpbnRlcjogUGFpbnRlciwgc291cmNlQ2FjaGU6IFNvdXJjZUNhY2hlLCBsYXllcjogTGluZVN0eWxlTGF5ZXIsIGNvb3JkczogQXJyYXk8T3ZlcnNjYWxlZFRpbGVJRD4pIHtcbiAgICBpZiAocGFpbnRlci5yZW5kZXJQYXNzICE9PSAndHJhbnNsdWNlbnQnKSByZXR1cm47XG5cbiAgICBjb25zdCBvcGFjaXR5ID0gbGF5ZXIucGFpbnQuZ2V0KCdsaW5lLW9wYWNpdHknKTtcbiAgICBjb25zdCB3aWR0aCA9IGxheWVyLnBhaW50LmdldCgnbGluZS13aWR0aCcpO1xuICAgIGlmIChvcGFjaXR5LmNvbnN0YW50T3IoMSkgPT09IDAgfHwgd2lkdGguY29uc3RhbnRPcigxKSA9PT0gMCkgcmV0dXJuO1xuXG4gICAgY29uc3QgZGVwdGhNb2RlID0gcGFpbnRlci5kZXB0aE1vZGVGb3JTdWJsYXllcigwLCBEZXB0aE1vZGUuUmVhZE9ubHkpO1xuICAgIGNvbnN0IGNvbG9yTW9kZSA9IHBhaW50ZXIuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpO1xuXG4gICAgY29uc3QgZGFzaGFycmF5ID0gbGF5ZXIucGFpbnQuZ2V0KCdsaW5lLWRhc2hhcnJheScpO1xuICAgIGNvbnN0IHBhdHRlcm5Qcm9wZXJ0eSA9IGxheWVyLnBhaW50LmdldCgnbGluZS1wYXR0ZXJuJyk7XG4gICAgY29uc3QgaW1hZ2UgPSBwYXR0ZXJuUHJvcGVydHkuY29uc3RhbnRPcigoMTogYW55KSk7XG5cbiAgICBjb25zdCBncmFkaWVudCA9IGxheWVyLnBhaW50LmdldCgnbGluZS1ncmFkaWVudCcpO1xuICAgIGNvbnN0IGNyb3NzZmFkZSA9IGxheWVyLmdldENyb3NzZmFkZVBhcmFtZXRlcnMoKTtcblxuICAgIGNvbnN0IHByb2dyYW1JZCA9XG4gICAgICAgIGltYWdlID8gJ2xpbmVQYXR0ZXJuJyA6XG4gICAgICAgIGRhc2hhcnJheSA/ICdsaW5lU0RGJyA6XG4gICAgICAgIGdyYWRpZW50ID8gJ2xpbmVHcmFkaWVudCcgOiAnbGluZSc7XG5cbiAgICBjb25zdCBjb250ZXh0ID0gcGFpbnRlci5jb250ZXh0O1xuICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcblxuICAgIGxldCBmaXJzdFRpbGUgPSB0cnVlO1xuXG4gICAgaWYgKGdyYWRpZW50KSB7XG4gICAgICAgIGNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQoZ2wuVEVYVFVSRTApO1xuXG4gICAgICAgIGxldCBncmFkaWVudFRleHR1cmUgPSBsYXllci5ncmFkaWVudFRleHR1cmU7XG4gICAgICAgIGlmICghbGF5ZXIuZ3JhZGllbnQpIHJldHVybjtcbiAgICAgICAgaWYgKCFncmFkaWVudFRleHR1cmUpIGdyYWRpZW50VGV4dHVyZSA9IGxheWVyLmdyYWRpZW50VGV4dHVyZSA9IG5ldyBUZXh0dXJlKGNvbnRleHQsIGxheWVyLmdyYWRpZW50LCBnbC5SR0JBKTtcbiAgICAgICAgZ3JhZGllbnRUZXh0dXJlLmJpbmQoZ2wuTElORUFSLCBnbC5DTEFNUF9UT19FREdFKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNvb3JkIG9mIGNvb3Jkcykge1xuICAgICAgICBjb25zdCB0aWxlID0gc291cmNlQ2FjaGUuZ2V0VGlsZShjb29yZCk7XG5cbiAgICAgICAgaWYgKGltYWdlICYmICF0aWxlLnBhdHRlcm5zTG9hZGVkKCkpIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnN0IGJ1Y2tldDogP0xpbmVCdWNrZXQgPSAodGlsZS5nZXRCdWNrZXQobGF5ZXIpOiBhbnkpO1xuICAgICAgICBpZiAoIWJ1Y2tldCkgY29udGludWU7XG5cbiAgICAgICAgY29uc3QgcHJvZ3JhbUNvbmZpZ3VyYXRpb24gPSBidWNrZXQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChsYXllci5pZCk7XG4gICAgICAgIGNvbnN0IHByZXZQcm9ncmFtID0gcGFpbnRlci5jb250ZXh0LnByb2dyYW0uZ2V0KCk7XG4gICAgICAgIGNvbnN0IHByb2dyYW0gPSBwYWludGVyLnVzZVByb2dyYW0ocHJvZ3JhbUlkLCBwcm9ncmFtQ29uZmlndXJhdGlvbik7XG4gICAgICAgIGNvbnN0IHByb2dyYW1DaGFuZ2VkID0gZmlyc3RUaWxlIHx8IHByb2dyYW0ucHJvZ3JhbSAhPT0gcHJldlByb2dyYW07XG5cbiAgICAgICAgY29uc3QgY29uc3RhbnRQYXR0ZXJuID0gcGF0dGVyblByb3BlcnR5LmNvbnN0YW50T3IobnVsbCk7XG4gICAgICAgIGlmIChjb25zdGFudFBhdHRlcm4gJiYgdGlsZS5pbWFnZUF0bGFzKSB7XG4gICAgICAgICAgICBjb25zdCBhdGxhcyA9IHRpbGUuaW1hZ2VBdGxhcztcbiAgICAgICAgICAgIGNvbnN0IHBvc1RvID0gYXRsYXMucGF0dGVyblBvc2l0aW9uc1tjb25zdGFudFBhdHRlcm4udG8udG9TdHJpbmcoKV07XG4gICAgICAgICAgICBjb25zdCBwb3NGcm9tID0gYXRsYXMucGF0dGVyblBvc2l0aW9uc1tjb25zdGFudFBhdHRlcm4uZnJvbS50b1N0cmluZygpXTtcbiAgICAgICAgICAgIGlmIChwb3NUbyAmJiBwb3NGcm9tKSBwcm9ncmFtQ29uZmlndXJhdGlvbi5zZXRDb25zdGFudFBhdHRlcm5Qb3NpdGlvbnMocG9zVG8sIHBvc0Zyb20pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdW5pZm9ybVZhbHVlcyA9IGltYWdlID8gbGluZVBhdHRlcm5Vbmlmb3JtVmFsdWVzKHBhaW50ZXIsIHRpbGUsIGxheWVyLCBjcm9zc2ZhZGUpIDpcbiAgICAgICAgICAgIGRhc2hhcnJheSA/IGxpbmVTREZVbmlmb3JtVmFsdWVzKHBhaW50ZXIsIHRpbGUsIGxheWVyLCBkYXNoYXJyYXksIGNyb3NzZmFkZSkgOlxuICAgICAgICAgICAgZ3JhZGllbnQgPyBsaW5lR3JhZGllbnRVbmlmb3JtVmFsdWVzKHBhaW50ZXIsIHRpbGUsIGxheWVyKSA6XG4gICAgICAgICAgICBsaW5lVW5pZm9ybVZhbHVlcyhwYWludGVyLCB0aWxlLCBsYXllcik7XG5cbiAgICAgICAgaWYgKGltYWdlKSB7XG4gICAgICAgICAgICBjb250ZXh0LmFjdGl2ZVRleHR1cmUuc2V0KGdsLlRFWFRVUkUwKTtcbiAgICAgICAgICAgIHRpbGUuaW1hZ2VBdGxhc1RleHR1cmUuYmluZChnbC5MSU5FQVIsIGdsLkNMQU1QX1RPX0VER0UpO1xuICAgICAgICAgICAgcHJvZ3JhbUNvbmZpZ3VyYXRpb24udXBkYXRlUGFpbnRCdWZmZXJzKGNyb3NzZmFkZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGFzaGFycmF5ICYmIChwcm9ncmFtQ2hhbmdlZCB8fCBwYWludGVyLmxpbmVBdGxhcy5kaXJ0eSkpIHtcbiAgICAgICAgICAgIGNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQoZ2wuVEVYVFVSRTApO1xuICAgICAgICAgICAgcGFpbnRlci5saW5lQXRsYXMuYmluZChjb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByb2dyYW0uZHJhdyhjb250ZXh0LCBnbC5UUklBTkdMRVMsIGRlcHRoTW9kZSxcbiAgICAgICAgICAgIHBhaW50ZXIuc3RlbmNpbE1vZGVGb3JDbGlwcGluZyhjb29yZCksIGNvbG9yTW9kZSwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLCB1bmlmb3JtVmFsdWVzLFxuICAgICAgICAgICAgbGF5ZXIuaWQsIGJ1Y2tldC5sYXlvdXRWZXJ0ZXhCdWZmZXIsIGJ1Y2tldC5pbmRleEJ1ZmZlciwgYnVja2V0LnNlZ21lbnRzLFxuICAgICAgICAgICAgbGF5ZXIucGFpbnQsIHBhaW50ZXIudHJhbnNmb3JtLnpvb20sIHByb2dyYW1Db25maWd1cmF0aW9uKTtcblxuICAgICAgICBmaXJzdFRpbGUgPSBmYWxzZTtcbiAgICAgICAgLy8gb25jZSByZWZhY3RvcmVkIHNvIHRoYXQgYm91bmQgdGV4dHVyZSBzdGF0ZSBpcyBtYW5hZ2VkLCB3ZSdsbCBhbHNvIGJlIGFibGUgdG8gcmVtb3ZlIHRoaXMgZmlyc3RUaWxlL3Byb2dyYW1DaGFuZ2VkIGxvZ2ljXG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IENvbG9yIGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5pbXBvcnQgRGVwdGhNb2RlIGZyb20gJy4uL2dsL2RlcHRoX21vZGUnO1xuaW1wb3J0IEN1bGxGYWNlTW9kZSBmcm9tICcuLi9nbC9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQge1xuICAgIGZpbGxVbmlmb3JtVmFsdWVzLFxuICAgIGZpbGxQYXR0ZXJuVW5pZm9ybVZhbHVlcyxcbiAgICBmaWxsT3V0bGluZVVuaWZvcm1WYWx1ZXMsXG4gICAgZmlsbE91dGxpbmVQYXR0ZXJuVW5pZm9ybVZhbHVlc1xufSBmcm9tICcuL3Byb2dyYW0vZmlsbF9wcm9ncmFtJztcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUgU291cmNlQ2FjaGUgZnJvbSAnLi4vc291cmNlL3NvdXJjZV9jYWNoZSc7XG5pbXBvcnQgdHlwZSBGaWxsU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllci9maWxsX3N0eWxlX2xheWVyJztcbmltcG9ydCB0eXBlIEZpbGxCdWNrZXQgZnJvbSAnLi4vZGF0YS9idWNrZXQvZmlsbF9idWNrZXQnO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uL3NvdXJjZS90aWxlX2lkJztcblxuZXhwb3J0IGRlZmF1bHQgZHJhd0ZpbGw7XG5cbmZ1bmN0aW9uIGRyYXdGaWxsKHBhaW50ZXI6IFBhaW50ZXIsIHNvdXJjZUNhY2hlOiBTb3VyY2VDYWNoZSwgbGF5ZXI6IEZpbGxTdHlsZUxheWVyLCBjb29yZHM6IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+KSB7XG4gICAgY29uc3QgY29sb3IgPSBsYXllci5wYWludC5nZXQoJ2ZpbGwtY29sb3InKTtcbiAgICBjb25zdCBvcGFjaXR5ID0gbGF5ZXIucGFpbnQuZ2V0KCdmaWxsLW9wYWNpdHknKTtcblxuICAgIGlmIChvcGFjaXR5LmNvbnN0YW50T3IoMSkgPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbG9yTW9kZSA9IHBhaW50ZXIuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpO1xuXG4gICAgY29uc3QgcGF0dGVybiA9IGxheWVyLnBhaW50LmdldCgnZmlsbC1wYXR0ZXJuJyk7XG4gICAgY29uc3QgcGFzcyA9IHBhaW50ZXIub3BhcXVlUGFzc0VuYWJsZWRGb3JMYXllcigpICYmXG4gICAgICAgICghcGF0dGVybi5jb25zdGFudE9yKCgxOiBhbnkpKSAmJlxuICAgICAgICBjb2xvci5jb25zdGFudE9yKENvbG9yLnRyYW5zcGFyZW50KS5hID09PSAxICYmXG4gICAgICAgIG9wYWNpdHkuY29uc3RhbnRPcigwKSA9PT0gMSkgPyAnb3BhcXVlJyA6ICd0cmFuc2x1Y2VudCc7XG5cbiAgICAvLyBEcmF3IGZpbGxcbiAgICBpZiAocGFpbnRlci5yZW5kZXJQYXNzID09PSBwYXNzKSB7XG4gICAgICAgIGNvbnN0IGRlcHRoTW9kZSA9IHBhaW50ZXIuZGVwdGhNb2RlRm9yU3VibGF5ZXIoXG4gICAgICAgICAgICAxLCBwYWludGVyLnJlbmRlclBhc3MgPT09ICdvcGFxdWUnID8gRGVwdGhNb2RlLlJlYWRXcml0ZSA6IERlcHRoTW9kZS5SZWFkT25seSk7XG4gICAgICAgIGRyYXdGaWxsVGlsZXMocGFpbnRlciwgc291cmNlQ2FjaGUsIGxheWVyLCBjb29yZHMsIGRlcHRoTW9kZSwgY29sb3JNb2RlLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgLy8gRHJhdyBzdHJva2VcbiAgICBpZiAocGFpbnRlci5yZW5kZXJQYXNzID09PSAndHJhbnNsdWNlbnQnICYmIGxheWVyLnBhaW50LmdldCgnZmlsbC1hbnRpYWxpYXMnKSkge1xuXG4gICAgICAgIC8vIElmIHdlIGRlZmluZWQgYSBkaWZmZXJlbnQgY29sb3IgZm9yIHRoZSBmaWxsIG91dGxpbmUsIHdlIGFyZVxuICAgICAgICAvLyBnb2luZyB0byBpZ25vcmUgdGhlIGJpdHMgaW4gMHgwNyBhbmQganVzdCBjYXJlIGFib3V0IHRoZSBnbG9iYWxcbiAgICAgICAgLy8gY2xpcHBpbmcgbWFzay5cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSBvbmx5IHdhbnQgdG8gZHJhd0ZpbGwgdGhlIGFudGlhbGlhc2VkIHBhcnRzIHRoYXQgYXJlXG4gICAgICAgIC8vICpvdXRzaWRlKiB0aGUgY3VycmVudCBzaGFwZS4gVGhpcyBpcyBpbXBvcnRhbnQgaW4gY2FzZSB0aGUgZmlsbFxuICAgICAgICAvLyBvciBzdHJva2UgY29sb3IgaXMgdHJhbnNsdWNlbnQuIElmIHdlIHdvdWxkbid0IGNsaXAgdG8gb3V0c2lkZVxuICAgICAgICAvLyB0aGUgY3VycmVudCBzaGFwZSwgc29tZSBwaXhlbHMgZnJvbSB0aGUgb3V0bGluZSBzdHJva2Ugb3ZlcmxhcHBlZFxuICAgICAgICAvLyB0aGUgKG5vbi1hbnRpYWxpYXNlZCkgZmlsbC5cbiAgICAgICAgY29uc3QgZGVwdGhNb2RlID0gcGFpbnRlci5kZXB0aE1vZGVGb3JTdWJsYXllcihcbiAgICAgICAgICAgIGxheWVyLmdldFBhaW50UHJvcGVydHkoJ2ZpbGwtb3V0bGluZS1jb2xvcicpID8gMiA6IDAsIERlcHRoTW9kZS5SZWFkT25seSk7XG4gICAgICAgIGRyYXdGaWxsVGlsZXMocGFpbnRlciwgc291cmNlQ2FjaGUsIGxheWVyLCBjb29yZHMsIGRlcHRoTW9kZSwgY29sb3JNb2RlLCB0cnVlKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYXdGaWxsVGlsZXMocGFpbnRlciwgc291cmNlQ2FjaGUsIGxheWVyLCBjb29yZHMsIGRlcHRoTW9kZSwgY29sb3JNb2RlLCBpc091dGxpbmUpIHtcbiAgICBjb25zdCBnbCA9IHBhaW50ZXIuY29udGV4dC5nbDtcblxuICAgIGNvbnN0IHBhdHRlcm5Qcm9wZXJ0eSA9IGxheWVyLnBhaW50LmdldCgnZmlsbC1wYXR0ZXJuJyk7XG4gICAgY29uc3QgaW1hZ2UgPSBwYXR0ZXJuUHJvcGVydHkgJiYgcGF0dGVyblByb3BlcnR5LmNvbnN0YW50T3IoKDE6IGFueSkpO1xuICAgIGNvbnN0IGNyb3NzZmFkZSA9IGxheWVyLmdldENyb3NzZmFkZVBhcmFtZXRlcnMoKTtcbiAgICBsZXQgZHJhd01vZGUsIHByb2dyYW1OYW1lLCB1bmlmb3JtVmFsdWVzLCBpbmRleEJ1ZmZlciwgc2VnbWVudHM7XG5cbiAgICBpZiAoIWlzT3V0bGluZSkge1xuICAgICAgICBwcm9ncmFtTmFtZSA9IGltYWdlID8gJ2ZpbGxQYXR0ZXJuJyA6ICdmaWxsJztcbiAgICAgICAgZHJhd01vZGUgPSBnbC5UUklBTkdMRVM7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcHJvZ3JhbU5hbWUgPSBpbWFnZSAmJiAhbGF5ZXIuZ2V0UGFpbnRQcm9wZXJ0eSgnZmlsbC1vdXRsaW5lLWNvbG9yJykgPyAnZmlsbE91dGxpbmVQYXR0ZXJuJyA6ICdmaWxsT3V0bGluZSc7XG4gICAgICAgIGRyYXdNb2RlID0gZ2wuTElORVM7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjb29yZCBvZiBjb29yZHMpIHtcbiAgICAgICAgY29uc3QgdGlsZSA9IHNvdXJjZUNhY2hlLmdldFRpbGUoY29vcmQpO1xuICAgICAgICBpZiAoaW1hZ2UgJiYgIXRpbGUucGF0dGVybnNMb2FkZWQoKSkgY29udGludWU7XG5cbiAgICAgICAgY29uc3QgYnVja2V0OiA/RmlsbEJ1Y2tldCA9ICh0aWxlLmdldEJ1Y2tldChsYXllcik6IGFueSk7XG4gICAgICAgIGlmICghYnVja2V0KSBjb250aW51ZTtcblxuICAgICAgICBjb25zdCBwcm9ncmFtQ29uZmlndXJhdGlvbiA9IGJ1Y2tldC5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KGxheWVyLmlkKTtcbiAgICAgICAgY29uc3QgcHJvZ3JhbSA9IHBhaW50ZXIudXNlUHJvZ3JhbShwcm9ncmFtTmFtZSwgcHJvZ3JhbUNvbmZpZ3VyYXRpb24pO1xuXG4gICAgICAgIGlmIChpbWFnZSkge1xuICAgICAgICAgICAgcGFpbnRlci5jb250ZXh0LmFjdGl2ZVRleHR1cmUuc2V0KGdsLlRFWFRVUkUwKTtcbiAgICAgICAgICAgIHRpbGUuaW1hZ2VBdGxhc1RleHR1cmUuYmluZChnbC5MSU5FQVIsIGdsLkNMQU1QX1RPX0VER0UpO1xuICAgICAgICAgICAgcHJvZ3JhbUNvbmZpZ3VyYXRpb24udXBkYXRlUGFpbnRCdWZmZXJzKGNyb3NzZmFkZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb25zdGFudFBhdHRlcm4gPSBwYXR0ZXJuUHJvcGVydHkuY29uc3RhbnRPcihudWxsKTtcbiAgICAgICAgaWYgKGNvbnN0YW50UGF0dGVybiAmJiB0aWxlLmltYWdlQXRsYXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGF0bGFzID0gdGlsZS5pbWFnZUF0bGFzO1xuICAgICAgICAgICAgY29uc3QgcG9zVG8gPSBhdGxhcy5wYXR0ZXJuUG9zaXRpb25zW2NvbnN0YW50UGF0dGVybi50by50b1N0cmluZygpXTtcbiAgICAgICAgICAgIGNvbnN0IHBvc0Zyb20gPSBhdGxhcy5wYXR0ZXJuUG9zaXRpb25zW2NvbnN0YW50UGF0dGVybi5mcm9tLnRvU3RyaW5nKCldO1xuICAgICAgICAgICAgaWYgKHBvc1RvICYmIHBvc0Zyb20pIHByb2dyYW1Db25maWd1cmF0aW9uLnNldENvbnN0YW50UGF0dGVyblBvc2l0aW9ucyhwb3NUbywgcG9zRnJvbSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0aWxlTWF0cml4ID0gcGFpbnRlci50cmFuc2xhdGVQb3NNYXRyaXgoY29vcmQucG9zTWF0cml4LCB0aWxlLFxuICAgICAgICAgICAgbGF5ZXIucGFpbnQuZ2V0KCdmaWxsLXRyYW5zbGF0ZScpLCBsYXllci5wYWludC5nZXQoJ2ZpbGwtdHJhbnNsYXRlLWFuY2hvcicpKTtcblxuICAgICAgICBpZiAoIWlzT3V0bGluZSkge1xuICAgICAgICAgICAgaW5kZXhCdWZmZXIgPSBidWNrZXQuaW5kZXhCdWZmZXI7XG4gICAgICAgICAgICBzZWdtZW50cyA9IGJ1Y2tldC5zZWdtZW50cztcbiAgICAgICAgICAgIHVuaWZvcm1WYWx1ZXMgPSBpbWFnZSA/XG4gICAgICAgICAgICAgICAgZmlsbFBhdHRlcm5Vbmlmb3JtVmFsdWVzKHRpbGVNYXRyaXgsIHBhaW50ZXIsIGNyb3NzZmFkZSwgdGlsZSkgOlxuICAgICAgICAgICAgICAgIGZpbGxVbmlmb3JtVmFsdWVzKHRpbGVNYXRyaXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5kZXhCdWZmZXIgPSBidWNrZXQuaW5kZXhCdWZmZXIyO1xuICAgICAgICAgICAgc2VnbWVudHMgPSBidWNrZXQuc2VnbWVudHMyO1xuICAgICAgICAgICAgY29uc3QgZHJhd2luZ0J1ZmZlclNpemUgPSBbZ2wuZHJhd2luZ0J1ZmZlcldpZHRoLCBnbC5kcmF3aW5nQnVmZmVySGVpZ2h0XTtcbiAgICAgICAgICAgIHVuaWZvcm1WYWx1ZXMgPSAocHJvZ3JhbU5hbWUgPT09ICdmaWxsT3V0bGluZVBhdHRlcm4nICYmIGltYWdlKSA/XG4gICAgICAgICAgICAgICAgZmlsbE91dGxpbmVQYXR0ZXJuVW5pZm9ybVZhbHVlcyh0aWxlTWF0cml4LCBwYWludGVyLCBjcm9zc2ZhZGUsIHRpbGUsIGRyYXdpbmdCdWZmZXJTaXplKSA6XG4gICAgICAgICAgICAgICAgZmlsbE91dGxpbmVVbmlmb3JtVmFsdWVzKHRpbGVNYXRyaXgsIGRyYXdpbmdCdWZmZXJTaXplKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByb2dyYW0uZHJhdyhwYWludGVyLmNvbnRleHQsIGRyYXdNb2RlLCBkZXB0aE1vZGUsXG4gICAgICAgICAgICBwYWludGVyLnN0ZW5jaWxNb2RlRm9yQ2xpcHBpbmcoY29vcmQpLCBjb2xvck1vZGUsIEN1bGxGYWNlTW9kZS5kaXNhYmxlZCwgdW5pZm9ybVZhbHVlcyxcbiAgICAgICAgICAgIGxheWVyLmlkLCBidWNrZXQubGF5b3V0VmVydGV4QnVmZmVyLCBpbmRleEJ1ZmZlciwgc2VnbWVudHMsXG4gICAgICAgICAgICBsYXllci5wYWludCwgcGFpbnRlci50cmFuc2Zvcm0uem9vbSwgcHJvZ3JhbUNvbmZpZ3VyYXRpb24pO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCBEZXB0aE1vZGUgZnJvbSAnLi4vZ2wvZGVwdGhfbW9kZSc7XG5pbXBvcnQgU3RlbmNpbE1vZGUgZnJvbSAnLi4vZ2wvc3RlbmNpbF9tb2RlJztcbmltcG9ydCBDb2xvck1vZGUgZnJvbSAnLi4vZ2wvY29sb3JfbW9kZSc7XG5pbXBvcnQgQ3VsbEZhY2VNb2RlIGZyb20gJy4uL2dsL2N1bGxfZmFjZV9tb2RlJztcbmltcG9ydCB7XG4gICAgZmlsbEV4dHJ1c2lvblVuaWZvcm1WYWx1ZXMsXG4gICAgZmlsbEV4dHJ1c2lvblBhdHRlcm5Vbmlmb3JtVmFsdWVzLFxufSBmcm9tICcuL3Byb2dyYW0vZmlsbF9leHRydXNpb25fcHJvZ3JhbSc7XG5cbmltcG9ydCB0eXBlIFBhaW50ZXIgZnJvbSAnLi9wYWludGVyJztcbmltcG9ydCB0eXBlIFNvdXJjZUNhY2hlIGZyb20gJy4uL3NvdXJjZS9zb3VyY2VfY2FjaGUnO1xuaW1wb3J0IHR5cGUgRmlsbEV4dHJ1c2lvblN0eWxlTGF5ZXIgZnJvbSAnLi4vc3R5bGUvc3R5bGVfbGF5ZXIvZmlsbF9leHRydXNpb25fc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUgRmlsbEV4dHJ1c2lvbkJ1Y2tldCBmcm9tICcuLi9kYXRhL2J1Y2tldC9maWxsX2V4dHJ1c2lvbl9idWNrZXQnO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uL3NvdXJjZS90aWxlX2lkJztcblxuZXhwb3J0IGRlZmF1bHQgZHJhdztcblxuZnVuY3Rpb24gZHJhdyhwYWludGVyOiBQYWludGVyLCBzb3VyY2U6IFNvdXJjZUNhY2hlLCBsYXllcjogRmlsbEV4dHJ1c2lvblN0eWxlTGF5ZXIsIGNvb3JkczogQXJyYXk8T3ZlcnNjYWxlZFRpbGVJRD4pIHtcbiAgICBjb25zdCBvcGFjaXR5ID0gbGF5ZXIucGFpbnQuZ2V0KCdmaWxsLWV4dHJ1c2lvbi1vcGFjaXR5Jyk7XG4gICAgaWYgKG9wYWNpdHkgPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChwYWludGVyLnJlbmRlclBhc3MgPT09ICd0cmFuc2x1Y2VudCcpIHtcbiAgICAgICAgY29uc3QgZGVwdGhNb2RlID0gbmV3IERlcHRoTW9kZShwYWludGVyLmNvbnRleHQuZ2wuTEVRVUFMLCBEZXB0aE1vZGUuUmVhZFdyaXRlLCBwYWludGVyLmRlcHRoUmFuZ2VGb3IzRCk7XG5cbiAgICAgICAgaWYgKG9wYWNpdHkgPT09IDEgJiYgIWxheWVyLnBhaW50LmdldCgnZmlsbC1leHRydXNpb24tcGF0dGVybicpLmNvbnN0YW50T3IoKDE6IGFueSkpKSB7XG4gICAgICAgICAgICBjb25zdCBjb2xvck1vZGUgPSBwYWludGVyLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKTtcbiAgICAgICAgICAgIGRyYXdFeHRydXNpb25UaWxlcyhwYWludGVyLCBzb3VyY2UsIGxheWVyLCBjb29yZHMsIGRlcHRoTW9kZSwgU3RlbmNpbE1vZGUuZGlzYWJsZWQsIGNvbG9yTW9kZSk7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIERyYXcgdHJhbnNwYXJlbnQgYnVpbGRpbmdzIGluIHR3byBwYXNzZXMgc28gdGhhdCBvbmx5IHRoZSBjbG9zZXN0IHN1cmZhY2UgaXMgZHJhd24uXG4gICAgICAgICAgICAvLyBGaXJzdCBkcmF3IGFsbCB0aGUgZXh0cnVzaW9ucyBpbnRvIG9ubHkgdGhlIGRlcHRoIGJ1ZmZlci4gTm8gY29sb3JzIGFyZSBkcmF3bi5cbiAgICAgICAgICAgIGRyYXdFeHRydXNpb25UaWxlcyhwYWludGVyLCBzb3VyY2UsIGxheWVyLCBjb29yZHMsIGRlcHRoTW9kZSxcbiAgICAgICAgICAgICAgICBTdGVuY2lsTW9kZS5kaXNhYmxlZCxcbiAgICAgICAgICAgICAgICBDb2xvck1vZGUuZGlzYWJsZWQpO1xuXG4gICAgICAgICAgICAvLyBUaGVuIGRyYXcgYWxsIHRoZSBleHRydXNpb25zIGEgc2Vjb25kIHR5cGUsIG9ubHkgY29sb3JpbmcgZnJhZ21lbnRzIGlmIHRoZXkgaGF2ZSB0aGVcbiAgICAgICAgICAgIC8vIHNhbWUgZGVwdGggdmFsdWUgYXMgdGhlIGNsb3Nlc3QgZnJhZ21lbnQgaW4gdGhlIHByZXZpb3VzIHBhc3MuIFVzZSB0aGUgc3RlbmNpbCBidWZmZXJcbiAgICAgICAgICAgIC8vIHRvIHByZXZlbnQgdGhlIHNlY29uZCBkcmF3IGluIGNhc2VzIHdoZXJlIHdlIGhhdmUgY29pbmNpZGVudCBwb2x5Z29ucy5cbiAgICAgICAgICAgIGRyYXdFeHRydXNpb25UaWxlcyhwYWludGVyLCBzb3VyY2UsIGxheWVyLCBjb29yZHMsIGRlcHRoTW9kZSxcbiAgICAgICAgICAgICAgICBwYWludGVyLnN0ZW5jaWxNb2RlRm9yM0QoKSxcbiAgICAgICAgICAgICAgICBwYWludGVyLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYXdFeHRydXNpb25UaWxlcyhwYWludGVyLCBzb3VyY2UsIGxheWVyLCBjb29yZHMsIGRlcHRoTW9kZSwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSBwYWludGVyLmNvbnRleHQ7XG4gICAgY29uc3QgZ2wgPSBjb250ZXh0LmdsO1xuICAgIGNvbnN0IHBhdHRlcm5Qcm9wZXJ0eSA9IGxheWVyLnBhaW50LmdldCgnZmlsbC1leHRydXNpb24tcGF0dGVybicpO1xuICAgIGNvbnN0IGltYWdlID0gcGF0dGVyblByb3BlcnR5LmNvbnN0YW50T3IoKDE6IGFueSkpO1xuICAgIGNvbnN0IGNyb3NzZmFkZSA9IGxheWVyLmdldENyb3NzZmFkZVBhcmFtZXRlcnMoKTtcbiAgICBjb25zdCBvcGFjaXR5ID0gbGF5ZXIucGFpbnQuZ2V0KCdmaWxsLWV4dHJ1c2lvbi1vcGFjaXR5Jyk7XG5cbiAgICBmb3IgKGNvbnN0IGNvb3JkIG9mIGNvb3Jkcykge1xuICAgICAgICBjb25zdCB0aWxlID0gc291cmNlLmdldFRpbGUoY29vcmQpO1xuICAgICAgICBjb25zdCBidWNrZXQ6ID9GaWxsRXh0cnVzaW9uQnVja2V0ID0gKHRpbGUuZ2V0QnVja2V0KGxheWVyKTogYW55KTtcbiAgICAgICAgaWYgKCFidWNrZXQpIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnN0IHByb2dyYW1Db25maWd1cmF0aW9uID0gYnVja2V0LnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQobGF5ZXIuaWQpO1xuICAgICAgICBjb25zdCBwcm9ncmFtID0gcGFpbnRlci51c2VQcm9ncmFtKGltYWdlID8gJ2ZpbGxFeHRydXNpb25QYXR0ZXJuJyA6ICdmaWxsRXh0cnVzaW9uJywgcHJvZ3JhbUNvbmZpZ3VyYXRpb24pO1xuXG4gICAgICAgIGlmIChpbWFnZSkge1xuICAgICAgICAgICAgcGFpbnRlci5jb250ZXh0LmFjdGl2ZVRleHR1cmUuc2V0KGdsLlRFWFRVUkUwKTtcbiAgICAgICAgICAgIHRpbGUuaW1hZ2VBdGxhc1RleHR1cmUuYmluZChnbC5MSU5FQVIsIGdsLkNMQU1QX1RPX0VER0UpO1xuICAgICAgICAgICAgcHJvZ3JhbUNvbmZpZ3VyYXRpb24udXBkYXRlUGFpbnRCdWZmZXJzKGNyb3NzZmFkZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29uc3RhbnRQYXR0ZXJuID0gcGF0dGVyblByb3BlcnR5LmNvbnN0YW50T3IobnVsbCk7XG4gICAgICAgIGlmIChjb25zdGFudFBhdHRlcm4gJiYgdGlsZS5pbWFnZUF0bGFzKSB7XG4gICAgICAgICAgICBjb25zdCBhdGxhcyA9IHRpbGUuaW1hZ2VBdGxhcztcbiAgICAgICAgICAgIGNvbnN0IHBvc1RvID0gYXRsYXMucGF0dGVyblBvc2l0aW9uc1tjb25zdGFudFBhdHRlcm4udG8udG9TdHJpbmcoKV07XG4gICAgICAgICAgICBjb25zdCBwb3NGcm9tID0gYXRsYXMucGF0dGVyblBvc2l0aW9uc1tjb25zdGFudFBhdHRlcm4uZnJvbS50b1N0cmluZygpXTtcbiAgICAgICAgICAgIGlmIChwb3NUbyAmJiBwb3NGcm9tKSBwcm9ncmFtQ29uZmlndXJhdGlvbi5zZXRDb25zdGFudFBhdHRlcm5Qb3NpdGlvbnMocG9zVG8sIHBvc0Zyb20pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWF0cml4ID0gcGFpbnRlci50cmFuc2xhdGVQb3NNYXRyaXgoXG4gICAgICAgICAgICBjb29yZC5wb3NNYXRyaXgsXG4gICAgICAgICAgICB0aWxlLFxuICAgICAgICAgICAgbGF5ZXIucGFpbnQuZ2V0KCdmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUnKSxcbiAgICAgICAgICAgIGxheWVyLnBhaW50LmdldCgnZmlsbC1leHRydXNpb24tdHJhbnNsYXRlLWFuY2hvcicpKTtcblxuICAgICAgICBjb25zdCBzaG91bGRVc2VWZXJ0aWNhbEdyYWRpZW50ID0gbGF5ZXIucGFpbnQuZ2V0KCdmaWxsLWV4dHJ1c2lvbi12ZXJ0aWNhbC1ncmFkaWVudCcpO1xuICAgICAgICBjb25zdCB1bmlmb3JtVmFsdWVzID0gaW1hZ2UgP1xuICAgICAgICAgICAgZmlsbEV4dHJ1c2lvblBhdHRlcm5Vbmlmb3JtVmFsdWVzKG1hdHJpeCwgcGFpbnRlciwgc2hvdWxkVXNlVmVydGljYWxHcmFkaWVudCwgb3BhY2l0eSwgY29vcmQsIGNyb3NzZmFkZSwgdGlsZSkgOlxuICAgICAgICAgICAgZmlsbEV4dHJ1c2lvblVuaWZvcm1WYWx1ZXMobWF0cml4LCBwYWludGVyLCBzaG91bGRVc2VWZXJ0aWNhbEdyYWRpZW50LCBvcGFjaXR5KTtcblxuICAgICAgICBwcm9ncmFtLmRyYXcoY29udGV4dCwgY29udGV4dC5nbC5UUklBTkdMRVMsIGRlcHRoTW9kZSwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSwgQ3VsbEZhY2VNb2RlLmJhY2tDQ1csXG4gICAgICAgICAgICB1bmlmb3JtVmFsdWVzLCBsYXllci5pZCwgYnVja2V0LmxheW91dFZlcnRleEJ1ZmZlciwgYnVja2V0LmluZGV4QnVmZmVyLFxuICAgICAgICAgICAgYnVja2V0LnNlZ21lbnRzLCBsYXllci5wYWludCwgcGFpbnRlci50cmFuc2Zvcm0uem9vbSxcbiAgICAgICAgICAgIHByb2dyYW1Db25maWd1cmF0aW9uKTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuL3RleHR1cmUnO1xuaW1wb3J0IFN0ZW5jaWxNb2RlIGZyb20gJy4uL2dsL3N0ZW5jaWxfbW9kZSc7XG5pbXBvcnQgRGVwdGhNb2RlIGZyb20gJy4uL2dsL2RlcHRoX21vZGUnO1xuaW1wb3J0IEN1bGxGYWNlTW9kZSBmcm9tICcuLi9nbC9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQge1xuICAgIGhpbGxzaGFkZVVuaWZvcm1WYWx1ZXMsXG4gICAgaGlsbHNoYWRlVW5pZm9ybVByZXBhcmVWYWx1ZXNcbn0gZnJvbSAnLi9wcm9ncmFtL2hpbGxzaGFkZV9wcm9ncmFtJztcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUgU291cmNlQ2FjaGUgZnJvbSAnLi4vc291cmNlL3NvdXJjZV9jYWNoZSc7XG5pbXBvcnQgdHlwZSBIaWxsc2hhZGVTdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyL2hpbGxzaGFkZV9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi4vc291cmNlL3RpbGVfaWQnO1xuXG5leHBvcnQgZGVmYXVsdCBkcmF3SGlsbHNoYWRlO1xuXG5mdW5jdGlvbiBkcmF3SGlsbHNoYWRlKHBhaW50ZXI6IFBhaW50ZXIsIHNvdXJjZUNhY2hlOiBTb3VyY2VDYWNoZSwgbGF5ZXI6IEhpbGxzaGFkZVN0eWxlTGF5ZXIsIHRpbGVJRHM6IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+KSB7XG4gICAgaWYgKHBhaW50ZXIucmVuZGVyUGFzcyAhPT0gJ29mZnNjcmVlbicgJiYgcGFpbnRlci5yZW5kZXJQYXNzICE9PSAndHJhbnNsdWNlbnQnKSByZXR1cm47XG5cbiAgICBjb25zdCBjb250ZXh0ID0gcGFpbnRlci5jb250ZXh0O1xuICAgIGNvbnN0IHNvdXJjZU1heFpvb20gPSBzb3VyY2VDYWNoZS5nZXRTb3VyY2UoKS5tYXh6b29tO1xuXG4gICAgY29uc3QgZGVwdGhNb2RlID0gcGFpbnRlci5kZXB0aE1vZGVGb3JTdWJsYXllcigwLCBEZXB0aE1vZGUuUmVhZE9ubHkpO1xuICAgIGNvbnN0IGNvbG9yTW9kZSA9IHBhaW50ZXIuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpO1xuXG4gICAgY29uc3QgW3N0ZW5jaWxNb2RlcywgY29vcmRzXSA9IHBhaW50ZXIucmVuZGVyUGFzcyA9PT0gJ3RyYW5zbHVjZW50JyA/XG4gICAgICAgIHBhaW50ZXIuc3RlbmNpbENvbmZpZ0Zvck92ZXJsYXAodGlsZUlEcykgOiBbe30sIHRpbGVJRHNdO1xuXG4gICAgZm9yIChjb25zdCBjb29yZCBvZiBjb29yZHMpIHtcbiAgICAgICAgY29uc3QgdGlsZSA9IHNvdXJjZUNhY2hlLmdldFRpbGUoY29vcmQpO1xuICAgICAgICBpZiAodGlsZS5uZWVkc0hpbGxzaGFkZVByZXBhcmUgJiYgcGFpbnRlci5yZW5kZXJQYXNzID09PSAnb2Zmc2NyZWVuJykge1xuICAgICAgICAgICAgcHJlcGFyZUhpbGxzaGFkZShwYWludGVyLCB0aWxlLCBsYXllciwgc291cmNlTWF4Wm9vbSwgZGVwdGhNb2RlLCBTdGVuY2lsTW9kZS5kaXNhYmxlZCwgY29sb3JNb2RlKTtcbiAgICAgICAgfSBlbHNlIGlmIChwYWludGVyLnJlbmRlclBhc3MgPT09ICd0cmFuc2x1Y2VudCcpIHtcbiAgICAgICAgICAgIHJlbmRlckhpbGxzaGFkZShwYWludGVyLCB0aWxlLCBsYXllciwgZGVwdGhNb2RlLCBzdGVuY2lsTW9kZXNbY29vcmQub3ZlcnNjYWxlZFpdLCBjb2xvck1vZGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29udGV4dC52aWV3cG9ydC5zZXQoWzAsIDAsIHBhaW50ZXIud2lkdGgsIHBhaW50ZXIuaGVpZ2h0XSk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckhpbGxzaGFkZShwYWludGVyLCB0aWxlLCBsYXllciwgZGVwdGhNb2RlLCBzdGVuY2lsTW9kZSwgY29sb3JNb2RlKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgY29uc3QgZmJvID0gdGlsZS5mYm87XG4gICAgaWYgKCFmYm8pIHJldHVybjtcblxuICAgIGNvbnN0IHByb2dyYW0gPSBwYWludGVyLnVzZVByb2dyYW0oJ2hpbGxzaGFkZScpO1xuXG4gICAgY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldChnbC5URVhUVVJFMCk7XG4gICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgZmJvLmNvbG9yQXR0YWNobWVudC5nZXQoKSk7XG5cbiAgICBjb25zdCB1bmlmb3JtVmFsdWVzID0gaGlsbHNoYWRlVW5pZm9ybVZhbHVlcyhwYWludGVyLCB0aWxlLCBsYXllcik7XG5cbiAgICBwcm9ncmFtLmRyYXcoY29udGV4dCwgZ2wuVFJJQU5HTEVTLCBkZXB0aE1vZGUsIHN0ZW5jaWxNb2RlLCBjb2xvck1vZGUsIEN1bGxGYWNlTW9kZS5kaXNhYmxlZCxcbiAgICAgICAgdW5pZm9ybVZhbHVlcywgbGF5ZXIuaWQsIHBhaW50ZXIucmFzdGVyQm91bmRzQnVmZmVyLFxuICAgICAgICBwYWludGVyLnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLCBwYWludGVyLnJhc3RlckJvdW5kc1NlZ21lbnRzKTtcbn1cblxuLy8gaGlsbHNoYWRlIHJlbmRlcmluZyBpcyBkb25lIGluIHR3byBzdGVwcy4gdGhlIHByZXBhcmUgc3RlcCBmaXJzdCBjYWxjdWxhdGVzIHRoZSBzbG9wZSBvZiB0aGUgdGVycmFpbiBpbiB0aGUgeCBhbmQgeVxuLy8gZGlyZWN0aW9ucyBmb3IgZWFjaCBwaXhlbCwgYW5kIHNhdmVzIHRob3NlIHZhbHVlcyB0byBhIGZyYW1lYnVmZmVyIHRleHR1cmUgaW4gdGhlIHIgYW5kIGcgY2hhbm5lbHMuXG5mdW5jdGlvbiBwcmVwYXJlSGlsbHNoYWRlKHBhaW50ZXIsIHRpbGUsIGxheWVyLCBzb3VyY2VNYXhab29tLCBkZXB0aE1vZGUsIHN0ZW5jaWxNb2RlLCBjb2xvck1vZGUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gcGFpbnRlci5jb250ZXh0O1xuICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcbiAgICBjb25zdCBkZW0gPSB0aWxlLmRlbTtcbiAgICBpZiAoZGVtICYmIGRlbS5kYXRhKSB7XG4gICAgICAgIGNvbnN0IHRpbGVTaXplID0gZGVtLmRpbTtcbiAgICAgICAgY29uc3QgdGV4dHVyZVN0cmlkZSA9IGRlbS5zdHJpZGU7XG5cbiAgICAgICAgY29uc3QgcGl4ZWxEYXRhID0gZGVtLmdldFBpeGVscygpO1xuICAgICAgICBjb250ZXh0LmFjdGl2ZVRleHR1cmUuc2V0KGdsLlRFWFRVUkUxKTtcblxuICAgICAgICBjb250ZXh0LnBpeGVsU3RvcmVVbnBhY2tQcmVtdWx0aXBseUFscGhhLnNldChmYWxzZSk7XG4gICAgICAgIHRpbGUuZGVtVGV4dHVyZSA9IHRpbGUuZGVtVGV4dHVyZSB8fCBwYWludGVyLmdldFRpbGVUZXh0dXJlKHRleHR1cmVTdHJpZGUpO1xuICAgICAgICBpZiAodGlsZS5kZW1UZXh0dXJlKSB7XG4gICAgICAgICAgICBjb25zdCBkZW1UZXh0dXJlID0gdGlsZS5kZW1UZXh0dXJlO1xuICAgICAgICAgICAgZGVtVGV4dHVyZS51cGRhdGUocGl4ZWxEYXRhLCB7cHJlbXVsdGlwbHk6IGZhbHNlfSk7XG4gICAgICAgICAgICBkZW1UZXh0dXJlLmJpbmQoZ2wuTkVBUkVTVCwgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aWxlLmRlbVRleHR1cmUgPSBuZXcgVGV4dHVyZShjb250ZXh0LCBwaXhlbERhdGEsIGdsLlJHQkEsIHtwcmVtdWx0aXBseTogZmFsc2V9KTtcbiAgICAgICAgICAgIHRpbGUuZGVtVGV4dHVyZS5iaW5kKGdsLk5FQVJFU1QsIGdsLkNMQU1QX1RPX0VER0UpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldChnbC5URVhUVVJFMCk7XG5cbiAgICAgICAgbGV0IGZibyA9IHRpbGUuZmJvO1xuXG4gICAgICAgIGlmICghZmJvKSB7XG4gICAgICAgICAgICBjb25zdCByZW5kZXJUZXh0dXJlID0gbmV3IFRleHR1cmUoY29udGV4dCwge3dpZHRoOiB0aWxlU2l6ZSwgaGVpZ2h0OiB0aWxlU2l6ZSwgZGF0YTogbnVsbH0sIGdsLlJHQkEpO1xuICAgICAgICAgICAgcmVuZGVyVGV4dHVyZS5iaW5kKGdsLkxJTkVBUiwgZ2wuQ0xBTVBfVE9fRURHRSk7XG5cbiAgICAgICAgICAgIGZibyA9IHRpbGUuZmJvID0gY29udGV4dC5jcmVhdGVGcmFtZWJ1ZmZlcih0aWxlU2l6ZSwgdGlsZVNpemUsIHRydWUpO1xuICAgICAgICAgICAgZmJvLmNvbG9yQXR0YWNobWVudC5zZXQocmVuZGVyVGV4dHVyZS50ZXh0dXJlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQuYmluZEZyYW1lYnVmZmVyLnNldChmYm8uZnJhbWVidWZmZXIpO1xuICAgICAgICBjb250ZXh0LnZpZXdwb3J0LnNldChbMCwgMCwgdGlsZVNpemUsIHRpbGVTaXplXSk7XG5cbiAgICAgICAgcGFpbnRlci51c2VQcm9ncmFtKCdoaWxsc2hhZGVQcmVwYXJlJykuZHJhdyhjb250ZXh0LCBnbC5UUklBTkdMRVMsXG4gICAgICAgICAgICBkZXB0aE1vZGUsIHN0ZW5jaWxNb2RlLCBjb2xvck1vZGUsIEN1bGxGYWNlTW9kZS5kaXNhYmxlZCxcbiAgICAgICAgICAgIGhpbGxzaGFkZVVuaWZvcm1QcmVwYXJlVmFsdWVzKHRpbGUudGlsZUlELCBkZW0sIHNvdXJjZU1heFpvb20pLFxuICAgICAgICAgICAgbGF5ZXIuaWQsIHBhaW50ZXIucmFzdGVyQm91bmRzQnVmZmVyLFxuICAgICAgICAgICAgcGFpbnRlci5xdWFkVHJpYW5nbGVJbmRleEJ1ZmZlciwgcGFpbnRlci5yYXN0ZXJCb3VuZHNTZWdtZW50cyk7XG5cbiAgICAgICAgdGlsZS5uZWVkc0hpbGxzaGFkZVByZXBhcmUgPSBmYWxzZTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge2NsYW1wfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuXG5pbXBvcnQgSW1hZ2VTb3VyY2UgZnJvbSAnLi4vc291cmNlL2ltYWdlX3NvdXJjZSc7XG5pbXBvcnQgYnJvd3NlciBmcm9tICcuLi91dGlsL2Jyb3dzZXInO1xuaW1wb3J0IFN0ZW5jaWxNb2RlIGZyb20gJy4uL2dsL3N0ZW5jaWxfbW9kZSc7XG5pbXBvcnQgRGVwdGhNb2RlIGZyb20gJy4uL2dsL2RlcHRoX21vZGUnO1xuaW1wb3J0IEN1bGxGYWNlTW9kZSBmcm9tICcuLi9nbC9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQge3Jhc3RlclVuaWZvcm1WYWx1ZXN9IGZyb20gJy4vcHJvZ3JhbS9yYXN0ZXJfcHJvZ3JhbSc7XG5cbmltcG9ydCB0eXBlIFBhaW50ZXIgZnJvbSAnLi9wYWludGVyJztcbmltcG9ydCB0eXBlIFNvdXJjZUNhY2hlIGZyb20gJy4uL3NvdXJjZS9zb3VyY2VfY2FjaGUnO1xuaW1wb3J0IHR5cGUgUmFzdGVyU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllci9yYXN0ZXJfc3R5bGVfbGF5ZXInO1xuaW1wb3J0IHR5cGUge092ZXJzY2FsZWRUaWxlSUR9IGZyb20gJy4uL3NvdXJjZS90aWxlX2lkJztcblxuZXhwb3J0IGRlZmF1bHQgZHJhd1Jhc3RlcjtcblxuZnVuY3Rpb24gZHJhd1Jhc3RlcihwYWludGVyOiBQYWludGVyLCBzb3VyY2VDYWNoZTogU291cmNlQ2FjaGUsIGxheWVyOiBSYXN0ZXJTdHlsZUxheWVyLCB0aWxlSURzOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPikge1xuICAgIGlmIChwYWludGVyLnJlbmRlclBhc3MgIT09ICd0cmFuc2x1Y2VudCcpIHJldHVybjtcbiAgICBpZiAobGF5ZXIucGFpbnQuZ2V0KCdyYXN0ZXItb3BhY2l0eScpID09PSAwKSByZXR1cm47XG4gICAgaWYgKCF0aWxlSURzLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG4gICAgY29uc3Qgc291cmNlID0gc291cmNlQ2FjaGUuZ2V0U291cmNlKCk7XG4gICAgY29uc3QgcHJvZ3JhbSA9IHBhaW50ZXIudXNlUHJvZ3JhbSgncmFzdGVyJyk7XG5cbiAgICBjb25zdCBjb2xvck1vZGUgPSBwYWludGVyLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKTtcblxuICAgIGNvbnN0IFtzdGVuY2lsTW9kZXMsIGNvb3Jkc10gPSBzb3VyY2UgaW5zdGFuY2VvZiBJbWFnZVNvdXJjZSA/IFt7fSwgdGlsZUlEc10gOlxuICAgICAgICBwYWludGVyLnN0ZW5jaWxDb25maWdGb3JPdmVybGFwKHRpbGVJRHMpO1xuXG4gICAgY29uc3QgbWluVGlsZVogPSBjb29yZHNbY29vcmRzLmxlbmd0aCAtIDFdLm92ZXJzY2FsZWRaO1xuXG4gICAgY29uc3QgYWxpZ24gPSAhcGFpbnRlci5vcHRpb25zLm1vdmluZztcbiAgICBmb3IgKGNvbnN0IGNvb3JkIG9mIGNvb3Jkcykge1xuICAgICAgICAvLyBTZXQgdGhlIGxvd2VyIHpvb20gbGV2ZWwgdG8gc3VibGF5ZXIgMCwgYW5kIGhpZ2hlciB6b29tIGxldmVscyB0byBoaWdoZXIgc3VibGF5ZXJzXG4gICAgICAgIC8vIFVzZSBnbC5MRVNTIHRvIHByZXZlbnQgZG91YmxlIGRyYXdpbmcgaW4gYXJlYXMgd2hlcmUgdGlsZXMgb3ZlcmxhcC5cbiAgICAgICAgY29uc3QgZGVwdGhNb2RlID0gcGFpbnRlci5kZXB0aE1vZGVGb3JTdWJsYXllcihjb29yZC5vdmVyc2NhbGVkWiAtIG1pblRpbGVaLFxuICAgICAgICAgICAgbGF5ZXIucGFpbnQuZ2V0KCdyYXN0ZXItb3BhY2l0eScpID09PSAxID8gRGVwdGhNb2RlLlJlYWRXcml0ZSA6IERlcHRoTW9kZS5SZWFkT25seSwgZ2wuTEVTUyk7XG5cbiAgICAgICAgY29uc3QgdGlsZSA9IHNvdXJjZUNhY2hlLmdldFRpbGUoY29vcmQpO1xuICAgICAgICBjb25zdCBwb3NNYXRyaXggPSBwYWludGVyLnRyYW5zZm9ybS5jYWxjdWxhdGVQb3NNYXRyaXgoY29vcmQudG9VbndyYXBwZWQoKSwgYWxpZ24pO1xuXG4gICAgICAgIHRpbGUucmVnaXN0ZXJGYWRlRHVyYXRpb24obGF5ZXIucGFpbnQuZ2V0KCdyYXN0ZXItZmFkZS1kdXJhdGlvbicpKTtcblxuICAgICAgICBjb25zdCBwYXJlbnRUaWxlID0gc291cmNlQ2FjaGUuZmluZExvYWRlZFBhcmVudChjb29yZCwgMCksXG4gICAgICAgICAgICBmYWRlID0gZ2V0RmFkZVZhbHVlcyh0aWxlLCBwYXJlbnRUaWxlLCBzb3VyY2VDYWNoZSwgbGF5ZXIsIHBhaW50ZXIudHJhbnNmb3JtKTtcblxuICAgICAgICBsZXQgcGFyZW50U2NhbGVCeSwgcGFyZW50VEw7XG5cbiAgICAgICAgY29uc3QgdGV4dHVyZUZpbHRlciA9IGxheWVyLnBhaW50LmdldCgncmFzdGVyLXJlc2FtcGxpbmcnKSA9PT0gJ25lYXJlc3QnID8gIGdsLk5FQVJFU1QgOiBnbC5MSU5FQVI7XG5cbiAgICAgICAgY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldChnbC5URVhUVVJFMCk7XG4gICAgICAgIHRpbGUudGV4dHVyZS5iaW5kKHRleHR1cmVGaWx0ZXIsIGdsLkNMQU1QX1RPX0VER0UsIGdsLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCk7XG5cbiAgICAgICAgY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldChnbC5URVhUVVJFMSk7XG5cbiAgICAgICAgaWYgKHBhcmVudFRpbGUpIHtcbiAgICAgICAgICAgIHBhcmVudFRpbGUudGV4dHVyZS5iaW5kKHRleHR1cmVGaWx0ZXIsIGdsLkNMQU1QX1RPX0VER0UsIGdsLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCk7XG4gICAgICAgICAgICBwYXJlbnRTY2FsZUJ5ID0gTWF0aC5wb3coMiwgcGFyZW50VGlsZS50aWxlSUQub3ZlcnNjYWxlZFogLSB0aWxlLnRpbGVJRC5vdmVyc2NhbGVkWik7XG4gICAgICAgICAgICBwYXJlbnRUTCA9IFt0aWxlLnRpbGVJRC5jYW5vbmljYWwueCAqIHBhcmVudFNjYWxlQnkgJSAxLCB0aWxlLnRpbGVJRC5jYW5vbmljYWwueSAqIHBhcmVudFNjYWxlQnkgJSAxXTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGlsZS50ZXh0dXJlLmJpbmQodGV4dHVyZUZpbHRlciwgZ2wuQ0xBTVBfVE9fRURHRSwgZ2wuTElORUFSX01JUE1BUF9ORUFSRVNUKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVuaWZvcm1WYWx1ZXMgPSByYXN0ZXJVbmlmb3JtVmFsdWVzKHBvc01hdHJpeCwgcGFyZW50VEwgfHwgWzAsIDBdLCBwYXJlbnRTY2FsZUJ5IHx8IDEsIGZhZGUsIGxheWVyKTtcblxuICAgICAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgSW1hZ2VTb3VyY2UpIHtcbiAgICAgICAgICAgIHByb2dyYW0uZHJhdyhjb250ZXh0LCBnbC5UUklBTkdMRVMsIGRlcHRoTW9kZSwgU3RlbmNpbE1vZGUuZGlzYWJsZWQsIGNvbG9yTW9kZSwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLFxuICAgICAgICAgICAgICAgIHVuaWZvcm1WYWx1ZXMsIGxheWVyLmlkLCBzb3VyY2UuYm91bmRzQnVmZmVyLFxuICAgICAgICAgICAgICAgIHBhaW50ZXIucXVhZFRyaWFuZ2xlSW5kZXhCdWZmZXIsIHNvdXJjZS5ib3VuZHNTZWdtZW50cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm9ncmFtLmRyYXcoY29udGV4dCwgZ2wuVFJJQU5HTEVTLCBkZXB0aE1vZGUsIHN0ZW5jaWxNb2Rlc1tjb29yZC5vdmVyc2NhbGVkWl0sIGNvbG9yTW9kZSwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLFxuICAgICAgICAgICAgICAgIHVuaWZvcm1WYWx1ZXMsIGxheWVyLmlkLCBwYWludGVyLnJhc3RlckJvdW5kc0J1ZmZlcixcbiAgICAgICAgICAgICAgICBwYWludGVyLnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLCBwYWludGVyLnJhc3RlckJvdW5kc1NlZ21lbnRzKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0RmFkZVZhbHVlcyh0aWxlLCBwYXJlbnRUaWxlLCBzb3VyY2VDYWNoZSwgbGF5ZXIsIHRyYW5zZm9ybSkge1xuICAgIGNvbnN0IGZhZGVEdXJhdGlvbiA9IGxheWVyLnBhaW50LmdldCgncmFzdGVyLWZhZGUtZHVyYXRpb24nKTtcblxuICAgIGlmIChmYWRlRHVyYXRpb24gPiAwKSB7XG4gICAgICAgIGNvbnN0IG5vdyA9IGJyb3dzZXIubm93KCk7XG4gICAgICAgIGNvbnN0IHNpbmNlVGlsZSA9IChub3cgLSB0aWxlLnRpbWVBZGRlZCkgLyBmYWRlRHVyYXRpb247XG4gICAgICAgIGNvbnN0IHNpbmNlUGFyZW50ID0gcGFyZW50VGlsZSA/IChub3cgLSBwYXJlbnRUaWxlLnRpbWVBZGRlZCkgLyBmYWRlRHVyYXRpb24gOiAtMTtcblxuICAgICAgICBjb25zdCBzb3VyY2UgPSBzb3VyY2VDYWNoZS5nZXRTb3VyY2UoKTtcbiAgICAgICAgY29uc3QgaWRlYWxaID0gdHJhbnNmb3JtLmNvdmVyaW5nWm9vbUxldmVsKHtcbiAgICAgICAgICAgIHRpbGVTaXplOiBzb3VyY2UudGlsZVNpemUsXG4gICAgICAgICAgICByb3VuZFpvb206IHNvdXJjZS5yb3VuZFpvb21cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gaWYgbm8gcGFyZW50IG9yIHBhcmVudCBpcyBvbGRlciwgZmFkZSBpbjsgaWYgcGFyZW50IGlzIHlvdW5nZXIsIGZhZGUgb3V0XG4gICAgICAgIGNvbnN0IGZhZGVJbiA9ICFwYXJlbnRUaWxlIHx8IE1hdGguYWJzKHBhcmVudFRpbGUudGlsZUlELm92ZXJzY2FsZWRaIC0gaWRlYWxaKSA+IE1hdGguYWJzKHRpbGUudGlsZUlELm92ZXJzY2FsZWRaIC0gaWRlYWxaKTtcblxuICAgICAgICBjb25zdCBjaGlsZE9wYWNpdHkgPSAoZmFkZUluICYmIHRpbGUucmVmcmVzaGVkVXBvbkV4cGlyYXRpb24pID8gMSA6IGNsYW1wKGZhZGVJbiA/IHNpbmNlVGlsZSA6IDEgLSBzaW5jZVBhcmVudCwgMCwgMSk7XG5cbiAgICAgICAgLy8gd2UgZG9uJ3QgY3Jvc3NmYWRlIHRpbGVzIHRoYXQgd2VyZSBqdXN0IHJlZnJlc2hlZCB1cG9uIGV4cGlyaW5nOlxuICAgICAgICAvLyBvbmNlIHRoZXkncmUgb2xkIGVub3VnaCB0byBwYXNzIHRoZSBjcm9zc2ZhZGluZyB0aHJlc2hvbGRcbiAgICAgICAgLy8gKGZhZGVEdXJhdGlvbiksIHVuc2V0IHRoZSBgcmVmcmVzaGVkVXBvbkV4cGlyYXRpb25gIGZsYWcgc28gd2UgZG9uJ3RcbiAgICAgICAgLy8gaW5jb3JyZWN0bHkgZmFpbCB0byBjcm9zc2ZhZGUgdGhlbSB3aGVuIHpvb21pbmdcbiAgICAgICAgaWYgKHRpbGUucmVmcmVzaGVkVXBvbkV4cGlyYXRpb24gJiYgc2luY2VUaWxlID49IDEpIHRpbGUucmVmcmVzaGVkVXBvbkV4cGlyYXRpb24gPSBmYWxzZTtcblxuICAgICAgICBpZiAocGFyZW50VGlsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAxLFxuICAgICAgICAgICAgICAgIG1peDogMSAtIGNoaWxkT3BhY2l0eVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgb3BhY2l0eTogY2hpbGRPcGFjaXR5LFxuICAgICAgICAgICAgICAgIG1peDogMFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBvcGFjaXR5OiAxLFxuICAgICAgICAgICAgbWl4OiAwXG4gICAgICAgIH07XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFN0ZW5jaWxNb2RlIGZyb20gJy4uL2dsL3N0ZW5jaWxfbW9kZSc7XG5pbXBvcnQgRGVwdGhNb2RlIGZyb20gJy4uL2dsL2RlcHRoX21vZGUnO1xuaW1wb3J0IEN1bGxGYWNlTW9kZSBmcm9tICcuLi9nbC9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQge1xuICAgIGJhY2tncm91bmRVbmlmb3JtVmFsdWVzLFxuICAgIGJhY2tncm91bmRQYXR0ZXJuVW5pZm9ybVZhbHVlc1xufSBmcm9tICcuL3Byb2dyYW0vYmFja2dyb3VuZF9wcm9ncmFtJztcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUgU291cmNlQ2FjaGUgZnJvbSAnLi4vc291cmNlL3NvdXJjZV9jYWNoZSc7XG5pbXBvcnQgdHlwZSBCYWNrZ3JvdW5kU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllci9iYWNrZ3JvdW5kX3N0eWxlX2xheWVyJztcblxuZXhwb3J0IGRlZmF1bHQgZHJhd0JhY2tncm91bmQ7XG5cbmZ1bmN0aW9uIGRyYXdCYWNrZ3JvdW5kKHBhaW50ZXI6IFBhaW50ZXIsIHNvdXJjZUNhY2hlOiBTb3VyY2VDYWNoZSwgbGF5ZXI6IEJhY2tncm91bmRTdHlsZUxheWVyKSB7XG4gICAgY29uc3QgY29sb3IgPSBsYXllci5wYWludC5nZXQoJ2JhY2tncm91bmQtY29sb3InKTtcbiAgICBjb25zdCBvcGFjaXR5ID0gbGF5ZXIucGFpbnQuZ2V0KCdiYWNrZ3JvdW5kLW9wYWNpdHknKTtcblxuICAgIGlmIChvcGFjaXR5ID09PSAwKSByZXR1cm47XG5cbiAgICBjb25zdCBjb250ZXh0ID0gcGFpbnRlci5jb250ZXh0O1xuICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBwYWludGVyLnRyYW5zZm9ybTtcbiAgICBjb25zdCB0aWxlU2l6ZSA9IHRyYW5zZm9ybS50aWxlU2l6ZTtcbiAgICBjb25zdCBpbWFnZSA9IGxheWVyLnBhaW50LmdldCgnYmFja2dyb3VuZC1wYXR0ZXJuJyk7XG4gICAgaWYgKHBhaW50ZXIuaXNQYXR0ZXJuTWlzc2luZyhpbWFnZSkpIHJldHVybjtcblxuICAgIGNvbnN0IHBhc3MgPSAoIWltYWdlICYmIGNvbG9yLmEgPT09IDEgJiYgb3BhY2l0eSA9PT0gMSAmJiBwYWludGVyLm9wYXF1ZVBhc3NFbmFibGVkRm9yTGF5ZXIoKSkgPyAnb3BhcXVlJyA6ICd0cmFuc2x1Y2VudCc7XG4gICAgaWYgKHBhaW50ZXIucmVuZGVyUGFzcyAhPT0gcGFzcykgcmV0dXJuO1xuXG4gICAgY29uc3Qgc3RlbmNpbE1vZGUgPSBTdGVuY2lsTW9kZS5kaXNhYmxlZDtcbiAgICBjb25zdCBkZXB0aE1vZGUgPSBwYWludGVyLmRlcHRoTW9kZUZvclN1YmxheWVyKDAsIHBhc3MgPT09ICdvcGFxdWUnID8gRGVwdGhNb2RlLlJlYWRXcml0ZSA6IERlcHRoTW9kZS5SZWFkT25seSk7XG4gICAgY29uc3QgY29sb3JNb2RlID0gcGFpbnRlci5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCk7XG5cbiAgICBjb25zdCBwcm9ncmFtID0gcGFpbnRlci51c2VQcm9ncmFtKGltYWdlID8gJ2JhY2tncm91bmRQYXR0ZXJuJyA6ICdiYWNrZ3JvdW5kJyk7XG5cbiAgICBjb25zdCB0aWxlSURzID0gdHJhbnNmb3JtLmNvdmVyaW5nVGlsZXMoe3RpbGVTaXplfSk7XG5cbiAgICBpZiAoaW1hZ2UpIHtcbiAgICAgICAgY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldChnbC5URVhUVVJFMCk7XG4gICAgICAgIHBhaW50ZXIuaW1hZ2VNYW5hZ2VyLmJpbmQocGFpbnRlci5jb250ZXh0KTtcbiAgICB9XG5cbiAgICBjb25zdCBjcm9zc2ZhZGUgPSBsYXllci5nZXRDcm9zc2ZhZGVQYXJhbWV0ZXJzKCk7XG4gICAgZm9yIChjb25zdCB0aWxlSUQgb2YgdGlsZUlEcykge1xuICAgICAgICBjb25zdCBtYXRyaXggPSBwYWludGVyLnRyYW5zZm9ybS5jYWxjdWxhdGVQb3NNYXRyaXgodGlsZUlELnRvVW53cmFwcGVkKCkpO1xuICAgICAgICBjb25zdCB1bmlmb3JtVmFsdWVzID0gaW1hZ2UgP1xuICAgICAgICAgICAgYmFja2dyb3VuZFBhdHRlcm5Vbmlmb3JtVmFsdWVzKG1hdHJpeCwgb3BhY2l0eSwgcGFpbnRlciwgaW1hZ2UsIHt0aWxlSUQsIHRpbGVTaXplfSwgY3Jvc3NmYWRlKSA6XG4gICAgICAgICAgICBiYWNrZ3JvdW5kVW5pZm9ybVZhbHVlcyhtYXRyaXgsIG9wYWNpdHksIGNvbG9yKTtcblxuICAgICAgICBwcm9ncmFtLmRyYXcoY29udGV4dCwgZ2wuVFJJQU5HTEVTLCBkZXB0aE1vZGUsIHN0ZW5jaWxNb2RlLCBjb2xvck1vZGUsIEN1bGxGYWNlTW9kZS5kaXNhYmxlZCxcbiAgICAgICAgICAgIHVuaWZvcm1WYWx1ZXMsIGxheWVyLmlkLCBwYWludGVyLnRpbGVFeHRlbnRCdWZmZXIsXG4gICAgICAgICAgICBwYWludGVyLnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLCBwYWludGVyLnRpbGVFeHRlbnRTZWdtZW50cyk7XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IERlcHRoTW9kZSBmcm9tICcuLi9nbC9kZXB0aF9tb2RlJztcbmltcG9ydCBTdGVuY2lsTW9kZSBmcm9tICcuLi9nbC9zdGVuY2lsX21vZGUnO1xuaW1wb3J0IEN1bGxGYWNlTW9kZSBmcm9tICcuLi9nbC9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQge2RlYnVnVW5pZm9ybVZhbHVlc30gZnJvbSAnLi9wcm9ncmFtL2RlYnVnX3Byb2dyYW0nO1xuaW1wb3J0IENvbG9yIGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9jb2xvcic7XG5pbXBvcnQgQ29sb3JNb2RlIGZyb20gJy4uL2dsL2NvbG9yX21vZGUnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vdXRpbC9icm93c2VyJztcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUgU291cmNlQ2FjaGUgZnJvbSAnLi4vc291cmNlL3NvdXJjZV9jYWNoZSc7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi4vc291cmNlL3RpbGVfaWQnO1xuXG5leHBvcnQgZGVmYXVsdCBkcmF3RGVidWc7XG5cbmNvbnN0IHRvcENvbG9yID0gbmV3IENvbG9yKDEsIDAsIDAsIDEpO1xuY29uc3QgYnRtQ29sb3IgPSBuZXcgQ29sb3IoMCwgMSwgMCwgMSk7XG5jb25zdCBsZWZ0Q29sb3IgPSBuZXcgQ29sb3IoMCwgMCwgMSwgMSk7XG5jb25zdCByaWdodENvbG9yID0gbmV3IENvbG9yKDEsIDAsIDEsIDEpO1xuY29uc3QgY2VudGVyQ29sb3IgPSBuZXcgQ29sb3IoMCwgMSwgMSwgMSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBkcmF3RGVidWdQYWRkaW5nKHBhaW50ZXI6IFBhaW50ZXIpIHtcbiAgICBjb25zdCBwYWRkaW5nID0gcGFpbnRlci50cmFuc2Zvcm0ucGFkZGluZztcbiAgICBjb25zdCBsaW5lV2lkdGggPSAzO1xuICAgIC8vIFRvcFxuICAgIGRyYXdIb3Jpem9udGFsTGluZShwYWludGVyLCBwYWludGVyLnRyYW5zZm9ybS5oZWlnaHQgLSAocGFkZGluZy50b3AgfHwgMCksIGxpbmVXaWR0aCwgdG9wQ29sb3IpO1xuICAgIC8vIEJvdHRvbVxuICAgIGRyYXdIb3Jpem9udGFsTGluZShwYWludGVyLCBwYWRkaW5nLmJvdHRvbSB8fCAwLCBsaW5lV2lkdGgsIGJ0bUNvbG9yKTtcbiAgICAvLyBMZWZ0XG4gICAgZHJhd1ZlcnRpY2FsTGluZShwYWludGVyLCBwYWRkaW5nLmxlZnQgfHwgMCwgbGluZVdpZHRoLCBsZWZ0Q29sb3IpO1xuICAgIC8vIFJpZ2h0XG4gICAgZHJhd1ZlcnRpY2FsTGluZShwYWludGVyLCBwYWludGVyLnRyYW5zZm9ybS53aWR0aCAtIChwYWRkaW5nLnJpZ2h0IHx8IDApLCBsaW5lV2lkdGgsIHJpZ2h0Q29sb3IpO1xuICAgIC8vIENlbnRlclxuICAgIGNvbnN0IGNlbnRlciA9IHBhaW50ZXIudHJhbnNmb3JtLmNlbnRlclBvaW50O1xuICAgIGRyYXdDcm9zc2hhaXIocGFpbnRlciwgY2VudGVyLngsIHBhaW50ZXIudHJhbnNmb3JtLmhlaWdodCAtIGNlbnRlci55LCBjZW50ZXJDb2xvcik7XG59XG5cbmZ1bmN0aW9uIGRyYXdDcm9zc2hhaXIocGFpbnRlcjogUGFpbnRlciwgeDogbnVtYmVyLCB5OiBudW1iZXIsIGNvbG9yOiBDb2xvcikge1xuICAgIGNvbnN0IHNpemUgPSAyMDtcbiAgICBjb25zdCBsaW5lV2lkdGggPSAyO1xuICAgIC8vVmVydGljYWwgbGluZVxuICAgIGRyYXdEZWJ1Z1NTUmVjdChwYWludGVyLCB4IC0gbGluZVdpZHRoIC8gMiwgeSAtIHNpemUgLyAyLCBsaW5lV2lkdGgsIHNpemUsIGNvbG9yKTtcbiAgICAvL0hvcml6b250YWwgbGluZVxuICAgIGRyYXdEZWJ1Z1NTUmVjdChwYWludGVyLCB4IC0gc2l6ZSAvIDIsIHkgLSBsaW5lV2lkdGggLyAyLCBzaXplLCBsaW5lV2lkdGgsIGNvbG9yKTtcbn1cblxuZnVuY3Rpb24gZHJhd0hvcml6b250YWxMaW5lKHBhaW50ZXI6IFBhaW50ZXIsIHk6IG51bWJlciwgbGluZVdpZHRoOiBudW1iZXIsIGNvbG9yOiBDb2xvcikge1xuICAgIGRyYXdEZWJ1Z1NTUmVjdChwYWludGVyLCAwLCB5ICArIGxpbmVXaWR0aCAvIDIsIHBhaW50ZXIudHJhbnNmb3JtLndpZHRoLCAgbGluZVdpZHRoLCBjb2xvcik7XG59XG5cbmZ1bmN0aW9uIGRyYXdWZXJ0aWNhbExpbmUocGFpbnRlcjogUGFpbnRlciwgeDogbnVtYmVyLCBsaW5lV2lkdGg6IG51bWJlciwgY29sb3I6IENvbG9yKSB7XG4gICAgZHJhd0RlYnVnU1NSZWN0KHBhaW50ZXIsIHggLSBsaW5lV2lkdGggLyAyLCAwLCBsaW5lV2lkdGgsICBwYWludGVyLnRyYW5zZm9ybS5oZWlnaHQsIGNvbG9yKTtcbn1cblxuZnVuY3Rpb24gZHJhd0RlYnVnU1NSZWN0KHBhaW50ZXI6IFBhaW50ZXIsIHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgY29sb3I6IENvbG9yKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG5cbiAgICBnbC5lbmFibGUoZ2wuU0NJU1NPUl9URVNUKTtcbiAgICBnbC5zY2lzc29yKHggKiBicm93c2VyLmRldmljZVBpeGVsUmF0aW8sIHkgKiBicm93c2VyLmRldmljZVBpeGVsUmF0aW8sIHdpZHRoICogYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLCBoZWlnaHQgKiBicm93c2VyLmRldmljZVBpeGVsUmF0aW8pO1xuICAgIGNvbnRleHQuY2xlYXIoe2NvbG9yfSk7XG4gICAgZ2wuZGlzYWJsZShnbC5TQ0lTU09SX1RFU1QpO1xufVxuXG5mdW5jdGlvbiBkcmF3RGVidWcocGFpbnRlcjogUGFpbnRlciwgc291cmNlQ2FjaGU6IFNvdXJjZUNhY2hlLCBjb29yZHM6IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+KSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29yZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZHJhd0RlYnVnVGlsZShwYWludGVyLCBzb3VyY2VDYWNoZSwgY29vcmRzW2ldKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYXdEZWJ1Z1RpbGUocGFpbnRlciwgc291cmNlQ2FjaGUsIGNvb3JkOiBPdmVyc2NhbGVkVGlsZUlEKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG5cbiAgICBjb25zdCBwb3NNYXRyaXggPSBjb29yZC5wb3NNYXRyaXg7XG4gICAgY29uc3QgcHJvZ3JhbSA9IHBhaW50ZXIudXNlUHJvZ3JhbSgnZGVidWcnKTtcblxuICAgIGNvbnN0IGRlcHRoTW9kZSA9IERlcHRoTW9kZS5kaXNhYmxlZDtcbiAgICBjb25zdCBzdGVuY2lsTW9kZSA9IFN0ZW5jaWxNb2RlLmRpc2FibGVkO1xuICAgIGNvbnN0IGNvbG9yTW9kZSA9IHBhaW50ZXIuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpO1xuICAgIGNvbnN0IGlkID0gJyRkZWJ1Zyc7XG5cbiAgICBjb250ZXh0LmFjdGl2ZVRleHR1cmUuc2V0KGdsLlRFWFRVUkUwKTtcbiAgICAvLyBCaW5kIHRoZSBlbXB0eSB0ZXh0dXJlIGZvciBkcmF3aW5nIG91dGxpbmVzXG4gICAgcGFpbnRlci5lbXB0eVRleHR1cmUuYmluZChnbC5MSU5FQVIsIGdsLkNMQU1QX1RPX0VER0UpO1xuXG4gICAgcHJvZ3JhbS5kcmF3KGNvbnRleHQsIGdsLkxJTkVfU1RSSVAsIGRlcHRoTW9kZSwgc3RlbmNpbE1vZGUsIGNvbG9yTW9kZSwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLFxuICAgICAgICBkZWJ1Z1VuaWZvcm1WYWx1ZXMocG9zTWF0cml4LCBDb2xvci5yZWQpLCBpZCxcbiAgICAgICAgcGFpbnRlci5kZWJ1Z0J1ZmZlciwgcGFpbnRlci50aWxlQm9yZGVySW5kZXhCdWZmZXIsIHBhaW50ZXIuZGVidWdTZWdtZW50cyk7XG5cbiAgICBjb25zdCB0aWxlUmF3RGF0YSA9IHNvdXJjZUNhY2hlLmdldFRpbGVCeUlEKGNvb3JkLmtleSkubGF0ZXN0UmF3VGlsZURhdGE7XG4gICAgY29uc3QgdGlsZUJ5dGVMZW5ndGggPSAodGlsZVJhd0RhdGEgJiYgdGlsZVJhd0RhdGEuYnl0ZUxlbmd0aCkgfHwgMDtcbiAgICBjb25zdCB0aWxlU2l6ZUtiID0gTWF0aC5mbG9vcih0aWxlQnl0ZUxlbmd0aCAvIDEwMjQpO1xuICAgIGNvbnN0IHRpbGVTaXplID0gc291cmNlQ2FjaGUuZ2V0VGlsZShjb29yZCkudGlsZVNpemU7XG4gICAgY29uc3Qgc2NhbGVSYXRpbyA9ICg1MTIgLyBNYXRoLm1pbih0aWxlU2l6ZSwgNTEyKSAqIChjb29yZC5vdmVyc2NhbGVkWiAvIHBhaW50ZXIudHJhbnNmb3JtLnpvb20pKSAqIDAuNTtcbiAgICBsZXQgdGlsZUlkVGV4dCA9IGNvb3JkLmNhbm9uaWNhbC50b1N0cmluZygpO1xuICAgIGlmIChjb29yZC5vdmVyc2NhbGVkWiAhPT0gY29vcmQuY2Fub25pY2FsLnopIHtcbiAgICAgICAgdGlsZUlkVGV4dCArPSBgID0+ICR7Y29vcmQub3ZlcnNjYWxlZFp9YDtcbiAgICB9XG4gICAgY29uc3QgdGlsZUxhYmVsID0gYCR7dGlsZUlkVGV4dH0gJHt0aWxlU2l6ZUtifWtiYDtcbiAgICBkcmF3VGV4dFRvT3ZlcmxheShwYWludGVyLCB0aWxlTGFiZWwpO1xuXG4gICAgcHJvZ3JhbS5kcmF3KGNvbnRleHQsIGdsLlRSSUFOR0xFUywgZGVwdGhNb2RlLCBzdGVuY2lsTW9kZSwgQ29sb3JNb2RlLmFscGhhQmxlbmRlZCwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLFxuICAgICAgICBkZWJ1Z1VuaWZvcm1WYWx1ZXMocG9zTWF0cml4LCBDb2xvci50cmFuc3BhcmVudCwgc2NhbGVSYXRpbyksIGlkLFxuICAgICAgICBwYWludGVyLmRlYnVnQnVmZmVyLCBwYWludGVyLnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLCBwYWludGVyLmRlYnVnU2VnbWVudHMpO1xufVxuXG5mdW5jdGlvbiBkcmF3VGV4dFRvT3ZlcmxheShwYWludGVyOiBQYWludGVyLCB0ZXh0OiBzdHJpbmcpIHtcbiAgICBwYWludGVyLmluaXREZWJ1Z092ZXJsYXlDYW52YXMoKTtcbiAgICBjb25zdCBjYW52YXMgPSBwYWludGVyLmRlYnVnT3ZlcmxheUNhbnZhcztcbiAgICBjb25zdCBnbCA9IHBhaW50ZXIuY29udGV4dC5nbDtcbiAgICBjb25zdCBjdHgyZCA9IHBhaW50ZXIuZGVidWdPdmVybGF5Q2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgY3R4MmQuY2xlYXJSZWN0KDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG5cbiAgICBjdHgyZC5zaGFkb3dDb2xvciA9ICd3aGl0ZSc7XG4gICAgY3R4MmQuc2hhZG93Qmx1ciA9IDI7XG4gICAgY3R4MmQubGluZVdpZHRoID0gMS41O1xuICAgIGN0eDJkLnN0cm9rZVN0eWxlID0gJ3doaXRlJztcbiAgICBjdHgyZC50ZXh0QmFzZWxpbmUgPSAndG9wJztcbiAgICBjdHgyZC5mb250ID0gYGJvbGQgJHszNn1weCBPcGVuIFNhbnMsIHNhbnMtc2VyaWZgO1xuICAgIGN0eDJkLmZpbGxUZXh0KHRleHQsIDUsIDUpO1xuICAgIGN0eDJkLnN0cm9rZVRleHQodGV4dCwgNSwgNSk7XG5cbiAgICBwYWludGVyLmRlYnVnT3ZlcmxheVRleHR1cmUudXBkYXRlKGNhbnZhcyk7XG4gICAgcGFpbnRlci5kZWJ1Z092ZXJsYXlUZXh0dXJlLmJpbmQoZ2wuTElORUFSLCBnbC5DTEFNUF9UT19FREdFKTtcbn1cbiIsIi8vIEBmbG93XG5cbmV4cG9ydCBkZWZhdWx0IGRyYXdDdXN0b207XG5cbmltcG9ydCBEZXB0aE1vZGUgZnJvbSAnLi4vZ2wvZGVwdGhfbW9kZSc7XG5pbXBvcnQgU3RlbmNpbE1vZGUgZnJvbSAnLi4vZ2wvc3RlbmNpbF9tb2RlJztcblxuaW1wb3J0IHR5cGUgUGFpbnRlciBmcm9tICcuL3BhaW50ZXInO1xuaW1wb3J0IHR5cGUgU291cmNlQ2FjaGUgZnJvbSAnLi4vc291cmNlL3NvdXJjZV9jYWNoZSc7XG5pbXBvcnQgdHlwZSBDdXN0b21TdHlsZUxheWVyIGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyL2N1c3RvbV9zdHlsZV9sYXllcic7XG5cbmZ1bmN0aW9uIGRyYXdDdXN0b20ocGFpbnRlcjogUGFpbnRlciwgc291cmNlQ2FjaGU6IFNvdXJjZUNhY2hlLCBsYXllcjogQ3VzdG9tU3R5bGVMYXllcikge1xuXG4gICAgY29uc3QgY29udGV4dCA9IHBhaW50ZXIuY29udGV4dDtcbiAgICBjb25zdCBpbXBsZW1lbnRhdGlvbiA9IGxheWVyLmltcGxlbWVudGF0aW9uO1xuXG4gICAgaWYgKHBhaW50ZXIucmVuZGVyUGFzcyA9PT0gJ29mZnNjcmVlbicpIHtcblxuICAgICAgICBjb25zdCBwcmVyZW5kZXIgPSBpbXBsZW1lbnRhdGlvbi5wcmVyZW5kZXI7XG4gICAgICAgIGlmIChwcmVyZW5kZXIpIHtcbiAgICAgICAgICAgIHBhaW50ZXIuc2V0Q3VzdG9tTGF5ZXJEZWZhdWx0cygpO1xuICAgICAgICAgICAgY29udGV4dC5zZXRDb2xvck1vZGUocGFpbnRlci5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpO1xuXG4gICAgICAgICAgICBwcmVyZW5kZXIuY2FsbChpbXBsZW1lbnRhdGlvbiwgY29udGV4dC5nbCwgcGFpbnRlci50cmFuc2Zvcm0uY3VzdG9tTGF5ZXJNYXRyaXgoKSk7XG5cbiAgICAgICAgICAgIGNvbnRleHQuc2V0RGlydHkoKTtcbiAgICAgICAgICAgIHBhaW50ZXIuc2V0QmFzZVN0YXRlKCk7XG4gICAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAocGFpbnRlci5yZW5kZXJQYXNzID09PSAndHJhbnNsdWNlbnQnKSB7XG5cbiAgICAgICAgcGFpbnRlci5zZXRDdXN0b21MYXllckRlZmF1bHRzKCk7XG5cbiAgICAgICAgY29udGV4dC5zZXRDb2xvck1vZGUocGFpbnRlci5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCkpO1xuICAgICAgICBjb250ZXh0LnNldFN0ZW5jaWxNb2RlKFN0ZW5jaWxNb2RlLmRpc2FibGVkKTtcblxuICAgICAgICBjb25zdCBkZXB0aE1vZGUgPSBpbXBsZW1lbnRhdGlvbi5yZW5kZXJpbmdNb2RlID09PSAnM2QnID9cbiAgICAgICAgICAgIG5ldyBEZXB0aE1vZGUocGFpbnRlci5jb250ZXh0LmdsLkxFUVVBTCwgRGVwdGhNb2RlLlJlYWRXcml0ZSwgcGFpbnRlci5kZXB0aFJhbmdlRm9yM0QpIDpcbiAgICAgICAgICAgIHBhaW50ZXIuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMCwgRGVwdGhNb2RlLlJlYWRPbmx5KTtcblxuICAgICAgICBjb250ZXh0LnNldERlcHRoTW9kZShkZXB0aE1vZGUpO1xuXG4gICAgICAgIGltcGxlbWVudGF0aW9uLnJlbmRlcihjb250ZXh0LmdsLCBwYWludGVyLnRyYW5zZm9ybS5jdXN0b21MYXllck1hdHJpeCgpKTtcblxuICAgICAgICBjb250ZXh0LnNldERpcnR5KCk7XG4gICAgICAgIHBhaW50ZXIuc2V0QmFzZVN0YXRlKCk7XG4gICAgICAgIGNvbnRleHQuYmluZEZyYW1lYnVmZmVyLnNldChudWxsKTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgYnJvd3NlciBmcm9tICcuLi91dGlsL2Jyb3dzZXInO1xuaW1wb3J0IHdpbmRvdyBmcm9tICcuLi91dGlsL3dpbmRvdyc7XG5cbmltcG9ydCB7bWF0NH0gZnJvbSAnZ2wtbWF0cml4JztcbmltcG9ydCBTb3VyY2VDYWNoZSBmcm9tICcuLi9zb3VyY2Uvc291cmNlX2NhY2hlJztcbmltcG9ydCBFWFRFTlQgZnJvbSAnLi4vZGF0YS9leHRlbnQnO1xuaW1wb3J0IHBpeGVsc1RvVGlsZVVuaXRzIGZyb20gJy4uL3NvdXJjZS9waXhlbHNfdG9fdGlsZV91bml0cyc7XG5pbXBvcnQgU2VnbWVudFZlY3RvciBmcm9tICcuLi9kYXRhL3NlZ21lbnQnO1xuaW1wb3J0IHtSYXN0ZXJCb3VuZHNBcnJheSwgUG9zQXJyYXksIFRyaWFuZ2xlSW5kZXhBcnJheSwgTGluZVN0cmlwSW5kZXhBcnJheX0gZnJvbSAnLi4vZGF0YS9hcnJheV90eXBlcyc7XG5pbXBvcnQge3ZhbHVlc30gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCByYXN0ZXJCb3VuZHNBdHRyaWJ1dGVzIGZyb20gJy4uL2RhdGEvcmFzdGVyX2JvdW5kc19hdHRyaWJ1dGVzJztcbmltcG9ydCBwb3NBdHRyaWJ1dGVzIGZyb20gJy4uL2RhdGEvcG9zX2F0dHJpYnV0ZXMnO1xuaW1wb3J0IFByb2dyYW1Db25maWd1cmF0aW9uIGZyb20gJy4uL2RhdGEvcHJvZ3JhbV9jb25maWd1cmF0aW9uJztcbmltcG9ydCBDcm9zc1RpbGVTeW1ib2xJbmRleCBmcm9tICcuLi9zeW1ib2wvY3Jvc3NfdGlsZV9zeW1ib2xfaW5kZXgnO1xuaW1wb3J0ICogYXMgc2hhZGVycyBmcm9tICcuLi9zaGFkZXJzJztcbmltcG9ydCBQcm9ncmFtIGZyb20gJy4vcHJvZ3JhbSc7XG5pbXBvcnQge3Byb2dyYW1Vbmlmb3Jtc30gZnJvbSAnLi9wcm9ncmFtL3Byb2dyYW1fdW5pZm9ybXMnO1xuaW1wb3J0IENvbnRleHQgZnJvbSAnLi4vZ2wvY29udGV4dCc7XG5pbXBvcnQgRGVwdGhNb2RlIGZyb20gJy4uL2dsL2RlcHRoX21vZGUnO1xuaW1wb3J0IFN0ZW5jaWxNb2RlIGZyb20gJy4uL2dsL3N0ZW5jaWxfbW9kZSc7XG5pbXBvcnQgQ29sb3JNb2RlIGZyb20gJy4uL2dsL2NvbG9yX21vZGUnO1xuaW1wb3J0IEN1bGxGYWNlTW9kZSBmcm9tICcuLi9nbC9jdWxsX2ZhY2VfbW9kZSc7XG5pbXBvcnQgVGV4dHVyZSBmcm9tICcuL3RleHR1cmUnO1xuaW1wb3J0IHtjbGlwcGluZ01hc2tVbmlmb3JtVmFsdWVzfSBmcm9tICcuL3Byb2dyYW0vY2xpcHBpbmdfbWFza19wcm9ncmFtJztcbmltcG9ydCBDb2xvciBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvY29sb3InO1xuaW1wb3J0IHN5bWJvbCBmcm9tICcuL2RyYXdfc3ltYm9sJztcbmltcG9ydCBjaXJjbGUgZnJvbSAnLi9kcmF3X2NpcmNsZSc7XG5pbXBvcnQgaGVhdG1hcCBmcm9tICcuL2RyYXdfaGVhdG1hcCc7XG5pbXBvcnQgbGluZSBmcm9tICcuL2RyYXdfbGluZSc7XG5pbXBvcnQgZmlsbCBmcm9tICcuL2RyYXdfZmlsbCc7XG5pbXBvcnQgZmlsbEV4dHJ1c2lvbiBmcm9tICcuL2RyYXdfZmlsbF9leHRydXNpb24nO1xuaW1wb3J0IGhpbGxzaGFkZSBmcm9tICcuL2RyYXdfaGlsbHNoYWRlJztcbmltcG9ydCByYXN0ZXIgZnJvbSAnLi9kcmF3X3Jhc3Rlcic7XG5pbXBvcnQgYmFja2dyb3VuZCBmcm9tICcuL2RyYXdfYmFja2dyb3VuZCc7XG5pbXBvcnQgZGVidWcsIHtkcmF3RGVidWdQYWRkaW5nfSBmcm9tICcuL2RyYXdfZGVidWcnO1xuaW1wb3J0IGN1c3RvbSBmcm9tICcuL2RyYXdfY3VzdG9tJztcblxuY29uc3QgZHJhdyA9IHtcbiAgICBzeW1ib2wsXG4gICAgY2lyY2xlLFxuICAgIGhlYXRtYXAsXG4gICAgbGluZSxcbiAgICBmaWxsLFxuICAgICdmaWxsLWV4dHJ1c2lvbic6IGZpbGxFeHRydXNpb24sXG4gICAgaGlsbHNoYWRlLFxuICAgIHJhc3RlcixcbiAgICBiYWNrZ3JvdW5kLFxuICAgIGRlYnVnLFxuICAgIGN1c3RvbVxufTtcblxuaW1wb3J0IHR5cGUgVHJhbnNmb3JtIGZyb20gJy4uL2dlby90cmFuc2Zvcm0nO1xuaW1wb3J0IHR5cGUgVGlsZSBmcm9tICcuLi9zb3VyY2UvdGlsZSc7XG5pbXBvcnQgdHlwZSB7T3ZlcnNjYWxlZFRpbGVJRH0gZnJvbSAnLi4vc291cmNlL3RpbGVfaWQnO1xuaW1wb3J0IHR5cGUgU3R5bGUgZnJvbSAnLi4vc3R5bGUvc3R5bGUnO1xuaW1wb3J0IHR5cGUgU3R5bGVMYXllciBmcm9tICcuLi9zdHlsZS9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSB7Q3Jvc3NGYWRlZH0gZnJvbSAnLi4vc3R5bGUvcHJvcGVydGllcyc7XG5pbXBvcnQgdHlwZSBMaW5lQXRsYXMgZnJvbSAnLi9saW5lX2F0bGFzJztcbmltcG9ydCB0eXBlIEltYWdlTWFuYWdlciBmcm9tICcuL2ltYWdlX21hbmFnZXInO1xuaW1wb3J0IHR5cGUgR2x5cGhNYW5hZ2VyIGZyb20gJy4vZ2x5cGhfbWFuYWdlcic7XG5pbXBvcnQgdHlwZSBWZXJ0ZXhCdWZmZXIgZnJvbSAnLi4vZ2wvdmVydGV4X2J1ZmZlcic7XG5pbXBvcnQgdHlwZSBJbmRleEJ1ZmZlciBmcm9tICcuLi9nbC9pbmRleF9idWZmZXInO1xuaW1wb3J0IHR5cGUge0RlcHRoUmFuZ2VUeXBlLCBEZXB0aE1hc2tUeXBlLCBEZXB0aEZ1bmNUeXBlfSBmcm9tICcuLi9nbC90eXBlcyc7XG5pbXBvcnQgdHlwZSBSZXNvbHZlZEltYWdlIGZyb20gJy4uL3N0eWxlLXNwZWMvZXhwcmVzc2lvbi90eXBlcy9yZXNvbHZlZF9pbWFnZSc7XG5cbmV4cG9ydCB0eXBlIFJlbmRlclBhc3MgPSAnb2Zmc2NyZWVuJyB8ICdvcGFxdWUnIHwgJ3RyYW5zbHVjZW50JztcblxudHlwZSBQYWludGVyT3B0aW9ucyA9IHtcbiAgICBzaG93T3ZlcmRyYXdJbnNwZWN0b3I6IGJvb2xlYW4sXG4gICAgc2hvd1RpbGVCb3VuZGFyaWVzOiBib29sZWFuLFxuICAgIHNob3dQYWRkaW5nOiBib29sZWFuLFxuICAgIHJvdGF0aW5nOiBib29sZWFuLFxuICAgIHpvb21pbmc6IGJvb2xlYW4sXG4gICAgbW92aW5nOiBib29sZWFuLFxuICAgIGdwdVRpbWluZzogYm9vbGVhbixcbiAgICBmYWRlRHVyYXRpb246IG51bWJlclxufVxuXG4vKipcbiAqIEluaXRpYWxpemUgYSBuZXcgcGFpbnRlciBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtDYW52YXN9IGdsIGFuIGV4cGVyaW1lbnRhbC13ZWJnbCBkcmF3aW5nIGNvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFBhaW50ZXIge1xuICAgIGNvbnRleHQ6IENvbnRleHQ7XG4gICAgdHJhbnNmb3JtOiBUcmFuc2Zvcm07XG4gICAgX3RpbGVUZXh0dXJlczoge1tfOiBudW1iZXJdOiBBcnJheTxUZXh0dXJlPiB9O1xuICAgIG51bVN1YmxheWVyczogbnVtYmVyO1xuICAgIGRlcHRoRXBzaWxvbjogbnVtYmVyO1xuICAgIGVtcHR5UHJvZ3JhbUNvbmZpZ3VyYXRpb246IFByb2dyYW1Db25maWd1cmF0aW9uO1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgaGVpZ2h0OiBudW1iZXI7XG4gICAgdGlsZUV4dGVudEJ1ZmZlcjogVmVydGV4QnVmZmVyO1xuICAgIHRpbGVFeHRlbnRTZWdtZW50czogU2VnbWVudFZlY3RvcjtcbiAgICBkZWJ1Z0J1ZmZlcjogVmVydGV4QnVmZmVyO1xuICAgIGRlYnVnU2VnbWVudHM6IFNlZ21lbnRWZWN0b3I7XG4gICAgcmFzdGVyQm91bmRzQnVmZmVyOiBWZXJ0ZXhCdWZmZXI7XG4gICAgcmFzdGVyQm91bmRzU2VnbWVudHM6IFNlZ21lbnRWZWN0b3I7XG4gICAgdmlld3BvcnRCdWZmZXI6IFZlcnRleEJ1ZmZlcjtcbiAgICB2aWV3cG9ydFNlZ21lbnRzOiBTZWdtZW50VmVjdG9yO1xuICAgIHF1YWRUcmlhbmdsZUluZGV4QnVmZmVyOiBJbmRleEJ1ZmZlcjtcbiAgICB0aWxlQm9yZGVySW5kZXhCdWZmZXI6IEluZGV4QnVmZmVyO1xuICAgIF90aWxlQ2xpcHBpbmdNYXNrSURzOiB7W186IHN0cmluZ106IG51bWJlciB9O1xuICAgIHN0ZW5jaWxDbGVhck1vZGU6IFN0ZW5jaWxNb2RlO1xuICAgIHN0eWxlOiBTdHlsZTtcbiAgICBvcHRpb25zOiBQYWludGVyT3B0aW9ucztcbiAgICBsaW5lQXRsYXM6IExpbmVBdGxhcztcbiAgICBpbWFnZU1hbmFnZXI6IEltYWdlTWFuYWdlcjtcbiAgICBnbHlwaE1hbmFnZXI6IEdseXBoTWFuYWdlcjtcbiAgICBkZXB0aFJhbmdlRm9yM0Q6IERlcHRoUmFuZ2VUeXBlO1xuICAgIG9wYXF1ZVBhc3NDdXRvZmY6IG51bWJlcjtcbiAgICByZW5kZXJQYXNzOiBSZW5kZXJQYXNzO1xuICAgIGN1cnJlbnRMYXllcjogbnVtYmVyO1xuICAgIGN1cnJlbnRTdGVuY2lsU291cmNlOiA/c3RyaW5nO1xuICAgIG5leHRTdGVuY2lsSUQ6IG51bWJlcjtcbiAgICBpZDogc3RyaW5nO1xuICAgIF9zaG93T3ZlcmRyYXdJbnNwZWN0b3I6IGJvb2xlYW47XG4gICAgY2FjaGU6IHtbXzogc3RyaW5nXTogUHJvZ3JhbTwqPiB9O1xuICAgIGNyb3NzVGlsZVN5bWJvbEluZGV4OiBDcm9zc1RpbGVTeW1ib2xJbmRleDtcbiAgICBzeW1ib2xGYWRlQ2hhbmdlOiBudW1iZXI7XG4gICAgZ3B1VGltZXJzOiB7W186IHN0cmluZ106IGFueSB9O1xuICAgIGVtcHR5VGV4dHVyZTogVGV4dHVyZTtcbiAgICBkZWJ1Z092ZXJsYXlUZXh0dXJlOiBUZXh0dXJlO1xuICAgIGRlYnVnT3ZlcmxheUNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQ7XG5cbiAgICBjb25zdHJ1Y3RvcihnbDogV2ViR0xSZW5kZXJpbmdDb250ZXh0LCB0cmFuc2Zvcm06IFRyYW5zZm9ybSkge1xuICAgICAgICB0aGlzLmNvbnRleHQgPSBuZXcgQ29udGV4dChnbCk7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuICAgICAgICB0aGlzLl90aWxlVGV4dHVyZXMgPSB7fTtcblxuICAgICAgICB0aGlzLnNldHVwKCk7XG5cbiAgICAgICAgLy8gV2l0aGluIGVhY2ggbGF5ZXIgdGhlcmUgYXJlIG11bHRpcGxlIGRpc3RpbmN0IHotcGxhbmVzIHRoYXQgY2FuIGJlIGRyYXduIHRvLlxuICAgICAgICAvLyBUaGlzIGlzIGltcGxlbWVudGVkIHVzaW5nIHRoZSBXZWJHTCBkZXB0aCBidWZmZXIuXG4gICAgICAgIHRoaXMubnVtU3VibGF5ZXJzID0gU291cmNlQ2FjaGUubWF4VW5kZXJ6b29taW5nICsgU291cmNlQ2FjaGUubWF4T3Zlcnpvb21pbmcgKyAxO1xuICAgICAgICB0aGlzLmRlcHRoRXBzaWxvbiA9IDEgLyBNYXRoLnBvdygyLCAxNik7XG5cbiAgICAgICAgdGhpcy5jcm9zc1RpbGVTeW1ib2xJbmRleCA9IG5ldyBDcm9zc1RpbGVTeW1ib2xJbmRleCgpO1xuXG4gICAgICAgIHRoaXMuZ3B1VGltZXJzID0ge307XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBVcGRhdGUgdGhlIEdMIHZpZXdwb3J0LCBwcm9qZWN0aW9uIG1hdHJpeCwgYW5kIHRyYW5zZm9ybXMgdG8gY29tcGVuc2F0ZVxuICAgICAqIGZvciBhIG5ldyB3aWR0aCBhbmQgaGVpZ2h0IHZhbHVlLlxuICAgICAqL1xuICAgIHJlc2l6ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLndpZHRoID0gd2lkdGggKiBicm93c2VyLmRldmljZVBpeGVsUmF0aW87XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0ICogYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvO1xuICAgICAgICB0aGlzLmNvbnRleHQudmlld3BvcnQuc2V0KFswLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodF0pO1xuXG4gICAgICAgIGlmICh0aGlzLnN0eWxlKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGxheWVySWQgb2YgdGhpcy5zdHlsZS5fb3JkZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0eWxlLl9sYXllcnNbbGF5ZXJJZF0ucmVzaXplKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXR1cCgpIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dDtcblxuICAgICAgICBjb25zdCB0aWxlRXh0ZW50QXJyYXkgPSBuZXcgUG9zQXJyYXkoKTtcbiAgICAgICAgdGlsZUV4dGVudEFycmF5LmVtcGxhY2VCYWNrKDAsIDApO1xuICAgICAgICB0aWxlRXh0ZW50QXJyYXkuZW1wbGFjZUJhY2soRVhURU5ULCAwKTtcbiAgICAgICAgdGlsZUV4dGVudEFycmF5LmVtcGxhY2VCYWNrKDAsIEVYVEVOVCk7XG4gICAgICAgIHRpbGVFeHRlbnRBcnJheS5lbXBsYWNlQmFjayhFWFRFTlQsIEVYVEVOVCk7XG4gICAgICAgIHRoaXMudGlsZUV4dGVudEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHRpbGVFeHRlbnRBcnJheSwgcG9zQXR0cmlidXRlcy5tZW1iZXJzKTtcbiAgICAgICAgdGhpcy50aWxlRXh0ZW50U2VnbWVudHMgPSBTZWdtZW50VmVjdG9yLnNpbXBsZVNlZ21lbnQoMCwgMCwgNCwgMik7XG5cbiAgICAgICAgY29uc3QgZGVidWdBcnJheSA9IG5ldyBQb3NBcnJheSgpO1xuICAgICAgICBkZWJ1Z0FycmF5LmVtcGxhY2VCYWNrKDAsIDApO1xuICAgICAgICBkZWJ1Z0FycmF5LmVtcGxhY2VCYWNrKEVYVEVOVCwgMCk7XG4gICAgICAgIGRlYnVnQXJyYXkuZW1wbGFjZUJhY2soMCwgRVhURU5UKTtcbiAgICAgICAgZGVidWdBcnJheS5lbXBsYWNlQmFjayhFWFRFTlQsIEVYVEVOVCk7XG4gICAgICAgIHRoaXMuZGVidWdCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZVZlcnRleEJ1ZmZlcihkZWJ1Z0FycmF5LCBwb3NBdHRyaWJ1dGVzLm1lbWJlcnMpO1xuICAgICAgICB0aGlzLmRlYnVnU2VnbWVudHMgPSBTZWdtZW50VmVjdG9yLnNpbXBsZVNlZ21lbnQoMCwgMCwgNCwgNSk7XG5cbiAgICAgICAgY29uc3QgcmFzdGVyQm91bmRzQXJyYXkgPSBuZXcgUmFzdGVyQm91bmRzQXJyYXkoKTtcbiAgICAgICAgcmFzdGVyQm91bmRzQXJyYXkuZW1wbGFjZUJhY2soMCwgMCwgMCwgMCk7XG4gICAgICAgIHJhc3RlckJvdW5kc0FycmF5LmVtcGxhY2VCYWNrKEVYVEVOVCwgMCwgRVhURU5ULCAwKTtcbiAgICAgICAgcmFzdGVyQm91bmRzQXJyYXkuZW1wbGFjZUJhY2soMCwgRVhURU5ULCAwLCBFWFRFTlQpO1xuICAgICAgICByYXN0ZXJCb3VuZHNBcnJheS5lbXBsYWNlQmFjayhFWFRFTlQsIEVYVEVOVCwgRVhURU5ULCBFWFRFTlQpO1xuICAgICAgICB0aGlzLnJhc3RlckJvdW5kc0J1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHJhc3RlckJvdW5kc0FycmF5LCByYXN0ZXJCb3VuZHNBdHRyaWJ1dGVzLm1lbWJlcnMpO1xuICAgICAgICB0aGlzLnJhc3RlckJvdW5kc1NlZ21lbnRzID0gU2VnbWVudFZlY3Rvci5zaW1wbGVTZWdtZW50KDAsIDAsIDQsIDIpO1xuXG4gICAgICAgIGNvbnN0IHZpZXdwb3J0QXJyYXkgPSBuZXcgUG9zQXJyYXkoKTtcbiAgICAgICAgdmlld3BvcnRBcnJheS5lbXBsYWNlQmFjaygwLCAwKTtcbiAgICAgICAgdmlld3BvcnRBcnJheS5lbXBsYWNlQmFjaygxLCAwKTtcbiAgICAgICAgdmlld3BvcnRBcnJheS5lbXBsYWNlQmFjaygwLCAxKTtcbiAgICAgICAgdmlld3BvcnRBcnJheS5lbXBsYWNlQmFjaygxLCAxKTtcbiAgICAgICAgdGhpcy52aWV3cG9ydEJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlVmVydGV4QnVmZmVyKHZpZXdwb3J0QXJyYXksIHBvc0F0dHJpYnV0ZXMubWVtYmVycyk7XG4gICAgICAgIHRoaXMudmlld3BvcnRTZWdtZW50cyA9IFNlZ21lbnRWZWN0b3Iuc2ltcGxlU2VnbWVudCgwLCAwLCA0LCAyKTtcblxuICAgICAgICBjb25zdCB0aWxlTGluZVN0cmlwSW5kaWNlcyA9IG5ldyBMaW5lU3RyaXBJbmRleEFycmF5KCk7XG4gICAgICAgIHRpbGVMaW5lU3RyaXBJbmRpY2VzLmVtcGxhY2VCYWNrKDApO1xuICAgICAgICB0aWxlTGluZVN0cmlwSW5kaWNlcy5lbXBsYWNlQmFjaygxKTtcbiAgICAgICAgdGlsZUxpbmVTdHJpcEluZGljZXMuZW1wbGFjZUJhY2soMyk7XG4gICAgICAgIHRpbGVMaW5lU3RyaXBJbmRpY2VzLmVtcGxhY2VCYWNrKDIpO1xuICAgICAgICB0aWxlTGluZVN0cmlwSW5kaWNlcy5lbXBsYWNlQmFjaygwKTtcbiAgICAgICAgdGhpcy50aWxlQm9yZGVySW5kZXhCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZUluZGV4QnVmZmVyKHRpbGVMaW5lU3RyaXBJbmRpY2VzKTtcblxuICAgICAgICBjb25zdCBxdWFkVHJpYW5nbGVJbmRpY2VzID0gbmV3IFRyaWFuZ2xlSW5kZXhBcnJheSgpO1xuICAgICAgICBxdWFkVHJpYW5nbGVJbmRpY2VzLmVtcGxhY2VCYWNrKDAsIDEsIDIpO1xuICAgICAgICBxdWFkVHJpYW5nbGVJbmRpY2VzLmVtcGxhY2VCYWNrKDIsIDEsIDMpO1xuICAgICAgICB0aGlzLnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyID0gY29udGV4dC5jcmVhdGVJbmRleEJ1ZmZlcihxdWFkVHJpYW5nbGVJbmRpY2VzKTtcblxuICAgICAgICB0aGlzLmVtcHR5VGV4dHVyZSA9IG5ldyBUZXh0dXJlKGNvbnRleHQsIHtcbiAgICAgICAgICAgIHdpZHRoOiAxLFxuICAgICAgICAgICAgaGVpZ2h0OiAxLFxuICAgICAgICAgICAgZGF0YTogbmV3IFVpbnQ4QXJyYXkoWzAsIDAsIDAsIDBdKVxuICAgICAgICB9LCBjb250ZXh0LmdsLlJHQkEpO1xuXG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5jb250ZXh0LmdsO1xuICAgICAgICB0aGlzLnN0ZW5jaWxDbGVhck1vZGUgPSBuZXcgU3RlbmNpbE1vZGUoe2Z1bmM6IGdsLkFMV0FZUywgbWFzazogMH0sIDB4MCwgMHhGRiwgZ2wuWkVSTywgZ2wuWkVSTywgZ2wuWkVSTyk7XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBSZXNldCB0aGUgZHJhd2luZyBjYW52YXMgYnkgY2xlYXJpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyIHNvIHRoYXQgd2UgY2FuIGRyYXdcbiAgICAgKiBuZXcgdGlsZXMgYXQgdGhlIHNhbWUgbG9jYXRpb24sIHdoaWxlIHJldGFpbmluZyBwcmV2aW91c2x5IGRyYXduIHBpeGVscy5cbiAgICAgKi9cbiAgICBjbGVhclN0ZW5jaWwoKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG4gICAgICAgIGNvbnN0IGdsID0gY29udGV4dC5nbDtcblxuICAgICAgICB0aGlzLm5leHRTdGVuY2lsSUQgPSAxO1xuICAgICAgICB0aGlzLmN1cnJlbnRTdGVuY2lsU291cmNlID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIC8vIEFzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy81NDkwLFxuICAgICAgICAvLyBwZW5kaW5nIGFuIHVwc3RyZWFtIGZpeCwgd2UgZHJhdyBhIGZ1bGxzY3JlZW4gc3RlbmNpbD0wIGNsaXBwaW5nIG1hc2sgaGVyZSxcbiAgICAgICAgLy8gZWZmZWN0aXZlbHkgY2xlYXJpbmcgdGhlIHN0ZW5jaWwgYnVmZmVyOiBvbmNlIGFuIHVwc3RyZWFtIHBhdGNoIGxhbmRzLCByZW1vdmVcbiAgICAgICAgLy8gdGhpcyBmdW5jdGlvbiBpbiBmYXZvciBvZiBjb250ZXh0LmNsZWFyKHsgc3RlbmNpbDogMHgwIH0pXG5cbiAgICAgICAgY29uc3QgbWF0cml4ID0gbWF0NC5jcmVhdGUoKTtcbiAgICAgICAgbWF0NC5vcnRobyhtYXRyaXgsIDAsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCAwLCAwLCAxKTtcbiAgICAgICAgbWF0NC5zY2FsZShtYXRyaXgsIG1hdHJpeCwgW2dsLmRyYXdpbmdCdWZmZXJXaWR0aCwgZ2wuZHJhd2luZ0J1ZmZlckhlaWdodCwgMF0pO1xuXG4gICAgICAgIHRoaXMudXNlUHJvZ3JhbSgnY2xpcHBpbmdNYXNrJykuZHJhdyhjb250ZXh0LCBnbC5UUklBTkdMRVMsXG4gICAgICAgICAgICBEZXB0aE1vZGUuZGlzYWJsZWQsIHRoaXMuc3RlbmNpbENsZWFyTW9kZSwgQ29sb3JNb2RlLmRpc2FibGVkLCBDdWxsRmFjZU1vZGUuZGlzYWJsZWQsXG4gICAgICAgICAgICBjbGlwcGluZ01hc2tVbmlmb3JtVmFsdWVzKG1hdHJpeCksXG4gICAgICAgICAgICAnJGNsaXBwaW5nJywgdGhpcy52aWV3cG9ydEJ1ZmZlcixcbiAgICAgICAgICAgIHRoaXMucXVhZFRyaWFuZ2xlSW5kZXhCdWZmZXIsIHRoaXMudmlld3BvcnRTZWdtZW50cyk7XG4gICAgfVxuXG4gICAgX3JlbmRlclRpbGVDbGlwcGluZ01hc2tzKGxheWVyOiBTdHlsZUxheWVyLCB0aWxlSURzOiBBcnJheTxPdmVyc2NhbGVkVGlsZUlEPikge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RlbmNpbFNvdXJjZSA9PT0gbGF5ZXIuc291cmNlIHx8ICFsYXllci5pc1RpbGVDbGlwcGVkKCkgfHwgIXRpbGVJRHMgfHwgIXRpbGVJRHMubGVuZ3RoKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5jdXJyZW50U3RlbmNpbFNvdXJjZSA9IGxheWVyLnNvdXJjZTtcblxuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jb250ZXh0O1xuICAgICAgICBjb25zdCBnbCA9IGNvbnRleHQuZ2w7XG5cbiAgICAgICAgaWYgKHRoaXMubmV4dFN0ZW5jaWxJRCArIHRpbGVJRHMubGVuZ3RoID4gMjU2KSB7XG4gICAgICAgICAgICAvLyB3ZSdsbCBydW4gb3V0IG9mIGZyZXNoIElEcyBzbyB3ZSBuZWVkIHRvIGNsZWFyIGFuZCBzdGFydCBmcm9tIHNjcmF0Y2hcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTdGVuY2lsKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0LnNldENvbG9yTW9kZShDb2xvck1vZGUuZGlzYWJsZWQpO1xuICAgICAgICBjb250ZXh0LnNldERlcHRoTW9kZShEZXB0aE1vZGUuZGlzYWJsZWQpO1xuXG4gICAgICAgIGNvbnN0IHByb2dyYW0gPSB0aGlzLnVzZVByb2dyYW0oJ2NsaXBwaW5nTWFzaycpO1xuXG4gICAgICAgIHRoaXMuX3RpbGVDbGlwcGluZ01hc2tJRHMgPSB7fTtcblxuICAgICAgICBmb3IgKGNvbnN0IHRpbGVJRCBvZiB0aWxlSURzKSB7XG4gICAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuX3RpbGVDbGlwcGluZ01hc2tJRHNbdGlsZUlELmtleV0gPSB0aGlzLm5leHRTdGVuY2lsSUQrKztcblxuICAgICAgICAgICAgcHJvZ3JhbS5kcmF3KGNvbnRleHQsIGdsLlRSSUFOR0xFUywgRGVwdGhNb2RlLmRpc2FibGVkLFxuICAgICAgICAgICAgICAgIC8vIFRlc3RzIHdpbGwgYWx3YXlzIHBhc3MsIGFuZCByZWYgdmFsdWUgd2lsbCBiZSB3cml0dGVuIHRvIHN0ZW5jaWwgYnVmZmVyLlxuICAgICAgICAgICAgICAgIG5ldyBTdGVuY2lsTW9kZSh7ZnVuYzogZ2wuQUxXQVlTLCBtYXNrOiAwfSwgaWQsIDB4RkYsIGdsLktFRVAsIGdsLktFRVAsIGdsLlJFUExBQ0UpLFxuICAgICAgICAgICAgICAgIENvbG9yTW9kZS5kaXNhYmxlZCwgQ3VsbEZhY2VNb2RlLmRpc2FibGVkLCBjbGlwcGluZ01hc2tVbmlmb3JtVmFsdWVzKHRpbGVJRC5wb3NNYXRyaXgpLFxuICAgICAgICAgICAgICAgICckY2xpcHBpbmcnLCB0aGlzLnRpbGVFeHRlbnRCdWZmZXIsXG4gICAgICAgICAgICAgICAgdGhpcy5xdWFkVHJpYW5nbGVJbmRleEJ1ZmZlciwgdGhpcy50aWxlRXh0ZW50U2VnbWVudHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RlbmNpbE1vZGVGb3IzRCgpOiBTdGVuY2lsTW9kZSB7XG4gICAgICAgIHRoaXMuY3VycmVudFN0ZW5jaWxTb3VyY2UgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKHRoaXMubmV4dFN0ZW5jaWxJRCArIDEgPiAyNTYpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTdGVuY2lsKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpZCA9IHRoaXMubmV4dFN0ZW5jaWxJRCsrO1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuY29udGV4dC5nbDtcbiAgICAgICAgcmV0dXJuIG5ldyBTdGVuY2lsTW9kZSh7ZnVuYzogZ2wuTk9URVFVQUwsIG1hc2s6IDB4RkZ9LCBpZCwgMHhGRiwgZ2wuS0VFUCwgZ2wuS0VFUCwgZ2wuUkVQTEFDRSk7XG4gICAgfVxuXG4gICAgc3RlbmNpbE1vZGVGb3JDbGlwcGluZyh0aWxlSUQ6IE92ZXJzY2FsZWRUaWxlSUQpOiBTdGVuY2lsTW9kZSB7XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy5jb250ZXh0LmdsO1xuICAgICAgICByZXR1cm4gbmV3IFN0ZW5jaWxNb2RlKHtmdW5jOiBnbC5FUVVBTCwgbWFzazogMHhGRn0sIHRoaXMuX3RpbGVDbGlwcGluZ01hc2tJRHNbdGlsZUlELmtleV0sIDB4MDAsIGdsLktFRVAsIGdsLktFRVAsIGdsLlJFUExBQ0UpO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogU29ydCBjb29yZGluYXRlcyBieSBaIGFzIGRyYXdpbmcgdGlsZXMgaXMgZG9uZSBpbiBaLWRlc2NlbmRpbmcgb3JkZXIuXG4gICAgICogQWxsIGNoaWxkcmVuIHdpdGggdGhlIHNhbWUgWiB3cml0ZSB0aGUgc2FtZSBzdGVuY2lsIHZhbHVlLiAgQ2hpbGRyZW5cbiAgICAgKiBzdGVuY2lsIHZhbHVlcyBhcmUgZ3JlYXRlciB0aGFuIHBhcmVudCdzLiAgVGhpcyBpcyB1c2VkIG9ubHkgZm9yIHJhc3RlclxuICAgICAqIGFuZCByYXN0ZXItZGVtIHRpbGVzLCB3aGljaCBhcmUgYWxyZWFkeSBjbGlwcGVkIHRvIHRpbGUgYm91bmRhcmllcywgdG9cbiAgICAgKiBtYXNrIGFyZWEgb2YgdGlsZSBvdmVybGFwcGVkIGJ5IGNoaWxkcmVuIHRpbGVzLlxuICAgICAqIFN0ZW5jaWwgcmVmIHZhbHVlcyBjb250aW51ZSByYW5nZSB1c2VkIGluIF90aWxlQ2xpcHBpbmdNYXNrSURzLlxuICAgICAqXG4gICAgICogUmV0dXJucyBbU3RlbmNpbE1vZGUgZm9yIHRpbGUgb3ZlcnNjYWxlWiBtYXAsIHNvcnRlZENvb3Jkc10uXG4gICAgICovXG4gICAgc3RlbmNpbENvbmZpZ0Zvck92ZXJsYXAodGlsZUlEczogQXJyYXk8T3ZlcnNjYWxlZFRpbGVJRD4pOiBbe1tfOiBudW1iZXJdOiAkUmVhZE9ubHk8U3RlbmNpbE1vZGU+fSwgQXJyYXk8T3ZlcnNjYWxlZFRpbGVJRD5dIHtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmNvbnRleHQuZ2w7XG4gICAgICAgIGNvbnN0IGNvb3JkcyA9IHRpbGVJRHMuc29ydCgoYSwgYikgPT4gYi5vdmVyc2NhbGVkWiAtIGEub3ZlcnNjYWxlZFopO1xuICAgICAgICBjb25zdCBtaW5UaWxlWiA9IGNvb3Jkc1tjb29yZHMubGVuZ3RoIC0gMV0ub3ZlcnNjYWxlZFo7XG4gICAgICAgIGNvbnN0IHN0ZW5jaWxWYWx1ZXMgPSBjb29yZHNbMF0ub3ZlcnNjYWxlZFogLSBtaW5UaWxlWiArIDE7XG4gICAgICAgIGlmIChzdGVuY2lsVmFsdWVzID4gMSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlbmNpbFNvdXJjZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmICh0aGlzLm5leHRTdGVuY2lsSUQgKyBzdGVuY2lsVmFsdWVzID4gMjU2KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhclN0ZW5jaWwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHpUb1N0ZW5jaWxNb2RlID0ge307XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ZW5jaWxWYWx1ZXM7IGkrKykge1xuICAgICAgICAgICAgICAgIHpUb1N0ZW5jaWxNb2RlW2kgKyBtaW5UaWxlWl0gPSBuZXcgU3RlbmNpbE1vZGUoe2Z1bmM6IGdsLkdFUVVBTCwgbWFzazogMHhGRn0sIGkgKyB0aGlzLm5leHRTdGVuY2lsSUQsIDB4RkYsIGdsLktFRVAsIGdsLktFRVAsIGdsLlJFUExBQ0UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5uZXh0U3RlbmNpbElEICs9IHN0ZW5jaWxWYWx1ZXM7XG4gICAgICAgICAgICByZXR1cm4gW3pUb1N0ZW5jaWxNb2RlLCBjb29yZHNdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbe1ttaW5UaWxlWl06IFN0ZW5jaWxNb2RlLmRpc2FibGVkfSwgY29vcmRzXTtcbiAgICB9XG5cbiAgICBjb2xvck1vZGVGb3JSZW5kZXJQYXNzKCk6ICRSZWFkT25seTxDb2xvck1vZGU+IHtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmNvbnRleHQuZ2w7XG4gICAgICAgIGlmICh0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IG51bU92ZXJkcmF3U3RlcHMgPSA4O1xuICAgICAgICAgICAgY29uc3QgYSA9IDEgLyBudW1PdmVyZHJhd1N0ZXBzO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yTW9kZShbZ2wuQ09OU1RBTlRfQ09MT1IsIGdsLk9ORV0sIG5ldyBDb2xvcihhLCBhLCBhLCAwKSwgW3RydWUsIHRydWUsIHRydWUsIHRydWVdKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlbmRlclBhc3MgPT09ICdvcGFxdWUnKSB7XG4gICAgICAgICAgICByZXR1cm4gQ29sb3JNb2RlLnVuYmxlbmRlZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBDb2xvck1vZGUuYWxwaGFCbGVuZGVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGVwdGhNb2RlRm9yU3VibGF5ZXIobjogbnVtYmVyLCBtYXNrOiBEZXB0aE1hc2tUeXBlLCBmdW5jOiA/RGVwdGhGdW5jVHlwZSk6ICRSZWFkT25seTxEZXB0aE1vZGU+IHtcbiAgICAgICAgaWYgKCF0aGlzLm9wYXF1ZVBhc3NFbmFibGVkRm9yTGF5ZXIoKSkgcmV0dXJuIERlcHRoTW9kZS5kaXNhYmxlZDtcbiAgICAgICAgY29uc3QgZGVwdGggPSAxIC0gKCgxICsgdGhpcy5jdXJyZW50TGF5ZXIpICogdGhpcy5udW1TdWJsYXllcnMgKyBuKSAqIHRoaXMuZGVwdGhFcHNpbG9uO1xuICAgICAgICByZXR1cm4gbmV3IERlcHRoTW9kZShmdW5jIHx8IHRoaXMuY29udGV4dC5nbC5MRVFVQUwsIG1hc2ssIFtkZXB0aCwgZGVwdGhdKTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIFRoZSBvcGFxdWUgcGFzcyBhbmQgM0QgbGF5ZXJzIGJvdGggdXNlIHRoZSBkZXB0aCBidWZmZXIuXG4gICAgICogTGF5ZXJzIGRyYXduIGFib3ZlIDNEIGxheWVycyBuZWVkIHRvIGJlIGRyYXduIHVzaW5nIHRoZVxuICAgICAqIHBhaW50ZXIncyBhbGdvcml0aG0gc28gdGhhdCB0aGV5IGFwcGVhciBhYm92ZSAzRCBmZWF0dXJlcy5cbiAgICAgKiBUaGlzIHJldHVybnMgdHJ1ZSBmb3IgbGF5ZXJzIHRoYXQgY2FuIGJlIGRyYXduIHVzaW5nIHRoZVxuICAgICAqIG9wYXF1ZSBwYXNzLlxuICAgICAqL1xuICAgIG9wYXF1ZVBhc3NFbmFibGVkRm9yTGF5ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRMYXllciA8IHRoaXMub3BhcXVlUGFzc0N1dG9mZjtcbiAgICB9XG5cbiAgICByZW5kZXIoc3R5bGU6IFN0eWxlLCBvcHRpb25zOiBQYWludGVyT3B0aW9ucykge1xuICAgICAgICB0aGlzLnN0eWxlID0gc3R5bGU7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICAgICAgdGhpcy5saW5lQXRsYXMgPSBzdHlsZS5saW5lQXRsYXM7XG4gICAgICAgIHRoaXMuaW1hZ2VNYW5hZ2VyID0gc3R5bGUuaW1hZ2VNYW5hZ2VyO1xuICAgICAgICB0aGlzLmdseXBoTWFuYWdlciA9IHN0eWxlLmdseXBoTWFuYWdlcjtcblxuICAgICAgICB0aGlzLnN5bWJvbEZhZGVDaGFuZ2UgPSBzdHlsZS5wbGFjZW1lbnQuc3ltYm9sRmFkZUNoYW5nZShicm93c2VyLm5vdygpKTtcblxuICAgICAgICB0aGlzLmltYWdlTWFuYWdlci5iZWdpbkZyYW1lKCk7XG5cbiAgICAgICAgY29uc3QgbGF5ZXJJZHMgPSB0aGlzLnN0eWxlLl9vcmRlcjtcbiAgICAgICAgY29uc3Qgc291cmNlQ2FjaGVzID0gdGhpcy5zdHlsZS5zb3VyY2VDYWNoZXM7XG5cbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiBzb3VyY2VDYWNoZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlID0gc291cmNlQ2FjaGVzW2lkXTtcbiAgICAgICAgICAgIGlmIChzb3VyY2VDYWNoZS51c2VkKSB7XG4gICAgICAgICAgICAgICAgc291cmNlQ2FjaGUucHJlcGFyZSh0aGlzLmNvbnRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29vcmRzQXNjZW5kaW5nOiB7W186IHN0cmluZ106IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+fSA9IHt9O1xuICAgICAgICBjb25zdCBjb29yZHNEZXNjZW5kaW5nOiB7W186IHN0cmluZ106IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+fSA9IHt9O1xuICAgICAgICBjb25zdCBjb29yZHNEZXNjZW5kaW5nU3ltYm9sOiB7W186IHN0cmluZ106IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+fSA9IHt9O1xuXG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gc291cmNlQ2FjaGVzKSB7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VDYWNoZSA9IHNvdXJjZUNhY2hlc1tpZF07XG4gICAgICAgICAgICBjb29yZHNBc2NlbmRpbmdbaWRdID0gc291cmNlQ2FjaGUuZ2V0VmlzaWJsZUNvb3JkaW5hdGVzKCk7XG4gICAgICAgICAgICBjb29yZHNEZXNjZW5kaW5nW2lkXSA9IGNvb3Jkc0FzY2VuZGluZ1tpZF0uc2xpY2UoKS5yZXZlcnNlKCk7XG4gICAgICAgICAgICBjb29yZHNEZXNjZW5kaW5nU3ltYm9sW2lkXSA9IHNvdXJjZUNhY2hlLmdldFZpc2libGVDb29yZGluYXRlcyh0cnVlKS5yZXZlcnNlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9wYXF1ZVBhc3NDdXRvZmYgPSBJbmZpbml0eTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsYXllcklkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXJJZCA9IGxheWVySWRzW2ldO1xuICAgICAgICAgICAgaWYgKHRoaXMuc3R5bGUuX2xheWVyc1tsYXllcklkXS5pczNEKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wYXF1ZVBhc3NDdXRvZmYgPSBpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gT2Zmc2NyZWVuIHBhc3MgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgLy8gV2UgZmlyc3QgZG8gYWxsIHJlbmRlcmluZyB0aGF0IHJlcXVpcmVzIHJlbmRlcmluZyB0byBhIHNlcGFyYXRlXG4gICAgICAgIC8vIGZyYW1lYnVmZmVyLCBhbmQgdGhlbiBzYXZlIHRob3NlIGZvciByZW5kZXJpbmcgYmFjayB0byB0aGUgbWFwXG4gICAgICAgIC8vIGxhdGVyOiBpbiBkb2luZyB0aGlzIHdlIGF2b2lkIGRvaW5nIGV4cGVuc2l2ZSBmcmFtZWJ1ZmZlciByZXN0b3Jlcy5cbiAgICAgICAgdGhpcy5yZW5kZXJQYXNzID0gJ29mZnNjcmVlbic7XG5cbiAgICAgICAgZm9yIChjb25zdCBsYXllcklkIG9mIGxheWVySWRzKSB7XG4gICAgICAgICAgICBjb25zdCBsYXllciA9IHRoaXMuc3R5bGUuX2xheWVyc1tsYXllcklkXTtcbiAgICAgICAgICAgIGlmICghbGF5ZXIuaGFzT2Zmc2NyZWVuUGFzcygpIHx8IGxheWVyLmlzSGlkZGVuKHRoaXMudHJhbnNmb3JtLnpvb20pKSBjb250aW51ZTtcblxuICAgICAgICAgICAgY29uc3QgY29vcmRzID0gY29vcmRzRGVzY2VuZGluZ1tsYXllci5zb3VyY2VdO1xuICAgICAgICAgICAgaWYgKGxheWVyLnR5cGUgIT09ICdjdXN0b20nICYmICFjb29yZHMubGVuZ3RoKSBjb250aW51ZTtcblxuICAgICAgICAgICAgdGhpcy5yZW5kZXJMYXllcih0aGlzLCBzb3VyY2VDYWNoZXNbbGF5ZXIuc291cmNlXSwgbGF5ZXIsIGNvb3Jkcyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZWJpbmQgdGhlIG1haW4gZnJhbWVidWZmZXIgbm93IHRoYXQgYWxsIG9mZnNjcmVlbiBsYXllcnMgaGF2ZSBiZWVuIHJlbmRlcmVkOlxuICAgICAgICB0aGlzLmNvbnRleHQuYmluZEZyYW1lYnVmZmVyLnNldChudWxsKTtcblxuICAgICAgICAvLyBDbGVhciBidWZmZXJzIGluIHByZXBhcmF0aW9uIGZvciBkcmF3aW5nIHRvIHRoZSBtYWluIGZyYW1lYnVmZmVyXG4gICAgICAgIHRoaXMuY29udGV4dC5jbGVhcih7Y29sb3I6IG9wdGlvbnMuc2hvd092ZXJkcmF3SW5zcGVjdG9yID8gQ29sb3IuYmxhY2sgOiBDb2xvci50cmFuc3BhcmVudCwgZGVwdGg6IDF9KTtcbiAgICAgICAgdGhpcy5jbGVhclN0ZW5jaWwoKTtcblxuICAgICAgICB0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3IgPSBvcHRpb25zLnNob3dPdmVyZHJhd0luc3BlY3RvcjtcbiAgICAgICAgdGhpcy5kZXB0aFJhbmdlRm9yM0QgPSBbMCwgMSAtICgoc3R5bGUuX29yZGVyLmxlbmd0aCArIDIpICogdGhpcy5udW1TdWJsYXllcnMgKiB0aGlzLmRlcHRoRXBzaWxvbildO1xuXG4gICAgICAgIC8vIE9wYXF1ZSBwYXNzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgIC8vIERyYXcgb3BhcXVlIGxheWVycyB0b3AtdG8tYm90dG9tIGZpcnN0LlxuICAgICAgICB0aGlzLnJlbmRlclBhc3MgPSAnb3BhcXVlJztcblxuICAgICAgICBmb3IgKHRoaXMuY3VycmVudExheWVyID0gbGF5ZXJJZHMubGVuZ3RoIC0gMTsgdGhpcy5jdXJyZW50TGF5ZXIgPj0gMDsgdGhpcy5jdXJyZW50TGF5ZXItLSkge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSB0aGlzLnN0eWxlLl9sYXllcnNbbGF5ZXJJZHNbdGhpcy5jdXJyZW50TGF5ZXJdXTtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUNhY2hlID0gc291cmNlQ2FjaGVzW2xheWVyLnNvdXJjZV07XG4gICAgICAgICAgICBjb25zdCBjb29yZHMgPSBjb29yZHNBc2NlbmRpbmdbbGF5ZXIuc291cmNlXTtcblxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyVGlsZUNsaXBwaW5nTWFza3MobGF5ZXIsIGNvb3Jkcyk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckxheWVyKHRoaXMsIHNvdXJjZUNhY2hlLCBsYXllciwgY29vcmRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRyYW5zbHVjZW50IHBhc3MgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgLy8gRHJhdyBhbGwgb3RoZXIgbGF5ZXJzIGJvdHRvbS10by10b3AuXG4gICAgICAgIHRoaXMucmVuZGVyUGFzcyA9ICd0cmFuc2x1Y2VudCc7XG5cbiAgICAgICAgZm9yICh0aGlzLmN1cnJlbnRMYXllciA9IDA7IHRoaXMuY3VycmVudExheWVyIDwgbGF5ZXJJZHMubGVuZ3RoOyB0aGlzLmN1cnJlbnRMYXllcisrKSB7XG4gICAgICAgICAgICBjb25zdCBsYXllciA9IHRoaXMuc3R5bGUuX2xheWVyc1tsYXllcklkc1t0aGlzLmN1cnJlbnRMYXllcl1dO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlQ2FjaGUgPSBzb3VyY2VDYWNoZXNbbGF5ZXIuc291cmNlXTtcblxuICAgICAgICAgICAgLy8gRm9yIHN5bWJvbCBsYXllcnMgaW4gdGhlIHRyYW5zbHVjZW50IHBhc3MsIHdlIGFkZCBleHRyYSB0aWxlcyB0byB0aGUgcmVuZGVyYWJsZSBzZXRcbiAgICAgICAgICAgIC8vIGZvciBjcm9zcy10aWxlIHN5bWJvbCBmYWRpbmcuIFN5bWJvbCBsYXllcnMgZG9uJ3QgdXNlIHRpbGUgY2xpcHBpbmcsIHNvIG5vIG5lZWQgdG8gcmVuZGVyXG4gICAgICAgICAgICAvLyBzZXBhcmF0ZSBjbGlwcGluZyBtYXNrc1xuICAgICAgICAgICAgY29uc3QgY29vcmRzID0gKGxheWVyLnR5cGUgPT09ICdzeW1ib2wnID8gY29vcmRzRGVzY2VuZGluZ1N5bWJvbCA6IGNvb3Jkc0Rlc2NlbmRpbmcpW2xheWVyLnNvdXJjZV07XG5cbiAgICAgICAgICAgIHRoaXMuX3JlbmRlclRpbGVDbGlwcGluZ01hc2tzKGxheWVyLCBjb29yZHNBc2NlbmRpbmdbbGF5ZXIuc291cmNlXSk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckxheWVyKHRoaXMsIHNvdXJjZUNhY2hlLCBsYXllciwgY29vcmRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd1RpbGVCb3VuZGFyaWVzKSB7XG4gICAgICAgICAgICAvL1VzZSBzb3VyY2Ugd2l0aCBoaWdoZXN0IG1heHpvb21cbiAgICAgICAgICAgIGxldCBzZWxlY3RlZFNvdXJjZTtcbiAgICAgICAgICAgIGxldCBzb3VyY2VDYWNoZTtcbiAgICAgICAgICAgIGNvbnN0IGxheWVycyA9IHZhbHVlcyh0aGlzLnN0eWxlLl9sYXllcnMpO1xuICAgICAgICAgICAgbGF5ZXJzLmZvckVhY2goKGxheWVyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGxheWVyLnNvdXJjZSAmJiAhbGF5ZXIuaXNIaWRkZW4odGhpcy50cmFuc2Zvcm0uem9vbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxheWVyLnNvdXJjZSAhPT0gKHNvdXJjZUNhY2hlICYmIHNvdXJjZUNhY2hlLmlkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlQ2FjaGUgPSB0aGlzLnN0eWxlLnNvdXJjZUNhY2hlc1tsYXllci5zb3VyY2VdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghc2VsZWN0ZWRTb3VyY2UgfHwgKHNlbGVjdGVkU291cmNlLmdldFNvdXJjZSgpLm1heHpvb20gPCBzb3VyY2VDYWNoZS5nZXRTb3VyY2UoKS5tYXh6b29tKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRTb3VyY2UgPSBzb3VyY2VDYWNoZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkU291cmNlKSB7XG4gICAgICAgICAgICAgICAgZHJhdy5kZWJ1Zyh0aGlzLCBzZWxlY3RlZFNvdXJjZSwgc2VsZWN0ZWRTb3VyY2UuZ2V0VmlzaWJsZUNvb3JkaW5hdGVzKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93UGFkZGluZykge1xuICAgICAgICAgICAgZHJhd0RlYnVnUGFkZGluZyh0aGlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCBkZWZhdWx0cyBmb3IgbW9zdCBHTCB2YWx1ZXMgc28gdGhhdCBhbnlvbmUgdXNpbmcgdGhlIHN0YXRlIGFmdGVyIHRoZSByZW5kZXJcbiAgICAgICAgLy8gZW5jb3VudGVycyBtb3JlIGV4cGVjdGVkIHZhbHVlcy5cbiAgICAgICAgdGhpcy5jb250ZXh0LnNldERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICByZW5kZXJMYXllcihwYWludGVyOiBQYWludGVyLCBzb3VyY2VDYWNoZTogU291cmNlQ2FjaGUsIGxheWVyOiBTdHlsZUxheWVyLCBjb29yZHM6IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+KSB7XG4gICAgICAgIGlmIChsYXllci5pc0hpZGRlbih0aGlzLnRyYW5zZm9ybS56b29tKSkgcmV0dXJuO1xuICAgICAgICBpZiAobGF5ZXIudHlwZSAhPT0gJ2JhY2tncm91bmQnICYmIGxheWVyLnR5cGUgIT09ICdjdXN0b20nICYmICFjb29yZHMubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIHRoaXMuaWQgPSBsYXllci5pZDtcblxuICAgICAgICB0aGlzLmdwdVRpbWluZ1N0YXJ0KGxheWVyKTtcbiAgICAgICAgZHJhd1tsYXllci50eXBlXShwYWludGVyLCBzb3VyY2VDYWNoZSwgbGF5ZXIsIGNvb3JkcywgdGhpcy5zdHlsZS5wbGFjZW1lbnQudmFyaWFibGVPZmZzZXRzKTtcbiAgICAgICAgdGhpcy5ncHVUaW1pbmdFbmQoKTtcbiAgICB9XG5cbiAgICBncHVUaW1pbmdTdGFydChsYXllcjogU3R5bGVMYXllcikge1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5ncHVUaW1pbmcpIHJldHVybjtcbiAgICAgICAgY29uc3QgZXh0ID0gdGhpcy5jb250ZXh0LmV4dFRpbWVyUXVlcnk7XG4gICAgICAgIC8vIFRoaXMgdHJpZXMgdG8gdGltZSB0aGUgZHJhdyBjYWxsIGl0c2VsZiwgYnV0IG5vdGUgdGhhdCB0aGUgY29zdCBmb3IgZHJhd2luZyBhIGxheWVyXG4gICAgICAgIC8vIG1heSBiZSBkb21pbmF0ZWQgYnkgdGhlIGNvc3Qgb2YgdXBsb2FkaW5nIHZlcnRpY2VzIHRvIHRoZSBHUFUuXG4gICAgICAgIC8vIFRvIGluc3RydW1lbnQgdGhhdCwgd2UnZCBuZWVkIHRvIHBhc3MgdGhlIGxheWVyVGltZXJzIG9iamVjdCBkb3duIGludG8gdGhlIGJ1Y2tldFxuICAgICAgICAvLyB1cGxvYWRpbmcgbG9naWMuXG4gICAgICAgIGxldCBsYXllclRpbWVyID0gdGhpcy5ncHVUaW1lcnNbbGF5ZXIuaWRdO1xuICAgICAgICBpZiAoIWxheWVyVGltZXIpIHtcbiAgICAgICAgICAgIGxheWVyVGltZXIgPSB0aGlzLmdwdVRpbWVyc1tsYXllci5pZF0gPSB7XG4gICAgICAgICAgICAgICAgY2FsbHM6IDAsXG4gICAgICAgICAgICAgICAgY3B1VGltZTogMCxcbiAgICAgICAgICAgICAgICBxdWVyeTogZXh0LmNyZWF0ZVF1ZXJ5RVhUKClcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgbGF5ZXJUaW1lci5jYWxscysrO1xuICAgICAgICBleHQuYmVnaW5RdWVyeUVYVChleHQuVElNRV9FTEFQU0VEX0VYVCwgbGF5ZXJUaW1lci5xdWVyeSk7XG4gICAgfVxuXG4gICAgZ3B1VGltaW5nRW5kKCkge1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5ncHVUaW1pbmcpIHJldHVybjtcbiAgICAgICAgY29uc3QgZXh0ID0gdGhpcy5jb250ZXh0LmV4dFRpbWVyUXVlcnk7XG4gICAgICAgIGV4dC5lbmRRdWVyeUVYVChleHQuVElNRV9FTEFQU0VEX0VYVCk7XG4gICAgfVxuXG4gICAgY29sbGVjdEdwdVRpbWVycygpIHtcbiAgICAgICAgY29uc3QgY3VycmVudExheWVyVGltZXJzID0gdGhpcy5ncHVUaW1lcnM7XG4gICAgICAgIHRoaXMuZ3B1VGltZXJzID0ge307XG4gICAgICAgIHJldHVybiBjdXJyZW50TGF5ZXJUaW1lcnM7XG4gICAgfVxuXG4gICAgcXVlcnlHcHVUaW1lcnMoZ3B1VGltZXJzOiB7W186IHN0cmluZ106IGFueX0pIHtcbiAgICAgICAgY29uc3QgbGF5ZXJzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXJJZCBpbiBncHVUaW1lcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGdwdVRpbWVyID0gZ3B1VGltZXJzW2xheWVySWRdO1xuICAgICAgICAgICAgY29uc3QgZXh0ID0gdGhpcy5jb250ZXh0LmV4dFRpbWVyUXVlcnk7XG4gICAgICAgICAgICBjb25zdCBncHVUaW1lID0gZXh0LmdldFF1ZXJ5T2JqZWN0RVhUKGdwdVRpbWVyLnF1ZXJ5LCBleHQuUVVFUllfUkVTVUxUX0VYVCkgLyAoMTAwMCAqIDEwMDApO1xuICAgICAgICAgICAgZXh0LmRlbGV0ZVF1ZXJ5RVhUKGdwdVRpbWVyLnF1ZXJ5KTtcbiAgICAgICAgICAgIGxheWVyc1tsYXllcklkXSA9IGdwdVRpbWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxheWVycztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmFuc2Zvcm0gYSBtYXRyaXggdG8gaW5jb3Jwb3JhdGUgdGhlICotdHJhbnNsYXRlIGFuZCAqLXRyYW5zbGF0ZS1hbmNob3IgcHJvcGVydGllcyBpbnRvIGl0LlxuICAgICAqIEBwYXJhbSBpblZpZXdwb3J0UGl4ZWxVbml0c1VuaXRzIFRydWUgd2hlbiB0aGUgdW5pdHMgYWNjZXB0ZWQgYnkgdGhlIG1hdHJpeCBhcmUgaW4gdmlld3BvcnQgcGl4ZWxzIGluc3RlYWQgb2YgdGlsZSB1bml0cy5cbiAgICAgKiBAcmV0dXJucyB7RmxvYXQzMkFycmF5fSBtYXRyaXhcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHRyYW5zbGF0ZVBvc01hdHJpeChtYXRyaXg6IEZsb2F0MzJBcnJheSwgdGlsZTogVGlsZSwgdHJhbnNsYXRlOiBbbnVtYmVyLCBudW1iZXJdLCB0cmFuc2xhdGVBbmNob3I6ICdtYXAnIHwgJ3ZpZXdwb3J0JywgaW5WaWV3cG9ydFBpeGVsVW5pdHNVbml0cz86IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKCF0cmFuc2xhdGVbMF0gJiYgIXRyYW5zbGF0ZVsxXSkgcmV0dXJuIG1hdHJpeDtcblxuICAgICAgICBjb25zdCBhbmdsZSA9IGluVmlld3BvcnRQaXhlbFVuaXRzVW5pdHMgP1xuICAgICAgICAgICAgKHRyYW5zbGF0ZUFuY2hvciA9PT0gJ21hcCcgPyB0aGlzLnRyYW5zZm9ybS5hbmdsZSA6IDApIDpcbiAgICAgICAgICAgICh0cmFuc2xhdGVBbmNob3IgPT09ICd2aWV3cG9ydCcgPyAtdGhpcy50cmFuc2Zvcm0uYW5nbGUgOiAwKTtcblxuICAgICAgICBpZiAoYW5nbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHNpbkEgPSBNYXRoLnNpbihhbmdsZSk7XG4gICAgICAgICAgICBjb25zdCBjb3NBID0gTWF0aC5jb3MoYW5nbGUpO1xuICAgICAgICAgICAgdHJhbnNsYXRlID0gW1xuICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVswXSAqIGNvc0EgLSB0cmFuc2xhdGVbMV0gKiBzaW5BLFxuICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVswXSAqIHNpbkEgKyB0cmFuc2xhdGVbMV0gKiBjb3NBXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdHJhbnNsYXRpb24gPSBbXG4gICAgICAgICAgICBpblZpZXdwb3J0UGl4ZWxVbml0c1VuaXRzID8gdHJhbnNsYXRlWzBdIDogcGl4ZWxzVG9UaWxlVW5pdHModGlsZSwgdHJhbnNsYXRlWzBdLCB0aGlzLnRyYW5zZm9ybS56b29tKSxcbiAgICAgICAgICAgIGluVmlld3BvcnRQaXhlbFVuaXRzVW5pdHMgPyB0cmFuc2xhdGVbMV0gOiBwaXhlbHNUb1RpbGVVbml0cyh0aWxlLCB0cmFuc2xhdGVbMV0sIHRoaXMudHJhbnNmb3JtLnpvb20pLFxuICAgICAgICAgICAgMFxuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZWRNYXRyaXggPSBuZXcgRmxvYXQzMkFycmF5KDE2KTtcbiAgICAgICAgbWF0NC50cmFuc2xhdGUodHJhbnNsYXRlZE1hdHJpeCwgbWF0cml4LCB0cmFuc2xhdGlvbik7XG4gICAgICAgIHJldHVybiB0cmFuc2xhdGVkTWF0cml4O1xuICAgIH1cblxuICAgIHNhdmVUaWxlVGV4dHVyZSh0ZXh0dXJlOiBUZXh0dXJlKSB7XG4gICAgICAgIGNvbnN0IHRleHR1cmVzID0gdGhpcy5fdGlsZVRleHR1cmVzW3RleHR1cmUuc2l6ZVswXV07XG4gICAgICAgIGlmICghdGV4dHVyZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX3RpbGVUZXh0dXJlc1t0ZXh0dXJlLnNpemVbMF1dID0gW3RleHR1cmVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGV4dHVyZXMucHVzaCh0ZXh0dXJlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFRpbGVUZXh0dXJlKHNpemU6IG51bWJlcikge1xuICAgICAgICBjb25zdCB0ZXh0dXJlcyA9IHRoaXMuX3RpbGVUZXh0dXJlc1tzaXplXTtcbiAgICAgICAgcmV0dXJuIHRleHR1cmVzICYmIHRleHR1cmVzLmxlbmd0aCA+IDAgPyB0ZXh0dXJlcy5wb3AoKSA6IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgYSBwYXR0ZXJuIGltYWdlIGlzIG5lZWRlZCwgYW5kIGlmIGl0IGlzLCB3aGV0aGVyIGl0IGlzIG5vdCBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB0cnVlIGlmIGEgbmVlZGVkIGltYWdlIGlzIG1pc3NpbmcgYW5kIHJlbmRlcmluZyBuZWVkcyB0byBiZSBza2lwcGVkLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgaXNQYXR0ZXJuTWlzc2luZyhpbWFnZTogP0Nyb3NzRmFkZWQ8UmVzb2x2ZWRJbWFnZT4pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCFpbWFnZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoIWltYWdlLmZyb20gfHwgIWltYWdlLnRvKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY29uc3QgaW1hZ2VQb3NBID0gdGhpcy5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybihpbWFnZS5mcm9tLnRvU3RyaW5nKCkpO1xuICAgICAgICBjb25zdCBpbWFnZVBvc0IgPSB0aGlzLmltYWdlTWFuYWdlci5nZXRQYXR0ZXJuKGltYWdlLnRvLnRvU3RyaW5nKCkpO1xuICAgICAgICByZXR1cm4gIWltYWdlUG9zQSB8fCAhaW1hZ2VQb3NCO1xuICAgIH1cblxuICAgIHVzZVByb2dyYW0obmFtZTogc3RyaW5nLCBwcm9ncmFtQ29uZmlndXJhdGlvbjogP1Byb2dyYW1Db25maWd1cmF0aW9uKTogUHJvZ3JhbTxhbnk+IHtcbiAgICAgICAgdGhpcy5jYWNoZSA9IHRoaXMuY2FjaGUgfHwge307XG4gICAgICAgIGNvbnN0IGtleSA9IGAke25hbWV9JHtwcm9ncmFtQ29uZmlndXJhdGlvbiA/IHByb2dyYW1Db25maWd1cmF0aW9uLmNhY2hlS2V5IDogJyd9JHt0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3IgPyAnL292ZXJkcmF3JyA6ICcnfWA7XG4gICAgICAgIGlmICghdGhpcy5jYWNoZVtrZXldKSB7XG4gICAgICAgICAgICB0aGlzLmNhY2hlW2tleV0gPSBuZXcgUHJvZ3JhbSh0aGlzLmNvbnRleHQsIHNoYWRlcnNbbmFtZV0sIHByb2dyYW1Db25maWd1cmF0aW9uLCBwcm9ncmFtVW5pZm9ybXNbbmFtZV0sIHRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVba2V5XTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIFJlc2V0IHNvbWUgR0wgc3RhdGUgdG8gZGVmYXVsdCB2YWx1ZXMgdG8gYXZvaWQgaGFyZC10by1kZWJ1ZyBidWdzXG4gICAgICogaW4gY3VzdG9tIGxheWVycy5cbiAgICAgKi9cbiAgICBzZXRDdXN0b21MYXllckRlZmF1bHRzKCkge1xuICAgICAgICAvLyBQcmV2ZW50IGN1c3RvbSBsYXllcnMgZnJvbSB1bmludGVudGlvbmFsbHkgbW9kaWZ5IHRoZSBsYXN0IFZBTyB1c2VkLlxuICAgICAgICAvLyBBbGwgb3RoZXIgc3RhdGUgaXMgc3RhdGUgaXMgcmVzdG9yZWQgb24gaXQncyBvd24sIGJ1dCBmb3IgVkFPcyBpdCdzXG4gICAgICAgIC8vIHNpbXBsZXIgdG8gdW5iaW5kIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byB0cmFjayB0aGUgc3RhdGUgb2YgVkFPcy5cbiAgICAgICAgdGhpcy5jb250ZXh0LnVuYmluZFZBTygpO1xuXG4gICAgICAgIC8vIFRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhpcyBzdGF0ZSBpcyBtZWFuaW5nZnVsIGFuZCBvZnRlbiBleHBlY3RlZC5cbiAgICAgICAgLy8gTGVhdmluZyB0aGlzIHN0YXRlIGRpcnR5IGNvdWxkIGNhdXNlIGEgbG90IG9mIGNvbmZ1c2lvbiBmb3IgdXNlcnMuXG4gICAgICAgIHRoaXMuY29udGV4dC5jdWxsRmFjZS5zZXREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnBpeGVsU3RvcmVVbnBhY2suc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmNvbnRleHQucGl4ZWxTdG9yZVVucGFja1ByZW11bHRpcGx5QWxwaGEuc2V0RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmNvbnRleHQucGl4ZWxTdG9yZVVucGFja0ZsaXBZLnNldERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIFNldCBHTCBzdGF0ZSB0aGF0IGlzIHNoYXJlZCBieSBhbGwgbGF5ZXJzLlxuICAgICAqL1xuICAgIHNldEJhc2VTdGF0ZSgpIHtcbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmNvbnRleHQuZ2w7XG4gICAgICAgIHRoaXMuY29udGV4dC5jdWxsRmFjZS5zZXQoZmFsc2UpO1xuICAgICAgICB0aGlzLmNvbnRleHQudmlld3BvcnQuc2V0KFswLCAwLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodF0pO1xuICAgICAgICB0aGlzLmNvbnRleHQuYmxlbmRFcXVhdGlvbi5zZXQoZ2wuRlVOQ19BREQpO1xuICAgIH1cblxuICAgIGluaXREZWJ1Z092ZXJsYXlDYW52YXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmRlYnVnT3ZlcmxheUNhbnZhcyA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmRlYnVnT3ZlcmxheUNhbnZhcyA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgICAgIHRoaXMuZGVidWdPdmVybGF5Q2FudmFzLndpZHRoID0gNTEyO1xuICAgICAgICAgICAgdGhpcy5kZWJ1Z092ZXJsYXlDYW52YXMuaGVpZ2h0ID0gNTEyO1xuICAgICAgICAgICAgY29uc3QgZ2wgPSB0aGlzLmNvbnRleHQuZ2w7XG4gICAgICAgICAgICB0aGlzLmRlYnVnT3ZlcmxheVRleHR1cmUgPSBuZXcgVGV4dHVyZSh0aGlzLmNvbnRleHQsIHRoaXMuZGVidWdPdmVybGF5Q2FudmFzLCBnbC5SR0JBKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuZW1wdHlUZXh0dXJlLmRlc3Ryb3koKTtcbiAgICAgICAgaWYgKHRoaXMuZGVidWdPdmVybGF5VGV4dHVyZSkge1xuICAgICAgICAgICAgdGhpcy5kZWJ1Z092ZXJsYXlUZXh0dXJlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUGFpbnRlcjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7dmVjMywgdmVjNH0gZnJvbSAnZ2wtbWF0cml4JztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuY2xhc3MgRnJ1c3R1bSB7XG4gICAgcG9pbnRzOiBBcnJheTxBcnJheTxudW1iZXI+PjtcbiAgICBwbGFuZXM6IEFycmF5PEFycmF5PG51bWJlcj4+O1xuXG4gICAgY29uc3RydWN0b3IocG9pbnRzXzogQXJyYXk8QXJyYXk8bnVtYmVyPj4sIHBsYW5lc186IEFycmF5PEFycmF5PG51bWJlcj4+KSB7XG4gICAgICAgIHRoaXMucG9pbnRzID0gcG9pbnRzXztcbiAgICAgICAgdGhpcy5wbGFuZXMgPSBwbGFuZXNfO1xuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tSW52UHJvamVjdGlvbk1hdHJpeChpbnZQcm9qOiBGbG9hdDY0QXJyYXksIHdvcmxkU2l6ZTogbnVtYmVyLCB6b29tOiBudW1iZXIpOiBGcnVzdHVtIHtcbiAgICAgICAgY29uc3QgY2xpcFNwYWNlQ29ybmVycyA9IFtcbiAgICAgICAgICAgIFstMSwgMSwgLTEsIDFdLFxuICAgICAgICAgICAgWyAxLCAxLCAtMSwgMV0sXG4gICAgICAgICAgICBbIDEsIC0xLCAtMSwgMV0sXG4gICAgICAgICAgICBbLTEsIC0xLCAtMSwgMV0sXG4gICAgICAgICAgICBbLTEsIDEsIDEsIDFdLFxuICAgICAgICAgICAgWyAxLCAxLCAxLCAxXSxcbiAgICAgICAgICAgIFsgMSwgLTEsIDEsIDFdLFxuICAgICAgICAgICAgWy0xLCAtMSwgMSwgMV1cbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBzY2FsZSA9IE1hdGgucG93KDIsIHpvb20pO1xuXG4gICAgICAgIC8vIFRyYW5zZm9ybSBmcnVzdHVtIGNvcm5lciBwb2ludHMgZnJvbSBjbGlwIHNwYWNlIHRvIHRpbGUgc3BhY2VcbiAgICAgICAgY29uc3QgZnJ1c3R1bUNvb3JkcyA9IGNsaXBTcGFjZUNvcm5lcnNcbiAgICAgICAgICAgIC5tYXAodiA9PiB2ZWM0LnRyYW5zZm9ybU1hdDQoW10sIHYsIGludlByb2opKVxuICAgICAgICAgICAgLm1hcCh2ID0+IHZlYzQuc2NhbGUoW10sIHYsIDEuMCAvIHZbM10gLyB3b3JsZFNpemUgKiBzY2FsZSkpO1xuXG4gICAgICAgIGNvbnN0IGZydXN0dW1QbGFuZVBvaW50SW5kaWNlcyA9IFtcbiAgICAgICAgICAgIFswLCAxLCAyXSwgIC8vIG5lYXJcbiAgICAgICAgICAgIFs2LCA1LCA0XSwgIC8vIGZhclxuICAgICAgICAgICAgWzAsIDMsIDddLCAgLy8gbGVmdFxuICAgICAgICAgICAgWzIsIDEsIDVdLCAgLy8gcmlnaHRcbiAgICAgICAgICAgIFszLCAyLCA2XSwgIC8vIGJvdHRvbVxuICAgICAgICAgICAgWzAsIDQsIDVdICAgLy8gdG9wXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgZnJ1c3R1bVBsYW5lcyA9IGZydXN0dW1QbGFuZVBvaW50SW5kaWNlcy5tYXAoKHA6IEFycmF5PG51bWJlcj4pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSB2ZWMzLnN1YihbXSwgZnJ1c3R1bUNvb3Jkc1twWzBdXSwgZnJ1c3R1bUNvb3Jkc1twWzFdXSk7XG4gICAgICAgICAgICBjb25zdCBiID0gdmVjMy5zdWIoW10sIGZydXN0dW1Db29yZHNbcFsyXV0sIGZydXN0dW1Db29yZHNbcFsxXV0pO1xuICAgICAgICAgICAgY29uc3QgbiA9IHZlYzMubm9ybWFsaXplKFtdLCB2ZWMzLmNyb3NzKFtdLCBhLCBiKSk7XG4gICAgICAgICAgICBjb25zdCBkID0gLXZlYzMuZG90KG4sIGZydXN0dW1Db29yZHNbcFsxXV0pO1xuICAgICAgICAgICAgcmV0dXJuIG4uY29uY2F0KGQpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gbmV3IEZydXN0dW0oZnJ1c3R1bUNvb3JkcywgZnJ1c3R1bVBsYW5lcyk7XG4gICAgfVxufVxuXG5jbGFzcyBBYWJiIHtcbiAgICBtaW46IHZlYzM7XG4gICAgbWF4OiB2ZWMzO1xuICAgIGNlbnRlcjogdmVjMztcblxuICAgIGNvbnN0cnVjdG9yKG1pbl86IHZlYzMsIG1heF86IHZlYzMpIHtcbiAgICAgICAgdGhpcy5taW4gPSBtaW5fO1xuICAgICAgICB0aGlzLm1heCA9IG1heF87XG4gICAgICAgIHRoaXMuY2VudGVyID0gdmVjMy5zY2FsZShbXSwgdmVjMy5hZGQoW10sIHRoaXMubWluLCB0aGlzLm1heCksIDAuNSk7XG4gICAgfVxuXG4gICAgcXVhZHJhbnQoaW5kZXg6IG51bWJlcik6IEFhYmIge1xuICAgICAgICBjb25zdCBzcGxpdCA9IFsoaW5kZXggJSAyKSA9PT0gMCwgaW5kZXggPCAyXTtcbiAgICAgICAgY29uc3QgcU1pbiA9IHZlYzMuY2xvbmUodGhpcy5taW4pO1xuICAgICAgICBjb25zdCBxTWF4ID0gdmVjMy5jbG9uZSh0aGlzLm1heCk7XG4gICAgICAgIGZvciAobGV0IGF4aXMgPSAwOyBheGlzIDwgc3BsaXQubGVuZ3RoOyBheGlzKyspIHtcbiAgICAgICAgICAgIHFNaW5bYXhpc10gPSBzcGxpdFtheGlzXSA/IHRoaXMubWluW2F4aXNdIDogdGhpcy5jZW50ZXJbYXhpc107XG4gICAgICAgICAgICBxTWF4W2F4aXNdID0gc3BsaXRbYXhpc10gPyB0aGlzLmNlbnRlcltheGlzXSA6IHRoaXMubWF4W2F4aXNdO1xuICAgICAgICB9XG4gICAgICAgIC8vIEVsZXZhdGlvbiBpcyBhbHdheXMgY29uc3RhbnQsIGhlbmNlIHF1YWRyYW50Lm1heC56ID0gdGhpcy5tYXguelxuICAgICAgICBxTWF4WzJdID0gdGhpcy5tYXhbMl07XG4gICAgICAgIHJldHVybiBuZXcgQWFiYihxTWluLCBxTWF4KTtcbiAgICB9XG5cbiAgICBkaXN0YW5jZVgocG9pbnQ6IEFycmF5PG51bWJlcj4pOiBudW1iZXIge1xuICAgICAgICBjb25zdCBwb2ludE9uQWFiYiA9IE1hdGgubWF4KE1hdGgubWluKHRoaXMubWF4WzBdLCBwb2ludFswXSksIHRoaXMubWluWzBdKTtcbiAgICAgICAgcmV0dXJuIHBvaW50T25BYWJiIC0gcG9pbnRbMF07XG4gICAgfVxuXG4gICAgZGlzdGFuY2VZKHBvaW50OiBBcnJheTxudW1iZXI+KTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgcG9pbnRPbkFhYmIgPSBNYXRoLm1heChNYXRoLm1pbih0aGlzLm1heFsxXSwgcG9pbnRbMV0pLCB0aGlzLm1pblsxXSk7XG4gICAgICAgIHJldHVybiBwb2ludE9uQWFiYiAtIHBvaW50WzFdO1xuICAgIH1cblxuICAgIC8vIFBlcmZvcm1zIGEgZnJ1c3R1bS1hYWJiIGludGVyc2VjdGlvbiB0ZXN0LiBSZXR1cm5zIDAgaWYgdGhlcmUncyBubyBpbnRlcnNlY3Rpb24sXG4gICAgLy8gMSBpZiBzaGFwZXMgYXJlIGludGVyc2VjdGluZyBhbmQgMiBpZiB0aGUgYWFiYiBpZiBmdWxseSBpbnNpZGUgdGhlIGZydXN0dW0uXG4gICAgaW50ZXJzZWN0cyhmcnVzdHVtOiBGcnVzdHVtKTogbnVtYmVyIHtcbiAgICAgICAgLy8gRXhlY3V0ZSBzZXBhcmF0aW5nIGF4aXMgdGVzdCBiZXR3ZWVuIHR3byBjb252ZXggb2JqZWN0cyB0byBmaW5kIGludGVyc2VjdGlvbnNcbiAgICAgICAgLy8gRWFjaCBmcnVzdHVtIHBsYW5lIHRvZ2V0aGVyIHdpdGggMyBtYWpvciBheGVzIGRlZmluZSB0aGUgc2VwYXJhdGluZyBheGVzXG4gICAgICAgIC8vIE5vdGU6IHRlc3Qgb25seSA0IHBvaW50cyBhcyBib3RoIG1pbiBhbmQgbWF4IHBvaW50cyBoYXZlIGVxdWFsIGVsZXZhdGlvblxuICAgICAgICBhc3NlcnQodGhpcy5taW5bMl0gPT09IDAgJiYgdGhpcy5tYXhbMl0gPT09IDApO1xuXG4gICAgICAgIGNvbnN0IGFhYmJQb2ludHMgPSBbXG4gICAgICAgICAgICBbdGhpcy5taW5bMF0sIHRoaXMubWluWzFdLCAwLjAsIDFdLFxuICAgICAgICAgICAgW3RoaXMubWF4WzBdLCB0aGlzLm1pblsxXSwgMC4wLCAxXSxcbiAgICAgICAgICAgIFt0aGlzLm1heFswXSwgdGhpcy5tYXhbMV0sIDAuMCwgMV0sXG4gICAgICAgICAgICBbdGhpcy5taW5bMF0sIHRoaXMubWF4WzFdLCAwLjAsIDFdXG4gICAgICAgIF07XG5cbiAgICAgICAgbGV0IGZ1bGx5SW5zaWRlID0gdHJ1ZTtcblxuICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IGZydXN0dW0ucGxhbmVzLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICBjb25zdCBwbGFuZSA9IGZydXN0dW0ucGxhbmVzW3BdO1xuICAgICAgICAgICAgbGV0IHBvaW50c0luc2lkZSA9IDA7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWFiYlBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHBvaW50c0luc2lkZSArPSB2ZWM0LmRvdChwbGFuZSwgYWFiYlBvaW50c1tpXSkgPj0gMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHBvaW50c0luc2lkZSA9PT0gMClcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcblxuICAgICAgICAgICAgaWYgKHBvaW50c0luc2lkZSAhPT0gYWFiYlBvaW50cy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgZnVsbHlJbnNpZGUgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmdWxseUluc2lkZSlcbiAgICAgICAgICAgIHJldHVybiAyO1xuXG4gICAgICAgIGZvciAobGV0IGF4aXMgPSAwOyBheGlzIDwgMzsgYXhpcysrKSB7XG4gICAgICAgICAgICBsZXQgcHJvak1pbiA9IE51bWJlci5NQVhfVkFMVUU7XG4gICAgICAgICAgICBsZXQgcHJvak1heCA9IC1OdW1iZXIuTUFYX1ZBTFVFO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBwID0gMDsgcCA8IGZydXN0dW0ucG9pbnRzLmxlbmd0aDsgcCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvamVjdGVkUG9pbnQgPSBmcnVzdHVtLnBvaW50c1twXVtheGlzXSAtIHRoaXMubWluW2F4aXNdO1xuXG4gICAgICAgICAgICAgICAgcHJvak1pbiA9IE1hdGgubWluKHByb2pNaW4sIHByb2plY3RlZFBvaW50KTtcbiAgICAgICAgICAgICAgICBwcm9qTWF4ID0gTWF0aC5tYXgocHJvak1heCwgcHJvamVjdGVkUG9pbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocHJvak1heCA8IDAgfHwgcHJvak1pbiA+IHRoaXMubWF4W2F4aXNdIC0gdGhpcy5taW5bYXhpc10pXG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG59XG5leHBvcnQge1xuICAgIEFhYmIsXG4gICAgRnJ1c3R1bVxufTtcbiIsIi8vIEBmbG93XG5pbXBvcnQge251bWJlcn0gZnJvbSBcIi4uL3N0eWxlLXNwZWMvdXRpbC9pbnRlcnBvbGF0ZVwiO1xuaW1wb3J0IFBvaW50ICBmcm9tIFwiQG1hcGJveC9wb2ludC1nZW9tZXRyeVwiO1xuaW1wb3J0IHtjbGFtcH0gZnJvbSBcIi4uL3V0aWwvdXRpbFwiO1xuXG4vKipcbiAqIEFuIGBFZGdlSW5zZXRgIG9iamVjdCByZXByZXNlbnRzIHNjcmVlbiBzcGFjZSBwYWRkaW5nIGFwcGxpZWQgdG8gdGhlIGVkZ2VzIG9mIHRoZSB2aWV3cG9ydC5cbiAqIFRoaXMgc2hpZnRzIHRoZSBhcHByZW50IGNlbnRlciBvciB0aGUgdmFuaXNoaW5nIHBvaW50IG9mIHRoZSBtYXAuIFRoaXMgaXMgdXNlZnVsIGZvciBhZGRpbmcgZmxvYXRpbmcgVUkgZWxlbWVudHNcbiAqIG9uIHRvcCBvZiB0aGUgbWFwIGFuZCBoYXZpbmcgdGhlIHZhbmlzaGluZyBwb2ludCBzaGlmdCBhcyBVSSBlbGVtZW50cyByZXNpemUuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IFt0b3A9MF1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYm90dG9tPTBdXG4gKiBAcGFyYW0ge251bWJlcn0gW2xlZnQ9MF1cbiAqIEBwYXJhbSB7bnVtYmVyfSBbcmlnaHQ9MF1cbiAqL1xuY2xhc3MgRWRnZUluc2V0cyB7XG4gICAgdG9wOiBudW1iZXI7XG4gICAgYm90dG9tOiBudW1iZXI7XG4gICAgbGVmdDogbnVtYmVyO1xuICAgIHJpZ2h0OiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3Rvcih0b3A6IG51bWJlciA9IDAsIGJvdHRvbTogbnVtYmVyID0gMCwgbGVmdDogbnVtYmVyID0gMCwgcmlnaHQ6IG51bWJlciA9IDApIHtcbiAgICAgICAgaWYgKGlzTmFOKHRvcCkgfHwgdG9wIDwgMCB8fFxuICAgICAgICAgICAgaXNOYU4oYm90dG9tKSB8fCBib3R0b20gPCAwIHx8XG4gICAgICAgICAgICBpc05hTihsZWZ0KSB8fCBsZWZ0IDwgMCB8fFxuICAgICAgICAgICAgaXNOYU4ocmlnaHQpIHx8IHJpZ2h0IDwgMFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB2YWx1ZSBmb3IgZWRnZS1pbnNldHMsIHRvcCwgYm90dG9tLCBsZWZ0IGFuZCByaWdodCBtdXN0IGFsbCBiZSBudW1iZXJzJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRvcCA9IHRvcDtcbiAgICAgICAgdGhpcy5ib3R0b20gPSBib3R0b207XG4gICAgICAgIHRoaXMubGVmdCA9IGxlZnQ7XG4gICAgICAgIHRoaXMucmlnaHQgPSByaWdodDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcnBvbGF0ZXMgdGhlIGluc2V0IGluLXBsYWNlLlxuICAgICAqIFRoaXMgbWFpbnRhaW5zIHRoZSBjdXJyZW50IGluc2V0IHZhbHVlIGZvciBhbnkgaW5zZXQgbm90IHByZXNlbnQgaW4gYHRhcmdldGAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1BhZGRpbmdPcHRpb25zfSB0YXJnZXRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdFxuICAgICAqIEByZXR1cm5zIHtFZGdlSW5zZXRzfVxuICAgICAqIEBtZW1iZXJvZiBFZGdlSW5zZXRzXG4gICAgICovXG4gICAgaW50ZXJwb2xhdGUoc3RhcnQ6IFBhZGRpbmdPcHRpb25zIHwgRWRnZUluc2V0cywgdGFyZ2V0OiBQYWRkaW5nT3B0aW9ucywgdDogbnVtYmVyKTogRWRnZUluc2V0cyB7XG4gICAgICAgIGlmICh0YXJnZXQudG9wICE9IG51bGwgJiYgc3RhcnQudG9wICE9IG51bGwpIHRoaXMudG9wID0gbnVtYmVyKHN0YXJ0LnRvcCwgdGFyZ2V0LnRvcCwgdCk7XG4gICAgICAgIGlmICh0YXJnZXQuYm90dG9tICE9IG51bGwgJiYgc3RhcnQuYm90dG9tICE9IG51bGwpIHRoaXMuYm90dG9tID0gbnVtYmVyKHN0YXJ0LmJvdHRvbSwgdGFyZ2V0LmJvdHRvbSwgdCk7XG4gICAgICAgIGlmICh0YXJnZXQubGVmdCAhPSBudWxsICYmIHN0YXJ0LmxlZnQgIT0gbnVsbCkgdGhpcy5sZWZ0ID0gbnVtYmVyKHN0YXJ0LmxlZnQsIHRhcmdldC5sZWZ0LCB0KTtcbiAgICAgICAgaWYgKHRhcmdldC5yaWdodCAhPSBudWxsICYmIHN0YXJ0LnJpZ2h0ICE9IG51bGwpIHRoaXMucmlnaHQgPSBudW1iZXIoc3RhcnQucmlnaHQsIHRhcmdldC5yaWdodCwgdCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXRpbGl0eSBtZXRob2QgdGhhdCBjb21wdXRlcyB0aGUgbmV3IGFwcHJlbnQgY2VudGVyIG9yIHZhbmlzaGluZyBwb2ludCBhZnRlciBhcHBseWluZyBpbnNldHMuXG4gICAgICogVGhpcyBpcyBpbiBwaXhlbHMgYW5kIHdpdGggdGhlIHRvcCBsZWZ0IGJlaW5nICgwLjApIGFuZCAreSBiZWluZyBkb3dud2FyZHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0XG4gICAgICogQHJldHVybnMge1BvaW50fVxuICAgICAqIEBtZW1iZXJvZiBFZGdlSW5zZXRzXG4gICAgICovXG4gICAgZ2V0Q2VudGVyKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogUG9pbnQge1xuICAgICAgICAvLyBDbGFtcCBpbnNldHMgc28gdGhleSBuZXZlciBvdmVyZmxvdyB3aWR0aC9oZWlnaHQgYW5kIGFsd2F5cyBjYWxjdWxhdGUgYSB2YWxpZCBjZW50ZXJcbiAgICAgICAgY29uc3QgeCA9IGNsYW1wKCh0aGlzLmxlZnQgKyB3aWR0aCAtIHRoaXMucmlnaHQpIC8gMiwgMCwgd2lkdGgpO1xuICAgICAgICBjb25zdCB5ID0gY2xhbXAoKHRoaXMudG9wICsgaGVpZ2h0IC0gdGhpcy5ib3R0b20pIC8gMiwgMCwgaGVpZ2h0KTtcblxuICAgICAgICByZXR1cm4gbmV3IFBvaW50KHgsIHkpO1xuICAgIH1cblxuICAgIGVxdWFscyhvdGhlcjogUGFkZGluZ09wdGlvbnMpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9wID09PSBvdGhlci50b3AgJiZcbiAgICAgICAgICAgIHRoaXMuYm90dG9tID09PSBvdGhlci5ib3R0b20gJiZcbiAgICAgICAgICAgIHRoaXMubGVmdCA9PT0gb3RoZXIubGVmdCAmJlxuICAgICAgICAgICAgdGhpcy5yaWdodCA9PT0gb3RoZXIucmlnaHQ7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogRWRnZUluc2V0cyB7XG4gICAgICAgIHJldHVybiBuZXcgRWRnZUluc2V0cyh0aGlzLnRvcCwgdGhpcy5ib3R0b20sIHRoaXMubGVmdCwgdGhpcy5yaWdodCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBzZHRhdGUgYXMganNvbiwgdXNlZnVsIHdoZW4geW91IHdhbnQgdG8gaGF2ZSBhXG4gICAgICogcmVhZC1vbmx5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpbnNldC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtQYWRkaW5nT3B0aW9uc31cbiAgICAgKiBAbWVtYmVyb2YgRWRnZUluc2V0c1xuICAgICAqL1xuICAgIHRvSlNPTigpOiBQYWRkaW5nT3B0aW9ucyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0b3A6IHRoaXMudG9wLFxuICAgICAgICAgICAgYm90dG9tOiB0aGlzLmJvdHRvbSxcbiAgICAgICAgICAgIGxlZnQ6IHRoaXMubGVmdCxcbiAgICAgICAgICAgIHJpZ2h0OiB0aGlzLnJpZ2h0XG4gICAgICAgIH07XG4gICAgfVxufVxuXG5leHBvcnQgdHlwZSBQYWRkaW5nT3B0aW9ucyA9IHt0b3A6ID9udW1iZXIsIGJvdHRvbTogP251bWJlciwgcmlnaHQ6ID9udW1iZXIsIGxlZnQ6ID9udW1iZXJ9O1xuXG5leHBvcnQgZGVmYXVsdCBFZGdlSW5zZXRzO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IExuZ0xhdCBmcm9tICcuL2xuZ19sYXQnO1xuaW1wb3J0IExuZ0xhdEJvdW5kcyBmcm9tICcuL2xuZ19sYXRfYm91bmRzJztcbmltcG9ydCBNZXJjYXRvckNvb3JkaW5hdGUsIHttZXJjYXRvclhmcm9tTG5nLCBtZXJjYXRvcllmcm9tTGF0LCBtZXJjYXRvclpmcm9tQWx0aXR1ZGV9IGZyb20gJy4vbWVyY2F0b3JfY29vcmRpbmF0ZSc7XG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQge3dyYXAsIGNsYW1wfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHtudW1iZXIgYXMgaW50ZXJwb2xhdGV9IGZyb20gJy4uL3N0eWxlLXNwZWMvdXRpbC9pbnRlcnBvbGF0ZSc7XG5pbXBvcnQgRVhURU5UIGZyb20gJy4uL2RhdGEvZXh0ZW50JztcbmltcG9ydCB7dmVjNCwgbWF0NCwgbWF0MiwgdmVjMn0gZnJvbSAnZ2wtbWF0cml4JztcbmltcG9ydCB7QWFiYiwgRnJ1c3R1bX0gZnJvbSAnLi4vdXRpbC9wcmltaXRpdmVzLmpzJztcbmltcG9ydCBFZGdlSW5zZXRzIGZyb20gJy4vZWRnZV9pbnNldHMnO1xuXG5pbXBvcnQge1Vud3JhcHBlZFRpbGVJRCwgT3ZlcnNjYWxlZFRpbGVJRCwgQ2Fub25pY2FsVGlsZUlEfSBmcm9tICcuLi9zb3VyY2UvdGlsZV9pZCc7XG5pbXBvcnQgdHlwZSB7UGFkZGluZ09wdGlvbnN9IGZyb20gJy4vZWRnZV9pbnNldHMnO1xuXG4vKipcbiAqIEEgc2luZ2xlIHRyYW5zZm9ybSwgZ2VuZXJhbGx5IHVzZWQgZm9yIGEgc2luZ2xlIHRpbGUgdG8gYmVcbiAqIHNjYWxlZCwgcm90YXRlZCwgYW5kIHpvb21lZC5cbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIFRyYW5zZm9ybSB7XG4gICAgdGlsZVNpemU6IG51bWJlcjtcbiAgICB0aWxlWm9vbTogbnVtYmVyO1xuICAgIGxuZ1JhbmdlOiA/W251bWJlciwgbnVtYmVyXTtcbiAgICBsYXRSYW5nZTogP1tudW1iZXIsIG51bWJlcl07XG4gICAgbWF4VmFsaWRMYXRpdHVkZTogbnVtYmVyO1xuICAgIHNjYWxlOiBudW1iZXI7XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBoZWlnaHQ6IG51bWJlcjtcbiAgICBhbmdsZTogbnVtYmVyO1xuICAgIHJvdGF0aW9uTWF0cml4OiBGbG9hdDY0QXJyYXk7XG4gICAgem9vbUZyYWN0aW9uOiBudW1iZXI7XG4gICAgcGl4ZWxzVG9HTFVuaXRzOiBbbnVtYmVyLCBudW1iZXJdO1xuICAgIGNhbWVyYVRvQ2VudGVyRGlzdGFuY2U6IG51bWJlcjtcbiAgICBtZXJjYXRvck1hdHJpeDogQXJyYXk8bnVtYmVyPjtcbiAgICBwcm9qTWF0cml4OiBGbG9hdDY0QXJyYXk7XG4gICAgaW52UHJvak1hdHJpeDogRmxvYXQ2NEFycmF5O1xuICAgIGFsaWduZWRQcm9qTWF0cml4OiBGbG9hdDY0QXJyYXk7XG4gICAgcGl4ZWxNYXRyaXg6IEZsb2F0NjRBcnJheTtcbiAgICBwaXhlbE1hdHJpeEludmVyc2U6IEZsb2F0NjRBcnJheTtcbiAgICBnbENvb3JkTWF0cml4OiBGbG9hdDMyQXJyYXk7XG4gICAgbGFiZWxQbGFuZU1hdHJpeDogRmxvYXQzMkFycmF5O1xuICAgIF9mb3Y6IG51bWJlcjtcbiAgICBfcGl0Y2g6IG51bWJlcjtcbiAgICBfem9vbTogbnVtYmVyO1xuICAgIF91bm1vZGlmaWVkOiBib29sZWFuO1xuICAgIF9yZW5kZXJXb3JsZENvcGllczogYm9vbGVhbjtcbiAgICBfbWluWm9vbTogbnVtYmVyO1xuICAgIF9tYXhab29tOiBudW1iZXI7XG4gICAgX21pblBpdGNoOiBudW1iZXI7XG4gICAgX21heFBpdGNoOiBudW1iZXI7XG4gICAgX2NlbnRlcjogTG5nTGF0O1xuICAgIF9lZGdlSW5zZXRzOiBFZGdlSW5zZXRzO1xuICAgIF9jb25zdHJhaW5pbmc6IGJvb2xlYW47XG4gICAgX3Bvc01hdHJpeENhY2hlOiB7W186IHN0cmluZ106IEZsb2F0MzJBcnJheX07XG4gICAgX2FsaWduZWRQb3NNYXRyaXhDYWNoZToge1tfOiBzdHJpbmddOiBGbG9hdDMyQXJyYXl9O1xuXG4gICAgY29uc3RydWN0b3IobWluWm9vbTogP251bWJlciwgbWF4Wm9vbTogP251bWJlciwgbWluUGl0Y2g6ID9udW1iZXIsIG1heFBpdGNoOiA/bnVtYmVyLCByZW5kZXJXb3JsZENvcGllczogYm9vbGVhbiB8IHZvaWQpIHtcbiAgICAgICAgdGhpcy50aWxlU2l6ZSA9IDUxMjsgLy8gY29uc3RhbnRcbiAgICAgICAgdGhpcy5tYXhWYWxpZExhdGl0dWRlID0gODUuMDUxMTI5OyAvLyBjb25zdGFudFxuXG4gICAgICAgIHRoaXMuX3JlbmRlcldvcmxkQ29waWVzID0gcmVuZGVyV29ybGRDb3BpZXMgPT09IHVuZGVmaW5lZCA/IHRydWUgOiByZW5kZXJXb3JsZENvcGllcztcbiAgICAgICAgdGhpcy5fbWluWm9vbSA9IG1pblpvb20gfHwgMDtcbiAgICAgICAgdGhpcy5fbWF4Wm9vbSA9IG1heFpvb20gfHwgMjI7XG5cbiAgICAgICAgdGhpcy5fbWluUGl0Y2ggPSAobWluUGl0Y2ggPT09IHVuZGVmaW5lZCB8fCBtaW5QaXRjaCA9PT0gbnVsbCkgPyAwIDogbWluUGl0Y2g7XG4gICAgICAgIHRoaXMuX21heFBpdGNoID0gKG1heFBpdGNoID09PSB1bmRlZmluZWQgfHwgbWF4UGl0Y2ggPT09IG51bGwpID8gNjAgOiBtYXhQaXRjaDtcblxuICAgICAgICB0aGlzLnNldE1heEJvdW5kcygpO1xuXG4gICAgICAgIHRoaXMud2lkdGggPSAwO1xuICAgICAgICB0aGlzLmhlaWdodCA9IDA7XG4gICAgICAgIHRoaXMuX2NlbnRlciA9IG5ldyBMbmdMYXQoMCwgMCk7XG4gICAgICAgIHRoaXMuem9vbSA9IDA7XG4gICAgICAgIHRoaXMuYW5nbGUgPSAwO1xuICAgICAgICB0aGlzLl9mb3YgPSAwLjY0MzUwMTEwODc5MzI4NDQ7XG4gICAgICAgIHRoaXMuX3BpdGNoID0gMDtcbiAgICAgICAgdGhpcy5fdW5tb2RpZmllZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX2VkZ2VJbnNldHMgPSBuZXcgRWRnZUluc2V0cygpO1xuICAgICAgICB0aGlzLl9wb3NNYXRyaXhDYWNoZSA9IHt9O1xuICAgICAgICB0aGlzLl9hbGlnbmVkUG9zTWF0cml4Q2FjaGUgPSB7fTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBUcmFuc2Zvcm0ge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBUcmFuc2Zvcm0odGhpcy5fbWluWm9vbSwgdGhpcy5fbWF4Wm9vbSwgdGhpcy5fbWluUGl0Y2gsIHRoaXMubWF4UGl0Y2gsIHRoaXMuX3JlbmRlcldvcmxkQ29waWVzKTtcbiAgICAgICAgY2xvbmUudGlsZVNpemUgPSB0aGlzLnRpbGVTaXplO1xuICAgICAgICBjbG9uZS5sYXRSYW5nZSA9IHRoaXMubGF0UmFuZ2U7XG4gICAgICAgIGNsb25lLndpZHRoID0gdGhpcy53aWR0aDtcbiAgICAgICAgY2xvbmUuaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG4gICAgICAgIGNsb25lLl9jZW50ZXIgPSB0aGlzLl9jZW50ZXI7XG4gICAgICAgIGNsb25lLnpvb20gPSB0aGlzLnpvb207XG4gICAgICAgIGNsb25lLmFuZ2xlID0gdGhpcy5hbmdsZTtcbiAgICAgICAgY2xvbmUuX2ZvdiA9IHRoaXMuX2ZvdjtcbiAgICAgICAgY2xvbmUuX3BpdGNoID0gdGhpcy5fcGl0Y2g7XG4gICAgICAgIGNsb25lLl91bm1vZGlmaWVkID0gdGhpcy5fdW5tb2RpZmllZDtcbiAgICAgICAgY2xvbmUuX2VkZ2VJbnNldHMgPSB0aGlzLl9lZGdlSW5zZXRzLmNsb25lKCk7XG4gICAgICAgIGNsb25lLl9jYWxjTWF0cmljZXMoKTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGdldCBtaW5ab29tKCk6IG51bWJlciB7IHJldHVybiB0aGlzLl9taW5ab29tOyB9XG4gICAgc2V0IG1pblpvb20oem9vbTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLl9taW5ab29tID09PSB6b29tKSByZXR1cm47XG4gICAgICAgIHRoaXMuX21pblpvb20gPSB6b29tO1xuICAgICAgICB0aGlzLnpvb20gPSBNYXRoLm1heCh0aGlzLnpvb20sIHpvb20pO1xuICAgIH1cblxuICAgIGdldCBtYXhab29tKCk6IG51bWJlciB7IHJldHVybiB0aGlzLl9tYXhab29tOyB9XG4gICAgc2V0IG1heFpvb20oem9vbTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLl9tYXhab29tID09PSB6b29tKSByZXR1cm47XG4gICAgICAgIHRoaXMuX21heFpvb20gPSB6b29tO1xuICAgICAgICB0aGlzLnpvb20gPSBNYXRoLm1pbih0aGlzLnpvb20sIHpvb20pO1xuICAgIH1cblxuICAgIGdldCBtaW5QaXRjaCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5fbWluUGl0Y2g7IH1cbiAgICBzZXQgbWluUGl0Y2gocGl0Y2g6IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5fbWluUGl0Y2ggPT09IHBpdGNoKSByZXR1cm47XG4gICAgICAgIHRoaXMuX21pblBpdGNoID0gcGl0Y2g7XG4gICAgICAgIHRoaXMucGl0Y2ggPSBNYXRoLm1heCh0aGlzLnBpdGNoLCBwaXRjaCk7XG4gICAgfVxuXG4gICAgZ2V0IG1heFBpdGNoKCk6IG51bWJlciB7IHJldHVybiB0aGlzLl9tYXhQaXRjaDsgfVxuICAgIHNldCBtYXhQaXRjaChwaXRjaDogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLl9tYXhQaXRjaCA9PT0gcGl0Y2gpIHJldHVybjtcbiAgICAgICAgdGhpcy5fbWF4UGl0Y2ggPSBwaXRjaDtcbiAgICAgICAgdGhpcy5waXRjaCA9IE1hdGgubWluKHRoaXMucGl0Y2gsIHBpdGNoKTtcbiAgICB9XG5cbiAgICBnZXQgcmVuZGVyV29ybGRDb3BpZXMoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9yZW5kZXJXb3JsZENvcGllczsgfVxuICAgIHNldCByZW5kZXJXb3JsZENvcGllcyhyZW5kZXJXb3JsZENvcGllcz86ID9ib29sZWFuKSB7XG4gICAgICAgIGlmIChyZW5kZXJXb3JsZENvcGllcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZW5kZXJXb3JsZENvcGllcyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAocmVuZGVyV29ybGRDb3BpZXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJlbmRlcldvcmxkQ29waWVzID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9yZW5kZXJXb3JsZENvcGllcyA9IHJlbmRlcldvcmxkQ29waWVzO1xuICAgIH1cblxuICAgIGdldCB3b3JsZFNpemUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGlsZVNpemUgKiB0aGlzLnNjYWxlO1xuICAgIH1cblxuICAgIGdldCBjZW50ZXJPZmZzZXQoKTogUG9pbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5jZW50ZXJQb2ludC5fc3ViKHRoaXMuc2l6ZS5fZGl2KDIpKTtcbiAgICB9XG5cbiAgICBnZXQgc2l6ZSgpOiBQb2ludCB7XG4gICAgICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuICAgIH1cblxuICAgIGdldCBiZWFyaW5nKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAtdGhpcy5hbmdsZSAvIE1hdGguUEkgKiAxODA7XG4gICAgfVxuICAgIHNldCBiZWFyaW5nKGJlYXJpbmc6IG51bWJlcikge1xuICAgICAgICBjb25zdCBiID0gLXdyYXAoYmVhcmluZywgLTE4MCwgMTgwKSAqIE1hdGguUEkgLyAxODA7XG4gICAgICAgIGlmICh0aGlzLmFuZ2xlID09PSBiKSByZXR1cm47XG4gICAgICAgIHRoaXMuX3VubW9kaWZpZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hbmdsZSA9IGI7XG4gICAgICAgIHRoaXMuX2NhbGNNYXRyaWNlcygpO1xuXG4gICAgICAgIC8vIDJ4MiBtYXRyaXggZm9yIHJvdGF0aW5nIHBvaW50c1xuICAgICAgICB0aGlzLnJvdGF0aW9uTWF0cml4ID0gbWF0Mi5jcmVhdGUoKTtcbiAgICAgICAgbWF0Mi5yb3RhdGUodGhpcy5yb3RhdGlvbk1hdHJpeCwgdGhpcy5yb3RhdGlvbk1hdHJpeCwgdGhpcy5hbmdsZSk7XG4gICAgfVxuXG4gICAgZ2V0IHBpdGNoKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9waXRjaCAvIE1hdGguUEkgKiAxODA7XG4gICAgfVxuICAgIHNldCBwaXRjaChwaXRjaDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHAgPSBjbGFtcChwaXRjaCwgdGhpcy5taW5QaXRjaCwgdGhpcy5tYXhQaXRjaCkgLyAxODAgKiBNYXRoLlBJO1xuICAgICAgICBpZiAodGhpcy5fcGl0Y2ggPT09IHApIHJldHVybjtcbiAgICAgICAgdGhpcy5fdW5tb2RpZmllZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9waXRjaCA9IHA7XG4gICAgICAgIHRoaXMuX2NhbGNNYXRyaWNlcygpO1xuICAgIH1cblxuICAgIGdldCBmb3YoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZvdiAvIE1hdGguUEkgKiAxODA7XG4gICAgfVxuICAgIHNldCBmb3YoZm92OiBudW1iZXIpIHtcbiAgICAgICAgZm92ID0gTWF0aC5tYXgoMC4wMSwgTWF0aC5taW4oNjAsIGZvdikpO1xuICAgICAgICBpZiAodGhpcy5fZm92ID09PSBmb3YpIHJldHVybjtcbiAgICAgICAgdGhpcy5fdW5tb2RpZmllZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9mb3YgPSBmb3YgLyAxODAgKiBNYXRoLlBJO1xuICAgICAgICB0aGlzLl9jYWxjTWF0cmljZXMoKTtcbiAgICB9XG5cbiAgICBnZXQgem9vbSgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5fem9vbTsgfVxuICAgIHNldCB6b29tKHpvb206IG51bWJlcikge1xuICAgICAgICBjb25zdCB6ID0gTWF0aC5taW4oTWF0aC5tYXgoem9vbSwgdGhpcy5taW5ab29tKSwgdGhpcy5tYXhab29tKTtcbiAgICAgICAgaWYgKHRoaXMuX3pvb20gPT09IHopIHJldHVybjtcbiAgICAgICAgdGhpcy5fdW5tb2RpZmllZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl96b29tID0gejtcbiAgICAgICAgdGhpcy5zY2FsZSA9IHRoaXMuem9vbVNjYWxlKHopO1xuICAgICAgICB0aGlzLnRpbGVab29tID0gTWF0aC5mbG9vcih6KTtcbiAgICAgICAgdGhpcy56b29tRnJhY3Rpb24gPSB6IC0gdGhpcy50aWxlWm9vbTtcbiAgICAgICAgdGhpcy5fY29uc3RyYWluKCk7XG4gICAgICAgIHRoaXMuX2NhbGNNYXRyaWNlcygpO1xuICAgIH1cblxuICAgIGdldCBjZW50ZXIoKTogTG5nTGF0IHsgcmV0dXJuIHRoaXMuX2NlbnRlcjsgfVxuICAgIHNldCBjZW50ZXIoY2VudGVyOiBMbmdMYXQpIHtcbiAgICAgICAgaWYgKGNlbnRlci5sYXQgPT09IHRoaXMuX2NlbnRlci5sYXQgJiYgY2VudGVyLmxuZyA9PT0gdGhpcy5fY2VudGVyLmxuZykgcmV0dXJuO1xuICAgICAgICB0aGlzLl91bm1vZGlmaWVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NlbnRlciA9IGNlbnRlcjtcbiAgICAgICAgdGhpcy5fY29uc3RyYWluKCk7XG4gICAgICAgIHRoaXMuX2NhbGNNYXRyaWNlcygpO1xuICAgIH1cblxuICAgIGdldCBwYWRkaW5nKCk6IFBhZGRpbmdPcHRpb25zIHsgcmV0dXJuIHRoaXMuX2VkZ2VJbnNldHMudG9KU09OKCk7IH1cbiAgICBzZXQgcGFkZGluZyhwYWRkaW5nOiBQYWRkaW5nT3B0aW9ucykge1xuICAgICAgICBpZiAodGhpcy5fZWRnZUluc2V0cy5lcXVhbHMocGFkZGluZykpIHJldHVybjtcbiAgICAgICAgdGhpcy5fdW5tb2RpZmllZCA9IGZhbHNlO1xuICAgICAgICAvL1VwZGF0ZSBlZGdlLWluc2V0cyBpbnBsYWNlXG4gICAgICAgIHRoaXMuX2VkZ2VJbnNldHMuaW50ZXJwb2xhdGUodGhpcy5fZWRnZUluc2V0cywgcGFkZGluZywgMSk7XG4gICAgICAgIHRoaXMuX2NhbGNNYXRyaWNlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBjZW50ZXIgb2YgdGhlIHNjcmVlbiBpbiBwaXhlbHMgd2l0aCB0aGUgdG9wLWxlZnQgY29ybmVyIGJlaW5nICgwLDApXG4gICAgICogYW5kICt5IGF4aXMgcG9pbnRpbmcgZG93bndhcmRzLiBUaGlzIGFjY291bnRzIGZvciBwYWRkaW5nLlxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICogQHR5cGUge1BvaW50fVxuICAgICAqIEBtZW1iZXJvZiBUcmFuc2Zvcm1cbiAgICAgKi9cbiAgICBnZXQgY2VudGVyUG9pbnQoKTogUG9pbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWRnZUluc2V0cy5nZXRDZW50ZXIodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgaWYgdGhlIHBhZGRpbmcgcGFyYW1zIG1hdGNoXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1BhZGRpbmdPcHRpb25zfSBwYWRkaW5nXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICogQG1lbWJlcm9mIFRyYW5zZm9ybVxuICAgICAqL1xuICAgIGlzUGFkZGluZ0VxdWFsKHBhZGRpbmc6IFBhZGRpbmdPcHRpb25zKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lZGdlSW5zZXRzLmVxdWFscyhwYWRkaW5nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIZWxwZXIgbWV0aG9kIHRvIHVwYWR0ZSBlZGdlLWluc2V0cyBpbnBsYWNlXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1BhZGRpbmdPcHRpb25zfSB0YXJnZXRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdFxuICAgICAqIEBtZW1iZXJvZiBUcmFuc2Zvcm1cbiAgICAgKi9cbiAgICBpbnRlcnBvbGF0ZVBhZGRpbmcoc3RhcnQ6IFBhZGRpbmdPcHRpb25zLCB0YXJnZXQ6IFBhZGRpbmdPcHRpb25zLCB0OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fdW5tb2RpZmllZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9lZGdlSW5zZXRzLmludGVycG9sYXRlKHN0YXJ0LCB0YXJnZXQsIHQpO1xuICAgICAgICB0aGlzLl9jb25zdHJhaW4oKTtcbiAgICAgICAgdGhpcy5fY2FsY01hdHJpY2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgem9vbSBsZXZlbCB0aGF0IHdpbGwgY292ZXIgYWxsIHRpbGVzIHRoZSB0cmFuc2Zvcm1cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBvcHRpb25zXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG9wdGlvbnMudGlsZVNpemUgVGlsZSBzaXplLCBleHByZXNzZWQgaW4gc2NyZWVuIHBpeGVscy5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IG9wdGlvbnMucm91bmRab29tIFRhcmdldCB6b29tIGxldmVsLiBJZiB0cnVlLCB0aGUgdmFsdWUgd2lsbCBiZSByb3VuZGVkIHRvIHRoZSBjbG9zZXN0IGludGVnZXIuIE90aGVyd2lzZSB0aGUgdmFsdWUgd2lsbCBiZSBmbG9vcmVkLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IHpvb20gbGV2ZWwgQW4gaW50ZWdlciB6b29tIGxldmVsIGF0IHdoaWNoIGFsbCB0aWxlcyB3aWxsIGJlIHZpc2libGUuXG4gICAgICovXG4gICAgY292ZXJpbmdab29tTGV2ZWwob3B0aW9uczoge3JvdW5kWm9vbT86IGJvb2xlYW4sIHRpbGVTaXplOiBudW1iZXJ9KSB7XG4gICAgICAgIGNvbnN0IHogPSAob3B0aW9ucy5yb3VuZFpvb20gPyBNYXRoLnJvdW5kIDogTWF0aC5mbG9vcikoXG4gICAgICAgICAgICB0aGlzLnpvb20gKyB0aGlzLnNjYWxlWm9vbSh0aGlzLnRpbGVTaXplIC8gb3B0aW9ucy50aWxlU2l6ZSlcbiAgICAgICAgKTtcbiAgICAgICAgLy8gQXQgbmVnYXRpdmUgem9vbSBsZXZlbHMgbG9hZCB0aWxlcyBmcm9tIHowIGJlY2F1c2UgbmVnYXRpdmUgdGlsZSB6b29tIGxldmVscyBkb24ndCBleGlzdC5cbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIHopO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhbnkgXCJ3cmFwcGVkXCIgY29waWVzIG9mIGEgZ2l2ZW4gdGlsZSBjb29yZGluYXRlIHRoYXQgYXJlIHZpc2libGVcbiAgICAgKiBpbiB0aGUgY3VycmVudCB2aWV3LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBnZXRWaXNpYmxlVW53cmFwcGVkQ29vcmRpbmF0ZXModGlsZUlEOiBDYW5vbmljYWxUaWxlSUQpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW25ldyBVbndyYXBwZWRUaWxlSUQoMCwgdGlsZUlEKV07XG4gICAgICAgIGlmICh0aGlzLl9yZW5kZXJXb3JsZENvcGllcykge1xuICAgICAgICAgICAgY29uc3QgdXRsID0gdGhpcy5wb2ludENvb3JkaW5hdGUobmV3IFBvaW50KDAsIDApKTtcbiAgICAgICAgICAgIGNvbnN0IHV0ciA9IHRoaXMucG9pbnRDb29yZGluYXRlKG5ldyBQb2ludCh0aGlzLndpZHRoLCAwKSk7XG4gICAgICAgICAgICBjb25zdCB1YmwgPSB0aGlzLnBvaW50Q29vcmRpbmF0ZShuZXcgUG9pbnQodGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpKTtcbiAgICAgICAgICAgIGNvbnN0IHViciA9IHRoaXMucG9pbnRDb29yZGluYXRlKG5ldyBQb2ludCgwLCB0aGlzLmhlaWdodCkpO1xuICAgICAgICAgICAgY29uc3QgdzAgPSBNYXRoLmZsb29yKE1hdGgubWluKHV0bC54LCB1dHIueCwgdWJsLngsIHVici54KSk7XG4gICAgICAgICAgICBjb25zdCB3MSA9IE1hdGguZmxvb3IoTWF0aC5tYXgodXRsLngsIHV0ci54LCB1YmwueCwgdWJyLngpKTtcblxuICAgICAgICAgICAgLy8gQWRkIGFuIGV4dHJhIGNvcHkgb2YgdGhlIHdvcmxkIG9uIGVhY2ggc2lkZSB0byBwcm9wZXJseSByZW5kZXIgSW1hZ2VTb3VyY2VzIGFuZCBDYW52YXNTb3VyY2VzLlxuICAgICAgICAgICAgLy8gQm90aCBzb3VyY2VzIGRyYXcgb3V0c2lkZSB0aGUgdGlsZSBib3VuZGFyaWVzIG9mIHRoZSB0aWxlIHRoYXQgXCJjb250YWlucyB0aGVtXCIgc28gd2UgbmVlZFxuICAgICAgICAgICAgLy8gdG8gYWRkIGV4dHJhIGNvcGllcyBvbiBib3RoIHNpZGVzIGluIGNhc2Ugb2Zmc2NyZWVuIHRpbGVzIG5lZWQgdG8gZHJhdyBpbnRvIG9uLXNjcmVlbiBvbmVzLlxuICAgICAgICAgICAgY29uc3QgZXh0cmFXb3JsZENvcHkgPSAxO1xuXG4gICAgICAgICAgICBmb3IgKGxldCB3ID0gdzAgLSBleHRyYVdvcmxkQ29weTsgdyA8PSB3MSArIGV4dHJhV29ybGRDb3B5OyB3KyspIHtcbiAgICAgICAgICAgICAgICBpZiAodyA9PT0gMCkgY29udGludWU7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobmV3IFVud3JhcHBlZFRpbGVJRCh3LCB0aWxlSUQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhbGwgY29vcmRpbmF0ZXMgdGhhdCBjb3VsZCBjb3ZlciB0aGlzIHRyYW5zZm9ybSBmb3IgYSBjb3ZlcmluZ1xuICAgICAqIHpvb20gbGV2ZWwuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gb3B0aW9ucy50aWxlU2l6ZVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvcHRpb25zLm1pbnpvb21cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gb3B0aW9ucy5tYXh6b29tXG4gICAgICogQHBhcmFtIHtib29sZWFufSBvcHRpb25zLnJvdW5kWm9vbVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0aW9ucy5yZXBhcnNlT3ZlcnNjYWxlZFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0aW9ucy5yZW5kZXJXb3JsZENvcGllc1xuICAgICAqIEByZXR1cm5zIHtBcnJheTxPdmVyc2NhbGVkVGlsZUlEPn0gT3ZlcnNjYWxlZFRpbGVJRHNcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvdmVyaW5nVGlsZXMoXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIHRpbGVTaXplOiBudW1iZXIsXG4gICAgICAgICAgICBtaW56b29tPzogbnVtYmVyLFxuICAgICAgICAgICAgbWF4em9vbT86IG51bWJlcixcbiAgICAgICAgICAgIHJvdW5kWm9vbT86IGJvb2xlYW4sXG4gICAgICAgICAgICByZXBhcnNlT3ZlcnNjYWxlZD86IGJvb2xlYW4sXG4gICAgICAgICAgICByZW5kZXJXb3JsZENvcGllcz86IGJvb2xlYW5cbiAgICAgICAgfVxuICAgICk6IEFycmF5PE92ZXJzY2FsZWRUaWxlSUQ+IHtcbiAgICAgICAgbGV0IHogPSB0aGlzLmNvdmVyaW5nWm9vbUxldmVsKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBhY3R1YWxaID0gejtcblxuICAgICAgICBpZiAob3B0aW9ucy5taW56b29tICE9PSB1bmRlZmluZWQgJiYgeiA8IG9wdGlvbnMubWluem9vbSkgcmV0dXJuIFtdO1xuICAgICAgICBpZiAob3B0aW9ucy5tYXh6b29tICE9PSB1bmRlZmluZWQgJiYgeiA+IG9wdGlvbnMubWF4em9vbSkgeiA9IG9wdGlvbnMubWF4em9vbTtcblxuICAgICAgICBjb25zdCBjZW50ZXJDb29yZCA9IE1lcmNhdG9yQ29vcmRpbmF0ZS5mcm9tTG5nTGF0KHRoaXMuY2VudGVyKTtcbiAgICAgICAgY29uc3QgbnVtVGlsZXMgPSBNYXRoLnBvdygyLCB6KTtcbiAgICAgICAgY29uc3QgY2VudGVyUG9pbnQgPSBbbnVtVGlsZXMgKiBjZW50ZXJDb29yZC54LCBudW1UaWxlcyAqIGNlbnRlckNvb3JkLnksIDBdO1xuICAgICAgICBjb25zdCBjYW1lcmFGcnVzdHVtID0gRnJ1c3R1bS5mcm9tSW52UHJvamVjdGlvbk1hdHJpeCh0aGlzLmludlByb2pNYXRyaXgsIHRoaXMud29ybGRTaXplLCB6KTtcblxuICAgICAgICAvLyBObyBjaGFuZ2Ugb2YgTE9EIGJlaGF2aW9yIGZvciBwaXRjaCBsb3dlciB0aGFuIDYwIGFuZCB3aGVuIHRoZXJlIGlzIG5vIHRvcCBwYWRkaW5nOiByZXR1cm4gb25seSB0aWxlIGlkcyBmcm9tIHRoZSByZXF1ZXN0ZWQgem9vbSBsZXZlbFxuICAgICAgICBsZXQgbWluWm9vbSA9IG9wdGlvbnMubWluem9vbSB8fCAwO1xuICAgICAgICAvLyBVc2UgMC4xIGFzIGFuIGVwc2lsb24gdG8gYXZvaWQgZm9yIGV4cGxpY2l0ID09IDAuMCBmbG9hdGluZyBwb2ludCBjaGVja3NcbiAgICAgICAgaWYgKHRoaXMucGl0Y2ggPD0gNjAuMCAmJiB0aGlzLl9lZGdlSW5zZXRzLnRvcCA8IDAuMSlcbiAgICAgICAgICAgIG1pblpvb20gPSB6O1xuXG4gICAgICAgIC8vIFRoZXJlIHNob3VsZCBhbHdheXMgYmUgYSBjZXJ0YWluIG51bWJlciBvZiBtYXhpbXVtIHpvb20gbGV2ZWwgdGlsZXMgc3Vycm91bmRpbmcgdGhlIGNlbnRlciBsb2NhdGlvblxuICAgICAgICBjb25zdCByYWRpdXNPZk1heEx2bExvZEluVGlsZXMgPSAzO1xuXG4gICAgICAgIGNvbnN0IG5ld1Jvb3RUaWxlID0gKHdyYXA6IG51bWJlcik6IGFueSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC8vIEFsbCB0aWxlcyBhcmUgb24gemVybyBlbGV2YXRpb24gcGxhbmUgPT4geiBkaWZmZXJlbmNlIGlzIHplcm9cbiAgICAgICAgICAgICAgICBhYWJiOiBuZXcgQWFiYihbd3JhcCAqIG51bVRpbGVzLCAwLCAwXSwgWyh3cmFwICsgMSkgKiBudW1UaWxlcywgbnVtVGlsZXMsIDBdKSxcbiAgICAgICAgICAgICAgICB6b29tOiAwLFxuICAgICAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICAgICAgeTogMCxcbiAgICAgICAgICAgICAgICB3cmFwLFxuICAgICAgICAgICAgICAgIGZ1bGx5VmlzaWJsZTogZmFsc2VcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gRG8gYSBkZXB0aC1maXJzdCB0cmF2ZXJzYWwgdG8gZmluZCB2aXNpYmxlIHRpbGVzIGFuZCBwcm9wZXIgbGV2ZWxzIG9mIGRldGFpbFxuICAgICAgICBjb25zdCBzdGFjayA9IFtdO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgY29uc3QgbWF4Wm9vbSA9IHo7XG4gICAgICAgIGNvbnN0IG92ZXJzY2FsZWRaID0gb3B0aW9ucy5yZXBhcnNlT3ZlcnNjYWxlZCA/IGFjdHVhbFogOiB6O1xuXG4gICAgICAgIGlmICh0aGlzLl9yZW5kZXJXb3JsZENvcGllcykge1xuICAgICAgICAgICAgLy8gUmVuZGVyIGNvcHkgb2YgdGhlIGdsb2JlIHRocmljZSBvbiBib3RoIHNpZGVzXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSAzOyBpKyspIHtcbiAgICAgICAgICAgICAgICBzdGFjay5wdXNoKG5ld1Jvb3RUaWxlKC1pKSk7XG4gICAgICAgICAgICAgICAgc3RhY2sucHVzaChuZXdSb290VGlsZShpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzdGFjay5wdXNoKG5ld1Jvb3RUaWxlKDApKTtcblxuICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgaXQgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIGNvbnN0IHggPSBpdC54O1xuICAgICAgICAgICAgY29uc3QgeSA9IGl0Lnk7XG4gICAgICAgICAgICBsZXQgZnVsbHlWaXNpYmxlID0gaXQuZnVsbHlWaXNpYmxlO1xuXG4gICAgICAgICAgICAvLyBWaXNpYmlsaXR5IG9mIGEgdGlsZSBpcyBub3QgcmVxdWlyZWQgaWYgYW55IG9mIGl0cyBhbmNlc3RvciBpZiBmdWxseSBpbnNpZGUgdGhlIGZydXN0dW1cbiAgICAgICAgICAgIGlmICghZnVsbHlWaXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW50ZXJzZWN0UmVzdWx0ID0gaXQuYWFiYi5pbnRlcnNlY3RzKGNhbWVyYUZydXN0dW0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKGludGVyc2VjdFJlc3VsdCA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICBmdWxseVZpc2libGUgPSBpbnRlcnNlY3RSZXN1bHQgPT09IDI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlWCA9IGl0LmFhYmIuZGlzdGFuY2VYKGNlbnRlclBvaW50KTtcbiAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlWSA9IGl0LmFhYmIuZGlzdGFuY2VZKGNlbnRlclBvaW50KTtcbiAgICAgICAgICAgIGNvbnN0IGxvbmdlc3REaW0gPSBNYXRoLm1heChNYXRoLmFicyhkaXN0YW5jZVgpLCBNYXRoLmFicyhkaXN0YW5jZVkpKTtcblxuICAgICAgICAgICAgLy8gV2UncmUgdXNpbmcgZGlzdGFuY2UgYmFzZWQgaGV1cmlzdGljcyB0byBkZXRlcm1pbmUgaWYgYSB0aWxlIHNob3VsZCBiZSBzcGxpdCBpbnRvIHF1YWRyYW50cyBvciBub3QuXG4gICAgICAgICAgICAvLyByYWRpdXNPZk1heEx2bExvZEluVGlsZXMgZGVmaW5lcyB0aGF0IHRoZXJlJ3MgYWx3YXlzIGEgY2VydGFpbiBudW1iZXIgb2YgbWF4TGV2ZWwgdGlsZXMgbmV4dCB0byB0aGUgbWFwIGNlbnRlci5cbiAgICAgICAgICAgIC8vIFVzaW5nIHRoZSBmYWN0IHRoYXQgYSBwYXJlbnQgbm9kZSBpbiBxdWFkdHJlZSBpcyB0d2ljZSB0aGUgc2l6ZSBvZiBpdHMgY2hpbGRyZW4gKHBlciBkaW1lbnNpb24pXG4gICAgICAgICAgICAvLyB3ZSBjYW4gZGVmaW5lIGRpc3RhbmNlIHRocmVzaG9sZHMgZm9yIGVhY2ggcmVsYXRpdmUgbGV2ZWw6XG4gICAgICAgICAgICAvLyBmKGspID0gb2Zmc2V0ICsgMiArIDQgKyA4ICsgMTYgKyAuLi4gKyAyXmsuIFRoaXMgaXMgdGhlIHNhbWUgYXMgXCJvZmZzZXQrMl4oaysxKS0yXCJcbiAgICAgICAgICAgIGNvbnN0IGRpc3RUb1NwbGl0ID0gcmFkaXVzT2ZNYXhMdmxMb2RJblRpbGVzICsgKDEgPDwgKG1heFpvb20gLSBpdC56b29tKSkgLSAyO1xuXG4gICAgICAgICAgICAvLyBIYXZlIHdlIHJlYWNoZWQgdGhlIHRhcmdldCBkZXB0aCBvciBpcyB0aGUgdGlsZSB0b28gZmFyIGF3YXkgdG8gYmUgYW55IHNwbGl0IGZ1cnRoZXI/XG4gICAgICAgICAgICBpZiAoaXQuem9vbSA9PT0gbWF4Wm9vbSB8fCAobG9uZ2VzdERpbSA+IGRpc3RUb1NwbGl0ICYmIGl0Lnpvb20gPj0gbWluWm9vbSkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHRpbGVJRDogbmV3IE92ZXJzY2FsZWRUaWxlSUQoaXQuem9vbSA9PT0gbWF4Wm9vbSA/IG92ZXJzY2FsZWRaIDogaXQuem9vbSwgaXQud3JhcCwgaXQuem9vbSwgeCwgeSksXG4gICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlU3E6IHZlYzIuc3FyTGVuKFtjZW50ZXJQb2ludFswXSAtIDAuNSAtIHgsIGNlbnRlclBvaW50WzFdIC0gMC41IC0geV0pXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRYID0gKHggPDwgMSkgKyAoaSAlIDIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkWSA9ICh5IDw8IDEpICsgKGkgPj4gMSk7XG5cbiAgICAgICAgICAgICAgICBzdGFjay5wdXNoKHthYWJiOiBpdC5hYWJiLnF1YWRyYW50KGkpLCB6b29tOiBpdC56b29tICsgMSwgeDogY2hpbGRYLCB5OiBjaGlsZFksIHdyYXA6IGl0LndyYXAsIGZ1bGx5VmlzaWJsZX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zb3J0KChhLCBiKSA9PiBhLmRpc3RhbmNlU3EgLSBiLmRpc3RhbmNlU3EpLm1hcChhID0+IGEudGlsZUlEKTtcbiAgICB9XG5cbiAgICByZXNpemUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcblxuICAgICAgICB0aGlzLnBpeGVsc1RvR0xVbml0cyA9IFsyIC8gd2lkdGgsIC0yIC8gaGVpZ2h0XTtcbiAgICAgICAgdGhpcy5fY29uc3RyYWluKCk7XG4gICAgICAgIHRoaXMuX2NhbGNNYXRyaWNlcygpO1xuICAgIH1cblxuICAgIGdldCB1bm1vZGlmaWVkKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fdW5tb2RpZmllZDsgfVxuXG4gICAgem9vbVNjYWxlKHpvb206IG51bWJlcikgeyByZXR1cm4gTWF0aC5wb3coMiwgem9vbSk7IH1cbiAgICBzY2FsZVpvb20oc2NhbGU6IG51bWJlcikgeyByZXR1cm4gTWF0aC5sb2coc2NhbGUpIC8gTWF0aC5MTjI7IH1cblxuICAgIHByb2plY3QobG5nbGF0OiBMbmdMYXQpIHtcbiAgICAgICAgY29uc3QgbGF0ID0gY2xhbXAobG5nbGF0LmxhdCwgLXRoaXMubWF4VmFsaWRMYXRpdHVkZSwgdGhpcy5tYXhWYWxpZExhdGl0dWRlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQb2ludChcbiAgICAgICAgICAgICAgICBtZXJjYXRvclhmcm9tTG5nKGxuZ2xhdC5sbmcpICogdGhpcy53b3JsZFNpemUsXG4gICAgICAgICAgICAgICAgbWVyY2F0b3JZZnJvbUxhdChsYXQpICogdGhpcy53b3JsZFNpemUpO1xuICAgIH1cblxuICAgIHVucHJvamVjdChwb2ludDogUG9pbnQpOiBMbmdMYXQge1xuICAgICAgICByZXR1cm4gbmV3IE1lcmNhdG9yQ29vcmRpbmF0ZShwb2ludC54IC8gdGhpcy53b3JsZFNpemUsIHBvaW50LnkgLyB0aGlzLndvcmxkU2l6ZSkudG9MbmdMYXQoKTtcbiAgICB9XG5cbiAgICBnZXQgcG9pbnQoKTogUG9pbnQgeyByZXR1cm4gdGhpcy5wcm9qZWN0KHRoaXMuY2VudGVyKTsgfVxuXG4gICAgc2V0TG9jYXRpb25BdFBvaW50KGxuZ2xhdDogTG5nTGF0LCBwb2ludDogUG9pbnQpIHtcbiAgICAgICAgY29uc3QgYSA9IHRoaXMucG9pbnRDb29yZGluYXRlKHBvaW50KTtcbiAgICAgICAgY29uc3QgYiA9IHRoaXMucG9pbnRDb29yZGluYXRlKHRoaXMuY2VudGVyUG9pbnQpO1xuICAgICAgICBjb25zdCBsb2MgPSB0aGlzLmxvY2F0aW9uQ29vcmRpbmF0ZShsbmdsYXQpO1xuICAgICAgICBjb25zdCBuZXdDZW50ZXIgPSBuZXcgTWVyY2F0b3JDb29yZGluYXRlKFxuICAgICAgICAgICAgICAgIGxvYy54IC0gKGEueCAtIGIueCksXG4gICAgICAgICAgICAgICAgbG9jLnkgLSAoYS55IC0gYi55KSk7XG4gICAgICAgIHRoaXMuY2VudGVyID0gdGhpcy5jb29yZGluYXRlTG9jYXRpb24obmV3Q2VudGVyKTtcbiAgICAgICAgaWYgKHRoaXMuX3JlbmRlcldvcmxkQ29waWVzKSB7XG4gICAgICAgICAgICB0aGlzLmNlbnRlciA9IHRoaXMuY2VudGVyLndyYXAoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdpdmVuIGEgbG9jYXRpb24sIHJldHVybiB0aGUgc2NyZWVuIHBvaW50IHRoYXQgY29ycmVzcG9uZHMgdG8gaXRcbiAgICAgKiBAcGFyYW0ge0xuZ0xhdH0gbG5nbGF0IGxvY2F0aW9uXG4gICAgICogQHJldHVybnMge1BvaW50fSBzY3JlZW4gcG9pbnRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGxvY2F0aW9uUG9pbnQobG5nbGF0OiBMbmdMYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29vcmRpbmF0ZVBvaW50KHRoaXMubG9jYXRpb25Db29yZGluYXRlKGxuZ2xhdCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdpdmVuIGEgcG9pbnQgb24gc2NyZWVuLCByZXR1cm4gaXRzIGxuZ2xhdFxuICAgICAqIEBwYXJhbSB7UG9pbnR9IHAgc2NyZWVuIHBvaW50XG4gICAgICogQHJldHVybnMge0xuZ0xhdH0gbG5nbGF0IGxvY2F0aW9uXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwb2ludExvY2F0aW9uKHA6IFBvaW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvb3JkaW5hdGVMb2NhdGlvbih0aGlzLnBvaW50Q29vcmRpbmF0ZShwKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2l2ZW4gYSBnZW9ncmFwaGljYWwgbG5nbGF0LCByZXR1cm4gYW4gdW5yb3VuZGVkXG4gICAgICogY29vcmRpbmF0ZSB0aGF0IHJlcHJlc2VudHMgaXQgYXQgdGhpcyB0cmFuc2Zvcm0ncyB6b29tIGxldmVsLlxuICAgICAqIEBwYXJhbSB7TG5nTGF0fSBsbmdsYXRcbiAgICAgKiBAcmV0dXJucyB7Q29vcmRpbmF0ZX1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGxvY2F0aW9uQ29vcmRpbmF0ZShsbmdsYXQ6IExuZ0xhdCkge1xuICAgICAgICByZXR1cm4gTWVyY2F0b3JDb29yZGluYXRlLmZyb21MbmdMYXQobG5nbGF0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIENvb3JkaW5hdGUsIHJldHVybiBpdHMgZ2VvZ3JhcGhpY2FsIHBvc2l0aW9uLlxuICAgICAqIEBwYXJhbSB7Q29vcmRpbmF0ZX0gY29vcmRcbiAgICAgKiBAcmV0dXJucyB7TG5nTGF0fSBsbmdsYXRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvb3JkaW5hdGVMb2NhdGlvbihjb29yZDogTWVyY2F0b3JDb29yZGluYXRlKSB7XG4gICAgICAgIHJldHVybiBjb29yZC50b0xuZ0xhdCgpO1xuICAgIH1cblxuICAgIHBvaW50Q29vcmRpbmF0ZShwOiBQb2ludCkge1xuICAgICAgICBjb25zdCB0YXJnZXRaID0gMDtcbiAgICAgICAgLy8gc2luY2Ugd2UgZG9uJ3Qga25vdyB0aGUgY29ycmVjdCBwcm9qZWN0ZWQgeiB2YWx1ZSBmb3IgdGhlIHBvaW50LFxuICAgICAgICAvLyB1bnByb2plY3QgdHdvIHBvaW50cyB0byBnZXQgYSBsaW5lIGFuZCB0aGVuIGZpbmQgdGhlIHBvaW50IG9uIHRoYXRcbiAgICAgICAgLy8gbGluZSB3aXRoIHo9MFxuXG4gICAgICAgIGNvbnN0IGNvb3JkMCA9IFtwLngsIHAueSwgMCwgMV07XG4gICAgICAgIGNvbnN0IGNvb3JkMSA9IFtwLngsIHAueSwgMSwgMV07XG5cbiAgICAgICAgdmVjNC50cmFuc2Zvcm1NYXQ0KGNvb3JkMCwgY29vcmQwLCB0aGlzLnBpeGVsTWF0cml4SW52ZXJzZSk7XG4gICAgICAgIHZlYzQudHJhbnNmb3JtTWF0NChjb29yZDEsIGNvb3JkMSwgdGhpcy5waXhlbE1hdHJpeEludmVyc2UpO1xuXG4gICAgICAgIGNvbnN0IHcwID0gY29vcmQwWzNdO1xuICAgICAgICBjb25zdCB3MSA9IGNvb3JkMVszXTtcbiAgICAgICAgY29uc3QgeDAgPSBjb29yZDBbMF0gLyB3MDtcbiAgICAgICAgY29uc3QgeDEgPSBjb29yZDFbMF0gLyB3MTtcbiAgICAgICAgY29uc3QgeTAgPSBjb29yZDBbMV0gLyB3MDtcbiAgICAgICAgY29uc3QgeTEgPSBjb29yZDFbMV0gLyB3MTtcbiAgICAgICAgY29uc3QgejAgPSBjb29yZDBbMl0gLyB3MDtcbiAgICAgICAgY29uc3QgejEgPSBjb29yZDFbMl0gLyB3MTtcblxuICAgICAgICBjb25zdCB0ID0gejAgPT09IHoxID8gMCA6ICh0YXJnZXRaIC0gejApIC8gKHoxIC0gejApO1xuXG4gICAgICAgIHJldHVybiBuZXcgTWVyY2F0b3JDb29yZGluYXRlKFxuICAgICAgICAgICAgaW50ZXJwb2xhdGUoeDAsIHgxLCB0KSAvIHRoaXMud29ybGRTaXplLFxuICAgICAgICAgICAgaW50ZXJwb2xhdGUoeTAsIHkxLCB0KSAvIHRoaXMud29ybGRTaXplKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhIGNvb3JkaW5hdGUsIHJldHVybiB0aGUgc2NyZWVuIHBvaW50IHRoYXQgY29ycmVzcG9uZHMgdG8gaXRcbiAgICAgKiBAcGFyYW0ge0Nvb3JkaW5hdGV9IGNvb3JkXG4gICAgICogQHJldHVybnMge1BvaW50fSBzY3JlZW4gcG9pbnRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvb3JkaW5hdGVQb2ludChjb29yZDogTWVyY2F0b3JDb29yZGluYXRlKSB7XG4gICAgICAgIGNvbnN0IHAgPSBbY29vcmQueCAqIHRoaXMud29ybGRTaXplLCBjb29yZC55ICogdGhpcy53b3JsZFNpemUsIDAsIDFdO1xuICAgICAgICB2ZWM0LnRyYW5zZm9ybU1hdDQocCwgcCwgdGhpcy5waXhlbE1hdHJpeCk7XG4gICAgICAgIHJldHVybiBuZXcgUG9pbnQocFswXSAvIHBbM10sIHBbMV0gLyBwWzNdKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBtYXAncyBnZW9ncmFwaGljYWwgYm91bmRzLiBXaGVuIHRoZSBiZWFyaW5nIG9yIHBpdGNoIGlzIG5vbi16ZXJvLCB0aGUgdmlzaWJsZSByZWdpb24gaXMgbm90XG4gICAgICogYW4gYXhpcy1hbGlnbmVkIHJlY3RhbmdsZSwgYW5kIHRoZSByZXN1bHQgaXMgdGhlIHNtYWxsZXN0IGJvdW5kcyB0aGF0IGVuY29tcGFzc2VzIHRoZSB2aXNpYmxlIHJlZ2lvbi5cbiAgICAgKiBAcmV0dXJucyB7TG5nTGF0Qm91bmRzfSBSZXR1cm5zIGEge0BsaW5rIExuZ0xhdEJvdW5kc30gb2JqZWN0IGRlc2NyaWJpbmcgdGhlIG1hcCdzIGdlb2dyYXBoaWNhbCBib3VuZHMuXG4gICAgICovXG4gICAgZ2V0Qm91bmRzKCk6IExuZ0xhdEJvdW5kcyB7XG4gICAgICAgIHJldHVybiBuZXcgTG5nTGF0Qm91bmRzKClcbiAgICAgICAgICAgIC5leHRlbmQodGhpcy5wb2ludExvY2F0aW9uKG5ldyBQb2ludCgwLCAwKSkpXG4gICAgICAgICAgICAuZXh0ZW5kKHRoaXMucG9pbnRMb2NhdGlvbihuZXcgUG9pbnQodGhpcy53aWR0aCwgMCkpKVxuICAgICAgICAgICAgLmV4dGVuZCh0aGlzLnBvaW50TG9jYXRpb24obmV3IFBvaW50KHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KSkpXG4gICAgICAgICAgICAuZXh0ZW5kKHRoaXMucG9pbnRMb2NhdGlvbihuZXcgUG9pbnQoMCwgdGhpcy5oZWlnaHQpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbWF4aW11bSBnZW9ncmFwaGljYWwgYm91bmRzIHRoZSBtYXAgaXMgY29uc3RyYWluZWQgdG8sIG9yIGBudWxsYCBpZiBub25lIHNldC5cbiAgICAgKiBAcmV0dXJucyB7TG5nTGF0Qm91bmRzfSB7QGxpbmsgTG5nTGF0Qm91bmRzfVxuICAgICAqL1xuICAgIGdldE1heEJvdW5kcygpOiBMbmdMYXRCb3VuZHMgfCBudWxsIHtcbiAgICAgICAgaWYgKCF0aGlzLmxhdFJhbmdlIHx8IHRoaXMubGF0UmFuZ2UubGVuZ3RoICE9PSAyIHx8XG4gICAgICAgICAgICAhdGhpcy5sbmdSYW5nZSB8fCB0aGlzLmxuZ1JhbmdlLmxlbmd0aCAhPT0gMikgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBMbmdMYXRCb3VuZHMoW3RoaXMubG5nUmFuZ2VbMF0sIHRoaXMubGF0UmFuZ2VbMF1dLCBbdGhpcy5sbmdSYW5nZVsxXSwgdGhpcy5sYXRSYW5nZVsxXV0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgb3IgY2xlYXJzIHRoZSBtYXAncyBnZW9ncmFwaGljYWwgY29uc3RyYWludHMuXG4gICAgICogQHBhcmFtIHtMbmdMYXRCb3VuZHN9IGJvdW5kcyBBIHtAbGluayBMbmdMYXRCb3VuZHN9IG9iamVjdCBkZXNjcmliaW5nIHRoZSBuZXcgZ2VvZ3JhcGhpYyBib3VuZGFyaWVzIG9mIHRoZSBtYXAuXG4gICAgICovXG4gICAgc2V0TWF4Qm91bmRzKGJvdW5kcz86IExuZ0xhdEJvdW5kcykge1xuICAgICAgICBpZiAoYm91bmRzKSB7XG4gICAgICAgICAgICB0aGlzLmxuZ1JhbmdlID0gW2JvdW5kcy5nZXRXZXN0KCksIGJvdW5kcy5nZXRFYXN0KCldO1xuICAgICAgICAgICAgdGhpcy5sYXRSYW5nZSA9IFtib3VuZHMuZ2V0U291dGgoKSwgYm91bmRzLmdldE5vcnRoKCldO1xuICAgICAgICAgICAgdGhpcy5fY29uc3RyYWluKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxuZ1JhbmdlID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMubGF0UmFuZ2UgPSBbLXRoaXMubWF4VmFsaWRMYXRpdHVkZSwgdGhpcy5tYXhWYWxpZExhdGl0dWRlXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgcG9zTWF0cml4IHRoYXQsIGdpdmVuIGEgdGlsZSBjb29yZGluYXRlLCB3b3VsZCBiZSB1c2VkIHRvIGRpc3BsYXkgdGhlIHRpbGUgb24gYSBtYXAuXG4gICAgICogQHBhcmFtIHtVbndyYXBwZWRUaWxlSUR9IHVud3JhcHBlZFRpbGVJRDtcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNhbGN1bGF0ZVBvc01hdHJpeCh1bndyYXBwZWRUaWxlSUQ6IFVud3JhcHBlZFRpbGVJRCwgYWxpZ25lZDogYm9vbGVhbiA9IGZhbHNlKTogRmxvYXQzMkFycmF5IHtcbiAgICAgICAgY29uc3QgcG9zTWF0cml4S2V5ID0gdW53cmFwcGVkVGlsZUlELmtleTtcbiAgICAgICAgY29uc3QgY2FjaGUgPSBhbGlnbmVkID8gdGhpcy5fYWxpZ25lZFBvc01hdHJpeENhY2hlIDogdGhpcy5fcG9zTWF0cml4Q2FjaGU7XG4gICAgICAgIGlmIChjYWNoZVtwb3NNYXRyaXhLZXldKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVbcG9zTWF0cml4S2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNhbm9uaWNhbCA9IHVud3JhcHBlZFRpbGVJRC5jYW5vbmljYWw7XG4gICAgICAgIGNvbnN0IHNjYWxlID0gdGhpcy53b3JsZFNpemUgLyB0aGlzLnpvb21TY2FsZShjYW5vbmljYWwueik7XG4gICAgICAgIGNvbnN0IHVud3JhcHBlZFggPSBjYW5vbmljYWwueCArIE1hdGgucG93KDIsIGNhbm9uaWNhbC56KSAqIHVud3JhcHBlZFRpbGVJRC53cmFwO1xuXG4gICAgICAgIGNvbnN0IHBvc01hdHJpeCA9IG1hdDQuaWRlbnRpdHkobmV3IEZsb2F0NjRBcnJheSgxNikpO1xuICAgICAgICBtYXQ0LnRyYW5zbGF0ZShwb3NNYXRyaXgsIHBvc01hdHJpeCwgW3Vud3JhcHBlZFggKiBzY2FsZSwgY2Fub25pY2FsLnkgKiBzY2FsZSwgMF0pO1xuICAgICAgICBtYXQ0LnNjYWxlKHBvc01hdHJpeCwgcG9zTWF0cml4LCBbc2NhbGUgLyBFWFRFTlQsIHNjYWxlIC8gRVhURU5ULCAxXSk7XG4gICAgICAgIG1hdDQubXVsdGlwbHkocG9zTWF0cml4LCBhbGlnbmVkID8gdGhpcy5hbGlnbmVkUHJvak1hdHJpeCA6IHRoaXMucHJvak1hdHJpeCwgcG9zTWF0cml4KTtcblxuICAgICAgICBjYWNoZVtwb3NNYXRyaXhLZXldID0gbmV3IEZsb2F0MzJBcnJheShwb3NNYXRyaXgpO1xuICAgICAgICByZXR1cm4gY2FjaGVbcG9zTWF0cml4S2V5XTtcbiAgICB9XG5cbiAgICBjdXN0b21MYXllck1hdHJpeCgpOiBBcnJheTxudW1iZXI+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWVyY2F0b3JNYXRyaXguc2xpY2UoKTtcbiAgICB9XG5cbiAgICBfY29uc3RyYWluKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2VudGVyIHx8ICF0aGlzLndpZHRoIHx8ICF0aGlzLmhlaWdodCB8fCB0aGlzLl9jb25zdHJhaW5pbmcpIHJldHVybjtcblxuICAgICAgICB0aGlzLl9jb25zdHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgICAgIGxldCBtaW5ZID0gLTkwO1xuICAgICAgICBsZXQgbWF4WSA9IDkwO1xuICAgICAgICBsZXQgbWluWCA9IC0xODA7XG4gICAgICAgIGxldCBtYXhYID0gMTgwO1xuICAgICAgICBsZXQgc3ksIHN4LCB4MiwgeTI7XG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLnNpemUsXG4gICAgICAgICAgICB1bm1vZGlmaWVkID0gdGhpcy5fdW5tb2RpZmllZDtcblxuICAgICAgICBpZiAodGhpcy5sYXRSYW5nZSkge1xuICAgICAgICAgICAgY29uc3QgbGF0UmFuZ2UgPSB0aGlzLmxhdFJhbmdlO1xuICAgICAgICAgICAgbWluWSA9IG1lcmNhdG9yWWZyb21MYXQobGF0UmFuZ2VbMV0pICogdGhpcy53b3JsZFNpemU7XG4gICAgICAgICAgICBtYXhZID0gbWVyY2F0b3JZZnJvbUxhdChsYXRSYW5nZVswXSkgKiB0aGlzLndvcmxkU2l6ZTtcbiAgICAgICAgICAgIHN5ID0gbWF4WSAtIG1pblkgPCBzaXplLnkgPyBzaXplLnkgLyAobWF4WSAtIG1pblkpIDogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmxuZ1JhbmdlKSB7XG4gICAgICAgICAgICBjb25zdCBsbmdSYW5nZSA9IHRoaXMubG5nUmFuZ2U7XG4gICAgICAgICAgICBtaW5YID0gbWVyY2F0b3JYZnJvbUxuZyhsbmdSYW5nZVswXSkgKiB0aGlzLndvcmxkU2l6ZTtcbiAgICAgICAgICAgIG1heFggPSBtZXJjYXRvclhmcm9tTG5nKGxuZ1JhbmdlWzFdKSAqIHRoaXMud29ybGRTaXplO1xuICAgICAgICAgICAgc3ggPSBtYXhYIC0gbWluWCA8IHNpemUueCA/IHNpemUueCAvIChtYXhYIC0gbWluWCkgOiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcG9pbnQgPSB0aGlzLnBvaW50O1xuXG4gICAgICAgIC8vIGhvdyBtdWNoIHRoZSBtYXAgc2hvdWxkIHNjYWxlIHRvIGZpdCB0aGUgc2NyZWVuIGludG8gZ2l2ZW4gbGF0aXR1ZGUvbG9uZ2l0dWRlIHJhbmdlc1xuICAgICAgICBjb25zdCBzID0gTWF0aC5tYXgoc3ggfHwgMCwgc3kgfHwgMCk7XG5cbiAgICAgICAgaWYgKHMpIHtcbiAgICAgICAgICAgIHRoaXMuY2VudGVyID0gdGhpcy51bnByb2plY3QobmV3IFBvaW50KFxuICAgICAgICAgICAgICAgIHN4ID8gKG1heFggKyBtaW5YKSAvIDIgOiBwb2ludC54LFxuICAgICAgICAgICAgICAgIHN5ID8gKG1heFkgKyBtaW5ZKSAvIDIgOiBwb2ludC55KSk7XG4gICAgICAgICAgICB0aGlzLnpvb20gKz0gdGhpcy5zY2FsZVpvb20ocyk7XG4gICAgICAgICAgICB0aGlzLl91bm1vZGlmaWVkID0gdW5tb2RpZmllZDtcbiAgICAgICAgICAgIHRoaXMuX2NvbnN0cmFpbmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubGF0UmFuZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHkgPSBwb2ludC55LFxuICAgICAgICAgICAgICAgIGgyID0gc2l6ZS55IC8gMjtcblxuICAgICAgICAgICAgaWYgKHkgLSBoMiA8IG1pblkpIHkyID0gbWluWSArIGgyO1xuICAgICAgICAgICAgaWYgKHkgKyBoMiA+IG1heFkpIHkyID0gbWF4WSAtIGgyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubG5nUmFuZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHggPSBwb2ludC54LFxuICAgICAgICAgICAgICAgIHcyID0gc2l6ZS54IC8gMjtcblxuICAgICAgICAgICAgaWYgKHggLSB3MiA8IG1pblgpIHgyID0gbWluWCArIHcyO1xuICAgICAgICAgICAgaWYgKHggKyB3MiA+IG1heFgpIHgyID0gbWF4WCAtIHcyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcGFuIHRoZSBtYXAgaWYgdGhlIHNjcmVlbiBnb2VzIG9mZiB0aGUgcmFuZ2VcbiAgICAgICAgaWYgKHgyICE9PSB1bmRlZmluZWQgfHwgeTIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5jZW50ZXIgPSB0aGlzLnVucHJvamVjdChuZXcgUG9pbnQoXG4gICAgICAgICAgICAgICAgeDIgIT09IHVuZGVmaW5lZCA/IHgyIDogcG9pbnQueCxcbiAgICAgICAgICAgICAgICB5MiAhPT0gdW5kZWZpbmVkID8geTIgOiBwb2ludC55KSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl91bm1vZGlmaWVkID0gdW5tb2RpZmllZDtcbiAgICAgICAgdGhpcy5fY29uc3RyYWluaW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgX2NhbGNNYXRyaWNlcygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmhlaWdodCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGhhbGZGb3YgPSB0aGlzLl9mb3YgLyAyO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSB0aGlzLmNlbnRlck9mZnNldDtcbiAgICAgICAgdGhpcy5jYW1lcmFUb0NlbnRlckRpc3RhbmNlID0gMC41IC8gTWF0aC50YW4oaGFsZkZvdikgKiB0aGlzLmhlaWdodDtcblxuICAgICAgICAvLyBGaW5kIHRoZSBkaXN0YW5jZSBmcm9tIHRoZSBjZW50ZXIgcG9pbnQgW3dpZHRoLzIgKyBvZmZzZXQueCwgaGVpZ2h0LzIgKyBvZmZzZXQueV0gdG8gdGhlXG4gICAgICAgIC8vIGNlbnRlciB0b3AgcG9pbnQgW3dpZHRoLzIgKyBvZmZzZXQueCwgMF0gaW4gWiB1bml0cywgdXNpbmcgdGhlIGxhdyBvZiBzaW5lcy5cbiAgICAgICAgLy8gMSBaIHVuaXQgaXMgZXF1aXZhbGVudCB0byAxIGhvcml6b250YWwgcHggYXQgdGhlIGNlbnRlciBvZiB0aGUgbWFwXG4gICAgICAgIC8vICh0aGUgZGlzdGFuY2UgYmV0d2Vlblt3aWR0aC8yLCBoZWlnaHQvMl0gYW5kIFt3aWR0aC8yICsgMSwgaGVpZ2h0LzJdKVxuICAgICAgICBjb25zdCBncm91bmRBbmdsZSA9IE1hdGguUEkgLyAyICsgdGhpcy5fcGl0Y2g7XG4gICAgICAgIGNvbnN0IGZvdkFib3ZlQ2VudGVyID0gdGhpcy5fZm92ICogKDAuNSArIG9mZnNldC55IC8gdGhpcy5oZWlnaHQpO1xuICAgICAgICBjb25zdCB0b3BIYWxmU3VyZmFjZURpc3RhbmNlID0gTWF0aC5zaW4oZm92QWJvdmVDZW50ZXIpICogdGhpcy5jYW1lcmFUb0NlbnRlckRpc3RhbmNlIC8gTWF0aC5zaW4oY2xhbXAoTWF0aC5QSSAtIGdyb3VuZEFuZ2xlIC0gZm92QWJvdmVDZW50ZXIsIDAuMDEsIE1hdGguUEkgLSAwLjAxKSk7XG4gICAgICAgIGNvbnN0IHBvaW50ID0gdGhpcy5wb2ludDtcbiAgICAgICAgY29uc3QgeCA9IHBvaW50LngsIHkgPSBwb2ludC55O1xuXG4gICAgICAgIC8vIENhbGN1bGF0ZSB6IGRpc3RhbmNlIG9mIHRoZSBmYXJ0aGVzdCBmcmFnbWVudCB0aGF0IHNob3VsZCBiZSByZW5kZXJlZC5cbiAgICAgICAgY29uc3QgZnVydGhlc3REaXN0YW5jZSA9IE1hdGguY29zKE1hdGguUEkgLyAyIC0gdGhpcy5fcGl0Y2gpICogdG9wSGFsZlN1cmZhY2VEaXN0YW5jZSArIHRoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZTtcbiAgICAgICAgLy8gQWRkIGEgYml0IGV4dHJhIHRvIGF2b2lkIHByZWNpc2lvbiBwcm9ibGVtcyB3aGVuIGEgZnJhZ21lbnQncyBkaXN0YW5jZSBpcyBleGFjdGx5IGBmdXJ0aGVzdERpc3RhbmNlYFxuICAgICAgICBjb25zdCBmYXJaID0gZnVydGhlc3REaXN0YW5jZSAqIDEuMDE7XG5cbiAgICAgICAgLy8gVGhlIGxhcmdlciB0aGUgdmFsdWUgb2YgbmVhclogaXNcbiAgICAgICAgLy8gLSB0aGUgbW9yZSBkZXB0aCBwcmVjaXNpb24gaXMgYXZhaWxhYmxlIGZvciBmZWF0dXJlcyAoZ29vZClcbiAgICAgICAgLy8gLSBjbGlwcGluZyBzdGFydHMgYXBwZWFyaW5nIHNvb25lciB3aGVuIHRoZSBjYW1lcmEgaXMgY2xvc2UgdG8gM2QgZmVhdHVyZXMgKGJhZClcbiAgICAgICAgLy9cbiAgICAgICAgLy8gU21hbGxlciB2YWx1ZXMgd29ya2VkIHdlbGwgZm9yIG1hcGJveC1nbC1qcyBidXQgZGVja2dsIHdhcyBlbmNvdW50ZXJpbmcgcHJlY2lzaW9uIGlzc3Vlc1xuICAgICAgICAvLyB3aGVuIHJlbmRlcmluZyBpdCdzIGxheWVycyB1c2luZyBjdXN0b20gbGF5ZXJzLiBUaGlzIHZhbHVlIHdhcyBleHBlcmltZW50YWxseSBjaG9zZW4gYW5kXG4gICAgICAgIC8vIHNlZW1zIHRvIHNvbHZlIHotZmlnaHRpbmcgaXNzdWVzIGluIGRlY2tnbCB3aGlsZSBub3QgY2xpcHBpbmcgYnVpbGRpbmdzIHRvbyBjbG9zZSB0byB0aGUgY2FtZXJhLlxuICAgICAgICBjb25zdCBuZWFyWiA9IHRoaXMuaGVpZ2h0IC8gNTA7XG5cbiAgICAgICAgLy8gbWF0cml4IGZvciBjb252ZXJzaW9uIGZyb20gbG9jYXRpb24gdG8gR0wgY29vcmRpbmF0ZXMgKC0xIC4uIDEpXG4gICAgICAgIGxldCBtID0gbmV3IEZsb2F0NjRBcnJheSgxNik7XG4gICAgICAgIG1hdDQucGVyc3BlY3RpdmUobSwgdGhpcy5fZm92LCB0aGlzLndpZHRoIC8gdGhpcy5oZWlnaHQsIG5lYXJaLCBmYXJaKTtcblxuICAgICAgICAvL0FwcGx5IGNlbnRlciBvZiBwZXJzcGVjdGl2ZSBvZmZzZXRcbiAgICAgICAgbVs4XSA9IC1vZmZzZXQueCAqIDIgLyB0aGlzLndpZHRoO1xuICAgICAgICBtWzldID0gb2Zmc2V0LnkgKiAyIC8gdGhpcy5oZWlnaHQ7XG5cbiAgICAgICAgbWF0NC5zY2FsZShtLCBtLCBbMSwgLTEsIDFdKTtcbiAgICAgICAgbWF0NC50cmFuc2xhdGUobSwgbSwgWzAsIDAsIC10aGlzLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2VdKTtcbiAgICAgICAgbWF0NC5yb3RhdGVYKG0sIG0sIHRoaXMuX3BpdGNoKTtcbiAgICAgICAgbWF0NC5yb3RhdGVaKG0sIG0sIHRoaXMuYW5nbGUpO1xuICAgICAgICBtYXQ0LnRyYW5zbGF0ZShtLCBtLCBbLXgsIC15LCAwXSk7XG5cbiAgICAgICAgLy8gVGhlIG1lcmNhdG9yTWF0cml4IGNhbiBiZSB1c2VkIHRvIHRyYW5zZm9ybSBwb2ludHMgZnJvbSBtZXJjYXRvciBjb29yZGluYXRlc1xuICAgICAgICAvLyAoWzAsIDBdIG53LCBbMSwgMV0gc2UpIHRvIEdMIGNvb3JkaW5hdGVzLlxuICAgICAgICB0aGlzLm1lcmNhdG9yTWF0cml4ID0gbWF0NC5zY2FsZShbXSwgbSwgW3RoaXMud29ybGRTaXplLCB0aGlzLndvcmxkU2l6ZSwgdGhpcy53b3JsZFNpemVdKTtcblxuICAgICAgICAvLyBzY2FsZSB2ZXJ0aWNhbGx5IHRvIG1ldGVycyBwZXIgcGl4ZWwgKGludmVyc2Ugb2YgZ3JvdW5kIHJlc29sdXRpb24pOlxuICAgICAgICBtYXQ0LnNjYWxlKG0sIG0sIFsxLCAxLCBtZXJjYXRvclpmcm9tQWx0aXR1ZGUoMSwgdGhpcy5jZW50ZXIubGF0KSAqIHRoaXMud29ybGRTaXplLCAxXSk7XG5cbiAgICAgICAgdGhpcy5wcm9qTWF0cml4ID0gbTtcbiAgICAgICAgdGhpcy5pbnZQcm9qTWF0cml4ID0gbWF0NC5pbnZlcnQoW10sIHRoaXMucHJvak1hdHJpeCk7XG5cbiAgICAgICAgLy8gTWFrZSBhIHNlY29uZCBwcm9qZWN0aW9uIG1hdHJpeCB0aGF0IGlzIGFsaWduZWQgdG8gYSBwaXhlbCBncmlkIGZvciByZW5kZXJpbmcgcmFzdGVyIHRpbGVzLlxuICAgICAgICAvLyBXZSdyZSByb3VuZGluZyB0aGUgKGZsb2F0aW5nIHBvaW50KSB4L3kgdmFsdWVzIHRvIGFjaGlldmUgdG8gYXZvaWQgcmVuZGVyaW5nIHJhc3RlciBpbWFnZXMgdG8gZnJhY3Rpb25hbFxuICAgICAgICAvLyBjb29yZGluYXRlcy4gQWRkaXRpb25hbGx5LCB3ZSBhZGp1c3QgYnkgaGFsZiBhIHBpeGVsIGluIGVpdGhlciBkaXJlY3Rpb24gaW4gY2FzZSB0aGF0IHZpZXdwb3J0IGRpbWVuc2lvblxuICAgICAgICAvLyBpcyBhbiBvZGQgaW50ZWdlciB0byBwcmVzZXJ2ZSByZW5kZXJpbmcgdG8gdGhlIHBpeGVsIGdyaWQuIFdlJ3JlIHJvdGF0aW5nIHRoaXMgc2hpZnQgYmFzZWQgb24gdGhlIGFuZ2xlXG4gICAgICAgIC8vIG9mIHRoZSB0cmFuc2Zvcm1hdGlvbiBzbyB0aGF0IDDDgsKwLCA5MMOCwrAsIDE4MMOCwrAsIGFuZCAyNzDDgsKwIHJhc3RlcnMgYXJlIGNyaXNwLCBhbmQgYWRqdXN0IHRoZSBzaGlmdCBzbyB0aGF0XG4gICAgICAgIC8vIGl0IGlzIGFsd2F5cyA8PSAwLjUgcGl4ZWxzLlxuICAgICAgICBjb25zdCB4U2hpZnQgPSAodGhpcy53aWR0aCAlIDIpIC8gMiwgeVNoaWZ0ID0gKHRoaXMuaGVpZ2h0ICUgMikgLyAyLFxuICAgICAgICAgICAgYW5nbGVDb3MgPSBNYXRoLmNvcyh0aGlzLmFuZ2xlKSwgYW5nbGVTaW4gPSBNYXRoLnNpbih0aGlzLmFuZ2xlKSxcbiAgICAgICAgICAgIGR4ID0geCAtIE1hdGgucm91bmQoeCkgKyBhbmdsZUNvcyAqIHhTaGlmdCArIGFuZ2xlU2luICogeVNoaWZ0LFxuICAgICAgICAgICAgZHkgPSB5IC0gTWF0aC5yb3VuZCh5KSArIGFuZ2xlQ29zICogeVNoaWZ0ICsgYW5nbGVTaW4gKiB4U2hpZnQ7XG4gICAgICAgIGNvbnN0IGFsaWduZWRNID0gbmV3IEZsb2F0NjRBcnJheShtKTtcbiAgICAgICAgbWF0NC50cmFuc2xhdGUoYWxpZ25lZE0sIGFsaWduZWRNLCBbIGR4ID4gMC41ID8gZHggLSAxIDogZHgsIGR5ID4gMC41ID8gZHkgLSAxIDogZHksIDAgXSk7XG4gICAgICAgIHRoaXMuYWxpZ25lZFByb2pNYXRyaXggPSBhbGlnbmVkTTtcblxuICAgICAgICBtID0gbWF0NC5jcmVhdGUoKTtcbiAgICAgICAgbWF0NC5zY2FsZShtLCBtLCBbdGhpcy53aWR0aCAvIDIsIC10aGlzLmhlaWdodCAvIDIsIDFdKTtcbiAgICAgICAgbWF0NC50cmFuc2xhdGUobSwgbSwgWzEsIC0xLCAwXSk7XG4gICAgICAgIHRoaXMubGFiZWxQbGFuZU1hdHJpeCA9IG07XG5cbiAgICAgICAgbSA9IG1hdDQuY3JlYXRlKCk7XG4gICAgICAgIG1hdDQuc2NhbGUobSwgbSwgWzEsIC0xLCAxXSk7XG4gICAgICAgIG1hdDQudHJhbnNsYXRlKG0sIG0sIFstMSwgLTEsIDBdKTtcbiAgICAgICAgbWF0NC5zY2FsZShtLCBtLCBbMiAvIHRoaXMud2lkdGgsIDIgLyB0aGlzLmhlaWdodCwgMV0pO1xuICAgICAgICB0aGlzLmdsQ29vcmRNYXRyaXggPSBtO1xuXG4gICAgICAgIC8vIG1hdHJpeCBmb3IgY29udmVyc2lvbiBmcm9tIGxvY2F0aW9uIHRvIHNjcmVlbiBjb29yZGluYXRlc1xuICAgICAgICB0aGlzLnBpeGVsTWF0cml4ID0gbWF0NC5tdWx0aXBseShuZXcgRmxvYXQ2NEFycmF5KDE2KSwgdGhpcy5sYWJlbFBsYW5lTWF0cml4LCB0aGlzLnByb2pNYXRyaXgpO1xuXG4gICAgICAgIC8vIGludmVyc2UgbWF0cml4IGZvciBjb252ZXJzaW9uIGZyb20gc2NyZWVuIGNvb3JkaW5hZXMgdG8gbG9jYXRpb25cbiAgICAgICAgbSA9IG1hdDQuaW52ZXJ0KG5ldyBGbG9hdDY0QXJyYXkoMTYpLCB0aGlzLnBpeGVsTWF0cml4KTtcbiAgICAgICAgaWYgKCFtKSB0aHJvdyBuZXcgRXJyb3IoXCJmYWlsZWQgdG8gaW52ZXJ0IG1hdHJpeFwiKTtcbiAgICAgICAgdGhpcy5waXhlbE1hdHJpeEludmVyc2UgPSBtO1xuXG4gICAgICAgIHRoaXMuX3Bvc01hdHJpeENhY2hlID0ge307XG4gICAgICAgIHRoaXMuX2FsaWduZWRQb3NNYXRyaXhDYWNoZSA9IHt9O1xuICAgIH1cblxuICAgIG1heFBpdGNoU2NhbGVGYWN0b3IoKSB7XG4gICAgICAgIC8vIGNhbGNNYXRyaWNlcyBoYXNuJ3QgcnVuIHlldFxuICAgICAgICBpZiAoIXRoaXMucGl4ZWxNYXRyaXhJbnZlcnNlKSByZXR1cm4gMTtcblxuICAgICAgICBjb25zdCBjb29yZCA9IHRoaXMucG9pbnRDb29yZGluYXRlKG5ldyBQb2ludCgwLCAwKSk7XG4gICAgICAgIGNvbnN0IHAgPSBbY29vcmQueCAqIHRoaXMud29ybGRTaXplLCBjb29yZC55ICogdGhpcy53b3JsZFNpemUsIDAsIDFdO1xuICAgICAgICBjb25zdCB0b3BQb2ludCA9IHZlYzQudHJhbnNmb3JtTWF0NChwLCBwLCB0aGlzLnBpeGVsTWF0cml4KTtcbiAgICAgICAgcmV0dXJuIHRvcFBvaW50WzNdIC8gdGhpcy5jYW1lcmFUb0NlbnRlckRpc3RhbmNlO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogVGhlIGNhbWVyYSBsb29rcyBhdCB0aGUgbWFwIGZyb20gYSAzRCAobG5nLCBsYXQsIGFsdGl0dWRlKSBsb2NhdGlvbi4gTGV0J3MgdXNlIGBjYW1lcmFMb2NhdGlvbmBcbiAgICAgKiBhcyB0aGUgbmFtZSBmb3IgdGhlIGxvY2F0aW9uIHVuZGVyIHRoZSBjYW1lcmEgYW5kIG9uIHRoZSBzdXJmYWNlIG9mIHRoZSBlYXJ0aCAobG5nLCBsYXQsIDApLlxuICAgICAqIGBjYW1lcmFQb2ludGAgaXMgdGhlIHByb2plY3RlZCBwb3NpdGlvbiBvZiB0aGUgYGNhbWVyYUxvY2F0aW9uYC5cbiAgICAgKlxuICAgICAqIFRoaXMgcG9pbnQgaXMgdXNlZnVsIHRvIHVzIGJlY2F1c2Ugb25seSBmaWxsLWV4dHJ1c2lvbnMgdGhhdCBhcmUgYmV0d2VlbiBgY2FtZXJhUG9pbnRgIGFuZFxuICAgICAqIHRoZSBxdWVyeSBwb2ludCBvbiB0aGUgc3VyZmFjZSBvZiB0aGUgZWFydGggY2FuIGV4dGVuZCBhbmQgaW50ZXJzZWN0IHRoZSBxdWVyeS5cbiAgICAgKlxuICAgICAqIFdoZW4gdGhlIG1hcCBpcyBub3QgcGl0Y2hlZCB0aGUgYGNhbWVyYVBvaW50YCBpcyBlcXVpdmFsZW50IHRvIHRoZSBjZW50ZXIgb2YgdGhlIG1hcCBiZWNhdXNlXG4gICAgICogdGhlIGNhbWVyYSBpcyByaWdodCBhYm92ZSB0aGUgY2VudGVyIG9mIHRoZSBtYXAuXG4gICAgICovXG4gICAgZ2V0Q2FtZXJhUG9pbnQoKSB7XG4gICAgICAgIGNvbnN0IHBpdGNoID0gdGhpcy5fcGl0Y2g7XG4gICAgICAgIGNvbnN0IHlPZmZzZXQgPSBNYXRoLnRhbihwaXRjaCkgKiAodGhpcy5jYW1lcmFUb0NlbnRlckRpc3RhbmNlIHx8IDEpO1xuICAgICAgICByZXR1cm4gdGhpcy5jZW50ZXJQb2ludC5hZGQobmV3IFBvaW50KDAsIHlPZmZzZXQpKTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIFdoZW4gdGhlIG1hcCBpcyBwaXRjaGVkLCBzb21lIG9mIHRoZSAzRCBmZWF0dXJlcyB0aGF0IGludGVyc2VjdCBhIHF1ZXJ5IHdpbGwgbm90IGludGVyc2VjdFxuICAgICAqIHRoZSBxdWVyeSBhdCB0aGUgc3VyZmFjZSBvZiB0aGUgZWFydGguIEluc3RlYWQgdGhlIGZlYXR1cmUgbWF5IGJlIGNsb3NlciBhbmQgb25seSBpbnRlcnNlY3RcbiAgICAgKiB0aGUgcXVlcnkgYmVjYXVzZSBpdCBleHRydWRlcyBpbnRvIHRoZSBhaXIuXG4gICAgICpcbiAgICAgKiBUaGlzIHJldHVybnMgYSBnZW9tZXRyeSB0aGF0IGluY2x1ZGVzIGFsbCBvZiB0aGUgb3JpZ2luYWwgcXVlcnkgYXMgd2VsbCBhcyBhbGwgcG9zc2libGUgYXJlcyBvZiB0aGVcbiAgICAgKiBzY3JlZW4gd2hlcmUgdGhlICpiYXNlKiBvZiBhIHZpc2libGUgZXh0cnVzaW9uIGNvdWxkIGJlLlxuICAgICAqICAtIEZvciBwb2ludCBxdWVyaWVzLCB0aGUgbGluZSBmcm9tIHRoZSBxdWVyeSBwb2ludCB0byB0aGUgXCJjYW1lcmEgcG9pbnRcIlxuICAgICAqICAtIEZvciBvdGhlciBnZW9tZXRyaWVzLCB0aGUgZW52ZWxvcGUgb2YgdGhlIHF1ZXJ5IGdlb21ldHJ5IGFuZCB0aGUgXCJjYW1lcmEgcG9pbnRcIlxuICAgICAqL1xuICAgIGdldENhbWVyYVF1ZXJ5R2VvbWV0cnkocXVlcnlHZW9tZXRyeTogQXJyYXk8UG9pbnQ+KTogQXJyYXk8UG9pbnQ+IHtcbiAgICAgICAgY29uc3QgYyA9IHRoaXMuZ2V0Q2FtZXJhUG9pbnQoKTtcblxuICAgICAgICBpZiAocXVlcnlHZW9tZXRyeS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBbcXVlcnlHZW9tZXRyeVswXSwgY107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbWluWCA9IGMueDtcbiAgICAgICAgICAgIGxldCBtaW5ZID0gYy55O1xuICAgICAgICAgICAgbGV0IG1heFggPSBjLng7XG4gICAgICAgICAgICBsZXQgbWF4WSA9IGMueTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcCBvZiBxdWVyeUdlb21ldHJ5KSB7XG4gICAgICAgICAgICAgICAgbWluWCA9IE1hdGgubWluKG1pblgsIHAueCk7XG4gICAgICAgICAgICAgICAgbWluWSA9IE1hdGgubWluKG1pblksIHAueSk7XG4gICAgICAgICAgICAgICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIHAueCk7XG4gICAgICAgICAgICAgICAgbWF4WSA9IE1hdGgubWF4KG1heFksIHAueSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIG5ldyBQb2ludChtaW5YLCBtaW5ZKSxcbiAgICAgICAgICAgICAgICBuZXcgUG9pbnQobWF4WCwgbWluWSksXG4gICAgICAgICAgICAgICAgbmV3IFBvaW50KG1heFgsIG1heFkpLFxuICAgICAgICAgICAgICAgIG5ldyBQb2ludChtaW5YLCBtYXhZKSxcbiAgICAgICAgICAgICAgICBuZXcgUG9pbnQobWluWCwgbWluWSlcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRyYW5zZm9ybTtcbiIsIi8vIEBmbG93IHN0cmljdFxuXG4vKipcbiAqIFRocm90dGxlIHRoZSBnaXZlbiBmdW5jdGlvbiB0byBydW4gYXQgbW9zdCBldmVyeSBgcGVyaW9kYCBtaWxsaXNlY29uZHMuXG4gVGhyb3R0bGUgdGhlIGdpdmVuIGZ1bmN0aW9uIHRvIHJ1biBhdCBtb3N0IGV2ZXJ5IHBlcmlvZCBtaWxsaXNlY29uZHMuXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0aHJvdHRsZShmbjogKCkgPT4gdm9pZCwgdGltZTogbnVtYmVyKTogKCkgPT4gP1RpbWVvdXRJRCB7XG4gICAgbGV0IHBlbmRpbmcgPSBmYWxzZTtcbiAgICBsZXQgdGltZXJJZDogP1RpbWVvdXRJRCA9IG51bGw7XG5cbiAgICBjb25zdCBsYXRlciA9ICgpID0+IHtcbiAgICAgICAgdGltZXJJZCA9IG51bGw7XG4gICAgICAgIGlmIChwZW5kaW5nKSB7XG4gICAgICAgICAgICBmbigpO1xuICAgICAgICAgICAgdGltZXJJZCA9IHNldFRpbWVvdXQobGF0ZXIsIHRpbWUpO1xuICAgICAgICAgICAgcGVuZGluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHBlbmRpbmcgPSB0cnVlO1xuICAgICAgICBpZiAoIXRpbWVySWQpIHtcbiAgICAgICAgICAgIGxhdGVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRpbWVySWQ7XG4gICAgfTtcbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7YmluZEFsbH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB3aW5kb3cgZnJvbSAnLi4vdXRpbC93aW5kb3cnO1xuaW1wb3J0IHRocm90dGxlIGZyb20gJy4uL3V0aWwvdGhyb3R0bGUnO1xuXG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi9tYXAnO1xuXG4vKlxuICogQWRkcyB0aGUgbWFwJ3MgcG9zaXRpb24gdG8gaXRzIHBhZ2UncyBsb2NhdGlvbiBoYXNoLlxuICogUGFzc2VkIGFzIGFuIG9wdGlvbiB0byB0aGUgbWFwIG9iamVjdC5cbiAqXG4gKiBAcmV0dXJucyB7SGFzaH0gYHRoaXNgXG4gKi9cbmNsYXNzIEhhc2gge1xuICAgIF9tYXA6IE1hcDtcbiAgICBfdXBkYXRlSGFzaDogKCkgPT4gP1RpbWVvdXRJRDtcbiAgICBfaGFzaE5hbWU6ID9zdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcihoYXNoTmFtZTogP3N0cmluZykge1xuICAgICAgICB0aGlzLl9oYXNoTmFtZSA9IGhhc2hOYW1lICYmIGVuY29kZVVSSUNvbXBvbmVudChoYXNoTmFtZSk7XG4gICAgICAgIGJpbmRBbGwoW1xuICAgICAgICAgICAgJ19nZXRDdXJyZW50SGFzaCcsXG4gICAgICAgICAgICAnX29uSGFzaENoYW5nZScsXG4gICAgICAgICAgICAnX3VwZGF0ZUhhc2gnXG4gICAgICAgIF0sIHRoaXMpO1xuXG4gICAgICAgIC8vIE1vYmlsZSBTYWZhcmkgZG9lc24ndCBhbGxvdyB1cGRhdGluZyB0aGUgaGFzaCBtb3JlIHRoYW4gMTAwIHRpbWVzIHBlciAzMCBzZWNvbmRzLlxuICAgICAgICB0aGlzLl91cGRhdGVIYXNoID0gdGhyb3R0bGUodGhpcy5fdXBkYXRlSGFzaFVudGhyb3R0bGVkLmJpbmQodGhpcyksIDMwICogMTAwMCAvIDEwMCk7XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBNYXAgZWxlbWVudCB0byBsaXN0ZW4gZm9yIGNvb3JkaW5hdGUgY2hhbmdlc1xuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG1hcFxuICAgICAqIEByZXR1cm5zIHtIYXNofSBgdGhpc2BcbiAgICAgKi9cbiAgICBhZGRUbyhtYXA6IE1hcCkge1xuICAgICAgICB0aGlzLl9tYXAgPSBtYXA7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdoYXNoY2hhbmdlJywgdGhpcy5fb25IYXNoQ2hhbmdlLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuX21hcC5vbignbW92ZWVuZCcsIHRoaXMuX3VwZGF0ZUhhc2gpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKlxuICAgICAqIFJlbW92ZXMgaGFzaFxuICAgICAqXG4gICAgICogQHJldHVybnMge1BvcHVwfSBgdGhpc2BcbiAgICAgKi9cbiAgICByZW1vdmUoKSB7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdoYXNoY2hhbmdlJywgdGhpcy5fb25IYXNoQ2hhbmdlLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuX21hcC5vZmYoJ21vdmVlbmQnLCB0aGlzLl91cGRhdGVIYXNoKTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3VwZGF0ZUhhc2goKSk7XG5cbiAgICAgICAgZGVsZXRlIHRoaXMuX21hcDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZ2V0SGFzaFN0cmluZyhtYXBGZWVkYmFjaz86IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3QgY2VudGVyID0gdGhpcy5fbWFwLmdldENlbnRlcigpLFxuICAgICAgICAgICAgem9vbSA9IE1hdGgucm91bmQodGhpcy5fbWFwLmdldFpvb20oKSAqIDEwMCkgLyAxMDAsXG4gICAgICAgICAgICAvLyBkZXJpdmVkIGZyb20gZXF1YXRpb246IDUxMnB4ICogMl56IC8gMzYwIC8gMTBeZCA8IDAuNXB4XG4gICAgICAgICAgICBwcmVjaXNpb24gPSBNYXRoLmNlaWwoKHpvb20gKiBNYXRoLkxOMiArIE1hdGgubG9nKDUxMiAvIDM2MCAvIDAuNSkpIC8gTWF0aC5MTjEwKSxcbiAgICAgICAgICAgIG0gPSBNYXRoLnBvdygxMCwgcHJlY2lzaW9uKSxcbiAgICAgICAgICAgIGxuZyA9IE1hdGgucm91bmQoY2VudGVyLmxuZyAqIG0pIC8gbSxcbiAgICAgICAgICAgIGxhdCA9IE1hdGgucm91bmQoY2VudGVyLmxhdCAqIG0pIC8gbSxcbiAgICAgICAgICAgIGJlYXJpbmcgPSB0aGlzLl9tYXAuZ2V0QmVhcmluZygpLFxuICAgICAgICAgICAgcGl0Y2ggPSB0aGlzLl9tYXAuZ2V0UGl0Y2goKTtcbiAgICAgICAgbGV0IGhhc2ggPSAnJztcbiAgICAgICAgaWYgKG1hcEZlZWRiYWNrKSB7XG4gICAgICAgICAgICAvLyBuZXcgbWFwIGZlZWRiYWNrIHNpdGUgaGFzIHNvbWUgY29uc3RyYWludHMgdGhhdCBkb24ndCBhbGxvd1xuICAgICAgICAgICAgLy8gdXMgdG8gdXNlIHRoZSBzYW1lIGhhc2ggZm9ybWF0IGFzIHdlIGRvIGZvciB0aGUgTWFwIGhhc2ggb3B0aW9uLlxuICAgICAgICAgICAgaGFzaCArPSBgLyR7bG5nfS8ke2xhdH0vJHt6b29tfWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBoYXNoICs9IGAke3pvb219LyR7bGF0fS8ke2xuZ31gO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJlYXJpbmcgfHwgcGl0Y2gpIGhhc2ggKz0gKGAvJHtNYXRoLnJvdW5kKGJlYXJpbmcgKiAxMCkgLyAxMH1gKTtcbiAgICAgICAgaWYgKHBpdGNoKSBoYXNoICs9IChgLyR7TWF0aC5yb3VuZChwaXRjaCl9YCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2hhc2hOYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBoYXNoTmFtZSA9IHRoaXMuX2hhc2hOYW1lO1xuICAgICAgICAgICAgbGV0IGZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBwYXJ0cyA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoLnNsaWNlKDEpLnNwbGl0KCcmJykubWFwKHBhcnQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IHBhcnQuc3BsaXQoJz0nKVswXTtcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBoYXNoTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtrZXl9PSR7aGFzaH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcGFydDtcbiAgICAgICAgICAgIH0pLmZpbHRlcihhID0+IGEpO1xuICAgICAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgICAgICAgIHBhcnRzLnB1c2goYCR7aGFzaE5hbWV9PSR7aGFzaH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBgIyR7cGFydHMuam9pbignJicpfWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYCMke2hhc2h9YDtcbiAgICB9XG5cbiAgICBfZ2V0Q3VycmVudEhhc2goKSB7XG4gICAgICAgIC8vIEdldCB0aGUgY3VycmVudCBoYXNoIGZyb20gbG9jYXRpb24sIHN0cmlwcGVkIGZyb20gaXRzIG51bWJlciBzaWduXG4gICAgICAgIGNvbnN0IGhhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaC5yZXBsYWNlKCcjJywgJycpO1xuICAgICAgICBpZiAodGhpcy5faGFzaE5hbWUpIHtcbiAgICAgICAgICAgIC8vIFNwbGl0IHRoZSBwYXJhbWV0ZXItc3R5bGVkIGhhc2ggaW50byBwYXJ0cyBhbmQgZmluZCB0aGUgdmFsdWUgd2UgbmVlZFxuICAgICAgICAgICAgbGV0IGtleXZhbDtcbiAgICAgICAgICAgIGhhc2guc3BsaXQoJyYnKS5tYXAoXG4gICAgICAgICAgICAgICAgcGFydCA9PiBwYXJ0LnNwbGl0KCc9JylcbiAgICAgICAgICAgICkuZm9yRWFjaChwYXJ0ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocGFydFswXSA9PT0gdGhpcy5faGFzaE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAga2V5dmFsID0gcGFydDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiAoa2V5dmFsID8ga2V5dmFsWzFdIHx8ICcnIDogJycpLnNwbGl0KCcvJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhhc2guc3BsaXQoJy8nKTtcbiAgICB9XG5cbiAgICBfb25IYXNoQ2hhbmdlKCkge1xuICAgICAgICBjb25zdCBsb2MgPSB0aGlzLl9nZXRDdXJyZW50SGFzaCgpO1xuICAgICAgICBpZiAobG9jLmxlbmd0aCA+PSAzICYmICFsb2Muc29tZSh2ID0+IGlzTmFOKHYpKSkge1xuICAgICAgICAgICAgY29uc3QgYmVhcmluZyA9IHRoaXMuX21hcC5kcmFnUm90YXRlLmlzRW5hYmxlZCgpICYmIHRoaXMuX21hcC50b3VjaFpvb21Sb3RhdGUuaXNFbmFibGVkKCkgPyArKGxvY1szXSB8fCAwKSA6IHRoaXMuX21hcC5nZXRCZWFyaW5nKCk7XG4gICAgICAgICAgICB0aGlzLl9tYXAuanVtcFRvKHtcbiAgICAgICAgICAgICAgICBjZW50ZXI6IFsrbG9jWzJdLCArbG9jWzFdXSxcbiAgICAgICAgICAgICAgICB6b29tOiArbG9jWzBdLFxuICAgICAgICAgICAgICAgIGJlYXJpbmcsXG4gICAgICAgICAgICAgICAgcGl0Y2g6ICsobG9jWzRdIHx8IDApXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBfdXBkYXRlSGFzaFVudGhyb3R0bGVkKCkge1xuICAgICAgICBjb25zdCBoYXNoID0gdGhpcy5nZXRIYXNoU3RyaW5nKCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUod2luZG93Lmhpc3Rvcnkuc3RhdGUsICcnLCBoYXNoKTtcbiAgICAgICAgfSBjYXRjaCAoU2VjdXJpdHlFcnJvcikge1xuICAgICAgICAgICAgLy8gSUUxMSBkb2VzIG5vdCBhbGxvdyB0aGlzIGlmIHRoZSBwYWdlIGlzIHdpdGhpbiBhbiBpZnJhbWUgY3JlYXRlZFxuICAgICAgICAgICAgLy8gd2l0aCBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudC53cml0ZSguLi4pLlxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzc0MTBcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG5leHBvcnQgZGVmYXVsdCBIYXNoO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vdXRpbC9icm93c2VyJztcbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuL21hcCc7XG5pbXBvcnQge2JlemllciwgY2xhbXAsIGV4dGVuZH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB0eXBlIHtEcmFnUGFuT3B0aW9uc30gZnJvbSAnLi9oYW5kbGVyL3NoaW0vZHJhZ19wYW4nO1xuXG5jb25zdCBkZWZhdWx0SW5lcnRpYU9wdGlvbnMgPSB7XG4gICAgbGluZWFyaXR5OiAwLjMsXG4gICAgZWFzaW5nOiBiZXppZXIoMCwgMCwgMC4zLCAxKSxcbn07XG5cbmNvbnN0IGRlZmF1bHRQYW5JbmVydGlhT3B0aW9ucyA9IGV4dGVuZCh7XG4gICAgZGVjZWxlcmF0aW9uOiAyNTAwLFxuICAgIG1heFNwZWVkOiAxNDAwXG59LCBkZWZhdWx0SW5lcnRpYU9wdGlvbnMpO1xuXG5jb25zdCBkZWZhdWx0Wm9vbUluZXJ0aWFPcHRpb25zID0gZXh0ZW5kKHtcbiAgICBkZWNlbGVyYXRpb246IDIwLFxuICAgIG1heFNwZWVkOiAxNDAwXG59LCBkZWZhdWx0SW5lcnRpYU9wdGlvbnMpO1xuXG5jb25zdCBkZWZhdWx0QmVhcmluZ0luZXJ0aWFPcHRpb25zID0gZXh0ZW5kKHtcbiAgICBkZWNlbGVyYXRpb246IDEwMDAsXG4gICAgbWF4U3BlZWQ6IDM2MFxufSwgZGVmYXVsdEluZXJ0aWFPcHRpb25zKTtcblxuY29uc3QgZGVmYXVsdFBpdGNoSW5lcnRpYU9wdGlvbnMgPSBleHRlbmQoe1xuICAgIGRlY2VsZXJhdGlvbjogMTAwMCxcbiAgICBtYXhTcGVlZDogOTBcbn0sIGRlZmF1bHRJbmVydGlhT3B0aW9ucyk7XG5cbmV4cG9ydCB0eXBlIEluZXJ0aWFPcHRpb25zID0ge1xuICAgIGxpbmVhcml0eTogbnVtYmVyO1xuICAgIGVhc2luZzogKHQ6IG51bWJlcikgPT4gbnVtYmVyO1xuICAgIGRlY2VsZXJhdGlvbjogbnVtYmVyO1xuICAgIG1heFNwZWVkOiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBJbnB1dEV2ZW50ID0gTW91c2VFdmVudCB8IFRvdWNoRXZlbnQgfCBLZXlib2FyZEV2ZW50IHwgV2hlZWxFdmVudDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSGFuZGxlckluZXJ0aWEge1xuICAgIF9tYXA6IE1hcDtcbiAgICBfaW5lcnRpYUJ1ZmZlcjogQXJyYXk8eyB0aW1lOiBudW1iZXIsIHNldHRpbmdzOiBPYmplY3QgfT47XG5cbiAgICBjb25zdHJ1Y3RvcihtYXA6IE1hcCkge1xuICAgICAgICB0aGlzLl9tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBjbGVhcigpIHtcbiAgICAgICAgdGhpcy5faW5lcnRpYUJ1ZmZlciA9IFtdO1xuICAgIH1cblxuICAgIHJlY29yZChzZXR0aW5nczogYW55KSB7XG4gICAgICAgIHRoaXMuX2RyYWluSW5lcnRpYUJ1ZmZlcigpO1xuICAgICAgICB0aGlzLl9pbmVydGlhQnVmZmVyLnB1c2goe3RpbWU6IGJyb3dzZXIubm93KCksIHNldHRpbmdzfSk7XG4gICAgfVxuXG4gICAgX2RyYWluSW5lcnRpYUJ1ZmZlcigpIHtcbiAgICAgICAgY29uc3QgaW5lcnRpYSA9IHRoaXMuX2luZXJ0aWFCdWZmZXIsXG4gICAgICAgICAgICBub3cgPSBicm93c2VyLm5vdygpLFxuICAgICAgICAgICAgY3V0b2ZmID0gMTYwOyAgIC8vbXNlY1xuXG4gICAgICAgIHdoaWxlIChpbmVydGlhLmxlbmd0aCA+IDAgJiYgbm93IC0gaW5lcnRpYVswXS50aW1lID4gY3V0b2ZmKVxuICAgICAgICAgICAgaW5lcnRpYS5zaGlmdCgpO1xuICAgIH1cblxuICAgIF9vbk1vdmVFbmQocGFuSW5lcnRpYU9wdGlvbnM/OiBEcmFnUGFuT3B0aW9ucykge1xuICAgICAgICB0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKTtcbiAgICAgICAgaWYgKHRoaXMuX2luZXJ0aWFCdWZmZXIubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVsdGFzID0ge1xuICAgICAgICAgICAgem9vbTogMCxcbiAgICAgICAgICAgIGJlYXJpbmc6IDAsXG4gICAgICAgICAgICBwaXRjaDogMCxcbiAgICAgICAgICAgIHBhbjogbmV3IFBvaW50KDAsIDApLFxuICAgICAgICAgICAgcGluY2hBcm91bmQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGFyb3VuZDogdW5kZWZpbmVkXG4gICAgICAgIH07XG5cbiAgICAgICAgZm9yIChjb25zdCB7c2V0dGluZ3N9IG9mIHRoaXMuX2luZXJ0aWFCdWZmZXIpIHtcbiAgICAgICAgICAgIGRlbHRhcy56b29tICs9IHNldHRpbmdzLnpvb21EZWx0YSB8fCAwO1xuICAgICAgICAgICAgZGVsdGFzLmJlYXJpbmcgKz0gc2V0dGluZ3MuYmVhcmluZ0RlbHRhIHx8IDA7XG4gICAgICAgICAgICBkZWx0YXMucGl0Y2ggKz0gc2V0dGluZ3MucGl0Y2hEZWx0YSB8fCAwO1xuICAgICAgICAgICAgaWYgKHNldHRpbmdzLnBhbkRlbHRhKSBkZWx0YXMucGFuLl9hZGQoc2V0dGluZ3MucGFuRGVsdGEpO1xuICAgICAgICAgICAgaWYgKHNldHRpbmdzLmFyb3VuZCkgZGVsdGFzLmFyb3VuZCA9IHNldHRpbmdzLmFyb3VuZDtcbiAgICAgICAgICAgIGlmIChzZXR0aW5ncy5waW5jaEFyb3VuZCkgZGVsdGFzLnBpbmNoQXJvdW5kID0gc2V0dGluZ3MucGluY2hBcm91bmQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXN0RW50cnkgPSB0aGlzLl9pbmVydGlhQnVmZmVyW3RoaXMuX2luZXJ0aWFCdWZmZXIubGVuZ3RoIC0gMV07XG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gKGxhc3RFbnRyeS50aW1lIC0gdGhpcy5faW5lcnRpYUJ1ZmZlclswXS50aW1lKTtcblxuICAgICAgICBjb25zdCBlYXNlT3B0aW9ucyA9IHt9O1xuXG4gICAgICAgIGlmIChkZWx0YXMucGFuLm1hZygpKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjYWxjdWxhdGVFYXNpbmcoZGVsdGFzLnBhbi5tYWcoKSwgZHVyYXRpb24sIGV4dGVuZCh7fSwgZGVmYXVsdFBhbkluZXJ0aWFPcHRpb25zLCBwYW5JbmVydGlhT3B0aW9ucyB8fCB7fSkpO1xuICAgICAgICAgICAgZWFzZU9wdGlvbnMub2Zmc2V0ID0gZGVsdGFzLnBhbi5tdWx0KHJlc3VsdC5hbW91bnQgLyBkZWx0YXMucGFuLm1hZygpKTtcbiAgICAgICAgICAgIGVhc2VPcHRpb25zLmNlbnRlciA9IHRoaXMuX21hcC50cmFuc2Zvcm0uY2VudGVyO1xuICAgICAgICAgICAgZXh0ZW5kRHVyYXRpb24oZWFzZU9wdGlvbnMsIHJlc3VsdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVsdGFzLnpvb20pIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNhbGN1bGF0ZUVhc2luZyhkZWx0YXMuem9vbSwgZHVyYXRpb24sIGRlZmF1bHRab29tSW5lcnRpYU9wdGlvbnMpO1xuICAgICAgICAgICAgZWFzZU9wdGlvbnMuem9vbSA9IHRoaXMuX21hcC50cmFuc2Zvcm0uem9vbSArIHJlc3VsdC5hbW91bnQ7XG4gICAgICAgICAgICBleHRlbmREdXJhdGlvbihlYXNlT3B0aW9ucywgcmVzdWx0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZWx0YXMuYmVhcmluZykge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY2FsY3VsYXRlRWFzaW5nKGRlbHRhcy5iZWFyaW5nLCBkdXJhdGlvbiwgZGVmYXVsdEJlYXJpbmdJbmVydGlhT3B0aW9ucyk7XG4gICAgICAgICAgICBlYXNlT3B0aW9ucy5iZWFyaW5nID0gdGhpcy5fbWFwLnRyYW5zZm9ybS5iZWFyaW5nICsgY2xhbXAocmVzdWx0LmFtb3VudCwgLTE3OSwgMTc5KTtcbiAgICAgICAgICAgIGV4dGVuZER1cmF0aW9uKGVhc2VPcHRpb25zLCByZXN1bHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlbHRhcy5waXRjaCkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY2FsY3VsYXRlRWFzaW5nKGRlbHRhcy5waXRjaCwgZHVyYXRpb24sIGRlZmF1bHRQaXRjaEluZXJ0aWFPcHRpb25zKTtcbiAgICAgICAgICAgIGVhc2VPcHRpb25zLnBpdGNoID0gdGhpcy5fbWFwLnRyYW5zZm9ybS5waXRjaCArIHJlc3VsdC5hbW91bnQ7XG4gICAgICAgICAgICBleHRlbmREdXJhdGlvbihlYXNlT3B0aW9ucywgcmVzdWx0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlYXNlT3B0aW9ucy56b29tIHx8IGVhc2VPcHRpb25zLmJlYXJpbmcpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhc3QgPSBkZWx0YXMucGluY2hBcm91bmQgPT09IHVuZGVmaW5lZCA/IGRlbHRhcy5hcm91bmQgOiBkZWx0YXMucGluY2hBcm91bmQ7XG4gICAgICAgICAgICBlYXNlT3B0aW9ucy5hcm91bmQgPSBsYXN0ID8gdGhpcy5fbWFwLnVucHJvamVjdChsYXN0KSA6IHRoaXMuX21hcC5nZXRDZW50ZXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZChlYXNlT3B0aW9ucywge1xuICAgICAgICAgICAgbm9Nb3ZlU3RhcnQ6IHRydWVcbiAgICAgICAgfSk7XG5cbiAgICB9XG59XG5cbi8vIFVuZm9ydHVuYXRlbHkgem9vbSwgYmVhcmluZywgZXRjIGNhbid0IGhhdmUgZGlmZmVyZW50IGR1cmF0aW9ucyBhbmQgZWFzaW5ncyBzb1xuLy8gd2UgbmVlZCB0byBjaG9vc2Ugb25lLiBXZSB1c2UgdGhlIGxvbmdlc3QgZHVyYXRpb24gYW5kIGl0J3MgY29ycmVzcG9uZGluZyBlYXNpbmcuXG5mdW5jdGlvbiBleHRlbmREdXJhdGlvbihlYXNlT3B0aW9ucywgcmVzdWx0KSB7XG4gICAgaWYgKCFlYXNlT3B0aW9ucy5kdXJhdGlvbiB8fCBlYXNlT3B0aW9ucy5kdXJhdGlvbiA8IHJlc3VsdC5kdXJhdGlvbikge1xuICAgICAgICBlYXNlT3B0aW9ucy5kdXJhdGlvbiA9IHJlc3VsdC5kdXJhdGlvbjtcbiAgICAgICAgZWFzZU9wdGlvbnMuZWFzaW5nID0gcmVzdWx0LmVhc2luZztcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZUVhc2luZyhhbW91bnQsIGluZXJ0aWFEdXJhdGlvbjogbnVtYmVyLCBpbmVydGlhT3B0aW9ucykge1xuICAgIGNvbnN0IHttYXhTcGVlZCwgbGluZWFyaXR5LCBkZWNlbGVyYXRpb259ID0gaW5lcnRpYU9wdGlvbnM7XG4gICAgY29uc3Qgc3BlZWQgPSBjbGFtcChcbiAgICAgICAgYW1vdW50ICogbGluZWFyaXR5IC8gKGluZXJ0aWFEdXJhdGlvbiAvIDEwMDApLFxuICAgICAgICAtbWF4U3BlZWQsXG4gICAgICAgIG1heFNwZWVkKTtcbiAgICBjb25zdCBkdXJhdGlvbiA9IE1hdGguYWJzKHNwZWVkKSAvIChkZWNlbGVyYXRpb24gKiBsaW5lYXJpdHkpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGVhc2luZzogaW5lcnRpYU9wdGlvbnMuZWFzaW5nLFxuICAgICAgICBkdXJhdGlvbjogZHVyYXRpb24gKiAxMDAwLFxuICAgICAgICBhbW91bnQ6IHNwZWVkICogKGR1cmF0aW9uIC8gMilcbiAgICB9O1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtFdmVudH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcblxuaW1wb3J0IERPTSBmcm9tICcuLi91dGlsL2RvbSc7XG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQge2V4dGVuZH0gZnJvbSAnLi4vdXRpbC91dGlsJztcblxuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4vbWFwJztcbmltcG9ydCB0eXBlIExuZ0xhdCBmcm9tICcuLi9nZW8vbG5nX2xhdCc7XG5cbi8qKlxuICogYE1hcE1vdXNlRXZlbnRgIGlzIHRoZSBldmVudCB0eXBlIGZvciBtb3VzZS1yZWxhdGVkIG1hcCBldmVudHMuXG4gKiBAZXh0ZW5kcyB7T2JqZWN0fVxuICogQGV4YW1wbGVcbiAqIC8vIFRoZSBgY2xpY2tgIGV2ZW50IGlzIGFuIGV4YW1wbGUgb2YgYSBgTWFwTW91c2VFdmVudGAuXG4gKiAvLyBTZXQgdXAgYW4gZXZlbnQgbGlzdGVuZXIgb24gdGhlIG1hcC5cbiAqIG1hcC5vbignY2xpY2snLCBmdW5jdGlvbihlKSB7XG4gKiAgIC8vIFRoZSBldmVudCBvYmplY3QgKGUpIGNvbnRhaW5zIGluZm9ybWF0aW9uIGxpa2UgdGhlXG4gKiAgIC8vIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludCBvbiB0aGUgbWFwIHRoYXQgd2FzIGNsaWNrZWQuXG4gKiAgIGNvbnNvbGUubG9nKCdBIGNsaWNrIGV2ZW50IGhhcyBvY2N1cnJlZCBhdCAnICsgZS5sbmdMYXQpO1xuICogfSk7XG4gKi9cbmV4cG9ydCBjbGFzcyBNYXBNb3VzZUV2ZW50IGV4dGVuZHMgRXZlbnQge1xuICAgIC8qKlxuICAgICAqIFRoZSBldmVudCB0eXBlIChvbmUgb2YgW2Btb3VzZWRvd25gXSgjbWFwLmV2ZW50Om1vdXNlZG93biksXG4gICAgICogW2Btb3VzZXVwYF0oI21hcC5ldmVudDptb3VzZXVwKSxcbiAgICAgKiBbYGNsaWNrYF0oI21hcC5ldmVudDpjbGljayksXG4gICAgICogW2BkYmxjbGlja2BdKCNtYXAuZXZlbnQ6ZGJsY2xpY2spLFxuICAgICAqIFtgbW91c2Vtb3ZlYF0oI21hcC5ldmVudDptb3VzZW1vdmUpLFxuICAgICAqIFtgbW91c2VvdmVyYF0oI21hcC5ldmVudDptb3VzZW92ZXIpLFxuICAgICAqIFtgbW91c2VlbnRlcmBdKCNtYXAuZXZlbnQ6bW91c2VlbnRlciksXG4gICAgICogW2Btb3VzZWxlYXZlYF0oI21hcC5ldmVudDptb3VzZWxlYXZlKSxcbiAgICAgKiBbYG1vdXNlb3V0YF0oI21hcC5ldmVudDptb3VzZW91dCksXG4gICAgICogW2Bjb250ZXh0bWVudWBdKCNtYXAuZXZlbnQ6Y29udGV4dG1lbnUpKS5cbiAgICAgKi9cbiAgICB0eXBlOiAnbW91c2Vkb3duJ1xuICAgICAgICB8ICdtb3VzZXVwJ1xuICAgICAgICB8ICdjbGljaydcbiAgICAgICAgfCAnZGJsY2xpY2snXG4gICAgICAgIHwgJ21vdXNlbW92ZSdcbiAgICAgICAgfCAnbW91c2VvdmVyJ1xuICAgICAgICB8ICdtb3VzZWVudGVyJ1xuICAgICAgICB8ICdtb3VzZWxlYXZlJ1xuICAgICAgICB8ICdtb3VzZW91dCdcbiAgICAgICAgfCAnY29udGV4dG1lbnUnO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBNYXBgIG9iamVjdCB0aGF0IGZpcmVkIHRoZSBldmVudC5cbiAgICAgKi9cbiAgICB0YXJnZXQ6IE1hcDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBET00gZXZlbnQgd2hpY2ggY2F1c2VkIHRoZSBtYXAgZXZlbnQuXG4gICAgICovXG4gICAgb3JpZ2luYWxFdmVudDogTW91c2VFdmVudDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwaXhlbCBjb29yZGluYXRlcyBvZiB0aGUgbW91c2UgY3Vyc29yLCByZWxhdGl2ZSB0byB0aGUgbWFwIGFuZCBtZWFzdXJlZCBmcm9tIHRoZSB0b3AgbGVmdCBjb3JuZXIuXG4gICAgICovXG4gICAgcG9pbnQ6IFBvaW50O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGdlb2dyYXBoaWMgbG9jYXRpb24gb24gdGhlIG1hcCBvZiB0aGUgbW91c2UgY3Vyc29yLlxuICAgICAqL1xuICAgIGxuZ0xhdDogTG5nTGF0O1xuXG4gICAgLyoqXG4gICAgICogUHJldmVudHMgc3Vic2VxdWVudCBkZWZhdWx0IHByb2Nlc3Npbmcgb2YgdGhlIGV2ZW50IGJ5IHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBDYWxsaW5nIHRoaXMgbWV0aG9kIHdpbGwgcHJldmVudCB0aGUgZm9sbG93aW5nIGRlZmF1bHQgbWFwIGJlaGF2aW9yczpcbiAgICAgKlxuICAgICAqICAgKiBPbiBgbW91c2Vkb3duYCBldmVudHMsIHRoZSBiZWhhdmlvciBvZiB7QGxpbmsgRHJhZ1BhbkhhbmRsZXJ9XG4gICAgICogICAqIE9uIGBtb3VzZWRvd25gIGV2ZW50cywgdGhlIGJlaGF2aW9yIG9mIHtAbGluayBEcmFnUm90YXRlSGFuZGxlcn1cbiAgICAgKiAgICogT24gYG1vdXNlZG93bmAgZXZlbnRzLCB0aGUgYmVoYXZpb3Igb2Yge0BsaW5rIEJveFpvb21IYW5kbGVyfVxuICAgICAqICAgKiBPbiBgZGJsY2xpY2tgIGV2ZW50cywgdGhlIGJlaGF2aW9yIG9mIHtAbGluayBEb3VibGVDbGlja1pvb21IYW5kbGVyfVxuICAgICAqXG4gICAgICovXG4gICAgcHJldmVudERlZmF1bHQoKSB7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGB0cnVlYCBpZiBgcHJldmVudERlZmF1bHRgIGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGdldCBkZWZhdWx0UHJldmVudGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFByZXZlbnRlZDtcbiAgICB9XG5cbiAgICBfZGVmYXVsdFByZXZlbnRlZDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IodHlwZTogc3RyaW5nLCBtYXA6IE1hcCwgb3JpZ2luYWxFdmVudDogTW91c2VFdmVudCwgZGF0YTogT2JqZWN0ID0ge30pIHtcbiAgICAgICAgY29uc3QgcG9pbnQgPSBET00ubW91c2VQb3MobWFwLmdldENhbnZhc0NvbnRhaW5lcigpLCBvcmlnaW5hbEV2ZW50KTtcbiAgICAgICAgY29uc3QgbG5nTGF0ID0gbWFwLnVucHJvamVjdChwb2ludCk7XG4gICAgICAgIHN1cGVyKHR5cGUsIGV4dGVuZCh7cG9pbnQsIGxuZ0xhdCwgb3JpZ2luYWxFdmVudH0sIGRhdGEpKTtcbiAgICAgICAgdGhpcy5fZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRhcmdldCA9IG1hcDtcbiAgICB9XG59XG5cbi8qKlxuICogYE1hcFRvdWNoRXZlbnRgIGlzIHRoZSBldmVudCB0eXBlIGZvciB0b3VjaC1yZWxhdGVkIG1hcCBldmVudHMuXG4gKiBAZXh0ZW5kcyB7T2JqZWN0fVxuICovXG5leHBvcnQgY2xhc3MgTWFwVG91Y2hFdmVudCBleHRlbmRzIEV2ZW50IHtcbiAgICAvKipcbiAgICAgKiBUaGUgZXZlbnQgdHlwZS5cbiAgICAgKi9cbiAgICB0eXBlOiAndG91Y2hzdGFydCdcbiAgICAgICAgfCAndG91Y2hlbmQnXG4gICAgICAgIHwgJ3RvdWNoY2FuY2VsJztcblxuICAgIC8qKlxuICAgICAqIFRoZSBgTWFwYCBvYmplY3QgdGhhdCBmaXJlZCB0aGUgZXZlbnQuXG4gICAgICovXG4gICAgdGFyZ2V0OiBNYXA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgRE9NIGV2ZW50IHdoaWNoIGNhdXNlZCB0aGUgbWFwIGV2ZW50LlxuICAgICAqL1xuICAgIG9yaWdpbmFsRXZlbnQ6IFRvdWNoRXZlbnQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZ2VvZ3JhcGhpYyBsb2NhdGlvbiBvbiB0aGUgbWFwIG9mIHRoZSBjZW50ZXIgb2YgdGhlIHRvdWNoIGV2ZW50IHBvaW50cy5cbiAgICAgKi9cbiAgICBsbmdMYXQ6IExuZ0xhdDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwaXhlbCBjb29yZGluYXRlcyBvZiB0aGUgY2VudGVyIG9mIHRoZSB0b3VjaCBldmVudCBwb2ludHMsIHJlbGF0aXZlIHRvIHRoZSBtYXAgYW5kIG1lYXN1cmVkIGZyb20gdGhlIHRvcCBsZWZ0XG4gICAgICogY29ybmVyLlxuICAgICAqL1xuICAgIHBvaW50OiBQb2ludDtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiBwaXhlbCBjb29yZGluYXRlcyBjb3JyZXNwb25kaW5nIHRvIGFcbiAgICAgKiBbdG91Y2ggZXZlbnQncyBgdG91Y2hlc2BdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Ub3VjaEV2ZW50L3RvdWNoZXMpIHByb3BlcnR5LlxuICAgICAqL1xuICAgIHBvaW50czogQXJyYXk8UG9pbnQ+O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGdlb2dyYXBoaWNhbCBsb2NhdGlvbnMgb24gdGhlIG1hcCBjb3JyZXNwb25kaW5nIHRvIGFcbiAgICAgKiBbdG91Y2ggZXZlbnQncyBgdG91Y2hlc2BdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Ub3VjaEV2ZW50L3RvdWNoZXMpIHByb3BlcnR5LlxuICAgICAqL1xuICAgIGxuZ0xhdHM6IEFycmF5PExuZ0xhdD47XG5cbiAgICAvKipcbiAgICAgKiBQcmV2ZW50cyBzdWJzZXF1ZW50IGRlZmF1bHQgcHJvY2Vzc2luZyBvZiB0aGUgZXZlbnQgYnkgdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIENhbGxpbmcgdGhpcyBtZXRob2Qgd2lsbCBwcmV2ZW50IHRoZSBmb2xsb3dpbmcgZGVmYXVsdCBtYXAgYmVoYXZpb3JzOlxuICAgICAqXG4gICAgICogICAqIE9uIGB0b3VjaHN0YXJ0YCBldmVudHMsIHRoZSBiZWhhdmlvciBvZiB7QGxpbmsgRHJhZ1BhbkhhbmRsZXJ9XG4gICAgICogICAqIE9uIGB0b3VjaHN0YXJ0YCBldmVudHMsIHRoZSBiZWhhdmlvciBvZiB7QGxpbmsgVG91Y2hab29tUm90YXRlSGFuZGxlcn1cbiAgICAgKlxuICAgICAqL1xuICAgIHByZXZlbnREZWZhdWx0KCkge1xuICAgICAgICB0aGlzLl9kZWZhdWx0UHJldmVudGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBgdHJ1ZWAgaWYgYHByZXZlbnREZWZhdWx0YCBoYXMgYmVlbiBjYWxsZWQuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBnZXQgZGVmYXVsdFByZXZlbnRlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWQ7XG4gICAgfVxuXG4gICAgX2RlZmF1bHRQcmV2ZW50ZWQ6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHR5cGU6IHN0cmluZywgbWFwOiBNYXAsIG9yaWdpbmFsRXZlbnQ6IFRvdWNoRXZlbnQpIHtcbiAgICAgICAgY29uc3QgdG91Y2hlcyA9IHR5cGUgPT09IFwidG91Y2hlbmRcIiA/IG9yaWdpbmFsRXZlbnQuY2hhbmdlZFRvdWNoZXMgOiBvcmlnaW5hbEV2ZW50LnRvdWNoZXM7XG4gICAgICAgIGNvbnN0IHBvaW50cyA9IERPTS50b3VjaFBvcyhtYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCksIHRvdWNoZXMpO1xuICAgICAgICBjb25zdCBsbmdMYXRzID0gcG9pbnRzLm1hcCgodCkgPT4gbWFwLnVucHJvamVjdCh0KSk7XG4gICAgICAgIGNvbnN0IHBvaW50ID0gcG9pbnRzLnJlZHVjZSgocHJldiwgY3VyciwgaSwgYXJyKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcHJldi5hZGQoY3Vyci5kaXYoYXJyLmxlbmd0aCkpO1xuICAgICAgICB9LCBuZXcgUG9pbnQoMCwgMCkpO1xuICAgICAgICBjb25zdCBsbmdMYXQgPSBtYXAudW5wcm9qZWN0KHBvaW50KTtcbiAgICAgICAgc3VwZXIodHlwZSwge3BvaW50cywgcG9pbnQsIGxuZ0xhdHMsIGxuZ0xhdCwgb3JpZ2luYWxFdmVudH0pO1xuICAgICAgICB0aGlzLl9kZWZhdWx0UHJldmVudGVkID0gZmFsc2U7XG4gICAgfVxufVxuXG4vKipcbiAqIGBNYXBXaGVlbEV2ZW50YCBpcyB0aGUgZXZlbnQgdHlwZSBmb3IgdGhlIGB3aGVlbGAgbWFwIGV2ZW50LlxuICogQGV4dGVuZHMge09iamVjdH1cbiAqL1xuZXhwb3J0IGNsYXNzIE1hcFdoZWVsRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG4gICAgLyoqXG4gICAgICogVGhlIGV2ZW50IHR5cGUuXG4gICAgICovXG4gICAgdHlwZTogJ3doZWVsJztcblxuICAgIC8qKlxuICAgICAqIFRoZSBgTWFwYCBvYmplY3QgdGhhdCBmaXJlZCB0aGUgZXZlbnQuXG4gICAgICovXG4gICAgdGFyZ2V0OiBNYXA7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgRE9NIGV2ZW50IHdoaWNoIGNhdXNlZCB0aGUgbWFwIGV2ZW50LlxuICAgICAqL1xuICAgIG9yaWdpbmFsRXZlbnQ6IFdoZWVsRXZlbnQ7XG5cbiAgICAvKipcbiAgICAgKiBQcmV2ZW50cyBzdWJzZXF1ZW50IGRlZmF1bHQgcHJvY2Vzc2luZyBvZiB0aGUgZXZlbnQgYnkgdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIENhbGxpbmcgdGhpcyBtZXRob2Qgd2lsbCBwcmV2ZW50IHRoZSB0aGUgYmVoYXZpb3Igb2Yge0BsaW5rIFNjcm9sbFpvb21IYW5kbGVyfS5cbiAgICAgKi9cbiAgICBwcmV2ZW50RGVmYXVsdCgpIHtcbiAgICAgICAgdGhpcy5fZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYHRydWVgIGlmIGBwcmV2ZW50RGVmYXVsdGAgaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgZ2V0IGRlZmF1bHRQcmV2ZW50ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0UHJldmVudGVkO1xuICAgIH1cblxuICAgIF9kZWZhdWx0UHJldmVudGVkOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcih0eXBlOiBzdHJpbmcsIG1hcDogTWFwLCBvcmlnaW5hbEV2ZW50OiBXaGVlbEV2ZW50KSB7XG4gICAgICAgIHN1cGVyKHR5cGUsIHtvcmlnaW5hbEV2ZW50fSk7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWQgPSBmYWxzZTtcbiAgICB9XG59XG5cbi8qKlxuICogQSBgTWFwQm94Wm9vbUV2ZW50YCBpcyB0aGUgZXZlbnQgdHlwZSBmb3IgdGhlIGJveHpvb20tcmVsYXRlZCBtYXAgZXZlbnRzIGVtaXR0ZWQgYnkgdGhlIHtAbGluayBCb3hab29tSGFuZGxlcn0uXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gTWFwQm94Wm9vbUV2ZW50XG4gKiBAcHJvcGVydHkge01vdXNlRXZlbnR9IG9yaWdpbmFsRXZlbnQgVGhlIERPTSBldmVudCB0aGF0IHRyaWdnZXJlZCB0aGUgYm94em9vbSBldmVudC4gQ2FuIGJlIGEgYE1vdXNlRXZlbnRgIG9yIGBLZXlib2FyZEV2ZW50YFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGUgVGhlIHR5cGUgb2YgYm94em9vbSBldmVudC4gT25lIG9mIGBib3h6b29tc3RhcnRgLCBgYm94em9vbWVuZGAgb3IgYGJveHpvb21jYW5jZWxgXG4gKiBAcHJvcGVydHkge01hcH0gdGFyZ2V0IFRoZSBgTWFwYCBpbnN0YW5jZSB0aGF0IHRyaWdnZXJyZWQgdGhlIGV2ZW50XG4gKi9cbmV4cG9ydCB0eXBlIE1hcEJveFpvb21FdmVudCA9IHtcbiAgICB0eXBlOiAnYm94em9vbXN0YXJ0J1xuICAgICAgICB8ICdib3h6b29tZW5kJ1xuICAgICAgICB8ICdib3h6b29tY2FuY2VsJyxcbiAgICB0YXJnZXQ6IE1hcCxcbiAgICBvcmlnaW5hbEV2ZW50OiBNb3VzZUV2ZW50XG59O1xuXG4vKipcbiAqIEEgYE1hcERhdGFFdmVudGAgb2JqZWN0IGlzIGVtaXR0ZWQgd2l0aCB0aGUge0BsaW5rIE1hcC5ldmVudDpkYXRhfVxuICogYW5kIHtAbGluayBNYXAuZXZlbnQ6ZGF0YWxvYWRpbmd9IGV2ZW50cy4gUG9zc2libGUgdmFsdWVzIGZvclxuICogYGRhdGFUeXBlYHMgYXJlOlxuICpcbiAqIC0gYCdzb3VyY2UnYDogVGhlIG5vbi10aWxlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGFueSBzb3VyY2VcbiAqIC0gYCdzdHlsZSdgOiBUaGUgW3N0eWxlXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1zdHlsZS1zcGVjLykgdXNlZCBieSB0aGUgbWFwXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gTWFwRGF0YUV2ZW50XG4gKiBAcHJvcGVydHkge3N0cmluZ30gdHlwZSBUaGUgZXZlbnQgdHlwZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBkYXRhVHlwZSBUaGUgdHlwZSBvZiBkYXRhIHRoYXQgaGFzIGNoYW5nZWQuIE9uZSBvZiBgJ3NvdXJjZSdgLCBgJ3N0eWxlJ2AuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtpc1NvdXJjZUxvYWRlZF0gVHJ1ZSBpZiB0aGUgZXZlbnQgaGFzIGEgYGRhdGFUeXBlYCBvZiBgc291cmNlYCBhbmQgdGhlIHNvdXJjZSBoYXMgbm8gb3V0c3RhbmRpbmcgbmV0d29yayByZXF1ZXN0cy5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbc291cmNlXSBUaGUgW3N0eWxlIHNwZWMgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNvdXJjZV0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtc3R5bGUtc3BlYy8jc291cmNlcykgaWYgdGhlIGV2ZW50IGhhcyBhIGBkYXRhVHlwZWAgb2YgYHNvdXJjZWAuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3NvdXJjZURhdGFUeXBlXSBJbmNsdWRlZCBpZiB0aGUgZXZlbnQgaGFzIGEgYGRhdGFUeXBlYCBvZiBgc291cmNlYCBhbmQgdGhlIGV2ZW50IHNpZ25hbHNcbiAqIHRoYXQgaW50ZXJuYWwgZGF0YSBoYXMgYmVlbiByZWNlaXZlZCBvciBjaGFuZ2VkLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIGBtZXRhZGF0YWAgYW5kIGBjb250ZW50YC5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbdGlsZV0gVGhlIHRpbGUgYmVpbmcgbG9hZGVkIG9yIGNoYW5nZWQsIGlmIHRoZSBldmVudCBoYXMgYSBgZGF0YVR5cGVgIG9mIGBzb3VyY2VgIGFuZFxuICogdGhlIGV2ZW50IGlzIHJlbGF0ZWQgdG8gbG9hZGluZyBvZiBhIHRpbGUuXG4gKiBAcHJvcGVydHkge0Nvb3JkaW5hdGV9IFtjb29yZF0gVGhlIGNvb3JkaW5hdGUgb2YgdGhlIHRpbGUgaWYgdGhlIGV2ZW50IGhhcyBhIGBkYXRhVHlwZWAgb2YgYHNvdXJjZWAgYW5kXG4gKiB0aGUgZXZlbnQgaXMgcmVsYXRlZCB0byBsb2FkaW5nIG9mIGEgdGlsZS5cbiAqIEBleGFtcGxlXG4gKiAvLyBUaGUgc291cmNlZGF0YSBldmVudCBpcyBhbiBleGFtcGxlIG9mIE1hcERhdGFFdmVudC5cbiAqIC8vIFNldCB1cCBhbiBldmVudCBsaXN0ZW5lciBvbiB0aGUgbWFwLlxuICogbWFwLm9uKCdzb3VyY2VkYXRhJywgZnVuY3Rpb24oZSkge1xuICogICAgaWYgKGUuaXNTb3VyY2VMb2FkZWQpIHtcbiAqICAgICAgICAvLyBEbyBzb21ldGhpbmcgd2hlbiB0aGUgc291cmNlIGhhcyBmaW5pc2hlZCBsb2FkaW5nXG4gKiAgICB9XG4gKiB9KTtcbiAqL1xuZXhwb3J0IHR5cGUgTWFwRGF0YUV2ZW50ID0ge1xuICAgIHR5cGU6IHN0cmluZyxcbiAgICBkYXRhVHlwZTogc3RyaW5nXG59O1xuXG5leHBvcnQgdHlwZSBNYXBDb250ZXh0RXZlbnQgPSB7XG4gICAgdHlwZTogJ3dlYmdsY29udGV4dGxvc3QnIHwgJ3dlYmdsY29udGV4dHJlc3RvcmVkJyxcbiAgICBvcmlnaW5hbEV2ZW50OiBXZWJHTENvbnRleHRFdmVudFxufVxuXG5leHBvcnQgdHlwZSBNYXBFdmVudCA9XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIHBvaW50aW5nIGRldmljZSAodXN1YWxseSBhIG1vdXNlKSBpcyBwcmVzc2VkIHdpdGhpbiB0aGUgbWFwLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgZXZlbnQgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBvcHRpb25hbCBgbGF5ZXJJZGAgcGFyYW1ldGVyLlxuICAgICAqIElmIGBsYXllcklkYCBpcyBpbmNsdWRlZCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IGluIHtAbGluayBNYXAjb259LCB0aGUgZXZlbnQgbGlzdGVuZXIgd2lsbCBmaXJlIG9ubHkgd2hlbiB0aGVcbiAgICAgKiB0aGUgY3Vyc29yIGlzIHByZXNzZWQgd2hpbGUgaW5zaWRlIGEgdmlzaWJsZSBwb3J0aW9uIG9mIHRoZSBzcGVjaWZlZCBsYXllci5cbiAgICAgKlxuICAgICAqIEBldmVudCBtb3VzZWRvd25cbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50fSBkYXRhXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lclxuICAgICAqIG1hcC5vbignbW91c2Vkb3duJywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSBtb3VzZWRvd24gZXZlbnQgaGFzIG9jY3VycmVkLicpO1xuICAgICAqIH0pO1xuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gSW5pdGlhbGl6ZSB0aGUgbWFwXG4gICAgICogdmFyIG1hcCA9IG5ldyBtYXBib3hnbC5NYXAoeyAvLyBtYXAgb3B0aW9ucyB9KTtcbiAgICAgKiAvLyBTZXQgYW4gZXZlbnQgbGlzdGVuZXIgZm9yIGEgc3BlY2lmaWMgbGF5ZXJcbiAgICAgKiBtYXAub24oJ21vdXNlZG93bicsICdwb2ktbGFiZWwnLCBmdW5jdGlvbigpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdBIG1vdXNlZG93biBldmVudCBoYXMgb2NjdXJyZWQgb24gYSB2aXNpYmxlIHBvcnRpb24gb2YgdGhlIHBvaS1sYWJlbCBsYXllci4nKTtcbiAgICAgKiB9KTtcbiAgICAgKiBAc2VlIFtIaWdobGlnaHQgZmVhdHVyZXMgd2l0aGluIGEgYm91bmRpbmcgYm94XShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS91c2luZy1ib3gtcXVlcnlyZW5kZXJlZGZlYXR1cmVzLylcbiAgICAgKiBAc2VlIFtDcmVhdGUgYSBkcmFnZ2FibGUgcG9pbnRdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2RyYWctYS1wb2ludC8pXG4gICAgICovXG4gICAgfCAnbW91c2Vkb3duJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIHBvaW50aW5nIGRldmljZSAodXN1YWxseSBhIG1vdXNlKSBpcyByZWxlYXNlZCB3aXRoaW4gdGhlIG1hcC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIGV2ZW50IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgb3B0aW9uYWwgYGxheWVySWRgIHBhcmFtZXRlci5cbiAgICAgKiBJZiBgbGF5ZXJJZGAgaXMgaW5jbHVkZWQgYXMgdGhlIHNlY29uZCBhcmd1bWVudCBpbiB7QGxpbmsgTWFwI29ufSwgdGhlIGV2ZW50IGxpc3RlbmVyIHdpbGwgZmlyZSBvbmx5IHdoZW4gdGhlXG4gICAgICogdGhlIGN1cnNvciBpcyByZWxlYXNlZCB3aGlsZSBpbnNpZGUgYSB2aXNpYmxlIHBvcnRpb24gb2YgdGhlIHNwZWNpZmVkIGxheWVyLlxuICAgICAqXG4gICAgICogQGV2ZW50IG1vdXNldXBcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50fSBkYXRhXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lclxuICAgICAqIG1hcC5vbignbW91c2V1cCcsIGZ1bmN0aW9uKCkge1xuICAgICAqICAgY29uc29sZS5sb2coJ0EgbW91c2V1cCBldmVudCBoYXMgb2NjdXJyZWQuJyk7XG4gICAgICogfSk7XG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lciBmb3IgYSBzcGVjaWZpYyBsYXllclxuICAgICAqIG1hcC5vbignbW91c2V1cCcsICdwb2ktbGFiZWwnLCBmdW5jdGlvbigpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdBIG1vdXNldXAgZXZlbnQgaGFzIG9jY3VycmVkIG9uIGEgdmlzaWJsZSBwb3J0aW9uIG9mIHRoZSBwb2ktbGFiZWwgbGF5ZXIuJyk7XG4gICAgICogfSk7XG4gICAgICogQHNlZSBbSGlnaGxpZ2h0IGZlYXR1cmVzIHdpdGhpbiBhIGJvdW5kaW5nIGJveF0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvdXNpbmctYm94LXF1ZXJ5cmVuZGVyZWRmZWF0dXJlcy8pXG4gICAgICogQHNlZSBbQ3JlYXRlIGEgZHJhZ2dhYmxlIHBvaW50XShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9kcmFnLWEtcG9pbnQvKVxuICAgICAqL1xuICAgIHwgJ21vdXNldXAnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgcG9pbnRpbmcgZGV2aWNlICh1c3VhbGx5IGEgbW91c2UpIGlzIG1vdmVkIHdpdGhpbiB0aGUgbWFwLlxuICAgICAqIEFzIHlvdSBtb3ZlIHRoZSBjdXJzb3IgYWNyb3NzIGEgd2ViIHBhZ2UgY29udGFpbmluZyBhIG1hcCxcbiAgICAgKiB0aGUgZXZlbnQgd2lsbCBmaXJlIGVhY2ggdGltZSBpdCBlbnRlcnMgdGhlIG1hcCBvciBhbnkgY2hpbGQgZWxlbWVudHMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBldmVudCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIG9wdGlvbmFsIGBsYXllcklkYCBwYXJhbWV0ZXIuXG4gICAgICogSWYgYGxheWVySWRgIGlzIGluY2x1ZGVkIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgaW4ge0BsaW5rIE1hcCNvbn0sIHRoZSBldmVudCBsaXN0ZW5lciB3aWxsIGZpcmUgb25seSB3aGVuIHRoZVxuICAgICAqIHRoZSBjdXJzb3IgaXMgbW92ZWQgaW5zaWRlIGEgdmlzaWJsZSBwb3J0aW9uIG9mIHRoZSBzcGVjaWZlZCBsYXllci5cbiAgICAgKlxuICAgICAqIEBldmVudCBtb3VzZW92ZXJcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50fSBkYXRhXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lclxuICAgICAqIG1hcC5vbignbW91c2VvdmVyJywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSBtb3VzZW92ZXIgZXZlbnQgaGFzIG9jY3VycmVkLicpO1xuICAgICAqIH0pO1xuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gSW5pdGlhbGl6ZSB0aGUgbWFwXG4gICAgICogdmFyIG1hcCA9IG5ldyBtYXBib3hnbC5NYXAoeyAvLyBtYXAgb3B0aW9ucyB9KTtcbiAgICAgKiAvLyBTZXQgYW4gZXZlbnQgbGlzdGVuZXIgZm9yIGEgc3BlY2lmaWMgbGF5ZXJcbiAgICAgKiBtYXAub24oJ21vdXNlb3ZlcicsICdwb2ktbGFiZWwnLCBmdW5jdGlvbigpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdBIG1vdXNlb3ZlciBldmVudCBoYXMgb2NjdXJyZWQgb24gYSB2aXNpYmxlIHBvcnRpb24gb2YgdGhlIHBvaS1sYWJlbCBsYXllci4nKTtcbiAgICAgKiB9KTtcbiAgICAgKiBAc2VlIFtHZXQgY29vcmRpbmF0ZXMgb2YgdGhlIG1vdXNlIHBvaW50ZXJdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvbW91c2UtcG9zaXRpb24vKVxuICAgICAqIEBzZWUgW0hpZ2hsaWdodCBmZWF0dXJlcyB1bmRlciB0aGUgbW91c2UgcG9pbnRlcl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9ob3Zlci1zdHlsZXMvKVxuICAgICAqIEBzZWUgW0Rpc3BsYXkgYSBwb3B1cCBvbiBob3Zlcl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9wb3B1cC1vbi1ob3Zlci8pXG4gICAgICovXG4gICAgfCAnbW91c2VvdmVyJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIHBvaW50aW5nIGRldmljZSAodXN1YWxseSBhIG1vdXNlKSBpcyBtb3ZlZCB3aGlsZSB0aGUgY3Vyc29yIGlzIGluc2lkZSB0aGUgbWFwLlxuICAgICAqIEFzIHlvdSBtb3ZlIHRoZSBjdXJzb3IgYWNyb3NzIHRoZSBtYXAsIHRoZSBldmVudCB3aWxsIGZpcmUgZXZlcnkgdGltZSB0aGUgY3Vyc29yIGNoYW5nZXMgcG9zaXRpb24gd2l0aGluIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBldmVudCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIG9wdGlvbmFsIGBsYXllcklkYCBwYXJhbWV0ZXIuXG4gICAgICogSWYgYGxheWVySWRgIGlzIGluY2x1ZGVkIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgaW4ge0BsaW5rIE1hcCNvbn0sIHRoZSBldmVudCBsaXN0ZW5lciB3aWxsIGZpcmUgb25seSB3aGVuIHRoZVxuICAgICAqIHRoZSBjdXJzb3IgaXMgaW5zaWRlIGEgdmlzaWJsZSBwb3J0aW9uIG9mIHRoZSBzcGVjaWZpZWQgbGF5ZXIuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgbW91c2Vtb3ZlXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwTW91c2VFdmVudH0gZGF0YVxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gSW5pdGlhbGl6ZSB0aGUgbWFwXG4gICAgICogdmFyIG1hcCA9IG5ldyBtYXBib3hnbC5NYXAoeyAvLyBtYXAgb3B0aW9ucyB9KTtcbiAgICAgKiAvLyBTZXQgYW4gZXZlbnQgbGlzdGVuZXJcbiAgICAgKiBtYXAub24oJ21vdXNlbW92ZScsIGZ1bmN0aW9uKCkge1xuICAgICAqICAgY29uc29sZS5sb2coJ0EgbW91c2Vtb3ZlIGV2ZW50IGhhcyBvY2N1cnJlZC4nKTtcbiAgICAgKiB9KTtcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEluaXRpYWxpemUgdGhlIG1hcFxuICAgICAqIHZhciBtYXAgPSBuZXcgbWFwYm94Z2wuTWFwKHsgLy8gbWFwIG9wdGlvbnMgfSk7XG4gICAgICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyIGZvciBhIHNwZWNpZmljIGxheWVyXG4gICAgICogbWFwLm9uKCdtb3VzZW1vdmUnLCAncG9pLWxhYmVsJywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSBtb3VzZW1vdmUgZXZlbnQgaGFzIG9jY3VycmVkIG9uIGEgdmlzaWJsZSBwb3J0aW9uIG9mIHRoZSBwb2ktbGFiZWwgbGF5ZXIuJyk7XG4gICAgICogfSk7XG4gICAgICogQHNlZSBbR2V0IGNvb3JkaW5hdGVzIG9mIHRoZSBtb3VzZSBwb2ludGVyXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL21vdXNlLXBvc2l0aW9uLylcbiAgICAgKiBAc2VlIFtIaWdobGlnaHQgZmVhdHVyZXMgdW5kZXIgdGhlIG1vdXNlIHBvaW50ZXJdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvaG92ZXItc3R5bGVzLylcbiAgICAgKiBAc2VlIFtEaXNwbGF5IGEgcG9wdXAgb24gb3Zlcl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9wb3B1cC1vbi1ob3Zlci8pXG4gICAgICovXG4gICAgfCAnbW91c2Vtb3ZlJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIHBvaW50aW5nIGRldmljZSAodXN1YWxseSBhIG1vdXNlKSBpcyBwcmVzc2VkIGFuZCByZWxlYXNlZCBhdCB0aGUgc2FtZSBwb2ludCBvbiB0aGUgbWFwLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgZXZlbnQgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBvcHRpb25hbCBgbGF5ZXJJZGAgcGFyYW1ldGVyLlxuICAgICAqIElmIGBsYXllcklkYCBpcyBpbmNsdWRlZCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IGluIHtAbGluayBNYXAjb259LCB0aGUgZXZlbnQgbGlzdGVuZXIgd2lsbCBmaXJlIG9ubHkgd2hlbiB0aGVcbiAgICAgKiBwb2ludCB0aGF0IGlzIHByZXNzZWQgYW5kIHJlbGVhc2VkIGNvbnRhaW5zIGEgdmlzaWJsZSBwb3J0aW9uIG9mIHRoZSBzcGVjaWZlZCBsYXllci5cbiAgICAgKlxuICAgICAqIEBldmVudCBjbGlja1xuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcE1vdXNlRXZlbnR9IGRhdGFcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEluaXRpYWxpemUgdGhlIG1hcFxuICAgICAqIHZhciBtYXAgPSBuZXcgbWFwYm94Z2wuTWFwKHsgLy8gbWFwIG9wdGlvbnMgfSk7XG4gICAgICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyXG4gICAgICogbWFwLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdBIGNsaWNrIGV2ZW50IGhhcyBvY2N1cnJlZCBhdCAnICsgZS5sbmdMYXQpO1xuICAgICAqIH0pO1xuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gSW5pdGlhbGl6ZSB0aGUgbWFwXG4gICAgICogdmFyIG1hcCA9IG5ldyBtYXBib3hnbC5NYXAoeyAvLyBtYXAgb3B0aW9ucyB9KTtcbiAgICAgKiAvLyBTZXQgYW4gZXZlbnQgbGlzdGVuZXIgZm9yIGEgc3BlY2lmaWMgbGF5ZXJcbiAgICAgKiBtYXAub24oJ2NsaWNrJywgJ3BvaS1sYWJlbCcsIGZ1bmN0aW9uKGUpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdBIGNsaWNrIGV2ZW50IGhhcyBvY2N1cnJlZCBvbiBhIHZpc2libGUgcG9ydGlvbiBvZiB0aGUgcG9pLWxhYmVsIGxheWVyIGF0ICcgKyBlLmxuZ0xhdCk7XG4gICAgICogfSk7XG4gICAgICogQHNlZSBbTWVhc3VyZSBkaXN0YW5jZXNdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvbWVhc3VyZS8pXG4gICAgICogQHNlZSBbQ2VudGVyIHRoZSBtYXAgb24gYSBjbGlja2VkIHN5bWJvbF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9jZW50ZXItb24tc3ltYm9sLylcbiAgICAgKi9cbiAgICB8ICdjbGljaydcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBwb2ludGluZyBkZXZpY2UgKHVzdWFsbHkgYSBtb3VzZSkgaXMgcHJlc3NlZCBhbmQgcmVsZWFzZWQgdHdpY2UgYXQgdGhlIHNhbWUgcG9pbnQgb25cbiAgICAgKiB0aGUgbWFwIGluIHJhcGlkIHN1Y2Nlc3Npb24uXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBldmVudCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIG9wdGlvbmFsIGBsYXllcklkYCBwYXJhbWV0ZXIuXG4gICAgICogSWYgYGxheWVySWRgIGlzIGluY2x1ZGVkIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgaW4ge0BsaW5rIE1hcCNvbn0sIHRoZSBldmVudCBsaXN0ZW5lciB3aWxsIGZpcmUgb25seVxuICAgICAqIHdoZW4gdGhlIHBvaW50IHRoYXQgaXMgY2xpY2tlZCB0d2ljZSBjb250YWlucyBhIHZpc2libGUgcG9ydGlvbiBvZiB0aGUgc3BlY2lmZWQgbGF5ZXIuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZGJsY2xpY2tcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50fSBkYXRhXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lclxuICAgICAqIG1hcC5vbignZGJsY2xpY2snLCBmdW5jdGlvbihlKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSBkYmxjbGljayBldmVudCBoYXMgb2NjdXJyZWQgYXQgJyArIGUubG5nTGF0KTtcbiAgICAgKiB9KTtcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEluaXRpYWxpemUgdGhlIG1hcFxuICAgICAqIHZhciBtYXAgPSBuZXcgbWFwYm94Z2wuTWFwKHsgLy8gbWFwIG9wdGlvbnMgfSk7XG4gICAgICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyIGZvciBhIHNwZWNpZmljIGxheWVyXG4gICAgICogbWFwLm9uKCdkYmxjbGljaycsICdwb2ktbGFiZWwnLCBmdW5jdGlvbihlKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSBkYmxjbGljayBldmVudCBoYXMgb2NjdXJyZWQgb24gYSB2aXNpYmxlIHBvcnRpb24gb2YgdGhlIHBvaS1sYWJlbCBsYXllciBhdCAnICsgZS5sbmdMYXQpO1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIHwgJ2RibGNsaWNrJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIHBvaW50aW5nIGRldmljZSAodXN1YWxseSBhIG1vdXNlKSBlbnRlcnMgYSB2aXNpYmxlIHBvcnRpb24gb2YgYSBzcGVjaWZpZWQgbGF5ZXIgZnJvbVxuICAgICAqIG91dHNpZGUgdGhhdCBsYXllciBvciBvdXRzaWRlIHRoZSBtYXAgY2FudmFzLlxuICAgICAqXG4gICAgICogKipJbXBvcnRhbnQ6KiogVGhpcyBldmVudCBjYW4gb25seSBiZSBsaXN0ZW5lZCBmb3Igd2hlbiB7QGxpbmsgTWFwI29ufSBpbmNsdWRlcyB0aHJlZSBhcmd1ZW1lbnRzLFxuICAgICAqIHdoZXJlIHRoZSBzZWNvbmQgYXJndW1lbnQgc3BlY2lmaWVzIHRoZSBkZXNpcmVkIGxheWVyLlxuICAgICAqXG4gICAgICogQGV2ZW50IG1vdXNlZW50ZXJcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50fSBkYXRhXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lclxuICAgICAqIG1hcC5vbignbW91c2VlbnRlcicsICd3YXRlcicsIGZ1bmN0aW9uKCkge1xuICAgICAqICAgY29uc29sZS5sb2coJ0EgbW91c2VlbnRlciBldmVudCBvY2N1cnJlZCBvbiBhIHZpc2libGUgcG9ydGlvbiBvZiB0aGUgd2F0ZXIgbGF5ZXIuJyk7XG4gICAgICogfSk7XG4gICAgICogQHNlZSBbQ2VudGVyIHRoZSBtYXAgb24gYSBjbGlja2VkIHN5bWJvbF0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvY2VudGVyLW9uLXN5bWJvbC8pXG4gICAgICogQHNlZSBbRGlzcGxheSBhIHBvcHVwIG9uIGNsaWNrXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9wb3B1cC1vbi1jbGljay8pXG4gICAgICovXG4gICAgfCAnbW91c2VlbnRlcidcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBwb2ludGluZyBkZXZpY2UgKHVzdWFsbHkgYSBtb3VzZSkgbGVhdmVzIGEgdmlzaWJsZSBwb3J0aW9uIG9mIGEgc3BlY2lmaWVkIGxheWVyLCBvciBsZWF2ZXNcbiAgICAgKiB0aGUgbWFwIGNhbnZhcy5cbiAgICAgKlxuICAgICAqICoqSW1wb3J0YW50OioqIFRoaXMgZXZlbnQgY2FuIG9ubHkgYmUgbGlzdGVuZWQgZm9yIHdoZW4ge0BsaW5rIE1hcCNvbn0gaW5jbHVkZXMgdGhyZWUgYXJndWVtZW50cyxcbiAgICAgKiB3aGVyZSB0aGUgc2Vjb25kIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgZGVzaXJlZCBsYXllci5cbiAgICAgKlxuICAgICAqIEBldmVudCBtb3VzZWxlYXZlXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwTW91c2VFdmVudH0gZGF0YVxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gSW5pdGlhbGl6ZSB0aGUgbWFwXG4gICAgICogdmFyIG1hcCA9IG5ldyBtYXBib3hnbC5NYXAoeyAvLyBtYXAgb3B0aW9ucyB9KTtcbiAgICAgKiAvLyBTZXQgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBmaXJlc1xuICAgICAqIC8vIHdoZW4gdGhlIHBvaW50aW5nIGRldmljZSBsZWF2ZXNcbiAgICAgKiAvLyBhIHZpc2libGUgcG9ydGlvbiBvZiB0aGUgc3BlY2lmaWVkIGxheWVyLlxuICAgICAqIG1hcC5vbignbW91c2VsZWF2ZScsICd3YXRlcicsIGZ1bmN0aW9uKCkge1xuICAgICAqICAgY29uc29sZS5sb2coJ0EgbW91c2VsZWF2ZSBldmVudCBvY2N1cnJlZC4nKTtcbiAgICAgKiB9KTtcbiAgICAgKiBAc2VlIFtIaWdobGlnaHQgZmVhdHVyZXMgdW5kZXIgdGhlIG1vdXNlIHBvaW50ZXJdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvaG92ZXItc3R5bGVzLylcbiAgICAgKiBAc2VlIFtEaXNwbGF5IGEgcG9wdXAgb24gY2xpY2tdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3BvcHVwLW9uLWNsaWNrLylcbiAgICAgKi9cbiAgICB8ICdtb3VzZWxlYXZlJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIHBvaW50IGRldmljZSAodXN1YWxseSBhIG1vdXNlKSBsZWF2ZXMgdGhlIG1hcCdzIGNhbnZhcy5cbiAgICAgKlxuICAgICAqIEBldmVudCBtb3VzZW91dFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcE1vdXNlRXZlbnR9IGRhdGFcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEluaXRpYWxpemUgdGhlIG1hcFxuICAgICAqIHZhciBtYXAgPSBuZXcgbWFwYm94Z2wuTWFwKHsgLy8gbWFwIG9wdGlvbnMgfSk7XG4gICAgICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgZmlyZXNcbiAgICAgKiAvLyB3aGVuIHRoZSBwb2ludGluZyBkZXZpY2UgbGVhdmUnc1xuICAgICAqIC8vIHRoZSBtYXAncyBjYW52YXMuXG4gICAgICogbWFwLm9uKCdtb3VzZW91dCcsIGZ1bmN0aW9uKCkge1xuICAgICAqICAgY29uc29sZS5sb2coJ0EgbW91c2VvdXQgZXZlbnQgb2NjdXJyZWQuJyk7XG4gICAgICogfSk7XG4gICAgICovXG4gICAgfCAnbW91c2VvdXQnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSByaWdodCBidXR0b24gb2YgdGhlIG1vdXNlIGlzIGNsaWNrZWQgb3IgdGhlIGNvbnRleHQgbWVudSBrZXkgaXMgcHJlc3NlZCB3aXRoaW4gdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIEBldmVudCBjb250ZXh0bWVudVxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcE1vdXNlRXZlbnR9IGRhdGFcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEluaXRpYWxpemUgdGhlIG1hcFxuICAgICAqIHZhciBtYXAgPSBuZXcgbWFwYm94Z2wuTWFwKHsgLy8gbWFwIG9wdGlvbnMgfSk7XG4gICAgICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgZmlyZXNcbiAgICAgKiAvLyB3aGVuIHRoZSByaWdodCBtb3VzZSBidXR0b24gaXNcbiAgICAgKiAvLyBwcmVzc2VkIHdpdGhpbiB0aGUgbWFwLlxuICAgICAqIG1hcC5vbignY29udGV4dG1lbnUnLCBmdW5jdGlvbigpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdBIGNvbnRleHRtZW51IGV2ZW50IG9jY3VycmVkLicpO1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIHwgJ2NvbnRleHRtZW51J1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIFtgd2hlZWxgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9FdmVudHMvd2hlZWwpIGV2ZW50IG9jY3VycyB3aXRoaW4gdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIEBldmVudCB3aGVlbFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcFdoZWVsRXZlbnR9IGRhdGFcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEluaXRpYWxpemUgdGhlIG1hcFxuICAgICAqIHZhciBtYXAgPSBuZXcgbWFwYm94Z2wuTWFwKHsgLy8gbWFwIG9wdGlvbnMgfSk7XG4gICAgICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgZmlyZXNcbiAgICAgKiAvLyB3aGVuIGEgd2hlZWwgZXZlbnQgb2NjdXJzIHdpdGhpbiB0aGUgbWFwLlxuICAgICAqIG1hcC5vbignd2hlZWwnLCBmdW5jdGlvbigpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdBIHdoZWVsIGV2ZW50IG9jY3VycmVkLicpO1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIHwgJ3doZWVsJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIFtgdG91Y2hzdGFydGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0V2ZW50cy90b3VjaHN0YXJ0KSBldmVudCBvY2N1cnMgd2l0aGluIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgdG91Y2hzdGFydFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcFRvdWNoRXZlbnR9IGRhdGFcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGZpcmVzXG4gICAgICogLy8gd2hlbiBhIHRvdWNoc3RhcnQgZXZlbnQgb2NjdXJzIHdpdGhpbiB0aGUgbWFwLlxuICAgICAqIG1hcC5vbigndG91Y2hzdGFydCcsIGZ1bmN0aW9uKCkge1xuICAgICAqICAgY29uc29sZS5sb2coJ0EgdG91Y2hzdGFydCBldmVudCBvY2N1cnJlZC4nKTtcbiAgICAgKiB9KTtcbiAgICAgKiBAc2VlIFtDcmVhdGUgYSBkcmFnZ2FibGUgcG9pbnRdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2RyYWctYS1wb2ludC8pXG4gICAgICovXG4gICAgfCAndG91Y2hzdGFydCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBbYHRvdWNoZW5kYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvRXZlbnRzL3RvdWNoZW5kKSBldmVudCBvY2N1cnMgd2l0aGluIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgdG91Y2hlbmRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBUb3VjaEV2ZW50fSBkYXRhXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGZpcmVzXG4gICAgICogLy8gd2hlbiBhIHRvdWNoc3RhcnQgZXZlbnQgb2NjdXJzIHdpdGhpbiB0aGUgbWFwLlxuICAgICAqIG1hcC5vbigndG91Y2hzdGFydCcsIGZ1bmN0aW9uKCkge1xuICAgICAqICAgY29uc29sZS5sb2coJ0EgdG91Y2hzdGFydCBldmVudCBvY2N1cnJlZC4nKTtcbiAgICAgKiB9KTtcbiAgICAgKiBAc2VlIFtDcmVhdGUgYSBkcmFnZ2FibGUgcG9pbnRdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2RyYWctYS1wb2ludC8pXG4gICAgICovXG4gICAgfCAndG91Y2hlbmQnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgW2B0b3VjaG1vdmVgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9FdmVudHMvdG91Y2htb3ZlKSBldmVudCBvY2N1cnMgd2l0aGluIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgdG91Y2htb3ZlXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwVG91Y2hFdmVudH0gZGF0YVxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gSW5pdGlhbGl6ZSB0aGUgbWFwXG4gICAgICogdmFyIG1hcCA9IG5ldyBtYXBib3hnbC5NYXAoeyAvLyBtYXAgb3B0aW9ucyB9KTtcbiAgICAgKiAvLyBTZXQgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBmaXJlc1xuICAgICAqIC8vIHdoZW4gYSB0b3VjaG1vdmUgZXZlbnQgb2NjdXJzIHdpdGhpbiB0aGUgbWFwLlxuICAgICAqIG1hcC5vbigndG91Y2htb3ZlJywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSB0b3VjaG1vdmUgZXZlbnQgb2NjdXJyZWQuJyk7XG4gICAgICogfSk7XG4gICAgICogQHNlZSBbQ3JlYXRlIGEgZHJhZ2dhYmxlIHBvaW50XShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9kcmFnLWEtcG9pbnQvKVxuICAgICAqL1xuICAgIHwgJ3RvdWNobW92ZSdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBbYHRvdWNoY2FuY2VsYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvRXZlbnRzL3RvdWNoY2FuY2VsKSBldmVudCBvY2N1cnMgd2l0aGluIHRoZSBtYXAuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgdG91Y2hjYW5jZWxcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBUb3VjaEV2ZW50fSBkYXRhXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGZpcmVzXG4gICAgICogLy8gd2hlbiBhIHRvdWNoY2FuY2VsIGV2ZW50IG9jY3VycyB3aXRoaW4gdGhlIG1hcC5cbiAgICAgKiBtYXAub24oJ3RvdWNoY2FuY2VsJywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSB0b3VjaGNhbmNlbCBldmVudCBvY2N1cnJlZC4nKTtcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICB8ICd0b3VjaGNhbmNlbCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIGp1c3QgYmVmb3JlIHRoZSBtYXAgYmVnaW5zIGEgdHJhbnNpdGlvbiBmcm9tIG9uZVxuICAgICAqIHZpZXcgdG8gYW5vdGhlciwgYXMgdGhlIHJlc3VsdCBvZiBlaXRoZXIgdXNlciBpbnRlcmFjdGlvbiBvciBtZXRob2RzIHN1Y2ggYXMge0BsaW5rIE1hcCNqdW1wVG99LlxuICAgICAqXG4gICAgICogQGV2ZW50IG1vdmVzdGFydFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge3tvcmlnaW5hbEV2ZW50OiBEcmFnRXZlbnR9fSBkYXRhXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGZpcmVzXG4gICAgICogLy8ganVzdCBiZWZvcmUgdGhlIG1hcCBiZWdpbnMgYSB0cmFuc2l0aW9uXG4gICAgICogLy8gZnJvbSBvbmUgdmlldyB0byBhbm90aGVyLlxuICAgICAqIG1hcC5vbignbW92ZXN0YXJ0JywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSBtb3Zlc3RhcnRgIGV2ZW50IG9jY3VycmVkLicpO1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIHwgJ21vdmVzdGFydCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHJlcGVhdGVkbHkgZHVyaW5nIGFuIGFuaW1hdGVkIHRyYW5zaXRpb24gZnJvbSBvbmUgdmlldyB0b1xuICAgICAqIGFub3RoZXIsIGFzIHRoZSByZXN1bHQgb2YgZWl0aGVyIHVzZXIgaW50ZXJhY3Rpb24gb3IgbWV0aG9kcyBzdWNoIGFzIHtAbGluayBNYXAjZmx5VG99LlxuICAgICAqXG4gICAgICogQGV2ZW50IG1vdmVcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50IHwgTWFwVG91Y2hFdmVudH0gZGF0YVxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gSW5pdGlhbGl6ZSB0aGUgbWFwXG4gICAgICogdmFyIG1hcCA9IG5ldyBtYXBib3hnbC5NYXAoeyAvLyBtYXAgb3B0aW9ucyB9KTtcbiAgICAgKiAvLyBTZXQgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBmaXJlc1xuICAgICAqIC8vIHJlcGVhdGVkbHkgZHVyaW5nIGFuIGFuaW1hdGVkIHRyYW5zaXRpb24uXG4gICAgICogbWFwLm9uKCdtb3ZlJywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSBtb3ZlIGV2ZW50IG9jY3VycmVkLicpO1xuICAgICAqIH0pO1xuICAgICAqIEBzZWUgW0Rpc3BsYXkgSFRNTCBjbHVzdGVycyB3aXRoIGN1c3RvbSBwcm9wZXJ0aWVzXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9jbHVzdGVyLWh0bWwvKVxuICAgICAqIEBzZWUgW0ZpbHRlciBmZWF0dXJlcyB3aXRoaW4gbWFwIHZpZXddKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2ZpbHRlci1mZWF0dXJlcy13aXRoaW4tbWFwLXZpZXcvKVxuICAgICAqL1xuICAgIHwgJ21vdmUnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCBqdXN0IGFmdGVyIHRoZSBtYXAgY29tcGxldGVzIGEgdHJhbnNpdGlvbiBmcm9tIG9uZVxuICAgICAqIHZpZXcgdG8gYW5vdGhlciwgYXMgdGhlIHJlc3VsdCBvZiBlaXRoZXIgdXNlciBpbnRlcmFjdGlvbiBvciBtZXRob2RzIHN1Y2ggYXMge0BsaW5rIE1hcCNqdW1wVG99LlxuICAgICAqXG4gICAgICogQGV2ZW50IG1vdmVlbmRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHt7b3JpZ2luYWxFdmVudDogRHJhZ0V2ZW50fX0gZGF0YVxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gSW5pdGlhbGl6ZSB0aGUgbWFwXG4gICAgICogdmFyIG1hcCA9IG5ldyBtYXBib3hnbC5NYXAoeyAvLyBtYXAgb3B0aW9ucyB9KTtcbiAgICAgKiAvLyBTZXQgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBmaXJlc1xuICAgICAqIC8vIGp1c3QgYWZ0ZXIgdGhlIG1hcCBjb21wbGV0ZXMgYSB0cmFuc2l0aW9uLlxuICAgICAqIG1hcC5vbignbW92ZWVuZCcsIGZ1bmN0aW9uKCkge1xuICAgICAqICAgY29uc29sZS5sb2coJ0EgbW92ZWVuZCBldmVudCBvY2N1cnJlZC4nKTtcbiAgICAgKiB9KTtcbiAgICAgKiBAc2VlIFtQbGF5IG1hcCBsb2NhdGlvbnMgYXMgYSBzbGlkZXNob3ddKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvcGxheWJhY2stbG9jYXRpb25zLylcbiAgICAgKiBAc2VlIFtGaWx0ZXIgZmVhdHVyZXMgd2l0aGluIG1hcCB2aWV3XShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2ZpbHRlci1mZWF0dXJlcy13aXRoaW4tbWFwLXZpZXcvKVxuICAgICAqIEBzZWUgW0Rpc3BsYXkgSFRNTCBjbHVzdGVycyB3aXRoIGN1c3RvbSBwcm9wZXJ0aWVzXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9jbHVzdGVyLWh0bWwvKVxuICAgICAqL1xuICAgIHwgJ21vdmVlbmQnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgXCJkcmFnIHRvIHBhblwiIGludGVyYWN0aW9uIHN0YXJ0cy4gU2VlIHtAbGluayBEcmFnUGFuSGFuZGxlcn0uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZHJhZ3N0YXJ0XG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7e29yaWdpbmFsRXZlbnQ6IERyYWdFdmVudH19IGRhdGFcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEluaXRpYWxpemUgdGhlIG1hcFxuICAgICAqIHZhciBtYXAgPSBuZXcgbWFwYm94Z2wuTWFwKHsgLy8gbWFwIG9wdGlvbnMgfSk7XG4gICAgICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgZmlyZXNcbiAgICAgKiAvLyB3aGVuIGEgXCJkcmFnIHRvIHBhblwiIGludGVyYWN0aW9uIHN0YXJ0cy5cbiAgICAgKiBtYXAub24oJ2RyYWdzdGFydCcsIGZ1bmN0aW9uKCkge1xuICAgICAqICAgY29uc29sZS5sb2coJ0EgZHJhZ3N0YXJ0IGV2ZW50IG9jY3VycmVkLicpO1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIHwgJ2RyYWdzdGFydCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHJlcGVhdGVkbHkgZHVyaW5nIGEgXCJkcmFnIHRvIHBhblwiIGludGVyYWN0aW9uLiBTZWUge0BsaW5rIERyYWdQYW5IYW5kbGVyfS5cbiAgICAgKlxuICAgICAqIEBldmVudCBkcmFnXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwTW91c2VFdmVudCB8IE1hcFRvdWNoRXZlbnR9IGRhdGFcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEluaXRpYWxpemUgdGhlIG1hcFxuICAgICAqIHZhciBtYXAgPSBuZXcgbWFwYm94Z2wuTWFwKHsgLy8gbWFwIG9wdGlvbnMgfSk7XG4gICAgICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgZmlyZXNcbiAgICAgKiAvLyByZXBlYXRlZGx5ICBkdXJpbmcgYSBcImRyYWcgdG8gcGFuXCIgaW50ZXJhY3Rpb24uXG4gICAgICogbWFwLm9uKCdkcmFnJywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSBkcmFnIGV2ZW50IG9jY3VycmVkLicpO1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIHwgJ2RyYWcnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgXCJkcmFnIHRvIHBhblwiIGludGVyYWN0aW9uIGVuZHMuIFNlZSB7QGxpbmsgRHJhZ1BhbkhhbmRsZXJ9LlxuICAgICAqXG4gICAgICogQGV2ZW50IGRyYWdlbmRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHt7b3JpZ2luYWxFdmVudDogRHJhZ0V2ZW50fX0gZGF0YVxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gSW5pdGlhbGl6ZSB0aGUgbWFwXG4gICAgICogdmFyIG1hcCA9IG5ldyBtYXBib3hnbC5NYXAoeyAvLyBtYXAgb3B0aW9ucyB9KTtcbiAgICAgKiAvLyBTZXQgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBmaXJlc1xuICAgICAqIC8vIHdoZW4gYSBcImRyYWcgdG8gcGFuXCIgaW50ZXJhY3Rpb24gZW5kcy5cbiAgICAgKiBtYXAub24oJ2RyYWdlbmQnLCBmdW5jdGlvbigpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdBIGRyYWdlbmQgZXZlbnQgb2NjdXJyZWQuJyk7XG4gICAgICogfSk7XG4gICAgICogQHNlZSBbQ3JlYXRlIGEgZHJhZ2dhYmxlIG1hcmtlcl0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZHJhZy1hLW1hcmtlci8pXG4gICAgICovXG4gICAgfCAnZHJhZ2VuZCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIGp1c3QgYmVmb3JlIHRoZSBtYXAgYmVnaW5zIGEgdHJhbnNpdGlvbiBmcm9tIG9uZSB6b29tIGxldmVsIHRvIGFub3RoZXIsXG4gICAgICogYXMgdGhlIHJlc3VsdCBvZiBlaXRoZXIgdXNlciBpbnRlcmFjdGlvbiBvciBtZXRob2RzIHN1Y2ggYXMge0BsaW5rIE1hcCNmbHlUb30uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgem9vbXN0YXJ0XG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwTW91c2VFdmVudCB8IE1hcFRvdWNoRXZlbnR9IGRhdGFcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEluaXRpYWxpemUgdGhlIG1hcFxuICAgICAqIHZhciBtYXAgPSBuZXcgbWFwYm94Z2wuTWFwKHsgLy8gbWFwIG9wdGlvbnMgfSk7XG4gICAgICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgZmlyZXNcbiAgICAgKiAvLyBqdXN0IGJlZm9yZSBhIHpvb20gdHJhbnNpdGlvbiBzdGFydHMuXG4gICAgICogbWFwLm9uKCd6b29tc3RhcnQnLCBmdW5jdGlvbigpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdBIHpvb21zdGFydCBldmVudCBvY2N1cnJlZC4nKTtcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICB8ICd6b29tc3RhcnQnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCByZXBlYXRlZGx5IGR1cmluZyBhbiBhbmltYXRlZCB0cmFuc2l0aW9uIGZyb20gb25lIHpvb20gbGV2ZWwgdG8gYW5vdGhlcixcbiAgICAgKiBhcyB0aGUgcmVzdWx0IG9mIGVpdGhlciB1c2VyIGludGVyYWN0aW9uIG9yIG1ldGhvZHMgc3VjaCBhcyB7QGxpbmsgTWFwI2ZseVRvfS5cbiAgICAgKlxuICAgICAqIEBldmVudCB6b29tXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwTW91c2VFdmVudCB8IE1hcFRvdWNoRXZlbnR9IGRhdGFcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGZpcmVzXG4gICAgICogLy8gcmVwZWF0ZWRseSBkdXJpbmcgYSB6b29tIHRyYW5zaXRpb24uXG4gICAgICogbWFwLm9uKCd6b29tJywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSB6b29tIGV2ZW50IG9jY3VycmVkLicpO1xuICAgICAqIH0pO1xuICAgICAqIEBzZWUgW1VwZGF0ZSBhIGNob3JvcGxldGggbGF5ZXIgYnkgem9vbSBsZXZlbF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS91cGRhdGluZy1jaG9yb3BsZXRoLylcbiAgICAgKi9cbiAgICB8ICd6b29tJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQganVzdCBhZnRlciB0aGUgbWFwIGNvbXBsZXRlcyBhIHRyYW5zaXRpb24gZnJvbSBvbmUgem9vbSBsZXZlbCB0byBhbm90aGVyLFxuICAgICAqIGFzIHRoZSByZXN1bHQgb2YgZWl0aGVyIHVzZXIgaW50ZXJhY3Rpb24gb3IgbWV0aG9kcyBzdWNoIGFzIHtAbGluayBNYXAjZmx5VG99LlxuICAgICAqXG4gICAgICogQGV2ZW50IHpvb21lbmRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50IHwgTWFwVG91Y2hFdmVudH0gZGF0YVxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gSW5pdGlhbGl6ZSB0aGUgbWFwXG4gICAgICogdmFyIG1hcCA9IG5ldyBtYXBib3hnbC5NYXAoeyAvLyBtYXAgb3B0aW9ucyB9KTtcbiAgICAgKiAvLyBTZXQgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBmaXJlc1xuICAgICAqIC8vIGp1c3QgYWZ0ZXIgYSB6b29tIHRyYW5zaXRpb24gZmluaXNoZXMuXG4gICAgICogbWFwLm9uKCd6b29tZW5kJywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSB6b29tZW5kIGV2ZW50IG9jY3VycmVkLicpO1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIHwgJ3pvb21lbmQnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgXCJkcmFnIHRvIHJvdGF0ZVwiIGludGVyYWN0aW9uIHN0YXJ0cy4gU2VlIHtAbGluayBEcmFnUm90YXRlSGFuZGxlcn0uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgcm90YXRlc3RhcnRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50IHwgTWFwVG91Y2hFdmVudH0gZGF0YVxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gSW5pdGlhbGl6ZSB0aGUgbWFwXG4gICAgICogdmFyIG1hcCA9IG5ldyBtYXBib3hnbC5NYXAoeyAvLyBtYXAgb3B0aW9ucyB9KTtcbiAgICAgKiAvLyBTZXQgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBmaXJlc1xuICAgICAqIC8vIGp1c3QgYmVmb3JlIGEgXCJkcmFnIHRvIHJvdGF0ZVwiIGludGVyYWN0aW9uIHN0YXJ0cy5cbiAgICAgKiBtYXAub24oJ3JvdGF0ZXN0YXJ0JywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSByb3RhdGVzdGFydCBldmVudCBvY2N1cnJlZC4nKTtcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICB8ICdyb3RhdGVzdGFydCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHJlcGVhdGVkbHkgZHVyaW5nIGEgXCJkcmFnIHRvIHJvdGF0ZVwiIGludGVyYWN0aW9uLiBTZWUge0BsaW5rIERyYWdSb3RhdGVIYW5kbGVyfS5cbiAgICAgKlxuICAgICAqIEBldmVudCByb3RhdGVcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBNb3VzZUV2ZW50IHwgTWFwVG91Y2hFdmVudH0gZGF0YVxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gSW5pdGlhbGl6ZSB0aGUgbWFwXG4gICAgICogdmFyIG1hcCA9IG5ldyBtYXBib3hnbC5NYXAoeyAvLyBtYXAgb3B0aW9ucyB9KTtcbiAgICAgKiAvLyBTZXQgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBmaXJlc1xuICAgICAqIC8vIHJlcGVhdGVkbHkgZHVyaW5nIFwiZHJhZyB0byByb3RhdGVcIiBpbnRlcmFjdGlvbi5cbiAgICAgKiBtYXAub24oJ3JvdGF0ZScsIGZ1bmN0aW9uKCkge1xuICAgICAqICAgY29uc29sZS5sb2coJ0Egcm90YXRlIGV2ZW50IG9jY3VycmVkLicpO1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIHwgJ3JvdGF0ZSdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBcImRyYWcgdG8gcm90YXRlXCIgaW50ZXJhY3Rpb24gZW5kcy4gU2VlIHtAbGluayBEcmFnUm90YXRlSGFuZGxlcn0uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgcm90YXRlZW5kXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwTW91c2VFdmVudCB8IE1hcFRvdWNoRXZlbnR9IGRhdGFcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEluaXRpYWxpemUgdGhlIG1hcFxuICAgICAqIHZhciBtYXAgPSBuZXcgbWFwYm94Z2wuTWFwKHsgLy8gbWFwIG9wdGlvbnMgfSk7XG4gICAgICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgZmlyZXNcbiAgICAgKiAvLyBqdXN0IGFmdGVyIGEgXCJkcmFnIHRvIHJvdGF0ZVwiIGludGVyYWN0aW9uIGVuZHMuXG4gICAgICogbWFwLm9uKCdyb3RhdGVlbmQnLCBmdW5jdGlvbigpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdBIHJvdGF0ZWVuZCBldmVudCBvY2N1cnJlZC4nKTtcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICB8ICdyb3RhdGVlbmQnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuZXZlciB0aGUgbWFwJ3MgcGl0Y2ggKHRpbHQpIGJlZ2lucyBhIGNoYW5nZSBhc1xuICAgICAqIHRoZSByZXN1bHQgb2YgZWl0aGVyIHVzZXIgaW50ZXJhY3Rpb24gb3IgbWV0aG9kcyBzdWNoIGFzIHtAbGluayBNYXAjZmx5VG99IC5cbiAgICAgKlxuICAgICAqIEBldmVudCBwaXRjaHN0YXJ0XG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwRXZlbnREYXRhfSBkYXRhXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGZpcmVzXG4gICAgICogLy8ganVzdCBiZWZvcmUgYSBwaXRjaCAodGlsdCkgdHJhbnNpdGlvbiBzdGFydHMuXG4gICAgICogbWFwLm9uKCdwaXRjaHN0YXJ0JywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSBwaXRjaHN0YXJ0IGV2ZW50IG9jY3VycmVkLicpO1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIHwgJ3BpdGNoc3RhcnQnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCByZXBlYXRlZGx5IGR1cmluZyB0aGUgbWFwJ3MgcGl0Y2ggKHRpbHQpIGFuaW1hdGlvbiBiZXR3ZWVuXG4gICAgICogb25lIHN0YXRlIGFuZCBhbm90aGVyIGFzIHRoZSByZXN1bHQgb2YgZWl0aGVyIHVzZXIgaW50ZXJhY3Rpb25cbiAgICAgKiBvciBtZXRob2RzIHN1Y2ggYXMge0BsaW5rIE1hcCNmbHlUb30uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgcGl0Y2hcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBFdmVudERhdGF9IGRhdGFcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEluaXRpYWxpemUgdGhlIG1hcFxuICAgICAqIHZhciBtYXAgPSBuZXcgbWFwYm94Z2wuTWFwKHsgLy8gbWFwIG9wdGlvbnMgfSk7XG4gICAgICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgZmlyZXNcbiAgICAgKiAvLyByZXBlYXRlZGx5IGR1cmluZyBhIHBpdGNoICh0aWx0KSB0cmFuc2l0aW9uLlxuICAgICAqIG1hcC5vbigncGl0Y2gnLCBmdW5jdGlvbigpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdBIHBpdGNoIGV2ZW50IG9jY3VycmVkLicpO1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIHwgJ3BpdGNoJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIG1hcCdzIHBpdGNoICh0aWx0KSBmaW5pc2hlcyBjaGFuZ2luZyBhc1xuICAgICAqIHRoZSByZXN1bHQgb2YgZWl0aGVyIHVzZXIgaW50ZXJhY3Rpb24gb3IgbWV0aG9kcyBzdWNoIGFzIHtAbGluayBNYXAjZmx5VG99LlxuICAgICAqXG4gICAgICogQGV2ZW50IHBpdGNoZW5kXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwRXZlbnREYXRhfSBkYXRhXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGZpcmVzXG4gICAgICogLy8ganVzdCBhZnRlciBhIHBpdGNoICh0aWx0KSB0cmFuc2l0aW9uIGVuZHMuXG4gICAgICogbWFwLm9uKCdwaXRjaGVuZCcsIGZ1bmN0aW9uKCkge1xuICAgICAqICAgY29uc29sZS5sb2coJ0EgcGl0Y2hlbmQgZXZlbnQgb2NjdXJyZWQuJyk7XG4gICAgICogfSk7XG4gICAgICovXG4gICAgfCAncGl0Y2hlbmQnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgXCJib3ggem9vbVwiIGludGVyYWN0aW9uIHN0YXJ0cy4gU2VlIHtAbGluayBCb3hab29tSGFuZGxlcn0uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgYm94em9vbXN0YXJ0XG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwQm94Wm9vbUV2ZW50fSBkYXRhXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGZpcmVzXG4gICAgICogLy8ganVzdCBiZWZvcmUgYSBcImJveCB6b29tXCIgaW50ZXJhY3Rpb24gc3RhcnRzLlxuICAgICAqIG1hcC5vbignYm94em9vbXN0YXJ0JywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSBib3h6b29tc3RhcnQgZXZlbnQgb2NjdXJyZWQuJyk7XG4gICAgICogfSk7XG4gICAgICovXG4gICAgfCAnYm94em9vbXN0YXJ0J1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIFwiYm94IHpvb21cIiBpbnRlcmFjdGlvbiBlbmRzLiAgU2VlIHtAbGluayBCb3hab29tSGFuZGxlcn0uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgYm94em9vbWVuZFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwQm94Wm9vbUV2ZW50fSBkYXRhXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGZpcmVzXG4gICAgICogLy8ganVzdCBhZnRlciBhIFwiYm94IHpvb21cIiBpbnRlcmFjdGlvbiBlbmRzLlxuICAgICAqIG1hcC5vbignYm94em9vbWVuZCcsIGZ1bmN0aW9uKCkge1xuICAgICAqICAgY29uc29sZS5sb2coJ0EgYm94em9vbWVuZCBldmVudCBvY2N1cnJlZC4nKTtcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICB8ICdib3h6b29tZW5kJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgdXNlciBjYW5jZWxzIGEgXCJib3ggem9vbVwiIGludGVyYWN0aW9uLCBvciB3aGVuIHRoZSBib3VuZGluZyBib3ggZG9lcyBub3QgbWVldCB0aGUgbWluaW11bSBzaXplIHRocmVzaG9sZC5cbiAgICAgKiBTZWUge0BsaW5rIEJveFpvb21IYW5kbGVyfS5cbiAgICAgKlxuICAgICAqIEBldmVudCBib3h6b29tY2FuY2VsXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwQm94Wm9vbUV2ZW50fSBkYXRhXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGZpcmVzXG4gICAgICogLy8gdGhlIHVzZXIgY2FuY2VscyBhIFwiYm94IHpvb21cIiBpbnRlcmFjdGlvbi5cbiAgICAgKiBtYXAub24oJ2JveHpvb21jYW5jZWwnLCBmdW5jdGlvbigpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdBIGJveHpvb21jYW5jZWwgZXZlbnQgb2NjdXJyZWQuJyk7XG4gICAgICogfSk7XG4gICAgICovXG4gICAgfCAnYm94em9vbWNhbmNlbCdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBtYXAgaGFzIGJlZW4gcmVzaXplZC5cbiAgICAgKlxuICAgICAqIEBldmVudCByZXNpemVcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGZpcmVzXG4gICAgICogLy8gaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIG1hcCBoYXMgYmVlbiByZXNpemVkLlxuICAgICAqIG1hcC5vbigncmVzaXplJywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSByZXNpemUgZXZlbnQgb2NjdXJyZWQuJyk7XG4gICAgICogfSk7XG4gICAgICovXG4gICAgfCAncmVzaXplJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgV2ViR0wgY29udGV4dCBpcyBsb3N0LlxuICAgICAqXG4gICAgICogQGV2ZW50IHdlYmdsY29udGV4dGxvc3RcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGZpcmVzXG4gICAgICogLy8gd2hlbiB0aGUgV2ViR0wgY29udGV4dCBpcyBsb3N0LlxuICAgICAqIG1hcC5vbignd2ViZ2xjb250ZXh0bG9zdCcsIGZ1bmN0aW9uKCkge1xuICAgICAqICAgY29uc29sZS5sb2coJ0Egd2ViZ2xjb250ZXh0bG9zdCBldmVudCBvY2N1cnJlZC4nKTtcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICB8ICd3ZWJnbGNvbnRleHRsb3N0J1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgV2ViR0wgY29udGV4dCBpcyByZXN0b3JlZC5cbiAgICAgKlxuICAgICAqIEBldmVudCB3ZWJnbGNvbnRleHRyZXN0b3JlZFxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEluaXRpYWxpemUgdGhlIG1hcFxuICAgICAqIHZhciBtYXAgPSBuZXcgbWFwYm94Z2wuTWFwKHsgLy8gbWFwIG9wdGlvbnMgfSk7XG4gICAgICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgZmlyZXNcbiAgICAgKiAvLyB3aGVuIHRoZSBXZWJHTCBjb250ZXh0IGlzIHJlc3RvcmVkLlxuICAgICAqIG1hcC5vbignd2ViZ2xjb250ZXh0cmVzdG9yZWQnLCBmdW5jdGlvbigpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdBIHdlYmdsY29udGV4dHJlc3RvcmVkIGV2ZW50IG9jY3VycmVkLicpO1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIHwgJ3dlYmdsY29udGV4dHJlc3RvcmVkJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgYWxsIG5lY2Vzc2FyeSByZXNvdXJjZXMgaGF2ZSBiZWVuIGRvd25sb2FkZWRcbiAgICAgKiBhbmQgdGhlIGZpcnN0IHZpc3VhbGx5IGNvbXBsZXRlIHJlbmRlcmluZyBvZiB0aGUgbWFwIGhhcyBvY2N1cnJlZC5cbiAgICAgKlxuICAgICAqIEBldmVudCBsb2FkXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGZpcmVzXG4gICAgICogLy8gd2hlbiB0aGUgbWFwIGhhcyBmaW5pc2hlZCBsb2FkaW5nLlxuICAgICAqIG1hcC5vbignbG9hZCcsIGZ1bmN0aW9uKCkge1xuICAgICAqICAgY29uc29sZS5sb2coJ0EgbG9hZCBldmVudCBvY2N1cnJlZC4nKTtcbiAgICAgKiB9KTtcbiAgICAgKiBAc2VlIFtEcmF3IEdlb0pTT04gcG9pbnRzXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2dlb2pzb24tbWFya2Vycy8pXG4gICAgICogQHNlZSBbQWRkIGxpdmUgcmVhbHRpbWUgZGF0YV0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9saXZlLWdlb2pzb24vKVxuICAgICAqIEBzZWUgW0FuaW1hdGUgYSBwb2ludF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9hbmltYXRlLXBvaW50LWFsb25nLWxpbmUvKVxuICAgICAqL1xuICAgIHwgJ2xvYWQnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuZXZlciB0aGUgbWFwIGlzIGRyYXduIHRvIHRoZSBzY3JlZW4sIGFzIHRoZSByZXN1bHQgb2ZcbiAgICAgKlxuICAgICAqIC0gYSBjaGFuZ2UgdG8gdGhlIG1hcCdzIHBvc2l0aW9uLCB6b29tLCBwaXRjaCwgb3IgYmVhcmluZ1xuICAgICAqIC0gYSBjaGFuZ2UgdG8gdGhlIG1hcCdzIHN0eWxlXG4gICAgICogLSBhIGNoYW5nZSB0byBhIEdlb0pTT04gc291cmNlXG4gICAgICogLSB0aGUgbG9hZGluZyBvZiBhIHZlY3RvciB0aWxlLCBHZW9KU09OIGZpbGUsIGdseXBoLCBvciBzcHJpdGVcbiAgICAgKlxuICAgICAqIEBldmVudCByZW5kZXJcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGZpcmVzXG4gICAgICogLy8gd2hlbmV2ZXIgdGhlIG1hcCBpcyBkcmF3biB0byB0aGUgc2NyZWVuLlxuICAgICAqIG1hcC5vbigncmVuZGVyJywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSByZW5kZXIgZXZlbnQgb2NjdXJyZWQuJyk7XG4gICAgICogfSk7XG4gICAgICovXG4gICAgfCAncmVuZGVyJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgYWZ0ZXIgdGhlIGxhc3QgZnJhbWUgcmVuZGVyZWQgYmVmb3JlIHRoZSBtYXAgZW50ZXJzIGFuXG4gICAgICogXCJpZGxlXCIgc3RhdGU6XG4gICAgICpcbiAgICAgKiAtIE5vIGNhbWVyYSB0cmFuc2l0aW9ucyBhcmUgaW4gcHJvZ3Jlc3NcbiAgICAgKiAtIEFsbCBjdXJyZW50bHkgcmVxdWVzdGVkIHRpbGVzIGhhdmUgbG9hZGVkXG4gICAgICogLSBBbGwgZmFkZS90cmFuc2l0aW9uIGFuaW1hdGlvbnMgaGF2ZSBjb21wbGV0ZWRcbiAgICAgKlxuICAgICAqIEBldmVudCBpZGxlXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gSW5pdGlhbGl6ZSB0aGUgbWFwXG4gICAgICogdmFyIG1hcCA9IG5ldyBtYXBib3hnbC5NYXAoeyAvLyBtYXAgb3B0aW9ucyB9KTtcbiAgICAgKiAvLyBTZXQgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBmaXJlc1xuICAgICAqIC8vIGp1c3QgYmVmb3JlIHRoZSBtYXAgZW50ZXJzIGFuIFwiaWRsZVwiIHN0YXRlLlxuICAgICAqIG1hcC5vbignaWRsZScsIGZ1bmN0aW9uKCkge1xuICAgICAqICAgY29uc29sZS5sb2coJ0EgaWRsZSBldmVudCBvY2N1cnJlZC4nKTtcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICB8ICdpZGxlJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIG1hcCBoYXMgYmVlbiByZW1vdmVkIHdpdGgge0BsaW5rIE1hcC5ldmVudDpyZW1vdmV9LlxuICAgICAqXG4gICAgICogQGV2ZW50IHJlbW92ZVxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEluaXRpYWxpemUgdGhlIG1hcFxuICAgICAqIHZhciBtYXAgPSBuZXcgbWFwYm94Z2wuTWFwKHsgLy8gbWFwIG9wdGlvbnMgfSk7XG4gICAgICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgZmlyZXNcbiAgICAgKiAvLyBqdXN0IGFmdGVyIHRoZSBtYXAgaXMgcmVtb3ZlZC5cbiAgICAgKiBtYXAub24oJ3JlbW92ZScsIGZ1bmN0aW9uKCkge1xuICAgICAqICAgY29uc29sZS5sb2coJ0EgcmVtb3ZlIGV2ZW50IG9jY3VycmVkLicpO1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIHwgJ3JlbW92ZSdcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYW4gZXJyb3Igb2NjdXJzLiBUaGlzIGlzIEdMIEpTJ3MgcHJpbWFyeSBlcnJvciByZXBvcnRpbmdcbiAgICAgKiBtZWNoYW5pc20uIFdlIHVzZSBhbiBldmVudCBpbnN0ZWFkIG9mIGB0aHJvd2AgdG8gYmV0dGVyIGFjY29tbW9kYXRlXG4gICAgICogYXN5bmNyb25vdXMgb3BlcmF0aW9ucy4gSWYgbm8gbGlzdGVuZXJzIGFyZSBib3VuZCB0byB0aGUgYGVycm9yYCBldmVudCwgdGhlXG4gICAgICogZXJyb3Igd2lsbCBiZSBwcmludGVkIHRvIHRoZSBjb25zb2xlLlxuICAgICAqXG4gICAgICogQGV2ZW50IGVycm9yXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7e2Vycm9yOiB7bWVzc2FnZTogc3RyaW5nfX19IGRhdGFcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEluaXRpYWxpemUgdGhlIG1hcFxuICAgICAqIHZhciBtYXAgPSBuZXcgbWFwYm94Z2wuTWFwKHsgLy8gbWFwIG9wdGlvbnMgfSk7XG4gICAgICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgZmlyZXNcbiAgICAgKiAvLyB3aGVuIGFuIGVycm9yIG9jY3Vycy5cbiAgICAgKiBtYXAub24oJ2Vycm9yJywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSBlcnJvciBldmVudCBvY2N1cnJlZC4nKTtcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICB8ICdlcnJvcidcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYW55IG1hcCBkYXRhIGxvYWRzIG9yIGNoYW5nZXMuIFNlZSB7QGxpbmsgTWFwRGF0YUV2ZW50fVxuICAgICAqIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgICAqXG4gICAgICogQGV2ZW50IGRhdGFcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBEYXRhRXZlbnR9IGRhdGFcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEluaXRpYWxpemUgdGhlIG1hcFxuICAgICAqIHZhciBtYXAgPSBuZXcgbWFwYm94Z2wuTWFwKHsgLy8gbWFwIG9wdGlvbnMgfSk7XG4gICAgICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgZmlyZXNcbiAgICAgKiAvLyB3aGVuIG1hcCBkYXRhIGxvYWRzIG9yIGNoYW5nZXMuXG4gICAgICogbWFwLm9uKCdkYXRhJywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSBkYXRhIGV2ZW50IG9jY3VycmVkLicpO1xuICAgICAqIH0pO1xuICAgICAqIEBzZWUgW0Rpc3BsYXkgSFRNTCBjbHVzdGVycyB3aXRoIGN1c3RvbSBwcm9wZXJ0aWVzXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9jbHVzdGVyLWh0bWwvKVxuICAgICAqL1xuICAgIHwgJ2RhdGEnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSBtYXAncyBzdHlsZSBsb2FkcyBvciBjaGFuZ2VzLiBTZWVcbiAgICAgKiB7QGxpbmsgTWFwRGF0YUV2ZW50fSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAgKlxuICAgICAqIEBldmVudCBzdHlsZWRhdGFcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBEYXRhRXZlbnR9IGRhdGFcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEluaXRpYWxpemUgdGhlIG1hcFxuICAgICAqIHZhciBtYXAgPSBuZXcgbWFwYm94Z2wuTWFwKHsgLy8gbWFwIG9wdGlvbnMgfSk7XG4gICAgICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgZmlyZXNcbiAgICAgKiAvLyB3aGVuIHRoZSBtYXAncyBzdHlsZSBsb2FkcyBvciBjaGFuZ2VzLlxuICAgICAqIG1hcC5vbignc3R5bGVkYXRhJywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSBzdHlsZWRhdGEgZXZlbnQgb2NjdXJyZWQuJyk7XG4gICAgICogfSk7XG4gICAgICovXG4gICAgfCAnc3R5bGVkYXRhJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBvbmUgb2YgdGhlIG1hcCdzIHNvdXJjZXMgbG9hZHMgb3IgY2hhbmdlcywgaW5jbHVkaW5nIGlmIGEgdGlsZSBiZWxvbmdpbmdcbiAgICAgKiB0byBhIHNvdXJjZSBsb2FkcyBvciBjaGFuZ2VzLiBTZWUge0BsaW5rIE1hcERhdGFFdmVudH0gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc291cmNlZGF0YVxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcHJvcGVydHkge01hcERhdGFFdmVudH0gZGF0YVxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gSW5pdGlhbGl6ZSB0aGUgbWFwXG4gICAgICogdmFyIG1hcCA9IG5ldyBtYXBib3hnbC5NYXAoeyAvLyBtYXAgb3B0aW9ucyB9KTtcbiAgICAgKiAvLyBTZXQgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBmaXJlc1xuICAgICAqIC8vIHdoZW4gb25lIG9mIHRoZSBtYXAncyBzb3VyY2VzIGxvYWRzIG9yIGNoYW5nZXMuXG4gICAgICogbWFwLm9uKCdzb3VyY2VkYXRhJywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSBzb3VyY2VkYXRhIGV2ZW50IG9jY3VycmVkLicpO1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIHwgJ3NvdXJjZWRhdGEnXG5cbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGFueSBtYXAgZGF0YSAoc3R5bGUsIHNvdXJjZSwgdGlsZSwgZXRjKSBiZWdpbnMgbG9hZGluZyBvclxuICAgICAqIGNoYW5naW5nIGFzeW5jcm9ub3VzbHkuIEFsbCBgZGF0YWxvYWRpbmdgIGV2ZW50cyBhcmUgZm9sbG93ZWQgYnkgYSBgZGF0YWBcbiAgICAgKiBvciBgZXJyb3JgIGV2ZW50LiBTZWUge0BsaW5rIE1hcERhdGFFdmVudH0gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICpcbiAgICAgKiBAZXZlbnQgZGF0YWxvYWRpbmdcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtNYXBEYXRhRXZlbnR9IGRhdGFcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEluaXRpYWxpemUgdGhlIG1hcFxuICAgICAqIHZhciBtYXAgPSBuZXcgbWFwYm94Z2wuTWFwKHsgLy8gbWFwIG9wdGlvbnMgfSk7XG4gICAgICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgZmlyZXNcbiAgICAgKiAvLyB3aGVuIGFueSBtYXAgZGF0YSBiZWdpbnMgbG9hZGluZ1xuICAgICAqIC8vIG9yIGNoYW5naW5nIGFzeW5jaHJvbm91c2x5LlxuICAgICAqIG1hcC5vbignZGF0YWxvYWRpbmcnLCBmdW5jdGlvbigpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdBIGRhdGFsb2FkaW5nIGV2ZW50IG9jY3VycmVkLicpO1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIHwgJ2RhdGFsb2FkaW5nJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgbWFwJ3Mgc3R5bGUgYmVnaW5zIGxvYWRpbmcgb3IgY2hhbmdpbmcgYXN5bmNyb25vdXNseS5cbiAgICAgKiBBbGwgYHN0eWxlZGF0YWxvYWRpbmdgIGV2ZW50cyBhcmUgZm9sbG93ZWQgYnkgYSBgc3R5bGVkYXRhYFxuICAgICAqIG9yIGBlcnJvcmAgZXZlbnQuIFNlZSB7QGxpbmsgTWFwRGF0YUV2ZW50fSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAgKlxuICAgICAqIEBldmVudCBzdHlsZWRhdGFsb2FkaW5nXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwRGF0YUV2ZW50fSBkYXRhXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGZpcmVzXG4gICAgICogLy8gbWFwJ3Mgc3R5bGUgYmVnaW5zIGxvYWRpbmcgb3JcbiAgICAgKiAvLyBjaGFuZ2luZyBhc3luY3Jvbm91c2x5LlxuICAgICAqIG1hcC5vbignc3R5bGVkYXRhbG9hZGluZycsIGZ1bmN0aW9uKCkge1xuICAgICAqICAgY29uc29sZS5sb2coJ0Egc3R5bGVkYXRhbG9hZGluZyBldmVudCBvY2N1cnJlZC4nKTtcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICB8ICdzdHlsZWRhdGFsb2FkaW5nJ1xuXG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBvbmUgb2YgdGhlIG1hcCdzIHNvdXJjZXMgYmVnaW5zIGxvYWRpbmcgb3IgY2hhbmdpbmcgYXN5bmNyb25vdXNseS5cbiAgICAgKiBBbGwgYHNvdXJjZWRhdGFsb2FkaW5nYCBldmVudHMgYXJlIGZvbGxvd2VkIGJ5IGEgYHNvdXJjZWRhdGFgIG9yIGBlcnJvcmAgZXZlbnQuXG4gICAgICogU2VlIHtAbGluayBNYXBEYXRhRXZlbnR9IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgICAqXG4gICAgICogQGV2ZW50IHNvdXJjZWRhdGFsb2FkaW5nXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBwcm9wZXJ0eSB7TWFwRGF0YUV2ZW50fSBkYXRhXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJbml0aWFsaXplIHRoZSBtYXBcbiAgICAgKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7IC8vIG1hcCBvcHRpb25zIH0pO1xuICAgICAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGZpcmVzXG4gICAgICogLy8gbWFwJ3Mgc291cmNlcyBiZWdpbiBsb2FkaW5nIG9yXG4gICAgICogLy8gY2hhbmdpbmcgYXN5bmNyb25vdXNseS5cbiAgICAgKiBtYXAub24oJ3NvdXJjZWRhdGFsb2FkaW5nJywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSBzb3VyY2VkYXRhbG9hZGluZyBldmVudCBvY2N1cnJlZC4nKTtcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICB8ICdzb3VyY2VkYXRhbG9hZGluZydcblxuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYW4gaWNvbiBvciBwYXR0ZXJuIG5lZWRlZCBieSB0aGUgc3R5bGUgaXMgbWlzc2luZy4gVGhlIG1pc3NpbmcgaW1hZ2UgY2FuXG4gICAgICogYmUgYWRkZWQgd2l0aCB7QGxpbmsgTWFwI2FkZEltYWdlfSB3aXRoaW4gdGhpcyBldmVudCBsaXN0ZW5lciBjYWxsYmFjayB0byBwcmV2ZW50IHRoZSBpbWFnZSBmcm9tXG4gICAgICogYmVpbmcgc2tpcHBlZC4gVGhpcyBldmVudCBjYW4gYmUgdXNlZCB0byBkeW5hbWljYWxseSBnZW5lcmF0ZSBpY29ucyBhbmQgcGF0dGVybnMuXG4gICAgICpcbiAgICAgKiBAZXZlbnQgc3R5bGVpbWFnZW1pc3NpbmdcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IGlkIFRoZSBpZCBvZiB0aGUgbWlzc2luZyBpbWFnZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEluaXRpYWxpemUgdGhlIG1hcFxuICAgICAqIHZhciBtYXAgPSBuZXcgbWFwYm94Z2wuTWFwKHsgLy8gbWFwIG9wdGlvbnMgfSk7XG4gICAgICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgZmlyZXNcbiAgICAgKiAvLyBhbiBpY29uIG9yIHBhdHRlcm4gaXMgbWlzc2luZy5cbiAgICAgKiBtYXAub24oJ3N0eWxlaW1hZ2VtaXNzaW5nJywgZnVuY3Rpb24oKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnQSBzdHlsZWltYWdlbWlzc2luZyBldmVudCBvY2N1cnJlZC4nKTtcbiAgICAgKiB9KTtcbiAgICAgKiBAc2VlIFtHZW5lcmF0ZSBhbmQgYWRkIGEgbWlzc2luZyBpY29uIHRvIHRoZSBtYXBdKGh0dHBzOi8vbWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9hZGQtaW1hZ2UtbWlzc2luZy1nZW5lcmF0ZWQvKVxuICAgICAqL1xuICAgIHwgJ3N0eWxlaW1hZ2VtaXNzaW5nJ1xuXG4gICAgLyoqXG4gICAgICogQGV2ZW50IHN0eWxlLmxvYWRcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICB8ICdzdHlsZS5sb2FkJztcbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7TWFwTW91c2VFdmVudCwgTWFwVG91Y2hFdmVudCwgTWFwV2hlZWxFdmVudH0gZnJvbSAnLi4vZXZlbnRzJztcbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi9tYXAnO1xuXG5leHBvcnQgY2xhc3MgTWFwRXZlbnRIYW5kbGVyIHtcblxuICAgIF9tb3VzZWRvd25Qb3M6IFBvaW50O1xuICAgIF9jbGlja1RvbGVyYW5jZTogbnVtYmVyO1xuICAgIF9tYXA6IE1hcDtcblxuICAgIGNvbnN0cnVjdG9yKG1hcDogTWFwLCBvcHRpb25zOiB7IGNsaWNrVG9sZXJhbmNlOiBudW1iZXIgfSkge1xuICAgICAgICB0aGlzLl9tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMuX2NsaWNrVG9sZXJhbmNlID0gb3B0aW9ucy5jbGlja1RvbGVyYW5jZTtcbiAgICB9XG5cbiAgICByZXNldCgpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuX21vdXNlZG93blBvcztcbiAgICB9XG5cbiAgICB3aGVlbChlOiBXaGVlbEV2ZW50KSB7XG4gICAgICAgIC8vIElmIG1hcEV2ZW50LnByZXZlbnREZWZhdWx0KCkgaXMgY2FsbGVkIGJ5IHRoZSB1c2VyLCBwcmV2ZW50IGhhbmRsZXJzIHN1Y2ggYXM6XG4gICAgICAgIC8vIC0gU2Nyb2xsWm9vbVxuICAgICAgICByZXR1cm4gdGhpcy5fZmlyZVByZXZlbnRhYmxlKG5ldyBNYXBXaGVlbEV2ZW50KGUudHlwZSwgdGhpcy5fbWFwLCBlKSk7XG4gICAgfVxuXG4gICAgbW91c2Vkb3duKGU6IE1vdXNlRXZlbnQsIHBvaW50OiBQb2ludCkge1xuICAgICAgICB0aGlzLl9tb3VzZWRvd25Qb3MgPSBwb2ludDtcbiAgICAgICAgLy8gSWYgbWFwRXZlbnQucHJldmVudERlZmF1bHQoKSBpcyBjYWxsZWQgYnkgdGhlIHVzZXIsIHByZXZlbnQgaGFuZGxlcnMgc3VjaCBhczpcbiAgICAgICAgLy8gLSBNb3VzZVBhblxuICAgICAgICAvLyAtIE1vdXNlUm90YXRlXG4gICAgICAgIC8vIC0gTW91c2VQaXRjaFxuICAgICAgICAvLyAtIERibGNsaWNrSGFuZGxlclxuICAgICAgICByZXR1cm4gdGhpcy5fZmlyZVByZXZlbnRhYmxlKG5ldyBNYXBNb3VzZUV2ZW50KGUudHlwZSwgdGhpcy5fbWFwLCBlKSk7XG4gICAgfVxuXG4gICAgbW91c2V1cChlOiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIHRoaXMuX21hcC5maXJlKG5ldyBNYXBNb3VzZUV2ZW50KGUudHlwZSwgdGhpcy5fbWFwLCBlKSk7XG4gICAgfVxuXG4gICAgY2xpY2soZTogTW91c2VFdmVudCwgcG9pbnQ6IFBvaW50KSB7XG4gICAgICAgIGlmICh0aGlzLl9tb3VzZWRvd25Qb3MgJiYgdGhpcy5fbW91c2Vkb3duUG9zLmRpc3QocG9pbnQpID49IHRoaXMuX2NsaWNrVG9sZXJhbmNlKSByZXR1cm47XG4gICAgICAgIHRoaXMuX21hcC5maXJlKG5ldyBNYXBNb3VzZUV2ZW50KGUudHlwZSwgdGhpcy5fbWFwLCBlKSk7XG4gICAgfVxuXG4gICAgZGJsY2xpY2soZTogTW91c2VFdmVudCkge1xuICAgICAgICAvLyBJZiBtYXBFdmVudC5wcmV2ZW50RGVmYXVsdCgpIGlzIGNhbGxlZCBieSB0aGUgdXNlciwgcHJldmVudCBoYW5kbGVycyBzdWNoIGFzOlxuICAgICAgICAvLyAtIERibENsaWNrWm9vbVxuICAgICAgICByZXR1cm4gdGhpcy5fZmlyZVByZXZlbnRhYmxlKG5ldyBNYXBNb3VzZUV2ZW50KGUudHlwZSwgdGhpcy5fbWFwLCBlKSk7XG4gICAgfVxuXG4gICAgbW91c2VvdmVyKGU6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgdGhpcy5fbWFwLmZpcmUobmV3IE1hcE1vdXNlRXZlbnQoZS50eXBlLCB0aGlzLl9tYXAsIGUpKTtcbiAgICB9XG5cbiAgICBtb3VzZW91dChlOiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIHRoaXMuX21hcC5maXJlKG5ldyBNYXBNb3VzZUV2ZW50KGUudHlwZSwgdGhpcy5fbWFwLCBlKSk7XG4gICAgfVxuXG4gICAgdG91Y2hzdGFydChlOiBUb3VjaEV2ZW50KSB7XG4gICAgICAgIC8vIElmIG1hcEV2ZW50LnByZXZlbnREZWZhdWx0KCkgaXMgY2FsbGVkIGJ5IHRoZSB1c2VyLCBwcmV2ZW50IGhhbmRsZXJzIHN1Y2ggYXM6XG4gICAgICAgIC8vIC0gVG91Y2hQYW5cbiAgICAgICAgLy8gLSBUb3VjaFpvb21cbiAgICAgICAgLy8gLSBUb3VjaFJvdGF0ZVxuICAgICAgICAvLyAtIFRvdWNoUGl0Y2hcbiAgICAgICAgLy8gLSBUYXBab29tXG4gICAgICAgIC8vIC0gU3dpcGVab29tXG4gICAgICAgIHJldHVybiB0aGlzLl9maXJlUHJldmVudGFibGUobmV3IE1hcFRvdWNoRXZlbnQoZS50eXBlLCB0aGlzLl9tYXAsIGUpKTtcbiAgICB9XG5cbiAgICB0b3VjaG1vdmUoZTogVG91Y2hFdmVudCkge1xuICAgICAgICB0aGlzLl9tYXAuZmlyZShuZXcgTWFwVG91Y2hFdmVudChlLnR5cGUsIHRoaXMuX21hcCwgZSkpO1xuICAgIH1cblxuICAgIHRvdWNoZW5kKGU6IFRvdWNoRXZlbnQpIHtcbiAgICAgICAgdGhpcy5fbWFwLmZpcmUobmV3IE1hcFRvdWNoRXZlbnQoZS50eXBlLCB0aGlzLl9tYXAsIGUpKTtcbiAgICB9XG5cbiAgICB0b3VjaGNhbmNlbChlOiBUb3VjaEV2ZW50KSB7XG4gICAgICAgIHRoaXMuX21hcC5maXJlKG5ldyBNYXBUb3VjaEV2ZW50KGUudHlwZSwgdGhpcy5fbWFwLCBlKSk7XG4gICAgfVxuXG4gICAgX2ZpcmVQcmV2ZW50YWJsZShtYXBFdmVudDogTWFwTW91c2VFdmVudCB8IE1hcFRvdWNoRXZlbnQgfCBNYXBXaGVlbEV2ZW50KSB7XG4gICAgICAgIHRoaXMuX21hcC5maXJlKG1hcEV2ZW50KTtcbiAgICAgICAgaWYgKG1hcEV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgIC8vIHJldHVybmluZyBhbiBvYmplY3QgbWFya3MgdGhlIGhhbmRsZXIgYXMgYWN0aXZlIGFuZCByZXNldHMgb3RoZXIgaGFuZGxlcnNcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzRW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZW5hYmxlKCkge31cbiAgICBkaXNhYmxlKCkge31cbn1cblxuZXhwb3J0IGNsYXNzIEJsb2NrYWJsZU1hcEV2ZW50SGFuZGxlciB7XG4gICAgX21hcDogTWFwO1xuICAgIF9kZWxheUNvbnRleHRNZW51OiBib29sZWFuO1xuICAgIF9jb250ZXh0TWVudUV2ZW50OiBNb3VzZUV2ZW50O1xuXG4gICAgY29uc3RydWN0b3IobWFwOiBNYXApIHtcbiAgICAgICAgdGhpcy5fbWFwID0gbWFwO1xuICAgIH1cblxuICAgIHJlc2V0KCkge1xuICAgICAgICB0aGlzLl9kZWxheUNvbnRleHRNZW51ID0gZmFsc2U7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9jb250ZXh0TWVudUV2ZW50O1xuICAgIH1cblxuICAgIG1vdXNlbW92ZShlOiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIC8vIG1vdXNlbW92ZSBtYXAgZXZlbnRzIHNob3VsZCBub3QgYmUgZmlyZWQgd2hlbiBpbnRlcmFjdGlvbiBoYW5kbGVycyAocGFuLCByb3RhdGUsIGV0YykgYXJlIGFjdGl2ZVxuICAgICAgICB0aGlzLl9tYXAuZmlyZShuZXcgTWFwTW91c2VFdmVudChlLnR5cGUsIHRoaXMuX21hcCwgZSkpO1xuICAgIH1cblxuICAgIG1vdXNlZG93bigpIHtcbiAgICAgICAgdGhpcy5fZGVsYXlDb250ZXh0TWVudSA9IHRydWU7XG4gICAgfVxuXG4gICAgbW91c2V1cCgpIHtcbiAgICAgICAgdGhpcy5fZGVsYXlDb250ZXh0TWVudSA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5fY29udGV4dE1lbnVFdmVudCkge1xuICAgICAgICAgICAgdGhpcy5fbWFwLmZpcmUobmV3IE1hcE1vdXNlRXZlbnQoJ2NvbnRleHRtZW51JywgdGhpcy5fbWFwLCB0aGlzLl9jb250ZXh0TWVudUV2ZW50KSk7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fY29udGV4dE1lbnVFdmVudDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb250ZXh0bWVudShlOiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLl9kZWxheUNvbnRleHRNZW51KSB7XG4gICAgICAgICAgICAvLyBNYWM6IGNvbnRleHRtZW51IGZpcmVkIG9uIG1vdXNlZG93bjsgd2Ugc2F2ZSBpdCB1bnRpbCBtb3VzZXVwIGZvciBjb25zaXN0ZW5jeSdzIHNha2VcbiAgICAgICAgICAgIHRoaXMuX2NvbnRleHRNZW51RXZlbnQgPSBlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gV2luZG93czogY29udGV4dG1lbnUgZmlyZWQgb24gbW91c2V1cCwgc28gZmlyZSBldmVudCBub3dcbiAgICAgICAgICAgIHRoaXMuX21hcC5maXJlKG5ldyBNYXBNb3VzZUV2ZW50KGUudHlwZSwgdGhpcy5fbWFwLCBlKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBwcmV2ZW50IGJyb3dzZXIgY29udGV4dCBtZW51IHdoZW4gbmVjZXNzYXJ5XG4gICAgICAgIGlmICh0aGlzLl9tYXAubGlzdGVucygnY29udGV4dG1lbnUnKSkge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNFbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBlbmFibGUoKSB7fVxuICAgIGRpc2FibGUoKSB7fVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IERPTSBmcm9tICcuLi8uLi91dGlsL2RvbSc7XG5cbmltcG9ydCB7RXZlbnR9IGZyb20gJy4uLy4uL3V0aWwvZXZlbnRlZCc7XG5cbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi9tYXAnO1xuXG4vKipcbiAqIFRoZSBgQm94Wm9vbUhhbmRsZXJgIGFsbG93cyB0aGUgdXNlciB0byB6b29tIHRoZSBtYXAgdG8gZml0IHdpdGhpbiBhIGJvdW5kaW5nIGJveC5cbiAqIFRoZSBib3VuZGluZyBib3ggaXMgZGVmaW5lZCBieSBjbGlja2luZyBhbmQgaG9sZGluZyBgc2hpZnRgIHdoaWxlIGRyYWdnaW5nIHRoZSBjdXJzb3IuXG4gKi9cbmNsYXNzIEJveFpvb21IYW5kbGVyIHtcbiAgICBfbWFwOiBNYXA7XG4gICAgX2VsOiBIVE1MRWxlbWVudDtcbiAgICBfY29udGFpbmVyOiBIVE1MRWxlbWVudDtcbiAgICBfZW5hYmxlZDogYm9vbGVhbjtcbiAgICBfYWN0aXZlOiBib29sZWFuO1xuICAgIF9zdGFydFBvczogUG9pbnQ7XG4gICAgX2xhc3RQb3M6IFBvaW50O1xuICAgIF9ib3g6IEhUTUxFbGVtZW50O1xuICAgIF9jbGlja1RvbGVyYW5jZTogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihtYXA6IE1hcCwgb3B0aW9uczoge1xuICAgICAgICBjbGlja1RvbGVyYW5jZTogbnVtYmVyXG4gICAgfSkge1xuICAgICAgICB0aGlzLl9tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMuX2VsID0gbWFwLmdldENhbnZhc0NvbnRhaW5lcigpO1xuICAgICAgICB0aGlzLl9jb250YWluZXIgPSBtYXAuZ2V0Q29udGFpbmVyKCk7XG4gICAgICAgIHRoaXMuX2NsaWNrVG9sZXJhbmNlID0gb3B0aW9ucy5jbGlja1RvbGVyYW5jZSB8fCAxO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgXCJib3ggem9vbVwiIGludGVyYWN0aW9uIGlzIGVuYWJsZWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBcImJveCB6b29tXCIgaW50ZXJhY3Rpb24gaXMgZW5hYmxlZC5cbiAgICAgKi9cbiAgICBpc0VuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2VuYWJsZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBcImJveCB6b29tXCIgaW50ZXJhY3Rpb24gaXMgYWN0aXZlLCBpLmUuIGN1cnJlbnRseSBiZWluZyB1c2VkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgXCJib3ggem9vbVwiIGludGVyYWN0aW9uIGlzIGFjdGl2ZS5cbiAgICAgKi9cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fYWN0aXZlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgdGhlIFwiYm94IHpvb21cIiBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogICBtYXAuYm94Wm9vbS5lbmFibGUoKTtcbiAgICAgKi9cbiAgICBlbmFibGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRW5hYmxlZCgpKSByZXR1cm47XG4gICAgICAgIHRoaXMuX2VuYWJsZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERpc2FibGVzIHRoZSBcImJveCB6b29tXCIgaW50ZXJhY3Rpb24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICAgbWFwLmJveFpvb20uZGlzYWJsZSgpO1xuICAgICAqL1xuICAgIGRpc2FibGUoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0VuYWJsZWQoKSkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgbW91c2Vkb3duKGU6IE1vdXNlRXZlbnQsIHBvaW50OiBQb2ludCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNFbmFibGVkKCkpIHJldHVybjtcbiAgICAgICAgaWYgKCEoZS5zaGlmdEtleSAmJiBlLmJ1dHRvbiA9PT0gMCkpIHJldHVybjtcblxuICAgICAgICBET00uZGlzYWJsZURyYWcoKTtcbiAgICAgICAgdGhpcy5fc3RhcnRQb3MgPSB0aGlzLl9sYXN0UG9zID0gcG9pbnQ7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgbW91c2Vtb3ZlV2luZG93KGU6IE1vdXNlRXZlbnQsIHBvaW50OiBQb2ludCkge1xuICAgICAgICBpZiAoIXRoaXMuX2FjdGl2ZSkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHBvcyA9IHBvaW50O1xuXG4gICAgICAgIGlmICh0aGlzLl9sYXN0UG9zLmVxdWFscyhwb3MpIHx8ICghdGhpcy5fYm94ICYmIHBvcy5kaXN0KHRoaXMuX3N0YXJ0UG9zKSA8IHRoaXMuX2NsaWNrVG9sZXJhbmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcDAgPSB0aGlzLl9zdGFydFBvcztcbiAgICAgICAgdGhpcy5fbGFzdFBvcyA9IHBvcztcblxuICAgICAgICBpZiAoIXRoaXMuX2JveCkge1xuICAgICAgICAgICAgdGhpcy5fYm94ID0gRE9NLmNyZWF0ZSgnZGl2JywgJ21hcGJveGdsLWJveHpvb20nLCB0aGlzLl9jb250YWluZXIpO1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWNyb3NzaGFpcicpO1xuICAgICAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdib3h6b29tc3RhcnQnLCBlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1pblggPSBNYXRoLm1pbihwMC54LCBwb3MueCksXG4gICAgICAgICAgICBtYXhYID0gTWF0aC5tYXgocDAueCwgcG9zLngpLFxuICAgICAgICAgICAgbWluWSA9IE1hdGgubWluKHAwLnksIHBvcy55KSxcbiAgICAgICAgICAgIG1heFkgPSBNYXRoLm1heChwMC55LCBwb3MueSk7XG5cbiAgICAgICAgRE9NLnNldFRyYW5zZm9ybSh0aGlzLl9ib3gsIGB0cmFuc2xhdGUoJHttaW5YfXB4LCR7bWluWX1weClgKTtcblxuICAgICAgICB0aGlzLl9ib3guc3R5bGUud2lkdGggPSBgJHttYXhYIC0gbWluWH1weGA7XG4gICAgICAgIHRoaXMuX2JveC5zdHlsZS5oZWlnaHQgPSBgJHttYXhZIC0gbWluWX1weGA7XG4gICAgfVxuXG4gICAgbW91c2V1cFdpbmRvdyhlOiBNb3VzZUV2ZW50LCBwb2ludDogUG9pbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9hY3RpdmUpIHJldHVybjtcblxuICAgICAgICBpZiAoZS5idXR0b24gIT09IDApIHJldHVybjtcblxuICAgICAgICBjb25zdCBwMCA9IHRoaXMuX3N0YXJ0UG9zLFxuICAgICAgICAgICAgcDEgPSBwb2ludDtcblxuICAgICAgICB0aGlzLnJlc2V0KCk7XG5cbiAgICAgICAgRE9NLnN1cHByZXNzQ2xpY2soKTtcblxuICAgICAgICBpZiAocDAueCA9PT0gcDEueCAmJiBwMC55ID09PSBwMS55KSB7XG4gICAgICAgICAgICB0aGlzLl9maXJlRXZlbnQoJ2JveHpvb21jYW5jZWwnLCBlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX21hcC5maXJlKG5ldyBFdmVudCgnYm94em9vbWVuZCcsIHtvcmlnaW5hbEV2ZW50OiBlfSkpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBjYW1lcmFBbmltYXRpb246IG1hcCA9PiBtYXAuZml0U2NyZWVuQ29vcmRpbmF0ZXMocDAsIHAxLCB0aGlzLl9tYXAuZ2V0QmVhcmluZygpLCB7bGluZWFyOiB0cnVlfSlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBrZXlkb3duKGU6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9hY3RpdmUpIHJldHVybjtcblxuICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAyNykge1xuICAgICAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdib3h6b29tY2FuY2VsJywgZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXNldCgpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWNyb3NzaGFpcicpO1xuXG4gICAgICAgIGlmICh0aGlzLl9ib3gpIHtcbiAgICAgICAgICAgIERPTS5yZW1vdmUodGhpcy5fYm94KTtcbiAgICAgICAgICAgIHRoaXMuX2JveCA9IChudWxsOiBhbnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgRE9NLmVuYWJsZURyYWcoKTtcblxuICAgICAgICBkZWxldGUgdGhpcy5fc3RhcnRQb3M7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9sYXN0UG9zO1xuICAgIH1cblxuICAgIF9maXJlRXZlbnQodHlwZTogc3RyaW5nLCBlOiAqKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXAuZmlyZShuZXcgRXZlbnQodHlwZSwge29yaWdpbmFsRXZlbnQ6IGV9KSk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBCb3hab29tSGFuZGxlcjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuZXhwb3J0IGZ1bmN0aW9uIGluZGV4VG91Y2hlcyh0b3VjaGVzOiBBcnJheTxUb3VjaD4sIHBvaW50czogQXJyYXk8UG9pbnQ+KSB7XG4gICAgYXNzZXJ0KHRvdWNoZXMubGVuZ3RoID09PSBwb2ludHMubGVuZ3RoKTtcbiAgICBjb25zdCBvYmogPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvdWNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgb2JqW3RvdWNoZXNbaV0uaWRlbnRpZmllcl0gPSBwb2ludHNbaV07XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQge2luZGV4VG91Y2hlc30gZnJvbSAnLi9oYW5kbGVyX3V0aWwnO1xuXG5mdW5jdGlvbiBnZXRDZW50cm9pZChwb2ludHM6IEFycmF5PFBvaW50Pikge1xuICAgIGNvbnN0IHN1bSA9IG5ldyBQb2ludCgwLCAwKTtcbiAgICBmb3IgKGNvbnN0IHBvaW50IG9mIHBvaW50cykge1xuICAgICAgICBzdW0uX2FkZChwb2ludCk7XG4gICAgfVxuICAgIHJldHVybiBzdW0uZGl2KHBvaW50cy5sZW5ndGgpO1xufVxuXG5leHBvcnQgY29uc3QgTUFYX1RBUF9JTlRFUlZBTCA9IDUwMDtcbmNvbnN0IE1BWF9UT1VDSF9USU1FID0gNTAwO1xuY29uc3QgTUFYX0RJU1QgPSAzMDtcblxuZXhwb3J0IGNsYXNzIFNpbmdsZVRhcFJlY29nbml6ZXIge1xuXG4gICAgbnVtVG91Y2hlczogbnVtYmVyO1xuICAgIGNlbnRyb2lkOiBQb2ludDtcbiAgICBzdGFydFRpbWU6IG51bWJlcjtcbiAgICBhYm9ydGVkOiBib29sZWFuO1xuICAgIHRvdWNoZXM6IHsgW251bWJlciB8IHN0cmluZ106IFBvaW50IH07XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiB7IG51bVRvdWNoZXM6IG51bWJlciB9KSB7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgdGhpcy5udW1Ub3VjaGVzID0gb3B0aW9ucy5udW1Ub3VjaGVzO1xuICAgIH1cblxuICAgIHJlc2V0KCkge1xuICAgICAgICBkZWxldGUgdGhpcy5jZW50cm9pZDtcbiAgICAgICAgZGVsZXRlIHRoaXMuc3RhcnRUaW1lO1xuICAgICAgICBkZWxldGUgdGhpcy50b3VjaGVzO1xuICAgICAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0b3VjaHN0YXJ0KGU6IFRvdWNoRXZlbnQsIHBvaW50czogQXJyYXk8UG9pbnQ+LCBtYXBUb3VjaGVzOiBBcnJheTxUb3VjaD4pIHtcblxuICAgICAgICBpZiAodGhpcy5jZW50cm9pZCB8fCBtYXBUb3VjaGVzLmxlbmd0aCA+IHRoaXMubnVtVG91Y2hlcykge1xuICAgICAgICAgICAgdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5hYm9ydGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zdGFydFRpbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5zdGFydFRpbWUgPSBlLnRpbWVTdGFtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtYXBUb3VjaGVzLmxlbmd0aCA9PT0gdGhpcy5udW1Ub3VjaGVzKSB7XG4gICAgICAgICAgICB0aGlzLmNlbnRyb2lkID0gZ2V0Q2VudHJvaWQocG9pbnRzKTtcbiAgICAgICAgICAgIHRoaXMudG91Y2hlcyA9IGluZGV4VG91Y2hlcyhtYXBUb3VjaGVzLCBwb2ludHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdG91Y2htb3ZlKGU6IFRvdWNoRXZlbnQsIHBvaW50czogQXJyYXk8UG9pbnQ+LCBtYXBUb3VjaGVzOiBBcnJheTxUb3VjaD4pIHtcbiAgICAgICAgaWYgKHRoaXMuYWJvcnRlZCB8fCAhdGhpcy5jZW50cm9pZCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IG5ld1RvdWNoZXMgPSBpbmRleFRvdWNoZXMobWFwVG91Y2hlcywgcG9pbnRzKTtcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiB0aGlzLnRvdWNoZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZQb3MgPSB0aGlzLnRvdWNoZXNbaWRdO1xuICAgICAgICAgICAgY29uc3QgcG9zID0gbmV3VG91Y2hlc1tpZF07XG4gICAgICAgICAgICBpZiAoIXBvcyB8fCBwb3MuZGlzdChwcmV2UG9zKSA+IE1BWF9ESVNUKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRvdWNoZW5kKGU6IFRvdWNoRXZlbnQsIHBvaW50czogQXJyYXk8UG9pbnQ+LCBtYXBUb3VjaGVzOiBBcnJheTxUb3VjaD4pIHtcbiAgICAgICAgaWYgKCF0aGlzLmNlbnRyb2lkIHx8IGUudGltZVN0YW1wIC0gdGhpcy5zdGFydFRpbWUgPiBNQVhfVE9VQ0hfVElNRSkge1xuICAgICAgICAgICAgdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtYXBUb3VjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgY29uc3QgY2VudHJvaWQgPSAhdGhpcy5hYm9ydGVkICYmIHRoaXMuY2VudHJvaWQ7XG4gICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgICAgICBpZiAoY2VudHJvaWQpIHJldHVybiBjZW50cm9pZDtcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG5leHBvcnQgY2xhc3MgVGFwUmVjb2duaXplciB7XG5cbiAgICBzaW5nbGVUYXA6IFNpbmdsZVRhcFJlY29nbml6ZXI7XG4gICAgbnVtVGFwczogbnVtYmVyO1xuICAgIGxhc3RUaW1lOiBudW1iZXI7XG4gICAgbGFzdFRhcDogUG9pbnQ7XG4gICAgY291bnQ6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IHsgbnVtVGFwczogbnVtYmVyLCBudW1Ub3VjaGVzOiBudW1iZXIgfSkge1xuICAgICAgICB0aGlzLnNpbmdsZVRhcCA9IG5ldyBTaW5nbGVUYXBSZWNvZ25pemVyKG9wdGlvbnMpO1xuICAgICAgICB0aGlzLm51bVRhcHMgPSBvcHRpb25zLm51bVRhcHM7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9XG5cbiAgICByZXNldCgpIHtcbiAgICAgICAgdGhpcy5sYXN0VGltZSA9IEluZmluaXR5O1xuICAgICAgICBkZWxldGUgdGhpcy5sYXN0VGFwO1xuICAgICAgICB0aGlzLmNvdW50ID0gMDtcbiAgICAgICAgdGhpcy5zaW5nbGVUYXAucmVzZXQoKTtcbiAgICB9XG5cbiAgICB0b3VjaHN0YXJ0KGU6IFRvdWNoRXZlbnQsIHBvaW50czogQXJyYXk8UG9pbnQ+LCBtYXBUb3VjaGVzOiBBcnJheTxUb3VjaD4pIHtcbiAgICAgICAgdGhpcy5zaW5nbGVUYXAudG91Y2hzdGFydChlLCBwb2ludHMsIG1hcFRvdWNoZXMpO1xuICAgIH1cblxuICAgIHRvdWNobW92ZShlOiBUb3VjaEV2ZW50LCBwb2ludHM6IEFycmF5PFBvaW50PiwgbWFwVG91Y2hlczogQXJyYXk8VG91Y2g+KSB7XG4gICAgICAgIHRoaXMuc2luZ2xlVGFwLnRvdWNobW92ZShlLCBwb2ludHMsIG1hcFRvdWNoZXMpO1xuICAgIH1cblxuICAgIHRvdWNoZW5kKGU6IFRvdWNoRXZlbnQsIHBvaW50czogQXJyYXk8UG9pbnQ+LCBtYXBUb3VjaGVzOiBBcnJheTxUb3VjaD4pIHtcbiAgICAgICAgY29uc3QgdGFwID0gdGhpcy5zaW5nbGVUYXAudG91Y2hlbmQoZSwgcG9pbnRzLCBtYXBUb3VjaGVzKTtcbiAgICAgICAgaWYgKHRhcCkge1xuICAgICAgICAgICAgY29uc3Qgc29vbkVub3VnaCA9IGUudGltZVN0YW1wIC0gdGhpcy5sYXN0VGltZSA8IE1BWF9UQVBfSU5URVJWQUw7XG4gICAgICAgICAgICBjb25zdCBjbG9zZUVub3VnaCA9ICF0aGlzLmxhc3RUYXAgfHwgdGhpcy5sYXN0VGFwLmRpc3QodGFwKSA8IE1BWF9ESVNUO1xuXG4gICAgICAgICAgICBpZiAoIXNvb25Fbm91Z2ggfHwgIWNsb3NlRW5vdWdoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNvdW50Kys7XG4gICAgICAgICAgICB0aGlzLmxhc3RUaW1lID0gZS50aW1lU3RhbXA7XG4gICAgICAgICAgICB0aGlzLmxhc3RUYXAgPSB0YXA7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmNvdW50ID09PSB0aGlzLm51bVRhcHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7VGFwUmVjb2duaXplcn0gZnJvbSAnLi90YXBfcmVjb2duaXplcic7XG5pbXBvcnQgdHlwZSBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi9tYXAnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUYXBab29tSGFuZGxlciB7XG5cbiAgICBfZW5hYmxlZDogYm9vbGVhbjtcbiAgICBfYWN0aXZlOiBib29sZWFuO1xuICAgIF96b29tSW46IFRhcFJlY29nbml6ZXI7XG4gICAgX3pvb21PdXQ6IFRhcFJlY29nbml6ZXI7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5fem9vbUluID0gbmV3IFRhcFJlY29nbml6ZXIoe1xuICAgICAgICAgICAgbnVtVG91Y2hlczogMSxcbiAgICAgICAgICAgIG51bVRhcHM6IDJcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fem9vbU91dCA9IG5ldyBUYXBSZWNvZ25pemVyKHtcbiAgICAgICAgICAgIG51bVRvdWNoZXM6IDIsXG4gICAgICAgICAgICBudW1UYXBzOiAxXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9XG5cbiAgICByZXNldCgpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3pvb21Jbi5yZXNldCgpO1xuICAgICAgICB0aGlzLl96b29tT3V0LnJlc2V0KCk7XG4gICAgfVxuXG4gICAgdG91Y2hzdGFydChlOiBUb3VjaEV2ZW50LCBwb2ludHM6IEFycmF5PFBvaW50PiwgbWFwVG91Y2hlczogQXJyYXk8VG91Y2g+KSB7XG4gICAgICAgIHRoaXMuX3pvb21Jbi50b3VjaHN0YXJ0KGUsIHBvaW50cywgbWFwVG91Y2hlcyk7XG4gICAgICAgIHRoaXMuX3pvb21PdXQudG91Y2hzdGFydChlLCBwb2ludHMsIG1hcFRvdWNoZXMpO1xuICAgIH1cblxuICAgIHRvdWNobW92ZShlOiBUb3VjaEV2ZW50LCBwb2ludHM6IEFycmF5PFBvaW50PiwgbWFwVG91Y2hlczogQXJyYXk8VG91Y2g+KSB7XG4gICAgICAgIHRoaXMuX3pvb21Jbi50b3VjaG1vdmUoZSwgcG9pbnRzLCBtYXBUb3VjaGVzKTtcbiAgICAgICAgdGhpcy5fem9vbU91dC50b3VjaG1vdmUoZSwgcG9pbnRzLCBtYXBUb3VjaGVzKTtcbiAgICB9XG5cbiAgICB0b3VjaGVuZChlOiBUb3VjaEV2ZW50LCBwb2ludHM6IEFycmF5PFBvaW50PiwgbWFwVG91Y2hlczogQXJyYXk8VG91Y2g+KSB7XG4gICAgICAgIGNvbnN0IHpvb21JblBvaW50ID0gdGhpcy5fem9vbUluLnRvdWNoZW5kKGUsIHBvaW50cywgbWFwVG91Y2hlcyk7XG4gICAgICAgIGNvbnN0IHpvb21PdXRQb2ludCA9IHRoaXMuX3pvb21PdXQudG91Y2hlbmQoZSwgcG9pbnRzLCBtYXBUb3VjaGVzKTtcblxuICAgICAgICBpZiAoem9vbUluUG9pbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVzZXQoKSwgMCk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGNhbWVyYUFuaW1hdGlvbjogKG1hcDogTWFwKSA9PiBtYXAuZWFzZVRvKHtcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDMwMCxcbiAgICAgICAgICAgICAgICAgICAgem9vbTogbWFwLmdldFpvb20oKSArIDEsXG4gICAgICAgICAgICAgICAgICAgIGFyb3VuZDogbWFwLnVucHJvamVjdCh6b29tSW5Qb2ludClcbiAgICAgICAgICAgICAgICB9LCB7b3JpZ2luYWxFdmVudDogZX0pXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKHpvb21PdXRQb2ludCkge1xuICAgICAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZXNldCgpLCAwKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY2FtZXJhQW5pbWF0aW9uOiAobWFwOiBNYXApID0+IG1hcC5lYXNlVG8oe1xuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwLFxuICAgICAgICAgICAgICAgICAgICB6b29tOiBtYXAuZ2V0Wm9vbSgpIC0gMSxcbiAgICAgICAgICAgICAgICAgICAgYXJvdW5kOiBtYXAudW5wcm9qZWN0KHpvb21PdXRQb2ludClcbiAgICAgICAgICAgICAgICB9LCB7b3JpZ2luYWxFdmVudDogZX0pXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdG91Y2hjYW5jZWwoKSB7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9XG5cbiAgICBlbmFibGUoKSB7XG4gICAgICAgIHRoaXMuX2VuYWJsZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGRpc2FibGUoKSB7XG4gICAgICAgIHRoaXMuX2VuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH1cblxuICAgIGlzRW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VuYWJsZWQ7XG4gICAgfVxuXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmU7XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IERPTSBmcm9tICcuLi8uLi91dGlsL2RvbSc7XG5pbXBvcnQgdHlwZSBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcblxuY29uc3QgTEVGVF9CVVRUT04gPSAwO1xuY29uc3QgUklHSFRfQlVUVE9OID0gMjtcblxuY2xhc3MgTW91c2VIYW5kbGVyIHtcblxuICAgIF9lbmFibGVkOiBib29sZWFuO1xuICAgIF9hY3RpdmU6IGJvb2xlYW47XG4gICAgX2xhc3RQb2ludDogUG9pbnQ7XG4gICAgX2V2ZW50QnV0dG9uOiBudW1iZXI7XG4gICAgX21vdmVkOiBib29sZWFuO1xuICAgIF9jbGlja1RvbGVyYW5jZTogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogeyBjbGlja1RvbGVyYW5jZTogbnVtYmVyIH0pIHtcbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICB0aGlzLl9jbGlja1RvbGVyYW5jZSA9IG9wdGlvbnMuY2xpY2tUb2xlcmFuY2UgfHwgMTtcbiAgICB9XG5cbiAgICByZXNldCgpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX21vdmVkID0gZmFsc2U7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9sYXN0UG9pbnQ7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9ldmVudEJ1dHRvbjtcbiAgICB9XG5cbiAgICBfY29ycmVjdEJ1dHRvbihlOiBNb3VzZUV2ZW50LCBidXR0b246IG51bWJlcikgeyAgLy9lc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAgIHJldHVybiBmYWxzZTsgLy8gaW1wbGVtZW50ZWQgYnkgY2hpbGRcbiAgICB9XG5cbiAgICBfbW92ZShsYXN0UG9pbnQ6IFBvaW50LCBwb2ludDogUG9pbnQpIHsgIC8vZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgICByZXR1cm4ge307IC8vIGltcGxlbWVudGVkIGJ5IGNoaWxkXG4gICAgfVxuXG4gICAgbW91c2Vkb3duKGU6IE1vdXNlRXZlbnQsIHBvaW50OiBQb2ludCkge1xuICAgICAgICBpZiAodGhpcy5fbGFzdFBvaW50KSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgZXZlbnRCdXR0b24gPSBET00ubW91c2VCdXR0b24oZSk7XG4gICAgICAgIGlmICghdGhpcy5fY29ycmVjdEJ1dHRvbihlLCBldmVudEJ1dHRvbikpIHJldHVybjtcblxuICAgICAgICB0aGlzLl9sYXN0UG9pbnQgPSBwb2ludDtcbiAgICAgICAgdGhpcy5fZXZlbnRCdXR0b24gPSBldmVudEJ1dHRvbjtcbiAgICB9XG5cbiAgICBtb3VzZW1vdmVXaW5kb3coZTogTW91c2VFdmVudCwgcG9pbnQ6IFBvaW50KSB7XG4gICAgICAgIGNvbnN0IGxhc3RQb2ludCA9IHRoaXMuX2xhc3RQb2ludDtcbiAgICAgICAgaWYgKCFsYXN0UG9pbnQpIHJldHVybjtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGlmICghdGhpcy5fbW92ZWQgJiYgcG9pbnQuZGlzdChsYXN0UG9pbnQpIDwgdGhpcy5fY2xpY2tUb2xlcmFuY2UpIHJldHVybjtcbiAgICAgICAgdGhpcy5fbW92ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9sYXN0UG9pbnQgPSBwb2ludDtcblxuICAgICAgICAvLyBpbXBsZW1lbnRlZCBieSBjaGlsZCBjbGFzc1xuICAgICAgICByZXR1cm4gdGhpcy5fbW92ZShsYXN0UG9pbnQsIHBvaW50KTtcbiAgICB9XG5cbiAgICBtb3VzZXVwV2luZG93KGU6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgY29uc3QgZXZlbnRCdXR0b24gPSBET00ubW91c2VCdXR0b24oZSk7XG4gICAgICAgIGlmIChldmVudEJ1dHRvbiAhPT0gdGhpcy5fZXZlbnRCdXR0b24pIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMuX21vdmVkKSBET00uc3VwcHJlc3NDbGljaygpO1xuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgZW5hYmxlKCkge1xuICAgICAgICB0aGlzLl9lbmFibGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBkaXNhYmxlKCkge1xuICAgICAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9XG5cbiAgICBpc0VuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmFibGVkO1xuICAgIH1cblxuICAgIGlzQWN0aXZlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1vdXNlUGFuSGFuZGxlciBleHRlbmRzIE1vdXNlSGFuZGxlciB7XG5cbiAgICBtb3VzZWRvd24oZTogTW91c2VFdmVudCwgcG9pbnQ6IFBvaW50KSB7XG4gICAgICAgIHN1cGVyLm1vdXNlZG93bihlLCBwb2ludCk7XG4gICAgICAgIGlmICh0aGlzLl9sYXN0UG9pbnQpIHRoaXMuX2FjdGl2ZSA9IHRydWU7XG4gICAgfVxuICAgIF9jb3JyZWN0QnV0dG9uKGU6IE1vdXNlRXZlbnQsIGJ1dHRvbjogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBidXR0b24gPT09IExFRlRfQlVUVE9OICYmICFlLmN0cmxLZXk7XG4gICAgfVxuXG4gICAgX21vdmUobGFzdFBvaW50OiBQb2ludCwgcG9pbnQ6IFBvaW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhcm91bmQ6IHBvaW50LFxuICAgICAgICAgICAgcGFuRGVsdGE6IHBvaW50LnN1YihsYXN0UG9pbnQpXG4gICAgICAgIH07XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTW91c2VSb3RhdGVIYW5kbGVyIGV4dGVuZHMgTW91c2VIYW5kbGVyIHtcbiAgICBfY29ycmVjdEJ1dHRvbihlOiBNb3VzZUV2ZW50LCBidXR0b246IG51bWJlcikge1xuICAgICAgICByZXR1cm4gKGJ1dHRvbiA9PT0gTEVGVF9CVVRUT04gJiYgZS5jdHJsS2V5KSB8fCAoYnV0dG9uID09PSBSSUdIVF9CVVRUT04pO1xuICAgIH1cblxuICAgIF9tb3ZlKGxhc3RQb2ludDogUG9pbnQsIHBvaW50OiBQb2ludCkge1xuICAgICAgICBjb25zdCBkZWdyZWVzUGVyUGl4ZWxNb3ZlZCA9IDAuODtcbiAgICAgICAgY29uc3QgYmVhcmluZ0RlbHRhID0gKHBvaW50LnggLSBsYXN0UG9pbnQueCkgKiBkZWdyZWVzUGVyUGl4ZWxNb3ZlZDtcbiAgICAgICAgaWYgKGJlYXJpbmdEZWx0YSkge1xuICAgICAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiB7YmVhcmluZ0RlbHRhfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnRleHRtZW51KGU6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgLy8gcHJldmVudCBicm93c2VyIGNvbnRleHQgbWVudSB3aGVuIG5lY2Vzc2FyeTsgd2UgZG9uJ3QgYWxsb3cgaXQgd2l0aCByb3RhdGlvblxuICAgICAgICAvLyBiZWNhdXNlIHdlIGNhbid0IGRpc2Nlcm4gcm90YXRpb24gZ2VzdHVyZSBzdGFydCBmcm9tIGNvbnRleHRtZW51IG9uIE1hY1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTW91c2VQaXRjaEhhbmRsZXIgZXh0ZW5kcyBNb3VzZUhhbmRsZXIge1xuICAgIF9jb3JyZWN0QnV0dG9uKGU6IE1vdXNlRXZlbnQsIGJ1dHRvbjogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiAoYnV0dG9uID09PSBMRUZUX0JVVFRPTiAmJiBlLmN0cmxLZXkpIHx8IChidXR0b24gPT09IFJJR0hUX0JVVFRPTik7XG4gICAgfVxuXG4gICAgX21vdmUobGFzdFBvaW50OiBQb2ludCwgcG9pbnQ6IFBvaW50KSB7XG4gICAgICAgIGNvbnN0IGRlZ3JlZXNQZXJQaXhlbE1vdmVkID0gLTAuNTtcbiAgICAgICAgY29uc3QgcGl0Y2hEZWx0YSA9IChwb2ludC55IC0gbGFzdFBvaW50LnkpICogZGVncmVlc1BlclBpeGVsTW92ZWQ7XG4gICAgICAgIGlmIChwaXRjaERlbHRhKSB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHtwaXRjaERlbHRhfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnRleHRtZW51KGU6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgLy8gcHJldmVudCBicm93c2VyIGNvbnRleHQgbWVudSB3aGVuIG5lY2Vzc2FyeTsgd2UgZG9uJ3QgYWxsb3cgaXQgd2l0aCByb3RhdGlvblxuICAgICAgICAvLyBiZWNhdXNlIHdlIGNhbid0IGRpc2Nlcm4gcm90YXRpb24gZ2VzdHVyZSBzdGFydCBmcm9tIGNvbnRleHRtZW51IG9uIE1hY1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IHtpbmRleFRvdWNoZXN9IGZyb20gJy4vaGFuZGxlcl91dGlsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG91Y2hQYW5IYW5kbGVyIHtcblxuICAgIF9lbmFibGVkOiBib29sZWFuO1xuICAgIF9hY3RpdmU6IGJvb2xlYW47XG4gICAgX3RvdWNoZXM6IHsgW3N0cmluZyB8IG51bWJlcl06IFBvaW50IH07XG4gICAgX21pblRvdWNoZXM6IG51bWJlcjtcbiAgICBfY2xpY2tUb2xlcmFuY2U6IG51bWJlcjtcbiAgICBfc3VtOiBQb2ludDtcblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IHsgY2xpY2tUb2xlcmFuY2U6IG51bWJlciB9KSB7XG4gICAgICAgIHRoaXMuX21pblRvdWNoZXMgPSAxO1xuICAgICAgICB0aGlzLl9jbGlja1RvbGVyYW5jZSA9IG9wdGlvbnMuY2xpY2tUb2xlcmFuY2UgfHwgMTtcbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH1cblxuICAgIHJlc2V0KCkge1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fdG91Y2hlcyA9IHt9O1xuICAgICAgICB0aGlzLl9zdW0gPSBuZXcgUG9pbnQoMCwgMCk7XG4gICAgfVxuXG4gICAgdG91Y2hzdGFydChlOiBUb3VjaEV2ZW50LCBwb2ludHM6IEFycmF5PFBvaW50PiwgbWFwVG91Y2hlczogQXJyYXk8VG91Y2g+KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWxjdWxhdGVUcmFuc2Zvcm0oZSwgcG9pbnRzLCBtYXBUb3VjaGVzKTtcbiAgICB9XG5cbiAgICB0b3VjaG1vdmUoZTogVG91Y2hFdmVudCwgcG9pbnRzOiBBcnJheTxQb2ludD4sIG1hcFRvdWNoZXM6IEFycmF5PFRvdWNoPikge1xuICAgICAgICBpZiAoIXRoaXMuX2FjdGl2ZSkgcmV0dXJuO1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWxjdWxhdGVUcmFuc2Zvcm0oZSwgcG9pbnRzLCBtYXBUb3VjaGVzKTtcbiAgICB9XG5cbiAgICB0b3VjaGVuZChlOiBUb3VjaEV2ZW50LCBwb2ludHM6IEFycmF5PFBvaW50PiwgbWFwVG91Y2hlczogQXJyYXk8VG91Y2g+KSB7XG4gICAgICAgIHRoaXMuX2NhbGN1bGF0ZVRyYW5zZm9ybShlLCBwb2ludHMsIG1hcFRvdWNoZXMpO1xuXG4gICAgICAgIGlmICh0aGlzLl9hY3RpdmUgJiYgbWFwVG91Y2hlcy5sZW5ndGggPCB0aGlzLl9taW5Ub3VjaGVzKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0b3VjaGNhbmNlbCgpIHtcbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH1cblxuICAgIF9jYWxjdWxhdGVUcmFuc2Zvcm0oZTogVG91Y2hFdmVudCwgcG9pbnRzOiBBcnJheTxQb2ludD4sIG1hcFRvdWNoZXM6IEFycmF5PFRvdWNoPikge1xuICAgICAgICBpZiAobWFwVG91Y2hlcy5sZW5ndGggPiAwKSB0aGlzLl9hY3RpdmUgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IHRvdWNoZXMgPSBpbmRleFRvdWNoZXMobWFwVG91Y2hlcywgcG9pbnRzKTtcblxuICAgICAgICBjb25zdCB0b3VjaFBvaW50U3VtID0gbmV3IFBvaW50KDAsIDApO1xuICAgICAgICBjb25zdCB0b3VjaERlbHRhU3VtID0gbmV3IFBvaW50KDAsIDApO1xuICAgICAgICBsZXQgdG91Y2hEZWx0YUNvdW50ID0gMDtcblxuICAgICAgICBmb3IgKGNvbnN0IGlkZW50aWZpZXIgaW4gdG91Y2hlcykge1xuICAgICAgICAgICAgY29uc3QgcG9pbnQgPSB0b3VjaGVzW2lkZW50aWZpZXJdO1xuICAgICAgICAgICAgY29uc3QgcHJldlBvaW50ID0gdGhpcy5fdG91Y2hlc1tpZGVudGlmaWVyXTtcbiAgICAgICAgICAgIGlmIChwcmV2UG9pbnQpIHtcbiAgICAgICAgICAgICAgICB0b3VjaFBvaW50U3VtLl9hZGQocG9pbnQpO1xuICAgICAgICAgICAgICAgIHRvdWNoRGVsdGFTdW0uX2FkZChwb2ludC5zdWIocHJldlBvaW50KSk7XG4gICAgICAgICAgICAgICAgdG91Y2hEZWx0YUNvdW50Kys7XG4gICAgICAgICAgICAgICAgdG91Y2hlc1tpZGVudGlmaWVyXSA9IHBvaW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdG91Y2hlcyA9IHRvdWNoZXM7XG5cbiAgICAgICAgaWYgKHRvdWNoRGVsdGFDb3VudCA8IHRoaXMuX21pblRvdWNoZXMgfHwgIXRvdWNoRGVsdGFTdW0ubWFnKCkpIHJldHVybjtcblxuICAgICAgICBjb25zdCBwYW5EZWx0YSA9IHRvdWNoRGVsdGFTdW0uZGl2KHRvdWNoRGVsdGFDb3VudCk7XG4gICAgICAgIHRoaXMuX3N1bS5fYWRkKHBhbkRlbHRhKTtcbiAgICAgICAgaWYgKHRoaXMuX3N1bS5tYWcoKSA8IHRoaXMuX2NsaWNrVG9sZXJhbmNlKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgYXJvdW5kID0gdG91Y2hQb2ludFN1bS5kaXYodG91Y2hEZWx0YUNvdW50KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXJvdW5kLFxuICAgICAgICAgICAgcGFuRGVsdGFcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBlbmFibGUoKSB7XG4gICAgICAgIHRoaXMuX2VuYWJsZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGRpc2FibGUoKSB7XG4gICAgICAgIHRoaXMuX2VuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH1cblxuICAgIGlzRW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VuYWJsZWQ7XG4gICAgfVxuXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmU7XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IERPTSBmcm9tICcuLi8uLi91dGlsL2RvbSc7XG5cbmNsYXNzIFR3b1RvdWNoSGFuZGxlciB7XG5cbiAgICBfZW5hYmxlZDogYm9vbGVhbjtcbiAgICBfYWN0aXZlOiBib29sZWFuO1xuICAgIF9maXJzdFR3b1RvdWNoZXM6IFtudW1iZXIsIG51bWJlcl07XG4gICAgX3ZlY3RvcjogUG9pbnQ7XG4gICAgX3N0YXJ0VmVjdG9yOiBQb2ludDtcbiAgICBfYXJvdW5kQ2VudGVyOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9XG5cbiAgICByZXNldCgpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9maXJzdFR3b1RvdWNoZXM7XG4gICAgfVxuXG4gICAgX3N0YXJ0KHBvaW50czogW1BvaW50LCBQb2ludF0pIHt9IC8vZXNsaW50LWRpc2FibGUtbGluZVxuICAgIF9tb3ZlKHBvaW50czogW1BvaW50LCBQb2ludF0sIHBpbmNoQXJvdW5kOiBQb2ludCwgZTogVG91Y2hFdmVudCkgeyByZXR1cm4ge307IH0gLy9lc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICB0b3VjaHN0YXJ0KGU6IFRvdWNoRXZlbnQsIHBvaW50czogQXJyYXk8UG9pbnQ+LCBtYXBUb3VjaGVzOiBBcnJheTxUb3VjaD4pIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhlLnRhcmdldCwgZS50YXJnZXRUb3VjaGVzLmxlbmd0aCA/IGUudGFyZ2V0VG91Y2hlc1swXS50YXJnZXQgOiBudWxsKTtcbiAgICAgICAgLy9sb2coJ3RvdWNoc3RhcnQnLCBwb2ludHMsIGUudGFyZ2V0LmlubmVySFRNTCwgZS50YXJnZXRUb3VjaGVzLmxlbmd0aCA/IGUudGFyZ2V0VG91Y2hlc1swXS50YXJnZXQuaW5uZXJIVE1MOiB1bmRlZmluZWQpO1xuICAgICAgICBpZiAodGhpcy5fZmlyc3RUd29Ub3VjaGVzIHx8IG1hcFRvdWNoZXMubGVuZ3RoIDwgMikgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuX2ZpcnN0VHdvVG91Y2hlcyA9IFtcbiAgICAgICAgICAgIG1hcFRvdWNoZXNbMF0uaWRlbnRpZmllcixcbiAgICAgICAgICAgIG1hcFRvdWNoZXNbMV0uaWRlbnRpZmllclxuICAgICAgICBdO1xuXG4gICAgICAgIC8vIGltcGxlbWVudGVkIGJ5IGNoaWxkIGNsYXNzZXNcbiAgICAgICAgdGhpcy5fc3RhcnQoW3BvaW50c1swXSwgcG9pbnRzWzFdXSk7XG4gICAgfVxuXG4gICAgdG91Y2htb3ZlKGU6IFRvdWNoRXZlbnQsIHBvaW50czogQXJyYXk8UG9pbnQ+LCBtYXBUb3VjaGVzOiBBcnJheTxUb3VjaD4pIHtcbiAgICAgICAgaWYgKCF0aGlzLl9maXJzdFR3b1RvdWNoZXMpIHJldHVybjtcblxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgY29uc3QgW2lkQSwgaWRCXSA9IHRoaXMuX2ZpcnN0VHdvVG91Y2hlcztcbiAgICAgICAgY29uc3QgYSA9IGdldFRvdWNoQnlJZChtYXBUb3VjaGVzLCBwb2ludHMsIGlkQSk7XG4gICAgICAgIGNvbnN0IGIgPSBnZXRUb3VjaEJ5SWQobWFwVG91Y2hlcywgcG9pbnRzLCBpZEIpO1xuICAgICAgICBpZiAoIWEgfHwgIWIpIHJldHVybjtcbiAgICAgICAgY29uc3QgcGluY2hBcm91bmQgPSB0aGlzLl9hcm91bmRDZW50ZXIgPyBudWxsIDogYS5hZGQoYikuZGl2KDIpO1xuXG4gICAgICAgIC8vIGltcGxlbWVudGVkIGJ5IGNoaWxkIGNsYXNzZXNcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vdmUoW2EsIGJdLCBwaW5jaEFyb3VuZCwgZSk7XG5cbiAgICB9XG5cbiAgICB0b3VjaGVuZChlOiBUb3VjaEV2ZW50LCBwb2ludHM6IEFycmF5PFBvaW50PiwgbWFwVG91Y2hlczogQXJyYXk8VG91Y2g+KSB7XG4gICAgICAgIGlmICghdGhpcy5fZmlyc3RUd29Ub3VjaGVzKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgW2lkQSwgaWRCXSA9IHRoaXMuX2ZpcnN0VHdvVG91Y2hlcztcbiAgICAgICAgY29uc3QgYSA9IGdldFRvdWNoQnlJZChtYXBUb3VjaGVzLCBwb2ludHMsIGlkQSk7XG4gICAgICAgIGNvbnN0IGIgPSBnZXRUb3VjaEJ5SWQobWFwVG91Y2hlcywgcG9pbnRzLCBpZEIpO1xuICAgICAgICBpZiAoYSAmJiBiKSByZXR1cm47XG5cbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZSkgRE9NLnN1cHByZXNzQ2xpY2soKTtcblxuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgdG91Y2hjYW5jZWwoKSB7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9XG5cbiAgICBlbmFibGUob3B0aW9uczogP3thcm91bmQ/OiAnY2VudGVyJ30pIHtcbiAgICAgICAgdGhpcy5fZW5hYmxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX2Fyb3VuZENlbnRlciA9ICEhb3B0aW9ucyAmJiBvcHRpb25zLmFyb3VuZCA9PT0gJ2NlbnRlcic7XG4gICAgfVxuXG4gICAgZGlzYWJsZSgpIHtcbiAgICAgICAgdGhpcy5fZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgaXNFbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5hYmxlZDtcbiAgICB9XG5cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGdldFRvdWNoQnlJZChtYXBUb3VjaGVzOiBBcnJheTxUb3VjaD4sIHBvaW50czogQXJyYXk8UG9pbnQ+LCBpZGVudGlmaWVyOiBudW1iZXIpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hcFRvdWNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKG1hcFRvdWNoZXNbaV0uaWRlbnRpZmllciA9PT0gaWRlbnRpZmllcikgcmV0dXJuIHBvaW50c1tpXTtcbiAgICB9XG59XG5cbi8qIFpPT00gKi9cblxuY29uc3QgWk9PTV9USFJFU0hPTEQgPSAwLjE7XG5cbmZ1bmN0aW9uIGdldFpvb21EZWx0YShkaXN0YW5jZSwgbGFzdERpc3RhbmNlKSB7XG4gICAgcmV0dXJuIE1hdGgubG9nKGRpc3RhbmNlIC8gbGFzdERpc3RhbmNlKSAvIE1hdGguTE4yO1xufVxuXG5leHBvcnQgY2xhc3MgVG91Y2hab29tSGFuZGxlciBleHRlbmRzIFR3b1RvdWNoSGFuZGxlciB7XG5cbiAgICBfZGlzdGFuY2U6IG51bWJlcjtcbiAgICBfc3RhcnREaXN0YW5jZTogbnVtYmVyO1xuXG4gICAgcmVzZXQoKSB7XG4gICAgICAgIHN1cGVyLnJlc2V0KCk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9kaXN0YW5jZTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3N0YXJ0RGlzdGFuY2U7XG4gICAgfVxuXG4gICAgX3N0YXJ0KHBvaW50czogW1BvaW50LCBQb2ludF0pIHtcbiAgICAgICAgdGhpcy5fc3RhcnREaXN0YW5jZSA9IHRoaXMuX2Rpc3RhbmNlID0gcG9pbnRzWzBdLmRpc3QocG9pbnRzWzFdKTtcbiAgICB9XG5cbiAgICBfbW92ZShwb2ludHM6IFtQb2ludCwgUG9pbnRdLCBwaW5jaEFyb3VuZDogUG9pbnQpIHtcbiAgICAgICAgY29uc3QgbGFzdERpc3RhbmNlID0gdGhpcy5fZGlzdGFuY2U7XG4gICAgICAgIHRoaXMuX2Rpc3RhbmNlID0gcG9pbnRzWzBdLmRpc3QocG9pbnRzWzFdKTtcbiAgICAgICAgaWYgKCF0aGlzLl9hY3RpdmUgJiYgTWF0aC5hYnMoZ2V0Wm9vbURlbHRhKHRoaXMuX2Rpc3RhbmNlLCB0aGlzLl9zdGFydERpc3RhbmNlKSkgPCBaT09NX1RIUkVTSE9MRCkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSB0cnVlO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgem9vbURlbHRhOiBnZXRab29tRGVsdGEodGhpcy5fZGlzdGFuY2UsIGxhc3REaXN0YW5jZSksXG4gICAgICAgICAgICBwaW5jaEFyb3VuZFxuICAgICAgICB9O1xuICAgIH1cbn1cblxuLyogUk9UQVRFICovXG5cbmNvbnN0IFJPVEFUSU9OX1RIUkVTSE9MRCA9IDI1OyAvLyBwaXhlbHMgYWxvbmcgY2lyY3VtZmVyZW5jZSBvZiB0b3VjaCBjaXJjbGVcblxuZnVuY3Rpb24gZ2V0QmVhcmluZ0RlbHRhKGEsIGIpIHtcbiAgICByZXR1cm4gYS5hbmdsZVdpdGgoYikgKiAxODAgLyBNYXRoLlBJO1xufVxuXG5leHBvcnQgY2xhc3MgVG91Y2hSb3RhdGVIYW5kbGVyIGV4dGVuZHMgVHdvVG91Y2hIYW5kbGVyIHtcbiAgICBfbWluRGlhbWV0ZXI6IG51bWJlcjtcblxuICAgIHJlc2V0KCkge1xuICAgICAgICBzdXBlci5yZXNldCgpO1xuICAgICAgICBkZWxldGUgdGhpcy5fbWluRGlhbWV0ZXI7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9zdGFydFZlY3RvcjtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3ZlY3RvcjtcbiAgICB9XG5cbiAgICBfc3RhcnQocG9pbnRzOiBbUG9pbnQsIFBvaW50XSkge1xuICAgICAgICB0aGlzLl9zdGFydFZlY3RvciA9IHRoaXMuX3ZlY3RvciA9IHBvaW50c1swXS5zdWIocG9pbnRzWzFdKTtcbiAgICAgICAgdGhpcy5fbWluRGlhbWV0ZXIgPSBwb2ludHNbMF0uZGlzdChwb2ludHNbMV0pO1xuICAgIH1cblxuICAgIF9tb3ZlKHBvaW50czogW1BvaW50LCBQb2ludF0sIHBpbmNoQXJvdW5kOiBQb2ludCkge1xuICAgICAgICBjb25zdCBsYXN0VmVjdG9yID0gdGhpcy5fdmVjdG9yO1xuICAgICAgICB0aGlzLl92ZWN0b3IgPSBwb2ludHNbMF0uc3ViKHBvaW50c1sxXSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLl9hY3RpdmUgJiYgdGhpcy5faXNCZWxvd1RocmVzaG9sZCh0aGlzLl92ZWN0b3IpKSByZXR1cm47XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJlYXJpbmdEZWx0YTogZ2V0QmVhcmluZ0RlbHRhKHRoaXMuX3ZlY3RvciwgbGFzdFZlY3RvciksXG4gICAgICAgICAgICBwaW5jaEFyb3VuZFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIF9pc0JlbG93VGhyZXNob2xkKHZlY3RvcjogUG9pbnQpIHtcbiAgICAgICAgLypcbiAgICAgICAgICogVGhlIHRocmVzaG9sZCBiZWZvcmUgYSByb3RhdGlvbiBhY3R1YWxseSBoYXBwZW5zIGlzIGNvbmZpZ3VyZWQgaW5cbiAgICAgICAgICogcGl4ZWxzIGFsb25ndGggY2lyY3VtZmVyZW5jZSBvZiB0aGUgY2lyY2xlIGZvcm1lZCBieSB0aGUgdHdvIGZpbmdlcnMuXG4gICAgICAgICAqIFRoaXMgbWFrZXMgdGhlIHRocmVzaG9sZCBpbiBkZWdyZWVzIGxhcmdlciB3aGVuIHRoZSBmaW5nZXJzIGFyZSBjbG9zZVxuICAgICAgICAgKiB0b2dldGhlciBhbmQgc21hbGxlciB3aGVuIHRoZSBmaW5nZXJzIGFyZSBmYXIgYXBhcnQuXG4gICAgICAgICAqXG4gICAgICAgICAqIFVzZSB0aGUgc21hbGxlc3QgZGlhbWV0ZXIgZnJvbSB0aGUgd2hvbGUgZ2VzdHVyZSB0byByZWR1Y2Ugc2Vuc2l0aXZpdHlcbiAgICAgICAgICogd2hlbiBwaW5jaGluZyBpbiBhbmQgb3V0LlxuICAgICAgICAgKi9cblxuICAgICAgICB0aGlzLl9taW5EaWFtZXRlciA9IE1hdGgubWluKHRoaXMuX21pbkRpYW1ldGVyLCB2ZWN0b3IubWFnKCkpO1xuICAgICAgICBjb25zdCBjaXJjdW1mZXJlbmNlID0gTWF0aC5QSSAqIHRoaXMuX21pbkRpYW1ldGVyO1xuICAgICAgICBjb25zdCB0aHJlc2hvbGQgPSBST1RBVElPTl9USFJFU0hPTEQgLyBjaXJjdW1mZXJlbmNlICogMzYwO1xuXG4gICAgICAgIGNvbnN0IGJlYXJpbmdEZWx0YVNpbmNlU3RhcnQgPSBnZXRCZWFyaW5nRGVsdGEodmVjdG9yLCB0aGlzLl9zdGFydFZlY3Rvcik7XG4gICAgICAgIHJldHVybiBNYXRoLmFicyhiZWFyaW5nRGVsdGFTaW5jZVN0YXJ0KSA8IHRocmVzaG9sZDtcbiAgICB9XG59XG5cbi8qIFBJVENIICovXG5cbmZ1bmN0aW9uIGlzVmVydGljYWwodmVjdG9yKSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKHZlY3Rvci55KSA+IE1hdGguYWJzKHZlY3Rvci54KTtcbn1cblxuY29uc3QgQUxMT1dFRF9TSU5HTEVfVE9VQ0hfVElNRSA9IDEwMDtcblxuLyoqXG4gKiBUaGUgYFRvdWNoUGl0Y2hIYW5kbGVyYCBhbGxvd3MgdGhlIHVzZXIgdG8gcGl0Y2ggdGhlIG1hcCBieSBkcmFnZ2luZyB1cCBhbmQgZG93biB3aXRoIHR3byBmaW5nZXJzLlxuICovXG5leHBvcnQgY2xhc3MgVG91Y2hQaXRjaEhhbmRsZXIgZXh0ZW5kcyBUd29Ub3VjaEhhbmRsZXIge1xuXG4gICAgX3ZhbGlkOiBib29sZWFuIHwgdm9pZDtcbiAgICBfZmlyc3RNb3ZlOiBudW1iZXI7XG4gICAgX2xhc3RQb2ludHM6IFtQb2ludCwgUG9pbnRdO1xuXG4gICAgcmVzZXQoKSB7XG4gICAgICAgIHN1cGVyLnJlc2V0KCk7XG4gICAgICAgIHRoaXMuX3ZhbGlkID0gdW5kZWZpbmVkO1xuICAgICAgICBkZWxldGUgdGhpcy5fZmlyc3RNb3ZlO1xuICAgICAgICBkZWxldGUgdGhpcy5fbGFzdFBvaW50cztcbiAgICB9XG5cbiAgICBfc3RhcnQocG9pbnRzOiBbUG9pbnQsIFBvaW50XSkge1xuICAgICAgICB0aGlzLl9sYXN0UG9pbnRzID0gcG9pbnRzO1xuICAgICAgICBpZiAoaXNWZXJ0aWNhbChwb2ludHNbMF0uc3ViKHBvaW50c1sxXSkpKSB7XG4gICAgICAgICAgICAvLyBmaW5nZXJzIGFyZSBtb3JlIGhvcml6b250YWwgdGhhbiB2ZXJ0aWNhbFxuICAgICAgICAgICAgdGhpcy5fdmFsaWQgPSBmYWxzZTtcblxuICAgICAgICB9XG4gICAgfVxuXG4gICAgX21vdmUocG9pbnRzOiBbUG9pbnQsIFBvaW50XSwgY2VudGVyOiBQb2ludCwgZTogVG91Y2hFdmVudCkge1xuICAgICAgICBjb25zdCB2ZWN0b3JBID0gcG9pbnRzWzBdLnN1Yih0aGlzLl9sYXN0UG9pbnRzWzBdKTtcbiAgICAgICAgY29uc3QgdmVjdG9yQiA9IHBvaW50c1sxXS5zdWIodGhpcy5fbGFzdFBvaW50c1sxXSk7XG5cbiAgICAgICAgdGhpcy5fdmFsaWQgPSB0aGlzLmdlc3R1cmVCZWdpbnNWZXJ0aWNhbGx5KHZlY3RvckEsIHZlY3RvckIsIGUudGltZVN0YW1wKTtcbiAgICAgICAgaWYgKCF0aGlzLl92YWxpZCkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuX2xhc3RQb2ludHMgPSBwb2ludHM7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7XG4gICAgICAgIGNvbnN0IHlEZWx0YUF2ZXJhZ2UgPSAodmVjdG9yQS55ICsgdmVjdG9yQi55KSAvIDI7XG4gICAgICAgIGNvbnN0IGRlZ3JlZXNQZXJQaXhlbE1vdmVkID0gLTAuNTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBpdGNoRGVsdGE6IHlEZWx0YUF2ZXJhZ2UgKiBkZWdyZWVzUGVyUGl4ZWxNb3ZlZFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGdlc3R1cmVCZWdpbnNWZXJ0aWNhbGx5KHZlY3RvckE6IFBvaW50LCB2ZWN0b3JCOiBQb2ludCwgdGltZVN0YW1wOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuX3ZhbGlkICE9PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLl92YWxpZDtcblxuICAgICAgICBjb25zdCB0aHJlc2hvbGQgPSAyO1xuICAgICAgICBjb25zdCBtb3ZlZEEgPSB2ZWN0b3JBLm1hZygpID49IHRocmVzaG9sZDtcbiAgICAgICAgY29uc3QgbW92ZWRCID0gdmVjdG9yQi5tYWcoKSA+PSB0aHJlc2hvbGQ7XG5cbiAgICAgICAgLy8gbmVpdGhlciBmaW5nZXIgaGFzIG1vdmVkIGEgbWVhbmluZ2Z1bCBhbW91bnQsIHdhaXRcbiAgICAgICAgaWYgKCFtb3ZlZEEgJiYgIW1vdmVkQikgcmV0dXJuO1xuXG4gICAgICAgIC8vIE9uZSBmaW5nZXIgaGFzIG1vdmVkIGFuZCB0aGUgb3RoZXIgaGFzIG5vdC5cbiAgICAgICAgLy8gSWYgZW5vdWdoIHRpbWUgaGFzIHBhc3NlZCwgZGVjaWRlIGl0IGlzIG5vdCBhIHBpdGNoLlxuICAgICAgICBpZiAoIW1vdmVkQSB8fCAhbW92ZWRCKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fZmlyc3RNb3ZlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9maXJzdE1vdmUgPSB0aW1lU3RhbXA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aW1lU3RhbXAgLSB0aGlzLl9maXJzdE1vdmUgPCBBTExPV0VEX1NJTkdMRV9UT1VDSF9USU1FKSB7XG4gICAgICAgICAgICAgICAgLy8gc3RpbGwgd2FpdGluZyBmb3IgYSBtb3ZlbWVudCBmcm9tIHRoZSBzZWNvbmQgZmluZ2VyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNTYW1lRGlyZWN0aW9uID0gdmVjdG9yQS55ID4gMCA9PT0gdmVjdG9yQi55ID4gMDtcbiAgICAgICAgcmV0dXJuIGlzVmVydGljYWwodmVjdG9yQSkgJiYgaXNWZXJ0aWNhbCh2ZWN0b3JCKSAmJiBpc1NhbWVEaXJlY3Rpb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBcImRyYWcgdG8gcGl0Y2hcIiBpbnRlcmFjdGlvbiBpcyBlbmFibGVkLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIFRvdWNoUGl0Y2hIYW5kbGVyXG4gICAgICogQG5hbWUgaXNFbmFibGVkXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgXCJkcmFnIHRvIHBpdGNoXCIgaW50ZXJhY3Rpb24gaXMgZW5hYmxlZC5cbiAgICAgKi9cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgXCJkcmFnIHRvIHBpdGNoXCIgaW50ZXJhY3Rpb24gaXMgYWN0aXZlLCBpLmUuIGN1cnJlbnRseSBiZWluZyB1c2VkLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIFRvdWNoUGl0Y2hIYW5kbGVyXG4gICAgICogQG5hbWUgaXNBY3RpdmVcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBcImRyYWcgdG8gcGl0Y2hcIiBpbnRlcmFjdGlvbiBpcyBhY3RpdmUuXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzIHRoZSBcImRyYWcgdG8gcGl0Y2hcIiBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBUb3VjaFBpdGNoSGFuZGxlclxuICAgICAqIEBuYW1lIGVuYWJsZVxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLnRvdWNoUGl0Y2guZW5hYmxlKCk7XG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgXCJkcmFnIHRvIHBpdGNoXCIgaW50ZXJhY3Rpb24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgVG91Y2hQaXRjaEhhbmRsZXJcbiAgICAgKiBAbmFtZSBkaXNhYmxlXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXAudG91Y2hQaXRjaC5kaXNhYmxlKCk7XG4gICAgICovXG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vbWFwJztcblxuY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgcGFuU3RlcDogMTAwLFxuICAgIGJlYXJpbmdTdGVwOiAxNSxcbiAgICBwaXRjaFN0ZXA6IDEwXG59O1xuXG4vKipcbiAqIFRoZSBgS2V5Ym9hcmRIYW5kbGVyYCBhbGxvd3MgdGhlIHVzZXIgdG8gem9vbSwgcm90YXRlLCBhbmQgcGFuIHRoZSBtYXAgdXNpbmdcbiAqIHRoZSBmb2xsb3dpbmcga2V5Ym9hcmQgc2hvcnRjdXRzOlxuICpcbiAqIC0gYD1gIC8gYCtgOiBJbmNyZWFzZSB0aGUgem9vbSBsZXZlbCBieSAxLlxuICogLSBgU2hpZnQtPWAgLyBgU2hpZnQtK2A6IEluY3JlYXNlIHRoZSB6b29tIGxldmVsIGJ5IDIuXG4gKiAtIGAtYDogRGVjcmVhc2UgdGhlIHpvb20gbGV2ZWwgYnkgMS5cbiAqIC0gYFNoaWZ0LS1gOiBEZWNyZWFzZSB0aGUgem9vbSBsZXZlbCBieSAyLlxuICogLSBBcnJvdyBrZXlzOiBQYW4gYnkgMTAwIHBpeGVscy5cbiAqIC0gYFNoaWZ0K8OiwofComA6IEluY3JlYXNlIHRoZSByb3RhdGlvbiBieSAxNSBkZWdyZWVzLlxuICogLSBgU2hpZnQrw6LCh8KgYDogRGVjcmVhc2UgdGhlIHJvdGF0aW9uIGJ5IDE1IGRlZ3JlZXMuXG4gKiAtIGBTaGlmdCvDosKHwqFgOiBJbmNyZWFzZSB0aGUgcGl0Y2ggYnkgMTAgZGVncmVlcy5cbiAqIC0gYFNoaWZ0K8OiwofCo2A6IERlY3JlYXNlIHRoZSBwaXRjaCBieSAxMCBkZWdyZWVzLlxuICovXG5jbGFzcyBLZXlib2FyZEhhbmRsZXIge1xuICAgIF9lbmFibGVkOiBib29sZWFuO1xuICAgIF9hY3RpdmU6IGJvb2xlYW47XG4gICAgX3BhblN0ZXA6IG51bWJlcjtcbiAgICBfYmVhcmluZ1N0ZXA6IG51bWJlcjtcbiAgICBfcGl0Y2hTdGVwOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAqIEBwcml2YXRlXG4gICAgKi9cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgY29uc3Qgc3RlcE9wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucztcbiAgICAgICAgdGhpcy5fcGFuU3RlcCA9IHN0ZXBPcHRpb25zLnBhblN0ZXA7XG4gICAgICAgIHRoaXMuX2JlYXJpbmdTdGVwID0gc3RlcE9wdGlvbnMuYmVhcmluZ1N0ZXA7XG4gICAgICAgIHRoaXMuX3BpdGNoU3RlcCA9IHN0ZXBPcHRpb25zLnBpdGNoU3RlcDtcbiAgICB9XG5cbiAgICByZXNldCgpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgfVxuXG4gICAga2V5ZG93bihlOiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmIChlLmFsdEtleSB8fCBlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KSByZXR1cm47XG5cbiAgICAgICAgbGV0IHpvb21EaXIgPSAwO1xuICAgICAgICBsZXQgYmVhcmluZ0RpciA9IDA7XG4gICAgICAgIGxldCBwaXRjaERpciA9IDA7XG4gICAgICAgIGxldCB4RGlyID0gMDtcbiAgICAgICAgbGV0IHlEaXIgPSAwO1xuXG4gICAgICAgIHN3aXRjaCAoZS5rZXlDb2RlKSB7XG4gICAgICAgIGNhc2UgNjE6XG4gICAgICAgIGNhc2UgMTA3OlxuICAgICAgICBjYXNlIDE3MTpcbiAgICAgICAgY2FzZSAxODc6XG4gICAgICAgICAgICB6b29tRGlyID0gMTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMTg5OlxuICAgICAgICBjYXNlIDEwOTpcbiAgICAgICAgY2FzZSAxNzM6XG4gICAgICAgICAgICB6b29tRGlyID0gLTE7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM3OlxuICAgICAgICAgICAgaWYgKGUuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICBiZWFyaW5nRGlyID0gLTE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB4RGlyID0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgICAgaWYgKGUuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICBiZWFyaW5nRGlyID0gMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHhEaXIgPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzODpcbiAgICAgICAgICAgIGlmIChlLnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgcGl0Y2hEaXIgPSAxO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgeURpciA9IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICAgIGlmIChlLnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgcGl0Y2hEaXIgPSAtMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHlEaXIgPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjYW1lcmFBbmltYXRpb246IChtYXA6IE1hcCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHpvb20gPSBtYXAuZ2V0Wm9vbSgpO1xuICAgICAgICAgICAgICAgIG1hcC5lYXNlVG8oe1xuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMzAwLFxuICAgICAgICAgICAgICAgICAgICBlYXNlSWQ6ICdrZXlib2FyZEhhbmRsZXInLFxuICAgICAgICAgICAgICAgICAgICBlYXNpbmc6IGVhc2VPdXQsXG5cbiAgICAgICAgICAgICAgICAgICAgem9vbTogem9vbURpciA/IE1hdGgucm91bmQoem9vbSkgKyB6b29tRGlyICogKGUuc2hpZnRLZXkgPyAyIDogMSkgOiB6b29tLFxuICAgICAgICAgICAgICAgICAgICBiZWFyaW5nOiBtYXAuZ2V0QmVhcmluZygpICsgYmVhcmluZ0RpciAqIHRoaXMuX2JlYXJpbmdTdGVwLFxuICAgICAgICAgICAgICAgICAgICBwaXRjaDogbWFwLmdldFBpdGNoKCkgKyBwaXRjaERpciAqIHRoaXMuX3BpdGNoU3RlcCxcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBbLXhEaXIgKiB0aGlzLl9wYW5TdGVwLCAteURpciAqIHRoaXMuX3BhblN0ZXBdLFxuICAgICAgICAgICAgICAgICAgICBjZW50ZXI6IG1hcC5nZXRDZW50ZXIoKVxuICAgICAgICAgICAgICAgIH0sIHtvcmlnaW5hbEV2ZW50OiBlfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZW5hYmxlKCkge1xuICAgICAgICB0aGlzLl9lbmFibGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBkaXNhYmxlKCkge1xuICAgICAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9XG5cbiAgICBpc0VuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmFibGVkO1xuICAgIH1cblxuICAgIGlzQWN0aXZlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZWFzZU91dCh0OiBudW1iZXIpIHtcbiAgICByZXR1cm4gdCAqICgyIC0gdCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEtleWJvYXJkSGFuZGxlcjtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBET00gZnJvbSAnLi4vLi4vdXRpbC9kb20nO1xuXG5pbXBvcnQge2Vhc2UgYXMgX2Vhc2UsIGJpbmRBbGwsIGJlemllcn0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCBicm93c2VyIGZyb20gJy4uLy4uL3V0aWwvYnJvd3Nlcic7XG5pbXBvcnQgd2luZG93IGZyb20gJy4uLy4uL3V0aWwvd2luZG93JztcbmltcG9ydCB7bnVtYmVyIGFzIGludGVycG9sYXRlfSBmcm9tICcuLi8uLi9zdHlsZS1zcGVjL3V0aWwvaW50ZXJwb2xhdGUnO1xuaW1wb3J0IExuZ0xhdCBmcm9tICcuLi8uLi9nZW8vbG5nX2xhdCc7XG5cbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi9tYXAnO1xuaW1wb3J0IHR5cGUgSGFuZGxlck1hbmFnZXIgZnJvbSAnLi4vaGFuZGxlcl9tYW5hZ2VyJztcbmltcG9ydCB0eXBlIFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuXG4vLyBkZWx0YVkgdmFsdWUgZm9yIG1vdXNlIHNjcm9sbCB3aGVlbCBpZGVudGlmaWNhdGlvblxuY29uc3Qgd2hlZWxab29tRGVsdGEgPSA0LjAwMDI0NDE0MDYyNTtcblxuLy8gVGhlc2UgbWFnaWMgbnVtYmVycyBjb250cm9sIHRoZSByYXRlIG9mIHpvb20uIFRyYWNrcGFkIGV2ZW50cyBmaXJlIGF0IGEgZ3JlYXRlclxuLy8gZnJlcXVlbmN5IHRoYW4gbW91c2Ugc2Nyb2xsIHdoZWVsLCBzbyByZWR1Y2UgdGhlIHpvb20gcmF0ZSBwZXIgd2hlZWwgdGlja1xuY29uc3QgZGVmYXVsdFpvb21SYXRlID0gMSAvIDEwMDtcbmNvbnN0IHdoZWVsWm9vbVJhdGUgPSAxIC8gNDUwO1xuXG4vLyB1cHBlciBib3VuZCBvbiBob3cgbXVjaCB3ZSBzY2FsZSB0aGUgbWFwIGluIGFueSBzaW5nbGUgcmVuZGVyIGZyYW1lOyB0aGlzXG4vLyBpcyB1c2VkIHRvIGxpbWl0IHpvb20gcmF0ZSBpbiB0aGUgY2FzZSBvZiB2ZXJ5IGZhc3Qgc2Nyb2xsaW5nXG5jb25zdCBtYXhTY2FsZVBlckZyYW1lID0gMjtcblxuLyoqXG4gKiBUaGUgYFNjcm9sbFpvb21IYW5kbGVyYCBhbGxvd3MgdGhlIHVzZXIgdG8gem9vbSB0aGUgbWFwIGJ5IHNjcm9sbGluZy5cbiAqL1xuY2xhc3MgU2Nyb2xsWm9vbUhhbmRsZXIge1xuICAgIF9tYXA6IE1hcDtcbiAgICBfZWw6IEhUTUxFbGVtZW50O1xuICAgIF9lbmFibGVkOiBib29sZWFuO1xuICAgIF9hY3RpdmU6IGJvb2xlYW47XG4gICAgX3pvb21pbmc6IGJvb2xlYW47XG4gICAgX2Fyb3VuZENlbnRlcjogYm9vbGVhbjtcbiAgICBfYXJvdW5kOiBQb2ludDtcbiAgICBfYXJvdW5kUG9pbnQ6IFBvaW50O1xuICAgIF90eXBlOiAnd2hlZWwnIHwgJ3RyYWNrcGFkJyB8IG51bGw7XG4gICAgX2xhc3RWYWx1ZTogbnVtYmVyO1xuICAgIF90aW1lb3V0OiA/VGltZW91dElEOyAvLyB1c2VkIGZvciBkZWxheWVkLWhhbmRsaW5nIG9mIGEgc2luZ2xlIHdoZWVsIG1vdmVtZW50XG4gICAgX2ZpbmlzaFRpbWVvdXQ6ID9UaW1lb3V0SUQ7IC8vIHVzZWQgdG8gZGVsYXkgZmluYWwgJ3ttb3ZlLHpvb219ZW5kJyBldmVudHNcblxuICAgIF9sYXN0V2hlZWxFdmVudDogYW55O1xuICAgIF9sYXN0V2hlZWxFdmVudFRpbWU6IG51bWJlcjtcblxuICAgIF9zdGFydFpvb206ID9udW1iZXI7XG4gICAgX3RhcmdldFpvb206ID9udW1iZXI7XG4gICAgX2RlbHRhOiBudW1iZXI7XG4gICAgX2Vhc2luZzogPygobnVtYmVyKSA9PiBudW1iZXIpO1xuICAgIF9wcmV2RWFzZTogP3tzdGFydDogbnVtYmVyLCBkdXJhdGlvbjogbnVtYmVyLCBlYXNpbmc6IChfOiBudW1iZXIpID0+IG51bWJlcn07XG5cbiAgICBfZnJhbWVJZDogP2Jvb2xlYW47XG4gICAgX2hhbmRsZXI6IEhhbmRsZXJNYW5hZ2VyO1xuXG4gICAgX2RlZmF1bHRab29tUmF0ZTogbnVtYmVyO1xuICAgIF93aGVlbFpvb21SYXRlOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG1hcDogTWFwLCBoYW5kbGVyOiBIYW5kbGVyTWFuYWdlcikge1xuICAgICAgICB0aGlzLl9tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMuX2VsID0gbWFwLmdldENhbnZhc0NvbnRhaW5lcigpO1xuICAgICAgICB0aGlzLl9oYW5kbGVyID0gaGFuZGxlcjtcblxuICAgICAgICB0aGlzLl9kZWx0YSA9IDA7XG5cbiAgICAgICAgdGhpcy5fZGVmYXVsdFpvb21SYXRlID0gZGVmYXVsdFpvb21SYXRlO1xuICAgICAgICB0aGlzLl93aGVlbFpvb21SYXRlID0gd2hlZWxab29tUmF0ZTtcblxuICAgICAgICBiaW5kQWxsKFtcbiAgICAgICAgICAgICdfb25XaGVlbCcsXG4gICAgICAgICAgICAnX29uVGltZW91dCcsXG4gICAgICAgICAgICAnX29uU2Nyb2xsRnJhbWUnLFxuICAgICAgICAgICAgJ19vblNjcm9sbEZpbmlzaGVkJ1xuICAgICAgICBdLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIHpvb20gcmF0ZSBvZiBhIHRyYWNrcGFkXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt6b29tUmF0ZT0xLzEwMF0gVGhlIHJhdGUgdXNlZCB0byBzY2FsZSB0cmFja3BhZCBtb3ZlbWVudCB0byBhIHpvb20gdmFsdWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBTcGVlZCB1cCB0cmFja3BhZCB6b29tXG4gICAgICogbWFwLnNjcm9sbFpvb20uc2V0Wm9vbVJhdGUoMS8yNSk7XG4gICAgICovXG4gICAgc2V0Wm9vbVJhdGUoem9vbVJhdGU6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9kZWZhdWx0Wm9vbVJhdGUgPSB6b29tUmF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIFNldCB0aGUgem9vbSByYXRlIG9mIGEgbW91c2Ugd2hlZWxcbiAgICAqIEBwYXJhbSB7bnVtYmVyfSBbd2hlZWxab29tUmF0ZT0xLzQ1MF0gVGhlIHJhdGUgdXNlZCB0byBzY2FsZSBtb3VzZSB3aGVlbCBtb3ZlbWVudCB0byBhIHpvb20gdmFsdWUuXG4gICAgKiBAZXhhbXBsZVxuICAgICogLy8gU2xvdyBkb3duIHpvb20gb2YgbW91c2Ugd2hlZWxcbiAgICAqIG1hcC5zY3JvbGxab29tLnNldFdoZWVsWm9vbVJhdGUoMS82MDApO1xuICAgICovXG4gICAgc2V0V2hlZWxab29tUmF0ZSh3aGVlbFpvb21SYXRlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fd2hlZWxab29tUmF0ZSA9IHdoZWVsWm9vbVJhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBcInNjcm9sbCB0byB6b29tXCIgaW50ZXJhY3Rpb24gaXMgZW5hYmxlZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIFwic2Nyb2xsIHRvIHpvb21cIiBpbnRlcmFjdGlvbiBpcyBlbmFibGVkLlxuICAgICAqL1xuICAgIGlzRW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZW5hYmxlZDtcbiAgICB9XG5cbiAgICAvKlxuICAgICogQWN0aXZlIHN0YXRlIGlzIHR1cm5lZCBvbiBhbmQgb2ZmIHdpdGggZXZlcnkgc2Nyb2xsIHdoZWVsIGV2ZW50IGFuZCBpcyBzZXQgYmFjayB0byBmYWxzZSBiZWZvcmUgdGhlIG1hcFxuICAgICogcmVuZGVyIGlzIGNhbGxlZCwgc28gX2FjdGl2ZSBpcyBub3QgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZGV0ZXJtaW5pbmcgaWYgYSBzY3JvbGwgem9vbSBhbmltYXRpb24gaXMgaW5cbiAgICAqIHByb2dyZXNzLlxuICAgICovXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2FjdGl2ZSB8fCB0aGlzLl9maW5pc2hUaW1lb3V0ICE9PSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaXNab29taW5nKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl96b29taW5nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgdGhlIFwic2Nyb2xsIHRvIHpvb21cIiBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gT3B0aW9ucyBvYmplY3QuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmFyb3VuZF0gSWYgXCJjZW50ZXJcIiBpcyBwYXNzZWQsIG1hcCB3aWxsIHpvb20gYXJvdW5kIGNlbnRlciBvZiBtYXBcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogICBtYXAuc2Nyb2xsWm9vbS5lbmFibGUoKTtcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICBtYXAuc2Nyb2xsWm9vbS5lbmFibGUoeyBhcm91bmQ6ICdjZW50ZXInIH0pXG4gICAgICovXG4gICAgZW5hYmxlKG9wdGlvbnM6IGFueSkge1xuICAgICAgICBpZiAodGhpcy5pc0VuYWJsZWQoKSkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9lbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fYXJvdW5kQ2VudGVyID0gb3B0aW9ucyAmJiBvcHRpb25zLmFyb3VuZCA9PT0gJ2NlbnRlcic7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMgdGhlIFwic2Nyb2xsIHRvIHpvb21cIiBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogICBtYXAuc2Nyb2xsWm9vbS5kaXNhYmxlKCk7XG4gICAgICovXG4gICAgZGlzYWJsZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRW5hYmxlZCgpKSByZXR1cm47XG4gICAgICAgIHRoaXMuX2VuYWJsZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB3aGVlbChlOiBXaGVlbEV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5pc0VuYWJsZWQoKSkgcmV0dXJuO1xuXG4gICAgICAgIC8vIFJlbW92ZSBgYW55YCBjYXN0IHdoZW4gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzQ4NzkgaXMgZml4ZWQuXG4gICAgICAgIGxldCB2YWx1ZSA9IGUuZGVsdGFNb2RlID09PSAod2luZG93LldoZWVsRXZlbnQ6IGFueSkuRE9NX0RFTFRBX0xJTkUgPyBlLmRlbHRhWSAqIDQwIDogZS5kZWx0YVk7XG4gICAgICAgIGNvbnN0IG5vdyA9IGJyb3dzZXIubm93KCksXG4gICAgICAgICAgICB0aW1lRGVsdGEgPSBub3cgLSAodGhpcy5fbGFzdFdoZWVsRXZlbnRUaW1lIHx8IDApO1xuXG4gICAgICAgIHRoaXMuX2xhc3RXaGVlbEV2ZW50VGltZSA9IG5vdztcblxuICAgICAgICBpZiAodmFsdWUgIT09IDAgJiYgKHZhbHVlICUgd2hlZWxab29tRGVsdGEpID09PSAwKSB7XG4gICAgICAgICAgICAvLyBUaGlzIG9uZSBpcyBkZWZpbml0ZWx5IGEgbW91c2Ugd2hlZWwgZXZlbnQuXG4gICAgICAgICAgICB0aGlzLl90eXBlID0gJ3doZWVsJztcblxuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlICE9PSAwICYmIE1hdGguYWJzKHZhbHVlKSA8IDQpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgb25lIGlzIGRlZmluaXRlbHkgYSB0cmFja3BhZCBldmVudCBiZWNhdXNlIGl0IGlzIHNvIHNtYWxsLlxuICAgICAgICAgICAgdGhpcy5fdHlwZSA9ICd0cmFja3BhZCc7XG5cbiAgICAgICAgfSBlbHNlIGlmICh0aW1lRGVsdGEgPiA0MDApIHtcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgbGlrZWx5IGEgbmV3IHNjcm9sbCBhY3Rpb24uXG4gICAgICAgICAgICB0aGlzLl90eXBlID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX2xhc3RWYWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgICAgICAvLyBTdGFydCBhIHRpbWVvdXQgaW4gY2FzZSB0aGlzIHdhcyBhIHNpbmd1bGFyIGV2ZW50LCBhbmQgZGVseSBpdCBieSB1cCB0byA0MG1zLlxuICAgICAgICAgICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQodGhpcy5fb25UaW1lb3V0LCA0MCwgZSk7XG5cbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5fdHlwZSkge1xuICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHJlcGVhdGluZyBldmVudCwgYnV0IHdlIGRvbid0IGtub3cgdGhlIHR5cGUgb2YgZXZlbnQganVzdCB5ZXQuXG4gICAgICAgICAgICAvLyBJZiB0aGUgZGVsdGEgcGVyIHRpbWUgaXMgc21hbGwsIHdlIGFzc3VtZSBpdCdzIGEgZmFzdCB0cmFja3BhZDsgb3RoZXJ3aXNlIHdlIHN3aXRjaCBpbnRvIHdoZWVsIG1vZGUuXG4gICAgICAgICAgICB0aGlzLl90eXBlID0gKE1hdGguYWJzKHRpbWVEZWx0YSAqIHZhbHVlKSA8IDIwMCkgPyAndHJhY2twYWQnIDogJ3doZWVsJztcblxuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIG91ciBkZWxheWVkIGV2ZW50IGlzbid0IGZpcmVkIGFnYWluLCBiZWNhdXNlIHdlIGFjY3VtdWxhdGVcbiAgICAgICAgICAgIC8vIHRoZSBwcmV2aW91cyBldmVudCAod2hpY2ggd2FzIGxlc3MgdGhhbiA0MG1zIGFnbykgaW50byB0aGlzIGV2ZW50LlxuICAgICAgICAgICAgaWYgKHRoaXMuX3RpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGltZW91dCA9IG51bGw7XG4gICAgICAgICAgICAgICAgdmFsdWUgKz0gdGhpcy5fbGFzdFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2xvdyBkb3duIHpvb20gaWYgc2hpZnQga2V5IGlzIGhlbGQgZm9yIG1vcmUgcHJlY2lzZSB6b29taW5nXG4gICAgICAgIGlmIChlLnNoaWZ0S2V5ICYmIHZhbHVlKSB2YWx1ZSA9IHZhbHVlIC8gNDtcblxuICAgICAgICAvLyBPbmx5IGZpcmUgdGhlIGNhbGxiYWNrIGlmIHdlIGFjdHVhbGx5IGtub3cgd2hhdCB0eXBlIG9mIHNjcm9sbGluZyBkZXZpY2UgdGhlIHVzZXIgdXNlcy5cbiAgICAgICAgaWYgKHRoaXMuX3R5cGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2xhc3RXaGVlbEV2ZW50ID0gZTtcbiAgICAgICAgICAgIHRoaXMuX2RlbHRhIC09IHZhbHVlO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9hY3RpdmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGFydChlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBfb25UaW1lb3V0KGluaXRpYWxFdmVudDogYW55KSB7XG4gICAgICAgIHRoaXMuX3R5cGUgPSAnd2hlZWwnO1xuICAgICAgICB0aGlzLl9kZWx0YSAtPSB0aGlzLl9sYXN0VmFsdWU7XG4gICAgICAgIGlmICghdGhpcy5fYWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLl9zdGFydChpbml0aWFsRXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3N0YXJ0KGU6IGFueSkge1xuICAgICAgICBpZiAoIXRoaXMuX2RlbHRhKSByZXR1cm47XG5cbiAgICAgICAgaWYgKHRoaXMuX2ZyYW1lSWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lSWQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgaWYgKCF0aGlzLmlzWm9vbWluZygpKSB7XG4gICAgICAgICAgICB0aGlzLl96b29taW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9maW5pc2hUaW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fZmluaXNoVGltZW91dCk7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fZmluaXNoVGltZW91dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBvcyA9IERPTS5tb3VzZVBvcyh0aGlzLl9lbCwgZSk7XG5cbiAgICAgICAgdGhpcy5fYXJvdW5kID0gTG5nTGF0LmNvbnZlcnQodGhpcy5fYXJvdW5kQ2VudGVyID8gdGhpcy5fbWFwLmdldENlbnRlcigpIDogdGhpcy5fbWFwLnVucHJvamVjdChwb3MpKTtcbiAgICAgICAgdGhpcy5fYXJvdW5kUG9pbnQgPSB0aGlzLl9tYXAudHJhbnNmb3JtLmxvY2F0aW9uUG9pbnQodGhpcy5fYXJvdW5kKTtcbiAgICAgICAgaWYgKCF0aGlzLl9mcmFtZUlkKSB7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZUlkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZXIuX3RyaWdnZXJSZW5kZXJGcmFtZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyRnJhbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vblNjcm9sbEZyYW1lKCk7XG4gICAgfVxuXG4gICAgX29uU2Nyb2xsRnJhbWUoKSB7XG4gICAgICAgIGlmICghdGhpcy5fZnJhbWVJZCkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9mcmFtZUlkID0gbnVsbDtcblxuICAgICAgICBpZiAoIXRoaXMuaXNBY3RpdmUoKSkgcmV0dXJuO1xuICAgICAgICBjb25zdCB0ciA9IHRoaXMuX21hcC50cmFuc2Zvcm07XG5cbiAgICAgICAgLy8gaWYgd2UndmUgaGFkIHNjcm9sbCBldmVudHMgc2luY2UgdGhlIGxhc3QgcmVuZGVyIGZyYW1lLCBjb25zdW1lIHRoZVxuICAgICAgICAvLyBhY2N1bXVsYXRlZCBkZWx0YSwgYW5kIHVwZGF0ZSB0aGUgdGFyZ2V0IHpvb20gbGV2ZWwgYWNjb3JkaW5nbHlcbiAgICAgICAgaWYgKHRoaXMuX2RlbHRhICE9PSAwKSB7XG4gICAgICAgICAgICAvLyBGb3IgdHJhY2twYWQgZXZlbnRzIGFuZCBzaW5nbGUgbW91c2Ugd2hlZWwgdGlja3MsIHVzZSB0aGUgZGVmYXVsdCB6b29tIHJhdGVcbiAgICAgICAgICAgIGNvbnN0IHpvb21SYXRlID0gKHRoaXMuX3R5cGUgPT09ICd3aGVlbCcgJiYgTWF0aC5hYnModGhpcy5fZGVsdGEpID4gd2hlZWxab29tRGVsdGEpID8gdGhpcy5fd2hlZWxab29tUmF0ZSA6IHRoaXMuX2RlZmF1bHRab29tUmF0ZTtcbiAgICAgICAgICAgIC8vIFNjYWxlIGJ5IHNpZ21vaWQgb2Ygc2Nyb2xsIHdoZWVsIGRlbHRhLlxuICAgICAgICAgICAgbGV0IHNjYWxlID0gbWF4U2NhbGVQZXJGcmFtZSAvICgxICsgTWF0aC5leHAoLU1hdGguYWJzKHRoaXMuX2RlbHRhICogem9vbVJhdGUpKSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9kZWx0YSA8IDAgJiYgc2NhbGUgIT09IDApIHtcbiAgICAgICAgICAgICAgICBzY2FsZSA9IDEgLyBzY2FsZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZnJvbVNjYWxlID0gdHlwZW9mIHRoaXMuX3RhcmdldFpvb20gPT09ICdudW1iZXInID8gdHIuem9vbVNjYWxlKHRoaXMuX3RhcmdldFpvb20pIDogdHIuc2NhbGU7XG4gICAgICAgICAgICB0aGlzLl90YXJnZXRab29tID0gTWF0aC5taW4odHIubWF4Wm9vbSwgTWF0aC5tYXgodHIubWluWm9vbSwgdHIuc2NhbGVab29tKGZyb21TY2FsZSAqIHNjYWxlKSkpO1xuXG4gICAgICAgICAgICAvLyBpZiB0aGlzIGlzIGEgbW91c2Ugd2hlZWwsIHJlZnJlc2ggdGhlIHN0YXJ0aW5nIHpvb20gYW5kIGVhc2luZ1xuICAgICAgICAgICAgLy8gZnVuY3Rpb24gd2UncmUgdXNpbmcgdG8gc21vb3RoIG91dCB0aGUgem9vbWluZyBiZXR3ZWVuIHdoZWVsXG4gICAgICAgICAgICAvLyBldmVudHNcbiAgICAgICAgICAgIGlmICh0aGlzLl90eXBlID09PSAnd2hlZWwnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhcnRab29tID0gdHIuem9vbTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lYXNpbmcgPSB0aGlzLl9zbW9vdGhPdXRFYXNpbmcoMjAwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fZGVsdGEgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGFyZ2V0Wm9vbSA9IHR5cGVvZiB0aGlzLl90YXJnZXRab29tID09PSAnbnVtYmVyJyA/XG4gICAgICAgICAgICB0aGlzLl90YXJnZXRab29tIDogdHIuem9vbTtcbiAgICAgICAgY29uc3Qgc3RhcnRab29tID0gdGhpcy5fc3RhcnRab29tO1xuICAgICAgICBjb25zdCBlYXNpbmcgPSB0aGlzLl9lYXNpbmc7XG5cbiAgICAgICAgbGV0IGZpbmlzaGVkID0gZmFsc2U7XG4gICAgICAgIGxldCB6b29tO1xuICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gJ3doZWVsJyAmJiBzdGFydFpvb20gJiYgZWFzaW5nKSB7XG4gICAgICAgICAgICBhc3NlcnQoZWFzaW5nICYmIHR5cGVvZiBzdGFydFpvb20gPT09ICdudW1iZXInKTtcblxuICAgICAgICAgICAgY29uc3QgdCA9IE1hdGgubWluKChicm93c2VyLm5vdygpIC0gdGhpcy5fbGFzdFdoZWVsRXZlbnRUaW1lKSAvIDIwMCwgMSk7XG4gICAgICAgICAgICBjb25zdCBrID0gZWFzaW5nKHQpO1xuICAgICAgICAgICAgem9vbSA9IGludGVycG9sYXRlKHN0YXJ0Wm9vbSwgdGFyZ2V0Wm9vbSwgayk7XG4gICAgICAgICAgICBpZiAodCA8IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2ZyYW1lSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZnJhbWVJZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmaW5pc2hlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB6b29tID0gdGFyZ2V0Wm9vbTtcbiAgICAgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7XG5cbiAgICAgICAgaWYgKGZpbmlzaGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX2ZpbmlzaFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl96b29taW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlci5fdHJpZ2dlclJlbmRlckZyYW1lKCk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3RhcmdldFpvb207XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2ZpbmlzaFRpbWVvdXQ7XG4gICAgICAgICAgICB9LCAyMDApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5vSW5lcnRpYTogdHJ1ZSxcbiAgICAgICAgICAgIG5lZWRzUmVuZGVyRnJhbWU6ICFmaW5pc2hlZCxcbiAgICAgICAgICAgIHpvb21EZWx0YTogem9vbSAtIHRyLnpvb20sXG4gICAgICAgICAgICBhcm91bmQ6IHRoaXMuX2Fyb3VuZFBvaW50LFxuICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogdGhpcy5fbGFzdFdoZWVsRXZlbnRcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBfc21vb3RoT3V0RWFzaW5nKGR1cmF0aW9uOiBudW1iZXIpIHtcbiAgICAgICAgbGV0IGVhc2luZyA9IF9lYXNlO1xuXG4gICAgICAgIGlmICh0aGlzLl9wcmV2RWFzZSkge1xuICAgICAgICAgICAgY29uc3QgZWFzZSA9IHRoaXMuX3ByZXZFYXNlLFxuICAgICAgICAgICAgICAgIHQgPSAoYnJvd3Nlci5ub3coKSAtIGVhc2Uuc3RhcnQpIC8gZWFzZS5kdXJhdGlvbixcbiAgICAgICAgICAgICAgICBzcGVlZCA9IGVhc2UuZWFzaW5nKHQgKyAwLjAxKSAtIGVhc2UuZWFzaW5nKHQpLFxuXG4gICAgICAgICAgICAgICAgLy8gUXVpY2sgaGFjayB0byBtYWtlIG5ldyBiZXppZXIgdGhhdCBpcyBjb250aW51b3VzIHdpdGggbGFzdFxuICAgICAgICAgICAgICAgIHggPSAwLjI3IC8gTWF0aC5zcXJ0KHNwZWVkICogc3BlZWQgKyAwLjAwMDEpICogMC4wMSxcbiAgICAgICAgICAgICAgICB5ID0gTWF0aC5zcXJ0KDAuMjcgKiAwLjI3IC0geCAqIHgpO1xuXG4gICAgICAgICAgICBlYXNpbmcgPSBiZXppZXIoeCwgeSwgMC4yNSwgMSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wcmV2RWFzZSA9IHtcbiAgICAgICAgICAgIHN0YXJ0OiBicm93c2VyLm5vdygpLFxuICAgICAgICAgICAgZHVyYXRpb24sXG4gICAgICAgICAgICBlYXNpbmdcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gZWFzaW5nO1xuICAgIH1cblxuICAgIHJlc2V0KCkge1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNjcm9sbFpvb21IYW5kbGVyO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHR5cGUgQ2xpY2tab29tSGFuZGxlciBmcm9tICcuLi9jbGlja196b29tJztcbmltcG9ydCB0eXBlIFRhcFpvb21IYW5kbGVyIGZyb20gJy4vLi4vdGFwX3pvb20nO1xuXG4vKipcbiAqIFRoZSBgRG91YmxlQ2xpY2tab29tSGFuZGxlcmAgYWxsb3dzIHRoZSB1c2VyIHRvIHpvb20gdGhlIG1hcCBhdCBhIHBvaW50IGJ5XG4gKiBkb3VibGUgY2xpY2tpbmcgb3IgZG91YmxlIHRhcHBpbmcuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvdWJsZUNsaWNrWm9vbUhhbmRsZXIge1xuXG4gICAgX2NsaWNrWm9vbTogQ2xpY2tab29tSGFuZGxlcjtcbiAgICBfdGFwWm9vbTogVGFwWm9vbUhhbmRsZXI7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICovXG4gICAgY29uc3RydWN0b3IoY2xpY2tab29tOiBDbGlja1pvb21IYW5kbGVyLCBUYXBab29tOiBUYXBab29tSGFuZGxlcikge1xuICAgICAgICB0aGlzLl9jbGlja1pvb20gPSBjbGlja1pvb207XG4gICAgICAgIHRoaXMuX3RhcFpvb20gPSBUYXBab29tO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgdGhlIFwiZG91YmxlIGNsaWNrIHRvIHpvb21cIiBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLmRvdWJsZUNsaWNrWm9vbS5lbmFibGUoKTtcbiAgICAgKi9cbiAgICBlbmFibGUoKSB7XG4gICAgICAgIHRoaXMuX2NsaWNrWm9vbS5lbmFibGUoKTtcbiAgICAgICAgdGhpcy5fdGFwWm9vbS5lbmFibGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgXCJkb3VibGUgY2xpY2sgdG8gem9vbVwiIGludGVyYWN0aW9uLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXAuZG91YmxlQ2xpY2tab29tLmRpc2FibGUoKTtcbiAgICAgKi9cbiAgICBkaXNhYmxlKCkge1xuICAgICAgICB0aGlzLl9jbGlja1pvb20uZGlzYWJsZSgpO1xuICAgICAgICB0aGlzLl90YXBab29tLmRpc2FibGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIFwiZG91YmxlIGNsaWNrIHRvIHpvb21cIiBpbnRlcmFjdGlvbiBpcyBlbmFibGVkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgXCJkb3VibGUgY2xpY2sgdG8gem9vbVwiIGludGVyYWN0aW9uIGlzIGVuYWJsZWQuXG4gICAgICovXG4gICAgaXNFbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2xpY2tab29tLmlzRW5hYmxlZCgpICYmIHRoaXMuX3RhcFpvb20uaXNFbmFibGVkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBcImRvdWJsZSBjbGljayB0byB6b29tXCIgaW50ZXJhY3Rpb24gaXMgYWN0aXZlLCBpLmUuIGN1cnJlbnRseSBiZWluZyB1c2VkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgXCJkb3VibGUgY2xpY2sgdG8gem9vbVwiIGludGVyYWN0aW9uIGlzIGFjdGl2ZS5cbiAgICAgKi9cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWNrWm9vbS5pc0FjdGl2ZSgpIHx8IHRoaXMuX3RhcFpvb20uaXNBY3RpdmUoKTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgdHlwZSBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi9tYXAnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDbGlja1pvb21IYW5kbGVyIHtcblxuICAgIF9lbmFibGVkOiBib29sZWFuO1xuICAgIF9hY3RpdmU6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH1cblxuICAgIHJlc2V0KCkge1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBkYmxjbGljayhlOiBNb3VzZUV2ZW50LCBwb2ludDogUG9pbnQpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY2FtZXJhQW5pbWF0aW9uOiAobWFwOiBNYXApID0+IHtcbiAgICAgICAgICAgICAgICBtYXAuZWFzZVRvKHtcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDMwMCxcbiAgICAgICAgICAgICAgICAgICAgem9vbTogbWFwLmdldFpvb20oKSArIChlLnNoaWZ0S2V5ID8gLTEgOiAxKSxcbiAgICAgICAgICAgICAgICAgICAgYXJvdW5kOiBtYXAudW5wcm9qZWN0KHBvaW50KVxuICAgICAgICAgICAgICAgIH0sIHtvcmlnaW5hbEV2ZW50OiBlfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZW5hYmxlKCkge1xuICAgICAgICB0aGlzLl9lbmFibGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBkaXNhYmxlKCkge1xuICAgICAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9XG5cbiAgICBpc0VuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmFibGVkO1xuICAgIH1cblxuICAgIGlzQWN0aXZlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7VGFwUmVjb2duaXplciwgTUFYX1RBUF9JTlRFUlZBTH0gZnJvbSAnLi90YXBfcmVjb2duaXplcic7XG5pbXBvcnQgdHlwZSBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGFwRHJhZ1pvb21IYW5kbGVyIHtcblxuICAgIF9lbmFibGVkOiBib29sZWFuO1xuICAgIF9hY3RpdmU6IGJvb2xlYW47XG4gICAgX3N3aXBlUG9pbnQ6IFBvaW50O1xuICAgIF9zd2lwZVRvdWNoOiBudW1iZXI7XG4gICAgX3RhcFRpbWU6IG51bWJlcjtcbiAgICBfdGFwOiBUYXBSZWNvZ25pemVyO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG5cbiAgICAgICAgdGhpcy5fdGFwID0gbmV3IFRhcFJlY29nbml6ZXIoe1xuICAgICAgICAgICAgbnVtVG91Y2hlczogMSxcbiAgICAgICAgICAgIG51bVRhcHM6IDFcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH1cblxuICAgIHJlc2V0KCkge1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3N3aXBlUG9pbnQ7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9zd2lwZVRvdWNoO1xuICAgICAgICBkZWxldGUgdGhpcy5fdGFwVGltZTtcbiAgICAgICAgdGhpcy5fdGFwLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgdG91Y2hzdGFydChlOiBUb3VjaEV2ZW50LCBwb2ludHM6IEFycmF5PFBvaW50PiwgbWFwVG91Y2hlczogQXJyYXk8VG91Y2g+KSB7XG4gICAgICAgIGlmICh0aGlzLl9zd2lwZVBvaW50KSByZXR1cm47XG5cbiAgICAgICAgaWYgKHRoaXMuX3RhcFRpbWUgJiYgZS50aW1lU3RhbXAgLSB0aGlzLl90YXBUaW1lID4gTUFYX1RBUF9JTlRFUlZBTCkge1xuICAgICAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl90YXBUaW1lKSB7XG4gICAgICAgICAgICB0aGlzLl90YXAudG91Y2hzdGFydChlLCBwb2ludHMsIG1hcFRvdWNoZXMpO1xuICAgICAgICB9IGVsc2UgaWYgKG1hcFRvdWNoZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fc3dpcGVQb2ludCA9IHBvaW50c1swXTtcbiAgICAgICAgICAgIHRoaXMuX3N3aXBlVG91Y2ggPSBtYXBUb3VjaGVzWzBdLmlkZW50aWZpZXI7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHRvdWNobW92ZShlOiBUb3VjaEV2ZW50LCBwb2ludHM6IEFycmF5PFBvaW50PiwgbWFwVG91Y2hlczogQXJyYXk8VG91Y2g+KSB7XG4gICAgICAgIGlmICghdGhpcy5fdGFwVGltZSkge1xuICAgICAgICAgICAgdGhpcy5fdGFwLnRvdWNobW92ZShlLCBwb2ludHMsIG1hcFRvdWNoZXMpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3N3aXBlUG9pbnQpIHtcbiAgICAgICAgICAgIGlmIChtYXBUb3VjaGVzWzBdLmlkZW50aWZpZXIgIT09IHRoaXMuX3N3aXBlVG91Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld1N3aXBlUG9pbnQgPSBwb2ludHNbMF07XG4gICAgICAgICAgICBjb25zdCBkaXN0ID0gbmV3U3dpcGVQb2ludC55IC0gdGhpcy5fc3dpcGVQb2ludC55O1xuICAgICAgICAgICAgdGhpcy5fc3dpcGVQb2ludCA9IG5ld1N3aXBlUG9pbnQ7XG5cbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgem9vbURlbHRhOiBkaXN0IC8gMTI4XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdG91Y2hlbmQoZTogVG91Y2hFdmVudCwgcG9pbnRzOiBBcnJheTxQb2ludD4sIG1hcFRvdWNoZXM6IEFycmF5PFRvdWNoPikge1xuICAgICAgICBpZiAoIXRoaXMuX3RhcFRpbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHBvaW50ID0gdGhpcy5fdGFwLnRvdWNoZW5kKGUsIHBvaW50cywgbWFwVG91Y2hlcyk7XG4gICAgICAgICAgICBpZiAocG9pbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90YXBUaW1lID0gZS50aW1lU3RhbXA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fc3dpcGVQb2ludCkge1xuICAgICAgICAgICAgaWYgKG1hcFRvdWNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdG91Y2hjYW5jZWwoKSB7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9XG5cbiAgICBlbmFibGUoKSB7XG4gICAgICAgIHRoaXMuX2VuYWJsZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGRpc2FibGUoKSB7XG4gICAgICAgIHRoaXMuX2VuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH1cblxuICAgIGlzRW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VuYWJsZWQ7XG4gICAgfVxuXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmU7XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHR5cGUge01vdXNlUGFuSGFuZGxlcn0gZnJvbSAnLi4vbW91c2UnO1xuaW1wb3J0IHR5cGUgVG91Y2hQYW5IYW5kbGVyIGZyb20gJy4vLi4vdG91Y2hfcGFuJztcblxuZXhwb3J0IHR5cGUgRHJhZ1Bhbk9wdGlvbnMgPSB7XG4gICAgbGluZWFyaXR5PzogbnVtYmVyO1xuICAgIGVhc2luZz86ICh0OiBudW1iZXIpID0+IG51bWJlcjtcbiAgICBkZWNlbGVyYXRpb24/OiBudW1iZXI7XG4gICAgbWF4U3BlZWQ/OiBudW1iZXI7XG59O1xuXG4vKipcbiAqIFRoZSBgRHJhZ1BhbkhhbmRsZXJgIGFsbG93cyB0aGUgdXNlciB0byBwYW4gdGhlIG1hcCBieSBjbGlja2luZyBhbmQgZHJhZ2dpbmdcbiAqIHRoZSBjdXJzb3IuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERyYWdQYW5IYW5kbGVyIHtcblxuICAgIF9lbDogSFRNTEVsZW1lbnQ7XG4gICAgX21vdXNlUGFuOiBNb3VzZVBhbkhhbmRsZXI7XG4gICAgX3RvdWNoUGFuOiBUb3VjaFBhbkhhbmRsZXI7XG4gICAgX2luZXJ0aWFPcHRpb25zOiBEcmFnUGFuT3B0aW9uc1xuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGVsOiBIVE1MRWxlbWVudCwgbW91c2VQYW46IE1vdXNlUGFuSGFuZGxlciwgdG91Y2hQYW46IFRvdWNoUGFuSGFuZGxlcikge1xuICAgICAgICB0aGlzLl9lbCA9IGVsO1xuICAgICAgICB0aGlzLl9tb3VzZVBhbiA9IG1vdXNlUGFuO1xuICAgICAgICB0aGlzLl90b3VjaFBhbiA9IHRvdWNoUGFuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgdGhlIFwiZHJhZyB0byBwYW5cIiBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gT3B0aW9ucyBvYmplY3RcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubGluZWFyaXR5PTBdIGZhY3RvciB1c2VkIHRvIHNjYWxlIHRoZSBkcmFnIHZlbG9jaXR5XG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMuZWFzaW5nPWJlemllcigwLCAwLCAwLjMsIDEpXSBlYXNpbmcgZnVuY3Rpb24gYXBwbGxlZCB0byBgbWFwLnBhblRvYCB3aGVuIGFwcGx5aW5nIHRoZSBkcmFnLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhTcGVlZD0xNDAwXSB0aGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgZHJhZyB2ZWxvY2l0eS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuZGVjZWxlcmF0aW9uPTI1MDBdIHRoZSByYXRlIGF0IHdoaWNoIHRoZSBzcGVlZCByZWR1Y2VzIGFmdGVyIHRoZSBwYW4gZW5kcy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogICBtYXAuZHJhZ1Bhbi5lbmFibGUoKTtcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICAgbWFwLmRyYWdwYW4uZW5hYmxlKHtcbiAgICAgKiAgICAgIGxpbmVhcml0eTogMC4zLFxuICAgICAqICAgICAgZWFzaW5nOiBiZXppZXIoMCwgMCwgMC4zLCAxKSxcbiAgICAgKiAgICAgIG1heFNwZWVkOiAxNDAwLFxuICAgICAqICAgICAgZGVjZWxlcmF0aW9uOiAyNTAwLFxuICAgICAqICAgfSk7XG4gICAgICovXG4gICAgZW5hYmxlKG9wdGlvbnM/OiBEcmFnUGFuT3B0aW9ucykge1xuICAgICAgICB0aGlzLl9pbmVydGlhT3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIHRoaXMuX21vdXNlUGFuLmVuYWJsZSgpO1xuICAgICAgICB0aGlzLl90b3VjaFBhbi5lbmFibGUoKTtcbiAgICAgICAgdGhpcy5fZWwuY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtdG91Y2gtZHJhZy1wYW4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgXCJkcmFnIHRvIHBhblwiIGludGVyYWN0aW9uLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXAuZHJhZ1Bhbi5kaXNhYmxlKCk7XG4gICAgICovXG4gICAgZGlzYWJsZSgpIHtcbiAgICAgICAgdGhpcy5fbW91c2VQYW4uZGlzYWJsZSgpO1xuICAgICAgICB0aGlzLl90b3VjaFBhbi5kaXNhYmxlKCk7XG4gICAgICAgIHRoaXMuX2VsLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLXRvdWNoLWRyYWctcGFuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBcImRyYWcgdG8gcGFuXCIgaW50ZXJhY3Rpb24gaXMgZW5hYmxlZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIFwiZHJhZyB0byBwYW5cIiBpbnRlcmFjdGlvbiBpcyBlbmFibGVkLlxuICAgICAqL1xuICAgIGlzRW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vdXNlUGFuLmlzRW5hYmxlZCgpICYmIHRoaXMuX3RvdWNoUGFuLmlzRW5hYmxlZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgXCJkcmFnIHRvIHBhblwiIGludGVyYWN0aW9uIGlzIGFjdGl2ZSwgaS5lLiBjdXJyZW50bHkgYmVpbmcgdXNlZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIFwiZHJhZyB0byBwYW5cIiBpbnRlcmFjdGlvbiBpcyBhY3RpdmUuXG4gICAgICovXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tb3VzZVBhbi5pc0FjdGl2ZSgpIHx8IHRoaXMuX3RvdWNoUGFuLmlzQWN0aXZlKCk7XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHR5cGUge01vdXNlUm90YXRlSGFuZGxlciwgTW91c2VQaXRjaEhhbmRsZXJ9IGZyb20gJy4uL21vdXNlJztcblxuLyoqXG4gKiBUaGUgYERyYWdSb3RhdGVIYW5kbGVyYCBhbGxvd3MgdGhlIHVzZXIgdG8gcm90YXRlIHRoZSBtYXAgYnkgY2xpY2tpbmcgYW5kXG4gKiBkcmFnZ2luZyB0aGUgY3Vyc29yIHdoaWxlIGhvbGRpbmcgdGhlIHJpZ2h0IG1vdXNlIGJ1dHRvbiBvciBgY3RybGAga2V5LlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEcmFnUm90YXRlSGFuZGxlciB7XG5cbiAgICBfbW91c2VSb3RhdGU6IE1vdXNlUm90YXRlSGFuZGxlcjtcbiAgICBfbW91c2VQaXRjaDogTW91c2VQaXRjaEhhbmRsZXI7XG4gICAgX3BpdGNoV2l0aFJvdGF0ZTogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuYmVhcmluZ1NuYXBdIFRoZSB0aHJlc2hvbGQsIG1lYXN1cmVkIGluIGRlZ3JlZXMsIHRoYXQgZGV0ZXJtaW5lcyB3aGVuIHRoZSBtYXAnc1xuICAgICAqICAgYmVhcmluZyB3aWxsIHNuYXAgdG8gbm9ydGguXG4gICAgICogQHBhcmFtIHtib29sfSBbb3B0aW9ucy5waXRjaFdpdGhSb3RhdGU9dHJ1ZV0gQ29udHJvbCB0aGUgbWFwIHBpdGNoIGluIGFkZGl0aW9uIHRvIHRoZSBiZWFyaW5nXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiB7cGl0Y2hXaXRoUm90YXRlOiBib29sZWFufSwgbW91c2VSb3RhdGU6IE1vdXNlUm90YXRlSGFuZGxlciwgbW91c2VQaXRjaDogTW91c2VQaXRjaEhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy5fcGl0Y2hXaXRoUm90YXRlID0gb3B0aW9ucy5waXRjaFdpdGhSb3RhdGU7XG4gICAgICAgIHRoaXMuX21vdXNlUm90YXRlID0gbW91c2VSb3RhdGU7XG4gICAgICAgIHRoaXMuX21vdXNlUGl0Y2ggPSBtb3VzZVBpdGNoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgdGhlIFwiZHJhZyB0byByb3RhdGVcIiBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLmRyYWdSb3RhdGUuZW5hYmxlKCk7XG4gICAgICovXG4gICAgZW5hYmxlKCkge1xuICAgICAgICB0aGlzLl9tb3VzZVJvdGF0ZS5lbmFibGUoKTtcbiAgICAgICAgaWYgKHRoaXMuX3BpdGNoV2l0aFJvdGF0ZSkgdGhpcy5fbW91c2VQaXRjaC5lbmFibGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgXCJkcmFnIHRvIHJvdGF0ZVwiIGludGVyYWN0aW9uLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXAuZHJhZ1JvdGF0ZS5kaXNhYmxlKCk7XG4gICAgICovXG4gICAgZGlzYWJsZSgpIHtcbiAgICAgICAgdGhpcy5fbW91c2VSb3RhdGUuZGlzYWJsZSgpO1xuICAgICAgICB0aGlzLl9tb3VzZVBpdGNoLmRpc2FibGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIFwiZHJhZyB0byByb3RhdGVcIiBpbnRlcmFjdGlvbiBpcyBlbmFibGVkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgXCJkcmFnIHRvIHJvdGF0ZVwiIGludGVyYWN0aW9uIGlzIGVuYWJsZWQuXG4gICAgICovXG4gICAgaXNFbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbW91c2VSb3RhdGUuaXNFbmFibGVkKCkgJiYgKCF0aGlzLl9waXRjaFdpdGhSb3RhdGUgfHwgdGhpcy5fbW91c2VQaXRjaC5pc0VuYWJsZWQoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBcImRyYWcgdG8gcm90YXRlXCIgaW50ZXJhY3Rpb24gaXMgYWN0aXZlLCBpLmUuIGN1cnJlbnRseSBiZWluZyB1c2VkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgXCJkcmFnIHRvIHJvdGF0ZVwiIGludGVyYWN0aW9uIGlzIGFjdGl2ZS5cbiAgICAgKi9cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vdXNlUm90YXRlLmlzQWN0aXZlKCkgfHwgdGhpcy5fbW91c2VQaXRjaC5pc0FjdGl2ZSgpO1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB0eXBlIHtUb3VjaFpvb21IYW5kbGVyLCBUb3VjaFJvdGF0ZUhhbmRsZXJ9IGZyb20gJy4uL3RvdWNoX3pvb21fcm90YXRlJztcbmltcG9ydCB0eXBlIFRhcERyYWdab29tSGFuZGxlciBmcm9tICcuLi90YXBfZHJhZ196b29tJztcblxuLyoqXG4gKiBUaGUgYFRvdWNoWm9vbVJvdGF0ZUhhbmRsZXJgIGFsbG93cyB0aGUgdXNlciB0byB6b29tIGFuZCByb3RhdGUgdGhlIG1hcCBieVxuICogcGluY2hpbmcgb24gYSB0b3VjaHNjcmVlbi5cbiAqXG4gKiBUaGV5IGNhbiB6b29tIHdpdGggb25lIGZpbmdlciBieSBkb3VibGUgdGFwcGluZyBhbmQgZHJhZ2dpbmcuIE9uIHRoZSBzZWNvbmQgdGFwLFxuICogaG9sZCB0aGUgZmluZ2VyIGRvd24gYW5kIGRyYWcgdXAgb3IgZG93biB0byB6b29tIGluIG9yIG91dC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG91Y2hab29tUm90YXRlSGFuZGxlciB7XG5cbiAgICBfZWw6IEhUTUxFbGVtZW50O1xuICAgIF90b3VjaFpvb206IFRvdWNoWm9vbUhhbmRsZXI7XG4gICAgX3RvdWNoUm90YXRlOiBUb3VjaFJvdGF0ZUhhbmRsZXI7XG4gICAgX3RhcERyYWdab29tOiBUYXBEcmFnWm9vbUhhbmRsZXI7XG4gICAgX3JvdGF0aW9uRGlzYWJsZWQ6IGJvb2xlYW47XG4gICAgX2VuYWJsZWQ6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICovXG4gICAgY29uc3RydWN0b3IoZWw6IEhUTUxFbGVtZW50LCB0b3VjaFpvb206IFRvdWNoWm9vbUhhbmRsZXIsIHRvdWNoUm90YXRlOiBUb3VjaFJvdGF0ZUhhbmRsZXIsIHRhcERyYWdab29tOiBUYXBEcmFnWm9vbUhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy5fZWwgPSBlbDtcbiAgICAgICAgdGhpcy5fdG91Y2hab29tID0gdG91Y2hab29tO1xuICAgICAgICB0aGlzLl90b3VjaFJvdGF0ZSA9IHRvdWNoUm90YXRlO1xuICAgICAgICB0aGlzLl90YXBEcmFnWm9vbSA9IHRhcERyYWdab29tO1xuICAgICAgICB0aGlzLl9yb3RhdGlvbkRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2VuYWJsZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgdGhlIFwicGluY2ggdG8gcm90YXRlIGFuZCB6b29tXCIgaW50ZXJhY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIE9wdGlvbnMgb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5hcm91bmRdIElmIFwiY2VudGVyXCIgaXMgcGFzc2VkLCBtYXAgd2lsbCB6b29tIGFyb3VuZCB0aGUgY2VudGVyXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICAgbWFwLnRvdWNoWm9vbVJvdGF0ZS5lbmFibGUoKTtcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICAgbWFwLnRvdWNoWm9vbVJvdGF0ZS5lbmFibGUoeyBhcm91bmQ6ICdjZW50ZXInIH0pO1xuICAgICAqL1xuICAgIGVuYWJsZShvcHRpb25zOiA/e2Fyb3VuZD86ICdjZW50ZXInfSkge1xuICAgICAgICB0aGlzLl90b3VjaFpvb20uZW5hYmxlKG9wdGlvbnMpO1xuICAgICAgICBpZiAoIXRoaXMuX3JvdGF0aW9uRGlzYWJsZWQpIHRoaXMuX3RvdWNoUm90YXRlLmVuYWJsZShvcHRpb25zKTtcbiAgICAgICAgdGhpcy5fdGFwRHJhZ1pvb20uZW5hYmxlKCk7XG4gICAgICAgIHRoaXMuX2VsLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLXRvdWNoLXpvb20tcm90YXRlJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMgdGhlIFwicGluY2ggdG8gcm90YXRlIGFuZCB6b29tXCIgaW50ZXJhY3Rpb24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICAgbWFwLnRvdWNoWm9vbVJvdGF0ZS5kaXNhYmxlKCk7XG4gICAgICovXG4gICAgZGlzYWJsZSgpIHtcbiAgICAgICAgdGhpcy5fdG91Y2hab29tLmRpc2FibGUoKTtcbiAgICAgICAgdGhpcy5fdG91Y2hSb3RhdGUuZGlzYWJsZSgpO1xuICAgICAgICB0aGlzLl90YXBEcmFnWm9vbS5kaXNhYmxlKCk7XG4gICAgICAgIHRoaXMuX2VsLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLXRvdWNoLXpvb20tcm90YXRlJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBcInBpbmNoIHRvIHJvdGF0ZSBhbmQgem9vbVwiIGludGVyYWN0aW9uIGlzIGVuYWJsZWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBcInBpbmNoIHRvIHJvdGF0ZSBhbmQgem9vbVwiIGludGVyYWN0aW9uIGlzIGVuYWJsZWQuXG4gICAgICovXG4gICAgaXNFbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdG91Y2hab29tLmlzRW5hYmxlZCgpICYmXG4gICAgICAgICAgICAodGhpcy5fcm90YXRpb25EaXNhYmxlZCB8fCB0aGlzLl90b3VjaFJvdGF0ZS5pc0VuYWJsZWQoKSkgJiZcbiAgICAgICAgICAgIHRoaXMuX3RhcERyYWdab29tLmlzRW5hYmxlZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgaGFuZGxlciBpcyBlbmFibGVkIGFuZCBoYXMgZGV0ZWN0ZWQgdGhlIHN0YXJ0IG9mIGEgem9vbS9yb3RhdGUgZ2VzdHVyZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSAvL2VzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgKi9cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RvdWNoWm9vbS5pc0FjdGl2ZSgpIHx8IHRoaXMuX3RvdWNoUm90YXRlLmlzQWN0aXZlKCkgfHwgdGhpcy5fdGFwRHJhZ1pvb20uaXNBY3RpdmUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgXCJwaW5jaCB0byByb3RhdGVcIiBpbnRlcmFjdGlvbiwgbGVhdmluZyB0aGUgXCJwaW5jaCB0byB6b29tXCJcbiAgICAgKiBpbnRlcmFjdGlvbiBlbmFibGVkLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAgIG1hcC50b3VjaFpvb21Sb3RhdGUuZGlzYWJsZVJvdGF0aW9uKCk7XG4gICAgICovXG4gICAgZGlzYWJsZVJvdGF0aW9uKCkge1xuICAgICAgICB0aGlzLl9yb3RhdGlvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fdG91Y2hSb3RhdGUuZGlzYWJsZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgdGhlIFwicGluY2ggdG8gcm90YXRlXCIgaW50ZXJhY3Rpb24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqICAgbWFwLnRvdWNoWm9vbVJvdGF0ZS5lbmFibGUoKTtcbiAgICAgKiAgIG1hcC50b3VjaFpvb21Sb3RhdGUuZW5hYmxlUm90YXRpb24oKTtcbiAgICAgKi9cbiAgICBlbmFibGVSb3RhdGlvbigpIHtcbiAgICAgICAgdGhpcy5fcm90YXRpb25EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5fdG91Y2hab29tLmlzRW5hYmxlZCgpKSB0aGlzLl90b3VjaFJvdGF0ZS5lbmFibGUoKTtcbiAgICB9XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge0V2ZW50fSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IERPTSBmcm9tICcuLi91dGlsL2RvbSc7XG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi9tYXAnO1xuaW1wb3J0IEhhbmRsZXJJbmVydGlhIGZyb20gJy4vaGFuZGxlcl9pbmVydGlhJztcbmltcG9ydCB7TWFwRXZlbnRIYW5kbGVyLCBCbG9ja2FibGVNYXBFdmVudEhhbmRsZXJ9IGZyb20gJy4vaGFuZGxlci9tYXBfZXZlbnQnO1xuaW1wb3J0IEJveFpvb21IYW5kbGVyIGZyb20gJy4vaGFuZGxlci9ib3hfem9vbSc7XG5pbXBvcnQgVGFwWm9vbUhhbmRsZXIgZnJvbSAnLi9oYW5kbGVyL3RhcF96b29tJztcbmltcG9ydCB7TW91c2VQYW5IYW5kbGVyLCBNb3VzZVJvdGF0ZUhhbmRsZXIsIE1vdXNlUGl0Y2hIYW5kbGVyfSBmcm9tICcuL2hhbmRsZXIvbW91c2UnO1xuaW1wb3J0IFRvdWNoUGFuSGFuZGxlciBmcm9tICcuL2hhbmRsZXIvdG91Y2hfcGFuJztcbmltcG9ydCB7VG91Y2hab29tSGFuZGxlciwgVG91Y2hSb3RhdGVIYW5kbGVyLCBUb3VjaFBpdGNoSGFuZGxlcn0gZnJvbSAnLi9oYW5kbGVyL3RvdWNoX3pvb21fcm90YXRlJztcbmltcG9ydCBLZXlib2FyZEhhbmRsZXIgZnJvbSAnLi9oYW5kbGVyL2tleWJvYXJkJztcbmltcG9ydCBTY3JvbGxab29tSGFuZGxlciBmcm9tICcuL2hhbmRsZXIvc2Nyb2xsX3pvb20nO1xuaW1wb3J0IERvdWJsZUNsaWNrWm9vbUhhbmRsZXIgZnJvbSAnLi9oYW5kbGVyL3NoaW0vZGJsY2xpY2tfem9vbSc7XG5pbXBvcnQgQ2xpY2tab29tSGFuZGxlciBmcm9tICcuL2hhbmRsZXIvY2xpY2tfem9vbSc7XG5pbXBvcnQgVGFwRHJhZ1pvb21IYW5kbGVyIGZyb20gJy4vaGFuZGxlci90YXBfZHJhZ196b29tJztcbmltcG9ydCBEcmFnUGFuSGFuZGxlciBmcm9tICcuL2hhbmRsZXIvc2hpbS9kcmFnX3Bhbic7XG5pbXBvcnQgRHJhZ1JvdGF0ZUhhbmRsZXIgZnJvbSAnLi9oYW5kbGVyL3NoaW0vZHJhZ19yb3RhdGUnO1xuaW1wb3J0IFRvdWNoWm9vbVJvdGF0ZUhhbmRsZXIgZnJvbSAnLi9oYW5kbGVyL3NoaW0vdG91Y2hfem9vbV9yb3RhdGUnO1xuaW1wb3J0IHtiaW5kQWxsLCBleHRlbmR9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgd2luZG93IGZyb20gJy4uL3V0aWwvd2luZG93JztcbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuZXhwb3J0IHR5cGUgSW5wdXRFdmVudCA9IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50IHwgS2V5Ym9hcmRFdmVudCB8IFdoZWVsRXZlbnQ7XG5cbmNvbnN0IGlzTW92aW5nID0gcCA9PiBwLnpvb20gfHwgcC5kcmFnIHx8IHAucGl0Y2ggfHwgcC5yb3RhdGU7XG5cbmNsYXNzIFJlbmRlckZyYW1lRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG4gICAgdHlwZTogJ3JlbmRlckZyYW1lJztcbiAgICB0aW1lU3RhbXA6IG51bWJlcjtcbn1cblxuLy8gSGFuZGxlcnMgaW50ZXJwcmV0IGRvbSBldmVudHMgYW5kIHJldHVybiBjYW1lcmEgY2hhbmdlcyB0aGF0IHNob3VsZCBiZVxuLy8gYXBwbGllZCB0byB0aGUgbWFwIChgSGFuZGxlclJlc3VsdGBzKS4gVGhlIGNhbWVyYSBjaGFuZ2VzIGFyZSBhbGwgZGVsdGFzLlxuLy8gVGhlIGhhbmRsZXIgaXRzZWxmIHNob3VsZCBoYXZlIG5vIGtub3dsZWRnZSBvZiB0aGUgbWFwJ3MgY3VycmVudCBzdGF0ZS5cbi8vIFRoaXMgbWFrZXMgaXQgZWFzaWVyIHRvIG1lcmdlIG11bHRpcGxlIHJlc3VsdHMgYW5kIGtlZXBzIGhhbmRsZXJzIHNpbXBsZXIuXG4vLyBGb3IgZXhhbXBsZSwgaWYgdGhlcmUgaXMgYSBtb3VzZWRvd24gYW5kIG1vdXNlbW92ZSwgdGhlIG1vdXNlUGFuIGhhbmRsZXJcbi8vIHdvdWxkIHJldHVybiBhIGBwYW5EZWx0YWAgb24gdGhlIG1vdXNlbW92ZS5cbmV4cG9ydCBpbnRlcmZhY2UgSGFuZGxlciB7XG4gICAgZW5hYmxlKCk6IHZvaWQ7XG4gICAgZGlzYWJsZSgpOiB2b2lkO1xuICAgIGlzRW5hYmxlZCgpOiBib29sZWFuO1xuICAgIGlzQWN0aXZlKCk6IGJvb2xlYW47XG5cbiAgICAvLyBgcmVzZXRgIGNhbiBiZSBjYWxsZWQgYnkgdGhlIG1hbmFnZXIgYXQgYW55IHRpbWUgYW5kIG11c3QgcmVzZXQgZXZlcnl0aGluZyB0byBpdCdzIG9yaWdpbmFsIHN0YXRlXG4gICAgcmVzZXQoKTogdm9pZDtcblxuICAgIC8vIEhhbmRsZXJzIGNhbiBvcHRpb25hbGx5IGltcGxlbWVudCB0aGVzZSBtZXRob2RzLlxuICAgIC8vIFRoZXkgYXJlIGNhbGxlZCB3aXRoIGRvbSBldmVudHMgd2hlbmV2ZXIgdGhvc2UgZG9tIGV2ZW5zIGFyZSByZWNlaXZlZC5cbiAgICArdG91Y2hzdGFydD86IChlOiBUb3VjaEV2ZW50LCBwb2ludHM6IEFycmF5PFBvaW50PiwgbWFwVG91Y2hlczogQXJyYXk8VG91Y2g+KSA9PiBIYW5kbGVyUmVzdWx0IHwgdm9pZDtcbiAgICArdG91Y2htb3ZlPzogKGU6IFRvdWNoRXZlbnQsIHBvaW50czogQXJyYXk8UG9pbnQ+LCBtYXBUb3VjaGVzOiBBcnJheTxUb3VjaD4pID0+IEhhbmRsZXJSZXN1bHQgfCB2b2lkO1xuICAgICt0b3VjaGVuZD86IChlOiBUb3VjaEV2ZW50LCBwb2ludHM6IEFycmF5PFBvaW50PiwgbWFwVG91Y2hlczogQXJyYXk8VG91Y2g+KSA9PiBIYW5kbGVyUmVzdWx0IHwgdm9pZDtcbiAgICArdG91Y2hjYW5jZWw/OiAoZTogVG91Y2hFdmVudCwgcG9pbnRzOiBBcnJheTxQb2ludD4sIG1hcFRvdWNoZXM6IEFycmF5PFRvdWNoPikgPT4gSGFuZGxlclJlc3VsdCB8IHZvaWQ7XG4gICAgK21vdXNlZG93bj86IChlOiBNb3VzZUV2ZW50LCBwb2ludDogUG9pbnQpID0+IEhhbmRsZXJSZXN1bHQgfCB2b2lkO1xuICAgICttb3VzZW1vdmU/OiAoZTogTW91c2VFdmVudCwgcG9pbnQ6IFBvaW50KSA9PiBIYW5kbGVyUmVzdWx0IHwgdm9pZDtcbiAgICArbW91c2V1cD86IChlOiBNb3VzZUV2ZW50LCBwb2ludDogUG9pbnQpID0+IEhhbmRsZXJSZXN1bHQgfCB2b2lkO1xuICAgICtkYmxjbGljaz86IChlOiBNb3VzZUV2ZW50LCBwb2ludDogUG9pbnQpID0+IEhhbmRsZXJSZXN1bHQgfCB2b2lkO1xuICAgICt3aGVlbD86IChlOiBXaGVlbEV2ZW50LCBwb2ludDogUG9pbnQpID0+IEhhbmRsZXJSZXN1bHQgfCB2b2lkO1xuICAgICtrZXlkb3duPzogKGU6IEtleWJvYXJkRXZlbnQpID0+IEhhbmRsZXJSZXN1bHQgfCB2b2lkO1xuICAgICtrZXl1cD86IChlOiBLZXlib2FyZEV2ZW50KSA9PiBIYW5kbGVyUmVzdWx0IHwgdm9pZDtcblxuICAgIC8vIGByZW5kZXJGcmFtZWAgaXMgdGhlIG9ubHkgbm9uLWRvbSBldmVudC4gSXQgaXMgY2FsbGVkIGR1cmluZyByZW5kZXJcbiAgICAvLyBmcmFtZXMgYW5kIGNhbiBiZSB1c2VkIHRvIHNtb290aCBjYW1lcmEgY2hhbmdlcyAoc2VlIHNjcm9sbCBoYW5kbGVyKS5cbiAgICArcmVuZGVyRnJhbWU/OiAoKSA9PiBIYW5kbGVyUmVzdWx0IHwgdm9pZDtcbn1cblxuLy8gQWxsIGhhbmRsZXIgbWV0aG9kcyB0aGF0IGFyZSBjYWxsZWQgd2l0aCBldmVudHMgY2FuIG9wdGlvbmFsbHkgcmV0dXJuIGEgYEhhbmRsZXJSZXN1bHRgLlxuZXhwb3J0IHR5cGUgSGFuZGxlclJlc3VsdCA9IHt8XG4gICAgcGFuRGVsdGE/OiBQb2ludCxcbiAgICB6b29tRGVsdGE/OiBudW1iZXIsXG4gICAgYmVhcmluZ0RlbHRhPzogbnVtYmVyLFxuICAgIHBpdGNoRGVsdGE/OiBudW1iZXIsXG4gICAgLy8gdGhlIHBvaW50IHRvIG5vdCBtb3ZlIHdoZW4gY2hhbmdpbmcgdGhlIGNhbWVyYVxuICAgIGFyb3VuZD86IFBvaW50IHwgbnVsbCxcbiAgICAvLyBzYW1lIGFzIGFib3ZlLCBleGNlcHQgZm9yIHBpbmNoIGFjdGlvbnMsIHdoaWNoIGFyZSBnaXZlbiBoaWdoZXIgcHJpb3JpdHlcbiAgICBwaW5jaEFyb3VuZD86IFBvaW50IHwgbnVsbCxcbiAgICAvLyBBIG1ldGhvZCB0aGF0IGNhbiBmaXJlIGEgb25lLW9mZiBlYXNpbmcgYnkgZGlyZWN0bHkgY2hhbmdpbmcgdGhlIG1hcCdzIGNhbWVyYS5cbiAgICBjYW1lcmFBbmltYXRpb24/OiAobWFwOiBNYXApID0+IGFueTtcblxuICAgIC8vIFRoZSBsYXN0IHRocmVlIHByb3BlcnRpZXMgYXJlIG5lZWRlZCBieSBvbmx5IG9uZSBoYW5kbGVyOiBzY3JvbGx6b29tLlxuICAgIC8vIFRoZSBET00gZXZlbnQgdG8gYmUgdXNlZCBhcyB0aGUgYG9yaWdpbmFsRXZlbnRgIG9uIGFueSBjYW1lcmEgY2hhbmdlIGV2ZW50cy5cbiAgICBvcmlnaW5hbEV2ZW50PzogYW55LFxuICAgIC8vIE1ha2VzIHRoZSBtYW5hZ2VyIHRyaWdnZXIgYSBmcmFtZSwgYWxsb3dpbmcgdGhlIGhhbmRsZXIgdG8gcmV0dXJuIG11bHRpcGxlIHJlc3VsdHMgb3ZlciB0aW1lIChzZWUgc2Nyb2xsem9vbSkuXG4gICAgbmVlZHNSZW5kZXJGcmFtZT86IGJvb2xlYW4sXG4gICAgLy8gVGhlIGNhbWVyYSBjaGFuZ2VzIHdvbid0IGdldCByZWNvcmRlZCBmb3IgaW5lcnRpYWwgem9vbWluZy5cbiAgICBub0luZXJ0aWE/OiBib29sZWFuXG58fTtcblxuZnVuY3Rpb24gaGFzQ2hhbmdlKHJlc3VsdDogSGFuZGxlclJlc3VsdCkge1xuICAgIHJldHVybiAocmVzdWx0LnBhbkRlbHRhICYmIHJlc3VsdC5wYW5EZWx0YS5tYWcoKSkgfHwgcmVzdWx0Lnpvb21EZWx0YSB8fCByZXN1bHQuYmVhcmluZ0RlbHRhIHx8IHJlc3VsdC5waXRjaERlbHRhO1xufVxuXG5jbGFzcyBIYW5kbGVyTWFuYWdlciB7XG4gICAgX21hcDogTWFwO1xuICAgIF9lbDogSFRNTEVsZW1lbnQ7XG4gICAgX2hhbmRsZXJzOiBBcnJheTx7IGhhbmRsZXJOYW1lOiBzdHJpbmcsIGhhbmRsZXI6IEhhbmRsZXIsIGFsbG93ZWQ6IGFueSB9PjtcbiAgICBfZXZlbnRzSW5Qcm9ncmVzczogT2JqZWN0O1xuICAgIF9mcmFtZUlkOiBudW1iZXI7XG4gICAgX2luZXJ0aWE6IEhhbmRsZXJJbmVydGlhO1xuICAgIF9iZWFyaW5nU25hcDogbnVtYmVyO1xuICAgIF9oYW5kbGVyc0J5SWQ6IHsgW3N0cmluZ106IEhhbmRsZXIgfTtcbiAgICBfdXBkYXRpbmdDYW1lcmE6IGJvb2xlYW47XG4gICAgX2NoYW5nZXM6IEFycmF5PFtIYW5kbGVyUmVzdWx0LCBPYmplY3QsIGFueV0+O1xuICAgIF9wcmV2aW91c0FjdGl2ZUhhbmRsZXJzOiB7IFtzdHJpbmddOiBIYW5kbGVyIH07XG4gICAgX2JlYXJpbmdDaGFuZ2VkOiBib29sZWFuO1xuICAgIF9saXN0ZW5lcnM6IEFycmF5PFtIVE1MRWxlbWVudCwgc3RyaW5nLCB2b2lkIHwge3Bhc3NpdmU/OiBib29sZWFuLCBjYXB0dXJlPzogYm9vbGVhbn1dPjtcblxuICAgIGNvbnN0cnVjdG9yKG1hcDogTWFwLCBvcHRpb25zOiB7IGludGVyYWN0aXZlOiBib29sZWFuLCBwaXRjaFdpdGhSb3RhdGU6IGJvb2xlYW4sIGNsaWNrVG9sZXJhbmNlOiBudW1iZXIsIGJlYXJpbmdTbmFwOiBudW1iZXJ9KSB7XG4gICAgICAgIHRoaXMuX21hcCA9IG1hcDtcbiAgICAgICAgdGhpcy5fZWwgPSB0aGlzLl9tYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCk7XG4gICAgICAgIHRoaXMuX2hhbmRsZXJzID0gW107XG4gICAgICAgIHRoaXMuX2hhbmRsZXJzQnlJZCA9IHt9O1xuICAgICAgICB0aGlzLl9jaGFuZ2VzID0gW107XG5cbiAgICAgICAgdGhpcy5faW5lcnRpYSA9IG5ldyBIYW5kbGVySW5lcnRpYShtYXApO1xuICAgICAgICB0aGlzLl9iZWFyaW5nU25hcCA9IG9wdGlvbnMuYmVhcmluZ1NuYXA7XG4gICAgICAgIHRoaXMuX3ByZXZpb3VzQWN0aXZlSGFuZGxlcnMgPSB7fTtcblxuICAgICAgICAvLyBUcmFjayB3aGV0aGVyIG1hcCBpcyBjdXJyZW50bHkgbW92aW5nLCB0byBjb21wdXRlIHN0YXJ0L21vdmUvZW5kIGV2ZW50c1xuICAgICAgICB0aGlzLl9ldmVudHNJblByb2dyZXNzID0ge307XG5cbiAgICAgICAgdGhpcy5fYWRkRGVmYXVsdEhhbmRsZXJzKG9wdGlvbnMpO1xuXG4gICAgICAgIGJpbmRBbGwoWydoYW5kbGVFdmVudCcsICdoYW5kbGVXaW5kb3dFdmVudCddLCB0aGlzKTtcblxuICAgICAgICBjb25zdCBlbCA9IHRoaXMuX2VsO1xuXG4gICAgICAgIHRoaXMuX2xpc3RlbmVycyA9IFtcbiAgICAgICAgICAgIC8vIEJpbmQgdG91Y2hzdGFydCBhbmQgdG91Y2htb3ZlIHdpdGggcGFzc2l2ZTogZmFsc2UgYmVjYXVzZSwgZXZlbiB0aG91Z2hcbiAgICAgICAgICAgIC8vIHRoZXkgb25seSBmaXJlIGEgbWFwIGV2ZW50cyBhbmQgdGhlcmVmb3JlIGNvdWxkIHRoZW9yZXRpY2FsbHkgYmVcbiAgICAgICAgICAgIC8vIHBhc3NpdmUsIGJpbmRpbmcgd2l0aCBwYXNzaXZlOiB0cnVlIGNhdXNlcyBpT1Mgbm90IHRvIHJlc3BlY3RcbiAgICAgICAgICAgIC8vIGUucHJldmVudERlZmF1bHQoKSBpbiBfb3RoZXJfIGhhbmRsZXJzLCBldmVuIGlmIHRoZXkgYXJlIG5vbi1wYXNzaXZlXG4gICAgICAgICAgICAvLyAoc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODQyNTEpXG4gICAgICAgICAgICBbZWwsICd0b3VjaHN0YXJ0Jywge3Bhc3NpdmU6IGZhbHNlfV0sXG4gICAgICAgICAgICBbZWwsICd0b3VjaG1vdmUnLCB7cGFzc2l2ZTogZmFsc2V9XSxcbiAgICAgICAgICAgIFtlbCwgJ3RvdWNoZW5kJywgdW5kZWZpbmVkXSxcbiAgICAgICAgICAgIFtlbCwgJ3RvdWNoY2FuY2VsJywgdW5kZWZpbmVkXSxcblxuICAgICAgICAgICAgW2VsLCAnbW91c2Vkb3duJywgdW5kZWZpbmVkXSxcbiAgICAgICAgICAgIFtlbCwgJ21vdXNlbW92ZScsIHVuZGVmaW5lZF0sXG4gICAgICAgICAgICBbZWwsICdtb3VzZXVwJywgdW5kZWZpbmVkXSxcblxuICAgICAgICAgICAgLy8gQmluZCB3aW5kb3ctbGV2ZWwgZXZlbnQgbGlzdGVuZXJzIGZvciBtb3ZlIGFuZCB1cC9lbmQgZXZlbnRzLiBJbiB0aGUgYWJzZW5jZSBvZlxuICAgICAgICAgICAgLy8gdGhlIHBvaW50ZXIgY2FwdHVyZSBBUEksIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYWxsIG5lY2Vzc2FyeSBwbGF0Zm9ybXMsXG4gICAgICAgICAgICAvLyB3aW5kb3ctbGV2ZWwgZXZlbnQgbGlzdGVuZXJzIGdpdmUgdXMgdGhlIGJlc3Qgc2hvdCBhdCBjYXB0dXJpbmcgZXZlbnRzIHRoYXRcbiAgICAgICAgICAgIC8vIGZhbGwgb3V0c2lkZSB0aGUgbWFwIGNhbnZhcyBlbGVtZW50LiBVc2UgYHtjYXB0dXJlOiB0cnVlfWAgZm9yIHRoZSBtb3ZlIGV2ZW50XG4gICAgICAgICAgICAvLyB0byBwcmV2ZW50IG1hcCBtb3ZlIGV2ZW50cyBmcm9tIGJlaW5nIGZpcmVkIGR1cmluZyBhIGRyYWcuXG4gICAgICAgICAgICBbd2luZG93LmRvY3VtZW50LCAnbW91c2Vtb3ZlJywge2NhcHR1cmU6IHRydWV9XSxcbiAgICAgICAgICAgIFt3aW5kb3cuZG9jdW1lbnQsICdtb3VzZXVwJywgdW5kZWZpbmVkXSxcblxuICAgICAgICAgICAgW2VsLCAnbW91c2VvdmVyJywgdW5kZWZpbmVkXSxcbiAgICAgICAgICAgIFtlbCwgJ21vdXNlb3V0JywgdW5kZWZpbmVkXSxcbiAgICAgICAgICAgIFtlbCwgJ2RibGNsaWNrJywgdW5kZWZpbmVkXSxcbiAgICAgICAgICAgIFtlbCwgJ2NsaWNrJywgdW5kZWZpbmVkXSxcblxuICAgICAgICAgICAgW2VsLCAna2V5ZG93bicsIHtjYXB0dXJlOiBmYWxzZX1dLFxuICAgICAgICAgICAgW2VsLCAna2V5dXAnLCB1bmRlZmluZWRdLFxuXG4gICAgICAgICAgICBbZWwsICd3aGVlbCcsIHtwYXNzaXZlOiBmYWxzZX1dLFxuICAgICAgICAgICAgW2VsLCAnY29udGV4dG1lbnUnLCB1bmRlZmluZWRdLFxuXG4gICAgICAgICAgICBbd2luZG93LCAnYmx1cicsIHVuZGVmaW5lZF1cbiAgICAgICAgXTtcblxuICAgICAgICBmb3IgKGNvbnN0IFt0YXJnZXQsIHR5cGUsIGxpc3RlbmVyT3B0aW9uc10gb2YgdGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBET00uYWRkRXZlbnRMaXN0ZW5lcih0YXJnZXQsIHR5cGUsIHRhcmdldCA9PT0gd2luZG93LmRvY3VtZW50ID8gdGhpcy5oYW5kbGVXaW5kb3dFdmVudCA6IHRoaXMuaGFuZGxlRXZlbnQsIGxpc3RlbmVyT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBmb3IgKGNvbnN0IFt0YXJnZXQsIHR5cGUsIGxpc3RlbmVyT3B0aW9uc10gb2YgdGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBET00ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0YXJnZXQsIHR5cGUsIHRhcmdldCA9PT0gd2luZG93LmRvY3VtZW50ID8gdGhpcy5oYW5kbGVXaW5kb3dFdmVudCA6IHRoaXMuaGFuZGxlRXZlbnQsIGxpc3RlbmVyT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfYWRkRGVmYXVsdEhhbmRsZXJzKG9wdGlvbnM6IHsgaW50ZXJhY3RpdmU6IGJvb2xlYW4sIHBpdGNoV2l0aFJvdGF0ZTogYm9vbGVhbiwgY2xpY2tUb2xlcmFuY2U6IG51bWJlciB9KSB7XG4gICAgICAgIGNvbnN0IG1hcCA9IHRoaXMuX21hcDtcbiAgICAgICAgY29uc3QgZWwgPSBtYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCk7XG4gICAgICAgIHRoaXMuX2FkZCgnbWFwRXZlbnQnLCBuZXcgTWFwRXZlbnRIYW5kbGVyKG1hcCwgb3B0aW9ucykpO1xuXG4gICAgICAgIGNvbnN0IGJveFpvb20gPSBtYXAuYm94Wm9vbSA9IG5ldyBCb3hab29tSGFuZGxlcihtYXAsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLl9hZGQoJ2JveFpvb20nLCBib3hab29tKTtcblxuICAgICAgICBjb25zdCB0YXBab29tID0gbmV3IFRhcFpvb21IYW5kbGVyKCk7XG4gICAgICAgIGNvbnN0IGNsaWNrWm9vbSA9IG5ldyBDbGlja1pvb21IYW5kbGVyKCk7XG4gICAgICAgIG1hcC5kb3VibGVDbGlja1pvb20gPSBuZXcgRG91YmxlQ2xpY2tab29tSGFuZGxlcihjbGlja1pvb20sIHRhcFpvb20pO1xuICAgICAgICB0aGlzLl9hZGQoJ3RhcFpvb20nLCB0YXBab29tKTtcbiAgICAgICAgdGhpcy5fYWRkKCdjbGlja1pvb20nLCBjbGlja1pvb20pO1xuXG4gICAgICAgIGNvbnN0IHRhcERyYWdab29tID0gbmV3IFRhcERyYWdab29tSGFuZGxlcigpO1xuICAgICAgICB0aGlzLl9hZGQoJ3RhcERyYWdab29tJywgdGFwRHJhZ1pvb20pO1xuXG4gICAgICAgIGNvbnN0IHRvdWNoUGl0Y2ggPSBtYXAudG91Y2hQaXRjaCA9IG5ldyBUb3VjaFBpdGNoSGFuZGxlcigpO1xuICAgICAgICB0aGlzLl9hZGQoJ3RvdWNoUGl0Y2gnLCB0b3VjaFBpdGNoKTtcblxuICAgICAgICBjb25zdCBtb3VzZVJvdGF0ZSA9IG5ldyBNb3VzZVJvdGF0ZUhhbmRsZXIob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IG1vdXNlUGl0Y2ggPSBuZXcgTW91c2VQaXRjaEhhbmRsZXIob3B0aW9ucyk7XG4gICAgICAgIG1hcC5kcmFnUm90YXRlID0gbmV3IERyYWdSb3RhdGVIYW5kbGVyKG9wdGlvbnMsIG1vdXNlUm90YXRlLCBtb3VzZVBpdGNoKTtcbiAgICAgICAgdGhpcy5fYWRkKCdtb3VzZVJvdGF0ZScsIG1vdXNlUm90YXRlLCBbJ21vdXNlUGl0Y2gnXSk7XG4gICAgICAgIHRoaXMuX2FkZCgnbW91c2VQaXRjaCcsIG1vdXNlUGl0Y2gsIFsnbW91c2VSb3RhdGUnXSk7XG5cbiAgICAgICAgY29uc3QgbW91c2VQYW4gPSBuZXcgTW91c2VQYW5IYW5kbGVyKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCB0b3VjaFBhbiA9IG5ldyBUb3VjaFBhbkhhbmRsZXIob3B0aW9ucyk7XG4gICAgICAgIG1hcC5kcmFnUGFuID0gbmV3IERyYWdQYW5IYW5kbGVyKGVsLCBtb3VzZVBhbiwgdG91Y2hQYW4pO1xuICAgICAgICB0aGlzLl9hZGQoJ21vdXNlUGFuJywgbW91c2VQYW4pO1xuICAgICAgICB0aGlzLl9hZGQoJ3RvdWNoUGFuJywgdG91Y2hQYW4sIFsndG91Y2hab29tJywgJ3RvdWNoUm90YXRlJ10pO1xuXG4gICAgICAgIGNvbnN0IHRvdWNoUm90YXRlID0gbmV3IFRvdWNoUm90YXRlSGFuZGxlcigpO1xuICAgICAgICBjb25zdCB0b3VjaFpvb20gPSBuZXcgVG91Y2hab29tSGFuZGxlcigpO1xuICAgICAgICBtYXAudG91Y2hab29tUm90YXRlID0gbmV3IFRvdWNoWm9vbVJvdGF0ZUhhbmRsZXIoZWwsIHRvdWNoWm9vbSwgdG91Y2hSb3RhdGUsIHRhcERyYWdab29tKTtcbiAgICAgICAgdGhpcy5fYWRkKCd0b3VjaFJvdGF0ZScsIHRvdWNoUm90YXRlLCBbJ3RvdWNoUGFuJywgJ3RvdWNoWm9vbSddKTtcbiAgICAgICAgdGhpcy5fYWRkKCd0b3VjaFpvb20nLCB0b3VjaFpvb20sIFsndG91Y2hQYW4nLCAndG91Y2hSb3RhdGUnXSk7XG5cbiAgICAgICAgY29uc3Qgc2Nyb2xsWm9vbSA9IG1hcC5zY3JvbGxab29tID0gbmV3IFNjcm9sbFpvb21IYW5kbGVyKG1hcCwgdGhpcyk7XG4gICAgICAgIHRoaXMuX2FkZCgnc2Nyb2xsWm9vbScsIHNjcm9sbFpvb20sIFsnbW91c2VQYW4nXSk7XG5cbiAgICAgICAgY29uc3Qga2V5Ym9hcmQgPSBtYXAua2V5Ym9hcmQgPSBuZXcgS2V5Ym9hcmRIYW5kbGVyKCk7XG4gICAgICAgIHRoaXMuX2FkZCgna2V5Ym9hcmQnLCBrZXlib2FyZCk7XG5cbiAgICAgICAgdGhpcy5fYWRkKCdibG9ja2FibGVNYXBFdmVudCcsIG5ldyBCbG9ja2FibGVNYXBFdmVudEhhbmRsZXIobWFwKSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBuYW1lIG9mIFsnYm94Wm9vbScsICdkb3VibGVDbGlja1pvb20nLCAndGFwRHJhZ1pvb20nLCAndG91Y2hQaXRjaCcsICdkcmFnUm90YXRlJywgJ2RyYWdQYW4nLCAndG91Y2hab29tUm90YXRlJywgJ3Njcm9sbFpvb20nLCAna2V5Ym9hcmQnXSkge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuaW50ZXJhY3RpdmUgJiYgKG9wdGlvbnM6IGFueSlbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAobWFwOiBhbnkpW25hbWVdLmVuYWJsZSgob3B0aW9uczogYW55KVtuYW1lXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfYWRkKGhhbmRsZXJOYW1lOiBzdHJpbmcsIGhhbmRsZXI6IEhhbmRsZXIsIGFsbG93ZWQ/OiBBcnJheTxzdHJpbmc+KSB7XG4gICAgICAgIHRoaXMuX2hhbmRsZXJzLnB1c2goe2hhbmRsZXJOYW1lLCBoYW5kbGVyLCBhbGxvd2VkfSk7XG4gICAgICAgIHRoaXMuX2hhbmRsZXJzQnlJZFtoYW5kbGVyTmFtZV0gPSBoYW5kbGVyO1xuICAgIH1cblxuICAgIHN0b3AoKSB7XG4gICAgICAgIC8vIGRvIG5vdGhpbmcgaWYgdGhpcyBtZXRob2Qgd2FzIHRyaWdnZXJlZCBieSBhIGdlc3R1cmUgdXBkYXRlXG4gICAgICAgIGlmICh0aGlzLl91cGRhdGluZ0NhbWVyYSkgcmV0dXJuO1xuXG4gICAgICAgIGZvciAoY29uc3Qge2hhbmRsZXJ9IG9mIHRoaXMuX2hhbmRsZXJzKSB7XG4gICAgICAgICAgICBoYW5kbGVyLnJlc2V0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faW5lcnRpYS5jbGVhcigpO1xuICAgICAgICB0aGlzLl9maXJlRXZlbnRzKHt9LCB7fSk7XG4gICAgICAgIHRoaXMuX2NoYW5nZXMgPSBbXTtcbiAgICB9XG5cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgICAgZm9yIChjb25zdCB7aGFuZGxlcn0gb2YgdGhpcy5faGFuZGxlcnMpIHtcbiAgICAgICAgICAgIGlmIChoYW5kbGVyLmlzQWN0aXZlKCkpIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpc1pvb21pbmcoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2V2ZW50c0luUHJvZ3Jlc3Muem9vbSB8fCB0aGlzLl9tYXAuc2Nyb2xsWm9vbS5pc1pvb21pbmcoKTtcbiAgICB9XG4gICAgaXNSb3RhdGluZygpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZXZlbnRzSW5Qcm9ncmVzcy5yb3RhdGU7XG4gICAgfVxuXG4gICAgaXNNb3ZpbmcoKSB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKGlzTW92aW5nKHRoaXMuX2V2ZW50c0luUHJvZ3Jlc3MpKSB8fCB0aGlzLmlzWm9vbWluZygpO1xuICAgIH1cblxuICAgIF9ibG9ja2VkQnlBY3RpdmUoYWN0aXZlSGFuZGxlcnM6IHsgW3N0cmluZ106IEhhbmRsZXIgfSwgYWxsb3dlZDogQXJyYXk8c3RyaW5nPiwgbXlOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgZm9yIChjb25zdCBuYW1lIGluIGFjdGl2ZUhhbmRsZXJzKSB7XG4gICAgICAgICAgICBpZiAobmFtZSA9PT0gbXlOYW1lKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmICghYWxsb3dlZCB8fCBhbGxvd2VkLmluZGV4T2YobmFtZSkgPCAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGhhbmRsZVdpbmRvd0V2ZW50KGU6IElucHV0RXZlbnQpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVFdmVudChlLCBgJHtlLnR5cGV9V2luZG93YCk7XG4gICAgfVxuXG4gICAgX2dldE1hcFRvdWNoZXModG91Y2hlczogVG91Y2hMaXN0KSB7XG4gICAgICAgIGNvbnN0IG1hcFRvdWNoZXMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCB0IG9mIHRvdWNoZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9ICgodC50YXJnZXQ6IGFueSk6IE5vZGUpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2VsLmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICBtYXBUb3VjaGVzLnB1c2godCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgobWFwVG91Y2hlczogYW55KTogVG91Y2hMaXN0KTtcbiAgICB9XG5cbiAgICBoYW5kbGVFdmVudChlOiBJbnB1dEV2ZW50IHwgUmVuZGVyRnJhbWVFdmVudCwgZXZlbnROYW1lPzogc3RyaW5nKSB7XG5cbiAgICAgICAgaWYgKGUudHlwZSA9PT0gJ2JsdXInKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3AoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3VwZGF0aW5nQ2FtZXJhID0gdHJ1ZTtcbiAgICAgICAgYXNzZXJ0KGUudGltZVN0YW1wICE9PSB1bmRlZmluZWQpO1xuXG4gICAgICAgIGNvbnN0IGlucHV0RXZlbnQgPSBlLnR5cGUgPT09ICdyZW5kZXJGcmFtZScgPyB1bmRlZmluZWQgOiAoKGU6IGFueSk6IElucHV0RXZlbnQpO1xuXG4gICAgICAgIC8qXG4gICAgICAgICAqIFdlIGRvbid0IGNhbGwgZS5wcmV2ZW50RGVmYXVsdCgpIGZvciBhbnkgZXZlbnRzIGJ5IGRlZmF1bHQuXG4gICAgICAgICAqIEhhbmRsZXJzIGFyZSByZXNwb25zaWJsZSBmb3IgY2FsbGluZyBpdCB3aGVyZSBuZWNlc3NhcnkuXG4gICAgICAgICAqL1xuXG4gICAgICAgIGNvbnN0IG1lcmdlZEhhbmRsZXJSZXN1bHQ6IEhhbmRsZXJSZXN1bHQgPSB7bmVlZHNSZW5kZXJGcmFtZTogZmFsc2V9O1xuICAgICAgICBjb25zdCBldmVudHNJblByb2dyZXNzID0ge307XG4gICAgICAgIGNvbnN0IGFjdGl2ZUhhbmRsZXJzID0ge307XG5cbiAgICAgICAgY29uc3QgbWFwVG91Y2hlcyA9IGUudG91Y2hlcyA/IHRoaXMuX2dldE1hcFRvdWNoZXMoKChlOiBhbnkpOiBUb3VjaEV2ZW50KS50b3VjaGVzKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgcG9pbnRzID0gbWFwVG91Y2hlcyA/IERPTS50b3VjaFBvcyh0aGlzLl9lbCwgbWFwVG91Y2hlcykgOiBET00ubW91c2VQb3ModGhpcy5fZWwsICgoZTogYW55KTogTW91c2VFdmVudCkpO1xuXG4gICAgICAgIGZvciAoY29uc3Qge2hhbmRsZXJOYW1lLCBoYW5kbGVyLCBhbGxvd2VkfSBvZiB0aGlzLl9oYW5kbGVycykge1xuICAgICAgICAgICAgaWYgKCFoYW5kbGVyLmlzRW5hYmxlZCgpKSBjb250aW51ZTtcblxuICAgICAgICAgICAgbGV0IGRhdGE6IEhhbmRsZXJSZXN1bHQgfCB2b2lkO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2Jsb2NrZWRCeUFjdGl2ZShhY3RpdmVIYW5kbGVycywgYWxsb3dlZCwgaGFuZGxlck5hbWUpKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlci5yZXNldCgpO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICgoaGFuZGxlcjogYW55KVtldmVudE5hbWUgfHwgZS50eXBlXSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhID0gKGhhbmRsZXI6IGFueSlbZXZlbnROYW1lIHx8IGUudHlwZV0oZSwgcG9pbnRzLCBtYXBUb3VjaGVzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXJnZUhhbmRsZXJSZXN1bHQobWVyZ2VkSGFuZGxlclJlc3VsdCwgZXZlbnRzSW5Qcm9ncmVzcywgZGF0YSwgaGFuZGxlck5hbWUsIGlucHV0RXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLm5lZWRzUmVuZGVyRnJhbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJSZW5kZXJGcmFtZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YSB8fCBoYW5kbGVyLmlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgICAgICBhY3RpdmVIYW5kbGVyc1toYW5kbGVyTmFtZV0gPSBoYW5kbGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVhY3RpdmF0ZWRIYW5kbGVycyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gdGhpcy5fcHJldmlvdXNBY3RpdmVIYW5kbGVycykge1xuICAgICAgICAgICAgaWYgKCFhY3RpdmVIYW5kbGVyc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIGRlYWN0aXZhdGVkSGFuZGxlcnNbbmFtZV0gPSBpbnB1dEV2ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3ByZXZpb3VzQWN0aXZlSGFuZGxlcnMgPSBhY3RpdmVIYW5kbGVycztcblxuICAgICAgICBpZiAoT2JqZWN0LmtleXMoZGVhY3RpdmF0ZWRIYW5kbGVycykubGVuZ3RoIHx8IGhhc0NoYW5nZShtZXJnZWRIYW5kbGVyUmVzdWx0KSkge1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlcy5wdXNoKFttZXJnZWRIYW5kbGVyUmVzdWx0LCBldmVudHNJblByb2dyZXNzLCBkZWFjdGl2YXRlZEhhbmRsZXJzXSk7XG4gICAgICAgICAgICB0aGlzLl90cmlnZ2VyUmVuZGVyRnJhbWUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhhY3RpdmVIYW5kbGVycykubGVuZ3RoIHx8IGhhc0NoYW5nZShtZXJnZWRIYW5kbGVyUmVzdWx0KSkge1xuICAgICAgICAgICAgdGhpcy5fbWFwLl9zdG9wKHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdXBkYXRpbmdDYW1lcmEgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCB7Y2FtZXJhQW5pbWF0aW9ufSA9IG1lcmdlZEhhbmRsZXJSZXN1bHQ7XG4gICAgICAgIGlmIChjYW1lcmFBbmltYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2luZXJ0aWEuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuX2ZpcmVFdmVudHMoe30sIHt9KTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZXMgPSBbXTtcbiAgICAgICAgICAgIGNhbWVyYUFuaW1hdGlvbih0aGlzLl9tYXApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbWVyZ2VIYW5kbGVyUmVzdWx0KG1lcmdlZEhhbmRsZXJSZXN1bHQ6IEhhbmRsZXJSZXN1bHQsIGV2ZW50c0luUHJvZ3Jlc3M6IE9iamVjdCwgaGFuZGxlclJlc3VsdDogSGFuZGxlclJlc3VsdCwgbmFtZTogc3RyaW5nLCBlPzogSW5wdXRFdmVudCkge1xuICAgICAgICBpZiAoIWhhbmRsZXJSZXN1bHQpIHJldHVybjtcblxuICAgICAgICBleHRlbmQobWVyZ2VkSGFuZGxlclJlc3VsdCwgaGFuZGxlclJlc3VsdCk7XG5cbiAgICAgICAgY29uc3QgZXZlbnREYXRhID0ge2hhbmRsZXJOYW1lOiBuYW1lLCBvcmlnaW5hbEV2ZW50OiBoYW5kbGVyUmVzdWx0Lm9yaWdpbmFsRXZlbnQgfHwgZX07XG5cbiAgICAgICAgLy8gdHJhY2sgd2hpY2ggaGFuZGxlciBjaGFuZ2VkIHdoaWNoIGNhbWVyYSBwcm9wZXJ0eVxuICAgICAgICBpZiAoaGFuZGxlclJlc3VsdC56b29tRGVsdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZXZlbnRzSW5Qcm9ncmVzcy56b29tID0gZXZlbnREYXRhO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYW5kbGVyUmVzdWx0LnBhbkRlbHRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGV2ZW50c0luUHJvZ3Jlc3MuZHJhZyA9IGV2ZW50RGF0YTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFuZGxlclJlc3VsdC5waXRjaERlbHRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGV2ZW50c0luUHJvZ3Jlc3MucGl0Y2ggPSBldmVudERhdGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhbmRsZXJSZXN1bHQuYmVhcmluZ0RlbHRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGV2ZW50c0luUHJvZ3Jlc3Mucm90YXRlID0gZXZlbnREYXRhO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBfYXBwbHlDaGFuZ2VzKCkge1xuICAgICAgICBjb25zdCBjb21iaW5lZCA9IHt9O1xuICAgICAgICBjb25zdCBjb21iaW5lZEV2ZW50c0luUHJvZ3Jlc3MgPSB7fTtcbiAgICAgICAgY29uc3QgY29tYmluZWREZWFjdGl2YXRlZEhhbmRsZXJzID0ge307XG5cbiAgICAgICAgZm9yIChjb25zdCBbY2hhbmdlLCBldmVudHNJblByb2dyZXNzLCBkZWFjdGl2YXRlZEhhbmRsZXJzXSBvZiB0aGlzLl9jaGFuZ2VzKSB7XG5cbiAgICAgICAgICAgIGlmIChjaGFuZ2UucGFuRGVsdGEpIGNvbWJpbmVkLnBhbkRlbHRhID0gKGNvbWJpbmVkLnBhbkRlbHRhIHx8IG5ldyBQb2ludCgwLCAwKSkuX2FkZChjaGFuZ2UucGFuRGVsdGEpO1xuICAgICAgICAgICAgaWYgKGNoYW5nZS56b29tRGVsdGEpIGNvbWJpbmVkLnpvb21EZWx0YSA9IChjb21iaW5lZC56b29tRGVsdGEgfHwgMCkgKyBjaGFuZ2Uuem9vbURlbHRhO1xuICAgICAgICAgICAgaWYgKGNoYW5nZS5iZWFyaW5nRGVsdGEpIGNvbWJpbmVkLmJlYXJpbmdEZWx0YSA9IChjb21iaW5lZC5iZWFyaW5nRGVsdGEgfHwgMCkgKyBjaGFuZ2UuYmVhcmluZ0RlbHRhO1xuICAgICAgICAgICAgaWYgKGNoYW5nZS5waXRjaERlbHRhKSBjb21iaW5lZC5waXRjaERlbHRhID0gKGNvbWJpbmVkLnBpdGNoRGVsdGEgfHwgMCkgKyBjaGFuZ2UucGl0Y2hEZWx0YTtcbiAgICAgICAgICAgIGlmIChjaGFuZ2UuYXJvdW5kICE9PSB1bmRlZmluZWQpIGNvbWJpbmVkLmFyb3VuZCA9IGNoYW5nZS5hcm91bmQ7XG4gICAgICAgICAgICBpZiAoY2hhbmdlLnBpbmNoQXJvdW5kICE9PSB1bmRlZmluZWQpIGNvbWJpbmVkLnBpbmNoQXJvdW5kID0gY2hhbmdlLnBpbmNoQXJvdW5kO1xuICAgICAgICAgICAgaWYgKGNoYW5nZS5ub0luZXJ0aWEpIGNvbWJpbmVkLm5vSW5lcnRpYSA9IGNoYW5nZS5ub0luZXJ0aWE7XG5cbiAgICAgICAgICAgIGV4dGVuZChjb21iaW5lZEV2ZW50c0luUHJvZ3Jlc3MsIGV2ZW50c0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgZXh0ZW5kKGNvbWJpbmVkRGVhY3RpdmF0ZWRIYW5kbGVycywgZGVhY3RpdmF0ZWRIYW5kbGVycyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl91cGRhdGVNYXBUcmFuc2Zvcm0oY29tYmluZWQsIGNvbWJpbmVkRXZlbnRzSW5Qcm9ncmVzcywgY29tYmluZWREZWFjdGl2YXRlZEhhbmRsZXJzKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlcyA9IFtdO1xuICAgIH1cblxuICAgIF91cGRhdGVNYXBUcmFuc2Zvcm0oY29tYmluZWRSZXN1bHQ6IGFueSwgY29tYmluZWRFdmVudHNJblByb2dyZXNzOiBPYmplY3QsIGRlYWN0aXZhdGVkSGFuZGxlcnM6IE9iamVjdCkge1xuXG4gICAgICAgIGNvbnN0IG1hcCA9IHRoaXMuX21hcDtcbiAgICAgICAgY29uc3QgdHIgPSBtYXAudHJhbnNmb3JtO1xuXG4gICAgICAgIGlmICghaGFzQ2hhbmdlKGNvbWJpbmVkUmVzdWx0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpcmVFdmVudHMoY29tYmluZWRFdmVudHNJblByb2dyZXNzLCBkZWFjdGl2YXRlZEhhbmRsZXJzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB7cGFuRGVsdGEsIHpvb21EZWx0YSwgYmVhcmluZ0RlbHRhLCBwaXRjaERlbHRhLCBhcm91bmQsIHBpbmNoQXJvdW5kfSA9IGNvbWJpbmVkUmVzdWx0O1xuXG4gICAgICAgIGlmIChwaW5jaEFyb3VuZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhcm91bmQgPSBwaW5jaEFyb3VuZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHN0b3AgYW55IG9uZ29pbmcgY2FtZXJhIGFuaW1hdGlvbnMgKGVhc2VUbywgZmx5VG8pXG4gICAgICAgIG1hcC5fc3RvcCh0cnVlKTtcblxuICAgICAgICBhcm91bmQgPSBhcm91bmQgfHwgbWFwLnRyYW5zZm9ybS5jZW50ZXJQb2ludDtcbiAgICAgICAgY29uc3QgbG9jID0gdHIucG9pbnRMb2NhdGlvbihwYW5EZWx0YSA/IGFyb3VuZC5zdWIocGFuRGVsdGEpIDogYXJvdW5kKTtcbiAgICAgICAgaWYgKGJlYXJpbmdEZWx0YSkgdHIuYmVhcmluZyArPSBiZWFyaW5nRGVsdGE7XG4gICAgICAgIGlmIChwaXRjaERlbHRhKSB0ci5waXRjaCArPSBwaXRjaERlbHRhO1xuICAgICAgICBpZiAoem9vbURlbHRhKSB0ci56b29tICs9IHpvb21EZWx0YTtcbiAgICAgICAgdHIuc2V0TG9jYXRpb25BdFBvaW50KGxvYywgYXJvdW5kKTtcblxuICAgICAgICB0aGlzLl9tYXAuX3VwZGF0ZSgpO1xuICAgICAgICBpZiAoIWNvbWJpbmVkUmVzdWx0Lm5vSW5lcnRpYSkgdGhpcy5faW5lcnRpYS5yZWNvcmQoY29tYmluZWRSZXN1bHQpO1xuICAgICAgICB0aGlzLl9maXJlRXZlbnRzKGNvbWJpbmVkRXZlbnRzSW5Qcm9ncmVzcywgZGVhY3RpdmF0ZWRIYW5kbGVycyk7XG5cbiAgICB9XG5cbiAgICBfZmlyZUV2ZW50cyhuZXdFdmVudHNJblByb2dyZXNzOiB7IFtzdHJpbmddOiBPYmplY3QgfSwgZGVhY3RpdmF0ZWRIYW5kbGVyczogT2JqZWN0KSB7XG5cbiAgICAgICAgY29uc3Qgd2FzTW92aW5nID0gaXNNb3ZpbmcodGhpcy5fZXZlbnRzSW5Qcm9ncmVzcyk7XG4gICAgICAgIGNvbnN0IG5vd01vdmluZyA9IGlzTW92aW5nKG5ld0V2ZW50c0luUHJvZ3Jlc3MpO1xuXG4gICAgICAgIGNvbnN0IHN0YXJ0RXZlbnRzID0ge307XG5cbiAgICAgICAgZm9yIChjb25zdCBldmVudE5hbWUgaW4gbmV3RXZlbnRzSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgY29uc3Qge29yaWdpbmFsRXZlbnR9ID0gbmV3RXZlbnRzSW5Qcm9ncmVzc1tldmVudE5hbWVdO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9ldmVudHNJblByb2dyZXNzW2V2ZW50TmFtZV0pIHtcbiAgICAgICAgICAgICAgICBzdGFydEV2ZW50c1tgJHtldmVudE5hbWV9c3RhcnRgXSA9IG9yaWdpbmFsRXZlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9ldmVudHNJblByb2dyZXNzW2V2ZW50TmFtZV0gPSBuZXdFdmVudHNJblByb2dyZXNzW2V2ZW50TmFtZV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBmaXJlIHN0YXJ0IGV2ZW50cyBvbmx5IGFmdGVyIHRoaXMuX2V2ZW50c0luUHJvZ3Jlc3MgaGFzIGJlZW4gdXBkYXRlZFxuICAgICAgICBpZiAoIXdhc01vdmluZyAmJiBub3dNb3ZpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZpcmVFdmVudCgnbW92ZXN0YXJ0Jywgbm93TW92aW5nLm9yaWdpbmFsRXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBuYW1lIGluIHN0YXJ0RXZlbnRzKSB7XG4gICAgICAgICAgICB0aGlzLl9maXJlRXZlbnQobmFtZSwgc3RhcnRFdmVudHNbbmFtZV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5ld0V2ZW50c0luUHJvZ3Jlc3Mucm90YXRlKSB0aGlzLl9iZWFyaW5nQ2hhbmdlZCA9IHRydWU7XG5cbiAgICAgICAgaWYgKG5vd01vdmluZykge1xuICAgICAgICAgICAgdGhpcy5fZmlyZUV2ZW50KCdtb3ZlJywgbm93TW92aW5nLm9yaWdpbmFsRXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBldmVudE5hbWUgaW4gbmV3RXZlbnRzSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgY29uc3Qge29yaWdpbmFsRXZlbnR9ID0gbmV3RXZlbnRzSW5Qcm9ncmVzc1tldmVudE5hbWVdO1xuICAgICAgICAgICAgdGhpcy5fZmlyZUV2ZW50KGV2ZW50TmFtZSwgb3JpZ2luYWxFdmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbmRFdmVudHMgPSB7fTtcblxuICAgICAgICBsZXQgb3JpZ2luYWxFbmRFdmVudDtcbiAgICAgICAgZm9yIChjb25zdCBldmVudE5hbWUgaW4gdGhpcy5fZXZlbnRzSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgY29uc3Qge2hhbmRsZXJOYW1lLCBvcmlnaW5hbEV2ZW50fSA9IHRoaXMuX2V2ZW50c0luUHJvZ3Jlc3NbZXZlbnROYW1lXTtcbiAgICAgICAgICAgIGlmICghdGhpcy5faGFuZGxlcnNCeUlkW2hhbmRsZXJOYW1lXS5pc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2V2ZW50c0luUHJvZ3Jlc3NbZXZlbnROYW1lXTtcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEVuZEV2ZW50ID0gZGVhY3RpdmF0ZWRIYW5kbGVyc1toYW5kbGVyTmFtZV0gfHwgb3JpZ2luYWxFdmVudDtcbiAgICAgICAgICAgICAgICBlbmRFdmVudHNbYCR7ZXZlbnROYW1lfWVuZGBdID0gb3JpZ2luYWxFbmRFdmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBpbiBlbmRFdmVudHMpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZpcmVFdmVudChuYW1lLCBlbmRFdmVudHNbbmFtZV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RpbGxNb3ZpbmcgPSBpc01vdmluZyh0aGlzLl9ldmVudHNJblByb2dyZXNzKTtcbiAgICAgICAgaWYgKCh3YXNNb3ZpbmcgfHwgbm93TW92aW5nKSAmJiAhc3RpbGxNb3ZpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0aW5nQ2FtZXJhID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnN0IGluZXJ0aWFsRWFzZSA9IHRoaXMuX2luZXJ0aWEuX29uTW92ZUVuZCh0aGlzLl9tYXAuZHJhZ1Bhbi5faW5lcnRpYU9wdGlvbnMpO1xuXG4gICAgICAgICAgICBjb25zdCBzaG91bGRTbmFwVG9Ob3J0aCA9IGJlYXJpbmcgPT4gYmVhcmluZyAhPT0gMCAmJiAtdGhpcy5fYmVhcmluZ1NuYXAgPCBiZWFyaW5nICYmIGJlYXJpbmcgPCB0aGlzLl9iZWFyaW5nU25hcDtcblxuICAgICAgICAgICAgaWYgKGluZXJ0aWFsRWFzZSkge1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGRTbmFwVG9Ob3J0aChpbmVydGlhbEVhc2UuYmVhcmluZyB8fCB0aGlzLl9tYXAuZ2V0QmVhcmluZygpKSkge1xuICAgICAgICAgICAgICAgICAgICBpbmVydGlhbEVhc2UuYmVhcmluZyA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX21hcC5lYXNlVG8oaW5lcnRpYWxFYXNlLCB7b3JpZ2luYWxFdmVudDogb3JpZ2luYWxFbmRFdmVudH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXAuZmlyZShuZXcgRXZlbnQoJ21vdmVlbmQnLCB7b3JpZ2luYWxFdmVudDogb3JpZ2luYWxFbmRFdmVudH0pKTtcbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU25hcFRvTm9ydGgodGhpcy5fbWFwLmdldEJlYXJpbmcoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFwLnJlc2V0Tm9ydGgoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9iZWFyaW5nQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRpbmdDYW1lcmEgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgX2ZpcmVFdmVudCh0eXBlOiBzdHJpbmcsIGU6ICopIHtcbiAgICAgICAgdGhpcy5fbWFwLmZpcmUobmV3IEV2ZW50KHR5cGUsIGUgPyB7b3JpZ2luYWxFdmVudDogZX0gOiB7fSkpO1xuICAgIH1cblxuICAgIF90cmlnZ2VyUmVuZGVyRnJhbWUoKSB7XG4gICAgICAgIGlmICh0aGlzLl9mcmFtZUlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lSWQgPSB0aGlzLl9tYXAuX3JlcXVlc3RSZW5kZXJGcmFtZSh0aW1lU3RhbXAgPT4ge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9mcmFtZUlkO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRXZlbnQobmV3IFJlbmRlckZyYW1lRXZlbnQoJ3JlbmRlckZyYW1lJywge3RpbWVTdGFtcH0pKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9hcHBseUNoYW5nZXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG59XG5cbmV4cG9ydCBkZWZhdWx0IEhhbmRsZXJNYW5hZ2VyO1xuIiwiLy8gQGZsb3dcbmltcG9ydCB7ZXh0ZW5kfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHdpbmRvdyBmcm9tICcuL3dpbmRvdyc7XG5cbi8qKlxuICogVGhpcyBpcyBhIHByaXZhdGUgbmFtZXNwYWNlIGZvciB1dGlsaXR5IGZ1bmN0aW9ucyB0aGF0IHdpbGwgZ2V0IGF1dG9tYXRpY2FsbHkgc3RyaXBwZWRcbiAqIG91dCBpbiBwcm9kdWN0aW9uIGJ1aWxkcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY29uc3QgRGVidWcgPSB7XG4gICAgZXh0ZW5kKGRlc3Q6IE9iamVjdCwgLi4uc291cmNlczogQXJyYXk8P09iamVjdD4pOiBPYmplY3Qge1xuICAgICAgICByZXR1cm4gZXh0ZW5kKGRlc3QsIC4uLnNvdXJjZXMpO1xuICAgIH0sXG5cbiAgICBydW4oZm46ICgpID0+IGFueSkge1xuICAgICAgICBmbigpO1xuICAgIH0sXG5cbiAgICBsb2dUb0VsZW1lbnQobWVzc2FnZTogc3RyaW5nLCBvdmVyd3JpdGU6IGJvb2xlYW4gPSBmYWxzZSwgaWQ6IHN0cmluZyA9IFwibG9nXCIpIHtcbiAgICAgICAgY29uc3QgZWwgPSB3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgICAgICBpZiAoZWwpIHtcbiAgICAgICAgICAgIGlmIChvdmVyd3JpdGUpIGVsLmlubmVySFRNTCA9ICcnO1xuICAgICAgICAgICAgZWwuaW5uZXJIVE1MICs9IGA8YnI+JHttZXNzYWdlfWA7XG4gICAgICAgIH1cblxuICAgIH1cbn07XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge1xuICAgIGJpbmRBbGwsXG4gICAgZXh0ZW5kLFxuICAgIHdhcm5PbmNlLFxuICAgIGNsYW1wLFxuICAgIHdyYXAsXG4gICAgZWFzZSBhcyBkZWZhdWx0RWFzaW5nLFxuICAgIHBpY2tcbn0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7bnVtYmVyIGFzIGludGVycG9sYXRlfSBmcm9tICcuLi9zdHlsZS1zcGVjL3V0aWwvaW50ZXJwb2xhdGUnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vdXRpbC9icm93c2VyJztcbmltcG9ydCBMbmdMYXQgZnJvbSAnLi4vZ2VvL2xuZ19sYXQnO1xuaW1wb3J0IExuZ0xhdEJvdW5kcyBmcm9tICcuLi9nZW8vbG5nX2xhdF9ib3VuZHMnO1xuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IHtFdmVudCwgRXZlbnRlZH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7RGVidWd9IGZyb20gJy4uL3V0aWwvZGVidWcnO1xuXG5pbXBvcnQgdHlwZSBUcmFuc2Zvcm0gZnJvbSAnLi4vZ2VvL3RyYW5zZm9ybSc7XG5pbXBvcnQgdHlwZSB7TG5nTGF0TGlrZX0gZnJvbSAnLi4vZ2VvL2xuZ19sYXQnO1xuaW1wb3J0IHR5cGUge0xuZ0xhdEJvdW5kc0xpa2V9IGZyb20gJy4uL2dlby9sbmdfbGF0X2JvdW5kcyc7XG5pbXBvcnQgdHlwZSB7VGFza0lEfSBmcm9tICcuLi91dGlsL3Rhc2tfcXVldWUnO1xuaW1wb3J0IHR5cGUge1BvaW50TGlrZX0gZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSB7UGFkZGluZ09wdGlvbnN9IGZyb20gJy4uL2dlby9lZGdlX2luc2V0cyc7XG5cbi8qKlxuICogT3B0aW9ucyBjb21tb24gdG8ge0BsaW5rIE1hcCNqdW1wVG99LCB7QGxpbmsgTWFwI2Vhc2VUb30sIGFuZCB7QGxpbmsgTWFwI2ZseVRvfSwgY29udHJvbGxpbmcgdGhlIGRlc2lyZWQgbG9jYXRpb24sXG4gKiB6b29tLCBiZWFyaW5nLCBhbmQgcGl0Y2ggb2YgdGhlIGNhbWVyYS4gQWxsIHByb3BlcnRpZXMgYXJlIG9wdGlvbmFsLCBhbmQgd2hlbiBhIHByb3BlcnR5IGlzIG9taXR0ZWQsIHRoZSBjdXJyZW50XG4gKiBjYW1lcmEgdmFsdWUgZm9yIHRoYXQgcHJvcGVydHkgd2lsbCByZW1haW4gdW5jaGFuZ2VkLlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENhbWVyYU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7TG5nTGF0TGlrZX0gY2VudGVyIFRoZSBkZXNpcmVkIGNlbnRlci5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB6b29tIFRoZSBkZXNpcmVkIHpvb20gbGV2ZWwuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmVhcmluZyBUaGUgZGVzaXJlZCBiZWFyaW5nIGluIGRlZ3JlZXMuIFRoZSBiZWFyaW5nIGlzIHRoZSBjb21wYXNzIGRpcmVjdGlvbiB0aGF0XG4gKiBpcyBcInVwXCIuIEZvciBleGFtcGxlLCBgYmVhcmluZzogOTBgIG9yaWVudHMgdGhlIG1hcCBzbyB0aGF0IGVhc3QgaXMgdXAuXG4gKiBAcHJvcGVydHkge251bWJlcn0gcGl0Y2ggVGhlIGRlc2lyZWQgcGl0Y2ggaW4gZGVncmVlcy4gVGhlIHBpdGNoIGlzIHRoZSBhbmdsZSB0b3dhcmRzIHRoZSBob3Jpem9uXG4gKiBtZWFzdXJlZCBpbiBkZWdyZWVzIHdpdGggYSByYW5nZSBiZXR3ZWVuIDAgYW5kIDYwIGRlZ3JlZXMuIEZvciBleGFtcGxlLCBwaXRjaDogMCBwcm92aWRlcyB0aGUgYXBwZWFyYW5jZVxuICogb2YgbG9va2luZyBzdHJhaWdodCBkb3duIGF0IHRoZSBtYXAsIHdoaWxlIHBpdGNoOiA2MCB0aWx0cyB0aGUgdXNlcidzIHBlcnNwZWN0aXZlIHRvd2FyZHMgdGhlIGhvcml6b24uXG4gKiBJbmNyZWFzaW5nIHRoZSBwaXRjaCB2YWx1ZSBpcyBvZnRlbiB1c2VkIHRvIGRpc3BsYXkgM0Qgb2JqZWN0cy5cbiAqIEBwcm9wZXJ0eSB7TG5nTGF0TGlrZX0gYXJvdW5kIElmIGB6b29tYCBpcyBzcGVjaWZpZWQsIGBhcm91bmRgIGRldGVybWluZXMgdGhlIHBvaW50IGFyb3VuZCB3aGljaCB0aGUgem9vbSBpcyBjZW50ZXJlZC5cbiAqIEBwcm9wZXJ0eSB7UGFkZGluZ09wdGlvbnN9IHBhZGRpbmcgRGltZW5zaW9ucyBpbiBwaXhlbHMgYXBwbGllZCBvbiBlYWNoIHNpZGUgb2YgdGhlIHZpZXdwb3J0IGZvciBzaGlmdGluZyB0aGUgdmFuaXNoaW5nIHBvaW50LlxuICogQGV4YW1wbGVcbiAqIC8vIHNldCB0aGUgbWFwJ3MgaW5pdGlhbCBwZXJzcGVjdGl2ZSB3aXRoIENhbWVyYU9wdGlvbnNcbiAqIHZhciBtYXAgPSBuZXcgbWFwYm94Z2wuTWFwKHtcbiAqICAgY29udGFpbmVyOiAnbWFwJyxcbiAqICAgc3R5bGU6ICdtYXBib3g6Ly9zdHlsZXMvbWFwYm94L3N0cmVldHMtdjExJyxcbiAqICAgY2VudGVyOiBbLTczLjU4MDQsIDQ1LjUzNDgzXSxcbiAqICAgcGl0Y2g6IDYwLFxuICogICBiZWFyaW5nOiAtNjAsXG4gKiAgIHpvb206IDEwXG4gKiB9KTtcbiAqIEBzZWUgW1NldCBwaXRjaCBhbmQgYmVhcmluZ10oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvc2V0LXBlcnNwZWN0aXZlLylcbiAqIEBzZWUgW0p1bXAgdG8gYSBzZXJpZXMgb2YgbG9jYXRpb25zXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9qdW1wLXRvLylcbiAqIEBzZWUgW0ZseSB0byBhIGxvY2F0aW9uXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9mbHl0by8pXG4gKiBAc2VlIFtEaXNwbGF5IGJ1aWxkaW5ncyBpbiAzRF0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvM2QtYnVpbGRpbmdzLylcbiAqL1xuZXhwb3J0IHR5cGUgQ2FtZXJhT3B0aW9ucyA9IHtcbiAgICBjZW50ZXI/OiBMbmdMYXRMaWtlLFxuICAgIHpvb20/OiBudW1iZXIsXG4gICAgYmVhcmluZz86IG51bWJlcixcbiAgICBwaXRjaD86IG51bWJlcixcbiAgICBhcm91bmQ/OiBMbmdMYXRMaWtlLFxuICAgIHBhZGRpbmc/OiBQYWRkaW5nT3B0aW9uc1xufTtcblxuLyoqXG4gKiBPcHRpb25zIGNvbW1vbiB0byBtYXAgbW92ZW1lbnQgbWV0aG9kcyB0aGF0IGludm9sdmUgYW5pbWF0aW9uLCBzdWNoIGFzIHtAbGluayBNYXAjcGFuQnl9IGFuZFxuICoge0BsaW5rIE1hcCNlYXNlVG99LCBjb250cm9sbGluZyB0aGUgZHVyYXRpb24gYW5kIGVhc2luZyBmdW5jdGlvbiBvZiB0aGUgYW5pbWF0aW9uLiBBbGwgcHJvcGVydGllc1xuICogYXJlIG9wdGlvbmFsLlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEFuaW1hdGlvbk9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBkdXJhdGlvbiBUaGUgYW5pbWF0aW9uJ3MgZHVyYXRpb24sIG1lYXN1cmVkIGluIG1pbGxpc2Vjb25kcy5cbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGVhc2luZyBBIGZ1bmN0aW9uIHRha2luZyBhIHRpbWUgaW4gdGhlIHJhbmdlIDAuLjEgYW5kIHJldHVybmluZyBhIG51bWJlciB3aGVyZSAwIGlzXG4gKiAgIHRoZSBpbml0aWFsIHN0YXRlIGFuZCAxIGlzIHRoZSBmaW5hbCBzdGF0ZS5cbiAqIEBwcm9wZXJ0eSB7UG9pbnRMaWtlfSBvZmZzZXQgb2YgdGhlIHRhcmdldCBjZW50ZXIgcmVsYXRpdmUgdG8gcmVhbCBtYXAgY29udGFpbmVyIGNlbnRlciBhdCB0aGUgZW5kIG9mIGFuaW1hdGlvbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYW5pbWF0ZSBJZiBgZmFsc2VgLCBubyBhbmltYXRpb24gd2lsbCBvY2N1ci5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZXNzZW50aWFsIElmIGB0cnVlYCwgdGhlbiB0aGUgYW5pbWF0aW9uIGlzIGNvbnNpZGVyZWQgZXNzZW50aWFsIGFuZCB3aWxsIG5vdCBiZSBhZmZlY3RlZCBieVxuICogICBbYHByZWZlcnMtcmVkdWNlZC1tb3Rpb25gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQG1lZGlhL3ByZWZlcnMtcmVkdWNlZC1tb3Rpb24pLlxuICovXG5leHBvcnQgdHlwZSBBbmltYXRpb25PcHRpb25zID0ge1xuICAgIGR1cmF0aW9uPzogbnVtYmVyLFxuICAgIGVhc2luZz86IChfOiBudW1iZXIpID0+IG51bWJlcixcbiAgICBvZmZzZXQ/OiBQb2ludExpa2UsXG4gICAgYW5pbWF0ZT86IGJvb2xlYW4sXG4gICAgZXNzZW50aWFsPzogYm9vbGVhblxufTtcblxuLyoqXG4gKiBPcHRpb25zIGZvciBzZXR0aW5nIHBhZGRpbmcgb24gY2FsbHMgdG8gbWV0aG9kcyBzdWNoIGFzIHtAbGluayBNYXAjZml0Qm91bmRzfSwge0BsaW5rIE1hcCNmaXRTY3JlZW5Db29yZGluYXRlc30sIGFuZCB7QGxpbmsgTWFwI3NldFBhZGRpbmd9LiBBZGp1c3QgdGhlc2Ugb3B0aW9ucyB0byBzZXQgdGhlIGFtb3VudCBvZiBwYWRkaW5nIGluIHBpeGVscyBhZGRlZCB0byB0aGUgZWRnZXMgb2YgdGhlIGNhbnZhcy4gU2V0IGEgdW5pZm9ybSBwYWRkaW5nIG9uIGFsbCBlZGdlcyBvciBpbmRpdmlkdWFsIHZhbHVlcyBmb3IgZWFjaCBlZGdlLiBBbGwgcHJvcGVydGllcyBvZiB0aGlzIG9iamVjdCBtdXN0IGJlXG4gKiBub24tbmVnYXRpdmUgaW50ZWdlcnMuXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gUGFkZGluZ09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0b3AgUGFkZGluZyBpbiBwaXhlbHMgZnJvbSB0aGUgdG9wIG9mIHRoZSBtYXAgY2FudmFzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJvdHRvbSBQYWRkaW5nIGluIHBpeGVscyBmcm9tIHRoZSBib3R0b20gb2YgdGhlIG1hcCBjYW52YXMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gbGVmdCBQYWRkaW5nIGluIHBpeGVscyBmcm9tIHRoZSBsZWZ0IG9mIHRoZSBtYXAgY2FudmFzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHJpZ2h0IFBhZGRpbmcgaW4gcGl4ZWxzIGZyb20gdGhlIHJpZ2h0IG9mIHRoZSBtYXAgY2FudmFzLlxuICpcbiAqIEBleGFtcGxlXG4gKiB2YXIgYmJveCA9IFtbLTc5LCA0M10sIFstNzMsIDQ1XV07XG4gKiBtYXAuZml0Qm91bmRzKGJib3gsIHtcbiAqICAgcGFkZGluZzoge3RvcDogMTAsIGJvdHRvbToyNSwgbGVmdDogMTUsIHJpZ2h0OiA1fVxuICogfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIHZhciBiYm94ID0gW1stNzksIDQzXSwgWy03MywgNDVdXTtcbiAqIG1hcC5maXRCb3VuZHMoYmJveCwge1xuICogICBwYWRkaW5nOiAyMFxuICogfSk7XG4gKiBAc2VlIFtGaXQgdG8gdGhlIGJvdW5kcyBvZiBhIExpbmVTdHJpbmddKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3pvb210by1saW5lc3RyaW5nLylcbiAqIEBzZWUgW0ZpdCBhIG1hcCB0byBhIGJvdW5kaW5nIGJveF0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZml0Ym91bmRzLylcbiAqL1xuXG5jbGFzcyBDYW1lcmEgZXh0ZW5kcyBFdmVudGVkIHtcbiAgICB0cmFuc2Zvcm06IFRyYW5zZm9ybTtcbiAgICBfbW92aW5nOiBib29sZWFuO1xuICAgIF96b29taW5nOiBib29sZWFuO1xuICAgIF9yb3RhdGluZzogYm9vbGVhbjtcbiAgICBfcGl0Y2hpbmc6IGJvb2xlYW47XG4gICAgX3BhZGRpbmc6IGJvb2xlYW47XG5cbiAgICBfYmVhcmluZ1NuYXA6IG51bWJlcjtcbiAgICBfZWFzZUVuZFRpbWVvdXRJRDogVGltZW91dElEO1xuICAgIF9lYXNlU3RhcnQ6IG51bWJlcjtcbiAgICBfZWFzZU9wdGlvbnM6IHtkdXJhdGlvbjogbnVtYmVyLCBlYXNpbmc6IChfOiBudW1iZXIpID0+IG51bWJlcn07XG4gICAgX2Vhc2VJZDogc3RyaW5nIHwgdm9pZDtcblxuICAgIF9vbkVhc2VGcmFtZTogKF86IG51bWJlcikgPT4gdm9pZDtcbiAgICBfb25FYXNlRW5kOiAoZWFzZUlkPzogc3RyaW5nKSA9PiB2b2lkO1xuICAgIF9lYXNlRnJhbWVJZDogP1Rhc2tJRDtcblxuICAgICtfcmVxdWVzdFJlbmRlckZyYW1lOiAoKCkgPT4gdm9pZCkgPT4gVGFza0lEO1xuICAgICtfY2FuY2VsUmVuZGVyRnJhbWU6IChfOiBUYXNrSUQpID0+IHZvaWQ7XG5cbiAgICBjb25zdHJ1Y3Rvcih0cmFuc2Zvcm06IFRyYW5zZm9ybSwgb3B0aW9uczoge2JlYXJpbmdTbmFwOiBudW1iZXJ9KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuX21vdmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl96b29taW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuICAgICAgICB0aGlzLl9iZWFyaW5nU25hcCA9IG9wdGlvbnMuYmVhcmluZ1NuYXA7XG5cbiAgICAgICAgYmluZEFsbChbJ19yZW5kZXJGcmFtZUNhbGxiYWNrJ10sIHRoaXMpO1xuXG4gICAgICAgIC8vYWRkQXNzZXJ0aW9ucyh0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBtYXAncyBnZW9ncmFwaGljYWwgY2VudGVycG9pbnQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEByZXR1cm5zIFRoZSBtYXAncyBnZW9ncmFwaGljYWwgY2VudGVycG9pbnQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyByZXR1cm4gYSBMbmdMYXQgb2JqZWN0IHN1Y2ggYXMge2xuZzogMCwgbGF0OiAwfVxuICAgICAqIHZhciBjZW50ZXIgPSBtYXAuZ2V0Q2VudGVyKCk7XG4gICAgICogLy8gYWNjZXNzIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUgdmFsdWVzIGRpcmVjdGx5XG4gICAgICogdmFyIHtsb25naXR1ZGUsIGxhdGl0dWRlfSA9IG1hcC5nZXRDZW50ZXIoKTtcbiAgICAgKiBAc2VlIFR1dG9yaWFsOiBbVXNlIE1hcGJveCBHTCBKUyBpbiBhIFJlYWN0IGFwcF0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vaGVscC90dXRvcmlhbHMvdXNlLW1hcGJveC1nbC1qcy13aXRoLXJlYWN0LyNzdG9yZS10aGUtbmV3LWNvb3JkaW5hdGVzKVxuICAgICAqL1xuICAgIGdldENlbnRlcigpOiBMbmdMYXQgeyByZXR1cm4gbmV3IExuZ0xhdCh0aGlzLnRyYW5zZm9ybS5jZW50ZXIubG5nLCB0aGlzLnRyYW5zZm9ybS5jZW50ZXIubGF0KTsgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbWFwJ3MgZ2VvZ3JhcGhpY2FsIGNlbnRlcnBvaW50LiBFcXVpdmFsZW50IHRvIGBqdW1wVG8oe2NlbnRlcjogY2VudGVyfSlgLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcGFyYW0gY2VudGVyIFRoZSBjZW50ZXJwb2ludCB0byBzZXQuXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLnNldENlbnRlcihbLTc0LCAzOF0pO1xuICAgICAqL1xuICAgIHNldENlbnRlcihjZW50ZXI6IExuZ0xhdExpa2UsIGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5qdW1wVG8oe2NlbnRlcn0sIGV2ZW50RGF0YSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFucyB0aGUgbWFwIGJ5IHRoZSBzcGVjaWZpZWQgb2Zmc2V0LlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcGFyYW0gb2Zmc2V0IGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIGJ5IHdoaWNoIHRvIHBhbiB0aGUgbWFwLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgb2JqZWN0XG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBzZWUgW05hdmlnYXRlIHRoZSBtYXAgd2l0aCBnYW1lLWxpa2UgY29udHJvbHNdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZ2FtZS1jb250cm9scy8pXG4gICAgICovXG4gICAgcGFuQnkob2Zmc2V0OiBQb2ludExpa2UsIG9wdGlvbnM/OiBBbmltYXRpb25PcHRpb25zLCBldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgb2Zmc2V0ID0gUG9pbnQuY29udmVydChvZmZzZXQpLm11bHQoLTEpO1xuICAgICAgICByZXR1cm4gdGhpcy5wYW5Ubyh0aGlzLnRyYW5zZm9ybS5jZW50ZXIsIGV4dGVuZCh7b2Zmc2V0fSwgb3B0aW9ucyksIGV2ZW50RGF0YSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFucyB0aGUgbWFwIHRvIHRoZSBzcGVjaWZpZWQgbG9jYXRpb24gd2l0aCBhbiBhbmltYXRlZCB0cmFuc2l0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcGFyYW0gbG5nbGF0IFRoZSBsb2NhdGlvbiB0byBwYW4gdGhlIG1hcCB0by5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGRlc2NyaWJpbmcgdGhlIGRlc3RpbmF0aW9uIGFuZCBhbmltYXRpb24gb2YgdGhlIHRyYW5zaXRpb24uXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLnBhblRvKFstNzQsIDM4XSk7XG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBTcGVjaWZ5IHRoYXQgdGhlIHBhblRvIGFuaW1hdGlvbiBzaG91bGQgbGFzdCA1MDAwIG1pbGxpc2Vjb25kcy5cbiAgICAgKiBtYXAucGFuVG8oWy03NCwgMzhdLCB7ZHVyYXRpb246IDUwMDB9KTtcbiAgICAgKiBAc2VlIFtVcGRhdGUgYSBmZWF0dXJlIGluIHJlYWx0aW1lXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9saXZlLXVwZGF0ZS1mZWF0dXJlLylcbiAgICAgKi9cbiAgICBwYW5UbyhsbmdsYXQ6IExuZ0xhdExpa2UsIG9wdGlvbnM/OiBBbmltYXRpb25PcHRpb25zLCBldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWFzZVRvKGV4dGVuZCh7XG4gICAgICAgICAgICBjZW50ZXI6IGxuZ2xhdFxuICAgICAgICB9LCBvcHRpb25zKSwgZXZlbnREYXRhKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBtYXAncyBjdXJyZW50IHpvb20gbGV2ZWwuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEByZXR1cm5zIFRoZSBtYXAncyBjdXJyZW50IHpvb20gbGV2ZWwuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXAuZ2V0Wm9vbSgpO1xuICAgICAqL1xuICAgIGdldFpvb20oKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMudHJhbnNmb3JtLnpvb207IH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG1hcCdzIHpvb20gbGV2ZWwuIEVxdWl2YWxlbnQgdG8gYGp1bXBUbyh7em9vbTogem9vbX0pYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIHpvb20gVGhlIHpvb20gbGV2ZWwgdG8gc2V0ICgwLTIwKS5cbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhZGRlZCB0byBldmVudCBvYmplY3RzIG9mIGV2ZW50cyB0cmlnZ2VyZWQgYnkgdGhpcyBtZXRob2QuXG4gICAgICogQGZpcmVzIG1vdmVzdGFydFxuICAgICAqIEBmaXJlcyB6b29tc3RhcnRcbiAgICAgKiBAZmlyZXMgbW92ZVxuICAgICAqIEBmaXJlcyB6b29tXG4gICAgICogQGZpcmVzIG1vdmVlbmRcbiAgICAgKiBAZmlyZXMgem9vbWVuZFxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gWm9vbSB0byB0aGUgem9vbSBsZXZlbCA1IHdpdGhvdXQgYW4gYW5pbWF0ZWQgdHJhbnNpdGlvblxuICAgICAqIG1hcC5zZXRab29tKDUpO1xuICAgICAqL1xuICAgIHNldFpvb20oem9vbTogbnVtYmVyLCBldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgdGhpcy5qdW1wVG8oe3pvb219LCBldmVudERhdGEpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBab29tcyB0aGUgbWFwIHRvIHRoZSBzcGVjaWZpZWQgem9vbSBsZXZlbCwgd2l0aCBhbiBhbmltYXRlZCB0cmFuc2l0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcGFyYW0gem9vbSBUaGUgem9vbSBsZXZlbCB0byB0cmFuc2l0aW9uIHRvLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgb2JqZWN0XG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgem9vbXN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVcbiAgICAgKiBAZmlyZXMgem9vbVxuICAgICAqIEBmaXJlcyBtb3ZlZW5kXG4gICAgICogQGZpcmVzIHpvb21lbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIFpvb20gdG8gdGhlIHpvb20gbGV2ZWwgNSB3aXRob3V0IGFuIGFuaW1hdGVkIHRyYW5zaXRpb25cbiAgICAgKiBtYXAuem9vbVRvKDUpO1xuICAgICAqIC8vIFpvb20gdG8gdGhlIHpvb20gbGV2ZWwgOCB3aXRoIGFuIGFuaW1hdGVkIHRyYW5zaXRpb25cbiAgICAgKiBtYXAuem9vbVRvKDgsIHtcbiAgICAgKiAgIGR1cmF0aW9uOiAyMDAwLFxuICAgICAqICAgb2Zmc2V0OiBbMTAwLCA1MF1cbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICB6b29tVG8oem9vbTogbnVtYmVyLCBvcHRpb25zOiA/IEFuaW1hdGlvbk9wdGlvbnMsIGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lYXNlVG8oZXh0ZW5kKHtcbiAgICAgICAgICAgIHpvb21cbiAgICAgICAgfSwgb3B0aW9ucyksIGV2ZW50RGF0YSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5jcmVhc2VzIHRoZSBtYXAncyB6b29tIGxldmVsIGJ5IDEuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgb2JqZWN0XG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgem9vbXN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVcbiAgICAgKiBAZmlyZXMgem9vbVxuICAgICAqIEBmaXJlcyBtb3ZlZW5kXG4gICAgICogQGZpcmVzIHpvb21lbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIHpvb20gdGhlIG1hcCBpbiBvbmUgbGV2ZWwgd2l0aCBhIGN1c3RvbSBhbmltYXRpb24gZHVyYXRpb25cbiAgICAgKiBtYXAuem9vbUluKHtkdXJhdGlvbjogMTAwMH0pO1xuICAgICAqL1xuICAgIHpvb21JbihvcHRpb25zPzogQW5pbWF0aW9uT3B0aW9ucywgZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuem9vbVRvKHRoaXMuZ2V0Wm9vbSgpICsgMSwgb3B0aW9ucywgZXZlbnREYXRhKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVjcmVhc2VzIHRoZSBtYXAncyB6b29tIGxldmVsIGJ5IDEuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgb2JqZWN0XG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgem9vbXN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVcbiAgICAgKiBAZmlyZXMgem9vbVxuICAgICAqIEBmaXJlcyBtb3ZlZW5kXG4gICAgICogQGZpcmVzIHpvb21lbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIHpvb20gdGhlIG1hcCBvdXQgb25lIGxldmVsIHdpdGggYSBjdXN0b20gYW5pbWF0aW9uIG9mZnNldFxuICAgICAqIG1hcC56b29tT3V0KHtvZmZzZXQ6IFs4MCwgNjBdfSk7XG4gICAgICovXG4gICAgem9vbU91dChvcHRpb25zPzogQW5pbWF0aW9uT3B0aW9ucywgZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuem9vbVRvKHRoaXMuZ2V0Wm9vbSgpIC0gMSwgb3B0aW9ucywgZXZlbnREYXRhKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbWFwJ3MgY3VycmVudCBiZWFyaW5nLiBUaGUgYmVhcmluZyBpcyB0aGUgY29tcGFzcyBkaXJlY3Rpb24gdGhhdCBpcyBcXFwidXBcXFwiOyBmb3IgZXhhbXBsZSwgYSBiZWFyaW5nXG4gICAgICogb2YgOTDDgsKwIG9yaWVudHMgdGhlIG1hcCBzbyB0aGF0IGVhc3QgaXMgdXAuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEByZXR1cm5zIFRoZSBtYXAncyBjdXJyZW50IGJlYXJpbmcuXG4gICAgICogQHNlZSBbTmF2aWdhdGUgdGhlIG1hcCB3aXRoIGdhbWUtbGlrZSBjb250cm9sc10oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9nYW1lLWNvbnRyb2xzLylcbiAgICAgKi9cbiAgICBnZXRCZWFyaW5nKCk6IG51bWJlciB7IHJldHVybiB0aGlzLnRyYW5zZm9ybS5iZWFyaW5nOyB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBtYXAncyBiZWFyaW5nIChyb3RhdGlvbikuIFRoZSBiZWFyaW5nIGlzIHRoZSBjb21wYXNzIGRpcmVjdGlvbiB0aGF0IGlzIFxcXCJ1cFxcXCI7IGZvciBleGFtcGxlLCBhIGJlYXJpbmdcbiAgICAgKiBvZiA5MMOCwrAgb3JpZW50cyB0aGUgbWFwIHNvIHRoYXQgZWFzdCBpcyB1cC5cbiAgICAgKlxuICAgICAqIEVxdWl2YWxlbnQgdG8gYGp1bXBUbyh7YmVhcmluZzogYmVhcmluZ30pYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIGJlYXJpbmcgVGhlIGRlc2lyZWQgYmVhcmluZy5cbiAgICAgKiBAcGFyYW0gZXZlbnREYXRhIEFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhZGRlZCB0byBldmVudCBvYmplY3RzIG9mIGV2ZW50cyB0cmlnZ2VyZWQgYnkgdGhpcyBtZXRob2QuXG4gICAgICogQGZpcmVzIG1vdmVzdGFydFxuICAgICAqIEBmaXJlcyBtb3ZlZW5kXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyByb3RhdGUgdGhlIG1hcCB0byA5MCBkZWdyZWVzXG4gICAgICogbWFwLnNldEJlYXJpbmcoOTApO1xuICAgICAqL1xuICAgIHNldEJlYXJpbmcoYmVhcmluZzogbnVtYmVyLCBldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgdGhpcy5qdW1wVG8oe2JlYXJpbmd9LCBldmVudERhdGEpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHBhZGRpbmcgYXBwbGllZCBhcm91bmQgdGhlIG1hcCB2aWV3cG9ydC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgcGFkZGluZyBhcm91bmQgdGhlIG1hcCB2aWV3cG9ydC5cbiAgICAgKi9cbiAgICBnZXRQYWRkaW5nKCk6IFBhZGRpbmdPcHRpb25zIHsgcmV0dXJuIHRoaXMudHJhbnNmb3JtLnBhZGRpbmc7IH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHBhZGRpbmcgaW4gcGl4ZWxzIGFyb3VuZCB0aGUgdmlld3BvcnQuXG4gICAgICpcbiAgICAgKiBFcXVpdmFsZW50IHRvIGBqdW1wVG8oe3BhZGRpbmc6IHBhZGRpbmd9KWAuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSBwYWRkaW5nIFRoZSBkZXNpcmVkIHBhZGRpbmcuIEZvcm1hdDogeyBsZWZ0OiBudW1iZXIsIHJpZ2h0OiBudW1iZXIsIHRvcDogbnVtYmVyLCBib3R0b206IG51bWJlciB9XG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gU2V0cyBhIGxlZnQgcGFkZGluZyBvZiAzMDBweCwgYW5kIGEgdG9wIHBhZGRpbmcgb2YgNTBweFxuICAgICAqIG1hcC5zZXRQYWRkaW5nKHsgbGVmdDogMzAwLCB0b3A6IDUwIH0pO1xuICAgICAqL1xuICAgIHNldFBhZGRpbmcocGFkZGluZzogUGFkZGluZ09wdGlvbnMsIGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICB0aGlzLmp1bXBUbyh7cGFkZGluZ30sIGV2ZW50RGF0YSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJvdGF0ZXMgdGhlIG1hcCB0byB0aGUgc3BlY2lmaWVkIGJlYXJpbmcsIHdpdGggYW4gYW5pbWF0ZWQgdHJhbnNpdGlvbi4gVGhlIGJlYXJpbmcgaXMgdGhlIGNvbXBhc3MgZGlyZWN0aW9uXG4gICAgICogdGhhdCBpcyBcXFwidXBcXFwiOyBmb3IgZXhhbXBsZSwgYSBiZWFyaW5nIG9mIDkww4LCsCBvcmllbnRzIHRoZSBtYXAgc28gdGhhdCBlYXN0IGlzIHVwLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcGFyYW0gYmVhcmluZyBUaGUgZGVzaXJlZCBiZWFyaW5nLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgb2JqZWN0XG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqL1xuICAgIHJvdGF0ZVRvKGJlYXJpbmc6IG51bWJlciwgb3B0aW9ucz86IEFuaW1hdGlvbk9wdGlvbnMsIGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lYXNlVG8oZXh0ZW5kKHtcbiAgICAgICAgICAgIGJlYXJpbmdcbiAgICAgICAgfSwgb3B0aW9ucyksIGV2ZW50RGF0YSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUm90YXRlcyB0aGUgbWFwIHNvIHRoYXQgbm9ydGggaXMgdXAgKDDDgsKwIGJlYXJpbmcpLCB3aXRoIGFuIGFuaW1hdGVkIHRyYW5zaXRpb24uXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgb2JqZWN0XG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqL1xuICAgIHJlc2V0Tm9ydGgob3B0aW9ucz86IEFuaW1hdGlvbk9wdGlvbnMsIGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICB0aGlzLnJvdGF0ZVRvKDAsIGV4dGVuZCh7ZHVyYXRpb246IDEwMDB9LCBvcHRpb25zKSwgZXZlbnREYXRhKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUm90YXRlcyBhbmQgcGl0Y2hlcyB0aGUgbWFwIHNvIHRoYXQgbm9ydGggaXMgdXAgKDDDgsKwIGJlYXJpbmcpIGFuZCBwaXRjaCBpcyAww4LCsCwgd2l0aCBhbiBhbmltYXRlZCB0cmFuc2l0aW9uLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIG9iamVjdFxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVlbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKi9cbiAgICByZXNldE5vcnRoUGl0Y2gob3B0aW9ucz86IEFuaW1hdGlvbk9wdGlvbnMsIGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICB0aGlzLmVhc2VUbyhleHRlbmQoe1xuICAgICAgICAgICAgYmVhcmluZzogMCxcbiAgICAgICAgICAgIHBpdGNoOiAwLFxuICAgICAgICAgICAgZHVyYXRpb246IDEwMDBcbiAgICAgICAgfSwgb3B0aW9ucyksIGV2ZW50RGF0YSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNuYXBzIHRoZSBtYXAgc28gdGhhdCBub3J0aCBpcyB1cCAoMMOCwrAgYmVhcmluZyksIGlmIHRoZSBjdXJyZW50IGJlYXJpbmcgaXMgY2xvc2UgZW5vdWdoIHRvIGl0IChpLmUuIHdpdGhpbiB0aGVcbiAgICAgKiBgYmVhcmluZ1NuYXBgIHRocmVzaG9sZCkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgb2JqZWN0XG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqL1xuICAgIHNuYXBUb05vcnRoKG9wdGlvbnM/OiBBbmltYXRpb25PcHRpb25zLCBldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgaWYgKE1hdGguYWJzKHRoaXMuZ2V0QmVhcmluZygpKSA8IHRoaXMuX2JlYXJpbmdTbmFwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXNldE5vcnRoKG9wdGlvbnMsIGV2ZW50RGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbWFwJ3MgY3VycmVudCBwaXRjaCAodGlsdCkuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEByZXR1cm5zIFRoZSBtYXAncyBjdXJyZW50IHBpdGNoLCBtZWFzdXJlZCBpbiBkZWdyZWVzIGF3YXkgZnJvbSB0aGUgcGxhbmUgb2YgdGhlIHNjcmVlbi5cbiAgICAgKi9cbiAgICBnZXRQaXRjaCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy50cmFuc2Zvcm0ucGl0Y2g7IH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG1hcCdzIHBpdGNoICh0aWx0KS4gRXF1aXZhbGVudCB0byBganVtcFRvKHtwaXRjaDogcGl0Y2h9KWAuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSBwaXRjaCBUaGUgcGl0Y2ggdG8gc2V0LCBtZWFzdXJlZCBpbiBkZWdyZWVzIGF3YXkgZnJvbSB0aGUgcGxhbmUgb2YgdGhlIHNjcmVlbiAoMC02MCkuXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBwaXRjaHN0YXJ0XG4gICAgICogQGZpcmVzIG1vdmVzdGFydFxuICAgICAqIEBmaXJlcyBtb3ZlZW5kXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICovXG4gICAgc2V0UGl0Y2gocGl0Y2g6IG51bWJlciwgZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuanVtcFRvKHtwaXRjaH0sIGV2ZW50RGF0YSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIHtMbmdMYXRCb3VuZHNMaWtlfSBib3VuZHMgQ2FsY3VsYXRlIHRoZSBjZW50ZXIgZm9yIHRoZXNlIGJvdW5kcyBpbiB0aGUgdmlld3BvcnQgYW5kIHVzZVxuICAgICAqICAgICAgdGhlIGhpZ2hlc3Qgem9vbSBsZXZlbCB1cCB0byBhbmQgaW5jbHVkaW5nIGBNYXAjZ2V0TWF4Wm9vbSgpYCB0aGF0IGZpdHNcbiAgICAgKiAgICAgIGluIHRoZSB2aWV3cG9ydC4gTGF0TG5nQm91bmRzIHJlcHJlc2VudCBhIGJveCB0aGF0IGlzIGFsd2F5cyBheGlzLWFsaWduZWQgd2l0aCBiZWFyaW5nIDAuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBvYmplY3RcbiAgICAgKiBAcGFyYW0ge251bWJlciB8IFBhZGRpbmdPcHRpb25zfSBbb3B0aW9ucy5wYWRkaW5nXSBUaGUgYW1vdW50IG9mIHBhZGRpbmcgaW4gcGl4ZWxzIHRvIGFkZCB0byB0aGUgZ2l2ZW4gYm91bmRzLlxuICAgICAqIEBwYXJhbSB7UG9pbnRMaWtlfSBbb3B0aW9ucy5vZmZzZXQ9WzAsIDBdXSBUaGUgY2VudGVyIG9mIHRoZSBnaXZlbiBib3VuZHMgcmVsYXRpdmUgdG8gdGhlIG1hcCdzIGNlbnRlciwgbWVhc3VyZWQgaW4gcGl4ZWxzLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhab29tXSBUaGUgbWF4aW11bSB6b29tIGxldmVsIHRvIGFsbG93IHdoZW4gdGhlIGNhbWVyYSB3b3VsZCB0cmFuc2l0aW9uIHRvIHRoZSBzcGVjaWZpZWQgYm91bmRzLlxuICAgICAqIEByZXR1cm5zIHtDYW1lcmFPcHRpb25zIHwgdm9pZH0gSWYgbWFwIGlzIGFibGUgdG8gZml0IHRvIHByb3ZpZGVkIGJvdW5kcywgcmV0dXJucyBgQ2FtZXJhT3B0aW9uc2Agd2l0aFxuICAgICAqICAgICAgYGNlbnRlcmAsIGB6b29tYCwgYW5kIGBiZWFyaW5nYC4gSWYgbWFwIGlzIHVuYWJsZSB0byBmaXQsIG1ldGhvZCB3aWxsIHdhcm4gYW5kIHJldHVybiB1bmRlZmluZWQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgYmJveCA9IFtbLTc5LCA0M10sIFstNzMsIDQ1XV07XG4gICAgICogdmFyIG5ld0NhbWVyYVRyYW5zZm9ybSA9IG1hcC5jYW1lcmFGb3JCb3VuZHMoYmJveCwge1xuICAgICAqICAgcGFkZGluZzoge3RvcDogMTAsIGJvdHRvbToyNSwgbGVmdDogMTUsIHJpZ2h0OiA1fVxuICAgICAqIH0pO1xuICAgICAqL1xuICAgIGNhbWVyYUZvckJvdW5kcyhib3VuZHM6IExuZ0xhdEJvdW5kc0xpa2UsIG9wdGlvbnM/OiBDYW1lcmFPcHRpb25zKTogdm9pZCB8IENhbWVyYU9wdGlvbnMgJiBBbmltYXRpb25PcHRpb25zIHtcbiAgICAgICAgYm91bmRzID0gTG5nTGF0Qm91bmRzLmNvbnZlcnQoYm91bmRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbWVyYUZvckJveEFuZEJlYXJpbmcoYm91bmRzLmdldE5vcnRoV2VzdCgpLCBib3VuZHMuZ2V0U291dGhFYXN0KCksIDAsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY2VudGVyIG9mIHRoZXNlIHR3byBwb2ludHMgaW4gdGhlIHZpZXdwb3J0IGFuZCB1c2VcbiAgICAgKiB0aGUgaGlnaGVzdCB6b29tIGxldmVsIHVwIHRvIGFuZCBpbmNsdWRpbmcgYE1hcCNnZXRNYXhab29tKClgIHRoYXQgZml0c1xuICAgICAqIHRoZSBwb2ludHMgaW4gdGhlIHZpZXdwb3J0IGF0IHRoZSBzcGVjaWZpZWQgYmVhcmluZy5cbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSB7TG5nTGF0TGlrZX0gcDAgRmlyc3QgcG9pbnRcbiAgICAgKiBAcGFyYW0ge0xuZ0xhdExpa2V9IHAxIFNlY29uZCBwb2ludFxuICAgICAqIEBwYXJhbSBiZWFyaW5nIERlc2lyZWQgbWFwIGJlYXJpbmcgYXQgZW5kIG9mIGFuaW1hdGlvbiwgaW4gZGVncmVlc1xuICAgICAqIEBwYXJhbSBvcHRpb25zXG4gICAgICogQHBhcmFtIHtudW1iZXIgfCBQYWRkaW5nT3B0aW9uc30gW29wdGlvbnMucGFkZGluZ10gVGhlIGFtb3VudCBvZiBwYWRkaW5nIGluIHBpeGVscyB0byBhZGQgdG8gdGhlIGdpdmVuIGJvdW5kcy5cbiAgICAgKiBAcGFyYW0ge1BvaW50TGlrZX0gW29wdGlvbnMub2Zmc2V0PVswLCAwXV0gVGhlIGNlbnRlciBvZiB0aGUgZ2l2ZW4gYm91bmRzIHJlbGF0aXZlIHRvIHRoZSBtYXAncyBjZW50ZXIsIG1lYXN1cmVkIGluIHBpeGVscy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4Wm9vbV0gVGhlIG1heGltdW0gem9vbSBsZXZlbCB0byBhbGxvdyB3aGVuIHRoZSBjYW1lcmEgd291bGQgdHJhbnNpdGlvbiB0byB0aGUgc3BlY2lmaWVkIGJvdW5kcy5cbiAgICAgKiBAcmV0dXJucyB7Q2FtZXJhT3B0aW9ucyB8IHZvaWR9IElmIG1hcCBpcyBhYmxlIHRvIGZpdCB0byBwcm92aWRlZCBib3VuZHMsIHJldHVybnMgYENhbWVyYU9wdGlvbnNgIHdpdGhcbiAgICAgKiAgICAgIGBjZW50ZXJgLCBgem9vbWAsIGFuZCBgYmVhcmluZ2AuIElmIG1hcCBpcyB1bmFibGUgdG8gZml0LCBtZXRob2Qgd2lsbCB3YXJuIGFuZCByZXR1cm4gdW5kZWZpbmVkLlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgcDAgPSBbLTc5LCA0M107XG4gICAgICogdmFyIHAxID0gWy03MywgNDVdO1xuICAgICAqIHZhciBiZWFyaW5nID0gOTA7XG4gICAgICogdmFyIG5ld0NhbWVyYVRyYW5zZm9ybSA9IG1hcC5fY2FtZXJhRm9yQm94QW5kQmVhcmluZyhwMCwgcDEsIGJlYXJpbmcsIHtcbiAgICAgKiAgIHBhZGRpbmc6IHt0b3A6IDEwLCBib3R0b206MjUsIGxlZnQ6IDE1LCByaWdodDogNX1cbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICBfY2FtZXJhRm9yQm94QW5kQmVhcmluZyhwMDogTG5nTGF0TGlrZSwgcDE6IExuZ0xhdExpa2UsIGJlYXJpbmc6IG51bWJlciwgb3B0aW9ucz86IENhbWVyYU9wdGlvbnMpOiB2b2lkIHwgQ2FtZXJhT3B0aW9ucyAmIEFuaW1hdGlvbk9wdGlvbnMge1xuICAgICAgICBjb25zdCBkZWZhdWx0UGFkZGluZyA9IHtcbiAgICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICAgIGJvdHRvbTogMCxcbiAgICAgICAgICAgIHJpZ2h0OiAwLFxuICAgICAgICAgICAgbGVmdDogMFxuICAgICAgICB9O1xuICAgICAgICBvcHRpb25zID0gZXh0ZW5kKHtcbiAgICAgICAgICAgIHBhZGRpbmc6IGRlZmF1bHRQYWRkaW5nLFxuICAgICAgICAgICAgb2Zmc2V0OiBbMCwgMF0sXG4gICAgICAgICAgICBtYXhab29tOiB0aGlzLnRyYW5zZm9ybS5tYXhab29tXG4gICAgICAgIH0sIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5wYWRkaW5nID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgY29uc3QgcCA9IG9wdGlvbnMucGFkZGluZztcbiAgICAgICAgICAgIG9wdGlvbnMucGFkZGluZyA9IHtcbiAgICAgICAgICAgICAgICB0b3A6IHAsXG4gICAgICAgICAgICAgICAgYm90dG9tOiBwLFxuICAgICAgICAgICAgICAgIHJpZ2h0OiBwLFxuICAgICAgICAgICAgICAgIGxlZnQ6IHBcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBvcHRpb25zLnBhZGRpbmcgPSBleHRlbmQoZGVmYXVsdFBhZGRpbmcsIG9wdGlvbnMucGFkZGluZyk7XG4gICAgICAgIGNvbnN0IHRyID0gdGhpcy50cmFuc2Zvcm07XG4gICAgICAgIGNvbnN0IGVkZ2VQYWRkaW5nID0gdHIucGFkZGluZztcblxuICAgICAgICAvLyBXZSB3YW50IHRvIGNhbGN1bGF0ZSB0aGUgdXBwZXIgcmlnaHQgYW5kIGxvd2VyIGxlZnQgb2YgdGhlIGJveCBkZWZpbmVkIGJ5IHAwIGFuZCBwMVxuICAgICAgICAvLyBpbiBhIGNvb3JkaW5hdGUgc3lzdGVtIHJvdGF0ZSB0byBtYXRjaCB0aGUgZGVzdGluYXRpb24gYmVhcmluZy5cbiAgICAgICAgY29uc3QgcDB3b3JsZCA9IHRyLnByb2plY3QoTG5nTGF0LmNvbnZlcnQocDApKTtcbiAgICAgICAgY29uc3QgcDF3b3JsZCA9IHRyLnByb2plY3QoTG5nTGF0LmNvbnZlcnQocDEpKTtcbiAgICAgICAgY29uc3QgcDByb3RhdGVkID0gcDB3b3JsZC5yb3RhdGUoLWJlYXJpbmcgKiBNYXRoLlBJIC8gMTgwKTtcbiAgICAgICAgY29uc3QgcDFyb3RhdGVkID0gcDF3b3JsZC5yb3RhdGUoLWJlYXJpbmcgKiBNYXRoLlBJIC8gMTgwKTtcblxuICAgICAgICBjb25zdCB1cHBlclJpZ2h0ID0gbmV3IFBvaW50KE1hdGgubWF4KHAwcm90YXRlZC54LCBwMXJvdGF0ZWQueCksIE1hdGgubWF4KHAwcm90YXRlZC55LCBwMXJvdGF0ZWQueSkpO1xuICAgICAgICBjb25zdCBsb3dlckxlZnQgPSBuZXcgUG9pbnQoTWF0aC5taW4ocDByb3RhdGVkLngsIHAxcm90YXRlZC54KSwgTWF0aC5taW4ocDByb3RhdGVkLnksIHAxcm90YXRlZC55KSk7XG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlIHpvb206IGNvbnNpZGVyIHRoZSBvcmlnaW5hbCBiYm94IGFuZCBwYWRkaW5nLlxuICAgICAgICBjb25zdCBzaXplID0gdXBwZXJSaWdodC5zdWIobG93ZXJMZWZ0KTtcbiAgICAgICAgY29uc3Qgc2NhbGVYID0gKHRyLndpZHRoIC0gKGVkZ2VQYWRkaW5nLmxlZnQgKyBlZGdlUGFkZGluZy5yaWdodCArIG9wdGlvbnMucGFkZGluZy5sZWZ0ICsgb3B0aW9ucy5wYWRkaW5nLnJpZ2h0KSkgLyBzaXplLng7XG4gICAgICAgIGNvbnN0IHNjYWxlWSA9ICh0ci5oZWlnaHQgLSAoZWRnZVBhZGRpbmcudG9wICsgZWRnZVBhZGRpbmcuYm90dG9tICsgb3B0aW9ucy5wYWRkaW5nLnRvcCArIG9wdGlvbnMucGFkZGluZy5ib3R0b20pKSAvIHNpemUueTtcblxuICAgICAgICBpZiAoc2NhbGVZIDwgMCB8fCBzY2FsZVggPCAwKSB7XG4gICAgICAgICAgICB3YXJuT25jZShcbiAgICAgICAgICAgICAgICAnTWFwIGNhbm5vdCBmaXQgd2l0aGluIGNhbnZhcyB3aXRoIHRoZSBnaXZlbiBib3VuZHMsIHBhZGRpbmcsIGFuZC9vciBvZmZzZXQuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHpvb20gPSBNYXRoLm1pbih0ci5zY2FsZVpvb20odHIuc2NhbGUgKiBNYXRoLm1pbihzY2FsZVgsIHNjYWxlWSkpLCBvcHRpb25zLm1heFpvb20pO1xuXG4gICAgICAgIC8vIENhbGN1bGF0ZSBjZW50ZXI6IGFwcGx5IHRoZSB6b29tLCB0aGUgY29uZmlndXJlZCBvZmZzZXQsIGFzIHdlbGwgYXMgb2Zmc2V0IHRoYXQgZXhpc3RzIGFzIGEgcmVzdWx0IG9mIHBhZGRpbmcuXG4gICAgICAgIGNvbnN0IG9mZnNldCA9IFBvaW50LmNvbnZlcnQob3B0aW9ucy5vZmZzZXQpO1xuICAgICAgICBjb25zdCBwYWRkaW5nT2Zmc2V0WCA9IChvcHRpb25zLnBhZGRpbmcubGVmdCAtIG9wdGlvbnMucGFkZGluZy5yaWdodCkgLyAyO1xuICAgICAgICBjb25zdCBwYWRkaW5nT2Zmc2V0WSA9IChvcHRpb25zLnBhZGRpbmcudG9wIC0gb3B0aW9ucy5wYWRkaW5nLmJvdHRvbSkgLyAyO1xuICAgICAgICBjb25zdCBvZmZzZXRBdEluaXRpYWxab29tID0gbmV3IFBvaW50KG9mZnNldC54ICsgcGFkZGluZ09mZnNldFgsIG9mZnNldC55ICsgcGFkZGluZ09mZnNldFkpO1xuICAgICAgICBjb25zdCBvZmZzZXRBdEZpbmFsWm9vbSA9IG9mZnNldEF0SW5pdGlhbFpvb20ubXVsdCh0ci5zY2FsZSAvIHRyLnpvb21TY2FsZSh6b29tKSk7XG5cbiAgICAgICAgY29uc3QgY2VudGVyID0gIHRyLnVucHJvamVjdChwMHdvcmxkLmFkZChwMXdvcmxkKS5kaXYoMikuc3ViKG9mZnNldEF0RmluYWxab29tKSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNlbnRlcixcbiAgICAgICAgICAgIHpvb20sXG4gICAgICAgICAgICBiZWFyaW5nXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFucyBhbmQgem9vbXMgdGhlIG1hcCB0byBjb250YWluIGl0cyB2aXNpYmxlIGFyZWEgd2l0aGluIHRoZSBzcGVjaWZpZWQgZ2VvZ3JhcGhpY2FsIGJvdW5kcy5cbiAgICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWxzbyByZXNldCB0aGUgbWFwJ3MgYmVhcmluZyB0byAwIGlmIGJlYXJpbmcgaXMgbm9uemVyby5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHBhcmFtIGJvdW5kcyBDZW50ZXIgdGhlc2UgYm91bmRzIGluIHRoZSB2aWV3cG9ydCBhbmQgdXNlIHRoZSBoaWdoZXN0XG4gICAgICogICAgICB6b29tIGxldmVsIHVwIHRvIGFuZCBpbmNsdWRpbmcgYE1hcCNnZXRNYXhab29tKClgIHRoYXQgZml0cyB0aGVtIGluIHRoZSB2aWV3cG9ydC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIE9wdGlvbnMgc3VwcG9ydHMgYWxsIHByb3BlcnRpZXMgZnJvbSB7QGxpbmsgQW5pbWF0aW9uT3B0aW9uc30gYW5kIHtAbGluayBDYW1lcmFPcHRpb25zfSBpbiBhZGRpdGlvbiB0byB0aGUgZmllbGRzIGJlbG93LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyIHwgUGFkZGluZ09wdGlvbnN9IFtvcHRpb25zLnBhZGRpbmddIFRoZSBhbW91bnQgb2YgcGFkZGluZyBpbiBwaXhlbHMgdG8gYWRkIHRvIHRoZSBnaXZlbiBib3VuZHMuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5saW5lYXI9ZmFsc2VdIElmIGB0cnVlYCwgdGhlIG1hcCB0cmFuc2l0aW9ucyB1c2luZ1xuICAgICAqICAgICB7QGxpbmsgTWFwI2Vhc2VUb30uIElmIGBmYWxzZWAsIHRoZSBtYXAgdHJhbnNpdGlvbnMgdXNpbmcge0BsaW5rIE1hcCNmbHlUb30uIFNlZVxuICAgICAqICAgICB0aG9zZSBmdW5jdGlvbnMgYW5kIHtAbGluayBBbmltYXRpb25PcHRpb25zfSBmb3IgaW5mb3JtYXRpb24gYWJvdXQgb3B0aW9ucyBhdmFpbGFibGUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMuZWFzaW5nXSBBbiBlYXNpbmcgZnVuY3Rpb24gZm9yIHRoZSBhbmltYXRlZCB0cmFuc2l0aW9uLiBTZWUge0BsaW5rIEFuaW1hdGlvbk9wdGlvbnN9LlxuICAgICAqIEBwYXJhbSB7UG9pbnRMaWtlfSBbb3B0aW9ucy5vZmZzZXQ9WzAsIDBdXSBUaGUgY2VudGVyIG9mIHRoZSBnaXZlbiBib3VuZHMgcmVsYXRpdmUgdG8gdGhlIG1hcCdzIGNlbnRlciwgbWVhc3VyZWQgaW4gcGl4ZWxzLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhab29tXSBUaGUgbWF4aW11bSB6b29tIGxldmVsIHRvIGFsbG93IHdoZW4gdGhlIG1hcCB2aWV3IHRyYW5zaXRpb25zIHRvIHRoZSBzcGVjaWZpZWQgYm91bmRzLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbZXZlbnREYXRhXSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuXHQgKiBAZXhhbXBsZVxuICAgICAqIHZhciBiYm94ID0gW1stNzksIDQzXSwgWy03MywgNDVdXTtcbiAgICAgKiBtYXAuZml0Qm91bmRzKGJib3gsIHtcbiAgICAgKiAgIHBhZGRpbmc6IHt0b3A6IDEwLCBib3R0b206MjUsIGxlZnQ6IDE1LCByaWdodDogNX1cbiAgICAgKiB9KTtcbiAgICAgKiBAc2VlIFtGaXQgYSBtYXAgdG8gYSBib3VuZGluZyBib3hdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZml0Ym91bmRzLylcbiAgICAgKi9cbiAgICBmaXRCb3VuZHMoYm91bmRzOiBMbmdMYXRCb3VuZHNMaWtlLCBvcHRpb25zPzogQW5pbWF0aW9uT3B0aW9ucyAmIENhbWVyYU9wdGlvbnMsIGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZml0SW50ZXJuYWwoXG4gICAgICAgICAgICB0aGlzLmNhbWVyYUZvckJvdW5kcyhib3VuZHMsIG9wdGlvbnMpLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIGV2ZW50RGF0YSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFucywgcm90YXRlcyBhbmQgem9vbXMgdGhlIG1hcCB0byB0byBmaXQgdGhlIGJveCBtYWRlIGJ5IHBvaW50cyBwMCBhbmQgcDFcbiAgICAgKiBvbmNlIHRoZSBtYXAgaXMgcm90YXRlZCB0byB0aGUgc3BlY2lmaWVkIGJlYXJpbmcuIFRvIHpvb20gd2l0aG91dCByb3RhdGluZyxcbiAgICAgKiBwYXNzIGluIHRoZSBjdXJyZW50IG1hcCBiZWFyaW5nLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcGFyYW0gcDAgRmlyc3QgcG9pbnQgb24gc2NyZWVuLCBpbiBwaXhlbCBjb29yZGluYXRlc1xuICAgICAqIEBwYXJhbSBwMSBTZWNvbmQgcG9pbnQgb24gc2NyZWVuLCBpbiBwaXhlbCBjb29yZGluYXRlc1xuICAgICAqIEBwYXJhbSBiZWFyaW5nIERlc2lyZWQgbWFwIGJlYXJpbmcgYXQgZW5kIG9mIGFuaW1hdGlvbiwgaW4gZGVncmVlc1xuICAgICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgb2JqZWN0XG4gICAgICogQHBhcmFtIHtudW1iZXIgfCBQYWRkaW5nT3B0aW9uc30gW29wdGlvbnMucGFkZGluZ10gVGhlIGFtb3VudCBvZiBwYWRkaW5nIGluIHBpeGVscyB0byBhZGQgdG8gdGhlIGdpdmVuIGJvdW5kcy5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmxpbmVhcj1mYWxzZV0gSWYgYHRydWVgLCB0aGUgbWFwIHRyYW5zaXRpb25zIHVzaW5nXG4gICAgICogICAgIHtAbGluayBNYXAjZWFzZVRvfS4gSWYgYGZhbHNlYCwgdGhlIG1hcCB0cmFuc2l0aW9ucyB1c2luZyB7QGxpbmsgTWFwI2ZseVRvfS4gU2VlXG4gICAgICogICAgIHRob3NlIGZ1bmN0aW9ucyBhbmQge0BsaW5rIEFuaW1hdGlvbk9wdGlvbnN9IGZvciBpbmZvcm1hdGlvbiBhYm91dCBvcHRpb25zIGF2YWlsYWJsZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5lYXNpbmddIEFuIGVhc2luZyBmdW5jdGlvbiBmb3IgdGhlIGFuaW1hdGVkIHRyYW5zaXRpb24uIFNlZSB7QGxpbmsgQW5pbWF0aW9uT3B0aW9uc30uXG4gICAgICogQHBhcmFtIHtQb2ludExpa2V9IFtvcHRpb25zLm9mZnNldD1bMCwgMF1dIFRoZSBjZW50ZXIgb2YgdGhlIGdpdmVuIGJvdW5kcyByZWxhdGl2ZSB0byB0aGUgbWFwJ3MgY2VudGVyLCBtZWFzdXJlZCBpbiBwaXhlbHMuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1heFpvb21dIFRoZSBtYXhpbXVtIHpvb20gbGV2ZWwgdG8gYWxsb3cgd2hlbiB0aGUgbWFwIHZpZXcgdHJhbnNpdGlvbnMgdG8gdGhlIHNwZWNpZmllZCBib3VuZHMuXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuXHQgKiBAZXhhbXBsZVxuICAgICAqIHZhciBwMCA9IFsyMjAsIDQwMF07XG4gICAgICogdmFyIHAxID0gWzUwMCwgOTAwXTtcbiAgICAgKiBtYXAuZml0U2NyZWVuQ29vcmRpbmF0ZXMocDAsIHAxLCBtYXAuZ2V0QmVhcmluZygpLCB7XG4gICAgICogICBwYWRkaW5nOiB7dG9wOiAxMCwgYm90dG9tOjI1LCBsZWZ0OiAxNSwgcmlnaHQ6IDV9XG4gICAgICogfSk7XG4gICAgICogQHNlZSBbVXNlZCBieSBCb3hab29tSGFuZGxlcl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvYXBpLyNib3h6b29taGFuZGxlcilcbiAgICAgKi9cbiAgICBmaXRTY3JlZW5Db29yZGluYXRlcyhwMDogUG9pbnRMaWtlLCBwMTogUG9pbnRMaWtlLCBiZWFyaW5nOiBudW1iZXIsIG9wdGlvbnM/OiBBbmltYXRpb25PcHRpb25zICYgQ2FtZXJhT3B0aW9ucywgZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maXRJbnRlcm5hbChcbiAgICAgICAgICAgIHRoaXMuX2NhbWVyYUZvckJveEFuZEJlYXJpbmcoXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0ucG9pbnRMb2NhdGlvbihQb2ludC5jb252ZXJ0KHAwKSksXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0ucG9pbnRMb2NhdGlvbihQb2ludC5jb252ZXJ0KHAxKSksXG4gICAgICAgICAgICAgICAgYmVhcmluZyxcbiAgICAgICAgICAgICAgICBvcHRpb25zKSxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBldmVudERhdGEpO1xuICAgIH1cblxuICAgIF9maXRJbnRlcm5hbChjYWxjdWxhdGVkT3B0aW9ucz86IENhbWVyYU9wdGlvbnMgJiBBbmltYXRpb25PcHRpb25zLCBvcHRpb25zPzogQW5pbWF0aW9uT3B0aW9ucyAmIENhbWVyYU9wdGlvbnMsIGV2ZW50RGF0YT86IE9iamVjdCkge1xuICAgICAgICAvLyBjYW1lcmFGb3JCb3VuZHMgd2FybnMgKyByZXR1cm5zIHVuZGVmaW5lZCBpZiB1bmFibGUgdG8gZml0OlxuICAgICAgICBpZiAoIWNhbGN1bGF0ZWRPcHRpb25zKSByZXR1cm4gdGhpcztcblxuICAgICAgICBvcHRpb25zID0gZXh0ZW5kKGNhbGN1bGF0ZWRPcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgLy8gRXhwbGljdGx5IHJlbW92ZSB0aGUgcGFkZGluZyBmaWVsZCBiZWNhdXNlLCBjYWxjdWxhdGVkT3B0aW9ucyBhbHJlYWR5IGFjY291bnRzIGZvciBwYWRkaW5nIGJ5IHNldHRpbmcgem9vbSBhbmQgY2VudGVyIGFjY29yZGluZ2x5LlxuICAgICAgICBkZWxldGUgb3B0aW9ucy5wYWRkaW5nO1xuXG4gICAgICAgIHJldHVybiBvcHRpb25zLmxpbmVhciA/XG4gICAgICAgICAgICB0aGlzLmVhc2VUbyhvcHRpb25zLCBldmVudERhdGEpIDpcbiAgICAgICAgICAgIHRoaXMuZmx5VG8ob3B0aW9ucywgZXZlbnREYXRhKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGFuZ2VzIGFueSBjb21iaW5hdGlvbiBvZiBjZW50ZXIsIHpvb20sIGJlYXJpbmcsIGFuZCBwaXRjaCwgd2l0aG91dFxuICAgICAqIGFuIGFuaW1hdGVkIHRyYW5zaXRpb24uIFRoZSBtYXAgd2lsbCByZXRhaW4gaXRzIGN1cnJlbnQgdmFsdWVzIGZvciBhbnlcbiAgICAgKiBkZXRhaWxzIG5vdCBzcGVjaWZpZWQgaW4gYG9wdGlvbnNgLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIG9iamVjdFxuICAgICAqIEBwYXJhbSBldmVudERhdGEgQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIGV2ZW50IG9iamVjdHMgb2YgZXZlbnRzIHRyaWdnZXJlZCBieSB0aGlzIG1ldGhvZC5cbiAgICAgKiBAZmlyZXMgbW92ZXN0YXJ0XG4gICAgICogQGZpcmVzIHpvb21zdGFydFxuICAgICAqIEBmaXJlcyBwaXRjaHN0YXJ0XG4gICAgICogQGZpcmVzIHJvdGF0ZVxuICAgICAqIEBmaXJlcyBtb3ZlXG4gICAgICogQGZpcmVzIHpvb21cbiAgICAgKiBAZmlyZXMgcGl0Y2hcbiAgICAgKiBAZmlyZXMgbW92ZWVuZFxuICAgICAqIEBmaXJlcyB6b29tZW5kXG4gICAgICogQGZpcmVzIHBpdGNoZW5kXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBqdW1wIHRvIGNvb3JkaW5hdGVzIGF0IGN1cnJlbnQgem9vbVxuICAgICAqIG1hcC5qdW1wVG8oe2NlbnRlcjogWzAsIDBdfSk7XG4gICAgICogLy8ganVtcCB3aXRoIHpvb20sIHBpdGNoLCBhbmQgYmVhcmluZyBvcHRpb25zXG4gICAgICogbWFwLmp1bXBUbyh7XG4gICAgICogICBjZW50ZXI6IFswLCAwXSxcbiAgICAgKiAgIHpvb206IDgsXG4gICAgICogICBwaXRjaDogNDUsXG4gICAgICogICBiZWFyaW5nOiA5MFxuICAgICAqIH0pO1xuICAgICAqIEBzZWUgW0p1bXAgdG8gYSBzZXJpZXMgb2YgbG9jYXRpb25zXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9qdW1wLXRvLylcbiAgICAgKiBAc2VlIFtVcGRhdGUgYSBmZWF0dXJlIGluIHJlYWx0aW1lXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9saXZlLXVwZGF0ZS1mZWF0dXJlLylcbiAgICAgKi9cbiAgICBqdW1wVG8ob3B0aW9uczogQ2FtZXJhT3B0aW9ucywgZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuc3RvcCgpO1xuXG4gICAgICAgIGNvbnN0IHRyID0gdGhpcy50cmFuc2Zvcm07XG4gICAgICAgIGxldCB6b29tQ2hhbmdlZCA9IGZhbHNlLFxuICAgICAgICAgICAgYmVhcmluZ0NoYW5nZWQgPSBmYWxzZSxcbiAgICAgICAgICAgIHBpdGNoQ2hhbmdlZCA9IGZhbHNlO1xuXG4gICAgICAgIGlmICgnem9vbScgaW4gb3B0aW9ucyAmJiB0ci56b29tICE9PSArb3B0aW9ucy56b29tKSB7XG4gICAgICAgICAgICB6b29tQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICB0ci56b29tID0gK29wdGlvbnMuem9vbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmNlbnRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0ci5jZW50ZXIgPSBMbmdMYXQuY29udmVydChvcHRpb25zLmNlbnRlcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ2JlYXJpbmcnIGluIG9wdGlvbnMgJiYgdHIuYmVhcmluZyAhPT0gK29wdGlvbnMuYmVhcmluZykge1xuICAgICAgICAgICAgYmVhcmluZ0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgdHIuYmVhcmluZyA9ICtvcHRpb25zLmJlYXJpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ3BpdGNoJyBpbiBvcHRpb25zICYmIHRyLnBpdGNoICE9PSArb3B0aW9ucy5waXRjaCkge1xuICAgICAgICAgICAgcGl0Y2hDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRyLnBpdGNoID0gK29wdGlvbnMucGl0Y2g7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5wYWRkaW5nICE9IG51bGwgJiYgIXRyLmlzUGFkZGluZ0VxdWFsKG9wdGlvbnMucGFkZGluZykpIHtcbiAgICAgICAgICAgIHRyLnBhZGRpbmcgPSBvcHRpb25zLnBhZGRpbmc7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdtb3Zlc3RhcnQnLCBldmVudERhdGEpKVxuICAgICAgICAgICAgLmZpcmUobmV3IEV2ZW50KCdtb3ZlJywgZXZlbnREYXRhKSk7XG5cbiAgICAgICAgaWYgKHpvb21DaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCd6b29tc3RhcnQnLCBldmVudERhdGEpKVxuICAgICAgICAgICAgICAgIC5maXJlKG5ldyBFdmVudCgnem9vbScsIGV2ZW50RGF0YSkpXG4gICAgICAgICAgICAgICAgLmZpcmUobmV3IEV2ZW50KCd6b29tZW5kJywgZXZlbnREYXRhKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYmVhcmluZ0NoYW5nZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3JvdGF0ZXN0YXJ0JywgZXZlbnREYXRhKSlcbiAgICAgICAgICAgICAgICAuZmlyZShuZXcgRXZlbnQoJ3JvdGF0ZScsIGV2ZW50RGF0YSkpXG4gICAgICAgICAgICAgICAgLmZpcmUobmV3IEV2ZW50KCdyb3RhdGVlbmQnLCBldmVudERhdGEpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwaXRjaENoYW5nZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3BpdGNoc3RhcnQnLCBldmVudERhdGEpKVxuICAgICAgICAgICAgICAgIC5maXJlKG5ldyBFdmVudCgncGl0Y2gnLCBldmVudERhdGEpKVxuICAgICAgICAgICAgICAgIC5maXJlKG5ldyBFdmVudCgncGl0Y2hlbmQnLCBldmVudERhdGEpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmZpcmUobmV3IEV2ZW50KCdtb3ZlZW5kJywgZXZlbnREYXRhKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hhbmdlcyBhbnkgY29tYmluYXRpb24gb2YgY2VudGVyLCB6b29tLCBiZWFyaW5nLCBwaXRjaCwgYW5kIHBhZGRpbmcgd2l0aCBhbiBhbmltYXRlZCB0cmFuc2l0aW9uXG4gICAgICogYmV0d2VlbiBvbGQgYW5kIG5ldyB2YWx1ZXMuIFRoZSBtYXAgd2lsbCByZXRhaW4gaXRzIGN1cnJlbnQgdmFsdWVzIGZvciBhbnlcbiAgICAgKiBkZXRhaWxzIG5vdCBzcGVjaWZpZWQgaW4gYG9wdGlvbnNgLlxuICAgICAqXG4gICAgICogTm90ZTogVGhlIHRyYW5zaXRpb24gd2lsbCBoYXBwZW4gaW5zdGFudGx5IGlmIHRoZSB1c2VyIGhhcyBlbmFibGVkXG4gICAgICogdGhlIGByZWR1Y2VkIG1vdGlvbmAgYWNjZXNpYmlsaXR5IGZlYXR1cmUgZW5hYmxlZCBpbiB0aGVpciBvcGVyYXRpbmcgc3lzdGVtLFxuICAgICAqIHVubGVzcyAnb3B0aW9ucycgaW5jbHVkZXMgYGVzc2VudGlhbDogdHJ1ZWAuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgTWFwI1xuICAgICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZGVzY3JpYmluZyB0aGUgZGVzdGluYXRpb24gYW5kIGFuaW1hdGlvbiBvZiB0aGUgdHJhbnNpdGlvbi5cbiAgICAgKiAgICAgICAgICAgIEFjY2VwdHMge0BsaW5rIENhbWVyYU9wdGlvbnN9IGFuZCB7QGxpbmsgQW5pbWF0aW9uT3B0aW9uc30uXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgem9vbXN0YXJ0XG4gICAgICogQGZpcmVzIHBpdGNoc3RhcnRcbiAgICAgKiBAZmlyZXMgcm90YXRlXG4gICAgICogQGZpcmVzIG1vdmVcbiAgICAgKiBAZmlyZXMgem9vbVxuICAgICAqIEBmaXJlcyBwaXRjaFxuICAgICAqIEBmaXJlcyBtb3ZlZW5kXG4gICAgICogQGZpcmVzIHpvb21lbmRcbiAgICAgKiBAZmlyZXMgcGl0Y2hlbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAc2VlIFtOYXZpZ2F0ZSB0aGUgbWFwIHdpdGggZ2FtZS1saWtlIGNvbnRyb2xzXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2dhbWUtY29udHJvbHMvKVxuICAgICAqL1xuICAgIGVhc2VUbyhvcHRpb25zOiBDYW1lcmFPcHRpb25zICYgQW5pbWF0aW9uT3B0aW9ucyAmIHtlYXNlSWQ/OiBzdHJpbmd9LCBldmVudERhdGE/OiBPYmplY3QpIHtcbiAgICAgICAgdGhpcy5fc3RvcChmYWxzZSwgb3B0aW9ucy5lYXNlSWQpO1xuXG4gICAgICAgIG9wdGlvbnMgPSBleHRlbmQoe1xuICAgICAgICAgICAgb2Zmc2V0OiBbMCwgMF0sXG4gICAgICAgICAgICBkdXJhdGlvbjogNTAwLFxuICAgICAgICAgICAgZWFzaW5nOiBkZWZhdWx0RWFzaW5nXG4gICAgICAgIH0sIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmFuaW1hdGUgPT09IGZhbHNlIHx8ICghb3B0aW9ucy5lc3NlbnRpYWwgJiYgYnJvd3Nlci5wcmVmZXJzUmVkdWNlZE1vdGlvbikpIG9wdGlvbnMuZHVyYXRpb24gPSAwO1xuXG4gICAgICAgIGNvbnN0IHRyID0gdGhpcy50cmFuc2Zvcm0sXG4gICAgICAgICAgICBzdGFydFpvb20gPSB0aGlzLmdldFpvb20oKSxcbiAgICAgICAgICAgIHN0YXJ0QmVhcmluZyA9IHRoaXMuZ2V0QmVhcmluZygpLFxuICAgICAgICAgICAgc3RhcnRQaXRjaCA9IHRoaXMuZ2V0UGl0Y2goKSxcbiAgICAgICAgICAgIHN0YXJ0UGFkZGluZyA9IHRoaXMuZ2V0UGFkZGluZygpLFxuXG4gICAgICAgICAgICB6b29tID0gJ3pvb20nIGluIG9wdGlvbnMgPyArb3B0aW9ucy56b29tIDogc3RhcnRab29tLFxuICAgICAgICAgICAgYmVhcmluZyA9ICdiZWFyaW5nJyBpbiBvcHRpb25zID8gdGhpcy5fbm9ybWFsaXplQmVhcmluZyhvcHRpb25zLmJlYXJpbmcsIHN0YXJ0QmVhcmluZykgOiBzdGFydEJlYXJpbmcsXG4gICAgICAgICAgICBwaXRjaCA9ICdwaXRjaCcgaW4gb3B0aW9ucyA/ICtvcHRpb25zLnBpdGNoIDogc3RhcnRQaXRjaCxcbiAgICAgICAgICAgIHBhZGRpbmcgPSAncGFkZGluZycgaW4gb3B0aW9ucyA/IG9wdGlvbnMucGFkZGluZyA6IHRyLnBhZGRpbmc7XG5cbiAgICAgICAgY29uc3Qgb2Zmc2V0QXNQb2ludCA9IFBvaW50LmNvbnZlcnQob3B0aW9ucy5vZmZzZXQpO1xuICAgICAgICBsZXQgcG9pbnRBdE9mZnNldCA9IHRyLmNlbnRlclBvaW50LmFkZChvZmZzZXRBc1BvaW50KTtcbiAgICAgICAgY29uc3QgbG9jYXRpb25BdE9mZnNldCA9IHRyLnBvaW50TG9jYXRpb24ocG9pbnRBdE9mZnNldCk7XG4gICAgICAgIGNvbnN0IGNlbnRlciA9IExuZ0xhdC5jb252ZXJ0KG9wdGlvbnMuY2VudGVyIHx8IGxvY2F0aW9uQXRPZmZzZXQpO1xuICAgICAgICB0aGlzLl9ub3JtYWxpemVDZW50ZXIoY2VudGVyKTtcblxuICAgICAgICBjb25zdCBmcm9tID0gdHIucHJvamVjdChsb2NhdGlvbkF0T2Zmc2V0KTtcbiAgICAgICAgY29uc3QgZGVsdGEgPSB0ci5wcm9qZWN0KGNlbnRlcikuc3ViKGZyb20pO1xuICAgICAgICBjb25zdCBmaW5hbFNjYWxlID0gdHIuem9vbVNjYWxlKHpvb20gLSBzdGFydFpvb20pO1xuXG4gICAgICAgIGxldCBhcm91bmQsIGFyb3VuZFBvaW50O1xuXG4gICAgICAgIGlmIChvcHRpb25zLmFyb3VuZCkge1xuICAgICAgICAgICAgYXJvdW5kID0gTG5nTGF0LmNvbnZlcnQob3B0aW9ucy5hcm91bmQpO1xuICAgICAgICAgICAgYXJvdW5kUG9pbnQgPSB0ci5sb2NhdGlvblBvaW50KGFyb3VuZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjdXJyZW50bHkgPSB7XG4gICAgICAgICAgICBtb3Zpbmc6IHRoaXMuX21vdmluZyxcbiAgICAgICAgICAgIHpvb21pbmc6IHRoaXMuX3pvb21pbmcsXG4gICAgICAgICAgICByb3RhdGluZzogdGhpcy5fcm90YXRpbmcsXG4gICAgICAgICAgICBwaXRjaGluZzogdGhpcy5fcGl0Y2hpbmdcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLl96b29taW5nID0gdGhpcy5fem9vbWluZyB8fCAoem9vbSAhPT0gc3RhcnRab29tKTtcbiAgICAgICAgdGhpcy5fcm90YXRpbmcgPSB0aGlzLl9yb3RhdGluZyB8fCAoc3RhcnRCZWFyaW5nICE9PSBiZWFyaW5nKTtcbiAgICAgICAgdGhpcy5fcGl0Y2hpbmcgPSB0aGlzLl9waXRjaGluZyB8fCAocGl0Y2ggIT09IHN0YXJ0UGl0Y2gpO1xuICAgICAgICB0aGlzLl9wYWRkaW5nID0gIXRyLmlzUGFkZGluZ0VxdWFsKHBhZGRpbmcpO1xuXG4gICAgICAgIHRoaXMuX2Vhc2VJZCA9IG9wdGlvbnMuZWFzZUlkO1xuICAgICAgICB0aGlzLl9wcmVwYXJlRWFzZShldmVudERhdGEsIG9wdGlvbnMubm9Nb3ZlU3RhcnQsIGN1cnJlbnRseSk7XG5cbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2Vhc2VFbmRUaW1lb3V0SUQpO1xuXG4gICAgICAgIHRoaXMuX2Vhc2UoKGspID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl96b29taW5nKSB7XG4gICAgICAgICAgICAgICAgdHIuem9vbSA9IGludGVycG9sYXRlKHN0YXJ0Wm9vbSwgem9vbSwgayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fcm90YXRpbmcpIHtcbiAgICAgICAgICAgICAgICB0ci5iZWFyaW5nID0gaW50ZXJwb2xhdGUoc3RhcnRCZWFyaW5nLCBiZWFyaW5nLCBrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9waXRjaGluZykge1xuICAgICAgICAgICAgICAgIHRyLnBpdGNoID0gaW50ZXJwb2xhdGUoc3RhcnRQaXRjaCwgcGl0Y2gsIGspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX3BhZGRpbmcpIHtcbiAgICAgICAgICAgICAgICB0ci5pbnRlcnBvbGF0ZVBhZGRpbmcoc3RhcnRQYWRkaW5nLCBwYWRkaW5nLCBrKTtcbiAgICAgICAgICAgICAgICAvLyBXaGVuIHBhZGRpbmcgaXMgYmVpbmcgYXBwbGllZCwgVHJhbnNmb3JtI2NlbnRlclBvaW50IGlzIGNoYW5naW5nIGNvbnRpbm91c2x5LFxuICAgICAgICAgICAgICAgIC8vIHRodXMgd2UgbmVlZCB0byByZWNhbGN1bGF0ZSBvZmZzZXRQb2ludCBldmVyeSBmcmEsZVxuICAgICAgICAgICAgICAgIHBvaW50QXRPZmZzZXQgPSB0ci5jZW50ZXJQb2ludC5hZGQob2Zmc2V0QXNQb2ludCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChhcm91bmQpIHtcbiAgICAgICAgICAgICAgICB0ci5zZXRMb2NhdGlvbkF0UG9pbnQoYXJvdW5kLCBhcm91bmRQb2ludCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjYWxlID0gdHIuem9vbVNjYWxlKHRyLnpvb20gLSBzdGFydFpvb20pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJhc2UgPSB6b29tID4gc3RhcnRab29tID9cbiAgICAgICAgICAgICAgICAgICAgTWF0aC5taW4oMiwgZmluYWxTY2FsZSkgOlxuICAgICAgICAgICAgICAgICAgICBNYXRoLm1heCgwLjUsIGZpbmFsU2NhbGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNwZWVkdXAgPSBNYXRoLnBvdyhiYXNlLCAxIC0gayk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Q2VudGVyID0gdHIudW5wcm9qZWN0KGZyb20uYWRkKGRlbHRhLm11bHQoayAqIHNwZWVkdXApKS5tdWx0KHNjYWxlKSk7XG4gICAgICAgICAgICAgICAgdHIuc2V0TG9jYXRpb25BdFBvaW50KHRyLnJlbmRlcldvcmxkQ29waWVzID8gbmV3Q2VudGVyLndyYXAoKSA6IG5ld0NlbnRlciwgcG9pbnRBdE9mZnNldCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2ZpcmVNb3ZlRXZlbnRzKGV2ZW50RGF0YSk7XG5cbiAgICAgICAgfSwgKGludGVycnVwdGluZ0Vhc2VJZD86IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgdGhpcy5fYWZ0ZXJFYXNlKGV2ZW50RGF0YSwgaW50ZXJydXB0aW5nRWFzZUlkKTtcbiAgICAgICAgfSwgb3B0aW9ucyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgX3ByZXBhcmVFYXNlKGV2ZW50RGF0YT86IE9iamVjdCwgbm9Nb3ZlU3RhcnQ6IGJvb2xlYW4sIGN1cnJlbnRseTogT2JqZWN0ID0ge30pIHtcbiAgICAgICAgdGhpcy5fbW92aW5nID0gdHJ1ZTtcblxuICAgICAgICBpZiAoIW5vTW92ZVN0YXJ0ICYmICFjdXJyZW50bHkubW92aW5nKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdtb3Zlc3RhcnQnLCBldmVudERhdGEpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fem9vbWluZyAmJiAhY3VycmVudGx5Lnpvb21pbmcpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3pvb21zdGFydCcsIGV2ZW50RGF0YSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9yb3RhdGluZyAmJiAhY3VycmVudGx5LnJvdGF0aW5nKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdyb3RhdGVzdGFydCcsIGV2ZW50RGF0YSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9waXRjaGluZyAmJiAhY3VycmVudGx5LnBpdGNoaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdwaXRjaHN0YXJ0JywgZXZlbnREYXRhKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfZmlyZU1vdmVFdmVudHMoZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ21vdmUnLCBldmVudERhdGEpKTtcbiAgICAgICAgaWYgKHRoaXMuX3pvb21pbmcpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3pvb20nLCBldmVudERhdGEpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fcm90YXRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3JvdGF0ZScsIGV2ZW50RGF0YSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9waXRjaGluZykge1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgncGl0Y2gnLCBldmVudERhdGEpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9hZnRlckVhc2UoZXZlbnREYXRhPzogT2JqZWN0LCBlYXNlSWQ/OiBzdHJpbmcpIHtcbiAgICAgICAgLy8gaWYgdGhpcyBlYXNpbmcgaXMgYmVpbmcgc3RvcHBlZCB0byBzdGFydCBhbm90aGVyIGVhc2luZyB3aXRoXG4gICAgICAgIC8vIHRoZSBzYW1lIGlkIHRoZW4gZG9uJ3QgZmlyZSBhbnkgZXZlbnRzIHRvIGF2b2lkIGV4dHJhIHN0YXJ0L3N0b3AgZXZlbnRzXG4gICAgICAgIGlmICh0aGlzLl9lYXNlSWQgJiYgZWFzZUlkICYmIHRoaXMuX2Vhc2VJZCA9PT0gZWFzZUlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIHRoaXMuX2Vhc2VJZDtcblxuICAgICAgICBjb25zdCB3YXNab29taW5nID0gdGhpcy5fem9vbWluZztcbiAgICAgICAgY29uc3Qgd2FzUm90YXRpbmcgPSB0aGlzLl9yb3RhdGluZztcbiAgICAgICAgY29uc3Qgd2FzUGl0Y2hpbmcgPSB0aGlzLl9waXRjaGluZztcbiAgICAgICAgdGhpcy5fbW92aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3pvb21pbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcm90YXRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcGl0Y2hpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcGFkZGluZyA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh3YXNab29taW5nKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCd6b29tZW5kJywgZXZlbnREYXRhKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdhc1JvdGF0aW5nKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdyb3RhdGVlbmQnLCBldmVudERhdGEpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAod2FzUGl0Y2hpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3BpdGNoZW5kJywgZXZlbnREYXRhKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnbW92ZWVuZCcsIGV2ZW50RGF0YSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoYW5nZXMgYW55IGNvbWJpbmF0aW9uIG9mIGNlbnRlciwgem9vbSwgYmVhcmluZywgYW5kIHBpdGNoLCBhbmltYXRpbmcgdGhlIHRyYW5zaXRpb24gYWxvbmcgYSBjdXJ2ZSB0aGF0XG4gICAgICogZXZva2VzIGZsaWdodC4gVGhlIGFuaW1hdGlvbiBzZWFtbGVzc2x5IGluY29ycG9yYXRlcyB6b29taW5nIGFuZCBwYW5uaW5nIHRvIGhlbHBcbiAgICAgKiB0aGUgdXNlciBtYWludGFpbiBoZXIgYmVhcmluZ3MgZXZlbiBhZnRlciB0cmF2ZXJzaW5nIGEgZ3JlYXQgZGlzdGFuY2UuXG4gICAgICpcbiAgICAgKiBOb3RlOiBUaGUgYW5pbWF0aW9uIHdpbGwgYmUgc2tpcHBlZCwgYW5kIHRoaXMgd2lsbCBiZWhhdmUgZXF1aXZhbGVudGx5IHRvIGBqdW1wVG9gXG4gICAgICogaWYgdGhlIHVzZXIgaGFzIHRoZSBgcmVkdWNlZCBtb3Rpb25gIGFjY2VzaWJpbGl0eSBmZWF0dXJlIGVuYWJsZWQgaW4gdGhlaXIgb3BlcmF0aW5nIHN5c3RlbSxcbiAgICAgKiB1bmxlc3MgJ29wdGlvbnMnIGluY2x1ZGVzIGBlc3NlbnRpYWw6IHRydWVgLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE1hcCNcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBPcHRpb25zIGRlc2NyaWJpbmcgdGhlIGRlc3RpbmF0aW9uIGFuZCBhbmltYXRpb24gb2YgdGhlIHRyYW5zaXRpb24uXG4gICAgICogICAgIEFjY2VwdHMge0BsaW5rIENhbWVyYU9wdGlvbnN9LCB7QGxpbmsgQW5pbWF0aW9uT3B0aW9uc30sXG4gICAgICogICAgIGFuZCB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuY3VydmU9MS40Ml0gVGhlIHpvb21pbmcgXCJjdXJ2ZVwiIHRoYXQgd2lsbCBvY2N1ciBhbG9uZyB0aGVcbiAgICAgKiAgICAgZmxpZ2h0IHBhdGguIEEgaGlnaCB2YWx1ZSBtYXhpbWl6ZXMgem9vbWluZyBmb3IgYW4gZXhhZ2dlcmF0ZWQgYW5pbWF0aW9uLCB3aGlsZSBhIGxvd1xuICAgICAqICAgICB2YWx1ZSBtaW5pbWl6ZXMgem9vbWluZyBmb3IgYW4gZWZmZWN0IGNsb3NlciB0byB7QGxpbmsgTWFwI2Vhc2VUb30uIDEuNDIgaXMgdGhlIGF2ZXJhZ2VcbiAgICAgKiAgICAgdmFsdWUgc2VsZWN0ZWQgYnkgcGFydGljaXBhbnRzIGluIHRoZSB1c2VyIHN0dWR5IGRpc2N1c3NlZCBpblxuICAgICAqICAgICBbdmFuIFdpamsgKDIwMDMpXShodHRwczovL3d3dy53aW4udHVlLm5sL352YW53aWprL3pvb21wYW4ucGRmKS4gQSB2YWx1ZSBvZlxuICAgICAqICAgICBgTWF0aC5wb3coNiwgMC4yNSlgIHdvdWxkIGJlIGVxdWl2YWxlbnQgdG8gdGhlIHJvb3QgbWVhbiBzcXVhcmVkIGF2ZXJhZ2UgdmVsb2NpdHkuIEFcbiAgICAgKiAgICAgdmFsdWUgb2YgMSB3b3VsZCBwcm9kdWNlIGEgY2lyY3VsYXIgbW90aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5taW5ab29tXSBUaGUgemVyby1iYXNlZCB6b29tIGxldmVsIGF0IHRoZSBwZWFrIG9mIHRoZSBmbGlnaHQgcGF0aC4gSWZcbiAgICAgKiAgICAgYG9wdGlvbnMuY3VydmVgIGlzIHNwZWNpZmllZCwgdGhpcyBvcHRpb24gaXMgaWdub3JlZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuc3BlZWQ9MS4yXSBUaGUgYXZlcmFnZSBzcGVlZCBvZiB0aGUgYW5pbWF0aW9uIGRlZmluZWQgaW4gcmVsYXRpb24gdG9cbiAgICAgKiAgICAgYG9wdGlvbnMuY3VydmVgLiBBIHNwZWVkIG9mIDEuMiBtZWFucyB0aGF0IHRoZSBtYXAgYXBwZWFycyB0byBtb3ZlIGFsb25nIHRoZSBmbGlnaHQgcGF0aFxuICAgICAqICAgICBieSAxLjIgdGltZXMgYG9wdGlvbnMuY3VydmVgIHNjcmVlbmZ1bHMgZXZlcnkgc2Vjb25kLiBBIF9zY3JlZW5mdWxfIGlzIHRoZSBtYXAncyB2aXNpYmxlIHNwYW4uXG4gICAgICogICAgIEl0IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSBmaXhlZCBwaHlzaWNhbCBkaXN0YW5jZSwgYnV0IHZhcmllcyBieSB6b29tIGxldmVsLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5zY3JlZW5TcGVlZF0gVGhlIGF2ZXJhZ2Ugc3BlZWQgb2YgdGhlIGFuaW1hdGlvbiBtZWFzdXJlZCBpbiBzY3JlZW5mdWxzXG4gICAgICogICAgIHBlciBzZWNvbmQsIGFzc3VtaW5nIGEgbGluZWFyIHRpbWluZyBjdXJ2ZS4gSWYgYG9wdGlvbnMuc3BlZWRgIGlzIHNwZWNpZmllZCwgdGhpcyBvcHRpb24gaXMgaWdub3JlZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4RHVyYXRpb25dIFRoZSBhbmltYXRpb24ncyBtYXhpbXVtIGR1cmF0aW9uLCBtZWFzdXJlZCBpbiBtaWxsaXNlY29uZHMuXG4gICAgICogICAgIElmIGR1cmF0aW9uIGV4Y2VlZHMgbWF4aW11bSBkdXJhdGlvbiwgaXQgcmVzZXRzIHRvIDAuXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gZXZlbnQgb2JqZWN0cyBvZiBldmVudHMgdHJpZ2dlcmVkIGJ5IHRoaXMgbWV0aG9kLlxuICAgICAqIEBmaXJlcyBtb3Zlc3RhcnRcbiAgICAgKiBAZmlyZXMgem9vbXN0YXJ0XG4gICAgICogQGZpcmVzIHBpdGNoc3RhcnRcbiAgICAgKiBAZmlyZXMgbW92ZVxuICAgICAqIEBmaXJlcyB6b29tXG4gICAgICogQGZpcmVzIHJvdGF0ZVxuICAgICAqIEBmaXJlcyBwaXRjaFxuICAgICAqIEBmaXJlcyBtb3ZlZW5kXG4gICAgICogQGZpcmVzIHpvb21lbmRcbiAgICAgKiBAZmlyZXMgcGl0Y2hlbmRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIGZseSB3aXRoIGRlZmF1bHQgb3B0aW9ucyB0byBudWxsIGlzbGFuZFxuICAgICAqIG1hcC5mbHlUbyh7Y2VudGVyOiBbMCwgMF0sIHpvb206IDl9KTtcbiAgICAgKiAvLyB1c2luZyBmbHlUbyBvcHRpb25zXG4gICAgICogbWFwLmZseVRvKHtcbiAgICAgKiAgIGNlbnRlcjogWzAsIDBdLFxuICAgICAqICAgem9vbTogOSxcbiAgICAgKiAgIHNwZWVkOiAwLjIsXG4gICAgICogICBjdXJ2ZTogMSxcbiAgICAgKiAgIGVhc2luZyh0KSB7XG4gICAgICogICAgIHJldHVybiB0O1xuICAgICAqICAgfVxuICAgICAqIH0pO1xuICAgICAqIEBzZWUgW0ZseSB0byBhIGxvY2F0aW9uXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2ZseXRvLylcbiAgICAgKiBAc2VlIFtTbG93bHkgZmx5IHRvIGEgbG9jYXRpb25dKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZmx5dG8tb3B0aW9ucy8pXG4gICAgICogQHNlZSBbRmx5IHRvIGEgbG9jYXRpb24gYmFzZWQgb24gc2Nyb2xsIHBvc2l0aW9uXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3Njcm9sbC1mbHktdG8vKVxuICAgICAqL1xuICAgIGZseVRvKG9wdGlvbnM6IE9iamVjdCwgZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBqdW1wVG8gaWYgdXNlciBoYXMgc2V0IHByZWZlcnMtcmVkdWNlZC1tb3Rpb25cbiAgICAgICAgaWYgKCFvcHRpb25zLmVzc2VudGlhbCAmJiBicm93c2VyLnByZWZlcnNSZWR1Y2VkTW90aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBjb2VyY2VkT3B0aW9ucyA9IChwaWNrKG9wdGlvbnMsIFsnY2VudGVyJywgJ3pvb20nLCAnYmVhcmluZycsICdwaXRjaCcsICdhcm91bmQnXSk6IENhbWVyYU9wdGlvbnMpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuanVtcFRvKGNvZXJjZWRPcHRpb25zLCBldmVudERhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhpcyBtZXRob2QgaW1wbGVtZW50cyBhbiDDosKAwpxvcHRpbWFsIHBhdGjDosKAwp0gYW5pbWF0aW9uLCBhcyBkZXRhaWxlZCBpbjpcbiAgICAgICAgLy9cbiAgICAgICAgLy8gVmFuIFdpamssIEphcmtlIEouOyBOdWlqLCBXaW0gQS4gQS4gw6LCgMKcU21vb3RoIGFuZCBlZmZpY2llbnQgem9vbWluZyBhbmQgcGFubmluZy7DosKAwp0gSU5GT1ZJU1xuICAgICAgICAvLyAgIMOiwoDCmTAzLiBwcC4gMTXDosKAwpMyMi4gPGh0dHBzOi8vd3d3Lndpbi50dWUubmwvfnZhbndpamsvem9vbXBhbi5wZGYjcGFnZT01Pi5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gV2hlcmUgYXBwbGljYWJsZSwgbG9jYWwgdmFyaWFibGUgZG9jdW1lbnRhdGlvbiBiZWdpbnMgd2l0aCB0aGUgYXNzb2NpYXRlZCB2YXJpYWJsZSBvclxuICAgICAgICAvLyBmdW5jdGlvbiBpbiB2YW4gV2lqayAoMjAwMykuXG5cbiAgICAgICAgdGhpcy5zdG9wKCk7XG5cbiAgICAgICAgb3B0aW9ucyA9IGV4dGVuZCh7XG4gICAgICAgICAgICBvZmZzZXQ6IFswLCAwXSxcbiAgICAgICAgICAgIHNwZWVkOiAxLjIsXG4gICAgICAgICAgICBjdXJ2ZTogMS40MixcbiAgICAgICAgICAgIGVhc2luZzogZGVmYXVsdEVhc2luZ1xuICAgICAgICB9LCBvcHRpb25zKTtcblxuICAgICAgICBjb25zdCB0ciA9IHRoaXMudHJhbnNmb3JtLFxuICAgICAgICAgICAgc3RhcnRab29tID0gdGhpcy5nZXRab29tKCksXG4gICAgICAgICAgICBzdGFydEJlYXJpbmcgPSB0aGlzLmdldEJlYXJpbmcoKSxcbiAgICAgICAgICAgIHN0YXJ0UGl0Y2ggPSB0aGlzLmdldFBpdGNoKCksXG4gICAgICAgICAgICBzdGFydFBhZGRpbmcgPSB0aGlzLmdldFBhZGRpbmcoKTtcblxuICAgICAgICBjb25zdCB6b29tID0gJ3pvb20nIGluIG9wdGlvbnMgPyBjbGFtcCgrb3B0aW9ucy56b29tLCB0ci5taW5ab29tLCB0ci5tYXhab29tKSA6IHN0YXJ0Wm9vbTtcbiAgICAgICAgY29uc3QgYmVhcmluZyA9ICdiZWFyaW5nJyBpbiBvcHRpb25zID8gdGhpcy5fbm9ybWFsaXplQmVhcmluZyhvcHRpb25zLmJlYXJpbmcsIHN0YXJ0QmVhcmluZykgOiBzdGFydEJlYXJpbmc7XG4gICAgICAgIGNvbnN0IHBpdGNoID0gJ3BpdGNoJyBpbiBvcHRpb25zID8gK29wdGlvbnMucGl0Y2ggOiBzdGFydFBpdGNoO1xuICAgICAgICBjb25zdCBwYWRkaW5nID0gJ3BhZGRpbmcnIGluIG9wdGlvbnMgPyBvcHRpb25zLnBhZGRpbmcgOiB0ci5wYWRkaW5nO1xuXG4gICAgICAgIGNvbnN0IHNjYWxlID0gdHIuem9vbVNjYWxlKHpvb20gLSBzdGFydFpvb20pO1xuICAgICAgICBjb25zdCBvZmZzZXRBc1BvaW50ID0gUG9pbnQuY29udmVydChvcHRpb25zLm9mZnNldCk7XG4gICAgICAgIGxldCBwb2ludEF0T2Zmc2V0ID0gdHIuY2VudGVyUG9pbnQuYWRkKG9mZnNldEFzUG9pbnQpO1xuICAgICAgICBjb25zdCBsb2NhdGlvbkF0T2Zmc2V0ID0gdHIucG9pbnRMb2NhdGlvbihwb2ludEF0T2Zmc2V0KTtcbiAgICAgICAgY29uc3QgY2VudGVyID0gTG5nTGF0LmNvbnZlcnQob3B0aW9ucy5jZW50ZXIgfHwgbG9jYXRpb25BdE9mZnNldCk7XG4gICAgICAgIHRoaXMuX25vcm1hbGl6ZUNlbnRlcihjZW50ZXIpO1xuXG4gICAgICAgIGNvbnN0IGZyb20gPSB0ci5wcm9qZWN0KGxvY2F0aW9uQXRPZmZzZXQpO1xuICAgICAgICBjb25zdCBkZWx0YSA9IHRyLnByb2plY3QoY2VudGVyKS5zdWIoZnJvbSk7XG5cbiAgICAgICAgbGV0IHJobyA9IG9wdGlvbnMuY3VydmU7XG5cbiAgICAgICAgLy8gd8OiwoLCgDogSW5pdGlhbCB2aXNpYmxlIHNwYW4sIG1lYXN1cmVkIGluIHBpeGVscyBhdCB0aGUgaW5pdGlhbCBzY2FsZS5cbiAgICAgICAgY29uc3QgdzAgPSBNYXRoLm1heCh0ci53aWR0aCwgdHIuaGVpZ2h0KSxcbiAgICAgICAgICAgIC8vIHfDosKCwoE6IEZpbmFsIHZpc2libGUgc3BhbiwgbWVhc3VyZWQgaW4gcGl4ZWxzIHdpdGggcmVzcGVjdCB0byB0aGUgaW5pdGlhbCBzY2FsZS5cbiAgICAgICAgICAgIHcxID0gdzAgLyBzY2FsZSxcbiAgICAgICAgICAgIC8vIExlbmd0aCBvZiB0aGUgZmxpZ2h0IHBhdGggYXMgcHJvamVjdGVkIG9udG8gdGhlIGdyb3VuZCBwbGFuZSwgbWVhc3VyZWQgaW4gcGl4ZWxzIGZyb21cbiAgICAgICAgICAgIC8vIHRoZSB3b3JsZCBpbWFnZSBvcmlnaW4gYXQgdGhlIGluaXRpYWwgc2NhbGUuXG4gICAgICAgICAgICB1MSA9IGRlbHRhLm1hZygpO1xuXG4gICAgICAgIGlmICgnbWluWm9vbScgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgbWluWm9vbSA9IGNsYW1wKE1hdGgubWluKG9wdGlvbnMubWluWm9vbSwgc3RhcnRab29tLCB6b29tKSwgdHIubWluWm9vbSwgdHIubWF4Wm9vbSk7XG4gICAgICAgICAgICAvLyB3PHN1Yj5tPC9zdWI+OiBNYXhpbXVtIHZpc2libGUgc3BhbiwgbWVhc3VyZWQgaW4gcGl4ZWxzIHdpdGggcmVzcGVjdCB0byB0aGUgaW5pdGlhbFxuICAgICAgICAgICAgLy8gc2NhbGUuXG4gICAgICAgICAgICBjb25zdCB3TWF4ID0gdzAgLyB0ci56b29tU2NhbGUobWluWm9vbSAtIHN0YXJ0Wm9vbSk7XG4gICAgICAgICAgICByaG8gPSBNYXRoLnNxcnQod01heCAvIHUxICogMik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDDj8KBw4LCslxuICAgICAgICBjb25zdCByaG8yID0gcmhvICogcmhvO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiByw6HCtcKiOiBSZXR1cm5zIHRoZSB6b29tLW91dCBmYWN0b3IgYXQgb25lIGVuZCBvZiB0aGUgYW5pbWF0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gaSAwIGZvciB0aGUgYXNjZW50IG9yIDEgZm9yIHRoZSBkZXNjZW50LlxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gcihpKSB7XG4gICAgICAgICAgICBjb25zdCBiID0gKHcxICogdzEgLSB3MCAqIHcwICsgKGkgPyAtMSA6IDEpICogcmhvMiAqIHJobzIgKiB1MSAqIHUxKSAvICgyICogKGkgPyB3MSA6IHcwKSAqIHJobzIgKiB1MSk7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5sb2coTWF0aC5zcXJ0KGIgKiBiICsgMSkgLSBiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHNpbmgobikgeyByZXR1cm4gKE1hdGguZXhwKG4pIC0gTWF0aC5leHAoLW4pKSAvIDI7IH1cbiAgICAgICAgZnVuY3Rpb24gY29zaChuKSB7IHJldHVybiAoTWF0aC5leHAobikgKyBNYXRoLmV4cCgtbikpIC8gMjsgfVxuICAgICAgICBmdW5jdGlvbiB0YW5oKG4pIHsgcmV0dXJuIHNpbmgobikgLyBjb3NoKG4pOyB9XG5cbiAgICAgICAgLy8gcsOiwoLCgDogWm9vbS1vdXQgZmFjdG9yIGR1cmluZyBhc2NlbnQuXG4gICAgICAgIGNvbnN0IHIwID0gcigwKTtcblxuICAgICAgICAvLyB3KHMpOiBSZXR1cm5zIHRoZSB2aXNpYmxlIHNwYW4gb24gdGhlIGdyb3VuZCwgbWVhc3VyZWQgaW4gcGl4ZWxzIHdpdGggcmVzcGVjdCB0byB0aGVcbiAgICAgICAgLy8gaW5pdGlhbCBzY2FsZS4gQXNzdW1lcyBhbiBhbmd1bGFyIGZpZWxkIG9mIHZpZXcgb2YgMiBhcmN0YW4gw4LCvSDDosKJwoggNTPDgsKwLlxuICAgICAgICBsZXQgdzogKF86IG51bWJlcikgPT4gbnVtYmVyID0gZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgICAgIHJldHVybiAoY29zaChyMCkgLyBjb3NoKHIwICsgcmhvICogcykpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIHUocyk6IFJldHVybnMgdGhlIGRpc3RhbmNlIGFsb25nIHRoZSBmbGlnaHQgcGF0aCBhcyBwcm9qZWN0ZWQgb250byB0aGUgZ3JvdW5kIHBsYW5lLFxuICAgICAgICAvLyBtZWFzdXJlZCBpbiBwaXhlbHMgZnJvbSB0aGUgd29ybGQgaW1hZ2Ugb3JpZ2luIGF0IHRoZSBpbml0aWFsIHNjYWxlLlxuICAgICAgICBsZXQgdTogKF86IG51bWJlcikgPT4gbnVtYmVyID0gZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgICAgIHJldHVybiB3MCAqICgoY29zaChyMCkgKiB0YW5oKHIwICsgcmhvICogcykgLSBzaW5oKHIwKSkgLyByaG8yKSAvIHUxO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFM6IFRvdGFsIGxlbmd0aCBvZiB0aGUgZmxpZ2h0IHBhdGgsIG1lYXN1cmVkIGluIMOPwoEtc2NyZWVuZnVscy5cbiAgICAgICAgbGV0IFMgPSAocigxKSAtIHIwKSAvIHJobztcblxuICAgICAgICAvLyBXaGVuIHXDosKCwoAgPSB1w6LCgsKBLCB0aGUgb3B0aW1hbCBwYXRoIGRvZXNuw6LCgMKZdCByZXF1aXJlIGJvdGggYXNjZW50IGFuZCBkZXNjZW50LlxuICAgICAgICBpZiAoTWF0aC5hYnModTEpIDwgMC4wMDAwMDEgfHwgIWlzRmluaXRlKFMpKSB7XG4gICAgICAgICAgICAvLyBQZXJmb3JtIGEgbW9yZSBvciBsZXNzIGluc3RhbnRhbmVvdXMgdHJhbnNpdGlvbiBpZiB0aGUgcGF0aCBpcyB0b28gc2hvcnQuXG4gICAgICAgICAgICBpZiAoTWF0aC5hYnModzAgLSB3MSkgPCAwLjAwMDAwMSkgcmV0dXJuIHRoaXMuZWFzZVRvKG9wdGlvbnMsIGV2ZW50RGF0YSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGsgPSB3MSA8IHcwID8gLTEgOiAxO1xuICAgICAgICAgICAgUyA9IE1hdGguYWJzKE1hdGgubG9nKHcxIC8gdzApKSAvIHJobztcblxuICAgICAgICAgICAgdSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiAgICAgICAgICAgIHcgPSBmdW5jdGlvbihzKSB7IHJldHVybiBNYXRoLmV4cChrICogcmhvICogcyk7IH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ2R1cmF0aW9uJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBvcHRpb25zLmR1cmF0aW9uID0gK29wdGlvbnMuZHVyYXRpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBWID0gJ3NjcmVlblNwZWVkJyBpbiBvcHRpb25zID8gK29wdGlvbnMuc2NyZWVuU3BlZWQgLyByaG8gOiArb3B0aW9ucy5zcGVlZDtcbiAgICAgICAgICAgIG9wdGlvbnMuZHVyYXRpb24gPSAxMDAwICogUyAvIFY7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5tYXhEdXJhdGlvbiAmJiBvcHRpb25zLmR1cmF0aW9uID4gb3B0aW9ucy5tYXhEdXJhdGlvbikge1xuICAgICAgICAgICAgb3B0aW9ucy5kdXJhdGlvbiA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl96b29taW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fcm90YXRpbmcgPSAoc3RhcnRCZWFyaW5nICE9PSBiZWFyaW5nKTtcbiAgICAgICAgdGhpcy5fcGl0Y2hpbmcgPSAocGl0Y2ggIT09IHN0YXJ0UGl0Y2gpO1xuICAgICAgICB0aGlzLl9wYWRkaW5nID0gIXRyLmlzUGFkZGluZ0VxdWFsKHBhZGRpbmcpO1xuXG4gICAgICAgIHRoaXMuX3ByZXBhcmVFYXNlKGV2ZW50RGF0YSwgZmFsc2UpO1xuXG4gICAgICAgIHRoaXMuX2Vhc2UoKGspID0+IHtcbiAgICAgICAgICAgIC8vIHM6IFRoZSBkaXN0YW5jZSB0cmF2ZWxlZCBhbG9uZyB0aGUgZmxpZ2h0IHBhdGgsIG1lYXN1cmVkIGluIMOPwoEtc2NyZWVuZnVscy5cbiAgICAgICAgICAgIGNvbnN0IHMgPSBrICogUztcbiAgICAgICAgICAgIGNvbnN0IHNjYWxlID0gMSAvIHcocyk7XG4gICAgICAgICAgICB0ci56b29tID0gayA9PT0gMSA/IHpvb20gOiBzdGFydFpvb20gKyB0ci5zY2FsZVpvb20oc2NhbGUpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5fcm90YXRpbmcpIHtcbiAgICAgICAgICAgICAgICB0ci5iZWFyaW5nID0gaW50ZXJwb2xhdGUoc3RhcnRCZWFyaW5nLCBiZWFyaW5nLCBrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLl9waXRjaGluZykge1xuICAgICAgICAgICAgICAgIHRyLnBpdGNoID0gaW50ZXJwb2xhdGUoc3RhcnRQaXRjaCwgcGl0Y2gsIGspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX3BhZGRpbmcpIHtcbiAgICAgICAgICAgICAgICB0ci5pbnRlcnBvbGF0ZVBhZGRpbmcoc3RhcnRQYWRkaW5nLCBwYWRkaW5nLCBrKTtcbiAgICAgICAgICAgICAgICAvLyBXaGVuIHBhZGRpbmcgaXMgYmVpbmcgYXBwbGllZCwgVHJhbnNmb3JtI2NlbnRlclBvaW50IGlzIGNoYW5naW5nIGNvbnRpbm91c2x5LFxuICAgICAgICAgICAgICAgIC8vIHRodXMgd2UgbmVlZCB0byByZWNhbGN1bGF0ZSBvZmZzZXRQb2ludCBldmVyeSBmcmFtZVxuICAgICAgICAgICAgICAgIHBvaW50QXRPZmZzZXQgPSB0ci5jZW50ZXJQb2ludC5hZGQob2Zmc2V0QXNQb2ludCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld0NlbnRlciA9IGsgPT09IDEgPyBjZW50ZXIgOiB0ci51bnByb2plY3QoZnJvbS5hZGQoZGVsdGEubXVsdCh1KHMpKSkubXVsdChzY2FsZSkpO1xuICAgICAgICAgICAgdHIuc2V0TG9jYXRpb25BdFBvaW50KHRyLnJlbmRlcldvcmxkQ29waWVzID8gbmV3Q2VudGVyLndyYXAoKSA6IG5ld0NlbnRlciwgcG9pbnRBdE9mZnNldCk7XG5cbiAgICAgICAgICAgIHRoaXMuX2ZpcmVNb3ZlRXZlbnRzKGV2ZW50RGF0YSk7XG5cbiAgICAgICAgfSwgKCkgPT4gdGhpcy5fYWZ0ZXJFYXNlKGV2ZW50RGF0YSksIG9wdGlvbnMpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGlzRWFzaW5nKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9lYXNlRnJhbWVJZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTdG9wcyBhbnkgYW5pbWF0ZWQgdHJhbnNpdGlvbiB1bmRlcndheS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBNYXAjXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICovXG4gICAgc3RvcCgpOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0b3AoKTtcbiAgICB9XG5cbiAgICBfc3RvcChhbGxvd0dlc3R1cmVzPzogYm9vbGVhbiwgZWFzZUlkPzogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIGlmICh0aGlzLl9lYXNlRnJhbWVJZCkge1xuICAgICAgICAgICAgdGhpcy5fY2FuY2VsUmVuZGVyRnJhbWUodGhpcy5fZWFzZUZyYW1lSWQpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2Vhc2VGcmFtZUlkO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX29uRWFzZUZyYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX29uRWFzZUVuZCkge1xuICAgICAgICAgICAgLy8gVGhlIF9vbkVhc2VFbmQgZnVuY3Rpb24gbWlnaHQgZW1pdCBldmVudHMgd2hpY2ggdHJpZ2dlciBuZXdcbiAgICAgICAgICAgIC8vIGFuaW1hdGlvbiwgd2hpY2ggc2V0cyBhIG5ldyBfb25FYXNlRW5kLiBFbnN1cmUgd2UgZG9uJ3QgZGVsZXRlXG4gICAgICAgICAgICAvLyBpdCB1bmludGVudGlvbmFsbHkuXG4gICAgICAgICAgICBjb25zdCBvbkVhc2VFbmQgPSB0aGlzLl9vbkVhc2VFbmQ7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fb25FYXNlRW5kO1xuICAgICAgICAgICAgb25FYXNlRW5kLmNhbGwodGhpcywgZWFzZUlkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFsbG93R2VzdHVyZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXJzID0gKHRoaXM6IGFueSkuaGFuZGxlcnM7XG4gICAgICAgICAgICBpZiAoaGFuZGxlcnMpIGhhbmRsZXJzLnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBfZWFzZShmcmFtZTogKF86IG51bWJlcikgPT4gdm9pZCxcbiAgICAgICAgICBmaW5pc2g6ICgpID0+IHZvaWQsXG4gICAgICAgICAgb3B0aW9uczoge2FuaW1hdGU6IGJvb2xlYW4sIGR1cmF0aW9uOiBudW1iZXIsIGVhc2luZzogKF86IG51bWJlcikgPT4gbnVtYmVyfSkge1xuICAgICAgICBpZiAob3B0aW9ucy5hbmltYXRlID09PSBmYWxzZSB8fCBvcHRpb25zLmR1cmF0aW9uID09PSAwKSB7XG4gICAgICAgICAgICBmcmFtZSgxKTtcbiAgICAgICAgICAgIGZpbmlzaCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZWFzZVN0YXJ0ID0gYnJvd3Nlci5ub3coKTtcbiAgICAgICAgICAgIHRoaXMuX2Vhc2VPcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgICAgIHRoaXMuX29uRWFzZUZyYW1lID0gZnJhbWU7XG4gICAgICAgICAgICB0aGlzLl9vbkVhc2VFbmQgPSBmaW5pc2g7XG4gICAgICAgICAgICB0aGlzLl9lYXNlRnJhbWVJZCA9IHRoaXMuX3JlcXVlc3RSZW5kZXJGcmFtZSh0aGlzLl9yZW5kZXJGcmFtZUNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENhbGxiYWNrIGZvciBtYXAuX3JlcXVlc3RSZW5kZXJGcmFtZVxuICAgIF9yZW5kZXJGcmFtZUNhbGxiYWNrKCkge1xuICAgICAgICBjb25zdCB0ID0gTWF0aC5taW4oKGJyb3dzZXIubm93KCkgLSB0aGlzLl9lYXNlU3RhcnQpIC8gdGhpcy5fZWFzZU9wdGlvbnMuZHVyYXRpb24sIDEpO1xuICAgICAgICB0aGlzLl9vbkVhc2VGcmFtZSh0aGlzLl9lYXNlT3B0aW9ucy5lYXNpbmcodCkpO1xuICAgICAgICBpZiAodCA8IDEpIHtcbiAgICAgICAgICAgIHRoaXMuX2Vhc2VGcmFtZUlkID0gdGhpcy5fcmVxdWVzdFJlbmRlckZyYW1lKHRoaXMuX3JlbmRlckZyYW1lQ2FsbGJhY2spO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdG9wKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjb252ZXJ0IGJlYXJpbmcgc28gdGhhdCBpdCdzIG51bWVyaWNhbGx5IGNsb3NlIHRvIHRoZSBjdXJyZW50IG9uZSBzbyB0aGF0IGl0IGludGVycG9sYXRlcyBwcm9wZXJseVxuICAgIF9ub3JtYWxpemVCZWFyaW5nKGJlYXJpbmc6IG51bWJlciwgY3VycmVudEJlYXJpbmc6IG51bWJlcikge1xuICAgICAgICBiZWFyaW5nID0gd3JhcChiZWFyaW5nLCAtMTgwLCAxODApO1xuICAgICAgICBjb25zdCBkaWZmID0gTWF0aC5hYnMoYmVhcmluZyAtIGN1cnJlbnRCZWFyaW5nKTtcbiAgICAgICAgaWYgKE1hdGguYWJzKGJlYXJpbmcgLSAzNjAgLSBjdXJyZW50QmVhcmluZykgPCBkaWZmKSBiZWFyaW5nIC09IDM2MDtcbiAgICAgICAgaWYgKE1hdGguYWJzKGJlYXJpbmcgKyAzNjAgLSBjdXJyZW50QmVhcmluZykgPCBkaWZmKSBiZWFyaW5nICs9IDM2MDtcbiAgICAgICAgcmV0dXJuIGJlYXJpbmc7XG4gICAgfVxuXG4gICAgLy8gSWYgYSBwYXRoIGNyb3NzaW5nIHRoZSBhbnRpbWVyaWRpYW4gd291bGQgYmUgc2hvcnRlciwgZXh0ZW5kIHRoZSBmaW5hbCBjb29yZGluYXRlIHNvIHRoYXRcbiAgICAvLyBpbnRlcnBvbGF0aW5nIGJldHdlZW4gdGhlIHR3byBlbmRwb2ludHMgd2lsbCBjcm9zcyBpdC5cbiAgICBfbm9ybWFsaXplQ2VudGVyKGNlbnRlcjogTG5nTGF0KSB7XG4gICAgICAgIGNvbnN0IHRyID0gdGhpcy50cmFuc2Zvcm07XG4gICAgICAgIGlmICghdHIucmVuZGVyV29ybGRDb3BpZXMgfHwgdHIubG5nUmFuZ2UpIHJldHVybjtcblxuICAgICAgICBjb25zdCBkZWx0YSA9IGNlbnRlci5sbmcgLSB0ci5jZW50ZXIubG5nO1xuICAgICAgICBjZW50ZXIubG5nICs9XG4gICAgICAgICAgICBkZWx0YSA+IDE4MCA/IC0zNjAgOlxuICAgICAgICAgICAgZGVsdGEgPCAtMTgwID8gMzYwIDogMDtcbiAgICB9XG59XG5cbi8vIEluIGRlYnVnIGJ1aWxkcywgY2hlY2sgdGhhdCBjYW1lcmEgY2hhbmdlIGV2ZW50cyBhcmUgZmlyZWQgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuXG4vLyAtIF9fX3N0YXJ0IGV2ZW50cyBuZWVkcyB0byBiZSBmaXJlZCBiZWZvcmUgX19fIGFuZCBfX19lbmQgZXZlbnRzXG4vLyAtIGFub3RoZXIgX19fc3RhcnQgZXZlbnQgY2FuJ3QgYmUgZmlyZWQgYmVmb3JlIGEgX19fZW5kIGV2ZW50IGhhcyBiZWVuIGZpcmVkIGZvciB0aGUgcHJldmlvdXMgb25lXG5mdW5jdGlvbiBhZGRBc3NlcnRpb25zKGNhbWVyYTogQ2FtZXJhKSB7IC8vZXNsaW50LWRpc2FibGUtbGluZVxuICAgIERlYnVnLnJ1bigoKSA9PiB7XG4gICAgICAgIGNvbnN0IGluUHJvZ3Jlc3MgPSB7fTtcblxuICAgICAgICBbJ2RyYWcnLCAnem9vbScsICdyb3RhdGUnLCAncGl0Y2gnLCAnbW92ZSddLmZvckVhY2gobmFtZSA9PiB7XG4gICAgICAgICAgICBpblByb2dyZXNzW25hbWVdID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGNhbWVyYS5vbihgJHtuYW1lfXN0YXJ0YCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGFzc2VydCghaW5Qcm9ncmVzc1tuYW1lXSwgYFwiJHtuYW1lfXN0YXJ0XCIgZmlyZWQgdHdpY2Ugd2l0aG91dCBhIFwiJHtuYW1lfWVuZFwiYCk7XG4gICAgICAgICAgICAgICAgaW5Qcm9ncmVzc1tuYW1lXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGluUHJvZ3Jlc3MubW92ZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY2FtZXJhLm9uKG5hbWUsICgpID0+IHtcbiAgICAgICAgICAgICAgICBhc3NlcnQoaW5Qcm9ncmVzc1tuYW1lXSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGluUHJvZ3Jlc3MubW92ZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY2FtZXJhLm9uKGAke25hbWV9ZW5kYCwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGFzc2VydChpblByb2dyZXNzLm1vdmUpO1xuICAgICAgICAgICAgICAgIGFzc2VydChpblByb2dyZXNzW25hbWVdKTtcbiAgICAgICAgICAgICAgICBpblByb2dyZXNzW25hbWVdID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gQ2FuYXJ5IHVzZWQgdG8gdGVzdCB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gaXMgc3RyaXBwZWQgaW4gcHJvZCBidWlsZFxuICAgICAgICBjYW5hcnkgPSAnY2FuYXJ5IGRlYnVnIHJ1bic7XG4gICAgfSk7XG59XG5cbmxldCBjYW5hcnk7IC8vZXNsaW50LWRpc2FibGUtbGluZVxuXG5leHBvcnQgZGVmYXVsdCBDYW1lcmE7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgRE9NIGZyb20gJy4uLy4uL3V0aWwvZG9tJztcbmltcG9ydCB7YmluZEFsbH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCBjb25maWcgZnJvbSAnLi4vLi4vdXRpbC9jb25maWcnO1xuXG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vbWFwJztcblxudHlwZSBPcHRpb25zID0ge1xuICAgIGNvbXBhY3Q/OiBib29sZWFuLFxuICAgIGN1c3RvbUF0dHJpYnV0aW9uPzogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPlxufTtcblxuLyoqXG4gKiBBbiBgQXR0cmlidXRpb25Db250cm9sYCBjb250cm9sIHByZXNlbnRzIHRoZSBtYXAncyBbYXR0cmlidXRpb24gaW5mb3JtYXRpb25dKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vaGVscC9hdHRyaWJ1dGlvbi8pLlxuICpcbiAqIEBpbXBsZW1lbnRzIHtJQ29udHJvbH1cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuY29tcGFjdF0gSWYgYHRydWVgIGZvcmNlIGEgY29tcGFjdCBhdHRyaWJ1dGlvbiB0aGF0IHNob3dzIHRoZSBmdWxsIGF0dHJpYnV0aW9uIG9uIG1vdXNlIGhvdmVyLCBvciBpZiBgZmFsc2VgIGZvcmNlIHRoZSBmdWxsIGF0dHJpYnV0aW9uIGNvbnRyb2wuIFRoZSBkZWZhdWx0IGlzIGEgcmVzcG9uc2l2ZSBhdHRyaWJ1dGlvbiB0aGF0IGNvbGxhcHNlcyB3aGVuIHRoZSBtYXAgaXMgbGVzcyB0aGFuIDY0MCBwaXhlbHMgd2lkZS5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgQXJyYXk8c3RyaW5nPn0gW29wdGlvbnMuY3VzdG9tQXR0cmlidXRpb25dIFN0cmluZyBvciBzdHJpbmdzIHRvIHNob3cgaW4gYWRkaXRpb24gdG8gYW55IG90aGVyIGF0dHJpYnV0aW9ucy5cbiAqIEBleGFtcGxlXG4gKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7YXR0cmlidXRpb25Db250cm9sOiBmYWxzZX0pXG4gKiAgICAgLmFkZENvbnRyb2wobmV3IG1hcGJveGdsLkF0dHJpYnV0aW9uQ29udHJvbCh7XG4gKiAgICAgICAgIGNvbXBhY3Q6IHRydWVcbiAqICAgICB9KSk7XG4gKi9cbmNsYXNzIEF0dHJpYnV0aW9uQ29udHJvbCB7XG4gICAgb3B0aW9uczogT3B0aW9ucztcbiAgICBfbWFwOiBNYXA7XG4gICAgX2NvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gICAgX2lubmVyQ29udGFpbmVyOiBIVE1MRWxlbWVudDtcbiAgICBfZWRpdExpbms6ID9IVE1MQW5jaG9yRWxlbWVudDtcbiAgICBfYXR0cmliSFRNTDogc3RyaW5nO1xuICAgIHN0eWxlSWQ6IHN0cmluZztcbiAgICBzdHlsZU93bmVyOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBPcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICAgICAgICBiaW5kQWxsKFtcbiAgICAgICAgICAgICdfdXBkYXRlRWRpdExpbmsnLFxuICAgICAgICAgICAgJ191cGRhdGVEYXRhJyxcbiAgICAgICAgICAgICdfdXBkYXRlQ29tcGFjdCdcbiAgICAgICAgXSwgdGhpcyk7XG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdFBvc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gJ2JvdHRvbS1yaWdodCc7XG4gICAgfVxuXG4gICAgb25BZGQobWFwOiBNYXApIHtcbiAgICAgICAgY29uc3QgY29tcGFjdCA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuY29tcGFjdDtcblxuICAgICAgICB0aGlzLl9tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMuX2NvbnRhaW5lciA9IERPTS5jcmVhdGUoJ2RpdicsICdtYXBib3hnbC1jdHJsIG1hcGJveGdsLWN0cmwtYXR0cmliJyk7XG4gICAgICAgIHRoaXMuX2lubmVyQ29udGFpbmVyID0gRE9NLmNyZWF0ZSgnZGl2JywgJ21hcGJveGdsLWN0cmwtYXR0cmliLWlubmVyJywgdGhpcy5fY29udGFpbmVyKTtcblxuICAgICAgICBpZiAoY29tcGFjdCkge1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWNvbXBhY3QnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3VwZGF0ZUF0dHJpYnV0aW9ucygpO1xuICAgICAgICB0aGlzLl91cGRhdGVFZGl0TGluaygpO1xuXG4gICAgICAgIHRoaXMuX21hcC5vbignc3R5bGVkYXRhJywgdGhpcy5fdXBkYXRlRGF0YSk7XG4gICAgICAgIHRoaXMuX21hcC5vbignc291cmNlZGF0YScsIHRoaXMuX3VwZGF0ZURhdGEpO1xuICAgICAgICB0aGlzLl9tYXAub24oJ21vdmVlbmQnLCB0aGlzLl91cGRhdGVFZGl0TGluayk7XG5cbiAgICAgICAgaWYgKGNvbXBhY3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9uKCdyZXNpemUnLCB0aGlzLl91cGRhdGVDb21wYWN0KTtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUNvbXBhY3QoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXI7XG4gICAgfVxuXG4gICAgb25SZW1vdmUoKSB7XG4gICAgICAgIERPTS5yZW1vdmUodGhpcy5fY29udGFpbmVyKTtcblxuICAgICAgICB0aGlzLl9tYXAub2ZmKCdzdHlsZWRhdGEnLCB0aGlzLl91cGRhdGVEYXRhKTtcbiAgICAgICAgdGhpcy5fbWFwLm9mZignc291cmNlZGF0YScsIHRoaXMuX3VwZGF0ZURhdGEpO1xuICAgICAgICB0aGlzLl9tYXAub2ZmKCdtb3ZlZW5kJywgdGhpcy5fdXBkYXRlRWRpdExpbmspO1xuICAgICAgICB0aGlzLl9tYXAub2ZmKCdyZXNpemUnLCB0aGlzLl91cGRhdGVDb21wYWN0KTtcblxuICAgICAgICB0aGlzLl9tYXAgPSAodW5kZWZpbmVkOiBhbnkpO1xuICAgICAgICB0aGlzLl9hdHRyaWJIVE1MID0gKHVuZGVmaW5lZDogYW55KTtcbiAgICB9XG5cbiAgICBfdXBkYXRlRWRpdExpbmsoKSB7XG4gICAgICAgIGxldCBlZGl0TGluayA9IHRoaXMuX2VkaXRMaW5rO1xuICAgICAgICBpZiAoIWVkaXRMaW5rKSB7XG4gICAgICAgICAgICBlZGl0TGluayA9IHRoaXMuX2VkaXRMaW5rID0gKHRoaXMuX2NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcubWFwYm94LWltcHJvdmUtbWFwJyk6IGFueSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJhbXMgPSBbXG4gICAgICAgICAgICB7a2V5OiBcIm93bmVyXCIsIHZhbHVlOiB0aGlzLnN0eWxlT3duZXJ9LFxuICAgICAgICAgICAge2tleTogXCJpZFwiLCB2YWx1ZTogdGhpcy5zdHlsZUlkfSxcbiAgICAgICAgICAgIHtrZXk6IFwiYWNjZXNzX3Rva2VuXCIsIHZhbHVlOiB0aGlzLl9tYXAuX3JlcXVlc3RNYW5hZ2VyLl9jdXN0b21BY2Nlc3NUb2tlbiB8fCBjb25maWcuQUNDRVNTX1RPS0VOfVxuICAgICAgICBdO1xuXG4gICAgICAgIGlmIChlZGl0TGluaykge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1TdHJpbmcgPSBwYXJhbXMucmVkdWNlKChhY2MsIG5leHQsIGkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobmV4dC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBhY2MgKz0gYCR7bmV4dC5rZXl9PSR7bmV4dC52YWx1ZX0ke2kgPCBwYXJhbXMubGVuZ3RoIC0gMSA/ICcmJyA6ICcnfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LCBgP2ApO1xuICAgICAgICAgICAgZWRpdExpbmsuaHJlZiA9IGAke2NvbmZpZy5GRUVEQkFDS19VUkx9LyR7cGFyYW1TdHJpbmd9JHt0aGlzLl9tYXAuX2hhc2ggPyB0aGlzLl9tYXAuX2hhc2guZ2V0SGFzaFN0cmluZyh0cnVlKSA6ICcnfWA7XG4gICAgICAgICAgICBlZGl0TGluay5yZWwgPSBcIm5vb3BlbmVyIG5vZm9sbG93XCI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfdXBkYXRlRGF0YShlOiBhbnkpIHtcbiAgICAgICAgaWYgKGUgJiYgKGUuc291cmNlRGF0YVR5cGUgPT09ICdtZXRhZGF0YScgfHwgZS5kYXRhVHlwZSA9PT0gJ3N0eWxlJykpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUF0dHJpYnV0aW9ucygpO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlRWRpdExpbmsoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF91cGRhdGVBdHRyaWJ1dGlvbnMoKSB7XG4gICAgICAgIGlmICghdGhpcy5fbWFwLnN0eWxlKSByZXR1cm47XG4gICAgICAgIGxldCBhdHRyaWJ1dGlvbnM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jdXN0b21BdHRyaWJ1dGlvbikge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5vcHRpb25zLmN1c3RvbUF0dHJpYnV0aW9uKSkge1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0aW9ucyA9IGF0dHJpYnV0aW9ucy5jb25jYXQoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5jdXN0b21BdHRyaWJ1dGlvbi5tYXAoYXR0cmlidXRpb24gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhdHRyaWJ1dGlvbiAhPT0gJ3N0cmluZycpIHJldHVybiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGlvbjtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLmN1c3RvbUF0dHJpYnV0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0aW9ucy5wdXNoKHRoaXMub3B0aW9ucy5jdXN0b21BdHRyaWJ1dGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fbWFwLnN0eWxlLnN0eWxlc2hlZXQpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0eWxlc2hlZXQ6IGFueSA9IHRoaXMuX21hcC5zdHlsZS5zdHlsZXNoZWV0O1xuICAgICAgICAgICAgdGhpcy5zdHlsZU93bmVyID0gc3R5bGVzaGVldC5vd25lcjtcbiAgICAgICAgICAgIHRoaXMuc3R5bGVJZCA9IHN0eWxlc2hlZXQuaWQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzb3VyY2VDYWNoZXMgPSB0aGlzLl9tYXAuc3R5bGUuc291cmNlQ2FjaGVzO1xuICAgICAgICBmb3IgKGNvbnN0IGlkIGluIHNvdXJjZUNhY2hlcykge1xuICAgICAgICAgICAgY29uc3Qgc291cmNlQ2FjaGUgPSBzb3VyY2VDYWNoZXNbaWRdO1xuICAgICAgICAgICAgaWYgKHNvdXJjZUNhY2hlLnVzZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBzb3VyY2VDYWNoZS5nZXRTb3VyY2UoKTtcbiAgICAgICAgICAgICAgICBpZiAoc291cmNlLmF0dHJpYnV0aW9uICYmIGF0dHJpYnV0aW9ucy5pbmRleE9mKHNvdXJjZS5hdHRyaWJ1dGlvbikgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0aW9ucy5wdXNoKHNvdXJjZS5hdHRyaWJ1dGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmVtb3ZlIGFueSBlbnRyaWVzIHRoYXQgYXJlIHN1YnN0cmluZ3Mgb2YgYW5vdGhlciBlbnRyeS5cbiAgICAgICAgLy8gZmlyc3Qgc29ydCBieSBsZW5ndGggc28gdGhhdCBzdWJzdHJpbmdzIGNvbWUgZmlyc3RcbiAgICAgICAgYXR0cmlidXRpb25zLnNvcnQoKGEsIGIpID0+IGEubGVuZ3RoIC0gYi5sZW5ndGgpO1xuICAgICAgICBhdHRyaWJ1dGlvbnMgPSBhdHRyaWJ1dGlvbnMuZmlsdGVyKChhdHRyaWIsIGkpID0+IHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IGF0dHJpYnV0aW9ucy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGlvbnNbal0uaW5kZXhPZihhdHRyaWIpID49IDApIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gY2hlY2sgaWYgYXR0cmlidXRpb24gc3RyaW5nIGlzIGRpZmZlcmVudCB0byBtaW5pbWl6ZSBET00gY2hhbmdlc1xuICAgICAgICBjb25zdCBhdHRyaWJIVE1MID0gYXR0cmlidXRpb25zLmpvaW4oJyB8ICcpO1xuICAgICAgICBpZiAoYXR0cmliSFRNTCA9PT0gdGhpcy5fYXR0cmliSFRNTCkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuX2F0dHJpYkhUTUwgPSBhdHRyaWJIVE1MO1xuXG4gICAgICAgIGlmIChhdHRyaWJ1dGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLl9pbm5lckNvbnRhaW5lci5pbm5lckhUTUwgPSBhdHRyaWJIVE1MO1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWF0dHJpYi1lbXB0eScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWF0dHJpYi1lbXB0eScpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlbW92ZSBvbGQgRE9NIG5vZGUgZnJvbSBfZWRpdExpbmtcbiAgICAgICAgdGhpcy5fZWRpdExpbmsgPSBudWxsO1xuICAgIH1cblxuICAgIF91cGRhdGVDb21wYWN0KCkge1xuICAgICAgICBpZiAodGhpcy5fbWFwLmdldENhbnZhc0NvbnRhaW5lcigpLm9mZnNldFdpZHRoIDw9IDY0MCkge1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWNvbXBhY3QnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jb21wYWN0Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuZXhwb3J0IGRlZmF1bHQgQXR0cmlidXRpb25Db250cm9sO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IERPTSBmcm9tICcuLi8uLi91dGlsL2RvbSc7XG5cbmltcG9ydCB7YmluZEFsbH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcblxuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL21hcCc7XG5cbi8qKlxuICogQSBgTG9nb0NvbnRyb2xgIGlzIGEgY29udHJvbCB0aGF0IGFkZHMgdGhlIE1hcGJveCB3YXRlcm1hcmtcbiAqIHRvIHRoZSBtYXAgYXMgcmVxdWlyZWQgYnkgdGhlIFt0ZXJtcyBvZiBzZXJ2aWNlXShodHRwczovL3d3dy5tYXBib3guY29tL3Rvcy8pIGZvciBNYXBib3hcbiAqIHZlY3RvciB0aWxlcyBhbmQgY29yZSBzdHlsZXMuXG4gKlxuICogQGltcGxlbWVudHMge0lDb250cm9sfVxuICogQHByaXZhdGVcbioqL1xuXG5jbGFzcyBMb2dvQ29udHJvbCB7XG4gICAgX21hcDogTWFwO1xuICAgIF9jb250YWluZXI6IEhUTUxFbGVtZW50O1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGJpbmRBbGwoWydfdXBkYXRlTG9nbyddLCB0aGlzKTtcbiAgICAgICAgYmluZEFsbChbJ191cGRhdGVDb21wYWN0J10sIHRoaXMpO1xuICAgIH1cblxuICAgIG9uQWRkKG1hcDogTWFwKSB7XG4gICAgICAgIHRoaXMuX21hcCA9IG1hcDtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyID0gRE9NLmNyZWF0ZSgnZGl2JywgJ21hcGJveGdsLWN0cmwnKTtcbiAgICAgICAgY29uc3QgYW5jaG9yID0gRE9NLmNyZWF0ZSgnYScsICdtYXBib3hnbC1jdHJsLWxvZ28nKTtcbiAgICAgICAgYW5jaG9yLnRhcmdldCA9IFwiX2JsYW5rXCI7XG4gICAgICAgIGFuY2hvci5yZWwgPSBcIm5vb3BlbmVyIG5vZm9sbG93XCI7XG4gICAgICAgIGFuY2hvci5ocmVmID0gXCJodHRwczovL3d3dy5tYXBib3guY29tL1wiO1xuICAgICAgICBhbmNob3Iuc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLCB0aGlzLl9tYXAuX2dldFVJU3RyaW5nKCdMb2dvQ29udHJvbC5UaXRsZScpKTtcbiAgICAgICAgYW5jaG9yLnNldEF0dHJpYnV0ZShcInJlbFwiLCBcIm5vb3BlbmVyIG5vZm9sbG93XCIpO1xuICAgICAgICB0aGlzLl9jb250YWluZXIuYXBwZW5kQ2hpbGQoYW5jaG9yKTtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICAgICAgdGhpcy5fbWFwLm9uKCdzb3VyY2VkYXRhJywgdGhpcy5fdXBkYXRlTG9nbyk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUxvZ28oKTtcblxuICAgICAgICB0aGlzLl9tYXAub24oJ3Jlc2l6ZScsIHRoaXMuX3VwZGF0ZUNvbXBhY3QpO1xuICAgICAgICB0aGlzLl91cGRhdGVDb21wYWN0KCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lcjtcbiAgICB9XG5cbiAgICBvblJlbW92ZSgpIHtcbiAgICAgICAgRE9NLnJlbW92ZSh0aGlzLl9jb250YWluZXIpO1xuICAgICAgICB0aGlzLl9tYXAub2ZmKCdzb3VyY2VkYXRhJywgdGhpcy5fdXBkYXRlTG9nbyk7XG4gICAgICAgIHRoaXMuX21hcC5vZmYoJ3Jlc2l6ZScsIHRoaXMuX3VwZGF0ZUNvbXBhY3QpO1xuICAgIH1cblxuICAgIGdldERlZmF1bHRQb3NpdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICdib3R0b20tbGVmdCc7XG4gICAgfVxuXG4gICAgX3VwZGF0ZUxvZ28oZTogYW55KSB7XG4gICAgICAgIGlmICghZSB8fCBlLnNvdXJjZURhdGFUeXBlID09PSAnbWV0YWRhdGEnKSB7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIuc3R5bGUuZGlzcGxheSA9IHRoaXMuX2xvZ29SZXF1aXJlZCgpID8gJ2Jsb2NrJyA6ICdub25lJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9sb2dvUmVxdWlyZWQoKSB7XG4gICAgICAgIGlmICghdGhpcy5fbWFwLnN0eWxlKSByZXR1cm47XG5cbiAgICAgICAgY29uc3Qgc291cmNlQ2FjaGVzID0gdGhpcy5fbWFwLnN0eWxlLnNvdXJjZUNhY2hlcztcbiAgICAgICAgZm9yIChjb25zdCBpZCBpbiBzb3VyY2VDYWNoZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IHNvdXJjZUNhY2hlc1tpZF0uZ2V0U291cmNlKCk7XG4gICAgICAgICAgICBpZiAoc291cmNlLm1hcGJveF9sb2dvKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgX3VwZGF0ZUNvbXBhY3QoKSB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lckNoaWxkcmVuID0gdGhpcy5fY29udGFpbmVyLmNoaWxkcmVuO1xuICAgICAgICBpZiAoY29udGFpbmVyQ2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBhbmNob3IgPSBjb250YWluZXJDaGlsZHJlblswXTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9tYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCkub2Zmc2V0V2lkdGggPCAyNTApIHtcbiAgICAgICAgICAgICAgICBhbmNob3IuY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY29tcGFjdCcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhbmNob3IuY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY29tcGFjdCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG59XG5cbmV4cG9ydCBkZWZhdWx0IExvZ29Db250cm9sO1xuIiwiLy8gQGZsb3cgc3RyaWN0XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmV4cG9ydCB0eXBlIFRhc2tJRCA9IG51bWJlcjsgLy8gY2FuJ3QgbWFyayBvcGFxdWUgZHVlIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9mbG93dHlwZS9mbG93LXJlbW92ZS10eXBlcy9wdWxsLzYxXG50eXBlIFRhc2sgPSB7XG4gICAgY2FsbGJhY2s6ICh0aW1lU3RhbXA6IG51bWJlcikgPT4gdm9pZDtcbiAgICBpZDogVGFza0lEO1xuICAgIGNhbmNlbGxlZDogYm9vbGVhbjtcbn07XG5cbmNsYXNzIFRhc2tRdWV1ZSB7XG4gICAgX3F1ZXVlOiBBcnJheTxUYXNrPjtcbiAgICBfaWQ6IFRhc2tJRDtcbiAgICBfY2xlYXJlZDogYm9vbGVhbjtcbiAgICBfY3VycmVudGx5UnVubmluZzogQXJyYXk8VGFzaz4gfCBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKCkgIHtcbiAgICAgICAgdGhpcy5fcXVldWUgPSBbXTtcbiAgICAgICAgdGhpcy5faWQgPSAwO1xuICAgICAgICB0aGlzLl9jbGVhcmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRseVJ1bm5pbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBhZGQoY2FsbGJhY2s6ICh0aW1lU3RhbXA6IG51bWJlcikgPT4gdm9pZCk6IFRhc2tJRCB7XG4gICAgICAgIGNvbnN0IGlkID0gKyt0aGlzLl9pZDtcbiAgICAgICAgY29uc3QgcXVldWUgPSB0aGlzLl9xdWV1ZTtcbiAgICAgICAgcXVldWUucHVzaCh7Y2FsbGJhY2ssIGlkLCBjYW5jZWxsZWQ6IGZhbHNlfSk7XG4gICAgICAgIHJldHVybiBpZDtcbiAgICB9XG5cbiAgICByZW1vdmUoaWQ6IFRhc2tJRCkge1xuICAgICAgICBjb25zdCBydW5uaW5nID0gdGhpcy5fY3VycmVudGx5UnVubmluZztcbiAgICAgICAgY29uc3QgcXVldWUgPSBydW5uaW5nID8gdGhpcy5fcXVldWUuY29uY2F0KHJ1bm5pbmcpIDogdGhpcy5fcXVldWU7XG4gICAgICAgIGZvciAoY29uc3QgdGFzayBvZiBxdWV1ZSkge1xuICAgICAgICAgICAgaWYgKHRhc2suaWQgPT09IGlkKSB7XG4gICAgICAgICAgICAgICAgdGFzay5jYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJ1bih0aW1lU3RhbXA6IG51bWJlciA9IDApIHtcbiAgICAgICAgYXNzZXJ0KCF0aGlzLl9jdXJyZW50bHlSdW5uaW5nKTtcbiAgICAgICAgY29uc3QgcXVldWUgPSB0aGlzLl9jdXJyZW50bHlSdW5uaW5nID0gdGhpcy5fcXVldWU7XG5cbiAgICAgICAgLy8gVGFza3MgcXVldWVkIGJ5IGNhbGxiYWNrcyBpbiB0aGUgY3VycmVudCBxdWV1ZSBzaG91bGQgYmUgZXhlY3V0ZWRcbiAgICAgICAgLy8gb24gdGhlIG5leHQgcnVuLCBub3QgdGhlIGN1cnJlbnQgcnVuLlxuICAgICAgICB0aGlzLl9xdWV1ZSA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3QgdGFzayBvZiBxdWV1ZSkge1xuICAgICAgICAgICAgaWYgKHRhc2suY2FuY2VsbGVkKSBjb250aW51ZTtcbiAgICAgICAgICAgIHRhc2suY2FsbGJhY2sodGltZVN0YW1wKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jbGVhcmVkKSBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NsZWFyZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY3VycmVudGx5UnVubmluZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIGNsZWFyKCkge1xuICAgICAgICBpZiAodGhpcy5fY3VycmVudGx5UnVubmluZykge1xuICAgICAgICAgICAgdGhpcy5fY2xlYXJlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcXVldWUgPSBbXTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRhc2tRdWV1ZTtcbiIsIi8vIEBmbG93XG5cbmNvbnN0IGRlZmF1bHRMb2NhbGUgPSB7XG4gICAgJ0Z1bGxzY3JlZW5Db250cm9sLkVudGVyJzogJ0VudGVyIGZ1bGxzY3JlZW4nLFxuICAgICdGdWxsc2NyZWVuQ29udHJvbC5FeGl0JzogJ0V4aXQgZnVsbHNjcmVlbicsXG4gICAgJ0dlb2xvY2F0ZUNvbnRyb2wuRmluZE15TG9jYXRpb24nOiAnRmluZCBteSBsb2NhdGlvbicsXG4gICAgJ0dlb2xvY2F0ZUNvbnRyb2wuTG9jYXRpb25Ob3RBdmFpbGFibGUnOiAnTG9jYXRpb24gbm90IGF2YWlsYWJsZScsXG4gICAgJ0xvZ29Db250cm9sLlRpdGxlJzogJ01hcGJveCBsb2dvJyxcbiAgICAnTmF2aWdhdGlvbkNvbnRyb2wuUmVzZXRCZWFyaW5nJzogJ1Jlc2V0IGJlYXJpbmcgdG8gbm9ydGgnLFxuICAgICdOYXZpZ2F0aW9uQ29udHJvbC5ab29tSW4nOiAnWm9vbSBpbicsXG4gICAgJ05hdmlnYXRpb25Db250cm9sLlpvb21PdXQnOiAnWm9vbSBvdXQnLFxuICAgICdTY2FsZUNvbnRyb2wuRmVldCc6ICdmdCcsXG4gICAgJ1NjYWxlQ29udHJvbC5NZXRlcnMnOiAnbScsXG4gICAgJ1NjYWxlQ29udHJvbC5LaWxvbWV0ZXJzJzogJ2ttJyxcbiAgICAnU2NhbGVDb250cm9sLk1pbGVzJzogJ21pJyxcbiAgICAnU2NhbGVDb250cm9sLk5hdXRpY2FsTWlsZXMnOiAnbm0nXG5cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRMb2NhbGU7XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQge3ZlcnNpb259IGZyb20gJy4uLy4uL3BhY2thZ2UuanNvbic7XG5pbXBvcnQge2V4dGVuZCwgYmluZEFsbCwgd2Fybk9uY2UsIHVuaXF1ZUlkfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IGJyb3dzZXIgZnJvbSAnLi4vdXRpbC9icm93c2VyJztcbmltcG9ydCB3aW5kb3cgZnJvbSAnLi4vdXRpbC93aW5kb3cnO1xuY29uc3Qge0hUTUxJbWFnZUVsZW1lbnQsIEhUTUxFbGVtZW50LCBJbWFnZUJpdG1hcH0gPSB3aW5kb3c7XG5pbXBvcnQgRE9NIGZyb20gJy4uL3V0aWwvZG9tJztcbmltcG9ydCB7Z2V0SW1hZ2UsIGdldEpTT04sIFJlc291cmNlVHlwZX0gZnJvbSAnLi4vdXRpbC9hamF4JztcbmltcG9ydCB7UmVxdWVzdE1hbmFnZXJ9IGZyb20gJy4uL3V0aWwvbWFwYm94JztcbmltcG9ydCBTdHlsZSBmcm9tICcuLi9zdHlsZS9zdHlsZSc7XG5pbXBvcnQgRXZhbHVhdGlvblBhcmFtZXRlcnMgZnJvbSAnLi4vc3R5bGUvZXZhbHVhdGlvbl9wYXJhbWV0ZXJzJztcbmltcG9ydCBQYWludGVyIGZyb20gJy4uL3JlbmRlci9wYWludGVyJztcbmltcG9ydCBUcmFuc2Zvcm0gZnJvbSAnLi4vZ2VvL3RyYW5zZm9ybSc7XG5pbXBvcnQgSGFzaCBmcm9tICcuL2hhc2gnO1xuaW1wb3J0IEhhbmRsZXJNYW5hZ2VyIGZyb20gJy4vaGFuZGxlcl9tYW5hZ2VyJztcbmltcG9ydCBDYW1lcmEgZnJvbSAnLi9jYW1lcmEnO1xuaW1wb3J0IExuZ0xhdCBmcm9tICcuLi9nZW8vbG5nX2xhdCc7XG5pbXBvcnQgTG5nTGF0Qm91bmRzIGZyb20gJy4uL2dlby9sbmdfbGF0X2JvdW5kcyc7XG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgQXR0cmlidXRpb25Db250cm9sIGZyb20gJy4vY29udHJvbC9hdHRyaWJ1dGlvbl9jb250cm9sJztcbmltcG9ydCBMb2dvQ29udHJvbCBmcm9tICcuL2NvbnRyb2wvbG9nb19jb250cm9sJztcbmltcG9ydCBpc1N1cHBvcnRlZCBmcm9tICdAbWFwYm94L21hcGJveC1nbC1zdXBwb3J0ZWQnO1xuaW1wb3J0IHtSR0JBSW1hZ2V9IGZyb20gJy4uL3V0aWwvaW1hZ2UnO1xuaW1wb3J0IHtFdmVudCwgRXJyb3JFdmVudH0gZnJvbSAnLi4vdXRpbC9ldmVudGVkJztcbmltcG9ydCB7TWFwTW91c2VFdmVudH0gZnJvbSAnLi9ldmVudHMnO1xuaW1wb3J0IFRhc2tRdWV1ZSBmcm9tICcuLi91dGlsL3Rhc2tfcXVldWUnO1xuaW1wb3J0IHdlYnBTdXBwb3J0ZWQgZnJvbSAnLi4vdXRpbC93ZWJwX3N1cHBvcnRlZCc7XG5pbXBvcnQge1BlcmZvcm1hbmNlTWFya2VycywgUGVyZm9ybWFuY2VVdGlsc30gZnJvbSAnLi4vdXRpbC9wZXJmb3JtYW5jZSc7XG5cbmltcG9ydCB7c2V0Q2FjaGVMaW1pdHN9IGZyb20gJy4uL3V0aWwvdGlsZV9yZXF1ZXN0X2NhY2hlJztcblxuaW1wb3J0IHR5cGUge1BvaW50TGlrZX0gZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgdHlwZSB7UmVxdWVzdFRyYW5zZm9ybUZ1bmN0aW9ufSBmcm9tICcuLi91dGlsL21hcGJveCc7XG5pbXBvcnQgdHlwZSB7TG5nTGF0TGlrZX0gZnJvbSAnLi4vZ2VvL2xuZ19sYXQnO1xuaW1wb3J0IHR5cGUge0xuZ0xhdEJvdW5kc0xpa2V9IGZyb20gJy4uL2dlby9sbmdfbGF0X2JvdW5kcyc7XG5pbXBvcnQgdHlwZSB7U3R5bGVPcHRpb25zLCBTdHlsZVNldHRlck9wdGlvbnN9IGZyb20gJy4uL3N0eWxlL3N0eWxlJztcbmltcG9ydCB0eXBlIHtNYXBFdmVudCwgTWFwRGF0YUV2ZW50fSBmcm9tICcuL2V2ZW50cyc7XG5pbXBvcnQgdHlwZSB7Q3VzdG9tTGF5ZXJJbnRlcmZhY2V9IGZyb20gJy4uL3N0eWxlL3N0eWxlX2xheWVyL2N1c3RvbV9zdHlsZV9sYXllcic7XG5pbXBvcnQgdHlwZSB7U3R5bGVJbWFnZUludGVyZmFjZSwgU3R5bGVJbWFnZU1ldGFkYXRhfSBmcm9tICcuLi9zdHlsZS9zdHlsZV9pbWFnZSc7XG5cbmltcG9ydCB0eXBlIFNjcm9sbFpvb21IYW5kbGVyIGZyb20gJy4vaGFuZGxlci9zY3JvbGxfem9vbSc7XG5pbXBvcnQgdHlwZSBCb3hab29tSGFuZGxlciBmcm9tICcuL2hhbmRsZXIvYm94X3pvb20nO1xuaW1wb3J0IHR5cGUge1RvdWNoUGl0Y2hIYW5kbGVyfSBmcm9tICcuL2hhbmRsZXIvdG91Y2hfem9vbV9yb3RhdGUnO1xuaW1wb3J0IHR5cGUgRHJhZ1JvdGF0ZUhhbmRsZXIgZnJvbSAnLi9oYW5kbGVyL3NoaW0vZHJhZ19yb3RhdGUnO1xuaW1wb3J0IHR5cGUgRHJhZ1BhbkhhbmRsZXIsIHtEcmFnUGFuT3B0aW9uc30gZnJvbSAnLi9oYW5kbGVyL3NoaW0vZHJhZ19wYW4nO1xuaW1wb3J0IHR5cGUgS2V5Ym9hcmRIYW5kbGVyIGZyb20gJy4vaGFuZGxlci9rZXlib2FyZCc7XG5pbXBvcnQgdHlwZSBEb3VibGVDbGlja1pvb21IYW5kbGVyIGZyb20gJy4vaGFuZGxlci9zaGltL2RibGNsaWNrX3pvb20nO1xuaW1wb3J0IHR5cGUgVG91Y2hab29tUm90YXRlSGFuZGxlciBmcm9tICcuL2hhbmRsZXIvc2hpbS90b3VjaF96b29tX3JvdGF0ZSc7XG5pbXBvcnQgZGVmYXVsdExvY2FsZSBmcm9tICcuL2RlZmF1bHRfbG9jYWxlJztcbmltcG9ydCB0eXBlIHtUYXNrSUR9IGZyb20gJy4uL3V0aWwvdGFza19xdWV1ZSc7XG5pbXBvcnQgdHlwZSB7Q2FuY2VsYWJsZX0gZnJvbSAnLi4vdHlwZXMvY2FuY2VsYWJsZSc7XG5pbXBvcnQgdHlwZSB7XG4gICAgTGF5ZXJTcGVjaWZpY2F0aW9uLFxuICAgIEZpbHRlclNwZWNpZmljYXRpb24sXG4gICAgU3R5bGVTcGVjaWZpY2F0aW9uLFxuICAgIExpZ2h0U3BlY2lmaWNhdGlvbixcbiAgICBTb3VyY2VTcGVjaWZpY2F0aW9uXG59IGZyb20gJy4uL3N0eWxlLXNwZWMvdHlwZXMnO1xuXG50eXBlIENvbnRyb2xQb3NpdGlvbiA9ICd0b3AtbGVmdCcgfCAndG9wLXJpZ2h0JyB8ICdib3R0b20tbGVmdCcgfCAnYm90dG9tLXJpZ2h0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVzZS1iZWZvcmUtZGVmaW5lICovXG50eXBlIElDb250cm9sID0ge1xuICAgIG9uQWRkKG1hcDogTWFwKTogSFRNTEVsZW1lbnQ7XG4gICAgb25SZW1vdmUobWFwOiBNYXApOiB2b2lkO1xuXG4gICAgK2dldERlZmF1bHRQb3NpdGlvbj86ICgpID0+IENvbnRyb2xQb3NpdGlvbjtcbn1cbi8qIGVzbGludC1lbmFibGUgbm8tdXNlLWJlZm9yZS1kZWZpbmUgKi9cblxudHlwZSBNYXBPcHRpb25zID0ge1xuICAgIGhhc2g/OiBib29sZWFuIHwgc3RyaW5nLFxuICAgIGludGVyYWN0aXZlPzogYm9vbGVhbixcbiAgICBjb250YWluZXI6IEhUTUxFbGVtZW50IHwgc3RyaW5nLFxuICAgIGJlYXJpbmdTbmFwPzogbnVtYmVyLFxuICAgIGF0dHJpYnV0aW9uQ29udHJvbD86IGJvb2xlYW4sXG4gICAgY3VzdG9tQXR0cmlidXRpb24/OiBzdHJpbmcgfCBBcnJheTxzdHJpbmc+LFxuICAgIGxvZ29Qb3NpdGlvbj86IENvbnRyb2xQb3NpdGlvbixcbiAgICBmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0PzogYm9vbGVhbixcbiAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI/OiBib29sZWFuLFxuICAgIGFudGlhbGlhcz86IGJvb2xlYW4sXG4gICAgcmVmcmVzaEV4cGlyZWRUaWxlcz86IGJvb2xlYW4sXG4gICAgbWF4Qm91bmRzPzogTG5nTGF0Qm91bmRzTGlrZSxcbiAgICBzY3JvbGxab29tPzogYm9vbGVhbixcbiAgICBtaW5ab29tPzogP251bWJlcixcbiAgICBtYXhab29tPzogP251bWJlcixcbiAgICBtaW5QaXRjaD86ID9udW1iZXIsXG4gICAgbWF4UGl0Y2g/OiA/bnVtYmVyLFxuICAgIGJveFpvb20/OiBib29sZWFuLFxuICAgIGRyYWdSb3RhdGU/OiBib29sZWFuLFxuICAgIGRyYWdQYW4/OiBEcmFnUGFuT3B0aW9ucyxcbiAgICBrZXlib2FyZD86IGJvb2xlYW4sXG4gICAgZG91YmxlQ2xpY2tab29tPzogYm9vbGVhbixcbiAgICB0b3VjaFpvb21Sb3RhdGU/OiBib29sZWFuLFxuICAgIHRvdWNoUGl0Y2g/OiBib29sZWFuLFxuICAgIHRyYWNrUmVzaXplPzogYm9vbGVhbixcbiAgICBjZW50ZXI/OiBMbmdMYXRMaWtlLFxuICAgIHpvb20/OiBudW1iZXIsXG4gICAgYmVhcmluZz86IG51bWJlcixcbiAgICBwaXRjaD86IG51bWJlcixcbiAgICByZW5kZXJXb3JsZENvcGllcz86IGJvb2xlYW4sXG4gICAgbWF4VGlsZUNhY2hlU2l6ZT86IG51bWJlcixcbiAgICB0cmFuc2Zvcm1SZXF1ZXN0PzogUmVxdWVzdFRyYW5zZm9ybUZ1bmN0aW9uLFxuICAgIGFjY2Vzc1Rva2VuOiBzdHJpbmcsXG4gICAgbG9jYWxlPzogT2JqZWN0XG59O1xuXG5jb25zdCBkZWZhdWx0TWluWm9vbSA9IC0yO1xuY29uc3QgZGVmYXVsdE1heFpvb20gPSAyMjtcblxuLy8gdGhlIGRlZmF1bHQgdmFsdWVzLCBidXQgYWxzbyB0aGUgdmFsaWQgcmFuZ2VcbmNvbnN0IGRlZmF1bHRNaW5QaXRjaCA9IDA7XG5jb25zdCBkZWZhdWx0TWF4UGl0Y2ggPSA2MDtcblxuY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgY2VudGVyOiBbMCwgMF0sXG4gICAgem9vbTogMCxcbiAgICBiZWFyaW5nOiAwLFxuICAgIHBpdGNoOiAwLFxuXG4gICAgbWluWm9vbTogZGVmYXVsdE1pblpvb20sXG4gICAgbWF4Wm9vbTogZGVmYXVsdE1heFpvb20sXG5cbiAgICBtaW5QaXRjaDogZGVmYXVsdE1pblBpdGNoLFxuICAgIG1heFBpdGNoOiBkZWZhdWx0TWF4UGl0Y2gsXG5cbiAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICBzY3JvbGxab29tOiB0cnVlLFxuICAgIGJveFpvb206IHRydWUsXG4gICAgZHJhZ1JvdGF0ZTogdHJ1ZSxcbiAgICBkcmFnUGFuOiB0cnVlLFxuICAgIGtleWJvYXJkOiB0cnVlLFxuICAgIGRvdWJsZUNsaWNrWm9vbTogdHJ1ZSxcbiAgICB0b3VjaFpvb21Sb3RhdGU6IHRydWUsXG4gICAgdG91Y2hQaXRjaDogdHJ1ZSxcblxuICAgIGJlYXJpbmdTbmFwOiA3LFxuICAgIGNsaWNrVG9sZXJhbmNlOiAzLFxuICAgIHBpdGNoV2l0aFJvdGF0ZTogdHJ1ZSxcblxuICAgIGhhc2g6IGZhbHNlLFxuICAgIGF0dHJpYnV0aW9uQ29udHJvbDogdHJ1ZSxcblxuICAgIGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6IGZhbHNlLFxuICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogZmFsc2UsXG4gICAgdHJhY2tSZXNpemU6IHRydWUsXG4gICAgcmVuZGVyV29ybGRDb3BpZXM6IHRydWUsXG4gICAgcmVmcmVzaEV4cGlyZWRUaWxlczogdHJ1ZSxcbiAgICBtYXhUaWxlQ2FjaGVTaXplOiBudWxsLFxuICAgIGxvY2FsSWRlb2dyYXBoRm9udEZhbWlseTogJ3NhbnMtc2VyaWYnLFxuICAgIHRyYW5zZm9ybVJlcXVlc3Q6IG51bGwsXG4gICAgYWNjZXNzVG9rZW46IG51bGwsXG4gICAgZmFkZUR1cmF0aW9uOiAzMDAsXG4gICAgY3Jvc3NTb3VyY2VDb2xsaXNpb25zOiB0cnVlXG59O1xuXG4vKipcbiAqIFRoZSBgTWFwYCBvYmplY3QgcmVwcmVzZW50cyB0aGUgbWFwIG9uIHlvdXIgcGFnZS4gSXQgZXhwb3NlcyBtZXRob2RzXG4gKiBhbmQgcHJvcGVydGllcyB0aGF0IGVuYWJsZSB5b3UgdG8gcHJvZ3JhbW1hdGljYWxseSBjaGFuZ2UgdGhlIG1hcCxcbiAqIGFuZCBmaXJlcyBldmVudHMgYXMgdXNlcnMgaW50ZXJhY3Qgd2l0aCBpdC5cbiAqXG4gKiBZb3UgY3JlYXRlIGEgYE1hcGAgYnkgc3BlY2lmeWluZyBhIGBjb250YWluZXJgIGFuZCBvdGhlciBvcHRpb25zLlxuICogVGhlbiBNYXBib3ggR0wgSlMgaW5pdGlhbGl6ZXMgdGhlIG1hcCBvbiB0aGUgcGFnZSBhbmQgcmV0dXJucyB5b3VyIGBNYXBgXG4gKiBvYmplY3QuXG4gKlxuICogQGV4dGVuZHMgRXZlbnRlZFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8c3RyaW5nfSBvcHRpb25zLmNvbnRhaW5lciBUaGUgSFRNTCBlbGVtZW50IGluIHdoaWNoIE1hcGJveCBHTCBKUyB3aWxsIHJlbmRlciB0aGUgbWFwLCBvciB0aGUgZWxlbWVudCdzIHN0cmluZyBgaWRgLiBUaGUgc3BlY2lmaWVkIGVsZW1lbnQgbXVzdCBoYXZlIG5vIGNoaWxkcmVuLlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1pblpvb209MF0gVGhlIG1pbmltdW0gem9vbSBsZXZlbCBvZiB0aGUgbWFwICgwLTI0KS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhab29tPTIyXSBUaGUgbWF4aW11bSB6b29tIGxldmVsIG9mIHRoZSBtYXAgKDAtMjQpLlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1pblBpdGNoPTBdIFRoZSBtaW5pbXVtIHBpdGNoIG9mIHRoZSBtYXAgKDAtNjApLlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1heFBpdGNoPTYwXSBUaGUgbWF4aW11bSBwaXRjaCBvZiB0aGUgbWFwICgwLTYwKS5cbiAqIEBwYXJhbSB7T2JqZWN0fHN0cmluZ30gW29wdGlvbnMuc3R5bGVdIFRoZSBtYXAncyBNYXBib3ggc3R5bGUuIFRoaXMgbXVzdCBiZSBhbiBhIEpTT04gb2JqZWN0IGNvbmZvcm1pbmcgdG9cbiAqIHRoZSBzY2hlbWEgZGVzY3JpYmVkIGluIHRoZSBbTWFwYm94IFN0eWxlIFNwZWNpZmljYXRpb25dKGh0dHBzOi8vbWFwYm94LmNvbS9tYXBib3gtZ2wtc3R5bGUtc3BlYy8pLCBvciBhIFVSTCB0b1xuICogc3VjaCBKU09OLlxuICpcbiAqIFRvIGxvYWQgYSBzdHlsZSBmcm9tIHRoZSBNYXBib3ggQVBJLCB5b3UgY2FuIHVzZSBhIFVSTCBvZiB0aGUgZm9ybSBgbWFwYm94Oi8vc3R5bGVzLzpvd25lci86c3R5bGVgLFxuICogd2hlcmUgYDpvd25lcmAgaXMgeW91ciBNYXBib3ggYWNjb3VudCBuYW1lIGFuZCBgOnN0eWxlYCBpcyB0aGUgc3R5bGUgSUQuIE9yIHlvdSBjYW4gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nXG4gKiBbdGhlIHByZWRlZmluZWQgTWFwYm94IHN0eWxlc10oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBzLyk6XG4gKlxuICogICogYG1hcGJveDovL3N0eWxlcy9tYXBib3gvc3RyZWV0cy12MTFgXG4gKiAgKiBgbWFwYm94Oi8vc3R5bGVzL21hcGJveC9vdXRkb29ycy12MTFgXG4gKiAgKiBgbWFwYm94Oi8vc3R5bGVzL21hcGJveC9saWdodC12MTBgXG4gKiAgKiBgbWFwYm94Oi8vc3R5bGVzL21hcGJveC9kYXJrLXYxMGBcbiAqICAqIGBtYXBib3g6Ly9zdHlsZXMvbWFwYm94L3NhdGVsbGl0ZS12OWBcbiAqICAqIGBtYXBib3g6Ly9zdHlsZXMvbWFwYm94L3NhdGVsbGl0ZS1zdHJlZXRzLXYxMWBcbiAqICAqIGBtYXBib3g6Ly9zdHlsZXMvbWFwYm94L25hdmlnYXRpb24tcHJldmlldy1kYXktdjRgXG4gKiAgKiBgbWFwYm94Oi8vc3R5bGVzL21hcGJveC9uYXZpZ2F0aW9uLXByZXZpZXctbmlnaHQtdjRgXG4gKiAgKiBgbWFwYm94Oi8vc3R5bGVzL21hcGJveC9uYXZpZ2F0aW9uLWd1aWRhbmNlLWRheS12NGBcbiAqICAqIGBtYXBib3g6Ly9zdHlsZXMvbWFwYm94L25hdmlnYXRpb24tZ3VpZGFuY2UtbmlnaHQtdjRgXG4gKlxuICogVGlsZXNldHMgaG9zdGVkIHdpdGggTWFwYm94IGNhbiBiZSBzdHlsZS1vcHRpbWl6ZWQgaWYgeW91IGFwcGVuZCBgP29wdGltaXplPXRydWVgIHRvIHRoZSBlbmQgb2YgeW91ciBzdHlsZSBVUkwsIGxpa2UgYG1hcGJveDovL3N0eWxlcy9tYXBib3gvc3RyZWV0cy12MTE/b3B0aW1pemU9dHJ1ZWAuXG4gKiBMZWFybiBtb3JlIGFib3V0IHN0eWxlLW9wdGltaXplZCB2ZWN0b3IgdGlsZXMgaW4gb3VyIFtBUEkgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9hcGktZG9jdW1lbnRhdGlvbi9tYXBzLyNyZXRyaWV2ZS10aWxlcykuXG4gKlxuICogQHBhcmFtIHsoYm9vbGVhbnxzdHJpbmcpfSBbb3B0aW9ucy5oYXNoPWZhbHNlXSBJZiBgdHJ1ZWAsIHRoZSBtYXAncyBwb3NpdGlvbiAoem9vbSwgY2VudGVyIGxhdGl0dWRlLCBjZW50ZXIgbG9uZ2l0dWRlLCBiZWFyaW5nLCBhbmQgcGl0Y2gpIHdpbGwgYmUgc3luY2VkIHdpdGggdGhlIGhhc2ggZnJhZ21lbnQgb2YgdGhlIHBhZ2UncyBVUkwuXG4gKiAgIEZvciBleGFtcGxlLCBgaHR0cDovL3BhdGgvdG8vbXkvcGFnZS5odG1sIzIuNTkvMzkuMjYvNTMuMDcvLTI0LjEvNjBgLlxuICogICBBbiBhZGRpdGlvbmFsIHN0cmluZyBtYXkgb3B0aW9uYWxseSBiZSBwcm92aWRlZCB0byBpbmRpY2F0ZSBhIHBhcmFtZXRlci1zdHlsZWQgaGFzaCxcbiAqICAgZS5nLiBodHRwOi8vcGF0aC90by9teS9wYWdlLmh0bWwjbWFwPTIuNTkvMzkuMjYvNTMuMDcvLTI0LjEvNjAmZm9vPWJhciwgd2hlcmUgZm9vXG4gKiAgIGlzIGEgY3VzdG9tIHBhcmFtZXRlciBhbmQgYmFyIGlzIGFuIGFyYml0cmFyeSBoYXNoIGRpc3RpbmN0IGZyb20gdGhlIG1hcCBoYXNoLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5pbnRlcmFjdGl2ZT10cnVlXSBJZiBgZmFsc2VgLCBubyBtb3VzZSwgdG91Y2gsIG9yIGtleWJvYXJkIGxpc3RlbmVycyB3aWxsIGJlIGF0dGFjaGVkIHRvIHRoZSBtYXAsIHNvIGl0IHdpbGwgbm90IHJlc3BvbmQgdG8gaW50ZXJhY3Rpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuYmVhcmluZ1NuYXA9N10gVGhlIHRocmVzaG9sZCwgbWVhc3VyZWQgaW4gZGVncmVlcywgdGhhdCBkZXRlcm1pbmVzIHdoZW4gdGhlIG1hcCdzXG4gKiAgIGJlYXJpbmcgd2lsbCBzbmFwIHRvIG5vcnRoLiBGb3IgZXhhbXBsZSwgd2l0aCBhIGBiZWFyaW5nU25hcGAgb2YgNywgaWYgdGhlIHVzZXIgcm90YXRlc1xuICogICB0aGUgbWFwIHdpdGhpbiA3IGRlZ3JlZXMgb2Ygbm9ydGgsIHRoZSBtYXAgd2lsbCBhdXRvbWF0aWNhbGx5IHNuYXAgdG8gZXhhY3Qgbm9ydGguXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnBpdGNoV2l0aFJvdGF0ZT10cnVlXSBJZiBgZmFsc2VgLCB0aGUgbWFwJ3MgcGl0Y2ggKHRpbHQpIGNvbnRyb2wgd2l0aCBcImRyYWcgdG8gcm90YXRlXCIgaW50ZXJhY3Rpb24gd2lsbCBiZSBkaXNhYmxlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5jbGlja1RvbGVyYW5jZT0zXSBUaGUgbWF4IG51bWJlciBvZiBwaXhlbHMgYSB1c2VyIGNhbiBzaGlmdCB0aGUgbW91c2UgcG9pbnRlciBkdXJpbmcgYSBjbGljayBmb3IgaXQgdG8gYmUgY29uc2lkZXJlZCBhIHZhbGlkIGNsaWNrIChhcyBvcHBvc2VkIHRvIGEgbW91c2UgZHJhZykuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmF0dHJpYnV0aW9uQ29udHJvbD10cnVlXSBJZiBgdHJ1ZWAsIGFuIHtAbGluayBBdHRyaWJ1dGlvbkNvbnRyb2x9IHdpbGwgYmUgYWRkZWQgdG8gdGhlIG1hcC5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgQXJyYXk8c3RyaW5nPn0gW29wdGlvbnMuY3VzdG9tQXR0cmlidXRpb25dIFN0cmluZyBvciBzdHJpbmdzIHRvIHNob3cgaW4gYW4ge0BsaW5rIEF0dHJpYnV0aW9uQ29udHJvbH0uIE9ubHkgYXBwbGljYWJsZSBpZiBgb3B0aW9ucy5hdHRyaWJ1dGlvbkNvbnRyb2xgIGlzIGB0cnVlYC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5sb2dvUG9zaXRpb249J2JvdHRvbS1sZWZ0J10gQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBwb3NpdGlvbiBvZiB0aGUgTWFwYm94IHdvcmRtYXJrIG9uIHRoZSBtYXAuIFZhbGlkIG9wdGlvbnMgYXJlIGB0b3AtbGVmdGAsYHRvcC1yaWdodGAsIGBib3R0b20tbGVmdGAsIGBib3R0b20tcmlnaHRgLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0PWZhbHNlXSBJZiBgdHJ1ZWAsIG1hcCBjcmVhdGlvbiB3aWxsIGZhaWwgaWYgdGhlIHBlcmZvcm1hbmNlIG9mIE1hcGJveFxuICogICBHTCBKUyB3b3VsZCBiZSBkcmFtYXRpY2FsbHkgd29yc2UgdGhhbiBleHBlY3RlZCAoaS5lLiBhIHNvZnR3YXJlIHJlbmRlcmVyIHdvdWxkIGJlIHVzZWQpLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ZmFsc2VdIElmIGB0cnVlYCwgdGhlIG1hcCdzIGNhbnZhcyBjYW4gYmUgZXhwb3J0ZWQgdG8gYSBQTkcgdXNpbmcgYG1hcC5nZXRDYW52YXMoKS50b0RhdGFVUkwoKWAuIFRoaXMgaXMgYGZhbHNlYCBieSBkZWZhdWx0IGFzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5hbnRpYWxpYXNdIElmIGB0cnVlYCwgdGhlIGdsIGNvbnRleHQgd2lsbCBiZSBjcmVhdGVkIHdpdGggTVNBQSBhbnRpYWxpYXNpbmcsIHdoaWNoIGNhbiBiZSB1c2VmdWwgZm9yIGFudGlhbGlhc2luZyBjdXN0b20gbGF5ZXJzLiB0aGlzIGlzIGBmYWxzZWAgYnkgZGVmYXVsdCBhcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucmVmcmVzaEV4cGlyZWRUaWxlcz10cnVlXSBJZiBgZmFsc2VgLCB0aGUgbWFwIHdvbid0IGF0dGVtcHQgdG8gcmUtcmVxdWVzdCB0aWxlcyBvbmNlIHRoZXkgZXhwaXJlIHBlciB0aGVpciBIVFRQIGBjYWNoZUNvbnRyb2xgL2BleHBpcmVzYCBoZWFkZXJzLlxuICogQHBhcmFtIHtMbmdMYXRCb3VuZHNMaWtlfSBbb3B0aW9ucy5tYXhCb3VuZHNdIElmIHNldCwgdGhlIG1hcCB3aWxsIGJlIGNvbnN0cmFpbmVkIHRvIHRoZSBnaXZlbiBib3VuZHMuXG4gKiBAcGFyYW0ge2Jvb2xlYW58T2JqZWN0fSBbb3B0aW9ucy5zY3JvbGxab29tPXRydWVdIElmIGB0cnVlYCwgdGhlIFwic2Nyb2xsIHRvIHpvb21cIiBpbnRlcmFjdGlvbiBpcyBlbmFibGVkLiBBbiBgT2JqZWN0YCB2YWx1ZSBpcyBwYXNzZWQgYXMgb3B0aW9ucyB0byB7QGxpbmsgU2Nyb2xsWm9vbUhhbmRsZXIjZW5hYmxlfS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuYm94Wm9vbT10cnVlXSBJZiBgdHJ1ZWAsIHRoZSBcImJveCB6b29tXCIgaW50ZXJhY3Rpb24gaXMgZW5hYmxlZCAoc2VlIHtAbGluayBCb3hab29tSGFuZGxlcn0pLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5kcmFnUm90YXRlPXRydWVdIElmIGB0cnVlYCwgdGhlIFwiZHJhZyB0byByb3RhdGVcIiBpbnRlcmFjdGlvbiBpcyBlbmFibGVkIChzZWUge0BsaW5rIERyYWdSb3RhdGVIYW5kbGVyfSkuXG4gKiBAcGFyYW0ge2Jvb2xlYW58T2JqZWN0fSBbb3B0aW9ucy5kcmFnUGFuPXRydWVdIElmIGB0cnVlYCwgdGhlIFwiZHJhZyB0byBwYW5cIiBpbnRlcmFjdGlvbiBpcyBlbmFibGVkLiBBbiBgT2JqZWN0YCB2YWx1ZSBpcyBwYXNzZWQgYXMgb3B0aW9ucyB0byB7QGxpbmsgRHJhZ1BhbkhhbmRsZXIjZW5hYmxlfS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMua2V5Ym9hcmQ9dHJ1ZV0gSWYgYHRydWVgLCBrZXlib2FyZCBzaG9ydGN1dHMgYXJlIGVuYWJsZWQgKHNlZSB7QGxpbmsgS2V5Ym9hcmRIYW5kbGVyfSkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmRvdWJsZUNsaWNrWm9vbT10cnVlXSBJZiBgdHJ1ZWAsIHRoZSBcImRvdWJsZSBjbGljayB0byB6b29tXCIgaW50ZXJhY3Rpb24gaXMgZW5hYmxlZCAoc2VlIHtAbGluayBEb3VibGVDbGlja1pvb21IYW5kbGVyfSkuXG4gKiBAcGFyYW0ge2Jvb2xlYW58T2JqZWN0fSBbb3B0aW9ucy50b3VjaFpvb21Sb3RhdGU9dHJ1ZV0gSWYgYHRydWVgLCB0aGUgXCJwaW5jaCB0byByb3RhdGUgYW5kIHpvb21cIiBpbnRlcmFjdGlvbiBpcyBlbmFibGVkLiBBbiBgT2JqZWN0YCB2YWx1ZSBpcyBwYXNzZWQgYXMgb3B0aW9ucyB0byB7QGxpbmsgVG91Y2hab29tUm90YXRlSGFuZGxlciNlbmFibGV9LlxuICogQHBhcmFtIHtib29sZWFufE9iamVjdH0gW29wdGlvbnMudG91Y2hQaXRjaD10cnVlXSBJZiBgdHJ1ZWAsIHRoZSBcImRyYWcgdG8gcGl0Y2hcIiBpbnRlcmFjdGlvbiBpcyBlbmFibGVkLiBBbiBgT2JqZWN0YCB2YWx1ZSBpcyBwYXNzZWQgYXMgb3B0aW9ucyB0byB7QGxpbmsgVG91Y2hQaXRjaEhhbmRsZXIjZW5hYmxlfS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudHJhY2tSZXNpemU9dHJ1ZV0gIElmIGB0cnVlYCwgdGhlIG1hcCB3aWxsIGF1dG9tYXRpY2FsbHkgcmVzaXplIHdoZW4gdGhlIGJyb3dzZXIgd2luZG93IHJlc2l6ZXMuXG4gKiBAcGFyYW0ge0xuZ0xhdExpa2V9IFtvcHRpb25zLmNlbnRlcj1bMCwgMF1dIFRoZSBpbml0YWwgZ2VvZ3JhcGhpY2FsIGNlbnRlcnBvaW50IG9mIHRoZSBtYXAuIElmIGBjZW50ZXJgIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGNvbnN0cnVjdG9yIG9wdGlvbnMsIE1hcGJveCBHTCBKUyB3aWxsIGxvb2sgZm9yIGl0IGluIHRoZSBtYXAncyBzdHlsZSBvYmplY3QuIElmIGl0IGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIHN0eWxlLCBlaXRoZXIsIGl0IHdpbGwgZGVmYXVsdCB0byBgWzAsIDBdYCBOb3RlOiBNYXBib3ggR0wgdXNlcyBsb25naXR1ZGUsIGxhdGl0dWRlIGNvb3JkaW5hdGUgb3JkZXIgKGFzIG9wcG9zZWQgdG8gbGF0aXR1ZGUsIGxvbmdpdHVkZSkgdG8gbWF0Y2ggR2VvSlNPTi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy56b29tPTBdIFRoZSBpbml0aWFsIHpvb20gbGV2ZWwgb2YgdGhlIG1hcC4gSWYgYHpvb21gIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGNvbnN0cnVjdG9yIG9wdGlvbnMsIE1hcGJveCBHTCBKUyB3aWxsIGxvb2sgZm9yIGl0IGluIHRoZSBtYXAncyBzdHlsZSBvYmplY3QuIElmIGl0IGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIHN0eWxlLCBlaXRoZXIsIGl0IHdpbGwgZGVmYXVsdCB0byBgMGAuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuYmVhcmluZz0wXSBUaGUgaW5pdGlhbCBiZWFyaW5nIChyb3RhdGlvbikgb2YgdGhlIG1hcCwgbWVhc3VyZWQgaW4gZGVncmVlcyBjb3VudGVyLWNsb2Nrd2lzZSBmcm9tIG5vcnRoLiBJZiBgYmVhcmluZ2AgaXMgbm90IHNwZWNpZmllZCBpbiB0aGUgY29uc3RydWN0b3Igb3B0aW9ucywgTWFwYm94IEdMIEpTIHdpbGwgbG9vayBmb3IgaXQgaW4gdGhlIG1hcCdzIHN0eWxlIG9iamVjdC4gSWYgaXQgaXMgbm90IHNwZWNpZmllZCBpbiB0aGUgc3R5bGUsIGVpdGhlciwgaXQgd2lsbCBkZWZhdWx0IHRvIGAwYC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5waXRjaD0wXSBUaGUgaW5pdGlhbCBwaXRjaCAodGlsdCkgb2YgdGhlIG1hcCwgbWVhc3VyZWQgaW4gZGVncmVlcyBhd2F5IGZyb20gdGhlIHBsYW5lIG9mIHRoZSBzY3JlZW4gKDAtNjApLiBJZiBgcGl0Y2hgIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGNvbnN0cnVjdG9yIG9wdGlvbnMsIE1hcGJveCBHTCBKUyB3aWxsIGxvb2sgZm9yIGl0IGluIHRoZSBtYXAncyBzdHlsZSBvYmplY3QuIElmIGl0IGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIHN0eWxlLCBlaXRoZXIsIGl0IHdpbGwgZGVmYXVsdCB0byBgMGAuXG4gKiBAcGFyYW0ge0xuZ0xhdEJvdW5kc0xpa2V9IFtvcHRpb25zLmJvdW5kc10gVGhlIGluaXRpYWwgYm91bmRzIG9mIHRoZSBtYXAuIElmIGBib3VuZHNgIGlzIHNwZWNpZmllZCwgaXQgb3ZlcnJpZGVzIGBjZW50ZXJgIGFuZCBgem9vbWAgY29uc3RydWN0b3Igb3B0aW9ucy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5maXRCb3VuZHNPcHRpb25zXSBBIFtgZml0Qm91bmRzYF0oI21hcCNmaXRib3VuZHMpIG9wdGlvbnMgb2JqZWN0IHRvIHVzZSBfb25seV8gd2hlbiBmaXR0aW5nIHRoZSBpbml0aWFsIGBib3VuZHNgIHByb3ZpZGVkIGFib3ZlLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5yZW5kZXJXb3JsZENvcGllcz10cnVlXSAgSWYgYHRydWVgLCBtdWx0aXBsZSBjb3BpZXMgb2YgdGhlIHdvcmxkIHdpbGwgYmUgcmVuZGVyZWQgc2lkZSBieSBzaWRlIGJleW9uZCAtMTgwIGFuZCAxODAgZGVncmVlcyBsb25naXR1ZGUuIElmIHNldCB0byBgZmFsc2VgOlxuICogLSBXaGVuIHRoZSBtYXAgaXMgem9vbWVkIG91dCBmYXIgZW5vdWdoIHRoYXQgYSBzaW5nbGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHdvcmxkIGRvZXMgbm90IGZpbGwgdGhlIG1hcCdzIGVudGlyZVxuICogY29udGFpbmVyLCB0aGVyZSB3aWxsIGJlIGJsYW5rIHNwYWNlIGJleW9uZCAxODAgYW5kIC0xODAgZGVncmVlcyBsb25naXR1ZGUuXG4gKiAtIEZlYXR1cmVzIHRoYXQgY3Jvc3MgMTgwIGFuZCAtMTgwIGRlZ3JlZXMgbG9uZ2l0dWRlIHdpbGwgYmUgY3V0IGluIHR3byAod2l0aCBvbmUgcG9ydGlvbiBvbiB0aGUgcmlnaHQgZWRnZSBvZiB0aGVcbiAqIG1hcCBhbmQgdGhlIG90aGVyIG9uIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIG1hcCkgYXQgZXZlcnkgem9vbSBsZXZlbC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tYXhUaWxlQ2FjaGVTaXplPW51bGxdICBUaGUgbWF4aW11bSBudW1iZXIgb2YgdGlsZXMgc3RvcmVkIGluIHRoZSB0aWxlIGNhY2hlIGZvciBhIGdpdmVuIHNvdXJjZS4gSWYgb21pdHRlZCwgdGhlIGNhY2hlIHdpbGwgYmUgZHluYW1pY2FsbHkgc2l6ZWQgYmFzZWQgb24gdGhlIGN1cnJlbnQgdmlld3BvcnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5PSdzYW5zLXNlcmlmJ10gRGVmaW5lcyBhIENTU1xuICogICBmb250LWZhbWlseSBmb3IgbG9jYWxseSBvdmVycmlkaW5nIGdlbmVyYXRpb24gb2YgZ2x5cGhzIGluIHRoZSAnQ0pLIFVuaWZpZWQgSWRlb2dyYXBocycsICdIaXJhZ2FuYScsICdLYXRha2FuYScgYW5kICdIYW5ndWwgU3lsbGFibGVzJyByYW5nZXMuXG4gKiAgIEluIHRoZXNlIHJhbmdlcywgZm9udCBzZXR0aW5ncyBmcm9tIHRoZSBtYXAncyBzdHlsZSB3aWxsIGJlIGlnbm9yZWQsIGV4Y2VwdCBmb3IgZm9udC13ZWlnaHQga2V5d29yZHMgKGxpZ2h0L3JlZ3VsYXIvbWVkaXVtL2JvbGQpLlxuICogICBTZXQgdG8gYGZhbHNlYCwgdG8gZW5hYmxlIGZvbnQgc2V0dGluZ3MgZnJvbSB0aGUgbWFwJ3Mgc3R5bGUgZm9yIHRoZXNlIGdseXBoIHJhbmdlcy4gIE5vdGUgdGhhdCBbTWFwYm94IFN0dWRpb10oaHR0cHM6Ly9zdHVkaW8ubWFwYm94LmNvbS8pIHNldHMgdGhpcyB2YWx1ZSB0byBgZmFsc2VgIGJ5IGRlZmF1bHQuXG4gKiAgIFRoZSBwdXJwb3NlIG9mIHRoaXMgb3B0aW9uIGlzIHRvIGF2b2lkIGJhbmR3aWR0aC1pbnRlbnNpdmUgZ2x5cGggc2VydmVyIHJlcXVlc3RzLiAoU2VlIFtVc2UgbG9jYWxseSBnZW5lcmF0ZWQgaWRlb2dyYXBoc10oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9sb2NhbC1pZGVvZ3JhcGhzKS4pXG4gKiBAcGFyYW0ge1JlcXVlc3RUcmFuc2Zvcm1GdW5jdGlvbn0gW29wdGlvbnMudHJhbnNmb3JtUmVxdWVzdD1udWxsXSBBIGNhbGxiYWNrIHJ1biBiZWZvcmUgdGhlIE1hcCBtYWtlcyBhIHJlcXVlc3QgZm9yIGFuIGV4dGVybmFsIFVSTC4gVGhlIGNhbGxiYWNrIGNhbiBiZSB1c2VkIHRvIG1vZGlmeSB0aGUgdXJsLCBzZXQgaGVhZGVycywgb3Igc2V0IHRoZSBjcmVkZW50aWFscyBwcm9wZXJ0eSBmb3IgY3Jvc3Mtb3JpZ2luIHJlcXVlc3RzLlxuICogICBFeHBlY3RlZCB0byByZXR1cm4gYW4gb2JqZWN0IHdpdGggYSBgdXJsYCBwcm9wZXJ0eSBhbmQgb3B0aW9uYWxseSBgaGVhZGVyc2AgYW5kIGBjcmVkZW50aWFsc2AgcHJvcGVydGllcy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuY29sbGVjdFJlc291cmNlVGltaW5nPWZhbHNlXSBJZiBgdHJ1ZWAsIFJlc291cmNlIFRpbWluZyBBUEkgaW5mb3JtYXRpb24gd2lsbCBiZSBjb2xsZWN0ZWQgZm9yIHJlcXVlc3RzIG1hZGUgYnkgR2VvSlNPTiBhbmQgVmVjdG9yIFRpbGUgd2ViIHdvcmtlcnMgKHRoaXMgaW5mb3JtYXRpb24gaXMgbm9ybWFsbHkgaW5hY2Nlc3NpYmxlIGZyb20gdGhlIG1haW4gSmF2YXNjcmlwdCB0aHJlYWQpLiBJbmZvcm1hdGlvbiB3aWxsIGJlIHJldHVybmVkIGluIGEgYHJlc291cmNlVGltaW5nYCBwcm9wZXJ0eSBvZiByZWxldmFudCBgZGF0YWAgZXZlbnRzLlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmZhZGVEdXJhdGlvbj0zMDBdIENvbnRyb2xzIHRoZSBkdXJhdGlvbiBvZiB0aGUgZmFkZS1pbi9mYWRlLW91dCBhbmltYXRpb24gZm9yIGxhYmVsIGNvbGxpc2lvbnMsIGluIG1pbGxpc2Vjb25kcy4gVGhpcyBzZXR0aW5nIGFmZmVjdHMgYWxsIHN5bWJvbCBsYXllcnMuIFRoaXMgc2V0dGluZyBkb2VzIG5vdCBhZmZlY3QgdGhlIGR1cmF0aW9uIG9mIHJ1bnRpbWUgc3R5bGluZyB0cmFuc2l0aW9ucyBvciByYXN0ZXIgdGlsZSBjcm9zcy1mYWRpbmcuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmNyb3NzU291cmNlQ29sbGlzaW9ucz10cnVlXSBJZiBgdHJ1ZWAsIHN5bWJvbHMgZnJvbSBtdWx0aXBsZSBzb3VyY2VzIGNhbiBjb2xsaWRlIHdpdGggZWFjaCBvdGhlciBkdXJpbmcgY29sbGlzaW9uIGRldGVjdGlvbi4gSWYgYGZhbHNlYCwgY29sbGlzaW9uIGRldGVjdGlvbiBpcyBydW4gc2VwYXJhdGVseSBmb3IgdGhlIHN5bWJvbHMgaW4gZWFjaCBzb3VyY2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYWNjZXNzVG9rZW49bnVsbF0gSWYgc3BlY2lmaWVkLCBtYXAgd2lsbCB1c2UgdGhpcyB0b2tlbiBpbnN0ZWFkIG9mIHRoZSBvbmUgZGVmaW5lZCBpbiBtYXBib3hnbC5hY2Nlc3NUb2tlbi5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5sb2NhbGU9bnVsbF0gQSBwYXRjaCB0byBhcHBseSB0byB0aGUgZGVmYXVsdCBsb2NhbGl6YXRpb24gdGFibGUgZm9yIFVJIHN0cmluZ3MsIGUuZy4gY29udHJvbCB0b29sdGlwcy4gVGhlIGBsb2NhbGVgIG9iamVjdCBtYXBzIG5hbWVzcGFjZWQgVUkgc3RyaW5nIElEcyB0byB0cmFuc2xhdGVkIHN0cmluZ3MgaW4gdGhlIHRhcmdldCBsYW5ndWFnZTsgc2VlIGBzcmMvdWkvZGVmYXVsdF9sb2NhbGUuanNgIGZvciBhbiBleGFtcGxlIHdpdGggYWxsIHN1cHBvcnRlZCBzdHJpbmcgSURzLiBUaGUgb2JqZWN0IG1heSBzcGVjaWZ5IGFsbCBVSSBzdHJpbmdzICh0aGVyZWJ5IGFkZGluZyBzdXBwb3J0IGZvciBhIG5ldyB0cmFuc2xhdGlvbikgb3Igb25seSBhIHN1YnNldCBvZiBzdHJpbmdzICh0aGVyZWJ5IHBhdGNoaW5nIHRoZSBkZWZhdWx0IHRyYW5zbGF0aW9uIHRhYmxlKS5cbiAqIEBleGFtcGxlXG4gKiB2YXIgbWFwID0gbmV3IG1hcGJveGdsLk1hcCh7XG4gKiAgIGNvbnRhaW5lcjogJ21hcCcsXG4gKiAgIGNlbnRlcjogWy0xMjIuNDIwNjc5LCAzNy43NzI1MzddLFxuICogICB6b29tOiAxMyxcbiAqICAgc3R5bGU6IHN0eWxlX29iamVjdCxcbiAqICAgaGFzaDogdHJ1ZSxcbiAqICAgdHJhbnNmb3JtUmVxdWVzdDogKHVybCwgcmVzb3VyY2VUeXBlKT0+IHtcbiAqICAgICBpZihyZXNvdXJjZVR5cGUgPT09ICdTb3VyY2UnICYmIHVybC5zdGFydHNXaXRoKCdodHRwOi8vbXlIb3N0JykpIHtcbiAqICAgICAgIHJldHVybiB7XG4gKiAgICAgICAgdXJsOiB1cmwucmVwbGFjZSgnaHR0cCcsICdodHRwcycpLFxuICogICAgICAgIGhlYWRlcnM6IHsgJ215LWN1c3RvbS1oZWFkZXInOiB0cnVlfSxcbiAqICAgICAgICBjcmVkZW50aWFsczogJ2luY2x1ZGUnICAvLyBJbmNsdWRlIGNvb2tpZXMgZm9yIGNyb3NzLW9yaWdpbiByZXF1ZXN0c1xuICogICAgICB9XG4gKiAgICAgfVxuICogICB9XG4gKiB9KTtcbiAqIEBzZWUgW0Rpc3BsYXkgYSBtYXBdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGVzLylcbiAqL1xuY2xhc3MgTWFwIGV4dGVuZHMgQ2FtZXJhIHtcbiAgICBzdHlsZTogU3R5bGU7XG4gICAgcGFpbnRlcjogUGFpbnRlcjtcbiAgICBoYW5kbGVyczogSGFuZGxlck1hbmFnZXI7XG5cbiAgICBfY29udGFpbmVyOiBIVE1MRWxlbWVudDtcbiAgICBfbWlzc2luZ0NTU0NhbmFyeTogSFRNTEVsZW1lbnQ7XG4gICAgX2NhbnZhc0NvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gICAgX2NvbnRyb2xDb250YWluZXI6IEhUTUxFbGVtZW50O1xuICAgIF9jb250cm9sUG9zaXRpb25zOiB7W186IHN0cmluZ106IEhUTUxFbGVtZW50fTtcbiAgICBfaW50ZXJhY3RpdmU6ID9ib29sZWFuO1xuICAgIF9zaG93VGlsZUJvdW5kYXJpZXM6ID9ib29sZWFuO1xuICAgIF9zaG93Q29sbGlzaW9uQm94ZXM6ID9ib29sZWFuO1xuICAgIF9zaG93UGFkZGluZzogP2Jvb2xlYW47XG4gICAgX3Nob3dPdmVyZHJhd0luc3BlY3RvcjogYm9vbGVhbjtcbiAgICBfcmVwYWludDogP2Jvb2xlYW47XG4gICAgX3ZlcnRpY2VzOiA/Ym9vbGVhbjtcbiAgICBfY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudDtcbiAgICBfbWF4VGlsZUNhY2hlU2l6ZTogbnVtYmVyO1xuICAgIF9mcmFtZTogP0NhbmNlbGFibGU7XG4gICAgX3N0eWxlRGlydHk6ID9ib29sZWFuO1xuICAgIF9zb3VyY2VzRGlydHk6ID9ib29sZWFuO1xuICAgIF9wbGFjZW1lbnREaXJ0eTogP2Jvb2xlYW47XG4gICAgX2xvYWRlZDogYm9vbGVhbjtcbiAgICAvLyBhY2NvdW50cyBmb3IgcGxhY2VtZW50IGZpbmlzaGluZyBhcyB3ZWxsXG4gICAgX2Z1bGx5TG9hZGVkOiBib29sZWFuO1xuICAgIF90cmFja1Jlc2l6ZTogYm9vbGVhbjtcbiAgICBfcHJlc2VydmVEcmF3aW5nQnVmZmVyOiBib29sZWFuO1xuICAgIF9mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OiBib29sZWFuO1xuICAgIF9hbnRpYWxpYXM6IGJvb2xlYW47XG4gICAgX3JlZnJlc2hFeHBpcmVkVGlsZXM6IGJvb2xlYW47XG4gICAgX2hhc2g6IEhhc2g7XG4gICAgX2RlbGVnYXRlZExpc3RlbmVyczogYW55O1xuICAgIF9mYWRlRHVyYXRpb246IG51bWJlcjtcbiAgICBfY3Jvc3NTb3VyY2VDb2xsaXNpb25zOiBib29sZWFuO1xuICAgIF9jcm9zc0ZhZGluZ0ZhY3RvcjogbnVtYmVyO1xuICAgIF9jb2xsZWN0UmVzb3VyY2VUaW1pbmc6IGJvb2xlYW47XG4gICAgX3JlbmRlclRhc2tRdWV1ZTogVGFza1F1ZXVlO1xuICAgIF9jb250cm9sczogQXJyYXk8SUNvbnRyb2w+O1xuICAgIF9tYXBJZDogbnVtYmVyO1xuICAgIF9sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk6IHN0cmluZztcbiAgICBfcmVxdWVzdE1hbmFnZXI6IFJlcXVlc3RNYW5hZ2VyO1xuICAgIF9sb2NhbGU6IE9iamVjdDtcbiAgICBfcmVtb3ZlZDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXAncyB7QGxpbmsgU2Nyb2xsWm9vbUhhbmRsZXJ9LCB3aGljaCBpbXBsZW1lbnRzIHpvb21pbmcgaW4gYW5kIG91dCB3aXRoIGEgc2Nyb2xsIHdoZWVsIG9yIHRyYWNrcGFkLlxuICAgICAqIEZpbmQgbW9yZSBkZXRhaWxzIGFuZCBleGFtcGxlcyB1c2luZyBgc2Nyb2xsWm9vbWAgaW4gdGhlIHtAbGluayBTY3JvbGxab29tSGFuZGxlcn0gc2VjdGlvbi5cbiAgICAgKi9cbiAgICBzY3JvbGxab29tOiBTY3JvbGxab29tSGFuZGxlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXAncyB7QGxpbmsgQm94Wm9vbUhhbmRsZXJ9LCB3aGljaCBpbXBsZW1lbnRzIHpvb21pbmcgdXNpbmcgYSBkcmFnIGdlc3R1cmUgd2l0aCB0aGUgU2hpZnQga2V5IHByZXNzZWQuXG4gICAgICogRmluZCBtb3JlIGRldGFpbHMgYW5kIGV4YW1wbGVzIHVzaW5nIGBib3hab29tYCBpbiB0aGUge0BsaW5rIEJveFpvb21IYW5kbGVyfSBzZWN0aW9uLlxuICAgICAqL1xuICAgIGJveFpvb206IEJveFpvb21IYW5kbGVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1hcCdzIHtAbGluayBEcmFnUm90YXRlSGFuZGxlcn0sIHdoaWNoIGltcGxlbWVudHMgcm90YXRpbmcgdGhlIG1hcCB3aGlsZSBkcmFnZ2luZyB3aXRoIHRoZSByaWdodFxuICAgICAqIG1vdXNlIGJ1dHRvbiBvciB3aXRoIHRoZSBDb250cm9sIGtleSBwcmVzc2VkLiBGaW5kIG1vcmUgZGV0YWlscyBhbmQgZXhhbXBsZXMgdXNpbmcgYGRyYWdSb3RhdGVgXG4gICAgICogaW4gdGhlIHtAbGluayBEcmFnUm90YXRlSGFuZGxlcn0gc2VjdGlvbi5cbiAgICAgKi9cbiAgICBkcmFnUm90YXRlOiBEcmFnUm90YXRlSGFuZGxlcjtcblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXAncyB7QGxpbmsgRHJhZ1BhbkhhbmRsZXJ9LCB3aGljaCBpbXBsZW1lbnRzIGRyYWdnaW5nIHRoZSBtYXAgd2l0aCBhIG1vdXNlIG9yIHRvdWNoIGdlc3R1cmUuXG4gICAgICogRmluZCBtb3JlIGRldGFpbHMgYW5kIGV4YW1wbGVzIHVzaW5nIGBkcmFnUGFuYCBpbiB0aGUge0BsaW5rIERyYWdQYW5IYW5kbGVyfSBzZWN0aW9uLlxuICAgICAqL1xuICAgIGRyYWdQYW46IERyYWdQYW5IYW5kbGVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1hcCdzIHtAbGluayBLZXlib2FyZEhhbmRsZXJ9LCB3aGljaCBhbGxvd3MgdGhlIHVzZXIgdG8gem9vbSwgcm90YXRlLCBhbmQgcGFuIHRoZSBtYXAgdXNpbmcga2V5Ym9hcmRcbiAgICAgKiBzaG9ydGN1dHMuIEZpbmQgbW9yZSBkZXRhaWxzIGFuZCBleGFtcGxlcyB1c2luZyBga2V5Ym9hcmRgIGluIHRoZSB7QGxpbmsgS2V5Ym9hcmRIYW5kbGVyfSBzZWN0aW9uLlxuICAgICAqL1xuICAgIGtleWJvYXJkOiBLZXlib2FyZEhhbmRsZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWFwJ3Mge0BsaW5rIERvdWJsZUNsaWNrWm9vbUhhbmRsZXJ9LCB3aGljaCBhbGxvd3MgdGhlIHVzZXIgdG8gem9vbSBieSBkb3VibGUgY2xpY2tpbmcuXG4gICAgICogRmluZCBtb3JlIGRldGFpbHMgYW5kIGV4YW1wbGVzIHVzaW5nIGBkb3VibGVDbGlja1pvb21gIGluIHRoZSB7QGxpbmsgRG91YmxlQ2xpY2tab29tSGFuZGxlcn0gc2VjdGlvbi5cbiAgICAgKi9cbiAgICBkb3VibGVDbGlja1pvb206IERvdWJsZUNsaWNrWm9vbUhhbmRsZXI7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWFwJ3Mge0BsaW5rIFRvdWNoWm9vbVJvdGF0ZUhhbmRsZXJ9LCB3aGljaCBhbGxvd3MgdGhlIHVzZXIgdG8gem9vbSBvciByb3RhdGUgdGhlIG1hcCB3aXRoIHRvdWNoIGdlc3R1cmVzLlxuICAgICAqIEZpbmQgbW9yZSBkZXRhaWxzIGFuZCBleGFtcGxlcyB1c2luZyBgdG91Y2hab29tUm90YXRlYCBpbiB0aGUge0BsaW5rIFRvdWNoWm9vbVJvdGF0ZUhhbmRsZXJ9IHNlY3Rpb24uXG4gICAgICovXG4gICAgdG91Y2hab29tUm90YXRlOiBUb3VjaFpvb21Sb3RhdGVIYW5kbGVyO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1hcCdzIHtAbGluayBUb3VjaFBpdGNoSGFuZGxlcn0sIHdoaWNoIGFsbG93cyB0aGUgdXNlciB0byBwaXRjaCB0aGUgbWFwIHdpdGggdG91Y2ggZ2VzdHVyZXMuXG4gICAgICogRmluZCBtb3JlIGRldGFpbHMgYW5kIGV4YW1wbGVzIHVzaW5nIGB0b3VjaFBpdGNoYCBpbiB0aGUge0BsaW5rIFRvdWNoUGl0Y2hIYW5kbGVyfSBzZWN0aW9uLlxuICAgICAqL1xuICAgIHRvdWNoUGl0Y2g6IFRvdWNoUGl0Y2hIYW5kbGVyO1xuXG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogTWFwT3B0aW9ucykge1xuICAgICAgICBQZXJmb3JtYW5jZVV0aWxzLm1hcmsoUGVyZm9ybWFuY2VNYXJrZXJzLmNyZWF0ZSk7XG5cbiAgICAgICAgb3B0aW9ucyA9IGV4dGVuZCh7fSwgZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChvcHRpb25zLm1pblpvb20gIT0gbnVsbCAmJiBvcHRpb25zLm1heFpvb20gIT0gbnVsbCAmJiBvcHRpb25zLm1pblpvb20gPiBvcHRpb25zLm1heFpvb20pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbWF4Wm9vbSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBtaW5ab29tYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5taW5QaXRjaCAhPSBudWxsICYmIG9wdGlvbnMubWF4UGl0Y2ggIT0gbnVsbCAmJiBvcHRpb25zLm1pblBpdGNoID4gb3B0aW9ucy5tYXhQaXRjaCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBtYXhQaXRjaCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBtaW5QaXRjaGApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMubWluUGl0Y2ggIT0gbnVsbCAmJiBvcHRpb25zLm1pblBpdGNoIDwgZGVmYXVsdE1pblBpdGNoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG1pblBpdGNoIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICR7ZGVmYXVsdE1pblBpdGNofWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMubWF4UGl0Y2ggIT0gbnVsbCAmJiBvcHRpb25zLm1heFBpdGNoID4gZGVmYXVsdE1heFBpdGNoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG1heFBpdGNoIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICR7ZGVmYXVsdE1heFBpdGNofWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdHJhbnNmb3JtID0gbmV3IFRyYW5zZm9ybShvcHRpb25zLm1pblpvb20sIG9wdGlvbnMubWF4Wm9vbSwgb3B0aW9ucy5taW5QaXRjaCwgb3B0aW9ucy5tYXhQaXRjaCwgb3B0aW9ucy5yZW5kZXJXb3JsZENvcGllcyk7XG4gICAgICAgIHN1cGVyKHRyYW5zZm9ybSwgb3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5faW50ZXJhY3RpdmUgPSBvcHRpb25zLmludGVyYWN0aXZlO1xuICAgICAgICB0aGlzLl9tYXhUaWxlQ2FjaGVTaXplID0gb3B0aW9ucy5tYXhUaWxlQ2FjaGVTaXplO1xuICAgICAgICB0aGlzLl9mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0ID0gb3B0aW9ucy5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0O1xuICAgICAgICB0aGlzLl9wcmVzZXJ2ZURyYXdpbmdCdWZmZXIgPSBvcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlcjtcbiAgICAgICAgdGhpcy5fYW50aWFsaWFzID0gb3B0aW9ucy5hbnRpYWxpYXM7XG4gICAgICAgIHRoaXMuX3RyYWNrUmVzaXplID0gb3B0aW9ucy50cmFja1Jlc2l6ZTtcbiAgICAgICAgdGhpcy5fYmVhcmluZ1NuYXAgPSBvcHRpb25zLmJlYXJpbmdTbmFwO1xuICAgICAgICB0aGlzLl9yZWZyZXNoRXhwaXJlZFRpbGVzID0gb3B0aW9ucy5yZWZyZXNoRXhwaXJlZFRpbGVzO1xuICAgICAgICB0aGlzLl9mYWRlRHVyYXRpb24gPSBvcHRpb25zLmZhZGVEdXJhdGlvbjtcbiAgICAgICAgdGhpcy5fY3Jvc3NTb3VyY2VDb2xsaXNpb25zID0gb3B0aW9ucy5jcm9zc1NvdXJjZUNvbGxpc2lvbnM7XG4gICAgICAgIHRoaXMuX2Nyb3NzRmFkaW5nRmFjdG9yID0gMTtcbiAgICAgICAgdGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nID0gb3B0aW9ucy5jb2xsZWN0UmVzb3VyY2VUaW1pbmc7XG4gICAgICAgIHRoaXMuX3JlbmRlclRhc2tRdWV1ZSA9IG5ldyBUYXNrUXVldWUoKTtcbiAgICAgICAgdGhpcy5fY29udHJvbHMgPSBbXTtcbiAgICAgICAgdGhpcy5fbWFwSWQgPSB1bmlxdWVJZCgpO1xuICAgICAgICB0aGlzLl9sb2NhbGUgPSBleHRlbmQoe30sIGRlZmF1bHRMb2NhbGUsIG9wdGlvbnMubG9jYWxlKTtcblxuICAgICAgICB0aGlzLl9yZXF1ZXN0TWFuYWdlciA9IG5ldyBSZXF1ZXN0TWFuYWdlcihvcHRpb25zLnRyYW5zZm9ybVJlcXVlc3QsIG9wdGlvbnMuYWNjZXNzVG9rZW4pO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jb250YWluZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIgPSB3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3B0aW9ucy5jb250YWluZXIpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9jb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbnRhaW5lciAnJHtvcHRpb25zLmNvbnRhaW5lcn0nIG5vdCBmb3VuZC5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmNvbnRhaW5lciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0eXBlOiAnY29udGFpbmVyJyBtdXN0IGJlIGEgU3RyaW5nIG9yIEhUTUxFbGVtZW50LmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMubWF4Qm91bmRzKSB7XG4gICAgICAgICAgICB0aGlzLnNldE1heEJvdW5kcyhvcHRpb25zLm1heEJvdW5kcyk7XG4gICAgICAgIH1cblxuICAgICAgICBiaW5kQWxsKFtcbiAgICAgICAgICAgICdfb25XaW5kb3dPbmxpbmUnLFxuICAgICAgICAgICAgJ19vbldpbmRvd1Jlc2l6ZScsXG4gICAgICAgICAgICAnX2NvbnRleHRMb3N0JyxcbiAgICAgICAgICAgICdfY29udGV4dFJlc3RvcmVkJ1xuICAgICAgICBdLCB0aGlzKTtcblxuICAgICAgICB0aGlzLl9zZXR1cENvbnRhaW5lcigpO1xuICAgICAgICB0aGlzLl9zZXR1cFBhaW50ZXIoKTtcbiAgICAgICAgaWYgKHRoaXMucGFpbnRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBpbml0aWFsaXplIFdlYkdMLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbignbW92ZScsICgpID0+IHRoaXMuX3VwZGF0ZShmYWxzZSkpO1xuICAgICAgICB0aGlzLm9uKCdtb3ZlZW5kJywgKCkgPT4gdGhpcy5fdXBkYXRlKGZhbHNlKSk7XG4gICAgICAgIHRoaXMub24oJ3pvb20nLCAoKSA9PiB0aGlzLl91cGRhdGUodHJ1ZSkpO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ29ubGluZScsIHRoaXMuX29uV2luZG93T25saW5lLCBmYWxzZSk7XG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fb25XaW5kb3dSZXNpemUsIGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGFuZGxlcnMgPSBuZXcgSGFuZGxlck1hbmFnZXIodGhpcywgb3B0aW9ucyk7XG5cbiAgICAgICAgY29uc3QgaGFzaE5hbWUgPSAodHlwZW9mIG9wdGlvbnMuaGFzaCA9PT0gJ3N0cmluZycgJiYgb3B0aW9ucy5oYXNoKSB8fCB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX2hhc2ggPSBvcHRpb25zLmhhc2ggJiYgKG5ldyBIYXNoKGhhc2hOYW1lKSkuYWRkVG8odGhpcyk7XG4gICAgICAgIC8vIGRvbid0IHNldCBwb3NpdGlvbiBmcm9tIG9wdGlvbnMgaWYgc2V0IHRocm91Z2ggaGFzaFxuICAgICAgICBpZiAoIXRoaXMuX2hhc2ggfHwgIXRoaXMuX2hhc2guX29uSGFzaENoYW5nZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmp1bXBUbyh7XG4gICAgICAgICAgICAgICAgY2VudGVyOiBvcHRpb25zLmNlbnRlcixcbiAgICAgICAgICAgICAgICB6b29tOiBvcHRpb25zLnpvb20sXG4gICAgICAgICAgICAgICAgYmVhcmluZzogb3B0aW9ucy5iZWFyaW5nLFxuICAgICAgICAgICAgICAgIHBpdGNoOiBvcHRpb25zLnBpdGNoXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuYm91bmRzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNpemUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZpdEJvdW5kcyhvcHRpb25zLmJvdW5kcywgZXh0ZW5kKHt9LCBvcHRpb25zLmZpdEJvdW5kc09wdGlvbnMsIHtkdXJhdGlvbjogMH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVzaXplKCk7XG5cbiAgICAgICAgdGhpcy5fbG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5ID0gb3B0aW9ucy5sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk7XG4gICAgICAgIGlmIChvcHRpb25zLnN0eWxlKSB0aGlzLnNldFN0eWxlKG9wdGlvbnMuc3R5bGUsIHtsb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk6IG9wdGlvbnMubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5fSk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuYXR0cmlidXRpb25Db250cm9sKVxuICAgICAgICAgICAgdGhpcy5hZGRDb250cm9sKG5ldyBBdHRyaWJ1dGlvbkNvbnRyb2woe2N1c3RvbUF0dHJpYnV0aW9uOiBvcHRpb25zLmN1c3RvbUF0dHJpYnV0aW9ufSkpO1xuXG4gICAgICAgIHRoaXMuYWRkQ29udHJvbChuZXcgTG9nb0NvbnRyb2woKSwgb3B0aW9ucy5sb2dvUG9zaXRpb24pO1xuXG4gICAgICAgIHRoaXMub24oJ3N0eWxlLmxvYWQnLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy50cmFuc2Zvcm0udW5tb2RpZmllZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuanVtcFRvKCh0aGlzLnN0eWxlLnN0eWxlc2hlZXQ6IGFueSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vbignZGF0YScsIChldmVudDogTWFwRGF0YUV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGUoZXZlbnQuZGF0YVR5cGUgPT09ICdzdHlsZScpO1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudChgJHtldmVudC5kYXRhVHlwZX1kYXRhYCwgZXZlbnQpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMub24oJ2RhdGFsb2FkaW5nJywgKGV2ZW50OiBNYXBEYXRhRXZlbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoYCR7ZXZlbnQuZGF0YVR5cGV9ZGF0YWxvYWRpbmdgLCBldmVudCkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKlxuICAgICogUmV0dXJucyBhIHVuaXF1ZSBudW1iZXIgZm9yIHRoaXMgbWFwIGluc3RhbmNlIHdoaWNoIGlzIHVzZWQgZm9yIHRoZSBNYXBMb2FkRXZlbnRcbiAgICAqIHRvIG1ha2Ugc3VyZSB3ZSBvbmx5IGZpcmUgb25lIGV2ZW50IHBlciBpbnN0YW50aWF0ZWQgbWFwIG9iamVjdC5cbiAgICAqIEBwcml2YXRlXG4gICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgICovXG4gICAgX2dldE1hcElkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWFwSWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhbiB7QGxpbmsgSUNvbnRyb2x9IHRvIHRoZSBtYXAsIGNhbGxpbmcgYGNvbnRyb2wub25BZGQodGhpcylgLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtJQ29udHJvbH0gY29udHJvbCBUaGUge0BsaW5rIElDb250cm9sfSB0byBhZGQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtwb3NpdGlvbl0gcG9zaXRpb24gb24gdGhlIG1hcCB0byB3aGljaCB0aGUgY29udHJvbCB3aWxsIGJlIGFkZGVkLlxuICAgICAqIFZhbGlkIHZhbHVlcyBhcmUgYCd0b3AtbGVmdCdgLCBgJ3RvcC1yaWdodCdgLCBgJ2JvdHRvbS1sZWZ0J2AsIGFuZCBgJ2JvdHRvbS1yaWdodCdgLiBEZWZhdWx0cyB0byBgJ3RvcC1yaWdodCdgLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gQWRkIHpvb20gYW5kIHJvdGF0aW9uIGNvbnRyb2xzIHRvIHRoZSBtYXAuXG4gICAgICogbWFwLmFkZENvbnRyb2wobmV3IG1hcGJveGdsLk5hdmlnYXRpb25Db250cm9sKCkpO1xuICAgICAqIEBzZWUgW0Rpc3BsYXkgbWFwIG5hdmlnYXRpb24gY29udHJvbHNdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvbmF2aWdhdGlvbi8pXG4gICAgICovXG4gICAgYWRkQ29udHJvbChjb250cm9sOiBJQ29udHJvbCwgcG9zaXRpb24/OiBDb250cm9sUG9zaXRpb24pIHtcbiAgICAgICAgaWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQgJiYgY29udHJvbC5nZXREZWZhdWx0UG9zaXRpb24pIHtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gY29udHJvbC5nZXREZWZhdWx0UG9zaXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocG9zaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcG9zaXRpb24gPSAndG9wLXJpZ2h0JztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbnRyb2wgfHwgIWNvbnRyb2wub25BZGQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50IHRvIG1hcC5hZGRDb250cm9sKCkuIEFyZ3VtZW50IG11c3QgYmUgYSBjb250cm9sIHdpdGggb25BZGQgYW5kIG9uUmVtb3ZlIG1ldGhvZHMuJykpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb250cm9sRWxlbWVudCA9IGNvbnRyb2wub25BZGQodGhpcyk7XG4gICAgICAgIHRoaXMuX2NvbnRyb2xzLnB1c2goY29udHJvbCk7XG5cbiAgICAgICAgY29uc3QgcG9zaXRpb25Db250YWluZXIgPSB0aGlzLl9jb250cm9sUG9zaXRpb25zW3Bvc2l0aW9uXTtcbiAgICAgICAgaWYgKHBvc2l0aW9uLmluZGV4T2YoJ2JvdHRvbScpICE9PSAtMSkge1xuICAgICAgICAgICAgcG9zaXRpb25Db250YWluZXIuaW5zZXJ0QmVmb3JlKGNvbnRyb2xFbGVtZW50LCBwb3NpdGlvbkNvbnRhaW5lci5maXJzdENoaWxkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBvc2l0aW9uQ29udGFpbmVyLmFwcGVuZENoaWxkKGNvbnRyb2xFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBjb250cm9sIGZyb20gdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7SUNvbnRyb2x9IGNvbnRyb2wgVGhlIHtAbGluayBJQ29udHJvbH0gdG8gcmVtb3ZlLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gRGVmaW5lIGEgbmV3IG5hdmlnYXRpb24gY29udHJvbC5cbiAgICAgKiB2YXIgbmF2aWdhdGlvbiA9IG5ldyBtYXBib3hnbC5OYXZpZ2F0aW9uQ29udHJvbCgpO1xuICAgICAqIC8vIEFkZCB6b29tIGFuZCByb3RhdGlvbiBjb250cm9scyB0byB0aGUgbWFwLlxuICAgICAqIG1hcC5hZGRDb250cm9sKG5hdmlnYXRpb24pO1xuICAgICAqIC8vIFJlbW92ZSB6b29tIGFuZCByb3RhdGlvbiBjb250cm9scyBmcm9tIHRoZSBtYXAuXG4gICAgICogbWFwLnJlbW92ZUNvbnRyb2wobmF2aWdhdGlvbik7XG4gICAgICovXG4gICAgcmVtb3ZlQ29udHJvbChjb250cm9sOiBJQ29udHJvbCkge1xuICAgICAgICBpZiAoIWNvbnRyb2wgfHwgIWNvbnRyb2wub25SZW1vdmUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50IHRvIG1hcC5yZW1vdmVDb250cm9sKCkuIEFyZ3VtZW50IG11c3QgYmUgYSBjb250cm9sIHdpdGggb25BZGQgYW5kIG9uUmVtb3ZlIG1ldGhvZHMuJykpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaSA9IHRoaXMuX2NvbnRyb2xzLmluZGV4T2YoY29udHJvbCk7XG4gICAgICAgIGlmIChjaSA+IC0xKSB0aGlzLl9jb250cm9scy5zcGxpY2UoY2ksIDEpO1xuICAgICAgICBjb250cm9sLm9uUmVtb3ZlKHRoaXMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNpemVzIHRoZSBtYXAgYWNjb3JkaW5nIHRvIHRoZSBkaW1lbnNpb25zIG9mIGl0c1xuICAgICAqIGBjb250YWluZXJgIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBDaGVja3MgaWYgdGhlIG1hcCBjb250YWluZXIgc2l6ZSBjaGFuZ2VkIGFuZCB1cGRhdGVzIHRoZSBtYXAgaWYgaXQgaGFzIGNoYW5nZWQuXG4gICAgICogVGhpcyBtZXRob2QgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIG1hcCdzIGBjb250YWluZXJgIGlzIHJlc2l6ZWQgcHJvZ3JhbW1hdGljYWxseVxuICAgICAqIG9yIHdoZW4gdGhlIG1hcCBpcyBzaG93biBhZnRlciBiZWluZyBpbml0aWFsbHkgaGlkZGVuIHdpdGggQ1NTLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50RGF0YSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgcGFzc2VkIHRvIGBtb3Zlc3RhcnRgLCBgbW92ZWAsIGByZXNpemVgLCBhbmQgYG1vdmVlbmRgXG4gICAgICogICBldmVudHMgdGhhdCBnZXQgdHJpZ2dlcmVkIGFzIGEgcmVzdWx0IG9mIHJlc2l6ZS4gVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBkaWZmZXJlbnRpYXRpbmcgdGhlXG4gICAgICogICBzb3VyY2Ugb2YgYW4gZXZlbnQgKGZvciBleGFtcGxlLCB1c2VyLWluaXRpYXRlZCBvciBwcm9ncmFtbWF0aWNhbGx5LXRyaWdnZXJlZCBldmVudHMpLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gUmVzaXplIHRoZSBtYXAgd2hlbiB0aGUgbWFwIGNvbnRhaW5lciBpcyBzaG93blxuICAgICAqIC8vIGFmdGVyIGJlaW5nIGluaXRpYWxseSBoaWRkZW4gd2l0aCBDU1MuXG4gICAgICogdmFyIG1hcERpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYXAnKTtcbiAgICAgKiBpZiAobWFwRGl2LnN0eWxlLnZpc2liaWxpdHkgPT09IHRydWUpIG1hcC5yZXNpemUoKTtcbiAgICAgKi9cbiAgICByZXNpemUoZXZlbnREYXRhPzogT2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSB0aGlzLl9jb250YWluZXJEaW1lbnNpb25zKCk7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gZGltZW5zaW9uc1swXTtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gZGltZW5zaW9uc1sxXTtcblxuICAgICAgICB0aGlzLl9yZXNpemVDYW52YXMod2lkdGgsIGhlaWdodCk7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5wYWludGVyLnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcblxuICAgICAgICBjb25zdCBmaXJlTW92aW5nID0gIXRoaXMuX21vdmluZztcbiAgICAgICAgaWYgKGZpcmVNb3ZpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnbW92ZXN0YXJ0JywgZXZlbnREYXRhKSlcbiAgICAgICAgICAgICAgICAuZmlyZShuZXcgRXZlbnQoJ21vdmUnLCBldmVudERhdGEpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3Jlc2l6ZScsIGV2ZW50RGF0YSkpO1xuXG4gICAgICAgIGlmIChmaXJlTW92aW5nKSB0aGlzLmZpcmUobmV3IEV2ZW50KCdtb3ZlZW5kJywgZXZlbnREYXRhKSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbWFwJ3MgZ2VvZ3JhcGhpY2FsIGJvdW5kcy4gV2hlbiB0aGUgYmVhcmluZyBvciBwaXRjaCBpcyBub24temVybywgdGhlIHZpc2libGUgcmVnaW9uIGlzIG5vdFxuICAgICAqIGFuIGF4aXMtYWxpZ25lZCByZWN0YW5nbGUsIGFuZCB0aGUgcmVzdWx0IGlzIHRoZSBzbWFsbGVzdCBib3VuZHMgdGhhdCBlbmNvbXBhc3NlcyB0aGUgdmlzaWJsZSByZWdpb24uXG4gICAgICogQHJldHVybnMge0xuZ0xhdEJvdW5kc30gVGhlIGdlb2dyYXBoaWNhbCBib3VuZHMgb2YgdGhlIG1hcCBhcyB7QGxpbmsgTG5nTGF0Qm91bmRzfS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBib3VuZHMgPSBtYXAuZ2V0Qm91bmRzKCk7XG4gICAgICovXG4gICAgZ2V0Qm91bmRzKCk6IExuZ0xhdEJvdW5kcyB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybS5nZXRCb3VuZHMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBtYXhpbXVtIGdlb2dyYXBoaWNhbCBib3VuZHMgdGhlIG1hcCBpcyBjb25zdHJhaW5lZCB0bywgb3IgYG51bGxgIGlmIG5vbmUgc2V0LlxuICAgICAqIEByZXR1cm5zIFRoZSBtYXAgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIG1heEJvdW5kcyA9IG1hcC5nZXRNYXhCb3VuZHMoKTtcbiAgICAgKi9cbiAgICBnZXRNYXhCb3VuZHMoKTogTG5nTGF0Qm91bmRzIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybS5nZXRNYXhCb3VuZHMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIG9yIGNsZWFycyB0aGUgbWFwJ3MgZ2VvZ3JhcGhpY2FsIGJvdW5kcy5cbiAgICAgKlxuICAgICAqIFBhbiBhbmQgem9vbSBvcGVyYXRpb25zIGFyZSBjb25zdHJhaW5lZCB3aXRoaW4gdGhlc2UgYm91bmRzLlxuICAgICAqIElmIGEgcGFuIG9yIHpvb20gaXMgcGVyZm9ybWVkIHRoYXQgd291bGRcbiAgICAgKiBkaXNwbGF5IHJlZ2lvbnMgb3V0c2lkZSB0aGVzZSBib3VuZHMsIHRoZSBtYXAgd2lsbFxuICAgICAqIGluc3RlYWQgZGlzcGxheSBhIHBvc2l0aW9uIGFuZCB6b29tIGxldmVsXG4gICAgICogYXMgY2xvc2UgYXMgcG9zc2libGUgdG8gdGhlIG9wZXJhdGlvbidzIHJlcXVlc3Qgd2hpbGUgc3RpbGxcbiAgICAgKiByZW1haW5pbmcgd2l0aGluIHRoZSBib3VuZHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0xuZ0xhdEJvdW5kc0xpa2UgfCBudWxsIHwgdW5kZWZpbmVkfSBib3VuZHMgVGhlIG1heGltdW0gYm91bmRzIHRvIHNldC4gSWYgYG51bGxgIG9yIGB1bmRlZmluZWRgIGlzIHByb3ZpZGVkLCB0aGUgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgbWFwJ3MgbWF4aW11bSBib3VuZHMuXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBEZWZpbmUgYm91bmRzIHRoYXQgY29uZm9ybSB0byB0aGUgYExuZ0xhdEJvdW5kc0xpa2VgIG9iamVjdC5cbiAgICAgKiB2YXIgYm91bmRzID0gW1xuICAgICAqICAgWy03NC4wNDcyOCwgNDAuNjgzOTJdLCAvLyBbd2VzdCwgc291dGhdXG4gICAgICogICBbLTczLjkxMDU4LCA0MC44Nzc2NF0gIC8vIFtlYXN0LCBub3J0aF1cbiAgICAgKiBdO1xuICAgICAqIC8vIFNldCB0aGUgbWFwJ3MgbWF4IGJvdW5kcy5cbiAgICAgKiBtYXAuc2V0TWF4Qm91bmRzKGJvdW5kcyk7XG4gICAgICovXG4gICAgc2V0TWF4Qm91bmRzKGJvdW5kczogTG5nTGF0Qm91bmRzTGlrZSkge1xuICAgICAgICB0aGlzLnRyYW5zZm9ybS5zZXRNYXhCb3VuZHMoTG5nTGF0Qm91bmRzLmNvbnZlcnQoYm91bmRzKSk7XG4gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIG9yIGNsZWFycyB0aGUgbWFwJ3MgbWluaW11bSB6b29tIGxldmVsLlxuICAgICAqIElmIHRoZSBtYXAncyBjdXJyZW50IHpvb20gbGV2ZWwgaXMgbG93ZXIgdGhhbiB0aGUgbmV3IG1pbmltdW0sXG4gICAgICogdGhlIG1hcCB3aWxsIHpvb20gdG8gdGhlIG5ldyBtaW5pbXVtLlxuICAgICAqXG4gICAgICogSXQgaXMgbm90IGFsd2F5cyBwb3NzaWJsZSB0byB6b29tIG91dCBhbmQgcmVhY2ggdGhlIHNldCBgbWluWm9vbWAuXG4gICAgICogT3RoZXIgZmFjdG9ycyBzdWNoIGFzIG1hcCBoZWlnaHQgbWF5IHJlc3RyaWN0IHpvb21pbmcuIEZvciBleGFtcGxlLFxuICAgICAqIGlmIHRoZSBtYXAgaXMgNTEycHggdGFsbCBpdCB3aWxsIG5vdCBiZSBwb3NzaWJsZSB0byB6b29tIGJlbG93IHpvb20gMFxuICAgICAqIG5vIG1hdHRlciB3aGF0IHRoZSBgbWluWm9vbWAgaXMgc2V0IHRvLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkfSBtaW5ab29tIFRoZSBtaW5pbXVtIHpvb20gbGV2ZWwgdG8gc2V0ICgtMiAtIDI0KS5cbiAgICAgKiAgIElmIGBudWxsYCBvciBgdW5kZWZpbmVkYCBpcyBwcm92aWRlZCwgdGhlIGZ1bmN0aW9uIHJlbW92ZXMgdGhlIGN1cnJlbnQgbWluaW11bSB6b29tIChpLmUuIHNldHMgaXQgdG8gLTIpLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLnNldE1pblpvb20oMTIuMjUpO1xuICAgICAqL1xuICAgIHNldE1pblpvb20obWluWm9vbT86ID9udW1iZXIpIHtcblxuICAgICAgICBtaW5ab29tID0gbWluWm9vbSA9PT0gbnVsbCB8fCBtaW5ab29tID09PSB1bmRlZmluZWQgPyBkZWZhdWx0TWluWm9vbSA6IG1pblpvb207XG5cbiAgICAgICAgaWYgKG1pblpvb20gPj0gZGVmYXVsdE1pblpvb20gJiYgbWluWm9vbSA8PSB0aGlzLnRyYW5zZm9ybS5tYXhab29tKSB7XG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybS5taW5ab29tID0gbWluWm9vbTtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5nZXRab29tKCkgPCBtaW5ab29tKSB0aGlzLnNldFpvb20obWluWm9vbSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAgIH0gZWxzZSB0aHJvdyBuZXcgRXJyb3IoYG1pblpvb20gbXVzdCBiZSBiZXR3ZWVuICR7ZGVmYXVsdE1pblpvb219IGFuZCB0aGUgY3VycmVudCBtYXhab29tLCBpbmNsdXNpdmVgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBtYXAncyBtaW5pbXVtIGFsbG93YWJsZSB6b29tIGxldmVsLlxuICAgICAqXG4gICAgICogQHJldHVybnMge251bWJlcn0gbWluWm9vbVxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIG1pblpvb20gPSBtYXAuZ2V0TWluWm9vbSgpO1xuICAgICAqL1xuICAgIGdldE1pblpvb20oKSB7IHJldHVybiB0aGlzLnRyYW5zZm9ybS5taW5ab29tOyB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIG9yIGNsZWFycyB0aGUgbWFwJ3MgbWF4aW11bSB6b29tIGxldmVsLlxuICAgICAqIElmIHRoZSBtYXAncyBjdXJyZW50IHpvb20gbGV2ZWwgaXMgaGlnaGVyIHRoYW4gdGhlIG5ldyBtYXhpbXVtLFxuICAgICAqIHRoZSBtYXAgd2lsbCB6b29tIHRvIHRoZSBuZXcgbWF4aW11bS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7bnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZH0gbWF4Wm9vbSBUaGUgbWF4aW11bSB6b29tIGxldmVsIHRvIHNldC5cbiAgICAgKiAgIElmIGBudWxsYCBvciBgdW5kZWZpbmVkYCBpcyBwcm92aWRlZCwgdGhlIGZ1bmN0aW9uIHJlbW92ZXMgdGhlIGN1cnJlbnQgbWF4aW11bSB6b29tIChzZXRzIGl0IHRvIDIyKS5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5zZXRNYXhab29tKDE4Ljc1KTtcbiAgICAgKi9cbiAgICBzZXRNYXhab29tKG1heFpvb20/OiA/bnVtYmVyKSB7XG5cbiAgICAgICAgbWF4Wm9vbSA9IG1heFpvb20gPT09IG51bGwgfHwgbWF4Wm9vbSA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdE1heFpvb20gOiBtYXhab29tO1xuXG4gICAgICAgIGlmIChtYXhab29tID49IHRoaXMudHJhbnNmb3JtLm1pblpvb20pIHtcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtLm1heFpvb20gPSBtYXhab29tO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmdldFpvb20oKSA+IG1heFpvb20pIHRoaXMuc2V0Wm9vbShtYXhab29tKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgfSBlbHNlIHRocm93IG5ldyBFcnJvcihgbWF4Wm9vbSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBtaW5ab29tYCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbWFwJ3MgbWF4aW11bSBhbGxvd2FibGUgem9vbSBsZXZlbC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IG1heFpvb21cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBtYXhab29tID0gbWFwLmdldE1heFpvb20oKTtcbiAgICAgKi9cbiAgICBnZXRNYXhab29tKCkgeyByZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWF4Wm9vbTsgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBvciBjbGVhcnMgdGhlIG1hcCdzIG1pbmltdW0gcGl0Y2guXG4gICAgICogSWYgdGhlIG1hcCdzIGN1cnJlbnQgcGl0Y2ggaXMgbG93ZXIgdGhhbiB0aGUgbmV3IG1pbmltdW0sXG4gICAgICogdGhlIG1hcCB3aWxsIHBpdGNoIHRvIHRoZSBuZXcgbWluaW11bS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7bnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZH0gbWluUGl0Y2ggVGhlIG1pbmltdW0gcGl0Y2ggdG8gc2V0ICgwLTYwKS5cbiAgICAgKiAgIElmIGBudWxsYCBvciBgdW5kZWZpbmVkYCBpcyBwcm92aWRlZCwgdGhlIGZ1bmN0aW9uIHJlbW92ZXMgdGhlIGN1cnJlbnQgbWluaW11bSBwaXRjaCAoaS5lLiBzZXRzIGl0IHRvIDApLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqL1xuICAgIHNldE1pblBpdGNoKG1pblBpdGNoPzogP251bWJlcikge1xuXG4gICAgICAgIG1pblBpdGNoID0gbWluUGl0Y2ggPT09IG51bGwgfHwgbWluUGl0Y2ggPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRNaW5QaXRjaCA6IG1pblBpdGNoO1xuXG4gICAgICAgIGlmIChtaW5QaXRjaCA8IGRlZmF1bHRNaW5QaXRjaCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBtaW5QaXRjaCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAke2RlZmF1bHRNaW5QaXRjaH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtaW5QaXRjaCA+PSBkZWZhdWx0TWluUGl0Y2ggJiYgbWluUGl0Y2ggPD0gdGhpcy50cmFuc2Zvcm0ubWF4UGl0Y2gpIHtcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtLm1pblBpdGNoID0gbWluUGl0Y2g7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGUoKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0UGl0Y2goKSA8IG1pblBpdGNoKSB0aGlzLnNldFBpdGNoKG1pblBpdGNoKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgfSBlbHNlIHRocm93IG5ldyBFcnJvcihgbWluUGl0Y2ggbXVzdCBiZSBiZXR3ZWVuICR7ZGVmYXVsdE1pblBpdGNofSBhbmQgdGhlIGN1cnJlbnQgbWF4UGl0Y2gsIGluY2x1c2l2ZWApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG1hcCdzIG1pbmltdW0gYWxsb3dhYmxlIHBpdGNoLlxuICAgICAqXG4gICAgICogQHJldHVybnMge251bWJlcn0gbWluUGl0Y2hcbiAgICAgKi9cbiAgICBnZXRNaW5QaXRjaCgpIHsgcmV0dXJuIHRoaXMudHJhbnNmb3JtLm1pblBpdGNoOyB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIG9yIGNsZWFycyB0aGUgbWFwJ3MgbWF4aW11bSBwaXRjaC5cbiAgICAgKiBJZiB0aGUgbWFwJ3MgY3VycmVudCBwaXRjaCBpcyBoaWdoZXIgdGhhbiB0aGUgbmV3IG1heGltdW0sXG4gICAgICogdGhlIG1hcCB3aWxsIHBpdGNoIHRvIHRoZSBuZXcgbWF4aW11bS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7bnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZH0gbWF4UGl0Y2ggVGhlIG1heGltdW0gcGl0Y2ggdG8gc2V0LlxuICAgICAqICAgSWYgYG51bGxgIG9yIGB1bmRlZmluZWRgIGlzIHByb3ZpZGVkLCB0aGUgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgY3VycmVudCBtYXhpbXVtIHBpdGNoIChzZXRzIGl0IHRvIDYwKS5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKi9cbiAgICBzZXRNYXhQaXRjaChtYXhQaXRjaD86ID9udW1iZXIpIHtcblxuICAgICAgICBtYXhQaXRjaCA9IG1heFBpdGNoID09PSBudWxsIHx8IG1heFBpdGNoID09PSB1bmRlZmluZWQgPyBkZWZhdWx0TWF4UGl0Y2ggOiBtYXhQaXRjaDtcblxuICAgICAgICBpZiAobWF4UGl0Y2ggPiBkZWZhdWx0TWF4UGl0Y2gpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbWF4UGl0Y2ggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJHtkZWZhdWx0TWF4UGl0Y2h9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWF4UGl0Y2ggPj0gdGhpcy50cmFuc2Zvcm0ubWluUGl0Y2gpIHtcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtLm1heFBpdGNoID0gbWF4UGl0Y2g7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGUoKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0UGl0Y2goKSA+IG1heFBpdGNoKSB0aGlzLnNldFBpdGNoKG1heFBpdGNoKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgfSBlbHNlIHRocm93IG5ldyBFcnJvcihgbWF4UGl0Y2ggbXVzdCBiZSBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgbWluUGl0Y2hgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBtYXAncyBtYXhpbXVtIGFsbG93YWJsZSBwaXRjaC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IG1heFBpdGNoXG4gICAgICovXG4gICAgZ2V0TWF4UGl0Y2goKSB7IHJldHVybiB0aGlzLnRyYW5zZm9ybS5tYXhQaXRjaDsgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgc3RhdGUgb2YgYHJlbmRlcldvcmxkQ29waWVzYC4gSWYgYHRydWVgLCBtdWx0aXBsZSBjb3BpZXMgb2YgdGhlIHdvcmxkIHdpbGwgYmUgcmVuZGVyZWQgc2lkZSBieSBzaWRlIGJleW9uZCAtMTgwIGFuZCAxODAgZGVncmVlcyBsb25naXR1ZGUuIElmIHNldCB0byBgZmFsc2VgOlxuICAgICAqIC0gV2hlbiB0aGUgbWFwIGlzIHpvb21lZCBvdXQgZmFyIGVub3VnaCB0aGF0IGEgc2luZ2xlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB3b3JsZCBkb2VzIG5vdCBmaWxsIHRoZSBtYXAncyBlbnRpcmVcbiAgICAgKiBjb250YWluZXIsIHRoZXJlIHdpbGwgYmUgYmxhbmsgc3BhY2UgYmV5b25kIDE4MCBhbmQgLTE4MCBkZWdyZWVzIGxvbmdpdHVkZS5cbiAgICAgKiAtIEZlYXR1cmVzIHRoYXQgY3Jvc3MgMTgwIGFuZCAtMTgwIGRlZ3JlZXMgbG9uZ2l0dWRlIHdpbGwgYmUgY3V0IGluIHR3byAod2l0aCBvbmUgcG9ydGlvbiBvbiB0aGUgcmlnaHQgZWRnZSBvZiB0aGVcbiAgICAgKiBtYXAgYW5kIHRoZSBvdGhlciBvbiB0aGUgbGVmdCBlZGdlIG9mIHRoZSBtYXApIGF0IGV2ZXJ5IHpvb20gbGV2ZWwuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IHJlbmRlcldvcmxkQ29waWVzXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgd29ybGRDb3BpZXNSZW5kZXJlZCA9IG1hcC5nZXRSZW5kZXJXb3JsZENvcGllcygpO1xuICAgICAqIEBzZWUgW1JlbmRlciB3b3JsZCBjb3BpZXNdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3JlbmRlci13b3JsZC1jb3BpZXMvKVxuICAgICAqL1xuICAgIGdldFJlbmRlcldvcmxkQ29waWVzKCkgeyByZXR1cm4gdGhpcy50cmFuc2Zvcm0ucmVuZGVyV29ybGRDb3BpZXM7IH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0YXRlIG9mIGByZW5kZXJXb3JsZENvcGllc2AuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJlbmRlcldvcmxkQ29waWVzIElmIGB0cnVlYCwgbXVsdGlwbGUgY29waWVzIG9mIHRoZSB3b3JsZCB3aWxsIGJlIHJlbmRlcmVkIHNpZGUgYnkgc2lkZSBiZXlvbmQgLTE4MCBhbmQgMTgwIGRlZ3JlZXMgbG9uZ2l0dWRlLiBJZiBzZXQgdG8gYGZhbHNlYDpcbiAgICAgKiAtIFdoZW4gdGhlIG1hcCBpcyB6b29tZWQgb3V0IGZhciBlbm91Z2ggdGhhdCBhIHNpbmdsZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgd29ybGQgZG9lcyBub3QgZmlsbCB0aGUgbWFwJ3MgZW50aXJlXG4gICAgICogY29udGFpbmVyLCB0aGVyZSB3aWxsIGJlIGJsYW5rIHNwYWNlIGJleW9uZCAxODAgYW5kIC0xODAgZGVncmVlcyBsb25naXR1ZGUuXG4gICAgICogLSBGZWF0dXJlcyB0aGF0IGNyb3NzIDE4MCBhbmQgLTE4MCBkZWdyZWVzIGxvbmdpdHVkZSB3aWxsIGJlIGN1dCBpbiB0d28gKHdpdGggb25lIHBvcnRpb24gb24gdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlXG4gICAgICogbWFwIGFuZCB0aGUgb3RoZXIgb24gdGhlIGxlZnQgZWRnZSBvZiB0aGUgbWFwKSBhdCBldmVyeSB6b29tIGxldmVsLlxuICAgICAqXG4gICAgICogYHVuZGVmaW5lZGAgaXMgdHJlYXRlZCBhcyBgdHJ1ZWAsIGBudWxsYCBpcyB0cmVhdGVkIGFzIGBmYWxzZWAuXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXAuc2V0UmVuZGVyV29ybGRDb3BpZXModHJ1ZSk7XG4gICAgICogQHNlZSBbUmVuZGVyIHdvcmxkIGNvcGllc10oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvcmVuZGVyLXdvcmxkLWNvcGllcy8pXG4gICAgICovXG4gICAgc2V0UmVuZGVyV29ybGRDb3BpZXMocmVuZGVyV29ybGRDb3BpZXM/OiA/Ym9vbGVhbikge1xuICAgICAgICB0aGlzLnRyYW5zZm9ybS5yZW5kZXJXb3JsZENvcGllcyA9IHJlbmRlcldvcmxkQ29waWVzO1xuICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHtAbGluayBQb2ludH0gcmVwcmVzZW50aW5nIHBpeGVsIGNvb3JkaW5hdGVzLCByZWxhdGl2ZSB0byB0aGUgbWFwJ3MgYGNvbnRhaW5lcmAsXG4gICAgICogdGhhdCBjb3JyZXNwb25kIHRvIHRoZSBzcGVjaWZpZWQgZ2VvZ3JhcGhpY2FsIGxvY2F0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtMbmdMYXRMaWtlfSBsbmdsYXQgVGhlIGdlb2dyYXBoaWNhbCBsb2NhdGlvbiB0byBwcm9qZWN0LlxuICAgICAqIEByZXR1cm5zIHtQb2ludH0gVGhlIHtAbGluayBQb2ludH0gY29ycmVzcG9uZGluZyB0byBgbG5nbGF0YCwgcmVsYXRpdmUgdG8gdGhlIG1hcCdzIGBjb250YWluZXJgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIGNvb3JkaW5hdGUgPSBbLTEyMi40MjA2NzksIDM3Ljc3MjUzN107XG4gICAgICogdmFyIHBvaW50ID0gbWFwLnByb2plY3QoY29vcmRpbmF0ZSk7XG4gICAgICovXG4gICAgcHJvamVjdChsbmdsYXQ6IExuZ0xhdExpa2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtLmxvY2F0aW9uUG9pbnQoTG5nTGF0LmNvbnZlcnQobG5nbGF0KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHtAbGluayBMbmdMYXR9IHJlcHJlc2VudGluZyBnZW9ncmFwaGljYWwgY29vcmRpbmF0ZXMgdGhhdCBjb3JyZXNwb25kXG4gICAgICogdG8gdGhlIHNwZWNpZmllZCBwaXhlbCBjb29yZGluYXRlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UG9pbnRMaWtlfSBwb2ludCBUaGUgcGl4ZWwgY29vcmRpbmF0ZXMgdG8gdW5wcm9qZWN0LlxuICAgICAqIEByZXR1cm5zIHtMbmdMYXR9IFRoZSB7QGxpbmsgTG5nTGF0fSBjb3JyZXNwb25kaW5nIHRvIGBwb2ludGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXAub24oJ2NsaWNrJywgZnVuY3Rpb24oZSkge1xuICAgICAqICAgLy8gV2hlbiB0aGUgbWFwIGlzIGNsaWNrZWQsIGdldCB0aGUgZ2VvZ3JhcGhpYyBjb29yZGluYXRlLlxuICAgICAqICAgdmFyIGNvb3JkaW5hdGUgPSBtYXAudW5wcm9qZWN0KGUucG9pbnQpO1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIHVucHJvamVjdChwb2ludDogUG9pbnRMaWtlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybS5wb2ludExvY2F0aW9uKFBvaW50LmNvbnZlcnQocG9pbnQpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIG1hcCBpcyBwYW5uaW5nLCB6b29taW5nLCByb3RhdGluZywgb3IgcGl0Y2hpbmcgZHVlIHRvIGEgY2FtZXJhIGFuaW1hdGlvbiBvciB1c2VyIGdlc3R1cmUuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIG1hcCBpcyBtb3ZpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgaXNNb3ZpbmcgPSBtYXAuaXNNb3ZpbmcoKTtcbiAgICAgKi9cbiAgICBpc01vdmluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vdmluZyB8fCB0aGlzLmhhbmRsZXJzLmlzTW92aW5nKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBtYXAgaXMgem9vbWluZyBkdWUgdG8gYSBjYW1lcmEgYW5pbWF0aW9uIG9yIHVzZXIgZ2VzdHVyZS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgbWFwIGlzIHpvb21pbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgaXNab29taW5nID0gbWFwLmlzWm9vbWluZygpO1xuICAgICAqL1xuICAgIGlzWm9vbWluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3pvb21pbmcgfHwgdGhpcy5oYW5kbGVycy5pc1pvb21pbmcoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIG1hcCBpcyByb3RhdGluZyBkdWUgdG8gYSBjYW1lcmEgYW5pbWF0aW9uIG9yIHVzZXIgZ2VzdHVyZS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgbWFwIGlzIHJvdGF0aW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLmlzUm90YXRpbmcoKTtcbiAgICAgKi9cbiAgICBpc1JvdGF0aW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm90YXRpbmcgfHwgdGhpcy5oYW5kbGVycy5pc1JvdGF0aW5nKCk7XG4gICAgfVxuXG4gICAgX2NyZWF0ZURlbGVnYXRlZExpc3RlbmVyKHR5cGU6IE1hcEV2ZW50LCBsYXllcklkOiBhbnksIGxpc3RlbmVyOiBhbnkpIHtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdtb3VzZWVudGVyJyB8fCB0eXBlID09PSAnbW91c2VvdmVyJykge1xuICAgICAgICAgICAgbGV0IG1vdXNlaW4gPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IG1vdXNlbW92ZSA9IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmVhdHVyZXMgPSB0aGlzLmdldExheWVyKGxheWVySWQpID8gdGhpcy5xdWVyeVJlbmRlcmVkRmVhdHVyZXMoZS5wb2ludCwge2xheWVyczogW2xheWVySWRdfSkgOiBbXTtcbiAgICAgICAgICAgICAgICBpZiAoIWZlYXR1cmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBtb3VzZWluID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghbW91c2Vpbikge1xuICAgICAgICAgICAgICAgICAgICBtb3VzZWluID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIuY2FsbCh0aGlzLCBuZXcgTWFwTW91c2VFdmVudCh0eXBlLCB0aGlzLCBlLm9yaWdpbmFsRXZlbnQsIHtmZWF0dXJlc30pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgbW91c2VvdXQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgbW91c2VpbiA9IGZhbHNlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiB7bGF5ZXI6IGxheWVySWQsIGxpc3RlbmVyLCBkZWxlZ2F0ZXM6IHttb3VzZW1vdmUsIG1vdXNlb3V0fX07XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ21vdXNlbGVhdmUnIHx8IHR5cGUgPT09ICdtb3VzZW91dCcpIHtcbiAgICAgICAgICAgIGxldCBtb3VzZWluID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBtb3VzZW1vdmUgPSAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZlYXR1cmVzID0gdGhpcy5nZXRMYXllcihsYXllcklkKSA/IHRoaXMucXVlcnlSZW5kZXJlZEZlYXR1cmVzKGUucG9pbnQsIHtsYXllcnM6IFtsYXllcklkXX0pIDogW107XG4gICAgICAgICAgICAgICAgaWYgKGZlYXR1cmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBtb3VzZWluID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1vdXNlaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgbW91c2VpbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lci5jYWxsKHRoaXMsIG5ldyBNYXBNb3VzZUV2ZW50KHR5cGUsIHRoaXMsIGUub3JpZ2luYWxFdmVudCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBtb3VzZW91dCA9IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG1vdXNlaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgbW91c2VpbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lci5jYWxsKHRoaXMsIG5ldyBNYXBNb3VzZUV2ZW50KHR5cGUsIHRoaXMsIGUub3JpZ2luYWxFdmVudCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4ge2xheWVyOiBsYXllcklkLCBsaXN0ZW5lciwgZGVsZWdhdGVzOiB7bW91c2Vtb3ZlLCBtb3VzZW91dH19O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGVsZWdhdGUgPSAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZlYXR1cmVzID0gdGhpcy5nZXRMYXllcihsYXllcklkKSA/IHRoaXMucXVlcnlSZW5kZXJlZEZlYXR1cmVzKGUucG9pbnQsIHtsYXllcnM6IFtsYXllcklkXX0pIDogW107XG4gICAgICAgICAgICAgICAgaWYgKGZlYXR1cmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBIZXJlIHdlIG5lZWQgdG8gbXV0YXRlIHRoZSBvcmlnaW5hbCBldmVudCwgc28gdGhhdCBwcmV2ZW50RGVmYXVsdCB3b3JrcyBhcyBleHBlY3RlZC5cbiAgICAgICAgICAgICAgICAgICAgZS5mZWF0dXJlcyA9IGZlYXR1cmVzO1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lci5jYWxsKHRoaXMsIGUpO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgZS5mZWF0dXJlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHtsYXllcjogbGF5ZXJJZCwgbGlzdGVuZXIsIGRlbGVnYXRlczoge1t0eXBlXTogZGVsZWdhdGV9fTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBsaXN0ZW5lciBmb3IgZXZlbnRzIG9mIGEgc3BlY2lmaWVkIHR5cGUsIG9wdGlvbmFsbHkgbGltaXRlZCB0byBmZWF0dXJlcyBpbiBhIHNwZWNpZmllZCBzdHlsZSBsYXllci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFRoZSBldmVudCB0eXBlIHRvIGxpc3RlbiBmb3IuIEV2ZW50cyBjb21wYXRpYmxlIHdpdGggdGhlIG9wdGlvbmFsIGBsYXllcklkYCBwYXJhbWV0ZXIgYXJlIHRyaWdnZXJlZFxuICAgICAqIHdoZW4gdGhlIGN1cnNvciBlbnRlcnMgYSB2aXNpYmxlIHBvcnRpb24gb2YgdGhlIHNwZWNpZmllZCBsYXllciBmcm9tIG91dHNpZGUgdGhhdCBsYXllciBvciBvdXRzaWRlIHRoZSBtYXAgY2FudmFzLlxuICAgICAqXG4gICAgICogfCBFdmVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDb21wYXRpYmxlIHdpdGggYGxheWVySWRgIHxcbiAgICAgKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICAgICAqIHwgW2Btb3VzZWRvd25gXSgjbWFwLmV2ZW50Om1vdXNlZG93bikgICAgICAgICAgICAgICAgICAgICAgIHwgeWVzICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBbYG1vdXNldXBgXSgjbWFwLmV2ZW50Om1vdXNldXApICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5ZXMgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IFtgbW91c2VvdmVyYF0oI21hcC5ldmVudDptb3VzZW92ZXIpICAgICAgICAgICAgICAgICAgICAgICB8IHllcyAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgW2Btb3VzZW91dGBdKCNtYXAuZXZlbnQ6bW91c2VvdXQpICAgICAgICAgICAgICAgICAgICAgICAgIHwgeWVzICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBbYG1vdXNlbW92ZWBdKCNtYXAuZXZlbnQ6bW91c2Vtb3ZlKSAgICAgICAgICAgICAgICAgICAgICAgfCB5ZXMgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IFtgbW91c2VlbnRlcmBdKCNtYXAuZXZlbnQ6bW91c2VlbnRlcikgICAgICAgICAgICAgICAgICAgICB8IHllcyAocmVxdWlyZWQpICAgICAgICAgICAgfFxuICAgICAqIHwgW2Btb3VzZWxlYXZlYF0oI21hcC5ldmVudDptb3VzZWxlYXZlKSAgICAgICAgICAgICAgICAgICAgIHwgeWVzIChyZXF1aXJlZCkgICAgICAgICAgICB8XG4gICAgICogfCBbYGNsaWNrYF0oI21hcC5ldmVudDpjbGljaykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB5ZXMgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IFtgZGJsY2xpY2tgXSgjbWFwLmV2ZW50OmRibGNsaWNrKSAgICAgICAgICAgICAgICAgICAgICAgICB8IHllcyAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgW2Bjb250ZXh0bWVudWBdKCNtYXAuZXZlbnQ6Y29udGV4dG1lbnUpICAgICAgICAgICAgICAgICAgIHwgeWVzICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBbYHRvdWNoc3RhcnRgXSgjbWFwLmV2ZW50OnRvdWNoc3RhcnQpICAgICAgICAgICAgICAgICAgICAgfCB5ZXMgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IFtgdG91Y2hlbmRgXSgjbWFwLmV2ZW50OnRvdWNoZW5kKSAgICAgICAgICAgICAgICAgICAgICAgICB8IHllcyAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgW2B0b3VjaGNhbmNlbGBdKCNtYXAuZXZlbnQ6dG91Y2hjYW5jZWwpICAgICAgICAgICAgICAgICAgIHwgeWVzICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBbYHdoZWVsYF0oI21hcC5ldmVudDp3aGVlbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IFtgcmVzaXplYF0oI21hcC5ldmVudDpyZXNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgW2ByZW1vdmVgXSgjbWFwLmV2ZW50OnJlbW92ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBbYHRvdWNobW92ZWBdKCNtYXAuZXZlbnQ6dG91Y2htb3ZlKSAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IFtgbW92ZXN0YXJ0YF0oI21hcC5ldmVudDptb3Zlc3RhcnQpICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgW2Btb3ZlYF0oI21hcC5ldmVudDptb3ZlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBbYG1vdmVlbmRgXSgjbWFwLmV2ZW50Om1vdmVlbmQpICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IFtgZHJhZ3N0YXJ0YF0oI21hcC5ldmVudDpkcmFnc3RhcnQpICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgW2BkcmFnYF0oI21hcC5ldmVudDpkcmFnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBbYGRyYWdlbmRgXSgjbWFwLmV2ZW50OmRyYWdlbmQpICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IFtgem9vbXN0YXJ0YF0oI21hcC5ldmVudDp6b29tc3RhcnQpICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgW2B6b29tYF0oI21hcC5ldmVudDp6b29tKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBbYHpvb21lbmRgXSgjbWFwLmV2ZW50Onpvb21lbmQpICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IFtgcm90YXRlc3RhcnRgXSgjbWFwLmV2ZW50OnJvdGF0ZXN0YXJ0KSAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgW2Byb3RhdGVgXSgjbWFwLmV2ZW50OnJvdGF0ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBbYHJvdGF0ZWVuZGBdKCNtYXAuZXZlbnQ6cm90YXRlZW5kKSAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IFtgcGl0Y2hzdGFydGBdKCNtYXAuZXZlbnQ6cGl0Y2hzdGFydCkgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgW2BwaXRjaGBdKCNtYXAuZXZlbnQ6cGl0Y2gpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBbYHBpdGNoZW5kYF0oI21hcC5ldmVudDpwaXRjaGVuZCkgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IFtgYm94em9vbXN0YXJ0YF0oI21hcC5ldmVudDpib3h6b29tc3RhcnQpICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgW2Bib3h6b29tZW5kYF0oI21hcC5ldmVudDpib3h6b29tZW5kKSAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBbYGJveHpvb21jYW5jZWxgXSgjbWFwLmV2ZW50OmJveHpvb21jYW5jZWwpICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IFtgd2ViZ2xjb250ZXh0bG9zdGBdKCNtYXAuZXZlbnQ6d2ViZ2xjb250ZXh0bG9zdCkgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgW2B3ZWJnbGNvbnRleHRyZXN0b3JlZGBdKCNtYXAuZXZlbnQ6d2ViZ2xjb250ZXh0cmVzdG9yZWQpIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBbYGxvYWRgXSgjbWFwLmV2ZW50OmxvYWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IFtgcmVuZGVyYF0oI21hcC5ldmVudDpyZW5kZXIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgW2BpZGxlYF0oI21hcC5ldmVudDppZGxlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBbYGVycm9yYF0oI21hcC5ldmVudDplcnJvcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IFtgZGF0YWBdKCNtYXAuZXZlbnQ6ZGF0YSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgW2BzdHlsZWRhdGFgXSgjbWFwLmV2ZW50OnN0eWxlZGF0YSkgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBbYHNvdXJjZWRhdGFgXSgjbWFwLmV2ZW50OnNvdXJjZWRhdGEpICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IFtgZGF0YWxvYWRpbmdgXSgjbWFwLmV2ZW50OmRhdGFsb2FkaW5nKSAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgW2BzdHlsZWRhdGFsb2FkaW5nYF0oI21hcC5ldmVudDpzdHlsZWRhdGFsb2FkaW5nKSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBbYHNvdXJjZWRhdGFsb2FkaW5nYF0oI21hcC5ldmVudDpzb3VyY2VkYXRhbG9hZGluZykgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IFtgc3R5bGVpbWFnZW1pc3NpbmdgXSgjbWFwLmV2ZW50OnN0eWxlaW1hZ2VtaXNzaW5nKSAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVySWQgKG9wdGlvbmFsKSBUaGUgSUQgb2YgYSBzdHlsZSBsYXllci4gRXZlbnQgd2lsbCBvbmx5IGJlIHRyaWdnZXJlZCBpZiBpdHMgbG9jYXRpb25cbiAgICAgKiBpcyB3aXRoaW4gYSB2aXNpYmxlIGZlYXR1cmUgaW4gdGhpcyBsYXllci4gVGhlIGV2ZW50IHdpbGwgaGF2ZSBhIGBmZWF0dXJlc2AgcHJvcGVydHkgY29udGFpbmluZ1xuICAgICAqIGFuIGFycmF5IG9mIHRoZSBtYXRjaGluZyBmZWF0dXJlcy4gSWYgYGxheWVySWRgIGlzIG5vdCBzdXBwbGllZCwgdGhlIGV2ZW50IHdpbGwgbm90IGhhdmUgYSBgZmVhdHVyZXNgIHByb3BlcnR5LlxuICAgICAqIFBsZWFzZSBub3RlIHRoYXQgbWFueSBldmVudCB0eXBlcyBhcmUgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgb3B0aW9uYWwgYGxheWVySWRgIHBhcmFtZXRlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciBUaGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGV2ZW50IGlzIGZpcmVkLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgd2lsbCBmaXJlXG4gICAgICogLy8gd2hlbiB0aGUgbWFwIGhhcyBmaW5pc2hlZCBsb2FkaW5nXG4gICAgICogbWFwLm9uKCdsb2FkJywgZnVuY3Rpb24oKSB7XG4gICAgICogICAvLyBPbmNlIHRoZSBtYXAgaGFzIGZpbmlzaGVkIGxvYWRpbmcsXG4gICAgICogICAvLyBhZGQgYSBuZXcgbGF5ZXJcbiAgICAgKiAgIG1hcC5hZGRMYXllcih7XG4gICAgICogICAgIGlkOiAncG9pbnRzLW9mLWludGVyZXN0JyxcbiAgICAgKiAgICAgc291cmNlOiB7XG4gICAgICogICAgICAgdHlwZTogJ3ZlY3RvcicsXG4gICAgICogICAgICAgdXJsOiAnbWFwYm94Oi8vbWFwYm94Lm1hcGJveC1zdHJlZXRzLXY4J1xuICAgICAqICAgICB9LFxuICAgICAqICAgICAnc291cmNlLWxheWVyJzogJ3BvaV9sYWJlbCcsXG4gICAgICogICAgIHR5cGU6ICdjaXJjbGUnLFxuICAgICAqICAgICBwYWludDoge1xuICAgICAqICAgICAgIC8vIE1hcGJveCBTdHlsZSBTcGVjaWZpY2F0aW9uIHBhaW50IHByb3BlcnRpZXNcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgbGF5b3V0OiB7XG4gICAgICogICAgICAgLy8gTWFwYm94IFN0eWxlIFNwZWNpZmljYXRpb24gbGF5b3V0IHByb3BlcnRpZXNcbiAgICAgKiAgICAgfVxuICAgICAqICAgfSk7XG4gICAgICogfSk7XG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBTZXQgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCB3aWxsIGZpcmVcbiAgICAgKiAvLyB3aGVuIGEgZmVhdHVyZSBvbiB0aGUgY291bnRyaWVzIGxheWVyIG9mIHRoZSBtYXAgaXMgY2xpY2tlZFxuICAgICAqIG1hcC5vbignY2xpY2snLCAnY291bnRyaWVzJywgZnVuY3Rpb24oZSkge1xuICAgICAqICAgbmV3IG1hcGJveGdsLlBvcHVwKClcbiAgICAgKiAgICAgLnNldExuZ0xhdChlLmxuZ0xhdClcbiAgICAgKiAgICAgLnNldEhUTUwoYENvdW50cnkgbmFtZTogJHtlLmZlYXR1cmVzWzBdLnByb3BlcnRpZXMubmFtZX1gKVxuICAgICAqICAgICAuYWRkVG8obWFwKTtcbiAgICAgKiB9KTtcbiAgICAgKiBAc2VlIFtEaXNwbGF5IHBvcHVwIG9uIGNsaWNrXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9wb3B1cC1vbi1jbGljay8pXG4gICAgICogQHNlZSBbQ2VudGVyIHRoZSBtYXAgb24gYSBjbGlja2VkIHN5bWJvbF0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvY2VudGVyLW9uLXN5bWJvbC8pXG4gICAgICogQHNlZSBbQ3JlYXRlIGEgaG92ZXIgZWZmZWN0XShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9ob3Zlci1zdHlsZXMvKVxuICAgICAqIEBzZWUgW0NyZWF0ZSBhIGRyYWdnYWJsZSBtYXJrZXJdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2RyYWctYS1wb2ludC8pXG4gICAgICovXG4gICAgb24odHlwZTogTWFwRXZlbnQsIGxheWVySWQ6IGFueSwgbGlzdGVuZXI6IGFueSkge1xuICAgICAgICBpZiAobGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHN1cGVyLm9uKHR5cGUsIGxheWVySWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVsZWdhdGVkTGlzdGVuZXIgPSB0aGlzLl9jcmVhdGVEZWxlZ2F0ZWRMaXN0ZW5lcih0eXBlLCBsYXllcklkLCBsaXN0ZW5lcik7XG5cbiAgICAgICAgdGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzID0gdGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzIHx8IHt9O1xuICAgICAgICB0aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnNbdHlwZV0gPSB0aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnNbdHlwZV0gfHwgW107XG4gICAgICAgIHRoaXMuX2RlbGVnYXRlZExpc3RlbmVyc1t0eXBlXS5wdXNoKGRlbGVnYXRlZExpc3RlbmVyKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGV2ZW50IGluIGRlbGVnYXRlZExpc3RlbmVyLmRlbGVnYXRlcykge1xuICAgICAgICAgICAgdGhpcy5vbigoZXZlbnQ6IGFueSksIGRlbGVnYXRlZExpc3RlbmVyLmRlbGVnYXRlc1tldmVudF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIGxpc3RlbmVyIHRoYXQgd2lsbCBiZSBjYWxsZWQgb25seSBvbmNlIHRvIGEgc3BlY2lmaWVkIGV2ZW50IHR5cGUuXG4gICAgICpcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG5hbWUgb25jZVxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBUaGUgZXZlbnQgdHlwZSB0byBhZGQgYSBsaXN0ZW5lciBmb3IuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgVGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBldmVudCBpcyBmaXJlZC5cbiAgICAgKiAgIFRoZSBsaXN0ZW5lciBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgZGF0YSBvYmplY3QgcGFzc2VkIHRvIGBmaXJlYCxcbiAgICAgKiAgIGV4dGVuZGVkIHdpdGggYHRhcmdldGAgYW5kIGB0eXBlYCBwcm9wZXJ0aWVzLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIGxpc3RlbmVyIHRoYXQgd2lsbCBiZSBjYWxsZWQgb25seSBvbmNlIHRvIGEgc3BlY2lmaWVkIGV2ZW50IHR5cGUgb2NjdXJyaW5nIG9uIGZlYXR1cmVzIGluIGEgc3BlY2lmaWVkIHN0eWxlIGxheWVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgVGhlIGV2ZW50IHR5cGUgdG8gbGlzdGVuIGZvcjsgb25lIG9mIGAnbW91c2Vkb3duJ2AsIGAnbW91c2V1cCdgLCBgJ2NsaWNrJ2AsIGAnZGJsY2xpY2snYCxcbiAgICAgKiBgJ21vdXNlbW92ZSdgLCBgJ21vdXNlZW50ZXInYCwgYCdtb3VzZWxlYXZlJ2AsIGAnbW91c2VvdmVyJ2AsIGAnbW91c2VvdXQnYCwgYCdjb250ZXh0bWVudSdgLCBgJ3RvdWNoc3RhcnQnYCxcbiAgICAgKiBgJ3RvdWNoZW5kJ2AsIG9yIGAndG91Y2hjYW5jZWwnYC4gYG1vdXNlZW50ZXJgIGFuZCBgbW91c2VvdmVyYCBldmVudHMgYXJlIHRyaWdnZXJlZCB3aGVuIHRoZSBjdXJzb3IgZW50ZXJzXG4gICAgICogYSB2aXNpYmxlIHBvcnRpb24gb2YgdGhlIHNwZWNpZmllZCBsYXllciBmcm9tIG91dHNpZGUgdGhhdCBsYXllciBvciBvdXRzaWRlIHRoZSBtYXAgY2FudmFzLiBgbW91c2VsZWF2ZWBcbiAgICAgKiBhbmQgYG1vdXNlb3V0YCBldmVudHMgYXJlIHRyaWdnZXJlZCB3aGVuIHRoZSBjdXJzb3IgbGVhdmVzIGEgdmlzaWJsZSBwb3J0aW9uIG9mIHRoZSBzcGVjaWZpZWQgbGF5ZXIsIG9yIGxlYXZlc1xuICAgICAqIHRoZSBtYXAgY2FudmFzLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllcklkIFRoZSBJRCBvZiBhIHN0eWxlIGxheWVyLiBPbmx5IGV2ZW50cyB3aG9zZSBsb2NhdGlvbiBpcyB3aXRoaW4gYSB2aXNpYmxlXG4gICAgICogZmVhdHVyZSBpbiB0aGlzIGxheWVyIHdpbGwgdHJpZ2dlciB0aGUgbGlzdGVuZXIuIFRoZSBldmVudCB3aWxsIGhhdmUgYSBgZmVhdHVyZXNgIHByb3BlcnR5IGNvbnRhaW5pbmdcbiAgICAgKiBhbiBhcnJheSBvZiB0aGUgbWF0Y2hpbmcgZmVhdHVyZXMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgVGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBldmVudCBpcyBmaXJlZC5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKi9cblxuICAgIG9uY2UodHlwZTogTWFwRXZlbnQsIGxheWVySWQ6IGFueSwgbGlzdGVuZXI6IGFueSkge1xuXG4gICAgICAgIGlmIChsaXN0ZW5lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gc3VwZXIub25jZSh0eXBlLCBsYXllcklkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlbGVnYXRlZExpc3RlbmVyID0gdGhpcy5fY3JlYXRlRGVsZWdhdGVkTGlzdGVuZXIodHlwZSwgbGF5ZXJJZCwgbGlzdGVuZXIpO1xuXG4gICAgICAgIGZvciAoY29uc3QgZXZlbnQgaW4gZGVsZWdhdGVkTGlzdGVuZXIuZGVsZWdhdGVzKSB7XG4gICAgICAgICAgICB0aGlzLm9uY2UoKGV2ZW50OiBhbnkpLCBkZWxlZ2F0ZWRMaXN0ZW5lci5kZWxlZ2F0ZXNbZXZlbnRdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYW4gZXZlbnQgbGlzdGVuZXIgcHJldmlvdXNseSBhZGRlZCB3aXRoIGBNYXAjb25gLlxuICAgICAqXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBuYW1lIG9mZlxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBUaGUgZXZlbnQgdHlwZSBwcmV2aW91c2x5IHVzZWQgdG8gaW5zdGFsbCB0aGUgbGlzdGVuZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgVGhlIGZ1bmN0aW9uIHByZXZpb3VzbHkgaW5zdGFsbGVkIGFzIGEgbGlzdGVuZXIuXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFuIGV2ZW50IGxpc3RlbmVyIGZvciBsYXllci1zcGVjaWZpYyBldmVudHMgcHJldmlvdXNseSBhZGRlZCB3aXRoIGBNYXAjb25gLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgVGhlIGV2ZW50IHR5cGUgcHJldmlvdXNseSB1c2VkIHRvIGluc3RhbGwgdGhlIGxpc3RlbmVyLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllcklkIFRoZSBsYXllciBJRCBwcmV2aW91c2x5IHVzZWQgdG8gaW5zdGFsbCB0aGUgbGlzdGVuZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgVGhlIGZ1bmN0aW9uIHByZXZpb3VzbHkgaW5zdGFsbGVkIGFzIGEgbGlzdGVuZXIuXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICovXG4gICAgb2ZmKHR5cGU6IE1hcEV2ZW50LCBsYXllcklkOiBhbnksIGxpc3RlbmVyOiBhbnkpIHtcbiAgICAgICAgaWYgKGxpc3RlbmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBzdXBlci5vZmYodHlwZSwgbGF5ZXJJZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZW1vdmVEZWxlZ2F0ZWRMaXN0ZW5lciA9IChkZWxlZ2F0ZWRMaXN0ZW5lcnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IGRlbGVnYXRlZExpc3RlbmVyc1t0eXBlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVsZWdhdGVkTGlzdGVuZXIgPSBsaXN0ZW5lcnNbaV07XG4gICAgICAgICAgICAgICAgaWYgKGRlbGVnYXRlZExpc3RlbmVyLmxheWVyID09PSBsYXllcklkICYmIGRlbGVnYXRlZExpc3RlbmVyLmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGV2ZW50IGluIGRlbGVnYXRlZExpc3RlbmVyLmRlbGVnYXRlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vZmYoKGV2ZW50OiBhbnkpLCBkZWxlZ2F0ZWRMaXN0ZW5lci5kZWxlZ2F0ZXNbZXZlbnRdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMuX2RlbGVnYXRlZExpc3RlbmVycyAmJiB0aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnNbdHlwZV0pIHtcbiAgICAgICAgICAgIHJlbW92ZURlbGVnYXRlZExpc3RlbmVyKHRoaXMuX2RlbGVnYXRlZExpc3RlbmVycyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIFtHZW9KU09OXShodHRwOi8vZ2VvanNvbi5vcmcvKVxuICAgICAqIFtGZWF0dXJlIG9iamVjdHNdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3OTQ2I3NlY3Rpb24tMy4yKVxuICAgICAqIHJlcHJlc2VudGluZyB2aXNpYmxlIGZlYXR1cmVzIHRoYXQgc2F0aXNmeSB0aGUgcXVlcnkgcGFyYW1ldGVycy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UG9pbnRMaWtlfEFycmF5PFBvaW50TGlrZT59IFtnZW9tZXRyeV0gLSBUaGUgZ2VvbWV0cnkgb2YgdGhlIHF1ZXJ5IHJlZ2lvbjpcbiAgICAgKiBlaXRoZXIgYSBzaW5nbGUgcG9pbnQgb3Igc291dGh3ZXN0IGFuZCBub3J0aGVhc3QgcG9pbnRzIGRlc2NyaWJpbmcgYSBib3VuZGluZyBib3guXG4gICAgICogT21pdHRpbmcgdGhpcyBwYXJhbWV0ZXIgKGkuZS4gY2FsbGluZyB7QGxpbmsgTWFwI3F1ZXJ5UmVuZGVyZWRGZWF0dXJlc30gd2l0aCB6ZXJvIGFyZ3VtZW50cyxcbiAgICAgKiBvciB3aXRoIG9ubHkgYSBgb3B0aW9uc2AgYXJndW1lbnQpIGlzIGVxdWl2YWxlbnQgdG8gcGFzc2luZyBhIGJvdW5kaW5nIGJveCBlbmNvbXBhc3NpbmcgdGhlIGVudGlyZVxuICAgICAqIG1hcCB2aWV3cG9ydC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIE9wdGlvbnMgb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gW29wdGlvbnMubGF5ZXJzXSBBbiBhcnJheSBvZiBbc3R5bGUgbGF5ZXIgSURzXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy8jbGF5ZXItaWQpIGZvciB0aGUgcXVlcnkgdG8gaW5zcGVjdC5cbiAgICAgKiAgIE9ubHkgZmVhdHVyZXMgd2l0aGluIHRoZXNlIGxheWVycyB3aWxsIGJlIHJldHVybmVkLiBJZiB0aGlzIHBhcmFtZXRlciBpcyB1bmRlZmluZWQsIGFsbCBsYXllcnMgd2lsbCBiZSBjaGVja2VkLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtvcHRpb25zLmZpbHRlcl0gQSBbZmlsdGVyXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy9sYXllcnMvI2ZpbHRlcilcbiAgICAgKiAgIHRvIGxpbWl0IHF1ZXJ5IHJlc3VsdHMuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy52YWxpZGF0ZT10cnVlXSBXaGV0aGVyIHRvIGNoZWNrIGlmIHRoZSBbb3B0aW9ucy5maWx0ZXJdIGNvbmZvcm1zIHRvIHRoZSBNYXBib3ggR0wgU3R5bGUgU3BlY2lmaWNhdGlvbi4gRGlzYWJsaW5nIHZhbGlkYXRpb24gaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gdGhhdCBzaG91bGQgb25seSBiZSB1c2VkIGlmIHlvdSBoYXZlIHByZXZpb3VzbHkgdmFsaWRhdGVkIHRoZSB2YWx1ZXMgeW91IHdpbGwgYmUgcGFzc2luZyB0byB0aGlzIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0FycmF5PE9iamVjdD59IEFuIGFycmF5IG9mIFtHZW9KU09OXShodHRwOi8vZ2VvanNvbi5vcmcvKVxuICAgICAqIFtmZWF0dXJlIG9iamVjdHNdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3OTQ2I3NlY3Rpb24tMy4yKS5cbiAgICAgKlxuICAgICAqIFRoZSBgcHJvcGVydGllc2AgdmFsdWUgb2YgZWFjaCByZXR1cm5lZCBmZWF0dXJlIG9iamVjdCBjb250YWlucyB0aGUgcHJvcGVydGllcyBvZiBpdHMgc291cmNlIGZlYXR1cmUuIEZvciBHZW9KU09OIHNvdXJjZXMsIG9ubHlcbiAgICAgKiBzdHJpbmcgYW5kIG51bWVyaWMgcHJvcGVydHkgdmFsdWVzIGFyZSBzdXBwb3J0ZWQgKGkuZS4gYG51bGxgLCBgQXJyYXlgLCBhbmQgYE9iamVjdGAgdmFsdWVzIGFyZSBub3Qgc3VwcG9ydGVkKS5cbiAgICAgKlxuICAgICAqIEVhY2ggZmVhdHVyZSBpbmNsdWRlcyB0b3AtbGV2ZWwgYGxheWVyYCwgYHNvdXJjZWAsIGFuZCBgc291cmNlTGF5ZXJgIHByb3BlcnRpZXMuIFRoZSBgbGF5ZXJgIHByb3BlcnR5IGlzIGFuIG9iamVjdFxuICAgICAqIHJlcHJlc2VudGluZyB0aGUgc3R5bGUgbGF5ZXIgdG8gIHdoaWNoIHRoZSBmZWF0dXJlIGJlbG9uZ3MuIExheW91dCBhbmQgcGFpbnQgcHJvcGVydGllcyBpbiB0aGlzIG9iamVjdCBjb250YWluIHZhbHVlc1xuICAgICAqIHdoaWNoIGFyZSBmdWxseSBldmFsdWF0ZWQgZm9yIHRoZSBnaXZlbiB6b29tIGxldmVsIGFuZCBmZWF0dXJlLlxuICAgICAqXG4gICAgICogT25seSBmZWF0dXJlcyB0aGF0IGFyZSBjdXJyZW50bHkgcmVuZGVyZWQgYXJlIGluY2x1ZGVkLiBTb21lIGZlYXR1cmVzIHdpbGwgKipub3QqKiBiZSBpbmNsdWRlZCwgbGlrZTpcbiAgICAgKlxuICAgICAqIC0gRmVhdHVyZXMgZnJvbSBsYXllcnMgd2hvc2UgYHZpc2liaWxpdHlgIHByb3BlcnR5IGlzIGBcIm5vbmVcImAuXG4gICAgICogLSBGZWF0dXJlcyBmcm9tIGxheWVycyB3aG9zZSB6b29tIHJhbmdlIGV4Y2x1ZGVzIHRoZSBjdXJyZW50IHpvb20gbGV2ZWwuXG4gICAgICogLSBTeW1ib2wgZmVhdHVyZXMgdGhhdCBoYXZlIGJlZW4gaGlkZGVuIGR1ZSB0byB0ZXh0IG9yIGljb24gY29sbGlzaW9uLlxuICAgICAqXG4gICAgICogRmVhdHVyZXMgZnJvbSBhbGwgb3RoZXIgbGF5ZXJzIGFyZSBpbmNsdWRlZCwgaW5jbHVkaW5nIGZlYXR1cmVzIHRoYXQgbWF5IGhhdmUgbm8gdmlzaWJsZVxuICAgICAqIGNvbnRyaWJ1dGlvbiB0byB0aGUgcmVuZGVyZWQgcmVzdWx0OyBmb3IgZXhhbXBsZSwgYmVjYXVzZSB0aGUgbGF5ZXIncyBvcGFjaXR5IG9yIGNvbG9yIGFscGhhIGNvbXBvbmVudCBpcyBzZXQgdG9cbiAgICAgKiAwLlxuICAgICAqXG4gICAgICogVGhlIHRvcG1vc3QgcmVuZGVyZWQgZmVhdHVyZSBhcHBlYXJzIGZpcnN0IGluIHRoZSByZXR1cm5lZCBhcnJheSwgYW5kIHN1YnNlcXVlbnQgZmVhdHVyZXMgYXJlIHNvcnRlZCBieVxuICAgICAqIGRlc2NlbmRpbmcgei1vcmRlci4gRmVhdHVyZXMgdGhhdCBhcmUgcmVuZGVyZWQgbXVsdGlwbGUgdGltZXMgKGR1ZSB0byB3cmFwcGluZyBhY3Jvc3MgdGhlIGFudGltZXJpZGlhbiBhdCBsb3dcbiAgICAgKiB6b29tIGxldmVscykgYXJlIHJldHVybmVkIG9ubHkgb25jZSAodGhvdWdoIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjYXZlYXQpLlxuICAgICAqXG4gICAgICogQmVjYXVzZSBmZWF0dXJlcyBjb21lIGZyb20gdGlsZWQgdmVjdG9yIGRhdGEgb3IgR2VvSlNPTiBkYXRhIHRoYXQgaXMgY29udmVydGVkIHRvIHRpbGVzIGludGVybmFsbHksIGZlYXR1cmVcbiAgICAgKiBnZW9tZXRyaWVzIG1heSBiZSBzcGxpdCBvciBkdXBsaWNhdGVkIGFjcm9zcyB0aWxlIGJvdW5kYXJpZXMgYW5kLCBhcyBhIHJlc3VsdCwgZmVhdHVyZXMgbWF5IGFwcGVhciBtdWx0aXBsZVxuICAgICAqIHRpbWVzIGluIHF1ZXJ5IHJlc3VsdHMuIEZvciBleGFtcGxlLCBzdXBwb3NlIHRoZXJlIGlzIGEgaGlnaHdheSBydW5uaW5nIHRocm91Z2ggdGhlIGJvdW5kaW5nIHJlY3RhbmdsZSBvZiBhIHF1ZXJ5LlxuICAgICAqIFRoZSByZXN1bHRzIG9mIHRoZSBxdWVyeSB3aWxsIGJlIHRob3NlIHBhcnRzIG9mIHRoZSBoaWdod2F5IHRoYXQgbGllIHdpdGhpbiB0aGUgbWFwIHRpbGVzIGNvdmVyaW5nIHRoZSBib3VuZGluZ1xuICAgICAqIHJlY3RhbmdsZSwgZXZlbiBpZiB0aGUgaGlnaHdheSBleHRlbmRzIGludG8gb3RoZXIgdGlsZXMsIGFuZCB0aGUgcG9ydGlvbiBvZiB0aGUgaGlnaHdheSB3aXRoaW4gZWFjaCBtYXAgdGlsZVxuICAgICAqIHdpbGwgYmUgcmV0dXJuZWQgYXMgYSBzZXBhcmF0ZSBmZWF0dXJlLiBTaW1pbGFybHksIGEgcG9pbnQgZmVhdHVyZSBuZWFyIGEgdGlsZSBib3VuZGFyeSBtYXkgYXBwZWFyIGluIG11bHRpcGxlXG4gICAgICogdGlsZXMgZHVlIHRvIHRpbGUgYnVmZmVyaW5nLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBGaW5kIGFsbCBmZWF0dXJlcyBhdCBhIHBvaW50XG4gICAgICogdmFyIGZlYXR1cmVzID0gbWFwLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhcbiAgICAgKiAgIFsyMCwgMzVdLFxuICAgICAqICAgeyBsYXllcnM6IFsnbXktbGF5ZXItbmFtZSddIH1cbiAgICAgKiApO1xuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBGaW5kIGFsbCBmZWF0dXJlcyB3aXRoaW4gYSBzdGF0aWMgYm91bmRpbmcgYm94XG4gICAgICogdmFyIGZlYXR1cmVzID0gbWFwLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhcbiAgICAgKiAgIFtbMTAsIDIwXSwgWzMwLCA1MF1dLFxuICAgICAqICAgeyBsYXllcnM6IFsnbXktbGF5ZXItbmFtZSddIH1cbiAgICAgKiApO1xuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBGaW5kIGFsbCBmZWF0dXJlcyB3aXRoaW4gYSBib3VuZGluZyBib3ggYXJvdW5kIGEgcG9pbnRcbiAgICAgKiB2YXIgd2lkdGggPSAxMDtcbiAgICAgKiB2YXIgaGVpZ2h0ID0gMjA7XG4gICAgICogdmFyIGZlYXR1cmVzID0gbWFwLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhbXG4gICAgICogICBbcG9pbnQueCAtIHdpZHRoIC8gMiwgcG9pbnQueSAtIGhlaWdodCAvIDJdLFxuICAgICAqICAgW3BvaW50LnggKyB3aWR0aCAvIDIsIHBvaW50LnkgKyBoZWlnaHQgLyAyXVxuICAgICAqIF0sIHsgbGF5ZXJzOiBbJ215LWxheWVyLW5hbWUnXSB9KTtcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gUXVlcnkgYWxsIHJlbmRlcmVkIGZlYXR1cmVzIGZyb20gYSBzaW5nbGUgbGF5ZXJcbiAgICAgKiB2YXIgZmVhdHVyZXMgPSBtYXAucXVlcnlSZW5kZXJlZEZlYXR1cmVzKHsgbGF5ZXJzOiBbJ215LWxheWVyLW5hbWUnXSB9KTtcbiAgICAgKiBAc2VlIFtHZXQgZmVhdHVyZXMgdW5kZXIgdGhlIG1vdXNlIHBvaW50ZXJdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvcXVlcnlyZW5kZXJlZGZlYXR1cmVzLylcbiAgICAgKiBAc2VlIFtIaWdobGlnaHQgZmVhdHVyZXMgd2l0aGluIGEgYm91bmRpbmcgYm94XShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3VzaW5nLWJveC1xdWVyeXJlbmRlcmVkZmVhdHVyZXMvKVxuICAgICAqIEBzZWUgW0ZpbHRlciBmZWF0dXJlcyB3aXRoaW4gbWFwIHZpZXddKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZmlsdGVyLWZlYXR1cmVzLXdpdGhpbi1tYXAtdmlldy8pXG4gICAgICovXG4gICAgcXVlcnlSZW5kZXJlZEZlYXR1cmVzKGdlb21ldHJ5PzogUG9pbnRMaWtlIHwgW1BvaW50TGlrZSwgUG9pbnRMaWtlXSwgb3B0aW9ucz86IE9iamVjdCkge1xuICAgICAgICAvLyBUaGUgZmlyc3QgcGFyYW1ldGVyIGNhbiBiZSBvbWl0dGVkIGVudGlyZWx5LCBtYWtpbmcgdGhpcyBlZmZlY3RpdmVseSBhbiBvdmVybG9hZGVkIG1ldGhvZFxuICAgICAgICAvLyB3aXRoIHR3byBzaWduYXR1cmVzOlxuICAgICAgICAvL1xuICAgICAgICAvLyAgICAgcXVlcnlSZW5kZXJlZEZlYXR1cmVzKGdlb21ldHJ5OiBQb2ludExpa2UgfCBbUG9pbnRMaWtlLCBQb2ludExpa2VdLCBvcHRpb25zPzogT2JqZWN0KVxuICAgICAgICAvLyAgICAgcXVlcnlSZW5kZXJlZEZlYXR1cmVzKG9wdGlvbnM/OiBPYmplY3QpXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFRoZXJlIG5vIHdheSB0byBleHByZXNzIHRoYXQgaW4gYSB3YXkgdGhhdCdzIGNvbXBhdGlibGUgd2l0aCBib3RoIGZsb3cgYW5kIGRvY3VtZW50YXRpb24uanMuXG4gICAgICAgIC8vIFJlbGF0ZWQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy8xNTU2XG5cbiAgICAgICAgaWYgKCF0aGlzLnN0eWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkICYmIGdlb21ldHJ5ICE9PSB1bmRlZmluZWQgJiYgIShnZW9tZXRyeSBpbnN0YW5jZW9mIFBvaW50KSAmJiAhQXJyYXkuaXNBcnJheShnZW9tZXRyeSkpIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSAoZ2VvbWV0cnk6IE9iamVjdCk7XG4gICAgICAgICAgICBnZW9tZXRyeSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICBnZW9tZXRyeSA9IGdlb21ldHJ5IHx8IFtbMCwgMF0sIFt0aGlzLnRyYW5zZm9ybS53aWR0aCwgdGhpcy50cmFuc2Zvcm0uaGVpZ2h0XV07XG5cbiAgICAgICAgbGV0IHF1ZXJ5R2VvbWV0cnk7XG4gICAgICAgIGlmIChnZW9tZXRyeSBpbnN0YW5jZW9mIFBvaW50IHx8IHR5cGVvZiBnZW9tZXRyeVswXSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHF1ZXJ5R2VvbWV0cnkgPSBbUG9pbnQuY29udmVydChnZW9tZXRyeSldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdGwgPSBQb2ludC5jb252ZXJ0KGdlb21ldHJ5WzBdKTtcbiAgICAgICAgICAgIGNvbnN0IGJyID0gUG9pbnQuY29udmVydChnZW9tZXRyeVsxXSk7XG4gICAgICAgICAgICBxdWVyeUdlb21ldHJ5ID0gW3RsLCBuZXcgUG9pbnQoYnIueCwgdGwueSksIGJyLCBuZXcgUG9pbnQodGwueCwgYnIueSksIHRsXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyhxdWVyeUdlb21ldHJ5LCBvcHRpb25zLCB0aGlzLnRyYW5zZm9ybSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBhcnJheSBvZiBbR2VvSlNPTl0oaHR0cDovL2dlb2pzb24ub3JnLylcbiAgICAgKiBbRmVhdHVyZSBvYmplY3RzXShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzk0NiNzZWN0aW9uLTMuMilcbiAgICAgKiByZXByZXNlbnRpbmcgZmVhdHVyZXMgd2l0aGluIHRoZSBzcGVjaWZpZWQgdmVjdG9yIHRpbGUgb3IgR2VvSlNPTiBzb3VyY2UgdGhhdCBzYXRpc2Z5IHRoZSBxdWVyeSBwYXJhbWV0ZXJzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZUlkIFRoZSBJRCBvZiB0aGUgdmVjdG9yIHRpbGUgb3IgR2VvSlNPTiBzb3VyY2UgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbWV0ZXJzXSBPcHRpb25zIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3BhcmFtZXRlcnMuc291cmNlTGF5ZXJdIFRoZSBuYW1lIG9mIHRoZSBbc291cmNlIGxheWVyXShodHRwczovL2RvY3MubWFwYm94LmNvbS9oZWxwL2dsb3NzYXJ5L3NvdXJjZS1sYXllci8pXG4gICAgICogICB0byBxdWVyeS4gKkZvciB2ZWN0b3IgdGlsZSBzb3VyY2VzLCB0aGlzIHBhcmFtZXRlciBpcyByZXF1aXJlZC4qIEZvciBHZW9KU09OIHNvdXJjZXMsIGl0IGlzIGlnbm9yZWQuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW3BhcmFtZXRlcnMuZmlsdGVyXSBBIFtmaWx0ZXJdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjL2xheWVycy8jZmlsdGVyKVxuICAgICAqICAgdG8gbGltaXQgcXVlcnkgcmVzdWx0cy5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtwYXJhbWV0ZXJzLnZhbGlkYXRlPXRydWVdIFdoZXRoZXIgdG8gY2hlY2sgaWYgdGhlIFtwYXJhbWV0ZXJzLmZpbHRlcl0gY29uZm9ybXMgdG8gdGhlIE1hcGJveCBHTCBTdHlsZSBTcGVjaWZpY2F0aW9uLiBEaXNhYmxpbmcgdmFsaWRhdGlvbiBpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiB0aGF0IHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgeW91IGhhdmUgcHJldmlvdXNseSB2YWxpZGF0ZWQgdGhlIHZhbHVlcyB5b3Ugd2lsbCBiZSBwYXNzaW5nIHRvIHRoaXMgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7QXJyYXk8T2JqZWN0Pn0gQW4gYXJyYXkgb2YgW0dlb0pTT05dKGh0dHA6Ly9nZW9qc29uLm9yZy8pXG4gICAgICogW0ZlYXR1cmUgb2JqZWN0c10oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc5NDYjc2VjdGlvbi0zLjIpLlxuICAgICAqXG4gICAgICogSW4gY29udHJhc3QgdG8ge0BsaW5rIE1hcCNxdWVyeVJlbmRlcmVkRmVhdHVyZXN9LCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYWxsIGZlYXR1cmVzIG1hdGNoaW5nIHRoZSBxdWVyeSBwYXJhbWV0ZXJzLFxuICAgICAqIHdoZXRoZXIgb3Igbm90IHRoZXkgYXJlIHJlbmRlcmVkIGJ5IHRoZSBjdXJyZW50IHN0eWxlIChpLmUuIHZpc2libGUpLiBUaGUgZG9tYWluIG9mIHRoZSBxdWVyeSBpbmNsdWRlcyBhbGwgY3VycmVudGx5LWxvYWRlZFxuICAgICAqIHZlY3RvciB0aWxlcyBhbmQgR2VvSlNPTiBzb3VyY2UgdGlsZXM6IHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY2hlY2sgdGlsZXMgb3V0c2lkZSB0aGUgY3VycmVudGx5XG4gICAgICogdmlzaWJsZSB2aWV3cG9ydC5cbiAgICAgKlxuICAgICAqIEJlY2F1c2UgZmVhdHVyZXMgY29tZSBmcm9tIHRpbGVkIHZlY3RvciBkYXRhIG9yIEdlb0pTT04gZGF0YSB0aGF0IGlzIGNvbnZlcnRlZCB0byB0aWxlcyBpbnRlcm5hbGx5LCBmZWF0dXJlXG4gICAgICogZ2VvbWV0cmllcyBtYXkgYmUgc3BsaXQgb3IgZHVwbGljYXRlZCBhY3Jvc3MgdGlsZSBib3VuZGFyaWVzIGFuZCwgYXMgYSByZXN1bHQsIGZlYXR1cmVzIG1heSBhcHBlYXIgbXVsdGlwbGVcbiAgICAgKiB0aW1lcyBpbiBxdWVyeSByZXN1bHRzLiBGb3IgZXhhbXBsZSwgc3VwcG9zZSB0aGVyZSBpcyBhIGhpZ2h3YXkgcnVubmluZyB0aHJvdWdoIHRoZSBib3VuZGluZyByZWN0YW5nbGUgb2YgYSBxdWVyeS5cbiAgICAgKiBUaGUgcmVzdWx0cyBvZiB0aGUgcXVlcnkgd2lsbCBiZSB0aG9zZSBwYXJ0cyBvZiB0aGUgaGlnaHdheSB0aGF0IGxpZSB3aXRoaW4gdGhlIG1hcCB0aWxlcyBjb3ZlcmluZyB0aGUgYm91bmRpbmdcbiAgICAgKiByZWN0YW5nbGUsIGV2ZW4gaWYgdGhlIGhpZ2h3YXkgZXh0ZW5kcyBpbnRvIG90aGVyIHRpbGVzLCBhbmQgdGhlIHBvcnRpb24gb2YgdGhlIGhpZ2h3YXkgd2l0aGluIGVhY2ggbWFwIHRpbGVcbiAgICAgKiB3aWxsIGJlIHJldHVybmVkIGFzIGEgc2VwYXJhdGUgZmVhdHVyZS4gU2ltaWxhcmx5LCBhIHBvaW50IGZlYXR1cmUgbmVhciBhIHRpbGUgYm91bmRhcnkgbWF5IGFwcGVhciBpbiBtdWx0aXBsZVxuICAgICAqIHRpbGVzIGR1ZSB0byB0aWxlIGJ1ZmZlcmluZy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gRmluZCBhbGwgZmVhdHVyZXMgaW4gb25lIHNvdXJjZSBsYXllciBpbiBhIHZlY3RvciBzb3VyY2VcbiAgICAgKiB2YXIgZmVhdHVyZXMgPSBtYXAucXVlcnlTb3VyY2VGZWF0dXJlcygneW91ci1zb3VyY2UtaWQnLCB7XG4gICAgICogICBzb3VyY2VMYXllcjogJ3lvdXItc291cmNlLWxheWVyJ1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogQHNlZSBbSGlnaGxpZ2h0IGZlYXR1cmVzIGNvbnRhaW5pbmcgc2ltaWxhciBkYXRhXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3F1ZXJ5LXNpbWlsYXItZmVhdHVyZXMvKVxuICAgICAqL1xuICAgIHF1ZXJ5U291cmNlRmVhdHVyZXMoc291cmNlSWQ6IHN0cmluZywgcGFyYW1ldGVyczogP3tzb3VyY2VMYXllcjogP3N0cmluZywgZmlsdGVyOiA/QXJyYXk8YW55PiwgdmFsaWRhdGU/OiBib29sZWFufSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZS5xdWVyeVNvdXJjZUZlYXR1cmVzKHNvdXJjZUlkLCBwYXJhbWV0ZXJzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBtYXAncyBNYXBib3ggc3R5bGUgb2JqZWN0IHdpdGggYSBuZXcgdmFsdWUuXG4gICAgICpcbiAgICAgKiBJZiBhIHN0eWxlIGlzIGFscmVhZHkgc2V0IHdoZW4gdGhpcyBpcyB1c2VkIGFuZCBvcHRpb25zLmRpZmYgaXMgc2V0IHRvIHRydWUsIHRoZSBtYXAgcmVuZGVyZXIgd2lsbCBhdHRlbXB0IHRvIGNvbXBhcmUgdGhlIGdpdmVuIHN0eWxlXG4gICAgICogYWdhaW5zdCB0aGUgbWFwJ3MgY3VycmVudCBzdGF0ZSBhbmQgcGVyZm9ybSBvbmx5IHRoZSBjaGFuZ2VzIG5lY2Vzc2FyeSB0byBtYWtlIHRoZSBtYXAgc3R5bGUgbWF0Y2ggdGhlIGRlc2lyZWQgc3RhdGUuIENoYW5nZXMgaW4gc3ByaXRlc1xuICAgICAqIChpbWFnZXMgdXNlZCBmb3IgaWNvbnMgYW5kIHBhdHRlcm5zKSBhbmQgZ2x5cGhzIChmb250cyBmb3IgbGFiZWwgdGV4dCkgKipjYW5ub3QqKiBiZSBkaWZmZWQuIElmIHRoZSBzcHJpdGVzIG9yIGZvbnRzIHVzZWQgaW4gdGhlIGN1cnJlbnRcbiAgICAgKiBzdHlsZSBhbmQgdGhlIGdpdmVuIHN0eWxlIGFyZSBkaWZmZXJlbnQgaW4gYW55IHdheSwgdGhlIG1hcCByZW5kZXJlciB3aWxsIGZvcmNlIGEgZnVsbCB1cGRhdGUsIHJlbW92aW5nIHRoZSBjdXJyZW50IHN0eWxlIGFuZCBidWlsZGluZ1xuICAgICAqIHRoZSBnaXZlbiBvbmUgZnJvbSBzY3JhdGNoLlxuICAgICAqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3R5bGUgQSBKU09OIG9iamVjdCBjb25mb3JtaW5nIHRvIHRoZSBzY2hlbWEgZGVzY3JpYmVkIGluIHRoZVxuICAgICAqICAgW01hcGJveCBTdHlsZSBTcGVjaWZpY2F0aW9uXShodHRwczovL21hcGJveC5jb20vbWFwYm94LWdsLXN0eWxlLXNwZWMvKSwgb3IgYSBVUkwgdG8gc3VjaCBKU09OLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gT3B0aW9ucyBvYmplY3QuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5kaWZmPXRydWVdIElmIGZhbHNlLCBmb3JjZSBhICdmdWxsJyB1cGRhdGUsIHJlbW92aW5nIHRoZSBjdXJyZW50IHN0eWxlXG4gICAgICogICBhbmQgYnVpbGRpbmcgdGhlIGdpdmVuIG9uZSBpbnN0ZWFkIG9mIGF0dGVtcHRpbmcgYSBkaWZmLWJhc2VkIHVwZGF0ZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5PSdzYW5zLXNlcmlmJ10gRGVmaW5lcyBhIENTU1xuICAgICAqICAgZm9udC1mYW1pbHkgZm9yIGxvY2FsbHkgb3ZlcnJpZGluZyBnZW5lcmF0aW9uIG9mIGdseXBocyBpbiB0aGUgJ0NKSyBVbmlmaWVkIElkZW9ncmFwaHMnLCAnSGlyYWdhbmEnLCAnS2F0YWthbmEnIGFuZCAnSGFuZ3VsIFN5bGxhYmxlcycgcmFuZ2VzLlxuICAgICAqICAgSW4gdGhlc2UgcmFuZ2VzLCBmb250IHNldHRpbmdzIGZyb20gdGhlIG1hcCdzIHN0eWxlIHdpbGwgYmUgaWdub3JlZCwgZXhjZXB0IGZvciBmb250LXdlaWdodCBrZXl3b3JkcyAobGlnaHQvcmVndWxhci9tZWRpdW0vYm9sZCkuXG4gICAgICogICBTZXQgdG8gYGZhbHNlYCwgdG8gZW5hYmxlIGZvbnQgc2V0dGluZ3MgZnJvbSB0aGUgbWFwJ3Mgc3R5bGUgZm9yIHRoZXNlIGdseXBoIHJhbmdlcy5cbiAgICAgKiAgIEZvcmNlcyBhIGZ1bGwgdXBkYXRlLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXAuc2V0U3R5bGUoXCJtYXBib3g6Ly9zdHlsZXMvbWFwYm94L3N0cmVldHMtdjExXCIpO1xuICAgICAqXG4gICAgICogQHNlZSBbQ2hhbmdlIGEgbWFwJ3Mgc3R5bGVdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvc2V0c3R5bGUvKVxuICAgICAqL1xuICAgIHNldFN0eWxlKHN0eWxlOiBTdHlsZVNwZWNpZmljYXRpb24gfCBzdHJpbmcgfCBudWxsLCBvcHRpb25zPzoge2RpZmY/OiBib29sZWFufSAmIFN0eWxlT3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gZXh0ZW5kKHt9LCB7bG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5OiB0aGlzLl9sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHl9LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAoKG9wdGlvbnMuZGlmZiAhPT0gZmFsc2UgJiYgb3B0aW9ucy5sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHkgPT09IHRoaXMuX2xvY2FsSWRlb2dyYXBoRm9udEZhbWlseSkgJiYgdGhpcy5zdHlsZSAmJiBzdHlsZSkge1xuICAgICAgICAgICAgdGhpcy5fZGlmZlN0eWxlKHN0eWxlLCBvcHRpb25zKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5ID0gb3B0aW9ucy5sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlU3R5bGUoc3R5bGUsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2dldFVJU3RyaW5nKGtleTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHN0ciA9IHRoaXMuX2xvY2FsZVtrZXldO1xuICAgICAgICBpZiAoc3RyID09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBVSSBzdHJpbmcgJyR7a2V5fSdgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuXG4gICAgX3VwZGF0ZVN0eWxlKHN0eWxlOiBTdHlsZVNwZWNpZmljYXRpb24gfCBzdHJpbmcgfCBudWxsLCAgb3B0aW9ucz86IHtkaWZmPzogYm9vbGVhbn0gJiBTdHlsZU9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHRoaXMuc3R5bGUpIHtcbiAgICAgICAgICAgIHRoaXMuc3R5bGUuc2V0RXZlbnRlZFBhcmVudChudWxsKTtcbiAgICAgICAgICAgIHRoaXMuc3R5bGUuX3JlbW92ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzdHlsZSkge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuc3R5bGU7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3R5bGUgPSBuZXcgU3R5bGUodGhpcywgb3B0aW9ucyB8fCB7fSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0eWxlLnNldEV2ZW50ZWRQYXJlbnQodGhpcywge3N0eWxlOiB0aGlzLnN0eWxlfSk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBzdHlsZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRoaXMuc3R5bGUubG9hZFVSTChzdHlsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0eWxlLmxvYWRKU09OKHN0eWxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIF9sYXp5SW5pdEVtcHR5U3R5bGUoKSB7XG4gICAgICAgIGlmICghdGhpcy5zdHlsZSkge1xuICAgICAgICAgICAgdGhpcy5zdHlsZSA9IG5ldyBTdHlsZSh0aGlzLCB7fSk7XG4gICAgICAgICAgICB0aGlzLnN0eWxlLnNldEV2ZW50ZWRQYXJlbnQodGhpcywge3N0eWxlOiB0aGlzLnN0eWxlfSk7XG4gICAgICAgICAgICB0aGlzLnN0eWxlLmxvYWRFbXB0eSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2RpZmZTdHlsZShzdHlsZTogU3R5bGVTcGVjaWZpY2F0aW9uIHwgc3RyaW5nLCAgb3B0aW9ucz86IHtkaWZmPzogYm9vbGVhbn0gJiBTdHlsZU9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzdHlsZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IHRoaXMuX3JlcXVlc3RNYW5hZ2VyLm5vcm1hbGl6ZVN0eWxlVVJMKHN0eWxlKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KHVybCwgUmVzb3VyY2VUeXBlLlN0eWxlKTtcbiAgICAgICAgICAgIGdldEpTT04ocmVxdWVzdCwgKGVycm9yOiA/RXJyb3IsIGpzb246ID9PYmplY3QpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KGVycm9yKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChqc29uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZURpZmYoanNvbiwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0eWxlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlRGlmZihzdHlsZSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfdXBkYXRlRGlmZihzdHlsZTogU3R5bGVTcGVjaWZpY2F0aW9uLCAgb3B0aW9ucz86IHtkaWZmPzogYm9vbGVhbn0gJiBTdHlsZU9wdGlvbnMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnN0eWxlLnNldFN0YXRlKHN0eWxlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZSh0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgd2Fybk9uY2UoXG4gICAgICAgICAgICAgICAgYFVuYWJsZSB0byBwZXJmb3JtIHN0eWxlIGRpZmY6ICR7ZS5tZXNzYWdlIHx8IGUuZXJyb3IgfHwgZX0uICBSZWJ1aWxkaW5nIHRoZSBzdHlsZSBmcm9tIHNjcmF0Y2guYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVN0eWxlKHN0eWxlLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG1hcCdzIE1hcGJveCBbc3R5bGVdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL2hlbHAvZ2xvc3Nhcnkvc3R5bGUvKSBvYmplY3QsIGEgSlNPTiBvYmplY3Qgd2hpY2ggY2FuIGJlIHVzZWQgdG8gcmVjcmVhdGUgdGhlIG1hcCdzIHN0eWxlLlxuICAgICAqXG4gICAgICogQHJldHVybnMge09iamVjdH0gVGhlIG1hcCdzIHN0eWxlIEpTT04gb2JqZWN0LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgc3R5bGVKc29uID0gbWFwLmdldFN0eWxlKCk7XG4gICAgICpcbiAgICAgKi9cbiAgICBnZXRTdHlsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3R5bGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0eWxlLnNlcmlhbGl6ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBtYXAncyBzdHlsZSBpcyBmdWxseSBsb2FkZWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gQSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgc3R5bGUgaXMgZnVsbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgc3R5bGVMb2FkU3RhdHVzID0gbWFwLmlzU3R5bGVMb2FkZWQoKTtcbiAgICAgKi9cbiAgICBpc1N0eWxlTG9hZGVkKCkge1xuICAgICAgICBpZiAoIXRoaXMuc3R5bGUpIHJldHVybiB3YXJuT25jZSgnVGhlcmUgaXMgbm8gc3R5bGUgYWRkZWQgdG8gdGhlIG1hcC4nKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUubG9hZGVkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIHNvdXJjZSB0byB0aGUgbWFwJ3Mgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgVGhlIElEIG9mIHRoZSBzb3VyY2UgdG8gYWRkLiBNdXN0IG5vdCBjb25mbGljdCB3aXRoIGV4aXN0aW5nIHNvdXJjZXMuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdCwgY29uZm9ybWluZyB0byB0aGVcbiAgICAgKiBNYXBib3ggU3R5bGUgU3BlY2lmaWNhdGlvbidzIFtzb3VyY2UgZGVmaW5pdGlvbl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtc3R5bGUtc3BlYy8jc291cmNlcykgb3JcbiAgICAgKiB7QGxpbmsgQ2FudmFzU291cmNlT3B0aW9uc30uXG4gICAgICogQGZpcmVzIHNvdXJjZS5hZGRcbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5hZGRTb3VyY2UoJ215LWRhdGEnLCB7XG4gICAgICogICB0eXBlOiAndmVjdG9yJyxcbiAgICAgKiAgIHVybDogJ21hcGJveDovL215dXNlcm5hbWUudGlsZXNldGlkJ1xuICAgICAqIH0pO1xuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLmFkZFNvdXJjZSgnbXktZGF0YScsIHtcbiAgICAgKiAgIFwidHlwZVwiOiBcImdlb2pzb25cIixcbiAgICAgKiAgIFwiZGF0YVwiOiB7XG4gICAgICogICAgIFwidHlwZVwiOiBcIkZlYXR1cmVcIixcbiAgICAgKiAgICAgXCJnZW9tZXRyeVwiOiB7XG4gICAgICogICAgICAgXCJ0eXBlXCI6IFwiUG9pbnRcIixcbiAgICAgKiAgICAgICBcImNvb3JkaW5hdGVzXCI6IFstNzcuMDMyMywgMzguOTEzMV1cbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgXCJwcm9wZXJ0aWVzXCI6IHtcbiAgICAgKiAgICAgICBcInRpdGxlXCI6IFwiTWFwYm94IERDXCIsXG4gICAgICogICAgICAgXCJtYXJrZXItc3ltYm9sXCI6IFwibW9udW1lbnRcIlxuICAgICAqICAgICB9XG4gICAgICogICB9XG4gICAgICogfSk7XG4gICAgICogQHNlZSBWZWN0b3Igc291cmNlOiBbU2hvdyBhbmQgaGlkZSBsYXllcnNdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3RvZ2dsZS1sYXllcnMvKVxuICAgICAqIEBzZWUgR2VvSlNPTiBzb3VyY2U6IFtBZGQgbGl2ZSByZWFsdGltZSBkYXRhXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9saXZlLWdlb2pzb24vKVxuICAgICAqIEBzZWUgUmFzdGVyIERFTSBzb3VyY2U6IFtBZGQgaGlsbHNoYWRpbmddKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2hpbGxzaGFkZS8pXG4gICAgICovXG4gICAgYWRkU291cmNlKGlkOiBzdHJpbmcsIHNvdXJjZTogU291cmNlU3BlY2lmaWNhdGlvbikge1xuICAgICAgICB0aGlzLl9sYXp5SW5pdEVtcHR5U3R5bGUoKTtcbiAgICAgICAgdGhpcy5zdHlsZS5hZGRTb3VyY2UoaWQsIHNvdXJjZSk7XG4gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBzb3VyY2UgaXMgbG9hZGVkLiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgc291cmNlIHdpdGhcbiAgICAgKiB0aGUgZ2l2ZW4gSUQgaW4gdGhlIG1hcCdzIHN0eWxlIGhhcyBubyBvdXRzdGFuZGluZyBuZXR3b3JrIHJlcXVlc3RzLCBvdGhlcndpc2UgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBUaGUgSUQgb2YgdGhlIHNvdXJjZSB0byBiZSBjaGVja2VkLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBBIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBzb3VyY2UgaXMgbG9hZGVkLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIHNvdXJjZUxvYWRlZCA9IG1hcC5pc1NvdXJjZUxvYWRlZCgnYmF0aHltZXRyeS1kYXRhJyk7XG4gICAgICovXG4gICAgaXNTb3VyY2VMb2FkZWQoaWQ6IHN0cmluZykge1xuICAgICAgICBjb25zdCBzb3VyY2UgPSB0aGlzLnN0eWxlICYmIHRoaXMuc3R5bGUuc291cmNlQ2FjaGVzW2lkXTtcbiAgICAgICAgaWYgKHNvdXJjZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKGBUaGVyZSBpcyBubyBzb3VyY2Ugd2l0aCBJRCAnJHtpZH0nYCkpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc291cmNlLmxvYWRlZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciBhbGwgdGlsZXMgaW4gdGhlIHZpZXdwb3J0IGZyb20gYWxsIHNvdXJjZXMgb25cbiAgICAgKiB0aGUgc3R5bGUgYXJlIGxvYWRlZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBBIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGFsbCB0aWxlcyBhcmUgbG9hZGVkLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIHRpbGVzTG9hZGVkID0gbWFwLmFyZVRpbGVzTG9hZGVkKCk7XG4gICAgICovXG5cbiAgICBhcmVUaWxlc0xvYWRlZCgpIHtcbiAgICAgICAgY29uc3Qgc291cmNlcyA9IHRoaXMuc3R5bGUgJiYgdGhpcy5zdHlsZS5zb3VyY2VDYWNoZXM7XG4gICAgICAgIGZvciAoY29uc3QgaWQgaW4gc291cmNlcykge1xuICAgICAgICAgICAgY29uc3Qgc291cmNlID0gc291cmNlc1tpZF07XG4gICAgICAgICAgICBjb25zdCB0aWxlcyA9IHNvdXJjZS5fdGlsZXM7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHQgaW4gdGlsZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aWxlID0gdGlsZXNbdF07XG4gICAgICAgICAgICAgICAgaWYgKCEodGlsZS5zdGF0ZSA9PT0gJ2xvYWRlZCcgfHwgdGlsZS5zdGF0ZSA9PT0gJ2Vycm9yZWQnKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBbY3VzdG9tIHNvdXJjZSB0eXBlXSgjQ3VzdG9tIFNvdXJjZXMpLCBtYWtpbmcgaXQgYXZhaWxhYmxlIGZvciB1c2Ugd2l0aFxuICAgICAqIHtAbGluayBNYXAjYWRkU291cmNlfS5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBzb3VyY2UgdHlwZTsgc291cmNlIGRlZmluaXRpb24gb2JqZWN0cyB1c2UgdGhpcyBuYW1lIGluIHRoZSBge3R5cGU6IC4uLn1gIGZpZWxkLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFNvdXJjZVR5cGUgQSB7QGxpbmsgU291cmNlfSBjb25zdHJ1Y3Rvci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgd2hlbiB0aGUgc291cmNlIHR5cGUgaXMgcmVhZHkgb3Igd2l0aCBhbiBlcnJvciBhcmd1bWVudCBpZiB0aGVyZSBpcyBhbiBlcnJvci5cbiAgICAgKi9cbiAgICBhZGRTb3VyY2VUeXBlKG5hbWU6IHN0cmluZywgU291cmNlVHlwZTogYW55LCBjYWxsYmFjazogRnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy5fbGF6eUluaXRFbXB0eVN0eWxlKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlLmFkZFNvdXJjZVR5cGUobmFtZSwgU291cmNlVHlwZSwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYSBzb3VyY2UgZnJvbSB0aGUgbWFwJ3Mgc3R5bGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgVGhlIElEIG9mIHRoZSBzb3VyY2UgdG8gcmVtb3ZlLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwLnJlbW92ZVNvdXJjZSgnYmF0aHltZXRyeS1kYXRhJyk7XG4gICAgICovXG4gICAgcmVtb3ZlU291cmNlKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zdHlsZS5yZW1vdmVTb3VyY2UoaWQpO1xuICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlKHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHNvdXJjZSB3aXRoIHRoZSBzcGVjaWZpZWQgSUQgaW4gdGhlIG1hcCdzIHN0eWxlLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgaXMgb2Z0ZW4gdXNlZCB0byB1cGRhdGUgYSBzb3VyY2UgdXNpbmcgdGhlIGluc3RhbmNlIG1lbWJlcnMgZm9yIHRoZSByZWxldmFudFxuICAgICAqIHNvdXJjZSB0eXBlIGFzIGRlZmluZWQgaW4gW1NvdXJjZXNdKCNzb3VyY2VzKS5cbiAgICAgKiBGb3IgZXhhbXBsZSwgc2V0dGluZyB0aGUgYGRhdGFgIGZvciBhIEdlb0pTT04gc291cmNlIG9yIHVwZGF0aW5nIHRoZSBgdXJsYCBhbmQgYGNvb3JkaW5hdGVzYFxuICAgICAqIG9mIGFuIGltYWdlIHNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBUaGUgSUQgb2YgdGhlIHNvdXJjZSB0byBnZXQuXG4gICAgICogQHJldHVybnMgez9PYmplY3R9IFRoZSBzdHlsZSBzb3VyY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIElEIG9yIGB1bmRlZmluZWRgIGlmIHRoZSBJRFxuICAgICAqIGNvcnJlc3BvbmRzIHRvIG5vIGV4aXN0aW5nIHNvdXJjZXMuXG4gICAgICogVGhlIHNoYXBlIG9mIHRoZSBvYmplY3QgdmFyaWVzIGJ5IHNvdXJjZSB0eXBlLlxuICAgICAqIEEgbGlzdCBvZiBvcHRpb25zIGZvciBlYWNoIHNvdXJjZSB0eXBlIGlzIGF2YWlsYWJsZSBvbiB0aGUgTWFwYm94IFN0eWxlIFNwZWNpZmljYXRpb24nc1xuICAgICAqIFtTb3VyY2VzXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy9zb3VyY2VzLykgcGFnZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBzb3VyY2VPYmplY3QgPSBtYXAuZ2V0U291cmNlKCdwb2ludHMnKTtcbiAgICAgKiBAc2VlIFtDcmVhdGUgYSBkcmFnZ2FibGUgcG9pbnRdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2RyYWctYS1wb2ludC8pXG4gICAgICogQHNlZSBbQW5pbWF0ZSBhIHBvaW50XShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9hbmltYXRlLXBvaW50LWFsb25nLWxpbmUvKVxuICAgICAqIEBzZWUgW0FkZCBsaXZlIHJlYWx0aW1lIGRhdGFdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2xpdmUtZ2VvanNvbi8pXG4gICAgICovXG4gICAgZ2V0U291cmNlKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuZ2V0U291cmNlKGlkKTtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1yZXR1cm5zXG4gICAgLyoqXG4gICAgICogQWRkIGFuIGltYWdlIHRvIHRoZSBzdHlsZS4gVGhpcyBpbWFnZSBjYW4gYmUgZGlzcGxheWVkIG9uIHRoZSBtYXAgbGlrZSBhbnkgb3RoZXIgaWNvbiBpbiB0aGUgc3R5bGUnc1xuICAgICAqIFtzcHJpdGVdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL2hlbHAvZ2xvc3Nhcnkvc3ByaXRlLykgdXNpbmcgdGhlIGltYWdlJ3MgSUQgd2l0aFxuICAgICAqIFtgaWNvbi1pbWFnZWBdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjLyNsYXlvdXQtc3ltYm9sLWljb24taW1hZ2UpLFxuICAgICAqIFtgYmFja2dyb3VuZC1wYXR0ZXJuYF0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3N0eWxlLXNwZWMvI3BhaW50LWJhY2tncm91bmQtYmFja2dyb3VuZC1wYXR0ZXJuKSxcbiAgICAgKiBbYGZpbGwtcGF0dGVybmBdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjLyNwYWludC1maWxsLWZpbGwtcGF0dGVybiksXG4gICAgICogb3IgW2BsaW5lLXBhdHRlcm5gXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy8jcGFpbnQtbGluZS1saW5lLXBhdHRlcm4pLlxuICAgICAqIEEge0BsaW5rIE1hcCNlcnJvcn0gZXZlbnQgd2lsbCBiZSBmaXJlZCBpZiB0aGVyZSBpcyBub3QgZW5vdWdoIHNwYWNlIGluIHRoZSBzcHJpdGUgdG8gYWRkIHRoaXMgaW1hZ2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaWQgVGhlIElEIG9mIHRoZSBpbWFnZS5cbiAgICAgKiBAcGFyYW0gaW1hZ2UgVGhlIGltYWdlIGFzIGFuIGBIVE1MSW1hZ2VFbGVtZW50YCwgYEltYWdlRGF0YWAsIGBJbWFnZUJpdG1hcGAgb3Igb2JqZWN0IHdpdGggYHdpZHRoYCwgYGhlaWdodGAsIGFuZCBgZGF0YWBcbiAgICAgKiBwcm9wZXJ0aWVzIHdpdGggdGhlIHNhbWUgZm9ybWF0IGFzIGBJbWFnZURhdGFgLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgb2JqZWN0LlxuICAgICAqIEBwYXJhbSBvcHRpb25zLnBpeGVsUmF0aW8gVGhlIHJhdGlvIG9mIHBpeGVscyBpbiB0aGUgaW1hZ2UgdG8gcGh5c2ljYWwgcGl4ZWxzIG9uIHRoZSBzY3JlZW5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5zZGYgV2hldGhlciB0aGUgaW1hZ2Ugc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGFuIFNERiBpbWFnZVxuICAgICAqIEBwYXJhbSBvcHRpb25zLmNvbnRlbnQgIGBbeDEsIHkxLCB4MiwgeTJdYCAgSWYgYGljb24tdGV4dC1maXRgIGlzIHVzZWQgaW4gYSBsYXllciB3aXRoIHRoaXMgaW1hZ2UsIHRoaXMgb3B0aW9uIGRlZmluZXMgdGhlIHBhcnQgb2YgdGhlIGltYWdlIHRoYXQgY2FuIGJlIGNvdmVyZWQgYnkgdGhlIGNvbnRlbnQgaW4gYHRleHQtZmllbGRgLlxuICAgICAqIEBwYXJhbSBvcHRpb25zLnN0cmV0Y2hYICBgW1t4MSwgeDJdLCAuLi5dYCBJZiBgaWNvbi10ZXh0LWZpdGAgaXMgdXNlZCBpbiBhIGxheWVyIHdpdGggdGhpcyBpbWFnZSwgdGhpcyBvcHRpb24gZGVmaW5lcyB0aGUgcGFydChzKSBvZiB0aGUgaW1hZ2UgdGhhdCBjYW4gYmUgc3RyZXRjaGVkIGhvcml6b250YWxseS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5zdHJldGNoWSAgYFtbeTEsIHkyXSwgLi4uXWAgSWYgYGljb24tdGV4dC1maXRgIGlzIHVzZWQgaW4gYSBsYXllciB3aXRoIHRoaXMgaW1hZ2UsIHRoaXMgb3B0aW9uIGRlZmluZXMgdGhlIHBhcnQocykgb2YgdGhlIGltYWdlIHRoYXQgY2FuIGJlIHN0cmV0Y2hlZCB2ZXJ0aWNhbGx5LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJZiB0aGUgc3R5bGUncyBzcHJpdGUgZG9lcyBub3QgYWxyZWFkeSBjb250YWluIGFuIGltYWdlIHdpdGggSUQgJ2NhdCcsXG4gICAgICogLy8gYWRkIHRoZSBpbWFnZSAnY2F0LWljb24ucG5nJyB0byB0aGUgc3R5bGUncyBzcHJpdGUgd2l0aCB0aGUgSUQgJ2NhdCcuXG4gICAgICogbWFwLmxvYWRJbWFnZSgnaHR0cHM6Ly91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy90aHVtYi82LzYwL0NhdF9zaWxob3VldHRlLnN2Zy80MDBweC1DYXRfc2lsaG91ZXR0ZS5zdmcucG5nJywgZnVuY3Rpb24oZXJyb3IsIGltYWdlKSB7XG4gICAgICogICAgaWYgKGVycm9yKSB0aHJvdyBlcnJvcjtcbiAgICAgKiAgICBpZiAoIW1hcC5oYXNJbWFnZSgnY2F0JykpIG1hcC5hZGRJbWFnZSgnY2F0JywgaW1hZ2UpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICpcbiAgICAgKiAvLyBBZGQgYSBzdHJldGNoYWJsZSBpbWFnZSB0aGF0IGNhbiBiZSB1c2VkIHdpdGggYGljb24tdGV4dC1maXRgXG4gICAgICogLy8gSW4gdGhpcyBleGFtcGxlLCB0aGUgaW1hZ2UgaXMgNjAwcHggd2lkZSBieSA0MDBweCBoaWdoLlxuICAgICAqIG1hcC5sb2FkSW1hZ2UoJ2h0dHBzOi8vdXBsb2FkLndpa2ltZWRpYS5vcmcvd2lraXBlZGlhL2NvbW1vbnMvOC84OS9CbGFja19hbmRfV2hpdGVfQm94ZWRfJTI4Ym9yZGVyZWQlMjkucG5nJywgZnVuY3Rpb24oZXJyb3IsIGltYWdlKSB7XG4gICAgICogICAgaWYgKGVycm9yKSB0aHJvdyBlcnJvcjtcbiAgICAgKiAgICBpZiAoIW1hcC5oYXNJbWFnZSgnYm9yZGVyLWltYWdlJykpIHtcbiAgICAgKiAgICAgIG1hcC5hZGRJbWFnZSgnYm9yZGVyLWltYWdlJywgaW1hZ2UsIHtcbiAgICAgKiAgICAgICAgICBjb250ZW50OiBbMTYsIDE2LCAzMDAsIDM4NF0sIC8vIHBsYWNlIHRleHQgb3ZlciBsZWZ0IGhhbGYgb2YgaW1hZ2UsIGF2b2lkaW5nIHRoZSAxNnB4IGJvcmRlclxuICAgICAqICAgICAgICAgIHN0cmV0Y2hYOiBbWzE2LCA1ODRdXSwgLy8gc3RyZXRjaCBldmVyeXRoaW5nIGhvcml6b250YWxseSBleGNlcHQgdGhlIDE2cHggYm9yZGVyXG4gICAgICogICAgICAgICAgc3RyZXRjaFk6IFtbMTYsIDM4NF1dLCAvLyBzdHJldGNoIGV2ZXJ5dGhpbmcgdmVydGljYWxseSBleGNlcHQgdGhlIDE2cHggYm9yZGVyXG4gICAgICogICAgICB9KTtcbiAgICAgKiAgICB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKlxuICAgICAqIEBzZWUgVXNlIGBIVE1MSW1hZ2VFbGVtZW50YDogW0FkZCBhbiBpY29uIHRvIHRoZSBtYXBdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvYWRkLWltYWdlLylcbiAgICAgKiBAc2VlIFVzZSBgSW1hZ2VEYXRhYDogW0FkZCBhIGdlbmVyYXRlZCBpY29uIHRvIHRoZSBtYXBdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvYWRkLWltYWdlLWdlbmVyYXRlZC8pXG4gICAgICovXG4gICAgYWRkSW1hZ2UoaWQ6IHN0cmluZyxcbiAgICAgICAgICAgICBpbWFnZTogSFRNTEltYWdlRWxlbWVudCB8IEltYWdlQml0bWFwIHwgSW1hZ2VEYXRhIHwge3dpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBkYXRhOiBVaW50OEFycmF5IHwgVWludDhDbGFtcGVkQXJyYXl9IHwgU3R5bGVJbWFnZUludGVyZmFjZSxcbiAgICAgICAgICAgICB7cGl4ZWxSYXRpbyA9IDEsIHNkZiA9IGZhbHNlLCBzdHJldGNoWCwgc3RyZXRjaFksIGNvbnRlbnR9OiAkU2hhcGU8U3R5bGVJbWFnZU1ldGFkYXRhPiA9IHt9KSB7XG4gICAgICAgIHRoaXMuX2xhenlJbml0RW1wdHlTdHlsZSgpO1xuICAgICAgICBjb25zdCB2ZXJzaW9uID0gMDtcblxuICAgICAgICBpZiAoaW1hZ2UgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50IHx8IChJbWFnZUJpdG1hcCAmJiBpbWFnZSBpbnN0YW5jZW9mIEltYWdlQml0bWFwKSkge1xuICAgICAgICAgICAgY29uc3Qge3dpZHRoLCBoZWlnaHQsIGRhdGF9ID0gYnJvd3Nlci5nZXRJbWFnZURhdGEoaW1hZ2UpO1xuICAgICAgICAgICAgdGhpcy5zdHlsZS5hZGRJbWFnZShpZCwge2RhdGE6IG5ldyBSR0JBSW1hZ2Uoe3dpZHRoLCBoZWlnaHR9LCBkYXRhKSwgcGl4ZWxSYXRpbywgc3RyZXRjaFgsIHN0cmV0Y2hZLCBjb250ZW50LCBzZGYsIHZlcnNpb259KTtcbiAgICAgICAgfSBlbHNlIGlmIChpbWFnZS53aWR0aCA9PT0gdW5kZWZpbmVkIHx8IGltYWdlLmhlaWdodCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maXJlKG5ldyBFcnJvckV2ZW50KG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAnSW52YWxpZCBhcmd1bWVudHMgdG8gbWFwLmFkZEltYWdlKCkuIFRoZSBzZWNvbmQgYXJndW1lbnQgbXVzdCBiZSBhbiBgSFRNTEltYWdlRWxlbWVudGAsIGBJbWFnZURhdGFgLCBgSW1hZ2VCaXRtYXBgLCAnICtcbiAgICAgICAgICAgICAgICAnb3Igb2JqZWN0IHdpdGggYHdpZHRoYCwgYGhlaWdodGAsIGFuZCBgZGF0YWAgcHJvcGVydGllcyB3aXRoIHRoZSBzYW1lIGZvcm1hdCBhcyBgSW1hZ2VEYXRhYCcpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB7d2lkdGgsIGhlaWdodCwgZGF0YX0gPSBpbWFnZTtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJJbWFnZSA9ICgoaW1hZ2U6IGFueSk6IFN0eWxlSW1hZ2VJbnRlcmZhY2UpO1xuXG4gICAgICAgICAgICB0aGlzLnN0eWxlLmFkZEltYWdlKGlkLCB7XG4gICAgICAgICAgICAgICAgZGF0YTogbmV3IFJHQkFJbWFnZSh7d2lkdGgsIGhlaWdodH0sIG5ldyBVaW50OEFycmF5KGRhdGEpKSxcbiAgICAgICAgICAgICAgICBwaXhlbFJhdGlvLFxuICAgICAgICAgICAgICAgIHN0cmV0Y2hYLFxuICAgICAgICAgICAgICAgIHN0cmV0Y2hZLFxuICAgICAgICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgICAgICAgc2RmLFxuICAgICAgICAgICAgICAgIHZlcnNpb24sXG4gICAgICAgICAgICAgICAgdXNlckltYWdlXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKHVzZXJJbWFnZS5vbkFkZCkge1xuICAgICAgICAgICAgICAgIHVzZXJJbWFnZS5vbkFkZCh0aGlzLCBpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganNkb2MvcmVxdWlyZS1yZXR1cm5zXG4gICAgLyoqXG4gICAgICogVXBkYXRlIGFuIGV4aXN0aW5nIGltYWdlIGluIGEgc3R5bGUuIFRoaXMgaW1hZ2UgY2FuIGJlIGRpc3BsYXllZCBvbiB0aGUgbWFwIGxpa2UgYW55IG90aGVyIGljb24gaW4gdGhlIHN0eWxlJ3NcbiAgICAgKiBbc3ByaXRlXShodHRwczovL2RvY3MubWFwYm94LmNvbS9oZWxwL2dsb3NzYXJ5L3Nwcml0ZS8pIHVzaW5nIHRoZSBpbWFnZSdzIElEIHdpdGhcbiAgICAgKiBbYGljb24taW1hZ2VgXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy8jbGF5b3V0LXN5bWJvbC1pY29uLWltYWdlKSxcbiAgICAgKiBbYGJhY2tncm91bmQtcGF0dGVybmBdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjLyNwYWludC1iYWNrZ3JvdW5kLWJhY2tncm91bmQtcGF0dGVybiksXG4gICAgICogW2BmaWxsLXBhdHRlcm5gXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy8jcGFpbnQtZmlsbC1maWxsLXBhdHRlcm4pLFxuICAgICAqIG9yIFtgbGluZS1wYXR0ZXJuYF0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3N0eWxlLXNwZWMvI3BhaW50LWxpbmUtbGluZS1wYXR0ZXJuKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpZCBUaGUgSUQgb2YgdGhlIGltYWdlLlxuICAgICAqIEBwYXJhbSBpbWFnZSBUaGUgaW1hZ2UgYXMgYW4gYEhUTUxJbWFnZUVsZW1lbnRgLCBgSW1hZ2VEYXRhYCwgYEltYWdlQml0bWFwYCBvciBvYmplY3Qgd2l0aCBgd2lkdGhgLCBgaGVpZ2h0YCwgYW5kIGBkYXRhYFxuICAgICAqIHByb3BlcnRpZXMgd2l0aCB0aGUgc2FtZSBmb3JtYXQgYXMgYEltYWdlRGF0YWAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIElmIGFuIGltYWdlIHdpdGggdGhlIElEICdjYXQnIGFscmVhZHkgZXhpc3RzIGluIHRoZSBzdHlsZSdzIHNwcml0ZSxcbiAgICAgKiAvLyByZXBsYWNlIHRoYXQgaW1hZ2Ugd2l0aCBhIG5ldyBpbWFnZSwgJ290aGVyLWNhdC1pY29uLnBuZycuXG4gICAgICogaWYgKG1hcC5oYXNJbWFnZSgnY2F0JykpIG1hcC51cGRhdGVJbWFnZSgnY2F0JywgJy4vb3RoZXItY2F0LWljb24ucG5nJyk7XG4gICAgICovXG4gICAgdXBkYXRlSW1hZ2UoaWQ6IHN0cmluZyxcbiAgICAgICAgaW1hZ2U6IEhUTUxJbWFnZUVsZW1lbnQgfCBJbWFnZUJpdG1hcCB8IEltYWdlRGF0YSB8IHt3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgZGF0YTogVWludDhBcnJheSB8IFVpbnQ4Q2xhbXBlZEFycmF5fSB8IFN0eWxlSW1hZ2VJbnRlcmZhY2UpIHtcblxuICAgICAgICBjb25zdCBleGlzdGluZ0ltYWdlID0gdGhpcy5zdHlsZS5nZXRJbWFnZShpZCk7XG4gICAgICAgIGlmICghZXhpc3RpbmdJbWFnZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgJ1RoZSBtYXAgaGFzIG5vIGltYWdlIHdpdGggdGhhdCBpZC4gSWYgeW91IGFyZSBhZGRpbmcgYSBuZXcgaW1hZ2UgdXNlIGBtYXAuYWRkSW1hZ2UoLi4uKWAgaW5zdGVhZC4nKSkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGltYWdlRGF0YSA9IChpbWFnZSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQgfHwgKEltYWdlQml0bWFwICYmIGltYWdlIGluc3RhbmNlb2YgSW1hZ2VCaXRtYXApKSA/IGJyb3dzZXIuZ2V0SW1hZ2VEYXRhKGltYWdlKSA6IGltYWdlO1xuICAgICAgICBjb25zdCB7d2lkdGgsIGhlaWdodCwgZGF0YX0gPSBpbWFnZURhdGE7XG5cbiAgICAgICAgaWYgKHdpZHRoID09PSB1bmRlZmluZWQgfHwgaGVpZ2h0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpcmUobmV3IEVycm9yRXZlbnQobmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50cyB0byBtYXAudXBkYXRlSW1hZ2UoKS4gVGhlIHNlY29uZCBhcmd1bWVudCBtdXN0IGJlIGFuIGBIVE1MSW1hZ2VFbGVtZW50YCwgYEltYWdlRGF0YWAsIGBJbWFnZUJpdG1hcGAsICcgK1xuICAgICAgICAgICAgICAgICdvciBvYmplY3Qgd2l0aCBgd2lkdGhgLCBgaGVpZ2h0YCwgYW5kIGBkYXRhYCBwcm9wZXJ0aWVzIHdpdGggdGhlIHNhbWUgZm9ybWF0IGFzIGBJbWFnZURhdGFgJykpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh3aWR0aCAhPT0gZXhpc3RpbmdJbWFnZS5kYXRhLndpZHRoIHx8IGhlaWdodCAhPT0gZXhpc3RpbmdJbWFnZS5kYXRhLmhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgJ1RoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSB1cGRhdGVkIGltYWdlIG11c3QgYmUgdGhhdCBzYW1lIGFzIHRoZSBwcmV2aW91cyB2ZXJzaW9uIG9mIHRoZSBpbWFnZScpKSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb3B5ID0gIShpbWFnZSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQgfHwgKEltYWdlQml0bWFwICYmIGltYWdlIGluc3RhbmNlb2YgSW1hZ2VCaXRtYXApKTtcbiAgICAgICAgZXhpc3RpbmdJbWFnZS5kYXRhLnJlcGxhY2UoZGF0YSwgY29weSk7XG5cbiAgICAgICAgdGhpcy5zdHlsZS51cGRhdGVJbWFnZShpZCwgZXhpc3RpbmdJbWFnZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgd2hldGhlciBvciBub3QgYW4gaW1hZ2Ugd2l0aCBhIHNwZWNpZmljIElEIGV4aXN0cyBpbiB0aGUgc3R5bGUuIFRoaXMgY2hlY2tzIGJvdGggaW1hZ2VzXG4gICAgICogaW4gdGhlIHN0eWxlJ3Mgb3JpZ2luYWwgW3Nwcml0ZV0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vaGVscC9nbG9zc2FyeS9zcHJpdGUvKSBhbmQgYW55IGltYWdlc1xuICAgICAqIHRoYXQgaGF2ZSBiZWVuIGFkZGVkIGF0IHJ1bnRpbWUgdXNpbmcge0BsaW5rIE1hcCNhZGRJbWFnZX0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaWQgVGhlIElEIG9mIHRoZSBpbWFnZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSAgQSBCb29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgaW1hZ2UgZXhpc3RzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gQ2hlY2sgaWYgYW4gaW1hZ2Ugd2l0aCB0aGUgSUQgJ2NhdCcgZXhpc3RzIGluXG4gICAgICogLy8gdGhlIHN0eWxlJ3Mgc3ByaXRlLlxuICAgICAqIHZhciBjYXRJY29uRXhpc3RzID0gbWFwLmhhc0ltYWdlKCdjYXQnKTtcbiAgICAgKi9cbiAgICBoYXNJbWFnZShpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghaWQpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoJ01pc3NpbmcgcmVxdWlyZWQgaW1hZ2UgaWQnKSkpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICEhdGhpcy5zdHlsZS5nZXRJbWFnZShpZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFuIGltYWdlIGZyb20gYSBzdHlsZS4gVGhpcyBjYW4gYmUgYW4gaW1hZ2UgZnJvbSB0aGUgc3R5bGUncyBvcmlnaW5hbFxuICAgICAqIFtzcHJpdGVdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL2hlbHAvZ2xvc3Nhcnkvc3ByaXRlLykgb3IgYW55IGltYWdlc1xuICAgICAqIHRoYXQgaGF2ZSBiZWVuIGFkZGVkIGF0IHJ1bnRpbWUgdXNpbmcge0BsaW5rIE1hcCNhZGRJbWFnZX0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaWQgVGhlIElEIG9mIHRoZSBpbWFnZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gSWYgYW4gaW1hZ2Ugd2l0aCB0aGUgSUQgJ2NhdCcgZXhpc3RzIGluXG4gICAgICogLy8gdGhlIHN0eWxlJ3Mgc3ByaXRlLCByZW1vdmUgaXQuXG4gICAgICogaWYgKG1hcC5oYXNJbWFnZSgnY2F0JykpIG1hcC5yZW1vdmVJbWFnZSgnY2F0Jyk7XG4gICAgICovXG4gICAgcmVtb3ZlSW1hZ2UoaWQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLnN0eWxlLnJlbW92ZUltYWdlKGlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2FkIGFuIGltYWdlIGZyb20gYW4gZXh0ZXJuYWwgVVJMIHRvIGJlIHVzZWQgd2l0aCB7QGxpbmsgTWFwI2FkZEltYWdlfS4gRXh0ZXJuYWxcbiAgICAgKiBkb21haW5zIG11c3Qgc3VwcG9ydCBbQ09SU10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9BY2Nlc3NfY29udHJvbF9DT1JTKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIFVSTCBvZiB0aGUgaW1hZ2UgZmlsZS4gSW1hZ2UgZmlsZSBtdXN0IGJlIGluIHBuZywgd2VicCwgb3IganBnIGZvcm1hdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBFeHBlY3RpbmcgYGNhbGxiYWNrKGVycm9yLCBkYXRhKWAuIENhbGxlZCB3aGVuIHRoZSBpbWFnZSBoYXMgbG9hZGVkIG9yIHdpdGggYW4gZXJyb3IgYXJndW1lbnQgaWYgdGhlcmUgaXMgYW4gZXJyb3IuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIExvYWQgYW4gaW1hZ2UgZnJvbSBhbiBleHRlcm5hbCBVUkwuXG4gICAgICogbWFwLmxvYWRJbWFnZSgnaHR0cDovL3BsYWNla2l0dGVuLmNvbS81MC81MCcsIGZ1bmN0aW9uKGVycm9yLCBpbWFnZSkge1xuICAgICAqICAgaWYgKGVycm9yKSB0aHJvdyBlcnJvcjtcbiAgICAgKiAgIC8vIEFkZCB0aGUgbG9hZGVkIGltYWdlIHRvIHRoZSBzdHlsZSdzIHNwcml0ZSB3aXRoIHRoZSBJRCAna2l0dGVuJy5cbiAgICAgKiAgIG1hcC5hZGRJbWFnZSgna2l0dGVuJywgaW1hZ2UpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogQHNlZSBbQWRkIGFuIGljb24gdG8gdGhlIG1hcF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9hZGQtaW1hZ2UvKVxuICAgICAqL1xuICAgIGxvYWRJbWFnZSh1cmw6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uKSB7XG4gICAgICAgIGdldEltYWdlKHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QodXJsLCBSZXNvdXJjZVR5cGUuSW1hZ2UpLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBSZXR1cm5zIGFuIEFycmF5IG9mIHN0cmluZ3MgY29udGFpbmluZyB0aGUgSURzIG9mIGFsbCBpbWFnZXMgY3VycmVudGx5IGF2YWlsYWJsZSBpbiB0aGUgbWFwLlxuICAgICogVGhpcyBpbmNsdWRlcyBib3RoIGltYWdlcyBmcm9tIHRoZSBzdHlsZSdzIG9yaWdpbmFsIFtzcHJpdGVdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL2hlbHAvZ2xvc3Nhcnkvc3ByaXRlLylcbiAgICAqIGFuZCBhbnkgaW1hZ2VzIHRoYXQgaGF2ZSBiZWVuIGFkZGVkIGF0IHJ1bnRpbWUgdXNpbmcge0BsaW5rIE1hcCNhZGRJbWFnZX0uXG4gICAgKlxuICAgICogQHJldHVybnMge0FycmF5PHN0cmluZz59IEFuIEFycmF5IG9mIHN0cmluZ3MgY29udGFpbmluZyB0aGUgbmFtZXMgb2YgYWxsIHNwcml0ZXMvaW1hZ2VzIGN1cnJlbnRseSBhdmFpbGFibGUgaW4gdGhlIG1hcC5cbiAgICAqXG4gICAgKiBAZXhhbXBsZVxuICAgICogdmFyIGFsbEltYWdlcyA9IG1hcC5saXN0SW1hZ2VzKCk7XG4gICAgKlxuICAgICovXG4gICAgbGlzdEltYWdlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUubGlzdEltYWdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBbTWFwYm94IHN0eWxlIGxheWVyXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy8jbGF5ZXJzKVxuICAgICAqIHRvIHRoZSBtYXAncyBzdHlsZS5cbiAgICAgKlxuICAgICAqIEEgbGF5ZXIgZGVmaW5lcyBob3cgZGF0YSBmcm9tIGEgc3BlY2lmaWVkIHNvdXJjZSB3aWxsIGJlIHN0eWxlZC4gUmVhZCBtb3JlIGFib3V0IGxheWVyIHR5cGVzXG4gICAgICogYW5kIGF2YWlsYWJsZSBwYWludCBhbmQgbGF5b3V0IHByb3BlcnRpZXMgaW4gdGhlIFtNYXBib3ggU3R5bGUgU3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3N0eWxlLXNwZWMvI2xheWVycykuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09iamVjdCB8IEN1c3RvbUxheWVySW50ZXJmYWNlfSBsYXllciBUaGUgbGF5ZXIgdG8gYWRkLCBjb25mb3JtaW5nIHRvIGVpdGhlciB0aGUgTWFwYm94IFN0eWxlIFNwZWNpZmljYXRpb24ncyBbbGF5ZXIgZGVmaW5pdGlvbl0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3N0eWxlLXNwZWMvI2xheWVycykgb3IsIGxlc3MgY29tbW9ubHksIHRoZSBbYEN1c3RvbUxheWVySW50ZXJmYWNlYF0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2FwaS8jY3VzdG9tbGF5ZXJpbnRlcmZhY2UpIHNwZWNpZmljYXRpb24uXG4gICAgICogVGhlIE1hcGJveCBTdHlsZSBTcGVjaWZpY2F0aW9uJ3MgbGF5ZXIgZGVmaW5pdGlvbiBpcyBhcHByb3ByaWF0ZSBmb3IgbW9zdCBsYXllcnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXIuaWQgQSB1bmlxdWUgaWRlbmZpZXIgdGhhdCB5b3UgZGVmaW5lLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllci50eXBlIFRoZSB0eXBlIG9mIGxheWVyIChmb3IgZXhhbXBsZSBgZmlsbGAgb3IgYHN5bWJvbGApLlxuICAgICAqIEEgbGlzdCBvZiBsYXllciB0eXBlcyBpcyBhdmFpbGFibGUgaW4gdGhlIFtNYXBib3ggU3R5bGUgU3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3N0eWxlLXNwZWMvbGF5ZXJzLyN0eXBlKS5cbiAgICAgKlxuICAgICAqIChUaGlzIGNhbiBhbHNvIGJlIGBjdXN0b21gLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtgQ3VzdG9tTGF5ZXJJbnRlcmZhY2VgXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvYXBpLyNjdXN0b21sYXllcmludGVyZmFjZSkuKVxuICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgT2JqZWN0fSBbbGF5ZXIuc291cmNlXSBUaGUgZGF0YSBzb3VyY2UgZm9yIHRoZSBsYXllci5cbiAgICAgKiBSZWZlcmVuY2UgYSBzb3VyY2UgdGhhdCBoYXMgX2FscmVhZHkgYmVlbiBkZWZpbmVkXyB1c2luZyB0aGUgc291cmNlJ3MgdW5pcXVlIGlkLlxuICAgICAqIFJlZmVyZW5jZSBhIF9uZXcgc291cmNlXyB1c2luZyBhIHNvdXJjZSBvYmplY3QgKGFzIGRlZmluZWQgaW4gdGhlIFtNYXBib3ggU3R5bGUgU3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3N0eWxlLXNwZWMvc291cmNlcy8pKSBkaXJlY3RseS5cbiAgICAgKiBUaGlzIGlzICoqcmVxdWlyZWQqKiBmb3IgYWxsIGBsYXllci50eXBlYCBvcHRpb25zIF9leGNlcHRfIGZvciBgY3VzdG9tYC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2xheWVyLnNvdXJjZUxheWVyXSAob3B0aW9uYWwpIFRoZSBuYW1lIG9mIHRoZSBbc291cmNlIGxheWVyXShodHRwczovL2RvY3MubWFwYm94LmNvbS9oZWxwL2dsb3NzYXJ5L3NvdXJjZS1sYXllci8pIHdpdGhpbiB0aGUgc3BlY2lmaWVkIGBsYXllci5zb3VyY2VgIHRvIHVzZSBmb3IgdGhpcyBzdHlsZSBsYXllci5cbiAgICAgKiBUaGlzIGlzIG9ubHkgYXBwbGljYWJsZSBmb3IgdmVjdG9yIHRpbGUgc291cmNlcyBhbmQgaXMgKipyZXF1aXJlZCoqIHdoZW4gYGxheWVyLnNvdXJjZWAgaXMgb2YgdGhlIHR5cGUgYHZlY3RvcmAuXG4gICAgICogQHBhcmFtIHthcnJheX0gW2xheWVyLmZpbHRlcl0gKG9wdGlvbmFsKSBBbiBleHByZXNzaW9uIHNwZWNpZnlpbmcgY29uZGl0aW9ucyBvbiBzb3VyY2UgZmVhdHVyZXMuXG4gICAgICogT25seSBmZWF0dXJlcyB0aGF0IG1hdGNoIHRoZSBmaWx0ZXIgYXJlIGRpc3BsYXllZC5cbiAgICAgKiBUaGUgTWFwYm94IFN0eWxlIFNwZWNpZmljYXRpb24gaW5jbHVkZXMgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgbGltaXRhdGlvbnMgb2YgdGhlIFtgZmlsdGVyYF0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3N0eWxlLXNwZWMvbGF5ZXJzLyNmaWx0ZXIpIHBhcmFtZXRlclxuICAgICAqIGFuZCBhIGNvbXBsZXRlIGxpc3Qgb2YgYXZhaWxhYmxlIFtleHByZXNzaW9uc10oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3N0eWxlLXNwZWMvZXhwcmVzc2lvbnMvKS5cbiAgICAgKiBJZiBubyBmaWx0ZXIgaXMgcHJvdmlkZWQsIGFsbCBmZWF0dXJlcyBpbiB0aGUgc291cmNlIChvciBzb3VyY2UgbGF5ZXIgZm9yIHZlY3RvciB0aWxlc2V0cykgd2lsbCBiZSBkaXNwbGF5ZWQuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtsYXllci5wYWludF0gKG9wdGlvbmFsKSBQYWludCBwcm9wZXJ0aWVzIGZvciB0aGUgbGF5ZXIuXG4gICAgICogQXZhaWxhYmxlIHBhaW50IHByb3BlcnRpZXMgdmFyeSBieSBgbGF5ZXIudHlwZWAuXG4gICAgICogQSBmdWxsIGxpc3Qgb2YgcGFpbnQgcHJvcGVydGllcyBmb3IgZWFjaCBsYXllciB0eXBlIGlzIGF2YWlsYWJsZSBpbiB0aGUgW01hcGJveCBTdHlsZSBTcGVjaWZpY2F0aW9uXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy9sYXllcnMvKS5cbiAgICAgKiBJZiBubyBwYWludCBwcm9wZXJ0aWVzIGFyZSBzcGVjaWZpZWQsIGRlZmF1bHQgdmFsdWVzIHdpbGwgYmUgdXNlZC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW2xheWVyLmxheW91dF0gKG9wdGlvbmFsKSBMYXlvdXQgcHJvcGVydGllcyBmb3IgdGhlIGxheWVyLlxuICAgICAqIEF2YWlsYWJsZSBsYXlvdXQgcHJvcGVydGllcyB2YXJ5IGJ5IGBsYXllci50eXBlYC5cbiAgICAgKiBBIGZ1bGwgbGlzdCBvZiBsYXlvdXQgcHJvcGVydGllcyBmb3IgZWFjaCBsYXllciB0eXBlIGlzIGF2YWlsYWJsZSBpbiB0aGUgW01hcGJveCBTdHlsZSBTcGVjaWZpY2F0aW9uXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvc3R5bGUtc3BlYy9sYXllcnMvKS5cbiAgICAgKiBJZiBubyBsYXlvdXQgcHJvcGVydGllcyBhcmUgc3BlY2lmaWVkLCBkZWZhdWx0IHZhbHVlcyB3aWxsIGJlIHVzZWQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtsYXllci5tYXh6b29tXSAob3B0aW9uYWwpIFRoZSBtYXhpbXVtIHpvb20gbGV2ZWwgZm9yIHRoZSBsYXllci5cbiAgICAgKiBBdCB6b29tIGxldmVscyBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4gdGhlIG1heHpvb20sIHRoZSBsYXllciB3aWxsIGJlIGhpZGRlbi5cbiAgICAgKiBUaGUgdmFsdWUgY2FuIGJlIGFueSBudW1iZXIgYmV0d2VlbiBgMGAgYW5kIGAyNGAgKGluY2x1c2l2ZSkuXG4gICAgICogSWYgbm8gbWF4em9vbSBpcyBwcm92aWRlZCwgdGhlIGxheWVyIHdpbGwgYmUgdmlzaWJsZSBhdCBhbGwgem9vbSBsZXZlbHMgZm9yIHdoaWNoIHRoZXJlIGFyZSB0aWxlcyBhdmFpbGFibGUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtsYXllci5taW56b29tXSAob3B0aW9uYWwpIFRoZSBtaW5pbXVtIHpvb20gbGV2ZWwgZm9yIHRoZSBsYXllci5cbiAgICAgKiBBdCB6b29tIGxldmVscyBsZXNzIHRoYW4gdGhlIG1pbnpvb20sIHRoZSBsYXllciB3aWxsIGJlIGhpZGRlbi5cbiAgICAgKiBUaGUgdmFsdWUgY2FuIGJlIGFueSBudW1iZXIgYmV0d2VlbiBgMGAgYW5kIGAyNGAgKGluY2x1c2l2ZSkuXG4gICAgICogSWYgbm8gbWluem9vbSBpcyBwcm92aWRlZCwgdGhlIGxheWVyIHdpbGwgYmUgdmlzaWJsZSBhdCBhbGwgem9vbSBsZXZlbHMgZm9yIHdoaWNoIHRoZXJlIGFyZSB0aWxlcyBhdmFpbGFibGUuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtsYXllci5tZXRhZGF0YV0gKG9wdGlvbmFsKSBBcmJpdHJhcnkgcHJvcGVydGllcyB1c2VmdWwgdG8gdHJhY2sgd2l0aCB0aGUgbGF5ZXIsIGJ1dCBkbyBub3QgaW5mbHVlbmNlIHJlbmRlcmluZy5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2xheWVyLnJlbmRlcmluZ01vZGVdIFRoaXMgaXMgb25seSBhcHBsaWNhYmxlIGZvciBsYXllcnMgd2l0aCB0aGUgdHlwZSBgY3VzdG9tYC5cbiAgICAgKiBTZWUgW2BDdXN0b21MYXllckludGVyZmFjZWBdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9hcGkvI2N1c3RvbWxheWVyaW50ZXJmYWNlKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2JlZm9yZUlkXSBUaGUgSUQgb2YgYW4gZXhpc3RpbmcgbGF5ZXIgdG8gaW5zZXJ0IHRoZSBuZXcgbGF5ZXIgYmVmb3JlLlxuICAgICAqIElmIHRoaXMgYXJndW1lbnQgaXMgbm90IHNwZWNpZmllZCwgdGhlIGxheWVyIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIGVuZCBvZiB0aGUgbGF5ZXJzIGFycmF5LlxuICAgICAqXG4gICAgICogQHJldHVybnMge01hcH0gYHRoaXNgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIEFkZCBhIGNpcmNsZSBsYXllciB3aXRoIGEgdmVjdG9yIHNvdXJjZVxuICAgICAqIG1hcC5hZGRMYXllcih7XG4gICAgICogICBpZDogJ3BvaW50cy1vZi1pbnRlcmVzdCcsXG4gICAgICogICBzb3VyY2U6IHtcbiAgICAgKiAgICAgdHlwZTogJ3ZlY3RvcicsXG4gICAgICogICAgIHVybDogJ21hcGJveDovL21hcGJveC5tYXBib3gtc3RyZWV0cy12OCdcbiAgICAgKiAgIH0sXG4gICAgICogICAnc291cmNlLWxheWVyJzogJ3BvaV9sYWJlbCcsXG4gICAgICogICB0eXBlOiAnY2lyY2xlJyxcbiAgICAgKiAgIHBhaW50OiB7XG4gICAgICogICAgIC8vIE1hcGJveCBTdHlsZSBTcGVjaWZpY2F0aW9uIHBhaW50IHByb3BlcnRpZXNcbiAgICAgKiAgIH0sXG4gICAgICogICBsYXlvdXQ6IHtcbiAgICAgKiAgICAgLy8gTWFwYm94IFN0eWxlIFNwZWNpZmljYXRpb24gbGF5b3V0IHByb3BlcnRpZXNcbiAgICAgKiAgIH1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gRGVmaW5lIGEgc291cmNlIGJlZm9yZSB1c2luZyBpdCB0byBjcmVhdGUgYSBuZXcgbGF5ZXJcbiAgICAgKiBtYXAuYWRkU291cmNlKCdzdGF0ZS1kYXRhJywge1xuICAgICAqICAgdHlwZTogJ2dlb2pzb24nLFxuICAgICAqICAgZGF0YTogJ3BhdGgvdG8vZGF0YS5nZW9qc29uJ1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogbWFwLmFkZExheWVyKHtcbiAgICAgKiAgIGlkOiAnc3RhdGVzJyxcbiAgICAgKiAgIC8vIFJlZmVyZW5jZXMgdGhlIEdlb0pTT04gc291cmNlIGRlZmluZWQgYWJvdmVcbiAgICAgKiAgIC8vIGFuZCBkb2VzIG5vdCByZXF1aXJlIGEgYHNvdXJjZS1sYXllcmBcbiAgICAgKiAgIHNvdXJjZTogJ3N0YXRlLWRhdGEnLFxuICAgICAqICAgdHlwZTogJ3N5bWJvbCcsXG4gICAgICogICBsYXlvdXQ6IHtcbiAgICAgKiAgICAgLy8gU2V0IHRoZSBsYWJlbCBjb250ZW50IHRvIHRoZVxuICAgICAqICAgICAvLyBmZWF0dXJlJ3MgYG5hbWVgIHByb3BlcnR5XG4gICAgICogICAgIHRleHQtZmllbGQ6IFsnZ2V0JywgJ25hbWUnXVxuICAgICAqICAgfVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBBZGQgYSBuZXcgc3ltYm9sIGxheWVyIGJlZm9yZSBhbiBleGlzdGluZyBsYXllclxuICAgICAqIG1hcC5hZGRMYXllcih7XG4gICAgICogICBpZDogJ3N0YXRlcycsXG4gICAgICogICAvLyBSZWZlcmVuY2VzIGEgc291cmNlIHRoYXQncyBhbHJlYWR5IGJlZW4gZGVmaW5lZFxuICAgICAqICAgc291cmNlOiAnc3RhdGUtZGF0YScsXG4gICAgICogICB0eXBlOiAnc3ltYm9sJyxcbiAgICAgKiAgIGxheW91dDoge1xuICAgICAqICAgICAvLyBTZXQgdGhlIGxhYmVsIGNvbnRlbnQgdG8gdGhlXG4gICAgICogICAgIC8vIGZlYXR1cmUncyBgbmFtZWAgcHJvcGVydHlcbiAgICAgKiAgICAgdGV4dC1maWVsZDogWydnZXQnLCAnbmFtZSddXG4gICAgICogICB9XG4gICAgICogLy8gQWRkIHRoZSBsYXllciBiZWZvcmUgdGhlIGV4aXN0aW5nIGBjaXRpZXNgIGxheWVyXG4gICAgICogfSwgJ2NpdGllcycpO1xuICAgICAqXG4gICAgICogQHNlZSBbQ3JlYXRlIGFuZCBzdHlsZSBjbHVzdGVyc10oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvY2x1c3Rlci8pXG4gICAgICogQHNlZSBbQWRkIGEgdmVjdG9yIHRpbGUgc291cmNlXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS92ZWN0b3Itc291cmNlLylcbiAgICAgKiBAc2VlIFtBZGQgYSBXTVMgc291cmNlXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS93bXMvKVxuICAgICAqL1xuICAgIGFkZExheWVyKGxheWVyOiBMYXllclNwZWNpZmljYXRpb24gfCBDdXN0b21MYXllckludGVyZmFjZSwgYmVmb3JlSWQ/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fbGF6eUluaXRFbXB0eVN0eWxlKCk7XG4gICAgICAgIHRoaXMuc3R5bGUuYWRkTGF5ZXIobGF5ZXIsIGJlZm9yZUlkKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZSh0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNb3ZlcyBhIGxheWVyIHRvIGEgZGlmZmVyZW50IHotcG9zaXRpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgVGhlIElEIG9mIHRoZSBsYXllciB0byBtb3ZlLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbYmVmb3JlSWRdIFRoZSBJRCBvZiBhbiBleGlzdGluZyBsYXllciB0byBpbnNlcnQgdGhlIG5ldyBsYXllciBiZWZvcmUuIFdoZW4gdmlld2luZyB0aGUgbWFwLCB0aGUgYGlkYCBsYXllciB3aWxsIGFwcGVhciBiZW5lYXRoIHRoZSBgYmVmb3JlSWRgIGxheWVyLiBJZiBgYmVmb3JlSWRgIGlzIG9taXR0ZWQsIHRoZSBsYXllciB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBlbmQgb2YgdGhlIGxheWVycyBhcnJheSBhbmQgYXBwZWFyIGFib3ZlIGFsbCBvdGhlciBsYXllcnMgb24gdGhlIG1hcC5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gTW92ZSBhIGxheWVyIHdpdGggSUQgJ3BvbHlnb24nIGJlZm9yZSB0aGUgbGF5ZXIgd2l0aCBJRCAnY291bnRyeS1sYWJlbCcuIFRoZSBgcG9seWdvbmAgbGF5ZXIgd2lsbCBhcHBlYXIgYmVuZWF0aCB0aGUgYGNvdW50cnktbGFiZWxgIGxheWVyIG9uIHRoZSBtYXAuXG4gICAgICogbWFwLm1vdmVMYXllcigncG9seWdvbicsICdjb3VudHJ5LWxhYmVsJyk7XG4gICAgICovXG4gICAgbW92ZUxheWVyKGlkOiBzdHJpbmcsIGJlZm9yZUlkPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc3R5bGUubW92ZUxheWVyKGlkLCBiZWZvcmVJZCk7XG4gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtcmV0dXJuc1xuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIGxheWVyIHdpdGggdGhlIGdpdmVuIElEIGZyb20gdGhlIG1hcCdzIHN0eWxlLlxuICAgICAqXG4gICAgICogSWYgbm8gc3VjaCBsYXllciBleGlzdHMsIGFuIGBlcnJvcmAgZXZlbnQgaXMgZmlyZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgaWQgb2YgdGhlIGxheWVyIHRvIHJlbW92ZVxuICAgICAqIEBmaXJlcyBlcnJvclxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBJZiBhIGxheWVyIHdpdGggSUQgJ3N0YXRlLWRhdGEnIGV4aXN0cywgcmVtb3ZlIGl0LlxuICAgICAqIGlmIChtYXAuZ2V0TGF5ZXIoJ3N0YXRlLWRhdGEnKSkgbWFwLnJlbW92ZUxheWVyKCdzdGF0ZS1kYXRhJyk7XG4gICAgICovXG4gICAgcmVtb3ZlTGF5ZXIoaWQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLnN0eWxlLnJlbW92ZUxheWVyKGlkKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZSh0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBsYXllciB3aXRoIHRoZSBzcGVjaWZpZWQgSUQgaW4gdGhlIG1hcCdzIHN0eWxlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFRoZSBJRCBvZiB0aGUgbGF5ZXIgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHs/T2JqZWN0fSBUaGUgbGF5ZXIgd2l0aCB0aGUgc3BlY2lmaWVkIElELCBvciBgdW5kZWZpbmVkYFxuICAgICAqICAgaWYgdGhlIElEIGNvcnJlc3BvbmRzIHRvIG5vIGV4aXN0aW5nIGxheWVycy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIHN0YXRlRGF0YUxheWVyID0gbWFwLmdldExheWVyKCdzdGF0ZS1kYXRhJyk7XG4gICAgICpcbiAgICAgKiBAc2VlIFtGaWx0ZXIgc3ltYm9scyBieSB0b2dnbGluZyBhIGxpc3RdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZmlsdGVyLW1hcmtlcnMvKVxuICAgICAqIEBzZWUgW0ZpbHRlciBzeW1ib2xzIGJ5IHRleHQgaW5wdXRdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZmlsdGVyLW1hcmtlcnMtYnktaW5wdXQvKVxuICAgICAqL1xuICAgIGdldExheWVyKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuZ2V0TGF5ZXIoaWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHpvb20gZXh0ZW50IGZvciB0aGUgc3BlY2lmaWVkIHN0eWxlIGxheWVyLiBUaGUgem9vbSBleHRlbnQgaW5jbHVkZXMgdGhlXG4gICAgICogW21pbmltdW0gem9vbSBsZXZlbF0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3N0eWxlLXNwZWMvI2xheWVyLW1pbnpvb20pXG4gICAgICogYW5kIFttYXhpbXVtIHpvb20gbGV2ZWxdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjLyNsYXllci1tYXh6b29tKSlcbiAgICAgKiBhdCB3aGljaCB0aGUgbGF5ZXIgd2lsbCBiZSByZW5kZXJlZC5cbiAgICAgKlxuICAgICAqIE5vdGU6IEZvciBzdHlsZSBsYXllcnMgdXNpbmcgdmVjdG9yIHNvdXJjZXMsIHN0eWxlIGxheWVycyBjYW5ub3QgYmUgcmVuZGVyZWQgYXQgem9vbSBsZXZlbHMgbG93ZXIgdGhhbiB0aGVcbiAgICAgKiBtaW5pbXVtIHpvb20gbGV2ZWwgb2YgdGhlIF9zb3VyY2UgbGF5ZXJfIGJlY2F1c2UgdGhlIGRhdGEgZG9lcyBub3QgZXhpc3QgYXQgdGhvc2Ugem9vbSBsZXZlbHMuIElmIHRoZSBtaW5pbXVtXG4gICAgICogem9vbSBsZXZlbCBvZiB0aGUgc291cmNlIGxheWVyIGlzIGhpZ2hlciB0aGFuIHRoZSBtaW5pbXVtIHpvb20gbGV2ZWwgZGVmaW5lZCBpbiB0aGUgc3R5bGUgbGF5ZXIsIHRoZSBzdHlsZVxuICAgICAqIGxheWVyIHdpbGwgbm90IGJlIHJlbmRlcmVkIGF0IGFsbCB6b29tIGxldmVscyBpbiB0aGUgem9vbSByYW5nZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllcklkIFRoZSBJRCBvZiB0aGUgbGF5ZXIgdG8gd2hpY2ggdGhlIHpvb20gZXh0ZW50IHdpbGwgYmUgYXBwbGllZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbWluem9vbSBUaGUgbWluaW11bSB6b29tIHRvIHNldCAoMC0yNCkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG1heHpvb20gVGhlIG1heGltdW0gem9vbSB0byBzZXQgKDAtMjQpLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXAuc2V0TGF5ZXJab29tUmFuZ2UoJ215LWxheWVyJywgMiwgNSk7XG4gICAgICpcbiAgICAgKi9cbiAgICBzZXRMYXllclpvb21SYW5nZShsYXllcklkOiBzdHJpbmcsIG1pbnpvb206IG51bWJlciwgbWF4em9vbTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc3R5bGUuc2V0TGF5ZXJab29tUmFuZ2UobGF5ZXJJZCwgbWluem9vbSwgbWF4em9vbSk7XG4gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZmlsdGVyIGZvciB0aGUgc3BlY2lmaWVkIHN0eWxlIGxheWVyLlxuICAgICAqXG4gICAgICogRmlsdGVycyBjb250cm9sIHdoaWNoIGZlYXR1cmVzIGEgc3R5bGUgbGF5ZXIgcmVuZGVycyBmcm9tIGl0cyBzb3VyY2UuXG4gICAgICogQW55IGZlYXR1cmUgZm9yIHdoaWNoIHRoZSBmaWx0ZXIgZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gYHRydWVgIHdpbGwgYmVcbiAgICAgKiByZW5kZXJlZCBvbiB0aGUgbWFwLiBUaG9zZSB0aGF0IGFyZSBmYWxzZSB3aWxsIGJlIGhpZGRlbi5cbiAgICAgKlxuICAgICAqIFVzZSBgc2V0RmlsdGVyYCB0byBzaG93IGEgc3Vic2V0IG9mIHlvdXIgc291cmNlIGRhdGEuXG4gICAgICpcbiAgICAgKiBUbyBjbGVhciB0aGUgZmlsdGVyLCBwYXNzIGBudWxsYCBvciBgdW5kZWZpbmVkYCBhcyB0aGUgc2Vjb25kIHBhcmFtZXRlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllcklkIFRoZSBJRCBvZiB0aGUgbGF5ZXIgdG8gd2hpY2ggdGhlIGZpbHRlciB3aWxsIGJlIGFwcGxpZWQuXG4gICAgICogQHBhcmFtIHtBcnJheSB8IG51bGwgfCB1bmRlZmluZWR9IGZpbHRlciBUaGUgZmlsdGVyLCBjb25mb3JtaW5nIHRvIHRoZSBNYXBib3ggU3R5bGUgU3BlY2lmaWNhdGlvbidzXG4gICAgICogICBbZmlsdGVyIGRlZmluaXRpb25dKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjL2xheWVycy8jZmlsdGVyKS4gIElmIGBudWxsYCBvciBgdW5kZWZpbmVkYCBpcyBwcm92aWRlZCwgdGhlIGZ1bmN0aW9uIHJlbW92ZXMgYW55IGV4aXN0aW5nIGZpbHRlciBmcm9tIHRoZSBsYXllci5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIE9wdGlvbnMgb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudmFsaWRhdGU9dHJ1ZV0gV2hldGhlciB0byBjaGVjayBpZiB0aGUgZmlsdGVyIGNvbmZvcm1zIHRvIHRoZSBNYXBib3ggR0wgU3R5bGUgU3BlY2lmaWNhdGlvbi4gRGlzYWJsaW5nIHZhbGlkYXRpb24gaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gdGhhdCBzaG91bGQgb25seSBiZSB1c2VkIGlmIHlvdSBoYXZlIHByZXZpb3VzbHkgdmFsaWRhdGVkIHRoZSB2YWx1ZXMgeW91IHdpbGwgYmUgcGFzc2luZyB0byB0aGlzIGZ1bmN0aW9uLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBkaXNwbGF5IG9ubHkgZmVhdHVyZXMgd2l0aCB0aGUgJ25hbWUnIHByb3BlcnR5ICdVU0EnXG4gICAgICogbWFwLnNldEZpbHRlcignbXktbGF5ZXInLCBbJz09JywgWydnZXQnLCAnbmFtZSddLCAnVVNBJ10pO1xuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gZGlzcGxheSBvbmx5IGZlYXR1cmVzIHdpdGggZml2ZSBvciBtb3JlICdhdmFpbGFibGUtc3BvdHMnXG4gICAgICogbWFwLnNldEZpbHRlcignYmlrZS1kb2NrcycsIFsnPj0nLCBbJ2dldCcsICdhdmFpbGFibGUtc3BvdHMnXSwgNV0pO1xuICAgICAqIEBleGFtcGxlXG4gICAgICogLy8gcmVtb3ZlIHRoZSBmaWx0ZXIgZm9yIHRoZSAnYmlrZS1kb2Nrcycgc3R5bGUgbGF5ZXJcbiAgICAgKiBtYXAuc2V0RmlsdGVyKCdiaWtlLWRvY2tzJywgbnVsbCk7XG4gICAgICpcbiAgICAgKiBAc2VlIFtGaWx0ZXIgZmVhdHVyZXMgd2l0aGluIG1hcCB2aWV3XShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2ZpbHRlci1mZWF0dXJlcy13aXRoaW4tbWFwLXZpZXcvKVxuICAgICAqIEBzZWUgW0hpZ2hsaWdodCBmZWF0dXJlcyBjb250YWluaW5nIHNpbWlsYXIgZGF0YV0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9xdWVyeS1zaW1pbGFyLWZlYXR1cmVzLylcbiAgICAgKiBAc2VlIFtDcmVhdGUgYSB0aW1lbGluZSBhbmltYXRpb25dKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvdGltZWxpbmUtYW5pbWF0aW9uLylcbiAgICAgKiBAc2VlIFR1dG9yaWFsOiBbU2hvdyBjaGFuZ2VzIG92ZXIgdGltZV0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vaGVscC90dXRvcmlhbHMvc2hvdy1jaGFuZ2VzLW92ZXItdGltZS8pXG4gICAgICovXG4gICAgc2V0RmlsdGVyKGxheWVySWQ6IHN0cmluZywgZmlsdGVyOiA/RmlsdGVyU3BlY2lmaWNhdGlvbiwgIG9wdGlvbnM6IFN0eWxlU2V0dGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRoaXMuc3R5bGUuc2V0RmlsdGVyKGxheWVySWQsIGZpbHRlciwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZmlsdGVyIGFwcGxpZWQgdG8gdGhlIHNwZWNpZmllZCBzdHlsZSBsYXllci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllcklkIFRoZSBJRCBvZiB0aGUgc3R5bGUgbGF5ZXIgd2hvc2UgZmlsdGVyIHRvIGdldC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFRoZSBsYXllcidzIGZpbHRlci5cbiAgICAgKi9cbiAgICBnZXRGaWx0ZXIobGF5ZXJJZDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlLmdldEZpbHRlcihsYXllcklkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiBhIHBhaW50IHByb3BlcnR5IGluIHRoZSBzcGVjaWZpZWQgc3R5bGUgbGF5ZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXJJZCBUaGUgSUQgb2YgdGhlIGxheWVyIHRvIHNldCB0aGUgcGFpbnQgcHJvcGVydHkgaW4uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIHBhaW50IHByb3BlcnR5IHRvIHNldC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgcGFpbnQgcHJvcGVydHkgdG8gc2V0LlxuICAgICAqICAgTXVzdCBiZSBvZiBhIHR5cGUgYXBwcm9wcmlhdGUgZm9yIHRoZSBwcm9wZXJ0eSwgYXMgZGVmaW5lZCBpbiB0aGUgW01hcGJveCBTdHlsZSBTcGVjaWZpY2F0aW9uXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1zdHlsZS1zcGVjLykuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBPcHRpb25zIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnZhbGlkYXRlPXRydWVdIFdoZXRoZXIgdG8gY2hlY2sgaWYgYHZhbHVlYCBjb25mb3JtcyB0byB0aGUgTWFwYm94IEdMIFN0eWxlIFNwZWNpZmljYXRpb24uIERpc2FibGluZyB2YWxpZGF0aW9uIGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHRoYXQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB5b3UgaGF2ZSBwcmV2aW91c2x5IHZhbGlkYXRlZCB0aGUgdmFsdWVzIHlvdSB3aWxsIGJlIHBhc3NpbmcgdG8gdGhpcyBmdW5jdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5zZXRQYWludFByb3BlcnR5KCdteS1sYXllcicsICdmaWxsLWNvbG9yJywgJyNmYWFmZWUnKTtcbiAgICAgKiBAc2VlIFtDaGFuZ2UgYSBsYXllcidzIGNvbG9yIHdpdGggYnV0dG9uc10oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9jb2xvci1zd2l0Y2hlci8pXG4gICAgICogQHNlZSBbQWRqdXN0IGEgbGF5ZXIncyBvcGFjaXR5XShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2FkanVzdC1sYXllci1vcGFjaXR5LylcbiAgICAgKiBAc2VlIFtDcmVhdGUgYSBkcmFnZ2FibGUgcG9pbnRdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZHJhZy1hLXBvaW50LylcbiAgICAgKi9cbiAgICBzZXRQYWludFByb3BlcnR5KGxheWVySWQ6IHN0cmluZywgbmFtZTogc3RyaW5nLCB2YWx1ZTogYW55LCBvcHRpb25zOiBTdHlsZVNldHRlck9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLnN0eWxlLnNldFBhaW50UHJvcGVydHkobGF5ZXJJZCwgbmFtZSwgdmFsdWUsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlKHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgcGFpbnQgcHJvcGVydHkgaW4gdGhlIHNwZWNpZmllZCBzdHlsZSBsYXllci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllcklkIFRoZSBJRCBvZiB0aGUgbGF5ZXIgdG8gZ2V0IHRoZSBwYWludCBwcm9wZXJ0eSBmcm9tLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIGEgcGFpbnQgcHJvcGVydHkgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHsqfSBUaGUgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBwYWludCBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBnZXRQYWludFByb3BlcnR5KGxheWVySWQ6IHN0cmluZywgbmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlLmdldFBhaW50UHJvcGVydHkobGF5ZXJJZCwgbmFtZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdmFsdWUgb2YgYSBsYXlvdXQgcHJvcGVydHkgaW4gdGhlIHNwZWNpZmllZCBzdHlsZSBsYXllci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsYXllcklkIFRoZSBJRCBvZiB0aGUgbGF5ZXIgdG8gc2V0IHRoZSBsYXlvdXQgcHJvcGVydHkgaW4uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIGxheW91dCBwcm9wZXJ0eSB0byBzZXQuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIGxheW91dCBwcm9wZXJ0eS4gTXVzdCBiZSBvZiBhIHR5cGUgYXBwcm9wcmlhdGUgZm9yIHRoZSBwcm9wZXJ0eSwgYXMgZGVmaW5lZCBpbiB0aGUgW01hcGJveCBTdHlsZSBTcGVjaWZpY2F0aW9uXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1zdHlsZS1zcGVjLykuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBPcHRpb25zIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnZhbGlkYXRlPXRydWVdIFdoZXRoZXIgdG8gY2hlY2sgaWYgYHZhbHVlYCBjb25mb3JtcyB0byB0aGUgTWFwYm94IEdMIFN0eWxlIFNwZWNpZmljYXRpb24uIERpc2FibGluZyB2YWxpZGF0aW9uIGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHRoYXQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB5b3UgaGF2ZSBwcmV2aW91c2x5IHZhbGlkYXRlZCB0aGUgdmFsdWVzIHlvdSB3aWxsIGJlIHBhc3NpbmcgdG8gdGhpcyBmdW5jdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7TWFwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcC5zZXRMYXlvdXRQcm9wZXJ0eSgnbXktbGF5ZXInLCAndmlzaWJpbGl0eScsICdub25lJyk7XG4gICAgICogQHNlZSBbU2hvdyBhbmQgaGlkZSBsYXllcnNdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3RvZ2dsZS1sYXllcnMvKVxuICAgICAqL1xuICAgIHNldExheW91dFByb3BlcnR5KGxheWVySWQ6IHN0cmluZywgbmFtZTogc3RyaW5nLCB2YWx1ZTogYW55LCBvcHRpb25zOiBTdHlsZVNldHRlck9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLnN0eWxlLnNldExheW91dFByb3BlcnR5KGxheWVySWQsIG5hbWUsIHZhbHVlLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZSh0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIGxheW91dCBwcm9wZXJ0eSBpbiB0aGUgc3BlY2lmaWVkIHN0eWxlIGxheWVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGxheWVySWQgVGhlIElEIG9mIHRoZSBsYXllciB0byBnZXQgdGhlIGxheW91dCBwcm9wZXJ0eSBmcm9tLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBsYXlvdXQgcHJvcGVydHkgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHsqfSBUaGUgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBsYXlvdXQgcHJvcGVydHkuXG4gICAgICovXG4gICAgZ2V0TGF5b3V0UHJvcGVydHkobGF5ZXJJZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuZ2V0TGF5b3V0UHJvcGVydHkobGF5ZXJJZCwgbmFtZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYW55IGNvbWJpbmF0aW9uIG9mIGxpZ2h0IHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBsaWdodCBMaWdodCBwcm9wZXJ0aWVzIHRvIHNldC4gTXVzdCBjb25mb3JtIHRvIHRoZSBbTWFwYm94IFN0eWxlIFNwZWNpZmljYXRpb25dKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLXN0eWxlLXNwZWMvI2xpZ2h0KS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIE9wdGlvbnMgb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudmFsaWRhdGU9dHJ1ZV0gV2hldGhlciB0byBjaGVjayBpZiB0aGUgZmlsdGVyIGNvbmZvcm1zIHRvIHRoZSBNYXBib3ggR0wgU3R5bGUgU3BlY2lmaWNhdGlvbi4gRGlzYWJsaW5nIHZhbGlkYXRpb24gaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gdGhhdCBzaG91bGQgb25seSBiZSB1c2VkIGlmIHlvdSBoYXZlIHByZXZpb3VzbHkgdmFsaWRhdGVkIHRoZSB2YWx1ZXMgeW91IHdpbGwgYmUgcGFzc2luZyB0byB0aGlzIGZ1bmN0aW9uLlxuICAgICAqIEByZXR1cm5zIHtNYXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIGxheWVyVmlzaWJpbGl0eSA9IG1hcC5nZXRMYXlvdXRQcm9wZXJ0eSgnbXktbGF5ZXInLCAndmlzaWJpbGl0eScpO1xuICAgICAqIEBzZWUgW1Nob3cgYW5kIGhpZGUgbGF5ZXJzXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS90b2dnbGUtbGF5ZXJzLylcbiAgICAgKi9cbiAgICBzZXRMaWdodChsaWdodDogTGlnaHRTcGVjaWZpY2F0aW9uLCBvcHRpb25zOiBTdHlsZVNldHRlck9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLl9sYXp5SW5pdEVtcHR5U3R5bGUoKTtcbiAgICAgICAgdGhpcy5zdHlsZS5zZXRMaWdodChsaWdodCwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aGlzLl91cGRhdGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGxpZ2h0IG9iamVjdC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IGxpZ2h0IExpZ2h0IHByb3BlcnRpZXMgb2YgdGhlIHN0eWxlLlxuICAgICAqL1xuICAgIGdldExpZ2h0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZS5nZXRMaWdodCgpO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLXJldHVybnNcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBgc3RhdGVgIG9mIGEgZmVhdHVyZS5cbiAgICAgKiBBIGZlYXR1cmUncyBgc3RhdGVgIGlzIGEgc2V0IG9mIHVzZXItZGVmaW5lZCBrZXktdmFsdWUgcGFpcnMgdGhhdCBhcmUgYXNzaWduZWQgdG8gYSBmZWF0dXJlIGF0IHJ1bnRpbWUuXG4gICAgICogV2hlbiB1c2luZyB0aGlzIG1ldGhvZCwgdGhlIGBzdGF0ZWAgb2JqZWN0IGlzIG1lcmdlZCB3aXRoIGFueSBleGlzdGluZyBrZXktdmFsdWUgcGFpcnMgaW4gdGhlIGZlYXR1cmUncyBzdGF0ZS5cbiAgICAgKiBGZWF0dXJlcyBhcmUgaWRlbnRpZmllZCBieSB0aGVpciBgZmVhdHVyZS5pZGAgYXR0cmlidXRlLCB3aGljaCBjYW4gYmUgYW55IG51bWJlciBvciBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBUaGlzIG1ldGhvZCBjYW4gb25seSBiZSB1c2VkIHdpdGggc291cmNlcyB0aGF0IGhhdmUgYSBgZmVhdHVyZS5pZGAgYXR0cmlidXRlLiBUaGUgYGZlYXR1cmUuaWRgIGF0dHJpYnV0ZSBjYW4gYmUgZGVmaW5lZCBpbiB0aHJlZSB3YXlzOlxuICAgICAqIC0gRm9yIHZlY3RvciBvciBHZW9KU09OIHNvdXJjZXMsIGluY2x1ZGluZyBhbiBgaWRgIGF0dHJpYnV0ZSBpbiB0aGUgb3JpZ2luYWwgZGF0YSBmaWxlLlxuICAgICAqIC0gRm9yIHZlY3RvciBvciBHZW9KU09OIHNvdXJjZXMsIHVzaW5nIHRoZSBbYHByb21vdGVJZGBdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjL3NvdXJjZXMvI3ZlY3Rvci1wcm9tb3RlSWQpIG9wdGlvbiBhdCB0aGUgdGltZSB0aGUgc291cmNlIGlzIGRlZmluZWQuXG4gICAgICogLSBGb3IgR2VvSlNPTiBzb3VyY2VzLCB1c2luZyB0aGUgW2BnZW5lcmF0ZUlkYF0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3N0eWxlLXNwZWMvc291cmNlcy8jZ2VvanNvbi1nZW5lcmF0ZUlkKSBvcHRpb24gdG8gYXV0by1hc3NpZ24gYW4gYGlkYCBiYXNlZCBvbiB0aGUgZmVhdHVyZSdzIGluZGV4IGluIHRoZSBzb3VyY2UgZGF0YS4gSWYgeW91IGNoYW5nZSBmZWF0dXJlIGRhdGEgdXNpbmcgYG1hcC5nZXRTb3VyY2UoJ3NvbWUgaWQnKS5zZXREYXRhKC4uKWAsIHlvdSBtYXkgbmVlZCB0byByZS1hcHBseSBzdGF0ZSB0YWtpbmcgaW50byBhY2NvdW50IHVwZGF0ZWQgYGlkYCB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBfTm90ZTogWW91IGNhbiB1c2UgdGhlIFtgZmVhdHVyZS1zdGF0ZWAgZXhwcmVzc2lvbl0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3N0eWxlLXNwZWMvZXhwcmVzc2lvbnMvI2ZlYXR1cmUtc3RhdGUpIHRvIGFjY2VzcyB0aGUgdmFsdWVzIGluIGEgZmVhdHVyZSdzIHN0YXRlIG9iamVjdCBmb3IgdGhlIHB1cnBvc2VzIG9mIHN0eWxpbmcuX1xuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGZlYXR1cmUgRmVhdHVyZSBpZGVudGlmaWVyLiBGZWF0dXJlIG9iamVjdHMgcmV0dXJuZWQgZnJvbVxuICAgICAqIHtAbGluayBNYXAjcXVlcnlSZW5kZXJlZEZlYXR1cmVzfSBvciBldmVudCBoYW5kbGVycyBjYW4gYmUgdXNlZCBhcyBmZWF0dXJlIGlkZW50aWZpZXJzLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBmZWF0dXJlLmlkIFVuaXF1ZSBpZCBvZiB0aGUgZmVhdHVyZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZmVhdHVyZS5zb3VyY2UgVGhlIGlkIG9mIHRoZSB2ZWN0b3Igb3IgR2VvSlNPTiBzb3VyY2UgZm9yIHRoZSBmZWF0dXJlLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbZmVhdHVyZS5zb3VyY2VMYXllcl0gKG9wdGlvbmFsKSAqRm9yIHZlY3RvciB0aWxlIHNvdXJjZXMsIGBzb3VyY2VMYXllcmAgaXMgcmVxdWlyZWQuKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZSBBIHNldCBvZiBrZXktdmFsdWUgcGFpcnMuIFRoZSB2YWx1ZXMgc2hvdWxkIGJlIHZhbGlkIEpTT04gdHlwZXMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIFdoZW4gdGhlIG1vdXNlIG1vdmVzIG92ZXIgdGhlIGBteS1sYXllcmAgbGF5ZXIsIHVwZGF0ZVxuICAgICAqIC8vIHRoZSBmZWF0dXJlIHN0YXRlIGZvciB0aGUgZmVhdHVyZSB1bmRlciB0aGUgbW91c2VcbiAgICAgKiBtYXAub24oJ21vdXNlbW92ZScsICdteS1sYXllcicsIGZ1bmN0aW9uKGUpIHtcbiAgICAgKiAgIGlmIChlLmZlYXR1cmVzLmxlbmd0aCA+IDApIHtcbiAgICAgKiAgICAgbWFwLnNldEZlYXR1cmVTdGF0ZSh7XG4gICAgICogICAgICAgc291cmNlOiAnbXktc291cmNlJyxcbiAgICAgKiAgICAgICBzb3VyY2VMYXllcjogJ215LXNvdXJjZS1sYXllcicsXG4gICAgICogICAgICAgaWQ6IGUuZmVhdHVyZXNbMF0uaWQsXG4gICAgICogICAgIH0sIHtcbiAgICAgKiAgICAgICBob3ZlcjogdHJ1ZVxuICAgICAqICAgICB9KTtcbiAgICAgKiAgIH1cbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIEBzZWUgW0NyZWF0ZSBhIGhvdmVyIGVmZmVjdF0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvaG92ZXItc3R5bGVzLylcbiAgICAgKiBAc2VlIFR1dG9yaWFsOiBbQ3JlYXRlIGludGVyYWN0aXZlIGhvdmVyIGVmZmVjdHMgd2l0aCBNYXBib3ggR0wgSlNdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL2hlbHAvdHV0b3JpYWxzL2NyZWF0ZS1pbnRlcmFjdGl2ZS1ob3Zlci1lZmZlY3RzLXdpdGgtbWFwYm94LWdsLWpzLylcbiAgICAgKi9cbiAgICBzZXRGZWF0dXJlU3RhdGUoZmVhdHVyZTogeyBzb3VyY2U6IHN0cmluZzsgc291cmNlTGF5ZXI/OiBzdHJpbmc7IGlkOiBzdHJpbmcgfCBudW1iZXI7IH0sIHN0YXRlOiBPYmplY3QpIHtcbiAgICAgICAgdGhpcy5zdHlsZS5zZXRGZWF0dXJlU3RhdGUoZmVhdHVyZSwgc3RhdGUpO1xuICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlKCk7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGpzZG9jL3JlcXVpcmUtcmV0dXJuc1xuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIGBzdGF0ZWAgb2YgYSBmZWF0dXJlLCBzZXR0aW5nIGl0IGJhY2sgdG8gdGhlIGRlZmF1bHQgYmVoYXZpb3IuXG4gICAgICogSWYgb25seSBhIGB0YXJnZXQuc291cmNlYCBpcyBzcGVjaWZpZWQsIGl0IHdpbGwgcmVtb3ZlIHRoZSBzdGF0ZSBmb3IgYWxsIGZlYXR1cmVzIGZyb20gdGhhdCBzb3VyY2UuXG4gICAgICogSWYgYHRhcmdldC5pZGAgaXMgYWxzbyBzcGVjaWZpZWQsIGl0IHdpbGwgcmVtb3ZlIGFsbCBrZXlzIGZvciB0aGF0IGZlYXR1cmUncyBzdGF0ZS5cbiAgICAgKiBJZiBga2V5YCBpcyBhbHNvIHNwZWNpZmllZCwgaXQgcmVtb3ZlcyBvbmx5IHRoYXQga2V5IGZyb20gdGhhdCBmZWF0dXJlJ3Mgc3RhdGUuXG4gICAgICogRmVhdHVyZXMgYXJlIGlkZW50aWZpZWQgYnkgdGhlaXIgYGZlYXR1cmUuaWRgIGF0dHJpYnV0ZSwgd2hpY2ggY2FuIGJlIGFueSBudW1iZXIgb3Igc3RyaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHRhcmdldCBJZGVudGlmaWVyIG9mIHdoZXJlIHRvIHJlbW92ZSBzdGF0ZS4gSXQgY2FuIGJlIGEgc291cmNlLCBhIGZlYXR1cmUsIG9yIGEgc3BlY2lmaWMga2V5IG9mIGZlYXR1cmUuXG4gICAgICogRmVhdHVyZSBvYmplY3RzIHJldHVybmVkIGZyb20ge0BsaW5rIE1hcCNxdWVyeVJlbmRlcmVkRmVhdHVyZXN9IG9yIGV2ZW50IGhhbmRsZXJzIGNhbiBiZSB1c2VkIGFzIGZlYXR1cmUgaWRlbnRpZmllcnMuXG4gICAgICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXJ9IHRhcmdldC5pZCAob3B0aW9uYWwpIFVuaXF1ZSBpZCBvZiB0aGUgZmVhdHVyZS4gT3B0aW9uYWwgaWYga2V5IGlzIG5vdCBzcGVjaWZpZWQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRhcmdldC5zb3VyY2UgVGhlIGlkIG9mIHRoZSB2ZWN0b3Igb3IgR2VvSlNPTiBzb3VyY2UgZm9yIHRoZSBmZWF0dXJlLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdGFyZ2V0LnNvdXJjZUxheWVyXSAob3B0aW9uYWwpICpGb3IgdmVjdG9yIHRpbGUgc291cmNlcywgYHNvdXJjZUxheWVyYCBpcyByZXF1aXJlZC4qXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAob3B0aW9uYWwpIFRoZSBrZXkgaW4gdGhlIGZlYXR1cmUgc3RhdGUgdG8gcmVzZXQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIFJlc2V0IHRoZSBlbnRpcmUgc3RhdGUgb2JqZWN0IGZvciBhbGwgZmVhdHVyZXNcbiAgICAgKiAvLyBpbiB0aGUgYG15LXNvdXJjZWAgc291cmNlXG4gICAgICogbWFwLnJlbW92ZUZlYXR1cmVTdGF0ZSh7XG4gICAgICogICBzb3VyY2U6ICdteS1zb3VyY2UnXG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIFdoZW4gdGhlIG1vdXNlIGxlYXZlcyB0aGUgYG15LWxheWVyYCBsYXllcixcbiAgICAgKiAvLyByZXNldCB0aGUgZW50aXJlIHN0YXRlIG9iamVjdCBmb3IgdGhlXG4gICAgICogLy8gZmVhdHVyZSB1bmRlciB0aGUgbW91c2VcbiAgICAgKiBtYXAub24oJ21vdXNlbGVhdmUnLCAnbXktbGF5ZXInLCBmdW5jdGlvbihlKSB7XG4gICAgICogICBtYXAucmVtb3ZlRmVhdHVyZVN0YXRlKHtcbiAgICAgKiAgICAgc291cmNlOiAnbXktc291cmNlJyxcbiAgICAgKiAgICAgc291cmNlTGF5ZXI6ICdteS1zb3VyY2UtbGF5ZXInLFxuICAgICAqICAgICBpZDogZS5mZWF0dXJlc1swXS5pZFxuICAgICAqICAgfSk7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIC8vIFdoZW4gdGhlIG1vdXNlIGxlYXZlcyB0aGUgYG15LWxheWVyYCBsYXllcixcbiAgICAgKiAvLyByZXNldCBvbmx5IHRoZSBgaG92ZXJgIGtleS12YWx1ZSBwYWlyIGluIHRoZVxuICAgICAqIC8vIHN0YXRlIGZvciB0aGUgZmVhdHVyZSB1bmRlciB0aGUgbW91c2VcbiAgICAgKiBtYXAub24oJ21vdXNlbGVhdmUnLCAnbXktbGF5ZXInLCBmdW5jdGlvbihlKSB7XG4gICAgICogICBtYXAucmVtb3ZlRmVhdHVyZVN0YXRlKHtcbiAgICAgKiAgICAgc291cmNlOiAnbXktc291cmNlJyxcbiAgICAgKiAgICAgc291cmNlTGF5ZXI6ICdteS1zb3VyY2UtbGF5ZXInLFxuICAgICAqICAgICBpZDogZS5mZWF0dXJlc1swXS5pZFxuICAgICAqICAgfSwgJ2hvdmVyJyk7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAqL1xuICAgIHJlbW92ZUZlYXR1cmVTdGF0ZSh0YXJnZXQ6IHsgc291cmNlOiBzdHJpbmc7IHNvdXJjZUxheWVyPzogc3RyaW5nOyBpZD86IHN0cmluZyB8IG51bWJlcjsgfSwga2V5Pzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc3R5bGUucmVtb3ZlRmVhdHVyZVN0YXRlKHRhcmdldCwga2V5KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGBzdGF0ZWAgb2YgYSBmZWF0dXJlLlxuICAgICAqIEEgZmVhdHVyZSdzIGBzdGF0ZWAgaXMgYSBzZXQgb2YgdXNlci1kZWZpbmVkIGtleS12YWx1ZSBwYWlycyB0aGF0IGFyZSBhc3NpZ25lZCB0byBhIGZlYXR1cmUgYXQgcnVudGltZS5cbiAgICAgKiBGZWF0dXJlcyBhcmUgaWRlbnRpZmllZCBieSB0aGVpciBgZmVhdHVyZS5pZGAgYXR0cmlidXRlLCB3aGljaCBjYW4gYmUgYW55IG51bWJlciBvciBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBfTm90ZTogVG8gYWNjZXNzIHRoZSB2YWx1ZXMgaW4gYSBmZWF0dXJlJ3Mgc3RhdGUgb2JqZWN0IGZvciB0aGUgcHVycG9zZXMgb2Ygc3R5bGluZyB0aGUgZmVhdHVyZSwgdXNlIHRoZSBbYGZlYXR1cmUtc3RhdGVgIGV4cHJlc3Npb25dKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9zdHlsZS1zcGVjL2V4cHJlc3Npb25zLyNmZWF0dXJlLXN0YXRlKS5fXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gZmVhdHVyZSBGZWF0dXJlIGlkZW50aWZpZXIuIEZlYXR1cmUgb2JqZWN0cyByZXR1cm5lZCBmcm9tXG4gICAgICoge0BsaW5rIE1hcCNxdWVyeVJlbmRlcmVkRmVhdHVyZXN9IG9yIGV2ZW50IGhhbmRsZXJzIGNhbiBiZSB1c2VkIGFzIGZlYXR1cmUgaWRlbnRpZmllcnMuXG4gICAgICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXJ9IGZlYXR1cmUuaWQgVW5pcXVlIGlkIG9mIHRoZSBmZWF0dXJlLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBmZWF0dXJlLnNvdXJjZSBUaGUgaWQgb2YgdGhlIHZlY3RvciBvciBHZW9KU09OIHNvdXJjZSBmb3IgdGhlIGZlYXR1cmUuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtmZWF0dXJlLnNvdXJjZUxheWVyXSAob3B0aW9uYWwpICpGb3IgdmVjdG9yIHRpbGUgc291cmNlcywgYHNvdXJjZUxheWVyYCBpcyByZXF1aXJlZC4qXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgc3RhdGUgb2YgdGhlIGZlYXR1cmU6IGEgc2V0IG9mIGtleS12YWx1ZSBwYWlycyB0aGF0IHdhcyBhc3NpZ25lZCB0byB0aGUgZmVhdHVyZSBhdCBydW50aW1lLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBXaGVuIHRoZSBtb3VzZSBtb3ZlcyBvdmVyIHRoZSBgbXktbGF5ZXJgIGxheWVyLFxuICAgICAqIC8vIGdldCB0aGUgZmVhdHVyZSBzdGF0ZSBmb3IgdGhlIGZlYXR1cmUgdW5kZXIgdGhlIG1vdXNlXG4gICAgICogbWFwLm9uKCdtb3VzZW1vdmUnLCAnbXktbGF5ZXInLCBmdW5jdGlvbihlKSB7XG4gICAgICogICBpZiAoZS5mZWF0dXJlcy5sZW5ndGggPiAwKSB7XG4gICAgICogICAgIG1hcC5nZXRGZWF0dXJlU3RhdGUoe1xuICAgICAqICAgICAgIHNvdXJjZTogJ215LXNvdXJjZScsXG4gICAgICogICAgICAgc291cmNlTGF5ZXI6ICdteS1zb3VyY2UtbGF5ZXInXG4gICAgICogICAgICAgaWQ6IGUuZmVhdHVyZXNbMF0uaWRcbiAgICAgKiAgICAgfSk7XG4gICAgICogICB9XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKi9cbiAgICBnZXRGZWF0dXJlU3RhdGUoZmVhdHVyZTogeyBzb3VyY2U6IHN0cmluZzsgc291cmNlTGF5ZXI/OiBzdHJpbmc7IGlkOiBzdHJpbmcgfCBudW1iZXI7IH0pOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZS5nZXRGZWF0dXJlU3RhdGUoZmVhdHVyZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbWFwJ3MgY29udGFpbmluZyBIVE1MIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9IFRoZSBtYXAncyBjb250YWluZXIuXG4gICAgICovXG4gICAgZ2V0Q29udGFpbmVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29udGFpbmVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIEhUTUwgZWxlbWVudCBjb250YWluaW5nIHRoZSBtYXAncyBgPGNhbnZhcz5gIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBJZiB5b3Ugd2FudCB0byBhZGQgbm9uLUdMIG92ZXJsYXlzIHRvIHRoZSBtYXAsIHlvdSBzaG91bGQgYXBwZW5kIHRoZW0gdG8gdGhpcyBlbGVtZW50LlxuICAgICAqXG4gICAgICogVGhpcyBpcyB0aGUgZWxlbWVudCB0byB3aGljaCBldmVudCBiaW5kaW5ncyBmb3IgbWFwIGludGVyYWN0aXZpdHkgKHN1Y2ggYXMgcGFubmluZyBhbmQgem9vbWluZykgYXJlXG4gICAgICogYXR0YWNoZWQuIEl0IHdpbGwgcmVjZWl2ZSBidWJibGVkIGV2ZW50cyBmcm9tIGNoaWxkIGVsZW1lbnRzIHN1Y2ggYXMgdGhlIGA8Y2FudmFzPmAsIGJ1dCBub3QgZnJvbVxuICAgICAqIG1hcCBjb250cm9scy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtIVE1MRWxlbWVudH0gVGhlIGNvbnRhaW5lciBvZiB0aGUgbWFwJ3MgYDxjYW52YXM+YC5cbiAgICAgKiBAc2VlIFtDcmVhdGUgYSBkcmFnZ2FibGUgcG9pbnRdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZHJhZy1hLXBvaW50LylcbiAgICAgKiBAc2VlIFtIaWdobGlnaHQgZmVhdHVyZXMgd2l0aGluIGEgYm91bmRpbmcgYm94XShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3VzaW5nLWJveC1xdWVyeXJlbmRlcmVkZmVhdHVyZXMvKVxuICAgICAqL1xuICAgIGdldENhbnZhc0NvbnRhaW5lcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbnZhc0NvbnRhaW5lcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBtYXAncyBgPGNhbnZhcz5gIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7SFRNTENhbnZhc0VsZW1lbnR9IFRoZSBtYXAncyBgPGNhbnZhcz5gIGVsZW1lbnQuXG4gICAgICogQHNlZSBbTWVhc3VyZSBkaXN0YW5jZXNdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvbWVhc3VyZS8pXG4gICAgICogQHNlZSBbRGlzcGxheSBhIHBvcHVwIG9uIGhvdmVyXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3BvcHVwLW9uLWhvdmVyLylcbiAgICAgKiBAc2VlIFtDZW50ZXIgdGhlIG1hcCBvbiBhIGNsaWNrZWQgc3ltYm9sXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2NlbnRlci1vbi1zeW1ib2wvKVxuICAgICAqL1xuICAgIGdldENhbnZhcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbnZhcztcbiAgICB9XG5cbiAgICBfY29udGFpbmVyRGltZW5zaW9ucygpIHtcbiAgICAgICAgbGV0IHdpZHRoID0gMDtcbiAgICAgICAgbGV0IGhlaWdodCA9IDA7XG5cbiAgICAgICAgaWYgKHRoaXMuX2NvbnRhaW5lcikge1xuICAgICAgICAgICAgd2lkdGggPSB0aGlzLl9jb250YWluZXIuY2xpZW50V2lkdGggfHwgNDAwO1xuICAgICAgICAgICAgaGVpZ2h0ID0gdGhpcy5fY29udGFpbmVyLmNsaWVudEhlaWdodCB8fCAzMDA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW3dpZHRoLCBoZWlnaHRdO1xuICAgIH1cblxuICAgIF9kZXRlY3RNaXNzaW5nQ1NTKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb21wdXRlZENvbG9yID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5fbWlzc2luZ0NTU0NhbmFyeSkuZ2V0UHJvcGVydHlWYWx1ZSgnYmFja2dyb3VuZC1jb2xvcicpO1xuICAgICAgICBpZiAoY29tcHV0ZWRDb2xvciAhPT0gJ3JnYigyNTAsIDEyOCwgMTE0KScpIHtcbiAgICAgICAgICAgIHdhcm5PbmNlKCdUaGlzIHBhZ2UgYXBwZWFycyB0byBiZSBtaXNzaW5nIENTUyBkZWNsYXJhdGlvbnMgZm9yICcgK1xuICAgICAgICAgICAgICAgICdNYXBib3ggR0wgSlMsIHdoaWNoIG1heSBjYXVzZSB0aGUgbWFwIHRvIGRpc3BsYXkgaW5jb3JyZWN0bHkuICcgK1xuICAgICAgICAgICAgICAgICdQbGVhc2UgZW5zdXJlIHlvdXIgcGFnZSBpbmNsdWRlcyBtYXBib3gtZ2wuY3NzLCBhcyBkZXNjcmliZWQgJyArXG4gICAgICAgICAgICAgICAgJ2luIGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2FwaS8uJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfc2V0dXBDb250YWluZXIoKSB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuX2NvbnRhaW5lcjtcbiAgICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLW1hcCcpO1xuXG4gICAgICAgIGNvbnN0IG1pc3NpbmdDU1NDYW5hcnkgPSB0aGlzLl9taXNzaW5nQ1NTQ2FuYXJ5ID0gRE9NLmNyZWF0ZSgnZGl2JywgJ21hcGJveGdsLWNhbmFyeScsIGNvbnRhaW5lcik7XG4gICAgICAgIG1pc3NpbmdDU1NDYW5hcnkuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICB0aGlzLl9kZXRlY3RNaXNzaW5nQ1NTKCk7XG5cbiAgICAgICAgY29uc3QgY2FudmFzQ29udGFpbmVyID0gdGhpcy5fY2FudmFzQ29udGFpbmVyID0gRE9NLmNyZWF0ZSgnZGl2JywgJ21hcGJveGdsLWNhbnZhcy1jb250YWluZXInLCBjb250YWluZXIpO1xuICAgICAgICBpZiAodGhpcy5faW50ZXJhY3RpdmUpIHtcbiAgICAgICAgICAgIGNhbnZhc0NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1pbnRlcmFjdGl2ZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2FudmFzID0gRE9NLmNyZWF0ZSgnY2FudmFzJywgJ21hcGJveGdsLWNhbnZhcycsIGNhbnZhc0NvbnRhaW5lcik7XG4gICAgICAgIHRoaXMuX2NhbnZhcy5hZGRFdmVudExpc3RlbmVyKCd3ZWJnbGNvbnRleHRsb3N0JywgdGhpcy5fY29udGV4dExvc3QsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5fY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmdsY29udGV4dHJlc3RvcmVkJywgdGhpcy5fY29udGV4dFJlc3RvcmVkLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuX2NhbnZhcy5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgICAgdGhpcy5fY2FudmFzLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsICdNYXAnKTtcblxuICAgICAgICBjb25zdCBkaW1lbnNpb25zID0gdGhpcy5fY29udGFpbmVyRGltZW5zaW9ucygpO1xuICAgICAgICB0aGlzLl9yZXNpemVDYW52YXMoZGltZW5zaW9uc1swXSwgZGltZW5zaW9uc1sxXSk7XG5cbiAgICAgICAgY29uc3QgY29udHJvbENvbnRhaW5lciA9IHRoaXMuX2NvbnRyb2xDb250YWluZXIgPSBET00uY3JlYXRlKCdkaXYnLCAnbWFwYm94Z2wtY29udHJvbC1jb250YWluZXInLCBjb250YWluZXIpO1xuICAgICAgICBjb25zdCBwb3NpdGlvbnMgPSB0aGlzLl9jb250cm9sUG9zaXRpb25zID0ge307XG4gICAgICAgIFsndG9wLWxlZnQnLCAndG9wLXJpZ2h0JywgJ2JvdHRvbS1sZWZ0JywgJ2JvdHRvbS1yaWdodCddLmZvckVhY2goKHBvc2l0aW9uTmFtZSkgPT4ge1xuICAgICAgICAgICAgcG9zaXRpb25zW3Bvc2l0aW9uTmFtZV0gPSBET00uY3JlYXRlKCdkaXYnLCBgbWFwYm94Z2wtY3RybC0ke3Bvc2l0aW9uTmFtZX1gLCBjb250cm9sQ29udGFpbmVyKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX3Jlc2l6ZUNhbnZhcyh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgICAgICBjb25zdCBwaXhlbFJhdGlvID0gYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG5cbiAgICAgICAgLy8gUmVxdWVzdCB0aGUgcmVxdWlyZWQgY2FudmFzIHNpemUgdGFraW5nIHRoZSBwaXhlbHJhdGlvIGludG8gYWNjb3VudC5cbiAgICAgICAgdGhpcy5fY2FudmFzLndpZHRoID0gcGl4ZWxSYXRpbyAqIHdpZHRoO1xuICAgICAgICB0aGlzLl9jYW52YXMuaGVpZ2h0ID0gcGl4ZWxSYXRpbyAqIGhlaWdodDtcblxuICAgICAgICAvLyBNYWludGFpbiB0aGUgc2FtZSBjYW52YXMgc2l6ZSwgcG90ZW50aWFsbHkgZG93bnNjYWxpbmcgaXQgZm9yIEhpRFBJIGRpc3BsYXlzXG4gICAgICAgIHRoaXMuX2NhbnZhcy5zdHlsZS53aWR0aCA9IGAke3dpZHRofXB4YDtcbiAgICAgICAgdGhpcy5fY2FudmFzLnN0eWxlLmhlaWdodCA9IGAke2hlaWdodH1weGA7XG4gICAgfVxuXG4gICAgX3NldHVwUGFpbnRlcigpIHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IGV4dGVuZCh7fSwgaXNTdXBwb3J0ZWQud2ViR0xDb250ZXh0QXR0cmlidXRlcywge1xuICAgICAgICAgICAgZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDogdGhpcy5fZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCxcbiAgICAgICAgICAgIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogdGhpcy5fcHJlc2VydmVEcmF3aW5nQnVmZmVyLFxuICAgICAgICAgICAgYW50aWFsaWFzOiB0aGlzLl9hbnRpYWxpYXMgfHwgZmFsc2VcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZ2wgPSB0aGlzLl9jYW52YXMuZ2V0Q29udGV4dCgnd2ViZ2wnLCBhdHRyaWJ1dGVzKSB8fFxuICAgICAgICAgICAgdGhpcy5fY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcsIGF0dHJpYnV0ZXMpO1xuXG4gICAgICAgIGlmICghZ2wpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXJyb3JFdmVudChuZXcgRXJyb3IoJ0ZhaWxlZCB0byBpbml0aWFsaXplIFdlYkdMJykpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGFpbnRlciA9IG5ldyBQYWludGVyKGdsLCB0aGlzLnRyYW5zZm9ybSk7XG5cbiAgICAgICAgd2VicFN1cHBvcnRlZC50ZXN0U3VwcG9ydChnbCk7XG4gICAgfVxuXG4gICAgX2NvbnRleHRMb3N0KGV2ZW50OiAqKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmICh0aGlzLl9mcmFtZSkge1xuICAgICAgICAgICAgdGhpcy5fZnJhbWUuY2FuY2VsKCk7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnd2ViZ2xjb250ZXh0bG9zdCcsIHtvcmlnaW5hbEV2ZW50OiBldmVudH0pKTtcbiAgICB9XG5cbiAgICBfY29udGV4dFJlc3RvcmVkKGV2ZW50OiAqKSB7XG4gICAgICAgIHRoaXMuX3NldHVwUGFpbnRlcigpO1xuICAgICAgICB0aGlzLnJlc2l6ZSgpO1xuICAgICAgICB0aGlzLl91cGRhdGUoKTtcbiAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnd2ViZ2xjb250ZXh0cmVzdG9yZWQnLCB7b3JpZ2luYWxFdmVudDogZXZlbnR9KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBtYXAgaXMgZnVsbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogUmV0dXJucyBgZmFsc2VgIGlmIHRoZSBzdHlsZSBpcyBub3QgeWV0IGZ1bGx5IGxvYWRlZCxcbiAgICAgKiBvciBpZiB0aGVyZSBoYXMgYmVlbiBhIGNoYW5nZSB0byB0aGUgc291cmNlcyBvciBzdHlsZSB0aGF0XG4gICAgICogaGFzIG5vdCB5ZXQgZnVsbHkgbG9hZGVkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IEEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIG1hcCBpcyBmdWxseSBsb2FkZWQuXG4gICAgICovXG4gICAgbG9hZGVkKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuX3N0eWxlRGlydHkgJiYgIXRoaXMuX3NvdXJjZXNEaXJ0eSAmJiAhIXRoaXMuc3R5bGUgJiYgdGhpcy5zdHlsZS5sb2FkZWQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgdGhpcyBtYXAncyBzdHlsZSBhbmQgc291cmNlcywgYW5kIHJlLXJlbmRlciB0aGUgbWFwLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtib29sZWFufSB1cGRhdGVTdHlsZSBtYXJrIHRoZSBtYXAncyBzdHlsZSBmb3IgcmVwcm9jZXNzaW5nIGFzXG4gICAgICogd2VsbCBhcyBpdHMgc291cmNlc1xuICAgICAqIEByZXR1cm5zIHtNYXB9IHRoaXNcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF91cGRhdGUodXBkYXRlU3R5bGU/OiBib29sZWFuKSB7XG4gICAgICAgIGlmICghdGhpcy5zdHlsZSkgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgdGhpcy5fc3R5bGVEaXJ0eSA9IHRoaXMuX3N0eWxlRGlydHkgfHwgdXBkYXRlU3R5bGU7XG4gICAgICAgIHRoaXMuX3NvdXJjZXNEaXJ0eSA9IHRydWU7XG4gICAgICAgIHRoaXMudHJpZ2dlclJlcGFpbnQoKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXF1ZXN0IHRoYXQgdGhlIGdpdmVuIGNhbGxiYWNrIGJlIGV4ZWN1dGVkIGR1cmluZyB0aGUgbmV4dCByZW5kZXJcbiAgICAgKiBmcmFtZS4gIFNjaGVkdWxlIGEgcmVuZGVyIGZyYW1lIGlmIG9uZSBpcyBub3QgYWxyZWFkeSBzY2hlZHVsZWQuXG4gICAgICogQHJldHVybnMgQW4gaWQgdGhhdCBjYW4gYmUgdXNlZCB0byBjYW5jZWwgdGhlIGNhbGxiYWNrXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfcmVxdWVzdFJlbmRlckZyYW1lKGNhbGxiYWNrOiAoKSA9PiB2b2lkKTogVGFza0lEIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJUYXNrUXVldWUuYWRkKGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBfY2FuY2VsUmVuZGVyRnJhbWUoaWQ6IFRhc2tJRCkge1xuICAgICAgICB0aGlzLl9yZW5kZXJUYXNrUXVldWUucmVtb3ZlKGlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxsIHdoZW4gYSAocmUtKXJlbmRlciBvZiB0aGUgbWFwIGlzIHJlcXVpcmVkOlxuICAgICAqIC0gVGhlIHN0eWxlIGhhcyBjaGFuZ2VkIChgc2V0UGFpbnRQcm9wZXJ0eSgpYCwgZXRjLilcbiAgICAgKiAtIFNvdXJjZSBkYXRhIGhhcyBjaGFuZ2VkIChlLmcuIHRpbGVzIGhhdmUgZmluaXNoZWQgbG9hZGluZylcbiAgICAgKiAtIFRoZSBtYXAgaGFzIGlzIG1vdmluZyAob3IganVzdCBmaW5pc2hlZCBtb3ZpbmcpXG4gICAgICogLSBBIHRyYW5zaXRpb24gaXMgaW4gcHJvZ3Jlc3NcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBwYWludFN0YXJ0VGltZVN0YW1wICBUaGUgdGltZSB3aGVuIHRoZSBhbmltYXRpb24gZnJhbWUgYmVnYW4gZXhlY3V0aW5nLlxuICAgICAqXG4gICAgICogQHJldHVybnMge01hcH0gdGhpc1xuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX3JlbmRlcihwYWludFN0YXJ0VGltZVN0YW1wOiBudW1iZXIpIHtcbiAgICAgICAgbGV0IGdwdVRpbWVyLCBmcmFtZVN0YXJ0VGltZSA9IDA7XG4gICAgICAgIGNvbnN0IGV4dFRpbWVyUXVlcnkgPSB0aGlzLnBhaW50ZXIuY29udGV4dC5leHRUaW1lclF1ZXJ5O1xuICAgICAgICBpZiAodGhpcy5saXN0ZW5zKCdncHUtdGltaW5nLWZyYW1lJykpIHtcbiAgICAgICAgICAgIGdwdVRpbWVyID0gZXh0VGltZXJRdWVyeS5jcmVhdGVRdWVyeUVYVCgpO1xuICAgICAgICAgICAgZXh0VGltZXJRdWVyeS5iZWdpblF1ZXJ5RVhUKGV4dFRpbWVyUXVlcnkuVElNRV9FTEFQU0VEX0VYVCwgZ3B1VGltZXIpO1xuICAgICAgICAgICAgZnJhbWVTdGFydFRpbWUgPSBicm93c2VyLm5vdygpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQSBjdXN0b20gbGF5ZXIgbWF5IGhhdmUgdXNlZCB0aGUgY29udGV4dCBhc3luY2hyb25vdXNseS4gTWFyayB0aGUgc3RhdGUgYXMgZGlydHkuXG4gICAgICAgIHRoaXMucGFpbnRlci5jb250ZXh0LnNldERpcnR5KCk7XG4gICAgICAgIHRoaXMucGFpbnRlci5zZXRCYXNlU3RhdGUoKTtcblxuICAgICAgICB0aGlzLl9yZW5kZXJUYXNrUXVldWUucnVuKHBhaW50U3RhcnRUaW1lU3RhbXApO1xuICAgICAgICAvLyBBIHRhc2sgcXVldWUgY2FsbGJhY2sgbWF5IGhhdmUgZmlyZWQgYSB1c2VyIGV2ZW50IHdoaWNoIG1heSBoYXZlIHJlbW92ZWQgdGhlIG1hcFxuICAgICAgICBpZiAodGhpcy5fcmVtb3ZlZCkgcmV0dXJuO1xuXG4gICAgICAgIGxldCBjcm9zc0ZhZGluZyA9IGZhbHNlO1xuXG4gICAgICAgIC8vIElmIHRoZSBzdHlsZSBoYXMgY2hhbmdlZCwgdGhlIG1hcCBpcyBiZWluZyB6b29tZWQsIG9yIGEgdHJhbnNpdGlvbiBvciBmYWRlIGlzIGluIHByb2dyZXNzOlxuICAgICAgICAvLyAgLSBBcHBseSBzdHlsZSBjaGFuZ2VzIChpbiBhIGJhdGNoKVxuICAgICAgICAvLyAgLSBSZWNhbGN1bGF0ZSBwYWludCBwcm9wZXJ0aWVzLlxuICAgICAgICBpZiAodGhpcy5zdHlsZSAmJiB0aGlzLl9zdHlsZURpcnR5KSB7XG4gICAgICAgICAgICB0aGlzLl9zdHlsZURpcnR5ID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGNvbnN0IHpvb20gPSB0aGlzLnRyYW5zZm9ybS56b29tO1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gYnJvd3Nlci5ub3coKTtcbiAgICAgICAgICAgIHRoaXMuc3R5bGUuem9vbUhpc3RvcnkudXBkYXRlKHpvb20sIG5vdyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBuZXcgRXZhbHVhdGlvblBhcmFtZXRlcnMoem9vbSwge1xuICAgICAgICAgICAgICAgIG5vdyxcbiAgICAgICAgICAgICAgICBmYWRlRHVyYXRpb246IHRoaXMuX2ZhZGVEdXJhdGlvbixcbiAgICAgICAgICAgICAgICB6b29tSGlzdG9yeTogdGhpcy5zdHlsZS56b29tSGlzdG9yeSxcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiB0aGlzLnN0eWxlLmdldFRyYW5zaXRpb24oKVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGZhY3RvciA9IHBhcmFtZXRlcnMuY3Jvc3NGYWRpbmdGYWN0b3IoKTtcbiAgICAgICAgICAgIGlmIChmYWN0b3IgIT09IDEgfHwgZmFjdG9yICE9PSB0aGlzLl9jcm9zc0ZhZGluZ0ZhY3Rvcikge1xuICAgICAgICAgICAgICAgIGNyb3NzRmFkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jcm9zc0ZhZGluZ0ZhY3RvciA9IGZhY3RvcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdHlsZS51cGRhdGUocGFyYW1ldGVycyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB3ZSBhcmUgaW4gX3JlbmRlciBmb3IgYW55IHJlYXNvbiBvdGhlciB0aGFuIGFuIGluLXByb2dyZXNzIHBhaW50XG4gICAgICAgIC8vIHRyYW5zaXRpb24sIHVwZGF0ZSBzb3VyY2UgY2FjaGVzIHRvIGNoZWNrIGZvciBhbmQgbG9hZCBhbnkgdGlsZXMgd2VcbiAgICAgICAgLy8gbmVlZCBmb3IgdGhlIGN1cnJlbnQgdHJhbnNmb3JtXG4gICAgICAgIGlmICh0aGlzLnN0eWxlICYmIHRoaXMuX3NvdXJjZXNEaXJ0eSkge1xuICAgICAgICAgICAgdGhpcy5fc291cmNlc0RpcnR5ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnN0eWxlLl91cGRhdGVTb3VyY2VzKHRoaXMudHJhbnNmb3JtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3BsYWNlbWVudERpcnR5ID0gdGhpcy5zdHlsZSAmJiB0aGlzLnN0eWxlLl91cGRhdGVQbGFjZW1lbnQodGhpcy5wYWludGVyLnRyYW5zZm9ybSwgdGhpcy5zaG93Q29sbGlzaW9uQm94ZXMsIHRoaXMuX2ZhZGVEdXJhdGlvbiwgdGhpcy5fY3Jvc3NTb3VyY2VDb2xsaXNpb25zKTtcblxuICAgICAgICAvLyBBY3R1YWxseSBkcmF3XG4gICAgICAgIHRoaXMucGFpbnRlci5yZW5kZXIodGhpcy5zdHlsZSwge1xuICAgICAgICAgICAgc2hvd1RpbGVCb3VuZGFyaWVzOiB0aGlzLnNob3dUaWxlQm91bmRhcmllcyxcbiAgICAgICAgICAgIHNob3dPdmVyZHJhd0luc3BlY3RvcjogdGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yLFxuICAgICAgICAgICAgcm90YXRpbmc6IHRoaXMuaXNSb3RhdGluZygpLFxuICAgICAgICAgICAgem9vbWluZzogdGhpcy5pc1pvb21pbmcoKSxcbiAgICAgICAgICAgIG1vdmluZzogdGhpcy5pc01vdmluZygpLFxuICAgICAgICAgICAgZmFkZUR1cmF0aW9uOiB0aGlzLl9mYWRlRHVyYXRpb24sXG4gICAgICAgICAgICBzaG93UGFkZGluZzogdGhpcy5zaG93UGFkZGluZyxcbiAgICAgICAgICAgIGdwdVRpbWluZzogISF0aGlzLmxpc3RlbnMoJ2dwdS10aW1pbmctbGF5ZXInKSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgncmVuZGVyJykpO1xuXG4gICAgICAgIGlmICh0aGlzLmxvYWRlZCgpICYmICF0aGlzLl9sb2FkZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICBQZXJmb3JtYW5jZVV0aWxzLm1hcmsoUGVyZm9ybWFuY2VNYXJrZXJzLmxvYWQpO1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnbG9hZCcpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnN0eWxlICYmICh0aGlzLnN0eWxlLmhhc1RyYW5zaXRpb25zKCkgfHwgY3Jvc3NGYWRpbmcpKSB7XG4gICAgICAgICAgICB0aGlzLl9zdHlsZURpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnN0eWxlICYmICF0aGlzLl9wbGFjZW1lbnREaXJ0eSkge1xuICAgICAgICAgICAgLy8gU2luY2Ugbm8gZmFkZSBvcGVyYXRpb25zIGFyZSBpbiBwcm9ncmVzcywgd2UgY2FuIHJlbGVhc2VcbiAgICAgICAgICAgIC8vIGFsbCB0aWxlcyBoZWxkIGZvciBmYWRpbmcuIElmIHdlIGRpZG4ndCBkbyB0aGlzLCB0aGUgdGlsZXNcbiAgICAgICAgICAgIC8vIHdvdWxkIGp1c3Qgc2l0IGluIHRoZSBTb3VyY2VDYWNoZXMgdW50aWwgdGhlIG5leHQgcmVuZGVyXG4gICAgICAgICAgICB0aGlzLnN0eWxlLl9yZWxlYXNlU3ltYm9sRmFkZVRpbGVzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5saXN0ZW5zKCdncHUtdGltaW5nLWZyYW1lJykpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlckNQVVRpbWUgPSBicm93c2VyLm5vdygpIC0gZnJhbWVTdGFydFRpbWU7XG4gICAgICAgICAgICBleHRUaW1lclF1ZXJ5LmVuZFF1ZXJ5RVhUKGV4dFRpbWVyUXVlcnkuVElNRV9FTEFQU0VEX0VYVCwgZ3B1VGltZXIpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVuZGVyR1BVVGltZSA9IGV4dFRpbWVyUXVlcnkuZ2V0UXVlcnlPYmplY3RFWFQoZ3B1VGltZXIsIGV4dFRpbWVyUXVlcnkuUVVFUllfUkVTVUxUX0VYVCkgLyAoMTAwMCAqIDEwMDApO1xuICAgICAgICAgICAgICAgIGV4dFRpbWVyUXVlcnkuZGVsZXRlUXVlcnlFWFQoZ3B1VGltZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2dwdS10aW1pbmctZnJhbWUnLCB7XG4gICAgICAgICAgICAgICAgICAgIGNwdVRpbWU6IHJlbmRlckNQVVRpbWUsXG4gICAgICAgICAgICAgICAgICAgIGdwdVRpbWU6IHJlbmRlckdQVVRpbWVcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9LCA1MCk7IC8vIFdhaXQgNTBtcyB0byBnaXZlIHRpbWUgZm9yIGFsbCBHUFUgY2FsbHMgdG8gZmluaXNoIGJlZm9yZSBxdWVyeWluZ1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubGlzdGVucygnZ3B1LXRpbWluZy1sYXllcicpKSB7XG4gICAgICAgICAgICAvLyBSZXNldHRpbmcgdGhlIFBhaW50ZXIncyBwZXItbGF5ZXIgdGltaW5nIHF1ZXJpZXMgaGVyZSBhbGxvd3MgdXMgdG8gaXNvbGF0ZVxuICAgICAgICAgICAgLy8gdGhlIHF1ZXJpZXMgdG8gaW5kaXZpZHVhbCBmcmFtZXMuXG4gICAgICAgICAgICBjb25zdCBmcmFtZUxheWVyUXVlcmllcyA9IHRoaXMucGFpbnRlci5jb2xsZWN0R3B1VGltZXJzKCk7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlbmRlcmVkTGF5ZXJUaW1lcyA9IHRoaXMucGFpbnRlci5xdWVyeUdwdVRpbWVycyhmcmFtZUxheWVyUXVlcmllcyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdncHUtdGltaW5nLWxheWVyJywge1xuICAgICAgICAgICAgICAgICAgICBsYXllclRpbWVzOiByZW5kZXJlZExheWVyVGltZXNcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9LCA1MCk7IC8vIFdhaXQgNTBtcyB0byBnaXZlIHRpbWUgZm9yIGFsbCBHUFUgY2FsbHMgdG8gZmluaXNoIGJlZm9yZSBxdWVyeWluZ1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2NoZWR1bGUgYW5vdGhlciByZW5kZXIgZnJhbWUgaWYgaXQncyBuZWVkZWQuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEV2ZW4gdGhvdWdoIGBfc3R5bGVEaXJ0eWAgYW5kIGBfc291cmNlc0RpcnR5YCBhcmUgcmVzZXQgaW4gdGhpc1xuICAgICAgICAvLyBtZXRob2QsIHN5bmNocm9ub3VzIGV2ZW50cyBmaXJlZCBkdXJpbmcgU3R5bGUjdXBkYXRlIG9yXG4gICAgICAgIC8vIFN0eWxlI191cGRhdGVTb3VyY2VzIGNvdWxkIGhhdmUgY2F1c2VkIHRoZW0gdG8gYmUgc2V0IGFnYWluLlxuICAgICAgICBjb25zdCBzb21ldGhpbmdEaXJ0eSA9IHRoaXMuX3NvdXJjZXNEaXJ0eSB8fCB0aGlzLl9zdHlsZURpcnR5IHx8IHRoaXMuX3BsYWNlbWVudERpcnR5O1xuICAgICAgICBpZiAoc29tZXRoaW5nRGlydHkgfHwgdGhpcy5fcmVwYWludCkge1xuICAgICAgICAgICAgdGhpcy50cmlnZ2VyUmVwYWludCgpO1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmlzTW92aW5nKCkgJiYgdGhpcy5sb2FkZWQoKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9mdWxseUxvYWRlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Z1bGx5TG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBQZXJmb3JtYW5jZVV0aWxzLm1hcmsoUGVyZm9ybWFuY2VNYXJrZXJzLmZ1bGxMb2FkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2lkbGUnKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhbiB1cCBhbmQgcmVsZWFzZSBhbGwgaW50ZXJuYWwgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1hcC5cbiAgICAgKlxuICAgICAqIFRoaXMgaW5jbHVkZXMgRE9NIGVsZW1lbnRzLCBldmVudCBiaW5kaW5ncywgd2ViIHdvcmtlcnMsIGFuZCBXZWJHTCByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBVc2UgdGhpcyBtZXRob2Qgd2hlbiB5b3UgYXJlIGRvbmUgdXNpbmcgdGhlIG1hcCBhbmQgd2lzaCB0byBlbnN1cmUgdGhhdCBpdCBub1xuICAgICAqIGxvbmdlciBjb25zdW1lcyBicm93c2VyIHJlc291cmNlcy4gQWZ0ZXJ3YXJkcywgeW91IG11c3Qgbm90IGNhbGwgYW55IG90aGVyXG4gICAgICogbWV0aG9kcyBvbiB0aGUgbWFwLlxuICAgICAqL1xuICAgIHJlbW92ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2hhc2gpIHRoaXMuX2hhc2gucmVtb3ZlKCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBjb250cm9sIG9mIHRoaXMuX2NvbnRyb2xzKSBjb250cm9sLm9uUmVtb3ZlKHRoaXMpO1xuICAgICAgICB0aGlzLl9jb250cm9scyA9IFtdO1xuXG4gICAgICAgIGlmICh0aGlzLl9mcmFtZSkge1xuICAgICAgICAgICAgdGhpcy5fZnJhbWUuY2FuY2VsKCk7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcmVuZGVyVGFza1F1ZXVlLmNsZWFyKCk7XG4gICAgICAgIHRoaXMucGFpbnRlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuaGFuZGxlcnMuZGVzdHJveSgpO1xuICAgICAgICBkZWxldGUgdGhpcy5oYW5kbGVycztcbiAgICAgICAgdGhpcy5zZXRTdHlsZShudWxsKTtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fb25XaW5kb3dSZXNpemUsIGZhbHNlKTtcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdvbmxpbmUnLCB0aGlzLl9vbldpbmRvd09ubGluZSwgZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXh0ZW5zaW9uID0gdGhpcy5wYWludGVyLmNvbnRleHQuZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJHTF9sb3NlX2NvbnRleHQnKTtcbiAgICAgICAgaWYgKGV4dGVuc2lvbikgZXh0ZW5zaW9uLmxvc2VDb250ZXh0KCk7XG4gICAgICAgIHJlbW92ZU5vZGUodGhpcy5fY2FudmFzQ29udGFpbmVyKTtcbiAgICAgICAgcmVtb3ZlTm9kZSh0aGlzLl9jb250cm9sQ29udGFpbmVyKTtcbiAgICAgICAgcmVtb3ZlTm9kZSh0aGlzLl9taXNzaW5nQ1NTQ2FuYXJ5KTtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLW1hcCcpO1xuXG4gICAgICAgIFBlcmZvcm1hbmNlVXRpbHMuY2xlYXJNZXRyaWNzKCk7XG5cbiAgICAgICAgdGhpcy5fcmVtb3ZlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3JlbW92ZScpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIHRoZSByZW5kZXJpbmcgb2YgYSBzaW5nbGUgZnJhbWUuIFVzZSB0aGlzIG1ldGhvZCB3aXRoIGN1c3RvbSBsYXllcnMgdG9cbiAgICAgKiByZXBhaW50IHRoZSBtYXAgd2hlbiB0aGUgbGF5ZXIgY2hhbmdlcy4gQ2FsbGluZyB0aGlzIG11bHRpcGxlIHRpbWVzIGJlZm9yZSB0aGVcbiAgICAgKiBuZXh0IGZyYW1lIGlzIHJlbmRlcmVkIHdpbGwgc3RpbGwgcmVzdWx0IGluIG9ubHkgYSBzaW5nbGUgZnJhbWUgYmVpbmcgcmVuZGVyZWQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXAudHJpZ2dlclJlcGFpbnQoKTtcbiAgICAgKiBAc2VlIFtBZGQgYSAzRCBtb2RlbF0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvYWRkLTNkLW1vZGVsLylcbiAgICAgKiBAc2VlIFtBZGQgYW4gYW5pbWF0ZWQgaWNvbiB0byB0aGUgbWFwXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9hZGQtaW1hZ2UtYW5pbWF0ZWQvKVxuICAgICAqL1xuICAgIHRyaWdnZXJSZXBhaW50KCkge1xuICAgICAgICBpZiAodGhpcy5zdHlsZSAmJiAhdGhpcy5fZnJhbWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lID0gYnJvd3Nlci5mcmFtZSgocGFpbnRTdGFydFRpbWVTdGFtcDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgUGVyZm9ybWFuY2VVdGlscy5mcmFtZShwYWludFN0YXJ0VGltZVN0YW1wKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mcmFtZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyKHBhaW50U3RhcnRUaW1lU3RhbXApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfb25XaW5kb3dPbmxpbmUoKSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuICAgIH1cblxuICAgIF9vbldpbmRvd1Jlc2l6ZShldmVudDogRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuX3RyYWNrUmVzaXplKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZSh7b3JpZ2luYWxFdmVudDogZXZlbnR9KS5fdXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGFuZCBzZXRzIGEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIG1hcCB3aWxsIHJlbmRlciBhbiBvdXRsaW5lXG4gICAgICogYXJvdW5kIGVhY2ggdGlsZSBhbmQgdGhlIHRpbGUgSUQuIFRoZXNlIHRpbGUgYm91bmRhcmllcyBhcmUgdXNlZnVsIGZvclxuICAgICAqIGRlYnVnZ2luZy5cbiAgICAgKlxuICAgICAqIFRoZSB1bmNvbXByZXNzZWQgZmlsZSBzaXplIG9mIHRoZSBmaXJzdCB2ZWN0b3Igc291cmNlIGlzIGRyYXduIGluIHRoZSB0b3AgbGVmdFxuICAgICAqIGNvcm5lciBvZiBlYWNoIHRpbGUsIG5leHQgdG8gdGhlIHRpbGUgSUQuXG4gICAgICpcbiAgICAgKiBAbmFtZSBzaG93VGlsZUJvdW5kYXJpZXNcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXAuc2hvd1RpbGVCb3VuZGFyaWVzID0gdHJ1ZTtcbiAgICAgKi9cbiAgICBnZXQgc2hvd1RpbGVCb3VuZGFyaWVzKCk6IGJvb2xlYW4geyByZXR1cm4gISF0aGlzLl9zaG93VGlsZUJvdW5kYXJpZXM7IH1cbiAgICBzZXQgc2hvd1RpbGVCb3VuZGFyaWVzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh0aGlzLl9zaG93VGlsZUJvdW5kYXJpZXMgPT09IHZhbHVlKSByZXR1cm47XG4gICAgICAgIHRoaXMuX3Nob3dUaWxlQm91bmRhcmllcyA9IHZhbHVlO1xuICAgICAgICB0aGlzLl91cGRhdGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGFuZCBzZXRzIGEgQm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIG1hcCB3aWxsIHZpc3VhbGl6ZVxuICAgICAqIHRoZSBwYWRkaW5nIG9mZnNldHMuXG4gICAgICpcbiAgICAgKiBAbmFtZSBzaG93UGFkZGluZ1xuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKi9cbiAgICBnZXQgc2hvd1BhZGRpbmcoKTogYm9vbGVhbiB7IHJldHVybiAhIXRoaXMuX3Nob3dQYWRkaW5nOyB9XG4gICAgc2V0IHNob3dQYWRkaW5nKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh0aGlzLl9zaG93UGFkZGluZyA9PT0gdmFsdWUpIHJldHVybjtcbiAgICAgICAgdGhpcy5fc2hvd1BhZGRpbmcgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbmQgc2V0cyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBtYXAgd2lsbCByZW5kZXIgYm94ZXNcbiAgICAgKiBhcm91bmQgYWxsIHN5bWJvbHMgaW4gdGhlIGRhdGEgc291cmNlLCByZXZlYWxpbmcgd2hpY2ggc3ltYm9sc1xuICAgICAqIHdlcmUgcmVuZGVyZWQgb3Igd2hpY2ggd2VyZSBoaWRkZW4gZHVlIHRvIGNvbGxpc2lvbnMuXG4gICAgICogVGhpcyBpbmZvcm1hdGlvbiBpcyB1c2VmdWwgZm9yIGRlYnVnZ2luZy5cbiAgICAgKlxuICAgICAqIEBuYW1lIHNob3dDb2xsaXNpb25Cb3hlc1xuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKi9cbiAgICBnZXQgc2hvd0NvbGxpc2lvbkJveGVzKCk6IGJvb2xlYW4geyByZXR1cm4gISF0aGlzLl9zaG93Q29sbGlzaW9uQm94ZXM7IH1cbiAgICBzZXQgc2hvd0NvbGxpc2lvbkJveGVzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh0aGlzLl9zaG93Q29sbGlzaW9uQm94ZXMgPT09IHZhbHVlKSByZXR1cm47XG4gICAgICAgIHRoaXMuX3Nob3dDb2xsaXNpb25Cb3hlcyA9IHZhbHVlO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgdHVybiBjb2xsaXNpb24gYm94ZXMgb24gd2UgaGF2ZSB0byBnZW5lcmF0ZSB0aGVtIGZvciBleGlzdGluZyB0aWxlc1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSB0dXJuIHRoZW0gb2ZmLCB0aGVyZSdzIG5vIGNvc3QgdG8gbGVhdmluZyBleGlzdGluZyBib3hlcyBpbiBwbGFjZVxuICAgICAgICAgICAgdGhpcy5zdHlsZS5fZ2VuZXJhdGVDb2xsaXNpb25Cb3hlcygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBjYWxsIGFuIHVwZGF0ZSB0byByZW1vdmUgY29sbGlzaW9uIGJveGVzXG4gICAgICAgICAgICB0aGlzLl91cGRhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qXG4gICAgICogR2V0cyBhbmQgc2V0cyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBtYXAgc2hvdWxkIGNvbG9yLWNvZGVcbiAgICAgKiBlYWNoIGZyYWdtZW50IHRvIHNob3cgaG93IG1hbnkgdGltZXMgaXQgaGFzIGJlZW4gc2hhZGVkLlxuICAgICAqIFdoaXRlIGZyYWdtZW50cyBoYXZlIGJlZW4gc2hhZGVkIDggb3IgbW9yZSB0aW1lcy5cbiAgICAgKiBCbGFjayBmcmFnbWVudHMgaGF2ZSBiZWVuIHNoYWRlZCAwIHRpbWVzLlxuICAgICAqIFRoaXMgaW5mb3JtYXRpb24gaXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuXG4gICAgICpcbiAgICAgKiBAbmFtZSBzaG93T3ZlcmRyYXdcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAaW5zdGFuY2VcbiAgICAgKiBAbWVtYmVyb2YgTWFwXG4gICAgICovXG4gICAgZ2V0IHNob3dPdmVyZHJhd0luc3BlY3RvcigpOiBib29sZWFuIHsgcmV0dXJuICEhdGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yOyB9XG4gICAgc2V0IHNob3dPdmVyZHJhd0luc3BlY3Rvcih2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yID09PSB2YWx1ZSkgcmV0dXJuO1xuICAgICAgICB0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3IgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbmQgc2V0cyBhIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBtYXAgd2lsbFxuICAgICAqIGNvbnRpbnVvdXNseSByZXBhaW50LiBUaGlzIGluZm9ybWF0aW9uIGlzIHVzZWZ1bCBmb3IgYW5hbHl6aW5nIHBlcmZvcm1hbmNlLlxuICAgICAqXG4gICAgICogQG5hbWUgcmVwYWludFxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBpbnN0YW5jZVxuICAgICAqIEBtZW1iZXJvZiBNYXBcbiAgICAgKi9cbiAgICBnZXQgcmVwYWludCgpOiBib29sZWFuIHsgcmV0dXJuICEhdGhpcy5fcmVwYWludDsgfVxuICAgIHNldCByZXBhaW50KHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh0aGlzLl9yZXBhaW50ICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fcmVwYWludCA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy50cmlnZ2VyUmVwYWludCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHNob3cgdmVydGljZXNcbiAgICBnZXQgdmVydGljZXMoKTogYm9vbGVhbiB7IHJldHVybiAhIXRoaXMuX3ZlcnRpY2VzOyB9XG4gICAgc2V0IHZlcnRpY2VzKHZhbHVlOiBib29sZWFuKSB7IHRoaXMuX3ZlcnRpY2VzID0gdmFsdWU7IHRoaXMuX3VwZGF0ZSgpOyB9XG5cbiAgICAvLyBmb3IgY2FjaGUgYnJvd3NlciB0ZXN0c1xuICAgIF9zZXRDYWNoZUxpbWl0cyhsaW1pdDogbnVtYmVyLCBjaGVja1RocmVzaG9sZDogbnVtYmVyKSB7XG4gICAgICAgIHNldENhY2hlTGltaXRzKGxpbWl0LCBjaGVja1RocmVzaG9sZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHZlcnNpb24gb2YgTWFwYm94IEdMIEpTIGluIHVzZSBhcyBzcGVjaWZpZWQgaW4gcGFja2FnZS5qc29uLCBDSEFOR0VMT0cubWQsIGFuZCB0aGUgR2l0SHViIHJlbGVhc2UuXG4gICAgICpcbiAgICAgKiBAbmFtZSB2ZXJzaW9uXG4gICAgICogQGluc3RhbmNlXG4gICAgICogQG1lbWJlcm9mIE1hcFxuICAgICAqIEB2YXIge3N0cmluZ30gdmVyc2lvblxuICAgICAqL1xuXG4gICAgZ2V0IHZlcnNpb24oKTogc3RyaW5nIHsgcmV0dXJuIHZlcnNpb247IH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTWFwO1xuXG5mdW5jdGlvbiByZW1vdmVOb2RlKG5vZGUpIHtcbiAgICBpZiAobm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgIG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlKTtcbiAgICB9XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBpbnRlcmFjdGl2ZSBjb250cm9scyBhZGRlZCB0byB0aGUgbWFwLiBUaGlzIGlzIGFcbiAqIHNwZWNpZmljYXRpb24gZm9yIGltcGxlbWVudGVycyB0byBtb2RlbDogaXQgaXMgbm90XG4gKiBhbiBleHBvcnRlZCBtZXRob2Qgb3IgY2xhc3MuXG4gKlxuICogQ29udHJvbHMgbXVzdCBpbXBsZW1lbnQgYG9uQWRkYCBhbmQgYG9uUmVtb3ZlYCwgYW5kIG11c3Qgb3duIGFuXG4gKiBlbGVtZW50LCB3aGljaCBpcyBvZnRlbiBhIGBkaXZgIGVsZW1lbnQuIFRvIHVzZSBNYXBib3ggR0wgSlMnc1xuICogZGVmYXVsdCBjb250cm9sIHN0eWxpbmcsIGFkZCB0aGUgYG1hcGJveGdsLWN0cmxgIGNsYXNzIHRvIHlvdXIgY29udHJvbCdzXG4gKiBub2RlLlxuICpcbiAqIEBpbnRlcmZhY2UgSUNvbnRyb2xcbiAqIEBleGFtcGxlXG4gKiAvLyBDb250cm9sIGltcGxlbWVudGVkIGFzIEVTNiBjbGFzc1xuICogY2xhc3MgSGVsbG9Xb3JsZENvbnRyb2wge1xuICogICAgIG9uQWRkKG1hcCkge1xuICogICAgICAgICB0aGlzLl9tYXAgPSBtYXA7XG4gKiAgICAgICAgIHRoaXMuX2NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICogICAgICAgICB0aGlzLl9jb250YWluZXIuY2xhc3NOYW1lID0gJ21hcGJveGdsLWN0cmwnO1xuICogICAgICAgICB0aGlzLl9jb250YWluZXIudGV4dENvbnRlbnQgPSAnSGVsbG8sIHdvcmxkJztcbiAqICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lcjtcbiAqICAgICB9XG4gKlxuICogICAgIG9uUmVtb3ZlKCkge1xuICogICAgICAgICB0aGlzLl9jb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9jb250YWluZXIpO1xuICogICAgICAgICB0aGlzLl9tYXAgPSB1bmRlZmluZWQ7XG4gKiAgICAgfVxuICogfVxuICpcbiAqIC8vIENvbnRyb2wgaW1wbGVtZW50ZWQgYXMgRVM1IHByb3RvdHlwaWNhbCBjbGFzc1xuICogZnVuY3Rpb24gSGVsbG9Xb3JsZENvbnRyb2woKSB7IH1cbiAqXG4gKiBIZWxsb1dvcmxkQ29udHJvbC5wcm90b3R5cGUub25BZGQgPSBmdW5jdGlvbihtYXApIHtcbiAqICAgICB0aGlzLl9tYXAgPSBtYXA7XG4gKiAgICAgdGhpcy5fY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gKiAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTmFtZSA9ICdtYXBib3hnbC1jdHJsJztcbiAqICAgICB0aGlzLl9jb250YWluZXIudGV4dENvbnRlbnQgPSAnSGVsbG8sIHdvcmxkJztcbiAqICAgICByZXR1cm4gdGhpcy5fY29udGFpbmVyO1xuICogfTtcbiAqXG4gKiBIZWxsb1dvcmxkQ29udHJvbC5wcm90b3R5cGUub25SZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG4gKiAgICAgIHRoaXMuX2NvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2NvbnRhaW5lcik7XG4gKiAgICAgIHRoaXMuX21hcCA9IHVuZGVmaW5lZDtcbiAqIH07XG4gKi9cblxuLyoqXG4gKiBSZWdpc3RlciBhIGNvbnRyb2wgb24gdGhlIG1hcCBhbmQgZ2l2ZSBpdCBhIGNoYW5jZSB0byByZWdpc3RlciBldmVudCBsaXN0ZW5lcnNcbiAqIGFuZCByZXNvdXJjZXMuIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB7QGxpbmsgTWFwI2FkZENvbnRyb2x9XG4gKiBpbnRlcm5hbGx5LlxuICpcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIElDb250cm9sXG4gKiBAaW5zdGFuY2VcbiAqIEBuYW1lIG9uQWRkXG4gKiBAcGFyYW0ge01hcH0gbWFwIHRoZSBNYXAgdGhpcyBjb250cm9sIHdpbGwgYmUgYWRkZWQgdG9cbiAqIEByZXR1cm5zIHtIVE1MRWxlbWVudH0gVGhlIGNvbnRyb2wncyBjb250YWluZXIgZWxlbWVudC4gVGhpcyBzaG91bGRcbiAqIGJlIGNyZWF0ZWQgYnkgdGhlIGNvbnRyb2wgYW5kIHJldHVybmVkIGJ5IG9uQWRkIHdpdGhvdXQgYmVpbmcgYXR0YWNoZWRcbiAqIHRvIHRoZSBET006IHRoZSBtYXAgd2lsbCBpbnNlcnQgdGhlIGNvbnRyb2wncyBlbGVtZW50IGludG8gdGhlIERPTVxuICogYXMgbmVjZXNzYXJ5LlxuICovXG5cbi8qKlxuICogVW5yZWdpc3RlciBhIGNvbnRyb2wgb24gdGhlIG1hcCBhbmQgZ2l2ZSBpdCBhIGNoYW5jZSB0byBkZXRhY2ggZXZlbnQgbGlzdGVuZXJzXG4gKiBhbmQgcmVzb3VyY2VzLiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkge0BsaW5rIE1hcCNyZW1vdmVDb250cm9sfVxuICogaW50ZXJuYWxseS5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBJQ29udHJvbFxuICogQGluc3RhbmNlXG4gKiBAbmFtZSBvblJlbW92ZVxuICogQHBhcmFtIHtNYXB9IG1hcCB0aGUgTWFwIHRoaXMgY29udHJvbCB3aWxsIGJlIHJlbW92ZWQgZnJvbVxuICogQHJldHVybnMge3VuZGVmaW5lZH0gdGhlcmUgaXMgbm8gcmVxdWlyZWQgcmV0dXJuIHZhbHVlIGZvciB0aGlzIG1ldGhvZFxuICovXG5cbi8qKlxuICogT3B0aW9uYWxseSBwcm92aWRlIGEgZGVmYXVsdCBwb3NpdGlvbiBmb3IgdGhpcyBjb250cm9sLiBJZiB0aGlzIG1ldGhvZFxuICogaXMgaW1wbGVtZW50ZWQgYW5kIHtAbGluayBNYXAjYWRkQ29udHJvbH0gaXMgY2FsbGVkIHdpdGhvdXQgdGhlIGBwb3NpdGlvbmBcbiAqIHBhcmFtZXRlciwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGdldERlZmF1bHRQb3NpdGlvbiB3aWxsIGJlIHVzZWQgYXMgdGhlXG4gKiBjb250cm9sJ3MgcG9zaXRpb24uXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgSUNvbnRyb2xcbiAqIEBpbnN0YW5jZVxuICogQG5hbWUgZ2V0RGVmYXVsdFBvc2l0aW9uXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBhIGNvbnRyb2wgcG9zaXRpb24sIG9uZSBvZiB0aGUgdmFsdWVzIHZhbGlkIGluIGFkZENvbnRyb2wuXG4gKi9cblxuLyoqXG4gKiBBIFtgUG9pbnRgIGdlb21ldHJ5XShodHRwczovL2dpdGh1Yi5jb20vbWFwYm94L3BvaW50LWdlb21ldHJ5KSBvYmplY3QsIHdoaWNoIGhhc1xuICogYHhgIGFuZCBgeWAgcHJvcGVydGllcyByZXByZXNlbnRpbmcgc2NyZWVuIGNvb3JkaW5hdGVzIGluIHBpeGVscy5cbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBQb2ludFxuICogQGV4YW1wbGVcbiAqIHZhciBwb2ludCA9IG5ldyBtYXBib3hnbC5Qb2ludCgtNzcsIDM4KTtcbiAqL1xuXG4vKipcbiAqIEEge0BsaW5rIFBvaW50fSBvciBhbiBhcnJheSBvZiB0d28gbnVtYmVycyByZXByZXNlbnRpbmcgYHhgIGFuZCBgeWAgc2NyZWVuIGNvb3JkaW5hdGVzIGluIHBpeGVscy5cbiAqXG4gKiBAdHlwZWRlZiB7KFBvaW50IHwgQXJyYXk8bnVtYmVyPil9IFBvaW50TGlrZVxuICogQGV4YW1wbGVcbiAqIHZhciBwMSA9IG5ldyBtYXBib3hnbC5Qb2ludCgtNzcsIDM4KTsgLy8gYSBQb2ludExpa2Ugd2hpY2ggaXMgYSBQb2ludFxuICogdmFyIHAyID0gWy03NywgMzhdOyAvLyBhIFBvaW50TGlrZSB3aGljaCBpcyBhbiBhcnJheSBvZiB0d28gbnVtYmVyc1xuICovXG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgRE9NIGZyb20gJy4uLy4uL3V0aWwvZG9tJztcbmltcG9ydCB7ZXh0ZW5kLCBiaW5kQWxsfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IHtNb3VzZVJvdGF0ZUhhbmRsZXIsIE1vdXNlUGl0Y2hIYW5kbGVyfSBmcm9tICcuLi9oYW5kbGVyL21vdXNlJztcbmltcG9ydCB3aW5kb3cgZnJvbSAnLi4vLi4vdXRpbC93aW5kb3cnO1xuXG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vbWFwJztcblxudHlwZSBPcHRpb25zID0ge1xuICAgIHNob3dDb21wYXNzPzogYm9vbGVhbixcbiAgICBzaG93Wm9vbT86IGJvb2xlYW4sXG4gICAgdmlzdWFsaXplUGl0Y2g/OiBib29sZWFuXG59O1xuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogT3B0aW9ucyA9IHtcbiAgICBzaG93Q29tcGFzczogdHJ1ZSxcbiAgICBzaG93Wm9vbTogdHJ1ZSxcbiAgICB2aXN1YWxpemVQaXRjaDogZmFsc2Vcbn07XG5cbi8qKlxuICogQSBgTmF2aWdhdGlvbkNvbnRyb2xgIGNvbnRyb2wgY29udGFpbnMgem9vbSBidXR0b25zIGFuZCBhIGNvbXBhc3MuXG4gKlxuICogQGltcGxlbWVudHMge0lDb250cm9sfVxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5zaG93Q29tcGFzcz10cnVlXSBJZiBgdHJ1ZWAgdGhlIGNvbXBhc3MgYnV0dG9uIGlzIGluY2x1ZGVkLlxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5zaG93Wm9vbT10cnVlXSBJZiBgdHJ1ZWAgdGhlIHpvb20taW4gYW5kIHpvb20tb3V0IGJ1dHRvbnMgYXJlIGluY2x1ZGVkLlxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy52aXN1YWxpemVQaXRjaD1mYWxzZV0gSWYgYHRydWVgIHRoZSBwaXRjaCBpcyB2aXN1YWxpemVkIGJ5IHJvdGF0aW5nIFgtYXhpcyBvZiBjb21wYXNzLlxuICogQGV4YW1wbGVcbiAqIHZhciBuYXYgPSBuZXcgbWFwYm94Z2wuTmF2aWdhdGlvbkNvbnRyb2woKTtcbiAqIG1hcC5hZGRDb250cm9sKG5hdiwgJ3RvcC1sZWZ0Jyk7XG4gKiBAc2VlIFtEaXNwbGF5IG1hcCBuYXZpZ2F0aW9uIGNvbnRyb2xzXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL25hdmlnYXRpb24vKVxuICogQHNlZSBbQWRkIGEgdGhpcmQgcGFydHkgdmVjdG9yIHRpbGUgc291cmNlXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3RoaXJkLXBhcnR5LylcbiAqL1xuY2xhc3MgTmF2aWdhdGlvbkNvbnRyb2wge1xuICAgIF9tYXA6IE1hcDtcbiAgICBvcHRpb25zOiBPcHRpb25zO1xuICAgIF9jb250YWluZXI6IEhUTUxFbGVtZW50O1xuICAgIF96b29tSW5CdXR0b246IEhUTUxCdXR0b25FbGVtZW50O1xuICAgIF96b29tT3V0QnV0dG9uOiBIVE1MQnV0dG9uRWxlbWVudDtcbiAgICBfY29tcGFzczogSFRNTEJ1dHRvbkVsZW1lbnQ7XG4gICAgX2NvbXBhc3NJY29uOiBIVE1MRWxlbWVudDtcbiAgICBfaGFuZGxlcjogTW91c2VSb3RhdGVXcmFwcGVyO1xuXG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogT3B0aW9ucykge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBleHRlbmQoe30sIGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcblxuICAgICAgICB0aGlzLl9jb250YWluZXIgPSBET00uY3JlYXRlKCdkaXYnLCAnbWFwYm94Z2wtY3RybCBtYXBib3hnbC1jdHJsLWdyb3VwJyk7XG4gICAgICAgIHRoaXMuX2NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIChlKSA9PiBlLnByZXZlbnREZWZhdWx0KCkpO1xuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd1pvb20pIHtcbiAgICAgICAgICAgIGJpbmRBbGwoW1xuICAgICAgICAgICAgICAgICdfc2V0QnV0dG9uVGl0bGUnLFxuICAgICAgICAgICAgICAgICdfdXBkYXRlWm9vbUJ1dHRvbnMnXG4gICAgICAgICAgICBdLCB0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuX3pvb21JbkJ1dHRvbiA9IHRoaXMuX2NyZWF0ZUJ1dHRvbignbWFwYm94Z2wtY3RybC16b29tLWluJywgKGUpID0+IHRoaXMuX21hcC56b29tSW4oe30sIHtvcmlnaW5hbEV2ZW50OiBlfSkpO1xuICAgICAgICAgICAgRE9NLmNyZWF0ZSgnc3BhbicsIGBtYXBib3hnbC1jdHJsLWljb25gLCB0aGlzLl96b29tSW5CdXR0b24pLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuX3pvb21PdXRCdXR0b24gPSB0aGlzLl9jcmVhdGVCdXR0b24oJ21hcGJveGdsLWN0cmwtem9vbS1vdXQnLCAoZSkgPT4gdGhpcy5fbWFwLnpvb21PdXQoe30sIHtvcmlnaW5hbEV2ZW50OiBlfSkpO1xuICAgICAgICAgICAgRE9NLmNyZWF0ZSgnc3BhbicsIGBtYXBib3hnbC1jdHJsLWljb25gLCB0aGlzLl96b29tT3V0QnV0dG9uKS5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93Q29tcGFzcykge1xuICAgICAgICAgICAgYmluZEFsbChbXG4gICAgICAgICAgICAgICAgJ19yb3RhdGVDb21wYXNzQXJyb3cnXG4gICAgICAgICAgICBdLCB0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuX2NvbXBhc3MgPSB0aGlzLl9jcmVhdGVCdXR0b24oJ21hcGJveGdsLWN0cmwtY29tcGFzcycsIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy52aXN1YWxpemVQaXRjaCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXAucmVzZXROb3J0aFBpdGNoKHt9LCB7b3JpZ2luYWxFdmVudDogZX0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21hcC5yZXNldE5vcnRoKHt9LCB7b3JpZ2luYWxFdmVudDogZX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fY29tcGFzc0ljb24gPSBET00uY3JlYXRlKCdzcGFuJywgJ21hcGJveGdsLWN0cmwtaWNvbicsIHRoaXMuX2NvbXBhc3MpO1xuICAgICAgICAgICAgdGhpcy5fY29tcGFzc0ljb24uc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3VwZGF0ZVpvb21CdXR0b25zKCkge1xuICAgICAgICBjb25zdCB6b29tID0gdGhpcy5fbWFwLmdldFpvb20oKTtcbiAgICAgICAgdGhpcy5fem9vbUluQnV0dG9uLmRpc2FibGVkID0gem9vbSA9PT0gdGhpcy5fbWFwLmdldE1heFpvb20oKTtcbiAgICAgICAgdGhpcy5fem9vbU91dEJ1dHRvbi5kaXNhYmxlZCA9IHpvb20gPT09IHRoaXMuX21hcC5nZXRNaW5ab29tKCk7XG4gICAgfVxuXG4gICAgX3JvdGF0ZUNvbXBhc3NBcnJvdygpIHtcbiAgICAgICAgY29uc3Qgcm90YXRlID0gdGhpcy5vcHRpb25zLnZpc3VhbGl6ZVBpdGNoID9cbiAgICAgICAgICAgIGBzY2FsZSgkezEgLyBNYXRoLnBvdyhNYXRoLmNvcyh0aGlzLl9tYXAudHJhbnNmb3JtLnBpdGNoICogKE1hdGguUEkgLyAxODApKSwgMC41KX0pIHJvdGF0ZVgoJHt0aGlzLl9tYXAudHJhbnNmb3JtLnBpdGNofWRlZykgcm90YXRlWigke3RoaXMuX21hcC50cmFuc2Zvcm0uYW5nbGUgKiAoMTgwIC8gTWF0aC5QSSl9ZGVnKWAgOlxuICAgICAgICAgICAgYHJvdGF0ZSgke3RoaXMuX21hcC50cmFuc2Zvcm0uYW5nbGUgKiAoMTgwIC8gTWF0aC5QSSl9ZGVnKWA7XG5cbiAgICAgICAgdGhpcy5fY29tcGFzc0ljb24uc3R5bGUudHJhbnNmb3JtID0gcm90YXRlO1xuICAgIH1cblxuICAgIG9uQWRkKG1hcDogTWFwKSB7XG4gICAgICAgIHRoaXMuX21hcCA9IG1hcDtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93Wm9vbSkge1xuICAgICAgICAgICAgdGhpcy5fc2V0QnV0dG9uVGl0bGUodGhpcy5fem9vbUluQnV0dG9uLCAnWm9vbUluJyk7XG4gICAgICAgICAgICB0aGlzLl9zZXRCdXR0b25UaXRsZSh0aGlzLl96b29tT3V0QnV0dG9uLCAnWm9vbU91dCcpO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9uKCd6b29tJywgdGhpcy5fdXBkYXRlWm9vbUJ1dHRvbnMpO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlWm9vbUJ1dHRvbnMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNob3dDb21wYXNzKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRCdXR0b25UaXRsZSh0aGlzLl9jb21wYXNzLCAnUmVzZXRCZWFyaW5nJyk7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnZpc3VhbGl6ZVBpdGNoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFwLm9uKCdwaXRjaCcsIHRoaXMuX3JvdGF0ZUNvbXBhc3NBcnJvdyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9tYXAub24oJ3JvdGF0ZScsIHRoaXMuX3JvdGF0ZUNvbXBhc3NBcnJvdyk7XG4gICAgICAgICAgICB0aGlzLl9yb3RhdGVDb21wYXNzQXJyb3coKTtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZXIgPSBuZXcgTW91c2VSb3RhdGVXcmFwcGVyKHRoaXMuX21hcCwgdGhpcy5fY29tcGFzcywgdGhpcy5vcHRpb25zLnZpc3VhbGl6ZVBpdGNoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fY29udGFpbmVyO1xuICAgIH1cblxuICAgIG9uUmVtb3ZlKCkge1xuICAgICAgICBET00ucmVtb3ZlKHRoaXMuX2NvbnRhaW5lcik7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd1pvb20pIHtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ3pvb20nLCB0aGlzLl91cGRhdGVab29tQnV0dG9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93Q29tcGFzcykge1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy52aXN1YWxpemVQaXRjaCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ3BpdGNoJywgdGhpcy5fcm90YXRlQ29tcGFzc0Fycm93KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ3JvdGF0ZScsIHRoaXMuX3JvdGF0ZUNvbXBhc3NBcnJvdyk7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVyLm9mZigpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2hhbmRsZXI7XG4gICAgICAgIH1cblxuICAgICAgICBkZWxldGUgdGhpcy5fbWFwO1xuICAgIH1cblxuICAgIF9jcmVhdGVCdXR0b24oY2xhc3NOYW1lOiBzdHJpbmcsIGZuOiAoKSA9PiBtaXhlZCkge1xuICAgICAgICBjb25zdCBhID0gRE9NLmNyZWF0ZSgnYnV0dG9uJywgY2xhc3NOYW1lLCB0aGlzLl9jb250YWluZXIpO1xuICAgICAgICBhLnR5cGUgPSAnYnV0dG9uJztcbiAgICAgICAgYS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZuKTtcbiAgICAgICAgcmV0dXJuIGE7XG4gICAgfVxuXG4gICAgX3NldEJ1dHRvblRpdGxlKGJ1dHRvbjogSFRNTEJ1dHRvbkVsZW1lbnQsIHRpdGxlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc3RyID0gdGhpcy5fbWFwLl9nZXRVSVN0cmluZyhgTmF2aWdhdGlvbkNvbnRyb2wuJHt0aXRsZX1gKTtcbiAgICAgICAgYnV0dG9uLnRpdGxlID0gc3RyO1xuICAgICAgICBidXR0b24uc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgc3RyKTtcbiAgICB9XG59XG5cbmNsYXNzIE1vdXNlUm90YXRlV3JhcHBlciB7XG5cbiAgICBtYXA6IE1hcDtcbiAgICBfY2xpY2tUb2xlcmFuY2U6IG51bWJlcjtcbiAgICBlbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgICBtb3VzZVJvdGF0ZTogTW91c2VSb3RhdGVIYW5kbGVyO1xuICAgIG1vdXNlUGl0Y2g6IE1vdXNlUGl0Y2hIYW5kbGVyO1xuICAgIF9zdGFydFBvczogUG9pbnQ7XG4gICAgX2xhc3RQb3M6IFBvaW50O1xuXG4gICAgY29uc3RydWN0b3IobWFwOiBNYXAsIGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBwaXRjaD86IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgICB0aGlzLl9jbGlja1RvbGVyYW5jZSA9IDEwO1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICB0aGlzLm1vdXNlUm90YXRlID0gbmV3IE1vdXNlUm90YXRlSGFuZGxlcih7Y2xpY2tUb2xlcmFuY2U6IG1hcC5kcmFnUm90YXRlLl9tb3VzZVJvdGF0ZS5fY2xpY2tUb2xlcmFuY2V9KTtcbiAgICAgICAgdGhpcy5tYXAgPSBtYXA7XG4gICAgICAgIGlmIChwaXRjaCkgdGhpcy5tb3VzZVBpdGNoID0gbmV3IE1vdXNlUGl0Y2hIYW5kbGVyKHtjbGlja1RvbGVyYW5jZTogbWFwLmRyYWdSb3RhdGUuX21vdXNlUGl0Y2guX2NsaWNrVG9sZXJhbmNlfSk7XG5cbiAgICAgICAgYmluZEFsbChbJ21vdXNlZG93bicsICdtb3VzZW1vdmUnLCAnbW91c2V1cCcsICd0b3VjaHN0YXJ0JywgJ3RvdWNobW92ZScsICd0b3VjaGVuZCcsICdyZXNldCddLCB0aGlzKTtcbiAgICAgICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIoZWxlbWVudCwgJ21vdXNlZG93bicsIHRoaXMubW91c2Vkb3duKTtcbiAgICAgICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIoZWxlbWVudCwgJ3RvdWNoc3RhcnQnLCB0aGlzLnRvdWNoc3RhcnQsIHtwYXNzaXZlOiBmYWxzZX0pO1xuICAgICAgICBET00uYWRkRXZlbnRMaXN0ZW5lcihlbGVtZW50LCAndG91Y2htb3ZlJywgdGhpcy50b3VjaG1vdmUpO1xuICAgICAgICBET00uYWRkRXZlbnRMaXN0ZW5lcihlbGVtZW50LCAndG91Y2hlbmQnLCB0aGlzLnRvdWNoZW5kKTtcbiAgICAgICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIoZWxlbWVudCwgJ3RvdWNoY2FuY2VsJywgdGhpcy5yZXNldCk7XG4gICAgfVxuXG4gICAgZG93bihlOiBNb3VzZUV2ZW50LCBwb2ludDogUG9pbnQpIHtcbiAgICAgICAgdGhpcy5tb3VzZVJvdGF0ZS5tb3VzZWRvd24oZSwgcG9pbnQpO1xuICAgICAgICBpZiAodGhpcy5tb3VzZVBpdGNoKSB0aGlzLm1vdXNlUGl0Y2gubW91c2Vkb3duKGUsIHBvaW50KTtcbiAgICAgICAgRE9NLmRpc2FibGVEcmFnKCk7XG4gICAgfVxuXG4gICAgbW92ZShlOiBNb3VzZUV2ZW50LCBwb2ludDogUG9pbnQpIHtcbiAgICAgICAgY29uc3QgbWFwID0gdGhpcy5tYXA7XG4gICAgICAgIGNvbnN0IHIgPSB0aGlzLm1vdXNlUm90YXRlLm1vdXNlbW92ZVdpbmRvdyhlLCBwb2ludCk7XG4gICAgICAgIGlmIChyICYmIHIuYmVhcmluZ0RlbHRhKSBtYXAuc2V0QmVhcmluZyhtYXAuZ2V0QmVhcmluZygpICsgci5iZWFyaW5nRGVsdGEpO1xuICAgICAgICBpZiAodGhpcy5tb3VzZVBpdGNoKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gdGhpcy5tb3VzZVBpdGNoLm1vdXNlbW92ZVdpbmRvdyhlLCBwb2ludCk7XG4gICAgICAgICAgICBpZiAocCAmJiBwLnBpdGNoRGVsdGEpIG1hcC5zZXRQaXRjaChtYXAuZ2V0UGl0Y2goKSArIHAucGl0Y2hEZWx0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvZmYoKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnQ7XG4gICAgICAgIERPTS5yZW1vdmVFdmVudExpc3RlbmVyKGVsZW1lbnQsICdtb3VzZWRvd24nLCB0aGlzLm1vdXNlZG93bik7XG4gICAgICAgIERPTS5yZW1vdmVFdmVudExpc3RlbmVyKGVsZW1lbnQsICd0b3VjaHN0YXJ0JywgdGhpcy50b3VjaHN0YXJ0LCB7cGFzc2l2ZTogZmFsc2V9KTtcbiAgICAgICAgRE9NLnJlbW92ZUV2ZW50TGlzdGVuZXIoZWxlbWVudCwgJ3RvdWNobW92ZScsIHRoaXMudG91Y2htb3ZlKTtcbiAgICAgICAgRE9NLnJlbW92ZUV2ZW50TGlzdGVuZXIoZWxlbWVudCwgJ3RvdWNoZW5kJywgdGhpcy50b3VjaGVuZCk7XG4gICAgICAgIERPTS5yZW1vdmVFdmVudExpc3RlbmVyKGVsZW1lbnQsICd0b3VjaGNhbmNlbCcsIHRoaXMucmVzZXQpO1xuICAgICAgICB0aGlzLm9mZlRlbXAoKTtcbiAgICB9XG5cbiAgICBvZmZUZW1wKCkge1xuICAgICAgICBET00uZW5hYmxlRHJhZygpO1xuICAgICAgICBET00ucmVtb3ZlRXZlbnRMaXN0ZW5lcih3aW5kb3csICdtb3VzZW1vdmUnLCB0aGlzLm1vdXNlbW92ZSk7XG4gICAgICAgIERPTS5yZW1vdmVFdmVudExpc3RlbmVyKHdpbmRvdywgJ21vdXNldXAnLCB0aGlzLm1vdXNldXApO1xuICAgIH1cblxuICAgIG1vdXNlZG93bihlOiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIHRoaXMuZG93bihleHRlbmQoe30sIGUsIHtjdHJsS2V5OiB0cnVlLCBwcmV2ZW50RGVmYXVsdDogKCkgPT4gZS5wcmV2ZW50RGVmYXVsdCgpfSksIERPTS5tb3VzZVBvcyh0aGlzLmVsZW1lbnQsIGUpKTtcbiAgICAgICAgRE9NLmFkZEV2ZW50TGlzdGVuZXIod2luZG93LCAnbW91c2Vtb3ZlJywgdGhpcy5tb3VzZW1vdmUpO1xuICAgICAgICBET00uYWRkRXZlbnRMaXN0ZW5lcih3aW5kb3csICdtb3VzZXVwJywgdGhpcy5tb3VzZXVwKTtcbiAgICB9XG5cbiAgICBtb3VzZW1vdmUoZTogTW91c2VFdmVudCkge1xuICAgICAgICB0aGlzLm1vdmUoZSwgRE9NLm1vdXNlUG9zKHRoaXMuZWxlbWVudCwgZSkpO1xuICAgIH1cblxuICAgIG1vdXNldXAoZTogTW91c2VFdmVudCkge1xuICAgICAgICB0aGlzLm1vdXNlUm90YXRlLm1vdXNldXBXaW5kb3coZSk7XG4gICAgICAgIGlmICh0aGlzLm1vdXNlUGl0Y2gpIHRoaXMubW91c2VQaXRjaC5tb3VzZXVwV2luZG93KGUpO1xuICAgICAgICB0aGlzLm9mZlRlbXAoKTtcbiAgICB9XG5cbiAgICB0b3VjaHN0YXJ0KGU6IFRvdWNoRXZlbnQpIHtcbiAgICAgICAgaWYgKGUudGFyZ2V0VG91Y2hlcy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0UG9zID0gdGhpcy5fbGFzdFBvcyA9IERPTS50b3VjaFBvcyh0aGlzLmVsZW1lbnQsIGUudGFyZ2V0VG91Y2hlcylbMF07XG4gICAgICAgICAgICB0aGlzLmRvd24oKCh7dHlwZTogJ21vdXNlZG93bicsIGJ1dHRvbjogMCwgY3RybEtleTogdHJ1ZSwgcHJldmVudERlZmF1bHQ6ICgpID0+IGUucHJldmVudERlZmF1bHQoKX06IGFueSk6IE1vdXNlRXZlbnQpLCB0aGlzLl9zdGFydFBvcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0b3VjaG1vdmUoZTogVG91Y2hFdmVudCkge1xuICAgICAgICBpZiAoZS50YXJnZXRUb3VjaGVzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbGFzdFBvcyA9IERPTS50b3VjaFBvcyh0aGlzLmVsZW1lbnQsIGUudGFyZ2V0VG91Y2hlcylbMF07XG4gICAgICAgICAgICB0aGlzLm1vdmUoKCh7cHJldmVudERlZmF1bHQ6ICgpID0+IGUucHJldmVudERlZmF1bHQoKX06IGFueSk6IE1vdXNlRXZlbnQpLCB0aGlzLl9sYXN0UG9zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRvdWNoZW5kKGU6IFRvdWNoRXZlbnQpIHtcbiAgICAgICAgaWYgKGUudGFyZ2V0VG91Y2hlcy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0UG9zICYmXG4gICAgICAgICAgICB0aGlzLl9sYXN0UG9zICYmXG4gICAgICAgICAgICB0aGlzLl9zdGFydFBvcy5kaXN0KHRoaXMuX2xhc3RQb3MpIDwgdGhpcy5fY2xpY2tUb2xlcmFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGljaygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9XG5cbiAgICByZXNldCgpIHtcbiAgICAgICAgdGhpcy5tb3VzZVJvdGF0ZS5yZXNldCgpO1xuICAgICAgICBpZiAodGhpcy5tb3VzZVBpdGNoKSB0aGlzLm1vdXNlUGl0Y2gucmVzZXQoKTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3N0YXJ0UG9zO1xuICAgICAgICBkZWxldGUgdGhpcy5fbGFzdFBvcztcbiAgICAgICAgdGhpcy5vZmZUZW1wKCk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBOYXZpZ2F0aW9uQ29udHJvbDtcbiIsIi8vIEBmbG93XG5cbmltcG9ydCBMbmdMYXQgZnJvbSAnLi4vZ2VvL2xuZ19sYXQnO1xuXG5pbXBvcnQgdHlwZSBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB0eXBlIFRyYW5zZm9ybSBmcm9tICcuLi9nZW8vdHJhbnNmb3JtJztcblxuLyoqXG4gKiBHaXZlbiBhIExuZ0xhdCwgcHJpb3IgcHJvamVjdGVkIHBvc2l0aW9uLCBhbmQgYSB0cmFuc2Zvcm0sIHJldHVybiBhIG5ldyBMbmdMYXQgc2hpZnRlZFxuICogbiDDg8KXIDM2MMOCwrAgZWFzdCBvciB3ZXN0IGZvciBzb21lIG4gw6LCicKlIDAgc3VjaCB0aGF0OlxuICpcbiAqICogdGhlIHByb2plY3RlZCBsb2NhdGlvbiBvZiB0aGUgcmVzdWx0IGlzIG9uIHNjcmVlbiwgaWYgcG9zc2libGUsIGFuZCBzZWNvbmRhcmlseTpcbiAqICogdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgcHJvamVjdGVkIGxvY2F0aW9uIG9mIHRoZSByZXN1bHQgYW5kIHRoZSBwcmlvciBwb3NpdGlvblxuICogICBpcyBtaW5pbWl6ZWQuXG4gKlxuICogVGhlIG9iamVjdCBpcyB0byBwcmVzZXJ2ZSBwZXJjZWl2ZWQgb2JqZWN0IGNvbnN0YW5jeSBmb3IgUG9wdXBzIGFuZCBNYXJrZXJzIGFzIG11Y2ggYXNcbiAqIHBvc3NpYmxlOyB0aGV5IHNob3VsZCBhdm9pZCBzaGlmdGluZyBsYXJnZSBkaXN0YW5jZXMgYWNyb3NzIHRoZSBzY3JlZW4sIGV2ZW4gd2hlbiB0aGVcbiAqIG1hcCBjZW50ZXIgY2hhbmdlcyBieSDDgsKxMzYww4LCsCBkdWUgdG8gYXV0b21hdGljIHdyYXBwaW5nLCBhbmQgd2hlbiBhYm91dCB0byBnbyBvZmYgc2NyZWVuLFxuICogc2hvdWxkIHdyYXAganVzdCBlbm91Z2ggdG8gYXZvaWQgZG9pbmcgc28uXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obG5nTGF0OiBMbmdMYXQsIHByaW9yUG9zOiA/UG9pbnQsIHRyYW5zZm9ybTogVHJhbnNmb3JtKTogTG5nTGF0IHtcbiAgICBsbmdMYXQgPSBuZXcgTG5nTGF0KGxuZ0xhdC5sbmcsIGxuZ0xhdC5sYXQpO1xuXG4gICAgLy8gRmlyc3QsIHRyeSBzaGlmdGluZyBvbmUgd29ybGQgaW4gZWl0aGVyIGRpcmVjdGlvbiwgYW5kIHNlZSBpZiBlaXRoZXIgaXMgY2xvc2VyIHRvIHRoZVxuICAgIC8vIHByaW9yIHBvc2l0aW9uLiBUaGlzIHByZXNlcnZlcyBvYmplY3QgY29uc3RhbmN5IHdoZW4gdGhlIG1hcCBjZW50ZXIgaXMgYXV0by13cmFwcGVkXG4gICAgLy8gZHVyaW5nIGFuaW1hdGlvbnMuXG4gICAgaWYgKHByaW9yUG9zKSB7XG4gICAgICAgIGNvbnN0IGxlZnQgID0gbmV3IExuZ0xhdChsbmdMYXQubG5nIC0gMzYwLCBsbmdMYXQubGF0KTtcbiAgICAgICAgY29uc3QgcmlnaHQgPSBuZXcgTG5nTGF0KGxuZ0xhdC5sbmcgKyAzNjAsIGxuZ0xhdC5sYXQpO1xuICAgICAgICBjb25zdCBkZWx0YSA9IHRyYW5zZm9ybS5sb2NhdGlvblBvaW50KGxuZ0xhdCkuZGlzdFNxcihwcmlvclBvcyk7XG4gICAgICAgIGlmICh0cmFuc2Zvcm0ubG9jYXRpb25Qb2ludChsZWZ0KS5kaXN0U3FyKHByaW9yUG9zKSA8IGRlbHRhKSB7XG4gICAgICAgICAgICBsbmdMYXQgPSBsZWZ0O1xuICAgICAgICB9IGVsc2UgaWYgKHRyYW5zZm9ybS5sb2NhdGlvblBvaW50KHJpZ2h0KS5kaXN0U3FyKHByaW9yUG9zKSA8IGRlbHRhKSB7XG4gICAgICAgICAgICBsbmdMYXQgPSByaWdodDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNlY29uZCwgd3JhcCB0b3dhcmQgdGhlIGNlbnRlciB1bnRpbCB0aGUgbmV3IHBvc2l0aW9uIGlzIG9uIHNjcmVlbiwgb3Igd2UgY2FuJ3QgZ2V0XG4gICAgLy8gYW55IGNsb3Nlci5cbiAgICB3aGlsZSAoTWF0aC5hYnMobG5nTGF0LmxuZyAtIHRyYW5zZm9ybS5jZW50ZXIubG5nKSA+IDE4MCkge1xuICAgICAgICBjb25zdCBwb3MgPSB0cmFuc2Zvcm0ubG9jYXRpb25Qb2ludChsbmdMYXQpO1xuICAgICAgICBpZiAocG9zLnggPj0gMCAmJiBwb3MueSA+PSAwICYmIHBvcy54IDw9IHRyYW5zZm9ybS53aWR0aCAmJiBwb3MueSA8PSB0cmFuc2Zvcm0uaGVpZ2h0KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAobG5nTGF0LmxuZyA+IHRyYW5zZm9ybS5jZW50ZXIubG5nKSB7XG4gICAgICAgICAgICBsbmdMYXQubG5nIC09IDM2MDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxuZ0xhdC5sbmcgKz0gMzYwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGxuZ0xhdDtcbn1cbiIsIi8vIEBmbG93XG5cbmV4cG9ydCB0eXBlIEFuY2hvciA9XG4gICAgfCAnY2VudGVyJ1xuICAgIHwgJ3RvcCdcbiAgICB8ICdib3R0b20nXG4gICAgfCAnbGVmdCdcbiAgICB8ICdyaWdodCdcbiAgICB8ICd0b3AtbGVmdCdcbiAgICB8ICd0b3AtcmlnaHQnXG4gICAgfCAnYm90dG9tLWxlZnQnXG4gICAgfCAnYm90dG9tLXJpZ2h0JztcblxuZXhwb3J0IGNvbnN0IGFuY2hvclRyYW5zbGF0ZToge1tfOiBBbmNob3JdOiBzdHJpbmd9ID0ge1xuICAgICdjZW50ZXInOiAndHJhbnNsYXRlKC01MCUsLTUwJSknLFxuICAgICd0b3AnOiAndHJhbnNsYXRlKC01MCUsMCknLFxuICAgICd0b3AtbGVmdCc6ICd0cmFuc2xhdGUoMCwwKScsXG4gICAgJ3RvcC1yaWdodCc6ICd0cmFuc2xhdGUoLTEwMCUsMCknLFxuICAgICdib3R0b20nOiAndHJhbnNsYXRlKC01MCUsLTEwMCUpJyxcbiAgICAnYm90dG9tLWxlZnQnOiAndHJhbnNsYXRlKDAsLTEwMCUpJyxcbiAgICAnYm90dG9tLXJpZ2h0JzogJ3RyYW5zbGF0ZSgtMTAwJSwtMTAwJSknLFxuICAgICdsZWZ0JzogJ3RyYW5zbGF0ZSgwLC01MCUpJyxcbiAgICAncmlnaHQnOiAndHJhbnNsYXRlKC0xMDAlLC01MCUpJ1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5QW5jaG9yQ2xhc3MoZWxlbWVudDogSFRNTEVsZW1lbnQsIGFuY2hvcjogQW5jaG9yLCBwcmVmaXg6IHN0cmluZykge1xuICAgIGNvbnN0IGNsYXNzTGlzdCA9IGVsZW1lbnQuY2xhc3NMaXN0O1xuICAgIGZvciAoY29uc3Qga2V5IGluIGFuY2hvclRyYW5zbGF0ZSkge1xuICAgICAgICBjbGFzc0xpc3QucmVtb3ZlKGBtYXBib3hnbC0ke3ByZWZpeH0tYW5jaG9yLSR7a2V5fWApO1xuICAgIH1cbiAgICBjbGFzc0xpc3QuYWRkKGBtYXBib3hnbC0ke3ByZWZpeH0tYW5jaG9yLSR7YW5jaG9yfWApO1xufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IERPTSBmcm9tICcuLi91dGlsL2RvbSc7XG5pbXBvcnQgd2luZG93IGZyb20gJy4uL3V0aWwvd2luZG93JztcbmltcG9ydCBMbmdMYXQgZnJvbSAnLi4vZ2VvL2xuZ19sYXQnO1xuaW1wb3J0IFBvaW50IGZyb20gJ0BtYXBib3gvcG9pbnQtZ2VvbWV0cnknO1xuaW1wb3J0IHNtYXJ0V3JhcCBmcm9tICcuLi91dGlsL3NtYXJ0X3dyYXAnO1xuaW1wb3J0IHtiaW5kQWxsLCBleHRlbmR9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQge3R5cGUgQW5jaG9yLCBhbmNob3JUcmFuc2xhdGUsIGFwcGx5QW5jaG9yQ2xhc3N9IGZyb20gJy4vYW5jaG9yJztcbmltcG9ydCB7RXZlbnQsIEV2ZW50ZWR9IGZyb20gJy4uL3V0aWwvZXZlbnRlZCc7XG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi9tYXAnO1xuaW1wb3J0IHR5cGUgUG9wdXAgZnJvbSAnLi9wb3B1cCc7XG5pbXBvcnQgdHlwZSB7TG5nTGF0TGlrZX0gZnJvbSBcIi4uL2dlby9sbmdfbGF0XCI7XG5pbXBvcnQgdHlwZSB7TWFwTW91c2VFdmVudCwgTWFwVG91Y2hFdmVudH0gZnJvbSAnLi9ldmVudHMnO1xuaW1wb3J0IHR5cGUge1BvaW50TGlrZX0gZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbnR5cGUgT3B0aW9ucyA9IHtcbiAgICBlbGVtZW50PzogSFRNTEVsZW1lbnQsXG4gICAgb2Zmc2V0PzogUG9pbnRMaWtlLFxuICAgIGFuY2hvcj86IEFuY2hvcixcbiAgICBjb2xvcj86IHN0cmluZyxcbiAgICBkcmFnZ2FibGU/OiBib29sZWFuLFxuICAgIHJvdGF0aW9uPzogbnVtYmVyLFxuICAgIHJvdGF0aW9uQWxpZ25tZW50Pzogc3RyaW5nLFxuICAgIHBpdGNoQWxpZ25tZW50Pzogc3RyaW5nXG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBtYXJrZXIgY29tcG9uZW50XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBbb3B0aW9ucy5lbGVtZW50XSBET00gZWxlbWVudCB0byB1c2UgYXMgYSBtYXJrZXIuIFRoZSBkZWZhdWx0IGlzIGEgbGlnaHQgYmx1ZSwgZHJvcGxldC1zaGFwZWQgU1ZHIG1hcmtlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5hbmNob3I9J2NlbnRlciddIEEgc3RyaW5nIGluZGljYXRpbmcgdGhlIHBhcnQgb2YgdGhlIE1hcmtlciB0aGF0IHNob3VsZCBiZSBwb3NpdGlvbmVkIGNsb3Nlc3QgdG8gdGhlIGNvb3JkaW5hdGUgc2V0IHZpYSB7QGxpbmsgTWFya2VyI3NldExuZ0xhdH0uXG4gKiAgIE9wdGlvbnMgYXJlIGAnY2VudGVyJ2AsIGAndG9wJ2AsIGAnYm90dG9tJ2AsIGAnbGVmdCdgLCBgJ3JpZ2h0J2AsIGAndG9wLWxlZnQnYCwgYCd0b3AtcmlnaHQnYCwgYCdib3R0b20tbGVmdCdgLCBhbmQgYCdib3R0b20tcmlnaHQnYC5cbiAqIEBwYXJhbSB7UG9pbnRMaWtlfSBbb3B0aW9ucy5vZmZzZXRdIFRoZSBvZmZzZXQgaW4gcGl4ZWxzIGFzIGEge0BsaW5rIFBvaW50TGlrZX0gb2JqZWN0IHRvIGFwcGx5IHJlbGF0aXZlIHRvIHRoZSBlbGVtZW50J3MgY2VudGVyLiBOZWdhdGl2ZXMgaW5kaWNhdGUgbGVmdCBhbmQgdXAuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuY29sb3I9JyMzRkIxQ0UnXSBUaGUgY29sb3IgdG8gdXNlIGZvciB0aGUgZGVmYXVsdCBtYXJrZXIgaWYgb3B0aW9ucy5lbGVtZW50IGlzIG5vdCBwcm92aWRlZC4gVGhlIGRlZmF1bHQgaXMgbGlnaHQgYmx1ZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZHJhZ2dhYmxlPWZhbHNlXSBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCBhIG1hcmtlciBpcyBhYmxlIHRvIGJlIGRyYWdnZWQgdG8gYSBuZXcgcG9zaXRpb24gb24gdGhlIG1hcC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5yb3RhdGlvbj0wXSBUaGUgcm90YXRpb24gYW5nbGUgb2YgdGhlIG1hcmtlciBpbiBkZWdyZWVzLCByZWxhdGl2ZSB0byBpdHMgcmVzcGVjdGl2ZSBgcm90YXRpb25BbGlnbm1lbnRgIHNldHRpbmcuIEEgcG9zaXRpdmUgdmFsdWUgd2lsbCByb3RhdGUgdGhlIG1hcmtlciBjbG9ja3dpc2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMucGl0Y2hBbGlnbm1lbnQ9J2F1dG8nXSBgbWFwYCBhbGlnbnMgdGhlIGBNYXJrZXJgIHRvIHRoZSBwbGFuZSBvZiB0aGUgbWFwLiBgdmlld3BvcnRgIGFsaWducyB0aGUgYE1hcmtlcmAgdG8gdGhlIHBsYW5lIG9mIHRoZSB2aWV3cG9ydC4gYGF1dG9gIGF1dG9tYXRpY2FsbHkgbWF0Y2hlcyB0aGUgdmFsdWUgb2YgYHJvdGF0aW9uQWxpZ25tZW50YC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5yb3RhdGlvbkFsaWdubWVudD0nYXV0byddIGBtYXBgIGFsaWducyB0aGUgYE1hcmtlcmAncyByb3RhdGlvbiByZWxhdGl2ZSB0byB0aGUgbWFwLCBtYWludGFpbmluZyBhIGJlYXJpbmcgYXMgdGhlIG1hcCByb3RhdGVzLiBgdmlld3BvcnRgIGFsaWducyB0aGUgYE1hcmtlcmAncyByb3RhdGlvbiByZWxhdGl2ZSB0byB0aGUgdmlld3BvcnQsIGFnbm9zdGljIHRvIG1hcCByb3RhdGlvbnMuIGBhdXRvYCBpcyBlcXVpdmFsZW50IHRvIGB2aWV3cG9ydGAuXG4gKiBAZXhhbXBsZVxuICogdmFyIG1hcmtlciA9IG5ldyBtYXBib3hnbC5NYXJrZXIoKVxuICogICAuc2V0TG5nTGF0KFszMC41LCA1MC41XSlcbiAqICAgLmFkZFRvKG1hcCk7XG4gKiBAc2VlIFtBZGQgY3VzdG9tIGljb25zIHdpdGggTWFya2Vyc10oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9jdXN0b20tbWFya2VyLWljb25zLylcbiAqIEBzZWUgW0NyZWF0ZSBhIGRyYWdnYWJsZSBNYXJrZXJdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZHJhZy1hLW1hcmtlci8pXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1hcmtlciBleHRlbmRzIEV2ZW50ZWQge1xuICAgIF9tYXA6IE1hcDtcbiAgICBfYW5jaG9yOiBBbmNob3I7XG4gICAgX29mZnNldDogUG9pbnQ7XG4gICAgX2VsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICAgIF9wb3B1cDogP1BvcHVwO1xuICAgIF9sbmdMYXQ6IExuZ0xhdDtcbiAgICBfcG9zOiA/UG9pbnQ7XG4gICAgX2NvbG9yOiA/c3RyaW5nO1xuICAgIF9kZWZhdWx0TWFya2VyOiBib29sZWFuO1xuICAgIF9kcmFnZ2FibGU6IGJvb2xlYW47XG4gICAgX3N0YXRlOiAnaW5hY3RpdmUnIHwgJ3BlbmRpbmcnIHwgJ2FjdGl2ZSc7IC8vIHVzZWQgZm9yIGhhbmRsaW5nIGRyYWcgZXZlbnRzXG4gICAgX3Bvc2l0aW9uRGVsdGE6ID9udW1iZXI7XG4gICAgX3JvdGF0aW9uOiBudW1iZXI7XG4gICAgX3BpdGNoQWxpZ25tZW50OiBzdHJpbmc7XG4gICAgX3JvdGF0aW9uQWxpZ25tZW50OiBzdHJpbmc7XG4gICAgX29yaWdpbmFsVGFiSW5kZXg6ID9zdHJpbmc7IC8vIG9yaWdpbmFsIHRhYmluZGV4IG9mIF9lbGVtZW50XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zPzogT3B0aW9ucywgbGVnYWN5T3B0aW9ucz86IE9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgLy8gRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgLS0gdGhlIGNvbnN0cnVjdG9yIHVzZWQgdG8gYWNjZXB0IHRoZSBlbGVtZW50IGFzIGFcbiAgICAgICAgLy8gcmVxdWlyZWQgZmlyc3QgYXJndW1lbnQsIGJlZm9yZSBpdCB3YXMgbWFkZSBvcHRpb25hbC5cbiAgICAgICAgaWYgKG9wdGlvbnMgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTEVsZW1lbnQgfHwgbGVnYWN5T3B0aW9ucykge1xuICAgICAgICAgICAgb3B0aW9ucyA9IGV4dGVuZCh7ZWxlbWVudDogb3B0aW9uc30sIGxlZ2FjeU9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgYmluZEFsbChbXG4gICAgICAgICAgICAnX3VwZGF0ZScsXG4gICAgICAgICAgICAnX29uTW92ZScsXG4gICAgICAgICAgICAnX29uVXAnLFxuICAgICAgICAgICAgJ19hZGREcmFnSGFuZGxlcicsXG4gICAgICAgICAgICAnX29uTWFwQ2xpY2snLFxuICAgICAgICAgICAgJ19vbktleVByZXNzJ1xuICAgICAgICBdLCB0aGlzKTtcblxuICAgICAgICB0aGlzLl9hbmNob3IgPSBvcHRpb25zICYmIG9wdGlvbnMuYW5jaG9yIHx8ICdjZW50ZXInO1xuICAgICAgICB0aGlzLl9jb2xvciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb2xvciB8fCAnIzNGQjFDRSc7XG4gICAgICAgIHRoaXMuX2RyYWdnYWJsZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5kcmFnZ2FibGUgfHwgZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlID0gJ2luYWN0aXZlJztcbiAgICAgICAgdGhpcy5fcm90YXRpb24gPSBvcHRpb25zICYmIG9wdGlvbnMucm90YXRpb24gfHwgMDtcbiAgICAgICAgdGhpcy5fcm90YXRpb25BbGlnbm1lbnQgPSBvcHRpb25zICYmIG9wdGlvbnMucm90YXRpb25BbGlnbm1lbnQgfHwgJ2F1dG8nO1xuICAgICAgICB0aGlzLl9waXRjaEFsaWdubWVudCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5waXRjaEFsaWdubWVudCAmJiBvcHRpb25zLnBpdGNoQWxpZ25tZW50ICE9PSAnYXV0bycgPyAgb3B0aW9ucy5waXRjaEFsaWdubWVudCA6IHRoaXMuX3JvdGF0aW9uQWxpZ25tZW50O1xuXG4gICAgICAgIGlmICghb3B0aW9ucyB8fCAhb3B0aW9ucy5lbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9kZWZhdWx0TWFya2VyID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQgPSBET00uY3JlYXRlKCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgJ01hcCBtYXJrZXInKTtcblxuICAgICAgICAgICAgLy8gY3JlYXRlIGRlZmF1bHQgbWFwIG1hcmtlciBTVkdcbiAgICAgICAgICAgIGNvbnN0IHN2ZyA9IERPTS5jcmVhdGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnc3ZnJyk7XG4gICAgICAgICAgICBzdmcuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2Rpc3BsYXknLCAnYmxvY2snKTtcbiAgICAgICAgICAgIHN2Zy5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnaGVpZ2h0JywgJzQxcHgnKTtcbiAgICAgICAgICAgIHN2Zy5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnd2lkdGgnLCAnMjdweCcpO1xuICAgICAgICAgICAgc3ZnLnNldEF0dHJpYnV0ZU5TKG51bGwsICd2aWV3Qm94JywgJzAgMCAyNyA0MScpO1xuXG4gICAgICAgICAgICBjb25zdCBtYXJrZXJMYXJnZSA9IERPTS5jcmVhdGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnZycpO1xuICAgICAgICAgICAgbWFya2VyTGFyZ2Uuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3N0cm9rZScsICdub25lJyk7XG4gICAgICAgICAgICBtYXJrZXJMYXJnZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnc3Ryb2tlLXdpZHRoJywgJzEnKTtcbiAgICAgICAgICAgIG1hcmtlckxhcmdlLnNldEF0dHJpYnV0ZU5TKG51bGwsICdmaWxsJywgJ25vbmUnKTtcbiAgICAgICAgICAgIG1hcmtlckxhcmdlLnNldEF0dHJpYnV0ZU5TKG51bGwsICdmaWxsLXJ1bGUnLCAnZXZlbm9kZCcpO1xuXG4gICAgICAgICAgICBjb25zdCBwYWdlMSA9IERPTS5jcmVhdGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnZycpO1xuICAgICAgICAgICAgcGFnZTEuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2ZpbGwtcnVsZScsICdub256ZXJvJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHNoYWRvdyA9IERPTS5jcmVhdGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnZycpO1xuICAgICAgICAgICAgc2hhZG93LnNldEF0dHJpYnV0ZU5TKG51bGwsICd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDMuMCwgMjkuMCknKTtcbiAgICAgICAgICAgIHNoYWRvdy5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZmlsbCcsICcjMDAwMDAwJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGVsbGlwc2VzID0gW1xuICAgICAgICAgICAgICAgIHsncngnOiAnMTAuNScsICdyeSc6ICc1LjI1MDAyMjczJ30sXG4gICAgICAgICAgICAgICAgeydyeCc6ICcxMC41JywgJ3J5JzogJzUuMjUwMDIyNzMnfSxcbiAgICAgICAgICAgICAgICB7J3J4JzogJzkuNScsICdyeSc6ICc0Ljc3Mjc1MDA3J30sXG4gICAgICAgICAgICAgICAgeydyeCc6ICc4LjUnLCAncnknOiAnNC4yOTU0OTkzNid9LFxuICAgICAgICAgICAgICAgIHsncngnOiAnNy41JywgJ3J5JzogJzMuODE4MjIzMDgnfSxcbiAgICAgICAgICAgICAgICB7J3J4JzogJzYuNScsICdyeSc6ICczLjM0MDk0Njc5J30sXG4gICAgICAgICAgICAgICAgeydyeCc6ICc1LjUnLCAncnknOiAnMi44NjM2NzA1MSd9LFxuICAgICAgICAgICAgICAgIHsncngnOiAnNC41JywgJ3J5JzogJzIuMzg2MzY4NjQnfVxuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBkYXRhIG9mIGVsbGlwc2VzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxsaXBzZSA9IERPTS5jcmVhdGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnZWxsaXBzZScpO1xuICAgICAgICAgICAgICAgIGVsbGlwc2Uuc2V0QXR0cmlidXRlTlMobnVsbCwgJ29wYWNpdHknLCAnMC4wNCcpO1xuICAgICAgICAgICAgICAgIGVsbGlwc2Uuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2N4JywgJzEwLjUnKTtcbiAgICAgICAgICAgICAgICBlbGxpcHNlLnNldEF0dHJpYnV0ZU5TKG51bGwsICdjeScsICc1LjgwMDI5MDA4Jyk7XG4gICAgICAgICAgICAgICAgZWxsaXBzZS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAncngnLCBkYXRhWydyeCddKTtcbiAgICAgICAgICAgICAgICBlbGxpcHNlLnNldEF0dHJpYnV0ZU5TKG51bGwsICdyeScsIGRhdGFbJ3J5J10pO1xuICAgICAgICAgICAgICAgIHNoYWRvdy5hcHBlbmRDaGlsZChlbGxpcHNlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYmFja2dyb3VuZCA9IERPTS5jcmVhdGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnZycpO1xuICAgICAgICAgICAgYmFja2dyb3VuZC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZmlsbCcsIHRoaXMuX2NvbG9yKTtcblxuICAgICAgICAgICAgY29uc3QgYmdQYXRoID0gRE9NLmNyZWF0ZU5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdwYXRoJyk7XG4gICAgICAgICAgICBiZ1BhdGguc2V0QXR0cmlidXRlTlMobnVsbCwgJ2QnLCAnTTI3LDEzLjUgQzI3LDE5LjA3NDY0NCAyMC4yNTAwMDEsMjcuMDAwMDAyIDE0Ljc1LDM0LjUwMDAwMiBDMTQuMDE2NjY1LDM1LjUwMDAwNCAxMi45ODMzMzUsMzUuNTAwMDA0IDEyLjI1LDM0LjUwMDAwMiBDNi43NDk5OTkzLDI3LjAwMDAwMiAwLDE5LjIyMjU2MiAwLDEzLjUgQzAsNi4wNDQxNTU5IDYuMDQ0MTU1OSwwIDEzLjUsMCBDMjAuOTU1ODQ0LDAgMjcsNi4wNDQxNTU5IDI3LDEzLjUgWicpO1xuXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLmFwcGVuZENoaWxkKGJnUGF0aCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGJvcmRlciA9IERPTS5jcmVhdGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnZycpO1xuICAgICAgICAgICAgYm9yZGVyLnNldEF0dHJpYnV0ZU5TKG51bGwsICdvcGFjaXR5JywgJzAuMjUnKTtcbiAgICAgICAgICAgIGJvcmRlci5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZmlsbCcsICcjMDAwMDAwJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGJvcmRlclBhdGggPSBET00uY3JlYXRlTlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3BhdGgnKTtcbiAgICAgICAgICAgIGJvcmRlclBhdGguc2V0QXR0cmlidXRlTlMobnVsbCwgJ2QnLCAnTTEzLjUsMCBDNi4wNDQxNTU5LDAgMCw2LjA0NDE1NTkgMCwxMy41IEMwLDE5LjIyMjU2MiA2Ljc0OTk5OTMsMjcgMTIuMjUsMzQuNSBDMTMsMzUuNTIyNzI3IDE0LjAxNjY2NCwzNS41MDAwMDQgMTQuNzUsMzQuNSBDMjAuMjUwMDAxLDI3IDI3LDE5LjA3NDY0NCAyNywxMy41IEMyNyw2LjA0NDE1NTkgMjAuOTU1ODQ0LDAgMTMuNSwwIFogTTEzLjUsMSBDMjAuNDE1NDA0LDEgMjYsNi41ODQ1OTYgMjYsMTMuNSBDMjYsMTUuODk4NjU3IDI0LjQ5NTU4NCwxOS4xODE0MzEgMjIuMjIwNzAzLDIyLjczODI4MSBDMTkuOTQ1ODIzLDI2LjI5NTEzMiAxNi43MDUxMTksMzAuMTQyMTY3IDEzLjk0MzM1OSwzMy45MDgyMDMgQzEzLjc0MzQ0NSwzNC4xODA4MTQgMTMuNjEyNzE1LDM0LjMyMjczOCAxMy41LDM0LjQ0MTQwNiBDMTMuMzg3Mjg1LDM0LjMyMjczOCAxMy4yNTY1NTUsMzQuMTgwODE0IDEzLjA1NjY0MSwzMy45MDgyMDMgQzEwLjI4NDQ4MSwzMC4xMjc5ODUgNy40MTQ4Njg0LDI2LjMxNDE1OSA1LjAxNTYyNSwyMi43NzM0MzggQzIuNjE2MzgxNiwxOS4yMzI3MTUgMSwxNS45NTM1MzggMSwxMy41IEMxLDYuNTg0NTk2IDYuNTg0NTk2LDEgMTMuNSwxIFonKTtcblxuICAgICAgICAgICAgYm9yZGVyLmFwcGVuZENoaWxkKGJvcmRlclBhdGgpO1xuXG4gICAgICAgICAgICBjb25zdCBtYWtpID0gRE9NLmNyZWF0ZU5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdnJyk7XG4gICAgICAgICAgICBtYWtpLnNldEF0dHJpYnV0ZU5TKG51bGwsICd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDYuMCwgNy4wKScpO1xuICAgICAgICAgICAgbWFraS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZmlsbCcsICcjRkZGRkZGJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNpcmNsZUNvbnRhaW5lciA9IERPTS5jcmVhdGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnZycpO1xuICAgICAgICAgICAgY2lyY2xlQ29udGFpbmVyLnNldEF0dHJpYnV0ZU5TKG51bGwsICd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDguMCwgOC4wKScpO1xuXG4gICAgICAgICAgICBjb25zdCBjaXJjbGUxID0gRE9NLmNyZWF0ZU5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdjaXJjbGUnKTtcbiAgICAgICAgICAgIGNpcmNsZTEuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2ZpbGwnLCAnIzAwMDAwMCcpO1xuICAgICAgICAgICAgY2lyY2xlMS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnb3BhY2l0eScsICcwLjI1Jyk7XG4gICAgICAgICAgICBjaXJjbGUxLnNldEF0dHJpYnV0ZU5TKG51bGwsICdjeCcsICc1LjUnKTtcbiAgICAgICAgICAgIGNpcmNsZTEuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2N5JywgJzUuNScpO1xuICAgICAgICAgICAgY2lyY2xlMS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAncicsICc1LjQ5OTk5NjInKTtcblxuICAgICAgICAgICAgY29uc3QgY2lyY2xlMiA9IERPTS5jcmVhdGVOUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnY2lyY2xlJyk7XG4gICAgICAgICAgICBjaXJjbGUyLnNldEF0dHJpYnV0ZU5TKG51bGwsICdmaWxsJywgJyNGRkZGRkYnKTtcbiAgICAgICAgICAgIGNpcmNsZTIuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2N4JywgJzUuNScpO1xuICAgICAgICAgICAgY2lyY2xlMi5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnY3knLCAnNS41Jyk7XG4gICAgICAgICAgICBjaXJjbGUyLnNldEF0dHJpYnV0ZU5TKG51bGwsICdyJywgJzUuNDk5OTk2MicpO1xuXG4gICAgICAgICAgICBjaXJjbGVDb250YWluZXIuYXBwZW5kQ2hpbGQoY2lyY2xlMSk7XG4gICAgICAgICAgICBjaXJjbGVDb250YWluZXIuYXBwZW5kQ2hpbGQoY2lyY2xlMik7XG5cbiAgICAgICAgICAgIHBhZ2UxLmFwcGVuZENoaWxkKHNoYWRvdyk7XG4gICAgICAgICAgICBwYWdlMS5hcHBlbmRDaGlsZChiYWNrZ3JvdW5kKTtcbiAgICAgICAgICAgIHBhZ2UxLmFwcGVuZENoaWxkKGJvcmRlcik7XG4gICAgICAgICAgICBwYWdlMS5hcHBlbmRDaGlsZChtYWtpKTtcbiAgICAgICAgICAgIHBhZ2UxLmFwcGVuZENoaWxkKGNpcmNsZUNvbnRhaW5lcik7XG5cbiAgICAgICAgICAgIHN2Zy5hcHBlbmRDaGlsZChwYWdlMSk7XG5cbiAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoc3ZnKTtcblxuICAgICAgICAgICAgLy8gaWYgbm8gZWxlbWVudCBhbmQgbm8gb2Zmc2V0IG9wdGlvbiBnaXZlbiBhcHBseSBhbiBvZmZzZXQgZm9yIHRoZSBkZWZhdWx0IG1hcmtlclxuICAgICAgICAgICAgLy8gdGhlIC0xNCBhcyB0aGUgeSB2YWx1ZSBvZiB0aGUgZGVmYXVsdCBtYXJrZXIgb2Zmc2V0IHdhcyBkZXRlcm1pbmVkIGFzIGZvbGxvd3NcbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAvLyB0aGUgbWFya2VyIHRpcCBpcyBhdCB0aGUgY2VudGVyIG9mIHRoZSBzaGFkb3cgZWxsaXBzZSBmcm9tIHRoZSBkZWZhdWx0IHN2Z1xuICAgICAgICAgICAgLy8gdGhlIHkgdmFsdWUgb2YgdGhlIGNlbnRlciBvZiB0aGUgc2hhZG93IGVsbGlwc2UgcmVsYXRpdmUgdG8gdGhlIHN2ZyB0b3AgbGVmdCBpcyBcInNoYWRvdyB0cmFuc2Zvcm0gdHJhbnNsYXRlLXkgKDI5LjApICsgZWxsaXBzZSBjeSAoNS44MDAyOTAwOClcIlxuICAgICAgICAgICAgLy8gb2Zmc2V0IHRvIHRoZSBzdmcgY2VudGVyIFwiaGVpZ2h0ICg0MSAvIDIpXCIgZ2l2ZXMgKDI5LjAgKyA1LjgwMDI5MDA4KSAtICg0MSAvIDIpIGFuZCByb3VuZGVkIGZvciBhbiBpbnRlZ2VyIHBpeGVsIG9mZnNldCBnaXZlcyAxNFxuICAgICAgICAgICAgLy8gbmVnYXRpdmUgaXMgdXNlZCB0byBtb3ZlIHRoZSBtYXJrZXIgdXAgZnJvbSB0aGUgY2VudGVyIHNvIHRoZSB0aXAgaXMgYXQgdGhlIE1hcmtlciBsbmdMYXRcbiAgICAgICAgICAgIHRoaXMuX29mZnNldCA9IFBvaW50LmNvbnZlcnQob3B0aW9ucyAmJiBvcHRpb25zLm9mZnNldCB8fCBbMCwgLTE0XSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9lbGVtZW50ID0gb3B0aW9ucy5lbGVtZW50O1xuICAgICAgICAgICAgdGhpcy5fb2Zmc2V0ID0gUG9pbnQuY29udmVydChvcHRpb25zICYmIG9wdGlvbnMub2Zmc2V0IHx8IFswLCAwXSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLW1hcmtlcicpO1xuICAgICAgICB0aGlzLl9lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIChlOiBEcmFnRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgIC8vIHByZXZlbnQgZm9jdXNpbmcgb24gY2xpY2tcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCAoKSA9PiB7XG4gICAgICAgICAgICAvLyByZXZlcnQgdGhlIGRlZmF1bHQgc2Nyb2xsaW5nIGFjdGlvbiBvZiB0aGUgY29udGFpbmVyXG4gICAgICAgICAgICBjb25zdCBlbCA9IHRoaXMuX21hcC5nZXRDb250YWluZXIoKTtcbiAgICAgICAgICAgIGVsLnNjcm9sbFRvcCA9IDA7XG4gICAgICAgICAgICBlbC5zY3JvbGxMZWZ0ID0gMDtcbiAgICAgICAgfSk7XG4gICAgICAgIGFwcGx5QW5jaG9yQ2xhc3ModGhpcy5fZWxlbWVudCwgdGhpcy5fYW5jaG9yLCAnbWFya2VyJyk7XG5cbiAgICAgICAgdGhpcy5fcG9wdXAgPSBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEF0dGFjaGVzIHRoZSBgTWFya2VyYCB0byBhIGBNYXBgIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge01hcH0gbWFwIFRoZSBNYXBib3ggR0wgSlMgbWFwIHRvIGFkZCB0aGUgbWFya2VyIHRvLlxuICAgICAqIEByZXR1cm5zIHtNYXJrZXJ9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIG1hcmtlciA9IG5ldyBtYXBib3hnbC5NYXJrZXIoKVxuICAgICAqICAgLnNldExuZ0xhdChbMzAuNSwgNTAuNV0pXG4gICAgICogICAuYWRkVG8obWFwKTsgLy8gYWRkIHRoZSBtYXJrZXIgdG8gdGhlIG1hcFxuICAgICAqL1xuICAgIGFkZFRvKG1hcDogTWFwKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlKCk7XG4gICAgICAgIHRoaXMuX21hcCA9IG1hcDtcbiAgICAgICAgbWFwLmdldENhbnZhc0NvbnRhaW5lcigpLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQpO1xuICAgICAgICBtYXAub24oJ21vdmUnLCB0aGlzLl91cGRhdGUpO1xuICAgICAgICBtYXAub24oJ21vdmVlbmQnLCB0aGlzLl91cGRhdGUpO1xuICAgICAgICB0aGlzLnNldERyYWdnYWJsZSh0aGlzLl9kcmFnZ2FibGUpO1xuICAgICAgICB0aGlzLl91cGRhdGUoKTtcblxuICAgICAgICAvLyBJZiB3ZSBhdHRhY2hlZCB0aGUgYGNsaWNrYCBsaXN0ZW5lciB0byB0aGUgbWFya2VyIGVsZW1lbnQsIHRoZSBwb3B1cFxuICAgICAgICAvLyB3b3VsZCBjbG9zZSBvbmNlIHRoZSBldmVudCBwcm9wb2dhdGVkIHRvIGBtYXBgIGR1ZSB0byB0aGVcbiAgICAgICAgLy8gYFBvcHVwI19vbkNsaWNrQ2xvc2VgIGxpc3RlbmVyLlxuICAgICAgICB0aGlzLl9tYXAub24oJ2NsaWNrJywgdGhpcy5fb25NYXBDbGljayk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgbWFya2VyIGZyb20gYSBtYXBcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBtYXJrZXIgPSBuZXcgbWFwYm94Z2wuTWFya2VyKCkuYWRkVG8obWFwKTtcbiAgICAgKiBtYXJrZXIucmVtb3ZlKCk7XG4gICAgICogQHJldHVybnMge01hcmtlcn0gYHRoaXNgXG4gICAgICovXG4gICAgcmVtb3ZlKCkge1xuICAgICAgICBpZiAodGhpcy5fbWFwKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCdjbGljaycsIHRoaXMuX29uTWFwQ2xpY2spO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9mZignbW92ZScsIHRoaXMuX3VwZGF0ZSk7XG4gICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCdtb3ZlZW5kJywgdGhpcy5fdXBkYXRlKTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ21vdXNlZG93bicsIHRoaXMuX2FkZERyYWdIYW5kbGVyKTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ3RvdWNoc3RhcnQnLCB0aGlzLl9hZGREcmFnSGFuZGxlcik7XG4gICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCdtb3VzZXVwJywgdGhpcy5fb25VcCk7XG4gICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCd0b3VjaGVuZCcsIHRoaXMuX29uVXApO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9mZignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3ZlKTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ3RvdWNobW92ZScsIHRoaXMuX29uTW92ZSk7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fbWFwO1xuICAgICAgICB9XG4gICAgICAgIERPTS5yZW1vdmUodGhpcy5fZWxlbWVudCk7XG4gICAgICAgIGlmICh0aGlzLl9wb3B1cCkgdGhpcy5fcG9wdXAucmVtb3ZlKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgbWFya2VyJ3MgZ2VvZ3JhcGhpY2FsIGxvY2F0aW9uLlxuICAgICAqXG4gICAgICogVGhlIGxvbmdpdHVkZSBvZiB0aGUgcmVzdWx0IG1heSBkaWZmZXIgYnkgYSBtdWx0aXBsZSBvZiAzNjAgZGVncmVlcyBmcm9tIHRoZSBsb25naXR1ZGUgcHJldmlvdXNseVxuICAgICAqIHNldCBieSBgc2V0TG5nTGF0YCBiZWNhdXNlIGBNYXJrZXJgIHdyYXBzIHRoZSBhbmNob3IgbG9uZ2l0dWRlIGFjcm9zcyBjb3BpZXMgb2YgdGhlIHdvcmxkIHRvIGtlZXBcbiAgICAgKiB0aGUgbWFya2VyIG9uIHNjcmVlbi5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtMbmdMYXR9IEEge0BsaW5rIExuZ0xhdH0gZGVzY3JpYmluZyB0aGUgbWFya2VyJ3MgbG9jYXRpb24uXG4gICAgKiBAZXhhbXBsZVxuICAgICogLy8gU3RvcmUgdGhlIG1hcmtlcidzIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUgY29vcmRpbmF0ZXMgaW4gYSB2YXJpYWJsZVxuICAgICogdmFyIGxuZ0xhdCA9IG1hcmtlci5nZXRMbmdMYXQoKTtcbiAgICAqIC8vIFByaW50IHRoZSBtYXJrZXIncyBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIHZhbHVlcyBpbiB0aGUgY29uc29sZVxuICAgICogY29uc29sZS5sb2coJ0xvbmdpdHVkZTogJyArIGxuZ0xhdC5sbmcgKyAnLCBMYXRpdHVkZTogJyArIGxuZ0xhdC5sYXQgKVxuICAgICogQHNlZSBbQ3JlYXRlIGEgZHJhZ2dhYmxlIE1hcmtlcl0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZHJhZy1hLW1hcmtlci8pXG4gICAgKi9cbiAgICBnZXRMbmdMYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sbmdMYXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBTZXQgdGhlIG1hcmtlcidzIGdlb2dyYXBoaWNhbCBwb3NpdGlvbiBhbmQgbW92ZSBpdC5cbiAgICAqIEBwYXJhbSB7TG5nTGF0fSBsbmdsYXQgQSB7QGxpbmsgTG5nTGF0fSBkZXNjcmliaW5nIHdoZXJlIHRoZSBtYXJrZXIgc2hvdWxkIGJlIGxvY2F0ZWQuXG4gICAgKiBAcmV0dXJucyB7TWFya2VyfSBgdGhpc2BcbiAgICAqIEBleGFtcGxlXG4gICAgKiAvLyBDcmVhdGUgYSBuZXcgbWFya2VyLCBzZXQgdGhlIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUsIGFuZCBhZGQgaXQgdG8gdGhlIG1hcFxuICAgICogbmV3IG1hcGJveGdsLk1hcmtlcigpXG4gICAgKiAgIC5zZXRMbmdMYXQoWy02NS4wMTcsIC0xNi40NTddKVxuICAgICogICAuYWRkVG8obWFwKTtcbiAgICAqIEBzZWUgW0FkZCBjdXN0b20gaWNvbnMgd2l0aCBNYXJrZXJzXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9jdXN0b20tbWFya2VyLWljb25zLylcbiAgICAqIEBzZWUgW0NyZWF0ZSBhIGRyYWdnYWJsZSBNYXJrZXJdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL2RyYWctYS1tYXJrZXIvKVxuICAgICogQHNlZSBbQWRkIGEgbWFya2VyIHVzaW5nIGEgcGxhY2UgbmFtZV0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvbWFya2VyLWZyb20tZ2VvY29kZS8pXG4gICAgKi9cbiAgICBzZXRMbmdMYXQobG5nbGF0OiBMbmdMYXRMaWtlKSB7XG4gICAgICAgIHRoaXMuX2xuZ0xhdCA9IExuZ0xhdC5jb252ZXJ0KGxuZ2xhdCk7XG4gICAgICAgIHRoaXMuX3BvcyA9IG51bGw7XG4gICAgICAgIGlmICh0aGlzLl9wb3B1cCkgdGhpcy5fcG9wdXAuc2V0TG5nTGF0KHRoaXMuX2xuZ0xhdCk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBgTWFya2VyYCdzIEhUTUwgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAgICAgKi9cbiAgICBnZXRFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWxlbWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCaW5kcyBhIHtAbGluayBQb3B1cH0gdG8gdGhlIHtAbGluayBNYXJrZXJ9LlxuICAgICAqIEBwYXJhbSBwb3B1cCBBbiBpbnN0YW5jZSBvZiB0aGUge0BsaW5rIFBvcHVwfSBjbGFzcy4gSWYgdW5kZWZpbmVkIG9yIG51bGwsIGFueSBwb3B1cFxuICAgICAqIHNldCBvbiB0aGlzIHtAbGluayBNYXJrZXJ9IGluc3RhbmNlIGlzIHVuc2V0LlxuICAgICAqIEByZXR1cm5zIHtNYXJrZXJ9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIG1hcmtlciA9IG5ldyBtYXBib3hnbC5NYXJrZXIoKVxuICAgICAqICAuc2V0TG5nTGF0KFswLCAwXSlcbiAgICAgKiAgLnNldFBvcHVwKG5ldyBtYXBib3hnbC5Qb3B1cCgpLnNldEhUTUwoXCI8aDE+SGVsbG8gV29ybGQhPC9oMT5cIikpIC8vIGFkZCBwb3B1cFxuICAgICAqICAuYWRkVG8obWFwKTtcbiAgICAgKiBAc2VlIFtBdHRhY2ggYSBwb3B1cCB0byBhIG1hcmtlciBpbnN0YW5jZV0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvc2V0LXBvcHVwLylcbiAgICAgKi9cbiAgICBzZXRQb3B1cChwb3B1cDogP1BvcHVwKSB7XG4gICAgICAgIGlmICh0aGlzLl9wb3B1cCkge1xuICAgICAgICAgICAgdGhpcy5fcG9wdXAucmVtb3ZlKCk7XG4gICAgICAgICAgICB0aGlzLl9wb3B1cCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXByZXNzJywgdGhpcy5fb25LZXlQcmVzcyk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fb3JpZ2luYWxUYWJJbmRleCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCd0YWJpbmRleCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBvcHVwKSB7XG4gICAgICAgICAgICBpZiAoISgnb2Zmc2V0JyBpbiBwb3B1cC5vcHRpb25zKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hcmtlckhlaWdodCA9IDQxIC0gKDUuOCAvIDIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hcmtlclJhZGl1cyA9IDEzLjU7XG4gICAgICAgICAgICAgICAgY29uc3QgbGluZWFyT2Zmc2V0ID0gTWF0aC5zcXJ0KE1hdGgucG93KG1hcmtlclJhZGl1cywgMikgLyAyKTtcbiAgICAgICAgICAgICAgICBwb3B1cC5vcHRpb25zLm9mZnNldCA9IHRoaXMuX2RlZmF1bHRNYXJrZXIgPyB7XG4gICAgICAgICAgICAgICAgICAgICd0b3AnOiBbMCwgMF0sXG4gICAgICAgICAgICAgICAgICAgICd0b3AtbGVmdCc6IFswLCAwXSxcbiAgICAgICAgICAgICAgICAgICAgJ3RvcC1yaWdodCc6IFswLCAwXSxcbiAgICAgICAgICAgICAgICAgICAgJ2JvdHRvbSc6IFswLCAtbWFya2VySGVpZ2h0XSxcbiAgICAgICAgICAgICAgICAgICAgJ2JvdHRvbS1sZWZ0JzogW2xpbmVhck9mZnNldCwgKG1hcmtlckhlaWdodCAtIG1hcmtlclJhZGl1cyArIGxpbmVhck9mZnNldCkgKiAtMV0sXG4gICAgICAgICAgICAgICAgICAgICdib3R0b20tcmlnaHQnOiBbLWxpbmVhck9mZnNldCwgKG1hcmtlckhlaWdodCAtIG1hcmtlclJhZGl1cyArIGxpbmVhck9mZnNldCkgKiAtMV0sXG4gICAgICAgICAgICAgICAgICAgICdsZWZ0JzogW21hcmtlclJhZGl1cywgKG1hcmtlckhlaWdodCAtIG1hcmtlclJhZGl1cykgKiAtMV0sXG4gICAgICAgICAgICAgICAgICAgICdyaWdodCc6IFstbWFya2VyUmFkaXVzLCAobWFya2VySGVpZ2h0IC0gbWFya2VyUmFkaXVzKSAqIC0xXVxuICAgICAgICAgICAgICAgIH0gOiB0aGlzLl9vZmZzZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9wb3B1cCA9IHBvcHVwO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2xuZ0xhdCkgdGhpcy5fcG9wdXAuc2V0TG5nTGF0KHRoaXMuX2xuZ0xhdCk7XG5cbiAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsVGFiSW5kZXggPSB0aGlzLl9lbGVtZW50LmdldEF0dHJpYnV0ZSgndGFiaW5kZXgnKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5fb3JpZ2luYWxUYWJJbmRleCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICcwJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXByZXNzJywgdGhpcy5fb25LZXlQcmVzcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBfb25LZXlQcmVzcyhlOiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGNvZGUgPSBlLmNvZGU7XG4gICAgICAgIGNvbnN0IGxlZ2FjeUNvZGUgPSBlLmNoYXJDb2RlIHx8IGUua2V5Q29kZTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAoY29kZSA9PT0gJ1NwYWNlJykgfHwgKGNvZGUgPT09ICdFbnRlcicpIHx8XG4gICAgICAgICAgICAobGVnYWN5Q29kZSA9PT0gMzIpIHx8IChsZWdhY3lDb2RlID09PSAxMykgLy8gc3BhY2Ugb3IgZW50ZXJcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZVBvcHVwKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfb25NYXBDbGljayhlOiBNYXBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSBlLm9yaWdpbmFsRXZlbnQudGFyZ2V0O1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fZWxlbWVudDtcblxuICAgICAgICBpZiAodGhpcy5fcG9wdXAgJiYgKHRhcmdldEVsZW1lbnQgPT09IGVsZW1lbnQgfHwgZWxlbWVudC5jb250YWlucygodGFyZ2V0RWxlbWVudDogYW55KSkpKSB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZVBvcHVwKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB7QGxpbmsgUG9wdXB9IGluc3RhbmNlIHRoYXQgaXMgYm91bmQgdG8gdGhlIHtAbGluayBNYXJrZXJ9LlxuICAgICAqIEByZXR1cm5zIHtQb3B1cH0gcG9wdXBcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHZhciBtYXJrZXIgPSBuZXcgbWFwYm94Z2wuTWFya2VyKClcbiAgICAgKiAgLnNldExuZ0xhdChbMCwgMF0pXG4gICAgICogIC5zZXRQb3B1cChuZXcgbWFwYm94Z2wuUG9wdXAoKS5zZXRIVE1MKFwiPGgxPkhlbGxvIFdvcmxkITwvaDE+XCIpKVxuICAgICAqICAuYWRkVG8obWFwKTtcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKG1hcmtlci5nZXRQb3B1cCgpKTsgLy8gcmV0dXJuIHRoZSBwb3B1cCBpbnN0YW5jZVxuICAgICAqL1xuICAgIGdldFBvcHVwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcG9wdXA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT3BlbnMgb3IgY2xvc2VzIHRoZSB7QGxpbmsgUG9wdXB9IGluc3RhbmNlIHRoYXQgaXMgYm91bmQgdG8gdGhlIHtAbGluayBNYXJrZXJ9LCBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHtAbGluayBQb3B1cH0uXG4gICAgICogQHJldHVybnMge01hcmtlcn0gYHRoaXNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgbWFya2VyID0gbmV3IG1hcGJveGdsLk1hcmtlcigpXG4gICAgICogIC5zZXRMbmdMYXQoWzAsIDBdKVxuICAgICAqICAuc2V0UG9wdXAobmV3IG1hcGJveGdsLlBvcHVwKCkuc2V0SFRNTChcIjxoMT5IZWxsbyBXb3JsZCE8L2gxPlwiKSlcbiAgICAgKiAgLmFkZFRvKG1hcCk7XG4gICAgICpcbiAgICAgKiBtYXJrZXIudG9nZ2xlUG9wdXAoKTsgLy8gdG9nZ2xlIHBvcHVwIG9wZW4gb3IgY2xvc2VkXG4gICAgICovXG4gICAgdG9nZ2xlUG9wdXAoKSB7XG4gICAgICAgIGNvbnN0IHBvcHVwID0gdGhpcy5fcG9wdXA7XG5cbiAgICAgICAgaWYgKCFwb3B1cCkgcmV0dXJuIHRoaXM7XG4gICAgICAgIGVsc2UgaWYgKHBvcHVwLmlzT3BlbigpKSBwb3B1cC5yZW1vdmUoKTtcbiAgICAgICAgZWxzZSBwb3B1cC5hZGRUbyh0aGlzLl9tYXApO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBfdXBkYXRlKGU/OiB7dHlwZTogJ21vdmUnIHwgJ21vdmVlbmQnfSkge1xuICAgICAgICBpZiAoIXRoaXMuX21hcCkgcmV0dXJuO1xuXG4gICAgICAgIGlmICh0aGlzLl9tYXAudHJhbnNmb3JtLnJlbmRlcldvcmxkQ29waWVzKSB7XG4gICAgICAgICAgICB0aGlzLl9sbmdMYXQgPSBzbWFydFdyYXAodGhpcy5fbG5nTGF0LCB0aGlzLl9wb3MsIHRoaXMuX21hcC50cmFuc2Zvcm0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcG9zID0gdGhpcy5fbWFwLnByb2plY3QodGhpcy5fbG5nTGF0KS5fYWRkKHRoaXMuX29mZnNldCk7XG5cbiAgICAgICAgbGV0IHJvdGF0aW9uID0gXCJcIjtcbiAgICAgICAgaWYgKHRoaXMuX3JvdGF0aW9uQWxpZ25tZW50ID09PSBcInZpZXdwb3J0XCIgfHwgdGhpcy5fcm90YXRpb25BbGlnbm1lbnQgPT09IFwiYXV0b1wiKSB7XG4gICAgICAgICAgICByb3RhdGlvbiA9IGByb3RhdGVaKCR7dGhpcy5fcm90YXRpb259ZGVnKWA7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fcm90YXRpb25BbGlnbm1lbnQgPT09IFwibWFwXCIpIHtcbiAgICAgICAgICAgIHJvdGF0aW9uID0gYHJvdGF0ZVooJHt0aGlzLl9yb3RhdGlvbiAtIHRoaXMuX21hcC5nZXRCZWFyaW5nKCl9ZGVnKWA7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcGl0Y2ggPSBcIlwiO1xuICAgICAgICBpZiAodGhpcy5fcGl0Y2hBbGlnbm1lbnQgPT09IFwidmlld3BvcnRcIiB8fCB0aGlzLl9waXRjaEFsaWdubWVudCA9PT0gXCJhdXRvXCIpIHtcbiAgICAgICAgICAgIHBpdGNoID0gXCJyb3RhdGVYKDBkZWcpXCI7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fcGl0Y2hBbGlnbm1lbnQgPT09IFwibWFwXCIpIHtcbiAgICAgICAgICAgIHBpdGNoID0gYHJvdGF0ZVgoJHt0aGlzLl9tYXAuZ2V0UGl0Y2goKX1kZWcpYDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGJlY2F1c2Ugcm91bmRpbmcgdGhlIGNvb3JkaW5hdGVzIGF0IGV2ZXJ5IGBtb3ZlYCBldmVudCBjYXVzZXMgc3R1dHRlcmVkIHpvb21pbmdcbiAgICAgICAgLy8gd2Ugb25seSByb3VuZCB0aGVtIHdoZW4gX3VwZGF0ZSBpcyBjYWxsZWQgd2l0aCBgbW92ZWVuZGAgb3Igd2hlbiBpdHMgY2FsbGVkIHdpdGhcbiAgICAgICAgLy8gbm8gYXJndW1lbnRzICh3aGVuIHRoZSBNYXJrZXIgaXMgaW5pdGlhbGl6ZWQgb3IgTWFya2VyI3NldExuZ0xhdCBpcyBpbnZva2VkKS5cbiAgICAgICAgaWYgKCFlIHx8IGUudHlwZSA9PT0gXCJtb3ZlZW5kXCIpIHtcbiAgICAgICAgICAgIHRoaXMuX3BvcyA9IHRoaXMuX3Bvcy5yb3VuZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgRE9NLnNldFRyYW5zZm9ybSh0aGlzLl9lbGVtZW50LCBgJHthbmNob3JUcmFuc2xhdGVbdGhpcy5fYW5jaG9yXX0gdHJhbnNsYXRlKCR7dGhpcy5fcG9zLnh9cHgsICR7dGhpcy5fcG9zLnl9cHgpICR7cGl0Y2h9ICR7cm90YXRpb259YCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBtYXJrZXIncyBvZmZzZXQuXG4gICAgICogQHJldHVybnMge1BvaW50fSBUaGUgbWFya2VyJ3Mgc2NyZWVuIGNvb3JkaW5hdGVzIGluIHBpeGVscy5cbiAgICAgKi9cbiAgICBnZXRPZmZzZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vZmZzZXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgb2Zmc2V0IG9mIHRoZSBtYXJrZXJcbiAgICAgKiBAcGFyYW0ge1BvaW50TGlrZX0gb2Zmc2V0IFRoZSBvZmZzZXQgaW4gcGl4ZWxzIGFzIGEge0BsaW5rIFBvaW50TGlrZX0gb2JqZWN0IHRvIGFwcGx5IHJlbGF0aXZlIHRvIHRoZSBlbGVtZW50J3MgY2VudGVyLiBOZWdhdGl2ZXMgaW5kaWNhdGUgbGVmdCBhbmQgdXAuXG4gICAgICogQHJldHVybnMge01hcmtlcn0gYHRoaXNgXG4gICAgICovXG4gICAgc2V0T2Zmc2V0KG9mZnNldDogUG9pbnRMaWtlKSB7XG4gICAgICAgIHRoaXMuX29mZnNldCA9IFBvaW50LmNvbnZlcnQob2Zmc2V0KTtcbiAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIF9vbk1vdmUoZTogTWFwTW91c2VFdmVudCB8IE1hcFRvdWNoRXZlbnQpIHtcbiAgICAgICAgdGhpcy5fcG9zID0gZS5wb2ludC5zdWIodGhpcy5fcG9zaXRpb25EZWx0YSk7XG4gICAgICAgIHRoaXMuX2xuZ0xhdCA9IHRoaXMuX21hcC51bnByb2plY3QodGhpcy5fcG9zKTtcbiAgICAgICAgdGhpcy5zZXRMbmdMYXQodGhpcy5fbG5nTGF0KTtcbiAgICAgICAgLy8gc3VwcHJlc3MgY2xpY2sgZXZlbnQgc28gdGhhdCBwb3B1cHMgZG9uJ3QgdG9nZ2xlIG9uIGRyYWdcbiAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xuXG4gICAgICAgIC8vIG1ha2Ugc3VyZSBkcmFnc3RhcnQgb25seSBmaXJlcyBvbiB0aGUgZmlyc3QgbW92ZSBldmVudCBhZnRlciBtb3VzZWRvd24uXG4gICAgICAgIC8vIHRoaXMgY2FuJ3QgYmUgb24gbW91c2Vkb3duIGJlY2F1c2UgdGhhdCBldmVudCBkb2Vzbid0IG5lY2Vzc2FyaWx5XG4gICAgICAgIC8vIGltcGx5IHRoYXQgYSBkcmFnIGlzIGFib3V0IHRvIGhhcHBlbi5cbiAgICAgICAgaWYgKHRoaXMuX3N0YXRlID09PSAncGVuZGluZycpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gJ2FjdGl2ZSc7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogRmlyZWQgd2hlbiBkcmFnZ2luZyBzdGFydHNcbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBAZXZlbnQgZHJhZ3N0YXJ0XG4gICAgICAgICAgICAgKiBAbWVtYmVyb2YgTWFya2VyXG4gICAgICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICAgICAgICAgKiBAcHJvcGVydHkge01hcmtlcn0gbWFya2VyIG9iamVjdCB0aGF0IGlzIGJlaW5nIGRyYWdnZWRcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZHJhZ3N0YXJ0JykpO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVkIHdoaWxlIGRyYWdnaW5nXG4gICAgICAgICAqXG4gICAgICAgICAqIEBldmVudCBkcmFnXG4gICAgICAgICAqIEBtZW1iZXJvZiBNYXJrZXJcbiAgICAgICAgICogQGluc3RhbmNlXG4gICAgICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICAgICAqIEBwcm9wZXJ0eSB7TWFya2VyfSBtYXJrZXIgb2JqZWN0IHRoYXQgaXMgYmVpbmcgZHJhZ2dlZFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZHJhZycpKTtcbiAgICB9XG5cbiAgICBfb25VcCgpIHtcbiAgICAgICAgLy8gcmV2ZXJ0IHRvIG5vcm1hbCBwb2ludGVyIGV2ZW50IGhhbmRsaW5nXG4gICAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhdXRvJztcbiAgICAgICAgdGhpcy5fcG9zaXRpb25EZWx0YSA9IG51bGw7XG4gICAgICAgIHRoaXMuX21hcC5vZmYoJ21vdXNlbW92ZScsIHRoaXMuX29uTW92ZSk7XG4gICAgICAgIHRoaXMuX21hcC5vZmYoJ3RvdWNobW92ZScsIHRoaXMuX29uTW92ZSk7XG5cbiAgICAgICAgLy8gb25seSBmaXJlIGRyYWdlbmQgaWYgaXQgd2FzIHByZWNlZGVkIGJ5IGF0IGxlYXN0IG9uZSBkcmFnIGV2ZW50XG4gICAgICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gJ2FjdGl2ZScpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgKiBGaXJlZCB3aGVuIHRoZSBtYXJrZXIgaXMgZmluaXNoZWQgYmVpbmcgZHJhZ2dlZFxuICAgICAgICAgICAgKlxuICAgICAgICAgICAgKiBAZXZlbnQgZHJhZ2VuZFxuICAgICAgICAgICAgKiBAbWVtYmVyb2YgTWFya2VyXG4gICAgICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAgICAgICAgKiBAcHJvcGVydHkge01hcmtlcn0gbWFya2VyIG9iamVjdCB0aGF0IHdhcyBkcmFnZ2VkXG4gICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgnZHJhZ2VuZCcpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3N0YXRlID0gJ2luYWN0aXZlJztcbiAgICB9XG5cbiAgICBfYWRkRHJhZ0hhbmRsZXIoZTogTWFwTW91c2VFdmVudCB8IE1hcFRvdWNoRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuX2VsZW1lbnQuY29udGFpbnMoKGUub3JpZ2luYWxFdmVudC50YXJnZXQ6IGFueSkpKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBwaXhlbCBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBjbGljayBwb2ludFxuICAgICAgICAgICAgLy8gYW5kIHRoZSBtYXJrZXIgcG9zaXRpb24sIHdpdGggdGhlIG9mZnNldCBhY2NvdW50ZWQgZm9yLiBUaGVuIHdlXG4gICAgICAgICAgICAvLyBjYW4gc3VidHJhY3QgdGhpcyBkaXN0YW5jZSBmcm9tIHRoZSBtb3VzZW1vdmUgZXZlbnQncyBwb3NpdGlvblxuICAgICAgICAgICAgLy8gdG8gY2FsY3VsYXRlIHRoZSBuZXcgbWFya2VyIHBvc2l0aW9uLlxuICAgICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgZG8gdGhpcywgdGhlIG1hcmtlciAnanVtcHMnIHRvIHRoZSBjbGljayBwb3NpdGlvblxuICAgICAgICAgICAgLy8gY3JlYXRpbmcgYSBqYXJyaW5nIFVYIGVmZmVjdC5cbiAgICAgICAgICAgIHRoaXMuX3Bvc2l0aW9uRGVsdGEgPSBlLnBvaW50LnN1Yih0aGlzLl9wb3MpLmFkZCh0aGlzLl9vZmZzZXQpO1xuXG4gICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdwZW5kaW5nJztcbiAgICAgICAgICAgIHRoaXMuX21hcC5vbignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3ZlKTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vbigndG91Y2htb3ZlJywgdGhpcy5fb25Nb3ZlKTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vbmNlKCdtb3VzZXVwJywgdGhpcy5fb25VcCk7XG4gICAgICAgICAgICB0aGlzLl9tYXAub25jZSgndG91Y2hlbmQnLCB0aGlzLl9vblVwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGBkcmFnZ2FibGVgIHByb3BlcnR5IGFuZCBmdW5jdGlvbmFsaXR5IG9mIHRoZSBtYXJrZXJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzaG91bGRCZURyYWdnYWJsZT1mYWxzZV0gVHVybnMgZHJhZyBmdW5jdGlvbmFsaXR5IG9uL29mZlxuICAgICAqIEByZXR1cm5zIHtNYXJrZXJ9IGB0aGlzYFxuICAgICAqL1xuICAgIHNldERyYWdnYWJsZShzaG91bGRCZURyYWdnYWJsZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9kcmFnZ2FibGUgPSAhIXNob3VsZEJlRHJhZ2dhYmxlOyAvLyBjb252ZXJ0IHBvc3NpYmxlIHVuZGVmaW5lZCB2YWx1ZSB0byBmYWxzZVxuXG4gICAgICAgIC8vIGhhbmRsZSBjYXNlIHdoZXJlIG1hcCBtYXkgbm90IGV4aXN0IHlldFxuICAgICAgICAvLyBlLmcuIHdoZW4gc2V0RHJhZ2dhYmxlIGlzIGNhbGxlZCBiZWZvcmUgYWRkVG9cbiAgICAgICAgaWYgKHRoaXMuX21hcCkge1xuICAgICAgICAgICAgaWYgKHNob3VsZEJlRHJhZ2dhYmxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFwLm9uKCdtb3VzZWRvd24nLCB0aGlzLl9hZGREcmFnSGFuZGxlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFwLm9uKCd0b3VjaHN0YXJ0JywgdGhpcy5fYWRkRHJhZ0hhbmRsZXIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCdtb3VzZWRvd24nLCB0aGlzLl9hZGREcmFnSGFuZGxlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWFwLm9mZigndG91Y2hzdGFydCcsIHRoaXMuX2FkZERyYWdIYW5kbGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbWFya2VyIGNhbiBiZSBkcmFnZ2VkXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIG1hcmtlciBpcyBkcmFnZ2FibGUuXG4gICAgICovXG4gICAgaXNEcmFnZ2FibGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kcmFnZ2FibGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYHJvdGF0aW9uYCBwcm9wZXJ0eSBvZiB0aGUgbWFya2VyLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbcm90YXRpb249MF0gVGhlIHJvdGF0aW9uIGFuZ2xlIG9mIHRoZSBtYXJrZXIgKGNsb2Nrd2lzZSwgaW4gZGVncmVlcyksIHJlbGF0aXZlIHRvIGl0cyByZXNwZWN0aXZlIHtAbGluayBNYXJrZXIjcm90YXRpb25BbGlnbm1lbnR9IHNldHRpbmcuXG4gICAgICogQHJldHVybnMge01hcmtlcn0gYHRoaXNgXG4gICAgICovXG4gICAgc2V0Um90YXRpb24ocm90YXRpb246IG51bWJlcikge1xuICAgICAgICB0aGlzLl9yb3RhdGlvbiA9IHJvdGF0aW9uIHx8IDA7XG4gICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHJvdGF0aW9uIGFuZ2xlIG9mIHRoZSBtYXJrZXIgKGluIGRlZ3JlZXMpLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBjdXJyZW50IHJvdGF0aW9uIGFuZ2xlIG9mIHRoZSBtYXJrZXIuXG4gICAgICovXG4gICAgZ2V0Um90YXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3RhdGlvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBgcm90YXRpb25BbGlnbm1lbnRgIHByb3BlcnR5IG9mIHRoZSBtYXJrZXIuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFthbGlnbm1lbnQ9J2F1dG8nXSBTZXRzIHRoZSBgcm90YXRpb25BbGlnbm1lbnRgIHByb3BlcnR5IG9mIHRoZSBtYXJrZXIuXG4gICAgICogQHJldHVybnMge01hcmtlcn0gYHRoaXNgXG4gICAgICovXG4gICAgc2V0Um90YXRpb25BbGlnbm1lbnQoYWxpZ25tZW50OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fcm90YXRpb25BbGlnbm1lbnQgPSBhbGlnbm1lbnQgfHwgJ2F1dG8nO1xuICAgICAgICB0aGlzLl91cGRhdGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBgcm90YXRpb25BbGlnbm1lbnRgIHByb3BlcnR5IG9mIHRoZSBtYXJrZXIuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGN1cnJlbnQgcm90YXRpb25hbCBhbGlnbm1lbnQgb2YgdGhlIG1hcmtlci5cbiAgICAgKi9cbiAgICBnZXRSb3RhdGlvbkFsaWdubWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JvdGF0aW9uQWxpZ25tZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGBwaXRjaEFsaWdubWVudGAgcHJvcGVydHkgb2YgdGhlIG1hcmtlci5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2FsaWdubWVudF0gU2V0cyB0aGUgYHBpdGNoQWxpZ25tZW50YCBwcm9wZXJ0eSBvZiB0aGUgbWFya2VyLiBJZiBhbGlnbm1lbnQgaXMgJ2F1dG8nLCBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgbWF0Y2ggYHJvdGF0aW9uQWxpZ25tZW50YC5cbiAgICAgKiBAcmV0dXJucyB7TWFya2VyfSBgdGhpc2BcbiAgICAgKi9cbiAgICBzZXRQaXRjaEFsaWdubWVudChhbGlnbm1lbnQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9waXRjaEFsaWdubWVudCA9IGFsaWdubWVudCAmJiBhbGlnbm1lbnQgIT09ICdhdXRvJyA/IGFsaWdubWVudCA6IHRoaXMuX3JvdGF0aW9uQWxpZ25tZW50O1xuICAgICAgICB0aGlzLl91cGRhdGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBgcGl0Y2hBbGlnbm1lbnRgIHByb3BlcnR5IG9mIHRoZSBtYXJrZXIuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGN1cnJlbnQgcGl0Y2ggYWxpZ25tZW50IG9mIHRoZSBtYXJrZXIgaW4gZGVncmVlcy5cbiAgICAgKi9cbiAgICBnZXRQaXRjaEFsaWdubWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BpdGNoQWxpZ25tZW50O1xuICAgIH1cbn1cbiIsIi8vIEBmbG93XG5cbmltcG9ydCB7RXZlbnQsIEV2ZW50ZWR9IGZyb20gJy4uLy4uL3V0aWwvZXZlbnRlZCc7XG5pbXBvcnQgRE9NIGZyb20gJy4uLy4uL3V0aWwvZG9tJztcbmltcG9ydCB3aW5kb3cgZnJvbSAnLi4vLi4vdXRpbC93aW5kb3cnO1xuaW1wb3J0IHtleHRlbmQsIGJpbmRBbGwsIHdhcm5PbmNlfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IExuZ0xhdCBmcm9tICcuLi8uLi9nZW8vbG5nX2xhdCc7XG5pbXBvcnQgTWFya2VyIGZyb20gJy4uL21hcmtlcic7XG5cbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuLi9tYXAnO1xuaW1wb3J0IHR5cGUge0FuaW1hdGlvbk9wdGlvbnMsIENhbWVyYU9wdGlvbnN9IGZyb20gJy4uL2NhbWVyYSc7XG5cbnR5cGUgT3B0aW9ucyA9IHtcbiAgICBwb3NpdGlvbk9wdGlvbnM/OiBQb3NpdGlvbk9wdGlvbnMsXG4gICAgZml0Qm91bmRzT3B0aW9ucz86IEFuaW1hdGlvbk9wdGlvbnMgJiBDYW1lcmFPcHRpb25zLFxuICAgIHRyYWNrVXNlckxvY2F0aW9uPzogYm9vbGVhbixcbiAgICBzaG93QWNjdXJhY3lDaXJjbGU/OiBib29sZWFuLFxuICAgIHNob3dVc2VyTG9jYXRpb24/OiBib29sZWFuXG59O1xuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogT3B0aW9ucyA9IHtcbiAgICBwb3NpdGlvbk9wdGlvbnM6IHtcbiAgICAgICAgZW5hYmxlSGlnaEFjY3VyYWN5OiBmYWxzZSxcbiAgICAgICAgbWF4aW11bUFnZTogMCxcbiAgICAgICAgdGltZW91dDogNjAwMCAvKiA2IHNlYyAqL1xuICAgIH0sXG4gICAgZml0Qm91bmRzT3B0aW9uczoge1xuICAgICAgICBtYXhab29tOiAxNVxuICAgIH0sXG4gICAgdHJhY2tVc2VyTG9jYXRpb246IGZhbHNlLFxuICAgIHNob3dBY2N1cmFjeUNpcmNsZTogdHJ1ZSxcbiAgICBzaG93VXNlckxvY2F0aW9uOiB0cnVlXG59O1xuXG5sZXQgc3VwcG9ydHNHZW9sb2NhdGlvbjtcblxuZnVuY3Rpb24gY2hlY2tHZW9sb2NhdGlvblN1cHBvcnQoY2FsbGJhY2spIHtcbiAgICBpZiAoc3VwcG9ydHNHZW9sb2NhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNhbGxiYWNrKHN1cHBvcnRzR2VvbG9jYXRpb24pO1xuXG4gICAgfSBlbHNlIGlmICh3aW5kb3cubmF2aWdhdG9yLnBlcm1pc3Npb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gbmF2aWdhdG9yLnBlcm1pc3Npb25zIGhhcyBpbmNvbXBsZXRlIGJyb3dzZXIgc3VwcG9ydFxuICAgICAgICAvLyBodHRwOi8vY2FuaXVzZS5jb20vI2ZlYXQ9cGVybWlzc2lvbnMtYXBpXG4gICAgICAgIC8vIFRlc3QgZm9yIHRoZSBjYXNlIHdoZXJlIGEgYnJvd3NlciBkaXNhYmxlcyBHZW9sb2NhdGlvbiBiZWNhdXNlIG9mIGFuXG4gICAgICAgIC8vIGluc2VjdXJlIG9yaWdpblxuICAgICAgICB3aW5kb3cubmF2aWdhdG9yLnBlcm1pc3Npb25zLnF1ZXJ5KHtuYW1lOiAnZ2VvbG9jYXRpb24nfSkudGhlbigocCkgPT4ge1xuICAgICAgICAgICAgc3VwcG9ydHNHZW9sb2NhdGlvbiA9IHAuc3RhdGUgIT09ICdkZW5pZWQnO1xuICAgICAgICAgICAgY2FsbGJhY2soc3VwcG9ydHNHZW9sb2NhdGlvbik7XG4gICAgICAgIH0pO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgc3VwcG9ydHNHZW9sb2NhdGlvbiA9ICEhd2luZG93Lm5hdmlnYXRvci5nZW9sb2NhdGlvbjtcbiAgICAgICAgY2FsbGJhY2soc3VwcG9ydHNHZW9sb2NhdGlvbik7XG4gICAgfVxufVxuXG5sZXQgbnVtYmVyT2ZXYXRjaGVzID0gMDtcbmxldCBub1RpbWVvdXQgPSBmYWxzZTtcblxuLyoqXG4gKiBBIGBHZW9sb2NhdGVDb250cm9sYCBjb250cm9sIHByb3ZpZGVzIGEgYnV0dG9uIHRoYXQgdXNlcyB0aGUgYnJvd3NlcidzIGdlb2xvY2F0aW9uXG4gKiBBUEkgdG8gbG9jYXRlIHRoZSB1c2VyIG9uIHRoZSBtYXAuXG4gKlxuICogTm90IGFsbCBicm93c2VycyBzdXBwb3J0IGdlb2xvY2F0aW9uLFxuICogYW5kIHNvbWUgdXNlcnMgbWF5IGRpc2FibGUgdGhlIGZlYXR1cmUuIEdlb2xvY2F0aW9uIHN1cHBvcnQgZm9yIG1vZGVyblxuICogYnJvd3NlcnMgaW5jbHVkaW5nIENocm9tZSByZXF1aXJlcyBzaXRlcyB0byBiZSBzZXJ2ZWQgb3ZlciBIVFRQUy4gSWZcbiAqIGdlb2xvY2F0aW9uIHN1cHBvcnQgaXMgbm90IGF2YWlsYWJsZSwgdGhlIEdlb2xvY2F0ZUNvbnRyb2wgd2lsbCBub3RcbiAqIGJlIHZpc2libGUuXG4gKlxuICogVGhlIHpvb20gbGV2ZWwgYXBwbGllZCB3aWxsIGRlcGVuZCBvbiB0aGUgYWNjdXJhY3kgb2YgdGhlIGdlb2xvY2F0aW9uIHByb3ZpZGVkIGJ5IHRoZSBkZXZpY2UuXG4gKlxuICogVGhlIEdlb2xvY2F0ZUNvbnRyb2wgaGFzIHR3byBtb2Rlcy4gSWYgYHRyYWNrVXNlckxvY2F0aW9uYCBpcyBgZmFsc2VgIChkZWZhdWx0KSB0aGUgY29udHJvbCBhY3RzIGFzIGEgYnV0dG9uLCB3aGljaCB3aGVuIHByZXNzZWQgd2lsbCBzZXQgdGhlIG1hcCdzIGNhbWVyYSB0byB0YXJnZXQgdGhlIHVzZXIgbG9jYXRpb24uIElmIHRoZSB1c2VyIG1vdmVzLCB0aGUgbWFwIHdvbid0IHVwZGF0ZS4gVGhpcyBpcyBtb3N0IHN1aXRlZCBmb3IgdGhlIGRlc2t0b3AuIElmIGB0cmFja1VzZXJMb2NhdGlvbmAgaXMgYHRydWVgIHRoZSBjb250cm9sIGFjdHMgYXMgYSB0b2dnbGUgYnV0dG9uIHRoYXQgd2hlbiBhY3RpdmUgdGhlIHVzZXIncyBsb2NhdGlvbiBpcyBhY3RpdmVseSBtb25pdG9yZWQgZm9yIGNoYW5nZXMuIEluIHRoaXMgbW9kZSB0aGUgR2VvbG9jYXRlQ29udHJvbCBoYXMgdGhyZWUgaW50ZXJhY3Rpb24gc3RhdGVzOlxuICogKiBhY3RpdmUgLSB0aGUgbWFwJ3MgY2FtZXJhIGF1dG9tYXRpY2FsbHkgdXBkYXRlcyBhcyB0aGUgdXNlcidzIGxvY2F0aW9uIGNoYW5nZXMsIGtlZXBpbmcgdGhlIGxvY2F0aW9uIGRvdCBpbiB0aGUgY2VudGVyLiBJbml0aWFsIHN0YXRlIGFuZCB1cG9uIGNsaWNraW5nIHRoZSBgR2VvbG9jYXRlQ29udHJvbGAgYnV0dG9uLlxuICogKiBwYXNzaXZlIC0gdGhlIHVzZXIncyBsb2NhdGlvbiBkb3QgYXV0b21hdGljYWxseSB1cGRhdGVzLCBidXQgdGhlIG1hcCdzIGNhbWVyYSBkb2VzIG5vdC4gT2NjdXJzIHVwb24gdGhlIHVzZXIgaW5pdGlhdGluZyBhIG1hcCBtb3ZlbWVudC5cbiAqICogZGlzYWJsZWQgLSBvY2N1cnMgaWYgR2VvbG9jYXRpb24gaXMgbm90IGF2YWlsYWJsZSwgZGlzYWJsZWQgb3IgZGVuaWVkLlxuICpcbiAqIFRoZXNlIGludGVyYWN0aW9uIHN0YXRlcyBjYW4ndCBiZSBjb250cm9sbGVkIHByb2dyYW1tYXRpY2FsbHksIHJhdGhlciB0aGV5IGFyZSBzZXQgYmFzZWQgb24gdXNlciBpbnRlcmFjdGlvbnMuXG4gKlxuICogQGltcGxlbWVudHMge0lDb250cm9sfVxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnBvc2l0aW9uT3B0aW9ucz17ZW5hYmxlSGlnaEFjY3VyYWN5OiBmYWxzZSwgdGltZW91dDogNjAwMH1dIEEgR2VvbG9jYXRpb24gQVBJIFtQb3NpdGlvbk9wdGlvbnNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Qb3NpdGlvbk9wdGlvbnMpIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5maXRCb3VuZHNPcHRpb25zPXttYXhab29tOiAxNX1dIEEgW2BmaXRCb3VuZHNgXSgjbWFwI2ZpdGJvdW5kcykgb3B0aW9ucyBvYmplY3QgdG8gdXNlIHdoZW4gdGhlIG1hcCBpcyBwYW5uZWQgYW5kIHpvb21lZCB0byB0aGUgdXNlcidzIGxvY2F0aW9uLiBUaGUgZGVmYXVsdCBpcyB0byB1c2UgYSBgbWF4Wm9vbWAgb2YgMTUgdG8gbGltaXQgaG93IGZhciB0aGUgbWFwIHdpbGwgem9vbSBpbiBmb3IgdmVyeSBhY2N1cmF0ZSBsb2NhdGlvbnMuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMudHJhY2tVc2VyTG9jYXRpb249ZmFsc2VdIElmIGB0cnVlYCB0aGUgR2VvbG9jYXRlIENvbnRyb2wgYmVjb21lcyBhIHRvZ2dsZSBidXR0b24gYW5kIHdoZW4gYWN0aXZlIHRoZSBtYXAgd2lsbCByZWNlaXZlIHVwZGF0ZXMgdG8gdGhlIHVzZXIncyBsb2NhdGlvbiBhcyBpdCBjaGFuZ2VzLlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnNob3dBY2N1cmFjeUNpcmNsZT10cnVlXSBCeSBkZWZhdWx0LCBpZiBzaG93VXNlckxvY2F0aW9uIGlzIGB0cnVlYCwgYSB0cmFuc3BhcmVudCBjaXJjbGUgd2lsbCBiZSBkcmF3biBhcm91bmQgdGhlIHVzZXIgbG9jYXRpb24gaW5kaWNhdGluZyB0aGUgYWNjdXJhY3kgKDk1JSBjb25maWRlbmNlIGxldmVsKSBvZiB0aGUgdXNlcidzIGxvY2F0aW9uLiBTZXQgdG8gYGZhbHNlYCB0byBkaXNhYmxlLiBBbHdheXMgZGlzYWJsZWQgd2hlbiBzaG93VXNlckxvY2F0aW9uIGlzIGBmYWxzZWAuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbj10cnVlXSBCeSBkZWZhdWx0IGEgZG90IHdpbGwgYmUgc2hvd24gb24gdGhlIG1hcCBhdCB0aGUgdXNlcidzIGxvY2F0aW9uLiBTZXQgdG8gYGZhbHNlYCB0byBkaXNhYmxlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBtYXAuYWRkQ29udHJvbChuZXcgbWFwYm94Z2wuR2VvbG9jYXRlQ29udHJvbCh7XG4gKiAgICAgcG9zaXRpb25PcHRpb25zOiB7XG4gKiAgICAgICAgIGVuYWJsZUhpZ2hBY2N1cmFjeTogdHJ1ZVxuICogICAgIH0sXG4gKiAgICAgdHJhY2tVc2VyTG9jYXRpb246IHRydWVcbiAqIH0pKTtcbiAqIEBzZWUgW0xvY2F0ZSB0aGUgdXNlcl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9sb2NhdGUtdXNlci8pXG4gKi9cbmNsYXNzIEdlb2xvY2F0ZUNvbnRyb2wgZXh0ZW5kcyBFdmVudGVkIHtcbiAgICBfbWFwOiBNYXA7XG4gICAgb3B0aW9uczogT3B0aW9ucztcbiAgICBfY29udGFpbmVyOiBIVE1MRWxlbWVudDtcbiAgICBfZG90RWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gICAgX2NpcmNsZUVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICAgIF9nZW9sb2NhdGVCdXR0b246IEhUTUxCdXR0b25FbGVtZW50O1xuICAgIF9nZW9sb2NhdGlvbldhdGNoSUQ6IG51bWJlcjtcbiAgICBfdGltZW91dElkOiA/VGltZW91dElEO1xuICAgIF93YXRjaFN0YXRlOiAnT0ZGJyB8ICdBQ1RJVkVfTE9DSycgfCAnV0FJVElOR19BQ1RJVkUnIHwgJ0FDVElWRV9FUlJPUicgfCAnQkFDS0dST1VORCcgfCAnQkFDS0dST1VORF9FUlJPUic7XG4gICAgX2xhc3RLbm93blBvc2l0aW9uOiBhbnk7XG4gICAgX3VzZXJMb2NhdGlvbkRvdE1hcmtlcjogTWFya2VyO1xuICAgIF9hY2N1cmFjeUNpcmNsZU1hcmtlcjogTWFya2VyO1xuICAgIF9hY2N1cmFjeTogbnVtYmVyO1xuICAgIF9zZXR1cDogYm9vbGVhbjsgLy8gc2V0IHRvIHRydWUgb25jZSB0aGUgY29udHJvbCBoYXMgYmVlbiBzZXR1cFxuXG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogT3B0aW9ucykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBleHRlbmQoe30sIGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcblxuICAgICAgICBiaW5kQWxsKFtcbiAgICAgICAgICAgICdfb25TdWNjZXNzJyxcbiAgICAgICAgICAgICdfb25FcnJvcicsXG4gICAgICAgICAgICAnX29uWm9vbScsXG4gICAgICAgICAgICAnX2ZpbmlzaCcsXG4gICAgICAgICAgICAnX3NldHVwVUknLFxuICAgICAgICAgICAgJ191cGRhdGVDYW1lcmEnLFxuICAgICAgICAgICAgJ191cGRhdGVNYXJrZXInXG4gICAgICAgIF0sIHRoaXMpO1xuICAgIH1cblxuICAgIG9uQWRkKG1hcDogTWFwKSB7XG4gICAgICAgIHRoaXMuX21hcCA9IG1hcDtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyID0gRE9NLmNyZWF0ZSgnZGl2JywgYG1hcGJveGdsLWN0cmwgbWFwYm94Z2wtY3RybC1ncm91cGApO1xuICAgICAgICBjaGVja0dlb2xvY2F0aW9uU3VwcG9ydCh0aGlzLl9zZXR1cFVJKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lcjtcbiAgICB9XG5cbiAgICBvblJlbW92ZSgpIHtcbiAgICAgICAgLy8gY2xlYXIgdGhlIGdlb2xvY2F0aW9uIHdhdGNoIGlmIGV4aXN0c1xuICAgICAgICBpZiAodGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHdpbmRvdy5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24uY2xlYXJXYXRjaCh0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQpO1xuICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEID0gKHVuZGVmaW5lZDogYW55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNsZWFyIHRoZSBtYXJrZXJzIGZyb20gdGhlIG1hcFxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24gJiYgdGhpcy5fdXNlckxvY2F0aW9uRG90TWFya2VyKSB7XG4gICAgICAgICAgICB0aGlzLl91c2VyTG9jYXRpb25Eb3RNYXJrZXIucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93QWNjdXJhY3lDaXJjbGUgJiYgdGhpcy5fYWNjdXJhY3lDaXJjbGVNYXJrZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2FjY3VyYWN5Q2lyY2xlTWFya2VyLnJlbW92ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgRE9NLnJlbW92ZSh0aGlzLl9jb250YWluZXIpO1xuICAgICAgICB0aGlzLl9tYXAub2ZmKCd6b29tJywgdGhpcy5fb25ab29tKTtcbiAgICAgICAgdGhpcy5fbWFwID0gKHVuZGVmaW5lZDogYW55KTtcbiAgICAgICAgbnVtYmVyT2ZXYXRjaGVzID0gMDtcbiAgICAgICAgbm9UaW1lb3V0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgX2lzT3V0T2ZNYXBNYXhCb3VuZHMocG9zaXRpb246IFBvc2l0aW9uKSB7XG4gICAgICAgIGNvbnN0IGJvdW5kcyA9IHRoaXMuX21hcC5nZXRNYXhCb3VuZHMoKTtcbiAgICAgICAgY29uc3QgY29vcmRpbmF0ZXMgPSBwb3NpdGlvbi5jb29yZHM7XG5cbiAgICAgICAgcmV0dXJuIGJvdW5kcyAmJiAoXG4gICAgICAgICAgICBjb29yZGluYXRlcy5sb25naXR1ZGUgPCBib3VuZHMuZ2V0V2VzdCgpIHx8XG4gICAgICAgICAgICBjb29yZGluYXRlcy5sb25naXR1ZGUgPiBib3VuZHMuZ2V0RWFzdCgpIHx8XG4gICAgICAgICAgICBjb29yZGluYXRlcy5sYXRpdHVkZSA8IGJvdW5kcy5nZXRTb3V0aCgpIHx8XG4gICAgICAgICAgICBjb29yZGluYXRlcy5sYXRpdHVkZSA+IGJvdW5kcy5nZXROb3J0aCgpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgX3NldEVycm9yU3RhdGUoKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5fd2F0Y2hTdGF0ZSkge1xuICAgICAgICBjYXNlICdXQUlUSU5HX0FDVElWRSc6XG4gICAgICAgICAgICB0aGlzLl93YXRjaFN0YXRlID0gJ0FDVElWRV9FUlJPUic7XG4gICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlJyk7XG4gICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnQUNUSVZFX0xPQ0snOlxuICAgICAgICAgICAgdGhpcy5fd2F0Y2hTdGF0ZSA9ICdBQ1RJVkVfRVJST1InO1xuICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZScpO1xuICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvcicpO1xuICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmcnKTtcbiAgICAgICAgICAgIC8vIHR1cm4gbWFya2VyIGdyZXlcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdCQUNLR1JPVU5EJzpcbiAgICAgICAgICAgIHRoaXMuX3dhdGNoU3RhdGUgPSAnQkFDS0dST1VORF9FUlJPUic7XG4gICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZCcpO1xuICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3InKTtcbiAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nJyk7XG4gICAgICAgICAgICAvLyB0dXJuIG1hcmtlciBncmV5XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnQUNUSVZFX0VSUk9SJzpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYXNzZXJ0KGZhbHNlLCBgVW5leHBlY3RlZCB3YXRjaFN0YXRlICR7dGhpcy5fd2F0Y2hTdGF0ZX1gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9vblN1Y2Nlc3MocG9zaXRpb246IFBvc2l0aW9uKSB7XG4gICAgICAgIGlmICghdGhpcy5fbWFwKSB7XG4gICAgICAgICAgICAvLyBjb250cm9sIGhhcyBzaW5jZSBiZWVuIHJlbW92ZWRcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9pc091dE9mTWFwTWF4Qm91bmRzKHBvc2l0aW9uKSkge1xuICAgICAgICAgICAgdGhpcy5fc2V0RXJyb3JTdGF0ZSgpO1xuXG4gICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdvdXRvZm1heGJvdW5kcycsIHBvc2l0aW9uKSk7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVNYXJrZXIoKTtcbiAgICAgICAgICAgIHRoaXMuX2ZpbmlzaCgpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uKSB7XG4gICAgICAgICAgICAvLyBrZWVwIGEgcmVjb3JkIG9mIHRoZSBwb3NpdGlvbiBzbyB0aGF0IGlmIHRoZSBzdGF0ZSBpcyBCQUNLR1JPVU5EIGFuZCB0aGUgdXNlclxuICAgICAgICAgICAgLy8gY2xpY2tzIHRoZSBidXR0b24sIHdlIGNhbiBtb3ZlIHRvIEFDVElWRV9MT0NLIGltbWVkaWF0ZWx5IHdpdGhvdXQgd2FpdGluZyBmb3JcbiAgICAgICAgICAgIC8vIHdhdGNoUG9zaXRpb24gdG8gdHJpZ2dlciBfb25TdWNjZXNzXG4gICAgICAgICAgICB0aGlzLl9sYXN0S25vd25Qb3NpdGlvbiA9IHBvc2l0aW9uO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuX3dhdGNoU3RhdGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ1dBSVRJTkdfQUNUSVZFJzpcbiAgICAgICAgICAgIGNhc2UgJ0FDVElWRV9MT0NLJzpcbiAgICAgICAgICAgIGNhc2UgJ0FDVElWRV9FUlJPUic6XG4gICAgICAgICAgICAgICAgdGhpcy5fd2F0Y2hTdGF0ZSA9ICdBQ1RJVkVfTE9DSyc7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZScpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQkFDS0dST1VORCc6XG4gICAgICAgICAgICBjYXNlICdCQUNLR1JPVU5EX0VSUk9SJzpcbiAgICAgICAgICAgICAgICB0aGlzLl93YXRjaFN0YXRlID0gJ0JBQ0tHUk9VTkQnO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3InKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZCcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBhc3NlcnQoZmFsc2UsIGBVbmV4cGVjdGVkIHdhdGNoU3RhdGUgJHt0aGlzLl93YXRjaFN0YXRlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgc2hvd1VzZXJMb2NhdGlvbiBhbmQgdGhlIHdhdGNoIHN0YXRlIGlzbid0IG9mZiB0aGVuIHVwZGF0ZSB0aGUgbWFya2VyIGxvY2F0aW9uXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbiAmJiB0aGlzLl93YXRjaFN0YXRlICE9PSAnT0ZGJykge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlTWFya2VyKHBvc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIGluIG5vcm1hbCBtb2RlIChub3Qgd2F0Y2ggbW9kZSksIG9yIGlmIGluIHdhdGNoIG1vZGUgYW5kIHRoZSBzdGF0ZSBpcyBhY3RpdmUgd2F0Y2hcbiAgICAgICAgLy8gdGhlbiB1cGRhdGUgdGhlIGNhbWVyYVxuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbiB8fCB0aGlzLl93YXRjaFN0YXRlID09PSAnQUNUSVZFX0xPQ0snKSB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVDYW1lcmEocG9zaXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9kb3RFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLXVzZXItbG9jYXRpb24tZG90LXN0YWxlJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdnZW9sb2NhdGUnLCBwb3NpdGlvbikpO1xuICAgICAgICB0aGlzLl9maW5pc2goKTtcbiAgICB9XG5cbiAgICBfdXBkYXRlQ2FtZXJhKHBvc2l0aW9uOiBQb3NpdGlvbikge1xuICAgICAgICBjb25zdCBjZW50ZXIgPSBuZXcgTG5nTGF0KHBvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGUsIHBvc2l0aW9uLmNvb3Jkcy5sYXRpdHVkZSk7XG4gICAgICAgIGNvbnN0IHJhZGl1cyA9IHBvc2l0aW9uLmNvb3Jkcy5hY2N1cmFjeTtcbiAgICAgICAgY29uc3QgYmVhcmluZyA9IHRoaXMuX21hcC5nZXRCZWFyaW5nKCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBleHRlbmQoe2JlYXJpbmd9LCB0aGlzLm9wdGlvbnMuZml0Qm91bmRzT3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5fbWFwLmZpdEJvdW5kcyhjZW50ZXIudG9Cb3VuZHMocmFkaXVzKSwgb3B0aW9ucywge1xuICAgICAgICAgICAgZ2VvbG9jYXRlU291cmNlOiB0cnVlIC8vIHRhZyB0aGlzIGNhbWVyYSBjaGFuZ2Ugc28gaXQgd29uJ3QgY2F1c2UgdGhlIGNvbnRyb2wgdG8gY2hhbmdlIHRvIGJhY2tncm91bmQgc3RhdGVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX3VwZGF0ZU1hcmtlcihwb3NpdGlvbjogP1Bvc2l0aW9uKSB7XG4gICAgICAgIGlmIChwb3NpdGlvbikge1xuICAgICAgICAgICAgY29uc3QgY2VudGVyID0gbmV3IExuZ0xhdChwb3NpdGlvbi5jb29yZHMubG9uZ2l0dWRlLCBwb3NpdGlvbi5jb29yZHMubGF0aXR1ZGUpO1xuICAgICAgICAgICAgdGhpcy5fYWNjdXJhY3lDaXJjbGVNYXJrZXIuc2V0TG5nTGF0KGNlbnRlcikuYWRkVG8odGhpcy5fbWFwKTtcbiAgICAgICAgICAgIHRoaXMuX3VzZXJMb2NhdGlvbkRvdE1hcmtlci5zZXRMbmdMYXQoY2VudGVyKS5hZGRUbyh0aGlzLl9tYXApO1xuICAgICAgICAgICAgdGhpcy5fYWNjdXJhY3kgPSBwb3NpdGlvbi5jb29yZHMuYWNjdXJhY3k7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24gJiYgdGhpcy5vcHRpb25zLnNob3dBY2N1cmFjeUNpcmNsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUNpcmNsZVJhZGl1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fdXNlckxvY2F0aW9uRG90TWFya2VyLnJlbW92ZSgpO1xuICAgICAgICAgICAgdGhpcy5fYWNjdXJhY3lDaXJjbGVNYXJrZXIucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfdXBkYXRlQ2lyY2xlUmFkaXVzKCkge1xuICAgICAgICBhc3NlcnQodGhpcy5fY2lyY2xlRWxlbWVudCk7XG4gICAgICAgIGNvbnN0IHkgPSB0aGlzLl9tYXAuX2NvbnRhaW5lci5jbGllbnRIZWlnaHQgLyAyO1xuICAgICAgICBjb25zdCBhID0gdGhpcy5fbWFwLnVucHJvamVjdChbMCwgeV0pO1xuICAgICAgICBjb25zdCBiID0gdGhpcy5fbWFwLnVucHJvamVjdChbMSwgeV0pO1xuICAgICAgICBjb25zdCBtZXRlcnNQZXJQaXhlbCA9IGEuZGlzdGFuY2VUbyhiKTtcbiAgICAgICAgY29uc3QgY2lyY2xlRGlhbWV0ZXIgPSBNYXRoLmNlaWwoMi4wICogdGhpcy5fYWNjdXJhY3kgLyBtZXRlcnNQZXJQaXhlbCk7XG4gICAgICAgIHRoaXMuX2NpcmNsZUVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtjaXJjbGVEaWFtZXRlcn1weGA7XG4gICAgICAgIHRoaXMuX2NpcmNsZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7Y2lyY2xlRGlhbWV0ZXJ9cHhgO1xuICAgIH1cblxuICAgIF9vblpvb20oKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbiAmJiB0aGlzLm9wdGlvbnMuc2hvd0FjY3VyYWN5Q2lyY2xlKSB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVDaXJjbGVSYWRpdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9vbkVycm9yKGVycm9yOiBQb3NpdGlvbkVycm9yKSB7XG4gICAgICAgIGlmICghdGhpcy5fbWFwKSB7XG4gICAgICAgICAgICAvLyBjb250cm9sIGhhcyBzaW5jZSBiZWVuIHJlbW92ZWRcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24pIHtcbiAgICAgICAgICAgIGlmIChlcnJvci5jb2RlID09PSAxKSB7XG4gICAgICAgICAgICAgICAgLy8gUEVSTUlTU0lPTl9ERU5JRURcbiAgICAgICAgICAgICAgICB0aGlzLl93YXRjaFN0YXRlID0gJ09GRic7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvcicpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3InKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpdGxlID0gdGhpcy5fbWFwLl9nZXRVSVN0cmluZygnR2VvbG9jYXRlQ29udHJvbC5Mb2NhdGlvbk5vdEF2YWlsYWJsZScpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi50aXRsZSA9IHRpdGxlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCB0aXRsZSk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2xlYXJXYXRjaCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3IuY29kZSA9PT0gMyAmJiBub1RpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICAvLyB0aGlzIHJlcHJlc2VudHMgYSBmb3JjZWQgZXJyb3Igc3RhdGVcbiAgICAgICAgICAgICAgICAvLyB0aGlzIHdhcyB0cmlnZ2VyZWQgdG8gZm9yY2UgaW1tZWRpYXRlIGdlb2xvY2F0aW9uIHdoZW4gYSB3YXRjaCBpcyBhbHJlYWR5IHByZXNlbnRcbiAgICAgICAgICAgICAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzgyMTRcbiAgICAgICAgICAgICAgICAvLyBhbmQgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL2dlb2xvY2F0aW9uLWFwaS8jZXhhbXBsZS01LWZvcmNpbmctdGhlLXVzZXItYWdlbnQtdG8tcmV0dXJuLWEtZnJlc2gtY2FjaGVkLXBvc2l0aW9uXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRFcnJvclN0YXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fd2F0Y2hTdGF0ZSAhPT0gJ09GRicgJiYgdGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2RvdEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtdXNlci1sb2NhdGlvbi1kb3Qtc3RhbGUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2Vycm9yJywgZXJyb3IpKTtcblxuICAgICAgICB0aGlzLl9maW5pc2goKTtcbiAgICB9XG5cbiAgICBfZmluaXNoKCkge1xuICAgICAgICBpZiAodGhpcy5fdGltZW91dElkKSB7IGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0SWQpOyB9XG4gICAgICAgIHRoaXMuX3RpbWVvdXRJZCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBfc2V0dXBVSShzdXBwb3J0ZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgKGU6IE1vdXNlRXZlbnQpID0+IGUucHJldmVudERlZmF1bHQoKSk7XG4gICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbiA9IERPTS5jcmVhdGUoJ2J1dHRvbicsIGBtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZWAsIHRoaXMuX2NvbnRhaW5lcik7XG4gICAgICAgIERPTS5jcmVhdGUoJ3NwYW4nLCBgbWFwYm94Z2wtY3RybC1pY29uYCwgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uKS5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgdHJ1ZSk7XG4gICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi50eXBlID0gJ2J1dHRvbic7XG5cbiAgICAgICAgaWYgKHN1cHBvcnRlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHdhcm5PbmNlKCdHZW9sb2NhdGlvbiBzdXBwb3J0IGlzIG5vdCBhdmFpbGFibGUgc28gdGhlIEdlb2xvY2F0ZUNvbnRyb2wgd2lsbCBiZSBkaXNhYmxlZC4nKTtcbiAgICAgICAgICAgIGNvbnN0IHRpdGxlID0gdGhpcy5fbWFwLl9nZXRVSVN0cmluZygnR2VvbG9jYXRlQ29udHJvbC5Mb2NhdGlvbk5vdEF2YWlsYWJsZScpO1xuICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi50aXRsZSA9IHRpdGxlO1xuICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIHRpdGxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHRpdGxlID0gdGhpcy5fbWFwLl9nZXRVSVN0cmluZygnR2VvbG9jYXRlQ29udHJvbC5GaW5kTXlMb2NhdGlvbicpO1xuICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnRpdGxlID0gdGl0bGU7XG4gICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgdGl0bGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJywgJ2ZhbHNlJyk7XG4gICAgICAgICAgICB0aGlzLl93YXRjaFN0YXRlID0gJ09GRic7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3aGVuIHNob3dVc2VyTG9jYXRpb24gaXMgZW5hYmxlZCwga2VlcCB0aGUgR2VvbG9jYXRlIGJ1dHRvbiBkaXNhYmxlZCB1bnRpbCB0aGUgZGV2aWNlIGxvY2F0aW9uIG1hcmtlciBpcyBzZXR1cCBvbiB0aGUgbWFwXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fZG90RWxlbWVudCA9IERPTS5jcmVhdGUoJ2RpdicsICdtYXBib3hnbC11c2VyLWxvY2F0aW9uLWRvdCcpO1xuXG4gICAgICAgICAgICB0aGlzLl91c2VyTG9jYXRpb25Eb3RNYXJrZXIgPSBuZXcgTWFya2VyKHRoaXMuX2RvdEVsZW1lbnQpO1xuXG4gICAgICAgICAgICB0aGlzLl9jaXJjbGVFbGVtZW50ID0gRE9NLmNyZWF0ZSgnZGl2JywgJ21hcGJveGdsLXVzZXItbG9jYXRpb24tYWNjdXJhY3ktY2lyY2xlJyk7XG4gICAgICAgICAgICB0aGlzLl9hY2N1cmFjeUNpcmNsZU1hcmtlciA9IG5ldyBNYXJrZXIoe2VsZW1lbnQ6IHRoaXMuX2NpcmNsZUVsZW1lbnQsIHBpdGNoQWxpZ25tZW50OiAnbWFwJ30pO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uKSB0aGlzLl93YXRjaFN0YXRlID0gJ09GRic7XG5cbiAgICAgICAgICAgIHRoaXMuX21hcC5vbignem9vbScsIHRoaXMuX29uWm9vbSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLFxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyLmJpbmQodGhpcykpO1xuXG4gICAgICAgIHRoaXMuX3NldHVwID0gdHJ1ZTtcblxuICAgICAgICAvLyB3aGVuIHRoZSBjYW1lcmEgaXMgY2hhbmdlZCAoYW5kIGl0J3Mgbm90IGFzIGEgcmVzdWx0IG9mIHRoZSBHZW9sb2NhdGlvbiBDb250cm9sKSBjaGFuZ2VcbiAgICAgICAgLy8gdGhlIHdhdGNoIG1vZGUgdG8gYmFja2dyb3VuZCB3YXRjaCwgc28gdGhhdCB0aGUgbWFya2VyIGlzIHVwZGF0ZWQgYnV0IG5vdCB0aGUgY2FtZXJhLlxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXAub24oJ21vdmVzdGFydCcsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZyb21SZXNpemUgPSBldmVudC5vcmlnaW5hbEV2ZW50ICYmIGV2ZW50Lm9yaWdpbmFsRXZlbnQudHlwZSA9PT0gJ3Jlc2l6ZSc7XG4gICAgICAgICAgICAgICAgaWYgKCFldmVudC5nZW9sb2NhdGVTb3VyY2UgJiYgdGhpcy5fd2F0Y2hTdGF0ZSA9PT0gJ0FDVElWRV9MT0NLJyAmJiAhZnJvbVJlc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl93YXRjaFN0YXRlID0gJ0JBQ0tHUk9VTkQnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZCcpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgndHJhY2t1c2VybG9jYXRpb25lbmQnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAqIFByb2dyYW1tYXRpY2FsbHkgcmVxdWVzdCBhbmQgbW92ZSB0aGUgbWFwIHRvIHRoZSB1c2VyJ3MgbG9jYXRpb24uXG4gICAgKlxuICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYGZhbHNlYCBpZiBjYWxsZWQgYmVmb3JlIGNvbnRyb2wgd2FzIGFkZGVkIHRvIGEgbWFwLCBvdGhlcndpc2UgcmV0dXJucyBgdHJ1ZWAuXG4gICAgKiBAZXhhbXBsZVxuICAgICogLy8gSW5pdGlhbGl6ZSB0aGUgZ2VvbG9jYXRlIGNvbnRyb2wuXG4gICAgKiB2YXIgZ2VvbG9jYXRlID0gbmV3IG1hcGJveGdsLkdlb2xvY2F0ZUNvbnRyb2woe1xuICAgICogIHBvc2l0aW9uT3B0aW9uczoge1xuICAgICogICAgZW5hYmxlSGlnaEFjY3VyYWN5OiB0cnVlXG4gICAgKiAgfSxcbiAgICAqICB0cmFja1VzZXJMb2NhdGlvbjogdHJ1ZVxuICAgICogfSk7XG4gICAgKiAvLyBBZGQgdGhlIGNvbnRyb2wgdG8gdGhlIG1hcC5cbiAgICAqIG1hcC5hZGRDb250cm9sKGdlb2xvY2F0ZSk7XG4gICAgKiBtYXAub24oJ2xvYWQnLCBmdW5jdGlvbigpIHtcbiAgICAqICAgZ2VvbG9jYXRlLnRyaWdnZXIoKTtcbiAgICAqIH0pO1xuICAgICovXG4gICAgdHJpZ2dlcigpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9zZXR1cCkge1xuICAgICAgICAgICAgd2Fybk9uY2UoJ0dlb2xvY2F0ZSBjb250cm9sIHRyaWdnZXJlZCBiZWZvcmUgYWRkZWQgdG8gYSBtYXAnKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uKSB7XG4gICAgICAgICAgICAvLyB1cGRhdGUgd2F0Y2hTdGF0ZSBhbmQgZG8gYW55IG91dGdvaW5nIHN0YXRlIGNsZWFudXBcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5fd2F0Y2hTdGF0ZSkge1xuICAgICAgICAgICAgY2FzZSAnT0ZGJzpcbiAgICAgICAgICAgICAgICAvLyB0dXJuIG9uIHRoZSBHZW9sb2NhdGUgQ29udHJvbFxuICAgICAgICAgICAgICAgIHRoaXMuX3dhdGNoU3RhdGUgPSAnV0FJVElOR19BQ1RJVkUnO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5maXJlKG5ldyBFdmVudCgndHJhY2t1c2VybG9jYXRpb25zdGFydCcpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1dBSVRJTkdfQUNUSVZFJzpcbiAgICAgICAgICAgIGNhc2UgJ0FDVElWRV9MT0NLJzpcbiAgICAgICAgICAgIGNhc2UgJ0FDVElWRV9FUlJPUic6XG4gICAgICAgICAgICBjYXNlICdCQUNLR1JPVU5EX0VSUk9SJzpcbiAgICAgICAgICAgICAgICAvLyB0dXJuIG9mZiB0aGUgR2VvbG9jYXRlIENvbnRyb2xcbiAgICAgICAgICAgICAgICBudW1iZXJPZldhdGNoZXMtLTtcbiAgICAgICAgICAgICAgICBub1RpbWVvdXQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl93YXRjaFN0YXRlID0gJ09GRic7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvcicpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3InKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ3RyYWNrdXNlcmxvY2F0aW9uZW5kJykpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQkFDS0dST1VORCc6XG4gICAgICAgICAgICAgICAgdGhpcy5fd2F0Y2hTdGF0ZSA9ICdBQ1RJVkVfTE9DSyc7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQnKTtcbiAgICAgICAgICAgICAgICAvLyBzZXQgY2FtZXJhIHRvIGxhc3Qga25vd24gbG9jYXRpb25cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbGFzdEtub3duUG9zaXRpb24pIHRoaXMuX3VwZGF0ZUNhbWVyYSh0aGlzLl9sYXN0S25vd25Qb3NpdGlvbik7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCd0cmFja3VzZXJsb2NhdGlvbnN0YXJ0JykpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBhc3NlcnQoZmFsc2UsIGBVbmV4cGVjdGVkIHdhdGNoU3RhdGUgJHt0aGlzLl93YXRjaFN0YXRlfWApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpbmNvbWluZyBzdGF0ZSBzZXR1cFxuICAgICAgICAgICAgc3dpdGNoICh0aGlzLl93YXRjaFN0YXRlKSB7XG4gICAgICAgICAgICBjYXNlICdXQUlUSU5HX0FDVElWRSc6XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdBQ1RJVkVfTE9DSyc6XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZScpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQUNUSVZFX0VSUk9SJzpcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZycpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUtZXJyb3InKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0JBQ0tHUk9VTkQnOlxuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdCQUNLR1JPVU5EX0VSUk9SJzpcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZycpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kLWVycm9yJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdPRkYnOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBhc3NlcnQoZmFsc2UsIGBVbmV4cGVjdGVkIHdhdGNoU3RhdGUgJHt0aGlzLl93YXRjaFN0YXRlfWApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBtYW5hZ2UgZ2VvbG9jYXRpb24ud2F0Y2hQb3NpdGlvbiAvIGdlb2xvY2F0aW9uLmNsZWFyV2F0Y2hcbiAgICAgICAgICAgIGlmICh0aGlzLl93YXRjaFN0YXRlID09PSAnT0ZGJyAmJiB0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIC8vIGNsZWFyIHdhdGNoUG9zaXRpb24gYXMgd2UndmUgY2hhbmdlZCB0byBhbiBPRkYgc3RhdGVcbiAgICAgICAgICAgICAgICB0aGlzLl9jbGVhcldhdGNoKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgLy8gZW5hYmxlIHdhdGNoUG9zaXRpb24gc2luY2Ugd2F0Y2hTdGF0ZSBpcyBub3QgT0ZGIGFuZCB0aGVyZSBpcyBubyB3YXRjaFBvc2l0aW9uIGFscmVhZHkgcnVubmluZ1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uc2V0QXR0cmlidXRlKCdhcmlhLXByZXNzZWQnLCAndHJ1ZScpO1xuXG4gICAgICAgICAgICAgICAgbnVtYmVyT2ZXYXRjaGVzKys7XG4gICAgICAgICAgICAgICAgbGV0IHBvc2l0aW9uT3B0aW9ucztcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyT2ZXYXRjaGVzID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbk9wdGlvbnMgPSB7bWF4aW11bUFnZTo2MDAwMDAsIHRpbWVvdXQ6MH07XG4gICAgICAgICAgICAgICAgICAgIG5vVGltZW91dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25PcHRpb25zID0gdGhpcy5vcHRpb25zLnBvc2l0aW9uT3B0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgbm9UaW1lb3V0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEID0gd2luZG93Lm5hdmlnYXRvci5nZW9sb2NhdGlvbi53YXRjaFBvc2l0aW9uKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblN1Y2Nlc3MsIHRoaXMuX29uRXJyb3IsIHBvc2l0aW9uT3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3aW5kb3cubmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihcbiAgICAgICAgICAgICAgICB0aGlzLl9vblN1Y2Nlc3MsIHRoaXMuX29uRXJyb3IsIHRoaXMub3B0aW9ucy5wb3NpdGlvbk9wdGlvbnMpO1xuXG4gICAgICAgICAgICAvLyBUaGlzIHRpbWVvdXQgZW5zdXJlcyB0aGF0IHdlIHN0aWxsIGNhbGwgZmluaXNoKCkgZXZlbiBpZlxuICAgICAgICAgICAgLy8gdGhlIHVzZXIgZGVjbGluZXMgdG8gc2hhcmUgdGhlaXIgbG9jYXRpb24gaW4gRmlyZWZveFxuICAgICAgICAgICAgdGhpcy5fdGltZW91dElkID0gc2V0VGltZW91dCh0aGlzLl9maW5pc2gsIDEwMDAwIC8qIDEwc2VjICovKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIF9jbGVhcldhdGNoKCkge1xuICAgICAgICB3aW5kb3cubmF2aWdhdG9yLmdlb2xvY2F0aW9uLmNsZWFyV2F0Y2godGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEKTtcblxuICAgICAgICB0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQgPSAodW5kZWZpbmVkOiBhbnkpO1xuICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnbWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZycpO1xuICAgICAgICB0aGlzLl9nZW9sb2NhdGVCdXR0b24uc2V0QXR0cmlidXRlKCdhcmlhLXByZXNzZWQnLCAnZmFsc2UnKTtcblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNob3dVc2VyTG9jYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZU1hcmtlcihudWxsKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgR2VvbG9jYXRlQ29udHJvbDtcblxuLyogR2VvbG9jYXRlIENvbnRyb2wgV2F0Y2ggU3RhdGVzXG4gKiBUaGlzIGlzIHRoZSBwcml2YXRlIHN0YXRlIG9mIHRoZSBjb250cm9sLlxuICpcbiAqIE9GRlxuICogICAgb2ZmL2luYWN0aXZlXG4gKiBXQUlUSU5HX0FDVElWRVxuICogICAgR2VvbG9jYXRlIENvbnRyb2wgd2FzIGNsaWNrZWQgYnV0IHN0aWxsIHdhaXRpbmcgZm9yIEdlb2xvY2F0aW9uIEFQSSByZXNwb25zZSB3aXRoIHVzZXIgbG9jYXRpb25cbiAqIEFDVElWRV9MT0NLXG4gKiAgICBTaG93aW5nIHRoZSB1c2VyIGxvY2F0aW9uIGFzIGEgZG90IEFORCB0cmFja2luZyB0aGUgY2FtZXJhIHRvIGJlIGZpeGVkIHRvIHRoZWlyIGxvY2F0aW9uLiBJZiB0aGVpciBsb2NhdGlvbiBjaGFuZ2VzIHRoZSBtYXAgbW92ZXMgdG8gZm9sbG93LlxuICogQUNUSVZFX0VSUk9SXG4gKiAgICBUaGVyZSB3YXMgZW4gZXJyb3IgZnJvbSB0aGUgR2VvbG9jYXRpb24gQVBJIHdoaWxlIHRyeWluZyB0byBzaG93IGFuZCB0cmFjayB0aGUgdXNlciBsb2NhdGlvbi5cbiAqIEJBQ0tHUk9VTkRcbiAqICAgIFNob3dpbmcgdGhlIHVzZXIgbG9jYXRpb24gYXMgYSBkb3QgYnV0IHRoZSBjYW1lcmEgZG9lc24ndCBmb2xsb3cgdGhlaXIgbG9jYXRpb24gYXMgaXQgY2hhbmdlcy5cbiAqIEJBQ0tHUk9VTkRfRVJST1JcbiAqICAgIFRoZXJlIHdhcyBhbiBlcnJvciBmcm9tIHRoZSBHZW9sb2NhdGlvbiBBUEkgd2hpbGUgdHJ5aW5nIHRvIHNob3cgKGJ1dCBub3QgdHJhY2spIHRoZSB1c2VyIGxvY2F0aW9uLlxuICovXG5cbi8qKlxuICogRmlyZWQgb24gZWFjaCBHZW9sb2NhdGlvbiBBUEkgcG9zaXRpb24gdXBkYXRlIHdoaWNoIHJldHVybmVkIGFzIHN1Y2Nlc3MuXG4gKlxuICogQGV2ZW50IGdlb2xvY2F0ZVxuICogQG1lbWJlcm9mIEdlb2xvY2F0ZUNvbnRyb2xcbiAqIEBpbnN0YW5jZVxuICogQHByb3BlcnR5IHtQb3NpdGlvbn0gZGF0YSBUaGUgcmV0dXJuZWQgW1Bvc2l0aW9uXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvUG9zaXRpb24pIG9iamVjdCBmcm9tIHRoZSBjYWxsYmFjayBpbiBbR2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKCldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9HZW9sb2NhdGlvbi9nZXRDdXJyZW50UG9zaXRpb24pIG9yIFtHZW9sb2NhdGlvbi53YXRjaFBvc2l0aW9uKCldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9HZW9sb2NhdGlvbi93YXRjaFBvc2l0aW9uKS5cbiAqIEBleGFtcGxlXG4gKiAvLyBJbml0aWFsaXplIHRoZSBnZW9sb2NhdGUgY29udHJvbC5cbiAqIHZhciBnZW9sb2NhdGUgPSBuZXcgbWFwYm94Z2wuR2VvbG9jYXRlQ29udHJvbCh7XG4gKiAgIHBvc2l0aW9uT3B0aW9uczoge1xuICogICAgICAgZW5hYmxlSGlnaEFjY3VyYWN5OiB0cnVlXG4gKiAgIH0sXG4gKiAgIHRyYWNrVXNlckxvY2F0aW9uOiB0cnVlXG4gKiB9KTtcbiAqIC8vIEFkZCB0aGUgY29udHJvbCB0byB0aGUgbWFwLlxuICogbWFwLmFkZENvbnRyb2woZ2VvbG9jYXRlKTtcbiAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGZpcmVzXG4gKiAvLyB3aGVuIGEgZ2VvbG9jYXRlIGV2ZW50IG9jY3Vycy5cbiAqIGdlb2xvY2F0ZS5vbignZ2VvbG9jYXRlJywgZnVuY3Rpb24oKSB7XG4gKiAgIGNvbnNvbGUubG9nKCdBIGdlb2xvY2F0ZSBldmVudCBoYXMgb2NjdXJyZWQuJylcbiAqIH0pO1xuICpcbiAqL1xuXG4vKipcbiAqIEZpcmVkIG9uIGVhY2ggR2VvbG9jYXRpb24gQVBJIHBvc2l0aW9uIHVwZGF0ZSB3aGljaCByZXR1cm5lZCBhcyBhbiBlcnJvci5cbiAqXG4gKiBAZXZlbnQgZXJyb3JcbiAqIEBtZW1iZXJvZiBHZW9sb2NhdGVDb250cm9sXG4gKiBAaW5zdGFuY2VcbiAqIEBwcm9wZXJ0eSB7UG9zaXRpb25FcnJvcn0gZGF0YSBUaGUgcmV0dXJuZWQgW1Bvc2l0aW9uRXJyb3JdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Qb3NpdGlvbkVycm9yKSBvYmplY3QgZnJvbSB0aGUgY2FsbGJhY2sgaW4gW0dlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbigpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvR2VvbG9jYXRpb24vZ2V0Q3VycmVudFBvc2l0aW9uKSBvciBbR2VvbG9jYXRpb24ud2F0Y2hQb3NpdGlvbigpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvR2VvbG9jYXRpb24vd2F0Y2hQb3NpdGlvbikuXG4gKiBAZXhhbXBsZVxuICogLy8gSW5pdGlhbGl6ZSB0aGUgZ2VvbG9jYXRlIGNvbnRyb2wuXG4gKiB2YXIgZ2VvbG9jYXRlID0gbmV3IG1hcGJveGdsLkdlb2xvY2F0ZUNvbnRyb2woe1xuICogICBwb3NpdGlvbk9wdGlvbnM6IHtcbiAqICAgICAgIGVuYWJsZUhpZ2hBY2N1cmFjeTogdHJ1ZVxuICogICB9LFxuICogICB0cmFja1VzZXJMb2NhdGlvbjogdHJ1ZVxuICogfSk7XG4gKiAvLyBBZGQgdGhlIGNvbnRyb2wgdG8gdGhlIG1hcC5cbiAqIG1hcC5hZGRDb250cm9sKGdlb2xvY2F0ZSk7XG4gKiAvLyBTZXQgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBmaXJlc1xuICogLy8gd2hlbiBhbiBlcnJvciBldmVudCBvY2N1cnMuXG4gKiBnZW9sb2NhdGUub24oJ2Vycm9yJywgZnVuY3Rpb24oKSB7XG4gKiAgIGNvbnNvbGUubG9nKCdBbiBlcnJvciBldmVudCBoYXMgb2NjdXJyZWQuJylcbiAqIH0pO1xuICpcbiAqL1xuXG4vKipcbiAqIEZpcmVkIG9uIGVhY2ggR2VvbG9jYXRpb24gQVBJIHBvc2l0aW9uIHVwZGF0ZSB3aGljaCByZXR1cm5lZCBhcyBzdWNjZXNzIGJ1dCB1c2VyIHBvc2l0aW9uIGlzIG91dCBvZiBtYXAgbWF4Qm91bmRzLlxuICpcbiAqIEBldmVudCBvdXRvZm1heGJvdW5kc1xuICogQG1lbWJlcm9mIEdlb2xvY2F0ZUNvbnRyb2xcbiAqIEBpbnN0YW5jZVxuICogQHByb3BlcnR5IHtQb3NpdGlvbn0gZGF0YSBUaGUgcmV0dXJuZWQgW1Bvc2l0aW9uXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvUG9zaXRpb24pIG9iamVjdCBmcm9tIHRoZSBjYWxsYmFjayBpbiBbR2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKCldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9HZW9sb2NhdGlvbi9nZXRDdXJyZW50UG9zaXRpb24pIG9yIFtHZW9sb2NhdGlvbi53YXRjaFBvc2l0aW9uKCldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9HZW9sb2NhdGlvbi93YXRjaFBvc2l0aW9uKS5cbiAqIEBleGFtcGxlXG4gKiAvLyBJbml0aWFsaXplIHRoZSBnZW9sb2NhdGUgY29udHJvbC5cbiAqIHZhciBnZW9sb2NhdGUgPSBuZXcgbWFwYm94Z2wuR2VvbG9jYXRlQ29udHJvbCh7XG4gKiAgIHBvc2l0aW9uT3B0aW9uczoge1xuICogICAgICAgZW5hYmxlSGlnaEFjY3VyYWN5OiB0cnVlXG4gKiAgIH0sXG4gKiAgIHRyYWNrVXNlckxvY2F0aW9uOiB0cnVlXG4gKiB9KTtcbiAqIC8vIEFkZCB0aGUgY29udHJvbCB0byB0aGUgbWFwLlxuICogbWFwLmFkZENvbnRyb2woZ2VvbG9jYXRlKTtcbiAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGZpcmVzXG4gKiAvLyB3aGVuIGFuIG91dG9mbWF4Ym91bmRzIGV2ZW50IG9jY3Vycy5cbiAqIGdlb2xvY2F0ZS5vbignb3V0b2ZtYXhib3VuZHMnLCBmdW5jdGlvbigpIHtcbiAqICAgY29uc29sZS5sb2coJ0FuIG91dG9mbWF4Ym91bmRzIGV2ZW50IGhhcyBvY2N1cnJlZC4nKVxuICogfSk7XG4gKlxuICovXG5cbi8qKlxuICogRmlyZWQgd2hlbiB0aGUgR2VvbG9jYXRlIENvbnRyb2wgY2hhbmdlcyB0byB0aGUgYWN0aXZlIGxvY2sgc3RhdGUsIHdoaWNoIGhhcHBlbnMgZWl0aGVyIHVwb24gZmlyc3Qgb2J0YWluaW5nIGEgc3VjY2Vzc2Z1bCBHZW9sb2NhdGlvbiBBUEkgcG9zaXRpb24gZm9yIHRoZSB1c2VyIChhIGdlb2xvY2F0ZSBldmVudCB3aWxsIGZvbGxvdyksIG9yIHRoZSB1c2VyIGNsaWNrcyB0aGUgZ2VvbG9jYXRlIGJ1dHRvbiB3aGVuIGluIHRoZSBiYWNrZ3JvdW5kIHN0YXRlIHdoaWNoIHVzZXMgdGhlIGxhc3Qga25vd24gcG9zaXRpb24gdG8gcmVjZW50ZXIgdGhlIG1hcCBhbmQgZW50ZXIgYWN0aXZlIGxvY2sgc3RhdGUgKG5vIGdlb2xvY2F0ZSBldmVudCB3aWxsIGZvbGxvdyB1bmxlc3MgdGhlIHVzZXJzJ3MgbG9jYXRpb24gY2hhbmdlcykuXG4gKlxuICogQGV2ZW50IHRyYWNrdXNlcmxvY2F0aW9uc3RhcnRcbiAqIEBtZW1iZXJvZiBHZW9sb2NhdGVDb250cm9sXG4gKiBAaW5zdGFuY2VcbiAqIEBleGFtcGxlXG4gKiAvLyBJbml0aWFsaXplIHRoZSBnZW9sb2NhdGUgY29udHJvbC5cbiAqIHZhciBnZW9sb2NhdGUgPSBuZXcgbWFwYm94Z2wuR2VvbG9jYXRlQ29udHJvbCh7XG4gKiAgIHBvc2l0aW9uT3B0aW9uczoge1xuICogICAgICAgZW5hYmxlSGlnaEFjY3VyYWN5OiB0cnVlXG4gKiAgIH0sXG4gKiAgIHRyYWNrVXNlckxvY2F0aW9uOiB0cnVlXG4gKiB9KTtcbiAqIC8vIEFkZCB0aGUgY29udHJvbCB0byB0aGUgbWFwLlxuICogbWFwLmFkZENvbnRyb2woZ2VvbG9jYXRlKTtcbiAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGZpcmVzXG4gKiAvLyB3aGVuIGEgdHJhY2t1c2VybG9jYXRpb25zdGFydCBldmVudCBvY2N1cnMuXG4gKiBnZW9sb2NhdGUub24oJ3RyYWNrdXNlcmxvY2F0aW9uc3RhcnQnLCBmdW5jdGlvbigpIHtcbiAqICAgY29uc29sZS5sb2coJ0EgdHJhY2t1c2VybG9jYXRpb25zdGFydCBldmVudCBoYXMgb2NjdXJyZWQuJylcbiAqIH0pO1xuICpcbiAqL1xuXG4vKipcbiAqIEZpcmVkIHdoZW4gdGhlIEdlb2xvY2F0ZSBDb250cm9sIGNoYW5nZXMgdG8gdGhlIGJhY2tncm91bmQgc3RhdGUsIHdoaWNoIGhhcHBlbnMgd2hlbiBhIHVzZXIgY2hhbmdlcyB0aGUgY2FtZXJhIGR1cmluZyBhbiBhY3RpdmUgcG9zaXRpb24gbG9jay4gVGhpcyBvbmx5IGFwcGxpZXMgd2hlbiB0cmFja1VzZXJMb2NhdGlvbiBpcyB0cnVlLiBJbiB0aGUgYmFja2dyb3VuZCBzdGF0ZSwgdGhlIGRvdCBvbiB0aGUgbWFwIHdpbGwgdXBkYXRlIHdpdGggbG9jYXRpb24gdXBkYXRlcyBidXQgdGhlIGNhbWVyYSB3aWxsIG5vdC5cbiAqXG4gKiBAZXZlbnQgdHJhY2t1c2VybG9jYXRpb25lbmRcbiAqIEBtZW1iZXJvZiBHZW9sb2NhdGVDb250cm9sXG4gKiBAaW5zdGFuY2VcbiAqIEBleGFtcGxlXG4gKiAvLyBJbml0aWFsaXplIHRoZSBnZW9sb2NhdGUgY29udHJvbC5cbiAqIHZhciBnZW9sb2NhdGUgPSBuZXcgbWFwYm94Z2wuR2VvbG9jYXRlQ29udHJvbCh7XG4gKiAgIHBvc2l0aW9uT3B0aW9uczoge1xuICogICAgICAgZW5hYmxlSGlnaEFjY3VyYWN5OiB0cnVlXG4gKiAgIH0sXG4gKiAgIHRyYWNrVXNlckxvY2F0aW9uOiB0cnVlXG4gKiB9KTtcbiAqIC8vIEFkZCB0aGUgY29udHJvbCB0byB0aGUgbWFwLlxuICogbWFwLmFkZENvbnRyb2woZ2VvbG9jYXRlKTtcbiAqIC8vIFNldCBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGZpcmVzXG4gKiAvLyB3aGVuIGEgdHJhY2t1c2VybG9jYXRpb25lbmQgZXZlbnQgb2NjdXJzLlxuICogZ2VvbG9jYXRlLm9uKCd0cmFja3VzZXJsb2NhdGlvbmVuZCcsIGZ1bmN0aW9uKCkge1xuICogICBjb25zb2xlLmxvZygnQSB0cmFja3VzZXJsb2NhdGlvbmVuZCBldmVudCBoYXMgb2NjdXJyZWQuJylcbiAqIH0pO1xuICpcbiAqL1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IERPTSBmcm9tICcuLi8uLi91dGlsL2RvbSc7XG5pbXBvcnQge2V4dGVuZCwgYmluZEFsbH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcblxuaW1wb3J0IHR5cGUgTWFwIGZyb20gJy4uL21hcCc7XG5cbnR5cGUgVW5pdCA9ICdpbXBlcmlhbCcgfCAnbWV0cmljJyB8ICduYXV0aWNhbCc7XG5cbnR5cGUgT3B0aW9ucyA9IHtcbiAgICBtYXhXaWR0aD86IG51bWJlcixcbiAgICB1bml0PzogVW5pdDtcbn07XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBPcHRpb25zID0ge1xuICAgIG1heFdpZHRoOiAxMDAsXG4gICAgdW5pdDogJ21ldHJpYydcbn07XG5cbi8qKlxuICogQSBgU2NhbGVDb250cm9sYCBjb250cm9sIGRpc3BsYXlzIHRoZSByYXRpbyBvZiBhIGRpc3RhbmNlIG9uIHRoZSBtYXAgdG8gdGhlIGNvcnJlc3BvbmRpbmcgZGlzdGFuY2Ugb24gdGhlIGdyb3VuZC5cbiAqXG4gKiBAaW1wbGVtZW50cyB7SUNvbnRyb2x9XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4V2lkdGg9JzEwMCddIFRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgc2NhbGUgY29udHJvbCBpbiBwaXhlbHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMudW5pdD0nbWV0cmljJ10gVW5pdCBvZiB0aGUgZGlzdGFuY2UgKGAnaW1wZXJpYWwnYCwgYCdtZXRyaWMnYCBvciBgJ25hdXRpY2FsJ2ApLlxuICogQGV4YW1wbGVcbiAqIHZhciBzY2FsZSA9IG5ldyBtYXBib3hnbC5TY2FsZUNvbnRyb2woe1xuICogICAgIG1heFdpZHRoOiA4MCxcbiAqICAgICB1bml0OiAnaW1wZXJpYWwnXG4gKiB9KTtcbiAqIG1hcC5hZGRDb250cm9sKHNjYWxlKTtcbiAqXG4gKiBzY2FsZS5zZXRVbml0KCdtZXRyaWMnKTtcbiAqL1xuY2xhc3MgU2NhbGVDb250cm9sIHtcbiAgICBfbWFwOiBNYXA7XG4gICAgX2NvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gICAgb3B0aW9uczogT3B0aW9ucztcblxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gZXh0ZW5kKHt9LCBkZWZhdWx0T3B0aW9ucywgb3B0aW9ucyk7XG5cbiAgICAgICAgYmluZEFsbChbXG4gICAgICAgICAgICAnX29uTW92ZScsXG4gICAgICAgICAgICAnc2V0VW5pdCdcbiAgICAgICAgXSwgdGhpcyk7XG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdFBvc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gJ2JvdHRvbS1sZWZ0JztcbiAgICB9XG5cbiAgICBfb25Nb3ZlKCkge1xuICAgICAgICB1cGRhdGVTY2FsZSh0aGlzLl9tYXAsIHRoaXMuX2NvbnRhaW5lciwgdGhpcy5vcHRpb25zKTtcbiAgICB9XG5cbiAgICBvbkFkZChtYXA6IE1hcCkge1xuICAgICAgICB0aGlzLl9tYXAgPSBtYXA7XG4gICAgICAgIHRoaXMuX2NvbnRhaW5lciA9IERPTS5jcmVhdGUoJ2RpdicsICdtYXBib3hnbC1jdHJsIG1hcGJveGdsLWN0cmwtc2NhbGUnLCBtYXAuZ2V0Q29udGFpbmVyKCkpO1xuXG4gICAgICAgIHRoaXMuX21hcC5vbignbW92ZScsIHRoaXMuX29uTW92ZSk7XG4gICAgICAgIHRoaXMuX29uTW92ZSgpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXI7XG4gICAgfVxuXG4gICAgb25SZW1vdmUoKSB7XG4gICAgICAgIERPTS5yZW1vdmUodGhpcy5fY29udGFpbmVyKTtcbiAgICAgICAgdGhpcy5fbWFwLm9mZignbW92ZScsIHRoaXMuX29uTW92ZSk7XG4gICAgICAgIHRoaXMuX21hcCA9ICh1bmRlZmluZWQ6IGFueSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBzY2FsZSdzIHVuaXQgb2YgdGhlIGRpc3RhbmNlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdW5pdCBVbml0IG9mIHRoZSBkaXN0YW5jZSAoYCdpbXBlcmlhbCdgLCBgJ21ldHJpYydgIG9yIGAnbmF1dGljYWwnYCkuXG4gICAgICovXG4gICAgc2V0VW5pdCh1bml0OiBVbml0KSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy51bml0ID0gdW5pdDtcbiAgICAgICAgdXBkYXRlU2NhbGUodGhpcy5fbWFwLCB0aGlzLl9jb250YWluZXIsIHRoaXMub3B0aW9ucyk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTY2FsZUNvbnRyb2w7XG5cbmZ1bmN0aW9uIHVwZGF0ZVNjYWxlKG1hcCwgY29udGFpbmVyLCBvcHRpb25zKSB7XG4gICAgLy8gQSBob3Jpem9udGFsIHNjYWxlIGlzIGltYWdpbmVkIHRvIGJlIHByZXNlbnQgYXQgY2VudGVyIG9mIHRoZSBtYXBcbiAgICAvLyBjb250YWluZXIgd2l0aCBtYXhpbXVtIGxlbmd0aCAoRGVmYXVsdCkgYXMgMTAwcHguXG4gICAgLy8gVXNpbmcgc3BoZXJpY2FsIGxhdyBvZiBjb3NpbmVzIGFwcHJveGltYXRpb24sIHRoZSByZWFsIGRpc3RhbmNlIGlzXG4gICAgLy8gZm91bmQgYmV0d2VlbiB0aGUgdHdvIGNvb3JkaW5hdGVzLlxuICAgIGNvbnN0IG1heFdpZHRoID0gb3B0aW9ucyAmJiBvcHRpb25zLm1heFdpZHRoIHx8IDEwMDtcblxuICAgIGNvbnN0IHkgPSBtYXAuX2NvbnRhaW5lci5jbGllbnRIZWlnaHQgLyAyO1xuICAgIGNvbnN0IGxlZnQgPSBtYXAudW5wcm9qZWN0KFswLCB5XSk7XG4gICAgY29uc3QgcmlnaHQgPSBtYXAudW5wcm9qZWN0KFttYXhXaWR0aCwgeV0pO1xuICAgIGNvbnN0IG1heE1ldGVycyA9IGxlZnQuZGlzdGFuY2VUbyhyaWdodCk7XG4gICAgLy8gVGhlIHJlYWwgZGlzdGFuY2UgY29ycmVzcG9uZGluZyB0byAxMDBweCBzY2FsZSBsZW5ndGggaXMgcm91bmRlZCBvZmYgdG9cbiAgICAvLyBuZWFyIHByZXR0eSBudW1iZXIgYW5kIHRoZSBzY2FsZSBsZW5ndGggZm9yIHRoZSBzYW1lIGlzIGZvdW5kIG91dC5cbiAgICAvLyBEZWZhdWx0IHVuaXQgb2YgdGhlIHNjYWxlIGlzIGJhc2VkIG9uIFVzZXIncyBsb2NhbGUuXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy51bml0ID09PSAnaW1wZXJpYWwnKSB7XG4gICAgICAgIGNvbnN0IG1heEZlZXQgPSAzLjI4MDggKiBtYXhNZXRlcnM7XG4gICAgICAgIGlmIChtYXhGZWV0ID4gNTI4MCkge1xuICAgICAgICAgICAgY29uc3QgbWF4TWlsZXMgPSBtYXhGZWV0IC8gNTI4MDtcbiAgICAgICAgICAgIHNldFNjYWxlKGNvbnRhaW5lciwgbWF4V2lkdGgsIG1heE1pbGVzLCBtYXAuX2dldFVJU3RyaW5nKCdTY2FsZUNvbnRyb2wuTWlsZXMnKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRTY2FsZShjb250YWluZXIsIG1heFdpZHRoLCBtYXhGZWV0LCBtYXAuX2dldFVJU3RyaW5nKCdTY2FsZUNvbnRyb2wuRmVldCcpKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnVuaXQgPT09ICduYXV0aWNhbCcpIHtcbiAgICAgICAgY29uc3QgbWF4TmF1dGljYWxzID0gbWF4TWV0ZXJzIC8gMTg1MjtcbiAgICAgICAgc2V0U2NhbGUoY29udGFpbmVyLCBtYXhXaWR0aCwgbWF4TmF1dGljYWxzLCBtYXAuX2dldFVJU3RyaW5nKCdTY2FsZUNvbnRyb2wuTmF1dGljYWxNaWxlcycpKTtcbiAgICB9IGVsc2UgaWYgKG1heE1ldGVycyA+PSAxMDAwKSB7XG4gICAgICAgIHNldFNjYWxlKGNvbnRhaW5lciwgbWF4V2lkdGgsIG1heE1ldGVycyAvIDEwMDAsIG1hcC5fZ2V0VUlTdHJpbmcoJ1NjYWxlQ29udHJvbC5LaWxvbWV0ZXJzJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFNjYWxlKGNvbnRhaW5lciwgbWF4V2lkdGgsIG1heE1ldGVycywgbWFwLl9nZXRVSVN0cmluZygnU2NhbGVDb250cm9sLk1ldGVycycpKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHNldFNjYWxlKGNvbnRhaW5lciwgbWF4V2lkdGgsIG1heERpc3RhbmNlLCB1bml0KSB7XG4gICAgY29uc3QgZGlzdGFuY2UgPSBnZXRSb3VuZE51bShtYXhEaXN0YW5jZSk7XG4gICAgY29uc3QgcmF0aW8gPSBkaXN0YW5jZSAvIG1heERpc3RhbmNlO1xuICAgIGNvbnRhaW5lci5zdHlsZS53aWR0aCA9IGAke21heFdpZHRoICogcmF0aW99cHhgO1xuICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSBgJHtkaXN0YW5jZX0mbmJzcDske3VuaXR9YDtcbn1cblxuZnVuY3Rpb24gZ2V0RGVjaW1hbFJvdW5kTnVtKGQpIHtcbiAgICBjb25zdCBtdWx0aXBsaWVyID0gTWF0aC5wb3coMTAsIE1hdGguY2VpbCgtTWF0aC5sb2coZCkgLyBNYXRoLkxOMTApKTtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChkICogbXVsdGlwbGllcikgLyBtdWx0aXBsaWVyO1xufVxuXG5mdW5jdGlvbiBnZXRSb3VuZE51bShudW0pIHtcbiAgICBjb25zdCBwb3cxMCA9IE1hdGgucG93KDEwLCAoYCR7TWF0aC5mbG9vcihudW0pfWApLmxlbmd0aCAtIDEpO1xuICAgIGxldCBkID0gbnVtIC8gcG93MTA7XG5cbiAgICBkID0gZCA+PSAxMCA/IDEwIDpcbiAgICAgICAgZCA+PSA1ID8gNSA6XG4gICAgICAgIGQgPj0gMyA/IDMgOlxuICAgICAgICBkID49IDIgPyAyIDpcbiAgICAgICAgZCA+PSAxID8gMSA6IGdldERlY2ltYWxSb3VuZE51bShkKTtcblxuICAgIHJldHVybiBwb3cxMCAqIGQ7XG59XG4iLCIvLyBAZmxvd1xuXG5pbXBvcnQgRE9NIGZyb20gJy4uLy4uL3V0aWwvZG9tJztcblxuaW1wb3J0IHtiaW5kQWxsLCB3YXJuT25jZX0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB3aW5kb3cgZnJvbSAnLi4vLi4vdXRpbC93aW5kb3cnO1xuXG5pbXBvcnQgdHlwZSBNYXAgZnJvbSAnLi4vbWFwJztcblxudHlwZSBPcHRpb25zID0ge1xuICAgIGNvbnRhaW5lcj86IEhUTUxFbGVtZW50XG59O1xuXG4vKipcbiAqIEEgYEZ1bGxzY3JlZW5Db250cm9sYCBjb250cm9sIGNvbnRhaW5zIGEgYnV0dG9uIGZvciB0b2dnbGluZyB0aGUgbWFwIGluIGFuZCBvdXQgb2YgZnVsbHNjcmVlbiBtb2RlLlxuICpcbiAqIEBpbXBsZW1lbnRzIHtJQ29udHJvbH1cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IFtvcHRpb25zLmNvbnRhaW5lcl0gYGNvbnRhaW5lcmAgaXMgdGhlIFtjb21wYXRpYmxlIERPTSBlbGVtZW50XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudC9yZXF1ZXN0RnVsbFNjcmVlbiNDb21wYXRpYmxlX2VsZW1lbnRzKSB3aGljaCBzaG91bGQgYmUgbWFkZSBmdWxsIHNjcmVlbi4gQnkgZGVmYXVsdCwgdGhlIG1hcCBjb250YWluZXIgZWxlbWVudCB3aWxsIGJlIG1hZGUgZnVsbCBzY3JlZW4uXG4gKlxuICogQGV4YW1wbGVcbiAqIG1hcC5hZGRDb250cm9sKG5ldyBtYXBib3hnbC5GdWxsc2NyZWVuQ29udHJvbCh7Y29udGFpbmVyOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdib2R5Jyl9KSk7XG4gKiBAc2VlIFtWaWV3IGEgZnVsbHNjcmVlbiBtYXBdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvZnVsbHNjcmVlbi8pXG4gKi9cblxuY2xhc3MgRnVsbHNjcmVlbkNvbnRyb2wge1xuICAgIF9tYXA6IE1hcDtcbiAgICBfY29udHJvbENvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gICAgX2Z1bGxzY3JlZW46IGJvb2xlYW47XG4gICAgX2Z1bGxzY3JlZW5jaGFuZ2U6IHN0cmluZztcbiAgICBfZnVsbHNjcmVlbkJ1dHRvbjogSFRNTEVsZW1lbnQ7XG4gICAgX2NvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBPcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX2Z1bGxzY3JlZW4gPSBmYWxzZTtcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5jb250YWluZXIpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmNvbnRhaW5lciBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lciA9IG9wdGlvbnMuY29udGFpbmVyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB3YXJuT25jZSgnRnVsbCBzY3JlZW4gY29udHJvbCBcXCdjb250YWluZXJcXCcgbXVzdCBiZSBhIERPTSBlbGVtZW50LicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJpbmRBbGwoW1xuICAgICAgICAgICAgJ19vbkNsaWNrRnVsbHNjcmVlbicsXG4gICAgICAgICAgICAnX2NoYW5nZUljb24nXG4gICAgICAgIF0sIHRoaXMpO1xuICAgICAgICBpZiAoJ29uZnVsbHNjcmVlbmNoYW5nZScgaW4gd2luZG93LmRvY3VtZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9mdWxsc2NyZWVuY2hhbmdlID0gJ2Z1bGxzY3JlZW5jaGFuZ2UnO1xuICAgICAgICB9IGVsc2UgaWYgKCdvbm1vemZ1bGxzY3JlZW5jaGFuZ2UnIGluIHdpbmRvdy5kb2N1bWVudCkge1xuICAgICAgICAgICAgdGhpcy5fZnVsbHNjcmVlbmNoYW5nZSA9ICdtb3pmdWxsc2NyZWVuY2hhbmdlJztcbiAgICAgICAgfSBlbHNlIGlmICgnb253ZWJraXRmdWxsc2NyZWVuY2hhbmdlJyBpbiB3aW5kb3cuZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2Z1bGxzY3JlZW5jaGFuZ2UgPSAnd2Via2l0ZnVsbHNjcmVlbmNoYW5nZSc7XG4gICAgICAgIH0gZWxzZSBpZiAoJ29ubXNmdWxsc2NyZWVuY2hhbmdlJyBpbiB3aW5kb3cuZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2Z1bGxzY3JlZW5jaGFuZ2UgPSAnTVNGdWxsc2NyZWVuQ2hhbmdlJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQWRkKG1hcDogTWFwKSB7XG4gICAgICAgIHRoaXMuX21hcCA9IG1hcDtcbiAgICAgICAgaWYgKCF0aGlzLl9jb250YWluZXIpIHRoaXMuX2NvbnRhaW5lciA9IHRoaXMuX21hcC5nZXRDb250YWluZXIoKTtcbiAgICAgICAgdGhpcy5fY29udHJvbENvbnRhaW5lciA9IERPTS5jcmVhdGUoJ2RpdicsIGBtYXBib3hnbC1jdHJsIG1hcGJveGdsLWN0cmwtZ3JvdXBgKTtcbiAgICAgICAgaWYgKHRoaXMuX2NoZWNrRnVsbHNjcmVlblN1cHBvcnQoKSkge1xuICAgICAgICAgICAgdGhpcy5fc2V0dXBVSSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fY29udHJvbENvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgd2Fybk9uY2UoJ1RoaXMgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgZnVsbHNjcmVlbiBtb2RlLicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250cm9sQ29udGFpbmVyO1xuICAgIH1cblxuICAgIG9uUmVtb3ZlKCkge1xuICAgICAgICBET00ucmVtb3ZlKHRoaXMuX2NvbnRyb2xDb250YWluZXIpO1xuICAgICAgICB0aGlzLl9tYXAgPSAobnVsbDogYW55KTtcbiAgICAgICAgd2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5fZnVsbHNjcmVlbmNoYW5nZSwgdGhpcy5fY2hhbmdlSWNvbik7XG4gICAgfVxuXG4gICAgX2NoZWNrRnVsbHNjcmVlblN1cHBvcnQoKSB7XG4gICAgICAgIHJldHVybiAhIShcbiAgICAgICAgICAgIHdpbmRvdy5kb2N1bWVudC5mdWxsc2NyZWVuRW5hYmxlZCB8fFxuICAgICAgICAgICAgKHdpbmRvdy5kb2N1bWVudDogYW55KS5tb3pGdWxsU2NyZWVuRW5hYmxlZCB8fFxuICAgICAgICAgICAgKHdpbmRvdy5kb2N1bWVudDogYW55KS5tc0Z1bGxzY3JlZW5FbmFibGVkIHx8XG4gICAgICAgICAgICAod2luZG93LmRvY3VtZW50OiBhbnkpLndlYmtpdEZ1bGxzY3JlZW5FbmFibGVkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgX3NldHVwVUkoKSB7XG4gICAgICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuX2Z1bGxzY3JlZW5CdXR0b24gPSBET00uY3JlYXRlKCdidXR0b24nLCAoYG1hcGJveGdsLWN0cmwtZnVsbHNjcmVlbmApLCB0aGlzLl9jb250cm9sQ29udGFpbmVyKTtcbiAgICAgICAgRE9NLmNyZWF0ZSgnc3BhbicsIGBtYXBib3hnbC1jdHJsLWljb25gLCBidXR0b24pLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCB0cnVlKTtcbiAgICAgICAgYnV0dG9uLnR5cGUgPSAnYnV0dG9uJztcbiAgICAgICAgdGhpcy5fdXBkYXRlVGl0bGUoKTtcbiAgICAgICAgdGhpcy5fZnVsbHNjcmVlbkJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX29uQ2xpY2tGdWxsc2NyZWVuKTtcbiAgICAgICAgd2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodGhpcy5fZnVsbHNjcmVlbmNoYW5nZSwgdGhpcy5fY2hhbmdlSWNvbik7XG4gICAgfVxuXG4gICAgX3VwZGF0ZVRpdGxlKCkge1xuICAgICAgICBjb25zdCB0aXRsZSA9IHRoaXMuX2dldFRpdGxlKCk7XG4gICAgICAgIHRoaXMuX2Z1bGxzY3JlZW5CdXR0b24uc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLCB0aXRsZSk7XG4gICAgICAgIHRoaXMuX2Z1bGxzY3JlZW5CdXR0b24udGl0bGUgPSB0aXRsZTtcbiAgICB9XG5cbiAgICBfZ2V0VGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXAuX2dldFVJU3RyaW5nKHRoaXMuX2lzRnVsbHNjcmVlbigpID8gJ0Z1bGxzY3JlZW5Db250cm9sLkV4aXQnIDogJ0Z1bGxzY3JlZW5Db250cm9sLkVudGVyJyk7XG4gICAgfVxuXG4gICAgX2lzRnVsbHNjcmVlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Z1bGxzY3JlZW47XG4gICAgfVxuXG4gICAgX2NoYW5nZUljb24oKSB7XG4gICAgICAgIGNvbnN0IGZ1bGxzY3JlZW5FbGVtZW50ID1cbiAgICAgICAgICAgIHdpbmRvdy5kb2N1bWVudC5mdWxsc2NyZWVuRWxlbWVudCB8fFxuICAgICAgICAgICAgKHdpbmRvdy5kb2N1bWVudDogYW55KS5tb3pGdWxsU2NyZWVuRWxlbWVudCB8fFxuICAgICAgICAgICAgKHdpbmRvdy5kb2N1bWVudDogYW55KS53ZWJraXRGdWxsc2NyZWVuRWxlbWVudCB8fFxuICAgICAgICAgICAgKHdpbmRvdy5kb2N1bWVudDogYW55KS5tc0Z1bGxzY3JlZW5FbGVtZW50O1xuXG4gICAgICAgIGlmICgoZnVsbHNjcmVlbkVsZW1lbnQgPT09IHRoaXMuX2NvbnRhaW5lcikgIT09IHRoaXMuX2Z1bGxzY3JlZW4pIHtcbiAgICAgICAgICAgIHRoaXMuX2Z1bGxzY3JlZW4gPSAhdGhpcy5fZnVsbHNjcmVlbjtcbiAgICAgICAgICAgIHRoaXMuX2Z1bGxzY3JlZW5CdXR0b24uY2xhc3NMaXN0LnRvZ2dsZShgbWFwYm94Z2wtY3RybC1zaHJpbmtgKTtcbiAgICAgICAgICAgIHRoaXMuX2Z1bGxzY3JlZW5CdXR0b24uY2xhc3NMaXN0LnRvZ2dsZShgbWFwYm94Z2wtY3RybC1mdWxsc2NyZWVuYCk7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVUaXRsZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX29uQ2xpY2tGdWxsc2NyZWVuKCkge1xuICAgICAgICBpZiAodGhpcy5faXNGdWxsc2NyZWVuKCkpIHtcbiAgICAgICAgICAgIGlmICh3aW5kb3cuZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4pIHtcbiAgICAgICAgICAgICAgICAod2luZG93LmRvY3VtZW50OiBhbnkpLmV4aXRGdWxsc2NyZWVuKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHdpbmRvdy5kb2N1bWVudC5tb3pDYW5jZWxGdWxsU2NyZWVuKSB7XG4gICAgICAgICAgICAgICAgKHdpbmRvdy5kb2N1bWVudDogYW55KS5tb3pDYW5jZWxGdWxsU2NyZWVuKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHdpbmRvdy5kb2N1bWVudC5tc0V4aXRGdWxsc2NyZWVuKSB7XG4gICAgICAgICAgICAgICAgKHdpbmRvdy5kb2N1bWVudDogYW55KS5tc0V4aXRGdWxsc2NyZWVuKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHdpbmRvdy5kb2N1bWVudC53ZWJraXRDYW5jZWxGdWxsU2NyZWVuKSB7XG4gICAgICAgICAgICAgICAgKHdpbmRvdy5kb2N1bWVudDogYW55KS53ZWJraXRDYW5jZWxGdWxsU2NyZWVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY29udGFpbmVyLnJlcXVlc3RGdWxsc2NyZWVuKSB7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIucmVxdWVzdEZ1bGxzY3JlZW4oKTtcbiAgICAgICAgfSBlbHNlIGlmICgodGhpcy5fY29udGFpbmVyOiBhbnkpLm1velJlcXVlc3RGdWxsU2NyZWVuKSB7XG4gICAgICAgICAgICAodGhpcy5fY29udGFpbmVyOiBhbnkpLm1velJlcXVlc3RGdWxsU2NyZWVuKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoKHRoaXMuX2NvbnRhaW5lcjogYW55KS5tc1JlcXVlc3RGdWxsc2NyZWVuKSB7XG4gICAgICAgICAgICAodGhpcy5fY29udGFpbmVyOiBhbnkpLm1zUmVxdWVzdEZ1bGxzY3JlZW4oKTtcbiAgICAgICAgfSBlbHNlIGlmICgodGhpcy5fY29udGFpbmVyOiBhbnkpLndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuKSB7XG4gICAgICAgICAgICAodGhpcy5fY29udGFpbmVyOiBhbnkpLndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZ1bGxzY3JlZW5Db250cm9sO1xuIiwiLy8gQGZsb3dcblxuaW1wb3J0IHtleHRlbmQsIGJpbmRBbGx9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQge0V2ZW50LCBFdmVudGVkfSBmcm9tICcuLi91dGlsL2V2ZW50ZWQnO1xuaW1wb3J0IHtNYXBNb3VzZUV2ZW50fSBmcm9tICcuLi91aS9ldmVudHMnO1xuaW1wb3J0IERPTSBmcm9tICcuLi91dGlsL2RvbSc7XG5pbXBvcnQgTG5nTGF0IGZyb20gJy4uL2dlby9sbmdfbGF0JztcbmltcG9ydCBQb2ludCBmcm9tICdAbWFwYm94L3BvaW50LWdlb21ldHJ5JztcbmltcG9ydCB3aW5kb3cgZnJvbSAnLi4vdXRpbC93aW5kb3cnO1xuaW1wb3J0IHNtYXJ0V3JhcCBmcm9tICcuLi91dGlsL3NtYXJ0X3dyYXAnO1xuaW1wb3J0IHt0eXBlIEFuY2hvciwgYW5jaG9yVHJhbnNsYXRlLCBhcHBseUFuY2hvckNsYXNzfSBmcm9tICcuL2FuY2hvcic7XG5cbmltcG9ydCB0eXBlIE1hcCBmcm9tICcuL21hcCc7XG5pbXBvcnQgdHlwZSB7TG5nTGF0TGlrZX0gZnJvbSAnLi4vZ2VvL2xuZ19sYXQnO1xuaW1wb3J0IHR5cGUge1BvaW50TGlrZX0gZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAgIGNsb3NlQnV0dG9uOiB0cnVlLFxuICAgIGNsb3NlT25DbGljazogdHJ1ZSxcbiAgICBjbGFzc05hbWU6ICcnLFxuICAgIG1heFdpZHRoOiBcIjI0MHB4XCJcbn07XG5cbmV4cG9ydCB0eXBlIE9mZnNldCA9IG51bWJlciB8IFBvaW50TGlrZSB8IHtbXzogQW5jaG9yXTogUG9pbnRMaWtlfTtcblxuZXhwb3J0IHR5cGUgUG9wdXBPcHRpb25zID0ge1xuICAgIGNsb3NlQnV0dG9uPzogYm9vbGVhbixcbiAgICBjbG9zZU9uQ2xpY2s/OiBib29sZWFuLFxuICAgIGNsb3NlT25Nb3ZlPzogYm9vbGVhbixcbiAgICBhbmNob3I/OiBBbmNob3IsXG4gICAgb2Zmc2V0PzogT2Zmc2V0LFxuICAgIGNsYXNzTmFtZT86IHN0cmluZyxcbiAgICBtYXhXaWR0aD86IHN0cmluZ1xufTtcblxuLyoqXG4gKiBBIHBvcHVwIGNvbXBvbmVudC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmNsb3NlQnV0dG9uPXRydWVdIElmIGB0cnVlYCwgYSBjbG9zZSBidXR0b24gd2lsbCBhcHBlYXIgaW4gdGhlXG4gKiAgIHRvcCByaWdodCBjb3JuZXIgb2YgdGhlIHBvcHVwLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5jbG9zZU9uQ2xpY2s9dHJ1ZV0gSWYgYHRydWVgLCB0aGUgcG9wdXAgd2lsbCBjbG9zZWQgd2hlbiB0aGVcbiAqICAgbWFwIGlzIGNsaWNrZWQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmNsb3NlT25Nb3ZlPWZhbHNlXSBJZiBgdHJ1ZWAsIHRoZSBwb3B1cCB3aWxsIGNsb3NlZCB3aGVuIHRoZVxuICogICBtYXAgbW92ZXMuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYW5jaG9yXSAtIEEgc3RyaW5nIGluZGljYXRpbmcgdGhlIHBhcnQgb2YgdGhlIFBvcHVwIHRoYXQgc2hvdWxkXG4gKiAgIGJlIHBvc2l0aW9uZWQgY2xvc2VzdCB0byB0aGUgY29vcmRpbmF0ZSBzZXQgdmlhIHtAbGluayBQb3B1cCNzZXRMbmdMYXR9LlxuICogICBPcHRpb25zIGFyZSBgJ2NlbnRlcidgLCBgJ3RvcCdgLCBgJ2JvdHRvbSdgLCBgJ2xlZnQnYCwgYCdyaWdodCdgLCBgJ3RvcC1sZWZ0J2AsXG4gKiAgIGAndG9wLXJpZ2h0J2AsIGAnYm90dG9tLWxlZnQnYCwgYW5kIGAnYm90dG9tLXJpZ2h0J2AuIElmIHVuc2V0IHRoZSBhbmNob3Igd2lsbCBiZVxuICogICBkeW5hbWljYWxseSBzZXQgdG8gZW5zdXJlIHRoZSBwb3B1cCBmYWxscyB3aXRoaW4gdGhlIG1hcCBjb250YWluZXIgd2l0aCBhIHByZWZlcmVuY2VcbiAqICAgZm9yIGAnYm90dG9tJ2AuXG4gKiBAcGFyYW0ge251bWJlcnxQb2ludExpa2V8T2JqZWN0fSBbb3B0aW9ucy5vZmZzZXRdIC1cbiAqICBBIHBpeGVsIG9mZnNldCBhcHBsaWVkIHRvIHRoZSBwb3B1cCdzIGxvY2F0aW9uIHNwZWNpZmllZCBhczpcbiAqICAgLSBhIHNpbmdsZSBudW1iZXIgc3BlY2lmeWluZyBhIGRpc3RhbmNlIGZyb20gdGhlIHBvcHVwJ3MgbG9jYXRpb25cbiAqICAgLSBhIHtAbGluayBQb2ludExpa2V9IHNwZWNpZnlpbmcgYSBjb25zdGFudCBvZmZzZXRcbiAqICAgLSBhbiBvYmplY3Qgb2Yge0BsaW5rIFBvaW50fXMgc3BlY2lmaW5nIGFuIG9mZnNldCBmb3IgZWFjaCBhbmNob3IgcG9zaXRpb25cbiAqICBOZWdhdGl2ZSBvZmZzZXRzIGluZGljYXRlIGxlZnQgYW5kIHVwLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNsYXNzTmFtZV0gU3BhY2Utc2VwYXJhdGVkIENTUyBjbGFzcyBuYW1lcyB0byBhZGQgdG8gcG9wdXAgY29udGFpbmVyXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubWF4V2lkdGg9JzI0MHB4J10gLVxuICogIEEgc3RyaW5nIHRoYXQgc2V0cyB0aGUgQ1NTIHByb3BlcnR5IG9mIHRoZSBwb3B1cCdzIG1heGltdW0gd2lkdGgsIGVnIGAnMzAwcHgnYC5cbiAqICBUbyBlbnN1cmUgdGhlIHBvcHVwIHJlc2l6ZXMgdG8gZml0IGl0cyBjb250ZW50LCBzZXQgdGhpcyBwcm9wZXJ0eSB0byBgJ25vbmUnYC5cbiAqICBBdmFpbGFibGUgdmFsdWVzIGNhbiBiZSBmb3VuZCBoZXJlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvbWF4LXdpZHRoXG4gKiBAZXhhbXBsZVxuICogdmFyIG1hcmtlckhlaWdodCA9IDUwLCBtYXJrZXJSYWRpdXMgPSAxMCwgbGluZWFyT2Zmc2V0ID0gMjU7XG4gKiB2YXIgcG9wdXBPZmZzZXRzID0ge1xuICogICd0b3AnOiBbMCwgMF0sXG4gKiAgJ3RvcC1sZWZ0JzogWzAsMF0sXG4gKiAgJ3RvcC1yaWdodCc6IFswLDBdLFxuICogICdib3R0b20nOiBbMCwgLW1hcmtlckhlaWdodF0sXG4gKiAgJ2JvdHRvbS1sZWZ0JzogW2xpbmVhck9mZnNldCwgKG1hcmtlckhlaWdodCAtIG1hcmtlclJhZGl1cyArIGxpbmVhck9mZnNldCkgKiAtMV0sXG4gKiAgJ2JvdHRvbS1yaWdodCc6IFstbGluZWFyT2Zmc2V0LCAobWFya2VySGVpZ2h0IC0gbWFya2VyUmFkaXVzICsgbGluZWFyT2Zmc2V0KSAqIC0xXSxcbiAqICAnbGVmdCc6IFttYXJrZXJSYWRpdXMsIChtYXJrZXJIZWlnaHQgLSBtYXJrZXJSYWRpdXMpICogLTFdLFxuICogICdyaWdodCc6IFstbWFya2VyUmFkaXVzLCAobWFya2VySGVpZ2h0IC0gbWFya2VyUmFkaXVzKSAqIC0xXVxuICogIH07XG4gKiB2YXIgcG9wdXAgPSBuZXcgbWFwYm94Z2wuUG9wdXAoe29mZnNldDogcG9wdXBPZmZzZXRzLCBjbGFzc05hbWU6ICdteS1jbGFzcyd9KVxuICogICAuc2V0TG5nTGF0KGUubG5nTGF0KVxuICogICAuc2V0SFRNTChcIjxoMT5IZWxsbyBXb3JsZCE8L2gxPlwiKVxuICogICAuc2V0TWF4V2lkdGgoXCIzMDBweFwiKVxuICogICAuYWRkVG8obWFwKTtcbiAqIEBzZWUgW0Rpc3BsYXkgYSBwb3B1cF0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9wb3B1cC8pXG4gKiBAc2VlIFtEaXNwbGF5IGEgcG9wdXAgb24gaG92ZXJdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvcG9wdXAtb24taG92ZXIvKVxuICogQHNlZSBbRGlzcGxheSBhIHBvcHVwIG9uIGNsaWNrXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3BvcHVwLW9uLWNsaWNrLylcbiAqIEBzZWUgW0F0dGFjaCBhIHBvcHVwIHRvIGEgbWFya2VyIGluc3RhbmNlXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3NldC1wb3B1cC8pXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBvcHVwIGV4dGVuZHMgRXZlbnRlZCB7XG4gICAgX21hcDogTWFwO1xuICAgIG9wdGlvbnM6IFBvcHVwT3B0aW9ucztcbiAgICBfY29udGVudDogSFRNTEVsZW1lbnQ7XG4gICAgX2NvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gICAgX2Nsb3NlQnV0dG9uOiBIVE1MRWxlbWVudDtcbiAgICBfdGlwOiBIVE1MRWxlbWVudDtcbiAgICBfbG5nTGF0OiBMbmdMYXQ7XG4gICAgX3RyYWNrUG9pbnRlcjogYm9vbGVhbjtcbiAgICBfcG9zOiA/UG9pbnQ7XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBQb3B1cE9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gZXh0ZW5kKE9iamVjdC5jcmVhdGUoZGVmYXVsdE9wdGlvbnMpLCBvcHRpb25zKTtcbiAgICAgICAgYmluZEFsbChbJ191cGRhdGUnLCAnX29uQ2xvc2UnLCAncmVtb3ZlJywgJ19vbk1vdXNlTW92ZScsICdfb25Nb3VzZVVwJywgJ19vbkRyYWcnXSwgdGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyB0aGUgcG9wdXAgdG8gYSBtYXAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge01hcH0gbWFwIFRoZSBNYXBib3ggR0wgSlMgbWFwIHRvIGFkZCB0aGUgcG9wdXAgdG8uXG4gICAgICogQHJldHVybnMge1BvcHVwfSBgdGhpc2BcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG5ldyBtYXBib3hnbC5Qb3B1cCgpXG4gICAgICogICAuc2V0TG5nTGF0KFswLCAwXSlcbiAgICAgKiAgIC5zZXRIVE1MKFwiPGgxPk51bGwgSXNsYW5kPC9oMT5cIilcbiAgICAgKiAgIC5hZGRUbyhtYXApO1xuICAgICAqIEBzZWUgW0Rpc3BsYXkgYSBwb3B1cF0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvcG9wdXAvKVxuICAgICAqIEBzZWUgW0Rpc3BsYXkgYSBwb3B1cCBvbiBob3Zlcl0oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvcG9wdXAtb24taG92ZXIvKVxuICAgICAqIEBzZWUgW0Rpc3BsYXkgYSBwb3B1cCBvbiBjbGlja10oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvcG9wdXAtb24tY2xpY2svKVxuICAgICAqIEBzZWUgW1Nob3cgcG9seWdvbiBpbmZvcm1hdGlvbiBvbiBjbGlja10oaHR0cHM6Ly9kb2NzLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvcG9seWdvbi1wb3B1cC1vbi1jbGljay8pXG4gICAgICovXG4gICAgYWRkVG8obWFwOiBNYXApIHtcbiAgICAgICAgaWYgKHRoaXMuX21hcCkgdGhpcy5yZW1vdmUoKTtcblxuICAgICAgICB0aGlzLl9tYXAgPSBtYXA7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY2xvc2VPbkNsaWNrKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXAub24oJ2NsaWNrJywgdGhpcy5fb25DbG9zZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNsb3NlT25Nb3ZlKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXAub24oJ21vdmUnLCB0aGlzLl9vbkNsb3NlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX21hcC5vbigncmVtb3ZlJywgdGhpcy5yZW1vdmUpO1xuICAgICAgICB0aGlzLl91cGRhdGUoKTtcblxuICAgICAgICBpZiAodGhpcy5fdHJhY2tQb2ludGVyKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXAub24oJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlKTtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vbignbW91c2V1cCcsIHRoaXMuX29uTW91c2VVcCk7XG4gICAgICAgICAgICBpZiAodGhpcy5fY29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLXBvcHVwLXRyYWNrLXBvaW50ZXInKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX21hcC5fY2FudmFzQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLXRyYWNrLXBvaW50ZXInKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vbignbW92ZScsIHRoaXMuX3VwZGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZWQgd2hlbiB0aGUgcG9wdXAgaXMgb3BlbmVkIG1hbnVhbGx5IG9yIHByb2dyYW1hdGljYWxseS5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV2ZW50IG9wZW5cbiAgICAgICAgICogQG1lbWJlcm9mIFBvcHVwXG4gICAgICAgICAqIEBpbnN0YW5jZVxuICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAgICAgKiBAcHJvcGVydHkge1BvcHVwfSBwb3B1cCBvYmplY3QgdGhhdCB3YXMgb3BlbmVkXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqIC8vIENyZWF0ZSBhIHBvcHVwXG4gICAgICAgICAqIHZhciBwb3B1cCA9IG5ldyBtYXBib3hnbC5Qb3B1cCgpO1xuICAgICAgICAgKiAvLyBTZXQgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCB3aWxsIGZpcmVcbiAgICAgICAgICogLy8gYW55IHRpbWUgdGhlIHBvcHVwIGlzIG9wZW5lZFxuICAgICAgICAgKiBwb3B1cC5vbignb3BlbicsIGZ1bmN0aW9uKCl7XG4gICAgICAgICAqICAgY29uc29sZS5sb2coJ3BvcHVwIHdhcyBvcGVuZWQnKTtcbiAgICAgICAgICogfSk7XG4gICAgICAgICAqXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZpcmUobmV3IEV2ZW50KCdvcGVuJykpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHBvcHVwIGlzIG9wZW4sIGBmYWxzZWAgaWYgaXQgaXMgY2xvc2VkLlxuICAgICAqL1xuICAgIGlzT3BlbigpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fbWFwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIHBvcHVwIGZyb20gdGhlIG1hcCBpdCBoYXMgYmVlbiBhZGRlZCB0by5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIHBvcHVwID0gbmV3IG1hcGJveGdsLlBvcHVwKCkuYWRkVG8obWFwKTtcbiAgICAgKiBwb3B1cC5yZW1vdmUoKTtcbiAgICAgKiBAcmV0dXJucyB7UG9wdXB9IGB0aGlzYFxuICAgICAqL1xuICAgIHJlbW92ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NvbnRlbnQpIHtcbiAgICAgICAgICAgIERPTS5yZW1vdmUodGhpcy5fY29udGVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fY29udGFpbmVyKSB7XG4gICAgICAgICAgICBET00ucmVtb3ZlKHRoaXMuX2NvbnRhaW5lcik7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fY29udGFpbmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX21hcCkge1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9mZignbW92ZScsIHRoaXMuX3VwZGF0ZSk7XG4gICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCdtb3ZlJywgdGhpcy5fb25DbG9zZSk7XG4gICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCdjbGljaycsIHRoaXMuX29uQ2xvc2UpO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9mZigncmVtb3ZlJywgdGhpcy5yZW1vdmUpO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9mZignbW91c2Vtb3ZlJywgdGhpcy5fb25Nb3VzZU1vdmUpO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9mZignbW91c2V1cCcsIHRoaXMuX29uTW91c2VVcCk7XG4gICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCdkcmFnJywgdGhpcy5fb25EcmFnKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9tYXA7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZWQgd2hlbiB0aGUgcG9wdXAgaXMgY2xvc2VkIG1hbnVhbGx5IG9yIHByb2dyYW1hdGljYWxseS5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV2ZW50IGNsb3NlXG4gICAgICAgICAqIEBtZW1iZXJvZiBQb3B1cFxuICAgICAgICAgKiBAaW5zdGFuY2VcbiAgICAgICAgICogQHR5cGUge09iamVjdH1cbiAgICAgICAgICogQHByb3BlcnR5IHtQb3B1cH0gcG9wdXAgb2JqZWN0IHRoYXQgd2FzIGNsb3NlZFxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKiAvLyBDcmVhdGUgYSBwb3B1cFxuICAgICAgICAgKiB2YXIgcG9wdXAgPSBuZXcgbWFwYm94Z2wuUG9wdXAoKTtcbiAgICAgICAgICogLy8gU2V0IGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgd2lsbCBmaXJlXG4gICAgICAgICAqIC8vIGFueSB0aW1lIHRoZSBwb3B1cCBpcyBjbG9zZWRcbiAgICAgICAgICogcG9wdXAub24oJ2Nsb3NlJywgZnVuY3Rpb24oKXtcbiAgICAgICAgICogICBjb25zb2xlLmxvZygncG9wdXAgd2FzIGNsb3NlZCcpO1xuICAgICAgICAgKiB9KTtcbiAgICAgICAgICpcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZmlyZShuZXcgRXZlbnQoJ2Nsb3NlJykpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGdlb2dyYXBoaWNhbCBsb2NhdGlvbiBvZiB0aGUgcG9wdXAncyBhbmNob3IuXG4gICAgICpcbiAgICAgKiBUaGUgbG9uZ2l0dWRlIG9mIHRoZSByZXN1bHQgbWF5IGRpZmZlciBieSBhIG11bHRpcGxlIG9mIDM2MCBkZWdyZWVzIGZyb20gdGhlIGxvbmdpdHVkZSBwcmV2aW91c2x5XG4gICAgICogc2V0IGJ5IGBzZXRMbmdMYXRgIGJlY2F1c2UgYFBvcHVwYCB3cmFwcyB0aGUgYW5jaG9yIGxvbmdpdHVkZSBhY3Jvc3MgY29waWVzIG9mIHRoZSB3b3JsZCB0byBrZWVwXG4gICAgICogdGhlIHBvcHVwIG9uIHNjcmVlbi5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtMbmdMYXR9IFRoZSBnZW9ncmFwaGljYWwgbG9jYXRpb24gb2YgdGhlIHBvcHVwJ3MgYW5jaG9yLlxuICAgICAqL1xuICAgIGdldExuZ0xhdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xuZ0xhdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBnZW9ncmFwaGljYWwgbG9jYXRpb24gb2YgdGhlIHBvcHVwJ3MgYW5jaG9yLCBhbmQgbW92ZXMgdGhlIHBvcHVwIHRvIGl0LiBSZXBsYWNlcyB0cmFja1BvaW50ZXIoKSBiZWhhdmlvci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBsbmdsYXQgVGhlIGdlb2dyYXBoaWNhbCBsb2NhdGlvbiB0byBzZXQgYXMgdGhlIHBvcHVwJ3MgYW5jaG9yLlxuICAgICAqIEByZXR1cm5zIHtQb3B1cH0gYHRoaXNgXG4gICAgICovXG4gICAgc2V0TG5nTGF0KGxuZ2xhdDogTG5nTGF0TGlrZSkge1xuICAgICAgICB0aGlzLl9sbmdMYXQgPSBMbmdMYXQuY29udmVydChsbmdsYXQpO1xuICAgICAgICB0aGlzLl9wb3MgPSBudWxsO1xuXG4gICAgICAgIHRoaXMuX3RyYWNrUG9pbnRlciA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuXG4gICAgICAgIGlmICh0aGlzLl9tYXApIHtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vbignbW92ZScsIHRoaXMuX3VwZGF0ZSk7XG4gICAgICAgICAgICB0aGlzLl9tYXAub2ZmKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSk7XG4gICAgICAgICAgICBpZiAodGhpcy5fY29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLXBvcHVwLXRyYWNrLXBvaW50ZXInKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX21hcC5fY2FudmFzQ29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoJ21hcGJveGdsLXRyYWNrLXBvaW50ZXInKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyYWNrcyB0aGUgcG9wdXAgYW5jaG9yIHRvIHRoZSBjdXJzb3IgcG9zaXRpb24gb24gc2NyZWVucyB3aXRoIGEgcG9pbnRlciBkZXZpY2UgKGl0IHdpbGwgYmUgaGlkZGVuIG9uIHRvdWNoc2NyZWVucykuIFJlcGxhY2VzIHRoZSBgc2V0TG5nTGF0YCBiZWhhdmlvci5cbiAgICAgKiBGb3IgbW9zdCB1c2UgY2FzZXMsIHNldCBgY2xvc2VPbkNsaWNrYCBhbmQgYGNsb3NlQnV0dG9uYCB0byBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIHBvcHVwID0gbmV3IG1hcGJveGdsLlBvcHVwKHsgY2xvc2VPbkNsaWNrOiBmYWxzZSwgY2xvc2VCdXR0b246IGZhbHNlIH0pXG4gICAgICogICAuc2V0SFRNTChcIjxoMT5IZWxsbyBXb3JsZCE8L2gxPlwiKVxuICAgICAqICAgLnRyYWNrUG9pbnRlcigpXG4gICAgICogICAuYWRkVG8obWFwKTtcbiAgICAgKiBAcmV0dXJucyB7UG9wdXB9IGB0aGlzYFxuICAgICAqL1xuICAgIHRyYWNrUG9pbnRlcigpIHtcbiAgICAgICAgdGhpcy5fdHJhY2tQb2ludGVyID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fcG9zID0gbnVsbDtcbiAgICAgICAgdGhpcy5fdXBkYXRlKCk7XG4gICAgICAgIGlmICh0aGlzLl9tYXApIHtcbiAgICAgICAgICAgIHRoaXMuX21hcC5vZmYoJ21vdmUnLCB0aGlzLl91cGRhdGUpO1xuICAgICAgICAgICAgdGhpcy5fbWFwLm9uKCdtb3VzZW1vdmUnLCB0aGlzLl9vbk1vdXNlTW92ZSk7XG4gICAgICAgICAgICB0aGlzLl9tYXAub24oJ2RyYWcnLCB0aGlzLl9vbkRyYWcpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC1wb3B1cC10cmFjay1wb2ludGVyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9tYXAuX2NhbnZhc0NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdtYXBib3hnbC10cmFjay1wb2ludGVyJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGBQb3B1cGAncyBIVE1MIGVsZW1lbnQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBDaGFuZ2UgdGhlIGBQb3B1cGAgZWxlbWVudCdzIGZvbnQgc2l6ZVxuICAgICAqIHZhciBwb3B1cCA9IG5ldyBtYXBib3hnbC5Qb3B1cCgpXG4gICAgICogICAuc2V0TG5nTGF0KFstOTYsIDM3LjhdKVxuICAgICAqICAgLnNldEhUTUwoXCI8cD5IZWxsbyBXb3JsZCE8L3A+XCIpXG4gICAgICogICAuYWRkVG8obWFwKTtcbiAgICAgKiB2YXIgcG9wdXBFbGVtID0gcG9wdXAuZ2V0RWxlbWVudCgpO1xuICAgICAqIHBvcHVwRWxlbS5zdHlsZS5mb250U2l6ZSA9IFwiMjVweFwiO1xuICAgICAqIEByZXR1cm5zIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICAgICAqL1xuICAgIGdldEVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcG9wdXAncyBjb250ZW50IHRvIGEgc3RyaW5nIG9mIHRleHQuXG4gICAgICpcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBbVGV4dF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1RleHQpIG5vZGUgaW4gdGhlIERPTSxcbiAgICAgKiBzbyBpdCBjYW5ub3QgaW5zZXJ0IHJhdyBIVE1MLiBVc2UgdGhpcyBtZXRob2QgZm9yIHNlY3VyaXR5IGFnYWluc3QgWFNTXG4gICAgICogaWYgdGhlIHBvcHVwIGNvbnRlbnQgaXMgdXNlci1wcm92aWRlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0ZXh0IFRleHR1YWwgY29udGVudCBmb3IgdGhlIHBvcHVwLlxuICAgICAqIEByZXR1cm5zIHtQb3B1cH0gYHRoaXNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiB2YXIgcG9wdXAgPSBuZXcgbWFwYm94Z2wuUG9wdXAoKVxuICAgICAqICAgLnNldExuZ0xhdChlLmxuZ0xhdClcbiAgICAgKiAgIC5zZXRUZXh0KCdIZWxsbywgd29ybGQhJylcbiAgICAgKiAgIC5hZGRUbyhtYXApO1xuICAgICAqL1xuICAgIHNldFRleHQodGV4dDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldERPTUNvbnRlbnQod2luZG93LmRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRleHQpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBwb3B1cCdzIGNvbnRlbnQgdG8gdGhlIEhUTUwgcHJvdmlkZWQgYXMgYSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBUaGlzIG1ldGhvZCBkb2VzIG5vdCBwZXJmb3JtIEhUTUwgZmlsdGVyaW5nIG9yIHNhbml0aXphdGlvbiwgYW5kIG11c3QgYmVcbiAgICAgKiB1c2VkIG9ubHkgd2l0aCB0cnVzdGVkIGNvbnRlbnQuIENvbnNpZGVyIHtAbGluayBQb3B1cCNzZXRUZXh0fSBpZlxuICAgICAqIHRoZSBjb250ZW50IGlzIGFuIHVudHJ1c3RlZCB0ZXh0IHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBodG1sIEEgc3RyaW5nIHJlcHJlc2VudGluZyBIVE1MIGNvbnRlbnQgZm9yIHRoZSBwb3B1cC5cbiAgICAgKiBAcmV0dXJucyB7UG9wdXB9IGB0aGlzYFxuICAgICAqIEBleGFtcGxlXG4gICAgICogdmFyIHBvcHVwID0gbmV3IG1hcGJveGdsLlBvcHVwKClcbiAgICAgKiAgIC5zZXRMbmdMYXQoZS5sbmdMYXQpXG4gICAgICogICAuc2V0SFRNTChcIjxoMT5IZWxsbyBXb3JsZCE8L2gxPlwiKVxuICAgICAqICAgLmFkZFRvKG1hcCk7XG4gICAgICogQHNlZSBbRGlzcGxheSBhIHBvcHVwXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9wb3B1cC8pXG4gICAgICogQHNlZSBbRGlzcGxheSBhIHBvcHVwIG9uIGhvdmVyXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9wb3B1cC1vbi1ob3Zlci8pXG4gICAgICogQHNlZSBbRGlzcGxheSBhIHBvcHVwIG9uIGNsaWNrXShodHRwczovL2RvY3MubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9wb3B1cC1vbi1jbGljay8pXG4gICAgICogQHNlZSBbQXR0YWNoIGEgcG9wdXAgdG8gYSBtYXJrZXIgaW5zdGFuY2VdKGh0dHBzOi8vZG9jcy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlL3NldC1wb3B1cC8pXG4gICAgICovXG4gICAgc2V0SFRNTChodG1sOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZnJhZyA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICAgIGNvbnN0IHRlbXAgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYm9keScpO1xuICAgICAgICBsZXQgY2hpbGQ7XG4gICAgICAgIHRlbXAuaW5uZXJIVE1MID0gaHRtbDtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIGNoaWxkID0gdGVtcC5maXJzdENoaWxkO1xuICAgICAgICAgICAgaWYgKCFjaGlsZCkgYnJlYWs7XG4gICAgICAgICAgICBmcmFnLmFwcGVuZENoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnNldERPTUNvbnRlbnQoZnJhZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgcG9wdXAncyBtYXhpbXVtIHdpZHRoLlxuICAgICAqXG4gICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIG1heGltdW0gd2lkdGggb2YgdGhlIHBvcHVwLlxuICAgICAqL1xuICAgIGdldE1heFdpZHRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29udGFpbmVyICYmIHRoaXMuX2NvbnRhaW5lci5zdHlsZS5tYXhXaWR0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBwb3B1cCdzIG1heGltdW0gd2lkdGguIFRoaXMgaXMgc2V0dGluZyB0aGUgQ1NTIHByb3BlcnR5IGBtYXgtd2lkdGhgLlxuICAgICAqIEF2YWlsYWJsZSB2YWx1ZXMgY2FuIGJlIGZvdW5kIGhlcmU6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9tYXgtd2lkdGhcbiAgICAgKlxuICAgICAqIEBwYXJhbSBtYXhXaWR0aCBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIGZvciB0aGUgbWF4aW11bSB3aWR0aC5cbiAgICAgKiBAcmV0dXJucyB7UG9wdXB9IGB0aGlzYFxuICAgICAqL1xuICAgIHNldE1heFdpZHRoKG1heFdpZHRoOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLm1heFdpZHRoID0gbWF4V2lkdGg7XG4gICAgICAgIHRoaXMuX3VwZGF0ZSgpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBwb3B1cCdzIGNvbnRlbnQgdG8gdGhlIGVsZW1lbnQgcHJvdmlkZWQgYXMgYSBET00gbm9kZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBodG1sTm9kZSBBIERPTSBub2RlIHRvIGJlIHVzZWQgYXMgY29udGVudCBmb3IgdGhlIHBvcHVwLlxuICAgICAqIEByZXR1cm5zIHtQb3B1cH0gYHRoaXNgXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiAvLyBjcmVhdGUgYW4gZWxlbWVudCB3aXRoIHRoZSBwb3B1cCBjb250ZW50XG4gICAgICogdmFyIGRpdiA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgKiBkaXYuaW5uZXJIVE1MID0gJ0hlbGxvLCB3b3JsZCEnO1xuICAgICAqIHZhciBwb3B1cCA9IG5ldyBtYXBib3hnbC5Qb3B1cCgpXG4gICAgICogICAuc2V0TG5nTGF0KGUubG5nTGF0KVxuICAgICAqICAgLnNldERPTUNvbnRlbnQoZGl2KVxuICAgICAqICAgLmFkZFRvKG1hcCk7XG4gICAgICovXG4gICAgc2V0RE9NQ29udGVudChodG1sTm9kZTogTm9kZSkge1xuICAgICAgICB0aGlzLl9jcmVhdGVDb250ZW50KCk7XG4gICAgICAgIHRoaXMuX2NvbnRlbnQuYXBwZW5kQ2hpbGQoaHRtbE5vZGUpO1xuICAgICAgICB0aGlzLl91cGRhdGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIENTUyBjbGFzcyB0byB0aGUgcG9wdXAgY29udGFpbmVyIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lIE5vbi1lbXB0eSBzdHJpbmcgd2l0aCBDU1MgY2xhc3MgbmFtZSB0byBhZGQgdG8gcG9wdXAgY29udGFpbmVyXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGxldCBwb3B1cCA9IG5ldyBtYXBib3hnbC5Qb3B1cCgpXG4gICAgICogcG9wdXAuYWRkQ2xhc3NOYW1lKCdzb21lLWNsYXNzJylcbiAgICAgKi9cbiAgICBhZGRDbGFzc05hbWUoY2xhc3NOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NvbnRhaW5lcikge1xuICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYSBDU1MgY2xhc3MgZnJvbSB0aGUgcG9wdXAgY29udGFpbmVyIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lIE5vbi1lbXB0eSBzdHJpbmcgd2l0aCBDU1MgY2xhc3MgbmFtZSB0byByZW1vdmUgZnJvbSBwb3B1cCBjb250YWluZXJcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogbGV0IHBvcHVwID0gbmV3IG1hcGJveGdsLlBvcHVwKClcbiAgICAgKiBwb3B1cC5yZW1vdmVDbGFzc05hbWUoJ3NvbWUtY2xhc3MnKVxuICAgICAqL1xuICAgIHJlbW92ZUNsYXNzTmFtZShjbGFzc05hbWU6IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5fY29udGFpbmVyKSB7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkIG9yIHJlbW92ZSB0aGUgZ2l2ZW4gQ1NTIGNsYXNzIG9uIHRoZSBwb3B1cCBjb250YWluZXIsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBjb250YWluZXIgY3VycmVudGx5IGhhcyB0aGF0IGNsYXNzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZSBOb24tZW1wdHkgc3RyaW5nIHdpdGggQ1NTIGNsYXNzIG5hbWUgdG8gYWRkL3JlbW92ZVxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IGlmIHRoZSBjbGFzcyB3YXMgcmVtb3ZlZCByZXR1cm4gZmFsc2UsIGlmIGNsYXNzIHdhcyBhZGRlZCwgdGhlbiByZXR1cm4gdHJ1ZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBsZXQgcG9wdXAgPSBuZXcgbWFwYm94Z2wuUG9wdXAoKVxuICAgICAqIHBvcHVwLnRvZ2dsZUNsYXNzTmFtZSgndG9nZ2xlQ2xhc3MnKVxuICAgICAqL1xuICAgIHRvZ2dsZUNsYXNzTmFtZShjbGFzc05hbWU6IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5fY29udGFpbmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC50b2dnbGUoY2xhc3NOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9jcmVhdGVDb250ZW50KCkge1xuICAgICAgICBpZiAodGhpcy5fY29udGVudCkge1xuICAgICAgICAgICAgRE9NLnJlbW92ZSh0aGlzLl9jb250ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NvbnRlbnQgPSBET00uY3JlYXRlKCdkaXYnLCAnbWFwYm94Z2wtcG9wdXAtY29udGVudCcsIHRoaXMuX2NvbnRhaW5lcik7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY2xvc2VCdXR0b24pIHtcbiAgICAgICAgICAgIHRoaXMuX2Nsb3NlQnV0dG9uID0gRE9NLmNyZWF0ZSgnYnV0dG9uJywgJ21hcGJveGdsLXBvcHVwLWNsb3NlLWJ1dHRvbicsIHRoaXMuX2NvbnRlbnQpO1xuICAgICAgICAgICAgdGhpcy5fY2xvc2VCdXR0b24udHlwZSA9ICdidXR0b24nO1xuICAgICAgICAgICAgdGhpcy5fY2xvc2VCdXR0b24uc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgJ0Nsb3NlIHBvcHVwJyk7XG4gICAgICAgICAgICB0aGlzLl9jbG9zZUJ1dHRvbi5pbm5lckhUTUwgPSAnJiMyMTU7JztcbiAgICAgICAgICAgIHRoaXMuX2Nsb3NlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fb25DbG9zZSk7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIF9vbk1vdXNlVXAoZXZlbnQ6IE1hcE1vdXNlRXZlbnQpIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlKGV2ZW50LnBvaW50KTtcbiAgICB9XG5cbiAgICBfb25Nb3VzZU1vdmUoZXZlbnQ6IE1hcE1vdXNlRXZlbnQpIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlKGV2ZW50LnBvaW50KTtcbiAgICB9XG5cbiAgICBfb25EcmFnKGV2ZW50OiBNYXBNb3VzZUV2ZW50KSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZShldmVudC5wb2ludCk7XG4gICAgfVxuXG4gICAgX3VwZGF0ZShjdXJzb3I6IFBvaW50TGlrZSkge1xuICAgICAgICBjb25zdCBoYXNQb3NpdGlvbiA9IHRoaXMuX2xuZ0xhdCB8fCB0aGlzLl90cmFja1BvaW50ZXI7XG5cbiAgICAgICAgaWYgKCF0aGlzLl9tYXAgfHwgIWhhc1Bvc2l0aW9uIHx8ICF0aGlzLl9jb250ZW50KSB7IHJldHVybjsgfVxuXG4gICAgICAgIGlmICghdGhpcy5fY29udGFpbmVyKSB7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIgPSBET00uY3JlYXRlKCdkaXYnLCAnbWFwYm94Z2wtcG9wdXAnLCB0aGlzLl9tYXAuZ2V0Q29udGFpbmVyKCkpO1xuICAgICAgICAgICAgdGhpcy5fdGlwICAgICAgID0gRE9NLmNyZWF0ZSgnZGl2JywgJ21hcGJveGdsLXBvcHVwLXRpcCcsIHRoaXMuX2NvbnRhaW5lcik7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fY29udGVudCk7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNsYXNzTmFtZSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5jbGFzc05hbWUuc3BsaXQoJyAnKS5mb3JFYWNoKG5hbWUgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQobmFtZSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5fdHJhY2tQb2ludGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ21hcGJveGdsLXBvcHVwLXRyYWNrLXBvaW50ZXInKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubWF4V2lkdGggJiYgdGhpcy5fY29udGFpbmVyLnN0eWxlLm1heFdpZHRoICE9PSB0aGlzLm9wdGlvbnMubWF4V2lkdGgpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5zdHlsZS5tYXhXaWR0aCA9IHRoaXMub3B0aW9ucy5tYXhXaWR0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9tYXAudHJhbnNmb3JtLnJlbmRlcldvcmxkQ29waWVzICYmICF0aGlzLl90cmFja1BvaW50ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2xuZ0xhdCA9IHNtYXJ0V3JhcCh0aGlzLl9sbmdMYXQsIHRoaXMuX3BvcywgdGhpcy5fbWFwLnRyYW5zZm9ybSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fdHJhY2tQb2ludGVyICYmICFjdXJzb3IpIHJldHVybjtcblxuICAgICAgICBjb25zdCBwb3MgPSB0aGlzLl9wb3MgPSB0aGlzLl90cmFja1BvaW50ZXIgJiYgY3Vyc29yID8gY3Vyc29yIDogdGhpcy5fbWFwLnByb2plY3QodGhpcy5fbG5nTGF0KTtcblxuICAgICAgICBsZXQgYW5jaG9yOiA/QW5jaG9yID0gdGhpcy5vcHRpb25zLmFuY2hvcjtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gbm9ybWFsaXplT2Zmc2V0KHRoaXMub3B0aW9ucy5vZmZzZXQpO1xuXG4gICAgICAgIGlmICghYW5jaG9yKSB7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMuX2NvbnRhaW5lci5vZmZzZXRXaWR0aDtcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuX2NvbnRhaW5lci5vZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgICBsZXQgYW5jaG9yQ29tcG9uZW50cztcblxuICAgICAgICAgICAgaWYgKHBvcy55ICsgb2Zmc2V0LmJvdHRvbS55IDwgaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgYW5jaG9yQ29tcG9uZW50cyA9IFsndG9wJ107XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBvcy55ID4gdGhpcy5fbWFwLnRyYW5zZm9ybS5oZWlnaHQgLSBoZWlnaHQpIHtcbiAgICAgICAgICAgICAgICBhbmNob3JDb21wb25lbnRzID0gWydib3R0b20nXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYW5jaG9yQ29tcG9uZW50cyA9IFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocG9zLnggPCB3aWR0aCAvIDIpIHtcbiAgICAgICAgICAgICAgICBhbmNob3JDb21wb25lbnRzLnB1c2goJ2xlZnQnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocG9zLnggPiB0aGlzLl9tYXAudHJhbnNmb3JtLndpZHRoIC0gd2lkdGggLyAyKSB7XG4gICAgICAgICAgICAgICAgYW5jaG9yQ29tcG9uZW50cy5wdXNoKCdyaWdodCcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYW5jaG9yQ29tcG9uZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBhbmNob3IgPSAnYm90dG9tJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYW5jaG9yID0gKGFuY2hvckNvbXBvbmVudHMuam9pbignLScpOiBhbnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb2Zmc2V0ZWRQb3MgPSBwb3MuYWRkKG9mZnNldFthbmNob3JdKS5yb3VuZCgpO1xuICAgICAgICBET00uc2V0VHJhbnNmb3JtKHRoaXMuX2NvbnRhaW5lciwgYCR7YW5jaG9yVHJhbnNsYXRlW2FuY2hvcl19IHRyYW5zbGF0ZSgke29mZnNldGVkUG9zLnh9cHgsJHtvZmZzZXRlZFBvcy55fXB4KWApO1xuICAgICAgICBhcHBseUFuY2hvckNsYXNzKHRoaXMuX2NvbnRhaW5lciwgYW5jaG9yLCAncG9wdXAnKTtcbiAgICB9XG5cbiAgICBfb25DbG9zZSgpIHtcbiAgICAgICAgdGhpcy5yZW1vdmUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU9mZnNldChvZmZzZXQ6ID9PZmZzZXQpIHtcbiAgICBpZiAoIW9mZnNldCkge1xuICAgICAgICByZXR1cm4gbm9ybWFsaXplT2Zmc2V0KG5ldyBQb2ludCgwLCAwKSk7XG5cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvZmZzZXQgPT09ICdudW1iZXInKSB7XG4gICAgICAgIC8vIGlucHV0IHNwZWNpZmllcyBhIHJhZGl1cyBmcm9tIHdoaWNoIHRvIGNhbGN1bGF0ZSBvZmZzZXRzIGF0IGFsbCBwb3NpdGlvbnNcbiAgICAgICAgY29uc3QgY29ybmVyT2Zmc2V0ID0gTWF0aC5yb3VuZChNYXRoLnNxcnQoMC41ICogTWF0aC5wb3cob2Zmc2V0LCAyKSkpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2NlbnRlcic6IG5ldyBQb2ludCgwLCAwKSxcbiAgICAgICAgICAgICd0b3AnOiBuZXcgUG9pbnQoMCwgb2Zmc2V0KSxcbiAgICAgICAgICAgICd0b3AtbGVmdCc6IG5ldyBQb2ludChjb3JuZXJPZmZzZXQsIGNvcm5lck9mZnNldCksXG4gICAgICAgICAgICAndG9wLXJpZ2h0JzogbmV3IFBvaW50KC1jb3JuZXJPZmZzZXQsIGNvcm5lck9mZnNldCksXG4gICAgICAgICAgICAnYm90dG9tJzogbmV3IFBvaW50KDAsIC1vZmZzZXQpLFxuICAgICAgICAgICAgJ2JvdHRvbS1sZWZ0JzogbmV3IFBvaW50KGNvcm5lck9mZnNldCwgLWNvcm5lck9mZnNldCksXG4gICAgICAgICAgICAnYm90dG9tLXJpZ2h0JzogbmV3IFBvaW50KC1jb3JuZXJPZmZzZXQsIC1jb3JuZXJPZmZzZXQpLFxuICAgICAgICAgICAgJ2xlZnQnOiBuZXcgUG9pbnQob2Zmc2V0LCAwKSxcbiAgICAgICAgICAgICdyaWdodCc6IG5ldyBQb2ludCgtb2Zmc2V0LCAwKVxuICAgICAgICB9O1xuXG4gICAgfSBlbHNlIGlmIChvZmZzZXQgaW5zdGFuY2VvZiBQb2ludCB8fCBBcnJheS5pc0FycmF5KG9mZnNldCkpIHtcbiAgICAgICAgLy8gaW5wdXQgc3BlY2lmaWVzIGEgc2luZ2xlIG9mZnNldCB0byBiZSBhcHBsaWVkIHRvIGFsbCBwb3NpdGlvbnNcbiAgICAgICAgY29uc3QgY29udmVydGVkT2Zmc2V0ID0gUG9pbnQuY29udmVydChvZmZzZXQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2NlbnRlcic6IGNvbnZlcnRlZE9mZnNldCxcbiAgICAgICAgICAgICd0b3AnOiBjb252ZXJ0ZWRPZmZzZXQsXG4gICAgICAgICAgICAndG9wLWxlZnQnOiBjb252ZXJ0ZWRPZmZzZXQsXG4gICAgICAgICAgICAndG9wLXJpZ2h0JzogY29udmVydGVkT2Zmc2V0LFxuICAgICAgICAgICAgJ2JvdHRvbSc6IGNvbnZlcnRlZE9mZnNldCxcbiAgICAgICAgICAgICdib3R0b20tbGVmdCc6IGNvbnZlcnRlZE9mZnNldCxcbiAgICAgICAgICAgICdib3R0b20tcmlnaHQnOiBjb252ZXJ0ZWRPZmZzZXQsXG4gICAgICAgICAgICAnbGVmdCc6IGNvbnZlcnRlZE9mZnNldCxcbiAgICAgICAgICAgICdyaWdodCc6IGNvbnZlcnRlZE9mZnNldFxuICAgICAgICB9O1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaW5wdXQgc3BlY2lmaWVzIGFuIG9mZnNldCBwZXIgcG9zaXRpb25cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdjZW50ZXInOiBQb2ludC5jb252ZXJ0KG9mZnNldFsnY2VudGVyJ10gfHwgWzAsIDBdKSxcbiAgICAgICAgICAgICd0b3AnOiBQb2ludC5jb252ZXJ0KG9mZnNldFsndG9wJ10gfHwgWzAsIDBdKSxcbiAgICAgICAgICAgICd0b3AtbGVmdCc6IFBvaW50LmNvbnZlcnQob2Zmc2V0Wyd0b3AtbGVmdCddIHx8IFswLCAwXSksXG4gICAgICAgICAgICAndG9wLXJpZ2h0JzogUG9pbnQuY29udmVydChvZmZzZXRbJ3RvcC1yaWdodCddIHx8IFswLCAwXSksXG4gICAgICAgICAgICAnYm90dG9tJzogUG9pbnQuY29udmVydChvZmZzZXRbJ2JvdHRvbSddIHx8IFswLCAwXSksXG4gICAgICAgICAgICAnYm90dG9tLWxlZnQnOiBQb2ludC5jb252ZXJ0KG9mZnNldFsnYm90dG9tLWxlZnQnXSB8fCBbMCwgMF0pLFxuICAgICAgICAgICAgJ2JvdHRvbS1yaWdodCc6IFBvaW50LmNvbnZlcnQob2Zmc2V0Wydib3R0b20tcmlnaHQnXSB8fCBbMCwgMF0pLFxuICAgICAgICAgICAgJ2xlZnQnOiBQb2ludC5jb252ZXJ0KG9mZnNldFsnbGVmdCddIHx8IFswLCAwXSksXG4gICAgICAgICAgICAncmlnaHQnOiBQb2ludC5jb252ZXJ0KG9mZnNldFsncmlnaHQnXSB8fCBbMCwgMF0pXG4gICAgICAgIH07XG4gICAgfVxufVxuIiwiLy8gQGZsb3dcblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHN1cHBvcnRlZCBmcm9tICdAbWFwYm94L21hcGJveC1nbC1zdXBwb3J0ZWQnO1xuXG5pbXBvcnQge3ZlcnNpb259IGZyb20gJy4uL3BhY2thZ2UuanNvbic7XG5pbXBvcnQgTWFwIGZyb20gJy4vdWkvbWFwJztcbmltcG9ydCBOYXZpZ2F0aW9uQ29udHJvbCBmcm9tICcuL3VpL2NvbnRyb2wvbmF2aWdhdGlvbl9jb250cm9sJztcbmltcG9ydCBHZW9sb2NhdGVDb250cm9sIGZyb20gJy4vdWkvY29udHJvbC9nZW9sb2NhdGVfY29udHJvbCc7XG5pbXBvcnQgQXR0cmlidXRpb25Db250cm9sIGZyb20gJy4vdWkvY29udHJvbC9hdHRyaWJ1dGlvbl9jb250cm9sJztcbmltcG9ydCBTY2FsZUNvbnRyb2wgZnJvbSAnLi91aS9jb250cm9sL3NjYWxlX2NvbnRyb2wnO1xuaW1wb3J0IEZ1bGxzY3JlZW5Db250cm9sIGZyb20gJy4vdWkvY29udHJvbC9mdWxsc2NyZWVuX2NvbnRyb2wnO1xuaW1wb3J0IFBvcHVwIGZyb20gJy4vdWkvcG9wdXAnO1xuaW1wb3J0IE1hcmtlciBmcm9tICcuL3VpL21hcmtlcic7XG5pbXBvcnQgU3R5bGUgZnJvbSAnLi9zdHlsZS9zdHlsZSc7XG5pbXBvcnQgTG5nTGF0IGZyb20gJy4vZ2VvL2xuZ19sYXQnO1xuaW1wb3J0IExuZ0xhdEJvdW5kcyBmcm9tICcuL2dlby9sbmdfbGF0X2JvdW5kcyc7XG5pbXBvcnQgUG9pbnQgZnJvbSAnQG1hcGJveC9wb2ludC1nZW9tZXRyeSc7XG5pbXBvcnQgTWVyY2F0b3JDb29yZGluYXRlIGZyb20gJy4vZ2VvL21lcmNhdG9yX2Nvb3JkaW5hdGUnO1xuaW1wb3J0IHtFdmVudGVkfSBmcm9tICcuL3V0aWwvZXZlbnRlZCc7XG5pbXBvcnQgY29uZmlnIGZyb20gJy4vdXRpbC9jb25maWcnO1xuaW1wb3J0IHtEZWJ1Z30gZnJvbSAnLi91dGlsL2RlYnVnJztcbmltcG9ydCB7aXNTYWZhcml9IGZyb20gJy4vdXRpbC91dGlsJztcbmltcG9ydCB7c2V0UlRMVGV4dFBsdWdpbiwgZ2V0UlRMVGV4dFBsdWdpblN0YXR1c30gZnJvbSAnLi9zb3VyY2UvcnRsX3RleHRfcGx1Z2luJztcbmltcG9ydCBXb3JrZXJQb29sIGZyb20gJy4vdXRpbC93b3JrZXJfcG9vbCc7XG5pbXBvcnQge3ByZXdhcm0sIGNsZWFyUHJld2FybWVkUmVzb3VyY2VzfSBmcm9tICcuL3V0aWwvZ2xvYmFsX3dvcmtlcl9wb29sJztcbmltcG9ydCB7Y2xlYXJUaWxlQ2FjaGV9IGZyb20gJy4vdXRpbC90aWxlX3JlcXVlc3RfY2FjaGUnO1xuaW1wb3J0IHtQZXJmb3JtYW5jZVV0aWxzfSBmcm9tICcuL3V0aWwvcGVyZm9ybWFuY2UnO1xuXG5jb25zdCBleHBvcnRlZCA9IHtcbiAgICB2ZXJzaW9uLFxuICAgIHN1cHBvcnRlZCxcbiAgICBzZXRSVExUZXh0UGx1Z2luLFxuICAgIGdldFJUTFRleHRQbHVnaW5TdGF0dXMsXG4gICAgTWFwLFxuICAgIE5hdmlnYXRpb25Db250cm9sLFxuICAgIEdlb2xvY2F0ZUNvbnRyb2wsXG4gICAgQXR0cmlidXRpb25Db250cm9sLFxuICAgIFNjYWxlQ29udHJvbCxcbiAgICBGdWxsc2NyZWVuQ29udHJvbCxcbiAgICBQb3B1cCxcbiAgICBNYXJrZXIsXG4gICAgU3R5bGUsXG4gICAgTG5nTGF0LFxuICAgIExuZ0xhdEJvdW5kcyxcbiAgICBQb2ludCxcbiAgICBNZXJjYXRvckNvb3JkaW5hdGUsXG4gICAgRXZlbnRlZCxcbiAgICBjb25maWcsXG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZXMgcmVzb3VyY2VzIGxpa2UgV2ViV29ya2VycyB0aGF0IGNhbiBiZSBzaGFyZWQgYWNyb3NzIG1hcHMgdG8gbG93ZXIgbG9hZFxuICAgICAqIHRpbWVzIGluIHNvbWUgc2l0dWF0aW9ucy4gYG1hcGJveGdsLndvcmtlclVybGAgYW5kIGBtYXBib3hnbC53b3JrZXJDb3VudGAsIGlmIGJlaW5nXG4gICAgICogdXNlZCwgbXVzdCBiZSBzZXQgYmVmb3JlIGBwcmV3YXJtKClgIGlzIGNhbGxlZCB0byBoYXZlIGFuIGVmZmVjdC5cbiAgICAgKlxuICAgICAqIEJ5IGRlZmF1bHQsIHRoZSBsaWZlY3ljbGUgb2YgdGhlc2UgcmVzb3VyY2VzIGlzIG1hbmFnZWQgYXV0b21hdGljYWxseSwgYW5kIHRoZXkgYXJlXG4gICAgICogbGF6aWx5IGluaXRpYWxpemVkIHdoZW4gYSBNYXAgaXMgZmlyc3QgY3JlYXRlZC4gQnkgaW52b2tpbmcgYHByZXdhcm0oKWAsIHRoZXNlXG4gICAgICogcmVzb3VyY2VzIHdpbGwgYmUgY3JlYXRlZCBhaGVhZCBvZiB0aW1lLCBhbmQgd2lsbCBub3QgYmUgY2xlYXJlZCB3aGVuIHRoZSBsYXN0IE1hcFxuICAgICAqIGlzIHJlbW92ZWQgZnJvbSB0aGUgcGFnZS4gVGhpcyBhbGxvd3MgdGhlbSB0byBiZSByZS11c2VkIGJ5IG5ldyBNYXAgaW5zdGFuY2VzIHRoYXRcbiAgICAgKiBhcmUgY3JlYXRlZCBsYXRlci4gVGhleSBjYW4gYmUgbWFudWFsbHkgY2xlYXJlZCBieSBjYWxsaW5nXG4gICAgICogYG1hcGJveGdsLmNsZWFyUHJld2FybWVkUmVzb3VyY2VzKClgLiBUaGlzIGlzIG9ubHkgbmVjZXNzYXJ5IGlmIHlvdXIgd2ViIHBhZ2UgcmVtYWluc1xuICAgICAqIGFjdGl2ZSBidXQgc3RvcHMgdXNpbmcgbWFwcyBhbHRvZ2V0aGVyLlxuICAgICAqXG4gICAgICogVGhpcyBpcyBwcmltYXJpbHkgdXNlZnVsIHdoZW4gdXNpbmcgR0wtSlMgbWFwcyBpbiBhIHNpbmdsZSBwYWdlIGFwcCwgd2hlcmVpbiBhIHVzZXJcbiAgICAgKiB3b3VsZCBuYXZpZ2F0ZSBiZXR3ZWVuIHZhcmlvdXMgdmlld3MgdGhhdCBjYW4gY2F1c2UgTWFwIGluc3RhbmNlcyB0byBjb25zdGFudGx5IGJlXG4gICAgICogY3JlYXRlZCBhbmQgZGVzdHJveWVkLlxuICAgICAqXG4gICAgICogQGZ1bmN0aW9uIHByZXdhcm1cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcGJveGdsLnByZXdhcm0oKVxuICAgICAqL1xuICAgIHByZXdhcm0sXG4gICAgLyoqXG4gICAgICogQ2xlYXJzIHVwIHJlc291cmNlcyB0aGF0IGhhdmUgcHJldmlvdXNseSBiZWVuIGNyZWF0ZWQgYnkgYG1hcGJveGdsLnByZXdhcm0oKWAuXG4gICAgICogTm90ZSB0aGF0IHRoaXMgaXMgdHlwaWNhbGx5IG5vdCBuZWNlc3NhcnkuIFlvdSBzaG91bGQgb25seSBjYWxsIHRoaXMgZnVuY3Rpb25cbiAgICAgKiBpZiB5b3UgZXhwZWN0IHRoZSB1c2VyIG9mIHlvdXIgYXBwIHRvIG5vdCByZXR1cm4gdG8gYSBNYXAgdmlldyBhdCBhbnkgcG9pbnRcbiAgICAgKiBpbiB5b3VyIGFwcGxpY2F0aW9uLlxuICAgICAqXG4gICAgICogQGZ1bmN0aW9uIGNsZWFyUHJld2FybWVkUmVzb3VyY2VzXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXBib3hnbC5jbGVhclByZXdhcm1lZFJlc291cmNlcygpXG4gICAgICovXG4gICAgY2xlYXJQcmV3YXJtZWRSZXNvdXJjZXMsXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBtYXAncyBbYWNjZXNzIHRva2VuXShodHRwczovL3d3dy5tYXBib3guY29tL2hlbHAvZGVmaW5lLWFjY2Vzcy10b2tlbi8pLlxuICAgICAqXG4gICAgICogQHZhciB7c3RyaW5nfSBhY2Nlc3NUb2tlblxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjdXJyZW50bHkgc2V0IGFjY2VzcyB0b2tlbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIG1hcGJveGdsLmFjY2Vzc1Rva2VuID0gbXlBY2Nlc3NUb2tlbjtcbiAgICAgKiBAc2VlIFtEaXNwbGF5IGEgbWFwXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9leGFtcGxlcy8pXG4gICAgICovXG4gICAgZ2V0IGFjY2Vzc1Rva2VuKCk6ID9zdHJpbmcge1xuICAgICAgICByZXR1cm4gY29uZmlnLkFDQ0VTU19UT0tFTjtcbiAgICB9LFxuXG4gICAgc2V0IGFjY2Vzc1Rva2VuKHRva2VuOiBzdHJpbmcpIHtcbiAgICAgICAgY29uZmlnLkFDQ0VTU19UT0tFTiA9IHRva2VuO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBtYXAncyBkZWZhdWx0IEFQSSBVUkwgZm9yIHJlcXVlc3RpbmcgdGlsZXMsIHN0eWxlcywgc3ByaXRlcywgYW5kIGdseXBoc1xuICAgICAqXG4gICAgICogQHZhciB7c3RyaW5nfSBiYXNlQXBpVXJsXG4gICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGN1cnJlbnQgYmFzZSBBUEkgVVJMLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogbWFwYm94Z2wuYmFzZUFwaVVybCA9ICdodHRwczovL2FwaS5tYXBib3guY29tJztcbiAgICAgKi9cbiAgICBnZXQgYmFzZUFwaVVybCgpOiA/c3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGNvbmZpZy5BUElfVVJMO1xuICAgIH0sXG5cbiAgICBzZXQgYmFzZUFwaVVybCh1cmw6IHN0cmluZykge1xuICAgICAgICBjb25maWcuQVBJX1VSTCA9IHVybDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbmQgc2V0cyB0aGUgbnVtYmVyIG9mIHdlYiB3b3JrZXJzIGluc3RhbnRpYXRlZCBvbiBhIHBhZ2Ugd2l0aCBHTCBKUyBtYXBzLlxuICAgICAqIEJ5IGRlZmF1bHQsIGl0IGlzIHNldCB0byBoYWxmIHRoZSBudW1iZXIgb2YgQ1BVIGNvcmVzIChjYXBwZWQgYXQgNikuXG4gICAgICogTWFrZSBzdXJlIHRvIHNldCB0aGlzIHByb3BlcnR5IGJlZm9yZSBjcmVhdGluZyBhbnkgbWFwIGluc3RhbmNlcyBmb3IgaXQgdG8gaGF2ZSBlZmZlY3QuXG4gICAgICpcbiAgICAgKiBAdmFyIHtzdHJpbmd9IHdvcmtlckNvdW50XG4gICAgICogQHJldHVybnMge251bWJlcn0gTnVtYmVyIG9mIHdvcmtlcnMgY3VycmVudGx5IGNvbmZpZ3VyZWQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXBib3hnbC53b3JrZXJDb3VudCA9IDI7XG4gICAgICovXG4gICAgZ2V0IHdvcmtlckNvdW50KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBXb3JrZXJQb29sLndvcmtlckNvdW50O1xuICAgIH0sXG5cbiAgICBzZXQgd29ya2VyQ291bnQoY291bnQ6IG51bWJlcikge1xuICAgICAgICBXb3JrZXJQb29sLndvcmtlckNvdW50ID0gY291bnQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldHMgYW5kIHNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGltYWdlcyAocmFzdGVyIHRpbGVzLCBzcHJpdGVzLCBpY29ucykgdG8gbG9hZCBpbiBwYXJhbGxlbCxcbiAgICAgKiB3aGljaCBhZmZlY3RzIHBlcmZvcm1hbmNlIGluIHJhc3Rlci1oZWF2eSBtYXBzLiAxNiBieSBkZWZhdWx0LlxuICAgICAqXG4gICAgICogQHZhciB7c3RyaW5nfSBtYXhQYXJhbGxlbEltYWdlUmVxdWVzdHNcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBOdW1iZXIgb2YgcGFyYWxsZWwgcmVxdWVzdHMgY3VycmVudGx5IGNvbmZpZ3VyZWQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXBib3hnbC5tYXhQYXJhbGxlbEltYWdlUmVxdWVzdHMgPSAxMDtcbiAgICAgKi9cbiAgICBnZXQgbWF4UGFyYWxsZWxJbWFnZVJlcXVlc3RzKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBjb25maWcuTUFYX1BBUkFMTEVMX0lNQUdFX1JFUVVFU1RTO1xuICAgIH0sXG5cbiAgICBzZXQgbWF4UGFyYWxsZWxJbWFnZVJlcXVlc3RzKG51bVJlcXVlc3RzOiBudW1iZXIpIHtcbiAgICAgICAgY29uZmlnLk1BWF9QQVJBTExFTF9JTUFHRV9SRVFVRVNUUyA9IG51bVJlcXVlc3RzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDbGVhcnMgYnJvd3NlciBzdG9yYWdlIHVzZWQgYnkgdGhpcyBsaWJyYXJ5LiBVc2luZyB0aGlzIG1ldGhvZCBmbHVzaGVzIHRoZSBNYXBib3ggdGlsZVxuICAgICAqIGNhY2hlIHRoYXQgaXMgbWFuYWdlZCBieSB0aGlzIGxpYnJhcnkuIFRpbGVzIG1heSBzdGlsbCBiZSBjYWNoZWQgYnkgdGhlIGJyb3dzZXJcbiAgICAgKiBpbiBzb21lIGNhc2VzLlxuICAgICAqXG4gICAgICogVGhpcyBBUEkgaXMgc3VwcG9ydGVkIG9uIGJyb3dzZXJzIHdoZXJlIHRoZSBbYENhY2hlYCBBUEldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9DYWNoZSlcbiAgICAgKiBpcyBzdXBwb3J0ZWQgYW5kIGVuYWJsZWQuIFRoaXMgaW5jbHVkZXMgYWxsIG1ham9yIGJyb3dzZXJzIHdoZW4gcGFnZXMgYXJlIHNlcnZlZCBvdmVyXG4gICAgICogYGh0dHBzOi8vYCwgZXhjZXB0IEludGVybmV0IEV4cGxvcmVyIGFuZCBFZGdlIE1vYmlsZS5cbiAgICAgKlxuICAgICAqIFdoZW4gY2FsbGVkIGluIHVuc3VwcG9ydGVkIGJyb3dzZXJzIG9yIGVudmlyb25tZW50cyAocHJpdmF0ZSBvciBpbmNvZ25pdG8gbW9kZSksIHRoZVxuICAgICAqIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHdpdGggYW4gZXJyb3IgYXJndW1lbnQuXG4gICAgICpcbiAgICAgKiBAZnVuY3Rpb24gY2xlYXJTdG9yYWdlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIHdpdGggYW4gZXJyb3IgYXJndW1lbnQgaWYgdGhlcmUgaXMgYW4gZXJyb3IuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBtYXBib3hnbC5jbGVhclN0b3JhZ2UoKTtcbiAgICAgKi9cbiAgICBjbGVhclN0b3JhZ2UoY2FsbGJhY2s/OiAoZXJyOiA/RXJyb3IpID0+IHZvaWQpIHtcbiAgICAgICAgY2xlYXJUaWxlQ2FjaGUoY2FsbGJhY2spO1xuICAgIH0sXG5cbiAgICB3b3JrZXJVcmw6ICcnXG59O1xuXG4vL1RoaXMgZ2V0cyBhdXRvbWF0aWNhbGx5IHN0cmlwcGVkIG91dCBpbiBwcm9kdWN0aW9uIGJ1aWxkcy5cbkRlYnVnLmV4dGVuZChleHBvcnRlZCwge2lzU2FmYXJpLCBnZXRQZXJmb3JtYW5jZU1ldHJpY3M6IFBlcmZvcm1hbmNlVXRpbHMuZ2V0UGVyZm9ybWFuY2VNZXRyaWNzfSk7XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgTWFwYm94IEdMIEpTIGluIHVzZSBhcyBzcGVjaWZpZWQgaW4gYHBhY2thZ2UuanNvbmAsXG4gKiBgQ0hBTkdFTE9HLm1kYCwgYW5kIHRoZSBHaXRIdWIgcmVsZWFzZS5cbiAqXG4gKiBAdmFyIHtzdHJpbmd9IHZlcnNpb25cbiAqL1xuXG4vKipcbiAqIFRlc3Qgd2hldGhlciB0aGUgYnJvd3NlciBbc3VwcG9ydHMgTWFwYm94IEdMIEpTXShodHRwczovL3d3dy5tYXBib3guY29tL2hlbHAvbWFwYm94LWJyb3dzZXItc3VwcG9ydC8jbWFwYm94LWdsLWpzKS5cbiAqXG4gKiBAZnVuY3Rpb24gc3VwcG9ydGVkXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ9ZmFsc2VdIElmIGB0cnVlYCxcbiAqICAgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGBmYWxzZWAgaWYgdGhlIHBlcmZvcm1hbmNlIG9mIE1hcGJveCBHTCBKUyB3b3VsZFxuICogICBiZSBkcmFtYXRpY2FsbHkgd29yc2UgdGhhbiBleHBlY3RlZCAoZS5nLiBhIHNvZnR3YXJlIFdlYkdMIHJlbmRlcmVyIHdvdWxkIGJlIHVzZWQpLlxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqIEBleGFtcGxlXG4gKiBtYXBib3hnbC5zdXBwb3J0ZWQoKSAvLyA9IHRydWVcbiAqIEBzZWUgW0NoZWNrIGZvciBicm93c2VyIHN1cHBvcnRdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvY2hlY2stZm9yLXN1cHBvcnQvKVxuICovXG5cbi8qKlxuICogU2V0cyB0aGUgbWFwJ3MgW1JUTCB0ZXh0IHBsdWdpbl0oaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvcGx1Z2lucy8jbWFwYm94LWdsLXJ0bC10ZXh0KS5cbiAqIE5lY2Vzc2FyeSBmb3Igc3VwcG9ydGluZyB0aGUgQXJhYmljIGFuZCBIZWJyZXcgbGFuZ3VhZ2VzLCB3aGljaCBhcmUgd3JpdHRlbiByaWdodC10by1sZWZ0LiBNYXBib3ggU3R1ZGlvIGxvYWRzIHRoaXMgcGx1Z2luIGJ5IGRlZmF1bHQuXG4gKlxuICogQGZ1bmN0aW9uIHNldFJUTFRleHRQbHVnaW5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwbHVnaW5VUkwgVVJMIHBvaW50aW5nIHRvIHRoZSBNYXBib3ggUlRMIHRleHQgcGx1Z2luIHNvdXJjZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCB3aXRoIGFuIGVycm9yIGFyZ3VtZW50IGlmIHRoZXJlIGlzIGFuIGVycm9yLlxuICogQHBhcmFtIHtib29sZWFufSBsYXp5IElmIHNldCB0byBgdHJ1ZWAsIG1hcGJveGdsIHdpbGwgZGVmZXIgbG9hZGluZyB0aGUgcGx1Z2luIHVudGlsIHJ0bCB0ZXh0IGlzIGVuY291bnRlcmVkLFxuICogICAgcnRsIHRleHQgd2lsbCB0aGVuIGJlIHJlbmRlcmVkIG9ubHkgYWZ0ZXIgdGhlIHBsdWdpbiBmaW5pc2hlcyBsb2FkaW5nLlxuICogQGV4YW1wbGVcbiAqIG1hcGJveGdsLnNldFJUTFRleHRQbHVnaW4oJ2h0dHBzOi8vYXBpLm1hcGJveC5jb20vbWFwYm94LWdsLWpzL3BsdWdpbnMvbWFwYm94LWdsLXJ0bC10ZXh0L3YwLjIuMC9tYXBib3gtZ2wtcnRsLXRleHQuanMnKTtcbiAqIEBzZWUgW0FkZCBzdXBwb3J0IGZvciByaWdodC10by1sZWZ0IHNjcmlwdHNdKGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2V4YW1wbGUvbWFwYm94LWdsLXJ0bC10ZXh0LylcbiAqL1xuXG4vKipcbiAgKiBHZXRzIHRoZSBtYXAncyBbUlRMIHRleHQgcGx1Z2luXShodHRwczovL3d3dy5tYXBib3guY29tL21hcGJveC1nbC1qcy9wbHVnaW5zLyNtYXBib3gtZ2wtcnRsLXRleHQpIHN0YXR1cy5cbiAgKiBUaGUgc3RhdHVzIGNhbiBiZSBgdW5hdmFpbGFibGVgIChpLmUuIG5vdCByZXF1ZXN0ZWQgb3IgcmVtb3ZlZCksIGBsb2FkaW5nYCwgYGxvYWRlZGAgb3IgYGVycm9yYC5cbiAgKiBJZiB0aGUgc3RhdHVzIGlzIGBsb2FkZWRgIGFuZCB0aGUgcGx1Z2luIGlzIHJlcXVlc3RlZCBhZ2FpbiwgYW4gZXJyb3Igd2lsbCBiZSB0aHJvd24uXG4gICpcbiAgKiBAZnVuY3Rpb24gZ2V0UlRMVGV4dFBsdWdpblN0YXR1c1xuICAqIEBleGFtcGxlXG4gICogY29uc3QgcGx1Z2luU3RhdHVzID0gbWFwYm94Z2wuZ2V0UlRMVGV4dFBsdWdpblN0YXR1cygpO1xuICAqL1xuXG5leHBvcnQgZGVmYXVsdCBleHBvcnRlZDtcblxuLy8gY2FuYXJ5IGFzc2VydDogdXNlZCB0byBjb25maXJtIHRoYXQgYXNzZXJ0cyBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHByb2R1Y3Rpb24gYnVpbGRcbmFzc2VydCh0cnVlLCAnY2FuYXJ5IGFzc2VydCcpO1xuIiwiLy9cbi8vIE91ciBjdXN0b20gaW50cm8gcHJvdmlkZXMgYSBzcGVjaWFsaXplZCBcImRlZmluZSgpXCIgZnVuY3Rpb24sIGNhbGxlZCBieSB0aGVcbi8vIEFNRCBtb2R1bGVzIGJlbG93LCB0aGF0IHNldHMgdXAgdGhlIHdvcmtlciBibG9iIFVSTCBhbmQgdGhlbiBleGVjdXRlcyB0aGVcbi8vIG1haW4gbW9kdWxlLCBzdG9yaW5nIGl0cyBleHBvcnRlZCB2YWx1ZSBhcyAnbWFwYm94Z2wnXG5cbi8vIFRoZSB0aHJlZSBcImNodW5rc1wiIGltcG9ydGVkIGhlcmUgYXJlIHByb2R1Y2VkIGJ5IGEgZmlyc3QgUm9sbHVwIHBhc3MsXG4vLyB3aGljaCBvdXRwdXRzIHRoZW0gYXMgQU1EIG1vZHVsZXMuXG5cbi8vIFNoYXJlZCBkZXBlbmRlbmNpZXMsIGkuZS46XG4vKlxuZGVmaW5lKFsnZXhwb3J0cyddLCBmdW5jdGlvbiAoZXhwb3J0cykge1xuICAgIC8vIENvZGUgZm9yIGFsbCBjb21tb24gZGVwZW5kZW5jaWVzXG4gICAgLy8gRWFjaCBtb2R1bGUncyBleHBvcnRzIGFyZSBhdHRhY2hlZCBhdHRhY2hlZCB0byAnZXhwb3J0cycgKHdpdGhcbiAgICAvLyBuYW1lcyByZXdyaXR0ZW4gdG8gYXZvaWQgY29sbGlzaW9ucywgZXRjLilcbn0pXG4qL1xuaW1wb3J0ICcuL2J1aWxkL21hcGJveGdsL3NoYXJlZCc7XG5cbi8vIFdvcmtlciBhbmQgaXRzIHVuaXF1ZSBkZXBlbmRlbmNpZXMsIGkuZS46XG4vKlxuZGVmaW5lKFsnLi9zaGFyZWQuanMnXSwgZnVuY3Rpb24gKF9fc2hhcmVkX19qcykge1xuICAgIC8vICBDb2RlIGZvciB3b3JrZXIgc2NyaXB0IGFuZCBpdHMgdW5pcXVlIGRlcGVuZGVuY2llcy5cbiAgICAvLyAgRXhwZWN0cyB0aGUgb3V0cHV0IG9mICdzaGFyZWQnIG1vZHVsZSB0byBiZSBwYXNzZWQgaW4gYXMgYW4gYXJndW1lbnQsXG4gICAgLy8gIHNpbmNlIGFsbCByZWZlcmVuY2VzIHRvIGNvbW1vbiBkZXBzIGxvb2sgbGlrZSwgZS5nLixcbiAgICAvLyAgX19zaGFyZWRfX2pzLnNoYXBlVGV4dCgpLlxufSk7XG4qL1xuLy8gV2hlbiB0aGlzIHdyYXBwZXIgZnVuY3Rpb24gaXMgcGFzc2VkIHRvIG91ciBjdXN0b20gZGVmaW5lKCkgYWJvdmUsXG4vLyBpdCBnZXRzIHN0cmluZ2lmaWVkLCB0b2dldGhlciB3aXRoIHRoZSBzaGFyZWQgd3JhcHBlciAodXNpbmdcbi8vIEZ1bmN0aW9uLnRvU3RyaW5nKCkpLCBhbmQgdGhlIHJlc3VsdGluZyBzdHJpbmcgb2YgY29kZSBpcyBtYWRlIGludG8gYVxuLy8gQmxvYiBVUkwgdGhhdCBnZXRzIHVzZWQgYnkgdGhlIG1haW4gbW9kdWxlIHRvIGNyZWF0ZSB0aGUgd2ViIHdvcmtlcnMuXG5pbXBvcnQgJy4vYnVpbGQvbWFwYm94Z2wvd29ya2VyJztcblxuLy8gTWFpbiBtb2R1bGUgYW5kIGl0cyB1bmlxdWUgZGVwZW5kZW5jaWVzXG4vKlxuZGVmaW5lKFsnLi9zaGFyZWQuanMnXSwgZnVuY3Rpb24gKF9fc2hhcmVkX19qcykge1xuICAgIC8vICBDb2RlIGZvciBtYWluIEdMIEpTIG1vZHVsZSBhbmQgaXRzIHVuaXF1ZSBkZXBlbmRlbmNpZXMuXG4gICAgLy8gIEV4cGVjdHMgdGhlIG91dHB1dCBvZiAnc2hhcmVkJyBtb2R1bGUgdG8gYmUgcGFzc2VkIGluIGFzIGFuIGFyZ3VtZW50LFxuICAgIC8vICBzaW5jZSBhbGwgcmVmZXJlbmNlcyB0byBjb21tb24gZGVwcyBsb29rIGxpa2UsIGUuZy4sXG4gICAgLy8gIF9fc2hhcmVkX19qcy5zaGFwZVRleHQoKS5cbiAgICAvL1xuICAgIC8vICBSZXR1cm5zIHRoZSBhY3R1YWwgbWFwYm94Z2wgKGkuZS4gc3JjL2luZGV4LmpzKVxufSk7XG4qL1xuaW1wb3J0ICcuL2J1aWxkL21hcGJveGdsL2luZGV4JztcblxuZXhwb3J0IGRlZmF1bHQgbWFwYm94Z2w7XG4iXSwibmFtZXMiOlsiYXJndW1lbnRzIiwicmVxdWlyZSQkMCIsInJlcXVpcmUkJDEiLCJsZXQiLCJjb25zdCIsIlVuaXRCZXppZXIiLCJ3aW5kb3ciLCJleHBvcnRlZCIsImJyb3dzZXIiLCJ3ZWJwU3VwcG9ydGVkIiwic2RrVmVyc2lvbiIsInRoaXMiLCJzdXBlciIsImFzc2VydCIsImxpc3RlbmVyIiwicGFyc2VDU1NDb2xvciIsInRvU3RyaW5nIiwidHlwZSIsInR5cGVzIiwiYXJnIiwidmFsdWVUb1N0cmluZyIsImkiLCJleHBlY3RlZCIsInBhcnNlZCIsImxpbmUiLCJwIiwidGlsZVBvaW50cyIsInBvaW50IiwidGlsZUxpbmVzIiwiZXJyb3IiLCJhcnJheSIsImludGVycG9sYXRlTnVtYmVyIiwib3V0cHV0SW5kZXgiLCJsdCIsInJ0IiwidHlwZVRvU3RyaW5nIiwiZXh0ZW5kIiwic3RvcCIsImludGVycG9sYXRpb25UeXBlIiwiZGVmaW5pdGlvbnMiLCJpc0NvbnN0YW50LmlzU3RhdGVDb25zdGFudCIsImlzRmVhdHVyZUNvbnN0YW50IiwiaXNDb25zdGFudC5pc0ZlYXR1cmVDb25zdGFudCIsImlzQ29uc3RhbnQuaXNHbG9iYWxQcm9wZXJ0eUNvbnN0YW50IiwidmFsaWRhdGVTcGVjIiwiZWxlbWVudFNwZWNLZXkiLCJsYXRlc3RTdHlsZVNwZWMiLCJ2YWxpZGF0ZVNvdXJjZSIsInZhbGlkYXRlTGlnaHQiLCJ2YWxpZGF0ZUZpbHRlciIsInZhbGlkYXRlUGFpbnRQcm9wZXJ0eSIsInZhbGlkYXRlTGF5b3V0UHJvcGVydHkiLCJHcmlkIiwibmFtZSIsImlzQ2hhciIsInJ0bFRleHRQbHVnaW4iLCJwcm9wZXJ0eSIsInN0eWxlU3BlYyIsIlBvaW50IiwibGF5b3V0IiwibXVybXVyMyIsIm11cm11cjIiLCJTdHJ1Y3RBcnJheUxheW91dCIsIlBhdHRlcm5MYXlvdXRBcnJheSIsIkVYVEVOVCIsIkNpcmNsZUxheW91dEFycmF5IiwiVHJpYW5nbGVJbmRleEFycmF5IiwibGF5b3V0QXR0cmlidXRlcyIsImJ1Y2tldEZlYXR1cmUiLCJmZWF0dXJlIiwiaW5kZXgiLCJzb3VyY2VMYXllckluZGV4IiwicGFpbnQiLCJnbE1hdHJpeC5BUlJBWV9UWVBFIiwiY2xvbmUiLCJlcXVhbHMiLCJnbE1hdHJpeC5FUFNJTE9OIiwiY3JlYXRlIiwiY29weSIsImlkZW50aXR5IiwiZnJvbVZhbHVlcyIsInNldCIsImludmVydCIsImRldGVybWluYW50IiwibXVsdGlwbHkiLCJyb3RhdGUiLCJzY2FsZSIsInRyYW5zbGF0ZSIsImZyb21Sb3RhdGlvbiIsImZyb21TY2FsaW5nIiwic3RyIiwiZnJvYiIsImFkZCIsInN1YnRyYWN0IiwibXVsdGlwbHlTY2FsYXIiLCJtdWx0aXBseVNjYWxhckFuZEFkZCIsImV4YWN0RXF1YWxzIiwibXVsIiwic3ViIiwidHJhbnNwb3NlIiwiYWRqb2ludCIsImZyb21UcmFuc2xhdGlvbiIsImZyb21RdWF0IiwiYmV6aWVyIiwiZ2xNYXRyaXguUkFORE9NIiwicm90YXRlWCIsInJvdGF0ZVkiLCJyb3RhdGVaIiwiZGl2aWRlIiwiY2VpbCIsImZsb29yIiwibWluIiwibWF4Iiwicm91bmQiLCJzY2FsZUFuZEFkZCIsImRpc3RhbmNlIiwic3F1YXJlZERpc3RhbmNlIiwibGVuZ3RoIiwic3F1YXJlZExlbmd0aCIsIm5lZ2F0ZSIsImludmVyc2UiLCJub3JtYWxpemUiLCJkb3QiLCJjcm9zcyIsImxlcnAiLCJyYW5kb20iLCJ0cmFuc2Zvcm1NYXQ0IiwidHJhbnNmb3JtUXVhdCIsInplcm8iLCJkaXYiLCJkaXN0Iiwic3FyRGlzdCIsImxlbiIsInNxckxlbiIsImZvckVhY2giLCJ2ZWM0LmNsb25lIiwidmVjNC5mcm9tVmFsdWVzIiwidmVjNC5jb3B5IiwidmVjNC5zZXQiLCJ2ZWM0LmFkZCIsInZlYzQuc2NhbGUiLCJ2ZWM0LmRvdCIsInZlYzQubGVycCIsInZlYzQubGVuZ3RoIiwidmVjNC5zcXVhcmVkTGVuZ3RoIiwidmVjNC5ub3JtYWxpemUiLCJ2ZWM0LmV4YWN0RXF1YWxzIiwidmVjNC5lcXVhbHMiLCJ2ZWMzLmNyZWF0ZSIsInZlYzMuZnJvbVZhbHVlcyIsInZlYzMuZG90IiwidmVjMy5jcm9zcyIsInZlYzMubGVuIiwidmVjMy5ub3JtYWxpemUiLCJtYXQzLmNyZWF0ZSIsImZyb21Sb3RhdGlvblRyYW5zbGF0aW9uIiwiZnJvbU1hdDQiLCJxdWF0LmNyZWF0ZSIsIm1hdDQuZ2V0Um90YXRpb24iLCJtYXQ0LmdldFRyYW5zbGF0aW9uIiwicXVhdC5jb3B5IiwiZ2V0VHJhbnNsYXRpb24iLCJxdWF0LnJvdGF0ZVgiLCJxdWF0LnJvdGF0ZVkiLCJxdWF0LnJvdGF0ZVoiLCJxdWF0LmRvdCIsImNvbmp1Z2F0ZSIsInF1YXQubGVuZ3RoIiwicXVhdC5zcXVhcmVkTGVuZ3RoIiwidHJhbnNmb3JtTWF0MyIsImFuZ2xlIiwidmVjNC50cmFuc2Zvcm1NYXQ0IiwicHJvcGVydGllcyIsInN3YXAiLCJGaWxsTGF5b3V0QXJyYXkiLCJMaW5lSW5kZXhBcnJheSIsInJpbmciLCJlYXJjdXQiLCJjbGFzc2lmeVJpbmdzIiwic2lnbmVkQXJlYSIsIlZlY3RvclRpbGVGZWF0dXJlIiwiVmVjdG9yVGlsZUxheWVyIiwicmVxdWlyZSQkMiIsIm12dCIsIkVBUkNVVF9NQVhfUklOR1MiLCJGaWxsRXh0cnVzaW9uTGF5b3V0QXJyYXkiLCJwcm9qZWN0UXVlcnlHZW9tZXRyeSIsInZlY3RvclRpbGVGZWF0dXJlVHlwZXMiLCJMaW5lTGF5b3V0QXJyYXkiLCJvZmZzZXQiLCJQcm90b2J1ZiIsImJveCIsImlkIiwic3JjIiwiYmluIiwidyIsImgiLCJ0YWdnZWRMaW5lIiwiYWxpZ24iLCJpbnRlcnBvbGF0ZSIsImJvcmRlciIsImNvbGxpc2lvblBhZGRpbmciLCJkZWZhdWx0Q29tcGFyZSIsIlF1ZXVlIiwibWluWm9vbSIsIm1heFpvb20iLCJzaGFwaW5nIiwiYW5jaG9yIiwiYWRkVmVydGV4IiwiU3ltYm9sTGF5b3V0QXJyYXkiLCJTeW1ib2xEeW5hbWljTGF5b3V0QXJyYXkiLCJTeW1ib2xPcGFjaXR5QXJyYXkiLCJ1cGxvYWQiLCJDb2xsaXNpb25WZXJ0ZXhBcnJheSIsIm1hdDQuaWRlbnRpdHkiLCJnbG9iYWxSVExUZXh0UGx1Z2luIiwidHJhbnNmb3JtVGV4dCIsInJlc29sdmVkVG9rZW5zIiwiQ29sbGlzaW9uQm94TGF5b3V0QXJyYXkiLCJrIiwiY2lyY2xlIiwiaGVhdG1hcCIsImhpbGxzaGFkZSIsImZpbGwiLCJmaWxsRXh0cnVzaW9uIiwic3ltYm9sIiwiYmFja2dyb3VuZCIsInJhc3RlciIsIkltYWdlRGF0YSIsIkltYWdlQml0bWFwIiwiY2FsbGJhY2siLCJtZXJjYXRvclhmcm9tTG5nIiwibWVyY2F0b3JZZnJvbUxhdCIsImRlc2VyaWFsaXplIiwicHJvdG90eXBlQWNjZXNzb3JzIiwic291cmNlTGF5ZXIiLCJsYXllclN0YXRlcyIsInZ0IiwiZmVhdHVyZUZpbHRlciIsIkdlb0pTT05GZWF0dXJlIiwiZGVzZXJpYWxpemVCdWNrZXQiLCJidWNrZXQiLCJyZWZQcm9wZXJ0aWVzIiwiY3JlYXRlU3R5bGVMYXllciIsInZhbHVlcyIsImxheWVyQ29uZmlncyIsImxheWVyIiwicG90cGFjayIsIkFscGhhSW1hZ2UiLCJzdGFjayIsImdseXBocyIsInJlZ2lzdGVyIiwiT3ZlcnNjYWxlZFRpbGVJRCIsIkNvbGxpc2lvbkJveEFycmF5IiwiRGljdGlvbmFyeUNvZGVyIiwiRmVhdHVyZUluZGV4Iiwid2Fybk9uY2UiLCJtYXBPYmplY3QiLCJJbWFnZUF0bGFzIiwiU3ltYm9sQnVja2V0IiwicGVyZm9ybVN5bWJvbExheW91dCIsIkxpbmVCdWNrZXQiLCJGaWxsQnVja2V0IiwiRmlsbEV4dHJ1c2lvbkJ1Y2tldCIsIkV2YWx1YXRpb25QYXJhbWV0ZXJzIiwiZ2V0QXJyYXlCdWZmZXIiLCJSZXF1ZXN0UGVyZm9ybWFuY2UiLCJERU1EYXRhIiwiUkdCQUltYWdlIiwiZ2VvbWV0cnkiLCJHZW9KU09OV3JhcHBlciIsIkZlYXR1cmVXcmFwcGVyIiwiUGJmIiwic29ydCIsInJld2luZCIsInRyYW5zZm9ybSIsInZ0cGJmIiwiZ2V0SlNPTiIsImNyZWF0ZUV4cHJlc3Npb24iLCJBY3RvciIsImVuZm9yY2VDYWNoZVNpemVMaW1pdCIsInNlbGYiLCJvcHRpb25zIiwiUmVzb3VyY2VUeXBlIiwiZ2V0SW1hZ2UiLCJFcnJvckV2ZW50IiwiRXZlbnQiLCJJbWFnZVBvc2l0aW9uIiwiVGV4dHVyZSIsIkV2ZW50ZWQiLCJwYXJzZUdseXBoUEJGIiwiYXN5bmNBbGwiLCJUaW55U0RGIiwic3BoZXJpY2FsVG9DYXJ0ZXNpYW4iLCJQcm9wZXJ0aWVzIiwiRGF0YUNvbnN0YW50UHJvcGVydHkiLCJUcmFuc2l0aW9uYWJsZSIsImVuZHNXaXRoIiwiZW1pdFZhbGlkYXRpb25FcnJvcnMiLCJ2YWxpZGF0ZVN0eWxlIiwidW5pcXVlSWQiLCJwaWNrIiwiTG5nTGF0Qm91bmRzIiwicG9zdFR1cm5zdGlsZUV2ZW50IiwicG9zdE1hcExvYWRFdmVudCIsImNhY2hlRW50cnlQb3NzaWJseUFkZGVkIiwib2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkIiwiY3JlYXRlTGF5b3V0IiwiTWVyY2F0b3JDb29yZGluYXRlIiwiUmFzdGVyQm91bmRzQXJyYXkiLCJTZWdtZW50VmVjdG9yIiwiQ2Fub25pY2FsVGlsZUlEIiwiZ2V0VmlkZW8iLCJWYWxpZGF0aW9uRXJyb3IiLCJ2ZWN0b3IiLCJyYXN0ZXJEZW0iLCJnZW9qc29uIiwidmlkZW8iLCJpbWFnZSIsImNhbnZhcyIsImJpbmRBbGwiLCJtYXQ0LnRyYW5zbGF0ZSIsIm1hdDQuc2NhbGUiLCJtYXQ0Lm11bHRpcGx5IiwiQ29sb3IiLCJBTFdBWVMiLCJkZWVwRXF1YWwiLCJjcmVhdGVTb3VyY2UiLCJTb3VyY2VGZWF0dXJlU3RhdGUiLCJ0aWxlIiwia2V5c0RpZmZlcmVuY2UiLCJ0aWxlSUQiLCJUaWxlIiwibWFwYm94Z2wiLCJsYXRlc3QiLCJpc0VxdWFsIiwiY2xhbXAiLCJtYXQ0LmNyZWF0ZSIsIm1hdDQucm90YXRlWiIsIm1hdDQuY2xvbmUiLCJzeW1ib2xTaXplLmV2YWx1YXRlU2l6ZUZvclpvb20iLCJXcml0aW5nTW9kZSIsInN5bWJvbFNpemUuZXZhbHVhdGVTaXplRm9yRmVhdHVyZSIsIm9yaWVudGF0aW9uQ2hhbmdlIiwiYWRkRHluYW1pY0F0dHJpYnV0ZXMiLCJwcm9qZWN0aW9uLnByb2plY3QiLCJwcm9qZWN0aW9uLmdldFBlcnNwZWN0aXZlUmF0aW8iLCJPTkVfRU0iLCJwcm9qZWN0aW9uLnBsYWNlRmlyc3RBbmRMYXN0R2x5cGgiLCJjbGlwTGluZSIsImludGVyc2VjdGlvblRlc3RzLnBvbHlnb25JbnRlcnNlY3RzUG9seWdvbiIsInByb2plY3Rpb24ueHlUcmFuc2Zvcm1NYXQ0IiwiZ2V0QW5jaG9yQWxpZ25tZW50IiwiZXZhbHVhdGVWYXJpYWJsZU9mZnNldCIsInByb2plY3Rpb24uZ2V0TGFiZWxQbGFuZU1hdHJpeCIsInByb2plY3Rpb24uZ2V0R2xDb29yZE1hdHJpeCIsInBsYWNlSG9yaXpvbnRhbCIsInBsYWNlVmVydGljYWwiLCJtYXQ0LmludmVydCIsImdldEFuY2hvckp1c3RpZmljYXRpb24iLCJjcm9zc1RpbGVJRCIsInByZXZPcGFjaXR5IiwicGFja2VkT3BhY2l0eSIsImhvcml6b250YWxPcGFjaXR5IiwidmVydGljYWxPcGFjaXR5IiwicyIsInN5bWJvbEluc3RhbmNlIiwiX2VtaXRWYWxpZGF0aW9uRXJyb3JzIiwiZGlmZk9wZXJhdGlvbnMiLCJnZXRXb3JrZXJQb29sIiwiWm9vbUhpc3RvcnkiLCJnZXRSZWZlcnJlciIsInRyaWdnZXJQbHVnaW5Db21wbGV0aW9uRXZlbnQiLCJpc01hcGJveFVSTCIsImRlcmVmIiwidmFsaWRhdGVDdXN0b21TdHlsZUxheWVyIiwiZmlsdGVyT2JqZWN0IiwibCIsImxheWVySWQiLCJzb3VyY2VSZXN1bHQiLCJsYXllckZlYXR1cmVzIiwiZmVhdHVyZVdyYXBwZXIiLCJydGxUZXh0UGx1Z2luRXZlbnRlZCIsImxheWVySUQiLCJzdHlsZUxheWVyIiwibWFrZVJlcXVlc3QiLCJnZXRTb3VyY2VUeXBlIiwic2V0U291cmNlVHlwZSIsInJlZ2lzdGVyRm9yUGx1Z2luU3RhdGVDaGFuZ2UiLCJ2ZXJ0ZXhCdWZmZXIiLCJQcm9ncmFtIiwiVW5pZm9ybU1hdHJpeDRmIiwiVW5pZm9ybTNmIiwiVW5pZm9ybTFmIiwiVW5pZm9ybTFpIiwiVW5pZm9ybTJmIiwibWF0My5mcm9tUm90YXRpb24iLCJ2ZWMzLnRyYW5zZm9ybU1hdDMiLCJVbmlmb3JtQ29sb3IiLCJtYXQ0Lm9ydGhvIiwiVW5pZm9ybTRmIiwibWF0NC5tdWwiLCJDb2xsaXNpb25DaXJjbGVMYXlvdXRBcnJheSIsImNvbGxpc2lvbkNpcmNsZUxheW91dCIsImJhdGNoIiwiUXVhZFRyaWFuZ2xlQXJyYXkiLCJzeW1ib2xQcm9qZWN0aW9uLmdldExhYmVsUGxhbmVNYXRyaXgiLCJzeW1ib2xTaXplIiwic3ltYm9sUHJvamVjdGlvbi5oaWRlR2x5cGhzIiwic3ltYm9sUHJvamVjdGlvbi5wcm9qZWN0Iiwic3ltYm9sUHJvamVjdGlvbi5nZXRQZXJzcGVjdGl2ZVJhdGlvIiwic2hpZnQiLCJnIiwic3ltYm9sUHJvamVjdGlvbi5nZXRHbENvb3JkTWF0cml4Iiwic3ltYm9sUHJvamVjdGlvbi51cGRhdGVMaW5lTGFiZWxzIiwic3RhdGUiLCJ1bmlmb3JtVmFsdWVzIiwicHJvZ3JhbSIsImxheW91dFZlcnRleEJ1ZmZlciIsImluZGV4QnVmZmVyIiwicHJvZ3JhbUNvbmZpZ3VyYXRpb24iLCJkZXB0aE1vZGUiLCJkcmF3IiwiZGVidWciLCJjdXN0b20iLCJQb3NBcnJheSIsIkxpbmVTdHJpcEluZGV4QXJyYXkiLCJzb3VyY2VDYWNoZSIsImNvb3JkcyIsInZlYzMuc3ViIiwidmVjMy5zY2FsZSIsInZlYzMuYWRkIiwidmVjMy5jbG9uZSIsIm51bWJlciIsIkxuZ0xhdCIsIndyYXAiLCJtYXQyLmNyZWF0ZSIsIm1hdDIucm90YXRlIiwiVW53cmFwcGVkVGlsZUlEIiwidmVjMi5zcXJMZW4iLCJtYXQ0LnBlcnNwZWN0aXZlIiwibWF0NC5yb3RhdGVYIiwibWVyY2F0b3JaZnJvbUFsdGl0dWRlIiwicmVzdWx0IiwiX2Vhc2UiLCJldmVudE5hbWUiLCJvcmlnaW5hbEV2ZW50IiwiZGVmYXVsdEVhc2luZyIsImNvbmZpZyIsImRlZmF1bHRPcHRpb25zIiwiUGVyZm9ybWFuY2VVdGlscyIsIlBlcmZvcm1hbmNlTWFya2VycyIsIlJlcXVlc3RNYW5hZ2VyIiwibW91c2VpbiIsIm1vdXNlbW92ZSIsIm1vdXNlb3V0Iiwid2lkdGgiLCJoZWlnaHQiLCJkYXRhIiwiaXNTdXBwb3J0ZWQiLCJzZXRDYWNoZUxpbWl0cyIsInZlcnNpb24iLCJ0aXRsZSIsInN1cHBvcnRlZCIsInNldFJUTFRleHRQbHVnaW4iLCJnZXRSVExUZXh0UGx1Z2luU3RhdHVzIiwiY2xlYXJUaWxlQ2FjaGUiLCJpc1NhZmFyaSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxDQUFDO0FBQ2I7QUFDQSxJQUFJLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQztBQUN6RCxJQUFJLGNBQWMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQztBQUNyRCxJQUFJLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUM7QUFDN0Q7QUFDQSxTQUFTLFFBQVEs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QUMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUU7QUFDckQsSUFBSSxPQUFPLE9BQU8sQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLEdBQUcsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUMzRCxJQUFJLE9BQU8sTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUMvRCxJQUFJLE9BQU8sTUFBTSxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUMsTUFBTTtBQUM1QyxXQUFXLE1BQU0sQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDLE1BQU07QUFDNUMsV0FBVyxNQUFNLENBQUMsU0FBUyxLQUFLLFFBQVEsQ0FBQyxTQUFTO0FBQ2xELFdBQVcsTUFBTSxDQUFDLFNBQVMsS0FBSyxRQUFRLENBQUMsU0FBUztBQUNsRCxXQUFXLE1BQU0sQ0FBQyxVQUFVLEtBQUssUUFBUSxDQUFDLFVBQVUsQ0FBQztBQUNyRDtBQUNBO0FBQ0E7QUFDQSxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUTtBQUMzRCxjQUFjLFFBQVEsS0FBSyxJQUFJLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxDQUFDLEVBQUU7QUFDbEUsSUFBSSxPQUFPLE1BQU0sR0FBRyxNQUFNLEtBQUssUUFBUSxHQUFHLE1BQU0sSUFBSSxRQUFRLENBQUM7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFD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O0FBQ0E7QUFDQSxJQUFJLFVBQVUsTUFBTSxTQUFTLENBQUMsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLEtBQUssU0FBUyxDQUFDLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksR0FBRyxNQUFNLFNBQVMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLE1BQU0sR0FBRyxTQUFTLENBQUMsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFlBQVksR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLEtBQUssV0FBVyxFQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUU7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksS0FBSyxXQUFXLEVBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRTtBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLEtBQUssSUFBSSxXQUFXLEVBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRTtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksR0FBRyxFQUFFLFdBQVc7QUFDcEIsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVELEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksTUFBTSxFQUFFLFNBQVMsS0FBSyxFQUFFO0FBQzVCLFFBQVEsT0FBTyxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQ2pDLGVBQWUsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksRUFBRSxTQUFTLENBQUMsRUFBRTtBQUN0QixRQUFRLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUMsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRTtBQUN6QixRQUFRLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDN0IsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzlCLFFBQVEsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDakMsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksS0FBSyxFQUFFLFdBQVc7QUFDdEIsUUFBUSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUMsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksT0FBTyxFQUFFLFNBQVMsQ0FBQyxFQUFFO0FBQ3pCLFFBQVEsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxTQUFTLEVBQUUsU0FBUyxDQUFDLEVBQUU7QUFDM0IsUUFBUSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0MsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFlBQVksRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDakMsUUFBUSxPQUFPLElBQUksQ0FBQyxLQUFLO0FBQ3pCLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ25DLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyQyxLQUFLO0FBQ0w7QUFDQSxJQUFJLFFBQVEsRUFBRSxTQUFTLENBQUMsRUFBRTtBQUMxQixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUM3QyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM5QyxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkIsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksRUFBRSxTQUFTLENBQUMsRUFBRTtBQUN0QixRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxFQUFFLFNBQVMsQ0FBQyxFQUFFO0FBQ3RCLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLEVBQUUsU0FBUyxDQUFDLEVBQUU7QUFDdkIsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwQixRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLEVBQUUsU0FBUyxDQUFDLEVBQUU7QUFDdEIsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwQixRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxZQUFZLEVBQUUsU0FBUyxDQUFDLEVBQUU7QUFDOUIsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBUSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQixLQUFLO0FBQ0w7QUFDQSxJQUFJLFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRTtBQUM3QixRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxFQUFFLFdBQVc7QUFDdEIsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQzlCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLEVBQUUsV0FBVztBQUN0QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkIsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLEVBQUUsU0FBUyxL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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM3S0Q7QUFDQTtBQUNBO0FBQ0E7QUFDZSxJQUFNLGVBQWUsR0FLaEMsd0JBQVcsQ0FBQyxHQUFHLE9BQVcsS0FBSyxxQkFBeUIsT0FBTyxNQUFVLFVBQVUs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Q3JELEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdkQsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkQsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEQsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdEQsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoRSxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRCxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNwRCxFQUFFLGVBQWUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM5RCxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2RCxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RCxFQUFFLGdCQUFnQixFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlELEVBQUUsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RELEVBQUUsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLEVBQUUsZUFBZSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9ELEVBQUUsZUFBZSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9ELEVBQUUsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3pELEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFELEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFELEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVELEVBQUUsYUFBYSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hELEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdELEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3BELEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9DLEVBQUUsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hELEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3pELEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BELEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BELEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9ELEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdELEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdELEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdkUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDN0QsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUQsRUFBRSxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakUsRUFBRSxjQUFjLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxD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QUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsRUFBRSxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDN0QsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEUsRUFBRSxlQUFlLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdEQsRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbEQsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEQsRUFBRSxlQUFlLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbEQsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0QsRUFBRSxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDekQsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEQsRUFBRSxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDcEQsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDekQsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUQsRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdkQsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDckQsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkQsRUFBRSxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEQsRUFBRSxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDckQsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDekQsRUFBRSxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBQztBQUN6RDtBQUNBLFNBQVMsY0FBYyxDQUFDLENBQUMsRUFBRTtBQUMzQixFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FB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LEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUNEO0FBQ0EsU0FBUyxnQkFBZ0IsQ0FBQyxHQUFHLFVBQVU7QUFDdkMsSUFBSSxPQUFPLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDN0IsQ0FBQztBQUNEO0FBQ0EsU0FBUyxnQkFBZ0IsQ0FBQyxHQUFHLFVBQVU7QUFDdkMsSUFBSSxPQUFPLENBQUMsR0FBRyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDO0FBQ2pHLENBQUM7QUFDRDtBQUNBLFNBQVMsWUFBWSxDQUFDLEtBQUssUUFBUSxLQUFLLFFBQVE7QUFDaEQsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUUsT0FBTyxLQUFLLEdBQUM7QUFDM0MsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUUsT0FBTyxLQUFLLEdBQUM7QUFDM0MsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUUsT0FBTyxLQUFLLEdBQUM7QUFDM0MsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUUsT0FBTyxLQUFLLEdBQUM7QUFDM0MsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDO0FBQ0Q7QUFDQSxTQUFTLGtCQUFrQixDQUFDLENBQUMsRUFBRSxTQUFTLG1CQUFtQjtBQUMzRCxJQUFJQSxJQUFNLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQyxJQUFJQSxJQUFNLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQyxJQUFJQSxJQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakQsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsV0FBVyxHQUFHLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3hGLENBQUM7QUFDRDtBQUNBLFNBQVMsVUFBVSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQy9CLElBQUlBLElBQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsSUFBSUEsSUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QixJQUFJQSxJQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLElBQUlBLElBQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsSUFBSSxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekUsQ0FBQztBQUNEO0FBQ0EsU0FBUyxZQUFZLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDakMsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEgsQ0FBQztBQUNEO0FBQ0E7QUFDQSxTQUFTLGtCQUFrQixDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7QUFDMUMsSUFBSUQsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3ZCLElBQUksS0FBS0EsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdEQsUUFBUUMsSUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLFFBQVEsS0FBS0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQy9ELFlBQVksSUFBSSxVQUFVLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUUsT0FBTyxLQUFLLEdBQUM7QUFDdEUsWUFBWSxJQUFJLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBRSxNQUFNLEdBQUcsQ0FBQyxNQUFNLEdBQUM7QUFDNUUsU0FBUztBQUNULEtBQUs7QUFDTCxJQUFJLE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUM7QUFDRDtBQUNBLFNBQVMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRTtBQUM5QyxJQUFJLEtBQUtBLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM5QyxRQUFRLElBQUksa0JBQWtCLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLE9BQU8sSUFBSSxHQUFDO0FBQ2hFLEtBQUs7QUFDTCxJQUFJLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUM7QUFDRDtBQUNBLFNBQVMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDdEIsSUFBSSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUMzQyxDQUFDO0FBQ0Q7QUFDQTtBQUNBLFVBQVUsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNuQztBQUNBLElBQUlDLElBQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsSUFBSUEsSUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QixJQUFJQSxJQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCLElBQUlBLElBQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsSUFBSUEsSUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QixJQUFJQSxJQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCLElBQUlBLElBQU0sSUFBSSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3JDLElBQUlBLElBQU0sSUFBSSxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3RDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsSUFBRSxPQUFPLElBQUksR0FBQztBQUN0RSxJQUFJLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUM7QUFDRDtBQUNBLFNBQVMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLElBQUlBLElBQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0MsSUFBSUEsSUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMs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QUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7QUFDM0M7QUFDQSxTQUFTLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQ2xFLFNBQVMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUN0RSxTQUFTLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO0FBQ2hFLFNBQVMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDaEUsU0FBUyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtBQUNuRSxTQUFTLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxDQUFDOztBQ3BURjtBQUNBO0FBS08sU0FBUyx5QkFBeUIsQ0FBQyxLQUFLLFVBQVU7QUFDekQsSUFBSSx1QkFBbUIsOEJBQUssRUFBRTtBQUM5QixRQURTQSxJQUFNOztRQUNQLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsT0FBTyxLQUFLLEdBQUM7QUFDN0UsS0FBSztBQUNMLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQztBQUNEO0FBQ08sU0FBUyx5QkFBeUIsQ0FBQyxLQUFLLFVBQVU7QUFDekQsSUFBSSx1QkFBbUIsOEJBQUssRUFBRTtBQUM5QixRQURTQSxJQUFN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QUUsVUFBVSxFQUFFLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVO0FBQzFPLFFBQVFBLElBQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDMUIsUUFBUUEsSUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxQixRQUFRQSxJQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hDLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hDLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2pDLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2pDLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2pDLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2pDLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2pDLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xDLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xDLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xDLFFBQVEs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QUNMO0FBQ0EsNkNBQUksNEJBQVEsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVTtBQUN6WCxRQUFRQSxJQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFFBQVFBLElBQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDMUIsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEMsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEMsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEMsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEMsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEMsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEMsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEMsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDakMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDakMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbkMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbkMsUUFB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Q0FBQztBQUNYLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDdEMsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksTUFBTSxLQUFLLEVBQUUsQ0FBQyxLQUFLLFVBQVUsQ0FBQztBQUNwRixFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sSUFBSSxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsSUFBSSxNQUFNLElBQUksTUFBTSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDaEYsRUFBRTtBQUNGO0FBQ0EsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ1I7QUFDQSxDQUFDLFFBQVEsU0FBUztBQUNsQixFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7QUFDckQsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDO0FBQ3BELEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDM0M7QUFDQSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxNQUFNLEtBQUssRUFBRSxDQUFDLElBQUksVUFBVSxDQUFDO0FBQ25GLEVBQUUsRUFBRSxHQUFHLENB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QUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLFVBQVUsSUFBSSxNQUFNLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RGO0FBQ0EsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ1gsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNSLEdBQUc7QUFDSDtBQUNBLEVBQUUsUUFBUSxDQUFDO0FBQ1gsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ3BELEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQztBQUNuRCxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxJQUFJLFVBQVUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLFVBQVUsSUFBSSxNQUFNLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzRixHQUFHO0FBQ0g7QUFDQSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxJQUFJLFVBQVUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLFVBQVUsSUFBSSxNQUFNLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNuRixFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2hCO0FBQ0EsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakIsQ0FBQztBQUNEO0FBQ0EsR0FB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SUQsVUFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUM3QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVMsUUFBUSxDQUFDLEdBQUcsRUFBRTtBQUM5QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0IsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtBQUMvQyxFQUFFLElBQUksR0FBRyxHQUFHLElBQUlBLFVBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtBQUM3QyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDO0FBQ0E7QUFDQSxFQUFFLElBQUksR0FBRyxLQUFLLENBQUMsRUFB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O0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDM0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0IsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2pDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFD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QUFDLENBQUMsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbkIsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0IsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3BDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNsQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNFLFFBQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzdCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUMsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxVixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0IsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtBQUN2RCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQVcsR0FBRyxHQUFHLFFBQVE7O0FDOWF6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCQyxRQUFNLEdBQUc7QUFDekIsRUFBRSxJQUFJLEdBQUcsR0FBRyxJQUFJSixVQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDO0FBQ0EsRUFBRSxJQUFJQSxVQUFtQixJQUFJLFlBQVksRUFBRTtBQUMzQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixHQUFHO0FBQ0g7QUFDQSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsT0FBSyxDQUFDLENBQUMsRUFBRTtBQUN6QixFQUFFLElBQUksR0FBRyxHQUFHLElBQUlELFVBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0ssTUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDN0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLFVBQVEsQ0FBQyxHQUFHLEVBQUU7QUFDOUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxZQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDL0MsRUFBRSxJQUFJLEdBQUcsR0FBRyxJQUFJUCxVQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTUSxLQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQzdDLEVBQUUsR0FBRyxDQUFDLENB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QUM7QUFDaEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDN0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzdCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM3QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDN0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNsQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2xDLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JDLFFBQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtBQUNwQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxD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LEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxhQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUNwQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUyxlQUFlLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUN4QyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxLQUFHLENBQUMsQ0FBQyxFQUFFO0FBQ3ZCLEVBQUUsT0FBTyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckcsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsTUFBSSxDQUFDLENBQUMsRUFBRTtBQUN4QixFQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzRCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JDLEtBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCQyxVQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDcEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQkMsZ0JBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMxQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JDLHNCQUFvQixDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtBQUN2RCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxhQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNsQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUcsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTckIsUUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDN0IsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUMsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwZ0IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFJcUIsS0FBRyxHQUFHYixVQUFRLENBQUM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQVdjLEtBQUcsR0FBR0wsVUFBUTs7QUNwZXpCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQmhCLFFBQU0sR0FBRztBQUN6QixFQUFFLElBQUksR0FBRyxHQUFHLElBQUlKLFVBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkM7QUFDQSxFQUFFLElBQUlBLFVBQW1CLElBQUksWUFBWSxFQUFFO0FBQzNDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNmLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNmLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNmLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNmLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNmLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNmLEdBQUc7QUFDSDtBQUNBLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDakMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDakIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLE9BQUssQ0FBQyxDQUFDLEVBQUU7QUFDekIsRUFBRSxJQUFJLEdBQUcsR0FBRyxJQUFJRCxVQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNLLE1BQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQzdCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JFLFlBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtBQUN4RSxFQUFFLElBQUksR0FBRyxHQUFHLElBQUlQLFVBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCUSxLQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0FBQ3RFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTRixVQUFRLENBQUMsR0FBRyxFQUFFO0FBQzlCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMs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QUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEMsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNuQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQztBQUNBLEVBQUUsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDOUM7QUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7QUFDWixJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLEdBQUc7QUFDSDtBQUNBLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNyQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztBQUMxQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDekMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNyQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDekMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDMUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNyQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztBQUMxQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDekMsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU2tCLFNBQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQ2hDLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDakMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2pDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDakMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2pDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDakMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2pDLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTakIsYUFBVyxDQUFDLENBQUMsRUFBRTtBQUMvQixFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixFQUFFLE9BQU8sR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUN4RyxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JDLFVBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNwQyxFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUM3QyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUM3QyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUM3QyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUM3QyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUM3QyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUM3QyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMs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Q2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNiLGNBQVksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFO0FBQ3ZDLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7QUFDdkIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsYUFBVyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDcEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUNqQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNsQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNsQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNsQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDbkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ25CLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDbkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ25CLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUN2QyxFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2pCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQixFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDakIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNqQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2pCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQixFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQztBQUNBLEVBQUUsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEY7QUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7QUFDWixJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLEdBQUc7QUFDSDtBQUNBLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDckQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDckQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDckQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDckQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDckQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDckQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDckQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDckQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDckQsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQixVQUFVLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7QUFDL0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNyQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDZCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsS0FBRyxDQUFDLENBQUMsRUFBRTtBQUN2QixFQUFFLE9BQU8sT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlJLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLE1BQUksQ0FBQyxDQUFDLEVBQUU7QUFDeEIsRUFBRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JDLEtBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCQyxVQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDcEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQkMsZ0JBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMxQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JDLHNCQUFvQixDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtBQUN2RCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxhQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNsQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0osQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTckIsUUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDN0IsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUMsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNud0IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFJcUIsS0FBRyxHQUFHYixVQUFRLENBQUM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQVdjLEtBQUcsR0FBR0wsVUFBUTs7QUN4d0J6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JoQixRQUFNLEdBQUc7QUFDekIsRUFBRSxJQUFJLEdBQUcsR0FBRyxJQUFJSixVQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hDO0FBQ0EsRUFBRSxJQUFJQSxVQUFtQixJQUFJLFlBQVksRUFBRTtBQUMzQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEIsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoQixJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLE9BQUssQ0FBQyxDQUFDLEVBQUU7QUFDekIsRUFBRSxJQUFJLEdBQUcsR0FBRyxJQUFJRCxVQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTSyxNQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUM3QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNFLFlBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDM0csRUFBRSxJQUFJLEdBQUcsR0FBRyxJQUFJUCxVQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNRLEtBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0FBQ3pHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTRixVQUFRLENBQUMsR0FBRyxFQUFFO0FBQzlCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNvQixXQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUNsQztBQUNBLEVBQUUsSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFO0FBQ2pCLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixRQUFRLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQixJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsUUFBUSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25CLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25CLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25CLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNsQixJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLEdBQUcsTUFBTTtBQUNULElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNuQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbkIsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEIsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQixJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkIsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwQixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTakIsUUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDL0IsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNqQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2pCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDakIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNqQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEMsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEMsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEMsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEMsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEMsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEMsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEMsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEMsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEMsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEMsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEMsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEM7QUFDQSxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2xGO0FBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ1osSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixHQUFHO0FBQ0g7QUFDQSxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3JELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3JELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3JELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3JELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3JELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3JELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3JELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3JELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3JELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3JELEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3RELEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3RELEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3RELEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3RELEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3RELEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ3RELEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNrQixTQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUNoQyxFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2pCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQixFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDakIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNqQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2pCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUN6RyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDekcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUN6RyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDekcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDekcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM3RyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDN0csRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDMUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzFHLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTakIsYUFBVyxDQUFDLENBQUMsRUFBRTtBQUMvQixFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2pCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQixFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDakIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNqQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2pCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQixFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQyxFQUFFLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQztBQUNBLEVBQUUsT0FBTyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUMvRSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JDLFVBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNwQyxFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2pCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQixFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDakIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNqQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2pCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQjtBQUNBLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDckQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUNyRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ3JELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDckQsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1osRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1osRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1osRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1osRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUNyRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ3JELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDckQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUNyRCxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDWixFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDWixFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDYixFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ3JELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDckQsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUN0RCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ3RELEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNiLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNiLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNiLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDdEQsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUN0RCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ3RELEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDdEQsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQkcsV0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3JDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0FBQ3pCLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7QUFDekIsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUN6QjtBQUNBLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFO0FBQ2pCLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyRCxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckQsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RELElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0RCxHQUFHLE1BQU07QUFDVCxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2hCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsRCxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEQsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xELElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsRCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCRCxPQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDakMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JELFFBQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUU7QUFDMUMsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNkLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7QUFDekIsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUN6QixFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0FBQ3pCLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUNwQixFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7QUFDcEIsRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0FBQ3BCO0FBQ0EsRUFBRSxJQUFJLEdBQUcsR0FBR1QsT0FBZ0IsRUFBRTtBQUM5QixJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLEdBQUc7QUFDSDtBQUNBLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDO0FBQ1gsRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDO0FBQ1gsRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDO0FBQ1gsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDWixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDZCxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDZDtBQUNBLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUIsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxQixFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxQixFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUIsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCO0FBQ0EsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDN0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDN0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDN0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDN0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDN0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDN0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDN0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDN0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDN0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDN0MsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDOUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDOUM7QUFDQSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRTtBQUNqQjtBQUNBLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwQixJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEIsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwQixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtBQUNyQyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEIsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xCO0FBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDakI7QUFDQSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwQixJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEIsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLEdBQUc7QUFDSDtBQUNBO0FBQ0EsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUM3QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDN0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUM3QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDN0IsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUM5QixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtBQUNyQyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEIsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xCO0FBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDakI7QUFDQSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwQixJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEIsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLEdBQUc7QUFDSDtBQUNBO0FBQ0EsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUM3QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDN0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUM3QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDN0IsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUM5QixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtBQUNyQyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEIsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDakI7QUFDQSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwQixJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEIsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwQixJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEIsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLEdBQUc7QUFDSDtBQUNBO0FBQ0EsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUM3QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDN0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUM3QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDN0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUM3QixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVN5QixpQkFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDeEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTWixhQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUNwQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JELGNBQVksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRTtBQUM3QyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNqQixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsRUFBRSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDaEMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2Q7QUFDQSxFQUFFLElBQUksR0FBRyxHQUFHWixPQUFnQixFQUFFO0FBQzlCLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixFQUFFLENBQUMsSUFBSSxHQUFHLENBQUM7QUFDWCxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUM7QUFDWCxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUM7QUFDWCxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNaO0FBQ0EsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3QixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTLGFBQWEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFO0FBQ3hDLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QixFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEI7QUFDQSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUyxhQUFhLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRTtBQUN4QyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEIsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCO0FBQ0EsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDZCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVMsYUFBYSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDeEMsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QjtBQUNBLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCLHVCQUF1QixDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ25EO0FBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNsQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNsQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNsQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3pCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDbkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ25CLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDekIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ25CLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDbkIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUMxQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDLEVBQUUsSUFBSSxXQUFXLEdBQUcsSUFBSUgsVUFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxJQUFJLFNBQVMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3hEO0FBQ0EsRUFBRSxJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUU7QUFDckIsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUM7QUFDN0UsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUM7QUFDN0UsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUM7QUFDN0UsR0FBRyxNQUFNO0FBQ1QsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNqRSxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2pFLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDakUsR0FBRztBQUNIO0FBQ0EsRUFBRSx1QkFBdUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQy9DLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTLGNBQWMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFO0FBQ3pDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNuQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25CLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVMsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDckMsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkIsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkIsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkIsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkIsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkIsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkIsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkIsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkIsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNyQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDckMsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVMsV0FBVyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDdEMsRUFBRSxJQUFJLE9BQU8sR0FBRyxJQUFJQSxVQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLEVBQUUsVUFBVSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMzQixFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixFQUFFLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUIsRUFBRSxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFCLEVBQUUsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQixFQUFFLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUIsRUFBRSxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFCLEVBQUUsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQixFQUFFLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUIsRUFBRSxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFCLEVBQUUsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQixFQUFFLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ2pDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ1o7QUFDQSxFQUFFLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtBQUNqQixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUN0QixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQy9CLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7QUFDL0IsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUMvQixHQUFHLE1BQU0sSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLEVBQUU7QUFDekMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEQsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUMvQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7QUFDL0IsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUMvQixHQUFHLE1BQU0sSUFBSSxJQUFJLEdBQUcsSUFBSSxFQUFFO0FBQzFCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hELElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7QUFDL0IsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUMvQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7QUFDL0IsR0FBRyxNQUFNO0FBQ1QsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEQsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUMvQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQy9CLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7QUFDL0IsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUN0QixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCLDRCQUE0QixDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMzRDtBQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNsQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNsQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNsQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNoQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzFCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDMUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUMxQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2hDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDMUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUMxQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzFCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDakMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTLGtDQUFrQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDcEU7QUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNsQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNsQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNsQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNsQyxFQUFFLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDNUIsRUFBRSxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzVCLEVBQUUsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM1QixFQUFFLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbEMsRUFBRSxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzVCLEVBQUUsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM1QixFQUFFLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDNUIsRUFBRSxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ25DLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2xCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztBQUM1RCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDNUQsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQzdELEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUzZCLFVBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQ2pDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNsQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNsQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNsQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ25CLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDbkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNuQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ25CLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDbkIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDeEIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtBQUNsRSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDOUIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0FBQzlCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztBQUM1QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN6QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN6QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQy9CLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFH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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQixNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFO0FBQzdDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7QUFDOUMsRUFBRSxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEIsRUFBRSxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEIsRUFBRSxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEIsRUFBRSxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsRUFBRSxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsRUFBRSxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsRUFBRSxJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsRUFBRSxJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsRUFBRSxJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUI7QUFDQSxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcxQixPQUFnQixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHQSxPQUFnQixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHQSxPQUFnQixFQUFFO0FBQ2pKLElBQUksT0FBT0csVUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLEdBQUc7QUFDSDtBQUNBLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBRyxPQUFPLENBQUM7QUFDdEIsRUFBRSxFQUFFLEdBQUcsSUFBSSxHQUFHLE9BQU8sQ0FBQztBQUN0QixFQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUcsT0FBTyxDQUFDO0FBQ3RCLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbkMsRUFBRSxFQUFFLElBQUksR0FBRyxDQUFDO0FBQ1osRUFBRSxFQUFFLElBQUksR0FBRyxDQUFDO0FBQ1osRUFBRSxFQUFFLElBQUksR0FBRyxDQUFDO0FBQ1osRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQzNCLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUMzQixFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDM0IsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQy9CO0FBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ1osSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ1gsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ1gsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ1gsR0FBRyxNQUFNO0FBQ1QsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNsQixJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUM7QUFDZCxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUM7QUFDZCxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUM7QUFDZCxHQUFHO0FBQ0g7QUFDQSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDekIsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN6QixFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDL0I7QUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7QUFDWixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDWCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDWCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDWCxHQUFHLE1BQU07QUFDVCxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQztBQUNkLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQztBQUNkLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQztBQUNkLEdBQUc7QUFDSDtBQUNBLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNqRCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDakQsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ2pELEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQixRQUFRLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFO0FBQy9DLEVBQUUsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNuQixNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ25CLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkIsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNqQixNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixFQUFFLElBQUksRUFBRSxHQUFHLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sRUFBRSxHQUFHLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sRUFBRSxHQUFHLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsRUFBRSxJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN4QztBQUNBLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFO0FBQ2YsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDO0FBQ2QsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDO0FBQ2QsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDO0FBQ2QsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFO0FBQzlCLE1BQU0sRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUU7QUFDOUIsTUFBTSxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQy9CLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BDO0FBQ0EsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUU7QUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3QixJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUM7QUFDZCxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUM7QUFDZCxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUM7QUFDZCxHQUFHO0FBQ0g7QUFDQSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDZCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDZCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDZCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDN0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzdCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM3QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDZCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDZCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDZixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU1csS0FBRyxDQUFDLENBQUMsRUFBRTtBQUN2QixFQUFFLE9BQU8sT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdFAsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsTUFBSSxDQUFDLENBQUMsRUFBRTtBQUN4QixFQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JDLEtBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JDLFVBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNwQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JDLGdCQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDMUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JDLHNCQUFvQixDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtBQUN2RCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNsQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNsQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNsQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNsQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNsQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNsQyxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxhQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNsQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsUyxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNyQixRQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUM3QixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNqQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2pCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDakIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNqQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDakIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNqQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2pCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDakIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xCLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUMsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSUEsT0FBZ0IsR0FBRyxJQUFJ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R0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCQyxVQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDcEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQlQsVUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3BDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0IsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDN0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUM5QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQzlCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JFLE9BQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNqQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0IsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtBQUM5QyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMvQixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQy9CLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLEVBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFD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QUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDN0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzdCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM3QixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0IsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNoQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNoQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNoQyxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzVDLEVBQUUsSUFBSSxZQUFZLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQixFQUFFLElBQUksT0FBTyxHQUFHLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMvQyxFQUFFLElBQUksT0FBTyxHQUFHLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNDLEVBQUUsSUFBSSxPQUFPLEdBQUcsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2QyxFQUFFLElBQUksT0FBTyxHQUFHLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDN0UsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUM3RSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQzdFLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU2lCLFFBQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMzQyxFQUFFLElBQUksYUFBYSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUIsRUFBRSxJQUFJLHFCQUFxQixHQUFHLGFBQWEsR0FBRyxhQUFhLENBQUM7QUFDNUQsRUFBRSxJQUFJLFlBQVksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLEVBQUUsSUFBSSxPQUFPLEdBQUcscUJBQXFCLEdBQUcsYUFBYSxDQUFDO0FBQ3RELEVBQUUsSUFBSSxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxxQkFBcUIsQ0FBQztBQUM5QyxFQUFFLElBQUksT0FBTyxHQUFHLENBQUMsR0FBRyxZQUFZLEdBQUcsYUFBYSxDQUFDO0FBQ2pELEVBQUUsSUFBSSxPQUFPLEdBQUcsWUFBWSxHQUFHLENBQUMsQ0FBQztBQUNqQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQzdFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDN0UsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUM3RSxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFO0FBQ25DLEVBQUUsS0FBSyxHQUFHLEtBQUssSUFBSSxHQUFHLENBQUM7QUFDdkIsRUFBRSxJQUFJLENBQUMsR0FBR0MsTUFBZSxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDNUMsRUFBRSxJQUFJLENBQUMsR0FBR0EsTUFBZSxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUN4QyxFQUFFLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDOUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDaEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDaEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNyQixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0IsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3pDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsRCxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDO0FBQ2YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN4RCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDekQsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQixhQUFhLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDekMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFDLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQixhQUFhLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDekM7QUFDQSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2Y7QUFDQTtBQUNBLEVBQUUsSUFBSSxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUMzQixNQUFNLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO0FBQzNCLE1BQU0sR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM1QjtBQUNBLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRztBQUNoQyxNQUFNLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHO0FBQ2hDLE1BQU0sSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUNqQztBQUNBLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNsQixFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7QUFDWixFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7QUFDWixFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7QUFDWjtBQUNBLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUNaLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUNaLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUNaO0FBQ0EsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDMUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDMUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDMUIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQkMsU0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtBQUN4QyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7QUFDWixNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDYjtBQUNBLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCO0FBQ0EsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckQsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckQ7QUFDQSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCQyxTQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0FBQ3hDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNaLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiO0FBQ0EsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckI7QUFDQSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNyRCxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNyRDtBQUNBLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JDLFNBQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7QUFDeEMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ1osTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2I7QUFDQSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQjtBQUNBLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JELEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JELEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkO0FBQ0EsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDNUIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ25ELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDbkQsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUk7QUFDdkIsTUFBTSxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLEVBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RELENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRTtBQUMxQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU2pCLEtBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDdkIsRUFBRSxPQUFPLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxRCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNNLGFBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNyQixRQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUM3QixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQyxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJQSxPQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JRLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBV3NCLEtBQUcsR0FBR0wsV0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBSUksS0FBRyxHQUFHYixVQUFRLENBQUM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFJLE9BQU8sR0FBRyxlQUFlLENBQUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBSSxNQUFNLEdBQUcsYUFBYSxDQUFDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBVyxPQUFPLEdBQUcsWUFBWTtBQUNqQyxFQUFFLElBQUksR0FBRyxHQUFHUCxRQUFNLEVBQUUsQ0FBQztBQUNyQixFQUFFLE9BQU8sVUFBVSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRTtBQUN0RCxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNiO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNqQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxLQUFLLEVBQUU7QUFDZixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0RCxLQUFLLE1BQU07QUFDWCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ25CLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLE1BQU0sRUFBRTtBQUN6QyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEIsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN4QixNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDeEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sQ0FBQyxDQUFDO0FBQ2IsR0FBRyxDQUFDO0FBQ0osQ0FBQyxFQUFFOztBQ2p4Qkg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCQSxRQUFNLEdBQUc7QUFDekIsRUFBRSxJQUFJLEdBQUcsR0FBRyxJQUFJSixVQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDO0FBQ0EsRUFBRSxJQUFJQSxVQUFtQixJQUFJLFlBQVksRUFBRTtBQUMzQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsT0FBSyxDQUFDLENBQUMsRUFBRTtBQUN6QixFQUFFLElBQUksR0FBRyxHQUFHLElBQUlELFVBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQk8sWUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN2QyxFQUFFLElBQUksR0FBRyxHQUFHLElBQUlQLFVBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0ssTUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDN0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNHLEtBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3JDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JXLEtBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JDLFVBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNwQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JULFVBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNwQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0J3QixRQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDbEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxNQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUM3QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLE9BQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQzlCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQkMsS0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQy9CLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLEVB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QUFDO0FBQy9CLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQy9CLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQy9CLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQy9CLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLFVBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQy9CLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixFQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNoQyxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLGlCQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN0QyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkMsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsUUFBTSxDQUFDLENBQUMsRUFBRTtBQUMxQixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLEVBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLGVBQWEsQ0FBQyxDQUFDLEVBQUU7QUFDakMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2QyxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLFFBQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQy9CLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLFNBQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQ2hDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsV0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDbEMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUM7QUFDQSxFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRTtBQUNmLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLEdBQUc7QUFDSDtBQUNBLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNuQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ25CLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbkIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsS0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDMUIsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0QsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JDLE9BQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDcEMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQyxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JDLE1BQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDbkMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDaEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDaEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDaEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDaEMsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsUUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUU7QUFDbkMsRUFBRSxLQUFLLEdBQUcsS0FBSyxJQUFJLEdBQUcsQ0FBQztBQUN2QjtBQUNBO0FBQ0E7QUFDQSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ3JCLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2I7QUFDQSxFQUFFLEdBQUc7QUFDTCxJQUFJLEVBQUUsR0FBR3JCLE1BQWUsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsSUFBSSxFQUFFLEdBQUdBLE1BQWUsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNCLEdBQUcsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFO0FBQ3BCO0FBQ0EsRUFBRSxHQUFHO0FBQ0wsSUFBSSxFQUFFLEdBQUdBLE1BQWUsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsSUFBSSxFQUFFLEdBQUdBLE1BQWUsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzNCLEdBQUcsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFO0FBQ3BCO0FBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNuQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ3RCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDdEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQnNCLGVBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN6QyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkQsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQkMsZUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3pDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQjtBQUNBLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNwQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNyQztBQUNBLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDcEQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUNwRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO0FBQ3BELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsTUFBSSxDQUFDLEdBQUcsRUFBRTtBQUMxQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU3RDLEtBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDdkIsRUFBRSxPQUFPLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdB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QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTTSxVQUFRLENBQUMsR0FBRyxFQUFFO0FBQzlCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQixZQUFZLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7QUFDN0MsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQixFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFO0FBQzFDLEVBQUUsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEMsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUM5QjtBQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUdILE9BQWdCLEVBQUU7QUFDNUIsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQixJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0IsR0FBRyxNQUFNO0FBQ1Q7QUFDQSxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQy9CLEVBQUUsSUFBSSxVQUFVLEdBQUc4QyxLQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdCLEVBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BELENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQnRDLFVBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNwQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDakQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pELEVBQUUsT0FB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QUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUQsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUM1QixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNDLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQzNCLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDM0MsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3pELEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0IsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQy9CLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNiLEVBQUVyQixPQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNyQixFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDcEM7QUFDQTtBQUNBLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsSUFBSSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDO0FBQzFDO0FBQ0EsRUFBRSxLQUFLLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNoRDtBQUNBLEVBQUUsSUFBSSxLQUFLLEdBQUcsR0FBRyxFQUFFO0FBQ25CLElBQUksS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDO0FBQ25CLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO0FBQ2IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDYixJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUNiLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO0FBQ2IsR0FBRztBQUNIO0FBQ0E7QUFDQSxFQUFFLElBQUksR0FBRyxHQUFHLEtBQUssR0FBR1YsT0FBZ0IsRUFBRTtBQUN0QztBQUNBLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0IsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1QixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDakQsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ3pDLEdBQUcsTUFBTTtBQUNUO0FBQ0E7QUFDQSxJQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNmLEdBQUc7QUFDSDtBQUNBO0FBQ0EsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLEVBQUUsR0FBRyxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3JDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxFQUFFLEdBQUcsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNyQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsRUFBRSxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDckMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLEVBQUUsR0FBRyxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3JDLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTaUQsUUFBTSxDQUFDLEdBQUcsRUFBRTtBQUM1QjtBQUNBO0FBQ0EsRUFBRSxJQUFJLEVBQUUsR0FBR3JCLE1BQWUsRUFBRSxDQUFDO0FBQzdCLEVBQUUsSUFBSSxFQUFFLEdBQUdBLE1BQWUsRUFBRSxDQUFDO0FBQzdCLEVBQUUsSUFBSSxFQUFFLEdBQUdBLE1BQWUsRUFBRSxDQUFDO0FBQzdCLEVBQUUsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDdkMsRUFBRSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2pELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2pELEVBQUUsT0FB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Q0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQztBQUNuQyxHQUFHLE1BQU07QUFDVDtBQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUUsQ0FBQyxHQUFHLENBQUMsR0FBQztBQUMzQixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFFLENBQUMsR0FBRyxDQUFDLEdBQUM7QUFDbkMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN4QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3hFLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDekIsSUFBSSxLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQztBQUN4QixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQztBQUNuRCxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQztBQUNuRCxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQztBQUNuRCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQixTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3hDLEVBQUUsSUFBSSxTQUFTLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDO0FBQ3hDLEVBQUUsQ0FBQyxJQUFJLFNBQVMsQ0FBQztBQUNqQixFQUFFLENBQUMsSUFBSSxTQUFTLENBQUM7QUFDakIsRUFBRSxDQUFDLElBQUksU0FBUyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3ZDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3ZDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3ZDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3ZDLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTUSxLQUFHLENBQUMsQ0FBQyxFQUFFO0FBQ3ZCLEVBQUUsT0FBTyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4RSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQUloQixPQUFLLEdBQUc2RCxPQUFVLENBQUM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQUl2RCxZQUFVLEdBQUd3RCxZQUFlLENBQUM7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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RUFBRTtBQUN6QixFQUFFLElBQUksRUFBRSxHQUFHLElBQUlELFVBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTTyxZQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUMzRCxFQUFFLElBQUksRUFBRSxHQUFHLElBQUlQLFVBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUyw2QkFBNkIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDMUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJQSxVQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUc7QUFDbkIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUc7QUFDbkIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUNwQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN0QyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN0QyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN0QyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3ZDLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQmtGLHlCQUF1QixDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ25ELEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUc7QUFDckIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUc7QUFDckIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUc7QUFDckIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3ZDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3ZDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3ZDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDeEMsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTdEQsaUJBQWUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQ3hDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN0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QztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQkUsS0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ3pELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUs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QUFDQTtBQUNBLFNBQWdCMUUsV0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3JDLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRztBQUN0QixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRztBQUN0QixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRztBQUN0QixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ25ELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNuRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbkQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDcEQsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQmtCLFNBQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtBQUNyQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDakQsTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDakQsTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDakQsTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNsRCxFQUFFeUQsU0FBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDNUIsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNyRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3JELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDckQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNyRCxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCeEQsU0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0FBQ3JDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtBQUNqRCxNQUFNLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtBQUNqRCxNQUFNLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtBQUNqRCxNQUFNLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2xELEVBQUV5RCxTQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM1QixFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3JELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDckQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNyRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3JELEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0J4RCxTQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7QUFDckMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0FBQ2pELE1BQU0sR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0FBQ2pELE1BQU0sR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0FBQ2pELE1BQU0sR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDbEQsRUFBRXlELFNBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDckQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNyRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3JELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDckQsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQixrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUM5QyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDakQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqRCxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDWixFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDWixFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDWixFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDWixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDakQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pELEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0IsbUJBQW1CLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDL0MsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDakQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDakQsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1osRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1osRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1osRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1osRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDakQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqRCxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0IsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFO0FBQ3BEO0FBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUd4RixPQUFnQixFQUFFO0FBQ3hDLElBQUksT0FBT0UsTUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN4QixHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RCxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QixFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDO0FBQ3BDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUM7QUFDcEMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQztBQUNwQyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekIsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNyRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3JELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDckQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNyRCxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDakQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pELEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQmMsS0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQy9CLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCUixVQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDcEMsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUN6RCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ3pELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDekQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUN6RCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDekcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ3pHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUN6RyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDekcsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBSWEsS0FBRyxHQUFHYixVQUFRLENBQUM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQkUsT0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2pDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQUlvQyxLQUFHLEdBQUcyQyxLQUFRLENBQUM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCekMsTUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNuQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakIsRUFBRSxJQUFJRixLQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUM7QUFDNUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoQyxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTeEMsUUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDL0IsRUFBRSxJQUFJLEtBQUssR0FBR29DLGVBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDekIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ3pCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUN6QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ3hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUN6QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDekIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ3pCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDeEIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTZ0QsV0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDbEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFJakQsUUFBTSxHQUFHa0QsUUFBVyxDQUFDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFJbkMsS0FBRyxHQUFHZixRQUFNLENBQUM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQUlDLGVBQWEsR0FBR2tELGVBQWtCLENBQUM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQUluQyxRQUFNLEdBQUdmLGVBQWEsQ0FBQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTRyxXQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUNsQyxFQUFFLElBQUksU0FBUyxHQUFHSCxlQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkM7QUFDQSxFQUFFLElBQUksU0FBUyxHQUFHLENBQUMsRUFBRTtBQUNyQixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3JDLElBQUksSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztBQUM5QixJQUFJLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUM7QUFDOUIsSUFBSSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDO0FBQzlCLElBQUksSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztBQUM5QixJQUFJLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixJQUFJLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixJQUFJLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixJQUFJLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixJQUFJLElBQUksT0FBTyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDeEQsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEIsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLElBQUksU0FBUyxDQUFDO0FBQzdDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLElBQUksU0FBUyxDQUFDO0FBQzdDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLElBQUksU0FBUyxDQUFDO0FBQzdDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLElBQUksU0FBUyxDQUFDO0FBQzdDLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTNUIsS0FBRyxDQUFDLENBQUMsRUFBRTtBQUN2QixFQUFFLE9BQU8sUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqSSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNNLGFBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUksQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTckIsUUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDN0IsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixFQUFFLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlDLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlBLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlBLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlBLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlBLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUlBLE9BQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFD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LENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCQyxVQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDcEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JULFVBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNwQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQndCLFFBQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNsQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsTUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDN0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLE9BQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQzlCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCQyxLQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDL0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQkMsS0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQy9CLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLE9BQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQzlCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCM0IsT0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2pDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0I0QixhQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFO0FBQzlDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQy9CLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQy9CLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLFVBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQy9CLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixFQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxpQkFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDdEMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkIsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsUUFBTSxDQUFDLENBQUMsRUFBRTtBQUMxQixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixFQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsZUFBYSxDQUFDLENBQUMsRUFBRTtBQUNqQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsUUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDL0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsU0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDaEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLFdBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFCO0FBQ0EsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUU7QUFDZjtBQUNBLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLEdBQUc7QUFDSDtBQUNBLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN0QixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxLQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMxQixFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCQyxPQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDakMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0JDLE1BQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDbkMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2hDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2hDLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLFFBQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFO0FBQ25DLEVBQUUsS0FBSyxHQUFHLEtBQUssSUFBSSxHQUFHLENBQUM7QUFDdkIsRUFBRSxJQUFJLENBQUMsR0FBR3JCLE1BQWUsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzVDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQy9CLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQy9CLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0IsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3pDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNkLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMvQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0IsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQixjQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDMUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFnQmlFLGVBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN6QyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0IzQyxlQUFhLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDekMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2QyxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQWdCekMsUUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtBQUN2QztBQUNBLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7QUFD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RUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFFLE9BQU8sS0FBSyxHQUFDO0FBQ3pDO0FBQ0E7QUFDQSxJQUFJLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0UsUUFBUSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RSxRQUFRLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdFLFFBQVEsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5RTtBQUNBO0FBQ0EsSUFBSSxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQztBQUN4RCxRQUFRLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pEO0FBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSztBQUNyQixRQUFRLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO0FBQ3RCO0FBQ0E7QUFDQSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRTtBQUNqRCxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJO0FBQzVDLFlBQVksZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFFLE9BQU8sS0FBSyxHQUFDO0FBQ3ZELFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDcEI7QUFDQSxRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJO0FBQzVDLFlBQVksZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFFLE9BQU8sS0FBSyxHQUFDO0FBQ3ZELFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDcEIsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFO0FBQzdCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUk7QUFDNUMsWUFBWSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25FLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUUsT0FBTyxLQUFLLEdBQUM7QUFDdkQsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNwQixLQUFLO0FBQ0w7QUFDQTtBQUNBLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUU7QUFDN0IsUUFBUSxJQUFJLENBQUMsS0FBSyxH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TUFBTSxJQUFJLENBQUMsQ0FBQztBQUNwQjtBQUNBLEtBQUssUUFBUSxTQUFTLEdBQUcsQ0FBQyxFQUFFO0FBQzVCO0FBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDO0FBQ0Q7QUFDQTtBQUNBLFNBQVMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDM0M7QUFDQSxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUNyQyxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUNyQztBQUNBLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUM7QUFDcEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQztBQUNwQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDO0FBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUM7QUFDcEM7QUFDQSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDO0FBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUM7QUFDcEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQztBQUNwQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDO0FBQ3BDO0FBQ0EsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDeEIsQ0FBQztBQUNEO0FBQ0E7QUFDQSxTQUFTLFdBQVcsQ0FBQyxLQUFLLEVBQUU7QUFDNUIsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLO0FBQ2pCLFFBQVEsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUN6QixJQUFJLEdBQUc7QUFDUCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBRSxRQUFRLEdBQUcsQ0FBQyxHQUFDO0FBQ3ZGLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDbkIsS0FBSyxRQUFRLENBQUMsS0FBSyxLQUFLLEVBQUU7QUFDMUI7QUFDQSxJQUFJLE9BQU8sUUFBUSxDQUFDO0FBQ3BCLENBQUM7QUFDRDtBQUNBO0FBQ0EsU0FBUyxlQUFlLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUN6RCxJQUFJLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDN0QsV0FBVyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztBQUM3RCxXQUFXLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUQsQ0FBQztBQUNEO0FBQ0E7QUFDQSxTQUFTLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQy9CLElBQUksT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzNFLFlBQVksYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzVFLGFBQWEsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0QsWUFBWUEsUUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hGLENBQUM7QUFDRDtBQUNBO0FBQ0EsU0FBUyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDdkIsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pFLENBQUM7QUFDRDtBQUNBO0FBQ0EsU0FBU0EsUUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDeEIsSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUNEO0FBQ0E7QUFDQSxTQUFTLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDcEMsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwQyxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDcEMsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwQztBQUNBLElBQUksSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUUsT0FBTyxJQUFJLEdBQUM7QUFDNUM7QUFDQSxJQUFJLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBRSxPQUFPLElBQUksR0FBQztBQUN2RCxJQUFJLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBRSxPQUFPLElBQUksR0FBQztBQUN2RCxJQUFJLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBRSxPQUFPLElBQUksR0FBQztBQUN2RCxJQUFJLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBRSxPQUFPLElBQUksR0FBQztBQUN2RDtBQUNBLElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQztBQUNEO0FBQ0E7QUFDQSxTQUFTLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUM1QixJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVILENBQUM7QUFDRDtBQUNBLFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNuQixJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUNEO0FBQ0E7QUFDQSxTQUFTLGlCQUFpQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDakMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFD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SSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7QUFDdEIsS0FBSztBQUNMLElBQUksT0FBTyxDQUFDLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQSxTQUFTLFVBQVUsQ0FBQyxDQUFDLEVBQUU7QUFDdkIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3pCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUN6QjtBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUM7QUFDekMsSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBQztBQUN6QyxDQUFDO0FBQ0Q7QUFDQSxTQUFTLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN2QjtBQUNBLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNmLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZjtBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNyQixJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3JCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2xCO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDdEI7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7QUFDekIsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLE1BQU0sQ0FBQyxTQUFTLEdBQUcsVUFBVSxJQUFJLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUU7QUFDaEUsSUFBSSxJQUFJLFFBQVEsR0FBRyxXQUFXLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQztBQUNyRCxJQUFJLElBQUksUUFBUSxHQUFHLFFBQVEsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDakU7QUFDQSxJQUFJLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkUsSUFBSSxJQUFJLFFBQVEsRUFBRTtBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDaEUsWUFBWSxJQUFJLEtBQUssR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLFlBQVksSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUMzRSxZQUFZLFdBQVcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQztBQUMxQixJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQzlDLFFBQVEsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNuQyxRQUFRLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLFFBQVEsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdkMsUUFBUSxhQUFhLElBQUksSUFBSSxDQUFDLEdBQUc7QUFDakMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdELFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0QsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLFdBQVcsS0FBSyxDQUFDLElBQUksYUFBYSxLQUFLLENBQUMsR0FBRyxDQUFDO0FBQ3ZELFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGFBQWEsR0FBRyxXQUFXLElBQUksV0FBVyxDQUFDLENBQUM7QUFDOUQsQ0FBQyxDQUFDO0FBQ0Y7QUFDQSxTQUFTLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDM0MsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDaEIsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUU7QUFDMUQsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pFLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLEtBQUs7QUFDTCxJQUFJLE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQztBQUNEO0FBQ0E7QUFDQSxNQUFNLENBQUMsT0FBTyxHQUFHLFVBQVUsSUFBSSxFQUFFO0FBQ2pDLElBQUksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDL0IsUUFBUSxNQUFNLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEdBQUcsQ0FBQztBQUMzRCxRQUFRLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDdEI7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzFDLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDakQsWUFBWSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDO0FBQzlFLFNBQVM7QUFDVCxRQUFR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QUFDLENBQUM7QUFDakM7QUFDQSxTQUFTLE1BQU07QUFDZixZQUFZLENBQUMsT0FBTyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQyxTQUFTO0FBQ1QsS0FBSztBQUNMLElBQUksSUFBSSxPQUFPLElBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBQztBQUN4QztBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksUUFBUSxHQUFHLENBQUMsRUFBRTtBQUN0QixRQUFRLEtBQUtELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNsRCxZQUFZLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxRQUFRLElBQUUsV0FBUztBQUN6RCxZQUFZLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUN4RixZQUFZLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUN6RCxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLFFBQVEsQ0FBQztBQUNwQixDQUFDO0FBQ0Q7QUFDQSxTQUFTLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzVCLElBQUksT0FBTyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDM0IsQ0FBQzs7QUNuREQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBZ0IsVUFBVSxDQUFDLElBQUksVUFBVSxNQUFNLHNCQUFzQixPQUFP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RztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksSUFBSSxFQUFFLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FB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QztBQUNwQyxFQUFFLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxFQUFDO0FBQzVCLEVBQUUsSUFBSSxLQUFLLEdBQUcsSUFBSSxJQUFJLEVBQUM7QUFDdkIsRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUM7QUFDbEUsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQUM7QUFDakMsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBQztBQUN2QixFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFDO0FBQzdEO0FBQ0EsRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUM7QUFDekI7QUFDQSxFQUFFLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxRQUFRLEVBQUU7QUFDMUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFDO0FBQzVCLElBQUksQ0FBQyxHQUFHLEtBQUk7QUFDWixHQUFHLE1BQU07QUFDVCxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBQztBQUM5QyxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdB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RyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLElBQUksS0FBSyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksSUFBRSxTQUFPO0FBQ3hHLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxJQUFJLEtBQUssR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUUsU0FBTztBQUN4RyxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQztBQUNwRCxLQUFLO0FBQ0w7QUFDQSxJQUFJLFlBQVksRUFBRSxTQUFTLEdBQUcsRUFBRTtBQUNoQyxRQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzRCxLQUFLO0FBQ0w7QUFDQSxJQUFJLFlBQVksRUFBRSxTQUFTLEdBQUcsRUFBRTtBQUNoQyxRQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdkMsS0FBSztBQUNMO0FBQ0EsSUFBSSxXQUFXLEVBQUUsU0FBUyxHQUFHLEVBQUU7QUFDL0IsUUFBUSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3JDO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbkI7QUFDQSxRQUFRLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDaEM7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RCxRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDO0FBQ3RDO0FBQ0EsUUFBUSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUUsc0JBQXNCLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBQztBQUNyRTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDaEMsUUFBUSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUM7QUFDeEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxVQUFVLEVBQUUsU0FBUyxHQUFHLEVBQUU7QUFDOUIsUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFFBQVEsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUQsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUN0QixLQUFLO0FBQ0w7QUFDQSxJQUFJLFdBQVcsRUFBRSxTQUFTLEdBQUcsRUFBRTtBQUMvQixRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBUSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVB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Q0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBQztBQUNqRixJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksSUFBRSxPQUFPLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFDO0FBQ2pGLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFFLE9BQU8sS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUM7QUFDakYsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUUsT0FBTyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBQztBQUNqRixJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksSUFBRSxPQUFPLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFDO0FBQ2pGLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUss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QyxHQUFHLEVBQUUsQ0FBQyxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUUsU0FBTztBQUN0RixJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBRSxTQUFPO0FBQ3RGLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3RDLENBQUM7QUFDRDtBQUNBLFNBQVMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDcEQsSUFBSSxJQUFJLFFBQVE7QUFDaEIsUUFBUSxHQUFHLElBQUksTUFBTSxHQUFHLENBQUM7QUFDekIsUUFBUSxHQUFHLElBQUksUUFBUSxHQUFHLENBQUM7QUFDM0IsUUFBUSxHQUFHLElBQUksU0FBUyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFFO0FBQ0E7QUFDQSxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDMUIsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxRQUFRLEVBQUUsQ0FBQyxFQUFFLElBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBQztBQUNyRixDQUFDO0FBQ0Q7QUFDQSxTQUFTLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLElBQUk7QUFDMUcsU0FBUyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxHQUFHO0FBQzFHLFNBQVMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsS0FBSztBQUMxRyxTQUFTLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLElBQUk7QUFDMUcsU0FBUyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxHQUFHO0FBQzFHLFNBQVMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFFLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsR0FBRztBQUMxRyxTQUFTLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLEVBQUU7QUFDMUcsU0FBUyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxHQUFHO0FBQzFHLFNBQVMsbUJBQW1CLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFFLEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsRUFBRTtBQUMxRztBQUNBO0FBQ0E7QUFDQSxTQUFTLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFO0FBQzlCLElBQUksT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztBQUNyQixTQUFTLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNCLFNBQVMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDNUIsU0FBUyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFDRDtBQUNBLFNBQVMsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0FBQ25DLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNuQixJQUFJLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQy9CLElBQUksR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDaEMsSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUNoQyxDQUFDO0FBQ0Q7QUFDQSxTQUFTLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFO0FBQzdCLElBQUksT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztBQUNyQixTQUFTLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNCLFNBQVMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDNUIsU0FBUyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLENBQUM7QUFDRDtBQUNBLFNBQVMsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0FBQ2pDLElBQUksSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ2pCLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCO0FBQ0EsSUFBSSxPQUFPLENBQUMsR0FBRyxHQUFHLEVBQUU7QUFDcEIsUUFBUSxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMs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QUksR0FBRyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDckM7QUFDQTtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFO0FBQ2hELFlBQVksUUFBUSxHQUFHLElBQUksQ0FBQztBQUM1QixZQUFZLElBQUksS0FBSyxJQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsK0JBQStCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxTQUFTLENBQUMsR0FBQztBQUMvRyxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDLElBQUksU0FBUyxJQUFFLFdBQVM7QUFDekQ7QUFDQTtBQUNBLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLFFBQVEsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO0FBQzlFLFFBQVEsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO0FBQzlFLFFBQVEsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxZQUFZLENB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QUFDQSxTQUFTLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUM5QjtBQUNBLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqQztBQUNBLElBQUksSUFBSSxHQUFHLEdBQUcsYUFBYSxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDaEQsUUFBUSxHQUFHLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3RDtBQUNBLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0QsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDaEMsSUFBSSxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25FLFFBQVEsTUFBTSxJQUFJLENBQUMsR0FBRyxVQUFVLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLElBQUksT0FBTyxHQUFHLEdBQUcsQ0FBQztBQUNoRSxRQUFRLE1BQU0sSUFBSSxDQUFDLEdBQUcsVUFBVSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLE9B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QUFDLENBQUMsQ0FBQztBQUM1RTtBQUNBLFFBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JFO0FBQ0EsUUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RSxLQUFTO0FBQ1Q7QUFDQSxJQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xFLElBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RSxJQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekUsSUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMs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LENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHO0FBQzNDLFFBQVksSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRztBQUNoQyxRQUFZLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQzVDO0FBQ0EsSUFBUSxRQUFRLEVBQUU7QUFDbEIsSUFBUSxLQUFLLENBQUMsQ0FBQztBQUNmLFFBQVksSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7QUFDNUIsUUFBWSxNQUFNO0FBQ2xCLElBQVEsS0FBSyxDQUFDO0FBQ2QsUUFBWSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUM1QixRQUFZLE1BQU07QUFDbEIsS0FBUztBQUNUO0FBQ0EsSUFBUSxRQUFRLEVBQUU7QUFDbEIsSUFBUSxLQUFLLENBQUMsQ0FBQztBQUNmLFFBQVksSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7QUFDNUIsUUFBWSxNQUFNO0FBQ2xCLElBQVEsS0FBSyxDQUFDO0FBQ2QsUUFBWSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUM1QixRQUFZLE1BQU07QUFDbEIsS0FBUztBQUNUO0FBQ0EsSUFBUUMsSUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNsQyxJQUFRQSxJQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2xDLElBQVEsS0FBS0QsSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUMsUUFBWSxLQUFLQSxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM5QyxZQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdB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QUUsS0FBSyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzRCxDQUFDO0FBQ0Q7QUFDQSxTQUFTLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTtBQUNsRDtBQUNBLElBQUksT0FBTyxLQUFLLEdBQUcsSUFBSSxFQUFFO0FBQ3pCLFFBQVEsSUFBSSxLQUFLLEdBQUcsSUFBSSxHQUFHLEdBQUcsRUFBRTtBQUNoQyxZQUFZQSxJQUFNLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUN2QyxZQUFZQSxJQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNuQyxZQUFZQSxJQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLFlBQVlBLElBQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEQsWUFBWUEsSUFBTSxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3ZGLFlBQVlBLElBQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0UsWUFBWUEsSUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcs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LElBQVEsT0FBTyxJQUFJLENBQUM7QUFDaEIsRUFBQztBQUNMO3VCQUNJLG9DQUFZLElBQUksRUFBRSxJQUFJLEVBQUU7QUFDNUIsSUFBUUQsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQy9ELElBQVFDLElBQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RCxJQUFRRCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDdkYsSUFBUUMsSUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVEO0FBQ0EsSUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFO0FBQ3RDLFFBQVksTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDO0FBQzFCLFFBQVksTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUN6QixLQUFTLE1BQU0sSUFBSSxNQUFNLEdBQUcsTUFBTSxFQUFFO0FBQ3BDLFFBQVlBLElBQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNyRixR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QUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDdEMsSUFBSSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QjtBQUNBLElBQUksR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlCLElBQUksR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDdkIsQ0FBQztBQUNEO0FBQ0EsU0FBUyxZQUFZLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO0FBQ3hELElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDM0MsUUFBUSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7QUFDdEIsUUFBUSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDMUQsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3ZCLEtBQUs7QUFDTCxDQUFDO0FBQ0Q7QUFDQSxTQUFTLFFBQVEsQ0FBQyxDQUFDLEVBQUU7QUFDckIsSUFBSSxPQUFPLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLENBQUM7QUFDRDtBQUNBLFNBQVMsUUFBUSxDQUFDLENBQUMsRUFBRTtBQUNyQixJQUFJLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDMUMsSUFBSSxJQUFJLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdB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LENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMsU0FBUztBQUNULEtBQUs7QUFDTCxDQUFDO0FBQ0Q7QUFDQSxTQUFTLFFBQVEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUU7QUFDeEU7QUFDQSxJQUFJLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvQixJQUFJLElBQUksU0FBUyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsVUFBVSxHQUFHLFVBQVUsQ0FBQztBQUN6RCxJQUFJLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDekIsSUFBSSxJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDbEI7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ2pELFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM3QixRQUFRLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDN0IsUUFBUSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdCLFFBQVEsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM3QixRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNyQyxRQUFRLElBQUksQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNyQyxRQUFRLElBQUks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SUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFDO0FBQ3hEO0FBQ0E7QUFDQSxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUM1QixJQUFJLElBQUksU0FBUyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzlGLFFBQVEsUUFBUSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RELEtBQUs7QUFDTDtBQUNBO0FBQ0EsSUFBSSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7QUFDdEIsUUFBUSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVCLEtBQUs7QUFDTCxDQUFDO0FBQ0Q7QUFDQSxTQUFTLFFBQVEsQ0FBQyxJQUFJLEVBQUU7QUFDeEIsSUFBSSxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDbkIsSUFBSSxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDM0IsSUFBSSxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDN0IsSUFBSSxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDekIsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDO0FBQ0Q7QUFDQSxTQUFTLFNBQVMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRTtBQUMzRCxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzFDLFFBQVEsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ25FLEtBQUs7QUFDTCxDQUFDO0FBQ0Q7QUFDQSxTQUFTLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDaEMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsQ0FBQztBQUNEO0FBQ0EsU0FBUyxVQUFVLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDNUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2pDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNqQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsSUFBSSxPQUFPLENBQUMsQ0FBQztBQUNiLENBQUM7QUFDRDtBQUNBLFNBQVMsVUFBVSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQzVDLElBQUks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LElBQUksRUFBRSxDQUFDLENBQUM7QUFDaEIsUUFBUSxJQUFJLEVBQUUsQ0FBQztBQUNmLEtBQUssQ0FBQztBQUNOLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDOUMsUUFBUSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDM0IsUUFBUSxVQUFVLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDMUQ7QUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDcEMsUUFBUSxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3BDLFFBQVEsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNwQyxRQUFRLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDcEM7QUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUM7QUFDL0MsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFDO0FBQy9DLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksR0FBQztBQUMvQyxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUM7QUFDL0MsS0FBSztBQUNMLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQztBQUNEO0FBQ0EsU0FBUyxVQUFVLENBQUMsSUFBSSxF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SSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFdBQVcsRUFBRTtBQUMxRCxZQUFZLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztBQUNqQyxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQyxTQUFTO0FBQ1QsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLFNBQVMsSUFBRThRLFFBQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEdBQUM7QUFDekM7QUFDQSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEIsQ0FBQztBQUNEO0FBQ0EsU0FBU0EsUUFBTSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUU7QUFDakMsSUFBSSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7QUFDakIsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUM1RSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEUsS0FBSztBQUNMLElBQUksSUFBSSxJQUFJLEdBQUcsQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUNoQyxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFB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RyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNsRixZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNsRixZQUFZLElBQUksR0FBRyxJQUFJLENBQUM7QUFDeEIsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLEtBQUssRUFBRTtBQUNuQixZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNuRixZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNuRixZQUFZLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDekIsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBQztBQUNuRDtBQUNBLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEQsUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUQsUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEQsUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFELEtBQUs7QUFDTCxDQUFDLENBQUM7QUFDRjtBQUNBLFNBQVMsQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDakQsSUFBSSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTztBQUM5QixRQUFRLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTTtBQUMvQixRQUFRLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQzlCO0FBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBRSxPQUFPLElBQUksR0FBQztBQUNyQztBQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQzdCO0FBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzQixJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBRSxPQUFPK08sYUFBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUM7QUFDakU7QUFDQSxJQUFJLElBQUksS0FBSyxHQUFHLENBQUMsSUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUM7QUFDdEU7QUFDQSxJQUFJLElBQUksRUFBRSxHQUFHLENBQUM7QUFDZCxRQUFRLEVBQUUsR0FBRyxDQUFDO0FBQ2QsUUFBUSxFQUFFLEdBQUcsQ0FBQztBQUNkLFFBQVEsTUFBTSxDQUFDO0FBQ2Y7QUFDQSxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRTtBQUM5QixRQUFRLEVBQUUsRUFBRSxDQUFDO0FBQ2IsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBUSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlDLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUUsT0FBTyxJQUFJLEdBQUM7QUFDL0M7QUFDQTtBQUNBLElBQUksSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBQztBQUMxRTtBQUNBLElBQUksSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUM7QUFDakQsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFB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QUksSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQzNEO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDbkQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDbEQ7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQ3BGLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDO0FBQ3JDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDO0FBQ2pDO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ25ELElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDbkQsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNsQztBQUNBO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRyxDQUFDO0FBQ0Q7QUFDQSxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxVQUFVLElBQUksRUFBRTtBQUN6QyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkQsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEQ7QUFDQSxJQUFJLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEUsSUFBSSxJQUFJLFlBQVksR0FBRyxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BFO0FBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3BELFFBQVEsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5QyxRQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUYsUUFBUSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzVGLEtBQUs7QUFDTDtBQUNBLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5RSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUU7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2hELFFBQVEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RELFFBQVEsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUcsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLFlBQVksQ0FBQztBQUN4QixDQUFDLENBQUM7QUFDRjtBQUNBO0FBQ0EsU0FBUyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzlDLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNwQyxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDekMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdkMsU0FBUztBQUNULFFBQVEsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNsQyxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3JDLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLFNBQVM7QUFDVCxLQUFLO0FBQ0wsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNqQyxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3BDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLFNBQVM7QUFDVCxRQUFRLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDakMsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNwQyxZQUFZLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEQsU0FBUztBQUNULEtBQUs7QUFDTCxDQUFDO0FBQ0Q7QUFDQTtBQUNBLFNBQVMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDOUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7QUFDaEI7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2QyxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFD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RSxDQUFDLENBQUMsQ0FBQztBQUNwQyxTQUFhO0FBQ2IsS0FBUztBQUNUO0FBQ0E7QUFDQSxJQUFRQSxJQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsSUFBUUEsSUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0MsSUFBUSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUMxQyxRQUFZLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ2hELFFBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDbEQsS0FBUztBQUNUO0FBQ0EsSUFBUUEsSUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ2hELElBQVFELElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztBQUMxQixJQUFRQSxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDdEM7QUFDQSxJQUFRLEtBQUtBLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM3QyxRQUFZLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFO0FBQ3JDLFlBQWdCLEtBQUssR0FBRyxNQUFNLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUM1QyxTQUFhO0FBQ2I7QUFDQSxRQUFZQyxJQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEQsUUFBWUEsSUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxD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Q0FBQyxDQUFDO0FBQzdDO0FBQ0EsUUFBUUEsSUFBTSxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ2pELFFBQVFBLElBQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDdEUsUUFBUUEsSUFBTSxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQ2pELFFBQVFBLElBQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQzVFO0FBQ0EsUUFBUUEsSUFBTSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7QUFDcEM7QUFDQSxRQUFRLGdCQUFnQixDQUFDLElBQUl3UCw0QkFBZ0IsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDaEksUUFBUSxnQkFBZ0IsQ0FBQyxJQUFJQSw0QkFBZ0IsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDaEk7QUFDQTtBQUNBLFFBQVEsSUFBSSxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUM3QixZQUFZLGdCQUFnQixDQUFDLElBQUlBLDRCQUFnQixDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDeEksWUFBWSxnQkFBZ0IsQ0FBQyxJQUFJQSw0QkFBZ0IsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDekosWUFBWSxnQkFBZ0IsQ0FBQyxJQUFJQSw0QkFBZ0IsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3hJLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUU7QUFDbkMsWUFBWSxnQkFBZ0IsQ0FBQyxJQUFJQSw0QkFBZ0IsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3hJLFlBQVksZ0JBQWdCLENBQUMsSUFBSUEsNEJBQWdCLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3pKLFlBQVksZ0JBQWdCLENBQUMsSUFBSUEsNEJBQWdCLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN4SSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sZ0JBQWdCLENBQUM7QUFDaEMsTUFBSztBQUNMO0FBQ0Esa0NBQUksa0NBQVcsSUFBSSxRQUFRO0FBQzNCLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUM7QUFDL0UsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUU7QUFDdEIsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQy9CLFlBQVksT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQzVCLFNBQVM7QUFDVCxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBRSxPQUFPLElBQUksQ0FBQyxHQUFHLEdBQUM7QUFDdEMsUUFBUSxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztBQUNyQztBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUM7QUFDaEMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDeEIsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0UsU0FBUztBQUNUOzs7RUFsSGtDLG1CQW9IakM7O0FDdklEO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQU0sYUFBYTtJQXdCZixzQkFBVyxDQUFDLEVBQUUsVUFBVSxPQUFPLHNGQUFzRixVQUFVLGNBQWMsYUFBYSxXQUFXO0FBQ3pLLFFBQVFoUCxZQUFLLEtBQUMsQ0FBQyxDQUFDO0FBQ2hCO0FBQ0EsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNyQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO0FBQzlCO0FBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUN6QixRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFDNUIsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztBQUNsQyxRQUFRLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7QUFDdEMsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUM5QixRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0FBQzdCO0FBQ0EsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUMzQyxRQUFRLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUM3QztBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUM7QUFDekMsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHd0Isa0JBQU0sQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDNUM7QUFDQSxRQUFRLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxPQUFPLENBQUMscUJBQXFCLENBQUM7QUFDcEUsUUFBUSxJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztBQUNsQztBQUNBLFFBQVEsSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLFNBQVMsSUFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEdBQUM7QUFDMUUsUUFBUSxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFDO0FBQ25ELFFBQVEsSUFBSSxPQUFPLENBQUMsV0FBVyxJQUFFLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsR0FBQztBQUN4RSxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztBQUMzQztBQUNBLFFBQVFoQyxJQUFNLEtBQUssR0FBRzRELGtCQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHNUIsa0JBQU0sQ0FBQztBQUNwQyxZQUFZLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRTtBQUMzQixZQUFZLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxJQUFJLEtBQUs7QUFDN0MsWUFBWSxnQkFBZ0IsRUFBRTtBQUM5QixnQkFBZ0IsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxTQUFTLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSztBQUNyRixnQkFBZ0IsU0FBUyxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsR0FBRyxLQUFLLElBQUksS0FBSztBQUNoRyxnQkFBZ0IsTUFBTSxFQUFFNEIsa0JBQU07QUFDOUIsZ0JBQWdCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztBQUNyQyxnQkFBZ0IsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXLElBQUksS0FBSztBQUN6RCxnQkFBZ0IsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLElBQUksS0FBSztBQUN2RCxhQUFhO0FBQ2IsWUFBWSxtQkFBbUIsRUFBRTtBQUNqQyxnQkFBZ0IsT0FBTyxFQUFFLE9BQU8sQ0FBQyxjQUFjLEtBQUssU0FBUztBQUM3RCxvQkFBb0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3RFLHFCQUFxQixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUN0QyxnQkFBZ0IsTUFBTSxFQUFFQSxrQkFBTTtBQUM5QixnQkFBZ0IsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLGFBQWEsSUFBSSxFQUFFLElBQUksS0FBSztBQUM3RCxnQkFBZ0IsR0FBRyxFQUFFLEtBQUs7QUFDMUIsZ0JBQWdCLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVSxJQUFJLEtBQUs7QUFDdkQsYUFBYTtBQUNiLFlBQVksaUJBQWlCLEVBQUUsT0FBTyxDQUFDLGlCQUFpQjtBQUN4RCxTQUFTLEVBQUUsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ2xDOzs7O3dEQUFLO0FBQ0w7QUFDQSw0QkFBSSx3QkFBTzs7QUFBQztBQUNaLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJOE4saUJBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xFLFFBQVEsSUFBSSxDQUFDLGlCQUFpQixXQUFFLEdBQUcsRUFBSztBQUN4QyxZQUFZLElBQUksR0FBRyxFQUFFO0FBQ3JCLGdCQUFnQm5SLE1BQUksQ0FBQyxJQUFJLENBQUMsSUFBSWtSLHNCQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvQyxnQkFBZ0IsT0FBTztBQUN2QixhQUFhO0FBQ2I7QUFDQSxZQUFZelIsSUFBTSxJQUFJLFdBQVcsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUNsRixZQUFZLElBQUlPLE1BQUksQ0FBQyxzQkFBc0IsSUFBSUEsTUFBSSxDQUFDLGVBQWUsS0FBS0EsTUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDMUcsZ0JBQWdCLElBQUksQ0FBQyxjQUFjLEdBQUdBLE1BQUksQ0FBQyxlQUFlLENBQUM7QUFDM0QsZ0JBQWdCQSxNQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztBQUMxQyxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsWUFBWUEsTUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJbVIsaUJBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMvQyxTQUFTLENBQUMsQ0FBQztBQUNYLE1BQUs7QUFDTDtBQUNBLDRCQUFJLHdCQUFNLEdBQUcsT0FBTztBQUNwQixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCLE1BQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUFJLDRCQUFRLElBQUksb0JBQW9COztBQUFDO0FBQ3JDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDMUIsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUlBLGlCQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRSxRQUFRLElBQUksQ0FBQyxpQkFBaUIsV0FBRSxHQUFHLEVBQUs7QUFDeEMsWUFBWSxJQUFJLEdBQUcsRUFBRTtBQUNyQixnQkFBZ0JuUixNQUFJLENBQUMsSUFBSSxDQUFDLElBQUlrUixzQkFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0MsZ0JBQWdCLE9BQU87QUFDdkIsYUFBYTtBQUNiO0FBQ0EsWUFBWXpSLElBQU0sSUFBSSxXQUFXLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDakYsWUFBWSxJQUFJTyxNQUFJLENBQUMsc0JBQXNCLElBQUlBLE1BQUksQ0FBQyxlQUFlLEtBQUtBLE1BQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFO0FBQzFHLGdCQUFnQixJQUFJLENBQUMsY0FBYyxHQUFHQSxNQUFJLENBQUMsZUFBZSxDQUFDO0FBQzNELGdCQUFnQkEsTUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7QUFDMUMsYUFBYTtBQUNiLFlBQVlBLE1BQUksQ0FBQyxJQUFJLENBQUMsSUFBSW1SLGlCQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDL0MsU0FBUyxDQUFDLENBQUM7QUFDWDtBQUNBLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBSSw0REFBd0IsU0FBUyxVQUFVLFFBQVEsb0JBQW9CO0FBQzNFLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsaUNBQWlDLEVBQUUsWUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNuRyxRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCLE1BQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQUksa0RBQW1CLFNBQVMsVUFBVSxRQUFRLG1DQUFtQztBQUNyRixRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLDRCQUE0QixFQUFFLFlBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDOUYsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQixNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUFJLDhDQUFpQixTQUFTLFVBQVUsS0FBSyxVQUFVLE1BQU0sVUFBVSxRQUFRLG1DQUFtQztBQUNsSCxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFO0FBQ3BELFlBQVksTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFO0FBQzNCLHVCQUFZLFNBQVM7QUFDckIsbUJBQVksS0FBSztBQUNqQixvQkFBWSxNQUFNO0FBQ2xCLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNyQixRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCLE1BQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBSSxnREFBa0IsUUFBUSxrQkFBa0I7O0FBQUM7QUFDakQsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztBQUM3QixRQUFRMVIsSUFBTSxPQUFPLEdBQUdnQyxrQkFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDdkQsUUFBUWhDLElBQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDaEMsUUFBUSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRTtBQUN0QyxZQUFZLE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUNJLG1CQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFbVIsd0JBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN2SCxZQUFZLE9BQU8sQ0FBQyxPQUFPLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDO0FBQ2hGLFNBQVMsTUFBTTtBQUNmLFlBQVksT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hELFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUksSUFBSSxDQUFDLHNCQUFpQixPQUFPLFlBQUcsR0FBRyxFQUFFLE1BQU0sRUFBSztBQUMzRSxZQUFZLElBQUloUixNQUFJLENBQUMsUUFBUSxLQUFLLE1BQU0sSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUU7QUFDL0QsZ0JBQWdCLE9BQU87QUFDdkIsYUFBYTtBQUNiO0FBQ0EsWUFBWUEsTUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDaEM7QUFDQSxZQUFZLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxjQUFjLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQ0EsTUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNqRixrQkFBZ0JBLE1BQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQ0EsTUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBQztBQUMvRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVlBLE1BQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFJQSxNQUFJLENBQUMsc0JBQWlCLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNyRixZQUFZLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxQixTQUFTLENBQUMsQ0FBQztBQUNYLE1BQUs7QUFDTDtBQUNBLDRCQUFJLHFDQUFrQjtBQUN0QixRQUFRLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUM1QixNQUFLO0FBQ0w7QUFDQSw0QkFBSSw4QkFBUyxJQUFJLFFBQVEsUUFBUSxrQkFBa0I7O0FBQUM7QUFDcEQsUUFBUVAsSUFBTSxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLFVBQVUsR0FBRyxZQUFZLENBQUM7QUFDaEUsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDaEMsUUFBUUEsSUFBTSxNQUFNLEdBQUc7QUFDdkIsWUFBWSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7QUFDM0IsWUFBWSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7QUFDekIsWUFBWSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07QUFDL0IsWUFBWSxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXO0FBQ3pDLFlBQVksT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO0FBQ2pDLFlBQVksUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO0FBQ25DLFlBQVksTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFO0FBQzNCLFlBQVksVUFBVSxFQUFFSSxtQkFBTyxDQUFDLGdCQUFnQjtBQUNoRCxZQUFZLGtCQUFrQixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCO0FBQzNELFlBQVksU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO0FBQ3JDLFNBQVMsQ0FBQztBQUNWO0FBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLFlBQUcsR0FBRyxFQUFFLElBQUksRUFBSztBQUN2RSxZQUFZLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUNoQyxZQUFZLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0FBQ3BDO0FBQ0EsWUFBWSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDOUIsZ0JBQWdCLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RDLGFBQWE7QUFDYjtBQUNBLFlBQVksSUFBSSxHQUFHLEVBQUU7QUFDckIsZ0JBQWdCLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDLGFBQWE7QUFDYjtBQUNBLFlBQVksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUVHLE1BQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sS0FBSyxZQUFZLENBQUMsQ0FBQztBQUNsRjtBQUNBLFlBQVksT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEMsU0FBUyxDQUFDLENBQUM7QUFDWCxNQUFLO0FBQ0w7QUFDQSw0QkFBSSxnQ0FBVSxJQUFJLFFBQVE7QUFDMUIsUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDMUIsWUFBWSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ2xDLFlBQVksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ2hDLFNBQVM7QUFDVCxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQzVCLE1BQUs7QUFDTDtBQUNBLDRCQUFJLGtDQUFXLElBQUksUUFBUTtBQUMzQixRQUFRLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0FBQ2hDLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3pGLE1BQUs7QUFDTDtBQUNBLDRCQUFJLGdDQUFXO0FBQ2YsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUM3QixRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM1RSxNQUFLO0FBQ0w7QUFDQSw0QkFBSSxrQ0FBWTtBQUNoQixRQUFRLE9BQU95QixrQkFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQ3pDLFlBQVksSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO0FBQzNCLFlBQVksSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLO0FBQzVCLFNBQVMsQ0FBQyxDQUFDO0FBQ1gsTUFBSztBQUNMO0FBQ0EsNEJBQUksMENBQWdCO0FBQ3BCLFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckI7OztFQTVTNEI2UCxzQkE2UzNCOztBQzdXRDtBQUNBO0FBRUEsNkJBQWVrQix3QkFBWSxDQUFDO0FBQzVCLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztBQUNqRCxJQUFJLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7QUFDekQsQ0FBQyxDQUFDLENBQUM7O0FDTkg7QUFDQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQU0sV0FBVztJQXdCYixvQkFBVyxDQUFDLEVBQUUsVUFBVSxPQUFPLG1GQUFtRixVQUFVLGNBQWMsYUFBYSxXQUFXO0FBQ3RLLFFBQVF2UyxZQUFLLEtBQUMsQ0FBQyxDQUFDO0FBQ2hCLFFBQVEsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDckIsUUFBUSxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztBQUNyQyxRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztBQUMvQztBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7QUFDNUIsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUN6QixRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFDNUIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUN4QixRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0FBQzdCO0FBQ0EsUUFBUSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQy9COzs7O29EQUFLO0FBQ0w7QUFDQSwwQkFBSSxzQkFBSyxjQUFjLGdCQUFnQixlQUFlLGVBQWU7O0FBQUM7QUFDdEUsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztBQUM3QixRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSWtSLGlCQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRTtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztBQUNwQztBQUNBLFFBQVFGLG9CQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRUQsd0JBQVksQ0FBQyxLQUFLLENBQUMsWUFBRyxHQUFHLEVBQUUsS0FBSyxFQUFLO0FBQzFHLFlBQVloUixNQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUNoQyxZQUFZLElBQUksR0FBRyxFQUFFO0FBQ3JCLGdCQUFnQkEsTUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJa1Isc0JBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9DLGFBQWEsTUFBTSxJQUFJLEtBQUssRUFBRTtBQUM5QixnQkFBZ0JsUixNQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNuQyxnQkFBZ0IsSUFBSSxjQUFjLEVBQUU7QUFDcEMsb0JBQW9CQSxNQUFJLENBQUMsV0FBVyxHQUFHLGNBQWMsQ0FBQztBQUN0RCxpQkFBaUI7QUFDakIsZ0JBQWdCLElBQUksZUFBZSxFQUFFO0FBQ3JDLG9CQUFvQixlQUFlLEVBQUUsQ0FBQztBQUN0QyxpQkFBaUI7QUFDakIsZ0JBQWdCQSxNQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDdEMsYUFBYTtBQUNiLFNBQVMsQ0FBQyxDQUFDO0FBQ1gsTUFBSztBQUNMO0FBQ0EsMEJBQUkscUNBQWtCO0FBQ3RCLFFBQVEsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQzVCLE1BQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUFJLG9DQUFZLE9BQU8sNENBQTRDOztBQUFDO0FBQ3BFLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFO0FBQ3pDLFlBQVksT0FBTyxJQUFJLENBQUM7QUFDeEIsU0FBUztBQUNULFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztBQUN2QyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsY0FBUSxFQUFFQSxNQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2RSxRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCLE1BQUs7QUFDTDtBQUNBLDBCQUFJLDRDQUFpQjtBQUNyQixRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtBQUN0QixZQUFZLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2xELFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJbVIsaUJBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0YsU0FBUztBQUNULE1BQUs7QUFDTDtBQUNBLDBCQUFJLHdCQUFNLEdBQUcsT0FBTztBQUNwQixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCLE1BQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUFJLDBDQUFlLFdBQVcsZUFBZTs7QUFBQztBQUM5QyxRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVExUixJQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDZ1QsOEJBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDNUU7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLDBCQUEwQixDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsUUFBUWhULElBQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxHQUFHLFdBQUUsS0FBSyxXQUFLTyxNQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEtBQUUsQ0FBQyxDQUFDO0FBQ2pHO0FBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUkwUyxnQ0FBaUIsRUFBRSxDQUFDO0FBQ3BELFFBQVEsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5RSxRQUFRLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRXJQLGtCQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbkYsUUFBUSxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFQSxrQkFBTSxDQUFDLENBQUM7QUFDbkYsUUFBUSxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUVBLGtCQUFNLEVBQUVBLGtCQUFNLENBQUMsQ0FBQztBQUN4RjtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO0FBQy9CLFlBQVksSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUN4QyxZQUFZLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztBQUNyQyxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSThOLGlCQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxjQUFjLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JGLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsTUFBSztBQUNMO0FBQ0EsMEJBQUksOEJBQVU7QUFDZCxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDakUsWUFBWSxPQUFPO0FBQ25CLFNBQVM7QUFDVDtBQUNBLFFBQVExUixJQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7QUFDakQsUUFBUUEsSUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQztBQUM5QjtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7QUFDaEMsWUFBWSxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzlHLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7QUFDbEMsWUFBWSxJQUFJLENBQUMsY0FBYyxHQUFHa1QseUJBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUUsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUMzQixZQUFZLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSXRCLG1CQUFPLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JFLFlBQVksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDM0QsU0FBUztBQUNUO0FBQ0EsUUFBUSxLQUFLNVIsSUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNwQyxZQUFZQSxJQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUN6QyxnQkFBZ0IsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7QUFDdEMsZ0JBQWdCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUM1QyxhQUFhO0FBQ2IsU0FBUztBQUNULE1BQUs7QUFDTDtBQUNBLDBCQUFJLDhCQUFTLElBQUksUUFBUSxRQUFRLGtCQUFrQjtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFO0FBQ3RFLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN4RCxZQUFZLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQzlCLFlBQVksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNCLFNBQVMsTUFBTTtBQUNmLFlBQVksSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7QUFDbkMsWUFBWSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0IsU0FBUztBQUNULE1BQUs7QUFDTDtBQUNBLDBCQUFJLDBDQUFvQjtBQUN4QixRQUFRLE9BQU87QUFDZixZQUFZLElBQUksRUFBRSxPQUFPO0FBQ3pCLFlBQVksR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRztBQUNqQyxZQUFZLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztBQUN6QyxTQUFTLENBQUM7QUFDVixNQUFLO0FBQ0w7QUFDQSwwQkFBSSwwQ0FBZ0I7QUFDcEIsUUFBUSxPQUFPLEtBQUssQ0FBQztBQUNyQjs7O0VBOU0wQjZSLHNCQStNekI7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVMsMEJBQTBCLENBQUMsTUFBTSw2QkFBNkI7QUFDOUUsSUFBSTlSLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQztBQUN4QixJQUFJQSxJQUFJLElBQUksR0FBRyxRQUFRLENBQUM7QUFDeEIsSUFBSUEsSUFBSSxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUM7QUFDekIsSUFBSUEsSUFBSSxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUM7QUFDekI7QUFDQSxJQUFJLHVCQUFvQiwrQkFBTSxFQUFFO0FBQ2hDLFFBRFNDLElBQU07O1FBQ1AsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QyxRQUFRLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsUUFBUSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLFFBQVEsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QyxLQUFLO0FBQ0w7QUFDQSxJQUFJQSxJQUFNLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzNCLElBQUlBLElBQU0sRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFDM0IsSUFBSUEsSUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbEMsSUFBSUEsSUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDckUsSUFBSUEsSUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDMUM7QUFDQSxJQUFJLE9BQU8sSUFBSW1ULDJCQUFlO0FBQzlCLFlBQVksSUFBSTtBQUNoQixZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDdkQsWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUN6RCxDQUFDOztBQ2hURDtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFNLFdBQVc7SUFTYixvQkFBVyxDQUFDLEVBQUUsVUFBVSxPQUFPLDRCQUE0QixVQUFVLGNBQWMsYUFBYSxXQUFXO0FBQy9HLFFBQVEzUyxnQkFBSyxPQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBQ3RELFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDOUIsUUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztBQUM1QixRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQy9COzs7O29EQUFLO0FBQ0w7QUFDQSwwQkFBSSx3QkFBTzs7QUFBQztBQUNaLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7QUFDN0IsUUFBUVIsSUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUNyQztBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7QUFDdkIsUUFBUSx1QkFBa0IsT0FBTyxDQUFDLDZCQUFJLEVBQUU7QUFDeEMsWUFEYUEsSUFBTTs7WUFDUCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUV1Uix3QkFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BHLFNBQVM7QUFDVDtBQUNBLFFBQVE2QixvQkFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLFlBQUcsR0FBRyxFQUFFLEtBQUssRUFBSztBQUM1QyxZQUFZN1MsTUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDaEMsWUFBWSxJQUFJLEdBQUcsRUFBRTtBQUNyQixnQkFBZ0JBLE1BQUksQ0FBQyxJQUFJLENBQUMsSUFBSWtSLHNCQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvQyxhQUFhLE1BQU0sSUFBSSxLQUFLLEVBQUU7QUFDOUIsZ0JBQWdCbFIsTUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDbkMsZ0JBQWdCQSxNQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDdkM7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCQSxNQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsY0FBUTtBQUM3RCxvQkFBb0JBLE1BQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDOUMsaUJBQWlCLENBQUMsQ0FBQztBQUNuQjtBQUNBLGdCQUFnQixJQUFJQSxNQUFJLENBQUMsR0FBRyxFQUFFO0FBQzlCLG9CQUFvQkEsTUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN0QyxpQkFBaUI7QUFDakI7QUFDQSxnQkFBZ0JBLE1BQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUN0QyxhQUFhO0FBQ2IsU0FBUyxDQUFDLENBQUM7QUFDWCxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBSSwwQkFBUTtBQUNaLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ3hCLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMvQixTQUFTO0FBQ1QsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQUksd0JBQU87QUFDWCxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtBQUN4QixZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDOUIsU0FBUztBQUNULE1BQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQUksc0JBQUssT0FBTyxVQUFVO0FBQzFCLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ3hCLFlBQVlQLElBQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO0FBQ3RELFlBQVksSUFBSSxPQUFPLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUNwRixnQkFBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJeVIsc0JBQVUsQ0FBQyxJQUFJNEIsMkJBQWUsZ0JBQVksSUFBSSxDQUFDLE1BQU0sSUFBSSw2REFBeUQsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUMsY0FBUSxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxvQkFBZ0IsQ0FBQyxDQUFDLENBQUM7QUFDck4sYUFBYSxRQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLE9BQU8sR0FBQztBQUNwRCxTQUFTO0FBQ1QsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUFJLGdDQUFXO0FBQ2YsUUFBUSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDMUIsTUFBSztBQUNMO0FBQ0EsMEJBQUksd0JBQU0sR0FBRyxPQUFPO0FBQ3BCLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFFLFNBQU87QUFDN0IsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUN2QixRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQixRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtBQUN4QixZQUFZLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDOUIsWUFBWSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNsRCxTQUFTO0FBQ1QsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBSSw4QkFBVTtBQUNkLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRTtBQUMvRSxZQUFZLE9BQU87QUFDbkIsU0FBUztBQUNUO0FBQ0EsUUFBUXJULElBQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztBQUNqRCxRQUFRQSxJQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDO0FBQzlCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtBQUNoQyxZQUFZLElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDOUcsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtBQUNsQyxZQUFZLElBQUksQ0FBQyxjQUFjLEdBQUdrVCx5QkFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxRSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO0FBQzNCLFlBQVksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJdEIsbUJBQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckUsWUFBWSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUMzRCxTQUFTLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO0FBQ3ZDLFlBQVksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDM0QsWUFBWSxFQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1RixTQUFTO0FBQ1Q7QUFDQSxRQUFRLEtBQUs1UixJQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ3BDLFlBQVlBLElBQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsWUFBWSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssUUFBUSxFQUFFO0FBQ3pDLGdCQUFnQixJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztBQUN0QyxnQkFBZ0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQzVDLGFBQWE7QUFDYixTQUFTO0FBQ1QsTUFBSztBQUNMO0FBQ0EsMEJBQUksa0NBQVk7QUFDaEIsUUFBUSxPQUFPO0FBQ2YsWUFBWSxJQUFJLEVBQUUsT0FBTztBQUN6QixZQUFZLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtBQUMzQixZQUFZLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztBQUN6QyxTQUFTLENBQUM7QUFDVixNQUFLO0FBQ0w7QUFDQSwwQkFBSSwwQ0FBZ0I7QUFDcEIsUUFBUSxPQUFPLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUNoRDs7O0VBdkowQixjQXdKekI7O0FDeE1EO0FBQ0E7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQU0sWUFBWTtHQWFkLHFCQUFXLENBQUMsRUFBRSxVQUFVLE9BQU8sNkJBQTZCLFVBQVUsY0FBYyxhQUFhLFdBQVc7QUFDaEgsUUFBUVEsZ0JBQUssT0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUN0RDtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRTtBQUNsQyxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSWlSLHNCQUFVLENBQUMsSUFBSTRCLDJCQUFlLGVBQVksS0FBTSxJQUFJLEVBQUUseUNBQXlDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0gsU0FBUyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDO0FBQzFGLGdCQUFnQixPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksV0FBQyxZQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxXQUFDLFlBQUssT0FBTyxDQUFDLEtBQUssV0FBUSxJQUFDLENBQUMsRUFBRTtBQUMxSCxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSTVCLHNCQUFVLENBQUMsSUFBSTRCLDJCQUFlLGVBQVksS0FBTSxJQUFJLEVBQUUsNkVBQTZFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakssU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLE9BQU8sQ0FBQyxPQUFPLElBQUksT0FBTyxPQUFPLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRTtBQUNyRSxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSTVCLHNCQUFVLENBQUMsSUFBSTRCLDJCQUFlLGVBQVksS0FBTSxJQUFJLEVBQUUscURBQXFELENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekksU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtBQUM3QixZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSTVCLHNCQUFVLENBQUMsSUFBSTRCLDJCQUFlLGVBQVksS0FBTSxJQUFJLEVBQUUsb0NBQW9DLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEgsU0FBUyxNQUFNLElBQUksT0FBTyxPQUFPLENBQUMsTUFBTSxLQUFLLFFBQVEsSUFBSSxFQUFFLE9BQU8sQ0FBQyxNQUFNLFlBQVluVCxrQkFBTSxDQUFDLGlCQUFpQixDQUFDLEVBQUU7QUFDaEgsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUl1UixzQkFBVSxDQUFDLElBQUk0QiwyQkFBZSxlQUFZLEtBQU0sSUFBSSxFQUFFLGlJQUFpSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JOLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDL0IsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEtBQUssU0FBUyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQzlFOzs7O3FEQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQUksd0JBQU87QUFDWCxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQzVCLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDMUIsWUFBWSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLFlBQVluVCxrQkFBTSxDQUFDLGlCQUFpQjtBQUNsRixnQkFBZ0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNO0FBQ25DLGdCQUFnQkEsa0JBQU0sQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDcEUsU0FBUztBQUNULFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUN2QyxRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDekM7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLEVBQUU7QUFDMUMsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUl1UixzQkFBVSxDQUFDLElBQUksS0FBSyxDQUFDLHlEQUF5RCxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVHLFlBQVksT0FBTztBQUNuQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsV0FBVztBQUMvQixZQUFZLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ2pDLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUN0QyxTQUFTLENBQUM7QUFDVjtBQUNBLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxXQUFXO0FBQ2hDLFlBQVksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQy9CLGdCQUFnQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDL0IsZ0JBQWdCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQ3RDLGFBQWE7QUFDYixTQUFTLENBQUM7QUFDVjtBQUNBLFFBQVEsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQzlCLE1BQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBSSxrQ0FBWTtBQUNoQixRQUFRLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUMzQixNQUFLO0FBQ0w7QUFDQSwyQkFBSSx3QkFBTSxHQUFHLE9BQU87QUFDcEIsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUN2QixRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQixRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUN6QixZQUFZLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUM7QUFDMUMsU0FBUztBQUNULE1BQUs7QUFDTDtBQUNBLDJCQUFJLGdDQUFXO0FBQ2YsUUFBUSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDckIsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUFJLDhCQUFVO0FBQ2QsUUFBUTFSLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztBQUMzQixRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLEtBQUssRUFBRTtBQUM5QyxZQUFZLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDM0MsWUFBWSxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQzFCLFNBQVM7QUFDVCxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNoRCxZQUFZLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDN0MsWUFBWSxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQzFCLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUUsSUFBRSxTQUFPO0FBQ2pEO0FBQ0EsUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUUsU0FBTztBQUN6RDtBQUNBLFFBQVFDLElBQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztBQUNqRCxRQUFRQSxJQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDO0FBQzlCO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtBQUNoQyxZQUFZLElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDOUcsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtBQUNsQyxZQUFZLElBQUksQ0FBQyxjQUFjLEdBQUdrVCx5QkFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxRSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO0FBQzNCLFlBQVksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJdEIsbUJBQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDM0YsU0FBUyxNQUFNLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDNUMsWUFBWSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbEUsU0FBUztBQUNUO0FBQ0EsUUFBUSxLQUFLNVIsSUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNwQyxZQUFZQSxJQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUN6QyxnQkFBZ0IsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7QUFDdEMsZ0JBQWdCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUM1QyxhQUFhO0FBQ2IsU0FBUztBQUNULE1BQUs7QUFDTDtBQUNBLDJCQUFJLDBDQUFvQjtBQUN4QixRQUFRLE9BQU87QUFDZixZQUFZLElBQUksRUFBRSxRQUFRO0FBQzFCLFlBQVksV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO0FBQ3pDLFNBQVMsQ0FBQztBQUNWLE1BQUs7QUFDTDtBQUNBLDJCQUFJLDBDQUFnQjtBQUNwQixRQUFRLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUM3QixNQUFLO0FBQ0w7QUFDQSwyQkFBSSwwREFBd0I7QUFDNUIsUUFBUSx1QkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sMEJBQUMsRUFBRTtBQUNqRSxZQURhQSxJQUFNOztXQUNQLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUUsT0FBTyxJQUFJLEdBQUM7QUFDaEQsU0FBUztBQUNULFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckI7OztFQTlLMkIsY0ErSzFCOztBQzNPRDtBQUNBO0FBNEZBO0FBQ0E7QUFDQUEsSUFBTSxXQUFXLEdBQUc7QUFDcEIsWUFBSXNULGdCQUFNO0FBQ1YsWUFBSXZGLGdCQUFNO0FBQ1YsSUFBSSxZQUFZLEVBQUV3RixtQkFBUztBQUMzQixhQUFJQyxhQUFPO0FBQ1gsV0FBSUMsV0FBSztBQUNULFdBQUlDLFdBQUs7QUFDVCxZQUFJQyxZQUFNO0FBQ1YsQ0FBQyxDQUFDO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQWEsTUFBTSxHQUFHLFNBQVMsRUFBRSxVQUFVLGFBQWEsdUJBQXVCLFVBQVUsY0FBYyxhQUFhLFdBQVc7QUFDL0gsSUFBSTNULElBQU0sTUFBTSxHQUFHLElBQUksV0FBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsYUFBYSxRQUFRLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUM1RztBQUNBLElBQUksSUFBSSxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRTtBQUMxQixRQUFRLE1BQU0sSUFBSSxLQUFLLGdDQUE2QixFQUFFLHFCQUFlLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDbEYsS0FBSztBQUNMO0FBQ0EsSUFBSTRULG1CQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDekUsSUFBSSxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDLENBQUM7QUFDRjtBQUNPNVQsSUFBTSxPQUFPLEdBQUcsVUFBVSxJQUFJLFVBQVU7QUFDL0MsSUFBSSxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3QixDQUFDLENBQUM7QUFDRjtBQUNPQSxJQUFNLE9BQU8sR0FBRyxVQUFVLElBQUksVUFBVSxJQUFJLGlCQUFpQjtBQUNwRSxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0IsQ0FBQyxDQUFDOztBQ3BJRjtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBQ0EsU0FBUyxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFO0FBQzlDLElBQUlBLElBQU0sQ0FBQyxHQUFHa04sb0JBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNoQyxJQUFJMkcscUJBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLElBQUlDLGlCQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxFQUFFLFNBQVMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekUsSUFBSSxPQUFPQyxvQkFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbkYsQ0FBQztBQUNEO0FBQ0EsU0FBUyxvQkFBb0IsQ0FBQyxNQUFNLGtCQUFrQixXQUFXLDZCQUE2QixRQUFRLFVBQVU7QUFDaEgsSUFBSSxJQUFJLE1BQU0sRUFBRTtBQUNoQixRQUFRLHVCQUFzQiwrQkFBTSxFQUFFO0FBQ3RDLFlBRGEvVCxJQUFNOztZQUNQQSxJQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDL0MsWUFBWSxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGdCQUFnQixFQUFFO0FBQ3ZGLGdCQUFnQixPQUFPLElBQUksQ0FBQztBQUM1QixhQUFhO0FBQ2IsU0FBUztBQUNULEtBQUssTUFBTTtBQUNYLFFBQVEsS0FBS0EsSUFBTSxHQUFHLElBQUksV0FBVyxFQUFFO0FBQ3ZDLFlBQVlBLElBQU1rUCxPQUFLLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNDLFlBQVksSUFBSUEsT0FBSyxDQUFDLE1BQU0sS0FBSyxRQUFRLElBQUlBLE9BQUssQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLEVBQUU7QUFDOUUsZ0JBQWdCLE9BQU8sSUFBSSxDQUFDO0FBQzVCLGFBQWE7QUFDYixTQUFTO0FBQ1QsS0FBSztBQUNMLElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQztBQUNEO0FBQ0EsU0FBZ0IscUJBQXFCLENBQUMsV0FBVztBQUNqRCw0QkFBNEIsV0FBVztBQUN2Qyw0QkFBNEIsZ0JBQWdCO0FBQzVDLDRCQUE0QixhQUFhO0FBQ3pDLDRCQUE0QixNQUFNO0FBQ2xDLDRCQUE0QixTQUFTLGFBQWE7QUFDbEQ7QUFDQSxJQUFJbFAsSUFBTSxVQUFVLEdBQUcsb0JBQW9CLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsRyxJQUFJQSxJQUFNLG1CQUFtQixHQUFHLFNBQVMsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0FBQ2hFLElBQUlBLElBQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLG1CQUFtQixFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3hGO0FBQ0EsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzlCLElBQUlBLElBQU0scUJBQXFCLEdBQUcsRUFBRSxDQUFDO0FBQ3JDLElBQUksdUJBQXFCLGdDQUFPLEVBQUU7QUFDbEMsUUFEU0EsSUFBTTs7UUFDUCxxQkFBcUIsQ0FBQyxJQUFJLENBQUM7QUFDbkMsWUFBWSxhQUFhLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHO0FBQ3RELFlBQVksWUFBWSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMscUJBQXFCO0FBQzNELGdCQUFnQixXQUFXO0FBQzNCLGdCQUFnQixnQkFBZ0I7QUFDaEMsZ0JBQWdCLFdBQVcsQ0FBQyxNQUFNO0FBQ2xDLGdCQUFnQixNQUFNLENBQUMsYUFBYTtBQUNwQyxnQkFBZ0IsTUFBTSxDQUFDLG1CQUFtQjtBQUMxQyxnQkFBZ0IsTUFBTSxDQUFDLEtBQUs7QUFDNUIsZ0JBQWdCLE1BQU07QUFDdEIsZ0JBQWdCLFNBQVM7QUFDekIsZ0JBQWdCLG1CQUFtQjtBQUNuQyxnQkFBZ0IsaUJBQWlCLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDeEUsU0FBUyxDQUFDLENBQUM7QUFDWCxLQUFLO0FBQ0w7QUFDQSxJQUFJQSxJQUFNLE1BQU0sR0FBRywwQkFBMEIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBQ3JFO0FBQ0E7QUFDQSxJQUFJLEtBQUtBLElBQU0sT0FBTyxJQUFJLE1BQU0sRUFBRTtBQUNsQyxRQUFRLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLFdBQUUsY0FBYyxFQUFLO0FBQ3BELFlBQVlBLElBQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUM7QUFDbkQsWUFBWUEsSUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNqRyxZQUFZLE9BQU8sQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDbEQsWUFBWSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLEVBQUU7QUFDL0MsZ0JBQWdCLE9BQU8sQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUNwRSxhQUFhO0FBQ2IsWUFBWSxPQUFPLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNsQyxTQUFTLENBQUMsQ0FBQztBQUNYLEtBQUs7QUFDTCxJQUFJLE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUM7QUFDRDtBQUNBLFNBQWdCLG9CQUFvQixDQUFDLFdBQVc7QUFDaEQsNEJBQTRCLGdCQUFnQjtBQUM1Qyw0QkFBNEIsWUFBWTtBQUN4Qyw0QkFBNEIsYUFBYTtBQUN6Qyw0QkFBNEIsTUFBTTtBQUNsQyw0QkFBNEIsY0FBYztBQUMxQyw0QkFBNEIsaUJBQWlCLG9DQUFvQztBQUNqRixJQUFJQSxJQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDdEIsSUFBSUEsSUFBTSxlQUFlLEdBQUcsY0FBYyxDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQy9FLElBQUlBLElBQU0sZUFBZSxHQUFHLEVBQUUsQ0FBQztBQUMvQixJQUFJLHVCQUErQixNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLDBCQUFDLEVBQUU7QUFDN0UsUUFEU0EsSUFBTTs7UUFDUCxlQUFlLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztBQUNsRSxLQUFLO0FBQ0wsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3RDO0FBQ0EsMkJBQTZDO0FBQzdDLFFBRFNBLElBQU07O1FBQ1BBLElBQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUMsb0JBQW9CO0FBQ3pFLGdCQUFnQixlQUFlLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDO0FBQzNELGdCQUFnQixnQkFBZ0I7QUFDaEMsZ0JBQWdCLFNBQVMsQ0FBQyxXQUFXO0FBQ3JDLGdCQUFnQixTQUFTLENBQUMsZ0JBQWdCO0FBQzFDLGdCQUFnQixNQUFNLENBQUMsTUFBTTtBQUM3QixnQkFBZ0IsTUFBTSxDQUFDLE1BQU07QUFDN0IsZ0JBQWdCLE1BQU0sQ0FBQyxlQUFlO0FBQ3RDLGdCQUFnQixXQUFXLENBQUMsQ0FBQztBQUM3QjtBQUNBLFFBQVEsS0FBS0EsSUFBTSxPQUFPLElBQUksYUFBYSxFQUFFO0FBQzdDLFlBQVlBLElBQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzNFLFlBQVlBLElBQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN4RCxZQUFZLFlBQVksQ0FBQyxJQUFJLFdBQUUsQ0FBQyxFQUFFLENBQUMsRUFBSztBQUN4QztBQUNBO0FBQ0EsZ0JBQWdCQSxJQUFNLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQztBQUNwRSxnQkFBZ0IsSUFBSSxnQkFBZ0IsRUFBRTtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQkEsSUFBTSxPQUFPLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUM3RSxvQkFBb0JBLElBQU0sT0FBTyxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDN0Usb0JBQW9CUyxrQkFBTSxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6QyxvQkFBb0JBLGtCQUFNLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLG9CQUFvQixPQUFPLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDN0MsaUJBQWlCLE1BQU07QUFDdkI7QUFDQTtBQUNBLG9CQUFvQixPQUFPLENBQUMsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQztBQUMzRCxpQkFBaUI7QUFDakIsYUFBYSxDQUFDLENBQUM7QUFDZixZQUFZLDJCQUE0QiwyQ0FBWSxFQUFFO0FBQ3RELGdCQURpQlQsSUFBTTs7Z0JBQ1AsY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNuRCxhQUFhO0FBQ2IsU0FBUztBQUNUOztJQXRDSSwyQkFBd0IsOENBQWUsU0FzQ3RDO0FBQ0w7QUFDQTtBQUNBLHdDQUFvQztBQUNwQyxRQUFRLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLFdBQUUsY0FBYyxFQUFLO0FBQ3RELFlBQVlBLElBQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUM7QUFDbkQsWUFBWUEsSUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2pELFlBQVlBLElBQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDM0QsWUFBWUEsSUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNqRyxZQUFZLE9BQU8sQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDbEQsWUFBWSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLEVBQUU7QUFDL0MsZ0JBQWdCLE9BQU8sQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUNwRSxhQUFhO0FBQ2IsWUFBWSxPQUFPLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNsQyxTQUFTLENBQUMsQ0FBQztBQUNYOztJQVpJLEtBQUtBLElBQU0sU0FBUyxJQUFJLE1BQU0sc0JBWTdCO0FBQ0wsSUFBSSxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDO0FBQ0Q7QUFDTyxTQUFTLG1CQUFtQixDQUFDLFdBQVcsZUFBZSxNQUFNLE9BQU87QUFDM0UsSUFBSUEsSUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixFQUFFLENBQUMsR0FBRyxXQUFFLEVBQUUsRUFBSztBQUM3RCxRQUFRLE9BQU8sV0FBVyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMzQyxLQUFLLENBQUMsQ0FBQztBQUNQO0FBQ0EsSUFBSUEsSUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3RCO0FBQ0EsSUFBSUEsSUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLElBQUksS0FBS0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzNDLFFBQVFDLElBQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixRQUFRQSxJQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUM7QUFDakQsUUFBUSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ2hDLFlBQVksU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNyQyxZQUFZLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDckQsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQztBQUNEO0FBQ0EsU0FBUyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMzQixJQUFJQSxJQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ3pCLElBQUlBLElBQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDekIsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsV0FBVyxNQUFNLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0SixDQUFDO0FBQ0Q7QUFDQSxTQUFTLDBCQUEwQixDQUFDLEtBQUssRUFBRTtBQUMzQztBQUNBO0FBQ0EsSUFBSUEsSUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3RCLElBQUlBLElBQU0saUJBQWlCLEdBQUcsRUFBRSxDQUFDO0FBQ2pDLElBQUksMkJBQW1CLG9DQUFLLEVBQUU7QUFDOUIsUUFEU0EsSUFBTTs7UUFDUEEsSUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztBQUMvQyxRQUFRQSxJQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO0FBQzdDLFFBQVFBLElBQU0sZUFBZSxHQUFHLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNsRyxRQUFRLEtBQUtBLElBQU0sT0FBTyxJQUFJLFlBQVksRUFBRTtBQUM1QyxZQUFZQSxJQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDdkQsWUFBWUEsSUFBTSxpQkFBaUIsR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNoRyxZQUFZQSxJQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMzRSxZQUFZLHVCQUEwQixxQ0FBWSxFQUFFO0FBQ3BELGdCQURpQkEsSUFBTTs7Z0JBQ1AsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsRUFBRTtBQUNsRSxvQkFBb0IsaUJBQWlCLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2RSxvQkFBb0IsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNyRCxpQkFBaUI7QUFDakIsYUFBYTtBQUNiLFNBQVM7QUFDVCxLQUFLO0FBQ0wsSUFBSSxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDOztBQy9NRDtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQU0sU0FBUyxHQVNYLGtCQUFXLENBQUMsR0FBRyxNQUFVLFFBQVEsdUJBQTJCO0FBQ2hFLElBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDdkIsSUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUNqQyxJQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNqQixFQUFDO0FBQ0w7QUFDSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7b0JBQ0ksMEJBQVE7QUFDWixJQUFRLEtBQUtBLElBQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDckMsUUFBWSx1QkFBMEIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLDBCQUFDLEVBQUU7QUFDdEQsWUFEaUJBLElBQU07O2dCQUNQLElBQUksV0FBVyxDQUFDLE9BQU8sSUFBRSxZQUFZLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFDO0FBQzNFLFlBQWdCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2pELFNBQWE7QUFDYixLQUFTO0FBQ1Q7QUFDQSxJQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCLElBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDeEI7QUFDQSxJQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLEVBQUM7QUFDTDtBQUNJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO29CQUNJLG9CQUFJLE1BQU0sZ0JBQW9CLElBQUksSUFBUSxhQUFhLGFBQWlCOztBQUFDO0FBQzdFLElBQVFBLElBQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUM7QUFDekMsSUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQzFDLFFBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEMsS0FBUztBQUNUO0FBQ0EsSUFBUUEsSUFBTSxXQUFXLEdBQUc7QUFDNUIsUUFBWSxLQUFLLEVBQUUsSUFBSTtBQUN2QixRQUFZLE9BQU8sRUFBRSxTQUFTO0FBQzlCLEtBQVMsQ0FBQztBQUNWO0FBQ0EsSUFBUSxJQUFJLGFBQWEsS0FBSyxTQUFTLEVBQUU7QUFDekMsUUFBWSxXQUFXLENBQUMsT0FBTyxHQUFHLFVBQVUsYUFBTztBQUNuRCxZQUFnQk8sTUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDakQsU0FBYSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBQzlCLEtBQVM7QUFDVDtBQUNBLElBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDekMsSUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3QjtBQUNBLElBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQzFDLFFBQVlQLElBQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkUsUUFBWSxJQUFJLFdBQVcsSUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFDO0FBQ3hELEtBQVM7QUFDVDtBQUNBLElBQVEsT0FBTyxJQUFJLENBQUM7QUFDaEIsRUFBQztBQUNMO0FBQ0k7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7b0JBQ0ksb0JBQUksTUFBTSxxQkFBNkI7QUFDM0MsSUFBUSxPQUFPLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztBQUM3QyxFQUFDO0FBQ0w7QUFDSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO29CQUNJLHNDQUFhLE1BQU0sbUJBQTJCO0FBQ2xELElBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxFQUFFO0FBQy9DLElBQVEsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pELEVBQUM7QUFDTDtBQUNJO0FBQ0o7QUFDQTtvQkFDSSxrREFBbUIsR0FBRyxTQUFpQjtBQUMzQyxJQUFRQSxJQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzVDLElBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUM7QUFDckQ7QUFDQSxJQUFRLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ3pDLFFBQVksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDLEtBQVM7QUFDVCxJQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0FBQ0EsSUFBUSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDdEIsRUFBQztBQUNMO0FBQ0k7QUFDSjtBQUNBO29CQUNJLDhCQUFTLEdBQUcsU0FBaUI7QUFDakMsSUFBUUEsSUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQyxJQUFRLE9BQU8sSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDLEVBQUM7QUFDTDtBQUNJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7b0JBQ0ksb0JBQUksTUFBTSxtQkFBMkI7QUFDekMsSUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLEVBQUU7QUFDL0M7QUFDQSxJQUFRQSxJQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RCxJQUFRLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztBQUN0QixFQUFDO0FBQ0w7QUFDSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO29CQUNJLDBCQUFPLE1BQU0sZ0JBQW9CLEtBQUssb0NBQXdDO0FBQ2xGLElBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxFQUFFO0FBQy9DLElBQVFBLElBQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUM7QUFDekM7QUFDQSxJQUFRQSxJQUFNLFNBQVMsR0FBRyxLQUFLLEtBQUssU0FBUyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsRixJQUFRQSxJQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9DLElBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzVDLElBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUM7QUFDckQsSUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUN6QyxRQUFZLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQyxLQUFTO0FBQ1QsSUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsQyxJQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3REO0FBQ0EsSUFBUSxPQUFPLElBQUksQ0FBQztBQUNoQixFQUFDO0FBQ0w7QUFDSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtvQkFDSSxrQ0FBVyxHQUFHLGFBQXFCO0FBQ3ZDLElBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDdkI7QUFDQSxJQUFRLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRTtBQUM3QyxRQUFZQSxJQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLFFBQVksSUFBSSxXQUFXLElBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsR0FBQztBQUN4RCxLQUFTO0FBQ1Q7QUFDQSxJQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLEVBQUM7QUFDTDtBQUNJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtvQkFDSSwwQkFBTyxRQUFRLHVCQUEyQjtBQUM5QyxJQUFRQSxJQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFDM0IsSUFBUSxLQUFLQSxJQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ3JDLFFBQVksdUJBQW9CLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRywwQkFBQyxFQUFFO0FBQ2hELFlBRGlCQSxJQUFNOztnQkFDUCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUM1QyxnQkFBb0IsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4QyxhQUFpQjtBQUNqQixTQUFhO0FBQ2IsS0FBUztBQUNULElBQVEsMkJBQWdCLHNDQUFPLEVBQUU7QUFDakMsUUFEYUEsSUFBTTs7WUFDUCxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNDLEtBQVM7QUFDTCxFQUNIOztBQ2pORDtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFNLFdBQVcsR0FLYixvQkFBVyxDQUFDLE9BQU8sT0FBVyxLQUFLLHlEQUE2RCxXQUFXLFFBQVk7QUFDM0gsSUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUMvQixJQUFRQSxJQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDO0FBQzlCLElBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDeEMsSUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNqQztBQUNBLElBQVEsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbkQsSUFBUSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDdkg7QUFDQSxJQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO0FBQy9CLFFBQVksT0FBTyxLQUFLLENBQUMsV0FBVyxDQUFDO0FBQ3JDLEtBQVM7QUFDTCxFQUFDO0FBQ0w7c0JBQ0ksd0JBQU87QUFDWCxJQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNwRCxFQUFDO0FBQ0w7c0JBQ0ksa0NBQVcsS0FBSyxXQUFlO0FBQ25DLElBQVFBLElBQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO0FBQ25DLElBQVFTLGtCQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2pDO0FBQ0E7QUFDQSxJQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDakMsSUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEIsSUFBUSxFQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3BFLEVBQUM7QUFDTDtzQkFDSSw4QkFBVTtBQUNkLElBQVFULElBQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO0FBQ25DLElBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ3pCLFFBQVksRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDekMsUUFBWSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDL0IsS0FBUztBQUNMLEVBQ0g7O0FDcEREO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBQSxJQUFNLGFBQWEsR0FBRztBQUN0QixJQUFJLElBQUksSUFBSSxNQUFNO0FBQ2xCLElBQUksS0FBSyxHQUFHLGVBQWU7QUFDM0IsSUFBSSxLQUFLLEdBQUcsT0FBTztBQUNuQixJQUFJLE1BQU0sRUFBRSxnQkFBZ0I7QUFDNUIsSUFBSSxLQUFLLEdBQUcsS0FBSztBQUNqQixJQUFJLE1BQU0sRUFBRSxjQUFjO0FBQzFCLElBQUksT0FBTyxFQUFFLE9BQU87QUFDcEIsQ0FBQyxDQUFDO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBTSxZQUFZLEdBWWQscUJBQVcsQ0FBQyxPQUFPLE9BQVcsS0FBSyxXQUFlLFVBQVUsaUNBQXFDLFdBQVcsUUFBWTtBQUM1SCxJQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUNuQyxJQUFRLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQ3JDLElBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDO0FBQzlDLElBQVEsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7QUFDdkM7QUFDQSxJQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQy9CLElBQVFBLElBQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUM7QUFDOUIsSUFBUSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUN4QyxJQUFRLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2xELElBQVEsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUMvRztBQUNBLElBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7QUFDL0IsUUFBWSxPQUFPLEtBQUssQ0FBQyxXQUFXLENBQUM7QUFDckMsS0FBUztBQUNMLEVBQUM7QUFDTDt1QkFDSSx3QkFBTztBQUNYLElBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ25ELEVBQUM7QUFDTDt1QkFDSSxrQ0FBVyxLQUFLLFdBQWU7QUFDbkMsSUFBUVMsa0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM3QyxJQUFRVCxJQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztBQUNuQyxJQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQixJQUFRLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzVELEVBQUM7QUFDTDt1QkFDSSw4Q0FBaUIsRUFBRSxxQkFBeUIsT0FBTyxVQUFjO0FBQ3JFLElBQVEsS0FBS0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6RCxRQUFZQyxJQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlDLFFBQVlBLElBQU0sV0FBVyxjQUFrQixPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvRSxRQUFZLElBQUksV0FBVyxLQUFLLFNBQVMsRUFBRTtBQUMzQyxZQUFnQixFQUFFLENBQUMsdUJBQXVCLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDeEQsU0FBYTtBQUNiLEtBQVM7QUFDTCxFQUFDO0FBQ0w7QUFDSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7dUJBQ0ksNERBQXdCLEVBQUUscUJBQXlCLE9BQU8sVUFBYyxZQUFZLE9BQVc7QUFDbkcsSUFBUSxLQUFLRCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3pELFFBQVlDLElBQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUMsUUFBWUEsSUFBTSxXQUFXLGNBQWtCLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQy9FO0FBQ0EsUUFBWSxJQUFJLFdBQVcsS0FBSyxTQUFTLEVBQUU7QUFDM0MsWUFBZ0IsRUFBRSxDQUFDLG1CQUFtQjtBQUN0QyxnQkFBb0IsV0FBVztBQUMvQixnQkFBb0IsTUFBTSxDQUFDLFVBQVU7QUFDckMsZ0JBQW9CLENBQUMsRUFBRSxHQUFPLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDekQsZ0JBQW9CLEtBQUs7QUFDekIsZ0JBQW9CLElBQUksQ0FBQyxRQUFRO0FBQ2pDLGdCQUFvQixNQUFNLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pFLGFBQWlCLENBQUM7QUFDbEIsU0FBYTtBQUNiLEtBQVM7QUFDTCxFQUFDO0FBQ0w7QUFDSTtBQUNKO0FBQ0E7dUJBQ0ksOEJBQVU7QUFDZCxJQUFRQSxJQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztBQUNuQyxJQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUN6QixRQUFZLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3pDLFFBQVksT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQy9CLEtBQVM7QUFDTCxFQUNIOztBQ3BIRDtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFNLFNBQVMsR0FNWCxrQkFBVyxDQUFDLE9BQU8sT0FBVztBQUNsQyxJQUFRLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQztBQUM3QixJQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ3pDLElBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ3BDLElBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDdkIsRUFBQztBQUNMO29CQUNJLHFCQUFTO0FBQ2IsSUFBUSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDeEIsRUFBQztvQkFDRCxvQkFBSSxLQUFLLEtBQUs7QUFDbEI7QUFDSSxFQUFDO0FBQ0w7b0JBQ0ksbUNBQWdCO0FBQ3BCLElBQVEsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ3hCLEVBQUM7b0JBQ0Qsb0NBQWE7QUFDakIsSUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUMzQixFQUNIO0FBQ0Q7QUFDTyxJQUFNLFVBQVU7Ozs7Ozs7Ozt5QkFDbkIsMkNBQW9CO0FBQ3hCLFFBQVEsT0FBT2dVLGlCQUFLLENBQUMsV0FBVyxDQUFDO0FBQ2pDLE1BQUs7QUFDTCx5QkFBSSxvQkFBSSxDQUFDLFNBQVM7QUFDbEIsUUFBUWhVLElBQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDL0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUUsU0FBTztBQUM1RixRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQyxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDM0I7OztFQVZnQyxZQVcvQjtBQUNEO0FBQ08sSUFBTSxVQUFVOzs7Ozs7Ozs7eUJBQ25CLDRDQUFxQjtBQUN6QixRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCLE1BQUs7QUFDTCx5QkFBSSxvQkFBSSxDQUFDLFVBQVU7QUFDbkIsUUFBUSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBRSxTQUFPO0FBQ3RELFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUN6QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQzNCOzs7RUFUZ0MsWUFVL0I7QUFDRDtBQUNPLElBQU0sWUFBWTs7Ozs7Ozs7OzJCQUNyQiw0Q0FBcUI7QUFDekIsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQixNQUFLO0FBQ0wsMkJBQUksb0JBQUksQ0FBQyxVQUFVO0FBQ25CLFFBQVEsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUUsU0FBTztBQUN0RCxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDekIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUMzQjs7O0VBVGtDLFlBVWpDO0FBQ0Q7QUFDTyxJQUFNLFNBQVM7Ozs7Ozs7Ozt3QkFDbEIsbURBQTRCO0FBQ2hDLFFBQVEsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3hDLE1BQUs7QUFDTCx3QkFBSSxvQkFBSSxDQUFDLGlCQUFpQjtBQUMxQixRQUFRQSxJQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQy9CLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBRSxTQUFPO0FBQ3BHLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEQsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUN6QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQzNCOzs7RUFWK0IsWUFXOUI7QUFDRDtBQUNPLElBQU0sU0FBUzs7Ozs7Ozs7O3dCQUNsQixtREFBNEI7QUFDaEMsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQixNQUFLO0FBQ0wsd0JBQUksb0JBQUksQ0FBQyx1QkFBdUI7QUFDaEMsUUFBUSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBRSxTQUFPO0FBQ3RELFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUN6QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQzNCOzs7RUFUK0IsWUFVOUI7QUFDRDtBQUNPLElBQU0sV0FBVzs7Ozs7Ozs7OzBCQUNwQiw0Q0FBcUI7QUFDekIsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQixNQUFLO0FBQ0wsMEJBQUksb0JBQUksQ0FBQyxnQkFBZ0I7QUFDekIsUUFBUSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBRSxTQUFPO0FBQ3RELFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUN6QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQzNCOzs7RUFUaUMsWUFVaEM7QUFDRDtBQUNPLElBQU0sV0FBVzs7Ozs7Ozs7OzBCQUNwQixxREFBOEI7QUFDbEMsUUFBUSxPQUFPO0FBQ2YsWUFBWSxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNO0FBQ2hDLFlBQVksR0FBRyxFQUFFLENBQUM7QUFDbEIsWUFBWSxJQUFJLEVBQUUsSUFBSTtBQUN0QixTQUFTLENBQUM7QUFDVixNQUFLO0FBQ0wsMEJBQUksb0JBQUksQ0FBQyx5QkFBeUI7QUFDbEMsUUFBUUEsSUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUMvQixRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFFLFNBQU87QUFDN0YsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25ELFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDekIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUMzQjs7O0VBZGlDLFlBZWhDO0FBQ0Q7QUFDTyxJQUFNLFNBQVM7Ozs7Ozs7Ozt3QkFDbEIsbURBQTRCO0FBQ2hDLFFBQVFBLElBQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDM0IsUUFBUSxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzQyxNQUFLO0FBQ0wsd0JBQUksb0JBQUksQ0FBQyxpQkFBaUI7QUFDMUIsUUFBUUEsSUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUMvQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFFLFNBQU87QUFDbkYsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVDLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDekIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUMzQjs7O0VBWCtCLFlBWTlCO0FBQ0Q7QUFDTyxJQUFNLFdBQVc7Ozs7Ozs7OzswQkFDcEIsNkNBQXNCO0FBQzFCLFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckIsTUFBSztBQUNMLDBCQUFJLG9CQUFJLENBQUMsV0FBVztBQUNwQixRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFFLFNBQU87QUFDdEQsUUFBUUEsSUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUMzQixRQUFRLElBQUksQ0FBQyxFQUFFO0FBQ2YsWUFBWSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUN2QyxTQUFTLE1BQU07QUFDZixZQUFZLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3hDLFNBQVM7QUFDVCxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDM0I7OztFQWRpQyxZQWVoQztBQUNEO0FBQ08sSUFBTSxVQUFVOzs7Ozs7Ozs7eUJBQ25CLG9EQUE2QjtBQUNqQyxRQUFRLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdEIsTUFBSztBQUNMLHlCQUFJLG9CQUFJLENBQUMsa0JBQWtCO0FBQzNCLFFBQVFBLElBQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDL0IsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUUsU0FBTztBQUNsRSxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QyxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDM0I7OztFQVZnQyxZQVcvQjtBQUNEO0FBQ08sSUFBTSxTQUFTOzs7Ozs7Ozs7d0JBQ2xCLDZDQUFzQjtBQUMxQixRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCLE1BQUs7QUFDTCx3QkFBSSxvQkFBSSxDQUFDLFdBQVc7QUFDcEIsUUFBUSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBRSxTQUFPO0FBQ3RELFFBQVFBLElBQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDM0IsUUFBUSxJQUFJLENBQUMsRUFBRTtBQUNmLFlBQVksRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDckMsU0FBUyxNQUFNO0FBQ2YsWUFBWSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN0QyxTQUFTO0FBQ1QsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUN6QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQzNCOzs7RUFkK0IsWUFlOUI7QUFDRDtBQUNPLElBQU0sU0FBUzs7Ozs7Ozs7O3dCQUNsQixtREFBNEI7QUFDaEMsUUFBUSxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQzVCLE1BQUs7QUFDTCx3QkFBSSxvQkFBSSxDQUFDLGlCQUFpQjtBQUMxQixRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFFLFNBQU87QUFDdEQsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QixRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDM0I7OztFQVQrQixZQVU5QjtBQUNEO0FBQ08sSUFBTSxLQUFLOzs7Ozs7Ozs7b0JBQ2QsNkNBQXNCO0FBQzFCLFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckIsTUFBSztBQUNMLG9CQUFJLG9CQUFJLENBQUMsV0FBVztBQUNwQixRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFFLFNBQU87QUFDdEQsUUFBUUEsSUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUMzQixRQUFRLElBQUksQ0FBQyxFQUFFO0FBQ2YsWUFBWSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoQyxTQUFTLE1BQU07QUFDZixZQUFZLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2pDLFNBQVM7QUFDVCxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDM0I7OztFQWQyQixZQWUxQjtBQUNEO0FBQ08sSUFBTSxTQUFTOzs7Ozs7Ozs7d0JBQ2xCLG1EQUE0QjtBQUNoQyxRQUFRQSxJQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzNCLFFBQVEsT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLE1BQUs7QUFDTCx3QkFBSSxvQkFBSSxDQUFDLGlCQUFpQjtBQUMxQixRQUFRQSxJQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQy9CLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFFLFNBQU87QUFDbEUsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUN6QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQzNCOzs7RUFYK0IsWUFZOUI7QUFDRDtBQUNPLElBQU0sVUFBVTs7Ozs7Ozs7O3lCQUNuQiwyQ0FBb0I7QUFDeEIsUUFBUSxPQUFPZ1UsaUJBQUssQ0FBQyxXQUFXLENBQUM7QUFDakMsTUFBSztBQUNMLHlCQUFJLG9CQUFJLENBQUMsU0FBUztBQUNsQixRQUFRaFUsSUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUMvQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBRSxTQUFPO0FBQzVGLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9DLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDekIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUMzQjs7O0VBVmdDLFlBVy9CO0FBQ0Q7QUFDTyxJQUFNLGFBQWE7Ozs7Ozs7Ozs0QkFDdEIsdURBQWdDO0FBQ3BDLFFBQVEsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQztBQUNoQyxNQUFLO0FBQ0wsNEJBQUksb0JBQUksQ0FBQyxxQkFBcUI7QUFDOUIsUUFBUSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBRSxTQUFPO0FBQ3RELFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUN6QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQzNCOzs7RUFUbUMsWUFVbEM7QUFDRDtBQUNPLElBQU0sUUFBUTs7Ozs7Ozs7O3VCQUNqQiw2Q0FBc0I7QUFDMUIsUUFBUSxPQUFPLEtBQUssQ0FBQztBQUNyQixNQUFLO0FBQ0wsdUJBQUksb0JBQUksQ0FBQyxXQUFXO0FBQ3BCLFFBQVEsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUUsU0FBTztBQUN0RCxRQUFRQSxJQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLEVBQUU7QUFDZixZQUFZLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3BDLFNBQVMsTUFBTTtBQUNmLFlBQVksRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDckMsU0FBUztBQUNULFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDekIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUMzQjs7O0VBZDhCLFlBZTdCO0FBQ0Q7QUFDTyxJQUFNLFlBQVk7Ozs7Ozs7OzsyQkFDckIsc0RBQStCO0FBQ25DLFFBQVEsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQztBQUM1QixNQUFLO0FBQ0wsMkJBQUksb0JBQUksQ0FBQyxvQkFBb0I7QUFDN0IsUUFBUSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBRSxTQUFPO0FBQ3RELFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUN6QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQzNCOzs7RUFUa0MsWUFVakM7QUFDRDtBQUNPLElBQU0sU0FBUzs7Ozs7Ozs7O3dCQUNsQixtREFBNEI7QUFDaEMsUUFBUSxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO0FBQzNCLE1BQUs7QUFDTCx3QkFBSSxvQkFBSSxDQUFDLGlCQUFpQjtBQUMxQixRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFFLFNBQU87QUFDdEQsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QixRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDM0I7OztFQVQrQixZQVU5QjtBQUNEO0FBQ08sSUFBTSxPQUFPOzs7Ozs7Ozs7c0JBQ2hCLGtEQUEyQjtBQUMvQixRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCLE1BQUs7QUFDTCxzQkFBSSxvQkFBSSxDQUFDLGlCQUFpQjtBQUMxQixRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFFLFNBQU87QUFDdEQsUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDM0I7OztFQVQ2QixZQVU1QjtBQUNEO0FBQ08sSUFBTSxpQkFBaUI7Ozs7Ozs7OztnQ0FDMUIscURBQThCO0FBQ2xDLFFBQVEsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQztBQUNoQyxNQUFLO0FBQ0wsZ0NBQUksb0JBQUksQ0FBQyxtQkFBbUI7QUFDNUIsUUFBUSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBRSxTQUFPO0FBQ3RELFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUN6QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQzNCOzs7RUFUdUMsWUFVdEM7QUFDRDtBQUNPLElBQU0sUUFBUTs7Ozs7Ozs7O3VCQUNqQixrREFBMkI7QUFDL0IsUUFBUUEsSUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUMzQixRQUFRLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUNyRSxNQUFLO0FBQ0wsdUJBQUksb0JBQUksQ0FBQyxnQkFBZ0I7QUFDekIsUUFBUUEsSUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUMvQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUUsU0FBTztBQUNwRyxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pELFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDekIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUMzQjs7O0VBWDhCLFlBWTdCO0FBQ0Q7QUFDTyxJQUFNLGVBQWU7Ozs7Ozs7Ozs4QkFDeEIsc0RBQStCO0FBQ25DLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsTUFBSztBQUNMLDhCQUFJLG9CQUFJLENBQUMscUJBQXFCO0FBQzlCLFFBQVEsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUUsU0FBTztBQUN0RCxRQUFRQSxJQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzNCLFFBQVEsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlDLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDekIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUMzQjs7O0VBVnFDLFlBV3BDO0FBQ0Q7QUFDTyxJQUFNLGdCQUFnQjs7Ozs7Ozs7OytCQUN6Qix1REFBZ0M7QUFDcEMsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQixNQUFLO0FBQ0wsK0JBQUksb0JBQUksQ0FBQyxzQkFBc0I7QUFDL0IsUUFBUSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBRSxTQUFPO0FBQ3RELFFBQVFBLElBQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDM0IsUUFBUSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNoRCxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDM0I7OztFQVZzQyxZQVdyQztBQUNEO0FBQ08sSUFBTSxXQUFXOzs7Ozs7Ozs7MEJBQ3BCLGtEQUEyQjtBQUMvQixRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCLE1BQUs7QUFDTCwwQkFBSSxvQkFBSSxDQUFDLGlCQUFpQjtBQUMxQixRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFFLFNBQU87QUFDdEQsUUFBUUEsSUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUMzQixRQUFRLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN6QyxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDM0I7OztFQVZpQyxZQVdoQztBQUNEO0FBQ08sSUFBTSxnQkFBZ0I7Ozs7Ozs7OzsrQkFDekIsaURBQTBCO0FBQzlCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsTUFBSztBQUNMLCtCQUFJLG9CQUFJLENBQUMsZ0JBQWdCO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUUsU0FBTztBQUN0RCxRQUFRQSxJQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzNCLFFBQVEsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzFDLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDekIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUMzQjs7O0VBVnNDLFlBV3JDO0FBQ0Q7QUFDTyxJQUFNLGlCQUFpQjs7Ozs7Ozs7O2dDQUMxQixpREFBMEI7QUFDOUIsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQixNQUFLO0FBQ0wsZ0NBQUksb0JBQUksQ0FBQyxnQkFBZ0I7QUFDekI7QUFDQSxRQUFRQSxJQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzNCLFFBQVEsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEQsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUN6QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQzNCOzs7RUFWdUMsWUFXdEM7QUFDRDtBQUNPLElBQU0sa0JBQWtCO0lBRzNCLDJCQUFXLENBQUMsT0FBTyxXQUFXO0FBQ2xDLFFBQVFRLGNBQUssT0FBQyxPQUFPLENBQUMsQ0FBQztBQUN2QixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixDQUFDO0FBQ2hEOzs7O2tFQUFLO0FBQ0wsaUNBQUkseUNBQWtCO0FBQ3RCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsTUFBSztBQUNMLGlDQUFJLG9CQUFJLENBQUMsT0FBTztBQUNoQixRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBRSxTQUFPO0FBQ25FLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QyxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDM0I7OztFQWZ3QyxZQWdCdkM7QUFDRDtBQUNPLElBQU0sZ0JBQWdCOzs7Ozs7Ozs7K0JBQ3pCLDRDQUFxQjtBQUN6QixRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCLE1BQUs7QUFDTCwrQkFBSSxvQkFBSSxDQUFDLFVBQVU7QUFDbkIsUUFBUSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBRSxTQUFPO0FBQ3RELFFBQVFSLElBQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDM0IsUUFBUSxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvQyxRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDM0I7OztFQVZzQyxZQVdyQztBQUNEO0FBQ08sSUFBTSxnQ0FBZ0M7Ozs7Ozs7OzsrQ0FDekMsNkNBQXNCO0FBQzFCLFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckIsTUFBSztBQUNMLCtDQUFJLG9CQUFJLENBQUMsaUJBQWlCO0FBQzFCLFFBQVEsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUUsU0FBTztBQUN0RCxRQUFRQSxJQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzNCLFFBQVEsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsOEJBQThCLEdBQUcsQ0FBQyxPQUFPLENBQUM7QUFDcEUsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUN6QixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQzNCOzs7RUFWc0QsWUFXckQ7QUFDRDtBQUNPLElBQU0scUJBQXFCOzs7Ozs7Ozs7b0NBQzlCLDZDQUFzQjtBQUMxQixRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCLE1BQUs7QUFDTCxvQ0FBSSxvQkFBSSxDQUFDLGlCQUFpQjtBQUMxQixRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFFLFNBQU87QUFDdEQsUUFBUUEsSUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUMzQixRQUFRLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLG1CQUFtQixHQUFHLENBQUMsT0FBTyxDQUFDO0FBQ3pELFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDekIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUMzQjs7O0VBVjJDLFlBVzFDO0FBQ0Q7QUFDQSxJQUFNLHFCQUFxQjtJQUl2Qiw4QkFBVyxDQUFDLE9BQU8sV0FBVyxNQUFNLG9CQUFvQjtBQUM1RCxRQUFRUSxjQUFLLE9BQUMsT0FBTyxDQUFDLENBQUM7QUFDdkIsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUMvQixRQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQzdCOzs7O3dFQUFLO0FBQ0wsb0NBQUksb0NBQWE7QUFDakIsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjs7O0VBWHVDLFlBWXRDO0FBQ0Q7QUFDTyxJQUFNLGVBQWU7Ozs7Ozs7Ozs4QkFDeEIsZ0NBQVc7QUFDZixRQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQzFCLE1BQUs7QUFDTCw4QkFBSSxvQkFBSSxDQUFDLHVCQUF1QjtBQUNoQyxRQUFRLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFFLFNBQU87QUFDdEQsUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3REO0FBQ0E7QUFDQSxRQUFRUixJQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzNCLFFBQVEsRUFBRSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNGLFFBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDekIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUMzQjs7O0VBYnFDLHdCQWNwQztBQUNEO0FBQ08sSUFBTSxlQUFlOzs7Ozs7Ozs7OEJBQ3hCLG9CQUFJLENBQUMsNEJBQTRCO0FBQ3JDLFFBQVEsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUUsU0FBTztBQUN0RCxRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEQ7QUFDQTtBQUNBLFFBQVFBLElBQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDM0IsUUFBUSxFQUFFLENBQUMsdUJBQXVCLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM1RixRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDM0I7OztFQVZxQyx3QkFXcEM7O0FDdmdCRDtBQUNBO0FBR0E7QUFDQTtBQUNBLElBQU0sV0FBVyxHQVFiLG9CQUFXLENBQUMsT0FBTyxPQUFXLEtBQUssTUFBVSxNQUFNLE1BQVUsUUFBUSxPQUFXO0FBQ3BGLElBQVEsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDL0IsSUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUMzQixJQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQzdCLElBQVFBLElBQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUM7QUFDOUIsSUFBUUEsSUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztBQUM5RDtBQUNBLElBQVEsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDakUsSUFBUSxJQUFJLFFBQVEsRUFBRTtBQUN0QixRQUFZLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3JFLEtBQVM7QUFDVCxJQUFRUyxrQkFBTSxDQUFDLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFDbEYsRUFBQztBQUNMO3NCQUNJLDhCQUFVO0FBQ2QsSUFBUVQsSUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7QUFDbkM7QUFDQSxJQUFRQSxJQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ25ELElBQVEsSUFBSSxPQUFPLElBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBQztBQUMvQztBQUNBLElBQVEsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO0FBQ2xDLFFBQVlBLElBQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDNUQsUUFBWSxJQUFJLFlBQVksSUFBRSxFQUFFLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLEdBQUM7QUFDbEUsS0FBUztBQUNUO0FBQ0EsSUFBUSxFQUFFLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzNDLEVBQ0g7O0FDekNEO0FBQ0E7QUFDQTtBQUNBQSxJQUFNLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDdEI7QUFDQSxJQUFNLFNBQVMsR0FTWCxrQkFBVyxDQUFDLFNBQVMsYUFBaUIsU0FBUyxhQUFpQixVQUFVLGNBQWtCO0FBQ2hHLElBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7QUFDOUIsSUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztBQUM5QixJQUFRLElBQUksQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDO0FBQzVCLEVBR0g7QUFDRDtBQUNBLFNBQVMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzNCLFNBQVMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzNCO0FBQ0EsU0FBUyxDQUFDLFFBQVEsR0FBRyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDOztBQzFCdkU7QUFDQTtBQUNBO0FBQ0FBLElBQU1pVSxRQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3RCalUsSUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ3BCO0FBQ0EsSUFBTSxXQUFXLEdBUWIsb0JBQVcsQ0FBQyxJQUFJLFdBQWUsR0FBRyxNQUFVLElBQUksTUFBVSxJQUFJO0FBQ2xFLElBQVEsU0FBUyxpQkFBcUIsSUFBSSxpQkFBcUI7QUFDL0QsSUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUN6QixJQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ3ZCLElBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDekIsSUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUN6QixJQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBQ25DLElBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDckIsRUFHSDtBQUNEO0FBQ0EsV0FBVyxDQUFDLFFBQVEsR0FBRyxJQUFJLFdBQVcsQ0FBQyxDQUFDLElBQUksRUFBRWlVLFFBQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDOztBQzNCeEY7QUFDQTtBQUVBO0FBQ0E7QUFDQWpVLElBQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNwQkEsSUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ25CQSxJQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBQztBQUNuQztBQUNBLElBQU0sU0FBUyxHQUtYLGtCQUFXLENBQUMsYUFBYSxhQUFpQixVQUFVLEtBQVMsSUFBSSxhQUFpQjtBQUN0RixJQUFRLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0FBQzNDLElBQVEsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7QUFDckMsSUFBUSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNyQixFQU9IO0FBQ0Q7QUFDQSxTQUFTLENBQUMsT0FBTyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2hDO0FBQ0EsU0FBUyxDQUFDLFFBQVEsR0FBRyxJQUFJLFNBQVMsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFZ1UsaUJBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3ZHLFNBQVMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRUEsaUJBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BHLFNBQVMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsbUJBQW1CLENBQUMsRUFBRUEsaUJBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDOztBQy9CaEg7QUFDQTtBQUNBO0FBQ0E7QUFDQWhVLElBQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNwQkEsSUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ25CO0FBQ0EsSUFBTSxZQUFZLEdBS2QscUJBQVcsQ0FBQyxNQUFNLE9BQVcsSUFBSSxnQkFBb0IsU0FBUyxhQUFpQjtBQUNuRixJQUFRLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQzdCLElBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDekIsSUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztBQUMvQixFQUlIO0FBQ0Q7QUFDQSxZQUFZLENBQUMsUUFBUSxHQUFHLElBQUksWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDM0QsWUFBWSxDQUFDLE9BQU8sR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDOztBQ3ZCekQ7QUFDQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBTSxPQUFPLEdBMkNULGdCQUFXLENBQUMsRUFBRSx1QkFBeUI7QUFDM0MsTUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNyQixNQUFRLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0FBQ3BGO0FBQ0EsTUFBUSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQy9DLE1BQVEsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvQyxNQUFRLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkQsTUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdDLE1BQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3QyxNQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakQsTUFBUSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pELE1BQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3QyxNQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakQsTUFBUSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQy9DLE1BQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3QyxNQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0MsTUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JDLE1BQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3QyxNQUFRLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0MsTUFBUSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JELE1BQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzQyxNQUFRLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkQsTUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLElB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Z0NBQVc7QUFDZixNQUFRLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNyQyxNQUFRLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNyQyxNQUFRLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUN2QyxNQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNwQyxNQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNwQyxNQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUN0QyxNQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUN0QyxNQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNwQyxNQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUN0QyxNQUFRLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNyQyxNQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNwQyxNQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNwQyxNQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNoQyxNQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNwQyxNQUFRLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNyQyxNQUFRLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUN4QyxNQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNuQyxNQUFRLElBQUksQ0FBQyxZQUFZLENB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QUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdkMsVUFBWSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekQsT0FBUztBQUNUO0FBQ0EsTUFBUSxJQUFJLE9BQU8sS0FBSyxLQUFLLFdBQVcsRUFBRTtBQUMxQyxVQUFZLElBQUksSUFBSSxFQUFFLENBQUMsZ0JBQWdCLENBQUM7QUFDeEM7QUFDQTtBQUNBO0FBQ0EsVUFBWSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDO0FBQ0EsVUFBWSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN2QyxVQUFZLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JDLE9BQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3ZCLElBQUs7QUFDTDtBQUNBLG9CQUFJLG9DQUFZLFlBQVkseUJBQTJCO0FBQ3ZELE1BQVEsSUFBSSxZQUFZLENBQUMsTUFBTSxLQUFLLEtBQUssRUFBRTtBQUMzQyxVQUFZLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JDLE9BQVMsTUFBTTtBQUNmLFVBQVksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEMsVUFBWSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckQsVUFBWSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDdkQsT0FBUztBQUNULElBQUs7QUFDTDtB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SSxDQUFDLEVBQUU7QUFDL0MsWUFBWSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RSxTQUFTO0FBQ1QsUUFBUSxJQUFJLENBQUNBLHFCQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDckQsWUFBWSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRixTQUFTO0FBQ1QsUUFBUSxJQUFJLENBQUNBLHFCQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDakQsWUFBWSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvRSxTQUFTO0FBQ1QsUUFBUSxJQUFJLENBQUNBLHFCQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDbkQsWUFBWSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRixTQUFTO0FBQ1QsUUFBUSxJQUFJLENBQUNBLHFCQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDbkQsWUFBWSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxF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QUFTLENBQUM7QUFDdkMsU0FBWSxDQUFDLEVBQUUsRUFBRSxhQUFhLEVBQUUsU0FBUyxDQUFDO0FBQzFDO0FBQ0EsU0FBWSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDO0FBQ3hDLFNBQVksQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQztBQUN4QyxTQUFZLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUM7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBWSxDQUFDRSxrQkFBTSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0QsU0FBWSxDQUFDQSxrQkFBTSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDO0FBQ25EO0FBQ0EsU0FBWSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDO0FBQ3hDLFNBQVksQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQztBQUN2QyxTQUFZLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxTQUFTLENBQUM7QUFDdkMsU0FBWSxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDO0FBQ3BDO0FBQ0EsU0FBWSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDN0MsU0FBWSxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDO0FBQ3BDO0FBQ0EsU0FBWSxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDM0MsU0FBWSxDQUFDLEVBQUUsRUFBRSxhQUFhLEVBQUUsU0FBUyxDQUFDO0FBQzFDO0FBQ0EsU0FBWSxDQUFDQSxrQkFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUM7QUFDdkMsTUFBUyxDQUFDO0FBQ1Y7QUFDQSxLQUFRLHVCQUE4QyxJQUFJLENBQUMsbUNBQVUsRUFBRTtB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SUFBTSxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxDQUFDO0FBQ2hFLFlBQVksR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzQyxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFFBQVFBLElBQU0sSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUN0QixZQUFZQSxJQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNuSCxZQUFZLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEQsU0FBUztBQUNUO0FBQ0EsUUFBUSxTQUFTLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7QUFDckUsUUFBUSxTQUFTLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7QUFDckUsUUFBUSxTQUFTLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUN0RDtBQUNBO0FBQ0EsUUFBUUEsSUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLFFBQVFELElBQUksQ0FBQywwQkFBMEIsVUFBVSxDQUFDLEVBQUU7QUFDcEQsWUFBWSxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRTtBQUNuRCxTQUFTLENBQUM7QUFDVjtBQUNBO0FBQ0E7QUFDQSxRQUFRQSxJQUFJLENBQUMsMEJBQTBCLFVBQVUsQ0FBQyxFQUFFO0FBQ3BELFlBQVksT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqRixTQUFTLENBQUM7QUFDVjtBQUNBO0FBQ0EsUUFBUUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQztBQUNsQztBQUNBO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3JEO0FBQ0EsWUFBWSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLFFBQVEsSUFBRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxHQUFDO0FBQ3JGO0FBQ0EsWUFBWUMsSUFBTSxDQUFDLEdB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 diff --git a/lib/mapbox-gl/rails/version.rb b/lib/mapbox-gl/rails/version.rb index dff7f61..0f57bc8 100644 --- a/lib/mapbox-gl/rails/version.rb +++ b/lib/mapbox-gl/rails/version.rb @@ -16,7 +16,7 @@ module VERSION # Minor version number MINOR = 10 # Smallest version number - TINY = 0 + TINY = 1 # Full version number STRING = [MAJOR, MINOR, TINY].compact.join('.')